{"version":3,"sources":["../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/classCallCheck.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/createClass.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/inherits.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/typeof.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/createSuper.js","../../src/index.ts","../node_modules/lodash/lodash.js","../../src/StringUtils.ts","../../src/LocaleValue.ts","../../src/DateTime.ts","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../node_modules/webpack/buildin/module.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../node_modules/bignumber.js/bignumber.js","../../src/I8N.ts","../node_modules/@eres/core/node_modules/moment/moment.js","../../src/Utils.ts","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js","../../src/Proxy.ts","../../src/Currency.ts","../node_modules/@eres/core/node_modules/moment/locale/ar.js","../node_modules/@eres/core/node_modules/moment/locale/en-gb.js","../../../src/TextFilters/RegExFilter.ts","../../src/availableProps.ts","../../src/Provider.tsx","../../src/UserAgent.tsx","../node_modules/ua-parser-js/src/ua-parser.js","../node_modules/compare-versions/index.mjs","../node_modules/react-cache-buster/dist/index.modern.js"],"names":["_classCallCheck","instance","Constructor","TypeError","_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","_createClass","protoProps","staticProps","prototype","_inherits","subClass","superClass","create","constructor","value","_typeof","obj","Symbol","iterator","_possibleConstructorReturn","self","call","assertThisInitialized","_createSuper","Derived","result","Super","getPrototypeOf","isNativeReflectConstruct","NewTarget","this","Reflect","construct","arguments","apply","FUNC_ERROR_TEXT","PLACEHOLDER","wrapFlags","argsTag","arrayTag","boolTag","dateTag","errorTag","funcTag","genTag","mapTag","numberTag","objectTag","regexpTag","setTag","stringTag","symbolTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint16Tag","uint32Tag","reEmptyStringLeading","reEmptyStringMiddle","reEmptyStringTrailing","reEscapedHtml","reUnescapedHtml","reHasEscapedHtml","RegExp","source","reHasUnescapedHtml","reEscape","reEvaluate","reInterpolate","reIsDeepProp","reIsPlainProp","rePropName","reRegExpChar","reHasRegExpChar","reTrim","reTrimStart","reTrimEnd","reWrapComment","reWrapDetails","reSplitDetails","reAsciiWord","reEscapeChar","reEsTemplate","reFlags","reIsBadHex","reIsBinary","reIsHostCtor","reIsOctal","reIsUint","reLatin","reNoMatch","reUnescapedString","rsComboRange","rsComboMarksRange","rsBreakRange","rsMathOpRange","rsAstral","rsBreak","rsCombo","rsDigits","rsDingbat","rsLower","rsMisc","rsFitz","rsNonAstral","rsRegional","rsSurrPair","rsUpper","rsMiscLower","rsMiscUpper","reOptMod","rsSeq","join","rsEmoji","rsSymbol","reApos","reComboMark","reUnicode","reUnicodeWord","reHasUnicode","reHasUnicodeWord","contextProps","templateCounter","typedArrayTags","cloneableTags","stringEscapes","freeParseFloat","parseFloat","freeParseInt","parseInt","freeGlobal","global","freeSelf","root","Function","freeExports","exports","nodeType","freeModule","module","moduleExports","freeProcess","process","nodeUtil","types","require","binding","e","nodeIsArrayBuffer","isArrayBuffer","nodeIsDate","isDate","nodeIsMap","isMap","nodeIsRegExp","isRegExp","nodeIsSet","isSet","nodeIsTypedArray","isTypedArray","func","thisArg","args","arrayAggregator","array","setter","iteratee","accumulator","index","arrayEach","arrayEachRight","arrayEvery","predicate","arrayFilter","resIndex","arrayIncludes","baseIndexOf","arrayIncludesWith","comparator","arrayMap","Array","arrayPush","values","offset","arrayReduce","initAccum","arrayReduceRight","arraySome","asciiSize","baseProperty","baseFindKey","collection","eachFunc","baseFindIndex","fromIndex","fromRight","strictIndexOf","baseIsNaN","baseIndexOfWith","baseMean","baseSum","object","undefined","basePropertyOf","baseReduce","current","baseTimes","n","baseUnary","baseValues","cacheHas","cache","has","charsStartIndex","strSymbols","chrSymbols","charsEndIndex","countHolders","placeholder","deburrLetter","escapeHtmlChar","escapeStringChar","chr","hasUnicode","string","test","mapToArray","map","size","forEach","overArg","transform","arg","replaceHolders","setToArray","set","setToPairs","stringSize","lastIndex","unicodeSize","stringToArray","match","unicodeToArray","split","asciiToArray","unescapeHtmlChar","_","runInContext","context","defaults","pick","Date","Error","Math","String","arrayProto","funcProto","objectProto","coreJsData","funcToString","toString","hasOwnProperty","idCounter","maskSrcKey","uid","exec","keys","IE_PROTO","nativeObjectToString","objectCtorString","oldDash","reIsNative","replace","Buffer","Uint8Array","allocUnsafe","getPrototype","objectCreate","propertyIsEnumerable","splice","spreadableSymbol","isConcatSpreadable","symIterator","symToStringTag","toStringTag","getNative","ctxClearTimeout","clearTimeout","ctxNow","now","ctxSetTimeout","setTimeout","nativeCeil","ceil","nativeFloor","floor","nativeGetSymbols","getOwnPropertySymbols","nativeIsBuffer","isBuffer","nativeIsFinite","isFinite","nativeJoin","nativeKeys","nativeMax","max","nativeMin","min","nativeNow","nativeParseInt","nativeRandom","random","nativeReverse","reverse","DataView","Map","Promise","Set","WeakMap","nativeCreate","metaMap","realNames","dataViewCtorString","toSource","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","symbolProto","symbolValueOf","valueOf","symbolToString","lodash","isObjectLike","isArray","LazyWrapper","LodashWrapper","wrapperClone","baseCreate","proto","isObject","baseLodash","chainAll","__wrapped__","__actions__","__chain__","__index__","__values__","__dir__","__filtered__","__iteratees__","__takeCount__","__views__","Hash","entries","clear","entry","ListCache","MapCache","SetCache","__data__","add","Stack","data","arrayLikeKeys","inherited","isArr","isArg","isArguments","isBuff","isType","skipIndexes","isIndex","push","arraySample","baseRandom","arraySampleSize","shuffleSelf","copyArray","baseClamp","arrayShuffle","assignMergeValue","eq","baseAssignValue","assignValue","objValue","assocIndexOf","baseAggregator","baseEach","baseAssign","copyObject","baseAt","paths","skip","get","number","lower","upper","baseClone","bitmask","customizer","stack","isDeep","isFlat","isFull","input","initCloneArray","tag","getTag","isFunc","cloneBuffer","initCloneObject","getSymbolsIn","copySymbolsIn","keysIn","baseAssignIn","getSymbols","copySymbols","Ctor","cloneArrayBuffer","dataView","buffer","byteOffset","byteLength","cloneDataView","cloneTypedArray","regexp","cloneRegExp","symbol","initCloneByTag","stacked","subValue","getAllKeysIn","getAllKeys","baseConformsTo","baseDelay","wait","baseDifference","includes","isCommon","valuesLength","outer","computed","valuesIndex","templateSettings","pop","getMapData","pairs","LARGE_ARRAY_SIZE","createBaseEach","baseForOwn","baseEachRight","baseForOwnRight","baseEvery","baseExtremum","isSymbol","baseFilter","baseFlatten","depth","isStrict","isFlattenable","baseFor","createBaseFor","baseForRight","baseFunctions","isFunction","baseGet","path","castPath","toKey","baseGetAllKeys","keysFunc","symbolsFunc","baseGetTag","isOwn","unmasked","getRawTag","objectToString","baseGt","other","baseHas","baseHasIn","baseIntersection","arrays","othLength","othIndex","caches","maxLength","Infinity","seen","baseInvoke","parent","last","baseIsArguments","baseIsEqual","equalFunc","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","equalArrays","name","message","convert","isPartial","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","objProps","objLength","skipCtor","othValue","compared","objCtor","othCtor","equalObjects","baseIsEqualDeep","baseIsMatch","matchData","noCustomizer","srcValue","COMPARE_PARTIAL_FLAG","baseIsNative","baseIteratee","identity","baseMatchesProperty","baseMatches","property","baseKeys","isPrototype","baseKeysIn","nativeKeysIn","isProto","baseLt","baseMap","isArrayLike","getMatchData","matchesStrictComparable","isKey","isStrictComparable","hasIn","baseMerge","srcIndex","mergeFunc","safeGet","newValue","isTyped","isArrayLikeObject","isPlainObject","toPlainObject","baseMergeDeep","baseNth","baseOrderBy","iteratees","orders","getIteratee","comparer","sort","baseSortBy","objCriteria","criteria","othCriteria","ordersLength","compareAscending","order","compareMultiple","basePickBy","baseSet","basePullAll","indexOf","basePullAt","indexes","previous","baseUnset","baseRepeat","baseRest","start","setToString","overRest","baseSample","baseSampleSize","nested","baseSetData","baseSetToString","constant","baseShuffle","baseSlice","end","baseSome","baseSortedIndex","retHighest","low","high","MAX_ARRAY_LENGTH","mid","baseSortedIndexBy","valIsNaN","valIsNull","valIsSymbol","valIsUndefined","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","setLow","baseSortedUniq","baseToNumber","baseToString","baseUniq","createSet","seenIndex","baseUpdate","updater","baseWhile","isDrop","baseWrapperValue","actions","action","baseXor","baseZipObject","assignFunc","valsLength","castArrayLikeObject","castFunction","stringToPath","castRest","castSlice","id","slice","copy","arrayBuffer","typedArray","valIsDefined","valIsReflexive","composeArgs","partials","holders","isCurried","argsIndex","argsLength","holdersLength","leftIndex","leftLength","rangeLength","isUncurried","composeArgsRight","holdersIndex","rightIndex","rightLength","isNew","createAggregator","initializer","createAssigner","assigner","sources","guard","isIterateeCall","iterable","createCaseFirst","methodName","charAt","trailing","createCompounder","callback","words","deburr","createCtor","thisBinding","createFind","findIndexFunc","createFlow","flatRest","funcs","prereq","thru","wrapper","getFuncName","funcName","getData","isLaziable","plant","createHybrid","partialsRight","holdersRight","argPos","ary","arity","isAry","isBind","isBindKey","isFlip","getHolder","holdersCount","newHolders","createRecurry","fn","reorder","createInverter","toIteratee","baseInverter","createMathOperation","operator","defaultValue","createOver","arrayFunc","createPadding","chars","charsLength","createRange","step","toFinite","baseRange","createRelationalOperation","toNumber","wrapFunc","isCurry","newData","setData","setWrapToString","createRound","precision","toInteger","pair","noop","createToPairs","baseToPairs","createWrap","srcBitmask","newBitmask","isCombo","mergeData","createCurry","createPartial","createBind","customDefaultsAssignIn","customDefaultsMerge","customOmitClone","arrLength","arrValue","flatten","otherFunc","type","isKeyable","getValue","stubArray","hasPath","hasFunc","isLength","ArrayBuffer","resolve","ctorString","isMaskable","stubFalse","otherArgs","oldArray","shortOut","reference","details","insertWrapDetails","updateWrapDetails","getWrapDetails","count","lastCalled","stamp","remaining","rand","memoize","memoizeCapped","charCodeAt","quote","subString","clone","difference","differenceBy","differenceWith","findIndex","findLastIndex","head","intersection","mapped","intersectionBy","intersectionWith","pull","pullAll","pullAt","union","unionBy","unionWith","unzip","group","unzipWith","without","xor","xorBy","xorWith","zip","zipWith","chain","interceptor","wrapperAt","countBy","find","findLast","forEachRight","groupBy","invokeMap","keyBy","partition","sortBy","before","bind","bindKey","WRAP_BIND_FLAG","debounce","options","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","invokeFunc","time","leadingEdge","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","cancel","flush","defer","delay","resolver","memoized","Cache","negate","overArgs","transforms","funcsLength","partial","partialRight","rearg","gt","gte","isError","isInteger","isNumber","isString","lt","lte","toArray","next","done","iteratorToArray","remainder","toLength","isBinary","assign","assignIn","assignInWith","assignWith","at","propsIndex","propsLength","defaultsDeep","mergeWith","invert","invertBy","invoke","merge","omit","CLONE_DEEP_FLAG","basePick","pickBy","prop","toPairs","toPairsIn","camelCase","word","toLowerCase","capitalize","upperFirst","kebabCase","lowerCase","lowerFirst","snakeCase","startCase","upperCase","toUpperCase","pattern","hasUnicodeWord","unicodeWords","asciiWords","attempt","bindAll","methodNames","flow","flowRight","method","methodOf","mixin","over","overEvery","overSome","basePropertyDeep","range","rangeRight","augend","addend","divide","dividend","divisor","multiply","multiplier","multiplicand","round","subtract","minuend","subtrahend","after","castArray","chunk","compact","concat","cond","conforms","baseConforms","properties","curry","curryRight","drop","dropRight","dropRightWhile","dropWhile","fill","baseFill","filter","flatMap","flatMapDeep","flatMapDepth","flattenDeep","flattenDepth","flip","fromPairs","functions","functionsIn","initial","mapKeys","mapValues","matches","matchesProperty","nthArg","omitBy","once","orderBy","propertyOf","pullAllBy","pullAllWith","reject","remove","rest","sampleSize","setWith","shuffle","sortedUniq","sortedUniqBy","separator","limit","spread","tail","take","takeRight","takeRightWhile","takeWhile","tap","throttle","toPath","isArrLike","unary","uniq","uniqBy","uniqWith","unset","update","updateWith","valuesIn","wrap","zipObject","zipObjectDeep","entriesIn","extend","extendWith","clamp","cloneDeep","cloneDeepWith","cloneWith","conformsTo","defaultTo","endsWith","position","escape","escapeRegExp","every","findKey","findLastKey","forIn","forInRight","forOwn","forOwnRight","inRange","baseInRange","isBoolean","isElement","isEmpty","isEqual","isEqualWith","isMatch","isMatchWith","isNaN","isNative","isNil","isNull","isSafeInteger","isUndefined","isWeakMap","isWeakSet","lastIndexOf","strictLastIndexOf","maxBy","mean","meanBy","minBy","stubObject","stubString","stubTrue","nth","noConflict","pad","strLength","padEnd","padStart","radix","floating","temp","reduce","reduceRight","repeat","sample","some","sortedIndex","sortedIndexBy","sortedIndexOf","sortedLastIndex","sortedLastIndexBy","sortedLastIndexOf","startsWith","sum","sumBy","template","settings","isEscaping","isEvaluating","imports","importsKeys","importsValues","interpolate","reDelimiters","evaluate","sourceURL","escapeValue","interpolateValue","esTemplateValue","evaluateValue","variable","times","toLower","toSafeInteger","toUpper","trim","trimEnd","trimStart","truncate","omission","search","substring","newEnd","unescape","uniqueId","prefix","each","eachRight","first","VERSION","isFilter","takeName","dropName","checkIteratee","isTaker","lodashFunc","retUnwrapped","isLazy","useLazy","isHybrid","isUnwrapped","onlyLazy","chainName","dir","isRight","view","getView","iterLength","takeCount","iterIndex","commit","wrapped","toJSON","define","contains","mobile","forceLocale","moment","date","locale","format","I8N_1","default","dateString","toDate","parseDate","formatDate","_assertThisInitialized","ReferenceError","webpackPolyfill","deprecate","children","l","_setPrototypeOf","o","p","setPrototypeOf","__proto__","globalObject","BigNumber","isNumeric","mathceil","mathfloor","bignumberError","tooManyDigits","BASE","POWS_TEN","MAX","bitFloor","coeffToString","a","s","z","j","r","compare","x","y","b","xc","c","yc","k","intCheck","isOdd","toExponential","str","toFixedPoint","len","zs","configObject","div","convertBase","parseNumeric","P","ONE","DECIMAL_PLACES","ROUNDING_MODE","TO_EXP_NEG","TO_EXP_POS","MIN_EXP","MAX_EXP","CRYPTO","MODULO_MODE","POW_PRECISION","FORMAT","groupSize","secondaryGroupSize","groupSeparator","decimalSeparator","fractionGroupSize","fractionGroupSeparator","suffix","ALPHABET","v","alphabet","caseChanged","isNum","_isBigNumber","DEBUG","rm","c0","ne","maxOrMin","m","normalise","sd","d","ni","rd","pows10","out","ROUND_UP","ROUND_DOWN","ROUND_CEIL","ROUND_FLOOR","ROUND_HALF_UP","ROUND_HALF_DOWN","ROUND_HALF_EVEN","ROUND_HALF_CEIL","ROUND_HALF_FLOOR","EUCLID","config","crypto","getRandomValues","randomBytes","EXPONENTIAL_AT","RANGE","isBigNumber","maximum","minimum","random53bitInt","dp","Uint32Array","plus","toBaseOut","baseIn","baseOut","arrL","arr","sign","callerIsToString","pow","base","xlo","xhi","carry","klo","khi","aL","bL","cmp","more","prod","prodL","q","qc","rem","remL","rem0","xi","xL","yc0","yL","yz","NaN","basePrefix","dotAfter","dotBefore","isInfinityOrNaN","whitespaceOrPlus","p1","p2","absoluteValue","abs","comparedTo","decimalPlaces","dividedBy","dividedToIntegerBy","idiv","exponentiatedBy","half","isModExp","nIsBig","nIsNeg","nIsOdd","mod","integerValue","isEqualTo","isGreaterThan","isGreaterThanOrEqualTo","isLessThan","isLessThanOrEqualTo","isNegative","isPositive","isZero","minus","t","xLTy","xe","ye","modulo","multipliedBy","xcL","ycL","ylo","yhi","zc","negated","shiftedBy","squareRoot","sqrt","rep","toFixed","toFormat","g1","g2","intPart","fractionPart","isNeg","intDigits","substr","toFraction","md","d0","d1","d2","exp","n0","n1","toPrecision","I8N","hookCallback","hooks","res","hasOwnProp","createUTC","strict","createLocalOrUTC","utc","getParsingFlags","_pf","empty","unusedTokens","unusedInput","overflow","charsLeftOver","nullInput","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","meridiem","rfc2822","weekdayMismatch","isValid","_isValid","flags","parsedParts","isNowValid","_d","getTime","invalidWeekday","_strict","bigHour","isFrozen","createInvalid","fun","momentProperties","copyConfig","to","from","val","_isAMomentObject","_i","_f","_l","_tzm","_isUTC","_offset","_locale","updateInProgress","Moment","updateOffset","isMoment","absFloor","toInt","argumentForCoercion","coercedNumber","compareArrays","array1","array2","dontConvert","lengthDiff","diffs","warn","msg","suppressDeprecationWarnings","console","firstTime","deprecationHandler","deprecations","deprecateSimple","mergeConfigs","parentConfig","childConfig","Locale","aliases","addUnitAlias","unit","shorthand","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","priorities","addUnitPriority","priority","zeroFill","targetLength","forceSign","absNumber","zerosToFill","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","token","padded","ordinal","localeData","formatMoment","expandFormat","mom","output","makeFormatFunction","invalidDate","replaceLongDateFormatTokens","longDateFormat","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchWord","regexes","addRegexToken","regex","strictRegex","getParseRegexForToken","regexEscape","matched","p3","p4","tokens","addParseToken","addWeekParseToken","_w","addTimeToArrayFromToken","_a","daysInYear","year","isLeapYear","parseTwoDigitYear","getSetYear","makeGetSet","keepTime","set$1","month","daysInMonth","modMonth","monthsShort","months","monthsShortRegex","monthsRegex","monthsParse","MONTHS_IN_FORMAT","defaultLocaleMonths","defaultLocaleMonthsShort","handleStrictParse","monthName","ii","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","setMonth","dayOfMonth","getSetMonth","defaultMonthsShortRegex","defaultMonthsRegex","computeMonthsParse","cmpLenRev","shortPieces","longPieces","mixedPieces","_monthsRegex","_monthsShortRegex","_monthsStrictRegex","_monthsShortStrictRegex","createDate","h","M","ms","getFullYear","setFullYear","createUTCDate","UTC","getUTCFullYear","setUTCFullYear","firstWeekOffset","dow","doy","fwd","getUTCDay","dayOfYearFromWeeks","week","weekday","resYear","resDayOfYear","dayOfYear","weekOfYear","resWeek","weekOffset","weeksInYear","weekOffsetNext","shiftWeekdays","ws","weekdaysMin","weekdaysShort","weekdays","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","weekdaysParse","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","handleStrictParse$1","weekdayName","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","day","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","computeWeekdaysParse","minp","shortp","longp","minPieces","_weekdaysRegex","_weekdaysShortRegex","_weekdaysMinRegex","_weekdaysStrictRegex","_weekdaysShortStrictRegex","_weekdaysMinStrictRegex","hFormat","hours","lowercase","minutes","matchMeridiem","_meridiemParse","seconds","kInput","_isPm","isPM","_meridiem","pos","pos1","pos2","globalLocale","getSetHour","baseConfig","calendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","LTS","LT","L","LL","LLL","LLLL","dayOfMonthOrdinalParse","relativeTime","future","past","ss","mm","hh","dd","MM","yy","meridiemParse","locales","localeFamilies","normalizeLocale","loadLocale","oldLocale","_abbr","aliasedRequire","getSetGlobalLocale","getLocale","defineLocale","abbr","_config","parentLocale","names","chooseLocale","checkOverflow","_overflowDayOfYear","_overflowWeeks","_overflowWeekday","configFromArray","currentDate","expectedWeekday","yearToUse","nowValue","_useUTC","getUTCMonth","getUTCDate","getMonth","getDate","currentDateArray","w","weekYear","weekdayOverflow","GG","W","E","createLocal","_week","curWeek","gg","_dayOfYear","dayOfYearFromWeekInfo","_nextDay","getDay","setUTCMinutes","getUTCMinutes","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","configFromISO","allowTime","dateFormat","timeFormat","tzFormat","configFromStringAndFormat","untruncateYear","yearStr","obsOffsets","UT","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","configFromRFC2822","parsedArray","monthStr","dayStr","hourStr","minuteStr","secondStr","extractFromRFC2822Strings","weekdayStr","parsedInput","checkWeekday","obsOffset","militaryOffset","numOffset","hm","calculateOffset","ISO_8601","RFC_2822","skipped","stringLength","totalParsedInputLength","hour","isPm","meridiemHour","meridiemFixWrap","prepareConfig","preparse","tempConfig","bestMoment","scoreToBeat","currentScore","score","configFromStringAndArray","createFromInputFallback","configFromString","minute","second","millisecond","configFromObject","configFromInput","isUTC","getOwnPropertyNames","isObjectEmpty","createFromConfig","prototypeMin","prototypeMax","moments","ordering","Duration","duration","years","quarters","quarter","weeks","isoWeek","days","milliseconds","unitHasDecimal","isDurationValid","_milliseconds","_days","_months","_data","_bubble","isDuration","absRound","utcOffset","offsetFromString","chunkOffset","matcher","parts","cloneWithOffset","model","diff","setTime","local","getDateOffset","getTimezoneOffset","isUtc","aspNetRegex","isoRegex","createDuration","ret","diffRes","parseIso","isBefore","positiveMomentsDifference","momentsDifference","inp","isAfter","createAdder","direction","period","tmp","addSubtract","isAdding","invalid","monthDiff","wholeMonthDiff","anchor","newLocaleData","defaultFormat","defaultFormatUtc","lang","mod$1","localStartOfDate","utcStartOfDate","addWeekYearFormatToken","getter","getSetWeekYearHelper","weeksTarget","setWeekAll","dayOfYearData","isoWeekYear","_dayOfMonthOrdinalParse","_ordinalParse","_dayOfMonthOrdinalParseLenient","getSetDayOfMonth","getSetMinute","getSetSecond","parseMs","getSetMillisecond","preParsePostFormat","formats","sod","startOf","calendarFormat","asFloat","that","zoneDelta","endOf","startOfDate","isoWeekday","inputString","postformat","withoutSuffix","humanize","fromNow","toNow","invalidAt","localInput","isBetween","inclusivity","localFrom","localTo","isSame","inputMs","isSameOrAfter","isSameOrBefore","parsingFlags","prioritized","unitsObj","u","getPrioritizedUnits","toObject","toISOString","keepOffset","inspect","zone","isLocal","unix","creationData","isoWeeks","weekInfo","isoWeeksInYear","parseWeekday","parseIsoWeekday","keepLocalTime","keepMinutes","localAdjust","_changeInProgress","parseZone","tZone","hasAlignedHourOffset","isDST","isUtcOffset","zoneAbbr","zoneName","dates","isDSTShifted","_isDSTShifted","proto$1","get$1","field","listMonthsImpl","listWeekdaysImpl","localeSorted","shift","_calendar","_longDateFormat","formatUpper","_invalidDate","_ordinal","isFuture","_relativeTime","pastFuture","isFormat","_monthsShort","_monthsParseExact","firstDayOfYear","firstDayOfWeek","_weekdays","_weekdaysMin","_weekdaysShort","_weekdaysParseExact","_fullWeekdaysParse","isLower","langData","mathAbs","addSubtract$1","absCeil","daysToMonths","monthsToDays","makeAs","alias","as","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","makeGetter","thresholds","substituteTimeAgo","abs$1","toISOString$1","Y","D","total","totalSign","ymSign","daysSign","hmsSign","proto$2","monthsFromDays","withSuffix","posNegDuration","relativeTime$1","toIsoString","version","updateLocale","tmpLocale","relativeTimeRounding","roundingFunction","relativeTimeThreshold","threshold","myMoment","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","DATE","TIME","TIME_SECONDS","TIME_MS","WEEK","MONTH","factory","_getPrototypeOf","_isNativeReflectConstruct","sham","Proxy","symbolMap","numberMap","pluralForm","plurals","pluralize","f","weekdaysParseExact","availableProps","UAContext","React","uaResults","parser","UAProvider","uaParser","android","ios","tablet","windows","mac","linux","computer","firefox","chrome","edge","safari","render","Component","ua","PropTypes","isRequired","UserAgent","returnFullParser","validProps","funcChildren","bool","window","MODEL","NAME","TYPE","VENDOR","MOBILE","TABLET","SMARTTV","util","extensions","mergedRegexes","str1","str2","lowerize","major","mapper","rgx","maps","browser","oldsafari","device","amazon","sprint","vendor","os","cpu","engine","UAParser","uastring","getResult","navigator","userAgent","rgxmap","getBrowser","getCPU","architecture","getDevice","getEngine","getOS","getUA","setUA","BROWSER","MAJOR","CPU","ARCHITECTURE","DEVICE","CONSOLE","WEARABLE","EMBEDDED","ENGINE","OS","$","jQuery","Zepto","compareVersions","v1","v2","validateAndParse","n2","compareSegments","assertValidOperator","operatorResMap","validate","semver","satisfies","op","v3","r1","r2","r3","compareStrings","isWildcard","tryParse","forceType","ap","bp","allowedOperators","asyncIterator","_catch","body","recover","then","CacheBusterContext","createContext","checkCacheStatus","CacheBuster","_ref","_ref$children","currentVersion","_ref$isEnabled","isEnabled","_ref$isVerboseMode","isVerboseMode","_ref$loadingComponent","loadingComponent","_ref$metaFileDirector","metaFileDirectory","_ref$reloadOnDowngrad","reloadOnDowngrade","onCacheClear","_useState","useState","loading","isLatestVersion","cacheStatus","setCacheStatus","log","error","useEffect","useCallback","_temp2","fetch","json","_ref2","metaVersion","isThereNewVersion","refreshCacheAndReload","_temp3","_window","cacheNames","cacheDeletionPromises","all","location","reload","createElement","Provider","propTypes","element"],"mappings":";0FAAe,SAASA,EAAgBC,EAAUC,GAChD,KAAMD,aAAoBC,GACxB,MAAM,IAAIC,UAAU,qCAFxB,mC,iCCAA,SAASC,EAAkBC,EAAQC,GACjC,IAAK,IAAIC,EAAI,EAAGA,EAAID,EAAME,OAAQD,IAAK,CACrC,IAAIE,EAAaH,EAAMC,GACvBE,EAAWC,WAAaD,EAAWC,aAAc,EACjDD,EAAWE,cAAe,EACtB,UAAWF,IAAYA,EAAWG,UAAW,GACjDC,OAAOC,eAAeT,EAAQI,EAAWM,IAAKN,IAInC,SAASO,EAAad,EAAae,EAAYC,GAG5D,OAFID,GAAYb,EAAkBF,EAAYiB,UAAWF,GACrDC,GAAad,EAAkBF,EAAagB,GACzChB,EAbT,mC,iCCAA,+CACe,SAASkB,EAAUC,EAAUC,GAC1C,GAA0B,oBAAfA,GAA4C,OAAfA,EACtC,MAAM,IAAInB,UAAU,sDAGtBkB,EAASF,UAAYN,OAAOU,OAAOD,GAAcA,EAAWH,UAAW,CACrEK,YAAa,CACXC,MAAOJ,EACPT,UAAU,EACVD,cAAc,KAGdW,GAAY,YAAeD,EAAUC,K,uDCb5B,SAASI,EAAQC,GAa9B,OATED,EADoB,oBAAXE,QAAoD,kBAApBA,OAAOC,SACtC,SAAiBF,GACzB,cAAcA,GAGN,SAAiBA,GACzB,OAAOA,GAAyB,oBAAXC,QAAyBD,EAAIH,cAAgBI,QAAUD,IAAQC,OAAOT,UAAY,gBAAkBQ,IAI9GA,G,aCXF,SAASG,EAA2BC,EAAMC,GACvD,OAAIA,GAA2B,WAAlBN,EAAQM,IAAsC,oBAATA,EAI3C,OAAAC,EAAA,GAAsBF,GAHpBC,ECDI,SAASE,EAAaC,GACnC,OAAO,WACL,IACIC,EADAC,EAAQ,OAAAC,EAAA,GAAeH,GAG3B,GAAI,OAAAI,EAAA,KAA4B,CAC9B,IAAIC,EAAY,OAAAF,EAAA,GAAeG,MAAMjB,YACrCY,EAASM,QAAQC,UAAUN,EAAOO,UAAWJ,QAE7CJ,EAASC,EAAMQ,MAAMJ,KAAMG,WAG7B,OAAO,EAA0BH,KAAML,IAf3C,mC,kFCAA,aAWI,iBAVJ,aAUkB,aATlB,IAAI,EAAJ,OAWsB,eAVtB,aAQ4B,QARrB,UACP,IAAI,EAAJ,OASI,eARJ,aAQgB,SAPhB,IAAI,EAAJ,OAMa,MANN,UAEP,IAAI,EAAJ,OAMgB,iB,qBCdhB,qBAQE,WAGA,IAUIU,EAAkB,sBASlBC,EAAc,yBAgDdC,EAAY,CACd,CAAC,MA9BiB,KA+BlB,CAAC,OAtCkB,GAuCnB,CAAC,UAtCsB,GAuCvB,CAAC,QArCmB,GAsCpB,CAAC,aArCyB,IAsC1B,CAAC,OAjCkB,KAkCnB,CAAC,UAtCqB,IAuCtB,CAAC,eAtC2B,IAuC5B,CAAC,QArCmB,MAyClBC,EAAU,qBACVC,EAAW,iBAEXC,EAAU,mBACVC,EAAU,gBAEVC,EAAW,iBACXC,EAAU,oBACVC,EAAS,6BACTC,EAAS,eACTC,EAAY,kBAEZC,EAAY,kBAGZC,EAAY,kBACZC,EAAS,eACTC,EAAY,kBACZC,EAAY,kBAEZC,EAAa,mBAGbC,EAAiB,uBACjBC,EAAc,oBACdC,EAAa,wBACbC,EAAa,wBACbC,EAAU,qBACVC,EAAW,sBACXC,EAAW,sBACXC,EAAW,sBAEXC,EAAY,uBACZC,EAAY,uBAGZC,EAAuB,iBACvBC,EAAsB,qBACtBC,EAAwB,gCAGxBC,EAAgB,4BAChBC,EAAkB,WAClBC,EAAmBC,OAAOH,EAAcI,QACxCC,EAAqBF,OAAOF,EAAgBG,QAG5CE,EAAW,mBACXC,EAAa,kBACbC,EAAgB,mBAGhBC,EAAe,mDACfC,EAAgB,QAChBC,EAAa,mGAMbC,EAAe,sBACfC,EAAkBV,OAAOS,EAAaR,QAGtCU,EAAS,aACTC,EAAc,OACdC,EAAY,OAGZC,EAAgB,4CAChBC,EAAgB,oCAChBC,EAAiB,QAGjBC,GAAc,4CAGdC,GAAe,WAMfC,GAAe,kCAGfC,GAAU,OAGVC,GAAa,qBAGbC,GAAa,aAGbC,GAAe,8BAGfC,GAAY,cAGZC,GAAW,mBAGXC,GAAU,8CAGVC,GAAY,OAGZC,GAAoB,yBAOpBC,GAAeC,gDASfC,GAAeC,8OAIfC,GAAW,oBACXC,GAAU,IAAMH,GAAe,IAC/BI,GAAU,IAAMN,GAAe,IAC/BO,GAAW,OACXC,GAAY,oBACZC,GAAU,8BACVC,GAAS,oBAAuBR,GAAeK,GAAtC,qEACTI,GAAS,2BAETC,GAAc,qBACdC,GAAa,kCACbC,GAAa,qCACbC,GAAU,8BAIVC,GAAc,MAAQP,GAAU,IAAMC,GAAS,IAC/CO,GAAc,MAAQF,GAAU,IAAML,GAAS,IAG/CQ,GAZa,MAAQZ,GAAU,IAAMK,GAAS,IAYtB,IAKxBQ,GAJW,oBAIQD,IAHP,gBAAwB,CAACN,GAAaC,GAAYC,IAAYM,KAAK,KAAnE,qBAA2FF,GAAW,MAIlHG,GAAU,MAAQ,CAACb,GAAWK,GAAYC,IAAYM,KAAK,KAAO,IAAMD,GACxEG,GAAW,MAAQ,CAACV,GAAcN,GAAU,IAAKA,GAASO,GAAYC,GAAYV,IAAUgB,KAAK,KAAO,IAGxGG,GAASpD,OA/BA,YA+Be,KAMxBqD,GAAcrD,OAAOmC,GAAS,KAG9BmB,GAAYtD,OAAOwC,GAAS,MAAQA,GAAS,KAAOW,GAAWH,GAAO,KAGtEO,GAAgBvD,OAAO,CACzB4C,GAAU,IAAMN,GAAhBM,yCAA0D,CAACV,GAASU,GAAS,KAAKK,KAAK,KAAO,IAC9FH,4CAA8C,CAACZ,GAASU,GAAUC,GAAa,KAAKI,KAAK,KAAO,IAChGL,GAAU,IAAMC,GAAhBD,sCACAA,yCAtBe,mDADA,mDA0BfR,GACAc,IACAD,KAAK,KAAM,KAGTO,GAAexD,OAAO,0BAA+B6B,GAA/B,mBAGtB4B,GAAmB,qEAGnBC,GAAe,CACjB,QAAS,SAAU,WAAY,OAAQ,QAAS,eAAgB,eAChE,WAAY,YAAa,aAAc,aAAc,MAAO,OAAQ,SACpE,UAAW,SAAU,MAAO,SAAU,SAAU,YAAa,aAC7D,oBAAqB,cAAe,cAAe,UACnD,IAAK,eAAgB,WAAY,WAAY,cAI3CC,IAAmB,EAGnBC,GAAiB,GACrBA,GAAe1E,GAAc0E,GAAezE,GAC5CyE,GAAexE,GAAWwE,GAAevE,GACzCuE,GAAetE,GAAYsE,GAAerE,GAC1CqE,GA/KsB,8BA+KYA,GAAepE,GACjDoE,GAAenE,IAAa,EAC5BmE,GAAe3F,GAAW2F,GAAe1F,GACzC0F,GAAe5E,GAAkB4E,GAAezF,GAChDyF,GAAe3E,GAAe2E,GAAexF,GAC7CwF,GAAevF,GAAYuF,GAAetF,GAC1CsF,GAAepF,GAAUoF,GAAenF,GACxCmF,GAAelF,GAAakF,GAAejF,GAC3CiF,GAAehF,GAAUgF,GAAe/E,GACxC+E,GAAe7E,IAAc,EAG7B,IAAI8E,GAAgB,GACpBA,GAAc5F,GAAW4F,GAAc3F,GACvC2F,GAAc7E,GAAkB6E,GAAc5E,GAC9C4E,GAAc1F,GAAW0F,GAAczF,GACvCyF,GAAc3E,GAAc2E,GAAc1E,GAC1C0E,GAAczE,GAAWyE,GAAcxE,GACvCwE,GAAcvE,GAAYuE,GAAcrF,GACxCqF,GAAcpF,GAAaoF,GAAcnF,GACzCmF,GAAclF,GAAakF,GAAcjF,GACzCiF,GAAchF,GAAagF,GAAc/E,GACzC+E,GAActE,GAAYsE,GArMJ,8BAsMtBA,GAAcrE,GAAaqE,GAAcpE,IAAa,EACtDoE,GAAcxF,GAAYwF,GAAcvF,GACxCuF,GAAc9E,IAAc,EAG5B,IA4EI+E,GAAgB,CAClB,KAAM,KACN,IAAK,IACL,KAAM,IACN,KAAM,IACN,SAAU,QACV,SAAU,SAIRC,GAAiBC,WACjBC,GAAeC,SAGfC,GAA8B,iBAAVC,GAAsBA,GAAUA,EAAOvI,SAAWA,QAAUuI,EAGhFC,GAA0B,iBAARtH,MAAoBA,MAAQA,KAAKlB,SAAWA,QAAUkB,KAGxEuH,GAAOH,IAAcE,IAAYE,SAAS,cAATA,GAGjCC,GAA4CC,IAAYA,EAAQC,UAAYD,EAG5EE,GAAaH,IAAgC,iBAAVI,GAAsBA,IAAWA,EAAOF,UAAYE,EAGvFC,GAAgBF,IAAcA,GAAWF,UAAYD,GAGrDM,GAAcD,IAAiBV,GAAWY,QAG1CC,GAAY,WACd,IAEE,IAAIC,EAAQN,IAAcA,GAAWO,SAAWP,GAAWO,QAAQ,QAAQD,MAE3E,OAAIA,GAKGH,IAAeA,GAAYK,SAAWL,GAAYK,QAAQ,QACjE,MAAOC,KAXK,GAeZC,GAAoBL,IAAYA,GAASM,cACzCC,GAAaP,IAAYA,GAASQ,OAClCC,GAAYT,IAAYA,GAASU,MACjCC,GAAeX,IAAYA,GAASY,SACpCC,GAAYb,IAAYA,GAASc,MACjCC,GAAmBf,IAAYA,GAASgB,aAc5C,SAASnI,GAAMoI,EAAMC,EAASC,GAC5B,OAAQA,EAAK3K,QACX,KAAK,EAAG,OAAOyK,EAAKjJ,KAAKkJ,GACzB,KAAK,EAAG,OAAOD,EAAKjJ,KAAKkJ,EAASC,EAAK,IACvC,KAAK,EAAG,OAAOF,EAAKjJ,KAAKkJ,EAASC,EAAK,GAAIA,EAAK,IAChD,KAAK,EAAG,OAAOF,EAAKjJ,KAAKkJ,EAASC,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAE3D,OAAOF,EAAKpI,MAAMqI,EAASC,GAa7B,SAASC,GAAgBC,EAAOC,EAAQC,EAAUC,GAIhD,IAHA,IAAIC,GAAS,EACTjL,EAAkB,MAAT6K,EAAgB,EAAIA,EAAM7K,SAE9BiL,EAAQjL,GAAQ,CACvB,IAAIiB,EAAQ4J,EAAMI,GAClBH,EAAOE,EAAa/J,EAAO8J,EAAS9J,GAAQ4J,GAE9C,OAAOG,EAYT,SAASE,GAAUL,EAAOE,GAIxB,IAHA,IAAIE,GAAS,EACTjL,EAAkB,MAAT6K,EAAgB,EAAIA,EAAM7K,SAE9BiL,EAAQjL,IAC8B,IAAzC+K,EAASF,EAAMI,GAAQA,EAAOJ,KAIpC,OAAOA,EAYT,SAASM,GAAeN,EAAOE,GAG7B,IAFA,IAAI/K,EAAkB,MAAT6K,EAAgB,EAAIA,EAAM7K,OAEhCA,MAC0C,IAA3C+K,EAASF,EAAM7K,GAASA,EAAQ6K,KAItC,OAAOA,EAaT,SAASO,GAAWP,EAAOQ,GAIzB,IAHA,IAAIJ,GAAS,EACTjL,EAAkB,MAAT6K,EAAgB,EAAIA,EAAM7K,SAE9BiL,EAAQjL,GACf,IAAKqL,EAAUR,EAAMI,GAAQA,EAAOJ,GAClC,OAAO,EAGX,OAAO,EAYT,SAASS,GAAYT,EAAOQ,GAM1B,IALA,IAAIJ,GAAS,EACTjL,EAAkB,MAAT6K,EAAgB,EAAIA,EAAM7K,OACnCuL,EAAW,EACX3J,EAAS,KAEJqJ,EAAQjL,GAAQ,CACvB,IAAIiB,EAAQ4J,EAAMI,GACdI,EAAUpK,EAAOgK,EAAOJ,KAC1BjJ,EAAO2J,KAActK,GAGzB,OAAOW,EAYT,SAAS4J,GAAcX,EAAO5J,GAE5B,SADsB,MAAT4J,EAAgB,EAAIA,EAAM7K,SACpByL,GAAYZ,EAAO5J,EAAO,IAAM,EAYrD,SAASyK,GAAkBb,EAAO5J,EAAO0K,GAIvC,IAHA,IAAIV,GAAS,EACTjL,EAAkB,MAAT6K,EAAgB,EAAIA,EAAM7K,SAE9BiL,EAAQjL,GACf,GAAI2L,EAAW1K,EAAO4J,EAAMI,IAC1B,OAAO,EAGX,OAAO,EAYT,SAASW,GAASf,EAAOE,GAKvB,IAJA,IAAIE,GAAS,EACTjL,EAAkB,MAAT6K,EAAgB,EAAIA,EAAM7K,OACnC4B,EAASiK,MAAM7L,KAEViL,EAAQjL,GACf4B,EAAOqJ,GAASF,EAASF,EAAMI,GAAQA,EAAOJ,GAEhD,OAAOjJ,EAWT,SAASkK,GAAUjB,EAAOkB,GAKxB,IAJA,IAAId,GAAS,EACTjL,EAAS+L,EAAO/L,OAChBgM,EAASnB,EAAM7K,SAEViL,EAAQjL,GACf6K,EAAMmB,EAASf,GAASc,EAAOd,GAEjC,OAAOJ,EAeT,SAASoB,GAAYpB,EAAOE,EAAUC,EAAakB,GACjD,IAAIjB,GAAS,EACTjL,EAAkB,MAAT6K,EAAgB,EAAIA,EAAM7K,OAKvC,IAHIkM,GAAalM,IACfgL,EAAcH,IAAQI,MAEfA,EAAQjL,GACfgL,EAAcD,EAASC,EAAaH,EAAMI,GAAQA,EAAOJ,GAE3D,OAAOG,EAeT,SAASmB,GAAiBtB,EAAOE,EAAUC,EAAakB,GACtD,IAAIlM,EAAkB,MAAT6K,EAAgB,EAAIA,EAAM7K,OAIvC,IAHIkM,GAAalM,IACfgL,EAAcH,IAAQ7K,IAEjBA,KACLgL,EAAcD,EAASC,EAAaH,EAAM7K,GAASA,EAAQ6K,GAE7D,OAAOG,EAaT,SAASoB,GAAUvB,EAAOQ,GAIxB,IAHA,IAAIJ,GAAS,EACTjL,EAAkB,MAAT6K,EAAgB,EAAIA,EAAM7K,SAE9BiL,EAAQjL,GACf,GAAIqL,EAAUR,EAAMI,GAAQA,EAAOJ,GACjC,OAAO,EAGX,OAAO,EAUT,IAAIwB,GAAYC,GAAa,UAmC7B,SAASC,GAAYC,EAAYnB,EAAWoB,GAC1C,IAAI7K,EAOJ,OANA6K,EAASD,GAAY,SAASvL,EAAOV,EAAKiM,GACxC,GAAInB,EAAUpK,EAAOV,EAAKiM,GAExB,OADA5K,EAASrB,GACF,KAGJqB,EAcT,SAAS8K,GAAc7B,EAAOQ,EAAWsB,EAAWC,GAIlD,IAHA,IAAI5M,EAAS6K,EAAM7K,OACfiL,EAAQ0B,GAAaC,EAAY,GAAK,GAElCA,EAAY3B,MAAYA,EAAQjL,GACtC,GAAIqL,EAAUR,EAAMI,GAAQA,EAAOJ,GACjC,OAAOI,EAGX,OAAQ,EAYV,SAASQ,GAAYZ,EAAO5J,EAAO0L,GACjC,OAAO1L,IAAUA,EAocnB,SAAuB4J,EAAO5J,EAAO0L,GACnC,IAAI1B,EAAQ0B,EAAY,EACpB3M,EAAS6K,EAAM7K,OAEnB,OAASiL,EAAQjL,GACf,GAAI6K,EAAMI,KAAWhK,EACnB,OAAOgK,EAGX,OAAQ,EA5cJ4B,CAAchC,EAAO5J,EAAO0L,GAC5BD,GAAc7B,EAAOiC,GAAWH,GAatC,SAASI,GAAgBlC,EAAO5J,EAAO0L,EAAWhB,GAIhD,IAHA,IAAIV,EAAQ0B,EAAY,EACpB3M,EAAS6K,EAAM7K,SAEViL,EAAQjL,GACf,GAAI2L,EAAWd,EAAMI,GAAQhK,GAC3B,OAAOgK,EAGX,OAAQ,EAUV,SAAS6B,GAAU7L,GACjB,OAAOA,IAAUA,EAYnB,SAAS+L,GAASnC,EAAOE,GACvB,IAAI/K,EAAkB,MAAT6K,EAAgB,EAAIA,EAAM7K,OACvC,OAAOA,EAAUiN,GAAQpC,EAAOE,GAAY/K,EA7xBpC,IAuyBV,SAASsM,GAAa/L,GACpB,OAAO,SAAS2M,GACd,OAAiB,MAAVA,OAp2BPC,EAo2BoCD,EAAO3M,IAW/C,SAAS6M,GAAeF,GACtB,OAAO,SAAS3M,GACd,OAAiB,MAAV2M,OAj3BPC,EAi3BoCD,EAAO3M,IAiB/C,SAAS8M,GAAWb,EAAYzB,EAAUC,EAAakB,EAAWO,GAMhE,OALAA,EAASD,GAAY,SAASvL,EAAOgK,EAAOuB,GAC1CxB,EAAckB,GACTA,GAAY,EAAOjL,GACpB8J,EAASC,EAAa/J,EAAOgK,EAAOuB,MAEnCxB,EAgCT,SAASiC,GAAQpC,EAAOE,GAKtB,IAJA,IAAInJ,EACAqJ,GAAS,EACTjL,EAAS6K,EAAM7K,SAEViL,EAAQjL,GAAQ,CACvB,IAAIsN,EAAUvC,EAASF,EAAMI,SA96B7BkC,IA+6BIG,IACF1L,OAh7BFuL,IAg7BWvL,EAAuB0L,EAAW1L,EAAS0L,GAGxD,OAAO1L,EAYT,SAAS2L,GAAUC,EAAGzC,GAIpB,IAHA,IAAIE,GAAS,EACTrJ,EAASiK,MAAM2B,KAEVvC,EAAQuC,GACf5L,EAAOqJ,GAASF,EAASE,GAE3B,OAAOrJ,EAyBT,SAAS6L,GAAUhD,GACjB,OAAO,SAASxJ,GACd,OAAOwJ,EAAKxJ,IAchB,SAASyM,GAAWR,EAAQpN,GAC1B,OAAO8L,GAAS9L,GAAO,SAASS,GAC9B,OAAO2M,EAAO3M,MAYlB,SAASoN,GAASC,EAAOrN,GACvB,OAAOqN,EAAMC,IAAItN,GAYnB,SAASuN,GAAgBC,EAAYC,GAInC,IAHA,IAAI/C,GAAS,EACTjL,EAAS+N,EAAW/N,SAEfiL,EAAQjL,GAAUyL,GAAYuC,EAAYD,EAAW9C,GAAQ,IAAM,IAC5E,OAAOA,EAYT,SAASgD,GAAcF,EAAYC,GAGjC,IAFA,IAAI/C,EAAQ8C,EAAW/N,OAEhBiL,KAAWQ,GAAYuC,EAAYD,EAAW9C,GAAQ,IAAM,IACnE,OAAOA,EAWT,SAASiD,GAAarD,EAAOsD,GAI3B,IAHA,IAAInO,EAAS6K,EAAM7K,OACf4B,EAAS,EAEN5B,KACD6K,EAAM7K,KAAYmO,KAClBvM,EAGN,OAAOA,EAWT,IAAIwM,GAAehB,GApwBG,CAEpB,OAAQ,IAAM,OAAQ,IAAK,OAAQ,IAAK,OAAQ,IAAK,OAAQ,IAAK,OAAQ,IAC1E,OAAQ,IAAM,OAAQ,IAAK,OAAQ,IAAK,OAAQ,IAAK,OAAQ,IAAK,OAAQ,IAC1E,OAAQ,IAAM,OAAQ,IACtB,OAAQ,IAAM,OAAQ,IACtB,OAAQ,IAAM,OAAQ,IAAK,OAAQ,IAAK,OAAQ,IAChD,OAAQ,IAAM,OAAQ,IAAK,OAAQ,IAAK,OAAQ,IAChD,OAAQ,IAAM,OAAQ,IAAK,OAAQ,IAAK,OAAQ,IAChD,OAAQ,IAAM,OAAQ,IAAK,OAAQ,IAAK,OAAQ,IAChD,OAAQ,IAAM,OAAQ,IACtB,OAAQ,IAAM,OAAQ,IAAK,OAAQ,IAAK,OAAQ,IAAK,OAAQ,IAAK,OAAQ,IAC1E,OAAQ,IAAM,OAAQ,IAAK,OAAQ,IAAK,OAAQ,IAAK,OAAQ,IAAK,OAAQ,IAC1E,OAAQ,IAAM,OAAQ,IAAK,OAAQ,IAAK,OAAQ,IAChD,OAAQ,IAAM,OAAQ,IAAK,OAAQ,IAAK,OAAQ,IAChD,OAAQ,IAAM,OAAQ,IAAK,OAAQ,IACnC,OAAQ,KAAM,OAAQ,KACtB,OAAQ,KAAM,OAAQ,KACtB,OAAQ,KAER,SAAU,IAAM,SAAU,IAAK,SAAU,IACzC,SAAU,IAAM,SAAU,IAAK,SAAU,IACzC,SAAU,IAAM,SAAU,IAAK,SAAU,IAAK,SAAU,IACxD,SAAU,IAAM,SAAU,IAAK,SAAU,IAAK,SAAU,IACxD,SAAU,IAAM,SAAU,IAAK,SAAU,IAAK,SAAU,IACxD,SAAU,IAAM,SAAU,IAAK,SAAU,IAAK,SAAU,IAAK,SAAU,IACvE,SAAU,IAAM,SAAU,IAAK,SAAU,IAAK,SAAU,IAAK,SAAU,IACvE,SAAU,IAAM,SAAU,IAAK,SAAU,IAAK,SAAU,IACxD,SAAU,IAAM,SAAU,IAAK,SAAU,IAAK,SAAU,IACxD,SAAU,IAAM,SAAU,IAAK,SAAU,IAAK,SAAU,IACxD,SAAU,IAAM,SAAU,IAAK,SAAU,IAAK,SAAU,IAAK,SAAU,IACvE,SAAU,IAAM,SAAU,IAAK,SAAU,IAAK,SAAU,IAAK,SAAU,IACvE,SAAU,IAAM,SAAU,IAC1B,SAAU,IAAM,SAAU,IAAK,SAAU,IACzC,SAAU,IAAM,SAAU,IAAK,SAAU,IAAK,SAAU,IAAK,SAAU,IACvE,SAAU,IAAM,SAAU,IAAK,SAAU,IAAK,SAAU,IAAK,SAAU,IACvE,SAAU,IAAM,SAAU,IAAK,SAAU,IAAK,SAAU,IACxD,SAAU,IAAM,SAAU,IAAK,SAAU,IAAK,SAAU,IACxD,SAAU,IAAM,SAAU,IAAK,SAAU,IACzC,SAAU,IAAM,SAAU,IAAK,SAAU,IACzC,SAAU,IAAM,SAAU,IAAK,SAAU,IACzC,SAAU,IAAM,SAAU,IAAK,SAAU,IACzC,SAAU,IAAM,SAAU,IAAK,SAAU,IAAK,SAAU,IACxD,SAAU,IAAM,SAAU,IAAK,SAAU,IAAK,SAAU,IACxD,SAAU,IAAM,SAAU,IAAK,SAAU,IACzC,SAAU,IAAM,SAAU,IAAK,SAAU,IACzC,SAAU,IAAM,SAAU,IAAK,SAAU,IAAK,SAAU,IAAK,SAAU,IAAK,SAAU,IACtF,SAAU,IAAM,SAAU,IAAK,SAAU,IAAK,SAAU,IAAK,SAAU,IAAK,SAAU,IACtF,SAAU,IAAM,SAAU,IAC1B,SAAU,IAAM,SAAU,IAAK,SAAU,IACzC,SAAU,IAAM,SAAU,IAAK,SAAU,IACzC,SAAU,IAAM,SAAU,IAAK,SAAU,IACzC,SAAU,KAAM,SAAU,KAC1B,SAAU,KAAM,SAAU,KAC1B,SAAU,KAAM,SAAU,MAutBxBiB,GAAiBjB,GAntBH,CAChB,IAAK,QACL,IAAK,OACL,IAAK,OACL,IAAK,SACL,IAAK,UAutBP,SAASkB,GAAiBC,GACxB,MAAO,KAAOjG,GAAciG,GAsB9B,SAASC,GAAWC,GAClB,OAAOzG,GAAa0G,KAAKD,GAsC3B,SAASE,GAAWC,GAClB,IAAI3D,GAAS,EACTrJ,EAASiK,MAAM+C,EAAIC,MAKvB,OAHAD,EAAIE,SAAQ,SAAS7N,EAAOV,GAC1BqB,IAASqJ,GAAS,CAAC1K,EAAKU,MAEnBW,EAWT,SAASmN,GAAQtE,EAAMuE,GACrB,OAAO,SAASC,GACd,OAAOxE,EAAKuE,EAAUC,KAa1B,SAASC,GAAerE,EAAOsD,GAM7B,IALA,IAAIlD,GAAS,EACTjL,EAAS6K,EAAM7K,OACfuL,EAAW,EACX3J,EAAS,KAEJqJ,EAAQjL,GAAQ,CACvB,IAAIiB,EAAQ4J,EAAMI,GACdhK,IAAUkN,GAAelN,IAAUsB,IACrCsI,EAAMI,GAAS1I,EACfX,EAAO2J,KAAcN,GAGzB,OAAOrJ,EAUT,SAASuN,GAAWC,GAClB,IAAInE,GAAS,EACTrJ,EAASiK,MAAMuD,EAAIP,MAKvB,OAHAO,EAAIN,SAAQ,SAAS7N,GACnBW,IAASqJ,GAAShK,KAEbW,EAUT,SAASyN,GAAWD,GAClB,IAAInE,GAAS,EACTrJ,EAASiK,MAAMuD,EAAIP,MAKvB,OAHAO,EAAIN,SAAQ,SAAS7N,GACnBW,IAASqJ,GAAS,CAAChK,EAAOA,MAErBW,EAoDT,SAAS0N,GAAWb,GAClB,OAAOD,GAAWC,GAkCpB,SAAqBA,GACnB,IAAI7M,EAASkG,GAAUyH,UAAY,EACnC,KAAOzH,GAAU4G,KAAKD,MAClB7M,EAEJ,OAAOA,EAtCH4N,CAAYf,GACZpC,GAAUoC,GAUhB,SAASgB,GAAchB,GACrB,OAAOD,GAAWC,GAoCpB,SAAwBA,GACtB,OAAOA,EAAOiB,MAAM5H,KAAc,GApC9B6H,CAAelB,GAhkBrB,SAAsBA,GACpB,OAAOA,EAAOmB,MAAM,IAgkBhBC,CAAapB,GAUnB,IAAIqB,GAAmB1C,GA/6BH,CAClB,QAAS,IACT,OAAQ,IACR,OAAQ,IACR,SAAU,IACV,QAAS,MAg/BX,IA+zeI2C,GA/zegB,SAASC,EAAaC,GAIxC,IAAIpE,GAHJoE,EAAqB,MAAXA,EAAkBnH,GAAOiH,GAAEG,SAASpH,GAAKzI,SAAU4P,EAASF,GAAEI,KAAKrH,GAAMZ,MAG/D2D,MAChBuE,EAAOH,EAAQG,KACfC,EAAQJ,EAAQI,MAChBtH,GAAWkH,EAAQlH,SACnBuH,GAAOL,EAAQK,KACfjQ,GAAS4P,EAAQ5P,OACjBmE,GAASyL,EAAQzL,OACjB+L,GAASN,EAAQM,OACjB5Q,GAAYsQ,EAAQtQ,UAGpB6Q,GAAa3E,EAAMlL,UACnB8P,GAAY1H,GAASpI,UACrB+P,GAAcrQ,GAAOM,UAGrBgQ,GAAaV,EAAQ,sBAGrBW,GAAeH,GAAUI,SAGzBC,GAAiBJ,GAAYI,eAG7BC,GAAY,EAGZC,GAAc,WAChB,IAAIC,EAAM,SAASC,KAAKP,IAAcA,GAAWQ,MAAQR,GAAWQ,KAAKC,UAAY,IACrF,OAAOH,EAAO,iBAAmBA,EAAO,GAFxB,GAUdI,GAAuBX,GAAYG,SAGnCS,GAAmBV,GAAapP,KAAKnB,IAGrCkR,GAAUzI,GAAKiH,EAGfyB,GAAahN,GAAO,IACtBoM,GAAapP,KAAKsP,IAAgBW,QAAQxM,EAAc,QACvDwM,QAAQ,yDAA0D,SAAW,KAI5EC,GAASrI,GAAgB4G,EAAQyB,YA36CnCvE,EA46CE/L,GAAS6O,EAAQ7O,OACjBuQ,GAAa1B,EAAQ0B,WACrBC,GAAcF,GAASA,GAAOE,iBA96ChCzE,EA+6CE0E,GAAe9C,GAAQ1O,GAAOyB,eAAgBzB,IAC9CyR,GAAezR,GAAOU,OACtBgR,GAAuBrB,GAAYqB,qBACnCC,GAASxB,GAAWwB,OACpBC,GAAmB7Q,GAASA,GAAO8Q,wBAn7CrC/E,EAo7CEgF,GAAc/Q,GAASA,GAAOC,cAp7ChC8L,EAq7CEiF,GAAiBhR,GAASA,GAAOiR,iBAr7CnClF,EAu7CE7M,GAAkB,WACpB,IACE,IAAImK,EAAO6H,GAAUjS,GAAQ,kBAE7B,OADAoK,EAAK,GAAI,GAAI,IACNA,EACP,MAAOb,KALW,GASlB2I,GAAkBtC,EAAQuC,eAAiB1J,GAAK0J,cAAgBvC,EAAQuC,aACxEC,GAASrC,GAAQA,EAAKsC,MAAQ5J,GAAKsH,KAAKsC,KAAOtC,EAAKsC,IACpDC,GAAgB1C,EAAQ2C,aAAe9J,GAAK8J,YAAc3C,EAAQ2C,WAGlEC,GAAavC,GAAKwC,KAClBC,GAAczC,GAAK0C,MACnBC,GAAmB5S,GAAO6S,sBAC1BC,GAAiBzB,GAASA,GAAO0B,cAx8CnCjG,EAy8CEkG,GAAiBpD,EAAQqD,SACzBC,GAAa/C,GAAW/I,KACxB+L,GAAazE,GAAQ1O,GAAO8Q,KAAM9Q,IAClCoT,GAAYnD,GAAKoD,IACjBC,GAAYrD,GAAKsD,IACjBC,GAAYzD,EAAKsC,IACjBoB,GAAiB7D,EAAQvH,SACzBqL,GAAezD,GAAK0D,OACpBC,GAAgBzD,GAAW0D,QAG3BC,GAAW7B,GAAUrC,EAAS,YAC9BmE,GAAM9B,GAAUrC,EAAS,OACzBoE,GAAU/B,GAAUrC,EAAS,WAC7BqE,GAAMhC,GAAUrC,EAAS,OACzBsE,GAAUjC,GAAUrC,EAAS,WAC7BuE,GAAelC,GAAUjS,GAAQ,UAGjCoU,GAAUF,IAAW,IAAIA,GAGzBG,GAAY,GAGZC,GAAqBC,GAAST,IAC9BU,GAAgBD,GAASR,IACzBU,GAAoBF,GAASP,IAC7BU,GAAgBH,GAASN,IACzBU,GAAoBJ,GAASL,IAG7BU,GAAc7T,GAASA,GAAOT,eAz+ChCwM,EA0+CE+H,GAAgBD,GAAcA,GAAYE,aA1+C5ChI,EA2+CEiI,GAAiBH,GAAcA,GAAYpE,cA3+C7C1D,EAomDF,SAASkI,GAAOpU,GACd,GAAIqU,GAAarU,KAAWsU,GAAQtU,MAAYA,aAAiBuU,IAAc,CAC7E,GAAIvU,aAAiBwU,GACnB,OAAOxU,EAET,GAAI6P,GAAetP,KAAKP,EAAO,eAC7B,OAAOyU,GAAazU,GAGxB,OAAO,IAAIwU,GAAcxU,GAW3B,IAAI0U,GAAc,WAChB,SAASzI,KACT,OAAO,SAAS0I,GACd,IAAKC,GAASD,GACZ,MAAO,GAET,GAAI9D,GACF,OAAOA,GAAa8D,GAEtB1I,EAAOvM,UAAYiV,EACnB,IAAIhU,EAAS,IAAIsL,EAEjB,OADAA,EAAOvM,eAnoDTwM,EAooDSvL,GAZO,GAqBlB,SAASkU,MAWT,SAASL,GAAcxU,EAAO8U,GAC5B9T,KAAK+T,YAAc/U,EACnBgB,KAAKgU,YAAc,GACnBhU,KAAKiU,YAAcH,EACnB9T,KAAKkU,UAAY,EACjBlU,KAAKmU,gBA7pDLjJ,EA6uDF,SAASqI,GAAYvU,GACnBgB,KAAK+T,YAAc/U,EACnBgB,KAAKgU,YAAc,GACnBhU,KAAKoU,QAAU,EACfpU,KAAKqU,cAAe,EACpBrU,KAAKsU,cAAgB,GACrBtU,KAAKuU,cArrDc,WAsrDnBvU,KAAKwU,UAAY,GAgHnB,SAASC,GAAKC,GACZ,IAAI1L,GAAS,EACTjL,EAAoB,MAAX2W,EAAkB,EAAIA,EAAQ3W,OAG3C,IADAiC,KAAK2U,UACI3L,EAAQjL,GAAQ,CACvB,IAAI6W,EAAQF,EAAQ1L,GACpBhJ,KAAKmN,IAAIyH,EAAM,GAAIA,EAAM,KAiG7B,SAASC,GAAUH,GACjB,IAAI1L,GAAS,EACTjL,EAAoB,MAAX2W,EAAkB,EAAIA,EAAQ3W,OAG3C,IADAiC,KAAK2U,UACI3L,EAAQjL,GAAQ,CACvB,IAAI6W,EAAQF,EAAQ1L,GACpBhJ,KAAKmN,IAAIyH,EAAM,GAAIA,EAAM,KA8G7B,SAASE,GAASJ,GAChB,IAAI1L,GAAS,EACTjL,EAAoB,MAAX2W,EAAkB,EAAIA,EAAQ3W,OAG3C,IADAiC,KAAK2U,UACI3L,EAAQjL,GAAQ,CACvB,IAAI6W,EAAQF,EAAQ1L,GACpBhJ,KAAKmN,IAAIyH,EAAM,GAAIA,EAAM,KAiG7B,SAASG,GAASjL,GAChB,IAAId,GAAS,EACTjL,EAAmB,MAAV+L,EAAiB,EAAIA,EAAO/L,OAGzC,IADAiC,KAAKgV,SAAW,IAAIF,KACX9L,EAAQjL,GACfiC,KAAKiV,IAAInL,EAAOd,IA6CpB,SAASkM,GAAMR,GACb,IAAIS,EAAOnV,KAAKgV,SAAW,IAAIH,GAAUH,GACzC1U,KAAK4M,KAAOuI,EAAKvI,KAqGnB,SAASwI,GAAcpW,EAAOqW,GAC5B,IAAIC,EAAQhC,GAAQtU,GAChBuW,GAASD,GAASE,GAAYxW,GAC9ByW,GAAUH,IAAUC,GAASpE,GAASnS,GACtC0W,GAAUJ,IAAUC,IAAUE,GAAUlN,GAAavJ,GACrD2W,EAAcL,GAASC,GAASE,GAAUC,EAC1C/V,EAASgW,EAAcrK,GAAUtM,EAAMjB,OAAQuQ,IAAU,GACzDvQ,EAAS4B,EAAO5B,OAEpB,IAAK,IAAIO,KAAOU,GACTqW,IAAaxG,GAAetP,KAAKP,EAAOV,IACvCqX,IAEQ,UAAPrX,GAECmX,IAAkB,UAAPnX,GAA0B,UAAPA,IAE9BoX,IAAkB,UAAPpX,GAA0B,cAAPA,GAA8B,cAAPA,IAEtDsX,GAAQtX,EAAKP,KAElB4B,EAAOkW,KAAKvX,GAGhB,OAAOqB,EAUT,SAASmW,GAAYlN,GACnB,IAAI7K,EAAS6K,EAAM7K,OACnB,OAAOA,EAAS6K,EAAMmN,GAAW,EAAGhY,EAAS,SAv2E7CmN,EAk3EF,SAAS8K,GAAgBpN,EAAO2C,GAC9B,OAAO0K,GAAYC,GAAUtN,GAAQuN,GAAU5K,EAAG,EAAG3C,EAAM7K,SAU7D,SAASqY,GAAaxN,GACpB,OAAOqN,GAAYC,GAAUtN,IAY/B,SAASyN,GAAiBpL,EAAQ3M,EAAKU,SA14ErCkM,IA24EKlM,IAAwBsX,GAAGrL,EAAO3M,GAAMU,SA34E7CkM,IA44EKlM,KAAyBV,KAAO2M,KACnCsL,GAAgBtL,EAAQ3M,EAAKU,GAcjC,SAASwX,GAAYvL,EAAQ3M,EAAKU,GAChC,IAAIyX,EAAWxL,EAAO3M,GAChBuQ,GAAetP,KAAK0L,EAAQ3M,IAAQgY,GAAGG,EAAUzX,UA75EvDkM,IA85EKlM,GAAyBV,KAAO2M,IACnCsL,GAAgBtL,EAAQ3M,EAAKU,GAYjC,SAAS0X,GAAa9N,EAAOtK,GAE3B,IADA,IAAIP,EAAS6K,EAAM7K,OACZA,KACL,GAAIuY,GAAG1N,EAAM7K,GAAQ,GAAIO,GACvB,OAAOP,EAGX,OAAQ,EAcV,SAAS4Y,GAAepM,EAAY1B,EAAQC,EAAUC,GAIpD,OAHA6N,GAASrM,GAAY,SAASvL,EAAOV,EAAKiM,GACxC1B,EAAOE,EAAa/J,EAAO8J,EAAS9J,GAAQuL,MAEvCxB,EAYT,SAAS8N,GAAW5L,EAAQzI,GAC1B,OAAOyI,GAAU6L,GAAWtU,EAAQ0M,GAAK1M,GAASyI,GAyBpD,SAASsL,GAAgBtL,EAAQ3M,EAAKU,GACzB,aAAPV,GAAsBD,GACxBA,GAAe4M,EAAQ3M,EAAK,CAC1B,cAAgB,EAChB,YAAc,EACd,MAASU,EACT,UAAY,IAGdiM,EAAO3M,GAAOU,EAYlB,SAAS+X,GAAO9L,EAAQ+L,GAMtB,IALA,IAAIhO,GAAS,EACTjL,EAASiZ,EAAMjZ,OACf4B,EAASiK,EAAM7L,GACfkZ,EAAiB,MAAVhM,IAEFjC,EAAQjL,GACf4B,EAAOqJ,GAASiO,OAtgFlB/L,EAsgFqCgM,GAAIjM,EAAQ+L,EAAMhO,IAEvD,OAAOrJ,EAYT,SAASwW,GAAUgB,EAAQC,EAAOC,GAShC,OARIF,IAAWA,SArhFfjM,IAshFMmM,IACFF,EAASA,GAAUE,EAAQF,EAASE,QAvhFxCnM,IAyhFMkM,IACFD,EAASA,GAAUC,EAAQD,EAASC,IAGjCD,EAmBT,SAASG,GAAUtY,EAAOuY,EAASC,EAAYlZ,EAAK2M,EAAQwM,GAC1D,IAAI9X,EACA+X,EA5hFc,EA4hFLH,EACTI,EA5hFc,EA4hFLJ,EACTK,EA5hFiB,EA4hFRL,EAKb,GAHIC,IACF7X,EAASsL,EAASuM,EAAWxY,EAAOV,EAAK2M,EAAQwM,GAASD,EAAWxY,SAvjFvEkM,IAyjFIvL,EACF,OAAOA,EAET,IAAKiU,GAAS5U,GACZ,OAAOA,EAET,IAAIsW,EAAQhC,GAAQtU,GACpB,GAAIsW,GAEF,GADA3V,EAu7GJ,SAAwBiJ,GACtB,IAAI7K,EAAS6K,EAAM7K,OACf4B,EAAS,IAAIiJ,EAAM7J,YAAYhB,GAG/BA,GAA6B,iBAAZ6K,EAAM,IAAkBiG,GAAetP,KAAKqJ,EAAO,WACtEjJ,EAAOqJ,MAAQJ,EAAMI,MACrBrJ,EAAOkY,MAAQjP,EAAMiP,OAEvB,OAAOlY,EAh8GImY,CAAe9Y,IACnB0Y,EACH,OAAOxB,GAAUlX,EAAOW,OAErB,CACL,IAAIoY,EAAMC,GAAOhZ,GACbiZ,EAASF,GAAOlX,GAAWkX,GAAOjX,EAEtC,GAAIqQ,GAASnS,GACX,OAAOkZ,GAAYlZ,EAAO0Y,GAE5B,GAAIK,GAAO9W,GAAa8W,GAAOvX,GAAYyX,IAAWhN,GAEpD,GADAtL,EAAUgY,GAAUM,EAAU,GAAKE,GAAgBnZ,IAC9C0Y,EACH,OAAOC,EA2mEf,SAAuBnV,EAAQyI,GAC7B,OAAO6L,GAAWtU,EAAQ4V,GAAa5V,GAASyI,GA3mEtCoN,CAAcrZ,EAnH1B,SAAsBiM,EAAQzI,GAC5B,OAAOyI,GAAU6L,GAAWtU,EAAQ8V,GAAO9V,GAASyI,GAkHrBsN,CAAa5Y,EAAQX,IA8lEtD,SAAqBwD,EAAQyI,GAC3B,OAAO6L,GAAWtU,EAAQgW,GAAWhW,GAASyI,GA9lEpCwN,CAAYzZ,EAAO6X,GAAWlX,EAAQX,QAEvC,CACL,IAAKoH,GAAc2R,GACjB,OAAO9M,EAASjM,EAAQ,GAE1BW,EAs8GN,SAAwBsL,EAAQ8M,EAAKL,GACnC,IAAIgB,EAAOzN,EAAOlM,YAClB,OAAQgZ,GACN,KAAKxW,EACH,OAAOoX,GAAiB1N,GAE1B,KAAKvK,EACL,KAAKC,EACH,OAAO,IAAI+X,GAAMzN,GAEnB,KAAKzJ,EACH,OA1nDN,SAAuBoX,EAAUlB,GAC/B,IAAImB,EAASnB,EAASiB,GAAiBC,EAASC,QAAUD,EAASC,OACnE,OAAO,IAAID,EAAS7Z,YAAY8Z,EAAQD,EAASE,WAAYF,EAASG,YAwnD3DC,CAAc/N,EAAQyM,GAE/B,KAAKjW,EAAY,KAAKC,EACtB,KAAKC,EAAS,KAAKC,EAAU,KAAKC,EAClC,KAAKC,EAAU,IA77LC,6BA67LqB,KAAKC,EAAW,KAAKC,EACxD,OAAOiX,GAAgBhO,EAAQyM,GAEjC,KAAK3W,EACH,OAAO,IAAI2X,EAEb,KAAK1X,EACL,KAAKI,EACH,OAAO,IAAIsX,EAAKzN,GAElB,KAAK/J,EACH,OA7nDN,SAAqBgY,GACnB,IAAIvZ,EAAS,IAAIuZ,EAAOna,YAAYma,EAAO1W,OAAQmB,GAAQsL,KAAKiK,IAEhE,OADAvZ,EAAO2N,UAAY4L,EAAO5L,UACnB3N,EA0nDIwZ,CAAYlO,GAErB,KAAK9J,EACH,OAAO,IAAIuX,EAEb,KAAKrX,EACH,OAtnDe+X,EAsnDInO,EArnDhBgI,GAAgB7U,GAAO6U,GAAc1T,KAAK6Z,IAAW,GAD9D,IAAqBA,EAh3DNC,CAAera,EAAO+Y,EAAKL,IAIxCD,IAAUA,EAAQ,IAAIvC,IACtB,IAAIoE,EAAU7B,EAAMP,IAAIlY,GACxB,GAAIsa,EACF,OAAOA,EAET7B,EAAMtK,IAAInO,EAAOW,GAEb0I,GAAMrJ,GACRA,EAAM6N,SAAQ,SAAS0M,GACrB5Z,EAAOsV,IAAIqC,GAAUiC,EAAUhC,EAASC,EAAY+B,EAAUva,EAAOyY,OAE9DxP,GAAMjJ,IACfA,EAAM6N,SAAQ,SAAS0M,EAAUjb,GAC/BqB,EAAOwN,IAAI7O,EAAKgZ,GAAUiC,EAAUhC,EAASC,EAAYlZ,EAAKU,EAAOyY,OAIzE,IAII5Z,EAAQyX,OAhnFZpK,GA4mFe0M,EACVD,EAAS6B,GAAeC,GACxB9B,EAASW,GAASpJ,IAEkBlQ,GASzC,OARAiK,GAAUpL,GAASmB,GAAO,SAASua,EAAUjb,GACvCT,IAEF0b,EAAWva,EADXV,EAAMib,IAIR/C,GAAY7W,EAAQrB,EAAKgZ,GAAUiC,EAAUhC,EAASC,EAAYlZ,EAAKU,EAAOyY,OAEzE9X,EAyBT,SAAS+Z,GAAezO,EAAQzI,EAAQ3E,GACtC,IAAIE,EAASF,EAAME,OACnB,GAAc,MAAVkN,EACF,OAAQlN,EAGV,IADAkN,EAAS7M,GAAO6M,GACTlN,KAAU,CACf,IAAIO,EAAMT,EAAME,GACZqL,EAAY5G,EAAOlE,GACnBU,EAAQiM,EAAO3M,GAEnB,QA7pFF4M,IA6pFOlM,KAAyBV,KAAO2M,KAAa7B,EAAUpK,GAC1D,OAAO,EAGX,OAAO,EAaT,SAAS2a,GAAUnR,EAAMoR,EAAMlR,GAC7B,GAAmB,mBAARF,EACT,MAAM,IAAI9K,GAAU2C,GAEtB,OAAOsQ,IAAW,WAAanI,EAAKpI,WAlrFpC8K,EAkrFqDxC,KAAUkR,GAcjE,SAASC,GAAejR,EAAOkB,EAAQhB,EAAUY,GAC/C,IAAIV,GAAS,EACT8Q,EAAWvQ,GACXwQ,GAAW,EACXhc,EAAS6K,EAAM7K,OACf4B,EAAS,GACTqa,EAAelQ,EAAO/L,OAE1B,IAAKA,EACH,OAAO4B,EAELmJ,IACFgB,EAASH,GAASG,EAAQ0B,GAAU1C,KAElCY,GACFoQ,EAAWrQ,GACXsQ,GAAW,GAEJjQ,EAAO/L,QA5sFG,MA6sFjB+b,EAAWpO,GACXqO,GAAW,EACXjQ,EAAS,IAAIiL,GAASjL,IAExBmQ,EACA,OAASjR,EAAQjL,GAAQ,CACvB,IAAIiB,EAAQ4J,EAAMI,GACdkR,EAAuB,MAAZpR,EAAmB9J,EAAQ8J,EAAS9J,GAGnD,GADAA,EAAS0K,GAAwB,IAAV1K,EAAeA,EAAQ,EAC1C+a,GAAYG,IAAaA,EAAU,CAErC,IADA,IAAIC,EAAcH,EACXG,KACL,GAAIrQ,EAAOqQ,KAAiBD,EAC1B,SAASD,EAGbta,EAAOkW,KAAK7W,QAEJ8a,EAAShQ,EAAQoQ,EAAUxQ,IACnC/J,EAAOkW,KAAK7W,GAGhB,OAAOW,EAjkCTyT,GAAOgH,iBAAmB,CAQxB,OAAU1X,EAQV,SAAYC,EAQZ,YAAeC,EAQf,SAAY,GAQZ,QAAW,CAQT,EAAKwQ,KAKTA,GAAO1U,UAAYmV,GAAWnV,UAC9B0U,GAAO1U,UAAUK,YAAcqU,GAE/BI,GAAc9U,UAAYgV,GAAWG,GAAWnV,WAChD8U,GAAc9U,UAAUK,YAAcyU,GAsHtCD,GAAY7U,UAAYgV,GAAWG,GAAWnV,WAC9C6U,GAAY7U,UAAUK,YAAcwU,GAoGpCkB,GAAK/V,UAAUiW,MAvEf,WACE3U,KAAKgV,SAAWzC,GAAeA,GAAa,MAAQ,GACpDvS,KAAK4M,KAAO,GAsEd6H,GAAK/V,UAAL,OAzDA,SAAoBJ,GAClB,IAAIqB,EAASK,KAAK4L,IAAItN,WAAe0B,KAAKgV,SAAS1W,GAEnD,OADA0B,KAAK4M,MAAQjN,EAAS,EAAI,EACnBA,GAuDT8U,GAAK/V,UAAUwY,IA3Cf,SAAiB5Y,GACf,IAAI6W,EAAOnV,KAAKgV,SAChB,GAAIzC,GAAc,CAChB,IAAI5S,EAASwV,EAAK7W,GAClB,MA34De,8BA24DRqB,OAx5DTuL,EAw5DiDvL,EAEjD,OAAOkP,GAAetP,KAAK4V,EAAM7W,GAAO6W,EAAK7W,QA15D7C4M,GAg8DFuJ,GAAK/V,UAAUkN,IA1Bf,SAAiBtN,GACf,IAAI6W,EAAOnV,KAAKgV,SAChB,OAAOzC,QAx6DPrH,IAw6DuBiK,EAAK7W,GAAsBuQ,GAAetP,KAAK4V,EAAM7W,IAyB9EmW,GAAK/V,UAAUyO,IAZf,SAAiB7O,EAAKU,GACpB,IAAImW,EAAOnV,KAAKgV,SAGhB,OAFAhV,KAAK4M,MAAQ5M,KAAK4L,IAAItN,GAAO,EAAI,EACjC6W,EAAK7W,GAAQiU,SAx7DbrH,IAw7D6BlM,EA36DZ,4BA26DoDA,EAC9DgB,MAyHT6U,GAAUnW,UAAUiW,MApFpB,WACE3U,KAAKgV,SAAW,GAChBhV,KAAK4M,KAAO,GAmFdiI,GAAUnW,UAAV,OAvEA,SAAyBJ,GACvB,IAAI6W,EAAOnV,KAAKgV,SACZhM,EAAQ0N,GAAavB,EAAM7W,GAE/B,QAAI0K,EAAQ,KAIRA,GADYmM,EAAKpX,OAAS,EAE5BoX,EAAKkF,MAELtK,GAAOxQ,KAAK4V,EAAMnM,EAAO,KAEzBhJ,KAAK4M,MACA,IA0DTiI,GAAUnW,UAAUwY,IA9CpB,SAAsB5Y,GACpB,IAAI6W,EAAOnV,KAAKgV,SACZhM,EAAQ0N,GAAavB,EAAM7W,GAE/B,OAAO0K,EAAQ,OA1gEfkC,EA0gE+BiK,EAAKnM,GAAO,IA2C7C6L,GAAUnW,UAAUkN,IA/BpB,SAAsBtN,GACpB,OAAOoY,GAAa1W,KAAKgV,SAAU1W,IAAQ,GA+B7CuW,GAAUnW,UAAUyO,IAlBpB,SAAsB7O,EAAKU,GACzB,IAAImW,EAAOnV,KAAKgV,SACZhM,EAAQ0N,GAAavB,EAAM7W,GAQ/B,OANI0K,EAAQ,KACRhJ,KAAK4M,KACPuI,EAAKU,KAAK,CAACvX,EAAKU,KAEhBmW,EAAKnM,GAAO,GAAKhK,EAEZgB,MA2GT8U,GAASpW,UAAUiW,MAtEnB,WACE3U,KAAK4M,KAAO,EACZ5M,KAAKgV,SAAW,CACd,KAAQ,IAAIP,GACZ,IAAO,IAAKtC,IAAO0C,IACnB,OAAU,IAAIJ,KAkElBK,GAASpW,UAAT,OArDA,SAAwBJ,GACtB,IAAIqB,EAAS2a,GAAWta,KAAM1B,GAAjB,OAAgCA,GAE7C,OADA0B,KAAK4M,MAAQjN,EAAS,EAAI,EACnBA,GAmDTmV,GAASpW,UAAUwY,IAvCnB,SAAqB5Y,GACnB,OAAOgc,GAAWta,KAAM1B,GAAK4Y,IAAI5Y,IAuCnCwW,GAASpW,UAAUkN,IA3BnB,SAAqBtN,GACnB,OAAOgc,GAAWta,KAAM1B,GAAKsN,IAAItN,IA2BnCwW,GAASpW,UAAUyO,IAdnB,SAAqB7O,EAAKU,GACxB,IAAImW,EAAOmF,GAAWta,KAAM1B,GACxBsO,EAAOuI,EAAKvI,KAIhB,OAFAuI,EAAKhI,IAAI7O,EAAKU,GACdgB,KAAK4M,MAAQuI,EAAKvI,MAAQA,EAAO,EAAI,EAC9B5M,MA2DT+U,GAASrW,UAAUuW,IAAMF,GAASrW,UAAUmX,KAnB5C,SAAqB7W,GAEnB,OADAgB,KAAKgV,SAAS7H,IAAInO,EAjrED,6BAkrEVgB,MAkBT+U,GAASrW,UAAUkN,IANnB,SAAqB5M,GACnB,OAAOgB,KAAKgV,SAASpJ,IAAI5M,IAuG3BkW,GAAMxW,UAAUiW,MA3EhB,WACE3U,KAAKgV,SAAW,IAAIH,GACpB7U,KAAK4M,KAAO,GA0EdsI,GAAMxW,UAAN,OA9DA,SAAqBJ,GACnB,IAAI6W,EAAOnV,KAAKgV,SACZrV,EAASwV,EAAI,OAAW7W,GAG5B,OADA0B,KAAK4M,KAAOuI,EAAKvI,KACVjN,GA0DTuV,GAAMxW,UAAUwY,IA9ChB,SAAkB5Y,GAChB,OAAO0B,KAAKgV,SAASkC,IAAI5Y,IA8C3B4W,GAAMxW,UAAUkN,IAlChB,SAAkBtN,GAChB,OAAO0B,KAAKgV,SAASpJ,IAAItN,IAkC3B4W,GAAMxW,UAAUyO,IArBhB,SAAkB7O,EAAKU,GACrB,IAAImW,EAAOnV,KAAKgV,SAChB,GAAIG,aAAgBN,GAAW,CAC7B,IAAI0F,EAAQpF,EAAKH,SACjB,IAAK7C,IAAQoI,EAAMxc,OAASyc,IAG1B,OAFAD,EAAM1E,KAAK,CAACvX,EAAKU,IACjBgB,KAAK4M,OAASuI,EAAKvI,KACZ5M,KAETmV,EAAOnV,KAAKgV,SAAW,IAAIF,GAASyF,GAItC,OAFApF,EAAKhI,IAAI7O,EAAKU,GACdgB,KAAK4M,KAAOuI,EAAKvI,KACV5M,MAscT,IAAI4W,GAAW6D,GAAeC,IAU1BC,GAAgBF,GAAeG,IAAiB,GAWpD,SAASC,GAAUtQ,EAAYnB,GAC7B,IAAIzJ,GAAS,EAKb,OAJAiX,GAASrM,GAAY,SAASvL,EAAOgK,EAAOuB,GAE1C,OADA5K,IAAWyJ,EAAUpK,EAAOgK,EAAOuB,MAG9B5K,EAaT,SAASmb,GAAalS,EAAOE,EAAUY,GAIrC,IAHA,IAAIV,GAAS,EACTjL,EAAS6K,EAAM7K,SAEViL,EAAQjL,GAAQ,CACvB,IAAIiB,EAAQ4J,EAAMI,GACdqC,EAAUvC,EAAS9J,GAEvB,GAAe,MAAXqM,SAryFNH,IAqyF0BgP,EACf7O,IAAYA,IAAY0P,GAAS1P,GAClC3B,EAAW2B,EAAS6O,IAE1B,IAAIA,EAAW7O,EACX1L,EAASX,EAGjB,OAAOW,EAuCT,SAASqb,GAAWzQ,EAAYnB,GAC9B,IAAIzJ,EAAS,GAMb,OALAiX,GAASrM,GAAY,SAASvL,EAAOgK,EAAOuB,GACtCnB,EAAUpK,EAAOgK,EAAOuB,IAC1B5K,EAAOkW,KAAK7W,MAGTW,EAcT,SAASsb,GAAYrS,EAAOsS,EAAO9R,EAAW+R,EAAUxb,GACtD,IAAIqJ,GAAS,EACTjL,EAAS6K,EAAM7K,OAKnB,IAHAqL,IAAcA,EAAYgS,IAC1Bzb,IAAWA,EAAS,MAEXqJ,EAAQjL,GAAQ,CACvB,IAAIiB,EAAQ4J,EAAMI,GACdkS,EAAQ,GAAK9R,EAAUpK,GACrBkc,EAAQ,EAEVD,GAAYjc,EAAOkc,EAAQ,EAAG9R,EAAW+R,EAAUxb,GAEnDkK,GAAUlK,EAAQX,GAEVmc,IACVxb,EAAOA,EAAO5B,QAAUiB,GAG5B,OAAOW,EAcT,IAAI0b,GAAUC,KAYVC,GAAeD,IAAc,GAUjC,SAASZ,GAAWzP,EAAQnC,GAC1B,OAAOmC,GAAUoQ,GAAQpQ,EAAQnC,EAAUoG,IAW7C,SAAS0L,GAAgB3P,EAAQnC,GAC/B,OAAOmC,GAAUsQ,GAAatQ,EAAQnC,EAAUoG,IAYlD,SAASsM,GAAcvQ,EAAQpN,GAC7B,OAAOwL,GAAYxL,GAAO,SAASS,GACjC,OAAOmd,GAAWxQ,EAAO3M,OAY7B,SAASod,GAAQzQ,EAAQ0Q,GAMvB,IAHA,IAAI3S,EAAQ,EACRjL,GAHJ4d,EAAOC,GAASD,EAAM1Q,IAGJlN,OAED,MAAVkN,GAAkBjC,EAAQjL,GAC/BkN,EAASA,EAAO4Q,GAAMF,EAAK3S,OAE7B,OAAQA,GAASA,GAASjL,EAAUkN,OAj9FpCC,EA+9FF,SAAS4Q,GAAe7Q,EAAQ8Q,EAAUC,GACxC,IAAIrc,EAASoc,EAAS9Q,GACtB,OAAOqI,GAAQrI,GAAUtL,EAASkK,GAAUlK,EAAQqc,EAAY/Q,IAUlE,SAASgR,GAAWjd,GAClB,OAAa,MAATA,OA5+FJkM,IA6+FSlM,EA14FM,qBARL,gBAo5FFmR,IAAkBA,MAAkB/R,GAAOY,GAq2FrD,SAAmBA,GACjB,IAAIkd,EAAQrN,GAAetP,KAAKP,EAAOmR,IACnC4H,EAAM/Y,EAAMmR,IAEhB,IACEnR,EAAMmR,SAz1LRjF,EA01LE,IAAIiR,GAAW,EACf,MAAOxU,IAET,IAAIhI,EAASyP,GAAqB7P,KAAKP,GACnCmd,IACED,EACFld,EAAMmR,IAAkB4H,SAEjB/Y,EAAMmR,KAGjB,OAAOxQ,EAr3FHyc,CAAUpd,GAy4GhB,SAAwBA,GACtB,OAAOoQ,GAAqB7P,KAAKP,GAz4G7Bqd,CAAerd,GAYrB,SAASsd,GAAOtd,EAAOud,GACrB,OAAOvd,EAAQud,EAWjB,SAASC,GAAQvR,EAAQ3M,GACvB,OAAiB,MAAV2M,GAAkB4D,GAAetP,KAAK0L,EAAQ3M,GAWvD,SAASme,GAAUxR,EAAQ3M,GACzB,OAAiB,MAAV2M,GAAkB3M,KAAOF,GAAO6M,GA0BzC,SAASyR,GAAiBC,EAAQ7T,EAAUY,GAS1C,IARA,IAAIoQ,EAAWpQ,EAAaD,GAAoBF,GAC5CxL,EAAS4e,EAAO,GAAG5e,OACnB6e,EAAYD,EAAO5e,OACnB8e,EAAWD,EACXE,EAASlT,EAAMgT,GACfG,EAAYC,IACZrd,EAAS,GAENkd,KAAY,CACjB,IAAIjU,EAAQ+T,EAAOE,GACfA,GAAY/T,IACdF,EAAQe,GAASf,EAAO4C,GAAU1C,KAEpCiU,EAAYrL,GAAU9I,EAAM7K,OAAQgf,GACpCD,EAAOD,IAAanT,IAAeZ,GAAa/K,GAAU,KAAO6K,EAAM7K,QAAU,KAC7E,IAAIgX,GAAS8H,GAAYjU,QAhkG/BsC,EAmkGAtC,EAAQ+T,EAAO,GAEf,IAAI3T,GAAS,EACTiU,EAAOH,EAAO,GAElB7C,EACA,OAASjR,EAAQjL,GAAU4B,EAAO5B,OAASgf,GAAW,CACpD,IAAI/d,EAAQ4J,EAAMI,GACdkR,EAAWpR,EAAWA,EAAS9J,GAASA,EAG5C,GADAA,EAAS0K,GAAwB,IAAV1K,EAAeA,EAAQ,IACxCie,EACEvR,GAASuR,EAAM/C,GACfJ,EAASna,EAAQua,EAAUxQ,IAC5B,CAEL,IADAmT,EAAWD,IACFC,GAAU,CACjB,IAAIlR,EAAQmR,EAAOD,GACnB,KAAMlR,EACED,GAASC,EAAOuO,GAChBJ,EAAS6C,EAAOE,GAAW3C,EAAUxQ,IAE3C,SAASuQ,EAGTgD,GACFA,EAAKpH,KAAKqE,GAEZva,EAAOkW,KAAK7W,IAGhB,OAAOW,EA+BT,SAASud,GAAWjS,EAAQ0Q,EAAMjT,GAGhC,IAAIF,EAAiB,OADrByC,EAASkS,GAAOlS,EADhB0Q,EAAOC,GAASD,EAAM1Q,KAEMA,EAASA,EAAO4Q,GAAMuB,GAAKzB,KACvD,OAAe,MAARnT,OAroGP0C,EAqoGkC9K,GAAMoI,EAAMyC,EAAQvC,GAUxD,SAAS2U,GAAgBre,GACvB,OAAOqU,GAAarU,IAAUid,GAAWjd,IAAUwB,EAuCrD,SAAS8c,GAAYte,EAAOud,EAAOhF,EAASC,EAAYC,GACtD,OAAIzY,IAAUud,IAGD,MAATvd,GAA0B,MAATud,IAAmBlJ,GAAarU,KAAWqU,GAAakJ,GACpEvd,IAAUA,GAASud,IAAUA,EAmBxC,SAAyBtR,EAAQsR,EAAOhF,EAASC,EAAY+F,EAAW9F,GACtE,IAAI+F,EAAWlK,GAAQrI,GACnBwS,EAAWnK,GAAQiJ,GACnBmB,EAASF,EAAW/c,EAAWuX,GAAO/M,GACtC0S,EAASF,EAAWhd,EAAWuX,GAAOuE,GAKtCqB,GAHJF,EAASA,GAAUld,EAAUS,EAAYyc,IAGhBzc,EACrB4c,GAHJF,EAASA,GAAUnd,EAAUS,EAAY0c,IAGhB1c,EACrB6c,EAAYJ,GAAUC,EAE1B,GAAIG,GAAa3M,GAASlG,GAAS,CACjC,IAAKkG,GAASoL,GACZ,OAAO,EAETiB,GAAW,EACXI,GAAW,EAEb,GAAIE,IAAcF,EAEhB,OADAnG,IAAUA,EAAQ,IAAIvC,IACdsI,GAAYjV,GAAa0C,GAC7B8S,GAAY9S,EAAQsR,EAAOhF,EAASC,EAAY+F,EAAW9F,GAy0EnE,SAAoBxM,EAAQsR,EAAOxE,EAAKR,EAASC,EAAY+F,EAAW9F,GACtE,OAAQM,GACN,KAAKvW,EACH,GAAKyJ,EAAO8N,YAAcwD,EAAMxD,YAC3B9N,EAAO6N,YAAcyD,EAAMzD,WAC9B,OAAO,EAET7N,EAASA,EAAO4N,OAChB0D,EAAQA,EAAM1D,OAEhB,KAAKtX,EACH,QAAK0J,EAAO8N,YAAcwD,EAAMxD,aAC3BwE,EAAU,IAAI7N,GAAWzE,GAAS,IAAIyE,GAAW6M,KAKxD,KAAK7b,EACL,KAAKC,EACL,KAAKK,EAGH,OAAOsV,IAAIrL,GAASsR,GAEtB,KAAK3b,EACH,OAAOqK,EAAO+S,MAAQzB,EAAMyB,MAAQ/S,EAAOgT,SAAW1B,EAAM0B,QAE9D,KAAK/c,EACL,KAAKE,EAIH,OAAO6J,GAAWsR,EAAQ,GAE5B,KAAKxb,EACH,IAAImd,EAAUxR,GAEhB,KAAKvL,EACH,IAAIgd,EA1jLe,EA0jLH5G,EAGhB,GAFA2G,IAAYA,EAAUhR,IAElBjC,EAAO2B,MAAQ2P,EAAM3P,OAASuR,EAChC,OAAO,EAGT,IAAI7E,EAAU7B,EAAMP,IAAIjM,GACxB,GAAIqO,EACF,OAAOA,GAAWiD,EAEpBhF,GApkLqB,EAukLrBE,EAAMtK,IAAIlC,EAAQsR,GAClB,IAAI5c,EAASoe,GAAYG,EAAQjT,GAASiT,EAAQ3B,GAAQhF,EAASC,EAAY+F,EAAW9F,GAE1F,OADAA,EAAK,OAAWxM,GACTtL,EAET,KAAK0B,EACH,GAAI4R,GACF,OAAOA,GAAc1T,KAAK0L,IAAWgI,GAAc1T,KAAKgd,GAG9D,OAAO,EAt4ED6B,CAAWnT,EAAQsR,EAAOmB,EAAQnG,EAASC,EAAY+F,EAAW9F,GAExE,KA9sGuB,EA8sGjBF,GAAiC,CACrC,IAAI8G,EAAeT,GAAY/O,GAAetP,KAAK0L,EAAQ,eACvDqT,EAAeT,GAAYhP,GAAetP,KAAKgd,EAAO,eAE1D,GAAI8B,GAAgBC,EAAc,CAChC,IAAIC,EAAeF,EAAepT,EAAOjM,QAAUiM,EAC/CuT,EAAeF,EAAe/B,EAAMvd,QAAUud,EAGlD,OADA9E,IAAUA,EAAQ,IAAIvC,IACfqI,EAAUgB,EAAcC,EAAcjH,EAASC,EAAYC,IAGtE,IAAKqG,EACH,OAAO,EAGT,OADArG,IAAUA,EAAQ,IAAIvC,IAq4ExB,SAAsBjK,EAAQsR,EAAOhF,EAASC,EAAY+F,EAAW9F,GACnE,IAAI0G,EAnmLmB,EAmmLP5G,EACZkH,EAAWhF,GAAWxO,GACtByT,EAAYD,EAAS1gB,OAErB6e,EADWnD,GAAW8C,GACDxe,OAEzB,GAAI2gB,GAAa9B,IAAcuB,EAC7B,OAAO,EAET,IAAInV,EAAQ0V,EACZ,KAAO1V,KAAS,CACd,IAAI1K,EAAMmgB,EAASzV,GACnB,KAAMmV,EAAY7f,KAAOie,EAAQ1N,GAAetP,KAAKgd,EAAOje,IAC1D,OAAO,EAIX,IAAIgb,EAAU7B,EAAMP,IAAIjM,GACxB,GAAIqO,GAAW7B,EAAMP,IAAIqF,GACvB,OAAOjD,GAAWiD,EAEpB,IAAI5c,GAAS,EACb8X,EAAMtK,IAAIlC,EAAQsR,GAClB9E,EAAMtK,IAAIoP,EAAOtR,GAEjB,IAAI0T,EAAWR,EACf,OAASnV,EAAQ0V,GAAW,CAC1BpgB,EAAMmgB,EAASzV,GACf,IAAIyN,EAAWxL,EAAO3M,GAClBsgB,EAAWrC,EAAMje,GAErB,GAAIkZ,EACF,IAAIqH,EAAWV,EACX3G,EAAWoH,EAAUnI,EAAUnY,EAAKie,EAAOtR,EAAQwM,GACnDD,EAAWf,EAAUmI,EAAUtgB,EAAK2M,EAAQsR,EAAO9E,GAGzD,UAnqLFvM,IAmqLQ2T,EACGpI,IAAamI,GAAYrB,EAAU9G,EAAUmI,EAAUrH,EAASC,EAAYC,GAC7EoH,GACD,CACLlf,GAAS,EACT,MAEFgf,IAAaA,EAAkB,eAAPrgB,GAE1B,GAAIqB,IAAWgf,EAAU,CACvB,IAAIG,EAAU7T,EAAOlM,YACjBggB,EAAUxC,EAAMxd,YAGhB+f,GAAWC,KACV,gBAAiB9T,MAAU,gBAAiBsR,IACzB,mBAAXuC,GAAyBA,aAAmBA,GACjC,mBAAXC,GAAyBA,aAAmBA,IACvDpf,GAAS,GAKb,OAFA8X,EAAK,OAAWxM,GAChBwM,EAAK,OAAW8E,GACT5c,EAj8EAqf,CAAa/T,EAAQsR,EAAOhF,EAASC,EAAY+F,EAAW9F,GA3D5DwH,CAAgBjgB,EAAOud,EAAOhF,EAASC,EAAY8F,GAAa7F,IAmFzE,SAASyH,GAAYjU,EAAQzI,EAAQ2c,EAAW3H,GAC9C,IAAIxO,EAAQmW,EAAUphB,OAClBA,EAASiL,EACToW,GAAgB5H,EAEpB,GAAc,MAAVvM,EACF,OAAQlN,EAGV,IADAkN,EAAS7M,GAAO6M,GACTjC,KAAS,CACd,IAAImM,EAAOgK,EAAUnW,GACrB,GAAKoW,GAAgBjK,EAAK,GAClBA,EAAK,KAAOlK,EAAOkK,EAAK,MACtBA,EAAK,KAAMlK,GAEnB,OAAO,EAGX,OAASjC,EAAQjL,GAAQ,CAEvB,IAAIO,GADJ6W,EAAOgK,EAAUnW,IACF,GACXyN,EAAWxL,EAAO3M,GAClB+gB,EAAWlK,EAAK,GAEpB,GAAIiK,GAAgBjK,EAAK,IACvB,QA1yGJjK,IA0yGQuL,KAA4BnY,KAAO2M,GACrC,OAAO,MAEJ,CACL,IAAIwM,EAAQ,IAAIvC,GAChB,GAAIsC,EACF,IAAI7X,EAAS6X,EAAWf,EAAU4I,EAAU/gB,EAAK2M,EAAQzI,EAAQiV,GAEnE,UAlzGJvM,IAkzGUvL,EACE2d,GAAY+B,EAAU5I,EAAU6I,EAA+C9H,EAAYC,GAC3F9X,GAEN,OAAO,GAIb,OAAO,EAWT,SAAS4f,GAAavgB,GACpB,SAAK4U,GAAS5U,KAo4FEwJ,EAp4FiBxJ,EAq4FxB+P,IAAeA,MAAcvG,MAl4FxBiT,GAAWzc,GAASuQ,GAAazL,IAChC2I,KAAKkG,GAAS3T,IAg4F/B,IAAkBwJ,EAp1FlB,SAASgX,GAAaxgB,GAGpB,MAAoB,mBAATA,EACFA,EAEI,MAATA,EACKygB,GAEW,iBAATzgB,EACFsU,GAAQtU,GACX0gB,GAAoB1gB,EAAM,GAAIA,EAAM,IACpC2gB,GAAY3gB,GAEX4gB,GAAS5gB,GAUlB,SAAS6gB,GAAS5U,GAChB,IAAK6U,GAAY7U,GACf,OAAOsG,GAAWtG,GAEpB,IAAItL,EAAS,GACb,IAAK,IAAIrB,KAAOF,GAAO6M,GACjB4D,GAAetP,KAAK0L,EAAQ3M,IAAe,eAAPA,GACtCqB,EAAOkW,KAAKvX,GAGhB,OAAOqB,EAUT,SAASogB,GAAW9U,GAClB,IAAK2I,GAAS3I,GACZ,OAo8FJ,SAAsBA,GACpB,IAAItL,EAAS,GACb,GAAc,MAAVsL,EACF,IAAK,IAAI3M,KAAOF,GAAO6M,GACrBtL,EAAOkW,KAAKvX,GAGhB,OAAOqB,EA38FEqgB,CAAa/U,GAEtB,IAAIgV,EAAUH,GAAY7U,GACtBtL,EAAS,GAEb,IAAK,IAAIrB,KAAO2M,GACD,eAAP3M,IAAyB2hB,GAAYpR,GAAetP,KAAK0L,EAAQ3M,KACrEqB,EAAOkW,KAAKvX,GAGhB,OAAOqB,EAYT,SAASugB,GAAOlhB,EAAOud,GACrB,OAAOvd,EAAQud,EAWjB,SAAS4D,GAAQ5V,EAAYzB,GAC3B,IAAIE,GAAS,EACTrJ,EAASygB,GAAY7V,GAAcX,EAAMW,EAAWxM,QAAU,GAKlE,OAHA6Y,GAASrM,GAAY,SAASvL,EAAOV,EAAKiM,GACxC5K,IAASqJ,GAASF,EAAS9J,EAAOV,EAAKiM,MAElC5K,EAUT,SAASggB,GAAYnd,GACnB,IAAI2c,EAAYkB,GAAa7d,GAC7B,OAAwB,GAApB2c,EAAUphB,QAAeohB,EAAU,GAAG,GACjCmB,GAAwBnB,EAAU,GAAG,GAAIA,EAAU,GAAG,IAExD,SAASlU,GACd,OAAOA,IAAWzI,GAAU0c,GAAYjU,EAAQzI,EAAQ2c,IAY5D,SAASO,GAAoB/D,EAAM0D,GACjC,OAAIkB,GAAM5E,IAAS6E,GAAmBnB,GAC7BiB,GAAwBzE,GAAMF,GAAO0D,GAEvC,SAASpU,GACd,IAAIwL,EAAWS,GAAIjM,EAAQ0Q,GAC3B,YA/+GFzQ,IA++GUuL,GAA0BA,IAAa4I,EAC3CoB,GAAMxV,EAAQ0Q,GACd2B,GAAY+B,EAAU5I,EAAU6I,IAexC,SAASoB,GAAUzV,EAAQzI,EAAQme,EAAUnJ,EAAYC,GACnDxM,IAAWzI,GAGf6Y,GAAQ7Y,GAAQ,SAAS6c,EAAU/gB,GAEjC,GADAmZ,IAAUA,EAAQ,IAAIvC,IAClBtB,GAASyL,IA+BjB,SAAuBpU,EAAQzI,EAAQlE,EAAKqiB,EAAUC,EAAWpJ,EAAYC,GAC3E,IAAIhB,EAAWoK,GAAQ5V,EAAQ3M,GAC3B+gB,EAAWwB,GAAQre,EAAQlE,GAC3Bgb,EAAU7B,EAAMP,IAAImI,GAExB,GAAI/F,EAEF,YADAjD,GAAiBpL,EAAQ3M,EAAKgb,GAGhC,IAAIwH,EAAWtJ,EACXA,EAAWf,EAAU4I,EAAW/gB,EAAM,GAAK2M,EAAQzI,EAAQiV,QA/iH/DvM,EAkjHI6O,OAljHJ7O,IAkjHe4V,EAEf,GAAI/G,EAAU,CACZ,IAAIzE,EAAQhC,GAAQ+L,GAChB5J,GAAUH,GAASnE,GAASkO,GAC5B0B,GAAWzL,IAAUG,GAAUlN,GAAa8W,GAEhDyB,EAAWzB,EACP/J,GAASG,GAAUsL,EACjBzN,GAAQmD,GACVqK,EAAWrK,EAEJuK,GAAkBvK,GACzBqK,EAAW5K,GAAUO,GAEdhB,GACPsE,GAAW,EACX+G,EAAW5I,GAAYmH,GAAU,IAE1B0B,GACPhH,GAAW,EACX+G,EAAW7H,GAAgBoG,GAAU,IAGrCyB,EAAW,GAGNG,GAAc5B,IAAa7J,GAAY6J,IAC9CyB,EAAWrK,EACPjB,GAAYiB,GACdqK,EAAWI,GAAczK,GAEjB7C,GAAS6C,KAAagF,GAAWhF,KACzCqK,EAAW3I,GAAgBkH,KAI7BtF,GAAW,EAGXA,IAEFtC,EAAMtK,IAAIkS,EAAUyB,GACpBF,EAAUE,EAAUzB,EAAUsB,EAAUnJ,EAAYC,GACpDA,EAAK,OAAW4H,IAElBhJ,GAAiBpL,EAAQ3M,EAAKwiB,GAzF1BK,CAAclW,EAAQzI,EAAQlE,EAAKqiB,EAAUD,GAAWlJ,EAAYC,OAEjE,CACH,IAAIqJ,EAAWtJ,EACXA,EAAWqJ,GAAQ5V,EAAQ3M,GAAM+gB,EAAW/gB,EAAM,GAAK2M,EAAQzI,EAAQiV,QA3gH/EvM,WA8gHQ4V,IACFA,EAAWzB,GAEbhJ,GAAiBpL,EAAQ3M,EAAKwiB,MAE/BxI,IAwFL,SAAS8I,GAAQxY,EAAO2C,GACtB,IAAIxN,EAAS6K,EAAM7K,OACnB,GAAKA,EAIL,OAAO6X,GADPrK,GAAKA,EAAI,EAAIxN,EAAS,EACJA,GAAU6K,EAAM2C,QAjnHlCL,EA6nHF,SAASmW,GAAY9W,EAAY+W,EAAWC,GAC1C,IAAIvY,GAAS,EAUb,OATAsY,EAAY3X,GAAS2X,EAAUvjB,OAASujB,EAAY,CAAC7B,IAAWjU,GAAUgW,OA1uF9E,SAAoB5Y,EAAO6Y,GACzB,IAAI1jB,EAAS6K,EAAM7K,OAGnB,IADA6K,EAAM8Y,KAAKD,GACJ1jB,KACL6K,EAAM7K,GAAU6K,EAAM7K,GAAQiB,MAEhC,OAAO4J,EA4uFE+Y,CAPMxB,GAAQ5V,GAAY,SAASvL,EAAOV,EAAKiM,GAIpD,MAAO,CAAE,SAHMZ,GAAS2X,GAAW,SAASxY,GAC1C,OAAOA,EAAS9J,MAEa,QAAWgK,EAAO,MAAShK,OAGlC,SAASiM,EAAQsR,GACzC,OAm4BJ,SAAyBtR,EAAQsR,EAAOgF,GACtC,IAAIvY,GAAS,EACT4Y,EAAc3W,EAAO4W,SACrBC,EAAcvF,EAAMsF,SACpB9jB,EAAS6jB,EAAY7jB,OACrBgkB,EAAeR,EAAOxjB,OAE1B,OAASiL,EAAQjL,GAAQ,CACvB,IAAI4B,EAASqiB,GAAiBJ,EAAY5Y,GAAQ8Y,EAAY9Y,IAC9D,GAAIrJ,EAAQ,CACV,GAAIqJ,GAAS+Y,EACX,OAAOpiB,EAET,IAAIsiB,EAAQV,EAAOvY,GACnB,OAAOrJ,GAAmB,QAATsiB,GAAmB,EAAI,IAU5C,OAAOhX,EAAOjC,MAAQuT,EAAMvT,MA35BnBkZ,CAAgBjX,EAAQsR,EAAOgF,MA4B1C,SAASY,GAAWlX,EAAQ+L,EAAO5N,GAKjC,IAJA,IAAIJ,GAAS,EACTjL,EAASiZ,EAAMjZ,OACf4B,EAAS,KAEJqJ,EAAQjL,GAAQ,CACvB,IAAI4d,EAAO3E,EAAMhO,GACbhK,EAAQ0c,GAAQzQ,EAAQ0Q,GAExBvS,EAAUpK,EAAO2c,IACnByG,GAAQziB,EAAQic,GAASD,EAAM1Q,GAASjM,GAG5C,OAAOW,EA2BT,SAAS0iB,GAAYzZ,EAAOkB,EAAQhB,EAAUY,GAC5C,IAAI4Y,EAAU5Y,EAAaoB,GAAkBtB,GACzCR,GAAS,EACTjL,EAAS+L,EAAO/L,OAChBkf,EAAOrU,EAQX,IANIA,IAAUkB,IACZA,EAASoM,GAAUpM,IAEjBhB,IACFmU,EAAOtT,GAASf,EAAO4C,GAAU1C,OAE1BE,EAAQjL,GAKf,IAJA,IAAI2M,EAAY,EACZ1L,EAAQ8K,EAAOd,GACfkR,EAAWpR,EAAWA,EAAS9J,GAASA,GAEpC0L,EAAY4X,EAAQrF,EAAM/C,EAAUxP,EAAWhB,KAAgB,GACjEuT,IAASrU,GACXmH,GAAOxQ,KAAK0d,EAAMvS,EAAW,GAE/BqF,GAAOxQ,KAAKqJ,EAAO8B,EAAW,GAGlC,OAAO9B,EAYT,SAAS2Z,GAAW3Z,EAAO4Z,GAIzB,IAHA,IAAIzkB,EAAS6K,EAAQ4Z,EAAQzkB,OAAS,EAClCuP,EAAYvP,EAAS,EAElBA,KAAU,CACf,IAAIiL,EAAQwZ,EAAQzkB,GACpB,GAAIA,GAAUuP,GAAatE,IAAUyZ,EAAU,CAC7C,IAAIA,EAAWzZ,EACX4M,GAAQ5M,GACV+G,GAAOxQ,KAAKqJ,EAAOI,EAAO,GAE1B0Z,GAAU9Z,EAAOI,IAIvB,OAAOJ,EAYT,SAASmN,GAAWqB,EAAOC,GACzB,OAAOD,EAAQtG,GAAYgB,MAAkBuF,EAAQD,EAAQ,IAkC/D,SAASuL,GAAWnW,EAAQjB,GAC1B,IAAI5L,EAAS,GACb,IAAK6M,GAAUjB,EAAI,GAAKA,EAxvHL,iBAyvHjB,OAAO5L,EAIT,GACM4L,EAAI,IACN5L,GAAU6M,IAEZjB,EAAIuF,GAAYvF,EAAI,MAElBiB,GAAUA,SAELjB,GAET,OAAO5L,EAWT,SAASijB,GAASpa,EAAMqa,GACtB,OAAOC,GAAYC,GAASva,EAAMqa,EAAOpD,IAAWjX,EAAO,IAU7D,SAASwa,GAAWzY,GAClB,OAAOuL,GAAYhM,GAAOS,IAW5B,SAAS0Y,GAAe1Y,EAAYgB,GAClC,IAAI3C,EAAQkB,GAAOS,GACnB,OAAO0L,GAAYrN,EAAOuN,GAAU5K,EAAG,EAAG3C,EAAM7K,SAalD,SAASqkB,GAAQnX,EAAQ0Q,EAAM3c,EAAOwY,GACpC,IAAK5D,GAAS3I,GACZ,OAAOA,EAST,IALA,IAAIjC,GAAS,EACTjL,GAHJ4d,EAAOC,GAASD,EAAM1Q,IAGJlN,OACduP,EAAYvP,EAAS,EACrBmlB,EAASjY,EAEI,MAAViY,KAAoBla,EAAQjL,GAAQ,CACzC,IAAIO,EAAMud,GAAMF,EAAK3S,IACjB8X,EAAW9hB,EAEf,GAAIgK,GAASsE,EAAW,CACtB,IAAImJ,EAAWyM,EAAO5kB,QAj4H1B4M,KAk4HI4V,EAAWtJ,EAAaA,EAAWf,EAAUnY,EAAK4kB,QAl4HtDhY,KAo4HM4V,EAAWlN,GAAS6C,GAChBA,EACCb,GAAQ+F,EAAK3S,EAAQ,IAAM,GAAK,IAGzCwN,GAAY0M,EAAQ5kB,EAAKwiB,GACzBoC,EAASA,EAAO5kB,GAElB,OAAO2M,EAWT,IAAIkY,GAAe3Q,GAAqB,SAAShK,EAAM2M,GAErD,OADA3C,GAAQrF,IAAI3E,EAAM2M,GACX3M,GAFoBiX,GAazB2D,GAAmB/kB,GAA4B,SAASmK,EAAMgE,GAChE,OAAOnO,GAAemK,EAAM,WAAY,CACtC,cAAgB,EAChB,YAAc,EACd,MAAS6a,GAAS7W,GAClB,UAAY,KALwBiT,GAgBxC,SAAS6D,GAAY/Y,GACnB,OAAO0L,GAAYnM,GAAOS,IAY5B,SAASgZ,GAAU3a,EAAOia,EAAOW,GAC/B,IAAIxa,GAAS,EACTjL,EAAS6K,EAAM7K,OAEf8kB,EAAQ,IACVA,GAASA,EAAQ9kB,EAAS,EAAKA,EAAS8kB,IAE1CW,EAAMA,EAAMzlB,EAASA,EAASylB,GACpB,IACRA,GAAOzlB,GAETA,EAAS8kB,EAAQW,EAAM,EAAMA,EAAMX,IAAW,EAC9CA,KAAW,EAGX,IADA,IAAIljB,EAASiK,EAAM7L,KACViL,EAAQjL,GACf4B,EAAOqJ,GAASJ,EAAMI,EAAQ6Z,GAEhC,OAAOljB,EAYT,SAAS8jB,GAASlZ,EAAYnB,GAC5B,IAAIzJ,EAMJ,OAJAiX,GAASrM,GAAY,SAASvL,EAAOgK,EAAOuB,GAE1C,QADA5K,EAASyJ,EAAUpK,EAAOgK,EAAOuB,SAG1B5K,EAeX,SAAS+jB,GAAgB9a,EAAO5J,EAAO2kB,GACrC,IAAIC,EAAM,EACNC,EAAgB,MAATjb,EAAgBgb,EAAMhb,EAAM7K,OAEvC,GAAoB,iBAATiB,GAAqBA,IAAUA,GAAS6kB,GAz7H3BC,WAy7H0D,CAChF,KAAOF,EAAMC,GAAM,CACjB,IAAIE,EAAOH,EAAMC,IAAU,EACvB3J,EAAWtR,EAAMmb,GAEJ,OAAb7J,IAAsBa,GAASb,KAC9ByJ,EAAczJ,GAAYlb,EAAUkb,EAAWlb,GAClD4kB,EAAMG,EAAM,EAEZF,EAAOE,EAGX,OAAOF,EAET,OAAOG,GAAkBpb,EAAO5J,EAAOygB,GAAUkE,GAgBnD,SAASK,GAAkBpb,EAAO5J,EAAO8J,EAAU6a,GACjD3kB,EAAQ8J,EAAS9J,GASjB,IAPA,IAAI4kB,EAAM,EACNC,EAAgB,MAATjb,EAAgB,EAAIA,EAAM7K,OACjCkmB,EAAWjlB,IAAUA,EACrBklB,EAAsB,OAAVllB,EACZmlB,EAAcpJ,GAAS/b,GACvBolB,OA/hIJlZ,IA+hIqBlM,EAEd4kB,EAAMC,GAAM,CACjB,IAAIE,EAAMjT,IAAa8S,EAAMC,GAAQ,GACjC3J,EAAWpR,EAASF,EAAMmb,IAC1BM,OApiINnZ,IAoiIqBgP,EACfoK,EAAyB,OAAbpK,EACZqK,EAAiBrK,IAAaA,EAC9BsK,EAAczJ,GAASb,GAE3B,GAAI+J,EACF,IAAIQ,EAASd,GAAcY,OAE3BE,EADSL,EACAG,IAAmBZ,GAAcU,GACjCH,EACAK,GAAkBF,IAAiBV,IAAeW,GAClDH,EACAI,GAAkBF,IAAiBC,IAAcX,IAAea,IAChEF,IAAaE,IAGbb,EAAczJ,GAAYlb,EAAUkb,EAAWlb,GAEtDylB,EACFb,EAAMG,EAAM,EAEZF,EAAOE,EAGX,OAAOrS,GAAUmS,EA7/HCC,YAygIpB,SAASY,GAAe9b,EAAOE,GAM7B,IALA,IAAIE,GAAS,EACTjL,EAAS6K,EAAM7K,OACfuL,EAAW,EACX3J,EAAS,KAEJqJ,EAAQjL,GAAQ,CACvB,IAAIiB,EAAQ4J,EAAMI,GACdkR,EAAWpR,EAAWA,EAAS9J,GAASA,EAE5C,IAAKgK,IAAUsN,GAAG4D,EAAU+C,GAAO,CACjC,IAAIA,EAAO/C,EACXva,EAAO2J,KAAwB,IAAVtK,EAAc,EAAIA,GAG3C,OAAOW,EAWT,SAASglB,GAAa3lB,GACpB,MAAoB,iBAATA,EACFA,EAEL+b,GAAS/b,GA3iIP,KA8iIEA,EAWV,SAAS4lB,GAAa5lB,GAEpB,GAAoB,iBAATA,EACT,OAAOA,EAET,GAAIsU,GAAQtU,GAEV,OAAO2K,GAAS3K,EAAO4lB,IAAgB,GAEzC,GAAI7J,GAAS/b,GACX,OAAOmU,GAAiBA,GAAe5T,KAAKP,GAAS,GAEvD,IAAIW,EAAUX,EAAQ,GACtB,MAAkB,KAAVW,GAAkB,EAAIX,IAzkInB,IAykI0C,KAAOW,EAY9D,SAASklB,GAASjc,EAAOE,EAAUY,GACjC,IAAIV,GAAS,EACT8Q,EAAWvQ,GACXxL,EAAS6K,EAAM7K,OACfgc,GAAW,EACXpa,EAAS,GACTsd,EAAOtd,EAEX,GAAI+J,EACFqQ,GAAW,EACXD,EAAWrQ,QAER,GAAI1L,GAnpIU,IAmpIkB,CACnC,IAAIoP,EAAMrE,EAAW,KAAOgc,GAAUlc,GACtC,GAAIuE,EACF,OAAOD,GAAWC,GAEpB4M,GAAW,EACXD,EAAWpO,GACXuR,EAAO,IAAIlI,QAGXkI,EAAOnU,EAAW,GAAKnJ,EAEzBsa,EACA,OAASjR,EAAQjL,GAAQ,CACvB,IAAIiB,EAAQ4J,EAAMI,GACdkR,EAAWpR,EAAWA,EAAS9J,GAASA,EAG5C,GADAA,EAAS0K,GAAwB,IAAV1K,EAAeA,EAAQ,EAC1C+a,GAAYG,IAAaA,EAAU,CAErC,IADA,IAAI6K,EAAY9H,EAAKlf,OACdgnB,KACL,GAAI9H,EAAK8H,KAAe7K,EACtB,SAASD,EAGTnR,GACFmU,EAAKpH,KAAKqE,GAEZva,EAAOkW,KAAK7W,QAEJ8a,EAASmD,EAAM/C,EAAUxQ,KAC7BuT,IAAStd,GACXsd,EAAKpH,KAAKqE,GAEZva,EAAOkW,KAAK7W,IAGhB,OAAOW,EAWT,SAAS+iB,GAAUzX,EAAQ0Q,GAGzB,OAAiB,OADjB1Q,EAASkS,GAAOlS,EADhB0Q,EAAOC,GAASD,EAAM1Q,aAEUA,EAAO4Q,GAAMuB,GAAKzB,KAapD,SAASqJ,GAAW/Z,EAAQ0Q,EAAMsJ,EAASzN,GACzC,OAAO4K,GAAQnX,EAAQ0Q,EAAMsJ,EAAQvJ,GAAQzQ,EAAQ0Q,IAAQnE,GAc/D,SAAS0N,GAAUtc,EAAOQ,EAAW+b,EAAQxa,GAI3C,IAHA,IAAI5M,EAAS6K,EAAM7K,OACfiL,EAAQ2B,EAAY5M,GAAU,GAE1B4M,EAAY3B,MAAYA,EAAQjL,IACtCqL,EAAUR,EAAMI,GAAQA,EAAOJ,KAEjC,OAAOuc,EACH5B,GAAU3a,EAAQ+B,EAAY,EAAI3B,EAAS2B,EAAY3B,EAAQ,EAAIjL,GACnEwlB,GAAU3a,EAAQ+B,EAAY3B,EAAQ,EAAI,EAAK2B,EAAY5M,EAASiL,GAa1E,SAASoc,GAAiBpmB,EAAOqmB,GAC/B,IAAI1lB,EAASX,EAIb,OAHIW,aAAkB4T,KACpB5T,EAASA,EAAOX,SAEXgL,GAAYqb,GAAS,SAAS1lB,EAAQ2lB,GAC3C,OAAOA,EAAO9c,KAAKpI,MAAMklB,EAAO7c,QAASoB,GAAU,CAAClK,GAAS2lB,EAAO5c,SACnE/I,GAaL,SAAS4lB,GAAQ5I,EAAQ7T,EAAUY,GACjC,IAAI3L,EAAS4e,EAAO5e,OACpB,GAAIA,EAAS,EACX,OAAOA,EAAS8mB,GAASlI,EAAO,IAAM,GAKxC,IAHA,IAAI3T,GAAS,EACTrJ,EAASiK,EAAM7L,KAEViL,EAAQjL,GAIf,IAHA,IAAI6K,EAAQ+T,EAAO3T,GACf6T,GAAY,IAEPA,EAAW9e,GACd8e,GAAY7T,IACdrJ,EAAOqJ,GAAS6Q,GAAela,EAAOqJ,IAAUJ,EAAO+T,EAAOE,GAAW/T,EAAUY,IAIzF,OAAOmb,GAAS5J,GAAYtb,EAAQ,GAAImJ,EAAUY,GAYpD,SAAS8b,GAAc3nB,EAAOiM,EAAQ2b,GAMpC,IALA,IAAIzc,GAAS,EACTjL,EAASF,EAAME,OACf2nB,EAAa5b,EAAO/L,OACpB4B,EAAS,KAEJqJ,EAAQjL,GAAQ,CACvB,IAAIiB,EAAQgK,EAAQ0c,EAAa5b,EAAOd,QAvzI1CkC,EAwzIEua,EAAW9lB,EAAQ9B,EAAMmL,GAAQhK,GAEnC,OAAOW,EAUT,SAASgmB,GAAoB3mB,GAC3B,OAAOgiB,GAAkBhiB,GAASA,EAAQ,GAU5C,SAAS4mB,GAAa5mB,GACpB,MAAuB,mBAATA,EAAsBA,EAAQygB,GAW9C,SAAS7D,GAAS5c,EAAOiM,GACvB,OAAIqI,GAAQtU,GACHA,EAEFuhB,GAAMvhB,EAAOiM,GAAU,CAACjM,GAAS6mB,GAAajX,GAAS5P,IAYhE,IAAI8mB,GAAWlD,GAWf,SAASmD,GAAUnd,EAAOia,EAAOW,GAC/B,IAAIzlB,EAAS6K,EAAM7K,OAEnB,OADAylB,OAx3IAtY,IAw3IMsY,EAAoBzlB,EAASylB,GAC1BX,GAASW,GAAOzlB,EAAU6K,EAAQ2a,GAAU3a,EAAOia,EAAOW,GASrE,IAAIjT,GAAeD,IAAmB,SAAS0V,GAC7C,OAAOnf,GAAK0J,aAAayV,IAW3B,SAAS9N,GAAYW,EAAQnB,GAC3B,GAAIA,EACF,OAAOmB,EAAOoN,QAEhB,IAAIloB,EAAS8a,EAAO9a,OAChB4B,EAASgQ,GAAcA,GAAY5R,GAAU,IAAI8a,EAAO9Z,YAAYhB,GAGxE,OADA8a,EAAOqN,KAAKvmB,GACLA,EAUT,SAASgZ,GAAiBwN,GACxB,IAAIxmB,EAAS,IAAIwmB,EAAYpnB,YAAYonB,EAAYpN,YAErD,OADA,IAAIrJ,GAAW/P,GAAQwN,IAAI,IAAIuC,GAAWyW,IACnCxmB,EAgDT,SAASsZ,GAAgBmN,EAAY1O,GACnC,IAAImB,EAASnB,EAASiB,GAAiByN,EAAWvN,QAAUuN,EAAWvN,OACvE,OAAO,IAAIuN,EAAWrnB,YAAY8Z,EAAQuN,EAAWtN,WAAYsN,EAAWroB,QAW9E,SAASikB,GAAiBhjB,EAAOud,GAC/B,GAAIvd,IAAUud,EAAO,CACnB,IAAI8J,OAl+INnb,IAk+IqBlM,EACfklB,EAAsB,OAAVllB,EACZsnB,EAAiBtnB,IAAUA,EAC3BmlB,EAAcpJ,GAAS/b,GAEvBqlB,OAv+INnZ,IAu+IqBqR,EACf+H,EAAsB,OAAV/H,EACZgI,EAAiBhI,IAAUA,EAC3BiI,EAAczJ,GAASwB,GAE3B,IAAM+H,IAAcE,IAAgBL,GAAenlB,EAAQud,GACtD4H,GAAeE,GAAgBE,IAAmBD,IAAcE,GAChEN,GAAaG,GAAgBE,IAC5B8B,GAAgB9B,IACjB+B,EACH,OAAO,EAET,IAAMpC,IAAcC,IAAgBK,GAAexlB,EAAQud,GACtDiI,GAAe6B,GAAgBC,IAAmBpC,IAAcC,GAChEG,GAAa+B,GAAgBC,IAC5BjC,GAAgBiC,IACjB/B,EACH,OAAQ,EAGZ,OAAO,EAuDT,SAASgC,GAAY7d,EAAM8d,EAAUC,EAASC,GAU5C,IATA,IAAIC,GAAa,EACbC,EAAale,EAAK3K,OAClB8oB,EAAgBJ,EAAQ1oB,OACxB+oB,GAAa,EACbC,EAAaP,EAASzoB,OACtBipB,EAAcxV,GAAUoV,EAAaC,EAAe,GACpDlnB,EAASiK,EAAMmd,EAAaC,GAC5BC,GAAeP,IAEVI,EAAYC,GACnBpnB,EAAOmnB,GAAaN,EAASM,GAE/B,OAASH,EAAYE,IACfI,GAAeN,EAAYC,KAC7BjnB,EAAO8mB,EAAQE,IAAcje,EAAKie,IAGtC,KAAOK,KACLrnB,EAAOmnB,KAAepe,EAAKie,KAE7B,OAAOhnB,EAcT,SAASunB,GAAiBxe,EAAM8d,EAAUC,EAASC,GAWjD,IAVA,IAAIC,GAAa,EACbC,EAAale,EAAK3K,OAClBopB,GAAgB,EAChBN,EAAgBJ,EAAQ1oB,OACxBqpB,GAAc,EACdC,EAAcb,EAASzoB,OACvBipB,EAAcxV,GAAUoV,EAAaC,EAAe,GACpDlnB,EAASiK,EAAMod,EAAcK,GAC7BJ,GAAeP,IAEVC,EAAYK,GACnBrnB,EAAOgnB,GAAaje,EAAKie,GAG3B,IADA,IAAI5c,EAAS4c,IACJS,EAAaC,GACpB1nB,EAAOoK,EAASqd,GAAcZ,EAASY,GAEzC,OAASD,EAAeN,IAClBI,GAAeN,EAAYC,KAC7BjnB,EAAOoK,EAAS0c,EAAQU,IAAiBze,EAAKie,MAGlD,OAAOhnB,EAWT,SAASuW,GAAU1T,EAAQoG,GACzB,IAAII,GAAS,EACTjL,EAASyE,EAAOzE,OAGpB,IADA6K,IAAUA,EAAQgB,EAAM7L,MACfiL,EAAQjL,GACf6K,EAAMI,GAASxG,EAAOwG,GAExB,OAAOJ,EAaT,SAASkO,GAAWtU,EAAQ3E,EAAOoN,EAAQuM,GACzC,IAAI8P,GAASrc,EACbA,IAAWA,EAAS,IAKpB,IAHA,IAAIjC,GAAS,EACTjL,EAASF,EAAME,SAEViL,EAAQjL,GAAQ,CACvB,IAAIO,EAAMT,EAAMmL,GAEZ8X,EAAWtJ,EACXA,EAAWvM,EAAO3M,GAAMkE,EAAOlE,GAAMA,EAAK2M,EAAQzI,QAvpJxD0I,WA0pJM4V,IACFA,EAAWte,EAAOlE,IAEhBgpB,EACF/Q,GAAgBtL,EAAQ3M,EAAKwiB,GAE7BtK,GAAYvL,EAAQ3M,EAAKwiB,GAG7B,OAAO7V,EAmCT,SAASsc,GAAiB1e,EAAQ2e,GAChC,OAAO,SAASjd,EAAYzB,GAC1B,IAAIN,EAAO8K,GAAQ/I,GAAc5B,GAAkBgO,GAC/C5N,EAAcye,EAAcA,IAAgB,GAEhD,OAAOhf,EAAK+B,EAAY1B,EAAQ2Y,GAAY1Y,EAAU,GAAIC,IAW9D,SAAS0e,GAAeC,GACtB,OAAO9E,IAAS,SAAS3X,EAAQ0c,GAC/B,IAAI3e,GAAS,EACTjL,EAAS4pB,EAAQ5pB,OACjByZ,EAAazZ,EAAS,EAAI4pB,EAAQ5pB,EAAS,QA1tJjDmN,EA2tJM0c,EAAQ7pB,EAAS,EAAI4pB,EAAQ,QA3tJnCzc,EAsuJE,IATAsM,EAAckQ,EAAS3pB,OAAS,GAA0B,mBAAdyZ,GACvCzZ,IAAUyZ,QA9tJjBtM,EAiuJM0c,GAASC,GAAeF,EAAQ,GAAIA,EAAQ,GAAIC,KAClDpQ,EAAazZ,EAAS,OAluJ1BmN,EAkuJ0CsM,EACtCzZ,EAAS,GAEXkN,EAAS7M,GAAO6M,KACPjC,EAAQjL,GAAQ,CACvB,IAAIyE,EAASmlB,EAAQ3e,GACjBxG,GACFklB,EAASzc,EAAQzI,EAAQwG,EAAOwO,GAGpC,OAAOvM,KAYX,SAASwP,GAAejQ,EAAUG,GAChC,OAAO,SAASJ,EAAYzB,GAC1B,GAAkB,MAAdyB,EACF,OAAOA,EAET,IAAK6V,GAAY7V,GACf,OAAOC,EAASD,EAAYzB,GAM9B,IAJA,IAAI/K,EAASwM,EAAWxM,OACpBiL,EAAQ2B,EAAY5M,GAAU,EAC9B+pB,EAAW1pB,GAAOmM,IAEdI,EAAY3B,MAAYA,EAAQjL,KACa,IAA/C+K,EAASgf,EAAS9e,GAAQA,EAAO8e,KAIvC,OAAOvd,GAWX,SAAS+Q,GAAc3Q,GACrB,OAAO,SAASM,EAAQnC,EAAUiT,GAMhC,IALA,IAAI/S,GAAS,EACT8e,EAAW1pB,GAAO6M,GAClBpN,EAAQke,EAAS9Q,GACjBlN,EAASF,EAAME,OAEZA,KAAU,CACf,IAAIO,EAAMT,EAAM8M,EAAY5M,IAAWiL,GACvC,IAA+C,IAA3CF,EAASgf,EAASxpB,GAAMA,EAAKwpB,GAC/B,MAGJ,OAAO7c,GAgCX,SAAS8c,GAAgBC,GACvB,OAAO,SAASxb,GAGd,IAAIV,EAAaS,GAFjBC,EAASoC,GAASpC,IAGdgB,GAAchB,QAt0JpBtB,EAy0JMoB,EAAMR,EACNA,EAAW,GACXU,EAAOyb,OAAO,GAEdC,EAAWpc,EACXia,GAAUja,EAAY,GAAGtG,KAAK,IAC9BgH,EAAOyZ,MAAM,GAEjB,OAAO3Z,EAAI0b,KAAgBE,GAW/B,SAASC,GAAiBC,GACxB,OAAO,SAAS5b,GACd,OAAOxC,GAAYqe,GAAMC,GAAO9b,GAAQgD,QAAQ7J,GAAQ,KAAMyiB,EAAU,KAY5E,SAASG,GAAW7P,GAClB,OAAO,WAIL,IAAIhQ,EAAOvI,UACX,OAAQuI,EAAK3K,QACX,KAAK,EAAG,OAAO,IAAI2a,EACnB,KAAK,EAAG,OAAO,IAAIA,EAAKhQ,EAAK,IAC7B,KAAK,EAAG,OAAO,IAAIgQ,EAAKhQ,EAAK,GAAIA,EAAK,IACtC,KAAK,EAAG,OAAO,IAAIgQ,EAAKhQ,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAC/C,KAAK,EAAG,OAAO,IAAIgQ,EAAKhQ,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IACxD,KAAK,EAAG,OAAO,IAAIgQ,EAAKhQ,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IACjE,KAAK,EAAG,OAAO,IAAIgQ,EAAKhQ,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAC1E,KAAK,EAAG,OAAO,IAAIgQ,EAAKhQ,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAErF,IAAI8f,EAAc9U,GAAWgF,EAAKha,WAC9BiB,EAAS+Y,EAAKtY,MAAMooB,EAAa9f,GAIrC,OAAOkL,GAASjU,GAAUA,EAAS6oB,GAgDvC,SAASC,GAAWC,GAClB,OAAO,SAASne,EAAYnB,EAAWsB,GACrC,IAAIod,EAAW1pB,GAAOmM,GACtB,IAAK6V,GAAY7V,GAAa,CAC5B,IAAIzB,EAAW0Y,GAAYpY,EAAW,GACtCmB,EAAa2E,GAAK3E,GAClBnB,EAAY,SAAS9K,GAAO,OAAOwK,EAASgf,EAASxpB,GAAMA,EAAKwpB,IAElE,IAAI9e,EAAQ0f,EAAcne,EAAYnB,EAAWsB,GACjD,OAAO1B,GAAS,EAAI8e,EAAShf,EAAWyB,EAAWvB,GAASA,QAx7J9DkC,GAm8JF,SAASyd,GAAWhe,GAClB,OAAOie,IAAS,SAASC,GACvB,IAAI9qB,EAAS8qB,EAAM9qB,OACfiL,EAAQjL,EACR+qB,EAAStV,GAAc9U,UAAUqqB,KAKrC,IAHIpe,GACFke,EAAM5W,UAEDjJ,KAAS,CACd,IAAIR,EAAOqgB,EAAM7f,GACjB,GAAmB,mBAARR,EACT,MAAM,IAAI9K,GAAU2C,GAEtB,GAAIyoB,IAAWE,GAAgC,WAArBC,GAAYzgB,GACpC,IAAIwgB,EAAU,IAAIxV,GAAc,IAAI,GAIxC,IADAxK,EAAQggB,EAAUhgB,EAAQjL,IACjBiL,EAAQjL,GAAQ,CAGvB,IAAImrB,EAAWD,GAFfzgB,EAAOqgB,EAAM7f,IAGTmM,EAAmB,WAAZ+T,EAAwBC,GAAQ3gB,QA19J/C0C,EAg+JM8d,EAJE7T,GAAQiU,GAAWjU,EAAK,KACtB,KAAAA,EAAK,KACJA,EAAK,GAAGpX,QAAqB,GAAXoX,EAAK,GAElB6T,EAAQC,GAAY9T,EAAK,KAAK/U,MAAM4oB,EAAS7T,EAAK,IAElC,GAAf3M,EAAKzK,QAAeqrB,GAAW5gB,GACtCwgB,EAAQE,KACRF,EAAQD,KAAKvgB,GAGrB,OAAO,WACL,IAAIE,EAAOvI,UACPnB,EAAQ0J,EAAK,GAEjB,GAAIsgB,GAA0B,GAAftgB,EAAK3K,QAAeuV,GAAQtU,GACzC,OAAOgqB,EAAQK,MAAMrqB,GAAOA,QAK9B,IAHA,IAAIgK,EAAQ,EACRrJ,EAAS5B,EAAS8qB,EAAM7f,GAAO5I,MAAMJ,KAAM0I,GAAQ1J,IAE9CgK,EAAQjL,GACf4B,EAASkpB,EAAM7f,GAAOzJ,KAAKS,KAAML,GAEnC,OAAOA,MAwBb,SAAS2pB,GAAa9gB,EAAM+O,EAAS9O,EAAS+d,EAAUC,EAAS8C,EAAeC,EAAcC,EAAQC,EAAKC,GACzG,IAAIC,EAv+JY,IAu+JJrS,EACRsS,EA/+Ja,EA++JJtS,EACTuS,EA/+JiB,EA++JLvS,EACZmP,EAAsB,GAAVnP,EACZwS,EAz+Ja,IAy+JJxS,EACTmB,EAAOoR,OAlhKX5e,EAkhKmCqd,GAAW/f,GA6C9C,OA3CA,SAASwgB,IAKP,IAJA,IAAIjrB,EAASoC,UAAUpC,OACnB2K,EAAOkB,EAAM7L,GACbiL,EAAQjL,EAELiL,KACLN,EAAKM,GAAS7I,UAAU6I,GAE1B,GAAI0d,EACF,IAAIxa,EAAc8d,GAAUhB,GACxBiB,EAAehe,GAAavD,EAAMwD,GASxC,GAPIsa,IACF9d,EAAO6d,GAAY7d,EAAM8d,EAAUC,EAASC,IAE1C6C,IACF7gB,EAAOwe,GAAiBxe,EAAM6gB,EAAeC,EAAc9C,IAE7D3oB,GAAUksB,EACNvD,GAAa3oB,EAAS4rB,EAAO,CAC/B,IAAIO,EAAajd,GAAevE,EAAMwD,GACtC,OAAOie,GACL3hB,EAAM+O,EAAS+R,GAAcN,EAAQ9c,YAAazD,EAClDC,EAAMwhB,EAAYT,EAAQC,EAAKC,EAAQ5rB,GAG3C,IAAIyqB,EAAcqB,EAASphB,EAAUzI,KACjCoqB,EAAKN,EAAYtB,EAAYhgB,GAAQA,EAczC,OAZAzK,EAAS2K,EAAK3K,OACV0rB,EACF/gB,EAAO2hB,GAAQ3hB,EAAM+gB,GACZM,GAAUhsB,EAAS,GAC5B2K,EAAKuJ,UAEH2X,GAASF,EAAM3rB,IACjB2K,EAAK3K,OAAS2rB,GAEZ1pB,MAAQA,OAAS6G,IAAQ7G,gBAAgBgpB,IAC3CoB,EAAK1R,GAAQ6P,GAAW6B,IAEnBA,EAAGhqB,MAAMooB,EAAa9f,IAajC,SAAS4hB,GAAezhB,EAAQ0hB,GAC9B,OAAO,SAAStf,EAAQnC,GACtB,OA59DJ,SAAsBmC,EAAQpC,EAAQC,EAAUC,GAI9C,OAHA2R,GAAWzP,GAAQ,SAASjM,EAAOV,EAAK2M,GACtCpC,EAAOE,EAAaD,EAAS9J,GAAQV,EAAK2M,MAErClC,EAw9DEyhB,CAAavf,EAAQpC,EAAQ0hB,EAAWzhB,GAAW,KAY9D,SAAS2hB,GAAoBC,EAAUC,GACrC,OAAO,SAAS3rB,EAAOud,GACrB,IAAI5c,EACJ,QA3lKFuL,IA2lKMlM,QA3lKNkM,IA2lK6BqR,EACzB,OAAOoO,EAKT,QAjmKFzf,IA8lKMlM,IACFW,EAASX,QA/lKbkM,IAimKMqR,EAAqB,CACvB,QAlmKJrR,IAkmKQvL,EACF,OAAO4c,EAEW,iBAATvd,GAAqC,iBAATud,GACrCvd,EAAQ4lB,GAAa5lB,GACrBud,EAAQqI,GAAarI,KAErBvd,EAAQ2lB,GAAa3lB,GACrBud,EAAQoI,GAAapI,IAEvB5c,EAAS+qB,EAAS1rB,EAAOud,GAE3B,OAAO5c,GAWX,SAASirB,GAAWC,GAClB,OAAOjC,IAAS,SAAStH,GAEvB,OADAA,EAAY3X,GAAS2X,EAAW9V,GAAUgW,OACnCoB,IAAS,SAASla,GACvB,IAAID,EAAUzI,KACd,OAAO6qB,EAAUvJ,GAAW,SAASxY,GACnC,OAAO1I,GAAM0I,EAAUL,EAASC,YAexC,SAASoiB,GAAc/sB,EAAQgtB,GAG7B,IAAIC,GAFJD,OA/oKA7f,IA+oKQ6f,EAAsB,IAAMnG,GAAamG,IAEzBhtB,OACxB,GAAIitB,EAAc,EAChB,OAAOA,EAAcrI,GAAWoI,EAAOhtB,GAAUgtB,EAEnD,IAAIprB,EAASgjB,GAAWoI,EAAOna,GAAW7S,EAASsP,GAAW0d,KAC9D,OAAOxe,GAAWwe,GACdhF,GAAUvY,GAAc7N,GAAS,EAAG5B,GAAQyH,KAAK,IACjD7F,EAAOsmB,MAAM,EAAGloB,GA6CtB,SAASktB,GAAYtgB,GACnB,OAAO,SAASkY,EAAOW,EAAK0H,GAa1B,OAZIA,GAAuB,iBAARA,GAAoBrD,GAAehF,EAAOW,EAAK0H,KAChE1H,EAAM0H,OAxsKVhgB,GA2sKE2X,EAAQsI,GAAStI,QA3sKnB3X,IA4sKMsY,GACFA,EAAMX,EACNA,EAAQ,GAERW,EAAM2H,GAAS3H,GAr7CrB,SAAmBX,EAAOW,EAAK0H,EAAMvgB,GAKnC,IAJA,IAAI3B,GAAS,EACTjL,EAASyT,GAAUZ,IAAY4S,EAAMX,IAAUqI,GAAQ,IAAK,GAC5DvrB,EAASiK,EAAM7L,GAEZA,KACL4B,EAAOgL,EAAY5M,IAAWiL,GAAS6Z,EACvCA,GAASqI,EAEX,OAAOvrB,EA+6CEyrB,CAAUvI,EAAOW,EADxB0H,OAltKFhgB,IAktKSggB,EAAsBrI,EAAQW,EAAM,GAAK,EAAK2H,GAASD,GAC3BvgB,IAWvC,SAAS0gB,GAA0BX,GACjC,OAAO,SAAS1rB,EAAOud,GAKrB,MAJsB,iBAATvd,GAAqC,iBAATud,IACvCvd,EAAQssB,GAAStsB,GACjBud,EAAQ+O,GAAS/O,IAEZmO,EAAS1rB,EAAOud,IAqB3B,SAAS4N,GAAc3hB,EAAM+O,EAASgU,EAAUrf,EAAazD,EAAS+d,EAAUC,EAASgD,EAAQC,EAAKC,GACpG,IAAI6B,EAxtKc,EAwtKJjU,EAMdA,GAAYiU,EA5tKQ,GACM,GAJF,GAguKxBjU,KAAaiU,EA5tKa,GADN,OAguKlBjU,IAAW,GAEb,IAAIkU,EAAU,CACZjjB,EAAM+O,EAAS9O,EAVC+iB,EAAUhF,OA7vK5Btb,EA2vKiBsgB,EAAU/E,OA3vK3Bvb,EA8vKuBsgB,OA9vKvBtgB,EA8vK6Csb,EAFvBgF,OA5vKtBtgB,EA4vK4Cub,EAYzBgD,EAAQC,EAAKC,GAG5BhqB,EAAS4rB,EAASnrB,WA3wKtB8K,EA2wKuCugB,GAKvC,OAJIrC,GAAW5gB,IACbkjB,GAAQ/rB,EAAQ8rB,GAElB9rB,EAAOuM,YAAcA,EACdyf,GAAgBhsB,EAAQ6I,EAAM+O,GAUvC,SAASqU,GAAY5D,GACnB,IAAIxf,EAAO6F,GAAK2Z,GAChB,OAAO,SAAS7Q,EAAQ0U,GAGtB,GAFA1U,EAASmU,GAASnU,IAClB0U,EAAyB,MAAbA,EAAoB,EAAIna,GAAUoa,GAAUD,GAAY,OACnDza,GAAe+F,GAAS,CAGvC,IAAI4U,GAAQnd,GAASuI,GAAU,KAAKxJ,MAAM,KAI1C,SADAoe,GAAQnd,GAFIpG,EAAKujB,EAAK,GAAK,MAAQA,EAAK,GAAKF,KAEnB,KAAKle,MAAM,MACvB,GAAK,MAAQoe,EAAK,GAAKF,IAEvC,OAAOrjB,EAAK2O,IAWhB,IAAI2N,GAAczS,IAAQ,EAAInF,GAAW,IAAImF,GAAI,CAAC,EAAE,KAAK,IA3vK5C,IA2vKsE,SAASvI,GAC1F,OAAO,IAAIuI,GAAIvI,IAD2DkiB,GAW5E,SAASC,GAAclQ,GACrB,OAAO,SAAS9Q,GACd,IAAI8M,EAAMC,GAAO/M,GACjB,OAAI8M,GAAOhX,EACF2L,GAAWzB,GAEhB8M,GAAO5W,EACFiM,GAAWnC,GAn3I1B,SAAqBA,EAAQpN,GAC3B,OAAO8L,GAAS9L,GAAO,SAASS,GAC9B,MAAO,CAACA,EAAK2M,EAAO3M,OAm3IX4tB,CAAYjhB,EAAQ8Q,EAAS9Q,KA6BxC,SAASkhB,GAAW3jB,EAAM+O,EAAS9O,EAAS+d,EAAUC,EAASgD,EAAQC,EAAKC,GAC1E,IAAIG,EAr0KiB,EAq0KLvS,EAChB,IAAKuS,GAA4B,mBAARthB,EACvB,MAAM,IAAI9K,GAAU2C,GAEtB,IAAItC,EAASyoB,EAAWA,EAASzoB,OAAS,EAS1C,GARKA,IACHwZ,IAAW,GACXiP,EAAWC,OA52Kbvb,GA82KAwe,OA92KAxe,IA82KMwe,EAAoBA,EAAMlY,GAAUsa,GAAUpC,GAAM,GAC1DC,OA/2KAze,IA+2KQye,EAAsBA,EAAQmC,GAAUnC,GAChD5rB,GAAU0oB,EAAUA,EAAQ1oB,OAAS,EA30KX,GA60KtBwZ,EAAmC,CACrC,IAAIgS,EAAgB/C,EAChBgD,EAAe/C,EAEnBD,EAAWC,OAt3Kbvb,EAw3KA,IAAIiK,EAAO2U,OAx3KX5e,EAw3KmCie,GAAQ3gB,GAEvCijB,EAAU,CACZjjB,EAAM+O,EAAS9O,EAAS+d,EAAUC,EAAS8C,EAAeC,EAC1DC,EAAQC,EAAKC,GAkBf,GAfIxU,GAy6BN,SAAmBA,EAAM3S,GACvB,IAAI+U,EAAUpC,EAAK,GACfiX,EAAa5pB,EAAO,GACpB6pB,EAAa9U,EAAU6U,EACvBrS,EAAWsS,EAAa,IAExBC,EAxwMY,KAywMZF,GA7wMc,GA6wMmB7U,GAzwMrB,KA0wMZ6U,GAzwMc,KAywMmB7U,GAAgCpC,EAAK,GAAGpX,QAAUyE,EAAO,IAC5E,KAAd4pB,GAAqD5pB,EAAO,GAAGzE,QAAUyE,EAAO,IA/wMlE,GA+wM0E+U,EAG5F,IAAMwC,IAAYuS,EAChB,OAAOnX,EAtxMQ,EAyxMbiX,IACFjX,EAAK,GAAK3S,EAAO,GAEjB6pB,GA5xMe,EA4xMD9U,EAA2B,EA1xMnB,GA6xMxB,IAAIvY,EAAQwD,EAAO,GACnB,GAAIxD,EAAO,CACT,IAAIwnB,EAAWrR,EAAK,GACpBA,EAAK,GAAKqR,EAAWD,GAAYC,EAAUxnB,EAAOwD,EAAO,IAAMxD,EAC/DmW,EAAK,GAAKqR,EAAWvZ,GAAekI,EAAK,GAAI7U,GAAekC,EAAO,IAGrExD,EAAQwD,EAAO,MAEbgkB,EAAWrR,EAAK,GAChBA,EAAK,GAAKqR,EAAWU,GAAiBV,EAAUxnB,EAAOwD,EAAO,IAAMxD,EACpEmW,EAAK,GAAKqR,EAAWvZ,GAAekI,EAAK,GAAI7U,GAAekC,EAAO,KAGrExD,EAAQwD,EAAO,MAEb2S,EAAK,GAAKnW,GAxyMI,IA2yMZotB,IACFjX,EAAK,GAAgB,MAAXA,EAAK,GAAa3S,EAAO,GAAKkP,GAAUyD,EAAK,GAAI3S,EAAO,KAGrD,MAAX2S,EAAK,KACPA,EAAK,GAAK3S,EAAO,IAGnB2S,EAAK,GAAK3S,EAAO,GACjB2S,EAAK,GAAKkX,EA19BRE,CAAUd,EAAStW,GAErB3M,EAAOijB,EAAQ,GACflU,EAAUkU,EAAQ,GAClBhjB,EAAUgjB,EAAQ,GAClBjF,EAAWiF,EAAQ,GACnBhF,EAAUgF,EAAQ,KAClB9B,EAAQ8B,EAAQ,QAv4KhBvgB,IAu4KqBugB,EAAQ,GACxB3B,EAAY,EAAIthB,EAAKzK,OACtByT,GAAUia,EAAQ,GAAK1tB,EAAQ,KAEX,GAAVwZ,IACZA,IAAW,IAERA,GA/2KY,GA+2KDA,EAGd5X,EA/2KgB,GA82KP4X,GA72Ka,IA62KiBA,EApgB3C,SAAqB/O,EAAM+O,EAASoS,GAClC,IAAIjR,EAAO6P,GAAW/f,GAwBtB,OAtBA,SAASwgB,IAMP,IALA,IAAIjrB,EAASoC,UAAUpC,OACnB2K,EAAOkB,EAAM7L,GACbiL,EAAQjL,EACRmO,EAAc8d,GAAUhB,GAErBhgB,KACLN,EAAKM,GAAS7I,UAAU6I,GAE1B,IAAIyd,EAAW1oB,EAAS,GAAK2K,EAAK,KAAOwD,GAAexD,EAAK3K,EAAS,KAAOmO,EACzE,GACAe,GAAevE,EAAMwD,GAGzB,IADAnO,GAAU0oB,EAAQ1oB,QACL4rB,EACX,OAAOQ,GACL3hB,EAAM+O,EAAS+R,GAAcN,EAAQ9c,iBA/5J3ChB,EAg6JMxC,EAAM+d,OAh6JZvb,SAg6J2Cye,EAAQ5rB,GAEjD,IAAIqsB,EAAMpqB,MAAQA,OAAS6G,IAAQ7G,gBAAgBgpB,EAAWtQ,EAAOlQ,EACrE,OAAOpI,GAAMgqB,EAAIpqB,KAAM0I,IA8ed8jB,CAAYhkB,EAAM+O,EAASoS,GA72KlB,IA82KRpS,GAA2C,IAAXA,GAAqDkP,EAAQ1oB,OAG9FurB,GAAalpB,WAr5KxB8K,EAq5KyCugB,GA9O3C,SAAuBjjB,EAAM+O,EAAS9O,EAAS+d,GAC7C,IAAIqD,EAzoKa,EAyoKJtS,EACTmB,EAAO6P,GAAW/f,GAkBtB,OAhBA,SAASwgB,IAQP,IAPA,IAAIrC,GAAa,EACbC,EAAazmB,UAAUpC,OACvB+oB,GAAa,EACbC,EAAaP,EAASzoB,OACtB2K,EAAOkB,EAAMmd,EAAaH,GAC1BwD,EAAMpqB,MAAQA,OAAS6G,IAAQ7G,gBAAgBgpB,EAAWtQ,EAAOlQ,IAE5Dse,EAAYC,GACnBre,EAAKoe,GAAaN,EAASM,GAE7B,KAAOF,KACLle,EAAKoe,KAAe3mB,YAAYwmB,GAElC,OAAOvmB,GAAMgqB,EAAIP,EAASphB,EAAUzI,KAAM0I,IA0NjC+jB,CAAcjkB,EAAM+O,EAAS9O,EAAS+d,QAJ/C,IAAI7mB,EAhmBR,SAAoB6I,EAAM+O,EAAS9O,GACjC,IAAIohB,EAjxJa,EAixJJtS,EACTmB,EAAO6P,GAAW/f,GAMtB,OAJA,SAASwgB,IACP,IAAIoB,EAAMpqB,MAAQA,OAAS6G,IAAQ7G,gBAAgBgpB,EAAWtQ,EAAOlQ,EACrE,OAAO4hB,EAAGhqB,MAAMypB,EAASphB,EAAUzI,KAAMG,YA0lB5BusB,CAAWlkB,EAAM+O,EAAS9O,GASzC,OAAOkjB,IADMxW,EAAOgO,GAAcuI,IACJ/rB,EAAQ8rB,GAAUjjB,EAAM+O,GAexD,SAASoV,GAAuBlW,EAAU4I,EAAU/gB,EAAK2M,GACvD,YAx6KAC,IAw6KIuL,GACCH,GAAGG,EAAUhI,GAAYnQ,MAAUuQ,GAAetP,KAAK0L,EAAQ3M,GAC3D+gB,EAEF5I,EAiBT,SAASmW,GAAoBnW,EAAU4I,EAAU/gB,EAAK2M,EAAQzI,EAAQiV,GAOpE,OANI7D,GAAS6C,IAAa7C,GAASyL,KAEjC5H,EAAMtK,IAAIkS,EAAU5I,GACpBiK,GAAUjK,EAAU4I,OAj8KtBnU,EAi8K2C0hB,GAAqBnV,GAC9DA,EAAK,OAAW4H,IAEX5I,EAYT,SAASoW,GAAgB7tB,GACvB,OAAOiiB,GAAcjiB,QAj9KrBkM,EAi9K0ClM,EAgB5C,SAAS+e,GAAYnV,EAAO2T,EAAOhF,EAASC,EAAY+F,EAAW9F,GACjE,IAAI0G,EAv8KmB,EAu8KP5G,EACZuV,EAAYlkB,EAAM7K,OAClB6e,EAAYL,EAAMxe,OAEtB,GAAI+uB,GAAalQ,KAAeuB,GAAavB,EAAYkQ,GACvD,OAAO,EAGT,IAAIxT,EAAU7B,EAAMP,IAAItO,GACxB,GAAI0Q,GAAW7B,EAAMP,IAAIqF,GACvB,OAAOjD,GAAWiD,EAEpB,IAAIvT,GAAS,EACTrJ,GAAS,EACTsd,EAp9KqB,EAo9Kb1F,EAAoC,IAAIxC,QAh/KpD7J,EAs/KA,IAJAuM,EAAMtK,IAAIvE,EAAO2T,GACjB9E,EAAMtK,IAAIoP,EAAO3T,KAGRI,EAAQ8jB,GAAW,CAC1B,IAAIC,EAAWnkB,EAAMI,GACjB4V,EAAWrC,EAAMvT,GAErB,GAAIwO,EACF,IAAIqH,EAAWV,EACX3G,EAAWoH,EAAUmO,EAAU/jB,EAAOuT,EAAO3T,EAAO6O,GACpDD,EAAWuV,EAAUnO,EAAU5V,EAAOJ,EAAO2T,EAAO9E,GAE1D,QA//KFvM,IA+/KM2T,EAAwB,CAC1B,GAAIA,EACF,SAEFlf,GAAS,EACT,MAGF,GAAIsd,GACF,IAAK9S,GAAUoS,GAAO,SAASqC,EAAU/B,GACnC,IAAKnR,GAASuR,EAAMJ,KACfkQ,IAAanO,GAAYrB,EAAUwP,EAAUnO,EAAUrH,EAASC,EAAYC,IAC/E,OAAOwF,EAAKpH,KAAKgH,MAEjB,CACNld,GAAS,EACT,YAEG,GACDotB,IAAanO,IACXrB,EAAUwP,EAAUnO,EAAUrH,EAASC,EAAYC,GACpD,CACL9X,GAAS,EACT,OAKJ,OAFA8X,EAAK,OAAW7O,GAChB6O,EAAK,OAAW8E,GACT5c,EAyKT,SAASipB,GAASpgB,GAChB,OAAOsa,GAAYC,GAASva,OArsL5B0C,EAqsL6C8hB,IAAUxkB,EAAO,IAUhE,SAASiR,GAAWxO,GAClB,OAAO6Q,GAAe7Q,EAAQiE,GAAMsJ,IAWtC,SAASgB,GAAavO,GACpB,OAAO6Q,GAAe7Q,EAAQqN,GAAQF,IAUxC,IAAI+Q,GAAW3W,GAAiB,SAAShK,GACvC,OAAOgK,GAAQ0E,IAAI1O,IADIwjB,GAWzB,SAAS/C,GAAYzgB,GAKnB,IAJA,IAAI7I,EAAU6I,EAAKwV,KAAO,GACtBpV,EAAQ6J,GAAU9S,GAClB5B,EAAS8Q,GAAetP,KAAKkT,GAAW9S,GAAUiJ,EAAM7K,OAAS,EAE9DA,KAAU,CACf,IAAIoX,EAAOvM,EAAM7K,GACbkvB,EAAY9X,EAAK3M,KACrB,GAAiB,MAAbykB,GAAqBA,GAAazkB,EACpC,OAAO2M,EAAK6I,KAGhB,OAAOre,EAUT,SAASqqB,GAAUxhB,GAEjB,OADaqG,GAAetP,KAAK6T,GAAQ,eAAiBA,GAAS5K,GACrD0D,YAchB,SAASsV,KACP,IAAI7hB,EAASyT,GAAOtK,UAAYA,GAEhC,OADAnJ,EAASA,IAAWmJ,GAAW0W,GAAe7f,EACvCQ,UAAUpC,OAAS4B,EAAOQ,UAAU,GAAIA,UAAU,IAAMR,EAWjE,SAAS2a,GAAW3N,EAAKrO,GACvB,IAAI6W,EAAOxI,EAAIqI,SACf,OA+XF,SAAmBhW,GACjB,IAAIkuB,SAAcluB,EAClB,MAAgB,UAARkuB,GAA4B,UAARA,GAA4B,UAARA,GAA4B,WAARA,EACrD,cAAVluB,EACU,OAAVA,EAnYEmuB,CAAU7uB,GACb6W,EAAmB,iBAAP7W,EAAkB,SAAW,QACzC6W,EAAKxI,IAUX,SAAS0T,GAAapV,GAIpB,IAHA,IAAItL,EAASuP,GAAKjE,GACdlN,EAAS4B,EAAO5B,OAEbA,KAAU,CACf,IAAIO,EAAMqB,EAAO5B,GACbiB,EAAQiM,EAAO3M,GAEnBqB,EAAO5B,GAAU,CAACO,EAAKU,EAAOwhB,GAAmBxhB,IAEnD,OAAOW,EAWT,SAAS0Q,GAAUpF,EAAQ3M,GACzB,IAAIU,EA7uJR,SAAkBiM,EAAQ3M,GACxB,OAAiB,MAAV2M,OA7lCLC,EA6lCkCD,EAAO3M,GA4uJ7B8uB,CAASniB,EAAQ3M,GAC7B,OAAOihB,GAAavgB,GAASA,OA10L7BkM,EA+2LF,IAAIsN,GAAcxH,GAA+B,SAAS/F,GACxD,OAAc,MAAVA,EACK,IAETA,EAAS7M,GAAO6M,GACT5B,GAAY2H,GAAiB/F,IAAS,SAASmO,GACpD,OAAOtJ,GAAqBvQ,KAAK0L,EAAQmO,QANRiU,GAiBjCjV,GAAgBpH,GAA+B,SAAS/F,GAE1D,IADA,IAAItL,EAAS,GACNsL,GACLpB,GAAUlK,EAAQ6Y,GAAWvN,IAC7BA,EAAS2E,GAAa3E,GAExB,OAAOtL,GAN8B0tB,GAgBnCrV,GAASiE,GA2Eb,SAASqR,GAAQriB,EAAQ0Q,EAAM4R,GAO7B,IAJA,IAAIvkB,GAAS,EACTjL,GAHJ4d,EAAOC,GAASD,EAAM1Q,IAGJlN,OACd4B,GAAS,IAEJqJ,EAAQjL,GAAQ,CACvB,IAAIO,EAAMud,GAAMF,EAAK3S,IACrB,KAAMrJ,EAAmB,MAAVsL,GAAkBsiB,EAAQtiB,EAAQ3M,IAC/C,MAEF2M,EAASA,EAAO3M,GAElB,OAAIqB,KAAYqJ,GAASjL,EAChB4B,KAET5B,EAAmB,MAAVkN,EAAiB,EAAIA,EAAOlN,SAClByvB,GAASzvB,IAAW6X,GAAQtX,EAAKP,KACjDuV,GAAQrI,IAAWuK,GAAYvK,IA6BpC,SAASkN,GAAgBlN,GACvB,MAAqC,mBAAtBA,EAAOlM,aAA8B+gB,GAAY7U,GAE5D,GADAyI,GAAW9D,GAAa3E,IA8E9B,SAASmQ,GAAcpc,GACrB,OAAOsU,GAAQtU,IAAUwW,GAAYxW,OAChCgR,IAAoBhR,GAASA,EAAMgR,KAW1C,SAAS4F,GAAQ5W,EAAOjB,GACtB,IAAImvB,SAAcluB,EAGlB,SAFAjB,EAAmB,MAAVA,EAjjMU,iBAijM0BA,KAGlC,UAARmvB,GACU,UAARA,GAAoBlpB,GAASyI,KAAKzN,KAChCA,GAAS,GAAKA,EAAQ,GAAK,GAAKA,EAAQjB,EAajD,SAAS8pB,GAAe7oB,EAAOgK,EAAOiC,GACpC,IAAK2I,GAAS3I,GACZ,OAAO,EAET,IAAIiiB,SAAclkB,EAClB,SAAY,UAARkkB,EACK9M,GAAYnV,IAAW2K,GAAQ5M,EAAOiC,EAAOlN,QACrC,UAARmvB,GAAoBlkB,KAASiC,IAE7BqL,GAAGrL,EAAOjC,GAAQhK,GAa7B,SAASuhB,GAAMvhB,EAAOiM,GACpB,GAAIqI,GAAQtU,GACV,OAAO,EAET,IAAIkuB,SAAcluB,EAClB,QAAY,UAARkuB,GAA4B,UAARA,GAA4B,WAARA,GAC/B,MAATluB,IAAiB+b,GAAS/b,MAGvB8D,EAAc2J,KAAKzN,KAAW6D,EAAa4J,KAAKzN,IAC1C,MAAViM,GAAkBjM,KAASZ,GAAO6M,IAyBvC,SAASme,GAAW5gB,GAClB,IAAI0gB,EAAWD,GAAYzgB,GACvB+T,EAAQnJ,GAAO8V,GAEnB,GAAoB,mBAAT3M,KAAyB2M,KAAY3V,GAAY7U,WAC1D,OAAO,EAET,GAAI8J,IAAS+T,EACX,OAAO,EAET,IAAIpH,EAAOgU,GAAQ5M,GACnB,QAASpH,GAAQ3M,IAAS2M,EAAK,IA7S5BjD,IAAY8F,GAAO,IAAI9F,GAAS,IAAIub,YAAY,MAAQjsB,GACxD2Q,IAAO6F,GAAO,IAAI7F,KAAQpR,GAC1BqR,IAxzLU,oBAwzLC4F,GAAO5F,GAAQsb,YAC1Brb,IAAO2F,GAAO,IAAI3F,KAAQlR,GAC1BmR,IAAW0F,GAAO,IAAI1F,KAAYhR,KACrC0W,GAAS,SAAShZ,GAChB,IAAIW,EAASsc,GAAWjd,GACpB0Z,EAAO/Y,GAAUsB,EAAYjC,EAAMD,iBA15LzCmM,EA25LMyiB,EAAajV,EAAO/F,GAAS+F,GAAQ,GAEzC,GAAIiV,EACF,OAAQA,GACN,KAAKjb,GAAoB,OAAOlR,EAChC,KAAKoR,GAAe,OAAO7R,EAC3B,KAAK8R,GAAmB,MAp0LjB,mBAq0LP,KAAKC,GAAe,OAAO3R,EAC3B,KAAK4R,GAAmB,OAAOzR,EAGnC,OAAO3B,IA+SX,IAAIiuB,GAAalf,GAAa+M,GAAaoS,GAS3C,SAAS/N,GAAY9gB,GACnB,IAAI0Z,EAAO1Z,GAASA,EAAMD,YAG1B,OAAOC,KAFqB,mBAAR0Z,GAAsBA,EAAKha,WAAc+P,IAa/D,SAAS+R,GAAmBxhB,GAC1B,OAAOA,IAAUA,IAAU4U,GAAS5U,GAYtC,SAASshB,GAAwBhiB,EAAK+gB,GACpC,OAAO,SAASpU,GACd,OAAc,MAAVA,IAGGA,EAAO3M,KAAS+gB,SA/vMzBnU,IAgwMKmU,GAA2B/gB,KAAOF,GAAO6M,MAsIhD,SAAS8X,GAASva,EAAMqa,EAAO9V,GAE7B,OADA8V,EAAQrR,QAv4MRtG,IAu4MkB2X,EAAuBra,EAAKzK,OAAS,EAAK8kB,EAAO,GAC5D,WAML,IALA,IAAIna,EAAOvI,UACP6I,GAAS,EACTjL,EAASyT,GAAU9I,EAAK3K,OAAS8kB,EAAO,GACxCja,EAAQgB,EAAM7L,KAETiL,EAAQjL,GACf6K,EAAMI,GAASN,EAAKma,EAAQ7Z,GAE9BA,GAAS,EAET,IADA,IAAI8kB,EAAYlkB,EAAMiZ,EAAQ,KACrB7Z,EAAQ6Z,GACfiL,EAAU9kB,GAASN,EAAKM,GAG1B,OADA8kB,EAAUjL,GAAS9V,EAAUnE,GACtBxI,GAAMoI,EAAMxI,KAAM8tB,IAY7B,SAAS3Q,GAAOlS,EAAQ0Q,GACtB,OAAOA,EAAK5d,OAAS,EAAIkN,EAASyQ,GAAQzQ,EAAQsY,GAAU5H,EAAM,GAAI,IAaxE,SAAS0O,GAAQzhB,EAAO4Z,GAKtB,IAJA,IAAIsK,EAAYlkB,EAAM7K,OAClBA,EAAS2T,GAAU8Q,EAAQzkB,OAAQ+uB,GACnCiB,EAAW7X,GAAUtN,GAElB7K,KAAU,CACf,IAAIiL,EAAQwZ,EAAQzkB,GACpB6K,EAAM7K,GAAU6X,GAAQ5M,EAAO8jB,GAAaiB,EAAS/kB,QAx7MvDkC,EA07MA,OAAOtC,EAWT,SAASiY,GAAQ5V,EAAQ3M,GACvB,IAAY,gBAARA,GAAgD,oBAAhB2M,EAAO3M,KAIhC,aAAPA,EAIJ,OAAO2M,EAAO3M,GAiBhB,IAAIotB,GAAUsC,GAAS7K,IAUnBxS,GAAaD,IAAiB,SAASlI,EAAMoR,GAC/C,OAAO/S,GAAK8J,WAAWnI,EAAMoR,IAW3BkJ,GAAckL,GAAS5K,IAY3B,SAASuI,GAAgB3C,EAASiF,EAAW1W,GAC3C,IAAI/U,EAAUyrB,EAAY,GAC1B,OAAOnL,GAAYkG,EA1brB,SAA2BxmB,EAAQ0rB,GACjC,IAAInwB,EAASmwB,EAAQnwB,OACrB,IAAKA,EACH,OAAOyE,EAET,IAAI8K,EAAYvP,EAAS,EAGzB,OAFAmwB,EAAQ5gB,IAAcvP,EAAS,EAAI,KAAO,IAAMmwB,EAAQ5gB,GACxD4gB,EAAUA,EAAQ1oB,KAAKzH,EAAS,EAAI,KAAO,KACpCyE,EAAOgN,QAAQnM,EAAe,uBAAyB6qB,EAAU,UAkb5CC,CAAkB3rB,EAqHhD,SAA2B0rB,EAAS3W,GAOlC,OANAtO,GAAU1I,GAAW,SAASwrB,GAC5B,IAAI/sB,EAAQ,KAAO+sB,EAAK,GACnBxU,EAAUwU,EAAK,KAAQxiB,GAAc2kB,EAASlvB,IACjDkvB,EAAQrY,KAAK7W,MAGVkvB,EAAQxM,OA5HuC0M,CAtjBxD,SAAwB5rB,GACtB,IAAIiL,EAAQjL,EAAOiL,MAAMnK,GACzB,OAAOmK,EAAQA,EAAM,GAAGE,MAAMpK,GAAkB,GAojBwB8qB,CAAe7rB,GAAS+U,KAYlG,SAASyW,GAASxlB,GAChB,IAAI8lB,EAAQ,EACRC,EAAa,EAEjB,OAAO,WACL,IAAIC,EAAQ5c,KACR6c,EAr+MK,IAq+MmBD,EAAQD,GAGpC,GADAA,EAAaC,EACTC,EAAY,GACd,KAAMH,GA1+ME,IA2+MN,OAAOnuB,UAAU,QAGnBmuB,EAAQ,EAEV,OAAO9lB,EAAKpI,WA/hNd8K,EA+hN+B/K,YAYjC,SAAS8V,GAAYrN,EAAOgE,GAC1B,IAAI5D,GAAS,EACTjL,EAAS6K,EAAM7K,OACfuP,EAAYvP,EAAS,EAGzB,IADA6O,OAhjNA1B,IAgjNO0B,EAAqB7O,EAAS6O,IAC5B5D,EAAQ4D,GAAM,CACrB,IAAI8hB,EAAO3Y,GAAW/M,EAAOsE,GACzBtO,EAAQ4J,EAAM8lB,GAElB9lB,EAAM8lB,GAAQ9lB,EAAMI,GACpBJ,EAAMI,GAAShK,EAGjB,OADA4J,EAAM7K,OAAS6O,EACRhE,EAUT,IAAIid,GAvTJ,SAAuBrd,GACrB,IAAI7I,EAASgvB,GAAQnmB,GAAM,SAASlK,GAIlC,OAjwMiB,MA8vMbqN,EAAMiB,MACRjB,EAAMgJ,QAEDrW,KAGLqN,EAAQhM,EAAOgM,MACnB,OAAOhM,EA8SUivB,EAAc,SAASpiB,GACxC,IAAI7M,EAAS,GAOb,OAN6B,KAAzB6M,EAAOqiB,WAAW,IACpBlvB,EAAOkW,KAAK,IAEdrJ,EAAOgD,QAAQzM,GAAY,SAAS0K,EAAO0J,EAAQ2X,EAAOC,GACxDpvB,EAAOkW,KAAKiZ,EAAQC,EAAUvf,QAAQ/L,GAAc,MAAS0T,GAAU1J,MAElE9N,KAUT,SAASkc,GAAM7c,GACb,GAAoB,iBAATA,GAAqB+b,GAAS/b,GACvC,OAAOA,EAET,IAAIW,EAAUX,EAAQ,GACtB,MAAkB,KAAVW,GAAkB,EAAIX,IAliNnB,IAkiN0C,KAAOW,EAU9D,SAASgT,GAASnK,GAChB,GAAY,MAARA,EAAc,CAChB,IACE,OAAOmG,GAAapP,KAAKiJ,GACzB,MAAOb,IACT,IACE,OAAQa,EAAO,GACf,MAAOb,KAEX,MAAO,GA4BT,SAAS8L,GAAauV,GACpB,GAAIA,aAAmBzV,GACrB,OAAOyV,EAAQgG,QAEjB,IAAIrvB,EAAS,IAAI6T,GAAcwV,EAAQjV,YAAaiV,EAAQ/U,WAI5D,OAHAtU,EAAOqU,YAAckC,GAAU8S,EAAQhV,aACvCrU,EAAOuU,UAAa8U,EAAQ9U,UAC5BvU,EAAOwU,WAAa6U,EAAQ7U,WACrBxU,EAsIT,IAAIsvB,GAAarM,IAAS,SAASha,EAAOkB,GACxC,OAAOkX,GAAkBpY,GACrBiR,GAAejR,EAAOqS,GAAYnR,EAAQ,EAAGkX,IAAmB,IAChE,MA6BFkO,GAAetM,IAAS,SAASha,EAAOkB,GAC1C,IAAIhB,EAAWsU,GAAKtT,GAIpB,OAHIkX,GAAkBlY,KACpBA,OA1zNFoC,GA4zNO8V,GAAkBpY,GACrBiR,GAAejR,EAAOqS,GAAYnR,EAAQ,EAAGkX,IAAmB,GAAOQ,GAAY1Y,EAAU,IAC7F,MA0BFqmB,GAAiBvM,IAAS,SAASha,EAAOkB,GAC5C,IAAIJ,EAAa0T,GAAKtT,GAItB,OAHIkX,GAAkBtX,KACpBA,OA31NFwB,GA61NO8V,GAAkBpY,GACrBiR,GAAejR,EAAOqS,GAAYnR,EAAQ,EAAGkX,IAAmB,QA91NpE9V,EA81NsFxB,GAClF,MAsON,SAAS0lB,GAAUxmB,EAAOQ,EAAWsB,GACnC,IAAI3M,EAAkB,MAAT6K,EAAgB,EAAIA,EAAM7K,OACvC,IAAKA,EACH,OAAQ,EAEV,IAAIiL,EAAqB,MAAb0B,EAAoB,EAAIohB,GAAUphB,GAI9C,OAHI1B,EAAQ,IACVA,EAAQwI,GAAUzT,EAASiL,EAAO,IAE7ByB,GAAc7B,EAAO4Y,GAAYpY,EAAW,GAAIJ,GAsCzD,SAASqmB,GAAczmB,EAAOQ,EAAWsB,GACvC,IAAI3M,EAAkB,MAAT6K,EAAgB,EAAIA,EAAM7K,OACvC,IAAKA,EACH,OAAQ,EAEV,IAAIiL,EAAQjL,EAAS,EAOrB,YAhoOAmN,IA0nOIR,IACF1B,EAAQ8iB,GAAUphB,GAClB1B,EAAQ0B,EAAY,EAChB8G,GAAUzT,EAASiL,EAAO,GAC1B0I,GAAU1I,EAAOjL,EAAS,IAEzB0M,GAAc7B,EAAO4Y,GAAYpY,EAAW,GAAIJ,GAAO,GAiBhE,SAASgkB,GAAQpkB,GAEf,OADsB,MAATA,EAAgB,EAAIA,EAAM7K,QACvBkd,GAAYrS,EAAO,GAAK,GAgG1C,SAAS0mB,GAAK1mB,GACZ,OAAQA,GAASA,EAAM7K,OAAU6K,EAAM,QApvOvCsC,EA8zOF,IAAIqkB,GAAe3M,IAAS,SAASjG,GACnC,IAAI6S,EAAS7lB,GAASgT,EAAQgJ,IAC9B,OAAQ6J,EAAOzxB,QAAUyxB,EAAO,KAAO7S,EAAO,GAC1CD,GAAiB8S,GACjB,MA0BFC,GAAiB7M,IAAS,SAASjG,GACrC,IAAI7T,EAAWsU,GAAKT,GAChB6S,EAAS7lB,GAASgT,EAAQgJ,IAO9B,OALI7c,IAAasU,GAAKoS,GACpB1mB,OAj2OFoC,EAm2OEskB,EAAOnV,MAEDmV,EAAOzxB,QAAUyxB,EAAO,KAAO7S,EAAO,GAC1CD,GAAiB8S,EAAQhO,GAAY1Y,EAAU,IAC/C,MAwBF4mB,GAAmB9M,IAAS,SAASjG,GACvC,IAAIjT,EAAa0T,GAAKT,GAClB6S,EAAS7lB,GAASgT,EAAQgJ,IAM9B,OAJAjc,EAAkC,mBAAdA,EAA2BA,OAn4O/CwB,IAq4OEskB,EAAOnV,MAEDmV,EAAOzxB,QAAUyxB,EAAO,KAAO7S,EAAO,GAC1CD,GAAiB8S,OAx4OrBtkB,EAw4OwCxB,GACpC,MAoCN,SAAS0T,GAAKxU,GACZ,IAAI7K,EAAkB,MAAT6K,EAAgB,EAAIA,EAAM7K,OACvC,OAAOA,EAAS6K,EAAM7K,EAAS,QA/6O/BmN,EAsgPF,IAAIykB,GAAO/M,GAASgN,IAsBpB,SAASA,GAAQhnB,EAAOkB,GACtB,OAAQlB,GAASA,EAAM7K,QAAU+L,GAAUA,EAAO/L,OAC9CskB,GAAYzZ,EAAOkB,GACnBlB,EAqFN,IAAIinB,GAASjH,IAAS,SAAShgB,EAAO4Z,GACpC,IAAIzkB,EAAkB,MAAT6K,EAAgB,EAAIA,EAAM7K,OACnC4B,EAASoX,GAAOnO,EAAO4Z,GAM3B,OAJAD,GAAW3Z,EAAOe,GAAS6Y,GAAS,SAASxZ,GAC3C,OAAO4M,GAAQ5M,EAAOjL,IAAWiL,EAAQA,KACxC0Y,KAAKM,KAEDriB,KA2ET,SAASsS,GAAQrJ,GACf,OAAgB,MAATA,EAAgBA,EAAQoJ,GAAczS,KAAKqJ,GAkapD,IAAIknB,GAAQlN,IAAS,SAASjG,GAC5B,OAAOkI,GAAS5J,GAAY0B,EAAQ,EAAGqE,IAAmB,OA0BxD+O,GAAUnN,IAAS,SAASjG,GAC9B,IAAI7T,EAAWsU,GAAKT,GAIpB,OAHIqE,GAAkBlY,KACpBA,OAxoQFoC,GA0oQO2Z,GAAS5J,GAAY0B,EAAQ,EAAGqE,IAAmB,GAAOQ,GAAY1Y,EAAU,OAwBrFknB,GAAYpN,IAAS,SAASjG,GAChC,IAAIjT,EAAa0T,GAAKT,GAEtB,OADAjT,EAAkC,mBAAdA,EAA2BA,OApqQ/CwB,EAqqQO2Z,GAAS5J,GAAY0B,EAAQ,EAAGqE,IAAmB,QArqQ1D9V,EAqqQ4ExB,MAgG9E,SAASumB,GAAMrnB,GACb,IAAMA,IAASA,EAAM7K,OACnB,MAAO,GAET,IAAIA,EAAS,EAOb,OANA6K,EAAQS,GAAYT,GAAO,SAASsnB,GAClC,GAAIlP,GAAkBkP,GAEpB,OADAnyB,EAASyT,GAAU0e,EAAMnyB,OAAQA,IAC1B,KAGJuN,GAAUvN,GAAQ,SAASiL,GAChC,OAAOW,GAASf,EAAOyB,GAAarB,OAyBxC,SAASmnB,GAAUvnB,EAAOE,GACxB,IAAMF,IAASA,EAAM7K,OACnB,MAAO,GAET,IAAI4B,EAASswB,GAAMrnB,GACnB,OAAgB,MAAZE,EACKnJ,EAEFgK,GAAShK,GAAQ,SAASuwB,GAC/B,OAAO9vB,GAAM0I,OAnzQfoC,EAmzQoCglB,MAwBtC,IAAIE,GAAUxN,IAAS,SAASha,EAAOkB,GACrC,OAAOkX,GAAkBpY,GACrBiR,GAAejR,EAAOkB,GACtB,MAqBFumB,GAAMzN,IAAS,SAASjG,GAC1B,OAAO4I,GAAQlc,GAAYsT,EAAQqE,QA0BjCsP,GAAQ1N,IAAS,SAASjG,GAC5B,IAAI7T,EAAWsU,GAAKT,GAIpB,OAHIqE,GAAkBlY,KACpBA,OAj4QFoC,GAm4QOqa,GAAQlc,GAAYsT,EAAQqE,IAAoBQ,GAAY1Y,EAAU,OAwB3EynB,GAAU3N,IAAS,SAASjG,GAC9B,IAAIjT,EAAa0T,GAAKT,GAEtB,OADAjT,EAAkC,mBAAdA,EAA2BA,OA75Q/CwB,EA85QOqa,GAAQlc,GAAYsT,EAAQqE,SA95QnC9V,EA85QkExB,MAmBhE8mB,GAAM5N,GAASqN,IA6DnB,IAAIQ,GAAU7N,IAAS,SAASjG,GAC9B,IAAI5e,EAAS4e,EAAO5e,OAChB+K,EAAW/K,EAAS,EAAI4e,EAAO5e,EAAS,QAh/Q5CmN,EAm/QA,OADApC,EAA8B,mBAAZA,GAA0B6T,EAAOtC,MAAOvR,QAl/Q1DoC,EAm/QOilB,GAAUxT,EAAQ7T,MAkC3B,SAAS4nB,GAAM1xB,GACb,IAAIW,EAASyT,GAAOpU,GAEpB,OADAW,EAAOsU,WAAY,EACZtU,EAsDT,SAASopB,GAAK/pB,EAAO2xB,GACnB,OAAOA,EAAY3xB,GAmBrB,IAAI4xB,GAAYhI,IAAS,SAAS5R,GAChC,IAAIjZ,EAASiZ,EAAMjZ,OACf8kB,EAAQ9kB,EAASiZ,EAAM,GAAK,EAC5BhY,EAAQgB,KAAK+T,YACb4c,EAAc,SAAS1lB,GAAU,OAAO8L,GAAO9L,EAAQ+L,IAE3D,QAAIjZ,EAAS,GAAKiC,KAAKgU,YAAYjW,SAC7BiB,aAAiBuU,IAAiBqC,GAAQiN,KAGhD7jB,EAAQA,EAAMinB,MAAMpD,GAAQA,GAAS9kB,EAAS,EAAI,KAC5CiW,YAAY6B,KAAK,CACrB,KAAQkT,GACR,KAAQ,CAAC4H,GACT,aAhnRFzlB,IAknRO,IAAIsI,GAAcxU,EAAOgB,KAAKiU,WAAW8U,MAAK,SAASngB,GAI5D,OAHI7K,IAAW6K,EAAM7K,QACnB6K,EAAMiN,UApnRV3K,GAsnRStC,MAZA5I,KAAK+oB,KAAK4H,MA+PrB,IAAIE,GAAUtJ,IAAiB,SAAS5nB,EAAQX,EAAOV,GACjDuQ,GAAetP,KAAKI,EAAQrB,KAC5BqB,EAAOrB,GAETiY,GAAgB5W,EAAQrB,EAAK,MAmIjC,IAAIwyB,GAAOrI,GAAW2G,IAqBlB2B,GAAWtI,GAAW4G,IA2G1B,SAASxiB,GAAQtC,EAAYzB,GAE3B,OADWwK,GAAQ/I,GAActB,GAAY2N,IACjCrM,EAAYiX,GAAY1Y,EAAU,IAuBhD,SAASkoB,GAAazmB,EAAYzB,GAEhC,OADWwK,GAAQ/I,GAAcrB,GAAiByR,IACtCpQ,EAAYiX,GAAY1Y,EAAU,IA0BhD,IAAImoB,GAAU1J,IAAiB,SAAS5nB,EAAQX,EAAOV,GACjDuQ,GAAetP,KAAKI,EAAQrB,GAC9BqB,EAAOrB,GAAKuX,KAAK7W,GAEjBuX,GAAgB5W,EAAQrB,EAAK,CAACU,OAsElC,IAAIkyB,GAAYtO,IAAS,SAASrY,EAAYoR,EAAMjT,GAClD,IAAIM,GAAS,EACTiP,EAAwB,mBAAR0D,EAChBhc,EAASygB,GAAY7V,GAAcX,EAAMW,EAAWxM,QAAU,GAKlE,OAHA6Y,GAASrM,GAAY,SAASvL,GAC5BW,IAASqJ,GAASiP,EAAS7X,GAAMub,EAAM3c,EAAO0J,GAAQwU,GAAWle,EAAO2c,EAAMjT,MAEzE/I,KA+BLwxB,GAAQ5J,IAAiB,SAAS5nB,EAAQX,EAAOV,GACnDiY,GAAgB5W,EAAQrB,EAAKU,MA6C/B,SAAS2N,GAAIpC,EAAYzB,GAEvB,OADWwK,GAAQ/I,GAAcZ,GAAWwW,IAChC5V,EAAYiX,GAAY1Y,EAAU,IAkFhD,IAAIsoB,GAAY7J,IAAiB,SAAS5nB,EAAQX,EAAOV,GACvDqB,EAAOrB,EAAM,EAAI,GAAGuX,KAAK7W,MACxB,WAAa,MAAO,CAAC,GAAI,OAmS5B,IAAIqyB,GAASzO,IAAS,SAASrY,EAAY+W,GACzC,GAAkB,MAAd/W,EACF,MAAO,GAET,IAAIxM,EAASujB,EAAUvjB,OAMvB,OALIA,EAAS,GAAK8pB,GAAetd,EAAY+W,EAAU,GAAIA,EAAU,IACnEA,EAAY,GACHvjB,EAAS,GAAK8pB,GAAevG,EAAU,GAAIA,EAAU,GAAIA,EAAU,MAC5EA,EAAY,CAACA,EAAU,KAElBD,GAAY9W,EAAY0Q,GAAYqG,EAAW,GAAI,OAqBxD7Q,GAAMD,IAAU,WAClB,OAAO3J,GAAKsH,KAAKsC,OA0DnB,SAASiZ,GAAIlhB,EAAM+C,EAAGqc,GAGpB,OAFArc,EAAIqc,OAxxTJ1c,EAwxTwBK,EAEjB4gB,GAAW3jB,EApvTF,SAtChB0C,uBAyxTAK,EAAK/C,GAAa,MAAL+C,EAAa/C,EAAKzK,OAASwN,GAqB1C,SAAS+lB,GAAO/lB,EAAG/C,GACjB,IAAI7I,EACJ,GAAmB,mBAAR6I,EACT,MAAM,IAAI9K,GAAU2C,GAGtB,OADAkL,EAAIugB,GAAUvgB,GACP,WAOL,QANMA,EAAI,IACR5L,EAAS6I,EAAKpI,MAAMJ,KAAMG,YAExBoL,GAAK,IACP/C,OAzzTJ0C,GA2zTSvL,GAuCX,IAAI4xB,GAAO3O,IAAS,SAASpa,EAAMC,EAAS+d,GAC1C,IAAIjP,EAp0Ta,EAq0TjB,GAAIiP,EAASzoB,OAAQ,CACnB,IAAI0oB,EAAUxZ,GAAeuZ,EAAUwD,GAAUuH,KACjDha,GAl0TkB,GAo0TpB,OAAO4U,GAAW3jB,EAAM+O,EAAS9O,EAAS+d,EAAUC,MAgDlD+K,GAAU5O,IAAS,SAAS3X,EAAQ3M,EAAKkoB,GAC3C,IAAIjP,EAAUka,EACd,GAAIjL,EAASzoB,OAAQ,CACnB,IAAI0oB,EAAUxZ,GAAeuZ,EAAUwD,GAAUwH,KACjDja,GAx3TkB,GA03TpB,OAAO4U,GAAW7tB,EAAKiZ,EAAStM,EAAQub,EAAUC,MAsJpD,SAASiL,GAASlpB,EAAMoR,EAAM+X,GAC5B,IAAIC,EACAC,EACAC,EACAnyB,EACAoyB,EACAC,EACAC,EAAiB,EACjBC,GAAU,EACVC,GAAS,EACTjK,GAAW,EAEf,GAAmB,mBAAR1f,EACT,MAAM,IAAI9K,GAAU2C,GAUtB,SAAS+xB,EAAWC,GAClB,IAAI3pB,EAAOkpB,EACPnpB,EAAUopB,EAKd,OAHAD,EAAWC,OA/kUb3mB,EAglUE+mB,EAAiBI,EACjB1yB,EAAS6I,EAAKpI,MAAMqI,EAASC,GAI/B,SAAS4pB,EAAYD,GAMnB,OAJAJ,EAAiBI,EAEjBN,EAAUphB,GAAW4hB,EAAc3Y,GAE5BsY,EAAUE,EAAWC,GAAQ1yB,EAatC,SAAS6yB,EAAaH,GACpB,IAAII,EAAoBJ,EAAOL,EAM/B,YA/mUF9mB,IA+mUU8mB,GAA+BS,GAAqB7Y,GACzD6Y,EAAoB,GAAON,GANJE,EAAOJ,GAM8BH,EAGjE,SAASS,IACP,IAAIF,EAAO5hB,KACX,GAAI+hB,EAAaH,GACf,OAAOK,EAAaL,GAGtBN,EAAUphB,GAAW4hB,EA3BvB,SAAuBF,GACrB,IAEIM,EAAc/Y,GAFMyY,EAAOL,GAI/B,OAAOG,EACHzgB,GAAUihB,EAAab,GAJDO,EAAOJ,IAK7BU,EAoB+BC,CAAcP,IAGnD,SAASK,EAAaL,GAKpB,OAJAN,OA7nUF7mB,EAioUMgd,GAAY0J,EACPQ,EAAWC,IAEpBT,EAAWC,OApoUb3mB,EAqoUSvL,GAeT,SAASkzB,IACP,IAAIR,EAAO5hB,KACPqiB,EAAaN,EAAaH,GAM9B,GAJAT,EAAWzxB,UACX0xB,EAAW7xB,KACXgyB,EAAeK,EAEXS,EAAY,CACd,QA7pUJ5nB,IA6pUQ6mB,EACF,OAAOO,EAAYN,GAErB,GAAIG,EAIF,OAFA5hB,GAAawhB,GACbA,EAAUphB,GAAW4hB,EAAc3Y,GAC5BwY,EAAWJ,GAMtB,YA1qUF9mB,IAuqUM6mB,IACFA,EAAUphB,GAAW4hB,EAAc3Y,IAE9Bja,EAIT,OA3GAia,EAAO0R,GAAS1R,IAAS,EACrBhG,GAAS+d,KACXO,IAAYP,EAAQO,QAEpBJ,GADAK,EAAS,YAAaR,GACHngB,GAAU8Z,GAASqG,EAAQG,UAAY,EAAGlY,GAAQkY,EACrE5J,EAAW,aAAcyJ,IAAYA,EAAQzJ,SAAWA,GAoG1D2K,EAAUE,OApCV,gBAxoUA7nB,IAyoUM6mB,GACFxhB,GAAawhB,GAEfE,EAAiB,EACjBL,EAAWI,EAAeH,EAAWE,OA7oUvC7mB,GA6qUA2nB,EAAUG,MA7BV,WACE,YAjpUF9nB,IAipUS6mB,EAAwBpyB,EAAS+yB,EAAajiB,OA6BhDoiB,EAqBT,IAAII,GAAQrQ,IAAS,SAASpa,EAAME,GAClC,OAAOiR,GAAUnR,EAAM,EAAGE,MAsBxBwqB,GAAQtQ,IAAS,SAASpa,EAAMoR,EAAMlR,GACxC,OAAOiR,GAAUnR,EAAM8iB,GAAS1R,IAAS,EAAGlR,MAqE9C,SAASimB,GAAQnmB,EAAM2qB,GACrB,GAAmB,mBAAR3qB,GAAmC,MAAZ2qB,GAAuC,mBAAZA,EAC3D,MAAM,IAAIz1B,GAAU2C,GAEtB,IAAI+yB,EAAW,SAAXA,IACF,IAAI1qB,EAAOvI,UACP7B,EAAM60B,EAAWA,EAAS/yB,MAAMJ,KAAM0I,GAAQA,EAAK,GACnDiD,EAAQynB,EAASznB,MAErB,GAAIA,EAAMC,IAAItN,GACZ,OAAOqN,EAAMuL,IAAI5Y,GAEnB,IAAIqB,EAAS6I,EAAKpI,MAAMJ,KAAM0I,GAE9B,OADA0qB,EAASznB,MAAQA,EAAMwB,IAAI7O,EAAKqB,IAAWgM,EACpChM,GAGT,OADAyzB,EAASznB,MAAQ,IAAKgjB,GAAQ0E,OAASve,IAChCse,EA0BT,SAASE,GAAOlqB,GACd,GAAwB,mBAAbA,EACT,MAAM,IAAI1L,GAAU2C,GAEtB,OAAO,WACL,IAAIqI,EAAOvI,UACX,OAAQuI,EAAK3K,QACX,KAAK,EAAG,OAAQqL,EAAU7J,KAAKS,MAC/B,KAAK,EAAG,OAAQoJ,EAAU7J,KAAKS,KAAM0I,EAAK,IAC1C,KAAK,EAAG,OAAQU,EAAU7J,KAAKS,KAAM0I,EAAK,GAAIA,EAAK,IACnD,KAAK,EAAG,OAAQU,EAAU7J,KAAKS,KAAM0I,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAE9D,OAAQU,EAAUhJ,MAAMJ,KAAM0I,IAlClCimB,GAAQ0E,MAAQve,GA2FhB,IAAIye,GAAWzN,IAAS,SAAStd,EAAMgrB,GAKrC,IAAIC,GAJJD,EAAmC,GAArBA,EAAWz1B,QAAeuV,GAAQkgB,EAAW,IACvD7pB,GAAS6pB,EAAW,GAAIhoB,GAAUgW,OAClC7X,GAASsR,GAAYuY,EAAY,GAAIhoB,GAAUgW,QAEtBzjB,OAC7B,OAAO6kB,IAAS,SAASla,GAIvB,IAHA,IAAIM,GAAS,EACTjL,EAAS2T,GAAUhJ,EAAK3K,OAAQ01B,KAE3BzqB,EAAQjL,GACf2K,EAAKM,GAASwqB,EAAWxqB,GAAOzJ,KAAKS,KAAM0I,EAAKM,IAElD,OAAO5I,GAAMoI,EAAMxI,KAAM0I,SAqCzBgrB,GAAU9Q,IAAS,SAASpa,EAAMge,GAEpC,OAAO2F,GAAW3jB,EAh6UE,QApCpB0C,EAo8UsDsb,EADxCvZ,GAAeuZ,EAAUwD,GAAU0J,SAoC/CC,GAAe/Q,IAAS,SAASpa,EAAMge,GAEzC,OAAO2F,GAAW3jB,EAp8UQ,QArC1B0C,EAy+U4Dsb,EAD9CvZ,GAAeuZ,EAAUwD,GAAU2J,SA0B/CC,GAAQhL,IAAS,SAASpgB,EAAMga,GAClC,OAAO2J,GAAW3jB,EA59UA,SAvClB0C,gBAmgV0EsX,MAia5E,SAASlM,GAAGtX,EAAOud,GACjB,OAAOvd,IAAUud,GAAUvd,IAAUA,GAASud,IAAUA,EA0B1D,IAAIsX,GAAKxI,GAA0B/O,IAyB/BwX,GAAMzI,IAA0B,SAASrsB,EAAOud,GAClD,OAAOvd,GAASud,KAqBd/G,GAAc6H,GAAgB,WAAa,OAAOld,UAApB,IAAsCkd,GAAkB,SAASre,GACjG,OAAOqU,GAAarU,IAAU6P,GAAetP,KAAKP,EAAO,YACtD8Q,GAAqBvQ,KAAKP,EAAO,WA0BlCsU,GAAU1J,EAAM0J,QAmBhBzL,GAAgBD,GAAoB4D,GAAU5D,IAn4PlD,SAA2B5I,GACzB,OAAOqU,GAAarU,IAAUid,GAAWjd,IAAUuC,GA65PrD,SAAS6e,GAAYphB,GACnB,OAAgB,MAATA,GAAiBwuB,GAASxuB,EAAMjB,UAAY0d,GAAWzc,GA4BhE,SAASgiB,GAAkBhiB,GACzB,OAAOqU,GAAarU,IAAUohB,GAAYphB,GA0C5C,IAAImS,GAAWD,IAAkB2c,GAmB7B9lB,GAASD,GAAa0D,GAAU1D,IA9+PpC,SAAoB9I,GAClB,OAAOqU,GAAarU,IAAUid,GAAWjd,IAAU2B,GAqpQrD,SAASozB,GAAQ/0B,GACf,IAAKqU,GAAarU,GAChB,OAAO,EAET,IAAI+Y,EAAMkE,GAAWjd,GACrB,OAAO+Y,GAAOnX,GA3uWF,yBA2uWcmX,GACC,iBAAjB/Y,EAAMif,SAA4C,iBAAdjf,EAAMgf,OAAqBiD,GAAcjiB,GAkDzF,SAASyc,GAAWzc,GAClB,IAAK4U,GAAS5U,GACZ,OAAO,EAIT,IAAI+Y,EAAMkE,GAAWjd,GACrB,OAAO+Y,GAAOlX,GAAWkX,GAAOjX,GAxyWrB,0BAwyW+BiX,GA5xW/B,kBA4xWkDA,EA6B/D,SAASic,GAAUh1B,GACjB,MAAuB,iBAATA,GAAqBA,GAAS8sB,GAAU9sB,GA6BxD,SAASwuB,GAASxuB,GAChB,MAAuB,iBAATA,GACZA,GAAS,GAAKA,EAAQ,GAAK,GAAKA,GA93Wf,iBA05WrB,SAAS4U,GAAS5U,GAChB,IAAIkuB,SAAcluB,EAClB,OAAgB,MAATA,IAA0B,UAARkuB,GAA4B,YAARA,GA2B/C,SAAS7Z,GAAarU,GACpB,OAAgB,MAATA,GAAiC,iBAATA,EAoBjC,IAAIiJ,GAAQD,GAAYwD,GAAUxD,IAlwQlC,SAAmBhJ,GACjB,OAAOqU,GAAarU,IAAUgZ,GAAOhZ,IAAU+B,GAm9QjD,SAASkzB,GAASj1B,GAChB,MAAuB,iBAATA,GACXqU,GAAarU,IAAUid,GAAWjd,IAAUgC,EA+BjD,SAASigB,GAAcjiB,GACrB,IAAKqU,GAAarU,IAAUid,GAAWjd,IAAUiC,EAC/C,OAAO,EAET,IAAI0S,EAAQ/D,GAAa5Q,GACzB,GAAc,OAAV2U,EACF,OAAO,EAET,IAAI+E,EAAO7J,GAAetP,KAAKoU,EAAO,gBAAkBA,EAAM5U,YAC9D,MAAsB,mBAAR2Z,GAAsBA,aAAgBA,GAClD/J,GAAapP,KAAKmZ,IAASrJ,GAoB/B,IAAIlH,GAAWD,GAAesD,GAAUtD,IAl8QxC,SAAsBlJ,GACpB,OAAOqU,GAAarU,IAAUid,GAAWjd,IAAUkC,GAm/QrD,IAAImH,GAAQD,GAAYoD,GAAUpD,IAz+QlC,SAAmBpJ,GACjB,OAAOqU,GAAarU,IAAUgZ,GAAOhZ,IAAUmC,GA2/QjD,SAAS+yB,GAASl1B,GAChB,MAAuB,iBAATA,IACVsU,GAAQtU,IAAUqU,GAAarU,IAAUid,GAAWjd,IAAUoC,EAoBpE,SAAS2Z,GAAS/b,GAChB,MAAuB,iBAATA,GACXqU,GAAarU,IAAUid,GAAWjd,IAAUqC,EAoBjD,IAAIkH,GAAeD,GAAmBkD,GAAUlD,IA7hRhD,SAA0BtJ,GACxB,OAAOqU,GAAarU,IAClBwuB,GAASxuB,EAAMjB,WAAaoI,GAAe8V,GAAWjd,KAmnR1D,IAAIm1B,GAAK9I,GAA0BnL,IAyB/BkU,GAAM/I,IAA0B,SAASrsB,EAAOud,GAClD,OAAOvd,GAASud,KA0BlB,SAAS8X,GAAQr1B,GACf,IAAKA,EACH,MAAO,GAET,GAAIohB,GAAYphB,GACd,OAAOk1B,GAASl1B,GAASwO,GAAcxO,GAASkX,GAAUlX,GAE5D,GAAIkR,IAAelR,EAAMkR,IACvB,OA95VN,SAAyB9Q,GAIvB,IAHA,IAAI+V,EACAxV,EAAS,KAEJwV,EAAO/V,EAASk1B,QAAQC,MAC/B50B,EAAOkW,KAAKV,EAAKnW,OAEnB,OAAOW,EAu5VI60B,CAAgBx1B,EAAMkR,OAE/B,IAAI6H,EAAMC,GAAOhZ,GAGjB,OAFW+Y,GAAOhX,EAAS2L,GAAcqL,GAAO5W,EAAS+L,GAAapD,IAE1D9K,GA0Bd,SAASmsB,GAASnsB,GAChB,OAAKA,GAGLA,EAAQssB,GAAStsB,MAtgYN,KAugYeA,KAvgYf,IAEG,uBAsgYAA,EAAQ,GAAK,EAAI,GAGxBA,IAAUA,EAAQA,EAAQ,EAPd,IAAVA,EAAcA,EAAQ,EAoCjC,SAAS8sB,GAAU9sB,GACjB,IAAIW,EAASwrB,GAASnsB,GAClBy1B,EAAY90B,EAAS,EAEzB,OAAOA,IAAWA,EAAU80B,EAAY90B,EAAS80B,EAAY90B,EAAU,EA8BzE,SAAS+0B,GAAS11B,GAChB,OAAOA,EAAQmX,GAAU2V,GAAU9sB,GAAQ,EArkYxB,YAqkY+C,EA0BpE,SAASssB,GAAStsB,GAChB,GAAoB,iBAATA,EACT,OAAOA,EAET,GAAI+b,GAAS/b,GACX,OAvmYI,IAymYN,GAAI4U,GAAS5U,GAAQ,CACnB,IAAIud,EAAgC,mBAAjBvd,EAAMkU,QAAwBlU,EAAMkU,UAAYlU,EACnEA,EAAQ4U,GAAS2I,GAAUA,EAAQ,GAAMA,EAE3C,GAAoB,iBAATvd,EACT,OAAiB,IAAVA,EAAcA,GAASA,EAEhCA,EAAQA,EAAMwQ,QAAQtM,EAAQ,IAC9B,IAAIyxB,EAAW9wB,GAAW4I,KAAKzN,GAC/B,OAAQ21B,GAAY5wB,GAAU0I,KAAKzN,GAC/BwH,GAAaxH,EAAMinB,MAAM,GAAI0O,EAAW,EAAI,GAC3C/wB,GAAW6I,KAAKzN,GApnYf,KAonY+BA,EA2BvC,SAASkiB,GAAcliB,GACrB,OAAO8X,GAAW9X,EAAOsZ,GAAOtZ,IAsDlC,SAAS4P,GAAS5P,GAChB,OAAgB,MAATA,EAAgB,GAAK4lB,GAAa5lB,GAqC3C,IAAI41B,GAASnN,IAAe,SAASxc,EAAQzI,GAC3C,GAAIsd,GAAYtd,IAAW4d,GAAY5d,GACrCsU,GAAWtU,EAAQ0M,GAAK1M,GAASyI,QAGnC,IAAK,IAAI3M,KAAOkE,EACVqM,GAAetP,KAAKiD,EAAQlE,IAC9BkY,GAAYvL,EAAQ3M,EAAKkE,EAAOlE,OAoClCu2B,GAAWpN,IAAe,SAASxc,EAAQzI,GAC7CsU,GAAWtU,EAAQ8V,GAAO9V,GAASyI,MAgCjC6pB,GAAerN,IAAe,SAASxc,EAAQzI,EAAQme,EAAUnJ,GACnEV,GAAWtU,EAAQ8V,GAAO9V,GAASyI,EAAQuM,MA+BzCud,GAAatN,IAAe,SAASxc,EAAQzI,EAAQme,EAAUnJ,GACjEV,GAAWtU,EAAQ0M,GAAK1M,GAASyI,EAAQuM,MAoBvCwd,GAAKpM,GAAS7R,IA8DlB,IAAI9I,GAAW2U,IAAS,SAAS3X,EAAQ0c,GACvC1c,EAAS7M,GAAO6M,GAEhB,IAAIjC,GAAS,EACTjL,EAAS4pB,EAAQ5pB,OACjB6pB,EAAQ7pB,EAAS,EAAI4pB,EAAQ,QA3+YjCzc,EAi/YA,IAJI0c,GAASC,GAAeF,EAAQ,GAAIA,EAAQ,GAAIC,KAClD7pB,EAAS,KAGFiL,EAAQjL,GAMf,IALA,IAAIyE,EAASmlB,EAAQ3e,GACjBnL,EAAQya,GAAO9V,GACfyyB,GAAc,EACdC,EAAcr3B,EAAME,SAEfk3B,EAAaC,GAAa,CACjC,IAAI52B,EAAMT,EAAMo3B,GACZj2B,EAAQiM,EAAO3M,SAz/YvB4M,IA2/YQlM,GACCsX,GAAGtX,EAAOyP,GAAYnQ,MAAUuQ,GAAetP,KAAK0L,EAAQ3M,MAC/D2M,EAAO3M,GAAOkE,EAAOlE,IAK3B,OAAO2M,KAsBLkqB,GAAevS,IAAS,SAASla,GAEnC,OADAA,EAAKmN,UAzhZL3K,EAyhZqB0hB,IACdxsB,GAAMg1B,QA1hZblqB,EA0hZmCxC,MAgSrC,SAASwO,GAAIjM,EAAQ0Q,EAAMgP,GACzB,IAAIhrB,EAAmB,MAAVsL,OA3zZbC,EA2zZ0CwQ,GAAQzQ,EAAQ0Q,GAC1D,YA5zZAzQ,IA4zZOvL,EAAuBgrB,EAAehrB,EA4D/C,SAAS8gB,GAAMxV,EAAQ0Q,GACrB,OAAiB,MAAV1Q,GAAkBqiB,GAAQriB,EAAQ0Q,EAAMc,IAqBjD,IAAI4Y,GAAS/K,IAAe,SAAS3qB,EAAQX,EAAOV,GACrC,MAATU,GACyB,mBAAlBA,EAAM4P,WACf5P,EAAQoQ,GAAqB7P,KAAKP,IAGpCW,EAAOX,GAASV,IACf+kB,GAAS5D,KA4BR6V,GAAWhL,IAAe,SAAS3qB,EAAQX,EAAOV,GACvC,MAATU,GACyB,mBAAlBA,EAAM4P,WACf5P,EAAQoQ,GAAqB7P,KAAKP,IAGhC6P,GAAetP,KAAKI,EAAQX,GAC9BW,EAAOX,GAAO6W,KAAKvX,GAEnBqB,EAAOX,GAAS,CAACV,KAElBkjB,IAoBC+T,GAAS3S,GAAS1F,IA8BtB,SAAShO,GAAKjE,GACZ,OAAOmV,GAAYnV,GAAUmK,GAAcnK,GAAU4U,GAAS5U,GA0BhE,SAASqN,GAAOrN,GACd,OAAOmV,GAAYnV,GAAUmK,GAAcnK,GAAQ,GAAQ8U,GAAW9U,GAuGxE,IAAIuqB,GAAQ/N,IAAe,SAASxc,EAAQzI,EAAQme,GAClDD,GAAUzV,EAAQzI,EAAQme,MAkCxByU,GAAY3N,IAAe,SAASxc,EAAQzI,EAAQme,EAAUnJ,GAChEkJ,GAAUzV,EAAQzI,EAAQme,EAAUnJ,MAuBlCie,GAAO7M,IAAS,SAAS3d,EAAQ+L,GACnC,IAAIrX,EAAS,GACb,GAAc,MAAVsL,EACF,OAAOtL,EAET,IAAI+X,GAAS,EACbV,EAAQrN,GAASqN,GAAO,SAAS2E,GAG/B,OAFAA,EAAOC,GAASD,EAAM1Q,GACtByM,IAAWA,EAASiE,EAAK5d,OAAS,GAC3B4d,KAET7E,GAAW7L,EAAQuO,GAAavO,GAAStL,GACrC+X,IACF/X,EAAS2X,GAAU3X,EAAQ+1B,EAAwD7I,KAGrF,IADA,IAAI9uB,EAASiZ,EAAMjZ,OACZA,KACL2kB,GAAU/iB,EAAQqX,EAAMjZ,IAE1B,OAAO4B,KA4CT,IAAIuO,GAAO0a,IAAS,SAAS3d,EAAQ+L,GACnC,OAAiB,MAAV/L,EAAiB,GAtlT1B,SAAkBA,EAAQ+L,GACxB,OAAOmL,GAAWlX,EAAQ+L,GAAO,SAAShY,EAAO2c,GAC/C,OAAO8E,GAAMxV,EAAQ0Q,MAolTMga,CAAS1qB,EAAQ+L,MAqBhD,SAAS4e,GAAO3qB,EAAQ7B,GACtB,GAAc,MAAV6B,EACF,MAAO,GAET,IAAIpN,EAAQ8L,GAAS6P,GAAavO,IAAS,SAAS4qB,GAClD,MAAO,CAACA,MAGV,OADAzsB,EAAYoY,GAAYpY,GACjB+Y,GAAWlX,EAAQpN,GAAO,SAASmB,EAAO2c,GAC/C,OAAOvS,EAAUpK,EAAO2c,EAAK,OA4IjC,IAAIma,GAAU7J,GAAc/c,IA0BxB6mB,GAAY9J,GAAc3T,IA4K9B,SAASxO,GAAOmB,GACd,OAAiB,MAAVA,EAAiB,GAAKQ,GAAWR,EAAQiE,GAAKjE,IAkNvD,IAAI+qB,GAAY7N,IAAiB,SAASxoB,EAAQs2B,EAAMjtB,GAEtD,OADAitB,EAAOA,EAAKC,cACLv2B,GAAUqJ,EAAQmtB,GAAWF,GAAQA,MAkB9C,SAASE,GAAW3pB,GAClB,OAAO4pB,GAAWxnB,GAASpC,GAAQ0pB,eAqBrC,SAAS5N,GAAO9b,GAEd,OADAA,EAASoC,GAASpC,KACDA,EAAOgD,QAAQvL,GAASkI,IAAcqD,QAAQ5J,GAAa,IAsH9E,IAAIywB,GAAYlO,IAAiB,SAASxoB,EAAQs2B,EAAMjtB,GACtD,OAAOrJ,GAAUqJ,EAAQ,IAAM,IAAMitB,EAAKC,iBAuBxCI,GAAYnO,IAAiB,SAASxoB,EAAQs2B,EAAMjtB,GACtD,OAAOrJ,GAAUqJ,EAAQ,IAAM,IAAMitB,EAAKC,iBAoBxCK,GAAaxO,GAAgB,eA0NjC,IAAIyO,GAAYrO,IAAiB,SAASxoB,EAAQs2B,EAAMjtB,GACtD,OAAOrJ,GAAUqJ,EAAQ,IAAM,IAAMitB,EAAKC,iBAgE5C,IAAIO,GAAYtO,IAAiB,SAASxoB,EAAQs2B,EAAMjtB,GACtD,OAAOrJ,GAAUqJ,EAAQ,IAAM,IAAMotB,GAAWH,MAkiBlD,IAAIS,GAAYvO,IAAiB,SAASxoB,EAAQs2B,EAAMjtB,GACtD,OAAOrJ,GAAUqJ,EAAQ,IAAM,IAAMitB,EAAKU,iBAoBxCP,GAAarO,GAAgB,eAqBjC,SAASM,GAAM7b,EAAQoqB,EAAShP,GAI9B,OAHApb,EAASoC,GAASpC,QAv2dlBtB,KAw2dA0rB,EAAUhP,OAx2dV1c,EAw2d8B0rB,GAtvblC,SAAwBpqB,GACtB,OAAOxG,GAAiByG,KAAKD,GAwvblBqqB,CAAerqB,GA5hb5B,SAAsBA,GACpB,OAAOA,EAAOiB,MAAM3H,KAAkB,GA2hbFgxB,CAAatqB,GA/ncnD,SAAoBA,GAClB,OAAOA,EAAOiB,MAAMjK,KAAgB,GA8ncuBuzB,CAAWvqB,GAE7DA,EAAOiB,MAAMmpB,IAAY,GA2BlC,IAAII,GAAUpU,IAAS,SAASpa,EAAME,GACpC,IACE,OAAOtI,GAAMoI,OA14df0C,EA04dgCxC,GAC9B,MAAOf,GACP,OAAOosB,GAAQpsB,GAAKA,EAAI,IAAIyG,EAAMzG,OA8BlCsvB,GAAUrO,IAAS,SAAS3d,EAAQisB,GAKtC,OAJAjuB,GAAUiuB,GAAa,SAAS54B,GAC9BA,EAAMud,GAAMvd,GACZiY,GAAgBtL,EAAQ3M,EAAKizB,GAAKtmB,EAAO3M,GAAM2M,OAE1CA,KAqGT,SAASoY,GAASrkB,GAChB,OAAO,WACL,OAAOA,GAkDX,IAAIm4B,GAAOxO,KAuBPyO,GAAYzO,IAAW,GAkB3B,SAASlJ,GAASzgB,GAChB,OAAOA,EA6CT,SAAS8J,GAASN,GAChB,OAAOgX,GAA4B,mBAARhX,EAAqBA,EAAO8O,GAAU9O,EA1oe/C,IAmuepB,IAAI6uB,GAASzU,IAAS,SAASjH,EAAMjT,GACnC,OAAO,SAASuC,GACd,OAAOiS,GAAWjS,EAAQ0Q,EAAMjT,OA2BhC4uB,GAAW1U,IAAS,SAAS3X,EAAQvC,GACvC,OAAO,SAASiT,GACd,OAAOuB,GAAWjS,EAAQ0Q,EAAMjT,OAwCpC,SAAS6uB,GAAMtsB,EAAQzI,EAAQmvB,GAC7B,IAAI9zB,EAAQqR,GAAK1M,GACb00B,EAAc1b,GAAchZ,EAAQ3E,GAEzB,MAAX8zB,GACE/d,GAASpR,KAAY00B,EAAYn5B,SAAWF,EAAME,UACtD4zB,EAAUnvB,EACVA,EAASyI,EACTA,EAASjL,KACTk3B,EAAc1b,GAAchZ,EAAQ0M,GAAK1M,KAE3C,IAAIkuB,IAAU9c,GAAS+d,IAAY,UAAWA,MAAcA,EAAQjB,MAChEzY,EAASwD,GAAWxQ,GAqBxB,OAnBAhC,GAAUiuB,GAAa,SAASlP,GAC9B,IAAIxf,EAAOhG,EAAOwlB,GAClB/c,EAAO+c,GAAcxf,EACjByP,IACFhN,EAAOvM,UAAUspB,GAAc,WAC7B,IAAIlU,EAAW9T,KAAKiU,UACpB,GAAIyc,GAAS5c,EAAU,CACrB,IAAInU,EAASsL,EAAOjL,KAAK+T,aACrBsR,EAAU1lB,EAAOqU,YAAckC,GAAUlW,KAAKgU,aAIlD,OAFAqR,EAAQxP,KAAK,CAAE,KAAQrN,EAAM,KAAQrI,UAAW,QAAW8K,IAC3DtL,EAAOsU,UAAYH,EACZnU,EAET,OAAO6I,EAAKpI,MAAM6K,EAAQpB,GAAU,CAAC7J,KAAKhB,SAAUmB,iBAKnD8K,EAmCT,SAAS+gB,MAiDT,IAAIwL,GAAO5M,GAAWjhB,IA0BlB8tB,GAAY7M,GAAWzhB,IA0BvBuuB,GAAW9M,GAAWzgB,IAwB1B,SAASyV,GAASjE,GAChB,OAAO4E,GAAM5E,GAAQtR,GAAawR,GAAMF,IAt0X1C,SAA0BA,GACxB,OAAO,SAAS1Q,GACd,OAAOyQ,GAAQzQ,EAAQ0Q,IAo0XwBgc,CAAiBhc,GAuEpE,IAAIic,GAAQ3M,KAsCR4M,GAAa5M,IAAY,GAoB7B,SAASoC,KACP,MAAO,GAgBT,SAASQ,KACP,OAAO,EA+JT,IAAI5Y,GAAMwV,IAAoB,SAASqN,EAAQC,GAC7C,OAAOD,EAASC,IACf,GAuBClnB,GAAO+a,GAAY,QAiBnBoM,GAASvN,IAAoB,SAASwN,EAAUC,GAClD,OAAOD,EAAWC,IACjB,GAuBCnnB,GAAQ6a,GAAY,SAwKxB,IAAIuM,GAAW1N,IAAoB,SAAS2N,EAAYC,GACtD,OAAOD,EAAaC,IACnB,GAuBCC,GAAQ1M,GAAY,SAiBpB2M,GAAW9N,IAAoB,SAAS+N,EAASC,GACnD,OAAOD,EAAUC,IAChB,GAgmBH,OA1iBArlB,GAAOslB,MAv4MP,SAAentB,EAAG/C,GAChB,GAAmB,mBAARA,EACT,MAAM,IAAI9K,GAAU2C,GAGtB,OADAkL,EAAIugB,GAAUvgB,GACP,WACL,KAAMA,EAAI,EACR,OAAO/C,EAAKpI,MAAMJ,KAAMG,aAi4M9BiT,GAAOsW,IAAMA,GACbtW,GAAOwhB,OAASA,GAChBxhB,GAAOyhB,SAAWA,GAClBzhB,GAAO0hB,aAAeA,GACtB1hB,GAAO2hB,WAAaA,GACpB3hB,GAAO4hB,GAAKA,GACZ5hB,GAAOke,OAASA,GAChBle,GAAOme,KAAOA,GACdne,GAAO6jB,QAAUA,GACjB7jB,GAAOoe,QAAUA,GACjBpe,GAAOulB,UAr6KP,WACE,IAAKx4B,UAAUpC,OACb,MAAO,GAET,IAAIiB,EAAQmB,UAAU,GACtB,OAAOmT,GAAQtU,GAASA,EAAQ,CAACA,IAi6KnCoU,GAAOsd,MAAQA,GACftd,GAAOwlB,MAn+SP,SAAehwB,EAAOgE,EAAMgb,GAExBhb,GADGgb,EAAQC,GAAejf,EAAOgE,EAAMgb,QA5qNzC1c,IA4qNkD0B,GACzC,EAEA4E,GAAUsa,GAAUlf,GAAO,GAEpC,IAAI7O,EAAkB,MAAT6K,EAAgB,EAAIA,EAAM7K,OACvC,IAAKA,GAAU6O,EAAO,EACpB,MAAO,GAMT,IAJA,IAAI5D,EAAQ,EACRM,EAAW,EACX3J,EAASiK,EAAMgH,GAAW7S,EAAS6O,IAEhC5D,EAAQjL,GACb4B,EAAO2J,KAAcia,GAAU3a,EAAOI,EAAQA,GAAS4D,GAEzD,OAAOjN,GAm9STyT,GAAOylB,QAj8SP,SAAiBjwB,GAMf,IALA,IAAII,GAAS,EACTjL,EAAkB,MAAT6K,EAAgB,EAAIA,EAAM7K,OACnCuL,EAAW,EACX3J,EAAS,KAEJqJ,EAAQjL,GAAQ,CACvB,IAAIiB,EAAQ4J,EAAMI,GACdhK,IACFW,EAAO2J,KAActK,GAGzB,OAAOW,GAs7STyT,GAAO0lB,OA75SP,WACE,IAAI/6B,EAASoC,UAAUpC,OACvB,IAAKA,EACH,MAAO,GAMT,IAJA,IAAI2K,EAAOkB,EAAM7L,EAAS,GACtB6K,EAAQzI,UAAU,GAClB6I,EAAQjL,EAELiL,KACLN,EAAKM,EAAQ,GAAK7I,UAAU6I,GAE9B,OAAOa,GAAUyJ,GAAQ1K,GAASsN,GAAUtN,GAAS,CAACA,GAAQqS,GAAYvS,EAAM,KAk5SlF0K,GAAO2lB,KAlsCP,SAAcxe,GACZ,IAAIxc,EAAkB,MAATwc,EAAgB,EAAIA,EAAMxc,OACnCwsB,EAAa/I,KASjB,OAPAjH,EAASxc,EAAc4L,GAAS4Q,GAAO,SAASwR,GAC9C,GAAsB,mBAAXA,EAAK,GACd,MAAM,IAAIruB,GAAU2C,GAEtB,MAAO,CAACkqB,EAAWwB,EAAK,IAAKA,EAAK,OAJlB,GAOXnJ,IAAS,SAASla,GAEvB,IADA,IAAIM,GAAS,IACJA,EAAQjL,GAAQ,CACvB,IAAIguB,EAAOxR,EAAMvR,GACjB,GAAI5I,GAAM2rB,EAAK,GAAI/rB,KAAM0I,GACvB,OAAOtI,GAAM2rB,EAAK,GAAI/rB,KAAM0I,QAmrCpC0K,GAAO4lB,SArpCP,SAAkBx2B,GAChB,OA33YF,SAAsBA,GACpB,IAAI3E,EAAQqR,GAAK1M,GACjB,OAAO,SAASyI,GACd,OAAOyO,GAAezO,EAAQzI,EAAQ3E,IAw3YjCo7B,CAAa3hB,GAAU9U,EAx+dZ,KA6ngBpB4Q,GAAOiQ,SAAWA,GAClBjQ,GAAOyd,QAAUA,GACjBzd,GAAOtU,OAzsHP,SAAgBJ,EAAWw6B,GACzB,IAAIv5B,EAAS+T,GAAWhV,GACxB,OAAqB,MAAdw6B,EAAqBv5B,EAASkX,GAAWlX,EAAQu5B,IAwsH1D9lB,GAAO+lB,MA5sMP,SAASA,EAAM3wB,EAAMmhB,EAAO/B,GAE1B,IAAIjoB,EAASwsB,GAAW3jB,EA16TN,OAlClB0C,8BA28TAye,EAAQ/B,OA38TR1c,EA28T4Bye,GAG5B,OADAhqB,EAAOuM,YAAcitB,EAAMjtB,YACpBvM,GAysMTyT,GAAOgmB,WAhqMP,SAASA,EAAW5wB,EAAMmhB,EAAO/B,GAE/B,IAAIjoB,EAASwsB,GAAW3jB,EAt9TA,QAnCxB0C,8BAw/TAye,EAAQ/B,OAx/TR1c,EAw/T4Bye,GAG5B,OADAhqB,EAAOuM,YAAcktB,EAAWltB,YACzBvM,GA6pMTyT,GAAOse,SAAWA,GAClBte,GAAOnF,SAAWA,GAClBmF,GAAO+hB,aAAeA,GACtB/hB,GAAO6f,MAAQA,GACf7f,GAAO8f,MAAQA,GACf9f,GAAO6b,WAAaA,GACpB7b,GAAO8b,aAAeA,GACtB9b,GAAO+b,eAAiBA,GACxB/b,GAAOimB,KArySP,SAAczwB,EAAO2C,EAAGqc,GACtB,IAAI7pB,EAAkB,MAAT6K,EAAgB,EAAIA,EAAM7K,OACvC,OAAKA,EAIEwlB,GAAU3a,GADjB2C,EAAKqc,QAh4NL1c,IAg4NcK,EAAmB,EAAIugB,GAAUvgB,IACnB,EAAI,EAAIA,EAAGxN,GAH9B,IAmySXqV,GAAOkmB,UApwSP,SAAmB1wB,EAAO2C,EAAGqc,GAC3B,IAAI7pB,EAAkB,MAAT6K,EAAgB,EAAIA,EAAM7K,OACvC,OAAKA,EAKEwlB,GAAU3a,EAAO,GADxB2C,EAAIxN,GADJwN,EAAKqc,QAl6NL1c,IAk6NcK,EAAmB,EAAIugB,GAAUvgB,KAEhB,EAAI,EAAIA,GAJ9B,IAkwSX6H,GAAOmmB,eAxtSP,SAAwB3wB,EAAOQ,GAC7B,OAAQR,GAASA,EAAM7K,OACnBmnB,GAAUtc,EAAO4Y,GAAYpY,EAAW,IAAI,GAAM,GAClD,IAstSNgK,GAAOomB,UAhrSP,SAAmB5wB,EAAOQ,GACxB,OAAQR,GAASA,EAAM7K,OACnBmnB,GAAUtc,EAAO4Y,GAAYpY,EAAW,IAAI,GAC5C,IA8qSNgK,GAAOqmB,KA9oSP,SAAc7wB,EAAO5J,EAAO6jB,EAAOW,GACjC,IAAIzlB,EAAkB,MAAT6K,EAAgB,EAAIA,EAAM7K,OACvC,OAAKA,GAGD8kB,GAAyB,iBAATA,GAAqBgF,GAAejf,EAAO5J,EAAO6jB,KACpEA,EAAQ,EACRW,EAAMzlB,GAnuIV,SAAkB6K,EAAO5J,EAAO6jB,EAAOW,GACrC,IAAIzlB,EAAS6K,EAAM7K,OAWnB,KATA8kB,EAAQiJ,GAAUjJ,IACN,IACVA,GAASA,EAAQ9kB,EAAS,EAAKA,EAAS8kB,IAE1CW,OAj0FAtY,IAi0FOsY,GAAqBA,EAAMzlB,EAAUA,EAAS+tB,GAAUtI,IACrD,IACRA,GAAOzlB,GAETylB,EAAMX,EAAQW,EAAM,EAAIkR,GAASlR,GAC1BX,EAAQW,GACb5a,EAAMia,KAAW7jB,EAEnB,OAAO4J,EAstIA8wB,CAAS9wB,EAAO5J,EAAO6jB,EAAOW,IAN5B,IA4oSXpQ,GAAOumB,OA9tOP,SAAgBpvB,EAAYnB,GAE1B,OADWkK,GAAQ/I,GAAclB,GAAc2R,IACnCzQ,EAAYiX,GAAYpY,EAAW,KA6tOjDgK,GAAOwmB,QA1oOP,SAAiBrvB,EAAYzB,GAC3B,OAAOmS,GAAYtO,GAAIpC,EAAYzB,GAAW,IA0oOhDsK,GAAOymB,YAnnOP,SAAqBtvB,EAAYzB,GAC/B,OAAOmS,GAAYtO,GAAIpC,EAAYzB,GA7/RxB,MAgngBbsK,GAAO0mB,aA3lOP,SAAsBvvB,EAAYzB,EAAUoS,GAE1C,OADAA,OA9kSAhQ,IA8kSQgQ,EAAsB,EAAI4Q,GAAU5Q,GACrCD,GAAYtO,GAAIpC,EAAYzB,GAAWoS,IA0lOhD9H,GAAO4Z,QAAUA,GACjB5Z,GAAO2mB,YAtgSP,SAAqBnxB,GAEnB,OADsB,MAATA,EAAgB,EAAIA,EAAM7K,QACvBkd,GAAYrS,EA9mOjB,KA8mOoC,IAqgSjDwK,GAAO4mB,aA9+RP,SAAsBpxB,EAAOsS,GAE3B,OADsB,MAATtS,EAAgB,EAAIA,EAAM7K,QAKhCkd,GAAYrS,EADnBsS,OAlsOAhQ,IAksOQgQ,EAAsB,EAAI4Q,GAAU5Q,IAFnC,IA4+RX9H,GAAO6mB,KA57LP,SAAczxB,GACZ,OAAO2jB,GAAW3jB,EAzsUD,MAqogBnB4K,GAAO+jB,KAAOA,GACd/jB,GAAOgkB,UAAYA,GACnBhkB,GAAO8mB,UA19RP,SAAmB3f,GAKjB,IAJA,IAAIvR,GAAS,EACTjL,EAAkB,MAATwc,EAAgB,EAAIA,EAAMxc,OACnC4B,EAAS,KAEJqJ,EAAQjL,GAAQ,CACvB,IAAIguB,EAAOxR,EAAMvR,GACjBrJ,EAAOosB,EAAK,IAAMA,EAAK,GAEzB,OAAOpsB,GAk9RTyT,GAAO+mB,UA96GP,SAAmBlvB,GACjB,OAAiB,MAAVA,EAAiB,GAAKuQ,GAAcvQ,EAAQiE,GAAKjE,KA86G1DmI,GAAOgnB,YAp5GP,SAAqBnvB,GACnB,OAAiB,MAAVA,EAAiB,GAAKuQ,GAAcvQ,EAAQqN,GAAOrN,KAo5G5DmI,GAAO6d,QAAUA,GACjB7d,GAAOinB,QA34RP,SAAiBzxB,GAEf,OADsB,MAATA,EAAgB,EAAIA,EAAM7K,QACvBwlB,GAAU3a,EAAO,GAAI,GAAK,IA04R5CwK,GAAOmc,aAAeA,GACtBnc,GAAOqc,eAAiBA,GACxBrc,GAAOsc,iBAAmBA,GAC1Btc,GAAOiiB,OAASA,GAChBjiB,GAAOkiB,SAAWA,GAClBliB,GAAO8d,UAAYA,GACnB9d,GAAOtK,SAAWA,GAClBsK,GAAO+d,MAAQA,GACf/d,GAAOlE,KAAOA,GACdkE,GAAOkF,OAASA,GAChBlF,GAAOzG,IAAMA,GACbyG,GAAOknB,QA7pGP,SAAiBrvB,EAAQnC,GACvB,IAAInJ,EAAS,GAMb,OALAmJ,EAAW0Y,GAAY1Y,EAAU,GAEjC4R,GAAWzP,GAAQ,SAASjM,EAAOV,EAAK2M,GACtCsL,GAAgB5W,EAAQmJ,EAAS9J,EAAOV,EAAK2M,GAASjM,MAEjDW,GAupGTyT,GAAOmnB,UAxnGP,SAAmBtvB,EAAQnC,GACzB,IAAInJ,EAAS,GAMb,OALAmJ,EAAW0Y,GAAY1Y,EAAU,GAEjC4R,GAAWzP,GAAQ,SAASjM,EAAOV,EAAK2M,GACtCsL,GAAgB5W,EAAQrB,EAAKwK,EAAS9J,EAAOV,EAAK2M,OAE7CtL,GAknGTyT,GAAOonB,QAlgCP,SAAiBh4B,GACf,OAAOmd,GAAYrI,GAAU9U,EA1qeX,KA4qgBpB4Q,GAAOqnB,gBAr+BP,SAAyB9e,EAAM0D,GAC7B,OAAOK,GAAoB/D,EAAMrE,GAAU+H,EAxsezB,KA6qgBpBjM,GAAOub,QAAUA,GACjBvb,GAAOoiB,MAAQA,GACfpiB,GAAOgiB,UAAYA,GACnBhiB,GAAOikB,OAASA,GAChBjkB,GAAOkkB,SAAWA,GAClBlkB,GAAOmkB,MAAQA,GACfnkB,GAAOkgB,OAASA,GAChBlgB,GAAOsnB,OA9yBP,SAAgBnvB,GAEd,OADAA,EAAIugB,GAAUvgB,GACPqX,IAAS,SAASla,GACvB,OAAO0Y,GAAQ1Y,EAAM6C,OA4yBzB6H,GAAOqiB,KAAOA,GACdriB,GAAOunB,OAt/FP,SAAgB1vB,EAAQ7B,GACtB,OAAOwsB,GAAO3qB,EAAQqoB,GAAO9R,GAAYpY,MAs/F3CgK,GAAOwnB,KAh2LP,SAAcpyB,GACZ,OAAO8oB,GAAO,EAAG9oB,IAg2LnB4K,GAAOynB,QAx2NP,SAAiBtwB,EAAY+W,EAAWC,EAAQqG,GAC9C,OAAkB,MAAdrd,EACK,IAEJ+I,GAAQgO,KACXA,EAAyB,MAAbA,EAAoB,GAAK,CAACA,IAGnChO,GADLiO,EAASqG,OA72ST1c,EA62S6BqW,KAE3BA,EAAmB,MAAVA,EAAiB,GAAK,CAACA,IAE3BF,GAAY9W,EAAY+W,EAAWC,KA81N5CnO,GAAOokB,KAAOA,GACdpkB,GAAOmgB,SAAWA,GAClBngB,GAAOqkB,UAAYA,GACnBrkB,GAAOskB,SAAWA,GAClBtkB,GAAOsgB,QAAUA,GACjBtgB,GAAOugB,aAAeA,GACtBvgB,GAAOge,UAAYA,GACnBhe,GAAOlF,KAAOA,GACdkF,GAAOwiB,OAASA,GAChBxiB,GAAOwM,SAAWA,GAClBxM,GAAO0nB,WA/rBP,SAAoB7vB,GAClB,OAAO,SAAS0Q,GACd,OAAiB,MAAV1Q,OA5hfTC,EA4hfsCwQ,GAAQzQ,EAAQ0Q,KA8rBxDvI,GAAOuc,KAAOA,GACdvc,GAAOwc,QAAUA,GACjBxc,GAAO2nB,UAnqRP,SAAmBnyB,EAAOkB,EAAQhB,GAChC,OAAQF,GAASA,EAAM7K,QAAU+L,GAAUA,EAAO/L,OAC9CskB,GAAYzZ,EAAOkB,EAAQ0X,GAAY1Y,EAAU,IACjDF,GAiqRNwK,GAAO4nB,YAvoRP,SAAqBpyB,EAAOkB,EAAQJ,GAClC,OAAQd,GAASA,EAAM7K,QAAU+L,GAAUA,EAAO/L,OAC9CskB,GAAYzZ,EAAOkB,OAxlPvBoB,EAwlP0CxB,GACtCd,GAqoRNwK,GAAOyc,OAASA,GAChBzc,GAAOwkB,MAAQA,GACfxkB,GAAOykB,WAAaA,GACpBzkB,GAAOwgB,MAAQA,GACfxgB,GAAO6nB,OA3tNP,SAAgB1wB,EAAYnB,GAE1B,OADWkK,GAAQ/I,GAAclB,GAAc2R,IACnCzQ,EAAY+oB,GAAO9R,GAAYpY,EAAW,MA0tNxDgK,GAAO8nB,OAxkRP,SAAgBtyB,EAAOQ,GACrB,IAAIzJ,EAAS,GACb,IAAMiJ,IAASA,EAAM7K,OACnB,OAAO4B,EAET,IAAIqJ,GAAS,EACTwZ,EAAU,GACVzkB,EAAS6K,EAAM7K,OAGnB,IADAqL,EAAYoY,GAAYpY,EAAW,KAC1BJ,EAAQjL,GAAQ,CACvB,IAAIiB,EAAQ4J,EAAMI,GACdI,EAAUpK,EAAOgK,EAAOJ,KAC1BjJ,EAAOkW,KAAK7W,GACZwjB,EAAQ3M,KAAK7M,IAIjB,OADAuZ,GAAW3Z,EAAO4Z,GACX7iB,GAujRTyT,GAAO+nB,KArsLP,SAAc3yB,EAAMqa,GAClB,GAAmB,mBAARra,EACT,MAAM,IAAI9K,GAAU2C,GAGtB,OAAOuiB,GAASpa,EADhBqa,OAniVA3X,IAmiVQ2X,EAAsBA,EAAQiJ,GAAUjJ,KAksLlDzP,GAAOnB,QAAUA,GACjBmB,GAAOgoB,WAnrNP,SAAoB7wB,EAAYgB,EAAGqc,GAOjC,OALErc,GADGqc,EAAQC,GAAetd,EAAYgB,EAAGqc,QApjT3C1c,IAojToDK,GAC9C,EAEAugB,GAAUvgB,IAEL+H,GAAQ/I,GAAcyL,GAAkBiN,IACvC1Y,EAAYgB,IA6qN1B6H,GAAOjG,IA14FP,SAAalC,EAAQ0Q,EAAM3c,GACzB,OAAiB,MAAViM,EAAiBA,EAASmX,GAAQnX,EAAQ0Q,EAAM3c,IA04FzDoU,GAAOioB,QA/2FP,SAAiBpwB,EAAQ0Q,EAAM3c,EAAOwY,GAEpC,OADAA,EAAkC,mBAAdA,EAA2BA,OA13a/CtM,EA23aiB,MAAVD,EAAiBA,EAASmX,GAAQnX,EAAQ0Q,EAAM3c,EAAOwY,IA82FhEpE,GAAOkoB,QA7pNP,SAAiB/wB,GAEf,OADW+I,GAAQ/I,GAAc6L,GAAekN,IACpC/Y,IA4pNd6I,GAAO6S,MA/gRP,SAAerd,EAAOia,EAAOW,GAC3B,IAAIzlB,EAAkB,MAAT6K,EAAgB,EAAIA,EAAM7K,OACvC,OAAKA,GAGDylB,GAAqB,iBAAPA,GAAmBqE,GAAejf,EAAOia,EAAOW,IAChEX,EAAQ,EACRW,EAAMzlB,IAGN8kB,EAAiB,MAATA,EAAgB,EAAIiJ,GAAUjJ,GACtCW,OAtuPFtY,IAsuPQsY,EAAoBzlB,EAAS+tB,GAAUtI,IAExCD,GAAU3a,EAAOia,EAAOW,IAVtB,IA6gRXpQ,GAAOie,OAASA,GAChBje,GAAOmoB,WAv1QP,SAAoB3yB,GAClB,OAAQA,GAASA,EAAM7K,OACnB2mB,GAAe9b,GACf,IAq1QNwK,GAAOooB,aAl0QP,SAAsB5yB,EAAOE,GAC3B,OAAQF,GAASA,EAAM7K,OACnB2mB,GAAe9b,EAAO4Y,GAAY1Y,EAAU,IAC5C,IAg0QNsK,GAAOzF,MA//DP,SAAenB,EAAQivB,EAAWC,GAKhC,OAJIA,GAAyB,iBAATA,GAAqB7T,GAAerb,EAAQivB,EAAWC,KACzED,EAAYC,OAjvcdxwB,IAmvcAwwB,OAnvcAxwB,IAmvcQwwB,EArrcW,WAqrc8BA,IAAU,IAI3DlvB,EAASoC,GAASpC,MAEQ,iBAAbivB,GACO,MAAbA,IAAsBtzB,GAASszB,OAEpCA,EAAY7W,GAAa6W,KACPlvB,GAAWC,GACpBuZ,GAAUvY,GAAchB,GAAS,EAAGkvB,GAGxClvB,EAAOmB,MAAM8tB,EAAWC,GAZtB,IA0/DXtoB,GAAOuoB,OAtqLP,SAAgBnzB,EAAMqa,GACpB,GAAmB,mBAARra,EACT,MAAM,IAAI9K,GAAU2C,GAGtB,OADAwiB,EAAiB,MAATA,EAAgB,EAAIrR,GAAUsa,GAAUjJ,GAAQ,GACjDD,IAAS,SAASla,GACvB,IAAIE,EAAQF,EAAKma,GACbiL,EAAY/H,GAAUrd,EAAM,EAAGma,GAKnC,OAHIja,GACFiB,GAAUikB,EAAWllB,GAEhBxI,GAAMoI,EAAMxI,KAAM8tB,OA2pL7B1a,GAAOwoB,KAjzQP,SAAchzB,GACZ,IAAI7K,EAAkB,MAAT6K,EAAgB,EAAIA,EAAM7K,OACvC,OAAOA,EAASwlB,GAAU3a,EAAO,EAAG7K,GAAU,IAgzQhDqV,GAAOyoB,KApxQP,SAAcjzB,EAAO2C,EAAGqc,GACtB,OAAMhf,GAASA,EAAM7K,OAIdwlB,GAAU3a,EAAO,GADxB2C,EAAKqc,QAj+PL1c,IAi+PcK,EAAmB,EAAIugB,GAAUvgB,IAChB,EAAI,EAAIA,GAH9B,IAmxQX6H,GAAO0oB,UApvQP,SAAmBlzB,EAAO2C,EAAGqc,GAC3B,IAAI7pB,EAAkB,MAAT6K,EAAgB,EAAIA,EAAM7K,OACvC,OAAKA,EAKEwlB,GAAU3a,GADjB2C,EAAIxN,GADJwN,EAAKqc,QAngQL1c,IAmgQcK,EAAmB,EAAIugB,GAAUvgB,KAEnB,EAAI,EAAIA,EAAGxN,GAJ9B,IAkvQXqV,GAAO2oB,eAxsQP,SAAwBnzB,EAAOQ,GAC7B,OAAQR,GAASA,EAAM7K,OACnBmnB,GAAUtc,EAAO4Y,GAAYpY,EAAW,IAAI,GAAO,GACnD,IAssQNgK,GAAO4oB,UAhqQP,SAAmBpzB,EAAOQ,GACxB,OAAQR,GAASA,EAAM7K,OACnBmnB,GAAUtc,EAAO4Y,GAAYpY,EAAW,IACxC,IA8pQNgK,GAAO6oB,IAnsPP,SAAaj9B,EAAO2xB,GAElB,OADAA,EAAY3xB,GACLA,GAksPToU,GAAO8oB,SAjnLP,SAAkB1zB,EAAMoR,EAAM+X,GAC5B,IAAIO,GAAU,EACVhK,GAAW,EAEf,GAAmB,mBAAR1f,EACT,MAAM,IAAI9K,GAAU2C,GAMtB,OAJIuT,GAAS+d,KACXO,EAAU,YAAaP,IAAYA,EAAQO,QAAUA,EACrDhK,EAAW,aAAcyJ,IAAYA,EAAQzJ,SAAWA,GAEnDwJ,GAASlpB,EAAMoR,EAAM,CAC1B,QAAWsY,EACX,QAAWtY,EACX,SAAYsO,KAomLhB9U,GAAO2V,KAAOA,GACd3V,GAAOihB,QAAUA,GACjBjhB,GAAO0iB,QAAUA,GACjB1iB,GAAO2iB,UAAYA,GACnB3iB,GAAO+oB,OArfP,SAAgBn9B,GACd,OAAIsU,GAAQtU,GACH2K,GAAS3K,EAAO6c,IAElBd,GAAS/b,GAAS,CAACA,GAASkX,GAAU2P,GAAajX,GAAS5P,MAkfrEoU,GAAO8N,cAAgBA,GACvB9N,GAAOrG,UA7yFP,SAAmB9B,EAAQnC,EAAUC,GACnC,IAAIuM,EAAQhC,GAAQrI,GAChBmxB,EAAY9mB,GAASnE,GAASlG,IAAW1C,GAAa0C,GAG1D,GADAnC,EAAW0Y,GAAY1Y,EAAU,GACd,MAAfC,EAAqB,CACvB,IAAI2P,EAAOzN,GAAUA,EAAOlM,YAE1BgK,EADEqzB,EACY9mB,EAAQ,IAAIoD,EAAO,GAE1B9E,GAAS3I,IACFwQ,GAAW/C,GAAQhF,GAAW9D,GAAa3E,IAG3C,GAMlB,OAHCmxB,EAAYnzB,GAAYyR,IAAYzP,GAAQ,SAASjM,EAAOgK,EAAOiC,GAClE,OAAOnC,EAASC,EAAa/J,EAAOgK,EAAOiC,MAEtClC,GA0xFTqK,GAAOipB,MAxlLP,SAAe7zB,GACb,OAAOkhB,GAAIlhB,EAAM,IAwlLnB4K,GAAO0c,MAAQA,GACf1c,GAAO2c,QAAUA,GACjB3c,GAAO4c,UAAYA,GACnB5c,GAAOkpB,KAxkQP,SAAc1zB,GACZ,OAAQA,GAASA,EAAM7K,OAAU8mB,GAASjc,GAAS,IAwkQrDwK,GAAOmpB,OA9iQP,SAAgB3zB,EAAOE,GACrB,OAAQF,GAASA,EAAM7K,OAAU8mB,GAASjc,EAAO4Y,GAAY1Y,EAAU,IAAM,IA8iQ/EsK,GAAOopB,SAvhQP,SAAkB5zB,EAAOc,GAEvB,OADAA,EAAkC,mBAAdA,EAA2BA,OA9uQ/CwB,EA+uQQtC,GAASA,EAAM7K,OAAU8mB,GAASjc,OA/uQ1CsC,EA+uQ4DxB,GAAc,IAshQ5E0J,GAAOqpB,MAnwFP,SAAexxB,EAAQ0Q,GACrB,OAAiB,MAAV1Q,GAAwByX,GAAUzX,EAAQ0Q,IAmwFnDvI,GAAO6c,MAAQA,GACf7c,GAAO+c,UAAYA,GACnB/c,GAAOspB,OAvuFP,SAAgBzxB,EAAQ0Q,EAAMsJ,GAC5B,OAAiB,MAAVha,EAAiBA,EAAS+Z,GAAW/Z,EAAQ0Q,EAAMiK,GAAaX,KAuuFzE7R,GAAOupB,WA5sFP,SAAoB1xB,EAAQ0Q,EAAMsJ,EAASzN,GAEzC,OADAA,EAAkC,mBAAdA,EAA2BA,OA9jb/CtM,EA+jbiB,MAAVD,EAAiBA,EAAS+Z,GAAW/Z,EAAQ0Q,EAAMiK,GAAaX,GAAUzN,IA2sFnFpE,GAAOtJ,OAASA,GAChBsJ,GAAOwpB,SAnpFP,SAAkB3xB,GAChB,OAAiB,MAAVA,EAAiB,GAAKQ,GAAWR,EAAQqN,GAAOrN,KAmpFzDmI,GAAOgd,QAAUA,GACjBhd,GAAOiV,MAAQA,GACfjV,GAAOypB,KA9kLP,SAAc79B,EAAOgqB,GACnB,OAAO0K,GAAQ9N,GAAaoD,GAAUhqB,IA8kLxCoU,GAAOid,IAAMA,GACbjd,GAAOkd,MAAQA,GACfld,GAAOmd,QAAUA,GACjBnd,GAAOod,IAAMA,GACbpd,GAAO0pB,UAh1PP,SAAmBj/B,EAAOiM,GACxB,OAAO0b,GAAc3nB,GAAS,GAAIiM,GAAU,GAAI0M,KAg1PlDpD,GAAO2pB,cA9zPP,SAAuBl/B,EAAOiM,GAC5B,OAAO0b,GAAc3nB,GAAS,GAAIiM,GAAU,GAAIsY,KA8zPlDhP,GAAOqd,QAAUA,GAGjBrd,GAAOsB,QAAUohB,GACjB1iB,GAAO4pB,UAAYjH,GACnB3iB,GAAO6pB,OAASpI,GAChBzhB,GAAO8pB,WAAapI,GAGpByC,GAAMnkB,GAAQA,IAKdA,GAAO6B,IAAMA,GACb7B,GAAO4jB,QAAUA,GACjB5jB,GAAO4iB,UAAYA,GACnB5iB,GAAO+iB,WAAaA,GACpB/iB,GAAOvC,KAAOA,GACduC,GAAO+pB,MAvpFP,SAAehmB,EAAQC,EAAOC,GAa5B,YA9pbAnM,IAkpbImM,IACFA,EAAQD,EACRA,OAppbFlM,YAspbImM,IAEFA,GADAA,EAAQiU,GAASjU,MACCA,EAAQA,EAAQ,QAxpbpCnM,IA0pbIkM,IAEFA,GADAA,EAAQkU,GAASlU,MACCA,EAAQA,EAAQ,GAE7BjB,GAAUmV,GAASnU,GAASC,EAAOC,IA2oF5CjE,GAAO4b,MAhiLP,SAAehwB,GACb,OAAOsY,GAAUtY,EAlvVI,IAkxgBvBoU,GAAOgqB,UAv+KP,SAAmBp+B,GACjB,OAAOsY,GAAUtY,EAAO02B,IAu+K1BtiB,GAAOiqB,cAx8KP,SAAuBr+B,EAAOwY,GAE5B,OAAOF,GAAUtY,EAAO02B,EADxBle,EAAkC,mBAAdA,EAA2BA,OAp2V/CtM,IA4ygBFkI,GAAOkqB,UAhgLP,SAAmBt+B,EAAOwY,GAExB,OAAOF,GAAUtY,EAtxVI,EAqxVrBwY,EAAkC,mBAAdA,EAA2BA,OA7yV/CtM,IA6ygBFkI,GAAOmqB,WA76KP,SAAoBtyB,EAAQzI,GAC1B,OAAiB,MAAVA,GAAkBkX,GAAezO,EAAQzI,EAAQ0M,GAAK1M,KA66K/D4Q,GAAOkV,OAASA,GAChBlV,GAAOoqB,UAjwCP,SAAmBx+B,EAAO2rB,GACxB,OAAiB,MAAT3rB,GAAiBA,IAAUA,EAAS2rB,EAAe3rB,GAiwC7DoU,GAAO4kB,OAASA,GAChB5kB,GAAOqqB,SA57EP,SAAkBjxB,EAAQ5O,EAAQ8/B,GAChClxB,EAASoC,GAASpC,GAClB5O,EAASgnB,GAAahnB,GAEtB,IAAIG,EAASyO,EAAOzO,OAKhBylB,EAJJka,OA13bAxyB,IA03bWwyB,EACP3/B,EACAoY,GAAU2V,GAAU4R,GAAW,EAAG3/B,GAItC,OADA2/B,GAAY9/B,EAAOG,SACA,GAAKyO,EAAOyZ,MAAMyX,EAAUla,IAAQ5lB,GAk7EzDwV,GAAOkD,GAAKA,GACZlD,GAAOuqB,OAp5EP,SAAgBnxB,GAEd,OADAA,EAASoC,GAASpC,KACA/J,EAAmBgK,KAAKD,GACtCA,EAAOgD,QAAQnN,EAAiB+J,IAChCI,GAi5EN4G,GAAOwqB,aA/3EP,SAAsBpxB,GAEpB,OADAA,EAASoC,GAASpC,KACAvJ,EAAgBwJ,KAAKD,GACnCA,EAAOgD,QAAQxM,EAAc,QAC7BwJ,GA43EN4G,GAAOyqB,MA35OP,SAAetzB,EAAYnB,EAAWwe,GACpC,IAAIpf,EAAO8K,GAAQ/I,GAAcpB,GAAa0R,GAI9C,OAHI+M,GAASC,GAAetd,EAAYnB,EAAWwe,KACjDxe,OA75RF8B,GA+5RO1C,EAAK+B,EAAYiX,GAAYpY,EAAW,KAu5OjDgK,GAAO0d,KAAOA,GACd1d,GAAOgc,UAAYA,GACnBhc,GAAO0qB,QAxvHP,SAAiB7yB,EAAQ7B,GACvB,OAAOkB,GAAYW,EAAQuW,GAAYpY,EAAW,GAAIsR,KAwvHxDtH,GAAO2d,SAAWA,GAClB3d,GAAOic,cAAgBA,GACvBjc,GAAO2qB,YAptHP,SAAqB9yB,EAAQ7B,GAC3B,OAAOkB,GAAYW,EAAQuW,GAAYpY,EAAW,GAAIwR,KAotHxDxH,GAAOrC,MAAQA,GACfqC,GAAOvG,QAAUA,GACjBuG,GAAO4d,aAAeA,GACtB5d,GAAO4qB,MAxrHP,SAAe/yB,EAAQnC,GACrB,OAAiB,MAAVmC,EACHA,EACAoQ,GAAQpQ,EAAQuW,GAAY1Y,EAAU,GAAIwP,KAsrHhDlF,GAAO6qB,WAzpHP,SAAoBhzB,EAAQnC,GAC1B,OAAiB,MAAVmC,EACHA,EACAsQ,GAAatQ,EAAQuW,GAAY1Y,EAAU,GAAIwP,KAupHrDlF,GAAO8qB,OAxnHP,SAAgBjzB,EAAQnC,GACtB,OAAOmC,GAAUyP,GAAWzP,EAAQuW,GAAY1Y,EAAU,KAwnH5DsK,GAAO+qB,YA3lHP,SAAqBlzB,EAAQnC,GAC3B,OAAOmC,GAAU2P,GAAgB3P,EAAQuW,GAAY1Y,EAAU,KA2lHjEsK,GAAO8D,IAAMA,GACb9D,GAAOygB,GAAKA,GACZzgB,GAAO0gB,IAAMA,GACb1gB,GAAOxH,IA5+GP,SAAaX,EAAQ0Q,GACnB,OAAiB,MAAV1Q,GAAkBqiB,GAAQriB,EAAQ0Q,EAAMa,KA4+GjDpJ,GAAOqN,MAAQA,GACfrN,GAAOkc,KAAOA,GACdlc,GAAOqM,SAAWA,GAClBrM,GAAO0G,SA/nOP,SAAkBvP,EAAYvL,EAAO0L,EAAWkd,GAC9Crd,EAAa6V,GAAY7V,GAAcA,EAAaT,GAAOS,GAC3DG,EAAaA,IAAckd,EAASkE,GAAUphB,GAAa,EAE3D,IAAI3M,EAASwM,EAAWxM,OAIxB,OAHI2M,EAAY,IACdA,EAAY8G,GAAUzT,EAAS2M,EAAW,IAErCwpB,GAAS3pB,GACXG,GAAa3M,GAAUwM,EAAW+X,QAAQtjB,EAAO0L,IAAc,IAC7D3M,GAAUyL,GAAYe,EAAYvL,EAAO0L,IAAc,GAsnOhE0I,GAAOkP,QA7jSP,SAAiB1Z,EAAO5J,EAAO0L,GAC7B,IAAI3M,EAAkB,MAAT6K,EAAgB,EAAIA,EAAM7K,OACvC,IAAKA,EACH,OAAQ,EAEV,IAAIiL,EAAqB,MAAb0B,EAAoB,EAAIohB,GAAUphB,GAI9C,OAHI1B,EAAQ,IACVA,EAAQwI,GAAUzT,EAASiL,EAAO,IAE7BQ,GAAYZ,EAAO5J,EAAOgK,IAqjSnCoK,GAAOgrB,QAroFP,SAAiBjnB,EAAQ0L,EAAOW,GAS9B,OARAX,EAAQsI,GAAStI,QAxsbjB3X,IAysbIsY,GACFA,EAAMX,EACNA,EAAQ,GAERW,EAAM2H,GAAS3H,GA3qVnB,SAAqBrM,EAAQ0L,EAAOW,GAClC,OAAOrM,GAAUzF,GAAUmR,EAAOW,IAAQrM,EAAS3F,GAAUqR,EAAOW,GA6qV7D6a,CADPlnB,EAASmU,GAASnU,GACS0L,EAAOW,IA6nFpCpQ,GAAOmiB,OAASA,GAChBniB,GAAOoC,YAAcA,GACrBpC,GAAOE,QAAUA,GACjBF,GAAOvL,cAAgBA,GACvBuL,GAAOgN,YAAcA,GACrBhN,GAAO4N,kBAAoBA,GAC3B5N,GAAOkrB,UAzuKP,SAAmBt/B,GACjB,OAAiB,IAAVA,IAA4B,IAAVA,GACtBqU,GAAarU,IAAUid,GAAWjd,IAAU0B,GAwuKjD0S,GAAOjC,SAAWA,GAClBiC,GAAOrL,OAASA,GAChBqL,GAAOmrB,UAhrKP,SAAmBv/B,GACjB,OAAOqU,GAAarU,IAA6B,IAAnBA,EAAMiI,WAAmBga,GAAcjiB,IAgrKvEoU,GAAOorB,QA5oKP,SAAiBx/B,GACf,GAAa,MAATA,EACF,OAAO,EAET,GAAIohB,GAAYphB,KACXsU,GAAQtU,IAA0B,iBAATA,GAA4C,mBAAhBA,EAAM+Q,QAC1DoB,GAASnS,IAAUuJ,GAAavJ,IAAUwW,GAAYxW,IAC1D,OAAQA,EAAMjB,OAEhB,IAAIga,EAAMC,GAAOhZ,GACjB,GAAI+Y,GAAOhX,GAAUgX,GAAO5W,EAC1B,OAAQnC,EAAM4N,KAEhB,GAAIkT,GAAY9gB,GACd,OAAQ6gB,GAAS7gB,GAAOjB,OAE1B,IAAK,IAAIO,KAAOU,EACd,GAAI6P,GAAetP,KAAKP,EAAOV,GAC7B,OAAO,EAGX,OAAO,GAwnKT8U,GAAOqrB,QAzlKP,SAAiBz/B,EAAOud,GACtB,OAAOe,GAAYte,EAAOud,IAylK5BnJ,GAAOsrB,YAtjKP,SAAqB1/B,EAAOud,EAAO/E,GAEjC,IAAI7X,GADJ6X,EAAkC,mBAAdA,EAA2BA,OApyW/CtM,GAqyW0BsM,EAAWxY,EAAOud,QAryW5CrR,EAsyWA,YAtyWAA,IAsyWOvL,EAAuB2d,GAAYte,EAAOud,OAtyWjDrR,EAsyWmEsM,KAAgB7X,GAojKrFyT,GAAO2gB,QAAUA,GACjB3gB,GAAO/B,SA7/JP,SAAkBrS,GAChB,MAAuB,iBAATA,GAAqBoS,GAAepS,IA6/JpDoU,GAAOqI,WAAaA,GACpBrI,GAAO4gB,UAAYA,GACnB5gB,GAAOoa,SAAWA,GAClBpa,GAAOnL,MAAQA,GACfmL,GAAOurB,QA7zJP,SAAiB1zB,EAAQzI,GACvB,OAAOyI,IAAWzI,GAAU0c,GAAYjU,EAAQzI,EAAQ6d,GAAa7d,KA6zJvE4Q,GAAOwrB,YA1xJP,SAAqB3zB,EAAQzI,EAAQgV,GAEnC,OADAA,EAAkC,mBAAdA,EAA2BA,OAxkX/CtM,EAykXOgU,GAAYjU,EAAQzI,EAAQ6d,GAAa7d,GAASgV,IAyxJ3DpE,GAAOyrB,MA1vJP,SAAe7/B,GAIb,OAAOi1B,GAASj1B,IAAUA,IAAUA,GAuvJtCoU,GAAO0rB,SA1tJP,SAAkB9/B,GAChB,GAAI4uB,GAAW5uB,GACb,MAAM,IAAIoP,EAloXM,mEAooXlB,OAAOmR,GAAavgB,IAutJtBoU,GAAO2rB,MA3qJP,SAAe//B,GACb,OAAgB,MAATA,GA2qJToU,GAAO4rB,OApsJP,SAAgBhgC,GACd,OAAiB,OAAVA,GAosJToU,GAAO6gB,SAAWA,GAClB7gB,GAAOQ,SAAWA,GAClBR,GAAOC,aAAeA,GACtBD,GAAO6N,cAAgBA,GACvB7N,GAAOjL,SAAWA,GAClBiL,GAAO6rB,cAxjJP,SAAuBjgC,GACrB,OAAOg1B,GAAUh1B,IAAUA,IA3vXR,kBA2vXsCA,GA3vXtC,kBAmzgBrBoU,GAAO/K,MAAQA,GACf+K,GAAO8gB,SAAWA,GAClB9gB,GAAO2H,SAAWA,GAClB3H,GAAO7K,aAAeA,GACtB6K,GAAO8rB,YAt9IP,SAAqBlgC,GACnB,YA35XAkM,IA25XOlM,GAs9IToU,GAAO+rB,UAl8IP,SAAmBngC,GACjB,OAAOqU,GAAarU,IAAUgZ,GAAOhZ,IAAUsC,GAk8IjD8R,GAAOgsB,UA96IP,SAAmBpgC,GACjB,OAAOqU,GAAarU,IAh2XP,oBAg2XiBid,GAAWjd,IA86I3CoU,GAAO5N,KAx9RP,SAAcoD,EAAO6yB,GACnB,OAAgB,MAAT7yB,EAAgB,GAAK0I,GAAW/R,KAAKqJ,EAAO6yB,IAw9RrDroB,GAAOijB,UAAYA,GACnBjjB,GAAOgK,KAAOA,GACdhK,GAAOisB,YA/6RP,SAAqBz2B,EAAO5J,EAAO0L,GACjC,IAAI3M,EAAkB,MAAT6K,EAAgB,EAAIA,EAAM7K,OACvC,IAAKA,EACH,OAAQ,EAEV,IAAIiL,EAAQjL,EAKZ,YAj9OAmN,IA68OIR,IAEF1B,GADAA,EAAQ8iB,GAAUphB,IACF,EAAI8G,GAAUzT,EAASiL,EAAO,GAAK0I,GAAU1I,EAAOjL,EAAS,IAExEiB,IAAUA,EAhtMrB,SAA2B4J,EAAO5J,EAAO0L,GAEvC,IADA,IAAI1B,EAAQ0B,EAAY,EACjB1B,KACL,GAAIJ,EAAMI,KAAWhK,EACnB,OAAOgK,EAGX,OAAOA,EA0sMDs2B,CAAkB12B,EAAO5J,EAAOgK,GAChCyB,GAAc7B,EAAOiC,GAAW7B,GAAO,IAo6R7CoK,GAAOkjB,UAAYA,GACnBljB,GAAOmjB,WAAaA,GACpBnjB,GAAO+gB,GAAKA,GACZ/gB,GAAOghB,IAAMA,GACbhhB,GAAO3B,IAhfP,SAAa7I,GACX,OAAQA,GAASA,EAAM7K,OACnB+c,GAAalS,EAAO6W,GAAUnD,SA74flCpR,GA43gBFkI,GAAOmsB,MApdP,SAAe32B,EAAOE,GACpB,OAAQF,GAASA,EAAM7K,OACnB+c,GAAalS,EAAO4Y,GAAY1Y,EAAU,GAAIwT,SA16flDpR,GA63gBFkI,GAAOosB,KAjcP,SAAc52B,GACZ,OAAOmC,GAASnC,EAAO6W,KAiczBrM,GAAOqsB,OAvaP,SAAgB72B,EAAOE,GACrB,OAAOiC,GAASnC,EAAO4Y,GAAY1Y,EAAU,KAua/CsK,GAAOzB,IAlZP,SAAa/I,GACX,OAAQA,GAASA,EAAM7K,OACnB+c,GAAalS,EAAO6W,GAAUS,SA/+flChV,GAg4gBFkI,GAAOssB,MAtXP,SAAe92B,EAAOE,GACpB,OAAQF,GAASA,EAAM7K,OACnB+c,GAAalS,EAAO4Y,GAAY1Y,EAAU,GAAIoX,SA5ggBlDhV,GAi4gBFkI,GAAOia,UAAYA,GACnBja,GAAOya,UAAYA,GACnBza,GAAOusB,WAztBP,WACE,MAAO,IAytBTvsB,GAAOwsB,WAzsBP,WACE,MAAO,IAysBTxsB,GAAOysB,SAzrBP,WACE,OAAO,GAyrBTzsB,GAAO+kB,SAAWA,GAClB/kB,GAAO0sB,IA55RP,SAAal3B,EAAO2C,GAClB,OAAQ3C,GAASA,EAAM7K,OAAUqjB,GAAQxY,EAAOkjB,GAAUvgB,SA5+O1DL,GAw4gBFkI,GAAO2sB,WAvhCP,WAIE,OAHIl5B,GAAKiH,IAAM9N,OACb6G,GAAKiH,EAAIwB,IAEJtP,MAohCToT,GAAO4Y,KAAOA,GACd5Y,GAAO3C,IAAMA,GACb2C,GAAO4sB,IAp3EP,SAAaxzB,EAAQzO,EAAQgtB,GAC3Bve,EAASoC,GAASpC,GAGlB,IAAIyzB,GAFJliC,EAAS+tB,GAAU/tB,IAEMsP,GAAWb,GAAU,EAC9C,IAAKzO,GAAUkiC,GAAaliC,EAC1B,OAAOyO,EAET,IAAIuX,GAAOhmB,EAASkiC,GAAa,EACjC,OACEnV,GAAcha,GAAYiT,GAAMgH,GAChCve,EACAse,GAAcla,GAAWmT,GAAMgH,IAy2EnC3X,GAAO8sB,OA90EP,SAAgB1zB,EAAQzO,EAAQgtB,GAC9Bve,EAASoC,GAASpC,GAGlB,IAAIyzB,GAFJliC,EAAS+tB,GAAU/tB,IAEMsP,GAAWb,GAAU,EAC9C,OAAQzO,GAAUkiC,EAAYliC,EACzByO,EAASse,GAAc/sB,EAASkiC,EAAWlV,GAC5Cve,GAw0EN4G,GAAO+sB,SA9yEP,SAAkB3zB,EAAQzO,EAAQgtB,GAChCve,EAASoC,GAASpC,GAGlB,IAAIyzB,GAFJliC,EAAS+tB,GAAU/tB,IAEMsP,GAAWb,GAAU,EAC9C,OAAQzO,GAAUkiC,EAAYliC,EACzB+sB,GAAc/sB,EAASkiC,EAAWlV,GAASve,EAC5CA,GAwyEN4G,GAAO3M,SA7wEP,SAAkB+F,EAAQ4zB,EAAOxY,GAM/B,OALIA,GAAkB,MAATwY,EACXA,EAAQ,EACCA,IACTA,GAASA,GAEJvuB,GAAejD,GAASpC,GAAQgD,QAAQrM,EAAa,IAAKi9B,GAAS,IAwwE5EhtB,GAAOrB,OA7pFP,SAAgBqF,EAAOC,EAAOgpB,GA2B5B,GA1BIA,GAA+B,kBAAZA,GAAyBxY,GAAezQ,EAAOC,EAAOgpB,KAC3EhpB,EAAQgpB,OApvbVn1B,YAsvbIm1B,IACkB,kBAAThpB,GACTgpB,EAAWhpB,EACXA,OAzvbJnM,GA2vb2B,kBAATkM,IACdipB,EAAWjpB,EACXA,OA7vbJlM,aAgwbIkM,QAhwbJlM,IAgwb2BmM,GACzBD,EAAQ,EACRC,EAAQ,IAGRD,EAAQ+T,GAAS/T,QArwbnBlM,IAswbMmM,GACFA,EAAQD,EACRA,EAAQ,GAERC,EAAQ8T,GAAS9T,IAGjBD,EAAQC,EAAO,CACjB,IAAIipB,EAAOlpB,EACXA,EAAQC,EACRA,EAAQipB,EAEV,GAAID,GAAYjpB,EAAQ,GAAKC,EAAQ,EAAG,CACtC,IAAIqX,EAAO5c,KACX,OAAOJ,GAAU0F,EAASsX,GAAQrX,EAAQD,EAAQ9Q,GAAe,QAAUooB,EAAO,IAAI3wB,OAAS,KAAOsZ,GAExG,OAAOtB,GAAWqB,EAAOC,IA0nF3BjE,GAAOmtB,OA/8NP,SAAgBh2B,EAAYzB,EAAUC,GACpC,IAAIP,EAAO8K,GAAQ/I,GAAcP,GAAcoB,GAC3CnB,EAAY9J,UAAUpC,OAAS,EAEnC,OAAOyK,EAAK+B,EAAYiX,GAAY1Y,EAAU,GAAIC,EAAakB,EAAW2M,KA48N5ExD,GAAOotB,YAn7NP,SAAqBj2B,EAAYzB,EAAUC,GACzC,IAAIP,EAAO8K,GAAQ/I,GAAcL,GAAmBkB,GAChDnB,EAAY9J,UAAUpC,OAAS,EAEnC,OAAOyK,EAAK+B,EAAYiX,GAAY1Y,EAAU,GAAIC,EAAakB,EAAW0Q,KAg7N5EvH,GAAOqtB,OAlvEP,SAAgBj0B,EAAQjB,EAAGqc,GAMzB,OAJErc,GADGqc,EAAQC,GAAerb,EAAQjB,EAAGqc,QAjqcvC1c,IAiqcgDK,GAC1C,EAEAugB,GAAUvgB,GAEToX,GAAW/T,GAASpC,GAASjB,IA6uEtC6H,GAAO5D,QAvtEP,WACE,IAAI9G,EAAOvI,UACPqM,EAASoC,GAASlG,EAAK,IAE3B,OAAOA,EAAK3K,OAAS,EAAIyO,EAASA,EAAOgD,QAAQ9G,EAAK,GAAIA,EAAK,KAotEjE0K,GAAOzT,OAzmGP,SAAgBsL,EAAQ0Q,EAAMgP,GAG5B,IAAI3hB,GAAS,EACTjL,GAHJ4d,EAAOC,GAASD,EAAM1Q,IAGJlN,OAOlB,IAJKA,IACHA,EAAS,EACTkN,OApzaFC,KAszaSlC,EAAQjL,GAAQ,CACvB,IAAIiB,EAAkB,MAAViM,OAvzadC,EAuza2CD,EAAO4Q,GAAMF,EAAK3S,UAvza7DkC,IAwzaMlM,IACFgK,EAAQjL,EACRiB,EAAQ2rB,GAEV1f,EAASwQ,GAAWzc,GAASA,EAAMO,KAAK0L,GAAUjM,EAEpD,OAAOiM,GAulGTmI,GAAOklB,MAAQA,GACfllB,GAAOrF,aAAeA,EACtBqF,GAAOstB,OA73NP,SAAgBn2B,GAEd,OADW+I,GAAQ/I,GAAcuL,GAAckN,IACnCzY,IA43Nd6I,GAAOxG,KAlzNP,SAAcrC,GACZ,GAAkB,MAAdA,EACF,OAAO,EAET,GAAI6V,GAAY7V,GACd,OAAO2pB,GAAS3pB,GAAc8C,GAAW9C,GAAcA,EAAWxM,OAEpE,IAAIga,EAAMC,GAAOzN,GACjB,OAAIwN,GAAOhX,GAAUgX,GAAO5W,EACnBoJ,EAAWqC,KAEbiT,GAAStV,GAAYxM,QAwyN9BqV,GAAOojB,UAAYA,GACnBpjB,GAAOutB,KAlwNP,SAAcp2B,EAAYnB,EAAWwe,GACnC,IAAIpf,EAAO8K,GAAQ/I,GAAcJ,GAAYsZ,GAI7C,OAHImE,GAASC,GAAetd,EAAYnB,EAAWwe,KACjDxe,OA3pTF8B,GA6pTO1C,EAAK+B,EAAYiX,GAAYpY,EAAW,KA8vNjDgK,GAAOwtB,YA/pRP,SAAqBh4B,EAAO5J,GAC1B,OAAO0kB,GAAgB9a,EAAO5J,IA+pRhCoU,GAAOytB,cAnoRP,SAAuBj4B,EAAO5J,EAAO8J,GACnC,OAAOkb,GAAkBpb,EAAO5J,EAAOwiB,GAAY1Y,EAAU,KAmoR/DsK,GAAO0tB,cAhnRP,SAAuBl4B,EAAO5J,GAC5B,IAAIjB,EAAkB,MAAT6K,EAAgB,EAAIA,EAAM7K,OACvC,GAAIA,EAAQ,CACV,IAAIiL,EAAQ0a,GAAgB9a,EAAO5J,GACnC,GAAIgK,EAAQjL,GAAUuY,GAAG1N,EAAMI,GAAQhK,GACrC,OAAOgK,EAGX,OAAQ,GAymRVoK,GAAO2tB,gBAplRP,SAAyBn4B,EAAO5J,GAC9B,OAAO0kB,GAAgB9a,EAAO5J,GAAO,IAolRvCoU,GAAO4tB,kBAxjRP,SAA2Bp4B,EAAO5J,EAAO8J,GACvC,OAAOkb,GAAkBpb,EAAO5J,EAAOwiB,GAAY1Y,EAAU,IAAI,IAwjRnEsK,GAAO6tB,kBAriRP,SAA2Br4B,EAAO5J,GAEhC,GADsB,MAAT4J,EAAgB,EAAIA,EAAM7K,OAC3B,CACV,IAAIiL,EAAQ0a,GAAgB9a,EAAO5J,GAAO,GAAQ,EAClD,GAAIsX,GAAG1N,EAAMI,GAAQhK,GACnB,OAAOgK,EAGX,OAAQ,GA8hRVoK,GAAOqjB,UAAYA,GACnBrjB,GAAO8tB,WA9mEP,SAAoB10B,EAAQ5O,EAAQ8/B,GAOlC,OANAlxB,EAASoC,GAASpC,GAClBkxB,EAAuB,MAAZA,EACP,EACAvnB,GAAU2V,GAAU4R,GAAW,EAAGlxB,EAAOzO,QAE7CH,EAASgnB,GAAahnB,GACf4O,EAAOyZ,MAAMyX,EAAUA,EAAW9/B,EAAOG,SAAWH,GAwmE7DwV,GAAOmlB,SAAWA,GAClBnlB,GAAO+tB,IAzUP,SAAav4B,GACX,OAAQA,GAASA,EAAM7K,OACnBiN,GAAQpC,EAAO6W,IACf,GAuUNrM,GAAOguB,MA7SP,SAAex4B,EAAOE,GACpB,OAAQF,GAASA,EAAM7K,OACnBiN,GAAQpC,EAAO4Y,GAAY1Y,EAAU,IACrC,GA2SNsK,GAAOiuB,SAhgEP,SAAkB70B,EAAQmlB,EAAS/J,GAIjC,IAAI0Z,EAAWluB,GAAOgH,iBAElBwN,GAASC,GAAerb,EAAQmlB,EAAS/J,KAC3C+J,OA76cFzmB,GA+6cAsB,EAASoC,GAASpC,GAClBmlB,EAAUmD,GAAa,GAAInD,EAAS2P,EAAU3U,IAE9C,IAII4U,EACAC,EALAC,EAAU3M,GAAa,GAAInD,EAAQ8P,QAASH,EAASG,QAAS9U,IAC9D+U,EAAcxyB,GAAKuyB,GACnBE,EAAgBl2B,GAAWg2B,EAASC,GAIpC14B,EAAQ,EACR44B,EAAcjQ,EAAQiQ,aAAe19B,GACrC1B,EAAS,WAGTq/B,EAAet/B,IAChBovB,EAAQgM,QAAUz5B,IAAW1B,OAAS,IACvCo/B,EAAYp/B,OAAS,KACpBo/B,IAAgBh/B,EAAgBc,GAAeQ,IAAW1B,OAAS,KACnEmvB,EAAQmQ,UAAY59B,IAAW1B,OAAS,KACzC,KAMEu/B,EAAY,kBACblzB,GAAetP,KAAKoyB,EAAS,cACzBA,EAAQoQ,UAAY,IAAIvyB,QAAQ,UAAW,KAC3C,6BAA+BtJ,GAAmB,KACnD,KAENsG,EAAOgD,QAAQqyB,GAAc,SAASp0B,EAAOu0B,EAAaC,EAAkBC,EAAiBC,EAAep4B,GAsB1G,OArBAk4B,IAAqBA,EAAmBC,GAGxC1/B,GAAUgK,EAAOyZ,MAAMjd,EAAOe,GAAQyF,QAAQrL,GAAmBkI,IAG7D21B,IACFT,GAAa,EACb/+B,GAAU,YAAcw/B,EAAc,UAEpCG,IACFX,GAAe,EACfh/B,GAAU,OAAS2/B,EAAgB,eAEjCF,IACFz/B,GAAU,iBAAmBy/B,EAAmB,+BAElDj5B,EAAQe,EAAS0D,EAAM1P,OAIhB0P,KAGTjL,GAAU,OAMV,IAAI4/B,EAAWvzB,GAAetP,KAAKoyB,EAAS,aAAeA,EAAQyQ,SAC9DA,IACH5/B,EAAS,iBAAmBA,EAAS,SAGvCA,GAAUg/B,EAAeh/B,EAAOgN,QAAQvN,EAAsB,IAAMO,GACjEgN,QAAQtN,EAAqB,MAC7BsN,QAAQrN,EAAuB,OAGlCK,EAAS,aAAe4/B,GAAY,OAAS,SAC1CA,EACG,GACA,wBAEJ,qBACCb,EACI,mBACA,KAEJC,EACG,uFAEA,OAEJh/B,EACA,gBAEF,IAAI7C,EAASq3B,IAAQ,WACnB,OAAOlwB,GAAS46B,EAAaK,EAAY,UAAYv/B,GAClDpC,WA3gdL8K,EA2gdsBy2B,MAMtB,GADAhiC,EAAO6C,OAASA,EACZuxB,GAAQp0B,GACV,MAAMA,EAER,OAAOA,GAm5DTyT,GAAOivB,MApsBP,SAAe92B,EAAGzC,GAEhB,IADAyC,EAAIugB,GAAUvgB,IACN,GAAKA,EA5qfM,iBA6qfjB,MAAO,GAET,IAAIvC,EA1qfe,WA2qffjL,EAAS2T,GAAUnG,EA3qfJ,YA8qfnBA,GA9qfmB,WAirfnB,IADA,IAAI5L,EAAS2L,GAAUvN,EAHvB+K,EAAW0Y,GAAY1Y,MAIdE,EAAQuC,GACfzC,EAASE,GAEX,OAAOrJ,GAsrBTyT,GAAO+X,SAAWA,GAClB/X,GAAO0Y,UAAYA,GACnB1Y,GAAOshB,SAAWA,GAClBthB,GAAOkvB,QA/3DP,SAAiBtjC,GACf,OAAO4P,GAAS5P,GAAOk3B,eA+3DzB9iB,GAAOkY,SAAWA,GAClBlY,GAAOmvB,cAvsIP,SAAuBvjC,GACrB,OAAOA,EACHmX,GAAU2V,GAAU9sB,IA/qYL,mCAgrYJ,IAAVA,EAAcA,EAAQ,GAqsI7BoU,GAAOxE,SAAWA,GAClBwE,GAAOovB,QA12DP,SAAiBxjC,GACf,OAAO4P,GAAS5P,GAAO23B,eA02DzBvjB,GAAOqvB,KAj1DP,SAAcj2B,EAAQue,EAAOnD,GAE3B,IADApb,EAASoC,GAASpC,MACHob,QAjmdf1c,IAimdwB6f,GACtB,OAAOve,EAAOgD,QAAQtM,EAAQ,IAEhC,IAAKsJ,KAAYue,EAAQnG,GAAamG,IACpC,OAAOve,EAET,IAAIV,EAAa0B,GAAchB,GAC3BT,EAAayB,GAAcud,GAI/B,OAAOhF,GAAUja,EAHLD,GAAgBC,EAAYC,GAC9BC,GAAcF,EAAYC,GAAc,GAETvG,KAAK,KAq0DhD4N,GAAOsvB,QA/yDP,SAAiBl2B,EAAQue,EAAOnD,GAE9B,IADApb,EAASoC,GAASpC,MACHob,QApodf1c,IAoodwB6f,GACtB,OAAOve,EAAOgD,QAAQpM,EAAW,IAEnC,IAAKoJ,KAAYue,EAAQnG,GAAamG,IACpC,OAAOve,EAET,IAAIV,EAAa0B,GAAchB,GAG/B,OAAOuZ,GAAUja,EAAY,EAFnBE,GAAcF,EAAY0B,GAAcud,IAAU,GAEvBvlB,KAAK,KAqyD5C4N,GAAOuvB,UA/wDP,SAAmBn2B,EAAQue,EAAOnD,GAEhC,IADApb,EAASoC,GAASpC,MACHob,QArqdf1c,IAqqdwB6f,GACtB,OAAOve,EAAOgD,QAAQrM,EAAa,IAErC,IAAKqJ,KAAYue,EAAQnG,GAAamG,IACpC,OAAOve,EAET,IAAIV,EAAa0B,GAAchB,GAG/B,OAAOuZ,GAAUja,EAFLD,GAAgBC,EAAY0B,GAAcud,KAElBvlB,KAAK,KAqwD3C4N,GAAOwvB,SA7tDP,SAAkBp2B,EAAQmlB,GACxB,IAAI5zB,EA5qdmB,GA6qdnB8kC,EA5qdqB,MA8qdzB,GAAIjvB,GAAS+d,GAAU,CACrB,IAAI8J,EAAY,cAAe9J,EAAUA,EAAQ8J,UAAYA,EAC7D19B,EAAS,WAAY4zB,EAAU7F,GAAU6F,EAAQ5zB,QAAUA,EAC3D8kC,EAAW,aAAclR,EAAU/M,GAAa+M,EAAQkR,UAAYA,EAItE,IAAI5C,GAFJzzB,EAASoC,GAASpC,IAEKzO,OACvB,GAAIwO,GAAWC,GAAS,CACtB,IAAIV,EAAa0B,GAAchB,GAC/ByzB,EAAYn0B,EAAW/N,OAEzB,GAAIA,GAAUkiC,EACZ,OAAOzzB,EAET,IAAIgX,EAAMzlB,EAASsP,GAAWw1B,GAC9B,GAAIrf,EAAM,EACR,OAAOqf,EAET,IAAIljC,EAASmM,EACTia,GAAUja,EAAY,EAAG0X,GAAKhe,KAAK,IACnCgH,EAAOyZ,MAAM,EAAGzC,GAEpB,QAjvdAtY,IAivdIuwB,EACF,OAAO97B,EAASkjC,EAKlB,GAHI/2B,IACF0X,GAAQ7jB,EAAO5B,OAASylB,GAEtBrb,GAASszB,IACX,GAAIjvB,EAAOyZ,MAAMzC,GAAKsf,OAAOrH,GAAY,CACvC,IAAIhuB,EACAs1B,EAAYpjC,EAMhB,IAJK87B,EAAU90B,SACb80B,EAAYl5B,GAAOk5B,EAAUj5B,OAAQoM,GAASjL,GAAQsL,KAAKwsB,IAAc,MAE3EA,EAAUnuB,UAAY,EACdG,EAAQguB,EAAUxsB,KAAK8zB,IAC7B,IAAIC,EAASv1B,EAAMzE,MAErBrJ,EAASA,EAAOsmB,MAAM,OAnwd1B/a,IAmwd6B83B,EAAuBxf,EAAMwf,SAEnD,GAAIx2B,EAAO8V,QAAQsC,GAAa6W,GAAYjY,IAAQA,EAAK,CAC9D,IAAIxa,EAAQrJ,EAAO0/B,YAAY5D,GAC3BzyB,GAAS,IACXrJ,EAASA,EAAOsmB,MAAM,EAAGjd,IAG7B,OAAOrJ,EAASkjC,GAyqDlBzvB,GAAO6vB,SAnpDP,SAAkBz2B,GAEhB,OADAA,EAASoC,GAASpC,KACAlK,EAAiBmK,KAAKD,GACpCA,EAAOgD,QAAQpN,EAAeyL,IAC9BrB,GAgpDN4G,GAAO8vB,SAvpBP,SAAkBC,GAChB,IAAInd,IAAOlX,GACX,OAAOF,GAASu0B,GAAUnd,GAspB5B5S,GAAOsjB,UAAYA,GACnBtjB,GAAOgjB,WAAaA,GAGpBhjB,GAAOgwB,KAAOv2B,GACduG,GAAOiwB,UAAYrS,GACnB5d,GAAOkwB,MAAQhU,GAEfiI,GAAMnkB,GAAS,WACb,IAAI5Q,EAAS,GAMb,OALAkY,GAAWtH,IAAQ,SAAS5K,EAAMwf,GAC3BnZ,GAAetP,KAAK6T,GAAO1U,UAAWspB,KACzCxlB,EAAOwlB,GAAcxf,MAGlBhG,EAPM,GAQT,CAAE,OAAS,IAWjB4Q,GAAOmwB,QA98gBK,UAi9gBZt6B,GAAU,CAAC,OAAQ,UAAW,QAAS,aAAc,UAAW,iBAAiB,SAAS+e,GACxF5U,GAAO4U,GAAY9b,YAAckH,MAInCnK,GAAU,CAAC,OAAQ,SAAS,SAAS+e,EAAYhf,GAC/CuK,GAAY7U,UAAUspB,GAAc,SAASzc,GAC3CA,OA39gBFL,IA29gBMK,EAAkB,EAAIiG,GAAUsa,GAAUvgB,GAAI,GAElD,IAAI5L,EAAUK,KAAKqU,eAAiBrL,EAChC,IAAIuK,GAAYvT,MAChBA,KAAKgvB,QAUT,OARIrvB,EAAO0U,aACT1U,EAAO4U,cAAgB7C,GAAUnG,EAAG5L,EAAO4U,eAE3C5U,EAAO6U,UAAUqB,KAAK,CACpB,KAAQnE,GAAUnG,EAv6gBL,YAw6gBb,KAAQyc,GAAcroB,EAAOyU,QAAU,EAAI,QAAU,MAGlDzU,GAGT4T,GAAY7U,UAAUspB,EAAa,SAAW,SAASzc,GACrD,OAAOvL,KAAKiS,UAAU+V,GAAYzc,GAAG0G,cAKzChJ,GAAU,CAAC,SAAU,MAAO,cAAc,SAAS+e,EAAYhf,GAC7D,IAAIkkB,EAAOlkB,EAAQ,EACfw6B,EAj8gBe,GAi8gBJtW,GA/7gBG,GA+7gByBA,EAE3C3Z,GAAY7U,UAAUspB,GAAc,SAASlf,GAC3C,IAAInJ,EAASK,KAAKgvB,QAMlB,OALArvB,EAAO2U,cAAcuB,KAAK,CACxB,SAAY2L,GAAY1Y,EAAU,GAClC,KAAQokB,IAEVvtB,EAAO0U,aAAe1U,EAAO0U,cAAgBmvB,EACtC7jC,MAKXsJ,GAAU,CAAC,OAAQ,SAAS,SAAS+e,EAAYhf,GAC/C,IAAIy6B,EAAW,QAAUz6B,EAAQ,QAAU,IAE3CuK,GAAY7U,UAAUspB,GAAc,WAClC,OAAOhoB,KAAKyjC,GAAU,GAAGzkC,QAAQ,OAKrCiK,GAAU,CAAC,UAAW,SAAS,SAAS+e,EAAYhf,GAClD,IAAI06B,EAAW,QAAU16B,EAAQ,GAAK,SAEtCuK,GAAY7U,UAAUspB,GAAc,WAClC,OAAOhoB,KAAKqU,aAAe,IAAId,GAAYvT,MAAQA,KAAK0jC,GAAU,OAItEnwB,GAAY7U,UAAUm6B,QAAU,WAC9B,OAAO74B,KAAK25B,OAAOla,KAGrBlM,GAAY7U,UAAUoyB,KAAO,SAAS1nB,GACpC,OAAOpJ,KAAK25B,OAAOvwB,GAAWkmB,QAGhC/b,GAAY7U,UAAUqyB,SAAW,SAAS3nB,GACxC,OAAOpJ,KAAKiS,UAAU6e,KAAK1nB,IAG7BmK,GAAY7U,UAAUwyB,UAAYtO,IAAS,SAASjH,EAAMjT,GACxD,MAAmB,mBAARiT,EACF,IAAIpI,GAAYvT,MAElBA,KAAK2M,KAAI,SAAS3N,GACvB,OAAOke,GAAWle,EAAO2c,EAAMjT,SAInC6K,GAAY7U,UAAUu8B,OAAS,SAAS7xB,GACtC,OAAOpJ,KAAK25B,OAAOrG,GAAO9R,GAAYpY,MAGxCmK,GAAY7U,UAAUunB,MAAQ,SAASpD,EAAOW,GAC5CX,EAAQiJ,GAAUjJ,GAElB,IAAIljB,EAASK,KACb,OAAIL,EAAO0U,eAAiBwO,EAAQ,GAAKW,EAAM,GACtC,IAAIjQ,GAAY5T,IAErBkjB,EAAQ,EACVljB,EAASA,EAAOm8B,WAAWjZ,GAClBA,IACTljB,EAASA,EAAO05B,KAAKxW,SAtjhBvB3X,IAwjhBIsY,IAEF7jB,GADA6jB,EAAMsI,GAAUtI,IACD,EAAI7jB,EAAO25B,WAAW9V,GAAO7jB,EAAOk8B,KAAKrY,EAAMX,IAEzDljB,IAGT4T,GAAY7U,UAAUq9B,eAAiB,SAAS3yB,GAC9C,OAAOpJ,KAAKiS,UAAU+pB,UAAU5yB,GAAW6I,WAG7CsB,GAAY7U,UAAU21B,QAAU,WAC9B,OAAOr0B,KAAK67B,KAtghBO,aA0ghBrBnhB,GAAWnH,GAAY7U,WAAW,SAAS8J,EAAMwf,GAC/C,IAAI2b,EAAgB,qCAAqCl3B,KAAKub,GAC1D4b,EAAU,kBAAkBn3B,KAAKub,GACjC6b,EAAazwB,GAAOwwB,EAAW,QAAwB,QAAd5b,EAAuB,QAAU,IAAOA,GACjF8b,EAAeF,GAAW,QAAQn3B,KAAKub,GAEtC6b,IAGLzwB,GAAO1U,UAAUspB,GAAc,WAC7B,IAAIhpB,EAAQgB,KAAK+T,YACbrL,EAAOk7B,EAAU,CAAC,GAAKzjC,UACvB4jC,EAAS/kC,aAAiBuU,GAC1BzK,EAAWJ,EAAK,GAChBs7B,EAAUD,GAAUzwB,GAAQtU,GAE5B2xB,EAAc,SAAS3xB,GACzB,IAAIW,EAASkkC,EAAWzjC,MAAMgT,GAAQvJ,GAAU,CAAC7K,GAAQ0J,IACzD,OAAQk7B,GAAW9vB,EAAYnU,EAAO,GAAKA,GAGzCqkC,GAAWL,GAAoC,mBAAZ76B,GAA6C,GAAnBA,EAAS/K,SAExEgmC,EAASC,GAAU,GAErB,IAAIlwB,EAAW9T,KAAKiU,UAChBgwB,IAAajkC,KAAKgU,YAAYjW,OAC9BmmC,EAAcJ,IAAiBhwB,EAC/BqwB,EAAWJ,IAAWE,EAE1B,IAAKH,GAAgBE,EAAS,CAC5BhlC,EAAQmlC,EAAWnlC,EAAQ,IAAIuU,GAAYvT,MAC3C,IAAIL,EAAS6I,EAAKpI,MAAMpB,EAAO0J,GAE/B,OADA/I,EAAOqU,YAAY6B,KAAK,CAAE,KAAQkT,GAAM,KAAQ,CAAC4H,GAAc,aAzmhBnEzlB,IA0mhBW,IAAIsI,GAAc7T,EAAQmU,GAEnC,OAAIowB,GAAeC,EACV37B,EAAKpI,MAAMJ,KAAM0I,IAE1B/I,EAASK,KAAK+oB,KAAK4H,GACZuT,EAAeN,EAAUjkC,EAAOX,QAAQ,GAAKW,EAAOX,QAAWW,QAK1EsJ,GAAU,CAAC,MAAO,OAAQ,QAAS,OAAQ,SAAU,YAAY,SAAS+e,GACxE,IAAIxf,EAAO+F,GAAWyZ,GAClBoc,EAAY,0BAA0B33B,KAAKub,GAAc,MAAQ,OACjE8b,EAAe,kBAAkBr3B,KAAKub,GAE1C5U,GAAO1U,UAAUspB,GAAc,WAC7B,IAAItf,EAAOvI,UACX,GAAI2jC,IAAiB9jC,KAAKiU,UAAW,CACnC,IAAIjV,EAAQgB,KAAKhB,QACjB,OAAOwJ,EAAKpI,MAAMkT,GAAQtU,GAASA,EAAQ,GAAI0J,GAEjD,OAAO1I,KAAKokC,IAAW,SAASplC,GAC9B,OAAOwJ,EAAKpI,MAAMkT,GAAQtU,GAASA,EAAQ,GAAI0J,UAMrDgS,GAAWnH,GAAY7U,WAAW,SAAS8J,EAAMwf,GAC/C,IAAI6b,EAAazwB,GAAO4U,GACxB,GAAI6b,EAAY,CACd,IAAIvlC,EAAMulC,EAAW7lB,KAAO,GACvBnP,GAAetP,KAAKkT,GAAWnU,KAClCmU,GAAUnU,GAAO,IAEnBmU,GAAUnU,GAAKuX,KAAK,CAAE,KAAQmS,EAAY,KAAQ6b,QAItDpxB,GAAU6W,QAlphBRpe,EAgCqB,GAknhB+B8S,MAAQ,CAAC,CAC7D,KAAQ,UACR,UApphBA9S,IAwphBFqI,GAAY7U,UAAUswB,MAz5dtB,WACE,IAAIrvB,EAAS,IAAI4T,GAAYvT,KAAK+T,aAOlC,OANApU,EAAOqU,YAAckC,GAAUlW,KAAKgU,aACpCrU,EAAOyU,QAAUpU,KAAKoU,QACtBzU,EAAO0U,aAAerU,KAAKqU,aAC3B1U,EAAO2U,cAAgB4B,GAAUlW,KAAKsU,eACtC3U,EAAO4U,cAAgBvU,KAAKuU,cAC5B5U,EAAO6U,UAAY0B,GAAUlW,KAAKwU,WAC3B7U,GAk5dT4T,GAAY7U,UAAUuT,QAv4dtB,WACE,GAAIjS,KAAKqU,aAAc,CACrB,IAAI1U,EAAS,IAAI4T,GAAYvT,MAC7BL,EAAOyU,SAAW,EAClBzU,EAAO0U,cAAe,OAEtB1U,EAASK,KAAKgvB,SACP5a,UAAY,EAErB,OAAOzU,GA+3dT4T,GAAY7U,UAAUM,MAp3dtB,WACE,IAAI4J,EAAQ5I,KAAK+T,YAAY/U,QACzBqlC,EAAMrkC,KAAKoU,QACXkB,EAAQhC,GAAQ1K,GAChB07B,EAAUD,EAAM,EAChBvX,EAAYxX,EAAQ1M,EAAM7K,OAAS,EACnCwmC,EAwoIN,SAAiB1hB,EAAOW,EAAKgQ,GAC3B,IAAIxqB,GAAS,EACTjL,EAASy1B,EAAWz1B,OAExB,OAASiL,EAAQjL,GAAQ,CACvB,IAAIoX,EAAOqe,EAAWxqB,GAClB4D,EAAOuI,EAAKvI,KAEhB,OAAQuI,EAAK+X,MACX,IAAK,OAAarK,GAASjW,EAAM,MACjC,IAAK,YAAa4W,GAAO5W,EAAM,MAC/B,IAAK,OAAa4W,EAAM9R,GAAU8R,EAAKX,EAAQjW,GAAO,MACtD,IAAK,YAAaiW,EAAQrR,GAAUqR,EAAOW,EAAM5W,IAGrD,MAAO,CAAE,MAASiW,EAAO,IAAOW,GAvpIrBghB,CAAQ,EAAG1X,EAAW9sB,KAAKwU,WAClCqO,EAAQ0hB,EAAK1hB,MACbW,EAAM+gB,EAAK/gB,IACXzlB,EAASylB,EAAMX,EACf7Z,EAAQs7B,EAAU9gB,EAAOX,EAAQ,EACjCvB,EAAYthB,KAAKsU,cACjBmwB,EAAanjB,EAAUvjB,OACvBuL,EAAW,EACXo7B,EAAYhzB,GAAU3T,EAAQiC,KAAKuU,eAEvC,IAAKe,IAAWgvB,GAAWxX,GAAa/uB,GAAU2mC,GAAa3mC,EAC7D,OAAOqnB,GAAiBxc,EAAO5I,KAAKgU,aAEtC,IAAIrU,EAAS,GAEbsa,EACA,KAAOlc,KAAYuL,EAAWo7B,GAAW,CAMvC,IAHA,IAAIC,GAAa,EACb3lC,EAAQ4J,EAHZI,GAASq7B,KAKAM,EAAYF,GAAY,CAC/B,IAAItvB,EAAOmM,EAAUqjB,GACjB77B,EAAWqM,EAAKrM,SAChBokB,EAAO/X,EAAK+X,KACZhT,EAAWpR,EAAS9J,GAExB,GApxDY,GAoxDRkuB,EACFluB,EAAQkb,OACH,IAAKA,EAAU,CACpB,GAxxDa,GAwxDTgT,EACF,SAASjT,EAET,MAAMA,GAIZta,EAAO2J,KAActK,EAEvB,OAAOW,GAy0dTyT,GAAO1U,UAAUs2B,GAAKpE,GACtBxd,GAAO1U,UAAUgyB,MAzgQjB,WACE,OAAOA,GAAM1wB,OAygQfoT,GAAO1U,UAAUkmC,OA5+PjB,WACE,OAAO,IAAIpxB,GAAcxT,KAAKhB,QAASgB,KAAKiU,YA4+P9Cb,GAAO1U,UAAU41B,KAn9PjB,gBA7sREppB,IA8sRIlL,KAAKmU,aACPnU,KAAKmU,WAAakgB,GAAQr0B,KAAKhB,UAEjC,IAAIu1B,EAAOv0B,KAAKkU,WAAalU,KAAKmU,WAAWpW,OAG7C,MAAO,CAAE,KAAQw2B,EAAM,MAFXA,OAltRZrpB,EAktR+BlL,KAAKmU,WAAWnU,KAAKkU,eA+8PtDd,GAAO1U,UAAU2qB,MA55PjB,SAAsBrqB,GAIpB,IAHA,IAAIW,EACAwd,EAASnd,KAENmd,aAAkBtJ,IAAY,CACnC,IAAImb,EAAQvb,GAAa0J,GACzB6R,EAAM9a,UAAY,EAClB8a,EAAM7a,gBA5wRRjJ,EA6wRMvL,EACF8iB,EAAS1O,YAAcib,EAEvBrvB,EAASqvB,EAEX,IAAIvM,EAAWuM,EACf7R,EAASA,EAAOpJ,YAGlB,OADA0O,EAAS1O,YAAc/U,EAChBW,GA44PTyT,GAAO1U,UAAUuT,QAr3PjB,WACE,IAAIjT,EAAQgB,KAAK+T,YACjB,GAAI/U,aAAiBuU,GAAa,CAChC,IAAIsxB,EAAU7lC,EAUd,OATIgB,KAAKgU,YAAYjW,SACnB8mC,EAAU,IAAItxB,GAAYvT,QAE5B6kC,EAAUA,EAAQ5yB,WACV+B,YAAY6B,KAAK,CACvB,KAAQkT,GACR,KAAQ,CAAC9W,IACT,aAxzRJ/G,IA0zRS,IAAIsI,GAAcqxB,EAAS7kC,KAAKiU,WAEzC,OAAOjU,KAAK+oB,KAAK9W,KAu2PnBmB,GAAO1U,UAAUomC,OAAS1xB,GAAO1U,UAAUwU,QAAUE,GAAO1U,UAAUM,MAt1PtE,WACE,OAAOomB,GAAiBplB,KAAK+T,YAAa/T,KAAKgU,cAw1PjDZ,GAAO1U,UAAU4kC,MAAQlwB,GAAO1U,UAAU4wB,KAEtCpf,KACFkD,GAAO1U,UAAUwR,IAh8PnB,WACE,OAAOlQ,OAi8PFoT,GAMDrF,GAQNlH,GAAKiH,EAAIA,QAzrhBP5C,KA6rhBF65B,aACE,OAAOj3B,IADH,gCAeRvO,KAAKS,Q,8GCvthBP,aACA,SACI,EAAJ,OAEM,EAAiB,OAAO,UA8C9B,SAAgB,EAAmB,EAAc,EAAe,sBAC5D,IAAI,EAAQ,EACZ,OAAO,EAAK,QAAQ,GAAO,SAAC,GAExB,OAAc,MADd,EAEW,EAEA,KAKnB,SAAgB,EAAQ,EAAa,GAC/B,QAAS,GAAP,EAAkB,MAAO,GAC3B,IAAI,EAAK,IAAI,OAAO,qBAAwB,IAAU,GAAK,OACvD,EAAQ,EAAI,WAAW,MAAM,GACnC,OAAI,EACO,EAAM,GAEV,QAhEgB,IAAvBtB,EAAU,WACVA,EAAUsmC,SAAW,SAAU,GAC3B,OAAO,KAAK,QAAQ,IAAQ,SAGP,IAAzB,EAAU,aACVtmC,EAAUwiC,WAAa,SAAU,GAC7B,OAAgC,IAAzB,KAAK,QAAQ,UAGD,IAAvB,EAAU,WACVxiC,EAAU++B,SAAW,SAAU,GAC3B,OAAO,KAAK,QAAQ,EAAQ,KAAK,OAAS,EAAO,SAAW,IAIpE,iCAAsC,GAClC,OAAKwH,GAGDA,IACAA,EAASA,EAAOz1B,QAAQ,MAAO,KAE/By1B,EAAO/D,WAAW,MAClB+D,EAASA,EAAOlC,UAAU,GACnB,EAAO,WAAW,KACzB,EAAS,EAAO,UAAU,GACnB,EAAO,WAAW,OACzB,EAAS,MAAQ,EAAO,UAAU,IAE/B,GAZIkC,GAef,+BAAoC,GAChC,OAAK,KACD,QAAQ,KAAK,IAIrB,0BAA+B,GAC3B,QAAK,GACa,sFACD,KAAK,IAG1B,uBAYA,YAUA,0BAA+B,EAAY,GACvC,QADuC,kBAC1B,GAAT,EAAJ,CACA,IACI,EADA,GAAQ,EAES,kBAAV,GACP,EAAQ,EAAQ,EAChB,EAAQ,IAAI,UAAU,GAAO,WAE7B,GAAS,EAAQ,IAAI,WAAW,KAGlC,EAAM,EADR,GAAS,EAAQ,IAAI,QAAQ,UAAW,IACN,OAClC,IAAM,EAAc,IAAI,UAAU,GAClC,IAAI,EAAY,QAAhB,CACA,IAAM,EAAK,EAAY,UACjB,EAAU,EAAG,QAAQ,KACrB,EAAQ,EAAM,QAAQ,KAC5B,IAAe,IAAX,EACA,OAAQ,EAAQ,IAAK,EAAG,WAAgB,EAAG,YAAc,GAEzD,GAAI,IAAW,EAAM,OAAS,GAAM,EAAc,EAC9C,OAAO,EAAK,IAEZ,IAAiB,IAAb,GAAkB,EAAc,EAAG,CACnC,IAAM,EAAM,EAAM,OAAO,EAAQ,GAAG,QAAQ,MAAO,IACnD,OAAI,EAAI,SAAS,KACN,EAAK,IAAM,EAAI,OAAO,EAAG,GAE7B,EAAK,IAGhB,OADe,EAAG,OAAS,EAAU,EACxB,EACF,EAEA,EAAQ,EAAI,MAQnC,oBAA4B,GAEtB,OADQ,IAAI,UAAM,GACX,MAAM,IAGnB,oBAA4B,GAEtB,OADQ,IAAI,UAAM,GACX,MAAM,IAGnB,IAAM,EAAiC,CACnC,IAAK,SAAC,EAAK,EAAM,GAAU,YAAQ,EAC/B,EAAW,cAAc,EAAI,IADN,IAGzB,EAA6C,CAC/C,IAAK,SAAC,EAAK,EAAM,GAAU,YAAQ,EAAM,EAAI,GAAlB,K,kFCjI/B,aAEa,aAAa,CACtB,GAAI,CAAE,KAAM,KAAM,aAAc,aAAc,SAAU,UACxD,GAAI,CAAE,KAAM,KAAM,cAAe,cAAe,SAAU,WAE9D,IAAM,EAAW,CAAE,KAAM,MAWzB,SAAgB,EAAU,EAAmC,GACvD,GAAG,EAAU,CACP,GAAoB,kBAAZ,EAAuB,OAAO,EAEtC,IAAM,EAAM,EACR,EAAkB,MAAZ,EAAmB,UAAI,SAAW,EACxC,EAAU,aAAW,GACT,MAAX,IACD,EAAM,KACN,EAAU,aAAW,IAGnB,IADA,MAAe,EAAS,QAAO,YAAK,gBACzB,uBAAU,CAArB,IAAM,EAAC,KACD,GAAH,EAAI,eAAe,GAEpB,QAAc,IADR,EAAQ,EAAI,IACQ,OAAO,EAGzC,IAAiB,2BAAX,CAAM,EAAC,KAET,IAFE,IAEgB,MADlB,EAAU,aAAW,GACH,eAAU,CAAtB,IAEQ,EAFF,EAAE,KACV,GAAK,EAAI,eAAe,GAEpB,QAAc,IADR,EAAQ,EAAI,IACQ,OAAO,IAMrD,OAAO,KAjCX,yBAA8B,EAAS,GACjC,OAAK,EAAO,EAAI,IAGtB,Y,kFCjBA,aACA,OACA,OAEA,aAEA,SAAgB,EAAW,EAAY,EAAgB,GACnD,OAAIC,EACOC,EAAOC,GAAMC,OAAOH,GAAaI,OAAOA,GAE5CH,EAAOC,GAAMC,OAAOE,EAAMC,QAAF,UAAU,OAAO,GAGpD,SAAgB,EAAU,EAAoB,EAAgB,GAC1D,OAAIN,EACOC,EAAOM,EAAYH,EAAQJ,GAAaQ,SAExC,EAAO,EAAY,EAAQ,UAAI,UAAU,SAXxD,eAOA,cAQA1+B,EAAQ,aAAR,SAA6B,GACzB,OAAO,EAAWo+B,EAAM,+BAAgC,OAI5D,4BAAiC,GAC7B,GAAIK,EAAY,CACZ,IAAIH,EAAS,+BAIb,OAH0B,KAAtBG,EAAW1nC,SACXunC,EAAS,uBAENK,EAAUF,EAAYH,EAAQ,QAK7C,+BAAoC,GAChC,GAAIF,EACA,OAAOQ,EAAWR,EAAM,sBAAuB,OAMvD,yBAA8B,GAC1B,IAAM,EAAI,IAAI,KAAK,EAAK,WAExB,OADA,EAAE,SAAS,EAAG,EAAG,EAAG,GACb,I,iCChDI,SAASS,EAAuBvmC,GAC7C,QAAa,IAATA,EACF,MAAM,IAAIwmC,eAAe,6DAG3B,OAAOxmC,EALT,mC,kBCAA6H,EAAOH,QAAU,SAASG,GAoBzB,OAnBKA,EAAO4+B,kBACX5+B,EAAO6+B,UAAY,aACnB7+B,EAAO6P,MAAQ,GAEV7P,EAAO8+B,WAAU9+B,EAAO8+B,SAAW,IACxC7nC,OAAOC,eAAe8I,EAAQ,SAAU,CACvClJ,YAAY,EACZiZ,IAAK,WACJ,OAAO/P,EAAO++B,KAGhB9nC,OAAOC,eAAe8I,EAAQ,KAAM,CACnClJ,YAAY,EACZiZ,IAAK,WACJ,OAAO/P,EAAOrJ,KAGhBqJ,EAAO4+B,gBAAkB,GAEnB5+B,I,iCCpBO,SAASg/B,EAAgBC,EAAGC,GAMzC,OALAF,EAAkB/nC,OAAOkoC,gBAAkB,SAAyBF,EAAGC,GAErE,OADAD,EAAEG,UAAYF,EACPD,IAGcA,EAAGC,GAN5B,mC,oBCAA,OAAC,SAAWG,GACV,aAkDA,IAAIC,EACFC,EAAY,6CACZC,EAAWt4B,KAAKwC,KAChB+1B,EAAYv4B,KAAK0C,MAEjB81B,EAAiB,qBACjBC,EAAgBD,EAAiB,yDAEjCE,EAAO,KAIPC,EAAW,CAAC,EAAG,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,MAM7EC,EAAM,IAioFR,SAASC,EAAS37B,GAChB,IAAIzN,EAAQ,EAAJyN,EACR,OAAOA,EAAI,GAAKA,IAAMzN,EAAIA,EAAIA,EAAI,EAKpC,SAASqpC,EAAcC,GAMrB,IALA,IAAIC,EAAGC,EACLxpC,EAAI,EACJypC,EAAIH,EAAErpC,OACNypC,EAAIJ,EAAE,GAAK,GAENtpC,EAAIypC,GAAI,CAGb,IADAD,EAzpFS,IAwpFTD,EAAID,EAAEtpC,KAAO,IACIC,OACVupC,IAAKD,EAAI,IAAMA,GACtBG,GAAKH,EAIP,IAAKE,EAAIC,EAAEzpC,OAA8B,KAAtBypC,EAAE3Y,aAAa0Y,KAElC,OAAOC,EAAEvhB,MAAM,EAAGshB,EAAI,GAAK,GAK7B,SAASE,EAAQC,EAAGC,GAClB,IAAIP,EAAGQ,EACLC,EAAKH,EAAEI,EACPC,EAAKJ,EAAEG,EACPhqC,EAAI4pC,EAAEL,EACNE,EAAII,EAAEN,EACNW,EAAIN,EAAE//B,EACNu+B,EAAIyB,EAAEhgC,EAGR,IAAK7J,IAAMypC,EAAG,OAAO,KAMrB,GAJAH,EAAIS,IAAOA,EAAG,GACdD,EAAIG,IAAOA,EAAG,GAGVX,GAAKQ,EAAG,OAAOR,EAAIQ,EAAI,GAAKL,EAAIzpC,EAGpC,GAAIA,GAAKypC,EAAG,OAAOzpC,EAMnB,GAJAspC,EAAItpC,EAAI,EACR8pC,EAAII,GAAK9B,GAGJ2B,IAAOE,EAAI,OAAOH,EAAI,GAAKC,EAAKT,EAAI,GAAK,EAG9C,IAAKQ,EAAG,OAAOI,EAAI9B,EAAIkB,EAAI,GAAK,EAKhC,IAHAG,GAAKS,EAAIH,EAAG9pC,SAAWmoC,EAAI6B,EAAGhqC,QAAUiqC,EAAI9B,EAGvCpoC,EAAI,EAAGA,EAAIypC,EAAGzpC,IAAK,GAAI+pC,EAAG/pC,IAAMiqC,EAAGjqC,GAAI,OAAO+pC,EAAG/pC,GAAKiqC,EAAGjqC,GAAKspC,EAAI,GAAK,EAG5E,OAAOY,GAAK9B,EAAI,EAAI8B,EAAI9B,EAAIkB,EAAI,GAAK,EAOvC,SAASa,EAAS18B,EAAGoG,EAAKF,EAAKuM,GAC7B,GAAIzS,EAAIoG,GAAOpG,EAAIkG,GAAOlG,IAAMq7B,EAAUr7B,GACxC,MAAM6C,MACJy4B,GAAkB7oB,GAAQ,aAA2B,iBAALzS,EAC7CA,EAAIoG,GAAOpG,EAAIkG,EAAM,kBAAoB,oBACzC,6BAA+BnD,OAAO/C,IAM/C,SAAS28B,EAAM38B,GACb,IAAIy8B,EAAIz8B,EAAEu8B,EAAE/pC,OAAS,EACrB,OAAOmpC,EAAS37B,EAAE5D,EA9tFP,KA8tFwBqgC,GAAKz8B,EAAEu8B,EAAEE,GAAK,GAAK,EAIxD,SAASG,EAAcC,EAAKzgC,GAC1B,OAAQygC,EAAIrqC,OAAS,EAAIqqC,EAAIngB,OAAO,GAAK,IAAMmgB,EAAIniB,MAAM,GAAKmiB,IAC5DzgC,EAAI,EAAI,IAAM,MAAQA,EAI1B,SAAS0gC,EAAaD,EAAKzgC,EAAG2/B,GAC5B,IAAIgB,EAAKC,EAGT,GAAI5gC,EAAI,EAAG,CAGT,IAAK4gC,EAAKjB,EAAI,MAAO3/B,EAAG4gC,GAAMjB,GAC9Bc,EAAMG,EAAKH,OAOX,KAAMzgC,GAHN2gC,EAAMF,EAAIrqC,QAGK,CACb,IAAKwqC,EAAKjB,EAAG3/B,GAAK2gC,IAAO3gC,EAAG4gC,GAAMjB,GAClCc,GAAOG,OACE5gC,EAAI2gC,IACbF,EAAMA,EAAIniB,MAAM,EAAGte,GAAK,IAAMygC,EAAIniB,MAAMte,IAI5C,OAAOygC,GAOT3B,EAvvFA,SAASzX,EAAMwZ,GACb,IAAIC,EAAKC,EAAaC,EACpBC,EAAInC,EAAU/nC,UAAY,CAAEK,YAAa0nC,EAAW73B,SAAU,KAAMsE,QAAS,MAC7E21B,EAAM,IAAIpC,EAAU,GAUpBqC,EAAiB,GAajBC,EAAgB,EAMhBC,GAAc,EAIdC,EAAa,GAMbC,GAAW,IAKXC,EAAU,IAGVC,GAAS,EAkBTC,EAAc,EAIdC,EAAgB,EAGhBC,EAAS,CACPpG,OAAQ,GACRqG,UAAW,EACXC,mBAAoB,EACpBC,eAAgB,IAChBC,iBAAkB,IAClBC,kBAAmB,EACnBC,uBAAwB,OACxBC,OAAQ,IAMVC,EAAW,uCAgBb,SAAStD,EAAUuD,EAAGpC,GACpB,IAAIqC,EAAUnC,EAAGoC,EAAaviC,EAAG7J,EAAGqsC,EAAO7B,EAAKF,EAC9CV,EAAI1nC,KAGN,KAAM0nC,aAAajB,GAAY,OAAO,IAAIA,EAAUuD,EAAGpC,GAEvD,GAAS,MAALA,EAAW,CAEb,GAAIoC,IAAwB,IAAnBA,EAAEI,aAYT,OAXA1C,EAAEL,EAAI2C,EAAE3C,QAEH2C,EAAElC,GAAKkC,EAAEriC,EAAIwhC,EAChBzB,EAAEI,EAAIJ,EAAE//B,EAAI,KACHqiC,EAAEriC,EAAIuhC,EACfxB,EAAEI,EAAI,CAACJ,EAAE//B,EAAI,IAEb+/B,EAAE//B,EAAIqiC,EAAEriC,EACR+/B,EAAEI,EAAIkC,EAAElC,EAAE7hB,UAMd,IAAKkkB,EAAoB,iBAALH,IAAsB,EAAJA,GAAS,EAAG,CAMhD,GAHAtC,EAAEL,EAAI,EAAI2C,EAAI,GAAKA,GAAKA,GAAI,GAAK,EAG7BA,MAAQA,EAAG,CACb,IAAKriC,EAAI,EAAG7J,EAAIksC,EAAGlsC,GAAK,GAAIA,GAAK,GAAI6J,KASrC,YAPIA,EAAIwhC,EACNzB,EAAEI,EAAIJ,EAAE//B,EAAI,MAEZ+/B,EAAE//B,EAAIA,EACN+/B,EAAEI,EAAI,CAACkC,KAMX5B,EAAM95B,OAAO07B,OACR,CAEL,IAAKtD,EAAUj6B,KAAK27B,EAAM95B,OAAO07B,IAAK,OAAOrB,EAAajB,EAAGU,EAAK+B,GAElEzC,EAAEL,EAAyB,IAArBe,EAAIvZ,WAAW,IAAYuZ,EAAMA,EAAIniB,MAAM,IAAK,GAAK,GAIxDte,EAAIygC,EAAI9lB,QAAQ,OAAS,IAAG8lB,EAAMA,EAAI54B,QAAQ,IAAK,MAGnD1R,EAAIsqC,EAAItF,OAAO,OAAS,GAGvBn7B,EAAI,IAAGA,EAAI7J,GACf6J,IAAMygC,EAAIniB,MAAMnoB,EAAI,GACpBsqC,EAAMA,EAAIrF,UAAU,EAAGjlC,IACd6J,EAAI,IAGbA,EAAIygC,EAAIrqC,YAGL,CAOL,GAJAkqC,EAASL,EAAG,EAAGmC,EAAShsC,OAAQ,QAIvB,IAAL6pC,EAEF,OAAOtP,EADPoP,EAAI,IAAIjB,EAAUuD,GACFlB,EAAiBpB,EAAE//B,EAAI,EAAGohC,GAK5C,GAFAX,EAAM95B,OAAO07B,GAETG,EAAoB,iBAALH,EAAe,CAGhC,GAAQ,EAAJA,GAAS,EAAG,OAAOrB,EAAajB,EAAGU,EAAK+B,EAAOvC,GAKnD,GAHAF,EAAEL,EAAI,EAAI2C,EAAI,GAAK5B,EAAMA,EAAIniB,MAAM,IAAK,GAAK,EAGzCwgB,EAAU4D,OAASjC,EAAI54B,QAAQ,YAAa,IAAIzR,OAAS,GAC3D,MAAMqQ,MACJ04B,EAAgBkD,QAGpBtC,EAAEL,EAA0B,KAAtBe,EAAIvZ,WAAW,IAAauZ,EAAMA,EAAIniB,MAAM,IAAK,GAAK,EAQ9D,IALAgkB,EAAWF,EAAS9jB,MAAM,EAAG2hB,GAC7BjgC,EAAI7J,EAAI,EAIHwqC,EAAMF,EAAIrqC,OAAQD,EAAIwqC,EAAKxqC,IAC9B,GAAImsC,EAAS3nB,QAAQwlB,EAAIM,EAAIngB,OAAOnqB,IAAM,EAAG,CAC3C,GAAS,KAALgqC,GAGF,GAAIhqC,EAAI6J,EAAG,CACTA,EAAI2gC,EACJ,eAEG,IAAK4B,IAGN9B,GAAOA,EAAIzR,gBAAkByR,EAAMA,EAAIlS,gBACvCkS,GAAOA,EAAIlS,gBAAkBkS,EAAMA,EAAIzR,gBAAgB,CACzDuT,GAAc,EACdpsC,GAAK,EACL6J,EAAI,EACJ,SAIJ,OAAOghC,EAAajB,EAAGp5B,OAAO07B,GAAIG,EAAOvC,GAK7CuC,GAAQ,GAIHxiC,GAHLygC,EAAMM,EAAYN,EAAKR,EAAG,GAAIF,EAAEL,IAGnB/kB,QAAQ,OAAS,EAAG8lB,EAAMA,EAAI54B,QAAQ,IAAK,IACnD7H,EAAIygC,EAAIrqC,OAIf,IAAKD,EAAI,EAAyB,KAAtBsqC,EAAIvZ,WAAW/wB,GAAWA,KAGtC,IAAKwqC,EAAMF,EAAIrqC,OAAkC,KAA1BqqC,EAAIvZ,aAAayZ,KAExC,GAAIF,EAAMA,EAAIniB,MAAMnoB,IAAKwqC,GAAM,CAI7B,GAHAA,GAAOxqC,EAGHqsC,GAAS1D,EAAU4D,OACrB/B,EAAM,KAAO0B,EA1QA,kBA0QwBA,IAAMpD,EAAUoD,IACnD,MAAM57B,MACJ04B,EAAiBY,EAAEL,EAAI2C,GAI7B,IAAKriC,EAAIA,EAAI7J,EAAI,GAAKqrC,EAGpBzB,EAAEI,EAAIJ,EAAE//B,EAAI,UAGP,GAAIA,EAAIuhC,EAGbxB,EAAEI,EAAI,CAACJ,EAAE//B,EAAI,OACR,CAWL,GAVA+/B,EAAE//B,EAAIA,EACN+/B,EAAEI,EAAI,GAMNhqC,GAAK6J,EAAI,GAnSJ,GAoSDA,EAAI,IAAG7J,GApSN,IAsSDA,EAAIwqC,EAAK,CAGX,IAFIxqC,GAAG4pC,EAAEI,EAAEjyB,MAAMuyB,EAAIniB,MAAM,EAAGnoB,IAEzBwqC,GAzSF,GAySmBxqC,EAAIwqC,GACxBZ,EAAEI,EAAEjyB,MAAMuyB,EAAIniB,MAAMnoB,EAAGA,GA1StB,KA6SHA,EA7SG,IA6SasqC,EAAMA,EAAIniB,MAAMnoB,IAAIC,YAEpCD,GAAKwqC,EAGP,KAAOxqC,IAAKsqC,GAAO,KACnBV,EAAEI,EAAEjyB,MAAMuyB,SAKZV,EAAEI,EAAI,CAACJ,EAAE//B,EAAI,GA41BjB,SAAS29B,EAAO/5B,EAAGzN,EAAGwsC,EAAItkB,GACxB,IAAIukB,EAAI5iC,EAAG6iC,EAAIlC,EAAKF,EAKpB,GAHU,MAANkC,EAAYA,EAAKvB,EAChBd,EAASqC,EAAI,EAAG,IAEhB/+B,EAAEu8B,EAAG,OAAOv8B,EAAEqD,WAKnB,GAHA27B,EAAKh/B,EAAEu8B,EAAE,GACT0C,EAAKj/B,EAAE5D,EAEE,MAAL7J,EACFsqC,EAAMjB,EAAc57B,EAAEu8B,GACtBM,EAAY,GAANpiB,GAAiB,GAANA,IAAYwkB,GAAMxB,GAAcwB,GAAMvB,GACpDd,EAAcC,EAAKoC,GACnBnC,EAAaD,EAAKoC,EAAI,UAezB,GAVA7iC,GAHA4D,EAAI+sB,EAAM,IAAImO,EAAUl7B,GAAIzN,EAAGwsC,IAGzB3iC,EAGN2gC,GADAF,EAAMjB,EAAc57B,EAAEu8B,IACZ/pC,OAOA,GAANioB,GAAiB,GAANA,IAAYloB,GAAK6J,GAAKA,GAAKqhC,GAAa,CAGrD,KAAOV,EAAMxqC,EAAGsqC,GAAO,IAAKE,KAC5BF,EAAMD,EAAcC,EAAKzgC,QAQzB,GAJA7J,GAAK0sC,EACLpC,EAAMC,EAAaD,EAAKzgC,EAAG,KAGvBA,EAAI,EAAI2gC,GACV,KAAMxqC,EAAI,EAAG,IAAKsqC,GAAO,IAAKtqC,IAAKsqC,GAAO,WAG1C,IADAtqC,GAAK6J,EAAI2gC,GACD,EAEN,IADI3gC,EAAI,GAAK2gC,IAAKF,GAAO,KAClBtqC,IAAKsqC,GAAO,KAM3B,OAAO78B,EAAE87B,EAAI,GAAKkD,EAAK,IAAMnC,EAAMA,EAKrC,SAASqC,EAAS/hC,EAAM2uB,GAKtB,IAJA,IAAI9rB,EACFzN,EAAI,EACJ4sC,EAAI,IAAIjE,EAAU/9B,EAAK,IAElB5K,EAAI4K,EAAK3K,OAAQD,IAAK,CAI3B,KAHAyN,EAAI,IAAIk7B,EAAU/9B,EAAK5K,KAGhBupC,EAAG,CACRqD,EAAIn/B,EACJ,MACS8rB,EAAO93B,KAAKmrC,EAAGn/B,KACxBm/B,EAAIn/B,GAIR,OAAOm/B,EAQT,SAASC,EAAUp/B,EAAGu8B,EAAGngC,GAKvB,IAJA,IAAI7J,EAAI,EACNypC,EAAIO,EAAE/pC,QAGA+pC,IAAIP,GAAIO,EAAEztB,OAGlB,IAAKktB,EAAIO,EAAE,GAAIP,GAAK,GAAIA,GAAK,GAAIzpC,KAkBjC,OAfK6J,EAAI7J,EAnvCA,GAmvCI6J,EAAe,GAAKwhC,EAG/B59B,EAAEu8B,EAAIv8B,EAAE5D,EAAI,KAGHA,EAAIuhC,EAGb39B,EAAEu8B,EAAI,CAACv8B,EAAE5D,EAAI,IAEb4D,EAAE5D,EAAIA,EACN4D,EAAEu8B,EAAIA,GAGDv8B,EA0DT,SAAS+sB,EAAMoP,EAAGkD,EAAIN,EAAI9C,GACxB,IAAIqD,EAAG/sC,EAAGypC,EAAGS,EAAGz8B,EAAGu/B,EAAIC,EACrBlD,EAAKH,EAAEI,EACPkD,EAAShE,EAGX,GAAIa,EAAI,CAQNoD,EAAK,CAGH,IAAKJ,EAAI,EAAG7C,EAAIH,EAAG,GAAIG,GAAK,GAAIA,GAAK,GAAI6C,KAIzC,IAHA/sC,EAAI8sC,EAAKC,GAGD,EACN/sC,GAl1CG,GAm1CHypC,EAAIqD,EAIJG,GAHAx/B,EAAIs8B,EAAGiD,EAAK,IAGHE,EAAOH,EAAItD,EAAI,GAAK,GAAK,OAIlC,IAFAuD,EAAKnE,GAAU7oC,EAAI,GAz1ChB,MA21CO+pC,EAAG9pC,OAAQ,CAEnB,IAAIypC,EASF,MAAMyD,EANN,KAAOpD,EAAG9pC,QAAU+sC,EAAIjD,EAAGhyB,KAAK,IAChCtK,EAAIw/B,EAAK,EACTF,EAAI,EAEJtD,GADAzpC,GAn2CD,OAo2CoB,MAIhB,CAIL,IAHAyN,EAAIy8B,EAAIH,EAAGiD,GAGND,EAAI,EAAG7C,GAAK,GAAIA,GAAK,GAAI6C,KAU9BE,GAHAxD,GAJAzpC,GA/2CC,OAm3CkB+sC,GAGV,EAAI,EAAIt/B,EAAIy/B,EAAOH,EAAItD,EAAI,GAAK,GAAK,EAmBlD,GAfAC,EAAIA,GAAKoD,EAAK,GAKC,MAAd/C,EAAGiD,EAAK,KAAevD,EAAI,EAAIh8B,EAAIA,EAAIy/B,EAAOH,EAAItD,EAAI,IAEvDC,EAAI8C,EAAK,GACLS,GAAMvD,KAAa,GAAN8C,GAAWA,IAAO5C,EAAEL,EAAI,EAAI,EAAI,IAC9C0D,EAAK,GAAW,GAANA,IAAkB,GAANT,GAAW9C,GAAW,GAAN8C,IAGrCxsC,EAAI,EAAIypC,EAAI,EAAIh8B,EAAIy/B,EAAOH,EAAItD,GAAK,EAAIM,EAAGiD,EAAK,IAAM,GAAM,GAC7DR,IAAO5C,EAAEL,EAAI,EAAI,EAAI,IAEpBuD,EAAK,IAAM/C,EAAG,GAiBhB,OAhBAA,EAAG9pC,OAAS,EAERypC,GAGFoD,GAAMlD,EAAE//B,EAAI,EAGZkgC,EAAG,GAAKmD,GAl5CP,GAk5C0BJ,EAl5C1B,QAm5CDlD,EAAE//B,GAAKijC,GAAM,GAIb/C,EAAG,GAAKH,EAAE//B,EAAI,EAGT+/B,EAkBT,GAdS,GAAL5pC,GACF+pC,EAAG9pC,OAAS+sC,EACZ9C,EAAI,EACJ8C,MAEAjD,EAAG9pC,OAAS+sC,EAAK,EACjB9C,EAAIgD,EAp6CD,GAo6CmBltC,GAItB+pC,EAAGiD,GAAMvD,EAAI,EAAIX,EAAUr7B,EAAIy/B,EAAOH,EAAItD,GAAKyD,EAAOzD,IAAMS,EAAI,GAI9DR,EAEF,OAAU,CAGR,GAAU,GAANsD,EAAS,CAGX,IAAKhtC,EAAI,EAAGypC,EAAIM,EAAG,GAAIN,GAAK,GAAIA,GAAK,GAAIzpC,KAEzC,IADAypC,EAAIM,EAAG,IAAMG,EACRA,EAAI,EAAGT,GAAK,GAAIA,GAAK,GAAIS,KAG1BlqC,GAAKkqC,IACPN,EAAE//B,IACEkgC,EAAG,IAAMd,IAAMc,EAAG,GAAK,IAG7B,MAGA,GADAA,EAAGiD,IAAO9C,EACNH,EAAGiD,IAAO/D,EAAM,MACpBc,EAAGiD,KAAQ,EACX9C,EAAI,EAMV,IAAKlqC,EAAI+pC,EAAG9pC,OAAoB,IAAZ8pC,IAAK/pC,GAAU+pC,EAAGxtB,QAIpCqtB,EAAE//B,EAAIwhC,EACRzB,EAAEI,EAAIJ,EAAE//B,EAAI,KAGH+/B,EAAE//B,EAAIuhC,IACfxB,EAAEI,EAAI,CAACJ,EAAE//B,EAAI,IAIjB,OAAO+/B,EAIT,SAASx0B,EAAQ3H,GACf,IAAI68B,EACFzgC,EAAI4D,EAAE5D,EAER,OAAU,OAANA,EAAmB4D,EAAEqD,YAEzBw5B,EAAMjB,EAAc57B,EAAEu8B,GAEtBM,EAAMzgC,GAAKqhC,GAAcrhC,GAAKshC,EAC1Bd,EAAcC,EAAKzgC,GACnB0gC,EAAaD,EAAKzgC,EAAG,KAElB4D,EAAE87B,EAAI,EAAI,IAAMe,EAAMA,GA0pC/B,OAh0EA3B,EAAUzX,MAAQA,EAElByX,EAAUyE,SAAW,EACrBzE,EAAU0E,WAAa,EACvB1E,EAAU2E,WAAa,EACvB3E,EAAU4E,YAAc,EACxB5E,EAAU6E,cAAgB,EAC1B7E,EAAU8E,gBAAkB,EAC5B9E,EAAU+E,gBAAkB,EAC5B/E,EAAUgF,gBAAkB,EAC5BhF,EAAUiF,iBAAmB,EAC7BjF,EAAUkF,OAAS,EAqCnBlF,EAAUmF,OAASnF,EAAUt5B,IAAM,SAAUjO,GAC3C,IAAImnC,EAAG2D,EAEP,GAAW,MAAP9qC,EAAa,CAEf,GAAkB,iBAAPA,EA2HT,MAAMkP,MACJy4B,EAAiB,oBAAsB3nC,GAtFzC,GAlCIA,EAAI2P,eAAew3B,EAAI,oBAEzB4B,EADA+B,EAAI9qC,EAAImnC,GACI,EAAGY,EAAKZ,GACpByC,EAAiBkB,GAKf9qC,EAAI2P,eAAew3B,EAAI,mBAEzB4B,EADA+B,EAAI9qC,EAAImnC,GACI,EAAG,EAAGA,GAClB0C,EAAgBiB,GAOd9qC,EAAI2P,eAAew3B,EAAI,qBACzB2D,EAAI9qC,EAAImnC,KACC2D,EAAE3vB,KACT4tB,EAAS+B,EAAE,IAAK/C,EAAK,EAAGZ,GACxB4B,EAAS+B,EAAE,GAAI,EAAG/C,EAAKZ,GACvB2C,EAAagB,EAAE,GACff,EAAae,EAAE,KAEf/B,EAAS+B,GAAI/C,EAAKA,EAAKZ,GACvB2C,IAAeC,EAAae,EAAI,GAAKA,EAAIA,KAOzC9qC,EAAI2P,eAAew3B,EAAI,SAEzB,IADA2D,EAAI9qC,EAAImnC,KACC2D,EAAE3vB,IACT4tB,EAAS+B,EAAE,IAAK/C,GAAM,EAAGZ,GACzB4B,EAAS+B,EAAE,GAAI,EAAG/C,EAAKZ,GACvB6C,EAAUc,EAAE,GACZb,EAAUa,EAAE,OACP,CAEL,GADA/B,EAAS+B,GAAI/C,EAAKA,EAAKZ,IACnB2D,EAGF,MAAM57B,MACJy4B,EAAiBR,EAAI,oBAAsB2D,GAH7Cd,IAAYC,EAAUa,EAAI,GAAKA,EAAIA,GAWzC,GAAI9qC,EAAI2P,eAAew3B,EAAI,UAAW,CAEpC,IADA2D,EAAI9qC,EAAImnC,QACI2D,EAcV,MAAM57B,MACJy4B,EAAiBR,EAAI,uBAAyB2D,GAdhD,GAAIA,EAAG,CACL,GAAqB,oBAAV6B,SAAyBA,SAClCA,OAAOC,kBAAmBD,OAAOE,YAIjC,MADA3C,GAAUY,EACJ57B,MACJy4B,EAAiB,sBAJnBuC,EAASY,OAOXZ,EAASY,EA0Bf,GAhBI9qC,EAAI2P,eAAew3B,EAAI,iBAEzB4B,EADA+B,EAAI9qC,EAAImnC,GACI,EAAG,EAAGA,GAClBgD,EAAcW,GAKZ9qC,EAAI2P,eAAew3B,EAAI,mBAEzB4B,EADA+B,EAAI9qC,EAAImnC,GACI,EAAGY,EAAKZ,GACpBiD,EAAgBU,GAKd9qC,EAAI2P,eAAew3B,EAAI,UAAW,CAEpC,GAAgB,iBADhB2D,EAAI9qC,EAAImnC,IAEH,MAAMj4B,MACTy4B,EAAiBR,EAAI,mBAAqB2D,GAFlBT,EAASS,EAOrC,GAAI9qC,EAAI2P,eAAew3B,EAAI,YAAa,CAKtC,GAAgB,iBAJhB2D,EAAI9qC,EAAImnC,KAIqB,sBAAsB55B,KAAKu9B,GAGtD,MAAM57B,MACJy4B,EAAiBR,EAAI,aAAe2D,GAHtCD,EAAWC,GAenB,MAAO,CACLlB,eAAgBA,EAChBC,cAAeA,EACfiD,eAAgB,CAAChD,EAAYC,GAC7BgD,MAAO,CAAC/C,EAASC,GACjBC,OAAQA,EACRC,YAAaA,EACbC,cAAeA,EACfC,OAAQA,EACRQ,SAAUA,IAcdtD,EAAUyF,YAAc,SAAUlC,GAChC,IAAKA,IAAwB,IAAnBA,EAAEI,aAAuB,OAAO,EAC1C,IAAK3D,EAAU4D,MAAO,OAAO,EAE7B,IAAIvsC,EAAGyN,EACLu8B,EAAIkC,EAAElC,EACNngC,EAAIqiC,EAAEriC,EACN0/B,EAAI2C,EAAE3C,EAER4D,EAAK,GAA2B,kBAAvB,GAAGr8B,SAASrP,KAAKuoC,IAExB,IAAW,IAANT,IAAkB,IAAPA,IAAa1/B,IAAMs/B,GAAOt/B,GAAKs/B,GAAOt/B,IAAMi/B,EAAUj/B,GAAI,CAGxE,GAAa,IAATmgC,EAAE,GAAU,CACd,GAAU,IAANngC,GAAwB,IAAbmgC,EAAE/pC,OAAc,OAAO,EACtC,MAAMktC,EASR,IALAntC,GAAK6J,EAAI,GAhiBJ,IAiiBG,IAAG7J,GAjiBN,IAqiBDwQ,OAAOw5B,EAAE,IAAI/pC,QAAUD,EAAG,CAE5B,IAAKA,EAAI,EAAGA,EAAIgqC,EAAE/pC,OAAQD,IAExB,IADAyN,EAAIu8B,EAAEhqC,IACE,GAAKyN,GAAKw7B,GAAQx7B,IAAMq7B,EAAUr7B,GAAI,MAAM0/B,EAItD,GAAU,IAAN1/B,EAAS,OAAO,SAKnB,GAAU,OAANu8B,GAAoB,OAANngC,IAAqB,OAAN0/B,GAAoB,IAANA,IAAkB,IAAPA,GAC/D,OAAO,EAGT,MAAMj5B,MACHy4B,EAAiB,sBAAwBmD,IAS9CvD,EAAU0F,QAAU1F,EAAUh1B,IAAM,WAClC,OAAOg5B,EAAStqC,UAAWyoC,EAAEzU,KAS/BsS,EAAU2F,QAAU3F,EAAU90B,IAAM,WAClC,OAAO84B,EAAStqC,UAAWyoC,EAAE/U,KAc/B4S,EAAU10B,OAAU,WAClB,IAMIs6B,EANU,iBAMQh+B,KAAK0D,SAAsB,QAC9C,WAAc,OAAO60B,EAPV,iBAOoBv4B,KAAK0D,WACpC,WAAc,OAA2C,SAAlB,WAAhB1D,KAAK0D,SAAwB,IACnC,QAAhB1D,KAAK0D,SAAsB,IAE/B,OAAO,SAAUu6B,GACf,IAAIlF,EAAGQ,EAAGjgC,EAAGqgC,EAAGgC,EACdlsC,EAAI,EACJgqC,EAAI,GACJpZ,EAAO,IAAI+X,EAAUoC,GAOvB,GALU,MAANyD,EAAYA,EAAKxD,EAChBb,EAASqE,EAAI,EAAGrF,GAErBe,EAAIrB,EAAS2F,EA9mBN,IAgnBHlD,EAGF,GAAIyC,OAAOC,gBAAiB,CAI1B,IAFA1E,EAAIyE,OAAOC,gBAAgB,IAAIS,YAAYvE,GAAK,IAEzClqC,EAAIkqC,IAQTgC,EAAW,OAAP5C,EAAEtpC,IAAgBspC,EAAEtpC,EAAI,KAAO,MAM1B,MACP8pC,EAAIiE,OAAOC,gBAAgB,IAAIS,YAAY,IAC3CnF,EAAEtpC,GAAK8pC,EAAE,GACTR,EAAEtpC,EAAI,GAAK8pC,EAAE,KAKbE,EAAEjyB,KAAKm0B,EAAI,MACXlsC,GAAK,GAGTA,EAAIkqC,EAAI,MAGH,KAAI6D,OAAOE,YA2BhB,MADA3C,GAAS,EACHh7B,MACJy4B,EAAiB,sBAvBnB,IAFAO,EAAIyE,OAAOE,YAAY/D,GAAK,GAErBlqC,EAAIkqC,IAMTgC,EAAmB,iBAAN,GAAP5C,EAAEtpC,IAA0C,cAAXspC,EAAEtpC,EAAI,GAC9B,WAAXspC,EAAEtpC,EAAI,GAAgC,SAAXspC,EAAEtpC,EAAI,IACjCspC,EAAEtpC,EAAI,IAAM,KAAOspC,EAAEtpC,EAAI,IAAM,GAAKspC,EAAEtpC,EAAI,KAErC,KACP+tC,OAAOE,YAAY,GAAG7lB,KAAKkhB,EAAGtpC,IAI9BgqC,EAAEjyB,KAAKm0B,EAAI,MACXlsC,GAAK,GAGTA,EAAIkqC,EAAI,EASZ,IAAKoB,EAEH,KAAOtrC,EAAIkqC,IACTgC,EAAIqC,KACI,OAAMvE,EAAEhqC,KAAOksC,EAAI,MAc/B,IATAsC,GA9rBO,IA6rBPtE,EAAIF,IAAIhqC,KAICwuC,IACPtC,EAAIhD,EAlsBC,GAksBmBsF,GACxBxE,EAAEhqC,GAAK8oC,EAAUoB,EAAIgC,GAAKA,GAIZ,IAATlC,EAAEhqC,GAAUgqC,EAAEztB,MAAOvc,KAG5B,GAAIA,EAAI,EACNgqC,EAAI,CAACngC,EAAI,OACJ,CAGL,IAAKA,GAAK,EAAa,IAATmgC,EAAE,GAAUA,EAAE/3B,OAAO,EAAG,GAAIpI,GA/sBrC,IAktBL,IAAK7J,EAAI,EAAGksC,EAAIlC,EAAE,GAAIkC,GAAK,GAAIA,GAAK,GAAIlsC,KAGpCA,EArtBC,KAqtBa6J,GArtBb,GAqtB6B7J,GAKpC,OAFA4wB,EAAK/mB,EAAIA,EACT+mB,EAAKoZ,EAAIA,EACFpZ,GAjIS,GA2IpB+X,EAAUtF,IAAM,WAId,IAHA,IAAIrjC,EAAI,EACN4K,EAAOvI,UACPghC,EAAM,IAAIsF,EAAU/9B,EAAK,IACpB5K,EAAI4K,EAAK3K,QAASojC,EAAMA,EAAIqL,KAAK9jC,EAAK5K,MAC7C,OAAOqjC,GAQTuH,EAAe,WAQb,SAAS+D,EAAUrE,EAAKsE,EAAQC,EAAS1C,GAOvC,IANA,IAAI1C,EAEFqF,EADAC,EAAM,CAAC,GAEP/uC,EAAI,EACJwqC,EAAMF,EAAIrqC,OAELD,EAAIwqC,GAAM,CACf,IAAKsE,EAAOC,EAAI9uC,OAAQ6uC,IAAQC,EAAID,IAASF,GAI7C,IAFAG,EAAI,IAAM5C,EAAS3nB,QAAQ8lB,EAAIngB,OAAOnqB,MAEjCypC,EAAI,EAAGA,EAAIsF,EAAI9uC,OAAQwpC,IAEtBsF,EAAItF,GAAKoF,EAAU,IACH,MAAdE,EAAItF,EAAI,KAAYsF,EAAItF,EAAI,GAAK,GACrCsF,EAAItF,EAAI,IAAMsF,EAAItF,GAAKoF,EAAU,EACjCE,EAAItF,IAAMoF,GAKhB,OAAOE,EAAI56B,UAMb,OAAO,SAAUm2B,EAAKsE,EAAQC,EAASG,EAAMC,GAC3C,IAAI9C,EAAUY,EAAGljC,EAAGqgC,EAAGR,EAAGE,EAAGG,EAAIF,EAC/B7pC,EAAIsqC,EAAI9lB,QAAQ,KAChBgqB,EAAKxD,EACLwB,EAAKvB,EA+BP,IA5BIjrC,GAAK,IACPkqC,EAAIsB,EAGJA,EAAgB,EAChBlB,EAAMA,EAAI54B,QAAQ,IAAK,IAEvBk4B,GADAC,EAAI,IAAIlB,EAAUiG,IACZM,IAAI5E,EAAIrqC,OAASD,GACvBwrC,EAAgBtB,EAKhBL,EAAEG,EAAI2E,EAAUpE,EAAalB,EAAcO,EAAEI,GAAIJ,EAAE//B,EAAG,KACrD,GAAIglC,EAxDK,cAyDVhF,EAAEhgC,EAAIggC,EAAEG,EAAE/pC,QAUZ4J,EAAIqgC,GALJH,EAAK4E,EAAUrE,EAAKsE,EAAQC,EAASI,GACjC9C,EAAWF,EA/DH,eAgERE,EAhEQ,aAgEYF,KAGbhsC,OAGO,GAAX8pC,IAAKG,GAASH,EAAGxtB,OAGxB,IAAKwtB,EAAG,GAAI,OAAOoC,EAAShiB,OAAO,GAqCnC,GAlCInqB,EAAI,IACJ6J,GAEF+/B,EAAEI,EAAID,EACNH,EAAE//B,EAAIA,EAGN+/B,EAAEL,EAAIyF,EAENjF,GADAH,EAAIe,EAAIf,EAAGC,EAAG2E,EAAIhC,EAAIqC,IACf7E,EACPN,EAAIE,EAAEF,EACN7/B,EAAI+/B,EAAE//B,GASR7J,EAAI+pC,EAHJgD,EAAIljC,EAAI2kC,EAAK,GAObtE,EAAI2E,EAAU,EACdnF,EAAIA,GAAKqD,EAAI,GAAkB,MAAbhD,EAAGgD,EAAI,GAEzBrD,EAAI8C,EAAK,GAAU,MAALxsC,GAAa0pC,KAAa,GAAN8C,GAAWA,IAAO5C,EAAEL,EAAI,EAAI,EAAI,IAC1DvpC,EAAIkqC,GAAKlqC,GAAKkqC,IAAW,GAANsC,GAAW9C,GAAW,GAAN8C,GAAuB,EAAZzC,EAAGgD,EAAI,IACtDP,IAAO5C,EAAEL,EAAI,EAAI,EAAI,IAKxBwD,EAAI,IAAMhD,EAAG,GAGfO,EAAMZ,EAAIa,EAAa4B,EAAShiB,OAAO,IAAKqkB,EAAIrC,EAAShiB,OAAO,IAAMgiB,EAAShiB,OAAO,OACjF,CAML,GAHA4f,EAAG9pC,OAAS8sC,EAGRrD,EAGF,MAAOmF,IAAW9E,IAAKgD,GAAK8B,GAC1B9E,EAAGgD,GAAK,EAEHA,MACDljC,EACFkgC,EAAK,CAAC,GAAG/O,OAAO+O,IAMtB,IAAKG,EAAIH,EAAG9pC,QAAS8pC,IAAKG,KAG1B,IAAKlqC,EAAI,EAAGsqC,EAAM,GAAItqC,GAAKkqC,EAAGI,GAAO6B,EAAShiB,OAAO4f,EAAG/pC,OAGxDsqC,EAAMC,EAAaD,EAAKzgC,EAAGsiC,EAAShiB,OAAO,IAI7C,OAAOmgB,GAjJI,GAuJfK,EAAO,WAGL,SAAStQ,EAASuP,EAAGM,EAAGiF,GACtB,IAAIvC,EAAGpK,EAAM4M,EAAKC,EAChBC,EAAQ,EACRtvC,EAAI4pC,EAAE3pC,OACNsvC,EAAMrF,EA34BA,IA44BNsF,EAAMtF,EA54BA,IA44BgB,EAExB,IAAKN,EAAIA,EAAEzhB,QAASnoB,KAKlBsvC,IADA9M,EAAO+M,GAHPH,EAAMxF,EAAE5pC,GA/4BF,MAi5BN4sC,EAAI4C,EAAMJ,GADVC,EAAMzF,EAAE5pC,GAh5BF,IAg5BmB,GACHuvC,GAj5BhB,QAk5B6CD,GACnCH,EAAO,IAAMvC,EAn5BvB,IAm5BuC,GAAK4C,EAAMH,EACxDzF,EAAE5pC,GAAKwiC,EAAO2M,EAKhB,OAFIG,IAAO1F,EAAI,CAAC0F,GAAOtU,OAAO4O,IAEvBA,EAGT,SAASD,EAAQL,EAAGQ,EAAG2F,EAAIC,GACzB,IAAI1vC,EAAG2vC,EAEP,GAAIF,GAAMC,EACRC,EAAMF,EAAKC,EAAK,GAAK,OAGrB,IAAK1vC,EAAI2vC,EAAM,EAAG3vC,EAAIyvC,EAAIzvC,IAExB,GAAIspC,EAAEtpC,IAAM8pC,EAAE9pC,GAAI,CAChB2vC,EAAMrG,EAAEtpC,GAAK8pC,EAAE9pC,GAAK,GAAK,EACzB,MAKN,OAAO2vC,EAGT,SAASlV,EAAS6O,EAAGQ,EAAG2F,EAAIN,GAI1B,IAHA,IAAInvC,EAAI,EAGDyvC,KACLnG,EAAEmG,IAAOzvC,EACTA,EAAIspC,EAAEmG,GAAM3F,EAAE2F,GAAM,EAAI,EACxBnG,EAAEmG,GAAMzvC,EAAImvC,EAAO7F,EAAEmG,GAAM3F,EAAE2F,GAI/B,MAAQnG,EAAE,IAAMA,EAAErpC,OAAS,EAAGqpC,EAAEr3B,OAAO,EAAG,KAI5C,OAAO,SAAU23B,EAAGC,EAAG2E,EAAIhC,EAAI2C,GAC7B,IAAIQ,EAAK9lC,EAAG7J,EAAG4vC,EAAMniC,EAAGoiC,EAAMC,EAAOC,EAAGC,EAAIC,EAAKC,EAAMC,EAAMC,EAAIC,EAAIC,EACnEC,EAAIC,EACJjH,EAAIK,EAAEL,GAAKM,EAAEN,EAAI,GAAK,EACtBQ,EAAKH,EAAEI,EACPC,EAAKJ,EAAEG,EAGT,IAAKD,IAAOA,EAAG,KAAOE,IAAOA,EAAG,GAE9B,OAAO,IAAItB,EAGTiB,EAAEL,GAAMM,EAAEN,IAAMQ,GAAKE,GAAMF,EAAG,IAAME,EAAG,GAAMA,GAG7CF,GAAe,GAATA,EAAG,KAAYE,EAAS,EAAJV,EAAQA,EAAI,EAHakH,KAoBvD,IAZAT,GADAD,EAAI,IAAIpH,EAAUY,IACXS,EAAI,GAEXT,EAAIiF,GADJ3kC,EAAI+/B,EAAE//B,EAAIggC,EAAEhgC,GACC,EAERslC,IACHA,EAAOlG,EACPp/B,EAAIu/B,EAASQ,EAAE//B,EA79BV,IA69B0Bu/B,EAASS,EAAEhgC,EA79BrC,IA89BL0/B,EAAIA,EA99BC,GA89Bc,GAKhBvpC,EAAI,EAAGiqC,EAAGjqC,KAAO+pC,EAAG/pC,IAAM,GAAIA,KAInC,GAFIiqC,EAAGjqC,IAAM+pC,EAAG/pC,IAAM,IAAI6J,IAEtB0/B,EAAI,EACNyG,EAAGj4B,KAAK,GACR63B,GAAO,MACF,CAwBL,IAvBAS,EAAKtG,EAAG9pC,OACRswC,EAAKtG,EAAGhqC,OACRD,EAAI,EACJupC,GAAK,GAIL97B,EAAIq7B,EAAUqG,GAAQlF,EAAG,GAAK,KAItB,IACNA,EAAK5P,EAAS4P,EAAIx8B,EAAG0hC,GACrBpF,EAAK1P,EAAS0P,EAAIt8B,EAAG0hC,GACrBoB,EAAKtG,EAAGhqC,OACRowC,EAAKtG,EAAG9pC,QAGVmwC,EAAKG,EAELL,GADAD,EAAMlG,EAAG5hB,MAAM,EAAGooB,IACPtwC,OAGJiwC,EAAOK,EAAIN,EAAIC,KAAU,GAChCM,EAAKvG,EAAG9hB,QACRqoB,EAAK,CAAC,GAAGxV,OAAOwV,GAChBF,EAAMrG,EAAG,GACLA,EAAG,IAAMkF,EAAO,GAAGmB,IAIvB,EAAG,CAOD,GANA7iC,EAAI,GAGJkiC,EAAMhG,EAAQM,EAAIgG,EAAKM,EAAIL,IAGjB,EAAG,CAqBX,GAjBAC,EAAOF,EAAI,GACPM,GAAML,IAAMC,EAAOA,EAAOhB,GAAQc,EAAI,IAAM,KAGhDxiC,EAAIq7B,EAAUqH,EAAOG,IAab,EAcN,IAXI7iC,GAAK0hC,IAAM1hC,EAAI0hC,EAAO,GAI1BW,GADAD,EAAOxV,EAAS4P,EAAIx8B,EAAG0hC,IACVlvC,OACbiwC,EAAOD,EAAIhwC,OAM+B,GAAnC0pC,EAAQkG,EAAMI,EAAKH,EAAOI,IAC/BziC,IAGAgtB,EAASoV,EAAMU,EAAKT,EAAQU,EAAKvG,EAAI6F,EAAOX,GAC5CW,EAAQD,EAAK5vC,OACb0vC,EAAM,OAQC,GAALliC,IAGFkiC,EAAMliC,EAAI,GAKZqiC,GADAD,EAAO5F,EAAG9hB,SACGloB,OAUf,GAPI6vC,EAAQI,IAAML,EAAO,CAAC,GAAG7U,OAAO6U,IAGpCpV,EAASwV,EAAKJ,EAAMK,EAAMf,GAC1Be,EAAOD,EAAIhwC,QAGC,GAAR0vC,EAMF,KAAOhG,EAAQM,EAAIgG,EAAKM,EAAIL,GAAQ,GAClCziC,IAGAgtB,EAASwV,EAAKM,EAAKL,EAAOM,EAAKvG,EAAIiG,EAAMf,GACzCe,EAAOD,EAAIhwC,YAGE,IAAR0vC,IACTliC,IACAwiC,EAAM,CAAC,IAITD,EAAGhwC,KAAOyN,EAGNwiC,EAAI,GACNA,EAAIC,KAAUnG,EAAGqG,IAAO,GAExBH,EAAM,CAAClG,EAAGqG,IACVF,EAAO,UAEDE,IAAOC,GAAgB,MAAVJ,EAAI,KAAe1G,KAE1CqG,EAAiB,MAAVK,EAAI,GAGND,EAAG,IAAIA,EAAG/9B,OAAO,EAAG,GAG3B,GAAIk9B,GAAQlG,EAAM,CAGhB,IAAKjpC,EAAI,EAAGupC,EAAIyG,EAAG,GAAIzG,GAAK,GAAIA,GAAK,GAAIvpC,KAEzCw6B,EAAMuV,EAAGvB,GAAMuB,EAAElmC,EAAI7J,EA9nChB,GA8nCoB6J,EAAe,GAAK,EAAG2iC,EAAIoD,QAIpDG,EAAElmC,EAAIA,EACNkmC,EAAErG,GAAKkG,EAGT,OAAOG,GA9PJ,GA+XPlF,EAAgB,WACd,IAAI6F,EAAa,8BACfC,EAAW,cACXC,EAAY,cACZC,EAAkB,qBAClBC,EAAmB,6BAErB,OAAO,SAAUlH,EAAGU,EAAK+B,EAAOvC,GAC9B,IAAIqF,EACF5F,EAAI8C,EAAQ/B,EAAMA,EAAI54B,QAAQo/B,EAAkB,IAGlD,GAAID,EAAgBliC,KAAK46B,GACvBK,EAAEL,EAAIxI,MAAMwI,GAAK,KAAOA,EAAI,GAAK,EAAI,MAChC,CACL,IAAK8C,IAGH9C,EAAIA,EAAE73B,QAAQg/B,GAAY,SAAU9D,EAAGmE,EAAIC,GAEzC,OADA7B,EAAkC,MAA1B6B,EAAKA,EAAG5Y,eAAwB,GAAW,KAAN4Y,EAAY,EAAI,EACrDlH,GAAKA,GAAKqF,EAAYvC,EAALmE,KAGvBjH,IACFqF,EAAOrF,EAGPP,EAAIA,EAAE73B,QAAQi/B,EAAU,MAAMj/B,QAAQk/B,EAAW,SAG/CtG,GAAOf,GAAG,OAAO,IAAIZ,EAAUY,EAAG4F,GAKxC,GAAIxG,EAAU4D,MACZ,MAAMj8B,MACHy4B,EAAiB,SAAWe,EAAI,SAAWA,EAAI,IAAM,YAAcQ,GAIxEV,EAAEL,EAAI,KAGRK,EAAEI,EAAIJ,EAAE//B,EAAI,MA5CA,GAyOhBihC,EAAEmG,cAAgBnG,EAAEoG,IAAM,WACxB,IAAItH,EAAI,IAAIjB,EAAUzmC,MAEtB,OADI0nC,EAAEL,EAAI,IAAGK,EAAEL,EAAI,GACZK,GAWTkB,EAAEqG,WAAa,SAAUtH,EAAGC,GAC1B,OAAOH,EAAQznC,KAAM,IAAIymC,EAAUkB,EAAGC,KAiBxCgB,EAAEsG,cAAgBtG,EAAE0D,GAAK,SAAUA,EAAIhC,GACrC,IAAIxC,EAAGv8B,EAAGy+B,EACRtC,EAAI1nC,KAEN,GAAU,MAANssC,EAKF,OAJArE,EAASqE,EAAI,EAAGrF,GACN,MAANqD,EAAYA,EAAKvB,EAChBd,EAASqC,EAAI,EAAG,GAEdhS,EAAM,IAAImO,EAAUiB,GAAI4E,EAAK5E,EAAE//B,EAAI,EAAG2iC,GAG/C,KAAMxC,EAAIJ,EAAEI,GAAI,OAAO,KAIvB,GAHAv8B,EA7hDS,KA6hDHy+B,EAAIlC,EAAE/pC,OAAS,GAAKmpC,EAASlnC,KAAK2H,EA7hD/B,KAgiDLqiC,EAAIlC,EAAEkC,GAAI,KAAOA,EAAI,IAAM,EAAGA,GAAK,GAAIz+B,KAG3C,OAFIA,EAAI,IAAGA,EAAI,GAERA,GAwBTq9B,EAAEuG,UAAYvG,EAAEH,IAAM,SAAUd,EAAGC,GACjC,OAAOa,EAAIzoC,KAAM,IAAIymC,EAAUkB,EAAGC,GAAIkB,EAAgBC,IAQxDH,EAAEwG,mBAAqBxG,EAAEyG,KAAO,SAAU1H,EAAGC,GAC3C,OAAOa,EAAIzoC,KAAM,IAAIymC,EAAUkB,EAAGC,GAAI,EAAG,IAmB3CgB,EAAE0G,gBAAkB1G,EAAEoE,IAAM,SAAUzhC,EAAGm/B,GACvC,IAAI6E,EAAMC,EAAU1xC,EAAGkqC,EAASyH,EAAQC,EAAQC,EAAQhI,EACtDD,EAAI1nC,KAKN,IAHAuL,EAAI,IAAIk7B,EAAUl7B,IAGZu8B,IAAMv8B,EAAEyoB,YACZ,MAAM5lB,MACHy4B,EAAiB,4BAA8B3zB,EAAQ3H,IAS5D,GANS,MAALm/B,IAAWA,EAAI,IAAIjE,EAAUiE,IAGjC+E,EAASlkC,EAAE5D,EAAI,IAGV+/B,EAAEI,IAAMJ,EAAEI,EAAE,IAAgB,GAAVJ,EAAEI,EAAE,KAAYJ,EAAE//B,GAAmB,GAAd+/B,EAAEI,EAAE/pC,SAAgBwN,EAAEu8B,IAAMv8B,EAAEu8B,EAAE,GAK5E,OADAH,EAAI,IAAIlB,EAAUp4B,KAAK2+B,KAAK95B,EAAQw0B,GAAI+H,EAAS,EAAIvH,EAAM38B,IAAM2H,EAAQ3H,KAClEm/B,EAAI/C,EAAEiI,IAAIlF,GAAK/C,EAKxB,GAFA+H,EAASnkC,EAAE87B,EAAI,EAEXqD,EAAG,CAGL,GAAIA,EAAE5C,GAAK4C,EAAE5C,EAAE,IAAM4C,EAAErD,EAAG,OAAO,IAAIZ,EAAU8H,MAE/CiB,GAAYE,GAAUhI,EAAE1T,aAAe0W,EAAE1W,eAE3B0T,EAAIA,EAAEkI,IAAIlF,QAInB,IAAIn/B,EAAE5D,EAAI,IAAM+/B,EAAE//B,EAAI,GAAK+/B,EAAE//B,GAAK,IAAa,GAAP+/B,EAAE//B,EAE7C+/B,EAAEI,EAAE,GAAK,GAAK2H,GAAU/H,EAAEI,EAAE,IAAM,KAElCJ,EAAEI,EAAE,GAAK,MAAQ2H,GAAU/H,EAAEI,EAAE,IAAM,YASvC,OANAE,EAAIN,EAAEL,EAAI,GAAKa,EAAM38B,IAAM,EAAI,EAG3Bm8B,EAAE//B,GAAK,IAAGqgC,EAAI,EAAIA,GAGf,IAAIvB,EAAUiJ,EAAS,EAAI1H,EAAIA,GAE7BsB,IAKTtB,EAAIrB,EAAS2C,EAnpDN,GAmpDiC,IAe1C,IAZImG,GACFF,EAAO,IAAI9I,EAAU,IACjBiJ,IAAQnkC,EAAE87B,EAAI,GAClBsI,EAASzH,EAAM38B,IAGfokC,GADA7xC,EAAIuQ,KAAK2gC,KAAK97B,EAAQ3H,KACT,EAGfo8B,EAAI,IAAIlB,EAAUoC,KAGR,CAER,GAAI8G,EAAQ,CAEV,KADAhI,EAAIA,EAAEtF,MAAMqF,IACLI,EAAG,MAENE,EACEL,EAAEG,EAAE/pC,OAASiqC,IAAGL,EAAEG,EAAE/pC,OAASiqC,GACxBwH,IACT7H,EAAIA,EAAEiI,IAAIlF,IAId,GAAI5sC,EAAG,CAEL,GAAU,KADVA,EAAI8oC,EAAU9oC,EAAI,IACL,MACb6xC,EAAS7xC,EAAI,OAKb,GAFAw6B,EADA/sB,EAAIA,EAAE82B,MAAMkN,GACHhkC,EAAE5D,EAAI,EAAG,GAEd4D,EAAE5D,EAAI,GACRgoC,EAASzH,EAAM38B,OACV,CAEL,GAAU,KADVzN,GAAKoV,EAAQ3H,IACA,MACbokC,EAAS7xC,EAAI,EAIjB4pC,EAAIA,EAAErF,MAAMqF,GAERM,EACEN,EAAEI,GAAKJ,EAAEI,EAAE/pC,OAASiqC,IAAGN,EAAEI,EAAE/pC,OAASiqC,GAC/BwH,IACT9H,EAAIA,EAAEkI,IAAIlF,IAId,OAAI8E,EAAiB7H,GACjB+H,IAAQ/H,EAAIkB,EAAIJ,IAAId,IAEjB+C,EAAI/C,EAAEiI,IAAIlF,GAAK1C,EAAI1P,EAAMqP,EAAG2B,EAAeP,OAnHxB2E,GAmH+C/F,IAY3EiB,EAAEiH,aAAe,SAAUvF,GACzB,IAAI/+B,EAAI,IAAIk7B,EAAUzmC,MAGtB,OAFU,MAANsqC,EAAYA,EAAKvB,EAChBd,EAASqC,EAAI,EAAG,GACdhS,EAAM/sB,EAAGA,EAAE5D,EAAI,EAAG2iC,IAQ3B1B,EAAEkH,UAAYlH,EAAEtyB,GAAK,SAAUqxB,EAAGC,GAChC,OAA8C,IAAvCH,EAAQznC,KAAM,IAAIymC,EAAUkB,EAAGC,KAOxCgB,EAAEv3B,SAAW,WACX,QAASrR,KAAK8nC,GAQhBc,EAAEmH,cAAgBnH,EAAE/U,GAAK,SAAU8T,EAAGC,GACpC,OAAOH,EAAQznC,KAAM,IAAIymC,EAAUkB,EAAGC,IAAM,GAQ9CgB,EAAEoH,uBAAyBpH,EAAE9U,IAAM,SAAU6T,EAAGC,GAC9C,OAAoD,KAA5CA,EAAIH,EAAQznC,KAAM,IAAIymC,EAAUkB,EAAGC,MAAoB,IAANA,GAQ3DgB,EAAE5U,UAAY,WACZ,QAASh0B,KAAK8nC,GAAKZ,EAASlnC,KAAK2H,EAxwDxB,IAwwDwC3H,KAAK8nC,EAAE/pC,OAAS,GAQnE6qC,EAAEqH,WAAarH,EAAEzU,GAAK,SAAUwT,EAAGC,GACjC,OAAOH,EAAQznC,KAAM,IAAIymC,EAAUkB,EAAGC,IAAM,GAQ9CgB,EAAEsH,oBAAsBtH,EAAExU,IAAM,SAAUuT,EAAGC,GAC3C,OAAqD,KAA7CA,EAAIH,EAAQznC,KAAM,IAAIymC,EAAUkB,EAAGC,MAAqB,IAANA,GAO5DgB,EAAE/J,MAAQ,WACR,OAAQ7+B,KAAKqnC,GAOfuB,EAAEuH,WAAa,WACb,OAAOnwC,KAAKqnC,EAAI,GAOlBuB,EAAEwH,WAAa,WACb,OAAOpwC,KAAKqnC,EAAI,GAOlBuB,EAAEyH,OAAS,WACT,QAASrwC,KAAK8nC,GAAkB,GAAb9nC,KAAK8nC,EAAE,IAwB5Bc,EAAE0H,MAAQ,SAAU3I,EAAGC,GACrB,IAAI9pC,EAAGypC,EAAGgJ,EAAGC,EACX9I,EAAI1nC,KACJonC,EAAIM,EAAEL,EAMR,GAHAO,GADAD,EAAI,IAAIlB,EAAUkB,EAAGC,IACfP,GAGDD,IAAMQ,EAAG,OAAO,IAAInB,EAAU8H,KAGnC,GAAInH,GAAKQ,EAEP,OADAD,EAAEN,GAAKO,EACAF,EAAE8E,KAAK7E,GAGhB,IAAI8I,EAAK/I,EAAE//B,EAn2DF,GAo2DP+oC,EAAK/I,EAAEhgC,EAp2DA,GAq2DPkgC,EAAKH,EAAEI,EACPC,EAAKJ,EAAEG,EAET,IAAK2I,IAAOC,EAAI,CAGd,IAAK7I,IAAOE,EAAI,OAAOF,GAAMF,EAAEN,GAAKO,EAAGD,GAAK,IAAIlB,EAAUsB,EAAKL,EAAI6G,KAGnE,IAAK1G,EAAG,KAAOE,EAAG,GAGhB,OAAOA,EAAG,IAAMJ,EAAEN,GAAKO,EAAGD,GAAK,IAAIlB,EAAUoB,EAAG,GAAKH,EAGnC,GAAjBqB,GAAsB,EAAI,GAS/B,GALA0H,EAAKvJ,EAASuJ,GACdC,EAAKxJ,EAASwJ,GACd7I,EAAKA,EAAG5hB,QAGJmhB,EAAIqJ,EAAKC,EAAI,CAaf,KAXIF,EAAOpJ,EAAI,IACbA,GAAKA,EACLmJ,EAAI1I,IAEJ6I,EAAKD,EACLF,EAAIxI,GAGNwI,EAAEt+B,UAGG21B,EAAIR,EAAGQ,IAAK2I,EAAE16B,KAAK,IACxB06B,EAAEt+B,eAMF,IAFAs1B,GAAKiJ,GAAQpJ,EAAIS,EAAG9pC,SAAW6pC,EAAIG,EAAGhqC,SAAWqpC,EAAIQ,EAEhDR,EAAIQ,EAAI,EAAGA,EAAIL,EAAGK,IAErB,GAAIC,EAAGD,IAAMG,EAAGH,GAAI,CAClB4I,EAAO3I,EAAGD,GAAKG,EAAGH,GAClB,MAYN,GANI4I,IAAMD,EAAI1I,EAAIA,EAAKE,EAAIA,EAAKwI,EAAG5I,EAAEN,GAAKM,EAAEN,IAE5CO,GAAKL,EAAIQ,EAAGhqC,SAAWD,EAAI+pC,EAAG9pC,SAItB,EAAG,KAAO6pC,IAAKC,EAAG/pC,KAAO,GAIjC,IAHA8pC,EAAIb,EAAO,EAGJQ,EAAIH,GAAI,CAEb,GAAIS,IAAKN,GAAKQ,EAAGR,GAAI,CACnB,IAAKzpC,EAAIypC,EAAGzpC,IAAM+pC,IAAK/pC,GAAI+pC,EAAG/pC,GAAK8pC,KACjCC,EAAG/pC,GACL+pC,EAAGN,IAAMR,EAGXc,EAAGN,IAAMQ,EAAGR,GAId,KAAgB,GAATM,EAAG,GAASA,EAAG93B,OAAO,EAAG,KAAM2gC,GAGtC,OAAK7I,EAAG,GAWD8C,EAAUhD,EAAGE,EAAI6I,IAPtB/I,EAAEN,EAAqB,GAAjB0B,GAAsB,EAAI,EAChCpB,EAAEG,EAAI,CAACH,EAAEhgC,EAAI,GACNggC,IA8BXiB,EAAE+H,OAAS/H,EAAEgH,IAAM,SAAUjI,EAAGC,GAC9B,IAAIiG,EAAGxG,EACLK,EAAI1nC,KAKN,OAHA2nC,EAAI,IAAIlB,EAAUkB,EAAGC,IAGhBF,EAAEI,IAAMH,EAAEN,GAAKM,EAAEG,IAAMH,EAAEG,EAAE,GACvB,IAAIrB,EAAU8H,MAGX5G,EAAEG,GAAKJ,EAAEI,IAAMJ,EAAEI,EAAE,GACtB,IAAIrB,EAAUiB,IAGJ,GAAf2B,GAIFhC,EAAIM,EAAEN,EACNM,EAAEN,EAAI,EACNwG,EAAIpF,EAAIf,EAAGC,EAAG,EAAG,GACjBA,EAAEN,EAAIA,EACNwG,EAAExG,GAAKA,GAEPwG,EAAIpF,EAAIf,EAAGC,EAAG,EAAG0B,IAGnB1B,EAAID,EAAE4I,MAAMzC,EAAExL,MAAMsF,KAGbG,EAAE,IAAqB,GAAfuB,IAAkB1B,EAAEN,EAAIK,EAAEL,GAElCM,IAwBTiB,EAAEgI,aAAehI,EAAEvG,MAAQ,SAAUsF,EAAGC,GACtC,IAAIE,EAAGngC,EAAG7J,EAAGypC,EAAGS,EAAG0C,EAAGmG,EAAK3D,EAAKC,EAAK2D,EAAKC,EAAKC,EAAKC,EAClDhE,EACAvF,EAAI1nC,KACJ6nC,EAAKH,EAAEI,EACPC,GAAMJ,EAAI,IAAIlB,EAAUkB,EAAGC,IAAIE,EAGjC,IAAKD,IAAOE,IAAOF,EAAG,KAAOE,EAAG,GAmB9B,OAhBKL,EAAEL,IAAMM,EAAEN,GAAKQ,IAAOA,EAAG,KAAOE,GAAMA,IAAOA,EAAG,KAAOF,EAC1DF,EAAEG,EAAIH,EAAEhgC,EAAIggC,EAAEN,EAAI,MAElBM,EAAEN,GAAKK,EAAEL,EAGJQ,GAAOE,GAKVJ,EAAEG,EAAI,CAAC,GACPH,EAAEhgC,EAAI,GALNggC,EAAEG,EAAIH,EAAEhgC,EAAI,MASTggC,EAYT,IATAhgC,EAAIu/B,EAASQ,EAAE//B,EA/iEN,IA+iEsBu/B,EAASS,EAAEhgC,EA/iEjC,IAgjETggC,EAAEN,GAAKK,EAAEL,GACTwJ,EAAMhJ,EAAG9pC,SACT+yC,EAAM/I,EAAGhqC,UAGMkzC,EAAKpJ,EAAIA,EAAKE,EAAIA,EAAKkJ,EAAInzC,EAAI+yC,EAAKA,EAAMC,EAAKA,EAAMhzC,GAG/DA,EAAI+yC,EAAMC,EAAKG,EAAK,GAAInzC,IAAKmzC,EAAGp7B,KAAK,IAK1C,IAHAo3B,EAAOlG,EAtjEG,IAyjELjpC,EAAIgzC,IAAOhzC,GAAK,GAAI,CAKvB,IAJAgqC,EAAI,EACJiJ,EAAMhJ,EAAGjqC,GA3jED,IA4jERkzC,EAAMjJ,EAAGjqC,GA5jED,IA4jEiB,EAEXypC,EAAIzpC,GAAbkqC,EAAI6I,GAAgBtJ,EAAIzpC,GAK3BgqC,IADAoF,EAAM6D,GAHN7D,EAAMrF,IAAKG,GA/jEL,MAikEN0C,EAAIsG,EAAM9D,GADVC,EAAMtF,EAAGG,GAhkEH,IAgkEmB,GACH+I,GAjkEhB,QAkkE0CE,EAAG1J,GAAKO,GAC7CmF,EAAO,IAAMvC,EAnkElB,IAmkEiC,GAAKsG,EAAM7D,EAClD8D,EAAG1J,KAAO2F,EAAMD,EAGlBgE,EAAG1J,GAAKO,EASV,OANIA,IACAngC,EAEFspC,EAAGlhC,OAAO,EAAG,GAGR46B,EAAUhD,EAAGsJ,EAAItpC,IAQ1BihC,EAAEsI,QAAU,WACV,IAAIxJ,EAAI,IAAIjB,EAAUzmC,MAEtB,OADA0nC,EAAEL,GAAKK,EAAEL,GAAK,KACPK,GAwBTkB,EAAE4D,KAAO,SAAU7E,EAAGC,GACpB,IAAI2I,EACF7I,EAAI1nC,KACJonC,EAAIM,EAAEL,EAMR,GAHAO,GADAD,EAAI,IAAIlB,EAAUkB,EAAGC,IACfP,GAGDD,IAAMQ,EAAG,OAAO,IAAInB,EAAU8H,KAGlC,GAAInH,GAAKQ,EAER,OADAD,EAAEN,GAAKO,EACAF,EAAE4I,MAAM3I,GAGjB,IAAI8I,EAAK/I,EAAE//B,EAxoEF,GAyoEP+oC,EAAK/I,EAAEhgC,EAzoEA,GA0oEPkgC,EAAKH,EAAEI,EACPC,EAAKJ,EAAEG,EAET,IAAK2I,IAAOC,EAAI,CAGd,IAAK7I,IAAOE,EAAI,OAAO,IAAItB,EAAUW,EAAI,GAIzC,IAAKS,EAAG,KAAOE,EAAG,GAAI,OAAOA,EAAG,GAAKJ,EAAI,IAAIlB,EAAUoB,EAAG,GAAKH,EAAQ,EAAJN,GAQrE,GALAqJ,EAAKvJ,EAASuJ,GACdC,EAAKxJ,EAASwJ,GACd7I,EAAKA,EAAG5hB,QAGJmhB,EAAIqJ,EAAKC,EAAI,CAUf,IATItJ,EAAI,GACNsJ,EAAKD,EACLF,EAAIxI,IAEJX,GAAKA,EACLmJ,EAAI1I,GAGN0I,EAAEt+B,UACKm1B,IAAKmJ,EAAE16B,KAAK,IACnB06B,EAAEt+B,UAUJ,KAPAm1B,EAAIS,EAAG9pC,SACP6pC,EAAIG,EAAGhqC,QAGK,IAAGwyC,EAAIxI,EAAIA,EAAKF,EAAIA,EAAK0I,EAAG3I,EAAIR,GAGvCA,EAAI,EAAGQ,GACVR,GAAKS,IAAKD,GAAKC,EAAGD,GAAKG,EAAGH,GAAKR,GAAKL,EAAO,EAC3Cc,EAAGD,GAAKb,IAASc,EAAGD,GAAK,EAAIC,EAAGD,GAAKb,EAUvC,OAPIK,IACFS,EAAK,CAACT,GAAGtO,OAAO+O,KACd6I,GAKG/F,EAAUhD,EAAGE,EAAI6I,IAmB1B9H,EAAE/c,UAAY+c,EAAEgC,GAAK,SAAUA,EAAIN,GACjC,IAAIxC,EAAGv8B,EAAGy+B,EACRtC,EAAI1nC,KAEN,GAAU,MAAN4qC,GAAcA,MAASA,EAKzB,OAJA3C,EAAS2C,EAAI,EAAG3D,GACN,MAANqD,EAAYA,EAAKvB,EAChBd,EAASqC,EAAI,EAAG,GAEdhS,EAAM,IAAImO,EAAUiB,GAAIkD,EAAIN,GAGrC,KAAMxC,EAAIJ,EAAEI,GAAI,OAAO,KAIvB,GAFAv8B,EA9tES,IA6tETy+B,EAAIlC,EAAE/pC,OAAS,GACI,EAEfisC,EAAIlC,EAAEkC,GAAI,CAGZ,KAAOA,EAAI,IAAM,EAAGA,GAAK,GAAIz+B,KAG7B,IAAKy+B,EAAIlC,EAAE,GAAIkC,GAAK,GAAIA,GAAK,GAAIz+B,MAKnC,OAFIq/B,GAAMlD,EAAE//B,EAAI,EAAI4D,IAAGA,EAAIm8B,EAAE//B,EAAI,GAE1B4D,GAYTq9B,EAAEuI,UAAY,SAAUnJ,GAEtB,OADAC,EAASD,GAvvEQ,mCAwvEVhoC,KAAKqiC,MAAM,KAAO2F,IAe3BY,EAAEwI,WAAaxI,EAAEyI,KAAO,WACtB,IAAI3G,EAAGn/B,EAAGi8B,EAAG8J,EAAKf,EAChB7I,EAAI1nC,KACJ8nC,EAAIJ,EAAEI,EACNT,EAAIK,EAAEL,EACN1/B,EAAI+/B,EAAE//B,EACN2kC,EAAKxD,EAAiB,EACtByG,EAAO,IAAI9I,EAAU,OAGvB,GAAU,IAANY,IAAYS,IAAMA,EAAE,GACtB,OAAO,IAAIrB,GAAWY,GAAKA,EAAI,KAAOS,GAAKA,EAAE,IAAMyG,IAAMzG,EAAIJ,EAAI,KA8BnE,GAtBS,IAJTL,EAAIh5B,KAAKgjC,MAAMn+B,EAAQw0B,MAITL,GAAK,OACjB97B,EAAI47B,EAAcW,IACX/pC,OAAS4J,GAAK,GAAK,IAAG4D,GAAK,KAClC87B,EAAIh5B,KAAKgjC,MAAM9lC,GACf5D,EAAIu/B,GAAUv/B,EAAI,GAAK,IAAMA,EAAI,GAAKA,EAAI,GAS1C6/B,EAAI,IAAIf,EANNl7B,EADE87B,GAAK,IACH,KAAO1/B,GAEX4D,EAAI87B,EAAEc,iBACAliB,MAAM,EAAG1a,EAAE+W,QAAQ,KAAO,GAAK3a,IAKvC6/B,EAAI,IAAIf,EAAUY,EAAI,IAOpBG,EAAEM,EAAE,GAMN,KAJAT,GADA1/B,EAAI6/B,EAAE7/B,GACE2kC,GACA,IAAGjF,EAAI,KAOb,GAHAkJ,EAAI/I,EACJA,EAAI+H,EAAKlN,MAAMkO,EAAE/D,KAAK/D,EAAIf,EAAG6I,EAAGjE,EAAI,KAEhCnF,EAAcoJ,EAAEzI,GAAG7hB,MAAM,EAAGohB,MAAQ97B,EAAI47B,EAAcK,EAAEM,IAAI7hB,MAAM,EAAGohB,GAAI,CAW3E,GANIG,EAAE7/B,EAAIA,KAAK0/B,EAMN,SALT97B,EAAIA,EAAE0a,MAAMohB,EAAI,EAAGA,EAAI,MAKHiK,GAAY,QAAL/lC,GAgBpB,EAICA,KAAOA,EAAE0a,MAAM,IAAqB,KAAf1a,EAAE0c,OAAO,MAGlCqQ,EAAMkP,EAAGA,EAAE7/B,EAAImhC,EAAiB,EAAG,GACnC4B,GAAKlD,EAAEnF,MAAMmF,GAAGlxB,GAAGoxB,IAGrB,MAvBA,IAAK4J,IACHhZ,EAAMiY,EAAGA,EAAE5oC,EAAImhC,EAAiB,EAAG,GAE/ByH,EAAElO,MAAMkO,GAAGj6B,GAAGoxB,IAAI,CACpBF,EAAI+I,EACJ,MAIJjE,GAAM,EACNjF,GAAK,EACLiK,EAAM,EAkBd,OAAOhZ,EAAMkP,EAAGA,EAAE7/B,EAAImhC,EAAiB,EAAGC,EAAe2B,IAa3D9B,EAAET,cAAgB,SAAUmE,EAAIhC,GAK9B,OAJU,MAANgC,IACFrE,EAASqE,EAAI,EAAGrF,GAChBqF,KAEKhH,EAAOtlC,KAAMssC,EAAIhC,EAAI,IAgB9B1B,EAAE2I,QAAU,SAAUjF,EAAIhC,GAKxB,OAJU,MAANgC,IACFrE,EAASqE,EAAI,EAAGrF,GAChBqF,EAAKA,EAAKtsC,KAAK2H,EAAI,GAEd29B,EAAOtlC,KAAMssC,EAAIhC,IA6B1B1B,EAAE4I,SAAW,SAAUlF,EAAIhC,EAAIhF,GAC7B,IAAI8C,EACFV,EAAI1nC,KAEN,GAAc,MAAVslC,EACQ,MAANgH,GAAchC,GAAmB,iBAANA,GAC7BhF,EAASgF,EACTA,EAAK,MACIgC,GAAmB,iBAANA,GACtBhH,EAASgH,EACTA,EAAKhC,EAAK,MAEVhF,EAASiE,OAEN,GAAqB,iBAAVjE,EAChB,MAAMl3B,MACHy4B,EAAiB,2BAA6BvB,GAKnD,GAFA8C,EAAMV,EAAE6J,QAAQjF,EAAIhC,GAEhB5C,EAAEI,EAAG,CACP,IAAIhqC,EACF+uC,EAAMzE,EAAIz6B,MAAM,KAChB8jC,GAAMnM,EAAOkE,UACbkI,GAAMpM,EAAOmE,mBACbC,EAAiBpE,EAAOoE,gBAAkB,GAC1CiI,EAAU9E,EAAI,GACd+E,EAAe/E,EAAI,GACnBgF,EAAQnK,EAAEL,EAAI,EACdyK,EAAYD,EAAQF,EAAQ1rB,MAAM,GAAK0rB,EACvCrJ,EAAMwJ,EAAU/zC,OAIlB,GAFI2zC,IAAI5zC,EAAI2zC,EAAIA,EAAKC,EAAIA,EAAK5zC,EAAGwqC,GAAOxqC,GAEpC2zC,EAAK,GAAKnJ,EAAM,EAAG,CAGrB,IAFAxqC,EAAIwqC,EAAMmJ,GAAMA,EAChBE,EAAUG,EAAUC,OAAO,EAAGj0C,GACvBA,EAAIwqC,EAAKxqC,GAAK2zC,EAAIE,GAAWjI,EAAiBoI,EAAUC,OAAOj0C,EAAG2zC,GACrEC,EAAK,IAAGC,GAAWjI,EAAiBoI,EAAU7rB,MAAMnoB,IACpD+zC,IAAOF,EAAU,IAAMA,GAG7BvJ,EAAMwJ,EACHD,GAAWrM,EAAOqE,kBAAoB,MAAQ+H,GAAMpM,EAAOsE,mBAC1DgI,EAAapiC,QAAQ,IAAIjN,OAAO,OAASmvC,EAAK,OAAQ,KACvD,MAAQpM,EAAOuE,wBAA0B,KACxC+H,GACDD,EAGL,OAAQrM,EAAOnC,QAAU,IAAMiF,GAAO9C,EAAOwE,QAAU,KAezDlB,EAAEoJ,WAAa,SAAUC,GACvB,IAAIpH,EAAGqH,EAAIC,EAAIC,EAAIzqC,EAAG0qC,EAAK9mC,EAAG+mC,EAAIC,EAAI1E,EAAGrG,EAAGH,EAC1CK,EAAI1nC,KACJ6nC,EAAKH,EAAEI,EAET,GAAU,MAANmK,MACF1mC,EAAI,IAAIk7B,EAAUwL,IAGXje,cAAgBzoB,EAAEu8B,GAAa,IAARv8B,EAAE87B,IAAY97B,EAAE4oB,GAAG0U,IAC/C,MAAMz6B,MACHy4B,EAAiB,aACft7B,EAAEyoB,YAAc,iBAAmB,oBAAsB9gB,EAAQ3H,IAI1E,IAAKs8B,EAAI,OAAO,IAAIpB,EAAUiB,GAoB9B,IAlBAmD,EAAI,IAAIpE,EAAUoC,GAClB0J,EAAKL,EAAK,IAAIzL,EAAUoC,GACxBsJ,EAAKG,EAAK,IAAI7L,EAAUoC,GACxBxB,EAAIF,EAAcU,GAIlBlgC,EAAIkjC,EAAEljC,EAAI0/B,EAAEtpC,OAAS2pC,EAAE//B,EAAI,EAC3BkjC,EAAE/C,EAAE,GAAKd,GAAUqL,EAAM1qC,EAvgFhB,IAugFgC,EAvgFhC,GAugF+C0qC,EAAMA,GAC9DJ,GAAMA,GAAM1mC,EAAE0jC,WAAWpE,GAAK,EAAKljC,EAAI,EAAIkjC,EAAI0H,EAAMhnC,EAErD8mC,EAAMlJ,EACNA,EAAU,IACV59B,EAAI,IAAIk7B,EAAUY,GAGlBiL,EAAGxK,EAAE,GAAK,EAGR+F,EAAIpF,EAAIl9B,EAAGs/B,EAAG,EAAG,GAEQ,IADzBuH,EAAKF,EAAG1F,KAAKqB,EAAExL,MAAM8P,KACdlD,WAAWgD,IAClBC,EAAKC,EACLA,EAAKC,EACLG,EAAKD,EAAG9F,KAAKqB,EAAExL,MAAM+P,EAAKG,IAC1BD,EAAKF,EACLvH,EAAIt/B,EAAE+kC,MAAMzC,EAAExL,MAAM+P,EAAKvH,IACzBt/B,EAAI6mC,EAeN,OAZAA,EAAK3J,EAAIwJ,EAAG3B,MAAM4B,GAAKC,EAAI,EAAG,GAC9BG,EAAKA,EAAG9F,KAAK4F,EAAG/P,MAAMkQ,IACtBL,EAAKA,EAAG1F,KAAK4F,EAAG/P,MAAM8P,IACtBG,EAAGjL,EAAIkL,EAAGlL,EAAIK,EAAEL,EAIhBG,EAAIiB,EAAI8J,EAAIJ,EAHZxqC,GAAQ,EAGWohC,GAAeuH,MAAM5I,GAAGsH,MAAMC,WAC7CxG,EAAI6J,EAAIJ,EAAIvqC,EAAGohC,GAAeuH,MAAM5I,GAAGsH,OAAS,EAAI,CAACuD,EAAIJ,GAAM,CAACG,EAAIJ,GAExE/I,EAAUkJ,EAEH7K,GAOToB,EAAEtd,SAAW,WACX,OAAQpY,EAAQlT,OAelB4oC,EAAE4J,YAAc,SAAU5H,EAAIN,GAE5B,OADU,MAANM,GAAY3C,EAAS2C,EAAI,EAAG3D,GACzB3B,EAAOtlC,KAAM4qC,EAAIN,EAAI,IAe9B1B,EAAEh6B,SAAW,SAAUg5B,GACrB,IAAIQ,EACF78B,EAAIvL,KACJqnC,EAAI97B,EAAE87B,EACN1/B,EAAI4D,EAAE5D,EA0BR,OAvBU,OAANA,EACE0/B,GACFe,EAAM,WACFf,EAAI,IAAGe,EAAM,IAAMA,IAEvBA,EAAM,OAGC,MAALR,EACFQ,EAAMzgC,GAAKqhC,GAAcrhC,GAAKshC,EAC3Bd,EAAchB,EAAc57B,EAAEu8B,GAAIngC,GAClC0gC,EAAalB,EAAc57B,EAAEu8B,GAAIngC,EAAG,KACxB,KAANigC,EAETQ,EAAMC,EAAalB,GADnB57B,EAAI+sB,EAAM,IAAImO,EAAUl7B,GAAIu9B,EAAiBnhC,EAAI,EAAGohC,IACjBjB,GAAIv8B,EAAE5D,EAAG,MAE5CsgC,EAASL,EAAG,EAAGmC,EAAShsC,OAAQ,QAChCqqC,EAAMM,EAAYL,EAAalB,EAAc57B,EAAEu8B,GAAIngC,EAAG,KAAM,GAAIigC,EAAGP,GAAG,IAGpEA,EAAI,GAAK97B,EAAEu8B,EAAE,KAAIM,EAAM,IAAMA,IAG5BA,GAQTQ,EAAE11B,QAAU01B,EAAE9D,OAAS,WACrB,OAAO5xB,EAAQlT,OAIjB4oC,EAAEwB,cAAe,EAEG,MAAhB5B,GAAsB/B,EAAUt5B,IAAIq7B,GAEjC/B,EAsIGzX,IACH,QAAcyX,EAAUA,UAAYA,OAIrC,KAAN1B,aAAqB,OAAO0B,GAAtB,8BAv0FT,I,kFCEY,eAAe,CAAC,MAE7B,iBAAE,SAAF,KAcA,OAXW,SAAP,WACI,OAAO,KAAK,SAGT,YAAP,SAAiB,GACb,KAAK,QAAU,GAGZ,QAAP,sBACI,YAAqD,GAA9C,eAAa,MAAK,YAAK,WAAM,EAAN,YAX3B,UAA6B,KAaxC,EAdA,GAAa,EAAAgM,MAgBbzrC,EAAQw+B,QAAO,G,qBCpBf,YAGmEr+B,EAAOH,QAGjE,WAAc,aAEnB,IAAI0rC,EA6GA/R,EA3GJ,SAASgS,IACL,OAAOD,EAAatyC,MAAM,KAAMD,WASpC,SAASmT,EAAQuE,GACb,OAAOA,aAAiBjO,OAAmD,mBAA1CxL,OAAOM,UAAUkQ,SAASrP,KAAKsY,GAGpE,SAASjE,EAASiE,GAGd,OAAgB,MAATA,GAA2D,oBAA1CzZ,OAAOM,UAAUkQ,SAASrP,KAAKsY,GAiB3D,SAASqnB,EAAYrnB,GACjB,YAAiB,IAAVA,EAGX,SAASoc,EAASpc,GACd,MAAwB,kBAAVA,GAAgE,oBAA1CzZ,OAAOM,UAAUkQ,SAASrP,KAAKsY,GAGvE,SAAS9P,EAAO8P,GACZ,OAAOA,aAAiB1J,MAAkD,kBAA1C/P,OAAOM,UAAUkQ,SAASrP,KAAKsY,GAGnE,SAASlL,EAAIkgC,EAAKziB,GACd,IAActsB,EAAV80C,EAAM,GACV,IAAK90C,EAAI,EAAGA,EAAI+uC,EAAI9uC,SAAUD,EAC1B80C,EAAI/8B,KAAKuU,EAAGyiB,EAAI/uC,GAAIA,IAExB,OAAO80C,EAGX,SAASC,EAAWzL,EAAGQ,GACnB,OAAOxpC,OAAOM,UAAUmQ,eAAetP,KAAK6nC,EAAGQ,GAGnD,SAAS3K,EAAOmK,EAAGQ,GACf,IAAK,IAAI9pC,KAAK8pC,EACNiL,EAAWjL,EAAG9pC,KACdspC,EAAEtpC,GAAK8pC,EAAE9pC,IAYjB,OARI+0C,EAAWjL,EAAG,cACdR,EAAEx4B,SAAWg5B,EAAEh5B,UAGfikC,EAAWjL,EAAG,aACdR,EAAEl0B,QAAU00B,EAAE10B,SAGXk0B,EAGX,SAAS0L,EAAWj7B,EAAOytB,EAAQD,EAAQ0N,GACvC,OAAOC,GAAiBn7B,EAAOytB,EAAQD,EAAQ0N,GAAQ,GAAME,MAuBjE,SAASC,EAAgBxI,GAIrB,OAHa,MAATA,EAAEyI,MACFzI,EAAEyI,IApBC,CACHC,OAAkB,EAClBC,aAAkB,GAClBC,YAAkB,GAClBC,UAAmB,EACnBC,cAAkB,EAClBC,WAAkB,EAClBC,aAAkB,KAClBC,eAAkB,EAClBC,iBAAkB,EAClBC,KAAkB,EAClBC,gBAAkB,GAClBC,SAAkB,KAClBC,SAAkB,EAClBC,iBAAkB,IAQfvJ,EAAEyI,IAqBb,SAASe,EAAQxJ,GACb,GAAkB,MAAdA,EAAEyJ,SAAkB,CACpB,IAAIC,EAAQlB,EAAgBxI,GACxB2J,EAAc1T,EAAKphC,KAAK60C,EAAMN,iBAAiB,SAAUh2C,GACzD,OAAY,MAALA,KAEPw2C,GAAczV,MAAM6L,EAAE6J,GAAGC,YACzBJ,EAAMb,SAAW,IAChBa,EAAMhB,QACNgB,EAAMV,eACNU,EAAMK,iBACNL,EAAMH,kBACNG,EAAMX,YACNW,EAAMT,gBACNS,EAAMR,mBACLQ,EAAML,UAAaK,EAAML,UAAYM,GAS3C,GAPI3J,EAAEgK,UACFJ,EAAaA,GACe,IAAxBF,EAAMZ,eACwB,IAA9BY,EAAMf,aAAat1C,aACDmN,IAAlBkpC,EAAMO,SAGS,MAAnBv2C,OAAOw2C,UAAqBx2C,OAAOw2C,SAASlK,GAI5C,OAAO4J,EAHP5J,EAAEyJ,SAAWG,EAMrB,OAAO5J,EAAEyJ,SAGb,SAASU,EAAeT,GACpB,IAAI1J,EAAIoI,EAAUvE,KAQlB,OAPa,MAAT6F,EACAnX,EAAOiW,EAAgBxI,GAAI0J,GAG3BlB,EAAgBxI,GAAGkJ,iBAAkB,EAGlClJ,EA3DP/J,EADA/2B,MAAMlL,UAAUiiC,KACT/2B,MAAMlL,UAAUiiC,KAEhB,SAAUmU,GAIb,IAHA,IAAIvE,EAAInyC,OAAO4B,MACXsoC,EAAMiI,EAAExyC,SAAW,EAEdD,EAAI,EAAGA,EAAIwqC,EAAKxqC,IACrB,GAAIA,KAAKyyC,GAAKuE,EAAIv1C,KAAKS,KAAMuwC,EAAEzyC,GAAIA,EAAGyyC,GAClC,OAAO,EAIf,OAAO,GAoDf,IAAIwE,EAAmBpC,EAAMoC,iBAAmB,GAEhD,SAASC,EAAWC,EAAIC,GACpB,IAAIp3C,EAAG+3B,EAAMsf,EAiCb,GA/BKjW,EAAYgW,EAAKE,oBAClBH,EAAGG,iBAAmBF,EAAKE,kBAE1BlW,EAAYgW,EAAKG,MAClBJ,EAAGI,GAAKH,EAAKG,IAEZnW,EAAYgW,EAAKI,MAClBL,EAAGK,GAAKJ,EAAKI,IAEZpW,EAAYgW,EAAKK,MAClBN,EAAGM,GAAKL,EAAKK,IAEZrW,EAAYgW,EAAKR,WAClBO,EAAGP,QAAUQ,EAAKR,SAEjBxV,EAAYgW,EAAKM,QAClBP,EAAGO,KAAON,EAAKM,MAEdtW,EAAYgW,EAAKO,UAClBR,EAAGQ,OAASP,EAAKO,QAEhBvW,EAAYgW,EAAKQ,WAClBT,EAAGS,QAAUR,EAAKQ,SAEjBxW,EAAYgW,EAAK/B,OAClB8B,EAAG9B,IAAMD,EAAgBgC,IAExBhW,EAAYgW,EAAKS,WAClBV,EAAGU,QAAUT,EAAKS,SAGlBZ,EAAiBh3C,OAAS,EAC1B,IAAKD,EAAI,EAAGA,EAAIi3C,EAAiBh3C,OAAQD,IAGhCohC,EADLiW,EAAMD,EADNrf,EAAOkf,EAAiBj3C,OAGpBm3C,EAAGpf,GAAQsf,GAKvB,OAAOF,EAGX,IAAIW,GAAmB,EAGvB,SAASC,EAAOjK,GACZoJ,EAAWh1C,KAAM4rC,GACjB5rC,KAAKu0C,GAAK,IAAIpmC,KAAkB,MAAby9B,EAAO2I,GAAa3I,EAAO2I,GAAGC,UAAYjG,KACxDvuC,KAAKk0C,YACNl0C,KAAKu0C,GAAK,IAAIpmC,KAAKogC,OAIE,IAArBqH,IACAA,GAAmB,EACnBjD,EAAMmD,aAAa91C,MACnB41C,GAAmB,GAI3B,SAASG,EAAU72C,GACf,OAAOA,aAAe22C,GAAkB,MAAP32C,GAAuC,MAAxBA,EAAIk2C,iBAGxD,SAASY,EAAU7+B,GACf,OAAIA,EAAS,EAEF9I,KAAKwC,KAAKsG,IAAW,EAErB9I,KAAK0C,MAAMoG,GAI1B,SAAS8+B,EAAMC,GACX,IAAIC,GAAiBD,EACjBl3C,EAAQ,EAMZ,OAJsB,IAAlBm3C,GAAuB9kC,SAAS8kC,KAChCn3C,EAAQg3C,EAASG,IAGdn3C,EAIX,SAASo3C,EAAcC,EAAQC,EAAQC,GACnC,IAGIz4C,EAHAwqC,EAAMj6B,KAAKsD,IAAI0kC,EAAOt4C,OAAQu4C,EAAOv4C,QACrCy4C,EAAanoC,KAAK2gC,IAAIqH,EAAOt4C,OAASu4C,EAAOv4C,QAC7C04C,EAAQ,EAEZ,IAAK34C,EAAI,EAAGA,EAAIwqC,EAAKxqC,KACZy4C,GAAeF,EAAOv4C,KAAOw4C,EAAOx4C,KACnCy4C,GAAeN,EAAMI,EAAOv4C,MAAQm4C,EAAMK,EAAOx4C,MACnD24C,IAGR,OAAOA,EAAQD,EAGnB,SAASE,EAAKC,IACgC,IAAtChE,EAAMiE,6BACmB,qBAAbC,SAA6BA,QAAQH,MACjDG,QAAQH,KAAK,wBAA0BC,GAI/C,SAAS3Q,EAAU2Q,EAAKvsB,GACpB,IAAI0sB,GAAY,EAEhB,OAAO7Z,GAAO,WAIV,GAHgC,MAA5B0V,EAAMoE,oBACNpE,EAAMoE,mBAAmB,KAAMJ,GAE/BG,EAAW,CAGX,IAFA,IACI9pC,EADAtE,EAAO,GAEF5K,EAAI,EAAGA,EAAIqC,UAAUpC,OAAQD,IAAK,CAEvC,GADAkP,EAAM,GACsB,kBAAjB7M,UAAUrC,GAAiB,CAElC,IAAK,IAAIQ,KADT0O,GAAO,MAAQlP,EAAI,KACHqC,UAAU,GACtB6M,GAAO1O,EAAM,KAAO6B,UAAU,GAAG7B,GAAO,KAE5C0O,EAAMA,EAAIiZ,MAAM,GAAI,QAEpBjZ,EAAM7M,UAAUrC,GAEpB4K,EAAKmN,KAAK7I,GAEd0pC,EAAKC,EAAM,gBAAkB/sC,MAAMlL,UAAUunB,MAAM1mB,KAAKmJ,GAAMlD,KAAK,IAAM,MAAQ,IAAI4I,OAASqJ,OAC9Fq/B,GAAY,EAEhB,OAAO1sB,EAAGhqB,MAAMJ,KAAMG,aACvBiqB,GAGP,IAsEIlb,EAtEA8nC,EAAe,GAEnB,SAASC,EAAgBj5B,EAAM24B,GACK,MAA5BhE,EAAMoE,oBACNpE,EAAMoE,mBAAmB/4B,EAAM24B,GAE9BK,EAAah5B,KACd04B,EAAKC,GACLK,EAAah5B,IAAQ,GAO7B,SAASvC,EAAW5D,GAChB,OAAOA,aAAiB/Q,UAAsD,sBAA1C1I,OAAOM,UAAUkQ,SAASrP,KAAKsY,GAsBvE,SAASq/B,EAAaC,EAAcC,GAChC,IAAoCvhB,EAAhC+c,EAAM3V,EAAO,GAAIka,GACrB,IAAKthB,KAAQuhB,EACLvE,EAAWuE,EAAavhB,KACpBjiB,EAASujC,EAAathB,KAAUjiB,EAASwjC,EAAYvhB,KACrD+c,EAAI/c,GAAQ,GACZoH,EAAO2V,EAAI/c,GAAOshB,EAAathB,IAC/BoH,EAAO2V,EAAI/c,GAAOuhB,EAAYvhB,KACF,MAArBuhB,EAAYvhB,GACnB+c,EAAI/c,GAAQuhB,EAAYvhB,UAEjB+c,EAAI/c,IAIvB,IAAKA,KAAQshB,EACLtE,EAAWsE,EAActhB,KACpBgd,EAAWuE,EAAavhB,IACzBjiB,EAASujC,EAAathB,MAE1B+c,EAAI/c,GAAQoH,EAAO,GAAI2V,EAAI/c,KAGnC,OAAO+c,EAGX,SAASyE,EAAOzL,GACE,MAAVA,GACA5rC,KAAKmN,IAAIy+B,GAtDjB+G,EAAMiE,6BAA8B,EACpCjE,EAAMoE,mBAAqB,KA4DvB7nC,EADA9Q,OAAO8Q,KACA9Q,OAAO8Q,KAEP,SAAUhQ,GACb,IAAIpB,EAAG80C,EAAM,GACb,IAAK90C,KAAKoB,EACF2zC,EAAW3zC,EAAKpB,IAChB80C,EAAI/8B,KAAK/X,GAGjB,OAAO80C,GAoFf,IAAI0E,EAAU,GAEd,SAASC,EAAcC,EAAMC,GACzB,IAAInhB,EAAYkhB,EAAKthB,cACrBohB,EAAQhhB,GAAaghB,EAAQhhB,EAAY,KAAOghB,EAAQG,GAAaD,EAGzE,SAASE,EAAeC,GACpB,MAAwB,kBAAVA,EAAqBL,EAAQK,IAAUL,EAAQK,EAAMzhB,oBAAiBhrB,EAGxF,SAAS0sC,EAAqBC,GAC1B,IACIC,EACAjiB,EAFAkiB,EAAkB,GAItB,IAAKliB,KAAQgiB,EACLhF,EAAWgF,EAAahiB,KACxBiiB,EAAiBJ,EAAe7hB,MAE5BkiB,EAAgBD,GAAkBD,EAAYhiB,IAK1D,OAAOkiB,EAGX,IAAIC,EAAa,GAEjB,SAASC,EAAgBT,EAAMU,GAC3BF,EAAWR,GAAQU,EAcvB,SAASC,EAAShhC,EAAQihC,EAAcC,GACpC,IAAIC,EAAY,GAAKjqC,KAAK2gC,IAAI73B,GAC1BohC,EAAcH,EAAeE,EAAUv6C,OAE3C,OADWoZ,GAAU,EACLkhC,EAAY,IAAM,GAAM,KACpChqC,KAAK2+B,IAAI,GAAI3+B,KAAKoD,IAAI,EAAG8mC,IAAc3pC,WAAWmjC,OAAO,GAAKuG,EAGtE,IAAIE,EAAmB,uLAEnBC,EAAwB,6CAExBC,EAAkB,GAElBC,EAAuB,GAM3B,SAASC,EAAgBC,EAAOC,EAAQC,EAAS3wB,GAC7C,IAAI5f,EAAO4f,EACa,kBAAbA,IACP5f,EAAO,WACH,OAAOxI,KAAKooB,OAGhBywB,IACAF,EAAqBE,GAASrwC,GAE9BswC,IACAH,EAAqBG,EAAO,IAAM,WAC9B,OAAOX,EAAS3vC,EAAKpI,MAAMJ,KAAMG,WAAY24C,EAAO,GAAIA,EAAO,MAGnEC,IACAJ,EAAqBI,GAAW,WAC5B,OAAO/4C,KAAKg5C,aAAaD,QAAQvwC,EAAKpI,MAAMJ,KAAMG,WAAY04C,KAiC1E,SAASI,EAAavO,EAAGpF,GACrB,OAAKoF,EAAEwJ,WAIP5O,EAAS4T,EAAa5T,EAAQoF,EAAEsO,cAChCN,EAAgBpT,GAAUoT,EAAgBpT,IA3B9C,SAA4BA,GACxB,IAA4CxnC,EAAGC,EARnB8Z,EAQxBjP,EAAQ08B,EAAO73B,MAAM+qC,GAEzB,IAAK16C,EAAI,EAAGC,EAAS6K,EAAM7K,OAAQD,EAAIC,EAAQD,IACvC66C,EAAqB/vC,EAAM9K,IAC3B8K,EAAM9K,GAAK66C,EAAqB/vC,EAAM9K,IAEtC8K,EAAM9K,IAdc+Z,EAccjP,EAAM9K,IAbtC2P,MAAM,YACLoK,EAAMrI,QAAQ,WAAY,IAE9BqI,EAAMrI,QAAQ,MAAO,IAc5B,OAAO,SAAU2pC,GACb,IAAiBr7C,EAAbs7C,EAAS,GACb,IAAKt7C,EAAI,EAAGA,EAAIC,EAAQD,IACpBs7C,GAAU39B,EAAW7S,EAAM9K,IAAM8K,EAAM9K,GAAGyB,KAAK45C,EAAK7T,GAAU18B,EAAM9K,GAExE,OAAOs7C,GAW0CC,CAAmB/T,GAEjEoT,EAAgBpT,GAAQoF,IANpBA,EAAEsO,aAAaM,cAS9B,SAASJ,EAAa5T,EAAQD,GAC1B,IAAIvnC,EAAI,EAER,SAASy7C,EAA4B1hC,GACjC,OAAOwtB,EAAOmU,eAAe3hC,IAAUA,EAI3C,IADA4gC,EAAsBnrC,UAAY,EAC3BxP,GAAK,GAAK26C,EAAsBhsC,KAAK64B,IACxCA,EAASA,EAAO91B,QAAQipC,EAAuBc,GAC/Cd,EAAsBnrC,UAAY,EAClCxP,GAAK,EAGT,OAAOwnC,EAGX,IAAImU,EAAiB,KACjBC,EAAiB,OACjBC,EAAiB,QACjBC,EAAiB,QACjBC,EAAiB,aACjBC,EAAiB,QACjBC,EAAiB,YACjBC,EAAiB,gBACjBC,GAAiB,UACjBC,GAAiB,UACjBC,GAAiB,eAEjBC,GAAiB,MACjBC,GAAiB,WAEjBC,GAAiB,qBACjBC,GAAmB,0BAMnBC,GAAY,wJAEZC,GAAU,GAEd,SAASC,GAAe7B,EAAO8B,EAAOC,GAClCH,GAAQ5B,GAASp9B,EAAWk/B,GAASA,EAAQ,SAAUx/B,EAAU69B,GAC7D,OAAQ79B,GAAYy/B,EAAeA,EAAcD,GAIzD,SAASE,GAAuBhC,EAAOjN,GACnC,OAAKiH,EAAW4H,GAAS5B,GAIlB4B,GAAQ5B,GAAOjN,EAAO8I,QAAS9I,EAAO+J,SAHlC,IAAIpzC,OAQRu4C,GAR8BjC,EAQhBrpC,QAAQ,KAAM,IAAIA,QAAQ,uCAAuC,SAAUurC,EAASlM,EAAIC,EAAIkM,EAAIC,GACjH,OAAOpM,GAAMC,GAAMkM,GAAMC,OAIjC,SAASH,GAAYzT,GACjB,OAAOA,EAAE73B,QAAQ,yBAA0B,QAG/C,IAAI0rC,GAAS,GAEb,SAASC,GAAetC,EAAOzwB,GAC3B,IAAItqB,EAAG0K,EAAO4f,EASd,IARqB,kBAAVywB,IACPA,EAAQ,CAACA,IAET5kB,EAAS7L,KACT5f,EAAO,SAAUqP,EAAOjP,GACpBA,EAAMwf,GAAY6tB,EAAMp+B,KAG3B/Z,EAAI,EAAGA,EAAI+6C,EAAM96C,OAAQD,IAC1Bo9C,GAAOrC,EAAM/6C,IAAM0K,EAI3B,SAAS4yC,GAAmBvC,EAAOzwB,GAC/B+yB,GAActC,GAAO,SAAUhhC,EAAOjP,EAAOgjC,EAAQiN,GACjDjN,EAAOyP,GAAKzP,EAAOyP,IAAM,GACzBjzB,EAASvQ,EAAO+zB,EAAOyP,GAAIzP,EAAQiN,MAI3C,SAASyC,GAAwBzC,EAAOhhC,EAAO+zB,GAC9B,MAAT/zB,GAAiBg7B,EAAWqI,GAAQrC,IACpCqC,GAAOrC,GAAOhhC,EAAO+zB,EAAO2P,GAAI3P,EAAQiN,GA0DhD,SAAS2C,GAAWC,GAChB,OAAOC,GAAWD,GAAQ,IAAM,IAGpC,SAASC,GAAWD,GAChB,OAAQA,EAAO,IAAM,GAAKA,EAAO,MAAQ,GAAMA,EAAO,MAAQ,EA/ClE7C,EAAe,IAAK,EAAG,GAAG,WACtB,IAAIjR,EAAI3nC,KAAKy7C,OACb,OAAO9T,GAAK,KAAO,GAAKA,EAAI,IAAMA,KAGtCiR,EAAe,EAAG,CAAC,KAAM,GAAI,GAAG,WAC5B,OAAO54C,KAAKy7C,OAAS,OAGzB7C,EAAe,EAAG,CAAC,OAAU,GAAU,EAAG,QAC1CA,EAAe,EAAG,CAAC,QAAU,GAAU,EAAG,QAC1CA,EAAe,EAAG,CAAC,SAAU,GAAG,GAAO,EAAG,QAI1CrB,EAAa,OAAQ,KAIrBU,EAAgB,OAAQ,GAIxByC,GAAc,IAAUL,IACxBK,GAAc,KAAUZ,EAAWJ,GACnCgB,GAAc,OAAUR,GAAWN,GACnCc,GAAc,QAAUP,GAAWN,GACnCa,GAAc,SAAUP,GAAWN,GAEnCsB,GAAc,CAAC,QAAS,UAzCb,GA0CXA,GAAc,QAAQ,SAAUtjC,EAAOjP,GACnCA,EA3CO,GA2CwB,IAAjBiP,EAAM9Z,OAAe40C,EAAMgJ,kBAAkB9jC,GAASo+B,EAAMp+B,MAE9EsjC,GAAc,MAAM,SAAUtjC,EAAOjP,GACjCA,EA9CO,GA8CO+pC,EAAMgJ,kBAAkB9jC,MAE1CsjC,GAAc,KAAK,SAAUtjC,EAAOjP,GAChCA,EAjDO,GAiDOnC,SAASoR,EAAO,OAelC86B,EAAMgJ,kBAAoB,SAAU9jC,GAChC,OAAOo+B,EAAMp+B,IAAUo+B,EAAMp+B,GAAS,GAAK,KAAO,MAKtD,IAiEIyK,GAjEAs5B,GAAaC,GAAW,YAAY,GAMxC,SAASA,GAAYrE,EAAMsE,GACvB,OAAO,SAAU98C,GACb,OAAa,MAATA,GACA+8C,GAAM/7C,KAAMw3C,EAAMx4C,GAClB2zC,EAAMmD,aAAa91C,KAAM87C,GAClB97C,MAEAkX,GAAIlX,KAAMw3C,IAK7B,SAAStgC,GAAKiiC,EAAK3B,GACf,OAAO2B,EAAIjF,UACPiF,EAAI5E,GAAG,OAAS4E,EAAI1D,OAAS,MAAQ,IAAM+B,KAAUjJ,IAG7D,SAASwN,GAAO5C,EAAK3B,EAAMx4C,GACnBm6C,EAAIjF,YAAcrV,MAAM7/B,KACX,aAATw4C,GAAuBkE,GAAWvC,EAAIsC,SAA2B,IAAhBtC,EAAI6C,SAAgC,KAAf7C,EAAI/T,OAC1E+T,EAAI5E,GAAG,OAAS4E,EAAI1D,OAAS,MAAQ,IAAM+B,GAAMx4C,EAAOm6C,EAAI6C,QAASC,GAAYj9C,EAAOm6C,EAAI6C,UAG5F7C,EAAI5E,GAAG,OAAS4E,EAAI1D,OAAS,MAAQ,IAAM+B,GAAMx4C,IAqD7D,SAASi9C,GAAYR,EAAMO,GACvB,GAAInd,MAAM4c,IAAS5c,MAAMmd,GACrB,OAAOzN,IAEX,IAzBY7G,EAyBRwU,GAAeF,GAzBPtU,EAyBc,IAxBRA,GAAKA,EA0BvB,OADA+T,IAASO,EAAQE,GAAY,GACT,IAAbA,EAAkBR,GAAWD,GAAQ,GAAK,GAAO,GAAKS,EAAW,EAAI,EApB5E55B,GADA1Y,MAAMlL,UAAU4jB,QACN1Y,MAAMlL,UAAU4jB,QAEhB,SAAU8jB,GAEhB,IAAItoC,EACJ,IAAKA,EAAI,EAAGA,EAAIkC,KAAKjC,SAAUD,EAC3B,GAAIkC,KAAKlC,KAAOsoC,EACZ,OAAOtoC,EAGf,OAAQ,GAehB86C,EAAe,IAAK,CAAC,KAAM,GAAI,MAAM,WACjC,OAAO54C,KAAKg8C,QAAU,KAG1BpD,EAAe,MAAO,EAAG,GAAG,SAAUtT,GAClC,OAAOtlC,KAAKg5C,aAAamD,YAAYn8C,KAAMslC,MAG/CsT,EAAe,OAAQ,EAAG,GAAG,SAAUtT,GACnC,OAAOtlC,KAAKg5C,aAAaoD,OAAOp8C,KAAMslC,MAK1CiS,EAAa,QAAS,KAItBU,EAAgB,QAAS,GAIzByC,GAAc,IAAQZ,GACtBY,GAAc,KAAQZ,EAAWJ,GACjCgB,GAAc,OAAQ,SAAUv/B,EAAUkqB,GACtC,OAAOA,EAAOgX,iBAAiBlhC,MAEnCu/B,GAAc,QAAQ,SAAUv/B,EAAUkqB,GACtC,OAAOA,EAAOiX,YAAYnhC,MAG9BggC,GAAc,CAAC,IAAK,OAAO,SAAUtjC,EAAOjP,GACxCA,EAlMQ,GAkMOqtC,EAAMp+B,GAAS,KAGlCsjC,GAAc,CAAC,MAAO,SAAS,SAAUtjC,EAAOjP,EAAOgjC,EAAQiN,GAC3D,IAAImD,EAAQpQ,EAAO+J,QAAQ4G,YAAY1kC,EAAOghC,EAAOjN,EAAO8I,SAE/C,MAATsH,EACApzC,EAzMI,GAyMWozC,EAEf9I,EAAgBtH,GAAQ8H,aAAe77B,KAM/C,IAAI2kC,GAAmB,gCACnBC,GAAsB,wFAAwF9uC,MAAM,KAUpH+uC,GAA2B,kDAAkD/uC,MAAM,KAUvF,SAASgvC,GAAkBC,EAAWtX,EAAQyN,GAC1C,IAAIj1C,EAAG++C,EAAI1D,EAAK2D,EAAMF,EAAUG,oBAChC,IAAK/8C,KAAKg9C,aAKN,IAHAh9C,KAAKg9C,aAAe,GACpBh9C,KAAKi9C,iBAAmB,GACxBj9C,KAAKk9C,kBAAoB,GACpBp/C,EAAI,EAAGA,EAAI,KAAMA,EAClBq7C,EAAMrG,EAAU,CAAC,IAAMh1C,IACvBkC,KAAKk9C,kBAAkBp/C,GAAKkC,KAAKm8C,YAAYhD,EAAK,IAAI4D,oBACtD/8C,KAAKi9C,iBAAiBn/C,GAAKkC,KAAKo8C,OAAOjD,EAAK,IAAI4D,oBAIxD,OAAIhK,EACe,QAAXzN,GAEe,KADfuX,EAAKv6B,GAAQ/iB,KAAKS,KAAKk9C,kBAAmBJ,IACvBD,EAAK,MAGT,KADfA,EAAKv6B,GAAQ/iB,KAAKS,KAAKi9C,iBAAkBH,IACtBD,EAAK,KAGb,QAAXvX,GAEY,KADZuX,EAAKv6B,GAAQ/iB,KAAKS,KAAKk9C,kBAAmBJ,MAK3B,KADfD,EAAKv6B,GAAQ/iB,KAAKS,KAAKi9C,iBAAkBH,IAF9BD,EAGa,MAGZ,KADZA,EAAKv6B,GAAQ/iB,KAAKS,KAAKi9C,iBAAkBH,MAK1B,KADfD,EAAKv6B,GAAQ/iB,KAAKS,KAAKk9C,kBAAmBJ,IAF/BD,EAGa,KA6CpC,SAASM,GAAUhE,EAAKn6C,GACpB,IAAIo+C,EAEJ,IAAKjE,EAAIjF,UAEL,OAAOiF,EAGX,GAAqB,kBAAVn6C,EACP,GAAI,QAAQyN,KAAKzN,GACbA,EAAQi3C,EAAMj3C,QAId,IAAKi1B,EAFLj1B,EAAQm6C,EAAIH,aAAauD,YAAYv9C,IAGjC,OAAOm6C,EAOnB,OAFAiE,EAAa/uC,KAAKsD,IAAIwnC,EAAI/T,OAAQ6W,GAAY9C,EAAIsC,OAAQz8C,IAC1Dm6C,EAAI5E,GAAG,OAAS4E,EAAI1D,OAAS,MAAQ,IAAM,SAASz2C,EAAOo+C,GACpDjE,EAGX,SAASkE,GAAar+C,GAClB,OAAa,MAATA,GACAm+C,GAASn9C,KAAMhB,GACf2zC,EAAMmD,aAAa91C,MAAM,GAClBA,MAEAkX,GAAIlX,KAAM,SAQzB,IAAIs9C,GAA0B9C,GAoB1B+C,GAAqB/C,GAoBzB,SAASgD,KACL,SAASC,EAAUrW,EAAGQ,GAClB,OAAOA,EAAE7pC,OAASqpC,EAAErpC,OAGxB,IACID,EAAGq7C,EADHuE,EAAc,GAAIC,EAAa,GAAIC,EAAc,GAErD,IAAK9/C,EAAI,EAAGA,EAAI,GAAIA,IAEhBq7C,EAAMrG,EAAU,CAAC,IAAMh1C,IACvB4/C,EAAY7nC,KAAK7V,KAAKm8C,YAAYhD,EAAK,KACvCwE,EAAW9nC,KAAK7V,KAAKo8C,OAAOjD,EAAK,KACjCyE,EAAY/nC,KAAK7V,KAAKo8C,OAAOjD,EAAK,KAClCyE,EAAY/nC,KAAK7V,KAAKm8C,YAAYhD,EAAK,KAO3C,IAHAuE,EAAYh8B,KAAK+7B,GACjBE,EAAWj8B,KAAK+7B,GAChBG,EAAYl8B,KAAK+7B,GACZ3/C,EAAI,EAAGA,EAAI,GAAIA,IAChB4/C,EAAY5/C,GAAKg9C,GAAY4C,EAAY5/C,IACzC6/C,EAAW7/C,GAAKg9C,GAAY6C,EAAW7/C,IAE3C,IAAKA,EAAI,EAAGA,EAAI,GAAIA,IAChB8/C,EAAY9/C,GAAKg9C,GAAY8C,EAAY9/C,IAG7CkC,KAAK69C,aAAe,IAAIt7C,OAAO,KAAOq7C,EAAYp4C,KAAK,KAAO,IAAK,KACnExF,KAAK89C,kBAAoB99C,KAAK69C,aAC9B79C,KAAK+9C,mBAAqB,IAAIx7C,OAAO,KAAOo7C,EAAWn4C,KAAK,KAAO,IAAK,KACxExF,KAAKg+C,wBAA0B,IAAIz7C,OAAO,KAAOm7C,EAAYl4C,KAAK,KAAO,IAAK,KAGlF,SAASy4C,GAAYtW,EAAG+C,EAAGG,EAAGqT,EAAGC,EAAG9W,EAAG+W,GAGnC,IAAIhZ,EAYJ,OAVIuC,EAAI,KAAOA,GAAK,GAEhBvC,EAAO,IAAIj3B,KAAKw5B,EAAI,IAAK+C,EAAGG,EAAGqT,EAAGC,EAAG9W,EAAG+W,GACpC/sC,SAAS+zB,EAAKiZ,gBACdjZ,EAAKkZ,YAAY3W,IAGrBvC,EAAO,IAAIj3B,KAAKw5B,EAAG+C,EAAGG,EAAGqT,EAAGC,EAAG9W,EAAG+W,GAG/BhZ,EAGX,SAASmZ,GAAe5W,GACpB,IAAIvC,EAEJ,GAAIuC,EAAI,KAAOA,GAAK,EAAG,CACnB,IAAIj/B,EAAOkB,MAAMlL,UAAUunB,MAAM1mB,KAAKY,WAEtCuI,EAAK,GAAKi/B,EAAI,IACdvC,EAAO,IAAIj3B,KAAKA,KAAKqwC,IAAIp+C,MAAM,KAAMsI,IACjC2I,SAAS+zB,EAAKqZ,mBACdrZ,EAAKsZ,eAAe/W,QAGxBvC,EAAO,IAAIj3B,KAAKA,KAAKqwC,IAAIp+C,MAAM,KAAMD,YAGzC,OAAOilC,EAIX,SAASuZ,GAAgBlD,EAAMmD,EAAKC,GAChC,IACIC,EAAM,EAAIF,EAAMC,EAIpB,QAFa,EAAIN,GAAc9C,EAAM,EAAGqD,GAAKC,YAAcH,GAAO,EAElDE,EAAM,EAI1B,SAASE,GAAmBvD,EAAMwD,EAAMC,EAASN,EAAKC,GAClD,IAGIM,EAASC,EADTC,EAAY,EAAI,GAAKJ,EAAO,IAFZ,EAAIC,EAAUN,GAAO,EACxBD,GAAgBlD,EAAMmD,EAAKC,GAe5C,OAXIQ,GAAa,EAEbD,EAAe5D,GADf2D,EAAU1D,EAAO,GACoB4D,EAC9BA,EAAY7D,GAAWC,IAC9B0D,EAAU1D,EAAO,EACjB2D,EAAeC,EAAY7D,GAAWC,KAEtC0D,EAAU1D,EACV2D,EAAeC,GAGZ,CACH5D,KAAM0D,EACNE,UAAWD,GAInB,SAASE,GAAWnG,EAAKyF,EAAKC,GAC1B,IAEIU,EAASJ,EAFTK,EAAab,GAAgBxF,EAAIsC,OAAQmD,EAAKC,GAC9CI,EAAO5wC,KAAK0C,OAAOooC,EAAIkG,YAAcG,EAAa,GAAK,GAAK,EAchE,OAXIP,EAAO,EAEPM,EAAUN,EAAOQ,GADjBN,EAAUhG,EAAIsC,OAAS,EACemD,EAAKC,GACpCI,EAAOQ,GAAYtG,EAAIsC,OAAQmD,EAAKC,IAC3CU,EAAUN,EAAOQ,GAAYtG,EAAIsC,OAAQmD,EAAKC,GAC9CM,EAAUhG,EAAIsC,OAAS,IAEvB0D,EAAUhG,EAAIsC,OACd8D,EAAUN,GAGP,CACHA,KAAMM,EACN9D,KAAM0D,GAId,SAASM,GAAYhE,EAAMmD,EAAKC,GAC5B,IAAIW,EAAab,GAAgBlD,EAAMmD,EAAKC,GACxCa,EAAiBf,GAAgBlD,EAAO,EAAGmD,EAAKC,GACpD,OAAQrD,GAAWC,GAAQ+D,EAAaE,GAAkB,EAoJ9D,SAASC,GAAeC,EAAIr0C,GACxB,OAAOq0C,EAAG35B,MAAM1a,EAAG,GAAGutB,OAAO8mB,EAAG35B,MAAM,EAAG1a,IAhJ7CqtC,EAAe,IAAK,CAAC,KAAM,GAAI,KAAM,QACrCA,EAAe,IAAK,CAAC,KAAM,GAAI,KAAM,WAIrCrB,EAAa,OAAQ,KACrBA,EAAa,UAAW,KAIxBU,EAAgB,OAAQ,GACxBA,EAAgB,UAAW,GAI3ByC,GAAc,IAAMZ,GACpBY,GAAc,KAAMZ,EAAWJ,GAC/BgB,GAAc,IAAMZ,GACpBY,GAAc,KAAMZ,EAAWJ,GAE/B0B,GAAkB,CAAC,IAAK,KAAM,IAAK,OAAO,SAAUvjC,EAAOonC,EAAMrT,EAAQiN,GACrEoG,EAAKpG,EAAM9G,OAAO,EAAG,IAAMkE,EAAMp+B,MAsCrC+gC,EAAe,IAAK,EAAG,KAAM,OAE7BA,EAAe,KAAM,EAAG,GAAG,SAAUtT,GACjC,OAAOtlC,KAAKg5C,aAAa6G,YAAY7/C,KAAMslC,MAG/CsT,EAAe,MAAO,EAAG,GAAG,SAAUtT,GAClC,OAAOtlC,KAAKg5C,aAAa8G,cAAc9/C,KAAMslC,MAGjDsT,EAAe,OAAQ,EAAG,GAAG,SAAUtT,GACnC,OAAOtlC,KAAKg5C,aAAa+G,SAAS//C,KAAMslC,MAG5CsT,EAAe,IAAK,EAAG,EAAG,WAC1BA,EAAe,IAAK,EAAG,EAAG,cAI1BrB,EAAa,MAAO,KACpBA,EAAa,UAAW,KACxBA,EAAa,aAAc,KAG3BU,EAAgB,MAAO,IACvBA,EAAgB,UAAW,IAC3BA,EAAgB,aAAc,IAI9ByC,GAAc,IAAQZ,GACtBY,GAAc,IAAQZ,GACtBY,GAAc,IAAQZ,GACtBY,GAAc,MAAQ,SAAUv/B,EAAUkqB,GACtC,OAAOA,EAAO2a,iBAAiB7kC,MAEnCu/B,GAAc,OAAS,SAAUv/B,EAAUkqB,GACvC,OAAOA,EAAO4a,mBAAmB9kC,MAErCu/B,GAAc,QAAU,SAAUv/B,EAAUkqB,GACxC,OAAOA,EAAO6a,cAAc/kC,MAGhCigC,GAAkB,CAAC,KAAM,MAAO,SAAS,SAAUvjC,EAAOonC,EAAMrT,EAAQiN,GACpE,IAAIqG,EAAUtT,EAAO+J,QAAQwK,cAActoC,EAAOghC,EAAOjN,EAAO8I,SAEjD,MAAXwK,EACAD,EAAKpU,EAAIqU,EAEThM,EAAgBtH,GAAQ6I,eAAiB58B,KAIjDujC,GAAkB,CAAC,IAAK,IAAK,MAAM,SAAUvjC,EAAOonC,EAAMrT,EAAQiN,GAC9DoG,EAAKpG,GAAS5C,EAAMp+B,MAkCxB,IAAIuoC,GAAwB,2DAA2DzyC,MAAM,KAQzF0yC,GAA6B,8BAA8B1yC,MAAM,KAMjE2yC,GAA2B,uBAAuB3yC,MAAM,KAM5D,SAAS4yC,GAAoBC,EAAalb,EAAQyN,GAC9C,IAAIj1C,EAAG++C,EAAI1D,EAAK2D,EAAM0D,EAAYzD,oBAClC,IAAK/8C,KAAKygD,eAKN,IAJAzgD,KAAKygD,eAAiB,GACtBzgD,KAAK0gD,oBAAsB,GAC3B1gD,KAAK2gD,kBAAoB,GAEpB7iD,EAAI,EAAGA,EAAI,IAAKA,EACjBq7C,EAAMrG,EAAU,CAAC,IAAM,IAAI8N,IAAI9iD,GAC/BkC,KAAK2gD,kBAAkB7iD,GAAKkC,KAAK6/C,YAAY1G,EAAK,IAAI4D,oBACtD/8C,KAAK0gD,oBAAoB5iD,GAAKkC,KAAK8/C,cAAc3G,EAAK,IAAI4D,oBAC1D/8C,KAAKygD,eAAe3iD,GAAKkC,KAAK+/C,SAAS5G,EAAK,IAAI4D,oBAIxD,OAAIhK,EACe,SAAXzN,GAEe,KADfuX,EAAKv6B,GAAQ/iB,KAAKS,KAAKygD,eAAgB3D,IACpBD,EAAK,KACN,QAAXvX,GAEQ,KADfuX,EAAKv6B,GAAQ/iB,KAAKS,KAAK0gD,oBAAqB5D,IACzBD,EAAK,MAGT,KADfA,EAAKv6B,GAAQ/iB,KAAKS,KAAK2gD,kBAAmB7D,IACvBD,EAAK,KAGb,SAAXvX,GAEY,KADZuX,EAAKv6B,GAAQ/iB,KAAKS,KAAKygD,eAAgB3D,MAK3B,KADZD,EAAKv6B,GAAQ/iB,KAAKS,KAAK0gD,oBAAqB5D,MAK7B,KADfD,EAAKv6B,GAAQ/iB,KAAKS,KAAK2gD,kBAAmB7D,IAN/BD,EAOa,KACN,QAAXvX,GAEK,KADZuX,EAAKv6B,GAAQ/iB,KAAKS,KAAK0gD,oBAAqB5D,MAKhC,KADZD,EAAKv6B,GAAQ/iB,KAAKS,KAAKygD,eAAgB3D,MAKxB,KADfD,EAAKv6B,GAAQ/iB,KAAKS,KAAK2gD,kBAAmB7D,IAN/BD,EAOa,MAGZ,KADZA,EAAKv6B,GAAQ/iB,KAAKS,KAAK2gD,kBAAmB7D,MAK9B,KADZD,EAAKv6B,GAAQ/iB,KAAKS,KAAKygD,eAAgB3D,MAKxB,KADfD,EAAKv6B,GAAQ/iB,KAAKS,KAAK0gD,oBAAqB5D,IANjCD,EAOa,KAqFpC,IAAIgE,GAAuBrG,GAoBvBsG,GAA4BtG,GAoB5BuG,GAA0BvG,GAqB9B,SAASwG,KACL,SAASvD,EAAUrW,EAAGQ,GAClB,OAAOA,EAAE7pC,OAASqpC,EAAErpC,OAGxB,IACID,EAAGq7C,EAAK8H,EAAMC,EAAQC,EADtBC,EAAY,GAAI1D,EAAc,GAAIC,EAAa,GAAIC,EAAc,GAErE,IAAK9/C,EAAI,EAAGA,EAAI,EAAGA,IAEfq7C,EAAMrG,EAAU,CAAC,IAAM,IAAI8N,IAAI9iD,GAC/BmjD,EAAOjhD,KAAK6/C,YAAY1G,EAAK,IAC7B+H,EAASlhD,KAAK8/C,cAAc3G,EAAK,IACjCgI,EAAQnhD,KAAK+/C,SAAS5G,EAAK,IAC3BiI,EAAUvrC,KAAKorC,GACfvD,EAAY7nC,KAAKqrC,GACjBvD,EAAW9nC,KAAKsrC,GAChBvD,EAAY/nC,KAAKorC,GACjBrD,EAAY/nC,KAAKqrC,GACjBtD,EAAY/nC,KAAKsrC,GAQrB,IAJAC,EAAU1/B,KAAK+7B,GACfC,EAAYh8B,KAAK+7B,GACjBE,EAAWj8B,KAAK+7B,GAChBG,EAAYl8B,KAAK+7B,GACZ3/C,EAAI,EAAGA,EAAI,EAAGA,IACf4/C,EAAY5/C,GAAKg9C,GAAY4C,EAAY5/C,IACzC6/C,EAAW7/C,GAAKg9C,GAAY6C,EAAW7/C,IACvC8/C,EAAY9/C,GAAKg9C,GAAY8C,EAAY9/C,IAG7CkC,KAAKqhD,eAAiB,IAAI9+C,OAAO,KAAOq7C,EAAYp4C,KAAK,KAAO,IAAK,KACrExF,KAAKshD,oBAAsBthD,KAAKqhD,eAChCrhD,KAAKuhD,kBAAoBvhD,KAAKqhD,eAE9BrhD,KAAKwhD,qBAAuB,IAAIj/C,OAAO,KAAOo7C,EAAWn4C,KAAK,KAAO,IAAK,KAC1ExF,KAAKyhD,0BAA4B,IAAIl/C,OAAO,KAAOm7C,EAAYl4C,KAAK,KAAO,IAAK,KAChFxF,KAAK0hD,wBAA0B,IAAIn/C,OAAO,KAAO6+C,EAAU57C,KAAK,KAAO,IAAK,KAKhF,SAASm8C,KACL,OAAO3hD,KAAK4hD,QAAU,IAAM,GA6BhC,SAAS7N,GAAU8E,EAAOgJ,GACtBjJ,EAAeC,EAAO,EAAG,GAAG,WACxB,OAAO74C,KAAKg5C,aAAajF,SAAS/zC,KAAK4hD,QAAS5hD,KAAK8hD,UAAWD,MAgBxE,SAASE,GAAe5mC,EAAUkqB,GAC9B,OAAOA,EAAO2c,eAzClBpJ,EAAe,IAAK,CAAC,KAAM,GAAI,EAAG,QAClCA,EAAe,IAAK,CAAC,KAAM,GAAI,EAAG+I,IAClC/I,EAAe,IAAK,CAAC,KAAM,GAAI,GAN/B,WACI,OAAO54C,KAAK4hD,SAAW,MAO3BhJ,EAAe,MAAO,EAAG,GAAG,WACxB,MAAO,GAAK+I,GAAQvhD,MAAMJ,MAAQm4C,EAASn4C,KAAK8hD,UAAW,MAG/DlJ,EAAe,QAAS,EAAG,GAAG,WAC1B,MAAO,GAAK+I,GAAQvhD,MAAMJ,MAAQm4C,EAASn4C,KAAK8hD,UAAW,GACvD3J,EAASn4C,KAAKiiD,UAAW,MAGjCrJ,EAAe,MAAO,EAAG,GAAG,WACxB,MAAO,GAAK54C,KAAK4hD,QAAUzJ,EAASn4C,KAAK8hD,UAAW,MAGxDlJ,EAAe,QAAS,EAAG,GAAG,WAC1B,MAAO,GAAK54C,KAAK4hD,QAAUzJ,EAASn4C,KAAK8hD,UAAW,GAChD3J,EAASn4C,KAAKiiD,UAAW,MASjClO,GAAS,KAAK,GACdA,GAAS,KAAK,GAIdwD,EAAa,OAAQ,KAGrBU,EAAgB,OAAQ,IAQxByC,GAAc,IAAMqH,IACpBrH,GAAc,IAAMqH,IACpBrH,GAAc,IAAMZ,GACpBY,GAAc,IAAMZ,GACpBY,GAAc,IAAMZ,GACpBY,GAAc,KAAMZ,EAAWJ,GAC/BgB,GAAc,KAAMZ,EAAWJ,GAC/BgB,GAAc,KAAMZ,EAAWJ,GAE/BgB,GAAc,MAAOX,GACrBW,GAAc,QAASV,GACvBU,GAAc,MAAOX,GACrBW,GAAc,QAASV,GAEvBmB,GAAc,CAAC,IAAK,MA3+BT,GA4+BXA,GAAc,CAAC,IAAK,OAAO,SAAUtjC,EAAOjP,EAAOgjC,GAC/C,IAAIsW,EAASjM,EAAMp+B,GACnBjP,EA9+BO,GA8+BkB,KAAXs5C,EAAgB,EAAIA,KAEtC/G,GAAc,CAAC,IAAK,MAAM,SAAUtjC,EAAOjP,EAAOgjC,GAC9CA,EAAOuW,MAAQvW,EAAO+J,QAAQyM,KAAKvqC,GACnC+zB,EAAOyW,UAAYxqC,KAEvBsjC,GAAc,CAAC,IAAK,OAAO,SAAUtjC,EAAOjP,EAAOgjC,GAC/ChjC,EAr/BO,GAq/BOqtC,EAAMp+B,GACpBq7B,EAAgBtH,GAAQ+I,SAAU,KAEtCwG,GAAc,OAAO,SAAUtjC,EAAOjP,EAAOgjC,GACzC,IAAI0W,EAAMzqC,EAAM9Z,OAAS,EACzB6K,EA1/BO,GA0/BOqtC,EAAMp+B,EAAMk6B,OAAO,EAAGuQ,IACpC15C,EA1/BS,GA0/BOqtC,EAAMp+B,EAAMk6B,OAAOuQ,IACnCpP,EAAgBtH,GAAQ+I,SAAU,KAEtCwG,GAAc,SAAS,SAAUtjC,EAAOjP,EAAOgjC,GAC3C,IAAI2W,EAAO1qC,EAAM9Z,OAAS,EACtBykD,EAAO3qC,EAAM9Z,OAAS,EAC1B6K,EAjgCO,GAigCOqtC,EAAMp+B,EAAMk6B,OAAO,EAAGwQ,IACpC35C,EAjgCS,GAigCOqtC,EAAMp+B,EAAMk6B,OAAOwQ,EAAM,IACzC35C,EAjgCS,GAigCOqtC,EAAMp+B,EAAMk6B,OAAOyQ,IACnCtP,EAAgBtH,GAAQ+I,SAAU,KAEtCwG,GAAc,OAAO,SAAUtjC,EAAOjP,EAAOgjC,GACzC,IAAI0W,EAAMzqC,EAAM9Z,OAAS,EACzB6K,EAxgCO,GAwgCOqtC,EAAMp+B,EAAMk6B,OAAO,EAAGuQ,IACpC15C,EAxgCS,GAwgCOqtC,EAAMp+B,EAAMk6B,OAAOuQ,OAEvCnH,GAAc,SAAS,SAAUtjC,EAAOjP,EAAOgjC,GAC3C,IAAI2W,EAAO1qC,EAAM9Z,OAAS,EACtBykD,EAAO3qC,EAAM9Z,OAAS,EAC1B6K,EA9gCO,GA8gCOqtC,EAAMp+B,EAAMk6B,OAAO,EAAGwQ,IACpC35C,EA9gCS,GA8gCOqtC,EAAMp+B,EAAMk6B,OAAOwQ,EAAM,IACzC35C,EA9gCS,GA8gCOqtC,EAAMp+B,EAAMk6B,OAAOyQ,OA2BvC,IAyBIC,GAzBAC,GAAa7G,GAAW,SAAS,GAEjC8G,GAAa,CACbC,SAj2CkB,CAClBC,QAAU,gBACVC,QAAU,mBACVC,SAAW,eACXC,QAAU,oBACVC,SAAW,sBACXC,SAAW,KA41CX1J,eAp1CwB,CACxB2J,IAAO,YACPC,GAAO,SACPC,EAAO,aACPC,GAAO,eACPC,IAAO,sBACPC,KAAO,6BA+0CPlK,YA7zCqB,eA8zCrBP,QAxzCiB,KAyzCjB0K,uBAxzCgC,UAyzChCC,aAnzCsB,CACtBC,OAAS,QACTC,KAAS,SACTvc,EAAK,gBACLwc,GAAK,aACLnZ,EAAK,WACLoZ,GAAK,aACL5F,EAAK,UACL6F,GAAK,WACLlZ,EAAK,QACLmZ,GAAK,UACL7F,EAAK,UACL8F,GAAK,YACLtc,EAAK,SACLuc,GAAK,YAuyCL9H,OAAQK,GACRN,YAAaO,GAEbuC,KA9gBoB,CACpBL,IAAM,EACNC,IAAM,GA8gBNkB,SAAUK,GACVP,YAAaS,GACbR,cAAeO,GAEf8D,cAnC6B,iBAuC7BC,GAAU,GACVC,GAAiB,GAGrB,SAASC,GAAgBhmD,GACrB,OAAOA,EAAMA,EAAI43B,cAAc1mB,QAAQ,IAAK,KAAOlR,EA8BvD,SAASimD,GAAWvmC,GAChB,IAAIwmC,EAAY,KAEhB,IAAKJ,GAAQpmC,IAA4B,qBAAX7W,GACtBA,GAAUA,EAAOH,QACrB,IACIw9C,EAAY/B,GAAagC,OAEzBC,kGACAC,GAAmBH,GACrB,MAAO78C,IAEb,OAAOy8C,GAAQpmC,GAMnB,SAAS2mC,GAAoBrmD,EAAKwL,GAC9B,IAAIqL,EAqBJ,OApBI7W,KAEI6W,EADA+pB,EAAYp1B,GACL86C,GAAUtmD,GAGVumD,GAAavmD,EAAKwL,IAKzB24C,GAAettC,EAGU,qBAAb0hC,SAA6BA,QAAQH,MAE7CG,QAAQH,KAAK,UAAYp4C,EAAO,2CAKrCmkD,GAAagC,MAGxB,SAASI,GAAc7mC,EAAM4tB,GACzB,GAAe,OAAXA,EAAiB,CACjB,IAAIvG,EAAQ8R,EAAewL,GAE3B,GADA/W,EAAOkZ,KAAO9mC,EACO,MAAjBomC,GAAQpmC,GACRi5B,EAAgB,uBACR,2OAIRE,EAAeiN,GAAQpmC,GAAM+mC,aAC1B,GAA2B,MAAvBnZ,EAAOoZ,aACd,GAAoC,MAAhCZ,GAAQxY,EAAOoZ,cACf7N,EAAeiN,GAAQxY,EAAOoZ,cAAcD,YACzC,CAEH,GAAc,OADd1f,EAASkf,GAAW3Y,EAAOoZ,eAWvB,OAPKX,GAAezY,EAAOoZ,gBACvBX,GAAezY,EAAOoZ,cAAgB,IAE1CX,GAAezY,EAAOoZ,cAAcnvC,KAAK,CACrCmI,KAAMA,EACN4tB,OAAQA,IAEL,KATPuL,EAAe9R,EAAO0f,QA2BlC,OAdAX,GAAQpmC,GAAQ,IAAIq5B,EAAOH,EAAaC,EAAcvL,IAElDyY,GAAermC,IACfqmC,GAAermC,GAAMnR,SAAQ,SAAU66B,GACnCmd,GAAand,EAAE1pB,KAAM0pB,EAAEkE,WAO/B+Y,GAAmB3mC,GAGZomC,GAAQpmC,GAIf,cADOomC,GAAQpmC,GACR,KAiCf,SAAS4mC,GAAWtmD,GAChB,IAAI+mC,EAMJ,GAJI/mC,GAAOA,EAAIq3C,SAAWr3C,EAAIq3C,QAAQ8O,QAClCnmD,EAAMA,EAAIq3C,QAAQ8O,QAGjBnmD,EACD,OAAOmkD,GAGX,IAAKnvC,EAAQhV,GAAM,CAGf,GADA+mC,EAASkf,GAAWjmD,GAEhB,OAAO+mC,EAEX/mC,EAAM,CAACA,GAGX,OAxKJ,SAAsB2mD,GAGlB,IAFA,IAAW1d,EAAGjT,EAAM+Q,EAAQ13B,EAAxB7P,EAAI,EAEDA,EAAImnD,EAAMlnD,QAAQ,CAKrB,IAHAwpC,GADA55B,EAAQ22C,GAAgBW,EAAMnnD,IAAI6P,MAAM,MAC9B5P,OAEVu2B,GADAA,EAAOgwB,GAAgBW,EAAMnnD,EAAI,KACnBw2B,EAAK3mB,MAAM,KAAO,KACzB45B,EAAI,GAAG,CAEV,GADAlC,EAASkf,GAAW52C,EAAMsY,MAAM,EAAGshB,GAAG/hC,KAAK,MAEvC,OAAO6/B,EAEX,GAAI/Q,GAAQA,EAAKv2B,QAAUwpC,GAAK6O,EAAczoC,EAAO2mB,GAAM,IAASiT,EAAI,EAEpE,MAEJA,IAEJzpC,IAEJ,OAAO2kD,GAmJAyC,CAAa5mD,GAOxB,SAAS6mD,GAAeza,GACpB,IAAI6I,EACAnM,EAAIsD,EAAE6Q,GAyBV,OAvBInU,IAAsC,IAAjC8L,EAAgBxI,GAAG6I,WACxBA,EACInM,EApwCA,GAowCiB,GAAKA,EApwCtB,GAowCuC,GApwCvC,EAqwCAA,EApwCD,GAowCkB,GAAKA,EApwCvB,GAowCwC6U,GAAY7U,EAtwCpD,GAswC6DA,EArwC5D,IACD,EAqwCCA,EApwCD,GAowCkB,GAAKA,EApwCvB,GAowCwC,IAAmB,KAAZA,EApwC/C,KAowCgF,IAAdA,EAnwChE,IAmwCiG,IAAdA,EAlwCnF,IAkwCyH,IAAnBA,EAjwCjG,IAHP,EAqwCCA,EApwCC,GAowCgB,GAAKA,EApwCrB,GAowCsC,GApwCtC,EAqwCDA,EApwCC,GAowCgB,GAAKA,EApwCrB,GAowCsC,GApwCtC,EAqwCDA,EApwCM,GAowCW,GAAKA,EApwChB,GAowCiC,IApwCjC,GAqwCL,EAED8L,EAAgBxI,GAAG0a,qBAAuB7R,EA7wC3C,GA6wC8DA,EA3wC9D,KA4wCCA,EA5wCD,GA8wCCL,EAAgBxI,GAAG2a,iBAAgC,IAAd9R,IACrCA,EA1wCD,GA4wCCL,EAAgBxI,GAAG4a,mBAAkC,IAAd/R,IACvCA,EA5wCE,GA+wCNL,EAAgBxI,GAAG6I,SAAWA,GAG3B7I,EAIX,SAASz8B,GAASm5B,EAAGQ,EAAGE,GACpB,OAAS,MAALV,EACOA,EAEF,MAALQ,EACOA,EAEJE,EAgBX,SAASyd,GAAiB3Z,GACtB,IAAI9tC,EAAGsnC,EAAkBogB,EAAaC,EAAiBC,EAA1C7tC,EAAQ,GAErB,IAAI+zB,EAAO2I,GAAX,CA6BA,IAzBAiR,EApBJ,SAA0B5Z,GAEtB,IAAI+Z,EAAW,IAAIx3C,KAAKwkC,EAAMliC,OAC9B,OAAIm7B,EAAOga,QACA,CAACD,EAASlH,iBAAkBkH,EAASE,cAAeF,EAASG,cAEjE,CAACH,EAAStH,cAAesH,EAASI,WAAYJ,EAASK,WAchDC,CAAiBra,GAG3BA,EAAOyP,IAAyB,MAAnBzP,EAAO2P,GA7zCjB,IA6zCyD,MAApB3P,EAAO2P,GA9zC3C,IAy3CZ,SAA+B3P,GAC3B,IAAIsa,EAAGC,EAAUlH,EAAMC,EAASN,EAAKC,EAAKve,EAAM8lB,EAGhD,GAAY,OADZF,EAAIta,EAAOyP,IACLgL,IAAqB,MAAPH,EAAEI,GAAoB,MAAPJ,EAAEK,EACjC3H,EAAM,EACNC,EAAM,EAMNsH,EAAWl4C,GAASi4C,EAAEG,GAAIza,EAAO2P,GAt4C9B,GAs4CwC+D,GAAWkH,KAAe,EAAG,GAAG/K,MAC3EwD,EAAOhxC,GAASi4C,EAAEI,EAAG,KACrBpH,EAAUjxC,GAASi4C,EAAEK,EAAG,IACV,GAAKrH,EAAU,KACzBkH,GAAkB,OAEnB,CACHxH,EAAMhT,EAAO+J,QAAQ8Q,MAAM7H,IAC3BC,EAAMjT,EAAO+J,QAAQ8Q,MAAM5H,IAE3B,IAAI6H,EAAUpH,GAAWkH,KAAe5H,EAAKC,GAE7CsH,EAAWl4C,GAASi4C,EAAES,GAAI/a,EAAO2P,GAl5C9B,GAk5CwCmL,EAAQjL,MAGnDwD,EAAOhxC,GAASi4C,EAAEA,EAAGQ,EAAQzH,MAElB,MAAPiH,EAAErb,IAEFqU,EAAUgH,EAAErb,GACE,GAAKqU,EAAU,KACzBkH,GAAkB,GAER,MAAPF,EAAEv+C,GAETu3C,EAAUgH,EAAEv+C,EAAIi3C,GACZsH,EAAEv+C,EAAI,GAAKu+C,EAAEv+C,EAAI,KACjBy+C,GAAkB,IAItBlH,EAAUN,EAGdK,EAAO,GAAKA,EAAOQ,GAAY0G,EAAUvH,EAAKC,GAC9C3L,EAAgBtH,GAAQyZ,gBAAiB,EACf,MAAnBe,EACPlT,EAAgBtH,GAAQ0Z,kBAAmB,GAE3ChlB,EAAO0e,GAAmBmH,EAAUlH,EAAMC,EAASN,EAAKC,GACxDjT,EAAO2P,GA96CJ,GA86Cejb,EAAKmb,KACvB7P,EAAOgb,WAAatmB,EAAK+e,WA/GzBwH,CAAsBjb,GAID,MAArBA,EAAOgb,aACPlB,EAAYz3C,GAAS29B,EAAO2P,GAr0CzB,GAq0CmCiK,EAr0CnC,KAu0CC5Z,EAAOgb,WAAapL,GAAWkK,IAAoC,IAAtB9Z,EAAOgb,cACpD1T,EAAgBtH,GAAQwZ,oBAAqB,GAGjDhgB,EAAOmZ,GAAcmH,EAAW,EAAG9Z,EAAOgb,YAC1Chb,EAAO2P,GA30CH,GA20CenW,EAAKygB,cACxBja,EAAO2P,GA30CJ,GA20CenW,EAAK0gB,cAQtBhoD,EAAI,EAAGA,EAAI,GAAqB,MAAhB8tC,EAAO2P,GAAGz9C,KAAcA,EACzC8tC,EAAO2P,GAAGz9C,GAAK+Z,EAAM/Z,GAAK0nD,EAAY1nD,GAI1C,KAAOA,EAAI,EAAGA,IACV8tC,EAAO2P,GAAGz9C,GAAK+Z,EAAM/Z,GAAsB,MAAhB8tC,EAAO2P,GAAGz9C,GAAqB,IAANA,EAAU,EAAI,EAAK8tC,EAAO2P,GAAGz9C,GAI7D,KAApB8tC,EAAO2P,GA51CJ,IA61CuB,IAAtB3P,EAAO2P,GA51CN,IA61CqB,IAAtB3P,EAAO2P,GA51CN,IA61C0B,IAA3B3P,EAAO2P,GA51CD,KA61CV3P,EAAOkb,UAAW,EAClBlb,EAAO2P,GAj2CJ,GAi2Ce,GAGtB3P,EAAO2I,IAAM3I,EAAOga,QAAUrH,GAAgBN,IAAY79C,MAAM,KAAMyX,GACtE4tC,EAAkB7Z,EAAOga,QAAUha,EAAO2I,GAAGwK,YAAcnT,EAAO2I,GAAGwS,SAIlD,MAAfnb,EAAO4J,MACP5J,EAAO2I,GAAGyS,cAAcpb,EAAO2I,GAAG0S,gBAAkBrb,EAAO4J,MAG3D5J,EAAOkb,WACPlb,EAAO2P,GA92CJ,GA82Ce,IAIlB3P,EAAOyP,IAA6B,qBAAhBzP,EAAOyP,GAAGxQ,GAAqBe,EAAOyP,GAAGxQ,IAAM4a,IACnEvS,EAAgBtH,GAAQqI,iBAAkB,IA+DlD,IAAIiT,GAAmB,mJACnBC,GAAgB,8IAEhBC,GAAU,wBAEVC,GAAW,CACX,CAAC,eAAgB,uBACjB,CAAC,aAAc,mBACf,CAAC,eAAgB,kBACjB,CAAC,aAAc,eAAe,GAC9B,CAAC,WAAY,eACb,CAAC,UAAW,cAAc,GAC1B,CAAC,aAAc,cACf,CAAC,WAAY,SAEb,CAAC,aAAc,eACf,CAAC,YAAa,eAAe,GAC7B,CAAC,UAAW,UAIZC,GAAW,CACX,CAAC,gBAAiB,uBAClB,CAAC,gBAAiB,sBAClB,CAAC,WAAY,kBACb,CAAC,QAAS,aACV,CAAC,cAAe,qBAChB,CAAC,cAAe,oBAChB,CAAC,SAAU,gBACX,CAAC,OAAQ,YACT,CAAC,KAAM,SAGPC,GAAkB,sBAGtB,SAASC,GAAc5b,GACnB,IAAI9tC,EAAGooC,EAGHuhB,EAAWC,EAAYC,EAAYC,EAFnCp7C,EAASo/B,EAAOyJ,GAChB5nC,EAAQy5C,GAAiBj4C,KAAKzC,IAAW26C,GAAcl4C,KAAKzC,GAGhE,GAAIiB,EAAO,CAGP,IAFAylC,EAAgBtH,GAAQiI,KAAM,EAEzB/1C,EAAI,EAAGooC,EAAImhB,GAAStpD,OAAQD,EAAIooC,EAAGpoC,IACpC,GAAIupD,GAASvpD,GAAG,GAAGmR,KAAKxB,EAAM,IAAK,CAC/Bi6C,EAAaL,GAASvpD,GAAG,GACzB2pD,GAA+B,IAAnBJ,GAASvpD,GAAG,GACxB,MAGR,GAAkB,MAAd4pD,EAEA,YADA9b,EAAOuI,UAAW,GAGtB,GAAI1mC,EAAM,GAAI,CACV,IAAK3P,EAAI,EAAGooC,EAAIohB,GAASvpD,OAAQD,EAAIooC,EAAGpoC,IACpC,GAAIwpD,GAASxpD,GAAG,GAAGmR,KAAKxB,EAAM,IAAK,CAE/Bk6C,GAAcl6C,EAAM,IAAM,KAAO65C,GAASxpD,GAAG,GAC7C,MAGR,GAAkB,MAAd6pD,EAEA,YADA/b,EAAOuI,UAAW,GAI1B,IAAKsT,GAA2B,MAAdE,EAEd,YADA/b,EAAOuI,UAAW,GAGtB,GAAI1mC,EAAM,GAAI,CACV,IAAI25C,GAAQn4C,KAAKxB,EAAM,IAInB,YADAm+B,EAAOuI,UAAW,GAFlByT,EAAW,IAMnBhc,EAAO0J,GAAKoS,GAAcC,GAAc,KAAOC,GAAY,IAC3DC,GAA0Bjc,QAE1BA,EAAOuI,UAAW,EAK1B,IAAIH,GAAU,0LAkBd,SAAS8T,GAAeC,GACpB,IAAItM,EAAOh1C,SAASshD,EAAS,IAC7B,OAAItM,GAAQ,GACD,IAAOA,EACPA,GAAQ,IACR,KAAOA,EAEXA,EAsBX,IAAIuM,GAAa,CACbC,GAAI,EACJC,IAAK,EACLC,KAAK,IACLC,KAAK,IACLC,KAAK,IACLC,KAAK,IACLC,KAAK,IACLC,KAAK,IACLC,KAAK,IACLC,KAAK,KAiBT,SAASC,GAAkB/c,GACvB,IAAIn+B,EAAQumC,GAAQ/kC,KAAuB28B,EAAOyJ,GA7CzC7lC,QAAQ,oBAAqB,KAAKA,QAAQ,WAAY,KAAKA,QAAQ,SAAU,IAAIA,QAAQ,SAAU,KA8C5G,GAAI/B,EAAO,CACP,IAAIm7C,EA3EZ,SAAmCb,EAASc,EAAUC,EAAQC,EAASC,EAAWC,GAC9E,IAAItpD,EAAS,CACTmoD,GAAeC,GACfrL,GAAyBp6B,QAAQumC,GACjCpiD,SAASqiD,EAAQ,IACjBriD,SAASsiD,EAAS,IAClBtiD,SAASuiD,EAAW,KAOxB,OAJIC,GACAtpD,EAAOkW,KAAKpP,SAASwiD,EAAW,KAG7BtpD,EA8DeupD,CAA0Bz7C,EAAM,GAAIA,EAAM,GAAIA,EAAM,GAAIA,EAAM,GAAIA,EAAM,GAAIA,EAAM,IACpG,IA7CR,SAAsB07C,EAAYC,EAAaxd,GAC3C,OAAIud,GAEsB9I,GAA2B/9B,QAAQ6mC,KACrC,IAAIh7C,KAAKi7C,EAAY,GAAIA,EAAY,GAAIA,EAAY,IAAIrC,WAEzE7T,EAAgBtH,GAAQqI,iBAAkB,EAC1CrI,EAAOuI,UAAW,GACX,GAqCNkV,CAAa57C,EAAM,GAAIm7C,EAAahd,GACrC,OAGJA,EAAO2P,GAAKqN,EACZhd,EAAO4J,KAvBf,SAAyB8T,EAAWC,EAAgBC,GAChD,GAAIF,EACA,OAAOtB,GAAWsB,GACf,GAAIC,EAEP,OAAO,EAEP,IAAIE,EAAKhjD,SAAS+iD,EAAW,IACzB9e,EAAI+e,EAAK,IACb,OADuBA,EAAK/e,GAAK,IACtB,GAAKA,EAcFgf,CAAgBj8C,EAAM,GAAIA,EAAM,GAAIA,EAAM,KAExDm+B,EAAO2I,GAAKgK,GAAcn+C,MAAM,KAAMwrC,EAAO2P,IAC7C3P,EAAO2I,GAAGyS,cAAcpb,EAAO2I,GAAG0S,gBAAkBrb,EAAO4J,MAE3DtC,EAAgBtH,GAAQoI,SAAU,OAElCpI,EAAOuI,UAAW,EAgD1B,SAAS0T,GAA0Bjc,GAE/B,GAAIA,EAAO0J,KAAO3C,EAAMgX,SAIxB,GAAI/d,EAAO0J,KAAO3C,EAAMiX,SAAxB,CAIAhe,EAAO2P,GAAK,GACZrI,EAAgBtH,GAAQwH,OAAQ,EAGhC,IACIt1C,EAAGsrD,EAAalO,EAAQrC,EAAOgR,EAD/Br9C,EAAS,GAAKo/B,EAAOyJ,GAErByU,EAAet9C,EAAOzO,OACtBgsD,EAAyB,EAI7B,IAFA7O,EAAShC,EAAatN,EAAO0J,GAAI1J,EAAO+J,SAASloC,MAAM+qC,IAAqB,GAEvE16C,EAAI,EAAGA,EAAIo9C,EAAOn9C,OAAQD,IAC3B+6C,EAAQqC,EAAOp9C,IACfsrD,GAAe58C,EAAOiB,MAAMotC,GAAsBhC,EAAOjN,KAAY,IAAI,OAIrEie,EAAUr9C,EAAOulC,OAAO,EAAGvlC,EAAO8V,QAAQ8mC,KAC9BrrD,OAAS,GACjBm1C,EAAgBtH,GAAQ0H,YAAYz9B,KAAKg0C,GAE7Cr9C,EAASA,EAAOyZ,MAAMzZ,EAAO8V,QAAQ8mC,GAAeA,EAAYrrD,QAChEgsD,GAA0BX,EAAYrrD,QAGtC46C,EAAqBE,IACjBuQ,EACAlW,EAAgBtH,GAAQwH,OAAQ,EAGhCF,EAAgBtH,GAAQyH,aAAax9B,KAAKgjC,GAE9CyC,GAAwBzC,EAAOuQ,EAAaxd,IAEvCA,EAAO8I,UAAY0U,GACxBlW,EAAgBtH,GAAQyH,aAAax9B,KAAKgjC,GAKlD3F,EAAgBtH,GAAQ4H,cAAgBsW,EAAeC,EACnDv9C,EAAOzO,OAAS,GAChBm1C,EAAgBtH,GAAQ0H,YAAYz9B,KAAKrJ,GAIzCo/B,EAAO2P,GA7sDJ,IA6sDgB,KACiB,IAApCrI,EAAgBtH,GAAQ+I,SACxB/I,EAAO2P,GA/sDJ,GA+sDe,IAClBrI,EAAgBtH,GAAQ+I,aAAUzpC,GAGtCgoC,EAAgBtH,GAAQkI,gBAAkBlI,EAAO2P,GAAGt1B,MAAM,GAC1DitB,EAAgBtH,GAAQmI,SAAWnI,EAAOyW,UAE1CzW,EAAO2P,GAttDA,GA6tDX,SAA0BlW,EAAQ2kB,EAAMjW,GACpC,IAAIkW,EAEJ,OAAgB,MAAZlW,EAEOiW,EAEgB,MAAvB3kB,EAAO6kB,aACA7kB,EAAO6kB,aAAaF,EAAMjW,GACX,MAAf1O,EAAO+c,OAEd6H,EAAO5kB,EAAO+c,KAAKrO,KACPiW,EAAO,KACfA,GAAQ,IAEPC,GAAiB,KAATD,IACTA,EAAO,GAEJA,GAGAA,EA5BOG,CAAgBve,EAAO+J,QAAS/J,EAAO2P,GAttDlD,GAstD4D3P,EAAOyW,WAE1EkD,GAAgB3Z,GAChBuZ,GAAcvZ,QA7DV+c,GAAkB/c,QAJlB4b,GAAc5b,GAmKtB,SAASwe,GAAexe,GACpB,IAAI/zB,EAAQ+zB,EAAOyJ,GACf/P,EAASsG,EAAO0J,GAIpB,OAFA1J,EAAO+J,QAAU/J,EAAO+J,SAAWiP,GAAUhZ,EAAO2J,IAEtC,OAAV19B,QAA8B3M,IAAXo6B,GAAkC,KAAVztB,EACpCg9B,EAAc,CAACpB,WAAW,KAGhB,kBAAV57B,IACP+zB,EAAOyJ,GAAKx9B,EAAQ+zB,EAAO+J,QAAQ0U,SAASxyC,IAG5Ck+B,EAASl+B,GACF,IAAIg+B,EAAOsP,GAActtC,KACzB9P,EAAO8P,GACd+zB,EAAO2I,GAAK18B,EACLvE,EAAQgyB,GAtFvB,SAAkCsG,GAC9B,IAAI0e,EACAC,EAEAC,EACA1sD,EACA2sD,EAEJ,GAAyB,IAArB7e,EAAO0J,GAAGv3C,OAGV,OAFAm1C,EAAgBtH,GAAQ+H,eAAgB,OACxC/H,EAAO2I,GAAK,IAAIpmC,KAAKogC,MAIzB,IAAKzwC,EAAI,EAAGA,EAAI8tC,EAAO0J,GAAGv3C,OAAQD,IAC9B2sD,EAAe,EACfH,EAAatV,EAAW,GAAIpJ,GACN,MAAlBA,EAAOga,UACP0E,EAAW1E,QAAUha,EAAOga,SAEhC0E,EAAWhV,GAAK1J,EAAO0J,GAAGx3C,GAC1B+pD,GAA0ByC,GAErBpW,EAAQoW,KAKbG,GAAgBvX,EAAgBoX,GAAY9W,cAG5CiX,GAAkE,GAAlDvX,EAAgBoX,GAAYjX,aAAat1C,OAEzDm1C,EAAgBoX,GAAYI,MAAQD,GAEjB,MAAfD,GAAuBC,EAAeD,KACtCA,EAAcC,EACdF,EAAaD,IAIrBrtB,EAAO2O,EAAQ2e,GAAcD,GA8CzBK,CAAyB/e,GAClBtG,EACPuiB,GAA0Bjc,GAYlC,SAAyBA,GACrB,IAAI/zB,EAAQ+zB,EAAOyJ,GACfnW,EAAYrnB,GACZ+zB,EAAO2I,GAAK,IAAIpmC,KAAKwkC,EAAMliC,OACpB1I,EAAO8P,GACd+zB,EAAO2I,GAAK,IAAIpmC,KAAK0J,EAAM3E,WACH,kBAAV2E,EAxPtB,SAA0B+zB,GACtB,IAAImP,EAAUwM,GAAgBt4C,KAAK28B,EAAOyJ,IAE1B,OAAZ0F,GAKJyM,GAAc5b,IACU,IAApBA,EAAOuI,kBACAvI,EAAOuI,SAKlBwU,GAAkB/c,IACM,IAApBA,EAAOuI,kBACAvI,EAAOuI,SAMlBxB,EAAMiY,wBAAwBhf,MAnB1BA,EAAO2I,GAAK,IAAIpmC,MAAM4sC,EAAQ,IAqP9B8P,CAAiBjf,GACVt4B,EAAQuE,IACf+zB,EAAO2P,GAAK5uC,EAAIkL,EAAMoO,MAAM,IAAI,SAAU/mB,GACtC,OAAOuH,SAASvH,EAAK,OAEzBqmD,GAAgB3Z,IACTh4B,EAASiE,GAtExB,SAA0B+zB,GACtB,IAAIA,EAAO2I,GAAX,CAIA,IAAIz2C,EAAI85C,EAAqBhM,EAAOyJ,IACpCzJ,EAAO2P,GAAK5uC,EAAI,CAAC7O,EAAE29C,KAAM39C,EAAEk+C,MAAOl+C,EAAE8iD,KAAO9iD,EAAEsnC,KAAMtnC,EAAEksD,KAAMlsD,EAAEgtD,OAAQhtD,EAAEitD,OAAQjtD,EAAEktD,cAAc,SAAU9rD,GACrG,OAAOA,GAAOuH,SAASvH,EAAK,OAGhCqmD,GAAgB3Z,IA6DZqf,CAAiBrf,GACV3X,EAASpc,GAEhB+zB,EAAO2I,GAAK,IAAIpmC,KAAK0J,GAErB86B,EAAMiY,wBAAwBhf,GA7B9Bsf,CAAgBtf,GAGfsI,EAAQtI,KACTA,EAAO2I,GAAK,MAGT3I,IA0BX,SAASoH,GAAkBn7B,EAAOytB,EAAQD,EAAQ0N,EAAQoY,GACtD,IAAIrjB,EAAI,GAoBR,OAlBe,IAAXzC,IAA8B,IAAXA,IACnB0N,EAAS1N,EACTA,OAASn6B,IAGR0I,EAASiE,IA5iFlB,SAAuB3Y,GACnB,GAAId,OAAOgtD,oBACP,OAAmD,IAA3ChtD,OAAOgtD,oBAAoBlsD,GAAKnB,OAExC,IAAIiqC,EACJ,IAAKA,KAAK9oC,EACN,GAAIA,EAAI2P,eAAem5B,GACnB,OAAO,EAGf,OAAO,EAkiFaqjB,CAAcxzC,IAC7BvE,EAAQuE,IAA2B,IAAjBA,EAAM9Z,UAC7B8Z,OAAQ3M,GAIZ48B,EAAEsN,kBAAmB,EACrBtN,EAAE8d,QAAU9d,EAAE2N,OAAS0V,EACvBrjB,EAAEyN,GAAKlQ,EACPyC,EAAEuN,GAAKx9B,EACPiwB,EAAEwN,GAAKhQ,EACPwC,EAAE4M,QAAU3B,EAtFhB,SAA2BnH,GACvB,IAAIgH,EAAM,IAAIiD,EAAOsP,GAAciF,GAAcxe,KAOjD,OANIgH,EAAIkU,WAEJlU,EAAI39B,IAAI,EAAG,KACX29B,EAAIkU,cAAW57C,GAGZ0nC,EAgFA0Y,CAAiBxjB,GAG5B,SAAS0e,GAAa3uC,EAAOytB,EAAQD,EAAQ0N,GACzC,OAAOC,GAAiBn7B,EAAOytB,EAAQD,EAAQ0N,GAAQ,GAxQ3DJ,EAAMiY,wBAA0B5kB,EAC5B,kVAIA,SAAU4F,GACNA,EAAO2I,GAAK,IAAIpmC,KAAKy9B,EAAOyJ,IAAMzJ,EAAOga,QAAU,OAAS,QAKpEjT,EAAMgX,SAAW,aAGjBhX,EAAMiX,SAAW,aA6PjB,IAAI2B,GAAevlB,EACf,sGACA,WACI,IAAIzpB,EAAQiqC,GAAYpmD,MAAM,KAAMD,WACpC,OAAIH,KAAKk0C,WAAa33B,EAAM23B,UACjB33B,EAAQvc,KAAOA,KAAOuc,EAEtBs4B,OAKf2W,GAAexlB,EACf,sGACA,WACI,IAAIzpB,EAAQiqC,GAAYpmD,MAAM,KAAMD,WACpC,OAAIH,KAAKk0C,WAAa33B,EAAM23B,UACjB33B,EAAQvc,KAAOA,KAAOuc,EAEtBs4B,OAUnB,SAASjf,GAAOxL,EAAIqhC,GAChB,IAAI7Y,EAAK90C,EAIT,GAHuB,IAAnB2tD,EAAQ1tD,QAAgBuV,EAAQm4C,EAAQ,MACxCA,EAAUA,EAAQ,KAEjBA,EAAQ1tD,OACT,OAAOyoD,KAGX,IADA5T,EAAM6Y,EAAQ,GACT3tD,EAAI,EAAGA,EAAI2tD,EAAQ1tD,SAAUD,EACzB2tD,EAAQ3tD,GAAGo2C,YAAauX,EAAQ3tD,GAAGssB,GAAIwoB,KACxCA,EAAM6Y,EAAQ3tD,IAGtB,OAAO80C,EAgBX,IAII8Y,GAAW,CAAC,OAAQ,UAAW,QAAS,OAAQ,MAAO,OAAQ,SAAU,SAAU,eAgCvF,SAASC,GAAUC,GACf,IAAI7T,EAAkBH,EAAqBgU,GACvCC,EAAQ9T,EAAgB0D,MAAQ,EAChCqQ,EAAW/T,EAAgBgU,SAAW,EACtC3P,EAASrE,EAAgBiE,OAAS,EAClCgQ,EAAQjU,EAAgBkH,MAAQlH,EAAgBkU,SAAW,EAC3DC,EAAOnU,EAAgB6I,KAAO,EAC9BgB,EAAQ7J,EAAgBiS,MAAQ,EAChClI,EAAU/J,EAAgB+S,QAAU,EACpC7I,EAAUlK,EAAgBgT,QAAU,EACpCoB,EAAepU,EAAgBiT,aAAe,EAElDhrD,KAAKm0C,SA1CT,SAAyBzJ,GACrB,IAAK,IAAIpsC,KAAOosC,EACZ,IAAuC,IAAjCpoB,GAAQ/iB,KAAKmsD,GAAUptD,IAA0B,MAAVosC,EAAEpsC,IAAiBugC,MAAM6L,EAAEpsC,IACpE,OAAO,EAKf,IADA,IAAI8tD,GAAiB,EACZtuD,EAAI,EAAGA,EAAI4tD,GAAS3tD,SAAUD,EACnC,GAAI4sC,EAAEghB,GAAS5tD,IAAK,CAChB,GAAIsuD,EACA,OAAO,EAEP7lD,WAAWmkC,EAAEghB,GAAS5tD,OAASm4C,EAAMvL,EAAEghB,GAAS5tD,OAChDsuD,GAAiB,GAK7B,OAAO,EAuBSC,CAAgBtU,GAGhC/3C,KAAKssD,eAAiBH,EACR,IAAVlK,EACU,IAAVH,EACQ,IAARF,EAAe,GAAK,GAGxB5hD,KAAKusD,OAASL,EACF,EAARF,EAIJhsD,KAAKwsD,SAAWpQ,EACD,EAAX0P,EACQ,GAARD,EAEJ7rD,KAAKysD,MAAQ,GAEbzsD,KAAK21C,QAAUiP,KAEf5kD,KAAK0sD,UAGT,SAASC,GAAYztD,GACjB,OAAOA,aAAeysD,GAG1B,SAASiB,GAAUz1C,GACf,OAAIA,EAAS,GACyB,EAA3B9I,KAAKiqB,OAAO,EAAInhB,GAEhB9I,KAAKiqB,MAAMnhB,GAM1B,SAASpN,GAAQ8uC,EAAOpd,GACpBmd,EAAeC,EAAO,EAAG,GAAG,WACxB,IAAI9uC,EAAS/J,KAAK6sD,YACd/f,EAAO,IAKX,OAJI/iC,EAAS,IACTA,GAAUA,EACV+iC,EAAO,KAEJA,EAAOqL,KAAYpuC,EAAS,IAAK,GAAK0xB,EAAY0c,IAAYpuC,EAAU,GAAI,MAI3FA,GAAO,IAAK,KACZA,GAAO,KAAM,IAIb2wC,GAAc,IAAMH,IACpBG,GAAc,KAAMH,IACpBY,GAAc,CAAC,IAAK,OAAO,SAAUtjC,EAAOjP,EAAOgjC,GAC/CA,EAAOga,SAAU,EACjBha,EAAO4J,KAAOsX,GAAiBvS,GAAkB1iC,MAQrD,IAAIk1C,GAAc,kBAElB,SAASD,GAAiBE,EAASxgD,GAC/B,IAAIguB,GAAWhuB,GAAU,IAAIiB,MAAMu/C,GAEnC,GAAgB,OAAZxyB,EACA,OAAO,KAGX,IACIyyB,IADUzyB,EAAQA,EAAQz8B,OAAS,IAAM,IACtB,IAAI0P,MAAMs/C,KAAgB,CAAC,IAAK,EAAG,GACtDjL,EAAuB,GAAXmL,EAAM,GAAWhX,EAAMgX,EAAM,IAE7C,OAAmB,IAAZnL,EACL,EACa,MAAbmL,EAAM,GAAanL,GAAWA,EAIpC,SAASoL,GAAgBr1C,EAAOs1C,GAC5B,IAAIva,EAAKwa,EACT,OAAID,EAAM1X,QACN7C,EAAMua,EAAMn+B,QACZo+B,GAAQrX,EAASl+B,IAAU9P,EAAO8P,GAASA,EAAM3E,UAAYszC,GAAY3uC,GAAO3E,WAAa0/B,EAAI1/B,UAEjG0/B,EAAI2B,GAAG8Y,QAAQza,EAAI2B,GAAGrhC,UAAYk6C,GAClCza,EAAMmD,aAAalD,GAAK,GACjBA,GAEA4T,GAAY3uC,GAAOy1C,QAIlC,SAASC,GAAe7iB,GAGpB,OAAoD,IAA5Cr8B,KAAKiqB,MAAMoS,EAAE6J,GAAGiZ,oBAAsB,IAqJlD,SAASC,KACL,QAAOztD,KAAKk0C,WAAYl0C,KAAKy1C,QAA2B,IAAjBz1C,KAAK01C,QA/IhD/C,EAAMmD,aAAe,aAmJrB,IAAI4X,GAAc,2DAKdC,GAAW,sKAEf,SAASC,GAAgB/1C,EAAOvZ,GAC5B,IAGIwuC,EACA+gB,EACAC,EALAlC,EAAW/zC,EAEXpK,EAAQ,KAuDZ,OAlDIk/C,GAAW90C,GACX+zC,EAAW,CACPxN,GAAKvmC,EAAMy0C,cACXzhB,EAAKhzB,EAAM00C,MACXpO,EAAKtmC,EAAM20C,SAERv4B,EAASpc,IAChB+zC,EAAW,GACPttD,EACAstD,EAASttD,GAAOuZ,EAEhB+zC,EAASO,aAAet0C,IAElBpK,EAAQigD,GAAYz+C,KAAK4I,KACnCi1B,EAAqB,MAAbr/B,EAAM,IAAe,EAAI,EACjCm+C,EAAW,CACPjkB,EAAK,EACLkD,EAAKoL,EAAMxoC,EA7xEZ,IA6xEmDq/B,EAClDoR,EAAKjI,EAAMxoC,EA7xEZ,IA6xEmDq/B,EAClDpC,EAAKuL,EAAMxoC,EA7xEV,IA6xEiDq/B,EAClDzF,EAAK4O,EAAMxoC,EA7xEV,IA6xEiDq/B,EAClDsR,GAAKnI,EAAM2W,GAA8B,IAArBn/C,EA7xEd,KA6xE4Cq/B,KAE5Cr/B,EAAQkgD,GAAS1+C,KAAK4I,KAChCi1B,EAAqB,MAAbr/B,EAAM,IAAe,EAAI,EACjCm+C,EAAW,CACPjkB,EAAIomB,GAAStgD,EAAM,GAAIq/B,GACvBqR,EAAI4P,GAAStgD,EAAM,GAAIq/B,GACvBoZ,EAAI6H,GAAStgD,EAAM,GAAIq/B,GACvBjC,EAAIkjB,GAAStgD,EAAM,GAAIq/B,GACvBoR,EAAI6P,GAAStgD,EAAM,GAAIq/B,GACvBpC,EAAIqjB,GAAStgD,EAAM,GAAIq/B,GACvBzF,EAAI0mB,GAAStgD,EAAM,GAAIq/B,KAER,MAAZ8e,EACPA,EAAW,GACgB,kBAAbA,IAA0B,SAAUA,GAAY,OAAQA,KACtEkC,EA0CR,SAA2B7gB,EAAM1wB,GAC7B,IAAIq2B,EACJ,OAAM3F,EAAKiH,WAAa33B,EAAM23B,WAI9B33B,EAAQ2wC,GAAgB3wC,EAAO0wB,GAC3BA,EAAK+gB,SAASzxC,GACdq2B,EAAMqb,GAA0BhhB,EAAM1wB,KAEtCq2B,EAAMqb,GAA0B1xC,EAAO0wB,IACnCkf,cAAgBvZ,EAAIuZ,aACxBvZ,EAAIwJ,QAAUxJ,EAAIwJ,QAGfxJ,GAZI,CAACuZ,aAAc,EAAG/P,OAAQ,GA7CvB8R,CAAkB1H,GAAYoF,EAAS1W,MAAOsR,GAAYoF,EAAS3W,MAE7E2W,EAAW,IACFxN,GAAK0P,EAAQ3B,aACtBP,EAASzN,EAAI2P,EAAQ1R,QAGzByR,EAAM,IAAIlC,GAASC,GAEfe,GAAW90C,IAAUg7B,EAAWh7B,EAAO,aACvCg2C,EAAIlY,QAAU99B,EAAM89B,SAGjBkY,EAMX,SAASE,GAAUI,EAAKrhB,GAIpB,IAAI8F,EAAMub,GAAO5nD,WAAW4nD,EAAI3+C,QAAQ,IAAK,MAE7C,OAAQqvB,MAAM+T,GAAO,EAAIA,GAAO9F,EAGpC,SAASmhB,GAA0BhhB,EAAM1wB,GACrC,IAAIq2B,EAAM,GAUV,OARAA,EAAIwJ,OAAS7/B,EAAMy/B,QAAU/O,EAAK+O,QACC,IAA9Bz/B,EAAMk/B,OAASxO,EAAKwO,QACrBxO,EAAKje,QAAQ/Z,IAAI29B,EAAIwJ,OAAQ,KAAKgS,QAAQ7xC,MACxCq2B,EAAIwJ,OAGVxJ,EAAIuZ,cAAgB5vC,GAAU0wB,EAAKje,QAAQ/Z,IAAI29B,EAAIwJ,OAAQ,KAEpDxJ,EAsBX,SAASyb,GAAYC,EAAWtwC,GAC5B,OAAO,SAAUm3B,EAAKoZ,GAClB,IAASC,EAWT,OATe,OAAXD,GAAoB1vB,OAAO0vB,KAC3BtX,EAAgBj5B,EAAM,YAAcA,EAAQ,uDAAyDA,EAA/E,kGAEtBwwC,EAAMrZ,EAAKA,EAAMoZ,EAAQA,EAASC,GAKtCC,GAAYzuD,KADN4tD,GADNzY,EAAqB,kBAARA,GAAoBA,EAAMA,EACboZ,GACHD,GAChBtuD,MAIf,SAASyuD,GAAatV,EAAKyS,EAAU8C,EAAU5Y,GAC3C,IAAIqW,EAAeP,EAASU,cACxBJ,EAAOU,GAAShB,EAASW,OACzBnQ,EAASwQ,GAAShB,EAASY,SAE1BrT,EAAIjF,YAKT4B,EAA+B,MAAhBA,GAA8BA,EAEzCsG,GACAe,GAAShE,EAAKjiC,GAAIiiC,EAAK,SAAWiD,EAASsS,GAE3CxC,GACAnQ,GAAM5C,EAAK,OAAQjiC,GAAIiiC,EAAK,QAAU+S,EAAOwC,GAE7CvC,GACAhT,EAAI5E,GAAG8Y,QAAQlU,EAAI5E,GAAGrhC,UAAYi5C,EAAeuC,GAEjD5Y,GACAnD,EAAMmD,aAAaqD,EAAK+S,GAAQ9P,IApFxCwR,GAAexjC,GAAKuhC,GAASjtD,UAC7BkvD,GAAee,QAvVf,WACI,OAAOf,GAAerf,MA6a1B,IAAIt5B,GAAWo5C,GAAY,EAAG,OAC1B91B,GAAW81B,IAAa,EAAG,YA0H/B,SAASO,GAAWxnB,EAAGQ,GAEnB,IAAIinB,EAA0C,IAAvBjnB,EAAE6T,OAASrU,EAAEqU,SAAiB7T,EAAEoU,QAAU5U,EAAE4U,SAE/D8S,EAAS1nB,EAAEpY,QAAQ/Z,IAAI45C,EAAgB,UAc3C,QAASA,GAXLjnB,EAAIknB,EAAS,GAGHlnB,EAAIknB,IAAWA,EAFf1nB,EAAEpY,QAAQ/Z,IAAI45C,EAAiB,EAAG,YAMlCjnB,EAAIknB,IAFJ1nB,EAAEpY,QAAQ/Z,IAAI45C,EAAiB,EAAG,UAETC,MAIF,EA6FzC,SAASzpB,GAAQ/mC,GACb,IAAIywD,EAEJ,YAAY7jD,IAAR5M,EACO0B,KAAK21C,QAAQ8O,OAGC,OADrBsK,EAAgBnK,GAAUtmD,MAEtB0B,KAAK21C,QAAUoZ,GAEZ/uD,MApGf2yC,EAAMqc,cAAgB,uBACtBrc,EAAMsc,iBAAmB,yBAuGzB,IAAIC,GAAOlpB,EACP,mJACA,SAAU1nC,GACN,YAAY4M,IAAR5M,EACO0B,KAAKg5C,aAELh5C,KAAKqlC,OAAO/mC,MAK/B,SAAS06C,KACL,OAAOh5C,KAAK21C,QAShB,SAASwZ,GAAMl3B,EAAUC,GACrB,OAAQD,EAAWC,EAAUA,GAAWA,EAG5C,SAASk3B,GAAiBznB,EAAG+C,EAAGG,GAE5B,OAAIlD,EAAI,KAAOA,GAAK,EAET,IAAIx5B,KAAKw5B,EAAI,IAAK+C,EAAGG,GAXb,YAaR,IAAI18B,KAAKw5B,EAAG+C,EAAGG,GAAG33B,UAIjC,SAASm8C,GAAe1nB,EAAG+C,EAAGG,GAE1B,OAAIlD,EAAI,KAAOA,GAAK,EAETx5B,KAAKqwC,IAAI7W,EAAI,IAAK+C,EAAGG,GArBb,YAuBR18B,KAAKqwC,IAAI7W,EAAG+C,EAAGG,GAuK9B,SAASykB,GAAwBzW,EAAO0W,GACpC3W,EAAe,EAAG,CAACC,EAAOA,EAAM96C,QAAS,EAAGwxD,GA+DhD,SAASC,GAAqB33C,EAAOonC,EAAMC,EAASN,EAAKC,GACrD,IAAI4Q,EACJ,OAAa,MAAT53C,EACOynC,GAAWt/C,KAAM4+C,EAAKC,GAAKpD,MAG9BwD,GADJwQ,EAAchQ,GAAY5nC,EAAO+mC,EAAKC,MAElCI,EAAOwQ,GAEJC,GAAWnwD,KAAKS,KAAM6X,EAAOonC,EAAMC,EAASN,EAAKC,IAIhE,SAAS6Q,GAAWvJ,EAAUlH,EAAMC,EAASN,EAAKC,GAC9C,IAAI8Q,EAAgB3Q,GAAmBmH,EAAUlH,EAAMC,EAASN,EAAKC,GACjEzZ,EAAOmZ,GAAcoR,EAAclU,KAAM,EAAGkU,EAActQ,WAK9D,OAHAr/C,KAAKy7C,KAAKrW,EAAKqZ,kBACfz+C,KAAKg8C,MAAM5W,EAAKygB,eAChB7lD,KAAKolC,KAAKA,EAAK0gB,cACR9lD,KA5FX44C,EAAe,EAAG,CAAC,KAAM,GAAI,GAAG,WAC5B,OAAO54C,KAAKmmD,WAAa,OAG7BvN,EAAe,EAAG,CAAC,KAAM,GAAI,GAAG,WAC5B,OAAO54C,KAAK4vD,cAAgB,OAOhCN,GAAuB,OAAY,YACnCA,GAAuB,QAAY,YACnCA,GAAuB,OAAS,eAChCA,GAAuB,QAAS,eAIhC/X,EAAa,WAAY,MACzBA,EAAa,cAAe,MAI5BU,EAAgB,WAAY,GAC5BA,EAAgB,cAAe,GAK/ByC,GAAc,IAAUL,IACxBK,GAAc,IAAUL,IACxBK,GAAc,KAAUZ,EAAWJ,GACnCgB,GAAc,KAAUZ,EAAWJ,GACnCgB,GAAc,OAAUR,GAAWN,GACnCc,GAAc,OAAUR,GAAWN,GACnCc,GAAc,QAAUP,GAAWN,GACnCa,GAAc,QAAUP,GAAWN,GAEnCuB,GAAkB,CAAC,OAAQ,QAAS,OAAQ,UAAU,SAAUvjC,EAAOonC,EAAMrT,EAAQiN,GACjFoG,EAAKpG,EAAM9G,OAAO,EAAG,IAAMkE,EAAMp+B,MAGrCujC,GAAkB,CAAC,KAAM,OAAO,SAAUvjC,EAAOonC,EAAMrT,EAAQiN,GAC3DoG,EAAKpG,GAASlG,EAAMgJ,kBAAkB9jC,MAqD1C+gC,EAAe,IAAK,EAAG,KAAM,WAI7BrB,EAAa,UAAW,KAIxBU,EAAgB,UAAW,GAI3ByC,GAAc,IAAKjB,GACnB0B,GAAc,KAAK,SAAUtjC,EAAOjP,GAChCA,EAz8FQ,GAy8F4B,GAApBqtC,EAAMp+B,GAAS,MAWnC+gC,EAAe,IAAK,CAAC,KAAM,GAAI,KAAM,QAIrCrB,EAAa,OAAQ,KAGrBU,EAAgB,OAAQ,GAIxByC,GAAc,IAAMZ,GACpBY,GAAc,KAAMZ,EAAWJ,GAC/BgB,GAAc,MAAM,SAAUv/B,EAAUkqB,GAEpC,OAAOlqB,EACJkqB,EAAOwqB,yBAA2BxqB,EAAOyqB,cAC1CzqB,EAAO0qB,kCAGb5U,GAAc,CAAC,IAAK,MAv+FT,GAw+FXA,GAAc,MAAM,SAAUtjC,EAAOjP,GACjCA,EAz+FO,GAy+FOqtC,EAAMp+B,EAAMpK,MAAMqsC,GAAW,OAK/C,IAAIkW,GAAmBnU,GAAW,QAAQ,GAI1CjD,EAAe,MAAO,CAAC,OAAQ,GAAI,OAAQ,aAI3CrB,EAAa,YAAa,OAG1BU,EAAgB,YAAa,GAI7ByC,GAAc,MAAQT,IACtBS,GAAc,OAAQf,GACtBwB,GAAc,CAAC,MAAO,SAAS,SAAUtjC,EAAOjP,EAAOgjC,GACnDA,EAAOgb,WAAa3Q,EAAMp+B,MAc9B+gC,EAAe,IAAK,CAAC,KAAM,GAAI,EAAG,UAIlCrB,EAAa,SAAU,KAIvBU,EAAgB,SAAU,IAI1ByC,GAAc,IAAMZ,GACpBY,GAAc,KAAMZ,EAAWJ,GAC/ByB,GAAc,CAAC,IAAK,MA1hGP,GA8hGb,IAAI8U,GAAepU,GAAW,WAAW,GAIzCjD,EAAe,IAAK,CAAC,KAAM,GAAI,EAAG,UAIlCrB,EAAa,SAAU,KAIvBU,EAAgB,SAAU,IAI1ByC,GAAc,IAAMZ,GACpBY,GAAc,KAAMZ,EAAWJ,GAC/ByB,GAAc,CAAC,IAAK,MA/iGP,GAmjGb,IA+CItC,GA/CAqX,GAAerU,GAAW,WAAW,GAgDzC,IA5CAjD,EAAe,IAAK,EAAG,GAAG,WACtB,SAAU54C,KAAKgrD,cAAgB,QAGnCpS,EAAe,EAAG,CAAC,KAAM,GAAI,GAAG,WAC5B,SAAU54C,KAAKgrD,cAAgB,OAGnCpS,EAAe,EAAG,CAAC,MAAO,GAAI,EAAG,eACjCA,EAAe,EAAG,CAAC,OAAQ,GAAI,GAAG,WAC9B,OAA4B,GAArB54C,KAAKgrD,iBAEhBpS,EAAe,EAAG,CAAC,QAAS,GAAI,GAAG,WAC/B,OAA4B,IAArB54C,KAAKgrD,iBAEhBpS,EAAe,EAAG,CAAC,SAAU,GAAI,GAAG,WAChC,OAA4B,IAArB54C,KAAKgrD,iBAEhBpS,EAAe,EAAG,CAAC,UAAW,GAAI,GAAG,WACjC,OAA4B,IAArB54C,KAAKgrD,iBAEhBpS,EAAe,EAAG,CAAC,WAAY,GAAI,GAAG,WAClC,OAA4B,IAArB54C,KAAKgrD,iBAEhBpS,EAAe,EAAG,CAAC,YAAa,GAAI,GAAG,WACnC,OAA4B,IAArB54C,KAAKgrD,iBAMhBzT,EAAa,cAAe,MAI5BU,EAAgB,cAAe,IAI/ByC,GAAc,IAAQT,GAAWR,GACjCiB,GAAc,KAAQT,GAAWP,GACjCgB,GAAc,MAAQT,GAAWN,GAG5Bd,GAAQ,OAAQA,GAAM96C,QAAU,EAAG86C,IAAS,IAC7C6B,GAAc7B,GAAOuB,IAGzB,SAAS+V,GAAQt4C,EAAOjP,GACpBA,EAvmGc,GAumGOqtC,EAAuB,KAAhB,KAAOp+B,IAGvC,IAAKghC,GAAQ,IAAKA,GAAM96C,QAAU,EAAG86C,IAAS,IAC1CsC,GAActC,GAAOsX,IAIzB,IAAIC,GAAoBvU,GAAW,gBAAgB,GAInDjD,EAAe,IAAM,EAAG,EAAG,YAC3BA,EAAe,KAAM,EAAG,EAAG,YAY3B,IAAIjlC,GAAQkiC,EAAOn3C,UAsFnB,SAAS2xD,GAAoB7jD,GACzB,OAAOA,EArFXmH,GAAMsB,IAAoBA,GAC1BtB,GAAMivC,SAjuBN,SAAqBvwB,EAAMi+B,GAGvB,IAAI7/C,EAAM4hB,GAAQm0B,KACd+J,EAAMrD,GAAgBz8C,EAAKzQ,MAAMwwD,QAAQ,OACzClrB,EAASqN,EAAM8d,eAAezwD,KAAMuwD,IAAQ,WAE5CnX,EAASkX,IAAY70C,EAAW60C,EAAQhrB,IAAWgrB,EAAQhrB,GAAQ/lC,KAAKS,KAAMyQ,GAAO6/C,EAAQhrB,IAEjG,OAAOtlC,KAAKslC,OAAO8T,GAAUp5C,KAAKg5C,aAAa4J,SAAStd,EAAQtlC,KAAMwmD,GAAY/1C,MAytBtFkD,GAAMqb,MAttBN,WACI,OAAO,IAAI6mB,EAAO71C,OAstBtB2T,GAAMy5C,KAvpBN,SAAev1C,EAAO8/B,EAAO+Y,GACzB,IAAIC,EACAC,EACAxX,EAEJ,IAAKp5C,KAAKk0C,UACN,OAAO3F,IAKX,KAFAoiB,EAAOzD,GAAgBr1C,EAAO7X,OAEpBk0C,UACN,OAAO3F,IAOX,OAJAqiB,EAAoD,KAAvCD,EAAK9D,YAAc7sD,KAAK6sD,aAErClV,EAAQD,EAAeC,IAGnB,IAAK,OAAQyB,EAASwV,GAAU5uD,KAAM2wD,GAAQ,GAAI,MAClD,IAAK,QAASvX,EAASwV,GAAU5uD,KAAM2wD,GAAO,MAC9C,IAAK,UAAWvX,EAASwV,GAAU5uD,KAAM2wD,GAAQ,EAAG,MACpD,IAAK,SAAUvX,GAAUp5C,KAAO2wD,GAAQ,IAAK,MAC7C,IAAK,SAAUvX,GAAUp5C,KAAO2wD,GAAQ,IAAK,MAC7C,IAAK,OAAQvX,GAAUp5C,KAAO2wD,GAAQ,KAAM,MAC5C,IAAK,MAAOvX,GAAUp5C,KAAO2wD,EAAOC,GAAa,MAAO,MACxD,IAAK,OAAQxX,GAAUp5C,KAAO2wD,EAAOC,GAAa,OAAQ,MAC1D,QAASxX,EAASp5C,KAAO2wD,EAG7B,OAAOD,EAAUtX,EAASpD,EAASoD,IAynBvCzlC,GAAMk9C,MA5ZN,SAAgBlZ,GACZ,IAAItlB,EAEJ,QAAcnnB,KADdysC,EAAQD,EAAeC,KACc,gBAAVA,IAA4B33C,KAAKk0C,UACxD,OAAOl0C,KAGX,IAAI8wD,EAAc9wD,KAAKy1C,OAAS4Z,GAAiBD,GAEjD,OAAQzX,GACJ,IAAK,OACDtlB,EAAOy+B,EAAY9wD,KAAKy7C,OAAS,EAAG,EAAG,GAAK,EAC5C,MACJ,IAAK,UACDppB,EAAOy+B,EAAY9wD,KAAKy7C,OAAQz7C,KAAKg8C,QAAUh8C,KAAKg8C,QAAU,EAAI,EAAG,GAAK,EAC1E,MACJ,IAAK,QACD3pB,EAAOy+B,EAAY9wD,KAAKy7C,OAAQz7C,KAAKg8C,QAAU,EAAG,GAAK,EACvD,MACJ,IAAK,OACD3pB,EAAOy+B,EAAY9wD,KAAKy7C,OAAQz7C,KAAKg8C,QAASh8C,KAAKolC,OAASplC,KAAKk/C,UAAY,GAAK,EAClF,MACJ,IAAK,UACD7sB,EAAOy+B,EAAY9wD,KAAKy7C,OAAQz7C,KAAKg8C,QAASh8C,KAAKolC,QAAUplC,KAAK+wD,aAAe,GAAK,GAAK,EAC3F,MACJ,IAAK,MACL,IAAK,OACD1+B,EAAOy+B,EAAY9wD,KAAKy7C,OAAQz7C,KAAKg8C,QAASh8C,KAAKolC,OAAS,GAAK,EACjE,MACJ,IAAK,OACD/S,EAAOryB,KAAKu0C,GAAGrhC,UACfmf,GA3GM,KA2GgB88B,GAAM98B,GAAQryB,KAAKy1C,OAAS,EA5G1C,IA4G8Cz1C,KAAK6sD,aA3GrD,MA2GkG,EACxG,MACJ,IAAK,SACDx6B,EAAOryB,KAAKu0C,GAAGrhC,UACfmf,GAhHQ,IAgHgB88B,GAAM98B,EAhHtB,KAgH6C,EACrD,MACJ,IAAK,SACDA,EAAOryB,KAAKu0C,GAAGrhC,UACfmf,GArHQ,IAqHgB88B,GAAM98B,EArHtB,KAqH6C,EAM7D,OAFAryB,KAAKu0C,GAAG8Y,QAAQh7B,GAChBsgB,EAAMmD,aAAa91C,MAAM,GAClBA,MAgXX2T,GAAM2xB,OA/iBN,SAAiB0rB,GACRA,IACDA,EAAchxD,KAAKytD,QAAU9a,EAAMsc,iBAAmBtc,EAAMqc,eAEhE,IAAI5V,EAASH,EAAaj5C,KAAMgxD,GAChC,OAAOhxD,KAAKg5C,aAAaiY,WAAW7X,IA2iBxCzlC,GAAMuhC,KAxiBN,SAAe7iB,EAAM6+B,GACjB,OAAIlxD,KAAKk0C,YACC6B,EAAS1jB,IAASA,EAAK6hB,WACxBsS,GAAYn0B,GAAM6hB,WAChB0Z,GAAe,CAAC3Y,GAAIj1C,KAAMk1C,KAAM7iB,IAAOgT,OAAOrlC,KAAKqlC,UAAU8rB,UAAUD,GAEvElxD,KAAKg5C,aAAaM,eAmiBjC3lC,GAAMy9C,QA/hBN,SAAkBF,GACd,OAAOlxD,KAAKk1C,KAAKsR,KAAe0K,IA+hBpCv9C,GAAMshC,GA5hBN,SAAa5iB,EAAM6+B,GACf,OAAIlxD,KAAKk0C,YACC6B,EAAS1jB,IAASA,EAAK6hB,WACxBsS,GAAYn0B,GAAM6hB,WAChB0Z,GAAe,CAAC1Y,KAAMl1C,KAAMi1C,GAAI5iB,IAAOgT,OAAOrlC,KAAKqlC,UAAU8rB,UAAUD,GAEvElxD,KAAKg5C,aAAaM,eAuhBjC3lC,GAAM09C,MAnhBN,SAAgBH,GACZ,OAAOlxD,KAAKi1C,GAAGuR,KAAe0K,IAmhBlCv9C,GAAMuD,IAxiGN,SAAoBygC,GAEhB,OAAIl8B,EAAWzb,KADf23C,EAAQD,EAAeC,KAEZ33C,KAAK23C,KAET33C,MAoiGX2T,GAAM29C,UAxUN,WACI,OAAOpe,EAAgBlzC,MAAMuzC,UAwUjC5/B,GAAMy6C,QA5tBN,SAAkBv2C,EAAO8/B,GACrB,IAAI4Z,EAAaxb,EAASl+B,GAASA,EAAQ2uC,GAAY3uC,GACvD,SAAM7X,KAAKk0C,YAAaqd,EAAWrd,aAIrB,iBADdyD,EAAQD,EAAeC,IAAU,eAEtB33C,KAAKkT,UAAYq+C,EAAWr+C,UAE5Bq+C,EAAWr+C,UAAYlT,KAAKgvB,QAAQwhC,QAAQ7Y,GAAOzkC,YAotBlES,GAAMq6C,SAhtBN,SAAmBn2C,EAAO8/B,GACtB,IAAI4Z,EAAaxb,EAASl+B,GAASA,EAAQ2uC,GAAY3uC,GACvD,SAAM7X,KAAKk0C,YAAaqd,EAAWrd,aAIrB,iBADdyD,EAAQD,EAAeC,IAAU,eAEtB33C,KAAKkT,UAAYq+C,EAAWr+C,UAE5BlT,KAAKgvB,QAAQ6hC,MAAMlZ,GAAOzkC,UAAYq+C,EAAWr+C,YAwsBhES,GAAM69C,UApsBN,SAAoBtc,EAAMD,EAAI0C,EAAO8Z,GACjC,IAAIC,EAAY3b,EAASb,GAAQA,EAAOsR,GAAYtR,GAChDyc,EAAU5b,EAASd,GAAMA,EAAKuR,GAAYvR,GAC9C,SAAMj1C,KAAKk0C,WAAawd,EAAUxd,WAAayd,EAAQzd,aAI5B,OAD3Bud,EAAcA,GAAe,MACT,GAAazxD,KAAKouD,QAAQsD,EAAW/Z,IAAU33C,KAAKguD,SAAS0D,EAAW/Z,MACpE,MAAnB8Z,EAAY,GAAazxD,KAAKguD,SAAS2D,EAASha,IAAU33C,KAAKouD,QAAQuD,EAASha,KA6rBzFhkC,GAAMi+C,OA1rBN,SAAiB/5C,EAAO8/B,GACpB,IACIka,EADAN,EAAaxb,EAASl+B,GAASA,EAAQ2uC,GAAY3uC,GAEvD,SAAM7X,KAAKk0C,YAAaqd,EAAWrd,aAIrB,iBADdyD,EAAQD,EAAeC,IAAU,eAEtB33C,KAAKkT,YAAcq+C,EAAWr+C,WAErC2+C,EAAUN,EAAWr+C,UACdlT,KAAKgvB,QAAQwhC,QAAQ7Y,GAAOzkC,WAAa2+C,GAAWA,GAAW7xD,KAAKgvB,QAAQ6hC,MAAMlZ,GAAOzkC,aAgrBxGS,GAAMm+C,cA5qBN,SAAwBj6C,EAAO8/B,GAC3B,OAAO33C,KAAK4xD,OAAO/5C,EAAO8/B,IAAU33C,KAAKouD,QAAQv2C,EAAO8/B,IA4qB5DhkC,GAAMo+C,eAzqBN,SAAyBl6C,EAAO8/B,GAC5B,OAAO33C,KAAK4xD,OAAO/5C,EAAO8/B,IAAU33C,KAAKguD,SAASn2C,EAAO8/B,IAyqB7DhkC,GAAMugC,QAvVN,WACI,OAAOA,EAAQl0C,OAuVnB2T,GAAMu7C,KAAoBA,GAC1Bv7C,GAAM0xB,OAAoBA,GAC1B1xB,GAAMqlC,WAAoBA,GAC1BrlC,GAAMlC,IAAoB+5C,GAC1B73C,GAAMhC,IAAoB45C,GAC1B53C,GAAMq+C,aAzVN,WACI,OAAO/0B,EAAO,GAAIiW,EAAgBlzC,QAyVtC2T,GAAMxG,IA9iGN,SAAoBwqC,EAAO34C,GACvB,GAAqB,kBAAV24C,EAGP,IADA,IAAIsa,EApTZ,SAA6BC,GACzB,IAAIva,EAAQ,GACZ,IAAK,IAAIwa,KAAKD,EACVva,EAAM9hC,KAAK,CAAC2hC,KAAM2a,EAAGja,SAAUF,EAAWma,KAK9C,OAHAxa,EAAMj2B,MAAK,SAAU0lB,EAAGQ,GACpB,OAAOR,EAAE8Q,SAAWtQ,EAAEsQ,YAEnBP,EA4Seya,CADlBza,EAAQC,EAAqBD,IAEpB75C,EAAI,EAAGA,EAAIm0D,EAAYl0D,OAAQD,IACpCkC,KAAKiyD,EAAYn0D,GAAG05C,MAAMG,EAAMsa,EAAYn0D,GAAG05C,YAInD,GAAI/7B,EAAWzb,KADf23C,EAAQD,EAAeC,KAEnB,OAAO33C,KAAK23C,GAAO34C,GAG3B,OAAOgB,MAkiGX2T,GAAM68C,QAleN,SAAkB7Y,GACd,IAAItlB,EAEJ,QAAcnnB,KADdysC,EAAQD,EAAeC,KACc,gBAAVA,IAA4B33C,KAAKk0C,UACxD,OAAOl0C,KAGX,IAAI8wD,EAAc9wD,KAAKy1C,OAAS4Z,GAAiBD,GAEjD,OAAQzX,GACJ,IAAK,OACDtlB,EAAOy+B,EAAY9wD,KAAKy7C,OAAQ,EAAG,GACnC,MACJ,IAAK,UACDppB,EAAOy+B,EAAY9wD,KAAKy7C,OAAQz7C,KAAKg8C,QAAUh8C,KAAKg8C,QAAU,EAAG,GACjE,MACJ,IAAK,QACD3pB,EAAOy+B,EAAY9wD,KAAKy7C,OAAQz7C,KAAKg8C,QAAS,GAC9C,MACJ,IAAK,OACD3pB,EAAOy+B,EAAY9wD,KAAKy7C,OAAQz7C,KAAKg8C,QAASh8C,KAAKolC,OAASplC,KAAKk/C,WACjE,MACJ,IAAK,UACD7sB,EAAOy+B,EAAY9wD,KAAKy7C,OAAQz7C,KAAKg8C,QAASh8C,KAAKolC,QAAUplC,KAAK+wD,aAAe,IACjF,MACJ,IAAK,MACL,IAAK,OACD1+B,EAAOy+B,EAAY9wD,KAAKy7C,OAAQz7C,KAAKg8C,QAASh8C,KAAKolC,QACnD,MACJ,IAAK,OACD/S,EAAOryB,KAAKu0C,GAAGrhC,UACfmf,GAAQ88B,GAAM98B,GAAQryB,KAAKy1C,OAAS,EA5D5B,IA4DgCz1C,KAAK6sD,aA3DvC,MA4DN,MACJ,IAAK,SACDx6B,EAAOryB,KAAKu0C,GAAGrhC,UACfmf,GAAQ88B,GAAM98B,EAhEN,KAiER,MACJ,IAAK,SACDA,EAAOryB,KAAKu0C,GAAGrhC,UACfmf,GAAQ88B,GAAM98B,EArEN,KA2EhB,OAFAryB,KAAKu0C,GAAG8Y,QAAQh7B,GAChBsgB,EAAMmD,aAAa91C,MAAM,GAClBA,MAsbX2T,GAAM4kB,SAAoBA,GAC1B5kB,GAAM0gB,QAxXN,WACI,IAAIqW,EAAI1qC,KACR,MAAO,CAAC0qC,EAAE+Q,OAAQ/Q,EAAEsR,QAAStR,EAAEtF,OAAQsF,EAAEsf,OAAQtf,EAAEogB,SAAUpgB,EAAEqgB,SAAUrgB,EAAEsgB,gBAuX/Er3C,GAAM0+C,SApXN,WACI,IAAI3nB,EAAI1qC,KACR,MAAO,CACH6rD,MAAOnhB,EAAE+Q,OACTW,OAAQ1R,EAAEsR,QACV5W,KAAMsF,EAAEtF,OACRwc,MAAOlX,EAAEkX,QACTE,QAASpX,EAAEoX,UACXG,QAASvX,EAAEuX,UACXkK,aAAczhB,EAAEyhB,iBA4WxBx4C,GAAM+xB,OA9XN,WACI,OAAO,IAAIv3B,KAAKnO,KAAKkT,YA8XzBS,GAAM2+C,YArnBN,SAAqBC,GACjB,IAAKvyD,KAAKk0C,UACN,OAAO,KAEX,IAAIjB,GAAqB,IAAfsf,EACN7nB,EAAIuI,EAAMjzC,KAAKgvB,QAAQikB,MAAQjzC,KACnC,OAAI0qC,EAAE+Q,OAAS,GAAK/Q,EAAE+Q,OAAS,KACpBxC,EAAavO,EAAGuI,EAAM,iCAAmC,gCAEhEx3B,EAAWtN,KAAKzP,UAAU4zD,aAEtBrf,EACOjzC,KAAK0lC,SAAS4sB,cAEd,IAAInkD,KAAKnO,KAAKkT,UAA+B,GAAnBlT,KAAK6sD,YAAmB,KAAMyF,cAAc9iD,QAAQ,IAAKypC,EAAavO,EAAG,MAG3GuO,EAAavO,EAAGuI,EAAM,+BAAiC,+BAqmBlEt/B,GAAM6+C,QA5lBN,WACI,IAAKxyD,KAAKk0C,UACN,MAAO,qBAAuBl0C,KAAKq1C,GAAK,OAE5C,IAAI7sC,EAAO,SACPiqD,EAAO,GACNzyD,KAAK0yD,YACNlqD,EAA4B,IAArBxI,KAAK6sD,YAAoB,aAAe,mBAC/C4F,EAAO,KAEX,IAAItvB,EAAS,IAAM36B,EAAO,MACtBizC,EAAQ,GAAKz7C,KAAKy7C,QAAUz7C,KAAKy7C,QAAU,KAAQ,OAAS,SAE5D3R,EAAS2oB,EAAO,OAEpB,OAAOzyD,KAAKslC,OAAOnC,EAASsY,EAHb,wBAG+B3R,IA8kBlDn2B,GAAMmxB,OA3WN,WAEI,OAAO9kC,KAAKk0C,UAAYl0C,KAAKsyD,cAAgB,MA0WjD3+C,GAAM/E,SA5nBN,WACI,OAAO5O,KAAKgvB,QAAQqW,OAAO,MAAMC,OAAO,qCA4nB5C3xB,GAAMg/C,KAvYN,WACI,OAAOtkD,KAAK0C,MAAM/Q,KAAKkT,UAAY,MAuYvCS,GAAMT,QA5YN,WACI,OAAOlT,KAAKu0C,GAAGrhC,UAAmC,KAArBlT,KAAK01C,SAAW,IA4YjD/hC,GAAMi/C,aA9VN,WACI,MAAO,CACH/6C,MAAO7X,KAAKq1C,GACZ/P,OAAQtlC,KAAKs1C,GACbjQ,OAAQrlC,KAAK21C,QACbwV,MAAOnrD,KAAKy1C,OACZ1C,OAAQ/yC,KAAK00C,UAyVrB/gC,GAAM8nC,KAAaG,GACnBjoC,GAAM+nC,WAvmGN,WACI,OAAOA,GAAW17C,KAAKy7C,SAumG3B9nC,GAAMwyC,SApSN,SAAyBtuC,GACrB,OAAO23C,GAAqBjwD,KAAKS,KACzB6X,EACA7X,KAAKi/C,OACLj/C,KAAKk/C,UACLl/C,KAAKg5C,aAAayN,MAAM7H,IACxB5+C,KAAKg5C,aAAayN,MAAM5H,MA+RpClrC,GAAMi8C,YA5RN,SAA4B/3C,GACxB,OAAO23C,GAAqBjwD,KAAKS,KACzB6X,EAAO7X,KAAKisD,UAAWjsD,KAAK+wD,aAAc,EAAG,IA2RzDp9C,GAAMo4C,QAAUp4C,GAAMm4C,SAnOtB,SAAwBj0C,GACpB,OAAgB,MAATA,EAAgBxJ,KAAKwC,MAAM7Q,KAAKg8C,QAAU,GAAK,GAAKh8C,KAAKg8C,MAAoB,GAAbnkC,EAAQ,GAAS7X,KAAKg8C,QAAU,IAmO3GroC,GAAMqoC,MAAcqB,GACpB1pC,GAAMsoC,YAz1FN,WACI,OAAOA,GAAYj8C,KAAKy7C,OAAQz7C,KAAKg8C,UAy1FzCroC,GAAMsrC,KAAiBtrC,GAAMq4C,MAznF7B,SAAqBn0C,GACjB,IAAIonC,EAAOj/C,KAAKg5C,aAAaiG,KAAKj/C,MAClC,OAAgB,MAAT6X,EAAgBonC,EAAOj/C,KAAKiV,IAAqB,GAAhB4C,EAAQonC,GAAW,MAwnF/DtrC,GAAMs4C,QAAiBt4C,GAAMk/C,SArnF7B,SAAwBh7C,GACpB,IAAIonC,EAAOK,GAAWt/C,KAAM,EAAG,GAAGi/C,KAClC,OAAgB,MAATpnC,EAAgBonC,EAAOj/C,KAAKiV,IAAqB,GAAhB4C,EAAQonC,GAAW,MAonF/DtrC,GAAM8rC,YAzRN,WACI,IAAIqT,EAAW9yD,KAAKg5C,aAAayN,MACjC,OAAOhH,GAAYz/C,KAAKy7C,OAAQqX,EAASlU,IAAKkU,EAASjU,MAwR3DlrC,GAAMo/C,eA9RN,WACI,OAAOtT,GAAYz/C,KAAKy7C,OAAQ,EAAG,IA8RvC9nC,GAAMyxB,KAAa4qB,GACnBr8C,GAAMitC,IAAajtC,GAAMu4C,KA55EzB,SAA0Br0C,GACtB,IAAK7X,KAAKk0C,UACN,OAAgB,MAATr8B,EAAgB7X,KAAOuuC,IAElC,IAAIqS,EAAM5gD,KAAKy1C,OAASz1C,KAAKu0C,GAAGwK,YAAc/+C,KAAKu0C,GAAGwS,SACtD,OAAa,MAATlvC,GACAA,EAjKR,SAAsBA,EAAOwtB,GACzB,MAAqB,kBAAVxtB,EACAA,EAGNgnB,MAAMhnB,GAKU,kBADrBA,EAAQwtB,EAAO8a,cAActoC,IAElBA,EAGJ,KARIpR,SAASoR,EAAO,IA2Jfm7C,CAAan7C,EAAO7X,KAAKg5C,cAC1Bh5C,KAAKiV,IAAI4C,EAAQ+oC,EAAK,MAEtBA,GAo5EfjtC,GAAMurC,QAh5EN,SAAgCrnC,GAC5B,IAAK7X,KAAKk0C,UACN,OAAgB,MAATr8B,EAAgB7X,KAAOuuC,IAElC,IAAI2Q,GAAWl/C,KAAK4gD,MAAQ,EAAI5gD,KAAKg5C,aAAayN,MAAM7H,KAAO,EAC/D,OAAgB,MAAT/mC,EAAgBqnC,EAAUl/C,KAAKiV,IAAI4C,EAAQqnC,EAAS,MA44E/DvrC,GAAMo9C,WAz4EN,SAA6Bl5C,GACzB,IAAK7X,KAAKk0C,UACN,OAAgB,MAATr8B,EAAgB7X,KAAOuuC,IAOlC,GAAa,MAAT12B,EAAe,CACf,IAAIqnC,EAzKZ,SAAyBrnC,EAAOwtB,GAC5B,MAAqB,kBAAVxtB,EACAwtB,EAAO8a,cAActoC,GAAS,GAAK,EAEvCgnB,MAAMhnB,GAAS,KAAOA,EAqKXo7C,CAAgBp7C,EAAO7X,KAAKg5C,cAC1C,OAAOh5C,KAAK4gD,IAAI5gD,KAAK4gD,MAAQ,EAAI1B,EAAUA,EAAU,GAErD,OAAOl/C,KAAK4gD,OAAS,GA63E7BjtC,GAAM0rC,UApLN,SAA0BxnC,GACtB,IAAIwnC,EAAYhxC,KAAKiqB,OAAOt4B,KAAKgvB,QAAQwhC,QAAQ,OAASxwD,KAAKgvB,QAAQwhC,QAAQ,SAAW,OAAS,EACnG,OAAgB,MAAT34C,EAAgBwnC,EAAYr/C,KAAKiV,IAAK4C,EAAQwnC,EAAY,MAmLrE1rC,GAAMq2C,KAAOr2C,GAAMiuC,MAAQc,GAC3B/uC,GAAMm3C,OAASn3C,GAAMmuC,QAAUmO,GAC/Bt8C,GAAMo3C,OAASp3C,GAAMsuC,QAAUiO,GAC/Bv8C,GAAMq3C,YAAcr3C,GAAMw4C,aAAeiE,GACzCz8C,GAAMk5C,UAxkCN,SAAuBh1C,EAAOq7C,EAAeC,GACzC,IACIC,EADArpD,EAAS/J,KAAK01C,SAAW,EAE7B,IAAK11C,KAAKk0C,UACN,OAAgB,MAATr8B,EAAgB7X,KAAOuuC,IAElC,GAAa,MAAT12B,EAAe,CACf,GAAqB,kBAAVA,GAEP,GAAc,QADdA,EAAQi1C,GAAiBvS,GAAkB1iC,IAEvC,OAAO7X,UAEJqO,KAAK2gC,IAAIn3B,GAAS,KAAOs7C,IAChCt7C,GAAgB,IAmBpB,OAjBK7X,KAAKy1C,QAAUyd,IAChBE,EAAc7F,GAAcvtD,OAEhCA,KAAK01C,QAAU79B,EACf7X,KAAKy1C,QAAS,EACK,MAAf2d,GACApzD,KAAKiV,IAAIm+C,EAAa,KAEtBrpD,IAAW8N,KACNq7C,GAAiBlzD,KAAKqzD,kBACvB5E,GAAYzuD,KAAM4tD,GAAe/1C,EAAQ9N,EAAQ,KAAM,GAAG,GAClD/J,KAAKqzD,oBACbrzD,KAAKqzD,mBAAoB,EACzB1gB,EAAMmD,aAAa91C,MAAM,GACzBA,KAAKqzD,kBAAoB,OAG1BrzD,KAEP,OAAOA,KAAKy1C,OAAS1rC,EAASwjD,GAAcvtD,OAuiCpD2T,GAAMs/B,IArhCN,SAAyBigB,GACrB,OAAOlzD,KAAK6sD,UAAU,EAAGqG,IAqhC7Bv/C,GAAM25C,MAlhCN,SAA2B4F,GASvB,OARIlzD,KAAKy1C,SACLz1C,KAAK6sD,UAAU,EAAGqG,GAClBlzD,KAAKy1C,QAAS,EAEVyd,GACAlzD,KAAKu4B,SAASg1B,GAAcvtD,MAAO,MAGpCA,MA0gCX2T,GAAM2/C,UAvgCN,WACI,GAAiB,MAAbtzD,KAAKw1C,KACLx1C,KAAK6sD,UAAU7sD,KAAKw1C,MAAM,GAAO,QAC9B,GAAuB,kBAAZx1C,KAAKq1C,GAAiB,CACpC,IAAIke,EAAQzG,GAAiBxS,GAAat6C,KAAKq1C,IAClC,MAATke,EACAvzD,KAAK6sD,UAAU0G,GAGfvzD,KAAK6sD,UAAU,GAAG,GAG1B,OAAO7sD,MA4/BX2T,GAAM6/C,qBAz/BN,SAA+B37C,GAC3B,QAAK7X,KAAKk0C,YAGVr8B,EAAQA,EAAQ2uC,GAAY3uC,GAAOg1C,YAAc,GAEzC7sD,KAAK6sD,YAAch1C,GAAS,KAAO,IAo/B/ClE,GAAM8/C,MAj/BN,WACI,OACIzzD,KAAK6sD,YAAc7sD,KAAKgvB,QAAQgtB,MAAM,GAAG6Q,aACzC7sD,KAAK6sD,YAAc7sD,KAAKgvB,QAAQgtB,MAAM,GAAG6Q,aA++BjDl5C,GAAM++C,QAt9BN,WACI,QAAO1yD,KAAKk0C,YAAal0C,KAAKy1C,QAs9BlC9hC,GAAM+/C,YAn9BN,WACI,QAAO1zD,KAAKk0C,WAAYl0C,KAAKy1C,QAm9BjC9hC,GAAM85C,MAAuBA,GAC7B95C,GAAMw3C,MAAuBsC,GAC7B95C,GAAMggD,SA9EN,WACI,OAAO3zD,KAAKy1C,OAAS,MAAQ,IA8EjC9hC,GAAMigD,SA3EN,WACI,OAAO5zD,KAAKy1C,OAAS,6BAA+B,IA2ExD9hC,GAAMkgD,MAAS7tB,EAAU,kDAAmDgqB,IAC5Er8C,GAAMyoC,OAASpW,EAAU,mDAAoDqX,IAC7E1pC,GAAMk4C,MAAS7lB,EAAU,iDAAkD4V,IAC3EjoC,GAAM8+C,KAASzsB,EAAU,4GAjjCzB,SAAqBnuB,EAAOq7C,GACxB,OAAa,MAATr7C,GACqB,kBAAVA,IACPA,GAASA,GAGb7X,KAAK6sD,UAAUh1C,EAAOq7C,GAEflzD,OAECA,KAAK6sD,eAwiCrBl5C,GAAMmgD,aAAe9tB,EAAU,2GAr/B/B,WACI,IAAK9G,EAAYl/B,KAAK+zD,eAClB,OAAO/zD,KAAK+zD,cAGhB,IAAIjsB,EAAI,GAKR,GAHAkN,EAAWlN,EAAG9nC,OACd8nC,EAAIsiB,GAActiB,IAEZyT,GAAI,CACN,IAAIh/B,EAAQurB,EAAE2N,OAAS3C,EAAUhL,EAAEyT,IAAMiL,GAAY1e,EAAEyT,IACvDv7C,KAAK+zD,cAAgB/zD,KAAKk0C,WACtBkC,EAActO,EAAEyT,GAAIh/B,EAAM8X,WAAa,OAE3Cr0B,KAAK+zD,eAAgB,EAGzB,OAAO/zD,KAAK+zD,iBAi/BhB,IAAIC,GAAU3c,EAAO34C,UAiCrB,SAASu1D,GAAO3uB,EAAQt8B,EAAOkrD,EAAOrrD,GAClC,IAAIw8B,EAASuf,KACT3R,EAAMH,IAAY3lC,IAAItE,EAAQG,GAClC,OAAOq8B,EAAO6uB,GAAOjhB,EAAK3N,GAG9B,SAAS6uB,GAAgB7uB,EAAQt8B,EAAOkrD,GAQpC,GAPIjgC,EAASqR,KACTt8B,EAAQs8B,EACRA,OAASp6B,GAGbo6B,EAASA,GAAU,GAEN,MAATt8B,EACA,OAAOirD,GAAM3uB,EAAQt8B,EAAOkrD,EAAO,SAGvC,IAAIp2D,EACAmtC,EAAM,GACV,IAAKntC,EAAI,EAAGA,EAAI,GAAIA,IAChBmtC,EAAIntC,GAAKm2D,GAAM3uB,EAAQxnC,EAAGo2D,EAAO,SAErC,OAAOjpB,EAWX,SAASmpB,GAAkBC,EAAc/uB,EAAQt8B,EAAOkrD,GACxB,mBAAjBG,GACHpgC,EAASqR,KACTt8B,EAAQs8B,EACRA,OAASp6B,GAGbo6B,EAASA,GAAU,KAGnBt8B,EADAs8B,EAAS+uB,EAETA,GAAe,EAEXpgC,EAASqR,KACTt8B,EAAQs8B,EACRA,OAASp6B,GAGbo6B,EAASA,GAAU,IAGvB,IAOIxnC,EAPAunC,EAASuf,KACT0P,EAAQD,EAAehvB,EAAOohB,MAAM7H,IAAM,EAE9C,GAAa,MAAT51C,EACA,OAAOirD,GAAM3uB,GAASt8B,EAAQsrD,GAAS,EAAGJ,EAAO,OAIrD,IAAIjpB,EAAM,GACV,IAAKntC,EAAI,EAAGA,EAAI,EAAGA,IACfmtC,EAAIntC,GAAKm2D,GAAM3uB,GAASxnC,EAAIw2D,GAAS,EAAGJ,EAAO,OAEnD,OAAOjpB,EAlGX+oB,GAAQpR,SAzgHR,SAAmBtkD,EAAK66C,EAAK1oC,GACzB,IAAI2oC,EAASp5C,KAAKu0D,UAAUj2D,IAAQ0B,KAAKu0D,UAAL,SACpC,OAAO94C,EAAW29B,GAAUA,EAAO75C,KAAK45C,EAAK1oC,GAAO2oC,GAwgHxD4a,GAAQxa,eA5/GR,SAAyBl7C,GACrB,IAAIgnC,EAAStlC,KAAKw0D,gBAAgBl2D,GAC9Bm2D,EAAcz0D,KAAKw0D,gBAAgBl2D,EAAIq4B,eAE3C,OAAI2O,IAAWmvB,EACJnvB,GAGXtlC,KAAKw0D,gBAAgBl2D,GAAOm2D,EAAYjlD,QAAQ,oBAAoB,SAAU2lC,GAC1E,OAAOA,EAAIlvB,MAAM,MAGdjmB,KAAKw0D,gBAAgBl2D,KAi/GhC01D,GAAQ1a,YA5+GR,WACI,OAAOt5C,KAAK00D,cA4+GhBV,GAAQjb,QAt+GR,SAAkB5hC,GACd,OAAOnX,KAAK20D,SAASnlD,QAAQ,KAAM2H,IAs+GvC68C,GAAQ3J,SAAkBgG,GAC1B2D,GAAQ/C,WAAkBZ,GAC1B2D,GAAQtQ,aAp9GR,SAAuBvsC,EAAQ+5C,EAAe1kD,EAAQooD,GAClD,IAAIxb,EAASp5C,KAAK60D,cAAcroD,GAChC,OAAQiP,EAAW29B,GACfA,EAAOjiC,EAAQ+5C,EAAe1kD,EAAQooD,GACtCxb,EAAO5pC,QAAQ,MAAO2H,IAi9G9B68C,GAAQc,WA98GR,SAAqB1H,EAAMhU,GACvB,IAAI9T,EAAStlC,KAAK60D,cAAczH,EAAO,EAAI,SAAW,QACtD,OAAO3xC,EAAW6pB,GAAUA,EAAO8T,GAAU9T,EAAO91B,QAAQ,MAAO4pC,IA68GvE4a,GAAQ7mD,IA7lHR,SAAcy+B,GACV,IAAI/V,EAAM/3B,EACV,IAAKA,KAAK8tC,EAEFnwB,EADJoa,EAAO+V,EAAO9tC,IAEVkC,KAAKlC,GAAK+3B,EAEV71B,KAAK,IAAMlC,GAAK+3B,EAGxB71B,KAAK+kD,QAAUnZ,EAIf5rC,KAAK+vD,+BAAiC,IAAIxtD,QACrCvC,KAAK6vD,wBAAwBrtD,QAAUxC,KAAK8vD,cAActtD,QACvD,IAAO,UAAWA,SA+kH9BwxD,GAAQ5X,OAxhGR,SAAuB1R,EAAGpF,GACtB,OAAKoF,EAIEp3B,EAAQtT,KAAKwsD,SAAWxsD,KAAKwsD,QAAQ9hB,EAAEsR,SAC1Ch8C,KAAKwsD,SAASxsD,KAAKwsD,QAAQuI,UAAYvY,IAAkB/vC,KAAK64B,GAAU,SAAW,cAAcoF,EAAEsR,SAJ5F1oC,EAAQtT,KAAKwsD,SAAWxsD,KAAKwsD,QAChCxsD,KAAKwsD,QAAL,YAshGZwH,GAAQ7X,YA/gGR,SAA4BzR,EAAGpF,GAC3B,OAAKoF,EAIEp3B,EAAQtT,KAAKg1D,cAAgBh1D,KAAKg1D,aAAatqB,EAAEsR,SACpDh8C,KAAKg1D,aAAaxY,GAAiB/vC,KAAK64B,GAAU,SAAW,cAAcoF,EAAEsR,SAJtE1oC,EAAQtT,KAAKg1D,cAAgBh1D,KAAKg1D,aACrCh1D,KAAKg1D,aAAL,YA6gGZhB,GAAQzX,YA99FR,SAA4BK,EAAWtX,EAAQyN,GAC3C,IAAIj1C,EAAGq7C,EAAKwB,EAEZ,GAAI36C,KAAKi1D,kBACL,OAAOtY,GAAkBp9C,KAAKS,KAAM48C,EAAWtX,EAAQyN,GAY3D,IATK/yC,KAAKg9C,eACNh9C,KAAKg9C,aAAe,GACpBh9C,KAAKi9C,iBAAmB,GACxBj9C,KAAKk9C,kBAAoB,IAMxBp/C,EAAI,EAAGA,EAAI,GAAIA,IAAK,CAYrB,GAVAq7C,EAAMrG,EAAU,CAAC,IAAMh1C,IACnBi1C,IAAW/yC,KAAKi9C,iBAAiBn/C,KACjCkC,KAAKi9C,iBAAiBn/C,GAAK,IAAIyE,OAAO,IAAMvC,KAAKo8C,OAAOjD,EAAK,IAAI3pC,QAAQ,IAAK,IAAM,IAAK,KACzFxP,KAAKk9C,kBAAkBp/C,GAAK,IAAIyE,OAAO,IAAMvC,KAAKm8C,YAAYhD,EAAK,IAAI3pC,QAAQ,IAAK,IAAM,IAAK,MAE9FujC,GAAW/yC,KAAKg9C,aAAal/C,KAC9B68C,EAAQ,IAAM36C,KAAKo8C,OAAOjD,EAAK,IAAM,KAAOn5C,KAAKm8C,YAAYhD,EAAK,IAClEn5C,KAAKg9C,aAAal/C,GAAK,IAAIyE,OAAOo4C,EAAMnrC,QAAQ,IAAK,IAAK,MAG1DujC,GAAqB,SAAXzN,GAAqBtlC,KAAKi9C,iBAAiBn/C,GAAG2O,KAAKmwC,GAC7D,OAAO9+C,EACJ,GAAIi1C,GAAqB,QAAXzN,GAAoBtlC,KAAKk9C,kBAAkBp/C,GAAG2O,KAAKmwC,GACpE,OAAO9+C,EACJ,IAAKi1C,GAAU/yC,KAAKg9C,aAAal/C,GAAG2O,KAAKmwC,GAC5C,OAAO9+C,IA87FnBk2D,GAAQ1X,YA33FR,SAAsBnhC,GAClB,OAAInb,KAAKi1D,mBACApiB,EAAW7yC,KAAM,iBAClBw9C,GAAmBj+C,KAAKS,MAExBmb,EACOnb,KAAK+9C,mBAEL/9C,KAAK69C,eAGXhL,EAAW7yC,KAAM,kBAClBA,KAAK69C,aAAeN,IAEjBv9C,KAAK+9C,oBAAsB5iC,EAC9Bnb,KAAK+9C,mBAAqB/9C,KAAK69C,eA62F3CmW,GAAQ3X,iBAh5FR,SAA2BlhC,GACvB,OAAInb,KAAKi1D,mBACApiB,EAAW7yC,KAAM,iBAClBw9C,GAAmBj+C,KAAKS,MAExBmb,EACOnb,KAAKg+C,wBAELh+C,KAAK89C,oBAGXjL,EAAW7yC,KAAM,uBAClBA,KAAK89C,kBAAoBR,IAEtBt9C,KAAKg+C,yBAA2B7iC,EACnCnb,KAAKg+C,wBAA0Bh+C,KAAK89C,oBAk4FhDkW,GAAQ/U,KAxsFR,SAAqB9F,GACjB,OAAOmG,GAAWnG,EAAKn5C,KAAKymD,MAAM7H,IAAK5+C,KAAKymD,MAAM5H,KAAKI,MAwsF3D+U,GAAQkB,eA5rFR,WACI,OAAOl1D,KAAKymD,MAAM5H,KA4rFtBmV,GAAQmB,eAjsFR,WACI,OAAOn1D,KAAKymD,MAAM7H,KAksFtBoV,GAAQjU,SAplFR,SAAyBrV,EAAGpF,GACxB,IAAIya,EAAWzsC,EAAQtT,KAAKo1D,WAAap1D,KAAKo1D,UAC1Cp1D,KAAKo1D,UAAW1qB,IAAW,IAANA,GAAc1qC,KAAKo1D,UAAUL,SAAStoD,KAAK64B,GAAW,SAAW,cAC1F,OAAc,IAANoF,EAAciV,GAAcI,EAAU//C,KAAKymD,MAAM7H,KAClDlU,EAAKqV,EAASrV,EAAEkW,OAASb,GAilFpCiU,GAAQnU,YAvkFR,SAA4BnV,GACxB,OAAc,IAANA,EAAciV,GAAc3/C,KAAKq1D,aAAcr1D,KAAKymD,MAAM7H,KAC3DlU,EAAK1qC,KAAKq1D,aAAa3qB,EAAEkW,OAAS5gD,KAAKq1D,cAskFlDrB,GAAQlU,cA9kFR,SAA8BpV,GAC1B,OAAc,IAANA,EAAciV,GAAc3/C,KAAKs1D,eAAgBt1D,KAAKymD,MAAM7H,KAC7DlU,EAAK1qC,KAAKs1D,eAAe5qB,EAAEkW,OAAS5gD,KAAKs1D,gBA6kFpDtB,GAAQ7T,cApgFR,SAA8BK,EAAalb,EAAQyN,GAC/C,IAAIj1C,EAAGq7C,EAAKwB,EAEZ,GAAI36C,KAAKu1D,oBACL,OAAOhV,GAAoBhhD,KAAKS,KAAMwgD,EAAalb,EAAQyN,GAU/D,IAPK/yC,KAAKygD,iBACNzgD,KAAKygD,eAAiB,GACtBzgD,KAAK2gD,kBAAoB,GACzB3gD,KAAK0gD,oBAAsB,GAC3B1gD,KAAKw1D,mBAAqB,IAGzB13D,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAcpB,GAXAq7C,EAAMrG,EAAU,CAAC,IAAM,IAAI8N,IAAI9iD,GAC3Bi1C,IAAW/yC,KAAKw1D,mBAAmB13D,KACnCkC,KAAKw1D,mBAAmB13D,GAAK,IAAIyE,OAAO,IAAMvC,KAAK+/C,SAAS5G,EAAK,IAAI3pC,QAAQ,IAAK,QAAU,IAAK,KACjGxP,KAAK0gD,oBAAoB5iD,GAAK,IAAIyE,OAAO,IAAMvC,KAAK8/C,cAAc3G,EAAK,IAAI3pC,QAAQ,IAAK,QAAU,IAAK,KACvGxP,KAAK2gD,kBAAkB7iD,GAAK,IAAIyE,OAAO,IAAMvC,KAAK6/C,YAAY1G,EAAK,IAAI3pC,QAAQ,IAAK,QAAU,IAAK,MAElGxP,KAAKygD,eAAe3iD,KACrB68C,EAAQ,IAAM36C,KAAK+/C,SAAS5G,EAAK,IAAM,KAAOn5C,KAAK8/C,cAAc3G,EAAK,IAAM,KAAOn5C,KAAK6/C,YAAY1G,EAAK,IACzGn5C,KAAKygD,eAAe3iD,GAAK,IAAIyE,OAAOo4C,EAAMnrC,QAAQ,IAAK,IAAK,MAG5DujC,GAAqB,SAAXzN,GAAqBtlC,KAAKw1D,mBAAmB13D,GAAG2O,KAAK+zC,GAC/D,OAAO1iD,EACJ,GAAIi1C,GAAqB,QAAXzN,GAAoBtlC,KAAK0gD,oBAAoB5iD,GAAG2O,KAAK+zC,GACtE,OAAO1iD,EACJ,GAAIi1C,GAAqB,OAAXzN,GAAmBtlC,KAAK2gD,kBAAkB7iD,GAAG2O,KAAK+zC,GACnE,OAAO1iD,EACJ,IAAKi1C,GAAU/yC,KAAKygD,eAAe3iD,GAAG2O,KAAK+zC,GAC9C,OAAO1iD,IAm+EnBk2D,GAAQ9T,cAr7ER,SAAwB/kC,GACpB,OAAInb,KAAKu1D,qBACA1iB,EAAW7yC,KAAM,mBAClBghD,GAAqBzhD,KAAKS,MAE1Bmb,EACOnb,KAAKwhD,qBAELxhD,KAAKqhD,iBAGXxO,EAAW7yC,KAAM,oBAClBA,KAAKqhD,eAAiBR,IAEnB7gD,KAAKwhD,sBAAwBrmC,EAChCnb,KAAKwhD,qBAAuBxhD,KAAKqhD,iBAu6E7C2S,GAAQ/T,mBAl6ER,SAA6B9kC,GACzB,OAAInb,KAAKu1D,qBACA1iB,EAAW7yC,KAAM,mBAClBghD,GAAqBzhD,KAAKS,MAE1Bmb,EACOnb,KAAKyhD,0BAELzhD,KAAKshD,sBAGXzO,EAAW7yC,KAAM,yBAClBA,KAAKshD,oBAAsBR,IAExB9gD,KAAKyhD,2BAA6BtmC,EACrCnb,KAAKyhD,0BAA4BzhD,KAAKshD,sBAo5ElD0S,GAAQhU,iBA/4ER,SAA2B7kC,GACvB,OAAInb,KAAKu1D,qBACA1iB,EAAW7yC,KAAM,mBAClBghD,GAAqBzhD,KAAKS,MAE1Bmb,EACOnb,KAAK0hD,wBAEL1hD,KAAKuhD,oBAGX1O,EAAW7yC,KAAM,uBAClBA,KAAKuhD,kBAAoBR,IAEtB/gD,KAAK0hD,yBAA2BvmC,EACnCnb,KAAK0hD,wBAA0B1hD,KAAKuhD,oBAk4EhDyS,GAAQ5R,KAtuER,SAAqBvqC,GAGjB,MAAiD,OAAxCA,EAAQ,IAAIqe,cAAcjO,OAAO,IAouE9C+rC,GAAQjgB,SAhuER,SAAyB6N,EAAOE,EAAS2T,GACrC,OAAI7T,EAAQ,GACD6T,EAAU,KAAO,KAEjBA,EAAU,KAAO,MAwzEhC9Q,GAAmB,KAAM,CACrBlB,uBAAwB,uBACxB1K,QAAU,SAAU5hC,GAChB,IAAIywB,EAAIzwB,EAAS,GAKjB,OAAOA,GAJoC,IAA7B8+B,EAAM9+B,EAAS,IAAM,IAAa,KACrC,IAANywB,EAAW,KACL,IAANA,EAAW,KACL,IAANA,EAAW,KAAO,SAO/B+K,EAAMuc,KAAOlpB,EAAU,wDAAyD2e,IAChFhS,EAAM+iB,SAAW1vB,EAAU,gEAAiE4e,IAE5F,IAAI+Q,GAAUtnD,KAAK2gC,IAmBnB,SAAS4mB,GAAehK,EAAU/zC,EAAO7Y,EAAOsvD,GAC5C,IAAI/xC,EAAQqxC,GAAe/1C,EAAO7Y,GAMlC,OAJA4sD,EAASU,eAAiBgC,EAAY/xC,EAAM+vC,cAC5CV,EAASW,OAAiB+B,EAAY/xC,EAAMgwC,MAC5CX,EAASY,SAAiB8B,EAAY/xC,EAAMiwC,QAErCZ,EAASc,UAapB,SAASmJ,GAAS1+C,GACd,OAAIA,EAAS,EACF9I,KAAK0C,MAAMoG,GAEX9I,KAAKwC,KAAKsG,GAmDzB,SAAS2+C,GAAc5J,GAGnB,OAAc,KAAPA,EAAc,OAGzB,SAAS6J,GAAc3Z,GAEnB,OAAgB,OAATA,EAAkB,KAkD7B,SAAS4Z,GAAQC,GACb,OAAO,WACH,OAAOj2D,KAAKk2D,GAAGD,IAIvB,IAAIE,GAAiBH,GAAO,MACxBI,GAAiBJ,GAAO,KACxBK,GAAiBL,GAAO,KACxBM,GAAiBN,GAAO,KACxBO,GAAiBP,GAAO,KACxBQ,GAAiBR,GAAO,KACxBS,GAAiBT,GAAO,KACxBU,GAAiBV,GAAO,KACxBW,GAAiBX,GAAO,KAW5B,SAASY,GAAW54C,GAChB,OAAO,WACH,OAAOhe,KAAKk0C,UAAYl0C,KAAKysD,MAAMzuC,GAAQuwB,KAInD,IAAI4d,GAAeyK,GAAW,gBAC1B3U,GAAe2U,GAAW,WAC1B9U,GAAe8U,GAAW,WAC1BhV,GAAegV,GAAW,SAC1B1K,GAAe0K,GAAW,QAC1Bxa,GAAewa,GAAW,UAC1B/K,GAAe+K,GAAW,SAM1Bt+B,GAAQjqB,KAAKiqB,MACbu+B,GAAa,CACbhT,GAAI,GACJxc,EAAI,GACJqD,EAAI,GACJwT,EAAI,GACJrT,EAAI,GACJsT,EAAI,IAIR,SAAS2Y,GAAkBtqD,EAAQ2K,EAAQ+5C,EAAe0D,EAAUvvB,GAChE,OAAOA,EAAOqe,aAAavsC,GAAU,IAAK+5C,EAAe1kD,EAAQooD,GAwErE,IAAImC,GAAQ1oD,KAAK2gC,IAEjB,SAASlC,GAAKpF,GACV,OAASA,EAAI,IAAMA,EAAI,KAAQA,EAGnC,SAASsvB,KAQL,IAAKh3D,KAAKk0C,UACN,OAAOl0C,KAAKg5C,aAAaM,cAG7B,IAGIwI,EAASF,EAHTK,EAAU8U,GAAM/2D,KAAKssD,eAAiB,IACtCJ,EAAe6K,GAAM/2D,KAAKusD,OAC1BnQ,EAAe2a,GAAM/2D,KAAKwsD,SAI9B1K,EAAoB9L,EAASiM,EAAU,IACvCL,EAAoB5L,EAAS8L,EAAU,IACvCG,GAAW,GACXH,GAAW,GAQX,IAAImV,EALKjhB,EAASoG,EAAS,IAMvB+B,EALJ/B,GAAU,GAMN8a,EAAIhL,EACJhO,EAAI0D,EACJlX,EAAIoX,EACJza,EAAI4a,EAAUA,EAAQ1Q,QAAQ,GAAG/hC,QAAQ,SAAU,IAAM,GACzD2nD,EAAQn3D,KAAKo2D,YAEjB,IAAKe,EAGD,MAAO,MAGX,IAAIC,EAAYD,EAAQ,EAAI,IAAM,GAC9BE,EAASvqB,GAAK9sC,KAAKwsD,WAAa1f,GAAKqqB,GAAS,IAAM,GACpDG,EAAWxqB,GAAK9sC,KAAKusD,SAAWzf,GAAKqqB,GAAS,IAAM,GACpDI,EAAUzqB,GAAK9sC,KAAKssD,iBAAmBxf,GAAKqqB,GAAS,IAAM,GAE/D,OAAOC,EAAY,KACdH,EAAII,EAASJ,EAAI,IAAM,KACvB9Y,EAAIkZ,EAASlZ,EAAI,IAAM,KACvB+Y,EAAII,EAAWJ,EAAI,IAAM,KACxBhZ,GAAKxT,GAAKrD,EAAK,IAAM,KACtB6W,EAAIqZ,EAAUrZ,EAAI,IAAM,KACxBxT,EAAI6sB,EAAU7sB,EAAI,IAAM,KACxBrD,EAAIkwB,EAAUlwB,EAAI,IAAM,IAGjC,IAAImwB,GAAU7L,GAASjtD,UAwGvB,OAtGA84D,GAAQtjB,QA5tDR,WACI,OAAOl0C,KAAKm0C,UA4tDhBqjB,GAAQxoB,IAxVR,WACI,IAAI75B,EAAiBnV,KAAKysD,MAa1B,OAXAzsD,KAAKssD,cAAgBqJ,GAAQ31D,KAAKssD,eAClCtsD,KAAKusD,MAAgBoJ,GAAQ31D,KAAKusD,OAClCvsD,KAAKwsD,QAAgBmJ,GAAQ31D,KAAKwsD,SAElCr3C,EAAKg3C,aAAgBwJ,GAAQxgD,EAAKg3C,cAClCh3C,EAAK8sC,QAAgB0T,GAAQxgD,EAAK8sC,SAClC9sC,EAAK2sC,QAAgB6T,GAAQxgD,EAAK2sC,SAClC3sC,EAAKysC,MAAgB+T,GAAQxgD,EAAKysC,OAClCzsC,EAAKinC,OAAgBuZ,GAAQxgD,EAAKinC,QAClCjnC,EAAK02C,MAAgB8J,GAAQxgD,EAAK02C,OAE3B7rD,MA2UXw3D,GAAQviD,IA7TR,SAAgB4C,EAAO7Y,GACnB,OAAO42D,GAAc51D,KAAM6X,EAAO7Y,EAAO,IA6T7Cw4D,GAAQj/B,SAzTR,SAAqB1gB,EAAO7Y,GACxB,OAAO42D,GAAc51D,KAAM6X,EAAO7Y,GAAQ,IAyT9Cw4D,GAAQtB,GApPR,SAAave,GACT,IAAK33C,KAAKk0C,UACN,OAAO3F,IAEX,IAAI2d,EACA9P,EACA+P,EAAensD,KAAKssD,cAIxB,GAAc,WAFd3U,EAAQD,EAAeC,KAEY,YAAVA,GAAiC,SAAVA,EAG5C,OAFAuU,EAAOlsD,KAAKusD,MAAQJ,EAAe,MACnC/P,EAASp8C,KAAKwsD,QAAUsJ,GAAa5J,GAC7BvU,GACJ,IAAK,QAAW,OAAOyE,EACvB,IAAK,UAAW,OAAOA,EAAS,EAChC,IAAK,OAAW,OAAOA,EAAS,QAKpC,OADA8P,EAAOlsD,KAAKusD,MAAQl+C,KAAKiqB,MAAMy9B,GAAa/1D,KAAKwsD,UACzC7U,GACJ,IAAK,OAAW,OAAOuU,EAAO,EAAQC,EAAe,OACrD,IAAK,MAAW,OAAOD,EAAeC,EAAe,MACrD,IAAK,OAAW,OAAc,GAAPD,EAAeC,EAAe,KACrD,IAAK,SAAW,OAAc,KAAPD,EAAeC,EAAe,IACrD,IAAK,SAAW,OAAc,MAAPD,EAAeC,EAAe,IAErD,IAAK,cAAe,OAAO99C,KAAK0C,MAAa,MAAPm7C,GAAgBC,EACtD,QAAS,MAAM,IAAI/9C,MAAM,gBAAkBupC,KAwNvD6f,GAAQrB,eAAiBA,GACzBqB,GAAQpB,UAAiBA,GACzBoB,GAAQnB,UAAiBA,GACzBmB,GAAQlB,QAAiBA,GACzBkB,GAAQjB,OAAiBA,GACzBiB,GAAQhB,QAAiBA,GACzBgB,GAAQf,SAAiBA,GACzBe,GAAQd,WAAiBA,GACzBc,GAAQb,QAAiBA,GACzBa,GAAQtkD,QA3NR,WACI,OAAKlT,KAAKk0C,UAINl0C,KAAKssD,cACQ,MAAbtsD,KAAKusD,MACJvsD,KAAKwsD,QAAU,GAAM,OACK,QAA3BvW,EAAMj2C,KAAKwsD,QAAU,IANdje,KA0NfipB,GAAQ9K,QAzTR,WACI,IAIIzK,EAASH,EAASF,EAAOiK,EAAO4L,EAJhCtL,EAAensD,KAAKssD,cACpBJ,EAAelsD,KAAKusD,MACpBnQ,EAAep8C,KAAKwsD,QACpBr3C,EAAenV,KAAKysD,MAwCxB,OAnCON,GAAgB,GAAKD,GAAQ,GAAK9P,GAAU,GAC1C+P,GAAgB,GAAKD,GAAQ,GAAK9P,GAAU,IACjD+P,GAAuD,MAAvC0J,GAAQE,GAAa3Z,GAAU8P,GAC/CA,EAAO,EACP9P,EAAS,GAKbjnC,EAAKg3C,aAAeA,EAAe,IAEnClK,EAAoBjM,EAASmW,EAAe,KAC5Ch3C,EAAK8sC,QAAeA,EAAU,GAE9BH,EAAoB9L,EAASiM,EAAU,IACvC9sC,EAAK2sC,QAAeA,EAAU,GAE9BF,EAAoB5L,EAAS8L,EAAU,IACvC3sC,EAAKysC,MAAeA,EAAQ,GAE5BsK,GAAQlW,EAAS4L,EAAQ,IAGzB6V,EAAiBzhB,EAAS8f,GAAa5J,IACvC9P,GAAUqb,EACVvL,GAAQ2J,GAAQE,GAAa0B,IAG7B5L,EAAQ7V,EAASoG,EAAS,IAC1BA,GAAU,GAEVjnC,EAAK+2C,KAASA,EACd/2C,EAAKinC,OAASA,EACdjnC,EAAK02C,MAASA,EAEP7rD,MA8QXw3D,GAAQxoC,MAjMR,WACI,OAAO4+B,GAAe5tD,OAiM1Bw3D,GAAQtgD,IA9LR,SAAgBygC,GAEZ,OADAA,EAAQD,EAAeC,GAChB33C,KAAKk0C,UAAYl0C,KAAK23C,EAAQ,OAASpJ,KA6LlDipB,GAAQrL,aAAiBA,GACzBqL,GAAQvV,QAAiBA,GACzBuV,GAAQ1V,QAAiBA,GACzB0V,GAAQ5V,MAAiBA,GACzB4V,GAAQtL,KAAiBA,GACzBsL,GAAQxL,MAjLR,WACI,OAAOhW,EAASh2C,KAAKksD,OAAS,IAiLlCsL,GAAQpb,OAAiBA,GACzBob,GAAQ3L,MAAiBA,GACzB2L,GAAQrG,SA3GR,SAAmBuG,GACf,IAAK13D,KAAKk0C,UACN,OAAOl0C,KAAKg5C,aAAaM,cAG7B,IAAIjU,EAASrlC,KAAKg5C,aACdI,EA5DR,SAAyBue,EAAgBzG,EAAe7rB,GACpD,IAAIumB,EAAWgC,GAAe+J,GAAgB3oB,MAC1CiT,EAAW3pB,GAAMszB,EAASsK,GAAG,MAC7BpU,EAAWxpB,GAAMszB,EAASsK,GAAG,MAC7BtU,EAAWtpB,GAAMszB,EAASsK,GAAG,MAC7BhK,EAAW5zB,GAAMszB,EAASsK,GAAG,MAC7B9Z,EAAW9jB,GAAMszB,EAASsK,GAAG,MAC7BrK,EAAWvzB,GAAMszB,EAASsK,GAAG,MAE7B9uB,EAAI6a,GAAW4U,GAAWhT,IAAM,CAAC,IAAK5B,IAClCA,EAAU4U,GAAWxvB,GAAO,CAAC,KAAM4a,IACnCH,GAAW,GAAiB,CAAC,MAC7BA,EAAU+U,GAAWnsB,GAAO,CAAC,KAAMoX,IACnCF,GAAW,GAAiB,CAAC,MAC7BA,EAAUiV,GAAW3Y,GAAO,CAAC,KAAM0D,IACnCsK,GAAW,GAAiB,CAAC,MAC7BA,EAAU2K,GAAWhsB,GAAO,CAAC,KAAMqhB,IACnC9P,GAAW,GAAiB,CAAC,MAC7BA,EAAUya,GAAW1Y,GAAO,CAAC,KAAM/B,IACnCyP,GAAW,GAAiB,CAAC,MAAkB,CAAC,KAAMA,GAK9D,OAHAzkB,EAAE,GAAK8pB,EACP9pB,EAAE,IAAMuwB,EAAiB,EACzBvwB,EAAE,GAAK/B,EACAyxB,GAAkB12D,MAAM,KAAMgnC,GAoCxBwwB,CAAe53D,MAAO03D,EAAYryB,GAM/C,OAJIqyB,IACAte,EAAS/T,EAAOyvB,YAAY90D,KAAMo5C,IAG/B/T,EAAO4rB,WAAW7X,IAgG7Boe,GAAQlF,YAAiB0E,GACzBQ,GAAQ5oD,SAAiBooD,GACzBQ,GAAQ1yB,OAAiBkyB,GACzBQ,GAAQnyB,OAAiBA,GACzBmyB,GAAQxe,WAAiBA,GAEzBwe,GAAQK,YAAc7xB,EAAU,sFAAuFgxB,IACvHQ,GAAQtI,KAAOA,GAMftW,EAAe,IAAK,EAAG,EAAG,QAC1BA,EAAe,IAAK,EAAG,EAAG,WAI1B8B,GAAc,IAAKL,IACnBK,GAAc,IAlzHO,wBAmzHrBS,GAAc,KAAK,SAAUtjC,EAAOjP,EAAOgjC,GACvCA,EAAO2I,GAAK,IAAIpmC,KAA6B,IAAxB5H,WAAWsR,EAAO,QAE3CsjC,GAAc,KAAK,SAAUtjC,EAAOjP,EAAOgjC,GACvCA,EAAO2I,GAAK,IAAIpmC,KAAK8nC,EAAMp+B,OAM/B86B,EAAMmlB,QAAU,SAz7IZplB,EA27IY8T,GAEhB7T,EAAMvoB,GAAwBzW,GAC9Bg/B,EAAMhhC,IAl0DN,WACI,IAAIjJ,EAAO,GAAGud,MAAM1mB,KAAKY,UAAW,GAEpC,OAAOy1B,GAAO,WAAYltB,IAg0D9BiqC,EAAMlhC,IA7zDN,WACI,IAAI/I,EAAO,GAAGud,MAAM1mB,KAAKY,UAAW,GAEpC,OAAOy1B,GAAO,UAAWltB,IA2zD7BiqC,EAAMliC,IAxzDI,WACN,OAAOtC,KAAKsC,IAAMtC,KAAKsC,OAAU,IAAItC,MAwzDzCwkC,EAAMM,IAAwBH,EAC9BH,EAAMggB,KAnjBN,SAAqB96C,GACjB,OAAO2uC,GAAoB,IAAR3uC,IAmjBvB86B,EAAMyJ,OAjcN,SAAqB9W,EAAQt8B,GACzB,OAAOmrD,GAAe7uB,EAAQt8B,EAAO,WAiczC2pC,EAAM5qC,OAAwBA,EAC9B4qC,EAAMtN,OAAwBsf,GAC9BhS,EAAMgc,QAAwB9Z,EAC9BlC,EAAMiZ,SAAwBgC,GAC9Bjb,EAAMoD,SAAwBA,EAC9BpD,EAAMoN,SA/bN,SAAuBsU,EAAc/uB,EAAQt8B,GACzC,OAAOorD,GAAiBC,EAAc/uB,EAAQt8B,EAAO,aA+bzD2pC,EAAM2gB,UAvjBN,WACI,OAAO9M,GAAYpmD,MAAM,KAAMD,WAAWmzD,aAujB9C3gB,EAAMqG,WAAwB4L,GAC9BjS,EAAMga,WAAwBA,GAC9Bha,EAAMwJ,YAvcN,SAA0B7W,EAAQt8B,GAC9B,OAAOmrD,GAAe7uB,EAAQt8B,EAAO,gBAuczC2pC,EAAMkN,YA5bN,SAA0BwU,EAAc/uB,EAAQt8B,GAC5C,OAAOorD,GAAiBC,EAAc/uB,EAAQt8B,EAAO,gBA4bzD2pC,EAAMkS,aAAwBA,GAC9BlS,EAAMolB,aA9kFN,SAAsB/5C,EAAM4tB,GACxB,GAAc,MAAVA,EAAgB,CAChB,IAAIvG,EAAQ2yB,EAAW7gB,EAAewL,GAGrB,OADjBqV,EAAYzT,GAAWvmC,MAEnBm5B,EAAe6gB,EAAUjT,SAE7BnZ,EAASsL,EAAaC,EAAcvL,IACpCvG,EAAS,IAAIgS,EAAOzL,IACboZ,aAAeZ,GAAQpmC,GAC9BomC,GAAQpmC,GAAQqnB,EAGhBsf,GAAmB3mC,QAGE,MAAjBomC,GAAQpmC,KAC0B,MAA9BomC,GAAQpmC,GAAMgnC,aACdZ,GAAQpmC,GAAQomC,GAAQpmC,GAAMgnC,aACN,MAAjBZ,GAAQpmC,WACRomC,GAAQpmC,IAI3B,OAAOomC,GAAQpmC,IAsjFnB20B,EAAMyR,QA3hFN,WACI,OAAOl1C,EAAKk1C,KA2hFhBzR,EAAMmN,cApcN,SAA4BuU,EAAc/uB,EAAQt8B,GAC9C,OAAOorD,GAAiBC,EAAc/uB,EAAQt8B,EAAO,kBAoczD2pC,EAAM+E,eAAwBA,EAC9B/E,EAAMslB,qBA/LN,SAAqCC,GACjC,YAAyBhtD,IAArBgtD,EACO5/B,GAEsB,oBAAtB4/B,IACP5/B,GAAQ4/B,GACD,IA0LfvlB,EAAMwlB,sBApLN,SAAsCC,EAAW18B,GAC7C,YAA8BxwB,IAA1B2rD,GAAWuB,UAGDltD,IAAVwwB,EACOm7B,GAAWuB,IAEtBvB,GAAWuB,GAAa18B,EACN,MAAd08B,IACAvB,GAAWhT,GAAKnoB,EAAQ,IAErB,KA0KXiX,EAAM8d,eA73CN,SAA2B4H,EAAU5nD,GACjC,IAAI28C,EAAOiL,EAASjL,KAAK38C,EAAK,QAAQ,GACtC,OAAO28C,GAAQ,EAAI,WACXA,GAAQ,EAAI,WACZA,EAAO,EAAI,UACXA,EAAO,EAAI,UACXA,EAAO,EAAI,UACXA,EAAO,EAAI,WAAa,YAu3CpCza,EAAMj0C,UAAwBiV,GAG9Bg/B,EAAM2lB,UAAY,CACdC,eAAgB,mBAChBC,uBAAwB,sBACxBC,kBAAmB,0BACnBC,KAAM,aACNC,KAAM,QACNC,aAAc,WACdC,QAAS,eACTC,KAAM,aACNC,MAAO,WAGJpmB,EAp/IyEqmB,K,+TCHpF,aAmCA,SAAgB,EAAO,G,IAAa,wDAC9B,OAAK,EAAQ,KAAK,EAAQ,GAlChC,oBAAyB,EAAa,EAAe,EAAe,EAAgB,GAChF,OAAQ,EAAM,IAAU,EAAS,IAAW,EAAQ,GAAS,GAGjE,mBAAwB,EAAmB,GAIvC,IAHA,IACI,EADA,EAAI,EAEF,EAAc,GACb,EAAI,EAAW,OAAQ,IAAK,CAC/B,IAAM,EAAO,EAAkB,EAAW,IAC1C,EAAM,EAAW,GACb,EAAO,eAAe,KAGtB,EAAO,GAAQ,IAFf,EAAO,GAAM,KAAK,GAMxB,IAAI,EAAqB,GACzB,IAAG,IAAM,KAAY,EACf,GAAAr5D,EAAO,eAAe,GAAW,CACjC,IACM,EAAM,CACR,IAAK,EACL,KAHM,EAAO,IAKjB,EAAY,KAAK,GAGvB,OAAK,GAIX,WAIA,uBAA4B,EAAmB,GAC3C,IAAM,EAAc,OAAO,KAAK,GAC3B,QAAO,YACJ,IAAM,EAAK,EAAU,GACf,EAAK,EAAU,GACrB,YAAU,GAAN,QAAgC,GAAb,EAAG,QAA8C,oBAAf,EAAG,OACjD,EAAG,OAAO,GAEd,IAAO,KAEtB,QAAmB,GAAf,GAAmD,IAAvB,EAAY,OAI1C,OAAK,EAAM,gBAAC,GAAc,KAMhC,yBAAgB,EAAiB,EAA8B,GAE3D,QADc,GAAV,IAAqB,EAAS,SACrB,GAAT,EACA,GAAI,MAAM,QAAQ,GACd,IAAgB,2BAAO,CACnB,EADQ,KACS,QAGrB,EAAO,KAAK,GAIlB,OAAK,I,iCCvEI,SAASs5D,EAAgB7yB,GAItC,OAHA6yB,EAAkB76D,OAAOkoC,eAAiBloC,OAAOyB,eAAiB,SAAyBumC,GACzF,OAAOA,EAAEG,WAAanoC,OAAOyB,eAAeumC,KAEvBA,GAJzB,mC,iCCAe,SAAS8yB,IACtB,GAAuB,qBAAZj5D,UAA4BA,QAAQC,UAAW,OAAO,EACjE,GAAID,QAAQC,UAAUi5D,KAAM,OAAO,EACnC,GAAqB,oBAAVC,MAAsB,OAAO,EAExC,IAEE,OADAjrD,KAAKzP,UAAUkQ,SAASrP,KAAKU,QAAQC,UAAUiO,KAAM,IAAI,iBAClD,EACP,MAAOxG,GACP,OAAO,GATX,mC,kFCMA,iBAGM,SAAF,EAAY,GAFZ,aAA8B,GAGtB,KAAC,QAAU,EAgCvB,OA7BM,EAAF,yBAAS,GACD,IAAE,EAAuB,KACvB,EAAS,KAAK,QAAQ,IACxB,SAAC,GACG,OAAO,EAAG,QAAQ,IAAM,EAAG,QAAQ,IAAI,EAAQ,EAAM,GAAM,MAE/D,SAAC,GACG,OAAO,EAAO,IAEhB,EAAS,KAAK,QAAQ,IACxB,SAAC,EAAmB,GAChB,OAAO,EAAG,QAAQ,IAAM,EAAG,QAAQ,IAAI,EAAQ,EAAM,EAAO,GAAM,MAClE,SAAC,EAAc,GACf,OAAO,eAAe,EAAI,EAAM,CAAE,MAAO,KAE3C,EAAgB,OAAO,oBAAoB,GAC3C,EAAmB,GAWzB,OAVI,EAAU,SAAQ,SAAC,GACnB,IAAM,EAAO,OAAO,yBAAyB,EAAQ,GAC/C,EAAO,CACT,WAAoB,MAAR,KAAiB,EAAK,WAClC,IAAK,EAAO,KAAK,EAAQ,GACzB,IAAK,EAAO,KAAK,EAAQ,IAE7B,OAAO,eAAe,EAAI,EAAM,GAChC,EAAY,IAAQ,KAEjB,MAEf,EApCA,G,+FCNA,aAEA,4BAAiC,EAAe,sBAI5C,IAHA,IAAI,EAAW,EACT,EAAW,CAAC,GAAI,IAAK,IAAK,IAAK,KACjC,EAAK,EACF,EAAK,EAAS,QAAU,GAAY,KACvC,GAAsB,IACtB,IAEF,OAAK,EAAS,QAAQ,GAAK,EAAkB,EAAS,IAG5D,+BAAoC,EAAe,GAE/C,QAF+C,kBAClC,GAAT,IAAoB,EAAQ,GACd,IAAd,EAAiB,CACjB,IAAI,EAAM,EAAM,QAAQ,GAAG,QAAQ,sBAAuB,OAE1D,OADAwtC,EAAM,EAAI,UAAU,EAAG,EAAI,QAAQ,MAEhC,OAAO,EAAM,QAAQ,GAAW,QAAQ,sBAAuB,QAG1E,kCAAuC,GAEnC,QAAa,IADb,EAAQ,iBAAe,EAAO,IAG9B,OADE,EAAM,EAAM,WAAW,QAAQ,2BAA4B,QAIjE,kCAAuC,GACnC,OAAO,iBAAe,EAAM,K,qBCvBvB,SAAUhQ,GAAU,aAGzB,IAAIk0B,EAAY,CACZ,EAAK,SACL,EAAK,SACL,EAAK,SACL,EAAK,SACL,EAAK,SACL,EAAK,SACL,EAAK,SACL,EAAK,SACL,EAAK,SACL,EAAK,UACNC,EAAY,CACX,SAAK,IACL,SAAK,IACL,SAAK,IACL,SAAK,IACL,SAAK,IACL,SAAK,IACL,SAAK,IACL,SAAK,IACL,SAAK,IACL,SAAK,KACNC,EAAa,SAAUhuD,GACtB,OAAa,IAANA,EAAU,EAAU,IAANA,EAAU,EAAU,IAANA,EAAU,EAAIA,EAAI,KAAO,GAAKA,EAAI,KAAO,GAAK,EAAIA,EAAI,KAAO,GAAK,EAAI,GAC1GiuD,EAAU,CACTnyB,EAAI,CAAC,iEAAgB,gEAAe,CAAC,6CAAW,8CAAY,8BAAW,oCAAY,qCACnFqD,EAAI,CAAC,iEAAgB,gEAAe,CAAC,6CAAW,8CAAY,oCAAY,oCAAY,qCACpFwT,EAAI,CAAC,2DAAe,0DAAc,CAAC,uCAAU,wCAAW,oCAAY,8BAAW,+BAC/ErT,EAAI,CAAC,qDAAc,8CAAY,CAAC,iCAAS,kCAAU,8BAAW,oCAAY,yBAC1EsT,EAAI,CAAC,qDAAc,8CAAY,CAAC,iCAAS,kCAAU,8BAAW,8BAAW,yBACzExW,EAAI,CAAC,qDAAc,8CAAY,CAAC,iCAAS,kCAAU,oCAAY,oCAAY,0BAC5E8xB,EAAY,SAAUtH,GACrB,OAAO,SAAUh7C,EAAQ+5C,EAAe1kD,EAAQooD,GAC5C,IAAI8E,EAAIH,EAAWpiD,GACfixB,EAAMoxB,EAAQrH,GAAGoH,EAAWpiD,IAIhC,OAHU,IAANuiD,IACAtxB,EAAMA,EAAI8oB,EAAgB,EAAI,IAE3B9oB,EAAI54B,QAAQ,MAAO2H,KAE/BilC,EAAS,CACR,iCACA,uCACA,2BACA,iCACA,2BACA,iCACA,iCACA,iCACA,uCACA,uCACA,uCACA,wCAGKjX,EAAO0f,aAAa,KAAM,CAC/BzI,OAASA,EACTD,YAAcC,EACd2D,SAAW,uRAAsDpyC,MAAM,KACvEmyC,cAAgB,mMAAwCnyC,MAAM,KAC9DkyC,YAAc,mDAAgBlyC,MAAM,KACpCgsD,oBAAqB,EACrBngB,eAAiB,CACb4J,GAAK,QACLD,IAAM,WACNE,EAAI,uBACJC,GAAK,cACLC,IAAM,oBACNC,KAAO,0BAEXW,cAAe,gBACf/B,KAAO,SAAUvqC,GACb,MAAO,WAAQA,GAEnBk8B,SAAW,SAAUiW,EAAMc,EAAQ2K,GAC/B,OAAIzL,EAAO,GACA,SAEA,UAGfpH,SAAW,CACPC,QAAS,8FACTC,QAAS,wFACTC,SAAU,oEACVC,QAAS,kFACTC,SAAU,oEACVC,SAAU,KAEdQ,aAAe,CACXC,OAAS,wBACTC,KAAO,wBACPvc,EAAIoyB,EAAU,KACd5V,GAAK4V,EAAU,KACf/uB,EAAI+uB,EAAU,KACd3V,GAAK2V,EAAU,KACfvb,EAAIub,EAAU,KACd1V,GAAK0V,EAAU,KACf5uB,EAAI4uB,EAAU,KACdzV,GAAKyV,EAAU,KACftb,EAAIsb,EAAU,KACdxV,GAAKwV,EAAU,KACf9xB,EAAI8xB,EAAU,KACdvV,GAAKuV,EAAU,MAEnBpP,SAAU,SAAU79C,GAChB,OAAOA,EAAOgD,QAAQ,mEAAiB,SAAU/B,GAC7C,OAAO6rD,EAAU7rD,MAClB+B,QAAQ,UAAM,MAErByhD,WAAY,SAAUzkD,GAClB,OAAOA,EAAOgD,QAAQ,OAAO,SAAU/B,GACnC,OAAO4rD,EAAU5rD,MAClB+B,QAAQ,KAAM,WAErByvC,KAAO,CACHL,IAAM,EACNC,IAAM,MA3HwBma,CAAQvxD,EAAQ,O,qBCGjD,SAAU09B,GAAU,aAGdA,EAAO0f,aAAa,QAAS,CACpCzI,OAAS,wFAAwFzuC,MAAM,KACvGwuC,YAAc,kDAAkDxuC,MAAM,KACtEoyC,SAAW,2DAA2DpyC,MAAM,KAC5EmyC,cAAgB,8BAA8BnyC,MAAM,KACpDkyC,YAAc,uBAAuBlyC,MAAM,KAC3C6rC,eAAiB,CACb4J,GAAK,QACLD,IAAM,WACNE,EAAI,aACJC,GAAK,cACLC,IAAM,oBACNC,KAAO,2BAEXZ,SAAW,CACPC,QAAU,gBACVC,QAAU,mBACVC,SAAW,eACXC,QAAU,oBACVC,SAAW,sBACXC,SAAW,KAEfQ,aAAe,CACXC,OAAS,QACTC,KAAO,SACPvc,EAAI,gBACJwc,GAAK,aACLnZ,EAAI,WACJoZ,GAAK,aACL5F,EAAI,UACJ6F,GAAK,WACLlZ,EAAI,QACJmZ,GAAK,UACL7F,EAAI,UACJ8F,GAAK,YACLtc,EAAI,SACJuc,GAAK,YAETT,uBAAwB,uBACxB1K,QAAU,SAAU5hC,GAChB,IAAIywB,EAAIzwB,EAAS,GAKjB,OAAOA,GAJiC,OAAvBA,EAAS,IAAM,IAAa,KAClC,IAANywB,EAAW,KACL,IAANA,EAAW,KACL,IAANA,EAAW,KAAO,OAG3BqX,KAAO,CACHL,IAAM,EACNC,IAAM,KAvDwBma,CAAQvxD,EAAQ,O,iCCF1D,SAAgB,EAAO,EAAe,EAAe,GAClD,QADkD,mBACtC,GAAT,EAAqB,OAAO,EAC/B,IAAI,EAAQ,IAAI,OAAO,KAAO,EAAS,IAAM,IAAM,EAAQ,IAAK,KAChE,OAAK,EAAM,QAAQ,EAAO,I,iDAH7B,WAMA,yBAA8B,EAAe,G,IAAiB,wDAC7D,IAAM,EAAU,EAAS,QAAO,SAAC,EAAe,GAC/C,OAAO,EAAgB,MACrB,IACD,OAAK,EAAO,EAAO,EAAS,IAOlB,cAA+B,WAC3C,MAAO,OAEK,eAAgC,WAC5C,MAAO,UAGK,cAA+B,WAC3C,MAAO,mBAGK,aAA8B,WACxC,MAAK,OAGK,oBAAqC,WACjD,MAAO,kC,icCnCR,IAAMmyD,EAAiB,CAAC,WAAD,oFAAvB,UC4BaC,EAAYC,kBAAkC,CACzDC,UADyD,GAEzDC,OAAQ,KAGJC,E,uBASJ,G,oBACE,S,IACMC,EAAW,IAAjB,WACMH,EAAY,CAChBI,SADgB,EAEhBC,KAFgB,EAGhBn1B,QAHgB,EAIhBo1B,QAJgB,EAKhBC,SALgB,EAMhBC,KANgB,EAOhBC,OAPgB,EAQhBC,UARgB,EAShBC,SATgB,EAUhBC,QAVgB,EAWhBC,MAXgB,EAYhBC,QAAQ,G,OAGVX,QAAer8D,EAAfq8D,IACAH,sBAAoBG,eACpBH,cAAgBG,eAChBH,oBAAmBG,mBAEnBH,oBAAmBG,mBAEnBH,sBAAoBG,eACpBH,iBAAgBG,eAChBH,kBAAkBG,eAClBH,WACEA,WACAA,EADAA,KAEAA,EAFAA,YADFA,IAIEG,mBAEFH,sBAAoBG,oBACpBH,oBAAmBG,oBACnBH,gBAAiBG,oBACjBH,oBAAmBG,oB,EAEnB,W,EACA,Y,4BAGFY,kB,OAEI,kBAACjB,EAAD,UACE76D,MAAO,CAACg7D,OAAQh6D,KAAT,SAAwB+5D,UAAW/5D,KAAK+5D,YAE9C/5D,KAAKnC,MAJV,W,GArDqBi8D,IAAMiB,WAItBd,YAAY,CACjBe,GAAIC,WADa,WAEjBh1B,SAAUg1B,YAAkBC,Y,ICd1BC,E,wFAaJL,kB,MACuC96D,KAAKnC,MAAnCooC,aAAUm1B,qBACXJ,EAAKh7D,KAAX,QAEMq7D,EAAaj9D,OAAA,KAAY4B,KAAZ,eACjB,SAAA61B,G,OAAI,IAAI+jC,gBAEJ/L,EAAMwN,EAAA,MAAgB,SAAAxlC,G,OAAQmlC,YAAJ,MAC1BM,EAAN,oBAA4Br1B,E,OAE5B,IAAIo1B,SACF,EACSp1B,EAAP4nB,GAEF,EACE,EAEF,KAEF,EAEW5nB,EADT,EACkB+0B,EAAhB,OAEcA,EAAhB,WAQF,M,GA5CoBlB,aACfqB,gBACAA,eAAe,CACpBC,kBAAkB,GAEbD,iBACFvB,UACD,c,kBAAA,aAA+BqB,IAA/B,WAFGE,KAKLC,iBAAkBH,IAAUM,Q,oBCnChC,OASA,SAAWC,EAAQtwD,GAEf,aAOA,IAQIuwD,EAAc,QACdC,EAAc,OACdC,EAAc,OACdC,EAAc,SACdr4B,EAAc,UAGds4B,EAAc,SACdC,EAAc,SACdC,EAAc,UAUdC,EAAO,CACP/+B,OAAS,SAAUwd,EAASwhB,GACxB,IAAIC,EAAgB,GACpB,IAAK,IAAIp+D,KAAK28C,EACNwhB,EAAWn+D,IAAMm+D,EAAWn+D,GAAGC,OAAS,IAAM,EAC9Cm+D,EAAcp+D,GAAKm+D,EAAWn+D,GAAGg7B,OAAO2hB,EAAQ38C,IAEhDo+D,EAAcp+D,GAAK28C,EAAQ38C,GAGnC,OAAOo+D,GAEXtwD,IAAM,SAAUuwD,EAAMC,GACpB,MAAoB,kBAATD,IACkD,IAApDC,EAAKlmC,cAAc5T,QAAQ65C,EAAKjmC,gBAK3CmmC,SAAW,SAAUj0B,GACjB,OAAOA,EAAIlS,eAEfomC,MAAQ,SAAUxE,GACd,MA5CU,kBA4CIA,EAAwBA,EAAQtoD,QAAQ,WAAW,IAAI7B,MAAM,KAAK,QA3D5F,GA6DQ80B,KAAO,SAAU2F,GACf,OAAOA,EAAI54B,QAAQ,qCAAsC,MAU3D+sD,EAAS,CAETC,IAAM,SAAUxB,EAAIr+C,GAKhB,IAHA,IAAW4qB,EAAGS,EAAG3B,EAAGwH,EAAGrT,EAAS/sB,EAA5B3P,EAAI,EAGDA,EAAI6e,EAAO5e,SAAWy8B,GAAS,CAElC,IAAImgB,EAAQh+B,EAAO7e,GACfD,EAAQ8e,EAAO7e,EAAI,GAIvB,IAHAypC,EAAIS,EAAI,EAGDT,EAAIoT,EAAM58C,SAAWy8B,GAIxB,GAFAA,EAAUmgB,EAAMpT,KAAKt4B,KAAK+rD,GAGtB,IAAK30B,EAAI,EAAGA,EAAIxoC,EAAME,OAAQsoC,IAC1B54B,EAAQ+sB,IAAUwN,GA9ExB,kBA+EM6F,EAAIhwC,EAAMwoC,KAEmBwH,EAAE9vC,OAAS,EACpB,GAAZ8vC,EAAE9vC,OApFhB,mBAqFyB8vC,EAAE,GAET7tC,KAAK6tC,EAAE,IAAMA,EAAE,GAAGtuC,KAAKS,KAAMyN,GAG7BzN,KAAK6tC,EAAE,IAAMA,EAAE,GAEA,GAAZA,EAAE9vC,OA5FvB,oBA8FyB8vC,EAAE,IAAsBA,EAAE,GAAG5+B,MAAQ4+B,EAAE,GAAGphC,KAKjDzM,KAAK6tC,EAAE,IAAMpgC,EAAQA,EAAM+B,QAAQq+B,EAAE,GAAIA,EAAE,SA/GnF,EA4GwC7tC,KAAK6tC,EAAE,IAAMpgC,EAAQogC,EAAE,GAAGtuC,KAAKS,KAAMyN,EAAOogC,EAAE,SA5GtF,EAiHuD,GAAZA,EAAE9vC,SACLiC,KAAK6tC,EAAE,IAAMpgC,EAAQogC,EAAE,GAAGtuC,KAAKS,KAAMyN,EAAM+B,QAAQq+B,EAAE,GAAIA,EAAE,UAlHnG,GAqHgC7tC,KAAK6tC,GAAKpgC,QArH1C,EA0HgB3P,GAAK,IAIbsqC,IAAM,SAAUA,EAAKz7B,GAEjB,IAAK,IAAI7O,KAAK6O,EAEV,GApHM,kBAoHKA,EAAI7O,IAAmB6O,EAAI7O,GAAGC,OAAS,GAC9C,IAAK,IAAIwpC,EAAI,EAAGA,EAAI56B,EAAI7O,GAAGC,OAAQwpC,IAC/B,GAAIy0B,EAAKpwD,IAAIe,EAAI7O,GAAGypC,GAAIa,GACpB,MA1HN,MA0HctqC,OArIpC,EAqIiEA,OAG1C,GAAIk+D,EAAKpwD,IAAIe,EAAI7O,GAAIsqC,GACxB,MA9HE,MA8HMtqC,OAzI5B,EAyIyDA,EAG7C,OAAOsqC,IAUXq0B,EAAO,CAEPC,QAAU,CACNC,UAAY,CACR7E,QAAU,CACN,MAAU,KACV,IAAU,KACV,IAAU,KACV,MAAU,OACV,QAAU,OACV,QAAU,OACV,QAAU,OACV,IAAU,OAKtB8E,OAAS,CACLC,OAAS,CACL1P,MAAQ,CACJ,aAAe,CAAC,KAAM,QAG9B2P,OAAS,CACL3P,MAAQ,CACJ,eAAiB,UAErB4P,OAAS,CACL,IAAc,MACd,OAAc,YAK1BC,GAAK,CACD1C,QAAU,CACNxC,QAAU,CACN,GAAc,OACd,UAAc,SACd,SAAc,QACd,IAAc,SACd,GAAc,CAAC,SAAU,UACzB,MAAc,SACd,EAAc,SACd,EAAc,SACd,IAAc,SACd,GAAc,CAAC,SAAU,WACzB,GAAc,UAY1Brd,EAAU,CAEViiB,QAAU,CAAC,CAGP,6BACA,8CACA,+BACA,4BACG,CAAChB,EAAMn4B,GAAU,CAEpB,4BACG,CAAC,CAACm4B,EAAM,cAAen4B,GAAU,CAEpC,uBACG,CAAC,CAACm4B,EAAM,SAAUn4B,GAAU,CAG/B,uBACA,+DAGA,uDAEA,8CACA,4BAGA,uBACA,mJAEG,CAACm4B,EAAMn4B,GAAU,CAEpB,2BACG,CAAC,CAACm4B,EAAM,aAAcn4B,GAAU,CAEnC,6CACG,CAAC,CAACm4B,EAAM,MAAOn4B,GAAU,CAE5B,4CACG,CAAC,CAACm4B,EAAM,QAASn4B,GAAU,CAE9B,2BACG,CAAC,CAACm4B,EAAM,UAAWn4B,GAAU,CAEhC,uBACG,CAAC,CAACm4B,EAAM,wBAAyBn4B,GAAU,CAE9C,qBACG,CAAC,CAACm4B,EAAM,sBAAuBn4B,GAAU,CAE5C,wBACG,CAAC,CAACm4B,EAAM,UAAWn4B,GAAU,CAEhC,uBACG,CAAC,CAACm4B,EAAM,iBAAkBn4B,GAAU,CAEvC,qBACG,CAAC,CAACm4B,EAAM,eAAgBn4B,GAAU,CAErC,6DACG,CAAC,CAACm4B,EAAM,aAAcn4B,GAAU,CAEnC,+BACG,CAAC,CAACm4B,EAAM,KAAM,KAAMn4B,GAAU,CAEjC,sCACG,CAAC,CAACm4B,EAAM,uBAAwBn4B,GAAU,CAE7C,gCACG,CAAC,CAACm4B,EAAM,UAAWn4B,GAAU,CAEhC,uBACG,CAAC,CAACm4B,EAAM,SAAUn4B,GAAU,CAE/B,+BACG,CAACm4B,EAAMn4B,GAAU,CAEpB,oBACG,CAACm4B,EAAMn4B,GAAU,CAEpB,kCACG,CAACm4B,EAAMn4B,GAAU,CAEpB,kCACG,CAACm4B,EAAMn4B,GAAU,CAEpB,mCACG,CAACm4B,EAAMn4B,GAAU,CAEpB,6BACG,CAACm4B,GAAO,CAEX,gBACG,CAACA,GAAO,CAEX,mCACG,CAACn4B,EAAS,CAACm4B,EAAM,iBAAkB,CAEtC,sBACG,CAACn4B,EAAS,CAACm4B,EAAM,aAAc,CAElC,6BACA,oCACG,CAACA,EAAMn4B,GAAU,CAEpB,qCACG,CAACA,EAAS,CAACm4B,EAAM,oBAAqB,CAEzC,gCACG,CAAC,CAACA,EAAM,OAAQ,cAAen4B,GAAU,CAE5C,2CACG,CAAC,CAACm4B,EAAM,mBAAoB,SAAUn4B,GAAU,CAEnD,8DACG,CAACA,EAAS,CAACm4B,EAAM,oBAAqB,CAEzC,iCACG,CAAC,CAACA,EAAM,oBAAqBn4B,GAAU,CAE1C,gEAEG,CAACm4B,EAAMn4B,GAAU,CAEpB,wBACG,CAAC,CAACm4B,EAAM,WAAYn4B,GAAU,CAEjC,6CACG,CAAC,CAACm4B,EAAM,gBAAiB,CAE5B,yCACG,CAAC,CAACA,EAAM,UAAWn4B,GAAU,CAEhC,uBACG,CAAC,CAACm4B,EAAM,eAAgBn4B,GAAU,CAErC,sBACG,CAACA,EAAS,CAACm4B,EAAM,YAAa,CAEjC,+CACG,CAACn4B,EAAS,CAACm4B,EAAM,kBAAmB,CAEvC,kDACG,CAACn4B,EAASm4B,GAAO,CAEpB,oEACG,CAAC,CAACA,EAAM,OAAQn4B,GAAU,CAE7B,iDACG,CAACm4B,EAAM,CAACn4B,EAASg5B,EAAOn0B,IAAKq0B,EAAKC,QAAQC,UAAU7E,UAAW,CAElE,8BACG,CAAC4D,EAAMn4B,GAAU,CAGpB,qCACG,CAAC,CAACm4B,EAAM,YAAan4B,GAAU,CAClC,cACA,gGAEA,uGAGA,0CAGA,8EAEA,wBACA,2BACA,iCACA,4BACG,CAACm4B,EAAMn4B,IAGd05B,IAAM,CAAC,CAEH,iDACG,CAAC,CA9WM,eA8WS,UAAW,CAE9B,gBACG,CAAC,CAjXM,eAiXSjB,EAAKK,WAAY,CAEpC,0BACG,CAAC,CApXM,eAoXS,SAAU,CAG7B,gCACG,CAAC,CAxXM,eAwXS,QAAS,CAE5B,2CACG,CAAC,CA3XM,eA2XS,OAAQ,GAAIL,EAAKK,WAAY,CAEhD,kBACG,CAAC,CA9XM,eA8XS,UAAW,CAE9B,kHAEG,CAAC,CAlYM,eAkYSL,EAAKK,YAG5BO,OAAS,CAAC,CAEN,8CACG,CAACnB,EAAOG,EAAQ,CAACD,EAAMG,IAAU,CAEpC,oCACG,CAACL,EAAO,CAACG,EAAQ,SAAU,CAACD,EAAMG,IAAU,CAE/C,qBACG,CAAC,CAACL,EAAO,YAAa,CAACG,EAAQ,SAAU,CAACD,EAAMI,IAAW,CAE9D,yBACA,oBACA,kBACA,uBACA,+BACA,oCACG,CAACH,EAAQH,EAAO,CAACE,EAAMG,IAAU,CAEpC,gCACG,CAACL,EAAO,CAACG,EAAQ,UAAW,CAACD,EAAMG,IAAU,CAChD,6CACG,CAAC,CAACL,EAAOc,EAAOn0B,IAAKq0B,EAAKG,OAAOC,OAAO1P,OAAQ,CAACyO,EAAQ,UAAW,CAACD,EAAME,IAAU,CACxF,+BACG,CAACJ,EAAO,CAACG,EAAQ,UAAW,CAACD,EAAMI,IAAW,CAEjD,mCACG,CAACN,EAAOG,EAAQ,CAACD,EAAME,IAAU,CACpC,0BACG,CAACJ,EAAO,CAACG,EAAQ,SAAU,CAACD,EAAME,IAAU,CAE/C,2BACA,mGAEA,qBACA,kBACG,CAACD,EAAQH,EAAO,CAACE,EAAME,IAAU,CACpC,mBACG,CAACJ,EAAO,CAACG,EAAQ,cAAe,CAACD,EAAME,IAAU,CAEpD,kFACG,CAACJ,EAAO,CAACG,EAAQ,QAAS,CAACD,EAAMG,IAAU,CAE9C,mCACA,8BACG,CAAC,CAACF,EAAQ,QAAS,CAACH,EAAO,iBAAkB,CAACE,EAAMG,IAAU,CACjE,kFACG,CAACL,EAAO,CAACG,EAAQ,QAAS,CAACD,EAAME,IAAU,CAE9C,cACA,4BACG,CAACD,EAAQH,EAAO,CAACE,EAvbV,YAub2B,CAErC,gCACG,CAACF,EAAO,CAACG,EAAQ,UAAW,CAACD,EA1btB,YA0buC,CAEjD,mCACG,CAACF,EAAO,CAACG,EAAQ,QAAS,CAACD,EA7bpB,YA6bqC,CAE/C,oBACG,CAAC,CAACC,EAAQW,EAAOn0B,IAAKq0B,EAAKG,OAAOE,OAAOC,QAAS,CAACtB,EAAOc,EAAOn0B,IAAKq0B,EAAKG,OAAOE,OAAO3P,OAAQ,CAACwO,EAAME,IAAU,CAErH,4CACA,eACA,qEAEG,CAACD,EAAQ,CAACH,EAAO,KAAM,KAAM,CAACE,EAAME,IAAU,CAEjD,eACG,CAACJ,EAAO,CAACG,EAAQ,OAAQ,CAACD,EAAMG,IAAU,CAE7C,4BACA,wCACG,CAACL,EAAO,CAACG,EAAQ,UAAW,CAACD,EAAME,IAAU,CAEhD,iCACG,CAACJ,EAAO,CAACG,EAAQ,UAAW,CAACD,EAAMG,IAAU,CAEhD,iCACG,CAACF,EAAQH,EAAO,CAACE,EAAME,IAAU,CAEpC,mCACG,CAACJ,EAAO,CAACG,EAAQ,aAAc,CAACD,EAtdzB,YAsd0C,CACpD,sBACG,CAAC,CAACF,EAAO,MAAO,KAAM,CAACG,EAAQ,aAAc,CAACD,EAAME,IAAU,CAGjE,kFACA,kBACA,uBACA,eACG,CAACJ,EAAO,CAACG,EAAQ,YAAa,CAACD,EAAME,IAAU,CAClD,gDACG,CAACJ,EAAO,CAACG,EAAQ,YAAa,CAACD,EAAMG,IAAU,CAElD,0DACG,CAAC,CAACF,EAAQI,EAAKv5B,MAAO,CAACg5B,EAAOO,EAAKv5B,MAAO,CAACk5B,EAAMI,IAAW,CAE/D,uBACG,CAAC,CAACN,EAAO,IAAK,WAAY,CAACG,EAAQ,WAAY,CAACD,EAAMI,IAAW,CAEpE,wBACG,CAACN,EAAO,CAACG,EAAQ,SAAU,CAACD,EAAMI,IAAW,CAEhD,8EACA,gBACG,CAAC,CAACH,EAAQ,WAAYH,EAAO,CAACE,EAAMG,IAAU,CACjD,wBACG,CAACF,EAAQ,CAACD,EAAMI,GAAUN,GAAQ,CACrC,qDACA,mCACA,mBACG,CAAC,CAACG,EAAQ,WAAYH,EAAO,CAACE,EAAME,IAAU,CAEjD,cACG,CAACJ,EAAO,CAACG,EAAQ,WAAY,CAACD,EAAME,IAAU,CAEjD,oCACA,2BACG,CAAC,CAACD,EAAQ,SAAUH,EAAO,CAACE,EAAME,IAAU,CAE/C,mDACG,CAACJ,EAAO,CAACG,EAAQ,QAAS,CAACD,EAAMG,IAAU,CAE9C,qCACG,CAACL,EAAO,CAACG,EAAQ,MAAO,CAACD,EAAMG,IAAU,CAC5C,iDACG,CAAC,CAACF,EAAQ,MAAOH,EAAO,CAACE,EAAMG,IAAU,CAC5C,qBACG,CAACF,EAAQH,EAAO,CAACE,EAAMI,IAAW,CACrC,iBACA,qBACA,oCACG,CAACN,EAAO,CAACG,EAAQ,MAAO,CAACD,EAAME,IAAU,CAE5C,yDACG,CAACD,EAAQH,EAAO,CAACE,EAAMG,IAAU,CACpC,oCACG,CAACL,EAAO,CAACG,EAAQ,UAAW,CAACD,EAAMG,IAAU,CAChD,4BACG,CAACF,EAAQH,EAAO,CAACE,EAAME,IAAU,CAEpC,uBACG,CAACD,EAAQH,EAAO,CAACE,EAAME,IAAU,CAEpC,6BACG,CAACD,EAAQH,EAAO,CAACE,EAlhBV,aAkhB4B,CAEtC,0CACG,CAACC,EAAQH,EAAO,CAACE,EAAME,IAAU,CAEpC,UACG,CAAC,CAACJ,EAAO,cAAe,CAACG,EAAQ,UAAW,CAACD,EAAMI,IAAW,CAEjE,4BACG,CAACN,EAAO,CAACG,EAAQ,UAAW,CAACD,EA3hBtB,aA2hBwC,CAElD,+BACG,CAACF,EAAO,CAACG,EAAQ,UAAW,CAACD,EAAMG,IAAU,CAEhD,2CACG,CAACL,EAAO,CAACG,EAAQ,UAAW,CAACD,EAAME,IAAU,CAEhD,mCACA,qDACA,kGAEA,+DACG,CAAC,CAACJ,EAAO,KAAM,KAAM,CAACG,EAAQ,UAAW,CAACD,EAAME,IAAU,CAC7D,0DACE,CAAC,CAACJ,EAAO,KAAM,KAAM,CAACG,EAAQ,UAAW,CAACD,EAAMG,IAAU,CAC5D,sCACG,CAACL,EAAO,CAACG,EAAQ,SAAU,CAACD,EAAME,IAAU,CAC/C,qBACG,CAAC,CAACD,EAAQ,SAAUH,EAAO,CAACE,EAAME,IAAU,CAE/C,4BACA,oCACG,CAACJ,EAAO,CAACG,EAAQ,WAAY,CAACD,EAAME,IAAU,CAEjD,0CACG,CAACJ,EAAO,CAACG,EAAQ,OAAQ,CAACD,EAAMG,IAAU,CAE7C,gDACG,CAACL,EAAO,CAACG,EAAQ,QAAS,CAACD,EAAMG,IAAU,CAE9C,6CACG,CAACL,EAAO,CAACG,EAAQ,WAAY,CAACD,EAAMG,IAAU,CAEjD,iEACG,CAAC,CAACF,EAAQ,kBAAmBH,EAAO,CAACE,EAAMG,IAAU,CAExD,2CACG,CAACL,EAAO,CAACG,EAAQ,YAAa,CAACD,EAAMG,IAAU,CAElD,6BACG,CAACL,EAAO,CAACG,EAAQ,OAAQ,CAACD,EAAMG,IAAU,CAE7C,6CACG,CAACL,EAAO,CAACG,EAAQ,SAAU,CAACD,EAAME,IAAU,CAE/C,wCACG,CAACJ,EAAO,CAACG,EAAQ,SAAU,CAACD,EAAMG,IAAU,CAE/C,6CACG,CAACL,EAAO,CAACG,EAAQ,QAAS,CAACD,EAAMG,IAAU,CAE9C,0CACA,8DACG,CAAC,CAACF,EAAQ,gBAAiBH,EAAO,CAACE,EAAMG,IAAU,CAEtD,0CACG,CAACL,EAAO,CAACG,EAAQ,YAAa,CAACD,EAAMG,IAAU,CAElD,kDACG,CAACL,EAAO,CAACG,EAAQ,YAAa,CAACD,EAAMG,IAAU,CAElD,6EACG,CAAC,CAACF,EAAQ,SAAUH,EAAO,CAACE,EAAME,IAAU,CAE/C,gDACG,CAAC,CAACD,EAAQ,SAAUH,EAAO,CAACE,EAAME,IAAU,CAE/C,yBACG,CAACJ,EAAO,CAACG,EAAQ,aAAc,CAACD,EAAME,IAAU,CAEnD,4DACG,CAACJ,EAAO,CAACG,EAAQ,WAAY,CAACD,EAAMG,IAAU,CAEjD,4DACG,CAACF,EAAQH,EAAO,CAACE,EAAMG,IAAU,CAEpC,6CACG,CAACL,EAAO,CAACG,EAAQ,aAAc,CAACD,EAAMG,IAAU,CAEnD,sDACG,CAACF,EAAQH,EAAO,CAACE,EAAMG,IAAU,CAEpC,uCACG,CAACL,EAAO,CAACG,EAAQ,SAAU,CAACD,EAAMG,IAAU,CAE/C,8BACG,CAACL,EAAO,CAACG,EAAQ,UAAW,CAACD,EAAMG,IAAU,CAEhD,gDACG,CAACF,EAAQH,EAAO,CAACE,EAAMG,IAAU,CAEpC,uBACA,iCACG,CAAC,CAACH,EAAMK,EAAKK,UAAWT,EAAQH,GAAQ,CAE3C,6BACG,CAAC,CAACE,EAAMI,IAAW,CAEtB,qCACG,CAACN,EAAO,CAACG,EAAQ,aAGxBsB,OAAS,CAAC,CAEN,+BACG,CAAC35B,EAAS,CAACm4B,EAAM,aAAc,CAElC,6CACG,CAACn4B,EAAS,CAACm4B,EAAM,UAAW,CAE/B,uBACA,sEAEA,0CACA,gCACG,CAACA,EAAMn4B,GAAU,CAEpB,+BACG,CAACA,EAASm4B,IAGjBsB,GAAK,CAAC,CAGF,qCACG,CAACtB,EAAMn4B,GAAU,CACpB,+BACA,iDACA,sDACG,CAACm4B,EAAM,CAACn4B,EAASg5B,EAAOn0B,IAAKq0B,EAAKO,GAAG1C,QAAQxC,UAAW,CAC3D,wCACG,CAAC,CAAC4D,EAAM,WAAY,CAACn4B,EAASg5B,EAAOn0B,IAAKq0B,EAAKO,GAAG1C,QAAQxC,UAAW,CAGxE,gBACG,CAAC,CAAC4D,EAAM,cAAen4B,GAAU,CACpC,+BACA,gCACA,8FAEG,CAACm4B,EAAMn4B,GAAU,CACpB,oDACG,CAAC,CAACm4B,EAAM,WAAYn4B,GAAU,CACjC,kBACG,CAACm4B,GAAO,CACX,uCACG,CAAC,CAACA,EAAM,cAAen4B,GAAU,CAGpC,iDAGA,wBACA,6BACA,2JAGA,4BACA,sBACG,CAACm4B,EAAMn4B,GAAU,CAEpB,+BACG,CAAC,CAACm4B,EAAM,eAAgBn4B,GAAS,CAGpC,0BACG,CAAC,CAACm4B,EAAM,WAAYn4B,GAAU,CAGjC,kDACG,CAACm4B,EAAMn4B,GAAS,CAEnB,mBACG,CAACm4B,EAAMn4B,GAAS,CAEnB,uBACA,yDACG,CAAC,CAACA,EAAS,KAAM,KAAM,CAACm4B,EAAM,QAAS,CAE1C,8BACA,kCACG,CAAC,CAACA,EAAM,UAAW,CAACn4B,EAAS,KAAM,MAAO,CAG7C,uCACA,oCACA,uEAEA,uBACG,CAACm4B,EAAMn4B,KAQd45B,EAAW,SAAXA,EAAqBC,EAAUnB,GAO/B,GALwB,kBAAbmB,IACPnB,EAAamB,EACbA,OAhwBZ,KAmwBcp9D,gBAAgBm9D,GAClB,OAAO,IAAIA,EAASC,EAAUnB,GAAYoB,YAG9C,IAAIrC,EAAKoC,IAAc5B,GAAUA,EAAO8B,WAAa9B,EAAO8B,UAAUC,UAAa/B,EAAO8B,UAAUC,UA7vBtF,IA8vBVC,EAASvB,EAAaD,EAAK/+B,OAAOwd,EAASwhB,GAAcxhB,EA6C7D,OA3CAz6C,KAAKy9D,WAAa,WACd,IAAIf,EAAU,CAAE1+C,UA3wB5B,EA2wB6C85C,aA3wB7C,GA8wBY,OAFAyE,EAAOC,IAAIj9D,KAAKm9D,EAAS1B,EAAIwC,EAAOd,SACpCA,EAAQJ,MAAQN,EAAKM,MAAMI,EAAQ5E,SAC5B4E,GAEX18D,KAAK09D,OAAS,WACV,IAAIT,EAAM,CAAEU,kBAjxBxB,GAmxBY,OADApB,EAAOC,IAAIj9D,KAAK09D,EAAKjC,EAAIwC,EAAOP,KACzBA,GAEXj9D,KAAK49D,UAAY,WACb,IAAIhB,EAAS,CAAEG,YAtxB3B,EAsxB8C5P,WAtxB9C,EAsxBgEjgC,UAtxBhE,GAwxBY,OADAqvC,EAAOC,IAAIj9D,KAAKq9D,EAAQ5B,EAAIwC,EAAOZ,QAC5BA,GAEX58D,KAAK69D,UAAY,WACb,IAAIX,EAAS,CAAEl/C,UA3xB3B,EA2xB4C85C,aA3xB5C,GA6xBY,OADAyE,EAAOC,IAAIj9D,KAAK29D,EAAQlC,EAAIwC,EAAON,QAC5BA,GAEXl9D,KAAK89D,MAAQ,WACT,IAAId,EAAK,CAAEh/C,UAhyBvB,EAgyBwC85C,aAhyBxC,GAkyBY,OADAyE,EAAOC,IAAIj9D,KAAKy9D,EAAIhC,EAAIwC,EAAOR,IACxBA,GAEXh9D,KAAKq9D,UAAY,WACb,MAAO,CACHrC,GAAUh7D,KAAK+9D,QACfrB,QAAU18D,KAAKy9D,aACfP,OAAUl9D,KAAK69D,YACfb,GAAUh9D,KAAK89D,QACflB,OAAU58D,KAAK49D,YACfX,IAAUj9D,KAAK09D,WAGvB19D,KAAK+9D,MAAQ,WACT,OAAO/C,GAEXh7D,KAAKg+D,MAAQ,SAAUZ,GAEnB,OADApC,EAAKoC,EACEp9D,MAEJA,MAGXm9D,EAAS55B,QA/yBS,SAgzBlB45B,EAASc,QAAU,CACfvC,KAAUA,EACVwC,MA3yBc,QA4yBd36B,QAAUA,GAEd45B,EAASgB,IAAM,CACXC,aAzyBc,gBA2yBlBjB,EAASkB,OAAS,CACd5C,MAAUA,EACVG,OAAUA,EACVD,KAAUA,EACV2C,QA9yBc,UA+yBdzC,OAAUA,EACVE,QAAUA,EACVD,OAAUA,EACVyC,SA9yBc,WA+yBdC,SA9yBc,YAgzBlBrB,EAASsB,OAAS,CACd/C,KAAUA,EACVn4B,QAAUA,GAEd45B,EAASuB,GAAK,CACVhD,KAAUA,EACVn4B,QAAUA,GAr0BI,qBA80BPv8B,GA90BO,qBAg1BHG,GAAyBA,EAAOH,UACvCA,EAAUG,EAAOH,QAAUm2D,GAE/Bn2D,EAAQm2D,SAAWA,QAh2B3B,KAo2BYp4B,aACI,OAAOo4B,GADL,8BAcd,IAAIwB,EAAInD,IAAWA,EAAOoD,QAAUpD,EAAOqD,OAC3C,GAAIF,IAAMA,EAAE3D,GAAI,CACZ,IAAIhB,EAAS,IAAImD,EACjBwB,EAAE3D,GAAKhB,EAAOqD,YACdsB,EAAE3D,GAAG9jD,IAAM,WACP,OAAO8iD,EAAO+D,SAElBY,EAAE3D,GAAG7tD,IAAM,SAAUiwD,GACjBpD,EAAOgE,MAAMZ,GACb,IAAIz9D,EAASq6D,EAAOqD,YACpB,IAAK,IAAIxnC,KAAQl2B,EACbg/D,EAAE3D,GAAGnlC,GAAQl2B,EAAOk2B,KA73BpC,CAk4BqB,kBAAX2lC,OAAsBA,OAASx7D,O,8EC34B1B,SAAS8+D,EAAgBC,EAAIC,GAE1C,IAAMzsB,EAAK0sB,EAAiBF,GACtBG,EAAKD,EAAiBD,GAGtBnwB,EAAK0D,EAAGl4B,MACRy0B,EAAKowB,EAAG7kD,MAGRmtB,EAAI23B,EAAgB5sB,EAAI2sB,GAC9B,OAAU,IAAN13B,EAAgBA,EAGhBqH,GAAMC,EACDqwB,EAAgBtwB,EAAGlhC,MAAM,KAAMmhC,EAAGnhC,MAAM,MACtCkhC,GAAMC,EACRD,GAAM,EAAI,EAGZ,EAGF,IAGMpH,EAAU,SAACs3B,EAAIC,EAAIt0C,GAE9B00C,EAAoB10C,GAIpB,IAAMkoB,EAAMksB,EAAgBC,EAAIC,GAEhC,OAAOK,EAAe30C,GAAU5Q,SAAS84B,IAuB3CksB,EAAgBQ,SAlCQ,SAACt1B,GAAD,MACT,kBAANA,GAAkB,SAASv9B,KAAKu9B,IAAMu1B,EAAO9yD,KAAKu9B,IAkC3D80B,EAAgBr3B,QAAUA,EAC1Bq3B,EAAgBU,UAtBS,SAACx1B,EAAGxC,GAE3B,IAAMkD,EAAIlD,EAAE/5B,MAAM,eACZgyD,EAAK/0B,EAAIA,EAAE,GAAK,IAGtB,GAAW,MAAP+0B,GAAqB,MAAPA,EAAY,OAAOh4B,EAAQuC,EAAGxC,EAAGi4B,GANlB,MASZR,EAAiBj1B,GATL,mBAS1B+0B,EAT0B,KAStBC,EATsB,KASlBU,EATkB,OAUZT,EAAiBz3B,GAVL,mBAU1Bm4B,EAV0B,KAUtBC,EAVsB,KAUlBC,EAVkB,KAWjC,OAA+B,IAA3BC,EAAef,EAAIY,KACZ,MAAPF,EACKN,EAAgB,CAACH,EAAIU,GAAK,CAACE,EAAIC,KAAQ,EAEjB,IAA3BC,EAAed,EAAIY,IAChBE,EAAeJ,EAAIG,IAAO,IAQnC,IAAMN,EACJ,6IAEIN,EAAmB,SAACj1B,GACxB,GAAiB,kBAANA,EACT,MAAM,IAAItsC,UAAU,oCAEtB,IAAM+P,EAAQu8B,EAAEv8B,MAAM8xD,GACtB,IAAK9xD,EACH,MAAM,IAAIW,MAAJ,8CAAiD47B,EAAjD,gBAGR,OADAv8B,EAAM6mD,QACC7mD,GAGHsyD,EAAa,SAAC14B,GAAD,MAAa,MAANA,GAAmB,MAANA,GAAmB,MAANA,GAE9C24B,EAAW,SAACh2B,GAChB,IAAMz+B,EAAI9E,SAASujC,EAAG,IACtB,OAAOnL,MAAMtzB,GAAKy+B,EAAIz+B,GAMlBu0D,EAAiB,SAAC14B,EAAGQ,GACzB,GAAIm4B,EAAW34B,IAAM24B,EAAWn4B,GAAI,OAAO,EADZ,MAHf,SAACR,EAAGQ,GAAJ,cACTR,WAAaQ,EAAI,CAACt5B,OAAO84B,GAAI94B,OAAOs5B,IAAM,CAACR,EAAGQ,GAIpCq4B,CAAUD,EAAS54B,GAAI44B,EAASp4B,IAFlB,mBAExBs4B,EAFwB,KAEpBC,EAFoB,KAG/B,OAAID,EAAKC,EAAW,EAChBD,EAAKC,GAAY,EACd,GAGHhB,EAAkB,SAAC/3B,EAAGQ,GAC1B,IAAK,IAAI9pC,EAAI,EAAGA,EAAIuQ,KAAKoD,IAAI21B,EAAErpC,OAAQ6pC,EAAE7pC,QAASD,IAAK,CACrD,IAAM0pC,EAAIs4B,EAAe14B,EAAEtpC,IAAM,EAAG8pC,EAAE9pC,IAAM,GAC5C,GAAU,IAAN0pC,EAAS,OAAOA,EAEtB,OAAO,GAGH63B,EAAiB,CACrB,IAAK,CAAC,GACN,KAAM,CAAC,EAAG,GACV,IAAK,CAAC,GACN,KAAM,EAAE,EAAG,GACX,IAAK,EAAE,IAGHe,EAAmBhiE,OAAO8Q,KAAKmwD,GAE/BD,EAAsB,SAACK,GAC3B,GAAkB,kBAAPA,EACT,MAAM,IAAI/hE,UAAJ,gEACqD+hE,IAG7D,IAAsC,IAAlCW,EAAiB99C,QAAQm9C,GAC3B,MAAM,IAAIrxD,MAAJ,4CACiCgyD,EAAiB56D,KAAK,QClHT,qBAAXrG,SAA0BA,OAAOC,WAAaD,OAAOC,SAAWD,OAAO,qBAEvD,qBAAXA,SAA0BA,OAAOkhE,gBAAkBlhE,OAAOkhE,cAAgBlhE,OAAO,0BAGnI,SAASmhE,EAAOC,EAAMC,GACrB,IACC,IAAI7gE,EAAS4gE,IACZ,MAAM54D,GACP,OAAO64D,EAAQ74D,GAEhB,OAAIhI,GAAUA,EAAO8gE,KACb9gE,EAAO8gE,UAAK,EAAQD,GAErB7gE,EAGR,IAAI+gE,EAAqBC,wBAAc,CACrCC,iBAAkB,eAGpB,SAASC,EAAYC,GACnB,IAAIC,EAAgBD,EAAK76B,SACrBA,OAA6B,IAAlB86B,EAA2B,KAAOA,EAC7CC,EAAiBF,EAAKE,eACtBC,EAAiBH,EAAKI,UACtBA,OAA+B,IAAnBD,GAAoCA,EAChDE,EAAqBL,EAAKM,cAC1BA,OAAuC,IAAvBD,GAAwCA,EACxDE,EAAwBP,EAAKQ,iBAC7BA,OAA6C,IAA1BD,EAAmC,KAAOA,EAC7DE,EAAwBT,EAAKU,kBAC7BA,OAA8C,IAA1BD,EAAmC,KAAOA,EAC9DE,EAAwBX,EAAKY,kBAC7BA,OAA8C,IAA1BD,GAA2CA,EAC/DE,EAAeb,EAAKa,aAEpBC,EAAYC,mBAAS,CACvBC,SAAS,EACTC,iBAAiB,IAEfC,EAAcJ,EAAU,GACxBK,EAAiBL,EAAU,GAE3BM,EAAM,SAAajkD,EAAS8V,GAC9BqtC,IAAkBrtC,EAAU8iB,QAAQsrB,MAAMlkD,GAAW44B,QAAQqrB,IAAIjkD,KAGnEmkD,qBAAU,WACRlB,EAAYN,IAAqBsB,EAAI,qCACpC,IAEH,IAIItB,EAAmByB,uBAAY,WACjC,IACE,IAAIC,EAAShC,GAAO,WAClB,OAAOluD,QAAQsb,QAAQ60C,OANnBf,GAA2C,MAAtBA,EAAiCA,EAAL,IAMC,eAAef,MAAK,SAAU7tB,GAClF,OAAOxgC,QAAQsb,QAAQklB,EAAI4vB,QAAQ/B,MAAK,SAAUgC,GAChD,IAAIC,EAAcD,EAAM3K,QACC6K,EAAkBD,EAAa1B,IAGtDkB,EAAI,4BAA8BQ,EAAc,4BAChDT,EAAe,CACbH,SAAS,EACTC,iBAAiB,MAGnBG,EAAI,qDACJD,EAAe,CACbH,SAAS,EACTC,iBAAiB,cAKxB,SAAUI,GACXD,EAAI,kDAAkD,GACtDA,EAAIC,GAAO,IACVf,GAAiBa,EAAe,CAC/BH,SAAS,EACTC,iBAAiB,OAIrB,OAAO3vD,QAAQsb,QAAQ40C,GAAUA,EAAO7B,KAAO6B,EAAO7B,MAAK,oBAAkB,GAC7E,MAAO94D,GACP,OAAOyK,QAAQ6oB,OAAOtzB,MAEvB,CAACq5D,EAAgBI,EAAeI,IAE/BmB,EAAoB,SAA2BD,EAAa1B,GAC9D,OAAIU,GACMj6B,EAAQi7B,EAAa1B,EAAgB,KAGxCv5B,EAAQi7B,EAAa1B,EAAgB,MAG1C4B,EAAwB,WAC1B,IACE,OAAOxwD,QAAQsb,QAAQ4yC,GAAO,WAC5B,IAAIuC,EAAS,WACX,IAAIC,EAEJ,GAA2B,QAAtBA,EAAUtH,cAAgC,IAAZsH,GAAsBA,EAAQhmD,OAAQ,CACvE,IACIA,EADW0+C,OACO1+C,OACtB,OAAO1K,QAAQsb,QAAQ5Q,EAAO5N,QAAQuxD,MAAK,SAAUsC,GACnD,IAAIC,EAAwBD,EAAWp2D,KAAI,SAAUpB,GACnD,OAAOuR,EAAM,OAAWvR,MAE1B,OAAO6G,QAAQsb,QAAQtb,QAAQ6wD,IAAID,IAAwBvC,MAAK,WAC9DyB,EAAI,+BACJ1G,OAAO0H,SAASC,QAAO,UAZlB,GAkBb,GAAIN,GAAUA,EAAOpC,KAAM,OAAOoC,EAAOpC,MAAK,kBAC7C,SAAU0B,GACXD,EAAI,+CAA+C,GACnDA,EAAIC,GAAO,OAEb,MAAOx6D,GACP,OAAOyK,QAAQ6oB,OAAOtzB,KAI1B,OAAKu5D,EAGCc,EAAYF,QACPR,EAGJU,EAAYF,SAAYE,EAAYD,gBAUlCjI,IAAMsJ,cAAc1C,EAAmB2C,SAAU,CACtDrkE,MAAO,CACL4hE,iBAAkBA,IAEnB36B,IAbG07B,EACFA,EAAaiB,GAEbA,IAGK,MAbF38B,EAwBX46B,EAAYyC,UAAY,CACtBr9B,SAAUg1B,IAAUsI,QAAQrI,WAC5B8F,eAAgB/F,IAAUzuD,OAAO0uD,WACjCgG,UAAWjG,IAAUM,KAAKL,WAC1BkG,cAAenG,IAAUM,KACzB+F,iBAAkBrG,IAAUsI,QAC5B/B,kBAAmBvG,IAAUzuD,OAC7Bm1D,aAAc1G,IAAUzyD,MAaXq4D","file":"static/js/4.fecbbcde.chunk.js","sourcesContent":["export default function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}","function _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\nexport default function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}","import setPrototypeOf from \"./setPrototypeOf\";\nexport default function _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 if (superClass) setPrototypeOf(subClass, superClass);\n}","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}","import _typeof from \"../../helpers/esm/typeof\";\nimport assertThisInitialized from \"./assertThisInitialized\";\nexport default function _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return assertThisInitialized(self);\n}","import getPrototypeOf from \"./getPrototypeOf\";\nimport isNativeReflectConstruct from \"./isNativeReflectConstruct\";\nimport possibleConstructorReturn from \"./possibleConstructorReturn\";\nexport default function _createSuper(Derived) {\n return function () {\n var Super = getPrototypeOf(Derived),\n result;\n\n if (isNativeReflectConstruct()) {\n var NewTarget = getPrototypeOf(this).constructor;\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n\n return possibleConstructorReturn(this, result);\n };\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar CurrencyUtil = require(\"./Currency\");\nexports.CurrencyUtil = CurrencyUtil;\nvar DateUtil = require(\"./DateTime\");\nexports.DateUtil = DateUtil;\nvar StringUtil = require(\"./StringUtils\");\nexports.StringUtil = StringUtil;\nvar Proxy_1 = require(\"./Proxy\");\nexports.Proxy = Proxy_1.default;\nvar LocaleUtil = require(\"./LocaleValue\");\nexports.LocaleUtil = LocaleUtil;\nvar Util = require(\"./Utils\");\nexports.Util = Util;\nvar I8N_1 = require(\"./I8N\");\nexports.I8N = I8N_1.default;\nvar RegExFilter = require(\"./TextFilters/RegExFilter\");\nexports.RegExFilter = RegExFilter;\n//# sourceMappingURL=index.js.map","/**\n * @license\n * Lodash <https://lodash.com/>\n * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;(function() {\n\n /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n var undefined;\n\n /** Used as the semantic version number. */\n var VERSION = '4.17.15';\n\n /** Used as the size to enable large array optimizations. */\n var LARGE_ARRAY_SIZE = 200;\n\n /** Error message constants. */\n var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\n FUNC_ERROR_TEXT = 'Expected a function';\n\n /** Used to stand-in for `undefined` hash values. */\n var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n /** Used as the maximum memoize cache size. */\n var MAX_MEMOIZE_SIZE = 500;\n\n /** Used as the internal argument placeholder. */\n var PLACEHOLDER = '__lodash_placeholder__';\n\n /** Used to compose bitmasks for cloning. */\n var CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n /** Used to compose bitmasks for value comparisons. */\n var COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n /** Used to compose bitmasks for function metadata. */\n var WRAP_BIND_FLAG = 1,\n WRAP_BIND_KEY_FLAG = 2,\n WRAP_CURRY_BOUND_FLAG = 4,\n WRAP_CURRY_FLAG = 8,\n WRAP_CURRY_RIGHT_FLAG = 16,\n WRAP_PARTIAL_FLAG = 32,\n WRAP_PARTIAL_RIGHT_FLAG = 64,\n WRAP_ARY_FLAG = 128,\n WRAP_REARG_FLAG = 256,\n WRAP_FLIP_FLAG = 512;\n\n /** Used as default options for `_.truncate`. */\n var DEFAULT_TRUNC_LENGTH = 30,\n DEFAULT_TRUNC_OMISSION = '...';\n\n /** Used to detect hot functions by number of calls within a span of milliseconds. */\n var HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n /** Used to indicate the type of lazy iteratees. */\n var LAZY_FILTER_FLAG = 1,\n LAZY_MAP_FLAG = 2,\n LAZY_WHILE_FLAG = 3;\n\n /** Used as references for various `Number` constants. */\n var INFINITY = 1 / 0,\n MAX_SAFE_INTEGER = 9007199254740991,\n MAX_INTEGER = 1.7976931348623157e+308,\n NAN = 0 / 0;\n\n /** Used as references for the maximum length and index of an array. */\n var MAX_ARRAY_LENGTH = 4294967295,\n MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n /** Used to associate wrap methods with their bit flags. */\n var wrapFlags = [\n ['ary', WRAP_ARY_FLAG],\n ['bind', WRAP_BIND_FLAG],\n ['bindKey', WRAP_BIND_KEY_FLAG],\n ['curry', WRAP_CURRY_FLAG],\n ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n ['flip', WRAP_FLIP_FLAG],\n ['partial', WRAP_PARTIAL_FLAG],\n ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n ['rearg', WRAP_REARG_FLAG]\n ];\n\n /** `Object#toString` result references. */\n var argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n domExcTag = '[object DOMException]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n nullTag = '[object Null]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]',\n weakSetTag = '[object WeakSet]';\n\n var arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n /** Used to match empty string literals in compiled template source. */\n var reEmptyStringLeading = /\\b__p \\+= '';/g,\n reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n /** Used to match HTML entities and HTML characters. */\n var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n reUnescapedHtml = /[&<>\"']/g,\n reHasEscapedHtml = RegExp(reEscapedHtml.source),\n reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n /** Used to match template delimiters. */\n var reEscape = /<%-([\\s\\S]+?)%>/g,\n reEvaluate = /<%([\\s\\S]+?)%>/g,\n reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n /** Used to match property names within property paths. */\n var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n /**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n reHasRegExpChar = RegExp(reRegExpChar.source);\n\n /** Used to match leading and trailing whitespace. */\n var reTrim = /^\\s+|\\s+$/g,\n reTrimStart = /^\\s+/,\n reTrimEnd = /\\s+$/;\n\n /** Used to match wrap detail comments. */\n var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n reSplitDetails = /,? & /;\n\n /** Used to match words composed of alphanumeric characters. */\n var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n /** Used to match backslashes in property paths. */\n var reEscapeChar = /\\\\(\\\\)?/g;\n\n /**\n * Used to match\n * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n */\n var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n /** Used to match `RegExp` flags from their coerced string values. */\n var reFlags = /\\w*$/;\n\n /** Used to detect bad signed hexadecimal string values. */\n var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n /** Used to detect binary string values. */\n var reIsBinary = /^0b[01]+$/i;\n\n /** Used to detect host constructors (Safari). */\n var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n /** Used to detect octal string values. */\n var reIsOctal = /^0o[0-7]+$/i;\n\n /** Used to detect unsigned integer values. */\n var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n /** Used to match Latin Unicode letters (excluding mathematical operators). */\n var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n /** Used to ensure capturing order of template delimiters. */\n var reNoMatch = /($^)/;\n\n /** Used to match unescaped characters in compiled string literals. */\n var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n /** Used to compose unicode character classes. */\n var rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsDingbatRange = '\\\\u2700-\\\\u27bf',\n rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n rsPunctuationRange = '\\\\u2000-\\\\u206f',\n rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n rsVarRange = '\\\\ufe0e\\\\ufe0f',\n rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n /** Used to compose unicode capture groups. */\n var rsApos = \"['\\u2019]\",\n rsAstral = '[' + rsAstralRange + ']',\n rsBreak = '[' + rsBreakRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsDigits = '\\\\d+',\n rsDingbat = '[' + rsDingbatRange + ']',\n rsLower = '[' + rsLowerRange + ']',\n rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsUpper = '[' + rsUpperRange + ']',\n rsZWJ = '\\\\u200d';\n\n /** Used to compose unicode regexes. */\n var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n /** Used to match apostrophes. */\n var reApos = RegExp(rsApos, 'g');\n\n /**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\n var reComboMark = RegExp(rsCombo, 'g');\n\n /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n /** Used to match complex or compound words. */\n var reUnicodeWord = RegExp([\n rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n rsUpper + '+' + rsOptContrUpper,\n rsOrdUpper,\n rsOrdLower,\n rsDigits,\n rsEmoji\n ].join('|'), 'g');\n\n /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\n var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n /** Used to detect strings that need a more robust regexp to match words. */\n var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n /** Used to assign default `context` object properties. */\n var contextProps = [\n 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',\n 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',\n 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',\n 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\n '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'\n ];\n\n /** Used to make template sourceURLs easier to identify. */\n var templateCounter = -1;\n\n /** Used to identify `toStringTag` values of typed arrays. */\n var typedArrayTags = {};\n typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n typedArrayTags[uint32Tag] = true;\n typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n typedArrayTags[setTag] = typedArrayTags[stringTag] =\n typedArrayTags[weakMapTag] = false;\n\n /** Used to identify `toStringTag` values supported by `_.clone`. */\n var cloneableTags = {};\n cloneableTags[argsTag] = cloneableTags[arrayTag] =\n cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\n cloneableTags[boolTag] = cloneableTags[dateTag] =\n cloneableTags[float32Tag] = cloneableTags[float64Tag] =\n cloneableTags[int8Tag] = cloneableTags[int16Tag] =\n cloneableTags[int32Tag] = cloneableTags[mapTag] =\n cloneableTags[numberTag] = cloneableTags[objectTag] =\n cloneableTags[regexpTag] = cloneableTags[setTag] =\n cloneableTags[stringTag] = cloneableTags[symbolTag] =\n cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n cloneableTags[errorTag] = cloneableTags[funcTag] =\n cloneableTags[weakMapTag] = false;\n\n /** Used to map Latin Unicode letters to basic Latin letters. */\n var deburredLetters = {\n // Latin-1 Supplement block.\n '\\xc0': 'A', '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n '\\xe0': 'a', '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n '\\xc7': 'C', '\\xe7': 'c',\n '\\xd0': 'D', '\\xf0': 'd',\n '\\xc8': 'E', '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n '\\xe8': 'e', '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n '\\xcc': 'I', '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n '\\xec': 'i', '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n '\\xd1': 'N', '\\xf1': 'n',\n '\\xd2': 'O', '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n '\\xf2': 'o', '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n '\\xd9': 'U', '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n '\\xf9': 'u', '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n '\\xdd': 'Y', '\\xfd': 'y', '\\xff': 'y',\n '\\xc6': 'Ae', '\\xe6': 'ae',\n '\\xde': 'Th', '\\xfe': 'th',\n '\\xdf': 'ss',\n // Latin Extended-A block.\n '\\u0100': 'A', '\\u0102': 'A', '\\u0104': 'A',\n '\\u0101': 'a', '\\u0103': 'a', '\\u0105': 'a',\n '\\u0106': 'C', '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n '\\u0107': 'c', '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n '\\u010e': 'D', '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n '\\u0112': 'E', '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n '\\u0113': 'e', '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n '\\u011c': 'G', '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n '\\u011d': 'g', '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n '\\u0124': 'H', '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n '\\u0128': 'I', '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n '\\u0129': 'i', '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n '\\u0134': 'J', '\\u0135': 'j',\n '\\u0136': 'K', '\\u0137': 'k', '\\u0138': 'k',\n '\\u0139': 'L', '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n '\\u013a': 'l', '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n '\\u0143': 'N', '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n '\\u0144': 'n', '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n '\\u014c': 'O', '\\u014e': 'O', '\\u0150': 'O',\n '\\u014d': 'o', '\\u014f': 'o', '\\u0151': 'o',\n '\\u0154': 'R', '\\u0156': 'R', '\\u0158': 'R',\n '\\u0155': 'r', '\\u0157': 'r', '\\u0159': 'r',\n '\\u015a': 'S', '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n '\\u015b': 's', '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n '\\u0162': 'T', '\\u0164': 'T', '\\u0166': 'T',\n '\\u0163': 't', '\\u0165': 't', '\\u0167': 't',\n '\\u0168': 'U', '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n '\\u0169': 'u', '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n '\\u0174': 'W', '\\u0175': 'w',\n '\\u0176': 'Y', '\\u0177': 'y', '\\u0178': 'Y',\n '\\u0179': 'Z', '\\u017b': 'Z', '\\u017d': 'Z',\n '\\u017a': 'z', '\\u017c': 'z', '\\u017e': 'z',\n '\\u0132': 'IJ', '\\u0133': 'ij',\n '\\u0152': 'Oe', '\\u0153': 'oe',\n '\\u0149': \"'n\", '\\u017f': 's'\n };\n\n /** Used to map characters to HTML entities. */\n var htmlEscapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n };\n\n /** Used to map HTML entities to characters. */\n var htmlUnescapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n };\n\n /** Used to escape characters for inclusion in compiled string literals. */\n var stringEscapes = {\n '\\\\': '\\\\',\n \"'\": \"'\",\n '\\n': 'n',\n '\\r': 'r',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n /** Built-in method references without a dependency on `root`. */\n var freeParseFloat = parseFloat,\n freeParseInt = parseInt;\n\n /** Detect free variable `global` from Node.js. */\n var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n /** Detect free variable `self`. */\n var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n /** Used as a reference to the global object. */\n var root = freeGlobal || freeSelf || Function('return this')();\n\n /** Detect free variable `exports`. */\n var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n /** Detect free variable `module`. */\n var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n /** Detect the popular CommonJS extension `module.exports`. */\n var moduleExports = freeModule && freeModule.exports === freeExports;\n\n /** Detect free variable `process` from Node.js. */\n var freeProcess = moduleExports && freeGlobal.process;\n\n /** Used to access faster Node.js helpers. */\n var nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n }());\n\n /* Node.js helper references. */\n var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n nodeIsDate = nodeUtil && nodeUtil.isDate,\n nodeIsMap = nodeUtil && nodeUtil.isMap,\n nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n nodeIsSet = nodeUtil && nodeUtil.isSet,\n nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\n function apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n }\n\n /**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function arrayAggregator(array, setter, iteratee, accumulator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n var value = array[index];\n setter(accumulator, value, iteratee(value), array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.forEachRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEachRight(array, iteratee) {\n var length = array == null ? 0 : array.length;\n\n while (length--) {\n if (iteratee(array[length], length, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.every` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n */\n function arrayEvery(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (!predicate(array[index], index, array)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n }\n\n /**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n }\n\n /**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\n function arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n }\n\n /**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.reduceRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the last element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n var length = array == null ? 0 : array.length;\n if (initAccum && length) {\n accumulator = array[--length];\n }\n while (length--) {\n accumulator = iteratee(accumulator, array[length], length, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Gets the size of an ASCII `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n var asciiSize = baseProperty('length');\n\n /**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function asciiToArray(string) {\n return string.split('');\n }\n\n /**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function asciiWords(string) {\n return string.match(reAsciiWord) || [];\n }\n\n /**\n * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n * without support for iteratee shorthands, which iterates over `collection`\n * using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the found element or its key, else `undefined`.\n */\n function baseFindKey(collection, predicate, eachFunc) {\n var result;\n eachFunc(collection, function(value, key, collection) {\n if (predicate(value, key, collection)) {\n result = key;\n return false;\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n }\n\n /**\n * This function is like `baseIndexOf` except that it accepts a comparator.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOfWith(array, value, fromIndex, comparator) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (comparator(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\n function baseIsNaN(value) {\n return value !== value;\n }\n\n /**\n * The base implementation of `_.mean` and `_.meanBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the mean.\n */\n function baseMean(array, iteratee) {\n var length = array == null ? 0 : array.length;\n return length ? (baseSum(array, iteratee) / length) : NAN;\n }\n\n /**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyOf(object) {\n return function(key) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.reduce` and `_.reduceRight`, without support\n * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initAccum Specify using the first or last element of\n * `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\n function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n eachFunc(collection, function(value, index, collection) {\n accumulator = initAccum\n ? (initAccum = false, value)\n : iteratee(accumulator, value, index, collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\n function baseSortBy(array, comparer) {\n var length = array.length;\n\n array.sort(comparer);\n while (length--) {\n array[length] = array[length].value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.sum` and `_.sumBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the sum.\n */\n function baseSum(array, iteratee) {\n var result,\n index = -1,\n length = array.length;\n\n while (++index < length) {\n var current = iteratee(array[index]);\n if (current !== undefined) {\n result = result === undefined ? current : (result + current);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\n function baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n * of key-value pairs for `object` corresponding to the property names of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the key-value pairs.\n */\n function baseToPairs(object, props) {\n return arrayMap(props, function(key) {\n return [key, object[key]];\n });\n }\n\n /**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\n function baseUnary(func) {\n return function(value) {\n return func(value);\n };\n }\n\n /**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\n function baseValues(object, props) {\n return arrayMap(props, function(key) {\n return object[key];\n });\n }\n\n /**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function cacheHas(cache, key) {\n return cache.has(key);\n }\n\n /**\n * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the first unmatched string symbol.\n */\n function charsStartIndex(strSymbols, chrSymbols) {\n var index = -1,\n length = strSymbols.length;\n\n while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the last unmatched string symbol.\n */\n function charsEndIndex(strSymbols, chrSymbols) {\n var index = strSymbols.length;\n\n while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Gets the number of `placeholder` occurrences in `array`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} placeholder The placeholder to search for.\n * @returns {number} Returns the placeholder count.\n */\n function countHolders(array, placeholder) {\n var length = array.length,\n result = 0;\n\n while (length--) {\n if (array[length] === placeholder) {\n ++result;\n }\n }\n return result;\n }\n\n /**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\n var deburrLetter = basePropertyOf(deburredLetters);\n\n /**\n * Used by `_.escape` to convert characters to HTML entities.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n var escapeHtmlChar = basePropertyOf(htmlEscapes);\n\n /**\n * Used by `_.template` to escape characters for inclusion in compiled string literals.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n function escapeStringChar(chr) {\n return '\\\\' + stringEscapes[chr];\n }\n\n /**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function getValue(object, key) {\n return object == null ? undefined : object[key];\n }\n\n /**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\n function hasUnicode(string) {\n return reHasUnicode.test(string);\n }\n\n /**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\n function hasUnicodeWord(string) {\n return reHasUnicodeWord.test(string);\n }\n\n /**\n * Converts `iterator` to an array.\n *\n * @private\n * @param {Object} iterator The iterator to convert.\n * @returns {Array} Returns the converted array.\n */\n function iteratorToArray(iterator) {\n var data,\n result = [];\n\n while (!(data = iterator.next()).done) {\n result.push(data.value);\n }\n return result;\n }\n\n /**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\n function mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n }\n\n /**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\n function overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n }\n\n /**\n * Replaces all `placeholder` elements in `array` with an internal placeholder\n * and returns an array of their indexes.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {*} placeholder The placeholder to replace.\n * @returns {Array} Returns the new array of placeholder indexes.\n */\n function replaceHolders(array, placeholder) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value === placeholder || value === PLACEHOLDER) {\n array[index] = PLACEHOLDER;\n result[resIndex++] = index;\n }\n }\n return result;\n }\n\n /**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\n function setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n }\n\n /**\n * Converts `set` to its value-value pairs.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the value-value pairs.\n */\n function setToPairs(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = [value, value];\n });\n return result;\n }\n\n /**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * A specialized version of `_.lastIndexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictLastIndexOf(array, value, fromIndex) {\n var index = fromIndex + 1;\n while (index--) {\n if (array[index] === value) {\n return index;\n }\n }\n return index;\n }\n\n /**\n * Gets the number of symbols in `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the string size.\n */\n function stringSize(string) {\n return hasUnicode(string)\n ? unicodeSize(string)\n : asciiSize(string);\n }\n\n /**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function stringToArray(string) {\n return hasUnicode(string)\n ? unicodeToArray(string)\n : asciiToArray(string);\n }\n\n /**\n * Used by `_.unescape` to convert HTML entities to characters.\n *\n * @private\n * @param {string} chr The matched character to unescape.\n * @returns {string} Returns the unescaped character.\n */\n var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\n /**\n * Gets the size of a Unicode `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n function unicodeSize(string) {\n var result = reUnicode.lastIndex = 0;\n while (reUnicode.test(string)) {\n ++result;\n }\n return result;\n }\n\n /**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function unicodeToArray(string) {\n return string.match(reUnicode) || [];\n }\n\n /**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function unicodeWords(string) {\n return string.match(reUnicodeWord) || [];\n }\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * Create a new pristine `lodash` function using the `context` object.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Util\n * @param {Object} [context=root] The context object.\n * @returns {Function} Returns a new `lodash` function.\n * @example\n *\n * _.mixin({ 'foo': _.constant('foo') });\n *\n * var lodash = _.runInContext();\n * lodash.mixin({ 'bar': lodash.constant('bar') });\n *\n * _.isFunction(_.foo);\n * // => true\n * _.isFunction(_.bar);\n * // => false\n *\n * lodash.isFunction(lodash.foo);\n * // => false\n * lodash.isFunction(lodash.bar);\n * // => true\n *\n * // Create a suped-up `defer` in Node.js.\n * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n */\n var runInContext = (function runInContext(context) {\n context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\n\n /** Built-in constructor references. */\n var Array = context.Array,\n Date = context.Date,\n Error = context.Error,\n Function = context.Function,\n Math = context.Math,\n Object = context.Object,\n RegExp = context.RegExp,\n String = context.String,\n TypeError = context.TypeError;\n\n /** Used for built-in method references. */\n var arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n /** Used to detect overreaching core-js shims. */\n var coreJsData = context['__core-js_shared__'];\n\n /** Used to resolve the decompiled source of functions. */\n var funcToString = funcProto.toString;\n\n /** Used to check objects for own properties. */\n var hasOwnProperty = objectProto.hasOwnProperty;\n\n /** Used to generate unique IDs. */\n var idCounter = 0;\n\n /** Used to detect methods masquerading as native. */\n var maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n }());\n\n /**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n var nativeObjectToString = objectProto.toString;\n\n /** Used to infer the `Object` constructor. */\n var objectCtorString = funcToString.call(Object);\n\n /** Used to restore the original `_` reference in `_.noConflict`. */\n var oldDash = root._;\n\n /** Used to detect if a method is native. */\n var reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n );\n\n /** Built-in value references. */\n var Buffer = moduleExports ? context.Buffer : undefined,\n Symbol = context.Symbol,\n Uint8Array = context.Uint8Array,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n getPrototype = overArg(Object.getPrototypeOf, Object),\n objectCreate = Object.create,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\n symIterator = Symbol ? Symbol.iterator : undefined,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n var defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n }());\n\n /** Mocked built-ins. */\n var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n ctxNow = Date && Date.now !== root.Date.now && Date.now,\n ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeCeil = Math.ceil,\n nativeFloor = Math.floor,\n nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeIsFinite = context.isFinite,\n nativeJoin = arrayProto.join,\n nativeKeys = overArg(Object.keys, Object),\n nativeMax = Math.max,\n nativeMin = Math.min,\n nativeNow = Date.now,\n nativeParseInt = context.parseInt,\n nativeRandom = Math.random,\n nativeReverse = arrayProto.reverse;\n\n /* Built-in method references that are verified to be native. */\n var DataView = getNative(context, 'DataView'),\n Map = getNative(context, 'Map'),\n Promise = getNative(context, 'Promise'),\n Set = getNative(context, 'Set'),\n WeakMap = getNative(context, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n /** Used to store function metadata. */\n var metaMap = WeakMap && new WeakMap;\n\n /** Used to lookup unminified function names. */\n var realNames = {};\n\n /** Used to detect maps, sets, and weakmaps. */\n var dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n /** Used to convert symbols to primitives and strings. */\n var symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` object which wraps `value` to enable implicit method\n * chain sequences. Methods that operate on and return arrays, collections,\n * and functions can be chained together. Methods that retrieve a single value\n * or may return a primitive value will automatically end the chain sequence\n * and return the unwrapped value. Otherwise, the value must be unwrapped\n * with `_#value`.\n *\n * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n * enabled using `_.chain`.\n *\n * The execution of chained methods is lazy, that is, it's deferred until\n * `_#value` is implicitly or explicitly called.\n *\n * Lazy evaluation allows several methods to support shortcut fusion.\n * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n * the creation of intermediate arrays and can greatly reduce the number of\n * iteratee executions. Sections of a chain sequence qualify for shortcut\n * fusion if the section is applied to an array and iteratees accept only\n * one argument. The heuristic for whether a section qualifies for shortcut\n * fusion is subject to change.\n *\n * Chaining is supported in custom builds as long as the `_#value` method is\n * directly or indirectly included in the build.\n *\n * In addition to lodash methods, wrappers have `Array` and `String` methods.\n *\n * The wrapper `Array` methods are:\n * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n *\n * The wrapper `String` methods are:\n * `replace` and `split`\n *\n * The wrapper methods that support shortcut fusion are:\n * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n *\n * The chainable wrapper methods are:\n * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n * `zipObject`, `zipObjectDeep`, and `zipWith`\n *\n * The wrapper methods that are **not** chainable by default are:\n * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n * `upperFirst`, `value`, and `words`\n *\n * @name _\n * @constructor\n * @category Seq\n * @param {*} value The value to wrap in a `lodash` instance.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2, 3]);\n *\n * // Returns an unwrapped value.\n * wrapped.reduce(_.add);\n * // => 6\n *\n * // Returns a wrapped value.\n * var squares = wrapped.map(square);\n *\n * _.isArray(squares);\n * // => false\n *\n * _.isArray(squares.value());\n * // => true\n */\n function lodash(value) {\n if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n if (value instanceof LodashWrapper) {\n return value;\n }\n if (hasOwnProperty.call(value, '__wrapped__')) {\n return wrapperClone(value);\n }\n }\n return new LodashWrapper(value);\n }\n\n /**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\n var baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n }());\n\n /**\n * The function whose prototype chain sequence wrappers inherit from.\n *\n * @private\n */\n function baseLodash() {\n // No operation performed.\n }\n\n /**\n * The base constructor for creating `lodash` wrapper objects.\n *\n * @private\n * @param {*} value The value to wrap.\n * @param {boolean} [chainAll] Enable explicit method chain sequences.\n */\n function LodashWrapper(value, chainAll) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__chain__ = !!chainAll;\n this.__index__ = 0;\n this.__values__ = undefined;\n }\n\n /**\n * By default, the template delimiters used by lodash are like those in\n * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n * following template settings to use alternative delimiters.\n *\n * @static\n * @memberOf _\n * @type {Object}\n */\n lodash.templateSettings = {\n\n /**\n * Used to detect `data` property values to be HTML-escaped.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'escape': reEscape,\n\n /**\n * Used to detect code to be evaluated.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'evaluate': reEvaluate,\n\n /**\n * Used to detect `data` property values to inject.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'interpolate': reInterpolate,\n\n /**\n * Used to reference the data object in the template text.\n *\n * @memberOf _.templateSettings\n * @type {string}\n */\n 'variable': '',\n\n /**\n * Used to import variables into the compiled template.\n *\n * @memberOf _.templateSettings\n * @type {Object}\n */\n 'imports': {\n\n /**\n * A reference to the `lodash` function.\n *\n * @memberOf _.templateSettings.imports\n * @type {Function}\n */\n '_': lodash\n }\n };\n\n // Ensure wrappers are instances of `baseLodash`.\n lodash.prototype = baseLodash.prototype;\n lodash.prototype.constructor = lodash;\n\n LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n LodashWrapper.prototype.constructor = LodashWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n *\n * @private\n * @constructor\n * @param {*} value The value to wrap.\n */\n function LazyWrapper(value) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__dir__ = 1;\n this.__filtered__ = false;\n this.__iteratees__ = [];\n this.__takeCount__ = MAX_ARRAY_LENGTH;\n this.__views__ = [];\n }\n\n /**\n * Creates a clone of the lazy wrapper object.\n *\n * @private\n * @name clone\n * @memberOf LazyWrapper\n * @returns {Object} Returns the cloned `LazyWrapper` object.\n */\n function lazyClone() {\n var result = new LazyWrapper(this.__wrapped__);\n result.__actions__ = copyArray(this.__actions__);\n result.__dir__ = this.__dir__;\n result.__filtered__ = this.__filtered__;\n result.__iteratees__ = copyArray(this.__iteratees__);\n result.__takeCount__ = this.__takeCount__;\n result.__views__ = copyArray(this.__views__);\n return result;\n }\n\n /**\n * Reverses the direction of lazy iteration.\n *\n * @private\n * @name reverse\n * @memberOf LazyWrapper\n * @returns {Object} Returns the new reversed `LazyWrapper` object.\n */\n function lazyReverse() {\n if (this.__filtered__) {\n var result = new LazyWrapper(this);\n result.__dir__ = -1;\n result.__filtered__ = true;\n } else {\n result = this.clone();\n result.__dir__ *= -1;\n }\n return result;\n }\n\n /**\n * Extracts the unwrapped value from its lazy wrapper.\n *\n * @private\n * @name value\n * @memberOf LazyWrapper\n * @returns {*} Returns the unwrapped value.\n */\n function lazyValue() {\n var array = this.__wrapped__.value(),\n dir = this.__dir__,\n isArr = isArray(array),\n isRight = dir < 0,\n arrLength = isArr ? array.length : 0,\n view = getView(0, arrLength, this.__views__),\n start = view.start,\n end = view.end,\n length = end - start,\n index = isRight ? end : (start - 1),\n iteratees = this.__iteratees__,\n iterLength = iteratees.length,\n resIndex = 0,\n takeCount = nativeMin(length, this.__takeCount__);\n\n if (!isArr || (!isRight && arrLength == length && takeCount == length)) {\n return baseWrapperValue(array, this.__actions__);\n }\n var result = [];\n\n outer:\n while (length-- && resIndex < takeCount) {\n index += dir;\n\n var iterIndex = -1,\n value = array[index];\n\n while (++iterIndex < iterLength) {\n var data = iteratees[iterIndex],\n iteratee = data.iteratee,\n type = data.type,\n computed = iteratee(value);\n\n if (type == LAZY_MAP_FLAG) {\n value = computed;\n } else if (!computed) {\n if (type == LAZY_FILTER_FLAG) {\n continue outer;\n } else {\n break outer;\n }\n }\n }\n result[resIndex++] = value;\n }\n return result;\n }\n\n // Ensure `LazyWrapper` is an instance of `baseLodash`.\n LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n LazyWrapper.prototype.constructor = LazyWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\n function hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n }\n\n /**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n }\n\n /**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\n function hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n }\n\n // Add methods to `Hash`.\n Hash.prototype.clear = hashClear;\n Hash.prototype['delete'] = hashDelete;\n Hash.prototype.get = hashGet;\n Hash.prototype.has = hashHas;\n Hash.prototype.set = hashSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\n function listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n }\n\n /**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n }\n\n /**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n }\n\n /**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\n function listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n }\n\n // Add methods to `ListCache`.\n ListCache.prototype.clear = listCacheClear;\n ListCache.prototype['delete'] = listCacheDelete;\n ListCache.prototype.get = listCacheGet;\n ListCache.prototype.has = listCacheHas;\n ListCache.prototype.set = listCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\n function mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n }\n\n /**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function mapCacheGet(key) {\n return getMapData(this, key).get(key);\n }\n\n /**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function mapCacheHas(key) {\n return getMapData(this, key).has(key);\n }\n\n /**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\n function mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n }\n\n // Add methods to `MapCache`.\n MapCache.prototype.clear = mapCacheClear;\n MapCache.prototype['delete'] = mapCacheDelete;\n MapCache.prototype.get = mapCacheGet;\n MapCache.prototype.has = mapCacheHas;\n MapCache.prototype.set = mapCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\n function SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n }\n\n /**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\n function setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n }\n\n /**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\n function setCacheHas(value) {\n return this.__data__.has(value);\n }\n\n // Add methods to `SetCache`.\n SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n SetCache.prototype.has = setCacheHas;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n }\n\n /**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\n function stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n }\n\n /**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function stackGet(key) {\n return this.__data__.get(key);\n }\n\n /**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function stackHas(key) {\n return this.__data__.has(key);\n }\n\n /**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\n function stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n }\n\n // Add methods to `Stack`.\n Stack.prototype.clear = stackClear;\n Stack.prototype['delete'] = stackDelete;\n Stack.prototype.get = stackGet;\n Stack.prototype.has = stackHas;\n Stack.prototype.set = stackSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\n function arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.sample` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @returns {*} Returns the random element.\n */\n function arraySample(array) {\n var length = array.length;\n return length ? array[baseRandom(0, length - 1)] : undefined;\n }\n\n /**\n * A specialized version of `_.sampleSize` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function arraySampleSize(array, n) {\n return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n }\n\n /**\n * A specialized version of `_.shuffle` for arrays.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function arrayShuffle(array) {\n return shuffleSelf(copyArray(array));\n }\n\n /**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n }\n\n /**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseAggregator(collection, setter, iteratee, accumulator) {\n baseEach(collection, function(value, key, collection) {\n setter(accumulator, value, iteratee(value), collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n }\n\n /**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n }\n\n /**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n }\n\n /**\n * The base implementation of `_.at` without support for individual paths.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {string[]} paths The property paths to pick.\n * @returns {Array} Returns the picked elements.\n */\n function baseAt(object, paths) {\n var index = -1,\n length = paths.length,\n result = Array(length),\n skip = object == null;\n\n while (++index < length) {\n result[index] = skip ? undefined : get(object, paths[index]);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\n function baseClamp(number, lower, upper) {\n if (number === number) {\n if (upper !== undefined) {\n number = number <= upper ? number : upper;\n }\n if (lower !== undefined) {\n number = number >= lower ? number : lower;\n }\n }\n return number;\n }\n\n /**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\n function baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n }\n\n /**\n * The base implementation of `_.conforms` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property predicates to conform to.\n * @returns {Function} Returns the new spec function.\n */\n function baseConforms(source) {\n var props = keys(source);\n return function(object) {\n return baseConformsTo(object, source, props);\n };\n }\n\n /**\n * The base implementation of `_.conformsTo` which accepts `props` to check.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n */\n function baseConformsTo(object, source, props) {\n var length = props.length;\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (length--) {\n var key = props[length],\n predicate = source[key],\n value = object[key];\n\n if ((value === undefined && !(key in object)) || !predicate(value)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.delay` and `_.defer` which accepts `args`\n * to provide to `func`.\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {Array} args The arguments to provide to `func`.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n function baseDelay(func, wait, args) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return setTimeout(function() { func.apply(undefined, args); }, wait);\n }\n\n /**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\n function baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length;\n\n if (!length) {\n return result;\n }\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee));\n }\n if (comparator) {\n includes = arrayIncludesWith;\n isCommon = false;\n }\n else if (values.length >= LARGE_ARRAY_SIZE) {\n includes = cacheHas;\n isCommon = false;\n values = new SetCache(values);\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee == null ? value : iteratee(value);\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength;\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer;\n }\n }\n result.push(value);\n }\n else if (!includes(values, computed, comparator)) {\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEach = createBaseEach(baseForOwn);\n\n /**\n * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEachRight = createBaseEach(baseForOwnRight, true);\n\n /**\n * The base implementation of `_.every` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`\n */\n function baseEvery(collection, predicate) {\n var result = true;\n baseEach(collection, function(value, index, collection) {\n result = !!predicate(value, index, collection);\n return result;\n });\n return result;\n }\n\n /**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\n function baseExtremum(array, iteratee, comparator) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n var value = array[index],\n current = iteratee(value);\n\n if (current != null && (computed === undefined\n ? (current === current && !isSymbol(current))\n : comparator(current, computed)\n )) {\n var computed = current,\n result = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.fill` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n */\n function baseFill(array, value, start, end) {\n var length = array.length;\n\n start = toInteger(start);\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = (end === undefined || end > length) ? length : toInteger(end);\n if (end < 0) {\n end += length;\n }\n end = start > end ? 0 : toLength(end);\n while (start < end) {\n array[start++] = value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function baseFilter(collection, predicate) {\n var result = [];\n baseEach(collection, function(value, index, collection) {\n if (predicate(value, index, collection)) {\n result.push(value);\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\n function baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseFor = createBaseFor();\n\n /**\n * This function is like `baseFor` except that it iterates over properties\n * in the opposite order.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseForRight = createBaseFor(true);\n\n /**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwnRight(object, iteratee) {\n return object && baseForRight(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.functions` which creates an array of\n * `object` function property names filtered from `props`.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Array} props The property names to filter.\n * @returns {Array} Returns the function names.\n */\n function baseFunctions(object, props) {\n return arrayFilter(props, function(key) {\n return isFunction(object[key]);\n });\n }\n\n /**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\n function baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n }\n\n /**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n }\n\n /**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n function baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n }\n\n /**\n * The base implementation of `_.gt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n */\n function baseGt(value, other) {\n return value > other;\n }\n\n /**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n }\n\n /**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHasIn(object, key) {\n return object != null && key in Object(object);\n }\n\n /**\n * The base implementation of `_.inRange` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to check.\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n */\n function baseInRange(number, start, end) {\n return number >= nativeMin(start, end) && number < nativeMax(start, end);\n }\n\n /**\n * The base implementation of methods like `_.intersection`, without support\n * for iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of shared values.\n */\n function baseIntersection(arrays, iteratee, comparator) {\n var includes = comparator ? arrayIncludesWith : arrayIncludes,\n length = arrays[0].length,\n othLength = arrays.length,\n othIndex = othLength,\n caches = Array(othLength),\n maxLength = Infinity,\n result = [];\n\n while (othIndex--) {\n var array = arrays[othIndex];\n if (othIndex && iteratee) {\n array = arrayMap(array, baseUnary(iteratee));\n }\n maxLength = nativeMin(array.length, maxLength);\n caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n ? new SetCache(othIndex && array)\n : undefined;\n }\n array = arrays[0];\n\n var index = -1,\n seen = caches[0];\n\n outer:\n while (++index < length && result.length < maxLength) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (!(seen\n ? cacheHas(seen, computed)\n : includes(result, computed, comparator)\n )) {\n othIndex = othLength;\n while (--othIndex) {\n var cache = caches[othIndex];\n if (!(cache\n ? cacheHas(cache, computed)\n : includes(arrays[othIndex], computed, comparator))\n ) {\n continue outer;\n }\n }\n if (seen) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.invert` and `_.invertBy` which inverts\n * `object` with values transformed by `iteratee` and set by `setter`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform values.\n * @param {Object} accumulator The initial inverted object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseInverter(object, setter, iteratee, accumulator) {\n baseForOwn(object, function(value, key, object) {\n setter(accumulator, iteratee(value), key, object);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.invoke` without support for individual\n * method arguments.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {Array} args The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n */\n function baseInvoke(object, path, args) {\n path = castPath(path, object);\n object = parent(object, path);\n var func = object == null ? object : object[toKey(last(path))];\n return func == null ? undefined : apply(func, object, args);\n }\n\n /**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\n function baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n }\n\n /**\n * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n */\n function baseIsArrayBuffer(value) {\n return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n }\n\n /**\n * The base implementation of `_.isDate` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n */\n function baseIsDate(value) {\n return isObjectLike(value) && baseGetTag(value) == dateTag;\n }\n\n /**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\n function baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n }\n\n /**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n }\n\n /**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\n function baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n }\n\n /**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\n function baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\n function baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n }\n\n /**\n * The base implementation of `_.isRegExp` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n */\n function baseIsRegExp(value) {\n return isObjectLike(value) && baseGetTag(value) == regexpTag;\n }\n\n /**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\n function baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n }\n\n /**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\n function baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n }\n\n /**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\n function baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n }\n\n /**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.lt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n */\n function baseLt(value, other) {\n return value < other;\n }\n\n /**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n }\n\n /**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n }\n\n /**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n }\n\n /**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n }\n\n /**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n }\n\n /**\n * The base implementation of `_.nth` which doesn't coerce arguments.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {number} n The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n */\n function baseNth(array, n) {\n var length = array.length;\n if (!length) {\n return;\n }\n n += n < 0 ? length : 0;\n return isIndex(n, length) ? array[n] : undefined;\n }\n\n /**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\n function baseOrderBy(collection, iteratees, orders) {\n var index = -1;\n iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(getIteratee()));\n\n var result = baseMap(collection, function(value, key, collection) {\n var criteria = arrayMap(iteratees, function(iteratee) {\n return iteratee(value);\n });\n return { 'criteria': criteria, 'index': ++index, 'value': value };\n });\n\n return baseSortBy(result, function(object, other) {\n return compareMultiple(object, other, orders);\n });\n }\n\n /**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\n function basePick(object, paths) {\n return basePickBy(object, paths, function(value, path) {\n return hasIn(object, path);\n });\n }\n\n /**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\n function basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n }\n\n /**\n * The base implementation of `_.pullAllBy` without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n */\n function basePullAll(array, values, iteratee, comparator) {\n var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n index = -1,\n length = values.length,\n seen = array;\n\n if (array === values) {\n values = copyArray(values);\n }\n if (iteratee) {\n seen = arrayMap(array, baseUnary(iteratee));\n }\n while (++index < length) {\n var fromIndex = 0,\n value = values[index],\n computed = iteratee ? iteratee(value) : value;\n\n while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n if (seen !== array) {\n splice.call(seen, fromIndex, 1);\n }\n splice.call(array, fromIndex, 1);\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.pullAt` without support for individual\n * indexes or capturing the removed elements.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {number[]} indexes The indexes of elements to remove.\n * @returns {Array} Returns `array`.\n */\n function basePullAt(array, indexes) {\n var length = array ? indexes.length : 0,\n lastIndex = length - 1;\n\n while (length--) {\n var index = indexes[length];\n if (length == lastIndex || index !== previous) {\n var previous = index;\n if (isIndex(index)) {\n splice.call(array, index, 1);\n } else {\n baseUnset(array, index);\n }\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.random` without support for returning\n * floating-point numbers.\n *\n * @private\n * @param {number} lower The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the random number.\n */\n function baseRandom(lower, upper) {\n return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n }\n\n /**\n * The base implementation of `_.range` and `_.rangeRight` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\n function baseRange(start, end, step, fromRight) {\n var index = -1,\n length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n result = Array(length);\n\n while (length--) {\n result[fromRight ? length : ++index] = start;\n start += step;\n }\n return result;\n }\n\n /**\n * The base implementation of `_.repeat` which doesn't coerce arguments.\n *\n * @private\n * @param {string} string The string to repeat.\n * @param {number} n The number of times to repeat the string.\n * @returns {string} Returns the repeated string.\n */\n function baseRepeat(string, n) {\n var result = '';\n if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n return result;\n }\n // Leverage the exponentiation by squaring algorithm for a faster repeat.\n // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n do {\n if (n % 2) {\n result += string;\n }\n n = nativeFloor(n / 2);\n if (n) {\n string += string;\n }\n } while (n);\n\n return result;\n }\n\n /**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\n function baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n }\n\n /**\n * The base implementation of `_.sample`.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n */\n function baseSample(collection) {\n return arraySample(values(collection));\n }\n\n /**\n * The base implementation of `_.sampleSize` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function baseSampleSize(collection, n) {\n var array = values(collection);\n return shuffleSelf(array, baseClamp(n, 0, array.length));\n }\n\n /**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n }\n\n /**\n * The base implementation of `setData` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var baseSetData = !metaMap ? identity : function(func, data) {\n metaMap.set(func, data);\n return func;\n };\n\n /**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n };\n\n /**\n * The base implementation of `_.shuffle`.\n *\n * @private\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function baseShuffle(collection) {\n return shuffleSelf(values(collection));\n }\n\n /**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n }\n\n /**\n * The base implementation of `_.some` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function baseSome(collection, predicate) {\n var result;\n\n baseEach(collection, function(value, index, collection) {\n result = predicate(value, index, collection);\n return !result;\n });\n return !!result;\n }\n\n /**\n * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n * performs a binary search of `array` to determine the index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndex(array, value, retHighest) {\n var low = 0,\n high = array == null ? low : array.length;\n\n if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n while (low < high) {\n var mid = (low + high) >>> 1,\n computed = array[mid];\n\n if (computed !== null && !isSymbol(computed) &&\n (retHighest ? (computed <= value) : (computed < value))) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return high;\n }\n return baseSortedIndexBy(array, value, identity, retHighest);\n }\n\n /**\n * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n * which invokes `iteratee` for `value` and each element of `array` to compute\n * their sort ranking. The iteratee is invoked with one argument; (value).\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} iteratee The iteratee invoked per element.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndexBy(array, value, iteratee, retHighest) {\n value = iteratee(value);\n\n var low = 0,\n high = array == null ? 0 : array.length,\n valIsNaN = value !== value,\n valIsNull = value === null,\n valIsSymbol = isSymbol(value),\n valIsUndefined = value === undefined;\n\n while (low < high) {\n var mid = nativeFloor((low + high) / 2),\n computed = iteratee(array[mid]),\n othIsDefined = computed !== undefined,\n othIsNull = computed === null,\n othIsReflexive = computed === computed,\n othIsSymbol = isSymbol(computed);\n\n if (valIsNaN) {\n var setLow = retHighest || othIsReflexive;\n } else if (valIsUndefined) {\n setLow = othIsReflexive && (retHighest || othIsDefined);\n } else if (valIsNull) {\n setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n } else if (valIsSymbol) {\n setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n } else if (othIsNull || othIsSymbol) {\n setLow = false;\n } else {\n setLow = retHighest ? (computed <= value) : (computed < value);\n }\n if (setLow) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return nativeMin(high, MAX_ARRAY_INDEX);\n }\n\n /**\n * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseSortedUniq(array, iteratee) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n if (!index || !eq(computed, seen)) {\n var seen = computed;\n result[resIndex++] = value === 0 ? 0 : value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toNumber` which doesn't ensure correct\n * conversions of binary, hexadecimal, or octal string values.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n */\n function baseToNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n return +value;\n }\n\n /**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\n function baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\n function baseUnset(object, path) {\n path = castPath(path, object);\n object = parent(object, path);\n return object == null || delete object[toKey(last(path))];\n }\n\n /**\n * The base implementation of `_.update`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to update.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseUpdate(object, path, updater, customizer) {\n return baseSet(object, path, updater(baseGet(object, path)), customizer);\n }\n\n /**\n * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n * without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {Function} predicate The function invoked per iteration.\n * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseWhile(array, predicate, isDrop, fromRight) {\n var length = array.length,\n index = fromRight ? length : -1;\n\n while ((fromRight ? index-- : ++index < length) &&\n predicate(array[index], index, array)) {}\n\n return isDrop\n ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n }\n\n /**\n * The base implementation of `wrapperValue` which returns the result of\n * performing a sequence of actions on the unwrapped `value`, where each\n * successive action is supplied the return value of the previous.\n *\n * @private\n * @param {*} value The unwrapped value.\n * @param {Array} actions Actions to perform to resolve the unwrapped value.\n * @returns {*} Returns the resolved value.\n */\n function baseWrapperValue(value, actions) {\n var result = value;\n if (result instanceof LazyWrapper) {\n result = result.value();\n }\n return arrayReduce(actions, function(result, action) {\n return action.func.apply(action.thisArg, arrayPush([result], action.args));\n }, result);\n }\n\n /**\n * The base implementation of methods like `_.xor`, without support for\n * iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of values.\n */\n function baseXor(arrays, iteratee, comparator) {\n var length = arrays.length;\n if (length < 2) {\n return length ? baseUniq(arrays[0]) : [];\n }\n var index = -1,\n result = Array(length);\n\n while (++index < length) {\n var array = arrays[index],\n othIndex = -1;\n\n while (++othIndex < length) {\n if (othIndex != index) {\n result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n }\n }\n }\n return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n }\n\n /**\n * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n *\n * @private\n * @param {Array} props The property identifiers.\n * @param {Array} values The property values.\n * @param {Function} assignFunc The function to assign values.\n * @returns {Object} Returns the new object.\n */\n function baseZipObject(props, values, assignFunc) {\n var index = -1,\n length = props.length,\n valsLength = values.length,\n result = {};\n\n while (++index < length) {\n var value = index < valsLength ? values[index] : undefined;\n assignFunc(result, props[index], value);\n }\n return result;\n }\n\n /**\n * Casts `value` to an empty array if it's not an array like object.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array|Object} Returns the cast array-like object.\n */\n function castArrayLikeObject(value) {\n return isArrayLikeObject(value) ? value : [];\n }\n\n /**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\n function castFunction(value) {\n return typeof value == 'function' ? value : identity;\n }\n\n /**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\n function castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n }\n\n /**\n * A `baseRest` alias which can be replaced with `identity` by module\n * replacement plugins.\n *\n * @private\n * @type {Function}\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n var castRest = baseRest;\n\n /**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\n function castSlice(array, start, end) {\n var length = array.length;\n end = end === undefined ? length : end;\n return (!start && end >= length) ? array : baseSlice(array, start, end);\n }\n\n /**\n * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n *\n * @private\n * @param {number|Object} id The timer id or timeout object of the timer to clear.\n */\n var clearTimeout = ctxClearTimeout || function(id) {\n return root.clearTimeout(id);\n };\n\n /**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\n function cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n }\n\n /**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\n function cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n }\n\n /**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\n function cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n }\n\n /**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\n function cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n }\n\n /**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\n function cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n }\n\n /**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\n function cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n }\n\n /**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\n function compareAscending(value, other) {\n if (value !== other) {\n var valIsDefined = value !== undefined,\n valIsNull = value === null,\n valIsReflexive = value === value,\n valIsSymbol = isSymbol(value);\n\n var othIsDefined = other !== undefined,\n othIsNull = other === null,\n othIsReflexive = other === other,\n othIsSymbol = isSymbol(other);\n\n if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n (valIsNull && othIsDefined && othIsReflexive) ||\n (!valIsDefined && othIsReflexive) ||\n !valIsReflexive) {\n return 1;\n }\n if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n (othIsNull && valIsDefined && valIsReflexive) ||\n (!othIsDefined && valIsReflexive) ||\n !othIsReflexive) {\n return -1;\n }\n }\n return 0;\n }\n\n /**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\n function compareMultiple(object, other, orders) {\n var index = -1,\n objCriteria = object.criteria,\n othCriteria = other.criteria,\n length = objCriteria.length,\n ordersLength = orders.length;\n\n while (++index < length) {\n var result = compareAscending(objCriteria[index], othCriteria[index]);\n if (result) {\n if (index >= ordersLength) {\n return result;\n }\n var order = orders[index];\n return result * (order == 'desc' ? -1 : 1);\n }\n }\n // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n // that causes it, under certain circumstances, to provide the same value for\n // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n // for more details.\n //\n // This also ensures a stable sort in V8 and other engines.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n return object.index - other.index;\n }\n\n /**\n * Creates an array that is the composition of partially applied arguments,\n * placeholders, and provided arguments into a single array of arguments.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to prepend to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgs(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersLength = holders.length,\n leftIndex = -1,\n leftLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(leftLength + rangeLength),\n isUncurried = !isCurried;\n\n while (++leftIndex < leftLength) {\n result[leftIndex] = partials[leftIndex];\n }\n while (++argsIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[holders[argsIndex]] = args[argsIndex];\n }\n }\n while (rangeLength--) {\n result[leftIndex++] = args[argsIndex++];\n }\n return result;\n }\n\n /**\n * This function is like `composeArgs` except that the arguments composition\n * is tailored for `_.partialRight`.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to append to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgsRight(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersIndex = -1,\n holdersLength = holders.length,\n rightIndex = -1,\n rightLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(rangeLength + rightLength),\n isUncurried = !isCurried;\n\n while (++argsIndex < rangeLength) {\n result[argsIndex] = args[argsIndex];\n }\n var offset = argsIndex;\n while (++rightIndex < rightLength) {\n result[offset + rightIndex] = partials[rightIndex];\n }\n while (++holdersIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[offset + holders[holdersIndex]] = args[argsIndex++];\n }\n }\n return result;\n }\n\n /**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\n function copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n }\n\n /**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\n function copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n }\n\n /**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n }\n\n /**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n }\n\n /**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\n function createAggregator(setter, initializer) {\n return function(collection, iteratee) {\n var func = isArray(collection) ? arrayAggregator : baseAggregator,\n accumulator = initializer ? initializer() : {};\n\n return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n };\n }\n\n /**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\n function createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n }\n\n /**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n }\n\n /**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the optional `this`\n * binding of `thisArg`.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createBind(func, bitmask, thisArg) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return fn.apply(isBind ? thisArg : this, arguments);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\n function createCaseFirst(methodName) {\n return function(string) {\n string = toString(string);\n\n var strSymbols = hasUnicode(string)\n ? stringToArray(string)\n : undefined;\n\n var chr = strSymbols\n ? strSymbols[0]\n : string.charAt(0);\n\n var trailing = strSymbols\n ? castSlice(strSymbols, 1).join('')\n : string.slice(1);\n\n return chr[methodName]() + trailing;\n };\n }\n\n /**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\n function createCompounder(callback) {\n return function(string) {\n return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n };\n }\n\n /**\n * Creates a function that produces an instance of `Ctor` regardless of\n * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n *\n * @private\n * @param {Function} Ctor The constructor to wrap.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCtor(Ctor) {\n return function() {\n // Use a `switch` statement to work with class constructors. See\n // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n // for more details.\n var args = arguments;\n switch (args.length) {\n case 0: return new Ctor;\n case 1: return new Ctor(args[0]);\n case 2: return new Ctor(args[0], args[1]);\n case 3: return new Ctor(args[0], args[1], args[2]);\n case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n }\n var thisBinding = baseCreate(Ctor.prototype),\n result = Ctor.apply(thisBinding, args);\n\n // Mimic the constructor's `return` behavior.\n // See https://es5.github.io/#x13.2.2 for more details.\n return isObject(result) ? result : thisBinding;\n };\n }\n\n /**\n * Creates a function that wraps `func` to enable currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {number} arity The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCurry(func, bitmask, arity) {\n var Ctor = createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length,\n placeholder = getHolder(wrapper);\n\n while (index--) {\n args[index] = arguments[index];\n }\n var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n ? []\n : replaceHolders(args, placeholder);\n\n length -= holders.length;\n if (length < arity) {\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, undefined,\n args, holders, undefined, undefined, arity - length);\n }\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return apply(fn, this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\n function createFind(findIndexFunc) {\n return function(collection, predicate, fromIndex) {\n var iterable = Object(collection);\n if (!isArrayLike(collection)) {\n var iteratee = getIteratee(predicate, 3);\n collection = keys(collection);\n predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n }\n var index = findIndexFunc(collection, predicate, fromIndex);\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n };\n }\n\n /**\n * Creates a `_.flow` or `_.flowRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new flow function.\n */\n function createFlow(fromRight) {\n return flatRest(function(funcs) {\n var length = funcs.length,\n index = length,\n prereq = LodashWrapper.prototype.thru;\n\n if (fromRight) {\n funcs.reverse();\n }\n while (index--) {\n var func = funcs[index];\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n var wrapper = new LodashWrapper([], true);\n }\n }\n index = wrapper ? index : length;\n while (++index < length) {\n func = funcs[index];\n\n var funcName = getFuncName(func),\n data = funcName == 'wrapper' ? getData(func) : undefined;\n\n if (data && isLaziable(data[0]) &&\n data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\n !data[4].length && data[9] == 1\n ) {\n wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n } else {\n wrapper = (func.length == 1 && isLaziable(func))\n ? wrapper[funcName]()\n : wrapper.thru(func);\n }\n }\n return function() {\n var args = arguments,\n value = args[0];\n\n if (wrapper && args.length == 1 && isArray(value)) {\n return wrapper.plant(value).value();\n }\n var index = 0,\n result = length ? funcs[index].apply(this, args) : value;\n\n while (++index < length) {\n result = funcs[index].call(this, result);\n }\n return result;\n };\n });\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with optional `this`\n * binding of `thisArg`, partial application, and currying.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [partialsRight] The arguments to append to those provided\n * to the new function.\n * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n var isAry = bitmask & WRAP_ARY_FLAG,\n isBind = bitmask & WRAP_BIND_FLAG,\n isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n isFlip = bitmask & WRAP_FLIP_FLAG,\n Ctor = isBindKey ? undefined : createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length;\n\n while (index--) {\n args[index] = arguments[index];\n }\n if (isCurried) {\n var placeholder = getHolder(wrapper),\n holdersCount = countHolders(args, placeholder);\n }\n if (partials) {\n args = composeArgs(args, partials, holders, isCurried);\n }\n if (partialsRight) {\n args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n }\n length -= holdersCount;\n if (isCurried && length < arity) {\n var newHolders = replaceHolders(args, placeholder);\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n args, newHolders, argPos, ary, arity - length\n );\n }\n var thisBinding = isBind ? thisArg : this,\n fn = isBindKey ? thisBinding[func] : func;\n\n length = args.length;\n if (argPos) {\n args = reorder(args, argPos);\n } else if (isFlip && length > 1) {\n args.reverse();\n }\n if (isAry && ary < length) {\n args.length = ary;\n }\n if (this && this !== root && this instanceof wrapper) {\n fn = Ctor || createCtor(fn);\n }\n return fn.apply(thisBinding, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.invertBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} toIteratee The function to resolve iteratees.\n * @returns {Function} Returns the new inverter function.\n */\n function createInverter(setter, toIteratee) {\n return function(object, iteratee) {\n return baseInverter(object, setter, toIteratee(iteratee), {});\n };\n }\n\n /**\n * Creates a function that performs a mathematical operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @param {number} [defaultValue] The value used for `undefined` arguments.\n * @returns {Function} Returns the new mathematical operation function.\n */\n function createMathOperation(operator, defaultValue) {\n return function(value, other) {\n var result;\n if (value === undefined && other === undefined) {\n return defaultValue;\n }\n if (value !== undefined) {\n result = value;\n }\n if (other !== undefined) {\n if (result === undefined) {\n return other;\n }\n if (typeof value == 'string' || typeof other == 'string') {\n value = baseToString(value);\n other = baseToString(other);\n } else {\n value = baseToNumber(value);\n other = baseToNumber(other);\n }\n result = operator(value, other);\n }\n return result;\n };\n }\n\n /**\n * Creates a function like `_.over`.\n *\n * @private\n * @param {Function} arrayFunc The function to iterate over iteratees.\n * @returns {Function} Returns the new over function.\n */\n function createOver(arrayFunc) {\n return flatRest(function(iteratees) {\n iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n return baseRest(function(args) {\n var thisArg = this;\n return arrayFunc(iteratees, function(iteratee) {\n return apply(iteratee, thisArg, args);\n });\n });\n });\n }\n\n /**\n * Creates the padding for `string` based on `length`. The `chars` string\n * is truncated if the number of characters exceeds `length`.\n *\n * @private\n * @param {number} length The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padding for `string`.\n */\n function createPadding(length, chars) {\n chars = chars === undefined ? ' ' : baseToString(chars);\n\n var charsLength = chars.length;\n if (charsLength < 2) {\n return charsLength ? baseRepeat(chars, length) : chars;\n }\n var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n return hasUnicode(chars)\n ? castSlice(stringToArray(result), 0, length).join('')\n : result.slice(0, length);\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the `this` binding\n * of `thisArg` and `partials` prepended to the arguments it receives.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} partials The arguments to prepend to those provided to\n * the new function.\n * @returns {Function} Returns the new wrapped function.\n */\n function createPartial(func, bitmask, thisArg, partials) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var argsIndex = -1,\n argsLength = arguments.length,\n leftIndex = -1,\n leftLength = partials.length,\n args = Array(leftLength + argsLength),\n fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n while (++leftIndex < leftLength) {\n args[leftIndex] = partials[leftIndex];\n }\n while (argsLength--) {\n args[leftIndex++] = arguments[++argsIndex];\n }\n return apply(fn, isBind ? thisArg : this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.range` or `_.rangeRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new range function.\n */\n function createRange(fromRight) {\n return function(start, end, step) {\n if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n end = step = undefined;\n }\n // Ensure the sign of `-0` is preserved.\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n return baseRange(start, end, step, fromRight);\n };\n }\n\n /**\n * Creates a function that performs a relational operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @returns {Function} Returns the new relational operation function.\n */\n function createRelationalOperation(operator) {\n return function(value, other) {\n if (!(typeof value == 'string' && typeof other == 'string')) {\n value = toNumber(value);\n other = toNumber(other);\n }\n return operator(value, other);\n };\n }\n\n /**\n * Creates a function that wraps `func` to continue currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {Function} wrapFunc The function to create the `func` wrapper.\n * @param {*} placeholder The placeholder value.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n var isCurry = bitmask & WRAP_CURRY_FLAG,\n newHolders = isCurry ? holders : undefined,\n newHoldersRight = isCurry ? undefined : holders,\n newPartials = isCurry ? partials : undefined,\n newPartialsRight = isCurry ? undefined : partials;\n\n bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n }\n var newData = [\n func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n newHoldersRight, argPos, ary, arity\n ];\n\n var result = wrapFunc.apply(undefined, newData);\n if (isLaziable(func)) {\n setData(result, newData);\n }\n result.placeholder = placeholder;\n return setWrapToString(result, func, bitmask);\n }\n\n /**\n * Creates a function like `_.round`.\n *\n * @private\n * @param {string} methodName The name of the `Math` method to use when rounding.\n * @returns {Function} Returns the new round function.\n */\n function createRound(methodName) {\n var func = Math[methodName];\n return function(number, precision) {\n number = toNumber(number);\n precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n if (precision && nativeIsFinite(number)) {\n // Shift with exponential notation to avoid floating-point issues.\n // See [MDN](https://mdn.io/round#Examples) for more details.\n var pair = (toString(number) + 'e').split('e'),\n value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n pair = (toString(value) + 'e').split('e');\n return +(pair[0] + 'e' + (+pair[1] - precision));\n }\n return func(number);\n };\n }\n\n /**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\n var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n };\n\n /**\n * Creates a `_.toPairs` or `_.toPairsIn` function.\n *\n * @private\n * @param {Function} keysFunc The function to get the keys of a given object.\n * @returns {Function} Returns the new pairs function.\n */\n function createToPairs(keysFunc) {\n return function(object) {\n var tag = getTag(object);\n if (tag == mapTag) {\n return mapToArray(object);\n }\n if (tag == setTag) {\n return setToPairs(object);\n }\n return baseToPairs(object, keysFunc(object));\n };\n }\n\n /**\n * Creates a function that either curries or invokes `func` with optional\n * `this` binding and partially applied arguments.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags.\n * 1 - `_.bind`\n * 2 - `_.bindKey`\n * 4 - `_.curry` or `_.curryRight` of a bound function\n * 8 - `_.curry`\n * 16 - `_.curryRight`\n * 32 - `_.partial`\n * 64 - `_.partialRight`\n * 128 - `_.rearg`\n * 256 - `_.ary`\n * 512 - `_.flip`\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to be partially applied.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n if (!isBindKey && typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var length = partials ? partials.length : 0;\n if (!length) {\n bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n partials = holders = undefined;\n }\n ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n arity = arity === undefined ? arity : toInteger(arity);\n length -= holders ? holders.length : 0;\n\n if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n var partialsRight = partials,\n holdersRight = holders;\n\n partials = holders = undefined;\n }\n var data = isBindKey ? undefined : getData(func);\n\n var newData = [\n func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n argPos, ary, arity\n ];\n\n if (data) {\n mergeData(newData, data);\n }\n func = newData[0];\n bitmask = newData[1];\n thisArg = newData[2];\n partials = newData[3];\n holders = newData[4];\n arity = newData[9] = newData[9] === undefined\n ? (isBindKey ? 0 : func.length)\n : nativeMax(newData[9] - length, 0);\n\n if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n }\n if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n var result = createBind(func, bitmask, thisArg);\n } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n result = createCurry(func, bitmask, arity);\n } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n result = createPartial(func, bitmask, thisArg, partials);\n } else {\n result = createHybrid.apply(undefined, newData);\n }\n var setter = data ? baseSetData : setData;\n return setWrapToString(setter(result, newData), func, bitmask);\n }\n\n /**\n * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n * of source objects to the destination object for all destination properties\n * that resolve to `undefined`.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to assign.\n * @param {Object} object The parent object of `objValue`.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsAssignIn(objValue, srcValue, key, object) {\n if (objValue === undefined ||\n (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n return srcValue;\n }\n return objValue;\n }\n\n /**\n * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n * objects into destination objects that are passed thru.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to merge.\n * @param {Object} object The parent object of `objValue`.\n * @param {Object} source The parent object of `srcValue`.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n if (isObject(objValue) && isObject(srcValue)) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, objValue);\n baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n stack['delete'](srcValue);\n }\n return objValue;\n }\n\n /**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\n function customOmitClone(value) {\n return isPlainObject(value) ? undefined : value;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\n function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n function flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n }\n\n /**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n }\n\n /**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n }\n\n /**\n * Gets metadata for `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {*} Returns the metadata for `func`.\n */\n var getData = !metaMap ? noop : function(func) {\n return metaMap.get(func);\n };\n\n /**\n * Gets the name of `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {string} Returns the function name.\n */\n function getFuncName(func) {\n var result = (func.name + ''),\n array = realNames[result],\n length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n while (length--) {\n var data = array[length],\n otherFunc = data.func;\n if (otherFunc == null || otherFunc == func) {\n return data.name;\n }\n }\n return result;\n }\n\n /**\n * Gets the argument placeholder value for `func`.\n *\n * @private\n * @param {Function} func The function to inspect.\n * @returns {*} Returns the placeholder value.\n */\n function getHolder(func) {\n var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n return object.placeholder;\n }\n\n /**\n * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n * this function returns the custom method, otherwise it returns `baseIteratee`.\n * If arguments are provided, the chosen function is invoked with them and\n * its result is returned.\n *\n * @private\n * @param {*} [value] The value to convert to an iteratee.\n * @param {number} [arity] The arity of the created iteratee.\n * @returns {Function} Returns the chosen function or its result.\n */\n function getIteratee() {\n var result = lodash.iteratee || iteratee;\n result = result === iteratee ? baseIteratee : result;\n return arguments.length ? result(arguments[0], arguments[1]) : result;\n }\n\n /**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\n function getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n }\n\n /**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\n function getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n }\n\n /**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\n function getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n }\n\n /**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\n function getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n }\n\n /**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n };\n\n /**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n };\n\n /**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n var getTag = baseGetTag;\n\n // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n }\n\n /**\n * Gets the view, applying any `transforms` to the `start` and `end` positions.\n *\n * @private\n * @param {number} start The start of the view.\n * @param {number} end The end of the view.\n * @param {Array} transforms The transformations to apply to the view.\n * @returns {Object} Returns an object containing the `start` and `end`\n * positions of the view.\n */\n function getView(start, end, transforms) {\n var index = -1,\n length = transforms.length;\n\n while (++index < length) {\n var data = transforms[index],\n size = data.size;\n\n switch (data.type) {\n case 'drop': start += size; break;\n case 'dropRight': end -= size; break;\n case 'take': end = nativeMin(end, start + size); break;\n case 'takeRight': start = nativeMax(start, end - size); break;\n }\n }\n return { 'start': start, 'end': end };\n }\n\n /**\n * Extracts wrapper details from the `source` body comment.\n *\n * @private\n * @param {string} source The source to inspect.\n * @returns {Array} Returns the wrapper details.\n */\n function getWrapDetails(source) {\n var match = source.match(reWrapDetails);\n return match ? match[1].split(reSplitDetails) : [];\n }\n\n /**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\n function hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n }\n\n /**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\n function initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n }\n\n /**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n }\n\n /**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n }\n\n /**\n * Inserts wrapper `details` in a comment at the top of the `source` body.\n *\n * @private\n * @param {string} source The source to modify.\n * @returns {Array} details The details to insert.\n * @returns {string} Returns the modified source.\n */\n function insertWrapDetails(source, details) {\n var length = details.length;\n if (!length) {\n return source;\n }\n var lastIndex = length - 1;\n details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n details = details.join(length > 2 ? ', ' : ' ');\n return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n }\n\n /**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\n function isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n }\n\n /**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\n function isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n }\n\n /**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\n function isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n }\n\n /**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\n function isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n }\n\n /**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\n function isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n }\n\n /**\n * Checks if `func` has a lazy counterpart.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n * else `false`.\n */\n function isLaziable(func) {\n var funcName = getFuncName(func),\n other = lodash[funcName];\n\n if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n return false;\n }\n if (func === other) {\n return true;\n }\n var data = getData(other);\n return !!data && func === data[0];\n }\n\n /**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\n function isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n }\n\n /**\n * Checks if `func` is capable of being masked.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n */\n var isMaskable = coreJsData ? isFunction : stubFalse;\n\n /**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\n function isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n }\n\n /**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\n function isStrictComparable(value) {\n return value === value && !isObject(value);\n }\n\n /**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n }\n\n /**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\n function memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n }\n\n /**\n * Merges the function metadata of `source` into `data`.\n *\n * Merging metadata reduces the number of wrappers used to invoke a function.\n * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n * may be applied regardless of execution order. Methods like `_.ary` and\n * `_.rearg` modify function arguments, making the order in which they are\n * executed important, preventing the merging of metadata. However, we make\n * an exception for a safe combined case where curried functions have `_.ary`\n * and or `_.rearg` applied.\n *\n * @private\n * @param {Array} data The destination metadata.\n * @param {Array} source The source metadata.\n * @returns {Array} Returns `data`.\n */\n function mergeData(data, source) {\n var bitmask = data[1],\n srcBitmask = source[1],\n newBitmask = bitmask | srcBitmask,\n isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n var isCombo =\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n // Exit early if metadata can't be merged.\n if (!(isCommon || isCombo)) {\n return data;\n }\n // Use source `thisArg` if available.\n if (srcBitmask & WRAP_BIND_FLAG) {\n data[2] = source[2];\n // Set when currying a bound function.\n newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n }\n // Compose partial arguments.\n var value = source[3];\n if (value) {\n var partials = data[3];\n data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n }\n // Compose partial right arguments.\n value = source[5];\n if (value) {\n partials = data[5];\n data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n }\n // Use source `argPos` if available.\n value = source[7];\n if (value) {\n data[7] = value;\n }\n // Use source `ary` if it's smaller.\n if (srcBitmask & WRAP_ARY_FLAG) {\n data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n }\n // Use source `arity` if one is not provided.\n if (data[9] == null) {\n data[9] = source[9];\n }\n // Use source `func` and merge bitmasks.\n data[0] = source[0];\n data[1] = newBitmask;\n\n return data;\n }\n\n /**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\n function objectToString(value) {\n return nativeObjectToString.call(value);\n }\n\n /**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\n function overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n }\n\n /**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\n function parent(object, path) {\n return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n }\n\n /**\n * Reorder `array` according to the specified indexes where the element at\n * the first index is assigned as the first element, the element at\n * the second index is assigned as the second element, and so on.\n *\n * @private\n * @param {Array} array The array to reorder.\n * @param {Array} indexes The arranged array indexes.\n * @returns {Array} Returns `array`.\n */\n function reorder(array, indexes) {\n var arrLength = array.length,\n length = nativeMin(indexes.length, arrLength),\n oldArray = copyArray(array);\n\n while (length--) {\n var index = indexes[length];\n array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n }\n return array;\n }\n\n /**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n }\n\n /**\n * Sets metadata for `func`.\n *\n * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n * period of time, it will trip its breaker and transition to an identity\n * function to avoid garbage collection pauses in V8. See\n * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n * for more details.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var setData = shortOut(baseSetData);\n\n /**\n * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n var setTimeout = ctxSetTimeout || function(func, wait) {\n return root.setTimeout(func, wait);\n };\n\n /**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var setToString = shortOut(baseSetToString);\n\n /**\n * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n * with wrapper details in a comment at the top of the source body.\n *\n * @private\n * @param {Function} wrapper The function to modify.\n * @param {Function} reference The reference function.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Function} Returns `wrapper`.\n */\n function setWrapToString(wrapper, reference, bitmask) {\n var source = (reference + '');\n return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n }\n\n /**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\n function shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n }\n\n /**\n * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @param {number} [size=array.length] The size of `array`.\n * @returns {Array} Returns `array`.\n */\n function shuffleSelf(array, size) {\n var index = -1,\n length = array.length,\n lastIndex = length - 1;\n\n size = size === undefined ? length : size;\n while (++index < size) {\n var rand = baseRandom(index, lastIndex),\n value = array[rand];\n\n array[rand] = array[index];\n array[index] = value;\n }\n array.length = size;\n return array;\n }\n\n /**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\n var stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n });\n\n /**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\n function toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\n function toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n }\n\n /**\n * Updates wrapper `details` based on `bitmask` flags.\n *\n * @private\n * @returns {Array} details The details to modify.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Array} Returns `details`.\n */\n function updateWrapDetails(details, bitmask) {\n arrayEach(wrapFlags, function(pair) {\n var value = '_.' + pair[0];\n if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n details.push(value);\n }\n });\n return details.sort();\n }\n\n /**\n * Creates a clone of `wrapper`.\n *\n * @private\n * @param {Object} wrapper The wrapper to clone.\n * @returns {Object} Returns the cloned wrapper.\n */\n function wrapperClone(wrapper) {\n if (wrapper instanceof LazyWrapper) {\n return wrapper.clone();\n }\n var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n result.__actions__ = copyArray(wrapper.__actions__);\n result.__index__ = wrapper.__index__;\n result.__values__ = wrapper.__values__;\n return result;\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of elements split into groups the length of `size`.\n * If `array` can't be split evenly, the final chunk will be the remaining\n * elements.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to process.\n * @param {number} [size=1] The length of each chunk\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the new array of chunks.\n * @example\n *\n * _.chunk(['a', 'b', 'c', 'd'], 2);\n * // => [['a', 'b'], ['c', 'd']]\n *\n * _.chunk(['a', 'b', 'c', 'd'], 3);\n * // => [['a', 'b', 'c'], ['d']]\n */\n function chunk(array, size, guard) {\n if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\n size = 1;\n } else {\n size = nativeMax(toInteger(size), 0);\n }\n var length = array == null ? 0 : array.length;\n if (!length || size < 1) {\n return [];\n }\n var index = 0,\n resIndex = 0,\n result = Array(nativeCeil(length / size));\n\n while (index < length) {\n result[resIndex++] = baseSlice(array, index, (index += size));\n }\n return result;\n }\n\n /**\n * Creates an array with all falsey values removed. The values `false`, `null`,\n * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to compact.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.compact([0, 1, false, 2, '', 3]);\n * // => [1, 2, 3]\n */\n function compact(array) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * Creates a new array concatenating `array` with any additional arrays\n * and/or values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to concatenate.\n * @param {...*} [values] The values to concatenate.\n * @returns {Array} Returns the new concatenated array.\n * @example\n *\n * var array = [1];\n * var other = _.concat(array, 2, [3], [[4]]);\n *\n * console.log(other);\n * // => [1, 2, 3, [4]]\n *\n * console.log(array);\n * // => [1]\n */\n function concat() {\n var length = arguments.length;\n if (!length) {\n return [];\n }\n var args = Array(length - 1),\n array = arguments[0],\n index = length;\n\n while (index--) {\n args[index - 1] = arguments[index];\n }\n return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n }\n\n /**\n * Creates an array of `array` values not included in the other given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * **Note:** Unlike `_.pullAll`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.without, _.xor\n * @example\n *\n * _.difference([2, 1], [2, 3]);\n * // => [1]\n */\n var difference = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `iteratee` which\n * is invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var differenceBy = baseRest(function(array, values) {\n var iteratee = last(values);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `comparator`\n * which is invoked to compare elements of `array` to `values`. The order and\n * references of result values are determined by the first array. The comparator\n * is invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n *\n * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }]\n */\n var differenceWith = baseRest(function(array, values) {\n var comparator = last(values);\n if (isArrayLikeObject(comparator)) {\n comparator = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n : [];\n });\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.drop([1, 2, 3]);\n * // => [2, 3]\n *\n * _.drop([1, 2, 3], 2);\n * // => [3]\n *\n * _.drop([1, 2, 3], 5);\n * // => []\n *\n * _.drop([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function drop(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.dropRight([1, 2, 3]);\n * // => [1, 2]\n *\n * _.dropRight([1, 2, 3], 2);\n * // => [1]\n *\n * _.dropRight([1, 2, 3], 5);\n * // => []\n *\n * _.dropRight([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function dropRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the end.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.dropRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropRightWhile(users, ['active', false]);\n * // => objects for ['barney']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropRightWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the beginning.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.dropWhile(users, function(o) { return !o.active; });\n * // => objects for ['pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropWhile(users, ['active', false]);\n * // => objects for ['pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true)\n : [];\n }\n\n /**\n * Fills elements of `array` with `value` from `start` up to, but not\n * including, `end`.\n *\n * **Note:** This method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Array\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.fill(array, 'a');\n * console.log(array);\n * // => ['a', 'a', 'a']\n *\n * _.fill(Array(3), 2);\n * // => [2, 2, 2]\n *\n * _.fill([4, 6, 8, 10], '*', 1, 3);\n * // => [4, '*', '*', 10]\n */\n function fill(array, value, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n start = 0;\n end = length;\n }\n return baseFill(array, value, start, end);\n }\n\n /**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\n function findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index);\n }\n\n /**\n * This method is like `_.findIndex` except that it iterates over elements\n * of `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n * // => 2\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n * // => 0\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastIndex(users, ['active', false]);\n * // => 2\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastIndex(users, 'active');\n * // => 0\n */\n function findLastIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length - 1;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = fromIndex < 0\n ? nativeMax(length + index, 0)\n : nativeMin(index, length - 1);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n }\n\n /**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\n function flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n }\n\n /**\n * Recursively flattens `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flattenDeep([1, [2, [3, [4]], 5]]);\n * // => [1, 2, 3, 4, 5]\n */\n function flattenDeep(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, INFINITY) : [];\n }\n\n /**\n * Recursively flatten `array` up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * var array = [1, [2, [3, [4]], 5]];\n *\n * _.flattenDepth(array, 1);\n * // => [1, 2, [3, [4]], 5]\n *\n * _.flattenDepth(array, 2);\n * // => [1, 2, 3, [4], 5]\n */\n function flattenDepth(array, depth) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(array, depth);\n }\n\n /**\n * The inverse of `_.toPairs`; this method returns an object composed\n * from key-value `pairs`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} pairs The key-value pairs.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.fromPairs([['a', 1], ['b', 2]]);\n * // => { 'a': 1, 'b': 2 }\n */\n function fromPairs(pairs) {\n var index = -1,\n length = pairs == null ? 0 : pairs.length,\n result = {};\n\n while (++index < length) {\n var pair = pairs[index];\n result[pair[0]] = pair[1];\n }\n return result;\n }\n\n /**\n * Gets the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias first\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the first element of `array`.\n * @example\n *\n * _.head([1, 2, 3]);\n * // => 1\n *\n * _.head([]);\n * // => undefined\n */\n function head(array) {\n return (array && array.length) ? array[0] : undefined;\n }\n\n /**\n * Gets the index at which the first occurrence of `value` is found in `array`\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. If `fromIndex` is negative, it's used as the\n * offset from the end of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.indexOf([1, 2, 1, 2], 2);\n * // => 1\n *\n * // Search from the `fromIndex`.\n * _.indexOf([1, 2, 1, 2], 2, 2);\n * // => 3\n */\n function indexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseIndexOf(array, value, index);\n }\n\n /**\n * Gets all but the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.initial([1, 2, 3]);\n * // => [1, 2]\n */\n function initial(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 0, -1) : [];\n }\n\n /**\n * Creates an array of unique values that are included in all given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersection([2, 1], [2, 3]);\n * // => [2]\n */\n var intersection = baseRest(function(arrays) {\n var mapped = arrayMap(arrays, castArrayLikeObject);\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped)\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `iteratee`\n * which is invoked for each element of each `arrays` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [2.1]\n *\n * // The `_.property` iteratee shorthand.\n * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }]\n */\n var intersectionBy = baseRest(function(arrays) {\n var iteratee = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n if (iteratee === last(mapped)) {\n iteratee = undefined;\n } else {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `comparator`\n * which is invoked to compare elements of `arrays`. The order and references\n * of result values are determined by the first array. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.intersectionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }]\n */\n var intersectionWith = baseRest(function(arrays) {\n var comparator = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n comparator = typeof comparator == 'function' ? comparator : undefined;\n if (comparator) {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, undefined, comparator)\n : [];\n });\n\n /**\n * Converts all elements in `array` into a string separated by `separator`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to convert.\n * @param {string} [separator=','] The element separator.\n * @returns {string} Returns the joined string.\n * @example\n *\n * _.join(['a', 'b', 'c'], '~');\n * // => 'a~b~c'\n */\n function join(array, separator) {\n return array == null ? '' : nativeJoin.call(array, separator);\n }\n\n /**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\n function last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n }\n\n /**\n * This method is like `_.indexOf` except that it iterates over elements of\n * `array` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.lastIndexOf([1, 2, 1, 2], 2);\n * // => 3\n *\n * // Search from the `fromIndex`.\n * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n * // => 1\n */\n function lastIndexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n }\n return value === value\n ? strictLastIndexOf(array, value, index)\n : baseFindIndex(array, baseIsNaN, index, true);\n }\n\n /**\n * Gets the element at index `n` of `array`. If `n` is negative, the nth\n * element from the end is returned.\n *\n * @static\n * @memberOf _\n * @since 4.11.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=0] The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n *\n * _.nth(array, 1);\n * // => 'b'\n *\n * _.nth(array, -2);\n * // => 'c';\n */\n function nth(array, n) {\n return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\n }\n\n /**\n * Removes all given values from `array` using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n * to remove elements from an array by predicate.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...*} [values] The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pull(array, 'a', 'c');\n * console.log(array);\n * // => ['b', 'b']\n */\n var pull = baseRest(pullAll);\n\n /**\n * This method is like `_.pull` except that it accepts an array of values to remove.\n *\n * **Note:** Unlike `_.difference`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pullAll(array, ['a', 'c']);\n * console.log(array);\n * // => ['b', 'b']\n */\n function pullAll(array, values) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values)\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `iteratee` which is\n * invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The iteratee is invoked with one argument: (value).\n *\n * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n *\n * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n * console.log(array);\n * // => [{ 'x': 2 }]\n */\n function pullAllBy(array, values, iteratee) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, getIteratee(iteratee, 2))\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `comparator` which\n * is invoked to compare elements of `array` to `values`. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n *\n * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n * console.log(array);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n */\n function pullAllWith(array, values, comparator) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, undefined, comparator)\n : array;\n }\n\n /**\n * Removes elements from `array` corresponding to `indexes` and returns an\n * array of removed elements.\n *\n * **Note:** Unlike `_.at`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n * var pulled = _.pullAt(array, [1, 3]);\n *\n * console.log(array);\n * // => ['a', 'c']\n *\n * console.log(pulled);\n * // => ['b', 'd']\n */\n var pullAt = flatRest(function(array, indexes) {\n var length = array == null ? 0 : array.length,\n result = baseAt(array, indexes);\n\n basePullAt(array, arrayMap(indexes, function(index) {\n return isIndex(index, length) ? +index : index;\n }).sort(compareAscending));\n\n return result;\n });\n\n /**\n * Removes all elements from `array` that `predicate` returns truthy for\n * and returns an array of the removed elements. The predicate is invoked\n * with three arguments: (value, index, array).\n *\n * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n * to pull elements from an array by value.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = [1, 2, 3, 4];\n * var evens = _.remove(array, function(n) {\n * return n % 2 == 0;\n * });\n *\n * console.log(array);\n * // => [1, 3]\n *\n * console.log(evens);\n * // => [2, 4]\n */\n function remove(array, predicate) {\n var result = [];\n if (!(array && array.length)) {\n return result;\n }\n var index = -1,\n indexes = [],\n length = array.length;\n\n predicate = getIteratee(predicate, 3);\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result.push(value);\n indexes.push(index);\n }\n }\n basePullAt(array, indexes);\n return result;\n }\n\n /**\n * Reverses `array` so that the first element becomes the last, the second\n * element becomes the second to last, and so on.\n *\n * **Note:** This method mutates `array` and is based on\n * [`Array#reverse`](https://mdn.io/Array/reverse).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.reverse(array);\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function reverse(array) {\n return array == null ? array : nativeReverse.call(array);\n }\n\n /**\n * Creates a slice of `array` from `start` up to, but not including, `end`.\n *\n * **Note:** This method is used instead of\n * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n * returned.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function slice(array, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n start = 0;\n end = length;\n }\n else {\n start = start == null ? 0 : toInteger(start);\n end = end === undefined ? length : toInteger(end);\n }\n return baseSlice(array, start, end);\n }\n\n /**\n * Uses a binary search to determine the lowest index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedIndex([30, 50], 40);\n * // => 1\n */\n function sortedIndex(array, value) {\n return baseSortedIndex(array, value);\n }\n\n /**\n * This method is like `_.sortedIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n * // => 0\n */\n function sortedIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n }\n\n /**\n * This method is like `_.indexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n * // => 1\n */\n function sortedIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value);\n if (index < length && eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.sortedIndex` except that it returns the highest\n * index at which `value` should be inserted into `array` in order to\n * maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n * // => 4\n */\n function sortedLastIndex(array, value) {\n return baseSortedIndex(array, value, true);\n }\n\n /**\n * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 1\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n * // => 1\n */\n function sortedLastIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n }\n\n /**\n * This method is like `_.lastIndexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n * // => 3\n */\n function sortedLastIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value, true) - 1;\n if (eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.uniq` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniq([1, 1, 2]);\n * // => [1, 2]\n */\n function sortedUniq(array) {\n return (array && array.length)\n ? baseSortedUniq(array)\n : [];\n }\n\n /**\n * This method is like `_.uniqBy` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n * // => [1.1, 2.3]\n */\n function sortedUniqBy(array, iteratee) {\n return (array && array.length)\n ? baseSortedUniq(array, getIteratee(iteratee, 2))\n : [];\n }\n\n /**\n * Gets all but the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.tail([1, 2, 3]);\n * // => [2, 3]\n */\n function tail(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 1, length) : [];\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.take([1, 2, 3]);\n * // => [1]\n *\n * _.take([1, 2, 3], 2);\n * // => [1, 2]\n *\n * _.take([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.take([1, 2, 3], 0);\n * // => []\n */\n function take(array, n, guard) {\n if (!(array && array.length)) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.takeRight([1, 2, 3]);\n * // => [3]\n *\n * _.takeRight([1, 2, 3], 2);\n * // => [2, 3]\n *\n * _.takeRight([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.takeRight([1, 2, 3], 0);\n * // => []\n */\n function takeRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with elements taken from the end. Elements are\n * taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.takeRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeRightWhile(users, ['active', false]);\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeRightWhile(users, 'active');\n * // => []\n */\n function takeRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), false, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` with elements taken from the beginning. Elements\n * are taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.takeWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeWhile(users, ['active', false]);\n * // => objects for ['barney', 'fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeWhile(users, 'active');\n * // => []\n */\n function takeWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3))\n : [];\n }\n\n /**\n * Creates an array of unique values, in order, from all given arrays using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.union([2], [1, 2]);\n * // => [2, 1]\n */\n var union = baseRest(function(arrays) {\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n });\n\n /**\n * This method is like `_.union` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which uniqueness is computed. Result values are chosen from the first\n * array in which the value occurs. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n var unionBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.union` except that it accepts `comparator` which\n * is invoked to compare elements of `arrays`. Result values are chosen from\n * the first array in which the value occurs. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.unionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var unionWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n });\n\n /**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\n function uniq(array) {\n return (array && array.length) ? baseUniq(array) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * uniqueness is computed. The order of result values is determined by the\n * order they occur in the array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n function uniqBy(array, iteratee) {\n return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `comparator` which\n * is invoked to compare elements of `array`. The order of result values is\n * determined by the order they occur in the array.The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.uniqWith(objects, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n */\n function uniqWith(array, comparator) {\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n }\n\n /**\n * This method is like `_.zip` except that it accepts an array of grouped\n * elements and creates an array regrouping the elements to their pre-zip\n * configuration.\n *\n * @static\n * @memberOf _\n * @since 1.2.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n *\n * _.unzip(zipped);\n * // => [['a', 'b'], [1, 2], [true, false]]\n */\n function unzip(array) {\n if (!(array && array.length)) {\n return [];\n }\n var length = 0;\n array = arrayFilter(array, function(group) {\n if (isArrayLikeObject(group)) {\n length = nativeMax(group.length, length);\n return true;\n }\n });\n return baseTimes(length, function(index) {\n return arrayMap(array, baseProperty(index));\n });\n }\n\n /**\n * This method is like `_.unzip` except that it accepts `iteratee` to specify\n * how regrouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * regrouped values.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n * // => [[1, 10, 100], [2, 20, 200]]\n *\n * _.unzipWith(zipped, _.add);\n * // => [3, 30, 300]\n */\n function unzipWith(array, iteratee) {\n if (!(array && array.length)) {\n return [];\n }\n var result = unzip(array);\n if (iteratee == null) {\n return result;\n }\n return arrayMap(result, function(group) {\n return apply(iteratee, undefined, group);\n });\n }\n\n /**\n * Creates an array excluding all given values using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.pull`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...*} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.xor\n * @example\n *\n * _.without([2, 1, 2, 3], 1, 2);\n * // => [3]\n */\n var without = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, values)\n : [];\n });\n\n /**\n * Creates an array of unique values that is the\n * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n * of the given arrays. The order of result values is determined by the order\n * they occur in the arrays.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.without\n * @example\n *\n * _.xor([2, 1], [2, 3]);\n * // => [1, 3]\n */\n var xor = baseRest(function(arrays) {\n return baseXor(arrayFilter(arrays, isArrayLikeObject));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which by which they're compared. The order of result values is determined\n * by the order they occur in the arrays. The iteratee is invoked with one\n * argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2, 3.4]\n *\n * // The `_.property` iteratee shorthand.\n * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var xorBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `comparator` which is\n * invoked to compare elements of `arrays`. The order of result values is\n * determined by the order they occur in the arrays. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.xorWith(objects, others, _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var xorWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n });\n\n /**\n * Creates an array of grouped elements, the first of which contains the\n * first elements of the given arrays, the second of which contains the\n * second elements of the given arrays, and so on.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n */\n var zip = baseRest(unzip);\n\n /**\n * This method is like `_.fromPairs` except that it accepts two arrays,\n * one of property identifiers and one of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 0.4.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObject(['a', 'b'], [1, 2]);\n * // => { 'a': 1, 'b': 2 }\n */\n function zipObject(props, values) {\n return baseZipObject(props || [], values || [], assignValue);\n }\n\n /**\n * This method is like `_.zipObject` except that it supports property paths.\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n */\n function zipObjectDeep(props, values) {\n return baseZipObject(props || [], values || [], baseSet);\n }\n\n /**\n * This method is like `_.zip` except that it accepts `iteratee` to specify\n * how grouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * grouped values.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n * return a + b + c;\n * });\n * // => [111, 222]\n */\n var zipWith = baseRest(function(arrays) {\n var length = arrays.length,\n iteratee = length > 1 ? arrays[length - 1] : undefined;\n\n iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n return unzipWith(arrays, iteratee);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n * chain sequences enabled. The result of such sequences must be unwrapped\n * with `_#value`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Seq\n * @param {*} value The value to wrap.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'pebbles', 'age': 1 }\n * ];\n *\n * var youngest = _\n * .chain(users)\n * .sortBy('age')\n * .map(function(o) {\n * return o.user + ' is ' + o.age;\n * })\n * .head()\n * .value();\n * // => 'pebbles is 1'\n */\n function chain(value) {\n var result = lodash(value);\n result.__chain__ = true;\n return result;\n }\n\n /**\n * This method invokes `interceptor` and returns `value`. The interceptor\n * is invoked with one argument; (value). The purpose of this method is to\n * \"tap into\" a method chain sequence in order to modify intermediate results.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns `value`.\n * @example\n *\n * _([1, 2, 3])\n * .tap(function(array) {\n * // Mutate input array.\n * array.pop();\n * })\n * .reverse()\n * .value();\n * // => [2, 1]\n */\n function tap(value, interceptor) {\n interceptor(value);\n return value;\n }\n\n /**\n * This method is like `_.tap` except that it returns the result of `interceptor`.\n * The purpose of this method is to \"pass thru\" values replacing intermediate\n * results in a method chain sequence.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns the result of `interceptor`.\n * @example\n *\n * _(' abc ')\n * .chain()\n * .trim()\n * .thru(function(value) {\n * return [value];\n * })\n * .value();\n * // => ['abc']\n */\n function thru(value, interceptor) {\n return interceptor(value);\n }\n\n /**\n * This method is the wrapper version of `_.at`.\n *\n * @name at\n * @memberOf _\n * @since 1.0.0\n * @category Seq\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _(object).at(['a[0].b.c', 'a[1]']).value();\n * // => [3, 4]\n */\n var wrapperAt = flatRest(function(paths) {\n var length = paths.length,\n start = length ? paths[0] : 0,\n value = this.__wrapped__,\n interceptor = function(object) { return baseAt(object, paths); };\n\n if (length > 1 || this.__actions__.length ||\n !(value instanceof LazyWrapper) || !isIndex(start)) {\n return this.thru(interceptor);\n }\n value = value.slice(start, +start + (length ? 1 : 0));\n value.__actions__.push({\n 'func': thru,\n 'args': [interceptor],\n 'thisArg': undefined\n });\n return new LodashWrapper(value, this.__chain__).thru(function(array) {\n if (length && !array.length) {\n array.push(undefined);\n }\n return array;\n });\n });\n\n /**\n * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n *\n * @name chain\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 }\n * ];\n *\n * // A sequence without explicit chaining.\n * _(users).head();\n * // => { 'user': 'barney', 'age': 36 }\n *\n * // A sequence with explicit chaining.\n * _(users)\n * .chain()\n * .head()\n * .pick('user')\n * .value();\n * // => { 'user': 'barney' }\n */\n function wrapperChain() {\n return chain(this);\n }\n\n /**\n * Executes the chain sequence and returns the wrapped result.\n *\n * @name commit\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2];\n * var wrapped = _(array).push(3);\n *\n * console.log(array);\n * // => [1, 2]\n *\n * wrapped = wrapped.commit();\n * console.log(array);\n * // => [1, 2, 3]\n *\n * wrapped.last();\n * // => 3\n *\n * console.log(array);\n * // => [1, 2, 3]\n */\n function wrapperCommit() {\n return new LodashWrapper(this.value(), this.__chain__);\n }\n\n /**\n * Gets the next value on a wrapped object following the\n * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n *\n * @name next\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the next iterator value.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 1 }\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 2 }\n *\n * wrapped.next();\n * // => { 'done': true, 'value': undefined }\n */\n function wrapperNext() {\n if (this.__values__ === undefined) {\n this.__values__ = toArray(this.value());\n }\n var done = this.__index__ >= this.__values__.length,\n value = done ? undefined : this.__values__[this.__index__++];\n\n return { 'done': done, 'value': value };\n }\n\n /**\n * Enables the wrapper to be iterable.\n *\n * @name Symbol.iterator\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the wrapper object.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped[Symbol.iterator]() === wrapped;\n * // => true\n *\n * Array.from(wrapped);\n * // => [1, 2]\n */\n function wrapperToIterator() {\n return this;\n }\n\n /**\n * Creates a clone of the chain sequence planting `value` as the wrapped value.\n *\n * @name plant\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @param {*} value The value to plant.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2]).map(square);\n * var other = wrapped.plant([3, 4]);\n *\n * other.value();\n * // => [9, 16]\n *\n * wrapped.value();\n * // => [1, 4]\n */\n function wrapperPlant(value) {\n var result,\n parent = this;\n\n while (parent instanceof baseLodash) {\n var clone = wrapperClone(parent);\n clone.__index__ = 0;\n clone.__values__ = undefined;\n if (result) {\n previous.__wrapped__ = clone;\n } else {\n result = clone;\n }\n var previous = clone;\n parent = parent.__wrapped__;\n }\n previous.__wrapped__ = value;\n return result;\n }\n\n /**\n * This method is the wrapper version of `_.reverse`.\n *\n * **Note:** This method mutates the wrapped array.\n *\n * @name reverse\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _(array).reverse().value()\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function wrapperReverse() {\n var value = this.__wrapped__;\n if (value instanceof LazyWrapper) {\n var wrapped = value;\n if (this.__actions__.length) {\n wrapped = new LazyWrapper(this);\n }\n wrapped = wrapped.reverse();\n wrapped.__actions__.push({\n 'func': thru,\n 'args': [reverse],\n 'thisArg': undefined\n });\n return new LodashWrapper(wrapped, this.__chain__);\n }\n return this.thru(reverse);\n }\n\n /**\n * Executes the chain sequence to resolve the unwrapped value.\n *\n * @name value\n * @memberOf _\n * @since 0.1.0\n * @alias toJSON, valueOf\n * @category Seq\n * @returns {*} Returns the resolved unwrapped value.\n * @example\n *\n * _([1, 2, 3]).value();\n * // => [1, 2, 3]\n */\n function wrapperValue() {\n return baseWrapperValue(this.__wrapped__, this.__actions__);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the number of times the key was returned by `iteratee`. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.countBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': 1, '6': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.countBy(['one', 'two', 'three'], 'length');\n * // => { '3': 2, '5': 1 }\n */\n var countBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n ++result[key];\n } else {\n baseAssignValue(result, key, 1);\n }\n });\n\n /**\n * Checks if `predicate` returns truthy for **all** elements of `collection`.\n * Iteration is stopped once `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * **Note:** This method returns `true` for\n * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n * elements of empty collections.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n * @example\n *\n * _.every([true, 1, null, 'yes'], Boolean);\n * // => false\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.every(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.every(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.every(users, 'active');\n * // => false\n */\n function every(collection, predicate, guard) {\n var func = isArray(collection) ? arrayEvery : baseEvery;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `_.remove`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n */\n function filter(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\n var find = createFind(findIndex);\n\n /**\n * This method is like `_.find` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=collection.length-1] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * _.findLast([1, 2, 3, 4], function(n) {\n * return n % 2 == 1;\n * });\n * // => 3\n */\n var findLast = createFind(findLastIndex);\n\n /**\n * Creates a flattened array of values by running each element in `collection`\n * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n * with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [n, n];\n * }\n *\n * _.flatMap([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMap(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), 1);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDeep([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMapDeep(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), INFINITY);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDepth([1, 2], duplicate, 2);\n * // => [[1, 1], [2, 2]]\n */\n function flatMapDepth(collection, iteratee, depth) {\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(map(collection, iteratee), depth);\n }\n\n /**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forEach` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @alias eachRight\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEach\n * @example\n *\n * _.forEachRight([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `2` then `1`.\n */\n function forEachRight(collection, iteratee) {\n var func = isArray(collection) ? arrayEachRight : baseEachRight;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The order of grouped values\n * is determined by the order they occur in `collection`. The corresponding\n * value of each key is an array of elements responsible for generating the\n * key. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': [4.2], '6': [6.1, 6.3] }\n *\n * // The `_.property` iteratee shorthand.\n * _.groupBy(['one', 'two', 'three'], 'length');\n * // => { '3': ['one', 'two'], '5': ['three'] }\n */\n var groupBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n result[key].push(value);\n } else {\n baseAssignValue(result, key, [value]);\n }\n });\n\n /**\n * Checks if `value` is in `collection`. If `collection` is a string, it's\n * checked for a substring of `value`, otherwise\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * is used for equality comparisons. If `fromIndex` is negative, it's used as\n * the offset from the end of `collection`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n * @example\n *\n * _.includes([1, 2, 3], 1);\n * // => true\n *\n * _.includes([1, 2, 3], 1, 2);\n * // => false\n *\n * _.includes({ 'a': 1, 'b': 2 }, 1);\n * // => true\n *\n * _.includes('abcd', 'bc');\n * // => true\n */\n function includes(collection, value, fromIndex, guard) {\n collection = isArrayLike(collection) ? collection : values(collection);\n fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n var length = collection.length;\n if (fromIndex < 0) {\n fromIndex = nativeMax(length + fromIndex, 0);\n }\n return isString(collection)\n ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n }\n\n /**\n * Invokes the method at `path` of each element in `collection`, returning\n * an array of the results of each invoked method. Any additional arguments\n * are provided to each invoked method. If `path` is a function, it's invoked\n * for, and `this` bound to, each element in `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array|Function|string} path The path of the method to invoke or\n * the function invoked per iteration.\n * @param {...*} [args] The arguments to invoke each method with.\n * @returns {Array} Returns the array of results.\n * @example\n *\n * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n * // => [[1, 5, 7], [1, 2, 3]]\n *\n * _.invokeMap([123, 456], String.prototype.split, '');\n * // => [['1', '2', '3'], ['4', '5', '6']]\n */\n var invokeMap = baseRest(function(collection, path, args) {\n var index = -1,\n isFunc = typeof path == 'function',\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value) {\n result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n });\n return result;\n });\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the last element responsible for generating the key. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * var array = [\n * { 'dir': 'left', 'code': 97 },\n * { 'dir': 'right', 'code': 100 }\n * ];\n *\n * _.keyBy(array, function(o) {\n * return String.fromCharCode(o.code);\n * });\n * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n *\n * _.keyBy(array, 'dir');\n * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n */\n var keyBy = createAggregator(function(result, value, key) {\n baseAssignValue(result, key, value);\n });\n\n /**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\n function map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.sortBy` except that it allows specifying the sort\n * orders of the iteratees to sort by. If `orders` is unspecified, all values\n * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n * descending or \"asc\" for ascending sort order of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @param {string[]} [orders] The sort orders of `iteratees`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 34 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'barney', 'age': 36 }\n * ];\n *\n * // Sort by `user` in ascending order and by `age` in descending order.\n * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n */\n function orderBy(collection, iteratees, orders, guard) {\n if (collection == null) {\n return [];\n }\n if (!isArray(iteratees)) {\n iteratees = iteratees == null ? [] : [iteratees];\n }\n orders = guard ? undefined : orders;\n if (!isArray(orders)) {\n orders = orders == null ? [] : [orders];\n }\n return baseOrderBy(collection, iteratees, orders);\n }\n\n /**\n * Creates an array of elements split into two groups, the first of which\n * contains elements `predicate` returns truthy for, the second of which\n * contains elements `predicate` returns falsey for. The predicate is\n * invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of grouped elements.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true },\n * { 'user': 'pebbles', 'age': 1, 'active': false }\n * ];\n *\n * _.partition(users, function(o) { return o.active; });\n * // => objects for [['fred'], ['barney', 'pebbles']]\n *\n * // The `_.matches` iteratee shorthand.\n * _.partition(users, { 'age': 1, 'active': false });\n * // => objects for [['pebbles'], ['barney', 'fred']]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.partition(users, ['active', false]);\n * // => objects for [['barney', 'pebbles'], ['fred']]\n *\n * // The `_.property` iteratee shorthand.\n * _.partition(users, 'active');\n * // => objects for [['fred'], ['barney', 'pebbles']]\n */\n var partition = createAggregator(function(result, value, key) {\n result[key ? 0 : 1].push(value);\n }, function() { return [[], []]; });\n\n /**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` thru `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not given, the first element of `collection` is used as the initial\n * value. The iteratee is invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n * and `sortBy`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduceRight\n * @example\n *\n * _.reduce([1, 2], function(sum, n) {\n * return sum + n;\n * }, 0);\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * return result;\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n */\n function reduce(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduce : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n }\n\n /**\n * This method is like `_.reduce` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduce\n * @example\n *\n * var array = [[0, 1], [2, 3], [4, 5]];\n *\n * _.reduceRight(array, function(flattened, other) {\n * return flattened.concat(other);\n * }, []);\n * // => [4, 5, 2, 3, 0, 1]\n */\n function reduceRight(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduceRight : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n }\n\n /**\n * The opposite of `_.filter`; this method returns the elements of `collection`\n * that `predicate` does **not** return truthy for.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.filter\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true }\n * ];\n *\n * _.reject(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.reject(users, { 'age': 40, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.reject(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.reject(users, 'active');\n * // => objects for ['barney']\n */\n function reject(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, negate(getIteratee(predicate, 3)));\n }\n\n /**\n * Gets a random element from `collection`.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n * @example\n *\n * _.sample([1, 2, 3, 4]);\n * // => 2\n */\n function sample(collection) {\n var func = isArray(collection) ? arraySample : baseSample;\n return func(collection);\n }\n\n /**\n * Gets `n` random elements at unique keys from `collection` up to the\n * size of `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @param {number} [n=1] The number of elements to sample.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the random elements.\n * @example\n *\n * _.sampleSize([1, 2, 3], 2);\n * // => [3, 1]\n *\n * _.sampleSize([1, 2, 3], 4);\n * // => [2, 3, 1]\n */\n function sampleSize(collection, n, guard) {\n if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n return func(collection, n);\n }\n\n /**\n * Creates an array of shuffled values, using a version of the\n * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n * @example\n *\n * _.shuffle([1, 2, 3, 4]);\n * // => [4, 1, 3, 2]\n */\n function shuffle(collection) {\n var func = isArray(collection) ? arrayShuffle : baseShuffle;\n return func(collection);\n }\n\n /**\n * Gets the size of `collection` by returning its length for array-like\n * values or the number of own enumerable string keyed properties for objects.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @returns {number} Returns the collection size.\n * @example\n *\n * _.size([1, 2, 3]);\n * // => 3\n *\n * _.size({ 'a': 1, 'b': 2 });\n * // => 2\n *\n * _.size('pebbles');\n * // => 7\n */\n function size(collection) {\n if (collection == null) {\n return 0;\n }\n if (isArrayLike(collection)) {\n return isString(collection) ? stringSize(collection) : collection.length;\n }\n var tag = getTag(collection);\n if (tag == mapTag || tag == setTag) {\n return collection.size;\n }\n return baseKeys(collection).length;\n }\n\n /**\n * Checks if `predicate` returns truthy for **any** element of `collection`.\n * Iteration is stopped once `predicate` returns truthy. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n * @example\n *\n * _.some([null, 0, 'yes', false], Boolean);\n * // => true\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.some(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.some(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.some(users, 'active');\n * // => true\n */\n function some(collection, predicate, guard) {\n var func = isArray(collection) ? arraySome : baseSome;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]]\n */\n var sortBy = baseRest(function(collection, iteratees) {\n if (collection == null) {\n return [];\n }\n var length = iteratees.length;\n if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n iteratees = [];\n } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n iteratees = [iteratees[0]];\n }\n return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\n var now = ctxNow || function() {\n return root.Date.now();\n };\n\n /*------------------------------------------------------------------------*/\n\n /**\n * The opposite of `_.before`; this method creates a function that invokes\n * `func` once it's called `n` or more times.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {number} n The number of calls before `func` is invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var saves = ['profile', 'settings'];\n *\n * var done = _.after(saves.length, function() {\n * console.log('done saving!');\n * });\n *\n * _.forEach(saves, function(type) {\n * asyncSave({ 'type': type, 'complete': done });\n * });\n * // => Logs 'done saving!' after the two async saves have completed.\n */\n function after(n, func) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n < 1) {\n return func.apply(this, arguments);\n }\n };\n }\n\n /**\n * Creates a function that invokes `func`, with up to `n` arguments,\n * ignoring any additional arguments.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @param {number} [n=func.length] The arity cap.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n * // => [6, 8, 10]\n */\n function ary(func, n, guard) {\n n = guard ? undefined : n;\n n = (func && n == null) ? func.length : n;\n return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n }\n\n /**\n * Creates a function that invokes `func`, with the `this` binding and arguments\n * of the created function, while it's called less than `n` times. Subsequent\n * calls to the created function return the result of the last `func` invocation.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {number} n The number of calls at which `func` is no longer invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * jQuery(element).on('click', _.before(5, addContactToList));\n * // => Allows adding up to 4 contacts to the list.\n */\n function before(n, func) {\n var result;\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n > 0) {\n result = func.apply(this, arguments);\n }\n if (n <= 1) {\n func = undefined;\n }\n return result;\n };\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of `thisArg`\n * and `partials` prepended to the arguments it receives.\n *\n * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for partially applied arguments.\n *\n * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n * property of bound functions.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * function greet(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n *\n * var object = { 'user': 'fred' };\n *\n * var bound = _.bind(greet, object, 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bind(greet, object, _, '!');\n * bound('hi');\n * // => 'hi fred!'\n */\n var bind = baseRest(function(func, thisArg, partials) {\n var bitmask = WRAP_BIND_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bind));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(func, bitmask, thisArg, partials, holders);\n });\n\n /**\n * Creates a function that invokes the method at `object[key]` with `partials`\n * prepended to the arguments it receives.\n *\n * This method differs from `_.bind` by allowing bound functions to reference\n * methods that may be redefined or don't yet exist. See\n * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n * for more details.\n *\n * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Function\n * @param {Object} object The object to invoke the method on.\n * @param {string} key The key of the method.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * var object = {\n * 'user': 'fred',\n * 'greet': function(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n * };\n *\n * var bound = _.bindKey(object, 'greet', 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * object.greet = function(greeting, punctuation) {\n * return greeting + 'ya ' + this.user + punctuation;\n * };\n *\n * bound('!');\n * // => 'hiya fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bindKey(object, 'greet', _, '!');\n * bound('hi');\n * // => 'hiya fred!'\n */\n var bindKey = baseRest(function(object, key, partials) {\n var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bindKey));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(key, bitmask, object, partials, holders);\n });\n\n /**\n * Creates a function that accepts arguments of `func` and either invokes\n * `func` returning its result, if at least `arity` number of arguments have\n * been provided, or returns a function that accepts the remaining `func`\n * arguments, and so on. The arity of `func` may be specified if `func.length`\n * is not sufficient.\n *\n * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curry(abc);\n *\n * curried(1)(2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(1)(_, 3)(2);\n * // => [1, 2, 3]\n */\n function curry(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curry.placeholder;\n return result;\n }\n\n /**\n * This method is like `_.curry` except that arguments are applied to `func`\n * in the manner of `_.partialRight` instead of `_.partial`.\n *\n * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curryRight(abc);\n *\n * curried(3)(2)(1);\n * // => [1, 2, 3]\n *\n * curried(2, 3)(1);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(3)(1, _)(2);\n * // => [1, 2, 3]\n */\n function curryRight(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curryRight.placeholder;\n return result;\n }\n\n /**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\n function debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n }\n\n /**\n * Defers invoking the `func` until the current call stack has cleared. Any\n * additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to defer.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.defer(function(text) {\n * console.log(text);\n * }, 'deferred');\n * // => Logs 'deferred' after one millisecond.\n */\n var defer = baseRest(function(func, args) {\n return baseDelay(func, 1, args);\n });\n\n /**\n * Invokes `func` after `wait` milliseconds. Any additional arguments are\n * provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.delay(function(text) {\n * console.log(text);\n * }, 1000, 'later');\n * // => Logs 'later' after one second.\n */\n var delay = baseRest(function(func, wait, args) {\n return baseDelay(func, toNumber(wait) || 0, args);\n });\n\n /**\n * Creates a function that invokes `func` with arguments reversed.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to flip arguments for.\n * @returns {Function} Returns the new flipped function.\n * @example\n *\n * var flipped = _.flip(function() {\n * return _.toArray(arguments);\n * });\n *\n * flipped('a', 'b', 'c', 'd');\n * // => ['d', 'c', 'b', 'a']\n */\n function flip(func) {\n return createWrap(func, WRAP_FLIP_FLAG);\n }\n\n /**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\n function memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n }\n\n // Expose `MapCache`.\n memoize.Cache = MapCache;\n\n /**\n * Creates a function that negates the result of the predicate `func`. The\n * `func` predicate is invoked with the `this` binding and arguments of the\n * created function.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} predicate The predicate to negate.\n * @returns {Function} Returns the new negated function.\n * @example\n *\n * function isEven(n) {\n * return n % 2 == 0;\n * }\n *\n * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n * // => [1, 3, 5]\n */\n function negate(predicate) {\n if (typeof predicate != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return function() {\n var args = arguments;\n switch (args.length) {\n case 0: return !predicate.call(this);\n case 1: return !predicate.call(this, args[0]);\n case 2: return !predicate.call(this, args[0], args[1]);\n case 3: return !predicate.call(this, args[0], args[1], args[2]);\n }\n return !predicate.apply(this, args);\n };\n }\n\n /**\n * Creates a function that is restricted to invoking `func` once. Repeat calls\n * to the function return the value of the first invocation. The `func` is\n * invoked with the `this` binding and arguments of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var initialize = _.once(createApplication);\n * initialize();\n * initialize();\n * // => `createApplication` is invoked once\n */\n function once(func) {\n return before(2, func);\n }\n\n /**\n * Creates a function that invokes `func` with its arguments transformed.\n *\n * @static\n * @since 4.0.0\n * @memberOf _\n * @category Function\n * @param {Function} func The function to wrap.\n * @param {...(Function|Function[])} [transforms=[_.identity]]\n * The argument transforms.\n * @returns {Function} Returns the new function.\n * @example\n *\n * function doubled(n) {\n * return n * 2;\n * }\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var func = _.overArgs(function(x, y) {\n * return [x, y];\n * }, [square, doubled]);\n *\n * func(9, 3);\n * // => [81, 6]\n *\n * func(10, 5);\n * // => [100, 10]\n */\n var overArgs = castRest(function(func, transforms) {\n transforms = (transforms.length == 1 && isArray(transforms[0]))\n ? arrayMap(transforms[0], baseUnary(getIteratee()))\n : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n\n var funcsLength = transforms.length;\n return baseRest(function(args) {\n var index = -1,\n length = nativeMin(args.length, funcsLength);\n\n while (++index < length) {\n args[index] = transforms[index].call(this, args[index]);\n }\n return apply(func, this, args);\n });\n });\n\n /**\n * Creates a function that invokes `func` with `partials` prepended to the\n * arguments it receives. This method is like `_.bind` except it does **not**\n * alter the `this` binding.\n *\n * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 0.2.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var sayHelloTo = _.partial(greet, 'hello');\n * sayHelloTo('fred');\n * // => 'hello fred'\n *\n * // Partially applied with placeholders.\n * var greetFred = _.partial(greet, _, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n */\n var partial = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partial));\n return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n });\n\n /**\n * This method is like `_.partial` except that partially applied arguments\n * are appended to the arguments it receives.\n *\n * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var greetFred = _.partialRight(greet, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n *\n * // Partially applied with placeholders.\n * var sayHelloTo = _.partialRight(greet, 'hello', _);\n * sayHelloTo('fred');\n * // => 'hello fred'\n */\n var partialRight = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partialRight));\n return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n });\n\n /**\n * Creates a function that invokes `func` with arguments arranged according\n * to the specified `indexes` where the argument value at the first index is\n * provided as the first argument, the argument value at the second index is\n * provided as the second argument, and so on.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to rearrange arguments for.\n * @param {...(number|number[])} indexes The arranged argument indexes.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var rearged = _.rearg(function(a, b, c) {\n * return [a, b, c];\n * }, [2, 0, 1]);\n *\n * rearged('b', 'c', 'a')\n * // => ['a', 'b', 'c']\n */\n var rearg = flatRest(function(func, indexes) {\n return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n });\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * created function and arguments from `start` and beyond provided as\n * an array.\n *\n * **Note:** This method is based on the\n * [rest parameter](https://mdn.io/rest_parameters).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.rest(function(what, names) {\n * return what + ' ' + _.initial(names).join(', ') +\n * (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n * });\n *\n * say('hello', 'fred', 'barney', 'pebbles');\n * // => 'hello fred, barney, & pebbles'\n */\n function rest(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start === undefined ? start : toInteger(start);\n return baseRest(func, start);\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * create function and an array of arguments much like\n * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n *\n * **Note:** This method is based on the\n * [spread operator](https://mdn.io/spread_operator).\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Function\n * @param {Function} func The function to spread arguments over.\n * @param {number} [start=0] The start position of the spread.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.spread(function(who, what) {\n * return who + ' says ' + what;\n * });\n *\n * say(['fred', 'hello']);\n * // => 'fred says hello'\n *\n * var numbers = Promise.all([\n * Promise.resolve(40),\n * Promise.resolve(36)\n * ]);\n *\n * numbers.then(_.spread(function(x, y) {\n * return x + y;\n * }));\n * // => a Promise of 76\n */\n function spread(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start == null ? 0 : nativeMax(toInteger(start), 0);\n return baseRest(function(args) {\n var array = args[start],\n otherArgs = castSlice(args, 0, start);\n\n if (array) {\n arrayPush(otherArgs, array);\n }\n return apply(func, this, otherArgs);\n });\n }\n\n /**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\n function throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n }\n\n /**\n * Creates a function that accepts up to one argument, ignoring any\n * additional arguments.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.unary(parseInt));\n * // => [6, 8, 10]\n */\n function unary(func) {\n return ary(func, 1);\n }\n\n /**\n * Creates a function that provides `value` to `wrapper` as its first\n * argument. Any additional arguments provided to the function are appended\n * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n * binding of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {*} value The value to wrap.\n * @param {Function} [wrapper=identity] The wrapper function.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var p = _.wrap(_.escape, function(func, text) {\n * return '<p>' + func(text) + '</p>';\n * });\n *\n * p('fred, barney, & pebbles');\n * // => '<p>fred, barney, & pebbles</p>'\n */\n function wrap(value, wrapper) {\n return partial(castFunction(wrapper), value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Casts `value` as an array if it's not one.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Lang\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast array.\n * @example\n *\n * _.castArray(1);\n * // => [1]\n *\n * _.castArray({ 'a': 1 });\n * // => [{ 'a': 1 }]\n *\n * _.castArray('abc');\n * // => ['abc']\n *\n * _.castArray(null);\n * // => [null]\n *\n * _.castArray(undefined);\n * // => [undefined]\n *\n * _.castArray();\n * // => []\n *\n * var array = [1, 2, 3];\n * console.log(_.castArray(array) === array);\n * // => true\n */\n function castArray() {\n if (!arguments.length) {\n return [];\n }\n var value = arguments[0];\n return isArray(value) ? value : [value];\n }\n\n /**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\n function clone(value) {\n return baseClone(value, CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.clone` except that it accepts `customizer` which\n * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n * cloning is handled by the method instead. The `customizer` is invoked with\n * up to four arguments; (value [, index|key, object, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeepWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(false);\n * }\n * }\n *\n * var el = _.cloneWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 0\n */\n function cloneWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\n function cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.cloneWith` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the deep cloned value.\n * @see _.cloneWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(true);\n * }\n * }\n *\n * var el = _.cloneDeepWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 20\n */\n function cloneDeepWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * Checks if `object` conforms to `source` by invoking the predicate\n * properties of `source` with the corresponding property values of `object`.\n *\n * **Note:** This method is equivalent to `_.conforms` when `source` is\n * partially applied.\n *\n * @static\n * @memberOf _\n * @since 4.14.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n * // => true\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n * // => false\n */\n function conformsTo(object, source) {\n return source == null || baseConformsTo(object, source, keys(source));\n }\n\n /**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\n function eq(value, other) {\n return value === other || (value !== value && other !== other);\n }\n\n /**\n * Checks if `value` is greater than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n * @see _.lt\n * @example\n *\n * _.gt(3, 1);\n * // => true\n *\n * _.gt(3, 3);\n * // => false\n *\n * _.gt(1, 3);\n * // => false\n */\n var gt = createRelationalOperation(baseGt);\n\n /**\n * Checks if `value` is greater than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than or equal to\n * `other`, else `false`.\n * @see _.lte\n * @example\n *\n * _.gte(3, 1);\n * // => true\n *\n * _.gte(3, 3);\n * // => true\n *\n * _.gte(1, 3);\n * // => false\n */\n var gte = createRelationalOperation(function(value, other) {\n return value >= other;\n });\n\n /**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\n var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n };\n\n /**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\n var isArray = Array.isArray;\n\n /**\n * Checks if `value` is classified as an `ArrayBuffer` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n * @example\n *\n * _.isArrayBuffer(new ArrayBuffer(2));\n * // => true\n *\n * _.isArrayBuffer(new Array(2));\n * // => false\n */\n var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\n\n /**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\n function isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n }\n\n /**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\n function isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n }\n\n /**\n * Checks if `value` is classified as a boolean primitive or object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n * @example\n *\n * _.isBoolean(false);\n * // => true\n *\n * _.isBoolean(null);\n * // => false\n */\n function isBoolean(value) {\n return value === true || value === false ||\n (isObjectLike(value) && baseGetTag(value) == boolTag);\n }\n\n /**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\n var isBuffer = nativeIsBuffer || stubFalse;\n\n /**\n * Checks if `value` is classified as a `Date` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n * @example\n *\n * _.isDate(new Date);\n * // => true\n *\n * _.isDate('Mon April 23 2012');\n * // => false\n */\n var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\n /**\n * Checks if `value` is likely a DOM element.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n * @example\n *\n * _.isElement(document.body);\n * // => true\n *\n * _.isElement('<body>');\n * // => false\n */\n function isElement(value) {\n return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n }\n\n /**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\n function isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\n function isEqual(value, other) {\n return baseIsEqual(value, other);\n }\n\n /**\n * This method is like `_.isEqual` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with up to\n * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, othValue) {\n * if (isGreeting(objValue) && isGreeting(othValue)) {\n * return true;\n * }\n * }\n *\n * var array = ['hello', 'goodbye'];\n * var other = ['hi', 'goodbye'];\n *\n * _.isEqualWith(array, other, customizer);\n * // => true\n */\n function isEqualWith(value, other, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n var result = customizer ? customizer(value, other) : undefined;\n return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n }\n\n /**\n * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n * `SyntaxError`, `TypeError`, or `URIError` object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n * @example\n *\n * _.isError(new Error);\n * // => true\n *\n * _.isError(Error);\n * // => false\n */\n function isError(value) {\n if (!isObjectLike(value)) {\n return false;\n }\n var tag = baseGetTag(value);\n return tag == errorTag || tag == domExcTag ||\n (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n }\n\n /**\n * Checks if `value` is a finite primitive number.\n *\n * **Note:** This method is based on\n * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n * @example\n *\n * _.isFinite(3);\n * // => true\n *\n * _.isFinite(Number.MIN_VALUE);\n * // => true\n *\n * _.isFinite(Infinity);\n * // => false\n *\n * _.isFinite('3');\n * // => false\n */\n function isFinite(value) {\n return typeof value == 'number' && nativeIsFinite(value);\n }\n\n /**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\n function isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n }\n\n /**\n * Checks if `value` is an integer.\n *\n * **Note:** This method is based on\n * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n * @example\n *\n * _.isInteger(3);\n * // => true\n *\n * _.isInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isInteger(Infinity);\n * // => false\n *\n * _.isInteger('3');\n * // => false\n */\n function isInteger(value) {\n return typeof value == 'number' && value == toInteger(value);\n }\n\n /**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\n function isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\n function isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n }\n\n /**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\n function isObjectLike(value) {\n return value != null && typeof value == 'object';\n }\n\n /**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\n var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n /**\n * Performs a partial deep comparison between `object` and `source` to\n * determine if `object` contains equivalent property values.\n *\n * **Note:** This method is equivalent to `_.matches` when `source` is\n * partially applied.\n *\n * Partial comparisons will match empty array and empty object `source`\n * values against any array or object value, respectively. See `_.isEqual`\n * for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.isMatch(object, { 'b': 2 });\n * // => true\n *\n * _.isMatch(object, { 'b': 1 });\n * // => false\n */\n function isMatch(object, source) {\n return object === source || baseIsMatch(object, source, getMatchData(source));\n }\n\n /**\n * This method is like `_.isMatch` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with five\n * arguments: (objValue, srcValue, index|key, object, source).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, srcValue) {\n * if (isGreeting(objValue) && isGreeting(srcValue)) {\n * return true;\n * }\n * }\n *\n * var object = { 'greeting': 'hello' };\n * var source = { 'greeting': 'hi' };\n *\n * _.isMatchWith(object, source, customizer);\n * // => true\n */\n function isMatchWith(object, source, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseIsMatch(object, source, getMatchData(source), customizer);\n }\n\n /**\n * Checks if `value` is `NaN`.\n *\n * **Note:** This method is based on\n * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n * `undefined` and other non-number values.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n * @example\n *\n * _.isNaN(NaN);\n * // => true\n *\n * _.isNaN(new Number(NaN));\n * // => true\n *\n * isNaN(undefined);\n * // => true\n *\n * _.isNaN(undefined);\n * // => false\n */\n function isNaN(value) {\n // An `NaN` primitive is the only value that is not equal to itself.\n // Perform the `toStringTag` check first to avoid errors with some\n // ActiveX objects in IE.\n return isNumber(value) && value != +value;\n }\n\n /**\n * Checks if `value` is a pristine native function.\n *\n * **Note:** This method can't reliably detect native functions in the presence\n * of the core-js package because core-js circumvents this kind of detection.\n * Despite multiple requests, the core-js maintainer has made it clear: any\n * attempt to fix the detection will be obstructed. As a result, we're left\n * with little choice but to throw an error. Unfortunately, this also affects\n * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n * which rely on core-js.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\n function isNative(value) {\n if (isMaskable(value)) {\n throw new Error(CORE_ERROR_TEXT);\n }\n return baseIsNative(value);\n }\n\n /**\n * Checks if `value` is `null`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n * @example\n *\n * _.isNull(null);\n * // => true\n *\n * _.isNull(void 0);\n * // => false\n */\n function isNull(value) {\n return value === null;\n }\n\n /**\n * Checks if `value` is `null` or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n * @example\n *\n * _.isNil(null);\n * // => true\n *\n * _.isNil(void 0);\n * // => true\n *\n * _.isNil(NaN);\n * // => false\n */\n function isNil(value) {\n return value == null;\n }\n\n /**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\n function isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && baseGetTag(value) == numberTag);\n }\n\n /**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\n function isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n }\n\n /**\n * Checks if `value` is classified as a `RegExp` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n * @example\n *\n * _.isRegExp(/abc/);\n * // => true\n *\n * _.isRegExp('/abc/');\n * // => false\n */\n var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\n /**\n * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n * double precision number which isn't the result of a rounded unsafe integer.\n *\n * **Note:** This method is based on\n * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.\n * @example\n *\n * _.isSafeInteger(3);\n * // => true\n *\n * _.isSafeInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isSafeInteger(Infinity);\n * // => false\n *\n * _.isSafeInteger('3');\n * // => false\n */\n function isSafeInteger(value) {\n return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\n var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\n /**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\n function isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n }\n\n /**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\n function isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n }\n\n /**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\n var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n /**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\n function isUndefined(value) {\n return value === undefined;\n }\n\n /**\n * Checks if `value` is classified as a `WeakMap` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n * @example\n *\n * _.isWeakMap(new WeakMap);\n * // => true\n *\n * _.isWeakMap(new Map);\n * // => false\n */\n function isWeakMap(value) {\n return isObjectLike(value) && getTag(value) == weakMapTag;\n }\n\n /**\n * Checks if `value` is classified as a `WeakSet` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n * @example\n *\n * _.isWeakSet(new WeakSet);\n * // => true\n *\n * _.isWeakSet(new Set);\n * // => false\n */\n function isWeakSet(value) {\n return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n }\n\n /**\n * Checks if `value` is less than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n * @see _.gt\n * @example\n *\n * _.lt(1, 3);\n * // => true\n *\n * _.lt(3, 3);\n * // => false\n *\n * _.lt(3, 1);\n * // => false\n */\n var lt = createRelationalOperation(baseLt);\n\n /**\n * Checks if `value` is less than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than or equal to\n * `other`, else `false`.\n * @see _.gte\n * @example\n *\n * _.lte(1, 3);\n * // => true\n *\n * _.lte(3, 3);\n * // => true\n *\n * _.lte(3, 1);\n * // => false\n */\n var lte = createRelationalOperation(function(value, other) {\n return value <= other;\n });\n\n /**\n * Converts `value` to an array.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Array} Returns the converted array.\n * @example\n *\n * _.toArray({ 'a': 1, 'b': 2 });\n * // => [1, 2]\n *\n * _.toArray('abc');\n * // => ['a', 'b', 'c']\n *\n * _.toArray(1);\n * // => []\n *\n * _.toArray(null);\n * // => []\n */\n function toArray(value) {\n if (!value) {\n return [];\n }\n if (isArrayLike(value)) {\n return isString(value) ? stringToArray(value) : copyArray(value);\n }\n if (symIterator && value[symIterator]) {\n return iteratorToArray(value[symIterator]());\n }\n var tag = getTag(value),\n func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\n return func(value);\n }\n\n /**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\n function toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n }\n\n /**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\n function toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n }\n\n /**\n * Converts `value` to an integer suitable for use as the length of an\n * array-like object.\n *\n * **Note:** This method is based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toLength(3.2);\n * // => 3\n *\n * _.toLength(Number.MIN_VALUE);\n * // => 0\n *\n * _.toLength(Infinity);\n * // => 4294967295\n *\n * _.toLength('3.2');\n * // => 3\n */\n function toLength(value) {\n return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n }\n\n /**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\n function toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n }\n\n /**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\n function toPlainObject(value) {\n return copyObject(value, keysIn(value));\n }\n\n /**\n * Converts `value` to a safe integer. A safe integer can be compared and\n * represented correctly.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toSafeInteger(3.2);\n * // => 3\n *\n * _.toSafeInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toSafeInteger(Infinity);\n * // => 9007199254740991\n *\n * _.toSafeInteger('3.2');\n * // => 3\n */\n function toSafeInteger(value) {\n return value\n ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n : (value === 0 ? value : 0);\n }\n\n /**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\n function toString(value) {\n return value == null ? '' : baseToString(value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */\n var assign = createAssigner(function(object, source) {\n if (isPrototype(source) || isArrayLike(source)) {\n copyObject(source, keys(source), object);\n return;\n }\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n assignValue(object, key, source[key]);\n }\n }\n });\n\n /**\n * This method is like `_.assign` except that it iterates over own and\n * inherited source properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extend\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assign\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n */\n var assignIn = createAssigner(function(object, source) {\n copyObject(source, keysIn(source), object);\n });\n\n /**\n * This method is like `_.assignIn` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extendWith\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignInWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keysIn(source), object, customizer);\n });\n\n /**\n * This method is like `_.assign` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignInWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keys(source), object, customizer);\n });\n\n /**\n * Creates an array of values corresponding to `paths` of `object`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Array} Returns the picked values.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _.at(object, ['a[0].b.c', 'a[1]']);\n * // => [3, 4]\n */\n var at = flatRest(baseAt);\n\n /**\n * Creates an object that inherits from the `prototype` object. If a\n * `properties` object is given, its own enumerable string keyed properties\n * are assigned to the created object.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Object\n * @param {Object} prototype The object to inherit from.\n * @param {Object} [properties] The properties to assign to the object.\n * @returns {Object} Returns the new object.\n * @example\n *\n * function Shape() {\n * this.x = 0;\n * this.y = 0;\n * }\n *\n * function Circle() {\n * Shape.call(this);\n * }\n *\n * Circle.prototype = _.create(Shape.prototype, {\n * 'constructor': Circle\n * });\n *\n * var circle = new Circle;\n * circle instanceof Circle;\n * // => true\n *\n * circle instanceof Shape;\n * // => true\n */\n function create(prototype, properties) {\n var result = baseCreate(prototype);\n return properties == null ? result : baseAssign(result, properties);\n }\n\n /**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var defaults = baseRest(function(object, sources) {\n object = Object(object);\n\n var index = -1;\n var length = sources.length;\n var guard = length > 2 ? sources[2] : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n length = 1;\n }\n\n while (++index < length) {\n var source = sources[index];\n var props = keysIn(source);\n var propsIndex = -1;\n var propsLength = props.length;\n\n while (++propsIndex < propsLength) {\n var key = props[propsIndex];\n var value = object[key];\n\n if (value === undefined ||\n (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n object[key] = source[key];\n }\n }\n }\n\n return object;\n });\n\n /**\n * This method is like `_.defaults` except that it recursively assigns\n * default properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaults\n * @example\n *\n * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n * // => { 'a': { 'b': 2, 'c': 3 } }\n */\n var defaultsDeep = baseRest(function(args) {\n args.push(undefined, customDefaultsMerge);\n return apply(mergeWith, undefined, args);\n });\n\n /**\n * This method is like `_.find` except that it returns the key of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findKey(users, function(o) { return o.age < 40; });\n * // => 'barney' (iteration order is not guaranteed)\n *\n * // The `_.matches` iteratee shorthand.\n * _.findKey(users, { 'age': 1, 'active': true });\n * // => 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findKey(users, 'active');\n * // => 'barney'\n */\n function findKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n }\n\n /**\n * This method is like `_.findKey` except that it iterates over elements of\n * a collection in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findLastKey(users, function(o) { return o.age < 40; });\n * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastKey(users, { 'age': 36, 'active': true });\n * // => 'barney'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastKey(users, 'active');\n * // => 'pebbles'\n */\n function findLastKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n }\n\n /**\n * Iterates over own and inherited enumerable string keyed properties of an\n * object and invokes `iteratee` for each property. The iteratee is invoked\n * with three arguments: (value, key, object). Iteratee functions may exit\n * iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forInRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forIn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n */\n function forIn(object, iteratee) {\n return object == null\n ? object\n : baseFor(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * This method is like `_.forIn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forInRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n */\n function forInRight(object, iteratee) {\n return object == null\n ? object\n : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * Iterates over own enumerable string keyed properties of an object and\n * invokes `iteratee` for each property. The iteratee is invoked with three\n * arguments: (value, key, object). Iteratee functions may exit iteration\n * early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwnRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forOwn(object, iteratee) {\n return object && baseForOwn(object, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forOwn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwnRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n */\n function forOwnRight(object, iteratee) {\n return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an array of function property names from own enumerable properties\n * of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functionsIn\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functions(new Foo);\n * // => ['a', 'b']\n */\n function functions(object) {\n return object == null ? [] : baseFunctions(object, keys(object));\n }\n\n /**\n * Creates an array of function property names from own and inherited\n * enumerable properties of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functions\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functionsIn(new Foo);\n * // => ['a', 'b', 'c']\n */\n function functionsIn(object) {\n return object == null ? [] : baseFunctions(object, keysIn(object));\n }\n\n /**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\n function get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n }\n\n /**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\n function has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n }\n\n /**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\n function hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n }\n\n /**\n * Creates an object composed of the inverted keys and values of `object`.\n * If `object` contains duplicate values, subsequent values overwrite\n * property assignments of previous values.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Object\n * @param {Object} object The object to invert.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invert(object);\n * // => { '1': 'c', '2': 'b' }\n */\n var invert = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n result[value] = key;\n }, constant(identity));\n\n /**\n * This method is like `_.invert` except that the inverted object is generated\n * from the results of running each element of `object` thru `iteratee`. The\n * corresponding inverted value of each inverted key is an array of keys\n * responsible for generating the inverted value. The iteratee is invoked\n * with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Object\n * @param {Object} object The object to invert.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invertBy(object);\n * // => { '1': ['a', 'c'], '2': ['b'] }\n *\n * _.invertBy(object, function(value) {\n * return 'group' + value;\n * });\n * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n */\n var invertBy = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n if (hasOwnProperty.call(result, value)) {\n result[value].push(key);\n } else {\n result[value] = [key];\n }\n }, getIteratee);\n\n /**\n * Invokes the method at `path` of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n *\n * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n * // => [2, 3]\n */\n var invoke = baseRest(baseInvoke);\n\n /**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\n function keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n }\n\n /**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\n function keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n }\n\n /**\n * The opposite of `_.mapValues`; this method creates an object with the\n * same values as `object` and keys generated by running each own enumerable\n * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n * with three arguments: (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapValues\n * @example\n *\n * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n * return key + value;\n * });\n * // => { 'a1': 1, 'b2': 2 }\n */\n function mapKeys(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, iteratee(value, key, object), value);\n });\n return result;\n }\n\n /**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n * 'fred': { 'user': 'fred', 'age': 40 },\n * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\n function mapValues(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, key, iteratee(value, key, object));\n });\n return result;\n }\n\n /**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\n var merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n });\n\n /**\n * This method is like `_.merge` except that it accepts `customizer` which\n * is invoked to produce the merged values of the destination and source\n * properties. If `customizer` returns `undefined`, merging is handled by the\n * method instead. The `customizer` is invoked with six arguments:\n * (objValue, srcValue, key, object, source, stack).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} customizer The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * function customizer(objValue, srcValue) {\n * if (_.isArray(objValue)) {\n * return objValue.concat(srcValue);\n * }\n * }\n *\n * var object = { 'a': [1], 'b': [2] };\n * var other = { 'a': [3], 'b': [4] };\n *\n * _.mergeWith(object, other, customizer);\n * // => { 'a': [1, 3], 'b': [2, 4] }\n */\n var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n baseMerge(object, source, srcIndex, customizer);\n });\n\n /**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\n var omit = flatRest(function(object, paths) {\n var result = {};\n if (object == null) {\n return result;\n }\n var isDeep = false;\n paths = arrayMap(paths, function(path) {\n path = castPath(path, object);\n isDeep || (isDeep = path.length > 1);\n return path;\n });\n copyObject(object, getAllKeysIn(object), result);\n if (isDeep) {\n result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n }\n var length = paths.length;\n while (length--) {\n baseUnset(result, paths[length]);\n }\n return result;\n });\n\n /**\n * The opposite of `_.pickBy`; this method creates an object composed of\n * the own and inherited enumerable string keyed properties of `object` that\n * `predicate` doesn't return truthy for. The predicate is invoked with two\n * arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omitBy(object, _.isNumber);\n * // => { 'b': '2' }\n */\n function omitBy(object, predicate) {\n return pickBy(object, negate(getIteratee(predicate)));\n }\n\n /**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\n var pick = flatRest(function(object, paths) {\n return object == null ? {} : basePick(object, paths);\n });\n\n /**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pickBy(object, _.isNumber);\n * // => { 'a': 1, 'c': 3 }\n */\n function pickBy(object, predicate) {\n if (object == null) {\n return {};\n }\n var props = arrayMap(getAllKeysIn(object), function(prop) {\n return [prop];\n });\n predicate = getIteratee(predicate);\n return basePickBy(object, props, function(value, path) {\n return predicate(value, path[0]);\n });\n }\n\n /**\n * This method is like `_.get` except that if the resolved value is a\n * function it's invoked with the `this` binding of its parent object and\n * its result is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to resolve.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n *\n * _.result(object, 'a[0].b.c1');\n * // => 3\n *\n * _.result(object, 'a[0].b.c2');\n * // => 4\n *\n * _.result(object, 'a[0].b.c3', 'default');\n * // => 'default'\n *\n * _.result(object, 'a[0].b.c3', _.constant('default'));\n * // => 'default'\n */\n function result(object, path, defaultValue) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length;\n\n // Ensure the loop is entered when path is empty.\n if (!length) {\n length = 1;\n object = undefined;\n }\n while (++index < length) {\n var value = object == null ? undefined : object[toKey(path[index])];\n if (value === undefined) {\n index = length;\n value = defaultValue;\n }\n object = isFunction(value) ? value.call(object) : value;\n }\n return object;\n }\n\n /**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\n function set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n }\n\n /**\n * This method is like `_.set` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.setWith(object, '[0][1]', 'a', Object);\n * // => { '0': { '1': 'a' } }\n */\n function setWith(object, path, value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseSet(object, path, value, customizer);\n }\n\n /**\n * Creates an array of own enumerable string keyed-value pairs for `object`\n * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n * entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entries\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairs(new Foo);\n * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n */\n var toPairs = createToPairs(keys);\n\n /**\n * Creates an array of own and inherited enumerable string keyed-value pairs\n * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n * or set, its entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entriesIn\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairsIn(new Foo);\n * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n */\n var toPairsIn = createToPairs(keysIn);\n\n /**\n * An alternative to `_.reduce`; this method transforms `object` to a new\n * `accumulator` object which is the result of running each of its own\n * enumerable string keyed properties thru `iteratee`, with each invocation\n * potentially mutating the `accumulator` object. If `accumulator` is not\n * provided, a new object with the same `[[Prototype]]` will be used. The\n * iteratee is invoked with four arguments: (accumulator, value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The custom accumulator value.\n * @returns {*} Returns the accumulated value.\n * @example\n *\n * _.transform([2, 3, 4], function(result, n) {\n * result.push(n *= n);\n * return n % 2 == 0;\n * }, []);\n * // => [4, 9]\n *\n * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] }\n */\n function transform(object, iteratee, accumulator) {\n var isArr = isArray(object),\n isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n iteratee = getIteratee(iteratee, 4);\n if (accumulator == null) {\n var Ctor = object && object.constructor;\n if (isArrLike) {\n accumulator = isArr ? new Ctor : [];\n }\n else if (isObject(object)) {\n accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n }\n else {\n accumulator = {};\n }\n }\n (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n return iteratee(accumulator, value, index, object);\n });\n return accumulator;\n }\n\n /**\n * Removes the property at `path` of `object`.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n * _.unset(object, 'a[0].b.c');\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n *\n * _.unset(object, ['a', '0', 'b', 'c']);\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n */\n function unset(object, path) {\n return object == null ? true : baseUnset(object, path);\n }\n\n /**\n * This method is like `_.set` except that accepts `updater` to produce the\n * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n * is invoked with one argument: (value).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n * console.log(object.a[0].b.c);\n * // => 9\n *\n * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n * console.log(object.x[0].y.z);\n * // => 0\n */\n function update(object, path, updater) {\n return object == null ? object : baseUpdate(object, path, castFunction(updater));\n }\n\n /**\n * This method is like `_.update` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n * // => { '0': { '1': 'a' } }\n */\n function updateWith(object, path, updater, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n }\n\n /**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\n function values(object) {\n return object == null ? [] : baseValues(object, keys(object));\n }\n\n /**\n * Creates an array of the own and inherited enumerable string keyed property\n * values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.valuesIn(new Foo);\n * // => [1, 2, 3] (iteration order is not guaranteed)\n */\n function valuesIn(object) {\n return object == null ? [] : baseValues(object, keysIn(object));\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Clamps `number` within the inclusive `lower` and `upper` bounds.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Number\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n * @example\n *\n * _.clamp(-10, -5, 5);\n * // => -5\n *\n * _.clamp(10, -5, 5);\n * // => 5\n */\n function clamp(number, lower, upper) {\n if (upper === undefined) {\n upper = lower;\n lower = undefined;\n }\n if (upper !== undefined) {\n upper = toNumber(upper);\n upper = upper === upper ? upper : 0;\n }\n if (lower !== undefined) {\n lower = toNumber(lower);\n lower = lower === lower ? lower : 0;\n }\n return baseClamp(toNumber(number), lower, upper);\n }\n\n /**\n * Checks if `n` is between `start` and up to, but not including, `end`. If\n * `end` is not specified, it's set to `start` with `start` then set to `0`.\n * If `start` is greater than `end` the params are swapped to support\n * negative ranges.\n *\n * @static\n * @memberOf _\n * @since 3.3.0\n * @category Number\n * @param {number} number The number to check.\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n * @see _.range, _.rangeRight\n * @example\n *\n * _.inRange(3, 2, 4);\n * // => true\n *\n * _.inRange(4, 8);\n * // => true\n *\n * _.inRange(4, 2);\n * // => false\n *\n * _.inRange(2, 2);\n * // => false\n *\n * _.inRange(1.2, 2);\n * // => true\n *\n * _.inRange(5.2, 4);\n * // => false\n *\n * _.inRange(-3, -2, -6);\n * // => true\n */\n function inRange(number, start, end) {\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n number = toNumber(number);\n return baseInRange(number, start, end);\n }\n\n /**\n * Produces a random number between the inclusive `lower` and `upper` bounds.\n * If only one argument is provided a number between `0` and the given number\n * is returned. If `floating` is `true`, or either `lower` or `upper` are\n * floats, a floating-point number is returned instead of an integer.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Number\n * @param {number} [lower=0] The lower bound.\n * @param {number} [upper=1] The upper bound.\n * @param {boolean} [floating] Specify returning a floating-point number.\n * @returns {number} Returns the random number.\n * @example\n *\n * _.random(0, 5);\n * // => an integer between 0 and 5\n *\n * _.random(5);\n * // => also an integer between 0 and 5\n *\n * _.random(5, true);\n * // => a floating-point number between 0 and 5\n *\n * _.random(1.2, 5.2);\n * // => a floating-point number between 1.2 and 5.2\n */\n function random(lower, upper, floating) {\n if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n upper = floating = undefined;\n }\n if (floating === undefined) {\n if (typeof upper == 'boolean') {\n floating = upper;\n upper = undefined;\n }\n else if (typeof lower == 'boolean') {\n floating = lower;\n lower = undefined;\n }\n }\n if (lower === undefined && upper === undefined) {\n lower = 0;\n upper = 1;\n }\n else {\n lower = toFinite(lower);\n if (upper === undefined) {\n upper = lower;\n lower = 0;\n } else {\n upper = toFinite(upper);\n }\n }\n if (lower > upper) {\n var temp = lower;\n lower = upper;\n upper = temp;\n }\n if (floating || lower % 1 || upper % 1) {\n var rand = nativeRandom();\n return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n }\n return baseRandom(lower, upper);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\n var camelCase = createCompounder(function(result, word, index) {\n word = word.toLowerCase();\n return result + (index ? capitalize(word) : word);\n });\n\n /**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\n function capitalize(string) {\n return upperFirst(toString(string).toLowerCase());\n }\n\n /**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\n function deburr(string) {\n string = toString(string);\n return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n }\n\n /**\n * Checks if `string` ends with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=string.length] The position to search up to.\n * @returns {boolean} Returns `true` if `string` ends with `target`,\n * else `false`.\n * @example\n *\n * _.endsWith('abc', 'c');\n * // => true\n *\n * _.endsWith('abc', 'b');\n * // => false\n *\n * _.endsWith('abc', 'b', 2);\n * // => true\n */\n function endsWith(string, target, position) {\n string = toString(string);\n target = baseToString(target);\n\n var length = string.length;\n position = position === undefined\n ? length\n : baseClamp(toInteger(position), 0, length);\n\n var end = position;\n position -= target.length;\n return position >= 0 && string.slice(position, end) == target;\n }\n\n /**\n * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n * corresponding HTML entities.\n *\n * **Note:** No other characters are escaped. To escape additional\n * characters use a third-party library like [_he_](https://mths.be/he).\n *\n * Though the \">\" character is escaped for symmetry, characters like\n * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n * unless they're part of a tag or unquoted attribute value. See\n * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n * (under \"semi-related fun fact\") for more details.\n *\n * When working with HTML you should always\n * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n * XSS vectors.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escape('fred, barney, & pebbles');\n * // => 'fred, barney, & pebbles'\n */\n function escape(string) {\n string = toString(string);\n return (string && reHasUnescapedHtml.test(string))\n ? string.replace(reUnescapedHtml, escapeHtmlChar)\n : string;\n }\n\n /**\n * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escapeRegExp('[lodash](https://lodash.com/)');\n * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n */\n function escapeRegExp(string) {\n string = toString(string);\n return (string && reHasRegExpChar.test(string))\n ? string.replace(reRegExpChar, '\\\\$&')\n : string;\n }\n\n /**\n * Converts `string` to\n * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the kebab cased string.\n * @example\n *\n * _.kebabCase('Foo Bar');\n * // => 'foo-bar'\n *\n * _.kebabCase('fooBar');\n * // => 'foo-bar'\n *\n * _.kebabCase('__FOO_BAR__');\n * // => 'foo-bar'\n */\n var kebabCase = createCompounder(function(result, word, index) {\n return result + (index ? '-' : '') + word.toLowerCase();\n });\n\n /**\n * Converts `string`, as space separated words, to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.lowerCase('--Foo-Bar--');\n * // => 'foo bar'\n *\n * _.lowerCase('fooBar');\n * // => 'foo bar'\n *\n * _.lowerCase('__FOO_BAR__');\n * // => 'foo bar'\n */\n var lowerCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + word.toLowerCase();\n });\n\n /**\n * Converts the first character of `string` to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.lowerFirst('Fred');\n * // => 'fred'\n *\n * _.lowerFirst('FRED');\n * // => 'fRED'\n */\n var lowerFirst = createCaseFirst('toLowerCase');\n\n /**\n * Pads `string` on the left and right sides if it's shorter than `length`.\n * Padding characters are truncated if they can't be evenly divided by `length`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.pad('abc', 8);\n * // => ' abc '\n *\n * _.pad('abc', 8, '_-');\n * // => '_-abc_-_'\n *\n * _.pad('abc', 3);\n * // => 'abc'\n */\n function pad(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n if (!length || strLength >= length) {\n return string;\n }\n var mid = (length - strLength) / 2;\n return (\n createPadding(nativeFloor(mid), chars) +\n string +\n createPadding(nativeCeil(mid), chars)\n );\n }\n\n /**\n * Pads `string` on the right side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padEnd('abc', 6);\n * // => 'abc '\n *\n * _.padEnd('abc', 6, '_-');\n * // => 'abc_-_'\n *\n * _.padEnd('abc', 3);\n * // => 'abc'\n */\n function padEnd(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (string + createPadding(length - strLength, chars))\n : string;\n }\n\n /**\n * Pads `string` on the left side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padStart('abc', 6);\n * // => ' abc'\n *\n * _.padStart('abc', 6, '_-');\n * // => '_-_abc'\n *\n * _.padStart('abc', 3);\n * // => 'abc'\n */\n function padStart(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (createPadding(length - strLength, chars) + string)\n : string;\n }\n\n /**\n * Converts `string` to an integer of the specified radix. If `radix` is\n * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n * hexadecimal, in which case a `radix` of `16` is used.\n *\n * **Note:** This method aligns with the\n * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category String\n * @param {string} string The string to convert.\n * @param {number} [radix=10] The radix to interpret `value` by.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.parseInt('08');\n * // => 8\n *\n * _.map(['6', '08', '10'], _.parseInt);\n * // => [6, 8, 10]\n */\n function parseInt(string, radix, guard) {\n if (guard || radix == null) {\n radix = 0;\n } else if (radix) {\n radix = +radix;\n }\n return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n }\n\n /**\n * Repeats the given string `n` times.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to repeat.\n * @param {number} [n=1] The number of times to repeat the string.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the repeated string.\n * @example\n *\n * _.repeat('*', 3);\n * // => '***'\n *\n * _.repeat('abc', 2);\n * // => 'abcabc'\n *\n * _.repeat('abc', 0);\n * // => ''\n */\n function repeat(string, n, guard) {\n if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n return baseRepeat(toString(string), n);\n }\n\n /**\n * Replaces matches for `pattern` in `string` with `replacement`.\n *\n * **Note:** This method is based on\n * [`String#replace`](https://mdn.io/String/replace).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to modify.\n * @param {RegExp|string} pattern The pattern to replace.\n * @param {Function|string} replacement The match replacement.\n * @returns {string} Returns the modified string.\n * @example\n *\n * _.replace('Hi Fred', 'Fred', 'Barney');\n * // => 'Hi Barney'\n */\n function replace() {\n var args = arguments,\n string = toString(args[0]);\n\n return args.length < 3 ? string : string.replace(args[1], args[2]);\n }\n\n /**\n * Converts `string` to\n * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the snake cased string.\n * @example\n *\n * _.snakeCase('Foo Bar');\n * // => 'foo_bar'\n *\n * _.snakeCase('fooBar');\n * // => 'foo_bar'\n *\n * _.snakeCase('--FOO-BAR--');\n * // => 'foo_bar'\n */\n var snakeCase = createCompounder(function(result, word, index) {\n return result + (index ? '_' : '') + word.toLowerCase();\n });\n\n /**\n * Splits `string` by `separator`.\n *\n * **Note:** This method is based on\n * [`String#split`](https://mdn.io/String/split).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to split.\n * @param {RegExp|string} separator The separator pattern to split by.\n * @param {number} [limit] The length to truncate results to.\n * @returns {Array} Returns the string segments.\n * @example\n *\n * _.split('a-b-c', '-', 2);\n * // => ['a', 'b']\n */\n function split(string, separator, limit) {\n if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n separator = limit = undefined;\n }\n limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n if (!limit) {\n return [];\n }\n string = toString(string);\n if (string && (\n typeof separator == 'string' ||\n (separator != null && !isRegExp(separator))\n )) {\n separator = baseToString(separator);\n if (!separator && hasUnicode(string)) {\n return castSlice(stringToArray(string), 0, limit);\n }\n }\n return string.split(separator, limit);\n }\n\n /**\n * Converts `string` to\n * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n *\n * @static\n * @memberOf _\n * @since 3.1.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the start cased string.\n * @example\n *\n * _.startCase('--foo-bar--');\n * // => 'Foo Bar'\n *\n * _.startCase('fooBar');\n * // => 'Foo Bar'\n *\n * _.startCase('__FOO_BAR__');\n * // => 'FOO BAR'\n */\n var startCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + upperFirst(word);\n });\n\n /**\n * Checks if `string` starts with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=0] The position to search from.\n * @returns {boolean} Returns `true` if `string` starts with `target`,\n * else `false`.\n * @example\n *\n * _.startsWith('abc', 'a');\n * // => true\n *\n * _.startsWith('abc', 'b');\n * // => false\n *\n * _.startsWith('abc', 'b', 1);\n * // => true\n */\n function startsWith(string, target, position) {\n string = toString(string);\n position = position == null\n ? 0\n : baseClamp(toInteger(position), 0, string.length);\n\n target = baseToString(target);\n return string.slice(position, position + target.length) == target;\n }\n\n /**\n * Creates a compiled template function that can interpolate data properties\n * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n * properties may be accessed as free variables in the template. If a setting\n * object is given, it takes precedence over `_.templateSettings` values.\n *\n * **Note:** In the development build `_.template` utilizes\n * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n * for easier debugging.\n *\n * For more information on precompiling templates see\n * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n *\n * For more information on Chrome extension sandboxes see\n * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The template string.\n * @param {Object} [options={}] The options object.\n * @param {RegExp} [options.escape=_.templateSettings.escape]\n * The HTML \"escape\" delimiter.\n * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n * The \"evaluate\" delimiter.\n * @param {Object} [options.imports=_.templateSettings.imports]\n * An object to import into the template as free variables.\n * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n * The \"interpolate\" delimiter.\n * @param {string} [options.sourceURL='lodash.templateSources[n]']\n * The sourceURL of the compiled template.\n * @param {string} [options.variable='obj']\n * The data object variable name.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the compiled template function.\n * @example\n *\n * // Use the \"interpolate\" delimiter to create a compiled template.\n * var compiled = _.template('hello <%= user %>!');\n * compiled({ 'user': 'fred' });\n * // => 'hello fred!'\n *\n * // Use the HTML \"escape\" delimiter to escape data property values.\n * var compiled = _.template('<b><%- value %></b>');\n * compiled({ 'value': '<script>' });\n * // => '<b><script></b>'\n *\n * // Use the \"evaluate\" delimiter to execute JavaScript and generate HTML.\n * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');\n * compiled({ 'users': ['fred', 'barney'] });\n * // => '<li>fred</li><li>barney</li>'\n *\n * // Use the internal `print` function in \"evaluate\" delimiters.\n * var compiled = _.template('<% print(\"hello \" + user); %>!');\n * compiled({ 'user': 'barney' });\n * // => 'hello barney!'\n *\n * // Use the ES template literal delimiter as an \"interpolate\" delimiter.\n * // Disable support by replacing the \"interpolate\" delimiter.\n * var compiled = _.template('hello ${ user }!');\n * compiled({ 'user': 'pebbles' });\n * // => 'hello pebbles!'\n *\n * // Use backslashes to treat delimiters as plain text.\n * var compiled = _.template('<%= \"\\\\<%- value %\\\\>\" %>');\n * compiled({ 'value': 'ignored' });\n * // => '<%- value %>'\n *\n * // Use the `imports` option to import `jQuery` as `jq`.\n * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';\n * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });\n * compiled({ 'users': ['fred', 'barney'] });\n * // => '<li>fred</li><li>barney</li>'\n *\n * // Use the `sourceURL` option to specify a custom sourceURL for the template.\n * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });\n * compiled(data);\n * // => Find the source of \"greeting.jst\" under the Sources tab or Resources panel of the web inspector.\n *\n * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.\n * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });\n * compiled.source;\n * // => function(data) {\n * // var __t, __p = '';\n * // __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';\n * // return __p;\n * // }\n *\n * // Use custom template delimiters.\n * _.templateSettings.interpolate = /{{([\\s\\S]+?)}}/g;\n * var compiled = _.template('hello {{ user }}!');\n * compiled({ 'user': 'mustache' });\n * // => 'hello mustache!'\n *\n * // Use the `source` property to inline compiled templates for meaningful\n * // line numbers in error messages and stack traces.\n * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\\\n * var JST = {\\\n * \"main\": ' + _.template(mainText).source + '\\\n * };\\\n * ');\n */\n function template(string, options, guard) {\n // Based on John Resig's `tmpl` implementation\n // (http://ejohn.org/blog/javascript-micro-templating/)\n // and Laura Doktorova's doT.js (https://github.com/olado/doT).\n var settings = lodash.templateSettings;\n\n if (guard && isIterateeCall(string, options, guard)) {\n options = undefined;\n }\n string = toString(string);\n options = assignInWith({}, options, settings, customDefaultsAssignIn);\n\n var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),\n importsKeys = keys(imports),\n importsValues = baseValues(imports, importsKeys);\n\n var isEscaping,\n isEvaluating,\n index = 0,\n interpolate = options.interpolate || reNoMatch,\n source = \"__p += '\";\n\n // Compile the regexp to match each delimiter.\n var reDelimiters = RegExp(\n (options.escape || reNoMatch).source + '|' +\n interpolate.source + '|' +\n (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +\n (options.evaluate || reNoMatch).source + '|$'\n , 'g');\n\n // Use a sourceURL for easier debugging.\n // The sourceURL gets injected into the source that's eval-ed, so be careful\n // with lookup (in case of e.g. prototype pollution), and strip newlines if any.\n // A newline wouldn't be a valid sourceURL anyway, and it'd enable code injection.\n var sourceURL = '//# sourceURL=' +\n (hasOwnProperty.call(options, 'sourceURL')\n ? (options.sourceURL + '').replace(/[\\r\\n]/g, ' ')\n : ('lodash.templateSources[' + (++templateCounter) + ']')\n ) + '\\n';\n\n string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {\n interpolateValue || (interpolateValue = esTemplateValue);\n\n // Escape characters that can't be included in string literals.\n source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);\n\n // Replace delimiters with snippets.\n if (escapeValue) {\n isEscaping = true;\n source += \"' +\\n__e(\" + escapeValue + \") +\\n'\";\n }\n if (evaluateValue) {\n isEvaluating = true;\n source += \"';\\n\" + evaluateValue + \";\\n__p += '\";\n }\n if (interpolateValue) {\n source += \"' +\\n((__t = (\" + interpolateValue + \")) == null ? '' : __t) +\\n'\";\n }\n index = offset + match.length;\n\n // The JS engine embedded in Adobe products needs `match` returned in\n // order to produce the correct `offset` value.\n return match;\n });\n\n source += \"';\\n\";\n\n // If `variable` is not specified wrap a with-statement around the generated\n // code to add the data object to the top of the scope chain.\n // Like with sourceURL, we take care to not check the option's prototype,\n // as this configuration is a code injection vector.\n var variable = hasOwnProperty.call(options, 'variable') && options.variable;\n if (!variable) {\n source = 'with (obj) {\\n' + source + '\\n}\\n';\n }\n // Cleanup code by stripping empty strings.\n source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)\n .replace(reEmptyStringMiddle, '$1')\n .replace(reEmptyStringTrailing, '$1;');\n\n // Frame code as the function body.\n source = 'function(' + (variable || 'obj') + ') {\\n' +\n (variable\n ? ''\n : 'obj || (obj = {});\\n'\n ) +\n \"var __t, __p = ''\" +\n (isEscaping\n ? ', __e = _.escape'\n : ''\n ) +\n (isEvaluating\n ? ', __j = Array.prototype.join;\\n' +\n \"function print() { __p += __j.call(arguments, '') }\\n\"\n : ';\\n'\n ) +\n source +\n 'return __p\\n}';\n\n var result = attempt(function() {\n return Function(importsKeys, sourceURL + 'return ' + source)\n .apply(undefined, importsValues);\n });\n\n // Provide the compiled function's source by its `toString` method or\n // the `source` property as a convenience for inlining compiled templates.\n result.source = source;\n if (isError(result)) {\n throw result;\n }\n return result;\n }\n\n /**\n * Converts `string`, as a whole, to lower case just like\n * [String#toLowerCase](https://mdn.io/toLowerCase).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.toLower('--Foo-Bar--');\n * // => '--foo-bar--'\n *\n * _.toLower('fooBar');\n * // => 'foobar'\n *\n * _.toLower('__FOO_BAR__');\n * // => '__foo_bar__'\n */\n function toLower(value) {\n return toString(value).toLowerCase();\n }\n\n /**\n * Converts `string`, as a whole, to upper case just like\n * [String#toUpperCase](https://mdn.io/toUpperCase).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the upper cased string.\n * @example\n *\n * _.toUpper('--foo-bar--');\n * // => '--FOO-BAR--'\n *\n * _.toUpper('fooBar');\n * // => 'FOOBAR'\n *\n * _.toUpper('__foo_bar__');\n * // => '__FOO_BAR__'\n */\n function toUpper(value) {\n return toString(value).toUpperCase();\n }\n\n /**\n * Removes leading and trailing whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trim(' abc ');\n * // => 'abc'\n *\n * _.trim('-_-abc-_-', '_-');\n * // => 'abc'\n *\n * _.map([' foo ', ' bar '], _.trim);\n * // => ['foo', 'bar']\n */\n function trim(string, chars, guard) {\n string = toString(string);\n if (string && (guard || chars === undefined)) {\n return string.replace(reTrim, '');\n }\n if (!string || !(chars = baseToString(chars))) {\n return string;\n }\n var strSymbols = stringToArray(string),\n chrSymbols = stringToArray(chars),\n start = charsStartIndex(strSymbols, chrSymbols),\n end = charsEndIndex(strSymbols, chrSymbols) + 1;\n\n return castSlice(strSymbols, start, end).join('');\n }\n\n /**\n * Removes trailing whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trimEnd(' abc ');\n * // => ' abc'\n *\n * _.trimEnd('-_-abc-_-', '_-');\n * // => '-_-abc'\n */\n function trimEnd(string, chars, guard) {\n string = toString(string);\n if (string && (guard || chars === undefined)) {\n return string.replace(reTrimEnd, '');\n }\n if (!string || !(chars = baseToString(chars))) {\n return string;\n }\n var strSymbols = stringToArray(string),\n end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;\n\n return castSlice(strSymbols, 0, end).join('');\n }\n\n /**\n * Removes leading whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trimStart(' abc ');\n * // => 'abc '\n *\n * _.trimStart('-_-abc-_-', '_-');\n * // => 'abc-_-'\n */\n function trimStart(string, chars, guard) {\n string = toString(string);\n if (string && (guard || chars === undefined)) {\n return string.replace(reTrimStart, '');\n }\n if (!string || !(chars = baseToString(chars))) {\n return string;\n }\n var strSymbols = stringToArray(string),\n start = charsStartIndex(strSymbols, stringToArray(chars));\n\n return castSlice(strSymbols, start).join('');\n }\n\n /**\n * Truncates `string` if it's longer than the given maximum string length.\n * The last characters of the truncated string are replaced with the omission\n * string which defaults to \"...\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to truncate.\n * @param {Object} [options={}] The options object.\n * @param {number} [options.length=30] The maximum string length.\n * @param {string} [options.omission='...'] The string to indicate text is omitted.\n * @param {RegExp|string} [options.separator] The separator pattern to truncate to.\n * @returns {string} Returns the truncated string.\n * @example\n *\n * _.truncate('hi-diddly-ho there, neighborino');\n * // => 'hi-diddly-ho there, neighbo...'\n *\n * _.truncate('hi-diddly-ho there, neighborino', {\n * 'length': 24,\n * 'separator': ' '\n * });\n * // => 'hi-diddly-ho there,...'\n *\n * _.truncate('hi-diddly-ho there, neighborino', {\n * 'length': 24,\n * 'separator': /,? +/\n * });\n * // => 'hi-diddly-ho there...'\n *\n * _.truncate('hi-diddly-ho there, neighborino', {\n * 'omission': ' [...]'\n * });\n * // => 'hi-diddly-ho there, neig [...]'\n */\n function truncate(string, options) {\n var length = DEFAULT_TRUNC_LENGTH,\n omission = DEFAULT_TRUNC_OMISSION;\n\n if (isObject(options)) {\n var separator = 'separator' in options ? options.separator : separator;\n length = 'length' in options ? toInteger(options.length) : length;\n omission = 'omission' in options ? baseToString(options.omission) : omission;\n }\n string = toString(string);\n\n var strLength = string.length;\n if (hasUnicode(string)) {\n var strSymbols = stringToArray(string);\n strLength = strSymbols.length;\n }\n if (length >= strLength) {\n return string;\n }\n var end = length - stringSize(omission);\n if (end < 1) {\n return omission;\n }\n var result = strSymbols\n ? castSlice(strSymbols, 0, end).join('')\n : string.slice(0, end);\n\n if (separator === undefined) {\n return result + omission;\n }\n if (strSymbols) {\n end += (result.length - end);\n }\n if (isRegExp(separator)) {\n if (string.slice(end).search(separator)) {\n var match,\n substring = result;\n\n if (!separator.global) {\n separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');\n }\n separator.lastIndex = 0;\n while ((match = separator.exec(substring))) {\n var newEnd = match.index;\n }\n result = result.slice(0, newEnd === undefined ? end : newEnd);\n }\n } else if (string.indexOf(baseToString(separator), end) != end) {\n var index = result.lastIndexOf(separator);\n if (index > -1) {\n result = result.slice(0, index);\n }\n }\n return result + omission;\n }\n\n /**\n * The inverse of `_.escape`; this method converts the HTML entities\n * `&`, `<`, `>`, `"`, and `'` in `string` to\n * their corresponding characters.\n *\n * **Note:** No other HTML entities are unescaped. To unescape additional\n * HTML entities use a third-party library like [_he_](https://mths.be/he).\n *\n * @static\n * @memberOf _\n * @since 0.6.0\n * @category String\n * @param {string} [string=''] The string to unescape.\n * @returns {string} Returns the unescaped string.\n * @example\n *\n * _.unescape('fred, barney, & pebbles');\n * // => 'fred, barney, & pebbles'\n */\n function unescape(string) {\n string = toString(string);\n return (string && reHasEscapedHtml.test(string))\n ? string.replace(reEscapedHtml, unescapeHtmlChar)\n : string;\n }\n\n /**\n * Converts `string`, as space separated words, to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the upper cased string.\n * @example\n *\n * _.upperCase('--foo-bar');\n * // => 'FOO BAR'\n *\n * _.upperCase('fooBar');\n * // => 'FOO BAR'\n *\n * _.upperCase('__foo_bar__');\n * // => 'FOO BAR'\n */\n var upperCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + word.toUpperCase();\n });\n\n /**\n * Converts the first character of `string` to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.upperFirst('fred');\n * // => 'Fred'\n *\n * _.upperFirst('FRED');\n * // => 'FRED'\n */\n var upperFirst = createCaseFirst('toUpperCase');\n\n /**\n * Splits `string` into an array of its words.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {RegExp|string} [pattern] The pattern to match words.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the words of `string`.\n * @example\n *\n * _.words('fred, barney, & pebbles');\n * // => ['fred', 'barney', 'pebbles']\n *\n * _.words('fred, barney, & pebbles', /[^, ]+/g);\n * // => ['fred', 'barney', '&', 'pebbles']\n */\n function words(string, pattern, guard) {\n string = toString(string);\n pattern = guard ? undefined : pattern;\n\n if (pattern === undefined) {\n return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n }\n return string.match(pattern) || [];\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Attempts to invoke `func`, returning either the result or the caught error\n * object. Any additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Function} func The function to attempt.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {*} Returns the `func` result or error object.\n * @example\n *\n * // Avoid throwing errors for invalid selectors.\n * var elements = _.attempt(function(selector) {\n * return document.querySelectorAll(selector);\n * }, '>_>');\n *\n * if (_.isError(elements)) {\n * elements = [];\n * }\n */\n var attempt = baseRest(function(func, args) {\n try {\n return apply(func, undefined, args);\n } catch (e) {\n return isError(e) ? e : new Error(e);\n }\n });\n\n /**\n * Binds methods of an object to the object itself, overwriting the existing\n * method.\n *\n * **Note:** This method doesn't set the \"length\" property of bound functions.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {Object} object The object to bind and assign the bound methods to.\n * @param {...(string|string[])} methodNames The object method names to bind.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var view = {\n * 'label': 'docs',\n * 'click': function() {\n * console.log('clicked ' + this.label);\n * }\n * };\n *\n * _.bindAll(view, ['click']);\n * jQuery(element).on('click', view.click);\n * // => Logs 'clicked docs' when clicked.\n */\n var bindAll = flatRest(function(object, methodNames) {\n arrayEach(methodNames, function(key) {\n key = toKey(key);\n baseAssignValue(object, key, bind(object[key], object));\n });\n return object;\n });\n\n /**\n * Creates a function that iterates over `pairs` and invokes the corresponding\n * function of the first predicate to return truthy. The predicate-function\n * pairs are invoked with the `this` binding and arguments of the created\n * function.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {Array} pairs The predicate-function pairs.\n * @returns {Function} Returns the new composite function.\n * @example\n *\n * var func = _.cond([\n * [_.matches({ 'a': 1 }), _.constant('matches A')],\n * [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],\n * [_.stubTrue, _.constant('no match')]\n * ]);\n *\n * func({ 'a': 1, 'b': 2 });\n * // => 'matches A'\n *\n * func({ 'a': 0, 'b': 1 });\n * // => 'matches B'\n *\n * func({ 'a': '1', 'b': '2' });\n * // => 'no match'\n */\n function cond(pairs) {\n var length = pairs == null ? 0 : pairs.length,\n toIteratee = getIteratee();\n\n pairs = !length ? [] : arrayMap(pairs, function(pair) {\n if (typeof pair[1] != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return [toIteratee(pair[0]), pair[1]];\n });\n\n return baseRest(function(args) {\n var index = -1;\n while (++index < length) {\n var pair = pairs[index];\n if (apply(pair[0], this, args)) {\n return apply(pair[1], this, args);\n }\n }\n });\n }\n\n /**\n * Creates a function that invokes the predicate properties of `source` with\n * the corresponding property values of a given object, returning `true` if\n * all predicates return truthy, else `false`.\n *\n * **Note:** The created function is equivalent to `_.conformsTo` with\n * `source` partially applied.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {Object} source The object of property predicates to conform to.\n * @returns {Function} Returns the new spec function.\n * @example\n *\n * var objects = [\n * { 'a': 2, 'b': 1 },\n * { 'a': 1, 'b': 2 }\n * ];\n *\n * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));\n * // => [{ 'a': 1, 'b': 2 }]\n */\n function conforms(source) {\n return baseConforms(baseClone(source, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\n function constant(value) {\n return function() {\n return value;\n };\n }\n\n /**\n * Checks `value` to determine whether a default value should be returned in\n * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,\n * or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.14.0\n * @category Util\n * @param {*} value The value to check.\n * @param {*} defaultValue The default value.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * _.defaultTo(1, 10);\n * // => 1\n *\n * _.defaultTo(undefined, 10);\n * // => 10\n */\n function defaultTo(value, defaultValue) {\n return (value == null || value !== value) ? defaultValue : value;\n }\n\n /**\n * Creates a function that returns the result of invoking the given functions\n * with the `this` binding of the created function, where each successive\n * invocation is supplied the return value of the previous.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {...(Function|Function[])} [funcs] The functions to invoke.\n * @returns {Function} Returns the new composite function.\n * @see _.flowRight\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var addSquare = _.flow([_.add, square]);\n * addSquare(1, 2);\n * // => 9\n */\n var flow = createFlow();\n\n /**\n * This method is like `_.flow` except that it creates a function that\n * invokes the given functions from right to left.\n *\n * @static\n * @since 3.0.0\n * @memberOf _\n * @category Util\n * @param {...(Function|Function[])} [funcs] The functions to invoke.\n * @returns {Function} Returns the new composite function.\n * @see _.flow\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var addSquare = _.flowRight([square, _.add]);\n * addSquare(1, 2);\n * // => 9\n */\n var flowRight = createFlow(true);\n\n /**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\n function identity(value) {\n return value;\n }\n\n /**\n * Creates a function that invokes `func` with the arguments of the created\n * function. If `func` is a property name, the created function returns the\n * property value for a given element. If `func` is an array or object, the\n * created function returns `true` for elements that contain the equivalent\n * source properties, otherwise it returns `false`.\n *\n * @static\n * @since 4.0.0\n * @memberOf _\n * @category Util\n * @param {*} [func=_.identity] The value to convert to a callback.\n * @returns {Function} Returns the callback.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));\n * // => [{ 'user': 'barney', 'age': 36, 'active': true }]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, _.iteratee(['user', 'fred']));\n * // => [{ 'user': 'fred', 'age': 40 }]\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, _.iteratee('user'));\n * // => ['barney', 'fred']\n *\n * // Create custom iteratee shorthands.\n * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {\n * return !_.isRegExp(func) ? iteratee(func) : function(string) {\n * return func.test(string);\n * };\n * });\n *\n * _.filter(['abc', 'def'], /ef/);\n * // => ['def']\n */\n function iteratee(func) {\n return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that performs a partial deep comparison between a given\n * object and `source`, returning `true` if the given object has equivalent\n * property values, else `false`.\n *\n * **Note:** The created function is equivalent to `_.isMatch` with `source`\n * partially applied.\n *\n * Partial comparisons will match empty array and empty object `source`\n * values against any array or object value, respectively. See `_.isEqual`\n * for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n * @example\n *\n * var objects = [\n * { 'a': 1, 'b': 2, 'c': 3 },\n * { 'a': 4, 'b': 5, 'c': 6 }\n * ];\n *\n * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));\n * // => [{ 'a': 4, 'b': 5, 'c': 6 }]\n */\n function matches(source) {\n return baseMatches(baseClone(source, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that performs a partial deep comparison between the\n * value at `path` of a given object to `srcValue`, returning `true` if the\n * object value is equivalent, else `false`.\n *\n * **Note:** Partial comparisons will match empty array and empty object\n * `srcValue` values against any array or object value, respectively. See\n * `_.isEqual` for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n * @example\n *\n * var objects = [\n * { 'a': 1, 'b': 2, 'c': 3 },\n * { 'a': 4, 'b': 5, 'c': 6 }\n * ];\n *\n * _.find(objects, _.matchesProperty('a', 4));\n * // => { 'a': 4, 'b': 5, 'c': 6 }\n */\n function matchesProperty(path, srcValue) {\n return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that invokes the method at `path` of a given object.\n * Any additional arguments are provided to the invoked method.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Util\n * @param {Array|string} path The path of the method to invoke.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {Function} Returns the new invoker function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': _.constant(2) } },\n * { 'a': { 'b': _.constant(1) } }\n * ];\n *\n * _.map(objects, _.method('a.b'));\n * // => [2, 1]\n *\n * _.map(objects, _.method(['a', 'b']));\n * // => [2, 1]\n */\n var method = baseRest(function(path, args) {\n return function(object) {\n return baseInvoke(object, path, args);\n };\n });\n\n /**\n * The opposite of `_.method`; this method creates a function that invokes\n * the method at a given path of `object`. Any additional arguments are\n * provided to the invoked method.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Util\n * @param {Object} object The object to query.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {Function} Returns the new invoker function.\n * @example\n *\n * var array = _.times(3, _.constant),\n * object = { 'a': array, 'b': array, 'c': array };\n *\n * _.map(['a[2]', 'c[0]'], _.methodOf(object));\n * // => [2, 0]\n *\n * _.map([['a', '2'], ['c', '0']], _.methodOf(object));\n * // => [2, 0]\n */\n var methodOf = baseRest(function(object, args) {\n return function(path) {\n return baseInvoke(object, path, args);\n };\n });\n\n /**\n * Adds all own enumerable string keyed function properties of a source\n * object to the destination object. If `object` is a function, then methods\n * are added to its prototype as well.\n *\n * **Note:** Use `_.runInContext` to create a pristine `lodash` function to\n * avoid conflicts caused by modifying the original.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {Function|Object} [object=lodash] The destination object.\n * @param {Object} source The object of functions to add.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.chain=true] Specify whether mixins are chainable.\n * @returns {Function|Object} Returns `object`.\n * @example\n *\n * function vowels(string) {\n * return _.filter(string, function(v) {\n * return /[aeiou]/i.test(v);\n * });\n * }\n *\n * _.mixin({ 'vowels': vowels });\n * _.vowels('fred');\n * // => ['e']\n *\n * _('fred').vowels().value();\n * // => ['e']\n *\n * _.mixin({ 'vowels': vowels }, { 'chain': false });\n * _('fred').vowels();\n * // => ['e']\n */\n function mixin(object, source, options) {\n var props = keys(source),\n methodNames = baseFunctions(source, props);\n\n if (options == null &&\n !(isObject(source) && (methodNames.length || !props.length))) {\n options = source;\n source = object;\n object = this;\n methodNames = baseFunctions(source, keys(source));\n }\n var chain = !(isObject(options) && 'chain' in options) || !!options.chain,\n isFunc = isFunction(object);\n\n arrayEach(methodNames, function(methodName) {\n var func = source[methodName];\n object[methodName] = func;\n if (isFunc) {\n object.prototype[methodName] = function() {\n var chainAll = this.__chain__;\n if (chain || chainAll) {\n var result = object(this.__wrapped__),\n actions = result.__actions__ = copyArray(this.__actions__);\n\n actions.push({ 'func': func, 'args': arguments, 'thisArg': object });\n result.__chain__ = chainAll;\n return result;\n }\n return func.apply(object, arrayPush([this.value()], arguments));\n };\n }\n });\n\n return object;\n }\n\n /**\n * Reverts the `_` variable to its previous value and returns a reference to\n * the `lodash` function.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @returns {Function} Returns the `lodash` function.\n * @example\n *\n * var lodash = _.noConflict();\n */\n function noConflict() {\n if (root._ === this) {\n root._ = oldDash;\n }\n return this;\n }\n\n /**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\n function noop() {\n // No operation performed.\n }\n\n /**\n * Creates a function that gets the argument at index `n`. If `n` is negative,\n * the nth argument from the end is returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {number} [n=0] The index of the argument to return.\n * @returns {Function} Returns the new pass-thru function.\n * @example\n *\n * var func = _.nthArg(1);\n * func('a', 'b', 'c', 'd');\n * // => 'b'\n *\n * var func = _.nthArg(-2);\n * func('a', 'b', 'c', 'd');\n * // => 'c'\n */\n function nthArg(n) {\n n = toInteger(n);\n return baseRest(function(args) {\n return baseNth(args, n);\n });\n }\n\n /**\n * Creates a function that invokes `iteratees` with the arguments it receives\n * and returns their results.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to invoke.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var func = _.over([Math.max, Math.min]);\n *\n * func(1, 2, 3, 4);\n * // => [4, 1]\n */\n var over = createOver(arrayMap);\n\n /**\n * Creates a function that checks if **all** of the `predicates` return\n * truthy when invoked with the arguments it receives.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {...(Function|Function[])} [predicates=[_.identity]]\n * The predicates to check.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var func = _.overEvery([Boolean, isFinite]);\n *\n * func('1');\n * // => true\n *\n * func(null);\n * // => false\n *\n * func(NaN);\n * // => false\n */\n var overEvery = createOver(arrayEvery);\n\n /**\n * Creates a function that checks if **any** of the `predicates` return\n * truthy when invoked with the arguments it receives.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {...(Function|Function[])} [predicates=[_.identity]]\n * The predicates to check.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var func = _.overSome([Boolean, isFinite]);\n *\n * func('1');\n * // => true\n *\n * func(null);\n * // => true\n *\n * func(NaN);\n * // => false\n */\n var overSome = createOver(arraySome);\n\n /**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\n function property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n }\n\n /**\n * The opposite of `_.property`; this method creates a function that returns\n * the value at a given path of `object`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var array = [0, 1, 2],\n * object = { 'a': array, 'b': array, 'c': array };\n *\n * _.map(['a[2]', 'c[0]'], _.propertyOf(object));\n * // => [2, 0]\n *\n * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));\n * // => [2, 0]\n */\n function propertyOf(object) {\n return function(path) {\n return object == null ? undefined : baseGet(object, path);\n };\n }\n\n /**\n * Creates an array of numbers (positive and/or negative) progressing from\n * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n * `start` is specified without an `end` or `step`. If `end` is not specified,\n * it's set to `start` with `start` then set to `0`.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.rangeRight\n * @example\n *\n * _.range(4);\n * // => [0, 1, 2, 3]\n *\n * _.range(-4);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 5);\n * // => [1, 2, 3, 4]\n *\n * _.range(0, 20, 5);\n * // => [0, 5, 10, 15]\n *\n * _.range(0, -4, -1);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.range(0);\n * // => []\n */\n var range = createRange();\n\n /**\n * This method is like `_.range` except that it populates values in\n * descending order.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.range\n * @example\n *\n * _.rangeRight(4);\n * // => [3, 2, 1, 0]\n *\n * _.rangeRight(-4);\n * // => [-3, -2, -1, 0]\n *\n * _.rangeRight(1, 5);\n * // => [4, 3, 2, 1]\n *\n * _.rangeRight(0, 20, 5);\n * // => [15, 10, 5, 0]\n *\n * _.rangeRight(0, -4, -1);\n * // => [-3, -2, -1, 0]\n *\n * _.rangeRight(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.rangeRight(0);\n * // => []\n */\n var rangeRight = createRange(true);\n\n /**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\n function stubArray() {\n return [];\n }\n\n /**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\n function stubFalse() {\n return false;\n }\n\n /**\n * This method returns a new empty object.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Object} Returns the new empty object.\n * @example\n *\n * var objects = _.times(2, _.stubObject);\n *\n * console.log(objects);\n * // => [{}, {}]\n *\n * console.log(objects[0] === objects[1]);\n * // => false\n */\n function stubObject() {\n return {};\n }\n\n /**\n * This method returns an empty string.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {string} Returns the empty string.\n * @example\n *\n * _.times(2, _.stubString);\n * // => ['', '']\n */\n function stubString() {\n return '';\n }\n\n /**\n * This method returns `true`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `true`.\n * @example\n *\n * _.times(2, _.stubTrue);\n * // => [true, true]\n */\n function stubTrue() {\n return true;\n }\n\n /**\n * Invokes the iteratee `n` times, returning an array of the results of\n * each invocation. The iteratee is invoked with one argument; (index).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n * @example\n *\n * _.times(3, String);\n * // => ['0', '1', '2']\n *\n * _.times(4, _.constant(0));\n * // => [0, 0, 0, 0]\n */\n function times(n, iteratee) {\n n = toInteger(n);\n if (n < 1 || n > MAX_SAFE_INTEGER) {\n return [];\n }\n var index = MAX_ARRAY_LENGTH,\n length = nativeMin(n, MAX_ARRAY_LENGTH);\n\n iteratee = getIteratee(iteratee);\n n -= MAX_ARRAY_LENGTH;\n\n var result = baseTimes(length, iteratee);\n while (++index < n) {\n iteratee(index);\n }\n return result;\n }\n\n /**\n * Converts `value` to a property path array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {*} value The value to convert.\n * @returns {Array} Returns the new property path array.\n * @example\n *\n * _.toPath('a.b.c');\n * // => ['a', 'b', 'c']\n *\n * _.toPath('a[0].b.c');\n * // => ['a', '0', 'b', 'c']\n */\n function toPath(value) {\n if (isArray(value)) {\n return arrayMap(value, toKey);\n }\n return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));\n }\n\n /**\n * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {string} [prefix=''] The value to prefix the ID with.\n * @returns {string} Returns the unique ID.\n * @example\n *\n * _.uniqueId('contact_');\n * // => 'contact_104'\n *\n * _.uniqueId();\n * // => '105'\n */\n function uniqueId(prefix) {\n var id = ++idCounter;\n return toString(prefix) + id;\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Adds two numbers.\n *\n * @static\n * @memberOf _\n * @since 3.4.0\n * @category Math\n * @param {number} augend The first number in an addition.\n * @param {number} addend The second number in an addition.\n * @returns {number} Returns the total.\n * @example\n *\n * _.add(6, 4);\n * // => 10\n */\n var add = createMathOperation(function(augend, addend) {\n return augend + addend;\n }, 0);\n\n /**\n * Computes `number` rounded up to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round up.\n * @param {number} [precision=0] The precision to round up to.\n * @returns {number} Returns the rounded up number.\n * @example\n *\n * _.ceil(4.006);\n * // => 5\n *\n * _.ceil(6.004, 2);\n * // => 6.01\n *\n * _.ceil(6040, -2);\n * // => 6100\n */\n var ceil = createRound('ceil');\n\n /**\n * Divide two numbers.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Math\n * @param {number} dividend The first number in a division.\n * @param {number} divisor The second number in a division.\n * @returns {number} Returns the quotient.\n * @example\n *\n * _.divide(6, 4);\n * // => 1.5\n */\n var divide = createMathOperation(function(dividend, divisor) {\n return dividend / divisor;\n }, 1);\n\n /**\n * Computes `number` rounded down to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round down.\n * @param {number} [precision=0] The precision to round down to.\n * @returns {number} Returns the rounded down number.\n * @example\n *\n * _.floor(4.006);\n * // => 4\n *\n * _.floor(0.046, 2);\n * // => 0.04\n *\n * _.floor(4060, -2);\n * // => 4000\n */\n var floor = createRound('floor');\n\n /**\n * Computes the maximum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * _.max([4, 2, 8, 6]);\n * // => 8\n *\n * _.max([]);\n * // => undefined\n */\n function max(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseGt)\n : undefined;\n }\n\n /**\n * This method is like `_.max` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * the value is ranked. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * _.maxBy(objects, function(o) { return o.n; });\n * // => { 'n': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.maxBy(objects, 'n');\n * // => { 'n': 2 }\n */\n function maxBy(array, iteratee) {\n return (array && array.length)\n ? baseExtremum(array, getIteratee(iteratee, 2), baseGt)\n : undefined;\n }\n\n /**\n * Computes the mean of the values in `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {number} Returns the mean.\n * @example\n *\n * _.mean([4, 2, 8, 6]);\n * // => 5\n */\n function mean(array) {\n return baseMean(array, identity);\n }\n\n /**\n * This method is like `_.mean` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the value to be averaged.\n * The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the mean.\n * @example\n *\n * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n *\n * _.meanBy(objects, function(o) { return o.n; });\n * // => 5\n *\n * // The `_.property` iteratee shorthand.\n * _.meanBy(objects, 'n');\n * // => 5\n */\n function meanBy(array, iteratee) {\n return baseMean(array, getIteratee(iteratee, 2));\n }\n\n /**\n * Computes the minimum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * _.min([4, 2, 8, 6]);\n * // => 2\n *\n * _.min([]);\n * // => undefined\n */\n function min(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseLt)\n : undefined;\n }\n\n /**\n * This method is like `_.min` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * the value is ranked. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * _.minBy(objects, function(o) { return o.n; });\n * // => { 'n': 1 }\n *\n * // The `_.property` iteratee shorthand.\n * _.minBy(objects, 'n');\n * // => { 'n': 1 }\n */\n function minBy(array, iteratee) {\n return (array && array.length)\n ? baseExtremum(array, getIteratee(iteratee, 2), baseLt)\n : undefined;\n }\n\n /**\n * Multiply two numbers.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Math\n * @param {number} multiplier The first number in a multiplication.\n * @param {number} multiplicand The second number in a multiplication.\n * @returns {number} Returns the product.\n * @example\n *\n * _.multiply(6, 4);\n * // => 24\n */\n var multiply = createMathOperation(function(multiplier, multiplicand) {\n return multiplier * multiplicand;\n }, 1);\n\n /**\n * Computes `number` rounded to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round.\n * @param {number} [precision=0] The precision to round to.\n * @returns {number} Returns the rounded number.\n * @example\n *\n * _.round(4.006);\n * // => 4\n *\n * _.round(4.006, 2);\n * // => 4.01\n *\n * _.round(4060, -2);\n * // => 4100\n */\n var round = createRound('round');\n\n /**\n * Subtract two numbers.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {number} minuend The first number in a subtraction.\n * @param {number} subtrahend The second number in a subtraction.\n * @returns {number} Returns the difference.\n * @example\n *\n * _.subtract(6, 4);\n * // => 2\n */\n var subtract = createMathOperation(function(minuend, subtrahend) {\n return minuend - subtrahend;\n }, 0);\n\n /**\n * Computes the sum of the values in `array`.\n *\n * @static\n * @memberOf _\n * @since 3.4.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {number} Returns the sum.\n * @example\n *\n * _.sum([4, 2, 8, 6]);\n * // => 20\n */\n function sum(array) {\n return (array && array.length)\n ? baseSum(array, identity)\n : 0;\n }\n\n /**\n * This method is like `_.sum` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the value to be summed.\n * The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the sum.\n * @example\n *\n * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n *\n * _.sumBy(objects, function(o) { return o.n; });\n * // => 20\n *\n * // The `_.property` iteratee shorthand.\n * _.sumBy(objects, 'n');\n * // => 20\n */\n function sumBy(array, iteratee) {\n return (array && array.length)\n ? baseSum(array, getIteratee(iteratee, 2))\n : 0;\n }\n\n /*------------------------------------------------------------------------*/\n\n // Add methods that return wrapped values in chain sequences.\n lodash.after = after;\n lodash.ary = ary;\n lodash.assign = assign;\n lodash.assignIn = assignIn;\n lodash.assignInWith = assignInWith;\n lodash.assignWith = assignWith;\n lodash.at = at;\n lodash.before = before;\n lodash.bind = bind;\n lodash.bindAll = bindAll;\n lodash.bindKey = bindKey;\n lodash.castArray = castArray;\n lodash.chain = chain;\n lodash.chunk = chunk;\n lodash.compact = compact;\n lodash.concat = concat;\n lodash.cond = cond;\n lodash.conforms = conforms;\n lodash.constant = constant;\n lodash.countBy = countBy;\n lodash.create = create;\n lodash.curry = curry;\n lodash.curryRight = curryRight;\n lodash.debounce = debounce;\n lodash.defaults = defaults;\n lodash.defaultsDeep = defaultsDeep;\n lodash.defer = defer;\n lodash.delay = delay;\n lodash.difference = difference;\n lodash.differenceBy = differenceBy;\n lodash.differenceWith = differenceWith;\n lodash.drop = drop;\n lodash.dropRight = dropRight;\n lodash.dropRightWhile = dropRightWhile;\n lodash.dropWhile = dropWhile;\n lodash.fill = fill;\n lodash.filter = filter;\n lodash.flatMap = flatMap;\n lodash.flatMapDeep = flatMapDeep;\n lodash.flatMapDepth = flatMapDepth;\n lodash.flatten = flatten;\n lodash.flattenDeep = flattenDeep;\n lodash.flattenDepth = flattenDepth;\n lodash.flip = flip;\n lodash.flow = flow;\n lodash.flowRight = flowRight;\n lodash.fromPairs = fromPairs;\n lodash.functions = functions;\n lodash.functionsIn = functionsIn;\n lodash.groupBy = groupBy;\n lodash.initial = initial;\n lodash.intersection = intersection;\n lodash.intersectionBy = intersectionBy;\n lodash.intersectionWith = intersectionWith;\n lodash.invert = invert;\n lodash.invertBy = invertBy;\n lodash.invokeMap = invokeMap;\n lodash.iteratee = iteratee;\n lodash.keyBy = keyBy;\n lodash.keys = keys;\n lodash.keysIn = keysIn;\n lodash.map = map;\n lodash.mapKeys = mapKeys;\n lodash.mapValues = mapValues;\n lodash.matches = matches;\n lodash.matchesProperty = matchesProperty;\n lodash.memoize = memoize;\n lodash.merge = merge;\n lodash.mergeWith = mergeWith;\n lodash.method = method;\n lodash.methodOf = methodOf;\n lodash.mixin = mixin;\n lodash.negate = negate;\n lodash.nthArg = nthArg;\n lodash.omit = omit;\n lodash.omitBy = omitBy;\n lodash.once = once;\n lodash.orderBy = orderBy;\n lodash.over = over;\n lodash.overArgs = overArgs;\n lodash.overEvery = overEvery;\n lodash.overSome = overSome;\n lodash.partial = partial;\n lodash.partialRight = partialRight;\n lodash.partition = partition;\n lodash.pick = pick;\n lodash.pickBy = pickBy;\n lodash.property = property;\n lodash.propertyOf = propertyOf;\n lodash.pull = pull;\n lodash.pullAll = pullAll;\n lodash.pullAllBy = pullAllBy;\n lodash.pullAllWith = pullAllWith;\n lodash.pullAt = pullAt;\n lodash.range = range;\n lodash.rangeRight = rangeRight;\n lodash.rearg = rearg;\n lodash.reject = reject;\n lodash.remove = remove;\n lodash.rest = rest;\n lodash.reverse = reverse;\n lodash.sampleSize = sampleSize;\n lodash.set = set;\n lodash.setWith = setWith;\n lodash.shuffle = shuffle;\n lodash.slice = slice;\n lodash.sortBy = sortBy;\n lodash.sortedUniq = sortedUniq;\n lodash.sortedUniqBy = sortedUniqBy;\n lodash.split = split;\n lodash.spread = spread;\n lodash.tail = tail;\n lodash.take = take;\n lodash.takeRight = takeRight;\n lodash.takeRightWhile = takeRightWhile;\n lodash.takeWhile = takeWhile;\n lodash.tap = tap;\n lodash.throttle = throttle;\n lodash.thru = thru;\n lodash.toArray = toArray;\n lodash.toPairs = toPairs;\n lodash.toPairsIn = toPairsIn;\n lodash.toPath = toPath;\n lodash.toPlainObject = toPlainObject;\n lodash.transform = transform;\n lodash.unary = unary;\n lodash.union = union;\n lodash.unionBy = unionBy;\n lodash.unionWith = unionWith;\n lodash.uniq = uniq;\n lodash.uniqBy = uniqBy;\n lodash.uniqWith = uniqWith;\n lodash.unset = unset;\n lodash.unzip = unzip;\n lodash.unzipWith = unzipWith;\n lodash.update = update;\n lodash.updateWith = updateWith;\n lodash.values = values;\n lodash.valuesIn = valuesIn;\n lodash.without = without;\n lodash.words = words;\n lodash.wrap = wrap;\n lodash.xor = xor;\n lodash.xorBy = xorBy;\n lodash.xorWith = xorWith;\n lodash.zip = zip;\n lodash.zipObject = zipObject;\n lodash.zipObjectDeep = zipObjectDeep;\n lodash.zipWith = zipWith;\n\n // Add aliases.\n lodash.entries = toPairs;\n lodash.entriesIn = toPairsIn;\n lodash.extend = assignIn;\n lodash.extendWith = assignInWith;\n\n // Add methods to `lodash.prototype`.\n mixin(lodash, lodash);\n\n /*------------------------------------------------------------------------*/\n\n // Add methods that return unwrapped values in chain sequences.\n lodash.add = add;\n lodash.attempt = attempt;\n lodash.camelCase = camelCase;\n lodash.capitalize = capitalize;\n lodash.ceil = ceil;\n lodash.clamp = clamp;\n lodash.clone = clone;\n lodash.cloneDeep = cloneDeep;\n lodash.cloneDeepWith = cloneDeepWith;\n lodash.cloneWith = cloneWith;\n lodash.conformsTo = conformsTo;\n lodash.deburr = deburr;\n lodash.defaultTo = defaultTo;\n lodash.divide = divide;\n lodash.endsWith = endsWith;\n lodash.eq = eq;\n lodash.escape = escape;\n lodash.escapeRegExp = escapeRegExp;\n lodash.every = every;\n lodash.find = find;\n lodash.findIndex = findIndex;\n lodash.findKey = findKey;\n lodash.findLast = findLast;\n lodash.findLastIndex = findLastIndex;\n lodash.findLastKey = findLastKey;\n lodash.floor = floor;\n lodash.forEach = forEach;\n lodash.forEachRight = forEachRight;\n lodash.forIn = forIn;\n lodash.forInRight = forInRight;\n lodash.forOwn = forOwn;\n lodash.forOwnRight = forOwnRight;\n lodash.get = get;\n lodash.gt = gt;\n lodash.gte = gte;\n lodash.has = has;\n lodash.hasIn = hasIn;\n lodash.head = head;\n lodash.identity = identity;\n lodash.includes = includes;\n lodash.indexOf = indexOf;\n lodash.inRange = inRange;\n lodash.invoke = invoke;\n lodash.isArguments = isArguments;\n lodash.isArray = isArray;\n lodash.isArrayBuffer = isArrayBuffer;\n lodash.isArrayLike = isArrayLike;\n lodash.isArrayLikeObject = isArrayLikeObject;\n lodash.isBoolean = isBoolean;\n lodash.isBuffer = isBuffer;\n lodash.isDate = isDate;\n lodash.isElement = isElement;\n lodash.isEmpty = isEmpty;\n lodash.isEqual = isEqual;\n lodash.isEqualWith = isEqualWith;\n lodash.isError = isError;\n lodash.isFinite = isFinite;\n lodash.isFunction = isFunction;\n lodash.isInteger = isInteger;\n lodash.isLength = isLength;\n lodash.isMap = isMap;\n lodash.isMatch = isMatch;\n lodash.isMatchWith = isMatchWith;\n lodash.isNaN = isNaN;\n lodash.isNative = isNative;\n lodash.isNil = isNil;\n lodash.isNull = isNull;\n lodash.isNumber = isNumber;\n lodash.isObject = isObject;\n lodash.isObjectLike = isObjectLike;\n lodash.isPlainObject = isPlainObject;\n lodash.isRegExp = isRegExp;\n lodash.isSafeInteger = isSafeInteger;\n lodash.isSet = isSet;\n lodash.isString = isString;\n lodash.isSymbol = isSymbol;\n lodash.isTypedArray = isTypedArray;\n lodash.isUndefined = isUndefined;\n lodash.isWeakMap = isWeakMap;\n lodash.isWeakSet = isWeakSet;\n lodash.join = join;\n lodash.kebabCase = kebabCase;\n lodash.last = last;\n lodash.lastIndexOf = lastIndexOf;\n lodash.lowerCase = lowerCase;\n lodash.lowerFirst = lowerFirst;\n lodash.lt = lt;\n lodash.lte = lte;\n lodash.max = max;\n lodash.maxBy = maxBy;\n lodash.mean = mean;\n lodash.meanBy = meanBy;\n lodash.min = min;\n lodash.minBy = minBy;\n lodash.stubArray = stubArray;\n lodash.stubFalse = stubFalse;\n lodash.stubObject = stubObject;\n lodash.stubString = stubString;\n lodash.stubTrue = stubTrue;\n lodash.multiply = multiply;\n lodash.nth = nth;\n lodash.noConflict = noConflict;\n lodash.noop = noop;\n lodash.now = now;\n lodash.pad = pad;\n lodash.padEnd = padEnd;\n lodash.padStart = padStart;\n lodash.parseInt = parseInt;\n lodash.random = random;\n lodash.reduce = reduce;\n lodash.reduceRight = reduceRight;\n lodash.repeat = repeat;\n lodash.replace = replace;\n lodash.result = result;\n lodash.round = round;\n lodash.runInContext = runInContext;\n lodash.sample = sample;\n lodash.size = size;\n lodash.snakeCase = snakeCase;\n lodash.some = some;\n lodash.sortedIndex = sortedIndex;\n lodash.sortedIndexBy = sortedIndexBy;\n lodash.sortedIndexOf = sortedIndexOf;\n lodash.sortedLastIndex = sortedLastIndex;\n lodash.sortedLastIndexBy = sortedLastIndexBy;\n lodash.sortedLastIndexOf = sortedLastIndexOf;\n lodash.startCase = startCase;\n lodash.startsWith = startsWith;\n lodash.subtract = subtract;\n lodash.sum = sum;\n lodash.sumBy = sumBy;\n lodash.template = template;\n lodash.times = times;\n lodash.toFinite = toFinite;\n lodash.toInteger = toInteger;\n lodash.toLength = toLength;\n lodash.toLower = toLower;\n lodash.toNumber = toNumber;\n lodash.toSafeInteger = toSafeInteger;\n lodash.toString = toString;\n lodash.toUpper = toUpper;\n lodash.trim = trim;\n lodash.trimEnd = trimEnd;\n lodash.trimStart = trimStart;\n lodash.truncate = truncate;\n lodash.unescape = unescape;\n lodash.uniqueId = uniqueId;\n lodash.upperCase = upperCase;\n lodash.upperFirst = upperFirst;\n\n // Add aliases.\n lodash.each = forEach;\n lodash.eachRight = forEachRight;\n lodash.first = head;\n\n mixin(lodash, (function() {\n var source = {};\n baseForOwn(lodash, function(func, methodName) {\n if (!hasOwnProperty.call(lodash.prototype, methodName)) {\n source[methodName] = func;\n }\n });\n return source;\n }()), { 'chain': false });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * The semantic version number.\n *\n * @static\n * @memberOf _\n * @type {string}\n */\n lodash.VERSION = VERSION;\n\n // Assign default placeholders.\n arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {\n lodash[methodName].placeholder = lodash;\n });\n\n // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.\n arrayEach(['drop', 'take'], function(methodName, index) {\n LazyWrapper.prototype[methodName] = function(n) {\n n = n === undefined ? 1 : nativeMax(toInteger(n), 0);\n\n var result = (this.__filtered__ && !index)\n ? new LazyWrapper(this)\n : this.clone();\n\n if (result.__filtered__) {\n result.__takeCount__ = nativeMin(n, result.__takeCount__);\n } else {\n result.__views__.push({\n 'size': nativeMin(n, MAX_ARRAY_LENGTH),\n 'type': methodName + (result.__dir__ < 0 ? 'Right' : '')\n });\n }\n return result;\n };\n\n LazyWrapper.prototype[methodName + 'Right'] = function(n) {\n return this.reverse()[methodName](n).reverse();\n };\n });\n\n // Add `LazyWrapper` methods that accept an `iteratee` value.\n arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {\n var type = index + 1,\n isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;\n\n LazyWrapper.prototype[methodName] = function(iteratee) {\n var result = this.clone();\n result.__iteratees__.push({\n 'iteratee': getIteratee(iteratee, 3),\n 'type': type\n });\n result.__filtered__ = result.__filtered__ || isFilter;\n return result;\n };\n });\n\n // Add `LazyWrapper` methods for `_.head` and `_.last`.\n arrayEach(['head', 'last'], function(methodName, index) {\n var takeName = 'take' + (index ? 'Right' : '');\n\n LazyWrapper.prototype[methodName] = function() {\n return this[takeName](1).value()[0];\n };\n });\n\n // Add `LazyWrapper` methods for `_.initial` and `_.tail`.\n arrayEach(['initial', 'tail'], function(methodName, index) {\n var dropName = 'drop' + (index ? '' : 'Right');\n\n LazyWrapper.prototype[methodName] = function() {\n return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);\n };\n });\n\n LazyWrapper.prototype.compact = function() {\n return this.filter(identity);\n };\n\n LazyWrapper.prototype.find = function(predicate) {\n return this.filter(predicate).head();\n };\n\n LazyWrapper.prototype.findLast = function(predicate) {\n return this.reverse().find(predicate);\n };\n\n LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {\n if (typeof path == 'function') {\n return new LazyWrapper(this);\n }\n return this.map(function(value) {\n return baseInvoke(value, path, args);\n });\n });\n\n LazyWrapper.prototype.reject = function(predicate) {\n return this.filter(negate(getIteratee(predicate)));\n };\n\n LazyWrapper.prototype.slice = function(start, end) {\n start = toInteger(start);\n\n var result = this;\n if (result.__filtered__ && (start > 0 || end < 0)) {\n return new LazyWrapper(result);\n }\n if (start < 0) {\n result = result.takeRight(-start);\n } else if (start) {\n result = result.drop(start);\n }\n if (end !== undefined) {\n end = toInteger(end);\n result = end < 0 ? result.dropRight(-end) : result.take(end - start);\n }\n return result;\n };\n\n LazyWrapper.prototype.takeRightWhile = function(predicate) {\n return this.reverse().takeWhile(predicate).reverse();\n };\n\n LazyWrapper.prototype.toArray = function() {\n return this.take(MAX_ARRAY_LENGTH);\n };\n\n // Add `LazyWrapper` methods to `lodash.prototype`.\n baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),\n isTaker = /^(?:head|last)$/.test(methodName),\n lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],\n retUnwrapped = isTaker || /^find/.test(methodName);\n\n if (!lodashFunc) {\n return;\n }\n lodash.prototype[methodName] = function() {\n var value = this.__wrapped__,\n args = isTaker ? [1] : arguments,\n isLazy = value instanceof LazyWrapper,\n iteratee = args[0],\n useLazy = isLazy || isArray(value);\n\n var interceptor = function(value) {\n var result = lodashFunc.apply(lodash, arrayPush([value], args));\n return (isTaker && chainAll) ? result[0] : result;\n };\n\n if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {\n // Avoid lazy use if the iteratee has a \"length\" value other than `1`.\n isLazy = useLazy = false;\n }\n var chainAll = this.__chain__,\n isHybrid = !!this.__actions__.length,\n isUnwrapped = retUnwrapped && !chainAll,\n onlyLazy = isLazy && !isHybrid;\n\n if (!retUnwrapped && useLazy) {\n value = onlyLazy ? value : new LazyWrapper(this);\n var result = func.apply(value, args);\n result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });\n return new LodashWrapper(result, chainAll);\n }\n if (isUnwrapped && onlyLazy) {\n return func.apply(this, args);\n }\n result = this.thru(interceptor);\n return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;\n };\n });\n\n // Add `Array` methods to `lodash.prototype`.\n arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {\n var func = arrayProto[methodName],\n chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',\n retUnwrapped = /^(?:pop|shift)$/.test(methodName);\n\n lodash.prototype[methodName] = function() {\n var args = arguments;\n if (retUnwrapped && !this.__chain__) {\n var value = this.value();\n return func.apply(isArray(value) ? value : [], args);\n }\n return this[chainName](function(value) {\n return func.apply(isArray(value) ? value : [], args);\n });\n };\n });\n\n // Map minified method names to their real names.\n baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n var lodashFunc = lodash[methodName];\n if (lodashFunc) {\n var key = lodashFunc.name + '';\n if (!hasOwnProperty.call(realNames, key)) {\n realNames[key] = [];\n }\n realNames[key].push({ 'name': methodName, 'func': lodashFunc });\n }\n });\n\n realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{\n 'name': 'wrapper',\n 'func': undefined\n }];\n\n // Add methods to `LazyWrapper`.\n LazyWrapper.prototype.clone = lazyClone;\n LazyWrapper.prototype.reverse = lazyReverse;\n LazyWrapper.prototype.value = lazyValue;\n\n // Add chain sequence methods to the `lodash` wrapper.\n lodash.prototype.at = wrapperAt;\n lodash.prototype.chain = wrapperChain;\n lodash.prototype.commit = wrapperCommit;\n lodash.prototype.next = wrapperNext;\n lodash.prototype.plant = wrapperPlant;\n lodash.prototype.reverse = wrapperReverse;\n lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;\n\n // Add lazy aliases.\n lodash.prototype.first = lodash.prototype.head;\n\n if (symIterator) {\n lodash.prototype[symIterator] = wrapperToIterator;\n }\n return lodash;\n });\n\n /*--------------------------------------------------------------------------*/\n\n // Export lodash.\n var _ = runInContext();\n\n // Some AMD build optimizers, like r.js, check for condition patterns like:\n if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {\n // Expose Lodash on the global object to prevent errors when Lodash is\n // loaded by a script tag in the presence of an AMD loader.\n // See http://requirejs.org/docs/errors.html#mismatch for more details.\n // Use `_.noConflict` to remove Lodash from the global object.\n root._ = _;\n\n // Define as an anonymous module so, through path mapping, it can be\n // referenced as the \"underscore\" module.\n define(function() {\n return _;\n });\n }\n // Check for `exports` after `define` in case a build optimizer adds it.\n else if (freeModule) {\n // Export for Node.js.\n (freeModule.exports = _)._ = _;\n // Export for CommonJS support.\n freeExports._ = _;\n }\n else {\n // Export to the global object.\n root._ = _;\n }\n}.call(this));\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar bignumber_js_1 = require(\"bignumber.js\");\nvar LocaleUtil = require(\"./LocaleValue\");\nvar Proxy_1 = require(\"./Proxy\");\nvar prototype = String.prototype;\nif (prototype.contains === undefined) {\n prototype.contains = function (str) {\n return this.indexOf(str) >= 0;\n };\n}\nif (prototype.startsWith === undefined) {\n prototype.startsWith = function (prefix) {\n return this.indexOf(prefix) === 0;\n };\n}\nif (prototype.endsWith === undefined) {\n prototype.endsWith = function (suffix) {\n return this.indexOf(suffix, this.length - suffix.length) >= 0;\n };\n}\nfunction normaliseMobileNumber(mobile) {\n if (!mobile) {\n return mobile;\n }\n if (mobile) {\n mobile = mobile.replace(/\\D/g, \"\");\n }\n if (mobile.startsWith(\"00\")) {\n mobile = mobile.substring(2);\n }\n else if (mobile.startsWith(\"+\")) {\n mobile = mobile.substring(1);\n }\n else if (mobile.startsWith(\"0\")) {\n mobile = \"971\" + mobile.substring(1);\n }\n return mobile;\n}\nexports.normaliseMobileNumber = normaliseMobileNumber;\nfunction isEmptyStringOrNull(value) {\n if (!value)\n return true;\n if (/^\\s*$/.test(value))\n return true;\n return false;\n}\nexports.isEmptyStringOrNull = isEmptyStringOrNull;\nfunction isEmailAddress(email) {\n if (!email)\n return false;\n var emailRegx = /^[_A-Za-z0-9-+]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$/;\n return emailRegx.test(email);\n}\nexports.isEmailAddress = isEmailAddress;\nfunction replaceExceptFirst(test, regex, replace) {\n if (replace === void 0) { replace = \"\"; }\n var count = 0;\n return test.replace(regex, function (match) {\n count++;\n if (count === 1) {\n return match;\n }\n else {\n return replace;\n }\n });\n}\nexports.replaceExceptFirst = replaceExceptFirst;\nfunction toFixed(num, fixed) {\n if (num == undefined)\n return \"\";\n var re = new RegExp(\"^-?\\\\d+(?:\\.\\\\d{0,\" + (fixed || -1) + \"})?\");\n var match = num.toString().match(re);\n if (match) {\n return match[0];\n }\n return \"\";\n}\nexports.toFixed = toFixed;\nfunction toNumberString(input, maxDecimals) {\n if (maxDecimals === void 0) { maxDecimals = 6; }\n if (input == undefined)\n return undefined;\n var isNeg = false;\n var value;\n if (typeof input === \"number\") {\n isNeg = input < 0;\n value = new bignumber_js_1.default(input).toFixed();\n }\n else {\n isNeg = (input + \"\").startsWith(\"-\");\n }\n value = (input + \"\").replace(/[^\\d.]/g, \"\");\n value = replaceExceptFirst(value, /\\./g);\n var numberValue = new bignumber_js_1.default(value);\n if (numberValue.isNaN())\n return undefined;\n var ps = numberValue.toFixed();\n var pxDotIx = ps.indexOf(\".\");\n var dotIx = value.indexOf(\".\");\n if (dotIx === -1) {\n return (isNeg ? \"-\" + ps.toString() : ps.toString()) + \"\";\n }\n else {\n if (dotIx === (value.length - 1) && maxDecimals > 0) {\n return ps + \".\";\n }\n else {\n if (pxDotIx === -1 && maxDecimals > 0) {\n var dec = value.substr(dotIx + 1).replace(/\\D/g, \"\");\n if (dec.endsWith(\"0\")) {\n return ps + \".\" + dec.substr(0, maxDecimals);\n }\n return ps + \".\";\n }\n var pcount = ps.length - pxDotIx - 1;\n if (pcount < maxDecimals) {\n return ps;\n }\n else {\n return toFixed(ps, maxDecimals);\n }\n }\n }\n return (isNeg ? \"-\" + ps.toString() : ps.toString()) + \"\";\n}\nexports.toNumberString = toNumberString;\nfunction lvString(values) {\n var p = new Proxy_1.default(StringHandler);\n return p.proxy(values);\n}\nexports.lvString = lvString;\nfunction lvValues(values) {\n var p = new Proxy_1.default(LVHandler);\n return p.proxy(values);\n}\nexports.lvValues = lvValues;\nvar StringHandler = {\n get: function (obj, prop, proxy) { return prop in obj ?\n LocaleUtil.getLocalValue(obj[prop]) : prop; },\n};\nvar LVHandler = {\n get: function (obj, prop, proxy) { return prop in obj ? obj[prop] : prop; },\n};\n//# sourceMappingURL=StringUtils.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar I8N_1 = require(\"./I8N\");\nexports.langKeyMap = {\n ar: [\"ar\", \"Ar\", \"arabicName\", \"ArabicName\", \"nameAr\", \"NameAr\"],\n en: [\"en\", \"En\", \"englishName\", \"EnglishName\", \"nameEn\", \"NameEn\"],\n};\nvar langKeys = [\"ar\", \"en\"];\nfunction getLocalValue(lv, forceLocale) {\n return Select(lv, forceLocale);\n}\nexports.getLocalValue = getLocalValue;\nfunction Select(subject, selector) {\n if (subject) {\n if (typeof subject !== \"object\")\n return subject;\n else {\n var sub = subject;\n var key_1 = selector == null ? I8N_1.default.locale() : selector;\n var langMap = exports.langKeyMap[key_1];\n if (langMap == null) {\n key_1 = \"en\";\n langMap = exports.langKeyMap[key_1];\n }\n var probableKeys = langKeys.filter(function (x) { return x !== key_1; });\n for (var _i = 0, langMap_1 = langMap; _i < langMap_1.length; _i++) {\n var k = langMap_1[_i];\n if (sub.hasOwnProperty(k)) {\n var value = sub[k];\n if (value != undefined)\n return value;\n }\n }\n for (var _a = 0, probableKeys_1 = probableKeys; _a < probableKeys_1.length; _a++) {\n var k = probableKeys_1[_a];\n langMap = exports.langKeyMap[k];\n for (var _b = 0, langMap_2 = langMap; _b < langMap_2.length; _b++) {\n var lk = langMap_2[_b];\n if (sub.hasOwnProperty(lk)) {\n var value = sub[lk];\n if (value != undefined)\n return value;\n }\n }\n }\n }\n }\n return null;\n}\nexports.Select = Select;\n//# sourceMappingURL=LocaleValue.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar I8N_1 = require(\"./I8N\");\nrequire(\"moment/locale/ar\");\nrequire(\"moment/locale/en-gb\");\nvar moment = require(\"moment\");\nfunction formatDate(date, format, forceLocale) {\n if (forceLocale) {\n return moment(date).locale(forceLocale).format(format);\n }\n return moment(date).locale(I8N_1.default.locale()).format(format);\n}\nexports.formatDate = formatDate;\nfunction parseDate(dateString, format, forceLocale) {\n if (forceLocale) {\n return moment(dateString, format, forceLocale).toDate();\n }\n else {\n return moment(dateString, format, I8N_1.default.locale()).toDate();\n }\n}\nexports.parseDate = parseDate;\nfunction toServerDate(date) {\n return formatDate(date, \"YYYY-MM-DDTHH:mm:ss.SSSSSSSZ\", \"en\");\n}\nexports.toServerDate = toServerDate;\nfunction serverDateToDate(dateString) {\n if (dateString) {\n var format = \"YYYY-MM-DDTHH:mm:ss.SSSSSSSZ\";\n if (dateString.length === 19) {\n format = \"YYYY-MM-DDTHH:mm:ss\";\n }\n return parseDate(dateString, format, \"en\");\n }\n return undefined;\n}\nexports.serverDateToDate = serverDateToDate;\nfunction toServerDateMinimal(date) {\n if (date) {\n return formatDate(date, \"YYYY-MM-DDTHH:mm:ss\", \"en\");\n }\n return undefined;\n}\nexports.toServerDateMinimal = toServerDateMinimal;\nfunction normatizeDate(date) {\n var d = new Date(date.getTime());\n d.setHours(0, 0, 0, 1);\n return d;\n}\nexports.normatizeDate = normatizeDate;\n//# sourceMappingURL=DateTime.js.map","export default function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","export default function _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}",";(function (globalObject) {\r\n 'use strict';\r\n\r\n/*\r\n * bignumber.js v9.0.0\r\n * A JavaScript library for arbitrary-precision arithmetic.\r\n * https://github.com/MikeMcl/bignumber.js\r\n * Copyright (c) 2019 Michael Mclaughlin <M8ch88l@gmail.com>\r\n * MIT Licensed.\r\n *\r\n * BigNumber.prototype methods | BigNumber methods\r\n * |\r\n * absoluteValue abs | clone\r\n * comparedTo | config set\r\n * decimalPlaces dp | DECIMAL_PLACES\r\n * dividedBy div | ROUNDING_MODE\r\n * dividedToIntegerBy idiv | EXPONENTIAL_AT\r\n * exponentiatedBy pow | RANGE\r\n * integerValue | CRYPTO\r\n * isEqualTo eq | MODULO_MODE\r\n * isFinite | POW_PRECISION\r\n * isGreaterThan gt | FORMAT\r\n * isGreaterThanOrEqualTo gte | ALPHABET\r\n * isInteger | isBigNumber\r\n * isLessThan lt | maximum max\r\n * isLessThanOrEqualTo lte | minimum min\r\n * isNaN | random\r\n * isNegative | sum\r\n * isPositive |\r\n * isZero |\r\n * minus |\r\n * modulo mod |\r\n * multipliedBy times |\r\n * negated |\r\n * plus |\r\n * precision sd |\r\n * shiftedBy |\r\n * squareRoot sqrt |\r\n * toExponential |\r\n * toFixed |\r\n * toFormat |\r\n * toFraction |\r\n * toJSON |\r\n * toNumber |\r\n * toPrecision |\r\n * toString |\r\n * valueOf |\r\n *\r\n */\r\n\r\n\r\n var BigNumber,\r\n isNumeric = /^-?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?$/i,\r\n mathceil = Math.ceil,\r\n mathfloor = Math.floor,\r\n\r\n bignumberError = '[BigNumber Error] ',\r\n tooManyDigits = bignumberError + 'Number primitive has more than 15 significant digits: ',\r\n\r\n BASE = 1e14,\r\n LOG_BASE = 14,\r\n MAX_SAFE_INTEGER = 0x1fffffffffffff, // 2^53 - 1\r\n // MAX_INT32 = 0x7fffffff, // 2^31 - 1\r\n POWS_TEN = [1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13],\r\n SQRT_BASE = 1e7,\r\n\r\n // EDITABLE\r\n // The limit on the value of DECIMAL_PLACES, TO_EXP_NEG, TO_EXP_POS, MIN_EXP, MAX_EXP, and\r\n // the arguments to toExponential, toFixed, toFormat, and toPrecision.\r\n MAX = 1E9; // 0 to MAX_INT32\r\n\r\n\r\n /*\r\n * Create and return a BigNumber constructor.\r\n */\r\n function clone(configObject) {\r\n var div, convertBase, parseNumeric,\r\n P = BigNumber.prototype = { constructor: BigNumber, toString: null, valueOf: null },\r\n ONE = new BigNumber(1),\r\n\r\n\r\n //----------------------------- EDITABLE CONFIG DEFAULTS -------------------------------\r\n\r\n\r\n // The default values below must be integers within the inclusive ranges stated.\r\n // The values can also be changed at run-time using BigNumber.set.\r\n\r\n // The maximum number of decimal places for operations involving division.\r\n DECIMAL_PLACES = 20, // 0 to MAX\r\n\r\n // The rounding mode used when rounding to the above decimal places, and when using\r\n // toExponential, toFixed, toFormat and toPrecision, and round (default value).\r\n // UP 0 Away from zero.\r\n // DOWN 1 Towards zero.\r\n // CEIL 2 Towards +Infinity.\r\n // FLOOR 3 Towards -Infinity.\r\n // HALF_UP 4 Towards nearest neighbour. If equidistant, up.\r\n // HALF_DOWN 5 Towards nearest neighbour. If equidistant, down.\r\n // HALF_EVEN 6 Towards nearest neighbour. If equidistant, towards even neighbour.\r\n // HALF_CEIL 7 Towards nearest neighbour. If equidistant, towards +Infinity.\r\n // HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity.\r\n ROUNDING_MODE = 4, // 0 to 8\r\n\r\n // EXPONENTIAL_AT : [TO_EXP_NEG , TO_EXP_POS]\r\n\r\n // The exponent value at and beneath which toString returns exponential notation.\r\n // Number type: -7\r\n TO_EXP_NEG = -7, // 0 to -MAX\r\n\r\n // The exponent value at and above which toString returns exponential notation.\r\n // Number type: 21\r\n TO_EXP_POS = 21, // 0 to MAX\r\n\r\n // RANGE : [MIN_EXP, MAX_EXP]\r\n\r\n // The minimum exponent value, beneath which underflow to zero occurs.\r\n // Number type: -324 (5e-324)\r\n MIN_EXP = -1e7, // -1 to -MAX\r\n\r\n // The maximum exponent value, above which overflow to Infinity occurs.\r\n // Number type: 308 (1.7976931348623157e+308)\r\n // For MAX_EXP > 1e7, e.g. new BigNumber('1e100000000').plus(1) may be slow.\r\n MAX_EXP = 1e7, // 1 to MAX\r\n\r\n // Whether to use cryptographically-secure random number generation, if available.\r\n CRYPTO = false, // true or false\r\n\r\n // The modulo mode used when calculating the modulus: a mod n.\r\n // The quotient (q = a / n) is calculated according to the corresponding rounding mode.\r\n // The remainder (r) is calculated as: r = a - n * q.\r\n //\r\n // UP 0 The remainder is positive if the dividend is negative, else is negative.\r\n // DOWN 1 The remainder has the same sign as the dividend.\r\n // This modulo mode is commonly known as 'truncated division' and is\r\n // equivalent to (a % n) in JavaScript.\r\n // FLOOR 3 The remainder has the same sign as the divisor (Python %).\r\n // HALF_EVEN 6 This modulo mode implements the IEEE 754 remainder function.\r\n // EUCLID 9 Euclidian division. q = sign(n) * floor(a / abs(n)).\r\n // The remainder is always positive.\r\n //\r\n // The truncated division, floored division, Euclidian division and IEEE 754 remainder\r\n // modes are commonly used for the modulus operation.\r\n // Although the other rounding modes can also be used, they may not give useful results.\r\n MODULO_MODE = 1, // 0 to 9\r\n\r\n // The maximum number of significant digits of the result of the exponentiatedBy operation.\r\n // If POW_PRECISION is 0, there will be unlimited significant digits.\r\n POW_PRECISION = 0, // 0 to MAX\r\n\r\n // The format specification used by the BigNumber.prototype.toFormat method.\r\n FORMAT = {\r\n prefix: '',\r\n groupSize: 3,\r\n secondaryGroupSize: 0,\r\n groupSeparator: ',',\r\n decimalSeparator: '.',\r\n fractionGroupSize: 0,\r\n fractionGroupSeparator: '\\xA0', // non-breaking space\r\n suffix: ''\r\n },\r\n\r\n // The alphabet used for base conversion. It must be at least 2 characters long, with no '+',\r\n // '-', '.', whitespace, or repeated character.\r\n // '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_'\r\n ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyz';\r\n\r\n\r\n //------------------------------------------------------------------------------------------\r\n\r\n\r\n // CONSTRUCTOR\r\n\r\n\r\n /*\r\n * The BigNumber constructor and exported function.\r\n * Create and return a new instance of a BigNumber object.\r\n *\r\n * v {number|string|BigNumber} A numeric value.\r\n * [b] {number} The base of v. Integer, 2 to ALPHABET.length inclusive.\r\n */\r\n function BigNumber(v, b) {\r\n var alphabet, c, caseChanged, e, i, isNum, len, str,\r\n x = this;\r\n\r\n // Enable constructor call without `new`.\r\n if (!(x instanceof BigNumber)) return new BigNumber(v, b);\r\n\r\n if (b == null) {\r\n\r\n if (v && v._isBigNumber === true) {\r\n x.s = v.s;\r\n\r\n if (!v.c || v.e > MAX_EXP) {\r\n x.c = x.e = null;\r\n } else if (v.e < MIN_EXP) {\r\n x.c = [x.e = 0];\r\n } else {\r\n x.e = v.e;\r\n x.c = v.c.slice();\r\n }\r\n\r\n return;\r\n }\r\n\r\n if ((isNum = typeof v == 'number') && v * 0 == 0) {\r\n\r\n // Use `1 / n` to handle minus zero also.\r\n x.s = 1 / v < 0 ? (v = -v, -1) : 1;\r\n\r\n // Fast path for integers, where n < 2147483648 (2**31).\r\n if (v === ~~v) {\r\n for (e = 0, i = v; i >= 10; i /= 10, e++);\r\n\r\n if (e > MAX_EXP) {\r\n x.c = x.e = null;\r\n } else {\r\n x.e = e;\r\n x.c = [v];\r\n }\r\n\r\n return;\r\n }\r\n\r\n str = String(v);\r\n } else {\r\n\r\n if (!isNumeric.test(str = String(v))) return parseNumeric(x, str, isNum);\r\n\r\n x.s = str.charCodeAt(0) == 45 ? (str = str.slice(1), -1) : 1;\r\n }\r\n\r\n // Decimal point?\r\n if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');\r\n\r\n // Exponential form?\r\n if ((i = str.search(/e/i)) > 0) {\r\n\r\n // Determine exponent.\r\n if (e < 0) e = i;\r\n e += +str.slice(i + 1);\r\n str = str.substring(0, i);\r\n } else if (e < 0) {\r\n\r\n // Integer.\r\n e = str.length;\r\n }\r\n\r\n } else {\r\n\r\n // '[BigNumber Error] Base {not a primitive number|not an integer|out of range}: {b}'\r\n intCheck(b, 2, ALPHABET.length, 'Base');\r\n\r\n // Allow exponential notation to be used with base 10 argument, while\r\n // also rounding to DECIMAL_PLACES as with other bases.\r\n if (b == 10) {\r\n x = new BigNumber(v);\r\n return round(x, DECIMAL_PLACES + x.e + 1, ROUNDING_MODE);\r\n }\r\n\r\n str = String(v);\r\n\r\n if (isNum = typeof v == 'number') {\r\n\r\n // Avoid potential interpretation of Infinity and NaN as base 44+ values.\r\n if (v * 0 != 0) return parseNumeric(x, str, isNum, b);\r\n\r\n x.s = 1 / v < 0 ? (str = str.slice(1), -1) : 1;\r\n\r\n // '[BigNumber Error] Number primitive has more than 15 significant digits: {n}'\r\n if (BigNumber.DEBUG && str.replace(/^0\\.0*|\\./, '').length > 15) {\r\n throw Error\r\n (tooManyDigits + v);\r\n }\r\n } else {\r\n x.s = str.charCodeAt(0) === 45 ? (str = str.slice(1), -1) : 1;\r\n }\r\n\r\n alphabet = ALPHABET.slice(0, b);\r\n e = i = 0;\r\n\r\n // Check that str is a valid base b number.\r\n // Don't use RegExp, so alphabet can contain special characters.\r\n for (len = str.length; i < len; i++) {\r\n if (alphabet.indexOf(c = str.charAt(i)) < 0) {\r\n if (c == '.') {\r\n\r\n // If '.' is not the first character and it has not be found before.\r\n if (i > e) {\r\n e = len;\r\n continue;\r\n }\r\n } else if (!caseChanged) {\r\n\r\n // Allow e.g. hexadecimal 'FF' as well as 'ff'.\r\n if (str == str.toUpperCase() && (str = str.toLowerCase()) ||\r\n str == str.toLowerCase() && (str = str.toUpperCase())) {\r\n caseChanged = true;\r\n i = -1;\r\n e = 0;\r\n continue;\r\n }\r\n }\r\n\r\n return parseNumeric(x, String(v), isNum, b);\r\n }\r\n }\r\n\r\n // Prevent later check for length on converted number.\r\n isNum = false;\r\n str = convertBase(str, b, 10, x.s);\r\n\r\n // Decimal point?\r\n if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');\r\n else e = str.length;\r\n }\r\n\r\n // Determine leading zeros.\r\n for (i = 0; str.charCodeAt(i) === 48; i++);\r\n\r\n // Determine trailing zeros.\r\n for (len = str.length; str.charCodeAt(--len) === 48;);\r\n\r\n if (str = str.slice(i, ++len)) {\r\n len -= i;\r\n\r\n // '[BigNumber Error] Number primitive has more than 15 significant digits: {n}'\r\n if (isNum && BigNumber.DEBUG &&\r\n len > 15 && (v > MAX_SAFE_INTEGER || v !== mathfloor(v))) {\r\n throw Error\r\n (tooManyDigits + (x.s * v));\r\n }\r\n\r\n // Overflow?\r\n if ((e = e - i - 1) > MAX_EXP) {\r\n\r\n // Infinity.\r\n x.c = x.e = null;\r\n\r\n // Underflow?\r\n } else if (e < MIN_EXP) {\r\n\r\n // Zero.\r\n x.c = [x.e = 0];\r\n } else {\r\n x.e = e;\r\n x.c = [];\r\n\r\n // Transform base\r\n\r\n // e is the base 10 exponent.\r\n // i is where to slice str to get the first element of the coefficient array.\r\n i = (e + 1) % LOG_BASE;\r\n if (e < 0) i += LOG_BASE; // i < 1\r\n\r\n if (i < len) {\r\n if (i) x.c.push(+str.slice(0, i));\r\n\r\n for (len -= LOG_BASE; i < len;) {\r\n x.c.push(+str.slice(i, i += LOG_BASE));\r\n }\r\n\r\n i = LOG_BASE - (str = str.slice(i)).length;\r\n } else {\r\n i -= len;\r\n }\r\n\r\n for (; i--; str += '0');\r\n x.c.push(+str);\r\n }\r\n } else {\r\n\r\n // Zero.\r\n x.c = [x.e = 0];\r\n }\r\n }\r\n\r\n\r\n // CONSTRUCTOR PROPERTIES\r\n\r\n\r\n BigNumber.clone = clone;\r\n\r\n BigNumber.ROUND_UP = 0;\r\n BigNumber.ROUND_DOWN = 1;\r\n BigNumber.ROUND_CEIL = 2;\r\n BigNumber.ROUND_FLOOR = 3;\r\n BigNumber.ROUND_HALF_UP = 4;\r\n BigNumber.ROUND_HALF_DOWN = 5;\r\n BigNumber.ROUND_HALF_EVEN = 6;\r\n BigNumber.ROUND_HALF_CEIL = 7;\r\n BigNumber.ROUND_HALF_FLOOR = 8;\r\n BigNumber.EUCLID = 9;\r\n\r\n\r\n /*\r\n * Configure infrequently-changing library-wide settings.\r\n *\r\n * Accept an object with the following optional properties (if the value of a property is\r\n * a number, it must be an integer within the inclusive range stated):\r\n *\r\n * DECIMAL_PLACES {number} 0 to MAX\r\n * ROUNDING_MODE {number} 0 to 8\r\n * EXPONENTIAL_AT {number|number[]} -MAX to MAX or [-MAX to 0, 0 to MAX]\r\n * RANGE {number|number[]} -MAX to MAX (not zero) or [-MAX to -1, 1 to MAX]\r\n * CRYPTO {boolean} true or false\r\n * MODULO_MODE {number} 0 to 9\r\n * POW_PRECISION {number} 0 to MAX\r\n * ALPHABET {string} A string of two or more unique characters which does\r\n * not contain '.'.\r\n * FORMAT {object} An object with some of the following properties:\r\n * prefix {string}\r\n * groupSize {number}\r\n * secondaryGroupSize {number}\r\n * groupSeparator {string}\r\n * decimalSeparator {string}\r\n * fractionGroupSize {number}\r\n * fractionGroupSeparator {string}\r\n * suffix {string}\r\n *\r\n * (The values assigned to the above FORMAT object properties are not checked for validity.)\r\n *\r\n * E.g.\r\n * BigNumber.config({ DECIMAL_PLACES : 20, ROUNDING_MODE : 4 })\r\n *\r\n * Ignore properties/parameters set to null or undefined, except for ALPHABET.\r\n *\r\n * Return an object with the properties current values.\r\n */\r\n BigNumber.config = BigNumber.set = function (obj) {\r\n var p, v;\r\n\r\n if (obj != null) {\r\n\r\n if (typeof obj == 'object') {\r\n\r\n // DECIMAL_PLACES {number} Integer, 0 to MAX inclusive.\r\n // '[BigNumber Error] DECIMAL_PLACES {not a primitive number|not an integer|out of range}: {v}'\r\n if (obj.hasOwnProperty(p = 'DECIMAL_PLACES')) {\r\n v = obj[p];\r\n intCheck(v, 0, MAX, p);\r\n DECIMAL_PLACES = v;\r\n }\r\n\r\n // ROUNDING_MODE {number} Integer, 0 to 8 inclusive.\r\n // '[BigNumber Error] ROUNDING_MODE {not a primitive number|not an integer|out of range}: {v}'\r\n if (obj.hasOwnProperty(p = 'ROUNDING_MODE')) {\r\n v = obj[p];\r\n intCheck(v, 0, 8, p);\r\n ROUNDING_MODE = v;\r\n }\r\n\r\n // EXPONENTIAL_AT {number|number[]}\r\n // Integer, -MAX to MAX inclusive or\r\n // [integer -MAX to 0 inclusive, 0 to MAX inclusive].\r\n // '[BigNumber Error] EXPONENTIAL_AT {not a primitive number|not an integer|out of range}: {v}'\r\n if (obj.hasOwnProperty(p = 'EXPONENTIAL_AT')) {\r\n v = obj[p];\r\n if (v && v.pop) {\r\n intCheck(v[0], -MAX, 0, p);\r\n intCheck(v[1], 0, MAX, p);\r\n TO_EXP_NEG = v[0];\r\n TO_EXP_POS = v[1];\r\n } else {\r\n intCheck(v, -MAX, MAX, p);\r\n TO_EXP_NEG = -(TO_EXP_POS = v < 0 ? -v : v);\r\n }\r\n }\r\n\r\n // RANGE {number|number[]} Non-zero integer, -MAX to MAX inclusive or\r\n // [integer -MAX to -1 inclusive, integer 1 to MAX inclusive].\r\n // '[BigNumber Error] RANGE {not a primitive number|not an integer|out of range|cannot be zero}: {v}'\r\n if (obj.hasOwnProperty(p = 'RANGE')) {\r\n v = obj[p];\r\n if (v && v.pop) {\r\n intCheck(v[0], -MAX, -1, p);\r\n intCheck(v[1], 1, MAX, p);\r\n MIN_EXP = v[0];\r\n MAX_EXP = v[1];\r\n } else {\r\n intCheck(v, -MAX, MAX, p);\r\n if (v) {\r\n MIN_EXP = -(MAX_EXP = v < 0 ? -v : v);\r\n } else {\r\n throw Error\r\n (bignumberError + p + ' cannot be zero: ' + v);\r\n }\r\n }\r\n }\r\n\r\n // CRYPTO {boolean} true or false.\r\n // '[BigNumber Error] CRYPTO not true or false: {v}'\r\n // '[BigNumber Error] crypto unavailable'\r\n if (obj.hasOwnProperty(p = 'CRYPTO')) {\r\n v = obj[p];\r\n if (v === !!v) {\r\n if (v) {\r\n if (typeof crypto != 'undefined' && crypto &&\r\n (crypto.getRandomValues || crypto.randomBytes)) {\r\n CRYPTO = v;\r\n } else {\r\n CRYPTO = !v;\r\n throw Error\r\n (bignumberError + 'crypto unavailable');\r\n }\r\n } else {\r\n CRYPTO = v;\r\n }\r\n } else {\r\n throw Error\r\n (bignumberError + p + ' not true or false: ' + v);\r\n }\r\n }\r\n\r\n // MODULO_MODE {number} Integer, 0 to 9 inclusive.\r\n // '[BigNumber Error] MODULO_MODE {not a primitive number|not an integer|out of range}: {v}'\r\n if (obj.hasOwnProperty(p = 'MODULO_MODE')) {\r\n v = obj[p];\r\n intCheck(v, 0, 9, p);\r\n MODULO_MODE = v;\r\n }\r\n\r\n // POW_PRECISION {number} Integer, 0 to MAX inclusive.\r\n // '[BigNumber Error] POW_PRECISION {not a primitive number|not an integer|out of range}: {v}'\r\n if (obj.hasOwnProperty(p = 'POW_PRECISION')) {\r\n v = obj[p];\r\n intCheck(v, 0, MAX, p);\r\n POW_PRECISION = v;\r\n }\r\n\r\n // FORMAT {object}\r\n // '[BigNumber Error] FORMAT not an object: {v}'\r\n if (obj.hasOwnProperty(p = 'FORMAT')) {\r\n v = obj[p];\r\n if (typeof v == 'object') FORMAT = v;\r\n else throw Error\r\n (bignumberError + p + ' not an object: ' + v);\r\n }\r\n\r\n // ALPHABET {string}\r\n // '[BigNumber Error] ALPHABET invalid: {v}'\r\n if (obj.hasOwnProperty(p = 'ALPHABET')) {\r\n v = obj[p];\r\n\r\n // Disallow if only one character,\r\n // or if it contains '+', '-', '.', whitespace, or a repeated character.\r\n if (typeof v == 'string' && !/^.$|[+-.\\s]|(.).*\\1/.test(v)) {\r\n ALPHABET = v;\r\n } else {\r\n throw Error\r\n (bignumberError + p + ' invalid: ' + v);\r\n }\r\n }\r\n\r\n } else {\r\n\r\n // '[BigNumber Error] Object expected: {v}'\r\n throw Error\r\n (bignumberError + 'Object expected: ' + obj);\r\n }\r\n }\r\n\r\n return {\r\n DECIMAL_PLACES: DECIMAL_PLACES,\r\n ROUNDING_MODE: ROUNDING_MODE,\r\n EXPONENTIAL_AT: [TO_EXP_NEG, TO_EXP_POS],\r\n RANGE: [MIN_EXP, MAX_EXP],\r\n CRYPTO: CRYPTO,\r\n MODULO_MODE: MODULO_MODE,\r\n POW_PRECISION: POW_PRECISION,\r\n FORMAT: FORMAT,\r\n ALPHABET: ALPHABET\r\n };\r\n };\r\n\r\n\r\n /*\r\n * Return true if v is a BigNumber instance, otherwise return false.\r\n *\r\n * If BigNumber.DEBUG is true, throw if a BigNumber instance is not well-formed.\r\n *\r\n * v {any}\r\n *\r\n * '[BigNumber Error] Invalid BigNumber: {v}'\r\n */\r\n BigNumber.isBigNumber = function (v) {\r\n if (!v || v._isBigNumber !== true) return false;\r\n if (!BigNumber.DEBUG) return true;\r\n\r\n var i, n,\r\n c = v.c,\r\n e = v.e,\r\n s = v.s;\r\n\r\n out: if ({}.toString.call(c) == '[object Array]') {\r\n\r\n if ((s === 1 || s === -1) && e >= -MAX && e <= MAX && e === mathfloor(e)) {\r\n\r\n // If the first element is zero, the BigNumber value must be zero.\r\n if (c[0] === 0) {\r\n if (e === 0 && c.length === 1) return true;\r\n break out;\r\n }\r\n\r\n // Calculate number of digits that c[0] should have, based on the exponent.\r\n i = (e + 1) % LOG_BASE;\r\n if (i < 1) i += LOG_BASE;\r\n\r\n // Calculate number of digits of c[0].\r\n //if (Math.ceil(Math.log(c[0] + 1) / Math.LN10) == i) {\r\n if (String(c[0]).length == i) {\r\n\r\n for (i = 0; i < c.length; i++) {\r\n n = c[i];\r\n if (n < 0 || n >= BASE || n !== mathfloor(n)) break out;\r\n }\r\n\r\n // Last element cannot be zero, unless it is the only element.\r\n if (n !== 0) return true;\r\n }\r\n }\r\n\r\n // Infinity/NaN\r\n } else if (c === null && e === null && (s === null || s === 1 || s === -1)) {\r\n return true;\r\n }\r\n\r\n throw Error\r\n (bignumberError + 'Invalid BigNumber: ' + v);\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the maximum of the arguments.\r\n *\r\n * arguments {number|string|BigNumber}\r\n */\r\n BigNumber.maximum = BigNumber.max = function () {\r\n return maxOrMin(arguments, P.lt);\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the minimum of the arguments.\r\n *\r\n * arguments {number|string|BigNumber}\r\n */\r\n BigNumber.minimum = BigNumber.min = function () {\r\n return maxOrMin(arguments, P.gt);\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber with a random value equal to or greater than 0 and less than 1,\r\n * and with dp, or DECIMAL_PLACES if dp is omitted, decimal places (or less if trailing\r\n * zeros are produced).\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp}'\r\n * '[BigNumber Error] crypto unavailable'\r\n */\r\n BigNumber.random = (function () {\r\n var pow2_53 = 0x20000000000000;\r\n\r\n // Return a 53 bit integer n, where 0 <= n < 9007199254740992.\r\n // Check if Math.random() produces more than 32 bits of randomness.\r\n // If it does, assume at least 53 bits are produced, otherwise assume at least 30 bits.\r\n // 0x40000000 is 2^30, 0x800000 is 2^23, 0x1fffff is 2^21 - 1.\r\n var random53bitInt = (Math.random() * pow2_53) & 0x1fffff\r\n ? function () { return mathfloor(Math.random() * pow2_53); }\r\n : function () { return ((Math.random() * 0x40000000 | 0) * 0x800000) +\r\n (Math.random() * 0x800000 | 0); };\r\n\r\n return function (dp) {\r\n var a, b, e, k, v,\r\n i = 0,\r\n c = [],\r\n rand = new BigNumber(ONE);\r\n\r\n if (dp == null) dp = DECIMAL_PLACES;\r\n else intCheck(dp, 0, MAX);\r\n\r\n k = mathceil(dp / LOG_BASE);\r\n\r\n if (CRYPTO) {\r\n\r\n // Browsers supporting crypto.getRandomValues.\r\n if (crypto.getRandomValues) {\r\n\r\n a = crypto.getRandomValues(new Uint32Array(k *= 2));\r\n\r\n for (; i < k;) {\r\n\r\n // 53 bits:\r\n // ((Math.pow(2, 32) - 1) * Math.pow(2, 21)).toString(2)\r\n // 11111 11111111 11111111 11111111 11100000 00000000 00000000\r\n // ((Math.pow(2, 32) - 1) >>> 11).toString(2)\r\n // 11111 11111111 11111111\r\n // 0x20000 is 2^21.\r\n v = a[i] * 0x20000 + (a[i + 1] >>> 11);\r\n\r\n // Rejection sampling:\r\n // 0 <= v < 9007199254740992\r\n // Probability that v >= 9e15, is\r\n // 7199254740992 / 9007199254740992 ~= 0.0008, i.e. 1 in 1251\r\n if (v >= 9e15) {\r\n b = crypto.getRandomValues(new Uint32Array(2));\r\n a[i] = b[0];\r\n a[i + 1] = b[1];\r\n } else {\r\n\r\n // 0 <= v <= 8999999999999999\r\n // 0 <= (v % 1e14) <= 99999999999999\r\n c.push(v % 1e14);\r\n i += 2;\r\n }\r\n }\r\n i = k / 2;\r\n\r\n // Node.js supporting crypto.randomBytes.\r\n } else if (crypto.randomBytes) {\r\n\r\n // buffer\r\n a = crypto.randomBytes(k *= 7);\r\n\r\n for (; i < k;) {\r\n\r\n // 0x1000000000000 is 2^48, 0x10000000000 is 2^40\r\n // 0x100000000 is 2^32, 0x1000000 is 2^24\r\n // 11111 11111111 11111111 11111111 11111111 11111111 11111111\r\n // 0 <= v < 9007199254740992\r\n v = ((a[i] & 31) * 0x1000000000000) + (a[i + 1] * 0x10000000000) +\r\n (a[i + 2] * 0x100000000) + (a[i + 3] * 0x1000000) +\r\n (a[i + 4] << 16) + (a[i + 5] << 8) + a[i + 6];\r\n\r\n if (v >= 9e15) {\r\n crypto.randomBytes(7).copy(a, i);\r\n } else {\r\n\r\n // 0 <= (v % 1e14) <= 99999999999999\r\n c.push(v % 1e14);\r\n i += 7;\r\n }\r\n }\r\n i = k / 7;\r\n } else {\r\n CRYPTO = false;\r\n throw Error\r\n (bignumberError + 'crypto unavailable');\r\n }\r\n }\r\n\r\n // Use Math.random.\r\n if (!CRYPTO) {\r\n\r\n for (; i < k;) {\r\n v = random53bitInt();\r\n if (v < 9e15) c[i++] = v % 1e14;\r\n }\r\n }\r\n\r\n k = c[--i];\r\n dp %= LOG_BASE;\r\n\r\n // Convert trailing digits to zeros according to dp.\r\n if (k && dp) {\r\n v = POWS_TEN[LOG_BASE - dp];\r\n c[i] = mathfloor(k / v) * v;\r\n }\r\n\r\n // Remove trailing elements which are zero.\r\n for (; c[i] === 0; c.pop(), i--);\r\n\r\n // Zero?\r\n if (i < 0) {\r\n c = [e = 0];\r\n } else {\r\n\r\n // Remove leading elements which are zero and adjust exponent accordingly.\r\n for (e = -1 ; c[0] === 0; c.splice(0, 1), e -= LOG_BASE);\r\n\r\n // Count the digits of the first element of c to determine leading zeros, and...\r\n for (i = 1, v = c[0]; v >= 10; v /= 10, i++);\r\n\r\n // adjust the exponent accordingly.\r\n if (i < LOG_BASE) e -= LOG_BASE - i;\r\n }\r\n\r\n rand.e = e;\r\n rand.c = c;\r\n return rand;\r\n };\r\n })();\r\n\r\n\r\n /*\r\n * Return a BigNumber whose value is the sum of the arguments.\r\n *\r\n * arguments {number|string|BigNumber}\r\n */\r\n BigNumber.sum = function () {\r\n var i = 1,\r\n args = arguments,\r\n sum = new BigNumber(args[0]);\r\n for (; i < args.length;) sum = sum.plus(args[i++]);\r\n return sum;\r\n };\r\n\r\n\r\n // PRIVATE FUNCTIONS\r\n\r\n\r\n // Called by BigNumber and BigNumber.prototype.toString.\r\n convertBase = (function () {\r\n var decimal = '0123456789';\r\n\r\n /*\r\n * Convert string of baseIn to an array of numbers of baseOut.\r\n * Eg. toBaseOut('255', 10, 16) returns [15, 15].\r\n * Eg. toBaseOut('ff', 16, 10) returns [2, 5, 5].\r\n */\r\n function toBaseOut(str, baseIn, baseOut, alphabet) {\r\n var j,\r\n arr = [0],\r\n arrL,\r\n i = 0,\r\n len = str.length;\r\n\r\n for (; i < len;) {\r\n for (arrL = arr.length; arrL--; arr[arrL] *= baseIn);\r\n\r\n arr[0] += alphabet.indexOf(str.charAt(i++));\r\n\r\n for (j = 0; j < arr.length; j++) {\r\n\r\n if (arr[j] > baseOut - 1) {\r\n if (arr[j + 1] == null) arr[j + 1] = 0;\r\n arr[j + 1] += arr[j] / baseOut | 0;\r\n arr[j] %= baseOut;\r\n }\r\n }\r\n }\r\n\r\n return arr.reverse();\r\n }\r\n\r\n // Convert a numeric string of baseIn to a numeric string of baseOut.\r\n // If the caller is toString, we are converting from base 10 to baseOut.\r\n // If the caller is BigNumber, we are converting from baseIn to base 10.\r\n return function (str, baseIn, baseOut, sign, callerIsToString) {\r\n var alphabet, d, e, k, r, x, xc, y,\r\n i = str.indexOf('.'),\r\n dp = DECIMAL_PLACES,\r\n rm = ROUNDING_MODE;\r\n\r\n // Non-integer.\r\n if (i >= 0) {\r\n k = POW_PRECISION;\r\n\r\n // Unlimited precision.\r\n POW_PRECISION = 0;\r\n str = str.replace('.', '');\r\n y = new BigNumber(baseIn);\r\n x = y.pow(str.length - i);\r\n POW_PRECISION = k;\r\n\r\n // Convert str as if an integer, then restore the fraction part by dividing the\r\n // result by its base raised to a power.\r\n\r\n y.c = toBaseOut(toFixedPoint(coeffToString(x.c), x.e, '0'),\r\n 10, baseOut, decimal);\r\n y.e = y.c.length;\r\n }\r\n\r\n // Convert the number as integer.\r\n\r\n xc = toBaseOut(str, baseIn, baseOut, callerIsToString\r\n ? (alphabet = ALPHABET, decimal)\r\n : (alphabet = decimal, ALPHABET));\r\n\r\n // xc now represents str as an integer and converted to baseOut. e is the exponent.\r\n e = k = xc.length;\r\n\r\n // Remove trailing zeros.\r\n for (; xc[--k] == 0; xc.pop());\r\n\r\n // Zero?\r\n if (!xc[0]) return alphabet.charAt(0);\r\n\r\n // Does str represent an integer? If so, no need for the division.\r\n if (i < 0) {\r\n --e;\r\n } else {\r\n x.c = xc;\r\n x.e = e;\r\n\r\n // The sign is needed for correct rounding.\r\n x.s = sign;\r\n x = div(x, y, dp, rm, baseOut);\r\n xc = x.c;\r\n r = x.r;\r\n e = x.e;\r\n }\r\n\r\n // xc now represents str converted to baseOut.\r\n\r\n // THe index of the rounding digit.\r\n d = e + dp + 1;\r\n\r\n // The rounding digit: the digit to the right of the digit that may be rounded up.\r\n i = xc[d];\r\n\r\n // Look at the rounding digits and mode to determine whether to round up.\r\n\r\n k = baseOut / 2;\r\n r = r || d < 0 || xc[d + 1] != null;\r\n\r\n r = rm < 4 ? (i != null || r) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))\r\n : i > k || i == k &&(rm == 4 || r || rm == 6 && xc[d - 1] & 1 ||\r\n rm == (x.s < 0 ? 8 : 7));\r\n\r\n // If the index of the rounding digit is not greater than zero, or xc represents\r\n // zero, then the result of the base conversion is zero or, if rounding up, a value\r\n // such as 0.00001.\r\n if (d < 1 || !xc[0]) {\r\n\r\n // 1^-dp or 0\r\n str = r ? toFixedPoint(alphabet.charAt(1), -dp, alphabet.charAt(0)) : alphabet.charAt(0);\r\n } else {\r\n\r\n // Truncate xc to the required number of decimal places.\r\n xc.length = d;\r\n\r\n // Round up?\r\n if (r) {\r\n\r\n // Rounding up may mean the previous digit has to be rounded up and so on.\r\n for (--baseOut; ++xc[--d] > baseOut;) {\r\n xc[d] = 0;\r\n\r\n if (!d) {\r\n ++e;\r\n xc = [1].concat(xc);\r\n }\r\n }\r\n }\r\n\r\n // Determine trailing zeros.\r\n for (k = xc.length; !xc[--k];);\r\n\r\n // E.g. [4, 11, 15] becomes 4bf.\r\n for (i = 0, str = ''; i <= k; str += alphabet.charAt(xc[i++]));\r\n\r\n // Add leading zeros, decimal point and trailing zeros as required.\r\n str = toFixedPoint(str, e, alphabet.charAt(0));\r\n }\r\n\r\n // The caller will add the sign.\r\n return str;\r\n };\r\n })();\r\n\r\n\r\n // Perform division in the specified base. Called by div and convertBase.\r\n div = (function () {\r\n\r\n // Assume non-zero x and k.\r\n function multiply(x, k, base) {\r\n var m, temp, xlo, xhi,\r\n carry = 0,\r\n i = x.length,\r\n klo = k % SQRT_BASE,\r\n khi = k / SQRT_BASE | 0;\r\n\r\n for (x = x.slice(); i--;) {\r\n xlo = x[i] % SQRT_BASE;\r\n xhi = x[i] / SQRT_BASE | 0;\r\n m = khi * xlo + xhi * klo;\r\n temp = klo * xlo + ((m % SQRT_BASE) * SQRT_BASE) + carry;\r\n carry = (temp / base | 0) + (m / SQRT_BASE | 0) + khi * xhi;\r\n x[i] = temp % base;\r\n }\r\n\r\n if (carry) x = [carry].concat(x);\r\n\r\n return x;\r\n }\r\n\r\n function compare(a, b, aL, bL) {\r\n var i, cmp;\r\n\r\n if (aL != bL) {\r\n cmp = aL > bL ? 1 : -1;\r\n } else {\r\n\r\n for (i = cmp = 0; i < aL; i++) {\r\n\r\n if (a[i] != b[i]) {\r\n cmp = a[i] > b[i] ? 1 : -1;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return cmp;\r\n }\r\n\r\n function subtract(a, b, aL, base) {\r\n var i = 0;\r\n\r\n // Subtract b from a.\r\n for (; aL--;) {\r\n a[aL] -= i;\r\n i = a[aL] < b[aL] ? 1 : 0;\r\n a[aL] = i * base + a[aL] - b[aL];\r\n }\r\n\r\n // Remove leading zeros.\r\n for (; !a[0] && a.length > 1; a.splice(0, 1));\r\n }\r\n\r\n // x: dividend, y: divisor.\r\n return function (x, y, dp, rm, base) {\r\n var cmp, e, i, more, n, prod, prodL, q, qc, rem, remL, rem0, xi, xL, yc0,\r\n yL, yz,\r\n s = x.s == y.s ? 1 : -1,\r\n xc = x.c,\r\n yc = y.c;\r\n\r\n // Either NaN, Infinity or 0?\r\n if (!xc || !xc[0] || !yc || !yc[0]) {\r\n\r\n return new BigNumber(\r\n\r\n // Return NaN if either NaN, or both Infinity or 0.\r\n !x.s || !y.s || (xc ? yc && xc[0] == yc[0] : !yc) ? NaN :\r\n\r\n // Return ±0 if x is ±0 or y is ±Infinity, or return ±Infinity as y is ±0.\r\n xc && xc[0] == 0 || !yc ? s * 0 : s / 0\r\n );\r\n }\r\n\r\n q = new BigNumber(s);\r\n qc = q.c = [];\r\n e = x.e - y.e;\r\n s = dp + e + 1;\r\n\r\n if (!base) {\r\n base = BASE;\r\n e = bitFloor(x.e / LOG_BASE) - bitFloor(y.e / LOG_BASE);\r\n s = s / LOG_BASE | 0;\r\n }\r\n\r\n // Result exponent may be one less then the current value of e.\r\n // The coefficients of the BigNumbers from convertBase may have trailing zeros.\r\n for (i = 0; yc[i] == (xc[i] || 0); i++);\r\n\r\n if (yc[i] > (xc[i] || 0)) e--;\r\n\r\n if (s < 0) {\r\n qc.push(1);\r\n more = true;\r\n } else {\r\n xL = xc.length;\r\n yL = yc.length;\r\n i = 0;\r\n s += 2;\r\n\r\n // Normalise xc and yc so highest order digit of yc is >= base / 2.\r\n\r\n n = mathfloor(base / (yc[0] + 1));\r\n\r\n // Not necessary, but to handle odd bases where yc[0] == (base / 2) - 1.\r\n // if (n > 1 || n++ == 1 && yc[0] < base / 2) {\r\n if (n > 1) {\r\n yc = multiply(yc, n, base);\r\n xc = multiply(xc, n, base);\r\n yL = yc.length;\r\n xL = xc.length;\r\n }\r\n\r\n xi = yL;\r\n rem = xc.slice(0, yL);\r\n remL = rem.length;\r\n\r\n // Add zeros to make remainder as long as divisor.\r\n for (; remL < yL; rem[remL++] = 0);\r\n yz = yc.slice();\r\n yz = [0].concat(yz);\r\n yc0 = yc[0];\r\n if (yc[1] >= base / 2) yc0++;\r\n // Not necessary, but to prevent trial digit n > base, when using base 3.\r\n // else if (base == 3 && yc0 == 1) yc0 = 1 + 1e-15;\r\n\r\n do {\r\n n = 0;\r\n\r\n // Compare divisor and remainder.\r\n cmp = compare(yc, rem, yL, remL);\r\n\r\n // If divisor < remainder.\r\n if (cmp < 0) {\r\n\r\n // Calculate trial digit, n.\r\n\r\n rem0 = rem[0];\r\n if (yL != remL) rem0 = rem0 * base + (rem[1] || 0);\r\n\r\n // n is how many times the divisor goes into the current remainder.\r\n n = mathfloor(rem0 / yc0);\r\n\r\n // Algorithm:\r\n // product = divisor multiplied by trial digit (n).\r\n // Compare product and remainder.\r\n // If product is greater than remainder:\r\n // Subtract divisor from product, decrement trial digit.\r\n // Subtract product from remainder.\r\n // If product was less than remainder at the last compare:\r\n // Compare new remainder and divisor.\r\n // If remainder is greater than divisor:\r\n // Subtract divisor from remainder, increment trial digit.\r\n\r\n if (n > 1) {\r\n\r\n // n may be > base only when base is 3.\r\n if (n >= base) n = base - 1;\r\n\r\n // product = divisor * trial digit.\r\n prod = multiply(yc, n, base);\r\n prodL = prod.length;\r\n remL = rem.length;\r\n\r\n // Compare product and remainder.\r\n // If product > remainder then trial digit n too high.\r\n // n is 1 too high about 5% of the time, and is not known to have\r\n // ever been more than 1 too high.\r\n while (compare(prod, rem, prodL, remL) == 1) {\r\n n--;\r\n\r\n // Subtract divisor from product.\r\n subtract(prod, yL < prodL ? yz : yc, prodL, base);\r\n prodL = prod.length;\r\n cmp = 1;\r\n }\r\n } else {\r\n\r\n // n is 0 or 1, cmp is -1.\r\n // If n is 0, there is no need to compare yc and rem again below,\r\n // so change cmp to 1 to avoid it.\r\n // If n is 1, leave cmp as -1, so yc and rem are compared again.\r\n if (n == 0) {\r\n\r\n // divisor < remainder, so n must be at least 1.\r\n cmp = n = 1;\r\n }\r\n\r\n // product = divisor\r\n prod = yc.slice();\r\n prodL = prod.length;\r\n }\r\n\r\n if (prodL < remL) prod = [0].concat(prod);\r\n\r\n // Subtract product from remainder.\r\n subtract(rem, prod, remL, base);\r\n remL = rem.length;\r\n\r\n // If product was < remainder.\r\n if (cmp == -1) {\r\n\r\n // Compare divisor and new remainder.\r\n // If divisor < new remainder, subtract divisor from remainder.\r\n // Trial digit n too low.\r\n // n is 1 too low about 5% of the time, and very rarely 2 too low.\r\n while (compare(yc, rem, yL, remL) < 1) {\r\n n++;\r\n\r\n // Subtract divisor from remainder.\r\n subtract(rem, yL < remL ? yz : yc, remL, base);\r\n remL = rem.length;\r\n }\r\n }\r\n } else if (cmp === 0) {\r\n n++;\r\n rem = [0];\r\n } // else cmp === 1 and n will be 0\r\n\r\n // Add the next digit, n, to the result array.\r\n qc[i++] = n;\r\n\r\n // Update the remainder.\r\n if (rem[0]) {\r\n rem[remL++] = xc[xi] || 0;\r\n } else {\r\n rem = [xc[xi]];\r\n remL = 1;\r\n }\r\n } while ((xi++ < xL || rem[0] != null) && s--);\r\n\r\n more = rem[0] != null;\r\n\r\n // Leading zero?\r\n if (!qc[0]) qc.splice(0, 1);\r\n }\r\n\r\n if (base == BASE) {\r\n\r\n // To calculate q.e, first get the number of digits of qc[0].\r\n for (i = 1, s = qc[0]; s >= 10; s /= 10, i++);\r\n\r\n round(q, dp + (q.e = i + e * LOG_BASE - 1) + 1, rm, more);\r\n\r\n // Caller is convertBase.\r\n } else {\r\n q.e = e;\r\n q.r = +more;\r\n }\r\n\r\n return q;\r\n };\r\n })();\r\n\r\n\r\n /*\r\n * Return a string representing the value of BigNumber n in fixed-point or exponential\r\n * notation rounded to the specified decimal places or significant digits.\r\n *\r\n * n: a BigNumber.\r\n * i: the index of the last digit required (i.e. the digit that may be rounded up).\r\n * rm: the rounding mode.\r\n * id: 1 (toExponential) or 2 (toPrecision).\r\n */\r\n function format(n, i, rm, id) {\r\n var c0, e, ne, len, str;\r\n\r\n if (rm == null) rm = ROUNDING_MODE;\r\n else intCheck(rm, 0, 8);\r\n\r\n if (!n.c) return n.toString();\r\n\r\n c0 = n.c[0];\r\n ne = n.e;\r\n\r\n if (i == null) {\r\n str = coeffToString(n.c);\r\n str = id == 1 || id == 2 && (ne <= TO_EXP_NEG || ne >= TO_EXP_POS)\r\n ? toExponential(str, ne)\r\n : toFixedPoint(str, ne, '0');\r\n } else {\r\n n = round(new BigNumber(n), i, rm);\r\n\r\n // n.e may have changed if the value was rounded up.\r\n e = n.e;\r\n\r\n str = coeffToString(n.c);\r\n len = str.length;\r\n\r\n // toPrecision returns exponential notation if the number of significant digits\r\n // specified is less than the number of digits necessary to represent the integer\r\n // part of the value in fixed-point notation.\r\n\r\n // Exponential notation.\r\n if (id == 1 || id == 2 && (i <= e || e <= TO_EXP_NEG)) {\r\n\r\n // Append zeros?\r\n for (; len < i; str += '0', len++);\r\n str = toExponential(str, e);\r\n\r\n // Fixed-point notation.\r\n } else {\r\n i -= ne;\r\n str = toFixedPoint(str, e, '0');\r\n\r\n // Append zeros?\r\n if (e + 1 > len) {\r\n if (--i > 0) for (str += '.'; i--; str += '0');\r\n } else {\r\n i += e - len;\r\n if (i > 0) {\r\n if (e + 1 == len) str += '.';\r\n for (; i--; str += '0');\r\n }\r\n }\r\n }\r\n }\r\n\r\n return n.s < 0 && c0 ? '-' + str : str;\r\n }\r\n\r\n\r\n // Handle BigNumber.max and BigNumber.min.\r\n function maxOrMin(args, method) {\r\n var n,\r\n i = 1,\r\n m = new BigNumber(args[0]);\r\n\r\n for (; i < args.length; i++) {\r\n n = new BigNumber(args[i]);\r\n\r\n // If any number is NaN, return NaN.\r\n if (!n.s) {\r\n m = n;\r\n break;\r\n } else if (method.call(m, n)) {\r\n m = n;\r\n }\r\n }\r\n\r\n return m;\r\n }\r\n\r\n\r\n /*\r\n * Strip trailing zeros, calculate base 10 exponent and check against MIN_EXP and MAX_EXP.\r\n * Called by minus, plus and times.\r\n */\r\n function normalise(n, c, e) {\r\n var i = 1,\r\n j = c.length;\r\n\r\n // Remove trailing zeros.\r\n for (; !c[--j]; c.pop());\r\n\r\n // Calculate the base 10 exponent. First get the number of digits of c[0].\r\n for (j = c[0]; j >= 10; j /= 10, i++);\r\n\r\n // Overflow?\r\n if ((e = i + e * LOG_BASE - 1) > MAX_EXP) {\r\n\r\n // Infinity.\r\n n.c = n.e = null;\r\n\r\n // Underflow?\r\n } else if (e < MIN_EXP) {\r\n\r\n // Zero.\r\n n.c = [n.e = 0];\r\n } else {\r\n n.e = e;\r\n n.c = c;\r\n }\r\n\r\n return n;\r\n }\r\n\r\n\r\n // Handle values that fail the validity test in BigNumber.\r\n parseNumeric = (function () {\r\n var basePrefix = /^(-?)0([xbo])(?=\\w[\\w.]*$)/i,\r\n dotAfter = /^([^.]+)\\.$/,\r\n dotBefore = /^\\.([^.]+)$/,\r\n isInfinityOrNaN = /^-?(Infinity|NaN)$/,\r\n whitespaceOrPlus = /^\\s*\\+(?=[\\w.])|^\\s+|\\s+$/g;\r\n\r\n return function (x, str, isNum, b) {\r\n var base,\r\n s = isNum ? str : str.replace(whitespaceOrPlus, '');\r\n\r\n // No exception on ±Infinity or NaN.\r\n if (isInfinityOrNaN.test(s)) {\r\n x.s = isNaN(s) ? null : s < 0 ? -1 : 1;\r\n } else {\r\n if (!isNum) {\r\n\r\n // basePrefix = /^(-?)0([xbo])(?=\\w[\\w.]*$)/i\r\n s = s.replace(basePrefix, function (m, p1, p2) {\r\n base = (p2 = p2.toLowerCase()) == 'x' ? 16 : p2 == 'b' ? 2 : 8;\r\n return !b || b == base ? p1 : m;\r\n });\r\n\r\n if (b) {\r\n base = b;\r\n\r\n // E.g. '1.' to '1', '.1' to '0.1'\r\n s = s.replace(dotAfter, '$1').replace(dotBefore, '0.$1');\r\n }\r\n\r\n if (str != s) return new BigNumber(s, base);\r\n }\r\n\r\n // '[BigNumber Error] Not a number: {n}'\r\n // '[BigNumber Error] Not a base {b} number: {n}'\r\n if (BigNumber.DEBUG) {\r\n throw Error\r\n (bignumberError + 'Not a' + (b ? ' base ' + b : '') + ' number: ' + str);\r\n }\r\n\r\n // NaN\r\n x.s = null;\r\n }\r\n\r\n x.c = x.e = null;\r\n }\r\n })();\r\n\r\n\r\n /*\r\n * Round x to sd significant digits using rounding mode rm. Check for over/under-flow.\r\n * If r is truthy, it is known that there are more digits after the rounding digit.\r\n */\r\n function round(x, sd, rm, r) {\r\n var d, i, j, k, n, ni, rd,\r\n xc = x.c,\r\n pows10 = POWS_TEN;\r\n\r\n // if x is not Infinity or NaN...\r\n if (xc) {\r\n\r\n // rd is the rounding digit, i.e. the digit after the digit that may be rounded up.\r\n // n is a base 1e14 number, the value of the element of array x.c containing rd.\r\n // ni is the index of n within x.c.\r\n // d is the number of digits of n.\r\n // i is the index of rd within n including leading zeros.\r\n // j is the actual index of rd within n (if < 0, rd is a leading zero).\r\n out: {\r\n\r\n // Get the number of digits of the first element of xc.\r\n for (d = 1, k = xc[0]; k >= 10; k /= 10, d++);\r\n i = sd - d;\r\n\r\n // If the rounding digit is in the first element of xc...\r\n if (i < 0) {\r\n i += LOG_BASE;\r\n j = sd;\r\n n = xc[ni = 0];\r\n\r\n // Get the rounding digit at index j of n.\r\n rd = n / pows10[d - j - 1] % 10 | 0;\r\n } else {\r\n ni = mathceil((i + 1) / LOG_BASE);\r\n\r\n if (ni >= xc.length) {\r\n\r\n if (r) {\r\n\r\n // Needed by sqrt.\r\n for (; xc.length <= ni; xc.push(0));\r\n n = rd = 0;\r\n d = 1;\r\n i %= LOG_BASE;\r\n j = i - LOG_BASE + 1;\r\n } else {\r\n break out;\r\n }\r\n } else {\r\n n = k = xc[ni];\r\n\r\n // Get the number of digits of n.\r\n for (d = 1; k >= 10; k /= 10, d++);\r\n\r\n // Get the index of rd within n.\r\n i %= LOG_BASE;\r\n\r\n // Get the index of rd within n, adjusted for leading zeros.\r\n // The number of leading zeros of n is given by LOG_BASE - d.\r\n j = i - LOG_BASE + d;\r\n\r\n // Get the rounding digit at index j of n.\r\n rd = j < 0 ? 0 : n / pows10[d - j - 1] % 10 | 0;\r\n }\r\n }\r\n\r\n r = r || sd < 0 ||\r\n\r\n // Are there any non-zero digits after the rounding digit?\r\n // The expression n % pows10[d - j - 1] returns all digits of n to the right\r\n // of the digit at j, e.g. if n is 908714 and j is 2, the expression gives 714.\r\n xc[ni + 1] != null || (j < 0 ? n : n % pows10[d - j - 1]);\r\n\r\n r = rm < 4\r\n ? (rd || r) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))\r\n : rd > 5 || rd == 5 && (rm == 4 || r || rm == 6 &&\r\n\r\n // Check whether the digit to the left of the rounding digit is odd.\r\n ((i > 0 ? j > 0 ? n / pows10[d - j] : 0 : xc[ni - 1]) % 10) & 1 ||\r\n rm == (x.s < 0 ? 8 : 7));\r\n\r\n if (sd < 1 || !xc[0]) {\r\n xc.length = 0;\r\n\r\n if (r) {\r\n\r\n // Convert sd to decimal places.\r\n sd -= x.e + 1;\r\n\r\n // 1, 0.1, 0.01, 0.001, 0.0001 etc.\r\n xc[0] = pows10[(LOG_BASE - sd % LOG_BASE) % LOG_BASE];\r\n x.e = -sd || 0;\r\n } else {\r\n\r\n // Zero.\r\n xc[0] = x.e = 0;\r\n }\r\n\r\n return x;\r\n }\r\n\r\n // Remove excess digits.\r\n if (i == 0) {\r\n xc.length = ni;\r\n k = 1;\r\n ni--;\r\n } else {\r\n xc.length = ni + 1;\r\n k = pows10[LOG_BASE - i];\r\n\r\n // E.g. 56700 becomes 56000 if 7 is the rounding digit.\r\n // j > 0 means i > number of leading zeros of n.\r\n xc[ni] = j > 0 ? mathfloor(n / pows10[d - j] % pows10[j]) * k : 0;\r\n }\r\n\r\n // Round up?\r\n if (r) {\r\n\r\n for (; ;) {\r\n\r\n // If the digit to be rounded up is in the first element of xc...\r\n if (ni == 0) {\r\n\r\n // i will be the length of xc[0] before k is added.\r\n for (i = 1, j = xc[0]; j >= 10; j /= 10, i++);\r\n j = xc[0] += k;\r\n for (k = 1; j >= 10; j /= 10, k++);\r\n\r\n // if i != k the length has increased.\r\n if (i != k) {\r\n x.e++;\r\n if (xc[0] == BASE) xc[0] = 1;\r\n }\r\n\r\n break;\r\n } else {\r\n xc[ni] += k;\r\n if (xc[ni] != BASE) break;\r\n xc[ni--] = 0;\r\n k = 1;\r\n }\r\n }\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (i = xc.length; xc[--i] === 0; xc.pop());\r\n }\r\n\r\n // Overflow? Infinity.\r\n if (x.e > MAX_EXP) {\r\n x.c = x.e = null;\r\n\r\n // Underflow? Zero.\r\n } else if (x.e < MIN_EXP) {\r\n x.c = [x.e = 0];\r\n }\r\n }\r\n\r\n return x;\r\n }\r\n\r\n\r\n function valueOf(n) {\r\n var str,\r\n e = n.e;\r\n\r\n if (e === null) return n.toString();\r\n\r\n str = coeffToString(n.c);\r\n\r\n str = e <= TO_EXP_NEG || e >= TO_EXP_POS\r\n ? toExponential(str, e)\r\n : toFixedPoint(str, e, '0');\r\n\r\n return n.s < 0 ? '-' + str : str;\r\n }\r\n\r\n\r\n // PROTOTYPE/INSTANCE METHODS\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the absolute value of this BigNumber.\r\n */\r\n P.absoluteValue = P.abs = function () {\r\n var x = new BigNumber(this);\r\n if (x.s < 0) x.s = 1;\r\n return x;\r\n };\r\n\r\n\r\n /*\r\n * Return\r\n * 1 if the value of this BigNumber is greater than the value of BigNumber(y, b),\r\n * -1 if the value of this BigNumber is less than the value of BigNumber(y, b),\r\n * 0 if they have the same value,\r\n * or null if the value of either is NaN.\r\n */\r\n P.comparedTo = function (y, b) {\r\n return compare(this, new BigNumber(y, b));\r\n };\r\n\r\n\r\n /*\r\n * If dp is undefined or null or true or false, return the number of decimal places of the\r\n * value of this BigNumber, or null if the value of this BigNumber is ±Infinity or NaN.\r\n *\r\n * Otherwise, if dp is a number, return a new BigNumber whose value is the value of this\r\n * BigNumber rounded to a maximum of dp decimal places using rounding mode rm, or\r\n * ROUNDING_MODE if rm is omitted.\r\n *\r\n * [dp] {number} Decimal places: integer, 0 to MAX inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n */\r\n P.decimalPlaces = P.dp = function (dp, rm) {\r\n var c, n, v,\r\n x = this;\r\n\r\n if (dp != null) {\r\n intCheck(dp, 0, MAX);\r\n if (rm == null) rm = ROUNDING_MODE;\r\n else intCheck(rm, 0, 8);\r\n\r\n return round(new BigNumber(x), dp + x.e + 1, rm);\r\n }\r\n\r\n if (!(c = x.c)) return null;\r\n n = ((v = c.length - 1) - bitFloor(this.e / LOG_BASE)) * LOG_BASE;\r\n\r\n // Subtract the number of trailing zeros of the last number.\r\n if (v = c[v]) for (; v % 10 == 0; v /= 10, n--);\r\n if (n < 0) n = 0;\r\n\r\n return n;\r\n };\r\n\r\n\r\n /*\r\n * n / 0 = I\r\n * n / N = N\r\n * n / I = 0\r\n * 0 / n = 0\r\n * 0 / 0 = N\r\n * 0 / N = N\r\n * 0 / I = 0\r\n * N / n = N\r\n * N / 0 = N\r\n * N / N = N\r\n * N / I = N\r\n * I / n = I\r\n * I / 0 = I\r\n * I / N = N\r\n * I / I = N\r\n *\r\n * Return a new BigNumber whose value is the value of this BigNumber divided by the value of\r\n * BigNumber(y, b), rounded according to DECIMAL_PLACES and ROUNDING_MODE.\r\n */\r\n P.dividedBy = P.div = function (y, b) {\r\n return div(this, new BigNumber(y, b), DECIMAL_PLACES, ROUNDING_MODE);\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the integer part of dividing the value of this\r\n * BigNumber by the value of BigNumber(y, b).\r\n */\r\n P.dividedToIntegerBy = P.idiv = function (y, b) {\r\n return div(this, new BigNumber(y, b), 0, 1);\r\n };\r\n\r\n\r\n /*\r\n * Return a BigNumber whose value is the value of this BigNumber exponentiated by n.\r\n *\r\n * If m is present, return the result modulo m.\r\n * If n is negative round according to DECIMAL_PLACES and ROUNDING_MODE.\r\n * If POW_PRECISION is non-zero and m is not present, round to POW_PRECISION using ROUNDING_MODE.\r\n *\r\n * The modular power operation works efficiently when x, n, and m are integers, otherwise it\r\n * is equivalent to calculating x.exponentiatedBy(n).modulo(m) with a POW_PRECISION of 0.\r\n *\r\n * n {number|string|BigNumber} The exponent. An integer.\r\n * [m] {number|string|BigNumber} The modulus.\r\n *\r\n * '[BigNumber Error] Exponent not an integer: {n}'\r\n */\r\n P.exponentiatedBy = P.pow = function (n, m) {\r\n var half, isModExp, i, k, more, nIsBig, nIsNeg, nIsOdd, y,\r\n x = this;\r\n\r\n n = new BigNumber(n);\r\n\r\n // Allow NaN and ±Infinity, but not other non-integers.\r\n if (n.c && !n.isInteger()) {\r\n throw Error\r\n (bignumberError + 'Exponent not an integer: ' + valueOf(n));\r\n }\r\n\r\n if (m != null) m = new BigNumber(m);\r\n\r\n // Exponent of MAX_SAFE_INTEGER is 15.\r\n nIsBig = n.e > 14;\r\n\r\n // If x is NaN, ±Infinity, ±0 or ±1, or n is ±Infinity, NaN or ±0.\r\n if (!x.c || !x.c[0] || x.c[0] == 1 && !x.e && x.c.length == 1 || !n.c || !n.c[0]) {\r\n\r\n // The sign of the result of pow when x is negative depends on the evenness of n.\r\n // If +n overflows to ±Infinity, the evenness of n would be not be known.\r\n y = new BigNumber(Math.pow(+valueOf(x), nIsBig ? 2 - isOdd(n) : +valueOf(n)));\r\n return m ? y.mod(m) : y;\r\n }\r\n\r\n nIsNeg = n.s < 0;\r\n\r\n if (m) {\r\n\r\n // x % m returns NaN if abs(m) is zero, or m is NaN.\r\n if (m.c ? !m.c[0] : !m.s) return new BigNumber(NaN);\r\n\r\n isModExp = !nIsNeg && x.isInteger() && m.isInteger();\r\n\r\n if (isModExp) x = x.mod(m);\r\n\r\n // Overflow to ±Infinity: >=2**1e10 or >=1.0000024**1e15.\r\n // Underflow to ±0: <=0.79**1e10 or <=0.9999975**1e15.\r\n } else if (n.e > 9 && (x.e > 0 || x.e < -1 || (x.e == 0\r\n // [1, 240000000]\r\n ? x.c[0] > 1 || nIsBig && x.c[1] >= 24e7\r\n // [80000000000000] [99999750000000]\r\n : x.c[0] < 8e13 || nIsBig && x.c[0] <= 9999975e7))) {\r\n\r\n // If x is negative and n is odd, k = -0, else k = 0.\r\n k = x.s < 0 && isOdd(n) ? -0 : 0;\r\n\r\n // If x >= 1, k = ±Infinity.\r\n if (x.e > -1) k = 1 / k;\r\n\r\n // If n is negative return ±0, else return ±Infinity.\r\n return new BigNumber(nIsNeg ? 1 / k : k);\r\n\r\n } else if (POW_PRECISION) {\r\n\r\n // Truncating each coefficient array to a length of k after each multiplication\r\n // equates to truncating significant digits to POW_PRECISION + [28, 41],\r\n // i.e. there will be a minimum of 28 guard digits retained.\r\n k = mathceil(POW_PRECISION / LOG_BASE + 2);\r\n }\r\n\r\n if (nIsBig) {\r\n half = new BigNumber(0.5);\r\n if (nIsNeg) n.s = 1;\r\n nIsOdd = isOdd(n);\r\n } else {\r\n i = Math.abs(+valueOf(n));\r\n nIsOdd = i % 2;\r\n }\r\n\r\n y = new BigNumber(ONE);\r\n\r\n // Performs 54 loop iterations for n of 9007199254740991.\r\n for (; ;) {\r\n\r\n if (nIsOdd) {\r\n y = y.times(x);\r\n if (!y.c) break;\r\n\r\n if (k) {\r\n if (y.c.length > k) y.c.length = k;\r\n } else if (isModExp) {\r\n y = y.mod(m); //y = y.minus(div(y, m, 0, MODULO_MODE).times(m));\r\n }\r\n }\r\n\r\n if (i) {\r\n i = mathfloor(i / 2);\r\n if (i === 0) break;\r\n nIsOdd = i % 2;\r\n } else {\r\n n = n.times(half);\r\n round(n, n.e + 1, 1);\r\n\r\n if (n.e > 14) {\r\n nIsOdd = isOdd(n);\r\n } else {\r\n i = +valueOf(n);\r\n if (i === 0) break;\r\n nIsOdd = i % 2;\r\n }\r\n }\r\n\r\n x = x.times(x);\r\n\r\n if (k) {\r\n if (x.c && x.c.length > k) x.c.length = k;\r\n } else if (isModExp) {\r\n x = x.mod(m); //x = x.minus(div(x, m, 0, MODULO_MODE).times(m));\r\n }\r\n }\r\n\r\n if (isModExp) return y;\r\n if (nIsNeg) y = ONE.div(y);\r\n\r\n return m ? y.mod(m) : k ? round(y, POW_PRECISION, ROUNDING_MODE, more) : y;\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the value of this BigNumber rounded to an integer\r\n * using rounding mode rm, or ROUNDING_MODE if rm is omitted.\r\n *\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {rm}'\r\n */\r\n P.integerValue = function (rm) {\r\n var n = new BigNumber(this);\r\n if (rm == null) rm = ROUNDING_MODE;\r\n else intCheck(rm, 0, 8);\r\n return round(n, n.e + 1, rm);\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is equal to the value of BigNumber(y, b),\r\n * otherwise return false.\r\n */\r\n P.isEqualTo = P.eq = function (y, b) {\r\n return compare(this, new BigNumber(y, b)) === 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is a finite number, otherwise return false.\r\n */\r\n P.isFinite = function () {\r\n return !!this.c;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is greater than the value of BigNumber(y, b),\r\n * otherwise return false.\r\n */\r\n P.isGreaterThan = P.gt = function (y, b) {\r\n return compare(this, new BigNumber(y, b)) > 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is greater than or equal to the value of\r\n * BigNumber(y, b), otherwise return false.\r\n */\r\n P.isGreaterThanOrEqualTo = P.gte = function (y, b) {\r\n return (b = compare(this, new BigNumber(y, b))) === 1 || b === 0;\r\n\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is an integer, otherwise return false.\r\n */\r\n P.isInteger = function () {\r\n return !!this.c && bitFloor(this.e / LOG_BASE) > this.c.length - 2;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is less than the value of BigNumber(y, b),\r\n * otherwise return false.\r\n */\r\n P.isLessThan = P.lt = function (y, b) {\r\n return compare(this, new BigNumber(y, b)) < 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is less than or equal to the value of\r\n * BigNumber(y, b), otherwise return false.\r\n */\r\n P.isLessThanOrEqualTo = P.lte = function (y, b) {\r\n return (b = compare(this, new BigNumber(y, b))) === -1 || b === 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is NaN, otherwise return false.\r\n */\r\n P.isNaN = function () {\r\n return !this.s;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is negative, otherwise return false.\r\n */\r\n P.isNegative = function () {\r\n return this.s < 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is positive, otherwise return false.\r\n */\r\n P.isPositive = function () {\r\n return this.s > 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is 0 or -0, otherwise return false.\r\n */\r\n P.isZero = function () {\r\n return !!this.c && this.c[0] == 0;\r\n };\r\n\r\n\r\n /*\r\n * n - 0 = n\r\n * n - N = N\r\n * n - I = -I\r\n * 0 - n = -n\r\n * 0 - 0 = 0\r\n * 0 - N = N\r\n * 0 - I = -I\r\n * N - n = N\r\n * N - 0 = N\r\n * N - N = N\r\n * N - I = N\r\n * I - n = I\r\n * I - 0 = I\r\n * I - N = N\r\n * I - I = N\r\n *\r\n * Return a new BigNumber whose value is the value of this BigNumber minus the value of\r\n * BigNumber(y, b).\r\n */\r\n P.minus = function (y, b) {\r\n var i, j, t, xLTy,\r\n x = this,\r\n a = x.s;\r\n\r\n y = new BigNumber(y, b);\r\n b = y.s;\r\n\r\n // Either NaN?\r\n if (!a || !b) return new BigNumber(NaN);\r\n\r\n // Signs differ?\r\n if (a != b) {\r\n y.s = -b;\r\n return x.plus(y);\r\n }\r\n\r\n var xe = x.e / LOG_BASE,\r\n ye = y.e / LOG_BASE,\r\n xc = x.c,\r\n yc = y.c;\r\n\r\n if (!xe || !ye) {\r\n\r\n // Either Infinity?\r\n if (!xc || !yc) return xc ? (y.s = -b, y) : new BigNumber(yc ? x : NaN);\r\n\r\n // Either zero?\r\n if (!xc[0] || !yc[0]) {\r\n\r\n // Return y if y is non-zero, x if x is non-zero, or zero if both are zero.\r\n return yc[0] ? (y.s = -b, y) : new BigNumber(xc[0] ? x :\r\n\r\n // IEEE 754 (2008) 6.3: n - n = -0 when rounding to -Infinity\r\n ROUNDING_MODE == 3 ? -0 : 0);\r\n }\r\n }\r\n\r\n xe = bitFloor(xe);\r\n ye = bitFloor(ye);\r\n xc = xc.slice();\r\n\r\n // Determine which is the bigger number.\r\n if (a = xe - ye) {\r\n\r\n if (xLTy = a < 0) {\r\n a = -a;\r\n t = xc;\r\n } else {\r\n ye = xe;\r\n t = yc;\r\n }\r\n\r\n t.reverse();\r\n\r\n // Prepend zeros to equalise exponents.\r\n for (b = a; b--; t.push(0));\r\n t.reverse();\r\n } else {\r\n\r\n // Exponents equal. Check digit by digit.\r\n j = (xLTy = (a = xc.length) < (b = yc.length)) ? a : b;\r\n\r\n for (a = b = 0; b < j; b++) {\r\n\r\n if (xc[b] != yc[b]) {\r\n xLTy = xc[b] < yc[b];\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // x < y? Point xc to the array of the bigger number.\r\n if (xLTy) t = xc, xc = yc, yc = t, y.s = -y.s;\r\n\r\n b = (j = yc.length) - (i = xc.length);\r\n\r\n // Append zeros to xc if shorter.\r\n // No need to add zeros to yc if shorter as subtract only needs to start at yc.length.\r\n if (b > 0) for (; b--; xc[i++] = 0);\r\n b = BASE - 1;\r\n\r\n // Subtract yc from xc.\r\n for (; j > a;) {\r\n\r\n if (xc[--j] < yc[j]) {\r\n for (i = j; i && !xc[--i]; xc[i] = b);\r\n --xc[i];\r\n xc[j] += BASE;\r\n }\r\n\r\n xc[j] -= yc[j];\r\n }\r\n\r\n // Remove leading zeros and adjust exponent accordingly.\r\n for (; xc[0] == 0; xc.splice(0, 1), --ye);\r\n\r\n // Zero?\r\n if (!xc[0]) {\r\n\r\n // Following IEEE 754 (2008) 6.3,\r\n // n - n = +0 but n - n = -0 when rounding towards -Infinity.\r\n y.s = ROUNDING_MODE == 3 ? -1 : 1;\r\n y.c = [y.e = 0];\r\n return y;\r\n }\r\n\r\n // No need to check for Infinity as +x - +y != Infinity && -x - -y != Infinity\r\n // for finite x and y.\r\n return normalise(y, xc, ye);\r\n };\r\n\r\n\r\n /*\r\n * n % 0 = N\r\n * n % N = N\r\n * n % I = n\r\n * 0 % n = 0\r\n * -0 % n = -0\r\n * 0 % 0 = N\r\n * 0 % N = N\r\n * 0 % I = 0\r\n * N % n = N\r\n * N % 0 = N\r\n * N % N = N\r\n * N % I = N\r\n * I % n = N\r\n * I % 0 = N\r\n * I % N = N\r\n * I % I = N\r\n *\r\n * Return a new BigNumber whose value is the value of this BigNumber modulo the value of\r\n * BigNumber(y, b). The result depends on the value of MODULO_MODE.\r\n */\r\n P.modulo = P.mod = function (y, b) {\r\n var q, s,\r\n x = this;\r\n\r\n y = new BigNumber(y, b);\r\n\r\n // Return NaN if x is Infinity or NaN, or y is NaN or zero.\r\n if (!x.c || !y.s || y.c && !y.c[0]) {\r\n return new BigNumber(NaN);\r\n\r\n // Return x if y is Infinity or x is zero.\r\n } else if (!y.c || x.c && !x.c[0]) {\r\n return new BigNumber(x);\r\n }\r\n\r\n if (MODULO_MODE == 9) {\r\n\r\n // Euclidian division: q = sign(y) * floor(x / abs(y))\r\n // r = x - qy where 0 <= r < abs(y)\r\n s = y.s;\r\n y.s = 1;\r\n q = div(x, y, 0, 3);\r\n y.s = s;\r\n q.s *= s;\r\n } else {\r\n q = div(x, y, 0, MODULO_MODE);\r\n }\r\n\r\n y = x.minus(q.times(y));\r\n\r\n // To match JavaScript %, ensure sign of zero is sign of dividend.\r\n if (!y.c[0] && MODULO_MODE == 1) y.s = x.s;\r\n\r\n return y;\r\n };\r\n\r\n\r\n /*\r\n * n * 0 = 0\r\n * n * N = N\r\n * n * I = I\r\n * 0 * n = 0\r\n * 0 * 0 = 0\r\n * 0 * N = N\r\n * 0 * I = N\r\n * N * n = N\r\n * N * 0 = N\r\n * N * N = N\r\n * N * I = N\r\n * I * n = I\r\n * I * 0 = N\r\n * I * N = N\r\n * I * I = I\r\n *\r\n * Return a new BigNumber whose value is the value of this BigNumber multiplied by the value\r\n * of BigNumber(y, b).\r\n */\r\n P.multipliedBy = P.times = function (y, b) {\r\n var c, e, i, j, k, m, xcL, xlo, xhi, ycL, ylo, yhi, zc,\r\n base, sqrtBase,\r\n x = this,\r\n xc = x.c,\r\n yc = (y = new BigNumber(y, b)).c;\r\n\r\n // Either NaN, ±Infinity or ±0?\r\n if (!xc || !yc || !xc[0] || !yc[0]) {\r\n\r\n // Return NaN if either is NaN, or one is 0 and the other is Infinity.\r\n if (!x.s || !y.s || xc && !xc[0] && !yc || yc && !yc[0] && !xc) {\r\n y.c = y.e = y.s = null;\r\n } else {\r\n y.s *= x.s;\r\n\r\n // Return ±Infinity if either is ±Infinity.\r\n if (!xc || !yc) {\r\n y.c = y.e = null;\r\n\r\n // Return ±0 if either is ±0.\r\n } else {\r\n y.c = [0];\r\n y.e = 0;\r\n }\r\n }\r\n\r\n return y;\r\n }\r\n\r\n e = bitFloor(x.e / LOG_BASE) + bitFloor(y.e / LOG_BASE);\r\n y.s *= x.s;\r\n xcL = xc.length;\r\n ycL = yc.length;\r\n\r\n // Ensure xc points to longer array and xcL to its length.\r\n if (xcL < ycL) zc = xc, xc = yc, yc = zc, i = xcL, xcL = ycL, ycL = i;\r\n\r\n // Initialise the result array with zeros.\r\n for (i = xcL + ycL, zc = []; i--; zc.push(0));\r\n\r\n base = BASE;\r\n sqrtBase = SQRT_BASE;\r\n\r\n for (i = ycL; --i >= 0;) {\r\n c = 0;\r\n ylo = yc[i] % sqrtBase;\r\n yhi = yc[i] / sqrtBase | 0;\r\n\r\n for (k = xcL, j = i + k; j > i;) {\r\n xlo = xc[--k] % sqrtBase;\r\n xhi = xc[k] / sqrtBase | 0;\r\n m = yhi * xlo + xhi * ylo;\r\n xlo = ylo * xlo + ((m % sqrtBase) * sqrtBase) + zc[j] + c;\r\n c = (xlo / base | 0) + (m / sqrtBase | 0) + yhi * xhi;\r\n zc[j--] = xlo % base;\r\n }\r\n\r\n zc[j] = c;\r\n }\r\n\r\n if (c) {\r\n ++e;\r\n } else {\r\n zc.splice(0, 1);\r\n }\r\n\r\n return normalise(y, zc, e);\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the value of this BigNumber negated,\r\n * i.e. multiplied by -1.\r\n */\r\n P.negated = function () {\r\n var x = new BigNumber(this);\r\n x.s = -x.s || null;\r\n return x;\r\n };\r\n\r\n\r\n /*\r\n * n + 0 = n\r\n * n + N = N\r\n * n + I = I\r\n * 0 + n = n\r\n * 0 + 0 = 0\r\n * 0 + N = N\r\n * 0 + I = I\r\n * N + n = N\r\n * N + 0 = N\r\n * N + N = N\r\n * N + I = N\r\n * I + n = I\r\n * I + 0 = I\r\n * I + N = N\r\n * I + I = I\r\n *\r\n * Return a new BigNumber whose value is the value of this BigNumber plus the value of\r\n * BigNumber(y, b).\r\n */\r\n P.plus = function (y, b) {\r\n var t,\r\n x = this,\r\n a = x.s;\r\n\r\n y = new BigNumber(y, b);\r\n b = y.s;\r\n\r\n // Either NaN?\r\n if (!a || !b) return new BigNumber(NaN);\r\n\r\n // Signs differ?\r\n if (a != b) {\r\n y.s = -b;\r\n return x.minus(y);\r\n }\r\n\r\n var xe = x.e / LOG_BASE,\r\n ye = y.e / LOG_BASE,\r\n xc = x.c,\r\n yc = y.c;\r\n\r\n if (!xe || !ye) {\r\n\r\n // Return ±Infinity if either ±Infinity.\r\n if (!xc || !yc) return new BigNumber(a / 0);\r\n\r\n // Either zero?\r\n // Return y if y is non-zero, x if x is non-zero, or zero if both are zero.\r\n if (!xc[0] || !yc[0]) return yc[0] ? y : new BigNumber(xc[0] ? x : a * 0);\r\n }\r\n\r\n xe = bitFloor(xe);\r\n ye = bitFloor(ye);\r\n xc = xc.slice();\r\n\r\n // Prepend zeros to equalise exponents. Faster to use reverse then do unshifts.\r\n if (a = xe - ye) {\r\n if (a > 0) {\r\n ye = xe;\r\n t = yc;\r\n } else {\r\n a = -a;\r\n t = xc;\r\n }\r\n\r\n t.reverse();\r\n for (; a--; t.push(0));\r\n t.reverse();\r\n }\r\n\r\n a = xc.length;\r\n b = yc.length;\r\n\r\n // Point xc to the longer array, and b to the shorter length.\r\n if (a - b < 0) t = yc, yc = xc, xc = t, b = a;\r\n\r\n // Only start adding at yc.length - 1 as the further digits of xc can be ignored.\r\n for (a = 0; b;) {\r\n a = (xc[--b] = xc[b] + yc[b] + a) / BASE | 0;\r\n xc[b] = BASE === xc[b] ? 0 : xc[b] % BASE;\r\n }\r\n\r\n if (a) {\r\n xc = [a].concat(xc);\r\n ++ye;\r\n }\r\n\r\n // No need to check for zero, as +x + +y != 0 && -x + -y != 0\r\n // ye = MAX_EXP + 1 possible\r\n return normalise(y, xc, ye);\r\n };\r\n\r\n\r\n /*\r\n * If sd is undefined or null or true or false, return the number of significant digits of\r\n * the value of this BigNumber, or null if the value of this BigNumber is ±Infinity or NaN.\r\n * If sd is true include integer-part trailing zeros in the count.\r\n *\r\n * Otherwise, if sd is a number, return a new BigNumber whose value is the value of this\r\n * BigNumber rounded to a maximum of sd significant digits using rounding mode rm, or\r\n * ROUNDING_MODE if rm is omitted.\r\n *\r\n * sd {number|boolean} number: significant digits: integer, 1 to MAX inclusive.\r\n * boolean: whether to count integer-part trailing zeros: true or false.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {sd|rm}'\r\n */\r\n P.precision = P.sd = function (sd, rm) {\r\n var c, n, v,\r\n x = this;\r\n\r\n if (sd != null && sd !== !!sd) {\r\n intCheck(sd, 1, MAX);\r\n if (rm == null) rm = ROUNDING_MODE;\r\n else intCheck(rm, 0, 8);\r\n\r\n return round(new BigNumber(x), sd, rm);\r\n }\r\n\r\n if (!(c = x.c)) return null;\r\n v = c.length - 1;\r\n n = v * LOG_BASE + 1;\r\n\r\n if (v = c[v]) {\r\n\r\n // Subtract the number of trailing zeros of the last element.\r\n for (; v % 10 == 0; v /= 10, n--);\r\n\r\n // Add the number of digits of the first element.\r\n for (v = c[0]; v >= 10; v /= 10, n++);\r\n }\r\n\r\n if (sd && x.e + 1 > n) n = x.e + 1;\r\n\r\n return n;\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the value of this BigNumber shifted by k places\r\n * (powers of 10). Shift to the right if n > 0, and to the left if n < 0.\r\n *\r\n * k {number} Integer, -MAX_SAFE_INTEGER to MAX_SAFE_INTEGER inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {k}'\r\n */\r\n P.shiftedBy = function (k) {\r\n intCheck(k, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER);\r\n return this.times('1e' + k);\r\n };\r\n\r\n\r\n /*\r\n * sqrt(-n) = N\r\n * sqrt(N) = N\r\n * sqrt(-I) = N\r\n * sqrt(I) = I\r\n * sqrt(0) = 0\r\n * sqrt(-0) = -0\r\n *\r\n * Return a new BigNumber whose value is the square root of the value of this BigNumber,\r\n * rounded according to DECIMAL_PLACES and ROUNDING_MODE.\r\n */\r\n P.squareRoot = P.sqrt = function () {\r\n var m, n, r, rep, t,\r\n x = this,\r\n c = x.c,\r\n s = x.s,\r\n e = x.e,\r\n dp = DECIMAL_PLACES + 4,\r\n half = new BigNumber('0.5');\r\n\r\n // Negative/NaN/Infinity/zero?\r\n if (s !== 1 || !c || !c[0]) {\r\n return new BigNumber(!s || s < 0 && (!c || c[0]) ? NaN : c ? x : 1 / 0);\r\n }\r\n\r\n // Initial estimate.\r\n s = Math.sqrt(+valueOf(x));\r\n\r\n // Math.sqrt underflow/overflow?\r\n // Pass x to Math.sqrt as integer, then adjust the exponent of the result.\r\n if (s == 0 || s == 1 / 0) {\r\n n = coeffToString(c);\r\n if ((n.length + e) % 2 == 0) n += '0';\r\n s = Math.sqrt(+n);\r\n e = bitFloor((e + 1) / 2) - (e < 0 || e % 2);\r\n\r\n if (s == 1 / 0) {\r\n n = '1e' + e;\r\n } else {\r\n n = s.toExponential();\r\n n = n.slice(0, n.indexOf('e') + 1) + e;\r\n }\r\n\r\n r = new BigNumber(n);\r\n } else {\r\n r = new BigNumber(s + '');\r\n }\r\n\r\n // Check for zero.\r\n // r could be zero if MIN_EXP is changed after the this value was created.\r\n // This would cause a division by zero (x/t) and hence Infinity below, which would cause\r\n // coeffToString to throw.\r\n if (r.c[0]) {\r\n e = r.e;\r\n s = e + dp;\r\n if (s < 3) s = 0;\r\n\r\n // Newton-Raphson iteration.\r\n for (; ;) {\r\n t = r;\r\n r = half.times(t.plus(div(x, t, dp, 1)));\r\n\r\n if (coeffToString(t.c).slice(0, s) === (n = coeffToString(r.c)).slice(0, s)) {\r\n\r\n // The exponent of r may here be one less than the final result exponent,\r\n // e.g 0.0009999 (e-4) --> 0.001 (e-3), so adjust s so the rounding digits\r\n // are indexed correctly.\r\n if (r.e < e) --s;\r\n n = n.slice(s - 3, s + 1);\r\n\r\n // The 4th rounding digit may be in error by -1 so if the 4 rounding digits\r\n // are 9999 or 4999 (i.e. approaching a rounding boundary) continue the\r\n // iteration.\r\n if (n == '9999' || !rep && n == '4999') {\r\n\r\n // On the first iteration only, check to see if rounding up gives the\r\n // exact result as the nines may infinitely repeat.\r\n if (!rep) {\r\n round(t, t.e + DECIMAL_PLACES + 2, 0);\r\n\r\n if (t.times(t).eq(x)) {\r\n r = t;\r\n break;\r\n }\r\n }\r\n\r\n dp += 4;\r\n s += 4;\r\n rep = 1;\r\n } else {\r\n\r\n // If rounding digits are null, 0{0,4} or 50{0,3}, check for exact\r\n // result. If not, then there are further digits and m will be truthy.\r\n if (!+n || !+n.slice(1) && n.charAt(0) == '5') {\r\n\r\n // Truncate to the first rounding digit.\r\n round(r, r.e + DECIMAL_PLACES + 2, 1);\r\n m = !r.times(r).eq(x);\r\n }\r\n\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return round(r, r.e + DECIMAL_PLACES + 1, ROUNDING_MODE, m);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this BigNumber in exponential notation and\r\n * rounded using ROUNDING_MODE to dp fixed decimal places.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n */\r\n P.toExponential = function (dp, rm) {\r\n if (dp != null) {\r\n intCheck(dp, 0, MAX);\r\n dp++;\r\n }\r\n return format(this, dp, rm, 1);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this BigNumber in fixed-point notation rounding\r\n * to dp fixed decimal places using rounding mode rm, or ROUNDING_MODE if rm is omitted.\r\n *\r\n * Note: as with JavaScript's number type, (-0).toFixed(0) is '0',\r\n * but e.g. (-0.00001).toFixed(0) is '-0'.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n */\r\n P.toFixed = function (dp, rm) {\r\n if (dp != null) {\r\n intCheck(dp, 0, MAX);\r\n dp = dp + this.e + 1;\r\n }\r\n return format(this, dp, rm);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this BigNumber in fixed-point notation rounded\r\n * using rm or ROUNDING_MODE to dp decimal places, and formatted according to the properties\r\n * of the format or FORMAT object (see BigNumber.set).\r\n *\r\n * The formatting object may contain some or all of the properties shown below.\r\n *\r\n * FORMAT = {\r\n * prefix: '',\r\n * groupSize: 3,\r\n * secondaryGroupSize: 0,\r\n * groupSeparator: ',',\r\n * decimalSeparator: '.',\r\n * fractionGroupSize: 0,\r\n * fractionGroupSeparator: '\\xA0', // non-breaking space\r\n * suffix: ''\r\n * };\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n * [format] {object} Formatting options. See FORMAT pbject above.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n * '[BigNumber Error] Argument not an object: {format}'\r\n */\r\n P.toFormat = function (dp, rm, format) {\r\n var str,\r\n x = this;\r\n\r\n if (format == null) {\r\n if (dp != null && rm && typeof rm == 'object') {\r\n format = rm;\r\n rm = null;\r\n } else if (dp && typeof dp == 'object') {\r\n format = dp;\r\n dp = rm = null;\r\n } else {\r\n format = FORMAT;\r\n }\r\n } else if (typeof format != 'object') {\r\n throw Error\r\n (bignumberError + 'Argument not an object: ' + format);\r\n }\r\n\r\n str = x.toFixed(dp, rm);\r\n\r\n if (x.c) {\r\n var i,\r\n arr = str.split('.'),\r\n g1 = +format.groupSize,\r\n g2 = +format.secondaryGroupSize,\r\n groupSeparator = format.groupSeparator || '',\r\n intPart = arr[0],\r\n fractionPart = arr[1],\r\n isNeg = x.s < 0,\r\n intDigits = isNeg ? intPart.slice(1) : intPart,\r\n len = intDigits.length;\r\n\r\n if (g2) i = g1, g1 = g2, g2 = i, len -= i;\r\n\r\n if (g1 > 0 && len > 0) {\r\n i = len % g1 || g1;\r\n intPart = intDigits.substr(0, i);\r\n for (; i < len; i += g1) intPart += groupSeparator + intDigits.substr(i, g1);\r\n if (g2 > 0) intPart += groupSeparator + intDigits.slice(i);\r\n if (isNeg) intPart = '-' + intPart;\r\n }\r\n\r\n str = fractionPart\r\n ? intPart + (format.decimalSeparator || '') + ((g2 = +format.fractionGroupSize)\r\n ? fractionPart.replace(new RegExp('\\\\d{' + g2 + '}\\\\B', 'g'),\r\n '$&' + (format.fractionGroupSeparator || ''))\r\n : fractionPart)\r\n : intPart;\r\n }\r\n\r\n return (format.prefix || '') + str + (format.suffix || '');\r\n };\r\n\r\n\r\n /*\r\n * Return an array of two BigNumbers representing the value of this BigNumber as a simple\r\n * fraction with an integer numerator and an integer denominator.\r\n * The denominator will be a positive non-zero value less than or equal to the specified\r\n * maximum denominator. If a maximum denominator is not specified, the denominator will be\r\n * the lowest value necessary to represent the number exactly.\r\n *\r\n * [md] {number|string|BigNumber} Integer >= 1, or Infinity. The maximum denominator.\r\n *\r\n * '[BigNumber Error] Argument {not an integer|out of range} : {md}'\r\n */\r\n P.toFraction = function (md) {\r\n var d, d0, d1, d2, e, exp, n, n0, n1, q, r, s,\r\n x = this,\r\n xc = x.c;\r\n\r\n if (md != null) {\r\n n = new BigNumber(md);\r\n\r\n // Throw if md is less than one or is not an integer, unless it is Infinity.\r\n if (!n.isInteger() && (n.c || n.s !== 1) || n.lt(ONE)) {\r\n throw Error\r\n (bignumberError + 'Argument ' +\r\n (n.isInteger() ? 'out of range: ' : 'not an integer: ') + valueOf(n));\r\n }\r\n }\r\n\r\n if (!xc) return new BigNumber(x);\r\n\r\n d = new BigNumber(ONE);\r\n n1 = d0 = new BigNumber(ONE);\r\n d1 = n0 = new BigNumber(ONE);\r\n s = coeffToString(xc);\r\n\r\n // Determine initial denominator.\r\n // d is a power of 10 and the minimum max denominator that specifies the value exactly.\r\n e = d.e = s.length - x.e - 1;\r\n d.c[0] = POWS_TEN[(exp = e % LOG_BASE) < 0 ? LOG_BASE + exp : exp];\r\n md = !md || n.comparedTo(d) > 0 ? (e > 0 ? d : n1) : n;\r\n\r\n exp = MAX_EXP;\r\n MAX_EXP = 1 / 0;\r\n n = new BigNumber(s);\r\n\r\n // n0 = d1 = 0\r\n n0.c[0] = 0;\r\n\r\n for (; ;) {\r\n q = div(n, d, 0, 1);\r\n d2 = d0.plus(q.times(d1));\r\n if (d2.comparedTo(md) == 1) break;\r\n d0 = d1;\r\n d1 = d2;\r\n n1 = n0.plus(q.times(d2 = n1));\r\n n0 = d2;\r\n d = n.minus(q.times(d2 = d));\r\n n = d2;\r\n }\r\n\r\n d2 = div(md.minus(d0), d1, 0, 1);\r\n n0 = n0.plus(d2.times(n1));\r\n d0 = d0.plus(d2.times(d1));\r\n n0.s = n1.s = x.s;\r\n e = e * 2;\r\n\r\n // Determine which fraction is closer to x, n0/d0 or n1/d1\r\n r = div(n1, d1, e, ROUNDING_MODE).minus(x).abs().comparedTo(\r\n div(n0, d0, e, ROUNDING_MODE).minus(x).abs()) < 1 ? [n1, d1] : [n0, d0];\r\n\r\n MAX_EXP = exp;\r\n\r\n return r;\r\n };\r\n\r\n\r\n /*\r\n * Return the value of this BigNumber converted to a number primitive.\r\n */\r\n P.toNumber = function () {\r\n return +valueOf(this);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this BigNumber rounded to sd significant digits\r\n * using rounding mode rm or ROUNDING_MODE. If sd is less than the number of digits\r\n * necessary to represent the integer part of the value in fixed-point notation, then use\r\n * exponential notation.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {sd|rm}'\r\n */\r\n P.toPrecision = function (sd, rm) {\r\n if (sd != null) intCheck(sd, 1, MAX);\r\n return format(this, sd, rm, 2);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this BigNumber in base b, or base 10 if b is\r\n * omitted. If a base is specified, including base 10, round according to DECIMAL_PLACES and\r\n * ROUNDING_MODE. If a base is not specified, and this BigNumber has a positive exponent\r\n * that is equal to or greater than TO_EXP_POS, or a negative exponent equal to or less than\r\n * TO_EXP_NEG, return exponential notation.\r\n *\r\n * [b] {number} Integer, 2 to ALPHABET.length inclusive.\r\n *\r\n * '[BigNumber Error] Base {not a primitive number|not an integer|out of range}: {b}'\r\n */\r\n P.toString = function (b) {\r\n var str,\r\n n = this,\r\n s = n.s,\r\n e = n.e;\r\n\r\n // Infinity or NaN?\r\n if (e === null) {\r\n if (s) {\r\n str = 'Infinity';\r\n if (s < 0) str = '-' + str;\r\n } else {\r\n str = 'NaN';\r\n }\r\n } else {\r\n if (b == null) {\r\n str = e <= TO_EXP_NEG || e >= TO_EXP_POS\r\n ? toExponential(coeffToString(n.c), e)\r\n : toFixedPoint(coeffToString(n.c), e, '0');\r\n } else if (b === 10) {\r\n n = round(new BigNumber(n), DECIMAL_PLACES + e + 1, ROUNDING_MODE);\r\n str = toFixedPoint(coeffToString(n.c), n.e, '0');\r\n } else {\r\n intCheck(b, 2, ALPHABET.length, 'Base');\r\n str = convertBase(toFixedPoint(coeffToString(n.c), e, '0'), 10, b, s, true);\r\n }\r\n\r\n if (s < 0 && n.c[0]) str = '-' + str;\r\n }\r\n\r\n return str;\r\n };\r\n\r\n\r\n /*\r\n * Return as toString, but do not accept a base argument, and include the minus sign for\r\n * negative zero.\r\n */\r\n P.valueOf = P.toJSON = function () {\r\n return valueOf(this);\r\n };\r\n\r\n\r\n P._isBigNumber = true;\r\n\r\n if (configObject != null) BigNumber.set(configObject);\r\n\r\n return BigNumber;\r\n }\r\n\r\n\r\n // PRIVATE HELPER FUNCTIONS\r\n\r\n // These functions don't need access to variables,\r\n // e.g. DECIMAL_PLACES, in the scope of the `clone` function above.\r\n\r\n\r\n function bitFloor(n) {\r\n var i = n | 0;\r\n return n > 0 || n === i ? i : i - 1;\r\n }\r\n\r\n\r\n // Return a coefficient array as a string of base 10 digits.\r\n function coeffToString(a) {\r\n var s, z,\r\n i = 1,\r\n j = a.length,\r\n r = a[0] + '';\r\n\r\n for (; i < j;) {\r\n s = a[i++] + '';\r\n z = LOG_BASE - s.length;\r\n for (; z--; s = '0' + s);\r\n r += s;\r\n }\r\n\r\n // Determine trailing zeros.\r\n for (j = r.length; r.charCodeAt(--j) === 48;);\r\n\r\n return r.slice(0, j + 1 || 1);\r\n }\r\n\r\n\r\n // Compare the value of BigNumbers x and y.\r\n function compare(x, y) {\r\n var a, b,\r\n xc = x.c,\r\n yc = y.c,\r\n i = x.s,\r\n j = y.s,\r\n k = x.e,\r\n l = y.e;\r\n\r\n // Either NaN?\r\n if (!i || !j) return null;\r\n\r\n a = xc && !xc[0];\r\n b = yc && !yc[0];\r\n\r\n // Either zero?\r\n if (a || b) return a ? b ? 0 : -j : i;\r\n\r\n // Signs differ?\r\n if (i != j) return i;\r\n\r\n a = i < 0;\r\n b = k == l;\r\n\r\n // Either Infinity?\r\n if (!xc || !yc) return b ? 0 : !xc ^ a ? 1 : -1;\r\n\r\n // Compare exponents.\r\n if (!b) return k > l ^ a ? 1 : -1;\r\n\r\n j = (k = xc.length) < (l = yc.length) ? k : l;\r\n\r\n // Compare digit by digit.\r\n for (i = 0; i < j; i++) if (xc[i] != yc[i]) return xc[i] > yc[i] ^ a ? 1 : -1;\r\n\r\n // Compare lengths.\r\n return k == l ? 0 : k > l ^ a ? 1 : -1;\r\n }\r\n\r\n\r\n /*\r\n * Check that n is a primitive number, an integer, and in range, otherwise throw.\r\n */\r\n function intCheck(n, min, max, name) {\r\n if (n < min || n > max || n !== mathfloor(n)) {\r\n throw Error\r\n (bignumberError + (name || 'Argument') + (typeof n == 'number'\r\n ? n < min || n > max ? ' out of range: ' : ' not an integer: '\r\n : ' not a primitive number: ') + String(n));\r\n }\r\n }\r\n\r\n\r\n // Assumes finite n.\r\n function isOdd(n) {\r\n var k = n.c.length - 1;\r\n return bitFloor(n.e / LOG_BASE) == k && n.c[k] % 2 != 0;\r\n }\r\n\r\n\r\n function toExponential(str, e) {\r\n return (str.length > 1 ? str.charAt(0) + '.' + str.slice(1) : str) +\r\n (e < 0 ? 'e' : 'e+') + e;\r\n }\r\n\r\n\r\n function toFixedPoint(str, e, z) {\r\n var len, zs;\r\n\r\n // Negative exponent?\r\n if (e < 0) {\r\n\r\n // Prepend zeros.\r\n for (zs = z + '.'; ++e; zs += z);\r\n str = zs + str;\r\n\r\n // Positive exponent\r\n } else {\r\n len = str.length;\r\n\r\n // Append zeros.\r\n if (++e > len) {\r\n for (zs = z, e -= len; --e; zs += z);\r\n str += zs;\r\n } else if (e < len) {\r\n str = str.slice(0, e) + '.' + str.slice(e);\r\n }\r\n }\r\n\r\n return str;\r\n }\r\n\r\n\r\n // EXPORT\r\n\r\n\r\n BigNumber = clone();\r\n BigNumber['default'] = BigNumber.BigNumber = BigNumber;\r\n\r\n // AMD.\r\n if (typeof define == 'function' && define.amd) {\r\n define(function () { return BigNumber; });\r\n\r\n // Node.js and other environments that support module.exports.\r\n } else if (typeof module != 'undefined' && module.exports) {\r\n module.exports = BigNumber;\r\n\r\n // Browser.\r\n } else {\r\n if (!globalObject) {\r\n globalObject = typeof self != 'undefined' && self ? self : window;\r\n }\r\n\r\n globalObject.BigNumber = BigNumber;\r\n }\r\n})(this);\r\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RTLLanguages = [\"ar\"];\nvar I8N = (function () {\n function I8N() {\n }\n I8N.locale = function () {\n return this.current;\n };\n I8N.setLocale = function (locale) {\n this.current = locale;\n };\n I8N.isRTL = function () {\n var _this = this;\n return exports.RTLLanguages.find(function (x) { return x === _this.current; }) != undefined;\n };\n I8N.current = \"en\";\n return I8N;\n}());\nexports.I8N = I8N;\nexports.default = I8N;\n//# sourceMappingURL=I8N.js.map","//! moment.js\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n global.moment = factory()\n}(this, (function () { 'use strict';\n\n var hookCallback;\n\n function hooks () {\n return hookCallback.apply(null, arguments);\n }\n\n // This is done to register the method called with moment()\n // without creating circular dependencies.\n function setHookCallback (callback) {\n hookCallback = callback;\n }\n\n function isArray(input) {\n return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]';\n }\n\n function isObject(input) {\n // IE8 will treat undefined and null as object if it wasn't for\n // input != null\n return input != null && Object.prototype.toString.call(input) === '[object Object]';\n }\n\n function isObjectEmpty(obj) {\n if (Object.getOwnPropertyNames) {\n return (Object.getOwnPropertyNames(obj).length === 0);\n } else {\n var k;\n for (k in obj) {\n if (obj.hasOwnProperty(k)) {\n return false;\n }\n }\n return true;\n }\n }\n\n function isUndefined(input) {\n return input === void 0;\n }\n\n function isNumber(input) {\n return typeof input === 'number' || Object.prototype.toString.call(input) === '[object Number]';\n }\n\n function isDate(input) {\n return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]';\n }\n\n function map(arr, fn) {\n var res = [], i;\n for (i = 0; i < arr.length; ++i) {\n res.push(fn(arr[i], i));\n }\n return res;\n }\n\n function hasOwnProp(a, b) {\n return Object.prototype.hasOwnProperty.call(a, b);\n }\n\n function extend(a, b) {\n for (var i in b) {\n if (hasOwnProp(b, i)) {\n a[i] = b[i];\n }\n }\n\n if (hasOwnProp(b, 'toString')) {\n a.toString = b.toString;\n }\n\n if (hasOwnProp(b, 'valueOf')) {\n a.valueOf = b.valueOf;\n }\n\n return a;\n }\n\n function createUTC (input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, true).utc();\n }\n\n function defaultParsingFlags() {\n // We need to deep clone this object.\n return {\n empty : false,\n unusedTokens : [],\n unusedInput : [],\n overflow : -2,\n charsLeftOver : 0,\n nullInput : false,\n invalidMonth : null,\n invalidFormat : false,\n userInvalidated : false,\n iso : false,\n parsedDateParts : [],\n meridiem : null,\n rfc2822 : false,\n weekdayMismatch : false\n };\n }\n\n function getParsingFlags(m) {\n if (m._pf == null) {\n m._pf = defaultParsingFlags();\n }\n return m._pf;\n }\n\n var some;\n if (Array.prototype.some) {\n some = Array.prototype.some;\n } else {\n some = function (fun) {\n var t = Object(this);\n var len = t.length >>> 0;\n\n for (var i = 0; i < len; i++) {\n if (i in t && fun.call(this, t[i], i, t)) {\n return true;\n }\n }\n\n return false;\n };\n }\n\n function isValid(m) {\n if (m._isValid == null) {\n var flags = getParsingFlags(m);\n var parsedParts = some.call(flags.parsedDateParts, function (i) {\n return i != null;\n });\n var isNowValid = !isNaN(m._d.getTime()) &&\n flags.overflow < 0 &&\n !flags.empty &&\n !flags.invalidMonth &&\n !flags.invalidWeekday &&\n !flags.weekdayMismatch &&\n !flags.nullInput &&\n !flags.invalidFormat &&\n !flags.userInvalidated &&\n (!flags.meridiem || (flags.meridiem && parsedParts));\n\n if (m._strict) {\n isNowValid = isNowValid &&\n flags.charsLeftOver === 0 &&\n flags.unusedTokens.length === 0 &&\n flags.bigHour === undefined;\n }\n\n if (Object.isFrozen == null || !Object.isFrozen(m)) {\n m._isValid = isNowValid;\n }\n else {\n return isNowValid;\n }\n }\n return m._isValid;\n }\n\n function createInvalid (flags) {\n var m = createUTC(NaN);\n if (flags != null) {\n extend(getParsingFlags(m), flags);\n }\n else {\n getParsingFlags(m).userInvalidated = true;\n }\n\n return m;\n }\n\n // Plugins that add properties should also add the key here (null value),\n // so we can properly clone ourselves.\n var momentProperties = hooks.momentProperties = [];\n\n function copyConfig(to, from) {\n var i, prop, val;\n\n if (!isUndefined(from._isAMomentObject)) {\n to._isAMomentObject = from._isAMomentObject;\n }\n if (!isUndefined(from._i)) {\n to._i = from._i;\n }\n if (!isUndefined(from._f)) {\n to._f = from._f;\n }\n if (!isUndefined(from._l)) {\n to._l = from._l;\n }\n if (!isUndefined(from._strict)) {\n to._strict = from._strict;\n }\n if (!isUndefined(from._tzm)) {\n to._tzm = from._tzm;\n }\n if (!isUndefined(from._isUTC)) {\n to._isUTC = from._isUTC;\n }\n if (!isUndefined(from._offset)) {\n to._offset = from._offset;\n }\n if (!isUndefined(from._pf)) {\n to._pf = getParsingFlags(from);\n }\n if (!isUndefined(from._locale)) {\n to._locale = from._locale;\n }\n\n if (momentProperties.length > 0) {\n for (i = 0; i < momentProperties.length; i++) {\n prop = momentProperties[i];\n val = from[prop];\n if (!isUndefined(val)) {\n to[prop] = val;\n }\n }\n }\n\n return to;\n }\n\n var updateInProgress = false;\n\n // Moment prototype object\n function Moment(config) {\n copyConfig(this, config);\n this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n if (!this.isValid()) {\n this._d = new Date(NaN);\n }\n // Prevent infinite loop in case updateOffset creates new moment\n // objects.\n if (updateInProgress === false) {\n updateInProgress = true;\n hooks.updateOffset(this);\n updateInProgress = false;\n }\n }\n\n function isMoment (obj) {\n return obj instanceof Moment || (obj != null && obj._isAMomentObject != null);\n }\n\n function absFloor (number) {\n if (number < 0) {\n // -0 -> 0\n return Math.ceil(number) || 0;\n } else {\n return Math.floor(number);\n }\n }\n\n function toInt(argumentForCoercion) {\n var coercedNumber = +argumentForCoercion,\n value = 0;\n\n if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n value = absFloor(coercedNumber);\n }\n\n return value;\n }\n\n // compare two arrays, return the number of differences\n function compareArrays(array1, array2, dontConvert) {\n var len = Math.min(array1.length, array2.length),\n lengthDiff = Math.abs(array1.length - array2.length),\n diffs = 0,\n i;\n for (i = 0; i < len; i++) {\n if ((dontConvert && array1[i] !== array2[i]) ||\n (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) {\n diffs++;\n }\n }\n return diffs + lengthDiff;\n }\n\n function warn(msg) {\n if (hooks.suppressDeprecationWarnings === false &&\n (typeof console !== 'undefined') && console.warn) {\n console.warn('Deprecation warning: ' + msg);\n }\n }\n\n function deprecate(msg, fn) {\n var firstTime = true;\n\n return extend(function () {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(null, msg);\n }\n if (firstTime) {\n var args = [];\n var arg;\n for (var i = 0; i < arguments.length; i++) {\n arg = '';\n if (typeof arguments[i] === 'object') {\n arg += '\\n[' + i + '] ';\n for (var key in arguments[0]) {\n arg += key + ': ' + arguments[0][key] + ', ';\n }\n arg = arg.slice(0, -2); // Remove trailing comma and space\n } else {\n arg = arguments[i];\n }\n args.push(arg);\n }\n warn(msg + '\\nArguments: ' + Array.prototype.slice.call(args).join('') + '\\n' + (new Error()).stack);\n firstTime = false;\n }\n return fn.apply(this, arguments);\n }, fn);\n }\n\n var deprecations = {};\n\n function deprecateSimple(name, msg) {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(name, msg);\n }\n if (!deprecations[name]) {\n warn(msg);\n deprecations[name] = true;\n }\n }\n\n hooks.suppressDeprecationWarnings = false;\n hooks.deprecationHandler = null;\n\n function isFunction(input) {\n return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';\n }\n\n function set (config) {\n var prop, i;\n for (i in config) {\n prop = config[i];\n if (isFunction(prop)) {\n this[i] = prop;\n } else {\n this['_' + i] = prop;\n }\n }\n this._config = config;\n // Lenient ordinal parsing accepts just a number in addition to\n // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n this._dayOfMonthOrdinalParseLenient = new RegExp(\n (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n '|' + (/\\d{1,2}/).source);\n }\n\n function mergeConfigs(parentConfig, childConfig) {\n var res = extend({}, parentConfig), prop;\n for (prop in childConfig) {\n if (hasOwnProp(childConfig, prop)) {\n if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n res[prop] = {};\n extend(res[prop], parentConfig[prop]);\n extend(res[prop], childConfig[prop]);\n } else if (childConfig[prop] != null) {\n res[prop] = childConfig[prop];\n } else {\n delete res[prop];\n }\n }\n }\n for (prop in parentConfig) {\n if (hasOwnProp(parentConfig, prop) &&\n !hasOwnProp(childConfig, prop) &&\n isObject(parentConfig[prop])) {\n // make sure changes to properties don't modify parent config\n res[prop] = extend({}, res[prop]);\n }\n }\n return res;\n }\n\n function Locale(config) {\n if (config != null) {\n this.set(config);\n }\n }\n\n var keys;\n\n if (Object.keys) {\n keys = Object.keys;\n } else {\n keys = function (obj) {\n var i, res = [];\n for (i in obj) {\n if (hasOwnProp(obj, i)) {\n res.push(i);\n }\n }\n return res;\n };\n }\n\n var defaultCalendar = {\n sameDay : '[Today at] LT',\n nextDay : '[Tomorrow at] LT',\n nextWeek : 'dddd [at] LT',\n lastDay : '[Yesterday at] LT',\n lastWeek : '[Last] dddd [at] LT',\n sameElse : 'L'\n };\n\n function calendar (key, mom, now) {\n var output = this._calendar[key] || this._calendar['sameElse'];\n return isFunction(output) ? output.call(mom, now) : output;\n }\n\n var defaultLongDateFormat = {\n LTS : 'h:mm:ss A',\n LT : 'h:mm A',\n L : 'MM/DD/YYYY',\n LL : 'MMMM D, YYYY',\n LLL : 'MMMM D, YYYY h:mm A',\n LLLL : 'dddd, MMMM D, YYYY h:mm A'\n };\n\n function longDateFormat (key) {\n var format = this._longDateFormat[key],\n formatUpper = this._longDateFormat[key.toUpperCase()];\n\n if (format || !formatUpper) {\n return format;\n }\n\n this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) {\n return val.slice(1);\n });\n\n return this._longDateFormat[key];\n }\n\n var defaultInvalidDate = 'Invalid date';\n\n function invalidDate () {\n return this._invalidDate;\n }\n\n var defaultOrdinal = '%d';\n var defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n function ordinal (number) {\n return this._ordinal.replace('%d', number);\n }\n\n var defaultRelativeTime = {\n future : 'in %s',\n past : '%s ago',\n s : 'a few seconds',\n ss : '%d seconds',\n m : 'a minute',\n mm : '%d minutes',\n h : 'an hour',\n hh : '%d hours',\n d : 'a day',\n dd : '%d days',\n M : 'a month',\n MM : '%d months',\n y : 'a year',\n yy : '%d years'\n };\n\n function relativeTime (number, withoutSuffix, string, isFuture) {\n var output = this._relativeTime[string];\n return (isFunction(output)) ?\n output(number, withoutSuffix, string, isFuture) :\n output.replace(/%d/i, number);\n }\n\n function pastFuture (diff, output) {\n var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n }\n\n var aliases = {};\n\n function addUnitAlias (unit, shorthand) {\n var lowerCase = unit.toLowerCase();\n aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n }\n\n function normalizeUnits(units) {\n return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined;\n }\n\n function normalizeObjectUnits(inputObject) {\n var normalizedInput = {},\n normalizedProp,\n prop;\n\n for (prop in inputObject) {\n if (hasOwnProp(inputObject, prop)) {\n normalizedProp = normalizeUnits(prop);\n if (normalizedProp) {\n normalizedInput[normalizedProp] = inputObject[prop];\n }\n }\n }\n\n return normalizedInput;\n }\n\n var priorities = {};\n\n function addUnitPriority(unit, priority) {\n priorities[unit] = priority;\n }\n\n function getPrioritizedUnits(unitsObj) {\n var units = [];\n for (var u in unitsObj) {\n units.push({unit: u, priority: priorities[u]});\n }\n units.sort(function (a, b) {\n return a.priority - b.priority;\n });\n return units;\n }\n\n function zeroFill(number, targetLength, forceSign) {\n var absNumber = '' + Math.abs(number),\n zerosToFill = targetLength - absNumber.length,\n sign = number >= 0;\n return (sign ? (forceSign ? '+' : '') : '-') +\n Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;\n }\n\n var formattingTokens = /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g;\n\n var localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g;\n\n var formatFunctions = {};\n\n var formatTokenFunctions = {};\n\n // token: 'M'\n // padded: ['MM', 2]\n // ordinal: 'Mo'\n // callback: function () { this.month() + 1 }\n function addFormatToken (token, padded, ordinal, callback) {\n var func = callback;\n if (typeof callback === 'string') {\n func = function () {\n return this[callback]();\n };\n }\n if (token) {\n formatTokenFunctions[token] = func;\n }\n if (padded) {\n formatTokenFunctions[padded[0]] = function () {\n return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n };\n }\n if (ordinal) {\n formatTokenFunctions[ordinal] = function () {\n return this.localeData().ordinal(func.apply(this, arguments), token);\n };\n }\n }\n\n function removeFormattingTokens(input) {\n if (input.match(/\\[[\\s\\S]/)) {\n return input.replace(/^\\[|\\]$/g, '');\n }\n return input.replace(/\\\\/g, '');\n }\n\n function makeFormatFunction(format) {\n var array = format.match(formattingTokens), i, length;\n\n for (i = 0, length = array.length; i < length; i++) {\n if (formatTokenFunctions[array[i]]) {\n array[i] = formatTokenFunctions[array[i]];\n } else {\n array[i] = removeFormattingTokens(array[i]);\n }\n }\n\n return function (mom) {\n var output = '', i;\n for (i = 0; i < length; i++) {\n output += isFunction(array[i]) ? array[i].call(mom, format) : array[i];\n }\n return output;\n };\n }\n\n // format date using native date object\n function formatMoment(m, format) {\n if (!m.isValid()) {\n return m.localeData().invalidDate();\n }\n\n format = expandFormat(format, m.localeData());\n formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format);\n\n return formatFunctions[format](m);\n }\n\n function expandFormat(format, locale) {\n var i = 5;\n\n function replaceLongDateFormatTokens(input) {\n return locale.longDateFormat(input) || input;\n }\n\n localFormattingTokens.lastIndex = 0;\n while (i >= 0 && localFormattingTokens.test(format)) {\n format = format.replace(localFormattingTokens, replaceLongDateFormatTokens);\n localFormattingTokens.lastIndex = 0;\n i -= 1;\n }\n\n return format;\n }\n\n var match1 = /\\d/; // 0 - 9\n var match2 = /\\d\\d/; // 00 - 99\n var match3 = /\\d{3}/; // 000 - 999\n var match4 = /\\d{4}/; // 0000 - 9999\n var match6 = /[+-]?\\d{6}/; // -999999 - 999999\n var match1to2 = /\\d\\d?/; // 0 - 99\n var match3to4 = /\\d\\d\\d\\d?/; // 999 - 9999\n var match5to6 = /\\d\\d\\d\\d\\d\\d?/; // 99999 - 999999\n var match1to3 = /\\d{1,3}/; // 0 - 999\n var match1to4 = /\\d{1,4}/; // 0 - 9999\n var match1to6 = /[+-]?\\d{1,6}/; // -999999 - 999999\n\n var matchUnsigned = /\\d+/; // 0 - inf\n var matchSigned = /[+-]?\\d+/; // -inf - inf\n\n var matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi; // +00:00 -00:00 +0000 -0000 or Z\n var matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n\n var matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/; // 123456789 123456789.123\n\n // any word (or two) characters or numbers including two/three word month in arabic.\n // includes scottish gaelic two word and hyphenated months\n var matchWord = /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i;\n\n var regexes = {};\n\n function addRegexToken (token, regex, strictRegex) {\n regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) {\n return (isStrict && strictRegex) ? strictRegex : regex;\n };\n }\n\n function getParseRegexForToken (token, config) {\n if (!hasOwnProp(regexes, token)) {\n return new RegExp(unescapeFormat(token));\n }\n\n return regexes[token](config._strict, config._locale);\n }\n\n // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n function unescapeFormat(s) {\n return regexEscape(s.replace('\\\\', '').replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g, function (matched, p1, p2, p3, p4) {\n return p1 || p2 || p3 || p4;\n }));\n }\n\n function regexEscape(s) {\n return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n }\n\n var tokens = {};\n\n function addParseToken (token, callback) {\n var i, func = callback;\n if (typeof token === 'string') {\n token = [token];\n }\n if (isNumber(callback)) {\n func = function (input, array) {\n array[callback] = toInt(input);\n };\n }\n for (i = 0; i < token.length; i++) {\n tokens[token[i]] = func;\n }\n }\n\n function addWeekParseToken (token, callback) {\n addParseToken(token, function (input, array, config, token) {\n config._w = config._w || {};\n callback(input, config._w, config, token);\n });\n }\n\n function addTimeToArrayFromToken(token, input, config) {\n if (input != null && hasOwnProp(tokens, token)) {\n tokens[token](input, config._a, config, token);\n }\n }\n\n var YEAR = 0;\n var MONTH = 1;\n var DATE = 2;\n var HOUR = 3;\n var MINUTE = 4;\n var SECOND = 5;\n var MILLISECOND = 6;\n var WEEK = 7;\n var WEEKDAY = 8;\n\n // FORMATTING\n\n addFormatToken('Y', 0, 0, function () {\n var y = this.year();\n return y <= 9999 ? '' + y : '+' + y;\n });\n\n addFormatToken(0, ['YY', 2], 0, function () {\n return this.year() % 100;\n });\n\n addFormatToken(0, ['YYYY', 4], 0, 'year');\n addFormatToken(0, ['YYYYY', 5], 0, 'year');\n addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n // ALIASES\n\n addUnitAlias('year', 'y');\n\n // PRIORITIES\n\n addUnitPriority('year', 1);\n\n // PARSING\n\n addRegexToken('Y', matchSigned);\n addRegexToken('YY', match1to2, match2);\n addRegexToken('YYYY', match1to4, match4);\n addRegexToken('YYYYY', match1to6, match6);\n addRegexToken('YYYYYY', match1to6, match6);\n\n addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n addParseToken('YYYY', function (input, array) {\n array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n });\n addParseToken('YY', function (input, array) {\n array[YEAR] = hooks.parseTwoDigitYear(input);\n });\n addParseToken('Y', function (input, array) {\n array[YEAR] = parseInt(input, 10);\n });\n\n // HELPERS\n\n function daysInYear(year) {\n return isLeapYear(year) ? 366 : 365;\n }\n\n function isLeapYear(year) {\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n }\n\n // HOOKS\n\n hooks.parseTwoDigitYear = function (input) {\n return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n };\n\n // MOMENTS\n\n var getSetYear = makeGetSet('FullYear', true);\n\n function getIsLeapYear () {\n return isLeapYear(this.year());\n }\n\n function makeGetSet (unit, keepTime) {\n return function (value) {\n if (value != null) {\n set$1(this, unit, value);\n hooks.updateOffset(this, keepTime);\n return this;\n } else {\n return get(this, unit);\n }\n };\n }\n\n function get (mom, unit) {\n return mom.isValid() ?\n mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN;\n }\n\n function set$1 (mom, unit, value) {\n if (mom.isValid() && !isNaN(value)) {\n if (unit === 'FullYear' && isLeapYear(mom.year()) && mom.month() === 1 && mom.date() === 29) {\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value, mom.month(), daysInMonth(value, mom.month()));\n }\n else {\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n }\n }\n }\n\n // MOMENTS\n\n function stringGet (units) {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units]();\n }\n return this;\n }\n\n\n function stringSet (units, value) {\n if (typeof units === 'object') {\n units = normalizeObjectUnits(units);\n var prioritized = getPrioritizedUnits(units);\n for (var i = 0; i < prioritized.length; i++) {\n this[prioritized[i].unit](units[prioritized[i].unit]);\n }\n } else {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units](value);\n }\n }\n return this;\n }\n\n function mod(n, x) {\n return ((n % x) + x) % x;\n }\n\n var indexOf;\n\n if (Array.prototype.indexOf) {\n indexOf = Array.prototype.indexOf;\n } else {\n indexOf = function (o) {\n // I know\n var i;\n for (i = 0; i < this.length; ++i) {\n if (this[i] === o) {\n return i;\n }\n }\n return -1;\n };\n }\n\n function daysInMonth(year, month) {\n if (isNaN(year) || isNaN(month)) {\n return NaN;\n }\n var modMonth = mod(month, 12);\n year += (month - modMonth) / 12;\n return modMonth === 1 ? (isLeapYear(year) ? 29 : 28) : (31 - modMonth % 7 % 2);\n }\n\n // FORMATTING\n\n addFormatToken('M', ['MM', 2], 'Mo', function () {\n return this.month() + 1;\n });\n\n addFormatToken('MMM', 0, 0, function (format) {\n return this.localeData().monthsShort(this, format);\n });\n\n addFormatToken('MMMM', 0, 0, function (format) {\n return this.localeData().months(this, format);\n });\n\n // ALIASES\n\n addUnitAlias('month', 'M');\n\n // PRIORITY\n\n addUnitPriority('month', 8);\n\n // PARSING\n\n addRegexToken('M', match1to2);\n addRegexToken('MM', match1to2, match2);\n addRegexToken('MMM', function (isStrict, locale) {\n return locale.monthsShortRegex(isStrict);\n });\n addRegexToken('MMMM', function (isStrict, locale) {\n return locale.monthsRegex(isStrict);\n });\n\n addParseToken(['M', 'MM'], function (input, array) {\n array[MONTH] = toInt(input) - 1;\n });\n\n addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n var month = config._locale.monthsParse(input, token, config._strict);\n // if we didn't find a month name, mark the date as invalid.\n if (month != null) {\n array[MONTH] = month;\n } else {\n getParsingFlags(config).invalidMonth = input;\n }\n });\n\n // LOCALES\n\n var MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/;\n var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_');\n function localeMonths (m, format) {\n if (!m) {\n return isArray(this._months) ? this._months :\n this._months['standalone'];\n }\n return isArray(this._months) ? this._months[m.month()] :\n this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()];\n }\n\n var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_');\n function localeMonthsShort (m, format) {\n if (!m) {\n return isArray(this._monthsShort) ? this._monthsShort :\n this._monthsShort['standalone'];\n }\n return isArray(this._monthsShort) ? this._monthsShort[m.month()] :\n this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()];\n }\n\n function handleStrictParse(monthName, format, strict) {\n var i, ii, mom, llc = monthName.toLocaleLowerCase();\n if (!this._monthsParse) {\n // this is not used\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n for (i = 0; i < 12; ++i) {\n mom = createUTC([2000, i]);\n this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase();\n this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeMonthsParse (monthName, format, strict) {\n var i, mom, regex;\n\n if (this._monthsParseExact) {\n return handleStrictParse.call(this, monthName, format, strict);\n }\n\n if (!this._monthsParse) {\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n }\n\n // TODO: add sorting\n // Sorting makes sure if one month (or abbr) is a prefix of another\n // see sorting in computeMonthsParse\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n if (strict && !this._longMonthsParse[i]) {\n this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i');\n this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i');\n }\n if (!strict && !this._monthsParse[i]) {\n regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) {\n return i;\n } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) {\n return i;\n } else if (!strict && this._monthsParse[i].test(monthName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function setMonth (mom, value) {\n var dayOfMonth;\n\n if (!mom.isValid()) {\n // No op\n return mom;\n }\n\n if (typeof value === 'string') {\n if (/^\\d+$/.test(value)) {\n value = toInt(value);\n } else {\n value = mom.localeData().monthsParse(value);\n // TODO: Another silent failure?\n if (!isNumber(value)) {\n return mom;\n }\n }\n }\n\n dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n return mom;\n }\n\n function getSetMonth (value) {\n if (value != null) {\n setMonth(this, value);\n hooks.updateOffset(this, true);\n return this;\n } else {\n return get(this, 'Month');\n }\n }\n\n function getDaysInMonth () {\n return daysInMonth(this.year(), this.month());\n }\n\n var defaultMonthsShortRegex = matchWord;\n function monthsShortRegex (isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsShortStrictRegex;\n } else {\n return this._monthsShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsShortRegex')) {\n this._monthsShortRegex = defaultMonthsShortRegex;\n }\n return this._monthsShortStrictRegex && isStrict ?\n this._monthsShortStrictRegex : this._monthsShortRegex;\n }\n }\n\n var defaultMonthsRegex = matchWord;\n function monthsRegex (isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsStrictRegex;\n } else {\n return this._monthsRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsRegex')) {\n this._monthsRegex = defaultMonthsRegex;\n }\n return this._monthsStrictRegex && isStrict ?\n this._monthsStrictRegex : this._monthsRegex;\n }\n }\n\n function computeMonthsParse () {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var shortPieces = [], longPieces = [], mixedPieces = [],\n i, mom;\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n shortPieces.push(this.monthsShort(mom, ''));\n longPieces.push(this.months(mom, ''));\n mixedPieces.push(this.months(mom, ''));\n mixedPieces.push(this.monthsShort(mom, ''));\n }\n // Sorting makes sure if one month (or abbr) is a prefix of another it\n // will match the longer piece.\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n for (i = 0; i < 12; i++) {\n shortPieces[i] = regexEscape(shortPieces[i]);\n longPieces[i] = regexEscape(longPieces[i]);\n }\n for (i = 0; i < 24; i++) {\n mixedPieces[i] = regexEscape(mixedPieces[i]);\n }\n\n this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._monthsShortRegex = this._monthsRegex;\n this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n }\n\n function createDate (y, m, d, h, M, s, ms) {\n // can't just apply() to create a date:\n // https://stackoverflow.com/q/181348\n var date;\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n date = new Date(y + 400, m, d, h, M, s, ms);\n if (isFinite(date.getFullYear())) {\n date.setFullYear(y);\n }\n } else {\n date = new Date(y, m, d, h, M, s, ms);\n }\n\n return date;\n }\n\n function createUTCDate (y) {\n var date;\n // the Date.UTC function remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n var args = Array.prototype.slice.call(arguments);\n // preserve leap years using a full 400 year cycle, then reset\n args[0] = y + 400;\n date = new Date(Date.UTC.apply(null, args));\n if (isFinite(date.getUTCFullYear())) {\n date.setUTCFullYear(y);\n }\n } else {\n date = new Date(Date.UTC.apply(null, arguments));\n }\n\n return date;\n }\n\n // start-of-first-week - start-of-year\n function firstWeekOffset(year, dow, doy) {\n var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n fwd = 7 + dow - doy,\n // first-week day local weekday -- which local weekday is fwd\n fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n return -fwdlw + fwd - 1;\n }\n\n // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n var localWeekday = (7 + weekday - dow) % 7,\n weekOffset = firstWeekOffset(year, dow, doy),\n dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n resYear, resDayOfYear;\n\n if (dayOfYear <= 0) {\n resYear = year - 1;\n resDayOfYear = daysInYear(resYear) + dayOfYear;\n } else if (dayOfYear > daysInYear(year)) {\n resYear = year + 1;\n resDayOfYear = dayOfYear - daysInYear(year);\n } else {\n resYear = year;\n resDayOfYear = dayOfYear;\n }\n\n return {\n year: resYear,\n dayOfYear: resDayOfYear\n };\n }\n\n function weekOfYear(mom, dow, doy) {\n var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n resWeek, resYear;\n\n if (week < 1) {\n resYear = mom.year() - 1;\n resWeek = week + weeksInYear(resYear, dow, doy);\n } else if (week > weeksInYear(mom.year(), dow, doy)) {\n resWeek = week - weeksInYear(mom.year(), dow, doy);\n resYear = mom.year() + 1;\n } else {\n resYear = mom.year();\n resWeek = week;\n }\n\n return {\n week: resWeek,\n year: resYear\n };\n }\n\n function weeksInYear(year, dow, doy) {\n var weekOffset = firstWeekOffset(year, dow, doy),\n weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n }\n\n // FORMATTING\n\n addFormatToken('w', ['ww', 2], 'wo', 'week');\n addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n // ALIASES\n\n addUnitAlias('week', 'w');\n addUnitAlias('isoWeek', 'W');\n\n // PRIORITIES\n\n addUnitPriority('week', 5);\n addUnitPriority('isoWeek', 5);\n\n // PARSING\n\n addRegexToken('w', match1to2);\n addRegexToken('ww', match1to2, match2);\n addRegexToken('W', match1to2);\n addRegexToken('WW', match1to2, match2);\n\n addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) {\n week[token.substr(0, 1)] = toInt(input);\n });\n\n // HELPERS\n\n // LOCALES\n\n function localeWeek (mom) {\n return weekOfYear(mom, this._week.dow, this._week.doy).week;\n }\n\n var defaultLocaleWeek = {\n dow : 0, // Sunday is the first day of the week.\n doy : 6 // The week that contains Jan 6th is the first week of the year.\n };\n\n function localeFirstDayOfWeek () {\n return this._week.dow;\n }\n\n function localeFirstDayOfYear () {\n return this._week.doy;\n }\n\n // MOMENTS\n\n function getSetWeek (input) {\n var week = this.localeData().week(this);\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n function getSetISOWeek (input) {\n var week = weekOfYear(this, 1, 4).week;\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('d', 0, 'do', 'day');\n\n addFormatToken('dd', 0, 0, function (format) {\n return this.localeData().weekdaysMin(this, format);\n });\n\n addFormatToken('ddd', 0, 0, function (format) {\n return this.localeData().weekdaysShort(this, format);\n });\n\n addFormatToken('dddd', 0, 0, function (format) {\n return this.localeData().weekdays(this, format);\n });\n\n addFormatToken('e', 0, 0, 'weekday');\n addFormatToken('E', 0, 0, 'isoWeekday');\n\n // ALIASES\n\n addUnitAlias('day', 'd');\n addUnitAlias('weekday', 'e');\n addUnitAlias('isoWeekday', 'E');\n\n // PRIORITY\n addUnitPriority('day', 11);\n addUnitPriority('weekday', 11);\n addUnitPriority('isoWeekday', 11);\n\n // PARSING\n\n addRegexToken('d', match1to2);\n addRegexToken('e', match1to2);\n addRegexToken('E', match1to2);\n addRegexToken('dd', function (isStrict, locale) {\n return locale.weekdaysMinRegex(isStrict);\n });\n addRegexToken('ddd', function (isStrict, locale) {\n return locale.weekdaysShortRegex(isStrict);\n });\n addRegexToken('dddd', function (isStrict, locale) {\n return locale.weekdaysRegex(isStrict);\n });\n\n addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n var weekday = config._locale.weekdaysParse(input, token, config._strict);\n // if we didn't get a weekday name, mark the date as invalid\n if (weekday != null) {\n week.d = weekday;\n } else {\n getParsingFlags(config).invalidWeekday = input;\n }\n });\n\n addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n week[token] = toInt(input);\n });\n\n // HELPERS\n\n function parseWeekday(input, locale) {\n if (typeof input !== 'string') {\n return input;\n }\n\n if (!isNaN(input)) {\n return parseInt(input, 10);\n }\n\n input = locale.weekdaysParse(input);\n if (typeof input === 'number') {\n return input;\n }\n\n return null;\n }\n\n function parseIsoWeekday(input, locale) {\n if (typeof input === 'string') {\n return locale.weekdaysParse(input) % 7 || 7;\n }\n return isNaN(input) ? null : input;\n }\n\n // LOCALES\n function shiftWeekdays (ws, n) {\n return ws.slice(n, 7).concat(ws.slice(0, n));\n }\n\n var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_');\n function localeWeekdays (m, format) {\n var weekdays = isArray(this._weekdays) ? this._weekdays :\n this._weekdays[(m && m !== true && this._weekdays.isFormat.test(format)) ? 'format' : 'standalone'];\n return (m === true) ? shiftWeekdays(weekdays, this._week.dow)\n : (m) ? weekdays[m.day()] : weekdays;\n }\n\n var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_');\n function localeWeekdaysShort (m) {\n return (m === true) ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n : (m) ? this._weekdaysShort[m.day()] : this._weekdaysShort;\n }\n\n var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_');\n function localeWeekdaysMin (m) {\n return (m === true) ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n : (m) ? this._weekdaysMin[m.day()] : this._weekdaysMin;\n }\n\n function handleStrictParse$1(weekdayName, format, strict) {\n var i, ii, mom, llc = weekdayName.toLocaleLowerCase();\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._minWeekdaysParse = [];\n\n for (i = 0; i < 7; ++i) {\n mom = createUTC([2000, 1]).day(i);\n this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase();\n this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase();\n this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeWeekdaysParse (weekdayName, format, strict) {\n var i, mom, regex;\n\n if (this._weekdaysParseExact) {\n return handleStrictParse$1.call(this, weekdayName, format, strict);\n }\n\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._minWeekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._fullWeekdaysParse = [];\n }\n\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n\n mom = createUTC([2000, 1]).day(i);\n if (strict && !this._fullWeekdaysParse[i]) {\n this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$', 'i');\n this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$', 'i');\n this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$', 'i');\n }\n if (!this._weekdaysParse[i]) {\n regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');\n this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) {\n return i;\n } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) {\n return i;\n } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) {\n return i;\n } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function getSetDayOfWeek (input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n if (input != null) {\n input = parseWeekday(input, this.localeData());\n return this.add(input - day, 'd');\n } else {\n return day;\n }\n }\n\n function getSetLocaleDayOfWeek (input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n return input == null ? weekday : this.add(input - weekday, 'd');\n }\n\n function getSetISODayOfWeek (input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n\n // behaves the same as moment#day except\n // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n // as a setter, sunday should belong to the previous week.\n\n if (input != null) {\n var weekday = parseIsoWeekday(input, this.localeData());\n return this.day(this.day() % 7 ? weekday : weekday - 7);\n } else {\n return this.day() || 7;\n }\n }\n\n var defaultWeekdaysRegex = matchWord;\n function weekdaysRegex (isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysStrictRegex;\n } else {\n return this._weekdaysRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n this._weekdaysRegex = defaultWeekdaysRegex;\n }\n return this._weekdaysStrictRegex && isStrict ?\n this._weekdaysStrictRegex : this._weekdaysRegex;\n }\n }\n\n var defaultWeekdaysShortRegex = matchWord;\n function weekdaysShortRegex (isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysShortStrictRegex;\n } else {\n return this._weekdaysShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n }\n return this._weekdaysShortStrictRegex && isStrict ?\n this._weekdaysShortStrictRegex : this._weekdaysShortRegex;\n }\n }\n\n var defaultWeekdaysMinRegex = matchWord;\n function weekdaysMinRegex (isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysMinStrictRegex;\n } else {\n return this._weekdaysMinRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n }\n return this._weekdaysMinStrictRegex && isStrict ?\n this._weekdaysMinStrictRegex : this._weekdaysMinRegex;\n }\n }\n\n\n function computeWeekdaysParse () {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [],\n i, mom, minp, shortp, longp;\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, 1]).day(i);\n minp = this.weekdaysMin(mom, '');\n shortp = this.weekdaysShort(mom, '');\n longp = this.weekdays(mom, '');\n minPieces.push(minp);\n shortPieces.push(shortp);\n longPieces.push(longp);\n mixedPieces.push(minp);\n mixedPieces.push(shortp);\n mixedPieces.push(longp);\n }\n // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n // will match the longer piece.\n minPieces.sort(cmpLenRev);\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n for (i = 0; i < 7; i++) {\n shortPieces[i] = regexEscape(shortPieces[i]);\n longPieces[i] = regexEscape(longPieces[i]);\n mixedPieces[i] = regexEscape(mixedPieces[i]);\n }\n\n this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._weekdaysShortRegex = this._weekdaysRegex;\n this._weekdaysMinRegex = this._weekdaysRegex;\n\n this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i');\n }\n\n // FORMATTING\n\n function hFormat() {\n return this.hours() % 12 || 12;\n }\n\n function kFormat() {\n return this.hours() || 24;\n }\n\n addFormatToken('H', ['HH', 2], 0, 'hour');\n addFormatToken('h', ['hh', 2], 0, hFormat);\n addFormatToken('k', ['kk', 2], 0, kFormat);\n\n addFormatToken('hmm', 0, 0, function () {\n return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('hmmss', 0, 0, function () {\n return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2);\n });\n\n addFormatToken('Hmm', 0, 0, function () {\n return '' + this.hours() + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('Hmmss', 0, 0, function () {\n return '' + this.hours() + zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2);\n });\n\n function meridiem (token, lowercase) {\n addFormatToken(token, 0, 0, function () {\n return this.localeData().meridiem(this.hours(), this.minutes(), lowercase);\n });\n }\n\n meridiem('a', true);\n meridiem('A', false);\n\n // ALIASES\n\n addUnitAlias('hour', 'h');\n\n // PRIORITY\n addUnitPriority('hour', 13);\n\n // PARSING\n\n function matchMeridiem (isStrict, locale) {\n return locale._meridiemParse;\n }\n\n addRegexToken('a', matchMeridiem);\n addRegexToken('A', matchMeridiem);\n addRegexToken('H', match1to2);\n addRegexToken('h', match1to2);\n addRegexToken('k', match1to2);\n addRegexToken('HH', match1to2, match2);\n addRegexToken('hh', match1to2, match2);\n addRegexToken('kk', match1to2, match2);\n\n addRegexToken('hmm', match3to4);\n addRegexToken('hmmss', match5to6);\n addRegexToken('Hmm', match3to4);\n addRegexToken('Hmmss', match5to6);\n\n addParseToken(['H', 'HH'], HOUR);\n addParseToken(['k', 'kk'], function (input, array, config) {\n var kInput = toInt(input);\n array[HOUR] = kInput === 24 ? 0 : kInput;\n });\n addParseToken(['a', 'A'], function (input, array, config) {\n config._isPm = config._locale.isPM(input);\n config._meridiem = input;\n });\n addParseToken(['h', 'hh'], function (input, array, config) {\n array[HOUR] = toInt(input);\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmmss', function (input, array, config) {\n var pos1 = input.length - 4;\n var pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('Hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n });\n addParseToken('Hmmss', function (input, array, config) {\n var pos1 = input.length - 4;\n var pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n });\n\n // LOCALES\n\n function localeIsPM (input) {\n // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n // Using charAt should be more compatible.\n return ((input + '').toLowerCase().charAt(0) === 'p');\n }\n\n var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i;\n function localeMeridiem (hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'pm' : 'PM';\n } else {\n return isLower ? 'am' : 'AM';\n }\n }\n\n\n // MOMENTS\n\n // Setting the hour should keep the time, because the user explicitly\n // specified which hour they want. So trying to maintain the same hour (in\n // a new timezone) makes sense. Adding/subtracting hours does not follow\n // this rule.\n var getSetHour = makeGetSet('Hours', true);\n\n var baseConfig = {\n calendar: defaultCalendar,\n longDateFormat: defaultLongDateFormat,\n invalidDate: defaultInvalidDate,\n ordinal: defaultOrdinal,\n dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n relativeTime: defaultRelativeTime,\n\n months: defaultLocaleMonths,\n monthsShort: defaultLocaleMonthsShort,\n\n week: defaultLocaleWeek,\n\n weekdays: defaultLocaleWeekdays,\n weekdaysMin: defaultLocaleWeekdaysMin,\n weekdaysShort: defaultLocaleWeekdaysShort,\n\n meridiemParse: defaultLocaleMeridiemParse\n };\n\n // internal storage for locale config files\n var locales = {};\n var localeFamilies = {};\n var globalLocale;\n\n function normalizeLocale(key) {\n return key ? key.toLowerCase().replace('_', '-') : key;\n }\n\n // pick the locale from the array\n // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n function chooseLocale(names) {\n var i = 0, j, next, locale, split;\n\n while (i < names.length) {\n split = normalizeLocale(names[i]).split('-');\n j = split.length;\n next = normalizeLocale(names[i + 1]);\n next = next ? next.split('-') : null;\n while (j > 0) {\n locale = loadLocale(split.slice(0, j).join('-'));\n if (locale) {\n return locale;\n }\n if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) {\n //the next array item is better than a shallower substring of this one\n break;\n }\n j--;\n }\n i++;\n }\n return globalLocale;\n }\n\n function loadLocale(name) {\n var oldLocale = null;\n // TODO: Find a better way to register and load all the locales in Node\n if (!locales[name] && (typeof module !== 'undefined') &&\n module && module.exports) {\n try {\n oldLocale = globalLocale._abbr;\n var aliasedRequire = require;\n aliasedRequire('./locale/' + name);\n getSetGlobalLocale(oldLocale);\n } catch (e) {}\n }\n return locales[name];\n }\n\n // This function will load locale and then set the global locale. If\n // no arguments are passed in, it will simply return the current global\n // locale key.\n function getSetGlobalLocale (key, values) {\n var data;\n if (key) {\n if (isUndefined(values)) {\n data = getLocale(key);\n }\n else {\n data = defineLocale(key, values);\n }\n\n if (data) {\n // moment.duration._locale = moment._locale = data;\n globalLocale = data;\n }\n else {\n if ((typeof console !== 'undefined') && console.warn) {\n //warn user if arguments are passed but the locale could not be set\n console.warn('Locale ' + key + ' not found. Did you forget to load it?');\n }\n }\n }\n\n return globalLocale._abbr;\n }\n\n function defineLocale (name, config) {\n if (config !== null) {\n var locale, parentConfig = baseConfig;\n config.abbr = name;\n if (locales[name] != null) {\n deprecateSimple('defineLocaleOverride',\n 'use moment.updateLocale(localeName, config) to change ' +\n 'an existing locale. moment.defineLocale(localeName, ' +\n 'config) should only be used for creating a new locale ' +\n 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.');\n parentConfig = locales[name]._config;\n } else if (config.parentLocale != null) {\n if (locales[config.parentLocale] != null) {\n parentConfig = locales[config.parentLocale]._config;\n } else {\n locale = loadLocale(config.parentLocale);\n if (locale != null) {\n parentConfig = locale._config;\n } else {\n if (!localeFamilies[config.parentLocale]) {\n localeFamilies[config.parentLocale] = [];\n }\n localeFamilies[config.parentLocale].push({\n name: name,\n config: config\n });\n return null;\n }\n }\n }\n locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n if (localeFamilies[name]) {\n localeFamilies[name].forEach(function (x) {\n defineLocale(x.name, x.config);\n });\n }\n\n // backwards compat for now: also set the locale\n // make sure we set the locale AFTER all child locales have been\n // created, so we won't end up with the child locale set.\n getSetGlobalLocale(name);\n\n\n return locales[name];\n } else {\n // useful for testing\n delete locales[name];\n return null;\n }\n }\n\n function updateLocale(name, config) {\n if (config != null) {\n var locale, tmpLocale, parentConfig = baseConfig;\n // MERGE\n tmpLocale = loadLocale(name);\n if (tmpLocale != null) {\n parentConfig = tmpLocale._config;\n }\n config = mergeConfigs(parentConfig, config);\n locale = new Locale(config);\n locale.parentLocale = locales[name];\n locales[name] = locale;\n\n // backwards compat for now: also set the locale\n getSetGlobalLocale(name);\n } else {\n // pass null for config to unupdate, useful for tests\n if (locales[name] != null) {\n if (locales[name].parentLocale != null) {\n locales[name] = locales[name].parentLocale;\n } else if (locales[name] != null) {\n delete locales[name];\n }\n }\n }\n return locales[name];\n }\n\n // returns locale data\n function getLocale (key) {\n var locale;\n\n if (key && key._locale && key._locale._abbr) {\n key = key._locale._abbr;\n }\n\n if (!key) {\n return globalLocale;\n }\n\n if (!isArray(key)) {\n //short-circuit everything else\n locale = loadLocale(key);\n if (locale) {\n return locale;\n }\n key = [key];\n }\n\n return chooseLocale(key);\n }\n\n function listLocales() {\n return keys(locales);\n }\n\n function checkOverflow (m) {\n var overflow;\n var a = m._a;\n\n if (a && getParsingFlags(m).overflow === -2) {\n overflow =\n a[MONTH] < 0 || a[MONTH] > 11 ? MONTH :\n a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE :\n a[HOUR] < 0 || a[HOUR] > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR :\n a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE :\n a[SECOND] < 0 || a[SECOND] > 59 ? SECOND :\n a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND :\n -1;\n\n if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {\n overflow = DATE;\n }\n if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n overflow = WEEK;\n }\n if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n overflow = WEEKDAY;\n }\n\n getParsingFlags(m).overflow = overflow;\n }\n\n return m;\n }\n\n // Pick the first defined of two or three arguments.\n function defaults(a, b, c) {\n if (a != null) {\n return a;\n }\n if (b != null) {\n return b;\n }\n return c;\n }\n\n function currentDateArray(config) {\n // hooks is actually the exported moment object\n var nowValue = new Date(hooks.now());\n if (config._useUTC) {\n return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()];\n }\n return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n }\n\n // convert an array to a date.\n // the array should mirror the parameters below\n // note: all values past the year are optional and will default to the lowest possible value.\n // [year, month, day , hour, minute, second, millisecond]\n function configFromArray (config) {\n var i, date, input = [], currentDate, expectedWeekday, yearToUse;\n\n if (config._d) {\n return;\n }\n\n currentDate = currentDateArray(config);\n\n //compute day of the year from weeks and weekdays\n if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n dayOfYearFromWeekInfo(config);\n }\n\n //if the day of the year is set, figure out what it is\n if (config._dayOfYear != null) {\n yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n if (config._dayOfYear > daysInYear(yearToUse) || config._dayOfYear === 0) {\n getParsingFlags(config)._overflowDayOfYear = true;\n }\n\n date = createUTCDate(yearToUse, 0, config._dayOfYear);\n config._a[MONTH] = date.getUTCMonth();\n config._a[DATE] = date.getUTCDate();\n }\n\n // Default to current date.\n // * if no year, month, day of month are given, default to today\n // * if day of month is given, default month and year\n // * if month is given, default only year\n // * if year is given, don't default anything\n for (i = 0; i < 3 && config._a[i] == null; ++i) {\n config._a[i] = input[i] = currentDate[i];\n }\n\n // Zero out whatever was not defaulted, including time\n for (; i < 7; i++) {\n config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i];\n }\n\n // Check for 24:00:00.000\n if (config._a[HOUR] === 24 &&\n config._a[MINUTE] === 0 &&\n config._a[SECOND] === 0 &&\n config._a[MILLISECOND] === 0) {\n config._nextDay = true;\n config._a[HOUR] = 0;\n }\n\n config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input);\n expectedWeekday = config._useUTC ? config._d.getUTCDay() : config._d.getDay();\n\n // Apply timezone offset from input. The actual utcOffset can be changed\n // with parseZone.\n if (config._tzm != null) {\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n }\n\n if (config._nextDay) {\n config._a[HOUR] = 24;\n }\n\n // check for mismatching day of week\n if (config._w && typeof config._w.d !== 'undefined' && config._w.d !== expectedWeekday) {\n getParsingFlags(config).weekdayMismatch = true;\n }\n }\n\n function dayOfYearFromWeekInfo(config) {\n var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow;\n\n w = config._w;\n if (w.GG != null || w.W != null || w.E != null) {\n dow = 1;\n doy = 4;\n\n // TODO: We need to take the current isoWeekYear, but that depends on\n // how we interpret now (local, utc, fixed offset). So create\n // a now version of current config (take local/utc/offset flags, and\n // create now).\n weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(createLocal(), 1, 4).year);\n week = defaults(w.W, 1);\n weekday = defaults(w.E, 1);\n if (weekday < 1 || weekday > 7) {\n weekdayOverflow = true;\n }\n } else {\n dow = config._locale._week.dow;\n doy = config._locale._week.doy;\n\n var curWeek = weekOfYear(createLocal(), dow, doy);\n\n weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n // Default to current week.\n week = defaults(w.w, curWeek.week);\n\n if (w.d != null) {\n // weekday -- low day numbers are considered next week\n weekday = w.d;\n if (weekday < 0 || weekday > 6) {\n weekdayOverflow = true;\n }\n } else if (w.e != null) {\n // local weekday -- counting starts from beginning of week\n weekday = w.e + dow;\n if (w.e < 0 || w.e > 6) {\n weekdayOverflow = true;\n }\n } else {\n // default to beginning of week\n weekday = dow;\n }\n }\n if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n getParsingFlags(config)._overflowWeeks = true;\n } else if (weekdayOverflow != null) {\n getParsingFlags(config)._overflowWeekday = true;\n } else {\n temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n config._a[YEAR] = temp.year;\n config._dayOfYear = temp.dayOfYear;\n }\n }\n\n // iso 8601 regex\n // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n var extendedIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/;\n var basicIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/;\n\n var tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/;\n\n var isoDates = [\n ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n ['YYYY-DDD', /\\d{4}-\\d{3}/],\n ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n ['YYYYYYMMDD', /[+-]\\d{10}/],\n ['YYYYMMDD', /\\d{8}/],\n // YYYYMM is NOT allowed by the standard\n ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n ['YYYYDDD', /\\d{7}/]\n ];\n\n // iso time formats and regexes\n var isoTimes = [\n ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n ['HH:mm', /\\d\\d:\\d\\d/],\n ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n ['HHmm', /\\d\\d\\d\\d/],\n ['HH', /\\d\\d/]\n ];\n\n var aspNetJsonRegex = /^\\/?Date\\((\\-?\\d+)/i;\n\n // date from iso format\n function configFromISO(config) {\n var i, l,\n string = config._i,\n match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n allowTime, dateFormat, timeFormat, tzFormat;\n\n if (match) {\n getParsingFlags(config).iso = true;\n\n for (i = 0, l = isoDates.length; i < l; i++) {\n if (isoDates[i][1].exec(match[1])) {\n dateFormat = isoDates[i][0];\n allowTime = isoDates[i][2] !== false;\n break;\n }\n }\n if (dateFormat == null) {\n config._isValid = false;\n return;\n }\n if (match[3]) {\n for (i = 0, l = isoTimes.length; i < l; i++) {\n if (isoTimes[i][1].exec(match[3])) {\n // match[2] should be 'T' or space\n timeFormat = (match[2] || ' ') + isoTimes[i][0];\n break;\n }\n }\n if (timeFormat == null) {\n config._isValid = false;\n return;\n }\n }\n if (!allowTime && timeFormat != null) {\n config._isValid = false;\n return;\n }\n if (match[4]) {\n if (tzRegex.exec(match[4])) {\n tzFormat = 'Z';\n } else {\n config._isValid = false;\n return;\n }\n }\n config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n configFromStringAndFormat(config);\n } else {\n config._isValid = false;\n }\n }\n\n // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n var rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/;\n\n function extractFromRFC2822Strings(yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {\n var result = [\n untruncateYear(yearStr),\n defaultLocaleMonthsShort.indexOf(monthStr),\n parseInt(dayStr, 10),\n parseInt(hourStr, 10),\n parseInt(minuteStr, 10)\n ];\n\n if (secondStr) {\n result.push(parseInt(secondStr, 10));\n }\n\n return result;\n }\n\n function untruncateYear(yearStr) {\n var year = parseInt(yearStr, 10);\n if (year <= 49) {\n return 2000 + year;\n } else if (year <= 999) {\n return 1900 + year;\n }\n return year;\n }\n\n function preprocessRFC2822(s) {\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\n return s.replace(/\\([^)]*\\)|[\\n\\t]/g, ' ').replace(/(\\s\\s+)/g, ' ').replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\n }\n\n function checkWeekday(weekdayStr, parsedInput, config) {\n if (weekdayStr) {\n // TODO: Replace the vanilla JS Date object with an indepentent day-of-week check.\n var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n weekdayActual = new Date(parsedInput[0], parsedInput[1], parsedInput[2]).getDay();\n if (weekdayProvided !== weekdayActual) {\n getParsingFlags(config).weekdayMismatch = true;\n config._isValid = false;\n return false;\n }\n }\n return true;\n }\n\n var obsOffsets = {\n UT: 0,\n GMT: 0,\n EDT: -4 * 60,\n EST: -5 * 60,\n CDT: -5 * 60,\n CST: -6 * 60,\n MDT: -6 * 60,\n MST: -7 * 60,\n PDT: -7 * 60,\n PST: -8 * 60\n };\n\n function calculateOffset(obsOffset, militaryOffset, numOffset) {\n if (obsOffset) {\n return obsOffsets[obsOffset];\n } else if (militaryOffset) {\n // the only allowed military tz is Z\n return 0;\n } else {\n var hm = parseInt(numOffset, 10);\n var m = hm % 100, h = (hm - m) / 100;\n return h * 60 + m;\n }\n }\n\n // date and time from ref 2822 format\n function configFromRFC2822(config) {\n var match = rfc2822.exec(preprocessRFC2822(config._i));\n if (match) {\n var parsedArray = extractFromRFC2822Strings(match[4], match[3], match[2], match[5], match[6], match[7]);\n if (!checkWeekday(match[1], parsedArray, config)) {\n return;\n }\n\n config._a = parsedArray;\n config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n config._d = createUTCDate.apply(null, config._a);\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n getParsingFlags(config).rfc2822 = true;\n } else {\n config._isValid = false;\n }\n }\n\n // date from iso format or fallback\n function configFromString(config) {\n var matched = aspNetJsonRegex.exec(config._i);\n\n if (matched !== null) {\n config._d = new Date(+matched[1]);\n return;\n }\n\n configFromISO(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n configFromRFC2822(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n // Final attempt, use Input Fallback\n hooks.createFromInputFallback(config);\n }\n\n hooks.createFromInputFallback = deprecate(\n 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n 'discouraged and will be removed in an upcoming major release. Please refer to ' +\n 'http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n function (config) {\n config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n }\n );\n\n // constant that refers to the ISO standard\n hooks.ISO_8601 = function () {};\n\n // constant that refers to the RFC 2822 form\n hooks.RFC_2822 = function () {};\n\n // date from string and format string\n function configFromStringAndFormat(config) {\n // TODO: Move this to another part of the creation flow to prevent circular deps\n if (config._f === hooks.ISO_8601) {\n configFromISO(config);\n return;\n }\n if (config._f === hooks.RFC_2822) {\n configFromRFC2822(config);\n return;\n }\n config._a = [];\n getParsingFlags(config).empty = true;\n\n // This array is used to make a Date, either with `new Date` or `Date.UTC`\n var string = '' + config._i,\n i, parsedInput, tokens, token, skipped,\n stringLength = string.length,\n totalParsedInputLength = 0;\n\n tokens = expandFormat(config._f, config._locale).match(formattingTokens) || [];\n\n for (i = 0; i < tokens.length; i++) {\n token = tokens[i];\n parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0];\n // console.log('token', token, 'parsedInput', parsedInput,\n // 'regex', getParseRegexForToken(token, config));\n if (parsedInput) {\n skipped = string.substr(0, string.indexOf(parsedInput));\n if (skipped.length > 0) {\n getParsingFlags(config).unusedInput.push(skipped);\n }\n string = string.slice(string.indexOf(parsedInput) + parsedInput.length);\n totalParsedInputLength += parsedInput.length;\n }\n // don't parse if it's not a known token\n if (formatTokenFunctions[token]) {\n if (parsedInput) {\n getParsingFlags(config).empty = false;\n }\n else {\n getParsingFlags(config).unusedTokens.push(token);\n }\n addTimeToArrayFromToken(token, parsedInput, config);\n }\n else if (config._strict && !parsedInput) {\n getParsingFlags(config).unusedTokens.push(token);\n }\n }\n\n // add remaining unparsed input length to the string\n getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength;\n if (string.length > 0) {\n getParsingFlags(config).unusedInput.push(string);\n }\n\n // clear _12h flag if hour is <= 12\n if (config._a[HOUR] <= 12 &&\n getParsingFlags(config).bigHour === true &&\n config._a[HOUR] > 0) {\n getParsingFlags(config).bigHour = undefined;\n }\n\n getParsingFlags(config).parsedDateParts = config._a.slice(0);\n getParsingFlags(config).meridiem = config._meridiem;\n // handle meridiem\n config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem);\n\n configFromArray(config);\n checkOverflow(config);\n }\n\n\n function meridiemFixWrap (locale, hour, meridiem) {\n var isPm;\n\n if (meridiem == null) {\n // nothing to do\n return hour;\n }\n if (locale.meridiemHour != null) {\n return locale.meridiemHour(hour, meridiem);\n } else if (locale.isPM != null) {\n // Fallback\n isPm = locale.isPM(meridiem);\n if (isPm && hour < 12) {\n hour += 12;\n }\n if (!isPm && hour === 12) {\n hour = 0;\n }\n return hour;\n } else {\n // this is not supposed to happen\n return hour;\n }\n }\n\n // date from string and array of format strings\n function configFromStringAndArray(config) {\n var tempConfig,\n bestMoment,\n\n scoreToBeat,\n i,\n currentScore;\n\n if (config._f.length === 0) {\n getParsingFlags(config).invalidFormat = true;\n config._d = new Date(NaN);\n return;\n }\n\n for (i = 0; i < config._f.length; i++) {\n currentScore = 0;\n tempConfig = copyConfig({}, config);\n if (config._useUTC != null) {\n tempConfig._useUTC = config._useUTC;\n }\n tempConfig._f = config._f[i];\n configFromStringAndFormat(tempConfig);\n\n if (!isValid(tempConfig)) {\n continue;\n }\n\n // if there is any input that was not parsed add a penalty for that format\n currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n //or tokens\n currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n getParsingFlags(tempConfig).score = currentScore;\n\n if (scoreToBeat == null || currentScore < scoreToBeat) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n }\n }\n\n extend(config, bestMoment || tempConfig);\n }\n\n function configFromObject(config) {\n if (config._d) {\n return;\n }\n\n var i = normalizeObjectUnits(config._i);\n config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) {\n return obj && parseInt(obj, 10);\n });\n\n configFromArray(config);\n }\n\n function createFromConfig (config) {\n var res = new Moment(checkOverflow(prepareConfig(config)));\n if (res._nextDay) {\n // Adding is smart enough around DST\n res.add(1, 'd');\n res._nextDay = undefined;\n }\n\n return res;\n }\n\n function prepareConfig (config) {\n var input = config._i,\n format = config._f;\n\n config._locale = config._locale || getLocale(config._l);\n\n if (input === null || (format === undefined && input === '')) {\n return createInvalid({nullInput: true});\n }\n\n if (typeof input === 'string') {\n config._i = input = config._locale.preparse(input);\n }\n\n if (isMoment(input)) {\n return new Moment(checkOverflow(input));\n } else if (isDate(input)) {\n config._d = input;\n } else if (isArray(format)) {\n configFromStringAndArray(config);\n } else if (format) {\n configFromStringAndFormat(config);\n } else {\n configFromInput(config);\n }\n\n if (!isValid(config)) {\n config._d = null;\n }\n\n return config;\n }\n\n function configFromInput(config) {\n var input = config._i;\n if (isUndefined(input)) {\n config._d = new Date(hooks.now());\n } else if (isDate(input)) {\n config._d = new Date(input.valueOf());\n } else if (typeof input === 'string') {\n configFromString(config);\n } else if (isArray(input)) {\n config._a = map(input.slice(0), function (obj) {\n return parseInt(obj, 10);\n });\n configFromArray(config);\n } else if (isObject(input)) {\n configFromObject(config);\n } else if (isNumber(input)) {\n // from milliseconds\n config._d = new Date(input);\n } else {\n hooks.createFromInputFallback(config);\n }\n }\n\n function createLocalOrUTC (input, format, locale, strict, isUTC) {\n var c = {};\n\n if (locale === true || locale === false) {\n strict = locale;\n locale = undefined;\n }\n\n if ((isObject(input) && isObjectEmpty(input)) ||\n (isArray(input) && input.length === 0)) {\n input = undefined;\n }\n // object construction must be done this way.\n // https://github.com/moment/moment/issues/1423\n c._isAMomentObject = true;\n c._useUTC = c._isUTC = isUTC;\n c._l = locale;\n c._i = input;\n c._f = format;\n c._strict = strict;\n\n return createFromConfig(c);\n }\n\n function createLocal (input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, false);\n }\n\n var prototypeMin = deprecate(\n 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other < this ? this : other;\n } else {\n return createInvalid();\n }\n }\n );\n\n var prototypeMax = deprecate(\n 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other > this ? this : other;\n } else {\n return createInvalid();\n }\n }\n );\n\n // Pick a moment m from moments so that m[fn](other) is true for all\n // other. This relies on the function fn to be transitive.\n //\n // moments should either be an array of moment objects or an array, whose\n // first element is an array of moment objects.\n function pickBy(fn, moments) {\n var res, i;\n if (moments.length === 1 && isArray(moments[0])) {\n moments = moments[0];\n }\n if (!moments.length) {\n return createLocal();\n }\n res = moments[0];\n for (i = 1; i < moments.length; ++i) {\n if (!moments[i].isValid() || moments[i][fn](res)) {\n res = moments[i];\n }\n }\n return res;\n }\n\n // TODO: Use [].sort instead?\n function min () {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isBefore', args);\n }\n\n function max () {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isAfter', args);\n }\n\n var now = function () {\n return Date.now ? Date.now() : +(new Date());\n };\n\n var ordering = ['year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond'];\n\n function isDurationValid(m) {\n for (var key in m) {\n if (!(indexOf.call(ordering, key) !== -1 && (m[key] == null || !isNaN(m[key])))) {\n return false;\n }\n }\n\n var unitHasDecimal = false;\n for (var i = 0; i < ordering.length; ++i) {\n if (m[ordering[i]]) {\n if (unitHasDecimal) {\n return false; // only allow non-integers for smallest unit\n }\n if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n unitHasDecimal = true;\n }\n }\n }\n\n return true;\n }\n\n function isValid$1() {\n return this._isValid;\n }\n\n function createInvalid$1() {\n return createDuration(NaN);\n }\n\n function Duration (duration) {\n var normalizedInput = normalizeObjectUnits(duration),\n years = normalizedInput.year || 0,\n quarters = normalizedInput.quarter || 0,\n months = normalizedInput.month || 0,\n weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n days = normalizedInput.day || 0,\n hours = normalizedInput.hour || 0,\n minutes = normalizedInput.minute || 0,\n seconds = normalizedInput.second || 0,\n milliseconds = normalizedInput.millisecond || 0;\n\n this._isValid = isDurationValid(normalizedInput);\n\n // representation for dateAddRemove\n this._milliseconds = +milliseconds +\n seconds * 1e3 + // 1000\n minutes * 6e4 + // 1000 * 60\n hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n // Because of dateAddRemove treats 24 hours as different from a\n // day when working around DST, we need to store them separately\n this._days = +days +\n weeks * 7;\n // It is impossible to translate months into days without knowing\n // which months you are are talking about, so we have to store\n // it separately.\n this._months = +months +\n quarters * 3 +\n years * 12;\n\n this._data = {};\n\n this._locale = getLocale();\n\n this._bubble();\n }\n\n function isDuration (obj) {\n return obj instanceof Duration;\n }\n\n function absRound (number) {\n if (number < 0) {\n return Math.round(-1 * number) * -1;\n } else {\n return Math.round(number);\n }\n }\n\n // FORMATTING\n\n function offset (token, separator) {\n addFormatToken(token, 0, 0, function () {\n var offset = this.utcOffset();\n var sign = '+';\n if (offset < 0) {\n offset = -offset;\n sign = '-';\n }\n return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2);\n });\n }\n\n offset('Z', ':');\n offset('ZZ', '');\n\n // PARSING\n\n addRegexToken('Z', matchShortOffset);\n addRegexToken('ZZ', matchShortOffset);\n addParseToken(['Z', 'ZZ'], function (input, array, config) {\n config._useUTC = true;\n config._tzm = offsetFromString(matchShortOffset, input);\n });\n\n // HELPERS\n\n // timezone chunker\n // '+10:00' > ['10', '00']\n // '-1530' > ['-15', '30']\n var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n function offsetFromString(matcher, string) {\n var matches = (string || '').match(matcher);\n\n if (matches === null) {\n return null;\n }\n\n var chunk = matches[matches.length - 1] || [];\n var parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n var minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n return minutes === 0 ?\n 0 :\n parts[0] === '+' ? minutes : -minutes;\n }\n\n // Return a moment from input, that is local/utc/zone equivalent to model.\n function cloneWithOffset(input, model) {\n var res, diff;\n if (model._isUTC) {\n res = model.clone();\n diff = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf();\n // Use low-level api, because this fn is low-level api.\n res._d.setTime(res._d.valueOf() + diff);\n hooks.updateOffset(res, false);\n return res;\n } else {\n return createLocal(input).local();\n }\n }\n\n function getDateOffset (m) {\n // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n // https://github.com/moment/moment/pull/1871\n return -Math.round(m._d.getTimezoneOffset() / 15) * 15;\n }\n\n // HOOKS\n\n // This function will be called whenever a moment is mutated.\n // It is intended to keep the offset in sync with the timezone.\n hooks.updateOffset = function () {};\n\n // MOMENTS\n\n // keepLocalTime = true means only change the timezone, without\n // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n // +0200, so we adjust the time as needed, to be valid.\n //\n // Keeping the time actually adds/subtracts (one hour)\n // from the actual represented time. That is why we call updateOffset\n // a second time. In case it wants us to change the offset again\n // _changeInProgress == true case, then we have to adjust, because\n // there is no such time in the given timezone.\n function getSetOffset (input, keepLocalTime, keepMinutes) {\n var offset = this._offset || 0,\n localAdjust;\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n if (input != null) {\n if (typeof input === 'string') {\n input = offsetFromString(matchShortOffset, input);\n if (input === null) {\n return this;\n }\n } else if (Math.abs(input) < 16 && !keepMinutes) {\n input = input * 60;\n }\n if (!this._isUTC && keepLocalTime) {\n localAdjust = getDateOffset(this);\n }\n this._offset = input;\n this._isUTC = true;\n if (localAdjust != null) {\n this.add(localAdjust, 'm');\n }\n if (offset !== input) {\n if (!keepLocalTime || this._changeInProgress) {\n addSubtract(this, createDuration(input - offset, 'm'), 1, false);\n } else if (!this._changeInProgress) {\n this._changeInProgress = true;\n hooks.updateOffset(this, true);\n this._changeInProgress = null;\n }\n }\n return this;\n } else {\n return this._isUTC ? offset : getDateOffset(this);\n }\n }\n\n function getSetZone (input, keepLocalTime) {\n if (input != null) {\n if (typeof input !== 'string') {\n input = -input;\n }\n\n this.utcOffset(input, keepLocalTime);\n\n return this;\n } else {\n return -this.utcOffset();\n }\n }\n\n function setOffsetToUTC (keepLocalTime) {\n return this.utcOffset(0, keepLocalTime);\n }\n\n function setOffsetToLocal (keepLocalTime) {\n if (this._isUTC) {\n this.utcOffset(0, keepLocalTime);\n this._isUTC = false;\n\n if (keepLocalTime) {\n this.subtract(getDateOffset(this), 'm');\n }\n }\n return this;\n }\n\n function setOffsetToParsedOffset () {\n if (this._tzm != null) {\n this.utcOffset(this._tzm, false, true);\n } else if (typeof this._i === 'string') {\n var tZone = offsetFromString(matchOffset, this._i);\n if (tZone != null) {\n this.utcOffset(tZone);\n }\n else {\n this.utcOffset(0, true);\n }\n }\n return this;\n }\n\n function hasAlignedHourOffset (input) {\n if (!this.isValid()) {\n return false;\n }\n input = input ? createLocal(input).utcOffset() : 0;\n\n return (this.utcOffset() - input) % 60 === 0;\n }\n\n function isDaylightSavingTime () {\n return (\n this.utcOffset() > this.clone().month(0).utcOffset() ||\n this.utcOffset() > this.clone().month(5).utcOffset()\n );\n }\n\n function isDaylightSavingTimeShifted () {\n if (!isUndefined(this._isDSTShifted)) {\n return this._isDSTShifted;\n }\n\n var c = {};\n\n copyConfig(c, this);\n c = prepareConfig(c);\n\n if (c._a) {\n var other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n this._isDSTShifted = this.isValid() &&\n compareArrays(c._a, other.toArray()) > 0;\n } else {\n this._isDSTShifted = false;\n }\n\n return this._isDSTShifted;\n }\n\n function isLocal () {\n return this.isValid() ? !this._isUTC : false;\n }\n\n function isUtcOffset () {\n return this.isValid() ? this._isUTC : false;\n }\n\n function isUtc () {\n return this.isValid() ? this._isUTC && this._offset === 0 : false;\n }\n\n // ASP.NET json date format regex\n var aspNetRegex = /^(\\-|\\+)?(?:(\\d*)[. ])?(\\d+)\\:(\\d+)(?:\\:(\\d+)(\\.\\d*)?)?$/;\n\n // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n // and further modified to allow for strings containing both week and day\n var isoRegex = /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n function createDuration (input, key) {\n var duration = input,\n // matching against regexp is expensive, do it on demand\n match = null,\n sign,\n ret,\n diffRes;\n\n if (isDuration(input)) {\n duration = {\n ms : input._milliseconds,\n d : input._days,\n M : input._months\n };\n } else if (isNumber(input)) {\n duration = {};\n if (key) {\n duration[key] = input;\n } else {\n duration.milliseconds = input;\n }\n } else if (!!(match = aspNetRegex.exec(input))) {\n sign = (match[1] === '-') ? -1 : 1;\n duration = {\n y : 0,\n d : toInt(match[DATE]) * sign,\n h : toInt(match[HOUR]) * sign,\n m : toInt(match[MINUTE]) * sign,\n s : toInt(match[SECOND]) * sign,\n ms : toInt(absRound(match[MILLISECOND] * 1000)) * sign // the millisecond decimal point is included in the match\n };\n } else if (!!(match = isoRegex.exec(input))) {\n sign = (match[1] === '-') ? -1 : 1;\n duration = {\n y : parseIso(match[2], sign),\n M : parseIso(match[3], sign),\n w : parseIso(match[4], sign),\n d : parseIso(match[5], sign),\n h : parseIso(match[6], sign),\n m : parseIso(match[7], sign),\n s : parseIso(match[8], sign)\n };\n } else if (duration == null) {// checks for null or undefined\n duration = {};\n } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) {\n diffRes = momentsDifference(createLocal(duration.from), createLocal(duration.to));\n\n duration = {};\n duration.ms = diffRes.milliseconds;\n duration.M = diffRes.months;\n }\n\n ret = new Duration(duration);\n\n if (isDuration(input) && hasOwnProp(input, '_locale')) {\n ret._locale = input._locale;\n }\n\n return ret;\n }\n\n createDuration.fn = Duration.prototype;\n createDuration.invalid = createInvalid$1;\n\n function parseIso (inp, sign) {\n // We'd normally use ~~inp for this, but unfortunately it also\n // converts floats to ints.\n // inp may be undefined, so careful calling replace on it.\n var res = inp && parseFloat(inp.replace(',', '.'));\n // apply sign while we're at it\n return (isNaN(res) ? 0 : res) * sign;\n }\n\n function positiveMomentsDifference(base, other) {\n var res = {};\n\n res.months = other.month() - base.month() +\n (other.year() - base.year()) * 12;\n if (base.clone().add(res.months, 'M').isAfter(other)) {\n --res.months;\n }\n\n res.milliseconds = +other - +(base.clone().add(res.months, 'M'));\n\n return res;\n }\n\n function momentsDifference(base, other) {\n var res;\n if (!(base.isValid() && other.isValid())) {\n return {milliseconds: 0, months: 0};\n }\n\n other = cloneWithOffset(other, base);\n if (base.isBefore(other)) {\n res = positiveMomentsDifference(base, other);\n } else {\n res = positiveMomentsDifference(other, base);\n res.milliseconds = -res.milliseconds;\n res.months = -res.months;\n }\n\n return res;\n }\n\n // TODO: remove 'name' arg after deprecation is removed\n function createAdder(direction, name) {\n return function (val, period) {\n var dur, tmp;\n //invert the arguments, but complain about it\n if (period !== null && !isNaN(+period)) {\n deprecateSimple(name, 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' +\n 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.');\n tmp = val; val = period; period = tmp;\n }\n\n val = typeof val === 'string' ? +val : val;\n dur = createDuration(val, period);\n addSubtract(this, dur, direction);\n return this;\n };\n }\n\n function addSubtract (mom, duration, isAdding, updateOffset) {\n var milliseconds = duration._milliseconds,\n days = absRound(duration._days),\n months = absRound(duration._months);\n\n if (!mom.isValid()) {\n // No op\n return;\n }\n\n updateOffset = updateOffset == null ? true : updateOffset;\n\n if (months) {\n setMonth(mom, get(mom, 'Month') + months * isAdding);\n }\n if (days) {\n set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n }\n if (milliseconds) {\n mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n }\n if (updateOffset) {\n hooks.updateOffset(mom, days || months);\n }\n }\n\n var add = createAdder(1, 'add');\n var subtract = createAdder(-1, 'subtract');\n\n function getCalendarFormat(myMoment, now) {\n var diff = myMoment.diff(now, 'days', true);\n return diff < -6 ? 'sameElse' :\n diff < -1 ? 'lastWeek' :\n diff < 0 ? 'lastDay' :\n diff < 1 ? 'sameDay' :\n diff < 2 ? 'nextDay' :\n diff < 7 ? 'nextWeek' : 'sameElse';\n }\n\n function calendar$1 (time, formats) {\n // We want to compare the start of today, vs this.\n // Getting start-of-today depends on whether we're local/utc/offset or not.\n var now = time || createLocal(),\n sod = cloneWithOffset(now, this).startOf('day'),\n format = hooks.calendarFormat(this, sod) || 'sameElse';\n\n var output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]);\n\n return this.format(output || this.localeData().calendar(format, this, createLocal(now)));\n }\n\n function clone () {\n return new Moment(this);\n }\n\n function isAfter (input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() > localInput.valueOf();\n } else {\n return localInput.valueOf() < this.clone().startOf(units).valueOf();\n }\n }\n\n function isBefore (input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() < localInput.valueOf();\n } else {\n return this.clone().endOf(units).valueOf() < localInput.valueOf();\n }\n }\n\n function isBetween (from, to, units, inclusivity) {\n var localFrom = isMoment(from) ? from : createLocal(from),\n localTo = isMoment(to) ? to : createLocal(to);\n if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n return false;\n }\n inclusivity = inclusivity || '()';\n return (inclusivity[0] === '(' ? this.isAfter(localFrom, units) : !this.isBefore(localFrom, units)) &&\n (inclusivity[1] === ')' ? this.isBefore(localTo, units) : !this.isAfter(localTo, units));\n }\n\n function isSame (input, units) {\n var localInput = isMoment(input) ? input : createLocal(input),\n inputMs;\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() === localInput.valueOf();\n } else {\n inputMs = localInput.valueOf();\n return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf();\n }\n }\n\n function isSameOrAfter (input, units) {\n return this.isSame(input, units) || this.isAfter(input, units);\n }\n\n function isSameOrBefore (input, units) {\n return this.isSame(input, units) || this.isBefore(input, units);\n }\n\n function diff (input, units, asFloat) {\n var that,\n zoneDelta,\n output;\n\n if (!this.isValid()) {\n return NaN;\n }\n\n that = cloneWithOffset(input, this);\n\n if (!that.isValid()) {\n return NaN;\n }\n\n zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n units = normalizeUnits(units);\n\n switch (units) {\n case 'year': output = monthDiff(this, that) / 12; break;\n case 'month': output = monthDiff(this, that); break;\n case 'quarter': output = monthDiff(this, that) / 3; break;\n case 'second': output = (this - that) / 1e3; break; // 1000\n case 'minute': output = (this - that) / 6e4; break; // 1000 * 60\n case 'hour': output = (this - that) / 36e5; break; // 1000 * 60 * 60\n case 'day': output = (this - that - zoneDelta) / 864e5; break; // 1000 * 60 * 60 * 24, negate dst\n case 'week': output = (this - that - zoneDelta) / 6048e5; break; // 1000 * 60 * 60 * 24 * 7, negate dst\n default: output = this - that;\n }\n\n return asFloat ? output : absFloor(output);\n }\n\n function monthDiff (a, b) {\n // difference in months\n var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()),\n // b is in (anchor - 1 month, anchor + 1 month)\n anchor = a.clone().add(wholeMonthDiff, 'months'),\n anchor2, adjust;\n\n if (b - anchor < 0) {\n anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor - anchor2);\n } else {\n anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor2 - anchor);\n }\n\n //check for negative zero, return zero if negative zero\n return -(wholeMonthDiff + adjust) || 0;\n }\n\n hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n function toString () {\n return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n }\n\n function toISOString(keepOffset) {\n if (!this.isValid()) {\n return null;\n }\n var utc = keepOffset !== true;\n var m = utc ? this.clone().utc() : this;\n if (m.year() < 0 || m.year() > 9999) {\n return formatMoment(m, utc ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ');\n }\n if (isFunction(Date.prototype.toISOString)) {\n // native implementation is ~50x faster, use it when we can\n if (utc) {\n return this.toDate().toISOString();\n } else {\n return new Date(this.valueOf() + this.utcOffset() * 60 * 1000).toISOString().replace('Z', formatMoment(m, 'Z'));\n }\n }\n return formatMoment(m, utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ');\n }\n\n /**\n * Return a human readable representation of a moment that can\n * also be evaluated to get a new moment which is the same\n *\n * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n */\n function inspect () {\n if (!this.isValid()) {\n return 'moment.invalid(/* ' + this._i + ' */)';\n }\n var func = 'moment';\n var zone = '';\n if (!this.isLocal()) {\n func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n zone = 'Z';\n }\n var prefix = '[' + func + '(\"]';\n var year = (0 <= this.year() && this.year() <= 9999) ? 'YYYY' : 'YYYYYY';\n var datetime = '-MM-DD[T]HH:mm:ss.SSS';\n var suffix = zone + '[\")]';\n\n return this.format(prefix + year + datetime + suffix);\n }\n\n function format (inputString) {\n if (!inputString) {\n inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat;\n }\n var output = formatMoment(this, inputString);\n return this.localeData().postformat(output);\n }\n\n function from (time, withoutSuffix) {\n if (this.isValid() &&\n ((isMoment(time) && time.isValid()) ||\n createLocal(time).isValid())) {\n return createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function fromNow (withoutSuffix) {\n return this.from(createLocal(), withoutSuffix);\n }\n\n function to (time, withoutSuffix) {\n if (this.isValid() &&\n ((isMoment(time) && time.isValid()) ||\n createLocal(time).isValid())) {\n return createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function toNow (withoutSuffix) {\n return this.to(createLocal(), withoutSuffix);\n }\n\n // If passed a locale key, it will set the locale for this\n // instance. Otherwise, it will return the locale configuration\n // variables for this instance.\n function locale (key) {\n var newLocaleData;\n\n if (key === undefined) {\n return this._locale._abbr;\n } else {\n newLocaleData = getLocale(key);\n if (newLocaleData != null) {\n this._locale = newLocaleData;\n }\n return this;\n }\n }\n\n var lang = deprecate(\n 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n function (key) {\n if (key === undefined) {\n return this.localeData();\n } else {\n return this.locale(key);\n }\n }\n );\n\n function localeData () {\n return this._locale;\n }\n\n var MS_PER_SECOND = 1000;\n var MS_PER_MINUTE = 60 * MS_PER_SECOND;\n var MS_PER_HOUR = 60 * MS_PER_MINUTE;\n var MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n // actual modulo - handles negative numbers (for dates before 1970):\n function mod$1(dividend, divisor) {\n return (dividend % divisor + divisor) % divisor;\n }\n\n function localStartOfDate(y, m, d) {\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return new Date(y, m, d).valueOf();\n }\n }\n\n function utcStartOfDate(y, m, d) {\n // Date.UTC remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return Date.UTC(y, m, d);\n }\n }\n\n function startOf (units) {\n var time;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n var startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year(), 0, 1);\n break;\n case 'quarter':\n time = startOfDate(this.year(), this.month() - this.month() % 3, 1);\n break;\n case 'month':\n time = startOfDate(this.year(), this.month(), 1);\n break;\n case 'week':\n time = startOfDate(this.year(), this.month(), this.date() - this.weekday());\n break;\n case 'isoWeek':\n time = startOfDate(this.year(), this.month(), this.date() - (this.isoWeekday() - 1));\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date());\n break;\n case 'hour':\n time = this._d.valueOf();\n time -= mod$1(time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), MS_PER_HOUR);\n break;\n case 'minute':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_MINUTE);\n break;\n case 'second':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_SECOND);\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function endOf (units) {\n var time;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n var startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year() + 1, 0, 1) - 1;\n break;\n case 'quarter':\n time = startOfDate(this.year(), this.month() - this.month() % 3 + 3, 1) - 1;\n break;\n case 'month':\n time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n break;\n case 'week':\n time = startOfDate(this.year(), this.month(), this.date() - this.weekday() + 7) - 1;\n break;\n case 'isoWeek':\n time = startOfDate(this.year(), this.month(), this.date() - (this.isoWeekday() - 1) + 7) - 1;\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n break;\n case 'hour':\n time = this._d.valueOf();\n time += MS_PER_HOUR - mod$1(time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), MS_PER_HOUR) - 1;\n break;\n case 'minute':\n time = this._d.valueOf();\n time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n break;\n case 'second':\n time = this._d.valueOf();\n time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function valueOf () {\n return this._d.valueOf() - ((this._offset || 0) * 60000);\n }\n\n function unix () {\n return Math.floor(this.valueOf() / 1000);\n }\n\n function toDate () {\n return new Date(this.valueOf());\n }\n\n function toArray () {\n var m = this;\n return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()];\n }\n\n function toObject () {\n var m = this;\n return {\n years: m.year(),\n months: m.month(),\n date: m.date(),\n hours: m.hours(),\n minutes: m.minutes(),\n seconds: m.seconds(),\n milliseconds: m.milliseconds()\n };\n }\n\n function toJSON () {\n // new Date(NaN).toJSON() === null\n return this.isValid() ? this.toISOString() : null;\n }\n\n function isValid$2 () {\n return isValid(this);\n }\n\n function parsingFlags () {\n return extend({}, getParsingFlags(this));\n }\n\n function invalidAt () {\n return getParsingFlags(this).overflow;\n }\n\n function creationData() {\n return {\n input: this._i,\n format: this._f,\n locale: this._locale,\n isUTC: this._isUTC,\n strict: this._strict\n };\n }\n\n // FORMATTING\n\n addFormatToken(0, ['gg', 2], 0, function () {\n return this.weekYear() % 100;\n });\n\n addFormatToken(0, ['GG', 2], 0, function () {\n return this.isoWeekYear() % 100;\n });\n\n function addWeekYearFormatToken (token, getter) {\n addFormatToken(0, [token, token.length], 0, getter);\n }\n\n addWeekYearFormatToken('gggg', 'weekYear');\n addWeekYearFormatToken('ggggg', 'weekYear');\n addWeekYearFormatToken('GGGG', 'isoWeekYear');\n addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n // ALIASES\n\n addUnitAlias('weekYear', 'gg');\n addUnitAlias('isoWeekYear', 'GG');\n\n // PRIORITY\n\n addUnitPriority('weekYear', 1);\n addUnitPriority('isoWeekYear', 1);\n\n\n // PARSING\n\n addRegexToken('G', matchSigned);\n addRegexToken('g', matchSigned);\n addRegexToken('GG', match1to2, match2);\n addRegexToken('gg', match1to2, match2);\n addRegexToken('GGGG', match1to4, match4);\n addRegexToken('gggg', match1to4, match4);\n addRegexToken('GGGGG', match1to6, match6);\n addRegexToken('ggggg', match1to6, match6);\n\n addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) {\n week[token.substr(0, 2)] = toInt(input);\n });\n\n addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n week[token] = hooks.parseTwoDigitYear(input);\n });\n\n // MOMENTS\n\n function getSetWeekYear (input) {\n return getSetWeekYearHelper.call(this,\n input,\n this.week(),\n this.weekday(),\n this.localeData()._week.dow,\n this.localeData()._week.doy);\n }\n\n function getSetISOWeekYear (input) {\n return getSetWeekYearHelper.call(this,\n input, this.isoWeek(), this.isoWeekday(), 1, 4);\n }\n\n function getISOWeeksInYear () {\n return weeksInYear(this.year(), 1, 4);\n }\n\n function getWeeksInYear () {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n }\n\n function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n var weeksTarget;\n if (input == null) {\n return weekOfYear(this, dow, doy).year;\n } else {\n weeksTarget = weeksInYear(input, dow, doy);\n if (week > weeksTarget) {\n week = weeksTarget;\n }\n return setWeekAll.call(this, input, week, weekday, dow, doy);\n }\n }\n\n function setWeekAll(weekYear, week, weekday, dow, doy) {\n var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n this.year(date.getUTCFullYear());\n this.month(date.getUTCMonth());\n this.date(date.getUTCDate());\n return this;\n }\n\n // FORMATTING\n\n addFormatToken('Q', 0, 'Qo', 'quarter');\n\n // ALIASES\n\n addUnitAlias('quarter', 'Q');\n\n // PRIORITY\n\n addUnitPriority('quarter', 7);\n\n // PARSING\n\n addRegexToken('Q', match1);\n addParseToken('Q', function (input, array) {\n array[MONTH] = (toInt(input) - 1) * 3;\n });\n\n // MOMENTS\n\n function getSetQuarter (input) {\n return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);\n }\n\n // FORMATTING\n\n addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n // ALIASES\n\n addUnitAlias('date', 'D');\n\n // PRIORITY\n addUnitPriority('date', 9);\n\n // PARSING\n\n addRegexToken('D', match1to2);\n addRegexToken('DD', match1to2, match2);\n addRegexToken('Do', function (isStrict, locale) {\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n return isStrict ?\n (locale._dayOfMonthOrdinalParse || locale._ordinalParse) :\n locale._dayOfMonthOrdinalParseLenient;\n });\n\n addParseToken(['D', 'DD'], DATE);\n addParseToken('Do', function (input, array) {\n array[DATE] = toInt(input.match(match1to2)[0]);\n });\n\n // MOMENTS\n\n var getSetDayOfMonth = makeGetSet('Date', true);\n\n // FORMATTING\n\n addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n // ALIASES\n\n addUnitAlias('dayOfYear', 'DDD');\n\n // PRIORITY\n addUnitPriority('dayOfYear', 4);\n\n // PARSING\n\n addRegexToken('DDD', match1to3);\n addRegexToken('DDDD', match3);\n addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n config._dayOfYear = toInt(input);\n });\n\n // HELPERS\n\n // MOMENTS\n\n function getSetDayOfYear (input) {\n var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1;\n return input == null ? dayOfYear : this.add((input - dayOfYear), 'd');\n }\n\n // FORMATTING\n\n addFormatToken('m', ['mm', 2], 0, 'minute');\n\n // ALIASES\n\n addUnitAlias('minute', 'm');\n\n // PRIORITY\n\n addUnitPriority('minute', 14);\n\n // PARSING\n\n addRegexToken('m', match1to2);\n addRegexToken('mm', match1to2, match2);\n addParseToken(['m', 'mm'], MINUTE);\n\n // MOMENTS\n\n var getSetMinute = makeGetSet('Minutes', false);\n\n // FORMATTING\n\n addFormatToken('s', ['ss', 2], 0, 'second');\n\n // ALIASES\n\n addUnitAlias('second', 's');\n\n // PRIORITY\n\n addUnitPriority('second', 15);\n\n // PARSING\n\n addRegexToken('s', match1to2);\n addRegexToken('ss', match1to2, match2);\n addParseToken(['s', 'ss'], SECOND);\n\n // MOMENTS\n\n var getSetSecond = makeGetSet('Seconds', false);\n\n // FORMATTING\n\n addFormatToken('S', 0, 0, function () {\n return ~~(this.millisecond() / 100);\n });\n\n addFormatToken(0, ['SS', 2], 0, function () {\n return ~~(this.millisecond() / 10);\n });\n\n addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n addFormatToken(0, ['SSSS', 4], 0, function () {\n return this.millisecond() * 10;\n });\n addFormatToken(0, ['SSSSS', 5], 0, function () {\n return this.millisecond() * 100;\n });\n addFormatToken(0, ['SSSSSS', 6], 0, function () {\n return this.millisecond() * 1000;\n });\n addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n return this.millisecond() * 10000;\n });\n addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n return this.millisecond() * 100000;\n });\n addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n return this.millisecond() * 1000000;\n });\n\n\n // ALIASES\n\n addUnitAlias('millisecond', 'ms');\n\n // PRIORITY\n\n addUnitPriority('millisecond', 16);\n\n // PARSING\n\n addRegexToken('S', match1to3, match1);\n addRegexToken('SS', match1to3, match2);\n addRegexToken('SSS', match1to3, match3);\n\n var token;\n for (token = 'SSSS'; token.length <= 9; token += 'S') {\n addRegexToken(token, matchUnsigned);\n }\n\n function parseMs(input, array) {\n array[MILLISECOND] = toInt(('0.' + input) * 1000);\n }\n\n for (token = 'S'; token.length <= 9; token += 'S') {\n addParseToken(token, parseMs);\n }\n // MOMENTS\n\n var getSetMillisecond = makeGetSet('Milliseconds', false);\n\n // FORMATTING\n\n addFormatToken('z', 0, 0, 'zoneAbbr');\n addFormatToken('zz', 0, 0, 'zoneName');\n\n // MOMENTS\n\n function getZoneAbbr () {\n return this._isUTC ? 'UTC' : '';\n }\n\n function getZoneName () {\n return this._isUTC ? 'Coordinated Universal Time' : '';\n }\n\n var proto = Moment.prototype;\n\n proto.add = add;\n proto.calendar = calendar$1;\n proto.clone = clone;\n proto.diff = diff;\n proto.endOf = endOf;\n proto.format = format;\n proto.from = from;\n proto.fromNow = fromNow;\n proto.to = to;\n proto.toNow = toNow;\n proto.get = stringGet;\n proto.invalidAt = invalidAt;\n proto.isAfter = isAfter;\n proto.isBefore = isBefore;\n proto.isBetween = isBetween;\n proto.isSame = isSame;\n proto.isSameOrAfter = isSameOrAfter;\n proto.isSameOrBefore = isSameOrBefore;\n proto.isValid = isValid$2;\n proto.lang = lang;\n proto.locale = locale;\n proto.localeData = localeData;\n proto.max = prototypeMax;\n proto.min = prototypeMin;\n proto.parsingFlags = parsingFlags;\n proto.set = stringSet;\n proto.startOf = startOf;\n proto.subtract = subtract;\n proto.toArray = toArray;\n proto.toObject = toObject;\n proto.toDate = toDate;\n proto.toISOString = toISOString;\n proto.inspect = inspect;\n proto.toJSON = toJSON;\n proto.toString = toString;\n proto.unix = unix;\n proto.valueOf = valueOf;\n proto.creationData = creationData;\n proto.year = getSetYear;\n proto.isLeapYear = getIsLeapYear;\n proto.weekYear = getSetWeekYear;\n proto.isoWeekYear = getSetISOWeekYear;\n proto.quarter = proto.quarters = getSetQuarter;\n proto.month = getSetMonth;\n proto.daysInMonth = getDaysInMonth;\n proto.week = proto.weeks = getSetWeek;\n proto.isoWeek = proto.isoWeeks = getSetISOWeek;\n proto.weeksInYear = getWeeksInYear;\n proto.isoWeeksInYear = getISOWeeksInYear;\n proto.date = getSetDayOfMonth;\n proto.day = proto.days = getSetDayOfWeek;\n proto.weekday = getSetLocaleDayOfWeek;\n proto.isoWeekday = getSetISODayOfWeek;\n proto.dayOfYear = getSetDayOfYear;\n proto.hour = proto.hours = getSetHour;\n proto.minute = proto.minutes = getSetMinute;\n proto.second = proto.seconds = getSetSecond;\n proto.millisecond = proto.milliseconds = getSetMillisecond;\n proto.utcOffset = getSetOffset;\n proto.utc = setOffsetToUTC;\n proto.local = setOffsetToLocal;\n proto.parseZone = setOffsetToParsedOffset;\n proto.hasAlignedHourOffset = hasAlignedHourOffset;\n proto.isDST = isDaylightSavingTime;\n proto.isLocal = isLocal;\n proto.isUtcOffset = isUtcOffset;\n proto.isUtc = isUtc;\n proto.isUTC = isUtc;\n proto.zoneAbbr = getZoneAbbr;\n proto.zoneName = getZoneName;\n proto.dates = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth);\n proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth);\n proto.years = deprecate('years accessor is deprecated. Use year instead', getSetYear);\n proto.zone = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone);\n proto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted);\n\n function createUnix (input) {\n return createLocal(input * 1000);\n }\n\n function createInZone () {\n return createLocal.apply(null, arguments).parseZone();\n }\n\n function preParsePostFormat (string) {\n return string;\n }\n\n var proto$1 = Locale.prototype;\n\n proto$1.calendar = calendar;\n proto$1.longDateFormat = longDateFormat;\n proto$1.invalidDate = invalidDate;\n proto$1.ordinal = ordinal;\n proto$1.preparse = preParsePostFormat;\n proto$1.postformat = preParsePostFormat;\n proto$1.relativeTime = relativeTime;\n proto$1.pastFuture = pastFuture;\n proto$1.set = set;\n\n proto$1.months = localeMonths;\n proto$1.monthsShort = localeMonthsShort;\n proto$1.monthsParse = localeMonthsParse;\n proto$1.monthsRegex = monthsRegex;\n proto$1.monthsShortRegex = monthsShortRegex;\n proto$1.week = localeWeek;\n proto$1.firstDayOfYear = localeFirstDayOfYear;\n proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n proto$1.weekdays = localeWeekdays;\n proto$1.weekdaysMin = localeWeekdaysMin;\n proto$1.weekdaysShort = localeWeekdaysShort;\n proto$1.weekdaysParse = localeWeekdaysParse;\n\n proto$1.weekdaysRegex = weekdaysRegex;\n proto$1.weekdaysShortRegex = weekdaysShortRegex;\n proto$1.weekdaysMinRegex = weekdaysMinRegex;\n\n proto$1.isPM = localeIsPM;\n proto$1.meridiem = localeMeridiem;\n\n function get$1 (format, index, field, setter) {\n var locale = getLocale();\n var utc = createUTC().set(setter, index);\n return locale[field](utc, format);\n }\n\n function listMonthsImpl (format, index, field) {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n\n if (index != null) {\n return get$1(format, index, field, 'month');\n }\n\n var i;\n var out = [];\n for (i = 0; i < 12; i++) {\n out[i] = get$1(format, i, field, 'month');\n }\n return out;\n }\n\n // ()\n // (5)\n // (fmt, 5)\n // (fmt)\n // (true)\n // (true, 5)\n // (true, fmt, 5)\n // (true, fmt)\n function listWeekdaysImpl (localeSorted, format, index, field) {\n if (typeof localeSorted === 'boolean') {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n } else {\n format = localeSorted;\n index = format;\n localeSorted = false;\n\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n }\n\n var locale = getLocale(),\n shift = localeSorted ? locale._week.dow : 0;\n\n if (index != null) {\n return get$1(format, (index + shift) % 7, field, 'day');\n }\n\n var i;\n var out = [];\n for (i = 0; i < 7; i++) {\n out[i] = get$1(format, (i + shift) % 7, field, 'day');\n }\n return out;\n }\n\n function listMonths (format, index) {\n return listMonthsImpl(format, index, 'months');\n }\n\n function listMonthsShort (format, index) {\n return listMonthsImpl(format, index, 'monthsShort');\n }\n\n function listWeekdays (localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n }\n\n function listWeekdaysShort (localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n }\n\n function listWeekdaysMin (localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n }\n\n getSetGlobalLocale('en', {\n dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n ordinal : function (number) {\n var b = number % 10,\n output = (toInt(number % 100 / 10) === 1) ? 'th' :\n (b === 1) ? 'st' :\n (b === 2) ? 'nd' :\n (b === 3) ? 'rd' : 'th';\n return number + output;\n }\n });\n\n // Side effect imports\n\n hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', getSetGlobalLocale);\n hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', getLocale);\n\n var mathAbs = Math.abs;\n\n function abs () {\n var data = this._data;\n\n this._milliseconds = mathAbs(this._milliseconds);\n this._days = mathAbs(this._days);\n this._months = mathAbs(this._months);\n\n data.milliseconds = mathAbs(data.milliseconds);\n data.seconds = mathAbs(data.seconds);\n data.minutes = mathAbs(data.minutes);\n data.hours = mathAbs(data.hours);\n data.months = mathAbs(data.months);\n data.years = mathAbs(data.years);\n\n return this;\n }\n\n function addSubtract$1 (duration, input, value, direction) {\n var other = createDuration(input, value);\n\n duration._milliseconds += direction * other._milliseconds;\n duration._days += direction * other._days;\n duration._months += direction * other._months;\n\n return duration._bubble();\n }\n\n // supports only 2.0-style add(1, 's') or add(duration)\n function add$1 (input, value) {\n return addSubtract$1(this, input, value, 1);\n }\n\n // supports only 2.0-style subtract(1, 's') or subtract(duration)\n function subtract$1 (input, value) {\n return addSubtract$1(this, input, value, -1);\n }\n\n function absCeil (number) {\n if (number < 0) {\n return Math.floor(number);\n } else {\n return Math.ceil(number);\n }\n }\n\n function bubble () {\n var milliseconds = this._milliseconds;\n var days = this._days;\n var months = this._months;\n var data = this._data;\n var seconds, minutes, hours, years, monthsFromDays;\n\n // if we have a mix of positive and negative values, bubble down first\n // check: https://github.com/moment/moment/issues/2166\n if (!((milliseconds >= 0 && days >= 0 && months >= 0) ||\n (milliseconds <= 0 && days <= 0 && months <= 0))) {\n milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n days = 0;\n months = 0;\n }\n\n // The following code bubbles up values, see the tests for\n // examples of what that means.\n data.milliseconds = milliseconds % 1000;\n\n seconds = absFloor(milliseconds / 1000);\n data.seconds = seconds % 60;\n\n minutes = absFloor(seconds / 60);\n data.minutes = minutes % 60;\n\n hours = absFloor(minutes / 60);\n data.hours = hours % 24;\n\n days += absFloor(hours / 24);\n\n // convert days to months\n monthsFromDays = absFloor(daysToMonths(days));\n months += monthsFromDays;\n days -= absCeil(monthsToDays(monthsFromDays));\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n data.days = days;\n data.months = months;\n data.years = years;\n\n return this;\n }\n\n function daysToMonths (days) {\n // 400 years have 146097 days (taking into account leap year rules)\n // 400 years have 12 months === 4800\n return days * 4800 / 146097;\n }\n\n function monthsToDays (months) {\n // the reverse of daysToMonths\n return months * 146097 / 4800;\n }\n\n function as (units) {\n if (!this.isValid()) {\n return NaN;\n }\n var days;\n var months;\n var milliseconds = this._milliseconds;\n\n units = normalizeUnits(units);\n\n if (units === 'month' || units === 'quarter' || units === 'year') {\n days = this._days + milliseconds / 864e5;\n months = this._months + daysToMonths(days);\n switch (units) {\n case 'month': return months;\n case 'quarter': return months / 3;\n case 'year': return months / 12;\n }\n } else {\n // handle milliseconds separately because of floating point math errors (issue #1867)\n days = this._days + Math.round(monthsToDays(this._months));\n switch (units) {\n case 'week' : return days / 7 + milliseconds / 6048e5;\n case 'day' : return days + milliseconds / 864e5;\n case 'hour' : return days * 24 + milliseconds / 36e5;\n case 'minute' : return days * 1440 + milliseconds / 6e4;\n case 'second' : return days * 86400 + milliseconds / 1000;\n // Math.floor prevents floating point math errors here\n case 'millisecond': return Math.floor(days * 864e5) + milliseconds;\n default: throw new Error('Unknown unit ' + units);\n }\n }\n }\n\n // TODO: Use this.as('ms')?\n function valueOf$1 () {\n if (!this.isValid()) {\n return NaN;\n }\n return (\n this._milliseconds +\n this._days * 864e5 +\n (this._months % 12) * 2592e6 +\n toInt(this._months / 12) * 31536e6\n );\n }\n\n function makeAs (alias) {\n return function () {\n return this.as(alias);\n };\n }\n\n var asMilliseconds = makeAs('ms');\n var asSeconds = makeAs('s');\n var asMinutes = makeAs('m');\n var asHours = makeAs('h');\n var asDays = makeAs('d');\n var asWeeks = makeAs('w');\n var asMonths = makeAs('M');\n var asQuarters = makeAs('Q');\n var asYears = makeAs('y');\n\n function clone$1 () {\n return createDuration(this);\n }\n\n function get$2 (units) {\n units = normalizeUnits(units);\n return this.isValid() ? this[units + 's']() : NaN;\n }\n\n function makeGetter(name) {\n return function () {\n return this.isValid() ? this._data[name] : NaN;\n };\n }\n\n var milliseconds = makeGetter('milliseconds');\n var seconds = makeGetter('seconds');\n var minutes = makeGetter('minutes');\n var hours = makeGetter('hours');\n var days = makeGetter('days');\n var months = makeGetter('months');\n var years = makeGetter('years');\n\n function weeks () {\n return absFloor(this.days() / 7);\n }\n\n var round = Math.round;\n var thresholds = {\n ss: 44, // a few seconds to seconds\n s : 45, // seconds to minute\n m : 45, // minutes to hour\n h : 22, // hours to day\n d : 26, // days to month\n M : 11 // months to year\n };\n\n // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n }\n\n function relativeTime$1 (posNegDuration, withoutSuffix, locale) {\n var duration = createDuration(posNegDuration).abs();\n var seconds = round(duration.as('s'));\n var minutes = round(duration.as('m'));\n var hours = round(duration.as('h'));\n var days = round(duration.as('d'));\n var months = round(duration.as('M'));\n var years = round(duration.as('y'));\n\n var a = seconds <= thresholds.ss && ['s', seconds] ||\n seconds < thresholds.s && ['ss', seconds] ||\n minutes <= 1 && ['m'] ||\n minutes < thresholds.m && ['mm', minutes] ||\n hours <= 1 && ['h'] ||\n hours < thresholds.h && ['hh', hours] ||\n days <= 1 && ['d'] ||\n days < thresholds.d && ['dd', days] ||\n months <= 1 && ['M'] ||\n months < thresholds.M && ['MM', months] ||\n years <= 1 && ['y'] || ['yy', years];\n\n a[2] = withoutSuffix;\n a[3] = +posNegDuration > 0;\n a[4] = locale;\n return substituteTimeAgo.apply(null, a);\n }\n\n // This function allows you to set the rounding function for relative time strings\n function getSetRelativeTimeRounding (roundingFunction) {\n if (roundingFunction === undefined) {\n return round;\n }\n if (typeof(roundingFunction) === 'function') {\n round = roundingFunction;\n return true;\n }\n return false;\n }\n\n // This function allows you to set a threshold for relative time strings\n function getSetRelativeTimeThreshold (threshold, limit) {\n if (thresholds[threshold] === undefined) {\n return false;\n }\n if (limit === undefined) {\n return thresholds[threshold];\n }\n thresholds[threshold] = limit;\n if (threshold === 's') {\n thresholds.ss = limit - 1;\n }\n return true;\n }\n\n function humanize (withSuffix) {\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var locale = this.localeData();\n var output = relativeTime$1(this, !withSuffix, locale);\n\n if (withSuffix) {\n output = locale.pastFuture(+this, output);\n }\n\n return locale.postformat(output);\n }\n\n var abs$1 = Math.abs;\n\n function sign(x) {\n return ((x > 0) - (x < 0)) || +x;\n }\n\n function toISOString$1() {\n // for ISO strings we do not use the normal bubbling rules:\n // * milliseconds bubble up until they become hours\n // * days do not bubble at all\n // * months bubble up until they become years\n // This is because there is no context-free conversion between hours and days\n // (think of clock changes)\n // and also not between days and months (28-31 days per month)\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var seconds = abs$1(this._milliseconds) / 1000;\n var days = abs$1(this._days);\n var months = abs$1(this._months);\n var minutes, hours, years;\n\n // 3600 seconds -> 60 minutes -> 1 hour\n minutes = absFloor(seconds / 60);\n hours = absFloor(minutes / 60);\n seconds %= 60;\n minutes %= 60;\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n\n // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n var Y = years;\n var M = months;\n var D = days;\n var h = hours;\n var m = minutes;\n var s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n var total = this.asSeconds();\n\n if (!total) {\n // this is the same as C#'s (Noda) and python (isodate)...\n // but not other JS (goog.date)\n return 'P0D';\n }\n\n var totalSign = total < 0 ? '-' : '';\n var ymSign = sign(this._months) !== sign(total) ? '-' : '';\n var daysSign = sign(this._days) !== sign(total) ? '-' : '';\n var hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n return totalSign + 'P' +\n (Y ? ymSign + Y + 'Y' : '') +\n (M ? ymSign + M + 'M' : '') +\n (D ? daysSign + D + 'D' : '') +\n ((h || m || s) ? 'T' : '') +\n (h ? hmsSign + h + 'H' : '') +\n (m ? hmsSign + m + 'M' : '') +\n (s ? hmsSign + s + 'S' : '');\n }\n\n var proto$2 = Duration.prototype;\n\n proto$2.isValid = isValid$1;\n proto$2.abs = abs;\n proto$2.add = add$1;\n proto$2.subtract = subtract$1;\n proto$2.as = as;\n proto$2.asMilliseconds = asMilliseconds;\n proto$2.asSeconds = asSeconds;\n proto$2.asMinutes = asMinutes;\n proto$2.asHours = asHours;\n proto$2.asDays = asDays;\n proto$2.asWeeks = asWeeks;\n proto$2.asMonths = asMonths;\n proto$2.asQuarters = asQuarters;\n proto$2.asYears = asYears;\n proto$2.valueOf = valueOf$1;\n proto$2._bubble = bubble;\n proto$2.clone = clone$1;\n proto$2.get = get$2;\n proto$2.milliseconds = milliseconds;\n proto$2.seconds = seconds;\n proto$2.minutes = minutes;\n proto$2.hours = hours;\n proto$2.days = days;\n proto$2.weeks = weeks;\n proto$2.months = months;\n proto$2.years = years;\n proto$2.humanize = humanize;\n proto$2.toISOString = toISOString$1;\n proto$2.toString = toISOString$1;\n proto$2.toJSON = toISOString$1;\n proto$2.locale = locale;\n proto$2.localeData = localeData;\n\n proto$2.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', toISOString$1);\n proto$2.lang = lang;\n\n // Side effect imports\n\n // FORMATTING\n\n addFormatToken('X', 0, 0, 'unix');\n addFormatToken('x', 0, 0, 'valueOf');\n\n // PARSING\n\n addRegexToken('x', matchSigned);\n addRegexToken('X', matchTimestamp);\n addParseToken('X', function (input, array, config) {\n config._d = new Date(parseFloat(input, 10) * 1000);\n });\n addParseToken('x', function (input, array, config) {\n config._d = new Date(toInt(input));\n });\n\n // Side effect imports\n\n\n hooks.version = '2.24.0';\n\n setHookCallback(createLocal);\n\n hooks.fn = proto;\n hooks.min = min;\n hooks.max = max;\n hooks.now = now;\n hooks.utc = createUTC;\n hooks.unix = createUnix;\n hooks.months = listMonths;\n hooks.isDate = isDate;\n hooks.locale = getSetGlobalLocale;\n hooks.invalid = createInvalid;\n hooks.duration = createDuration;\n hooks.isMoment = isMoment;\n hooks.weekdays = listWeekdays;\n hooks.parseZone = createInZone;\n hooks.localeData = getLocale;\n hooks.isDuration = isDuration;\n hooks.monthsShort = listMonthsShort;\n hooks.weekdaysMin = listWeekdaysMin;\n hooks.defineLocale = defineLocale;\n hooks.updateLocale = updateLocale;\n hooks.locales = listLocales;\n hooks.weekdaysShort = listWeekdaysShort;\n hooks.normalizeUnits = normalizeUnits;\n hooks.relativeTimeRounding = getSetRelativeTimeRounding;\n hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n hooks.calendarFormat = getCalendarFormat;\n hooks.prototype = proto;\n\n // currently HTML5 input type only supports 24-hour formats\n hooks.HTML5_FMT = {\n DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // <input type=\"datetime-local\" />\n DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // <input type=\"datetime-local\" step=\"1\" />\n DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // <input type=\"datetime-local\" step=\"0.001\" />\n DATE: 'YYYY-MM-DD', // <input type=\"date\" />\n TIME: 'HH:mm', // <input type=\"time\" />\n TIME_SECONDS: 'HH:mm:ss', // <input type=\"time\" step=\"1\" />\n TIME_MS: 'HH:mm:ss.SSS', // <input type=\"time\" step=\"0.001\" />\n WEEK: 'GGGG-[W]WW', // <input type=\"week\" />\n MONTH: 'YYYY-MM' // <input type=\"month\" />\n };\n\n return hooks;\n\n})));\n","\"use strict\";\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\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};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Loadash = require(\"lodash\");\nfunction mapRange(num, inMin, inMax, outMin, outMax) {\n return (num - inMin) * (outMax - outMin) / (inMax - inMin) + outMin;\n}\nexports.mapRange = mapRange;\nfunction groupBy(collection, propertyExtractor) {\n var i = 0;\n var val;\n var result = {};\n for (; i < collection.length; i++) {\n var ppty = propertyExtractor(collection[i]);\n val = collection[i];\n if (result.hasOwnProperty(ppty)) {\n result[ppty].push(val);\n }\n else {\n result[ppty] = [];\n result[ppty].push(val);\n }\n }\n var arrayResult = [];\n for (var property in result) {\n if (result.hasOwnProperty(property)) {\n var v = result[property];\n var obj = {\n key: property,\n data: v,\n };\n arrayResult.push(obj);\n }\n }\n return arrayResult;\n}\nexports.groupBy = groupBy;\nfunction subSet(source) {\n var keys = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n keys[_i - 1] = arguments[_i];\n }\n return Loadash.pick(source, keys);\n}\nexports.subSet = subSet;\nfunction ShallowDiff(oldObject, newObject) {\n var changedKeys = Object.keys(newObject)\n .filter(function (key) {\n var v1 = newObject[key];\n var v2 = oldObject[key];\n if (v1 != undefined && v1.equals != undefined && typeof (v1.equals) === \"function\") {\n return v1.equals(v2);\n }\n return v1 !== v2;\n });\n if (changedKeys == undefined || changedKeys.length === 0)\n return undefined;\n return subSet.apply(void 0, __spreadArrays([newObject], changedKeys));\n}\nexports.ShallowDiff = ShallowDiff;\nfunction flatterRArray(input, output) {\n if (output == undefined)\n output = [];\n if (input != undefined) {\n if (Array.isArray(input)) {\n for (var _i = 0, input_1 = input; _i < input_1.length; _i++) {\n var x = input_1[_i];\n flatterRArray(x, output);\n }\n }\n else {\n output.push(input);\n }\n }\n return output;\n}\nexports.flatterRArray = flatterRArray;\n//# sourceMappingURL=Utils.js.map","export default function _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}","export default function _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Proxy = (function () {\n function Proxy(handler) {\n this.handler = {};\n this.handler = handler;\n }\n Proxy.prototype.proxy = function (target) {\n var me = this;\n var getter = this.handler.get ?\n function (prop) {\n return me.handler.get ? me.handler.get(target, prop, me) : null;\n } :\n function (prop) {\n return target[prop];\n };\n var setter = this.handler.set ?\n function (prop, value) {\n return me.handler.set ? me.handler.set(target, prop, value, me) : null;\n } : function (prop, value) {\n Object.defineProperty(me, prop, { value: value });\n };\n var propertyNames = Object.getOwnPropertyNames(target);\n var propertyMap = {};\n propertyNames.forEach(function (prop) {\n var real = Object.getOwnPropertyDescriptor(target, prop);\n var desc = {\n enumerable: real != null ? !!real.enumerable : true,\n get: getter.bind(target, prop),\n set: setter.bind(target, prop),\n };\n Object.defineProperty(me, prop, desc);\n propertyMap[prop] = true;\n });\n return this;\n };\n return Proxy;\n}());\nexports.default = Proxy;\n//# sourceMappingURL=Proxy.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar StringUtils_1 = require(\"./StringUtils\");\nfunction toSimpleCurrency(value, suffixSeparator) {\n if (suffixSeparator === void 0) { suffixSeparator = \"\"; }\n var newValue = value;\n var suffixes = [\"\", \"K\", \"M\", \"B\", \"T\"];\n var ix = 0;\n while (ix < suffixes.length && newValue >= 1000) {\n newValue = newValue / 1000;\n ix++;\n }\n return newValue.toFixed(2) + suffixSeparator + suffixes[ix];\n}\nexports.toSimpleCurrency = toSimpleCurrency;\nfunction toFormattedCurrency(value, fractions) {\n if (fractions === void 0) { fractions = 2; }\n if (value == undefined)\n value = 0;\n if (fractions === 0) {\n var val = value.toFixed(1).replace(/(\\d)(?=(\\d{3})+\\.)/g, \"$1,\");\n val = val.substring(0, val.indexOf(\".\"));\n return val;\n }\n else\n return value.toFixed(fractions).replace(/(\\d)(?=(\\d{3})+\\.)/g, \"$1,\");\n}\nexports.toFormattedCurrency = toFormattedCurrency;\nfunction convertValueToCurrency(value) {\n value = StringUtils_1.toNumberString(value, 2);\n if (value == undefined)\n return undefined;\n value = value.toString().replace(/(\\d)(?=(\\d\\d\\d)+(?!\\d))/g, \"$1,\");\n return value;\n}\nexports.convertValueToCurrency = convertValueToCurrency;\nfunction convertCurrencyToValue(text) {\n return StringUtils_1.toNumberString(text, 2);\n}\nexports.convertCurrencyToValue = convertCurrencyToValue;\n//# sourceMappingURL=Currency.js.map","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var symbolMap = {\n '1': 'Ù¡',\n '2': 'Ù¢',\n '3': 'Ù£',\n '4': 'Ù¤',\n '5': 'Ù¥',\n '6': 'Ù¦',\n '7': 'Ù§',\n '8': 'Ù¨',\n '9': 'Ù©',\n '0': 'Ù '\n }, numberMap = {\n 'Ù¡': '1',\n 'Ù¢': '2',\n 'Ù£': '3',\n 'Ù¤': '4',\n 'Ù¥': '5',\n 'Ù¦': '6',\n 'Ù§': '7',\n 'Ù¨': '8',\n 'Ù©': '9',\n 'Ù ': '0'\n }, pluralForm = function (n) {\n return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5;\n }, plurals = {\n s : ['أقل من ثانية', 'ثانية واØدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'],\n m : ['أقل من دقيقة', 'دقيقة واØدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'],\n h : ['أقل من ساعة', 'ساعة واØدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'],\n d : ['أقل من يوم', 'يوم واØد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'],\n M : ['أقل من شهر', 'شهر واØد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'],\n y : ['أقل من عام', 'عام واØد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام']\n }, pluralize = function (u) {\n return function (number, withoutSuffix, string, isFuture) {\n var f = pluralForm(number),\n str = plurals[u][pluralForm(number)];\n if (f === 2) {\n str = str[withoutSuffix ? 0 : 1];\n }\n return str.replace(/%d/i, number);\n };\n }, months = [\n 'يناير',\n 'Ùبراير',\n 'مارس',\n 'أبريل',\n 'مايو',\n 'يونيو',\n 'يوليو',\n 'أغسطس',\n 'سبتمبر',\n 'أكتوبر',\n 'نوÙمبر',\n 'ديسمبر'\n ];\n\n var ar = moment.defineLocale('ar', {\n months : months,\n monthsShort : months,\n weekdays : 'الأØد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n weekdaysShort : 'Ø£Øد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n weekdaysMin : 'Ø_Ù†_Ø«_ر_Ø®_ج_س'.split('_'),\n weekdaysParseExact : true,\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'D/\\u200FM/\\u200FYYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd D MMMM YYYY HH:mm'\n },\n meridiemParse: /ص|Ù…/,\n isPM : function (input) {\n return 'Ù…' === input;\n },\n meridiem : function (hour, minute, isLower) {\n if (hour < 12) {\n return 'ص';\n } else {\n return 'Ù…';\n }\n },\n calendar : {\n sameDay: '[اليوم عند الساعة] LT',\n nextDay: '[غدًا عند الساعة] LT',\n nextWeek: 'dddd [عند الساعة] LT',\n lastDay: '[أمس عند الساعة] LT',\n lastWeek: 'dddd [عند الساعة] LT',\n sameElse: 'L'\n },\n relativeTime : {\n future : 'بعد %s',\n past : 'منذ %s',\n s : pluralize('s'),\n ss : pluralize('s'),\n m : pluralize('m'),\n mm : pluralize('m'),\n h : pluralize('h'),\n hh : pluralize('h'),\n d : pluralize('d'),\n dd : pluralize('d'),\n M : pluralize('M'),\n MM : pluralize('M'),\n y : pluralize('y'),\n yy : pluralize('y')\n },\n preparse: function (string) {\n return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n return numberMap[match];\n }).replace(/ØŒ/g, ',');\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n }).replace(/,/g, 'ØŒ');\n },\n week : {\n dow : 6, // Saturday is the first day of the week.\n doy : 12 // The week that contains Jan 12th is the first week of the year.\n }\n });\n\n return ar;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n var enGb = moment.defineLocale('en-gb', {\n months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n longDateFormat : {\n LT : 'HH:mm',\n LTS : 'HH:mm:ss',\n L : 'DD/MM/YYYY',\n LL : 'D MMMM YYYY',\n LLL : 'D MMMM YYYY HH:mm',\n LLLL : 'dddd, D MMMM YYYY HH:mm'\n },\n calendar : {\n sameDay : '[Today at] LT',\n nextDay : '[Tomorrow at] LT',\n nextWeek : 'dddd [at] LT',\n lastDay : '[Yesterday at] LT',\n lastWeek : '[Last] dddd [at] LT',\n sameElse : 'L'\n },\n relativeTime : {\n future : 'in %s',\n past : '%s ago',\n s : 'a few seconds',\n ss : '%d seconds',\n m : 'a minute',\n mm : '%d minutes',\n h : 'an hour',\n hh : '%d hours',\n d : 'a day',\n dd : '%d days',\n M : 'a month',\n MM : '%d months',\n y : 'a year',\n yy : '%d years'\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n ordinal : function (number) {\n var b = number % 10,\n output = (~~(number % 100 / 10) === 1) ? 'th' :\n (b === 1) ? 'st' :\n (b === 2) ? 'nd' :\n (b === 3) ? 'rd' : 'th';\n return number + output;\n },\n week : {\n dow : 1, // Monday is the first day of the week.\n doy : 4 // The week that contains Jan 4th is the first week of the year.\n }\n });\n\n return enGb;\n\n})));\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction filter(input, chars, invert) {\n if (invert === void 0) { invert = false; }\n if (input == undefined)\n return input;\n var regEx = new RegExp(\"[\" + (invert ? \"^\" : \"\") + chars + \"]\", \"g\");\n return input.replace(regEx, \"\");\n}\nexports.filter = filter;\nfunction filterCharSet(input, invert) {\n var charsets = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n charsets[_i - 2] = arguments[_i];\n }\n var charset = charsets.reduce(function (previousValue, currentValue) {\n return previousValue + currentValue();\n }, \"\");\n return filter(input, charset, invert);\n}\nexports.filterCharSet = filterCharSet;\nexports.NumberChars = function () {\n return \"0-9\";\n};\nexports.EnglishChars = function () {\n return \"a-zA-Z\";\n};\nexports.ArabicChars = function () {\n return \"\\\\u0600-\\\\u06ff\";\n};\nexports.SpaceChars = function () {\n return \"\\\\s\";\n};\nexports.PunctuationsChars = function () {\n return \".,\\\\/#!$%\\\\^&\\\\*;:{}=\\\\-_`~()\";\n};\n//# sourceMappingURL=RegExFilter.js.map","const availableProps = [\n 'computer',\n 'windows',\n 'linux',\n 'mac',\n 'mobile',\n 'tablet',\n 'android',\n 'ios',\n 'firefox',\n 'chrome',\n 'edge',\n 'safari',\n]\n\nexport default availableProps\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport {UAParser} from 'ua-parser-js'\n\ntype UAResults = {\n android: boolean\n ios: boolean\n mobile: boolean\n tablet: boolean\n windows: boolean\n mac: boolean\n linux: boolean\n computer: boolean\n firefox: boolean\n chrome: boolean\n edge: boolean\n safari: boolean\n}\n\ntype Props = {\n ua: string\n}\n\ntype ContextProps = {\n parser: UAParser | {}\n uaResults: UAResults | {}\n}\n\nexport const UAContext = React.createContext<ContextProps>({\n uaResults: {},\n parser: {},\n})\n\nclass UAProvider extends React.Component<Props> {\n uaParser: UAParser\n uaResults: UAResults\n\n static propTypes = {\n ua: PropTypes.string.isRequired,\n children: PropTypes.element.isRequired,\n }\n\n constructor(props: Props) {\n super(props)\n const uaParser = new UAParser()\n const uaResults = {\n android: false,\n ios: false,\n mobile: false,\n tablet: false,\n windows: false,\n mac: false,\n linux: false,\n computer: false,\n firefox: false,\n chrome: false,\n edge: false,\n safari: false,\n }\n\n uaParser.setUA(props.ua)\n uaResults.android = uaParser.getOS().name === 'Android'\n uaResults.ios = uaParser.getOS().name === 'iOS'\n uaResults.mobile = uaParser.getDevice().type === 'mobile'\n\n uaResults.tablet = uaParser.getDevice().type === 'tablet'\n\n uaResults.windows = uaParser.getOS().name === 'Windows'\n uaResults.mac = uaParser.getOS().name === 'Mac OS'\n uaResults.linux = uaParser.getOS().name === 'Linux'\n uaResults.computer =\n uaResults.windows ||\n uaResults.mac ||\n uaResults.linux ||\n uaParser.getDevice().type === undefined\n\n uaResults.firefox = uaParser.getBrowser().name === 'Firefox'\n uaResults.chrome = uaParser.getBrowser().name === 'Chrome'\n uaResults.edge = uaParser.getBrowser().name === 'Edge'\n uaResults.safari = uaParser.getBrowser().name === 'Safari'\n\n this.uaParser = uaParser\n this.uaResults = uaResults\n }\n\n render() {\n return (\n <UAContext.Provider\n value={{parser: this.uaParser, uaResults: this.uaResults}}\n >\n {this.props.children}\n </UAContext.Provider>\n )\n // return React.Children.only(this.props.children)\n }\n}\n\nexport default UAProvider\n","import PropTypes from 'prop-types'\nimport availableProps from './availableProps'\nimport * as React from 'react'\nimport {UAContext} from './Provider'\n\nexport type UserAgentProps = {\n computer?: boolean\n windows?: boolean\n linux?: boolean\n mac?: boolean\n mobile?: boolean\n tablet?: boolean\n android?: boolean\n ios?: boolean\n firefox?: boolean\n chrome?: boolean\n edge?: boolean\n safari?: boolean\n}\n\ntype Props = {\n returnFullParser?: boolean\n children?: any\n} & UserAgentProps\n\nclass UserAgent extends React.Component<Props> {\n static contextType = UAContext\n static defaultProps = {\n returnFullParser: false,\n }\n static propTypes = {\n ...availableProps.reduce(\n (acc, cur) => ({...acc, [cur]: PropTypes.bool}),\n {}\n ),\n returnFullParser: PropTypes.bool,\n }\n\n render(): React.ReactNode {\n const {children, returnFullParser} = this.props\n const ua = this.context\n\n const validProps = Object.keys(this.props).filter(\n prop => availableProps.indexOf(prop) !== -1\n )\n const ret = validProps.some(prop => ua.uaResults[prop])\n const funcChildren = typeof children === 'function'\n\n if (validProps.length !== 0) {\n if (funcChildren) {\n return children(ret)\n }\n if (ret) {\n return children\n }\n return null\n }\n if (funcChildren) {\n if (returnFullParser) {\n return children(ua.parser)\n }\n return children(ua.uaResults)\n }\n\n if (__DEV__) {\n throw new Error(\n 'UserAgent should be used with a function as a child when used without any props'\n )\n }\n return null\n }\n}\n\nexport default UserAgent\n","/*!\n * UAParser.js v0.7.21\n * Lightweight JavaScript-based User-Agent string parser\n * https://github.com/faisalman/ua-parser-js\n *\n * Copyright © 2012-2019 Faisal Salman <f@faisalman.com>\n * Licensed under MIT License\n */\n\n(function (window, undefined) {\n\n 'use strict';\n\n //////////////\n // Constants\n /////////////\n\n\n var LIBVERSION = '0.7.21',\n EMPTY = '',\n UNKNOWN = '?',\n FUNC_TYPE = 'function',\n UNDEF_TYPE = 'undefined',\n OBJ_TYPE = 'object',\n STR_TYPE = 'string',\n MAJOR = 'major', // deprecated\n MODEL = 'model',\n NAME = 'name',\n TYPE = 'type',\n VENDOR = 'vendor',\n VERSION = 'version',\n ARCHITECTURE= 'architecture',\n CONSOLE = 'console',\n MOBILE = 'mobile',\n TABLET = 'tablet',\n SMARTTV = 'smarttv',\n WEARABLE = 'wearable',\n EMBEDDED = 'embedded';\n\n\n ///////////\n // Helper\n //////////\n\n\n var util = {\n extend : function (regexes, extensions) {\n var mergedRegexes = {};\n for (var i in regexes) {\n if (extensions[i] && extensions[i].length % 2 === 0) {\n mergedRegexes[i] = extensions[i].concat(regexes[i]);\n } else {\n mergedRegexes[i] = regexes[i];\n }\n }\n return mergedRegexes;\n },\n has : function (str1, str2) {\n if (typeof str1 === \"string\") {\n return str2.toLowerCase().indexOf(str1.toLowerCase()) !== -1;\n } else {\n return false;\n }\n },\n lowerize : function (str) {\n return str.toLowerCase();\n },\n major : function (version) {\n return typeof(version) === STR_TYPE ? version.replace(/[^\\d\\.]/g,'').split(\".\")[0] : undefined;\n },\n trim : function (str) {\n return str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n }\n };\n\n\n ///////////////\n // Map helper\n //////////////\n\n\n var mapper = {\n\n rgx : function (ua, arrays) {\n\n var i = 0, j, k, p, q, matches, match;\n\n // loop through all regexes maps\n while (i < arrays.length && !matches) {\n\n var regex = arrays[i], // even sequence (0,2,4,..)\n props = arrays[i + 1]; // odd sequence (1,3,5,..)\n j = k = 0;\n\n // try matching uastring with regexes\n while (j < regex.length && !matches) {\n\n matches = regex[j++].exec(ua);\n\n if (!!matches) {\n for (p = 0; p < props.length; p++) {\n match = matches[++k];\n q = props[p];\n // check if given property is actually array\n if (typeof q === OBJ_TYPE && q.length > 0) {\n if (q.length == 2) {\n if (typeof q[1] == FUNC_TYPE) {\n // assign modified match\n this[q[0]] = q[1].call(this, match);\n } else {\n // assign given value, ignore regex match\n this[q[0]] = q[1];\n }\n } else if (q.length == 3) {\n // check whether function or regex\n if (typeof q[1] === FUNC_TYPE && !(q[1].exec && q[1].test)) {\n // call function (usually string mapper)\n this[q[0]] = match ? q[1].call(this, match, q[2]) : undefined;\n } else {\n // sanitize match using given regex\n this[q[0]] = match ? match.replace(q[1], q[2]) : undefined;\n }\n } else if (q.length == 4) {\n this[q[0]] = match ? q[3].call(this, match.replace(q[1], q[2])) : undefined;\n }\n } else {\n this[q] = match ? match : undefined;\n }\n }\n }\n }\n i += 2;\n }\n },\n\n str : function (str, map) {\n\n for (var i in map) {\n // check if array\n if (typeof map[i] === OBJ_TYPE && map[i].length > 0) {\n for (var j = 0; j < map[i].length; j++) {\n if (util.has(map[i][j], str)) {\n return (i === UNKNOWN) ? undefined : i;\n }\n }\n } else if (util.has(map[i], str)) {\n return (i === UNKNOWN) ? undefined : i;\n }\n }\n return str;\n }\n };\n\n\n ///////////////\n // String map\n //////////////\n\n\n var maps = {\n\n browser : {\n oldsafari : {\n version : {\n '1.0' : '/8',\n '1.2' : '/1',\n '1.3' : '/3',\n '2.0' : '/412',\n '2.0.2' : '/416',\n '2.0.3' : '/417',\n '2.0.4' : '/419',\n '?' : '/'\n }\n }\n },\n\n device : {\n amazon : {\n model : {\n 'Fire Phone' : ['SD', 'KF']\n }\n },\n sprint : {\n model : {\n 'Evo Shift 4G' : '7373KT'\n },\n vendor : {\n 'HTC' : 'APA',\n 'Sprint' : 'Sprint'\n }\n }\n },\n\n os : {\n windows : {\n version : {\n 'ME' : '4.90',\n 'NT 3.11' : 'NT3.51',\n 'NT 4.0' : 'NT4.0',\n '2000' : 'NT 5.0',\n 'XP' : ['NT 5.1', 'NT 5.2'],\n 'Vista' : 'NT 6.0',\n '7' : 'NT 6.1',\n '8' : 'NT 6.2',\n '8.1' : 'NT 6.3',\n '10' : ['NT 6.4', 'NT 10.0'],\n 'RT' : 'ARM'\n }\n }\n }\n };\n\n\n //////////////\n // Regex map\n /////////////\n\n\n var regexes = {\n\n browser : [[\n\n // Presto based\n /(opera\\smini)\\/([\\w\\.-]+)/i, // Opera Mini\n /(opera\\s[mobiletab]+).+version\\/([\\w\\.-]+)/i, // Opera Mobi/Tablet\n /(opera).+version\\/([\\w\\.]+)/i, // Opera > 9.80\n /(opera)[\\/\\s]+([\\w\\.]+)/i // Opera < 9.80\n ], [NAME, VERSION], [\n\n /(opios)[\\/\\s]+([\\w\\.]+)/i // Opera mini on iphone >= 8.0\n ], [[NAME, 'Opera Mini'], VERSION], [\n\n /\\s(opr)\\/([\\w\\.]+)/i // Opera Webkit\n ], [[NAME, 'Opera'], VERSION], [\n\n // Mixed\n /(kindle)\\/([\\w\\.]+)/i, // Kindle\n /(lunascape|maxthon|netfront|jasmine|blazer)[\\/\\s]?([\\w\\.]*)/i,\n // Lunascape/Maxthon/Netfront/Jasmine/Blazer\n // Trident based\n /(avant\\s|iemobile|slim)(?:browser)?[\\/\\s]?([\\w\\.]*)/i,\n // Avant/IEMobile/SlimBrowser\n /(bidubrowser|baidubrowser)[\\/\\s]?([\\w\\.]+)/i, // Baidu Browser\n /(?:ms|\\()(ie)\\s([\\w\\.]+)/i, // Internet Explorer\n\n // Webkit/KHTML based\n /(rekonq)\\/([\\w\\.]*)/i, // Rekonq\n /(chromium|flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon)\\/([\\w\\.-]+)/i\n // Chromium/Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon\n ], [NAME, VERSION], [\n\n /(konqueror)\\/([\\w\\.]+)/i // Konqueror\n ], [[NAME, 'Konqueror'], VERSION], [\n\n /(trident).+rv[:\\s]([\\w\\.]+).+like\\sgecko/i // IE11\n ], [[NAME, 'IE'], VERSION], [\n\n /(edge|edgios|edga|edg)\\/((\\d+)?[\\w\\.]+)/i // Microsoft Edge\n ], [[NAME, 'Edge'], VERSION], [\n\n /(yabrowser)\\/([\\w\\.]+)/i // Yandex\n ], [[NAME, 'Yandex'], VERSION], [\n\n /(Avast)\\/([\\w\\.]+)/i // Avast Secure Browser\n ], [[NAME, 'Avast Secure Browser'], VERSION], [\n\n /(AVG)\\/([\\w\\.]+)/i // AVG Secure Browser\n ], [[NAME, 'AVG Secure Browser'], VERSION], [\n\n /(puffin)\\/([\\w\\.]+)/i // Puffin\n ], [[NAME, 'Puffin'], VERSION], [\n\n /(focus)\\/([\\w\\.]+)/i // Firefox Focus\n ], [[NAME, 'Firefox Focus'], VERSION], [\n\n /(opt)\\/([\\w\\.]+)/i // Opera Touch\n ], [[NAME, 'Opera Touch'], VERSION], [\n\n /((?:[\\s\\/])uc?\\s?browser|(?:juc.+)ucweb)[\\/\\s]?([\\w\\.]+)/i // UCBrowser\n ], [[NAME, 'UCBrowser'], VERSION], [\n\n /(comodo_dragon)\\/([\\w\\.]+)/i // Comodo Dragon\n ], [[NAME, /_/g, ' '], VERSION], [\n\n /(windowswechat qbcore)\\/([\\w\\.]+)/i // WeChat Desktop for Windows Built-in Browser\n ], [[NAME, 'WeChat(Win) Desktop'], VERSION], [\n\n /(micromessenger)\\/([\\w\\.]+)/i // WeChat\n ], [[NAME, 'WeChat'], VERSION], [\n\n /(brave)\\/([\\w\\.]+)/i // Brave browser\n ], [[NAME, 'Brave'], VERSION], [\n\n /(qqbrowserlite)\\/([\\w\\.]+)/i // QQBrowserLite\n ], [NAME, VERSION], [\n\n /(QQ)\\/([\\d\\.]+)/i // QQ, aka ShouQ\n ], [NAME, VERSION], [\n\n /m?(qqbrowser)[\\/\\s]?([\\w\\.]+)/i // QQBrowser\n ], [NAME, VERSION], [\n\n /(baiduboxapp)[\\/\\s]?([\\w\\.]+)/i // Baidu App\n ], [NAME, VERSION], [\n\n /(2345Explorer)[\\/\\s]?([\\w\\.]+)/i // 2345 Browser\n ], [NAME, VERSION], [\n\n /(MetaSr)[\\/\\s]?([\\w\\.]+)/i // SouGouBrowser\n ], [NAME], [\n\n /(LBBROWSER)/i // LieBao Browser\n ], [NAME], [\n\n /xiaomi\\/miuibrowser\\/([\\w\\.]+)/i // MIUI Browser\n ], [VERSION, [NAME, 'MIUI Browser']], [\n\n /;fbav\\/([\\w\\.]+);/i // Facebook App for iOS & Android\n ], [VERSION, [NAME, 'Facebook']], [\n\n /safari\\s(line)\\/([\\w\\.]+)/i, // Line App for iOS\n /android.+(line)\\/([\\w\\.]+)\\/iab/i // Line App for Android\n ], [NAME, VERSION], [\n\n /headlesschrome(?:\\/([\\w\\.]+)|\\s)/i // Chrome Headless\n ], [VERSION, [NAME, 'Chrome Headless']], [\n\n /\\swv\\).+(chrome)\\/([\\w\\.]+)/i // Chrome WebView\n ], [[NAME, /(.+)/, '$1 WebView'], VERSION], [\n\n /((?:oculus|samsung)browser)\\/([\\w\\.]+)/i\n ], [[NAME, /(.+(?:g|us))(.+)/, '$1 $2'], VERSION], [ // Oculus / Samsung Browser\n\n /android.+version\\/([\\w\\.]+)\\s+(?:mobile\\s?safari|safari)*/i // Android Browser\n ], [VERSION, [NAME, 'Android Browser']], [\n\n /(sailfishbrowser)\\/([\\w\\.]+)/i // Sailfish Browser\n ], [[NAME, 'Sailfish Browser'], VERSION], [\n\n /(chrome|omniweb|arora|[tizenoka]{5}\\s?browser)\\/v?([\\w\\.]+)/i\n // Chrome/OmniWeb/Arora/Tizen/Nokia\n ], [NAME, VERSION], [\n\n /(dolfin)\\/([\\w\\.]+)/i // Dolphin\n ], [[NAME, 'Dolphin'], VERSION], [\n\n /(qihu|qhbrowser|qihoobrowser|360browser)/i // 360\n ], [[NAME, '360 Browser']], [\n\n /((?:android.+)crmo|crios)\\/([\\w\\.]+)/i // Chrome for Android/iOS\n ], [[NAME, 'Chrome'], VERSION], [\n\n /(coast)\\/([\\w\\.]+)/i // Opera Coast\n ], [[NAME, 'Opera Coast'], VERSION], [\n\n /fxios\\/([\\w\\.-]+)/i // Firefox for iOS\n ], [VERSION, [NAME, 'Firefox']], [\n\n /version\\/([\\w\\.]+).+?mobile\\/\\w+\\s(safari)/i // Mobile Safari\n ], [VERSION, [NAME, 'Mobile Safari']], [\n\n /version\\/([\\w\\.]+).+?(mobile\\s?safari|safari)/i // Safari & Safari Mobile\n ], [VERSION, NAME], [\n\n /webkit.+?(gsa)\\/([\\w\\.]+).+?(mobile\\s?safari|safari)(\\/[\\w\\.]+)/i // Google Search Appliance on iOS\n ], [[NAME, 'GSA'], VERSION], [\n\n /webkit.+?(mobile\\s?safari|safari)(\\/[\\w\\.]+)/i // Safari < 3.0\n ], [NAME, [VERSION, mapper.str, maps.browser.oldsafari.version]], [\n\n /(webkit|khtml)\\/([\\w\\.]+)/i\n ], [NAME, VERSION], [\n\n // Gecko based\n /(navigator|netscape)\\/([\\w\\.-]+)/i // Netscape\n ], [[NAME, 'Netscape'], VERSION], [\n /(swiftfox)/i, // Swiftfox\n /(icedragon|iceweasel|camino|chimera|fennec|maemo\\sbrowser|minimo|conkeror)[\\/\\s]?([\\w\\.\\+]+)/i,\n // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror\n /(firefox|seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\\/([\\w\\.-]+)$/i,\n\n // Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix\n /(mozilla)\\/([\\w\\.]+).+rv\\:.+gecko\\/\\d+/i, // Mozilla\n\n // Other\n /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir)[\\/\\s]?([\\w\\.]+)/i,\n // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Sleipnir\n /(links)\\s\\(([\\w\\.]+)/i, // Links\n /(gobrowser)\\/?([\\w\\.]*)/i, // GoBrowser\n /(ice\\s?browser)\\/v?([\\w\\._]+)/i, // ICE Browser\n /(mosaic)[\\/\\s]([\\w\\.]+)/i // Mosaic\n ], [NAME, VERSION]\n ],\n\n cpu : [[\n\n /(?:(amd|x(?:(?:86|64)[_-])?|wow|win)64)[;\\)]/i // AMD64\n ], [[ARCHITECTURE, 'amd64']], [\n\n /(ia32(?=;))/i // IA32 (quicktime)\n ], [[ARCHITECTURE, util.lowerize]], [\n\n /((?:i[346]|x)86)[;\\)]/i // IA32\n ], [[ARCHITECTURE, 'ia32']], [\n\n // PocketPC mistakenly identified as PowerPC\n /windows\\s(ce|mobile);\\sppc;/i\n ], [[ARCHITECTURE, 'arm']], [\n\n /((?:ppc|powerpc)(?:64)?)(?:\\smac|;|\\))/i // PowerPC\n ], [[ARCHITECTURE, /ower/, '', util.lowerize]], [\n\n /(sun4\\w)[;\\)]/i // SPARC\n ], [[ARCHITECTURE, 'sparc']], [\n\n /((?:avr32|ia64(?=;))|68k(?=\\))|arm(?:64|(?=v\\d+[;l]))|(?=atmel\\s)avr|(?:irix|mips|sparc)(?:64)?(?=;)|pa-risc)/i\n // IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC\n ], [[ARCHITECTURE, util.lowerize]]\n ],\n\n device : [[\n\n /\\((ipad|playbook);[\\w\\s\\),;-]+(rim|apple)/i // iPad/PlayBook\n ], [MODEL, VENDOR, [TYPE, TABLET]], [\n\n /applecoremedia\\/[\\w\\.]+ \\((ipad)/ // iPad\n ], [MODEL, [VENDOR, 'Apple'], [TYPE, TABLET]], [\n\n /(apple\\s{0,1}tv)/i // Apple TV\n ], [[MODEL, 'Apple TV'], [VENDOR, 'Apple'], [TYPE, SMARTTV]], [\n\n /(archos)\\s(gamepad2?)/i, // Archos\n /(hp).+(touchpad)/i, // HP TouchPad\n /(hp).+(tablet)/i, // HP Tablet\n /(kindle)\\/([\\w\\.]+)/i, // Kindle\n /\\s(nook)[\\w\\s]+build\\/(\\w+)/i, // Nook\n /(dell)\\s(strea[kpr\\s\\d]*[\\dko])/i // Dell Streak\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n /(kf[A-z]+)\\sbuild\\/.+silk\\//i // Kindle Fire HD\n ], [MODEL, [VENDOR, 'Amazon'], [TYPE, TABLET]], [\n /(sd|kf)[0349hijorstuw]+\\sbuild\\/.+silk\\//i // Fire Phone\n ], [[MODEL, mapper.str, maps.device.amazon.model], [VENDOR, 'Amazon'], [TYPE, MOBILE]], [\n /android.+aft([bms])\\sbuild/i // Fire TV\n ], [MODEL, [VENDOR, 'Amazon'], [TYPE, SMARTTV]], [\n\n /\\((ip[honed|\\s\\w*]+);.+(apple)/i // iPod/iPhone\n ], [MODEL, VENDOR, [TYPE, MOBILE]], [\n /\\((ip[honed|\\s\\w*]+);/i // iPod/iPhone\n ], [MODEL, [VENDOR, 'Apple'], [TYPE, MOBILE]], [\n\n /(blackberry)[\\s-]?(\\w+)/i, // BlackBerry\n /(blackberry|benq|palm(?=\\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[\\s_-]?([\\w-]*)/i,\n // BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron\n /(hp)\\s([\\w\\s]+\\w)/i, // HP iPAQ\n /(asus)-?(\\w+)/i // Asus\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n /\\(bb10;\\s(\\w+)/i // BlackBerry 10\n ], [MODEL, [VENDOR, 'BlackBerry'], [TYPE, MOBILE]], [\n // Asus Tablets\n /android.+(transfo[prime\\s]{4,10}\\s\\w+|eeepc|slider\\s\\w+|nexus 7|padfone|p00c)/i\n ], [MODEL, [VENDOR, 'Asus'], [TYPE, TABLET]], [\n\n /(sony)\\s(tablet\\s[ps])\\sbuild\\//i, // Sony\n /(sony)?(?:sgp.+)\\sbuild\\//i\n ], [[VENDOR, 'Sony'], [MODEL, 'Xperia Tablet'], [TYPE, TABLET]], [\n /android.+\\s([c-g]\\d{4}|so[-l]\\w+)(?=\\sbuild\\/|\\).+chrome\\/(?![1-6]{0,1}\\d\\.))/i\n ], [MODEL, [VENDOR, 'Sony'], [TYPE, MOBILE]], [\n\n /\\s(ouya)\\s/i, // Ouya\n /(nintendo)\\s([wids3u]+)/i // Nintendo\n ], [VENDOR, MODEL, [TYPE, CONSOLE]], [\n\n /android.+;\\s(shield)\\sbuild/i // Nvidia\n ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, CONSOLE]], [\n\n /(playstation\\s[34portablevi]+)/i // Playstation\n ], [MODEL, [VENDOR, 'Sony'], [TYPE, CONSOLE]], [\n\n /(sprint\\s(\\w+))/i // Sprint Phones\n ], [[VENDOR, mapper.str, maps.device.sprint.vendor], [MODEL, mapper.str, maps.device.sprint.model], [TYPE, MOBILE]], [\n\n /(htc)[;_\\s-]+([\\w\\s]+(?=\\)|\\sbuild)|\\w+)/i, // HTC\n /(zte)-(\\w*)/i, // ZTE\n /(alcatel|geeksphone|nexian|panasonic|(?=;\\s)sony)[_\\s-]?([\\w-]*)/i\n // Alcatel/GeeksPhone/Nexian/Panasonic/Sony\n ], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [\n\n /(nexus\\s9)/i // HTC Nexus 9\n ], [MODEL, [VENDOR, 'HTC'], [TYPE, TABLET]], [\n\n /d\\/huawei([\\w\\s-]+)[;\\)]/i,\n /(nexus\\s6p|vog-l29|ane-lx1|eml-l29)/i // Huawei\n ], [MODEL, [VENDOR, 'Huawei'], [TYPE, MOBILE]], [\n\n /android.+(bah2?-a?[lw]\\d{2})/i // Huawei MediaPad\n ], [MODEL, [VENDOR, 'Huawei'], [TYPE, TABLET]], [\n\n /(microsoft);\\s(lumia[\\s\\w]+)/i // Microsoft Lumia\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n\n /[\\s\\(;](xbox(?:\\sone)?)[\\s\\);]/i // Microsoft Xbox\n ], [MODEL, [VENDOR, 'Microsoft'], [TYPE, CONSOLE]], [\n /(kin\\.[onetw]{3})/i // Microsoft Kin\n ], [[MODEL, /\\./g, ' '], [VENDOR, 'Microsoft'], [TYPE, MOBILE]], [\n\n // Motorola\n /\\s(milestone|droid(?:[2-4x]|\\s(?:bionic|x2|pro|razr))?:?(\\s4g)?)[\\w\\s]+build\\//i,\n /mot[\\s-]?(\\w*)/i,\n /(XT\\d{3,4}) build\\//i,\n /(nexus\\s6)/i\n ], [MODEL, [VENDOR, 'Motorola'], [TYPE, MOBILE]], [\n /android.+\\s(mz60\\d|xoom[\\s2]{0,2})\\sbuild\\//i\n ], [MODEL, [VENDOR, 'Motorola'], [TYPE, TABLET]], [\n\n /hbbtv\\/\\d+\\.\\d+\\.\\d+\\s+\\([\\w\\s]*;\\s*(\\w[^;]*);([^;]*)/i // HbbTV devices\n ], [[VENDOR, util.trim], [MODEL, util.trim], [TYPE, SMARTTV]], [\n\n /hbbtv.+maple;(\\d+)/i\n ], [[MODEL, /^/, 'SmartTV'], [VENDOR, 'Samsung'], [TYPE, SMARTTV]], [\n\n /\\(dtv[\\);].+(aquos)/i // Sharp\n ], [MODEL, [VENDOR, 'Sharp'], [TYPE, SMARTTV]], [\n\n /android.+((sch-i[89]0\\d|shw-m380s|gt-p\\d{4}|gt-n\\d+|sgh-t8[56]9|nexus 10))/i,\n /((SM-T\\w+))/i\n ], [[VENDOR, 'Samsung'], MODEL, [TYPE, TABLET]], [ // Samsung\n /smart-tv.+(samsung)/i\n ], [VENDOR, [TYPE, SMARTTV], MODEL], [\n /((s[cgp]h-\\w+|gt-\\w+|galaxy\\snexus|sm-\\w[\\w\\d]+))/i,\n /(sam[sung]*)[\\s-]*(\\w+-?[\\w-]*)/i,\n /sec-((sgh\\w+))/i\n ], [[VENDOR, 'Samsung'], MODEL, [TYPE, MOBILE]], [\n\n /sie-(\\w*)/i // Siemens\n ], [MODEL, [VENDOR, 'Siemens'], [TYPE, MOBILE]], [\n\n /(maemo|nokia).*(n900|lumia\\s\\d+)/i, // Nokia\n /(nokia)[\\s_-]?([\\w-]*)/i\n ], [[VENDOR, 'Nokia'], MODEL, [TYPE, MOBILE]], [\n\n /android[x\\d\\.\\s;]+\\s([ab][1-7]\\-?[0178a]\\d\\d?)/i // Acer\n ], [MODEL, [VENDOR, 'Acer'], [TYPE, TABLET]], [\n\n /android.+([vl]k\\-?\\d{3})\\s+build/i // LG Tablet\n ], [MODEL, [VENDOR, 'LG'], [TYPE, TABLET]], [\n /android\\s3\\.[\\s\\w;-]{10}(lg?)-([06cv9]{3,4})/i // LG Tablet\n ], [[VENDOR, 'LG'], MODEL, [TYPE, TABLET]], [\n /(lg) netcast\\.tv/i // LG SmartTV\n ], [VENDOR, MODEL, [TYPE, SMARTTV]], [\n /(nexus\\s[45])/i, // LG\n /lg[e;\\s\\/-]+(\\w*)/i,\n /android.+lg(\\-?[\\d\\w]+)\\s+build/i\n ], [MODEL, [VENDOR, 'LG'], [TYPE, MOBILE]], [\n\n /(lenovo)\\s?(s(?:5000|6000)(?:[\\w-]+)|tab(?:[\\s\\w]+))/i // Lenovo tablets\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n /android.+(ideatab[a-z0-9\\-\\s]+)/i // Lenovo\n ], [MODEL, [VENDOR, 'Lenovo'], [TYPE, TABLET]], [\n /(lenovo)[_\\s-]?([\\w-]+)/i\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n\n /linux;.+((jolla));/i // Jolla\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n\n /((pebble))app\\/[\\d\\.]+\\s/i // Pebble\n ], [VENDOR, MODEL, [TYPE, WEARABLE]], [\n\n /android.+;\\s(oppo)\\s?([\\w\\s]+)\\sbuild/i // OPPO\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n\n /crkey/i // Google Chromecast\n ], [[MODEL, 'Chromecast'], [VENDOR, 'Google'], [TYPE, SMARTTV]], [\n\n /android.+;\\s(glass)\\s\\d/i // Google Glass\n ], [MODEL, [VENDOR, 'Google'], [TYPE, WEARABLE]], [\n\n /android.+;\\s(pixel c)[\\s)]/i // Google Pixel C\n ], [MODEL, [VENDOR, 'Google'], [TYPE, TABLET]], [\n\n /android.+;\\s(pixel( [23])?( xl)?)[\\s)]/i // Google Pixel\n ], [MODEL, [VENDOR, 'Google'], [TYPE, MOBILE]], [\n\n /android.+;\\s(\\w+)\\s+build\\/hm\\1/i, // Xiaomi Hongmi 'numeric' models\n /android.+(hm[\\s\\-_]*note?[\\s_]*(?:\\d\\w)?)\\s+build/i, // Xiaomi Hongmi\n /android.+(mi[\\s\\-_]*(?:a\\d|one|one[\\s_]plus|note lte)?[\\s_]*(?:\\d?\\w?)[\\s_]*(?:plus)?)\\s+build/i, \n // Xiaomi Mi\n /android.+(redmi[\\s\\-_]*(?:note)?(?:[\\s_]*[\\w\\s]+))\\s+build/i // Redmi Phones\n ], [[MODEL, /_/g, ' '], [VENDOR, 'Xiaomi'], [TYPE, MOBILE]], [\n /android.+(mi[\\s\\-_]*(?:pad)(?:[\\s_]*[\\w\\s]+))\\s+build/i // Mi Pad tablets\n ],[[MODEL, /_/g, ' '], [VENDOR, 'Xiaomi'], [TYPE, TABLET]], [\n /android.+;\\s(m[1-5]\\snote)\\sbuild/i // Meizu\n ], [MODEL, [VENDOR, 'Meizu'], [TYPE, MOBILE]], [\n /(mz)-([\\w-]{2,})/i\n ], [[VENDOR, 'Meizu'], MODEL, [TYPE, MOBILE]], [\n\n /android.+a000(1)\\s+build/i, // OnePlus\n /android.+oneplus\\s(a\\d{4})[\\s)]/i\n ], [MODEL, [VENDOR, 'OnePlus'], [TYPE, MOBILE]], [\n\n /android.+[;\\/]\\s*(RCT[\\d\\w]+)\\s+build/i // RCA Tablets\n ], [MODEL, [VENDOR, 'RCA'], [TYPE, TABLET]], [\n\n /android.+[;\\/\\s]+(Venue[\\d\\s]{2,7})\\s+build/i // Dell Venue Tablets\n ], [MODEL, [VENDOR, 'Dell'], [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*(Q[T|M][\\d\\w]+)\\s+build/i // Verizon Tablet\n ], [MODEL, [VENDOR, 'Verizon'], [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s+(Barnes[&\\s]+Noble\\s+|BN[RT])(V?.*)\\s+build/i // Barnes & Noble Tablet\n ], [[VENDOR, 'Barnes & Noble'], MODEL, [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s+(TM\\d{3}.*\\b)\\s+build/i // Barnes & Noble Tablet\n ], [MODEL, [VENDOR, 'NuVision'], [TYPE, TABLET]], [\n\n /android.+;\\s(k88)\\sbuild/i // ZTE K Series Tablet\n ], [MODEL, [VENDOR, 'ZTE'], [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*(gen\\d{3})\\s+build.*49h/i // Swiss GEN Mobile\n ], [MODEL, [VENDOR, 'Swiss'], [TYPE, MOBILE]], [\n\n /android.+[;\\/]\\s*(zur\\d{3})\\s+build/i // Swiss ZUR Tablet\n ], [MODEL, [VENDOR, 'Swiss'], [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*((Zeki)?TB.*\\b)\\s+build/i // Zeki Tablets\n ], [MODEL, [VENDOR, 'Zeki'], [TYPE, TABLET]], [\n\n /(android).+[;\\/]\\s+([YR]\\d{2})\\s+build/i,\n /android.+[;\\/]\\s+(Dragon[\\-\\s]+Touch\\s+|DT)(\\w{5})\\sbuild/i // Dragon Touch Tablet\n ], [[VENDOR, 'Dragon Touch'], MODEL, [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*(NS-?\\w{0,9})\\sbuild/i // Insignia Tablets\n ], [MODEL, [VENDOR, 'Insignia'], [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*((NX|Next)-?\\w{0,9})\\s+build/i // NextBook Tablets\n ], [MODEL, [VENDOR, 'NextBook'], [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*(Xtreme\\_)?(V(1[045]|2[015]|30|40|60|7[05]|90))\\s+build/i\n ], [[VENDOR, 'Voice'], MODEL, [TYPE, MOBILE]], [ // Voice Xtreme Phones\n\n /android.+[;\\/]\\s*(LVTEL\\-)?(V1[12])\\s+build/i // LvTel Phones\n ], [[VENDOR, 'LvTel'], MODEL, [TYPE, MOBILE]], [\n\n /android.+;\\s(PH-1)\\s/i\n ], [MODEL, [VENDOR, 'Essential'], [TYPE, MOBILE]], [ // Essential PH-1\n\n /android.+[;\\/]\\s*(V(100MD|700NA|7011|917G).*\\b)\\s+build/i // Envizen Tablets\n ], [MODEL, [VENDOR, 'Envizen'], [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*(Le[\\s\\-]+Pan)[\\s\\-]+(\\w{1,9})\\s+build/i // Le Pan Tablets\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*(Trio[\\s\\-]*.*)\\s+build/i // MachSpeed Tablets\n ], [MODEL, [VENDOR, 'MachSpeed'], [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*(Trinity)[\\-\\s]*(T\\d{3})\\s+build/i // Trinity Tablets\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*TU_(1491)\\s+build/i // Rotor Tablets\n ], [MODEL, [VENDOR, 'Rotor'], [TYPE, TABLET]], [\n\n /android.+(KS(.+))\\s+build/i // Amazon Kindle Tablets\n ], [MODEL, [VENDOR, 'Amazon'], [TYPE, TABLET]], [\n\n /android.+(Gigaset)[\\s\\-]+(Q\\w{1,9})\\s+build/i // Gigaset Tablets\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n /\\s(tablet|tab)[;\\/]/i, // Unidentifiable Tablet\n /\\s(mobile)(?:[;\\/]|\\ssafari)/i // Unidentifiable Mobile\n ], [[TYPE, util.lowerize], VENDOR, MODEL], [\n\n /[\\s\\/\\(](smart-?tv)[;\\)]/i // SmartTV\n ], [[TYPE, SMARTTV]], [\n\n /(android[\\w\\.\\s\\-]{0,9});.+build/i // Generic Android Device\n ], [MODEL, [VENDOR, 'Generic']]\n ],\n\n engine : [[\n\n /windows.+\\sedge\\/([\\w\\.]+)/i // EdgeHTML\n ], [VERSION, [NAME, 'EdgeHTML']], [\n\n /webkit\\/537\\.36.+chrome\\/(?!27)([\\w\\.]+)/i // Blink\n ], [VERSION, [NAME, 'Blink']], [\n\n /(presto)\\/([\\w\\.]+)/i, // Presto\n /(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\\/([\\w\\.]+)/i, \n // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m/Goanna\n /(khtml|tasman|links)[\\/\\s]\\(?([\\w\\.]+)/i, // KHTML/Tasman/Links\n /(icab)[\\/\\s]([23]\\.[\\d\\.]+)/i // iCab\n ], [NAME, VERSION], [\n\n /rv\\:([\\w\\.]{1,9}).+(gecko)/i // Gecko\n ], [VERSION, NAME]\n ],\n\n os : [[\n\n // Windows based\n /microsoft\\s(windows)\\s(vista|xp)/i // Windows (iTunes)\n ], [NAME, VERSION], [\n /(windows)\\snt\\s6\\.2;\\s(arm)/i, // Windows RT\n /(windows\\sphone(?:\\sos)*)[\\s\\/]?([\\d\\.\\s\\w]*)/i, // Windows Phone\n /(windows\\smobile|windows)[\\s\\/]?([ntce\\d\\.\\s]+\\w)/i\n ], [NAME, [VERSION, mapper.str, maps.os.windows.version]], [\n /(win(?=3|9|n)|win\\s9x\\s)([nt\\d\\.]+)/i\n ], [[NAME, 'Windows'], [VERSION, mapper.str, maps.os.windows.version]], [\n\n // Mobile/Embedded OS\n /\\((bb)(10);/i // BlackBerry 10\n ], [[NAME, 'BlackBerry'], VERSION], [\n /(blackberry)\\w*\\/?([\\w\\.]*)/i, // Blackberry\n /(tizen|kaios)[\\/\\s]([\\w\\.]+)/i, // Tizen/KaiOS\n /(android|webos|palm\\sos|qnx|bada|rim\\stablet\\sos|meego|sailfish|contiki)[\\/\\s-]?([\\w\\.]*)/i\n // Android/WebOS/Palm/QNX/Bada/RIM/MeeGo/Contiki/Sailfish OS\n ], [NAME, VERSION], [\n /(symbian\\s?os|symbos|s60(?=;))[\\/\\s-]?([\\w\\.]*)/i // Symbian\n ], [[NAME, 'Symbian'], VERSION], [\n /\\((series40);/i // Series 40\n ], [NAME], [\n /mozilla.+\\(mobile;.+gecko.+firefox/i // Firefox OS\n ], [[NAME, 'Firefox OS'], VERSION], [\n\n // Console\n /(nintendo|playstation)\\s([wids34portablevu]+)/i, // Nintendo/Playstation\n\n // GNU/Linux based\n /(mint)[\\/\\s\\(]?(\\w*)/i, // Mint\n /(mageia|vectorlinux)[;\\s]/i, // Mageia/VectorLinux\n /(joli|[kxln]?ubuntu|debian|suse|opensuse|gentoo|(?=\\s)arch|slackware|fedora|mandriva|centos|pclinuxos|redhat|zenwalk|linpus)[\\/\\s-]?(?!chrom)([\\w\\.-]*)/i,\n // Joli/Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware\n // Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus\n /(hurd|linux)\\s?([\\w\\.]*)/i, // Hurd/Linux\n /(gnu)\\s?([\\w\\.]*)/i // GNU\n ], [NAME, VERSION], [\n\n /(cros)\\s[\\w]+\\s([\\w\\.]+\\w)/i // Chromium OS\n ], [[NAME, 'Chromium OS'], VERSION],[\n\n // Solaris\n /(sunos)\\s?([\\w\\.\\d]*)/i // Solaris\n ], [[NAME, 'Solaris'], VERSION], [\n\n // BSD based\n /\\s([frentopc-]{0,4}bsd|dragonfly)\\s?([\\w\\.]*)/i // FreeBSD/NetBSD/OpenBSD/PC-BSD/DragonFly\n ], [NAME, VERSION],[\n\n /(haiku)\\s(\\w+)/i // Haiku\n ], [NAME, VERSION],[\n\n /cfnetwork\\/.+darwin/i,\n /ip[honead]{2,4}(?:.*os\\s([\\w]+)\\slike\\smac|;\\sopera)/i // iOS\n ], [[VERSION, /_/g, '.'], [NAME, 'iOS']], [\n\n /(mac\\sos\\sx)\\s?([\\w\\s\\.]*)/i,\n /(macintosh|mac(?=_powerpc)\\s)/i // Mac OS\n ], [[NAME, 'Mac OS'], [VERSION, /_/g, '.']], [\n\n // Other\n /((?:open)?solaris)[\\/\\s-]?([\\w\\.]*)/i, // Solaris\n /(aix)\\s((\\d)(?=\\.|\\)|\\s)[\\w\\.])*/i, // AIX\n /(plan\\s9|minix|beos|os\\/2|amigaos|morphos|risc\\sos|openvms|fuchsia)/i,\n // Plan9/Minix/BeOS/OS2/AmigaOS/MorphOS/RISCOS/OpenVMS/Fuchsia\n /(unix)\\s?([\\w\\.]*)/i // UNIX\n ], [NAME, VERSION]\n ]\n };\n\n\n /////////////////\n // Constructor\n ////////////////\n var UAParser = function (uastring, extensions) {\n\n if (typeof uastring === 'object') {\n extensions = uastring;\n uastring = undefined;\n }\n\n if (!(this instanceof UAParser)) {\n return new UAParser(uastring, extensions).getResult();\n }\n\n var ua = uastring || ((window && window.navigator && window.navigator.userAgent) ? window.navigator.userAgent : EMPTY);\n var rgxmap = extensions ? util.extend(regexes, extensions) : regexes;\n\n this.getBrowser = function () {\n var browser = { name: undefined, version: undefined };\n mapper.rgx.call(browser, ua, rgxmap.browser);\n browser.major = util.major(browser.version); // deprecated\n return browser;\n };\n this.getCPU = function () {\n var cpu = { architecture: undefined };\n mapper.rgx.call(cpu, ua, rgxmap.cpu);\n return cpu;\n };\n this.getDevice = function () {\n var device = { vendor: undefined, model: undefined, type: undefined };\n mapper.rgx.call(device, ua, rgxmap.device);\n return device;\n };\n this.getEngine = function () {\n var engine = { name: undefined, version: undefined };\n mapper.rgx.call(engine, ua, rgxmap.engine);\n return engine;\n };\n this.getOS = function () {\n var os = { name: undefined, version: undefined };\n mapper.rgx.call(os, ua, rgxmap.os);\n return os;\n };\n this.getResult = function () {\n return {\n ua : this.getUA(),\n browser : this.getBrowser(),\n engine : this.getEngine(),\n os : this.getOS(),\n device : this.getDevice(),\n cpu : this.getCPU()\n };\n };\n this.getUA = function () {\n return ua;\n };\n this.setUA = function (uastring) {\n ua = uastring;\n return this;\n };\n return this;\n };\n\n UAParser.VERSION = LIBVERSION;\n UAParser.BROWSER = {\n NAME : NAME,\n MAJOR : MAJOR, // deprecated\n VERSION : VERSION\n };\n UAParser.CPU = {\n ARCHITECTURE : ARCHITECTURE\n };\n UAParser.DEVICE = {\n MODEL : MODEL,\n VENDOR : VENDOR,\n TYPE : TYPE,\n CONSOLE : CONSOLE,\n MOBILE : MOBILE,\n SMARTTV : SMARTTV,\n TABLET : TABLET,\n WEARABLE: WEARABLE,\n EMBEDDED: EMBEDDED\n };\n UAParser.ENGINE = {\n NAME : NAME,\n VERSION : VERSION\n };\n UAParser.OS = {\n NAME : NAME,\n VERSION : VERSION\n };\n\n ///////////\n // Export\n //////////\n\n\n // check js environment\n if (typeof(exports) !== UNDEF_TYPE) {\n // nodejs env\n if (typeof module !== UNDEF_TYPE && module.exports) {\n exports = module.exports = UAParser;\n }\n exports.UAParser = UAParser;\n } else {\n // requirejs env (optional)\n if (typeof(define) === 'function' && define.amd) {\n define(function () {\n return UAParser;\n });\n } else if (window) {\n // browser env\n window.UAParser = UAParser;\n }\n }\n\n // jQuery/Zepto specific (optional)\n // Note:\n // In AMD env the global scope should be kept clean, but jQuery is an exception.\n // jQuery always exports to global scope, unless jQuery.noConflict(true) is used,\n // and we should catch that.\n var $ = window && (window.jQuery || window.Zepto);\n if ($ && !$.ua) {\n var parser = new UAParser();\n $.ua = parser.getResult();\n $.ua.get = function () {\n return parser.getUA();\n };\n $.ua.set = function (uastring) {\n parser.setUA(uastring);\n var result = parser.getResult();\n for (var prop in result) {\n $.ua[prop] = result[prop];\n }\n };\n }\n\n})(typeof window === 'object' ? window : this);\n","export default function compareVersions(v1, v2) {\n // validate input and split into segments\n const n1 = validateAndParse(v1);\n const n2 = validateAndParse(v2);\n\n // pop off the patch\n const p1 = n1.pop();\n const p2 = n2.pop();\n\n // validate numbers\n const r = compareSegments(n1, n2);\n if (r !== 0) return r;\n\n // validate pre-release\n if (p1 && p2) {\n return compareSegments(p1.split('.'), p2.split('.'));\n } else if (p1 || p2) {\n return p1 ? -1 : 1;\n }\n\n return 0;\n}\n\nexport const validate = (v) =>\n typeof v === 'string' && /^[v\\d]/.test(v) && semver.test(v);\n\nexport const compare = (v1, v2, operator) => {\n // validate input operator\n assertValidOperator(operator);\n\n // since result of compareVersions can only be -1 or 0 or 1\n // a simple map can be used to replace switch\n const res = compareVersions(v1, v2);\n\n return operatorResMap[operator].includes(res);\n};\n\nexport const satisfies = (v, r) => {\n // if no range operator then \"=\"\n const m = r.match(/^([<>=~^]+)/);\n const op = m ? m[1] : '=';\n\n // if gt/lt/eq then operator compare\n if (op !== '^' && op !== '~') return compare(v, r, op);\n\n // else range of either \"~\" or \"^\" is assumed\n const [v1, v2, v3] = validateAndParse(v);\n const [r1, r2, r3] = validateAndParse(r);\n if (compareStrings(v1, r1) !== 0) return false;\n if (op === '^') {\n return compareSegments([v2, v3], [r2, r3]) >= 0;\n }\n if (compareStrings(v2, r2) !== 0) return false;\n return compareStrings(v3, r3) >= 0;\n};\n\n// export CJS style for parity\ncompareVersions.validate = validate;\ncompareVersions.compare = compare;\ncompareVersions.satisfies = satisfies;\n\nconst semver =\n /^[v^~<>=]*?(\\d+)(?:\\.([x*]|\\d+)(?:\\.([x*]|\\d+)(?:\\.([x*]|\\d+))?(?:-([\\da-z\\-]+(?:\\.[\\da-z\\-]+)*))?(?:\\+[\\da-z\\-]+(?:\\.[\\da-z\\-]+)*)?)?)?$/i;\n\nconst validateAndParse = (v) => {\n if (typeof v !== 'string') {\n throw new TypeError('Invalid argument expected string');\n }\n const match = v.match(semver);\n if (!match) {\n throw new Error(`Invalid argument not valid semver ('${v}' received)`);\n }\n match.shift();\n return match;\n};\n\nconst isWildcard = (s) => s === '*' || s === 'x' || s === 'X';\n\nconst tryParse = (v) => {\n const n = parseInt(v, 10);\n return isNaN(n) ? v : n;\n};\n\nconst forceType = (a, b) =>\n typeof a !== typeof b ? [String(a), String(b)] : [a, b];\n\nconst compareStrings = (a, b) => {\n if (isWildcard(a) || isWildcard(b)) return 0;\n const [ap, bp] = forceType(tryParse(a), tryParse(b));\n if (ap > bp) return 1;\n if (ap < bp) return -1;\n return 0;\n};\n\nconst compareSegments = (a, b) => {\n for (let i = 0; i < Math.max(a.length, b.length); i++) {\n const r = compareStrings(a[i] || 0, b[i] || 0);\n if (r !== 0) return r;\n }\n return 0;\n};\n\nconst operatorResMap = {\n '>': [1],\n '>=': [0, 1],\n '=': [0],\n '<=': [-1, 0],\n '<': [-1],\n};\n\nconst allowedOperators = Object.keys(operatorResMap);\n\nconst assertValidOperator = (op) => {\n if (typeof op !== 'string') {\n throw new TypeError(\n `Invalid operator type, expected string but got ${typeof op}`\n );\n }\n if (allowedOperators.indexOf(op) === -1) {\n throw new Error(\n `Invalid operator, expected one of ${allowedOperators.join('|')}`\n );\n }\n};\n","import React, { createContext, useState, useEffect, useCallback, useContext } from 'react';\nimport PropTypes from 'prop-types';\nimport { compare } from 'compare-versions';\n\n// A type of promise-like that resolves synchronously and supports only one observer\n\nconst _iteratorSymbol = /*#__PURE__*/ typeof Symbol !== \"undefined\" ? (Symbol.iterator || (Symbol.iterator = Symbol(\"Symbol.iterator\"))) : \"@@iterator\";\n\nconst _asyncIteratorSymbol = /*#__PURE__*/ typeof Symbol !== \"undefined\" ? (Symbol.asyncIterator || (Symbol.asyncIterator = Symbol(\"Symbol.asyncIterator\"))) : \"@@asyncIterator\";\n\n// Asynchronously call a function and send errors to recovery continuation\nfunction _catch(body, recover) {\n\ttry {\n\t\tvar result = body();\n\t} catch(e) {\n\t\treturn recover(e);\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(void 0, recover);\n\t}\n\treturn result;\n}\n\nvar CacheBusterContext = createContext({\n checkCacheStatus: function checkCacheStatus() {}\n});\n\nfunction CacheBuster(_ref) {\n var _ref$children = _ref.children,\n children = _ref$children === void 0 ? null : _ref$children,\n currentVersion = _ref.currentVersion,\n _ref$isEnabled = _ref.isEnabled,\n isEnabled = _ref$isEnabled === void 0 ? false : _ref$isEnabled,\n _ref$isVerboseMode = _ref.isVerboseMode,\n isVerboseMode = _ref$isVerboseMode === void 0 ? false : _ref$isVerboseMode,\n _ref$loadingComponent = _ref.loadingComponent,\n loadingComponent = _ref$loadingComponent === void 0 ? null : _ref$loadingComponent,\n _ref$metaFileDirector = _ref.metaFileDirectory,\n metaFileDirectory = _ref$metaFileDirector === void 0 ? null : _ref$metaFileDirector,\n _ref$reloadOnDowngrad = _ref.reloadOnDowngrade,\n reloadOnDowngrade = _ref$reloadOnDowngrad === void 0 ? false : _ref$reloadOnDowngrad,\n onCacheClear = _ref.onCacheClear;\n\n var _useState = useState({\n loading: true,\n isLatestVersion: false\n }),\n cacheStatus = _useState[0],\n setCacheStatus = _useState[1];\n\n var log = function log(message, isError) {\n isVerboseMode && (isError ? console.error(message) : console.log(message));\n };\n\n useEffect(function () {\n isEnabled ? checkCacheStatus() : log('React Cache Buster is disabled.');\n }, []);\n\n var getMetaFileDirectory = function getMetaFileDirectory() {\n return !metaFileDirectory || metaFileDirectory === '.' ? '' : metaFileDirectory;\n };\n\n var checkCacheStatus = useCallback(function () {\n try {\n var _temp2 = _catch(function () {\n return Promise.resolve(fetch(getMetaFileDirectory() + \"/meta.json\")).then(function (res) {\n return Promise.resolve(res.json()).then(function (_ref2) {\n var metaVersion = _ref2.version;\n var shouldForceRefresh = isThereNewVersion(metaVersion, currentVersion);\n\n if (shouldForceRefresh) {\n log(\"There is a new version (v\" + metaVersion + \"). Should force refresh.\");\n setCacheStatus({\n loading: false,\n isLatestVersion: false\n });\n } else {\n log('There is no new version. No cache refresh needed.');\n setCacheStatus({\n loading: false,\n isLatestVersion: true\n });\n }\n });\n });\n }, function (error) {\n log('An error occurred while checking cache status.', true);\n log(error, true);\n !isVerboseMode && setCacheStatus({\n loading: false,\n isLatestVersion: true\n });\n });\n\n return Promise.resolve(_temp2 && _temp2.then ? _temp2.then(function () {}) : void 0);\n } catch (e) {\n return Promise.reject(e);\n }\n }, [currentVersion, isVerboseMode, metaFileDirectory]);\n\n var isThereNewVersion = function isThereNewVersion(metaVersion, currentVersion) {\n if (reloadOnDowngrade) {\n return !compare(metaVersion, currentVersion, '=');\n }\n\n return compare(metaVersion, currentVersion, '>');\n };\n\n var refreshCacheAndReload = function refreshCacheAndReload() {\n try {\n return Promise.resolve(_catch(function () {\n var _temp3 = function () {\n var _window;\n\n if ((_window = window) !== null && _window !== void 0 && _window.caches) {\n var _window2 = window,\n caches = _window2.caches;\n return Promise.resolve(caches.keys()).then(function (cacheNames) {\n var cacheDeletionPromises = cacheNames.map(function (n) {\n return caches[\"delete\"](n);\n });\n return Promise.resolve(Promise.all(cacheDeletionPromises)).then(function () {\n log('The cache has been deleted.');\n window.location.reload(true);\n });\n });\n }\n }();\n\n if (_temp3 && _temp3.then) return _temp3.then(function () {});\n }, function (error) {\n log('An error occurred while deleting the cache.', true);\n log(error, true);\n }));\n } catch (e) {\n return Promise.reject(e);\n }\n };\n\n if (!isEnabled) {\n return children;\n } else {\n if (cacheStatus.loading) {\n return loadingComponent;\n }\n\n if (!cacheStatus.loading && !cacheStatus.isLatestVersion) {\n if (onCacheClear) {\n onCacheClear(refreshCacheAndReload);\n } else {\n refreshCacheAndReload();\n }\n\n return null;\n }\n\n return React.createElement(CacheBusterContext.Provider, {\n value: {\n checkCacheStatus: checkCacheStatus\n }\n }, children);\n }\n}\n\nCacheBuster.propTypes = {\n children: PropTypes.element.isRequired,\n currentVersion: PropTypes.string.isRequired,\n isEnabled: PropTypes.bool.isRequired,\n isVerboseMode: PropTypes.bool,\n loadingComponent: PropTypes.element,\n metaFileDirectory: PropTypes.string,\n onCacheClear: PropTypes.func\n};\n\nvar useCacheBuster = function useCacheBuster() {\n var context = useContext(CacheBusterContext);\n\n if (context === undefined || context === null) {\n throw new Error('useCacheBuster must be used within a CacheBuster component.');\n }\n\n return context;\n};\n\nexport default CacheBuster;\nexport { useCacheBuster };\n"],"sourceRoot":""}