{"version":3,"file":"mass-tools.umd.min.js","sources":["../node_modules/is-any-array/lib/index.js","../node_modules/ml-spectra-processing/lib/reim/reimAbsolute.js","../node_modules/ml-spectra-processing/lib/x/getOutputArray.js","../node_modules/ml-spectra-processing/lib/x/xAbsolute.js","../node_modules/ml-spectra-processing/lib/x/xMedian.js","../node_modules/ml-spectra-processing/lib/x/xCheck.js","../node_modules/ml-spectra-processing/lib/x/xFindClosestIndex.js","../node_modules/ml-spectra-processing/lib/x/xGetFromToIndex.js","../node_modules/ml-spectra-processing/lib/x/xAdd.js","../node_modules/ml-spectra-processing/lib/x/xMultiply.js","../node_modules/ml-spectra-processing/lib/x/xDotProduct.js","../node_modules/ml-spectra-processing/lib/x/xCrossCorrelation.js","../node_modules/ml-spectra-processing/lib/x/xBoxPlot.js","../node_modules/ml-spectra-processing/lib/x/xBoxPlotWithOutliers.js","../node_modules/ml-spectra-processing/lib/x/xCheckLengths.js","../node_modules/ml-spectra-processing/lib/x/xCorrelation.js","../node_modules/ml-matrix/matrix.js","../node_modules/ml-matrix/matrix.mjs","../node_modules/ml-spectra-processing/lib/x/xCostMatrix.js","../node_modules/ml-spectra-processing/lib/x/xCumulative.js","../node_modules/ml-spectra-processing/lib/x/xMean.js","../node_modules/ml-spectra-processing/lib/x/xVariance.js","../node_modules/ml-spectra-processing/lib/x/xStandardDeviation.js","../node_modules/ml-spectra-processing/lib/x/xEnsureFloat64.js","../node_modules/ml-spectra-processing/lib/x/xGetTargetIndex.js","../node_modules/fft.js/lib/fft.js","../node_modules/ml-spectra-processing/lib/utils/createArray.js","../node_modules/ml-spectra-processing/lib/utils/createFromToArray.js","../node_modules/ml-xsadd/lib-esm/XSadd.js","../node_modules/ml-spectra-processing/lib/utils/createRandomArray.js","../node_modules/ml-spectra-processing/lib/utils/isPowerOfTwo.js","../node_modules/ml-spectra-processing/lib/utils/nextPowerOfTwo.js","../node_modules/ml-spectra-processing/lib/utils/recursiveResolve.js","../node_modules/ml-spectra-processing/lib/utils/recursiveUntypeArrays.js","../node_modules/ml-spectra-processing/lib/x/xSubtract.js","../node_modules/ml-spectra-processing/lib/utils/calculateAdaptiveWeights.js","../node_modules/ml-spectra-processing/lib/utils/recursiveRemoveEmptyAndNull.js","../node_modules/ml-spectra-processing/lib/x/xHilbertTransform.js","../node_modules/ml-spectra-processing/lib/x/xMaxValue.js","../node_modules/ml-spectra-processing/lib/x/xMinValue.js","../node_modules/ml-spectra-processing/lib/x/xHistogram.js","../node_modules/ml-spectra-processing/lib/x/xIsEquallySpaced.js","../node_modules/ml-spectra-processing/lib/x/xIsMonotonic.js","../node_modules/ml-spectra-processing/lib/x/xMassCenterVectorSimilarity.js","../node_modules/ml-spectra-processing/lib/x/xMedianAbsoluteDeviation.js","../node_modules/ml-spectra-processing/lib/x/xMinMaxValues.js","../node_modules/ml-spectra-processing/lib/x/utils/erfcinv.js","../node_modules/ml-spectra-processing/lib/x/utils/simpleNormInv.js","../node_modules/ml-spectra-processing/lib/x/xNoiseSanPlot.js","../node_modules/ml-spectra-processing/lib/x/xNoiseStandardDeviation.js","../node_modules/ml-spectra-processing/lib/x/xNorm.js","../node_modules/ml-spectra-processing/lib/x/xSum.js","../node_modules/ml-spectra-processing/lib/x/xNormed.js","../node_modules/ml-spectra-processing/lib/x/xPadding.js","../node_modules/ml-spectra-processing/lib/x/xRolling.js","../node_modules/ml-spectra-processing/lib/x/xRollingAverage.js","../node_modules/ml-spectra-processing/lib/x/xRotate.js","../node_modules/ml-spectra-processing/lib/x/xSequentialFillFromStep.js","../node_modules/ml-spectra-processing/lib/x/xSortDescending.js","../node_modules/ml-spectra-processing/lib/matrix/matrixCreateEmpty.js","../node_modules/ml-spectra-processing/lib/matrix/matrixCheck.js","../node_modules/ml-spectra-processing/lib/matrix/matrixCholeskySolver.js","../node_modules/ml-spectra-processing/lib/matrix/matrixClone.js","../node_modules/ml-spectra-processing/lib/matrix/matrixCuthillMckee.js","../node_modules/ml-spectra-processing/lib/matrix/matrixCheckRanges.js","../node_modules/ml-spectra-processing/lib/matrix/matrixMinMaxAbsoluteZ.js","../node_modules/ml-spectra-processing/lib/matrix/matrixMinMaxZ.js","../node_modules/ml-spectra-processing/lib/matrix/matrixMaxAbsoluteZ.js","../node_modules/ml-spectra-processing/lib/matrix/matrixToArray.js","../node_modules/ml-spectra-processing/lib/utils/addWeights.js","../node_modules/ml-spectra-processing/lib/x/xWhittakerSmoother.js","../node_modules/ml-spectra-processing/lib/utils/createSystemMatrix.js","../node_modules/ml-spectra-processing/lib/reim/reimPhaseCorrection.js","../node_modules/ml-spectra-processing/lib/reim/reimAutoPhaseCorrection.js","../node_modules/ml-spectra-processing/lib/reim/zeroShift.js","../node_modules/ml-spectra-processing/lib/reim/reimZeroFilling.js","../node_modules/ml-spectra-processing/lib/xy/xyCheck.js","../node_modules/ml-spectra-processing/lib/xy/xyMaxYPoint.js","../node_modules/ml-spectra-processing/lib/xy/xyCumulativeDistributionStatistics.js","../node_modules/ml-spectra-processing/lib/zones/zonesNormalize.js","../node_modules/ml-spectra-processing/lib/zones/zonesWithPoints.js","../node_modules/ml-spectra-processing/lib/xy/utils/integral.js","../node_modules/ml-spectra-processing/lib/xy/utils/equallySpacedSmooth.js","../node_modules/ml-spectra-processing/lib/xy/xyEquallySpaced.js","../node_modules/ml-spectra-processing/lib/xy/utils/equallySpacedSlot.js","../node_modules/ml-spectra-processing/lib/xy/xyJoinX.js","../node_modules/ml-spectra-processing/lib/xy/xyReduce.js","../node_modules/ml-spectra-processing/lib/xy/xySortX.js","../node_modules/ml-spectra-processing/lib/xy/xyUniqueX.js","../node_modules/ml-spectra-processing/lib/xyArray/utils/getSlots.js","../node_modules/ml-spectra-processing/lib/xyArray/xyArrayWeightedMerge.js","../node_modules/ml-spectra-processing/lib/xyObject/xyObjectCheck.js","../node_modules/ml-spectra-processing/lib/xyObject/xyObjectMaxXPoint.js","../node_modules/ml-spectra-processing/lib/xyObject/xyObjectMinXPoint.js","../node_modules/ml-spectra-processing/lib/utils/createStepArray.js","../node_modules/ml-spectra-processing/lib/utils/getCombinations.js","../node_modules/ml-spectra-processing/lib/utils/getCombinationsIterator.js","../node_modules/ml-spectra-processing/lib/utils/getRescaler.js","../node_modules/ml-spectra-processing/lib/matrix/matrixAbsoluteMedian.js","../node_modules/ml-spectra-processing/lib/matrix/matrixApplyNumericalEncoding.js","../node_modules/ml-spectra-processing/lib/matrix/matrixAutoCorrelation.js","../node_modules/ml-spectra-processing/lib/matrix/matrixBoxPlot.js","../node_modules/ml-spectra-processing/lib/matrix/matrixCenterZMean.js","../node_modules/ml-spectra-processing/lib/matrix/matrixColumnsCorrelation.js","../node_modules/ml-spectra-processing/lib/matrix/matrixGetSubMatrix.js","../node_modules/ml-spectra-processing/lib/matrix/matrixHilbertTransform.js","../node_modules/ml-spectra-processing/lib/matrix/matrixHistogram.js","../node_modules/ml-spectra-processing/lib/matrix/matrixMedian.js","../node_modules/ml-spectra-processing/lib/matrix/matrixNoiseStandardDeviation.js","../node_modules/ml-spectra-processing/lib/matrix/matrixNumericalDecoding.js","../node_modules/ml-spectra-processing/lib/matrix/matrixNumericalEncoding.js","../node_modules/ml-spectra-processing/lib/matrix/matrixPQN.js","../node_modules/ml-spectra-processing/lib/matrix/matrixSetSubMatrix.js","../node_modules/ml-spectra-processing/lib/matrix/matrixTranspose.js","../node_modules/ml-spectra-processing/lib/matrix/matrixZPivotRescale.js","../node_modules/ml-spectra-processing/lib/matrix/matrixZRescale.js","../node_modules/ml-spectra-processing/lib/matrix/matrixZRescalePerColumn.js","../node_modules/ml-spectra-processing/lib/reimArray/reimArrayFFT.js","../node_modules/ml-spectra-processing/lib/reim/reimFFT.js","../node_modules/ml-spectra-processing/lib/reimMatrix/reimMatrixFFT.js","../node_modules/ml-spectra-processing/lib/reimMatrix/reimMatrixFFTByColumns.js","../node_modules/ml-spectra-processing/lib/reimMatrix/reimMatrixPhaseCorrection.js","../node_modules/ml-spectra-processing/lib/utils/stringify.js","../node_modules/ml-spectra-processing/lib/x/xAbsoluteMedian.js","../node_modules/ml-spectra-processing/lib/x/xAbsoluteSum.js","../node_modules/ml-spectra-processing/lib/x/xApplyFunctionStr.js","../node_modules/ml-spectra-processing/lib/x/xAutoCorrelation.js","../node_modules/ml-spectra-processing/lib/x/xBinning.js","../node_modules/ml-spectra-processing/lib/x/xDistributionStats.js","../node_modules/ml-spectra-processing/lib/x/xDivide.js","../node_modules/ml-spectra-processing/lib/x/xMaxAbsoluteValue.js","../node_modules/ml-spectra-processing/lib/x/xMaxIndex.js","../node_modules/ml-spectra-processing/lib/x/xMeanAbsoluteError.js","../node_modules/ml-spectra-processing/lib/x/xMeanSquaredError.js","../node_modules/ml-spectra-processing/lib/x/xMeanWeighted.js","../node_modules/ml-spectra-processing/lib/x/xMinIndex.js","../node_modules/ml-spectra-processing/lib/x/xMinMaxDelta.js","../node_modules/ml-spectra-processing/lib/x/xMode.js","../node_modules/ml-spectra-processing/lib/x/xParetoNormalization.js","../node_modules/ml-spectra-processing/lib/x/xRemoveOutliersIQR.js","../node_modules/ml-spectra-processing/lib/x/xRescale.js","../node_modules/ml-spectra-processing/lib/x/xRobustDistributionStats.js","../node_modules/ml-spectra-processing/lib/x/xRollingMax.js","../node_modules/ml-spectra-processing/lib/x/xRollingMedian.js","../node_modules/ml-spectra-processing/lib/x/xRollingMin.js","../node_modules/ml-spectra-processing/lib/x/xSampling.js","../node_modules/ml-spectra-processing/lib/x/xSequentialFillFromTo.js","../node_modules/ml-spectra-processing/lib/x/xSortAscending.js","../node_modules/ml-spectra-processing/lib/x/xUniqueSorted.js","../node_modules/ml-spectra-processing/lib/xreim/xreimSortX.js","../node_modules/ml-spectra-processing/lib/xreim/xreimZeroFilling.js","../node_modules/ml-spectra-processing/lib/xy2/xy2ToXY.js","../node_modules/ml-spectra-processing/lib/xy/xyAlign.js","../node_modules/ml-spectra-processing/lib/xyArray/xyArrayAlign.js","../node_modules/ml-spectra-processing/lib/xyArray/xyArrayAlignToFirst.js","../node_modules/ml-spectra-processing/lib/xyArray/utils/getSlotsToFirst.js","../node_modules/ml-spectra-processing/lib/xyArray/xyArrayMerge.js","../node_modules/ml-spectra-processing/lib/xy/xyCovariance.js","../node_modules/ml-spectra-processing/lib/xy/xyEnsureFloat64.js","../node_modules/ml-spectra-processing/lib/xy/xyEnsureGrowingX.js","../node_modules/ml-spectra-processing/lib/xy/xyExtract.js","../node_modules/ml-spectra-processing/lib/xy/xyFilter.js","../node_modules/ml-spectra-processing/lib/xy/xyFilterMinYValue.js","../node_modules/ml-spectra-processing/lib/xy/xyFilterTopYValues.js","../node_modules/ml-spectra-processing/lib/xy/xyFilterX.js","../node_modules/ml-spectra-processing/lib/xy/xyFilterXPositive.js","../node_modules/ml-spectra-processing/lib/xy/xyFindClosestPoint.js","../node_modules/ml-spectra-processing/lib/xy/xyGetNMaxY.js","../node_modules/ml-spectra-processing/lib/xy/xyGrowingX.js","../node_modules/ml-spectra-processing/lib/xy/xyIntegral.js","../node_modules/ml-spectra-processing/lib/xy/xyIntegration.js","../node_modules/ml-spectra-processing/lib/xy/xyInterpolateLinear.js","../node_modules/ml-spectra-processing/lib/xy/xyMassCenter.js","../node_modules/ml-spectra-processing/lib/xy/xyMassCenterVector.js","../node_modules/ml-spectra-processing/lib/xy/xyMaxClosestYPoint.js","../node_modules/ml-spectra-processing/lib/xy/xyMaxMerge.js","../node_modules/ml-spectra-processing/lib/xy/xyMaxY.js","../node_modules/ml-spectra-processing/lib/xy/xyMaximaY.js","../node_modules/ml-spectra-processing/lib/xy/xyMedian.js","../node_modules/ml-spectra-processing/lib/xy/xyMedianY.js","../node_modules/ml-spectra-processing/lib/xy/xyMedianYAtXs.js","../node_modules/ml-spectra-processing/lib/xy/xyMergeByCentroids.js","../node_modules/ml-spectra-processing/lib/xy/xyMinClosestYPoint.js","../node_modules/ml-spectra-processing/lib/xy/xyMinYPoint.js","../node_modules/ml-spectra-processing/lib/xy/xyMinimaY.js","../node_modules/ml-spectra-processing/lib/xyObject/xyObjectBestPoints.js","../node_modules/ml-spectra-processing/lib/xyObject/xyObjectJoinX.js","../node_modules/ml-spectra-processing/lib/xyObject/xyObjectMaxYPoint.js","../node_modules/ml-spectra-processing/lib/xyObject/xyObjectMinMaxValues.js","../node_modules/ml-spectra-processing/lib/xyObject/xyObjectMinYPoint.js","../node_modules/ml-spectra-processing/lib/xyObject/xyObjectNormedY.js","../node_modules/ml-spectra-processing/lib/xyObject/xyObjectSlotX.js","../node_modules/ml-spectra-processing/lib/xyObject/xyObjectSortX.js","../node_modules/ml-spectra-processing/lib/xyObject/xyObjectSumY.js","../node_modules/ml-spectra-processing/lib/xyObject/xyObjectToXY.js","../node_modules/ml-spectra-processing/lib/xy/xyPeakInfo.js","../node_modules/ml-spectra-processing/lib/xy/xyRealMaxYPoint.js","../node_modules/ml-spectra-processing/lib/xy/xyRealMinYPoint.js","../node_modules/ml-spectra-processing/lib/xy/xyReduceNonContinuous.js","../node_modules/ml-spectra-processing/lib/xy/xyRolling.js","../node_modules/ml-spectra-processing/lib/xy/xyRollingCircleTransform.js","../node_modules/ml-spectra-processing/lib/xy/xySetYValue.js","../node_modules/ml-spectra-processing/lib/xy/xyToXYArray.js","../node_modules/ml-spectra-processing/lib/xy/xyToXYObject.js","../node_modules/ml-spectra-processing/lib/xy/xyWeightedMerge.js","../node_modules/ml-spectra-processing/lib/zones/zonesToXEquallySpaced.js","../node_modules/ensure-string/lib/index.js","../node_modules/xy-parser/lib/parse.js","../node_modules/xy-parser/lib/index.js","../packages/ms-spectrum/lib/src/getBestPeaks.js","../packages/atom-sorter/lib/src/index.js","../packages/chemical-elements/lib/src/elementsAndIsotopes.js","../packages/chemical-elements/lib/src/elements.js","../packages/chemical-elements/lib/src/elementsAndIsotopesObject.js","../packages/chemical-elements/lib/src/elementsAndStableIsotopes.js","../packages/chemical-elements/lib/src/elementsAndStableIsotopesObject.js","../packages/chemical-elements/lib/src/elementsObject.js","../packages/chemical-elements/lib/src/isotopesObject.js","../packages/chemical-elements/lib/src/stableIsotopesObject.js","../packages/chemical-elements/lib/src/unsaturationsObject.js","../packages/chemical-groups/lib/src/groupsObject.js","../packages/chemical-groups/lib/src/groupsToSequence.js","../packages/mf-parser/lib/src/Kind.js","../packages/mf-parser/lib/src/util/parseCharge.js","../packages/mf-parser/lib/src/parse.js","../packages/mf-parser/lib/src/util/subSuperscript.js","../packages/mf-parser/lib/src/Format.js","../packages/mf-parser/lib/src/util/formatCharge.js","../packages/mf-parser/lib/src/util/improveLinesForDisplay.js","../packages/mf-parser/lib/src/util/toDisplay.js","../packages/mf-parser/lib/src/util/isMF.js","../packages/mf-parser/lib/src/Style.js","../packages/mf-parser/lib/src/util/toHtml.js","../packages/mf-parser/lib/src/ensureCase.js","../packages/mf-parser/lib/src/util/flatten.js","../packages/mf-parser/lib/src/util/getIsotopeRatioInfo.js","../packages/mf-parser/lib/src/util/getEA.js","../packages/mf-parser/lib/src/util/getElements.js","../packages/mf-parser/lib/src/util/getNumberOfIsotopologues.js","../packages/mf-parser/lib/src/util/partToAtoms.js","../packages/mf-parser/lib/src/util/partToMF.js","../packages/mf-parser/lib/src/util/getInfoInternal.js","../packages/mf-parser/lib/src/util/getIsotopesInfo.js","../packages/mf-parser/lib/src/util/partsToDisplay.js","../packages/mf-parser/lib/src/util/partsToMF.js","../packages/mf-parser/lib/src/util/toParts.js","../packages/mf-parser/lib/src/util/toText.js","../packages/mf-parser/lib/src/MFInternal.js","../packages/mf-parser/lib/src/MF.js","../packages/mf-parser/lib/src/parseToHtml.js","../packages/mf-matcher/lib/src/unsaturationMatcher.js","../packages/mf-matcher/lib/src/generalMatcher.js","../packages/mf-utilities/lib/src/ensureUppercaseSequence.js","../packages/mf-utilities/lib/src/getEutrophicationPotential.js","../packages/mf-utilities/lib/src/getMsem.js","../packages/mf-utilities/lib/src/getMsInfo.js","../packages/mf-utilities/lib/src/getRangesForFragment.js","../packages/mf-utilities/lib/src/MFRange.js","../packages/mf-utilities/lib/src/mfDiff.js","../packages/mf-utilities/lib/src/preprocessIonizations.js","../packages/mf-utilities/lib/src/preprocessRanges.js","../packages/mf-matcher/lib/src/msemMatcher.js","../packages/mf-finder/lib/src/TargetMassCache.js","../packages/mf-finder/lib/src/findMFsSync.js","../packages/mf-finder/lib/src/findMFs.js","../packages/mf-finder/lib/src/mfIncluded.js","../packages/ms-spectrum/lib/src/from/fromMonoisotopicMass.js","../packages/ms-spectrum/lib/src/getPeaks.js","../packages/ms-spectrum/lib/src/getFragmentPeaks.js","../packages/ms-spectrum/lib/src/getMassRemainder.js","../node_modules/peaks-similarity/lib-esm/calculateOverlapFromDiff.js","../node_modules/peaks-similarity/lib-esm/checkPeaks.js","../node_modules/peaks-similarity/lib-esm/extract.js","../node_modules/peaks-similarity/lib-esm/getCommonArray.js","../node_modules/ml-stat/array.js","../node_modules/ml-stat/matrix.js","../node_modules/ml-stat/index.js","../node_modules/peaks-similarity/lib-esm/normalize.js","../node_modules/peaks-similarity/lib-esm/commonExtractAndNormalize.js","../node_modules/peaks-similarity/lib-esm/extractAndNormalize.js","../node_modules/peaks-similarity/lib-esm/getIntersection.js","../node_modules/peaks-similarity/lib-esm/index.js","../packages/ms-spectrum/lib/src/getPeakChargeBySimilarity.js","../packages/ms-spectrum/lib/src/getPeaksWithCharge.js","../packages/ms-spectrum/lib/src/isContinuous.js","../node_modules/ml-savitzky-golay-generalized/lib/index.js","../node_modules/ml-gsd/lib/algorithms/getMinMaxIntervals.js","../node_modules/ml-gsd/lib/algorithms/tryMatchOneIntervalWithMinData.js","../node_modules/ml-gsd/lib/algorithms/getPeaksFromIntervals.js","../node_modules/ml-gsd/lib/algorithms/xGetCrossZeroPoints.js","../node_modules/ml-gsd/lib/algorithms/firstDerivative.js","../node_modules/ml-peak-shape-generator/lib-esm/util/constants.js","../node_modules/ml-peak-shape-generator/lib-esm/shapes/1d/gaussian/Gaussian.js","../node_modules/ml-peak-shape-generator/lib-esm/util/erfinv.js","../node_modules/ml-peak-shape-generator/lib-esm/shapes/1d/lorentzian/Lorentzian.js","../node_modules/ml-peak-shape-generator/lib-esm/shapes/1d/lorentzianDispersive/LorentzianDispersive.js","../node_modules/ml-peak-shape-generator/lib-esm/shapes/1d/pseudoVoigt/PseudoVoigt.js","../node_modules/ml-peak-shape-generator/lib-esm/shapes/1d/generalizedLorentzian/GeneralizedLorentzian.js","../node_modules/ml-peak-shape-generator/lib-esm/shapes/2d/gaussian2D/Gaussian2D.js","../node_modules/ml-peak-shape-generator/lib-esm/shapes/1d/getShape1D.js","../node_modules/ml-peak-shape-generator/lib-esm/shapes/2d/getShape2D.js","../node_modules/ml-spectra-fitting/lib/util/assert.js","../node_modules/ml-spectra-fitting/lib/util/internalPeaks/DefaultParameters.js","../node_modules/ml-spectra-fitting/lib/util/internalPeaks/getInternalPeaks.js","../node_modules/ml-levenberg-marquardt/lib/check_options.js","../node_modules/ml-levenberg-marquardt/lib/error_calculation.js","../node_modules/ml-levenberg-marquardt/lib/step.js","../node_modules/ml-levenberg-marquardt/lib/gradient_function.js","../node_modules/ml-levenberg-marquardt/lib/levenberg_marquardt.js","../node_modules/ml-direct/src/util/antiLowerConvexHull.js","../node_modules/ml-direct/src/index.js","../node_modules/ml-spectra-fitting/lib/util/wrappers/directOptimization.js","../node_modules/ml-spectra-fitting/lib/index.js","../node_modules/ml-spectra-fitting/lib/util/selectMethod.js","../node_modules/ml-spectra-fitting/lib/shapes/getSumOfShapes.js","../node_modules/ml-gsd/lib/utils/addMissingShape.js","../node_modules/ml-gsd/lib/post/optimizePeaksWithLogs.js","../node_modules/ml-gsd/lib/utils/groupPeaks.js","../node_modules/ml-gsd/lib/utils/addMissingIDs.js","../node_modules/ml-gsd/lib/post/joinBroadPeaks.js","../node_modules/ml-gsd/lib/post/broadenPeaks.js","../node_modules/ml-gsd/lib/gsd.js","../node_modules/ml-gsd/lib/algorithms/secondDerivative.js","../node_modules/ml-gsd/lib/algorithms/autoAlgorithm.js","../node_modules/ml-gsd/lib/utils/optimizeTop.js","../node_modules/ml-gsd/lib/post/optimizePeaks.js","../node_modules/ml-gsd/lib/utils/setShape.js","../packages/ms-spectrum/lib/src/peakPicking.js","../node_modules/ml-regression-base/lib-esm/checkArrayLength.js","../node_modules/ml-regression-base/lib-esm/BaseRegression.js","../node_modules/ml-regression-base/lib-esm/maybeToPrecision.js","../node_modules/ml-regression-simple-linear/lib-esm/index.js","../node_modules/ml-regression-power/src/index.js","../packages/ms-spectrum/lib/src/peaksWidth.js","../packages/ms-spectrum/lib/src/Spectrum.js","../packages/ms-spectrum/lib/src/MSComparator.js","../packages/ms-spectrum/lib/src/jsgraph/getPeaksAnnotation.js","../packages/ms-spectrum/lib/src/jsgraph/index.js","../packages/emdb/lib/src/append/appendFragmentsInfo.js","../node_modules/sum-object-keys/lib/index.js","../packages/mf-generator/lib/src/generateMFs.js","../node_modules/openchemlib-utils/lib/util/getXAtomicNumber.js","../node_modules/openchemlib-utils/lib/util/isCsp3.js","../node_modules/openchemlib-utils/lib/util/makeRacemic.js","../node_modules/openchemlib-utils/lib/util/tagAtom.js","../node_modules/openchemlib-utils/lib/hose/getHoseCodesForAtomsAsFragments.js","../node_modules/openchemlib-utils/lib/util/ensureMapNo.js","../node_modules/openchemlib-utils/lib/util/getConnectivityMatrix.js","../node_modules/ml-floyd-warshall/lib-esm/index.js","../node_modules/openchemlib-utils/lib/util/getCompactCopyWithoutCustomLabels.js","../node_modules/openchemlib-utils/lib/hose/getHoseCodesForAtomsAsStrings.js","../node_modules/openchemlib-utils/lib/diastereotopic/getChiralOrHeterotopicCarbons.js","../node_modules/openchemlib-utils/lib/diastereotopic/ensureHeterotopicChiralBonds.js","../node_modules/openchemlib-utils/lib/topic/TopicMolecule.js","../node_modules/openchemlib-utils/lib/topic/getCanonizedHoseCodesForPaths.js","../node_modules/openchemlib-utils/lib/path/getAllAtomsPaths.js","../node_modules/openchemlib-utils/lib/topic/getMoleculeWithH.js","../node_modules/openchemlib-utils/lib/topic/getXMolecule.js","../node_modules/openchemlib-utils/lib/topic/getCanonizedDiaIDs.js","../node_modules/openchemlib-utils/lib/topic/getCanonizedHoseCodes.js","../node_modules/openchemlib-utils/lib/topic/getDiaIDsAndInfo.js","../node_modules/openchemlib-utils/lib/topic/getHeterotopicSymmetryRanks.js","../node_modules/openchemlib-utils/lib/util/getSymmetryRanks.js","../node_modules/openchemlib-utils/lib/diastereotopic/getDiastereotopicAtomIDs.js","../node_modules/openchemlib-utils/lib/diastereotopic/getDiastereotopicAtomIDsAndH.js","../node_modules/openchemlib-utils/lib/hose/getHoseCodesForAtoms.js","../node_modules/openchemlib-utils/lib/hose/getHoseCodesForPath.js","../node_modules/openchemlib-utils/lib/polymer/createPolymer.js","../node_modules/openchemlib/dist/openchemlib.js","../node_modules/openchemlib-utils/lib/util/applyFragmentLabels.js","../node_modules/openchemlib-utils/lib/util/autoLabelDatabase.js","../node_modules/openchemlib-utils/lib/util/combineSmiles.js","../node_modules/openchemlib-utils/lib/util/dwar/utils/getCamelCase.js","../node_modules/openchemlib-utils/lib/util/dwar/utils/parseColumnbProperties.js","../node_modules/openchemlib-utils/lib/util/dwar/utils/parseData.js","../node_modules/openchemlib-utils/lib/util/dwar/parseDwar.js","../node_modules/openchemlib-utils/lib/util/getAtomsInfo.js","../node_modules/openchemlib-utils/lib/util/getMF.js","../node_modules/openchemlib-utils/lib/util/getUnsaturation.js","../node_modules/openchemlib-utils/lib/util/getNMRHints.js","../node_modules/openchemlib-utils/lib/util/getProperties.js","../node_modules/openchemlib-utils/lib/path/getPathsInfo.js","../node_modules/openchemlib-utils/lib/util/getAtoms.js","../node_modules/openchemlib-utils/lib/path/getPathAndTorsion.js","../node_modules/papaparse/papaparse.min.js","../node_modules/openchemlib-utils/lib/db/utils/getMoleculeCreators.js","../node_modules/openchemlib-utils/lib/db/utils/appendCSV.js","../node_modules/get-value/dist/index.mjs","../node_modules/sdf-parser/lib/util/getMolecule.js","../node_modules/openchemlib-utils/lib/db/utils/appendSDF.js","../node_modules/sdf-parser/lib/parse.js","../node_modules/sdf-parser/lib/getEntriesBoundaries.js","../node_modules/openchemlib-utils/lib/db/utils/pushEntry.js","../node_modules/openchemlib-utils/lib/util/noWait.js","../node_modules/openchemlib-utils/lib/db/utils/search.js","../node_modules/openchemlib-utils/lib/util/getRAtomicNumber.js","../node_modules/openchemlib-utils/lib/reaction/utils/checkIfExistsOrAddInfo.js","../node_modules/openchemlib-utils/lib/reaction/utils/applyOneReactantReactions.js","../node_modules/openchemlib-utils/lib/reaction/utils/getFilteredTrees.js","../node_modules/openchemlib-utils/lib/reaction/utils/getLeaves.js","../node_modules/openchemlib-utils/lib/reaction/utils/getNodes.js","../node_modules/openchemlib-utils/lib/reaction/Reactions.js","../node_modules/openchemlib-utils/lib/reaction/utils/appendOCLReaction.js","../node_modules/openchemlib-utils/lib/db/MoleculesDB.js","../node_modules/openchemlib-utils/lib/db/utils/appendEntries.js","../node_modules/openchemlib-utils/lib/db/utils/appendSmilesList.js","../node_modules/openchemlib-utils/lib/db/utils/pushMoleculeInfo.js","../node_modules/openchemlib-utils/lib/db/utils/appendColor.js","../node_modules/openchemlib-utils/lib/util/autoLabel.js","../node_modules/openchemlib-utils/lib/fragment/fragmentAcyclicSingleBonds.js","../node_modules/openchemlib-utils/lib/features/getAtomFeatures.js","../node_modules/openchemlib-utils/lib/util/getCharge.js","../node_modules/openchemlib-utils/lib/diastereotopic/getDiastereotopicAtomIDsFromMolfile.js","../node_modules/openchemlib-utils/lib/diastereotopic/getGroupedDiastereotopicAtomIDs.js","../node_modules/openchemlib-utils/lib/diastereotopic/groupDiastereotopicAtomIDs.js","../node_modules/openchemlib-utils/lib/hose/getHoseCodes.js","../node_modules/openchemlib-utils/lib/hose/getHoseCodesAndInfo.js","../node_modules/openchemlib-utils/lib/hose/getHoseCodesForAtom.js","../node_modules/openchemlib-utils/lib/hose/getHoseCodesFromDiastereotopicID.js","../node_modules/openchemlib-utils/lib/util/getImplicitHydrogensCount.js","../node_modules/openchemlib-utils/lib/util/getMolfilesMapping.js","../node_modules/openchemlib-utils/lib/util/getNextNMRHint.js","../node_modules/openchemlib-utils/lib/path/getShortestPaths.js","../node_modules/openchemlib-utils/lib/util/nbCHO.js","../node_modules/openchemlib-utils/lib/util/nbCN.js","../node_modules/openchemlib-utils/lib/util/nbCOOH.js","../node_modules/openchemlib-utils/lib/util/nbLabileH.js","../node_modules/openchemlib-utils/lib/util/nbNH2.js","../node_modules/openchemlib-utils/lib/util/nbOH.js","../node_modules/openchemlib-utils/lib/util/dwar/utils/getParts.js","../node_modules/openchemlib-utils/lib/diastereotopic/toDiastereotopicSVG.js","../node_modules/openchemlib-utils/lib/util/toVisualizerMolfile.js","../node_modules/openchemlib-utils/lib/util/toggleHydrogens.js","../packages/mass-fragmentation/lib/src/fragmentAcyclicBonds.js","../packages/mass-fragmentation/lib/src/utils/getRingsInfo.js","../packages/mass-fragmentation/lib/src/utils/getFragmentableRings.js","../packages/mass-fragmentation/lib/src/fragmentRings.js","../packages/mass-fragmentation/lib/src/fragment.js","../packages/mass-fragmentation/lib/src/database/defaultDatabase.js","../packages/mass-fragmentation/lib/src/database/getDatabase.js","../packages/mass-fragmentation/lib/src/utils/getMasses.js","../packages/mass-fragmentation/lib/src/reactionFragmentation.js","../node_modules/react/cjs/react-jsx-runtime.production.js","../node_modules/react/jsx-runtime.js","../node_modules/react/cjs/react.production.js","../node_modules/react/index.js","../node_modules/react-dom/cjs/react-dom.production.js","../node_modules/react-dom/index.js","../node_modules/scheduler/cjs/scheduler.production.js","../node_modules/scheduler/index.js","../node_modules/react-dom/cjs/react-dom-client.production.js","../node_modules/react-dom/client.js","../node_modules/react-tree-svg/lib-esm/data/calculatePosition.js","../node_modules/react-tree-svg/lib-esm/components/MultilineText.js","../node_modules/react-tree-svg/lib-esm/components/Text.js","../node_modules/react-tree-svg/lib-esm/components/Arrow.js","../node_modules/react-tree-svg/lib-esm/data/getArrows.js","../node_modules/react-tree-svg/lib-esm/data/getBoxes.js","../node_modules/react-tree-svg/lib-esm/data/prepareTree.js","../node_modules/react-tree-svg/lib-esm/components/MarkerDef.js","../node_modules/react-tree-svg/lib-esm/components/MarkerDef.utils.js","../node_modules/react-tree-svg/lib-esm/components/SVGBoxesTree.js","../node_modules/react-tree-svg/lib-esm/components/Rectangle.js","../node_modules/react-tree-svg/lib-esm/components/SVG.js","../node_modules/react-tree-svg/lib-esm/nodeRenderer/moleculeRenderer.js","../node_modules/react-tree-svg/lib-esm/render.js","../node_modules/react-tree-svg/lib-esm/nodeRenderer/taxonomyRenderer.js","../packages/mass-fragmentation/lib/src/getFragmentationSVG.js","../packages/emdb/lib/src/from/fromMolecules.js","../packages/nucleotide/lib/src/sequenceToMF.js","../packages/nucleotide/lib/src/furanThreeTerm.js","../packages/nucleotide/lib/src/addFiveTerm.js","../packages/nucleotide/lib/src/baseLoss.js","../packages/nucleotide/lib/src/addFiveTermBaseLoss.js","../packages/nucleotide/lib/src/addInternalTerm.js","../packages/nucleotide/lib/src/addThreeTerm.js","../packages/nucleotide/lib/src/addThreeTermBaseLoss.js","../packages/nucleotide/lib/src/generateFragments.js","../packages/emdb/lib/src/from/fromNucleicSequence.js","../packages/peptide/lib/src/aminoAcids.js","../packages/peptide/lib/src/isoElectricPoint.js","../packages/peptide/lib/src/splitPeptide.js","../packages/peptide/lib/src/allowNeutralLoss.js","../packages/peptide/lib/src/getAA.js","../packages/peptide/lib/src/chargePeptide.js","../packages/peptide/lib/src/sequenceToMF.js","../packages/peptide/lib/src/generatePeptideFragments.js","../packages/peptide/lib/src/digestPeptide.js","../packages/peptide/lib/src/index.js","../packages/emdb/lib/src/from/util/fragmentPeptide.js","../packages/emdb/lib/src/from/fromPeptidicSequence.js","../packages/emdb/lib/src/from/fromRange.js","../node_modules/jszip/dist/jszip.min.js","../packages/emdb/lib/src/util/fetchArrayBuffer.js","../packages/emdb/lib/src/loadCommercials.js","../packages/mf-from-google-sheet/lib/src/util/fetchText.js","../packages/mf-from-google-sheet/lib/src/index.js","../packages/emdb/lib/src/loadGoogleSheet.js","../packages/emdb/lib/src/loadKnapSack.js","../packages/emdb/lib/src/search.js","../packages/emdb/lib/src/searchMSEM.js","../node_modules/spectrum-generator/lib/BaseSpectrumGenerator.js","../node_modules/spectrum-generator/lib/SpectrumGenerator.js","../node_modules/spectrum-generator/lib/util/addBaseline.js","../node_modules/spectrum-generator/lib/util/addNoise.js","../node_modules/spectrum-generator/lib/Spectrum2DGenerator.js","../node_modules/spectrum-generator/lib/SparseSpectrumGenerator.js","../node_modules/spectrum-generator/lib/generateSparseSpectrum.js","../node_modules/spectrum-generator/lib/generateSpectrum.js","../packages/isotopic-distribution/lib/src/utils/closestPointX.js","../packages/isotopic-distribution/lib/src/utils/joinX.js","../packages/isotopic-distribution/lib/src/utils/multiply.js","../packages/isotopic-distribution/lib/src/utils/power.js","../packages/isotopic-distribution/lib/src/Distribution.js","../packages/isotopic-distribution/lib/src/utils/getDerivedCompositionInfo.js","../packages/isotopic-distribution/lib/src/IsotopicDistribution.js","../packages/emdb/lib/src/searchSimilarity.js","../node_modules/ml-array-median/node_modules/is-any-array/lib-esm/index.js","../node_modules/median-quickselect/lib/median-quickselect.min.js","../node_modules/ml-array-median/lib-es6/index.js","../node_modules/ml-regression-theil-sen/src/index.js","../packages/emdb/lib/src/massShifts.js","../packages/emdb/lib/src/util/fetchJSON.js","../packages/emdb/lib/src/index.js","../packages/mf-from-ea/lib/src/preprocessEARanges.js","../packages/mf-from-ea/lib/src/index.js","../packages/mf-from-atomic-ratio/lib/src/mfFromAtomicRatio.js","../packages/octochemdb/lib/src/utils/appendAllDBRefs.js","../packages/octochemdb/lib/src/utils/appendURLs.js","../packages/octochemdb/lib/src/utils/fetchJSON.js","../packages/octochemdb/lib/src/utils/postFetchJSON.js","../packages/octochemdb/lib/src/utils/includeDBRefs.js","../packages/octochemdb/lib/src/utils/normalizeActivities.js","../packages/octochemdb/lib/src/activeOrNaturalDetails.js","../packages/octochemdb/lib/src/utils/parseMasses.js","../packages/octochemdb/lib/src/utils/getAllowedEMs.js","../packages/octochemdb/lib/src/utils/searchWithIonizations.js","../packages/octochemdb/lib/src/activesOrNaturals.js","../packages/octochemdb/lib/src/activesOrNaturalsByMF.js","../packages/octochemdb/lib/src/compoundsFromMF.js","../packages/octochemdb/lib/src/searchMasses.js","../packages/octochemdb/lib/src/massSpectra.js","../packages/octochemdb/lib/src/mfsFromEMs.js","../packages/octochemdb/lib/src/pubmedCompounds.js","../packages/octochemdb/lib/src/searchInSilicoSpectraByMF.js","../packages/octochemdb/lib/src/searchInSilicoSpectraByMasses.js","../packages/octochemdb/lib/src/OctoChemDB.js","../node_modules/@orama/orama/dist/browser/components/tokenizer/languages.js","../node_modules/@orama/orama/dist/browser/utils.js","../node_modules/@orama/orama/dist/browser/errors.js","../node_modules/@orama/orama/dist/browser/components/defaults.js","../node_modules/@orama/orama/dist/browser/components/internal-document-id-store.js","../node_modules/@orama/orama/dist/browser/components/documents-store.js","../node_modules/@orama/orama/dist/browser/components/plugins.js","../node_modules/@orama/orama/dist/browser/components/hooks.js","../node_modules/@orama/orama/dist/browser/trees/avl.js","../node_modules/@orama/orama/dist/browser/trees/flat.js","../node_modules/@orama/orama/dist/browser/components/levenshtein.js","../node_modules/@orama/orama/dist/browser/trees/radix.js","../node_modules/@orama/orama/dist/browser/trees/bkd.js","../node_modules/@orama/orama/dist/browser/trees/bool.js","../node_modules/@orama/orama/dist/browser/components/algorithms.js","../node_modules/@orama/orama/dist/browser/trees/vector.js","../node_modules/@orama/orama/dist/browser/components/index.js","../node_modules/@orama/orama/dist/browser/components/sorter.js","../node_modules/@orama/orama/dist/browser/components/tokenizer/diacritics.js","../node_modules/@orama/orama/dist/browser/components/tokenizer/english-stemmer.js","../node_modules/@orama/orama/dist/browser/components/tokenizer/index.js","../node_modules/@orama/orama/dist/browser/components/pinning.js","../node_modules/@orama/orama/dist/browser/methods/create.js","../node_modules/@orama/orama/dist/browser/methods/docs.js","../node_modules/@orama/orama/dist/browser/methods/insert.js","../node_modules/@orama/orama/dist/browser/methods/remove.js","../node_modules/@orama/orama/dist/browser/constants.js","../node_modules/@orama/orama/dist/browser/components/facets.js","../node_modules/@orama/orama/dist/browser/components/groups.js","../node_modules/@orama/orama/dist/browser/components/pinning-manager.js","../node_modules/@orama/orama/dist/browser/methods/search-fulltext.js","../node_modules/@orama/orama/dist/browser/methods/search.js","../node_modules/@orama/orama/dist/browser/methods/search-vector.js","../node_modules/@orama/orama/dist/browser/methods/search-hybrid.js","../node_modules/@orama/orama/dist/browser/methods/update.js","../node_modules/@orama/orama/dist/browser/types.js","../node_modules/@orama/orama/dist/browser/methods/answer-session.js","../node_modules/@orama/orama/dist/browser/methods/pinning.js","../node_modules/@orama/orama/dist/browser/methods/serialization.js","../node_modules/@orama/orama/dist/browser/methods/upsert.js","../packages/octochemdb/lib/src/summarizer/utils/getActivitiesDB.js","../packages/octochemdb/lib/src/summarizer/utils/getPatentsDB.js","../packages/octochemdb/lib/src/summarizer/utils/getPubmedsDB.js","../packages/octochemdb/lib/src/summarizer/utils/getTaxonomiesDB.js","../packages/octochemdb/lib/src/summarizer/utils/searchActivitiesDB.js","../packages/octochemdb/lib/src/summarizer/utils/searchPatentsDB.js","../packages/octochemdb/lib/src/summarizer/utils/searchPubmedsDB.js","../packages/octochemdb/lib/src/summarizer/utils/searchTaxonomiesDB.js","../packages/octochemdb/lib/src/summarizer/utils/summarizeEmptyTerms.js","../packages/octochemdb/lib/src/summarizer/ActiveOrNaturalSummarizer.js","../packages/octochemdb/lib/src/taxonomy/taxonomyRanks.js","../packages/octochemdb/lib/src/taxonomy/taxonomyComparator.js","../packages/octochemdb/lib/src/taxonomy/createTaxonomyTree.js","../packages/ms-report/lib/src/appendInternals.js","../packages/ms-report/lib/src/appendResidues.js","../node_modules/@svgdotjs/svg.js/dist/svg.node.cjs","../packages/ms-report/lib/src/getPaper.browser.js","../packages/ms-report/lib/src/appendResiduesPosition.js","../packages/ms-report/lib/src/appendResults.js","../packages/ms-report/lib/src/appendRows.js","../packages/ms-report/lib/src/appendRowsInformation.js","../packages/ms-report/lib/src/draw/addScript.js","../packages/ms-report/lib/src/draw/drawLabel.js","../packages/ms-report/lib/src/draw/drawInternals.js","../packages/ms-report/lib/src/draw/drawReplacements.js","../packages/ms-report/lib/src/draw/drawTerminals.js","../packages/ms-report/lib/src/draw/drawSequence.js","../packages/ms-report/lib/src/sequenceSVG.js","../node_modules/@lukeed/uuid/dist/index.js","../packages/mfs-deconvolution/lib/src/getPeakWidthFct.js","../node_modules/ml-fcnnls/lib-esm/util/sortCollectionSet.js","../node_modules/ml-fcnnls/lib-esm/cssls.js","../node_modules/ml-fcnnls/lib-esm/util/setDifference.js","../node_modules/ml-fcnnls/lib-esm/optimality.js","../node_modules/ml-fcnnls/lib-esm/util/selection.js","../node_modules/ml-fcnnls/lib-esm/fcnnls.js","../node_modules/ml-fcnnls/lib-esm/initialisation.js","../node_modules/ml-fcnnls/lib-esm/fcnnlsVector.js","../packages/mfs-deconvolution/lib/src/utils/splitMatrix.js","../packages/mfs-deconvolution/lib/src/utils/blockFcnnls.js","../packages/mfs-deconvolution/lib/src/mfsDeconvolution.js","../packages/mfs-deconvolution/lib/src/reconstruct.js","../packages/mass-tools/src/index.js"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/unbound-method\nconst toString = Object.prototype.toString;\n/**\n * Checks if an object is an instance of an Array (array or typed array, except those that contain bigint values).\n * @param value - Object to check.\n * @returns True if the object is an array or a typed array.\n */\nexport function isAnyArray(value) {\n    const tag = toString.call(value);\n    return tag.endsWith('Array]') && !tag.includes('Big');\n}\n//# sourceMappingURL=index.js.map","/**\n * Calculates reimAbsolute value of a complex spectrum.\n * @param data - complex spectrum\n * @param options\n * @param options.output\n * @returns - reimAbsolute value\n */\nexport function reimAbsolute(data, options = {}) {\n    const length = data.re.length;\n    const { output = new Float64Array(length) } = options;\n    const re = data.re;\n    const im = data.im;\n    for (let i = 0; i < length; i++) {\n        output[i] = Math.hypot(re[i], im[i]);\n    }\n    return output;\n}\n//# sourceMappingURL=reimAbsolute.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * This function\n * @param output - undefined or a new array\n * @param length - length of the output array\n * @returns\n */\nexport function getOutputArray(output, length) {\n    if (output !== undefined) {\n        if (!isAnyArray(output)) {\n            throw new TypeError('output option must be an array if specified');\n        }\n        if (output.length !== length) {\n            throw new TypeError('the output array does not have the correct length');\n        }\n        return output;\n    }\n    else {\n        return new Float64Array(length);\n    }\n}\n//# sourceMappingURL=getOutputArray.js.map","/**\n * This function returns an array with absolute values.\n * @param array - array of data\n * @returns - array with absolute values\n */\nexport function xAbsolute(array) {\n    const tmpArray = array.slice();\n    for (let i = 0; i < tmpArray.length; i++) {\n        if (tmpArray[i] < 0)\n            tmpArray[i] *= -1;\n    }\n    return tmpArray;\n}\n//# sourceMappingURL=xAbsolute.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * Calculates the median of an array.\n * @param input - Array containing values\n * @param options\n * @returns - median\n */\nexport function xMedian(input, options = {}) {\n    if (!isAnyArray(input)) {\n        throw new TypeError('input must be an array');\n    }\n    if (input.length === 0) {\n        throw new TypeError('input must not be empty');\n    }\n    const { exact = false } = options || {};\n    const array = input.slice();\n    const middleIndex = calcMiddle(0, array.length - 1);\n    const median = quickSelect(array, middleIndex);\n    if (array.length % 2 === 1 || !exact) {\n        return median;\n    }\n    const medianNext = quickSelect(array, middleIndex + 1);\n    return (median + medianNext) / 2;\n}\nfunction quickSelect(array, middleIndex) {\n    let low = 0;\n    let high = array.length - 1;\n    let middle = 0;\n    let currentLow = 0;\n    let currentHigh = 0;\n    while (true) {\n        if (high <= low) {\n            return array[middleIndex];\n        }\n        if (high === low + 1) {\n            if (array[low] > array[high]) {\n                swap(array, low, high);\n            }\n            return array[middleIndex];\n        }\n        // Find median of low, middle and high items; swap into position low\n        middle = calcMiddle(low, high);\n        if (array[middle] > array[high])\n            swap(array, middle, high);\n        if (array[low] > array[high])\n            swap(array, low, high);\n        if (array[middle] > array[low])\n            swap(array, middle, low);\n        // Swap low item (now in position middle) into position (low+1)\n        swap(array, middle, low + 1);\n        // Nibble from each end towards middle, swapping items when stuck\n        currentLow = low + 1;\n        currentHigh = high;\n        while (true) {\n            do\n                currentLow++;\n            while (array[low] > array[currentLow]);\n            do\n                currentHigh--;\n            while (array[currentHigh] > array[low]);\n            if (currentHigh < currentLow) {\n                break;\n            }\n            swap(array, currentLow, currentHigh);\n        }\n        // Swap middle item (in position low) back into correct position\n        swap(array, low, currentHigh);\n        // Re-set active partition\n        if (currentHigh <= middleIndex) {\n            low = currentLow;\n        }\n        if (currentHigh >= middleIndex) {\n            high = currentHigh - 1;\n        }\n    }\n}\nfunction swap(array, i, j) {\n    const temp = array[j];\n    array[j] = array[i];\n    array[i] = temp;\n}\nfunction calcMiddle(i, j) {\n    return Math.floor((i + j) / 2);\n}\n//# sourceMappingURL=xMedian.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * Checks if the input is a non-empty array of numbers.\n * Only checks the first element.\n * @param input - Array to check.\n * @param options - Additional checks.\n */\nexport function xCheck(input, options = {}) {\n    const { minLength } = options;\n    if (!isAnyArray(input)) {\n        throw new TypeError('input must be an array');\n    }\n    if (input.length === 0) {\n        throw new TypeError('input must not be empty');\n    }\n    if (typeof input[0] !== 'number') {\n        throw new TypeError('input must contain numbers');\n    }\n    if (minLength && input.length < minLength) {\n        throw new Error(`input must have a length of at least ${minLength}`);\n    }\n}\n//# sourceMappingURL=xCheck.js.map","/**\n * Returns the closest index of a `target`\n * @param array - array of numbers\n * @param target - target\n * @param options\n * @returns - closest index\n */\nexport function xFindClosestIndex(array, target, options = {}) {\n    const { sorted = true } = options;\n    if (sorted) {\n        let low = 0;\n        let high = array.length - 1;\n        let middle = 0;\n        while (high - low > 1) {\n            middle = low + ((high - low) >> 1);\n            if (array[middle] < target) {\n                low = middle;\n            }\n            else if (array[middle] > target) {\n                high = middle;\n            }\n            else {\n                return middle;\n            }\n        }\n        if (low < array.length - 1) {\n            if (Math.abs(target - array[low]) < Math.abs(array[low + 1] - target)) {\n                return low;\n            }\n            else {\n                return low + 1;\n            }\n        }\n        else {\n            return low;\n        }\n    }\n    else {\n        let index = 0;\n        let diff = Number.POSITIVE_INFINITY;\n        for (let i = 0; i < array.length; i++) {\n            const currentDiff = Math.abs(array[i] - target);\n            if (currentDiff < diff) {\n                diff = currentDiff;\n                index = i;\n            }\n        }\n        return index;\n    }\n}\n//# sourceMappingURL=xFindClosestIndex.js.map","import { xFindClosestIndex } from \"./xFindClosestIndex.js\";\n/**\n * Returns an object with {fromIndex, toIndex} for a specific from / to\n * @param x - array of numbers\n * @param options - Options\n */\nexport function xGetFromToIndex(x, options = {}) {\n    let { fromIndex, toIndex } = options;\n    const { from, to } = options;\n    if (fromIndex === undefined) {\n        if (from !== undefined) {\n            fromIndex = xFindClosestIndex(x, from);\n        }\n        else {\n            fromIndex = 0;\n        }\n    }\n    if (toIndex === undefined) {\n        if (to !== undefined) {\n            toIndex = xFindClosestIndex(x, to);\n        }\n        else {\n            toIndex = x.length - 1;\n        }\n    }\n    if (fromIndex < 0)\n        fromIndex = 0;\n    if (toIndex < 0)\n        toIndex = 0;\n    if (fromIndex >= x.length)\n        fromIndex = x.length - 1;\n    if (toIndex >= x.length)\n        toIndex = x.length - 1;\n    if (fromIndex > toIndex)\n        [fromIndex, toIndex] = [toIndex, fromIndex];\n    return { fromIndex, toIndex };\n}\n//# sourceMappingURL=xGetFromToIndex.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * This function xAdd the first array by the second array or a constant value to each element of the first array\n * @param array1 - the first array\n * @param array2 - the second array or number\n * @returns the result of the addition\n */\nexport function xAdd(array1, array2) {\n    let isConstant = false;\n    let constant = 0;\n    if (isAnyArray(array2)) {\n        if (array1.length !== array2.length) {\n            throw new Error('size of array1 and array2 must be identical');\n        }\n    }\n    else {\n        isConstant = true;\n        constant = array2;\n    }\n    const array3 = new Float64Array(array1.length);\n    if (isConstant) {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] + constant;\n        }\n    }\n    else {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] + array2[i];\n        }\n    }\n    return array3;\n}\n//# sourceMappingURL=xAdd.js.map","import { isAnyArray } from 'is-any-array';\nimport { getOutputArray } from \"./getOutputArray.js\";\n/**\n * This function xMultiply the first array by the second array or a constant value to each element of the first array\n * @param array1 - first array\n * @param array2 - second array\n * @param options - options\n */\nexport function xMultiply(array1, array2, options = {}) {\n    let isConstant = false;\n    let constant = 0;\n    if (isAnyArray(array2)) {\n        if (array1.length !== array2.length) {\n            throw new Error('size of array1 and array2 must be identical');\n        }\n    }\n    else {\n        isConstant = true;\n        constant = array2;\n    }\n    const array3 = getOutputArray(options.output, array1.length);\n    if (isConstant) {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] * constant;\n        }\n    }\n    else {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] * array2[i];\n        }\n    }\n    return array3;\n}\n//# sourceMappingURL=xMultiply.js.map","import { xMultiply } from \"./xMultiply.js\";\n/**\n * Dot product between two arrays.\n * @param A - First array.\n * @param B - Second array.\n */\nexport function xDotProduct(A, B) {\n    const g = xMultiply(A, B);\n    let result = 0;\n    for (let i = 0; i < A.length; i++) {\n        result += g[i];\n    }\n    return result;\n}\n//# sourceMappingURL=xDotProduct.js.map","import { xDotProduct } from \"./xDotProduct.js\";\n/**\n * Calculates the cross-correlation between 2 arrays\n * @param A - fixed array\n * @param B - sweeping array\n * @param options - Options\n */\nexport function xCrossCorrelation(A, B, options = {}) {\n    const { tau = 1, lag = A.length - 1 } = options;\n    const result = new Float64Array(1 + (2 * lag) / tau);\n    if (A.length === B.length) {\n        const n = B.length;\n        const g = new Float64Array(2 * n);\n        const q = new Float64Array(2 * n);\n        for (let i = 0; i < n; i++) {\n            q[n + i] = B[i];\n        }\n        for (let i = n * 2 - (tau - 1); i > 0; i -= tau) {\n            let k = 0;\n            for (let j = i; j < n * 2; j++) {\n                g[k] = q[j];\n                k++;\n            }\n            const w = [];\n            for (let l = 0; l < n; l++) {\n                w[l] = g[l];\n            }\n            result[(k - (n - lag)) / tau] = xDotProduct(A, w);\n        }\n    }\n    return result;\n}\n//# sourceMappingURL=xCrossCorrelation.js.map","import { xCheck } from \"./xCheck.js\";\n/**\n * Calculating the box plot of the array\n * This function will interpolate the values and use the inclusive algorithm\n * @param array - data\n * @param options\n * @returns - q1, median, q3, min, max\n */\nexport function xBoxPlot(array) {\n    xCheck(array);\n    // duplicate the array to avoid modifying the original one\n    // and sort typed array that is much faster than sorting a normal array\n    array = Float64Array.from(array);\n    array.sort();\n    // need to deal with very close points otherwise it yields to incorrect results\n    if (array.at(-1) - array[0] <= Number.EPSILON) {\n        // if one of the 2 numbers is an integer let's take this one\n        const shortTestNumber = String(array[0]).length < String(array.at(-1)).length\n            ? array[0]\n            : array.at(-1);\n        return {\n            min: array[0],\n            q1: shortTestNumber,\n            median: shortTestNumber,\n            q3: shortTestNumber,\n            max: array.at(-1),\n        };\n    }\n    const posQ1 = (array.length - 1) / 4;\n    const posQ3 = (array.length - 1) * (3 / 4);\n    const medianPos = (array.length - 1) / 2;\n    const q1MinProportion = posQ1 % 1;\n    const q3MinProportion = posQ3 % 1;\n    const medianMinProportion = medianPos % 1;\n    return {\n        min: array[0],\n        q1: q1MinProportion === 0\n            ? array[posQ1]\n            : array[posQ1 >> 0] * (1 - q1MinProportion) +\n                array[(posQ1 >> 0) + 1] * q1MinProportion,\n        median: medianMinProportion === 0\n            ? array[medianPos]\n            : array[medianPos >> 0] * (1 - medianMinProportion) +\n                array[(medianPos >> 0) + 1] * medianMinProportion,\n        q3: q3MinProportion === 0\n            ? array[posQ3]\n            : array[posQ3 >> 0] * (1 - q3MinProportion) +\n                array[(posQ3 >> 0) + 1] * q3MinProportion,\n        max: array.at(-1),\n    };\n}\n//# sourceMappingURL=xBoxPlot.js.map","import { xBoxPlot } from \"./xBoxPlot.js\";\n/**\n * Calculating the box plot of the array with outliers\n * Values are outliers if they are below Q1 - 1.5 * IQR or above Q3 + 1.5 * IQR\n * @param array - data\n * @returns - q1, median, q3, min, max, outliers\n */\nexport function xBoxPlotWithOutliers(array) {\n    const boxPlot = xBoxPlot(array);\n    if (boxPlot.max - boxPlot.min <= Number.EPSILON) {\n        return {\n            ...boxPlot,\n            lowerWhisker: boxPlot.min,\n            upperWhisker: boxPlot.max,\n            minWhisker: boxPlot.min,\n            maxWhisker: boxPlot.max,\n            iqr: 0,\n            outliers: [],\n        };\n    }\n    const iqr = boxPlot.q3 - boxPlot.q1;\n    const lowerWhisker = boxPlot.q1 - 1.5 * iqr;\n    const upperWhisker = boxPlot.q3 + 1.5 * iqr;\n    const outliers = [];\n    let minWhisker = boxPlot.median;\n    let maxWhisker = boxPlot.median;\n    for (const value of array) {\n        if (value < lowerWhisker || value > upperWhisker) {\n            outliers.push(value);\n        }\n        else {\n            if (value < minWhisker)\n                minWhisker = value;\n            if (value > maxWhisker)\n                maxWhisker = value;\n        }\n    }\n    const info = {\n        ...boxPlot,\n        lowerWhisker,\n        upperWhisker,\n        minWhisker,\n        maxWhisker,\n        iqr,\n        outliers,\n    };\n    return info;\n}\n//# sourceMappingURL=xBoxPlotWithOutliers.js.map","/**\n * Check that two arrays have the same length.\n * @param array1 - First array.\n * @param array2 - Second array.\n */\nexport function xCheckLengths(array1, array2) {\n    if (array1.length !== array2.length) {\n        throw new TypeError('length of array1 and array2 must be identical');\n    }\n}\n//# sourceMappingURL=xCheckLengths.js.map","/**\n * Calculates the correlation between 2 vectors\n * https://en.wikipedia.org/wiki/Correlation_and_dependence\n * @param A - first array\n * @param B - sencond array\n */\nexport function xCorrelation(A, B) {\n    const n = A.length;\n    let sumA = 0;\n    let sumA2 = 0;\n    let sumB = 0;\n    let sumB2 = 0;\n    let sumAB = 0;\n    for (let i = 0; i < n; i++) {\n        const a = A[i];\n        const b = B[i];\n        sumA += a;\n        sumA2 += a ** 2;\n        sumB += b;\n        sumB2 += b ** 2;\n        sumAB += a * b;\n    }\n    return ((n * sumAB - sumA * sumB) /\n        (Math.sqrt(n * sumA2 - sumA ** 2) * Math.sqrt(n * sumB2 - sumB ** 2)));\n}\n//# sourceMappingURL=xCorrelation.js.map","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n// eslint-disable-next-line @typescript-eslint/unbound-method\nconst toString = Object.prototype.toString;\n/**\n * Checks if an object is an instance of an Array (array or typed array, except those that contain bigint values).\n * @param value - Object to check.\n * @returns True if the object is an array or a typed array.\n */\nfunction isAnyArray(value) {\n    const tag = toString.call(value);\n    return tag.endsWith('Array]') && !tag.includes('Big');\n}\n\n/**\n * Computes the maximum of the given values.\n *\n * @param input\n * @param options\n */\nfunction max(input, options = {}) {\n    if (!isAnyArray(input)) {\n        throw new TypeError('input must be an array');\n    }\n    if (input.length === 0) {\n        throw new TypeError('input must not be empty');\n    }\n    const { fromIndex = 0, toIndex = input.length } = options;\n    if (fromIndex < 0 ||\n        fromIndex >= input.length ||\n        !Number.isInteger(fromIndex)) {\n        throw new Error('fromIndex must be a positive integer smaller than length');\n    }\n    if (toIndex <= fromIndex ||\n        toIndex > input.length ||\n        !Number.isInteger(toIndex)) {\n        throw new Error('toIndex must be an integer greater than fromIndex and at most equal to length');\n    }\n    let maxValue = input[fromIndex];\n    for (let i = fromIndex + 1; i < toIndex; i++) {\n        if (input[i] > maxValue)\n            maxValue = input[i];\n    }\n    return maxValue;\n}\n\n/**\n * Computes the minimum of the given values.\n */\nfunction min(input, options = {}) {\n    if (!isAnyArray(input)) {\n        throw new TypeError('input must be an array');\n    }\n    if (input.length === 0) {\n        throw new TypeError('input must not be empty');\n    }\n    const { fromIndex = 0, toIndex = input.length } = options;\n    if (fromIndex < 0 ||\n        fromIndex >= input.length ||\n        !Number.isInteger(fromIndex)) {\n        throw new Error('fromIndex must be a positive integer smaller than length');\n    }\n    if (toIndex <= fromIndex ||\n        toIndex > input.length ||\n        !Number.isInteger(toIndex)) {\n        throw new Error('toIndex must be an integer greater than fromIndex and at most equal to length');\n    }\n    let minValue = input[fromIndex];\n    for (let i = fromIndex + 1; i < toIndex; i++) {\n        if (input[i] < minValue)\n            minValue = input[i];\n    }\n    return minValue;\n}\n\n/**\n * Rescale an array into a range.\n */\nfunction rescale(input, options = {}) {\n    if (!isAnyArray(input)) {\n        throw new TypeError('input must be an array');\n    }\n    else if (input.length === 0) {\n        throw new TypeError('input must not be empty');\n    }\n    let output;\n    if (options.output !== undefined) {\n        if (!isAnyArray(options.output)) {\n            throw new TypeError('output option must be an array if specified');\n        }\n        output = options.output;\n    }\n    else {\n        output = new Array(input.length);\n    }\n    const currentMin = min(input);\n    const currentMax = max(input);\n    if (currentMin === currentMax) {\n        throw new RangeError('minimum and maximum input values are equal. Cannot rescale a constant array');\n    }\n    const { min: minValue = options.autoMinMax ? currentMin : 0, max: maxValue = options.autoMinMax ? currentMax : 1, } = options;\n    if (minValue >= maxValue) {\n        throw new RangeError('min option must be smaller than max option');\n    }\n    const factor = (maxValue - minValue) / (currentMax - currentMin);\n    for (let i = 0; i < input.length; i++) {\n        output[i] = (input[i] - currentMin) * factor + minValue;\n    }\n    return output;\n}\n\nconst indent = ' '.repeat(2);\nconst indentData = ' '.repeat(4);\n\n/**\n * @this {Matrix}\n * @returns {string}\n */\nfunction inspectMatrix() {\n  return inspectMatrixWithOptions(this);\n}\n\nfunction inspectMatrixWithOptions(matrix, options = {}) {\n  const {\n    maxRows = 15,\n    maxColumns = 10,\n    maxNumSize = 8,\n    padMinus = 'auto',\n  } = options;\n  return `${matrix.constructor.name} {\n${indent}[\n${indentData}${inspectData(matrix, maxRows, maxColumns, maxNumSize, padMinus)}\n${indent}]\n${indent}rows: ${matrix.rows}\n${indent}columns: ${matrix.columns}\n}`;\n}\n\nfunction inspectData(matrix, maxRows, maxColumns, maxNumSize, padMinus) {\n  const { rows, columns } = matrix;\n  const maxI = Math.min(rows, maxRows);\n  const maxJ = Math.min(columns, maxColumns);\n  const result = [];\n\n  if (padMinus === 'auto') {\n    padMinus = false;\n    loop: for (let i = 0; i < maxI; i++) {\n      for (let j = 0; j < maxJ; j++) {\n        if (matrix.get(i, j) < 0) {\n          padMinus = true;\n          break loop;\n        }\n      }\n    }\n  }\n\n  for (let i = 0; i < maxI; i++) {\n    let line = [];\n    for (let j = 0; j < maxJ; j++) {\n      line.push(formatNumber(matrix.get(i, j), maxNumSize, padMinus));\n    }\n    result.push(`${line.join(' ')}`);\n  }\n  if (maxJ !== columns) {\n    result[result.length - 1] += ` ... ${columns - maxColumns} more columns`;\n  }\n  if (maxI !== rows) {\n    result.push(`... ${rows - maxRows} more rows`);\n  }\n  return result.join(`\\n${indentData}`);\n}\n\nfunction formatNumber(num, maxNumSize, padMinus) {\n  return (\n    num >= 0 && padMinus\n      ? ` ${formatNumber2(num, maxNumSize - 1)}`\n      : formatNumber2(num, maxNumSize)\n  ).padEnd(maxNumSize);\n}\n\nfunction formatNumber2(num, len) {\n  // small.length numbers should be as is\n  let str = num.toString();\n  if (str.length <= len) return str;\n\n  // (7)'0.00123' is better then (7)'1.23e-2'\n  // (8)'0.000123' is worse then (7)'1.23e-3',\n  let fix = num.toFixed(len);\n  if (fix.length > len) {\n    fix = num.toFixed(Math.max(0, len - (fix.length - len)));\n  }\n  if (\n    fix.length <= len &&\n    !fix.startsWith('0.000') &&\n    !fix.startsWith('-0.000')\n  ) {\n    return fix;\n  }\n\n  // well, if it's still too long the user should've used longer numbers\n  let exp = num.toExponential(len);\n  if (exp.length > len) {\n    exp = num.toExponential(Math.max(0, len - (exp.length - len)));\n  }\n  return exp.slice(0);\n}\n\nfunction installMathOperations(AbstractMatrix, Matrix) {\n  AbstractMatrix.prototype.add = function add(value) {\n    if (typeof value === 'number') return this.addS(value);\n    return this.addM(value);\n  };\n\n  AbstractMatrix.prototype.addS = function addS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.addM = function addM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.add = function add(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.add(value);\n  };\n\n  AbstractMatrix.prototype.sub = function sub(value) {\n    if (typeof value === 'number') return this.subS(value);\n    return this.subM(value);\n  };\n\n  AbstractMatrix.prototype.subS = function subS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.subM = function subM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sub = function sub(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sub(value);\n  };\n  AbstractMatrix.prototype.subtract = AbstractMatrix.prototype.sub;\n  AbstractMatrix.prototype.subtractS = AbstractMatrix.prototype.subS;\n  AbstractMatrix.prototype.subtractM = AbstractMatrix.prototype.subM;\n  AbstractMatrix.subtract = AbstractMatrix.sub;\n\n  AbstractMatrix.prototype.mul = function mul(value) {\n    if (typeof value === 'number') return this.mulS(value);\n    return this.mulM(value);\n  };\n\n  AbstractMatrix.prototype.mulS = function mulS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.mulM = function mulM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.mul = function mul(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.mul(value);\n  };\n  AbstractMatrix.prototype.multiply = AbstractMatrix.prototype.mul;\n  AbstractMatrix.prototype.multiplyS = AbstractMatrix.prototype.mulS;\n  AbstractMatrix.prototype.multiplyM = AbstractMatrix.prototype.mulM;\n  AbstractMatrix.multiply = AbstractMatrix.mul;\n\n  AbstractMatrix.prototype.div = function div(value) {\n    if (typeof value === 'number') return this.divS(value);\n    return this.divM(value);\n  };\n\n  AbstractMatrix.prototype.divS = function divS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.divM = function divM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.div = function div(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.div(value);\n  };\n  AbstractMatrix.prototype.divide = AbstractMatrix.prototype.div;\n  AbstractMatrix.prototype.divideS = AbstractMatrix.prototype.divS;\n  AbstractMatrix.prototype.divideM = AbstractMatrix.prototype.divM;\n  AbstractMatrix.divide = AbstractMatrix.div;\n\n  AbstractMatrix.prototype.mod = function mod(value) {\n    if (typeof value === 'number') return this.modS(value);\n    return this.modM(value);\n  };\n\n  AbstractMatrix.prototype.modS = function modS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) % value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.modM = function modM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) % matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.mod = function mod(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.mod(value);\n  };\n  AbstractMatrix.prototype.modulus = AbstractMatrix.prototype.mod;\n  AbstractMatrix.prototype.modulusS = AbstractMatrix.prototype.modS;\n  AbstractMatrix.prototype.modulusM = AbstractMatrix.prototype.modM;\n  AbstractMatrix.modulus = AbstractMatrix.mod;\n\n  AbstractMatrix.prototype.and = function and(value) {\n    if (typeof value === 'number') return this.andS(value);\n    return this.andM(value);\n  };\n\n  AbstractMatrix.prototype.andS = function andS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) & value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.andM = function andM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) & matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.and = function and(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.and(value);\n  };\n\n  AbstractMatrix.prototype.or = function or(value) {\n    if (typeof value === 'number') return this.orS(value);\n    return this.orM(value);\n  };\n\n  AbstractMatrix.prototype.orS = function orS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) | value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.orM = function orM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) | matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.or = function or(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.or(value);\n  };\n\n  AbstractMatrix.prototype.xor = function xor(value) {\n    if (typeof value === 'number') return this.xorS(value);\n    return this.xorM(value);\n  };\n\n  AbstractMatrix.prototype.xorS = function xorS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) ^ value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.xorM = function xorM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) ^ matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.xor = function xor(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.xor(value);\n  };\n\n  AbstractMatrix.prototype.leftShift = function leftShift(value) {\n    if (typeof value === 'number') return this.leftShiftS(value);\n    return this.leftShiftM(value);\n  };\n\n  AbstractMatrix.prototype.leftShiftS = function leftShiftS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) << value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.leftShiftM = function leftShiftM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) << matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.leftShift = function leftShift(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.leftShift(value);\n  };\n\n  AbstractMatrix.prototype.signPropagatingRightShift = function signPropagatingRightShift(value) {\n    if (typeof value === 'number') return this.signPropagatingRightShiftS(value);\n    return this.signPropagatingRightShiftM(value);\n  };\n\n  AbstractMatrix.prototype.signPropagatingRightShiftS = function signPropagatingRightShiftS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >> value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.signPropagatingRightShiftM = function signPropagatingRightShiftM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >> matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.signPropagatingRightShift = function signPropagatingRightShift(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.signPropagatingRightShift(value);\n  };\n\n  AbstractMatrix.prototype.rightShift = function rightShift(value) {\n    if (typeof value === 'number') return this.rightShiftS(value);\n    return this.rightShiftM(value);\n  };\n\n  AbstractMatrix.prototype.rightShiftS = function rightShiftS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >>> value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.rightShiftM = function rightShiftM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >>> matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.rightShift = function rightShift(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.rightShift(value);\n  };\n  AbstractMatrix.prototype.zeroFillRightShift = AbstractMatrix.prototype.rightShift;\n  AbstractMatrix.prototype.zeroFillRightShiftS = AbstractMatrix.prototype.rightShiftS;\n  AbstractMatrix.prototype.zeroFillRightShiftM = AbstractMatrix.prototype.rightShiftM;\n  AbstractMatrix.zeroFillRightShift = AbstractMatrix.rightShift;\n\n  AbstractMatrix.prototype.not = function not() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, ~(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.not = function not(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.not();\n  };\n\n  AbstractMatrix.prototype.abs = function abs() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.abs(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.abs = function abs(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.abs();\n  };\n\n  AbstractMatrix.prototype.acos = function acos() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.acos(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.acos = function acos(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.acos();\n  };\n\n  AbstractMatrix.prototype.acosh = function acosh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.acosh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.acosh = function acosh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.acosh();\n  };\n\n  AbstractMatrix.prototype.asin = function asin() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.asin(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.asin = function asin(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.asin();\n  };\n\n  AbstractMatrix.prototype.asinh = function asinh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.asinh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.asinh = function asinh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.asinh();\n  };\n\n  AbstractMatrix.prototype.atan = function atan() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.atan(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.atan = function atan(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.atan();\n  };\n\n  AbstractMatrix.prototype.atanh = function atanh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.atanh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.atanh = function atanh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.atanh();\n  };\n\n  AbstractMatrix.prototype.cbrt = function cbrt() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.cbrt(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.cbrt = function cbrt(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.cbrt();\n  };\n\n  AbstractMatrix.prototype.ceil = function ceil() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.ceil(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.ceil = function ceil(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.ceil();\n  };\n\n  AbstractMatrix.prototype.clz32 = function clz32() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.clz32(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.clz32 = function clz32(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.clz32();\n  };\n\n  AbstractMatrix.prototype.cos = function cos() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.cos(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.cos = function cos(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.cos();\n  };\n\n  AbstractMatrix.prototype.cosh = function cosh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.cosh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.cosh = function cosh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.cosh();\n  };\n\n  AbstractMatrix.prototype.exp = function exp() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.exp(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.exp = function exp(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.exp();\n  };\n\n  AbstractMatrix.prototype.expm1 = function expm1() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.expm1(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.expm1 = function expm1(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.expm1();\n  };\n\n  AbstractMatrix.prototype.floor = function floor() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.floor(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.floor = function floor(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.floor();\n  };\n\n  AbstractMatrix.prototype.fround = function fround() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.fround(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.fround = function fround(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.fround();\n  };\n\n  AbstractMatrix.prototype.log = function log() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log = function log(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log();\n  };\n\n  AbstractMatrix.prototype.log1p = function log1p() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log1p(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log1p = function log1p(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log1p();\n  };\n\n  AbstractMatrix.prototype.log10 = function log10() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log10(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log10 = function log10(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log10();\n  };\n\n  AbstractMatrix.prototype.log2 = function log2() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log2(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log2 = function log2(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log2();\n  };\n\n  AbstractMatrix.prototype.round = function round() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.round(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.round = function round(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.round();\n  };\n\n  AbstractMatrix.prototype.sign = function sign() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sign(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sign = function sign(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sign();\n  };\n\n  AbstractMatrix.prototype.sin = function sin() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sin(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sin = function sin(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sin();\n  };\n\n  AbstractMatrix.prototype.sinh = function sinh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sinh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sinh = function sinh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sinh();\n  };\n\n  AbstractMatrix.prototype.sqrt = function sqrt() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sqrt(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sqrt = function sqrt(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sqrt();\n  };\n\n  AbstractMatrix.prototype.tan = function tan() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.tan(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.tan = function tan(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.tan();\n  };\n\n  AbstractMatrix.prototype.tanh = function tanh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.tanh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.tanh = function tanh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.tanh();\n  };\n\n  AbstractMatrix.prototype.trunc = function trunc() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.trunc(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.trunc = function trunc(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.trunc();\n  };\n\n  AbstractMatrix.pow = function pow(matrix, arg0) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.pow(arg0);\n  };\n\n  AbstractMatrix.prototype.pow = function pow(value) {\n    if (typeof value === 'number') return this.powS(value);\n    return this.powM(value);\n  };\n\n  AbstractMatrix.prototype.powS = function powS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) ** value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.powM = function powM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) ** matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n}\n\n/**\n * @private\n * Check that a row index is not out of bounds\n * @param {Matrix} matrix\n * @param {number} index\n * @param {boolean} [outer]\n */\nfunction checkRowIndex(matrix, index, outer) {\n  let max = outer ? matrix.rows : matrix.rows - 1;\n  if (index < 0 || index > max) {\n    throw new RangeError('Row index out of range');\n  }\n}\n\n/**\n * @private\n * Check that a column index is not out of bounds\n * @param {Matrix} matrix\n * @param {number} index\n * @param {boolean} [outer]\n */\nfunction checkColumnIndex(matrix, index, outer) {\n  let max = outer ? matrix.columns : matrix.columns - 1;\n  if (index < 0 || index > max) {\n    throw new RangeError('Column index out of range');\n  }\n}\n\n/**\n * @private\n * Check that the provided vector is an array with the right length\n * @param {Matrix} matrix\n * @param {Array|Matrix} vector\n * @return {Array}\n * @throws {RangeError}\n */\nfunction checkRowVector(matrix, vector) {\n  if (vector.to1DArray) {\n    vector = vector.to1DArray();\n  }\n  if (vector.length !== matrix.columns) {\n    throw new RangeError(\n      'vector size must be the same as the number of columns',\n    );\n  }\n  return vector;\n}\n\n/**\n * @private\n * Check that the provided vector is an array with the right length\n * @param {Matrix} matrix\n * @param {Array|Matrix} vector\n * @return {Array}\n * @throws {RangeError}\n */\nfunction checkColumnVector(matrix, vector) {\n  if (vector.to1DArray) {\n    vector = vector.to1DArray();\n  }\n  if (vector.length !== matrix.rows) {\n    throw new RangeError('vector size must be the same as the number of rows');\n  }\n  return vector;\n}\n\nfunction checkRowIndices(matrix, rowIndices) {\n  if (!isAnyArray(rowIndices)) {\n    throw new TypeError('row indices must be an array');\n  }\n\n  for (let i = 0; i < rowIndices.length; i++) {\n    if (rowIndices[i] < 0 || rowIndices[i] >= matrix.rows) {\n      throw new RangeError('row indices are out of range');\n    }\n  }\n}\n\nfunction checkColumnIndices(matrix, columnIndices) {\n  if (!isAnyArray(columnIndices)) {\n    throw new TypeError('column indices must be an array');\n  }\n\n  for (let i = 0; i < columnIndices.length; i++) {\n    if (columnIndices[i] < 0 || columnIndices[i] >= matrix.columns) {\n      throw new RangeError('column indices are out of range');\n    }\n  }\n}\n\nfunction checkRange(matrix, startRow, endRow, startColumn, endColumn) {\n  if (arguments.length !== 5) {\n    throw new RangeError('expected 4 arguments');\n  }\n  checkNumber('startRow', startRow);\n  checkNumber('endRow', endRow);\n  checkNumber('startColumn', startColumn);\n  checkNumber('endColumn', endColumn);\n  if (\n    startRow > endRow ||\n    startColumn > endColumn ||\n    startRow < 0 ||\n    startRow >= matrix.rows ||\n    endRow < 0 ||\n    endRow >= matrix.rows ||\n    startColumn < 0 ||\n    startColumn >= matrix.columns ||\n    endColumn < 0 ||\n    endColumn >= matrix.columns\n  ) {\n    throw new RangeError('Submatrix indices are out of range');\n  }\n}\n\nfunction newArray(length, value = 0) {\n  let array = [];\n  for (let i = 0; i < length; i++) {\n    array.push(value);\n  }\n  return array;\n}\n\nfunction checkNumber(name, value) {\n  if (typeof value !== 'number') {\n    throw new TypeError(`${name} must be a number`);\n  }\n}\n\nfunction checkNonEmpty(matrix) {\n  if (matrix.isEmpty()) {\n    throw new Error('Empty matrix has no elements to index');\n  }\n}\n\nfunction sumByRow(matrix) {\n  let sum = newArray(matrix.rows);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[i] += matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nfunction sumByColumn(matrix) {\n  let sum = newArray(matrix.columns);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[j] += matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nfunction sumAll(matrix) {\n  let v = 0;\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      v += matrix.get(i, j);\n    }\n  }\n  return v;\n}\n\nfunction productByRow(matrix) {\n  let sum = newArray(matrix.rows, 1);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[i] *= matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nfunction productByColumn(matrix) {\n  let sum = newArray(matrix.columns, 1);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[j] *= matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nfunction productAll(matrix) {\n  let v = 1;\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      v *= matrix.get(i, j);\n    }\n  }\n  return v;\n}\n\nfunction varianceByRow(matrix, unbiased, mean) {\n  const rows = matrix.rows;\n  const cols = matrix.columns;\n  const variance = [];\n\n  for (let i = 0; i < rows; i++) {\n    let sum1 = 0;\n    let sum2 = 0;\n    let x = 0;\n    for (let j = 0; j < cols; j++) {\n      x = matrix.get(i, j) - mean[i];\n      sum1 += x;\n      sum2 += x * x;\n    }\n    if (unbiased) {\n      variance.push((sum2 - (sum1 * sum1) / cols) / (cols - 1));\n    } else {\n      variance.push((sum2 - (sum1 * sum1) / cols) / cols);\n    }\n  }\n  return variance;\n}\n\nfunction varianceByColumn(matrix, unbiased, mean) {\n  const rows = matrix.rows;\n  const cols = matrix.columns;\n  const variance = [];\n\n  for (let j = 0; j < cols; j++) {\n    let sum1 = 0;\n    let sum2 = 0;\n    let x = 0;\n    for (let i = 0; i < rows; i++) {\n      x = matrix.get(i, j) - mean[j];\n      sum1 += x;\n      sum2 += x * x;\n    }\n    if (unbiased) {\n      variance.push((sum2 - (sum1 * sum1) / rows) / (rows - 1));\n    } else {\n      variance.push((sum2 - (sum1 * sum1) / rows) / rows);\n    }\n  }\n  return variance;\n}\n\nfunction varianceAll(matrix, unbiased, mean) {\n  const rows = matrix.rows;\n  const cols = matrix.columns;\n  const size = rows * cols;\n\n  let sum1 = 0;\n  let sum2 = 0;\n  let x = 0;\n  for (let i = 0; i < rows; i++) {\n    for (let j = 0; j < cols; j++) {\n      x = matrix.get(i, j) - mean;\n      sum1 += x;\n      sum2 += x * x;\n    }\n  }\n  if (unbiased) {\n    return (sum2 - (sum1 * sum1) / size) / (size - 1);\n  } else {\n    return (sum2 - (sum1 * sum1) / size) / size;\n  }\n}\n\nfunction centerByRow(matrix, mean) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) - mean[i]);\n    }\n  }\n}\n\nfunction centerByColumn(matrix, mean) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) - mean[j]);\n    }\n  }\n}\n\nfunction centerAll(matrix, mean) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) - mean);\n    }\n  }\n}\n\nfunction getScaleByRow(matrix) {\n  const scale = [];\n  for (let i = 0; i < matrix.rows; i++) {\n    let sum = 0;\n    for (let j = 0; j < matrix.columns; j++) {\n      sum += matrix.get(i, j) ** 2 / (matrix.columns - 1);\n    }\n    scale.push(Math.sqrt(sum));\n  }\n  return scale;\n}\n\nfunction scaleByRow(matrix, scale) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) / scale[i]);\n    }\n  }\n}\n\nfunction getScaleByColumn(matrix) {\n  const scale = [];\n  for (let j = 0; j < matrix.columns; j++) {\n    let sum = 0;\n    for (let i = 0; i < matrix.rows; i++) {\n      sum += matrix.get(i, j) ** 2 / (matrix.rows - 1);\n    }\n    scale.push(Math.sqrt(sum));\n  }\n  return scale;\n}\n\nfunction scaleByColumn(matrix, scale) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) / scale[j]);\n    }\n  }\n}\n\nfunction getScaleAll(matrix) {\n  const divider = matrix.size - 1;\n  let sum = 0;\n  for (let j = 0; j < matrix.columns; j++) {\n    for (let i = 0; i < matrix.rows; i++) {\n      sum += matrix.get(i, j) ** 2 / divider;\n    }\n  }\n  return Math.sqrt(sum);\n}\n\nfunction scaleAll(matrix, scale) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) / scale);\n    }\n  }\n}\n\nclass AbstractMatrix {\n  static from1DArray(newRows, newColumns, newData) {\n    let length = newRows * newColumns;\n    if (length !== newData.length) {\n      throw new RangeError('data length does not match given dimensions');\n    }\n    let newMatrix = new Matrix(newRows, newColumns);\n    for (let row = 0; row < newRows; row++) {\n      for (let column = 0; column < newColumns; column++) {\n        newMatrix.set(row, column, newData[row * newColumns + column]);\n      }\n    }\n    return newMatrix;\n  }\n\n  static rowVector(newData) {\n    let vector = new Matrix(1, newData.length);\n    for (let i = 0; i < newData.length; i++) {\n      vector.set(0, i, newData[i]);\n    }\n    return vector;\n  }\n\n  static columnVector(newData) {\n    let vector = new Matrix(newData.length, 1);\n    for (let i = 0; i < newData.length; i++) {\n      vector.set(i, 0, newData[i]);\n    }\n    return vector;\n  }\n\n  static zeros(rows, columns) {\n    return new Matrix(rows, columns);\n  }\n\n  static ones(rows, columns) {\n    return new Matrix(rows, columns).fill(1);\n  }\n\n  static rand(rows, columns, options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { random = Math.random } = options;\n    let matrix = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        matrix.set(i, j, random());\n      }\n    }\n    return matrix;\n  }\n\n  static randInt(rows, columns, options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { min = 0, max = 1000, random = Math.random } = options;\n    if (!Number.isInteger(min)) throw new TypeError('min must be an integer');\n    if (!Number.isInteger(max)) throw new TypeError('max must be an integer');\n    if (min >= max) throw new RangeError('min must be smaller than max');\n    let interval = max - min;\n    let matrix = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        let value = min + Math.round(random() * interval);\n        matrix.set(i, j, value);\n      }\n    }\n    return matrix;\n  }\n\n  static eye(rows, columns, value) {\n    if (columns === undefined) columns = rows;\n    if (value === undefined) value = 1;\n    let min = Math.min(rows, columns);\n    let matrix = this.zeros(rows, columns);\n    for (let i = 0; i < min; i++) {\n      matrix.set(i, i, value);\n    }\n    return matrix;\n  }\n\n  static diag(data, rows, columns) {\n    let l = data.length;\n    if (rows === undefined) rows = l;\n    if (columns === undefined) columns = rows;\n    let min = Math.min(l, rows, columns);\n    let matrix = this.zeros(rows, columns);\n    for (let i = 0; i < min; i++) {\n      matrix.set(i, i, data[i]);\n    }\n    return matrix;\n  }\n\n  static min(matrix1, matrix2) {\n    matrix1 = this.checkMatrix(matrix1);\n    matrix2 = this.checkMatrix(matrix2);\n    let rows = matrix1.rows;\n    let columns = matrix1.columns;\n    let result = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        result.set(i, j, Math.min(matrix1.get(i, j), matrix2.get(i, j)));\n      }\n    }\n    return result;\n  }\n\n  static max(matrix1, matrix2) {\n    matrix1 = this.checkMatrix(matrix1);\n    matrix2 = this.checkMatrix(matrix2);\n    let rows = matrix1.rows;\n    let columns = matrix1.columns;\n    let result = new this(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        result.set(i, j, Math.max(matrix1.get(i, j), matrix2.get(i, j)));\n      }\n    }\n    return result;\n  }\n\n  static checkMatrix(value) {\n    return AbstractMatrix.isMatrix(value) ? value : new Matrix(value);\n  }\n\n  static isMatrix(value) {\n    return value != null && value.klass === 'Matrix';\n  }\n\n  get size() {\n    return this.rows * this.columns;\n  }\n\n  apply(callback) {\n    if (typeof callback !== 'function') {\n      throw new TypeError('callback must be a function');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        callback.call(this, i, j);\n      }\n    }\n    return this;\n  }\n\n  to1DArray() {\n    let array = [];\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        array.push(this.get(i, j));\n      }\n    }\n    return array;\n  }\n\n  to2DArray() {\n    let copy = [];\n    for (let i = 0; i < this.rows; i++) {\n      copy.push([]);\n      for (let j = 0; j < this.columns; j++) {\n        copy[i].push(this.get(i, j));\n      }\n    }\n    return copy;\n  }\n\n  toJSON() {\n    return this.to2DArray();\n  }\n\n  isRowVector() {\n    return this.rows === 1;\n  }\n\n  isColumnVector() {\n    return this.columns === 1;\n  }\n\n  isVector() {\n    return this.rows === 1 || this.columns === 1;\n  }\n\n  isSquare() {\n    return this.rows === this.columns;\n  }\n\n  isEmpty() {\n    return this.rows === 0 || this.columns === 0;\n  }\n\n  isSymmetric() {\n    if (this.isSquare()) {\n      for (let i = 0; i < this.rows; i++) {\n        for (let j = 0; j <= i; j++) {\n          if (this.get(i, j) !== this.get(j, i)) {\n            return false;\n          }\n        }\n      }\n      return true;\n    }\n    return false;\n  }\n\n  isDistance() {\n    if (!this.isSymmetric()) return false;\n\n    for (let i = 0; i < this.rows; i++) {\n      if (this.get(i, i) !== 0) return false;\n    }\n\n    return true;\n  }\n\n  isEchelonForm() {\n    let i = 0;\n    let j = 0;\n    let previousColumn = -1;\n    let isEchelonForm = true;\n    let checked = false;\n    while (i < this.rows && isEchelonForm) {\n      j = 0;\n      checked = false;\n      while (j < this.columns && checked === false) {\n        if (this.get(i, j) === 0) {\n          j++;\n        } else if (this.get(i, j) === 1 && j > previousColumn) {\n          checked = true;\n          previousColumn = j;\n        } else {\n          isEchelonForm = false;\n          checked = true;\n        }\n      }\n      i++;\n    }\n    return isEchelonForm;\n  }\n\n  isReducedEchelonForm() {\n    let i = 0;\n    let j = 0;\n    let previousColumn = -1;\n    let isReducedEchelonForm = true;\n    let checked = false;\n    while (i < this.rows && isReducedEchelonForm) {\n      j = 0;\n      checked = false;\n      while (j < this.columns && checked === false) {\n        if (this.get(i, j) === 0) {\n          j++;\n        } else if (this.get(i, j) === 1 && j > previousColumn) {\n          checked = true;\n          previousColumn = j;\n        } else {\n          isReducedEchelonForm = false;\n          checked = true;\n        }\n      }\n      for (let k = j + 1; k < this.rows; k++) {\n        if (this.get(i, k) !== 0) {\n          isReducedEchelonForm = false;\n        }\n      }\n      i++;\n    }\n    return isReducedEchelonForm;\n  }\n\n  echelonForm() {\n    let result = this.clone();\n    let h = 0;\n    let k = 0;\n    while (h < result.rows && k < result.columns) {\n      let iMax = h;\n      for (let i = h; i < result.rows; i++) {\n        if (result.get(i, k) > result.get(iMax, k)) {\n          iMax = i;\n        }\n      }\n      if (result.get(iMax, k) === 0) {\n        k++;\n      } else {\n        result.swapRows(h, iMax);\n        let tmp = result.get(h, k);\n        for (let j = k; j < result.columns; j++) {\n          result.set(h, j, result.get(h, j) / tmp);\n        }\n        for (let i = h + 1; i < result.rows; i++) {\n          let factor = result.get(i, k) / result.get(h, k);\n          result.set(i, k, 0);\n          for (let j = k + 1; j < result.columns; j++) {\n            result.set(i, j, result.get(i, j) - result.get(h, j) * factor);\n          }\n        }\n        h++;\n        k++;\n      }\n    }\n    return result;\n  }\n\n  reducedEchelonForm() {\n    let result = this.echelonForm();\n    let m = result.columns;\n    let n = result.rows;\n    let h = n - 1;\n    while (h >= 0) {\n      if (result.maxRow(h) === 0) {\n        h--;\n      } else {\n        let p = 0;\n        let pivot = false;\n        while (p < n && pivot === false) {\n          if (result.get(h, p) === 1) {\n            pivot = true;\n          } else {\n            p++;\n          }\n        }\n        for (let i = 0; i < h; i++) {\n          let factor = result.get(i, p);\n          for (let j = p; j < m; j++) {\n            let tmp = result.get(i, j) - factor * result.get(h, j);\n            result.set(i, j, tmp);\n          }\n        }\n        h--;\n      }\n    }\n    return result;\n  }\n\n  set() {\n    throw new Error('set method is unimplemented');\n  }\n\n  get() {\n    throw new Error('get method is unimplemented');\n  }\n\n  repeat(options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { rows = 1, columns = 1 } = options;\n    if (!Number.isInteger(rows) || rows <= 0) {\n      throw new TypeError('rows must be a positive integer');\n    }\n    if (!Number.isInteger(columns) || columns <= 0) {\n      throw new TypeError('columns must be a positive integer');\n    }\n    let matrix = new Matrix(this.rows * rows, this.columns * columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        matrix.setSubMatrix(this, this.rows * i, this.columns * j);\n      }\n    }\n    return matrix;\n  }\n\n  fill(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, value);\n      }\n    }\n    return this;\n  }\n\n  neg() {\n    return this.mulS(-1);\n  }\n\n  getRow(index) {\n    checkRowIndex(this, index);\n    let row = [];\n    for (let i = 0; i < this.columns; i++) {\n      row.push(this.get(index, i));\n    }\n    return row;\n  }\n\n  getRowVector(index) {\n    return Matrix.rowVector(this.getRow(index));\n  }\n\n  setRow(index, array) {\n    checkRowIndex(this, index);\n    array = checkRowVector(this, array);\n    for (let i = 0; i < this.columns; i++) {\n      this.set(index, i, array[i]);\n    }\n    return this;\n  }\n\n  swapRows(row1, row2) {\n    checkRowIndex(this, row1);\n    checkRowIndex(this, row2);\n    for (let i = 0; i < this.columns; i++) {\n      let temp = this.get(row1, i);\n      this.set(row1, i, this.get(row2, i));\n      this.set(row2, i, temp);\n    }\n    return this;\n  }\n\n  getColumn(index) {\n    checkColumnIndex(this, index);\n    let column = [];\n    for (let i = 0; i < this.rows; i++) {\n      column.push(this.get(i, index));\n    }\n    return column;\n  }\n\n  getColumnVector(index) {\n    return Matrix.columnVector(this.getColumn(index));\n  }\n\n  setColumn(index, array) {\n    checkColumnIndex(this, index);\n    array = checkColumnVector(this, array);\n    for (let i = 0; i < this.rows; i++) {\n      this.set(i, index, array[i]);\n    }\n    return this;\n  }\n\n  swapColumns(column1, column2) {\n    checkColumnIndex(this, column1);\n    checkColumnIndex(this, column2);\n    for (let i = 0; i < this.rows; i++) {\n      let temp = this.get(i, column1);\n      this.set(i, column1, this.get(i, column2));\n      this.set(i, column2, temp);\n    }\n    return this;\n  }\n\n  addRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + vector[j]);\n      }\n    }\n    return this;\n  }\n\n  subRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - vector[j]);\n      }\n    }\n    return this;\n  }\n\n  mulRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * vector[j]);\n      }\n    }\n    return this;\n  }\n\n  divRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / vector[j]);\n      }\n    }\n    return this;\n  }\n\n  addColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + vector[i]);\n      }\n    }\n    return this;\n  }\n\n  subColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - vector[i]);\n      }\n    }\n    return this;\n  }\n\n  mulColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * vector[i]);\n      }\n    }\n    return this;\n  }\n\n  divColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / vector[i]);\n      }\n    }\n    return this;\n  }\n\n  mulRow(index, value) {\n    checkRowIndex(this, index);\n    for (let i = 0; i < this.columns; i++) {\n      this.set(index, i, this.get(index, i) * value);\n    }\n    return this;\n  }\n\n  mulColumn(index, value) {\n    checkColumnIndex(this, index);\n    for (let i = 0; i < this.rows; i++) {\n      this.set(i, index, this.get(i, index) * value);\n    }\n    return this;\n  }\n\n  max(by) {\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    switch (by) {\n      case 'row': {\n        const max = new Array(this.rows).fill(Number.NEGATIVE_INFINITY);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) > max[row]) {\n              max[row] = this.get(row, column);\n            }\n          }\n        }\n        return max;\n      }\n      case 'column': {\n        const max = new Array(this.columns).fill(Number.NEGATIVE_INFINITY);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) > max[column]) {\n              max[column] = this.get(row, column);\n            }\n          }\n        }\n        return max;\n      }\n      case undefined: {\n        let max = this.get(0, 0);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) > max) {\n              max = this.get(row, column);\n            }\n          }\n        }\n        return max;\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  maxIndex() {\n    checkNonEmpty(this);\n    let v = this.get(0, 0);\n    let idx = [0, 0];\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        if (this.get(i, j) > v) {\n          v = this.get(i, j);\n          idx[0] = i;\n          idx[1] = j;\n        }\n      }\n    }\n    return idx;\n  }\n\n  min(by) {\n    if (this.isEmpty()) {\n      return NaN;\n    }\n\n    switch (by) {\n      case 'row': {\n        const min = new Array(this.rows).fill(Number.POSITIVE_INFINITY);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) < min[row]) {\n              min[row] = this.get(row, column);\n            }\n          }\n        }\n        return min;\n      }\n      case 'column': {\n        const min = new Array(this.columns).fill(Number.POSITIVE_INFINITY);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) < min[column]) {\n              min[column] = this.get(row, column);\n            }\n          }\n        }\n        return min;\n      }\n      case undefined: {\n        let min = this.get(0, 0);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) < min) {\n              min = this.get(row, column);\n            }\n          }\n        }\n        return min;\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  minIndex() {\n    checkNonEmpty(this);\n    let v = this.get(0, 0);\n    let idx = [0, 0];\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        if (this.get(i, j) < v) {\n          v = this.get(i, j);\n          idx[0] = i;\n          idx[1] = j;\n        }\n      }\n    }\n    return idx;\n  }\n\n  maxRow(row) {\n    checkRowIndex(this, row);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(row, 0);\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) > v) {\n        v = this.get(row, i);\n      }\n    }\n    return v;\n  }\n\n  maxRowIndex(row) {\n    checkRowIndex(this, row);\n    checkNonEmpty(this);\n    let v = this.get(row, 0);\n    let idx = [row, 0];\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) > v) {\n        v = this.get(row, i);\n        idx[1] = i;\n      }\n    }\n    return idx;\n  }\n\n  minRow(row) {\n    checkRowIndex(this, row);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(row, 0);\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) < v) {\n        v = this.get(row, i);\n      }\n    }\n    return v;\n  }\n\n  minRowIndex(row) {\n    checkRowIndex(this, row);\n    checkNonEmpty(this);\n    let v = this.get(row, 0);\n    let idx = [row, 0];\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) < v) {\n        v = this.get(row, i);\n        idx[1] = i;\n      }\n    }\n    return idx;\n  }\n\n  maxColumn(column) {\n    checkColumnIndex(this, column);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(0, column);\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) > v) {\n        v = this.get(i, column);\n      }\n    }\n    return v;\n  }\n\n  maxColumnIndex(column) {\n    checkColumnIndex(this, column);\n    checkNonEmpty(this);\n    let v = this.get(0, column);\n    let idx = [0, column];\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) > v) {\n        v = this.get(i, column);\n        idx[0] = i;\n      }\n    }\n    return idx;\n  }\n\n  minColumn(column) {\n    checkColumnIndex(this, column);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(0, column);\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) < v) {\n        v = this.get(i, column);\n      }\n    }\n    return v;\n  }\n\n  minColumnIndex(column) {\n    checkColumnIndex(this, column);\n    checkNonEmpty(this);\n    let v = this.get(0, column);\n    let idx = [0, column];\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) < v) {\n        v = this.get(i, column);\n        idx[0] = i;\n      }\n    }\n    return idx;\n  }\n\n  diag() {\n    let min = Math.min(this.rows, this.columns);\n    let diag = [];\n    for (let i = 0; i < min; i++) {\n      diag.push(this.get(i, i));\n    }\n    return diag;\n  }\n\n  norm(type = 'frobenius') {\n    switch (type) {\n      case 'max':\n        return this.max();\n      case 'frobenius':\n        return Math.sqrt(this.dot(this));\n      default:\n        throw new RangeError(`unknown norm type: ${type}`);\n    }\n  }\n\n  cumulativeSum() {\n    let sum = 0;\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        sum += this.get(i, j);\n        this.set(i, j, sum);\n      }\n    }\n    return this;\n  }\n\n  dot(vector2) {\n    if (AbstractMatrix.isMatrix(vector2)) vector2 = vector2.to1DArray();\n    let vector1 = this.to1DArray();\n    if (vector1.length !== vector2.length) {\n      throw new RangeError('vectors do not have the same size');\n    }\n    let dot = 0;\n    for (let i = 0; i < vector1.length; i++) {\n      dot += vector1[i] * vector2[i];\n    }\n    return dot;\n  }\n\n  mmul(other) {\n    other = Matrix.checkMatrix(other);\n\n    let m = this.rows;\n    let n = this.columns;\n    let p = other.columns;\n\n    let result = new Matrix(m, p);\n\n    let Bcolj = new Float64Array(n);\n    for (let j = 0; j < p; j++) {\n      for (let k = 0; k < n; k++) {\n        Bcolj[k] = other.get(k, j);\n      }\n\n      for (let i = 0; i < m; i++) {\n        let s = 0;\n        for (let k = 0; k < n; k++) {\n          s += this.get(i, k) * Bcolj[k];\n        }\n\n        result.set(i, j, s);\n      }\n    }\n    return result;\n  }\n\n  mpow(scalar) {\n    if (!this.isSquare()) {\n      throw new RangeError('Matrix must be square');\n    }\n    if (!Number.isInteger(scalar) || scalar < 0) {\n      throw new RangeError('Exponent must be a non-negative integer');\n    }\n    // Russian Peasant exponentiation, i.e. exponentiation by squaring\n    let result = Matrix.eye(this.rows);\n    let bb = this;\n    // Note: Don't bit shift. In JS, that would truncate at 32 bits\n    for (let e = scalar; e >= 1; e /= 2) {\n      if ((e & 1) !== 0) {\n        result = result.mmul(bb);\n      }\n      bb = bb.mmul(bb);\n    }\n    return result;\n  }\n\n  strassen2x2(other) {\n    other = Matrix.checkMatrix(other);\n    let result = new Matrix(2, 2);\n    const a11 = this.get(0, 0);\n    const b11 = other.get(0, 0);\n    const a12 = this.get(0, 1);\n    const b12 = other.get(0, 1);\n    const a21 = this.get(1, 0);\n    const b21 = other.get(1, 0);\n    const a22 = this.get(1, 1);\n    const b22 = other.get(1, 1);\n\n    // Compute intermediate values.\n    const m1 = (a11 + a22) * (b11 + b22);\n    const m2 = (a21 + a22) * b11;\n    const m3 = a11 * (b12 - b22);\n    const m4 = a22 * (b21 - b11);\n    const m5 = (a11 + a12) * b22;\n    const m6 = (a21 - a11) * (b11 + b12);\n    const m7 = (a12 - a22) * (b21 + b22);\n\n    // Combine intermediate values into the output.\n    const c00 = m1 + m4 - m5 + m7;\n    const c01 = m3 + m5;\n    const c10 = m2 + m4;\n    const c11 = m1 - m2 + m3 + m6;\n\n    result.set(0, 0, c00);\n    result.set(0, 1, c01);\n    result.set(1, 0, c10);\n    result.set(1, 1, c11);\n    return result;\n  }\n\n  strassen3x3(other) {\n    other = Matrix.checkMatrix(other);\n    let result = new Matrix(3, 3);\n\n    const a00 = this.get(0, 0);\n    const a01 = this.get(0, 1);\n    const a02 = this.get(0, 2);\n    const a10 = this.get(1, 0);\n    const a11 = this.get(1, 1);\n    const a12 = this.get(1, 2);\n    const a20 = this.get(2, 0);\n    const a21 = this.get(2, 1);\n    const a22 = this.get(2, 2);\n\n    const b00 = other.get(0, 0);\n    const b01 = other.get(0, 1);\n    const b02 = other.get(0, 2);\n    const b10 = other.get(1, 0);\n    const b11 = other.get(1, 1);\n    const b12 = other.get(1, 2);\n    const b20 = other.get(2, 0);\n    const b21 = other.get(2, 1);\n    const b22 = other.get(2, 2);\n\n    const m1 = (a00 + a01 + a02 - a10 - a11 - a21 - a22) * b11;\n    const m2 = (a00 - a10) * (-b01 + b11);\n    const m3 = a11 * (-b00 + b01 + b10 - b11 - b12 - b20 + b22);\n    const m4 = (-a00 + a10 + a11) * (b00 - b01 + b11);\n    const m5 = (a10 + a11) * (-b00 + b01);\n    const m6 = a00 * b00;\n    const m7 = (-a00 + a20 + a21) * (b00 - b02 + b12);\n    const m8 = (-a00 + a20) * (b02 - b12);\n    const m9 = (a20 + a21) * (-b00 + b02);\n    const m10 = (a00 + a01 + a02 - a11 - a12 - a20 - a21) * b12;\n    const m11 = a21 * (-b00 + b02 + b10 - b11 - b12 - b20 + b21);\n    const m12 = (-a02 + a21 + a22) * (b11 + b20 - b21);\n    const m13 = (a02 - a22) * (b11 - b21);\n    const m14 = a02 * b20;\n    const m15 = (a21 + a22) * (-b20 + b21);\n    const m16 = (-a02 + a11 + a12) * (b12 + b20 - b22);\n    const m17 = (a02 - a12) * (b12 - b22);\n    const m18 = (a11 + a12) * (-b20 + b22);\n    const m19 = a01 * b10;\n    const m20 = a12 * b21;\n    const m21 = a10 * b02;\n    const m22 = a20 * b01;\n    const m23 = a22 * b22;\n\n    const c00 = m6 + m14 + m19;\n    const c01 = m1 + m4 + m5 + m6 + m12 + m14 + m15;\n    const c02 = m6 + m7 + m9 + m10 + m14 + m16 + m18;\n    const c10 = m2 + m3 + m4 + m6 + m14 + m16 + m17;\n    const c11 = m2 + m4 + m5 + m6 + m20;\n    const c12 = m14 + m16 + m17 + m18 + m21;\n    const c20 = m6 + m7 + m8 + m11 + m12 + m13 + m14;\n    const c21 = m12 + m13 + m14 + m15 + m22;\n    const c22 = m6 + m7 + m8 + m9 + m23;\n\n    result.set(0, 0, c00);\n    result.set(0, 1, c01);\n    result.set(0, 2, c02);\n    result.set(1, 0, c10);\n    result.set(1, 1, c11);\n    result.set(1, 2, c12);\n    result.set(2, 0, c20);\n    result.set(2, 1, c21);\n    result.set(2, 2, c22);\n    return result;\n  }\n\n  mmulStrassen(y) {\n    y = Matrix.checkMatrix(y);\n    let x = this.clone();\n    let r1 = x.rows;\n    let c1 = x.columns;\n    let r2 = y.rows;\n    let c2 = y.columns;\n    if (c1 !== r2) {\n      // eslint-disable-next-line no-console\n      console.warn(\n        `Multiplying ${r1} x ${c1} and ${r2} x ${c2} matrix: dimensions do not match.`,\n      );\n    }\n\n    // Put a matrix into the top left of a matrix of zeros.\n    // `rows` and `cols` are the dimensions of the output matrix.\n    function embed(mat, rows, cols) {\n      let r = mat.rows;\n      let c = mat.columns;\n      if (r === rows && c === cols) {\n        return mat;\n      } else {\n        let resultat = AbstractMatrix.zeros(rows, cols);\n        resultat = resultat.setSubMatrix(mat, 0, 0);\n        return resultat;\n      }\n    }\n\n    // Make sure both matrices are the same size.\n    // This is exclusively for simplicity:\n    // this algorithm can be implemented with matrices of different sizes.\n\n    let r = Math.max(r1, r2);\n    let c = Math.max(c1, c2);\n    x = embed(x, r, c);\n    y = embed(y, r, c);\n\n    // Our recursive multiplication function.\n    function blockMult(a, b, rows, cols) {\n      // For small matrices, resort to naive multiplication.\n      if (rows <= 512 || cols <= 512) {\n        return a.mmul(b); // a is equivalent to this\n      }\n\n      // Apply dynamic padding.\n      if (rows % 2 === 1 && cols % 2 === 1) {\n        a = embed(a, rows + 1, cols + 1);\n        b = embed(b, rows + 1, cols + 1);\n      } else if (rows % 2 === 1) {\n        a = embed(a, rows + 1, cols);\n        b = embed(b, rows + 1, cols);\n      } else if (cols % 2 === 1) {\n        a = embed(a, rows, cols + 1);\n        b = embed(b, rows, cols + 1);\n      }\n\n      let halfRows = parseInt(a.rows / 2, 10);\n      let halfCols = parseInt(a.columns / 2, 10);\n      // Subdivide input matrices.\n      let a11 = a.subMatrix(0, halfRows - 1, 0, halfCols - 1);\n      let b11 = b.subMatrix(0, halfRows - 1, 0, halfCols - 1);\n\n      let a12 = a.subMatrix(0, halfRows - 1, halfCols, a.columns - 1);\n      let b12 = b.subMatrix(0, halfRows - 1, halfCols, b.columns - 1);\n\n      let a21 = a.subMatrix(halfRows, a.rows - 1, 0, halfCols - 1);\n      let b21 = b.subMatrix(halfRows, b.rows - 1, 0, halfCols - 1);\n\n      let a22 = a.subMatrix(halfRows, a.rows - 1, halfCols, a.columns - 1);\n      let b22 = b.subMatrix(halfRows, b.rows - 1, halfCols, b.columns - 1);\n\n      // Compute intermediate values.\n      let m1 = blockMult(\n        AbstractMatrix.add(a11, a22),\n        AbstractMatrix.add(b11, b22),\n        halfRows,\n        halfCols,\n      );\n      let m2 = blockMult(AbstractMatrix.add(a21, a22), b11, halfRows, halfCols);\n      let m3 = blockMult(a11, AbstractMatrix.sub(b12, b22), halfRows, halfCols);\n      let m4 = blockMult(a22, AbstractMatrix.sub(b21, b11), halfRows, halfCols);\n      let m5 = blockMult(AbstractMatrix.add(a11, a12), b22, halfRows, halfCols);\n      let m6 = blockMult(\n        AbstractMatrix.sub(a21, a11),\n        AbstractMatrix.add(b11, b12),\n        halfRows,\n        halfCols,\n      );\n      let m7 = blockMult(\n        AbstractMatrix.sub(a12, a22),\n        AbstractMatrix.add(b21, b22),\n        halfRows,\n        halfCols,\n      );\n\n      // Combine intermediate values into the output.\n      let c11 = AbstractMatrix.add(m1, m4);\n      c11.sub(m5);\n      c11.add(m7);\n      let c12 = AbstractMatrix.add(m3, m5);\n      let c21 = AbstractMatrix.add(m2, m4);\n      let c22 = AbstractMatrix.sub(m1, m2);\n      c22.add(m3);\n      c22.add(m6);\n\n      // Crop output to the desired size (undo dynamic padding).\n      let result = AbstractMatrix.zeros(2 * c11.rows, 2 * c11.columns);\n      result = result.setSubMatrix(c11, 0, 0);\n      result = result.setSubMatrix(c12, c11.rows, 0);\n      result = result.setSubMatrix(c21, 0, c11.columns);\n      result = result.setSubMatrix(c22, c11.rows, c11.columns);\n      return result.subMatrix(0, rows - 1, 0, cols - 1);\n    }\n\n    return blockMult(x, y, r, c);\n  }\n\n  scaleRows(options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { min = 0, max = 1 } = options;\n    if (!Number.isFinite(min)) throw new TypeError('min must be a number');\n    if (!Number.isFinite(max)) throw new TypeError('max must be a number');\n    if (min >= max) throw new RangeError('min must be smaller than max');\n    let newMatrix = new Matrix(this.rows, this.columns);\n    for (let i = 0; i < this.rows; i++) {\n      const row = this.getRow(i);\n      if (row.length > 0) {\n        rescale(row, { min, max, output: row });\n      }\n      newMatrix.setRow(i, row);\n    }\n    return newMatrix;\n  }\n\n  scaleColumns(options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { min = 0, max = 1 } = options;\n    if (!Number.isFinite(min)) throw new TypeError('min must be a number');\n    if (!Number.isFinite(max)) throw new TypeError('max must be a number');\n    if (min >= max) throw new RangeError('min must be smaller than max');\n    let newMatrix = new Matrix(this.rows, this.columns);\n    for (let i = 0; i < this.columns; i++) {\n      const column = this.getColumn(i);\n      if (column.length) {\n        rescale(column, {\n          min,\n          max,\n          output: column,\n        });\n      }\n      newMatrix.setColumn(i, column);\n    }\n    return newMatrix;\n  }\n\n  flipRows() {\n    const middle = Math.ceil(this.columns / 2);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < middle; j++) {\n        let first = this.get(i, j);\n        let last = this.get(i, this.columns - 1 - j);\n        this.set(i, j, last);\n        this.set(i, this.columns - 1 - j, first);\n      }\n    }\n    return this;\n  }\n\n  flipColumns() {\n    const middle = Math.ceil(this.rows / 2);\n    for (let j = 0; j < this.columns; j++) {\n      for (let i = 0; i < middle; i++) {\n        let first = this.get(i, j);\n        let last = this.get(this.rows - 1 - i, j);\n        this.set(i, j, last);\n        this.set(this.rows - 1 - i, j, first);\n      }\n    }\n    return this;\n  }\n\n  kroneckerProduct(other) {\n    other = Matrix.checkMatrix(other);\n\n    let m = this.rows;\n    let n = this.columns;\n    let p = other.rows;\n    let q = other.columns;\n\n    let result = new Matrix(m * p, n * q);\n    for (let i = 0; i < m; i++) {\n      for (let j = 0; j < n; j++) {\n        for (let k = 0; k < p; k++) {\n          for (let l = 0; l < q; l++) {\n            result.set(p * i + k, q * j + l, this.get(i, j) * other.get(k, l));\n          }\n        }\n      }\n    }\n    return result;\n  }\n\n  kroneckerSum(other) {\n    other = Matrix.checkMatrix(other);\n    if (!this.isSquare() || !other.isSquare()) {\n      throw new Error('Kronecker Sum needs two Square Matrices');\n    }\n    let m = this.rows;\n    let n = other.rows;\n    let AxI = this.kroneckerProduct(Matrix.eye(n, n));\n    let IxB = Matrix.eye(m, m).kroneckerProduct(other);\n    return AxI.add(IxB);\n  }\n\n  transpose() {\n    let result = new Matrix(this.columns, this.rows);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        result.set(j, i, this.get(i, j));\n      }\n    }\n    return result;\n  }\n\n  sortRows(compareFunction = compareNumbers) {\n    for (let i = 0; i < this.rows; i++) {\n      this.setRow(i, this.getRow(i).sort(compareFunction));\n    }\n    return this;\n  }\n\n  sortColumns(compareFunction = compareNumbers) {\n    for (let i = 0; i < this.columns; i++) {\n      this.setColumn(i, this.getColumn(i).sort(compareFunction));\n    }\n    return this;\n  }\n\n  subMatrix(startRow, endRow, startColumn, endColumn) {\n    checkRange(this, startRow, endRow, startColumn, endColumn);\n    let newMatrix = new Matrix(\n      endRow - startRow + 1,\n      endColumn - startColumn + 1,\n    );\n    for (let i = startRow; i <= endRow; i++) {\n      for (let j = startColumn; j <= endColumn; j++) {\n        newMatrix.set(i - startRow, j - startColumn, this.get(i, j));\n      }\n    }\n    return newMatrix;\n  }\n\n  subMatrixRow(indices, startColumn, endColumn) {\n    if (startColumn === undefined) startColumn = 0;\n    if (endColumn === undefined) endColumn = this.columns - 1;\n    if (\n      startColumn > endColumn ||\n      startColumn < 0 ||\n      startColumn >= this.columns ||\n      endColumn < 0 ||\n      endColumn >= this.columns\n    ) {\n      throw new RangeError('Argument out of range');\n    }\n\n    let newMatrix = new Matrix(indices.length, endColumn - startColumn + 1);\n    for (let i = 0; i < indices.length; i++) {\n      for (let j = startColumn; j <= endColumn; j++) {\n        if (indices[i] < 0 || indices[i] >= this.rows) {\n          throw new RangeError(`Row index out of range: ${indices[i]}`);\n        }\n        newMatrix.set(i, j - startColumn, this.get(indices[i], j));\n      }\n    }\n    return newMatrix;\n  }\n\n  subMatrixColumn(indices, startRow, endRow) {\n    if (startRow === undefined) startRow = 0;\n    if (endRow === undefined) endRow = this.rows - 1;\n    if (\n      startRow > endRow ||\n      startRow < 0 ||\n      startRow >= this.rows ||\n      endRow < 0 ||\n      endRow >= this.rows\n    ) {\n      throw new RangeError('Argument out of range');\n    }\n\n    let newMatrix = new Matrix(endRow - startRow + 1, indices.length);\n    for (let i = 0; i < indices.length; i++) {\n      for (let j = startRow; j <= endRow; j++) {\n        if (indices[i] < 0 || indices[i] >= this.columns) {\n          throw new RangeError(`Column index out of range: ${indices[i]}`);\n        }\n        newMatrix.set(j - startRow, i, this.get(j, indices[i]));\n      }\n    }\n    return newMatrix;\n  }\n\n  setSubMatrix(matrix, startRow, startColumn) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (matrix.isEmpty()) {\n      return this;\n    }\n    let endRow = startRow + matrix.rows - 1;\n    let endColumn = startColumn + matrix.columns - 1;\n    checkRange(this, startRow, endRow, startColumn, endColumn);\n    for (let i = 0; i < matrix.rows; i++) {\n      for (let j = 0; j < matrix.columns; j++) {\n        this.set(startRow + i, startColumn + j, matrix.get(i, j));\n      }\n    }\n    return this;\n  }\n\n  selection(rowIndices, columnIndices) {\n    checkRowIndices(this, rowIndices);\n    checkColumnIndices(this, columnIndices);\n    let newMatrix = new Matrix(rowIndices.length, columnIndices.length);\n    for (let i = 0; i < rowIndices.length; i++) {\n      let rowIndex = rowIndices[i];\n      for (let j = 0; j < columnIndices.length; j++) {\n        let columnIndex = columnIndices[j];\n        newMatrix.set(i, j, this.get(rowIndex, columnIndex));\n      }\n    }\n    return newMatrix;\n  }\n\n  trace() {\n    let min = Math.min(this.rows, this.columns);\n    let trace = 0;\n    for (let i = 0; i < min; i++) {\n      trace += this.get(i, i);\n    }\n    return trace;\n  }\n\n  clone() {\n    return this.constructor.copy(this, new Matrix(this.rows, this.columns));\n  }\n\n  /**\n   * @template {AbstractMatrix} M\n   * @param {AbstractMatrix} from\n   * @param {M} to\n   * @return {M}\n   */\n  static copy(from, to) {\n    for (const [row, column, value] of from.entries()) {\n      to.set(row, column, value);\n    }\n\n    return to;\n  }\n\n  sum(by) {\n    switch (by) {\n      case 'row':\n        return sumByRow(this);\n      case 'column':\n        return sumByColumn(this);\n      case undefined:\n        return sumAll(this);\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  product(by) {\n    switch (by) {\n      case 'row':\n        return productByRow(this);\n      case 'column':\n        return productByColumn(this);\n      case undefined:\n        return productAll(this);\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  mean(by) {\n    const sum = this.sum(by);\n    switch (by) {\n      case 'row': {\n        for (let i = 0; i < this.rows; i++) {\n          sum[i] /= this.columns;\n        }\n        return sum;\n      }\n      case 'column': {\n        for (let i = 0; i < this.columns; i++) {\n          sum[i] /= this.rows;\n        }\n        return sum;\n      }\n      case undefined:\n        return sum / this.size;\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  variance(by, options = {}) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { unbiased = true, mean = this.mean(by) } = options;\n    if (typeof unbiased !== 'boolean') {\n      throw new TypeError('unbiased must be a boolean');\n    }\n    switch (by) {\n      case 'row': {\n        if (!isAnyArray(mean)) {\n          throw new TypeError('mean must be an array');\n        }\n        return varianceByRow(this, unbiased, mean);\n      }\n      case 'column': {\n        if (!isAnyArray(mean)) {\n          throw new TypeError('mean must be an array');\n        }\n        return varianceByColumn(this, unbiased, mean);\n      }\n      case undefined: {\n        if (typeof mean !== 'number') {\n          throw new TypeError('mean must be a number');\n        }\n        return varianceAll(this, unbiased, mean);\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  standardDeviation(by, options) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    const variance = this.variance(by, options);\n    if (by === undefined) {\n      return Math.sqrt(variance);\n    } else {\n      for (let i = 0; i < variance.length; i++) {\n        variance[i] = Math.sqrt(variance[i]);\n      }\n      return variance;\n    }\n  }\n\n  center(by, options = {}) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { center = this.mean(by) } = options;\n    switch (by) {\n      case 'row': {\n        if (!isAnyArray(center)) {\n          throw new TypeError('center must be an array');\n        }\n        centerByRow(this, center);\n        return this;\n      }\n      case 'column': {\n        if (!isAnyArray(center)) {\n          throw new TypeError('center must be an array');\n        }\n        centerByColumn(this, center);\n        return this;\n      }\n      case undefined: {\n        if (typeof center !== 'number') {\n          throw new TypeError('center must be a number');\n        }\n        centerAll(this, center);\n        return this;\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  scale(by, options = {}) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    let scale = options.scale;\n    switch (by) {\n      case 'row': {\n        if (scale === undefined) {\n          scale = getScaleByRow(this);\n        } else if (!isAnyArray(scale)) {\n          throw new TypeError('scale must be an array');\n        }\n        scaleByRow(this, scale);\n        return this;\n      }\n      case 'column': {\n        if (scale === undefined) {\n          scale = getScaleByColumn(this);\n        } else if (!isAnyArray(scale)) {\n          throw new TypeError('scale must be an array');\n        }\n        scaleByColumn(this, scale);\n        return this;\n      }\n      case undefined: {\n        if (scale === undefined) {\n          scale = getScaleAll(this);\n        } else if (typeof scale !== 'number') {\n          throw new TypeError('scale must be a number');\n        }\n        scaleAll(this, scale);\n        return this;\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  toString(options) {\n    return inspectMatrixWithOptions(this, options);\n  }\n\n  [Symbol.iterator]() {\n    return this.entries();\n  }\n\n  /**\n   * iterator from left to right, from top to bottom\n   * yield [row, column, value]\n   * @returns {Generator<[number, number, number], void, void>}\n   */\n  *entries() {\n    for (let row = 0; row < this.rows; row++) {\n      for (let col = 0; col < this.columns; col++) {\n        yield [row, col, this.get(row, col)];\n      }\n    }\n  }\n\n  /**\n   * iterator from left to right, from top to bottom\n   * yield value\n   * @returns {Generator<number, void, void>}\n   */\n  *values() {\n    for (let row = 0; row < this.rows; row++) {\n      for (let col = 0; col < this.columns; col++) {\n        yield this.get(row, col);\n      }\n    }\n  }\n}\n\nAbstractMatrix.prototype.klass = 'Matrix';\nif (typeof Symbol !== 'undefined') {\n  AbstractMatrix.prototype[Symbol.for('nodejs.util.inspect.custom')] =\n    inspectMatrix;\n}\n\nfunction compareNumbers(a, b) {\n  return a - b;\n}\n\nfunction isArrayOfNumbers(array) {\n  return array.every((element) => {\n    return typeof element === 'number';\n  });\n}\n\n// Synonyms\nAbstractMatrix.random = AbstractMatrix.rand;\nAbstractMatrix.randomInt = AbstractMatrix.randInt;\nAbstractMatrix.diagonal = AbstractMatrix.diag;\nAbstractMatrix.prototype.diagonal = AbstractMatrix.prototype.diag;\nAbstractMatrix.identity = AbstractMatrix.eye;\nAbstractMatrix.prototype.negate = AbstractMatrix.prototype.neg;\nAbstractMatrix.prototype.tensorProduct =\n  AbstractMatrix.prototype.kroneckerProduct;\n\nclass Matrix extends AbstractMatrix {\n  /**\n   * @type {Float64Array[]}\n   */\n  data;\n\n  /**\n   * Init an empty matrix\n   * @param {number} nRows\n   * @param {number} nColumns\n   */\n  #initData(nRows, nColumns) {\n    this.data = [];\n\n    if (Number.isInteger(nColumns) && nColumns >= 0) {\n      for (let i = 0; i < nRows; i++) {\n        this.data.push(new Float64Array(nColumns));\n      }\n    } else {\n      throw new TypeError('nColumns must be a positive integer');\n    }\n\n    this.rows = nRows;\n    this.columns = nColumns;\n  }\n\n  constructor(nRows, nColumns) {\n    super();\n    if (Matrix.isMatrix(nRows)) {\n      this.#initData(nRows.rows, nRows.columns);\n      Matrix.copy(nRows, this);\n    } else if (Number.isInteger(nRows) && nRows >= 0) {\n      this.#initData(nRows, nColumns);\n    } else if (isAnyArray(nRows)) {\n      // Copy the values from the 2D array\n      const arrayData = nRows;\n      nRows = arrayData.length;\n      nColumns = nRows ? arrayData[0].length : 0;\n      if (typeof nColumns !== 'number') {\n        throw new TypeError(\n          'Data must be a 2D array with at least one element',\n        );\n      }\n      this.data = [];\n\n      for (let i = 0; i < nRows; i++) {\n        if (arrayData[i].length !== nColumns) {\n          throw new RangeError('Inconsistent array dimensions');\n        }\n        if (!isArrayOfNumbers(arrayData[i])) {\n          throw new TypeError('Input data contains non-numeric values');\n        }\n        this.data.push(Float64Array.from(arrayData[i]));\n      }\n\n      this.rows = nRows;\n      this.columns = nColumns;\n    } else {\n      throw new TypeError(\n        'First argument must be a positive number or an array',\n      );\n    }\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.data[rowIndex][columnIndex] = value;\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.data[rowIndex][columnIndex];\n  }\n\n  removeRow(index) {\n    checkRowIndex(this, index);\n    this.data.splice(index, 1);\n    this.rows -= 1;\n    return this;\n  }\n\n  addRow(index, array) {\n    if (array === undefined) {\n      array = index;\n      index = this.rows;\n    }\n    checkRowIndex(this, index, true);\n    array = Float64Array.from(checkRowVector(this, array));\n    this.data.splice(index, 0, array);\n    this.rows += 1;\n    return this;\n  }\n\n  removeColumn(index) {\n    checkColumnIndex(this, index);\n    for (let i = 0; i < this.rows; i++) {\n      const newRow = new Float64Array(this.columns - 1);\n      for (let j = 0; j < index; j++) {\n        newRow[j] = this.data[i][j];\n      }\n      for (let j = index + 1; j < this.columns; j++) {\n        newRow[j - 1] = this.data[i][j];\n      }\n      this.data[i] = newRow;\n    }\n    this.columns -= 1;\n    return this;\n  }\n\n  addColumn(index, array) {\n    if (typeof array === 'undefined') {\n      array = index;\n      index = this.columns;\n    }\n    checkColumnIndex(this, index, true);\n    array = checkColumnVector(this, array);\n    for (let i = 0; i < this.rows; i++) {\n      const newRow = new Float64Array(this.columns + 1);\n      let j = 0;\n      for (; j < index; j++) {\n        newRow[j] = this.data[i][j];\n      }\n      newRow[j++] = array[i];\n      for (; j < this.columns + 1; j++) {\n        newRow[j] = this.data[i][j - 1];\n      }\n      this.data[i] = newRow;\n    }\n    this.columns += 1;\n    return this;\n  }\n}\n\ninstallMathOperations(AbstractMatrix, Matrix);\n\n/**\n * @typedef {0 | 1 | number | boolean} Mask\n */\n\nclass SymmetricMatrix extends AbstractMatrix {\n  /** @type {Matrix} */\n  #matrix;\n\n  get size() {\n    return this.#matrix.size;\n  }\n\n  get rows() {\n    return this.#matrix.rows;\n  }\n\n  get columns() {\n    return this.#matrix.columns;\n  }\n\n  get diagonalSize() {\n    return this.rows;\n  }\n\n  /**\n   * not the same as matrix.isSymmetric()\n   * Here is to check if it's instanceof SymmetricMatrix without bundling issues\n   *\n   * @param value\n   * @returns {boolean}\n   */\n  static isSymmetricMatrix(value) {\n    return Matrix.isMatrix(value) && value.klassType === 'SymmetricMatrix';\n  }\n\n  /**\n   * @param diagonalSize\n   * @return {SymmetricMatrix}\n   */\n  static zeros(diagonalSize) {\n    return new this(diagonalSize);\n  }\n\n  /**\n   * @param diagonalSize\n   * @return {SymmetricMatrix}\n   */\n  static ones(diagonalSize) {\n    return new this(diagonalSize).fill(1);\n  }\n\n  /**\n   * @param {number | AbstractMatrix | ArrayLike<ArrayLike<number>>} diagonalSize\n   * @return {this}\n   */\n  constructor(diagonalSize) {\n    super();\n\n    if (Matrix.isMatrix(diagonalSize)) {\n      if (!diagonalSize.isSymmetric()) {\n        throw new TypeError('not symmetric data');\n      }\n\n      this.#matrix = Matrix.copy(\n        diagonalSize,\n        new Matrix(diagonalSize.rows, diagonalSize.rows),\n      );\n    } else if (Number.isInteger(diagonalSize) && diagonalSize >= 0) {\n      this.#matrix = new Matrix(diagonalSize, diagonalSize);\n    } else {\n      this.#matrix = new Matrix(diagonalSize);\n\n      if (!this.isSymmetric()) {\n        throw new TypeError('not symmetric data');\n      }\n    }\n  }\n\n  clone() {\n    const matrix = new SymmetricMatrix(this.diagonalSize);\n\n    for (const [row, col, value] of this.upperRightEntries()) {\n      matrix.set(row, col, value);\n    }\n\n    return matrix;\n  }\n\n  toMatrix() {\n    return new Matrix(this);\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.#matrix.get(rowIndex, columnIndex);\n  }\n  set(rowIndex, columnIndex, value) {\n    // symmetric set\n    this.#matrix.set(rowIndex, columnIndex, value);\n    this.#matrix.set(columnIndex, rowIndex, value);\n\n    return this;\n  }\n\n  removeCross(index) {\n    // symmetric remove side\n    this.#matrix.removeRow(index);\n    this.#matrix.removeColumn(index);\n\n    return this;\n  }\n\n  addCross(index, array) {\n    if (array === undefined) {\n      array = index;\n      index = this.diagonalSize;\n    }\n\n    const row = array.slice();\n    row.splice(index, 1);\n\n    this.#matrix.addRow(index, row);\n    this.#matrix.addColumn(index, array);\n\n    return this;\n  }\n\n  /**\n   * @param {Mask[]} mask\n   */\n  applyMask(mask) {\n    if (mask.length !== this.diagonalSize) {\n      throw new RangeError('Mask size do not match with matrix size');\n    }\n\n    // prepare sides to remove from matrix from mask\n    /** @type {number[]} */\n    const sidesToRemove = [];\n    for (const [index, passthroughs] of mask.entries()) {\n      if (passthroughs) continue;\n      sidesToRemove.push(index);\n    }\n    // to remove from highest to lowest for no mutation shifting\n    sidesToRemove.reverse();\n\n    // remove sides\n    for (const sideIndex of sidesToRemove) {\n      this.removeCross(sideIndex);\n    }\n\n    return this;\n  }\n\n  /**\n   * Compact format upper-right corner of matrix\n   * iterate from left to right, from top to bottom.\n   *\n   * ```\n   *   A B C D\n   * A 1 2 3 4\n   * B 2 5 6 7\n   * C 3 6 8 9\n   * D 4 7 9 10\n   * ```\n   *\n   * will return compact 1D array `[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]`\n   *\n   * length is S(i=0, n=sideSize) => 10 for a 4 sideSized matrix\n   *\n   * @returns {number[]}\n   */\n  toCompact() {\n    const { diagonalSize } = this;\n\n    /** @type {number[]} */\n    const compact = new Array((diagonalSize * (diagonalSize + 1)) / 2);\n    for (let col = 0, row = 0, index = 0; index < compact.length; index++) {\n      compact[index] = this.get(row, col);\n\n      if (++col >= diagonalSize) col = ++row;\n    }\n\n    return compact;\n  }\n\n  /**\n   * @param {number[]} compact\n   * @return {SymmetricMatrix}\n   */\n  static fromCompact(compact) {\n    const compactSize = compact.length;\n    // compactSize = (sideSize * (sideSize + 1)) / 2\n    // https://mathsolver.microsoft.com/fr/solve-problem/y%20%3D%20%20x%20%60cdot%20%20%20%60frac%7B%20%20%60left(%20x%2B1%20%20%60right)%20%20%20%20%7D%7B%202%20%20%7D\n    // sideSize = (Sqrt(8 × compactSize + 1) - 1) / 2\n    const diagonalSize = (Math.sqrt(8 * compactSize + 1) - 1) / 2;\n\n    if (!Number.isInteger(diagonalSize)) {\n      throw new TypeError(\n        `This array is not a compact representation of a Symmetric Matrix, ${JSON.stringify(\n          compact,\n        )}`,\n      );\n    }\n\n    const matrix = new SymmetricMatrix(diagonalSize);\n    for (let col = 0, row = 0, index = 0; index < compactSize; index++) {\n      matrix.set(col, row, compact[index]);\n      if (++col >= diagonalSize) col = ++row;\n    }\n\n    return matrix;\n  }\n\n  /**\n   * half iterator upper-right-corner from left to right, from top to bottom\n   * yield [row, column, value]\n   *\n   * @returns {Generator<[number, number, number], void, void>}\n   */\n  *upperRightEntries() {\n    for (let row = 0, col = 0; row < this.diagonalSize; void 0) {\n      const value = this.get(row, col);\n\n      yield [row, col, value];\n\n      // at the end of row, move cursor to next row at diagonal position\n      if (++col >= this.diagonalSize) col = ++row;\n    }\n  }\n\n  /**\n   * half iterator upper-right-corner from left to right, from top to bottom\n   * yield value\n   *\n   * @returns {Generator<[number, number, number], void, void>}\n   */\n  *upperRightValues() {\n    for (let row = 0, col = 0; row < this.diagonalSize; void 0) {\n      const value = this.get(row, col);\n\n      yield value;\n\n      // at the end of row, move cursor to next row at diagonal position\n      if (++col >= this.diagonalSize) col = ++row;\n    }\n  }\n}\nSymmetricMatrix.prototype.klassType = 'SymmetricMatrix';\n\nclass DistanceMatrix extends SymmetricMatrix {\n  /**\n   * not the same as matrix.isSymmetric()\n   * Here is to check if it's instanceof SymmetricMatrix without bundling issues\n   *\n   * @param value\n   * @returns {boolean}\n   */\n  static isDistanceMatrix(value) {\n    return (\n      SymmetricMatrix.isSymmetricMatrix(value) &&\n      value.klassSubType === 'DistanceMatrix'\n    );\n  }\n\n  constructor(sideSize) {\n    super(sideSize);\n\n    if (!this.isDistance()) {\n      throw new TypeError('Provided arguments do no produce a distance matrix');\n    }\n  }\n\n  set(rowIndex, columnIndex, value) {\n    // distance matrix diagonal is 0\n    if (rowIndex === columnIndex) value = 0;\n\n    return super.set(rowIndex, columnIndex, value);\n  }\n\n  addCross(index, array) {\n    if (array === undefined) {\n      array = index;\n      index = this.diagonalSize;\n    }\n\n    // ensure distance\n    array = array.slice();\n    array[index] = 0;\n\n    return super.addCross(index, array);\n  }\n\n  toSymmetricMatrix() {\n    return new SymmetricMatrix(this);\n  }\n\n  clone() {\n    const matrix = new DistanceMatrix(this.diagonalSize);\n\n    for (const [row, col, value] of this.upperRightEntries()) {\n      if (row === col) continue;\n      matrix.set(row, col, value);\n    }\n\n    return matrix;\n  }\n\n  /**\n   * Compact format upper-right corner of matrix\n   * no diagonal (only zeros)\n   * iterable from left to right, from top to bottom.\n   *\n   * ```\n   *   A B C D\n   * A 0 1 2 3\n   * B 1 0 4 5\n   * C 2 4 0 6\n   * D 3 5 6 0\n   * ```\n   *\n   * will return compact 1D array `[1, 2, 3, 4, 5, 6]`\n   *\n   * length is S(i=0, n=sideSize-1) => 6 for a 4 side sized matrix\n   *\n   * @returns {number[]}\n   */\n  toCompact() {\n    const { diagonalSize } = this;\n    const compactLength = ((diagonalSize - 1) * diagonalSize) / 2;\n\n    /** @type {number[]} */\n    const compact = new Array(compactLength);\n    for (let col = 1, row = 0, index = 0; index < compact.length; index++) {\n      compact[index] = this.get(row, col);\n\n      if (++col >= diagonalSize) col = ++row + 1;\n    }\n\n    return compact;\n  }\n\n  /**\n   * @param {number[]} compact\n   */\n  static fromCompact(compact) {\n    const compactSize = compact.length;\n\n    if (compactSize === 0) {\n      return new this(0);\n    }\n\n    // compactSize in Natural integer range ]0;∞]\n    // compactSize = (sideSize * (sideSize - 1)) / 2\n    // sideSize = (Sqrt(8 × compactSize + 1) + 1) / 2\n    const diagonalSize = (Math.sqrt(8 * compactSize + 1) + 1) / 2;\n\n    if (!Number.isInteger(diagonalSize)) {\n      throw new TypeError(\n        `This array is not a compact representation of a DistanceMatrix, ${JSON.stringify(\n          compact,\n        )}`,\n      );\n    }\n\n    const matrix = new this(diagonalSize);\n    for (let col = 1, row = 0, index = 0; index < compactSize; index++) {\n      matrix.set(col, row, compact[index]);\n      if (++col >= diagonalSize) col = ++row + 1;\n    }\n\n    return matrix;\n  }\n}\nDistanceMatrix.prototype.klassSubType = 'DistanceMatrix';\n\nclass BaseView extends AbstractMatrix {\n  constructor(matrix, rows, columns) {\n    super();\n    this.matrix = matrix;\n    this.rows = rows;\n    this.columns = columns;\n  }\n}\n\nclass MatrixColumnView extends BaseView {\n  constructor(matrix, column) {\n    checkColumnIndex(matrix, column);\n    super(matrix, matrix.rows, 1);\n    this.column = column;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(rowIndex, this.column, value);\n    return this;\n  }\n\n  get(rowIndex) {\n    return this.matrix.get(rowIndex, this.column);\n  }\n}\n\nclass MatrixColumnSelectionView extends BaseView {\n  constructor(matrix, columnIndices) {\n    checkColumnIndices(matrix, columnIndices);\n    super(matrix, matrix.rows, columnIndices.length);\n    this.columnIndices = columnIndices;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(rowIndex, this.columnIndices[columnIndex], value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(rowIndex, this.columnIndices[columnIndex]);\n  }\n}\n\nclass MatrixFlipColumnView extends BaseView {\n  constructor(matrix) {\n    super(matrix, matrix.rows, matrix.columns);\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(rowIndex, this.columns - columnIndex - 1, value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(rowIndex, this.columns - columnIndex - 1);\n  }\n}\n\nclass MatrixFlipRowView extends BaseView {\n  constructor(matrix) {\n    super(matrix, matrix.rows, matrix.columns);\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(this.rows - rowIndex - 1, columnIndex, value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(this.rows - rowIndex - 1, columnIndex);\n  }\n}\n\nclass MatrixRowView extends BaseView {\n  constructor(matrix, row) {\n    checkRowIndex(matrix, row);\n    super(matrix, 1, matrix.columns);\n    this.row = row;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(this.row, columnIndex, value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(this.row, columnIndex);\n  }\n}\n\nclass MatrixRowSelectionView extends BaseView {\n  constructor(matrix, rowIndices) {\n    checkRowIndices(matrix, rowIndices);\n    super(matrix, rowIndices.length, matrix.columns);\n    this.rowIndices = rowIndices;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(this.rowIndices[rowIndex], columnIndex, value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(this.rowIndices[rowIndex], columnIndex);\n  }\n}\n\nclass MatrixSelectionView extends BaseView {\n  constructor(matrix, rowIndices, columnIndices) {\n    checkRowIndices(matrix, rowIndices);\n    checkColumnIndices(matrix, columnIndices);\n    super(matrix, rowIndices.length, columnIndices.length);\n    this.rowIndices = rowIndices;\n    this.columnIndices = columnIndices;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(\n      this.rowIndices[rowIndex],\n      this.columnIndices[columnIndex],\n      value,\n    );\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(\n      this.rowIndices[rowIndex],\n      this.columnIndices[columnIndex],\n    );\n  }\n}\n\nclass MatrixSubView extends BaseView {\n  constructor(matrix, startRow, endRow, startColumn, endColumn) {\n    checkRange(matrix, startRow, endRow, startColumn, endColumn);\n    super(matrix, endRow - startRow + 1, endColumn - startColumn + 1);\n    this.startRow = startRow;\n    this.startColumn = startColumn;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(\n      this.startRow + rowIndex,\n      this.startColumn + columnIndex,\n      value,\n    );\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(\n      this.startRow + rowIndex,\n      this.startColumn + columnIndex,\n    );\n  }\n}\n\nclass MatrixTransposeView extends BaseView {\n  constructor(matrix) {\n    super(matrix, matrix.columns, matrix.rows);\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(columnIndex, rowIndex, value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(columnIndex, rowIndex);\n  }\n}\n\nclass WrapperMatrix1D extends AbstractMatrix {\n  constructor(data, options = {}) {\n    const { rows = 1 } = options;\n\n    if (data.length % rows !== 0) {\n      throw new Error('the data length is not divisible by the number of rows');\n    }\n    super();\n    this.rows = rows;\n    this.columns = data.length / rows;\n    this.data = data;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    let index = this._calculateIndex(rowIndex, columnIndex);\n    this.data[index] = value;\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    let index = this._calculateIndex(rowIndex, columnIndex);\n    return this.data[index];\n  }\n\n  _calculateIndex(row, column) {\n    return row * this.columns + column;\n  }\n}\n\nclass WrapperMatrix2D extends AbstractMatrix {\n  constructor(data) {\n    super();\n    this.data = data;\n    this.rows = data.length;\n    this.columns = data[0].length;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.data[rowIndex][columnIndex] = value;\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.data[rowIndex][columnIndex];\n  }\n}\n\nfunction wrap(array, options) {\n  if (isAnyArray(array)) {\n    if (array[0] && isAnyArray(array[0])) {\n      return new WrapperMatrix2D(array);\n    } else {\n      return new WrapperMatrix1D(array, options);\n    }\n  } else {\n    throw new Error('the argument is not an array');\n  }\n}\n\nclass LuDecomposition {\n  constructor(matrix) {\n    matrix = WrapperMatrix2D.checkMatrix(matrix);\n\n    let lu = matrix.clone();\n    let rows = lu.rows;\n    let columns = lu.columns;\n    let pivotVector = new Float64Array(rows);\n    let pivotSign = 1;\n    let i, j, k, p, s, t, v;\n    let LUcolj, kmax;\n\n    for (i = 0; i < rows; i++) {\n      pivotVector[i] = i;\n    }\n\n    LUcolj = new Float64Array(rows);\n\n    for (j = 0; j < columns; j++) {\n      for (i = 0; i < rows; i++) {\n        LUcolj[i] = lu.get(i, j);\n      }\n\n      for (i = 0; i < rows; i++) {\n        kmax = Math.min(i, j);\n        s = 0;\n        for (k = 0; k < kmax; k++) {\n          s += lu.get(i, k) * LUcolj[k];\n        }\n        LUcolj[i] -= s;\n        lu.set(i, j, LUcolj[i]);\n      }\n\n      p = j;\n      for (i = j + 1; i < rows; i++) {\n        if (Math.abs(LUcolj[i]) > Math.abs(LUcolj[p])) {\n          p = i;\n        }\n      }\n\n      if (p !== j) {\n        for (k = 0; k < columns; k++) {\n          t = lu.get(p, k);\n          lu.set(p, k, lu.get(j, k));\n          lu.set(j, k, t);\n        }\n\n        v = pivotVector[p];\n        pivotVector[p] = pivotVector[j];\n        pivotVector[j] = v;\n\n        pivotSign = -pivotSign;\n      }\n\n      if (j < rows && lu.get(j, j) !== 0) {\n        for (i = j + 1; i < rows; i++) {\n          lu.set(i, j, lu.get(i, j) / lu.get(j, j));\n        }\n      }\n    }\n\n    this.LU = lu;\n    this.pivotVector = pivotVector;\n    this.pivotSign = pivotSign;\n  }\n\n  isSingular() {\n    let data = this.LU;\n    let col = data.columns;\n    for (let j = 0; j < col; j++) {\n      if (data.get(j, j) === 0) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  solve(value) {\n    value = Matrix.checkMatrix(value);\n\n    let lu = this.LU;\n    let rows = lu.rows;\n\n    if (rows !== value.rows) {\n      throw new Error('Invalid matrix dimensions');\n    }\n    if (this.isSingular()) {\n      throw new Error('LU matrix is singular');\n    }\n\n    let count = value.columns;\n    let X = value.subMatrixRow(this.pivotVector, 0, count - 1);\n    let columns = lu.columns;\n    let i, j, k;\n\n    for (k = 0; k < columns; k++) {\n      for (i = k + 1; i < columns; i++) {\n        for (j = 0; j < count; j++) {\n          X.set(i, j, X.get(i, j) - X.get(k, j) * lu.get(i, k));\n        }\n      }\n    }\n    for (k = columns - 1; k >= 0; k--) {\n      for (j = 0; j < count; j++) {\n        X.set(k, j, X.get(k, j) / lu.get(k, k));\n      }\n      for (i = 0; i < k; i++) {\n        for (j = 0; j < count; j++) {\n          X.set(i, j, X.get(i, j) - X.get(k, j) * lu.get(i, k));\n        }\n      }\n    }\n    return X;\n  }\n\n  get determinant() {\n    let data = this.LU;\n    if (!data.isSquare()) {\n      throw new Error('Matrix must be square');\n    }\n    let determinant = this.pivotSign;\n    let col = data.columns;\n    for (let j = 0; j < col; j++) {\n      determinant *= data.get(j, j);\n    }\n    return determinant;\n  }\n\n  get lowerTriangularMatrix() {\n    let data = this.LU;\n    let rows = data.rows;\n    let columns = data.columns;\n    let X = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        if (i > j) {\n          X.set(i, j, data.get(i, j));\n        } else if (i === j) {\n          X.set(i, j, 1);\n        } else {\n          X.set(i, j, 0);\n        }\n      }\n    }\n    return X;\n  }\n\n  get upperTriangularMatrix() {\n    let data = this.LU;\n    let rows = data.rows;\n    let columns = data.columns;\n    let X = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        if (i <= j) {\n          X.set(i, j, data.get(i, j));\n        } else {\n          X.set(i, j, 0);\n        }\n      }\n    }\n    return X;\n  }\n\n  get pivotPermutationVector() {\n    return Array.from(this.pivotVector);\n  }\n}\n\nfunction hypotenuse(a, b) {\n  let r = 0;\n  if (Math.abs(a) > Math.abs(b)) {\n    r = b / a;\n    return Math.abs(a) * Math.sqrt(1 + r * r);\n  }\n  if (b !== 0) {\n    r = a / b;\n    return Math.abs(b) * Math.sqrt(1 + r * r);\n  }\n  return 0;\n}\n\nclass QrDecomposition {\n  constructor(value) {\n    value = WrapperMatrix2D.checkMatrix(value);\n\n    let qr = value.clone();\n    let m = value.rows;\n    let n = value.columns;\n    let rdiag = new Float64Array(n);\n    let i, j, k, s;\n\n    for (k = 0; k < n; k++) {\n      let nrm = 0;\n      for (i = k; i < m; i++) {\n        nrm = hypotenuse(nrm, qr.get(i, k));\n      }\n      if (nrm !== 0) {\n        if (qr.get(k, k) < 0) {\n          nrm = -nrm;\n        }\n        for (i = k; i < m; i++) {\n          qr.set(i, k, qr.get(i, k) / nrm);\n        }\n        qr.set(k, k, qr.get(k, k) + 1);\n        for (j = k + 1; j < n; j++) {\n          s = 0;\n          for (i = k; i < m; i++) {\n            s += qr.get(i, k) * qr.get(i, j);\n          }\n          s = -s / qr.get(k, k);\n          for (i = k; i < m; i++) {\n            qr.set(i, j, qr.get(i, j) + s * qr.get(i, k));\n          }\n        }\n      }\n      rdiag[k] = -nrm;\n    }\n\n    this.QR = qr;\n    this.Rdiag = rdiag;\n  }\n\n  solve(value) {\n    value = Matrix.checkMatrix(value);\n\n    let qr = this.QR;\n    let m = qr.rows;\n\n    if (value.rows !== m) {\n      throw new Error('Matrix row dimensions must agree');\n    }\n    if (!this.isFullRank()) {\n      throw new Error('Matrix is rank deficient');\n    }\n\n    let count = value.columns;\n    let X = value.clone();\n    let n = qr.columns;\n    let i, j, k, s;\n\n    for (k = 0; k < n; k++) {\n      for (j = 0; j < count; j++) {\n        s = 0;\n        for (i = k; i < m; i++) {\n          s += qr.get(i, k) * X.get(i, j);\n        }\n        s = -s / qr.get(k, k);\n        for (i = k; i < m; i++) {\n          X.set(i, j, X.get(i, j) + s * qr.get(i, k));\n        }\n      }\n    }\n    for (k = n - 1; k >= 0; k--) {\n      for (j = 0; j < count; j++) {\n        X.set(k, j, X.get(k, j) / this.Rdiag[k]);\n      }\n      for (i = 0; i < k; i++) {\n        for (j = 0; j < count; j++) {\n          X.set(i, j, X.get(i, j) - X.get(k, j) * qr.get(i, k));\n        }\n      }\n    }\n\n    return X.subMatrix(0, n - 1, 0, count - 1);\n  }\n\n  isFullRank() {\n    let columns = this.QR.columns;\n    for (let i = 0; i < columns; i++) {\n      if (this.Rdiag[i] === 0) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  get upperTriangularMatrix() {\n    let qr = this.QR;\n    let n = qr.columns;\n    let X = new Matrix(n, n);\n    let i, j;\n    for (i = 0; i < n; i++) {\n      for (j = 0; j < n; j++) {\n        if (i < j) {\n          X.set(i, j, qr.get(i, j));\n        } else if (i === j) {\n          X.set(i, j, this.Rdiag[i]);\n        } else {\n          X.set(i, j, 0);\n        }\n      }\n    }\n    return X;\n  }\n\n  get orthogonalMatrix() {\n    let qr = this.QR;\n    let rows = qr.rows;\n    let columns = qr.columns;\n    let X = new Matrix(rows, columns);\n    let i, j, k, s;\n\n    for (k = columns - 1; k >= 0; k--) {\n      for (i = 0; i < rows; i++) {\n        X.set(i, k, 0);\n      }\n      X.set(k, k, 1);\n      for (j = k; j < columns; j++) {\n        if (qr.get(k, k) !== 0) {\n          s = 0;\n          for (i = k; i < rows; i++) {\n            s += qr.get(i, k) * X.get(i, j);\n          }\n\n          s = -s / qr.get(k, k);\n\n          for (i = k; i < rows; i++) {\n            X.set(i, j, X.get(i, j) + s * qr.get(i, k));\n          }\n        }\n      }\n    }\n    return X;\n  }\n}\n\nclass SingularValueDecomposition {\n  constructor(value, options = {}) {\n    value = WrapperMatrix2D.checkMatrix(value);\n\n    if (value.isEmpty()) {\n      throw new Error('Matrix must be non-empty');\n    }\n\n    let m = value.rows;\n    let n = value.columns;\n\n    const {\n      computeLeftSingularVectors = true,\n      computeRightSingularVectors = true,\n      autoTranspose = false,\n    } = options;\n\n    let wantu = Boolean(computeLeftSingularVectors);\n    let wantv = Boolean(computeRightSingularVectors);\n\n    let swapped = false;\n    let a;\n    if (m < n) {\n      if (!autoTranspose) {\n        a = value.clone();\n        // eslint-disable-next-line no-console\n        console.warn(\n          'Computing SVD on a matrix with more columns than rows. Consider enabling autoTranspose',\n        );\n      } else {\n        a = value.transpose();\n        m = a.rows;\n        n = a.columns;\n        swapped = true;\n        let aux = wantu;\n        wantu = wantv;\n        wantv = aux;\n      }\n    } else {\n      a = value.clone();\n    }\n\n    let nu = Math.min(m, n);\n    let ni = Math.min(m + 1, n);\n    let s = new Float64Array(ni);\n    let U = new Matrix(m, nu);\n    let V = new Matrix(n, n);\n\n    let e = new Float64Array(n);\n    let work = new Float64Array(m);\n\n    let si = new Float64Array(ni);\n    for (let i = 0; i < ni; i++) si[i] = i;\n\n    let nct = Math.min(m - 1, n);\n    let nrt = Math.max(0, Math.min(n - 2, m));\n    let mrc = Math.max(nct, nrt);\n\n    for (let k = 0; k < mrc; k++) {\n      if (k < nct) {\n        s[k] = 0;\n        for (let i = k; i < m; i++) {\n          s[k] = hypotenuse(s[k], a.get(i, k));\n        }\n        if (s[k] !== 0) {\n          if (a.get(k, k) < 0) {\n            s[k] = -s[k];\n          }\n          for (let i = k; i < m; i++) {\n            a.set(i, k, a.get(i, k) / s[k]);\n          }\n          a.set(k, k, a.get(k, k) + 1);\n        }\n        s[k] = -s[k];\n      }\n\n      for (let j = k + 1; j < n; j++) {\n        if (k < nct && s[k] !== 0) {\n          let t = 0;\n          for (let i = k; i < m; i++) {\n            t += a.get(i, k) * a.get(i, j);\n          }\n          t = -t / a.get(k, k);\n          for (let i = k; i < m; i++) {\n            a.set(i, j, a.get(i, j) + t * a.get(i, k));\n          }\n        }\n        e[j] = a.get(k, j);\n      }\n\n      if (wantu && k < nct) {\n        for (let i = k; i < m; i++) {\n          U.set(i, k, a.get(i, k));\n        }\n      }\n\n      if (k < nrt) {\n        e[k] = 0;\n        for (let i = k + 1; i < n; i++) {\n          e[k] = hypotenuse(e[k], e[i]);\n        }\n        if (e[k] !== 0) {\n          if (e[k + 1] < 0) {\n            e[k] = 0 - e[k];\n          }\n          for (let i = k + 1; i < n; i++) {\n            e[i] /= e[k];\n          }\n          e[k + 1] += 1;\n        }\n        e[k] = -e[k];\n        if (k + 1 < m && e[k] !== 0) {\n          for (let i = k + 1; i < m; i++) {\n            work[i] = 0;\n          }\n          for (let i = k + 1; i < m; i++) {\n            for (let j = k + 1; j < n; j++) {\n              work[i] += e[j] * a.get(i, j);\n            }\n          }\n          for (let j = k + 1; j < n; j++) {\n            let t = -e[j] / e[k + 1];\n            for (let i = k + 1; i < m; i++) {\n              a.set(i, j, a.get(i, j) + t * work[i]);\n            }\n          }\n        }\n        if (wantv) {\n          for (let i = k + 1; i < n; i++) {\n            V.set(i, k, e[i]);\n          }\n        }\n      }\n    }\n\n    let p = Math.min(n, m + 1);\n    if (nct < n) {\n      s[nct] = a.get(nct, nct);\n    }\n    if (m < p) {\n      s[p - 1] = 0;\n    }\n    if (nrt + 1 < p) {\n      e[nrt] = a.get(nrt, p - 1);\n    }\n    e[p - 1] = 0;\n\n    if (wantu) {\n      for (let j = nct; j < nu; j++) {\n        for (let i = 0; i < m; i++) {\n          U.set(i, j, 0);\n        }\n        U.set(j, j, 1);\n      }\n      for (let k = nct - 1; k >= 0; k--) {\n        if (s[k] !== 0) {\n          for (let j = k + 1; j < nu; j++) {\n            let t = 0;\n            for (let i = k; i < m; i++) {\n              t += U.get(i, k) * U.get(i, j);\n            }\n            t = -t / U.get(k, k);\n            for (let i = k; i < m; i++) {\n              U.set(i, j, U.get(i, j) + t * U.get(i, k));\n            }\n          }\n          for (let i = k; i < m; i++) {\n            U.set(i, k, -U.get(i, k));\n          }\n          U.set(k, k, 1 + U.get(k, k));\n          for (let i = 0; i < k - 1; i++) {\n            U.set(i, k, 0);\n          }\n        } else {\n          for (let i = 0; i < m; i++) {\n            U.set(i, k, 0);\n          }\n          U.set(k, k, 1);\n        }\n      }\n    }\n\n    if (wantv) {\n      for (let k = n - 1; k >= 0; k--) {\n        if (k < nrt && e[k] !== 0) {\n          for (let j = k + 1; j < n; j++) {\n            let t = 0;\n            for (let i = k + 1; i < n; i++) {\n              t += V.get(i, k) * V.get(i, j);\n            }\n            t = -t / V.get(k + 1, k);\n            for (let i = k + 1; i < n; i++) {\n              V.set(i, j, V.get(i, j) + t * V.get(i, k));\n            }\n          }\n        }\n        for (let i = 0; i < n; i++) {\n          V.set(i, k, 0);\n        }\n        V.set(k, k, 1);\n      }\n    }\n\n    let pp = p - 1;\n    let eps = Number.EPSILON;\n    while (p > 0) {\n      let k, kase;\n      for (k = p - 2; k >= -1; k--) {\n        if (k === -1) {\n          break;\n        }\n        const alpha =\n          Number.MIN_VALUE + eps * Math.abs(s[k] + Math.abs(s[k + 1]));\n        if (Math.abs(e[k]) <= alpha || Number.isNaN(e[k])) {\n          e[k] = 0;\n          break;\n        }\n      }\n      if (k === p - 2) {\n        kase = 4;\n      } else {\n        let ks;\n        for (ks = p - 1; ks >= k; ks--) {\n          if (ks === k) {\n            break;\n          }\n          let t =\n            (ks !== p ? Math.abs(e[ks]) : 0) +\n            (ks !== k + 1 ? Math.abs(e[ks - 1]) : 0);\n          if (Math.abs(s[ks]) <= eps * t) {\n            s[ks] = 0;\n            break;\n          }\n        }\n        if (ks === k) {\n          kase = 3;\n        } else if (ks === p - 1) {\n          kase = 1;\n        } else {\n          kase = 2;\n          k = ks;\n        }\n      }\n\n      k++;\n\n      switch (kase) {\n        case 1: {\n          let f = e[p - 2];\n          e[p - 2] = 0;\n          for (let j = p - 2; j >= k; j--) {\n            let t = hypotenuse(s[j], f);\n            let cs = s[j] / t;\n            let sn = f / t;\n            s[j] = t;\n            if (j !== k) {\n              f = -sn * e[j - 1];\n              e[j - 1] = cs * e[j - 1];\n            }\n            if (wantv) {\n              for (let i = 0; i < n; i++) {\n                t = cs * V.get(i, j) + sn * V.get(i, p - 1);\n                V.set(i, p - 1, -sn * V.get(i, j) + cs * V.get(i, p - 1));\n                V.set(i, j, t);\n              }\n            }\n          }\n          break;\n        }\n        case 2: {\n          let f = e[k - 1];\n          e[k - 1] = 0;\n          for (let j = k; j < p; j++) {\n            let t = hypotenuse(s[j], f);\n            let cs = s[j] / t;\n            let sn = f / t;\n            s[j] = t;\n            f = -sn * e[j];\n            e[j] = cs * e[j];\n            if (wantu) {\n              for (let i = 0; i < m; i++) {\n                t = cs * U.get(i, j) + sn * U.get(i, k - 1);\n                U.set(i, k - 1, -sn * U.get(i, j) + cs * U.get(i, k - 1));\n                U.set(i, j, t);\n              }\n            }\n          }\n          break;\n        }\n        case 3: {\n          const scale = Math.max(\n            Math.abs(s[p - 1]),\n            Math.abs(s[p - 2]),\n            Math.abs(e[p - 2]),\n            Math.abs(s[k]),\n            Math.abs(e[k]),\n          );\n          const sp = s[p - 1] / scale;\n          const spm1 = s[p - 2] / scale;\n          const epm1 = e[p - 2] / scale;\n          const sk = s[k] / scale;\n          const ek = e[k] / scale;\n          const b = ((spm1 + sp) * (spm1 - sp) + epm1 * epm1) / 2;\n          const c = sp * epm1 * (sp * epm1);\n          let shift = 0;\n          if (b !== 0 || c !== 0) {\n            if (b < 0) {\n              shift = 0 - Math.sqrt(b * b + c);\n            } else {\n              shift = Math.sqrt(b * b + c);\n            }\n            shift = c / (b + shift);\n          }\n          let f = (sk + sp) * (sk - sp) + shift;\n          let g = sk * ek;\n          for (let j = k; j < p - 1; j++) {\n            let t = hypotenuse(f, g);\n            if (t === 0) t = Number.MIN_VALUE;\n            let cs = f / t;\n            let sn = g / t;\n            if (j !== k) {\n              e[j - 1] = t;\n            }\n            f = cs * s[j] + sn * e[j];\n            e[j] = cs * e[j] - sn * s[j];\n            g = sn * s[j + 1];\n            s[j + 1] = cs * s[j + 1];\n            if (wantv) {\n              for (let i = 0; i < n; i++) {\n                t = cs * V.get(i, j) + sn * V.get(i, j + 1);\n                V.set(i, j + 1, -sn * V.get(i, j) + cs * V.get(i, j + 1));\n                V.set(i, j, t);\n              }\n            }\n            t = hypotenuse(f, g);\n            if (t === 0) t = Number.MIN_VALUE;\n            cs = f / t;\n            sn = g / t;\n            s[j] = t;\n            f = cs * e[j] + sn * s[j + 1];\n            s[j + 1] = -sn * e[j] + cs * s[j + 1];\n            g = sn * e[j + 1];\n            e[j + 1] = cs * e[j + 1];\n            if (wantu && j < m - 1) {\n              for (let i = 0; i < m; i++) {\n                t = cs * U.get(i, j) + sn * U.get(i, j + 1);\n                U.set(i, j + 1, -sn * U.get(i, j) + cs * U.get(i, j + 1));\n                U.set(i, j, t);\n              }\n            }\n          }\n          e[p - 2] = f;\n          break;\n        }\n        case 4: {\n          if (s[k] <= 0) {\n            s[k] = s[k] < 0 ? -s[k] : 0;\n            if (wantv) {\n              for (let i = 0; i <= pp; i++) {\n                V.set(i, k, -V.get(i, k));\n              }\n            }\n          }\n          while (k < pp) {\n            if (s[k] >= s[k + 1]) {\n              break;\n            }\n            let t = s[k];\n            s[k] = s[k + 1];\n            s[k + 1] = t;\n            if (wantv && k < n - 1) {\n              for (let i = 0; i < n; i++) {\n                t = V.get(i, k + 1);\n                V.set(i, k + 1, V.get(i, k));\n                V.set(i, k, t);\n              }\n            }\n            if (wantu && k < m - 1) {\n              for (let i = 0; i < m; i++) {\n                t = U.get(i, k + 1);\n                U.set(i, k + 1, U.get(i, k));\n                U.set(i, k, t);\n              }\n            }\n            k++;\n          }\n          p--;\n          break;\n        }\n        // no default\n      }\n    }\n\n    if (swapped) {\n      let tmp = V;\n      V = U;\n      U = tmp;\n    }\n\n    this.m = m;\n    this.n = n;\n    this.s = s;\n    this.U = U;\n    this.V = V;\n  }\n\n  solve(value) {\n    let Y = value;\n    let e = this.threshold;\n    let scols = this.s.length;\n    let Ls = Matrix.zeros(scols, scols);\n\n    for (let i = 0; i < scols; i++) {\n      if (Math.abs(this.s[i]) <= e) {\n        Ls.set(i, i, 0);\n      } else {\n        Ls.set(i, i, 1 / this.s[i]);\n      }\n    }\n\n    let U = this.U;\n    let V = this.rightSingularVectors;\n\n    let VL = V.mmul(Ls);\n    let vrows = V.rows;\n    let urows = U.rows;\n    let VLU = Matrix.zeros(vrows, urows);\n\n    for (let i = 0; i < vrows; i++) {\n      for (let j = 0; j < urows; j++) {\n        let sum = 0;\n        for (let k = 0; k < scols; k++) {\n          sum += VL.get(i, k) * U.get(j, k);\n        }\n        VLU.set(i, j, sum);\n      }\n    }\n\n    return VLU.mmul(Y);\n  }\n\n  solveForDiagonal(value) {\n    return this.solve(Matrix.diag(value));\n  }\n\n  inverse() {\n    let V = this.V;\n    let e = this.threshold;\n    let vrows = V.rows;\n    let vcols = V.columns;\n    let X = new Matrix(vrows, this.s.length);\n\n    for (let i = 0; i < vrows; i++) {\n      for (let j = 0; j < vcols; j++) {\n        if (Math.abs(this.s[j]) > e) {\n          X.set(i, j, V.get(i, j) / this.s[j]);\n        }\n      }\n    }\n\n    let U = this.U;\n\n    let urows = U.rows;\n    let ucols = U.columns;\n    let Y = new Matrix(vrows, urows);\n\n    for (let i = 0; i < vrows; i++) {\n      for (let j = 0; j < urows; j++) {\n        let sum = 0;\n        for (let k = 0; k < ucols; k++) {\n          sum += X.get(i, k) * U.get(j, k);\n        }\n        Y.set(i, j, sum);\n      }\n    }\n\n    return Y;\n  }\n\n  get condition() {\n    return this.s[0] / this.s[Math.min(this.m, this.n) - 1];\n  }\n\n  get norm2() {\n    return this.s[0];\n  }\n\n  get rank() {\n    let tol = Math.max(this.m, this.n) * this.s[0] * Number.EPSILON;\n    let r = 0;\n    let s = this.s;\n    for (let i = 0, ii = s.length; i < ii; i++) {\n      if (s[i] > tol) {\n        r++;\n      }\n    }\n    return r;\n  }\n\n  get diagonal() {\n    return Array.from(this.s);\n  }\n\n  get threshold() {\n    return (Number.EPSILON / 2) * Math.max(this.m, this.n) * this.s[0];\n  }\n\n  get leftSingularVectors() {\n    return this.U;\n  }\n\n  get rightSingularVectors() {\n    return this.V;\n  }\n\n  get diagonalMatrix() {\n    return Matrix.diag(this.s);\n  }\n}\n\nfunction inverse(matrix, useSVD = false) {\n  matrix = WrapperMatrix2D.checkMatrix(matrix);\n  if (useSVD) {\n    return new SingularValueDecomposition(matrix).inverse();\n  } else {\n    return solve(matrix, Matrix.eye(matrix.rows));\n  }\n}\n\nfunction solve(leftHandSide, rightHandSide, useSVD = false) {\n  leftHandSide = WrapperMatrix2D.checkMatrix(leftHandSide);\n  rightHandSide = WrapperMatrix2D.checkMatrix(rightHandSide);\n  if (useSVD) {\n    return new SingularValueDecomposition(leftHandSide).solve(rightHandSide);\n  } else {\n    return leftHandSide.isSquare()\n      ? new LuDecomposition(leftHandSide).solve(rightHandSide)\n      : new QrDecomposition(leftHandSide).solve(rightHandSide);\n  }\n}\n\nfunction determinant(matrix) {\n  matrix = Matrix.checkMatrix(matrix);\n  if (matrix.isSquare()) {\n    if (matrix.columns === 0) {\n      return 1;\n    }\n\n    let a, b, c, d;\n    if (matrix.columns === 2) {\n      // 2 x 2 matrix\n      a = matrix.get(0, 0);\n      b = matrix.get(0, 1);\n      c = matrix.get(1, 0);\n      d = matrix.get(1, 1);\n\n      return a * d - b * c;\n    } else if (matrix.columns === 3) {\n      // 3 x 3 matrix\n      let subMatrix0, subMatrix1, subMatrix2;\n      subMatrix0 = new MatrixSelectionView(matrix, [1, 2], [1, 2]);\n      subMatrix1 = new MatrixSelectionView(matrix, [1, 2], [0, 2]);\n      subMatrix2 = new MatrixSelectionView(matrix, [1, 2], [0, 1]);\n      a = matrix.get(0, 0);\n      b = matrix.get(0, 1);\n      c = matrix.get(0, 2);\n\n      return (\n        a * determinant(subMatrix0) -\n        b * determinant(subMatrix1) +\n        c * determinant(subMatrix2)\n      );\n    } else {\n      // general purpose determinant using the LU decomposition\n      return new LuDecomposition(matrix).determinant;\n    }\n  } else {\n    throw Error('determinant can only be calculated for a square matrix');\n  }\n}\n\nfunction xrange(n, exception) {\n  let range = [];\n  for (let i = 0; i < n; i++) {\n    if (i !== exception) {\n      range.push(i);\n    }\n  }\n  return range;\n}\n\nfunction dependenciesOneRow(\n  error,\n  matrix,\n  index,\n  thresholdValue = 10e-10,\n  thresholdError = 10e-10,\n) {\n  if (error > thresholdError) {\n    return new Array(matrix.rows + 1).fill(0);\n  } else {\n    let returnArray = matrix.addRow(index, [0]);\n    for (let i = 0; i < returnArray.rows; i++) {\n      if (Math.abs(returnArray.get(i, 0)) < thresholdValue) {\n        returnArray.set(i, 0, 0);\n      }\n    }\n    return returnArray.to1DArray();\n  }\n}\n\nfunction linearDependencies(matrix, options = {}) {\n  const { thresholdValue = 10e-10, thresholdError = 10e-10 } = options;\n  matrix = Matrix.checkMatrix(matrix);\n\n  let n = matrix.rows;\n  let results = new Matrix(n, n);\n\n  for (let i = 0; i < n; i++) {\n    let b = Matrix.columnVector(matrix.getRow(i));\n    let Abis = matrix.subMatrixRow(xrange(n, i)).transpose();\n    let svd = new SingularValueDecomposition(Abis);\n    let x = svd.solve(b);\n    let error = Matrix.sub(b, Abis.mmul(x)).abs().max();\n    results.setRow(\n      i,\n      dependenciesOneRow(error, x, i, thresholdValue, thresholdError),\n    );\n  }\n  return results;\n}\n\nfunction pseudoInverse(matrix, threshold = Number.EPSILON) {\n  matrix = Matrix.checkMatrix(matrix);\n  if (matrix.isEmpty()) {\n    // with a zero dimension, the pseudo-inverse is the transpose, since all 0xn and nx0 matrices are singular\n    // (0xn)*(nx0)*(0xn) = 0xn\n    // (nx0)*(0xn)*(nx0) = nx0\n    return matrix.transpose();\n  }\n  let svdSolution = new SingularValueDecomposition(matrix, { autoTranspose: true });\n\n  let U = svdSolution.leftSingularVectors;\n  let V = svdSolution.rightSingularVectors;\n  let s = svdSolution.diagonal;\n\n  for (let i = 0; i < s.length; i++) {\n    if (Math.abs(s[i]) > threshold) {\n      s[i] = 1.0 / s[i];\n    } else {\n      s[i] = 0.0;\n    }\n  }\n\n  return V.mmul(Matrix.diag(s).mmul(U.transpose()));\n}\n\nfunction covariance(xMatrix, yMatrix = xMatrix, options = {}) {\n  xMatrix = new Matrix(xMatrix);\n  let yIsSame = false;\n  if (\n    typeof yMatrix === 'object' &&\n    !Matrix.isMatrix(yMatrix) &&\n    !isAnyArray(yMatrix)\n  ) {\n    options = yMatrix;\n    yMatrix = xMatrix;\n    yIsSame = true;\n  } else {\n    yMatrix = new Matrix(yMatrix);\n  }\n  if (xMatrix.rows !== yMatrix.rows) {\n    throw new TypeError('Both matrices must have the same number of rows');\n  }\n  const { center = true } = options;\n  if (center) {\n    xMatrix = xMatrix.center('column');\n    if (!yIsSame) {\n      yMatrix = yMatrix.center('column');\n    }\n  }\n  const cov = xMatrix.transpose().mmul(yMatrix);\n  for (let i = 0; i < cov.rows; i++) {\n    for (let j = 0; j < cov.columns; j++) {\n      cov.set(i, j, cov.get(i, j) * (1 / (xMatrix.rows - 1)));\n    }\n  }\n  return cov;\n}\n\nfunction correlation(xMatrix, yMatrix = xMatrix, options = {}) {\n  xMatrix = new Matrix(xMatrix);\n  let yIsSame = false;\n  if (\n    typeof yMatrix === 'object' &&\n    !Matrix.isMatrix(yMatrix) &&\n    !isAnyArray(yMatrix)\n  ) {\n    options = yMatrix;\n    yMatrix = xMatrix;\n    yIsSame = true;\n  } else {\n    yMatrix = new Matrix(yMatrix);\n  }\n  if (xMatrix.rows !== yMatrix.rows) {\n    throw new TypeError('Both matrices must have the same number of rows');\n  }\n\n  const { center = true, scale = true } = options;\n  if (center) {\n    xMatrix.center('column');\n    if (!yIsSame) {\n      yMatrix.center('column');\n    }\n  }\n  if (scale) {\n    xMatrix.scale('column');\n    if (!yIsSame) {\n      yMatrix.scale('column');\n    }\n  }\n\n  const sdx = xMatrix.standardDeviation('column', { unbiased: true });\n  const sdy = yIsSame\n    ? sdx\n    : yMatrix.standardDeviation('column', { unbiased: true });\n\n  const corr = xMatrix.transpose().mmul(yMatrix);\n  for (let i = 0; i < corr.rows; i++) {\n    for (let j = 0; j < corr.columns; j++) {\n      corr.set(\n        i,\n        j,\n        corr.get(i, j) * (1 / (sdx[i] * sdy[j])) * (1 / (xMatrix.rows - 1)),\n      );\n    }\n  }\n  return corr;\n}\n\nclass EigenvalueDecomposition {\n  constructor(matrix, options = {}) {\n    const { assumeSymmetric = false } = options;\n\n    matrix = WrapperMatrix2D.checkMatrix(matrix);\n    if (!matrix.isSquare()) {\n      throw new Error('Matrix is not a square matrix');\n    }\n\n    if (matrix.isEmpty()) {\n      throw new Error('Matrix must be non-empty');\n    }\n\n    let n = matrix.columns;\n    let V = new Matrix(n, n);\n    let d = new Float64Array(n);\n    let e = new Float64Array(n);\n    let value = matrix;\n    let i, j;\n\n    let isSymmetric = false;\n    if (assumeSymmetric) {\n      isSymmetric = true;\n    } else {\n      isSymmetric = matrix.isSymmetric();\n    }\n\n    if (isSymmetric) {\n      for (i = 0; i < n; i++) {\n        for (j = 0; j < n; j++) {\n          V.set(i, j, value.get(i, j));\n        }\n      }\n      tred2(n, e, d, V);\n      tql2(n, e, d, V);\n    } else {\n      let H = new Matrix(n, n);\n      let ort = new Float64Array(n);\n      for (j = 0; j < n; j++) {\n        for (i = 0; i < n; i++) {\n          H.set(i, j, value.get(i, j));\n        }\n      }\n      orthes(n, H, ort, V);\n      hqr2(n, e, d, V, H);\n    }\n\n    this.n = n;\n    this.e = e;\n    this.d = d;\n    this.V = V;\n  }\n\n  get realEigenvalues() {\n    return Array.from(this.d);\n  }\n\n  get imaginaryEigenvalues() {\n    return Array.from(this.e);\n  }\n\n  get eigenvectorMatrix() {\n    return this.V;\n  }\n\n  get diagonalMatrix() {\n    let n = this.n;\n    let e = this.e;\n    let d = this.d;\n    let X = new Matrix(n, n);\n    let i, j;\n    for (i = 0; i < n; i++) {\n      for (j = 0; j < n; j++) {\n        X.set(i, j, 0);\n      }\n      X.set(i, i, d[i]);\n      if (e[i] > 0) {\n        X.set(i, i + 1, e[i]);\n      } else if (e[i] < 0) {\n        X.set(i, i - 1, e[i]);\n      }\n    }\n    return X;\n  }\n}\n\nfunction tred2(n, e, d, V) {\n  let f, g, h, i, j, k, hh, scale;\n\n  for (j = 0; j < n; j++) {\n    d[j] = V.get(n - 1, j);\n  }\n\n  for (i = n - 1; i > 0; i--) {\n    scale = 0;\n    h = 0;\n    for (k = 0; k < i; k++) {\n      scale = scale + Math.abs(d[k]);\n    }\n\n    if (scale === 0) {\n      e[i] = d[i - 1];\n      for (j = 0; j < i; j++) {\n        d[j] = V.get(i - 1, j);\n        V.set(i, j, 0);\n        V.set(j, i, 0);\n      }\n    } else {\n      for (k = 0; k < i; k++) {\n        d[k] /= scale;\n        h += d[k] * d[k];\n      }\n\n      f = d[i - 1];\n      g = Math.sqrt(h);\n      if (f > 0) {\n        g = -g;\n      }\n\n      e[i] = scale * g;\n      h = h - f * g;\n      d[i - 1] = f - g;\n      for (j = 0; j < i; j++) {\n        e[j] = 0;\n      }\n\n      for (j = 0; j < i; j++) {\n        f = d[j];\n        V.set(j, i, f);\n        g = e[j] + V.get(j, j) * f;\n        for (k = j + 1; k <= i - 1; k++) {\n          g += V.get(k, j) * d[k];\n          e[k] += V.get(k, j) * f;\n        }\n        e[j] = g;\n      }\n\n      f = 0;\n      for (j = 0; j < i; j++) {\n        e[j] /= h;\n        f += e[j] * d[j];\n      }\n\n      hh = f / (h + h);\n      for (j = 0; j < i; j++) {\n        e[j] -= hh * d[j];\n      }\n\n      for (j = 0; j < i; j++) {\n        f = d[j];\n        g = e[j];\n        for (k = j; k <= i - 1; k++) {\n          V.set(k, j, V.get(k, j) - (f * e[k] + g * d[k]));\n        }\n        d[j] = V.get(i - 1, j);\n        V.set(i, j, 0);\n      }\n    }\n    d[i] = h;\n  }\n\n  for (i = 0; i < n - 1; i++) {\n    V.set(n - 1, i, V.get(i, i));\n    V.set(i, i, 1);\n    h = d[i + 1];\n    if (h !== 0) {\n      for (k = 0; k <= i; k++) {\n        d[k] = V.get(k, i + 1) / h;\n      }\n\n      for (j = 0; j <= i; j++) {\n        g = 0;\n        for (k = 0; k <= i; k++) {\n          g += V.get(k, i + 1) * V.get(k, j);\n        }\n        for (k = 0; k <= i; k++) {\n          V.set(k, j, V.get(k, j) - g * d[k]);\n        }\n      }\n    }\n\n    for (k = 0; k <= i; k++) {\n      V.set(k, i + 1, 0);\n    }\n  }\n\n  for (j = 0; j < n; j++) {\n    d[j] = V.get(n - 1, j);\n    V.set(n - 1, j, 0);\n  }\n\n  V.set(n - 1, n - 1, 1);\n  e[0] = 0;\n}\n\nfunction tql2(n, e, d, V) {\n  let g, h, i, j, k, l, m, p, r, dl1, c, c2, c3, el1, s, s2;\n\n  for (i = 1; i < n; i++) {\n    e[i - 1] = e[i];\n  }\n\n  e[n - 1] = 0;\n\n  let f = 0;\n  let tst1 = 0;\n  let eps = Number.EPSILON;\n\n  for (l = 0; l < n; l++) {\n    tst1 = Math.max(tst1, Math.abs(d[l]) + Math.abs(e[l]));\n    m = l;\n    while (m < n) {\n      if (Math.abs(e[m]) <= eps * tst1) {\n        break;\n      }\n      m++;\n    }\n\n    if (m > l) {\n      do {\n\n        g = d[l];\n        p = (d[l + 1] - g) / (2 * e[l]);\n        r = hypotenuse(p, 1);\n        if (p < 0) {\n          r = -r;\n        }\n\n        d[l] = e[l] / (p + r);\n        d[l + 1] = e[l] * (p + r);\n        dl1 = d[l + 1];\n        h = g - d[l];\n        for (i = l + 2; i < n; i++) {\n          d[i] -= h;\n        }\n\n        f = f + h;\n\n        p = d[m];\n        c = 1;\n        c2 = c;\n        c3 = c;\n        el1 = e[l + 1];\n        s = 0;\n        s2 = 0;\n        for (i = m - 1; i >= l; i--) {\n          c3 = c2;\n          c2 = c;\n          s2 = s;\n          g = c * e[i];\n          h = c * p;\n          r = hypotenuse(p, e[i]);\n          e[i + 1] = s * r;\n          s = e[i] / r;\n          c = p / r;\n          p = c * d[i] - s * g;\n          d[i + 1] = h + s * (c * g + s * d[i]);\n\n          for (k = 0; k < n; k++) {\n            h = V.get(k, i + 1);\n            V.set(k, i + 1, s * V.get(k, i) + c * h);\n            V.set(k, i, c * V.get(k, i) - s * h);\n          }\n        }\n\n        p = (-s * s2 * c3 * el1 * e[l]) / dl1;\n        e[l] = s * p;\n        d[l] = c * p;\n      } while (Math.abs(e[l]) > eps * tst1);\n    }\n    d[l] = d[l] + f;\n    e[l] = 0;\n  }\n\n  for (i = 0; i < n - 1; i++) {\n    k = i;\n    p = d[i];\n    for (j = i + 1; j < n; j++) {\n      if (d[j] < p) {\n        k = j;\n        p = d[j];\n      }\n    }\n\n    if (k !== i) {\n      d[k] = d[i];\n      d[i] = p;\n      for (j = 0; j < n; j++) {\n        p = V.get(j, i);\n        V.set(j, i, V.get(j, k));\n        V.set(j, k, p);\n      }\n    }\n  }\n}\n\nfunction orthes(n, H, ort, V) {\n  let low = 0;\n  let high = n - 1;\n  let f, g, h, i, j, m;\n  let scale;\n\n  for (m = low + 1; m <= high - 1; m++) {\n    scale = 0;\n    for (i = m; i <= high; i++) {\n      scale = scale + Math.abs(H.get(i, m - 1));\n    }\n\n    if (scale !== 0) {\n      h = 0;\n      for (i = high; i >= m; i--) {\n        ort[i] = H.get(i, m - 1) / scale;\n        h += ort[i] * ort[i];\n      }\n\n      g = Math.sqrt(h);\n      if (ort[m] > 0) {\n        g = -g;\n      }\n\n      h = h - ort[m] * g;\n      ort[m] = ort[m] - g;\n\n      for (j = m; j < n; j++) {\n        f = 0;\n        for (i = high; i >= m; i--) {\n          f += ort[i] * H.get(i, j);\n        }\n\n        f = f / h;\n        for (i = m; i <= high; i++) {\n          H.set(i, j, H.get(i, j) - f * ort[i]);\n        }\n      }\n\n      for (i = 0; i <= high; i++) {\n        f = 0;\n        for (j = high; j >= m; j--) {\n          f += ort[j] * H.get(i, j);\n        }\n\n        f = f / h;\n        for (j = m; j <= high; j++) {\n          H.set(i, j, H.get(i, j) - f * ort[j]);\n        }\n      }\n\n      ort[m] = scale * ort[m];\n      H.set(m, m - 1, scale * g);\n    }\n  }\n\n  for (i = 0; i < n; i++) {\n    for (j = 0; j < n; j++) {\n      V.set(i, j, i === j ? 1 : 0);\n    }\n  }\n\n  for (m = high - 1; m >= low + 1; m--) {\n    if (H.get(m, m - 1) !== 0) {\n      for (i = m + 1; i <= high; i++) {\n        ort[i] = H.get(i, m - 1);\n      }\n\n      for (j = m; j <= high; j++) {\n        g = 0;\n        for (i = m; i <= high; i++) {\n          g += ort[i] * V.get(i, j);\n        }\n\n        g = g / ort[m] / H.get(m, m - 1);\n        for (i = m; i <= high; i++) {\n          V.set(i, j, V.get(i, j) + g * ort[i]);\n        }\n      }\n    }\n  }\n}\n\nfunction hqr2(nn, e, d, V, H) {\n  let n = nn - 1;\n  let low = 0;\n  let high = nn - 1;\n  let eps = Number.EPSILON;\n  let exshift = 0;\n  let norm = 0;\n  let p = 0;\n  let q = 0;\n  let r = 0;\n  let s = 0;\n  let z = 0;\n  let iter = 0;\n  let i, j, k, l, m, t, w, x, y;\n  let ra, sa, vr, vi;\n  let notlast, cdivres;\n\n  for (i = 0; i < nn; i++) {\n    if (i < low || i > high) {\n      d[i] = H.get(i, i);\n      e[i] = 0;\n    }\n\n    for (j = Math.max(i - 1, 0); j < nn; j++) {\n      norm = norm + Math.abs(H.get(i, j));\n    }\n  }\n\n  while (n >= low) {\n    l = n;\n    while (l > low) {\n      s = Math.abs(H.get(l - 1, l - 1)) + Math.abs(H.get(l, l));\n      if (s === 0) {\n        s = norm;\n      }\n      if (Math.abs(H.get(l, l - 1)) < eps * s) {\n        break;\n      }\n      l--;\n    }\n\n    if (l === n) {\n      H.set(n, n, H.get(n, n) + exshift);\n      d[n] = H.get(n, n);\n      e[n] = 0;\n      n--;\n      iter = 0;\n    } else if (l === n - 1) {\n      w = H.get(n, n - 1) * H.get(n - 1, n);\n      p = (H.get(n - 1, n - 1) - H.get(n, n)) / 2;\n      q = p * p + w;\n      z = Math.sqrt(Math.abs(q));\n      H.set(n, n, H.get(n, n) + exshift);\n      H.set(n - 1, n - 1, H.get(n - 1, n - 1) + exshift);\n      x = H.get(n, n);\n\n      if (q >= 0) {\n        z = p >= 0 ? p + z : p - z;\n        d[n - 1] = x + z;\n        d[n] = d[n - 1];\n        if (z !== 0) {\n          d[n] = x - w / z;\n        }\n        e[n - 1] = 0;\n        e[n] = 0;\n        x = H.get(n, n - 1);\n        s = Math.abs(x) + Math.abs(z);\n        p = x / s;\n        q = z / s;\n        r = Math.sqrt(p * p + q * q);\n        p = p / r;\n        q = q / r;\n\n        for (j = n - 1; j < nn; j++) {\n          z = H.get(n - 1, j);\n          H.set(n - 1, j, q * z + p * H.get(n, j));\n          H.set(n, j, q * H.get(n, j) - p * z);\n        }\n\n        for (i = 0; i <= n; i++) {\n          z = H.get(i, n - 1);\n          H.set(i, n - 1, q * z + p * H.get(i, n));\n          H.set(i, n, q * H.get(i, n) - p * z);\n        }\n\n        for (i = low; i <= high; i++) {\n          z = V.get(i, n - 1);\n          V.set(i, n - 1, q * z + p * V.get(i, n));\n          V.set(i, n, q * V.get(i, n) - p * z);\n        }\n      } else {\n        d[n - 1] = x + p;\n        d[n] = x + p;\n        e[n - 1] = z;\n        e[n] = -z;\n      }\n\n      n = n - 2;\n      iter = 0;\n    } else {\n      x = H.get(n, n);\n      y = 0;\n      w = 0;\n      if (l < n) {\n        y = H.get(n - 1, n - 1);\n        w = H.get(n, n - 1) * H.get(n - 1, n);\n      }\n\n      if (iter === 10) {\n        exshift += x;\n        for (i = low; i <= n; i++) {\n          H.set(i, i, H.get(i, i) - x);\n        }\n        s = Math.abs(H.get(n, n - 1)) + Math.abs(H.get(n - 1, n - 2));\n        // eslint-disable-next-line no-multi-assign\n        x = y = 0.75 * s;\n        w = -0.4375 * s * s;\n      }\n\n      if (iter === 30) {\n        s = (y - x) / 2;\n        s = s * s + w;\n        if (s > 0) {\n          s = Math.sqrt(s);\n          if (y < x) {\n            s = -s;\n          }\n          s = x - w / ((y - x) / 2 + s);\n          for (i = low; i <= n; i++) {\n            H.set(i, i, H.get(i, i) - s);\n          }\n          exshift += s;\n          // eslint-disable-next-line no-multi-assign\n          x = y = w = 0.964;\n        }\n      }\n\n      iter = iter + 1;\n\n      m = n - 2;\n      while (m >= l) {\n        z = H.get(m, m);\n        r = x - z;\n        s = y - z;\n        p = (r * s - w) / H.get(m + 1, m) + H.get(m, m + 1);\n        q = H.get(m + 1, m + 1) - z - r - s;\n        r = H.get(m + 2, m + 1);\n        s = Math.abs(p) + Math.abs(q) + Math.abs(r);\n        p = p / s;\n        q = q / s;\n        r = r / s;\n        if (m === l) {\n          break;\n        }\n        if (\n          Math.abs(H.get(m, m - 1)) * (Math.abs(q) + Math.abs(r)) <\n          eps *\n            (Math.abs(p) *\n              (Math.abs(H.get(m - 1, m - 1)) +\n                Math.abs(z) +\n                Math.abs(H.get(m + 1, m + 1))))\n        ) {\n          break;\n        }\n        m--;\n      }\n\n      for (i = m + 2; i <= n; i++) {\n        H.set(i, i - 2, 0);\n        if (i > m + 2) {\n          H.set(i, i - 3, 0);\n        }\n      }\n\n      for (k = m; k <= n - 1; k++) {\n        notlast = k !== n - 1;\n        if (k !== m) {\n          p = H.get(k, k - 1);\n          q = H.get(k + 1, k - 1);\n          r = notlast ? H.get(k + 2, k - 1) : 0;\n          x = Math.abs(p) + Math.abs(q) + Math.abs(r);\n          if (x !== 0) {\n            p = p / x;\n            q = q / x;\n            r = r / x;\n          }\n        }\n\n        if (x === 0) {\n          break;\n        }\n\n        s = Math.sqrt(p * p + q * q + r * r);\n        if (p < 0) {\n          s = -s;\n        }\n\n        if (s !== 0) {\n          if (k !== m) {\n            H.set(k, k - 1, -s * x);\n          } else if (l !== m) {\n            H.set(k, k - 1, -H.get(k, k - 1));\n          }\n\n          p = p + s;\n          x = p / s;\n          y = q / s;\n          z = r / s;\n          q = q / p;\n          r = r / p;\n\n          for (j = k; j < nn; j++) {\n            p = H.get(k, j) + q * H.get(k + 1, j);\n            if (notlast) {\n              p = p + r * H.get(k + 2, j);\n              H.set(k + 2, j, H.get(k + 2, j) - p * z);\n            }\n\n            H.set(k, j, H.get(k, j) - p * x);\n            H.set(k + 1, j, H.get(k + 1, j) - p * y);\n          }\n\n          for (i = 0; i <= Math.min(n, k + 3); i++) {\n            p = x * H.get(i, k) + y * H.get(i, k + 1);\n            if (notlast) {\n              p = p + z * H.get(i, k + 2);\n              H.set(i, k + 2, H.get(i, k + 2) - p * r);\n            }\n\n            H.set(i, k, H.get(i, k) - p);\n            H.set(i, k + 1, H.get(i, k + 1) - p * q);\n          }\n\n          for (i = low; i <= high; i++) {\n            p = x * V.get(i, k) + y * V.get(i, k + 1);\n            if (notlast) {\n              p = p + z * V.get(i, k + 2);\n              V.set(i, k + 2, V.get(i, k + 2) - p * r);\n            }\n\n            V.set(i, k, V.get(i, k) - p);\n            V.set(i, k + 1, V.get(i, k + 1) - p * q);\n          }\n        }\n      }\n    }\n  }\n\n  if (norm === 0) {\n    return;\n  }\n\n  for (n = nn - 1; n >= 0; n--) {\n    p = d[n];\n    q = e[n];\n\n    if (q === 0) {\n      l = n;\n      H.set(n, n, 1);\n      for (i = n - 1; i >= 0; i--) {\n        w = H.get(i, i) - p;\n        r = 0;\n        for (j = l; j <= n; j++) {\n          r = r + H.get(i, j) * H.get(j, n);\n        }\n\n        if (e[i] < 0) {\n          z = w;\n          s = r;\n        } else {\n          l = i;\n          if (e[i] === 0) {\n            H.set(i, n, w !== 0 ? -r / w : -r / (eps * norm));\n          } else {\n            x = H.get(i, i + 1);\n            y = H.get(i + 1, i);\n            q = (d[i] - p) * (d[i] - p) + e[i] * e[i];\n            t = (x * s - z * r) / q;\n            H.set(i, n, t);\n            H.set(\n              i + 1,\n              n,\n              Math.abs(x) > Math.abs(z) ? (-r - w * t) / x : (-s - y * t) / z,\n            );\n          }\n\n          t = Math.abs(H.get(i, n));\n          if (eps * t * t > 1) {\n            for (j = i; j <= n; j++) {\n              H.set(j, n, H.get(j, n) / t);\n            }\n          }\n        }\n      }\n    } else if (q < 0) {\n      l = n - 1;\n\n      if (Math.abs(H.get(n, n - 1)) > Math.abs(H.get(n - 1, n))) {\n        H.set(n - 1, n - 1, q / H.get(n, n - 1));\n        H.set(n - 1, n, -(H.get(n, n) - p) / H.get(n, n - 1));\n      } else {\n        cdivres = cdiv(0, -H.get(n - 1, n), H.get(n - 1, n - 1) - p, q);\n        H.set(n - 1, n - 1, cdivres[0]);\n        H.set(n - 1, n, cdivres[1]);\n      }\n\n      H.set(n, n - 1, 0);\n      H.set(n, n, 1);\n      for (i = n - 2; i >= 0; i--) {\n        ra = 0;\n        sa = 0;\n        for (j = l; j <= n; j++) {\n          ra = ra + H.get(i, j) * H.get(j, n - 1);\n          sa = sa + H.get(i, j) * H.get(j, n);\n        }\n\n        w = H.get(i, i) - p;\n\n        if (e[i] < 0) {\n          z = w;\n          r = ra;\n          s = sa;\n        } else {\n          l = i;\n          if (e[i] === 0) {\n            cdivres = cdiv(-ra, -sa, w, q);\n            H.set(i, n - 1, cdivres[0]);\n            H.set(i, n, cdivres[1]);\n          } else {\n            x = H.get(i, i + 1);\n            y = H.get(i + 1, i);\n            vr = (d[i] - p) * (d[i] - p) + e[i] * e[i] - q * q;\n            vi = (d[i] - p) * 2 * q;\n            if (vr === 0 && vi === 0) {\n              vr =\n                eps *\n                norm *\n                (Math.abs(w) +\n                  Math.abs(q) +\n                  Math.abs(x) +\n                  Math.abs(y) +\n                  Math.abs(z));\n            }\n            cdivres = cdiv(\n              x * r - z * ra + q * sa,\n              x * s - z * sa - q * ra,\n              vr,\n              vi,\n            );\n            H.set(i, n - 1, cdivres[0]);\n            H.set(i, n, cdivres[1]);\n            if (Math.abs(x) > Math.abs(z) + Math.abs(q)) {\n              H.set(\n                i + 1,\n                n - 1,\n                (-ra - w * H.get(i, n - 1) + q * H.get(i, n)) / x,\n              );\n              H.set(\n                i + 1,\n                n,\n                (-sa - w * H.get(i, n) - q * H.get(i, n - 1)) / x,\n              );\n            } else {\n              cdivres = cdiv(\n                -r - y * H.get(i, n - 1),\n                -s - y * H.get(i, n),\n                z,\n                q,\n              );\n              H.set(i + 1, n - 1, cdivres[0]);\n              H.set(i + 1, n, cdivres[1]);\n            }\n          }\n\n          t = Math.max(Math.abs(H.get(i, n - 1)), Math.abs(H.get(i, n)));\n          if (eps * t * t > 1) {\n            for (j = i; j <= n; j++) {\n              H.set(j, n - 1, H.get(j, n - 1) / t);\n              H.set(j, n, H.get(j, n) / t);\n            }\n          }\n        }\n      }\n    }\n  }\n\n  for (i = 0; i < nn; i++) {\n    if (i < low || i > high) {\n      for (j = i; j < nn; j++) {\n        V.set(i, j, H.get(i, j));\n      }\n    }\n  }\n\n  for (j = nn - 1; j >= low; j--) {\n    for (i = low; i <= high; i++) {\n      z = 0;\n      for (k = low; k <= Math.min(j, high); k++) {\n        z = z + V.get(i, k) * H.get(k, j);\n      }\n      V.set(i, j, z);\n    }\n  }\n}\n\nfunction cdiv(xr, xi, yr, yi) {\n  let r, d;\n  if (Math.abs(yr) > Math.abs(yi)) {\n    r = yi / yr;\n    d = yr + r * yi;\n    return [(xr + r * xi) / d, (xi - r * xr) / d];\n  } else {\n    r = yr / yi;\n    d = yi + r * yr;\n    return [(r * xr + xi) / d, (r * xi - xr) / d];\n  }\n}\n\nclass CholeskyDecomposition {\n  constructor(value) {\n    value = WrapperMatrix2D.checkMatrix(value);\n    if (!value.isSymmetric()) {\n      throw new Error('Matrix is not symmetric');\n    }\n\n    let a = value;\n    let dimension = a.rows;\n    let l = new Matrix(dimension, dimension);\n    let positiveDefinite = true;\n    let i, j, k;\n\n    for (j = 0; j < dimension; j++) {\n      let d = 0;\n      for (k = 0; k < j; k++) {\n        let s = 0;\n        for (i = 0; i < k; i++) {\n          s += l.get(k, i) * l.get(j, i);\n        }\n        s = (a.get(j, k) - s) / l.get(k, k);\n        l.set(j, k, s);\n        d = d + s * s;\n      }\n\n      d = a.get(j, j) - d;\n\n      positiveDefinite &&= d > 0;\n      l.set(j, j, Math.sqrt(Math.max(d, 0)));\n      for (k = j + 1; k < dimension; k++) {\n        l.set(j, k, 0);\n      }\n    }\n\n    this.L = l;\n    this.positiveDefinite = positiveDefinite;\n  }\n\n  isPositiveDefinite() {\n    return this.positiveDefinite;\n  }\n\n  solve(value) {\n    value = WrapperMatrix2D.checkMatrix(value);\n\n    let l = this.L;\n    let dimension = l.rows;\n\n    if (value.rows !== dimension) {\n      throw new Error('Matrix dimensions do not match');\n    }\n    if (this.isPositiveDefinite() === false) {\n      throw new Error('Matrix is not positive definite');\n    }\n\n    let count = value.columns;\n    let B = value.clone();\n    let i, j, k;\n\n    for (k = 0; k < dimension; k++) {\n      for (j = 0; j < count; j++) {\n        for (i = 0; i < k; i++) {\n          B.set(k, j, B.get(k, j) - B.get(i, j) * l.get(k, i));\n        }\n        B.set(k, j, B.get(k, j) / l.get(k, k));\n      }\n    }\n\n    for (k = dimension - 1; k >= 0; k--) {\n      for (j = 0; j < count; j++) {\n        for (i = k + 1; i < dimension; i++) {\n          B.set(k, j, B.get(k, j) - B.get(i, j) * l.get(i, k));\n        }\n        B.set(k, j, B.get(k, j) / l.get(k, k));\n      }\n    }\n\n    return B;\n  }\n\n  get lowerTriangularMatrix() {\n    return this.L;\n  }\n}\n\nclass nipals {\n  constructor(X, options = {}) {\n    X = WrapperMatrix2D.checkMatrix(X);\n    let { Y } = options;\n    const {\n      scaleScores = false,\n      maxIterations = 1000,\n      terminationCriteria = 1e-10,\n    } = options;\n\n    let u;\n    if (Y) {\n      if (isAnyArray(Y) && typeof Y[0] === 'number') {\n        Y = Matrix.columnVector(Y);\n      } else {\n        Y = WrapperMatrix2D.checkMatrix(Y);\n      }\n      if (Y.rows !== X.rows) {\n        throw new Error('Y should have the same number of rows as X');\n      }\n      u = Y.getColumnVector(0);\n    } else {\n      u = X.getColumnVector(0);\n    }\n\n    let diff = 1;\n    let t, q, w, tOld;\n\n    for (\n      let counter = 0;\n      counter < maxIterations && diff > terminationCriteria;\n      counter++\n    ) {\n      w = X.transpose().mmul(u).div(u.transpose().mmul(u).get(0, 0));\n      w = w.div(w.norm());\n\n      t = X.mmul(w).div(w.transpose().mmul(w).get(0, 0));\n\n      if (counter > 0) {\n        diff = t.clone().sub(tOld).pow(2).sum();\n      }\n      tOld = t.clone();\n\n      if (Y) {\n        q = Y.transpose().mmul(t).div(t.transpose().mmul(t).get(0, 0));\n        q = q.div(q.norm());\n\n        u = Y.mmul(q).div(q.transpose().mmul(q).get(0, 0));\n      } else {\n        u = t;\n      }\n    }\n\n    if (Y) {\n      let p = X.transpose().mmul(t).div(t.transpose().mmul(t).get(0, 0));\n      p = p.div(p.norm());\n      let xResidual = X.clone().sub(t.clone().mmul(p.transpose()));\n      let residual = u.transpose().mmul(t).div(t.transpose().mmul(t).get(0, 0));\n      let yResidual = Y.clone().sub(\n        t.clone().mulS(residual.get(0, 0)).mmul(q.transpose()),\n      );\n\n      this.t = t;\n      this.p = p.transpose();\n      this.w = w.transpose();\n      this.q = q;\n      this.u = u;\n      this.s = t.transpose().mmul(t);\n      this.xResidual = xResidual;\n      this.yResidual = yResidual;\n      this.betas = residual;\n    } else {\n      this.w = w.transpose();\n      this.s = t.transpose().mmul(t).sqrt();\n      if (scaleScores) {\n        this.t = t.clone().div(this.s.get(0, 0));\n      } else {\n        this.t = t;\n      }\n      this.xResidual = X.sub(t.mmul(w.transpose()));\n    }\n  }\n}\n\nexports.AbstractMatrix = AbstractMatrix;\nexports.CHO = CholeskyDecomposition;\nexports.CholeskyDecomposition = CholeskyDecomposition;\nexports.DistanceMatrix = DistanceMatrix;\nexports.EVD = EigenvalueDecomposition;\nexports.EigenvalueDecomposition = EigenvalueDecomposition;\nexports.LU = LuDecomposition;\nexports.LuDecomposition = LuDecomposition;\nexports.Matrix = Matrix;\nexports.MatrixColumnSelectionView = MatrixColumnSelectionView;\nexports.MatrixColumnView = MatrixColumnView;\nexports.MatrixFlipColumnView = MatrixFlipColumnView;\nexports.MatrixFlipRowView = MatrixFlipRowView;\nexports.MatrixRowSelectionView = MatrixRowSelectionView;\nexports.MatrixRowView = MatrixRowView;\nexports.MatrixSelectionView = MatrixSelectionView;\nexports.MatrixSubView = MatrixSubView;\nexports.MatrixTransposeView = MatrixTransposeView;\nexports.NIPALS = nipals;\nexports.Nipals = nipals;\nexports.QR = QrDecomposition;\nexports.QrDecomposition = QrDecomposition;\nexports.SVD = SingularValueDecomposition;\nexports.SingularValueDecomposition = SingularValueDecomposition;\nexports.SymmetricMatrix = SymmetricMatrix;\nexports.WrapperMatrix1D = WrapperMatrix1D;\nexports.WrapperMatrix2D = WrapperMatrix2D;\nexports.correlation = correlation;\nexports.covariance = covariance;\nexports.default = Matrix;\nexports.determinant = determinant;\nexports.inverse = inverse;\nexports.linearDependencies = linearDependencies;\nexports.pseudoInverse = pseudoInverse;\nexports.solve = solve;\nexports.wrap = wrap;\n//# sourceMappingURL=matrix.js.map\n","import * as matrix from './matrix.js';\n\nexport const AbstractMatrix = matrix.AbstractMatrix;\nexport const CHO = matrix.CHO;\nexport const CholeskyDecomposition = matrix.CholeskyDecomposition;\nexport const DistanceMatrix = matrix.DistanceMatrix;\nexport const EVD = matrix.EVD;\nexport const EigenvalueDecomposition = matrix.EigenvalueDecomposition;\nexport const LU = matrix.LU;\nexport const LuDecomposition = matrix.LuDecomposition;\nexport const Matrix = matrix.Matrix;\nexport const MatrixColumnSelectionView = matrix.MatrixColumnSelectionView;\nexport const MatrixColumnView = matrix.MatrixColumnView;\nexport const MatrixFlipColumnView = matrix.MatrixFlipColumnView;\nexport const MatrixFlipRowView = matrix.MatrixFlipRowView;\nexport const MatrixRowSelectionView = matrix.MatrixRowSelectionView;\nexport const MatrixRowView = matrix.MatrixRowView;\nexport const MatrixSelectionView = matrix.MatrixSelectionView;\nexport const MatrixSubView = matrix.MatrixSubView;\nexport const MatrixTransposeView = matrix.MatrixTransposeView;\nexport const NIPALS = matrix.NIPALS;\nexport const Nipals = matrix.Nipals;\nexport const QR = matrix.QR;\nexport const QrDecomposition = matrix.QrDecomposition;\nexport const SVD = matrix.SVD;\nexport const SingularValueDecomposition = matrix.SingularValueDecomposition;\nexport const SymmetricMatrix = matrix.SymmetricMatrix;\nexport const WrapperMatrix1D = matrix.WrapperMatrix1D;\nexport const WrapperMatrix2D = matrix.WrapperMatrix2D;\nexport const correlation = matrix.correlation;\nexport const covariance = matrix.covariance;\nexport default matrix.default.Matrix ? matrix.default.Matrix : matrix.Matrix;\nexport const determinant = matrix.determinant;\nexport const inverse = matrix.inverse;\nexport const linearDependencies = matrix.linearDependencies;\nexport const pseudoInverse = matrix.pseudoInverse;\nexport const solve = matrix.solve;\nexport const wrap = matrix.wrap;\n","import { Matrix } from 'ml-matrix';\nconst absDiff = (a, b) => Math.abs(a - b);\n/**\n * Generate a cost matrix from two set of values using the function passed. by default it\n * generate the cost matrix of absolute value of differences.\n * @param rowsArray - Array of values that will represent the rows of the cost matrix.\n * @param columnsArray - Array of values that will represent the columns of the cost matrix.\n * @param options\n * @returns - A matrix instance with dimensions rowsArray.length x columnsArray.length\n */\nexport function xCostMatrix(rowsArray, columnsArray, options = {}) {\n    const { fct = absDiff } = options;\n    const nbRows = rowsArray.length;\n    const nbColumns = columnsArray.length;\n    const result = new Matrix(nbRows, nbColumns);\n    for (let r = 0; r < nbRows; r++) {\n        for (let c = 0; c < nbColumns; c++) {\n            result.set(r, c, fct(rowsArray[r], columnsArray[c]));\n        }\n    }\n    return result;\n}\n//# sourceMappingURL=xCostMatrix.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * Calculate an array of the same size that is the cumulative values\n * @param array - initial array\n */\nexport function xCumulative(array) {\n    if (!isAnyArray(array)) {\n        throw new TypeError('input must be an array');\n    }\n    const newArray = new Float64Array(array.length);\n    if (array.length === 0)\n        return newArray;\n    newArray[0] = array[0];\n    for (let i = 1; i < array.length; i++) {\n        newArray[i] = newArray[i - 1] + array[i];\n    }\n    return newArray;\n}\n//# sourceMappingURL=xCumulative.js.map","import { xCheck } from \"./xCheck.js\";\nimport { xGetFromToIndex } from \"./xGetFromToIndex.js\";\n/**\n * Computes the mean value of an array of values.\n * @param array - array of numbers\n * @param options - options\n */\nexport function xMean(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let sumValue = array[fromIndex];\n    for (let i = fromIndex + 1; i <= toIndex; i++) {\n        sumValue += array[i];\n    }\n    return sumValue / (toIndex - fromIndex + 1);\n}\n//# sourceMappingURL=xMean.js.map","import { isAnyArray } from 'is-any-array';\nimport { xMean } from \"./xMean.js\";\n/**\n * Finds the variance of the data\n * @param values - the values of the array\n * @param options - options\n * @returns variance\n */\nexport function xVariance(values, options = {}) {\n    if (!isAnyArray(values)) {\n        throw new TypeError('input must be an array');\n    }\n    const { unbiased = true, mean = xMean(values) } = options;\n    let sqrError = 0;\n    for (const value of values) {\n        const x = value - mean;\n        sqrError += x * x;\n    }\n    if (unbiased) {\n        return sqrError / (values.length - 1);\n    }\n    else {\n        return sqrError / values.length;\n    }\n}\n//# sourceMappingURL=xVariance.js.map","import { xVariance } from \"./xVariance.js\";\n/**\n * Finds the standard deviation for the data at hand\n * @param values - values in the data\n * @param options - options\n * @returns standard deviation\n */\nexport function xStandardDeviation(values, options = {}) {\n    return Math.sqrt(xVariance(values, options));\n}\n//# sourceMappingURL=xStandardDeviation.js.map","import { xCheck } from \"./xCheck.js\";\n/**\n * Returns a copy of the data as a Float64Array.\n * @param array - array of numbers\n */\nexport function xEnsureFloat64(array) {\n    xCheck(array);\n    if (array instanceof Float64Array) {\n        return array.slice(0);\n    }\n    return Float64Array.from(array);\n}\n//# sourceMappingURL=xEnsureFloat64.js.map","import { xFindClosestIndex } from \"./xFindClosestIndex.js\";\n/**\n *  Returns the targetIndex\n * @param x - array of numbers\n * @param options - options\n */\nexport function xGetTargetIndex(x, options = {}) {\n    const { target, targetIndex } = options;\n    if (targetIndex === undefined) {\n        if (target !== undefined) {\n            return xFindClosestIndex(x, target);\n        }\n        else {\n            return 0;\n        }\n    }\n    return targetIndex;\n}\n//# sourceMappingURL=xGetTargetIndex.js.map","'use strict';\n\nfunction FFT(size) {\n  this.size = size | 0;\n  if (this.size <= 1 || (this.size & (this.size - 1)) !== 0)\n    throw new Error('FFT size must be a power of two and bigger than 1');\n\n  this._csize = size << 1;\n\n  // NOTE: Use of `var` is intentional for old V8 versions\n  var table = new Array(this.size * 2);\n  for (var i = 0; i < table.length; i += 2) {\n    const angle = Math.PI * i / this.size;\n    table[i] = Math.cos(angle);\n    table[i + 1] = -Math.sin(angle);\n  }\n  this.table = table;\n\n  // Find size's power of two\n  var power = 0;\n  for (var t = 1; this.size > t; t <<= 1)\n    power++;\n\n  // Calculate initial step's width:\n  //   * If we are full radix-4 - it is 2x smaller to give inital len=8\n  //   * Otherwise it is the same as `power` to give len=4\n  this._width = power % 2 === 0 ? power - 1 : power;\n\n  // Pre-compute bit-reversal patterns\n  this._bitrev = new Array(1 << this._width);\n  for (var j = 0; j < this._bitrev.length; j++) {\n    this._bitrev[j] = 0;\n    for (var shift = 0; shift < this._width; shift += 2) {\n      var revShift = this._width - shift - 2;\n      this._bitrev[j] |= ((j >>> shift) & 3) << revShift;\n    }\n  }\n\n  this._out = null;\n  this._data = null;\n  this._inv = 0;\n}\nmodule.exports = FFT;\n\nFFT.prototype.fromComplexArray = function fromComplexArray(complex, storage) {\n  var res = storage || new Array(complex.length >>> 1);\n  for (var i = 0; i < complex.length; i += 2)\n    res[i >>> 1] = complex[i];\n  return res;\n};\n\nFFT.prototype.createComplexArray = function createComplexArray() {\n  const res = new Array(this._csize);\n  for (var i = 0; i < res.length; i++)\n    res[i] = 0;\n  return res;\n};\n\nFFT.prototype.toComplexArray = function toComplexArray(input, storage) {\n  var res = storage || this.createComplexArray();\n  for (var i = 0; i < res.length; i += 2) {\n    res[i] = input[i >>> 1];\n    res[i + 1] = 0;\n  }\n  return res;\n};\n\nFFT.prototype.completeSpectrum = function completeSpectrum(spectrum) {\n  var size = this._csize;\n  var half = size >>> 1;\n  for (var i = 2; i < half; i += 2) {\n    spectrum[size - i] = spectrum[i];\n    spectrum[size - i + 1] = -spectrum[i + 1];\n  }\n};\n\nFFT.prototype.transform = function transform(out, data) {\n  if (out === data)\n    throw new Error('Input and output buffers must be different');\n\n  this._out = out;\n  this._data = data;\n  this._inv = 0;\n  this._transform4();\n  this._out = null;\n  this._data = null;\n};\n\nFFT.prototype.realTransform = function realTransform(out, data) {\n  if (out === data)\n    throw new Error('Input and output buffers must be different');\n\n  this._out = out;\n  this._data = data;\n  this._inv = 0;\n  this._realTransform4();\n  this._out = null;\n  this._data = null;\n};\n\nFFT.prototype.inverseTransform = function inverseTransform(out, data) {\n  if (out === data)\n    throw new Error('Input and output buffers must be different');\n\n  this._out = out;\n  this._data = data;\n  this._inv = 1;\n  this._transform4();\n  for (var i = 0; i < out.length; i++)\n    out[i] /= this.size;\n  this._out = null;\n  this._data = null;\n};\n\n// radix-4 implementation\n//\n// NOTE: Uses of `var` are intentional for older V8 version that do not\n// support both `let compound assignments` and `const phi`\nFFT.prototype._transform4 = function _transform4() {\n  var out = this._out;\n  var size = this._csize;\n\n  // Initial step (permute and transform)\n  var width = this._width;\n  var step = 1 << width;\n  var len = (size / step) << 1;\n\n  var outOff;\n  var t;\n  var bitrev = this._bitrev;\n  if (len === 4) {\n    for (outOff = 0, t = 0; outOff < size; outOff += len, t++) {\n      const off = bitrev[t];\n      this._singleTransform2(outOff, off, step);\n    }\n  } else {\n    // len === 8\n    for (outOff = 0, t = 0; outOff < size; outOff += len, t++) {\n      const off = bitrev[t];\n      this._singleTransform4(outOff, off, step);\n    }\n  }\n\n  // Loop through steps in decreasing order\n  var inv = this._inv ? -1 : 1;\n  var table = this.table;\n  for (step >>= 2; step >= 2; step >>= 2) {\n    len = (size / step) << 1;\n    var quarterLen = len >>> 2;\n\n    // Loop through offsets in the data\n    for (outOff = 0; outOff < size; outOff += len) {\n      // Full case\n      var limit = outOff + quarterLen;\n      for (var i = outOff, k = 0; i < limit; i += 2, k += step) {\n        const A = i;\n        const B = A + quarterLen;\n        const C = B + quarterLen;\n        const D = C + quarterLen;\n\n        // Original values\n        const Ar = out[A];\n        const Ai = out[A + 1];\n        const Br = out[B];\n        const Bi = out[B + 1];\n        const Cr = out[C];\n        const Ci = out[C + 1];\n        const Dr = out[D];\n        const Di = out[D + 1];\n\n        // Middle values\n        const MAr = Ar;\n        const MAi = Ai;\n\n        const tableBr = table[k];\n        const tableBi = inv * table[k + 1];\n        const MBr = Br * tableBr - Bi * tableBi;\n        const MBi = Br * tableBi + Bi * tableBr;\n\n        const tableCr = table[2 * k];\n        const tableCi = inv * table[2 * k + 1];\n        const MCr = Cr * tableCr - Ci * tableCi;\n        const MCi = Cr * tableCi + Ci * tableCr;\n\n        const tableDr = table[3 * k];\n        const tableDi = inv * table[3 * k + 1];\n        const MDr = Dr * tableDr - Di * tableDi;\n        const MDi = Dr * tableDi + Di * tableDr;\n\n        // Pre-Final values\n        const T0r = MAr + MCr;\n        const T0i = MAi + MCi;\n        const T1r = MAr - MCr;\n        const T1i = MAi - MCi;\n        const T2r = MBr + MDr;\n        const T2i = MBi + MDi;\n        const T3r = inv * (MBr - MDr);\n        const T3i = inv * (MBi - MDi);\n\n        // Final values\n        const FAr = T0r + T2r;\n        const FAi = T0i + T2i;\n\n        const FCr = T0r - T2r;\n        const FCi = T0i - T2i;\n\n        const FBr = T1r + T3i;\n        const FBi = T1i - T3r;\n\n        const FDr = T1r - T3i;\n        const FDi = T1i + T3r;\n\n        out[A] = FAr;\n        out[A + 1] = FAi;\n        out[B] = FBr;\n        out[B + 1] = FBi;\n        out[C] = FCr;\n        out[C + 1] = FCi;\n        out[D] = FDr;\n        out[D + 1] = FDi;\n      }\n    }\n  }\n};\n\n// radix-2 implementation\n//\n// NOTE: Only called for len=4\nFFT.prototype._singleTransform2 = function _singleTransform2(outOff, off,\n                                                             step) {\n  const out = this._out;\n  const data = this._data;\n\n  const evenR = data[off];\n  const evenI = data[off + 1];\n  const oddR = data[off + step];\n  const oddI = data[off + step + 1];\n\n  const leftR = evenR + oddR;\n  const leftI = evenI + oddI;\n  const rightR = evenR - oddR;\n  const rightI = evenI - oddI;\n\n  out[outOff] = leftR;\n  out[outOff + 1] = leftI;\n  out[outOff + 2] = rightR;\n  out[outOff + 3] = rightI;\n};\n\n// radix-4\n//\n// NOTE: Only called for len=8\nFFT.prototype._singleTransform4 = function _singleTransform4(outOff, off,\n                                                             step) {\n  const out = this._out;\n  const data = this._data;\n  const inv = this._inv ? -1 : 1;\n  const step2 = step * 2;\n  const step3 = step * 3;\n\n  // Original values\n  const Ar = data[off];\n  const Ai = data[off + 1];\n  const Br = data[off + step];\n  const Bi = data[off + step + 1];\n  const Cr = data[off + step2];\n  const Ci = data[off + step2 + 1];\n  const Dr = data[off + step3];\n  const Di = data[off + step3 + 1];\n\n  // Pre-Final values\n  const T0r = Ar + Cr;\n  const T0i = Ai + Ci;\n  const T1r = Ar - Cr;\n  const T1i = Ai - Ci;\n  const T2r = Br + Dr;\n  const T2i = Bi + Di;\n  const T3r = inv * (Br - Dr);\n  const T3i = inv * (Bi - Di);\n\n  // Final values\n  const FAr = T0r + T2r;\n  const FAi = T0i + T2i;\n\n  const FBr = T1r + T3i;\n  const FBi = T1i - T3r;\n\n  const FCr = T0r - T2r;\n  const FCi = T0i - T2i;\n\n  const FDr = T1r - T3i;\n  const FDi = T1i + T3r;\n\n  out[outOff] = FAr;\n  out[outOff + 1] = FAi;\n  out[outOff + 2] = FBr;\n  out[outOff + 3] = FBi;\n  out[outOff + 4] = FCr;\n  out[outOff + 5] = FCi;\n  out[outOff + 6] = FDr;\n  out[outOff + 7] = FDi;\n};\n\n// Real input radix-4 implementation\nFFT.prototype._realTransform4 = function _realTransform4() {\n  var out = this._out;\n  var size = this._csize;\n\n  // Initial step (permute and transform)\n  var width = this._width;\n  var step = 1 << width;\n  var len = (size / step) << 1;\n\n  var outOff;\n  var t;\n  var bitrev = this._bitrev;\n  if (len === 4) {\n    for (outOff = 0, t = 0; outOff < size; outOff += len, t++) {\n      const off = bitrev[t];\n      this._singleRealTransform2(outOff, off >>> 1, step >>> 1);\n    }\n  } else {\n    // len === 8\n    for (outOff = 0, t = 0; outOff < size; outOff += len, t++) {\n      const off = bitrev[t];\n      this._singleRealTransform4(outOff, off >>> 1, step >>> 1);\n    }\n  }\n\n  // Loop through steps in decreasing order\n  var inv = this._inv ? -1 : 1;\n  var table = this.table;\n  for (step >>= 2; step >= 2; step >>= 2) {\n    len = (size / step) << 1;\n    var halfLen = len >>> 1;\n    var quarterLen = halfLen >>> 1;\n    var hquarterLen = quarterLen >>> 1;\n\n    // Loop through offsets in the data\n    for (outOff = 0; outOff < size; outOff += len) {\n      for (var i = 0, k = 0; i <= hquarterLen; i += 2, k += step) {\n        var A = outOff + i;\n        var B = A + quarterLen;\n        var C = B + quarterLen;\n        var D = C + quarterLen;\n\n        // Original values\n        var Ar = out[A];\n        var Ai = out[A + 1];\n        var Br = out[B];\n        var Bi = out[B + 1];\n        var Cr = out[C];\n        var Ci = out[C + 1];\n        var Dr = out[D];\n        var Di = out[D + 1];\n\n        // Middle values\n        var MAr = Ar;\n        var MAi = Ai;\n\n        var tableBr = table[k];\n        var tableBi = inv * table[k + 1];\n        var MBr = Br * tableBr - Bi * tableBi;\n        var MBi = Br * tableBi + Bi * tableBr;\n\n        var tableCr = table[2 * k];\n        var tableCi = inv * table[2 * k + 1];\n        var MCr = Cr * tableCr - Ci * tableCi;\n        var MCi = Cr * tableCi + Ci * tableCr;\n\n        var tableDr = table[3 * k];\n        var tableDi = inv * table[3 * k + 1];\n        var MDr = Dr * tableDr - Di * tableDi;\n        var MDi = Dr * tableDi + Di * tableDr;\n\n        // Pre-Final values\n        var T0r = MAr + MCr;\n        var T0i = MAi + MCi;\n        var T1r = MAr - MCr;\n        var T1i = MAi - MCi;\n        var T2r = MBr + MDr;\n        var T2i = MBi + MDi;\n        var T3r = inv * (MBr - MDr);\n        var T3i = inv * (MBi - MDi);\n\n        // Final values\n        var FAr = T0r + T2r;\n        var FAi = T0i + T2i;\n\n        var FBr = T1r + T3i;\n        var FBi = T1i - T3r;\n\n        out[A] = FAr;\n        out[A + 1] = FAi;\n        out[B] = FBr;\n        out[B + 1] = FBi;\n\n        // Output final middle point\n        if (i === 0) {\n          var FCr = T0r - T2r;\n          var FCi = T0i - T2i;\n          out[C] = FCr;\n          out[C + 1] = FCi;\n          continue;\n        }\n\n        // Do not overwrite ourselves\n        if (i === hquarterLen)\n          continue;\n\n        // In the flipped case:\n        // MAi = -MAi\n        // MBr=-MBi, MBi=-MBr\n        // MCr=-MCr\n        // MDr=MDi, MDi=MDr\n        var ST0r = T1r;\n        var ST0i = -T1i;\n        var ST1r = T0r;\n        var ST1i = -T0i;\n        var ST2r = -inv * T3i;\n        var ST2i = -inv * T3r;\n        var ST3r = -inv * T2i;\n        var ST3i = -inv * T2r;\n\n        var SFAr = ST0r + ST2r;\n        var SFAi = ST0i + ST2i;\n\n        var SFBr = ST1r + ST3i;\n        var SFBi = ST1i - ST3r;\n\n        var SA = outOff + quarterLen - i;\n        var SB = outOff + halfLen - i;\n\n        out[SA] = SFAr;\n        out[SA + 1] = SFAi;\n        out[SB] = SFBr;\n        out[SB + 1] = SFBi;\n      }\n    }\n  }\n};\n\n// radix-2 implementation\n//\n// NOTE: Only called for len=4\nFFT.prototype._singleRealTransform2 = function _singleRealTransform2(outOff,\n                                                                     off,\n                                                                     step) {\n  const out = this._out;\n  const data = this._data;\n\n  const evenR = data[off];\n  const oddR = data[off + step];\n\n  const leftR = evenR + oddR;\n  const rightR = evenR - oddR;\n\n  out[outOff] = leftR;\n  out[outOff + 1] = 0;\n  out[outOff + 2] = rightR;\n  out[outOff + 3] = 0;\n};\n\n// radix-4\n//\n// NOTE: Only called for len=8\nFFT.prototype._singleRealTransform4 = function _singleRealTransform4(outOff,\n                                                                     off,\n                                                                     step) {\n  const out = this._out;\n  const data = this._data;\n  const inv = this._inv ? -1 : 1;\n  const step2 = step * 2;\n  const step3 = step * 3;\n\n  // Original values\n  const Ar = data[off];\n  const Br = data[off + step];\n  const Cr = data[off + step2];\n  const Dr = data[off + step3];\n\n  // Pre-Final values\n  const T0r = Ar + Cr;\n  const T1r = Ar - Cr;\n  const T2r = Br + Dr;\n  const T3r = inv * (Br - Dr);\n\n  // Final values\n  const FAr = T0r + T2r;\n\n  const FBr = T1r;\n  const FBi = -T3r;\n\n  const FCr = T0r - T2r;\n\n  const FDr = T1r;\n  const FDi = T3r;\n\n  out[outOff] = FAr;\n  out[outOff + 1] = 0;\n  out[outOff + 2] = FBr;\n  out[outOff + 3] = FBi;\n  out[outOff + 4] = FCr;\n  out[outOff + 5] = 0;\n  out[outOff + 6] = FDr;\n  out[outOff + 7] = FDi;\n};\n","export function createNumberArray(ArrayConstructor, length) {\n    if (ArrayConstructor === Array) {\n        return new ArrayConstructor(length).fill(0);\n    }\n    else {\n        return new ArrayConstructor(length);\n    }\n}\nexport function createDoubleArray(ArrayConstructor, length) {\n    if (ArrayConstructor === Array) {\n        return new ArrayConstructor(length).fill(0);\n    }\n    else {\n        return new ArrayConstructor(length);\n    }\n}\n//# sourceMappingURL=createArray.js.map","/**\n * Create an array with numbers between \"from\" and \"to\" of length \"length\"\n * @param options - options\n * @returns - array of distributed numbers between \"from\" and \"to\"\n */\nexport function createFromToArray(options = {}) {\n    const { from = 0, to = 1, length = 1000, includeFrom = true, includeTo = true, distribution = 'uniform', } = options;\n    const array = new Float64Array(length);\n    let div = length;\n    if (includeFrom && includeTo) {\n        div = length - 1;\n    }\n    else if ((!includeFrom && includeTo) || (includeFrom && !includeTo)) {\n        div = length;\n    }\n    else if (!includeFrom && !includeTo) {\n        div = length + 1;\n    }\n    const delta = (to - from) / div;\n    if (distribution === 'uniform') {\n        if (includeFrom) {\n            let index = 0;\n            while (index < length) {\n                array[index] = from + delta * index;\n                index++;\n            }\n        }\n        else {\n            let index = 0;\n            while (index < length) {\n                array[index] = from + delta * (index + 1);\n                index++;\n            }\n        }\n    }\n    else if (distribution === 'log') {\n        const base = (to / from) ** (1 / div);\n        const firstExponent = Math.log(from) / Math.log(base);\n        if (includeFrom) {\n            let index = 0;\n            while (index < length) {\n                array[index] = base ** (firstExponent + index);\n                index++;\n            }\n        }\n        else {\n            let index = 0;\n            while (index < length) {\n                array[index] = base ** (firstExponent + index + 1);\n                index++;\n            }\n        }\n    }\n    else {\n        throw new Error('distribution must be uniform or log');\n    }\n    return array;\n}\n//# sourceMappingURL=createFromToArray.js.map","const LOOP = 8;\nconst FLOAT_MUL = 1 / 16777216;\nconst sh1 = 15;\nconst sh2 = 18;\nconst sh3 = 11;\nfunction multiplyUint32(n, m) {\n    n >>>= 0;\n    m >>>= 0;\n    const nlo = n & 0xffff;\n    const nhi = n - nlo;\n    return (((nhi * m) >>> 0) + nlo * m) >>> 0;\n}\nexport class XSadd {\n    random;\n    state;\n    /**\n     * create an instance of XSadd with the specified seed\n     * @param [seed=Date.now()]\n     */\n    constructor(seed = Date.now()) {\n        this.state = new Uint32Array(4);\n        this.init(seed);\n        this.random = this.getFloat.bind(this);\n    }\n    /**\n     * Returns a 32-bit integer r (0 <= r < 2^32)\n     */\n    getUint32() {\n        this.nextState();\n        return (this.state[3] + this.state[2]) >>> 0;\n    }\n    /**\n     * Returns a floating point number r (0.0 <= r < 1.0)\n     */\n    getFloat() {\n        return (this.getUint32() >>> 8) * FLOAT_MUL;\n    }\n    init(seed) {\n        if (!Number.isInteger(seed)) {\n            throw new TypeError(\"seed must be an integer\");\n        }\n        this.state[0] = seed;\n        this.state[1] = 0;\n        this.state[2] = 0;\n        this.state[3] = 0;\n        for (let i = 1; i < LOOP; i++) {\n            this.state[i & 3] ^=\n                (i +\n                    multiplyUint32(1812433253, this.state[(i - 1) & 3] ^ ((this.state[(i - 1) & 3] >>> 30) >>> 0))) >>>\n                    0;\n        }\n        this.periodCertification();\n        for (let i = 0; i < LOOP; i++) {\n            this.nextState();\n        }\n    }\n    periodCertification() {\n        if (this.state[0] === 0 &&\n            this.state[1] === 0 &&\n            this.state[2] === 0 &&\n            this.state[3] === 0) {\n            this.state[0] = 88; // X\n            this.state[1] = 83; // S\n            this.state[2] = 65; // A\n            this.state[3] = 68; // D\n        }\n    }\n    nextState() {\n        let t = this.state[0];\n        t ^= t << sh1;\n        t ^= t >>> sh2;\n        t ^= this.state[3] << sh3;\n        this.state[0] = this.state[1];\n        this.state[1] = this.state[2];\n        this.state[2] = this.state[3];\n        this.state[3] = t;\n    }\n}\n//# sourceMappingURL=XSadd.js.map","import { XSadd } from 'ml-xsadd';\n/**\n * Create a random array of numbers of a specific length.\n * @param options\n * @returns - array of random floats normally distributed\n */\nexport function createRandomArray(options = {}) {\n    const { mean = 0, standardDeviation = 1, length = 1000, range = 1, seed, distribution = 'normal', } = options;\n    const generator = new XSadd(seed);\n    const returnArray = new Float64Array(length);\n    switch (distribution) {\n        case 'normal': {\n            const gaussianGenerator = new GaussianGenerator(mean, standardDeviation, generator);\n            for (let i = 0; i < length; i++) {\n                returnArray[i] = gaussianGenerator.generateGaussian();\n            }\n            break;\n        }\n        case 'uniform': {\n            for (let i = 0; i < length; i++) {\n                returnArray[i] = (generator.random() - 0.5) * range + mean;\n            }\n            break;\n        }\n        default: {\n            throw new Error(`unknown distribution: ${String(distribution)}`);\n        }\n    }\n    return returnArray;\n}\nclass GaussianGenerator {\n    #spare = 0;\n    #hasSpare = false;\n    #mean;\n    #standardDeviation;\n    #generator;\n    constructor(mean, standardDeviation, generator) {\n        this.#mean = mean;\n        this.#standardDeviation = standardDeviation;\n        this.#generator = generator;\n    }\n    generateGaussian() {\n        let val, u, v, s;\n        if (this.#hasSpare) {\n            this.#hasSpare = false;\n            val = this.#spare * this.#standardDeviation + this.#mean;\n        }\n        else {\n            do {\n                u = this.#generator.random() * 2 - 1;\n                v = this.#generator.random() * 2 - 1;\n                s = u * u + v * v;\n            } while (s >= 1 || s === 0);\n            s = Math.sqrt((-2 * Math.log(s)) / s);\n            this.#spare = v * s;\n            this.#hasSpare = true;\n            val = this.#mean + this.#standardDeviation * u * s;\n        }\n        return val;\n    }\n}\n//# sourceMappingURL=createRandomArray.js.map","/**\n * Check if a number is a power of two.\n * @param n\n */\nexport function isPowerOfTwo(n) {\n    return n !== 0 && (n & (n - 1)) === 0;\n}\n//# sourceMappingURL=isPowerOfTwo.js.map","/**\n * Get the size of the next power of two.\n * @param n\n */\nexport function nextPowerOfTwo(n) {\n    if (n === 0)\n        return 1;\n    n--;\n    n |= n >> 1;\n    n |= n >> 2;\n    n |= n >> 4;\n    n |= n >> 8;\n    n |= n >> 16;\n    return n + 1;\n}\n//# sourceMappingURL=nextPowerOfTwo.js.map","/**\n * Resolves all promises in an object recursively. The promise with be replaced by the resolved value.\n * The changes are therefore done in-place !\n * @param object\n * @returns\n */\nexport async function recursiveResolve(object) {\n    if (typeof object !== 'object')\n        return object;\n    const promises = [];\n    await appendPromises(object, promises);\n    await Promise.all(promises);\n    return object;\n}\nfunction appendPromises(object, promises) {\n    if (typeof object !== 'object')\n        return object;\n    for (const key in object) {\n        if (typeof object[key].then === 'function') {\n            promises.push(object[key].then((value) => (object[key] = value)));\n        }\n        else if (typeof object[key] === 'object') {\n            appendPromises(object[key], promises);\n        }\n    }\n    return object;\n}\n//# sourceMappingURL=recursiveResolve.js.map","/**\n * Recursively change the typed arrays to normal arrays\n * The changes are done in-place !\n * @param object\n * @returns\n */\nexport function recursiveUntypeArrays(object) {\n    if (typeof object !== 'object')\n        return object;\n    object = modifier(object);\n    return object;\n}\nfunction modifier(object) {\n    if (typeof object !== 'object')\n        return object;\n    if (ArrayBuffer.isView(object)) {\n        return Array.from(object);\n    }\n    for (const key in object) {\n        if (ArrayBuffer.isView(object[key])) {\n            object[key] = Array.from(object[key]);\n        }\n        else if (typeof object[key] === 'object') {\n            modifier(object[key]);\n        }\n    }\n    return object;\n}\n//# sourceMappingURL=recursiveUntypeArrays.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * This function xSubtract the first array by the second array or a constant value from each element of the first array\n * @param array1 - the array that will be rotated\n * @param array2 - second array or number\n * @returns array after subtraction\n */\nexport function xSubtract(array1, array2) {\n    let isConstant = false;\n    let constant = 0;\n    if (isAnyArray(array2)) {\n        if (array1.length !== array2.length) {\n            throw new Error('size of array1 and array2 must be identical');\n        }\n    }\n    else {\n        isConstant = true;\n        constant = array2;\n    }\n    const array3 = new Float64Array(array1.length);\n    if (isConstant) {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] - constant;\n        }\n    }\n    else {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] - array2[i];\n        }\n    }\n    return array3;\n}\n//# sourceMappingURL=xSubtract.js.map","import { xAbsolute } from \"../x/xAbsolute.js\";\nimport { xMedian } from \"../x/xMedian.js\";\nimport { xSubtract } from \"../x/xSubtract.js\";\n/**\n * Calculate the weights based on the control points and the MAD between the original data and the new baseline.\n * MAD (Median Absolute Deviation) is more robust to outliers and\n * the factor (1.4826) makes MAD scaled to be equivalent to the standard deviation for\n * normal distributions. {@link https://en.m.wikipedia.org/wiki/Median_absolute_deviation}.\n * @param yData - The original data.\n * @param baseline - The new baseline calculated.\n * @param weights - The current weights to be updated.\n * @param options - Options for updating weights.\n * @returns new array of weights.\n */\nexport function calculateAdaptiveWeights(yData, baseline, weights, options) {\n    const { controlPoints, factorStd = 3, learningRate = 0.5 } = options;\n    if (learningRate === 0) {\n        return weights;\n    }\n    const absResiduals = xAbsolute(xSubtract(yData, baseline));\n    const medAbsRes = xMedian(absResiduals);\n    const mad = 1.4826 * medAbsRes;\n    const threshold = mad > 0 ? factorStd * mad : 1;\n    const rawWeights = new Float64Array(absResiduals.length);\n    for (let i = 0; i < absResiduals.length; i++) {\n        rawWeights[i] = Math.exp(-((absResiduals[i] / threshold) ** 2));\n    }\n    const oneMinusLearningRate = 1 - learningRate;\n    for (let i = 0; i < weights.length; i++) {\n        let weight = weights[i];\n        weight = (oneMinusLearningRate * weight + learningRate * rawWeights[i]) / 4;\n        if (controlPoints && controlPoints[i] > 0) {\n            weight *= 4;\n        }\n        weights[i] = weight;\n    }\n    weights[0] = 1;\n    weights[weights.length - 1] = 1;\n    return weights;\n}\n//# sourceMappingURL=calculateAdaptiveWeights.js.map","/*\n * This file is based on the code from \"deep-cleaner\" by darksinge\n * https://github.com/darksinge/deep-cleaner\n *\n * The following license applies:\n *\n * MIT License\n *\n * Copyright (c) 2021 darksinge\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n/**\n * Recursively removes empty values from an object. This will also remove empty object or empty array.\n * @param object - the object being cleaned\n * @param options - Optional object with options for cleaning\n * @returns the cleaned object\n */\nexport function recursiveRemoveEmptyAndNull(object, options = {}) {\n    const { propertiesToRemove = [], ...otherOptions } = options;\n    if (propertiesToRemove.length > 0) {\n        for (const removeProperty of propertiesToRemove) {\n            cleanCyclicObject(object, removeProperty, otherOptions);\n        }\n    }\n    else {\n        cleanCyclicObject(object, '', otherOptions);\n    }\n    return object;\n}\n/**\n * cleanCyclicObject Removes any undefined, null, or empty strings, arrays, or objects from `object`.\n *    Uses a `WeakMap` to keep track of objects that have been visited while recursively cleaning\n *    an object to prevent infinite recursive calls.\n * @param object - the object to be cleaned\n * @param propertiesToRemove - Optional key to remove from `object`. If not specified, the default\n *    behavior is to remove \"empty\" values from `object`. A value is considered to be empty if it\n *    is one of the following:\n *      - empty strings\n *      - empty arrays\n *      - empty objects\n *      - values that are null\n *      - values that are undefined\n * @param removeProperty\n * @param options\n */\nfunction cleanCyclicObject(object, removeProperty, options = {}) {\n    const visitedObjects = new WeakMap();\n    function recursiveClean(object, parent, parentKey) {\n        if (isObject(object)) {\n            if (visitedObjects.has(object))\n                return;\n            visitedObjects.set(object, null);\n            for (const key of Reflect.ownKeys(object)) {\n                if ((removeProperty && key === removeProperty) ||\n                    (!removeProperty && isEmpty(object[key]))) {\n                    Reflect.deleteProperty(object, key);\n                }\n                else {\n                    recursiveClean(object[key], object, key);\n                }\n            }\n            if (!removeProperty && isEmpty(object) && parent) {\n                Reflect.deleteProperty(parent, parentKey);\n            }\n        }\n        else if (isArray(object)) {\n            if (visitedObjects.has(object))\n                return;\n            visitedObjects.set(object, null);\n            for (let i = 0; i < object.length; i++) {\n                recursiveClean(object[i], object, i);\n            }\n            for (let i = object.length - 1; i >= 0; i--) {\n                const arrayElement = object[i];\n                if (isEmpty(arrayElement) &&\n                    !(isArray(arrayElement) &&\n                        arrayElement.length === 0 &&\n                        options?.removeEmptyArrayAndObject === false)) {\n                    object.splice(i, 1);\n                }\n            }\n            for (const key of Reflect.ownKeys(object)) {\n                const isIndex = typeof key === 'string' && /^\\d+$/.test(key);\n                if (!isIndex) {\n                    const value = object[key];\n                    if ((removeProperty && key === removeProperty) ||\n                        (!removeProperty && isEmpty(value))) {\n                        Reflect.deleteProperty(object, key);\n                    }\n                    else {\n                        recursiveClean(value, object, key);\n                    }\n                }\n            }\n            if (!removeProperty &&\n                object.length === 0 &&\n                parent &&\n                options?.removeEmptyArrayAndObject) {\n                Reflect.deleteProperty(parent, parentKey);\n            }\n        }\n    }\n    recursiveClean(object);\n}\n/**\n * repr gets the string representation of `arg`\n * @param {} arg - unknown function argument\n * @returns a string representation of `arg`\n */\nfunction repr(arg) {\n    return Object.prototype.toString.call(arg);\n}\n/**\n * Check if the argument is an array\n * @param {} arg - unknown function argument\n * @returns returns true if `arg` is an Array, false otherwise\n */\nfunction isArray(arg) {\n    return Array.isArray ? Array.isArray(arg) : repr(arg) === '[object Array]';\n}\n/**\n * Check if the argument is an object\n * @param {} arg - unknown function argument\n * @returns returns true if `arg` is an object.\n */\nfunction isObject(arg) {\n    return repr(arg) === '[object Object]';\n}\n/**\n * Check if the argument is a string\n * @param {} arg - unknown function argument\n * @returns returns true if `arg` is a String, false otherwise\n */\nfunction isString(arg) {\n    return repr(arg) === '[object String]';\n}\n/**\n * Check if the argument is null.\n * @param {} arg - unknown function argument\n * @returns returns true if `arg` is of type Null, false otherwise\n */\nfunction isNull(arg) {\n    return repr(arg) === '[object Null]';\n}\n/**\n * Check if the argument is undefined.\n * @param {} arg - unknown function argument\n * @returns Returns true if `arg` is of type Undefined, false otherwise\n */\nfunction isUndefined(arg) {\n    return arg === undefined;\n}\n/**\n * Check if the argument is null, undefined, an empty string, array, or object.\n * @param {} arg - unknown function argument\n * @returns Returns true if `arg` is an empty string,\n *  array, or object. Also returns true is `arg` is null or\n *  undefined. Returns true otherwise.\n */\nfunction isEmpty(arg) {\n    return (isUndefined(arg) ||\n        isNull(arg) ||\n        (isString(arg) && arg.length === 0) ||\n        (isArray(arg) && arg.length === 0) ||\n        (isObject(arg) && Object.keys(arg).length === 0));\n}\n//# sourceMappingURL=recursiveRemoveEmptyAndNull.js.map","import FFT from 'fft.js';\nimport { isPowerOfTwo, nextPowerOfTwo } from \"../utils/index.js\";\nimport { xCheck } from \"./xCheck.js\";\n/**\n * Performs the Hilbert transform\n * @link https://en.wikipedia.org/wiki/Hilbert_transform\n * @param array - Array containing values\n * @param options\n * @returns A new vector with 90 degree shift regarding the phase of the original function\n */\nexport function xHilbertTransform(array, options = {}) {\n    xCheck(array);\n    const { forceFFT = false } = options;\n    const length = array.length;\n    if (isPowerOfTwo(length)) {\n        return hilbertTransformWithFFT(array);\n    }\n    else if (forceFFT) {\n        return resampling(hilbertTransformWithFFT(resampling(array, nextPowerOfTwo(length))), length);\n    }\n    else {\n        return hilbertTransform(array);\n    }\n}\n/**\n * Performs the discrete Hilbert transform using fast Fourier transform\n * @param array - Array containing values\n * @returns A new vector with 90 degree shift regarding the phase of the original function\n * @see DOI: 10.1109/TAU.1970.1162139 \"Discrete Hilbert transform\"\n */\nfunction hilbertTransformWithFFT(array) {\n    const length = array.length;\n    const fft = new FFT(length);\n    // Single reusable buffer for FFT spectrum\n    const spectrum = new Float64Array(length * 2);\n    // Forward FFT\n    fft.realTransform(spectrum, array);\n    fft.completeSpectrum(spectrum);\n    const half = length >> 1;\n    // Zero Nyquist\n    const j = half << 1;\n    spectrum[j] = 0;\n    spectrum[j + 1] = 0;\n    // Negate negative frequencies\n    for (let j = (half + 1) << 1; j < spectrum.length; j += 2) {\n        spectrum[j] = -spectrum[j];\n        spectrum[j + 1] = -spectrum[j + 1];\n    }\n    const hilbertSignal = new Float64Array(length * 2);\n    fft.inverseTransform(hilbertSignal, spectrum);\n    // Extract imaginary part directly into output\n    const result = new Float64Array(length);\n    for (let i = 0; i < length; i++) {\n        result[i] = hilbertSignal[i * 2 + 1];\n    }\n    return result;\n}\n/**\n * Performs the discrete Hilbert transform\n * @param array - Array containing values\n * @param options\n * @param options.inClockwise\n * @returns A new vector with 90 degree shift regarding the phase of the original function\n */\nfunction hilbertTransform(array, options = {}) {\n    const { inClockwise = true } = options;\n    const input = [0, ...array, 0];\n    const result = new Float64Array(array.length);\n    for (let k = 1; k < input.length - 1; k++) {\n        let aSum = 0;\n        for (let i = 0; i < k - 1; i++) {\n            const log = Math.log((k - i) / (k - i - 1));\n            aSum += input[i] * log + (input[i + 1] - input[i]) * (-1 + (k - i) * log);\n        }\n        const b = input[k - 1] - input[k + 1];\n        let cSum = 0;\n        for (let i = k + 1; i < input.length - 1; i++) {\n            const log = Math.log((i - k) / (i - k + 1));\n            cSum += input[i] * log + (input[i - 1] - input[i]) * (1 + (i - k) * log);\n        }\n        result[k - 1] = ((inClockwise ? 1 : -1) * (aSum + b + cSum)) / Math.PI;\n    }\n    return result;\n}\n/**\n * Performs resampling of an input array to the desired length employing linear interpolation.\n * @param array - Array containing values.\n * @param length - The length of the resulting array.\n * @returns It returns a new array of the desired length.\n * @link https://en.wikipedia.org/wiki/Sample-rate_conversion\n */\nfunction resampling(array, length) {\n    xCheck(array);\n    const oldLength = array.length;\n    const ratio = (oldLength - 1) / (length - 1);\n    const result = new Float64Array(length);\n    let currentIndex = 0;\n    let floor = Math.floor(currentIndex);\n    let ceil = Math.min(Math.ceil(currentIndex), oldLength - 1);\n    let diff = currentIndex - floor;\n    for (let i = 0; i < length; i++) {\n        result[i] = array[floor] * (1 - diff) + array[ceil] * diff;\n        currentIndex += ratio;\n        floor = Math.floor(currentIndex);\n        ceil = Math.min(Math.ceil(currentIndex), oldLength - 1);\n        diff = currentIndex - floor;\n    }\n    return result;\n}\n//# sourceMappingURL=xHilbertTransform.js.map","import { xCheck } from \"./xCheck.js\";\nimport { xGetFromToIndex } from \"./xGetFromToIndex.js\";\n/**\n * Computes the maximal value of an array of values\n * @param array - array of numbers\n * @param options - options\n */\nexport function xMaxValue(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let maxValue = array[fromIndex];\n    for (let i = fromIndex + 1; i <= toIndex; i++) {\n        if (array[i] > maxValue) {\n            maxValue = array[i];\n        }\n    }\n    return maxValue;\n}\n//# sourceMappingURL=xMaxValue.js.map","import { xCheck } from \"./xCheck.js\";\nimport { xGetFromToIndex } from \"./xGetFromToIndex.js\";\n/**\n * Computes the minimal value of an array of values.\n * @param array - array of numbers\n * @param options - options\n */\nexport function xMinValue(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let minValue = array[fromIndex];\n    for (let i = fromIndex + 1; i <= toIndex; i++) {\n        if (array[i] < minValue) {\n            minValue = array[i];\n        }\n    }\n    return minValue;\n}\n//# sourceMappingURL=xMinValue.js.map","import { createFromToArray } from \"../utils/index.js\";\nimport { xAbsolute } from \"./xAbsolute.js\";\nimport { xCheck } from \"./xCheck.js\";\nimport { xMaxValue } from \"./xMaxValue.js\";\nimport { xMinValue } from \"./xMinValue.js\";\n/**\n * Calculates a histogram of defined number of slots\n * @param array - Array containing values\n * @param options - options\n * @returns - result of the histogram\n */\nexport function xHistogram(array, options = {}) {\n    xCheck(array);\n    const histogram = options.histogram;\n    const { centerX = true, nbSlots = histogram === undefined ? 256 : histogram.x.length, logBaseX, logBaseY, absolute = false, } = options;\n    if (absolute) {\n        array = xAbsolute(array);\n    }\n    if (logBaseX) {\n        array = array.slice();\n        const logOfBase = Math.log10(logBaseX);\n        for (let i = 0; i < array.length; i++) {\n            array[i] = Math.log10(array[i]) / logOfBase;\n        }\n    }\n    const { min = xMinValue(array), max = xMaxValue(array) } = options;\n    const slotSize = (max - min) / (nbSlots + Number.EPSILON);\n    const y = histogram === undefined ? new Float64Array(nbSlots) : histogram.y;\n    const x = histogram === undefined\n        ? Array.from(createFromToArray({\n            from: min + (centerX ? slotSize / 2 : 0),\n            to: max - (centerX ? slotSize / 2 : 0),\n            length: nbSlots,\n        }))\n        : histogram.x;\n    for (const element of array) {\n        const index = Math.max(Math.min(Math.floor((element - min - Number.EPSILON) / slotSize), nbSlots - 1), 0);\n        y[index]++;\n    }\n    if (logBaseY) {\n        const logOfBase = Math.log10(logBaseY);\n        for (let i = 0; i < y.length; i++) {\n            y[i] = Math.log10(y[i] + 1) / logOfBase;\n        }\n    }\n    return { x, y };\n}\n//# sourceMappingURL=xHistogram.js.map","/**\n * Check if the values are separated always by the same difference\n * @param array - Monotone growing array of number\n * @param options\n */\nexport function xIsEquallySpaced(array, options = {}) {\n    if (array.length < 3)\n        return true;\n    const { tolerance = 0.05 } = options;\n    let maxDx = 0;\n    let minDx = Number.MAX_SAFE_INTEGER;\n    for (let i = 0; i < array.length - 1; ++i) {\n        const absoluteDifference = array[i + 1] - array[i];\n        if (absoluteDifference < minDx) {\n            minDx = absoluteDifference;\n        }\n        if (absoluteDifference > maxDx) {\n            maxDx = absoluteDifference;\n        }\n    }\n    return (maxDx - minDx) / maxDx < tolerance;\n}\n//# sourceMappingURL=xIsEquallySpaced.js.map","/**\n * Returns true if x is monotonic.\n * @param array - array of numbers.\n * @returns 1 if monotonic increasing, -1 if monotonic decreasing, 0 if not monotonic.\n */\nexport function xIsMonotonic(array) {\n    if (array.length <= 2) {\n        return 1;\n    }\n    if (array[0] === array[1]) {\n        // maybe a constant series\n        for (let i = 1; i < array.length - 1; i++) {\n            if (array[i] !== array[i + 1])\n                return 0;\n        }\n        return 1;\n    }\n    if (array[0] < array.at(-1)) {\n        for (let i = 0; i < array.length - 1; i++) {\n            if (array[i] >= array[i + 1])\n                return 0;\n        }\n        return 1;\n    }\n    else {\n        for (let i = 0; i < array.length - 1; i++) {\n            if (array[i] <= array[i + 1])\n                return 0;\n        }\n        return -1;\n    }\n}\n//# sourceMappingURL=xIsMonotonic.js.map","/**\n * Check the similarity between array created by xyMassCenterVector\n * @param array1\n * @param array2\n * @param options\n * @returns\n */\nexport function xMassCenterVectorSimilarity(array1, array2, options = {}) {\n    const { recenter = true, similarityFct = (a, b) => (a === b ? 1 : 0), } = options;\n    const depth1 = getDepth(array1);\n    const depth2 = getDepth(array2);\n    const depth = Math.min(depth1, depth2);\n    // need to copy the array because we shift the data in place if recenter is true\n    if (recenter) {\n        array1 = array1.slice();\n    }\n    let similarity = 0;\n    // we will compare level by level\n    // and recenter the array at each level\n    for (let level = 0; level < depth; level++) {\n        const maxSimilarity = 1 / depth / (1 << level);\n        for (let slot = 0; slot < 1 << level; slot++) {\n            const index = (1 << level) - 1 + slot;\n            const value1 = array1[index];\n            const value2 = array2[index];\n            similarity += similarityFct(value1, value2) * maxSimilarity;\n            if (recenter) {\n                shiftSubTree(array1, depth, level, slot, value2 - value1);\n            }\n        }\n    }\n    return similarity;\n}\nfunction shiftSubTree(array, depth, level, slot, shift) {\n    for (let currentLevel = level; currentLevel < depth; currentLevel++) {\n        const levelSlotShift = slot * (1 << (currentLevel - level));\n        const levelShift = (1 << currentLevel) - 1;\n        const levelSlotSize = 1 << (currentLevel - level);\n        for (let slotIndex = levelSlotShift; slotIndex < levelSlotShift + levelSlotSize; slotIndex++) {\n            const index = levelShift + slotIndex;\n            array[index] += shift;\n        }\n    }\n}\nfunction getDepth(array) {\n    const depth = Math.log2(array.length + 1);\n    if (depth % 1 !== 0) {\n        throw new Error('the array length is not a power of 2 minus 1');\n    }\n    return depth;\n}\n//# sourceMappingURL=xMassCenterVectorSimilarity.js.map","import { xMedian } from \"./xMedian.js\";\n/**\n * This function calculates the median absolute deviation (MAD).\n * https://en.wikipedia.org/wiki/Median_absolute_deviation\n * @param array\n */\nexport function xMedianAbsoluteDeviation(array) {\n    const median = xMedian(array);\n    const averageDeviations = new Float64Array(array.length);\n    for (let i = 0; i < array.length; i++) {\n        averageDeviations[i] = Math.abs(array[i] - median);\n    }\n    return {\n        median,\n        mad: xMedian(averageDeviations),\n    };\n}\n//# sourceMappingURL=xMedianAbsoluteDeviation.js.map","import { xCheck } from \"./xCheck.js\";\n/**\n * Return min and max values of an array.\n * @param array - array of number\n * @returns - Object with 2 properties, min and max.\n */\nexport function xMinMaxValues(array) {\n    xCheck(array);\n    let min = array[0];\n    let max = array[0];\n    for (const value of array) {\n        if (value < min)\n            min = value;\n        if (value > max)\n            max = value;\n    }\n    return { min, max };\n}\n//# sourceMappingURL=xMinMaxValues.js.map","/*\nAdapted from: https://github.com/compute-io/erfcinv/blob/aa116e23883839359e310ad41a7c42f72815fc1e/lib/number.js\n\nThe MIT License (MIT)\n\nCopyright (c) 2014-2015 The Compute.io Authors. All rights reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n\nBoost Software License - Version 1.0 - August 17th, 2003\n\nPermission is hereby granted, free of charge, to any person or organization obtaining a copy of the software and accompanying documentation covered by this license (the \"Software\") to use, reproduce, display, distribute, execute, and transmit the Software, and to prepare derivative works of the Software, and to permit third-parties to whom the Software is furnished to do so, all subject to the following:\n\nThe copyright notices in the Software and this entire statement, including the above license grant, this restriction and the following disclaimer, must be included in all copies of the Software, in whole or in part, and all derivative works of the Software, unless such copies or derivative works are solely in the form of machine-executable object code generated by a source language processor.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n/* eslint-disable no-loss-of-precision */\n// Coefficients for erfcinv on [0, 0.5]:\nconst Y1 = 8.91314744949340820313e-2;\nconst P1 = [\n    -5.38772965071242932965e-3, 8.22687874676915743155e-3,\n    2.19878681111168899165e-2, -3.65637971411762664006e-2,\n    -1.26926147662974029034e-2, 3.34806625409744615033e-2,\n    -8.36874819741736770379e-3, -5.08781949658280665617e-4,\n];\nconst Q1 = [\n    8.86216390456424707504e-4, -2.33393759374190016776e-3,\n    7.95283687341571680018e-2, -5.27396382340099713954e-2,\n    -7.1228902341542847553e-1, 6.62328840472002992063e-1, 1.56221558398423026363,\n    -1.56574558234175846809, -9.70005043303290640362e-1, 1,\n];\n// Coefficients for erfcinv for 0.5 > 1-x >= 0:\nconst Y2 = 2.249481201171875;\nconst P2 = [\n    -3.67192254707729348546, 2.11294655448340526258e1, 1.7445385985570866523e1,\n    -4.46382324441786960818e1, -1.88510648058714251895e1,\n    1.76447298408374015486e1, 8.37050328343119927838, 1.05264680699391713268e-1,\n    -2.02433508355938759655e-1,\n];\nconst Q2 = [\n    1.72114765761200282724, -2.26436933413139721736e1, 1.08268667355460159008e1,\n    4.85609213108739935468e1, -2.01432634680485188801e1,\n    -2.86608180499800029974e1, 3.9713437953343869095, 6.24264124854247537712, 1,\n];\n// Coefficients for erfcinv for sqrt( -log(1-x)):\nconst Y3 = 8.07220458984375e-1;\nconst P3 = [\n    -6.81149956853776992068e-10, 2.85225331782217055858e-8,\n    -6.79465575181126350155e-7, 2.14558995388805277169e-3,\n    2.90157910005329060432e-2, 1.42869534408157156766e-1,\n    3.37785538912035898924e-1, 3.87079738972604337464e-1,\n    1.17030156341995252019e-1, -1.63794047193317060787e-1,\n    -1.31102781679951906451e-1,\n];\nconst Q3 = [\n    1.105924229346489121e-2, 1.52264338295331783612e-1, 8.48854343457902036425e-1,\n    2.59301921623620271374, 4.77846592945843778382, 5.38168345707006855425,\n    3.46625407242567245975, 1,\n];\nconst Y4 = 9.3995571136474609375e-1;\nconst P4 = [\n    2.66339227425782031962e-12, -2.30404776911882601748e-10,\n    4.60469890584317994083e-6, 1.57544617424960554631e-4,\n    1.87123492819559223345e-3, 9.50804701325919603619e-3,\n    1.85573306514231072324e-2, -2.22426529213447927281e-3,\n    -3.50353787183177984712e-2,\n];\nconst Q4 = [\n    7.64675292302794483503e-5, 2.63861676657015992959e-3,\n    3.41589143670947727934e-2, 2.20091105764131249824e-1,\n    7.62059164553623404043e-1, 1.3653349817554063097, 1,\n];\nconst Y5 = 9.8362827301025390625e-1;\nconst P5 = [\n    9.9055709973310326855e-17, -2.81128735628831791805e-14,\n    4.62596163522878599135e-9, 4.49696789927706453732e-7,\n    1.49624783758342370182e-5, 2.09386317487588078668e-4,\n    1.05628862152492910091e-3, -1.12951438745580278863e-3,\n    -1.67431005076633737133e-2,\n];\nconst Q5 = [\n    2.82243172016108031869e-7, 2.75335474764726041141e-5,\n    9.64011807005165528527e-4, 1.60746087093676504695e-2,\n    1.38151865749083321638e-1, 5.91429344886417493481e-1, 1,\n];\n/**\n * Polyval.\n * @param c - Array of Number.\n * @param x - Number.\n * @returns Number.\n */\nfunction polyval(c, x) {\n    let p = 0;\n    for (const coef of c) {\n        p = p * x + coef;\n    }\n    return p;\n}\n/**\n * Calculates a rational approximation.\n * @private\n * @param x - Number.\n * @param v - Number.\n * @param P - Array of polynomial coefficients.\n * @param Q - Array of polynomial coefficients.\n * @param Y - Number.\n * @returns Rational approximation.\n */\nfunction calc(x, v, P, Q, Y) {\n    const s = x - v;\n    const r = polyval(P, s) / polyval(Q, s);\n    return Y * x + r * x;\n}\n/**\n * Evaluates the complementary inverse error function for an input value.\n * @private\n * @param x - Input value.\n * @returns Evaluated complementary inverse error function.\n */\nexport default function erfcinv(x) {\n    let sign = false;\n    let val;\n    let q;\n    let g;\n    let r;\n    // [1] Special cases...\n    // NaN:\n    if (Number.isNaN(x)) {\n        return Number.NaN;\n    }\n    // x not on the interval: [0,2]\n    if (x < 0 || x > 2) {\n        throw new RangeError(`erfcinv()::invalid input argument. Value must be on the interval [0,2]. Value: \\`${x}\\`.`);\n    }\n    if (x === 0) {\n        return Number.POSITIVE_INFINITY;\n    }\n    if (x === 2) {\n        return Number.NEGATIVE_INFINITY;\n    }\n    if (x === 1) {\n        return 0;\n    }\n    // [2] Get the sign and make use of `erfc` reflection formula: `erfc(-z)=2 - erfc(z)`...\n    if (x > 1) {\n        q = 2 - x;\n        x = 1 - q;\n        sign = true;\n    }\n    else {\n        q = x;\n        x = 1 - x;\n    }\n    // [3] |x| <= 0.5\n    if (x <= 0.5) {\n        g = x * (x + 10);\n        r = polyval(P1, x) / polyval(Q1, x);\n        val = g * Y1 + g * r;\n        return sign ? -val : val;\n    }\n    // [4] 1-|x| >= 0.25\n    if (q >= 0.25) {\n        g = Math.sqrt(-2 * Math.log(q));\n        q = q - 0.25;\n        r = polyval(P2, q) / polyval(Q2, q);\n        val = g / (Y2 + r);\n        return sign ? -val : val;\n    }\n    q = Math.sqrt(-Math.log(q));\n    // [5] q < 3\n    if (q < 3) {\n        return calc(q, 1.125, P3, Q3, Y3);\n    }\n    // [6] q < 6\n    if (q < 6) {\n        return calc(q, 3, P4, Q4, Y4);\n    }\n    // Note that the smallest number in JavaScript is 5e-324. Math.sqrt( -Math.log( 5e-324 ) ) ~27.2844\n    return calc(q, 6, P5, Q5, Y5);\n    // Note that in the boost library, they are able to go to much smaller values, as 128 bit long doubles support ~1e-5000; something which JavaScript does not natively support.\n}\n//# sourceMappingURL=erfcinv.js.map","import erfcinv from \"./erfcinv.js\";\n/**\n * Applies a simple normalization inverse transformation to the input data.\n * @param data - The input array of numbers to be transformed.\n * @param options - Optional parameters for the transformation.\n * @returns A new Float64Array containing the transformed data.\n */\nexport function simpleNormInv(data, options = {}) {\n    const { magnitudeMode = false } = options;\n    const result = new Float64Array(data.length);\n    if (magnitudeMode) {\n        for (let i = 0; i < result.length; i++) {\n            result[i] = -Math.sqrt(-2 * Math.log(1 - data[i]));\n        }\n    }\n    else {\n        for (let i = 0; i < result.length; i++) {\n            result[i] = -1 * Math.SQRT2 * erfcinv(2 * data[i]);\n        }\n    }\n    return result;\n}\n/**\n * Convenience wrapper for single number processing by simpleNormInv function.\n * @param data - The number to be normalized.\n * @param options - The options for the normalization process.\n * @returns The normalized number.\n */\nexport function simpleNormInvNumber(data, options = {}) {\n    return simpleNormInv([data], options)[0];\n}\n//# sourceMappingURL=simpleNormInv.js.map","import { isAnyArray } from 'is-any-array';\nimport { createFromToArray } from \"../utils/index.js\";\nimport { simpleNormInvNumber } from \"./utils/simpleNormInv.js\";\nimport { xEnsureFloat64 } from \"./xEnsureFloat64.js\";\n/**\n * Determine noise level by san plot methodology (https://doi.org/10.1002/mrc.4882)\n * @param array - real or magnitude spectra data.\n * @param options - options\n * @returns noise level\n */\nexport function xNoiseSanPlot(array, options = {}) {\n    const { mask, cutOff, refine = true, magnitudeMode = false, scaleFactor = 1, factorStd = 5, fixOffset = true, } = options;\n    const input = prepareData(array, { scaleFactor, mask });\n    if (fixOffset && !magnitudeMode) {\n        const medianIndex = Math.floor(input.length / 2);\n        const median = input.length % 2 === 0\n            ? 0.5 * (input[medianIndex - 1] + input[medianIndex])\n            : input[medianIndex];\n        for (let i = 0; i < input.length; i++) {\n            input[i] -= median;\n        }\n    }\n    const firstNegativeValueIndex = input.at(-1) >= 0\n        ? input.length\n        : input.findIndex((e) => e < 0);\n    let lastPositiveValueIndex = firstNegativeValueIndex - 1;\n    for (let i = lastPositiveValueIndex; i >= 0; i--) {\n        if (input[i] > 0) {\n            lastPositiveValueIndex = i;\n            break;\n        }\n    }\n    const signPositive = input.slice(0, lastPositiveValueIndex + 1);\n    const signNegative = input.slice(firstNegativeValueIndex);\n    const cutOffDist = cutOff || determineCutOff(signPositive, { magnitudeMode });\n    const pIndex = Math.floor(signPositive.length * cutOffDist);\n    const initialNoiseLevelPositive = signPositive[pIndex];\n    const skyPoint = signPositive[0];\n    let initialNoiseLevelNegative;\n    if (signNegative.length > 0) {\n        const nIndex = Math.floor(signNegative.length * (1 - cutOffDist));\n        initialNoiseLevelNegative = -1 * signNegative[nIndex];\n    }\n    else {\n        initialNoiseLevelNegative = 0;\n    }\n    let noiseLevelPositive = initialNoiseLevelPositive;\n    let noiseLevelNegative = initialNoiseLevelNegative;\n    let cloneSignPositive = signPositive.slice();\n    let cloneSignNegative = signNegative.slice();\n    let cutOffSignalsIndexPlus = 0;\n    let cutOffSignalsIndexNeg = 2;\n    if (refine) {\n        let cutOffSignals = noiseLevelPositive * factorStd;\n        cutOffSignalsIndexPlus = signPositive.findIndex((e) => e < cutOffSignals);\n        if (cutOffSignalsIndexPlus > -1) {\n            cloneSignPositive = signPositive.slice(cutOffSignalsIndexPlus);\n            noiseLevelPositive =\n                cloneSignPositive[Math.floor(cloneSignPositive.length * cutOffDist)];\n        }\n        cutOffSignals = noiseLevelNegative * factorStd;\n        cutOffSignalsIndexNeg = signNegative.findIndex((e) => e < cutOffSignals);\n        if (cutOffSignalsIndexNeg > -1) {\n            cloneSignNegative = signNegative.slice(cutOffSignalsIndexNeg);\n            noiseLevelNegative =\n                cloneSignPositive[Math.floor(cloneSignNegative.length * (1 - cutOffDist))];\n        }\n    }\n    const correctionFactor = -simpleNormInvNumber(cutOffDist / 2, {\n        magnitudeMode,\n    });\n    let effectiveCutOffDist, refinedCorrectionFactor;\n    if (refine && cutOffSignalsIndexPlus > -1) {\n        effectiveCutOffDist =\n            (cutOffDist * cloneSignPositive.length + cutOffSignalsIndexPlus) /\n                (cloneSignPositive.length + cutOffSignalsIndexPlus);\n        refinedCorrectionFactor =\n            -1 * simpleNormInvNumber(effectiveCutOffDist / 2, { magnitudeMode });\n        noiseLevelPositive /= refinedCorrectionFactor;\n        if (cutOffSignalsIndexNeg > -1) {\n            effectiveCutOffDist =\n                (cutOffDist * cloneSignNegative.length + cutOffSignalsIndexNeg) /\n                    (cloneSignNegative.length + cutOffSignalsIndexNeg);\n            refinedCorrectionFactor =\n                -1 * simpleNormInvNumber(effectiveCutOffDist / 2, { magnitudeMode });\n            if (noiseLevelNegative !== 0) {\n                noiseLevelNegative /= refinedCorrectionFactor;\n            }\n        }\n    }\n    else {\n        noiseLevelPositive /= correctionFactor;\n        noiseLevelNegative /= correctionFactor;\n    }\n    return {\n        positive: noiseLevelPositive,\n        negative: noiseLevelNegative,\n        snr: skyPoint / noiseLevelPositive,\n        sanplot: generateSanPlot(input, {\n            fromTo: {\n                positive: { from: 0, to: lastPositiveValueIndex },\n                negative: { from: firstNegativeValueIndex, to: input.length },\n            },\n        }),\n    };\n}\n/**\n * Determines the optimal cut-off point for a given array of positive numbers.\n * @param signPositive - An array of positive numbers.\n * @param options - Optional parameters to configure the cut-off determination.\n * @param options.magnitudeMode - If true, uses magnitude mode for normalization. Default is false.\n * @param options.considerList - An object specifying the range and step for consideration.\n * @param options.considerList.from - The starting point of the range. Default is 0.5.\n * @param options.considerList.step - The step size for the range. Default is 0.1.\n * @param options.considerList.to - The ending point of the range. Default is 0.9.\n * @returns The optimal cut-off point as a number.\n */\nfunction determineCutOff(signPositive, options = {}) {\n    const { magnitudeMode = false, considerList = { from: 0.5, step: 0.1, to: 0.9 }, } = options;\n    //generate a list of values for\n    const cutOff = [];\n    const indexMax = signPositive.length - 1;\n    for (let i = 0.01; i <= 0.99; i += 0.01) {\n        const index = Math.round(indexMax * i);\n        const value = -signPositive[index] / simpleNormInvNumber(i / 2, { magnitudeMode });\n        cutOff.push([i, value]);\n    }\n    let minKi = Number.MAX_SAFE_INTEGER;\n    const { from, to, step } = considerList;\n    const delta = step / 2;\n    let whereToCutStat = 0.5;\n    for (let i = from; i <= to; i += step) {\n        const floor = i - delta;\n        const top = i + delta;\n        const elementsOfCutOff = cutOff.filter((e) => e[0] < top && e[0] > floor);\n        let averageValue = 0;\n        for (const element of elementsOfCutOff) {\n            averageValue += Math.abs(element[1]);\n        }\n        let kiSqrt = 0;\n        for (const element of elementsOfCutOff) {\n            kiSqrt += (element[1] - averageValue) ** 2;\n        }\n        if (kiSqrt < minKi) {\n            minKi = kiSqrt;\n            whereToCutStat = i;\n        }\n    }\n    return whereToCutStat;\n}\n/**\n * Generates a SAN plot from the given array based on the specified options.\n * @param array - The input array of numbers to be processed.\n * @param options - An optional object containing configuration options.\n * @param options.logBaseY - The logarithmic base for the Y-axis. Defaults to 2.\n * @param options.fromTo - An object specifying the range for each key. Each key maps to an object with `from` and `to` properties.\n * @returns An object where each key maps to a DataXY object containing the processed data.\n */\nfunction generateSanPlot(array, options = {}) {\n    const { fromTo, logBaseY = 2 } = options;\n    const sanplot = {};\n    for (const key in fromTo) {\n        const { from, to } = fromTo[key];\n        sanplot[key] =\n            from !== to\n                ? scale(array.slice(from, to), {\n                    logBaseY,\n                })\n                : { x: [], y: [] };\n        if (key === 'negative') {\n            sanplot[key].y.reverse();\n        }\n    }\n    return sanplot;\n}\n/**\n * Scales the input array based on the provided options.\n * @param array - The input array to be scaled.\n * @param options - An optional object containing scaling options.\n * @param options.logBaseY - If provided, the array values will be scaled using the logarithm of this base.\n * @returns An object containing the scaled x and y arrays.\n */\nfunction scale(array, options = {}) {\n    const { log10, abs } = Math;\n    const { logBaseY } = options;\n    if (logBaseY) {\n        array = array.slice(0);\n        const logOfBase = log10(logBaseY);\n        for (let i = 0; i < array.length; i++) {\n            array[i] = log10(abs(array[i])) / logOfBase;\n        }\n    }\n    const xAxis = createFromToArray({\n        from: 0,\n        to: array.length - 1,\n        length: array.length,\n    });\n    return { x: xAxis, y: array };\n}\n/**\n * Prepares and processes the input data array based on the provided options.\n * @param array - The input array of numbers to be processed.\n * @param options - An object containing the following properties:\n *   - scaleFactor: A number by which to scale each element of the array.\n *   - mask: An optional array of the same length as the input array, where\n *           elements corresponding to `true` values will be excluded from processing.\n * @param options.scaleFactor\n * @param options.mask\n * @returns A new Float64Array containing the processed data, scaled by the\n *          scaleFactor and sorted in descending order.\n */\nfunction prepareData(array, options) {\n    const { scaleFactor, mask } = options;\n    const input = xEnsureFloat64(isAnyArray(mask) && mask.length === array.length\n        ? array.filter((_e, i) => !mask[i])\n        : array);\n    if (scaleFactor > 1) {\n        for (let i = 0; i < input.length; i++) {\n            input[i] *= scaleFactor;\n        }\n    }\n    input.sort();\n    input.reverse();\n    return input;\n}\n//# sourceMappingURL=xNoiseSanPlot.js.map","import { xMedianAbsoluteDeviation } from \"./xMedianAbsoluteDeviation.js\";\n/**\n * Determine noise level using MAD https://en.wikipedia.org/wiki/Median_absolute_deviation\n * Constant to convert mad to sd calculated using https://www.wolframalpha.com/input?i=sqrt%282%29+inverse+erf%280.5%29\n * This assumes a gaussian distribution of the noise\n * @param array\n * @returns noise level corresponding to one standard deviation\n */\nexport function xNoiseStandardDeviation(array) {\n    const { mad, median } = xMedianAbsoluteDeviation(array);\n    return { sd: mad / 0.6744897501960817, mad, median };\n}\n//# sourceMappingURL=xNoiseStandardDeviation.js.map","/**\n * This function calculate the norm of a vector.\n * @example xNorm([3, 4]) -> 5\n * @param array - array\n * @returns - calculated norm\n */\nexport function xNorm(array) {\n    let result = 0;\n    for (const element of array) {\n        result += element ** 2;\n    }\n    return Math.sqrt(result);\n}\n//# sourceMappingURL=xNorm.js.map","import { xCheck } from \"./xCheck.js\";\nimport { xGetFromToIndex } from \"./xGetFromToIndex.js\";\n/**\n * Calculate the sum of the values\n * @param array - Object that contains property x (an ordered increasing array) and y (an array).\n * @param options - Options.\n * @returns XSum value on the specified range.\n */\nexport function xSum(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let sumValue = array[fromIndex];\n    for (let i = fromIndex + 1; i <= toIndex; i++) {\n        sumValue += array[i];\n    }\n    return sumValue;\n}\n//# sourceMappingURL=xSum.js.map","import { getOutputArray } from \"./getOutputArray.js\";\nimport { xCheck } from \"./xCheck.js\";\nimport { xMaxValue } from \"./xMaxValue.js\";\nimport { xSum } from \"./xSum.js\";\n/**\n * Divides the data with either the sum, the absolute sum or the maximum of the data\n * @param input - Array containing values\n * @param options - options\n * @returns - normalized data\n */\nexport function xNormed(input, options = {}) {\n    const { algorithm = 'absolute', value = 1 } = options;\n    xCheck(input);\n    const output = getOutputArray(options.output, input.length);\n    if (input.length === 0) {\n        throw new Error('input must not be empty');\n    }\n    switch (algorithm) {\n        case 'absolute': {\n            const absoluteSumValue = absoluteSum(input) / value;\n            if (absoluteSumValue === 0) {\n                throw new Error('trying to divide by 0');\n            }\n            for (let i = 0; i < input.length; i++) {\n                output[i] = input[i] / absoluteSumValue;\n            }\n            return output;\n        }\n        case 'max': {\n            const currentMaxValue = xMaxValue(input);\n            if (currentMaxValue === 0) {\n                throw new Error('trying to divide by 0');\n            }\n            const factor = value / currentMaxValue;\n            for (let i = 0; i < input.length; i++) {\n                output[i] = input[i] * factor;\n            }\n            return output;\n        }\n        case 'sum': {\n            const sumFactor = xSum(input) / value;\n            if (sumFactor === 0) {\n                throw new Error('trying to divide by 0');\n            }\n            for (let i = 0; i < input.length; i++) {\n                output[i] = input[i] / sumFactor;\n            }\n            return output;\n        }\n        default:\n            throw new Error(`unknown algorithm: ${String(algorithm)}`);\n    }\n}\nfunction absoluteSum(input) {\n    let sumValue = 0;\n    for (const value of input) {\n        sumValue += Math.abs(value);\n    }\n    return sumValue;\n}\n//# sourceMappingURL=xNormed.js.map","import { xCheck } from \"./xCheck.js\";\nimport { xEnsureFloat64 } from \"./xEnsureFloat64.js\";\n/**\n * This function pads an array\n *s\n * @param array - the array that will be padded\n * @param options - options\n */\nexport function xPadding(array, options = {}) {\n    const { size = 0, value = 0, algorithm } = options;\n    xCheck(array);\n    if (!algorithm) {\n        return xEnsureFloat64(array);\n    }\n    const result = new Float64Array(array.length + size * 2);\n    for (let i = 0; i < array.length; i++) {\n        result[i + size] = array[i];\n    }\n    const fromEnd = size + array.length;\n    const toEnd = 2 * size + array.length;\n    switch (algorithm) {\n        case 'value':\n            for (let i = 0; i < size; i++) {\n                result[i] = value;\n            }\n            for (let i = fromEnd; i < toEnd; i++) {\n                result[i] = value;\n            }\n            break;\n        case 'duplicate':\n            for (let i = 0; i < size; i++) {\n                result[i] = array[0];\n            }\n            for (let i = fromEnd; i < toEnd; i++) {\n                result[i] = array.at(-1);\n            }\n            break;\n        case 'circular':\n            for (let i = 0; i < size; i++) {\n                result[i] =\n                    array[(array.length - (size % array.length) + i) % array.length];\n            }\n            for (let i = 0; i < size; i++) {\n                result[i + fromEnd] = array[i % array.length];\n            }\n            break;\n        default:\n            throw new Error(`unknown algorithm ${String(algorithm)}`);\n    }\n    return result;\n}\n//# sourceMappingURL=xPadding.js.map","import { xCheck } from \"./xCheck.js\";\nimport { xPadding } from \"./xPadding.js\";\n/**\n * This function calculates a rolling average\n * @param array - array\n * @param fct - callback function that from an array returns a value\n * @param options - options\n */\nexport function xRolling(array, fct, options = {}) {\n    xCheck(array);\n    if (typeof fct !== 'function') {\n        throw new TypeError('fct must be a function');\n    }\n    const { window = 5, padding = {} } = options;\n    const { size = window - 1, algorithm, value } = padding;\n    const padded = xPadding(array, { size, algorithm, value }); // ensure we get a copy and it is float64\n    const newArray = [];\n    for (let i = 0; i < padded.length - window + 1; i++) {\n        // we will send a view to the original buffer\n        newArray.push(fct(padded.subarray(i, i + window)));\n    }\n    return newArray;\n}\n//# sourceMappingURL=xRolling.js.map","import { xMean } from \"./xMean.js\";\nimport { xRolling } from \"./xRolling.js\";\n/**\n * This function calculates a rolling average\n * @param array - array\n * @param options - option\n */\nexport function xRollingAverage(array, options = {}) {\n    return xRolling(array, xMean, options);\n}\n//# sourceMappingURL=xRollingAverage.js.map","/**\n * This function performs a circular shift to an array.\n * Positive values of shifts will shift to the right and negative values will do to the left.\n * @example xRotate([1,2,3,4],1) -> [4,1,2,3]\n * @example xRotate([1,2,3,4],-1) -> [2,3,4,1]\n * @param array - array\n * @param shift - shift\n * @returns - rotated array\n */\nexport function xRotate(array, shift) {\n    shift = shift % array.length;\n    if (shift < 0)\n        shift += array.length;\n    const result = new Float64Array(array.length);\n    result.set(array.slice(array.length - shift));\n    result.set(array.slice(0, array.length - shift), shift);\n    return result;\n}\n//# sourceMappingURL=xRotate.js.map","import { createNumberArray } from \"../utils/index.js\";\nexport function xSequentialFillFromStep(parameters, options = {}) {\n    const { from, step, size } = parameters;\n    const { ArrayConstructor = Float64Array } = options;\n    const result = createNumberArray(ArrayConstructor, size);\n    for (let i = 0; i < size; i++) {\n        result[i] = from + i * step;\n    }\n    return result;\n}\n//# sourceMappingURL=xSequentialFillFromStep.js.map","/**\n * Function that sorts arrays or Float64Arrays in descending order\n * @param array - array to sort\n * @returns sorted array\n */\nexport function xSortDescending(array) {\n    if (ArrayBuffer.isView(array)) {\n        array.sort();\n        array.reverse();\n        return array;\n    }\n    else if (Array.isArray(array)) {\n        array.sort((a, b) => b - a);\n        return array;\n    }\n    throw new Error('trying to sort non array');\n}\n//# sourceMappingURL=xSortDescending.js.map","import { createNumberArray } from \"../utils/index.js\";\n/**\n * Create a new matrix based on the size of the current one or by using specific dimensions.\n * @param options\n */\nexport function matrixCreateEmpty(options) {\n    const { matrix, nbRows = matrix?.length || 1, nbColumns = matrix?.[0].length || 1, ArrayConstructor = Float64Array, } = options;\n    const newMatrix = [];\n    for (let row = 0; row < nbRows; row++) {\n        newMatrix.push(createNumberArray(ArrayConstructor, nbColumns));\n    }\n    return newMatrix;\n}\n//# sourceMappingURL=matrixCreateEmpty.js.map","export function matrixCheck(data) {\n    if (data.length === 0 || data[0].length === 0) {\n        throw new RangeError('matrix must contain data');\n    }\n    const firstLength = data[0].length;\n    for (let i = 1; i < data.length; i++) {\n        if (data[i].length !== firstLength) {\n            throw new RangeError('all rows must has the same length');\n        }\n    }\n}\n//# sourceMappingURL=matrixCheck.js.map","/*\nThe MIT License (MIT)\n\nCopyright (c) 2013 Eric Arnebäck\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n*/\n/**\n * Solves a system of linear equations using the Cholesky decomposition method.\n * It is a direct conversion to TS from {@link https://github.com/scijs/cholesky-solve}\n * @param nonZerosArray - The matrix in triplet form (array of arrays), where each sub-array contains three elements: row index, column index, and value.\n * @param dimension - The order of the matrix (number of rows/columns).\n * @param permutationEncoded - Optional permutation array. If provided, it will be used to permute the matrix.\n * @returns A function that takes a right-hand side vector `b` and returns the solution vector `x`, or `null` if the decomposition fails.\n */\nexport function matrixCholeskySolver(nonZerosArray, dimension, permutationEncoded) {\n    if (permutationEncoded) {\n        const pinv = new Int32Array(dimension);\n        for (let k = 0; k < dimension; k++) {\n            pinv[permutationEncoded[k]] = k;\n        }\n        // Build a permuted copy (kept as plain arrays for compatibility)\n        const mt = new Array(nonZerosArray.length);\n        for (let a = 0; a < nonZerosArray.length; ++a) {\n            const [r, c, value] = nonZerosArray[a];\n            const ar = pinv[r];\n            const ac = pinv[c];\n            mt[a] = ac < ar ? [ac, ar, value] : [ar, ac, value];\n        }\n        nonZerosArray = mt;\n    }\n    else {\n        // use a typed identity permutation\n        const p = new Int32Array(dimension);\n        for (let i = 0; i < dimension; ++i) {\n            p[i] = i;\n        }\n        permutationEncoded = p;\n    }\n    const nnz = nonZerosArray.length;\n    const ap = new Int32Array(dimension + 1);\n    const ai = new Int32Array(nnz);\n    const ax = new Float64Array(nnz);\n    const lnz = new Int32Array(dimension);\n    for (let idx = 0; idx < nnz; idx++) {\n        const col = nonZerosArray[idx][1];\n        lnz[col]++;\n    }\n    ap[0] = 0;\n    for (let i = 0; i < dimension; ++i) {\n        ap[i + 1] = ap[i] + lnz[i];\n    }\n    const colOffset = new Int32Array(dimension);\n    for (let idx = 0; idx < nnz; idx++) {\n        const e = nonZerosArray[idx];\n        const col = e[1];\n        const adr = ap[col] + colOffset[col];\n        ai[adr] = e[0];\n        ax[adr] = e[2];\n        colOffset[col]++;\n    }\n    const d = new Float64Array(dimension);\n    const y = new Float64Array(dimension);\n    const lp = new Int32Array(dimension + 1);\n    const parent = new Int32Array(dimension);\n    const lnzArray = new Int32Array(dimension);\n    const flag = new Int32Array(dimension);\n    const pattern = new Int32Array(dimension);\n    const bp1 = new Float64Array(dimension);\n    const x = new Float64Array(dimension);\n    ldlSymbolic(dimension, ap, ai, lp, parent, lnzArray, flag);\n    const nz = lp[dimension];\n    const lx = new Float64Array(nz);\n    const li = new Int32Array(nz);\n    const result = ldlNumeric(dimension, ap, ai, ax, lp, parent, lnzArray, li, lx, d, y, pattern, flag);\n    if (result === dimension) {\n        return (b) => {\n            ldlPerm(dimension, bp1, b, permutationEncoded);\n            ldlLsolve(dimension, bp1, lp, li, lx);\n            ldlDsolve(dimension, bp1, d);\n            ldlLTsolve(dimension, bp1, lp, li, lx);\n            ldlPermt(dimension, x, bp1, permutationEncoded);\n            return x;\n        };\n    }\n    else {\n        return null;\n    }\n}\nfunction ldlSymbolic(dimension, ap, ai, lp, parent, lnz, flag) {\n    const apLoc = ap;\n    const aiLoc = ai;\n    const parentLoc = parent;\n    const lnzLoc = lnz;\n    const flagLoc = flag;\n    for (let k = 0; k < dimension; k++) {\n        parentLoc[k] = -1;\n        flagLoc[k] = k;\n        lnzLoc[k] = 0;\n        const kk = k;\n        const p2 = apLoc[kk + 1];\n        for (let p = apLoc[kk]; p < p2; p++) {\n            let i = aiLoc[p];\n            if (i < k) {\n                for (; flagLoc[i] !== k; i = parentLoc[i]) {\n                    if (parentLoc[i] === -1)\n                        parentLoc[i] = k;\n                    lnzLoc[i]++;\n                    flagLoc[i] = k;\n                }\n            }\n        }\n    }\n    lp[0] = 0;\n    for (let k = 0; k < dimension; k++) {\n        lp[k + 1] = lp[k] + lnz[k];\n    }\n}\nfunction ldlNumeric(dimension, ap, ai, ax, lp, parent, lnz, li, lx, d, y, pattern, flag) {\n    const apLoc = ap;\n    const aiLoc = ai;\n    const axLoc = ax;\n    const lpLoc = lp;\n    const parentLoc = parent;\n    const lnzLoc = lnz;\n    const liLoc = li;\n    const lxLoc = lx;\n    const dLoc = d;\n    const yLoc = y;\n    const patternLoc = pattern;\n    const flagLoc = flag;\n    let yi, lKi;\n    for (let k = 0; k < dimension; k++) {\n        yLoc[k] = 0;\n        let top = dimension;\n        flagLoc[k] = k;\n        lnzLoc[k] = 0;\n        const kk = k;\n        const p2col = apLoc[kk + 1];\n        for (let p = apLoc[kk]; p < p2col; p++) {\n            let i = aiLoc[p];\n            if (i <= k) {\n                yLoc[i] += axLoc[p];\n                let len = 0;\n                for (; flagLoc[i] !== k; i = parentLoc[i]) {\n                    patternLoc[len++] = i;\n                    flagLoc[i] = k;\n                }\n                while (len > 0)\n                    patternLoc[--top] = patternLoc[--len];\n            }\n        }\n        dLoc[k] = yLoc[k];\n        yLoc[k] = 0;\n        for (; top < dimension; top++) {\n            const i = patternLoc[top];\n            yi = yLoc[i];\n            yLoc[i] = 0;\n            const p2 = lpLoc[i] + lnzLoc[i];\n            let p;\n            for (p = lpLoc[i]; p < p2; p++) {\n                yLoc[liLoc[p]] -= lxLoc[p] * yi;\n            }\n            lKi = yi / dLoc[i];\n            dLoc[k] -= lKi * yi;\n            liLoc[p] = k;\n            lxLoc[p] = lKi;\n            lnzLoc[i]++;\n        }\n        if (dLoc[k] === 0)\n            return k;\n    }\n    return dimension;\n}\nfunction ldlLsolve(dimension, x, lp, li, lx) {\n    const lpLoc = lp;\n    const liLoc = li;\n    const lxLoc = lx;\n    const xLoc = x;\n    for (let j = 0; j < dimension; j++) {\n        const p2 = lpLoc[j + 1];\n        for (let p = lpLoc[j]; p < p2; p++) {\n            xLoc[liLoc[p]] -= lxLoc[p] * xLoc[j];\n        }\n    }\n}\nfunction ldlDsolve(dimension, x, d) {\n    const xLoc = x;\n    const dLoc = d;\n    for (let j = 0; j < dimension; j++) {\n        xLoc[j] /= dLoc[j];\n    }\n}\nfunction ldlLTsolve(dimension, x, lp, li, lx) {\n    const lpLoc = lp;\n    const liLoc = li;\n    const lxLoc = lx;\n    const xLoc = x;\n    for (let j = dimension - 1; j >= 0; j--) {\n        const p2 = lpLoc[j + 1];\n        for (let p = lpLoc[j]; p < p2; p++) {\n            xLoc[j] -= lxLoc[p] * xLoc[liLoc[p]];\n        }\n    }\n}\nfunction ldlPerm(dimension, x, b, permutationEncoded) {\n    const perm = permutationEncoded;\n    const xLoc = x;\n    const bLoc = b;\n    for (let j = 0; j < dimension; j++) {\n        xLoc[j] = bLoc[perm[j]];\n    }\n}\nfunction ldlPermt(dimension, x, b, permutationEncoded) {\n    const perm = permutationEncoded;\n    const xLoc = x;\n    const bLoc = b;\n    for (let j = 0; j < dimension; j++) {\n        xLoc[perm[j]] = bLoc[j];\n    }\n}\n//# sourceMappingURL=matrixCholeskySolver.js.map","/**\n * Clone a matrix.\n * @param matrix\n */\nexport function matrixClone(matrix) {\n    return matrix.map((row) => row.slice(0));\n}\n//# sourceMappingURL=matrixClone.js.map","/**\n * The MIT License (MIT)\n *\n * Copyright (c) 2013 Mikola Lysenko\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n/**\n * The reverse Cuthill-Mckee method is a fast and effective preconditioner for reducing the bandwidth of sparse linear systems.\n * When solving a positive semidefinite linear system using Cholesky factorization, it greatly reduces fill-in.\n * It is a direct conversion to TS from {@link github.com/mikolalysenko/cuthill-mckee}\n * @param list - lower triangular non zeros from a symmetric sparse matrix.\n * @param dimension - matrix dimension\n * @returns A Float64Array where the value at each index represents the new position of the node\n *          in the bandwidth-reduced ordering.\n */\nexport function matrixCuthillMckee(list, dimension) {\n    const adj = new Array(dimension);\n    const visited = new Array(dimension).fill(false);\n    for (let i = 0; i < dimension; ++i) {\n        adj[i] = [];\n    }\n    for (const l of list) {\n        adj[l[0]].push(l[1]);\n    }\n    const toVisit = new Float64Array(dimension);\n    let eol = 0;\n    let ptr = 0;\n    for (let i = 0; i < dimension; ++i) {\n        if (visited[i]) {\n            continue;\n        }\n        toVisit[eol++] = i;\n        visited[i] = true;\n        while (ptr < eol) {\n            const v = toVisit[ptr++];\n            const nbhd = Float64Array.from(adj[v]);\n            nbhd.sort();\n            for (const u of nbhd) {\n                if (visited[u]) {\n                    continue;\n                }\n                visited[u] = true;\n                toVisit[eol++] = u;\n            }\n        }\n    }\n    const result = new Float64Array(dimension);\n    for (let i = 0; i < dimension; ++i) {\n        result[toVisit[i]] = i;\n    }\n    return result;\n}\n//# sourceMappingURL=matrixCuthillMckee.js.map","/**\n * Checks if the specified submatrix boundaries are within the valid range of the given matrix.\n * @param matrix - The matrix to check the boundaries against.\n * @param boundaries - The boundaries of the submatrix.\n * @throws {RangeError} If any of the specified boundaries are out of the matrix's range.\n */\nexport function matrixCheckRanges(matrix, boundaries) {\n    const { startRow, endRow, startColumn, endColumn } = boundaries;\n    if (startRow > endRow ||\n        startColumn > endColumn ||\n        startRow < 0 ||\n        startRow >= matrix.length ||\n        endRow < 0 ||\n        endRow >= matrix.length ||\n        startColumn < 0 ||\n        startColumn >= matrix[0].length ||\n        endColumn < 0 ||\n        endColumn >= matrix[0].length) {\n        throw new RangeError('submatrix indices are out of range');\n    }\n}\n//# sourceMappingURL=matrixCheckRanges.js.map","/**\n * Get min and max of the absolute values of Z.\n * @param matrix - matrix [rows][cols].\n */\nexport function matrixMinMaxAbsoluteZ(matrix) {\n    if (matrix.length === 0 || matrix[0].length === 0) {\n        throw new Error('matrixMinMaxAbsoluteZ requires at least 1 row and 1 column');\n    }\n    const nbRows = matrix.length;\n    const nbColumns = matrix[0].length;\n    let min = Number.POSITIVE_INFINITY;\n    let max = Number.NEGATIVE_INFINITY;\n    for (let column = 0; column < nbColumns; column++) {\n        for (let row = 0; row < nbRows; row++) {\n            let value = matrix[row][column];\n            if (value < 0)\n                value *= -1;\n            if (value < min)\n                min = value;\n            if (value > max)\n                max = value;\n        }\n    }\n    return { min, max };\n}\n//# sourceMappingURL=matrixMinMaxAbsoluteZ.js.map","import { matrixCheck } from \"./matrixCheck.js\";\n/**\n * Get min and max Z.\n * @param matrix - matrix [rows][cols].\n */\nexport function matrixMinMaxZ(matrix) {\n    matrixCheck(matrix);\n    const nbRows = matrix.length;\n    const nbColumns = matrix[0].length;\n    let min = matrix[0][0];\n    let max = matrix[0][0];\n    for (let column = 0; column < nbColumns; column++) {\n        for (let row = 0; row < nbRows; row++) {\n            if (matrix[row][column] < min)\n                min = matrix[row][column];\n            if (matrix[row][column] > max)\n                max = matrix[row][column];\n        }\n    }\n    return { min, max };\n}\n//# sourceMappingURL=matrixMinMaxZ.js.map","/**\n * Returns the max absolute values of Z.\n * @param matrix - matrix [rows][cols].\n */\nexport function matrixMaxAbsoluteZ(matrix) {\n    if (matrix.length === 0 || matrix[0].length === 0) {\n        throw new Error('matrix must have at least 1 row and 1 column');\n    }\n    const nbRows = matrix.length;\n    const nbColumns = matrix[0].length;\n    let max = Number.NEGATIVE_INFINITY;\n    for (let column = 0; column < nbColumns; column++) {\n        for (let row = 0; row < nbRows; row++) {\n            const value = Math.abs(matrix[row][column]);\n            if (value > max)\n                max = value;\n        }\n    }\n    return max;\n}\n//# sourceMappingURL=matrixMaxAbsoluteZ.js.map","import { matrixCheck } from \"./matrixCheck.js\";\n/**\n * Convert a matrix to a flat Float64Array.\n * @param matrix\n */\nexport function matrixToArray(matrix) {\n    matrixCheck(matrix);\n    const nbColumns = matrix[0].length;\n    const flatten = new Float64Array(matrix.length * nbColumns);\n    for (let row = 0; row < matrix.length; row++) {\n        const currentRow = row * nbColumns;\n        for (let column = 0; column < nbColumns; column++) {\n            flatten[currentRow + column] = matrix[row][column];\n        }\n    }\n    return flatten;\n}\n//# sourceMappingURL=matrixToArray.js.map","/**\n * add the provided weights to a particular given system matrix (lD'D) in the triplet form and y data. This function is not general\n * it assumes that diagonal coefficients are in the even indexes, it is the case of the matrix generated by createSystemMatrix function.\n * It simulates the matrix operation W + lD'D and Wy.\n * @param leftHandSide - The original system matrix to be updated, a lower triangular non-zeros of the system matrix (lambda D'D).\n * @param rightHandSide - The original vector to be updated.\n * @param weights - The weights to apply to the system matrix and vector.\n * @returns An object that contains the news left and right hand-side of the system.\n */\nexport function addWeights(leftHandSide, rightHandSide, weights) {\n    const nbPoints = rightHandSide.length;\n    const l = nbPoints - 1;\n    const newLeftHandSide = new Array(leftHandSide.length);\n    const newRightHandSide = new Float64Array(nbPoints);\n    for (let i = 0; i < l; i++) {\n        const w = weights[i];\n        const diag = i * 2;\n        const next = diag + 1;\n        newLeftHandSide[diag] = leftHandSide[diag].slice();\n        newLeftHandSide[next] = leftHandSide[next].slice();\n        newRightHandSide[i] = rightHandSide[i] * w;\n        newLeftHandSide[diag][2] += w;\n    }\n    newRightHandSide[l] = rightHandSide[l] * weights[l];\n    newLeftHandSide[l * 2] = leftHandSide[l * 2].slice();\n    newLeftHandSide[l * 2][2] += weights[l];\n    return {\n        leftHandSide: newLeftHandSide,\n        rightHandSide: newRightHandSide,\n    };\n}\n//# sourceMappingURL=addWeights.js.map","import { matrixCholeskySolver } from \"../matrix/index.js\";\nimport { addWeights } from \"../utils/addWeights.js\";\nimport { createSystemMatrix } from \"../utils/createSystemMatrix.js\";\nimport { calculateAdaptiveWeights } from \"../utils/index.js\";\nimport { xEnsureFloat64 } from \"./xEnsureFloat64.js\";\nimport { xMultiply } from \"./xMultiply.js\";\nexport function xWhittakerSmoother(yData, options = {}) {\n    const { algorithm = 'thomas', ...restOptions } = options;\n    if (algorithm === 'thomas') {\n        return whittakerByThomas(yData, restOptions);\n    }\n    return whittakerByCholesky(yData, restOptions);\n}\n/**\n * @deprecated Use xWhittakerSmoother instead.\n * TODO: Remove in next major version.\n */\nexport const xWhitakerSmoother = xWhittakerSmoother;\n/**\n * Computes the baseline points for the given data using an iterative smoothing algorithm.\n * @param yData - The input data array.\n * @param options - The options for baseline computation.\n * @returns - The computed baseline points.\n */\nfunction whittakerByCholesky(yData, options = {}) {\n    const { lambda = 100, maxIterations = 100, tolerance = 1e-6, factorStd = 3, learningRate = 0.5, } = options;\n    const size = yData.length;\n    const { controlPoints, weights } = getWeightsAndControlPoints(yData, options);\n    const prevBaseline = new Float64Array(size);\n    let iteration = 0;\n    let delta = Infinity;\n    let baseline = xEnsureFloat64(yData);\n    const { upperTriangularNonZeros, permutationEncodedArray } = createSystemMatrix(size, lambda);\n    while (iteration < maxIterations && delta > tolerance) {\n        const { leftHandSide, rightHandSide } = addWeights(upperTriangularNonZeros, yData, weights);\n        const cho = matrixCholeskySolver(leftHandSide, size, permutationEncodedArray);\n        if (!cho) {\n            return baseline;\n        }\n        const newBaseline = cho(rightHandSide);\n        //weights is updated inplace\n        calculateAdaptiveWeights(yData, newBaseline, weights, {\n            controlPoints,\n            learningRate,\n            factorStd,\n        });\n        delta = calculateDelta(newBaseline, prevBaseline, size);\n        prevBaseline.set(newBaseline);\n        baseline = xEnsureFloat64(newBaseline);\n        iteration++;\n    }\n    return baseline;\n}\n/**\n * Calculates the delta between the current and previous baseline.\n * @param baseline - The current baseline array.\n * @param prevBaseline - The previous baseline array.\n * @param n - The length of the arrays.\n * @returns - The calculated delta value.\n */\nfunction calculateDelta(baseline, prevBaseline, n) {\n    let sum = 0;\n    for (let i = 0; i < n; i++) {\n        sum += (baseline[i] - prevBaseline[i]) ** 2;\n    }\n    return Math.sqrt(sum / n);\n}\n/**\n * Retrieves the control points and weights for the given data, the weights are modified multiplication of controlPoints if it exists.\n * @param  y - The input data array.\n * @param  options - The options for control points and weights.\n * @returns - The control points and modified weights.\n */\nfunction getWeightsAndControlPoints(y, options = {}) {\n    const { length } = y;\n    const { controlPoints } = options;\n    const { weights = Float64Array.from({ length }).fill(1) } = options;\n    if (controlPoints && controlPoints.length !== y.length) {\n        throw new RangeError('controlPoints should match the length with X');\n    }\n    else if (weights.length !== y.length) {\n        throw new RangeError('weights should match the length with X');\n    }\n    return {\n        weights: controlPoints ? xMultiply(weights, controlPoints) : weights,\n        controlPoints,\n    };\n}\nfunction whittakerByThomas(yData, options = {}) {\n    const { lambda = 100, maxIterations = 100, tolerance = 1e-6, factorStd = 3, learningRate = 0.5, } = options;\n    const n = yData.length;\n    const y = xEnsureFloat64(yData);\n    const { controlPoints, weights } = getWeightsAndControlPoints(yData, options);\n    const prevBaseline = new Float64Array(n);\n    let baseline = xEnsureFloat64(yData);\n    // Precompute base diagonal and constant off-diagonals (−lambda)\n    const baseDiag = new Float64Array(n);\n    if (n === 1) {\n        baseDiag[0] = lambda;\n    }\n    else {\n        baseDiag[0] = lambda;\n        for (let i = 1; i < n - 1; i++)\n            baseDiag[i] = 2 * lambda;\n        baseDiag[n - 1] = lambda;\n    }\n    const lower = new Float64Array(Math.max(0, n - 1));\n    const upper = new Float64Array(Math.max(0, n - 1));\n    for (let i = 0; i < lower.length; i++) {\n        lower[i] = -lambda;\n        upper[i] = -lambda;\n    }\n    const main = new Float64Array(n);\n    const rhs = new Float64Array(n);\n    const solution = new Float64Array(n);\n    const workC = new Float64Array(Math.max(0, n - 1));\n    const workD = new Float64Array(n);\n    let iteration = 0;\n    let delta = Infinity;\n    /**\n     * Iterative Whittaker smoothing implementation using the Thomas algorithm\n     * (tridiagonal solver). The method constructs the system\n     * [W + lambda * D'D] z = W * y where D is the second-difference operator\n     * and W are adaptive weights. At each iteration the tridiagonal system is\n     * solved with the Thomas algorithm and the weights are updated using\n     * `calculateAdaptiveWeights` until convergence.\n     *\n     * Use this algorithm by passing `algorithm: 'thomas'` to `xWhittakerSmoother`.\n     * It is more memory-efficient for large inputs because it avoids forming\n     * the full banded matrix, but both implementations aim to produce the same\n     * baseline result.\n     * @param yData - input signal/spectrum\n     * @param options - smoothing options (supports `lambda`, `maxIterations`,\n     *                  `tolerance`, `factorStd`, `learningRate`, and optional\n     *                  `controlPoints` / `weights` inherited from\n     *                  `CalculateAdaptiveWeightsOptions`).\n     * @returns baseline as a `Float64Array`.\n     */\n    while (iteration < maxIterations && delta > tolerance) {\n        // Build main diagonal = baseDiag + weights, and RHS = weights * y\n        for (let i = 0; i < n; i++) {\n            main[i] = baseDiag[i] + weights[i];\n            rhs[i] = weights[i] * y[i];\n        }\n        // Solve tridiagonal system in-place into `solution`\n        solveTridiagonalFloat64(lower, main, upper, rhs, solution, workC, workD);\n        calculateAdaptiveWeights(y, solution, weights, {\n            controlPoints,\n            learningRate,\n            factorStd,\n        });\n        delta = calculateDelta(solution, prevBaseline, n);\n        prevBaseline.set(solution);\n        baseline = xEnsureFloat64(solution);\n        iteration++;\n    }\n    return baseline;\n}\nfunction solveTridiagonalFloat64(lower, diag, upper, rhs, out, cp, dp) {\n    const n = diag.length;\n    const x = out ?? new Float64Array(n);\n    if (n === 0)\n        return x;\n    if (n === 1) {\n        x[0] = rhs[0] / diag[0];\n        return x;\n    }\n    const cprime = cp ?? new Float64Array(n - 1);\n    const dprime = dp ?? new Float64Array(n);\n    let denom = diag[0];\n    cprime[0] = upper[0] / denom;\n    dprime[0] = rhs[0] / denom;\n    for (let i = 1; i < n - 1; i++) {\n        denom = diag[i] - lower[i - 1] * cprime[i - 1];\n        cprime[i] = upper[i] / denom;\n        dprime[i] = (rhs[i] - lower[i - 1] * dprime[i - 1]) / denom;\n    }\n    denom = diag[n - 1] - lower[n - 2] * cprime[n - 2];\n    dprime[n - 1] = (rhs[n - 1] - lower[n - 2] * dprime[n - 2]) / denom;\n    x[n - 1] = dprime[n - 1];\n    for (let i = n - 2; i >= 0; i--) {\n        x[i] = dprime[i] - cprime[i] * x[i + 1];\n    }\n    return x;\n}\n//# sourceMappingURL=xWhittakerSmoother.js.map","import { matrixCuthillMckee } from \"../matrix/matrixCuthillMckee.js\";\n/**\n * Generates a lower triangular non-zeros of the first order smoother matrix (lambda D'D) where D is the derivate of the identity matrix\n * this function in combination with addWeights function can obtain (Q = W + lambda D'D) a penalized least square of Whittaker smoother,\n * it also generates a permutation encoded array.\n * @param dimension - The number of points in the matrix.\n * @param lambda - The factor of smoothness .\n * @returns An object containing the lower triangular non-zero elements of the matrix\n * and the permutation encoded array.\n * @property lowerTriangularNonZeros - The lower triangular non-zero elements of the matrix in triplet form.\n * @property permutationEncodedArray - The permutation encoded array generated using the Cuthill-McKee algorithm.\n */\nexport function createSystemMatrix(dimension, lambda) {\n    const upperTriangularNonZeros = [];\n    const last = dimension - 1;\n    for (let i = 0; i < last; i++) {\n        upperTriangularNonZeros.push([i, i, lambda * 2], [i, i + 1, -1 * lambda]);\n    }\n    upperTriangularNonZeros[0][2] = lambda;\n    upperTriangularNonZeros.push([last, last, lambda]);\n    const permutationEncodedArray = matrixCuthillMckee(upperTriangularNonZeros, dimension);\n    return { upperTriangularNonZeros, permutationEncodedArray };\n}\n//# sourceMappingURL=createSystemMatrix.js.map","/**\n * Phase correction filter.\n * @param data - complex spectrum\n * @param phi0 - Angle in radians for zero order phase correction\n * @param phi1 - Angle in radians for first order phase correction\n * @param options\n * @returns - returns a new object {re:[], im:[]} unless inPlace=true\n */\nexport function reimPhaseCorrection(data, phi0 = 0, phi1 = 0, options = {}) {\n    const { reverse = false, inPlace = false } = options;\n    phi0 = Number.isFinite(phi0) ? phi0 : 0;\n    phi1 = Number.isFinite(phi1) ? phi1 : 0;\n    const length = data.re.length;\n    // Decide target arrays\n    const re = data.re;\n    const im = data.im;\n    const outRe = inPlace ? re : new Float64Array(length);\n    const outIm = inPlace ? im : new Float64Array(length);\n    let firstAngle = phi0;\n    let delta = phi1 / length;\n    if (reverse) {\n        delta *= -1;\n        firstAngle += phi1;\n    }\n    const alpha = 2 * Math.sin(delta / 2) ** 2;\n    const beta = Math.sin(delta);\n    let cosTheta = Math.cos(firstAngle);\n    let sinTheta = Math.sin(firstAngle);\n    for (let i = 0; i < length; i++) {\n        const r = re[i];\n        const ii = im[i];\n        outRe[i] = r * cosTheta - ii * sinTheta;\n        outIm[i] = ii * cosTheta + r * sinTheta;\n        // Recursive angle update (stable incremental rotation)\n        const newCosTheta = cosTheta - (alpha * cosTheta + beta * sinTheta);\n        const newSinTheta = sinTheta - (alpha * sinTheta - beta * cosTheta);\n        cosTheta = newCosTheta;\n        sinTheta = newSinTheta;\n    }\n    return { re: outRe, im: outIm };\n}\n//# sourceMappingURL=reimPhaseCorrection.js.map","import { xNoiseSanPlot } from \"../x/index.js\";\nimport { reimAbsolute } from \"./reimAbsolute.js\";\nimport { reimPhaseCorrection } from \"./reimPhaseCorrection.js\";\n/**\n * Implementation of the algorithm for automatic phase correction: A robust, general automatic phase\n * correction algorithm for high-resolution NMR data. 10.1002/mrc.4586\n * @param data - complex spectrum\n * @param options - options\n */\nexport function reimAutoPhaseCorrection(data, options = {}) {\n    const { magnitudeMode = true, minRegSize = 30, factorNoise = 3, maxDistanceToJoin = 256, reverse = false, inPlace = false, } = options;\n    const finalPeaks = detectBaselineRegions(data, {\n        maxDistanceToJoin,\n        magnitudeMode,\n        factorNoise,\n    });\n    const { re, im } = data;\n    const length = re.length;\n    const indexMask = reverse ? (i) => length - 1 - i : (i) => i;\n    let x0 = 0;\n    let counter = -1;\n    const res = [];\n    while (counter < length) {\n        const reTmp = [];\n        const imTmp = [];\n        while (!finalPeaks[indexMask(++counter)] && counter < length) {\n            // Add some extra points(0.1 ppm) at rigth and left sides of the region.\n            x0 = counter;\n        }\n        for (; finalPeaks[indexMask(counter)] && counter < length; counter += 2) {\n            reTmp.push(re[indexMask(counter)]);\n            imTmp.push(im[indexMask(counter)]);\n        }\n        if (reTmp.length > minRegSize) {\n            res.push(autoPhaseRegion(reTmp, imTmp, x0));\n        }\n    }\n    const { ph1, ph0 } = determiningGlobalValues(res.map((r) => r.x0 / length), res.map((r) => r.ph0), res.map((r) => r.area / 1e11));\n    const phased = reimPhaseCorrection({ re, im }, toRadians(ph0), toRadians(ph1), { reverse, inPlace });\n    return { data: phased, ph0, ph1 };\n}\nfunction determiningGlobalValues(x, ph0Values, weights) {\n    if (x.length === 0) {\n        return { ph0: 0, ph1: 0 };\n    }\n    else if (x.length === 1) {\n        return { ph0: ph0Values[0], ph1: 0 };\n    }\n    const [ph1, ph0] = weightedLinearRegression(x, ph0Values, weights);\n    let indexMax = -1;\n    let maxDiff = Number.MIN_SAFE_INTEGER;\n    for (let i = 0; i < x.length; i++) {\n        const predictedPh0 = x[i] * ph1 + ph0;\n        const diff = Math.abs(ph0Values[i] - predictedPh0);\n        if (diff > 34 && maxDiff < diff) {\n            indexMax = i;\n            maxDiff = diff;\n        }\n    }\n    if (indexMax > -1) {\n        x.splice(indexMax, 1);\n        ph0Values.splice(indexMax, 1);\n        weights.splice(indexMax, 1);\n        return determiningGlobalValues(x, ph0Values, weights);\n    }\n    return { ph0, ph1 };\n}\nfunction detectBaselineRegions(data, options) {\n    const magnitudeData = options.magnitudeMode ? reimAbsolute(data) : data.re;\n    const ds = holoborodko(magnitudeData);\n    const peaksDs = robustBaseLineRegionsDetection(ds, options);\n    const peaksSp = robustBaseLineRegionsDetection(magnitudeData, options);\n    return peaksSp.map((sp, i) => sp && peaksDs[i]);\n}\n/**\n * AutoPhaseRegion.\n * @param re - Array of Number.\n * @param im - Array of Number.\n * @param x0 - Number.\n * @returns Region.\n */\nfunction autoPhaseRegion(re, im, x0) {\n    let start = -180;\n    let stop = 180;\n    const nSteps = 6;\n    let maxSteps = 10;\n    let bestAng = 0;\n    let minArea = Number.MAX_SAFE_INTEGER;\n    while (maxSteps > 0) {\n        const dAng = (stop - start) / (nSteps + 1);\n        for (let i = start; i <= stop; i += dAng) {\n            const tmpPhased = reimPhaseCorrection({ re, im }, toRadians(i), 0);\n            const negArea = getNegArea(tmpPhased.re);\n            if (negArea < minArea) {\n                [minArea, bestAng] = [negArea, i];\n            }\n        }\n        start = bestAng - dAng;\n        stop = bestAng + dAng;\n        maxSteps--;\n    }\n    // Calculate the area for the best angle\n    const phased = reimPhaseCorrection({ re, im }, toRadians(bestAng), 0);\n    let area = 0;\n    let sumX = 0;\n    for (let j = 0; j < re.length; j++) {\n        area += phased.re[j];\n        sumX += phased.re[j] * (j + x0);\n    }\n    return { ph0: bestAng, area, x0: sumX / area };\n}\n/**\n * Holoborodko.\n * @param s - Array of float.\n * @returns Array of float.\n */\nfunction holoborodko(s) {\n    const dk = new Float64Array(s.length);\n    for (let i = 5; i < s.length - 5; i++) {\n        dk[i] =\n            (42 * (s[i + 1] - s[i - 1]) +\n                48 * (s[i + 2] - s[i - 2]) +\n                27 * (s[i + 3] + s[i - 3]) +\n                8 * (s[i + 4] - s[i - 4]) +\n                s[i + 5] -\n                s[i - 5]) /\n                512;\n    }\n    //Fill the borders\n    for (let i = 0; i < 5; i++) {\n        dk[i] = dk[5];\n        dk[s.length - i - 1] = dk[s.length - 6];\n    }\n    return dk;\n}\n/**\n * RobustBaseLineRegionsDetection.\n * @param s\n * @param options\n * @param options.magnitudeMode\n * @param options.maxDistanceToJoin\n * @param options.factorNoise\n */\nfunction robustBaseLineRegionsDetection(s, options) {\n    const { maxDistanceToJoin, magnitudeMode, factorNoise } = options;\n    const mask = new Uint8Array(s.length);\n    for (let i = 0; i < s.length; i++) {\n        mask[i] = 0;\n    }\n    let change = true;\n    while (change) {\n        const noiseLevel = xNoiseSanPlot(s, { magnitudeMode });\n        const cutOff = factorNoise * noiseLevel.positive;\n        change = false;\n        for (let i = 0; i < s.length; i++) {\n            if (Math.abs(s[i]) > cutOff && !mask[i]) {\n                change = true;\n                mask[i] = 1;\n            }\n        }\n    }\n    // Clean up mask by merging peaks blocks, separated by just a few points(4??).\n    let count = 0;\n    let prev = 0;\n    for (let i = 0; i < s.length; i++) {\n        if (!mask[i]) {\n            count++;\n        }\n        else {\n            if (count < maxDistanceToJoin) {\n                for (let j = 0; j <= count; j++) {\n                    mask[prev + j] = 1;\n                }\n            }\n            while (mask[++i] && i < s.length)\n                ;\n            prev = i;\n            count = 0;\n        }\n    }\n    return mask;\n}\n/**\n * WeightedLinearRegression.\n * @param x\n * @param y\n * @param w\n */\nfunction weightedLinearRegression(x, y, w) {\n    let sxtw = 0;\n    let swx = 0;\n    let sw = 0;\n    let sxtwy = 0;\n    let swy = 0;\n    for (let i = 0; i < x.length; i++) {\n        sxtw += x[i] * x[i] * w[i];\n        swx += x[i] * w[i];\n        sw += w[i];\n        sxtwy += x[i] * w[i] * y[i];\n        swy += w[i] * y[i];\n    }\n    /* Just to know what is the matrix system that we solve\n     let Mx=[[sxtw, swx], [swx, sw]];\n     let My=[[sxtwy], [swy]];\n    */\n    //Mx inverse\n    const detMx = sxtw * sw - swx * swx;\n    const inMx = [\n        [sw / detMx, -swx / detMx],\n        [-swx / detMx, sxtw / detMx],\n    ];\n    return [\n        inMx[0][0] * sxtwy + inMx[0][1] * swy,\n        inMx[1][0] * sxtwy + inMx[1][1] * swy,\n    ];\n}\nfunction toRadians(degree) {\n    return (degree * Math.PI) / 180;\n}\nfunction getNegArea(data) {\n    let area = 0;\n    for (const element of data) {\n        if (element < 0)\n            area -= element;\n    }\n    return area;\n}\n//# sourceMappingURL=reimAutoPhaseCorrection.js.map","import { xRotate } from \"../x/index.js\";\nexport function zeroShift(data, inverse) {\n    const middle = inverse\n        ? Math.ceil(data.length / 2)\n        : Math.floor(data.length / 2);\n    return xRotate(data, middle);\n}\n//# sourceMappingURL=zeroShift.js.map","import { createDoubleArray } from \"../utils/createArray.js\";\n/**\n * This function make a zero filling to re and im part.\n * @param data - object of kind {re:[], im:[]}\n * @param totalLength - final number of points\n * @returns - New DataReIm object with zero-filled,\n * truncated arrays if totalLength is smaller current length or\n * the same input if totalLength is equal that current length\n */\nexport function reimZeroFilling(data, totalLength) {\n    if (!Number.isInteger(totalLength) || totalLength < 0) {\n        throw new RangeError('totalLength must be a non-negative integer');\n    }\n    const { re, im } = data;\n    const length = re.length;\n    if (totalLength === 0 || length === totalLength)\n        return data;\n    if (length > totalLength) {\n        return {\n            re: re.slice(0, totalLength),\n            im: im.slice(0, totalLength),\n        };\n    }\n    const newRE = createDoubleArray(re.constructor, totalLength);\n    const newIM = createDoubleArray(im.constructor, totalLength);\n    for (let i = 0; i < re.length; i++) {\n        newRE[i] = re[i];\n        newIM[i] = im[i];\n    }\n    return {\n        re: newRE,\n        im: newIM,\n    };\n}\n//# sourceMappingURL=reimZeroFilling.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * Verify that `data` is an object of x,y arrays.\n * Throws an error if it's not.\n * @param data\n * @param options\n * @param options.minLength\n */\nexport function xyCheck(data, options = {}) {\n    const { minLength } = options;\n    if (data === null ||\n        typeof data !== 'object' ||\n        // @ts-expect-error Typechecking\n        !isAnyArray(data.x) ||\n        // @ts-expect-error Typechecking\n        !isAnyArray(data.y)) {\n        throw new Error('data must be an object of x and y arrays');\n    }\n    // @ts-expect-error Typechecking\n    if (data.x.length !== data.y.length) {\n        throw new Error('the x and y arrays must have the same length');\n    }\n    // @ts-expect-error Typechecking\n    if (minLength && data.x.length < minLength) {\n        throw new Error(`data.x must have a length of at least ${minLength}`);\n    }\n}\n//# sourceMappingURL=xyCheck.js.map","import { xGetFromToIndex } from \"../x/index.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Finds the max y value in a range and return a {x,y} point\n * @param data - Object that contains property x (an ordered increasing array) and y (an array)\n * @param options - Options\n */\nexport function xyMaxYPoint(data, options = {}) {\n    xyCheck(data, { minLength: 1 });\n    const { x, y } = data;\n    if (x.length === 1) {\n        return { x: x[0], y: y[0], index: 0 };\n    }\n    const { fromIndex, toIndex } = xGetFromToIndex(x, options);\n    let current = { x: x[fromIndex], y: y[fromIndex], index: fromIndex };\n    for (let i = fromIndex; i <= toIndex; i++) {\n        if (y[i] > current.y)\n            current = { x: x[i], y: y[i], index: i };\n    }\n    return current;\n}\n//# sourceMappingURL=xyMaxYPoint.js.map","import { xCumulative, xMaxValue } from \"../x/index.js\";\nimport { xyCheck } from \"./xyCheck.js\";\nimport { xyMaxYPoint } from \"./xyMaxYPoint.js\";\nconst STEPS = [0.25, 0.5, 0.75];\n/**\n * Cumulative Distribution Statistics\n * @param data - array of points {x,y}\n * @returns x0, x25, x50, x75, x100, xMode, xMean (x for maxY)\n */\nexport function xyCumulativeDistributionStatistics(data) {\n    xyCheck(data, { minLength: 1 });\n    const { x, y } = data;\n    const cumulativeSum = xCumulative(y);\n    const maxY = xMaxValue(cumulativeSum);\n    for (let i = 0; i < cumulativeSum.length; i++) {\n        cumulativeSum[i] /= maxY;\n    }\n    const result = {\n        x0: x[0],\n        x25: 0,\n        x50: 0,\n        x75: 0,\n        x100: x.at(-1),\n        xMode: 0,\n        xMean: 0,\n    };\n    // need to find the x values closest to STEPS/100\n    let currentStep = 0;\n    breakPoint: for (let i = 1; i < cumulativeSum.length; i++) {\n        while (STEPS[currentStep] < cumulativeSum[i]) {\n            // Key is computed dynamically with a multiplication. This cannot be type-safe, hence the \"as\" assertion.\n            const key = `x${STEPS[currentStep] * 100}`;\n            result[key] =\n                x[i - 1] +\n                    (x[i] - x[i - 1]) *\n                        ((STEPS[currentStep] - cumulativeSum[i - 1]) /\n                            (cumulativeSum[i] - cumulativeSum[i - 1]));\n            currentStep++;\n            if (currentStep === STEPS.length)\n                break breakPoint;\n        }\n    }\n    result.xMode = xyMaxYPoint(data).x;\n    let sumXY = 0;\n    let sumY = 0;\n    for (let i = 0; i < x.length; i++) {\n        sumXY += x[i] * y[i];\n        sumY += y[i];\n    }\n    result.xMean = sumXY / sumY;\n    return result;\n}\n//# sourceMappingURL=xyCumulativeDistributionStatistics.js.map","/**\n * Normalize an array of zones:\n * - ensure than from < to\n * - merge overlapping zones\n * - deal with exclusions zones\n * - if no zones is specified add one between -Infinity and +Infinity\n * @param zones - array of zones\n * @param options - options\n * @returns array of zones\n */\nexport function zonesNormalize(zones = [], options = {}) {\n    const { exclusions = [] } = options;\n    let { from = Number.NEGATIVE_INFINITY, to = Number.POSITIVE_INFINITY } = options;\n    if (from > to)\n        [from, to] = [to, from];\n    zones = zones.map((zone) => zone.from > zone.to ? { from: zone.to, to: zone.from } : { ...zone });\n    zones.sort((a, b) => {\n        if (a.from !== b.from)\n            return a.from - b.from;\n        return a.to - b.to;\n    });\n    if (zones.length === 0) {\n        zones.push({ from, to });\n    }\n    for (const zone of zones) {\n        if (from > zone.from)\n            zone.from = from;\n        if (to < zone.to)\n            zone.to = to;\n    }\n    zones = zones.filter((zone) => zone.from <= zone.to);\n    if (zones.length === 0)\n        return [];\n    let currentZone = zones[0];\n    const beforeExclusionsZones = [currentZone];\n    for (let i = 1; i < zones.length; i++) {\n        const zone = zones[i];\n        if (zone.from <= currentZone.to) {\n            if (currentZone.to < zone.to) {\n                currentZone.to = zone.to;\n            }\n        }\n        else {\n            currentZone = zone;\n            beforeExclusionsZones.push(currentZone);\n        }\n    }\n    if (exclusions.length === 0)\n        return beforeExclusionsZones;\n    const normalizedExclusions = zonesNormalize(exclusions);\n    let currentExclusionIndex = 0;\n    const results = [];\n    for (let zoneIndex = 0; zoneIndex < beforeExclusionsZones.length; zoneIndex++) {\n        const zone = beforeExclusionsZones[zoneIndex];\n        if (currentExclusionIndex === normalizedExclusions.length) {\n            // we analysed all the exclusion zones\n            results.push(zone);\n            continue;\n        }\n        while (currentExclusionIndex < normalizedExclusions.length &&\n            normalizedExclusions[currentExclusionIndex].to <= zone.from) {\n            currentExclusionIndex++;\n        }\n        if (currentExclusionIndex === normalizedExclusions.length) {\n            // we analysed all the exclusion zones\n            results.push(zone);\n            continue;\n        }\n        if (zone.to < normalizedExclusions[currentExclusionIndex].from) {\n            // no problems, not yet in exclusion\n            results.push(zone);\n            continue;\n        }\n        if (normalizedExclusions[currentExclusionIndex].to >= zone.to) {\n            // could be totally excluded\n            if (normalizedExclusions[currentExclusionIndex].from <= zone.from) {\n                continue;\n            }\n            results.push({\n                from: normalizedExclusions[currentExclusionIndex].to,\n                to: zone.to,\n            });\n        }\n        // we cut in the middle, we need to create more zones, annoying !\n        if (normalizedExclusions[currentExclusionIndex].from > zone.from) {\n            results.push({\n                from: zone.from,\n                to: normalizedExclusions[currentExclusionIndex].from,\n            });\n        }\n        zone.from = normalizedExclusions[currentExclusionIndex].to;\n        zoneIndex--;\n    }\n    return results;\n}\n//# sourceMappingURL=zonesNormalize.js.map","import { zonesNormalize } from \"./zonesNormalize.js\";\n/**\n * Add the number of points per zone to reach a specified total\n * @param zones - array of zones\n * @param numberOfPoints - total number of points to distribute between zones\n * @param options - options\n * @returns array of zones with points\n */\nexport function zonesWithPoints(zones = [], \n/**\n * total number of points to distribute between zones\n * @default 10\n */\nnumberOfPoints = 10, options = {}) {\n    if (zones.length === 0)\n        return [];\n    const normalizedZones = zonesNormalize(zones, options);\n    const zonesWithNumberOfPoints = [];\n    const totalSize = normalizedZones.reduce((previous, current) => {\n        return previous + (current.to - current.from);\n    }, 0);\n    const unitsPerPoint = totalSize / numberOfPoints;\n    let currentTotal = 0;\n    for (let i = 0; i < normalizedZones.length - 1; i++) {\n        const tempZone = normalizedZones[i];\n        const tempZoneNumberOfPoints = Math.min(Math.round((tempZone.to - tempZone.from) / unitsPerPoint), numberOfPoints - currentTotal);\n        zonesWithNumberOfPoints.push({\n            ...tempZone,\n            numberOfPoints: tempZoneNumberOfPoints,\n        });\n        currentTotal += tempZoneNumberOfPoints;\n    }\n    zonesWithNumberOfPoints.push({\n        ...normalizedZones.at(-1),\n        numberOfPoints: numberOfPoints - currentTotal,\n    });\n    return zonesWithNumberOfPoints;\n}\n//# sourceMappingURL=zonesWithPoints.js.map","/**\n * Function that calculates the integral of the line between two\n * x-coordinates, given the slope and intercept of the line.\n * @param x0\n * @param x1\n * @param slope\n * @param intercept\n * @returns integral value.\n */\nexport default function integral(\n/** first coordinate of point */\nx0, \n/** second coordinate of point */\nx1, \n/** slope of the line */\nslope, \n/** intercept of the line on the y axis */\nintercept) {\n    return (0.5 * slope * x1 * x1 +\n        intercept * x1 -\n        (0.5 * slope * x0 * x0 + intercept * x0));\n}\n//# sourceMappingURL=integral.js.map","import integral from \"./integral.js\";\n/**\n * Function that retrieves the getEquallySpacedData with the variant \"smooth\".\n * @param x\n * @param y\n * @param from\n * @param to\n * @param numberOfPoints\n * @returns - Array of y's equally spaced with the variant \"smooth\"\n */\nexport default function equallySpacedSmooth(\n/** x coordinates */\nx, \n/** y coordinates */\ny, \n/** from value */\nfrom, \n/** to value */\nto, \n/** number of points */\nnumberOfPoints) {\n    const xLength = x.length;\n    const step = (to - from) / (numberOfPoints > 1 ? numberOfPoints - 1 : 1);\n    const halfStep = step / 2;\n    // Changed Array to Float64Array\n    const output = new Float64Array(numberOfPoints);\n    const initialOriginalStep = x[1] - x[0];\n    const lastOriginalStep = x[xLength - 1] - x[xLength - 2];\n    // Init main variables\n    let min = from - halfStep;\n    let max = from + halfStep;\n    let previousX = Number.MIN_SAFE_INTEGER;\n    let previousY = 0;\n    let nextX = x[0] - initialOriginalStep;\n    let nextY = 0;\n    let currentValue = 0;\n    let slope = 0;\n    let intercept = 0;\n    let sumAtMin = 0;\n    let sumAtMax = 0;\n    let i = 0; // index of input\n    let j = 0; // index of output\n    let add = 0;\n    main: while (true) {\n        if (previousX >= nextX)\n            throw new Error('x must be a growing series');\n        if (previousX <= min && min <= nextX) {\n            add = integral(0, min - previousX, slope, previousY);\n            sumAtMin = currentValue + add;\n        }\n        while (nextX - max >= 0) {\n            // no overlap with original point, just consume current value\n            add = integral(0, max - previousX, slope, previousY);\n            sumAtMax = currentValue + add;\n            output[j++] = (sumAtMax - sumAtMin) / step;\n            if (j === numberOfPoints) {\n                break main;\n            }\n            min = max;\n            max += step;\n            sumAtMin = sumAtMax;\n        }\n        currentValue += integral(previousX, nextX, slope, intercept);\n        previousX = nextX;\n        previousY = nextY;\n        if (i < xLength) {\n            nextX = x[i];\n            nextY = y[i];\n            i++;\n        }\n        else if (i === xLength) {\n            nextX += lastOriginalStep;\n            nextY = 0;\n        }\n        slope = getSlope(previousX, previousY, nextX, nextY);\n        intercept = -slope * previousX + previousY;\n    }\n    return output;\n}\nfunction getSlope(x0, y0, x1, y1) {\n    return (y1 - y0) / (x1 - x0);\n}\n//# sourceMappingURL=equallySpacedSmooth.js.map","import { createFromToArray } from \"../utils/index.js\";\nimport { zonesNormalize, zonesWithPoints } from \"../zones/index.js\";\nimport equallySpacedSlot from \"./utils/equallySpacedSlot.js\";\nimport equallySpacedSmooth from \"./utils/equallySpacedSmooth.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Function that returns a Number array of equally spaced numberOfPoints\n * containing a representation of intensities of the spectra arguments x\n * and y.\n *\n * The options parameter contains an object in the following form:\n * from: starting point\n * to: last point\n * numberOfPoints: number of points between from and to\n * variant: \"slot\" or \"smooth\" - smooth is the default option\n *\n * The slot variant consist that each point in an array is calculated\n * averaging the existing points between the slot that belongs to the current\n * value. The smooth variant is the same but takes the integral of the range\n * of the slot and divide by the step size between two points in an array.\n *\n * If exclusions zone are present, zones are ignored !\n * @param data - object containing 2 properties x and y\n * @param options - options\n * @returns new object with x / y array with the equally spaced data.\n */\nexport function xyEquallySpaced(data, options = {}) {\n    const { x, y } = data;\n    const xLength = x.length;\n    const { from = x[0], to = x[xLength - 1], variant = 'smooth', numberOfPoints = 100, exclusions = [], zones = [{ from, to }], } = options;\n    if (from > to) {\n        throw new RangeError('from should be larger than to');\n    }\n    xyCheck(data);\n    if (numberOfPoints < 2) {\n        throw new RangeError(\"'numberOfPoints' option must be greater than 1\");\n    }\n    const normalizedZones = zonesNormalize(zones, { from, to, exclusions });\n    const zonesWithPointsRes = zonesWithPoints(normalizedZones, numberOfPoints, {\n        from,\n        to,\n    }).filter((zone) => zone.numberOfPoints);\n    let xResult = [];\n    let yResult = [];\n    for (const zone of zonesWithPointsRes) {\n        if (!zone.numberOfPoints) {\n            zone.numberOfPoints = 0;\n        }\n        const zoneResult = processZone(Array.from(x), Array.from(y), zone.from, zone.to, zone.numberOfPoints, variant);\n        xResult = xResult.concat(zoneResult.x);\n        yResult = yResult.concat(zoneResult.y);\n    }\n    return { x: xResult, y: yResult };\n}\nfunction processZone(x, y, from, to, numberOfPoints, variant) {\n    if (numberOfPoints < 1) {\n        throw new RangeError('the number of points must be at least 1');\n    }\n    const output = variant === 'slot'\n        ? Array.from(equallySpacedSlot(x, y, from, to, numberOfPoints))\n        : Array.from(equallySpacedSmooth(x, y, from, to, numberOfPoints));\n    return {\n        x: Array.from(createFromToArray({\n            from,\n            to,\n            length: numberOfPoints,\n        })),\n        y: output,\n    };\n}\n//# sourceMappingURL=xyEquallySpaced.js.map","/**\n * Function that retrieves the getEquallySpacedData with the variant \"slot\".\n * @param x\n * @param y\n * @param from\n * @param to\n * @param numberOfPoints\n * @returns Array of y's equally spaced with the variant \"slot\"\n */\nexport default function equallySpacedSlot(\n/** x coordinates */\nx, \n/** y coordinates */\ny, \n/** from value */\nfrom, \n/** to value */\nto, \n/** number of points */\nnumberOfPoints) {\n    const xLength = x.length;\n    if (xLength < 2) {\n        return Float64Array.from(x);\n    }\n    const step = (to - from) / (numberOfPoints > 1 ? numberOfPoints - 1 : 1);\n    const halfStep = step / 2;\n    const lastStep = x.at(-1) - x.at(-2);\n    const start = from - halfStep;\n    // Changed Array to Float64Array\n    const output = new Float64Array(numberOfPoints);\n    // Init main variables\n    let min = start;\n    let max = start + step;\n    let previousX = -Number.MAX_VALUE;\n    let previousY = 0;\n    let nextX = x[0];\n    let nextY = y[0];\n    let frontOutsideSpectra = 0;\n    let backOutsideSpectra = true;\n    let currentValue = 0;\n    // for slot algorithm\n    let currentPoints = 0;\n    let i = 1; // index of input\n    let j = 0; // index of output\n    main: while (true) {\n        if (previousX >= nextX)\n            throw new Error('x must be a growing series');\n        while (previousX - max > 0) {\n            // no overlap with original point, just consume current value\n            if (backOutsideSpectra) {\n                currentPoints++;\n                backOutsideSpectra = false;\n            }\n            output[j] = currentPoints <= 0 ? 0 : currentValue / currentPoints;\n            j++;\n            if (j === numberOfPoints) {\n                break main;\n            }\n            min = max;\n            max += step;\n            currentValue = 0;\n            currentPoints = 0;\n        }\n        if (previousX > min) {\n            currentValue += previousY;\n            currentPoints++;\n        }\n        if (previousX === -Number.MAX_VALUE || frontOutsideSpectra > 1) {\n            currentPoints--;\n        }\n        previousX = nextX;\n        previousY = nextY;\n        if (i < xLength) {\n            nextX = x[i];\n            nextY = y[i];\n            i++;\n        }\n        else {\n            nextX += lastStep;\n            nextY = 0;\n            frontOutsideSpectra++;\n        }\n    }\n    return output;\n}\n//# sourceMappingURL=equallySpacedSlot.js.map","import { xyCheck } from \"./xyCheck.js\";\n/**\n * Join x / y values when difference in X is closer than delta.\n * When joining, y values are summed and x values are weighted average\n * @param data - Object that contains property x (an ordered increasing array) and y (an array)\n * @param options - Options\n * @returns - An object with the xyIntegration function\n */\nexport function xyJoinX(data, options = {}) {\n    xyCheck(data);\n    const { delta = 1 } = options;\n    const deltaIsFunction = typeof delta === 'function';\n    const x = Array.from(data.x);\n    const y = Array.from(data.y);\n    if (x.length < 2) {\n        return { x, y };\n    }\n    let position = 0;\n    for (let i = 1; i < x.length; i++) {\n        const difference = x[i] - x[i - 1];\n        const currentDelta = deltaIsFunction ? delta((x[i] + x[i - 1]) / 2) : delta;\n        if (difference <= currentDelta) {\n            // we join\n            if (y[position] !== 0 || y[i] !== 0) {\n                x[position] =\n                    (x[position] * y[position] + x[i] * y[i]) / (y[position] + y[i]);\n                y[position] += y[i];\n            }\n        }\n        else {\n            position++;\n            x[position] = x[i];\n            y[position] = y[i];\n        }\n    }\n    x.length = position + 1;\n    y.length = position + 1;\n    return { x, y };\n}\n//# sourceMappingURL=xyJoinX.js.map","import { xFindClosestIndex } from \"../x/index.js\";\nimport { zonesNormalize } from \"../zones/index.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Reduce the number of points while keeping visually the same noise. Practical to\n * display many spectra as SVG. If you want a similar looking spectrum you should still however\n * generate at least 4x the nbPoints that is being displayed.\n *\n * SHOULD NOT BE USED FOR DATA PROCESSING !!!\n * You should rather use ml-xy-equally-spaced to make further processing\n * @param data - Object that contains property x (an ordered increasing array) and y (an array)\n * @param options - options\n * @returns Object with x and y arrays\n */\nexport function xyReduce(data, options = {}) {\n    xyCheck(data);\n    // todo we should check that the single point is really in the range and the zones\n    if (data.x.length < 2) {\n        return {\n            x: Float64Array.from(data.x),\n            y: Float64Array.from(data.y),\n        };\n    }\n    const { x, y } = data;\n    const { from = x[0], to = x.at(-1), nbPoints = 4001, optimize = false, } = options;\n    let { zones = [] } = options;\n    zones = zonesNormalize(zones, { from, to });\n    if (zones.length === 0)\n        zones = [{ from, to }]; // we take everything\n    const { internalZones, totalPoints } = getInternalZones(zones, x);\n    // we calculate the number of points per zone that we should keep\n    if (totalPoints <= nbPoints) {\n        return notEnoughPoints(x, y, internalZones, totalPoints);\n    }\n    // need to xyReduce number of points\n    const ratio = nbPoints / totalPoints;\n    let currentTotal = 0;\n    for (let i = 0; i < internalZones.length - 1; i++) {\n        const zone = internalZones[i];\n        zone.nbPoints = Math.round(zone.nbPoints * ratio);\n        currentTotal += zone.nbPoints;\n    }\n    internalZones.at(-1).nbPoints = nbPoints - currentTotal;\n    const newX = [];\n    const newY = [];\n    for (const zone of internalZones) {\n        if (!zone.nbPoints)\n            continue;\n        appendFromTo(zone.fromIndex, zone.toIndex, zone.nbPoints);\n    }\n    return { x: newX, y: newY };\n    /**\n     * AppendFromTo.\n     * @param fromIndex - From.\n     * @param  toIndex - To.\n     * @param zoneNbPoints - NbPoints.\n     */\n    function appendFromTo(fromIndex, toIndex, zoneNbPoints) {\n        if (zoneNbPoints === 1) {\n            newX.push(x[Math.round((toIndex - fromIndex) / 2)]);\n            newY.push(y[Math.round((toIndex - fromIndex) / 2)]);\n            return;\n        }\n        if (zoneNbPoints === 2) {\n            newX.push(x[fromIndex], x[toIndex]);\n            newY.push(y[fromIndex], y[toIndex]);\n            return;\n        }\n        newX.push(x[fromIndex]);\n        newY.push(y[fromIndex]);\n        if (zoneNbPoints % 2 === 0) {\n            zoneNbPoints = zoneNbPoints / 2 + 1;\n        }\n        else {\n            zoneNbPoints = (zoneNbPoints - 1) / 2 + 1;\n        }\n        // we will need to make some kind of min / max because there are too many points\n        // we will always keep the first point and the last point\n        const slot = (x[toIndex] - x[fromIndex]) / (zoneNbPoints - 1);\n        let currentX = x[fromIndex] + slot;\n        let first = true;\n        let minY = Number.POSITIVE_INFINITY;\n        let xyMaxY = Number.NEGATIVE_INFINITY;\n        for (let i = fromIndex + 1; i <= toIndex; i++) {\n            if (first) {\n                minY = y[i];\n                xyMaxY = y[i];\n                first = false;\n            }\n            else {\n                if (y[i] < minY)\n                    minY = y[i];\n                if (y[i] > xyMaxY)\n                    xyMaxY = y[i];\n            }\n            if (x[i] >= currentX || i === toIndex) {\n                if (optimize) {\n                    if (minY > newY[newX.length - 1]) {\n                        // we can skip the intermediate value\n                    }\n                    else if (xyMaxY < newY[newX.length - 1]) {\n                        // we can skip the intermediate value\n                        xyMaxY = minY;\n                    }\n                    else {\n                        newX.push(currentX - slot / 2);\n                        newY.push(minY);\n                    }\n                }\n                else {\n                    newX.push(currentX - slot / 2);\n                    newY.push(minY);\n                }\n                newX.push(currentX);\n                newY.push(xyMaxY);\n                currentX += slot;\n                first = true;\n            }\n        }\n    }\n}\nexport function notEnoughPoints(x, y, internalZones, totalPoints) {\n    const newX = new Float64Array(totalPoints);\n    const newY = new Float64Array(totalPoints);\n    let index = 0;\n    for (const zone of internalZones) {\n        for (let i = zone.fromIndex; i < zone.toIndex + 1; i++) {\n            newX[index] = x[i];\n            newY[index] = y[i];\n            index++;\n        }\n    }\n    return {\n        x: newX,\n        y: newY,\n    };\n}\nexport function getInternalZones(zones, x) {\n    // for each zone we should know the first index, the last index and the number of points\n    const internalZones = [];\n    let totalPoints = 0;\n    for (const zone of zones) {\n        let fromIndex = xFindClosestIndex(x, zone.from);\n        let toIndex = xFindClosestIndex(x, zone.to);\n        if (fromIndex > 0 && x[fromIndex] > zone.from) {\n            fromIndex--;\n        }\n        if (toIndex < x.length - 1 && x[toIndex] < zone.to) {\n            toIndex++;\n        }\n        const nbPoints = toIndex - fromIndex + 1;\n        internalZones.push({\n            from: zone.from,\n            to: zone.to,\n            fromIndex,\n            toIndex,\n            nbPoints,\n        });\n        totalPoints += nbPoints;\n    }\n    return { internalZones, totalPoints };\n}\n//# sourceMappingURL=xyReduce.js.map","import { xIsMonotonic } from \"../x/index.js\";\n/**\n * This function performs a quick sort of the x array while transforming the y array to preserve the coordinates.\n * @param data - Object that contains property x (Array) and y (Array)\n */\nexport function xySortX(data) {\n    const { x, y } = data;\n    if (xIsMonotonic(x) && x.length > 1) {\n        const floatX = Float64Array.from(x);\n        const floatY = Float64Array.from(y);\n        if (floatX.at(-1) < floatX[0]) {\n            floatX.reverse();\n            floatY.reverse();\n        }\n        return {\n            x: floatX,\n            y: floatY,\n        };\n    }\n    const xyObject = Array.from(x, (val, index) => ({\n        x: val,\n        y: y[index],\n    }));\n    xyObject.sort((a, b) => a.x - b.x);\n    const response = {\n        x: new Float64Array(x.length),\n        y: new Float64Array(y.length),\n    };\n    for (let i = 0; i < x.length; i++) {\n        response.x[i] = xyObject[i].x;\n        response.y[i] = xyObject[i].y;\n    }\n    return response;\n}\n//# sourceMappingURL=xySortX.js.map","import { xyCheck } from \"./xyCheck.js\";\nimport { xySortX } from \"./xySortX.js\";\n/**\n * Ensure x values are unique\n * @param data - Object that contains property x (Array) and y (Array)\n * @param options - Object containing a property algorithm (can be 'sum' or 'average', the latter being the default value), and a property isSorted (boolean indicating if the x-array is sorted).\n */\nexport function xyUniqueX(data, options = {}) {\n    xyCheck(data);\n    if (data.x.length === 0) {\n        return { x: [], y: [] };\n    }\n    const { algorithm = 'average', isSorted = true } = options;\n    if (!isSorted) {\n        data = xySortX(data);\n    }\n    switch (algorithm) {\n        case 'average':\n            return average(data);\n        case 'sum':\n            return sum(data);\n        default:\n            throw new Error(`unknown algorithm: ${String(algorithm)}`);\n    }\n}\n/**\n * Average.\n * @param data - Input.\n * @returns Result.\n */\nfunction average(data) {\n    const x = [];\n    const y = [];\n    let cumulativeY = data.y[0];\n    let divider = 1;\n    for (let i = 1; i < data.x.length; i++) {\n        if (!(data.x[i] === data.x[i - 1])) {\n            x.push(data.x[i - 1]);\n            y.push(cumulativeY / divider);\n            cumulativeY = 0;\n            divider = 0;\n        }\n        cumulativeY += data.y[i];\n        divider++;\n    }\n    x.push(data.x.at(-1));\n    y.push(cumulativeY / divider);\n    return { x, y };\n}\n/**\n * Sum.\n * @param data - Input.\n * @returns Result.\n */\nfunction sum(data) {\n    const x = [];\n    const y = [];\n    let cumulativeY = data.y[0];\n    for (let i = 1; i < data.x.length; i++) {\n        if (!(data.x[i] === data.x[i - 1])) {\n            x.push(data.x[i - 1]);\n            y.push(cumulativeY);\n            cumulativeY = 0;\n        }\n        cumulativeY += data.y[i];\n    }\n    x.push(data.x.at(-1));\n    y.push(cumulativeY);\n    return { x, y };\n}\n//# sourceMappingURL=xyUniqueX.js.map","/**\n * GetSlots.\n * @param data - data.\n * @param options - Options.\n */\nexport function getSlots(data, options = {}) {\n    const { delta = 1 } = options;\n    const deltaIsFunction = typeof delta === 'function';\n    const possibleXs = Float64Array.from(data.flatMap((spectrum) => spectrum.x));\n    possibleXs.sort();\n    if (possibleXs.length === 0) {\n        throw new Error('can not process empty arrays');\n    }\n    let currentSlot = {\n        from: possibleXs[0],\n        to: possibleXs[0],\n        average: possibleXs[0],\n        sum: possibleXs[0],\n        number: 1,\n    };\n    const slots = [currentSlot];\n    for (let i = 1; i < possibleXs.length; i++) {\n        const currentDelta = deltaIsFunction ? delta(possibleXs[i]) : delta;\n        if (possibleXs[i] - currentSlot.to <= currentDelta) {\n            currentSlot.to = possibleXs[i];\n            currentSlot.number++;\n            currentSlot.sum += possibleXs[i];\n            currentSlot.average = currentSlot.sum / currentSlot.number;\n        }\n        else {\n            currentSlot = {\n                from: possibleXs[i],\n                to: possibleXs[i],\n                average: possibleXs[i],\n                sum: possibleXs[i],\n                number: 1,\n            };\n            slots.push(currentSlot);\n        }\n    }\n    return slots;\n}\n//# sourceMappingURL=getSlots.js.map","/**\n * Merge DataXY\n * We have an array of DataXY and the goal is to merge all the values for which the deltaX is small or equal to delta.\n * X values are weighted average\n * @param data - data\n * @param options - Options\n */\nexport function xyArrayWeightedMerge(data, options = {}) {\n    let { delta = 1 } = options;\n    if (typeof delta === 'number') {\n        const deltaNumber = delta;\n        delta = () => deltaNumber;\n    }\n    data = data.filter((spectrum) => spectrum.x.length > 0);\n    if (data.length === 0)\n        return { x: [], y: [] };\n    const x = [];\n    const y = [];\n    const positions = new Array(data.length).fill(0);\n    const point = { x: 0, y: 0 };\n    nextValue(data, positions, point);\n    const slot = {\n        maxX: point.x + delta(point.x),\n        sumY: point.y,\n        sumXY: point.y * point.x,\n    };\n    while (data.length > 0) {\n        nextValue(data, positions, point);\n        const sameSlot = point.x <= slot.maxX;\n        if (!sameSlot) {\n            if (slot.sumY > 0) {\n                x.push(slot.sumXY / slot.sumY);\n                y.push(slot.sumY);\n            }\n            slot.sumY = 0;\n            slot.sumXY = 0;\n        }\n        slot.sumY += point.y;\n        slot.sumXY += point.x * point.y;\n        slot.maxX = point.x + delta(point.x);\n        if (data.length === 0 && slot.sumY > 0) {\n            x.push(slot.sumXY / slot.sumY);\n            y.push(slot.sumY);\n        }\n    }\n    return { x, y };\n}\n/**\n * NextValue.\n * @param data - data.\n * @param positions - Positions array.\n * @param point - Point.\n */\nfunction nextValue(data, positions, point) {\n    let minIndex = 0;\n    let minX = data[0].x[positions[0]];\n    for (let i = 1; i < data.length; i++) {\n        const currentX = data[i].x[positions[i]];\n        if (currentX < minX) {\n            minX = currentX;\n            minIndex = i;\n        }\n    }\n    point.x = minX;\n    point.y = data[minIndex].y[positions[minIndex]];\n    positions[minIndex]++;\n    if (positions[minIndex] === data[minIndex].x.length) {\n        positions.splice(minIndex, 1);\n        data.splice(minIndex, 1);\n    }\n}\n//# sourceMappingURL=xyArrayWeightedMerge.js.map","/**\n * Throws an error if it's not an array of x,y objects.\n * Only checks the first element.\n * @param points - List of points.\n * @param options - Additional checks.\n */\nexport function xyObjectCheck(points, options = {}) {\n    const { minLength = 0 } = options;\n    if (!Array.isArray(points)) {\n        throw new Error('points must be an array of {x,y} objects');\n    }\n    if (points.length > 0 &&\n        (typeof points[0].x !== 'number' || typeof points[0].y !== 'number')) {\n        throw new Error('points must be an array of {x,y} objects');\n    }\n    if (minLength && points.length < minLength) {\n        throw new Error(`points must have a length of at least ${minLength}`);\n    }\n}\n//# sourceMappingURL=xyObjectCheck.js.map","import { xyObjectCheck } from \"./xyObjectCheck.js\";\n/**\n * Finds the max x value and return a {x,y,index} point\n * @param points - Object that contains property x (an ordered increasing array) and y (an array)\n */\nexport function xyObjectMaxXPoint(points = []) {\n    xyObjectCheck(points);\n    if (points.length === 0)\n        return { x: 0, y: 0 };\n    let current = {\n        x: points[0].x,\n        y: points[0].y,\n        index: 0,\n    };\n    for (let i = 1; i < points.length; i++) {\n        if (points[i].x > current.x) {\n            current = {\n                x: points[i].x,\n                y: points[i].y,\n                index: i,\n            };\n        }\n    }\n    return current;\n}\n//# sourceMappingURL=xyObjectMaxXPoint.js.map","import { xyObjectCheck } from \"./xyObjectCheck.js\";\n/**\n * Finds the min x value and return a {x,y,index} point\n * @param points - Object that contains property x (an ordered increasing array) and y (an array)\n */\nexport function xyObjectMinXPoint(points = []) {\n    xyObjectCheck(points);\n    if (points.length === 0)\n        return { x: 0, y: 0 };\n    let current = {\n        x: points[0].x,\n        y: points[0].y,\n        index: 0,\n    };\n    for (let i = 1; i < points.length; i++) {\n        if (points[i].x < current.x) {\n            current = {\n                x: points[i].x,\n                y: points[i].y,\n                index: i,\n            };\n        }\n    }\n    return current;\n}\n//# sourceMappingURL=xyObjectMinXPoint.js.map","/**\n * Create an array with numbers starting from \"from\" with step \"step\" of length \"length\".\n * @param options - options\n * @returns - array of distributed numbers with step \"step\" from \"from\"\n */\nexport function createStepArray(options = {}) {\n    const { from = 0, step = 1, length = 1000 } = options;\n    const array = new Float64Array(length);\n    let index = 0;\n    while (index < length) {\n        array[index] = from + step * index;\n        index++;\n    }\n    return array;\n}\n//# sourceMappingURL=createStepArray.js.map","/**\n * Generate all combinations of choosing k items from n items.\n * @param n - Total number of items.\n * @param k - Number of items to choose.\n * @returns Array of combinations, where each combination is an array of indices.\n */\nexport function getCombinations(n, k) {\n    if (k === 0)\n        return [[]];\n    if (k > n)\n        return [];\n    const results = [];\n    const current = [];\n    function backtrack(start) {\n        if (current.length === k) {\n            results.push([...current]);\n            return;\n        }\n        for (let i = start; i < n; i++) {\n            current.push(i);\n            backtrack(i + 1);\n            current.pop();\n        }\n    }\n    backtrack(0);\n    return results;\n}\n//# sourceMappingURL=getCombinations.js.map","/**\n * Generate all combinations of choosing k items from n items as an iterator.\n * Useful for large combination sets to avoid storing all combinations in memory.\n * @param n - Total number of items.\n * @param k - Number of items to choose.\n * @yields Each combination as an array of indices.\n */\nexport function* getCombinationsIterator(n, k) {\n    if (k === 0) {\n        yield [];\n        return;\n    }\n    if (k > n)\n        return;\n    const current = [];\n    function* backtrack(start) {\n        if (current.length === k) {\n            yield [...current];\n            return;\n        }\n        for (let i = start; i < n; i++) {\n            current.push(i);\n            yield* backtrack(i + 1);\n            current.pop();\n        }\n    }\n    yield* backtrack(0);\n}\n//# sourceMappingURL=getCombinationsIterator.js.map","export function getRescaler(options = {}) {\n    const { targetMin = 0, targetMax = 1, clamp = true, algorithmOptions = {}, algorithm = 'linear', } = options;\n    let { originalMin = 0, originalMax = 1 } = options;\n    const convert = getDataConverter(algorithm, algorithmOptions);\n    originalMin = convert(originalMin);\n    originalMax = convert(originalMax);\n    const originalRange = originalMax - originalMin;\n    const targetRange = targetMax - targetMin;\n    return function rescaler(value) {\n        value = convert(value);\n        value = checkRange(value, originalMin, originalMax, clamp);\n        const valueScaled = (value - originalMin) / originalRange;\n        return targetMin + valueScaled * targetRange;\n    };\n}\nfunction getDataConverter(kind = 'linear', options = {}) {\n    return (value) => {\n        switch (kind) {\n            case 'linear':\n                return value;\n            case 'logarithmic':\n                return Math.log10(value);\n            case 'power':\n                return value ** (options.power || 2);\n            default:\n                throw new Error(`Unknown kind ${String(kind)}`);\n        }\n    };\n}\nfunction checkRange(value, min, max, clamp = true) {\n    if (value < min) {\n        if (clamp)\n            return min;\n        throw new RangeError(`Value ${value} is out of range [${min}, ${max}]`);\n    }\n    if (value > max) {\n        if (clamp)\n            return max;\n        throw new RangeError(`Value ${value} is out of range [${min}, ${max}]`);\n    }\n    return value;\n}\n//# sourceMappingURL=getRescaler.js.map","import { xMedian } from \"../x/index.js\";\n/**\n * Returns the median of the absolute matrix.\n * @param matrix\n */\nexport function matrixAbsoluteMedian(matrix) {\n    const nbColumns = matrix[0].length;\n    const flatten = new Float64Array(matrix.length * nbColumns);\n    for (let row = 0; row < matrix.length; row++) {\n        const currentRow = row * nbColumns;\n        for (let column = 0; column < nbColumns; column++) {\n            const value = matrix[row][column];\n            flatten[currentRow + column] = Math.abs(value);\n        }\n    }\n    return xMedian(flatten);\n}\n//# sourceMappingURL=matrixAbsoluteMedian.js.map","import { xMaxValue } from \"../x/index.js\";\nimport { matrixCreateEmpty } from \"./matrixCreateEmpty.js\";\n/**\n * Numerically encodes the strings in the matrix with an encoding dictionary.\n * @param matrixInitial - Original matrix before encoding.\n * @param dictionary - Dictionary against which to do the encoding.\n * @returns - Encoded matrix.\n */\nexport function matrixApplyNumericalEncoding(matrixInitial, dictionary) {\n    const matrix = matrixCreateEmpty({\n        nbRows: matrixInitial.length,\n        nbColumns: matrixInitial[0].length,\n        ArrayConstructor: Array,\n    });\n    const arrayOfValues = [];\n    for (const key in dictionary) {\n        arrayOfValues.push(dictionary[key]);\n    }\n    let k = xMaxValue(arrayOfValues);\n    for (const row of matrix) {\n        for (let j = 0; j < matrix[0].length; j++) {\n            if (typeof row[j] === 'string') {\n                if (row[j] in dictionary) {\n                    row[j] = dictionary[row[j]];\n                }\n                else {\n                    k++;\n                    dictionary[row[j]] = k;\n                    row[j] = k;\n                }\n            }\n        }\n    }\n    return matrix;\n}\n//# sourceMappingURL=matrixApplyNumericalEncoding.js.map","import { xCorrelation } from \"../x/index.js\";\nexport function matrixAutoCorrelation(matrix, index = 0) {\n    const nbRows = matrix.length;\n    const nbColumns = matrix[0].length;\n    if (nbRows < 2) {\n        throw new Error('can not calculate info if matrix contains less than 2 rows');\n    }\n    const targetArray = new Float64Array(nbRows);\n    const sourceArray = new Float64Array(nbRows);\n    const result = new Float64Array(nbColumns);\n    for (let j = 0; j < nbRows; j++) {\n        targetArray[j] = matrix[j][index];\n    }\n    for (let i = 0; i < nbColumns; i++) {\n        for (let j = 0; j < nbRows; j++) {\n            sourceArray[j] = matrix[j][i];\n        }\n        result[i] = xCorrelation(targetArray, sourceArray);\n    }\n    return result;\n}\n//# sourceMappingURL=matrixAutoCorrelation.js.map","export function matrixBoxPlot(matrix) {\n    const nbRows = matrix.length;\n    const nbColumns = matrix[0].length;\n    if (nbRows < 5) {\n        throw new Error('can not calculate info if matrix contains less than 5 rows');\n    }\n    const info = {\n        q1: new Float64Array(nbColumns),\n        median: new Float64Array(nbColumns),\n        q3: new Float64Array(nbColumns),\n        min: Float64Array.from(matrix[0]),\n        max: Float64Array.from(matrix.at(-1)),\n    };\n    const columnArray = new Float64Array(matrix.length);\n    for (let column = 0; column < nbColumns; column++) {\n        for (let row = 0; row < nbRows; row++) {\n            columnArray[row] = matrix[row][column];\n        }\n        let q1max = 0;\n        let q3min = 0;\n        if (nbRows % 2 === 1) {\n            // odd\n            const middle = (nbRows - 1) / 2;\n            info.median[column] = columnArray[middle];\n            q1max = middle - 1;\n            q3min = middle + 1;\n        }\n        else {\n            // even\n            q3min = nbRows / 2;\n            q1max = q3min - 1;\n            info.median[column] = (columnArray[q1max] + columnArray[q3min]) / 2;\n        }\n        if (q1max % 2 === 0) {\n            info.q1[column] = columnArray[q1max / 2];\n            info.q3[column] = columnArray[(nbRows + q3min - 1) / 2];\n        }\n        else {\n            info.q1[column] =\n                (columnArray[(q1max + 1) / 2] + columnArray[(q1max - 1) / 2]) / 2;\n            const middleOver = (columnArray.length + q3min) / 2;\n            info.q3[column] =\n                (columnArray[middleOver] + columnArray[middleOver - 1]) / 2;\n        }\n    }\n    return info;\n}\n//# sourceMappingURL=matrixBoxPlot.js.map","import { matrixCreateEmpty } from \"./matrixCreateEmpty.js\";\n/**\n * Center mean of matrix columns.\n * @param matrix - matrix [rows][cols]\n */\nexport function matrixCenterZMean(matrix) {\n    const nbColumns = matrix[0].length;\n    const nbRows = matrix.length;\n    const newMatrix = matrixCreateEmpty({ nbColumns, nbRows });\n    for (let column = 0; column < nbColumns; column++) {\n        let mean = 0;\n        for (let row = 0; row < nbRows; row++) {\n            mean += matrix[row][column];\n        }\n        mean /= nbRows;\n        for (let row = 0; row < nbRows; row++) {\n            newMatrix[row][column] = matrix[row][column] - mean;\n        }\n    }\n    return newMatrix;\n}\n//# sourceMappingURL=matrixCenterZMean.js.map","import { Matrix } from 'ml-matrix';\nimport { xCorrelation } from \"../x/index.js\";\n/**\n * Calculates a correlation matrix based on the columns of the initial matrix.\n * @param A - matrix [rows][cols]\n */\nexport function matrixColumnsCorrelation(A) {\n    const B = new Matrix(A).transpose();\n    const result = [];\n    for (let i = 0; i < B.rows; i++) {\n        result.push(new Float64Array(B.rows));\n    }\n    for (let i = 0; i < B.rows; i++) {\n        for (let j = i; j < B.rows; j++) {\n            const correlation = xCorrelation(B.getRow(i), B.getRow(j));\n            result[i][j] = correlation;\n            result[j][i] = correlation;\n        }\n    }\n    return result;\n}\n//# sourceMappingURL=matrixColumnsCorrelation.js.map","import { matrixCheckRanges } from \"./matrixCheckRanges.js\";\n/**\n * Get a subMatrix from matrix, the function checks if the subMatrix\n * lies within the dimensions of the matrix.\n * @param matrix - The original matrix from which the subMatrix will be extracted.\n * @param options - Options to define the subMatrix boundaries and duplication behavior.\n * @returns The subMatrix extracted from the original matrix.\n */\nexport function matrixGetSubMatrix(matrix, options) {\n    const { startRow, endRow, startColumn, endColumn, duplicate = true, } = options;\n    matrixCheckRanges(matrix, { startColumn, startRow, endColumn, endRow });\n    const nbRows = endRow - startRow + 1;\n    const subMatrix = [];\n    if (duplicate) {\n        for (let i = 0; i < nbRows; i++) {\n            subMatrix.push(matrix[startRow + i].slice(startColumn, endColumn + 1));\n        }\n    }\n    else {\n        for (let i = 0; i < nbRows; i++) {\n            subMatrix.push(matrix[startRow + i].subarray(startColumn, endColumn + 1));\n        }\n    }\n    return subMatrix;\n}\n//# sourceMappingURL=matrixGetSubMatrix.js.map","import FFT from 'fft.js';\nimport { isPowerOfTwo } from \"../utils/index.js\";\nimport { matrixCreateEmpty } from \"./matrixCreateEmpty.js\";\n/**\n * Apply the Hilbert transform to each row of a real-valued matrix, reusing a\n * single FFT instance for all rows to avoid repeated instantiation overhead.\n * All rows must have the same length, which must be a power of two.\n * @param rows - array of real-valued Float64Array rows\n * @param options - options\n * @returns array of Hilbert-transformed Float64Array rows\n * @see DOI: 10.1109/TAU.1970.1162139 \"Discrete Hilbert transform\"\n */\nexport function matrixHilbertTransform(rows, options = {}) {\n    if (rows.length === 0)\n        return [];\n    const size = rows[0].length;\n    if (!isPowerOfTwo(size)) {\n        throw new RangeError(`Row length must be a power of two. Got ${size}.`);\n    }\n    for (let j = 1; j < rows.length; j++) {\n        if (rows[j].length !== size) {\n            throw new RangeError(`All rows must have the same length. Expected ${size} but row ${j} has length ${rows[j].length}.`);\n        }\n    }\n    // Single FFT instance reused across all rows\n    const fft = new FFT(size);\n    // Multiplier computed once — identical for every row of the same length\n    const half = size >> 1;\n    // Shared working buffers reused across all rows\n    const fftResult = new Float64Array(size * 2);\n    const hilbertSignal = new Float64Array(size * 2);\n    const { output = matrixCreateEmpty({\n        nbRows: rows.length,\n        nbColumns: size,\n    }), } = options;\n    for (let j = 0; j < rows.length; j++) {\n        const row = rows[j];\n        fft.realTransform(fftResult, row);\n        fft.completeSpectrum(fftResult);\n        const idx = half << 1;\n        fftResult[idx] = 0;\n        fftResult[idx + 1] = 0;\n        // Negate negative frequencies\n        for (let c = (half + 1) << 1; c < fftResult.length; c += 2) {\n            fftResult[c] = -fftResult[c];\n            fftResult[c + 1] = -fftResult[c + 1];\n        }\n        fft.inverseTransform(hilbertSignal, fftResult);\n        const result = output[j];\n        for (let i = 0; i < size; i++) {\n            result[i] = hilbertSignal[i * 2 + 1];\n        }\n    }\n    return output;\n}\n//# sourceMappingURL=matrixHilbertTransform.js.map","import { xHistogram } from \"../x/index.js\";\nimport { matrixMinMaxAbsoluteZ } from \"./matrixMinMaxAbsoluteZ.js\";\nimport { matrixMinMaxZ } from \"./matrixMinMaxZ.js\";\n/**\n * Calculates a histogram of defined number of slots.\n * @param matrix - matrix [rows][cols].\n * @param options - options\n * @returns - Result of the histogram.\n */\nexport function matrixHistogram(matrix, options = {}) {\n    let { min, max } = options;\n    const { absolute, logBaseX, logBaseY, histogram, nbSlots, centerX } = options;\n    if (matrix.length === 0 || matrix[0].length === 0) {\n        throw new Error('matrix must have at least one column and one row');\n    }\n    if (min === undefined || max === undefined) {\n        const minMax = absolute\n            ? matrixMinMaxAbsoluteZ(matrix)\n            : matrixMinMaxZ(matrix);\n        if (min === undefined) {\n            min =\n                logBaseX && minMax.min\n                    ? Math.log(minMax.min) / Math.log(logBaseX)\n                    : minMax.min;\n        }\n        if (max === undefined) {\n            max =\n                logBaseX && minMax.max\n                    ? Math.log(minMax.max) / Math.log(logBaseX)\n                    : minMax.max;\n        }\n    }\n    const xHistogramOptions = {\n        histogram,\n        nbSlots,\n        centerX,\n        absolute,\n        logBaseX,\n        // Skip logBaseY as it's handled below.\n        min,\n        max,\n    };\n    const finalHistogram = xHistogram(matrix[0], xHistogramOptions);\n    xHistogramOptions.histogram = finalHistogram;\n    const nbRows = matrix.length;\n    for (let row = 1; row < nbRows; row++) {\n        xHistogram(matrix[row], xHistogramOptions);\n    }\n    const y = finalHistogram.y;\n    if (logBaseY) {\n        const logOfBase = Math.log10(logBaseY);\n        for (let i = 0; i < y.length; i++) {\n            y[i] = Math.log10(y[i] + 1) / logOfBase;\n        }\n    }\n    return finalHistogram;\n}\n//# sourceMappingURL=matrixHistogram.js.map","import { xMedian } from \"../x/index.js\";\nimport { matrixToArray } from \"./matrixToArray.js\";\n/**\n * Returns the median of the matrix.\n * @param matrix\n */\nexport function matrixMedian(matrix) {\n    return xMedian(matrixToArray(matrix));\n}\n//# sourceMappingURL=matrixMedian.js.map","import { xNoiseStandardDeviation } from \"../x/index.js\";\nimport { matrixToArray } from \"./matrixToArray.js\";\n/**\n * Determine noise level using MAD https://en.wikipedia.org/wiki/Median_absolute_deviation\n * Constant to convert mad to sd calculated using https://www.wolframalpha.com/input?i=sqrt%282%29+inverse+erf%280.5%29\n * This assumes a gaussian distribution of the noise.\n * @param matrix\n * @returns Noise level corresponding to one standard deviation.\n */\nexport function matrixNoiseStandardDeviation(matrix) {\n    return xNoiseStandardDeviation(matrixToArray(matrix));\n}\n//# sourceMappingURL=matrixNoiseStandardDeviation.js.map","import { matrixClone } from \"./matrixClone.js\";\n/**\n * Numerically decodes the matrix using the dictionary.\n * @param matrixInitial\n * @param dictionary - dictionary against which to do the encoding\n * @returns - decoded matrix\n */\nexport function matrixNumericalDecoding(matrixInitial, dictionary) {\n    const matrix = matrixClone(matrixInitial);\n    const invertedDictionary = swap(dictionary);\n    for (const row of matrix) {\n        for (let j = 0; j < matrix[0].length; j++) {\n            const value = row[j];\n            if (typeof value === 'number' && value in invertedDictionary) {\n                row[j] = invertedDictionary[value];\n            }\n        }\n    }\n    return matrix;\n}\nfunction swap(dictionary) {\n    const ret = {};\n    for (const key in dictionary) {\n        ret[dictionary[key]] = key;\n    }\n    return ret;\n}\n//# sourceMappingURL=matrixNumericalDecoding.js.map","import { matrixClone } from \"./matrixClone.js\";\n/**\n * Numerically encodes the strings in the matrix and returns an encoding dictionary which can be used to encode other matrices\n * @param matrixInitial - original matrix before encoding\n * @returns - dictionary from string to number\n */\nexport function matrixNumericalEncoding(matrixInitial) {\n    const matrix = matrixClone(matrixInitial);\n    const nRows = matrix.length;\n    const nColumns = matrix[0].length;\n    let k = 0;\n    for (let i = 0; i < nRows; i++) {\n        for (let j = 0; j < nColumns; j++) {\n            const value = matrix[i][j];\n            if (typeof value === 'number' && value > k) {\n                k = value;\n            }\n        }\n    }\n    const dictCategoricalToNumerical = {};\n    for (let i = 0; i < nRows; i++) {\n        for (let j = 0; j < nColumns; j++) {\n            const value = matrix[i][j];\n            if (typeof value === 'string') {\n                if (value in dictCategoricalToNumerical) {\n                    matrix[i][j] = dictCategoricalToNumerical[value];\n                }\n                else {\n                    k++;\n                    dictCategoricalToNumerical[value] = k;\n                    matrix[i][j] = k;\n                }\n            }\n        }\n    }\n    return { matrix: matrix, dictCategoricalToNumerical };\n}\n//# sourceMappingURL=matrixNumericalEncoding.js.map","import { Matrix } from 'ml-matrix';\nimport { xMedian } from \"../x/index.js\";\n/**\n * Performs a Probabilistic quotient normalization (PQN) over the dataset to account dilution based in median spectrum.\n * Dieterle, F., Ross, A., Schlotterbeck, G., & Senn, H. (2006). Probabilistic quotient normalization as robust method to account for dilution of complex biological mixtures. Application in 1H NMR metabonomics. Analytical chemistry, 78(13), 4281-4290.\n * DOI: 10.1021/ac051632c\n * @param matrix - matrix [rows][cols].\n * @param options - options\n * @returns - {data: Normalized dataset, medianOfQuotients: The median of quotients of each variables}\n */\nexport function matrixPQN(matrix, options = {}) {\n    const { max = 100 } = options;\n    const matrixB = new Matrix(matrix);\n    for (let i = 0; i < matrixB.rows; i++) {\n        const normalizationFactor = matrixB.getRowVector(i).norm('frobenius') / max;\n        const row = matrixB.getRowVector(i).div(normalizationFactor);\n        matrixB.setRow(i, row);\n    }\n    const referenceSpectrum = [];\n    for (let i = 0; i < matrixB.columns; i++) {\n        const currentVariable = matrixB.getColumn(i);\n        referenceSpectrum.push(xMedian(currentVariable));\n    }\n    const medianOfQuotients = [];\n    for (let i = 0; i < matrixB.columns; i++) {\n        const quotients = matrixB.getColumnVector(i).div(referenceSpectrum[i]);\n        medianOfQuotients.push(xMedian(quotients.getColumn(0)));\n    }\n    for (let i = 0; i < matrixB.rows; i++) {\n        matrixB.mulRow(i, 1 / medianOfQuotients[i]);\n    }\n    return {\n        data: matrixB.to2DArray(),\n        medianOfQuotients,\n    };\n}\n//# sourceMappingURL=matrixPQN.js.map","import { matrixCheckRanges } from \"./matrixCheckRanges.js\";\n/**\n * Set in-place a subMatrix to matrix, the function check if the subMatrix\n * lies into the dimensions of matrix.\n * @param matrix - matrix that will receive the new element values.\n * @param subMatrix - matrix with equal or less size than matrix.\n * @param startRow - row index in matrix for the first row in subMatrix.\n * @param startColumn - column index in matrix for the first column in subMatrix.\n * @returns The modified `matrix`.\n */\nexport function matrixSetSubMatrix(matrix, subMatrix, startRow, startColumn) {\n    const endRow = startRow + subMatrix.length - 1;\n    const endColumn = startColumn + subMatrix[0].length - 1;\n    matrixCheckRanges(matrix, { startRow, endRow, startColumn, endColumn });\n    for (let i = 0; i < subMatrix.length; i++) {\n        for (let j = 0; j < subMatrix[0].length; j++) {\n            matrix[startRow + i][startColumn + j] = subMatrix[i][j];\n        }\n    }\n    return matrix;\n}\n//# sourceMappingURL=matrixSetSubMatrix.js.map","import { matrixCheck } from \"./matrixCheck.js\";\nimport { matrixCreateEmpty } from \"./matrixCreateEmpty.js\";\nexport function matrixTranspose(matrix, options = {}) {\n    matrixCheck(matrix);\n    const { ArrayConstructor } = options;\n    const nbRows = matrix.length;\n    const nbColumns = matrix[0].length;\n    // Create new matrix with swapped dimensions\n    const result = matrixCreateEmpty({\n        nbColumns: nbRows,\n        nbRows: nbColumns,\n        ArrayConstructor,\n    });\n    for (let i = 0; i < nbRows; i++) {\n        for (let j = 0; j < nbColumns; j++) {\n            result[j][i] = matrix[i][j];\n        }\n    }\n    return result;\n}\n//# sourceMappingURL=matrixTranspose.js.map","import { matrixCreateEmpty } from \"./matrixCreateEmpty.js\";\nimport { matrixMaxAbsoluteZ } from \"./matrixMaxAbsoluteZ.js\";\n/**\n * Rescale a matrix around 0 taking into account the absolute max value.\n * @param matrix - matrix [rows][cols].\n * @param options - Options.\n */\nexport function matrixZPivotRescale(matrix, options = {}) {\n    const { max = 1, ArrayConstructor } = options;\n    const nbColumns = matrix[0].length;\n    const nbRows = matrix.length;\n    const newMatrix = matrixCreateEmpty({ nbColumns, nbRows, ArrayConstructor });\n    const currentMax = matrixMaxAbsoluteZ(matrix);\n    for (let column = 0; column < nbColumns; column++) {\n        const factor = max / currentMax;\n        for (let row = 0; row < nbRows; row++) {\n            newMatrix[row][column] = matrix[row][column] * factor;\n        }\n    }\n    return newMatrix;\n}\n//# sourceMappingURL=matrixZPivotRescale.js.map","import { matrixCreateEmpty } from \"./matrixCreateEmpty.js\";\nimport { matrixMinMaxZ } from \"./matrixMinMaxZ.js\";\n/**\n * Rescale a matrix between min and max values.\n * @param matrix - matrix [rows][cols].\n * @param options - Options.\n */\nexport function matrixZRescale(matrix, options = {}) {\n    const { min = 0, max = 1, ArrayConstructor } = options;\n    const nbColumns = matrix[0].length;\n    const nbRows = matrix.length;\n    const newMatrix = matrixCreateEmpty({ nbColumns, nbRows, ArrayConstructor });\n    const { min: currentMin, max: currentMax } = matrixMinMaxZ(matrix);\n    const factor = (max - min) / (currentMax - currentMin);\n    for (let column = 0; column < nbColumns; column++) {\n        for (let row = 0; row < nbRows; row++) {\n            newMatrix[row][column] =\n                (matrix[row][column] - currentMin) * factor + min;\n        }\n    }\n    return newMatrix;\n}\n//# sourceMappingURL=matrixZRescale.js.map","import { matrixCreateEmpty } from \"./matrixCreateEmpty.js\";\n/**\n * Rescale the matrix per column for which we get the min and max values.\n * @param matrix - matrix [rows][cols].\n * @param options - Options.\n */\nexport function matrixZRescalePerColumn(matrix, options = {}) {\n    const { min = 0, max = 1 } = options;\n    const nbColumns = matrix[0].length;\n    const nbRows = matrix.length;\n    const newMatrix = matrixCreateEmpty({ nbColumns, nbRows });\n    for (let column = 0; column < nbColumns; column++) {\n        let currentMin = matrix[0][column];\n        let currentMax = matrix[0][column];\n        for (let row = 1; row < nbRows; row++) {\n            if (matrix[row][column] < currentMin)\n                currentMin = matrix[row][column];\n            if (matrix[row][column] > currentMax)\n                currentMax = matrix[row][column];\n        }\n        const factor = (max - min) / (currentMax - currentMin);\n        for (let row = 0; row < nbRows; row++) {\n            newMatrix[row][column] =\n                (matrix[row][column] - currentMin) * factor + min;\n        }\n    }\n    return newMatrix;\n}\n//# sourceMappingURL=matrixZRescalePerColumn.js.map","import FFT from 'fft.js';\nimport { zeroShift } from \"../reim/zeroShift.js\";\n/**\n * Apply FFT to an array of complex spectra, reusing a single FFT instance for\n * all elements to avoid repeated instantiation overhead.\n * All elements must have the same length.\n * @param data - array of complex spectra\n * @param options - options\n * @returns array of transformed complex spectra\n */\nexport function reimArrayFFT(data, options = {}) {\n    if (data.length === 0)\n        return [];\n    const { inverse = false, applyZeroShift = false, inPlace = false } = options;\n    const size = data[0].re.length;\n    const csize = size << 1;\n    for (let j = 1; j < data.length; j++) {\n        if (data[j].re.length !== size || data[j].im.length !== size) {\n            throw new RangeError(`All elements must have the same length. Expected ${size} but element ${j} has length ${data[j].re.length}.`);\n        }\n    }\n    // Single FFT instance and working buffers reused across all spectra\n    const fft = new FFT(size);\n    const complexArray = new Float64Array(csize);\n    const output = new Float64Array(csize);\n    const results = new Array(data.length);\n    for (let j = 0; j < data.length; j++) {\n        const { re, im } = data[j];\n        for (let i = 0; i < csize; i += 2) {\n            complexArray[i] = re[i >>> 1];\n            complexArray[i + 1] = im[i >>> 1];\n        }\n        const outRe = inPlace ? re : new Float64Array(size);\n        const outIm = inPlace ? im : new Float64Array(size);\n        if (inverse) {\n            const input = applyZeroShift\n                ? zeroShift(complexArray, true)\n                : complexArray;\n            fft.inverseTransform(output, input);\n            for (let i = 0; i < csize; i += 2) {\n                outRe[i >>> 1] = output[i];\n                outIm[i >>> 1] = output[i + 1];\n            }\n        }\n        else {\n            fft.transform(output, complexArray);\n            const source = applyZeroShift ? zeroShift(output) : output;\n            for (let i = 0; i < csize; i += 2) {\n                outRe[i >>> 1] = source[i];\n                outIm[i >>> 1] = source[i + 1];\n            }\n        }\n        results[j] = { re: outRe, im: outIm };\n    }\n    return results;\n}\n//# sourceMappingURL=reimArrayFFT.js.map","import FFT from 'fft.js';\nimport { zeroShift } from \"./zeroShift.js\";\n/**\n * ReimFFT.\n * @param data - complex spectrum\n * @param options - options.\n * @returns FFT of complex spectrum.\n */\nexport function reimFFT(data, options = {}) {\n    const { inverse = false, applyZeroShift = false, inPlace = false } = options;\n    const { re, im } = data;\n    const size = re.length;\n    const csize = size << 1;\n    let complexArray = new Float64Array(csize);\n    for (let i = 0; i < csize; i += 2) {\n        complexArray[i] = re[i >>> 1];\n        complexArray[i + 1] = im[i >>> 1];\n    }\n    const fft = new FFT(size);\n    let output = new Float64Array(csize);\n    if (inverse) {\n        if (applyZeroShift)\n            complexArray = zeroShift(complexArray, true);\n        fft.inverseTransform(output, complexArray);\n    }\n    else {\n        fft.transform(output, complexArray);\n        if (applyZeroShift)\n            output = zeroShift(output);\n    }\n    if (inPlace) {\n        for (let i = 0; i < csize; i += 2) {\n            re[i >>> 1] = output[i];\n            im[i >>> 1] = output[i + 1];\n        }\n        return data;\n    }\n    const newRe = new Float64Array(size);\n    const newIm = new Float64Array(size);\n    for (let i = 0; i < csize; i += 2) {\n        newRe[i >>> 1] = output[i];\n        newIm[i >>> 1] = output[i + 1];\n    }\n    return { re: newRe, im: newIm };\n}\n//# sourceMappingURL=reimFFT.js.map","import FFT from 'fft.js';\nimport { zeroShift } from \"../reim/zeroShift.js\";\n/**\n * Apply FFT to each row of a complex matrix, reusing a single FFT instance for\n * all rows to avoid repeated instantiation overhead.\n * All rows must have the same length.\n * @param data - complex matrix with re and im arrays of Float64Array rows\n * @param options - options\n * @returns complex matrix with transformed rows\n */\nexport function reimMatrixFFT(data, options = {}) {\n    const { re, im } = data;\n    const numRows = re.length;\n    if (numRows === 0)\n        return { re: [], im: [] };\n    const { inverse = false, applyZeroShift = false, inPlace = false } = options;\n    const size = re[0].length;\n    const csize = size << 1;\n    for (let j = 0; j < numRows; j++) {\n        if (re[j].length !== size || im[j].length !== size) {\n            throw new RangeError(`All rows must have the same length. Expected ${size} but row ${j} has length ${re[j].length}.`);\n        }\n    }\n    // Single FFT instance and working buffers reused across all rows\n    const fft = new FFT(size);\n    const complexArray = new Float64Array(csize);\n    const output = new Float64Array(csize);\n    const resultRe = new Array(numRows);\n    const resultIm = new Array(numRows);\n    for (let j = 0; j < numRows; j++) {\n        const reRow = re[j];\n        const imRow = im[j];\n        for (let i = 0; i < csize; i += 2) {\n            complexArray[i] = reRow[i >>> 1];\n            complexArray[i + 1] = imRow[i >>> 1];\n        }\n        const outRe = inPlace ? reRow : new Float64Array(size);\n        const outIm = inPlace ? imRow : new Float64Array(size);\n        if (inverse) {\n            const input = applyZeroShift\n                ? zeroShift(complexArray, true)\n                : complexArray;\n            fft.inverseTransform(output, input);\n            for (let i = 0; i < csize; i += 2) {\n                outRe[i >>> 1] = output[i];\n                outIm[i >>> 1] = output[i + 1];\n            }\n        }\n        else {\n            fft.transform(output, complexArray);\n            const source = applyZeroShift ? zeroShift(output) : output;\n            for (let i = 0; i < csize; i += 2) {\n                outRe[i >>> 1] = source[i];\n                outIm[i >>> 1] = source[i + 1];\n            }\n        }\n        resultRe[j] = outRe;\n        resultIm[j] = outIm;\n    }\n    return { re: resultRe, im: resultIm };\n}\n//# sourceMappingURL=reimMatrixFFT.js.map","import FFT from 'fft.js';\nimport { zeroShift } from \"../reim/zeroShift.js\";\n/**\n * Apply FFT to each column of a complex matrix, reusing a single FFT instance for\n * all columns to avoid repeated instantiation overhead.\n * All columns must have the same length (all rows must have the same number of columns).\n * @param data - complex matrix with re and im arrays of Float64Array rows\n * @param options - options\n * @returns complex matrix with transformed columns\n */\nexport function reimMatrixFFTByColumns(data, options = {}) {\n    const { re, im } = data;\n    const numRows = re.length;\n    if (numRows === 0)\n        return { re: [], im: [] };\n    const { inverse = false, applyZeroShift = false, inPlace = false } = options;\n    const numColumns = re[0].length;\n    const csize = numRows << 1;\n    // Validate all rows have the same number of columns\n    for (let j = 0; j < numRows; j++) {\n        if (re[j].length !== numColumns || im[j].length !== numColumns) {\n            throw new RangeError(`All rows must have the same length. Expected ${numColumns} but row ${j} has length ${re[j].length}.`);\n        }\n    }\n    if (numColumns === 0) {\n        return { re: new Array(numRows), im: new Array(numRows) };\n    }\n    // Single FFT instance and working buffers reused across all columns\n    const fft = new FFT(numRows);\n    const complexArray = new Float64Array(csize);\n    const output = new Float64Array(csize);\n    const resultRe = new Array(numRows);\n    const resultIm = new Array(numRows);\n    // Initialize result arrays\n    for (let i = 0; i < numRows; i++) {\n        resultRe[i] = inPlace ? re[i] : new Float64Array(numColumns);\n        resultIm[i] = inPlace ? im[i] : new Float64Array(numColumns);\n    }\n    // Process each column\n    for (let col = 0; col < numColumns; col++) {\n        // Extract column data into complex array\n        for (let row = 0; row < numRows; row++) {\n            complexArray[row << 1] = re[row][col];\n            complexArray[(row << 1) + 1] = im[row][col];\n        }\n        const colRe = new Float64Array(numRows);\n        const colIm = new Float64Array(numRows);\n        if (inverse) {\n            const input = applyZeroShift\n                ? zeroShift(complexArray, true)\n                : complexArray;\n            fft.inverseTransform(output, input);\n            for (let i = 0; i < csize; i += 2) {\n                colRe[i >>> 1] = output[i];\n                colIm[i >>> 1] = output[i + 1];\n            }\n        }\n        else {\n            fft.transform(output, complexArray);\n            const source = applyZeroShift ? zeroShift(output) : output;\n            for (let i = 0; i < csize; i += 2) {\n                colRe[i >>> 1] = source[i];\n                colIm[i >>> 1] = source[i + 1];\n            }\n        }\n        // Store transformed column back into result matrix\n        for (let row = 0; row < numRows; row++) {\n            resultRe[row][col] = colRe[row];\n            resultIm[row][col] = colIm[row];\n        }\n    }\n    return { re: resultRe, im: resultIm };\n}\n//# sourceMappingURL=reimMatrixFFTByColumns.js.map","/**\n * Apply phase correction to a complex matrix along rows or columns.\n * All rows must have the same length.\n * @param data - complex matrix with re and im arrays of Float64Array rows\n * @param phi0 - Angle in radians for zero order phase correction\n * @param phi1 - Angle in radians for first order phase correction\n * @param options - options including direction ('rows' or 'columns', default 'rows')\n * @returns - complex matrix with corrected rows or columns\n */\nexport function reimMatrixPhaseCorrection(data, phi0 = 0, phi1 = 0, options = {}) {\n    const { reverse = false, inPlace = false, direction = 'rows' } = options;\n    phi0 = Number.isFinite(phi0) ? phi0 : 0;\n    phi1 = Number.isFinite(phi1) ? phi1 : 0;\n    const { re, im } = data;\n    const numRows = re.length;\n    if (numRows === 0)\n        return { re: [], im: [] };\n    const numColumns = re[0].length;\n    for (let j = 0; j < numRows; j++) {\n        if (re[j].length !== numColumns || im[j].length !== numColumns) {\n            throw new RangeError(`All rows must have the same length. Expected ${numColumns} but row ${j} has length ${re[j].length}.`);\n        }\n    }\n    const resultRe = new Array(numRows);\n    const resultIm = new Array(numRows);\n    // Initialize result arrays\n    for (let i = 0; i < numRows; i++) {\n        resultRe[i] = inPlace ? re[i] : new Float64Array(numColumns);\n        resultIm[i] = inPlace ? im[i] : new Float64Array(numColumns);\n    }\n    const size = direction === 'rows' ? numColumns : numRows;\n    let delta = phi1 / (size - 1);\n    if (reverse) {\n        delta = -delta;\n    }\n    const alpha = 2 * Math.sin(delta / 2) ** 2;\n    const beta = Math.sin(delta);\n    if (direction === 'rows') {\n        for (let j = 0; j < numRows; j++) {\n            let firstAngle = phi0;\n            if (reverse) {\n                firstAngle += phi1;\n            }\n            let cosTheta = Math.cos(firstAngle);\n            let sinTheta = Math.sin(firstAngle);\n            for (let i = 0; i < numColumns; i++) {\n                const r = re[j][i];\n                const ii = im[j][i];\n                resultRe[j][i] = r * cosTheta - ii * sinTheta;\n                resultIm[j][i] = ii * cosTheta + r * sinTheta;\n                const newCosTheta = cosTheta - (alpha * cosTheta + beta * sinTheta);\n                const newSinTheta = sinTheta - (alpha * sinTheta - beta * cosTheta);\n                cosTheta = newCosTheta;\n                sinTheta = newSinTheta;\n            }\n        }\n    }\n    else {\n        for (let col = 0; col < numColumns; col++) {\n            let firstAngle = phi0;\n            if (reverse) {\n                firstAngle += phi1;\n            }\n            let cosTheta = Math.cos(firstAngle);\n            let sinTheta = Math.sin(firstAngle);\n            for (let row = 0; row < numRows; row++) {\n                const r = re[row][col];\n                const ii = im[row][col];\n                resultRe[row][col] = r * cosTheta - ii * sinTheta;\n                resultIm[row][col] = ii * cosTheta + r * sinTheta;\n                const newCosTheta = cosTheta - (alpha * cosTheta + beta * sinTheta);\n                const newSinTheta = sinTheta - (alpha * sinTheta - beta * cosTheta);\n                cosTheta = newCosTheta;\n                sinTheta = newSinTheta;\n            }\n        }\n    }\n    return { re: resultRe, im: resultIm };\n}\n//# sourceMappingURL=reimMatrixPhaseCorrection.js.map","/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Stringify an object and convert all typed arrays to arrays\n * @param object\n * @param replacer\n * @param space\n * @returns\n */\nexport function stringify(object, replacer, space) {\n    const internalReplacer = (key, value) => {\n        if (ArrayBuffer.isView(value)) {\n            value = Array.from(value);\n        }\n        if (replacer) {\n            return replacer(key, value);\n        }\n        return value;\n    };\n    return JSON.stringify(object, internalReplacer, space);\n}\n//# sourceMappingURL=stringify.js.map","import { xAbsolute } from \"./xAbsolute.js\";\nimport { xMedian } from \"./xMedian.js\";\n/**\n * This function calculates the median after taking the xAbsolute values of the points.\n * @param array - the array for which we want to calculate the absolute value\n * @returns - median\n */\nexport function xAbsoluteMedian(array) {\n    return xMedian(xAbsolute(array));\n}\n//# sourceMappingURL=xAbsoluteMedian.js.map","import { xCheck } from \"./xCheck.js\";\nimport { xGetFromToIndex } from \"./xGetFromToIndex.js\";\nexport function xAbsoluteSum(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let sum = 0;\n    for (let i = fromIndex; i <= toIndex; i++) {\n        sum += Math.abs(array[i]);\n    }\n    return sum;\n}\n//# sourceMappingURL=xAbsoluteSum.js.map","/**\n * Will apply a function on each element of the array described as a string\n * By default we will use as variable 'x'\n * In front of sequence of lowercase we will add 'Math.'. This allows to write\n * `sin(x) + cos(x)` and it will be replace internally by (x) => (Math.sin(x) + Math.cos(x))\n * @param array\n * @param options\n * @returns\n */\nexport function xApplyFunctionStr(array, options = {}) {\n    const { variableLabel = 'x', fctString = variableLabel } = options;\n    const fct = new Function(variableLabel, `return Number(${fctString\n        .replaceAll(/(?<before>^|\\W)(?<after>[\\da-z]{2,}\\()/g, '$<before>Math.$<after>')\n        .replaceAll('Math.Math', 'Math')})`);\n    const toReturn = Float64Array.from(array);\n    for (let i = 0; i < array.length; i++) {\n        toReturn[i] = fct(array[i]);\n        if (Number.isNaN(toReturn[i])) {\n            throw new Error(`The callback ${fctString} does not return a number: ${array[i]}`);\n        }\n    }\n    return toReturn;\n}\n//# sourceMappingURL=xApplyFunctionStr.js.map","import { xCrossCorrelation } from \"./xCrossCorrelation.js\";\n/**\n * Calculates the auto-correlation of an array\n * @param A - the array for which to calculate the auto-correlation\n * @param options - Options\n */\nexport function xAutoCorrelation(A, options = {}) {\n    return xCrossCorrelation(A, A, options);\n}\n//# sourceMappingURL=xAutoCorrelation.js.map","import { xCheck } from \"./xCheck.js\";\n/**\n * Downsample an array by averaging consecutive non-overlapping points (binning).\n * Either specify a fixed `binSize` or a target `numberOfPoints`.\n * @param array - Input array.\n * @param options - Options.\n * @returns Downsampled array.\n */\nexport function xBinning(array, options = {}) {\n    xCheck(array);\n    const { binSize, numberOfPoints, keepFirstAndLast = true } = options;\n    const { length } = array;\n    if (numberOfPoints !== undefined) {\n        if (binSize !== undefined) {\n            throw new RangeError('binSize and numberOfPoints are mutually exclusive');\n        }\n        if (!Number.isInteger(numberOfPoints) || numberOfPoints <= 0) {\n            throw new RangeError('numberOfPoints must be a positive integer');\n        }\n        if (numberOfPoints > length) {\n            throw new RangeError('numberOfPoints must be <= array.length');\n        }\n        return binByNumberOfPoints(array, numberOfPoints, keepFirstAndLast);\n    }\n    const effectiveBinSize = binSize ?? 10;\n    if (!Number.isInteger(effectiveBinSize) || effectiveBinSize <= 0) {\n        throw new RangeError('binSize must be a positive integer');\n    }\n    if (effectiveBinSize === 1) {\n        return Float64Array.from(array);\n    }\n    if (keepFirstAndLast) {\n        if (length <= 2) {\n            return Float64Array.from(array);\n        }\n        const innerLength = length - 2;\n        const innerBinCount = Math.ceil(innerLength / effectiveBinSize);\n        const output = new Float64Array(innerBinCount + 2);\n        output[0] = array[0];\n        output[output.length - 1] = array[length - 1];\n        for (let i = 0, j = 1; i < innerLength; i += effectiveBinSize, j++) {\n            const start = i + 1;\n            const end = Math.min(start + effectiveBinSize, length - 1);\n            let sum = 0;\n            for (let k = start; k < end; k++) {\n                sum += array[k];\n            }\n            output[j] = sum / (end - start);\n        }\n        return output;\n    }\n    const outputLength = Math.ceil(length / effectiveBinSize);\n    const output = new Float64Array(outputLength);\n    for (let i = 0, j = 0; i < length; i += effectiveBinSize, j++) {\n        const end = Math.min(i + effectiveBinSize, length);\n        let sum = 0;\n        for (let k = i; k < end; k++) {\n            sum += array[k];\n        }\n        output[j] = sum / (end - i);\n    }\n    return output;\n}\nfunction binByNumberOfPoints(array, numberOfPoints, keepFirstAndLast) {\n    const { length } = array;\n    const output = new Float64Array(numberOfPoints);\n    if (keepFirstAndLast) {\n        if (numberOfPoints < 2) {\n            throw new RangeError('numberOfPoints must be >= 2 when keepFirstAndLast is true');\n        }\n        output[0] = array[0];\n        output[numberOfPoints - 1] = array[length - 1];\n        if (numberOfPoints === 2) {\n            return output;\n        }\n        const innerLength = length - 2;\n        const innerBins = numberOfPoints - 2;\n        for (let j = 0; j < innerBins; j++) {\n            const start = 1 + Math.floor((j * innerLength) / innerBins);\n            const end = 1 + Math.floor(((j + 1) * innerLength) / innerBins);\n            let sum = 0;\n            for (let k = start; k < end; k++) {\n                sum += array[k];\n            }\n            output[j + 1] = sum / (end - start);\n        }\n        return output;\n    }\n    for (let j = 0; j < numberOfPoints; j++) {\n        const start = Math.floor((j * length) / numberOfPoints);\n        const end = Math.floor(((j + 1) * length) / numberOfPoints);\n        let sum = 0;\n        for (let k = start; k < end; k++) {\n            sum += array[k];\n        }\n        output[j] = sum / (end - start);\n    }\n    return output;\n}\n//# sourceMappingURL=xBinning.js.map","import { xBoxPlotWithOutliers } from \"./xBoxPlotWithOutliers.js\";\nimport { xMean } from \"./xMean.js\";\nimport { xStandardDeviation } from \"./xStandardDeviation.js\";\n/**\n * Calculate distribution statistics of an array without providing options\n * This ensure that the statistics are calculated in the same way in all the packages\n * If the array is empty it will throw an error\n * If the array has a length of 1, sd will be NaN (unbiased calculation of sd)\n * @param array - data\n * @param options\n * @returns - q1, median, q3, min, max\n */\nexport function xDistributionStats(array) {\n    return {\n        ...xBoxPlotWithOutliers(array),\n        mean: xMean(array),\n        sd: xStandardDeviation(array),\n        nb: array.length,\n    };\n}\n//# sourceMappingURL=xDistributionStats.js.map","import { isAnyArray } from 'is-any-array';\nimport { getOutputArray } from \"./getOutputArray.js\";\n/**\n * This function divide the first array by the second array or a constant value to each element of the first array\n * @param array1 - first array\n * @param array2 - second array or number\n * @param options - options\n */\nexport function xDivide(array1, array2, options = {}) {\n    let isConstant = false;\n    let constant = 0;\n    if (isAnyArray(array2)) {\n        if (array1.length !== array2.length) {\n            throw new RangeError('size of array1 and array2 must be identical');\n        }\n    }\n    else {\n        isConstant = true;\n        constant = array2;\n    }\n    const array3 = getOutputArray(options.output, array1.length);\n    if (isConstant) {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] / constant;\n        }\n    }\n    else {\n        for (let i = 0; i < array1.length; i++) {\n            array3[i] = array1[i] / array2[i];\n        }\n    }\n    return array3;\n}\n//# sourceMappingURL=xDivide.js.map","import { xCheck } from \"./xCheck.js\";\nimport { xGetFromToIndex } from \"./xGetFromToIndex.js\";\n/**\n * Computes the maximal value of an array of values\n * @param array - array of numbers\n * @param options - options\n */\nexport function xMaxAbsoluteValue(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let maxValue = array[fromIndex];\n    for (let i = fromIndex + 1; i <= toIndex; i++) {\n        if (array[i] >= 0) {\n            if (array[i] > maxValue) {\n                maxValue = array[i];\n            }\n        }\n        else if (-array[i] > maxValue) {\n            maxValue = -array[i];\n        }\n    }\n    return maxValue;\n}\n//# sourceMappingURL=xMaxAbsoluteValue.js.map","import { xCheck } from \"./xCheck.js\";\nimport { xGetFromToIndex } from \"./xGetFromToIndex.js\";\n/**\n * Computes the index of the maximum of the given values\n * @param array - array of numbers\n * @param  options - options\n * @returns - index\n */\nexport function xMaxIndex(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let maxIndex = fromIndex;\n    for (let i = fromIndex + 1; i <= toIndex; i++) {\n        if (array[i] > array[maxIndex]) {\n            maxIndex = i;\n        }\n    }\n    return maxIndex;\n}\n//# sourceMappingURL=xMaxIndex.js.map","import { xCheckLengths } from \"./xCheckLengths.js\";\n/**\n * This function calculates the mean absolute error.\n * @param array1 - first array\n * @param array2 - second array\n */\nexport function xMeanAbsoluteError(array1, array2) {\n    xCheckLengths(array1, array2);\n    let sum = 0;\n    for (let i = 0; i < array1.length; i++) {\n        sum += Math.abs(array1[i] - array2[i]);\n    }\n    return sum / array1.length;\n}\n//# sourceMappingURL=xMeanAbsoluteError.js.map","import { xCheckLengths } from \"./xCheckLengths.js\";\n/**\n * This function calculates the mean squared error.\n * @param array1 -first array\n * @param array2 - second array\n */\nexport function xMeanSquaredError(array1, array2) {\n    xCheckLengths(array1, array2);\n    let sum = 0;\n    for (let i = 0; i < array1.length; i++) {\n        sum += (array1[i] - array2[i]) ** 2;\n    }\n    return sum / array1.length;\n}\n//# sourceMappingURL=xMeanSquaredError.js.map","import { xCheck } from \"./xCheck.js\";\nimport { xGetFromToIndex } from \"./xGetFromToIndex.js\";\n/**\n * Computes the weighted mean value of an array of values.\n * @deprecated please use xyMassCenter\n * @param array - array of numbers\n * @param weights - array of weights\n * @param options - options\n */\nexport function xMeanWeighted(array, weights, options = {}) {\n    xCheck(array, { minLength: 1 });\n    xCheck(weights);\n    if (array.length !== weights.length) {\n        throw new Error('array and weights must have the same length');\n    }\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    // normalize weights\n    let sumWeights = 0;\n    let sumValue = array[fromIndex] * weights[fromIndex];\n    sumWeights += weights[fromIndex];\n    for (let i = fromIndex + 1; i <= toIndex; i++) {\n        sumValue += array[i] * weights[i];\n        sumWeights += weights[i];\n    }\n    if (sumWeights === 0) {\n        // We throw because the case is not well defined\n        throw new Error('sum of weights must be > 0');\n    }\n    return sumValue / sumWeights;\n}\n//# sourceMappingURL=xMeanWeighted.js.map","import { xCheck } from \"./xCheck.js\";\nimport { xGetFromToIndex } from \"./xGetFromToIndex.js\";\n/**\n * Computes the index of the minimum of the given values.\n * @param array - array of numbers\n * @param options - options\n * @returns - index\n */\nexport function xMinIndex(array, options = {}) {\n    xCheck(array);\n    const { fromIndex, toIndex } = xGetFromToIndex(array, options);\n    let minIndex = fromIndex;\n    for (let i = fromIndex + 1; i <= toIndex; i++) {\n        if (array[i] < array[minIndex]) {\n            minIndex = i;\n        }\n    }\n    return minIndex;\n}\n//# sourceMappingURL=xMinIndex.js.map","import { xCheck } from \"./xCheck.js\";\n/**\n * Return min and max values of an array.\n * @param array - array of number\n * @returns - Object with 2 properties, min and max\n */\nexport function xMinMaxDelta(array) {\n    xCheck(array, {\n        minLength: 2,\n    });\n    let minDelta = array[1] - array[0];\n    let maxDelta = minDelta;\n    for (let i = 0; i < array.length - 1; i++) {\n        const delta = array[i + 1] - array[i];\n        if (delta < minDelta)\n            minDelta = delta;\n        if (delta > maxDelta)\n            maxDelta = delta;\n    }\n    return { min: minDelta, max: maxDelta };\n}\n//# sourceMappingURL=xMinMaxDelta.js.map","/**\n * Calculates the mode of an array\n * @param input - Array containing values\n * @returns - mode\n */\nexport function xMode(input) {\n    if (input.length === 0) {\n        throw new TypeError('input must not be empty');\n    }\n    let maxValue = 0;\n    let maxCount = 0;\n    let count = 0;\n    const counts = {};\n    for (const element of input) {\n        count = counts[element];\n        if (count) {\n            counts[element]++;\n            count++;\n        }\n        else {\n            counts[element] = 1;\n            count = 1;\n        }\n        if (count > maxCount) {\n            maxCount = count;\n            maxValue = element;\n        }\n    }\n    return maxValue;\n}\n//# sourceMappingURL=xMode.js.map","import { xCheck } from \"./xCheck.js\";\nimport { xStandardDeviation } from \"./xStandardDeviation.js\";\n/**\n * Pareto scaling, which uses the square root of standard deviation as the scaling factor, circumvents the amplification of noise by retaining a small portion of magnitude information.\n * Noda, I. (2008). Scaling techniques to enhance two-dimensional correlation spectra. Journal of Molecular Structure, 883, 216-227.\n * DOI: 10.1016/j.molstruc.2007.12.026\n * @param array - array of number\n */\nexport function xParetoNormalization(array) {\n    xCheck(array);\n    const result = new Float64Array(array.length);\n    const sqrtSD = Math.sqrt(xStandardDeviation(array));\n    for (let i = 0; i < array.length; i++) {\n        result[i] = array[i] / sqrtSD;\n    }\n    return result;\n}\n//# sourceMappingURL=xParetoNormalization.js.map","import { isAnyArray } from 'is-any-array';\nimport { xBoxPlot } from \"./xBoxPlot.js\";\n/**\n * Remove the outliers from the array\n * Based on 1.5 IQR\n * @param array - data\n * @returns - trimmed data\n */\nexport function xRemoveOutliersIQR(array) {\n    if (!isAnyArray(array)) {\n        throw new TypeError('input must be an array');\n    }\n    if (array.length === 0) {\n        return array;\n    }\n    const boxPlot = xBoxPlot(array);\n    const iqr = boxPlot.q3 - boxPlot.q1;\n    const lowerWhisker = boxPlot.q1 - 1.5 * iqr;\n    const higherWhisker = boxPlot.q3 + 1.5 * iqr;\n    if (boxPlot.min >= lowerWhisker && boxPlot.max <= higherWhisker) {\n        return array;\n    }\n    const filteredArray = [];\n    for (const element of array) {\n        if (element >= lowerWhisker && element <= higherWhisker) {\n            filteredArray.push(element);\n        }\n    }\n    return filteredArray;\n}\n//# sourceMappingURL=xRemoveOutliersIQR.js.map","import { getOutputArray } from \"./getOutputArray.js\";\nimport { xCheck } from \"./xCheck.js\";\nimport { xMaxValue } from \"./xMaxValue.js\";\nimport { xMinValue } from \"./xMinValue.js\";\n/**\n * Function used to rescale data\n * @param input - input for the rescale\n * @param options - options\n * @returns rescaled data\n */\nexport function xRescale(input, options = {}) {\n    xCheck(input);\n    const output = getOutputArray(options.output, input.length);\n    const currentMin = xMinValue(input);\n    const currentMax = xMaxValue(input);\n    if (currentMin === currentMax) {\n        throw new RangeError('minimum and maximum input values are equal. Cannot rescale a constant array');\n    }\n    const { min = 0, max = 1 } = options;\n    if (min >= max) {\n        throw new RangeError('min option must be smaller than max option');\n    }\n    const factor = (max - min) / (currentMax - currentMin);\n    for (let i = 0; i < input.length; i++) {\n        output[i] = (input[i] - currentMin) * factor + min;\n    }\n    return output;\n}\n//# sourceMappingURL=xRescale.js.map","import { xBoxPlotWithOutliers } from \"./xBoxPlotWithOutliers.js\";\nimport { xMean } from \"./xMean.js\";\nimport { xStandardDeviation } from \"./xStandardDeviation.js\";\n/**\n * Calculate distribution statistics of an array without providing options. Statistics\n * like sd and mean are calculated after removing outliers.\n * This ensure that the statistics are calculated in the same way in all the packages\n * If the array is empty it will throw an error\n * If the array has a length of 1, sd will be NaN (unbiased calculation of sd)\n * @param array - data\n * @param options\n * @returns - q1, median, q3, min, max\n */\nexport function xRobustDistributionStats(array) {\n    const boxPlot = xBoxPlotWithOutliers(array);\n    let filteredArray;\n    if (boxPlot.max - boxPlot.min <= Number.EPSILON) {\n        return {\n            ...boxPlot,\n            mean: boxPlot.median,\n            sd: array.length === 1 ? Number.NaN : 0,\n            nb: array.length,\n        };\n    }\n    if (boxPlot.outliers.length === 0) {\n        filteredArray = array;\n    }\n    else {\n        filteredArray = new Float64Array(array.length - boxPlot.outliers.length);\n        let j = 0;\n        for (const element of array) {\n            if (element >= boxPlot.min && element <= boxPlot.max) {\n                filteredArray[j++] = element;\n            }\n        }\n    }\n    return {\n        ...boxPlot,\n        mean: xMean(filteredArray),\n        sd: xStandardDeviation(filteredArray),\n        nb: filteredArray.length,\n    };\n}\n//# sourceMappingURL=xRobustDistributionStats.js.map","import { xMaxValue } from \"./xMaxValue.js\";\nimport { xRolling } from \"./xRolling.js\";\n/**\n * This function calculates a maximum within a rolling window\n * @param array - array\n * @param options - options\n */\nexport function xRollingMax(array, options = {}) {\n    return xRolling(array, xMaxValue, options);\n}\n//# sourceMappingURL=xRollingMax.js.map","import { xMedian } from \"./xMedian.js\";\nimport { xRolling } from \"./xRolling.js\";\n/**\n * This function calculates a rolling average\n * @param array - array\n * @param options - options\n */\nexport function xRollingMedian(array, options = {}) {\n    return xRolling(array, xMedian, options);\n}\n//# sourceMappingURL=xRollingMedian.js.map","import { xMinValue } from \"./xMinValue.js\";\nimport { xRolling } from \"./xRolling.js\";\n/**\n * This function calculates a minimum within a rolling window\n * @param array - array\n * @param options - options\n */\nexport function xRollingMin(array, options = {}) {\n    return xRolling(array, xMinValue, options);\n}\n//# sourceMappingURL=xRollingMin.js.map","import { xCheck } from \"./xCheck.js\";\n/**\n * Sample within the array\n * @param array - array from which to sample\n * @param options - options\n * @returns - array with evenly spaced elements\n * @link https://en.wikipedia.org/wiki/Sampling_(signal_processing)\n */\nexport function xSampling(array, options = {}) {\n    const { length = 10 } = options;\n    xCheck(array);\n    if (length === array.length) {\n        return Float64Array.from(array);\n    }\n    else if (length > array.length) {\n        throw new RangeError('length must be smaller than the array length');\n    }\n    else {\n        return downSampling(array, length);\n    }\n}\n/**\n * Downsample within the array\n * @param array - array from which to sample\n * @param length\n * @returns - array with evenly spaced elements\n * @link https://en.wikipedia.org/wiki/Downsampling_(signal_processing)\n */\nfunction downSampling(array, length) {\n    const returnArray = new Float64Array(length);\n    const delta = (array.length - 1) / (length - 1);\n    for (let i = 0; i < length; i++) {\n        returnArray[i] = array[Math.round(i * delta)];\n    }\n    return returnArray;\n}\n//# sourceMappingURL=xSampling.js.map","import { xSequentialFillFromStep } from \"./xSequentialFillFromStep.js\";\nexport function xSequentialFillFromTo(parameters, options = {}) {\n    const { from, to, size } = parameters;\n    const step = (to - from) / (size - 1);\n    return xSequentialFillFromStep({ from, step, size }, options);\n}\n//# sourceMappingURL=xSequentialFillFromTo.js.map","/**\n * Function that sorts arrays or Float64Arrays in ascending order in place !\n * This method is optimized for typed arrays.\n * @param array - array to sort\n * @returns sorted array\n */\nexport function xSortAscending(array) {\n    if (ArrayBuffer.isView(array)) {\n        array.sort();\n        return array;\n    }\n    else if (Array.isArray(array)) {\n        array.sort((a, b) => a - b);\n        return array;\n    }\n    throw new Error('trying to sort non array');\n}\n//# sourceMappingURL=xSortAscending.js.map","/**\n * XUniqueSorted.\n * @param array - array of numbers\n * @returns - sorted array\n */\nexport function xUniqueSorted(array) {\n    const unique = Float64Array.from(new Set(array));\n    unique.sort();\n    return unique;\n}\n//# sourceMappingURL=xUniqueSorted.js.map","/**\n * Sort object of arrays, x has to be monotone.\n * @param data - object of kind {x:[], re:[], im:[]}\n * @returns - sorted array\n */\nexport function xreimSortX(data) {\n    const { x, re, im } = data;\n    if (x.length !== re.length || x.length !== im.length) {\n        throw new TypeError('length of x, re and im must be identical');\n    }\n    if (x.length < 2 || x[0] < x[1])\n        return data;\n    return {\n        x: x.toReversed(),\n        re: re.toReversed(),\n        im: im.toReversed(),\n    };\n}\n//# sourceMappingURL=xreimSortX.js.map","import { reimZeroFilling } from \"../reim/index.js\";\n/**\n * This function makes a zero filling to re and im part.\n * @param data - object of kind {x:[], re:[], im:[]}\n * @param totalLength - final number of points\n * @returns - data.\n */\nexport function xreimZeroFilling(data, totalLength) {\n    const { x, re, im } = data;\n    const length = x.length;\n    if (totalLength === 0 || length === totalLength)\n        return data;\n    if (length > totalLength) {\n        return {\n            x: x.slice(0, totalLength),\n            re: re.slice(0, totalLength),\n            im: im.slice(0, totalLength),\n        };\n    }\n    const newX = new Float64Array(totalLength);\n    newX.set(x);\n    const deltaX = (x.at(-1) - x[0]) / (length - 1);\n    for (let i = length; i < totalLength; i++) {\n        newX[i] = newX[i - 1] + deltaX;\n    }\n    return {\n        x: newX,\n        ...reimZeroFilling({ re, im }, totalLength),\n    };\n}\n//# sourceMappingURL=xreimZeroFilling.js.map","/**\n * Convert an array of XY arrays to a DataXY object containing x,y arrays\n * @param data - array of arrays [[x,y],[x,y],...]\n */\nexport function xy2ToXY(data) {\n    const xy2 = { x: [], y: [] };\n    for (const xyValue of data) {\n        xy2.x.push(xyValue[0]);\n        xy2.y.push(xyValue[1]);\n    }\n    return xy2;\n}\n//# sourceMappingURL=xy2ToXY.js.map","/**\n * Align data of two spectra by verifying wether x values are in a certain range (`delta`).\n * The two spectra should not have two consecutive x values which difference is\n * smaller than `delta` to achieve good results!\n * @param data1 - First spectrum data\n * @param data2 - Second spectrum data\n * @param options - Options\n */\nexport function xyAlign(data1, data2, options = {}) {\n    const { delta = 1, common = true, x = 'x1' } = options;\n    const result = {\n        x: [],\n        y1: [],\n        y2: [],\n    };\n    let i = 0;\n    let j = 0;\n    const length1 = data1.x.length;\n    const length2 = data2.x.length;\n    while (i < length1 && j < length2) {\n        let maxDiff = 0;\n        if (typeof delta === 'function') {\n            const mean = (data1.x[i] + data2.x[j]) / 2; // is this a good thing to do?\n            maxDiff = delta(mean);\n        }\n        else {\n            maxDiff = delta;\n        }\n        const difference = data1.x[i] - data2.x[j];\n        if (Math.abs(difference) > maxDiff) {\n            if (difference > 0) {\n                if (!common) {\n                    result.x.push(data2.x[j]);\n                    result.y1.push(0);\n                    result.y2.push(data2.y[j]);\n                    if (j === length2 - 1) {\n                        while (i < length1) {\n                            result.x.push(data1.x[i]);\n                            result.y1.push(data1.y[i]);\n                            result.y2.push(0);\n                            i++;\n                        }\n                    }\n                }\n                j++;\n            }\n            else {\n                if (!common) {\n                    result.x.push(data1.x[i]);\n                    result.y1.push(data1.y[i]);\n                    result.y2.push(0);\n                    if (i === length1 - 1) {\n                        while (j < length2) {\n                            result.x.push(data2.x[j]);\n                            result.y1.push(0);\n                            result.y2.push(data2.y[j]);\n                            j++;\n                        }\n                    }\n                }\n                i++;\n            }\n        }\n        else {\n            const weightedX = (data1.x[i] * data1.y[i] + data2.x[j] * data2.y[j]) /\n                (data1.y[i] + data2.y[j]);\n            switch (x) {\n                case 'x1':\n                    result.x.push(data1.x[i]);\n                    break;\n                case 'x2':\n                    result.x.push(data2.x[j]);\n                    break;\n                case 'weighted':\n                    result.x.push(weightedX);\n                    break;\n                default:\n                    throw new Error(`unknown x option value: ${String(x)}`);\n            }\n            result.y1.push(data1.y[i]);\n            result.y2.push(data2.y[j]);\n            i++;\n            j++;\n        }\n    }\n    return result;\n}\n//# sourceMappingURL=xyAlign.js.map","import { xyJoinX } from \"../xy/index.js\";\nimport { getSlots } from \"./utils/getSlots.js\";\n/**\n * Aligns data, can be used for spectra\n * @param data - data\n * @param options - Options\n */\nexport function xyArrayAlign(data, options = {}) {\n    const { delta = 1, requiredY = false } = options;\n    data = data.map((spectrum) => xyJoinX(spectrum, { delta }));\n    const slots = getSlots(data, { delta });\n    const x = Float64Array.from(slots.map((slot) => slot.average));\n    const ys = Array.from(data, () => new Float64Array(x.length));\n    const positions = new Uint32Array(data.length);\n    for (let i = 0; i < slots.length; i++) {\n        const slot = slots[i];\n        for (let j = 0; j < data.length; j++) {\n            const spectrum = data[j];\n            while (positions[j] < spectrum.x.length &&\n                spectrum.x[positions[j]] <= slot.to) {\n                ys[j][i] += spectrum.y[positions[j]];\n                positions[j]++;\n            }\n        }\n    }\n    if (requiredY)\n        return filterRequiredY(x, ys);\n    return { x, ys };\n}\nfunction filterRequiredY(x, ys) {\n    const newX = [];\n    const newYs = Array.from(ys, () => []);\n    for (let i = 0; i < x.length; i++) {\n        if (ys.every((y) => y[i] !== 0)) {\n            newX.push(x[i]);\n            for (let j = 0; j < ys.length; j++) {\n                newYs[j].push(ys[j][i]);\n            }\n        }\n    }\n    return { x: newX, ys: newYs };\n}\n//# sourceMappingURL=xyArrayAlign.js.map","import { getSlotsToFirst } from \"./utils/getSlotsToFirst.js\";\n/**\n * We align all the data/spectra to the first array of X.\n * The alignment is based on the X values of the first spectrum and the `delta` error allowed.\n * If some x values are missing in the first spectrum we will add them\n * @param data - data\n * @param options - options\n */\nexport function xyArrayAlignToFirst(data, options = {}) {\n    const { delta = 1 } = options;\n    const slots = getSlotsToFirst(data, { delta });\n    const x = Float64Array.from(slots.map((slot) => slot.value));\n    const ys = Array.from(data, () => new Float64Array(x.length));\n    const positions = new Uint32Array(data.length);\n    for (let i = 0; i < slots.length; i++) {\n        const slot = slots[i];\n        for (let j = 0; j < data.length; j++) {\n            const spectrum = data[j];\n            while (positions[j] < spectrum.x.length &&\n                spectrum.x[positions[j]] < slot.to) {\n                ys[j][i] += spectrum.y[positions[j]];\n                positions[j]++;\n            }\n        }\n    }\n    return { x, ys };\n}\n//# sourceMappingURL=xyArrayAlignToFirst.js.map","import { xyArrayWeightedMerge } from \"../xyArrayWeightedMerge.js\";\n/**\n * GetSlotsToFirst.\n * @param data - data.\n * @param options - Options.\n */\nexport function getSlotsToFirst(data, options = {}) {\n    const { delta = 1 } = options;\n    const deltaIsFunction = typeof delta === 'function';\n    const firstXs = data[0].x;\n    const slots = [];\n    // we first create the slots based on the first spectrum\n    for (const element of firstXs) {\n        const currentDelta = deltaIsFunction ? delta(element) : delta;\n        slots.push({\n            from: element - currentDelta,\n            to: element + currentDelta,\n            value: element,\n        });\n    }\n    const otherXs = xyArrayWeightedMerge(data.slice(1), options).x;\n    let currentPosition = 0;\n    for (const slot of slots) {\n        while (otherXs[currentPosition] < slot.to &&\n            currentPosition < otherXs.length) {\n            if (otherXs[currentPosition] < slot.from) {\n                const currentDelta = deltaIsFunction\n                    ? delta(otherXs[currentPosition])\n                    : delta;\n                slots.push({\n                    from: otherXs[currentPosition] - currentDelta,\n                    to: otherXs[currentPosition] + currentDelta,\n                    value: otherXs[currentPosition],\n                });\n            }\n            currentPosition++;\n        }\n    }\n    for (let i = currentPosition; i < otherXs.length; i++) {\n        const currentDelta = deltaIsFunction ? delta(otherXs[i]) : delta;\n        slots.push({\n            from: otherXs[i] - currentDelta,\n            to: otherXs[i] + currentDelta,\n            value: otherXs[i],\n        });\n    }\n    slots.sort((a, b) => a.value - b.value);\n    // we prevent slots overlap in the first spectrum\n    for (let i = 0; i < slots.length - 1; i++) {\n        if (slots[i].to > slots[i + 1].from) {\n            const middle = (slots[i].value + slots[i + 1].value) / 2;\n            slots[i].to = middle;\n            slots[i + 1].from = middle;\n        }\n    }\n    return slots;\n}\n//# sourceMappingURL=getSlotsToFirst.js.map","import { xyJoinX } from \"../xy/index.js\";\nimport { getSlots } from \"./utils/getSlots.js\";\n/**\n * Merge DataXY\n * We have an array of DataXY and the goal is to merge all the values that are the closest possible\n * @param data - data\n * @param options - Options\n */\nexport function xyArrayMerge(data, options = {}) {\n    const { delta = 1 } = options;\n    // We start by checking that the data/spectra don't have peaks too close and we simplify them.\n    data = data.map((spectrum) => xyJoinX(spectrum, { delta }));\n    // At first, we will calculate the X values (simple mean).\n    const slots = getSlots(data, { delta });\n    const x = Float64Array.from(slots.map((slot) => slot.average));\n    const y = new Float64Array(x.length);\n    const positions = new Uint32Array(data.length);\n    for (let i = 0; i < slots.length; i++) {\n        const slot = slots[i];\n        for (let j = 0; j < data.length; j++) {\n            const spectrum = data[j];\n            while (positions[j] < spectrum.x.length &&\n                spectrum.x[positions[j]] <= slot.to) {\n                y[i] += spectrum.y[positions[j]];\n                positions[j]++;\n            }\n        }\n    }\n    return { x, y };\n}\n//# sourceMappingURL=xyArrayMerge.js.map","import { xMean } from \"../x/index.js\";\n/**\n * Finds the covariance of the points.\n * @param data\n * @param options\n * @returns the covariance\n */\nexport function xyCovariance(data, options = {}) {\n    const { x, y } = data;\n    const { unbiased = true } = options;\n    const meanX = xMean(x);\n    const meanY = xMean(y);\n    let error = 0;\n    for (let i = 0; i < x.length; i++) {\n        error += (x[i] - meanX) * (y[i] - meanY);\n    }\n    if (unbiased) {\n        return error / (x.length - 1);\n    }\n    else {\n        return error / x.length;\n    }\n}\n//# sourceMappingURL=xyCovariance.js.map","import { xEnsureFloat64 } from \"../x/index.js\";\nexport function xyEnsureFloat64(data) {\n    return {\n        x: xEnsureFloat64(data.x),\n        y: xEnsureFloat64(data.y),\n    };\n}\n//# sourceMappingURL=xyEnsureFloat64.js.map","import { xIsMonotonic } from \"../x/index.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Filters x,y values to allow strictly growing values in x-axis.\n * @param data - Object that contains property x (an ordered increasing array) and y (an array).\n */\nexport function xyEnsureGrowingX(data) {\n    xyCheck(data);\n    if (xIsMonotonic(data.x) === 1)\n        return data;\n    const x = Array.from(data.x);\n    const y = Array.from(data.y);\n    let prevX = Number.NEGATIVE_INFINITY;\n    let currentIndex = 0;\n    for (let index = 0; index < x.length; index++) {\n        if (prevX < x[index]) {\n            if (currentIndex < index) {\n                x[currentIndex] = x[index];\n                y[currentIndex] = y[index];\n            }\n            currentIndex++;\n            prevX = x[index];\n        }\n    }\n    x.length = currentIndex;\n    y.length = currentIndex;\n    return { x, y };\n}\n//# sourceMappingURL=xyEnsureGrowingX.js.map","import { zonesNormalize } from \"../zones/index.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Extract zones from a XY data.\n * @param data - Object that contains property x (an ordered increasing array) and y (an array)\n * @param options - options\n * @returns - Array of points\n */\nexport function xyExtract(data, options = {}) {\n    xyCheck(data);\n    const { x, y } = data;\n    let { zones } = options;\n    zones = zonesNormalize(zones);\n    if (x === undefined ||\n        y === undefined ||\n        !Array.isArray(zones) ||\n        zones.length === 0) {\n        return data;\n    }\n    const newX = [];\n    const newY = [];\n    let currentZone = zones[0];\n    let position = 0;\n    loop: for (let i = 0; i < x.length; i++) {\n        while (currentZone.to < x[i]) {\n            position++;\n            currentZone = zones[position];\n            if (!currentZone) {\n                i = x.length;\n                break loop;\n            }\n        }\n        if (x[i] >= currentZone.from) {\n            newX.push(x[i]);\n            newY.push(y[i]);\n        }\n    }\n    return { x: newX, y: newY };\n}\n//# sourceMappingURL=xyExtract.js.map","/**\n * Filter an array x/y based on various criteria x points are expected to be sorted\n * @param data - object containing 2 properties x and y\n * @param options - options\n * @returns filtered array\n */\nexport function xyFilter(data, options = {}) {\n    const { x, y } = data;\n    const { filter } = options;\n    const newX = [];\n    const newY = [];\n    for (let i = 0; i < x.length; i++) {\n        if (!filter || filter(x[i], y[i])) {\n            newX.push(x[i]);\n            newY.push(y[i]);\n        }\n    }\n    return {\n        x: newX,\n        y: newY,\n    };\n}\n//# sourceMappingURL=xyFilter.js.map","import { xMinMaxValues } from \"../x/index.js\";\n/**\n * Filter an array x/y based on various criteria x points are expected to be sorted\n * @param data - object containing 2 properties x and y\n * @param minRelativeYValue - the minimum relative value compare to the Y max value\n * @returns filtered data\n */\nexport function xyFilterMinYValue(data, minRelativeYValue) {\n    if (minRelativeYValue === undefined)\n        return data;\n    const { x, y } = data;\n    const { min, max } = xMinMaxValues(y);\n    const threshold = max * minRelativeYValue;\n    if (min >= threshold)\n        return data;\n    const newX = [];\n    const newY = [];\n    for (let i = 0; i < x.length; i++) {\n        if (y[i] >= threshold) {\n            newX.push(x[i]);\n            newY.push(y[i]);\n        }\n    }\n    return {\n        x: newX,\n        y: newY,\n    };\n}\n//# sourceMappingURL=xyFilterMinYValue.js.map","import { xSortDescending } from \"../x/index.js\";\n/**\n * Filter an array x/y based on various criteria x points are expected to be sorted\n * @param data - object containing 2 properties x and y\n * @param nbPeaks\n * @returns filtered data\n */\nexport function xyFilterTopYValues(data, nbPeaks) {\n    if (nbPeaks === undefined)\n        return data;\n    if (nbPeaks > data.x.length)\n        return data;\n    const { x, y } = data;\n    const newX = [];\n    const newY = [];\n    const descending = xSortDescending(y.slice());\n    const threshold = descending[nbPeaks - 1];\n    let nbThreshold = 0;\n    for (let i = 0; i < nbPeaks; i++) {\n        if (descending[i] === threshold) {\n            nbThreshold++;\n        }\n    }\n    for (let i = 0; i < x.length; i++) {\n        if (y[i] > threshold) {\n            newX.push(x[i]);\n            newY.push(y[i]);\n        }\n        else if (y[i] === threshold) {\n            nbThreshold--;\n            if (nbThreshold >= 0) {\n                newX.push(x[i]);\n                newY.push(y[i]);\n            }\n        }\n    }\n    return {\n        x: newX,\n        y: newY,\n    };\n}\n//# sourceMappingURL=xyFilterTopYValues.js.map","import { zonesNormalize } from \"../zones/index.js\";\n/**\n * Filter an array x/y based on various criteria x points are expected to be sorted\n * @param data - object containing 2 properties x and y\n * @param options - options\n * @returns filtered array\n */\nexport function xyFilterX(data, options = {}) {\n    const { x, y } = data;\n    if (x.length === 0) {\n        return {\n            x: Array.from(x),\n            y: Array.from(y),\n        };\n    }\n    const { from = x[0], to = x.at(-1), zones = [{ from, to }], exclusions = [], } = options;\n    const normalizedZones = zonesNormalize(zones, { from, to, exclusions });\n    let currentZoneIndex = 0;\n    const newX = [];\n    const newY = [];\n    let position = 0;\n    while (position < x.length) {\n        if (x[position] <= normalizedZones[currentZoneIndex].to &&\n            x[position] >= normalizedZones[currentZoneIndex].from) {\n            newX.push(x[position]);\n            newY.push(y[position]);\n        }\n        else if (x[position] > normalizedZones[currentZoneIndex].to) {\n            currentZoneIndex++;\n            if (!normalizedZones[currentZoneIndex])\n                break;\n        }\n        position++;\n    }\n    return {\n        x: newX,\n        y: newY,\n    };\n}\n//# sourceMappingURL=xyFilterX.js.map","import { xyCheck } from \"./xyCheck.js\";\n/**\n * Filter out all the points for which x <= 0. Useful to display log scale data\n * @param data - data\n * @returns - An object with the filtered data\n */\nexport function xyFilterXPositive(data) {\n    xyCheck(data);\n    const { x, y } = data;\n    const newX = [];\n    const newY = [];\n    if (x === undefined || y === undefined) {\n        return { x: newX, y: newY };\n    }\n    for (let i = 0; i < x.length; i++) {\n        if (x[i] > 0) {\n            newX.push(x[i]);\n            newY.push(y[i]);\n        }\n    }\n    return { x: newX, y: newY };\n}\n//# sourceMappingURL=xyFilterXPositive.js.map","import { xFindClosestIndex } from \"../x/index.js\";\n/**\n * Finds the closest point\n * @param data - x array should be sorted and ascending\n * @param target - target to search\n * @returns - closest point\n */\nexport function xyFindClosestPoint(\n/** points */\ndata, target) {\n    const { x, y } = data;\n    const index = xFindClosestIndex(x, target);\n    return {\n        x: x[index],\n        y: y[index],\n    };\n}\n//# sourceMappingURL=xyFindClosestPoint.js.map","import { xyCheck } from \"./xyCheck.js\";\n/**\n * Returns the numberMaxPoints points with the bigger y.\n * @param data - Object that contains property x (an ordered increasing array) and y (an array)\n * @param numberMaxPoints - Number of points to keep\n * @returns - The points filtered to keep the `numberMaxPoints` most intense points of the input.\n */\nexport function xyGetNMaxY(data, numberMaxPoints) {\n    xyCheck(data);\n    if (data.x.length <= numberMaxPoints) {\n        return data;\n    }\n    else {\n        const newX = new Float64Array(numberMaxPoints);\n        const newY = new Float64Array(numberMaxPoints);\n        const floatY = Float64Array.from(data.y);\n        floatY.sort();\n        floatY.reverse();\n        const threshold = floatY[numberMaxPoints - 1];\n        let index = 0;\n        for (let i = 0; i < data.x.length; i++) {\n            if (data.y[i] >= threshold) {\n                newX[index] = data.x[i];\n                newY[index] = data.y[i];\n                index++;\n            }\n            if (index === numberMaxPoints) {\n                return { x: newX, y: newY };\n            }\n        }\n        return data;\n    }\n}\n//# sourceMappingURL=xyGetNMaxY.js.map","/**\n * Order object of array, x has to be monotone. Ensure x is growing\n * @param data - Object of kind {x:[], y:[]}.\n */\nexport function xyGrowingX(data) {\n    const { x, y } = data;\n    if (x.length !== y.length) {\n        throw new TypeError('length of x and y must be identical');\n    }\n    if (x.length < 2 || x[0] < x.at(-1))\n        return data;\n    return {\n        x: x.toReversed(),\n        y: y.toReversed(),\n    };\n}\n//# sourceMappingURL=xyGrowingX.js.map","import { xGetFromToIndex } from \"../x/index.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Generate a X / Y of the xyIntegral\n * @param data - Object that contains property x (an ordered increasing array) and y (an array)\n * @param options - Options\n * @returns - An object with the xyIntegration function\n */\nexport function xyIntegral(data, options = {}) {\n    const { reverse = false } = options;\n    xyCheck(data, { minLength: 1 });\n    const { x, y } = data;\n    const { fromIndex, toIndex } = xGetFromToIndex(x, options);\n    let xyIntegration = 0;\n    const currentxyIntegral = {\n        x: new Float64Array(toIndex - fromIndex + 1),\n        y: new Float64Array(toIndex - fromIndex + 1),\n    };\n    let index = 0;\n    if (reverse) {\n        currentxyIntegral.y[index] = 0;\n        currentxyIntegral.x[index++] = x[toIndex];\n        for (let i = toIndex; i > fromIndex; i--) {\n            xyIntegration += ((x[i] - x[i - 1]) * (y[i - 1] + y[i])) / 2;\n            currentxyIntegral.x[index] = x[i - 1];\n            currentxyIntegral.y[index++] = xyIntegration;\n        }\n        currentxyIntegral.x.reverse();\n        currentxyIntegral.y.reverse();\n    }\n    else {\n        currentxyIntegral.y[index] = 0;\n        currentxyIntegral.x[index++] = x[fromIndex];\n        for (let i = fromIndex; i < toIndex; i++) {\n            xyIntegration += ((x[i + 1] - x[i]) * (y[i + 1] + y[i])) / 2;\n            currentxyIntegral.x[index] = x[i + 1];\n            currentxyIntegral.y[index++] = xyIntegration;\n        }\n    }\n    return currentxyIntegral;\n}\n//# sourceMappingURL=xyIntegral.js.map","import { xGetFromToIndex } from \"../x/index.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Calculate integration\n * @param data - Object that contains property x (an ordered increasing array) and y (an array)\n * @param options - Options\n * @returns - xyIntegration value on the specified range\n */\nexport function xyIntegration(data, options = {}) {\n    xyCheck(data, { minLength: 1 });\n    const { x, y } = data;\n    if (x.length === 1)\n        return 0;\n    const { fromIndex, toIndex } = xGetFromToIndex(x, options);\n    let currentxyIntegration = 0;\n    for (let i = fromIndex; i < toIndex; i++) {\n        currentxyIntegration += ((x[i + 1] - x[i]) * (y[i + 1] + y[i])) / 2;\n    }\n    return currentxyIntegration;\n}\n//# sourceMappingURL=xyIntegration.js.map","import { xyCheck } from \"./xyCheck.js\";\n/**\n * Interpolate y values at target x positions using linear interpolation.\n * This is useful for upsampling or resampling data to specific x positions.\n * Both the input data and target x values must be sorted in ascending order.\n * Uses a two-pointer approach with O(n + m) complexity.\n * @param data - Object that contains property x (an ordered increasing array) and y (an array)\n * @param xTarget - Target x positions where y values should be interpolated\n * @returns - Interpolated y values at target x positions\n */\nexport function xyInterpolateLinear(data, xTarget) {\n    xyCheck(data);\n    const { x, y } = data;\n    if (x.length === 0) {\n        return new Float64Array(0);\n    }\n    const result = new Float64Array(xTarget.length);\n    let sparseIndex = 0;\n    for (let i = 0; i < xTarget.length; i++) {\n        const targetX = xTarget[i];\n        // Move sparse index forward while we can\n        while (sparseIndex < x.length - 1 && x[sparseIndex + 1] < targetX) {\n            sparseIndex++;\n        }\n        // Handle edge cases\n        if (sparseIndex === 0 && targetX <= x[0]) {\n            // Before first point\n            if (x.length === 1) {\n                result[i] = y[0];\n            }\n            else {\n                // Extrapolate using first two points\n                const t = (targetX - x[0]) / (x[1] - x[0]);\n                result[i] = y[0] * (1 - t) + y[1] * t;\n            }\n        }\n        else if (sparseIndex >= x.length - 1) {\n            // After last point\n            result[i] = y[x.length - 1];\n        }\n        else {\n            // Normal interpolation between two points\n            const leftIdx = sparseIndex;\n            const rightIdx = sparseIndex + 1;\n            const t = (targetX - x[leftIdx]) / (x[rightIdx] - x[leftIdx]);\n            result[i] = y[leftIdx] * (1 - t) + y[rightIdx] * t;\n        }\n    }\n    return result;\n}\n//# sourceMappingURL=xyInterpolateLinear.js.map","import { xGetFromToIndex } from \"../x/xGetFromToIndex.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Computes the weighted mean value of an array of values.\n * @param data - array of DataXY\n * @param options - options\n */\nexport function xyMassCenter(data, options = {}) {\n    xyCheck(data, { minLength: 1 });\n    const { x, y } = data;\n    const { fromIndex, toIndex } = xGetFromToIndex(x, options);\n    let sumYs = 0;\n    let sumProducts = 0;\n    for (let i = fromIndex; i <= toIndex; i++) {\n        sumProducts += x[i] * y[i];\n        sumYs += y[i];\n    }\n    if (sumYs === 0) {\n        throw new Error('Sum of Ys can not be zero.');\n    }\n    return sumProducts / sumYs;\n}\n//# sourceMappingURL=xyMassCenter.js.map","import { xFindClosestIndex } from \"../x/index.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * We will calculate a vector containing center of mass of DataXY as well as center of mass of both parts, etc.\n * This approach allows to efficiently represent spectra like XPS, NMR, etc. It should provide an extremely efficient\n * way to store and search similar spectra.\n * @param data - Object that contains property x (an ordered increasing array) and y (an array)\n * @param options\n * @returns - Array of centers of mass\n */\nexport function xyMassCenterVector(data, options = {}) {\n    xyCheck(data, { minLength: 2 });\n    const { depth = 5 } = options;\n    const { weightedIntegral, integral } = getWeightedIntegral(data);\n    const results = new Float64Array((1 << depth) - 1);\n    const endIndexes = new Int32Array((1 << depth) - 1);\n    endIndexes[0] = data.x.length - 1;\n    const beginIndexes = new Int32Array((1 << depth) - 1);\n    beginIndexes[0] = -1;\n    let index = 0;\n    for (let i = 0; i < depth; i++) {\n        for (let j = 0; j < 1 << i; j++) {\n            const currentBeginIndex = beginIndexes[index];\n            const currentEndIndex = endIndexes[index];\n            const currentIntegration = currentBeginIndex === -1\n                ? integral[currentEndIndex]\n                : integral[currentEndIndex] - integral[currentBeginIndex];\n            // we need to solve the issue of null integration (rather in simulated spectra).\n            let x = 0;\n            if (currentIntegration !== 0) {\n                x =\n                    currentBeginIndex === -1\n                        ? weightedIntegral[currentEndIndex] / currentIntegration\n                        : (weightedIntegral[currentEndIndex] -\n                            weightedIntegral[currentBeginIndex]) /\n                            currentIntegration;\n            }\n            else {\n                x = (data.x[currentEndIndex] + data.x[currentBeginIndex]) / 2;\n            }\n            results[index++] = x;\n            // we can now prepare the next level\n            if (i < depth - 1) {\n                const nextIndex = (1 << (i + 1)) + j * 2 - 1;\n                let middleIndex = xFindClosestIndex(data.x, x);\n                if (middleIndex === currentBeginIndex) {\n                    middleIndex++;\n                }\n                beginIndexes[nextIndex] = currentBeginIndex;\n                endIndexes[nextIndex] = middleIndex;\n                if (middleIndex === currentEndIndex) {\n                    middleIndex--;\n                }\n                beginIndexes[nextIndex + 1] = middleIndex;\n                endIndexes[nextIndex + 1] = currentEndIndex;\n            }\n        }\n    }\n    return results;\n}\nfunction getWeightedIntegral(data) {\n    const { x, y } = data;\n    const weightedIntegral = new Float64Array(x.length);\n    const integral = new Float64Array(x.length);\n    // the first point, no points before\n    const firstIntegration = (x[1] - x[0]) * y[0];\n    let totalIntegration = firstIntegration;\n    integral[0] = totalIntegration;\n    let totalWeightedIntegral = firstIntegration * x[0];\n    weightedIntegral[0] = totalWeightedIntegral;\n    for (let i = 1; i < x.length - 1; i++) {\n        const currentIntegration = ((x[i + 1] - x[i - 1]) * y[i]) / 2;\n        const currentX = x[i];\n        totalIntegration += currentIntegration;\n        integral[i] = totalIntegration;\n        totalWeightedIntegral += currentIntegration * currentX;\n        weightedIntegral[i] = totalWeightedIntegral;\n    }\n    // the last point, no points after\n    const lastIntegration = (x.at(-1) - x.at(-2)) * y.at(-1);\n    totalIntegration += lastIntegration;\n    integral[x.length - 1] = totalIntegration;\n    totalWeightedIntegral += lastIntegration * x.at(-1);\n    weightedIntegral[x.length - 1] = totalWeightedIntegral;\n    return { integral, weightedIntegral };\n}\n//# sourceMappingURL=xyMassCenterVector.js.map","import { xFindClosestIndex } from \"../x/index.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Find the closest maximum going up hill\n * @param data - Object that contains property x (an ordered increasing array) and y (an array)\n * @param options - options\n * @returns - An object with the x/y value\n */\nexport function xyMaxClosestYPoint(data, options = {}) {\n    xyCheck(data);\n    const { x, y } = data;\n    const { target } = options;\n    let { targetIndex } = options;\n    if (targetIndex === undefined) {\n        if (target !== undefined) {\n            targetIndex = xFindClosestIndex(x, target);\n        }\n        else {\n            targetIndex = 0;\n        }\n    }\n    let previousIndex = Number.MIN_SAFE_INTEGER;\n    let currentIndex = targetIndex;\n    let xyMaxY = y[targetIndex];\n    while (currentIndex !== previousIndex) {\n        previousIndex = currentIndex;\n        if (currentIndex > 0 && y[currentIndex - 1] > xyMaxY) {\n            currentIndex--;\n        }\n        else if (currentIndex < x.length - 1 && y[currentIndex + 1] > xyMaxY) {\n            currentIndex++;\n        }\n        xyMaxY = y[currentIndex];\n    }\n    return {\n        x: x[currentIndex],\n        y: y[currentIndex],\n        index: currentIndex,\n    };\n}\n//# sourceMappingURL=xyMaxClosestYPoint.js.map","/**\n * Merge abscissas values on similar ordinates and weight the group of abscissas\n * @param data - object containing 2 properties x and y\n * @param options - options\n * @returns array of merged and weighted points\n */\nexport function xyMaxMerge(data, options = {}) {\n    const { x, y } = data;\n    const { groupWidth = 0.001 } = options;\n    const merged = { x: [], y: [] };\n    const maxAbscissa = { x: [], y: [] };\n    let size = 0;\n    let index = 0;\n    while (index < x.length) {\n        if (size === 0 || x[index] - merged.x[size - 1] > groupWidth) {\n            maxAbscissa.x.push(x[index]);\n            maxAbscissa.y.push(y[index]);\n            merged.x.push(x[index]);\n            merged.y.push(y[index]);\n            index++;\n            size++;\n        }\n        else {\n            if (y[index] > maxAbscissa.y[size - 1]) {\n                maxAbscissa.x[size - 1] = x[index];\n                maxAbscissa.y[size - 1] = y[index];\n            }\n            merged.x[size - 1] = x[index];\n            merged.y[size - 1] += y[index];\n            index++;\n        }\n    }\n    merged.x = maxAbscissa.x.slice();\n    return merged;\n}\n//# sourceMappingURL=xyMaxMerge.js.map","import { xGetFromToIndex } from \"../x/index.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Finds the max value in a zone\n * @param data - Object that contains property x (an ordered increasing array) and y (an array)\n * @param options - Options\n * @returns - Max y on the specified range\n */\nexport function xyMaxY(data, options = {}) {\n    xyCheck(data);\n    const { x, y } = data;\n    const { fromIndex, toIndex } = xGetFromToIndex(x, options);\n    let currentxyMaxY = y[fromIndex];\n    for (let i = fromIndex; i <= toIndex; i++) {\n        if (y[i] > currentxyMaxY)\n            currentxyMaxY = y[i];\n    }\n    return currentxyMaxY;\n}\n//# sourceMappingURL=xyMaxY.js.map","import { xGetFromToIndex } from \"../x/xGetFromToIndex.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Finds all the max values\n * If the values are equal the middle\n * of the equal part will be the position of the signal!\n * @param data - Object that contains property x (an ordered increasing array) and y (an array)\n * @param options - Object with from and to properties\n * @returns - Array of points\n */\nexport function xyMaximaY(data, options = {}) {\n    xyCheck(data, { minLength: 2 });\n    const { x, y } = data;\n    const { fromIndex, toIndex } = xGetFromToIndex(x, options);\n    const maxima = [];\n    let startEqualIndex = -1;\n    for (let i = fromIndex + 1; i < toIndex; i++) {\n        if (y[i - 1] < y[i] && y[i + 1] < y[i]) {\n            maxima.push({ x: x[i], y: y[i], index: i });\n        }\n        else if (y[i - 1] < y[i] && y[i + 1] === y[i]) {\n            startEqualIndex = i;\n        }\n        else if (y[i - 1] === y[i] && y[i + 1] < y[i]) {\n            const index = Math.floor((i + startEqualIndex) / 2);\n            maxima.push({ x: x[index], y: y[index], index });\n        }\n    }\n    return maxima;\n}\n//# sourceMappingURL=xyMaximaY.js.map","/**\n * Computes the weighted median of the x values, using the y values as weights.\n * This is the x value that splits the total weight (sum of y) into two equal halves.\n * If the cumulative weight lands exactly at 50%, the result is the average of the two surrounding x values.\n * @param data - x should be sorted in increasing order, y values are used as weights and should be non-negative.\n * @returns The weighted median x value, or NaN if the data is empty.\n */\nexport function xyMedian(data) {\n    const { x, y } = data;\n    let sumY = 0;\n    let cumSumY = 0;\n    let i;\n    if (x.length === 0) {\n        return Number.NaN;\n    }\n    if (x.length === 1) {\n        return x[0];\n    }\n    for (i = 0; i < y.length; i++) {\n        sumY += y[i];\n    }\n    for (i = 0; i < y.length; i++) {\n        cumSumY += y[i];\n        if (cumSumY > sumY / 2) {\n            return x[i];\n        }\n        else if (cumSumY === sumY / 2) {\n            return 0.5 * (x[i] + x[i + 1]);\n        }\n    }\n    return Number.NaN;\n}\n//# sourceMappingURL=xyMedian.js.map","import { xMedian } from \"../x/xMedian.js\";\n/**\n * Computes the median of Y values in a sliding window around each point.\n * @param data - Object with x and y arrays of the same length.\n * @param options - Options for the median computation.\n * @returns A new DataXY with the same x values and smoothed y values.\n */\nexport function xyMedianY(data, options = {}) {\n    const { windowSize = 5 } = options;\n    const { x, y } = data;\n    const halfWindow = Math.floor(windowSize / 2);\n    const result = new Float64Array(y.length);\n    for (let i = 0; i < y.length; i++) {\n        const fromIndex = Math.max(0, i - halfWindow);\n        const toIndex = Math.min(y.length, i + halfWindow + 1);\n        const window = ArrayBuffer.isView(y)\n            ? y.subarray(fromIndex, toIndex)\n            : y.slice(fromIndex, toIndex);\n        result[i] = xMedian(window, { exact: false });\n    }\n    return { x, y: result };\n}\n//# sourceMappingURL=xyMedianY.js.map","import { xFindClosestIndex } from \"../x/xFindClosestIndex.js\";\nimport { xMedian } from \"../x/xMedian.js\";\n/**\n * Computes the median of Y values in a sliding window around each target x position.\n * For each value in xValues, the closest index in data.x is found and the median\n * of the surrounding y values (within the window) is returned.\n * @param data - Object with x (sorted in increasing order) and y arrays of the same length.\n * @param xValues - Array of x positions at which to compute the median.\n * @param options - Options for the median computation.\n * @returns A new DataXY with x = xValues and y = computed medians.\n */\nexport function xyMedianYAtXs(data, xValues, options = {}) {\n    const { windowSize = 5 } = options;\n    const { x, y } = data;\n    const halfWindow = Math.floor(windowSize / 2);\n    const result = new Float64Array(xValues.length);\n    for (let i = 0; i < xValues.length; i++) {\n        const centerIndex = xFindClosestIndex(x, xValues[i]);\n        const fromIndex = Math.max(0, centerIndex - halfWindow);\n        const toIndex = Math.min(y.length, centerIndex + halfWindow + 1);\n        const window = ArrayBuffer.isView(y)\n            ? y.subarray(fromIndex, toIndex)\n            : y.slice(fromIndex, toIndex);\n        result[i] = xMedian(window, { exact: false });\n    }\n    return { x: xValues, y: result };\n}\n//# sourceMappingURL=xyMedianYAtXs.js.map","/**\n * Merge abscissa values if the ordinate value is in a list of centroids\n * @param data - object containing 2 properties x and y\n * @param centroids - centroids\n * @param options - options\n * @returns merged points\n */\nexport function xyMergeByCentroids(data, centroids, options = {}) {\n    const { window = 0.01 } = options;\n    const mergedPoints = {\n        x: Float64Array.from(centroids),\n        y: new Float64Array(centroids.length).fill(0),\n    };\n    let originalIndex = 0;\n    let mergedIndex = 0;\n    while (originalIndex < data.x.length && mergedIndex < centroids.length) {\n        const diff = data.x[originalIndex] - centroids[mergedIndex];\n        if (Math.abs(diff) < window) {\n            mergedPoints.y[mergedIndex] += data.y[originalIndex++];\n        }\n        else if (diff < 0) {\n            originalIndex++;\n        }\n        else {\n            mergedIndex++;\n        }\n    }\n    return mergedPoints;\n}\n//# sourceMappingURL=xyMergeByCentroids.js.map","import { xFindClosestIndex } from \"../x/index.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Find the closest minimum going down hill\n * @param data - Object that contains property x (an ordered increasing array) and y (an array)\n * @param options - Options\n * @returns - An object with the x/y value\n */\nexport function xyMinClosestYPoint(data, options = {}) {\n    xyCheck(data);\n    const { x, y } = data;\n    const { target } = options;\n    let { targetIndex } = options;\n    if (targetIndex === undefined) {\n        if (target !== undefined) {\n            targetIndex = xFindClosestIndex(x, target);\n        }\n        else {\n            targetIndex = 0;\n        }\n    }\n    let previousIndex = Number.MIN_SAFE_INTEGER;\n    let currentIndex = targetIndex;\n    let minY = y[targetIndex];\n    while (currentIndex !== previousIndex) {\n        previousIndex = currentIndex;\n        if (currentIndex > 0 && y[currentIndex - 1] < minY) {\n            currentIndex--;\n        }\n        else if (currentIndex < x.length - 1 && y[currentIndex + 1] < minY) {\n            currentIndex++;\n        }\n        minY = y[currentIndex];\n    }\n    return {\n        x: x[currentIndex],\n        y: y[currentIndex],\n        index: currentIndex,\n    };\n}\n//# sourceMappingURL=xyMinClosestYPoint.js.map","import { xGetFromToIndex } from \"../x/index.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Finds the min y value in a range and return a {x,y} point\n * @param data - Object that contains property x (an ordered increasing array) and y (an array)\n * @param options - Options\n */\nexport function xyMinYPoint(data, options = {}) {\n    xyCheck(data, { minLength: 1 });\n    const { x, y } = data;\n    if (x.length === 1)\n        return { x: x[0], y: y[0], index: 0 };\n    const { fromIndex, toIndex } = xGetFromToIndex(x, options);\n    let current = {\n        x: x[fromIndex],\n        y: y[fromIndex],\n        index: fromIndex,\n    };\n    for (let i = fromIndex; i <= toIndex; i++) {\n        if (y[i] < current.y)\n            current = { x: x[i], y: y[i], index: i };\n    }\n    return current;\n}\n//# sourceMappingURL=xyMinYPoint.js.map","import { xGetFromToIndex } from \"../x/xGetFromToIndex.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Finds all the min values\n * If the values are equal the middle\n * of the equal part will be the position of the signal!\n * @param data - Object that contains property X (an ordered increasing array) and y (an arraY)\n * @param options - Object with from and to properties\n * @returns - Array of points.\n */\nexport function xyMinimaY(data, options = {}) {\n    xyCheck(data, { minLength: 2 });\n    const { x, y } = data;\n    const { fromIndex, toIndex } = xGetFromToIndex(x, options);\n    const maxima = [];\n    let startEqualIndex = -1;\n    for (let i = fromIndex + 1; i < toIndex; i++) {\n        if (y[i - 1] > y[i] && y[i + 1] > y[i]) {\n            maxima.push({ x: x[i], y: y[i], index: i });\n        }\n        else if (y[i - 1] > y[i] && y[i + 1] === y[i]) {\n            startEqualIndex = i;\n        }\n        else if (y[i - 1] === y[i] && y[i + 1] > y[i]) {\n            const index = Math.floor((i + startEqualIndex) / 2);\n            maxima.push({ x: x[index], y: y[index], index });\n        }\n    }\n    return maxima;\n}\n//# sourceMappingURL=xyMinimaY.js.map","import { xyObjectMaxXPoint } from \"./xyObjectMaxXPoint.js\";\nimport { xyObjectMinXPoint } from \"./xyObjectMinXPoint.js\";\n/**\n * Filter the array by taking the higher points (max y value) and only.\n * Keep one per slot. There are 2 different slots, the smallest one will have the\n * new property `close` to true\n * @param points - array of all the points\n * @param options - Options\n * @returns - copy of points with 'close' property\n */\nexport function xyObjectBestPoints(points, options = {}) {\n    const { from = xyObjectMinXPoint(points).x, to = xyObjectMaxXPoint(points).x, limit = 20, threshold = 0.01, numberCloseSlots = 50, numberSlots = 10, } = options;\n    const slot = (to - from) / numberSlots;\n    const closeSlot = (to - from) / numberCloseSlots;\n    const selected = points\n        .filter((point) => point.x >= from && point.x <= to)\n        .map((point) => {\n        return {\n            point,\n        };\n    });\n    selected.sort((a, b) => {\n        return b.point.y - a.point.y;\n    });\n    const toReturn = [];\n    if (selected.length === 0)\n        return [];\n    const minY = selected[0].point.y * threshold;\n    peakLoop: for (const item of selected) {\n        if (item.point.y < minY) {\n            break;\n        }\n        let close = false;\n        for (const existing of toReturn) {\n            if (Math.abs(existing.x - item.point.x) < closeSlot) {\n                continue peakLoop;\n            }\n            if (Math.abs(existing.x - item.point.x) < slot) {\n                close = true;\n            }\n        }\n        const newPeak = { ...item.point, close };\n        toReturn.push(newPeak);\n        if (toReturn.length === limit)\n            break;\n    }\n    toReturn.sort((a, b) => a.x - b.x);\n    return toReturn;\n}\n//# sourceMappingURL=xyObjectBestPoints.js.map","/**\n * xyObjectJoinX.\n * @param points - Array of growing points {x,y}.\n * @param options - Options.\n */\nexport function xyObjectJoinX(points, options = {}) {\n    const { xError = Number.EPSILON } = options;\n    // when we join we will use the center of mass\n    const result = [];\n    let current = {\n        x: Number.MIN_SAFE_INTEGER,\n        y: 0,\n    };\n    for (const point of points) {\n        if (point.x - current.x <= xError) {\n            // weighted sum\n            if (current.y !== 0 || point.y !== 0) {\n                current.x =\n                    (point.y / (current.y + point.y)) * (point.x - current.x) + current.x;\n                current.y += point.y;\n            }\n        }\n        else {\n            current = {\n                x: point.x,\n                y: point.y,\n            };\n            result.push(current);\n        }\n    }\n    return result;\n}\n//# sourceMappingURL=xyObjectJoinX.js.map","import { xyObjectCheck } from \"./xyObjectCheck.js\";\n/**\n * Finds the max y value and return a {x,y,index} point\n * @param points - Object that contains property x (an ordered increasing array) and y (an array)\n * @returns max point\n */\nexport function xyObjectMaxYPoint(points = []) {\n    xyObjectCheck(points);\n    if (points.length === 0)\n        return { x: 0, y: 0 };\n    let current = {\n        x: points[0].x,\n        y: points[0].y,\n        index: 0,\n    };\n    for (let i = 1; i < points.length; i++) {\n        if (points[i].y > current.y) {\n            current = {\n                x: points[i].x,\n                y: points[i].y,\n                index: i,\n            };\n        }\n    }\n    return current;\n}\n//# sourceMappingURL=xyObjectMaxYPoint.js.map","import { xyObjectCheck } from \"./xyObjectCheck.js\";\n/**\n * Returns all min and max values of an array of points.\n * @param points - Array of points {x,y}.\n * @returns - Object with the 4 extrema.\n */\nexport function xyObjectMinMaxValues(points) {\n    xyObjectCheck(points, { minLength: 1 });\n    let minX = points[0].x;\n    let maxX = minX;\n    let minY = points[0].y;\n    let maxY = minY;\n    for (const point of points) {\n        if (point.x < minX)\n            minX = point.x;\n        if (point.x > maxX)\n            maxX = point.x;\n        if (point.y < minY)\n            minY = point.y;\n        if (point.y > maxY)\n            maxY = point.y;\n    }\n    return { minX, maxX, minY, maxY };\n}\n//# sourceMappingURL=xyObjectMinMaxValues.js.map","import { xyObjectCheck } from \"./xyObjectCheck.js\";\n/**\n * Finds the min y value and return a {x,y,index} point\n * @param points - Object that contains property x (an ordered increasing array) and y (an array)\n */\nexport function xyObjectMinYPoint(points = []) {\n    xyObjectCheck(points);\n    if (points.length === 0)\n        return { x: 0, y: 0 };\n    let current = {\n        x: points[0].x,\n        y: points[0].y,\n        index: 0,\n    };\n    for (let i = 1; i < points.length; i++) {\n        if (points[i].y < current.y) {\n            current = {\n                x: points[i].x,\n                y: points[i].y,\n                index: i,\n            };\n        }\n    }\n    return current;\n}\n//# sourceMappingURL=xyObjectMinYPoint.js.map","import { xNormed } from \"../x/xNormed.js\";\n/**\n * Resize the Y values of the points to be normalized.\n * @param points - array of points {x,y}\n * @param options\n * @returns - array of points {x,y} with normalized Y values\n */\nexport function xyObjectNormedY(points, options) {\n    points = structuredClone(points);\n    const ys = points.map((point) => point.y);\n    const normalizedYs = xNormed(ys, options);\n    for (let i = 0; i < points.length; i++) {\n        points[i].y = normalizedYs[i];\n    }\n    return points;\n}\n//# sourceMappingURL=xyObjectNormedY.js.map","/**\n * xyObjectSlotX\n * @param points - Array of growing points {x,y}.\n * @param options - Options.\n */\nexport function xyObjectSlotX(points, options = {}) {\n    const { slotWidth = 1 } = options;\n    const halfSlot = slotWidth / 2;\n    // when we join we will use the center of mass\n    const result = [];\n    let current = {\n        x: Number.NEGATIVE_INFINITY,\n        y: 0,\n    };\n    for (const point of points) {\n        const slot = point.x - ((point.x + halfSlot) % slotWidth) + halfSlot;\n        if (Math.abs(current.x - slot) > Number.EPSILON) {\n            current = {\n                x: slot,\n                y: 0,\n            };\n            result.push(current);\n        }\n        current.y += point.y;\n    }\n    return result;\n}\n//# sourceMappingURL=xyObjectSlotX.js.map","/**\n * Sorts an array of points in-place.\n * @param points - array of points {x,y}\n * @returns - sorted array of points {x,y}\n */\nexport function xyObjectSortX(points) {\n    points.sort((a, b) => a.x - b.x);\n    return points;\n}\n//# sourceMappingURL=xyObjectSortX.js.map","import { xyObjectCheck } from \"./xyObjectCheck.js\";\n/**\n * Calculate the sum of Y values.\n * @param points - Object that contains property x and y (an array)\n */\nexport function xyObjectSumY(points = []) {\n    xyObjectCheck(points);\n    let sum = 0;\n    for (const point of points) {\n        sum += point.y;\n    }\n    return sum;\n}\n//# sourceMappingURL=xyObjectSumY.js.map","/**\n * xyObjectToXY.\n * @param points - Array of points {x,y}.\n */\nexport function xyObjectToXY(points) {\n    return {\n        x: points.map((entry) => entry.x),\n        y: points.map((entry) => entry.y),\n    };\n}\n//# sourceMappingURL=xyObjectToXY.js.map","import { xFindClosestIndex } from \"../x/index.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Returns an information about a signal.\n *\n *\n * We expect ordered data and equidistant X axis\n * You can use the method helper if required:\n * ML.ArrayPoints.uniqueX\n * ML.ArrayPoints.sortX\n * ML.ArrayPoints.equallySpaced\n * @param data - Object that contains property x (an ordered increasing array) and y (an array)\n * @param options - options\n * @returns - Information about signal\n */\nexport function xyPeakInfo(data, options = {}) {\n    xyCheck(data);\n    const { x, y } = data;\n    if (x === undefined || y === undefined || x.length < 3) {\n        return;\n    }\n    const { target } = options;\n    let { targetIndex } = options;\n    if (targetIndex === undefined && target !== undefined) {\n        targetIndex = xFindClosestIndex(x, target);\n    }\n    if (targetIndex === undefined) {\n        throw new Error('must specify target or targetIndex');\n    }\n    let i = targetIndex;\n    let currentDiff = y[i] - y[i + 1];\n    const multiplier = currentDiff < 0 ? -1 : 1;\n    currentDiff *= multiplier;\n    while (i < x.length - 1) {\n        i++;\n        const newDiff = (y[i] - y[i + 1]) * multiplier;\n        if (newDiff < currentDiff)\n            break;\n        currentDiff = newDiff;\n    }\n    const after = { x: x[i], y: y[i] };\n    i = targetIndex;\n    currentDiff = (y[i] - y[i - 1]) * multiplier;\n    while (i > 1) {\n        i--;\n        const newDiff = (y[i] - y[i - 1]) * multiplier;\n        if (newDiff < currentDiff)\n            break;\n        currentDiff = newDiff;\n    }\n    const before = { x: x[i], y: y[i] };\n    return {\n        inflectionBefore: before,\n        inflectionAfter: after,\n        extrema: { x: x[targetIndex], y: y[targetIndex] },\n        inflectionMiddle: {\n            x: (before.x + after.x) / 2,\n            y: (before.y + after.y) / 2,\n        },\n        width: Math.abs(before.x - after.x),\n    };\n}\n//# sourceMappingURL=xyPeakInfo.js.map","import { xGetTargetIndex } from \"../x/index.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Find the closest minimum going down hill\n * @param data - Object that contains property x (an ordered increasing array) and y (an array)\n * @param options - options\n * @returns - An object with the x/y value\n */\nexport function xyRealMaxYPoint(data, options = {}) {\n    xyCheck(data);\n    const { x, y } = data;\n    const targetIndex = xGetTargetIndex(x, options);\n    // interpolation to a sin() function\n    if (y[targetIndex - 1] > 0 &&\n        y[targetIndex + 1] > 0 &&\n        y[targetIndex] >= y[targetIndex - 1] &&\n        y[targetIndex] >= y[targetIndex + 1]) {\n        const alpha = 20 * Math.log10(y[targetIndex - 1]);\n        const beta = 20 * Math.log10(y[targetIndex]);\n        const gamma = 20 * Math.log10(y[targetIndex + 1]);\n        const p = (0.5 * (alpha - gamma)) / (alpha - 2 * beta + gamma);\n        return {\n            x: x[targetIndex] + (x[targetIndex] - x[targetIndex - 1]) * p,\n            y: y[targetIndex] - 0.25 * (y[targetIndex - 1] - y[targetIndex + 1]) * p,\n            index: targetIndex,\n        };\n    }\n    else {\n        return {\n            x: x[targetIndex],\n            y: y[targetIndex],\n            index: targetIndex,\n        };\n    }\n}\n//# sourceMappingURL=xyRealMaxYPoint.js.map","import { xGetTargetIndex } from \"../x/index.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * xyRealMinYPoint.\n * @param data - Data.\n * @param options - Options.\n */\nexport function xyRealMinYPoint(data, options = {}) {\n    xyCheck(data);\n    const { x, y } = data;\n    const targetIndex = xGetTargetIndex(x, options);\n    // interpolation to a sin() function\n    if (y[targetIndex - 1] < 0 &&\n        y[targetIndex + 1] < 0 &&\n        y[targetIndex] <= y[targetIndex - 1] &&\n        y[targetIndex] <= y[targetIndex + 1]) {\n        const alpha = 20 * Math.log10(-y[targetIndex - 1]);\n        const beta = 20 * Math.log10(-y[targetIndex]);\n        const gamma = 20 * Math.log10(-y[targetIndex + 1]);\n        const p = (0.5 * (alpha - gamma)) / (alpha - 2 * beta + gamma);\n        return {\n            x: x[targetIndex] + (x[targetIndex] - x[targetIndex - 1]) * p,\n            y: y[targetIndex] - 0.25 * (y[targetIndex - 1] - y[targetIndex + 1]) * p,\n            index: targetIndex,\n        };\n    }\n    else {\n        return {\n            x: x[targetIndex],\n            y: y[targetIndex],\n            index: targetIndex,\n        };\n    }\n}\n//# sourceMappingURL=xyRealMinYPoint.js.map","import { zonesNormalize } from \"../zones/index.js\";\nimport { xyCheck } from \"./xyCheck.js\";\nimport { getInternalZones, notEnoughPoints } from \"./xyReduce.js\";\n/**\n * Reduce the number of points while keeping visually the same noise. Practical to\n * display many spectra as SVG. This algorithm is designed for non-continuous data.\n * We are expecting peaks to be only positive and the x values to be ordered.\n * SHOULD NOT BE USED FOR DATA PROCESSING !!!\n * @param data - Object that contains property x (an ordered increasing array) and y (an array)\n * @param options - options\n * @returns Object with x and y arrays\n */\nexport function xyReduceNonContinuous(data, options = {}) {\n    xyCheck(data);\n    if (data.x.length < 2) {\n        // todo we should check that the single point is really in the range and the zones\n        return {\n            x: Float64Array.from(data.x),\n            y: Float64Array.from(data.y),\n        };\n    }\n    const { x, y } = data;\n    const { from = x[0], to = x.at(-1), maxApproximateNbPoints = 4001, } = options;\n    let { zones = [] } = options;\n    zones = zonesNormalize(zones, { from, to });\n    if (zones.length === 0)\n        zones = [{ from, to }]; // we take everything\n    const { internalZones, totalPoints } = getInternalZones(zones, x);\n    // we calculate the number of points per zone that we should keep\n    if (totalPoints <= maxApproximateNbPoints) {\n        return notEnoughPoints(x, y, internalZones, totalPoints);\n    }\n    const deltaX = (to - from) / (maxApproximateNbPoints - 1);\n    const newX = [];\n    const newY = [];\n    for (const internalZone of internalZones) {\n        const maxNbPoints = Math.ceil((internalZone.to - internalZone.from) / deltaX) + 1;\n        const fromIndex = internalZone.fromIndex;\n        const toIndex = internalZone.toIndex;\n        if (toIndex - fromIndex + 1 <= maxNbPoints) {\n            // we keep all the points\n            for (let i = fromIndex; i <= toIndex; i++) {\n                newX.push(x[i]);\n                newY.push(y[i]);\n            }\n        }\n        else {\n            // we need to reduce the number of points\n            let currentX = x[fromIndex];\n            let currentY = y[fromIndex];\n            let lastX = currentX + deltaX;\n            newX.push(currentX);\n            newY.push(currentY);\n            for (let i = fromIndex; i <= toIndex; i++) {\n                if (x[i] > lastX) {\n                    // next slot\n                    currentX = x[i];\n                    currentY = y[i];\n                    newX.push(currentX);\n                    newY.push(currentY);\n                    lastX += deltaX;\n                }\n                if (y[i] > currentY) {\n                    currentY = y[i];\n                    newY[newY.length - 1] = currentY;\n                }\n            }\n        }\n    }\n    return {\n        x: newX,\n        y: newY,\n    };\n}\n//# sourceMappingURL=xyReduceNonContinuous.js.map","import { xRolling, xRollingAverage } from \"../x/index.js\";\n/**\n * This function calculates a rolling average.\n * This methods will recalculate the x values by using xRollingAverage\n * @param data - array of points {x,y}\n * @param fct - callback function that from an array returns a value.\n * @param options - options\n */\nexport function xyRolling(data, fct, options = {}) {\n    let { x, y } = data;\n    y = xRolling(y, fct, options);\n    if (x.length !== y.length) {\n        x = xRollingAverage(x, options);\n    }\n    return { x, y };\n}\n//# sourceMappingURL=xyRolling.js.map","/**\n *\n * Dong, Jian, et al. \"An algorithm of filtering noises in multi-beam data based on rolling circle transform.\" 2019 2nd International Conference on Sustainable Energy, Environment and Information Engineering (SEEIE 2019). Atlantis Press, 2019.\n * DONG Jian, PENG Rencan, ZHANG Lihua, WANG Zhijun. An Algorithm of Filtering Noises in Multi-beam Data Based on Rolling Circle Transform[J]. Geomatics and Information Science of Wuhan University, 2016, 41(1): 86-92. DOI: 10.13203/j.whugis20130757\n * @param data\n * @param options\n */\nimport { xFindClosestIndex } from \"../x/xFindClosestIndex.js\";\nexport function xyRollingCircleTransform(data, options = {}) {\n    const { x } = data;\n    let { y } = data;\n    const { radius = 1, position = 'top', shifted = true } = options;\n    if (position !== 'top' && position !== 'bottom') {\n        throw new Error(`Invalid position: ${String(position)}`);\n    }\n    if (position === 'bottom') {\n        y = y.slice();\n        for (let i = 0; i < y.length; i++) {\n            y[i] = -y[i];\n        }\n    }\n    if (x.length === 0 || y.length === 0) {\n        return new Float64Array();\n    }\n    const yCenters = new Float64Array(x.length);\n    for (let i = 0; i < x.length; i++) {\n        const x0 = x[i]; // x center of the current circle\n        const fromX = xFindClosestIndex(x, x0 - radius);\n        const toX = xFindClosestIndex(x, x0 + radius);\n        // for the circle radius we need to evaluate the minimal vertical shift\n        const y0 = y[i] + radius; // y center of the circle on top of peak\n        let yShift = y0; // this is the minimal possible shift\n        for (let j = fromX; j <= toX; j++) {\n            const currentX = x[j];\n            if (currentX < x0 - radius || currentX > x0 + radius) {\n                continue;\n            }\n            const currentMinYShift = y[j] + Math.sqrt(radius ** 2 - (currentX - x0) ** 2);\n            if (currentMinYShift > yShift) {\n                yShift = currentMinYShift;\n            }\n        }\n        yCenters[i] = yShift;\n    }\n    if (!shifted) {\n        for (let i = 0; i < yCenters.length; i++) {\n            yCenters[i] -= radius;\n        }\n    }\n    if (position === 'bottom') {\n        for (let i = 0; i < yCenters.length; i++) {\n            yCenters[i] = -yCenters[i];\n        }\n    }\n    return yCenters;\n}\n//# sourceMappingURL=xyRollingCircleTransform.js.map","import { zonesNormalize } from \"../zones/index.js\";\nimport { xyCheck } from \"./xyCheck.js\";\n/**\n * Set a value (default 0) to specific zones.\n * @param data - Object that contains property x (an ordered increasing array) and y (an array)\n * @param options - options\n * @returns - Array of points\n */\nexport function xySetYValue(data, options = {}) {\n    xyCheck(data);\n    const { x, y } = data;\n    const { value = 0 } = options;\n    let { zones } = options;\n    if (!Array.isArray(zones) || zones.length === 0) {\n        return data;\n    }\n    zones = zonesNormalize(zones);\n    const newX = x.slice();\n    const newY = y.slice();\n    let currentZone = zones[0];\n    let position = 0;\n    loop: for (let i = 0; i < x.length; i++) {\n        while (currentZone.to < x[i]) {\n            position++;\n            currentZone = zones[position];\n            if (!currentZone) {\n                i = x.length;\n                break loop;\n            }\n        }\n        if (x[i] >= currentZone.from) {\n            newY[i] = value;\n        }\n    }\n    return { x: newX, y: newY };\n}\n//# sourceMappingURL=xySetYValue.js.map","import { xyCheck } from \"./xyCheck.js\";\n/**\n * Convert a DataXY to an array of array containing x,y.\n * @param data - array of points {x,y}\n */\nexport function xyToXYArray(data) {\n    xyCheck(data);\n    const { x, y } = data;\n    const objectArray = [];\n    for (let i = 0; i < x.length; i++) {\n        objectArray.push([x[i], y[i]]);\n    }\n    return objectArray;\n}\n//# sourceMappingURL=xyToXYArray.js.map","import { xyCheck } from \"./xyCheck.js\";\n/**\n * xyToXYObject.\n * @param data - Array of points {x,y}.\n */\nexport function xyToXYObject(data) {\n    xyCheck(data);\n    const { x, y } = data;\n    const objectArray = [];\n    for (let i = 0; i < x.length; i++) {\n        objectArray.push({ x: x[i], y: y[i] });\n    }\n    return objectArray;\n}\n//# sourceMappingURL=xyToXYObject.js.map","/**\n * Merge abscissas values on similar ordinates and weight the group of abscissas\n * @param data - object containing 2 properties x and y\n * @param options - options\n * @returns array of merged and weighted points\n */\nexport function xyWeightedMerge(data, options = {}) {\n    const { x, y } = data;\n    const { groupWidth = 0.001 } = options;\n    const merged = { x: [], y: [] };\n    const weightedAbscissa = { x: [], y: [] };\n    let size = 0;\n    let index = 0;\n    while (index < x.length) {\n        if (size === 0 || x[index] - merged.x[size - 1] > groupWidth) {\n            weightedAbscissa.x.push(x[index] * y[index]);\n            weightedAbscissa.y.push(y[index]);\n            merged.x.push(x[index]);\n            merged.y.push(y[index]);\n            index++;\n            size++;\n        }\n        else {\n            weightedAbscissa.x[size - 1] += x[index] * y[index];\n            weightedAbscissa.y[size - 1] += y[index];\n            merged.x[size - 1] = x[index];\n            merged.y[size - 1] += y[index];\n            index++;\n        }\n    }\n    for (let i = 0; i < merged.x.length; i++) {\n        merged.x[i] = weightedAbscissa.x[i] / weightedAbscissa.y[i];\n    }\n    return merged;\n}\n//# sourceMappingURL=xyWeightedMerge.js.map","import { createFromToArray } from \"../utils/createFromToArray.js\";\nimport { zonesNormalize } from \"./zonesNormalize.js\";\nimport { zonesWithPoints } from \"./zonesWithPoints.js\";\n/**\n * Function that returns a Number array of equally spaced numberOfPoints x values\n * distributed across the specified zones.\n * @param zones - array of from/to zones where x values should be distributed\n * @param numberOfPoints - total number of points to distribute across all zones\n * @param options - options\n * @returns array of equally spaced x values distributed across zones\n */\nexport function zonesToXEquallySpaced(zones, numberOfPoints, options = {}) {\n    if (!zones || zones.length === 0) {\n        throw new RangeError('zones array must not be empty');\n    }\n    if (numberOfPoints < 1) {\n        throw new RangeError(\"'numberOfPoints' must be greater than 0\");\n    }\n    const from = options.from ?? zones[0].from;\n    //@ts-expect-error zones is tested before\n    const to = options.to ?? zones.at(-1).to;\n    if (from > to) {\n        throw new RangeError('from should be less than or equal to to');\n    }\n    const normalizedZones = zonesNormalize(zones, { from, to, exclusions: [] });\n    const zonesWithPointsRes = zonesWithPoints(normalizedZones, numberOfPoints, {\n        from,\n        to,\n    }).filter((zone) => zone.numberOfPoints);\n    let xResult = [];\n    for (const zone of zonesWithPointsRes) {\n        if (!zone.numberOfPoints) {\n            zone.numberOfPoints = 0;\n        }\n        const zoneXValues = Array.from(createFromToArray({\n            from: zone.from,\n            to: zone.to,\n            length: zone.numberOfPoints,\n            includeFrom: false,\n            includeTo: false,\n        }));\n        xResult = xResult.concat(zoneXValues);\n    }\n    return new Float64Array(xResult);\n}\n//# sourceMappingURL=zonesToXEquallySpaced.js.map","/**\n * Ensure that the data is string. If it is an ArrayBuffer it will be converted to string using TextDecoder.\n * @param blob\n * @param options\n * @returns\n */\nexport function ensureString(blob, options = {}) {\n    if (typeof blob === 'string') {\n        return blob;\n    }\n    if (ArrayBuffer.isView(blob) || blob instanceof ArrayBuffer) {\n        if (options.encoding) {\n            return new TextDecoder(options.encoding).decode(blob);\n        }\n        else {\n            return decodeText(blob);\n        }\n    }\n    throw new TypeError(`blob must be a string, ArrayBuffer or ArrayBufferView`);\n}\nfunction decodeText(blob) {\n    const uint8 = ArrayBuffer.isView(blob)\n        ? new Uint8Array(blob.buffer, blob.byteOffset, blob.byteLength)\n        : new Uint8Array(blob);\n    if (uint8.length >= 2) {\n        if (uint8[0] === 0xfe && uint8[1] === 0xff) {\n            return new TextDecoder('utf-16be').decode(uint8);\n        }\n        if (uint8[0] === 0xff && uint8[1] === 0xfe) {\n            return new TextDecoder('utf-16le').decode(uint8);\n        }\n    }\n    try {\n        return new TextDecoder('utf-8', { fatal: true }).decode(uint8);\n    }\n    catch {\n        return new TextDecoder('latin1').decode(uint8);\n    }\n}\n//# sourceMappingURL=index.js.map","import { ensureString } from 'ensure-string';\nimport { xIsMonotonic, xMaxValue, xyUniqueX } from 'ml-spectra-processing';\n/**\n * General internal parsing function\n * @param text - Csv or tsv strings.\n * @param options - Parsing options\n * @returns parsed text file with column information\n */\nexport function parse(text, options = {}) {\n    const { rescale = false, uniqueX = false, bestGuess = false, \n    //@ts-expect-error old library used this property and we want to throw an error so that people are forced to migrate\n    keepInfo, } = options;\n    let { xColumn = 0, yColumn = 1, numberColumns = Number.MAX_SAFE_INTEGER, maxNumberColumns = Number.MAX_SAFE_INTEGER, minNumberColumns = 2, } = options;\n    if (keepInfo !== undefined) {\n        throw new Error('keepInfo has been deprecated, please use the new method parseXYAndKeepInfo');\n    }\n    text = ensureString(text);\n    maxNumberColumns = Math.max(maxNumberColumns, xColumn + 1, yColumn + 1);\n    minNumberColumns = Math.max(xColumn + 1, yColumn + 1, minNumberColumns);\n    const lines = text.split(/[\\n\\r]+/);\n    let matrix = [];\n    const info = [];\n    let position = 0;\n    for (let line of lines) {\n        line = line.trim();\n        // we will consider only lines that contains only numbers\n        if (/\\d+/.test(line) && /^[\\d\\t +,.;Ee-]+$/.test(line)) {\n            let fields = line.split(/,[\\t ;]+|[\\t ;]+/);\n            if (fields.length === 1) {\n                fields = line.split(/[\\t ,;]+/);\n            }\n            if (fields &&\n                fields.length >= minNumberColumns && // we filter lines that have not enough or too many columns\n                fields.length <= maxNumberColumns) {\n                matrix.push(fields.map((value) => Number.parseFloat(value.replace(',', '.'))));\n                position++;\n            }\n        }\n        else if (line) {\n            info.push({ position, value: line });\n        }\n    }\n    if (bestGuess) {\n        if (matrix[0]?.length === 3 &&\n            options.xColumn === undefined &&\n            options.yColumn === undefined) {\n            // is the first column a sequential number?\n            let skipFirstColumn = true;\n            for (let i = 0; i < matrix.length - 1; i++) {\n                const currentFirst = matrix[i][0];\n                const nextFirst = matrix[i + 1][0];\n                if (Math.abs(currentFirst - nextFirst) !== 1) {\n                    skipFirstColumn = false;\n                }\n            }\n            if (skipFirstColumn) {\n                xColumn = 1;\n                yColumn = 2;\n            }\n        }\n        if (matrix[0] && matrix[0].length > 3) {\n            const xs = [];\n            for (const row of matrix) {\n                for (let i = xColumn; i < row.length; i += 2) {\n                    xs.push(row[i]);\n                }\n            }\n            if (xIsMonotonic(xs)) {\n                numberColumns = 2;\n            }\n        }\n    }\n    if (numberColumns) {\n        const newMatrix = [];\n        for (const row of matrix) {\n            for (let i = 0; i < row.length; i += numberColumns) {\n                newMatrix.push(row.slice(i, i + numberColumns));\n            }\n        }\n        matrix = newMatrix;\n    }\n    let result = {\n        x: matrix.map((row) => row[xColumn]),\n        y: matrix.map((row) => row[yColumn]),\n    };\n    if (uniqueX) {\n        result = xyUniqueX(result, { algorithm: 'sum' });\n    }\n    if (rescale) {\n        const maxY = xMaxValue(result.y);\n        const yValues = result.y;\n        for (let i = 0; i < yValues.length; i++) {\n            yValues[i] = yValues[i] / maxY;\n        }\n    }\n    return {\n        info,\n        data: result,\n    };\n}\n//# sourceMappingURL=parse.js.map","import { parse } from \"./parse.js\";\nexport * from \"./ParseXYOptions.js\";\n/**\n * Parse a text-file and convert it to an object {x:[], y:[]}\n * @param text - Csv or tsv strings.\n * @param options - Parsing options\n * @returns - The parsed data\n */\nexport function parseXY(text, options = {}) {\n    return parse(text, options).data;\n}\n/**\n * Parse a text-file and returns the parsed data and information about the columns\n * @param text - Csv or tsv strings.\n * @param options - Parsing options\n * @returns - The parsed data with information about the columns\n */\nexport function parseXYAndKeepInfo(text, options = {}) {\n    return parse(text, options);\n}\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getBestPeaks = getBestPeaks;\nconst ml_spectra_processing_1 = require(\"ml-spectra-processing\");\n/**\n * Filter the array by taking the higher peaks and only\n * keep one per slot.\n * There are 2 different slots, the smallest one will have the\n * extra annotation `close` to true\n * @param {array} peaks - array of all the peaks\n * @param {object} [options={}]\n * @param {number} [options.from] - min X value of the window to consider\n * @param {number} [options.to] - max X value of the window to consider\n * @param {number} [options.minValue=Number.NEGATIVE_INFINITY] - min Y value of the window to consider\n * @param {number} [options.maxValue=Number.POSITIVE_INFINITY] - max Y value of the window to consider\n * @param {number} [options.searchMonoisotopicRatio=0] - search previous peaks with at least ratio height\n * @param {number} [options.limit=20] - max number of peaks\n * @param {number} [options.threshold=0.01] - minimal intensity compare to base peak\n * @param {number} [options.numberSlots=10] - define the number of slots and indirectly the slot width\n * @param {number} [options.numberCloseSlots=50]\n * @returns {array} - copy of peaks with 'close' annotation\n */\nfunction getBestPeaks(peaks, options = {}) {\n    const { searchMonoisotopicRatio = 0, from = (0, ml_spectra_processing_1.xyObjectMinXPoint)(peaks).x, to = (0, ml_spectra_processing_1.xyObjectMaxXPoint)(peaks).x, limit = 20, threshold = 0.01, numberCloseSlots = 50, numberSlots = 10, minValue = Number.NEGATIVE_INFINITY, maxValue = Number.POSITIVE_INFINITY, } = options;\n    let slot = (to - from) / numberSlots;\n    let closeSlot = (to - from) / numberCloseSlots;\n    let selected = peaks\n        .filter((peak) => peak.x >= from && peak.x <= to)\n        .filter((peak) => peak.y >= minValue && peak.y <= maxValue)\n        .map((peak) => {\n        return {\n            peak,\n            monoisotopic: false,\n        };\n    });\n    if (searchMonoisotopicRatio) {\n        selected = selected.toSorted((a, b) => b.peak.x - a.peak.x);\n        for (let i = 0; i < selected.length; i++) {\n            let item = selected[i];\n            for (let j = i + 1; j < selected.length; j++) {\n                let nextItem = selected[j];\n                if (item.peak.x - nextItem.peak.x < 0.09)\n                    continue;\n                if (item.peak.x - nextItem.peak.x > 1.1)\n                    break;\n                if (nextItem.peak.y > item.peak.y * searchMonoisotopicRatio) {\n                    item.monoisotopic = false;\n                    nextItem.monoisotopic = true;\n                    break;\n                }\n            }\n        }\n    }\n    selected = selected.toSorted((a, b) => {\n        if (a.monoisotopic && !b.monoisotopic)\n            return -1;\n        if (b.monoisotopic && !a.monoisotopic)\n            return 1;\n        return b.peak.y - a.peak.y;\n    });\n    let toReturn = [];\n    if (selected.length === 0)\n        return [];\n    let minY = selected[0].peak.y * threshold;\n    peakLoop: for (let item of selected) {\n        if (item.peak.y < minY) {\n            if (item.monoisotopic) {\n                continue;\n            }\n            else {\n                break;\n            }\n        }\n        let close = false;\n        for (let existing of toReturn) {\n            if (Math.abs(existing.x - item.peak.x) < closeSlot) {\n                continue peakLoop;\n            }\n            if (Math.abs(existing.x - item.peak.x) < slot) {\n                close = true;\n            }\n        }\n        let newPeak = structuredClone(item.peak);\n        newPeak.close = close;\n        toReturn.push(newPeak);\n        if (toReturn.length === limit)\n            break;\n    }\n    return toReturn.toSorted((a, b) => a.x - b.x);\n}\n//# sourceMappingURL=getBestPeaks.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.atomSorter = atomSorter;\n/**\n * Implementation of the Hill system for sorting atoms\n * https://en.wikipedia.org/wiki/Chemical_formula#Hill_system\n * @param a - first atom to compare\n * @param b - second atom to compare\n * @returns A value suitable for use in Array.prototype.sort.\n */\nfunction atomSorter(a, b) {\n    if (a === b)\n        return 0;\n    if (a === 'C')\n        return -1;\n    if (b === 'C')\n        return 1;\n    if (a === 'H')\n        return -1;\n    if (b === 'H')\n        return 1;\n    if (a < b)\n        return -1;\n    return 1;\n}\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.elementsAndIsotopes = void 0;\nexports.elementsAndIsotopes = [\n    {\n        number: 1,\n        isotopes: [\n            { nominal: 1, mass: 1.00782503223, abundance: 0.999885 },\n            { nominal: 2, mass: 2.01410177812, abundance: 0.000115 },\n            { nominal: 3, mass: 3.0160492779 },\n            { nominal: 4, mass: 4.02643 },\n            { nominal: 5, mass: 5.035311 },\n            { nominal: 6, mass: 6.04496 },\n            { nominal: 7, mass: 7.0527 },\n        ],\n        symbol: 'H',\n        mass: 1.0079407540557772,\n        name: 'Hydrogen',\n        monoisotopicMass: 1.00782503223,\n    },\n    {\n        number: 2,\n        isotopes: [\n            { nominal: 3, mass: 3.0160293201, abundance: 0.00000134 },\n            { nominal: 4, mass: 4.00260325413, abundance: 0.99999866 },\n            { nominal: 5, mass: 5.012057 },\n            { nominal: 6, mass: 6.018885891 },\n            { nominal: 7, mass: 7.0279907 },\n            { nominal: 8, mass: 8.03393439 },\n            { nominal: 9, mass: 9.043946 },\n            { nominal: 10, mass: 10.05279 },\n        ],\n        symbol: 'He',\n        mass: 4.002601932120929,\n        name: 'Helium',\n        monoisotopicMass: 4.00260325413,\n    },\n    {\n        number: 3,\n        isotopes: [\n            { nominal: 3, mass: 3.0308 },\n            { nominal: 4, mass: 4.02719 },\n            { nominal: 5, mass: 5.012538 },\n            { nominal: 6, mass: 6.0151228874, abundance: 0.0759 },\n            { nominal: 7, mass: 7.0160034366, abundance: 0.9241 },\n            { nominal: 8, mass: 8.022486246 },\n            { nominal: 9, mass: 9.02679019 },\n            { nominal: 10, mass: 10.035483 },\n            { nominal: 11, mass: 11.04372358 },\n            { nominal: 12, mass: 12.052517 },\n            { nominal: 13, mass: 13.06263 },\n        ],\n        symbol: 'Li',\n        mass: 6.94003660291572,\n        name: 'Lithium',\n        monoisotopicMass: 7.0160034366,\n    },\n    {\n        number: 4,\n        isotopes: [\n            { nominal: 5, mass: 5.0399 },\n            { nominal: 6, mass: 6.0197264 },\n            { nominal: 7, mass: 7.016928717 },\n            { nominal: 8, mass: 8.005305102 },\n            { nominal: 9, mass: 9.012183065, abundance: 1 },\n            { nominal: 10, mass: 10.013534695 },\n            { nominal: 11, mass: 11.02166108 },\n            { nominal: 12, mass: 12.0269221 },\n            { nominal: 13, mass: 13.036135 },\n            { nominal: 14, mass: 14.04289 },\n            { nominal: 15, mass: 15.05342 },\n            { nominal: 16, mass: 16.06167 },\n        ],\n        symbol: 'Be',\n        mass: 9.012183065,\n        name: 'Beryllium',\n        monoisotopicMass: 9.012183065,\n    },\n    {\n        number: 5,\n        isotopes: [\n            { nominal: 6, mass: 6.0508 },\n            { nominal: 7, mass: 7.029712 },\n            { nominal: 8, mass: 8.0246073 },\n            { nominal: 9, mass: 9.01332965 },\n            { nominal: 10, mass: 10.01293695, abundance: 0.199 },\n            { nominal: 11, mass: 11.00930536, abundance: 0.801 },\n            { nominal: 12, mass: 12.0143527 },\n            { nominal: 13, mass: 13.0177802 },\n            { nominal: 14, mass: 14.025404 },\n            { nominal: 15, mass: 15.031088 },\n            { nominal: 16, mass: 16.039842 },\n            { nominal: 17, mass: 17.04699 },\n            { nominal: 18, mass: 18.05566 },\n            { nominal: 19, mass: 19.0631 },\n            { nominal: 20, mass: 20.07207 },\n            { nominal: 21, mass: 21.08129 },\n        ],\n        symbol: 'B',\n        mass: 10.811028046410001,\n        name: 'Boron',\n        monoisotopicMass: 11.00930536,\n    },\n    {\n        number: 6,\n        isotopes: [\n            { nominal: 8, mass: 8.037643 },\n            { nominal: 9, mass: 9.0310372 },\n            { nominal: 10, mass: 10.01685331 },\n            { nominal: 11, mass: 11.0114336 },\n            { nominal: 12, mass: 12, abundance: 0.9893 },\n            { nominal: 13, mass: 13.00335483507, abundance: 0.0107 },\n            { nominal: 14, mass: 14.0032419884 },\n            { nominal: 15, mass: 15.01059926 },\n            { nominal: 16, mass: 16.0147013 },\n            { nominal: 17, mass: 17.022577 },\n            { nominal: 18, mass: 18.026751 },\n            { nominal: 19, mass: 19.0348 },\n            { nominal: 20, mass: 20.04032 },\n            { nominal: 21, mass: 21.049 },\n            { nominal: 22, mass: 22.05753 },\n            { nominal: 23, mass: 23.0689 },\n        ],\n        symbol: 'C',\n        mass: 12.010735896735248,\n        name: 'Carbon',\n        monoisotopicMass: 12,\n    },\n    {\n        number: 7,\n        isotopes: [\n            { nominal: 10, mass: 10.04165 },\n            { nominal: 11, mass: 11.026091 },\n            { nominal: 12, mass: 12.0186132 },\n            { nominal: 13, mass: 13.00573861 },\n            { nominal: 14, mass: 14.00307400443, abundance: 0.99636 },\n            { nominal: 15, mass: 15.00010889888, abundance: 0.00364 },\n            { nominal: 16, mass: 16.0061019 },\n            { nominal: 17, mass: 17.008449 },\n            { nominal: 18, mass: 18.014078 },\n            { nominal: 19, mass: 19.017022 },\n            { nominal: 20, mass: 20.023366 },\n            { nominal: 21, mass: 21.02711 },\n            { nominal: 22, mass: 22.03439 },\n            { nominal: 23, mass: 23.04114 },\n            { nominal: 24, mass: 24.05039 },\n            { nominal: 25, mass: 25.0601 },\n        ],\n        symbol: 'N',\n        mass: 14.006703211445798,\n        name: 'Nitrogen',\n        monoisotopicMass: 14.00307400443,\n    },\n    {\n        number: 8,\n        isotopes: [\n            { nominal: 12, mass: 12.034262 },\n            { nominal: 13, mass: 13.024815 },\n            { nominal: 14, mass: 14.00859636 },\n            { nominal: 15, mass: 15.00306562 },\n            { nominal: 16, mass: 15.99491461957, abundance: 0.99757 },\n            { nominal: 17, mass: 16.9991317565, abundance: 0.00038 },\n            { nominal: 18, mass: 17.99915961286, abundance: 0.00205 },\n            { nominal: 19, mass: 19.003578 },\n            { nominal: 20, mass: 20.00407535 },\n            { nominal: 21, mass: 21.008655 },\n            { nominal: 22, mass: 22.009966 },\n            { nominal: 23, mass: 23.015696 },\n            { nominal: 24, mass: 24.01986 },\n            { nominal: 25, mass: 25.02936 },\n            { nominal: 26, mass: 26.03729 },\n            { nominal: 27, mass: 27.04772 },\n            { nominal: 28, mass: 28.05591 },\n        ],\n        symbol: 'O',\n        mass: 15.999404924318277,\n        name: 'Oxygen',\n        monoisotopicMass: 15.99491461957,\n    },\n    {\n        number: 9,\n        isotopes: [\n            { nominal: 14, mass: 14.034315 },\n            { nominal: 15, mass: 15.018043 },\n            { nominal: 16, mass: 16.0114657 },\n            { nominal: 17, mass: 17.00209524 },\n            { nominal: 18, mass: 18.00093733 },\n            { nominal: 19, mass: 18.99840316273, abundance: 1 },\n            { nominal: 20, mass: 19.999981252 },\n            { nominal: 21, mass: 20.9999489 },\n            { nominal: 22, mass: 22.002999 },\n            { nominal: 23, mass: 23.003557 },\n            { nominal: 24, mass: 24.008115 },\n            { nominal: 25, mass: 25.012199 },\n            { nominal: 26, mass: 26.020038 },\n            { nominal: 27, mass: 27.02644 },\n            { nominal: 28, mass: 28.03534 },\n            { nominal: 29, mass: 29.04254 },\n            { nominal: 30, mass: 30.05165 },\n            { nominal: 31, mass: 31.05971 },\n        ],\n        symbol: 'F',\n        mass: 18.99840316273,\n        name: 'Fluorine',\n        monoisotopicMass: 18.99840316273,\n    },\n    {\n        number: 10,\n        isotopes: [\n            { nominal: 16, mass: 16.02575 },\n            { nominal: 17, mass: 17.01771396 },\n            { nominal: 18, mass: 18.0057087 },\n            { nominal: 19, mass: 19.00188091 },\n            { nominal: 20, mass: 19.9924401762, abundance: 0.9048 },\n            { nominal: 21, mass: 20.993846685, abundance: 0.0027 },\n            { nominal: 22, mass: 21.991385114, abundance: 0.0925 },\n            { nominal: 23, mass: 22.99446691 },\n            { nominal: 24, mass: 23.99361065 },\n            { nominal: 25, mass: 24.997789 },\n            { nominal: 26, mass: 26.000515 },\n            { nominal: 27, mass: 27.007553 },\n            { nominal: 28, mass: 28.01212 },\n            { nominal: 29, mass: 29.01975 },\n            { nominal: 30, mass: 30.02473 },\n            { nominal: 31, mass: 31.0331 },\n            { nominal: 32, mass: 32.03972 },\n            { nominal: 33, mass: 33.04938 },\n            { nominal: 34, mass: 34.05673 },\n        ],\n        symbol: 'Ne',\n        mass: 20.18004638052026,\n        name: 'Neon',\n        monoisotopicMass: 19.9924401762,\n    },\n    {\n        number: 11,\n        isotopes: [\n            { nominal: 18, mass: 18.02688 },\n            { nominal: 19, mass: 19.01388 },\n            { nominal: 20, mass: 20.0073544 },\n            { nominal: 21, mass: 20.99765469 },\n            { nominal: 22, mass: 21.99443741 },\n            { nominal: 23, mass: 22.989769282, abundance: 1 },\n            { nominal: 24, mass: 23.99096295 },\n            { nominal: 25, mass: 24.989954 },\n            { nominal: 26, mass: 25.9926346 },\n            { nominal: 27, mass: 26.9940765 },\n            { nominal: 28, mass: 27.998939 },\n            { nominal: 29, mass: 29.0028771 },\n            { nominal: 30, mass: 30.0090979 },\n            { nominal: 31, mass: 31.013163 },\n            { nominal: 32, mass: 32.02019 },\n            { nominal: 33, mass: 33.02573 },\n            { nominal: 34, mass: 34.03359 },\n            { nominal: 35, mass: 35.04062 },\n            { nominal: 36, mass: 36.04929 },\n            { nominal: 37, mass: 37.05705 },\n        ],\n        symbol: 'Na',\n        mass: 22.989769282,\n        name: 'Sodium',\n        monoisotopicMass: 22.989769282,\n    },\n    {\n        number: 12,\n        isotopes: [\n            { nominal: 19, mass: 19.034169 },\n            { nominal: 20, mass: 20.01885 },\n            { nominal: 21, mass: 21.011716 },\n            { nominal: 22, mass: 21.99957065 },\n            { nominal: 23, mass: 22.99412421 },\n            { nominal: 24, mass: 23.985041697, abundance: 0.7899 },\n            { nominal: 25, mass: 24.985836976, abundance: 0.1 },\n            { nominal: 26, mass: 25.982592968, abundance: 0.1101 },\n            { nominal: 27, mass: 26.984340624 },\n            { nominal: 28, mass: 27.9838767 },\n            { nominal: 29, mass: 28.988617 },\n            { nominal: 30, mass: 29.9904629 },\n            { nominal: 31, mass: 30.996648 },\n            { nominal: 32, mass: 31.9991102 },\n            { nominal: 33, mass: 33.0053271 },\n            { nominal: 34, mass: 34.008935 },\n            { nominal: 35, mass: 35.01679 },\n            { nominal: 36, mass: 36.02188 },\n            { nominal: 37, mass: 37.03037 },\n            { nominal: 38, mass: 38.03658 },\n            { nominal: 39, mass: 39.04538 },\n            { nominal: 40, mass: 40.05218 },\n        ],\n        symbol: 'Mg',\n        mass: 24.3050516198371,\n        name: 'Magnesium',\n        monoisotopicMass: 23.985041697,\n    },\n    {\n        number: 13,\n        isotopes: [\n            { nominal: 21, mass: 21.02897 },\n            { nominal: 22, mass: 22.01954 },\n            { nominal: 23, mass: 23.00724435 },\n            { nominal: 24, mass: 23.9999489 },\n            { nominal: 25, mass: 24.9904281 },\n            { nominal: 26, mass: 25.986891904 },\n            { nominal: 27, mass: 26.98153853, abundance: 1 },\n            { nominal: 28, mass: 27.98191021 },\n            { nominal: 29, mass: 28.9804565 },\n            { nominal: 30, mass: 29.98296 },\n            { nominal: 31, mass: 30.983945 },\n            { nominal: 32, mass: 31.988085 },\n            { nominal: 33, mass: 32.990909 },\n            { nominal: 34, mass: 33.996705 },\n            { nominal: 35, mass: 34.999764 },\n            { nominal: 36, mass: 36.00639 },\n            { nominal: 37, mass: 37.01053 },\n            { nominal: 38, mass: 38.0174 },\n            { nominal: 39, mass: 39.02254 },\n            { nominal: 40, mass: 40.03003 },\n            { nominal: 41, mass: 41.03638 },\n            { nominal: 42, mass: 42.04384 },\n            { nominal: 43, mass: 43.05147 },\n        ],\n        symbol: 'Al',\n        mass: 26.98153853,\n        name: 'Aluminium',\n        monoisotopicMass: 26.98153853,\n    },\n    {\n        number: 14,\n        isotopes: [\n            { nominal: 22, mass: 22.03579 },\n            { nominal: 23, mass: 23.02544 },\n            { nominal: 24, mass: 24.011535 },\n            { nominal: 25, mass: 25.004109 },\n            { nominal: 26, mass: 25.99233384 },\n            { nominal: 27, mass: 26.98670481 },\n            { nominal: 28, mass: 27.97692653465, abundance: 0.92223 },\n            { nominal: 29, mass: 28.9764946649, abundance: 0.04685 },\n            { nominal: 30, mass: 29.973770136, abundance: 0.03092 },\n            { nominal: 31, mass: 30.975363194 },\n            { nominal: 32, mass: 31.97415154 },\n            { nominal: 33, mass: 32.97797696 },\n            { nominal: 34, mass: 33.978576 },\n            { nominal: 35, mass: 34.984583 },\n            { nominal: 36, mass: 35.986695 },\n            { nominal: 37, mass: 36.992921 },\n            { nominal: 38, mass: 37.995523 },\n            { nominal: 39, mass: 39.002491 },\n            { nominal: 40, mass: 40.00583 },\n            { nominal: 41, mass: 41.01301 },\n            { nominal: 42, mass: 42.01778 },\n            { nominal: 43, mass: 43.0248 },\n            { nominal: 44, mass: 44.03061 },\n            { nominal: 45, mass: 45.03995 },\n        ],\n        symbol: 'Si',\n        mass: 28.085498705705955,\n        name: 'Silicon',\n        monoisotopicMass: 27.97692653465,\n    },\n    {\n        number: 15,\n        isotopes: [\n            { nominal: 24, mass: 24.03577 },\n            { nominal: 25, mass: 25.02119 },\n            { nominal: 26, mass: 26.01178 },\n            { nominal: 27, mass: 26.999224 },\n            { nominal: 28, mass: 27.9923266 },\n            { nominal: 29, mass: 28.98180079 },\n            { nominal: 30, mass: 29.97831375 },\n            { nominal: 31, mass: 30.97376199842, abundance: 1 },\n            { nominal: 32, mass: 31.973907643 },\n            { nominal: 33, mass: 32.9717257 },\n            { nominal: 34, mass: 33.97364589 },\n            { nominal: 35, mass: 34.9733141 },\n            { nominal: 36, mass: 35.97826 },\n            { nominal: 37, mass: 36.979607 },\n            { nominal: 38, mass: 37.984252 },\n            { nominal: 39, mass: 38.986227 },\n            { nominal: 40, mass: 39.99133 },\n            { nominal: 41, mass: 40.994654 },\n            { nominal: 42, mass: 42.00108 },\n            { nominal: 43, mass: 43.00502 },\n            { nominal: 44, mass: 44.01121 },\n            { nominal: 45, mass: 45.01645 },\n            { nominal: 46, mass: 46.02446 },\n            { nominal: 47, mass: 47.03139 },\n        ],\n        symbol: 'P',\n        mass: 30.97376199842,\n        name: 'Phosphorus',\n        monoisotopicMass: 30.97376199842,\n    },\n    {\n        number: 16,\n        isotopes: [\n            { nominal: 26, mass: 26.02907 },\n            { nominal: 27, mass: 27.01828 },\n            { nominal: 28, mass: 28.00437 },\n            { nominal: 29, mass: 28.996611 },\n            { nominal: 30, mass: 29.98490703 },\n            { nominal: 31, mass: 30.97955701 },\n            { nominal: 32, mass: 31.9720711744, abundance: 0.9499 },\n            { nominal: 33, mass: 32.9714589098, abundance: 0.0075 },\n            { nominal: 34, mass: 33.967867004, abundance: 0.0425 },\n            { nominal: 35, mass: 34.96903231 },\n            { nominal: 36, mass: 35.96708071, abundance: 0.0001 },\n            { nominal: 37, mass: 36.97112551 },\n            { nominal: 38, mass: 37.9711633 },\n            { nominal: 39, mass: 38.975134 },\n            { nominal: 40, mass: 39.9754826 },\n            { nominal: 41, mass: 40.9795935 },\n            { nominal: 42, mass: 41.9810651 },\n            { nominal: 43, mass: 42.9869076 },\n            { nominal: 44, mass: 43.9901188 },\n            { nominal: 45, mass: 44.99572 },\n            { nominal: 46, mass: 46.00004 },\n            { nominal: 47, mass: 47.00795 },\n            { nominal: 48, mass: 48.0137 },\n            { nominal: 49, mass: 49.02276 },\n        ],\n        symbol: 'S',\n        mass: 32.06478740612706,\n        name: 'Sulfur',\n        monoisotopicMass: 31.9720711744,\n    },\n    {\n        number: 17,\n        isotopes: [\n            { nominal: 28, mass: 28.02954 },\n            { nominal: 29, mass: 29.01478 },\n            { nominal: 30, mass: 30.00477 },\n            { nominal: 31, mass: 30.992414 },\n            { nominal: 32, mass: 31.98568464 },\n            { nominal: 33, mass: 32.97745199 },\n            { nominal: 34, mass: 33.973762485 },\n            { nominal: 35, mass: 34.968852682, abundance: 0.7576 },\n            { nominal: 36, mass: 35.968306809 },\n            { nominal: 37, mass: 36.965902602, abundance: 0.2424 },\n            { nominal: 38, mass: 37.96801044 },\n            { nominal: 39, mass: 38.9680082 },\n            { nominal: 40, mass: 39.970415 },\n            { nominal: 41, mass: 40.970685 },\n            { nominal: 42, mass: 41.97325 },\n            { nominal: 43, mass: 42.97389 },\n            { nominal: 44, mass: 43.97787 },\n            { nominal: 45, mass: 44.98029 },\n            { nominal: 46, mass: 45.98517 },\n            { nominal: 47, mass: 46.98916 },\n            { nominal: 48, mass: 47.99564 },\n            { nominal: 49, mass: 49.00123 },\n            { nominal: 50, mass: 50.00905 },\n            { nominal: 51, mass: 51.01554 },\n        ],\n        symbol: 'Cl',\n        mass: 35.452937582608,\n        name: 'Chlorine',\n        monoisotopicMass: 34.968852682,\n    },\n    {\n        number: 18,\n        isotopes: [\n            { nominal: 30, mass: 30.02307 },\n            { nominal: 31, mass: 31.01212 },\n            { nominal: 32, mass: 31.9976378 },\n            { nominal: 33, mass: 32.98992555 },\n            { nominal: 34, mass: 33.98027009 },\n            { nominal: 35, mass: 34.97525759 },\n            { nominal: 36, mass: 35.967545105, abundance: 0.003336 },\n            { nominal: 37, mass: 36.96677633 },\n            { nominal: 38, mass: 37.96273211, abundance: 0.000629 },\n            { nominal: 39, mass: 38.964313 },\n            { nominal: 40, mass: 39.9623831237, abundance: 0.996035 },\n            { nominal: 41, mass: 40.96450057 },\n            { nominal: 42, mass: 41.9630457 },\n            { nominal: 43, mass: 42.9656361 },\n            { nominal: 44, mass: 43.9649238 },\n            { nominal: 45, mass: 44.96803973 },\n            { nominal: 46, mass: 45.968083 },\n            { nominal: 47, mass: 46.972935 },\n            { nominal: 48, mass: 47.97591 },\n            { nominal: 49, mass: 48.9819 },\n            { nominal: 50, mass: 49.98613 },\n            { nominal: 51, mass: 50.9937 },\n            { nominal: 52, mass: 51.99896 },\n            { nominal: 53, mass: 53.00729 },\n        ],\n        symbol: 'Ar',\n        mass: 39.947798563582005,\n        name: 'Argon',\n        monoisotopicMass: 39.9623831237,\n    },\n    {\n        number: 19,\n        isotopes: [\n            { nominal: 32, mass: 32.02265 },\n            { nominal: 33, mass: 33.00756 },\n            { nominal: 34, mass: 33.99869 },\n            { nominal: 35, mass: 34.98800541 },\n            { nominal: 36, mass: 35.98130201 },\n            { nominal: 37, mass: 36.97337589 },\n            { nominal: 38, mass: 37.96908112 },\n            { nominal: 39, mass: 38.9637064864, abundance: 0.932581 },\n            { nominal: 40, mass: 39.963998166, abundance: 0.000117 },\n            { nominal: 41, mass: 40.9618252579, abundance: 0.067302 },\n            { nominal: 42, mass: 41.96240231 },\n            { nominal: 43, mass: 42.9607347 },\n            { nominal: 44, mass: 43.96158699 },\n            { nominal: 45, mass: 44.96069149 },\n            { nominal: 46, mass: 45.96198159 },\n            { nominal: 47, mass: 46.9616616 },\n            { nominal: 48, mass: 47.96534119 },\n            { nominal: 49, mass: 48.96821075 },\n            { nominal: 50, mass: 49.97238 },\n            { nominal: 51, mass: 50.975828 },\n            { nominal: 52, mass: 51.98224 },\n            { nominal: 53, mass: 52.98746 },\n            { nominal: 54, mass: 53.99463 },\n            { nominal: 55, mass: 55.00076 },\n            { nominal: 56, mass: 56.00851 },\n        ],\n        symbol: 'K',\n        mass: 39.098300910086,\n        name: 'Potassium',\n        monoisotopicMass: 38.9637064864,\n    },\n    {\n        number: 20,\n        isotopes: [\n            { nominal: 34, mass: 34.01487 },\n            { nominal: 35, mass: 35.00514 },\n            { nominal: 36, mass: 35.993074 },\n            { nominal: 37, mass: 36.98589785 },\n            { nominal: 38, mass: 37.97631922 },\n            { nominal: 39, mass: 38.97071081 },\n            { nominal: 40, mass: 39.962590863, abundance: 0.96941 },\n            { nominal: 41, mass: 40.96227792 },\n            { nominal: 42, mass: 41.95861783, abundance: 0.00647 },\n            { nominal: 43, mass: 42.95876644, abundance: 0.00135 },\n            { nominal: 44, mass: 43.95548156, abundance: 0.02086 },\n            { nominal: 45, mass: 44.95618635 },\n            { nominal: 46, mass: 45.953689, abundance: 0.00004 },\n            { nominal: 47, mass: 46.9545424 },\n            { nominal: 48, mass: 47.95252276, abundance: 0.00187 },\n            { nominal: 49, mass: 48.95566274 },\n            { nominal: 50, mass: 49.9574992 },\n            { nominal: 51, mass: 50.960989 },\n            { nominal: 52, mass: 51.963217 },\n            { nominal: 53, mass: 52.96945 },\n            { nominal: 54, mass: 53.9734 },\n            { nominal: 55, mass: 54.9803 },\n            { nominal: 56, mass: 55.98508 },\n            { nominal: 57, mass: 56.99262 },\n            { nominal: 58, mass: 57.99794 },\n        ],\n        symbol: 'Ca',\n        mass: 40.078022511017735,\n        name: 'Calcium',\n        monoisotopicMass: 39.962590863,\n    },\n    {\n        number: 21,\n        isotopes: [\n            { nominal: 36, mass: 36.01648 },\n            { nominal: 37, mass: 37.00374 },\n            { nominal: 38, mass: 37.99512 },\n            { nominal: 39, mass: 38.984785 },\n            { nominal: 40, mass: 39.9779673 },\n            { nominal: 41, mass: 40.969251105 },\n            { nominal: 42, mass: 41.96551653 },\n            { nominal: 43, mass: 42.9611505 },\n            { nominal: 44, mass: 43.9594029 },\n            { nominal: 45, mass: 44.95590828, abundance: 1 },\n            { nominal: 46, mass: 45.95516826 },\n            { nominal: 47, mass: 46.9524037 },\n            { nominal: 48, mass: 47.9522236 },\n            { nominal: 49, mass: 48.9500146 },\n            { nominal: 50, mass: 49.952176 },\n            { nominal: 51, mass: 50.953592 },\n            { nominal: 52, mass: 51.95688 },\n            { nominal: 53, mass: 52.95909 },\n            { nominal: 54, mass: 53.96393 },\n            { nominal: 55, mass: 54.96782 },\n            { nominal: 56, mass: 55.97345 },\n            { nominal: 57, mass: 56.97777 },\n            { nominal: 58, mass: 57.98403 },\n            { nominal: 59, mass: 58.98894 },\n            { nominal: 60, mass: 59.99565 },\n            { nominal: 61, mass: 61.001 },\n        ],\n        symbol: 'Sc',\n        mass: 44.95590828,\n        name: 'Scandium',\n        monoisotopicMass: 44.95590828,\n    },\n    {\n        number: 22,\n        isotopes: [\n            { nominal: 38, mass: 38.01145 },\n            { nominal: 39, mass: 39.00236 },\n            { nominal: 40, mass: 39.9905 },\n            { nominal: 41, mass: 40.983148 },\n            { nominal: 42, mass: 41.97304903 },\n            { nominal: 43, mass: 42.9685225 },\n            { nominal: 44, mass: 43.95968995 },\n            { nominal: 45, mass: 44.95812198 },\n            { nominal: 46, mass: 45.95262772, abundance: 0.0825 },\n            { nominal: 47, mass: 46.95175879, abundance: 0.0744 },\n            { nominal: 48, mass: 47.94794198, abundance: 0.7372 },\n            { nominal: 49, mass: 48.94786568, abundance: 0.0541 },\n            { nominal: 50, mass: 49.94478689, abundance: 0.0518 },\n            { nominal: 51, mass: 50.94661065 },\n            { nominal: 52, mass: 51.946893 },\n            { nominal: 53, mass: 52.94973 },\n            { nominal: 54, mass: 53.95105 },\n            { nominal: 55, mass: 54.95527 },\n            { nominal: 56, mass: 55.95791 },\n            { nominal: 57, mass: 56.96364 },\n            { nominal: 58, mass: 57.9666 },\n            { nominal: 59, mass: 58.97247 },\n            { nominal: 60, mass: 59.97603 },\n            { nominal: 61, mass: 60.98245 },\n            { nominal: 62, mass: 61.98651 },\n            { nominal: 63, mass: 62.99375 },\n        ],\n        symbol: 'Ti',\n        mass: 47.866744962721995,\n        name: 'Titanium',\n        monoisotopicMass: 47.94794198,\n    },\n    {\n        number: 23,\n        isotopes: [\n            { nominal: 40, mass: 40.01276 },\n            { nominal: 41, mass: 41.00021 },\n            { nominal: 42, mass: 41.99182 },\n            { nominal: 43, mass: 42.980766 },\n            { nominal: 44, mass: 43.97411 },\n            { nominal: 45, mass: 44.9657748 },\n            { nominal: 46, mass: 45.96019878 },\n            { nominal: 47, mass: 46.95490491 },\n            { nominal: 48, mass: 47.9522522 },\n            { nominal: 49, mass: 48.9485118 },\n            { nominal: 50, mass: 49.94715601, abundance: 0.0025 },\n            { nominal: 51, mass: 50.94395704, abundance: 0.9975 },\n            { nominal: 52, mass: 51.94477301 },\n            { nominal: 53, mass: 52.9443367 },\n            { nominal: 54, mass: 53.946439 },\n            { nominal: 55, mass: 54.94724 },\n            { nominal: 56, mass: 55.95048 },\n            { nominal: 57, mass: 56.95252 },\n            { nominal: 58, mass: 57.95672 },\n            { nominal: 59, mass: 58.95939 },\n            { nominal: 60, mass: 59.96431 },\n            { nominal: 61, mass: 60.96725 },\n            { nominal: 62, mass: 61.97265 },\n            { nominal: 63, mass: 62.97639 },\n            { nominal: 64, mass: 63.98264 },\n            { nominal: 65, mass: 64.9875 },\n            { nominal: 66, mass: 65.99398 },\n        ],\n        symbol: 'V',\n        mass: 50.941465037425004,\n        name: 'Vanadium',\n        monoisotopicMass: 50.94395704,\n    },\n    {\n        number: 24,\n        isotopes: [\n            { nominal: 42, mass: 42.0067 },\n            { nominal: 43, mass: 42.99753 },\n            { nominal: 44, mass: 43.98536 },\n            { nominal: 45, mass: 44.97905 },\n            { nominal: 46, mass: 45.968359 },\n            { nominal: 47, mass: 46.9628974 },\n            { nominal: 48, mass: 47.9540291 },\n            { nominal: 49, mass: 48.9513333 },\n            { nominal: 50, mass: 49.94604183, abundance: 0.04345 },\n            { nominal: 51, mass: 50.94476502 },\n            { nominal: 52, mass: 51.94050623, abundance: 0.83789 },\n            { nominal: 53, mass: 52.94064815, abundance: 0.09501 },\n            { nominal: 54, mass: 53.93887916, abundance: 0.02365 },\n            { nominal: 55, mass: 54.94083843 },\n            { nominal: 56, mass: 55.9406531 },\n            { nominal: 57, mass: 56.943613 },\n            { nominal: 58, mass: 57.94435 },\n            { nominal: 59, mass: 58.94859 },\n            { nominal: 60, mass: 59.95008 },\n            { nominal: 61, mass: 60.95442 },\n            { nominal: 62, mass: 61.9561 },\n            { nominal: 63, mass: 62.96165 },\n            { nominal: 64, mass: 63.96408 },\n            { nominal: 65, mass: 64.96996 },\n            { nominal: 66, mass: 65.97366 },\n            { nominal: 67, mass: 66.98016 },\n            { nominal: 68, mass: 67.98403 },\n        ],\n        symbol: 'Cr',\n        mass: 51.9961317554337,\n        name: 'Chromium',\n        monoisotopicMass: 51.94050623,\n    },\n    {\n        number: 25,\n        isotopes: [\n            { nominal: 44, mass: 44.00715 },\n            { nominal: 45, mass: 44.99449 },\n            { nominal: 46, mass: 45.98609 },\n            { nominal: 47, mass: 46.975775 },\n            { nominal: 48, mass: 47.96852 },\n            { nominal: 49, mass: 48.959595 },\n            { nominal: 50, mass: 49.95423778 },\n            { nominal: 51, mass: 50.94820847 },\n            { nominal: 52, mass: 51.9455639 },\n            { nominal: 53, mass: 52.94128889 },\n            { nominal: 54, mass: 53.9403576 },\n            { nominal: 55, mass: 54.93804391, abundance: 1 },\n            { nominal: 56, mass: 55.93890369 },\n            { nominal: 57, mass: 56.9382861 },\n            { nominal: 58, mass: 57.9400666 },\n            { nominal: 59, mass: 58.9403911 },\n            { nominal: 60, mass: 59.9431366 },\n            { nominal: 61, mass: 60.9444525 },\n            { nominal: 62, mass: 61.94795 },\n            { nominal: 63, mass: 62.9496647 },\n            { nominal: 64, mass: 63.9538494 },\n            { nominal: 65, mass: 64.9560198 },\n            { nominal: 66, mass: 65.960547 },\n            { nominal: 67, mass: 66.96424 },\n            { nominal: 68, mass: 67.96962 },\n            { nominal: 69, mass: 68.97366 },\n            { nominal: 70, mass: 69.97937 },\n            { nominal: 71, mass: 70.98368 },\n        ],\n        symbol: 'Mn',\n        mass: 54.93804391,\n        name: 'Manganese',\n        monoisotopicMass: 54.93804391,\n    },\n    {\n        number: 26,\n        isotopes: [\n            { nominal: 45, mass: 45.01442 },\n            { nominal: 46, mass: 46.00063 },\n            { nominal: 47, mass: 46.99185 },\n            { nominal: 48, mass: 47.98023 },\n            { nominal: 49, mass: 48.973429 },\n            { nominal: 50, mass: 49.962975 },\n            { nominal: 51, mass: 50.956841 },\n            { nominal: 52, mass: 51.9481131 },\n            { nominal: 53, mass: 52.9453064 },\n            { nominal: 54, mass: 53.93960899, abundance: 0.05845 },\n            { nominal: 55, mass: 54.93829199 },\n            { nominal: 56, mass: 55.93493633, abundance: 0.91754 },\n            { nominal: 57, mass: 56.93539284, abundance: 0.02119 },\n            { nominal: 58, mass: 57.93327443, abundance: 0.00282 },\n            { nominal: 59, mass: 58.93487434 },\n            { nominal: 60, mass: 59.9340711 },\n            { nominal: 61, mass: 60.9367462 },\n            { nominal: 62, mass: 61.9367918 },\n            { nominal: 63, mass: 62.9402727 },\n            { nominal: 64, mass: 63.9409878 },\n            { nominal: 65, mass: 64.9450115 },\n            { nominal: 66, mass: 65.94625 },\n            { nominal: 67, mass: 66.95054 },\n            { nominal: 68, mass: 67.95295 },\n            { nominal: 69, mass: 68.95807 },\n            { nominal: 70, mass: 69.96102 },\n            { nominal: 71, mass: 70.96672 },\n            { nominal: 72, mass: 71.96983 },\n            { nominal: 73, mass: 72.97572 },\n            { nominal: 74, mass: 73.97935 },\n        ],\n        symbol: 'Fe',\n        mass: 55.845144433865904,\n        name: 'Iron',\n        monoisotopicMass: 55.93493633,\n    },\n    {\n        number: 27,\n        isotopes: [\n            { nominal: 47, mass: 47.01057 },\n            { nominal: 48, mass: 48.00093 },\n            { nominal: 49, mass: 48.98891 },\n            { nominal: 50, mass: 49.98091 },\n            { nominal: 51, mass: 50.970647 },\n            { nominal: 52, mass: 51.96351 },\n            { nominal: 53, mass: 52.9542041 },\n            { nominal: 54, mass: 53.94845987 },\n            { nominal: 55, mass: 54.9419972 },\n            { nominal: 56, mass: 55.9398388 },\n            { nominal: 57, mass: 56.93629057 },\n            { nominal: 58, mass: 57.9357521 },\n            { nominal: 59, mass: 58.93319429, abundance: 1 },\n            { nominal: 60, mass: 59.9338163 },\n            { nominal: 61, mass: 60.93247662 },\n            { nominal: 62, mass: 61.934059 },\n            { nominal: 63, mass: 62.9336 },\n            { nominal: 64, mass: 63.935811 },\n            { nominal: 65, mass: 64.9364621 },\n            { nominal: 66, mass: 65.939443 },\n            { nominal: 67, mass: 66.9406096 },\n            { nominal: 68, mass: 67.94426 },\n            { nominal: 69, mass: 68.94614 },\n            { nominal: 70, mass: 69.94963 },\n            { nominal: 71, mass: 70.95237 },\n            { nominal: 72, mass: 71.95729 },\n            { nominal: 73, mass: 72.96039 },\n            { nominal: 74, mass: 73.96515 },\n            { nominal: 75, mass: 74.96876 },\n            { nominal: 76, mass: 75.97413 },\n        ],\n        symbol: 'Co',\n        mass: 58.93319429,\n        name: 'Cobalt',\n        monoisotopicMass: 58.93319429,\n    },\n    {\n        number: 28,\n        isotopes: [\n            { nominal: 48, mass: 48.01769 },\n            { nominal: 49, mass: 49.0077 },\n            { nominal: 50, mass: 49.99474 },\n            { nominal: 51, mass: 50.98611 },\n            { nominal: 52, mass: 51.9748 },\n            { nominal: 53, mass: 52.96819 },\n            { nominal: 54, mass: 53.957892 },\n            { nominal: 55, mass: 54.95133063 },\n            { nominal: 56, mass: 55.94212855 },\n            { nominal: 57, mass: 56.93979218 },\n            { nominal: 58, mass: 57.93534241, abundance: 0.68077 },\n            { nominal: 59, mass: 58.9343462 },\n            { nominal: 60, mass: 59.93078588, abundance: 0.26223 },\n            { nominal: 61, mass: 60.93105557, abundance: 0.011399 },\n            { nominal: 62, mass: 61.92834537, abundance: 0.036346 },\n            { nominal: 63, mass: 62.92966963 },\n            { nominal: 64, mass: 63.92796682, abundance: 0.009255 },\n            { nominal: 65, mass: 64.93008517 },\n            { nominal: 66, mass: 65.9291393 },\n            { nominal: 67, mass: 66.9315694 },\n            { nominal: 68, mass: 67.9318688 },\n            { nominal: 69, mass: 68.9356103 },\n            { nominal: 70, mass: 69.9364313 },\n            { nominal: 71, mass: 70.940519 },\n            { nominal: 72, mass: 71.9417859 },\n            { nominal: 73, mass: 72.9462067 },\n            { nominal: 74, mass: 73.94798 },\n            { nominal: 75, mass: 74.9525 },\n            { nominal: 76, mass: 75.95533 },\n            { nominal: 77, mass: 76.96055 },\n            { nominal: 78, mass: 77.96336 },\n            { nominal: 79, mass: 78.97025 },\n        ],\n        symbol: 'Ni',\n        mass: 58.69334710994765,\n        name: 'Nickel',\n        monoisotopicMass: 57.93534241,\n    },\n    {\n        number: 29,\n        isotopes: [\n            { nominal: 52, mass: 51.99671 },\n            { nominal: 53, mass: 52.98459 },\n            { nominal: 54, mass: 53.97666 },\n            { nominal: 55, mass: 54.96604 },\n            { nominal: 56, mass: 55.95895 },\n            { nominal: 57, mass: 56.9492125 },\n            { nominal: 58, mass: 57.94453305 },\n            { nominal: 59, mass: 58.93949748 },\n            { nominal: 60, mass: 59.9373645 },\n            { nominal: 61, mass: 60.9334576 },\n            { nominal: 62, mass: 61.93259541 },\n            { nominal: 63, mass: 62.92959772, abundance: 0.6915 },\n            { nominal: 64, mass: 63.92976434 },\n            { nominal: 65, mass: 64.9277897, abundance: 0.3085 },\n            { nominal: 66, mass: 65.92886903 },\n            { nominal: 67, mass: 66.9277303 },\n            { nominal: 68, mass: 67.9296109 },\n            { nominal: 69, mass: 68.9294293 },\n            { nominal: 70, mass: 69.9323921 },\n            { nominal: 71, mass: 70.9326768 },\n            { nominal: 72, mass: 71.9358203 },\n            { nominal: 73, mass: 72.9366744 },\n            { nominal: 74, mass: 73.9398749 },\n            { nominal: 75, mass: 74.9415226 },\n            { nominal: 76, mass: 75.945275 },\n            { nominal: 77, mass: 76.94792 },\n            { nominal: 78, mass: 77.95223 },\n            { nominal: 79, mass: 78.95502 },\n            { nominal: 80, mass: 79.96089 },\n            { nominal: 81, mass: 80.96587 },\n            { nominal: 82, mass: 81.97244 },\n        ],\n        symbol: 'Cu',\n        mass: 63.54603994583,\n        name: 'Copper',\n        monoisotopicMass: 62.92959772,\n    },\n    {\n        number: 30,\n        isotopes: [\n            { nominal: 54, mass: 53.99204 },\n            { nominal: 55, mass: 54.98398 },\n            { nominal: 56, mass: 55.97254 },\n            { nominal: 57, mass: 56.96506 },\n            { nominal: 58, mass: 57.954591 },\n            { nominal: 59, mass: 58.94931266 },\n            { nominal: 60, mass: 59.9418421 },\n            { nominal: 61, mass: 60.939507 },\n            { nominal: 62, mass: 61.93433397 },\n            { nominal: 63, mass: 62.9332115 },\n            { nominal: 64, mass: 63.92914201, abundance: 0.4917 },\n            { nominal: 65, mass: 64.92924077 },\n            { nominal: 66, mass: 65.92603381, abundance: 0.2773 },\n            { nominal: 67, mass: 66.92712775, abundance: 0.0404 },\n            { nominal: 68, mass: 67.92484455, abundance: 0.1845 },\n            { nominal: 69, mass: 68.9265507 },\n            { nominal: 70, mass: 69.9253192, abundance: 0.0061 },\n            { nominal: 71, mass: 70.9277196 },\n            { nominal: 72, mass: 71.9268428 },\n            { nominal: 73, mass: 72.9295826 },\n            { nominal: 74, mass: 73.9294073 },\n            { nominal: 75, mass: 74.9328402 },\n            { nominal: 76, mass: 75.933115 },\n            { nominal: 77, mass: 76.9368872 },\n            { nominal: 78, mass: 77.9382892 },\n            { nominal: 79, mass: 78.9426381 },\n            { nominal: 80, mass: 79.9445529 },\n            { nominal: 81, mass: 80.9504026 },\n            { nominal: 82, mass: 81.95426 },\n            { nominal: 83, mass: 82.96056 },\n            { nominal: 84, mass: 83.96521 },\n            { nominal: 85, mass: 84.97226 },\n        ],\n        symbol: 'Zn',\n        mass: 65.37778252952499,\n        name: 'Zinc',\n        monoisotopicMass: 63.92914201,\n    },\n    {\n        number: 31,\n        isotopes: [\n            { nominal: 56, mass: 55.99536 },\n            { nominal: 57, mass: 56.9832 },\n            { nominal: 58, mass: 57.97478 },\n            { nominal: 59, mass: 58.96353 },\n            { nominal: 60, mass: 59.95729 },\n            { nominal: 61, mass: 60.949399 },\n            { nominal: 62, mass: 61.94419025 },\n            { nominal: 63, mass: 62.9392942 },\n            { nominal: 64, mass: 63.9368404 },\n            { nominal: 65, mass: 64.93273459 },\n            { nominal: 66, mass: 65.9315894 },\n            { nominal: 67, mass: 66.9282025 },\n            { nominal: 68, mass: 67.9279805 },\n            { nominal: 69, mass: 68.9255735, abundance: 0.60108 },\n            { nominal: 70, mass: 69.9260219 },\n            { nominal: 71, mass: 70.92470258, abundance: 0.39892 },\n            { nominal: 72, mass: 71.92636747 },\n            { nominal: 73, mass: 72.9251747 },\n            { nominal: 74, mass: 73.9269457 },\n            { nominal: 75, mass: 74.9265002 },\n            { nominal: 76, mass: 75.9288276 },\n            { nominal: 77, mass: 76.9291543 },\n            { nominal: 78, mass: 77.9316088 },\n            { nominal: 79, mass: 78.9328523 },\n            { nominal: 80, mass: 79.9364208 },\n            { nominal: 81, mass: 80.9381338 },\n            { nominal: 82, mass: 81.9431765 },\n            { nominal: 83, mass: 82.9471203 },\n            { nominal: 84, mass: 83.95246 },\n            { nominal: 85, mass: 84.95699 },\n            { nominal: 86, mass: 85.96301 },\n            { nominal: 87, mass: 86.96824 },\n        ],\n        symbol: 'Ga',\n        mass: 69.7230660725936,\n        name: 'Gallium',\n        monoisotopicMass: 68.9255735,\n    },\n    {\n        number: 32,\n        isotopes: [\n            { nominal: 58, mass: 57.99172 },\n            { nominal: 59, mass: 58.98249 },\n            { nominal: 60, mass: 59.97036 },\n            { nominal: 61, mass: 60.96379 },\n            { nominal: 62, mass: 61.95502 },\n            { nominal: 63, mass: 62.949628 },\n            { nominal: 64, mass: 63.9416899 },\n            { nominal: 65, mass: 64.9393681 },\n            { nominal: 66, mass: 65.9338621 },\n            { nominal: 67, mass: 66.9327339 },\n            { nominal: 68, mass: 67.9280953 },\n            { nominal: 69, mass: 68.9279645 },\n            { nominal: 70, mass: 69.92424875, abundance: 0.2057 },\n            { nominal: 71, mass: 70.92495233 },\n            { nominal: 72, mass: 71.922075826, abundance: 0.2745 },\n            { nominal: 73, mass: 72.923458956, abundance: 0.0775 },\n            { nominal: 74, mass: 73.921177761, abundance: 0.365 },\n            { nominal: 75, mass: 74.92285837 },\n            { nominal: 76, mass: 75.921402726, abundance: 0.0773 },\n            { nominal: 77, mass: 76.923549843 },\n            { nominal: 78, mass: 77.9228529 },\n            { nominal: 79, mass: 78.92536 },\n            { nominal: 80, mass: 79.9253508 },\n            { nominal: 81, mass: 80.9288329 },\n            { nominal: 82, mass: 81.929774 },\n            { nominal: 83, mass: 82.9345391 },\n            { nominal: 84, mass: 83.9375751 },\n            { nominal: 85, mass: 84.9429697 },\n            { nominal: 86, mass: 85.94658 },\n            { nominal: 87, mass: 86.95268 },\n            { nominal: 88, mass: 87.95691 },\n            { nominal: 89, mass: 88.96379 },\n            { nominal: 90, mass: 89.96863 },\n        ],\n        symbol: 'Ge',\n        mass: 72.6275501646868,\n        name: 'Germanium',\n        monoisotopicMass: 73.921177761,\n    },\n    {\n        number: 33,\n        isotopes: [\n            { nominal: 60, mass: 59.99388 },\n            { nominal: 61, mass: 60.98112 },\n            { nominal: 62, mass: 61.97361 },\n            { nominal: 63, mass: 62.9639 },\n            { nominal: 64, mass: 63.95743 },\n            { nominal: 65, mass: 64.949611 },\n            { nominal: 66, mass: 65.9441488 },\n            { nominal: 67, mass: 66.93925111 },\n            { nominal: 68, mass: 67.9367741 },\n            { nominal: 69, mass: 68.932246 },\n            { nominal: 70, mass: 69.930926 },\n            { nominal: 71, mass: 70.9271138 },\n            { nominal: 72, mass: 71.9267523 },\n            { nominal: 73, mass: 72.9238291 },\n            { nominal: 74, mass: 73.9239286 },\n            { nominal: 75, mass: 74.92159457, abundance: 1 },\n            { nominal: 76, mass: 75.92239202 },\n            { nominal: 77, mass: 76.9206476 },\n            { nominal: 78, mass: 77.921828 },\n            { nominal: 79, mass: 78.9209484 },\n            { nominal: 80, mass: 79.9224746 },\n            { nominal: 81, mass: 80.9221323 },\n            { nominal: 82, mass: 81.9247412 },\n            { nominal: 83, mass: 82.9252069 },\n            { nominal: 84, mass: 83.9293033 },\n            { nominal: 85, mass: 84.9321637 },\n            { nominal: 86, mass: 85.9367015 },\n            { nominal: 87, mass: 86.9402917 },\n            { nominal: 88, mass: 87.94555 },\n            { nominal: 89, mass: 88.94976 },\n            { nominal: 90, mass: 89.95563 },\n            { nominal: 91, mass: 90.96039 },\n            { nominal: 92, mass: 91.96674 },\n        ],\n        symbol: 'As',\n        mass: 74.92159457,\n        name: 'Arsenic',\n        monoisotopicMass: 74.92159457,\n    },\n    {\n        number: 34,\n        isotopes: [\n            { nominal: 64, mass: 63.97109 },\n            { nominal: 65, mass: 64.9644 },\n            { nominal: 66, mass: 65.95559 },\n            { nominal: 67, mass: 66.949994 },\n            { nominal: 68, mass: 67.94182524 },\n            { nominal: 69, mass: 68.9394148 },\n            { nominal: 70, mass: 69.9335155 },\n            { nominal: 71, mass: 70.9322094 },\n            { nominal: 72, mass: 71.9271405 },\n            { nominal: 73, mass: 72.9267549 },\n            { nominal: 74, mass: 73.922475934, abundance: 0.0089 },\n            { nominal: 75, mass: 74.92252287 },\n            { nominal: 76, mass: 75.919213704, abundance: 0.0937 },\n            { nominal: 77, mass: 76.919914154, abundance: 0.0763 },\n            { nominal: 78, mass: 77.91730928, abundance: 0.2377 },\n            { nominal: 79, mass: 78.91849929 },\n            { nominal: 80, mass: 79.9165218, abundance: 0.4961 },\n            { nominal: 81, mass: 80.917993 },\n            { nominal: 82, mass: 81.9166995, abundance: 0.0873 },\n            { nominal: 83, mass: 82.9191186 },\n            { nominal: 84, mass: 83.9184668 },\n            { nominal: 85, mass: 84.9222608 },\n            { nominal: 86, mass: 85.9243117 },\n            { nominal: 87, mass: 86.9286886 },\n            { nominal: 88, mass: 87.9314175 },\n            { nominal: 89, mass: 88.9366691 },\n            { nominal: 90, mass: 89.9401 },\n            { nominal: 91, mass: 90.94596 },\n            { nominal: 92, mass: 91.94984 },\n            { nominal: 93, mass: 92.95629 },\n            { nominal: 94, mass: 93.96049 },\n            { nominal: 95, mass: 94.9673 },\n        ],\n        symbol: 'Se',\n        mass: 78.95938855701361,\n        name: 'Selenium',\n        monoisotopicMass: 79.9165218,\n    },\n    {\n        number: 35,\n        isotopes: [\n            { nominal: 67, mass: 66.96465 },\n            { nominal: 68, mass: 67.95873 },\n            { nominal: 69, mass: 68.950497 },\n            { nominal: 70, mass: 69.944792 },\n            { nominal: 71, mass: 70.9393422 },\n            { nominal: 72, mass: 71.9365886 },\n            { nominal: 73, mass: 72.9316715 },\n            { nominal: 74, mass: 73.9299102 },\n            { nominal: 75, mass: 74.9258105 },\n            { nominal: 76, mass: 75.924542 },\n            { nominal: 77, mass: 76.9213792 },\n            { nominal: 78, mass: 77.9211459 },\n            { nominal: 79, mass: 78.9183376, abundance: 0.5069 },\n            { nominal: 80, mass: 79.9185298 },\n            { nominal: 81, mass: 80.9162897, abundance: 0.4931 },\n            { nominal: 82, mass: 81.9168032 },\n            { nominal: 83, mass: 82.9151756 },\n            { nominal: 84, mass: 83.916496 },\n            { nominal: 85, mass: 84.9156458 },\n            { nominal: 86, mass: 85.9188054 },\n            { nominal: 87, mass: 86.920674 },\n            { nominal: 88, mass: 87.9240833 },\n            { nominal: 89, mass: 88.9267046 },\n            { nominal: 90, mass: 89.9312928 },\n            { nominal: 91, mass: 90.9343986 },\n            { nominal: 92, mass: 91.9396316 },\n            { nominal: 93, mass: 92.94313 },\n            { nominal: 94, mass: 93.9489 },\n            { nominal: 95, mass: 94.95301 },\n            { nominal: 96, mass: 95.95903 },\n            { nominal: 97, mass: 96.96344 },\n            { nominal: 98, mass: 97.96946 },\n        ],\n        symbol: 'Br',\n        mass: 79.90352778050999,\n        name: 'Bromine',\n        monoisotopicMass: 78.9183376,\n    },\n    {\n        number: 36,\n        isotopes: [\n            { nominal: 69, mass: 68.96518 },\n            { nominal: 70, mass: 69.95604 },\n            { nominal: 71, mass: 70.95027 },\n            { nominal: 72, mass: 71.9420924 },\n            { nominal: 73, mass: 72.9392892 },\n            { nominal: 74, mass: 73.933084 },\n            { nominal: 75, mass: 74.9309457 },\n            { nominal: 76, mass: 75.9259103 },\n            { nominal: 77, mass: 76.92467 },\n            { nominal: 78, mass: 77.92036494, abundance: 0.00355 },\n            { nominal: 79, mass: 78.9200829 },\n            { nominal: 80, mass: 79.91637808, abundance: 0.02286 },\n            { nominal: 81, mass: 80.9165912 },\n            { nominal: 82, mass: 81.91348273, abundance: 0.11593 },\n            { nominal: 83, mass: 82.91412716, abundance: 0.115 },\n            { nominal: 84, mass: 83.9114977282, abundance: 0.56987 },\n            { nominal: 85, mass: 84.9125273 },\n            { nominal: 86, mass: 85.9106106269, abundance: 0.17279 },\n            { nominal: 87, mass: 86.91335476 },\n            { nominal: 88, mass: 87.9144479 },\n            { nominal: 89, mass: 88.9178355 },\n            { nominal: 90, mass: 89.9195279 },\n            { nominal: 91, mass: 90.9238063 },\n            { nominal: 92, mass: 91.9261731 },\n            { nominal: 93, mass: 92.9311472 },\n            { nominal: 94, mass: 93.93414 },\n            { nominal: 95, mass: 94.939711 },\n            { nominal: 96, mass: 95.943017 },\n            { nominal: 97, mass: 96.94909 },\n            { nominal: 98, mass: 97.95243 },\n            { nominal: 99, mass: 98.95839 },\n            { nominal: 100, mass: 99.96237 },\n            { nominal: 101, mass: 100.96873 },\n        ],\n        symbol: 'Kr',\n        mass: 83.7979999953261,\n        name: 'Krypton',\n        monoisotopicMass: 83.9114977282,\n    },\n    {\n        number: 37,\n        isotopes: [\n            { nominal: 71, mass: 70.96532 },\n            { nominal: 72, mass: 71.95908 },\n            { nominal: 73, mass: 72.95053 },\n            { nominal: 74, mass: 73.9442659 },\n            { nominal: 75, mass: 74.9385732 },\n            { nominal: 76, mass: 75.935073 },\n            { nominal: 77, mass: 76.9304016 },\n            { nominal: 78, mass: 77.9281419 },\n            { nominal: 79, mass: 78.9239899 },\n            { nominal: 80, mass: 79.9225164 },\n            { nominal: 81, mass: 80.9189939 },\n            { nominal: 82, mass: 81.918209 },\n            { nominal: 83, mass: 82.9151142 },\n            { nominal: 84, mass: 83.9143752 },\n            { nominal: 85, mass: 84.9117897379, abundance: 0.7217 },\n            { nominal: 86, mass: 85.91116743 },\n            { nominal: 87, mass: 86.909180531, abundance: 0.2783 },\n            { nominal: 88, mass: 87.91131559 },\n            { nominal: 89, mass: 88.9122783 },\n            { nominal: 90, mass: 89.9147985 },\n            { nominal: 91, mass: 90.9165372 },\n            { nominal: 92, mass: 91.9197284 },\n            { nominal: 93, mass: 92.9220393 },\n            { nominal: 94, mass: 93.9263948 },\n            { nominal: 95, mass: 94.92926 },\n            { nominal: 96, mass: 95.9341334 },\n            { nominal: 97, mass: 96.9371771 },\n            { nominal: 98, mass: 97.9416869 },\n            { nominal: 99, mass: 98.94503 },\n            { nominal: 100, mass: 99.95003 },\n            { nominal: 101, mass: 100.95404 },\n            { nominal: 102, mass: 101.95952 },\n            { nominal: 103, mass: 102.96392 },\n        ],\n        symbol: 'Rb',\n        mass: 85.46766359561973,\n        name: 'Rubidium',\n        monoisotopicMass: 84.9117897379,\n    },\n    {\n        number: 38,\n        isotopes: [\n            { nominal: 73, mass: 72.9657 },\n            { nominal: 74, mass: 73.95617 },\n            { nominal: 75, mass: 74.94995 },\n            { nominal: 76, mass: 75.941763 },\n            { nominal: 77, mass: 76.9379455 },\n            { nominal: 78, mass: 77.93218 },\n            { nominal: 79, mass: 78.9297077 },\n            { nominal: 80, mass: 79.9245175 },\n            { nominal: 81, mass: 80.9232114 },\n            { nominal: 82, mass: 81.9183999 },\n            { nominal: 83, mass: 82.9175544 },\n            { nominal: 84, mass: 83.9134191, abundance: 0.0056 },\n            { nominal: 85, mass: 84.912932 },\n            { nominal: 86, mass: 85.9092606, abundance: 0.0986 },\n            { nominal: 87, mass: 86.9088775, abundance: 0.07 },\n            { nominal: 88, mass: 87.9056125, abundance: 0.8258 },\n            { nominal: 89, mass: 88.9074511 },\n            { nominal: 90, mass: 89.90773 },\n            { nominal: 91, mass: 90.9101954 },\n            { nominal: 92, mass: 91.9110382 },\n            { nominal: 93, mass: 92.9140242 },\n            { nominal: 94, mass: 93.9153556 },\n            { nominal: 95, mass: 94.9193529 },\n            { nominal: 96, mass: 95.9217066 },\n            { nominal: 97, mass: 96.926374 },\n            { nominal: 98, mass: 97.9286888 },\n            { nominal: 99, mass: 98.9328907 },\n            { nominal: 100, mass: 99.93577 },\n            { nominal: 101, mass: 100.940352 },\n            { nominal: 102, mass: 101.943791 },\n            { nominal: 103, mass: 102.94909 },\n            { nominal: 104, mass: 103.95265 },\n            { nominal: 105, mass: 104.95855 },\n            { nominal: 106, mass: 105.96265 },\n            { nominal: 107, mass: 106.96897 },\n        ],\n        symbol: 'Sr',\n        mass: 87.61664446962,\n        name: 'Strontium',\n        monoisotopicMass: 87.9056125,\n    },\n    {\n        number: 39,\n        isotopes: [\n            { nominal: 76, mass: 75.95856 },\n            { nominal: 77, mass: 76.949781 },\n            { nominal: 78, mass: 77.94361 },\n            { nominal: 79, mass: 78.93735 },\n            { nominal: 80, mass: 79.9343561 },\n            { nominal: 81, mass: 80.9294556 },\n            { nominal: 82, mass: 81.9269314 },\n            { nominal: 83, mass: 82.922485 },\n            { nominal: 84, mass: 83.9206721 },\n            { nominal: 85, mass: 84.916433 },\n            { nominal: 86, mass: 85.914886 },\n            { nominal: 87, mass: 86.9108761 },\n            { nominal: 88, mass: 87.9095016 },\n            { nominal: 89, mass: 88.9058403, abundance: 1 },\n            { nominal: 90, mass: 89.9071439 },\n            { nominal: 91, mass: 90.9072974 },\n            { nominal: 92, mass: 91.9089451 },\n            { nominal: 93, mass: 92.909578 },\n            { nominal: 94, mass: 93.9115906 },\n            { nominal: 95, mass: 94.9128161 },\n            { nominal: 96, mass: 95.9158968 },\n            { nominal: 97, mass: 96.9182741 },\n            { nominal: 98, mass: 97.9223821 },\n            { nominal: 99, mass: 98.924148 },\n            { nominal: 100, mass: 99.927715 },\n            { nominal: 101, mass: 100.9301477 },\n            { nominal: 102, mass: 101.9343277 },\n            { nominal: 103, mass: 102.937243 },\n            { nominal: 104, mass: 103.94196 },\n            { nominal: 105, mass: 104.94544 },\n            { nominal: 106, mass: 105.95056 },\n            { nominal: 107, mass: 106.95452 },\n            { nominal: 108, mass: 107.95996 },\n            { nominal: 109, mass: 108.96436 },\n        ],\n        symbol: 'Y',\n        mass: 88.9058403,\n        name: 'Yttrium',\n        monoisotopicMass: 88.9058403,\n    },\n    {\n        number: 40,\n        isotopes: [\n            { nominal: 78, mass: 77.95566 },\n            { nominal: 79, mass: 78.94948 },\n            { nominal: 80, mass: 79.9404 },\n            { nominal: 81, mass: 80.93731 },\n            { nominal: 82, mass: 81.93135 },\n            { nominal: 83, mass: 82.9292421 },\n            { nominal: 84, mass: 83.9233269 },\n            { nominal: 85, mass: 84.9214444 },\n            { nominal: 86, mass: 85.9162972 },\n            { nominal: 87, mass: 86.914818 },\n            { nominal: 88, mass: 87.9102213 },\n            { nominal: 89, mass: 88.9088814 },\n            { nominal: 90, mass: 89.9046977, abundance: 0.5145 },\n            { nominal: 91, mass: 90.9056396, abundance: 0.1122 },\n            { nominal: 92, mass: 91.9050347, abundance: 0.1715 },\n            { nominal: 93, mass: 92.9064699 },\n            { nominal: 94, mass: 93.9063108, abundance: 0.1738 },\n            { nominal: 95, mass: 94.9080385 },\n            { nominal: 96, mass: 95.9082714, abundance: 0.028 },\n            { nominal: 97, mass: 96.9109512 },\n            { nominal: 98, mass: 97.9127289 },\n            { nominal: 99, mass: 98.916667 },\n            { nominal: 100, mass: 99.9180006 },\n            { nominal: 101, mass: 100.921448 },\n            { nominal: 102, mass: 101.9231409 },\n            { nominal: 103, mass: 102.927191 },\n            { nominal: 104, mass: 103.929436 },\n            { nominal: 105, mass: 104.934008 },\n            { nominal: 106, mass: 105.93676 },\n            { nominal: 107, mass: 106.94174 },\n            { nominal: 108, mass: 107.94487 },\n            { nominal: 109, mass: 108.95041 },\n            { nominal: 110, mass: 109.95396 },\n            { nominal: 111, mass: 110.95968 },\n            { nominal: 112, mass: 111.9637 },\n        ],\n        symbol: 'Zr',\n        mass: 91.22364159706,\n        name: 'Zirconium',\n        monoisotopicMass: 89.9046977,\n    },\n    {\n        number: 41,\n        isotopes: [\n            { nominal: 81, mass: 80.9496 },\n            { nominal: 82, mass: 81.94396 },\n            { nominal: 83, mass: 82.93729 },\n            { nominal: 84, mass: 83.93449 },\n            { nominal: 85, mass: 84.9288458 },\n            { nominal: 86, mass: 85.9257828 },\n            { nominal: 87, mass: 86.9206937 },\n            { nominal: 88, mass: 87.918222 },\n            { nominal: 89, mass: 88.913445 },\n            { nominal: 90, mass: 89.9112584 },\n            { nominal: 91, mass: 90.9069897 },\n            { nominal: 92, mass: 91.9071881 },\n            { nominal: 93, mass: 92.906373, abundance: 1 },\n            { nominal: 94, mass: 93.9072788 },\n            { nominal: 95, mass: 94.9068324 },\n            { nominal: 96, mass: 95.9080973 },\n            { nominal: 97, mass: 96.9080959 },\n            { nominal: 98, mass: 97.9103265 },\n            { nominal: 99, mass: 98.911613 },\n            { nominal: 100, mass: 99.9143276 },\n            { nominal: 101, mass: 100.9153103 },\n            { nominal: 102, mass: 101.9180772 },\n            { nominal: 103, mass: 102.9194572 },\n            { nominal: 104, mass: 103.9228925 },\n            { nominal: 105, mass: 104.9249465 },\n            { nominal: 106, mass: 105.9289317 },\n            { nominal: 107, mass: 106.9315937 },\n            { nominal: 108, mass: 107.9360748 },\n            { nominal: 109, mass: 108.93922 },\n            { nominal: 110, mass: 109.94403 },\n            { nominal: 111, mass: 110.94753 },\n            { nominal: 112, mass: 111.95247 },\n            { nominal: 113, mass: 112.95651 },\n            { nominal: 114, mass: 113.96201 },\n            { nominal: 115, mass: 114.96634 },\n        ],\n        symbol: 'Nb',\n        mass: 92.906373,\n        name: 'Niobium',\n        monoisotopicMass: 92.906373,\n    },\n    {\n        number: 42,\n        isotopes: [\n            { nominal: 83, mass: 82.94988 },\n            { nominal: 84, mass: 83.94149 },\n            { nominal: 85, mass: 84.938261 },\n            { nominal: 86, mass: 85.9311748 },\n            { nominal: 87, mass: 86.9281962 },\n            { nominal: 88, mass: 87.9219678 },\n            { nominal: 89, mass: 88.9194682 },\n            { nominal: 90, mass: 89.9139309 },\n            { nominal: 91, mass: 90.9117453 },\n            { nominal: 92, mass: 91.90680796, abundance: 0.1453 },\n            { nominal: 93, mass: 92.90680958 },\n            { nominal: 94, mass: 93.9050849, abundance: 0.0915 },\n            { nominal: 95, mass: 94.90583877, abundance: 0.1584 },\n            { nominal: 96, mass: 95.90467612, abundance: 0.1667 },\n            { nominal: 97, mass: 96.90601812, abundance: 0.096 },\n            { nominal: 98, mass: 97.90540482, abundance: 0.2439 },\n            { nominal: 99, mass: 98.90770851 },\n            { nominal: 100, mass: 99.9074718, abundance: 0.0982 },\n            { nominal: 101, mass: 100.9103414 },\n            { nominal: 102, mass: 101.9102834 },\n            { nominal: 103, mass: 102.913079 },\n            { nominal: 104, mass: 103.9137344 },\n            { nominal: 105, mass: 104.916969 },\n            { nominal: 106, mass: 105.918259 },\n            { nominal: 107, mass: 106.922106 },\n            { nominal: 108, mass: 107.924033 },\n            { nominal: 109, mass: 108.928424 },\n            { nominal: 110, mass: 109.930704 },\n            { nominal: 111, mass: 110.935654 },\n            { nominal: 112, mass: 111.93831 },\n            { nominal: 113, mass: 112.94335 },\n            { nominal: 114, mass: 113.94653 },\n            { nominal: 115, mass: 114.95196 },\n            { nominal: 116, mass: 115.95545 },\n            { nominal: 117, mass: 116.96117 },\n        ],\n        symbol: 'Mo',\n        mass: 95.959788541188,\n        name: 'Molybdenum',\n        monoisotopicMass: 97.90540482,\n    },\n    {\n        number: 43,\n        isotopes: [\n            { nominal: 85, mass: 84.95058 },\n            { nominal: 86, mass: 85.94493 },\n            { nominal: 87, mass: 86.9380672 },\n            { nominal: 88, mass: 87.93378 },\n            { nominal: 89, mass: 88.9276487 },\n            { nominal: 90, mass: 89.9240739 },\n            { nominal: 91, mass: 90.9184254 },\n            { nominal: 92, mass: 91.9152698 },\n            { nominal: 93, mass: 92.910246 },\n            { nominal: 94, mass: 93.9096536 },\n            { nominal: 95, mass: 94.9076536 },\n            { nominal: 96, mass: 95.907868 },\n            { nominal: 97, mass: 96.9063667 },\n            { nominal: 98, mass: 97.9072124 },\n            { nominal: 99, mass: 98.9062508 },\n            { nominal: 100, mass: 99.9076539 },\n            { nominal: 101, mass: 100.907309 },\n            { nominal: 102, mass: 101.9092097 },\n            { nominal: 103, mass: 102.909176 },\n            { nominal: 104, mass: 103.911425 },\n            { nominal: 105, mass: 104.911655 },\n            { nominal: 106, mass: 105.914358 },\n            { nominal: 107, mass: 106.9154606 },\n            { nominal: 108, mass: 107.9184957 },\n            { nominal: 109, mass: 108.920256 },\n            { nominal: 110, mass: 109.923744 },\n            { nominal: 111, mass: 110.925901 },\n            { nominal: 112, mass: 111.9299458 },\n            { nominal: 113, mass: 112.932569 },\n            { nominal: 114, mass: 113.93691 },\n            { nominal: 115, mass: 114.93998 },\n            { nominal: 116, mass: 115.94476 },\n            { nominal: 117, mass: 116.94806 },\n            { nominal: 118, mass: 117.95299 },\n            { nominal: 119, mass: 118.95666 },\n            { nominal: 120, mass: 119.96187 },\n        ],\n        symbol: 'Tc',\n        mass: null,\n        name: 'Technetium',\n    },\n    {\n        number: 44,\n        isotopes: [\n            { nominal: 87, mass: 86.95069 },\n            { nominal: 88, mass: 87.9416 },\n            { nominal: 89, mass: 88.93762 },\n            { nominal: 90, mass: 89.9303444 },\n            { nominal: 91, mass: 90.9267419 },\n            { nominal: 92, mass: 91.9202344 },\n            { nominal: 93, mass: 92.9171044 },\n            { nominal: 94, mass: 93.9113429 },\n            { nominal: 95, mass: 94.910406 },\n            { nominal: 96, mass: 95.90759025, abundance: 0.0554 },\n            { nominal: 97, mass: 96.9075471 },\n            { nominal: 98, mass: 97.9052868, abundance: 0.0187 },\n            { nominal: 99, mass: 98.9059341, abundance: 0.1276 },\n            { nominal: 100, mass: 99.9042143, abundance: 0.126 },\n            { nominal: 101, mass: 100.9055769, abundance: 0.1706 },\n            { nominal: 102, mass: 101.9043441, abundance: 0.3155 },\n            { nominal: 103, mass: 102.9063186 },\n            { nominal: 104, mass: 103.9054275, abundance: 0.1862 },\n            { nominal: 105, mass: 104.9077476 },\n            { nominal: 106, mass: 105.9073291 },\n            { nominal: 107, mass: 106.909972 },\n            { nominal: 108, mass: 107.910188 },\n            { nominal: 109, mass: 108.913326 },\n            { nominal: 110, mass: 109.9140407 },\n            { nominal: 111, mass: 110.91757 },\n            { nominal: 112, mass: 111.918809 },\n            { nominal: 113, mass: 112.922844 },\n            { nominal: 114, mass: 113.9246136 },\n            { nominal: 115, mass: 114.92882 },\n            { nominal: 116, mass: 115.9312192 },\n            { nominal: 117, mass: 116.9361 },\n            { nominal: 118, mass: 117.93853 },\n            { nominal: 119, mass: 118.94357 },\n            { nominal: 120, mass: 119.94631 },\n            { nominal: 121, mass: 120.95164 },\n            { nominal: 122, mass: 121.95447 },\n            { nominal: 123, mass: 122.95989 },\n            { nominal: 124, mass: 123.96305 },\n        ],\n        symbol: 'Ru',\n        mass: 101.06494013916,\n        name: 'Ruthenium',\n        monoisotopicMass: 101.9043441,\n    },\n    {\n        number: 45,\n        isotopes: [\n            { nominal: 89, mass: 88.95058 },\n            { nominal: 90, mass: 89.94422 },\n            { nominal: 91, mass: 90.93688 },\n            { nominal: 92, mass: 91.9323677 },\n            { nominal: 93, mass: 92.9259128 },\n            { nominal: 94, mass: 93.9217305 },\n            { nominal: 95, mass: 94.9158979 },\n            { nominal: 96, mass: 95.914453 },\n            { nominal: 97, mass: 96.911329 },\n            { nominal: 98, mass: 97.910708 },\n            { nominal: 99, mass: 98.9081282 },\n            { nominal: 100, mass: 99.908117 },\n            { nominal: 101, mass: 100.9061606 },\n            { nominal: 102, mass: 101.9068374 },\n            { nominal: 103, mass: 102.905498, abundance: 1 },\n            { nominal: 104, mass: 103.9066492 },\n            { nominal: 105, mass: 104.9056885 },\n            { nominal: 106, mass: 105.9072868 },\n            { nominal: 107, mass: 106.906748 },\n            { nominal: 108, mass: 107.908714 },\n            { nominal: 109, mass: 108.9087488 },\n            { nominal: 110, mass: 109.911079 },\n            { nominal: 111, mass: 110.9116423 },\n            { nominal: 112, mass: 111.914403 },\n            { nominal: 113, mass: 112.9154393 },\n            { nominal: 114, mass: 113.918718 },\n            { nominal: 115, mass: 114.9203116 },\n            { nominal: 116, mass: 115.924059 },\n            { nominal: 117, mass: 116.9260354 },\n            { nominal: 118, mass: 117.93034 },\n            { nominal: 119, mass: 118.932557 },\n            { nominal: 120, mass: 119.93686 },\n            { nominal: 121, mass: 120.93942 },\n            { nominal: 122, mass: 121.94399 },\n            { nominal: 123, mass: 122.94685 },\n            { nominal: 124, mass: 123.95151 },\n            { nominal: 125, mass: 124.95469 },\n            { nominal: 126, mass: 125.95946 },\n        ],\n        symbol: 'Rh',\n        mass: 102.905498,\n        name: 'Rhodium',\n        monoisotopicMass: 102.905498,\n    },\n    {\n        number: 46,\n        isotopes: [\n            { nominal: 91, mass: 90.95032 },\n            { nominal: 92, mass: 91.94088 },\n            { nominal: 93, mass: 92.93651 },\n            { nominal: 94, mass: 93.9290376 },\n            { nominal: 95, mass: 94.9248898 },\n            { nominal: 96, mass: 95.9182151 },\n            { nominal: 97, mass: 96.916472 },\n            { nominal: 98, mass: 97.9126983 },\n            { nominal: 99, mass: 98.9117748 },\n            { nominal: 100, mass: 99.908505 },\n            { nominal: 101, mass: 100.9082864 },\n            { nominal: 102, mass: 101.9056022, abundance: 0.0102 },\n            { nominal: 103, mass: 102.9060809 },\n            { nominal: 104, mass: 103.9040305, abundance: 0.1114 },\n            { nominal: 105, mass: 104.9050796, abundance: 0.2233 },\n            { nominal: 106, mass: 105.9034804, abundance: 0.2733 },\n            { nominal: 107, mass: 106.9051282 },\n            { nominal: 108, mass: 107.9038916, abundance: 0.2646 },\n            { nominal: 109, mass: 108.9059504 },\n            { nominal: 110, mass: 109.9051722, abundance: 0.1172 },\n            { nominal: 111, mass: 110.90768968 },\n            { nominal: 112, mass: 111.9073297 },\n            { nominal: 113, mass: 112.910261 },\n            { nominal: 114, mass: 113.9103686 },\n            { nominal: 115, mass: 114.913659 },\n            { nominal: 116, mass: 115.914297 },\n            { nominal: 117, mass: 116.9179547 },\n            { nominal: 118, mass: 117.9190667 },\n            { nominal: 119, mass: 118.9233402 },\n            { nominal: 120, mass: 119.9245511 },\n            { nominal: 121, mass: 120.9289503 },\n            { nominal: 122, mass: 121.930632 },\n            { nominal: 123, mass: 122.93514 },\n            { nominal: 124, mass: 123.93714 },\n            { nominal: 125, mass: 124.94179 },\n            { nominal: 126, mass: 125.94416 },\n            { nominal: 127, mass: 126.94907 },\n            { nominal: 128, mass: 127.95183 },\n        ],\n        symbol: 'Pd',\n        mass: 106.41532750734,\n        name: 'Palladium',\n        monoisotopicMass: 105.9034804,\n    },\n    {\n        number: 47,\n        isotopes: [\n            { nominal: 93, mass: 92.95033 },\n            { nominal: 94, mass: 93.94373 },\n            { nominal: 95, mass: 94.93602 },\n            { nominal: 96, mass: 95.930744 },\n            { nominal: 97, mass: 96.92397 },\n            { nominal: 98, mass: 97.92156 },\n            { nominal: 99, mass: 98.9176458 },\n            { nominal: 100, mass: 99.9161154 },\n            { nominal: 101, mass: 100.912684 },\n            { nominal: 102, mass: 101.9117047 },\n            { nominal: 103, mass: 102.9089631 },\n            { nominal: 104, mass: 103.9086239 },\n            { nominal: 105, mass: 104.9065256 },\n            { nominal: 106, mass: 105.9066636 },\n            { nominal: 107, mass: 106.9050916, abundance: 0.51839 },\n            { nominal: 108, mass: 107.9059503 },\n            { nominal: 109, mass: 108.9047553, abundance: 0.48161 },\n            { nominal: 110, mass: 109.9061102 },\n            { nominal: 111, mass: 110.9052959 },\n            { nominal: 112, mass: 111.9070486 },\n            { nominal: 113, mass: 112.906573 },\n            { nominal: 114, mass: 113.908823 },\n            { nominal: 115, mass: 114.908767 },\n            { nominal: 116, mass: 115.9113868 },\n            { nominal: 117, mass: 116.911774 },\n            { nominal: 118, mass: 117.9145955 },\n            { nominal: 119, mass: 118.91557 },\n            { nominal: 120, mass: 119.9187848 },\n            { nominal: 121, mass: 120.920125 },\n            { nominal: 122, mass: 121.923664 },\n            { nominal: 123, mass: 122.925337 },\n            { nominal: 124, mass: 123.92893 },\n            { nominal: 125, mass: 124.93105 },\n            { nominal: 126, mass: 125.93475 },\n            { nominal: 127, mass: 126.93711 },\n            { nominal: 128, mass: 127.94106 },\n            { nominal: 129, mass: 128.94395 },\n            { nominal: 130, mass: 129.9507 },\n        ],\n        symbol: 'Ag',\n        mass: 107.868149634557,\n        name: 'Silver',\n        monoisotopicMass: 106.9050916,\n    },\n    {\n        number: 48,\n        isotopes: [\n            { nominal: 95, mass: 94.94994 },\n            { nominal: 96, mass: 95.94034 },\n            { nominal: 97, mass: 96.9351 },\n            { nominal: 98, mass: 97.927389 },\n            { nominal: 99, mass: 98.9249258 },\n            { nominal: 100, mass: 99.9203488 },\n            { nominal: 101, mass: 100.9185862 },\n            { nominal: 102, mass: 101.914482 },\n            { nominal: 103, mass: 102.9134165 },\n            { nominal: 104, mass: 103.9098564 },\n            { nominal: 105, mass: 104.9094639 },\n            { nominal: 106, mass: 105.9064599, abundance: 0.0125 },\n            { nominal: 107, mass: 106.9066121 },\n            { nominal: 108, mass: 107.9041834, abundance: 0.0089 },\n            { nominal: 109, mass: 108.9049867 },\n            { nominal: 110, mass: 109.90300661, abundance: 0.1249 },\n            { nominal: 111, mass: 110.90418287, abundance: 0.128 },\n            { nominal: 112, mass: 111.90276287, abundance: 0.2413 },\n            { nominal: 113, mass: 112.90440813, abundance: 0.1222 },\n            { nominal: 114, mass: 113.90336509, abundance: 0.2873 },\n            { nominal: 115, mass: 114.90543751 },\n            { nominal: 116, mass: 115.90476315, abundance: 0.0749 },\n            { nominal: 117, mass: 116.907226 },\n            { nominal: 118, mass: 117.906922 },\n            { nominal: 119, mass: 118.909847 },\n            { nominal: 120, mass: 119.9098681 },\n            { nominal: 121, mass: 120.9129637 },\n            { nominal: 122, mass: 121.9134591 },\n            { nominal: 123, mass: 122.9168925 },\n            { nominal: 124, mass: 123.9176574 },\n            { nominal: 125, mass: 124.9212576 },\n            { nominal: 126, mass: 125.9224291 },\n            { nominal: 127, mass: 126.926472 },\n            { nominal: 128, mass: 127.9278129 },\n            { nominal: 129, mass: 128.93182 },\n            { nominal: 130, mass: 129.93394 },\n            { nominal: 131, mass: 130.9406 },\n            { nominal: 132, mass: 131.94604 },\n            { nominal: 133, mass: 132.95285 },\n        ],\n        symbol: 'Cd',\n        mass: 112.411557818268,\n        name: 'Cadmium',\n        monoisotopicMass: 113.90336509,\n    },\n    {\n        number: 49,\n        isotopes: [\n            { nominal: 97, mass: 96.94934 },\n            { nominal: 98, mass: 97.94214 },\n            { nominal: 99, mass: 98.93411 },\n            { nominal: 100, mass: 99.93096 },\n            { nominal: 101, mass: 100.92634 },\n            { nominal: 102, mass: 101.9241071 },\n            { nominal: 103, mass: 102.9198819 },\n            { nominal: 104, mass: 103.9182145 },\n            { nominal: 105, mass: 104.914502 },\n            { nominal: 106, mass: 105.913464 },\n            { nominal: 107, mass: 106.91029 },\n            { nominal: 108, mass: 107.9096935 },\n            { nominal: 109, mass: 108.9071514 },\n            { nominal: 110, mass: 109.90717 },\n            { nominal: 111, mass: 110.9051085 },\n            { nominal: 112, mass: 111.9055377 },\n            { nominal: 113, mass: 112.90406184, abundance: 0.0429 },\n            { nominal: 114, mass: 113.90491791 },\n            { nominal: 115, mass: 114.903878776, abundance: 0.9571 },\n            { nominal: 116, mass: 115.90525999 },\n            { nominal: 117, mass: 116.9045157 },\n            { nominal: 118, mass: 117.9063566 },\n            { nominal: 119, mass: 118.9058507 },\n            { nominal: 120, mass: 119.907967 },\n            { nominal: 121, mass: 120.907851 },\n            { nominal: 122, mass: 121.910281 },\n            { nominal: 123, mass: 122.910434 },\n            { nominal: 124, mass: 123.913182 },\n            { nominal: 125, mass: 124.913605 },\n            { nominal: 126, mass: 125.916507 },\n            { nominal: 127, mass: 126.917446 },\n            { nominal: 128, mass: 127.9204 },\n            { nominal: 129, mass: 128.9218053 },\n            { nominal: 130, mass: 129.924977 },\n            { nominal: 131, mass: 130.9269715 },\n            { nominal: 132, mass: 131.933001 },\n            { nominal: 133, mass: 132.93831 },\n            { nominal: 134, mass: 133.94454 },\n            { nominal: 135, mass: 134.95005 },\n        ],\n        symbol: 'In',\n        mass: 114.81808662944559,\n        name: 'Indium',\n        monoisotopicMass: 114.903878776,\n    },\n    {\n        number: 50,\n        isotopes: [\n            { nominal: 99, mass: 98.94853 },\n            { nominal: 100, mass: 99.9385 },\n            { nominal: 101, mass: 100.93526 },\n            { nominal: 102, mass: 101.93029 },\n            { nominal: 103, mass: 102.928105 },\n            { nominal: 104, mass: 103.9231052 },\n            { nominal: 105, mass: 104.9212684 },\n            { nominal: 106, mass: 105.9169574 },\n            { nominal: 107, mass: 106.9157137 },\n            { nominal: 108, mass: 107.9118943 },\n            { nominal: 109, mass: 108.9112921 },\n            { nominal: 110, mass: 109.907845 },\n            { nominal: 111, mass: 110.9077401 },\n            { nominal: 112, mass: 111.90482387, abundance: 0.0097 },\n            { nominal: 113, mass: 112.9051757 },\n            { nominal: 114, mass: 113.9027827, abundance: 0.0066 },\n            { nominal: 115, mass: 114.903344699, abundance: 0.0034 },\n            { nominal: 116, mass: 115.9017428, abundance: 0.1454 },\n            { nominal: 117, mass: 116.90295398, abundance: 0.0768 },\n            { nominal: 118, mass: 117.90160657, abundance: 0.2422 },\n            { nominal: 119, mass: 118.90331117, abundance: 0.0859 },\n            { nominal: 120, mass: 119.90220163, abundance: 0.3258 },\n            { nominal: 121, mass: 120.9042426 },\n            { nominal: 122, mass: 121.9034438, abundance: 0.0463 },\n            { nominal: 123, mass: 122.9057252 },\n            { nominal: 124, mass: 123.9052766, abundance: 0.0579 },\n            { nominal: 125, mass: 124.9077864 },\n            { nominal: 126, mass: 125.907659 },\n            { nominal: 127, mass: 126.91039 },\n            { nominal: 128, mass: 127.910507 },\n            { nominal: 129, mass: 128.913465 },\n            { nominal: 130, mass: 129.9139738 },\n            { nominal: 131, mass: 130.917045 },\n            { nominal: 132, mass: 131.9178267 },\n            { nominal: 133, mass: 132.9239134 },\n            { nominal: 134, mass: 133.9286821 },\n            { nominal: 135, mass: 134.9349086 },\n            { nominal: 136, mass: 135.93999 },\n            { nominal: 137, mass: 136.94655 },\n            { nominal: 138, mass: 137.95184 },\n        ],\n        symbol: 'Sn',\n        mass: 118.71011259301059,\n        name: 'Tin',\n        monoisotopicMass: 119.90220163,\n    },\n    {\n        number: 51,\n        isotopes: [\n            { nominal: 103, mass: 102.93969 },\n            { nominal: 104, mass: 103.93648 },\n            { nominal: 105, mass: 104.931276 },\n            { nominal: 106, mass: 105.928638 },\n            { nominal: 107, mass: 106.9241506 },\n            { nominal: 108, mass: 107.9222267 },\n            { nominal: 109, mass: 108.9181411 },\n            { nominal: 110, mass: 109.9168543 },\n            { nominal: 111, mass: 110.9132182 },\n            { nominal: 112, mass: 111.9124 },\n            { nominal: 113, mass: 112.909375 },\n            { nominal: 114, mass: 113.90929 },\n            { nominal: 115, mass: 114.906598 },\n            { nominal: 116, mass: 115.9067931 },\n            { nominal: 117, mass: 116.9048415 },\n            { nominal: 118, mass: 117.9055321 },\n            { nominal: 119, mass: 118.9039455 },\n            { nominal: 120, mass: 119.9050794 },\n            { nominal: 121, mass: 120.903812, abundance: 0.5721 },\n            { nominal: 122, mass: 121.9051699 },\n            { nominal: 123, mass: 122.9042132, abundance: 0.4279 },\n            { nominal: 124, mass: 123.905935 },\n            { nominal: 125, mass: 124.905253 },\n            { nominal: 126, mass: 125.907253 },\n            { nominal: 127, mass: 126.9069243 },\n            { nominal: 128, mass: 127.909146 },\n            { nominal: 129, mass: 128.909147 },\n            { nominal: 130, mass: 129.911662 },\n            { nominal: 131, mass: 130.9119888 },\n            { nominal: 132, mass: 131.9145077 },\n            { nominal: 133, mass: 132.9152732 },\n            { nominal: 134, mass: 133.9205357 },\n            { nominal: 135, mass: 134.9251851 },\n            { nominal: 136, mass: 135.9307459 },\n            { nominal: 137, mass: 136.93555 },\n            { nominal: 138, mass: 137.94145 },\n            { nominal: 139, mass: 138.94655 },\n            { nominal: 140, mass: 139.95283 },\n        ],\n        symbol: 'Sb',\n        mass: 121.75978367348,\n        name: 'Antimony',\n        monoisotopicMass: 120.903812,\n    },\n    {\n        number: 52,\n        isotopes: [\n            { nominal: 105, mass: 104.9433 },\n            { nominal: 106, mass: 105.9375 },\n            { nominal: 107, mass: 106.935012 },\n            { nominal: 108, mass: 107.9293805 },\n            { nominal: 109, mass: 108.9273045 },\n            { nominal: 110, mass: 109.9224581 },\n            { nominal: 111, mass: 110.9210006 },\n            { nominal: 112, mass: 111.9167279 },\n            { nominal: 113, mass: 112.915891 },\n            { nominal: 114, mass: 113.912089 },\n            { nominal: 115, mass: 114.911902 },\n            { nominal: 116, mass: 115.90846 },\n            { nominal: 117, mass: 116.908646 },\n            { nominal: 118, mass: 117.905854 },\n            { nominal: 119, mass: 118.9064071 },\n            { nominal: 120, mass: 119.9040593, abundance: 0.0009 },\n            { nominal: 121, mass: 120.904944 },\n            { nominal: 122, mass: 121.9030435, abundance: 0.0255 },\n            { nominal: 123, mass: 122.9042698, abundance: 0.0089 },\n            { nominal: 124, mass: 123.9028171, abundance: 0.0474 },\n            { nominal: 125, mass: 124.9044299, abundance: 0.0707 },\n            { nominal: 126, mass: 125.9033109, abundance: 0.1884 },\n            { nominal: 127, mass: 126.9052257 },\n            { nominal: 128, mass: 127.90446128, abundance: 0.3174 },\n            { nominal: 129, mass: 128.90659646 },\n            { nominal: 130, mass: 129.906222748, abundance: 0.3408 },\n            { nominal: 131, mass: 130.908522213 },\n            { nominal: 132, mass: 131.9085467 },\n            { nominal: 133, mass: 132.9109688 },\n            { nominal: 134, mass: 133.911394 },\n            { nominal: 135, mass: 134.9165557 },\n            { nominal: 136, mass: 135.9201006 },\n            { nominal: 137, mass: 136.9255989 },\n            { nominal: 138, mass: 137.9294722 },\n            { nominal: 139, mass: 138.9353672 },\n            { nominal: 140, mass: 139.939499 },\n            { nominal: 141, mass: 140.9458 },\n            { nominal: 142, mass: 141.95022 },\n            { nominal: 143, mass: 142.95676 },\n        ],\n        symbol: 'Te',\n        mass: 127.6031264846604,\n        name: 'Tellurium',\n        monoisotopicMass: 129.906222748,\n    },\n    {\n        number: 53,\n        isotopes: [\n            { nominal: 107, mass: 106.94678 },\n            { nominal: 108, mass: 107.94348 },\n            { nominal: 109, mass: 108.9380853 },\n            { nominal: 110, mass: 109.935089 },\n            { nominal: 111, mass: 110.9302692 },\n            { nominal: 112, mass: 111.928005 },\n            { nominal: 113, mass: 112.9236501 },\n            { nominal: 114, mass: 113.92185 },\n            { nominal: 115, mass: 114.918048 },\n            { nominal: 116, mass: 115.91681 },\n            { nominal: 117, mass: 116.913648 },\n            { nominal: 118, mass: 117.913074 },\n            { nominal: 119, mass: 118.910074 },\n            { nominal: 120, mass: 119.910087 },\n            { nominal: 121, mass: 120.9074051 },\n            { nominal: 122, mass: 121.9075888 },\n            { nominal: 123, mass: 122.9055885 },\n            { nominal: 124, mass: 123.906209 },\n            { nominal: 125, mass: 124.9046294 },\n            { nominal: 126, mass: 125.9056233 },\n            { nominal: 127, mass: 126.9044719, abundance: 1 },\n            { nominal: 128, mass: 127.9058086 },\n            { nominal: 129, mass: 128.9049837 },\n            { nominal: 130, mass: 129.9066702 },\n            { nominal: 131, mass: 130.9061263 },\n            { nominal: 132, mass: 131.9079935 },\n            { nominal: 133, mass: 132.907797 },\n            { nominal: 134, mass: 133.9097588 },\n            { nominal: 135, mass: 134.9100488 },\n            { nominal: 136, mass: 135.914604 },\n            { nominal: 137, mass: 136.9180282 },\n            { nominal: 138, mass: 137.9227264 },\n            { nominal: 139, mass: 138.926506 },\n            { nominal: 140, mass: 139.93173 },\n            { nominal: 141, mass: 140.93569 },\n            { nominal: 142, mass: 141.9412 },\n            { nominal: 143, mass: 142.94565 },\n            { nominal: 144, mass: 143.95139 },\n            { nominal: 145, mass: 144.95605 },\n        ],\n        symbol: 'I',\n        mass: 126.9044719,\n        name: 'Iodine',\n        monoisotopicMass: 126.9044719,\n    },\n    {\n        number: 54,\n        isotopes: [\n            { nominal: 109, mass: 108.95043 },\n            { nominal: 110, mass: 109.94426 },\n            { nominal: 111, mass: 110.941607 },\n            { nominal: 112, mass: 111.935559 },\n            { nominal: 113, mass: 112.9332217 },\n            { nominal: 114, mass: 113.92798 },\n            { nominal: 115, mass: 114.926294 },\n            { nominal: 116, mass: 115.921581 },\n            { nominal: 117, mass: 116.920359 },\n            { nominal: 118, mass: 117.916179 },\n            { nominal: 119, mass: 118.915411 },\n            { nominal: 120, mass: 119.911784 },\n            { nominal: 121, mass: 120.911453 },\n            { nominal: 122, mass: 121.908368 },\n            { nominal: 123, mass: 122.908482 },\n            { nominal: 124, mass: 123.905892, abundance: 0.000952 },\n            { nominal: 125, mass: 124.9063944 },\n            { nominal: 126, mass: 125.9042983, abundance: 0.00089 },\n            { nominal: 127, mass: 126.9051829 },\n            { nominal: 128, mass: 127.903531, abundance: 0.019102 },\n            { nominal: 129, mass: 128.9047808611, abundance: 0.264006 },\n            { nominal: 130, mass: 129.903509349, abundance: 0.04071 },\n            { nominal: 131, mass: 130.90508406, abundance: 0.212324 },\n            { nominal: 132, mass: 131.9041550856, abundance: 0.269086 },\n            { nominal: 133, mass: 132.9059108 },\n            { nominal: 134, mass: 133.90539466, abundance: 0.104357 },\n            { nominal: 135, mass: 134.9072278 },\n            { nominal: 136, mass: 135.907214484, abundance: 0.088573 },\n            { nominal: 137, mass: 136.91155778 },\n            { nominal: 138, mass: 137.9141463 },\n            { nominal: 139, mass: 138.9187922 },\n            { nominal: 140, mass: 139.9216458 },\n            { nominal: 141, mass: 140.9267872 },\n            { nominal: 142, mass: 141.9299731 },\n            { nominal: 143, mass: 142.9353696 },\n            { nominal: 144, mass: 143.9389451 },\n            { nominal: 145, mass: 144.94472 },\n            { nominal: 146, mass: 145.948518 },\n            { nominal: 147, mass: 146.95426 },\n            { nominal: 148, mass: 147.95813 },\n        ],\n        symbol: 'Xe',\n        mass: 131.29276144779053,\n        name: 'Xenon',\n        monoisotopicMass: 131.9041550856,\n    },\n    {\n        number: 55,\n        isotopes: [\n            { nominal: 112, mass: 111.950309 },\n            { nominal: 113, mass: 112.9444291 },\n            { nominal: 114, mass: 113.941296 },\n            { nominal: 115, mass: 114.93591 },\n            { nominal: 116, mass: 115.93337 },\n            { nominal: 117, mass: 116.928617 },\n            { nominal: 118, mass: 117.92656 },\n            { nominal: 119, mass: 118.922377 },\n            { nominal: 120, mass: 119.920677 },\n            { nominal: 121, mass: 120.917227 },\n            { nominal: 122, mass: 121.916108 },\n            { nominal: 123, mass: 122.912996 },\n            { nominal: 124, mass: 123.9122578 },\n            { nominal: 125, mass: 124.909728 },\n            { nominal: 126, mass: 125.909446 },\n            { nominal: 127, mass: 126.9074174 },\n            { nominal: 128, mass: 127.9077487 },\n            { nominal: 129, mass: 128.9060657 },\n            { nominal: 130, mass: 129.9067093 },\n            { nominal: 131, mass: 130.9054649 },\n            { nominal: 132, mass: 131.9064339 },\n            { nominal: 133, mass: 132.905451961, abundance: 1 },\n            { nominal: 134, mass: 133.906718503 },\n            { nominal: 135, mass: 134.905977 },\n            { nominal: 136, mass: 135.9073114 },\n            { nominal: 137, mass: 136.90708923 },\n            { nominal: 138, mass: 137.9110171 },\n            { nominal: 139, mass: 138.9133638 },\n            { nominal: 140, mass: 139.9172831 },\n            { nominal: 141, mass: 140.9200455 },\n            { nominal: 142, mass: 141.924296 },\n            { nominal: 143, mass: 142.927349 },\n            { nominal: 144, mass: 143.932076 },\n            { nominal: 145, mass: 144.935527 },\n            { nominal: 146, mass: 145.940344 },\n            { nominal: 147, mass: 146.944156 },\n            { nominal: 148, mass: 147.94923 },\n            { nominal: 149, mass: 148.95302 },\n            { nominal: 150, mass: 149.95833 },\n            { nominal: 151, mass: 150.96258 },\n        ],\n        symbol: 'Cs',\n        mass: 132.905451961,\n        name: 'Caesium',\n        monoisotopicMass: 132.905451961,\n    },\n    {\n        number: 56,\n        isotopes: [\n            { nominal: 114, mass: 113.95066 },\n            { nominal: 115, mass: 114.94737 },\n            { nominal: 116, mass: 115.94128 },\n            { nominal: 117, mass: 116.93814 },\n            { nominal: 118, mass: 117.93306 },\n            { nominal: 119, mass: 118.93066 },\n            { nominal: 120, mass: 119.92605 },\n            { nominal: 121, mass: 120.92405 },\n            { nominal: 122, mass: 121.919904 },\n            { nominal: 123, mass: 122.918781 },\n            { nominal: 124, mass: 123.915094 },\n            { nominal: 125, mass: 124.914472 },\n            { nominal: 126, mass: 125.91125 },\n            { nominal: 127, mass: 126.911091 },\n            { nominal: 128, mass: 127.908342 },\n            { nominal: 129, mass: 128.908681 },\n            { nominal: 130, mass: 129.9063207, abundance: 0.00106 },\n            { nominal: 131, mass: 130.906941 },\n            { nominal: 132, mass: 131.9050611, abundance: 0.00101 },\n            { nominal: 133, mass: 132.9060074 },\n            { nominal: 134, mass: 133.90450818, abundance: 0.02417 },\n            { nominal: 135, mass: 134.90568838, abundance: 0.06592 },\n            { nominal: 136, mass: 135.90457573, abundance: 0.07854 },\n            { nominal: 137, mass: 136.90582714, abundance: 0.11232 },\n            { nominal: 138, mass: 137.905247, abundance: 0.71698 },\n            { nominal: 139, mass: 138.9088411 },\n            { nominal: 140, mass: 139.9106057 },\n            { nominal: 141, mass: 140.9144033 },\n            { nominal: 142, mass: 141.9164324 },\n            { nominal: 143, mass: 142.9206253 },\n            { nominal: 144, mass: 143.9229549 },\n            { nominal: 145, mass: 144.9275184 },\n            { nominal: 146, mass: 145.930284 },\n            { nominal: 147, mass: 146.935304 },\n            { nominal: 148, mass: 147.938171 },\n            { nominal: 149, mass: 148.94308 },\n            { nominal: 150, mass: 149.94605 },\n            { nominal: 151, mass: 150.95127 },\n            { nominal: 152, mass: 151.95481 },\n            { nominal: 153, mass: 152.96036 },\n        ],\n        symbol: 'Ba',\n        mass: 137.3268916286322,\n        name: 'Barium',\n        monoisotopicMass: 137.905247,\n    },\n    {\n        number: 57,\n        isotopes: [\n            { nominal: 116, mass: 115.9563 },\n            { nominal: 117, mass: 116.94999 },\n            { nominal: 118, mass: 117.94673 },\n            { nominal: 119, mass: 118.94099 },\n            { nominal: 120, mass: 119.93807 },\n            { nominal: 121, mass: 120.93315 },\n            { nominal: 122, mass: 121.93071 },\n            { nominal: 123, mass: 122.9263 },\n            { nominal: 124, mass: 123.924574 },\n            { nominal: 125, mass: 124.920816 },\n            { nominal: 126, mass: 125.919513 },\n            { nominal: 127, mass: 126.916375 },\n            { nominal: 128, mass: 127.915592 },\n            { nominal: 129, mass: 128.912694 },\n            { nominal: 130, mass: 129.912369 },\n            { nominal: 131, mass: 130.91007 },\n            { nominal: 132, mass: 131.910119 },\n            { nominal: 133, mass: 132.908218 },\n            { nominal: 134, mass: 133.908514 },\n            { nominal: 135, mass: 134.906984 },\n            { nominal: 136, mass: 135.907635 },\n            { nominal: 137, mass: 136.9064504 },\n            { nominal: 138, mass: 137.9071149, abundance: 0.0008881 },\n            { nominal: 139, mass: 138.9063563, abundance: 0.9991119 },\n            { nominal: 140, mass: 139.9094806 },\n            { nominal: 141, mass: 140.910966 },\n            { nominal: 142, mass: 141.9140909 },\n            { nominal: 143, mass: 142.9160795 },\n            { nominal: 144, mass: 143.919646 },\n            { nominal: 145, mass: 144.921808 },\n            { nominal: 146, mass: 145.925875 },\n            { nominal: 147, mass: 146.928418 },\n            { nominal: 148, mass: 147.932679 },\n            { nominal: 149, mass: 148.93535 },\n            { nominal: 150, mass: 149.93947 },\n            { nominal: 151, mass: 150.94232 },\n            { nominal: 152, mass: 151.94682 },\n            { nominal: 153, mass: 152.95036 },\n            { nominal: 154, mass: 153.95517 },\n            { nominal: 155, mass: 154.95901 },\n        ],\n        symbol: 'La',\n        mass: 138.90546887371266,\n        name: 'Lanthanum',\n        monoisotopicMass: 138.9063563,\n    },\n    {\n        number: 58,\n        isotopes: [\n            { nominal: 119, mass: 118.95271 },\n            { nominal: 120, mass: 119.94654 },\n            { nominal: 121, mass: 120.94335 },\n            { nominal: 122, mass: 121.93787 },\n            { nominal: 123, mass: 122.93528 },\n            { nominal: 124, mass: 123.93031 },\n            { nominal: 125, mass: 124.92844 },\n            { nominal: 126, mass: 125.923971 },\n            { nominal: 127, mass: 126.922727 },\n            { nominal: 128, mass: 127.918911 },\n            { nominal: 129, mass: 128.918102 },\n            { nominal: 130, mass: 129.914736 },\n            { nominal: 131, mass: 130.914429 },\n            { nominal: 132, mass: 131.911464 },\n            { nominal: 133, mass: 132.91152 },\n            { nominal: 134, mass: 133.908928 },\n            { nominal: 135, mass: 134.909161 },\n            { nominal: 136, mass: 135.90712921, abundance: 0.00185 },\n            { nominal: 137, mass: 136.90776236 },\n            { nominal: 138, mass: 137.905991, abundance: 0.00251 },\n            { nominal: 139, mass: 138.9066551 },\n            { nominal: 140, mass: 139.9054431, abundance: 0.8845 },\n            { nominal: 141, mass: 140.9082807 },\n            { nominal: 142, mass: 141.9092504, abundance: 0.11114 },\n            { nominal: 143, mass: 142.9123921 },\n            { nominal: 144, mass: 143.9136529 },\n            { nominal: 145, mass: 144.917265 },\n            { nominal: 146, mass: 145.918802 },\n            { nominal: 147, mass: 146.9226899 },\n            { nominal: 148, mass: 147.924424 },\n            { nominal: 149, mass: 148.928427 },\n            { nominal: 150, mass: 149.930384 },\n            { nominal: 151, mass: 150.934272 },\n            { nominal: 152, mass: 151.9366 },\n            { nominal: 153, mass: 152.94093 },\n            { nominal: 154, mass: 153.9438 },\n            { nominal: 155, mass: 154.94855 },\n            { nominal: 156, mass: 155.95183 },\n            { nominal: 157, mass: 156.95705 },\n        ],\n        symbol: 'Ce',\n        mass: 140.1157307378545,\n        name: 'Cerium',\n        monoisotopicMass: 139.9054431,\n    },\n    {\n        number: 59,\n        isotopes: [\n            { nominal: 121, mass: 120.95532 },\n            { nominal: 122, mass: 121.95175 },\n            { nominal: 123, mass: 122.94596 },\n            { nominal: 124, mass: 123.94294 },\n            { nominal: 125, mass: 124.9377 },\n            { nominal: 126, mass: 125.93524 },\n            { nominal: 127, mass: 126.93071 },\n            { nominal: 128, mass: 127.928791 },\n            { nominal: 129, mass: 128.925095 },\n            { nominal: 130, mass: 129.92359 },\n            { nominal: 131, mass: 130.920235 },\n            { nominal: 132, mass: 131.919255 },\n            { nominal: 133, mass: 132.916331 },\n            { nominal: 134, mass: 133.915697 },\n            { nominal: 135, mass: 134.913112 },\n            { nominal: 136, mass: 135.912677 },\n            { nominal: 137, mass: 136.9106792 },\n            { nominal: 138, mass: 137.910754 },\n            { nominal: 139, mass: 138.9089408 },\n            { nominal: 140, mass: 139.9090803 },\n            { nominal: 141, mass: 140.9076576, abundance: 1 },\n            { nominal: 142, mass: 141.9100496 },\n            { nominal: 143, mass: 142.9108228 },\n            { nominal: 144, mass: 143.9133109 },\n            { nominal: 145, mass: 144.9145182 },\n            { nominal: 146, mass: 145.91768 },\n            { nominal: 147, mass: 146.919008 },\n            { nominal: 148, mass: 147.92213 },\n            { nominal: 149, mass: 148.923736 },\n            { nominal: 150, mass: 149.9266765 },\n            { nominal: 151, mass: 150.928309 },\n            { nominal: 152, mass: 151.931553 },\n            { nominal: 153, mass: 152.933904 },\n            { nominal: 154, mass: 153.93753 },\n            { nominal: 155, mass: 154.940509 },\n            { nominal: 156, mass: 155.94464 },\n            { nominal: 157, mass: 156.94789 },\n            { nominal: 158, mass: 157.95241 },\n            { nominal: 159, mass: 158.95589 },\n        ],\n        symbol: 'Pr',\n        mass: 140.9076576,\n        name: 'Praseodymium',\n        monoisotopicMass: 140.9076576,\n    },\n    {\n        number: 60,\n        isotopes: [\n            { nominal: 124, mass: 123.9522 },\n            { nominal: 125, mass: 124.9489 },\n            { nominal: 126, mass: 125.94311 },\n            { nominal: 127, mass: 126.94038 },\n            { nominal: 128, mass: 127.93525 },\n            { nominal: 129, mass: 128.9331 },\n            { nominal: 130, mass: 129.928506 },\n            { nominal: 131, mass: 130.927248 },\n            { nominal: 132, mass: 131.923321 },\n            { nominal: 133, mass: 132.922348 },\n            { nominal: 134, mass: 133.91879 },\n            { nominal: 135, mass: 134.918181 },\n            { nominal: 136, mass: 135.914976 },\n            { nominal: 137, mass: 136.914562 },\n            { nominal: 138, mass: 137.91195 },\n            { nominal: 139, mass: 138.911954 },\n            { nominal: 140, mass: 139.90955 },\n            { nominal: 141, mass: 140.9096147 },\n            { nominal: 142, mass: 141.907729, abundance: 0.27152 },\n            { nominal: 143, mass: 142.90982, abundance: 0.12174 },\n            { nominal: 144, mass: 143.910093, abundance: 0.23798 },\n            { nominal: 145, mass: 144.9125793, abundance: 0.08293 },\n            { nominal: 146, mass: 145.9131226, abundance: 0.17189 },\n            { nominal: 147, mass: 146.9161061 },\n            { nominal: 148, mass: 147.9168993, abundance: 0.05756 },\n            { nominal: 149, mass: 148.9201548 },\n            { nominal: 150, mass: 149.9209022, abundance: 0.05638 },\n            { nominal: 151, mass: 150.9238403 },\n            { nominal: 152, mass: 151.924692 },\n            { nominal: 153, mass: 152.927718 },\n            { nominal: 154, mass: 153.92948 },\n            { nominal: 155, mass: 154.9331357 },\n            { nominal: 156, mass: 155.93508 },\n            { nominal: 157, mass: 156.939386 },\n            { nominal: 158, mass: 157.94197 },\n            { nominal: 159, mass: 158.94653 },\n            { nominal: 160, mass: 159.9494 },\n            { nominal: 161, mass: 160.95428 },\n        ],\n        symbol: 'Nd',\n        mass: 144.241596031827,\n        name: 'Neodymium',\n        monoisotopicMass: 141.907729,\n    },\n    {\n        number: 61,\n        isotopes: [\n            { nominal: 126, mass: 125.95792 },\n            { nominal: 127, mass: 126.95192 },\n            { nominal: 128, mass: 127.9487 },\n            { nominal: 129, mass: 128.94323 },\n            { nominal: 130, mass: 129.94053 },\n            { nominal: 131, mass: 130.93567 },\n            { nominal: 132, mass: 131.93384 },\n            { nominal: 133, mass: 132.929782 },\n            { nominal: 134, mass: 133.928353 },\n            { nominal: 135, mass: 134.924823 },\n            { nominal: 136, mass: 135.923585 },\n            { nominal: 137, mass: 136.92048 },\n            { nominal: 138, mass: 137.919548 },\n            { nominal: 139, mass: 138.9168 },\n            { nominal: 140, mass: 139.91604 },\n            { nominal: 141, mass: 140.913555 },\n            { nominal: 142, mass: 141.91289 },\n            { nominal: 143, mass: 142.9109383 },\n            { nominal: 144, mass: 143.9125964 },\n            { nominal: 145, mass: 144.9127559 },\n            { nominal: 146, mass: 145.9147024 },\n            { nominal: 147, mass: 146.915145 },\n            { nominal: 148, mass: 147.9174819 },\n            { nominal: 149, mass: 148.9183423 },\n            { nominal: 150, mass: 149.920991 },\n            { nominal: 151, mass: 150.9212175 },\n            { nominal: 152, mass: 151.923506 },\n            { nominal: 153, mass: 152.9241567 },\n            { nominal: 154, mass: 153.926472 },\n            { nominal: 155, mass: 154.928137 },\n            { nominal: 156, mass: 155.9311175 },\n            { nominal: 157, mass: 156.9331214 },\n            { nominal: 158, mass: 157.936565 },\n            { nominal: 159, mass: 158.939287 },\n            { nominal: 160, mass: 159.9431 },\n            { nominal: 161, mass: 160.94607 },\n            { nominal: 162, mass: 161.95022 },\n            { nominal: 163, mass: 162.95357 },\n        ],\n        symbol: 'Pm',\n        mass: null,\n        name: 'Promethium',\n    },\n    {\n        number: 62,\n        isotopes: [\n            { nominal: 128, mass: 127.95842 },\n            { nominal: 129, mass: 128.95476 },\n            { nominal: 130, mass: 129.949 },\n            { nominal: 131, mass: 130.94618 },\n            { nominal: 132, mass: 131.94087 },\n            { nominal: 133, mass: 132.93856 },\n            { nominal: 134, mass: 133.93411 },\n            { nominal: 135, mass: 134.93252 },\n            { nominal: 136, mass: 135.928276 },\n            { nominal: 137, mass: 136.926971 },\n            { nominal: 138, mass: 137.923244 },\n            { nominal: 139, mass: 138.922297 },\n            { nominal: 140, mass: 139.918995 },\n            { nominal: 141, mass: 140.9184816 },\n            { nominal: 142, mass: 141.9152044 },\n            { nominal: 143, mass: 142.9146353 },\n            { nominal: 144, mass: 143.9120065, abundance: 0.0307 },\n            { nominal: 145, mass: 144.9134173 },\n            { nominal: 146, mass: 145.913047 },\n            { nominal: 147, mass: 146.9149044, abundance: 0.1499 },\n            { nominal: 148, mass: 147.9148292, abundance: 0.1124 },\n            { nominal: 149, mass: 148.9171921, abundance: 0.1382 },\n            { nominal: 150, mass: 149.9172829, abundance: 0.0738 },\n            { nominal: 151, mass: 150.9199398 },\n            { nominal: 152, mass: 151.9197397, abundance: 0.2675 },\n            { nominal: 153, mass: 152.9221047 },\n            { nominal: 154, mass: 153.9222169, abundance: 0.2275 },\n            { nominal: 155, mass: 154.9246477 },\n            { nominal: 156, mass: 155.925536 },\n            { nominal: 157, mass: 156.9284187 },\n            { nominal: 158, mass: 157.929951 },\n            { nominal: 159, mass: 158.9332172 },\n            { nominal: 160, mass: 159.9353353 },\n            { nominal: 161, mass: 160.9391602 },\n            { nominal: 162, mass: 161.94146 },\n            { nominal: 163, mass: 162.94555 },\n            { nominal: 164, mass: 163.94836 },\n            { nominal: 165, mass: 164.95297 },\n        ],\n        symbol: 'Sm',\n        mass: 150.36635571193,\n        name: 'Samarium',\n        monoisotopicMass: 151.9197397,\n    },\n    {\n        number: 63,\n        isotopes: [\n            { nominal: 130, mass: 129.96369 },\n            { nominal: 131, mass: 130.95784 },\n            { nominal: 132, mass: 131.95467 },\n            { nominal: 133, mass: 132.94929 },\n            { nominal: 134, mass: 133.9464 },\n            { nominal: 135, mass: 134.94187 },\n            { nominal: 136, mass: 135.93962 },\n            { nominal: 137, mass: 136.93546 },\n            { nominal: 138, mass: 137.933709 },\n            { nominal: 139, mass: 138.929792 },\n            { nominal: 140, mass: 139.928088 },\n            { nominal: 141, mass: 140.924932 },\n            { nominal: 142, mass: 141.923442 },\n            { nominal: 143, mass: 142.920299 },\n            { nominal: 144, mass: 143.91882 },\n            { nominal: 145, mass: 144.9162726 },\n            { nominal: 146, mass: 145.917211 },\n            { nominal: 147, mass: 146.9167527 },\n            { nominal: 148, mass: 147.918089 },\n            { nominal: 149, mass: 148.9179378 },\n            { nominal: 150, mass: 149.9197077 },\n            { nominal: 151, mass: 150.9198578, abundance: 0.4781 },\n            { nominal: 152, mass: 151.9217522 },\n            { nominal: 153, mass: 152.921238, abundance: 0.5219 },\n            { nominal: 154, mass: 153.922987 },\n            { nominal: 155, mass: 154.9229011 },\n            { nominal: 156, mass: 155.9247605 },\n            { nominal: 157, mass: 156.9254334 },\n            { nominal: 158, mass: 157.927799 },\n            { nominal: 159, mass: 158.9291001 },\n            { nominal: 160, mass: 159.931851 },\n            { nominal: 161, mass: 160.933664 },\n            { nominal: 162, mass: 161.936989 },\n            { nominal: 163, mass: 162.939196 },\n            { nominal: 164, mass: 163.94274 },\n            { nominal: 165, mass: 164.94559 },\n            { nominal: 166, mass: 165.94962 },\n            { nominal: 167, mass: 166.95289 },\n        ],\n        symbol: 'Eu',\n        mass: 151.96437812637998,\n        name: 'Europium',\n        monoisotopicMass: 152.921238,\n    },\n    {\n        number: 64,\n        isotopes: [\n            { nominal: 133, mass: 132.96133 },\n            { nominal: 134, mass: 133.95566 },\n            { nominal: 135, mass: 134.95245 },\n            { nominal: 136, mass: 135.9473 },\n            { nominal: 137, mass: 136.94502 },\n            { nominal: 138, mass: 137.94025 },\n            { nominal: 139, mass: 138.93813 },\n            { nominal: 140, mass: 139.933674 },\n            { nominal: 141, mass: 140.932126 },\n            { nominal: 142, mass: 141.928116 },\n            { nominal: 143, mass: 142.92675 },\n            { nominal: 144, mass: 143.922963 },\n            { nominal: 145, mass: 144.921713 },\n            { nominal: 146, mass: 145.9183188 },\n            { nominal: 147, mass: 146.9191014 },\n            { nominal: 148, mass: 147.9181215 },\n            { nominal: 149, mass: 148.9193481 },\n            { nominal: 150, mass: 149.9186644 },\n            { nominal: 151, mass: 150.920356 },\n            { nominal: 152, mass: 151.9197995, abundance: 0.002 },\n            { nominal: 153, mass: 152.921758 },\n            { nominal: 154, mass: 153.9208741, abundance: 0.0218 },\n            { nominal: 155, mass: 154.9226305, abundance: 0.148 },\n            { nominal: 156, mass: 155.9221312, abundance: 0.2047 },\n            { nominal: 157, mass: 156.9239686, abundance: 0.1565 },\n            { nominal: 158, mass: 157.9241123, abundance: 0.2484 },\n            { nominal: 159, mass: 158.926397 },\n            { nominal: 160, mass: 159.9270624, abundance: 0.2186 },\n            { nominal: 161, mass: 160.9296775 },\n            { nominal: 162, mass: 161.930993 },\n            { nominal: 163, mass: 162.9341769 },\n            { nominal: 164, mass: 163.93583 },\n            { nominal: 165, mass: 164.93936 },\n            { nominal: 166, mass: 165.94146 },\n            { nominal: 167, mass: 166.94545 },\n            { nominal: 168, mass: 167.94808 },\n            { nominal: 169, mass: 168.9526 },\n        ],\n        symbol: 'Gd',\n        mass: 157.25213064687998,\n        name: 'Gadolinium',\n        monoisotopicMass: 157.9241123,\n    },\n    {\n        number: 65,\n        isotopes: [\n            { nominal: 135, mass: 134.96476 },\n            { nominal: 136, mass: 135.96129 },\n            { nominal: 137, mass: 136.95602 },\n            { nominal: 138, mass: 137.95312 },\n            { nominal: 139, mass: 138.94833 },\n            { nominal: 140, mass: 139.94581 },\n            { nominal: 141, mass: 140.94145 },\n            { nominal: 142, mass: 141.93928 },\n            { nominal: 143, mass: 142.935137 },\n            { nominal: 144, mass: 143.933045 },\n            { nominal: 145, mass: 144.92882 },\n            { nominal: 146, mass: 145.927253 },\n            { nominal: 147, mass: 146.9240548 },\n            { nominal: 148, mass: 147.924282 },\n            { nominal: 149, mass: 148.9232535 },\n            { nominal: 150, mass: 149.9236649 },\n            { nominal: 151, mass: 150.9231096 },\n            { nominal: 152, mass: 151.924083 },\n            { nominal: 153, mass: 152.9234424 },\n            { nominal: 154, mass: 153.924685 },\n            { nominal: 155, mass: 154.923511 },\n            { nominal: 156, mass: 155.9247552 },\n            { nominal: 157, mass: 156.924033 },\n            { nominal: 158, mass: 157.9254209 },\n            { nominal: 159, mass: 158.9253547, abundance: 1 },\n            { nominal: 160, mass: 159.9271756 },\n            { nominal: 161, mass: 160.9275778 },\n            { nominal: 162, mass: 161.929495 },\n            { nominal: 163, mass: 162.9306547 },\n            { nominal: 164, mass: 163.93336 },\n            { nominal: 165, mass: 164.93498 },\n            { nominal: 166, mass: 165.93786 },\n            { nominal: 167, mass: 166.93996 },\n            { nominal: 168, mass: 167.9434 },\n            { nominal: 169, mass: 168.94597 },\n            { nominal: 170, mass: 169.94984 },\n            { nominal: 171, mass: 170.95273 },\n        ],\n        symbol: 'Tb',\n        mass: 158.9253547,\n        name: 'Terbium',\n        monoisotopicMass: 158.9253547,\n    },\n    {\n        number: 66,\n        isotopes: [\n            { nominal: 138, mass: 137.9625 },\n            { nominal: 139, mass: 138.95959 },\n            { nominal: 140, mass: 139.95402 },\n            { nominal: 141, mass: 140.95128 },\n            { nominal: 142, mass: 141.94619 },\n            { nominal: 143, mass: 142.943994 },\n            { nominal: 144, mass: 143.9392695 },\n            { nominal: 145, mass: 144.937474 },\n            { nominal: 146, mass: 145.9328445 },\n            { nominal: 147, mass: 146.9310827 },\n            { nominal: 148, mass: 147.927157 },\n            { nominal: 149, mass: 148.927322 },\n            { nominal: 150, mass: 149.9255933 },\n            { nominal: 151, mass: 150.9261916 },\n            { nominal: 152, mass: 151.9247253 },\n            { nominal: 153, mass: 152.9257724 },\n            { nominal: 154, mass: 153.9244293 },\n            { nominal: 155, mass: 154.925759 },\n            { nominal: 156, mass: 155.9242847, abundance: 0.00056 },\n            { nominal: 157, mass: 156.9254707 },\n            { nominal: 158, mass: 157.9244159, abundance: 0.00095 },\n            { nominal: 159, mass: 158.925747 },\n            { nominal: 160, mass: 159.9252046, abundance: 0.02329 },\n            { nominal: 161, mass: 160.9269405, abundance: 0.18889 },\n            { nominal: 162, mass: 161.9268056, abundance: 0.25475 },\n            { nominal: 163, mass: 162.9287383, abundance: 0.24896 },\n            { nominal: 164, mass: 163.9291819, abundance: 0.2826 },\n            { nominal: 165, mass: 164.9317105 },\n            { nominal: 166, mass: 165.9328139 },\n            { nominal: 167, mass: 166.935661 },\n            { nominal: 168, mass: 167.93713 },\n            { nominal: 169, mass: 168.94031 },\n            { nominal: 170, mass: 169.94239 },\n            { nominal: 171, mass: 170.94612 },\n            { nominal: 172, mass: 171.94846 },\n            { nominal: 173, mass: 172.95283 },\n        ],\n        symbol: 'Dy',\n        mass: 162.499472819424,\n        name: 'Dysprosium',\n        monoisotopicMass: 163.9291819,\n    },\n    {\n        number: 67,\n        isotopes: [\n            { nominal: 140, mass: 139.96859 },\n            { nominal: 141, mass: 140.96311 },\n            { nominal: 142, mass: 141.96001 },\n            { nominal: 143, mass: 142.95486 },\n            { nominal: 144, mass: 143.9521097 },\n            { nominal: 145, mass: 144.9472674 },\n            { nominal: 146, mass: 145.9449935 },\n            { nominal: 147, mass: 146.9401423 },\n            { nominal: 148, mass: 147.937744 },\n            { nominal: 149, mass: 148.933803 },\n            { nominal: 150, mass: 149.933498 },\n            { nominal: 151, mass: 150.9316983 },\n            { nominal: 152, mass: 151.931724 },\n            { nominal: 153, mass: 152.9302064 },\n            { nominal: 154, mass: 153.9306068 },\n            { nominal: 155, mass: 154.929104 },\n            { nominal: 156, mass: 155.929706 },\n            { nominal: 157, mass: 156.928254 },\n            { nominal: 158, mass: 157.928946 },\n            { nominal: 159, mass: 158.9277197 },\n            { nominal: 160, mass: 159.928737 },\n            { nominal: 161, mass: 160.9278615 },\n            { nominal: 162, mass: 161.9291023 },\n            { nominal: 163, mass: 162.928741 },\n            { nominal: 164, mass: 163.9302403 },\n            { nominal: 165, mass: 164.9303288, abundance: 1 },\n            { nominal: 166, mass: 165.9322909 },\n            { nominal: 167, mass: 166.9331385 },\n            { nominal: 168, mass: 167.935522 },\n            { nominal: 169, mass: 168.936878 },\n            { nominal: 170, mass: 169.939625 },\n            { nominal: 171, mass: 170.94147 },\n            { nominal: 172, mass: 171.94473 },\n            { nominal: 173, mass: 172.94702 },\n            { nominal: 174, mass: 173.95095 },\n            { nominal: 175, mass: 174.95362 },\n        ],\n        symbol: 'Ho',\n        mass: 164.9303288,\n        name: 'Holmium',\n        monoisotopicMass: 164.9303288,\n    },\n    {\n        number: 68,\n        isotopes: [\n            { nominal: 142, mass: 141.9701 },\n            { nominal: 143, mass: 142.96662 },\n            { nominal: 144, mass: 143.9607 },\n            { nominal: 145, mass: 144.95805 },\n            { nominal: 146, mass: 145.9524184 },\n            { nominal: 147, mass: 146.949964 },\n            { nominal: 148, mass: 147.944735 },\n            { nominal: 149, mass: 148.942306 },\n            { nominal: 150, mass: 149.937916 },\n            { nominal: 151, mass: 150.937449 },\n            { nominal: 152, mass: 151.935057 },\n            { nominal: 153, mass: 152.93508 },\n            { nominal: 154, mass: 153.9327908 },\n            { nominal: 155, mass: 154.9332159 },\n            { nominal: 156, mass: 155.931067 },\n            { nominal: 157, mass: 156.931949 },\n            { nominal: 158, mass: 157.929893 },\n            { nominal: 159, mass: 158.9306918 },\n            { nominal: 160, mass: 159.929077 },\n            { nominal: 161, mass: 160.9300046 },\n            { nominal: 162, mass: 161.9287884, abundance: 0.00139 },\n            { nominal: 163, mass: 162.9300408 },\n            { nominal: 164, mass: 163.9292088, abundance: 0.01601 },\n            { nominal: 165, mass: 164.9307345 },\n            { nominal: 166, mass: 165.9302995, abundance: 0.33503 },\n            { nominal: 167, mass: 166.9320546, abundance: 0.22869 },\n            { nominal: 168, mass: 167.9323767, abundance: 0.26978 },\n            { nominal: 169, mass: 168.9345968 },\n            { nominal: 170, mass: 169.9354702, abundance: 0.1491 },\n            { nominal: 171, mass: 170.9380357 },\n            { nominal: 172, mass: 171.9393619 },\n            { nominal: 173, mass: 172.9424 },\n            { nominal: 174, mass: 173.94423 },\n            { nominal: 175, mass: 174.94777 },\n            { nominal: 176, mass: 175.94994 },\n            { nominal: 177, mass: 176.95399 },\n        ],\n        symbol: 'Er',\n        mass: 167.259082649669,\n        name: 'Erbium',\n        monoisotopicMass: 165.9302995,\n    },\n    {\n        number: 69,\n        isotopes: [\n            { nominal: 144, mass: 143.97628 },\n            { nominal: 145, mass: 144.97039 },\n            { nominal: 146, mass: 145.96684 },\n            { nominal: 147, mass: 146.9613799 },\n            { nominal: 148, mass: 147.958384 },\n            { nominal: 149, mass: 148.95289 },\n            { nominal: 150, mass: 149.95009 },\n            { nominal: 151, mass: 150.945488 },\n            { nominal: 152, mass: 151.944422 },\n            { nominal: 153, mass: 152.94204 },\n            { nominal: 154, mass: 153.94157 },\n            { nominal: 155, mass: 154.93921 },\n            { nominal: 156, mass: 155.938992 },\n            { nominal: 157, mass: 156.936944 },\n            { nominal: 158, mass: 157.93698 },\n            { nominal: 159, mass: 158.934975 },\n            { nominal: 160, mass: 159.935263 },\n            { nominal: 161, mass: 160.933549 },\n            { nominal: 162, mass: 161.934002 },\n            { nominal: 163, mass: 162.9326592 },\n            { nominal: 164, mass: 163.933544 },\n            { nominal: 165, mass: 164.9324431 },\n            { nominal: 166, mass: 165.933561 },\n            { nominal: 167, mass: 166.9328562 },\n            { nominal: 168, mass: 167.9341774 },\n            { nominal: 169, mass: 168.9342179, abundance: 1 },\n            { nominal: 170, mass: 169.935806 },\n            { nominal: 171, mass: 170.9364339 },\n            { nominal: 172, mass: 171.9384055 },\n            { nominal: 173, mass: 172.9396084 },\n            { nominal: 174, mass: 173.942173 },\n            { nominal: 175, mass: 174.943841 },\n            { nominal: 176, mass: 175.947 },\n            { nominal: 177, mass: 176.94904 },\n            { nominal: 178, mass: 177.95264 },\n            { nominal: 179, mass: 178.95534 },\n        ],\n        symbol: 'Tm',\n        mass: 168.9342179,\n        name: 'Thulium',\n        monoisotopicMass: 168.9342179,\n    },\n    {\n        number: 70,\n        isotopes: [\n            { nominal: 148, mass: 147.96758 },\n            { nominal: 149, mass: 148.96436 },\n            { nominal: 150, mass: 149.95852 },\n            { nominal: 151, mass: 150.9554 },\n            { nominal: 152, mass: 151.95027 },\n            { nominal: 153, mass: 152.94932 },\n            { nominal: 154, mass: 153.946396 },\n            { nominal: 155, mass: 154.945783 },\n            { nominal: 156, mass: 155.942825 },\n            { nominal: 157, mass: 156.942645 },\n            { nominal: 158, mass: 157.9398705 },\n            { nominal: 159, mass: 158.940055 },\n            { nominal: 160, mass: 159.937557 },\n            { nominal: 161, mass: 160.937907 },\n            { nominal: 162, mass: 161.935774 },\n            { nominal: 163, mass: 162.93634 },\n            { nominal: 164, mass: 163.934495 },\n            { nominal: 165, mass: 164.93527 },\n            { nominal: 166, mass: 165.9338747 },\n            { nominal: 167, mass: 166.934953 },\n            { nominal: 168, mass: 167.9338896, abundance: 0.00123 },\n            { nominal: 169, mass: 168.9351825 },\n            { nominal: 170, mass: 169.9347664, abundance: 0.02982 },\n            { nominal: 171, mass: 170.9363302, abundance: 0.1409 },\n            { nominal: 172, mass: 171.9363859, abundance: 0.2168 },\n            { nominal: 173, mass: 172.9382151, abundance: 0.16103 },\n            { nominal: 174, mass: 173.9388664, abundance: 0.32026 },\n            { nominal: 175, mass: 174.9412808 },\n            { nominal: 176, mass: 175.9425764, abundance: 0.12996 },\n            { nominal: 177, mass: 176.9452656 },\n            { nominal: 178, mass: 177.946651 },\n            { nominal: 179, mass: 178.95004 },\n            { nominal: 180, mass: 179.95212 },\n            { nominal: 181, mass: 180.95589 },\n        ],\n        symbol: 'Yb',\n        mass: 173.05415016631702,\n        name: 'Ytterbium',\n        monoisotopicMass: 173.9388664,\n    },\n    {\n        number: 71,\n        isotopes: [\n            { nominal: 150, mass: 149.97355 },\n            { nominal: 151, mass: 150.96768 },\n            { nominal: 152, mass: 151.96412 },\n            { nominal: 153, mass: 152.95875 },\n            { nominal: 154, mass: 153.95736 },\n            { nominal: 155, mass: 154.954321 },\n            { nominal: 156, mass: 155.953033 },\n            { nominal: 157, mass: 156.950127 },\n            { nominal: 158, mass: 157.949316 },\n            { nominal: 159, mass: 158.946636 },\n            { nominal: 160, mass: 159.946033 },\n            { nominal: 161, mass: 160.943572 },\n            { nominal: 162, mass: 161.943283 },\n            { nominal: 163, mass: 162.941179 },\n            { nominal: 164, mass: 163.941339 },\n            { nominal: 165, mass: 164.939407 },\n            { nominal: 166, mass: 165.939859 },\n            { nominal: 167, mass: 166.93827 },\n            { nominal: 168, mass: 167.938736 },\n            { nominal: 169, mass: 168.9376441 },\n            { nominal: 170, mass: 169.938478 },\n            { nominal: 171, mass: 170.937917 },\n            { nominal: 172, mass: 171.9390891 },\n            { nominal: 173, mass: 172.938934 },\n            { nominal: 174, mass: 173.9403409 },\n            { nominal: 175, mass: 174.9407752, abundance: 0.97401 },\n            { nominal: 176, mass: 175.9426897, abundance: 0.02599 },\n            { nominal: 177, mass: 176.9437615 },\n            { nominal: 178, mass: 177.945958 },\n            { nominal: 179, mass: 178.9473309 },\n            { nominal: 180, mass: 179.949888 },\n            { nominal: 181, mass: 180.95191 },\n            { nominal: 182, mass: 181.95504 },\n            { nominal: 183, mass: 182.957363 },\n            { nominal: 184, mass: 183.96091 },\n            { nominal: 185, mass: 184.96362 },\n        ],\n        symbol: 'Lu',\n        mass: 174.96681495785498,\n        name: 'Lutetium',\n        monoisotopicMass: 174.9407752,\n    },\n    {\n        number: 72,\n        isotopes: [\n            { nominal: 153, mass: 152.97069 },\n            { nominal: 154, mass: 153.96486 },\n            { nominal: 155, mass: 154.96311 },\n            { nominal: 156, mass: 155.95935 },\n            { nominal: 157, mass: 156.95824 },\n            { nominal: 158, mass: 157.954801 },\n            { nominal: 159, mass: 158.953996 },\n            { nominal: 160, mass: 159.950691 },\n            { nominal: 161, mass: 160.950278 },\n            { nominal: 162, mass: 161.9472148 },\n            { nominal: 163, mass: 162.947113 },\n            { nominal: 164, mass: 163.944371 },\n            { nominal: 165, mass: 164.944567 },\n            { nominal: 166, mass: 165.94218 },\n            { nominal: 167, mass: 166.9426 },\n            { nominal: 168, mass: 167.940568 },\n            { nominal: 169, mass: 168.941259 },\n            { nominal: 170, mass: 169.939609 },\n            { nominal: 171, mass: 170.940492 },\n            { nominal: 172, mass: 171.93945 },\n            { nominal: 173, mass: 172.940513 },\n            { nominal: 174, mass: 173.9400461, abundance: 0.0016 },\n            { nominal: 175, mass: 174.9415092 },\n            { nominal: 176, mass: 175.9414076, abundance: 0.0526 },\n            { nominal: 177, mass: 176.9432277, abundance: 0.186 },\n            { nominal: 178, mass: 177.9437058, abundance: 0.2728 },\n            { nominal: 179, mass: 178.9458232, abundance: 0.1362 },\n            { nominal: 180, mass: 179.946557, abundance: 0.3508 },\n            { nominal: 181, mass: 180.9491083 },\n            { nominal: 182, mass: 181.9505612 },\n            { nominal: 183, mass: 182.95353 },\n            { nominal: 184, mass: 183.955446 },\n            { nominal: 185, mass: 184.958862 },\n            { nominal: 186, mass: 185.960897 },\n            { nominal: 187, mass: 186.96477 },\n            { nominal: 188, mass: 187.96685 },\n            { nominal: 189, mass: 188.97084 },\n        ],\n        symbol: 'Hf',\n        mass: 178.4849787234,\n        name: 'Hafnium',\n        monoisotopicMass: 179.946557,\n    },\n    {\n        number: 73,\n        isotopes: [\n            { nominal: 155, mass: 154.97424 },\n            { nominal: 156, mass: 155.97203 },\n            { nominal: 157, mass: 156.96818 },\n            { nominal: 158, mass: 157.96654 },\n            { nominal: 159, mass: 158.963023 },\n            { nominal: 160, mass: 159.961488 },\n            { nominal: 161, mass: 160.958452 },\n            { nominal: 162, mass: 161.957294 },\n            { nominal: 163, mass: 162.954337 },\n            { nominal: 164, mass: 163.953534 },\n            { nominal: 165, mass: 164.950781 },\n            { nominal: 166, mass: 165.950512 },\n            { nominal: 167, mass: 166.948093 },\n            { nominal: 168, mass: 167.948047 },\n            { nominal: 169, mass: 168.946011 },\n            { nominal: 170, mass: 169.946175 },\n            { nominal: 171, mass: 170.944476 },\n            { nominal: 172, mass: 171.944895 },\n            { nominal: 173, mass: 172.94375 },\n            { nominal: 174, mass: 173.944454 },\n            { nominal: 175, mass: 174.943737 },\n            { nominal: 176, mass: 175.944857 },\n            { nominal: 177, mass: 176.9444795 },\n            { nominal: 178, mass: 177.945678 },\n            { nominal: 179, mass: 178.9459366 },\n            { nominal: 180, mass: 179.9474648, abundance: 0.0001201 },\n            { nominal: 181, mass: 180.9479958, abundance: 0.9998799 },\n            { nominal: 182, mass: 181.9501519 },\n            { nominal: 183, mass: 182.9513726 },\n            { nominal: 184, mass: 183.954008 },\n            { nominal: 185, mass: 184.955559 },\n            { nominal: 186, mass: 185.958551 },\n            { nominal: 187, mass: 186.960386 },\n            { nominal: 188, mass: 187.963916 },\n            { nominal: 189, mass: 188.96583 },\n            { nominal: 190, mass: 189.96939 },\n            { nominal: 191, mass: 190.97156 },\n            { nominal: 192, mass: 191.97514 },\n        ],\n        symbol: 'Ta',\n        mass: 180.9478756362269,\n        name: 'Tantalum',\n        monoisotopicMass: 180.9479958,\n    },\n    {\n        number: 74,\n        isotopes: [\n            { nominal: 157, mass: 156.97884 },\n            { nominal: 158, mass: 157.97456 },\n            { nominal: 159, mass: 158.97264 },\n            { nominal: 160, mass: 159.96846 },\n            { nominal: 161, mass: 160.9672 },\n            { nominal: 162, mass: 161.963499 },\n            { nominal: 163, mass: 162.962524 },\n            { nominal: 164, mass: 163.958961 },\n            { nominal: 165, mass: 164.958281 },\n            { nominal: 166, mass: 165.955031 },\n            { nominal: 167, mass: 166.954805 },\n            { nominal: 168, mass: 167.951806 },\n            { nominal: 169, mass: 168.951779 },\n            { nominal: 170, mass: 169.949232 },\n            { nominal: 171, mass: 170.949451 },\n            { nominal: 172, mass: 171.947292 },\n            { nominal: 173, mass: 172.947689 },\n            { nominal: 174, mass: 173.946079 },\n            { nominal: 175, mass: 174.946717 },\n            { nominal: 176, mass: 175.945634 },\n            { nominal: 177, mass: 176.946643 },\n            { nominal: 178, mass: 177.945883 },\n            { nominal: 179, mass: 178.947077 },\n            { nominal: 180, mass: 179.9467108, abundance: 0.0012 },\n            { nominal: 181, mass: 180.9481978 },\n            { nominal: 182, mass: 181.94820394, abundance: 0.265 },\n            { nominal: 183, mass: 182.95022275, abundance: 0.1431 },\n            { nominal: 184, mass: 183.95093092, abundance: 0.3064 },\n            { nominal: 185, mass: 184.95341897 },\n            { nominal: 186, mass: 185.9543628, abundance: 0.2843 },\n            { nominal: 187, mass: 186.9571588 },\n            { nominal: 188, mass: 187.9584862 },\n            { nominal: 189, mass: 188.961763 },\n            { nominal: 190, mass: 189.963091 },\n            { nominal: 191, mass: 190.966531 },\n            { nominal: 192, mass: 191.96817 },\n            { nominal: 193, mass: 192.97178 },\n            { nominal: 194, mass: 193.97367 },\n        ],\n        symbol: 'W',\n        mass: 183.841777550513,\n        name: 'Tungsten',\n        monoisotopicMass: 183.95093092,\n    },\n    {\n        number: 75,\n        isotopes: [\n            { nominal: 159, mass: 158.98418 },\n            { nominal: 160, mass: 159.98182 },\n            { nominal: 161, mass: 160.97757 },\n            { nominal: 162, mass: 161.97584 },\n            { nominal: 163, mass: 162.97208 },\n            { nominal: 164, mass: 163.970453 },\n            { nominal: 165, mass: 164.967103 },\n            { nominal: 166, mass: 165.965761 },\n            { nominal: 167, mass: 166.962595 },\n            { nominal: 168, mass: 167.961573 },\n            { nominal: 169, mass: 168.958766 },\n            { nominal: 170, mass: 169.95822 },\n            { nominal: 171, mass: 170.955716 },\n            { nominal: 172, mass: 171.95542 },\n            { nominal: 173, mass: 172.953243 },\n            { nominal: 174, mass: 173.953115 },\n            { nominal: 175, mass: 174.951381 },\n            { nominal: 176, mass: 175.951623 },\n            { nominal: 177, mass: 176.950328 },\n            { nominal: 178, mass: 177.950989 },\n            { nominal: 179, mass: 178.949989 },\n            { nominal: 180, mass: 179.950792 },\n            { nominal: 181, mass: 180.950058 },\n            { nominal: 182, mass: 181.95121 },\n            { nominal: 183, mass: 182.9508196 },\n            { nominal: 184, mass: 183.9525228 },\n            { nominal: 185, mass: 184.9529545, abundance: 0.374 },\n            { nominal: 186, mass: 185.9549856 },\n            { nominal: 187, mass: 186.9557501, abundance: 0.626 },\n            { nominal: 188, mass: 187.9581115 },\n            { nominal: 189, mass: 188.959226 },\n            { nominal: 190, mass: 189.961744 },\n            { nominal: 191, mass: 190.963122 },\n            { nominal: 192, mass: 191.966088 },\n            { nominal: 193, mass: 192.967541 },\n            { nominal: 194, mass: 193.97076 },\n            { nominal: 195, mass: 194.97254 },\n            { nominal: 196, mass: 195.9758 },\n            { nominal: 197, mass: 196.97799 },\n            { nominal: 198, mass: 197.9816 },\n        ],\n        symbol: 'Re',\n        mass: 186.20670454560002,\n        name: 'Rhenium',\n        monoisotopicMass: 186.9557501,\n    },\n    {\n        number: 76,\n        isotopes: [\n            { nominal: 161, mass: 160.98903 },\n            { nominal: 162, mass: 161.98443 },\n            { nominal: 163, mass: 162.98241 },\n            { nominal: 164, mass: 163.97802 },\n            { nominal: 165, mass: 164.9766 },\n            { nominal: 166, mass: 165.972692 },\n            { nominal: 167, mass: 166.971549 },\n            { nominal: 168, mass: 167.967808 },\n            { nominal: 169, mass: 168.967018 },\n            { nominal: 170, mass: 169.963578 },\n            { nominal: 171, mass: 170.963174 },\n            { nominal: 172, mass: 171.960017 },\n            { nominal: 173, mass: 172.959808 },\n            { nominal: 174, mass: 173.957064 },\n            { nominal: 175, mass: 174.956945 },\n            { nominal: 176, mass: 175.954806 },\n            { nominal: 177, mass: 176.954966 },\n            { nominal: 178, mass: 177.953254 },\n            { nominal: 179, mass: 178.953817 },\n            { nominal: 180, mass: 179.952375 },\n            { nominal: 181, mass: 180.953247 },\n            { nominal: 182, mass: 181.95211 },\n            { nominal: 183, mass: 182.953125 },\n            { nominal: 184, mass: 183.9524885, abundance: 0.0002 },\n            { nominal: 185, mass: 184.9540417 },\n            { nominal: 186, mass: 185.953835, abundance: 0.0159 },\n            { nominal: 187, mass: 186.9557474, abundance: 0.0196 },\n            { nominal: 188, mass: 187.9558352, abundance: 0.1324 },\n            { nominal: 189, mass: 188.9581442, abundance: 0.1615 },\n            { nominal: 190, mass: 189.9584437, abundance: 0.2626 },\n            { nominal: 191, mass: 190.9609264 },\n            { nominal: 192, mass: 191.961477, abundance: 0.4078 },\n            { nominal: 193, mass: 192.9641479 },\n            { nominal: 194, mass: 193.9651772 },\n            { nominal: 195, mass: 194.968318 },\n            { nominal: 196, mass: 195.969641 },\n            { nominal: 197, mass: 196.97283 },\n            { nominal: 198, mass: 197.97441 },\n            { nominal: 199, mass: 198.97801 },\n            { nominal: 200, mass: 199.97984 },\n            { nominal: 201, mass: 200.98364 },\n            { nominal: 202, mass: 201.98595 },\n        ],\n        symbol: 'Os',\n        mass: 190.22485962823998,\n        name: 'Osmium',\n        monoisotopicMass: 191.961477,\n    },\n    {\n        number: 77,\n        isotopes: [\n            { nominal: 164, mass: 163.99191 },\n            { nominal: 165, mass: 164.9875 },\n            { nominal: 166, mass: 165.98566 },\n            { nominal: 167, mass: 166.981666 },\n            { nominal: 168, mass: 167.979907 },\n            { nominal: 169, mass: 168.976298 },\n            { nominal: 170, mass: 169.974922 },\n            { nominal: 171, mass: 170.97164 },\n            { nominal: 172, mass: 171.970607 },\n            { nominal: 173, mass: 172.967506 },\n            { nominal: 174, mass: 173.966861 },\n            { nominal: 175, mass: 174.96415 },\n            { nominal: 176, mass: 175.96365 },\n            { nominal: 177, mass: 176.961301 },\n            { nominal: 178, mass: 177.961082 },\n            { nominal: 179, mass: 178.95912 },\n            { nominal: 180, mass: 179.959229 },\n            { nominal: 181, mass: 180.957625 },\n            { nominal: 182, mass: 181.958076 },\n            { nominal: 183, mass: 182.95684 },\n            { nominal: 184, mass: 183.957476 },\n            { nominal: 185, mass: 184.956698 },\n            { nominal: 186, mass: 185.957944 },\n            { nominal: 187, mass: 186.957542 },\n            { nominal: 188, mass: 187.958828 },\n            { nominal: 189, mass: 188.958715 },\n            { nominal: 190, mass: 189.9605412 },\n            { nominal: 191, mass: 190.9605893, abundance: 0.373 },\n            { nominal: 192, mass: 191.9626002 },\n            { nominal: 193, mass: 192.9629216, abundance: 0.627 },\n            { nominal: 194, mass: 193.9650735 },\n            { nominal: 195, mass: 194.9659747 },\n            { nominal: 196, mass: 195.968397 },\n            { nominal: 197, mass: 196.969655 },\n            { nominal: 198, mass: 197.97228 },\n            { nominal: 199, mass: 198.973805 },\n            { nominal: 200, mass: 199.9768 },\n            { nominal: 201, mass: 200.97864 },\n            { nominal: 202, mass: 201.98199 },\n            { nominal: 203, mass: 202.98423 },\n            { nominal: 204, mass: 203.9896 },\n        ],\n        symbol: 'Ir',\n        mass: 192.2160516521,\n        name: 'Iridium',\n        monoisotopicMass: 192.9629216,\n    },\n    {\n        number: 78,\n        isotopes: [\n            { nominal: 166, mass: 165.99486 },\n            { nominal: 167, mass: 166.99269 },\n            { nominal: 168, mass: 167.98813 },\n            { nominal: 169, mass: 168.98657 },\n            { nominal: 170, mass: 169.982496 },\n            { nominal: 171, mass: 170.981245 },\n            { nominal: 172, mass: 171.977351 },\n            { nominal: 173, mass: 172.976443 },\n            { nominal: 174, mass: 173.97282 },\n            { nominal: 175, mass: 174.97241 },\n            { nominal: 176, mass: 175.968938 },\n            { nominal: 177, mass: 176.96847 },\n            { nominal: 178, mass: 177.96565 },\n            { nominal: 179, mass: 178.965359 },\n            { nominal: 180, mass: 179.963032 },\n            { nominal: 181, mass: 180.963098 },\n            { nominal: 182, mass: 181.961172 },\n            { nominal: 183, mass: 182.961597 },\n            { nominal: 184, mass: 183.959915 },\n            { nominal: 185, mass: 184.960614 },\n            { nominal: 186, mass: 185.959351 },\n            { nominal: 187, mass: 186.960617 },\n            { nominal: 188, mass: 187.9593889 },\n            { nominal: 189, mass: 188.960831 },\n            { nominal: 190, mass: 189.9599297, abundance: 0.00012 },\n            { nominal: 191, mass: 190.9616729 },\n            { nominal: 192, mass: 191.9610387, abundance: 0.00782 },\n            { nominal: 193, mass: 192.9629824 },\n            { nominal: 194, mass: 193.9626809, abundance: 0.3286 },\n            { nominal: 195, mass: 194.9647917, abundance: 0.3378 },\n            { nominal: 196, mass: 195.96495209, abundance: 0.2521 },\n            { nominal: 197, mass: 196.96734069 },\n            { nominal: 198, mass: 197.9678949, abundance: 0.07356 },\n            { nominal: 199, mass: 198.9705952 },\n            { nominal: 200, mass: 199.971443 },\n            { nominal: 201, mass: 200.974513 },\n            { nominal: 202, mass: 201.975639 },\n            { nominal: 203, mass: 202.97893 },\n            { nominal: 204, mass: 203.98076 },\n            { nominal: 205, mass: 204.98608 },\n            { nominal: 206, mass: 205.98966 },\n        ],\n        symbol: 'Pt',\n        mass: 195.084456864931,\n        name: 'Platinum',\n        monoisotopicMass: 194.9647917,\n    },\n    {\n        number: 79,\n        isotopes: [\n            { nominal: 169, mass: 168.99808 },\n            { nominal: 170, mass: 169.99597 },\n            { nominal: 171, mass: 170.991876 },\n            { nominal: 172, mass: 171.989942 },\n            { nominal: 173, mass: 172.986241 },\n            { nominal: 174, mass: 173.984717 },\n            { nominal: 175, mass: 174.981304 },\n            { nominal: 176, mass: 175.98025 },\n            { nominal: 177, mass: 176.97687 },\n            { nominal: 178, mass: 177.976032 },\n            { nominal: 179, mass: 178.973174 },\n            { nominal: 180, mass: 179.972523 },\n            { nominal: 181, mass: 180.970079 },\n            { nominal: 182, mass: 181.969618 },\n            { nominal: 183, mass: 182.967591 },\n            { nominal: 184, mass: 183.967452 },\n            { nominal: 185, mass: 184.96579 },\n            { nominal: 186, mass: 185.965953 },\n            { nominal: 187, mass: 186.964543 },\n            { nominal: 188, mass: 187.965349 },\n            { nominal: 189, mass: 188.963948 },\n            { nominal: 190, mass: 189.964698 },\n            { nominal: 191, mass: 190.963702 },\n            { nominal: 192, mass: 191.964814 },\n            { nominal: 193, mass: 192.9641373 },\n            { nominal: 194, mass: 193.9654178 },\n            { nominal: 195, mass: 194.9650352 },\n            { nominal: 196, mass: 195.9665699 },\n            { nominal: 197, mass: 196.96656879, abundance: 1 },\n            { nominal: 198, mass: 197.96824242 },\n            { nominal: 199, mass: 198.96876528 },\n            { nominal: 200, mass: 199.970756 },\n            { nominal: 201, mass: 200.9716575 },\n            { nominal: 202, mass: 201.973856 },\n            { nominal: 203, mass: 202.9751544 },\n            { nominal: 204, mass: 203.97783 },\n            { nominal: 205, mass: 204.97985 },\n            { nominal: 206, mass: 205.98474 },\n            { nominal: 207, mass: 206.9884 },\n            { nominal: 208, mass: 207.99345 },\n            { nominal: 209, mass: 208.99735 },\n            { nominal: 210, mass: 210.0025 },\n        ],\n        symbol: 'Au',\n        mass: 196.96656879,\n        name: 'Gold',\n        monoisotopicMass: 196.96656879,\n    },\n    {\n        number: 80,\n        isotopes: [\n            { nominal: 171, mass: 171.00353 },\n            { nominal: 172, mass: 171.99881 },\n            { nominal: 173, mass: 172.99709 },\n            { nominal: 174, mass: 173.992865 },\n            { nominal: 175, mass: 174.991441 },\n            { nominal: 176, mass: 175.987361 },\n            { nominal: 177, mass: 176.986277 },\n            { nominal: 178, mass: 177.982484 },\n            { nominal: 179, mass: 178.981831 },\n            { nominal: 180, mass: 179.97826 },\n            { nominal: 181, mass: 180.977819 },\n            { nominal: 182, mass: 181.974689 },\n            { nominal: 183, mass: 182.9744448 },\n            { nominal: 184, mass: 183.971714 },\n            { nominal: 185, mass: 184.971899 },\n            { nominal: 186, mass: 185.969362 },\n            { nominal: 187, mass: 186.969814 },\n            { nominal: 188, mass: 187.967567 },\n            { nominal: 189, mass: 188.968195 },\n            { nominal: 190, mass: 189.966323 },\n            { nominal: 191, mass: 190.967157 },\n            { nominal: 192, mass: 191.965635 },\n            { nominal: 193, mass: 192.966653 },\n            { nominal: 194, mass: 193.9654491 },\n            { nominal: 195, mass: 194.966721 },\n            { nominal: 196, mass: 195.9658326, abundance: 0.0015 },\n            { nominal: 197, mass: 196.9672128 },\n            { nominal: 198, mass: 197.9667686, abundance: 0.0997 },\n            { nominal: 199, mass: 198.96828064, abundance: 0.1687 },\n            { nominal: 200, mass: 199.96832659, abundance: 0.231 },\n            { nominal: 201, mass: 200.97030284, abundance: 0.1318 },\n            { nominal: 202, mass: 201.9706434, abundance: 0.2986 },\n            { nominal: 203, mass: 202.9728728 },\n            { nominal: 204, mass: 203.97349398, abundance: 0.0687 },\n            { nominal: 205, mass: 204.9760734 },\n            { nominal: 206, mass: 205.977514 },\n            { nominal: 207, mass: 206.9823 },\n            { nominal: 208, mass: 207.985759 },\n            { nominal: 209, mass: 208.99072 },\n            { nominal: 210, mass: 209.99424 },\n            { nominal: 211, mass: 210.99933 },\n            { nominal: 212, mass: 212.00296 },\n            { nominal: 213, mass: 213.00823 },\n            { nominal: 214, mass: 214.012 },\n            { nominal: 215, mass: 215.0174 },\n            { nominal: 216, mass: 216.02132 },\n        ],\n        symbol: 'Hg',\n        mass: 200.59916703455602,\n        name: 'Mercury',\n        monoisotopicMass: 201.9706434,\n    },\n    {\n        number: 81,\n        isotopes: [\n            { nominal: 176, mass: 176.000624 },\n            { nominal: 177, mass: 176.996431 },\n            { nominal: 178, mass: 177.99485 },\n            { nominal: 179, mass: 178.991111 },\n            { nominal: 180, mass: 179.990057 },\n            { nominal: 181, mass: 180.98626 },\n            { nominal: 182, mass: 181.985713 },\n            { nominal: 183, mass: 182.982193 },\n            { nominal: 184, mass: 183.981886 },\n            { nominal: 185, mass: 184.978789 },\n            { nominal: 186, mass: 185.978651 },\n            { nominal: 187, mass: 186.9759063 },\n            { nominal: 188, mass: 187.976021 },\n            { nominal: 189, mass: 188.973588 },\n            { nominal: 190, mass: 189.973828 },\n            { nominal: 191, mass: 190.9717842 },\n            { nominal: 192, mass: 191.972225 },\n            { nominal: 193, mass: 192.970502 },\n            { nominal: 194, mass: 193.971081 },\n            { nominal: 195, mass: 194.969774 },\n            { nominal: 196, mass: 195.970481 },\n            { nominal: 197, mass: 196.969576 },\n            { nominal: 198, mass: 197.970483 },\n            { nominal: 199, mass: 198.969877 },\n            { nominal: 200, mass: 199.9709633 },\n            { nominal: 201, mass: 200.970822 },\n            { nominal: 202, mass: 201.972102 },\n            { nominal: 203, mass: 202.9723446, abundance: 0.2952 },\n            { nominal: 204, mass: 203.9738639 },\n            { nominal: 205, mass: 204.9744278, abundance: 0.7048 },\n            { nominal: 206, mass: 205.9761106 },\n            { nominal: 207, mass: 206.9774197 },\n            { nominal: 208, mass: 207.982019 },\n            { nominal: 209, mass: 208.9853594 },\n            { nominal: 210, mass: 209.990074 },\n            { nominal: 211, mass: 210.993475 },\n            { nominal: 212, mass: 211.99834 },\n            { nominal: 213, mass: 213.001915 },\n            { nominal: 214, mass: 214.00694 },\n            { nominal: 215, mass: 215.01064 },\n            { nominal: 216, mass: 216.0158 },\n            { nominal: 217, mass: 217.01966 },\n            { nominal: 218, mass: 218.02479 },\n        ],\n        symbol: 'Tl',\n        mass: 204.38341283936,\n        name: 'Thallium',\n        monoisotopicMass: 204.9744278,\n    },\n    {\n        number: 82,\n        isotopes: [\n            { nominal: 178, mass: 178.003831 },\n            { nominal: 179, mass: 179.002201 },\n            { nominal: 180, mass: 179.997928 },\n            { nominal: 181, mass: 180.996653 },\n            { nominal: 182, mass: 181.992672 },\n            { nominal: 183, mass: 182.991872 },\n            { nominal: 184, mass: 183.988136 },\n            { nominal: 185, mass: 184.98761 },\n            { nominal: 186, mass: 185.984238 },\n            { nominal: 187, mass: 186.9839109 },\n            { nominal: 188, mass: 187.980875 },\n            { nominal: 189, mass: 188.980807 },\n            { nominal: 190, mass: 189.978082 },\n            { nominal: 191, mass: 190.978276 },\n            { nominal: 192, mass: 191.975775 },\n            { nominal: 193, mass: 192.976173 },\n            { nominal: 194, mass: 193.974012 },\n            { nominal: 195, mass: 194.974543 },\n            { nominal: 196, mass: 195.972774 },\n            { nominal: 197, mass: 196.9734312 },\n            { nominal: 198, mass: 197.972034 },\n            { nominal: 199, mass: 198.972913 },\n            { nominal: 200, mass: 199.971819 },\n            { nominal: 201, mass: 200.972883 },\n            { nominal: 202, mass: 201.972152 },\n            { nominal: 203, mass: 202.9733911 },\n            { nominal: 204, mass: 203.973044, abundance: 0.014 },\n            { nominal: 205, mass: 204.9744822 },\n            { nominal: 206, mass: 205.9744657, abundance: 0.241 },\n            { nominal: 207, mass: 206.9758973, abundance: 0.221 },\n            { nominal: 208, mass: 207.9766525, abundance: 0.524 },\n            { nominal: 209, mass: 208.9810905 },\n            { nominal: 210, mass: 209.9841889 },\n            { nominal: 211, mass: 210.9887371 },\n            { nominal: 212, mass: 211.9918977 },\n            { nominal: 213, mass: 212.9965629 },\n            { nominal: 214, mass: 213.9998059 },\n            { nominal: 215, mass: 215.00474 },\n            { nominal: 216, mass: 216.00803 },\n            { nominal: 217, mass: 217.01314 },\n            { nominal: 218, mass: 218.01659 },\n            { nominal: 219, mass: 219.02177 },\n            { nominal: 220, mass: 220.02541 },\n        ],\n        symbol: 'Pb',\n        mass: 207.216908063,\n        name: 'Lead',\n        monoisotopicMass: 207.9766525,\n    },\n    {\n        number: 83,\n        isotopes: [\n            { nominal: 184, mass: 184.001275 },\n            { nominal: 185, mass: 184.9976 },\n            { nominal: 186, mass: 185.996644 },\n            { nominal: 187, mass: 186.993147 },\n            { nominal: 188, mass: 187.992287 },\n            { nominal: 189, mass: 188.989195 },\n            { nominal: 190, mass: 189.988622 },\n            { nominal: 191, mass: 190.9857866 },\n            { nominal: 192, mass: 191.985469 },\n            { nominal: 193, mass: 192.98296 },\n            { nominal: 194, mass: 193.982785 },\n            { nominal: 195, mass: 194.9806488 },\n            { nominal: 196, mass: 195.980667 },\n            { nominal: 197, mass: 196.9788651 },\n            { nominal: 198, mass: 197.979206 },\n            { nominal: 199, mass: 198.977673 },\n            { nominal: 200, mass: 199.978131 },\n            { nominal: 201, mass: 200.97701 },\n            { nominal: 202, mass: 201.977734 },\n            { nominal: 203, mass: 202.976893 },\n            { nominal: 204, mass: 203.9778361 },\n            { nominal: 205, mass: 204.9773867 },\n            { nominal: 206, mass: 205.9784993 },\n            { nominal: 207, mass: 206.978471 },\n            { nominal: 208, mass: 207.9797425 },\n            { nominal: 209, mass: 208.9803991, abundance: 1 },\n            { nominal: 210, mass: 209.9841207 },\n            { nominal: 211, mass: 210.9872697 },\n            { nominal: 212, mass: 211.991286 },\n            { nominal: 213, mass: 212.9943851 },\n            { nominal: 214, mass: 213.998712 },\n            { nominal: 215, mass: 215.00177 },\n            { nominal: 216, mass: 216.006306 },\n            { nominal: 217, mass: 217.009372 },\n            { nominal: 218, mass: 218.014188 },\n            { nominal: 219, mass: 219.01748 },\n            { nominal: 220, mass: 220.02235 },\n            { nominal: 221, mass: 221.02587 },\n            { nominal: 222, mass: 222.03078 },\n            { nominal: 223, mass: 223.0345 },\n            { nominal: 224, mass: 224.03947 },\n        ],\n        symbol: 'Bi',\n        mass: 208.9803991,\n        name: 'Bismuth',\n        monoisotopicMass: 208.9803991,\n    },\n    {\n        number: 84,\n        isotopes: [\n            { nominal: 186, mass: 186.004393 },\n            { nominal: 187, mass: 187.003041 },\n            { nominal: 188, mass: 187.999416 },\n            { nominal: 189, mass: 188.998473 },\n            { nominal: 190, mass: 189.995101 },\n            { nominal: 191, mass: 190.9945585 },\n            { nominal: 192, mass: 191.991336 },\n            { nominal: 193, mass: 192.991026 },\n            { nominal: 194, mass: 193.988186 },\n            { nominal: 195, mass: 194.988126 },\n            { nominal: 196, mass: 195.985526 },\n            { nominal: 197, mass: 196.98566 },\n            { nominal: 198, mass: 197.983389 },\n            { nominal: 199, mass: 198.983667 },\n            { nominal: 200, mass: 199.981799 },\n            { nominal: 201, mass: 200.9822598 },\n            { nominal: 202, mass: 201.980758 },\n            { nominal: 203, mass: 202.9814161 },\n            { nominal: 204, mass: 203.98031 },\n            { nominal: 205, mass: 204.981203 },\n            { nominal: 206, mass: 205.980474 },\n            { nominal: 207, mass: 206.9815938 },\n            { nominal: 208, mass: 207.9812461 },\n            { nominal: 209, mass: 208.9824308 },\n            { nominal: 210, mass: 209.9828741 },\n            { nominal: 211, mass: 210.9866536 },\n            { nominal: 212, mass: 211.9888684 },\n            { nominal: 213, mass: 212.9928576 },\n            { nominal: 214, mass: 213.9952017 },\n            { nominal: 215, mass: 214.9994201 },\n            { nominal: 216, mass: 216.0019152 },\n            { nominal: 217, mass: 217.0063182 },\n            { nominal: 218, mass: 218.0089735 },\n            { nominal: 219, mass: 219.013614 },\n            { nominal: 220, mass: 220.016386 },\n            { nominal: 221, mass: 221.021228 },\n            { nominal: 222, mass: 222.02414 },\n            { nominal: 223, mass: 223.02907 },\n            { nominal: 224, mass: 224.03211 },\n            { nominal: 225, mass: 225.03707 },\n            { nominal: 226, mass: 226.04031 },\n            { nominal: 227, mass: 227.04539 },\n        ],\n        symbol: 'Po',\n        mass: null,\n        name: 'Polonium',\n    },\n    {\n        number: 85,\n        isotopes: [\n            { nominal: 191, mass: 191.004148 },\n            { nominal: 192, mass: 192.003152 },\n            { nominal: 193, mass: 192.999927 },\n            { nominal: 194, mass: 193.999236 },\n            { nominal: 195, mass: 194.9962685 },\n            { nominal: 196, mass: 195.9958 },\n            { nominal: 197, mass: 196.993189 },\n            { nominal: 198, mass: 197.992784 },\n            { nominal: 199, mass: 198.9905277 },\n            { nominal: 200, mass: 199.990351 },\n            { nominal: 201, mass: 200.9884171 },\n            { nominal: 202, mass: 201.98863 },\n            { nominal: 203, mass: 202.986943 },\n            { nominal: 204, mass: 203.987251 },\n            { nominal: 205, mass: 204.986076 },\n            { nominal: 206, mass: 205.986657 },\n            { nominal: 207, mass: 206.9858 },\n            { nominal: 208, mass: 207.9866133 },\n            { nominal: 209, mass: 208.9861702 },\n            { nominal: 210, mass: 209.9871479 },\n            { nominal: 211, mass: 210.9874966 },\n            { nominal: 212, mass: 211.9907377 },\n            { nominal: 213, mass: 212.992937 },\n            { nominal: 214, mass: 213.9963721 },\n            { nominal: 215, mass: 214.9986528 },\n            { nominal: 216, mass: 216.0024236 },\n            { nominal: 217, mass: 217.0047192 },\n            { nominal: 218, mass: 218.008695 },\n            { nominal: 219, mass: 219.0111618 },\n            { nominal: 220, mass: 220.015433 },\n            { nominal: 221, mass: 221.018017 },\n            { nominal: 222, mass: 222.022494 },\n            { nominal: 223, mass: 223.025151 },\n            { nominal: 224, mass: 224.029749 },\n            { nominal: 225, mass: 225.03263 },\n            { nominal: 226, mass: 226.03716 },\n            { nominal: 227, mass: 227.04024 },\n            { nominal: 228, mass: 228.04475 },\n            { nominal: 229, mass: 229.04812 },\n        ],\n        symbol: 'At',\n        mass: null,\n        name: 'Astatine',\n    },\n    {\n        number: 86,\n        isotopes: [\n            { nominal: 193, mass: 193.009708 },\n            { nominal: 194, mass: 194.006144 },\n            { nominal: 195, mass: 195.005422 },\n            { nominal: 196, mass: 196.002116 },\n            { nominal: 197, mass: 197.001585 },\n            { nominal: 198, mass: 197.998679 },\n            { nominal: 199, mass: 198.99839 },\n            { nominal: 200, mass: 199.99569 },\n            { nominal: 201, mass: 200.995628 },\n            { nominal: 202, mass: 201.993264 },\n            { nominal: 203, mass: 202.993388 },\n            { nominal: 204, mass: 203.99143 },\n            { nominal: 205, mass: 204.991719 },\n            { nominal: 206, mass: 205.990214 },\n            { nominal: 207, mass: 206.9907303 },\n            { nominal: 208, mass: 207.989635 },\n            { nominal: 209, mass: 208.990415 },\n            { nominal: 210, mass: 209.9896891 },\n            { nominal: 211, mass: 210.9906011 },\n            { nominal: 212, mass: 211.9907039 },\n            { nominal: 213, mass: 212.9938831 },\n            { nominal: 214, mass: 213.995363 },\n            { nominal: 215, mass: 214.9987459 },\n            { nominal: 216, mass: 216.0002719 },\n            { nominal: 217, mass: 217.003928 },\n            { nominal: 218, mass: 218.0056016 },\n            { nominal: 219, mass: 219.0094804 },\n            { nominal: 220, mass: 220.0113941 },\n            { nominal: 221, mass: 221.0155371 },\n            { nominal: 222, mass: 222.0175782 },\n            { nominal: 223, mass: 223.0218893 },\n            { nominal: 224, mass: 224.024096 },\n            { nominal: 225, mass: 225.028486 },\n            { nominal: 226, mass: 226.030861 },\n            { nominal: 227, mass: 227.035304 },\n            { nominal: 228, mass: 228.037835 },\n            { nominal: 229, mass: 229.042257 },\n            { nominal: 230, mass: 230.04514 },\n            { nominal: 231, mass: 231.04987 },\n        ],\n        symbol: 'Rn',\n        mass: null,\n        name: 'Radon',\n    },\n    {\n        number: 87,\n        isotopes: [\n            { nominal: 199, mass: 199.007259 },\n            { nominal: 200, mass: 200.006586 },\n            { nominal: 201, mass: 201.003867 },\n            { nominal: 202, mass: 202.00332 },\n            { nominal: 203, mass: 203.0009407 },\n            { nominal: 204, mass: 204.000652 },\n            { nominal: 205, mass: 204.9985939 },\n            { nominal: 206, mass: 205.998666 },\n            { nominal: 207, mass: 206.996946 },\n            { nominal: 208, mass: 207.997138 },\n            { nominal: 209, mass: 208.995955 },\n            { nominal: 210, mass: 209.996422 },\n            { nominal: 211, mass: 210.995556 },\n            { nominal: 212, mass: 211.9962257 },\n            { nominal: 213, mass: 212.996186 },\n            { nominal: 214, mass: 213.9989713 },\n            { nominal: 215, mass: 215.0003418 },\n            { nominal: 216, mass: 216.0031899 },\n            { nominal: 217, mass: 217.0046323 },\n            { nominal: 218, mass: 218.0075787 },\n            { nominal: 219, mass: 219.0092524 },\n            { nominal: 220, mass: 220.0123277 },\n            { nominal: 221, mass: 221.0142552 },\n            { nominal: 222, mass: 222.017552 },\n            { nominal: 223, mass: 223.019736 },\n            { nominal: 224, mass: 224.023398 },\n            { nominal: 225, mass: 225.025573 },\n            { nominal: 226, mass: 226.029566 },\n            { nominal: 227, mass: 227.031869 },\n            { nominal: 228, mass: 228.035823 },\n            { nominal: 229, mass: 229.038298 },\n            { nominal: 230, mass: 230.042416 },\n            { nominal: 231, mass: 231.045158 },\n            { nominal: 232, mass: 232.04937 },\n            { nominal: 233, mass: 233.05264 },\n        ],\n        symbol: 'Fr',\n        mass: null,\n        name: 'Francium',\n    },\n    {\n        number: 88,\n        isotopes: [\n            { nominal: 201, mass: 201.01271 },\n            { nominal: 202, mass: 202.00976 },\n            { nominal: 203, mass: 203.009304 },\n            { nominal: 204, mass: 204.006492 },\n            { nominal: 205, mass: 205.006268 },\n            { nominal: 206, mass: 206.003828 },\n            { nominal: 207, mass: 207.003799 },\n            { nominal: 208, mass: 208.001841 },\n            { nominal: 209, mass: 209.00199 },\n            { nominal: 210, mass: 210.000494 },\n            { nominal: 211, mass: 211.0008932 },\n            { nominal: 212, mass: 211.999787 },\n            { nominal: 213, mass: 213.000384 },\n            { nominal: 214, mass: 214.0000997 },\n            { nominal: 215, mass: 215.0027204 },\n            { nominal: 216, mass: 216.0035334 },\n            { nominal: 217, mass: 217.0063207 },\n            { nominal: 218, mass: 218.007141 },\n            { nominal: 219, mass: 219.0100855 },\n            { nominal: 220, mass: 220.0110259 },\n            { nominal: 221, mass: 221.0139177 },\n            { nominal: 222, mass: 222.0153748 },\n            { nominal: 223, mass: 223.0185023 },\n            { nominal: 224, mass: 224.020212 },\n            { nominal: 225, mass: 225.0236119 },\n            { nominal: 226, mass: 226.0254103 },\n            { nominal: 227, mass: 227.0291783 },\n            { nominal: 228, mass: 228.0310707 },\n            { nominal: 229, mass: 229.034942 },\n            { nominal: 230, mass: 230.037055 },\n            { nominal: 231, mass: 231.041027 },\n            { nominal: 232, mass: 232.0434753 },\n            { nominal: 233, mass: 233.047582 },\n            { nominal: 234, mass: 234.050342 },\n            { nominal: 235, mass: 235.05497 },\n        ],\n        symbol: 'Ra',\n        mass: null,\n        name: 'Radium',\n    },\n    {\n        number: 89,\n        isotopes: [\n            { nominal: 206, mass: 206.014452 },\n            { nominal: 207, mass: 207.011966 },\n            { nominal: 208, mass: 208.01155 },\n            { nominal: 209, mass: 209.009495 },\n            { nominal: 210, mass: 210.009436 },\n            { nominal: 211, mass: 211.007732 },\n            { nominal: 212, mass: 212.007813 },\n            { nominal: 213, mass: 213.006609 },\n            { nominal: 214, mass: 214.006918 },\n            { nominal: 215, mass: 215.006475 },\n            { nominal: 216, mass: 216.008743 },\n            { nominal: 217, mass: 217.009344 },\n            { nominal: 218, mass: 218.011642 },\n            { nominal: 219, mass: 219.012421 },\n            { nominal: 220, mass: 220.0147549 },\n            { nominal: 221, mass: 221.015592 },\n            { nominal: 222, mass: 222.0178442 },\n            { nominal: 223, mass: 223.0191377 },\n            { nominal: 224, mass: 224.0217232 },\n            { nominal: 225, mass: 225.02323 },\n            { nominal: 226, mass: 226.0260984 },\n            { nominal: 227, mass: 227.0277523 },\n            { nominal: 228, mass: 228.0310215 },\n            { nominal: 229, mass: 229.032956 },\n            { nominal: 230, mass: 230.036327 },\n            { nominal: 231, mass: 231.038393 },\n            { nominal: 232, mass: 232.042034 },\n            { nominal: 233, mass: 233.044346 },\n            { nominal: 234, mass: 234.048139 },\n            { nominal: 235, mass: 235.05084 },\n            { nominal: 236, mass: 236.054988 },\n            { nominal: 237, mass: 237.05827 },\n        ],\n        symbol: 'Ac',\n        mass: null,\n        name: 'Actinium',\n    },\n    {\n        number: 90,\n        isotopes: [\n            { nominal: 208, mass: 208.0179 },\n            { nominal: 209, mass: 209.017753 },\n            { nominal: 210, mass: 210.015094 },\n            { nominal: 211, mass: 211.014929 },\n            { nominal: 212, mass: 212.012988 },\n            { nominal: 213, mass: 213.013009 },\n            { nominal: 214, mass: 214.0115 },\n            { nominal: 215, mass: 215.0117248 },\n            { nominal: 216, mass: 216.011056 },\n            { nominal: 217, mass: 217.013117 },\n            { nominal: 218, mass: 218.013276 },\n            { nominal: 219, mass: 219.015537 },\n            { nominal: 220, mass: 220.015748 },\n            { nominal: 221, mass: 221.018184 },\n            { nominal: 222, mass: 222.018469 },\n            { nominal: 223, mass: 223.0208119 },\n            { nominal: 224, mass: 224.021464 },\n            { nominal: 225, mass: 225.0239514 },\n            { nominal: 226, mass: 226.0249034 },\n            { nominal: 227, mass: 227.0277042 },\n            { nominal: 228, mass: 228.0287413 },\n            { nominal: 229, mass: 229.0317627 },\n            { nominal: 230, mass: 230.0331341 },\n            { nominal: 231, mass: 231.0363046 },\n            { nominal: 232, mass: 232.0380558, abundance: 1 },\n            { nominal: 233, mass: 233.0415823 },\n            { nominal: 234, mass: 234.0436014 },\n            { nominal: 235, mass: 235.047255 },\n            { nominal: 236, mass: 236.049657 },\n            { nominal: 237, mass: 237.053629 },\n            { nominal: 238, mass: 238.0565 },\n            { nominal: 239, mass: 239.06077 },\n        ],\n        symbol: 'Th',\n        mass: 232.0380558,\n        name: 'Thorium',\n        monoisotopicMass: 232.0380558,\n    },\n    {\n        number: 91,\n        isotopes: [\n            { nominal: 212, mass: 212.023203 },\n            { nominal: 213, mass: 213.021109 },\n            { nominal: 214, mass: 214.020918 },\n            { nominal: 215, mass: 215.019183 },\n            { nominal: 216, mass: 216.019109 },\n            { nominal: 217, mass: 217.018325 },\n            { nominal: 218, mass: 218.020059 },\n            { nominal: 219, mass: 219.019904 },\n            { nominal: 220, mass: 220.021705 },\n            { nominal: 221, mass: 221.021875 },\n            { nominal: 222, mass: 222.023784 },\n            { nominal: 223, mass: 223.023963 },\n            { nominal: 224, mass: 224.0256176 },\n            { nominal: 225, mass: 225.026131 },\n            { nominal: 226, mass: 226.027948 },\n            { nominal: 227, mass: 227.0288054 },\n            { nominal: 228, mass: 228.0310517 },\n            { nominal: 229, mass: 229.0320972 },\n            { nominal: 230, mass: 230.034541 },\n            { nominal: 231, mass: 231.0358842, abundance: 1 },\n            { nominal: 232, mass: 232.0385917 },\n            { nominal: 233, mass: 233.0402472 },\n            { nominal: 234, mass: 234.0433072 },\n            { nominal: 235, mass: 235.045399 },\n            { nominal: 236, mass: 236.048668 },\n            { nominal: 237, mass: 237.051023 },\n            { nominal: 238, mass: 238.054637 },\n            { nominal: 239, mass: 239.05726 },\n            { nominal: 240, mass: 240.06098 },\n            { nominal: 241, mass: 241.06408 },\n        ],\n        symbol: 'Pa',\n        mass: 231.0358842,\n        name: 'Protactinium',\n        monoisotopicMass: 231.0358842,\n    },\n    {\n        number: 92,\n        isotopes: [\n            { nominal: 217, mass: 217.02466 },\n            { nominal: 218, mass: 218.023523 },\n            { nominal: 219, mass: 219.024999 },\n            { nominal: 220, mass: 220.02462 },\n            { nominal: 221, mass: 221.02628 },\n            { nominal: 222, mass: 222.026 },\n            { nominal: 223, mass: 223.027739 },\n            { nominal: 224, mass: 224.027605 },\n            { nominal: 225, mass: 225.029391 },\n            { nominal: 226, mass: 226.029339 },\n            { nominal: 227, mass: 227.031157 },\n            { nominal: 228, mass: 228.031371 },\n            { nominal: 229, mass: 229.0335063 },\n            { nominal: 230, mass: 230.0339401 },\n            { nominal: 231, mass: 231.0362939 },\n            { nominal: 232, mass: 232.0371563 },\n            { nominal: 233, mass: 233.0396355 },\n            { nominal: 234, mass: 234.0409523, abundance: 0.000054 },\n            { nominal: 235, mass: 235.0439301, abundance: 0.007204 },\n            { nominal: 236, mass: 236.0455682 },\n            { nominal: 237, mass: 237.0487304 },\n            { nominal: 238, mass: 238.0507884, abundance: 0.992742 },\n            { nominal: 239, mass: 239.0542935 },\n            { nominal: 240, mass: 240.0565934 },\n            { nominal: 241, mass: 241.06033 },\n            { nominal: 242, mass: 242.06293 },\n            { nominal: 243, mass: 243.06699 },\n        ],\n        symbol: 'U',\n        mass: 238.0289104616574,\n        name: 'Uranium',\n        monoisotopicMass: 238.0507884,\n    },\n    {\n        number: 93,\n        isotopes: [\n            { nominal: 219, mass: 219.03143 },\n            { nominal: 220, mass: 220.03254 },\n            { nominal: 221, mass: 221.03204 },\n            { nominal: 222, mass: 222.0333 },\n            { nominal: 223, mass: 223.03285 },\n            { nominal: 224, mass: 224.03422 },\n            { nominal: 225, mass: 225.033911 },\n            { nominal: 226, mass: 226.035188 },\n            { nominal: 227, mass: 227.034957 },\n            { nominal: 228, mass: 228.036067 },\n            { nominal: 229, mass: 229.036264 },\n            { nominal: 230, mass: 230.037828 },\n            { nominal: 231, mass: 231.038245 },\n            { nominal: 232, mass: 232.04011 },\n            { nominal: 233, mass: 233.040741 },\n            { nominal: 234, mass: 234.0428953 },\n            { nominal: 235, mass: 235.0440635 },\n            { nominal: 236, mass: 236.04657 },\n            { nominal: 237, mass: 237.0481736 },\n            { nominal: 238, mass: 238.0509466 },\n            { nominal: 239, mass: 239.0529392 },\n            { nominal: 240, mass: 240.056165 },\n            { nominal: 241, mass: 241.058253 },\n            { nominal: 242, mass: 242.06164 },\n            { nominal: 243, mass: 243.06428 },\n            { nominal: 244, mass: 244.06785 },\n            { nominal: 245, mass: 245.0708 },\n        ],\n        symbol: 'Np',\n        mass: null,\n        name: 'Neptunium',\n    },\n    {\n        number: 94,\n        isotopes: [\n            { nominal: 228, mass: 228.038732 },\n            { nominal: 229, mass: 229.040144 },\n            { nominal: 230, mass: 230.03965 },\n            { nominal: 231, mass: 231.041102 },\n            { nominal: 232, mass: 232.041185 },\n            { nominal: 233, mass: 233.042998 },\n            { nominal: 234, mass: 234.0433174 },\n            { nominal: 235, mass: 235.045286 },\n            { nominal: 236, mass: 236.0460581 },\n            { nominal: 237, mass: 237.0484098 },\n            { nominal: 238, mass: 238.0495601 },\n            { nominal: 239, mass: 239.0521636 },\n            { nominal: 240, mass: 240.0538138 },\n            { nominal: 241, mass: 241.0568517 },\n            { nominal: 242, mass: 242.0587428 },\n            { nominal: 243, mass: 243.0620036 },\n            { nominal: 244, mass: 244.0642053 },\n            { nominal: 245, mass: 245.067826 },\n            { nominal: 246, mass: 246.070205 },\n            { nominal: 247, mass: 247.07419 },\n        ],\n        symbol: 'Pu',\n        mass: null,\n        name: 'Plutonium',\n    },\n    {\n        number: 95,\n        isotopes: [\n            { nominal: 230, mass: 230.04609 },\n            { nominal: 231, mass: 231.04556 },\n            { nominal: 232, mass: 232.04645 },\n            { nominal: 233, mass: 233.04644 },\n            { nominal: 234, mass: 234.04773 },\n            { nominal: 235, mass: 235.047908 },\n            { nominal: 236, mass: 236.04943 },\n            { nominal: 237, mass: 237.049996 },\n            { nominal: 238, mass: 238.051985 },\n            { nominal: 239, mass: 239.0530247 },\n            { nominal: 240, mass: 240.0553 },\n            { nominal: 241, mass: 241.0568293 },\n            { nominal: 242, mass: 242.0595494 },\n            { nominal: 243, mass: 243.0613813 },\n            { nominal: 244, mass: 244.0642851 },\n            { nominal: 245, mass: 245.0664548 },\n            { nominal: 246, mass: 246.069775 },\n            { nominal: 247, mass: 247.07209 },\n            { nominal: 248, mass: 248.07575 },\n            { nominal: 249, mass: 249.07848 },\n        ],\n        symbol: 'Am',\n        name: 'Americium',\n        mass: null,\n    },\n    {\n        number: 96,\n        isotopes: [\n            { nominal: 232, mass: 232.04982 },\n            { nominal: 233, mass: 233.05077 },\n            { nominal: 234, mass: 234.05016 },\n            { nominal: 235, mass: 235.05154 },\n            { nominal: 236, mass: 236.051374 },\n            { nominal: 237, mass: 237.052869 },\n            { nominal: 238, mass: 238.053081 },\n            { nominal: 239, mass: 239.05491 },\n            { nominal: 240, mass: 240.0555297 },\n            { nominal: 241, mass: 241.0576532 },\n            { nominal: 242, mass: 242.058836 },\n            { nominal: 243, mass: 243.0613893 },\n            { nominal: 244, mass: 244.0627528 },\n            { nominal: 245, mass: 245.0654915 },\n            { nominal: 246, mass: 246.0672238 },\n            { nominal: 247, mass: 247.0703541 },\n            { nominal: 248, mass: 248.0723499 },\n            { nominal: 249, mass: 249.0759548 },\n            { nominal: 250, mass: 250.078358 },\n            { nominal: 251, mass: 251.082286 },\n            { nominal: 252, mass: 252.08487 },\n        ],\n        symbol: 'Cm',\n        name: 'Curium',\n        mass: null,\n    },\n    {\n        number: 97,\n        isotopes: [\n            { nominal: 234, mass: 234.05727 },\n            { nominal: 235, mass: 235.05658 },\n            { nominal: 236, mass: 236.05748 },\n            { nominal: 237, mass: 237.0571 },\n            { nominal: 238, mass: 238.0582 },\n            { nominal: 239, mass: 239.05824 },\n            { nominal: 240, mass: 240.05976 },\n            { nominal: 241, mass: 241.06016 },\n            { nominal: 242, mass: 242.06198 },\n            { nominal: 243, mass: 243.0630078 },\n            { nominal: 244, mass: 244.065181 },\n            { nominal: 245, mass: 245.0663618 },\n            { nominal: 246, mass: 246.068673 },\n            { nominal: 247, mass: 247.0703073 },\n            { nominal: 248, mass: 248.073088 },\n            { nominal: 249, mass: 249.0749877 },\n            { nominal: 250, mass: 250.0783167 },\n            { nominal: 251, mass: 251.080762 },\n            { nominal: 252, mass: 252.08431 },\n            { nominal: 253, mass: 253.08688 },\n            { nominal: 254, mass: 254.0906 },\n        ],\n        symbol: 'Bk',\n        name: 'Berkelium',\n        mass: null,\n    },\n    {\n        number: 98,\n        isotopes: [\n            { nominal: 237, mass: 237.062198 },\n            { nominal: 238, mass: 238.06149 },\n            { nominal: 239, mass: 239.06253 },\n            { nominal: 240, mass: 240.062256 },\n            { nominal: 241, mass: 241.06369 },\n            { nominal: 242, mass: 242.063754 },\n            { nominal: 243, mass: 243.06548 },\n            { nominal: 244, mass: 244.0660008 },\n            { nominal: 245, mass: 245.0680487 },\n            { nominal: 246, mass: 246.0688055 },\n            { nominal: 247, mass: 247.070965 },\n            { nominal: 248, mass: 248.0721851 },\n            { nominal: 249, mass: 249.0748539 },\n            { nominal: 250, mass: 250.0764062 },\n            { nominal: 251, mass: 251.0795886 },\n            { nominal: 252, mass: 252.0816272 },\n            { nominal: 253, mass: 253.0851345 },\n            { nominal: 254, mass: 254.087324 },\n            { nominal: 255, mass: 255.09105 },\n            { nominal: 256, mass: 256.09344 },\n        ],\n        symbol: 'Cf',\n        name: 'Californium',\n        mass: null,\n    },\n    {\n        number: 99,\n        isotopes: [\n            { nominal: 239, mass: 239.06823 },\n            { nominal: 240, mass: 240.06892 },\n            { nominal: 241, mass: 241.06856 },\n            { nominal: 242, mass: 242.06957 },\n            { nominal: 243, mass: 243.06951 },\n            { nominal: 244, mass: 244.07088 },\n            { nominal: 245, mass: 245.07125 },\n            { nominal: 246, mass: 246.0729 },\n            { nominal: 247, mass: 247.073622 },\n            { nominal: 248, mass: 248.075471 },\n            { nominal: 249, mass: 249.076411 },\n            { nominal: 250, mass: 250.07861 },\n            { nominal: 251, mass: 251.0799936 },\n            { nominal: 252, mass: 252.08298 },\n            { nominal: 253, mass: 253.0848257 },\n            { nominal: 254, mass: 254.0880222 },\n            { nominal: 255, mass: 255.090275 },\n            { nominal: 256, mass: 256.0936 },\n            { nominal: 257, mass: 257.09598 },\n            { nominal: 258, mass: 258.09952 },\n        ],\n        symbol: 'Es',\n        name: 'Einsteinium',\n        mass: null,\n    },\n    {\n        number: 100,\n        isotopes: [\n            { nominal: 241, mass: 241.07421 },\n            { nominal: 242, mass: 242.07343 },\n            { nominal: 243, mass: 243.07446 },\n            { nominal: 244, mass: 244.07404 },\n            { nominal: 245, mass: 245.07535 },\n            { nominal: 246, mass: 246.07535 },\n            { nominal: 247, mass: 247.07694 },\n            { nominal: 248, mass: 248.0771865 },\n            { nominal: 249, mass: 249.0789275 },\n            { nominal: 250, mass: 250.079521 },\n            { nominal: 251, mass: 251.08154 },\n            { nominal: 252, mass: 252.0824671 },\n            { nominal: 253, mass: 253.0851846 },\n            { nominal: 254, mass: 254.0868544 },\n            { nominal: 255, mass: 255.089964 },\n            { nominal: 256, mass: 256.0917745 },\n            { nominal: 257, mass: 257.0951061 },\n            { nominal: 258, mass: 258.09708 },\n            { nominal: 259, mass: 259.1006 },\n            { nominal: 260, mass: 260.10281 },\n        ],\n        symbol: 'Fm',\n        name: 'Fermium',\n        mass: null,\n    },\n    {\n        number: 101,\n        isotopes: [\n            { nominal: 245, mass: 245.08081 },\n            { nominal: 246, mass: 246.08171 },\n            { nominal: 247, mass: 247.08152 },\n            { nominal: 248, mass: 248.08282 },\n            { nominal: 249, mass: 249.08291 },\n            { nominal: 250, mass: 250.08441 },\n            { nominal: 251, mass: 251.084774 },\n            { nominal: 252, mass: 252.08643 },\n            { nominal: 253, mass: 253.087144 },\n            { nominal: 254, mass: 254.08959 },\n            { nominal: 255, mass: 255.0910841 },\n            { nominal: 256, mass: 256.09389 },\n            { nominal: 257, mass: 257.0955424 },\n            { nominal: 258, mass: 258.0984315 },\n            { nominal: 259, mass: 259.10051 },\n            { nominal: 260, mass: 260.10365 },\n            { nominal: 261, mass: 261.10583 },\n            { nominal: 262, mass: 262.1091 },\n        ],\n        symbol: 'Md',\n        name: 'Mendelevium',\n        mass: null,\n    },\n    {\n        number: 102,\n        isotopes: [\n            { nominal: 248, mass: 248.08655 },\n            { nominal: 249, mass: 249.0878 },\n            { nominal: 250, mass: 250.08756 },\n            { nominal: 251, mass: 251.08894 },\n            { nominal: 252, mass: 252.088967 },\n            { nominal: 253, mass: 253.0905641 },\n            { nominal: 254, mass: 254.090956 },\n            { nominal: 255, mass: 255.093191 },\n            { nominal: 256, mass: 256.0942829 },\n            { nominal: 257, mass: 257.0968878 },\n            { nominal: 258, mass: 258.09821 },\n            { nominal: 259, mass: 259.10103 },\n            { nominal: 260, mass: 260.10264 },\n            { nominal: 261, mass: 261.1057 },\n            { nominal: 262, mass: 262.10746 },\n            { nominal: 263, mass: 263.11071 },\n            { nominal: 264, mass: 264.11273 },\n        ],\n        symbol: 'No',\n        name: 'Nobelium',\n        mass: null,\n    },\n    {\n        number: 103,\n        isotopes: [\n            { nominal: 251, mass: 251.09418 },\n            { nominal: 252, mass: 252.09526 },\n            { nominal: 253, mass: 253.09509 },\n            { nominal: 254, mass: 254.09648 },\n            { nominal: 255, mass: 255.096562 },\n            { nominal: 256, mass: 256.098494 },\n            { nominal: 257, mass: 257.099418 },\n            { nominal: 258, mass: 258.10176 },\n            { nominal: 259, mass: 259.102902 },\n            { nominal: 260, mass: 260.1055 },\n            { nominal: 261, mass: 261.10688 },\n            { nominal: 262, mass: 262.10961 },\n            { nominal: 263, mass: 263.11136 },\n            { nominal: 264, mass: 264.1142 },\n            { nominal: 265, mass: 265.11619 },\n            { nominal: 266, mass: 266.11983 },\n        ],\n        symbol: 'Lr',\n        name: 'Lawrencium',\n        mass: null,\n    },\n    {\n        number: 104,\n        isotopes: [\n            { nominal: 253, mass: 253.10044 },\n            { nominal: 254, mass: 254.10005 },\n            { nominal: 255, mass: 255.10127 },\n            { nominal: 256, mass: 256.101152 },\n            { nominal: 257, mass: 257.102918 },\n            { nominal: 258, mass: 258.103428 },\n            { nominal: 259, mass: 259.105596 },\n            { nominal: 260, mass: 260.10644 },\n            { nominal: 261, mass: 261.108773 },\n            { nominal: 262, mass: 262.10992 },\n            { nominal: 263, mass: 263.11249 },\n            { nominal: 264, mass: 264.11388 },\n            { nominal: 265, mass: 265.11668 },\n            { nominal: 266, mass: 266.11817 },\n            { nominal: 267, mass: 267.12179 },\n            { nominal: 268, mass: 268.12397 },\n        ],\n        symbol: 'Rf',\n        name: 'Rutherfordium',\n        mass: null,\n    },\n    {\n        number: 105,\n        isotopes: [\n            { nominal: 255, mass: 255.10707 },\n            { nominal: 256, mass: 256.10789 },\n            { nominal: 257, mass: 257.10758 },\n            { nominal: 258, mass: 258.10928 },\n            { nominal: 259, mass: 259.109492 },\n            { nominal: 260, mass: 260.1113 },\n            { nominal: 261, mass: 261.11192 },\n            { nominal: 262, mass: 262.11407 },\n            { nominal: 263, mass: 263.11499 },\n            { nominal: 264, mass: 264.11741 },\n            { nominal: 265, mass: 265.11861 },\n            { nominal: 266, mass: 266.12103 },\n            { nominal: 267, mass: 267.12247 },\n            { nominal: 268, mass: 268.12567 },\n            { nominal: 269, mass: 269.12791 },\n            { nominal: 270, mass: 270.13136 },\n        ],\n        symbol: 'Db',\n        name: 'Dubnium',\n        mass: null,\n    },\n    {\n        number: 106,\n        isotopes: [\n            { nominal: 258, mass: 258.11298 },\n            { nominal: 259, mass: 259.1144 },\n            { nominal: 260, mass: 260.114384 },\n            { nominal: 261, mass: 261.115949 },\n            { nominal: 262, mass: 262.116337 },\n            { nominal: 263, mass: 263.11829 },\n            { nominal: 264, mass: 264.11893 },\n            { nominal: 265, mass: 265.12109 },\n            { nominal: 266, mass: 266.12198 },\n            { nominal: 267, mass: 267.12436 },\n            { nominal: 268, mass: 268.12539 },\n            { nominal: 269, mass: 269.12863 },\n            { nominal: 270, mass: 270.13043 },\n            { nominal: 271, mass: 271.13393 },\n            { nominal: 272, mass: 272.13589 },\n            { nominal: 273, mass: 273.13958 },\n        ],\n        symbol: 'Sg',\n        name: 'Seaborgium',\n        mass: null,\n    },\n    {\n        number: 107,\n        isotopes: [\n            { nominal: 260, mass: 260.12166 },\n            { nominal: 261, mass: 261.12145 },\n            { nominal: 262, mass: 262.12297 },\n            { nominal: 263, mass: 263.12292 },\n            { nominal: 264, mass: 264.12459 },\n            { nominal: 265, mass: 265.12491 },\n            { nominal: 266, mass: 266.12679 },\n            { nominal: 267, mass: 267.1275 },\n            { nominal: 268, mass: 268.12969 },\n            { nominal: 269, mass: 269.13042 },\n            { nominal: 270, mass: 270.13336 },\n            { nominal: 271, mass: 271.13526 },\n            { nominal: 272, mass: 272.13826 },\n            { nominal: 273, mass: 273.14024 },\n            { nominal: 274, mass: 274.14355 },\n            { nominal: 275, mass: 275.14567 },\n        ],\n        symbol: 'Bh',\n        name: 'Bohrium',\n        mass: null,\n    },\n    {\n        number: 108,\n        isotopes: [\n            { nominal: 263, mass: 263.12852 },\n            { nominal: 264, mass: 264.128357 },\n            { nominal: 265, mass: 265.129793 },\n            { nominal: 266, mass: 266.130046 },\n            { nominal: 267, mass: 267.13167 },\n            { nominal: 268, mass: 268.13186 },\n            { nominal: 269, mass: 269.13375 },\n            { nominal: 270, mass: 270.13429 },\n            { nominal: 271, mass: 271.13717 },\n            { nominal: 272, mass: 272.1385 },\n            { nominal: 273, mass: 273.14168 },\n            { nominal: 274, mass: 274.1433 },\n            { nominal: 275, mass: 275.14667 },\n            { nominal: 276, mass: 276.14846 },\n            { nominal: 277, mass: 277.1519 },\n        ],\n        symbol: 'Hs',\n        name: 'Hassium',\n        mass: null,\n    },\n    {\n        number: 109,\n        isotopes: [\n            { nominal: 265, mass: 265.136 },\n            { nominal: 266, mass: 266.13737 },\n            { nominal: 267, mass: 267.13719 },\n            { nominal: 268, mass: 268.13865 },\n            { nominal: 269, mass: 269.13882 },\n            { nominal: 270, mass: 270.14033 },\n            { nominal: 271, mass: 271.14074 },\n            { nominal: 272, mass: 272.14341 },\n            { nominal: 273, mass: 273.1444 },\n            { nominal: 274, mass: 274.14724 },\n            { nominal: 275, mass: 275.14882 },\n            { nominal: 276, mass: 276.15159 },\n            { nominal: 277, mass: 277.15327 },\n            { nominal: 278, mass: 278.15631 },\n            { nominal: 279, mass: 279.15808 },\n        ],\n        symbol: 'Mt',\n        name: 'Meitnerium',\n        mass: null,\n    },\n    {\n        number: 110,\n        isotopes: [\n            { nominal: 267, mass: 267.14377 },\n            { nominal: 268, mass: 268.14348 },\n            { nominal: 269, mass: 269.144752 },\n            { nominal: 270, mass: 270.144584 },\n            { nominal: 271, mass: 271.14595 },\n            { nominal: 272, mass: 272.14602 },\n            { nominal: 273, mass: 273.14856 },\n            { nominal: 274, mass: 274.14941 },\n            { nominal: 275, mass: 275.15203 },\n            { nominal: 276, mass: 276.15303 },\n            { nominal: 277, mass: 277.15591 },\n            { nominal: 278, mass: 278.15704 },\n            { nominal: 279, mass: 279.1601 },\n            { nominal: 280, mass: 280.16131 },\n            { nominal: 281, mass: 281.16451 },\n        ],\n        symbol: 'Ds',\n        name: 'Darmstadtium',\n        mass: null,\n    },\n    {\n        number: 111,\n        isotopes: [\n            { nominal: 272, mass: 272.15327 },\n            { nominal: 273, mass: 273.15313 },\n            { nominal: 274, mass: 274.15525 },\n            { nominal: 275, mass: 275.15594 },\n            { nominal: 276, mass: 276.15833 },\n            { nominal: 277, mass: 277.15907 },\n            { nominal: 278, mass: 278.16149 },\n            { nominal: 279, mass: 279.16272 },\n            { nominal: 280, mass: 280.16514 },\n            { nominal: 281, mass: 281.16636 },\n            { nominal: 282, mass: 282.16912 },\n            { nominal: 283, mass: 283.17054 },\n        ],\n        symbol: 'Rg',\n        name: 'Roentgenium',\n        mass: null,\n    },\n    {\n        number: 112,\n        isotopes: [\n            { nominal: 276, mass: 276.16141 },\n            { nominal: 277, mass: 277.16364 },\n            { nominal: 278, mass: 278.16416 },\n            { nominal: 279, mass: 279.16654 },\n            { nominal: 280, mass: 280.16715 },\n            { nominal: 281, mass: 281.16975 },\n            { nominal: 282, mass: 282.1705 },\n            { nominal: 283, mass: 283.17327 },\n            { nominal: 284, mass: 284.17416 },\n            { nominal: 285, mass: 285.17712 },\n        ],\n        symbol: 'Cn',\n        name: 'Copernicium',\n        mass: null,\n    },\n    {\n        number: 113,\n        isotopes: [\n            { nominal: 278, mass: 278.17058 },\n            { nominal: 279, mass: 279.17095 },\n            { nominal: 280, mass: 280.17293 },\n            { nominal: 281, mass: 281.17348 },\n            { nominal: 282, mass: 282.17567 },\n            { nominal: 283, mass: 283.17657 },\n            { nominal: 284, mass: 284.17873 },\n            { nominal: 285, mass: 285.17973 },\n            { nominal: 286, mass: 286.18221 },\n            { nominal: 287, mass: 287.18339 },\n        ],\n        symbol: 'Nh',\n        name: 'Nihonium',\n        mass: null,\n    },\n    {\n        number: 114,\n        isotopes: [\n            { nominal: 285, mass: 285.18364 },\n            { nominal: 286, mass: 286.18423 },\n            { nominal: 287, mass: 287.18678 },\n            { nominal: 288, mass: 288.18757 },\n            { nominal: 289, mass: 289.19042 },\n        ],\n        symbol: 'Fl',\n        name: 'Flerovium',\n        mass: null,\n    },\n    {\n        number: 115,\n        isotopes: [\n            { nominal: 287, mass: 287.1907 },\n            { nominal: 288, mass: 288.19274 },\n            { nominal: 289, mass: 289.19363 },\n            { nominal: 290, mass: 290.19598 },\n            { nominal: 291, mass: 291.19707 },\n        ],\n        symbol: 'Mc',\n        name: 'Moscovium',\n        mass: null,\n    },\n    {\n        number: 116,\n        isotopes: [\n            { nominal: 289, mass: 289.19816 },\n            { nominal: 290, mass: 290.19864 },\n            { nominal: 291, mass: 291.20108 },\n            { nominal: 292, mass: 292.20174 },\n            { nominal: 293, mass: 293.20449 },\n        ],\n        symbol: 'Lv',\n        name: 'Livermorium',\n        mass: null,\n    },\n    {\n        number: 117,\n        isotopes: [\n            { nominal: 291, mass: 291.20553 },\n            { nominal: 292, mass: 292.20746 },\n            { nominal: 293, mass: 293.20824 },\n            { nominal: 294, mass: 294.21046 },\n        ],\n        symbol: 'Ts',\n        name: 'Teennessine',\n        mass: null,\n    },\n    {\n        number: 118,\n        isotopes: [\n            { nominal: 293, mass: 293.21356 },\n            { nominal: 294, mass: 294.21392 },\n            { nominal: 295, mass: 295.21624 },\n        ],\n        symbol: 'Og',\n        name: 'Oganesson',\n        mass: null,\n    },\n];\n//# sourceMappingURL=elementsAndIsotopes.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.elements = void 0;\nconst elementsAndIsotopes_js_1 = require(\"./elementsAndIsotopes.js\");\nexports.elements = elementsAndIsotopes_js_1.elementsAndIsotopes.map((element) => ({\n    number: element.number,\n    symbol: element.symbol,\n    mass: element.mass,\n    name: element.name,\n    monoisotopicMass: element.monoisotopicMass,\n}));\n//# sourceMappingURL=elements.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.elementsAndIsotopesObject = void 0;\nconst elementsAndIsotopes_js_1 = require(\"./elementsAndIsotopes.js\");\nexports.elementsAndIsotopesObject = {};\nfor (const element of elementsAndIsotopes_js_1.elementsAndIsotopes) {\n    exports.elementsAndIsotopesObject[element.symbol] = element;\n}\n//# sourceMappingURL=elementsAndIsotopesObject.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.elementsAndStableIsotopes = void 0;\nconst elementsAndIsotopes_js_1 = require(\"./elementsAndIsotopes.js\");\nexports.elementsAndStableIsotopes = structuredClone(elementsAndIsotopes_js_1.elementsAndIsotopes);\nfor (const element of exports.elementsAndStableIsotopes) {\n    element.isotopes = element.isotopes.filter((i) => {\n        return typeof i.abundance === 'number' && i.abundance > 0;\n    });\n}\n//# sourceMappingURL=elementsAndStableIsotopes.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.elementsAndStableIsotopesObject = void 0;\nconst elementsAndStableIsotopes_js_1 = require(\"./elementsAndStableIsotopes.js\");\nexports.elementsAndStableIsotopesObject = {};\nfor (const element of elementsAndStableIsotopes_js_1.elementsAndStableIsotopes) {\n    exports.elementsAndStableIsotopesObject[element.symbol] = element;\n}\n//# sourceMappingURL=elementsAndStableIsotopesObject.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.elementsObject = void 0;\nconst elements_js_1 = require(\"./elements.js\");\nexports.elementsObject = {};\nfor (const element of elements_js_1.elements) {\n    exports.elementsObject[element.symbol] = element;\n}\n//# sourceMappingURL=elementsObject.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isotopesObject = void 0;\nconst elementsAndIsotopesObject_js_1 = require(\"./elementsAndIsotopesObject.js\");\nexports.isotopesObject = {};\nfor (const [symbol, element] of Object.entries(elementsAndIsotopesObject_js_1.elementsAndIsotopesObject)) {\n    if (!element)\n        continue;\n    for (const isotope of element.isotopes) {\n        exports.isotopesObject[`${isotope.nominal}${symbol}`] = {\n            abundance: isotope.abundance,\n            mass: isotope.mass,\n        };\n    }\n}\n//# sourceMappingURL=isotopesObject.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.stableIsotopesObject = void 0;\nconst elementsAndIsotopes_js_1 = require(\"./elementsAndIsotopes.js\");\nexports.stableIsotopesObject = {};\nfor (const element of elementsAndIsotopes_js_1.elementsAndIsotopes) {\n    let abundance = 0;\n    let mostAbundant = 0;\n    for (const isotope of element.isotopes) {\n        if (typeof isotope.abundance === 'number' &&\n            isotope.abundance > abundance) {\n            abundance = isotope.abundance;\n            mostAbundant = isotope.nominal;\n        }\n    }\n    for (const isotope of element.isotopes) {\n        if (isotope.abundance === 0)\n            continue;\n        const entry = {\n            name: element.name,\n            mass: isotope.mass,\n            symbol: element.symbol,\n            mostAbundant: false,\n            deltaNeutrons: isotope.nominal - mostAbundant,\n        };\n        if (isotope.nominal === mostAbundant) {\n            entry.mostAbundant = true;\n        }\n        exports.stableIsotopesObject[`${isotope.nominal}${element.symbol}`] = entry;\n    }\n}\n//# sourceMappingURL=stableIsotopesObject.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.unsaturationsObject = void 0;\nexports.unsaturationsObject = {\n    O: 0,\n    N: 1,\n    H: -1,\n    Na: -1,\n    K: -1,\n    Li: -1,\n    Ca: -2,\n    C: 2,\n    F: -1,\n    Si: 2,\n    Cl: -1,\n    Br: -1,\n    I: -1,\n    S: 0,\n    P: 1,\n};\n//# sourceMappingURL=unsaturationsObject.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.groupsObject = void 0;\nconst groups_1 = require(\"./groups\");\nexports.groupsObject = {};\ngroups_1.groups.forEach((e) => {\n    if (exports.groupsObject[e.symbol]) {\n        // eslint-disable-next-line no-console\n        console.log(`The symbol ${e.symbol} is used more than once`);\n    }\n    exports.groupsObject[e.symbol] = e;\n});\n//# sourceMappingURL=groupsObject.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.groupsToSequence = groupsToSequence;\nconst groupsObject_js_1 = require(\"./groupsObject.js\");\n/**\n * Recreate a one letter sequence\n * @param {object} mf\n */\nfunction groupsToSequence(mf) {\n    mf = mf.replaceAll(/\\([^(]*\\)/g, '');\n    let parts = mf.split(/(?=[ A-Z])/);\n    let usefulParts = [];\n    for (let part of parts) {\n        if (part === ' ') {\n            usefulParts.push(' ');\n            continue;\n        }\n        if (!part.match(/^[A-Z][a-z]{2,6}/))\n            continue;\n        if (groupsObject_js_1.groupsObject[part] && groupsObject_js_1.groupsObject[part].oneLetter) {\n            usefulParts.push(groupsObject_js_1.groupsObject[part].oneLetter);\n        }\n        else {\n            usefulParts.push('?');\n        }\n    }\n    return usefulParts.join('').replaceAll(/ +/g, ' ').trim();\n}\n//# sourceMappingURL=groupsToSequence.js.map","\"use strict\";\n/**\n * Define static variable corresponding to the various Kinds of a molecular formula part.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Kind = void 0;\nexports.Kind = {\n    BEGIN: 'begin',\n    ATOM: 'atom',\n    MULTIPLIER_RANGE: 'multiplierRange',\n    ISOTOPE: 'isotope',\n    ISOTOPE_RATIO: 'isotopeRatio',\n    CHARGE: 'charge',\n    SALT: 'salt',\n    OPENING_PARENTHESIS: 'openingParenthesis',\n    CLOSING_PARENTHESIS: 'closingParenthesis',\n    PRE_MULTIPLIER: 'preMultiplier',\n    MULTIPLIER: 'multiplier',\n    TEXT: 'text',\n    ANCHOR: 'anchor',\n    COMMENT: 'comment',\n};\n//# sourceMappingURL=Kind.js.map","\"use strict\";\n/**\n * Parse a string to extract the charge.\n * The charge may be in the form --, +++, +3, -2, 4+, 2-\n * @param {*} charge\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.parseCharge = parseCharge;\nfunction parseCharge(charge) {\n    charge = charge.replaceAll(/[()]/g, '');\n    let chargeNumber = 0;\n    if (charge.match(/^[+-]+$/)) {\n        for (let i = 0; i < charge.length; i++) {\n            if (charge.charAt(i) === '+')\n                chargeNumber++;\n            else\n                chargeNumber--;\n        }\n    }\n    else if (charge.match(/^\\d+[+-]$/)) {\n        chargeNumber = Number(\n        // eslint-disable-next-line unicorn/prefer-at\n        charge.charAt(charge.length - 1) + charge.slice(0, -1));\n    }\n    else {\n        chargeNumber = Number(charge);\n    }\n    return chargeNumber;\n}\n//# sourceMappingURL=parseCharge.js.map","\"use strict\";\n/* eslint-disable unicorn/prefer-code-point */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.parse = parse;\nconst atom_sorter_1 = require(\"atom-sorter\");\nconst chemical_elements_1 = require(\"chemical-elements\");\nconst chemical_groups_1 = require(\"chemical-groups\");\nconst Kind_1 = require(\"./Kind\");\nconst parseCharge_1 = require(\"./util/parseCharge\");\n/**\n * Parse a mf to an array of kind / value\n * @param {String} mf\n * @param {Object} [options={}]\n * @param {Boolean} [options.expandGroups=false] - if true, expand groups\n * @param {Boolean} [options.simplify=false] - if true, remove all the parenthesis and join identical atoms / groups\n */\nfunction parse(mf, options = {}) {\n    return new MFParser().parse(mf, options);\n}\nclass MFParser {\n    parse(mf = '', options = {}) {\n        this.expandGroups = options?.expandGroups ?? false;\n        this.simplify = options?.simplify ?? false;\n        this.mf = mf;\n        this.i = 0;\n        this.result = [];\n        let lastKind = Kind_1.Kind.BEGIN;\n        while (this.i < mf.length) {\n            if (this.result.length > 0 && this.result.at(-1).kind !== Kind_1.Kind.TEXT) {\n                lastKind = this.result.at(-1).kind;\n            }\n            let char = mf.charAt(this.i);\n            let ascii = mf.charCodeAt(this.i);\n            let nextAscii = 0;\n            if (this.i + 1 < mf.length)\n                nextAscii = mf.charCodeAt(this.i + 1);\n            if ((ascii > 47 && ascii < 58) ||\n                (char === '-' && nextAscii > 47 && nextAscii < 58)) {\n                // a number\n                let value = this.getNumber(ascii);\n                if (lastKind === Kind_1.Kind.SALT ||\n                    lastKind === Kind_1.Kind.BEGIN ||\n                    lastKind === Kind_1.Kind.OPENING_PARENTHESIS) {\n                    if (value.to) {\n                        throw new MFError(this.mf, this.i, 'Premultiplier may not contain a -');\n                    }\n                    this.result.push({ kind: Kind_1.Kind.PRE_MULTIPLIER, value: value.from });\n                }\n                else if (lastKind === Kind_1.Kind.ANCHOR) {\n                    if (value.to) {\n                        throw new MFError(this.mf, this.i, 'Anchor ID may not contain -');\n                    }\n                    this.result.at(-1).value = value.from;\n                }\n                else if (value.to) {\n                    this.result.push({\n                        kind: Kind_1.Kind.MULTIPLIER_RANGE,\n                        value: {\n                            from: Math.min(value.from, value.to),\n                            to: Math.max(value.from, value.to),\n                        },\n                    });\n                }\n                else {\n                    this.result.push({ kind: Kind_1.Kind.MULTIPLIER, value: value.from });\n                }\n                continue;\n            }\n            else if (char === '.') {\n                // a point\n                this.result.push({ kind: Kind_1.Kind.SALT, value: char });\n                // it is not in a number otherwise it would have been taken before\n                // it must be in a salt\n            }\n            else if (char === '#') {\n                // an anchor\n                this.result.push({ kind: Kind_1.Kind.ANCHOR, value: 0 });\n                // it is not in a number otherwise it would have been taken before\n                // it must be in a salt\n            }\n            else if (ascii > 64 && ascii < 91) {\n                // an uppercase = new atom\n                this.result.push(...this.getAtom(ascii));\n                continue;\n            }\n            else if (ascii > 96 && ascii < 123) {\n                // a lowercase\n                throw new MFError(this.mf, this.i, 'found a lowercase not following an uppercase');\n            }\n            else if (char === '(') {\n                let charge = this.getParenthesisCharge(ascii);\n                if (charge) {\n                    this.result.push({ kind: Kind_1.Kind.CHARGE, value: charge });\n                }\n                else {\n                    this.result.push({ kind: Kind_1.Kind.OPENING_PARENTHESIS, value: '(' });\n                }\n            }\n            else if (char === ')') {\n                this.result.push({ kind: Kind_1.Kind.CLOSING_PARENTHESIS, value: ')' });\n            }\n            else if (char === '[') {\n                // defines an isotope\n                let isotope = this.getIsotope(ascii);\n                this.result.push({ kind: Kind_1.Kind.ISOTOPE, value: isotope });\n            }\n            else if (char === ']') {\n                throw new MFError(this.mf, this.i, 'should never meet an closing bracket not in isotopes');\n            }\n            else if (char === '{') {\n                // can define an exotic isotopic ratio or mixtures of groups\n                let isotopeRatio = this.getCurlyBracketIsotopeRatio(ascii);\n                if (lastKind === Kind_1.Kind.ATOM) {\n                    let lastResult = this.result.at(-1);\n                    lastResult.kind = Kind_1.Kind.ISOTOPE_RATIO;\n                    lastResult.value = {\n                        atom: lastResult.value,\n                        ratio: isotopeRatio,\n                    };\n                }\n                else {\n                    throw new MFError(this.mf, this.i, 'isotopic composition has to follow an atom');\n                }\n            }\n            else if (char === '}') {\n                throw new MFError(this.mf, this.i, 'found a unexpected closing curly bracket');\n            }\n            else if (char === '+') {\n                // charge not in parenthesis\n                let charge = this.getNonParenthesisCharge(ascii);\n                this.result.push({ kind: Kind_1.Kind.CHARGE, value: charge });\n            }\n            else if (char === '-') {\n                // charge not in parenthesis\n                let charge = this.getNonParenthesisCharge(ascii);\n                this.result.push({ kind: Kind_1.Kind.CHARGE, value: charge });\n            }\n            else if (char === '$') {\n                // it is a comment after\n                this.result.push({\n                    kind: Kind_1.Kind.COMMENT,\n                    value: this.mf.slice(this.i + 1),\n                });\n                break;\n            }\n            else {\n                this.result.push({ kind: Kind_1.Kind.TEXT, value: char });\n            }\n            this.i++;\n        }\n        this.checkParenthesis();\n        if (this.simplify) {\n            this.result = simplify(this.result);\n        }\n        return this.result;\n    }\n    checkParenthesis() {\n        let counter = 0;\n        for (let line of this.result) {\n            if (line.kind === Kind_1.Kind.OPENING_PARENTHESIS)\n                counter++;\n            if (line.kind === Kind_1.Kind.CLOSING_PARENTHESIS)\n                counter--;\n        }\n        if (counter !== 0) {\n            throw new MFError(this.mf, this.i, 'number of opening and closing parenthesis not equal');\n        }\n    }\n    getNumber(ascii) {\n        let number = '';\n        let previous;\n        do {\n            previous = ascii;\n            number += String.fromCharCode(ascii);\n            this.i++;\n            ascii = this.mf.charCodeAt(this.i);\n        } while ((ascii > 47 && ascii < 58) ||\n            ascii === 46 ||\n            ascii === 45 ||\n            ascii === 47); // number . - /\n        // we need to deal with the case there is a from / to\n        if (previous === 46)\n            this.i--;\n        let indexOfDash = number.indexOf('-', 1);\n        if (indexOfDash > -1) {\n            return {\n                from: parseNumberWithDivision(number.slice(0, indexOfDash)),\n                to: parseNumberWithDivision(number.slice(indexOfDash + 1)),\n            };\n        }\n        return { from: parseNumberWithDivision(number) };\n    }\n    getAtom(ascii) {\n        let atom = '';\n        do {\n            atom += String.fromCharCode(ascii);\n            this.i++;\n            ascii = this.mf.charCodeAt(this.i);\n        } while (ascii > 96 && ascii < 123);\n        if (chemical_elements_1.elementsObject[atom] || !this.expandGroups) {\n            return [\n                {\n                    kind: Kind_1.Kind.ATOM,\n                    value: atom,\n                },\n            ];\n        }\n        if (chemical_groups_1.groupsObject[atom]) {\n            const group = chemical_groups_1.groupsObject[atom].mf;\n            const expandedGroups = parse(group, {\n                expandGroups: this.expandGroups,\n            });\n            // need to surround with parenthesis\n            return [\n                { kind: Kind_1.Kind.OPENING_PARENTHESIS, value: '(' },\n                ...expandedGroups,\n                { kind: Kind_1.Kind.CLOSING_PARENTHESIS, value: ')' },\n            ];\n        }\n        throw new MFError(`Not able to expand group: ${this.mf}`);\n    }\n    getIsotope(ascii) {\n        // [13C]\n        let substring = '';\n        do {\n            substring += String.fromCharCode(ascii);\n            this.i++;\n            ascii = this.mf.charCodeAt(this.i);\n        } while (ascii !== 93 && this.i <= this.mf.length);\n        let atom = substring.replaceAll(/[^A-Za-z]/g, '');\n        let isotope = Number(substring.replaceAll(/\\D/g, ''));\n        return { atom, isotope };\n    }\n    getCurlyBracketIsotopeRatio(ascii) {\n        let substring = '';\n        let first = true;\n        do {\n            if (!first) {\n                substring += String.fromCharCode(ascii);\n            }\n            else {\n                first = false;\n            }\n            this.i++;\n            ascii = this.mf.charCodeAt(this.i);\n        } while (ascii !== 125 && this.i <= this.mf.length); // closing curly bracket\n        if (substring.match(/^[0-9.,]+$/)) {\n            return substring.split(',').map(Number);\n        }\n        throw new MFError(this.mf, this.i, 'Curly brackets should contain only number, dot and comma');\n    }\n    getParenthesisCharge(ascii) {\n        let substring = '';\n        let begin = this.i;\n        do {\n            substring += String.fromCharCode(ascii);\n            this.i++;\n            ascii = this.mf.charCodeAt(this.i);\n        } while (ascii !== 41 && this.i <= this.mf.length); // closing parenthesis\n        if (substring.match(/^\\([\\d+-]+$/)) {\n            return (0, parseCharge_1.parseCharge)(substring.slice(1));\n        }\n        else {\n            this.i = begin;\n            return undefined;\n        }\n    }\n    getNonParenthesisCharge(ascii) {\n        let substring = '';\n        do {\n            substring += String.fromCharCode(ascii);\n            this.i++;\n            ascii = this.mf.charCodeAt(this.i);\n        } while (ascii === 43 || ascii === 45 || (ascii > 47 && ascii < 58));\n        this.i--;\n        return (0, parseCharge_1.parseCharge)(substring);\n    }\n}\nclass MFError extends SyntaxError {\n    constructor(mf, i, message) {\n        let text = `${message}\\n\\n${mf}\\n${' '.repeat(i)}^`;\n        super(text);\n    }\n}\nfunction parseNumberWithDivision(string) {\n    if (string.includes('/')) {\n        let parts = string.split('/');\n        if (parts.length !== 2) {\n            throw new TypeError('Can not parse MF with number like: ', string);\n        }\n        return Number(parts[0]) / Number(parts[1]);\n    }\n    else {\n        return Number(string);\n    }\n}\n/**\n * Remove all the parenthesis and multipliers\n * Merge atoms and groups if present many times\n * We will also sort the atoms and groups\n * @param {*} parsed\n * @returns\n */\nfunction simplify(parsed) {\n    if (!parsed || parsed.length === 0)\n        return [];\n    const multipliers = [];\n    let currentMultiplier = { from: 1, to: 1 };\n    let newParsed = [];\n    for (let i = parsed.length - 1; i >= 0; i--) {\n        const item = parsed[i];\n        switch (item.kind) {\n            case 'atom':\n            case 'isotope': {\n                let realMultiplier = currentMultiplier;\n                for (const multiplier of multipliers) {\n                    realMultiplier = {\n                        from: multiplier.from * realMultiplier.from,\n                        to: multiplier.to * realMultiplier.to,\n                    };\n                }\n                newParsed.push({\n                    kind: item.kind,\n                    value: item.value,\n                }, {\n                    kind: 'multiplierRange',\n                    value: realMultiplier,\n                });\n                currentMultiplier = { from: 1, to: 1 };\n                break;\n            }\n            case 'multiplier':\n                currentMultiplier = { from: item.value, to: item.value };\n                break;\n            case 'multiplierRange':\n                currentMultiplier = item.value;\n                break;\n            case 'openingParenthesis':\n                multipliers.pop();\n                break;\n            case 'closingParenthesis':\n                multipliers.push(currentMultiplier);\n                currentMultiplier = { from: 1, to: 1 };\n                break;\n            case 'text':\n                break;\n            default:\n                throw new Error(`Unexpected kind --${item.kind}-- in removeParenthesis`);\n        }\n    }\n    // if we have many times the same atom / group, we can merge them\n    const distinctParsedObject = {};\n    for (let i = 0; i < newParsed.length; i = i + 2) {\n        const item = newParsed[i];\n        const multiplier = newParsed[i + 1];\n        const key = JSON.stringify(item.value);\n        if (!distinctParsedObject[key]) {\n            distinctParsedObject[key] = {\n                ...item,\n                multiplier: multiplier.value,\n            };\n        }\n        else {\n            distinctParsedObject[key].multiplier.from += multiplier.value.from;\n            distinctParsedObject[key].multiplier.to += multiplier.value.to;\n        }\n    }\n    const sorted = Object.values(distinctParsedObject).toSorted((a, b) => {\n        const atomA = a.kind === 'atom' ? a.value : a.value.atom;\n        const atomB = b.kind === 'atom' ? b.value : b.value.atom;\n        if (atomA === atomB) {\n            if (a.kind === 'isotope' && b.kind === 'isotope') {\n                return a.value.isotope - b.value.isotope;\n            }\n            if (a.kind === 'isotope' && b.kind !== 'isotope') {\n                return -1; // isotope comes before non-isotope\n            }\n            if (a.kind !== 'isotope' && b.kind === 'isotope') {\n                return 1; // non-isotope comes after isotope\n            }\n            return 0;\n        }\n        return (0, atom_sorter_1.atomSorter)(atomA, atomB);\n    });\n    const distinctParsed = [];\n    for (const item of sorted) {\n        if (item.multiplier.from === 0 && item.multiplier.to === 0) {\n            continue;\n        }\n        distinctParsed.push({\n            kind: item.kind,\n            value: item.value,\n        });\n        if (item.multiplier.from === 1 && item.multiplier.to === 1) {\n            continue; // no need to add a multiplier\n        }\n        if (item.multiplier.from === item.multiplier.to) {\n            distinctParsed.push({\n                kind: 'multiplier',\n                value: item.multiplier.from,\n            });\n        }\n        else {\n            distinctParsed.push({\n                kind: 'multiplierRange',\n                value: {\n                    from: item.multiplier.from,\n                    to: item.multiplier.to,\n                },\n            });\n        }\n    }\n    return distinctParsed;\n}\n//# sourceMappingURL=parse.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.subscript = exports.superscript = void 0;\nexports.superscript = {\n    0: '⁰',\n    1: '¹',\n    2: '²',\n    3: '³',\n    4: '⁴',\n    5: '⁵',\n    6: '⁶',\n    7: '⁷',\n    8: '⁸',\n    9: '⁹',\n    '+': '⁺',\n    '-': '⁻',\n    '(': '⁽',\n    ')': '⁾',\n    '{': '⁽',\n    '}': '⁾',\n    '.': '˙',\n    ',': '˒',\n};\nexports.subscript = {\n    0: '₀',\n    1: '₁',\n    2: '₂',\n    3: '₃',\n    4: '₄',\n    5: '₅',\n    6: '₆',\n    7: '₇',\n    8: '₈',\n    9: '₉',\n    '(': '₍',\n    ')': '₎',\n    '{': '₍',\n    '}': '₎',\n    '.': ' ',\n    ',': ' ',\n};\n//# sourceMappingURL=subSuperscript.js.map","\"use strict\";\n/**\n * Defines static variables corresponding to the various formatting possibilities\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Format = void 0;\nexports.Format = {\n    SUBSCRIPT: 'subscript',\n    SUPERSCRIPT: 'superscript',\n    SUPERIMPOSE: 'superimpose',\n    TEXT: 'text',\n};\n//# sourceMappingURL=Format.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.formatCharge = formatCharge;\nfunction formatCharge(charge) {\n    if (charge === 1)\n        return '+';\n    if (charge > 1)\n        return `+${charge}`;\n    if (charge < 0)\n        return String(charge);\n    return '';\n}\n//# sourceMappingURL=formatCharge.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.improveLinesForDisplay = improveLinesForDisplay;\nconst Kind_js_1 = require(\"../Kind.js\");\n/**\n * We try to remove useless lines that are not needed for the display and could be confusing\n * for the user\n * @param {object[]} lines\n */\nfunction improveLinesForDisplay(lines) {\n    lines = lines.slice(0);\n    // multipliers by one seems completely useless\n    lines = lines.filter((line) => !(line.kind === Kind_js_1.Kind.MULTIPLIER && line.value === 1));\n    // global surrouding useless parenthesis\n    // (C) -> C, (CH2) -> CH2, ((CH2)) -> CH2, ((CH2)2) -> (CH2)2, (C(CH2)2) -> C(CH2)2\n    // need to count the number of opening parenthesis\n    // and check the minimum number of parenthesis we find\n    let beginCounter = 0;\n    let endCounter = 0;\n    let minCounter = Number.MAX_SAFE_INTEGER;\n    let counter = 0;\n    let begin = true;\n    for (let line of lines) {\n        switch (line.kind) {\n            case Kind_js_1.Kind.OPENING_PARENTHESIS:\n                if (begin) {\n                    beginCounter++;\n                }\n                counter++;\n                break;\n            case Kind_js_1.Kind.CLOSING_PARENTHESIS:\n                endCounter++;\n                counter--;\n                break;\n            case Kind_js_1.Kind.CHARGE: // seems to me we can still remove parenthesis even if we have some charges\n                break;\n            default:\n                if (counter < minCounter)\n                    minCounter = counter;\n                endCounter = 0;\n                begin = false;\n        }\n    }\n    let nbParenthesisToSuppress = Math.min(minCounter, beginCounter, endCounter);\n    if (nbParenthesisToSuppress > 0) {\n        // need to remove from the beginning and from the end the number of parenthesis\n        // knowing some of the lines could be charges\n        let toSuppress = nbParenthesisToSuppress;\n        let i = 0;\n        while (toSuppress > 0) {\n            if (lines[0].kind === Kind_js_1.Kind.OPENING_PARENTHESIS) {\n                lines.splice(i, 1);\n                toSuppress--;\n            }\n            else {\n                i++;\n            }\n        }\n        toSuppress = nbParenthesisToSuppress;\n        i = lines.length - 1;\n        while (toSuppress > 0) {\n            if (lines[i].kind === Kind_js_1.Kind.CLOSING_PARENTHESIS) {\n                toSuppress--;\n                lines.splice(i, 1);\n            }\n            i--;\n        }\n    }\n    return lines;\n}\n//# sourceMappingURL=improveLinesForDisplay.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.toDisplay = toDisplay;\nconst Format_1 = require(\"../Format\");\nconst Kind_1 = require(\"../Kind\");\nconst formatCharge_js_1 = require(\"./formatCharge.js\");\nconst improveLinesForDisplay_js_1 = require(\"./improveLinesForDisplay.js\");\n/**\n * Converts an array of mf elements to an array of formatting information\n * @param {object[]} lines of the parse method\n * @returns {{kind: string, value: string}[]}\n */\nfunction toDisplay(lines) {\n    lines = (0, improveLinesForDisplay_js_1.improveLinesForDisplay)(lines);\n    const special = specialCases(lines);\n    if (special)\n        return special;\n    let results = [];\n    let result = {};\n    for (let line of lines) {\n        switch (line.kind) {\n            case Kind_1.Kind.MULTIPLIER:\n                if (line.value !== 1) {\n                    result = {\n                        kind: Format_1.Format.SUBSCRIPT,\n                        value: String(line.value),\n                    };\n                    results.push(result);\n                }\n                break;\n            case Kind_1.Kind.MULTIPLIER_RANGE:\n                result = {\n                    kind: Format_1.Format.SUBSCRIPT,\n                    value: `${String(line.value.from)}-${line.value.to}`,\n                };\n                results.push(result);\n                break;\n            case Kind_1.Kind.CHARGE:\n                if (result.kind === Format_1.Format.SUBSCRIPT) {\n                    result.kind = Format_1.Format.SUPERIMPOSE;\n                    result.over = (0, formatCharge_js_1.formatCharge)(line.value);\n                    result.under = result.value;\n                    result.value = undefined;\n                }\n                else {\n                    result = {\n                        kind: Format_1.Format.SUPERSCRIPT,\n                        value: (0, formatCharge_js_1.formatCharge)(line.value),\n                    };\n                    results.push(result);\n                }\n                break;\n            case Kind_1.Kind.ISOTOPE:\n                result = {\n                    kind: Format_1.Format.SUPERSCRIPT,\n                    value: line.value.isotope,\n                };\n                results.push(result);\n                result = {\n                    kind: Format_1.Format.TEXT,\n                    value: line.value.atom,\n                };\n                results.push(result);\n                break;\n            case Kind_1.Kind.ISOTOPE_RATIO:\n                if (result.kind === Format_1.Format.TEXT) {\n                    result.value += line.value.atom;\n                }\n                else {\n                    result = {\n                        kind: Format_1.Format.TEXT,\n                        value: line.value.atom,\n                    };\n                    results.push(result);\n                }\n                result = {\n                    kind: Format_1.Format.SUPERSCRIPT,\n                    value: `{${line.value.ratio.join(',')}}`,\n                };\n                results.push(result);\n                break;\n            case Kind_1.Kind.SALT:\n                if (result.kind === Format_1.Format.TEXT) {\n                    result.value += ' • ';\n                }\n                else {\n                    result = {\n                        kind: Format_1.Format.TEXT,\n                        value: ' • ',\n                    };\n                    results.push(result);\n                }\n                break;\n            default:\n                if (result.kind === Format_1.Format.TEXT) {\n                    result.value += line.value;\n                }\n                else {\n                    result = {\n                        kind: Format_1.Format.TEXT,\n                        value: line.value,\n                    };\n                    results.push(result);\n                }\n        }\n    }\n    return results;\n}\n/**\n * Some special changes for specific cases\n * @param {} lines\n */\nfunction specialCases(lines) {\n    // (-)\n    if (lines.length === 1 && lines[0].kind === Kind_1.Kind.CHARGE) {\n        const charge = lines[0].value;\n        if (charge === 0)\n            return [];\n        if (charge === 1) {\n            return [\n                { kind: Format_1.Format.TEXT, value: '-e' },\n                { kind: Format_1.Format.SUPERSCRIPT, value: '-' },\n            ];\n        }\n        if (charge === -1) {\n            return [\n                { kind: Format_1.Format.TEXT, value: '+e' },\n                { kind: Format_1.Format.SUPERSCRIPT, value: '-' },\n            ];\n        }\n        if (charge > 1) {\n            return [\n                { kind: Format_1.Format.TEXT, value: `-${charge}e` },\n                { kind: Format_1.Format.SUPERSCRIPT, value: '-' },\n            ];\n        }\n        if (charge < -1) {\n            return [\n                { kind: Format_1.Format.TEXT, value: `+${-charge}e` },\n                { kind: Format_1.Format.SUPERSCRIPT, value: '-' },\n            ];\n        }\n    }\n    // (-)2, (-)-1, (+)2, (+)-1, (2+)2, (2+)-1, (2-)+1, (2-)-1\n    if (lines.length === 2 &&\n        lines[0].kind === Kind_1.Kind.CHARGE &&\n        lines[1].kind === Kind_1.Kind.MULTIPLIER) {\n        const charge = lines[0].value;\n        const nbElectrons = -lines[1].value * charge;\n        const results = [];\n        if (nbElectrons === 0)\n            return [];\n        if (nbElectrons === 1) {\n            results.push({ kind: Format_1.Format.TEXT, value: '+e' });\n        }\n        if (nbElectrons === -1) {\n            results.push({ kind: Format_1.Format.TEXT, value: '-e' });\n        }\n        if (nbElectrons > 1) {\n            results.push({ kind: Format_1.Format.TEXT, value: `+${nbElectrons}e` });\n        }\n        if (nbElectrons < -1) {\n            results.push({ kind: Format_1.Format.TEXT, value: `${nbElectrons}e` });\n        }\n        results.push({ kind: Format_1.Format.SUPERSCRIPT, value: '-' });\n        return results;\n    }\n    return undefined;\n}\n//# sourceMappingURL=toDisplay.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isMF = isMF;\nconst chemical_elements_1 = require(\"chemical-elements\");\nconst chemical_groups_1 = require(\"chemical-groups\");\nfunction isMF(mf) {\n    let tmpMF = mf.replaceAll(/[^A-Za-z]/g, '');\n    let parts = tmpMF.replaceAll(/([A-Za-z])(?=[A-Z])/g, '$1 ').split(' ');\n    for (let i = 0; i < parts.length; i++) {\n        if (!chemical_elements_1.elementsObject[parts[i]] && !chemical_groups_1.groupsObject[parts[i]]) {\n            return false;\n        }\n    }\n    return true;\n}\n//# sourceMappingURL=isMF.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Style = void 0;\nexports.Style = {\n    SUPERIMPOSE: 'flex-direction: column;display: inline-flex;justify-content: center;text-align: left;vertical-align: middle;',\n    SUPERIMPOSE_SUP_SUB: 'line-height: 1; font-size: 70%',\n};\n//# sourceMappingURL=Style.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.toHtml = toHtml;\nconst Format_1 = require(\"../Format\");\nconst Style_1 = require(\"../Style\");\nfunction toHtml(lines) {\n    let html = [];\n    for (let line of lines) {\n        switch (line.kind) {\n            case Format_1.Format.SUBSCRIPT:\n                html.push(`<sub>${line.value}</sub>`);\n                break;\n            case Format_1.Format.SUPERSCRIPT:\n                html.push(`<sup>${line.value}</sup>`);\n                break;\n            case Format_1.Format.SUPERIMPOSE:\n                html.push(`<span style=\"${Style_1.Style.SUPERIMPOSE}\">`, `<sup style=\"${Style_1.Style.SUPERIMPOSE_SUP_SUB}\">${line.over}</sup>`, `<sub style=\"${Style_1.Style.SUPERIMPOSE_SUP_SUB}\">${line.under}</sub>`, '</span>');\n                break;\n            default:\n                html.push(line.value);\n        }\n    }\n    return html.join('');\n}\n//# sourceMappingURL=toHtml.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ensureCase = ensureCase;\nconst chemical_elements_1 = require(\"chemical-elements\");\nconst elements = new Set(Object.keys(chemical_elements_1.elementsObject).toSorted((a, b) => b.length - a.length));\n/**\n * Ensure that the mf has been entered with capital letters and not only lowercase\n * If there is only lowercase we try to capitalize the mf\n * @param {string} mf\n */\nfunction ensureCase(mf) {\n    for (let i = 0; i < mf.length; i++) {\n        // eslint-disable-next-line unicorn/prefer-code-point\n        if (mf.charCodeAt(i) > 64 && mf.charCodeAt(i) < 91) {\n            return mf;\n        }\n    }\n    let parts = mf.replaceAll(/([a-z]*)([^a-z]*)/g, '$1 $2 ').split(/ +/);\n    for (let i = 0; i < parts.length; i++) {\n        if (parts[i].match(/^[a-z]$/)) {\n            parts[i] = parts[i].toUpperCase();\n        }\n        else if (parts[i].match(/^[a-z]+$/)) {\n            let newPart = '';\n            for (let j = 0; j < parts[i].length; j++) {\n                let two = parts[i].slice(j, j + 2);\n                let one = parts[i].charAt(j).toUpperCase();\n                if (['c', 'h', 'o', 'n'].includes(two.charAt(0)) &&\n                    ['h', 'o', 'n'].includes(two.charAt(1))) {\n                    newPart += two.toUpperCase();\n                    j++;\n                }\n                else {\n                    two = two.charAt(0).toUpperCase() + two.charAt(1);\n                    if (elements.has(two)) {\n                        newPart += two;\n                        j++;\n                    }\n                    else if (elements.has(one)) {\n                        newPart += one;\n                    }\n                    else {\n                        return mf;\n                    }\n                }\n            }\n            parts[i] = newPart;\n        }\n    }\n    return parts.join('');\n}\n//# sourceMappingURL=ensureCase.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.flatten = flatten;\n/**\n * This method will generate all possible molecular formulas\n * from ranges.\n * It should rather be called expand because it expands all the ranges\n * @param parsed\n * @param options\n * @return {string[]}\n */\nfunction flatten(parsed, options = {}) {\n    const { groupIdentical = false, limit = 100000 } = options;\n    if (parsed.length === 0)\n        return [''];\n    let parts = [];\n    let parenthesisLevel = 0;\n    let currentPart;\n    let comments = [];\n    for (const entry of parsed) {\n        if ((entry.kind === 'atom' ||\n            entry.kind === 'charge' ||\n            entry.kind === 'isotope' ||\n            entry.kind === 'openingParenthesis' ||\n            !currentPart) &&\n            parenthesisLevel === 0) {\n            currentPart = {\n                mf: '',\n                min: 1,\n                max: 1,\n            };\n            parts.push(currentPart);\n        }\n        switch (entry.kind) {\n            case 'atom':\n                currentPart.mf += entry.value;\n                break;\n            case 'isotope':\n                currentPart.mf += `[${entry.value.isotope}${entry.value.atom}]`;\n                break;\n            case 'multiplier':\n                currentPart.mf += entry.value;\n                break;\n            case 'multiplierRange':\n                if (parenthesisLevel !== 0) {\n                    throw new Error('Range definition inside parenthesis is not allowed.');\n                }\n                currentPart.min = entry.value.from;\n                currentPart.max = entry.value.to;\n                break;\n            case 'openingParenthesis':\n                parenthesisLevel++;\n                currentPart.mf += entry.value;\n                break;\n            case 'charge':\n                if (entry.value === 1) {\n                    currentPart.mf += '+';\n                }\n                else if (entry.value > 1) {\n                    currentPart.mf += `(+${entry.value})`;\n                }\n                else if (entry.value < 0) {\n                    currentPart.mf += `(${entry.value})`;\n                }\n                break;\n            case 'closingParenthesis':\n                parenthesisLevel--;\n                currentPart.mf += entry.value;\n                break;\n            case 'comment':\n                comments.push(entry.value);\n                break;\n            case 'text':\n                break;\n            default:\n                throw new Error(`Could not flatten the parsed MF. Unknown kind: ${entry.kind}`);\n        }\n    }\n    if (groupIdentical) {\n        parts = optimizeRanges(parts);\n    }\n    const mfs = createMFs(parts, comments.join(' '), limit);\n    return mfs;\n}\n/**\n * If we have many times the same mf we can combine them\n * This should only be applied if there are acutaly some ranges\n */\nfunction optimizeRanges(parts) {\n    let newParts = [];\n    let mfsObject = {};\n    let hasRange = false;\n    for (const mf of parts) {\n        if (mf.min !== mf.max) {\n            hasRange = true;\n            break;\n        }\n    }\n    if (!hasRange)\n        return parts;\n    for (const mf of parts) {\n        if (!mfsObject[mf.mf]) {\n            mfsObject[mf.mf] = {\n                mf: mf.mf,\n                min: mf.min,\n                max: mf.max,\n            };\n            newParts.push(mfsObject[mf.mf]);\n        }\n        else {\n            mfsObject[mf.mf].min = mfsObject[mf.mf].min + mf.min;\n            mfsObject[mf.mf].max = mfsObject[mf.mf].max + mf.max;\n        }\n    }\n    return newParts;\n}\nfunction createMFs(parts, comment, limit) {\n    const currents = new Array(parts.length);\n    for (let i = 0; i < currents.length; i++) {\n        currents[i] = parts[i].min;\n    }\n    /** @type {string[]} */\n    const mfs = [];\n    let position = 0;\n    while (position < currents.length) {\n        if (currents[position] < parts[position].max) {\n            mfs.push(getMF(parts, currents, comment));\n            currents[position]++;\n            for (let i = 0; i < position; i++) {\n                currents[i] = parts[i].min;\n            }\n            position = 0;\n        }\n        else {\n            position++;\n        }\n        if (mfs.length >= limit) {\n            throw new Error(`MF.flatten generates too many fragments (over ${limit})`);\n        }\n    }\n    mfs.push(getMF(parts, currents, comment));\n    return mfs;\n}\nfunction getMF(parts, currents, comment) {\n    let mf = '';\n    for (let i = 0; i < parts.length; i++) {\n        if (currents[i] === 0) {\n            continue;\n        }\n        mf += parts[i].mf;\n        if (currents[i] !== 1) {\n            mf += currents[i];\n        }\n    }\n    if (comment)\n        mf += `$${comment}`;\n    return mf;\n}\n//# sourceMappingURL=flatten.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getIsotopeRatioInfo = getIsotopeRatioInfo;\nconst chemical_elements_1 = require(\"chemical-elements\");\nfunction getIsotopeRatioInfo(value) {\n    let result = { mass: 0, monoisotopicMass: 0 };\n    let element = chemical_elements_1.elementsAndStableIsotopesObject[value.atom];\n    if (!element)\n        throw new Error(`Element not found: ${value.atom}`);\n    let isotopesArray = element.isotopes;\n    let ratios = normalize(value.ratio);\n    let max = Math.max(...ratios);\n    if (ratios.length > isotopesArray.length) {\n        throw new Error(`the number of specified ratios is bigger that the number of stable isotopes: ${value.atom}`);\n    }\n    for (let i = 0; i < ratios.length; i++) {\n        result.mass += ratios[i] * isotopesArray[i].mass;\n        if (max === ratios[i] && result.monoisotopicMass === 0) {\n            result.monoisotopicMass = isotopesArray[i].mass;\n        }\n    }\n    return result;\n}\nfunction normalize(array) {\n    let sum = array.reduce((prev, current) => prev + current, 0);\n    return array.map((a) => a / sum);\n}\n//# sourceMappingURL=getIsotopeRatioInfo.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getEA = getEA;\nconst chemical_elements_1 = require(\"chemical-elements\");\nconst chemical_groups_1 = require(\"chemical-groups\");\nconst Kind_1 = require(\"../Kind\");\nconst getIsotopeRatioInfo_1 = require(\"./getIsotopeRatioInfo\");\n/**\n * @param {*} parts\n */\nfunction getEA(parts) {\n    let results = {};\n    for (let part of parts) {\n        for (let line of part) {\n            switch (line.kind) {\n                case Kind_1.Kind.ISOTOPE: {\n                    let isotope = chemical_elements_1.isotopesObject[line.value.isotope + line.value.atom];\n                    if (!isotope) {\n                        throw new Error(`Unknown isotope: ${line.value.isotope}${line.value.atom}`);\n                    }\n                    addMass(results, line.value.atom, isotope.mass * line.multiplier);\n                    break;\n                }\n                case Kind_1.Kind.ISOTOPE_RATIO: {\n                    let isotopeRatioInfo = (0, getIsotopeRatioInfo_1.getIsotopeRatioInfo)(line.value);\n                    addMass(results, line.value.atom, isotopeRatioInfo.mass * line.multiplier);\n                    break;\n                }\n                case Kind_1.Kind.ATOM: {\n                    let element = chemical_elements_1.elementsObject[line.value];\n                    if (!element) {\n                        element = chemical_groups_1.groupsObject[line.value];\n                        if (!element)\n                            throw new Error(`Unknown element: ${line.value}`);\n                        // need to explode group ????\n                    }\n                    addMass(results, line.value, element.mass * line.multiplier);\n                    break;\n                }\n                case Kind_1.Kind.CHARGE:\n                    break;\n                default:\n                    throw new Error('partToMF unhandled Kind: ', line.kind);\n            }\n        }\n    }\n    let eas = [];\n    let sum = 0;\n    for (let key in results) {\n        sum += results[key];\n        eas.push({\n            element: key,\n            mass: results[key],\n        });\n    }\n    for (const ea of eas) {\n        ea.ratio = ea.mass / sum;\n    }\n    return eas;\n}\nfunction addMass(results, atom, mass) {\n    if (!results[atom])\n        results[atom] = 0;\n    results[atom] += mass;\n}\n//# sourceMappingURL=getEA.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getElements = getElements;\nconst chemical_elements_1 = require(\"chemical-elements\");\nconst Kind_1 = require(\"../Kind\");\n/**\n * @param {*} parts\n */\nfunction getElements(parts) {\n    const elements = [];\n    for (const part of parts) {\n        for (const line of part) {\n            let number = line.multiplier;\n            switch (line.kind) {\n                case Kind_1.Kind.ATOM: {\n                    let symbol = line.value;\n                    let element = chemical_elements_1.elementsObject[symbol];\n                    if (!element) {\n                        throw new Error(`element unknown: ${symbol} - ${line}`);\n                    }\n                    addElement(elements, { symbol, number });\n                    break;\n                }\n                case Kind_1.Kind.ISOTOPE: {\n                    let element = chemical_elements_1.elementsAndIsotopesObject[line.value.atom];\n                    if (!element) {\n                        throw new Error(`element unknown: ${part.value.atom} - ${line}`);\n                    }\n                    let isotope = element.isotopes.find((a) => a.nominal === line.value.isotope);\n                    if (!isotope) {\n                        throw new Error(`isotope unknown: ${line.value.isotope} - ${line}`);\n                    }\n                    addElement(elements, {\n                        symbol: line.value.atom,\n                        number,\n                        isotope: line.value.isotope,\n                    });\n                    break;\n                }\n                default:\n                    throw new Error(`unknown type: ${line.kind}`);\n            }\n        }\n    }\n    return elements;\n}\nfunction addElement(elements, newElement) {\n    for (let element of elements) {\n        if (element.symbol === newElement.symbol &&\n            element.isotope === newElement.isotope) {\n            element.number += newElement.number;\n            return;\n        }\n    }\n    elements.push(newElement);\n}\n//# sourceMappingURL=getElements.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getNumberOfIsotopologues = getNumberOfIsotopologues;\nconst chemical_elements_1 = require(\"chemical-elements\");\n/**\n * Returns the theoretical number of isotopologues for a given MF based on stable isotopes for each element.\n * This method will not take into account possible non natural isotopic composition (e.g. 13C enrichment)\n * If one element does not have any stable isotope, the result will be 0.\n * @param atoms\n * @returns\n */\nfunction getNumberOfIsotopologues(atoms) {\n    if (Object.keys(atoms).length === 0) {\n        return 0;\n    }\n    let result = 1;\n    for (const atom in atoms) {\n        const nbIsotopes = chemical_elements_1.elementsAndStableIsotopesObject[atom]?.isotopes.length;\n        if (!nbIsotopes) {\n            return 0;\n        }\n        const nbAtoms = atoms[atom];\n        result *= getNbCombinationsPerAtom(nbAtoms, nbIsotopes);\n    }\n    return result;\n}\n/**\n * Returns the number of isotopologues for one specific atom\n *\n * @param nbAtoms\n * @param nbIsotopes\n * @returns\n */\nfunction getNbCombinationsPerAtom(nbAtoms, nbIsotopes) {\n    let result = 1;\n    for (let i = nbAtoms + 1; i < nbAtoms + nbIsotopes; i++) {\n        result *= i;\n    }\n    for (let i = 2; i < nbIsotopes; i++) {\n        result /= i;\n    }\n    return result;\n}\n//# sourceMappingURL=getNumberOfIsotopologues.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.partToAtoms = partToAtoms;\nconst Kind_js_1 = require(\"../Kind.js\");\n/** @typedef {import('./partToAtoms.types').AtomsMap} AtomsMap */\n/**\n * Convert a MF part to a map of atoms\n * This procedure will suppress the isotopes !\n * This is mainly used to make queries\n * @returns {AtomsMap}\n */\nfunction partToAtoms(part) {\n    /** @type {AtomsMap} */\n    const atoms = {};\n    for (let line of part) {\n        switch (line.kind) {\n            case Kind_js_1.Kind.ISOTOPE:\n                if (!atoms[line.value.atom])\n                    atoms[line.value.atom] = 0;\n                atoms[line.value.atom] += line.multiplier;\n                break;\n            case Kind_js_1.Kind.ISOTOPE_RATIO:\n                if (!atoms[line.value.atom])\n                    atoms[line.value.atom] = 0;\n                atoms[line.value.atom] += line.multiplier;\n                break;\n            case Kind_js_1.Kind.ATOM:\n                if (!atoms[line.value])\n                    atoms[line.value] = 0;\n                atoms[line.value] += line.multiplier;\n                break;\n            case Kind_js_1.Kind.CHARGE:\n                break;\n            case Kind_js_1.Kind.ANCHOR:\n                break;\n            default:\n                throw new Error('partToMF unhandled Kind: ', line.kind);\n        }\n    }\n    return atoms;\n}\n//# sourceMappingURL=partToAtoms.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.partToMF = partToMF;\nconst Kind_1 = require(\"../Kind\");\nfunction partToMF(part, options = {}) {\n    let mf = [];\n    for (let line of part) {\n        switch (line.kind) {\n            case Kind_1.Kind.ISOTOPE:\n                if (line.multiplier !== 0) {\n                    mf.push(`[${line.value.isotope}${line.value.atom}]${line.multiplier !== 1 ? line.multiplier : ''}`);\n                }\n                break;\n            case Kind_1.Kind.ISOTOPE_RATIO:\n                if (line.multiplier !== 0) {\n                    mf.push(`${line.value.atom}{${line.value.ratio.join(',')}}${line.multiplier !== 1 ? line.multiplier : ''}`);\n                }\n                break;\n            case Kind_1.Kind.ATOM:\n                if (line.multiplier !== 0) {\n                    mf.push(line.value + (line.multiplier !== 1 ? line.multiplier : ''));\n                }\n                break;\n            case Kind_1.Kind.CHARGE:\n                if (line.value === 0 || options.neutral)\n                    break;\n                mf.push(`(${line.value > 0 ? `+${line.value}` : line.value})`);\n                break;\n            default:\n        }\n    }\n    return mf.join('');\n}\n//# sourceMappingURL=partToMF.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getInfoInternal = getInfoInternal;\nconst chemical_elements_1 = require(\"chemical-elements\");\nconst chemical_groups_1 = require(\"chemical-groups\");\nconst Kind_1 = require(\"../Kind\");\nconst getIsotopeRatioInfo_1 = require(\"./getIsotopeRatioInfo\");\nconst getNumberOfIsotopologues_1 = require(\"./getNumberOfIsotopologues\");\nconst partToAtoms_1 = require(\"./partToAtoms\");\nconst partToMF_1 = require(\"./partToMF\");\n/** @typedef {import('./getInfo.types').MFInfo} MFInfo */\n/** @typedef {import('./getInfo.types').MFInfoWithParts} MFInfoWithParts */\n/**\n *\n * @param {*} parts\n * @param {*} [options={}]\n * @returns {object|MFInfo|MFInfoWithParts}\n */\nfunction getInfoInternal(parts, options = {}) {\n    let { customUnsaturations = {}, emFieldName = 'monoisotopicMass', msemFieldName = 'observedMonoisotopicMass', } = options;\n    if (parts.length === 0)\n        return {};\n    if (parts.length === 1) {\n        let oneResult = getProcessedPart(parts[0], {\n            customUnsaturations,\n            emFieldName,\n            msemFieldName,\n        });\n        oneResult.nbIsotopologues = (0, getNumberOfIsotopologues_1.getNumberOfIsotopologues)(oneResult.atoms);\n        return oneResult;\n    }\n    let result = { parts: [] };\n    for (let part of parts) {\n        result.parts.push(getProcessedPart(part, {\n            customUnsaturations,\n            emFieldName,\n            msemFieldName,\n        }));\n    }\n    result[emFieldName] = 0;\n    result.mass = 0;\n    result.charge = 0;\n    result.unsaturation = 0;\n    result.atoms = {};\n    result.mf = result.parts.map((a) => a.mf).join('.');\n    for (const part of result.parts) {\n        result.mass += part.mass;\n        result[emFieldName] += part[emFieldName];\n        result.charge += part.charge;\n        result.unsaturation += part.unsaturation;\n        for (const atom in part.atoms) {\n            if (!result.atoms[atom]) {\n                result.atoms[atom] = 0;\n            }\n            result.atoms[atom] += part.atoms[atom];\n        }\n    }\n    result.nbIsotopologues = (0, getNumberOfIsotopologues_1.getNumberOfIsotopologues)(result.atoms);\n    return result;\n}\nfunction getProcessedPart(part, options) {\n    let { customUnsaturations, emFieldName, msemFieldName } = options;\n    /** @type {MFInfo} */\n    let currentPart = {\n        mass: 0,\n        charge: 0,\n        mf: '',\n        atoms: (0, partToAtoms_1.partToAtoms)(part),\n        [emFieldName]: 0,\n    };\n    let unsaturation = 0;\n    let validUnsaturation = true;\n    currentPart.mf = (0, partToMF_1.partToMF)(part);\n    for (let line of part) {\n        let currentElement = '';\n        switch (line.kind) {\n            case Kind_1.Kind.ATOM: {\n                currentElement = line.value;\n                let element = chemical_elements_1.elementsAndIsotopesObject[line.value];\n                // todo should we have a kind GROUP ?\n                if (!element) {\n                    element = chemical_groups_1.groupsObject[line.value];\n                    if (!element)\n                        throw new Error(`Unknown element: ${line.value}`);\n                    if (!customUnsaturations[line.value]) {\n                        customUnsaturations[line.value] = element.unsaturation;\n                    }\n                }\n                if (!element)\n                    throw new Error(`Unknown element: ${line.value}`);\n                currentPart[emFieldName] += element.monoisotopicMass * line.multiplier;\n                currentPart.mass += element.mass * line.multiplier;\n                break;\n            }\n            case Kind_1.Kind.ISOTOPE: {\n                currentElement = line.value.atom;\n                let isotope = chemical_elements_1.isotopesObject[line.value.isotope + line.value.atom];\n                if (!isotope) {\n                    throw new Error(`Unknown isotope: ${line.value.isotope}${line.value.atom}`);\n                }\n                currentPart[emFieldName] += isotope.mass * line.multiplier;\n                currentPart.mass += isotope.mass * line.multiplier;\n                break;\n            }\n            case Kind_1.Kind.ISOTOPE_RATIO: {\n                currentElement = line.value.atom;\n                let isotopeRatioInfo = (0, getIsotopeRatioInfo_1.getIsotopeRatioInfo)(line.value);\n                currentPart[emFieldName] +=\n                    isotopeRatioInfo[emFieldName] * line.multiplier;\n                currentPart.mass += isotopeRatioInfo.mass * line.multiplier;\n                break;\n            }\n            case Kind_1.Kind.CHARGE:\n                currentPart.charge = line.value;\n                if (validUnsaturation) {\n                    unsaturation -= line.value;\n                }\n                break;\n            default:\n                throw new Error('Unimplemented Kind in getInfo', line.kind);\n        }\n        if (currentElement) {\n            if (customUnsaturations[currentElement] !== undefined) {\n                unsaturation += customUnsaturations[currentElement] * line.multiplier;\n            }\n            else if (chemical_elements_1.unsaturationsObject[currentElement] !== undefined) {\n                unsaturation += chemical_elements_1.unsaturationsObject[currentElement] * line.multiplier;\n            }\n            else {\n                validUnsaturation = false;\n            }\n        }\n    }\n    // need to calculate the observedMonoisotopicMass\n    if (currentPart.charge) {\n        currentPart[msemFieldName] =\n            (currentPart[emFieldName] - currentPart.charge * chemical_elements_1.ELECTRON_MASS) /\n                Math.abs(currentPart.charge);\n    }\n    if (validUnsaturation) {\n        currentPart.unsaturation = unsaturation / 2 + 1;\n    }\n    return currentPart;\n}\n//# sourceMappingURL=getInfoInternal.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getIsotopesInfo = getIsotopesInfo;\nconst chemical_elements_1 = require(\"chemical-elements\");\nconst Kind_1 = require(\"../Kind\");\n/** @typedef {import('./getIsotopesInfo.types').IsotopesInfo} IsotopesInfo\n\n/**\n *\n * @param {*} parts\n * @returns {[]|IsotopesInfo}\n */\nfunction getIsotopesInfo(parts) {\n    if (parts.length === 0)\n        return [];\n    if (parts.length > 1) {\n        throw new Error('getIsotopesInfo can not be applied on multipart MF');\n    }\n    return getProcessedPart(parts[0]);\n}\n/**\n * @returns {IsotopesInfo}\n */\nfunction getProcessedPart(part) {\n    /** @type {IsotopesInfo} */\n    let result = {\n        charge: 0,\n        isotopes: [],\n    };\n    for (let line of part) {\n        switch (line.kind) {\n            case Kind_1.Kind.ISOTOPE: {\n                let isotopeKey = line.value.isotope + line.value.atom;\n                let isotope = chemical_elements_1.isotopesObject[isotopeKey];\n                if (!isotope) {\n                    throw new Error('unknown isotope:', line.value.atom, line.value.isotope);\n                }\n                result.isotopes.push({\n                    atom: line.value.atom,\n                    number: line.multiplier,\n                    distribution: [{ x: isotope.mass, y: 1 }],\n                    naturalDeltaNeutrons: chemical_elements_1.stableIsotopesObject[isotopeKey]?.deltaNeutrons ?? 0,\n                });\n                break;\n            }\n            case Kind_1.Kind.ISOTOPE_RATIO: {\n                let element = chemical_elements_1.elementsAndStableIsotopesObject[line.value.atom];\n                if (!element)\n                    throw new Error('unknown element:', line.value);\n                let distribution = getDistribution(element.isotopes, line.value.ratio);\n                let maxIndex = 0;\n                for (let i = 1; i < distribution.length; i++) {\n                    if (distribution[i].y > distribution[maxIndex].y) {\n                        maxIndex = i;\n                    }\n                }\n                let mostAbundantKey = Math.round(distribution[maxIndex].x) + line.value.atom;\n                result.isotopes.push({\n                    atom: line.value.atom,\n                    number: line.multiplier,\n                    distribution,\n                    naturalDeltaNeutrons: chemical_elements_1.stableIsotopesObject[mostAbundantKey]?.deltaNeutrons ?? 0,\n                });\n                break;\n            }\n            case Kind_1.Kind.ATOM: {\n                let element = chemical_elements_1.elementsAndStableIsotopesObject[line.value];\n                if (!element)\n                    throw new Error('unknown element:', line.value);\n                result.isotopes.push({\n                    atom: line.value,\n                    number: line.multiplier,\n                    distribution: element.isotopes.map((e) => ({\n                        x: e.mass,\n                        y: e.abundance,\n                    })),\n                    naturalDeltaNeutrons: 0,\n                });\n                break;\n            }\n            case Kind_1.Kind.CHARGE:\n                result.charge += line.value;\n                break;\n            default:\n                throw new Error('partToMF unhandled Kind: ', line.kind);\n        }\n    }\n    return result;\n}\nfunction getDistribution(isotopesArray, ratio) {\n    let ratios = normalize(ratio);\n    let result = [];\n    if (ratios.length > isotopesArray.length) {\n        throw new Error(`the number of specified ratios is bigger that the number of stable isotopes: ${chemical_elements_1.isotopesObject}`);\n    }\n    for (let i = 0; i < ratios.length; i++) {\n        result.push({\n            x: isotopesArray[i].mass,\n            y: ratios[i],\n        });\n    }\n    return result;\n}\nfunction normalize(array) {\n    let sum = array.reduce((prev, current) => prev + current, 0);\n    return array.map((a) => a / sum);\n}\n//# sourceMappingURL=getIsotopesInfo.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.partsToDisplay = partsToDisplay;\nconst Kind_1 = require(\"../Kind\");\nconst toDisplay_js_1 = require(\"./toDisplay.js\");\n/**\n * Converts an array of mf elements to an array of formatting information\n * @param {Array<Object>} result of the parse method\n */\nfunction partsToDisplay(parts) {\n    let lines = [];\n    for (let part of parts) {\n        if (lines.length > 0)\n            lines.push({ kind: Kind_1.Kind.SALT, value: '•' });\n        for (let partLine of part) {\n            lines.push(partLine);\n            if (partLine.multiplier) {\n                lines.push({\n                    kind: Kind_1.Kind.MULTIPLIER,\n                    value: partLine.multiplier,\n                });\n            }\n        }\n    }\n    return (0, toDisplay_js_1.toDisplay)(lines);\n}\n//# sourceMappingURL=partsToDisplay.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.partsToMF = partsToMF;\nconst partToMF_1 = require(\"./partToMF\");\nfunction partsToMF(parts, options) {\n    let mf = [];\n    for (let part of parts) {\n        mf.push((0, partToMF_1.partToMF)(part, options));\n    }\n    return mf.join(' . ');\n}\n//# sourceMappingURL=partsToMF.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.toParts = toParts;\nconst atom_sorter_1 = require(\"atom-sorter\");\nconst chemical_groups_1 = require(\"chemical-groups\");\nconst Kind_1 = require(\"../Kind\");\n/**\n *\n * @param {*} lines\n * @param {object} [options={}]\n * @param {boolean} [options.expand=true] - Should we expand the groupsObject\n */\nfunction toParts(lines, options = {}) {\n    const { expand: shouldExpandGroupsObject = true } = options;\n    let parts = [];\n    let currentPart = createNewPart();\n    let previousKind = Kind_1.Kind.BEGIN;\n    parts.push(currentPart);\n    for (let line of lines) {\n        switch (line.kind) {\n            case Kind_1.Kind.ATOM:\n            case Kind_1.Kind.ISOTOPE_RATIO:\n            case Kind_1.Kind.ISOTOPE:\n            case Kind_1.Kind.CHARGE:\n                currentPart.lines.push({ ...line, multiplier: 1 });\n                break;\n            case Kind_1.Kind.OPENING_PARENTHESIS:\n                openingParenthesis(currentPart);\n                break;\n            case Kind_1.Kind.CLOSING_PARENTHESIS:\n                closingParenthesis(currentPart);\n                break;\n            case Kind_1.Kind.PRE_MULTIPLIER:\n                preMultiplier(currentPart, line);\n                break;\n            case Kind_1.Kind.MULTIPLIER:\n                postMultiplier(currentPart, line.value, previousKind);\n                break;\n            case Kind_1.Kind.SALT:\n                globalPartMultiplier(currentPart);\n                currentPart = createNewPart();\n                parts.push(currentPart);\n                break;\n            case Kind_1.Kind.ANCHOR: // we ignore anchors to create the parts and canonized MF\n                break;\n            case Kind_1.Kind.COMMENT: // we ignore comments to create the parts and canonized MF\n                break;\n            case Kind_1.Kind.TEXT:\n                break;\n            default:\n                throw new Error(`Can not process mf having: ${line.kind}`);\n        }\n        previousKind = line.kind;\n    }\n    globalPartMultiplier(currentPart);\n    if (shouldExpandGroupsObject)\n        expandGroupsObject(parts);\n    return combineAtomsIsotopesCharges(parts);\n}\nfunction createNewPart() {\n    let currentMultiplier = { value: 1, fromIndex: 0 };\n    return { lines: [], multipliers: [currentMultiplier], currentMultiplier };\n}\nfunction openingParenthesis(currentPart) {\n    currentPart.currentMultiplier = {\n        value: 1,\n        fromIndex: currentPart.lines.length,\n    };\n    currentPart.multipliers.push(currentPart.currentMultiplier);\n}\nfunction closingParenthesis(currentPart) {\n    currentPart.currentMultiplier = currentPart.multipliers.pop();\n    if (currentPart.currentMultiplier !== 1) {\n        for (let i = currentPart.currentMultiplier.fromIndex; i < currentPart.lines.length; i++) {\n            currentPart.lines[i].multiplier *= currentPart.currentMultiplier.value;\n        }\n    }\n}\nfunction preMultiplier(currentPart, line) {\n    currentPart.currentMultiplier.value *= line.value;\n}\nfunction globalPartMultiplier(currentPart) {\n    for (let i = currentPart.multipliers[0].fromIndex; i < currentPart.lines.length; i++) {\n        currentPart.lines[i].multiplier *= currentPart.multipliers[0].value;\n    }\n}\nfunction postMultiplier(currentPart, value, previousKind) {\n    if (previousKind === Kind_1.Kind.CLOSING_PARENTHESIS) {\n        // need to apply to everything till the previous parenthesis\n        for (let i = currentPart.currentMultiplier.fromIndex; i < currentPart.lines.length; i++) {\n            currentPart.lines[i].multiplier *= value;\n        }\n    }\n    else {\n        // just applies to the previous element\n        currentPart.lines.at(-1).multiplier *= value;\n    }\n}\nfunction expandGroupsObject(parts) {\n    for (let part of parts) {\n        let expanded = false;\n        for (let i = 0; i < part.lines.length; i++) {\n            let line = part.lines[i];\n            if (line.kind === Kind_1.Kind.ATOM) {\n                let group = chemical_groups_1.groupsObject[line.value];\n                if (group) {\n                    expanded = true;\n                    for (let element of group.elements) {\n                        if (element.isotope) {\n                            part.lines.push({\n                                kind: 'isotope',\n                                value: { atom: element.symbol, isotope: element.isotope },\n                                multiplier: line.multiplier * element.number,\n                            });\n                        }\n                        else {\n                            part.lines.push({\n                                kind: 'atom',\n                                value: element.symbol,\n                                multiplier: line.multiplier * element.number,\n                            });\n                        }\n                    }\n                    part.lines[i] = undefined;\n                }\n            }\n        }\n        if (expanded)\n            part.lines = part.lines.filter(Boolean);\n    }\n}\nfunction combineAtomsIsotopesCharges(parts) {\n    let results = [];\n    for (let part of parts) {\n        let result = [];\n        results.push(result);\n        calculateAndSortKeys(part);\n        let currentKey = '';\n        for (let key of part.keys) {\n            if (key.key === Kind_1.Kind.CHARGE) {\n                if (currentKey !== key.key) {\n                    result.push({\n                        kind: Kind_1.Kind.CHARGE,\n                        value: key.value.value * key.value.multiplier,\n                    });\n                }\n                else {\n                    result.at(-1).value += key.value.value * key.value.multiplier;\n                }\n            }\n            else if (currentKey !== key.key) {\n                result.push(key.value);\n            }\n            else {\n                result.at(-1).multiplier += key.value.multiplier;\n            }\n            currentKey = key.key;\n        }\n        result.sort((a, b) => {\n            if (a.kind === Kind_1.Kind.CHARGE)\n                return 1;\n            if (b.kind === Kind_1.Kind.CHARGE)\n                return -1;\n            let atomA = a.kind === Kind_1.Kind.ATOM ? a.value : a.value.atom;\n            let atomB = b.kind === Kind_1.Kind.ATOM ? b.value : b.value.atom;\n            if (atomA !== atomB)\n                return (0, atom_sorter_1.atomSorter)(atomA, atomB);\n            // same atome but some isotopes ...\n            if (a.kind === Kind_1.Kind.ATOM)\n                return -1;\n            if (b.kind === Kind_1.Kind.ATOM)\n                return 1;\n            if (a.kind === Kind_1.Kind.ISOTOPE)\n                return -1;\n            if (b.kind === Kind_1.Kind.ISOTOPE)\n                return 1;\n            if (a.kind === Kind_1.Kind.ISOTOPE_RATIO)\n                return -1;\n            if (b.kind === Kind_1.Kind.ISOTOPE_RATIO)\n                return 1;\n            return 0;\n        });\n    }\n    return results;\n}\nfunction calculateAndSortKeys(part) {\n    part.keys = [];\n    for (let line of part.lines) {\n        part.keys.push({ key: getKey(line), value: line });\n    }\n    part.keys.sort((a, b) => stringComparator(a.key, b.key));\n}\nfunction getKey(line) {\n    let key = [line.kind];\n    switch (line.kind) {\n        case Kind_1.Kind.CHARGE:\n            break;\n        default:\n            if (typeof line.value === 'string') {\n                key.push(line.value);\n            }\n            else {\n                for (let prop of Object.keys(line.value).toSorted()) {\n                    key.push(line.value[prop]);\n                }\n            }\n    }\n    return key.join('-');\n}\nfunction stringComparator(a, b) {\n    if (a < b)\n        return -1;\n    if (a > b)\n        return 1;\n    return 0;\n}\n//# sourceMappingURL=toParts.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.toText = toText;\nconst Format_1 = require(\"../Format\");\nconst subSuperscript_1 = require(\"./subSuperscript\");\nfunction toText(lines) {\n    let text = [];\n    for (let line of lines) {\n        switch (line.kind) {\n            case Format_1.Format.SUBSCRIPT: {\n                const value = String(line.value);\n                for (let i = 0; i < value.length; i++) {\n                    const char = value[i];\n                    if (subSuperscript_1.subscript[char]) {\n                        text.push(subSuperscript_1.subscript[char]);\n                    }\n                    else {\n                        throw new Error(`Subscript problem with: ${char}`);\n                    }\n                }\n                break;\n            }\n            case Format_1.Format.SUPERSCRIPT: {\n                const value = String(line.value);\n                for (let i = 0; i < value.length; i++) {\n                    const char = value[i];\n                    if (subSuperscript_1.superscript[char]) {\n                        text.push(subSuperscript_1.superscript[char]);\n                    }\n                    else {\n                        throw new Error(`Superscript problem with: ${char}`);\n                    }\n                }\n                break;\n            }\n            case Format_1.Format.SUPERIMPOSE: {\n                const under = String(line.under);\n                for (let i = 0; i < under.length; i++) {\n                    const char = under[i];\n                    if (subSuperscript_1.subscript[char]) {\n                        text.push(subSuperscript_1.subscript[char]);\n                    }\n                    else {\n                        throw new Error(`Subscript problem with: ${char}`);\n                    }\n                }\n                const over = String(line.over);\n                for (let i = 0; i < over.length; i++) {\n                    const char = over[i];\n                    if (subSuperscript_1.superscript[char]) {\n                        text.push(subSuperscript_1.superscript[char]);\n                    }\n                    else {\n                        throw new Error(`Superscript problem with: ${char}`);\n                    }\n                }\n                break;\n            }\n            default:\n                text.push(line.value);\n        }\n    }\n    return text.join('');\n}\n//# sourceMappingURL=toText.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MFInternal = void 0;\nconst Kind_1 = require(\"./Kind\");\nconst ensureCase_1 = require(\"./ensureCase\");\nconst parse_1 = require(\"./parse\");\nconst flatten_1 = require(\"./util/flatten\");\nconst getEA_1 = require(\"./util/getEA\");\nconst getElements_1 = require(\"./util/getElements\");\nconst getInfo_1 = require(\"./util/getInfo\");\nconst getIsotopesInfo_1 = require(\"./util/getIsotopesInfo\");\nconst partsToDisplay_1 = require(\"./util/partsToDisplay\");\nconst partsToMF_1 = require(\"./util/partsToMF\");\nconst toDisplay_1 = require(\"./util/toDisplay\");\nconst toHtml_1 = require(\"./util/toHtml\");\nconst toParts_1 = require(\"./util/toParts\");\nconst toText_1 = require(\"./util/toText\");\n/** @typedef {import('./util/getIsotopesInfo.types').IsotopesInfo} IsotopesInfo */\n/** @typedef {import('./util/getInfo.types').MFInfo} MFInfo */\n/** @typedef {import('./util/getInfo.types').MFInfoWithParts} MFInfoWithParts */\n/**\n * Class allowing to deal with molecular formula and derived information\n */\nclass MFInternal {\n    constructor(mf, options = {}) {\n        const { flattenLimit = 0 } = options;\n        if (options.ensureCase) {\n            mf = (0, ensureCase_1.ensureCase)(mf);\n        }\n        this.parsed = (0, parse_1.parse)(mf);\n        // This is definitely not the fastest way to do it but it allows to flatten the formula if needed and then parse it again to have a clean structure without multiplier ranges. We can consider doing it in one pass in the future if performance is an issue.\n        if (flattenLimit > 0 &&\n            this.parsed.some((entry) => entry.kind === Kind_1.Kind.MULTIPLIER_RANGE)) {\n            try {\n                const flattened = (0, flatten_1.flatten)(this.parsed, { limit: flattenLimit });\n                this.parsed = (0, parse_1.parse)(flattened.join('.'));\n            }\n            catch (error) {\n                // eslint-disable-next-line no-console\n                console.error(error.toString());\n            }\n        }\n        this.cache = {};\n    }\n    /**\n     * Returns an array of objects with kind and value that can be used to easily\n     * display the molecular formula.\n     * @returns {{kind: string, value: string}[]}\n     */\n    toDisplay() {\n        if (!this.cache.displayed)\n            this.cache.displayed = (0, toDisplay_1.toDisplay)(this.parsed);\n        return this.cache.displayed;\n    }\n    /**\n     * Returns a string that represents the molecular formula adding subscript and superscript in HTML.\n     * @returns {string}\n     */\n    toHtml() {\n        if (!this.cache.html) {\n            this.toDisplay();\n            this.cache.html = (0, toHtml_1.toHtml)(this.cache.displayed);\n        }\n        return this.cache.html;\n    }\n    /**\n     * Returns a string that represents the molecular formula adding subscript and superscript\n     * using Unicode characters. This can not be parsed anymore so kind of dead end ...\n     * @returns {string}\n     */\n    toText() {\n        if (!this.cache.text) {\n            this.toDisplay();\n            this.cache.text = (0, toText_1.toText)(this.cache.displayed);\n        }\n        return this.cache.text;\n    }\n    /**\n     * Similar to toText but returns a canonic string in which the atoms are sorted using the Hill system\n     * @returns {string}\n     */\n    toCanonicText() {\n        if (!this.cache.canonicText) {\n            this.cache.canonicText = new MFInternal(this.toMF()).toText();\n        }\n        return this.cache.canonicText;\n    }\n    toParts(options) {\n        if (options) {\n            return (0, toParts_1.toParts)(this.parsed, options);\n        }\n        // we don't want to cache the parts if we are using options\n        if (!this.cache.parts) {\n            this.cache.parts = (0, toParts_1.toParts)(this.parsed, options);\n        }\n        return this.cache.parts;\n    }\n    /**\n     * Returns an object with the global MF, global charge, monoisotopic mass and mass\n     * as well as the same information for all the parts\n     * @param {object} [options={}] options\n     * @param {object} [options.customUnsaturations={}] custom unsaturations\n     * @param {string} [options.emFieldName='monoisotopicMass'] name of the monoisotopic mass field\n     * @param {string} [options.msemFieldName='observedMonoisotopicMass'] name of the observed monoisotopic mass field\n     * @returns {MFInfo|MFInfoWithParts}\n     */\n    getInfo(options = {}) {\n        if (!this.cache.info) {\n            this.toParts();\n            this.cache.info = (0, getInfo_1.getInfo)(this.cache.parts, options);\n        }\n        return this.cache.info;\n    }\n    /**\n     * Returns an object with the elemental analysis\n     * @returns {*[]}\n     */\n    getEA() {\n        if (!this.cache.ea) {\n            this.toParts();\n            this.cache.ea = (0, getEA_1.getEA)(this.cache.parts);\n        }\n        return this.cache.ea;\n    }\n    /**\n     * Get the different elements for each part\n     * @returns {*[]}\n     */\n    getElements() {\n        if (!this.cache.elements) {\n            this.toParts();\n            this.cache.elements = (0, getElements_1.getElements)(this.cache.parts);\n        }\n        return this.cache.elements;\n    }\n    /**\n     * Returns an array with each atom and isotopic composition\n     * @returns {IsotopesInfo}\n     */\n    getIsotopesInfo(options = {}) {\n        if (!this.cache.isotopesInfo) {\n            this.toParts();\n            this.cache.isotopesInfo = (0, getIsotopesInfo_1.getIsotopesInfo)(this.cache.parts, options);\n        }\n        return this.cache.isotopesInfo;\n    }\n    /**\n     * Get a canonized MF\n     * @returns {string}\n     */\n    toMF() {\n        if (!this.cache.mf) {\n            this.toParts();\n            this.cache.mf = (0, partsToMF_1.partsToMF)(this.cache.parts);\n        }\n        return this.cache.mf;\n    }\n    /**\n     * Get a canonized MF\n     * @returns {string}\n     */\n    toNeutralMF() {\n        if (!this.cache.neutralMF) {\n            this.toParts();\n            this.cache.neutralMF = (0, partsToMF_1.partsToMF)(this.cache.parts, { neutral: true });\n        }\n        return this.cache.neutralMF;\n    }\n    canonize() {\n        this.toParts();\n        this.cache.displayed = (0, partsToDisplay_1.partsToDisplay)(this.cache.parts);\n        this.cache.html = undefined;\n    }\n    flatten(options) {\n        return (0, flatten_1.flatten)(this.parsed, options);\n    }\n}\nexports.MFInternal = MFInternal;\n//# sourceMappingURL=MFInternal.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MF = void 0;\nconst MFInternal_1 = require(\"./MFInternal\");\nclass MF {\n    internal;\n    constructor(mf, options = {}) {\n        this.internal = new MFInternal_1.MFInternal(mf, options);\n    }\n    /**\n     * Returns an array of objects with kind and value that can be used to easily\n     * display the molecular formula.\n     */\n    toDisplay() {\n        return this.internal.toDisplay();\n    }\n    /**\n     * Returns a string that represents the molecular formula adding subscript and superscript in HTML.\n     */\n    toHtml() {\n        return this.internal.toHtml();\n    }\n    /**\n     * Returns a string that represents the molecular formula adding subscript and superscript\n     * using Unicode characters. This can not be parsed anymore so kind of dead end ...\n     */\n    toText() {\n        return this.internal.toText();\n    }\n    /**\n     * Similar to toText but returns a canonic string in which the atoms are sorted using the Hill system\n     */\n    toCanonicText() {\n        return this.internal.toCanonicText();\n    }\n    toParts(options) {\n        return this.internal.toParts(options);\n    }\n    /**\n     * Returns an object with the global MF, global charge, monoisotopic mass and mass\n     * as well as the same information for all the parts\n     */\n    getInfo(options) {\n        return this.internal.getInfo(options);\n    }\n    /**\n     * Returns an object with the elemental analysis\n     */\n    getEA() {\n        return this.internal.getEA();\n    }\n    /**\n     * Get the different elements for each part\n     */\n    getElements() {\n        return this.internal.getElements();\n    }\n    /**\n     * Returns an array with each atom and isotopic composition\n     */\n    getIsotopesInfo(options = {}) {\n        return this.internal.getIsotopesInfo(options);\n    }\n    /**\n     * Get a canonized parsable Molecule Formula\n     */\n    toMF() {\n        return this.internal.toMF();\n    }\n    /**\n     * Get a canonized MF\n     */\n    toNeutralMF() {\n        return this.internal.toNeutralMF();\n    }\n    canonize() {\n        return this.internal.canonize();\n    }\n    flatten(options) {\n        return this.internal.flatten(options);\n    }\n}\nexports.MF = MF;\n//# sourceMappingURL=MF.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.parseToHtml = parseToHtml;\nconst parse_js_1 = require(\"./parse.js\");\nconst toDisplay_js_1 = require(\"./util/toDisplay.js\");\nconst toHtml_js_1 = require(\"./util/toHtml.js\");\n/**\n * Parse a molecular formula and converts it to an HTML code\n * @param {String} mf String containing the molecular formula\n */\nfunction parseToHtml(mf) {\n    let parsed = (0, parse_js_1.parse)(mf);\n    let display = (0, toDisplay_js_1.toDisplay)(parsed);\n    return (0, toHtml_js_1.toHtml)(display);\n}\n//# sourceMappingURL=parseToHtml.js.map","\"use strict\";\n/**\n * @param {object}   [entry={}]\n * @param {object}   [options={}]\n * @param {number}   [options.min=-Infinity] - Minimal unsaturation\n * @param {number}   [options.max=+Infinity] - Maximal unsaturation\n * @param {boolean}   [options.onlyInteger=false] - Integer unsaturation\n * @param {boolean}   [options.onlyNonInteger=false] - Non integer unsaturation\n * @return {boolean}\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.unsaturationMatcher = unsaturationMatcher;\nfunction unsaturationMatcher(entry, options = {}) {\n    const { min = Number.MIN_SAFE_INTEGER, max = Number.MAX_SAFE_INTEGER, onlyInteger, onlyNonInteger, } = options;\n    if (entry.unsaturation !== undefined) {\n        if (entry.unsaturation < min || entry.unsaturation > max)\n            return false;\n        if (onlyInteger && !Number.isInteger(entry.unsaturation))\n            return false;\n        if (onlyNonInteger && Number.isInteger(entry.unsaturation))\n            return false;\n    }\n    return true;\n}\n//# sourceMappingURL=unsaturationMatcher.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.generalMatcher = generalMatcher;\nconst unsaturationMatcher_js_1 = require(\"./unsaturationMatcher.js\");\n/**\n * Returns true if the entry containing MF information match\n * @param {object}   [entry={}] - object containing mw, ...\n * @param {object}   [options={}]\n * @param {number}   [options.minMW=0] - Minimal molecular weight\n * @param {number}   [options.maxMW=+Infinity] - Maximal molecular weight\n * @param {number}   [options.minEM=0] - Minimal monoisotopic mass\n * @param {number}   [options.maxEM=+Infinity] - Maximal monoisotopic mass\n * @param {number}   [options.minCharge=-Infinity] - Minimal charge\n * @param {number}   [options.maxCharge=+Infinity] - Maximal charge\n * @param {boolean}  [options.absoluteCharge=false] - If true, the charge is absolute (so between 0 and +Infinity by default)\n * @param {object}   [options.unsaturation={}]\n * @param {number}   [options.unsaturation.min=-Infinity] - Minimal unsaturation\n * @param {number}   [options.unsaturation.max=+Infinity] - Maximal unsaturation\n * @param {boolean}   [options.unsaturation.onlyInteger=false] - Integer unsaturation\n * @param {boolean}   [options.unsaturation.onlyNonInteger=false] - Non integer unsaturation\n * @param {object}   [options.atoms] - object of atom:{min, max}\n * @return {boolean}\n */\nfunction generalMatcher(entry, options = {}) {\n    const { minMW = 0, maxMW = +Infinity, minEM = 0, maxEM = +Infinity, minCharge = Number.MIN_SAFE_INTEGER, maxCharge = Number.MAX_SAFE_INTEGER, absoluteCharge = false, unsaturation = {}, atoms, } = options;\n    if (entry.mw !== undefined && (entry.mw < minMW || entry.mw > maxMW)) {\n        return false;\n    }\n    if (entry.em !== undefined && (entry.em < minEM || entry.em > maxEM)) {\n        return false;\n    }\n    if (entry.charge !== undefined) {\n        let charge = absoluteCharge ? Math.abs(entry.charge) : entry.charge;\n        if (charge < minCharge || charge > maxCharge)\n            return false;\n    }\n    if (unsaturation !== undefined &&\n        entry.unsaturation !== undefined &&\n        !(0, unsaturationMatcher_js_1.unsaturationMatcher)(entry, unsaturation)) {\n        return false;\n    }\n    if (entry.atoms !== undefined && atoms) {\n        // all the atoms of the entry must fit in the range\n        for (let atom in entry.atoms) {\n            if (!atoms[atom])\n                return false;\n            if (entry.atoms[atom] < atoms[atom].min)\n                return false;\n            if (entry.atoms[atom] > atoms[atom].max)\n                return false;\n        }\n    }\n    return true;\n}\n//# sourceMappingURL=generalMatcher.js.map","\"use strict\";\n/**\n * Ensure that the sequence is in uppercase taking into account possible modifications\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ensureUppercaseSequence = ensureUppercaseSequence;\nfunction ensureUppercaseSequence(sequence) {\n    let parenthesisCounter = 0;\n    let parts = [];\n    let part = '';\n    for (let i = 0; i < sequence.length; i++) {\n        let currentSymbol = sequence[i];\n        if (currentSymbol === '(' && parenthesisCounter === 0 && part) {\n            parts.push(part);\n            part = currentSymbol;\n        }\n        else if (currentSymbol === ')' && parenthesisCounter === 0) {\n            part += currentSymbol;\n            parts.push(part);\n            part = '';\n        }\n        else {\n            part += currentSymbol;\n        }\n    }\n    if (part)\n        parts.push(part);\n    for (let i = 0; i < parts.length; i++) {\n        if (!parts[i].startsWith('(') && parts[i].match(/^[a-z]+$/)) {\n            parts[i] = parts[i].toUpperCase();\n        }\n    }\n    return parts.join('');\n}\n//# sourceMappingURL=ensureUppercaseSequence.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getEutrophicationPotential = getEutrophicationPotential;\nconst mf_parser_1 = require(\"mf-parser\");\nfunction getEutrophicationPotential(mfString) {\n    let parsed = new mf_parser_1.MF(mfString);\n    let info = parsed.getInfo();\n    let mf = info.mf;\n    let mw = info.mass;\n    let nC = info.atoms.C || 0;\n    let nO = info.atoms.O || 0;\n    let nN = info.atoms.N || 0;\n    let nP = info.atoms.P || 0;\n    let nH = info.atoms.H || 0;\n    let atoms = Object.keys(info.atoms);\n    for (let atom of atoms) {\n        if (!['C', 'H', 'N', 'O', 'P'].includes(atom)) {\n            return {\n                log: `EP can not be calculated because the MF contains the element: ${atom}`,\n            };\n        }\n    }\n    let vRef = 1;\n    let mwRef = 94.97;\n    let thOD = nC + (nH - 3 * nN) / 4 - nO / 2;\n    let v = nP + nN / 16 + thOD / 138;\n    let ep = v / mw / (vRef / mwRef);\n    return {\n        v,\n        thOD,\n        ep,\n        mf,\n        mw,\n        log: 'Successful calculation',\n    };\n}\n//# sourceMappingURL=getEutrophicationPotential.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getMsem = getMsem;\nconst chemical_elements_1 = require(\"chemical-elements\");\nfunction getMsem(em, charge) {\n    if (charge > 0) {\n        return em / charge - chemical_elements_1.ELECTRON_MASS;\n    }\n    else if (charge < 0) {\n        return em / (charge * -1) + chemical_elements_1.ELECTRON_MASS;\n    }\n    else {\n        return 0;\n    }\n}\n//# sourceMappingURL=getMsem.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getMsInfo = getMsInfo;\nconst getMsem_1 = require(\"./getMsem\");\n/**\n * Returns an object containing:\n * {ms: {em, charge, ionization}, ionization: {}}\n * We return the ionization in order to know which one has been selected\n */\nfunction getMsInfo(entry, options = {}) {\n    const { allowNeutralMolecules, ionization = { mf: '', em: 0, charge: 0 }, forceIonization = false, targetMass, } = options;\n    let realIonization = ionization;\n    if (!forceIonization && entry.ionization && entry.ionization.mf !== '') {\n        realIonization = entry.ionization;\n    }\n    let ms = {\n        ionization: realIonization.mf,\n        em: 0,\n        charge: entry.charge + realIonization.charge,\n    };\n    if (ms.charge !== 0) {\n        ms.em = (0, getMsem_1.getMsem)(entry.em + realIonization.em, ms.charge);\n    }\n    else if (allowNeutralMolecules) {\n        ms.em = entry.em + realIonization.em;\n    }\n    if (targetMass) {\n        ms.delta = targetMass - ms.em;\n        ms.ppm = ((targetMass - ms.em) / ms.em) * 1e6;\n    }\n    return {\n        ms,\n        ionization: realIonization,\n    };\n}\n//# sourceMappingURL=getMsInfo.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getRangesForFragment = getRangesForFragment;\nconst mf_parser_1 = require(\"mf-parser\");\nfunction getRangesForFragment(ranges) {\n    ranges = structuredClone(ranges);\n    if (typeof ranges === 'string') {\n        // need to convert to ranges\n        let parsed = (0, mf_parser_1.parse)(ranges.replaceAll(/[\\t\\n\\r ]/g, ''));\n        let newRanges = [];\n        // example ClBr2(CH2)0-2NO\n        // the idea is that as long as we don't have a range we don't really care\n        // there is a limitation is that the range has to be first level of parenthesis\n        let parenthesisLevel = 0;\n        let currentMF = ''; // start at an atom first level or a parenthesis\n        for (let item of parsed) {\n            switch (item.kind) {\n                case mf_parser_1.Kind.ATOM:\n                    if (parenthesisLevel === 0 && currentMF) {\n                        newRanges.push({\n                            mf: currentMF,\n                        });\n                        currentMF = '';\n                    }\n                    currentMF += item.value;\n                    break;\n                case mf_parser_1.Kind.ISOTOPE:\n                    if (parenthesisLevel === 0 && currentMF) {\n                        newRanges.push({\n                            mf: currentMF,\n                        });\n                        currentMF = '';\n                    }\n                    currentMF += `[${item.value.isotope}${item.value.atom}]`;\n                    break;\n                case mf_parser_1.Kind.MULTIPLIER:\n                    if (parenthesisLevel === 0 && currentMF) {\n                        newRanges.push({\n                            mf: currentMF,\n                            max: item.value,\n                        });\n                        currentMF = '';\n                    }\n                    else {\n                        currentMF += item.value;\n                    }\n                    break;\n                case mf_parser_1.Kind.MULTIPLIER_RANGE:\n                    if (parenthesisLevel !== 0) {\n                        throw new Error('Range multiplier can only be at the first level');\n                    }\n                    newRanges.push({\n                        mf: currentMF,\n                        min: item.value.from,\n                        max: item.value.to,\n                    });\n                    currentMF = '';\n                    break;\n                case mf_parser_1.Kind.OPENING_PARENTHESIS:\n                    if (parenthesisLevel === 0 && currentMF) {\n                        newRanges.push({\n                            mf: currentMF,\n                        });\n                        currentMF = '';\n                    }\n                    parenthesisLevel++;\n                    currentMF += '(';\n                    break;\n                case mf_parser_1.Kind.CLOSING_PARENTHESIS:\n                    parenthesisLevel--;\n                    currentMF += ')';\n                    break;\n                default:\n                    throw new Error(`can not preprocess ${ranges}`);\n            }\n        }\n        if (currentMF) {\n            newRanges.push({ mf: currentMF });\n        }\n        ranges = newRanges;\n    }\n    let possibilities = [];\n    for (const range of ranges) {\n        if (range.max === 0)\n            continue;\n        let max = range.max === undefined ? 1 : range.max;\n        possibilities.push(`${range.mf}0-${max}`);\n    }\n    return possibilities.join(' ');\n}\n//# sourceMappingURL=getRangesForFragment.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MFRange = void 0;\nconst mf_parser_1 = require(\"mf-parser\");\nclass MFRange {\n    constructor(mf) {\n        this.range = getRange(mf);\n    }\n    isInRange(mf) {\n        const target = getRange(mf);\n        let rangeIndex = 0;\n        let targetIndex = 0;\n        while (rangeIndex < this.range.length && targetIndex < target.length) {\n            const rangeElement = this.range[rangeIndex];\n            const targetElement = target[targetIndex];\n            if (rangeElement.element === targetElement.element) {\n                // Check if the target's range is within the range's range\n                if (targetElement.range.from >= rangeElement.range.from &&\n                    targetElement.range.to <= rangeElement.range.to) {\n                    targetIndex++;\n                    rangeIndex++;\n                }\n                else {\n                    return false; // Target element is out of range\n                }\n            }\n            else if (rangeElement.element < targetElement.element) {\n                if (rangeElement.range.from > 0) {\n                    return false; // Remaining range elements must have a minimum of 1\n                }\n                rangeIndex++;\n            }\n            else {\n                return false; // Target element is not in the range\n            }\n        }\n        if (rangeIndex < this.range.length) {\n            if (this.range[rangeIndex].range.from > 0) {\n                return false; // Remaining range elements must have a minimum of 1\n            }\n            rangeIndex++;\n        }\n        if (targetIndex < target.length) {\n            return false; // Not all target elements were matched\n        }\n        return true; // All target elements are within the range\n    }\n}\nexports.MFRange = MFRange;\nfunction getRange(mf) {\n    const parsed = (0, mf_parser_1.parse)(mf, { expandGroups: true, simplify: true });\n    const ranges = [];\n    let currentRange;\n    for (const item of parsed) {\n        switch (item.kind) {\n            case 'atom':\n                currentRange = { element: item.value, range: { from: 1, to: 1 } };\n                ranges.push(currentRange);\n                break;\n            case 'isotope':\n                currentRange = {\n                    element: item.value.isotope + item.value.atom,\n                    range: { from: 1, to: 1 },\n                };\n                break;\n            case 'multiplier':\n                if (currentRange) {\n                    currentRange.range.from = item.value;\n                    currentRange.range.to = item.value;\n                }\n                else {\n                    throw new Error(`MFRange: Multiplier without preceding element in MF: ${mf}`);\n                }\n                break;\n            case 'multiplierRange':\n                if (currentRange) {\n                    currentRange.range.from = item.value.from;\n                    currentRange.range.to = item.value.to;\n                }\n                else {\n                    throw new Error(`MFRange: Multiplier range without preceding element in MF: ${mf}`);\n                }\n                break;\n            default:\n                throw new Error(`MFRange: Unknown kind: ${item.kind} in MF: ${mf}`);\n        }\n    }\n    return ranges.toSorted((a, b) => {\n        if (a.element < b.element)\n            return -1;\n        if (a.element > b.element)\n            return 1;\n        return 0;\n    });\n}\n//# sourceMappingURL=MFRange.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.mfDiff = mfDiff;\nconst mf_parser_1 = require(\"mf-parser\");\nfunction mfDiff(mfString1, mfString2) {\n    let mf1 = new mf_parser_1.MF(mfString1).getInfo().atoms;\n    let mf2 = new mf_parser_1.MF(mfString2).getInfo().atoms;\n    let atoms = Object.keys(mf1);\n    for (const atom of Object.keys(mf2)) {\n        if (!atoms.includes(atom))\n            atoms.push(atom);\n    }\n    let mf = '';\n    for (let atom of atoms) {\n        let diff = (mf1[atom] || 0) - (mf2[atom] || 0);\n        if (diff)\n            mf += atom + diff;\n    }\n    return new mf_parser_1.MF(mf).toMF();\n}\n//# sourceMappingURL=mfDiff.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.preprocessIonizations = preprocessIonizations;\nconst mf_parser_1 = require(\"mf-parser\");\nfunction preprocessIonizations(ionizationsString = '') {\n    if (Array.isArray(ionizationsString))\n        return ionizationsString;\n    const ionizations = ionizationsString.split(/ *[\\t\\n\\r,.;]+ */);\n    // it is allowed to have ranges in Ionizations. We need to explode them.\n    const results = [];\n    for (const ionization of ionizations) {\n        const parts = new mf_parser_1.MF(ionization).flatten();\n        for (const part of parts) {\n            const info = new mf_parser_1.MF(part).getInfo();\n            results.push({\n                mf: part,\n                em: info.monoisotopicMass,\n                charge: info.charge,\n                atoms: info.atoms,\n            });\n        }\n    }\n    return results;\n}\n//# sourceMappingURL=preprocessIonizations.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.preprocessRanges = preprocessRanges;\nconst mf_parser_1 = require(\"mf-parser\");\nfunction preprocessRanges(ranges) {\n    ranges = structuredClone(ranges);\n    if (typeof ranges === 'string') {\n        // need to convert to ranges\n        let parsed = (0, mf_parser_1.parse)(ranges.replaceAll(/[\\t\\n\\r ]/g, ''));\n        let newRanges = [];\n        let current = {\n            mf: '',\n            min: 1,\n            max: 1,\n        };\n        // example ClBr2(CH2)0-2NO\n        // the idea is that has long as we don't have a range we don't really care\n        // but the range should only applied on the previous atom, group or parenthesis\n        // there is a limitation is that the range has to be first level of parenthesis\n        let parenthesisLevel = 0;\n        let currentMF = ''; // start at an atom first level or a parenthesis\n        for (let item of parsed) {\n            switch (item.kind) {\n                case mf_parser_1.Kind.ATOM:\n                    if (parenthesisLevel === 0 && currentMF) {\n                        current.mf += currentMF;\n                        currentMF = '';\n                    }\n                    currentMF += item.value;\n                    break;\n                case mf_parser_1.Kind.ISOTOPE:\n                    if (parenthesisLevel === 0 && currentMF) {\n                        current.mf += currentMF;\n                        currentMF = '';\n                    }\n                    currentMF += `[${item.value.isotope}${item.value.atom}]`;\n                    break;\n                case mf_parser_1.Kind.MULTIPLIER:\n                    if (parenthesisLevel === 0 && currentMF) {\n                        current.mf += currentMF + item.value;\n                        currentMF = '';\n                    }\n                    else {\n                        currentMF += item.value;\n                    }\n                    break;\n                case mf_parser_1.Kind.MULTIPLIER_RANGE:\n                    if (parenthesisLevel !== 0) {\n                        throw new Error('Range multiplier can only be at the first level');\n                    }\n                    newRanges.push({\n                        mf: currentMF,\n                        min: item.value.from,\n                        max: item.value.to,\n                    });\n                    currentMF = '';\n                    break;\n                case mf_parser_1.Kind.OPENING_PARENTHESIS:\n                    if (parenthesisLevel === 0 && currentMF) {\n                        current.mf += currentMF;\n                        currentMF = '';\n                    }\n                    parenthesisLevel++;\n                    currentMF += '(';\n                    break;\n                case mf_parser_1.Kind.CLOSING_PARENTHESIS:\n                    parenthesisLevel--;\n                    currentMF += ')';\n                    break;\n                default:\n                    throw new Error(`can not preprocess ${ranges}`);\n            }\n        }\n        if (currentMF) {\n            current.mf += currentMF;\n        }\n        if (current.mf) {\n            newRanges.push(current);\n        }\n        ranges = newRanges;\n    }\n    let possibilities = [];\n    for (let i = 0; i < ranges.length; i++) {\n        let range = ranges[i];\n        let min = range.min === undefined ? 0 : range.min;\n        let max = range.max === undefined ? 1 : range.max;\n        let possibility = {\n            mf: range.mf,\n            originalMinCount: min, // value defined by the user\n            originalMaxCount: max, // value defined by the user\n            currentMinCount: min,\n            currentMaxCount: max,\n            currentCount: min,\n            currentMonoisotopicMass: 0,\n            currentCharge: 0,\n            currentUnsaturation: 0,\n            initialOrder: i,\n            minInnerMass: 0,\n            maxInnerMass: 0,\n            minInnerCharge: 0,\n            maxInnerCharge: 0,\n            minCharge: 0,\n            maxCharge: 0,\n            minMass: 0,\n            maxMass: 0,\n            innerCharge: false,\n        };\n        possibilities.push(possibility);\n        let info = new mf_parser_1.MF(range.mf).getInfo();\n        possibility.em = range.em || info.monoisotopicMass;\n        possibility.charge = range.charge || info.charge;\n        possibility.unsaturation =\n            range.unsaturation === undefined\n                ? (info.unsaturation - 1) * 2\n                : range.unsaturation;\n        possibility.atoms = info.atoms;\n        if (possibility.mf !== info.mf) {\n            possibility.isGroup = true;\n        }\n    }\n    possibilities = possibilities.filter((r) => r.originalMinCount !== 0 || r.originalMaxCount !== 0);\n    // we will sort the way we analyse the data\n    // 1. The one possibility parameter\n    // 2. The charged part\n    // 3. Decreasing em\n    possibilities.sort((a, b) => {\n        if (a.originalMinCount === a.originalMaxCount)\n            return -1; // should be in front, they are 'static'\n        if (b.originalMinCount === b.originalMaxCount)\n            return 1;\n        if (a.charge && b.charge) {\n            if (Math.abs(a.charge) > Math.abs(b.charge))\n                return -1;\n            if (Math.abs(a.charge) < Math.abs(b.charge))\n                return 1;\n            return b.em - a.em;\n        }\n        if (a.charge)\n            return -1;\n        if (b.charge)\n            return 1;\n        return b.em - a.em;\n    });\n    // we calculate couple of fixed values\n    for (let i = 0; i < possibilities.length; i++) {\n        for (let j = i; j < possibilities.length; j++) {\n            let possibility = possibilities[j];\n            if (possibility.em > 0) {\n                possibilities[i].minMass +=\n                    possibility.em * possibility.originalMinCount;\n                possibilities[i].maxMass +=\n                    possibility.em * possibility.originalMaxCount;\n            }\n            else {\n                possibilities[i].minMass +=\n                    possibility.em * possibility.originalMaxCount;\n                possibilities[i].maxMass +=\n                    possibility.em * possibility.originalMinCount;\n            }\n            if (possibility.charge > 0) {\n                possibilities[i].minCharge +=\n                    possibility.charge * possibility.originalMinCount;\n                possibilities[i].maxCharge +=\n                    possibility.charge * possibility.originalMaxCount;\n            }\n            else {\n                possibilities[i].minCharge +=\n                    possibility.charge * possibility.originalMaxCount;\n                possibilities[i].maxCharge +=\n                    possibility.charge * possibility.originalMinCount;\n            }\n        }\n    }\n    for (let i = 0; i < possibilities.length; i++) {\n        if (i < possibilities.length - 1) {\n            let possibility = possibilities[i];\n            let innerPossibility = possibilities[i + 1];\n            possibility.minInnerMass = innerPossibility.minMass;\n            possibility.maxInnerMass = innerPossibility.maxMass;\n            possibility.minInnerCharge = innerPossibility.minCharge;\n            possibility.maxInnerCharge = innerPossibility.maxCharge;\n            if (possibility.minInnerCharge || possibility.maxInnerCharge) {\n                possibility.innerCharge = true;\n            }\n        }\n    }\n    return possibilities;\n}\n//# sourceMappingURL=preprocessRanges.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.msemMatcher = msemMatcher;\nconst mf_utilities_1 = require(\"mf-utilities\");\nconst ml_spectra_processing_1 = require(\"ml-spectra-processing\");\nconst unsaturationMatcher_js_1 = require(\"./unsaturationMatcher.js\");\n/**\n * @typedef {object} MSEMFilterOptions\n * @property {object}         [ionization={ mf: '', em: 0, charge: 0 }] - ionization method\n * @property {boolean}        [forceIonization=false] - If true ignore existing ionizations\n * @property {number}         [precision=1000] - The precision on the experimental mass\n * @property {number}         [targetMass] - Target mass, allows to calculate error and filter results\n * @property {number[]}       [targetMasses] - Target masses: SORTED array of numbers\n * @property {number[]}       [targetIntensities] - Target intensities: SORTED array of numbers\n * @property {number}         [minMW=-Infinity] - Minimal monoisotopic mass\n * @property {number}         [maxMW=+Infinity] - Maximal monoisotopic mass\n * @property {number}         [minEM=-Infinity] - Minimal monoisotopic mass\n * @property {number}         [maxEM=+Infinity] - Maximal monoisotopic mass\n * @property {number}         [minMSEM=-Infinity] - Minimal monoisotopic mass observed by mass\n * @property {number}         [maxMSEM=+Infinity] - Maximal monoisotopic mass observed by mass\n * @property {number}         [minCharge=-Infinity] - Minimal charge\n * @property {number}         [maxCharge=+Infinity] - Maximal charge\n * @property {boolean}        [absoluteCharge=false] - If true, the charge is absolute (so between 0 and +Infinity by default)\n * @property {boolean}        [allowNegativeAtoms=false] - Allow to have negative number of atoms\n * @property {object}         [unsaturation={}]\n * @property {number}         [unsaturation.min=-Infinity] - Minimal unsaturation\n * @property {number}         [unsaturation.max=+Infinity] - Maximal unsaturation\n * @property {boolean}        [unsaturation.onlyInteger=false] - Integer unsaturation\n * @property {boolean}        [unsaturation.onlyNonInteger=false] - Non integer unsaturation\n * @property {boolean}        [atoms] - object of atom:{min, max}\n * @property {Function}       [callback] - a function that contains information about the current MF\n */\n/**\n * @param {object}             [entry={}]\n * @param {MSEMFilterOptions}  [options={}]\n * @return {boolean}\n */\n/**\n * We always recalculate msem\n */\nfunction msemMatcher(entry, options = {}) {\n    const { ionization = { mf: '', em: 0, charge: 0, atoms: {} }, forceIonization = false, precision = 1000, minCharge = Number.MIN_SAFE_INTEGER, maxCharge = Number.MAX_SAFE_INTEGER, absoluteCharge = false, unsaturation = {}, targetMass, // if present we will calculate the errors\n    targetMasses, // if present we will calculate the smallest error\n    targetIntensities, // if present it will be added in the report\n    minEM = -Infinity, maxEM = +Infinity, minMSEM = -Infinity, maxMSEM = +Infinity, minMW = -Infinity, maxMW = +Infinity, allowNegativeAtoms = false, atoms, callback, } = options;\n    if (entry.mw !== undefined && (entry.mw < minMW || entry.mw > maxMW)) {\n        return false;\n    }\n    let msInfo = (0, mf_utilities_1.getMsInfo)(entry, {\n        ionization,\n        forceIonization,\n        targetMass,\n    });\n    let ms = msInfo.ms;\n    if (entry.em !== undefined && (entry.em < minEM || entry.em > maxEM)) {\n        return false;\n    }\n    if (ms.em !== undefined && (ms.em < minMSEM || ms.em > maxMSEM)) {\n        return false;\n    }\n    if (targetMass && Math.abs(ms.ppm) > precision) {\n        return false;\n    }\n    if (ms.charge !== undefined) {\n        let charge = absoluteCharge ? Math.abs(ms.charge) : ms.charge;\n        if (charge < minCharge || charge > maxCharge)\n            return false;\n    }\n    if (unsaturation !== undefined &&\n        entry.unsaturation !== undefined &&\n        !(0, unsaturationMatcher_js_1.unsaturationMatcher)(entry, unsaturation)) {\n        return false;\n    }\n    if (entry.atoms !== undefined && atoms) {\n        // all the atoms of the entry must fit in the range\n        for (let atom in entry.atoms) {\n            if (!atoms[atom])\n                return false;\n            if (entry.atoms[atom] < atoms[atom].min)\n                return false;\n            if (entry.atoms[atom] > atoms[atom].max)\n                return false;\n        }\n    }\n    if (entry.atoms !== undefined && !allowNegativeAtoms) {\n        const ionizationAtoms = (msInfo.ionization && msInfo.ionization.atoms) || {};\n        const atomKeys = new Set(Object.keys(ionizationAtoms).concat(Object.keys(entry.atoms)));\n        for (let atom of atomKeys) {\n            if ((entry.atoms[atom] || 0) + (ionizationAtoms[atom] || 0) < 0) {\n                return false;\n            }\n        }\n    }\n    if (targetMasses && targetMasses.length > 0) {\n        let index = (0, ml_spectra_processing_1.xFindClosestIndex)(targetMasses, ms.em);\n        let closestMass = targetMasses[index];\n        msInfo = (0, mf_utilities_1.getMsInfo)(entry, {\n            ionization,\n            forceIonization,\n            targetMass: closestMass,\n        });\n        msInfo.ms.target = { mass: closestMass };\n        if (targetIntensities) {\n            msInfo.ms.target.intensity = targetIntensities[index];\n        }\n        // need to find the closest targetMasses\n        if (Math.abs(msInfo.ms.ppm) > precision)\n            return false;\n    }\n    if (callback && !callback(entry))\n        return false;\n    return msInfo;\n}\n//# sourceMappingURL=msemMatcher.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TargetMassCache = void 0;\nconst chemical_elements_1 = require(\"chemical-elements\");\n/**\n * returns all the possible neutral mass for a defined experimental (targetMass) mass\n */\nclass TargetMassCache {\n    /**\n     * @param {number} targetMass\n     * @param {Array} possibilities\n     * @param {object} [options={}]\n     * @param {boolean} [options.allowNeutral=false]\n     * @param {number} [options.charge=0]\n     * @param {number} [options.precision=100]\n     * @param {object} [options.filter={}]\n     * @param {number} [options.filter.minCharge=Number.MIN_SAFE_INTEGER]\n     * @param {number} [options.filter.maxCharge=Number.MAX_SAFE_INTEGER]\n     * @returns\n     */\n    constructor(targetMass, possibilities, options = {}) {\n        const { allowNeutral = false, // msem because em in this case !\n        filter = {}, charge = 0, precision = 100, } = options;\n        const { minCharge = Number.MIN_SAFE_INTEGER, maxCharge = Number.MAX_SAFE_INTEGER, } = filter;\n        if (!possibilities || possibilities.length === 0)\n            return;\n        let firstPossibility = possibilities[0];\n        let currentMinCharge = Math.max(minCharge, firstPossibility.minCharge + charge);\n        let currentMaxCharge = Math.min(maxCharge, firstPossibility.maxCharge + charge);\n        this.minCharge = currentMinCharge;\n        this.maxCharge = currentMaxCharge;\n        let size = this.maxCharge - this.minCharge + 1;\n        this.data = [];\n        let minMass = 0;\n        let maxMass = 0;\n        let range = (targetMass * precision) / 1e6;\n        for (let i = 0; i < size; i++) {\n            let currentCharge = i + this.minCharge;\n            if (currentCharge === 0) {\n                if (allowNeutral) {\n                    minMass = targetMass - range;\n                    maxMass = targetMass + range;\n                }\n                else {\n                    minMass = Number.MAX_SAFE_INTEGER;\n                    maxMass = Number.MIN_SAFE_INTEGER;\n                }\n            }\n            else {\n                minMass =\n                    (targetMass - range) * Math.abs(currentCharge) +\n                        chemical_elements_1.ELECTRON_MASS * currentCharge;\n                maxMass =\n                    (targetMass + range) * Math.abs(currentCharge) +\n                        chemical_elements_1.ELECTRON_MASS * currentCharge;\n            }\n            this.data.push({\n                charge: currentCharge,\n                minMass,\n                maxMass,\n            });\n        }\n    }\n    getMinMass(charge) {\n        return this.data[charge - this.minCharge]\n            ? this.data[charge - this.minCharge].minMass\n            : Number.MAX_SAFE_INTEGER;\n    }\n    getMaxMass(charge) {\n        return this.data[charge - this.minCharge]\n            ? this.data[charge - this.minCharge].maxMass\n            : Number.MIN_SAFE_INTEGER;\n    }\n}\nexports.TargetMassCache = TargetMassCache;\n//# sourceMappingURL=TargetMassCache.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.findMFsSync = findMFsSync;\nconst atom_sorter_1 = require(\"atom-sorter\");\nconst mf_matcher_1 = require(\"mf-matcher\");\nconst mf_utilities_1 = require(\"mf-utilities\");\nconst TargetMassCache_1 = require(\"./TargetMassCache\");\n/**\n * @param {number}        targetMass - Monoisotopic mass\n * @param {object}        [options={}]\n * @param {number}        [options.maxIterations=10000000] - Maximum number of iterations\n * @param {boolean}       [options.allowNeutral=true]\n * @param {boolean}       [options.uniqueMFs=true]\n * @param {number}        [options.limit=1000] - Maximum number of results\n * @param {string}        [options.ionizations=''] - string containing a comma separated list of modifications\n * @param {string|{mf:string,min:number,max:number}[]}        [options.ranges='C0-100 H0-100 O0-100 N0-100'] - range of mfs to search\n * @param {number}        [options.precision=100] - Allowed mass range based on precision\n * @param {import('mf-matcher').MSEMFilterOptions}        [options.filter={}]\n * @returns {object}\n */\nfunction findMFsSync(targetMass, options = {}) {\n    const { filter = {}, maxIterations = 1e8, limit = 1000, allowNeutral = true, // if there is no msem we use em !\n    uniqueMFs = false, // if there is no msem we use em !\n    ranges = [\n        { mf: 'C', min: 0, max: 100 },\n        { mf: 'H', min: 0, max: 100 },\n        { mf: 'O', min: 0, max: 100 },\n        { mf: 'N', min: 0, max: 100 },\n    ], } = options;\n    let targetMassCache;\n    const { minCharge = Number.MIN_SAFE_INTEGER, maxCharge = Number.MAX_SAFE_INTEGER, unsaturation = {}, atoms, callback, } = filter;\n    let filterUnsaturation = !!unsaturation;\n    // we calculate not the real unsaturation but the one before dividing by 2 + 1\n    let fakeMinUnsaturation = unsaturation.min === undefined\n        ? Number.MIN_SAFE_INTEGER\n        : (unsaturation.min - 1) * 2;\n    let fakeMaxUnsaturation = unsaturation.max === undefined\n        ? Number.MAX_SAFE_INTEGER\n        : (unsaturation.max - 1) * 2;\n    let filterCharge = minCharge !== Number.MIN_SAFE_INTEGER ||\n        maxCharge !== Number.MAX_SAFE_INTEGER;\n    let advancedFilter;\n    if (atoms || callback) {\n        advancedFilter = {\n            atoms,\n            callback,\n        };\n    }\n    let result = {\n        mfs: [],\n        info: {\n            numberMFEvaluated: 0,\n            numberResults: 0,\n        },\n    };\n    let orderMapping = []; // used to sort the atoms\n    // we need to make the processing for all the ionizations\n    let ionizations = (0, mf_utilities_1.preprocessIonizations)(options.ionizations);\n    for (let ionization of ionizations) {\n        let currentIonization = {\n            currentMonoisotopicMass: ionization.em || 0,\n            currentCharge: ionization.charge,\n            currentUnsaturation: 0, // we don't take into account the unsaturation of the ionization agent\n        };\n        // if (DEBUG) console.log('new ionization', ionization.mf, ionization.em, ionization.charge);\n        // ionization em and charge will be used to set the first atom value\n        let possibilities = (0, mf_utilities_1.preprocessRanges)(ranges);\n        orderMapping = getOrderMapping(possibilities);\n        if (possibilities.length === 0)\n            return { mfs: [] };\n        targetMassCache = new TargetMassCache_1.TargetMassCache(targetMass, possibilities, {\n            ...options,\n            charge: ionization.charge,\n        });\n        let theEnd = false;\n        let maxPosition = possibilities.length;\n        let lastPosition = possibilities.length - 1;\n        let currentPosition = 0;\n        let currentAtom;\n        let previousAtom;\n        let lastPossibility = possibilities[lastPosition];\n        initializePossibilities(possibilities, currentIonization, targetMassCache);\n        //  if (DEBUG) console.log('possibilities', possibilities.map((a) => `${a.mf + a.originalMinCount}-${a.originalMaxCount}`));\n        let isValid = false; // designed so that the first time it is not a valid solution\n        while (!theEnd) {\n            if (result.info.numberMFEvaluated++ > maxIterations) {\n                throw new Error(`Iteration number is over the current maximum of: ${maxIterations}`);\n            }\n            if (filterUnsaturation) {\n                let unsaturationValue = lastPossibility.currentUnsaturation;\n                let isOdd = Math.abs(unsaturationValue % 2);\n                if ((unsaturation.onlyInteger && isOdd === 1) ||\n                    (unsaturation.onlyNonInteger && isOdd === 0) ||\n                    fakeMinUnsaturation > unsaturationValue ||\n                    fakeMaxUnsaturation < unsaturationValue) {\n                    isValid = false;\n                }\n            }\n            if (filterCharge &&\n                (lastPossibility.currentCharge < minCharge ||\n                    lastPossibility.currentCharge > maxCharge)) {\n                isValid = false;\n            }\n            if (isValid) {\n                let minMass = targetMassCache.getMinMass(lastPossibility.currentCharge);\n                let maxMass = targetMassCache.getMaxMass(lastPossibility.currentCharge);\n                if (lastPossibility.currentMonoisotopicMass < minMass ||\n                    lastPossibility.currentMonoisotopicMass > maxMass) {\n                    isValid = false;\n                }\n            }\n            if (isValid) {\n                result.info.numberResults++;\n                let newResult = getResult(possibilities, targetMass, allowNeutral, ionization, orderMapping);\n                if (advancedFilter) {\n                    isValid = (0, mf_matcher_1.msemMatcher)(newResult, advancedFilter) !== false;\n                }\n                if (isValid) {\n                    result.mfs.push(newResult);\n                    if (result.mfs.length > 2 * limit) {\n                        if (uniqueMFs)\n                            ensureUniqueMF(result);\n                        result.mfs.sort((a, b) => Math.abs(a.ms.ppm) - Math.abs(b.ms.ppm));\n                        result.mfs.length = limit;\n                    }\n                }\n            }\n            isValid = true;\n            // we need to set up all the arrays if possible\n            while (currentPosition < maxPosition && currentPosition >= 0) {\n                currentAtom = possibilities[currentPosition];\n                previousAtom =\n                    currentPosition === 0\n                        ? currentIonization\n                        : possibilities[currentPosition - 1];\n                if (currentAtom.currentCount < currentAtom.currentMaxCount) {\n                    currentAtom.currentCount++;\n                    updateCurrentAtom(currentAtom, previousAtom);\n                    if (currentPosition < lastPosition) {\n                        currentPosition++;\n                        setCurrentMinMax(possibilities[currentPosition], possibilities[currentPosition - 1], targetMassCache);\n                    }\n                    else {\n                        break;\n                    }\n                }\n                else {\n                    currentPosition--;\n                }\n            }\n            if (currentPosition < 0) {\n                theEnd = true;\n            }\n        }\n    }\n    if (uniqueMFs)\n        ensureUniqueMF(result);\n    result.mfs.sort((a, b) => Math.abs(a.ms.ppm) - Math.abs(b.ms.ppm));\n    if (result.mfs.length > limit) {\n        result.mfs.length = limit;\n    }\n    for (const mf of result.mfs) {\n        delete mf.currentCounts;\n    }\n    return result;\n}\n/**\n * Ensure that we have only once the same MF\n * In order to improve the speed we just consider the em\n * @param {object} result\n */\nfunction ensureUniqueMF(result) {\n    result.mfs.sort((a, b) => a.em - b.em);\n    let previousEM = 0;\n    let bestCounts = [];\n    const mfs = [];\n    next: for (let current of result.mfs) {\n        if (current.em - previousEM > 1e-8) {\n            previousEM = current.em;\n            bestCounts = current.currentCounts;\n            mfs.push(current);\n        }\n        else {\n            for (let i = 0; i < current.currentCounts.length; i++) {\n                // better priority ???\n                if (current.currentCounts[i] > bestCounts[i]) {\n                    mfs.pop();\n                    mfs.push(current);\n                    bestCounts = current.currentCounts;\n                }\n                else if (current.currentCounts[i] < bestCounts[i]) {\n                    continue next;\n                }\n            }\n        }\n    }\n    result.mfs = mfs;\n}\nfunction updateCurrentAtom(currentAtom, previousAtom) {\n    currentAtom.currentMonoisotopicMass =\n        previousAtom.currentMonoisotopicMass +\n            currentAtom.em * currentAtom.currentCount;\n    currentAtom.currentCharge =\n        previousAtom.currentCharge + currentAtom.charge * currentAtom.currentCount;\n    currentAtom.currentUnsaturation =\n        previousAtom.currentUnsaturation +\n            currentAtom.unsaturation * currentAtom.currentCount;\n}\nfunction getResult(possibilities, targetMass, allowNeutralMolecules, ionization, orderMapping) {\n    let lastPossibility = possibilities.at(-1);\n    let result = {\n        em: lastPossibility.currentMonoisotopicMass - ionization.em,\n        unsaturation: lastPossibility.currentUnsaturation,\n        mf: '',\n        charge: lastPossibility.currentCharge - ionization.charge,\n        ionization,\n        atoms: {},\n        groups: {},\n        currentCounts: possibilities.map((possibility) => possibility.currentCount),\n    };\n    // we check that the first time we meet the ionization group it does not end\n    // in the final result\n    for (let i = 0; i < possibilities.length; i++) {\n        let possibility = possibilities[orderMapping[i]];\n        if (possibility.currentCount !== 0) {\n            if (possibility.isGroup) {\n                if (possibility.currentCount === 1) {\n                    result.mf += `${possibility.mf}`;\n                }\n                else if (possibility.mf.match(/^\\([^()]*\\)$/)) {\n                    result.mf += `${possibility.mf}${possibility.currentCount}`;\n                }\n                else {\n                    result.mf += `(${possibility.mf})${possibility.currentCount}`;\n                }\n                if (result.groups[possibility.mf]) {\n                    result.groups[possibility.mf] += possibility.currentCount;\n                }\n                else {\n                    result.groups[possibility.mf] = possibility.currentCount;\n                }\n            }\n            else {\n                result.mf += possibility.mf;\n                if (possibility.currentCount !== 1) {\n                    result.mf += possibility.currentCount;\n                }\n            }\n            for (let atom in possibility.atoms) {\n                if (result.atoms[atom]) {\n                    result.atoms[atom] +=\n                        possibility.atoms[atom] * possibility.currentCount;\n                }\n                else {\n                    result.atoms[atom] =\n                        possibility.atoms[atom] * possibility.currentCount;\n                }\n            }\n        }\n    }\n    result.unsaturation = (result.unsaturation + Math.abs(result.charge)) / 2 + 1;\n    result.ms = (0, mf_utilities_1.getMsInfo)(result, { targetMass, allowNeutralMolecules }).ms;\n    return result;\n}\nfunction setCurrentMinMax(currentAtom, previousAtom, targetMassCache) {\n    // the current min max can only be optimize if the charge will not change anymore\n    // and the currentAtom.em >= 0\n    if (currentAtom.innerCharge === true ||\n        currentAtom.charge !== 0 ||\n        currentAtom.em < 0) {\n        currentAtom.currentMinCount = currentAtom.originalMinCount;\n        currentAtom.currentMaxCount = currentAtom.originalMaxCount;\n        currentAtom.currentCount = currentAtom.currentMinCount - 1;\n    }\n    else {\n        // no more change of charge, we can optimize\n        let currentMass = previousAtom !== undefined ? previousAtom.currentMonoisotopicMass : 0;\n        let currentCharge = previousAtom !== undefined ? previousAtom.currentCharge : 0;\n        currentAtom.currentMinCount = Math.max(Math.floor((targetMassCache.getMinMass(currentCharge) -\n            currentMass -\n            currentAtom.maxInnerMass) /\n            currentAtom.em), currentAtom.originalMinCount);\n        currentAtom.currentMaxCount = Math.min(Math.floor((targetMassCache.getMaxMass(currentCharge) -\n            currentMass -\n            currentAtom.minInnerMass) /\n            currentAtom.em), currentAtom.originalMaxCount);\n        currentAtom.currentCount = currentAtom.currentMinCount - 1;\n    }\n}\nfunction initializePossibilities(possibilities, currentIonization, targetMassCache) {\n    for (let i = 0; i < possibilities.length; i++) {\n        if (i === 0) {\n            updateCurrentAtom(possibilities[i], currentIonization);\n            setCurrentMinMax(possibilities[i], currentIonization, targetMassCache);\n        }\n        else {\n            updateCurrentAtom(possibilities[i], possibilities[i - 1]);\n        }\n    }\n}\n// eslint-disable-next-line no-unused-vars\nfunction possibilitiesToString(possibilities) {\n    return possibilities.map((a) => [\n        `mf:${a.mf}`,\n        `current:${a.currentCount}`,\n        `min:${a.currentMinCount}`,\n        `max:${a.currentMaxCount}`,\n        `charge:${a.currentCharge}`,\n    ]);\n}\nfunction getOrderMapping(possibilities) {\n    let mapping = possibilities.map((p, i) => ({ atom: p.mf, index: i }));\n    mapping.sort((a, b) => {\n        return (0, atom_sorter_1.atomSorter)(a.atom, b.atom);\n    });\n    return mapping.map((a) => a.index);\n}\n//# sourceMappingURL=findMFsSync.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.findMFs = findMFs;\nconst findMFsSync_1 = require(\"./findMFsSync\");\n/** @typedef {import('./types').MFResult} MFResult */\n/** @typedef {import('./types').MFFinderOptions} MFFinderOptions */\n/**\n * @param {number} targetMass - Monoisotopic mass\n * @param {MFFinderOptions} [options={}]\n * @returns {Promise<MFResult[]>}\n */\nasync function findMFs(targetMass, options = {}) {\n    return (0, findMFsSync_1.findMFsSync)(targetMass, options);\n}\n//# sourceMappingURL=findMFs.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.mfIncluded = mfIncluded;\nconst mf_parser_1 = require(\"mf-parser\");\nconst findMFsSync_js_1 = require(\"./findMFsSync.js\");\n/**\n * @param {string}        mf - the molecular formula to check\n * @param {string}        range - the range of MF to explore\n * @param {object}        [options={}]\n * @param {number}        [options.maxIterations=10000000] - Maximum number of iterations\n * @param {boolean}       [options.allowNeutral=true]\n * @param {string}        [options.ionizations=''] - string containing a comma separated list of modifications\n * @param {object}        [options.filter={}]\n * @param {number}        [options.filter.minCharge=-Infinity] - Minimal charge\n * @param {number}        [options.filter.maxCharge=+Infinity] - Maximal charge\n * @param {boolean}       [options.filter.absoluteCharge=false] - If true, the charge is absolute (so between 0 and +Infinity by default)\n * @param {object}        [options.filter.unsaturation={}]\n * @param {number}        [options.filter.unsaturation.min=-Infinity] - Minimal unsaturation\n * @param {number}        [options.filter.unsaturation.max=+Infinity] - Maximal unsaturation\n * @param {boolean}       [options.filter.unsaturation.onlyInteger=false] - Integer unsaturation\n * @param {boolean}       [options.filter.unsaturation.onlyNonInteger=false] - Non integer unsaturation\n * @param {object}        [options.filter.atoms] - object of atom:{min, max}\n * @param {function}      [options.filter.callback] - a function to filter the MF\n * @returns {boolean}\n */\nfunction mfIncluded(mf, range, options = {}) {\n    let targetEM = new mf_parser_1.MF(mf).getInfo().monoisotopicMass;\n    let results = (0, findMFsSync_js_1.findMFsSync)(targetEM, {\n        allowNeutral: true,\n        ...options,\n        ranges: range,\n        precision: 0.0000001,\n        limit: 1,\n    });\n    return results.mfs.length > 0;\n}\n//# sourceMappingURL=mfIncluded.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fromMonoisotopicMass = fromMonoisotopicMass;\nconst mf_finder_1 = require(\"mf-finder\");\n/**\n * Generates a database 'monoisotopic' from a monoisotopic mass and various options\n * @param {number|string|array}    masses - Monoisotopic mass\n * @param {object}    [options={}]\n * @param {number}    [options.maxIterations=10000000] - Maximum number of iterations\n * @param {function}  [options.onStep] - Callback to do after each step\n * @param {boolean}   [options.allowNeutral=true]\n * @param {boolean}   [options.uniqueMFs=true]\n * @param {number}    [options.limit=1000] - Maximum number of results\n * @param {string}    [options.ionizations=''] - string containing a comma separated list of modifications\n * @param {string}    [options.ranges='C0-100 H0-100 O0-100 N0-100'] - range of mfs to search\n * @param {number}    [options.precision=100] - Allowed mass range based on precision\n * @param {object}    [options.filter={}]\n * @param {number}    [options.filter.minCharge=-Infinity] - Minimal charge\n * @param {number}    [options.filter.maxCharge=+Infinity] - Maximal charge\n * @param {boolean}   [options.filter.absoluteCharge=false] - If true, the charge is absolute (so between 0 and +Infinity by default)\n * @param {object}    [options.filter.unsaturation={}]\n * @param {number}    [options.filter.unsaturation.min=-Infinity] - Minimal unsaturation\n * @param {number}    [options.filter.unsaturation.max=+Infinity] - Maximal unsaturation\n * @param {boolean}    [options.filter.unsaturation.onlyInteger=false] - Integer unsaturation\n * @param {boolean}    [options.filter.unsaturation.onlyNonInteger=false] - Non integer unsaturation\n * @param {object}    [options.filter.atoms] - object of atom:{min, max}\n * @param {function}  [options.filter.callback] - a function to filter the MF\n * @returns {Promise}\n */\nasync function fromMonoisotopicMass(masses, options = {}) {\n    if (typeof masses === 'string') {\n        masses = masses.split(/[\\t\\n\\r ,;]/).map(Number);\n    }\n    if (typeof masses === 'number') {\n        masses = [masses];\n    }\n    let results = [];\n    for (let mass of masses) {\n        results.push(await (0, mf_finder_1.findMFs)(mass, options));\n    }\n    return {\n        mfs: results.flatMap((entry) => entry.mfs),\n        info: {\n            numberMFEvaluated: results.reduce((sum, current) => sum + current.info.numberMFEvaluated, 0),\n            numberResults: results.reduce((sum, current) => sum + current.info.numberResults, 0),\n        },\n    };\n}\n//# sourceMappingURL=fromMonoisotopicMass.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getPeaks = getPeaks;\nconst ml_spectra_processing_1 = require(\"ml-spectra-processing\");\n/**\n * Filter the array of peaks\n * @param {array} peaks - array of all the peaks\n * @param {object} [options={}]\n * @param {number} [options.from] - min X value of the window to consider\n * @param {number} [options.to] - max X value of the window to consider\n * @param {number} [options.threshold=0.01] - minimal intensity compare to base peak\n * @param {number} [options.limit=undefined] - maximal number of peaks (based on intensity)\n * @param {number} [options.sumValue] // if sumValue is defined, maxValue is ignored\n * @returns {array} - copy of peaks with 'close' annotation\n */\nfunction getPeaks(peaks, options = {}) {\n    const { from = (0, ml_spectra_processing_1.xyObjectMinXPoint)(peaks).x, to = (0, ml_spectra_processing_1.xyObjectMaxXPoint)(peaks).x, threshold = 0.01, limit, sumValue, } = options;\n    let maxY = Number.MIN_SAFE_INTEGER;\n    for (let peak of peaks) {\n        if (peak.y > maxY)\n            maxY = peak.y;\n    }\n    let minY = maxY * threshold;\n    peaks = peaks.filter((peak) => peak.x >= from && peak.x <= to && peak.y >= minY);\n    if (limit && peaks.length > limit) {\n        peaks.sort((a, b) => b.y - a.y);\n        peaks = peaks.slice(0, limit);\n    }\n    if (sumValue) {\n        peaks = structuredClone(peaks);\n        const currentSum = (0, ml_spectra_processing_1.xyObjectSumY)(peaks);\n        const ratio = sumValue / currentSum;\n        for (const peak of peaks) {\n            peak.y *= ratio;\n        }\n    }\n    return peaks.toSorted((a, b) => a.x - b.x);\n}\n//# sourceMappingURL=getPeaks.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getFragmentPeaks = getFragmentPeaks;\nconst mf_parser_1 = require(\"mf-parser\");\nconst fromMonoisotopicMass_1 = require(\"./from/fromMonoisotopicMass\");\nconst getPeaks_js_1 = require(\"./getPeaks.js\");\n/**\n * Filter the array of peaks\n * @param {array} peaks - array of all the peaks\n * @param {string} mf - Molecular formula of the parent molecule\n * @param {object} [options={}]\n * @param {number} [options.from] - min X value of the window to consider\n * @param {number} [options.to] - max X value of the window to consider\n * @param {number} [options.threshold=0.01] - minimal intensity compare to base peak\n * @param {number} [options.limit=undefined] - maximal number of peaks (based on intensity)\n * @param {string} [options.ionizations]\n * @param {number} [options.precision]\n * @returns {array} - copy of peaks with 'close' annotation\n */\nasync function getFragmentPeaks(peaks, mf, options = {}) {\n    const { ionizations = '', precision } = options;\n    const mfInfo = new mf_parser_1.MF(mf).getInfo();\n    const ranges = Object.keys(mfInfo.atoms)\n        .map((key) => `${key}0-${mfInfo.atoms[key]}`)\n        .join(' ');\n    peaks = (0, getPeaks_js_1.getPeaks)(peaks, options);\n    for (let peak of peaks) {\n        const { mfs } = await (0, fromMonoisotopicMass_1.fromMonoisotopicMass)(peak.x, {\n            precision,\n            ranges,\n            ionizations,\n        });\n        peak.mfs = mfs;\n    }\n    peaks = peaks.filter((peak) => peak.mfs.length > 0);\n    return peaks;\n}\n//# sourceMappingURL=getFragmentPeaks.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getMassRemainder = getMassRemainder;\nconst ml_spectra_processing_1 = require(\"ml-spectra-processing\");\n/**\n * Remove an integer number of time the specifiedd monoisotopic mass.\n * Mass remainder analysis (MARA): https://doi.org/10.1021/acs.analchem.7b04730\n * @param {object} spectrum\n * @param {number} mass\n * @param {object} [options={}]\n * @param {number} [options.delta=0.001]\n */\nfunction getMassRemainder(spectrum, mass, options = {}) {\n    const { delta = 0.001 } = options;\n    const x = spectrum.x.slice();\n    const y = spectrum.y;\n    for (let i = 0; i < x.length; i++) {\n        const factor = Math.floor(x[i] / mass);\n        x[i] = x[i] - factor * mass;\n    }\n    // we sort and join\n    return (0, ml_spectra_processing_1.xyJoinX)((0, ml_spectra_processing_1.xySortX)({ x, y }), { delta });\n}\n//# sourceMappingURL=getMassRemainder.js.map","export function calculateOverlapFromDiff(diffs) {\n    if (diffs[1].length === 0)\n        return 0;\n    let sumPos = 0;\n    for (let i = 0; i < diffs[1].length; i++) {\n        sumPos += Math.abs(diffs[1][i]);\n    }\n    return 1 - sumPos;\n}\n//# sourceMappingURL=calculateOverlapFromDiff.js.map","/**\n * This code requires the use of an array like  [[x1,y1],[x2,y2], ...]\n * If it is not the right format, we will just convert it\n * Otherwise we return the correct format\n * @param {Peaks} peaks\n * @returns [number[], number[]]\n */\nexport function checkPeaks(peaks) {\n    // if it is already a 2D array of points, we just return them\n    if (Array.isArray(peaks) && Array.isArray(peaks[0]) && peaks.length === 2) {\n        return peaks;\n    }\n    if (Array.isArray(peaks.x) && Array.isArray(peaks.y)) {\n        return [peaks.x, peaks.y];\n    }\n    const x = new Array(peaks.length);\n    const y = new Array(peaks.length);\n    for (let i = 0; i < peaks.length; i++) {\n        x[i] = peaks[i][0];\n        y[i] = peaks[i][1];\n    }\n    return [x, y];\n}\n//# sourceMappingURL=checkPeaks.js.map","export function extract(array, from, to) {\n    const newArray = [[], []];\n    let j = 0;\n    const length = array[0] ? array[0].length : 0;\n    for (let i = 0; i < length; i++) {\n        if ((!from || array[0][i] >= from) && (!to || array[0][i] <= to)) {\n            newArray[0][j] = array[0][i];\n            newArray[1][j] = array[1][i];\n            j++;\n        }\n    }\n    return newArray;\n}\n//# sourceMappingURL=extract.js.map","// returns an new array based on array1 where there is a peak of array2 at a distance under width/2\nexport function getCommonArray(array1, array2, width) {\n    const newArray = [[], []];\n    let pos2 = 0;\n    width /= 2;\n    let j = 0;\n    const array1Length = array1[0] ? array1[0].length : 0;\n    const array2Length = array2[0] ? array2[0].length : 0;\n    for (let i = 0; i < array1Length; i++) {\n        while (pos2 < array2Length && array1[0][i] > array2[0][pos2] + width) {\n            pos2++;\n        }\n        if (pos2 < array2Length && array1[0][i] > array2[0][pos2] - width) {\n            newArray[0][j] = array1[0][i];\n            newArray[1][j] = array1[1][i];\n            j++;\n        }\n    }\n    return newArray;\n}\n//# sourceMappingURL=getCommonArray.js.map","'use strict';\n\nfunction compareNumbers(a, b) {\n    return a - b;\n}\n\n/**\n * Computes the sum of the given values\n * @param {Array} values\n * @returns {number}\n */\nexports.sum = function sum(values) {\n    var sum = 0;\n    for (var i = 0; i < values.length; i++) {\n        sum += values[i];\n    }\n    return sum;\n};\n\n/**\n * Computes the maximum of the given values\n * @param {Array} values\n * @returns {number}\n */\nexports.max = function max(values) {\n    var max = values[0];\n    var l = values.length;\n    for (var i = 1; i < l; i++) {\n        if (values[i] > max) max = values[i];\n    }\n    return max;\n};\n\n/**\n * Computes the minimum of the given values\n * @param {Array} values\n * @returns {number}\n */\nexports.min = function min(values) {\n    var min = values[0];\n    var l = values.length;\n    for (var i = 1; i < l; i++) {\n        if (values[i] < min) min = values[i];\n    }\n    return min;\n};\n\n/**\n * Computes the min and max of the given values\n * @param {Array} values\n * @returns {{min: number, max: number}}\n */\nexports.minMax = function minMax(values) {\n    var min = values[0];\n    var max = values[0];\n    var l = values.length;\n    for (var i = 1; i < l; i++) {\n        if (values[i] < min) min = values[i];\n        if (values[i] > max) max = values[i];\n    }\n    return {\n        min: min,\n        max: max\n    };\n};\n\n/**\n * Computes the arithmetic mean of the given values\n * @param {Array} values\n * @returns {number}\n */\nexports.arithmeticMean = function arithmeticMean(values) {\n    var sum = 0;\n    var l = values.length;\n    for (var i = 0; i < l; i++) {\n        sum += values[i];\n    }\n    return sum / l;\n};\n\n/**\n * {@link arithmeticMean}\n */\nexports.mean = exports.arithmeticMean;\n\n/**\n * Computes the geometric mean of the given values\n * @param {Array} values\n * @returns {number}\n */\nexports.geometricMean = function geometricMean(values) {\n    var mul = 1;\n    var l = values.length;\n    for (var i = 0; i < l; i++) {\n        mul *= values[i];\n    }\n    return Math.pow(mul, 1 / l);\n};\n\n/**\n * Computes the mean of the log of the given values\n * If the return value is exponentiated, it gives the same result as the\n * geometric mean.\n * @param {Array} values\n * @returns {number}\n */\nexports.logMean = function logMean(values) {\n    var lnsum = 0;\n    var l = values.length;\n    for (var i = 0; i < l; i++) {\n        lnsum += Math.log(values[i]);\n    }\n    return lnsum / l;\n};\n\n/**\n * Computes the weighted grand mean for a list of means and sample sizes\n * @param {Array} means - Mean values for each set of samples\n * @param {Array} samples - Number of original values for each set of samples\n * @returns {number}\n */\nexports.grandMean = function grandMean(means, samples) {\n    var sum = 0;\n    var n = 0;\n    var l = means.length;\n    for (var i = 0; i < l; i++) {\n        sum += samples[i] * means[i];\n        n += samples[i];\n    }\n    return sum / n;\n};\n\n/**\n * Computes the truncated mean of the given values using a given percentage\n * @param {Array} values\n * @param {number} percent - The percentage of values to keep (range: [0,1])\n * @param {boolean} [alreadySorted=false]\n * @returns {number}\n */\nexports.truncatedMean = function truncatedMean(values, percent, alreadySorted) {\n    if (alreadySorted === undefined) alreadySorted = false;\n    if (!alreadySorted) {\n        values = [].concat(values).sort(compareNumbers);\n    }\n    var l = values.length;\n    var k = Math.floor(l * percent);\n    var sum = 0;\n    for (var i = k; i < (l - k); i++) {\n        sum += values[i];\n    }\n    return sum / (l - 2 * k);\n};\n\n/**\n * Computes the harmonic mean of the given values\n * @param {Array} values\n * @returns {number}\n */\nexports.harmonicMean = function harmonicMean(values) {\n    var sum = 0;\n    var l = values.length;\n    for (var i = 0; i < l; i++) {\n        if (values[i] === 0) {\n            throw new RangeError('value at index ' + i + 'is zero');\n        }\n        sum += 1 / values[i];\n    }\n    return l / sum;\n};\n\n/**\n * Computes the contraharmonic mean of the given values\n * @param {Array} values\n * @returns {number}\n */\nexports.contraHarmonicMean = function contraHarmonicMean(values) {\n    var r1 = 0;\n    var r2 = 0;\n    var l = values.length;\n    for (var i = 0; i < l; i++) {\n        r1 += values[i] * values[i];\n        r2 += values[i];\n    }\n    if (r2 < 0) {\n        throw new RangeError('sum of values is negative');\n    }\n    return r1 / r2;\n};\n\n/**\n * Computes the median of the given values\n * @param {Array} values\n * @param {boolean} [alreadySorted=false]\n * @returns {number}\n */\nexports.median = function median(values, alreadySorted) {\n    if (alreadySorted === undefined) alreadySorted = false;\n    if (!alreadySorted) {\n        values = [].concat(values).sort(compareNumbers);\n    }\n    var l = values.length;\n    var half = Math.floor(l / 2);\n    if (l % 2 === 0) {\n        return (values[half - 1] + values[half]) * 0.5;\n    } else {\n        return values[half];\n    }\n};\n\n/**\n * Computes the variance of the given values\n * @param {Array} values\n * @param {boolean} [unbiased=true] - if true, divide by (n-1); if false, divide by n.\n * @returns {number}\n */\nexports.variance = function variance(values, unbiased) {\n    if (unbiased === undefined) unbiased = true;\n    var theMean = exports.mean(values);\n    var theVariance = 0;\n    var l = values.length;\n\n    for (var i = 0; i < l; i++) {\n        var x = values[i] - theMean;\n        theVariance += x * x;\n    }\n\n    if (unbiased) {\n        return theVariance / (l - 1);\n    } else {\n        return theVariance / l;\n    }\n};\n\n/**\n * Computes the standard deviation of the given values\n * @param {Array} values\n * @param {boolean} [unbiased=true] - if true, divide by (n-1); if false, divide by n.\n * @returns {number}\n */\nexports.standardDeviation = function standardDeviation(values, unbiased) {\n    return Math.sqrt(exports.variance(values, unbiased));\n};\n\nexports.standardError = function standardError(values) {\n    return exports.standardDeviation(values) / Math.sqrt(values.length);\n};\n\n/**\n * IEEE Transactions on biomedical engineering, vol. 52, no. 1, january 2005, p. 76-\n * Calculate the standard deviation via the Median of the absolute deviation\n *  The formula for the standard deviation only holds for Gaussian random variables.\n * @returns {{mean: number, stdev: number}}\n */\nexports.robustMeanAndStdev = function robustMeanAndStdev(y) {\n    var mean = 0, stdev = 0;\n    var length = y.length, i = 0;\n    for (i = 0; i < length; i++) {\n        mean += y[i];\n    }\n    mean /= length;\n    var averageDeviations = new Array(length);\n    for (i = 0; i < length; i++)\n        averageDeviations[i] = Math.abs(y[i] - mean);\n    averageDeviations.sort(compareNumbers);\n    if (length % 2 === 1) {\n        stdev = averageDeviations[(length - 1) / 2] / 0.6745;\n    } else {\n        stdev = 0.5 * (averageDeviations[length / 2] + averageDeviations[length / 2 - 1]) / 0.6745;\n    }\n\n    return {\n        mean: mean,\n        stdev: stdev\n    };\n};\n\nexports.quartiles = function quartiles(values, alreadySorted) {\n    if (typeof (alreadySorted) === 'undefined') alreadySorted = false;\n    if (!alreadySorted) {\n        values = [].concat(values).sort(compareNumbers);\n    }\n\n    var quart = values.length / 4;\n    var q1 = values[Math.ceil(quart) - 1];\n    var q2 = exports.median(values, true);\n    var q3 = values[Math.ceil(quart * 3) - 1];\n\n    return {q1: q1, q2: q2, q3: q3};\n};\n\nexports.pooledStandardDeviation = function pooledStandardDeviation(samples, unbiased) {\n    return Math.sqrt(exports.pooledVariance(samples, unbiased));\n};\n\nexports.pooledVariance = function pooledVariance(samples, unbiased) {\n    if (typeof (unbiased) === 'undefined') unbiased = true;\n    var sum = 0;\n    var length = 0, l = samples.length;\n    for (var i = 0; i < l; i++) {\n        var values = samples[i];\n        var vari = exports.variance(values);\n\n        sum += (values.length - 1) * vari;\n\n        if (unbiased)\n            length += values.length - 1;\n        else\n            length += values.length;\n    }\n    return sum / length;\n};\n\nexports.mode = function mode(values) {\n    var l = values.length,\n        itemCount = new Array(l),\n        i;\n    for (i = 0; i < l; i++) {\n        itemCount[i] = 0;\n    }\n    var itemArray = new Array(l);\n    var count = 0;\n\n    for (i = 0; i < l; i++) {\n        var index = itemArray.indexOf(values[i]);\n        if (index >= 0)\n            itemCount[index]++;\n        else {\n            itemArray[count] = values[i];\n            itemCount[count] = 1;\n            count++;\n        }\n    }\n\n    var maxValue = 0, maxIndex = 0;\n    for (i = 0; i < count; i++) {\n        if (itemCount[i] > maxValue) {\n            maxValue = itemCount[i];\n            maxIndex = i;\n        }\n    }\n\n    return itemArray[maxIndex];\n};\n\nexports.covariance = function covariance(vector1, vector2, unbiased) {\n    if (typeof (unbiased) === 'undefined') unbiased = true;\n    var mean1 = exports.mean(vector1);\n    var mean2 = exports.mean(vector2);\n\n    if (vector1.length !== vector2.length)\n        throw 'Vectors do not have the same dimensions';\n\n    var cov = 0, l = vector1.length;\n    for (var i = 0; i < l; i++) {\n        var x = vector1[i] - mean1;\n        var y = vector2[i] - mean2;\n        cov += x * y;\n    }\n\n    if (unbiased)\n        return cov / (l - 1);\n    else\n        return cov / l;\n};\n\nexports.skewness = function skewness(values, unbiased) {\n    if (typeof (unbiased) === 'undefined') unbiased = true;\n    var theMean = exports.mean(values);\n\n    var s2 = 0, s3 = 0, l = values.length;\n    for (var i = 0; i < l; i++) {\n        var dev = values[i] - theMean;\n        s2 += dev * dev;\n        s3 += dev * dev * dev;\n    }\n    var m2 = s2 / l;\n    var m3 = s3 / l;\n\n    var g = m3 / (Math.pow(m2, 3 / 2.0));\n    if (unbiased) {\n        var a = Math.sqrt(l * (l - 1));\n        var b = l - 2;\n        return (a / b) * g;\n    } else {\n        return g;\n    }\n};\n\nexports.kurtosis = function kurtosis(values, unbiased) {\n    if (typeof (unbiased) === 'undefined') unbiased = true;\n    var theMean = exports.mean(values);\n    var n = values.length, s2 = 0, s4 = 0;\n\n    for (var i = 0; i < n; i++) {\n        var dev = values[i] - theMean;\n        s2 += dev * dev;\n        s4 += dev * dev * dev * dev;\n    }\n    var m2 = s2 / n;\n    var m4 = s4 / n;\n\n    if (unbiased) {\n        var v = s2 / (n - 1);\n        var a = (n * (n + 1)) / ((n - 1) * (n - 2) * (n - 3));\n        var b = s4 / (v * v);\n        var c = ((n - 1) * (n - 1)) / ((n - 2) * (n - 3));\n\n        return a * b - 3 * c;\n    } else {\n        return m4 / (m2 * m2) - 3;\n    }\n};\n\nexports.entropy = function entropy(values, eps) {\n    if (typeof (eps) === 'undefined') eps = 0;\n    var sum = 0, l = values.length;\n    for (var i = 0; i < l; i++)\n        sum += values[i] * Math.log(values[i] + eps);\n    return -sum;\n};\n\nexports.weightedMean = function weightedMean(values, weights) {\n    var sum = 0, l = values.length;\n    for (var i = 0; i < l; i++)\n        sum += values[i] * weights[i];\n    return sum;\n};\n\nexports.weightedStandardDeviation = function weightedStandardDeviation(values, weights) {\n    return Math.sqrt(exports.weightedVariance(values, weights));\n};\n\nexports.weightedVariance = function weightedVariance(values, weights) {\n    var theMean = exports.weightedMean(values, weights);\n    var vari = 0, l = values.length;\n    var a = 0, b = 0;\n\n    for (var i = 0; i < l; i++) {\n        var z = values[i] - theMean;\n        var w = weights[i];\n\n        vari += w * (z * z);\n        b += w;\n        a += w * w;\n    }\n\n    return vari * (b / (b * b - a));\n};\n\nexports.center = function center(values, inPlace) {\n    if (typeof (inPlace) === 'undefined') inPlace = false;\n\n    var result = values;\n    if (!inPlace)\n        result = [].concat(values);\n\n    var theMean = exports.mean(result), l = result.length;\n    for (var i = 0; i < l; i++)\n        result[i] -= theMean;\n};\n\nexports.standardize = function standardize(values, standardDev, inPlace) {\n    if (typeof (standardDev) === 'undefined') standardDev = exports.standardDeviation(values);\n    if (typeof (inPlace) === 'undefined') inPlace = false;\n    var l = values.length;\n    var result = inPlace ? values : new Array(l);\n    for (var i = 0; i < l; i++)\n        result[i] = values[i] / standardDev;\n    return result;\n};\n\nexports.cumulativeSum = function cumulativeSum(array) {\n    var l = array.length;\n    var result = new Array(l);\n    result[0] = array[0];\n    for (var i = 1; i < l; i++)\n        result[i] = result[i - 1] + array[i];\n    return result;\n};\n","'use strict';\n\nvar arrayStat = require('./array');\n\nfunction compareNumbers(a, b) {\n    return a - b;\n}\n\nexports.max = function max(matrix) {\n    var max = -Infinity;\n    for (var i = 0; i < matrix.length; i++) {\n        for (var j = 0; j < matrix[i].length; j++) {\n            if (matrix[i][j] > max) max = matrix[i][j];\n        }\n    }\n    return max;\n};\n\nexports.min = function min(matrix) {\n    var min = Infinity;\n    for (var i = 0; i < matrix.length; i++) {\n        for (var j = 0; j < matrix[i].length; j++) {\n            if (matrix[i][j] < min) min = matrix[i][j];\n        }\n    }\n    return min;\n};\n\nexports.minMax = function minMax(matrix) {\n    var min = Infinity;\n    var max = -Infinity;\n    for (var i = 0; i < matrix.length; i++) {\n        for (var j = 0; j < matrix[i].length; j++) {\n            if (matrix[i][j] < min) min = matrix[i][j];\n            if (matrix[i][j] > max) max = matrix[i][j];\n        }\n    }\n    return {\n        min:min,\n        max:max\n    };\n};\n\nexports.entropy = function entropy(matrix, eps) {\n    if (typeof (eps) === 'undefined') {\n        eps = 0;\n    }\n    var sum = 0,\n        l1 = matrix.length,\n        l2 = matrix[0].length;\n    for (var i = 0; i < l1; i++) {\n        for (var j = 0; j < l2; j++) {\n            sum += matrix[i][j] * Math.log(matrix[i][j] + eps);\n        }\n    }\n    return -sum;\n};\n\nexports.mean = function mean(matrix, dimension) {\n    if (typeof (dimension) === 'undefined') {\n        dimension = 0;\n    }\n    var rows = matrix.length,\n        cols = matrix[0].length,\n        theMean, N, i, j;\n\n    if (dimension === -1) {\n        theMean = [0];\n        N = rows * cols;\n        for (i = 0; i < rows; i++) {\n            for (j = 0; j < cols; j++) {\n                theMean[0] += matrix[i][j];\n            }\n        }\n        theMean[0] /= N;\n    } else if (dimension === 0) {\n        theMean = new Array(cols);\n        N = rows;\n        for (j = 0; j < cols; j++) {\n            theMean[j] = 0;\n            for (i = 0; i < rows; i++) {\n                theMean[j] += matrix[i][j];\n            }\n            theMean[j] /= N;\n        }\n    } else if (dimension === 1) {\n        theMean = new Array(rows);\n        N = cols;\n        for (j = 0; j < rows; j++) {\n            theMean[j] = 0;\n            for (i = 0; i < cols; i++) {\n                theMean[j] += matrix[j][i];\n            }\n            theMean[j] /= N;\n        }\n    } else {\n        throw new Error('Invalid dimension');\n    }\n    return theMean;\n};\n\nexports.sum = function sum(matrix, dimension) {\n    if (typeof (dimension) === 'undefined') {\n        dimension = 0;\n    }\n    var rows = matrix.length,\n        cols = matrix[0].length,\n        theSum, i, j;\n\n    if (dimension === -1) {\n        theSum = [0];\n        for (i = 0; i < rows; i++) {\n            for (j = 0; j < cols; j++) {\n                theSum[0] += matrix[i][j];\n            }\n        }\n    } else if (dimension === 0) {\n        theSum = new Array(cols);\n        for (j = 0; j < cols; j++) {\n            theSum[j] = 0;\n            for (i = 0; i < rows; i++) {\n                theSum[j] += matrix[i][j];\n            }\n        }\n    } else if (dimension === 1) {\n        theSum = new Array(rows);\n        for (j = 0; j < rows; j++) {\n            theSum[j] = 0;\n            for (i = 0; i < cols; i++) {\n                theSum[j] += matrix[j][i];\n            }\n        }\n    } else {\n        throw new Error('Invalid dimension');\n    }\n    return theSum;\n};\n\nexports.product = function product(matrix, dimension) {\n    if (typeof (dimension) === 'undefined') {\n        dimension = 0;\n    }\n    var rows = matrix.length,\n        cols = matrix[0].length,\n        theProduct, i, j;\n\n    if (dimension === -1) {\n        theProduct = [1];\n        for (i = 0; i < rows; i++) {\n            for (j = 0; j < cols; j++) {\n                theProduct[0] *= matrix[i][j];\n            }\n        }\n    } else if (dimension === 0) {\n        theProduct = new Array(cols);\n        for (j = 0; j < cols; j++) {\n            theProduct[j] = 1;\n            for (i = 0; i < rows; i++) {\n                theProduct[j] *= matrix[i][j];\n            }\n        }\n    } else if (dimension === 1) {\n        theProduct = new Array(rows);\n        for (j = 0; j < rows; j++) {\n            theProduct[j] = 1;\n            for (i = 0; i < cols; i++) {\n                theProduct[j] *= matrix[j][i];\n            }\n        }\n    } else {\n        throw new Error('Invalid dimension');\n    }\n    return theProduct;\n};\n\nexports.standardDeviation = function standardDeviation(matrix, means, unbiased) {\n    var vari = exports.variance(matrix, means, unbiased), l = vari.length;\n    for (var i = 0; i < l; i++) {\n        vari[i] = Math.sqrt(vari[i]);\n    }\n    return vari;\n};\n\nexports.variance = function variance(matrix, means, unbiased) {\n    if (typeof (unbiased) === 'undefined') {\n        unbiased = true;\n    }\n    means = means || exports.mean(matrix);\n    var rows = matrix.length;\n    if (rows === 0) return [];\n    var cols = matrix[0].length;\n    var vari = new Array(cols);\n\n    for (var j = 0; j < cols; j++) {\n        var sum1 = 0, sum2 = 0, x = 0;\n        for (var i = 0; i < rows; i++) {\n            x = matrix[i][j] - means[j];\n            sum1 += x;\n            sum2 += x * x;\n        }\n        if (unbiased) {\n            vari[j] = (sum2 - ((sum1 * sum1) / rows)) / (rows - 1);\n        } else {\n            vari[j] = (sum2 - ((sum1 * sum1) / rows)) / rows;\n        }\n    }\n    return vari;\n};\n\nexports.median = function median(matrix) {\n    var rows = matrix.length, cols = matrix[0].length;\n    var medians = new Array(cols);\n\n    for (var i = 0; i < cols; i++) {\n        var data = new Array(rows);\n        for (var j = 0; j < rows; j++) {\n            data[j] = matrix[j][i];\n        }\n        data.sort(compareNumbers);\n        var N = data.length;\n        if (N % 2 === 0) {\n            medians[i] = (data[N / 2] + data[(N / 2) - 1]) * 0.5;\n        } else {\n            medians[i] = data[Math.floor(N / 2)];\n        }\n    }\n    return medians;\n};\n\nexports.mode = function mode(matrix) {\n    var rows = matrix.length,\n        cols = matrix[0].length,\n        modes = new Array(cols),\n        i, j;\n    for (i = 0; i < cols; i++) {\n        var itemCount = new Array(rows);\n        for (var k = 0; k < rows; k++) {\n            itemCount[k] = 0;\n        }\n        var itemArray = new Array(rows);\n        var count = 0;\n\n        for (j = 0; j < rows; j++) {\n            var index = itemArray.indexOf(matrix[j][i]);\n            if (index >= 0) {\n                itemCount[index]++;\n            } else {\n                itemArray[count] = matrix[j][i];\n                itemCount[count] = 1;\n                count++;\n            }\n        }\n\n        var maxValue = 0, maxIndex = 0;\n        for (j = 0; j < count; j++) {\n            if (itemCount[j] > maxValue) {\n                maxValue = itemCount[j];\n                maxIndex = j;\n            }\n        }\n\n        modes[i] = itemArray[maxIndex];\n    }\n    return modes;\n};\n\nexports.skewness = function skewness(matrix, unbiased) {\n    if (typeof (unbiased) === 'undefined') unbiased = true;\n    var means = exports.mean(matrix);\n    var n = matrix.length, l = means.length;\n    var skew = new Array(l);\n\n    for (var j = 0; j < l; j++) {\n        var s2 = 0, s3 = 0;\n        for (var i = 0; i < n; i++) {\n            var dev = matrix[i][j] - means[j];\n            s2 += dev * dev;\n            s3 += dev * dev * dev;\n        }\n\n        var m2 = s2 / n;\n        var m3 = s3 / n;\n        var g = m3 / Math.pow(m2, 3 / 2);\n\n        if (unbiased) {\n            var a = Math.sqrt(n * (n - 1));\n            var b = n - 2;\n            skew[j] = (a / b) * g;\n        } else {\n            skew[j] = g;\n        }\n    }\n    return skew;\n};\n\nexports.kurtosis = function kurtosis(matrix, unbiased) {\n    if (typeof (unbiased) === 'undefined') unbiased = true;\n    var means = exports.mean(matrix);\n    var n = matrix.length, m = matrix[0].length;\n    var kurt = new Array(m);\n\n    for (var j = 0; j < m; j++) {\n        var s2 = 0, s4 = 0;\n        for (var i = 0; i < n; i++) {\n            var dev = matrix[i][j] - means[j];\n            s2 += dev * dev;\n            s4 += dev * dev * dev * dev;\n        }\n        var m2 = s2 / n;\n        var m4 = s4 / n;\n\n        if (unbiased) {\n            var v = s2 / (n - 1);\n            var a = (n * (n + 1)) / ((n - 1) * (n - 2) * (n - 3));\n            var b = s4 / (v * v);\n            var c = ((n - 1) * (n - 1)) / ((n - 2) * (n - 3));\n            kurt[j] = a * b - 3 * c;\n        } else {\n            kurt[j] = m4 / (m2 * m2) - 3;\n        }\n    }\n    return kurt;\n};\n\nexports.standardError = function standardError(matrix) {\n    var samples = matrix.length;\n    var standardDeviations = exports.standardDeviation(matrix);\n    var l = standardDeviations.length;\n    var standardErrors = new Array(l);\n    var sqrtN = Math.sqrt(samples);\n\n    for (var i = 0; i < l; i++) {\n        standardErrors[i] = standardDeviations[i] / sqrtN;\n    }\n    return standardErrors;\n};\n\nexports.covariance = function covariance(matrix, dimension) {\n    return exports.scatter(matrix, undefined, dimension);\n};\n\nexports.scatter = function scatter(matrix, divisor, dimension) {\n    if (typeof (dimension) === 'undefined') {\n        dimension = 0;\n    }\n    if (typeof (divisor) === 'undefined') {\n        if (dimension === 0) {\n            divisor = matrix.length - 1;\n        } else if (dimension === 1) {\n            divisor = matrix[0].length - 1;\n        }\n    }\n    var means = exports.mean(matrix, dimension);\n    var rows = matrix.length;\n    if (rows === 0) {\n        return [[]];\n    }\n    var cols = matrix[0].length,\n        cov, i, j, s, k;\n\n    if (dimension === 0) {\n        cov = new Array(cols);\n        for (i = 0; i < cols; i++) {\n            cov[i] = new Array(cols);\n        }\n        for (i = 0; i < cols; i++) {\n            for (j = i; j < cols; j++) {\n                s = 0;\n                for (k = 0; k < rows; k++) {\n                    s += (matrix[k][j] - means[j]) * (matrix[k][i] - means[i]);\n                }\n                s /= divisor;\n                cov[i][j] = s;\n                cov[j][i] = s;\n            }\n        }\n    } else if (dimension === 1) {\n        cov = new Array(rows);\n        for (i = 0; i < rows; i++) {\n            cov[i] = new Array(rows);\n        }\n        for (i = 0; i < rows; i++) {\n            for (j = i; j < rows; j++) {\n                s = 0;\n                for (k = 0; k < cols; k++) {\n                    s += (matrix[j][k] - means[j]) * (matrix[i][k] - means[i]);\n                }\n                s /= divisor;\n                cov[i][j] = s;\n                cov[j][i] = s;\n            }\n        }\n    } else {\n        throw new Error('Invalid dimension');\n    }\n\n    return cov;\n};\n\nexports.correlation = function correlation(matrix) {\n    var means = exports.mean(matrix),\n        standardDeviations = exports.standardDeviation(matrix, true, means),\n        scores = exports.zScores(matrix, means, standardDeviations),\n        rows = matrix.length,\n        cols = matrix[0].length,\n        i, j;\n\n    var cor = new Array(cols);\n    for (i = 0; i < cols; i++) {\n        cor[i] = new Array(cols);\n    }\n    for (i = 0; i < cols; i++) {\n        for (j = i; j < cols; j++) {\n            var c = 0;\n            for (var k = 0, l = scores.length; k < l; k++) {\n                c += scores[k][j] * scores[k][i];\n            }\n            c /= rows - 1;\n            cor[i][j] = c;\n            cor[j][i] = c;\n        }\n    }\n    return cor;\n};\n\nexports.zScores = function zScores(matrix, means, standardDeviations) {\n    means = means || exports.mean(matrix);\n    if (typeof (standardDeviations) === 'undefined') standardDeviations = exports.standardDeviation(matrix, true, means);\n    return exports.standardize(exports.center(matrix, means, false), standardDeviations, true);\n};\n\nexports.center = function center(matrix, means, inPlace) {\n    means = means || exports.mean(matrix);\n    var result = matrix,\n        l = matrix.length,\n        i, j, jj;\n\n    if (!inPlace) {\n        result = new Array(l);\n        for (i = 0; i < l; i++) {\n            result[i] = new Array(matrix[i].length);\n        }\n    }\n\n    for (i = 0; i < l; i++) {\n        var row = result[i];\n        for (j = 0, jj = row.length; j < jj; j++) {\n            row[j] = matrix[i][j] - means[j];\n        }\n    }\n    return result;\n};\n\nexports.standardize = function standardize(matrix, standardDeviations, inPlace) {\n    if (typeof (standardDeviations) === 'undefined') standardDeviations = exports.standardDeviation(matrix);\n    var result = matrix,\n        l = matrix.length,\n        i, j, jj;\n\n    if (!inPlace) {\n        result = new Array(l);\n        for (i = 0; i < l; i++) {\n            result[i] = new Array(matrix[i].length);\n        }\n    }\n\n    for (i = 0; i < l; i++) {\n        var resultRow = result[i];\n        var sourceRow = matrix[i];\n        for (j = 0, jj = resultRow.length; j < jj; j++) {\n            if (standardDeviations[j] !== 0 && !isNaN(standardDeviations[j])) {\n                resultRow[j] = sourceRow[j] / standardDeviations[j];\n            }\n        }\n    }\n    return result;\n};\n\nexports.weightedVariance = function weightedVariance(matrix, weights) {\n    var means = exports.mean(matrix);\n    var rows = matrix.length;\n    if (rows === 0) return [];\n    var cols = matrix[0].length;\n    var vari = new Array(cols);\n\n    for (var j = 0; j < cols; j++) {\n        var sum = 0;\n        var a = 0, b = 0;\n\n        for (var i = 0; i < rows; i++) {\n            var z = matrix[i][j] - means[j];\n            var w = weights[i];\n\n            sum += w * (z * z);\n            b += w;\n            a += w * w;\n        }\n\n        vari[j] = sum * (b / (b * b - a));\n    }\n\n    return vari;\n};\n\nexports.weightedMean = function weightedMean(matrix, weights, dimension) {\n    if (typeof (dimension) === 'undefined') {\n        dimension = 0;\n    }\n    var rows = matrix.length;\n    if (rows === 0) return [];\n    var cols = matrix[0].length,\n        means, i, ii, j, w, row;\n\n    if (dimension === 0) {\n        means = new Array(cols);\n        for (i = 0; i < cols; i++) {\n            means[i] = 0;\n        }\n        for (i = 0; i < rows; i++) {\n            row = matrix[i];\n            w = weights[i];\n            for (j = 0; j < cols; j++) {\n                means[j] += row[j] * w;\n            }\n        }\n    } else if (dimension === 1) {\n        means = new Array(rows);\n        for (i = 0; i < rows; i++) {\n            means[i] = 0;\n        }\n        for (j = 0; j < rows; j++) {\n            row = matrix[j];\n            w = weights[j];\n            for (i = 0; i < cols; i++) {\n                means[j] += row[i] * w;\n            }\n        }\n    } else {\n        throw new Error('Invalid dimension');\n    }\n\n    var weightSum = arrayStat.sum(weights);\n    if (weightSum !== 0) {\n        for (i = 0, ii = means.length; i < ii; i++) {\n            means[i] /= weightSum;\n        }\n    }\n    return means;\n};\n\nexports.weightedCovariance = function weightedCovariance(matrix, weights, means, dimension) {\n    dimension = dimension || 0;\n    means = means || exports.weightedMean(matrix, weights, dimension);\n    var s1 = 0, s2 = 0;\n    for (var i = 0, ii = weights.length; i < ii; i++) {\n        s1 += weights[i];\n        s2 += weights[i] * weights[i];\n    }\n    var factor = s1 / (s1 * s1 - s2);\n    return exports.weightedScatter(matrix, weights, means, factor, dimension);\n};\n\nexports.weightedScatter = function weightedScatter(matrix, weights, means, factor, dimension) {\n    dimension = dimension || 0;\n    means = means || exports.weightedMean(matrix, weights, dimension);\n    if (typeof (factor) === 'undefined') {\n        factor = 1;\n    }\n    var rows = matrix.length;\n    if (rows === 0) {\n        return [[]];\n    }\n    var cols = matrix[0].length,\n        cov, i, j, k, s;\n\n    if (dimension === 0) {\n        cov = new Array(cols);\n        for (i = 0; i < cols; i++) {\n            cov[i] = new Array(cols);\n        }\n        for (i = 0; i < cols; i++) {\n            for (j = i; j < cols; j++) {\n                s = 0;\n                for (k = 0; k < rows; k++) {\n                    s += weights[k] * (matrix[k][j] - means[j]) * (matrix[k][i] - means[i]);\n                }\n                cov[i][j] = s * factor;\n                cov[j][i] = s * factor;\n            }\n        }\n    } else if (dimension === 1) {\n        cov = new Array(rows);\n        for (i = 0; i < rows; i++) {\n            cov[i] = new Array(rows);\n        }\n        for (i = 0; i < rows; i++) {\n            for (j = i; j < rows; j++) {\n                s = 0;\n                for (k = 0; k < cols; k++) {\n                    s += weights[k] * (matrix[j][k] - means[j]) * (matrix[i][k] - means[i]);\n                }\n                cov[i][j] = s * factor;\n                cov[j][i] = s * factor;\n            }\n        }\n    } else {\n        throw new Error('Invalid dimension');\n    }\n\n    return cov;\n};\n","'use strict';\n\nexports.array = require('./array');\nexports.matrix = require('./matrix');\n","import { array as StatArray } from 'ml-stat';\nexport function normalize(array) {\n    const min = StatArray.min(array[1]);\n    const max = StatArray.max(array[1]);\n    const sum = StatArray.sum(array[1]);\n    const length = array[1] ? array[1].length : 0;\n    if (sum !== 0) {\n        for (let i = 0; i < length; i++) {\n            array[1][i] /= sum;\n        }\n    }\n    return {\n        sum,\n        min,\n        max,\n    };\n}\n//# sourceMappingURL=normalize.js.map","import { extract } from './extract';\nimport { getCommonArray } from './getCommonArray';\nimport { normalize } from './normalize';\nimport { COMMON_SECOND, COMMON_FIRST } from './index';\n// this method will systematically take care of both array\nexport function commonExtractAndNormalize(array1, array2, width, from, to, common) {\n    if (!Array.isArray(array1) || !Array.isArray(array2)) {\n        return {\n            info: undefined,\n            data: undefined,\n        };\n    }\n    const extract1 = extract(array1, from, to);\n    const extract2 = extract(array2, from, to);\n    let common1, common2, info1, info2;\n    if (common & COMMON_SECOND) {\n        common1 = getCommonArray(extract1, extract2, width);\n        info1 = normalize(common1);\n    }\n    else {\n        common1 = extract1;\n        info1 = normalize(common1);\n    }\n    if (common & COMMON_FIRST) {\n        common2 = getCommonArray(extract2, extract1, width);\n        info2 = normalize(common2);\n    }\n    else {\n        common2 = extract2;\n        info2 = normalize(common2);\n    }\n    return {\n        info1,\n        info2,\n        data1: common1,\n        data2: common2,\n    };\n}\n//# sourceMappingURL=commonExtractAndNormalize.js.map","import { extract } from './extract';\nimport { normalize } from './normalize';\nexport function extractAndNormalize(array, from, to) {\n    if (!Array.isArray(array)) {\n        return {\n            info: undefined,\n            data: undefined,\n        };\n    }\n    const newArray = extract(array, from, to);\n    const info = normalize(newArray);\n    return {\n        info,\n        data: newArray,\n    };\n}\n//# sourceMappingURL=extractAndNormalize.js.map","// Adapted from: http://stackoverflow.com/questions/563198/how-do-you-detect-where-two-line-segments-intersect/1968345#1968345\nexport function getIntersection(segment1, segment2) {\n    const p0X = segment1[0][0];\n    const p0Y = segment1[0][1];\n    const p1X = segment1[1][0];\n    const p1Y = segment1[1][1];\n    const p2X = segment2[0][0];\n    const p2Y = segment2[0][1];\n    const p3X = segment2[1][0];\n    const p3Y = segment2[1][1];\n    const s1X = p1X - p0X;\n    const s1Y = p1Y - p0Y;\n    const s2X = p3X - p2X;\n    const s2Y = p3Y - p2Y;\n    const s = (-s1Y * (p0X - p2X) + s1X * (p0Y - p2Y)) / (-s2X * s1Y + s1X * s2Y);\n    const t = (s2X * (p0Y - p2Y) - s2Y * (p0X - p2X)) / (-s2X * s1Y + s1X * s2Y);\n    if (s >= 0 && s <= 1 && t >= 0 && t <= 1) {\n        return {\n            x: p0X + t * s1X,\n            y: p0Y + t * s1Y,\n        };\n    }\n    return null; // No collision\n}\n//# sourceMappingURL=getIntersection.js.map","import { calculateOverlapFromDiff } from './calculateOverlapFromDiff';\nimport { checkPeaks } from './checkPeaks';\nimport { commonExtractAndNormalize } from './commonExtractAndNormalize';\nimport { extract } from './extract';\nimport { extractAndNormalize } from './extractAndNormalize';\nimport { getCommonArray } from './getCommonArray.js';\nimport { getIntersection } from './getIntersection';\nimport { normalize } from './normalize';\nexport const COMMON_NO = 0;\nexport const COMMON_FIRST = 1;\nexport const COMMON_SECOND = 2;\nexport const COMMON_BOTH = 3;\n/**\n * A number, or a string containing a number.\n * @typedef {([number[],number[]]|[number,number][]|{x:number[],y:number[]})} Peaks\n */\n/**\n * Create a comparator class\n * {object} [options={}]\n * {string} [options.common=''] should we take only common peaks 'first', 'second', 'both', ''\n * {number} [options.widthBottom=2] bottom trapezoid width for similarity evaluation\n * {number} [options.widthTop=1] top trapezoid width for similarity evaluation\n * {number} [options.from] from region used for similarity calculation\n * {number} [options.to] to region used for similarity calculation\n */\nexport class Comparator {\n    constructor(options = {}) {\n        this.array1 = [];\n        this.array2 = [];\n        this.setOptions(options);\n    }\n    /*\n       2 formats are allowed:\n       [[x1,x2,...],[y1,y2,...]] or [[x1,y1],[x2,y2], ...]\n      */\n    setOptions(options = {}) {\n        if (typeof options.common === 'string') {\n            if (options.common.toLowerCase() === 'first') {\n                this.common = COMMON_FIRST;\n            }\n            else if (options.common.toLowerCase() === 'second') {\n                this.common = COMMON_SECOND;\n            }\n            else if (options.common.toLowerCase() === 'both') {\n                this.common = COMMON_BOTH;\n            }\n            else {\n                this.common = COMMON_NO;\n            }\n        }\n        else if (options.common === true) {\n            this.common = COMMON_BOTH;\n        }\n        else {\n            this.common = COMMON_NO;\n        }\n        this.trapezoid = options.trapezoid;\n        this.commonFactor = options.commonFactor || this.commonFactor || 4;\n        const { widthBottom = this.widthBottom || 2, widthTop = this.widthTop || 1, from = this.from, to = this.to, } = options;\n        this.setTrapezoid(widthBottom, widthTop);\n        this.setFromTo(from, to);\n    }\n    /**\n     *\n     * @param {Peaks} peaks\n     */\n    setPeaks1(peaks) {\n        this.array1 = checkPeaks(peaks);\n        if (this.common) {\n            const extracts = commonExtractAndNormalize(this.array1, this.array2, this.widthBottom, this.from, this.to, this.common);\n            this.array1Extract = extracts.data1;\n            this.array1ExtractInfo = extracts.info1;\n            this.array2Extract = extracts.data2;\n            this.array2ExtractInfo = extracts.info2;\n        }\n        else {\n            const extract = extractAndNormalize(this.array1, this.from, this.to);\n            this.array1Extract = extract.data;\n            this.array1ExtractInfo = extract.info;\n        }\n    }\n    /**\n     *\n     * @param {Peaks} peaks\n     */\n    setPeaks2(peaks) {\n        this.array2 = checkPeaks(peaks);\n        if (this.common) {\n            const extracts = commonExtractAndNormalize(this.array1, this.array2, this.widthBottom, this.from, this.to, this.common);\n            this.array1Extract = extracts.data1;\n            this.array1ExtractInfo = extracts.info1;\n            this.array2Extract = extracts.data2;\n            this.array2ExtractInfo = extracts.info2;\n        }\n        else {\n            const extract = extractAndNormalize(this.array2, this.from, this.to);\n            this.array2Extract = extract.data;\n            this.array2ExtractInfo = extract.info;\n        }\n    }\n    getExtract1() {\n        return this.array1Extract;\n    }\n    getExtract2() {\n        return this.array2Extract;\n    }\n    getExtractInfo1() {\n        return this.array1ExtractInfo;\n    }\n    getExtractInfo2() {\n        return this.array2ExtractInfo;\n    }\n    /**\n     * Set the new bottom and top width of the trapezoid\n     * @param {number} newWidthBottom\n     * @param {number} newWidthTop\n     */\n    setTrapezoid(newWidthBottom, newWidthTop) {\n        this.widthTop = newWidthTop;\n        this.widthBottom = newWidthBottom;\n        this.widthSlope = (this.widthBottom - this.widthTop) / 2;\n        if (this.widthBottom < this.widthTop) {\n            throw new Error('widthBottom has to be larger than widthTop');\n        }\n    }\n    /**\n     * Set the from / to for comparison\n     * @param {number} newFrom - set the new from value\n     * @param {number} newTo - set the new to value\n     * @returns\n     */\n    setFromTo(newFrom, newTo) {\n        if (newFrom === this.from && newTo === this.to)\n            return;\n        this.from = newFrom;\n        this.to = newTo;\n        if (this.common) {\n            const extracts = commonExtractAndNormalize(this.array1, this.array2, this.widthBottom, this.from, this.to, this.common, this.commonFactor);\n            this.array1Extract = extracts.data1;\n            this.array1ExtractInfo = extracts.info1;\n            this.array2Extract = extracts.data2;\n            this.array2ExtractInfo = extracts.info2;\n        }\n        else {\n            let extract1 = extractAndNormalize(this.array1, this.from, this.to);\n            this.array1Extract = extract1.data;\n            this.array1ExtractInfo = extract1.info;\n            let extract2 = extractAndNormalize(this.array2, this.from, this.to);\n            this.array2Extract = extract2.data;\n            this.array2ExtractInfo = extract2.info;\n        }\n    }\n    /**\n     *\n     * @param {number} x1\n     * @param {number} y1\n     * @param {number} x2\n     * @param {number} y2\n     * @returns\n     */\n    getOverlap(x1, y1, x2, y2) {\n        if (y1 === 0 || y2 === 0)\n            return 0;\n        // TAKE CARE !!! We multiply the diff by 2 !!!\n        const diff = Math.abs(x1 - x2) * 2;\n        if (diff > this.widthBottom)\n            return 0;\n        if (diff <= this.widthTop) {\n            return Math.min(y1, y2);\n        }\n        const maxValue = (Math.max(y1, y2) * (this.widthBottom - diff)) /\n            (this.widthBottom - this.widthTop);\n        return Math.min(y1, y2, maxValue);\n    }\n    /**\n     * This is the old trapezoid similarity\n     * @param {number} x1\n     * @param {number} y1\n     * @param {number} x2\n     * @param {number} y2\n     * @param {number} widthTop\n     * @param {number} widthBottom\n     * @returns\n     */\n    getOverlapTrapezoid(x1, y1, x2, y2, widthTop, widthBottom) {\n        // eslint-disable-next-line no-console\n        console.error('getOverlapTrapezoid should not be used anymore');\n        const factor = 2 / (widthTop + widthBottom); // correction for surface=1\n        if (y1 === 0 || y2 === 0)\n            return 0;\n        if (x1 === x2) {\n            // they have the same position\n            return Math.min(y1, y2);\n        }\n        const diff = Math.abs(x1 - x2);\n        if (diff >= widthBottom)\n            return 0;\n        if (y1 === y2) {\n            // do they have the same height ???\n            // we need to find the common length\n            if (diff <= widthTop) {\n                return ((widthTop + widthBottom) / 2 - diff) * y1 * factor;\n            }\n            else if (diff <= widthBottom) {\n                return ((((((widthBottom - diff) * y1) / 2) * (diff - widthTop)) /\n                    (widthBottom - widthTop)) *\n                    factor);\n            }\n            return 0;\n        }\n        else {\n            // the height are different and not the same position ...\n            // we need to consider only one segment to find its intersection\n            const small = Math.min(y1, y2);\n            const big = Math.max(y1, y2);\n            const targets = [\n                [\n                    [0, 0],\n                    [this.widthSlope, small],\n                ],\n                [\n                    [this.widthSlope, small],\n                    [this.widthSlope + widthTop, small],\n                ],\n                [\n                    [widthTop + this.widthSlope, small],\n                    [widthBottom, 0],\n                ],\n            ];\n            let segment;\n            if ((x1 > x2 && y1 > y2) || (x1 < x2 && y1 < y2)) {\n                segment = [\n                    [diff, 0],\n                    [diff + this.widthSlope, big],\n                ];\n            }\n            else {\n                segment = [\n                    [diff + this.widthSlope, big],\n                    [diff, 0],\n                ];\n            }\n            for (let i = 0; i < 3; i++) {\n                const intersection = getIntersection(targets[i], segment);\n                if (intersection) {\n                    switch (i) {\n                        case 0:\n                            return small - ((diff * intersection.y) / 2) * factor;\n                        case 1: // to simplify ...\n                            //     console.log(\"           \",widthSlope,small,big,intersection.x)\n                            return ((((this.widthSlope * small) / (2 * big)) * small +\n                                (widthTop + this.widthSlope - intersection.x) * small +\n                                (this.widthSlope * small) / 2) *\n                                factor);\n                        case 2:\n                            return (((widthBottom - diff) * intersection.y) / 2) * factor;\n                        default:\n                            throw new Error(`unexpected intersection value: ${i}`);\n                    }\n                }\n            }\n        }\n        return NaN;\n    }\n    /**\n     * This method calculates the total diff. The sum of positive value will yield to overlap\n     * @returns\n     */\n    calculateDiff() {\n        // we need to take 2 pointers\n        // and travel progressively between them ...\n        const newFirst = [\n            this.array1Extract[0].slice(),\n            this.array1Extract[1].slice(),\n        ];\n        const newSecond = [\n            this.array2Extract[0].slice(),\n            this.array2Extract[1].slice(),\n        ];\n        const array1Length = this.array1Extract[0]\n            ? this.array1Extract[0].length\n            : 0;\n        const array2Length = this.array2Extract[0]\n            ? this.array2Extract[0].length\n            : 0;\n        let pos1 = 0;\n        let pos2 = 0;\n        let previous2 = 0;\n        while (pos1 < array1Length) {\n            const diff = newFirst[0][pos1] - this.array2Extract[0][pos2];\n            if (Math.abs(diff) < this.widthBottom) {\n                // there is some overlap\n                let overlap;\n                if (this.trapezoid) {\n                    // old trapezoid overlap similarity\n                    overlap = this.getOverlapTrapezoid(newFirst[0][pos1], newFirst[1][pos1], newSecond[0][pos2], newSecond[1][pos2], this.widthTop, this.widthBottom);\n                }\n                else {\n                    overlap = this.getOverlap(newFirst[0][pos1], newFirst[1][pos1], newSecond[0][pos2], newSecond[1][pos2], this.widthTop, this.widthBottom);\n                }\n                newFirst[1][pos1] -= overlap;\n                newSecond[1][pos2] -= overlap;\n                if (pos2 < array2Length - 1) {\n                    pos2++;\n                }\n                else {\n                    pos1++;\n                    pos2 = previous2;\n                }\n            }\n            else if (diff > 0 && pos2 < array2Length - 1) {\n                pos2++;\n                previous2 = pos2;\n            }\n            else {\n                pos1++;\n                pos2 = previous2;\n            }\n        }\n        return newSecond;\n    }\n    /**\n     * Set the new peaks and return info\n     * @param {Peaks} newPeaks1\n     * @param {Peaks} newPeaks2\n     * @returns\n     */\n    getSimilarity(newPeaks1, newPeaks2) {\n        if (newPeaks1)\n            this.setPeaks1(newPeaks1);\n        if (newPeaks2)\n            this.setPeaks2(newPeaks2);\n        const diff = this.calculateDiff();\n        return {\n            diff,\n            extract1: this.getExtract1(),\n            extract2: this.getExtract2(),\n            extractInfo1: this.getExtractInfo1(),\n            extractInfo2: this.getExtractInfo2(),\n            similarity: calculateOverlapFromDiff(diff),\n            widthBottom: this.widthBottom,\n            widthTop: this.widthTop,\n        };\n    }\n    /**\n     * This works mainly when you have a array1 that is fixed\n     * newPeaks2 have to be normalized ! (sum to 1)\n     * @param {Peaks} newPeaks2\n     * @param {number} from\n     * @param {number} to\n     * @returns\n     */\n    fastSimilarity(newPeaks2, from, to) {\n        this.array1Extract = extract(this.array1, from, to);\n        this.array2Extract = newPeaks2;\n        if (this.common & COMMON_SECOND) {\n            this.array1Extract = getCommonArray(this.array1Extract, this.array2Extract, this.widthBottom);\n        }\n        normalize(this.array1Extract);\n        const diff = this.calculateDiff();\n        return calculateOverlapFromDiff(diff);\n    }\n}\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getPeakChargeBySimilarity = getPeakChargeBySimilarity;\nconst peaks_similarity_1 = require(\"peaks-similarity\");\n/**\n * @param {object}   [options={}]\n * @param {number}   [options.minCharge=1]\n * @param {number}   [options.maxCharge=10]\n * @param {object}   [options.similarity={}]\n * @param {number}   [options.similarity.widthBottom]\n * @param {number}   [options.similarity.widthTop]\n * @param {object}   [options.similarity.widthFunction] - function called with mass that should return an object width containing top and bottom\n * @param {object}   [options.similarity.zone={}]\n * @param {number}   [options.similarity.zone.low=-0.5] - window shift based on observed monoisotopic mass\n * @param {number}   [options.similarity.zone.high=2.5] - to value for the comparison window\n * @param {string}   [options.similarity.common]\n */\nconst NEUTRON_MASS = 1;\nfunction getPeakChargeBySimilarity(spectrum, targetMass, options = {}) {\n    let { similarity = {}, minCharge = 1, maxCharge = 10 } = options;\n    let { zone = {}, widthFunction, widthBottom, widthTop } = similarity;\n    let { low = -0.5, high = 2.5 } = zone;\n    if (!spectrum || spectrum.data.x.length === 0) {\n        throw new Error('You need to add an experimental spectrum first using setMassSpectrum');\n    }\n    let width = {\n        bottom: widthBottom,\n        top: widthTop,\n    };\n    similarity = structuredClone(similarity);\n    similarity.common = 'second';\n    let experimentalData = spectrum.data;\n    let similarityProcessor = new peaks_similarity_1.Comparator(similarity);\n    similarityProcessor.setPeaks1([experimentalData.x, experimentalData.y]);\n    if (widthFunction && typeof widthFunction === 'string') {\n        // eslint-disable-next-line no-new-func\n        widthFunction = new Function('mass', widthFunction);\n        let checkTopBottom = widthFunction(123);\n        if (!checkTopBottom.bottom || !checkTopBottom.top) {\n            throw new Error('widthFunction should return an object with bottom and top properties');\n        }\n    }\n    let fromCharge = minCharge * maxCharge > 0\n        ? Math.round(Math.min(Math.abs(minCharge), Math.abs(maxCharge)))\n        : 1;\n    let toCharge = Math.round(Math.max(Math.abs(minCharge), Math.abs(maxCharge)));\n    let fromIsotope = Math.ceil(low);\n    let toIsotope = Math.floor(high);\n    let isotopeHeight = 1 / (toIsotope - fromIsotope + 1);\n    let results = [];\n    for (let charge = fromCharge; charge < toCharge + 1; charge++) {\n        let isotopePositions = { x: [], y: [] };\n        for (let isotopePosition = fromIsotope; isotopePosition < toIsotope + 1; isotopePosition++) {\n            isotopePositions.x.push(targetMass + (isotopePosition * NEUTRON_MASS) / charge);\n            isotopePositions.y.push(isotopeHeight);\n        }\n        let from = targetMass + low / Math.abs(charge);\n        let to = targetMass + high / Math.abs(charge);\n        similarityProcessor.setFromTo(from, to);\n        if (widthFunction) {\n            width = widthFunction(targetMass);\n            similarityProcessor.setTrapezoid(width.bottom, width.top);\n        }\n        similarityProcessor.setPeaks2([isotopePositions.x, isotopePositions.y]);\n        let result = similarityProcessor.getSimilarity();\n        results.push({ charge, similarity: result.similarity });\n    }\n    return results.toSorted((a, b) => b.similarity - a.similarity)[0].charge;\n}\n//# sourceMappingURL=getPeakChargeBySimilarity.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getPeaksWithCharge = getPeaksWithCharge;\n// We can not really take the real value of the neutron because it varies from one element to another.\nconst NEUTRON_MASS = 1;\n/**\n *\n * @param {Array} selectedPeaks\n * @param {Array} allPeaks\n * @param {object} [options={}]\n * @param {number} [options.min=1]\n * @param {number} [options.max=10]\n * @param {number} [options.low=-1]\n * @param {number} [options.high=1]\n * @param {number} [options.precision=30]\n * @returns\n */\nfunction getPeaksWithCharge(selectedPeaks, allPeaks, options = {}) {\n    let { precision = 100, low = -1, high = 1, min: minCharge = 1, max: maxCharge = 10, } = options;\n    let fromCharge = minCharge * maxCharge > 0\n        ? Math.round(Math.min(Math.abs(minCharge), Math.abs(maxCharge)))\n        : 1;\n    let toCharge = Math.round(Math.max(Math.abs(minCharge), Math.abs(maxCharge)));\n    let fromIsotope = Math.ceil(low);\n    let toIsotope = Math.floor(high);\n    let numberIsotopes = toIsotope - fromIsotope + 1;\n    let isotopeIntensity = 1 / numberIsotopes;\n    let fromIndex = 0;\n    let localFromIndex = 0;\n    let localToIndex = 0;\n    const peaksWithCharge = [];\n    for (const peak of selectedPeaks) {\n        let targetMass = peak.x;\n        localFromIndex = fromIndex;\n        let bestCharge = fromCharge;\n        let bestChargeMatch = 0;\n        for (let charge = fromCharge; charge < toCharge + 1; charge++) {\n            let theoreticalPositions = {\n                x: [],\n                y: new Array(numberIsotopes).fill(isotopeIntensity),\n            };\n            let massRange = precision * 1e-6 * targetMass;\n            for (let isotopePosition = fromIsotope; isotopePosition < toIsotope + 1; isotopePosition++) {\n                theoreticalPositions.x.push(targetMass + (isotopePosition * NEUTRON_MASS) / charge);\n            }\n            let fromMass = targetMass + low / Math.abs(charge) - massRange;\n            let toMass = targetMass + high / Math.abs(charge) + massRange;\n            if (charge === 1) {\n                // we may move the fromIndex\n                while (allPeaks[fromIndex].x < fromMass) {\n                    fromIndex++;\n                }\n            }\n            /*\n             * Find the from / to index for the specific peak and specific charge\n             */\n            while (allPeaks[localFromIndex].x < fromMass) {\n                localFromIndex++;\n            }\n            localToIndex = localFromIndex;\n            let localHeightSum = 0;\n            while (localToIndex < allPeaks.length &&\n                allPeaks[localToIndex].x < toMass) {\n                localHeightSum += allPeaks[localToIndex].y;\n                localToIndex++;\n            }\n            localToIndex--;\n            //  console.log({ localFromIndex, localToIndex });\n            /*\n              Calculate the overlap for a specific peak and specific charge\n            */\n            let currentTheoreticalPosition = 0;\n            let theoreticalMaxValue = 1 / numberIsotopes;\n            let totalMatch = 0;\n            for (let index = localFromIndex; index <= localToIndex; index++) {\n                let minMass = theoreticalPositions.x[currentTheoreticalPosition] -\n                    massRange / charge;\n                let maxMass = theoreticalPositions.x[currentTheoreticalPosition] +\n                    massRange / charge;\n                while (maxMass < allPeaks[index].x) {\n                    currentTheoreticalPosition++;\n                    theoreticalMaxValue = 1 / numberIsotopes;\n                    minMass =\n                        theoreticalPositions.x[currentTheoreticalPosition] -\n                            massRange / charge;\n                    maxMass =\n                        theoreticalPositions.x[currentTheoreticalPosition] +\n                            massRange / charge;\n                }\n                while (index < allPeaks.length && allPeaks[index].x < minMass) {\n                    index++;\n                }\n                //    console.log({ index, minMass, maxMass, massRange, localHeightSum });\n                if (index < allPeaks.length && allPeaks[index].x <= maxMass) {\n                    while (index < allPeaks.length && allPeaks[index].x <= maxMass) {\n                        if (allPeaks[index].x >= minMass && allPeaks[index].x <= maxMass) {\n                            let value = allPeaks[index].y / localHeightSum;\n                            //      console.log({ theoreticalMaxValue, value });\n                            value = Math.min(theoreticalMaxValue, value);\n                            theoreticalMaxValue -= value;\n                            totalMatch += value;\n                        }\n                        index++;\n                    }\n                    index--;\n                }\n                if (totalMatch > bestChargeMatch) {\n                    bestCharge = charge;\n                    bestChargeMatch = totalMatch;\n                }\n            }\n        }\n        peaksWithCharge.push({ ...peak, charge: bestCharge });\n    }\n    return peaksWithCharge;\n}\n//# sourceMappingURL=getPeaksWithCharge.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isContinuous = isContinuous;\nconst ml_spectra_processing_1 = require(\"ml-spectra-processing\");\n/**\n * When a spectrum is continous ?\n * - has more than 100 points\n * - deltaX change can not be more than a factor 2\n * - deltaX may not be larger than 0.1\n * - if y is zero it does not count\n * @param {object} spectrum\n * @param {object} [options={}]\n * @param {number} [options.minLength=100]\n * @param {number} [options.relativeHeightThreshold=0.001] // Under this value the\n * @param {number} [options.maxDeltaRatio=3]\n */\nfunction isContinuous(spectrum, options = {}) {\n    const { minLength = 100, maxDeltaRatio = 3, relativeHeightThreshold = 0.001, } = options;\n    const minHeight = (0, ml_spectra_processing_1.xMaxValue)(spectrum.data.y) * relativeHeightThreshold;\n    const minRadio = 1 / maxDeltaRatio;\n    const maxRatio = 1 * maxDeltaRatio;\n    if (spectrum.continuous === undefined) {\n        let xs = spectrum.data.x;\n        let ys = spectrum.data.y;\n        if (xs.length < minLength) {\n            spectrum.continuous = false;\n        }\n        else {\n            let previousDelta = xs[1] - xs[0];\n            spectrum.continuous = true;\n            let success = 0;\n            let failed = 0;\n            for (let i = 0; i < xs.length - 1; i++) {\n                if (ys[i] < minHeight || ys[i + 1] < minHeight) {\n                    previousDelta = 0;\n                    continue;\n                }\n                let delta = xs[i + 1] - xs[i];\n                if (previousDelta) {\n                    let ratio = delta / previousDelta;\n                    if ((Math.abs(delta) > 0.1 || ratio < minRadio || ratio > maxRatio) &&\n                        ys[i] !== 0 &&\n                        ys[i + 1] !== 0) {\n                        failed++;\n                    }\n                    else {\n                        success++;\n                    }\n                }\n                previousDelta = delta;\n            }\n            if (success / failed < 10) {\n                spectrum.continuous = false;\n            }\n        }\n    }\n    return spectrum.continuous;\n}\n//# sourceMappingURL=isContinuous.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * Apply Savitzky Golay algorithm.\n * @param ys - Array of y values.\n * @param xs - Array of X or deltaX.\n * @param options - Options controlling window size, derivative and polynomial order.\n * @returns Array containing the new ys (same length).\n */\nexport function sgg(ys, xs, options = {}) {\n    const { windowSize = 9, derivative = 0, polynomial = 3 } = options;\n    if (windowSize % 2 === 0 || windowSize < 5 || !Number.isInteger(windowSize)) {\n        throw new RangeError('Invalid window size (should be odd and at least 5 integer number)');\n    }\n    if (!isAnyArray(ys)) {\n        throw new TypeError('Y values must be an array');\n    }\n    if (xs === undefined) {\n        throw new TypeError('X must be defined');\n    }\n    if (windowSize > ys.length) {\n        throw new RangeError(`Window size is higher than the data length ${windowSize}>${ys.length}`);\n    }\n    if (derivative < 0 || !Number.isInteger(derivative)) {\n        throw new RangeError('Derivative should be a positive integer');\n    }\n    if (polynomial < 1 || !Number.isInteger(polynomial)) {\n        throw new RangeError('Polynomial should be a positive integer');\n    }\n    if (polynomial >= 6) {\n        // eslint-disable-next-line no-console\n        console.warn('You should not use polynomial grade higher than 5 if you are' +\n            ' not sure that your data arises from such a model. Possible polynomial oscillation problems');\n    }\n    const half = Math.floor(windowSize / 2);\n    const np = ys.length;\n    const ans = new Float64Array(np);\n    const weights = fullWeights(windowSize, polynomial, derivative);\n    let hs = 0;\n    let constantH = true;\n    if (isAnyArray(xs)) {\n        constantH = false;\n    }\n    else {\n        hs = xs ** derivative;\n    }\n    //For the borders\n    for (let i = 0; i < half; i++) {\n        const wg1 = weights[half - i - 1];\n        const wg2 = weights[half + i + 1];\n        let d1 = 0;\n        let d2 = 0;\n        for (let l = 0; l < windowSize; l++) {\n            d1 += wg1[l] * ys[l];\n            d2 += wg2[l] * ys[np - windowSize + l];\n        }\n        if (constantH) {\n            ans[half - i - 1] = d1 / hs;\n            ans[np - half + i] = d2 / hs;\n        }\n        else {\n            hs = getHs(xs, half - i - 1, half, derivative);\n            ans[half - i - 1] = d1 / hs;\n            hs = getHs(xs, np - half + i, half, derivative);\n            ans[np - half + i] = d2 / hs;\n        }\n    }\n    //For the internal points\n    const wg = weights[half];\n    for (let i = windowSize; i <= np; i++) {\n        let d = 0;\n        for (let l = 0; l < windowSize; l++)\n            d += wg[l] * ys[l + i - windowSize];\n        if (!constantH) {\n            hs = getHs(xs, i - half - 1, half, derivative);\n        }\n        ans[i - half - 1] = d / hs;\n    }\n    return ans;\n}\nfunction getHs(h, center, half, derivative) {\n    let hs = 0;\n    let count = 0;\n    for (let i = center - half; i < center + half; i++) {\n        if (i >= 0 && i < h.length - 1) {\n            hs += h[i + 1] - h[i];\n            count++;\n        }\n    }\n    return (hs / count) ** derivative;\n}\nfunction gramPoly(i, m, k, s) {\n    let Grampoly = 0;\n    if (k > 0) {\n        Grampoly =\n            ((4 * k - 2) / (k * (2 * m - k + 1))) *\n                (i * gramPoly(i, m, k - 1, s) + s * gramPoly(i, m, k - 1, s - 1)) -\n                (((k - 1) * (2 * m + k)) / (k * (2 * m - k + 1))) *\n                    gramPoly(i, m, k - 2, s);\n    }\n    else if (k === 0 && s === 0) {\n        Grampoly = 1;\n    }\n    else {\n        Grampoly = 0;\n    }\n    return Grampoly;\n}\nfunction genFact(a, b) {\n    let gf = 1;\n    if (a >= b) {\n        for (let j = a - b + 1; j <= a; j++) {\n            gf *= j;\n        }\n    }\n    return gf;\n}\nfunction weight(i, t, m, n, s) {\n    let sum = 0;\n    for (let k = 0; k <= n; k++) {\n        sum +=\n            (2 * k + 1) *\n                (genFact(2 * m, k) / genFact(2 * m + k + 1, k + 1)) *\n                gramPoly(i, m, k, 0) *\n                gramPoly(t, m, k, s);\n    }\n    return sum;\n}\n/**\n * Compute the full weights matrix for every position inside the window.\n * @param m - Number of points.\n * @param n - Polynomial grade.\n * @param s - Derivative.\n * @returns Array of Float64Array weight vectors, one per position in the window.\n */\nfunction fullWeights(m, n, s) {\n    const weights = new Array(m);\n    const np = Math.floor(m / 2);\n    for (let t = -np; t <= np; t++) {\n        weights[t + np] = new Float64Array(m);\n        for (let j = -np; j <= np; j++) {\n            weights[t + np][j + np] = weight(j, t, np, n, s);\n        }\n    }\n    return weights;\n}\n//# sourceMappingURL=index.js.map","/**\n * Compute the `[left, right]` intervals around each peak by locating\n * consecutive extrema (minima / maxima) of the first derivative.\n * @param y - Spectrum y values.\n * @param x - Spectrum x values.\n * @param dY - First derivative of `y`.\n * @param dX - Sign of the x step (positive for increasing x, negative otherwise).\n * @returns `intervalL` / `intervalR` arrays defining each peak's inflection-point bounds.\n */\nexport function getMinMaxIntervalsDy(y, x, dY, dX) {\n    let lastMax = null;\n    let lastMin = null;\n    const intervalL = [];\n    const intervalR = [];\n    for (let i = 1; i < y.length - 1; ++i) {\n        if ((dY[i] < dY[i - 1] && dY[i] <= dY[i + 1]) ||\n            (dY[i] <= dY[i - 1] && dY[i] < dY[i + 1])) {\n            lastMin = {\n                x: x[i],\n                index: i,\n            };\n            if (dX > 0 && lastMax !== null) {\n                intervalL.push(lastMax);\n                intervalR.push(lastMin);\n            }\n        }\n        // Maximum in first derivative\n        if ((dY[i] >= dY[i - 1] && dY[i] > dY[i + 1]) ||\n            (dY[i] > dY[i - 1] && dY[i] >= dY[i + 1])) {\n            lastMax = {\n                x: x[i],\n                index: i,\n            };\n            if (dX < 0 && lastMin !== null) {\n                intervalL.push(lastMax);\n                intervalR.push(lastMin);\n            }\n        }\n    }\n    return { intervalL, intervalR };\n}\n//# sourceMappingURL=getMinMaxIntervals.js.map","/**\n * Find the `minData` index closest to the center of one interval,\n * above the intensity threshold and bounded by the half-width.\n * @param options - Interval, candidate indices and spectrum data.\n * @returns The picked candidate (`possible`) and the last visited index (`lastIndex`).\n */\nexport function tryMatchOneIntervalWithMinData(options) {\n    const { x, lastK, minData, yThreshold, intervalWidth, intervalCenter, yData, } = options;\n    let minDistance = Number.POSITIVE_INFINITY;\n    let possible = -1;\n    let newLastIndex = lastK;\n    for (let k = newLastIndex + 1; k < minData.length; k++) {\n        const centerIndex = minData[k];\n        if (yData[centerIndex] <= yThreshold) {\n            continue;\n        }\n        const deltaX = x[centerIndex];\n        const currentDistance = Math.abs(deltaX - intervalCenter);\n        if (currentDistance < intervalWidth) {\n            if (currentDistance < minDistance) {\n                possible = k;\n            }\n            newLastIndex = k;\n        }\n        if (currentDistance >= minDistance)\n            break;\n        minDistance = currentDistance;\n    }\n    return { lastIndex: newLastIndex, possible };\n}\n//# sourceMappingURL=tryMatchOneIntervalWithMinData.js.map","import { tryMatchOneIntervalWithMinData } from \"./tryMatchOneIntervalWithMinData.js\";\n/**\n * Build the list of detected peaks by matching each `[left, right]` interval\n * with the best candidate index from `minData`.\n * @param options - Intervals, candidate indices and spectrum data.\n * @returns The detected peaks.\n */\nexport function getPeakFromIntervals(options) {\n    let lastK = -1;\n    const peaks = [];\n    const { x, ddY, yData, yThreshold, intervalR, intervalL, minData } = options;\n    for (let i = 0; i < intervalL.length; i++) {\n        const intervalWidth = (intervalR[i].x - intervalL[i].x) / 2;\n        const intervalCenter = (intervalR[i].x + intervalL[i].x) / 2;\n        const { possible, lastIndex } = tryMatchOneIntervalWithMinData({\n            x,\n            lastK,\n            minData,\n            yThreshold,\n            intervalWidth,\n            intervalCenter,\n            yData,\n        });\n        if (possible !== -1) {\n            const centerIndex = minData[possible];\n            const width = Math.abs(intervalR[i].x - intervalL[i].x);\n            peaks.push({\n                id: crypto.randomUUID(),\n                x: x[centerIndex],\n                y: yData[centerIndex],\n                width,\n                index: centerIndex,\n                ddY: ddY[centerIndex],\n                inflectionPoints: {\n                    from: intervalL[i],\n                    to: intervalR[i],\n                },\n            });\n        }\n        lastK = lastIndex;\n    }\n    return peaks;\n}\n//# sourceMappingURL=getPeaksFromIntervals.js.map","/**\n * Finds the indices where the first derivative crosses zero (sign change),\n * which are potential peak positions. This function does not detect zero-crossings\n * in regions with consecutive zero values in the derivative (flat regions).\n * @param input - Object containing the y values and their first derivative (dY).\n * @returns Array of indices where the first derivative crosses zero (excluding consecutive zeros).\n */\nexport function xGetCrossZeroPoints(input) {\n    const { y, dY } = input;\n    const crossDy = [];\n    for (let i = 1; i < y.length - 1; ++i) {\n        if (isLessAndGreaterThanZero(dY[i], dY[i + 1])) {\n            // push the index of the element closer to zero\n            crossDy.push(Math.abs(dY[i]) < Math.abs(dY[i + 1]) ? i : i + 1);\n        }\n        else if (\n        // Handle exact zero\n        dY[i] === 0 &&\n            isLessAndGreaterThanZero(dY[i - 1], dY[i + 1])) {\n            crossDy.push(i);\n        }\n    }\n    return crossDy;\n}\nfunction isLessAndGreaterThanZero(back, next) {\n    return (back < 0 && next > 0) || (back > 0 && next < 0);\n}\n//# sourceMappingURL=xGetCrossZeroPoints.js.map","import { getMinMaxIntervalsDy } from \"./getMinMaxIntervals.js\";\nimport { getPeakFromIntervals } from \"./getPeaksFromIntervals.js\";\nimport { xGetCrossZeroPoints } from \"./xGetCrossZeroPoints.js\";\n/**\n * Detect peaks using zero-crossings of the first derivative.\n * @param input - Spectrum values and its first/second derivatives.\n * @returns The detected peaks.\n */\nexport function firstDerivative(input) {\n    const { y, x, dY, dX, yData, yThreshold, ddY } = input;\n    const crossDy = xGetCrossZeroPoints(input);\n    const { intervalL, intervalR } = getMinMaxIntervalsDy(y, x, dY, dX);\n    return getPeakFromIntervals({\n        minData: crossDy,\n        intervalL,\n        intervalR,\n        x,\n        yData,\n        yThreshold,\n        ddY,\n    });\n}\n//# sourceMappingURL=firstDerivative.js.map","export const GAUSSIAN_EXP_FACTOR = -4 * Math.LN2;\nexport const ROOT_PI_OVER_LN2 = Math.sqrt(Math.PI / Math.LN2);\nexport const ROOT_THREE = Math.sqrt(3);\nexport const ROOT_2LN2 = Math.sqrt(2 * Math.LN2);\nexport const ROOT_2LN2_MINUS_ONE = Math.sqrt(2 * Math.LN2) - 1;\n//# sourceMappingURL=constants.js.map","import { ROOT_2LN2, GAUSSIAN_EXP_FACTOR, ROOT_PI_OVER_LN2, } from '../../../util/constants';\nimport erfinv from '../../../util/erfinv';\nexport class Gaussian {\n    constructor(options = {}) {\n        const { fwhm = 500, sd } = options;\n        this.fwhm = sd ? gaussianWidthToFWHM(2 * sd) : fwhm;\n    }\n    fwhmToWidth(fwhm = this.fwhm) {\n        return gaussianFwhmToWidth(fwhm);\n    }\n    widthToFWHM(width) {\n        return gaussianWidthToFWHM(width);\n    }\n    fct(x) {\n        return gaussianFct(x, this.fwhm);\n    }\n    getArea(height = calculateGaussianHeight({ fwhm: this.fwhm })) {\n        return getGaussianArea({ fwhm: this.fwhm, height });\n    }\n    getFactor(area) {\n        return getGaussianFactor(area);\n    }\n    getData(options = {}) {\n        return getGaussianData(this, options);\n    }\n    calculateHeight(area = 1) {\n        return calculateGaussianHeight({ fwhm: this.fwhm, area });\n    }\n    getParameters() {\n        return ['fwhm'];\n    }\n}\nexport function calculateGaussianHeight(options) {\n    let { fwhm = 500, area = 1, sd } = options;\n    if (sd)\n        fwhm = gaussianWidthToFWHM(2 * sd);\n    return (2 * area) / ROOT_PI_OVER_LN2 / fwhm;\n}\n/**\n * Calculate the height of the gaussian function of a specific width (fwhm) at a speicifc\n * x position (the gaussian is centered on x=0)\n * @param x\n * @param fwhm\n * @returns y\n */\nexport function gaussianFct(x, fwhm) {\n    return Math.exp(GAUSSIAN_EXP_FACTOR * Math.pow(x / fwhm, 2));\n}\nexport function gaussianWidthToFWHM(width) {\n    return width * ROOT_2LN2;\n}\nexport function gaussianFwhmToWidth(fwhm) {\n    return fwhm / ROOT_2LN2;\n}\nexport function getGaussianArea(options) {\n    let { fwhm = 500, sd, height = 1 } = options;\n    if (sd)\n        fwhm = gaussianWidthToFWHM(2 * sd);\n    return (height * ROOT_PI_OVER_LN2 * fwhm) / 2;\n}\nexport function getGaussianFactor(area = 0.9999) {\n    return Math.sqrt(2) * erfinv(area);\n}\nexport function getGaussianData(shape = {}, options = {}) {\n    let { fwhm = 500, sd } = shape;\n    if (sd)\n        fwhm = gaussianWidthToFWHM(2 * sd);\n    let { length, factor = getGaussianFactor(), height = calculateGaussianHeight({ fwhm }), } = options;\n    if (!length) {\n        length = Math.min(Math.ceil(fwhm * factor), Math.pow(2, 25) - 1);\n        if (length % 2 === 0)\n            length++;\n    }\n    const center = (length - 1) / 2;\n    const data = new Float64Array(length);\n    for (let i = 0; i <= center; i++) {\n        data[i] = gaussianFct(i - center, fwhm) * height;\n        data[length - 1 - i] = data[i];\n    }\n    return data;\n}\n//# sourceMappingURL=Gaussian.js.map","// https://en.wikipedia.org/wiki/Error_function#Inverse_functions\n// This code yields to a good approximation\n// If needed a better implementation using polynomial can be found on https://en.wikipedia.org/wiki/Error_function#Inverse_functions\nexport default function erfinv(x) {\n    let a = 0.147;\n    if (x === 0)\n        return 0;\n    let ln1MinusXSqrd = Math.log(1 - x * x);\n    let lnEtcBy2Plus2 = ln1MinusXSqrd / 2 + 2 / (Math.PI * a);\n    let firstSqrt = Math.sqrt(lnEtcBy2Plus2 ** 2 - ln1MinusXSqrd / a);\n    let secondSqrt = Math.sqrt(firstSqrt - lnEtcBy2Plus2);\n    return secondSqrt * (x > 0 ? 1 : -1);\n}\n//# sourceMappingURL=erfinv.js.map","import { ROOT_THREE } from '../../../util/constants';\nexport class Lorentzian {\n    constructor(options = {}) {\n        const { fwhm = 500 } = options;\n        this.fwhm = fwhm;\n    }\n    fwhmToWidth(fwhm = this.fwhm) {\n        return lorentzianFwhmToWidth(fwhm);\n    }\n    widthToFWHM(width) {\n        return lorentzianWidthToFWHM(width);\n    }\n    fct(x) {\n        return lorentzianFct(x, this.fwhm);\n    }\n    getArea(height = 1) {\n        return getLorentzianArea({ fwhm: this.fwhm, height });\n    }\n    getFactor(area) {\n        return getLorentzianFactor(area);\n    }\n    getData(options = {}) {\n        return getLorentzianData(this, options);\n    }\n    calculateHeight(area = 1) {\n        return calculateLorentzianHeight({ fwhm: this.fwhm, area });\n    }\n    getParameters() {\n        return ['fwhm'];\n    }\n}\nexport const calculateLorentzianHeight = ({ fwhm = 1, area = 1 }) => {\n    return (2 * area) / Math.PI / fwhm;\n};\nexport const getLorentzianArea = (options) => {\n    const { fwhm = 500, height = 1 } = options;\n    return (height * Math.PI * fwhm) / 2;\n};\nexport const lorentzianFct = (x, fwhm) => {\n    return fwhm ** 2 / (4 * x ** 2 + fwhm ** 2);\n};\nexport const lorentzianWidthToFWHM = (width) => {\n    return width * ROOT_THREE;\n};\nexport const lorentzianFwhmToWidth = (fwhm) => {\n    return fwhm / ROOT_THREE;\n};\nexport const getLorentzianFactor = (area = 0.9999) => {\n    if (area >= 1) {\n        throw new Error('area should be (0 - 1)');\n    }\n    const halfResidual = (1 - area) * 0.5;\n    const quantileFunction = (p) => Math.tan(Math.PI * (p - 0.5));\n    return ((quantileFunction(1 - halfResidual) - quantileFunction(halfResidual)) / 2);\n};\nexport const getLorentzianData = (shape = {}, options = {}) => {\n    let { fwhm = 500 } = shape;\n    let { length, factor = getLorentzianFactor(), height = calculateLorentzianHeight({ fwhm, area: 1 }), } = options;\n    if (!length) {\n        length = Math.min(Math.ceil(fwhm * factor), Math.pow(2, 25) - 1);\n        if (length % 2 === 0)\n            length++;\n    }\n    const center = (length - 1) / 2;\n    const data = new Float64Array(length);\n    for (let i = 0; i <= center; i++) {\n        data[i] = lorentzianFct(i - center, fwhm) * height;\n        data[length - 1 - i] = data[i];\n    }\n    return data;\n};\n//# sourceMappingURL=Lorentzian.js.map","import { calculateLorentzianHeight, getLorentzianFactor, lorentzianFwhmToWidth, lorentzianWidthToFWHM, } from '../lorentzian/Lorentzian';\nexport class LorentzianDispersive {\n    constructor(options = {}) {\n        const { fwhm = 500 } = options;\n        this.fwhm = fwhm;\n    }\n    fwhmToWidth(fwhm = this.fwhm) {\n        return lorentzianFwhmToWidth(fwhm);\n    }\n    widthToFWHM(width) {\n        return lorentzianWidthToFWHM(width);\n    }\n    fct(x) {\n        return lorentzianDispersiveFct(x, this.fwhm);\n    }\n    //eslint-disable-next-line\n    getArea(_height) {\n        return 0;\n    }\n    getFactor(area) {\n        return getLorentzianFactor(area);\n    }\n    getData(options = {}) {\n        return getLorentzianDispersiveData(this, options);\n    }\n    calculateHeight(area = 1) {\n        return calculateLorentzianHeight({ fwhm: this.fwhm, area });\n    }\n    getParameters() {\n        return ['fwhm'];\n    }\n}\nexport const lorentzianDispersiveFct = (x, fwhm) => {\n    return (2 * fwhm * x) / (4 * x ** 2 + fwhm ** 2);\n};\nexport const getLorentzianDispersiveData = (shape = {}, options = {}) => {\n    let { fwhm = 500 } = shape;\n    let { length, factor = getLorentzianFactor(), height = calculateLorentzianHeight({ fwhm, area: 1 }), } = options;\n    if (!length) {\n        length = Math.min(Math.ceil(fwhm * factor), Math.pow(2, 25) - 1);\n        if (length % 2 === 0)\n            length++;\n    }\n    const center = (length - 1) / 2;\n    const data = new Float64Array(length);\n    for (let i = 0; i <= center; i++) {\n        data[i] = lorentzianDispersiveFct(i - center, fwhm) * height;\n        data[length - 1 - i] = -data[i];\n    }\n    return data;\n};\n//# sourceMappingURL=LorentzianDispersive.js.map","import { GAUSSIAN_EXP_FACTOR, ROOT_2LN2_MINUS_ONE, ROOT_PI_OVER_LN2, } from '../../../util/constants';\nimport { gaussianFct, getGaussianFactor } from '../gaussian/Gaussian';\nimport { lorentzianFct, getLorentzianFactor } from '../lorentzian/Lorentzian';\nexport class PseudoVoigt {\n    constructor(options = {}) {\n        const { fwhm = 500, mu = 0.5 } = options;\n        this.mu = mu;\n        this.fwhm = fwhm;\n    }\n    fwhmToWidth(fwhm = this.fwhm, mu = this.mu) {\n        return pseudoVoigtFwhmToWidth(fwhm, mu);\n    }\n    widthToFWHM(width, mu = this.mu) {\n        return pseudoVoigtWidthToFWHM(width, mu);\n    }\n    fct(x) {\n        return pseudoVoigtFct(x, this.fwhm, this.mu);\n    }\n    getArea(height = 1) {\n        return getPseudoVoigtArea({ fwhm: this.fwhm, height, mu: this.mu });\n    }\n    getFactor(area) {\n        return getPseudoVoigtFactor(area);\n    }\n    getData(options = {}) {\n        const { length, factor, height = calculatePseudoVoigtHeight({\n            fwhm: this.fwhm,\n            mu: this.mu,\n            area: 1,\n        }), } = options;\n        return getPseudoVoigtData(this, { factor, length, height });\n    }\n    calculateHeight(area = 1) {\n        return calculatePseudoVoigtHeight({ fwhm: this.fwhm, mu: this.mu, area });\n    }\n    getParameters() {\n        return ['fwhm', 'mu'];\n    }\n}\nexport const calculatePseudoVoigtHeight = (options = {}) => {\n    let { fwhm = 1, mu = 0.5, area = 1 } = options;\n    return (2 * area) / (fwhm * (mu * ROOT_PI_OVER_LN2 + (1 - mu) * Math.PI));\n};\nexport const pseudoVoigtFct = (x, fwhm, mu) => {\n    return (1 - mu) * lorentzianFct(x, fwhm) + mu * gaussianFct(x, fwhm);\n};\nexport const pseudoVoigtWidthToFWHM = (width, mu = 0.5) => {\n    return width * (mu * ROOT_2LN2_MINUS_ONE + 1);\n};\nexport const pseudoVoigtFwhmToWidth = (fwhm, mu = 0.5) => {\n    return fwhm / (mu * ROOT_2LN2_MINUS_ONE + 1);\n};\nexport const getPseudoVoigtArea = (options) => {\n    const { fwhm = 500, height = 1, mu = 0.5 } = options;\n    return (fwhm * height * (mu * ROOT_PI_OVER_LN2 + (1 - mu) * Math.PI)) / 2;\n};\nexport const getPseudoVoigtFactor = (area = 0.9999, mu = 0.5) => {\n    return mu < 1 ? getLorentzianFactor(area) : getGaussianFactor(area);\n};\nexport const getPseudoVoigtData = (shape = {}, options = {}) => {\n    let { fwhm = 500, mu = 0.5 } = shape;\n    let { length, factor = getPseudoVoigtFactor(0.999, mu), height = calculatePseudoVoigtHeight({ fwhm, mu, area: 1 }), } = options;\n    if (!height) {\n        height =\n            1 /\n                ((mu / Math.sqrt(-GAUSSIAN_EXP_FACTOR / Math.PI)) * fwhm +\n                    ((1 - mu) * fwhm * Math.PI) / 2);\n    }\n    if (!length) {\n        length = Math.min(Math.ceil(fwhm * factor), Math.pow(2, 25) - 1);\n        if (length % 2 === 0)\n            length++;\n    }\n    const center = (length - 1) / 2;\n    const data = new Float64Array(length);\n    for (let i = 0; i <= center; i++) {\n        data[i] = pseudoVoigtFct(i - center, fwhm, mu) * height;\n        data[length - 1 - i] = data[i];\n    }\n    return data;\n};\n//# sourceMappingURL=PseudoVoigt.js.map","import { ROOT_THREE } from '../../../util/constants';\n/**\n * This shape is a linear combination of rational function (n|n+2), for n = 0 (lorentzian function) and n = 2\n * the parameter that combines those two functions is `gamma` and it is called the kurtosis parameter, it is an\n * implementation of generalized lorentzian shape published by Stanislav Sykora in the SMASH 2010. DOI:10.3247/SL3nmr10.006\n * @link http://www.ebyte.it/stan/Talk_ML_UserMeeting_SMASH_2010_GeneralizedLorentzian.html\n */\nexport class GeneralizedLorentzian {\n    constructor(options = {}) {\n        const { fwhm = 500, gamma = 0.5 } = options;\n        this.fwhm = fwhm;\n        this.gamma = gamma;\n    }\n    fwhmToWidth(fwhm = this.fwhm) {\n        return generalizedLorentzianFwhmToWidth(fwhm);\n    }\n    widthToFWHM(width) {\n        return generalizedLorentzianWidthToFWHM(width);\n    }\n    fct(x) {\n        return generalizedLorentzianFct(x, this.fwhm, this.gamma);\n    }\n    getArea(height = 1) {\n        return getGeneralizedLorentzianArea({\n            fwhm: this.fwhm,\n            height,\n            gamma: this.gamma,\n        });\n    }\n    getFactor(area) {\n        return getGeneralizedLorentzianFactor(area);\n    }\n    getData(options = {}) {\n        return getGeneralizedLorentzianData(this, options);\n    }\n    calculateHeight(area = 1) {\n        const { gamma, fwhm } = this;\n        return calculateGeneralizedLorentzianHeight({ fwhm, area, gamma });\n    }\n    getParameters() {\n        return ['fwhm', 'gamma'];\n    }\n}\nexport const calculateGeneralizedLorentzianHeight = ({ fwhm = 1, gamma = 1, area = 1, }) => {\n    return (area / fwhm / (3.14159 - 0.420894 * gamma)) * 2;\n};\n/**\n * expression of integral generated by Mathematica of the function\n */\nexport const getGeneralizedLorentzianArea = (options) => {\n    const { fwhm = 500, height = 1, gamma = 1 } = options;\n    return (height * fwhm * (3.14159 - 0.420894 * gamma)) / 2;\n};\nexport const generalizedLorentzianFct = (x, fwhm, gamma) => {\n    const u = ((2 * x) / fwhm) ** 2;\n    return (1 - gamma) / (1 + u) + (gamma * (1 + u / 2)) / (1 + u + u ** 2);\n};\nexport const generalizedLorentzianWidthToFWHM = (width) => {\n    return width * ROOT_THREE;\n};\nexport const generalizedLorentzianFwhmToWidth = (fwhm) => {\n    return fwhm / ROOT_THREE;\n};\nexport const getGeneralizedLorentzianFactor = (area = 0.9999) => {\n    if (area >= 1) {\n        throw new Error('area should be (0 - 1)');\n    }\n    const halfResidual = (1 - area) * 0.5;\n    const quantileFunction = (p) => Math.tan(Math.PI * (p - 0.5));\n    return ((quantileFunction(1 - halfResidual) - quantileFunction(halfResidual)) / 2);\n};\nexport const getGeneralizedLorentzianData = (shape = {}, options = {}) => {\n    let { fwhm = 500, gamma = 1 } = shape;\n    let { length, factor = getGeneralizedLorentzianFactor(), height = calculateGeneralizedLorentzianHeight({ fwhm, area: 1, gamma }), } = options;\n    if (!length) {\n        length = Math.min(Math.ceil(fwhm * factor), Math.pow(2, 25) - 1);\n        if (length % 2 === 0)\n            length++;\n    }\n    const center = (length - 1) / 2;\n    const data = new Float64Array(length);\n    for (let i = 0; i <= center; i++) {\n        data[i] = generalizedLorentzianFct(i - center, fwhm, gamma) * height;\n        data[length - 1 - i] = data[i];\n    }\n    return data;\n};\n//# sourceMappingURL=GeneralizedLorentzian.js.map","import { GAUSSIAN_EXP_FACTOR } from '../../../util/constants';\nimport { getGaussianFactor, gaussianFwhmToWidth, gaussianWidthToFWHM, } from '../../1d/gaussian/Gaussian';\nexport class Gaussian2D {\n    constructor(options = {}) {\n        let { fwhm = 20, sd } = options;\n        fwhm = ensureFWHM2D(fwhm, sd);\n        this.fwhmX = fwhm.x;\n        this.fwhmY = fwhm.y;\n    }\n    fct(x, y) {\n        return gaussian2DFct(x, y, this.fwhmX, this.fwhmY);\n    }\n    getData(options = {}) {\n        return getGaussian2DData({\n            fwhm: { x: this.fwhmX, y: this.fwhmY },\n        }, options);\n    }\n    getFactor(volume = 1) {\n        return getGaussianFactor(volume);\n    }\n    getVolume(height = calculateGaussian2DHeight({\n        fwhm: { x: this.fwhmX, y: this.fwhmY },\n        volume: 1,\n    })) {\n        return getGaussian2DVolume({\n            fwhm: { x: this.fwhmX, y: this.fwhmY },\n            height,\n        });\n    }\n    widthToFWHM(width) {\n        return gaussianWidthToFWHM(width);\n    }\n    fwhmToWidth(fwhm) {\n        return gaussianFwhmToWidth(fwhm);\n    }\n    calculateHeight(volume = 1) {\n        return calculateGaussian2DHeight({\n            volume,\n            fwhm: { x: this.fwhmX, y: this.fwhmY },\n        });\n    }\n    set fwhm(fwhm) {\n        fwhm = ensureXYNumber(fwhm);\n        this.fwhmX = fwhm.x;\n        this.fwhmY = fwhm.y;\n    }\n}\nexport const gaussian2DFct = (x, y, xFWHM, yFWHM) => {\n    return Math.exp(GAUSSIAN_EXP_FACTOR * (Math.pow(x / xFWHM, 2) + Math.pow(y / yFWHM, 2)));\n};\nexport const getGaussian2DData = (shape, options = {}) => {\n    let { fwhm = 50, sd } = shape;\n    fwhm = ensureFWHM2D(fwhm, sd);\n    let { factor = getGaussianFactor(), length = { x: 0, y: 0 }, height = calculateGaussian2DHeight({ fwhm, volume: 1 }), } = options;\n    factor = ensureXYNumber(factor);\n    length = ensureXYNumber(length);\n    for (const axis of ['x', 'y']) {\n        if (!length[axis]) {\n            length[axis] = Math.min(Math.ceil(fwhm[axis] * factor[axis]), Math.pow(2, 25) - 1);\n            if (length[axis] % 2 === 0)\n                length[axis]++;\n        }\n    }\n    const xCenter = (length.x - 1) / 2;\n    const yCenter = (length.y - 1) / 2;\n    const data = new Array(length.x);\n    for (let i = 0; i < length.x; i++) {\n        data[i] = new Float64Array(length.y);\n    }\n    for (let i = 0; i < length.x; i++) {\n        for (let j = 0; j < length.y; j++) {\n            data[i][j] =\n                gaussian2DFct(i - xCenter, j - yCenter, fwhm.x, fwhm.y) * height;\n        }\n    }\n    return data;\n};\nexport const calculateGaussian2DHeight = (options = {}) => {\n    let { volume = 1, fwhm = 50, sd } = options;\n    fwhm = ensureFWHM2D(fwhm, sd);\n    return (volume * Math.LN2 * 4) / (Math.PI * fwhm.y * fwhm.x);\n};\nexport const getGaussian2DVolume = (options = {}) => {\n    let { fwhm = 50, height = 1, sd } = options;\n    fwhm = ensureFWHM2D(fwhm, sd);\n    return (height * Math.PI * fwhm.y * fwhm.x) / Math.LN2 / 4;\n};\nfunction ensureXYNumber(input) {\n    return typeof input !== 'object' ? { x: input, y: input } : { ...input };\n}\nfunction ensureFWHM2D(fwhm, sd) {\n    if (sd !== undefined) {\n        let sdObject = ensureXYNumber(sd);\n        return {\n            x: gaussianWidthToFWHM(2 * sdObject.x),\n            y: gaussianWidthToFWHM(2 * sdObject.y),\n        };\n    }\n    else if (fwhm !== undefined) {\n        return ensureXYNumber(fwhm);\n    }\n    else {\n        throw new Error('ensureFWHM2D must have either fwhm or sd defined');\n    }\n}\n//# sourceMappingURL=Gaussian2D.js.map","import { Gaussian } from './gaussian/Gaussian';\nimport { GeneralizedLorentzian } from './generalizedLorentzian/GeneralizedLorentzian';\nimport { Lorentzian } from './lorentzian/Lorentzian';\nimport { LorentzianDispersive } from './lorentzianDispersive/LorentzianDispersive';\nimport { PseudoVoigt } from './pseudoVoigt/PseudoVoigt';\n/**\n * Generate a instance of a specific kind of shape.\n */\nexport function getShape1D(shape) {\n    const { kind } = shape;\n    switch (kind) {\n        case 'gaussian':\n            return new Gaussian(shape);\n        case 'lorentzian':\n            return new Lorentzian(shape);\n        case 'pseudoVoigt':\n            return new PseudoVoigt(shape);\n        case 'lorentzianDispersive':\n            return new LorentzianDispersive(shape);\n        case 'generalizedLorentzian':\n            return new GeneralizedLorentzian(shape);\n        default: {\n            throw Error(`Unknown distribution ${kind}`);\n        }\n    }\n}\n//# sourceMappingURL=getShape1D.js.map","import { Gaussian2D } from './gaussian2D/Gaussian2D';\n/**\n * Generate a instance of a specific kind of shape.\n */\nexport function getShape2D(shape) {\n    const { kind } = shape;\n    switch (kind) {\n        case 'gaussian':\n            return new Gaussian2D(shape);\n        default: {\n            const unHandled = kind;\n            // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n            throw Error(`Unknown distribution ${unHandled}`);\n        }\n    }\n}\n//# sourceMappingURL=getShape2D.js.map","/**\n * Asserts that value is truthy.\n *\n * @param value - Value to check.\n * @param message - Optional error message to throw.\n */\nexport function assert(value, message) {\n    if (!value) {\n        throw new Error(message ? message : 'unreachable');\n    }\n}\n//# sourceMappingURL=assert.js.map","export const DefaultParameters = {\n    x: {\n        init: (peak) => peak.x,\n        min: (peak, peakShape) => peak.x - peakShape.fwhm * 2,\n        max: (peak, peakShape) => peak.x + peakShape.fwhm * 2,\n        gradientDifference: (peak, peakShape) => peakShape.fwhm * 2e-3,\n    },\n    y: {\n        init: (peak) => peak.y,\n        min: (peak) => (peak.y < 0 ? -1.1 : 0),\n        max: (peak) => (peak.y < 0 ? 0 : 1.1),\n        gradientDifference: () => 1e-3,\n    },\n    fwhm: {\n        init: (peak, peakShape) => peakShape.fwhm,\n        min: (peak, peakShape) => peakShape.fwhm * 0.25,\n        max: (peak, peakShape) => peakShape.fwhm * 4,\n        gradientDifference: (peak, peakShape) => peakShape.fwhm * 2e-3,\n    },\n    mu: {\n        init: (peak, peakShape) => peakShape.mu,\n        min: () => 0,\n        max: () => 1,\n        gradientDifference: () => 0.01,\n    },\n    gamma: {\n        init: (peak, peakShape) => peakShape.gamma || 0.5,\n        min: () => -1,\n        max: () => 2,\n        gradientDifference: () => 0.01,\n    },\n};\n//# sourceMappingURL=DefaultParameters.js.map","import { getShape1D } from 'ml-peak-shape-generator';\nimport { assert } from \"../assert.js\";\nimport { DefaultParameters } from \"./DefaultParameters.js\";\nconst properties = ['init', 'min', 'max', 'gradientDifference'];\n/**\n * Return an array of internalPeaks that contains the exact init, min, max values based on the options\n * @param peaks\n * @param minMaxY\n * @param options\n * @returns\n */\nexport function getInternalPeaks(peaks, minMaxY, options = {}) {\n    let index = 0;\n    const internalPeaks = [];\n    const { baseline: shiftValue = minMaxY.min } = options;\n    const normalizedPeaks = peaks.map((peak) => {\n        return {\n            ...peak,\n            y: (peak.y - shiftValue) / minMaxY.range,\n        };\n    });\n    for (const peak of normalizedPeaks) {\n        const { id, shape = options.shape ? options.shape : { kind: 'gaussian' } } = peak;\n        const shapeFct = getShape1D(shape);\n        const parameters = ['x', 'y', ...shapeFct.getParameters()];\n        const propertiesValues = {\n            min: [],\n            max: [],\n            init: [],\n            gradientDifference: [],\n        };\n        for (const parameter of parameters) {\n            for (const property of properties) {\n                // check if the property is specified in the peak\n                let propertyValue = peak?.parameters?.[parameter]?.[property];\n                if (propertyValue) {\n                    propertyValue = getNormalizedValue(propertyValue, parameter, property, minMaxY, options.baseline);\n                    propertiesValues[property].push(propertyValue);\n                    continue;\n                }\n                // check if there are some global option, it could be a number or a callback\n                let generalParameterValue = options?.parameters?.[parameter]?.[property];\n                if (generalParameterValue) {\n                    if (typeof generalParameterValue === 'number') {\n                        generalParameterValue = getNormalizedValue(generalParameterValue, parameter, property, minMaxY, options.baseline);\n                        propertiesValues[property].push(generalParameterValue);\n                        continue;\n                    }\n                    else {\n                        let value = generalParameterValue(peak);\n                        value = getNormalizedValue(value, parameter, property, minMaxY, options.baseline);\n                        propertiesValues[property].push(value);\n                        continue;\n                    }\n                }\n                // we just need to take the default parameters\n                assert(DefaultParameters[parameter], `No default parameter for ${parameter}`);\n                const defaultParameterValues = DefaultParameters[parameter][property];\n                //@ts-expect-error should never happen\n                propertiesValues[property].push(defaultParameterValues(peak, shapeFct));\n            }\n        }\n        const fromIndex = index;\n        const toIndex = fromIndex + parameters.length - 1;\n        index += toIndex - fromIndex + 1;\n        internalPeaks.push({\n            id,\n            shape,\n            shapeFct,\n            parameters,\n            propertiesValues,\n            fromIndex,\n            toIndex,\n        });\n    }\n    return internalPeaks;\n}\nfunction getNormalizedValue(value, parameter, property, minMaxY, baseline) {\n    if (parameter === 'y') {\n        if (property === 'gradientDifference') {\n            return value;\n        }\n        else {\n            return baseline !== undefined\n                ? (value - baseline) / minMaxY.range\n                : (value - minMaxY.min) / minMaxY.range;\n        }\n    }\n    return value;\n}\n//# sourceMappingURL=getInternalPeaks.js.map","import { isAnyArray } from 'is-any-array';\nexport default function checkOptions(data, options) {\n    const { timeout, initialValues, weights = 1, damping = 1e-2, dampingStepUp = 11, dampingStepDown = 9, maxIterations = 100, errorTolerance = 1e-7, centralDifference = false, gradientDifference = 10e-2, improvementThreshold = 1e-3, } = options;\n    let { minValues, maxValues } = options;\n    if (damping <= 0) {\n        throw new Error('The damping option must be a positive number');\n    }\n    else if (!data.x || !data.y) {\n        throw new Error('The data parameter must have x and y elements');\n    }\n    else if (!isAnyArray(data.x) ||\n        data.x.length < 2 ||\n        !isAnyArray(data.y) ||\n        data.y.length < 2) {\n        throw new Error('The data parameter elements must be an array with more than 2 points');\n    }\n    else if (data.x.length !== data.y.length) {\n        throw new Error('The data parameter elements must have the same size');\n    }\n    if (!(initialValues && initialValues.length > 0)) {\n        throw new Error('The initialValues option is mandatory and must be an array');\n    }\n    const parameters = Array.from(initialValues);\n    const parLen = parameters.length;\n    maxValues = maxValues || new Array(parLen).fill(Number.MAX_SAFE_INTEGER);\n    minValues = minValues || new Array(parLen).fill(Number.MIN_SAFE_INTEGER);\n    if (maxValues.length !== minValues.length) {\n        throw new Error('minValues and maxValues must be the same size');\n    }\n    const gradientDifferenceArray = getGradientDifferenceArray(gradientDifference, parameters);\n    const filler = getFiller(weights, data.x.length);\n    const checkTimeout = getCheckTimeout(timeout);\n    const weightSquare = Array.from({ length: data.x.length }, (_, i) => filler(i));\n    return {\n        checkTimeout,\n        minValues,\n        maxValues,\n        parameters,\n        weightSquare,\n        damping,\n        dampingStepUp,\n        dampingStepDown,\n        maxIterations,\n        errorTolerance,\n        centralDifference,\n        gradientDifference: gradientDifferenceArray,\n        improvementThreshold,\n    };\n}\nfunction getGradientDifferenceArray(gradientDifference, parameters) {\n    if (typeof gradientDifference === 'number') {\n        return new Array(parameters.length).fill(gradientDifference);\n    }\n    else if (isAnyArray(gradientDifference)) {\n        const parLen = parameters.length;\n        if (gradientDifference.length !== parLen) {\n            return new Array(parLen).fill(gradientDifference[0]);\n        }\n        return Array.from(gradientDifference);\n    }\n    throw new Error('gradientDifference should be a number or array with length equal to the number of parameters');\n}\nfunction getFiller(weights, dataLength) {\n    if (typeof weights === 'number') {\n        const value = 1 / weights ** 2;\n        return () => value;\n    }\n    else if (isAnyArray(weights)) {\n        if (weights.length < dataLength) {\n            const value = 1 / weights[0] ** 2;\n            return () => value;\n        }\n        return (i) => 1 / weights[i] ** 2;\n    }\n    throw new Error('weights should be a number or array with length equal to the number of data points');\n}\nfunction getCheckTimeout(timeout) {\n    if (timeout !== undefined) {\n        if (typeof timeout !== 'number') {\n            throw new Error('timeout should be a number');\n        }\n        const endTime = Date.now() + timeout * 1000;\n        return () => Date.now() > endTime;\n    }\n    else {\n        return () => false;\n    }\n}\n//# sourceMappingURL=check_options.js.map","/**\n * the sum of the weighted squares of the errors (or weighted residuals) between the data.y\n * and the curve-fit function.\n *\n * @param data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param parameters - Array of current parameter values\n * @param parameterizedFunction - The parameters and returns a function with the independent variable as a parameter\n * @param weightSquare - Square of weights (must be same length as data.x)\n */\nexport default function errorCalculation(data, parameters, parameterizedFunction, weightSquare) {\n    let error = 0;\n    const func = parameterizedFunction(parameters);\n    for (let i = 0; i < data.x.length; i++) {\n        error += (data.y[i] - func(data.x[i])) ** 2 / weightSquare[i];\n    }\n    return error;\n}\n//# sourceMappingURL=error_calculation.js.map","import { inverse, Matrix } from 'ml-matrix';\nimport gradientFunction from \"./gradient_function.js\";\n/**\n * Matrix function over the samples\n *\n * @param data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param evaluatedData - Array of previous evaluated function values\n */\nfunction matrixFunction(data, evaluatedData) {\n    const m = data.x.length;\n    const ans = new Matrix(m, 1);\n    for (let point = 0; point < m; point++) {\n        ans.set(point, 0, data.y[point] - evaluatedData[point]);\n    }\n    return ans;\n}\n/**\n * Iteration for Levenberg-Marquardt\n *\n * @param data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param params - Array of previous parameter values\n * @param damping - Levenberg-Marquardt parameter\n * @param gradientDifference - The step size to approximate the jacobian matrix\n * @param centralDifference - If true the jacobian matrix is approximated by central differences otherwise by forward differences\n * @param parameterizedFunction - The parameters and returns a function with the independent variable as a parameter\n * @param weights - scale the gradient and residual error by weights\n */\nexport default function step(data, params, damping, gradientDifference, parameterizedFunction, centralDifference, weights) {\n    const identity = Matrix.eye(params.length, params.length, damping);\n    const func = parameterizedFunction(params);\n    const evaluatedData = new Float64Array(data.x.length);\n    for (let i = 0; i < data.x.length; i++) {\n        evaluatedData[i] = func(data.x[i]);\n    }\n    const gradientFunc = gradientFunction(data, evaluatedData, params, gradientDifference, parameterizedFunction, centralDifference);\n    const residualError = matrixFunction(data, evaluatedData);\n    const inverseMatrix = inverse(identity.add(gradientFunc.mmul(gradientFunc.transpose().scale('row', { scale: weights }))));\n    const jacobianWeightResidualError = gradientFunc.mmul(residualError.scale('row', { scale: weights }));\n    const perturbations = inverseMatrix.mmul(jacobianWeightResidualError);\n    return {\n        perturbations,\n        jacobianWeightResidualError,\n    };\n}\n//# sourceMappingURL=step.js.map","import { Matrix } from 'ml-matrix';\n/**\n * Difference of the matrix function over the parameters\n * @param data Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param evaluatedData - Array of previous evaluated function values\n * @param params - Array of previous parameter values\n * @param gradientDifference - The step size to approximate the jacobian matrix\n * @param centralDifference - If true the jacobian matrix is approximated by central differences otherwise by forward differences\n * @param paramFunction - The parameters and returns a function with the independent variable as a parameter\n */\nexport default function gradientFunction(data, evaluatedData, params, gradientDifference, paramFunction, centralDifference) {\n    const nbParams = params.length;\n    const nbPoints = data.x.length;\n    const ans = Matrix.zeros(nbParams, nbPoints);\n    let rowIndex = 0;\n    for (let param = 0; param < nbParams; param++) {\n        if (gradientDifference[param] === 0)\n            continue;\n        let delta = gradientDifference[param];\n        let auxParams = params.slice();\n        auxParams[param] += delta;\n        const funcParam = paramFunction(auxParams);\n        if (!centralDifference) {\n            for (let point = 0; point < nbPoints; point++) {\n                ans.set(rowIndex, point, (evaluatedData[point] - funcParam(data.x[point])) / delta);\n            }\n        }\n        else {\n            auxParams = params.slice();\n            auxParams[param] -= delta;\n            delta *= 2;\n            const funcParam2 = paramFunction(auxParams);\n            for (let point = 0; point < nbPoints; point++) {\n                ans.set(rowIndex, point, (funcParam2(data.x[point]) - funcParam(data.x[point])) / delta);\n            }\n        }\n        rowIndex++;\n    }\n    return ans;\n}\n//# sourceMappingURL=gradient_function.js.map","import checkOptions from \"./check_options.js\";\nimport errorCalculation from \"./error_calculation.js\";\nimport step from \"./step.js\";\n/**\n * Curve fitting algorithm\n * @param data - Array of points to fit in the format [x1, x2, ... ], [y1, y2, ... ]\n * @param parameterizedFunction - Takes an array of parameters and returns a function with the independent variable as its sole argument\n * @param options - Options object\n */\nexport function levenbergMarquardt(data, parameterizedFunction, options) {\n    const checkedOptions = checkOptions(data, options);\n    const { checkTimeout, minValues, maxValues, parameters, weightSquare, dampingStepUp, dampingStepDown, maxIterations, errorTolerance, centralDifference, gradientDifference, improvementThreshold, } = checkedOptions;\n    let damping = checkedOptions.damping;\n    let error = errorCalculation(data, parameters, parameterizedFunction, weightSquare);\n    let optimalError = error;\n    let optimalParameters = parameters.slice();\n    let converged = error <= errorTolerance;\n    let iteration = 0;\n    for (; iteration < maxIterations && !converged; iteration++) {\n        const previousError = error;\n        const { perturbations, jacobianWeightResidualError } = step(data, parameters, damping, gradientDifference, parameterizedFunction, centralDifference, weightSquare);\n        for (let k = 0; k < parameters.length; k++) {\n            parameters[k] = Math.min(Math.max(minValues[k], parameters[k] - perturbations.get(k, 0)), maxValues[k]);\n        }\n        error = errorCalculation(data, parameters, parameterizedFunction, weightSquare);\n        if (isNaN(error))\n            break;\n        if (error < optimalError - errorTolerance) {\n            optimalError = error;\n            optimalParameters = parameters.slice();\n        }\n        const improvementMetric = (previousError - error) /\n            perturbations\n                .transpose()\n                .mmul(perturbations.mul(damping).add(jacobianWeightResidualError))\n                .get(0, 0);\n        if (improvementMetric > improvementThreshold) {\n            damping = Math.max(damping / dampingStepDown, 1e-7);\n        }\n        else {\n            damping = Math.min(damping * dampingStepUp, 1e7);\n        }\n        if (checkTimeout()) {\n            throw new Error(`The execution time is over to ${options.timeout} seconds`);\n        }\n        converged = error <= errorTolerance;\n    }\n    return {\n        parameterValues: optimalParameters,\n        parameterError: optimalError,\n        iterations: iteration,\n    };\n}\n//# sourceMappingURL=levenberg_marquardt.js.map","/**\n * Preparata, F. P., & Shamos, M. I. (2012). Computational geometry: an introduction. Springer Science & Business Media.\n * @param {Array} x - The array with x coordinates of the points.\n * @param {Array} y - The array with y coordinates of the points.\n * @return {Array} The indices of the points of anticlockwise lower convex hull\n * @private\n */\nexport default function antiLowerConvexHull(x, y) {\n  if (x.length !== y.length) {\n    throw new RangeError('X and Y vectors has different dimensions');\n  }\n\n  const nbPoints = x.length - 1;\n  if (nbPoints === 0) return [0];\n  if (nbPoints === 1) return [0, 1];\n\n  let currentPoint = 0;\n  let result = new Array(x.length).fill(true);\n  while (true) {\n    const a = currentPoint;\n    const b = moveOn(currentPoint, nbPoints, result);\n    const c = moveOn(moveOn(currentPoint, nbPoints, result), nbPoints, result);\n\n    const det =\n      x[c] * (y[a] - y[b]) + x[a] * (y[b] - y[c]) + x[b] * (y[c] - y[a]);\n\n    const leftTurn = det >= 0;\n\n    if (leftTurn) {\n      currentPoint = b;\n    } else {\n      result[b] = false;\n      currentPoint = moveBack(currentPoint, nbPoints, result);\n    }\n    if (c === nbPoints) break;\n  }\n\n  return result\n    .map((item, index) => (item === false ? false : index))\n    .filter((item) => item !== false);\n}\n\n/**\n * @param {number} currentPoint - The index of the current point to make the move\n * @param {number} nbPoints - The total number of points in the array\n * @param {Array} vector - The array with the points\n * @return {number} the index of the point after the move\n * @private\n */\n\nfunction moveBack(currentPoint, nbPoints, vector) {\n  let counter = currentPoint - 1;\n  while (vector[counter] === false) counter--;\n  return currentPoint === 0 ? nbPoints : counter;\n}\n\nfunction moveOn(currentPoint, nbPoints, vector) {\n  let counter = currentPoint + 1;\n  while (vector[counter] === false) counter++;\n  return currentPoint === nbPoints ? 0 : counter;\n}\n","import { xNorm, xMaxValue, xMinValue } from 'ml-spectra-processing';\n\nimport antiLowerConvexHull from './util/antiLowerConvexHull';\n\n/**\n * Performs a global optimization of required parameters\n * It will return an object containing:\n * - `minFunctionValue`: The minimum value found for the objetive function\n * - `optima`: Array of Array of values for all the variables where the function reach its minimum value\n * - `iterations`: Number of iterations performed in the process\n * - `finalState`: Internal state allowing to continue optimization (initialState)\n * @param {function} objectiveFunction Function to evaluate. It should accept an array of variables\n * @param {Array} lowerBoundaries Array containing for each variable the lower boundary\n * @param {Array} upperBoundaries Array containing for each variable the higher boundary\n * @param {Object} [options={}]\n * @param {number} [options.iterations] - Number of iterations.\n * @param {number} [options.epsilon] - Tolerance to choose best current value.\n * @param {number} [options.tolerance] - Minimum tollerance of the function.\n * @param {number} [options.tolerance2] - Minimum tollerance of the function.\n * @param {Object} [options.initialState={}}] - finalState of previous optimization.\n * @return {Object} {finalState, iterations, minFunctionValue}\n * */\n\nexport default function direct(\n  objectiveFunction,\n  lowerBoundaries,\n  upperBoundaries,\n  options = {},\n) {\n  const {\n    iterations = 50,\n    epsilon = 1e-4,\n    tolerance = 1e-16,\n    tolerance2 = 1e-12,\n    initialState = {},\n  } = options;\n\n  if (\n    objectiveFunction === undefined ||\n    lowerBoundaries === undefined ||\n    upperBoundaries === undefined\n  ) {\n    throw new RangeError('There is something undefined');\n  }\n\n  lowerBoundaries = new Float64Array(lowerBoundaries);\n  upperBoundaries = new Float64Array(upperBoundaries);\n\n  if (lowerBoundaries.length !== upperBoundaries.length) {\n    throw new Error(\n      'Lower bounds and Upper bounds for x are not of the same length',\n    );\n  }\n\n  //-------------------------------------------------------------------------\n  //                        STEP 1. Initialization\n  //-------------------------------------------------------------------------\n  let n = lowerBoundaries.length;\n  let diffBorders = upperBoundaries.map((x, i) => x - lowerBoundaries[i]);\n\n  let {\n    numberOfRectangles = 0,\n    totalIterations = 0,\n    unitaryCoordinates = [new Float64Array(n).fill(0.5)],\n    middlePoint = new Float64Array(n).map((value, index) => {\n      return (\n        lowerBoundaries[index] +\n        unitaryCoordinates[0][index] * diffBorders[index]\n      );\n    }),\n    bestCurrentValue = objectiveFunction(middlePoint),\n    fCalls = 1,\n    smallerDistance = 0,\n    edgeSizes = [new Float64Array(n).fill(0.5)],\n    diagonalDistances = [Math.sqrt(n * 0.5 ** 2)],\n    functionValues = [bestCurrentValue],\n    differentDistances = diagonalDistances,\n    smallerValuesByDistance = [bestCurrentValue],\n    choiceLimit = undefined,\n  } = initialState;\n  if (\n    initialState.originalCoordinates &&\n    initialState.originalCoordinates.length > 0\n  ) {\n    bestCurrentValue = xMinValue(functionValues);\n    choiceLimit =\n      epsilon * Math.abs(bestCurrentValue) > 1e-8\n        ? epsilon * Math.abs(bestCurrentValue)\n        : 1e-8;\n\n    smallerDistance = getMinIndex(\n      functionValues,\n      diagonalDistances,\n      choiceLimit,\n      bestCurrentValue,\n    );\n\n    unitaryCoordinates = initialState.originalCoordinates.slice();\n    for (let j = 0; j < unitaryCoordinates.length; j++) {\n      for (let i = 0; i < lowerBoundaries.length; i++) {\n        unitaryCoordinates[j][i] =\n          (unitaryCoordinates[j][i] - lowerBoundaries[i]) / diffBorders[i];\n      }\n    }\n  }\n\n  let iteration = 0;\n  //-------------------------------------------------------------------------\n  //                          Iteration loop\n  //-------------------------------------------------------------------------\n\n  while (iteration < iterations) {\n    //----------------------------------------------------------------------\n    //  STEP 2. Identify the set S of all potentially optimal rectangles\n    //----------------------------------------------------------------------\n\n    let S1 = [];\n    let idx = differentDistances.findIndex(\n      // eslint-disable-next-line no-loop-func\n      (e) => e === diagonalDistances[smallerDistance],\n    );\n    let counter = 0;\n    for (let i = idx; i < differentDistances.length; i++) {\n      for (let f = 0; f < functionValues.length; f++) {\n        if (\n          (functionValues[f] === smallerValuesByDistance[i]) &\n          (diagonalDistances[f] === differentDistances[i])\n        ) {\n          S1[counter++] = f;\n        }\n      }\n    }\n\n    let optimumValuesIndex, S3;\n    if (differentDistances.length - idx > 1) {\n      let a1 = diagonalDistances[smallerDistance];\n      let b1 = functionValues[smallerDistance];\n      let a2 = differentDistances[differentDistances.length - 1];\n      let b2 = smallerValuesByDistance[differentDistances.length - 1];\n      let slope = (b2 - b1) / (a2 - a1);\n      let constant = b1 - slope * a1;\n      let S2 = new Uint32Array(counter);\n      counter = 0;\n      for (let i = 0; i < S2.length; i++) {\n        let j = S1[i];\n        if (\n          functionValues[j] <=\n          slope * diagonalDistances[j] + constant + tolerance2\n        ) {\n          S2[counter++] = j;\n        }\n      }\n\n      let xHull = [];\n      let yHull = [];\n      for (let i = 0; i < counter; i++) {\n        xHull.push(diagonalDistances[S2[i]]);\n        yHull.push(functionValues[S2[i]]);\n      }\n\n      let lowerIndexHull = antiLowerConvexHull(xHull, yHull);\n\n      S3 = [];\n      for (let i = 0; i < lowerIndexHull.length; i++) {\n        S3.push(S2[lowerIndexHull[i]]);\n      }\n    } else {\n      S3 = S1.slice(0, counter);\n    }\n    optimumValuesIndex = S3;\n    //--------------------------------------------------------------\n    // STEPS 3,5: Select any rectangle j in S\n    //--------------------------------------------------------------\n    for (let k = 0; k < optimumValuesIndex.length; k++) {\n      let j = optimumValuesIndex[k];\n      let largerSide = xMaxValue(edgeSizes[j]);\n      let largeSidesIndex = new Uint32Array(edgeSizes[j].length);\n      counter = 0;\n      for (let i = 0; i < edgeSizes[j].length; i++) {\n        if (Math.abs(edgeSizes[j][i] - largerSide) < tolerance) {\n          largeSidesIndex[counter++] = i;\n        }\n      }\n      let delta = (2 * largerSide) / 3;\n      let bestFunctionValues = [];\n      for (let r = 0; r < counter; r++) {\n        let i = largeSidesIndex[r];\n        let firstMiddleCenter = unitaryCoordinates[j].slice();\n        let secondMiddleCenter = unitaryCoordinates[j].slice();\n        firstMiddleCenter[i] += delta;\n        secondMiddleCenter[i] -= delta;\n        let firstMiddleValue = new Float64Array(firstMiddleCenter.length);\n        let secondMiddleValue = new Float64Array(secondMiddleCenter.length);\n        for (let i = 0; i < firstMiddleCenter.length; i++) {\n          firstMiddleValue[i] =\n            lowerBoundaries[i] + firstMiddleCenter[i] * diffBorders[i];\n          secondMiddleValue[i] =\n            lowerBoundaries[i] + secondMiddleCenter[i] * diffBorders[i];\n        }\n        let firstMinValue = objectiveFunction(firstMiddleValue);\n        let secondMinValue = objectiveFunction(secondMiddleValue);\n        fCalls += 2;\n        bestFunctionValues.push({\n          minValue: Math.min(firstMinValue, secondMinValue),\n          index: r,\n        });\n        // [Math.min(firstMinValue, secondMinValue), r];\n        unitaryCoordinates.push(firstMiddleCenter, secondMiddleCenter);\n        functionValues.push(firstMinValue, secondMinValue);\n      }\n\n      let b = bestFunctionValues.sort((a, b) => a.minValue - b.minValue);\n      for (let r = 0; r < counter; r++) {\n        let u = largeSidesIndex[b[r].index];\n        let ix1 = numberOfRectangles + 2 * (b[r].index + 1) - 1;\n        let ix2 = numberOfRectangles + 2 * (b[r].index + 1);\n        edgeSizes[j][u] = delta / 2;\n        edgeSizes[ix1] = edgeSizes[j].slice();\n        edgeSizes[ix2] = edgeSizes[j].slice();\n        diagonalDistances[j] = xNorm(edgeSizes[j]);\n        diagonalDistances[ix1] = diagonalDistances[j];\n        diagonalDistances[ix2] = diagonalDistances[j];\n      }\n      numberOfRectangles += 2 * counter;\n    }\n\n    //--------------------------------------------------------------\n    //                  Update\n    //--------------------------------------------------------------\n\n    bestCurrentValue = xMinValue(functionValues);\n\n    choiceLimit =\n      epsilon * Math.abs(bestCurrentValue) > 1e-8\n        ? epsilon * Math.abs(bestCurrentValue)\n        : 1e-8;\n\n    smallerDistance = getMinIndex(\n      functionValues,\n      diagonalDistances,\n      choiceLimit,\n      bestCurrentValue,\n      iteration,\n    );\n\n    differentDistances = Array.from(new Set(diagonalDistances));\n    differentDistances = differentDistances.sort((a, b) => a - b);\n\n    smallerValuesByDistance = [];\n    for (let i = 0; i < differentDistances.length; i++) {\n      let minIndex;\n      let minValue = Number.POSITIVE_INFINITY;\n      for (let k = 0; k < diagonalDistances.length; k++) {\n        if (diagonalDistances[k] === differentDistances[i]) {\n          if (functionValues[k] < minValue) {\n            minValue = functionValues[k];\n            minIndex = k;\n          }\n        }\n      }\n      smallerValuesByDistance.push(functionValues[minIndex]);\n    }\n\n    let currentMin = [];\n    for (let j = 0; j < functionValues.length; j++) {\n      if (functionValues[j] === bestCurrentValue) {\n        let temp = [];\n        for (let i = 0; i < lowerBoundaries.length; i++) {\n          temp.push(\n            lowerBoundaries[i] + unitaryCoordinates[j][i] * diffBorders[i],\n          );\n        }\n        currentMin.push(temp);\n      }\n    }\n    iteration += 1;\n  }\n  //--------------------------------------------------------------\n  //                  Saving results\n  //--------------------------------------------------------------\n\n  let result = {};\n  result.minFunctionValue = bestCurrentValue;\n  result.iterations = iteration;\n  let originalCoordinates = [];\n  for (let j = 0; j < numberOfRectangles + 1; j++) {\n    let pair = [];\n    for (let i = 0; i < lowerBoundaries.length; i++) {\n      pair.push(lowerBoundaries[i] + unitaryCoordinates[j][i] * diffBorders[i]);\n    }\n    originalCoordinates.push(pair);\n  }\n\n  result.finalState = {\n    numberOfRectangles,\n    totalIterations: (totalIterations += iterations),\n    originalCoordinates,\n    middlePoint,\n    fCalls,\n    smallerDistance,\n    edgeSizes,\n    diagonalDistances,\n    functionValues,\n    differentDistances,\n    smallerValuesByDistance,\n    choiceLimit,\n  };\n\n  let minimizer = [];\n  for (let i = 0; i < functionValues.length; i++) {\n    if (functionValues[i] === bestCurrentValue) {\n      minimizer.push(originalCoordinates[i]);\n    }\n  }\n\n  result.optima = minimizer;\n  return result;\n}\n\nfunction getMinIndex(\n  functionValues,\n  diagonalDistances,\n  choiceLimit,\n  bestCurrentValue,\n) {\n  let item = [];\n  for (let i = 0; i < functionValues.length; i++) {\n    item[i] =\n      Math.abs(functionValues[i] - (bestCurrentValue + choiceLimit)) /\n      diagonalDistances[i];\n  }\n  const min = xMinValue(item);\n  let result = item.findIndex((x) => x === min);\n  return result;\n}\n","import direct from 'ml-direct';\nexport function directOptimization(data, sumOfShapes, options) {\n    const { minValues, maxValues, maxIterations, epsilon, tolerance, tolerance2, initialState, } = options;\n    const objectiveFunction = getObjectiveFunction(data, sumOfShapes);\n    const result = direct(objectiveFunction, \n    // direct internally converts ArrayLike to Float64Array,\n    // so we can safely cast minValues and maxValues to number[]\n    minValues, maxValues, {\n        iterations: maxIterations,\n        epsilon,\n        tolerance,\n        tolerance2,\n        initialState,\n    });\n    const { optima } = result;\n    return {\n        parameterError: result.minFunctionValue,\n        iterations: result.iterations,\n        parameterValues: optima[0],\n    };\n}\nfunction getObjectiveFunction(data, sumOfShapes) {\n    const { x, y } = data;\n    const nbPoints = x.length;\n    return (parameters) => {\n        const fct = sumOfShapes(parameters);\n        let error = 0;\n        for (let i = 0; i < nbPoints; i++) {\n            error += (y[i] - fct(x[i])) ** 2;\n        }\n        return error;\n    };\n}\n//# sourceMappingURL=directOptimization.js.map","import { xMinMaxValues } from 'ml-spectra-processing';\nimport { getSumOfShapes } from \"./shapes/getSumOfShapes.js\";\nimport { getInternalPeaks } from \"./util/internalPeaks/getInternalPeaks.js\";\nimport { selectMethod } from \"./util/selectMethod.js\";\n/**\n * Fits a set of points to the sum of a set of bell functions.\n *\n * @param data - An object containing the x and y data to be fitted.\n * @param peaks - A list of initial parameters to be optimized. e.g. coming from a peak picking [{x, y, width}].\n * @param options - Options for optimize\n * @returns - An object with fitting error and the list of optimized parameters { parameters: [ {x, y, width} ], error } if the kind of shape is pseudoVoigt mu parameter is optimized.\n */\nexport function optimize(data, peaks, options = {}) {\n    // rescale data\n    const temp = xMinMaxValues(data.y);\n    const minMaxY = { ...temp, range: temp.max - temp.min };\n    const internalPeaks = getInternalPeaks(peaks, minMaxY, options);\n    // need to rescale what is related to Y\n    const { baseline: shiftValue = minMaxY.min } = options;\n    const normalizedY = new Float64Array(data.y.length);\n    for (let i = 0; i < data.y.length; i++) {\n        normalizedY[i] = (data.y[i] - shiftValue) / minMaxY.range;\n    }\n    const nbParams = internalPeaks[internalPeaks.length - 1].toIndex + 1;\n    const minValues = new Float64Array(nbParams);\n    const maxValues = new Float64Array(nbParams);\n    const initialValues = new Float64Array(nbParams);\n    const gradientDifferences = new Float64Array(nbParams);\n    let index = 0;\n    for (const peak of internalPeaks) {\n        for (let i = 0; i < peak.parameters.length; i++) {\n            minValues[index] = peak.propertiesValues.min[i];\n            maxValues[index] = peak.propertiesValues.max[i];\n            initialValues[index] = peak.propertiesValues.init[i];\n            gradientDifferences[index] = peak.propertiesValues.gradientDifference[i];\n            index++;\n        }\n    }\n    const { algorithm, optimizationOptions } = selectMethod(options.optimization);\n    const sumOfShapes = getSumOfShapes(internalPeaks);\n    const fitted = algorithm({ x: data.x, y: normalizedY }, sumOfShapes, {\n        minValues,\n        maxValues,\n        initialValues,\n        gradientDifference: gradientDifferences,\n        ...optimizationOptions,\n    });\n    const fittedValues = fitted.parameterValues;\n    const newPeaks = [];\n    for (const peak of internalPeaks) {\n        const { id, shape, parameters, fromIndex } = peak;\n        let newPeak = { x: 0, y: 0, shape };\n        if (id) {\n            newPeak = { ...newPeak, id };\n        }\n        newPeak.x = fittedValues[fromIndex];\n        newPeak.y = fittedValues[fromIndex + 1] * minMaxY.range + shiftValue;\n        for (let i = 2; i < parameters.length; i++) {\n            //@ts-expect-error should be fixed once\n            newPeak.shape[parameters[i]] = fittedValues[fromIndex + i];\n        }\n        newPeaks.push(newPeak);\n    }\n    return {\n        error: fitted.parameterError,\n        iterations: fitted.iterations,\n        peaks: newPeaks,\n    };\n}\n//# sourceMappingURL=index.js.map","import { levenbergMarquardt } from 'ml-levenberg-marquardt';\nimport { directOptimization } from \"./wrappers/directOptimization.js\";\n/** Algorithm to select the method.\n * @param optimizationOptions - Optimization options\n * @returns - The algorithm and optimization options\n */\nexport function selectMethod(optimizationOptions = {}) {\n    const { kind = 'lm', options } = optimizationOptions;\n    switch (kind) {\n        case 'lm':\n        case 'levenbergMarquardt':\n            return {\n                algorithm: levenbergMarquardt,\n                optimizationOptions: {\n                    damping: 1.5,\n                    maxIterations: 100,\n                    errorTolerance: 1e-8,\n                    ...options,\n                },\n            };\n        case 'direct': {\n            return {\n                algorithm: directOptimization,\n                optimizationOptions: {\n                    iterations: 20,\n                    epsilon: 1e-4,\n                    tolerance: 1e-16,\n                    tolerance2: 1e-12,\n                    initialState: {},\n                    ...options,\n                },\n            };\n        }\n        default:\n            throw new Error(`Unknown fitting algorithm`);\n    }\n}\n//# sourceMappingURL=selectMethod.js.map","/**\n * This function returns the sumOfShapes function\n * This function gives sumOfShapes access to the peak list and the associated data\n * @param internalPeaks\n */\nexport function getSumOfShapes(internalPeaks) {\n    return function sumOfShapes(parameters) {\n        return (x) => {\n            let totalY = 0;\n            for (const peak of internalPeaks) {\n                const peakX = parameters[peak.fromIndex];\n                const y = parameters[peak.fromIndex + 1];\n                for (let i = 2; i < parameters.length; i++) {\n                    const shapeFctKey = peak.parameters[i];\n                    peak.shapeFct[shapeFctKey] = parameters[peak.fromIndex + i];\n                }\n                totalY += y * peak.shapeFct.fct(x - peakX);\n            }\n            return totalY;\n        };\n    };\n}\n//# sourceMappingURL=getSumOfShapes.js.map","import { getShape1D } from 'ml-peak-shape-generator';\n/**\n * Add a `shape` property to peaks that do not have one.\n * If a peak already has a `shape` but no `fwhm`, the FWHM is computed from `peak.width`.\n * @param peaks - Peaks with a `width` property.\n * @param options - Shape options.\n * @returns A peak list where every peak has a `shape` property.\n */\nexport function addMissingShape(peaks, options = {}) {\n    const { shape = { kind: 'gaussian' }, output = structuredClone(peaks) } = options;\n    const defaultShapeInstance = getShape1D(shape);\n    return output.map((peak) => {\n        if (hasShape(peak)) {\n            if (!('fwhm' in peak.shape)) {\n                peak.shape.fwhm = getShape1D(peak.shape).widthToFWHM(peak.width);\n            }\n            return peak;\n        }\n        return {\n            ...peak,\n            shape: {\n                fwhm: defaultShapeInstance.widthToFWHM(peak.width),\n                ...shape,\n            },\n        };\n    });\n}\nfunction hasShape(peak) {\n    return 'shape' in peak;\n}\n//# sourceMappingURL=addMissingShape.js.map","import { getShape1D } from 'ml-peak-shape-generator';\nimport { optimize } from 'ml-spectra-fitting';\nimport { xGetFromToIndex } from 'ml-spectra-processing';\nimport { addMissingShape } from \"../utils/addMissingShape.js\";\nimport { groupPeaks } from \"../utils/groupPeaks.js\";\n/**\n * Optimize the position (x), max intensity (y), full width at half maximum (fwhm)\n * and the ratio of gaussian contribution (mu) if it's required.\n * It currently supports three kind of shapes: gaussian, lorentzian and pseudovoigt.\n * Returns both the optimized peaks and per-group diagnostic logs.\n * @param data - An object containing the x and y data to be fitted.\n * @param peakList - A list of initial parameters to be optimized. e.g. coming from a peak picking [{x, y, width}].\n * @param options - Optimization options.\n * @returns An object with the optimized peaks and the per-group logs.\n */\nexport function optimizePeaksWithLogs(data, peakList, options = {}) {\n    const { fromTo = {}, baseline, shape = { kind: 'gaussian' }, groupingFactor = 1, factorLimits = 2, optimization = {\n        kind: 'lm',\n        options: {\n            timeout: 10,\n        },\n    }, } = options;\n    // Optimize peaks in groups: fitting everything at once would be too slow and\n    // have too many free parameters.\n    const groups = groupPeaks(peakList, { factor: groupingFactor });\n    const logs = [];\n    const results = [];\n    for (const peakGroup of groups) {\n        const start = Date.now();\n        const peaks = addMissingShape(peakGroup, { shape });\n        const firstPeak = peaks[0];\n        const lastPeak = peaks.at(-1);\n        const { from = firstPeak.x - firstPeak.width * factorLimits, to = lastPeak.x + lastPeak.width * factorLimits, } = fromTo;\n        const { fromIndex, toIndex } = xGetFromToIndex(data.x, { from, to });\n        const x = data.x instanceof Float64Array\n            ? data.x.subarray(fromIndex, toIndex)\n            : data.x.slice(fromIndex, toIndex);\n        const y = data.y instanceof Float64Array\n            ? data.y.subarray(fromIndex, toIndex)\n            : data.y.slice(fromIndex, toIndex);\n        const log = {\n            range: { from, to },\n            parameters: optimization,\n            groupSize: peakGroup.length,\n            time: Date.now() - start,\n        };\n        if (x.length > 5) {\n            const { iterations, error, peaks: optimizedPeaks, } = optimize({ x, y }, peaks, {\n                shape,\n                baseline,\n                optimization,\n            });\n            for (let i = 0; i < peaks.length; i++) {\n                results.push({\n                    ...optimizedPeaks[i],\n                    width: getShape1D(peaks[i].shape).fwhmToWidth(optimizedPeaks[i].shape.fwhm),\n                });\n            }\n            logs.push({\n                ...log,\n                iterations,\n                error,\n                message: 'optimization successful',\n            });\n        }\n        else {\n            results.push(...peaks);\n            logs.push({\n                ...log,\n                iterations: 0,\n                message: 'x length too small for optimization',\n            });\n        }\n    }\n    return { logs, optimizedPeaks: results };\n}\n//# sourceMappingURL=optimizePeaksWithLogs.js.map","/**\n * Group peaks based on a width-aware factor.\n * Only `x` and `width` are used, so the current implementation does not take\n * peak asymmetry into account.\n * @param peaks - Peaks with `x` and `width` properties.\n * @param options - Grouping options.\n * @returns Groups of peaks sorted by ascending `x`.\n */\nexport function groupPeaks(peaks, options = {}) {\n    if (peaks.length === 0)\n        return [];\n    const { factor = 1 } = options;\n    const sortedPeaks = peaks.toSorted((a, b) => a.x - b.x);\n    let previousPeak = sortedPeaks[0];\n    let currentGroup = [previousPeak];\n    const groups = [currentGroup];\n    for (let i = 1; i < sortedPeaks.length; i++) {\n        const peak = sortedPeaks[i];\n        if ((peak.x - previousPeak.x) / ((peak.width + previousPeak.width) / 2) <=\n            factor) {\n            currentGroup.push(peak);\n        }\n        else {\n            currentGroup = [peak];\n            groups.push(currentGroup);\n        }\n        previousPeak = peak;\n    }\n    return groups;\n}\n//# sourceMappingURL=groupPeaks.js.map","/**\n * Assign a random UUID to every peak that does not already have an `id`.\n * @param peaks - Peaks possibly missing an `id`.\n * @param options - Options.\n * @param options.output - Destination array. Defaults to a deep clone of `peaks`.\n * @returns A peak list where every peak has an `id`.\n */\nexport function addMissingIDs(peaks, options = {}) {\n    const { output = structuredClone(peaks) } = options;\n    for (const peak of output) {\n        if (!('id' in peak)) {\n            peak.id = crypto.randomUUID();\n        }\n    }\n    return output;\n}\n//# sourceMappingURL=addMissingIDs.js.map","import { addMissingIDs } from \"../utils/addMissingIDs.js\";\nimport { addMissingShape } from \"../utils/addMissingShape.js\";\nimport { optimizePeaksWithLogs } from \"./optimizePeaksWithLogs.js\";\n/**\n * Join peaks that seem to belong to a broad signal into a single broad peak.\n * @param peakList - Detected peaks, possibly containing fragments of a broad signal.\n * @param options - Join options.\n * @returns The peak list with broad fragments fitted as a single peak.\n */\nexport function joinBroadPeaks(peakList, options = {}) {\n    const { shape = { kind: 'gaussian' }, optimization = { kind: 'lm', options: { timeout: 10 } }, broadWidth = 0.25, broadRatio = 0.0025, } = options;\n    let max = 0;\n    let maxI = 0;\n    let count = 1;\n    const broadLines = [];\n    if (peakList.length < 2) {\n        return addMissingIDs(addMissingShape(peakList.map(getGSDPeakOptimizedStructure), { shape }));\n    }\n    let maxDdy = Math.abs(peakList[0].ddY);\n    for (let i = 1; i < peakList.length; i++) {\n        const absDdy = Math.abs(peakList[i].ddY);\n        if (absDdy > maxDdy)\n            maxDdy = absDdy;\n    }\n    const newPeaks = [];\n    for (const peak of peakList) {\n        if (Math.abs(peak.ddY) <= broadRatio * maxDdy) {\n            broadLines.push(peak);\n        }\n        else {\n            newPeaks.push(getGSDPeakOptimizedStructure(peak));\n        }\n    }\n    // Sentinel: forces the final group to be flushed by the `else` branch below.\n    //@ts-expect-error Sentinel peak, x=+Infinity guarantees the distance check fails.\n    broadLines.push({ x: Number.MAX_VALUE, y: 0 });\n    let candidates = {\n        x: [broadLines[0].x],\n        y: [broadLines[0].y],\n    };\n    let indexes = [0];\n    for (let i = 1; i < broadLines.length; i++) {\n        if (Math.abs(broadLines[i - 1].x - broadLines[i].x) < broadWidth) {\n            candidates.x.push(broadLines[i].x);\n            candidates.y.push(broadLines[i].y);\n            if (broadLines[i].y > max) {\n                max = broadLines[i].y;\n                maxI = i;\n            }\n            indexes.push(i);\n            count++;\n        }\n        else {\n            if (count > 2) {\n                const initialWidth = Math.abs(candidates.x.at(-1) - candidates.x[0]);\n                const { logs, optimizedPeaks } = optimizePeaksWithLogs(candidates, [\n                    {\n                        id: crypto.randomUUID(),\n                        x: broadLines[maxI].x,\n                        y: max,\n                        width: initialWidth,\n                        parameters: {\n                            width: { max: initialWidth * 4, min: initialWidth * 0.8 },\n                        },\n                    },\n                ], { shape: { kind: 'pseudoVoigt' }, optimization });\n                max = 0;\n                maxI = 0;\n                const log = logs.find((l) => l.message === 'optimization successful');\n                if (log?.error !== undefined && log.error < 0.2) {\n                    newPeaks.push(optimizedPeaks[0]);\n                }\n                else {\n                    pushBackPeaks(broadLines, indexes, newPeaks);\n                }\n            }\n            else {\n                pushBackPeaks(broadLines, indexes, newPeaks);\n            }\n            candidates = { x: [broadLines[i].x], y: [broadLines[i].y] };\n            indexes = [i];\n            max = broadLines[i].y;\n            maxI = i;\n            count = 1;\n        }\n    }\n    newPeaks.sort((a, b) => a.x - b.x);\n    return addMissingIDs(newPeaks, { output: newPeaks });\n}\nfunction pushBackPeaks(broadLines, indexes, peaks) {\n    for (const index of indexes) {\n        peaks.push(getGSDPeakOptimizedStructure(broadLines[index]));\n    }\n}\nfunction getGSDPeakOptimizedStructure(peak) {\n    const { id, shape, x, y, width } = peak;\n    const newPeak = {\n        x,\n        y,\n        width,\n        shape,\n    };\n    if (id)\n        newPeak.id = id;\n    return newPeak;\n}\n//# sourceMappingURL=joinBroadPeaks.js.map","import { getShape1D } from 'ml-peak-shape-generator';\n/**\n * Enlarge peaks while preventing overlap between them.\n * A typical application is chromatography peak picking.\n * We should not make the hypothesis that `x` is equidistant, because peaks\n * may not be symmetric once we add the `from` and `to` properties.\n * @param peakList - Peaks to broaden.\n * @param options - Broadening options.\n * @returns The broadened peaks.\n */\nexport function broadenPeaks(peakList, options = {}) {\n    const { factor = 2, overlap = false } = options;\n    const peaks = mapPeaks(peakList, factor);\n    if (!overlap) {\n        for (let i = 0; i < peaks.length - 1; i++) {\n            const peak = peaks[i];\n            const nextPeak = peaks[i + 1];\n            if (peak.to.x > nextPeak.from.x) {\n                // we do it proportional to the width of the peaks\n                peak.to.x =\n                    (peak.width / (nextPeak.width + peak.width)) * (nextPeak.x - peak.x) +\n                        peak.x;\n                nextPeak.from.x = peak.to.x;\n            }\n        }\n    }\n    for (const peak of peaks) {\n        peak.width = peak.to.x - peak.from.x;\n        if (peak.shape) {\n            const { shape, width } = peak;\n            if (shape.fwhm !== undefined) {\n                const shapeFct = getShape1D(shape);\n                shape.fwhm = shapeFct.widthToFWHM(width);\n            }\n        }\n    }\n    return peaks;\n}\nfunction mapPeaks(peaks, factor) {\n    return peaks.map((peak) => {\n        const { id, shape, x, y, index, inflectionPoints } = peak;\n        const xFrom = x - (x - inflectionPoints.from.x) * factor;\n        const xTo = x + (inflectionPoints.to.x - x) * factor;\n        let result = {\n            x,\n            y,\n            index,\n            width: xTo - xFrom,\n            from: { x: xFrom },\n            to: { x: xTo },\n        };\n        if (id) {\n            result = { ...result, id };\n        }\n        if (shape) {\n            result = { ...result, shape };\n        }\n        return result;\n    });\n}\n//# sourceMappingURL=broadenPeaks.js.map","import { sgg } from 'ml-savitzky-golay-generalized';\nimport { xIsEquallySpaced, xIsMonotonic, xMinMaxValues, xNoiseStandardDeviation, } from 'ml-spectra-processing';\nimport { autoAlgorithm } from \"./algorithms/autoAlgorithm.js\";\nimport { firstDerivative } from \"./algorithms/firstDerivative.js\";\nimport { secondDerivative } from \"./algorithms/secondDerivative.js\";\nimport { optimizeTop } from \"./utils/optimizeTop.js\";\n/**\n * Global spectra deconvolution.\n * @param data - Object with `x` and `y` arrays. `x` must be monotone increasing.\n * @param options - Peak detection options.\n * @returns The detected peaks, sorted by ascending `x`.\n */\nexport function gsd(data, options = {}) {\n    let { noiseLevel } = options;\n    const { sgOptions = {\n        windowSize: 9,\n        polynomial: 3,\n    }, smoothY = false, maxCriteria = true, minMaxRatio = 0.00025, realTopDetection = false, peakDetectionAlgorithm = 'second', } = options;\n    const { x } = data;\n    let { y } = data;\n    if (xIsMonotonic(x) !== 1) {\n        throw new Error('GSD only accepts monotone increasing x values');\n    }\n    // Copy so the `maxCriteria` / clipping loops below don't mutate the caller's array.\n    y = y.slice();\n    // If the max difference between delta x is less than 5%, then,\n    // we can assume it to be equally spaced variable\n    const isEquallySpaced = xIsEquallySpaced(x);\n    if (noiseLevel === undefined) {\n        if (isEquallySpaced) {\n            const noiseInfo = xNoiseStandardDeviation(y);\n            if (maxCriteria) {\n                noiseLevel = noiseInfo.median + 1.5 * noiseInfo.sd;\n            }\n            else {\n                noiseLevel = -noiseInfo.median + 1.5 * noiseInfo.sd;\n            }\n        }\n        else {\n            noiseLevel = 0;\n        }\n    }\n    else if (!maxCriteria) {\n        noiseLevel *= -1;\n    }\n    if (!maxCriteria) {\n        for (let i = 0; i < y.length; i++) {\n            y[i] *= -1;\n        }\n    }\n    if (noiseLevel !== undefined) {\n        for (let i = 0; i < y.length; i++) {\n            if (y[i] < noiseLevel) {\n                y[i] = noiseLevel;\n            }\n        }\n    }\n    const xValue = isEquallySpaced ? x[1] - x[0] : x;\n    const yData = smoothY\n        ? sgg(y, xValue, {\n            ...sgOptions,\n            derivative: 0,\n        })\n        : y;\n    const { min: minY, max: maxY } = xMinMaxValues(yData);\n    if (minY > maxY || minY === maxY)\n        return [];\n    const dY = sgg(y, xValue, {\n        ...sgOptions,\n        derivative: 1,\n    });\n    const ddY = sgg(y, xValue, {\n        ...sgOptions,\n        derivative: 2,\n    });\n    const yThreshold = Math.max(noiseLevel, minY + (maxY - minY) * minMaxRatio);\n    const dX = x[1] - x[0];\n    const peakData = { x, y, yData, dY, ddY, dX, yThreshold };\n    let peaks = [];\n    if (peakDetectionAlgorithm === 'first') {\n        peaks = firstDerivative(peakData);\n    }\n    else if (peakDetectionAlgorithm === 'second') {\n        peaks = secondDerivative(peakData);\n    }\n    else {\n        peaks = autoAlgorithm(peakData);\n    }\n    if (realTopDetection) {\n        optimizeTop({ x, y: yData }, peaks);\n    }\n    for (const peak of peaks) {\n        if (!maxCriteria) {\n            peak.y *= -1;\n            peak.ddY = peak.ddY * -1;\n        }\n    }\n    peaks.sort((a, b) => {\n        return a.x - b.x;\n    });\n    return peaks;\n}\n//# sourceMappingURL=gsd.js.map","import { getMinMaxIntervalsDy } from \"./getMinMaxIntervals.js\";\nimport { getPeakFromIntervals } from \"./getPeaksFromIntervals.js\";\n/**\n * Detect peaks using local minima of the second derivative (inflection points).\n * @param input - Spectrum values and its first/second derivatives.\n * @returns The detected peaks.\n */\nexport function secondDerivative(input) {\n    const { x, y, yData, dY, ddY, dX, yThreshold } = input;\n    const minddY = [];\n    const { intervalL, intervalR } = getMinMaxIntervalsDy(y, x, dY, dX);\n    // By the intermediate value theorem We cannot find 2 consecutive maximum or minimum\n    for (let i = 1; i < y.length - 1; ++i) {\n        // Minimum in second derivative\n        if (ddY[i] < ddY[i - 1] && ddY[i] < ddY[i + 1]) {\n            minddY.push(i);\n        }\n    }\n    return getPeakFromIntervals({\n        minData: minddY,\n        intervalL,\n        intervalR,\n        x,\n        yData,\n        yThreshold,\n        ddY,\n    });\n}\n//# sourceMappingURL=secondDerivative.js.map","import { getMinMaxIntervalsDy } from \"./getMinMaxIntervals.js\";\nimport { tryMatchOneIntervalWithMinData } from \"./tryMatchOneIntervalWithMinData.js\";\n/**\n * Peak detection that combines first-derivative zero-crossings and\n * second-derivative local minima to find peaks inside each interval.\n * @param input - Spectrum values together with its first and second derivatives.\n * @returns The detected peaks.\n */\nexport function autoAlgorithm(input) {\n    const { x, y, yData, dY, ddY, dX, yThreshold } = input;\n    const minddY = [];\n    const crossDy = [];\n    const { intervalL, intervalR } = getMinMaxIntervalsDy(y, x, dY, dX);\n    for (let i = 1; i < y.length - 1; ++i) {\n        if ((dY[i] < 0 && dY[i + 1] > 0) || (dY[i] > 0 && dY[i + 1] < 0)) {\n            // push the index of the element closer to zero\n            crossDy.push(Math.abs(dY[i]) < Math.abs(dY[i + 1]) ? i : i + 1);\n        }\n        // Handle exact zero\n        if (dY[i] === 0 &&\n            dY[i] < Math.abs(dY[i + 1]) &&\n            dY[i] < Math.abs(dY[i - 1])) {\n            crossDy.push(i);\n        }\n        // Minimum in second derivative\n        if (ddY[i] < ddY[i - 1] && ddY[i] < ddY[i + 1]) {\n            minddY.push(i);\n        }\n    }\n    const peaks = [];\n    let lastK = -1;\n    let lastJ = -1;\n    for (let i = 0; i < intervalL.length; i++) {\n        const intervalWidth = (intervalR[i].x - intervalL[i].x) / 2;\n        const intervalCenter = (intervalR[i].x + intervalL[i].x) / 2;\n        let yIndex = -1;\n        let match = tryMatchOneIntervalWithMinData({\n            x,\n            yData,\n            lastK,\n            yThreshold,\n            intervalWidth,\n            intervalCenter,\n            minData: crossDy,\n        });\n        lastK = match.lastIndex;\n        if (match.possible !== -1) {\n            yIndex = crossDy[match.possible];\n        }\n        else {\n            match = tryMatchOneIntervalWithMinData({\n                x,\n                yData,\n                yThreshold,\n                lastK: lastJ,\n                intervalWidth,\n                intervalCenter,\n                minData: minddY,\n            });\n            if (match.possible !== -1) {\n                yIndex = minddY[match.possible];\n            }\n            lastJ = match.lastIndex;\n        }\n        if (yIndex !== -1) {\n            const width = Math.abs(intervalR[i].x - intervalL[i].x);\n            peaks.push({\n                id: crypto.randomUUID(),\n                x: x[yIndex],\n                y: y[yIndex],\n                width,\n                index: yIndex,\n                ddY: ddY[yIndex],\n                inflectionPoints: {\n                    from: intervalL[i],\n                    to: intervalR[i],\n                },\n            });\n        }\n    }\n    return peaks;\n}\n//# sourceMappingURL=autoAlgorithm.js.map","/**\n * Refine the `x` and `y` coordinates of each peak by running a quadratic\n * interpolation over the peak and its 3 closest neighbors.\n * The correction is performed in place.\n * @param data - Object with `x` and `y` arrays.\n * @param peaks - Peaks to refine (mutated in place).\n */\nexport function optimizeTop(data, peaks) {\n    const { x, y } = data;\n    for (const peak of peaks) {\n        let currentIndex = peak.index;\n        // The detected peak could be moved 1 or 2 units to left or right.\n        if (y[currentIndex - 1] >= y[currentIndex - 2] &&\n            y[currentIndex - 1] >= y[currentIndex]) {\n            currentIndex--;\n        }\n        else if (y[currentIndex + 1] >= y[currentIndex] &&\n            y[currentIndex + 1] >= y[currentIndex + 2]) {\n            currentIndex++;\n        }\n        else if (y[currentIndex - 2] >= y[currentIndex - 3] &&\n            y[currentIndex - 2] >= y[currentIndex - 1]) {\n            currentIndex -= 2;\n        }\n        else if (y[currentIndex + 2] >= y[currentIndex + 1] &&\n            y[currentIndex + 2] >= y[currentIndex + 3]) {\n            currentIndex += 2;\n        }\n        // Quadratic interpolation on log-intensities to refine the peak top.\n        if (y[currentIndex - 1] > 0 &&\n            y[currentIndex + 1] > 0 &&\n            y[currentIndex] >= y[currentIndex - 1] &&\n            y[currentIndex] >= y[currentIndex + 1] &&\n            (y[currentIndex] !== y[currentIndex - 1] ||\n                y[currentIndex] !== y[currentIndex + 1])) {\n            const alpha = Math.log10(y[currentIndex - 1]);\n            const beta = Math.log10(y[currentIndex]);\n            const gamma = Math.log10(y[currentIndex + 1]);\n            const p = (0.5 * (alpha - gamma)) / (alpha - 2 * beta + gamma);\n            const xCurrent = x[currentIndex];\n            const xPrevious = x[currentIndex - 1];\n            peak.x = xCurrent + (xCurrent - xPrevious) * p;\n            peak.y =\n                y[currentIndex] -\n                    0.25 * (y[currentIndex - 1] - y[currentIndex + 1]) * p;\n        }\n    }\n}\n//# sourceMappingURL=optimizeTop.js.map","import { optimizePeaksWithLogs } from \"./optimizePeaksWithLogs.js\";\n/**\n * Optimize the position (x), max intensity (y), full width at half maximum (fwhm)\n * and the ratio of gaussian contribution (mu) if it's required.\n * @param data - An object containing the x and y data to be fitted.\n * @param peakList - A list of initial parameters to be optimized. e.g. coming from a peak picking [{x, y, width}].\n * @param options - Optimization options.\n * @returns The optimized peaks.\n */\nexport function optimizePeaks(data, peakList, options = {}) {\n    return optimizePeaksWithLogs(data, peakList, options).optimizedPeaks;\n}\n//# sourceMappingURL=optimizePeaks.js.map","import { getShape1D } from 'ml-peak-shape-generator';\n/**\n * Append a `shape` property (including `fwhm`) to every peak.\n * @param peaks - Peaks with a `width` property.\n * @param options - Shape options.\n * @returns A peak list where every peak has a `shape` property.\n */\nexport function setShape(peaks, options = {}) {\n    const { shape = { kind: 'gaussian' }, output = structuredClone(peaks) } = options;\n    const shapeInstance = getShape1D(shape);\n    return output.map((peak) => ({\n        ...peak,\n        shape: { fwhm: shapeInstance.widthToFWHM(peak.width), ...shape },\n    }));\n}\n//# sourceMappingURL=setShape.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.peakPicking = peakPicking;\nconst ml_gsd_1 = require(\"ml-gsd\");\nconst ml_spectra_processing_1 = require(\"ml-spectra-processing\");\n/**\n * Filter the array of peaks\n * @param {import('./Spectrum')} spectrum - array of all the peaks\n * @returns {array}\n */\nfunction peakPicking(spectrum) {\n    if (!spectrum.peaks || spectrum.peaks.length === 0) {\n        spectrum.peaks = [];\n        const keys = Object.keys(spectrum.data).filter((key) => key !== 'x' && key !== 'y');\n        if (spectrum.isContinuous()) {\n            // some experimental data are really problematic and we need to add this line\n            const data = (0, ml_spectra_processing_1.xyEnsureGrowingX)(spectrum.data);\n            const gsdPeaks = (0, ml_gsd_1.gsd)(data, {\n                minMaxRatio: spectrum.options.threshold || 0.00025, // Threshold to determine if a given peak should be considered as a noise\n                realTopDetection: true,\n                smoothY: false,\n                sgOptions: { windowSize: 7, polynomial: 3 },\n            });\n            for (let gsdPeak of gsdPeaks) {\n                const peak = { x: gsdPeak.x, y: gsdPeak.y, width: gsdPeak.width };\n                for (let key of keys) {\n                    peak[key] = spectrum.data[key][gsdPeak.index];\n                }\n                spectrum.peaks.push(peak);\n            }\n        }\n        else {\n            spectrum.peaks = [];\n            let data = spectrum.data;\n            for (let i = 0; i < data.x.length; i++) {\n                const peak = {\n                    x: data.x[i],\n                    y: data.y[i],\n                    width: 0,\n                };\n                for (let key of keys) {\n                    peak[key] = spectrum.data[key][i];\n                }\n                spectrum.peaks.push(peak);\n            }\n        }\n    }\n    return spectrum.peaks;\n}\n//# sourceMappingURL=peakPicking.js.map","import { isAnyArray } from 'is-any-array';\n/**\n * Check that x and y are arrays with the same length.\n * @param x - first array\n * @param y - second array\n * @throws if x or y are not the same length, or if they are not arrays\n */\nexport function checkArrayLength(x, y) {\n    if (!isAnyArray(x) || !isAnyArray(y)) {\n        throw new TypeError('x and y must be arrays');\n    }\n    if (x.length !== y.length) {\n        throw new RangeError('x and y arrays must have the same length');\n    }\n}\n//# sourceMappingURL=checkArrayLength.js.map","import { isAnyArray } from 'is-any-array';\nimport { checkArrayLength } from './checkArrayLength';\nexport class BaseRegression {\n    constructor() {\n        if (new.target === BaseRegression) {\n            throw new Error('BaseRegression must be subclassed');\n        }\n    }\n    predict(x) {\n        if (typeof x === 'number') {\n            return this._predict(x);\n        }\n        else if (isAnyArray(x)) {\n            const y = [];\n            for (const xVal of x) {\n                y.push(this._predict(xVal));\n            }\n            return y;\n        }\n        else {\n            throw new TypeError('x must be a number or array');\n        }\n    }\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    _predict(x) {\n        throw new Error('_predict must be implemented');\n    }\n    train() {\n        // Do nothing for this package\n    }\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    toString(precision) {\n        return '';\n    }\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    toLaTeX(precision) {\n        return '';\n    }\n    /**\n     * Return the correlation coefficient of determination (r) and chi-square.\n     * @param x - explanatory variable\n     * @param y - response variable\n     * @return - Object with further statistics.\n     */\n    score(x, y) {\n        checkArrayLength(x, y);\n        const n = x.length;\n        const y2 = new Array(n);\n        for (let i = 0; i < n; i++) {\n            y2[i] = this._predict(x[i]);\n        }\n        let xSum = 0;\n        let ySum = 0;\n        let chi2 = 0;\n        let rmsd = 0;\n        let xSquared = 0;\n        let ySquared = 0;\n        let xY = 0;\n        for (let i = 0; i < n; i++) {\n            xSum += y2[i];\n            ySum += y[i];\n            xSquared += y2[i] * y2[i];\n            ySquared += y[i] * y[i];\n            xY += y2[i] * y[i];\n            if (y[i] !== 0) {\n                chi2 += ((y[i] - y2[i]) * (y[i] - y2[i])) / y[i];\n            }\n            rmsd += (y[i] - y2[i]) * (y[i] - y2[i]);\n        }\n        const r = (n * xY - xSum * ySum) /\n            Math.sqrt((n * xSquared - xSum * xSum) * (n * ySquared - ySum * ySum));\n        return {\n            r,\n            r2: r * r,\n            chi2,\n            rmsd: Math.sqrt(rmsd / n),\n        };\n    }\n}\n//# sourceMappingURL=BaseRegression.js.map","/**\n * Cast `number` to string. Optionally `digits` specifies significant figures.\n * @param number\n * @param figures\n * @returns - A string representation of `number`.\n */\nexport function maybeToPrecision(number, figures) {\n    if (number < 0) {\n        number = 0 - number;\n        if (typeof figures === 'number') {\n            return `- ${number.toPrecision(figures)}`;\n        }\n        else {\n            return `- ${number.toString()}`;\n        }\n    }\n    else if (typeof figures === 'number') {\n        return number.toPrecision(figures);\n    }\n    else {\n        return number.toString();\n    }\n}\n//# sourceMappingURL=maybeToPrecision.js.map","import { BaseRegression, checkArrayLength, maybeToPrecision, } from 'ml-regression-base';\n/**\n * Class representing simple linear regression.\n * The regression uses OLS to calculate intercept and slope.\n */\nexport class SimpleLinearRegression extends BaseRegression {\n    /**\n     * @param x - explanatory variable\n     * @param y - response variable\n     */\n    constructor(x, y) {\n        super();\n        // @ts-expect-error internal use of the constructor, from `this.load`\n        if (x === true) {\n            // @ts-expect-error internal use of the constructor, from `this.load`\n            const yObj = y;\n            this.slope = yObj.slope;\n            this.intercept = yObj.intercept;\n            this.coefficients = [yObj.intercept, yObj.slope];\n        }\n        else {\n            checkArrayLength(x, y);\n            const result = regress(x, y);\n            this.slope = result.slope;\n            this.intercept = result.intercept;\n            this.coefficients = [result.intercept, result.slope];\n        }\n    }\n    /**\n     * Get the parameters and model name in JSON format\n     * @returns\n     */\n    toJSON() {\n        return {\n            name: 'simpleLinearRegression',\n            slope: this.slope,\n            intercept: this.intercept,\n        };\n    }\n    _predict(x) {\n        return this.slope * x + this.intercept;\n    }\n    /**\n     * Finds x for the given y value.\n     * @param y - response variable value\n     * @returns - x value\n     */\n    computeX(y) {\n        return (y - this.intercept) / this.slope;\n    }\n    /**\n     * Strings the linear function in the form 'f(x) = ax + b'\n     * @param precision - number of significant figures.\n     * @returns\n     */\n    toString(precision) {\n        let result = 'f(x) = ';\n        if (this.slope !== 0) {\n            const xFactor = maybeToPrecision(this.slope, precision);\n            result += `${xFactor === '1' ? '' : `${xFactor} * `}x`;\n            if (this.intercept !== 0) {\n                const absIntercept = Math.abs(this.intercept);\n                const operator = absIntercept === this.intercept ? '+' : '-';\n                result += ` ${operator} ${maybeToPrecision(absIntercept, precision)}`;\n            }\n        }\n        else {\n            result += maybeToPrecision(this.intercept, precision);\n        }\n        return result;\n    }\n    /**\n     * Strings the linear function in the form 'f(x) = ax + b'\n     * @param precision - number of significant figures.\n     * @returns\n     */\n    toLaTeX(precision) {\n        return this.toString(precision);\n    }\n    /**\n     * Class instance from a JSON Object.\n     * @param json\n     * @returns\n     */\n    static load(json) {\n        if (json.name !== 'simpleLinearRegression') {\n            throw new TypeError('not a SLR model');\n        }\n        // @ts-expect-error internal use of the constructor\n        return new SimpleLinearRegression(true, json);\n    }\n}\n/**\n * Internal  function.\n * It determines the parameters (slope, intercept) of the line that best fit the `x,y` vector-data (simple linear regression).\n * @param x - explanatory variable\n * @param y - response variable\n * @returns - slope and intercept of the best fit line\n */\nfunction regress(x, y) {\n    const n = x.length;\n    let xSum = 0;\n    let ySum = 0;\n    let xSquared = 0;\n    let xY = 0;\n    for (let i = 0; i < n; i++) {\n        xSum += x[i];\n        ySum += y[i];\n        xSquared += x[i] * x[i];\n        xY += x[i] * y[i];\n    }\n    const numerator = n * xY - xSum * ySum;\n    const slope = numerator / (n * xSquared - xSum * xSum);\n    return {\n        slope,\n        intercept: (1 / n) * ySum - slope * (1 / n) * xSum,\n    };\n}\n//# sourceMappingURL=index.js.map","import {\n  BaseRegression,\n  checkArrayLength,\n  maybeToPrecision,\n} from 'ml-regression-base';\nimport { SimpleLinearRegression } from 'ml-regression-simple-linear';\n\nexport class PowerRegression extends BaseRegression {\n  constructor(x, y) {\n    super();\n    if (x === true) {\n      // reloading model\n      this.A = y.A;\n      this.B = y.B;\n    } else {\n      checkArrayLength(x, y);\n      regress(this, x, y);\n    }\n  }\n\n  _predict(newInputs) {\n    return this.A * newInputs ** this.B;\n  }\n\n  toJSON() {\n    return {\n      name: 'powerRegression',\n      A: this.A,\n      B: this.B,\n    };\n  }\n\n  toString(precision) {\n    return `f(x) = ${maybeToPrecision(\n      this.A,\n      precision,\n    )} * x^${maybeToPrecision(this.B, precision)}`;\n  }\n\n  toLaTeX(precision) {\n    let latex = '';\n    if (this.B >= 0) {\n      latex = `f(x) = ${maybeToPrecision(\n        this.A,\n        precision,\n      )}x^{${maybeToPrecision(this.B, precision)}}`;\n    } else {\n      latex = `f(x) = \\\\frac{${maybeToPrecision(\n        this.A,\n        precision,\n      )}}{x^{${maybeToPrecision(-this.B, precision)}}}`;\n    }\n    latex = latex.replace(/e([+-]?[0-9]+)/g, 'e^{$1}');\n    return latex;\n  }\n\n  static load(json) {\n    if (json.name !== 'powerRegression') {\n      throw new TypeError('not a power regression model');\n    }\n    return new PowerRegression(true, json);\n  }\n}\n\nfunction regress(pr, x, y) {\n  const n = x.length;\n  const xl = new Array(n);\n  const yl = new Array(n);\n  for (let i = 0; i < n; i++) {\n    xl[i] = Math.log(x[i]);\n    yl[i] = Math.log(y[i]);\n  }\n\n  const linear = new SimpleLinearRegression(xl, yl);\n  pr.A = Math.exp(linear.intercept);\n  pr.B = linear.slope;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.peaksWidth = peaksWidth;\nconst ml_regression_power_1 = require(\"ml-regression-power\");\nconst ml_spectra_processing_1 = require(\"ml-spectra-processing\");\nfunction peaksWidth(peaks) {\n    let xs = peaks.map((peak) => peak.x);\n    let widths = peaks.map((peak) => peak.width);\n    if (xs.length < 2) {\n        throw new Error(`peaksWidth: not enough peaks (less than 2) for automatic width calculation: ${xs.length}`);\n    }\n    let regression = new ml_regression_power_1.PowerRegression(xs, widths);\n    if (Number.isNaN(regression.A) || Number.isNaN(regression.B)) {\n        throw new Error('peaksWidth: can not calculate regression');\n    }\n    let from = (0, ml_spectra_processing_1.xMinValue)(xs);\n    let to = (0, ml_spectra_processing_1.xMaxValue)(xs);\n    let regressionChart = { x: [], y: [] };\n    for (let x = from; x <= to; x += (to - from) / 1000) {\n        regressionChart.x.push(x);\n        regressionChart.y.push(regression.predict(x));\n    }\n    return {\n        widths: {\n            x: xs,\n            y: widths,\n        },\n        fit: regressionChart,\n        score: regression.score(xs, widths),\n        predictFct: regression.predict.bind(regression),\n        tex: regression.toLaTeX(3),\n        A: regression.A,\n        B: regression.B,\n        predictFctString: `${regression.A} * mass ** ${regression.B}`,\n    };\n}\n//# sourceMappingURL=peaksWidth.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Spectrum = void 0;\nexports.fromPeaks = fromPeaks;\nexports.fromText = fromText;\nconst is_any_array_1 = require(\"is-any-array\");\nconst ml_spectra_processing_1 = require(\"ml-spectra-processing\");\nconst xy_parser_1 = require(\"xy-parser\");\nconst getBestPeaks_js_1 = require(\"./getBestPeaks.js\");\nconst getFragmentPeaks_js_1 = require(\"./getFragmentPeaks.js\");\nconst getMassRemainder_js_1 = require(\"./getMassRemainder.js\");\nconst getPeakChargeBySimilarity_js_1 = require(\"./getPeakChargeBySimilarity.js\");\nconst getPeaks_js_1 = require(\"./getPeaks.js\");\nconst getPeaksWithCharge_js_1 = require(\"./getPeaksWithCharge.js\");\nconst isContinuous_js_1 = require(\"./isContinuous.js\");\nconst peakPicking_js_1 = require(\"./peakPicking.js\");\nconst peaksWidth_js_1 = require(\"./peaksWidth.js\");\nconst defaultData = { x: [], y: [] };\n/**\n * Class dealing with mass spectra and peak picking\n */\nclass Spectrum {\n    /**\n     *\n     * @param {import('cheminfo-types').DataXY} data\n     * @param {object} [options={}]\n     * @param {number} [options.threshold=0.00025]\n     */\n    constructor(data = defaultData, options = {}) {\n        if (typeof data !== 'object' ||\n            !(0, is_any_array_1.isAnyArray)(data.x) ||\n            !(0, is_any_array_1.isAnyArray)(data.y)) {\n            throw new TypeError('Spectrum data must be an object with x:[], y:[]');\n        }\n        this.data = { ...data };\n        this.options = { threshold: 0.00025, ...options };\n        Object.defineProperty(this.data, 'xOriginal', {\n            enumerable: false,\n            writable: true,\n        });\n        if (this.data && this.data.x.length > 0) {\n            this.info = {\n                minX: (0, ml_spectra_processing_1.xMinValue)(this.data.x),\n                maxX: (0, ml_spectra_processing_1.xMaxValue)(this.data.x),\n                minY: (0, ml_spectra_processing_1.xMinValue)(this.data.y),\n                maxY: (0, ml_spectra_processing_1.xMaxValue)(this.data.y),\n            };\n        }\n        else {\n            this.info = {\n                minX: Number.NaN,\n                maxX: Number.NaN,\n                minY: Number.NaN,\n                maxY: Number.NaN,\n            };\n        }\n        this.cache = {};\n        /**\n         * someProperty is an example property that is set to `true`\n         * @type {array}\n         * @public\n         */\n        this.peaks = [];\n    }\n    minMaxX() {\n        return (0, ml_spectra_processing_1.xMinMaxValues)(this.data.x);\n    }\n    /**\n     *\n     * @param {import('ml-spectra-processing').XYMaxYOptions} options\n     * @returns\n     */\n    maxY(options) {\n        return (0, ml_spectra_processing_1.xyMaxY)(this.data, options);\n    }\n    sumY() {\n        if (!this.cache.sumY) {\n            this.cache.sumY = (0, ml_spectra_processing_1.xSum)(this.data.y);\n        }\n        return this.cache.sumY;\n    }\n    scaleY(intensity = 1) {\n        this.data.y = Array.from((0, ml_spectra_processing_1.xNormed)(this.data.y, { value: intensity, algorithm: 'max' }));\n        return this;\n    }\n    rescaleX(callback) {\n        this.ensureOriginalX();\n        for (let i = 0; i < this.data.x.length; i++) {\n            this.data.x[i] = callback(this.data.xOriginal[i]);\n        }\n        return this;\n    }\n    ensureOriginalX() {\n        if (!this.data.xOriginal) {\n            this.data.xOriginal = this.data.x.slice(0);\n        }\n    }\n    normedY(total = 1) {\n        this.data.y = (0, ml_spectra_processing_1.xNormed)(this.data.y, { value: total });\n        return this;\n    }\n    peakPicking() {\n        (0, peakPicking_js_1.peakPicking)(this);\n        return this.peaks;\n    }\n    peaksWidth() {\n        (0, peakPicking_js_1.peakPicking)(this);\n        return (0, peaksWidth_js_1.peaksWidth)(this.peaks);\n    }\n    getBestPeaks(options) {\n        (0, peakPicking_js_1.peakPicking)(this);\n        return (0, getBestPeaks_js_1.getBestPeaks)(this.peaks, options);\n    }\n    /**\n     * This is a very intensive function so better to calculate it on a selection of peaks\n     * @param {Array} selectedPeaks\n     * @param {object} [options={}]\n     * @param {number} [options.min=1]\n     * @param {number} [options.max=10]\n     * @param {number} [options.low=-1]\n     * @param {number} [options.high=1]\n     * @param {number} [options.precision=30]\n     * @returns\n     */\n    getSelectedPeaksWithCharge(selectedPeaks, options) {\n        return (0, getPeaksWithCharge_js_1.getPeaksWithCharge)(selectedPeaks, this.peaks, options);\n    }\n    getPeakChargeBySimilarity(targetMass, options) {\n        return (0, getPeakChargeBySimilarity_js_1.getPeakChargeBySimilarity)(this, targetMass, options);\n    }\n    getPeaks(options) {\n        (0, peakPicking_js_1.peakPicking)(this);\n        return (0, getPeaks_js_1.getPeaks)(this.peaks, options);\n    }\n    getPeaksAsDataXY(options) {\n        (0, peakPicking_js_1.peakPicking)(this);\n        const peaks = (0, getPeaks_js_1.getPeaks)(this.peaks, options);\n        return {\n            x: peaks.map((peak) => peak.x),\n            y: peaks.map((peak) => peak.y),\n        };\n    }\n    /**\n     * Returns also peaks possible for a specific molecular formula\n     * @example\n     *  const spectrum = new Spectrum({x:[], y:[]})\n     *  await spectrum.getFragmentPeaks();\n     * @param {string} mf\n     * @param {object} options\n     * @returns\n     */\n    getFragmentPeaksFct(mf, options) {\n        (0, peakPicking_js_1.peakPicking)(this);\n        return (0, getFragmentPeaks_js_1.getFragmentPeaks)(this.peaks, mf, options);\n    }\n    isContinuous() {\n        return (0, isContinuous_js_1.isContinuous)(this);\n    }\n    /**\n     * Remove an integer number of time the specifiedd monoisotopic mass\n     * Mass remainder analysis (MARA): https://doi.org/10.1021/acs.analchem.7b04730\n     */\n    getMassRemainderFct(mass, options = {}) {\n        return (0, getMassRemainder_js_1.getMassRemainder)(this.data, mass, options);\n    }\n}\nexports.Spectrum = Spectrum;\nfunction fromPeaks(peaks) {\n    if (peaks.length === 0)\n        return new Spectrum();\n    const data = {};\n    for (let key of Object.keys(peaks[0])) {\n        data[key] = peaks.map((peak) => peak[key]);\n    }\n    return new Spectrum(data);\n}\nfunction fromText(text, options) {\n    const data = (0, xy_parser_1.parseXY)(text);\n    return new Spectrum(data, options);\n}\n//# sourceMappingURL=Spectrum.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MSComparator = void 0;\nconst ml_spectra_processing_1 = require(\"ml-spectra-processing\");\nclass MSComparator {\n    /**\n     * Create a class that will be able to get the similarity between 2 spectra\n     * The similarity is based on 'cosine' similarity. The goal is 2 prepare 2 vectors\n     * on which the similarity is calculated.\n     * The vectors are created by taking the mass and the intensity of the peaks.\n     * @param {object} [options={}]\n     * @param {number} [options.nbPeaks] - Before comparing spectra how many peaks should be kept\n     * @param {number} [options.minNbCommonPeaks] - Minimum number of peaks in common to consider any similarity\n     * @param {number} [options.minIntensity] - What is the minimal relative intensity to keep a peak\n     * @param {number} [options.massPower=3] - High power will give more weight to the mass. If you would prefer to observe fragments you should use a number less than 1\n     * @param {number} [options.intensityPower=0.6] - How important is the intensity. By default we don't give to much importance to it\n     * @param {number[]} [options.selectedMasses] - List of allowed masses.\n     * @param {number|Function} [options.delta=0.1] - Tolerance in Da (u) to consider 2 peaks as aligned. If a function is provided it will be called with the mass of the peak\n     */\n    constructor(options = {}) {\n        this.options = {\n            massPower: 3,\n            intensityPower: 0.6,\n            delta: 0.1,\n            ...options,\n        };\n        this.cache = new WeakMap();\n    }\n    /**\n     * Get the similarity between a spectrum and a list of masses.\n     * The main issue is that we don't have the intensity of the peaks.\n     * So we will use the intensity of the closest peak.\n     * @param {import('cheminfo-types').DataXY} dataXY\n     * @param {number[]} masses\n     */\n    getSimilarityToMasses(dataXY, masses) {\n        const data1 = normalizeAndCacheData(this.cache, dataXY, this.options);\n        const data2 = {\n            x: Float64Array.from(masses),\n            y: new Float64Array(masses.length).fill(1),\n        };\n        let aligned;\n        if (this.options.selectedMasses?.length > 0) {\n            aligned = (0, ml_spectra_processing_1.xyArrayAlign)([\n                data1,\n                data2,\n                {\n                    // this allows to force the selection of some specific masses\n                    x: Float64Array.from(this.options.selectedMasses),\n                    y: new Float64Array(this.options.selectedMasses.length).fill(1),\n                },\n            ], {\n                delta: this.options.delta,\n                requiredY: true,\n            });\n        }\n        else {\n            aligned = (0, ml_spectra_processing_1.xyArrayAlign)([data1, data2], {\n                delta: this.options.delta,\n            });\n        }\n        // because we don't have any idea of the intensity we will use the intensity of the experimental peak\n        // and otherwise we ignore the theoretical peak\n        for (let i = 0; i < aligned.ys[0].length; i++) {\n            if (aligned.ys[0][i] === 0) {\n                aligned.ys[1][i] = 0;\n            }\n            if (aligned.ys[0][i] > 0 && aligned.ys[1][i] !== 0) {\n                aligned.ys[1][i] = aligned.ys[0][i];\n            }\n        }\n        return returnSimilarity(aligned, this.options);\n    }\n    /**\n     *\n     * @param {import('cheminfo-types').DataXY} dataXY1\n     * @param {import('cheminfo-types').DataXY} dataXY2\n     */\n    getSimilarity(dataXY1, dataXY2) {\n        const data1 = normalizeAndCacheData(this.cache, dataXY1, this.options);\n        const data2 = normalizeAndCacheData(this.cache, dataXY2, this.options);\n        let aligned;\n        if (this.options.selectedMasses?.length > 0) {\n            aligned = (0, ml_spectra_processing_1.xyArrayAlign)([\n                data1,\n                data2,\n                {\n                    // this allows to force the selection of some specific masses\n                    x: Float64Array.from(this.options.selectedMasses),\n                    y: new Float64Array(this.options.selectedMasses.length).fill(1),\n                },\n            ], {\n                delta: this.options.delta,\n                requiredY: true,\n            });\n        }\n        else {\n            aligned = (0, ml_spectra_processing_1.xyArrayAlign)([data1, data2], {\n                delta: this.options.delta,\n            });\n        }\n        return returnSimilarity(aligned, this.options);\n    }\n}\nexports.MSComparator = MSComparator;\n/**\n *\n * @param {WeakMap} cache\n * @param {import('cheminfo-types').DataXY} dataXY\n * @param {object} [options={}]\n * @param {number} [options.nbPeaks]\n * @param {number} [options.minIntensity]\n */\nfunction normalizeAndCacheData(cache, dataXY, options = {}) {\n    const { nbPeaks, minIntensity } = options;\n    if (cache.has(dataXY))\n        return cache.get(dataXY);\n    let data = { ...dataXY };\n    if ((0, ml_spectra_processing_1.xIsMonotonic)(data.x) !== 1) {\n        data = (0, ml_spectra_processing_1.xySortX)(data);\n    }\n    if (minIntensity !== undefined) {\n        data = (0, ml_spectra_processing_1.xyFilterMinYValue)(data, minIntensity);\n    }\n    if (nbPeaks !== undefined) {\n        data = (0, ml_spectra_processing_1.xyFilterTopYValues)(data, nbPeaks);\n    }\n    cache.set(dataXY, data);\n    return data;\n}\n/**\n *\n * @param {*} aligned\n * @param {object} [options={}]\n * @param {number} [options.massPower]\n * @param {number} [options.intensityPower]\n * @param {number} [options.minNbCommonPeaks]\n\n * @returns\n */\nfunction returnSimilarity(aligned, options = {}) {\n    const { massPower, intensityPower, minNbCommonPeaks } = options;\n    let nbCommonPeaks = 0;\n    let nbPeaks1 = 0;\n    let nbPeaks2 = 0;\n    for (let i = 0; i < aligned.ys[0].length; i++) {\n        if (aligned.ys[0][i] !== 0) {\n            nbPeaks1++;\n        }\n        if (aligned.ys[1][i] !== 0) {\n            nbPeaks2++;\n        }\n        if (aligned.ys[0][i] !== 0 && aligned.ys[1][i] !== 0) {\n            nbCommonPeaks++;\n        }\n    }\n    if (nbCommonPeaks === 0 ||\n        (minNbCommonPeaks && nbCommonPeaks < minNbCommonPeaks)) {\n        return {\n            nbCommonPeaks,\n            nbPeaks1,\n            nbPeaks2,\n            tanimoto: 0,\n            cosine: 0,\n        };\n    }\n    const vector1 = new Float64Array(aligned.x.length);\n    const vector2 = new Float64Array(aligned.x.length);\n    for (let i = 0; i < aligned.x.length; i++) {\n        vector1[i] = aligned.x[i] ** massPower * aligned.ys[0][i] ** intensityPower;\n        vector2[i] = aligned.x[i] ** massPower * aligned.ys[1][i] ** intensityPower;\n    }\n    return {\n        nbCommonPeaks,\n        nbPeaks1,\n        nbPeaks2,\n        tanimoto: nbCommonPeaks / (nbPeaks1 + nbPeaks2 - nbCommonPeaks),\n        cosine: cosineSimilarity(vector1, vector2),\n    };\n}\n/**\n * Returns the average of cosine distances between vectors a and b\n * Copied from https://github.com/mljs/distance/blob/0b15acd6476413f4111cb4852ca1bec9edaa2805/src/similarities/cosine.ts\n * @param a {import('cheminfo-types').NumberArray} - first vector\n * @param b {import('cheminfo-types').NumberArray} - second vector\n * @returns {number} - cosine similarity\n */\nfunction cosineSimilarity(a, b) {\n    let p = 0;\n    let p2 = 0;\n    let q2 = 0;\n    for (let i = 0; i < a.length; i++) {\n        p += a[i] * b[i];\n        p2 += a[i] * a[i];\n        q2 += b[i] * b[i];\n    }\n    return p / (Math.sqrt(p2) * Math.sqrt(q2));\n}\n//# sourceMappingURL=MSComparator.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getPeaksAnnotation = getPeaksAnnotation;\nconst fromMonoisotopicMass_1 = require(\"../from/fromMonoisotopicMass\");\n/**\n *\n * @param {array} bestPeaks\n * @param {object} [options={}]\n * @param {number} [options.numberDigits=5]\n * @param {number} [options.numberMFs=0]\n * @param {boolean} [options.showMF=false]\n * @param {array} [options.mfColors={}]\n * @param {number} [options.charge=1]\n * @param {number} [options.shift=0]\n * @param {object} [options.mfPrefs]\n * @param {number} [options.displayCharge=true]\n * @param {number} [options.displayProperties=[]] Array of properties name to display\n * @returns {Promise}\n */\nasync function getPeaksAnnotation(bestPeaks, options = {}) {\n    let { numberDigits = 5, shift = 0, showMF = false, numberMFs = 0, charge = 1, mfPrefs = {}, displayCharge = true, displayProperties = [], mfColors = [\n        { limit: 3, color: 'green' },\n        { limit: 20, color: 'lightgreen' },\n        { limit: 50, color: 'lightorange' },\n    ], } = options;\n    if (showMF && !numberMFs)\n        numberMFs = 1;\n    let annotations = [];\n    bestPeaks.sort((a, b) => (a.close ? -1 : b.close ? 1 : 0));\n    for (let peak of bestPeaks) {\n        let textLine = 0;\n        let annotation;\n        if (peak.close) {\n            annotation = {\n                type: 'line',\n                _highlight: peak._highlight,\n                info: peak,\n                position: [\n                    {\n                        y: peak.y,\n                        dy: '-5px',\n                        x: peak.x,\n                    },\n                    {\n                        y: peak.y,\n                        dy: '-15px',\n                        x: peak.x,\n                    },\n                ],\n            };\n            annotations.push(annotation);\n            annotation = {\n                type: 'ellipse',\n                _highlight: peak._highlight,\n                info: peak,\n                position: [\n                    {\n                        y: peak.y,\n                        dy: '-15px',\n                        x: peak.x,\n                    },\n                ],\n                props: {\n                    rx: '3px',\n                    ry: '3px',\n                    fillOpacity: 0.3,\n                },\n            };\n        }\n        else {\n            annotation = {\n                type: 'line',\n                _highlight: peak._highlight,\n                position: [\n                    {\n                        y: peak.y,\n                        dy: '-5px',\n                        x: peak.x,\n                    },\n                    {\n                        y: peak.y,\n                        dy: '-25px',\n                        x: peak.x,\n                    },\n                ],\n                labels: [\n                    {\n                        text: (peak.x + shift).toFixed(numberDigits),\n                        color: 'red',\n                        position: {\n                            x: peak.x,\n                            y: peak.y,\n                            dy: `${textLine++ * -13 - 17}px`,\n                            dx: '2px',\n                        },\n                    },\n                ],\n            };\n            if (displayCharge && peak.charge !== undefined) {\n                annotation.labels.push({\n                    text: `Z:${peak.charge}`,\n                    color: 'grey',\n                    position: {\n                        x: peak.x,\n                        y: peak.y,\n                        dy: '-4px',\n                        dx: '2px',\n                    },\n                });\n            }\n            let mfs = [];\n            if (numberMFs) {\n                // we have 2 cases. Either there is a shift and we deal with differences\n                // otherwise it is absolute\n                // if there is a shift we consider only a neutral loss and the parameter charge is important\n                // we also check that the selected peak (for relative mass) is not the current peak\n                if (shift && Math.abs(peak.x + shift) > Number.EPSILON) {\n                    // neutral loss\n                    let currentMfPrefs = {\n                        ...mfPrefs,\n                        allowNeutral: true,\n                        ionizations: '',\n                    };\n                    // we need to deal with the precision and increase it\n                    currentMfPrefs.precision =\n                        (currentMfPrefs.precision / Math.max(Math.abs(peak.x + shift), 1)) *\n                            peak.x;\n                    ({ mfs } = await (0, fromMonoisotopicMass_1.fromMonoisotopicMass)(Math.abs((peak.x + shift) * charge), currentMfPrefs));\n                }\n                else {\n                    ({ mfs } = await (0, fromMonoisotopicMass_1.fromMonoisotopicMass)(Math.abs(peak.x * charge), mfPrefs));\n                }\n                let numberOfMFS = Math.min(mfs.length, numberMFs);\n                for (let i = 0; i < numberOfMFS; i++) {\n                    let mf = mfs[i];\n                    let ppm = shift ? (mf.ms.ppm / shift) * mfs[0].ms.em : mf.ms.ppm;\n                    annotation.labels.push({\n                        text: mf.mf,\n                        color: getColor(mfColors, Math.abs(ppm)),\n                        position: {\n                            x: peak.x,\n                            y: peak.y,\n                            dy: `${textLine++ * -13 - 17}px`,\n                            dx: '2px',\n                        },\n                    });\n                }\n            }\n            if (displayProperties.length > 0) {\n                for (let property of displayProperties) {\n                    annotation.labels.push({\n                        text: peak[property],\n                        color: 'red',\n                        position: {\n                            x: peak.x,\n                            y: peak.y,\n                            dy: `${textLine++ * -13 - 17}px`,\n                            dx: '2px',\n                        },\n                    });\n                }\n            }\n        }\n        annotations.push(annotation);\n    }\n    return annotations;\n}\nfunction getColor(colors, value) {\n    for (let color of colors) {\n        if (value < color.limit)\n            return color.color;\n    }\n    return 'lightgrey';\n}\n//# sourceMappingURL=getPeaksAnnotation.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.JsGraph = void 0;\nconst getPeaksAnnotation_js_1 = require(\"./getPeaksAnnotation.js\");\nexports.JsGraph = {\n    getPeaksAnnotation: getPeaksAnnotation_js_1.getPeaksAnnotation,\n};\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.appendFragmentsInfo = appendFragmentsInfo;\nconst mf_finder_1 = require(\"mf-finder\");\n/**\n *\n * @param {object}   experimentalSpectrum\n * @param {object}   database\n * @param {object}   [options={}]\n * @param {function} [options.onStep] - Callback to do after each step\n * @param {string}   [options.ionizations=''] - string containing a comma separated list of modifications\n * @param {number}   [options.precision=100] - Allowed mass range based on precision\n */\nasync function appendFragmentsInfo(experimentalSpectrum, database, options = {}) {\n    const { ionizations, onStep, precision } = options;\n    if (!experimentalSpectrum) {\n        throw new Error('Experimental spectrum is not defined');\n    }\n    if (!database) {\n        throw new Error('Database is not defined');\n    }\n    const peaks = experimentalSpectrum.getPeaks({ sumValue: 1 });\n    for (let entry of database) {\n        const ranges = Object.keys(entry.atoms)\n            .map((atom) => `${atom}0-${entry.atoms[atom]}`)\n            .join(' ');\n        entry.fragments = {\n            nbFound: 0,\n            intensityFound: 0,\n            assignments: [],\n        };\n        for (let i = 0; i < peaks.length; i++) {\n            if (onStep)\n                await onStep(i);\n            const peak = peaks[i];\n            const possibleMFs = await (0, mf_finder_1.findMFs)(peak.x, {\n                ionizations,\n                precision,\n                ranges,\n            });\n            if (possibleMFs.mfs.length > 0) {\n                entry.fragments.nbFound++;\n                entry.fragments.intensityFound += peak.y;\n                entry.fragments.assignments.push({\n                    peak,\n                    bestMF: possibleMFs.mfs[0],\n                });\n            }\n        }\n    }\n}\n//# sourceMappingURL=appendFragmentsInfo.js.map","'use strict';\n\n/**\n * Modify object a to join it with b and make the sum of each of the keys\n * @param {*} a\n * @param {*} source1\n *\n * @return {object}\n */\n\nfunction sum(target) {\n    for (var i = 1; i < arguments.length; i++) {\n        let toSum = arguments[i];\n        for (var key of Object.keys(toSum)) {\n            if (target[key]) {\n                target[key] += toSum[key];\n            } else {\n                target[key] = toSum[key];\n            }\n        }\n    }\n    return target;\n}\n\nmodule.exports = sum;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.generateMFs = generateMFs;\nconst chemical_elements_1 = require(\"chemical-elements\");\nconst mf_matcher_1 = require(\"mf-matcher\");\nconst mf_parser_1 = require(\"mf-parser\");\nconst mf_utilities_1 = require(\"mf-utilities\");\nconst sum_object_keys_1 = __importDefault(require(\"sum-object-keys\"));\n/**\n * Generate all the possible combinations of molecular formula and calculate\n * for each of them the monoisotopic mass and observed monoisotopic mass (m/z)\n * In the molecular formula there may be a comment after the '$' symbol\n *\n * @param {Array}         ranges\n * @param {object}        [options={}]\n * @param {number}        [options.limit=10000000] - Maximum number of results\n * @param {boolean}       [options.estimate=false] - estimate the number of MF without filters\n * @param {boolean}       [options.canonizeMF=true] - Canonize molecular formula\n * @param {boolean}       [options.uniqueMFs=true] - Force canonization and make MF unique\n * @param {string}        [options.ionizations=''] - Comma separated list of ionizations (to charge the molecule)\n * @param {function}      [options.onStep] - Callback to do after each step\n * @param {import('mf-matcher').MSEMFilterOptions}        [options.filter={}]\n * @param {string}        [options.filterFct]\n * @param {object}        [options.links]\n * @param {boolean}       [options.links.filter] We filter all the MF that do not match the '*X'\n * @returns {Promise}\n */\nasync function generateMFs(ranges, options = {}) {\n    if (!Array.isArray(ranges)) {\n        throw new Error('Ranges must be an array of string or object');\n    }\n    options = { ...options };\n    let { limit = 100000, uniqueMFs = true, estimate = false, onStep, filterFct, canonizeMF, ionizations: rawIonizations, } = options;\n    let filterFctVariables = {};\n    for (let i = 0; i < ranges.length; i++) {\n        const range = ranges[i];\n        if (typeof range === 'object' && range.name) {\n            filterFctVariables[range.name] = i;\n            ranges[i] = range.value;\n        }\n    }\n    if (filterFct) {\n        // we create a real javascript function\n        let variables = Object.keys(filterFctVariables);\n        variables.push('mm', 'mz', 'charge', 'unsaturation', 'atoms');\n        // eslint-disable-next-line no-new-func\n        filterFct = new Function(...variables, `return ${filterFct}`);\n    }\n    if (uniqueMFs === true)\n        canonizeMF = true;\n    if (canonizeMF === undefined)\n        canonizeMF = true;\n    const ionizations = (0, mf_utilities_1.preprocessIonizations)(rawIonizations);\n    options = {\n        ...options,\n        filterFctVariables,\n        filterFct,\n        canonizeMF,\n        ionizations,\n    };\n    // we allow String delimited by \". or ;\" instead of an array\n    for (let i = 0; i < ranges.length; i++) {\n        if (!Array.isArray(ranges[i])) {\n            ranges[i] = ranges[i].split(/[,.]/);\n        }\n    }\n    // we allow ranges in a string ...\n    // problem with ranges is that we need to know to what the range applies\n    for (let i = 0; i < ranges.length; i++) {\n        let parts = ranges[i];\n        let newParts = [];\n        for (let j = 0; j < parts.length; j++) {\n            let part = parts[j];\n            if (part.match(/\\d-[\\d-]/)) {\n                // deal with negative numbers\n                // there are ranges ... we are in trouble !\n                newParts = newParts.concat(new mf_parser_1.MF(part).flatten({ groupIdentical: false, limit }));\n            }\n            else {\n                newParts.push(parts[j]); // the part with the comments !\n            }\n        }\n        ranges[i] = newParts;\n    }\n    if (estimate) {\n        let total = ranges.reduce((previous, current) => previous * current.length, 1);\n        return total * ionizations.length;\n    }\n    let results = [];\n    let sizes = [];\n    let currents = [];\n    for (let i = 0; i < ranges.length; i++) {\n        sizes.push(ranges[i].length - 1);\n        currents.push(0);\n    }\n    let position = 0;\n    let evolution = 0;\n    while (position < currents.length) {\n        if (currents[position] < sizes[position]) {\n            if (onStep)\n                await onStep(evolution);\n            evolution++;\n            appendResult(results, currents, ranges, options);\n            currents[position]++;\n            for (let i = 0; i < position; i++) {\n                currents[i] = 0;\n            }\n            position = 0;\n        }\n        else {\n            position++;\n        }\n        if (evolution > limit) {\n            throw new Error(`You have reached the limit of ${limit}. You could still change this value using the limit option but it is likely to crash.`);\n        }\n    }\n    appendResult(results, currents, ranges, options);\n    if (uniqueMFs) {\n        let uniqueMFsObject = {};\n        for (const result of results) {\n            uniqueMFsObject[result.mf + result.ionization.mf] = result;\n        }\n        results = Object.keys(uniqueMFsObject).map((k) => uniqueMFsObject[k]);\n    }\n    results.sort((a, b) => a.em - b.em);\n    return results;\n}\nlet ems = {};\n// internal method used as a cache\nfunction getMonoisotopicMass(mfString) {\n    if (!ems[mfString]) {\n        // we need to calculate based on the mf but not very often ...\n        let mf = new mf_parser_1.MF(mfString);\n        let info = mf.getInfo();\n        ems[mfString] = {\n            em: info.monoisotopicMass,\n            charge: info.charge,\n            mw: info.mass,\n            unsaturation: (info.unsaturation - 1) * 2,\n            atoms: info.atoms,\n        };\n    }\n    return ems[mfString];\n}\nfunction getEMFromParts(parts, currents, ionization) {\n    let charge = 0;\n    let em = 0;\n    let mw = 0;\n    let unsaturation = 0;\n    let validUnsaturation = true;\n    let atoms = {};\n    for (let i = 0; i < parts.length; i++) {\n        let part = parts[i][currents[i]];\n        if (part) {\n            let info = getMonoisotopicMass(part);\n            charge += info.charge;\n            em += info.em;\n            mw += info.mw;\n            (0, sum_object_keys_1.default)(atoms, info.atoms);\n            if (info.unsaturation && validUnsaturation) {\n                unsaturation += info.unsaturation;\n            }\n        }\n    }\n    return {\n        charge,\n        em,\n        mw,\n        ionization,\n        unsaturation: validUnsaturation ? unsaturation / 2 + 1 : undefined,\n        atoms,\n    };\n}\nfunction appendResult(results, currents, keys, options = {}) {\n    const { canonizeMF, filter, ionizations, filterFct, filterFctVariables, links = {}, } = options;\n    // this script is designed to combine molecular formula\n    // that may contain comments after a \"$\" sign\n    // therefore we should put all the comments at the ned\n    if (links.filter) {\n        let sharps = [];\n        for (let i = 0; i < keys.length; i++) {\n            let anchors = keys[i][currents[i]].match(/#\\d+/g);\n            if (anchors)\n                sharps.push(...anchors);\n        }\n        if (sharps.length % 2 === 1)\n            return;\n        sharps = sharps.toSorted();\n        for (let i = 0; i < sharps.length; i += 2) {\n            if (sharps[i] !== sharps[i + 1])\n                return;\n        }\n    }\n    for (let ionization of ionizations) {\n        let result = getEMFromParts(keys, currents, ionization);\n        if (filterFct) {\n            let variables = [];\n            for (let key in filterFctVariables) {\n                variables.push(currents[filterFctVariables[key]]);\n            }\n            variables.push(result.em, (result.em + ionization.em - ionization.charge * chemical_elements_1.ELECTRON_MASS) /\n                Math.abs(ionization.charge), result.charge + result.ionization.charge, result.unsaturation, result.atoms);\n            if (!filterFct(...variables))\n                continue;\n        }\n        result.parts = [];\n        result.mf = '';\n        let comments = [];\n        for (let i = 0; i < keys.length; i++) {\n            let key = keys[i][currents[i]];\n            if (key) {\n                if (key.includes('$')) {\n                    comments.push(key.replace(/^[^$]*\\$/, ''));\n                    key = key.replace(/\\$.*/, '');\n                }\n                result.parts[i] = key;\n                result.mf += key;\n            }\n        }\n        if (comments.length > 0) {\n            result.comment = comments.join(' ');\n        }\n        let match = (0, mf_matcher_1.msemMatcher)(result, filter);\n        if (!match)\n            continue;\n        result.ms = match.ms;\n        result.ionization = match.ionization;\n        if (canonizeMF) {\n            result.mf = new mf_parser_1.MF(result.mf).toMF();\n        }\n        results.push(result);\n    }\n}\n//# sourceMappingURL=generateMFs.js.map","let xAtomicNumber = 0;\n/**\n * Returns the atomic number of the X atom\n * @param {import('openchemlib').Molecule} molecule - An instance of a molecule\n * @returns\n */\nexport function getXAtomicNumber(molecule) {\n    if (!xAtomicNumber) {\n        const OCL = molecule.getOCL();\n        xAtomicNumber = OCL.Molecule.getAtomicNoFromLabel('X', OCL.Molecule.cPseudoAtomX);\n    }\n    return xAtomicNumber;\n}\n//# sourceMappingURL=getXAtomicNumber.js.map","/**\n * Check if a specific atom is a sp3 carbon\n * @param {import('openchemlib').Molecule} molecule\n * @param {number} atomID\n */\nexport function isCsp3(molecule, atomID) {\n    if (molecule.getAtomicNo(atomID) !== 6)\n        return false;\n    if (molecule.getAtomCharge(atomID) !== 0)\n        return false;\n    if (molecule.getImplicitHydrogens(atomID) + molecule.getConnAtoms(atomID) !==\n        4) {\n        return false;\n    }\n    return true;\n}\n//# sourceMappingURL=isCsp3.js.map","/**\n * This method put all the chiral centers in the molecule in the same group and racemic\n * @param {import('openchemlib').Molecule} molecule - An instance of a molecule\n * @param {object} [options={}]\n * @param {object} [options.OCL] - openchemlib library\n */\nexport function makeRacemic(molecule) {\n    const { Molecule } = molecule.getOCL();\n    // if we don't calculate this we have 2 epimers\n    molecule.ensureHelperArrays(Molecule.cHelperCIP);\n    // we need to make one group \"AND\" for chiral (to force to racemic, this means diastereotopic and not enantiotopic)\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        if (molecule.getAtomParity(i) !== Molecule.cAtomParityNone) {\n            molecule.setAtomESR(i, Molecule.cESRTypeAnd, 0); // changed to group 0; TLS 9.Nov.2015\n        }\n    }\n    // after the change we need to recalculate the CIP\n    molecule.ensureHelperArrays(Molecule.cHelperCIP);\n}\n//# sourceMappingURL=makeRacemic.js.map","import { getXAtomicNumber } from './getXAtomicNumber.js';\n/**\n * Tag an atom to be able to visualize it\n * @param molecule\n * @param iAtom\n */\nexport function tagAtom(molecule, iAtom) {\n    const customLabel = `${molecule.getAtomLabel(iAtom)}*`;\n    molecule.setAtomCustomLabel(iAtom, customLabel);\n    if (molecule.getAtomicNo(iAtom) === 1) {\n        molecule.setAtomicNo(iAtom, getXAtomicNumber(molecule));\n    }\n    else {\n        // we can not use X because we would have problems with valencies if it is\n        // expanded hydrogens or not\n        // we can not only use a custom label because it does not count for the canonisation\n        molecule.setAtomMass(iAtom, molecule.getAtomMass(iAtom) + 5);\n    }\n    return customLabel;\n}\n//# sourceMappingURL=tagAtom.js.map","import { getXAtomicNumber } from '../util/getXAtomicNumber.js';\nimport { isCsp3 } from '../util/isCsp3.js';\nimport { makeRacemic } from '../util/makeRacemic.js';\nimport { tagAtom } from '../util/tagAtom.js';\nexport const FULL_HOSE_CODE = 1;\nexport const HOSE_CODE_CUT_C_SP3_SP3 = 2;\n/**\n * Returns an array of hose code fragments for the specified molecule.\n * @param molecule - The OCL molecule to process.\n * @param options - Options for generating hose codes.\n * @returns An array of hose code fragments.\n */\nexport function getHoseCodesForAtomsAsFragments(molecule, options = {}) {\n    const OCL = molecule.getOCL();\n    const { allowedCustomLabels, minSphereSize = 0, maxSphereSize = 4, kind = FULL_HOSE_CODE, tagAtoms = [], tagAtomFct = tagAtom, } = options;\n    const rootAtoms = options.rootAtoms ? options.rootAtoms.slice() : [];\n    molecule = molecule.getCompactCopy();\n    if (tagAtoms.length > 0) {\n        internalTagAtoms(molecule, tagAtoms, rootAtoms, tagAtomFct);\n    }\n    else {\n        // this force reordering of atoms in order to have hydrogens at the end\n        molecule.ensureHelperArrays(OCL.Molecule.cHelperNeighbours);\n    }\n    if (rootAtoms.length === 0) {\n        for (let j = 0; j < molecule.getAllAtoms(); j++) {\n            if (allowedCustomLabels?.includes(molecule.getAtomCustomLabel(j) ?? '') ||\n                molecule.getAtomCustomLabel(j)) {\n                rootAtoms.push(j);\n            }\n        }\n    }\n    const fragments = [];\n    // keep track of the atoms when creating the fragment\n    const mappings = [];\n    let min = 0;\n    let max = 0;\n    const atomMask = new Array(molecule.getAllAtoms()).fill(false);\n    const atomList = new Array(molecule.getAllAtoms());\n    for (let sphere = 0; sphere <= maxSphereSize; sphere++) {\n        if (max === 0) {\n            for (const rootAtom of rootAtoms) {\n                atomList[max] = rootAtom;\n                atomMask[rootAtom] = true;\n                max++;\n            }\n        }\n        else {\n            let newMax = max;\n            for (let i = min; i < max; i++) {\n                const atom = atomList[i];\n                for (let j = 0; j < molecule.getAllConnAtoms(atom); j++) {\n                    const connAtom = molecule.getConnAtom(atom, j);\n                    if (!atomMask[connAtom]) {\n                        switch (kind) {\n                            case FULL_HOSE_CODE:\n                                atomMask[connAtom] = true;\n                                atomList[newMax++] = connAtom;\n                                break;\n                            case HOSE_CODE_CUT_C_SP3_SP3:\n                                if (!(isCsp3(molecule, atom) && isCsp3(molecule, connAtom))) {\n                                    atomMask[connAtom] = true;\n                                    atomList[newMax++] = connAtom;\n                                }\n                                break;\n                            default:\n                                throw new Error('getHoseCoesForAtom unknown kind');\n                        }\n                    }\n                }\n            }\n            min = max;\n            max = newMax;\n        }\n        if (sphere >= minSphereSize) {\n            const fragment = new OCL.Molecule(0, 0);\n            molecule.copyMoleculeByAtoms(fragment, atomMask, true, mappings);\n            // we using atomMapNo field in order to keep track of the original atom number even if we remove hydrogens\n            for (let i = 0; i < fragment.getAllAtoms(); i++) {\n                fragment.setAtomMapNo(i, mappings.indexOf(i) + 1);\n            }\n            fragment.removeExplicitHydrogens();\n            makeRacemic(fragment);\n            // we encode atom characteristics in the query features\n            addQueryFeaturesAndRemoveMapNo(fragment, molecule);\n            fragments.push(fragment);\n        }\n    }\n    return fragments;\n}\n/**\n * If the atom is not an halogen, X or an hydrogen\n * we add query features to the atom\n * This includes aromaticity, ring size, number of hydrogens\n * @param fragment\n * @param molecule\n */\nfunction addQueryFeaturesAndRemoveMapNo(fragment, molecule) {\n    const Molecule = molecule.getOCL().Molecule;\n    for (let i = 0; i < fragment.getAllAtoms(); i++) {\n        const mapping = fragment.getAtomMapNo(i) - 1;\n        fragment.setAtomMapNo(i, 0);\n        if ([1, 9, 17, 35, 53, getXAtomicNumber(molecule)].includes(fragment.getAtomicNo(i))) {\n            continue;\n        }\n        // aromaticity\n        const isAromatic = molecule.isAromaticAtom(mapping);\n        if (isAromatic) {\n            fragment.setAtomQueryFeature(i, Molecule.cAtomQFAromatic, true);\n            fragment.setAtomQueryFeature(i, Molecule.cAtomQFNotAromatic, false);\n        }\n        else {\n            fragment.setAtomQueryFeature(i, Molecule.cAtomQFAromatic, false);\n            fragment.setAtomQueryFeature(i, Molecule.cAtomQFNotAromatic, true);\n        }\n        // cycles\n        const smallestRing = molecule.getAtomRingSize(mapping);\n        switch (smallestRing) {\n            case 0:\n                break;\n            case 3:\n                fragment.setAtomQueryFeature(i, Molecule.cAtomQFRingSize3, true);\n                break;\n            case 4:\n                fragment.setAtomQueryFeature(i, Molecule.cAtomQFRingSize4, true);\n                break;\n            case 5:\n                fragment.setAtomQueryFeature(i, Molecule.cAtomQFRingSize5, true);\n                break;\n            case 6:\n                fragment.setAtomQueryFeature(i, Molecule.cAtomQFRingSize6, true);\n                break;\n            case 7:\n                fragment.setAtomQueryFeature(i, Molecule.cAtomQFRingSize7, true);\n                break;\n            default:\n                fragment.setAtomQueryFeature(i, Molecule.cAtomQFRingSizeLarge, true);\n        }\n        const nbHydrogens = molecule.getAllHydrogens(mapping);\n        if (nbHydrogens === 0) {\n            fragment.setAtomQueryFeature(i, Molecule.cAtomQFNot0Hydrogen, false);\n        }\n        else {\n            fragment.setAtomQueryFeature(i, Molecule.cAtomQFNot0Hydrogen, true);\n        }\n        if (nbHydrogens === 1) {\n            fragment.setAtomQueryFeature(i, Molecule.cAtomQFNot1Hydrogen, false);\n        }\n        else {\n            fragment.setAtomQueryFeature(i, Molecule.cAtomQFNot1Hydrogen, true);\n        }\n        if (nbHydrogens === 2) {\n            fragment.setAtomQueryFeature(i, Molecule.cAtomQFNot2Hydrogen, false);\n        }\n        else {\n            fragment.setAtomQueryFeature(i, Molecule.cAtomQFNot2Hydrogen, true);\n        }\n        if (nbHydrogens === 3) {\n            fragment.setAtomQueryFeature(i, Molecule.cAtomQFNot3Hydrogen, false);\n        }\n        else {\n            fragment.setAtomQueryFeature(i, Molecule.cAtomQFNot3Hydrogen, true);\n        }\n    }\n}\n// tagging atoms may change the order of the atoms because hydrogens must be at the end of the file\n// in order to remember the rootAtoms we will tag before\nfunction internalTagAtoms(molecule, tagAtoms, rootAtoms, tagAtomFct) {\n    const OCL = molecule.getOCL();\n    if (tagAtoms) {\n        for (let i = 0; i < molecule.getAllAtoms(); i++) {\n            molecule.setAtomMapNo(i, i + 1);\n        }\n        if (tagAtoms.length > 0) {\n            for (const atom of tagAtoms) {\n                tagAtomFct(molecule, atom);\n            }\n        }\n    }\n    // this force reordering of atoms in order to have hydrogens at the end\n    molecule.ensureHelperArrays(OCL.Molecule.cHelperNeighbours);\n    if (rootAtoms.length > 0) {\n        const mapping = new Int32Array(molecule.getAllAtoms());\n        for (let i = 0; i < molecule.getAllAtoms(); i++) {\n            mapping[molecule.getAtomMapNo(i) - 1] = i;\n        }\n        for (let i = 0; i < rootAtoms.length; i++) {\n            rootAtoms[i] = mapping[rootAtoms[i]];\n        }\n    }\n}\n//# sourceMappingURL=getHoseCodesForAtomsAsFragments.js.map","/**\n * Ensures that all atoms in the molecule have a unique mapNo.\n * Atoms that already have a mapNo keep it. Atoms without a mapNo\n * are assigned the next available number starting from 1.\n * Throws if the molecule contains duplicate mapNo values.\n * @param molecule - The molecule to process (modified in place)\n */\nexport function ensureMapNo(molecule) {\n    const existingMapNo = {};\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        const mapNo = molecule.getAtomMapNo(i);\n        if (mapNo) {\n            if (existingMapNo[mapNo]) {\n                throw new Error('The molecule contains several atoms with the same mapNo');\n            }\n            existingMapNo[mapNo] = true;\n        }\n    }\n    let nextMapNo = 1;\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        const mapNo = molecule.getAtomMapNo(i);\n        if (!mapNo) {\n            while (existingMapNo[nextMapNo]) {\n                nextMapNo++;\n            }\n            existingMapNo[nextMapNo] = true;\n            molecule.setAtomMapNo(i, nextMapNo, false);\n        }\n    }\n}\n//# sourceMappingURL=ensureMapNo.js.map","import { floydWarshall } from 'ml-floyd-warshall';\nimport { Matrix } from 'ml-matrix';\n/**\n * Returns a connectivity matrix\n * @param {import('openchemlib').Molecule} molecule\n * @param {object} [options={}]\n * @param {boolean} [options.pathLength=false] - get the path length between atoms\n * @param {boolean} [options.mass=false] - set the nominal mass of the atoms on diagonal\n * @param {boolean} [options.atomicNo=false] - set the atomic number of the atom on diagonal\n * @param {boolean} [options.negativeAtomicNo=false] - set the atomic number * -1 of the atom on diagonal\n * @param {boolean} [options.sdt=false] - set 1, 2 or 3 depending if single, double or triple bond\n * @param {boolean} [options.sdta=false] - set 1, 2, 3 or 4 depending if single, double, triple or aromatic  bond\n */\nexport function getConnectivityMatrix(molecule, options = {}) {\n    const OCL = molecule.getOCL();\n    molecule.ensureHelperArrays(OCL.Molecule.cHelperNeighbours);\n    const nbAtoms = molecule.getAllAtoms();\n    let result = new Array(nbAtoms).fill();\n    result = result.map(() => new Array(nbAtoms).fill(0));\n    if (!options.pathLength) {\n        if (options.atomicNo) {\n            for (let i = 0; i < nbAtoms; i++) {\n                result[i][i] = molecule.getAtomicNo(i);\n            }\n        }\n        else if (options.negativeAtomicNo) {\n            for (let i = 0; i < nbAtoms; i++) {\n                result[i][i] = -molecule.getAtomicNo(i);\n            }\n        }\n        else if (options.mass) {\n            for (let i = 0; i < nbAtoms; i++) {\n                result[i][i] = OCL.Molecule.cRoundedMass[molecule.getAtomicNo(i)];\n            }\n        }\n        else {\n            for (let i = 0; i < nbAtoms; i++) {\n                result[i][i] = 1;\n            }\n        }\n    }\n    if (options.sdt) {\n        for (let i = 0; i < nbAtoms; i++) {\n            const l = molecule.getAllConnAtoms(i);\n            for (let j = 0; j < l; j++) {\n                result[i][molecule.getConnAtom(i, j)] = molecule.getConnBondOrder(i, j);\n            }\n        }\n    }\n    else if (options.sdta) {\n        for (let i = 0; i < nbAtoms; i++) {\n            const l = molecule.getAllConnAtoms(i);\n            for (let j = 0; j < l; j++) {\n                const bondNumber = molecule.getConnBond(i, j);\n                if (molecule.isAromaticBond(bondNumber)) {\n                    result[i][molecule.getConnAtom(i, j)] = 4;\n                }\n                else {\n                    result[i][molecule.getConnAtom(i, j)] = molecule.getConnBondOrder(i, j);\n                }\n            }\n        }\n    }\n    else {\n        for (let i = 0; i < nbAtoms; i++) {\n            const l = molecule.getAllConnAtoms(i);\n            for (let j = 0; j < l; j++) {\n                result[i][molecule.getConnAtom(i, j)] = 1;\n            }\n        }\n    }\n    if (options.pathLength) {\n        result = floydWarshall(new Matrix(result)).to2DArray();\n    }\n    return result;\n}\n//# sourceMappingURL=getConnectivityMatrix.js.map","import { Matrix } from 'ml-matrix';\n/**\n * Algorithm that finds the shortest distance from one node to the other\n * @param {Matrix} adjMatrix - A squared adjacency matrix\n * @return {Matrix} - Distance from a node to the other, -1 if the node is unreachable\n */\nexport function floydWarshall(adjMatrix) {\n    if (Matrix.isMatrix(adjMatrix) && adjMatrix.columns !== adjMatrix.rows) {\n        throw new TypeError('The adjacency matrix should be squared');\n    }\n    const numVertices = adjMatrix.columns;\n    let distMatrix = new Matrix(numVertices, numVertices);\n    distMatrix.apply((row, column) => {\n        // principal diagonal is 0\n        if (row === column) {\n            distMatrix.set(row, column, 0);\n        }\n        else {\n            let val = adjMatrix.get(row, column);\n            if (val || Object.is(val, -0)) {\n                // edges values remain the same\n                distMatrix.set(row, column, val);\n            }\n            else {\n                // 0 values become infinity\n                distMatrix.set(row, column, Number.POSITIVE_INFINITY);\n            }\n        }\n    });\n    for (let k = 0; k < numVertices; ++k) {\n        for (let i = 0; i < numVertices; ++i) {\n            for (let j = 0; j < numVertices; ++j) {\n                let dist = distMatrix.get(i, k) + distMatrix.get(k, j);\n                if (distMatrix.get(i, j) > dist) {\n                    distMatrix.set(i, j, dist);\n                }\n            }\n        }\n    }\n    // When there's no connection the value is -1\n    distMatrix.apply((row, column) => {\n        if (distMatrix.get(row, column) === Number.POSITIVE_INFINITY) {\n            distMatrix.set(row, column, -1);\n        }\n    });\n    return distMatrix;\n}\n//# sourceMappingURL=index.js.map","/**\n * Creates a compact copy of the molecule without custom labels.\n * We don't want that custom labels interfere with hose code and diaID generation.\n * @param molecule\n * @returns\n */\nexport function getCompactCopyWithoutCustomLabels(molecule) {\n    const tempMolecule = molecule.getCompactCopy();\n    for (let i = 0; i < tempMolecule.getAllAtoms(); i++) {\n        tempMolecule.setAtomCustomLabel(i, '');\n    }\n    return tempMolecule;\n}\n//# sourceMappingURL=getCompactCopyWithoutCustomLabels.js.map","import { getHoseCodesForAtomsAsFragments } from './getHoseCodesForAtomsAsFragments.js';\n/**\n * Returns an array of strings (idCodes) specified molecule. Each string corresponds to a\n * hose code. By default it will calculate the hose codes for sphere 0 to 4 and will reuse\n * the existing tagged atoms.\n * @param molecule - The OCL molecule to process.\n * @param options - Options for generating hose codes.\n * @returns An array of hose code strings.\n */\nexport function getHoseCodesForAtomsAsStrings(molecule, options = {}) {\n    const fragments = getHoseCodesForAtomsAsFragments(molecule, options);\n    const OCL = molecule.getOCL();\n    const hoses = [];\n    for (const fragment of fragments) {\n        hoses.push(fragment.getCanonizedIDCode(OCL.Molecule.CANONIZER_ENCODE_ATOM_CUSTOM_LABELS));\n    }\n    return hoses;\n}\n//# sourceMappingURL=getHoseCodesForAtomsAsStrings.js.map","import { getXAtomicNumber } from '../util/getXAtomicNumber.js';\n/**\n * Returns the atoms that are chiral or pseudo chiral.\n * There could be some issues if the original molecule lacks chiral bonds.\n * The function will add them and this could lead to some issues in the case of pseudochiral atoms.\n * @param {import('openchemlib').Molecule} molecule\n * @returns {number[]}\n */\nexport function getChiralOrHeterotopicCarbons(molecule) {\n    const { Molecule } = molecule.getOCL();\n    const xAtomicNumber = getXAtomicNumber(molecule);\n    const internalMolecule = molecule.getCompactCopy();\n    // hydrogens may be diastereotopic, we need to add them\n    internalMolecule.addImplicitHydrogens();\n    for (let i = 0; i < internalMolecule.getAllAtoms(); i++) {\n        // hydrogens are not taken into account during canonization, we need to change them with an atom with a valence of 1\n        if (internalMolecule.getAtomicNo(i) === 1) {\n            internalMolecule.setAtomicNo(i, xAtomicNumber);\n        }\n    }\n    addPossibleChiralBonds(internalMolecule);\n    internalMolecule.ensureHelperArrays(Molecule.cHelperSymmetryStereoHeterotopicity);\n    const atoms = [];\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        if (internalMolecule.getAtomicNo(i) === xAtomicNumber) {\n            continue;\n        }\n        if (molecule.getAtomicNo(i) !== internalMolecule.getAtomicNo(i)) {\n            throw new Error('getChiralOrHeterotopicCarbons: mismatching atomic numbers');\n        }\n        if (internalMolecule.getAtomicNo(i) !== 6) {\n            continue;\n        }\n        const neighbourSymmetries = getNeighbourSymmetries(internalMolecule, i);\n        if (neighbourSymmetries.length === 4) {\n            atoms.push(i);\n        }\n    }\n    return atoms;\n}\nfunction addPossibleChiralBonds(molecule) {\n    const { Molecule } = molecule.getOCL();\n    molecule.ensureHelperArrays(Molecule.cHelperSymmetryStereoHeterotopicity);\n    for (let i = 0; i < molecule.getAtoms(); i++) {\n        if (molecule.getAtomicNo(i) !== 6)\n            continue;\n        if (molecule.getStereoBond(i) >= 0)\n            continue;\n        const neighbourSymmetries = getNeighbourSymmetries(molecule, i);\n        if (neighbourSymmetries.length <= 2)\n            continue;\n        const stereoBond = molecule.getAtomPreferredStereoBond(i);\n        if (stereoBond !== -1) {\n            molecule.setBondType(stereoBond, Molecule.cBondTypeUp);\n            if (molecule.getBondAtom(1, stereoBond) === i) {\n                const connAtom = molecule.getBondAtom(0, stereoBond);\n                molecule.setBondAtom(0, stereoBond, i);\n                molecule.setBondAtom(1, stereoBond, connAtom);\n            }\n            // To me it seems that we have to add all stereo centers into AND group 0. TLS 9.Nov.2015\n            molecule.setAtomESR(i, Molecule.cESRTypeAnd, 0);\n        }\n    }\n}\nfunction getNeighbourSymmetries(molecule, iAtom) {\n    const neighbourSymmetries = [];\n    for (let j = 0; j < molecule.getAllConnAtoms(iAtom); j++) {\n        const connAtom = molecule.getConnAtom(iAtom, j);\n        const symmetryRank = molecule.getSymmetryRank(connAtom);\n        if (!neighbourSymmetries.includes(symmetryRank)) {\n            neighbourSymmetries.push(molecule.getSymmetryRank(connAtom));\n        }\n    }\n    return neighbourSymmetries;\n}\n//# sourceMappingURL=getChiralOrHeterotopicCarbons.js.map","import { getChiralOrHeterotopicCarbons } from './getChiralOrHeterotopicCarbons.js';\n/**\n * This function will add missing chiral bonds on carbons ensure that all enantiotopic\n * or diastereotopic atoms can be identified uniquely\n * @param {import('openchemlib').Molecule} molecule\n * @param {object} [options={}]\n * @param {number} [options.esrType=Molecule.cESRTypeAnd]\n * @param {boolean} [options.atLeastThreeAtoms=true] - if true, only carbons with at least three atoms will be considered\n */\nexport function ensureHeterotopicChiralBonds(molecule, options = {}) {\n    const { Molecule } = molecule.getOCL();\n    const { esrType = Molecule.cESRTypeAnd, atLeastThreeAtoms = true } = options;\n    molecule.ensureHelperArrays(Molecule.cHelperBitNeighbours);\n    const heterotopicCarbons = getChiralOrHeterotopicCarbons(molecule);\n    for (const i of heterotopicCarbons) {\n        if (atLeastThreeAtoms && molecule.getAllConnAtoms(i) < 3)\n            continue;\n        if (molecule.getStereoBond(i) === -1) {\n            const stereoBond = molecule.getAtomPreferredStereoBond(i);\n            if (stereoBond !== -1) {\n                molecule.setBondType(stereoBond, Molecule.cBondTypeUp);\n                if (molecule.getBondAtom(1, stereoBond) === i) {\n                    const connAtom = molecule.getBondAtom(0, stereoBond);\n                    molecule.setBondAtom(0, stereoBond, i);\n                    molecule.setBondAtom(1, stereoBond, connAtom);\n                }\n                // To me it seems that we have to add all stereo centers into AND group 0. TLS 9.Nov.2015\n                molecule.setAtomESR(i, esrType, 0);\n            }\n        }\n    }\n}\n//# sourceMappingURL=ensureHeterotopicChiralBonds.js.map","import { getHoseCodesForAtomsAsFragments } from '../hose/getHoseCodesForAtomsAsFragments.js';\nimport { getAllAtomsPaths } from \"../path/getAllAtomsPaths.js\";\nimport { ensureMapNo } from \"../util/ensureMapNo.js\";\nimport { getConnectivityMatrix } from '../util/getConnectivityMatrix.js';\nimport { getCanonizedDiaIDs } from \"./getCanonizedDiaIDs.js\";\nimport { getCanonizedHoseCodes } from \"./getCanonizedHoseCodes.js\";\nimport { getCanonizedHoseCodesForPath } from \"./getCanonizedHoseCodesForPaths.js\";\nimport { getDiaIDsAndInfo } from \"./getDiaIDsAndInfo.js\";\nimport { getFinalRanks, getHeterotopicSymmetryRanks, } from \"./getHeterotopicSymmetryRanks.js\";\nimport { getMoleculeWithH } from \"./getMoleculeWithH.js\";\nimport { getXMolecule } from \"./getXMolecule.js\";\n/**\n * This class deals with topicity information and hose codes\n * It is optimized to avoid recalculation of the same information\n */\nexport class TopicMolecule {\n    originalMolecule;\n    molecule;\n    idCode;\n    options;\n    cache;\n    constructor(molecule, options = {}) {\n        this.originalMolecule = molecule;\n        this.options = {\n            maxPathLength: 5,\n            maxNbAtoms: 250,\n            logger: console,\n            ...options,\n        };\n        this.idCode = molecule.getIDCode();\n        this.molecule = this.originalMolecule.getCompactCopy();\n        this.molecule.ensureHelperArrays(molecule.getOCL().Molecule.cHelperNeighbours);\n        this.molecule.ensureHelperArrays(this.molecule.getOCL().Molecule.cHelperNeighbours);\n        this.cache = {};\n    }\n    /**\n     * This method ensures that all the atoms have a mapNo corresponding to the atom number.\n     * It will enforce mapNo in molecule and moleculeWithH\n     * We start numbering the atoms at 1\n     */\n    setAtomNoInMapNo() {\n        const molecules = [this.molecule, this.moleculeWithH];\n        for (const molecule of molecules) {\n            for (let i = 0; i < molecule.getAllAtoms(); i++) {\n                molecule.setAtomMapNo(i, i + 1, false);\n            }\n        }\n    }\n    /**\n     * This method ensures that all the atoms have a mapNo in the molecule (and not the moleculeWithH! )\n     */\n    ensureMapNo() {\n        ensureMapNo(this.molecule);\n    }\n    /**\n     * For each atom we will return an array of objects that contains the\n     * different possible path as well as the canonic hose codes\n     * @param options\n     * @returns\n     */\n    getHoseCodesForPath(options = {}) {\n        return getCanonizedHoseCodesForPath(this, options);\n    }\n    /**\n     * Return one fragment for a specific sphere size and specific root atoms\n     * @param rootAtoms\n     * @param options\n     * @returns\n     */\n    getHoseFragment(rootAtoms, options = {}) {\n        const { sphereSize = 2, tagAtoms = rootAtoms, tagAtomFct } = options;\n        const fragments = getHoseCodesForAtomsAsFragments(this.moleculeWithH, {\n            rootAtoms,\n            minSphereSize: sphereSize,\n            maxSphereSize: sphereSize,\n            tagAtoms,\n            tagAtomFct,\n        });\n        return fragments[0];\n    }\n    getAtomPathsFrom(atom, options = {}) {\n        const { minPathLength = 1, maxPathLength = this.options.maxPathLength, toAtomicNo, } = options;\n        if (maxPathLength > this.options.maxPathLength) {\n            throw new Error('The maxPathLength is too long, you should increase the maxPathLength when instantiating the TopicMolecule');\n        }\n        const atomPaths = this.atomsPaths[atom];\n        if (!atomPaths) {\n            throw new Error('Unexpected missing atom path');\n        }\n        const paths = [];\n        for (let i = minPathLength; i <= maxPathLength; i++) {\n            const atomPathValue = atomPaths[i];\n            if (!atomPathValue) {\n                throw new Error(`Unexpected missing atom path at index ${i}`);\n            }\n            for (const atomPath of atomPathValue) {\n                if (!toAtomicNo ||\n                    this.moleculeWithH.getAtomicNo(atomPath.path.at(-1)) ===\n                        toAtomicNo) {\n                    paths.push(atomPath.path);\n                }\n            }\n        }\n        return paths;\n    }\n    getAtomPaths(atom1, atom2, options = {}) {\n        const { pathLength } = options;\n        if (pathLength !== undefined && pathLength > this.options.maxPathLength) {\n            throw new Error('The distance is too long, you should increase the maxPathLength when instantiating the TopicMolecule');\n        }\n        const atomPaths = this.atomsPaths[atom1];\n        if (!atomPaths) {\n            throw new Error('Unexpected missing atom path');\n        }\n        const minDistance = pathLength || 0;\n        const maxDistance = pathLength || this.options.maxPathLength;\n        const paths = [];\n        for (let i = minDistance; i <= maxDistance; i++) {\n            const atomPathValue = atomPaths[i];\n            if (!atomPathValue) {\n                throw new Error(`Unexpected missing atom path at index ${i}`);\n            }\n            for (const atomPath of atomPathValue) {\n                if (atomPath.path.at(-1) === atom2) {\n                    paths.push(atomPath.path);\n                }\n            }\n        }\n        return paths;\n    }\n    get atomsPaths() {\n        if (this.cache.atomsPaths)\n            return this.cache.atomsPaths;\n        this.cache.atomsPaths = getAllAtomsPaths(this.moleculeWithH, {\n            maxPathLength: this.options.maxPathLength,\n        });\n        return this.cache.atomsPaths;\n    }\n    toMolfile(options = {}) {\n        const { version = 2 } = options;\n        if (version === 2) {\n            return this.molecule.toMolfile();\n        }\n        return this.molecule.toMolfileV3();\n    }\n    getMolecule() {\n        return this.molecule;\n    }\n    /**\n     * Returns a new TopicMolecule but will copy precalculated information\n     * if possible (same idCode). This is very practical when expanding hydrogens\n     * for example.\n     * @param molecule\n     * @returns\n     */\n    fromMolecule(molecule) {\n        const idCode = molecule.getIDCode();\n        if (idCode !== this.idCode) {\n            // no way for optimisation\n            return new TopicMolecule(molecule);\n        }\n        const topicMolecule = new TopicMolecule(molecule);\n        topicMolecule.cache = {\n            canonizedDiaIDs: this.cache.canonizedDiaIDs,\n            canonizedHoseCodes: this.cache.canonizedHoseCodes,\n        };\n        return topicMolecule;\n    }\n    /**\n     * Returns a molecule with all the hydrogens added. The order is NOT canonized\n     */\n    get moleculeWithH() {\n        if (this.cache.moleculeWithH)\n            return this.cache.moleculeWithH;\n        this.cache.moleculeWithH = getMoleculeWithH(this.molecule, {\n            maxNbAtoms: this.options.maxNbAtoms,\n            logger: this.options.logger,\n        });\n        return this.cache.moleculeWithH;\n    }\n    get xMolecule() {\n        if (this.cache.xMolecule)\n            return this.cache.xMolecule;\n        this.cache.xMolecule = getXMolecule(this.moleculeWithH);\n        return this.cache.xMolecule;\n    }\n    /**\n     * This is related to the current moleculeWithH. The order is NOT canonized\n     */\n    get diaIDs() {\n        if (this.cache.diaIDs)\n            return this.cache.diaIDs;\n        const diaIDs = [];\n        if (this.moleculeWithH.getAllAtoms() > this.options.maxNbAtoms) {\n            this.options.logger.warn(`too many atoms to evaluate heterotopicity: ${this.moleculeWithH.getAllAtoms()} > ${this.options.maxNbAtoms}`);\n        }\n        else {\n            for (let i = 0; i < this.moleculeWithH.getAllAtoms(); i++) {\n                diaIDs.push(this.canonizedDiaIDs[this.finalRanks[i]]);\n            }\n        }\n        this.cache.diaIDs = diaIDs;\n        return diaIDs;\n    }\n    /**\n     * We return the atomIDs corresponding to the specified diaID as well has the attached hydrogens or heavy atoms\n     * @param diaID\n     * @returns\n     */\n    getDiaIDsObject() {\n        return groupDiastereotopicAtomIDsAsObject(this.diaIDs, this.molecule, this.moleculeWithH);\n    }\n    /**\n     * This is related to the current moleculeWithH. The order is NOT canonized\n     */\n    get hoseCodes() {\n        if (this.cache.hoseCodes)\n            return this.cache.hoseCodes;\n        const hoseCodes = [];\n        for (let i = 0; i < this.moleculeWithH.getAllAtoms(); i++) {\n            hoseCodes.push(this.canonizedHoseCodes[this.finalRanks[i]]);\n        }\n        this.cache.hoseCodes = hoseCodes;\n        return hoseCodes;\n    }\n    get canonizedDiaIDs() {\n        if (this.cache.canonizedDiaIDs)\n            return this.cache.canonizedDiaIDs;\n        this.cache.canonizedDiaIDs = getCanonizedDiaIDs(this, {\n            maxNbAtoms: this.options.maxNbAtoms,\n            logger: this.options.logger,\n        });\n        return this.cache.canonizedDiaIDs;\n    }\n    get canonizedHoseCodes() {\n        if (this.cache.canonizedHoseCodes) {\n            return this.cache.canonizedHoseCodes;\n        }\n        this.cache.canonizedHoseCodes = getCanonizedHoseCodes(this);\n        return this.cache.canonizedHoseCodes;\n    }\n    /**\n     * Returns the distance matrix for the current moleculeWithH\n     */\n    get distanceMatrix() {\n        return getConnectivityMatrix(this.moleculeWithH, { pathLength: true });\n    }\n    get diaIDsAndInfo() {\n        if (this.cache.diaIDsAndInfo) {\n            return this.cache.diaIDsAndInfo;\n        }\n        this.cache.diaIDsAndInfo = getDiaIDsAndInfo(this, this.canonizedDiaIDs);\n        return this.cache.diaIDsAndInfo;\n    }\n    /**\n     * Returns symmetryRanks for all the atoms including hydrogens. Those ranks\n     * deals with topicity and is related to the current moleculeWithH.\n     * In order to calculate the ranks we replace all the\n     * hydrogens with a X atom.\n     */\n    get heterotopicSymmetryRanks() {\n        if (this.cache.heterotopicSymmetryRanks) {\n            return this.cache.heterotopicSymmetryRanks;\n        }\n        this.cache.heterotopicSymmetryRanks = getHeterotopicSymmetryRanks(this.xMolecule);\n        return [...this.cache.heterotopicSymmetryRanks];\n    }\n    /**\n     * Returns finalRanks for all the atoms including hydrogens. Those ranks\n     * deals with topicity and is related to the current moleculeWithH.\n     * All the atoms have a unique identifier.j\n     * In order to calculate the ranks we replace all the\n     * hydrogens with a X atom.\n     */\n    get finalRanks() {\n        if (this.cache.finalRanks)\n            return this.cache.finalRanks;\n        this.cache.finalRanks = getFinalRanks(this.xMolecule);\n        return this.cache.finalRanks;\n    }\n    toMolfileWithH(options = {}) {\n        const { version = 2 } = options;\n        if (version === 2) {\n            return this.moleculeWithH.toMolfile();\n        }\n        return this.moleculeWithH.toMolfileV3();\n    }\n    toMolfileWithoutH(options = {}) {\n        const molecule = this.molecule.getCompactCopy();\n        molecule.ensureHelperArrays(molecule.getOCL().Molecule.cHelperNeighbours);\n        const atomsToDelete = [];\n        for (let atomID = 0; atomID < molecule.getAtoms(); atomID++) {\n            if (molecule.getExplicitHydrogens(atomID) > 0) {\n                for (let i = 0; i < molecule.getAllConnAtoms(atomID); i++) {\n                    const connectedAtom = molecule.getConnAtom(atomID, i);\n                    if (molecule.getAtomicNo(connectedAtom) === 1) {\n                        atomsToDelete.push(connectedAtom);\n                    }\n                }\n            }\n        }\n        molecule.deleteAtoms(atomsToDelete);\n        const { version = 2 } = options;\n        if (version === 2) {\n            return molecule.toMolfile();\n        }\n        return molecule.toMolfileV3();\n    }\n    /**\n     * Returns an array of objects containing the oclID and the corresponding hydrogens and atoms\n     * for the specified atomLabel (if any)\n     * This always applied to the molecule with expanded hydrogens and chirality\n     * @param options\n     * @returns\n     */\n    getGroupedDiastereotopicAtomIDs(options = {}) {\n        if (!this.diaIDs)\n            return undefined;\n        return groupDiastereotopicAtomIDs(this.diaIDs, this.moleculeWithH, options);\n    }\n    /**\n     * This method returns a mapping between the diaIDs of the current molecule.\n     * It expects that the initial molfile and the final molfile contains atomMapNo\n     * in order to track which atom becomes which one.\n     * @param molecule\n     */\n    getDiaIDsMapping(molecule) {\n        const topicMolecule = new TopicMolecule(molecule);\n        const originalDiaIDs = this.diaIDsAndInfo.filter((diaID) => diaID.atomMapNo);\n        const destinationDiaIDs = topicMolecule.diaIDsAndInfo.filter((diaID) => diaID.atomMapNo);\n        const mapping = {};\n        // we first check all the atoms present in the molfile\n        for (const destinationDiaID of destinationDiaIDs) {\n            const originalDiaID = originalDiaIDs.find((diaID) => diaID.atomMapNo === destinationDiaID.atomMapNo);\n            const newIDCode = destinationDiaID.idCode;\n            const oldIDCode = originalDiaID.idCode;\n            if (oldIDCode in mapping) {\n                if (mapping[oldIDCode] !== newIDCode) {\n                    mapping[oldIDCode] = undefined;\n                }\n            }\n            else {\n                mapping[oldIDCode] = newIDCode;\n            }\n        }\n        // we now check all the attached hydrogens that are not defined in the molfile and were not yet mapped\n        for (const destinationDiaID of destinationDiaIDs) {\n            const originalDiaID = originalDiaIDs.find((diaID) => diaID.atomMapNo === destinationDiaID.atomMapNo);\n            for (let i = 0; i < originalDiaID.attachedHydrogensIDCodes.length; i++) {\n                const oldHydrogenIDCode = originalDiaID.attachedHydrogensIDCodes.at(i);\n                if (mapping[oldHydrogenIDCode])\n                    continue;\n                const newHydrogenIDCode = destinationDiaID.attachedHydrogensIDCodes[i];\n                if (oldHydrogenIDCode && newHydrogenIDCode) {\n                    if (oldHydrogenIDCode in mapping) {\n                        if (mapping[oldHydrogenIDCode] !== newHydrogenIDCode) {\n                            mapping[oldHydrogenIDCode] = undefined;\n                        }\n                    }\n                    else {\n                        mapping[oldHydrogenIDCode] = newHydrogenIDCode;\n                    }\n                }\n            }\n        }\n        return mapping;\n    }\n}\nexport function groupDiastereotopicAtomIDs(diaIDs, molecule, options = {}) {\n    const diaIDsObject = groupDiastereotopicAtomIDsAsObject(diaIDs, molecule, molecule, options);\n    return Object.values(diaIDsObject);\n}\nfunction groupDiastereotopicAtomIDsAsObject(diaIDs, molecule, moleculeWithH, options = {}) {\n    const { atomLabel } = options;\n    const diaIDsObject = {};\n    for (let i = 0; i < diaIDs.length; i++) {\n        if (!atomLabel || moleculeWithH.getAtomLabel(i) === atomLabel) {\n            const diaID = diaIDs[i];\n            if (!diaIDsObject[diaID]) {\n                diaIDsObject[diaID] = {\n                    counter: 0,\n                    oclID: diaID,\n                    atomLabel: moleculeWithH.getAtomLabel(i),\n                    atoms: [],\n                    existingAtoms: [],\n                    heavyAtoms: [],\n                    attachedHydrogens: [],\n                    customLabels: [],\n                    attachedHydrogensCustomLabels: [],\n                    heavyAtomsCustomLabels: [],\n                };\n            }\n            const customLabel = moleculeWithH\n                .getAtomCustomLabel(i)\n                ?.replace(/^\\]/, '');\n            if (customLabel &&\n                !diaIDsObject[diaID].customLabels.includes(customLabel)) {\n                diaIDsObject[diaID].customLabels.push(customLabel);\n            }\n            if (moleculeWithH.getAtomicNo(i) === 1) {\n                const connected = moleculeWithH.getConnAtom(i, 0);\n                if (!diaIDsObject[diaID].heavyAtoms.includes(connected)) {\n                    diaIDsObject[diaID].heavyAtoms.push(connected);\n                }\n                const heavyAtomCustomLabel = molecule\n                    .getAtomCustomLabel(connected)\n                    ?.replace(/^\\]/, '');\n                if (heavyAtomCustomLabel &&\n                    !diaIDsObject[diaID].heavyAtomsCustomLabels.includes(heavyAtomCustomLabel)) {\n                    diaIDsObject[diaID].heavyAtomsCustomLabels.push(heavyAtomCustomLabel);\n                }\n                if (molecule.getAtomicNo(i)) {\n                    diaIDsObject[diaID].existingAtoms.push(i);\n                }\n                else if (!diaIDsObject[diaID].existingAtoms.includes(connected)) {\n                    diaIDsObject[diaID].existingAtoms.push(connected);\n                }\n            }\n            else {\n                for (let j = 0; j < moleculeWithH.getAllConnAtoms(i); j++) {\n                    const connected = moleculeWithH.getConnAtom(i, j);\n                    if (moleculeWithH.getAtomicNo(connected) === 1) {\n                        const attachedHydrogenCustomLabel = molecule\n                            .getAtomCustomLabel(connected)\n                            ?.replace(/^\\]/, '');\n                        if (attachedHydrogenCustomLabel &&\n                            !diaIDsObject[diaID].attachedHydrogensCustomLabels.includes(attachedHydrogenCustomLabel)) {\n                            diaIDsObject[diaID].attachedHydrogensCustomLabels.push(attachedHydrogenCustomLabel);\n                        }\n                        diaIDsObject[diaID].attachedHydrogens.push(connected);\n                    }\n                }\n                diaIDsObject[diaID].existingAtoms.push(i);\n            }\n            diaIDsObject[diaID].counter++;\n            diaIDsObject[diaID].atoms.push(i);\n        }\n    }\n    for (const diaIDObject of Object.values(diaIDsObject)) {\n        diaIDObject.existingAtoms.sort((a, b) => a - b);\n        diaIDObject.attachedHydrogens.sort((a, b) => a - b);\n    }\n    return diaIDsObject;\n}\n//# sourceMappingURL=TopicMolecule.js.map","import { getHoseCodesForAtomsAsStrings } from \"../hose/getHoseCodesForAtomsAsStrings.js\";\n/**\n * For each atom we will return an array of objects\n * @param topicMolecule\n * @param options\n * @returns\n */\nexport function getCanonizedHoseCodesForPath(topicMolecule, options = {}) {\n    const { minPathLength = 0, maxPathLength = topicMolecule.options.maxPathLength, toAtomicNo, fromAtomicNo, } = options;\n    if (maxPathLength > topicMolecule.options.maxPathLength) {\n        throw new Error(`maxPathLength cannot be larger than the one defined in topicMolecule: ${topicMolecule.options.maxPathLength}`);\n    }\n    const atomsPaths = topicMolecule.atomsPaths;\n    const molecule = topicMolecule.moleculeWithH;\n    const results = new Array(molecule.getAllAtoms());\n    for (let fromAtom = 0; fromAtom < molecule.getAllAtoms(); fromAtom++) {\n        results[fromAtom] = {\n            fromDiaID: topicMolecule.diaIDs[fromAtom],\n            paths: [],\n        };\n        if (fromAtomicNo && molecule.getAtomicNo(fromAtom) !== fromAtomicNo) {\n            continue;\n        }\n        for (let pathLength = minPathLength; pathLength <= maxPathLength; pathLength++) {\n            const pathOfSpecificLength = atomsPaths[fromAtom][pathLength];\n            for (const path of pathOfSpecificLength) {\n                const toAtom = path.path.at(-1);\n                if (toAtomicNo && molecule.getAtomicNo(toAtom) !== toAtomicNo) {\n                    continue;\n                }\n                results[fromAtom].paths.push({\n                    toDiaID: topicMolecule.diaIDs[toAtom],\n                    pathLength: path.pathLength,\n                    path: path.path,\n                    hoses: getHoseCodesForAtomsAsStrings(topicMolecule.moleculeWithH, {\n                        ...options,\n                        rootAtoms: path.path,\n                        tagAtoms: [fromAtom, toAtom],\n                    }),\n                });\n            }\n        }\n    }\n    return results;\n}\n//# sourceMappingURL=getCanonizedHoseCodesForPaths.js.map","/**\n * We need to create an array of atoms\n * that contains an array of pathLength\n * that contains an array of object\n * @param molecule\n * @param options\n * @returns\n */\nexport function getAllAtomsPaths(molecule, options = {}) {\n    const { maxPathLength = 5 } = options;\n    const allAtomsPaths = [];\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        const oneAtomPaths = [];\n        allAtomsPaths.push(oneAtomPaths);\n        let atomPaths = [{ path: [i], pathLength: 0 }];\n        oneAtomPaths.push(atomPaths);\n        let nextIndexes = [0];\n        let nextAtoms = [i];\n        for (let sphere = 1; sphere <= maxPathLength; sphere++) {\n            atomPaths = [];\n            oneAtomPaths.push(atomPaths);\n            const currentIndexes = nextIndexes;\n            const currentAtoms = nextAtoms;\n            nextIndexes = [];\n            nextAtoms = [];\n            for (let i = 0; i < currentIndexes.length; i++) {\n                const atom = currentAtoms[i];\n                const index = currentIndexes[i];\n                const previousPath = oneAtomPaths[sphere - 1]?.[index]?.path;\n                if (!previousPath) {\n                    throw new Error(`Unexpected missing previousPath for sphere ${sphere - 1} and index ${index}`);\n                }\n                for (let conn = 0; conn < molecule.getAllConnAtoms(atom); conn++) {\n                    const connectedAtom = molecule.getConnAtom(atom, conn);\n                    if (previousPath.includes(connectedAtom))\n                        continue;\n                    nextIndexes.push(atomPaths.length);\n                    nextAtoms.push(connectedAtom);\n                    atomPaths.push({\n                        path: [...previousPath, connectedAtom],\n                        pathLength: sphere,\n                    });\n                }\n            }\n        }\n    }\n    return allAtomsPaths;\n}\n//# sourceMappingURL=getAllAtomsPaths.js.map","import { ensureHeterotopicChiralBonds } from '../diastereotopic/ensureHeterotopicChiralBonds.js';\n/**\n * Expand all the implicit hydrogens and ensure chiral bonds on heterotopic bonds\n * @param molecule\n * @param options\n * @returns\n */\nexport function getMoleculeWithH(molecule, options) {\n    const { logger, maxNbAtoms } = options;\n    const moleculeWithH = molecule.getCompactCopy();\n    moleculeWithH.addImplicitHydrogens();\n    if (moleculeWithH.getAllAtoms() > maxNbAtoms) {\n        logger.warn(`too many atoms to evaluate heterotopic chiral bonds: ${moleculeWithH.getAllAtoms()} > ${maxNbAtoms}`);\n    }\n    else {\n        ensureHeterotopicChiralBonds(moleculeWithH);\n    }\n    return moleculeWithH;\n}\n//# sourceMappingURL=getMoleculeWithH.js.map","import { getXAtomicNumber } from '../util/getXAtomicNumber.js';\n/**\n * In order to be able to give a unique ID to all the atoms we are replacing the H by X\n * @param moleculeWithH\n * @returns\n */\nexport function getXMolecule(moleculeWithH) {\n    const xAtomNumber = getXAtomicNumber(moleculeWithH);\n    const xMolecule = moleculeWithH.getCompactCopy();\n    for (let i = 0; i < xMolecule.getAllAtoms(); i++) {\n        // hydrogens are not taken into account during canonization, we need to change them with an atom with a valence of 1\n        if (xMolecule.getAtomicNo(i) === 1) {\n            xMolecule.setAtomicNo(i, xAtomNumber);\n        }\n    }\n    return xMolecule;\n}\n//# sourceMappingURL=getXMolecule.js.map","import { getCompactCopyWithoutCustomLabels } from \"../util/getCompactCopyWithoutCustomLabels.js\";\nimport { makeRacemic } from '../util/makeRacemic.js';\nimport { tagAtom } from \"../util/tagAtom.js\";\nexport function getCanonizedDiaIDs(diaMol, options) {\n    const { logger, maxNbAtoms } = options;\n    const moleculeWithH = diaMol.moleculeWithH;\n    if (moleculeWithH.getAllAtoms() > maxNbAtoms) {\n        logger.warn(`too many atoms to evaluate heterotopic chiral bonds: ${moleculeWithH.getAllAtoms()} > ${maxNbAtoms}`);\n        return [];\n    }\n    const heterotopicSymmetryRanks = diaMol.heterotopicSymmetryRanks;\n    const finalRanks = diaMol.finalRanks;\n    const canonizedDiaIDs = new Array(moleculeWithH.getAllAtoms());\n    moleculeWithH.ensureHelperArrays(diaMol.molecule.getOCL().Molecule.cHelperSymmetryStereoHeterotopicity);\n    const cache = {};\n    for (let i = 0; i < diaMol.moleculeWithH.getAllAtoms(); i++) {\n        const rank = heterotopicSymmetryRanks[i];\n        if (rank && cache[rank]) {\n            canonizedDiaIDs[finalRanks[i]] = cache[rank].diaID;\n            continue;\n        }\n        const tempMolecule = getCompactCopyWithoutCustomLabels(diaMol.moleculeWithH);\n        tagAtom(tempMolecule, i);\n        makeRacemic(tempMolecule);\n        const diaID = tempMolecule.getCanonizedIDCode(diaMol.molecule.getOCL().Molecule.CANONIZER_ENCODE_ATOM_CUSTOM_LABELS);\n        canonizedDiaIDs[finalRanks[i]] = diaID;\n    }\n    return canonizedDiaIDs;\n}\n//# sourceMappingURL=getCanonizedDiaIDs.js.map","import { getHoseCodesForAtomsAsStrings } from '../hose/getHoseCodesForAtomsAsStrings.js';\nimport { getCompactCopyWithoutCustomLabels } from \"../util/getCompactCopyWithoutCustomLabels.js\";\nimport { tagAtom } from \"../util/tagAtom.js\";\n/**\n * Get the canonized hose codes for a topic molecule. It will use the moleculeWithH\n * @param topicMolecule - The topic molecule to get the hose codes for.\n * @returns The canonized hose codes.\n */\nexport function getCanonizedHoseCodes(topicMolecule) {\n    const options = topicMolecule.options;\n    const heterotopicSymmetryRanks = topicMolecule.heterotopicSymmetryRanks;\n    const moleculeWithH = topicMolecule.moleculeWithH;\n    const finalRanks = topicMolecule.finalRanks;\n    const canonizedHoseCodes = new Array(moleculeWithH.getAllAtoms());\n    moleculeWithH.ensureHelperArrays(topicMolecule.molecule.getOCL().Molecule\n        .cHelperSymmetryStereoHeterotopicity);\n    const cache = {};\n    for (let i = 0; i < topicMolecule.moleculeWithH.getAllAtoms(); i++) {\n        const rank = heterotopicSymmetryRanks[i];\n        if (rank && cache[rank]) {\n            canonizedHoseCodes[finalRanks[i]] = cache[rank].diaID;\n            continue;\n        }\n        const tempMolecule = getCompactCopyWithoutCustomLabels(moleculeWithH);\n        tagAtom(tempMolecule, i);\n        const hoses = getHoseCodesForAtomsAsStrings(tempMolecule, options);\n        canonizedHoseCodes[finalRanks[i]] = hoses;\n    }\n    return canonizedHoseCodes;\n}\n//# sourceMappingURL=getCanonizedHoseCodes.js.map","export function getDiaIDsAndInfo(diaMol, canonizedDiaIDs) {\n    const newDiaIDs = [];\n    const molecule = diaMol.moleculeWithH;\n    const counts = {};\n    for (const diaID of canonizedDiaIDs) {\n        if (!counts[diaID]) {\n            counts[diaID] = 0;\n        }\n        counts[diaID]++;\n    }\n    for (let i = 0; i < canonizedDiaIDs.length; i++) {\n        const diaID = canonizedDiaIDs[diaMol.finalRanks[i]];\n        if (!diaID) {\n            throw new Error(`Unexpected missing canonized diaID for atom ${i}`);\n        }\n        const count = counts[diaID];\n        if (!count) {\n            throw new Error(`Unexpected missing count for diaID ${diaID}`);\n        }\n        const newDiaID = {\n            idCode: diaID,\n            attachedHydrogensIDCodes: [],\n            attachedHydrogens: [],\n            nbAttachedHydrogens: 0,\n            atomLabel: molecule.getAtomLabel(i),\n            nbEquivalentAtoms: count,\n            heavyAtom: undefined,\n            atomMapNo: molecule.getAtomMapNo(i),\n        };\n        if (molecule.getAtomicNo(i) === 1) {\n            const atom = molecule.getConnAtom(i, 0);\n            newDiaID.heavyAtom = canonizedDiaIDs[diaMol.finalRanks[atom]];\n        }\n        for (let j = 0; j < molecule.getAllConnAtoms(i); j++) {\n            const atom = molecule.getConnAtom(i, j);\n            if (molecule.getAtomicNo(atom) === 1) {\n                newDiaID.nbAttachedHydrogens++;\n                newDiaID.attachedHydrogens.push(atom);\n                const hydrogenDiaID = canonizedDiaIDs[diaMol.finalRanks[atom]];\n                if (!hydrogenDiaID) {\n                    throw new Error(`Unexpected missing canonized diaID for atom ${atom}`);\n                }\n                if (!newDiaID.attachedHydrogensIDCodes.includes(hydrogenDiaID)) {\n                    newDiaID.attachedHydrogensIDCodes.push(hydrogenDiaID);\n                }\n            }\n        }\n        newDiaIDs.push(newDiaID);\n    }\n    return newDiaIDs;\n}\n//# sourceMappingURL=getDiaIDsAndInfo.js.map","/**\n * Get a unique atomic number for a X\n * @param xMolecule\n * @returns\n */\nexport function getHeterotopicSymmetryRanks(xMolecule) {\n    xMolecule.ensureHelperArrays(xMolecule.getOCL().Molecule.cHelperSymmetryStereoHeterotopicity);\n    const symmetryRanks = [];\n    for (let i = 0; i < xMolecule.getAllAtoms(); i++) {\n        symmetryRanks.push(xMolecule.getSymmetryRank(i));\n    }\n    return symmetryRanks;\n}\nexport function getFinalRanks(xMolecule) {\n    xMolecule.ensureHelperArrays(xMolecule.getOCL().Molecule.cHelperSymmetryStereoHeterotopicity);\n    return xMolecule.getFinalRanks(0).map((rank) => rank - 1);\n}\n//# sourceMappingURL=getHeterotopicSymmetryRanks.js.map","import { getXAtomicNumber } from './getXAtomicNumber.js';\n/**\n * Returns an array of symmetry ranks.\n * @param {import('openchemlib').Molecule} molecule - An instance of a molecule\n * @returns\n */\nexport function getSymmetryRanks(molecule) {\n    const { Molecule } = molecule.getOCL();\n    const xAtomNumber = getXAtomicNumber(molecule);\n    // most of the molecules have some symmetry\n    const internalMolecule = molecule.getCompactCopy();\n    for (let i = 0; i < internalMolecule.getAllAtoms(); i++) {\n        // hydrogens are not taken into account during canonization, we need to change them with an atom with a valence of 1\n        if (internalMolecule.getAtomicNo(i) === 1) {\n            internalMolecule.setAtomicNo(i, xAtomNumber);\n        }\n    }\n    internalMolecule.ensureHelperArrays(Molecule.cHelperSymmetryStereoHeterotopicity);\n    const symmetryRanks = [];\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        symmetryRanks.push(internalMolecule.getSymmetryRank(i));\n    }\n    return symmetryRanks;\n}\n//# sourceMappingURL=getSymmetryRanks.js.map","import { getCompactCopyWithoutCustomLabels } from \"../util/getCompactCopyWithoutCustomLabels.js\";\nimport { getSymmetryRanks } from '../util/getSymmetryRanks.js';\nimport { makeRacemic } from '../util/makeRacemic.js';\nimport { tagAtom } from \"../util/tagAtom.js\";\nimport { ensureHeterotopicChiralBonds } from './ensureHeterotopicChiralBonds.js';\n/**\n * Returns an array of diastereotopic ID (as idCode)\n * @param {import('openchemlib').Molecule} molecule\n */\nexport function getDiastereotopicAtomIDs(molecule) {\n    const { Molecule } = molecule.getOCL();\n    ensureHeterotopicChiralBonds(molecule);\n    const symmetryRanks = getSymmetryRanks(molecule);\n    const numberAtoms = molecule.getAllAtoms();\n    const ids = [];\n    const cache = {};\n    for (let iAtom = 0; iAtom < numberAtoms; iAtom++) {\n        const rank = symmetryRanks[iAtom];\n        if (rank && cache[rank]) {\n            ids[iAtom] = cache[rank];\n            continue;\n        }\n        const tempMolecule = getCompactCopyWithoutCustomLabels(molecule);\n        tagAtom(tempMolecule, iAtom);\n        makeRacemic(tempMolecule);\n        // We need to ensure the helper array in order to get correctly the result of racemisation\n        ids[iAtom] = tempMolecule.getCanonizedIDCode(Molecule.CANONIZER_ENCODE_ATOM_CUSTOM_LABELS);\n        cache[rank] = ids[iAtom];\n    }\n    return ids;\n}\n//# sourceMappingURL=getDiastereotopicAtomIDs.js.map","import { getDiastereotopicAtomIDs } from './getDiastereotopicAtomIDs.js';\n/**\n *\n * @param {import('openchemlib').Molecule} molecule\n */\nexport function getDiastereotopicAtomIDsAndH(molecule) {\n    const OCL = molecule.getOCL();\n    molecule = molecule.getCompactCopy();\n    molecule.addImplicitHydrogens();\n    molecule.ensureHelperArrays(OCL.Molecule.cHelperNeighbours);\n    const diaIDs = getDiastereotopicAtomIDs(molecule);\n    const newDiaIDs = [];\n    for (let i = 0; i < diaIDs.length; i++) {\n        const diaID = diaIDs[i];\n        const newDiaID = {\n            oclID: diaID,\n            hydrogenOCLIDs: [],\n            nbHydrogens: 0,\n        };\n        if (molecule.getAtomicNo(i) === 1) {\n            const atom = molecule.getConnAtom(i, 0);\n            newDiaID.heavyAtom = diaIDs[atom];\n        }\n        for (let j = 0; j < molecule.getAllConnAtoms(i); j++) {\n            const atom = molecule.getConnAtom(i, j);\n            if (molecule.getAtomicNo(atom) === 1) {\n                newDiaID.nbHydrogens++;\n                if (!newDiaID.hydrogenOCLIDs.includes(diaIDs[atom])) {\n                    newDiaID.hydrogenOCLIDs.push(diaIDs[atom]);\n                }\n            }\n        }\n        newDiaIDs.push(newDiaID);\n    }\n    return newDiaIDs;\n}\n//# sourceMappingURL=getDiastereotopicAtomIDsAndH.js.map","import { ensureHeterotopicChiralBonds } from '../diastereotopic/ensureHeterotopicChiralBonds.js';\nimport { getCompactCopyWithoutCustomLabels } from \"../util/getCompactCopyWithoutCustomLabels.js\";\nimport { tagAtom } from \"../util/tagAtom.js\";\nimport { getHoseCodesForAtomsAsStrings } from './getHoseCodesForAtomsAsStrings.js';\nexport const FULL_HOSE_CODE = 1;\nexport const HOSE_CODE_CUT_C_SP3_SP3 = 2;\n/**\n * Returns the hose code for specific atom numbers\n * @param {import('openchemlib').Molecule} originalMolecule - The OCL molecule to be fragmented\n * @param {number[]} rootAtoms\n * @param {object} [options={}]\n * @param {number} [options.minSphereSize=0] - Smallest hose code sphere\n * @param {number} [options.maxSphereSize=4] - Largest hose code sphere\n * @param {number} [options.kind=FULL_HOSE_CODE] - Kind of hose code, default usual sphere\n */\nexport function getHoseCodesForAtoms(originalMolecule, rootAtoms = [], options = {}) {\n    const { minSphereSize = 0, maxSphereSize = 4, kind = FULL_HOSE_CODE, } = options;\n    const molecule = getCompactCopyWithoutCustomLabels(originalMolecule);\n    // those 2 lines should be done only once\n    molecule.addImplicitHydrogens();\n    ensureHeterotopicChiralBonds(molecule);\n    const allowedCustomLabels = [];\n    for (const rootAtom of rootAtoms) {\n        allowedCustomLabels.push(tagAtom(molecule, rootAtom));\n    }\n    return getHoseCodesForAtomsAsStrings(molecule, {\n        minSphereSize,\n        maxSphereSize,\n        allowedCustomLabels,\n        kind,\n    });\n}\n//# sourceMappingURL=getHoseCodesForAtoms.js.map","import { ensureHeterotopicChiralBonds } from '../diastereotopic/ensureHeterotopicChiralBonds.js';\nimport { getCompactCopyWithoutCustomLabels } from \"../util/getCompactCopyWithoutCustomLabels.js\";\nimport { makeRacemic } from '../util/makeRacemic.js';\nimport { tagAtom } from \"../util/tagAtom.js\";\nlet fragment;\n/**\n * Returns the hose code for a specific atom number\n * @param {import('openchemlib').Molecule} molecule\n * @param from\n * @param to\n * @param maxLength\n */\nexport function getHoseCodesForPath(molecule, from, to, maxLength) {\n    const OCL = molecule.getOCL();\n    const originalFrom = from;\n    const originalTo = to;\n    molecule = getCompactCopyWithoutCustomLabels(molecule);\n    const originalAtoms = []; // path before renumbering\n    molecule.getPath(originalAtoms, from, to, maxLength + 1);\n    let torsion;\n    if (originalAtoms.length === 4) {\n        torsion = molecule.calculateTorsion(originalAtoms);\n    }\n    const tag1 = tagAtom(molecule, from);\n    const tag2 = tagAtom(molecule, to);\n    molecule.addImplicitHydrogens();\n    ensureHeterotopicChiralBonds(molecule);\n    molecule.ensureHelperArrays(OCL.Molecule.cHelperNeighbours);\n    from = -1;\n    to = -1;\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        if (tag1 === tag2) {\n            if (molecule.getAtomCustomLabel(i) === tag1) {\n                if (from === -1) {\n                    from = i;\n                }\n                else {\n                    to = i;\n                }\n            }\n        }\n        else {\n            if (tag1 === molecule.getAtomCustomLabel(i)) {\n                from = i;\n            }\n            if (tag2 === molecule.getAtomCustomLabel(i)) {\n                to = i;\n            }\n        }\n    }\n    if (!fragment)\n        fragment = new OCL.Molecule(0, 0);\n    const atoms = [];\n    molecule.getPath(atoms, from, to, maxLength + 1);\n    let min = 0;\n    let max = 0;\n    const atomMask = new Array(molecule.getAllAtoms()).fill(false);\n    const atomList = new Array(molecule.getAllAtoms()).fill(-1);\n    const hoses = [];\n    for (let sphere = 0; sphere <= 2; sphere++) {\n        if (max === 0) {\n            for (const atom of atoms) {\n                atomMask[atom] = true;\n                atomList[max++] = atom;\n            }\n        }\n        else {\n            let newMax = max;\n            for (let i = min; i < max; i++) {\n                const atom = atomList[i];\n                for (let j = 0; j < molecule.getAllConnAtoms(atom); j++) {\n                    const connAtom = molecule.getConnAtom(atom, j);\n                    if (!atomMask[connAtom]) {\n                        atomMask[connAtom] = true;\n                        atomList[newMax++] = connAtom;\n                    }\n                }\n            }\n            min = max;\n            max = newMax;\n        }\n        const atomMap = [];\n        molecule.copyMoleculeByAtoms(fragment, atomMask, true, atomMap);\n        makeRacemic(fragment);\n        const oclID = fragment.getCanonizedIDCode(OCL.Molecule.CANONIZER_ENCODE_ATOM_CUSTOM_LABELS);\n        hoses.push({\n            sphere,\n            oclID,\n        });\n    }\n    return {\n        atoms: originalAtoms,\n        from: originalFrom,\n        to: originalTo,\n        torsion,\n        hoses,\n        length: originalAtoms.length - 1,\n    };\n}\n//# sourceMappingURL=getHoseCodesForPath.js.map","/**\n * Create a polymer from a unit, alpha and omega groups\n * A unit must contain a R1 and a R2\n * An alpha end group must contain a R1\n * An omega end group must contain a R2\n * @param {import('openchemlib').Molecule} unit - an instance of OCL.Molecule\n * @param {object} options\n * @param {number} [options.count=10] - number of units\n * @param {boolean} [options.markMonomer=false] - mark the different units of the polymer in the atom map\n * @param {import('openchemlib').Molecule} [options.alpha] - alpha end group, default is an hydrogen\n * @param {import('openchemlib').Molecule} [options.gamma] - omega end group, default is an hydrogen\n */\nexport function createPolymer(unit, options = {}) {\n    const { count = 10 } = options;\n    checkEntity(unit, 'unit');\n    const { Molecule } = unit.getOCL();\n    const { alpha, gamma } = getAlphaGamma(unit, options);\n    checkEntity(alpha, 'alpha');\n    checkEntity(gamma, 'gamma');\n    const { r1AtomicNo, r2AtomicNo } = getR1R2AtomicNo(Molecule);\n    const polymer = alpha.getCompactCopy();\n    polymer.addMolecule(getUnit(unit, 1, options));\n    addBond(polymer, r1AtomicNo, r1AtomicNo);\n    for (let i = 0; i < count - 1; i++) {\n        polymer.addMolecule(getUnit(unit, i + 2, options));\n        addBond(polymer, r2AtomicNo, r1AtomicNo);\n    }\n    polymer.addMolecule(gamma);\n    addBond(polymer, r2AtomicNo, r2AtomicNo);\n    polymer.ensureHelperArrays(Molecule.cHelperNeighbours);\n    // encoding directly in atomNapNo didn't work out because it was removed when deleting atoms\n    for (let i = 0; i < polymer.getAtoms(); i++) {\n        polymer.setAtomMapNo(i, (polymer.getAtomCustomLabel(i) || '').replace(/monomer_/, ''));\n        polymer.setAtomCustomLabel(i, '');\n    }\n    return polymer;\n}\nfunction getUnit(unit, index, options) {\n    const { markMonomer = false } = options;\n    if (markMonomer) {\n        unit = unit.getCompactCopy();\n        unit.ensureHelperArrays(unit.getOCL().Molecule.cHelperNeighbours);\n        for (let j = 0; j < unit.getAtoms(); j++) {\n            unit.setAtomCustomLabel(j, `monomer_${index}`);\n        }\n    }\n    return unit;\n}\nfunction addBond(molecule, firstAtomicNo, secondAtomicNo) {\n    molecule.ensureHelperArrays(molecule.getOCL().Molecule.cHelperNeighbours);\n    let i, j;\n    loop: for (i = 0; i < molecule.getAtoms(); i++) {\n        if (molecule.getAtomicNo(i) === firstAtomicNo) {\n            for (j = i + 1; j < molecule.getAtoms(); j++) {\n                if (molecule.getAtomicNo(j) === secondAtomicNo) {\n                    molecule.addBond(molecule.getConnAtom(i, 0), molecule.getConnAtom(j, 0), 1);\n                    break loop;\n                }\n            }\n        }\n    }\n    molecule.deleteAtoms([i, j]);\n}\nfunction checkEntity(unit, kind) {\n    let nbR1 = 1;\n    let nbR2 = 1;\n    switch (kind) {\n        case 'unit':\n            break;\n        case 'alpha':\n            nbR2 = 0;\n            break;\n        case 'gamma':\n            nbR1 = 0;\n            break;\n        default:\n            throw new Error('Unknown kind');\n    }\n    if (!unit) {\n        throw new Error('unit is required');\n    }\n    const { Molecule } = unit.getOCL();\n    // unit must contain ONE R1 and ONE R2\n    const { r1AtomicNo, r2AtomicNo } = getR1R2AtomicNo(Molecule);\n    let r1Count = 0;\n    let r2Count = 0;\n    for (let i = 0; i < unit.getAtoms(); i++) {\n        if (unit.getAtomicNo(i) === r1AtomicNo) {\n            r1Count++;\n        }\n        if (unit.getAtomicNo(i) === r2AtomicNo) {\n            r2Count++;\n        }\n    }\n    if (r1Count !== nbR1) {\n        throw new Error(`${kind} must contain ${nbR1} R1`);\n    }\n    if (r2Count !== nbR2) {\n        throw new Error(`${kind} must contain ${nbR2} R2`);\n    }\n}\nfunction getAlphaGamma(unit, options) {\n    let { alpha, gamma } = options;\n    const { Molecule } = unit.getOCL();\n    const { r1AtomicNo, r2AtomicNo } = getR1R2AtomicNo(Molecule);\n    if (!alpha) {\n        alpha = Molecule.fromSmiles('CC');\n        alpha.setAtomicNo(0, r1AtomicNo);\n        alpha.setAtomicNo(1, 1);\n    }\n    if (!gamma) {\n        gamma = Molecule.fromSmiles('CC');\n        gamma.setAtomicNo(0, r2AtomicNo);\n        gamma.setAtomicNo(1, 1);\n    }\n    return { alpha, gamma };\n}\nfunction getR1R2AtomicNo(Molecule) {\n    const r1AtomicNo = Molecule.getAtomicNoFromLabel('R1', Molecule.cPseudoAtomsRGroups);\n    const r2AtomicNo = Molecule.getAtomicNoFromLabel('R2', Molecule.cPseudoAtomsRGroups);\n    return { r1AtomicNo, r2AtomicNo };\n}\n//# sourceMappingURL=createPolymer.js.map","var pl=class{copyMolecule(Z){let Bt=Z.getIDCodeAndCoordinates();navigator.clipboard.writeText(`${Bt.idCode} ${Bt.coordinates}`)}pasteMolecule(){return null}};var US=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",zo=new Uint8Array(256);for(let w=0;w<US.length;w++)zo[US.charCodeAt(w)]=w;function LS(w){let Z=w.length*.75,Bt=w.length,ot,Ft=0,p1,Rt,y1,i1;w.at(-1)===\"=\"&&(Z--,w.at(-2)===\"=\"&&Z--);let s1=new ArrayBuffer(Z),o1=new Uint8Array(s1);for(ot=0;ot<Bt;ot+=4)p1=zo[w.charCodeAt(ot)],Rt=zo[w.charCodeAt(ot+1)],y1=zo[w.charCodeAt(ot+2)],i1=zo[w.charCodeAt(ot+3)],o1[Ft++]=p1<<2|Rt>>4,o1[Ft++]=(Rt&15)<<4|y1>>2,o1[Ft++]=(y1&3)<<6|i1&63;return s1}function Cl(w){return w.toString(16).padStart(2,\"0\")}var T9=globalThis.devicePixelRatio||1;var O2=class{constructor(Z){this.ctx=Z,this.ctx.textAlign=\"left\",this.ctx.textBaseline=\"top\",this.currentFontSize=12,this.currentFont=\"12px sans-serif\",this.ctx.font=this.currentFont,this.currentColor=\"#000000\",this.currentLineWidth=1,this.canvasCache=new Map}clearRect(Z,Bt,ot,Ft){this.ctx.clearRect(Z,Bt,ot,Ft)}getBackgroundRGB(){return 16777215}getForegroundRGB(){return 0}getSelectionBackgroundRGB(){return 12310268}getLineWidth(){return this.currentLineWidth}setRGB(Z){let Bt=Z>>>16&255,ot=Z>>>8&255,Ft=Z>>>0&255;this.currentColor=`#${Cl(Bt)}${Cl(ot)}${Cl(Ft)}`,this.ctx.fillStyle=this.currentColor,this.ctx.strokeStyle=this.currentColor}setFont(Z,Bt,ot){this.currentFontSize=Z,this.currentFont=`${Bt?\"bold\":\"\"} ${ot?\"italic\":\"\"} ${Z}px sans-serif`,this.ctx.font=this.currentFont}getFontSize(){return this.currentFontSize}getBounds(Z){let Bt=this.ctx.measureText(Z);return{x:Bt.actualBoundingBoxLeft,y:Bt.actualBoundingBoxAscent,width:Bt.actualBoundingBoxRight,height:Bt.actualBoundingBoxAscent}}drawString(Z,Bt,ot){this.ctx.fillText(ot,Z,Bt)}drawCenteredString(Z,Bt,ot){this.ctx.textAlign=\"center\",this.ctx.textBaseline=\"middle\",this.ctx.fillText(ot,Z,Bt),this.ctx.textAlign=\"left\",this.ctx.textBaseline=\"top\"}setLineWidth(Z){this.currentLineWidth=Z,this.ctx.lineWidth=Z}fillRectangle(Z,Bt,ot,Ft){this.ctx.fillRect(Z,Bt,ot,Ft)}fillCircle(Z,Bt,ot){let Ft=ot/2;this.ctx.beginPath(),this.ctx.arc(Z+Ft,Bt+Ft,Ft,0,2*Math.PI),this.ctx.fill()}drawLine(Z,Bt,ot,Ft){this.ctx.beginPath(),this.ctx.moveTo(Z,Bt),this.ctx.lineTo(ot,Ft),this.ctx.stroke()}drawPolygon(Z){this.ctx.beginPath(),this.ctx.moveTo(Z.getX(0),Z.getY(0));for(let Bt=1;Bt<Z.getSize();Bt++)this.ctx.lineTo(Z.getX(Bt),Z.getY(Bt));this.ctx.stroke()}drawRectangle(Z,Bt,ot,Ft){this.ctx.strokeRect(Z,Bt,ot,Ft)}fillPolygon(Z){this.ctx.beginPath(),this.ctx.moveTo(Z.getX(0),Z.getY(0));for(let Bt=1;Bt<Z.getSize();Bt++)this.ctx.lineTo(Z.getX(Bt),Z.getY(Bt));this.ctx.fill()}drawImage(Z,Bt,ot,Ft,p1,Rt,y1,i1,s1){if(arguments.length!==9)throw new Error(`drawImage call with ${arguments.length} arguments unimplemented`);let o1=this.canvasCache.get(Z);if(!o1){o1=document.createElement(\"canvas\");let n0=Z.imageData;o1.width=n0.width,o1.height=n0.height;let N0=o1.getContext(\"2d\");N0.globalAlpha=0,N0.putImageData(n0,0,0),this.canvasCache.set(Z,o1)}this.ctx.drawImage(o1,Bt,ot,Ft,p1,Rt,y1,i1,s1)}isDarkBackground(){return!1}};var Hl=class{constructor(Z,Bt){this.canvasElement=Z,this.changeListener=Bt,this.drawContext=new O2(this.canvasElement.getContext(\"2d\"))}getBackgroundRGB(){return 16777215}getCanvasWidth(){return this.canvasElement.width}getCanvasHeight(){return this.canvasElement.height}getDrawContext(){return this.drawContext}onChange(Z,Bt){this.changeListener?.({what:Z,isUserEvent:Bt})}getClipboardHandler(){return new pl}};var JPt=`\n/* We can customize editor styles here. */\n`,Oc;function sS(){if(Oc)return Oc;let w=new CSSStyleSheet;return w.replaceSync(JPt),Oc=w,w}function Gc(w,Z,Bt){let ot=-1;function Ft(Rt,y1,i1=0){y1.button>0||Z.fireMouseEvent(Rt,y1.button+1,i1,Math.round(y1.offsetX*T9),Math.round(y1.offsetY*T9),y1.shiftKey,y1.ctrlKey,y1.altKey,y1.button===2)}w.addEventListener(\"pointerdown\",Rt=>{ot===-1&&(ot=Rt.pointerId,Ft(Bt.MOUSE_EVENT_PRESSED,Rt))});function p1(Rt){ot===Rt.pointerId&&(ot=-1,Ft(Bt.MOUSE_EVENT_RELEASED,Rt))}return document.addEventListener(\"pointerup\",p1),w.addEventListener(\"click\",Rt=>{Ft(Bt.MOUSE_EVENT_CLICKED,Rt,Rt.detail)}),w.addEventListener(\"pointerenter\",Rt=>{Ft(Bt.MOUSE_EVENT_ENTERED,Rt)}),w.addEventListener(\"pointerleave\",Rt=>{Ft(Bt.MOUSE_EVENT_EXITED,Rt)}),w.addEventListener(\"pointermove\",Rt=>{ot!==-1?ot===Rt.pointerId&&Ft(Bt.MOUSE_EVENT_DRAGGED,Rt):Ft(Bt.MOUSE_EVENT_MOVED,Rt)}),()=>{document.removeEventListener(\"pointerup\",p1)}}function yS(w,Z,Bt,ot,Ft){let p1=typeof navigator<\"u\"&&navigator.platform===\"MacIntel\",Rt=i1=>p1&&i1.metaKey||!p1&&i1.ctrlKey;function y1(i1,s1){let o1=zPt(s1,ot);o1!==null&&Bt.fireKeyEvent(i1,o1,s1.altKey,s1.ctrlKey,s1.shiftKey,Rt(s1))}Z.addEventListener(\"keydown\",i1=>{Rt(i1)&&i1.key===\"c\"||Rt(i1)&&i1.key===\"v\"||y1(ot.KEY_EVENT_PRESSED,i1)}),Z.addEventListener(\"keyup\",i1=>{y1(ot.KEY_EVENT_RELEASED,i1)}),w.addEventListener(\"paste\",i1=>{let s1=i1.clipboardData.getData(\"text\"),o1=Ft.fromText(s1);o1&&o1.getAllAtoms()>0&&Bt.addPastedOrDropped(o1)})}function zPt(w,Z){switch(w.key){case\"Control\":return Z.KEY_CTRL;case\"Alt\":return Z.KEY_ALT;case\"Shift\":return Z.KEY_SHIFT;case\"Delete\":case\"Backspace\":return Z.KEY_DELETE;case\"F1\":return Z.KEY_HELP;case\"Escape\":return Z.KEY_ESCAPE;case\"Enter\":return Z.KEY_ENTER;default:return w.key.length===1?w.key.codePointAt(0):null}}var Ml=class{constructor(Z){this.canvasElement=Z,this.drawContext=new O2(this.canvasElement.getContext(\"2d\"))}setDimensions(Z,Bt){this.canvasElement.width=Z,this.canvasElement.style.width=`${Z/T9}px`,this.canvasElement.height=Bt,this.canvasElement.style.height=`${Bt/T9}px`}getDrawContext(){return this.drawContext}getBackgroundRGB(){return 16777215}getForegroundRGB(){return 0}};var lS={\"chain.png\":\"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAQAAABKfvVzAAAB2UlEQVR4XmNgGJmAkYGJgQULZGXAhCygIGICQg4GdjTIARRDh5xAEQwNKYzXeK4xY1Oez3SNfz8TmoYUxq+6m9bfqLjDI4tmfhzLff9VR17FoWhwZXpkOm2v1C+79+cbD4gga8lneuhrfdv6/+ItSBpSGB+bTDos9IfzP9N/k3cX6+7wwByWz/TWR/E1w/+kO+8j4BpSGL9rz9wh+Efs14TF3heY/tu/vlF2hxtkSxzLY2/FVyz/om69jT0G8kM6QyNDM9MT41nbZX9y/J/ct1/4iU7aIYb/9q8uVx0UbmF64mV7i/1/0s0HSVM5dRgYrjB84/8U+bh80iH+34z/17Xc51ZhUGX8qpkK1GL6+krltyClVyz/c+69C57CwQsK1v+Sl9rdvgr8Z/7P9WvKxNs8fsD44ABqeWLkdYHhv9sL8e+s/xJuv4k4yajEAI6H/+6llxn+g6DUh75gSXhgugEdmXIUJB5150HSFA59oHKIBteGSyBhpv+q9wsVQaZDICdDKuNnneRjCY9exU3l5AUrh2gQelAQ/8Tgve2Tb25NjIgYBkmnMl5Sumi+hQmiGKqhgaGB57Pts4Bfek0sjkjmIxQhs8BpiZFBh0EPCLGlTnQxcGod8gAAp9es6fCW8G8AAAAASUVORK5CYII=)\",\"eraser.png\":\"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAQAAABKfvVzAAAC1UlEQVR4XnWU309SYRjHn8OYTTM3zTmjC8NFFBR10dJu27wx11VX/QNdeGebTsvua93mRbUmLhURzYgKRZRJUJLibLPpRDCZC3/b1AMc4Tw97+EAR2e8FzD4fr7v53nPOQDCDkT/s2KAKiwROOXvFP8JLnDDGHhgArzgg28wCQGYgiDMw6E+1pY2rsECLEIIIrAC1O2CV/AWzPAOLGCFQbDDJ/hC+CQktU5bXWJoMGlaVv0iPAy/GeCmeBf0QB/YYECKO6kkzAl6Z/+t+BmsSJotgmmN4lFYZcA4tfdQez+1D8Fnio+S1oHe5TAcFuJHVBNit4nGLYrHGOCBbin+ntodMEzxKMkMWy8LpfgSEUN4niC7TTBtqzYYMCG3Z9xHadgD/bC1hi+U4uw1TkhFsqs3adpngJdGHSAZB8VHYAZ4vdt+RSjED3KcvYWYWMJuFY0E+MjdQe5MZgYE7YhFL8soCJzDU1iKwdcE+HOjBoG/NNJbq5DJI40EPNiIPCLgO/Wzk4lS3D2kPyaTQe5hETZsLDfxRRQLkLuLDjJd7u8wJs/mRs22J7CR4re3Qq3xIpENPUUHG+biuqX2UVsVX41epTp9ZjINm0ttqTIEZECQboK0ztd/Ya951t+nRi2GFYgksxluSlO7BMTYLVblMVcmOOTEZ9N+i4YvkREmAySz2JaNE4CqtM5jvrZHcbbE5lmLU8NrJTEmc3drsT1VlmmXdsCbgTdSu7wKUi2zPqsaq7GWZCjeJBZnwxlAN9dRyecBtsvzH/4+DV+MNdsLT4/GJSU0jHde3T2KtMxYnA8X5tvT5cp2eehDLnVxrPPoLgWpx4Hd+8Lp/Zx7boYoe/g40eDtViIF6Se+xPX8qPl96DqECImrRMOY2fg3e1atwd16UX1cR75wEXr4VmGdxL52atbpX2HnxfTenfiJcelKr9CjvQp/IMWJ57AO62ndOKk7890/iSWBU4XaZc0AAAAASUVORK5CYII=)\",\"fist.png\":\"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAQAAABKfvVzAAABj0lEQVR4Xu2S3yuDYRTHz7IZsfdCUrYLG4VCpJV6d0mS/A1zg79ArRArP4q5s4ulVousFCn/gX/g5WK7wkZMzIXMxjZ793XeMdn7vpM/wDn1PD1P53PO95znIfq3rwmYyU5tZPr7PJYoTjGaZ8xB1t+xZQqyP60iAEeWsThFGKpqbiE9CRECrnCHLnTAj17QbLV4E3mFXALbcOAGSXRiClnMgZLkZR/QYg0UEpDBDuxI4IHzT6OADdRiEK2gE12gBWmWE8Yj7weQIGOT650zaoiqAVtjDx2KeEWR8xZ4lUt+jEWkWJxJBYgkWa7NLy5WXWl5FilzhfoKwEAzzkwYI3DhTQUoVYpYR10FYCTPaDbJ2heQUwGfR0kFELmt6Utu9Jmz6dmFpmmR7v141w1XBiCBNFNacyKmCxT59kgHGBIQ4g7UkpRzESuwaCoQ+YZxqwGUGaUwrvvStqazLeRLj/bTZUTQB5rQfg1jjac9e8qAzFgZKbDMALpj1Kz3Z0WKjiGIfex++x6H98PgK4d/APiDpdwStyBoAAAAAElFTkSuQmCC)\",\"hand.png\":\"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAQAAABKfvVzAAAB50lEQVR4Xq2TwUsUcRzF3yy52TboHiKVLBCElb1479g5kgKPCkKs4ME6eAiiP0GELileStew6NLJq5Sihw6BG2VlECymB2PVXd10Zl7vN+OuOjNLl35fZhiY+fzee9/vb4D/tAow9fafu90BsqrvnXzNBwSTTBAZ2I3BkSbeYBMzLHNRn9/nEFHCvYZAutDHDfb5wDvanOVnoozBhkBzIUeHOQEHfO8DW0QV0xjC3VjoUh2onAC/ZPAme4giemMQo+BKoaeusCmdSa41MmYL8HxLgUKe27q/UKLzSSxcwUOMwk7VgTKX6sBz7oeA61hJHSUP8ST1raZQA7Z8hb0QkO1WE+d5lZdlx+UbTsjSR95i0bc0E7GUzfIHdziouRqFPzwU5ii4IzOP+SFiqe3i8jyP1A1bgKPyVGa5/M2S7iaDdWZ8KUwNe1Uus923FHx8ujwZPA9YGO48+CK/Ywp4un8N8SIZgG78fCTvFV1n9w+ePe6GFMzMJ7u4zuOInQDYYaKcDB3Ba63FGQWPLk8mt2MAWKv96kk0sKM2TBFfkQ4fvkx6fyHSH9NalwO0PkXPaktirt8rhRpqelblbV6IASzkmivP9NrEdE9AM/FXbCPG4v+6p+3VcZ2ql5zTZSqv+XcQ6+gKgL8a/RiIJPdySgAAAABJRU5ErkJggg==)\",\"handPlus.png\":\"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAQAAABKfvVzAAACAUlEQVR4Xq2Tz0sUcRjGn1lytW2wPUQamSAIK3vp7kk6i1LgMUGIFTqUBw9BiPsPhNAlpUtuKhpdOnVUKqlDh6CNsh+CsJQdjC13ddOZeXq+M7uTzu7SpXmZLwvzfr7P8/5Y4D89eZh48s/bhoC04nMXH/EmwThjRAp2c/B6C7vZwhRLXFP6NY4RRVxpCiTzw/zCYR94RpsP+Z4oYbQp0JbP0GFGwB6f+8A2UcF9jOFyQ+hkCJSrwDcZ7GcfUcDFBohRcKXQFyp8lc4s3zYzZgvwfEuBwgK/65xXRccrsXAGE7gBOxECJb4IgQfcjQAX8DJxEN/HVOJTTaEGbPsKvyJAuldNXOZZnpIdl485I0tveIkF31KuzlI6zU3ucFRzNQq/uS/MUeGOzNzm6zpLHa3ryzxQN2wBjsIT4JE6f7Co09RgHRlfAnPjXoXr7PQtmdSsNqn2eDJ4HLAw3rX3QX4nVaC534sA0bYCvdi6Je9lveb+mkLw2+PPiIKZ+WwPN3ioj9MyczQMsMNYKR5ZwfOnCzkVTq7KTpYDgrKCp5XuyGw9AOvViHoSmPhryaS7nCM+IhldvlRy92nYmaBLQWtdXqX1rn5X22OLI16xihhjBjA9q3CQJxoAFjJt5Xv6bBLdKmgmvsIOYrLxv+5uZ+WOtmqJi3pNLGj+54gN9ATAH0reBFwT+FQbAAAAAElFTkSuQmCC)\",\"invisible.png\":\"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAQAAABKfvVzAAACjUlEQVR4XnWTS09TURSF178wMUExvhIfiY+0Q6MThwwEHYk6MODAqHHgzD9gHDgWYhQBAUWMqY/SogSkCGJJNAiFUiyV2qqURkFa7cPvnJZiBXMH7Tl3rbXX2ntf5bWgyH+emPI8v8reAn8nj3r0Qr3qU78GNKghDWtEfk3ot2LKKq6AphTUjGYF26ObuqU7alabOvRQj/VEz6APKS23jvI/rY/6AD2ksCH0AG9Sq9r1QJ0W/hyREFbcOqQNcqiL/3FuIpozhJeot6J+H/VHegrci60lSA7t0VVtlRNqTvPAY4bQqxYL70LdxSsvd2l164B2qVHLVN4L0U2VhL4aQl9RveDdS9gl4IcBNWpRUShNUJxUT3OG0E/UTo4u4N0a1U9SHdRu3QOQIOw8N+0Yc/A2ZwgDeHfh3ZgZpbBH+zDTAPy7Jok6qU/K0Jht2k91CL5SVD9aHh1BvYHiCxYe1nV9w9h5bVcdk4DwGn3TmYg1Y9Rb8P2FQYVQbOM+qjPaDDwMguMw3j00Mst0narUDaUgBICPI5VgAhe5rUVguZBhhMaGOEzrrU6pQpfpdoqeB8k2hvoF7UB9mhxmsyD4WYIs0c/ifEKnoVxSEsptQke5rdQ5vGdRt4SYXTEf2lWq1l1s1GojlDiAgpmTLN4KHEKegw+NKvsco8oglApd0XtoOzEzhZmCuq2QJ7RRX3lqmO84xjaxGltUj/dVcJEwhuIqwVRptsZMZwL/wG2FPIHryijVVBnUNdJlS1ZKlmJEzkApr1JDj5KsyeJaQsR+fDlW8G/KCWyl1tgpziEIxczwVcnYcT6p5LpwO7gZ5jzH7mT0hmbW0+IO/UBixXX5L4RZlmpOn8u6vT7Y3P4BKLGmkBK1qvgAAAAASUVORK5CYII=)\",\"lasso.png\":\"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAQAAABKfvVzAAADg0lEQVR4Xk2UXWxTZRjHn7XYfWhh4DKlIFLRdlucImbGr2gEwYwsAjGRXXihRlTOFrOoF0RcdWwhEVnQdgOmbgzoliEhAZJlvZwdMQg6No/U2IYOWVrK1q1d19q1Pef8fU7bsy3/nIvznv/ved/n47xEZKDivNpK8RoE6XC4J9gX7A/2hXukwxCwta1UcxhUu4PcLFHnqZnaf+/E0FhTqDpiiaqqjjSFhsbvnZja76kRdarLQRzbTSjAuozgczaHVoJYhShX1krlSmH2bSWaQz5nRsA6MJQDrHMtx0Y3y4QS7Eo0eTpG3K5rP7tdHSNNnl2JNQxtlo+NzrXAmgXEDcnWA/5ihbAtOeyKtKf3wmIvs6+2l8GS3hv51u3aliQUKwf8yVZxA2GNIvSIBCNaJmPt/jrR6KZfyL6omQdQF2tvmTTyPt2iIhDq/f1mth/1LtjCVTa9QAIN8dEl8tK8mgJBj6oF21GvEWb4+wlft08Sds+FHbPmDl2A/mOl2Ran7SQylkV0MIcdu+cI7J3utUb0aL2q1DZSlDiRvObpKdpCZymVf1dqW6/qYY1QsM8SXYULw3jcq8XLWlSghOrJpYUwXxpeDUuUZn6smNWheUx6l7uxGD8HrKXz9A2doQidJnnPoWt6VEQItm4/4aX0LSd2wLCEqMB6+otmqYt8K1LVd3+oTRA6/yXUTXe+mCHsjE048QbWw8R6EHoNAMlGbA+d/PSOAZXKZC9tKbr19m+DFZztc/E/B2/3jp//x5logyC/8oyBd9DBIjeODj4/X8hTcO4PZZ/a6RKpYfBKWb6CuTQ+i41elD5A5cLHga7jPjOvWDIDv6e/EE25WXo49N0mPmF21OR3wm/FTahMf3/dNtLoe4GPa1LeC9y4xGUxacNnvHnykfTG+IWxJzOlyhnPzHH7bUJRvgINiSuu+CE8i2Jw8NwORq/jidRDktMz4COU46twnVyEx+brwxfFQDc+weu4P0drQFHq/Z+uP73UZq7vh8FAV6oeL2OTZl4OFMCUaZw4NXDjyNTBWENylaLDwXFpH+5Tm5mku4sN1XZQFwrkR+OvyjvxpvT5kTuEHcmpDh5i/qIQ/1l5LQd4RifUOS1A1XTnRq76r5dhzRlTPBxx7vlSDstmiA0r8NGXUcLZm6jJARkGZvnJAtqtod4JmhJbT/9tiZ4bS9QsX83dGv8DIrFVpnd+f4UAAAAASUVORK5CYII=)\",\"lassoPlus.png\":\"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAQAAABKfvVzAAADiklEQVR4XlVUbWxTVRh+12K3oYWBy9SCSAHbbXGRaGb8SoygmJFFICayH/5AIyrdYhb1BxFXHWswQRa03WVM3RzYjaEhYcZl/Tk6QhB0bN62xjV0yNJStm7tutbetvfex3N7e3XmyUnuOXme9+O8zz1EZKDyIhwVeBE28VisLzIQGYwMxPrEY7Bhh6NCYxgUuou8DLwuUD936G736GRrtC5uSSioi7dGR6fuds8dCtTzOoXlIhbbSyjBhrwt6G6LrgExlKJKfkiskksLuzVoiwbdeRs2gIlUgXWp/eTEdomwGnvSrYGuca/n2g9eT9d4a2BPej0TbZdOTiy1w1oQ8JsyHYdD5TJhZ2bME+/M7YfFWelc56yEJbc//oXXszNDKJcPhzId/CbCetnWxxOMaJ9NdoYaeaOXLpHg8HOCw0lOWrgPjcnO9lkjy9PLyzZCU2jQzOgnpgV7rNaut5GNRsnPEXzcstICQY9awX5i2ggzQoOEzzpnCXuXYq5Fc5cuTH8z5IoCnkRVooM55tq7RGDc+X5rXI+Oq3JDCyVILhTj54bPEYbPKV+CoyAhuaHjqh7WOEUGLIm1uDCGbdOFeEoxK+Hjilvz8Ng6WBK08E31og5tk+IBNg3GFBw+zlfMoHwJjrMUpzMk7Tt6TY/qOMHeGyI8l7vpxi4YtOBq0xvJR4vUQ8FV2bo7XzekCdxfhMZ57tk8YXdyxo1XsBEmhvv93ZoAJBnxcvT0B7cNqJFn++mJspuv/zJSzcb2VOr3kVv9Uz/+6U47BI/vZ+FzlkEHi9QyMfL0cilzwfnf5IPKpFeLzSOXK4s3qDb8YXLiovg2aoT3wj2ngmZ2YskP/Zr7mDepXnow+uVWVmHBatIbsddSJtTkvrpuH28JPsPKNclvhm8Ms2sxaeYz+k8/nNucujD5WL5CPhtYOOW8RSgr3kBz+rIndRRPohwsuJrBOO16NPuA6A4MBQlV+DTWKJVhy3JT7CIf7sX7eAn3qmpNUJZ969vrj7PGNRjwTiTck23C89iqkVcKSmDKt8x8N3Tj+NyRZHNmrazDkSnxIO5RhpmhO/9G0jIoByXSI6kXpN14Vfzo+G3CrsxcFzOx4iJif1YRKwXMozNssZi189xmdutXfoJVJWaZOVJs5v/18H+/rcK7nyQI3/tRrwryTLDIVkGgvRrKm6AhvePMH5bE+cl0/cpT9dX4B08ibwJFFp9KAAAAAElFTkSuQmCC)\",\"pointingHand.png\":\"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAADe0lEQVR4Xq2V+yvrYRzHnWwuaaUst9mY21iyHcVySghxJJLLDy7L2Y9S4geHThx+5ISc0vCDf0AS6fj1rPxkRJ2dJjvtjNolt1y+NMY+5/N5yonZbIunvm179nyf1/N+fy5PSMgLo6OjwxAWFgaxsbHQ2NhonJiYELy0Pqj/CgoKPqSmpjoGBgZgfHwciouLna2tre+D2uSlxXK5XJ2UlMTt7e2B2WyGjIwMiImJ+fhmADy9OjMzk7PZbHB0dAT4HXp6en6+GSA5OVktk8k4u90Ox8fHTEF3d/fvNwNIpVKm4AFACgYHB//Mzc0pUZ3o1SBPgEKhgKysLFd5ebkdlekTExMLUKUU56VVVVVhQQM9AdnZ2dDe3g5bW1tQU1MDKSkpNrTtr0qlsvT3939/NSA9PR2mp6fh7u4OhoaGWG2gXdDZ2Qnx8fFWBH3CR4P1IvMFe4feqoqKir7k5OQoSQEF2Wq1siwiwMzMDLjdbhgeHoa8vDw4OztjiiIiIqCyshLq6uoA39mRSCSKZ5DQ0FAxnuQXeutG+Yb8/Hwt1gIDHB4eMsDs7Czc399TsAFPCxzHwe7uLojFYlhdXQWDwQBKpZLDfdTeVMhra2vBaDRCV1cX2zAtLQ0IcHp6yuYWFxeZRfPz89DX18cAVIgYbNje3oaTkxPAJODwsN4BLS0tTPbGxgagTBCJRECFdnt7C+fn53B9fc0UXF1dweXlJbhcLnA4HAxmsVhYvVRUVHA8Hu85IDIyUl5SUgImk4mduKmp6T+ANiXvHz+Ag+ZJEYHpkxTgHt4VCIVCCTY009TUFNzc3MDk5CTlPRwcHLCN/A2CE6C0tNQ7IDw8nI8Z8LWhoeGWFGxubkJvby+THSyAz+d7jUEIpp46ISGB0+l0zHeKh9PpDAhACimd0QUuKirKO4BSC3uOTqPRwMXFBQvig/+BWER9C+8RLjo62jcAPayhvqPX6xmAgkf++hu0huKF2cdhivsGjIyMCAsLC81jY2PMHgIEMgiwvr4OcXFxHNaCbwDZ1NbW9q2srAz29/fZ6QOB0LrR0VHAdPd/ZwgEAhF6uaPVap/EwbMOHpTRPGUbKgfsBv5vPawJXn19/WfsR04qPMoozzg8hlEirK2tMUBzc3Pg93Zubq6uurqa9aCVlZUnz/LyMvu9tLQECwsLgPVD1f/Ds8n9AyubuM4FiwqZAAAAAElFTkSuQmCC)\",\"rect.png\":\"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAQAAABKfvVzAAACc0lEQVR4Xo2UT0hUURTGf7uipMy8GbUwigx0WbiwpCgQKmgl1CYj3Plahtg/eguFUIoamNxUCEFCGlIgEhSORmQRNeVMSkhpWcSU1KSOQ9i8vvfmpiMZOB8Xzjv3fPPd8+dertPHQICX/OAVnTRTz1GOaNXL7pQvSdTG9KHwCVJMyzlMFw1UsJFC8lmtVSi7Qr4u7SUVk1KsmCkyZtJETchUmTKh3NSYk6ZBq0a276nSXtRMGc+kfMIkiRY3shQkWiZ9wjjxMN5SEAuPQ5qegBALe07a+eiMCj9lxZ0ZJ+N483A9oQf6qbWED6rITW4IcQGaGJuT/Y0f7rm1cJliS+jnLjNkAviEDXTwVbZ/2gwjobLESKgY6iiwhI5gyw/N/T2zKtljF0CN6p39SAZbCVyhTpwVLKOUM8wGmn4lEy35yGH+Jp1TKF9nrRp3mzbOMcp9m0MhtLPrvwRDr/6/mwda6cZ4ON24Hd5z1RISfGNIAdmDnWabtHtlzxLjtY1pgucM2o8rPOUhj+UZY0qDWGEJad5y0ca8mO90LLyKA+yjkirN6QWeaO0kwjvucZw8m0MwGinLzmelUi1nP3vYQrUCH3GNY5Qp+UpbpelcQjNnWcchVWRQhc2jiPWsYTl7aZRetvTBtP5VaJW7la0c5g4npFbCbk5xSzlNKPGRUKk6vYCwScIH2ax2lagH1VJ6wxdbNVUumKUFhGFNaMxiyEk4v3Jn1VmE4LluBK804W/5zdDA/+OxCtk58dzeNjcS7vYJ/v1bzGMJnm7rPDLmkzlvdph2E5/zRs13M2BS/p3OvhoLkVSBi7jE5zn/VPCy+K/GH86K+gV5WsL6AAAAAElFTkSuQmCC)\",\"rectPlus.png\":\"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAQAAABKfvVzAAACi0lEQVR4Xo2UT0hUQRzHP6c2KmrTnYoKjCAP+45FB0uKAqECT0FdMsKbr2OIUdE76EUpamHzUmoEGWmIgUnQn9UOWURp7ksJKSuLeCW1qesStq/fvB11lzr4vgzM/Ob3md+b3/xmuEYfA4Fe8ZMhOmmklmMclVYr/U6xpRg0Pn2I+yRpZsQ4Shd1lLGJCGHWSItIv0xsXTKXEp+0+AqZJqum1KCKqQpliXaqKnVK1Umrkr62VMjcoJpWvkprYAqvyUksRV7TlAYmcOP4S1EyPgEZegMgGfftjP3JHhf9kp5rz9pZ21+U44t6oZ9qA3yUjNygReSKoIEPC2H/oN19pxouUWKAfrqZJRtIAxvp4Jv09d9mGYtZ3lisBGooMkBHMKVd5QsRlSbfcxMl99tFUCX5zg1SwZSHI6qJ4q+wNHWGuSCmzqTXFEYMan7TeYlyBSi2ItymjXOMc9/sIQLt7C4AMiE36ka7K/HDlUXR1uh0qIcH9JCpd+OZ+u3wnisG8PjOCEOydr6S1hxJXhufBnjBsBlc5hkPeRS6bt2zbuUiWK1WJpThLReMz8vFk07GV3OQ/ZRTIXWqN11t7SLBO+5yglVmD0FppA0dZqWkcScH2MtmAVqsJ1zlOJZUbbnJ0kw+0MhZ1lEpGRnGCS2zVGgDa1nOPup5ahYNqnU+QrOYm9nGEe5wUqKVsofT3JRdTspZjMWictIFwBYJfIitcsClFHNYIr3hq7iapAW1VACMSoUmjUZsz/6dX6t2rvgKAN9xEvhRT0/oZaXg/7EYIFcnvvO4zUnEezSg79//LAbw5bYuKqs+q/Nqh2pX7oJ1UP1QAyqt73Tu1ShUShK8not8WbBPBy+LfjX+AjC0Avv8MQHTAAAAAElFTkSuQmCC)\",\"zoom.png\":\"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAQAAABKfvVzAAACiUlEQVR4XpVTTUgUYRh+nJWCxUsNevBiYGm7UjAnFyoI9ORKSxt4a71Ei9I10EPg0VO7hOE1ikQSofXiYv6QRX9bkTAjbbM/B2mz8id3Z2f/ZvbtndR0NYn9XuYbPuZ55n3f730efMQCZjCLOX4/xyJe4BXe4C3e4QNi0JDCBu8JRPkURxIMm8BjjOMJJvEUU8jadUn36D79Zs5X8JhSyb6AX/iBzxxfLMIMwx/gIcYwXRMTNa86Mhrp23QXOwx3sW9zNKKOaF5NzAlrnCWBFXAx43jE8PeC0b4U9KstJmh/tJh+dSlotJeEDYZ/Bea5GAtudoZDkm5jcCP1poejd+XhaG+6kc82kvRwiDpLwha+A1RX8K4OaDfCU038UTQGk/GA2qO4lDbFpfbEA4NJ0QA1UThktOeFDBPOLd+/qF9PtOZBDi30LNU91FBfgz+rvmaoIdUVmnZo4CxLQU3cYsLJ7G1HebvqC7nIhHJ6G7y7mmsNKTQtGjbyq5p3Dnzv2au31i24QK35cEhpriQAzbUp92AS1GKqI7odL5F1jM9bzV7KzoyVLvfbDhKAoYZ4wGp/NFKU8Br6scS9VrM7Fw8a56/8A271ovb0pkF9m2UPy2AWGd/k4sYdpal/7+fH4cTxvaPsGo6C3EXysWYWQafIR2cqSnFyV237CM6ADOowyM8Si+xkkCsztB2RIYZCFT2QB1mYVdwSSSza/N85nD1qDl27cyA76EQ1k6bqtESiRagrXFsdyBxQq+ySnfIhtbJ6gHX2bBprQvmAHwKH/GDBmRCDyibP4Od/HLcNZ0KcCSnkmLQsKEd4mmvfgTMhybGCb0zI4RPb1bSbUtnDUvHz4yGJ7BUWx2+5Iu7Rc33AhQAAAABJRU5ErkJggg==)\"};var Jc=Object.create(null),hS=3/4,Vl=class{constructor(Z){this.HOTSPOT_32=Z.HOTSPOT_32,this.IMAGE_NAME_32=Z.IMAGE_NAME_32,this.cPointerCursor=Z.cPointerCursor,this.cTextCursor=Z.cTextCursor}getCursor(Z){if(Jc[Z])return Jc[Z];if(this.IMAGE_NAME_32[Z])return this.buildCursor(Z);switch(Z){case this.cPointerCursor:return\"default\";case this.cTextCursor:return\"text\";default:throw new Error(`Unknown cursor: ${Z}`)}}buildCursor(Z){let Bt=this.IMAGE_NAME_32[Z],Ft=`${lS[Bt]} ${this.HOTSPOT_32[Z*2]*hS} ${this.HOTSPOT_32[Z*2+1]*hS}, default`;return Jc[Z]=Ft,Ft}};var El=class{constructor(Z,Bt){this.title=Z,this.rootElement=Bt,this.elements=[],this.dialogElement=null}setLayout(Z,Bt){this.hLayout=TS(Z),this.vLayout=`${TS(Bt)} auto`}add(Z,Bt,ot,Ft,p1){this.elements.push({component:Z,x:Bt,y:ot,x2:Ft,y2:p1})}createTextField(Z,Bt){return new Yc(Z,Bt)}createLabel(Z){return new zc(Z)}createComboBox(){return new Kc}createCheckBox(Z){return new Xc(Z)}setEventConsumer(Z){this.consumer=Z}showMessage(Z){window.alert(Z)}showDialog(Z){let Bt=document.createElement(\"dialog\"),ot=this.rootElement.getBoundingClientRect();Object.assign(Bt.style,{position:\"absolute\",marginBlock:0,left:`${ot.left}px`,right:`${document.body.parentElement.clientWidth-ot.right}px`,top:`${this.rootElement.offsetTop+30}px`}),this.dialogElement=Bt,this.rootElement.getRootNode().append(Bt);let Ft=document.createElement(\"form\");Ft.style.display=\"grid\",Ft.style.gridTemplateColumns=this.hLayout,Ft.style.gridTemplateRows=this.vLayout,Ft.addEventListener(\"submit\",i1=>{i1.preventDefault(),this.consumer.fireOk(),Z()}),Bt.append(Ft);for(let{component:i1,x:s1,y:o1,x2:n0,y2:N0}of this.elements){let M0=document.createElement(\"div\");n0===void 0?(M0.style.gridColumn=`${s1+1} / ${s1+2}`,M0.style.gridRow=`${o1+1} / ${o1+2}`):(M0.style.gridColumn=`${s1+1} / ${n0+2}`,M0.style.gridRow=`${o1+1} / ${N0+2}`),M0.append(i1.getElement()),Ft.append(M0)}let p1=document.createElement(\"div\");Object.assign(p1.style,{display:\"flex\",flexDirection:\"row-reverse\",gap:\"15px\",gridColumn:\"1 / -1\",gridRow:\"-1\"}),Ft.append(p1);let Rt=document.createElement(\"button\");Rt.type=\"submit\",Rt.textContent=\"OK\",p1.append(Rt);let y1=document.createElement(\"button\");y1.type=\"button\",y1.textContent=\"Cancel\",y1.addEventListener(\"click\",()=>{this.consumer.fireCancel(),Z()}),p1.append(y1),Bt.showModal(),Bt.addEventListener(\"cancel\",()=>{this.consumer.fireCancel(),Z()})}disposeDialog(){this.dialogElement!==null&&(this.dialogElement.remove(),this.dialogElement=null)}},G2=class{setEventHandler(Z){this.eventHandler=Z}fireEvent(Z,Bt){this.eventHandler(Z,Bt)}},zc=class extends G2{constructor(Z){super(),this.element=document.createElement(\"label\"),this.setText(Z)}setText(Z){this.element.textContent=Z}getElement(){return this.element}},Yc=class extends G2{constructor(){super(),this.element=document.createElement(\"input\"),this.element.type=\"text\"}setText(Z){this.element.value=Z}getText(){return this.element.value}getElement(){return this.element}},Kc=class extends G2{constructor(){super(),this.element=document.createElement(\"select\"),this.element.addEventListener(\"change\",()=>{this.fireEvent(2,this.element.selectedIndex)})}setEnabled(Z){this.element.disabled=!Z}addItem(Z){let Bt=document.createElement(\"option\");Bt.textContent=Z,this.element.append(Bt)}getSelectedIndex(){return this.element.selectedIndex}setSelectedIndex(Z){this.element.selectedIndex=Z}setSelectedItem(Z){let Bt=this.element.options;for(let ot=0;ot<Bt.length;ot++)Bt[ot].textContent===Z&&(this.element.selectedIndex=ot)}getSelectedItem(){return this.element.options[this.element.selectedIndex].textContent}removeAllItems(){this.element.innerHTML=\"\"}setEditable(){}getElement(){return this.element}},Xc=class extends G2{constructor(Z){super();let Bt=document.createElement(\"label\"),ot=document.createElement(\"input\");ot.type=\"checkbox\",ot.addEventListener(\"change\",()=>{this.fireEvent(3,ot.checked?1:0)}),Bt.append(ot),Bt.append(Z),this.element=Bt,this.checkBox=ot}setEnabled(Z){this.checkBox.disabled=!Z}isSelected(){return this.checkBox.checked}setSelected(Z){this.checkBox.checked=Z}getElement(){return this.element}};function TS(w){return w.map(Z=>Z>0?`${Z}px`:\"auto\").join(\" \")}var Yo=class{constructor(Z){this.imageData=Z,this.dataView=new DataView(Z.data.buffer)}getWidth(){return this.imageData.width}getHeight(){return this.imageData.height}getRGB(Z,Bt){let ot=this.dataView.getInt32((Bt*this.imageData.width+Z)*4,!1);return(ot&255)<<24|ot>>>8}setRGB(Z,Bt,ot){let Ft=ot>>>24&255,p1=ot<<8|Ft;this.dataView.setInt32((Bt*this.imageData.width+Z)*4,p1,!1)}toDataURL(){let Z=document.createElement(\"canvas\"),Bt=Z.getContext(\"2d\");return Z.width=this.imageData.width,Z.height=this.imageData.height,Bt.putImageData(this.imageData,0,0),Z.toDataURL(\"image/png\")}};var Sl=class{constructor(Z,Bt,ot){this.canvasElement=Z,this.dialogRoot=Bt,this.JavaEditorArea=ot}register(Z){this.javaUiHelper=Z,this.cursorManager=new Vl(this.JavaEditorArea,Z)}grabFocus(){this.canvasElement.focus({preventScroll:!0})}setCursor(Z){this.canvasElement.style.cursor=this.cursorManager.getCursor(Z)}showHelpDialog(){}createImage(Z,Bt){let ot=new ImageData(Z,Bt);return new Yo(ot)}createImageFromBase64(Z,Bt,ot){ot=ot.replaceAll(/%\\d+%/g,y1=>\"A\".repeat(Number(y1.slice(1,-1))));let Ft=LS(ot),p1=new Uint8ClampedArray(Ft),Rt=new ImageData(p1,Z,Bt);return new Yo(Rt)}createDialog(Z){return new El(Z,this.dialogRoot)}runLater(Z){typeof requestAnimationFrame==\"function\"?requestAnimationFrame(Z):typeof setImmediate==\"function\"?setImmediate(Z):setTimeout(Z,0)}};function cS(w,Z,Bt,ot,Ft,p1,Rt,y1){let{readOnly:i1=!1,initialMode:s1=\"molecule\",initialFragment:o1=!1}=Z,n0=document.createElement(\"div\");n0.dataset.openchemlibCanvasEditor=\"true\",Object.assign(n0.style,{width:\"100%\",height:\"100%\",display:\"flex\",flexDirection:\"row\",alignItems:\"start\",backgroundColor:\"white\",touchAction:\"none\",userSelect:\"none\",webkitUserSelect:\"none\"});let N0=n0.attachShadow({mode:\"open\"});N0.adoptedStyleSheets=[sS()];let M0=null;i1||(M0=document.createElement(\"canvas\"),N0.append(M0));let Se=document.createElement(\"div\");Object.assign(Se.style,{width:\"100%\",height:\"100%\"}),N0.append(Se);let Xe=document.createElement(\"canvas\");Xe.tabIndex=0,Object.assign(Xe.style,{outline:\"none\"}),Se.append(Xe),w.append(n0);let dA=new p1(new Sl(Xe,Se,ot)),JP=new ot(YPt(s1,ot),new Hl(Xe,Bt),dA);if(o1)if(s1===\"molecule\"){let pA=new Rt(0,0);pA.setFragment(!0),JP.setMolecule(pA)}else{let pA=y1.create();pA.setFragment(!0),JP.setReaction(pA)}dA.setEditorArea(JP);let J2=i1?null:new Ft(JP,new Ml(M0),dA);function z2(pA){Xe.style.width=`${pA.width}px`,Xe.width=Math.floor(pA.width*T9),Xe.style.height=`${pA.height}px`,Xe.height=Math.floor(pA.height*T9),pA.width>0&&pA.height>0&&JP.repaint()}let Ko=Se.getBoundingClientRect();z2(Ko);let Y2=new ResizeObserver(([pA])=>{z2(pA.contentRect)});Y2.observe(Se);let K2=null,X2=null,Z2=null;i1||(K2=Gc(Xe,JP,ot),X2=yS(Se,Xe,JP,ot,Rt),Z2=Gc(M0,J2,ot));function Xo(){n0.remove(),Y2.disconnect(),K2?.(),X2?.(),Z2?.()}return{editorArea:JP,toolbar:J2,uiHelper:dA,destroy:Xo}}function YPt(w,Z){switch(w){case\"molecule\":return 0;case\"reaction\":return Z.MODE_REACTION|Z.MODE_MULTIPLE_FRAGMENTS;default:throw new Error(`Invalid initial mode: ${w}`)}}function wS(w,Z,Bt,ot,Ft){class p1{#t;#e;#P;#n;#f;#r;constructor(y1,i1={}){let{editorArea:s1,toolbar:o1,uiHelper:n0,destroy:N0}=cS(y1,i1,M0=>this.#i(M0),w,Z,Bt,ot,Ft);this.#t=s1,this.#e=o1,this.#P=n0,this.#n=null,this.#f={[w.EDITOR_EVENT_MOLECULE_CHANGED]:\"molecule\",[w.EDITOR_EVENT_SELECTION_CHANGED]:\"selection\",[w.EDITOR_EVENT_HIGHLIGHT_ATOM_CHANGED]:\"highlight-atom\",[w.EDITOR_EVENT_HIGHLIGHT_BOND_CHANGED]:\"highlight-bond\"},this.#r=N0}getMode(){return this.#A(),this.#t.getMode()&w.MODE_REACTION!==0?\"reaction\":\"molecule\"}setMolecule(y1){this.#A(),this.#t.setMolecule(y1)}getMolecule(){return this.#A(),this.#t.getMolecule()}setReaction(y1){this.#A(),this.#t.setReaction(y1)}getReaction(){return this.#A(),this.#t.getReaction()}setOnChangeListener(y1){this.#A(),this.#n=y1}removeOnChangeListener(){this.#A(),this.#n=null}clearAll(){this.#A(),this.#t.clearAll()}destroy(){this.#A(),this.#r(),this.#t=null,this.#e=null,this.#P=null,this.#n=null,this.#r=null}get isDestroyed(){return!this.#t}moleculeChanged(){this.#A(),this.#t.moleculeChanged()}#A(){if(this.isDestroyed)throw new Error(\"CanvasEditor has been destroyed\")}#i(y1){if(!this.#n)return;let{what:i1,isUserEvent:s1}=y1;this.#n({type:this.#f[i1],isUserEvent:s1})}}return p1}function gS(w,Z,Bt,ot){class Ft extends HTMLElement{static MODE=Object.freeze(Object.create({MOLECULE:\"molecule\",REACTION:\"reaction\"}));static observedAttributes=Object.freeze([\"idcode\",\"fragment\",\"mode\",\"readonly\"]);#t={idcode:\"\",fragment:!1,mode:Ft.MODE_MOLECULE,readonly:!1};get idcode(){return this.#t.idcode}set idcode(Rt){this.#t.idcode=String(Rt),this.setAttribute(\"idcode\",this.#t.idcode)}get fragment(){return this.#t.fragment}set fragment(Rt){this.#t.fragment=!!Rt,this.#t.fragment?this.setAttribute(\"fragment\",\"\"):this.removeAttribute(\"fragment\")}get mode(){return this.#t.mode}set mode(Rt){this.#t.mode=String(Rt),this.setAttribute(\"mode\",this.#t.mode)}get readonly(){return this.#t.readonly}set readonly(Rt){this.#t.readonly=!!Rt,this.#t.readonly?this.setAttribute(\"readonly\",\"\"):this.removeAttribute(\"readonly\")}setMolecule(Rt){this.fragment=Rt.isFragment(),this.idcode=`${Rt.getIDCode()} ${Rt.getIDCoordinates()}`,this.#e.setMolecule(Rt)}getMolecule(){return this.#e.getMolecule()}setReaction(Rt){this.fragment=Rt.isFragment(),this.idcode=ot.encode(Rt,{keepAbsoluteCoordinates:!0,mode:ot.INCLUDE_MAPPING|ot.INCLUDE_COORDS|ot.RETAIN_REACTANT_AND_PRODUCT_ORDER})??\"\",this.#e.setReaction(Rt)}getReaction(){return this.#e.getReaction()}clearAll(){this.#e.clearAll(),this.idcode=\"\"}moleculeChanged(){this.#e.moleculeChanged()}#e;#P(){this.#e||(this.#e=new w(this,{readOnly:this.readonly,initialMode:this.mode}),this.#e.setOnChangeListener(this.#o),requestIdleCallback(()=>this.#n()))}#n(){switch(this.mode){case Ft.MODE.MOLECULE:return this.#r();case Ft.MODE.REACTION:return this.#A();default:throw new Error(`Mode ${this.mode} is not supported`)}}#f(Rt){let y1=Rt.indexOf(\" \");if(y1===-1)return Z.fromIDCode(Rt);let i1=Rt.slice(0,y1),s1=Rt.slice(y1+1);return Z.fromIDCode(i1,s1)}#r(){let Rt=this.#f(this.idcode);Rt.setFragment(this.fragment),this.#e.setMolecule(Rt)}#A(){let Rt=ot.decode(this.idcode,{ensureCoordinates:!0})??Bt.create();Rt.setFragment(this.fragment),this.#e.setReaction(Rt)}#i=!1;#Q(Rt){this.#i=!0;try{Rt()}finally{this.#i=!1}}#o=Rt=>{let y1=this.idcode,i1=this.fragment;this.#Q(()=>{if(Rt.type===\"molecule\")switch(this.mode){case Ft.MODE.MOLECULE:{let o1=this.getMolecule();this.idcode=`${o1.getIDCode()} ${o1.getIDCoordinates()}`,this.fragment=o1.isFragment();break}case Ft.MODE.REACTION:{let o1=this.getReaction();this.idcode=ot.encode(o1,{keepAbsoluteCoordinates:!0,mode:ot.INCLUDE_MAPPING|ot.INCLUDE_COORDS|ot.RETAIN_REACTANT_AND_PRODUCT_ORDER}),this.fragment=o1.isFragment();break}default:throw new Error(`Unsupported mode ${this.mode}`)}});let s1=new CustomEvent(\"change\",{detail:Rt,bubbles:!0});if(this.dispatchEvent(s1),Rt.mode===\"molecule\"){if(this.idcode!==y1){let o1=new CustomEvent(\"idcode-changed\",{detail:this.idcode,bubbles:!0});this.dispatchEvent(o1)}if(this.fragment!==i1){let o1=new CustomEvent(\"fragment-changed\",{detail:this.fragment,bubbles:!0});this.dispatchEvent(o1)}}};#D(){this.#e&&(this.#e.destroy(),this.#e=void 0)}#u(){this.#D(),this.#P()}connectedCallback(){this.#t={idcode:this.getAttribute(\"idcode\")||\"\",fragment:this.hasAttribute(\"fragment\"),mode:this.getAttribute(\"mode\")||Ft.MODE.MOLECULE,readonly:this.hasAttribute(\"readonly\")},this.#P()}disconnectedCallback(){this.#D()}adoptedCallback(){this.connectedCallback()}attributeChangedCallback(Rt,y1,i1){if(!this.#e||this.#i)return;(()=>{switch(Rt){case\"idcode\":return this.#t.idcode=String(i1),()=>this.#n();case\"fragment\":return this.#t.fragment=i1!==null,()=>this.#n();case\"mode\":return this.#t.mode=String(i1),()=>this.#u();case\"readonly\":return this.#t.readonly=i1!==null,()=>this.#u();default:throw new Error(\"unsupported attribute change\")}})()()}}return Ft}function Zc(w){let{GenericEditorArea:Z,GenericEditorToolbar:Bt,GenericUIHelper:ot,Molecule:Ft,Reaction:p1,ReactionEncoder:Rt}=w,y1=wS(Z,Bt,ot,Ft,p1);function i1(){let s1=customElements.get(\"openchemlib-editor\");if(s1)return s1;let o1=gS(y1,Ft,p1,Rt);customElements.define(\"openchemlib-editor\",o1);let n0=document.createElement(\"style\");return n0.id=\"openchemlib-editor-default-style\",n0.innerHTML=`\n    /* dynamicaly added from openchemlib registerCustomElement with low priority */\n    openchemlib-editor:defined {\n      display: block;\n      height: 400px;\n      width: 600px;\n    }\n    `,document.head.prepend(n0),o1}w.CanvasEditor=y1,w.registerCustomElement=i1,delete w.GenericEditorArea,delete w.GenericEditorToolbar,delete w.GenericUIHelper}function dS(w){w.prototype.changeCustomLabelPosition=function(Bt){switch(Bt){case\"superscript\":for(let ot=0;ot<this.getAllAtoms();ot++){let Ft=this.getAtomCustomLabel(ot);Ft&&!Ft.startsWith(\"]\")&&this.setAtomCustomLabel(ot,`]${Ft}`)}break;case\"normal\":for(let ot=0;ot<this.getAllAtoms();ot++){let Ft=this.getAtomCustomLabel(ot);Ft?.startsWith(\"]\")&&this.setAtomCustomLabel(ot,Ft.slice(1))}break;case\"auto\":for(let ot=0;ot<this.getAllAtoms();ot++){let Ft=this.getAtomCustomLabel(ot);Ft&&(this.getAtomLabel(ot)===\"C\"?Ft.startsWith(\"]\")&&this.setAtomCustomLabel(ot,Ft.slice(1)):Ft.startsWith(\"]\")||this.setAtomCustomLabel(ot,`]${Ft}`))}break;case void 0:break;default:break}}}function BS(w){w.prototype.getNextCustomAtomLabel=function(Bt){let ot=Bt||\"1\",Ft=new Set;for(let Rt=0;Rt<this.getAllAtoms();Rt++){let y1=this.getAtomCustomLabel(Rt);y1&&Ft.add(y1)}let p1=0;for(;Ft.has(ot)&&p1++<100;)ot=KPt(ot);return ot}}function KPt(w){let Z=w.match(/(\\d+)/);if(Z){let ot=Number.parseInt(Z[1],10);return w.replace(/(\\d+)/,(ot+1).toString())}let Bt=w.match(/([a-yA-Y])([^a-zA-Z]*)$/);if(Bt){let ot=Bt[1],Ft=String.fromCodePoint(ot.codePointAt(0)+1);return Ft===\"Z\"||Ft===\"z\"?\"1\":w.replace(/([a-yA-Y])([^a-zA-Z]*)$/,`${Ft}$2`)}return\"1\"}function vS(w){let Z=w.fromMolfile;w.fromMolfile=function(ot,Ft={}){let{customLabelPosition:p1}=Ft,Rt=Z.call(this,ot),y1=ot.includes(`\\r\n`)?`\\r\n`:`\n`,i1=ot.split(y1);if(i1.length<4||!i1[3].includes(\"V2000\"))return Rt;let s1=i1.slice(4+Rt.getAllAtoms()+Rt.getAllBonds());for(let o1=0;o1<s1.length;o1++){let n0=s1[o1];if(n0.startsWith(\"A  \")){let N0=Number(n0.slice(3)),M0=s1[o1+1]?.trim();o1++,!Number.isNaN(N0)&&N0<=Rt.getAllAtoms()&&M0&&!Rt.getAtomCustomLabel(N0-1)&&Rt.setAtomCustomLabel(N0-1,M0)}if(n0.startsWith(\"V  \")){let N0=n0.split(\" \").filter(Boolean);if(N0.length>=3){let M0=Number(N0[1]),Se=N0.slice(2).join(\" \");!Number.isNaN(M0)&&M0<=Rt.getAllAtoms()&&!Rt.getAtomCustomLabel(M0-1)&&Rt.setAtomCustomLabel(M0-1,Se)}}if(n0.startsWith(\"M  ZZC\")){let N0=Number(n0.slice(7,10).trim()),M0=n0.slice(10).trim();N0&&M0&&Rt.setAtomCustomLabel(N0-1,M0)}}return Rt.changeCustomLabelPosition(p1),Rt}}var XPt=[\"M  STY\",\"M  SLB\",\"M  SAL\",\"M  SDT\",\"M  SDD\",\"M  SED\"];function FS(w){let Z=w.prototype.toMolfile;w.prototype.toMolfile=function(ot={}){let Ft=this.getCompactCopy(),{includeCustomAtomLabelsAsALines:p1=!1,includeCustomAtomLabelsAsVLines:Rt=!1,customLabelPosition:y1,removeCustomAtomLabels:i1=!1}=ot;Ft.changeCustomLabelPosition(y1);let s1=Z.call(Ft);if(!p1&&!Rt&&!i1)return s1;let o1=s1.includes(`\\r\n`)?`\\r\n`:`\n`,n0=s1.split(o1);if(i1&&(n0=n0.filter(Se=>!XPt.some(Xe=>Se.startsWith(Xe)))),n0.length<4||!n0[3].includes(\"V2000\"))return s1;let N0=[];for(let Se=0;Se<Ft.getAllAtoms();Se++){let Xe=Ft.getAtomCustomLabel(Se);if(Xe){let dA=String(Se+1).padStart(3,\" \");p1&&N0.push(`A  ${dA}`,Xe),Rt&&N0.push(`V  ${dA} ${Xe}`)}}let M0=n0.findIndex(Se=>Se.startsWith(\"M  END\"));return M0===-1?s1:(n0.splice(M0,0,...N0),n0.join(o1))}}function kS(w){let Z=w.prototype.toRxn,Bt=w.prototype.toRxnV3;w.prototype.toRxn=function(Ft={}){return mS(this,Z,Ft)},w.prototype.toRxnV3=function(Ft={}){return mS(this,Bt,Ft)}}function mS(w,Z,Bt){let{programName:ot=\"\",keepIdCode:Ft=!1}=Bt,p1=Z.call(w,ot);return Ft?p1:p1.replace(/^OCL_RXN_V1.0:.*$/m,\"\")}function bS(w){let Z=w.prototype.toSVG;w.prototype.toSVG=function(ot,Ft,p1,Rt){if(typeof ot!=\"number\"||typeof Ft!=\"number\")throw new Error(\"Molecule#toSVG requires width and height to be specified\");Rt=Rt||{};let y1=Rt.factorTextSize||1,i1=Rt.autoCrop===!0,s1=Rt.autoCropMargin===void 0?5:Rt.autoCropMargin,o1=Z.call(this,ot,Ft,y1,i1,s1,p1,Rt),n0=/svg id=\"(.*)\" xmlns/.exec(o1)[1];return o1=o1.replace(\"<style>\",`<style> #${n0} text {font-family: sans-serif;}`),o1=o1.replace(\"line {\",`#${n0} line {`),o1=o1.replace(\"polygon {\",`#${n0} polygon {`),Rt.fontWeight&&(o1=o1.replaceAll(\"font-size=\",`font-weight=\"${Rt.fontWeight}\" font-size=`)),Rt.strokeWidth&&(o1=o1.replaceAll(/stroke-width=\"[^\"]+\"/g,`stroke-width=\"${Rt.strokeWidth}\"`)),o1}}function RS(w){let{ConformerGenerator:Z,ForceFieldMMFF94:Bt,Molecule:ot,Reaction:Ft}=w;Z.prototype.molecules=function*(){let s1;for(;(s1=this.getNextConformerAsMolecule())!==null;)yield s1};let p1={maxIts:4e3,gradTol:1e-4,funcTol:1e-6},Rt=Bt.prototype._minimise;delete Bt.prototype._minimise,Bt.prototype.minimise=function(s1){return s1={...p1,...s1},Rt.call(this,s1.maxIts,s1.gradTol,s1.funcTol)},dS(ot),BS(ot),vS(ot),FS(ot),kS(Ft,ot),bS(ot);function y1(i1){if(!i1)return null;if(i1.includes(\"V2000\")||i1.includes(\"V3000\"))return ot.fromMolfile(i1);try{return ot.fromSmiles(i1)}catch{}try{return ot.fromIDCode(i1)}catch{}return null}ot.fromText=function(s1){let o1=y1(s1);return o1&&o1.getAllAtoms()>0?o1:null},ot.prototype.getOCL=function(){return w}}function af(){}function ZPt(w){let Z=w.document,Bt={},ot={userAgent:\"webkit\"},Ft=af;Ft.__moduleStartupDone=af;let p1=af,Rt,y1;function i1(){}function s1(){}function o1(){}function n0(){}function N0(){}function M0(){}function Se(){}function Xe(){}function dA(){}function JP(){}function J2(){}function z2(){}function Ko(){}function Y2(){}function K2(){}function X2(){}function Z2(){}function Xo(){}function pA(){}function cr(){}function tD(){}function Wc(){}function _c(){}function $c(){}function eD(){}function ql(){}function Il(){}function ac(){}function aPt(t){}function AD(){}function d1(){}function pS(){}function tw(){}function ew(){}function Aw(){}function gi(){}function xl(){}function D0(){}function nw(){}function Pw(){}function rw(){}function iw(){}function Zo(){}function fw(){}function Dw(){}function uw(){}function Qw(){}function ow(){}function Uw(){}function Lw(){}function Nl(){}function sw(){}function yw(){}function lw(){}function hw(){}function Tw(){}function cw(){}function ww(){}function gw(){}function dw(){}function Bw(){}function vw(){}function Fw(){}function mw(){}function CS(t,e){t.G=e}function HS(t,e){t.d=e}function MS(t,e){t.f=e}function VS(t,e){t.i=e}function ES(t,e){t.i=e}function Ol(t,e){t.I=e}function SS(t,e){t.T=e}function qS(t,e){t.S=e}function IS(t,e){t.O=e}function W2(t,e){t.P=e}function xS(t,e){t.f=e}function NS(t,e){t.n=e}function kw(t,e){t.p=e}function OS(t,e){t.b=e}function GS(t,e){t.e=e}function JS(t,e){t.r=e}function zS(t){t.a=t.b}function Wo(t){this.a=t}function c9(t){this.j=t}function bw(t){this.e=t}function Rw(t){this.e=t}function JA(t){this.b=t}function jw(t){this.a=t}function pw(t){this.a=t}function Cw(t){this.a=t}function Hw(t){this.a=t}function Mw(t){this.a=t}function Vw(t){this.a=t}function Ew(t){this.a=t}function Sw(t){this.a=t}function qw(t){this.a=t}function _2(t){this.a=t}function _o(t){this.a=t}function Iw(t){this.b=t}function nD(t){this.a=t}function $2(){this.i=0}function xw(){this.i=1}function Nw(){this.a=-1}function Gl(){this.b=-1}function di(t){this.a=t}function a2(t){this.a=t}function Jl(t){this.a=t}function zl(t){this.a=t}function Yl(t){this.a=t}function PD(t){this.a=t}function Kl(t){this.a=t}function Xl(t){this.c=t}function Zl(t){this.a=t}function rD(t){this.a=t}function iD(t){this.a=t}function wr(t){this.a=t}function gr(t){this.a=t}function Wl(t){this.b=t}function $o(t){this.b=t}function Ow(t){this.a=t}function Zt(t){this.c=t}function Gw(t){this.c=t}function Jw(t){this.a=t}function _l(t){this.a=t}function zw(t){this.c=t}function Yw(t){this.a=t}function Kw(t){this.a=t}function Xw(t){this.a=t}function Zw(t){this.a=t}function Ww(t){this.a=t}function _w(t){this.a=t}function YS(t,e){t.a=e}function KS(t,e){t.a=e}function XS(t,e){t.d=e}function ZS(t,e){t.e=e}function ao(t,e){t.n=e}function WS(t,e){t.T&=~e}function $w(t,e){t.C[e]=-1}function $l(t,e){mt(t.a,e)}function _S(t,e){mt(t.S,e)}function $S(t,e){au(t.a,e)}function aS(t,e){BO(t.a,e)}function tq(t,e){vO(t.a,e)}function al(t,e){mt(t.a,e)}function zP(t,e){mt(t.a,e)}function tU(t,e){LA(t.d,e)}function eq(t,e){aS(e,t.B)}function Aq(t,e){tq(e,t.v)}function nq(t,e){_q(e,t.f)}function Pq(t,e){t.H[e]=512}function rq(t,e,A){t.k[e]=A}function tu(){fU(this)}function f1(){Tu(this)}function LP(){ju(this)}function t3(t){fX(this,t)}function iq(t){return CK(t)}function fq(t){return qK(t)}function Dq(){return++VV}function aw(){this.a=new BU}function fD(){this.a=new f1}function t7(){this.a=new f1}function eu(){this.c=new f1}function e7(){m9.call(this)}function e3(){m9.call(this)}function dr(){m9.call(this)}function eU(){f1.call(this)}function A7(){f1.call(this)}function n7(){t7.call(this)}function A3(){t7.call(this)}function uq(t){t.a>0&&--t.a}function Qq(t,e){t.q=e,t.T=0}function oq(t,e){t.r=e,t.T=0}function n3(t,e){t.F[e]|=I0}function sP(t,e){t.u[e]|=u0}function Bi(t,e){t.length=e}function Uq(t,e){mt(t.c,e)}function rA(t,e){Mi(t.a,e)}function Lq(t){return t>>>0}function sq(t){return zr(t)}function yq(){return Ff(),s9}function P7(){this.b=new br}function r7(){this.a=new f1}function P3(){m9.call(this)}function i7(){m9.call(this)}function BA(){m9.call(this)}function r3(){m9.call(this)}function f7(){m9.call(this)}function D7(){LQ.call(this,0)}function c0(){c0=d1,Ou()}function lq(t){GE=t,Co=!0}function vi(t){xL(t),t.d=null}function hq(t){_A(),J1(),gn=t}function u7(){Fp(),this.b=Et}function i3(){this.a=new yD}function Q7(){this.a=new lP}function f3(){this.a=new lP}function DD(){this.a=new LP}function Au(t){this.a=Az(t)}function Tq(t){this.a=t,fi(t)}function w9(t){C1.call(this,t)}function o7(){e3.call(this)}function cq(t,e){rA(e,t.a.a)}function AU(t,e,A){t.k[e].a=A}function nU(t,e,A){t.k[e].b=A}function PU(t,e,A){t.k[e].c=A}function wq(t,e){return t.o[e]}function gq(t,e){return t.X[e]}function dq(t,e){return t.Y[e]}function uD(t,e){return t.e[e]}function U7(t,e){return t.J[e]}function b1(t,e){return t.s[e]}function ye(t,e){return t.A[e]}function y0(t,e){return t.B[e]}function X(t,e){return t.C[e]}function Ae(t,e){return t.G[e]}function l1(t,e){return t.H[e]}function Ht(t,e){return t.e[e]}function $1(t,e){return t.o[e]}function O(t,e){return t.j[e]}function Bq(t,e){return t.d[e]}function D3(t,e){return t.e[e]}function QD(t,e){return t.e[e]}function nu(t,e){return t.a[e]}function Br(t,e){return t.a[e]}function J0(t,e){return t.k[e]}function vq(t,e){return t.f[e]}function Pu(t,e){return t.b[e]}function L7(t,e){return t.b[e]}function s7(t,e){return t.c[e]}function Fq(t,e){return t.a[e]}function mq(t,e,A){e8(t.a,A,e)}function kq(t){IJ(t.a,t.c,t.b)}function y7(t){ba.call(this,t)}function l7(t){OU.call(this,t)}function h7(t){OU.call(this,t)}function T7(t){OU.call(this,t)}function c7(t){OU.call(this,t)}function w7(t){w9.call(this,t)}function g9(t){w9.call(this,t)}function g7(t){w9.call(this,t)}function d7(t){GL.call(this,t)}function oD(t){return L1(t),t}function Fi(t){return L1(t),t}function bq(t){return AP*t*t}function Rq(t,e){return t.db[e]}function jq(t){return Di(t),t.B}function pq(t){return Di(t),t.H}function Cq(t){return is(t,t.i)}function Hq(t,e){return dz(t,e)}function Mq(t,e){return uJ(t,e)}function UD(t,e){t.T|=248&(8|e)}function B7(t,e){t.g=new Ki(e)}function mi(t){t.b=null,t.c=0}function p8(t){w9.call(this,t)}function YP(t){w9.call(this,t)}function rU(t){w9.call(this,t)}function v7(t){w9.call(this,t)}function LD(t){w9.call(this,t)}function Vq(t){Bx(t,t.length)}function Eq(t){yx(t,t.length)}function Sq(t){lx(t,t.length)}function qq(t){vx(t,t.length)}function u3(t){Cu(t,t.length)}function iU(t){L1(t),this.a=t}function Q3(t){new f1,this.a=t}function F7(t){return 4e3*t*t}function Iq(t){return 8e3*t*t}function KP(t){return!!t&&t.b}function m7(t){return t.b==t.c}function o3(t,e){return t.a[e]}function d(t,e){return MB(t,e)}function k7(t){return Su(t,t.jb)}function kt(t,e){return t.J[e].a}function pt(t,e){return t.J[e].b}function vA(t,e){return t.J[e].c}function d0(t,e){return t.u[e]&3}function qe(t,e){return t.F[e]&3}function Bn(t,e){return t.w[e]<0}function sD(t,e,A){mD(t.k[e],A)}function xq(t,e){t.c=e,t.T&=-144}function fU(t){t.a=0,t.b=0,t.c=1}function b7(t){this.b=t,this.a=1}function U3(t){g9.call(this,t)}function FA(t){SA.call(this,t,0)}function R7(t){lD.call(this,t,0)}function zA(){J1(),X3.call(this)}function Nq(t){return _A(),_9(t)}function Oq(t){return _A(),a9(t)}function Gq(t){return t.c||cQ(t)}function vr(t,e){return t.k[e].a}function Fr(t,e){return t.k[e].b}function mr(t,e){return t.k[e].c}function j7(){j7=d1,_4=new i1}function L3(){L3=d1,$4=new ac}function ki(){ki=d1,Dl=new LP}function kr(){kr=d1,wo=!1}function p7(t){g9.call(this,t)}function XP(t){YP.call(this,t)}function s3(t){Au.call(this,t)}function DU(t){$o.call(this,t)}function C7(t){DU.call(this,t)}function H7(t){MU.call(this,t)}function M7(t){gB.call(this,t)}function y3(t){C8.call(this,t)}function l3(t){Zw.call(this,t)}function V7(t){pr.call(this,t)}function br(){a2.call(this,\"\")}function yD(){a2.call(this,\"\")}function ru(){a2.call(this,\"\")}function V0(){a2.call(this,\"\")}function E7(t){Tq.call(this,t.a)}function bi(){j3.call(this,null)}function S7(){this.a=0,this.b=0}function Jq(t,e){BI(t.b,t.a,e)}function iu(t,e){return bv(t,e)}function uU(t,e){return t<e?t:t-e}function K1(t,e){return e*t.c+t.b}function X1(t,e){return e*t.c+t.a}function h3(t,e){return N(t.j,e)}function q7(t,e){return N(t.k,e)}function T3(t,e){return Rq(t.d,e)}function zq(t,e){return wq(t.d,e)}function R0(t,e){return HU(t.d,e)}function Yq(t,e){return N(t.a,e)}function c3(t,e){return N(t.f,e)}function d9(t,e){return N(t.g,e)}function mA(t,e){return t.u[e]&48}function fu(t,e){return t.A[e]==0}function Kq(t,e){return Pf(t.d,e)}function Du(t){return cb(t,x5(t))}function I7(t){return t.l|t.m<<22}function Nn(t){return ut(t,7),t.p}function uu(t){return CU(t),t.n}function Xq(t,e){return t.a+=e,t}function w3(t,e){return t.a+=e,t}function E0(t,e,A){t.s[e]=A,t.T=0}function w0(t,e,A){t.H[e]=A,t.T=0}function x7(t,e){mt(t.f,e),t.d=-1}function N7(t,e){mt(t.g,e),t.d=-1}function Zq(){Ho!=0&&(Ho=0),Mo=-1}function g3(){g3=d1,hE=(ZT(),bo)}function C8(t){this.a=(L1(t),t)}function QU(t){this.a=new Ni(t)}function O7(t){this.a=new y7(t.a)}function Rr(t){this.b=t,this.a=0}function u(t,e){this.b=t,this.a=e}function lD(t,e){this.k=t,this.j=e}function iA(t,e){return t.a[e]&c1}function yP(t,e){return t.c[e]&c1}function Qu(t,e){return t.u[e]&448}function ou(t,e){return t.H[e]&127}function Wq(t,e){return t.C[e]==-1}function Ri(t,e){return X0[t.C[e]]}function oU(t,e){Ia.call(this,t,e)}function hD(t){AX.call(this,t,t.o)}function UU(){xO.call(this,new cr)}function TD(t,e){Uu.call(this,t,e)}function G7(t,e){this.b=t,this.a=e}function ZP(t,e){this.a=t,this.b=e}function Uu(t,e){this.a=t,this.b=e}function J7(t,e){this.a=t,this.b=e}function Ze(t,e){this.a=t,this.b=e}function z7(t,e){this.a=t,this.b=e}function Y7(t,e){this.a=t,this.b=e}function K7(t,e){this.a=t,this.b=e}function LU(t,e){this.b=t,this.a=e}function cD(t,e){this.b=t,this.a=e}function X7(t,e){this.a=t,this.b=e}function Z7(t,e){this.a=t,this.b=e}function sU(t,e){this.k=e,this.j=t}function d3(t,e){this.a=t,this.b=e}function ji(t,e){Uu.call(this,t,e)}function _q(t,e){FG(t.a,t.b,t.c,e)}function $q(t,e){QL(t.c,new Hw(e))}function W7(t,e,A){un(t,A),yn(t,e)}function We(t,e,A,n){t.w[e]=n?-A:A}function wD(t){return t.a.c+t.c.c}function Pn(t){this.b=t,this.a=-2}function _7(t){jD.call(this,t,0)}function $7(){gB.call(this,null)}function lP(){Ni.call(this,null)}function a7(){Al==null&&(Al=[])}function aq(){throw At(new BA)}function B3(){throw At(new BA)}function tI(t){throw new Error(t)}function eI(t,e){return t.exec(e)}function tg(t,e){return mt(t.a,e)}function eg(t,e){return Pf(t.a,e)}function z(t,e,A){return t.D[e][A]}function _(t,e,A){return t.i[e][A]}function xt(t,e,A){return t.k[e][A]}function CA(t,e,A){return t.n[e][A]}function AI(t,e){return t.H[e]==512}function v3(t,e){return N(t.a,e).a}function Ag(t,e){return N(t.a,e).b}function ng(t){return ln(t,1,t.c)>0}function nI(){return new aP(new i8)}function PI(t){return Array.from(t)}function rI(t){w.clearTimeout(t)}function Pg(){pr.call(this,null)}function rg(t){cp(),$a.call(this,t)}function ig(){g3(),Co||gL(),new Mj}function z1(){z1=d1,Ti=new ew}function yU(){yU=d1,Bl=new Pw}function lU(){lU=d1,H4=qA(\"X\",32)}function fg(){fg=d1,Gf=(z1(),$A)}function Dg(){Dg=d1,v8=(z1(),$A)}function iI(t,e){hx(t),t.b.ad(e)}function hU(t,e){Vr(t,t.length,e)}function jr(t,e){Uu.call(this,t,e)}function Lu(t,e){Uu.call(this,t,e)}function ug(t,e){this.a=t,this.b=e}function hP(t,e){this.a=t,this.b=e}function Qg(t,e){this.a=t,this.b=e}function TU(t,e){this.c=t,this.d=e}function og(t,e){this.b=t,this.a=e}function Ug(t,e){this.b=t,this.a=e}function Lg(t,e){this.a=t,this.c=e}function sg(t,e){this.b=t,this.a=e}function cU(t,e){Uu.call(this,t,e)}function wU(t,e){return qU(t.a,e)}function E1(t,e){return G(t,e)>0}function pi(t,e){return G(t,e)<0}function su(t,e){return Bg(e,t.a)}function yg(t,e){return Bg(e,t.a)}function B9(t){return t.b=tv(t.a)}function lg(t,e){return t.a.get(e)}function fI(t){return t.B?t.B.t:1}function Ci(t){return typeof t===n9}function yu(t){return typeof t===h2}function H8(t){return typeof t===mf}function O1(t){return t??null}function F3(t,e){return t==e-1?0:t+1}function lu(t,e){return G(t,e)>=0}function t0(t,e){return G(t,e)==0}function hg(t,e){return G(t,e)<=0}function gt(t,e){return G(t,e)!=0}function DI(t,e){return _A(),Je(t,e)}function uI(t,e){return _A(),qA(t,e)}function QI(t,e){i6.call(this,t,0,e)}function Be(t,e,A){t.J[e].a=A,t.T&=7}function Ie(t,e,A){t.J[e].b=A,t.T&=7}function TP(t,e,A){t.J[e].c=A,t.T&=7}function m3(t,e,A){return t.e[e][A]}function k3(t,e,A){return t.f[e][A]}function Hi(t,e){return(t.u[e]&4)!=0}function gU(t,e){return(t.F[e]&4)!=0}function De(t,e){return t.i[e].length}function b3(t,e){return t.e[e]-t.j[e]}function dU(t,e){return(t.u[e]&8)!=0}function Tg(t,e){return O1(t)===O1(e)}function cg(t){return parseInt(t)||-1}function wg(t){this.b=t,this.c=!1}function pr(t){this.f=t,this.g=!0}function gg(){this.c=new lP,this.b=0}function R3(t){i8.call(this),this.e=t}function hu(t){$5(),wB.call(this,t,0)}function Tu(t){t.a=c(DP,A0,1,0,5,1)}function dg(t){return S0(t.l,t.m,t.h)}function oI(t,e,A){return C5(t.a,e,A)}function Bg(t,e){return t.toFixed(e)}function WP(t){return t?t.fd():null}function Cr(t){return t.a<t.c.size()}function o0(t){return typeof t===n9}function vg(){Co||gL(),this.a=new Mm}function BU(){Ff(),this.g=new qi,Lz()}function j3(t){this.d=new f1,this.c=t}function Mi(t,e){return t.a+=\"\"+e,t}function Fg(t,e){return t.a+=\"\"+e,t}function J(t,e){return t.a+=\"\"+e,t}function cu(t,e){Xi(t,0,t.length,e)}function p3(t,e){dx(t.a,t.a.length,e)}function UI(t,e){return t.j[e]-EL(t,e)}function fA(t,e){return(t.F[e]&64)!=0}function wu(t,e){return(t.F[e]&48)>>4}function mg(t,e){return e==0?t.i:t.j}function M8(t){return wP(t,t.q,t.r,gn)}function LI(t,e){return j0(t.a[e][3])}function sI(t,e){return j0(t.a[e][2])}function kg(t,e){return j0(t.a[e][2])}function bg(t,e){return j0(t.a[e][1])}function yI(t,e,A){e8(t.f,A,e),t.d=-1}function lI(t,e,A){e8(t.g,A,e),t.d=-1}function _P(t,e,A){mt(t.a,new Ze(e,A))}function vU(t,e,A,n){t.a=e,t.b=A,t.c=n}function Rg(t,e,A,n){t.e=e,t.c=A,t.d=n}function gD(t,e,A,n){t.D[e][A]=n,t.T=0}function jg(t,e){this.b=eP(e),this.a=t}function pg(t,e){this.b=eP(e),this.a=t}function Cg(t,e){return t.a+=he(e),t}function Hg(t){ke(),vG.call(this,t)}function Mg(){Zw.call(this,\"UTF-8\")}function Vg(){Lu.call(this,\"Tail\",3)}function Eg(){Lu.call(this,\"Head\",1)}function Sg(t){iG.call(this,t,RN())}function C3(t){QI.call(this,t,new br)}function qg(t){uZ.call(this,t,new br)}function rn(t,e){return wP(t,t.q,t.r,e)}function Ig(t,e){return(t.u[e]&u0)!=0}function v9(t,e){return(t.u[e]&no)!=0}function V8(t,e){return(t.u[e]&Tn)!=0}function H3(t,e){return(t.F[e]&y8)!=0}function gu(t,e){return(t.G[e]&l8)!=0}function F9(t,e){return(t.F[e]&u0)!=0}function M3(t,e){return(t.F[e]&I0)!=0}function z0(t,e){return(t.u[e]&I0)!=0}function P0(t,e){return(t.u[e]&512)!=0}function hI(t,e){return(t.u[e]&C0)!=0}function Vi(t,e){return(t.u[e]&cn)!=0}function TI(t,e){return(t.u[e]&ge)!=0}function $P(t,e){return(t.F[e]&128)!=0}function r0(t,e){return(t.a[e]&u0)!=0}function Re(t,e){return(t.c[e]&u0)!=0}function cI(t,e){return(t.a[e]&I0)!=0}function E8(t,e){return(t.c[e]&I0)!=0}function V3(t,e){return(t.a[e]&T8)!=0}function cP(t,e){return(t.F[e]&768)>>8}function wI(t){return t.e==null?\"\":t.e}function FU(t){return t!=null?a8(t):0}function S0(t,e,A){return{l:t,m:e,h:A}}function E3(t,e){return t<e?-1:t>e?1:0}function gI(){return _A(),J1(),J1(),gn}function mU(t,e,A){return t.j=e,n6(t,A)}function dI(t,e,A,n){t.a.od(A,e.ld(n))}function BI(t,e,A){KS(t,vI(e,t.a,A))}function vI(t,e,A){return jI(t.a,e,A)}function FI(t,e){return new Ug(t.a,e)}function Xt(t,e){return t!=null&&Rz(t,e)}function YA(t,e){J1(),Rv.call(this,t,e)}function HA(t){_A(),tL.call(this,0,0,t)}function du(t){xe.call(this,t.a,t.b,t.c)}function xg(){wL.call(this,\"#\",\"\",\"\")}function Ng(){Lu.call(this,\"Range\",2)}function S8(t){return an(t,0,t.length)}function Og(t){Xi(t,0,t.length,null)}function S3(t){ut(t,31),t.d&&JY(t.d)}function kU(t,e){UL(t,e),t.d&&(e.T=0)}function _e(t,e){return e<t.g&&Re(t.p,e)}function vn(t,e){return e<t.f&&r0(t.p,e)}function mI(t,e){return e<t.f&&V3(t.p,e)}function ne(t,e){return(t.u[e]&F1)>>18}function q3(t,e){return(t.G[e]&7680)>>9}function kI(t,e){return j0(t.b[e-1][2])}function Gg(t,e,A){return j0(t.a[e][A])}function I3(t,e){return N(t.k,e).length}function bI(t,e){return{type:e,value:t}}function At(t){return t.backingJsObject}function x3(t,e,A){return e.ld(t.ld(A))}function RI(t,e,A){t.a=e^1502,t.b=A^tl}function jI(t,e,A){return t.a.od(e,A),e}function mt(t,e){return t.a.push(e),!0}function pI(t,e){t.H[e]=512,vf(t),t.T=0}function Jg(t,e,A){t.i[0].a=e,t.i[0].b=A}function CI(t,e){e.Nb(t.c),PG(e,t.a,t.b)}function N3(t,e){KB(e,t.c),CL(e,t.a,t.b)}function ue(t,e){t.d[t.c]=I1(t.d[t.c],e)}function HI(t,e){t.q=VT(new pB(t.o,e),t)}function O3(t){t.g=c(mE,T0,114,0,0,1)}function zg(){this.a=c(DP,A0,1,8,5,1)}function bU(t){this.d=c(OA,te,6,t,14,1)}function Yg(t){this.c=t,this.b=t.length}function RU(){this.a=0,this.b=0,this.c=0}function Kg(){this.b=new Gl,this.a=this.b}function Xg(t,e){this.a=new SA(t.a,e_(e))}function Zg(t,e,A){this.a=new wj(t.a,e.a)}function Wg(t){Co||gL(),this.a=new Sg(t)}function _g(){bi.call(this),this.b=new f1}function m9(){O3(this),Vh(this),this.jc()}function Fn(t){a2.call(this,(L1(t),t))}function MI(t){return at(n9,typeof t)}function VI(t){return at(mf,typeof t)}function dD(t){return t.$H||(t.$H=++VV)}function EI(t){return t>=56320&&t<=57343}function G3(t){return t.p==null?t.o.P:t.p}function SI(t){return t.l+t.m*iP+t.h*fP}function Ei(t,e){return le(t.a,G3(e.c))}function q8(t,e,A,n){t.a+=e,t.b+=A,t.c+=n}function BD(t,e,A){t.u[e]&=-449,t.u[e]|=A}function Bu(t,e,A){return WA(t,e,A,t.C[e])}function jU(t,e){return(t.u[e]&49152)>>14}function qI(t,e){return{molecule:t,map:e}}function II(t,e,A){return EY(Qp(t.a,e,A))}function k9(t,e){return e<0?null:N(t.d,e)}function pU(t){t.e=Ve,t.a=null,t.d=null}function I8(t){this.a=t,Wl.call(this,t)}function $g(){this.a=c(F,k,6,0,15,1)}function ag(t){this.a=c(Pt,ft,6,t,16,1)}function td(t){if(!t)throw At(new P3)}function vu(t){if(!t)throw At(new i7)}function vD(t){if(!t)throw At(new f7)}function xI(t){if(!t)throw At(new P3)}function ed(t){if(!t)throw At(new r3)}function NI(t,e){ze(t.a,G3(e.c),new Dd)}function FD(t,e,A){return vF(t,e,e,A),t}function mD(t,e){return vU(t,e.a,e.b,e.c),t}function CU(t){t.n==null&&wX(t)}function Ad(t,e){t.s=w.Math.min(e,t.t)}function nd(t,e,A){t.Q=-6,t.F=e,t.D=A,Sb(t)}function Pd(t,e,A){t.F[e]&=-49,t.F[e]|=A<<4}function OI(t,e,A,n,P){Mk(e,A,t.i[n][P])}function GI(t,e,A,n,P){return OX(t,e,A,n,P)}function wP(t,e,A,n){return pR(t,e,A,n,t.J)}function HU(t,e){return t.g==null?-1:t.g[e]}function rd(t,e){return t.j==null?-1:t.j[e]}function id(t,e){return t&&e&&t instanceof e}function JI(t){return t<0?t+36:t>=36?t-36:t}function MU(t){$o.call(this,t),this.a=t}function Fu(t){em.call(this,t),this.e=NaN}function fd(t){hD.call(this,t),sT(this,t)}function J3(t,e){this.c=1,this.a=t,this.b=e}function On(t,e){this.a=0,this.b=t,this.c=e}function Dd(){this.b=new V0,this.c=new f1}function ud(){this.e=new LP,this.c=5e5}function Qd(){_A(),tL.call(this,32,32,null)}function kD(t,e){return y5(t,e,e.q,e.r,!0)}function od(t,e){return WN(t,e,t.a.length-1)}function Si(t,e){return t.i[e].length-t.e[e]}function zI(t,e){return iu(new Array(e),t)}function Ud(t,e){this.a=new jv(new Rr(t),e)}function YI(t,e){t.backingJsObject=e,yb(t,e)}function $e(t,e){t.a=e,t.c=0,t.b=63,Eq(t.d)}function KI(t,e,A){t.ub(e-t.V/2,A-t.V/2,t.V)}function XI(t,e,A){return t.apply(e,A);var n}function Ld(t,e){return L1(e),new hP(t,e)}function sd(t,e){return L1(e),new hP(t,e)}function ZI(t){return Jt(DA(t,32))^Jt(t)}function yd(t){return t.c==1&&t.a==0&&t.b==0}function ld(t){return t.d.length-t.c.length}function fn(t){return S8(y2(t,0,t.length))}function at(t,e){return L1(t),O1(t)===O1(e)}function WI(t,e){return kr(),t==e?0:t?1:-1}function _I(t,e,A,n){return _A(),bA(t,e,A,n)}function z3(t,e){ki(),BB(Dl,t)||ED(Dl,t,e)}function $I(t,e){G1(t),xR(t,OQ(e,!0,null))}function hd(t,e){var A;return A=t.d,t.d=e,A}function mu(t,e,A){this.b=t,this.c=e,this.a=A}function xe(t,e,A){this.a=t,this.b=e,this.c=A}function Td(t){this.a=new w.Map,this.b=t}function cd(t){this.a=new w.Map,this.b=t}function Y3(t,e,A){this.c=t,this.a=e,this.b=A}function K3(t,e,A){this.c=t,this.a=e,this.b=A}function gP(t,e,A){this.a=t,this.b=e,this.c=A}function wd(t,e,A){this.a=t,this.b=e,this.c=A}function gd(t,e,A){this.a=t,this.c=e,this.b=A}function dd(t,e,A){this.a=t,this.c=e,this.b=A}function S1(t,e,A){sU.call(this,e,t),this.a=A}function VU(t,e,A){sU.call(this,e,t),this.a=A}function x8(t){BG.call(this,t,(Xh(),Uc))}function qi(){this.c=8,this.O=new QU(new eD)}function X3(){J1(),this.M=this.N=256,RR(this)}function R1(t,e){return w.Math.abs(t.w[e])}function Z3(t,e){return t.t==null?null:t.t[e]}function MA(t,e){return t.v==null?null:t.v[e]}function Bd(t,e){return t.e[e]-t.j[e]+It(t,e)}function b9(t,e){return((t.u[e]&d8)>>>27)-1}function Qe(t,e){return gt(V(t.B[e],a0),0)}function EU(t,e){return KF(e,nO(t,ch(e)))}function aI(t,e,A){return t.indexOf(k0(e),A)}function vd(t,e){return t.e[e]-e0(t,e)+It(t,e)}function j0(t){return Ci(t)?(L1(t),t):t.Yc()}function tx(t,e){Oi(t.e,e)&&uL(t.d,e)}function SU(t,e){Hu(e,t.R),Iu(e,t.v),Hd(e,t.w)}function ex(t,e){t.B=!1,QL(t.v,new z7(t,e))}function Ax(t,e){t.v=!1,QL(t.s,new Y7(t,e))}function nx(t,e){t.f=!1,QL(t.c,new K7(t,e))}function Px(t){t.b=!1,ott(t.a,new _2(nB(t)))}function bD(t){this.c=t,this.O=new QU(new eD)}function Ii(t,e){this.a=t>e?t:e,this.b=t>e?e:t}function Fd(t,e,A){this.a=t,this.b=e,this.c=A}function R9(t,e,A){t.A[e]=A,t.T&=t.C[e]==1?0:7}function md(t,e){return t.a*=e,t.b*=e,t.c*=e,t}function rx(t,e){return t.d==null&&Hb(t,e),t.d}function W3(t,e){t.u=new V0,t.t=6,t.v=0,t.r=e}function qU(t,e){var A;return A=e,!!Gr(t,A)}function xi(t){var e=t.Fc();return e.getText()}function j9(t){var e=t.Jc();e.disposeDialog()}function RD(t,e){var A=t.Jc();A.showMessage(e)}function ix(){var t;return t=IL(null),t.f=2,t}function kd(t){oL(t.a),kv(t.c,t.b),t.b=null}function bd(t){this.a=t.a,this.b=t.b,this.c=t.c}function fx(t){return kr(),at(h2,typeof t)}function Dx(t){return _A(),new HA($B(new $2,t))}function Rd(t,e){if(t!=e)throw At(new r3)}function IU(t,e){if(!t)throw At(new YP(e))}function jd(t,e,A){n5(A,0,t,e,A.length,!1)}function ux(t,e,A,n,P){f6(t,e,A,0,A.length,n,P)}function Qx(t,e,A){return _0(t,e)||_0(t,A)?16:1}function pd(t,e){return pF(e,t.c)||pF(e,t.a)}function Gn(t){return pn(qx(o0(t)?pe(t):t))}function jD(t,e){this.e=e,LT(this,(L1(t),t))}function _3(t){this.f=t,this.e=2,this.a=vs(t)}function Cd(t,e){this.a=t,this.c=e,this.b=!0}function Hd(t,e){e.a=e.a*t.c+t.a,e.b=e.b*t.c+t.b}function ox(t,e){return e==1?t.a+t.f++:t.i+t.g++}function Ux(t){return t.g.a.length+t.f.a.length}function p9(t,e){return t.H[e]==257||t.H[e]==129}function Hr(t,e){return t.p&&e<t.f?iA(t.p,e):0}function C9(t,e){return t.p&&e<t.g?yP(t.p,e):0}function N(t,e){return ve(e,t.a.length),t.a[e]}function $3(t){var e;return e=t.slice(),bv(e,t)}function H(t){var e;return e=IL(t),tF(t,e),e}function ku(t){return t.p==null&&(t.p=SW(t)),t.p}function Lx(t){return t.d==null&&Hb(t,10240),t.d}function sx(t){return!W4&&(W4=new BU),hs(W4,t)}function ae(t,e){var A=t.Kc();return A.setRGB(e)}function xU(t){var e=t.Lc();return e.getWidth()}function NU(t){var e=t.Lc();return e.getHeight()}function Md(t){var e=t.Cc();return e.grabFocus()}function le(t,e){var A;return A=e,WP(Gr(t,A))}function yx(t,e){var A;for(A=0;A<e;++A)t[A]=0}function lx(t,e){var A;for(A=0;A<e;++A)t[A]=2}function Vd(t,e){this.c=t,this.a=e,this.b=!1}function OU(t){this.b=t,this.a=new f1,IN(this,t)}function Ed(t,e){e?this.a=e:this.a=new R3(t)}function Sd(t){ki(),Y5.call(this,t,Ey,new LP)}function aP(t){t?this.a=t:this.a=new R3(null)}function KA(t){var e=t.Fc();return e.isSelected()}function Nt(t,e){var A=t.Fc();return A.addItem(e)}function GU(t,e,A,n){var P=t.Lc();P.setRGB(e,A,n)}function JU(t,e){var A=t.Fc();return A.setText(e)}function N8(t,e){var A=t.Fc();return A.setText(e)}function k1(t,e,A,n,P,r){return pk(t,e,A,n,P,0,r)}function qd(t,e,A,n){return(n[t]&n[e]&~n[A])!=0}function Ne(t,e,A){t.u[e]&=-49,t.u[e]|=A,t.T&=7}function Id(t,e,A){t.u[e]&=-49153,t.u[e]|=A<<14}function Jn(t,e,A){A?t.u[e]|=I0:t.u[e]&=wy}function dP(t,e,A){A?t.u[e]|=512:t.u[e]&=-513}function je(t,e){t.K!=e&&(t.K=e,e||Wb(t),t.T=0)}function hx(t){t.b||(t.b=t.a.Tb(),t.a.size())}function a3(t){Tj(),this.a=\"Helvetica\",this.b=t}function xd(){UF(),JD.call(this,4,(er(),dl))}function Nd(){Nd=d1,Pc=c(EPt,Ye,143,256,0,1)}function Od(){Od=d1,nc=c(VPt,Ye,142,256,0,1)}function Gd(){Gd=d1,Ac=c(MPt,Ye,141,128,0,1)}function Tx(){return B(d(zV,1),k,6,15,[0,1,2])}function zn(t){return Ci(t)?vt((L1(t),t)):t.Zc()}function bu(t,e){return L1(t),t+(\"\"+(L1(e),e))}function cx(t){return wD(new PD(t.e).a)<t.c}function th(t){return Array.isArray(t)&&t.vd===AD}function Mr(t){return t.length==0?0:Q1(t,P1,Et)}function wx(t,e){!t.b&&(t.b=new bi),K8(t.b,m1(e))}function gx(t,e,A){$q(new uv(t._,e),new gd(t,e,A))}function dx(t,e,A){im(0,e,t.length),Xi(t,0,e,A)}function BP(t,e,A){mQ(),bL.call(this,t,e,A,255)}function Vr(t,e,A){var n;for(n=0;n<e;++n)t[n]=A}function Bx(t,e){var A;for(A=0;A<e;++A)t[A]=-1}function vx(t,e){var A;for(A=0;A<e;++A)t[A]=-1}function eh(t){var e;for(e=0;e<t.q;e++)t.u[e]&=wy}function Jd(t){var e;for(e=0;e<t.q;e++)t.u[e]&=-449}function Fx(t){var e;for(e=0;e<t.q;e++)t.u[e]&=-513}function zd(t){var e;return e=t.a[0],t.e>0?e:-e|0}function H9(t){var e;return e=IL(t),e.k=t,e.f=1,e}function mx(t,e){return!t&&(t=[]),t[t.length]=e,t}function Yd(t,e){return TA(0,t,0,e.a.length,!0,e)}function Kd(t,e,A,n){return TA(1,e,0,A,n,new Wo(t))}function Jt(t){return o0(t)?t|0:I7(t)}function Xd(t){return t.N==null&&(Di(t),HZ(t)),t.N}function pD(t){t.a||(t.a=!0,sL(t.e,new Sw(t)))}function e1(t){t.b||(t.b=!0,sL(t.f,new Ew(t)))}function C1(t){O3(this),this.f=t,Vh(this),this.jc()}function t8(t,e){return t.a.get(e)!==void 0}function Zd(t,e,A){return t.c?$8(e.b,A.b):sm(e,A)}function kx(t,e){return S0(t.l&e.l,t.m&e.m,t.h&e.h)}function bx(t,e){return S0(t.l|e.l,t.m|e.m,t.h|e.h)}function Rx(t,e){return S0(t.l^e.l,t.m^e.m,t.h^e.h)}function zU(t,e){return t==null?e:e==null?t:t+\",\"+e}function j1(t,e){return pn($k(o0(t)?pe(t):t,e))}function q0(t,e){return pn(D5(o0(t)?pe(t):t,e))}function DA(t,e){return pn(yK(o0(t)?pe(t):t,e))}function Ah(t){return!Array.isArray(t)&&t.vd===AD}function jx(t,e,A){return A<0?-1:t.lastIndexOf(e,A)}function px(t,e,A){A?t.F[e]|=y8:t.F[e]&=-32769}function Cx(t,e,A){A?t.F[e]|=u0:t.F[e]&=-65537}function Ru(t,e){if(t<0||t>=e)throw At(new o7)}function nh(t,e){if(t==null)throw At(new g7(e))}function ju(t){t.a=new Td(t),t.c=new cd(t),++t.b}function M9(t,e){return t.a+=e.a,t.b+=e.b,t.c+=e.c,t}function Hx(t,e){return t.a-=e.a,t.b-=e.b,t.c-=e.c,t}function Wd(t,e){var A=t.Cc();return A.setCursor(e)}function vP(t,e){var A=t.Fc();return A.setEnabled(e)}function _d(t,e,A){var n=t.Lc();return n.getRGB(e,A)}function Mx(t){var e;return e=r2(uP,t),e?Qj(e):null}function Vx(t){var e;return e=r2(uP,t),e?tp(e):null}function Ex(t){var e;return e=r2(uP,t),e?Hj(e):null}function he(t){return o0(t)?\"\"+t:oR(t)}function Ni(t){this.b=null,this.a=(yU(),t||Bl)}function Ph(t){this.c=0,this.d=0,this.b=t,this.a=0}function $d(t,e){this.k=t,this.c=0,this.g=e,Fs(this)}function oe(t,e,A){ke(),this.e=t,this.d=e,this.a=A}function ad(t,e){_5(),He.call(this,t),H_(this,e)}function tB(t,e,A){pr.call(this,e),aa(this,t,e,A)}function Sx(t,e,A,n,P){for(;e<A;)n[P++]=Gi(t,e++)}function pu(t,e){return H8(e)?BB(t,e):!!EU(t.a,e)}function O8(t,e){return e<t.g&&(E8(t.p,e)||t.H[e]==8)}function qx(t){return S0(~t.l&x0,~t.m&x0,~t.h&tn)}function eB(t,e,A){return Q8(t,e,e.D[0][A],e.D[1][A])}function Ix(t,e,A){t.u[e]&=-67108865,A&&(t.u[e]|=Tn)}function AB(t){var e;for(e=0;e<t.r;e++)t.F[e]&=-98305}function Cu(t,e){var A;for(A=0;A<e;++A)t[A]=!1}function xx(t,e){return G(t,e)<0?-1:G(t,e)>0?1:0}function FP(t){return t.e==0?t:new oe(-t.e,t.d,t.a)}function uA(t,e){var A=t.Fc();return A.setSelected(e)}function Nx(t,e){var A=t.Kc();return A.drawPolygon(e)}function YU(t,e){var A=t.Kc();return A.fillPolygon(e)}function nB(t){var e=t.Ac();return e.getDrawContext()}function PB(t){var e=t.Bc();return e.getDrawContext()}function CD(t){var e=t.Ac();return e.getCanvasWidth()}function HD(t,e){return Gt(e,t.length+1),t.substr(e)}function e8(t,e,A){DL(e,t.a.length),t.a.splice(e,0,A)}function Yn(t,e){for(L1(e);t.bd();)Jq(e,t.cd())}function A8(t,e){var A;return A=q9(t.a,e,t),A==null}function Oi(t,e){return ze(t.a,e,(kr(),wo))==null}function rh(t,e){return t.f[e]&&(t.o[e]==1||t.o[e]==2)}function V9(t,e){J(t.c,\"  \"),J(t.c,e),J(t.c,$A)}function ih(t,e){VL.call(this,t,!0,e),this.a=!0}function rB(t){var e;e=tX(t),this.a=e,this.b=new bD(e)}function E9(t){var e=t.Ac();return e.getCanvasHeight()}function Ox(t,e,A){var n=t.Ac();return n.onChange(e,A)}function iB(t,e){var A=t.Cc();return A.createDialog(e)}function KU(t,e){var A=t.Kc();return A.setLineWidth(e)}function Gx(t,e){var A;A=e+1,A>t.length&&(t.length=A)}function G8(t){var e;for(e=0;t>0;)t>>=1,++e;return e}function fB(t,e){return t.a+=String.fromCharCode(e),t}function Oe(t,e){return t.a+=String.fromCharCode(e),t}function L1(t){if(t==null)throw At(new dr);return t}function Kn(t){var e;return e=new YA(t.q,t.r),ff(t,e),e}function J8(t,e){return new xe(t.a-e.a,t.b-e.b,t.c-e.c)}function DB(t,e){return new gP(e.a-t.a,e.b-t.b,e.c-t.c)}function XU(t,e){return t.j[e]==2&&t.o[e]==2&&t.C[e]<=7}function ZU(t,e,A){A?t.u[e]|=no:t.u[e]&=gy,t.T&=7}function fh(t,e,A){t.H[e]=A==1?1:A==2?2:A==3?4:16,t.T=0}function Jx(t,e,A,n,P,r){t.F=e,t.B=A,t.D=n,t.C=P,t.A=r}function zx(t,e,A,n){return{x:t,y:e,width:A,height:n}}function Yx(t){w.setTimeout(function(){throw t},0)}function uB(t,e){return t.c==null?null:t.c[e]}function WU(t,e,A){var n=t.Jc();return n.setLayout(e,A)}function Dh(t){var e=t.Kc();return e.getBackgroundRGB()}function QB(t){var e=t.Kc();return e.getForegroundRGB()}function B0(t){var e=t.Fc();return e.getSelectedIndex()}function Kx(t){var e;return e=t-10,(e<0?48+t:97+e)&c1}function Xx(t,e){var A;return A=Sj(t),A?ts(A,e):null}function Gi(t,e){return Gt(e,t.length),t.charCodeAt(e)}function uh(t,e){return new Mu(t.d,t.a,t.b,t.c.kd(e))}function S9(t,e){return H8(e)?qu(t,e):WP(EU(t.a,e))}function Zx(t){return String.fromCharCode.apply(null,t)}function _U(t){if(t==null)throw At(new dr);return t}function oB(){eu.call(this),this.b=new f1,this.a=new f1}function UB(t,e,A,n){sU.call(this,t,n),this.b=e,this.a=A}function QA(t,e,A,n){this.c=t,this.d=e,this.b=A,this.a=n}function qt(t,e,A,n){this.c=t,this.b=e,this.d=A,this.a=n}function Ji(t,e,A,n){this.b=t,this.a=e,this.c=A,this.d=n}function LB(t,e,A){this.i=t,this.d=e,this.f=cX(A,t,e)}function Qh(t,e){this.a=y4,this.d=t,this.b=e,this.c=-1}function $U(t){this.d=t,this.a=this.d.b,this.b=this.d.c}function z8(t){this.e=t,(t&1)==0&&!ko&&!ko&&(ko=new bk)}function oh(t,e){return O1(t)===O1(e)||t!=null&&VP(t,e)}function Y8(t,e){return O1(t)===O1(e)||t!=null&&VP(t,e)}function q9(t,e,A){return H8(e)?ED(t,e,A):Db(t.a,e,A)}function sB(t,e,A){$O.call(this,t,e,e.D[0][A],e.D[1][A])}function aU(t,e,A){t.d=6,t.e=A,t.c=e,t.f=(e[t.e]&63)<<11}function Wx(t,e){t.c=e,t.e*w.Math.pow(10,-t.b/1.36)}function yB(t){G1(t),t.eb=w.Math.max(t.eb,3),e1(t.k)}function Hu(t,e){e.c*=t.c,e.a=e.a*t.c+t.a,e.b=e.b*t.c+t.b}function lB(t,e){return t.c!=e.c?t.c>e.c?1:-1:0}function _x(t){return t.a==t.b?-1:t.c[t.a++]}function Uh(t,e){var A;return A=t.C[e],A==7||A==15||A==33}function $x(t,e){var A;return A=bY(t.a,e),t.a=Fq(t.a,A),A}function ax(t,e){t.H=e,t.eb=w.Math.max(t.eb,1),e1(t.k)}function tL(t,e,A){_A(),A?this.a=A:this.a=new YA(t,e)}function Mu(t,e,A,n){this.d=t,this.a=e,this.b=A,this.c=n}function tN(t,e,A,n){for(var P=0;P<=n;P++)t[P]=e[A+P]}function Vu(t,e,A,n){return A<n?t.a[e][n][A]:t.a[e][A][n]}function hB(t,e,A){e<A?t.u[A][e]=!0:t.u[e][A]=!0}function eL(t,e,A){return O0(t,e,A,_0(t,e)||_0(t,A)?16:1)}function TB(t){return S9((!R4&&(R4=new Bp),R4).b,m1(t))}function Xn(t){return/\\d/.test(String.fromCharCode(t))}function eN(t,e){var A=t.Fc();return A.setSelectedItem(e)}function AL(t,e,A,n){var P=t.Kc();return P.setFont(e,A,n)}function Wt(t,e){var A=t.Fc();return A.setSelectedIndex(e)}function Lh(t,e){var A;return A=Cn(t,e),A+WA(t,e,A,t.C[e])}function AN(t,e){var A;return A=RK(t,e),A?ts(A,e):null}function nN(t,e){var A;for(A=0;A<e.q;A++)mD(t.k[A],e.J[A])}function PN(t){var e;for(e=0;e<t.R.f;e++)Ix(t.R,e,t.M[e])}function rN(t){var e;for(e=Pp(t);e;)Wh(t,e,fo),e=Pp(t)}function iN(t){var e;for(e=Ev(t);e;)Wh(t,e,dC),e=Ev(t)}function cB(t){var e;this.a=t,e=this.Cc(),e.register(this)}function wB(t,e){this.v=new tD,this.L=t,this.G=e,this.xb()}function gB(t){this.b=new cL(11),this.a=(yU(),t||Bl)}function dB(t,e){return new Mu(e.d,new Qg(e,t),e.b,e.c)}function BB(t,e){return e==null?!!EU(t.a,null):t8(t.c,e)}function mn(t,e){return t.a[TA(0,e,0,t.a.length,!0,t)][2]}function VA(t,e){return t.a[TA(0,e,0,t.a.length,!0,t)][5]}function I9(t,e){return t.a[TA(0,e,0,t.a.length,!0,t)][4]}function n8(t,e){return t.a[TA(0,e,0,t.a.length,!0,t)][3]}function fN(t){return String.fromCodePoint(t).trim()===\"\"}function DN(t){return t>=5&&t<=9||t>=15&&t<=17||t==35||t==53}function Eu(t){var e;e=t.a,t.a=t.b,t.b=e,e=t.c,t.c=t.d,t.d=e}function vB(t,e){var A;return A=uu(t.td),e==null?A:A+\": \"+e}function Er(t,e){var A;return A=IL(t),tF(t,A),A.f=e?8:0,A}function MD(t,e,A){var n;return n=new Iw(iB(t,e)),oz(n,A),n}function uN(t,e){return t.b!=e.b?t.b<e.b?-1:1:0}function oA(t,e,A){return Ct(e,A,t.length),t.substr(e,A-e)}function sh(t,e,A,n){var P=t.Kc();return P.drawString(e,A,n)}function nL(t,e,A,n){var P=t.Kc();return P.fillCircle(e,A,n)}function FB(t,e,A){var n=t.Bc();return n.setDimensions(e,A)}function yh(t,e,A){var n=t.Cc();return n.showHelpDialog(e,A)}function QN(t,e){var A;for(A=0;A<e;++A)t[A]=new _l(t[A])}function lh(t,e,A){bd.call(this,DB(new gh(t,e),new gh(t,A)))}function v0(t,e,A){bd.call(this,DB(new zi(t,e),new zi(t,A)))}function hh(t,e){Xl.call(this,t),DL(e,t.size()),this.a=e}function Su(t,e){return t.s==null&&(Di(t),Ua(t,e,t.R.J)),t.s}function oN(t,e){return N9(t,e.c,e.d)&&N9(t,e.c+e.b,e.d+e.a)}function UN(t,e){return S9(t.a,e)!=null?S9(t.a,e):(Xr(),S2)}function Th(t,e){return((t.G[e]&7680)>>9)+((t.G[e]&cy)>>13)}function LN(t,e){return Y9(t.toLowerCase(),e.toLowerCase())}function mB(t){return/[A-Z]/i.test(String.fromCharCode(t))}function kB(t){return/[A-Z]/i.test(String.fromCharCode(t))}function sN(t){return Eh(t._c().Vb(),dO(new rw,new iw))}function yN(t,e){return p9(t.V,e)&&(bs(t,e)!=-1||YL(t,e)!=-1)}function PL(t,e){return t.a[TA(0,e,0,t.a.length,!0,t)][6]>0}function bB(t,e){return t.a[TA(0,e,0,t.a.length,!0,t)][8]>0}function rL(t,e){return t.a[TA(0,e,0,t.a.length,!0,t)][5].a}function kn(t){return w.Math.sqrt(t.a*t.a+t.b*t.b+t.c*t.c)}function vt(t){return Math.max(Math.min(t,Et),-2147483648)|0}function lN(t){return t==2||t==10||t==18||t==36||t==54||t==86}function P8(t,e,A,n){t.F[e]&=-131080,t.F[e]|=A,n&&(t.F[e]|=4)}function W0(t,e,A,n){var P;return P=Wr(t,6),vU(t.J[P],e,A,n),P}function RB(t,e,A,n){var P;return P=ZA(t,e,A),P!=-1&&QT(t,P,n)}function ch(t){var e;return t==null?0:(e=a8(t),e|0)}function hN(t){if(t.Xc())return null;var e=t.k;return co[e]}function jB(t,e){return Xt(e,84)?Fk(t.a,e):!1}function wh(t,e){var A,n;return A=e,n=new Zo,Cj(t,A,n),n.d}function iL(t,e){var A;A=t.b,t.b=e.b,e.b=A,A=t.d,t.d=e.d,e.d=A}function pB(t,e){Bs(),this.b=t,ut(this.b,63),this.d=e,Aj(this)}function zi(t,e){this.a=t[3*e],this.b=t[3*e+1],this.c=t[3*e+2]}function CB(t,e,A){Co||gL(),UW(e),this.a=new Y5(t.a,e,new LP)}function x9(t,e,A,n,P){var r=t.Kc();return r.drawLine(e,A,n,P)}function TN(t,e){return CF(t,e)?(AF(t),!0):!1}function cN(t,e){return r8(e),RP(t,c(E,q,6,e,15,1),0,e)}function VD(t,e){return r8(e),RP(t,c(Ut,Tt,6,e,15,1),0,e)}function bn(t,e){return r8(e),RP(t,c(F,k,6,e,15,1),0,e)}function wN(t,e){t.b.a.length!=0&&J(t.b,\"<NL>\"),J(t.b,e)}function qu(t,e){return e==null?WP(EU(t.a,null)):lg(t.c,e)}function HB(t,e){return e===t?\"(this Map)\":e==null?P9:XD(e)}function gN(t){var e;return e=eI(t.b,t.a),e?new Ww(e):null}function MB(t,e){var A=t.a=t.a||[];return A[e]||(A[e]=t.Sc(e))}function mP(t,e){return(t.u[t.D[0][e]]&t.u[t.D[1][e]]&512)!=0}function dN(t){return/[A-Z\\d]/i.test(String.fromCharCode(t))}function BN(t){return t.r?\"Unresolved SMARTS features:\"+t.r:\"\"}function vN(t){throw new Error(\"missing static resource: \"+t)}function FN(t){try{return new RegExp(t)}catch{return null}}function mN(t){var e;return S8(y2(t,0,(e=t.length,Ou(),e)))}function fL(t,e){return r8(e),RP(t,c(zt,_t,6,e,15,1),0,e)}function ED(t,e,A){return e==null?Db(t.a,null,A):cm(t.c,e,A)}function kN(t,e,A){t.b=null,t.a=e,A==null?t.c=hs(t,e):t.c=A}function bN(t,e,A){t.e=null,t.d=e,A==null?t.f=hs(t,e):t.f=A}function VB(t,e,A){this.k=t,this.c=2,this.g=A,this.j=e,Fs(this)}function EB(t){Bs(),this.b=t,ut(this.b,63),this.d=Jk(t),Aj(this)}function gh(t,e){this.a=t.J[e].a,this.b=t.J[e].b,this.c=t.J[e].c}function DL(t,e){if(t<0||t>e)throw At(new g9(U6+t+L6+e))}function ve(t,e){if(t<0||t>=e)throw At(new g9(U6+t+L6+e))}function Gt(t,e){if(t<0||t>=e)throw At(new U3(U6+t+L6+e))}function dh(t){if(t<0)throw At(new g9(\"bitIndex < 0: \"+t))}function RN(){return xo||(!xo&&(xo=new ud),xo)}function SB(t){var e,A;for(e=0,A=t-1;A>0;)A>>=1,++e;return e}function Bh(){Bh=d1,wE=(A6(),Kf),TE=AE,cE=nE,gE=PE}function qB(){this.a=ck(\"/resources/forcefield/mmff94/def.csv\")}function IB(){this.a=ck(\"/resources/forcefield/mmff94/atom.csv\")}function xB(){this.a=eP(\"/resources/forcefield/mmff94/bndk.csv\")}function NB(){this.a=eP(\"/resources/forcefield/mmff94/dfsb.csv\")}function SD(t){var e=t.Kc();return e.getSelectionBackgroundRGB()}function jN(t,e,A,n,P){var r=t.Kc();return r.clearRect(e,A,n,P)}function pN(t,e,A){return gt(V(e.c[t.d[A]],j1(1,t.b[A])),0)}function Y0(t,e,A){return bA(t.J[e].a,t.J[e].b,t.J[A].a,t.J[A].b)}function N9(t,e,A){return e>=t.c&&e<=t.c+t.b&&A>=t.d&&A<=t.d+t.a}function CN(t,e){return P0(t.u,z(t.u,0,e))&&P0(t.u,z(t.u,1,e))}function OB(t,e){return j0(t.a[TA(0,e,0,t.a.length,!0,t)][1])}function GB(t,e){return j0(t.a[TA(0,e,0,t.a.length,!0,t)][4])}function JB(t,e){return j0(t.a[TA(0,e,0,t.a.length,!0,t)][2])}function HN(t,e){return e<t.g&&(E8(t.p,e)||t.H[e]==8)?1.5:dt(t,e)}function V(t,e){return pn(kx(o0(t)?pe(t):t,o0(e)?pe(e):e))}function Y(t,e){return pn(bx(o0(t)?pe(t):t,o0(e)?pe(e):e))}function O9(t,e){return pn(Rx(o0(t)?pe(t):t,o0(e)?pe(e):e))}function kP(t){return ke(),G(t,0)>=0?we(t):FP(we(p0(t)))}function MN(){return DQ(),B(d(vl,1),Ye,95,0,[OE,Io,Lc])}function VN(){return Xr(),B(d(Mtt,1),Ye,107,0,[G4,z4,J4,si,S2])}function zB(t,e){oe.call(this,1,2,B(d(F,1),k,6,15,[t,e]))}function YB(t){j7(),GL.call(this,t),this.a=\"\",this.b=t,this.a=\"\"}function $t(t){return vD(t.a<t.c.a.length),t.b=t.a++,t.c.a[t.b]}function uL(t,e){L1(e),t.a[t.c]=e,t.c=t.c+1&t.a.length-1,Wz(t)}function Iu(t,e){e.c=e.c*t.c+t.a,e.d=e.d*t.c+t.b,e.b*=t.c,e.a*=t.c}function KB(t,e){var A;for(A=0;A<t.q;A++)t.J[A].a*=e,t.J[A].b*=e}function Yi(t,e){var A;return A=Cn(t,e),A+WA(t,e,A,t.C[e])-x1(t,e)}function XB(t,e,A){var n;wm(e,A,t.a.length),n=A-e,t.a.splice(e,n)}function i0(t,e,A,n){var P=t.Jc(),r=e.Fc();return P.add(r,A,n)}function ZB(t,e){var A;return A=1-e,t.a[A]=Zu(t.a[A],A),Zu(t,e)}function vh(t,e){if(e==null)throw At(new dr);return pu(t.e,e)}function WB(t,e){if(e==null)throw At(new dr);return S9(t.e,e)}function Sr(t,e){var A,n;return n=V(t,T1),A=j1(e,32),Y(A,n)}function QL(t,e){var A=t.Jc();function n(){e.nc()}A.showDialog(n)}function _B(t,e){var A;return A=e.C[t],A<(l2(),xA).length?xA[A]:2}function Fh(t,e,A){return A=HK(A),t.replace(new RegExp(e,\"g\"),A)}function $B(t,e){return t.j=null,n6(t,new Pn(new Rr(e)))?t.j:null}function G9(t,e,A){return(t.H[e]==257||t.H[e]==129)&&t.D[0][e]==A}function mh(t,e,A,n,P){t.i[0].a=e,t.i[0].b=A,t.i[1].a=n,t.i[1].b=P}function kh(t,e,A,n,P){this.a=t,this.b=e,this.g=A,this.f=n,this.e=P}function qD(t,e,A){wm(e,A,t.size()),this.c=t,this.a=e,this.b=A-e}function oL(t){vu(t.b!=-1),t.c.removeAtIndex(t.b),t.a=t.b,t.b=-1}function Rn(t){for(;t.d>0&&t.a[--t.d]==0;);t.a[t.d++]==0&&(t.e=0)}function UL(t,e){e.K=t.K,e.L=t.L,e.S=t.S,e.I=t.I,e.P=t.P,e.T=t.T&24}function EN(t){Hs();var e,A;for(ut(t,1),A=t.f,e=0;e<A;e++)wp(t,e)}function J9(t){var e;return o0(t)?(e=t,e==-0?0:e):bO(t)}function aB(t,e){var A;return A=WB(t,e),++t.a,A&&(++A.b,++t.b),A}function SN(t,e){var A;return A=v$(t,e),A?new aP(A):null}function ID(t,e){var A;return A=t.b?le(t.b,m1(e)):null,A?A.a:e-1}function LL(t,e){var A;return A=t.c?le(t.c,m1(e)):null,A?A.a:e-1}function qN(t,e){var A;return e==null?null:W5(t,Ln((A=e,c0(),A)))}function IN(t,e){var A=t;e.setEventHandler(function(n,P){A.Ec(n,P)})}function bh(t,e,A,n){var P=t.Kc();return P.drawCenteredString(e,A,n)}function xN(t,e,A,n,P){var r=t.Kc();return r.drawDottedLine(e,A,n,P)}function Rh(t,e,A,n,P){var r=t.Kc();return r.fillRectangle(e,A,n,P)}function NN(t,e,A){var n;n=lz();try{return XI(t,e,A)}finally{YN(n)}}function ON(t){return function(){return NN(t,this,arguments);var e}}function tv(t){return vD(t.a<t.c.size()),t.c.getAtIndex(t.b=t.a++)}function GN(t){if(!(\"stack\"in t))try{throw t}catch{}return t}function jh(t){this.a=c(F,k,6,t,15,1),this.b=c(F,k,6,t,15,1)}function kA(t,e){ke(),oe.call(this,t,1,B(d(F,1),k,6,15,[e]))}function ph(){ph=d1,XE=B(d(F,1),k,6,15,[40,20,20,100,20])}function JN(){return tr(),B(d(Vtt,1),Ye,97,0,[sl,Ll,Ul,yl,Ro,ll])}function zN(){return Xh(),B(d(xPt,1),Ye,80,0,[Uc,IE,xE,NE])}function ev(t,e,A){return wD(new PD(t.e).a)<t.c?Sv(t,e,A):null}function Av(t,e,A){t.b=e,t.a=A,t.c&&t.e*w.Math.pow(10,-e/1.36)}function xu(t,e){t.e&&(!t.r&&(t.r=new V0),J(t.r,\" \"),J(t.r,e))}function nv(t){Bi(t.g.a,0),Bi(t.f.a,0),Bi(t.a.a,0),t.b=null,t.d=-1}function YN(t){t&&EO((L3(),$4)),--Ho,t&&Mo!=-1&&(rI(Mo),Mo=-1)}function KN(t){var e,A;for(A=jj(t);A;)e=BY(A),Wh(t,e,uo),A=jj(t)}function sL(t,e){var A=t,n=t.Cc();n.runLater(function(){A.Dc(e)})}function Ue(t,e){var A=t.Jc(),n=A.createLabel(e);return new h7(n)}function UA(t){var e=t.Jc(),A=e.createComboBox();return new T7(A)}function XN(t,e){var A=t.Gc(),n=new HA(e);return A.copyMolecule(n)}function K8(t,e){var A;return A=ar(t,e),A<0&&(A=-(A+1),e8(t.d,A,e)),A}function Pv(t,e){var A;return A=t-e,A>=U1?A-=F0:A<k6&&(A+=F0),A}function ZN(t,e){var A;for(A=t.d-1;A>=0&&t.a[A]==e[A];A--);return A<0}function qr(t,e,A){var n;return n=(ve(e,t.a.length),t.a[e]),t.a[e]=A,n}function Nu(t,e,A){var n;return n=new LB(e,A,t.C),ZS(n,Vz(t,n)),n}function WN(t,e,A){for(;A>=0;--A)if(Y8(e,t.a[A]))return A;return-1}function bP(t,e){return e.e==0||t.e==0?yr:(Pr(),Ms(t,e))}function Ch(t,e){var A;return A=t.u[e]&cn,A==0?0:A==re?2:A==N1?3:4}function Hh(t,e){var A;return A=t.C[e],A==8||A==16||A==34||A==52||A==84}function _N(t,e){var A;return A=t.C[e],A==9||A==17||A==35||A==53||A==85}function rv(t,e,A){var n;for(n=0;n<t.e.length;n++)t.a[n]+=e,t.b[n]+=A}function iv(t,e,A,n){var P=t.Cc();return P.createImageFromBase64(e,A,n)}function $N(t,e){return Pr(),e<uc.length?UZ(t,uc[e]):bP(t,ni(e))}function fv(t,e){return e<t.g.a.length?N(t.g,e):N(t.f,e-t.g.a.length)}function Dv(t,e,A){return t.f.k.D[0][e]==A?t.f.k.D[1][e]:t.f.k.D[0][e]}function uv(t,e){zk(),this.c=MD(t,\"Edit Text\",this),this.e=e,z_(this)}function Mh(t){this.d=t,this.b=this.d.a.entries(),this.a=this.b.next()}function Qv(){this.a=eP(\"/resources/forcefield/mmff94/covrad.csv\")}function ov(){this.a=eP(\"/resources/forcefield/mmff94/vanderwaals.csv\")}function aN(){throw new Error(\"drug likeness must be assessed first\")}function r8(t){if(t<0)throw At(new v7(\"Negative array size: \"+t))}function Ki(t){ET(),RI(this,Jt(V(q0(t,24),ui)),Jt(V(t,ui)))}function z9(t){J1(),Rv.call(this,t?t.M:256,t?t.N:256),t&&ff(t,this)}function tO(t){var e,A;return A=W5(new D7,Ln((e=t,Ou(),e))),new aP(A)}function eO(t,e){var A;return A=OQ(t,e,null),A?new aP(A):null}function Dn(t,e){var A=t.Jc(),n=A.createCheckBox(e);return new l7(n)}function Uv(t,e){var A;return A=new P7,A.c=e,ut(t,15),vp(A,t,!0),A.b.a}function Zn(t){var e,A;e=Tm(t);do A=e,NW(t),e=Tm(t);while(A!=e);return e}function yL(t){var e;for(e=t.length-1;e>=0&&(t[e]|0)==0;--e);return e}function Vh(t){return t.j&&(t.backingJsObject!==Rp&&t.jc(),t.g=null),t}function Lv(t){t.cb&&(ff(t.cb,t.V),t.I=t.bb?new us(t.bb):null)}function AO(t,e){return t.a=(t.a+e.a)/2,t.b=(t.b+e.b)/2,t.c=(t.c+e.c)/2,t}function un(t,e){if(!e||e.q==0){t.H=null;return}t.H=e,t.L=!1,ut(t.H,1)}function lL(t,e){return e[0]!=-1&&e[3]!=-1?IQ(t,e):F_(t.o,t,e)}function nO(t,e){var A;return A=t.a.get(e),A??c(DP,A0,1,0,5,1)}function Eh(t,e){var A;return e.c.ld(QG(t,e.d.pc(),(A=new Xw(e),A)))}function sv(t,e){var A;t.b&&(G1(t),A=new $m(t._,t.V,e),Ax(A,new pw(t)))}function q1(t,e){var A;A=e.j,(A&t.J)==0&&(sL(t._,new dd(t,A,e)),t.J|=A)}function hL(t,e,A){var n,P;n=e>>4,P=2*(e&15),t.a[n]&=~(3<<P),t.a[n]|=A<<P}function TL(t){var e,A,n;return e=t&x0,A=t>>22&x0,n=t<0?tn:0,S0(e,A,n)}function yv(t,e,A){var n=t.Cc(),P=n.createImage(e,A);return new _o(P)}function PO(t,e){_A(),e=e||{};var A=new t3(e);return A.parseMolecule(t,e)}function Ir(t,e){return e==0||t.e==0?t:e>0?Ym(t,e):$b(t,-e)}function Sh(t,e){return e==0||t.e==0?t:e>0?$b(t,e):Ym(t,-e)}function lv(t,e){var A,n;return A=e.ed(),n=Gr(t,A),!!n&&Y8(n.d,e.fd())}function Y9(t,e){var A,n;return A=(L1(t),t),n=(L1(e),e),A==n?0:A<n?-1:1}function rO(t){var e,A;return e=t.c.e.length,A=t.c.e.length,A<e?-1:A>e?1:0}function iO(t){var e,A;return e=t.c.e.length,A=t.c.e.length,e<A?-1:e>A?1:0}function cL(t){Tu(this),IU(t>=0,\"Initial capacity must not be negative\")}function wL(t,e,A){this.b=t,this.d=e,this.e=A,this.c=this.d+(\"\"+this.e)}function hv(t){this.b=eP(\"/resources/forcefield/mmff94/stbn.csv\"),this.a=t}function Tv(t){this.b=eP(\"/resources/forcefield/mmff94/bond.csv\"),this.a=t}function gL(){throw new Error(\"static resources must be registered first\")}function cv(t){var e;return!!(t.r&&(e=AG(t.r),WR(t,e)))}function fO(t){t.eb=w.Math.max(t.eb,4),e1(t.k),q1(t,new S1(t,1,!1))}function dL(t,e){t.eb=w.Math.max(t.eb,e),e1(t.k),q1(t,new S1(t,1,!0))}function DO(t,e){return w.Math.pow(10,w.Math.log10(2e3)*t/(e-1)-1)}function BL(t,e){return H8(e)?e==null?r5(t.a,null):VF(t.c,e):r5(t.a,e)}function wv(t,e){return t.a?J(t.a,t.b):t.a=new Fn(t.d),Fg(t.a,e),t}function vL(t,e,A,n){var P;return P=c(F,k,6,e,15,1),OY(P,t,e,A,n),P}function FL(t,e){var A;return A=c(F,k,6,e,15,1),sA(t,0,A,0,t.length),A}function gv(t,e){var A;dh(e),A=e/31|0,Gx(t.a,A),t.a[A]=t.a[A]|0|1<<e%31}function xD(t){var e;return e=(l2(),xA)[t<xA.length?t:6],e*(t==1,.9)}function dv(t,e){var A,n;return n=t.j.k[e],A=t.j.j[e],n==0?t.b:n==1?A:t.a+A}function Ge(t,e,A,n){n?t.G[e]|=A:t.G[e]&=~A,t.T=0,n&&A!=0&&(t.K=!0)}function Te(t,e,A,n,P,r){var i=t.Jc(),f=e.Fc();return i.add(f,A,n,P,r)}function qh(t,e,A,n,P){pr.call(this,e),this.c=AZ(this,t,n,e,A),this.b=P}function mL(t,e,A,n){var P;return P=c(F,k,6,e+1,15,1),JW(P,t,e,A,n),P}function c(t,e,A,n,P,r){var i;return i=yk(P,n),P!=10&&B(d(t,r),e,A,P,i),i}function kL(t,e){var A;for(A=t-e;A<k6;)A+=F0;for(;A>U1;)A-=F0;return A}function Bv(){return z1(),\"\"+null.wd(),null}function LA(t,e){var A;return A=(ve(e,t.a.length),t.a[e]),t.a.splice(e,1),A}function G1(t){!t.cb&&(t.cb=new X3),ff(t.V,t.cb),t.bb=t.I?new us(t.I):null}function uO(t,e){try{t.c=on(e)}catch(A){if(A=a1(A),!Xt(A,40))throw At(A)}}function Ct(t,e,A){if(t<0||e>A||e<t)throw At(new U3(YQ+t+o6+e+pp+A))}function QO(t){if(!t)throw At(new rU(\"Unable to add element to queue\"))}function Ou(){Ou=d1,new Mg,new l3(\"ISO-LATIN-1\"),new l3(\"ISO-8859-1\")}function vv(){vv=d1,sc=B(d(OA,1),te,6,14,[0,1,3,7,15,31,63,127])}function bL(t,e,A,n){mQ(),this.a=(n&255)<<24|(t&255)<<16|(e&255)<<8|A&255}function ce(t,e,A,n){t.u[e]&=-8,A!=3&&(t.u[e]&=gy),t.u[e]|=A,n&&(t.u[e]|=4)}function oO(t,e){return t.a[e]>-1?t.a[e]:t.C[e]==1?x$(t,e):D6(t,e)}function Fv(t,e){return e<t.g&&(E8(t.p,e)||t.H[e]==8)?0:t.H[e]&127}function mv(t,e){return e<t.g&&(E8(t.p,e)||t.H[e]==8)?0:t.H[e]&127}function kv(t,e){var A;return A=new Zo,A.c=!0,A.d=e.fd(),Cj(t,e.ed(),A)}function ND(t,e){var A;return A=TA(0,e,0,t.a.length,!0,t),A>=0&&t.a[A][7]>0}function X8(t,e){var A;return A=xr(t,e,0),A==-1?!1:(LA(t,A),!0)}function RL(t){var e;return e=-1,t.a!=-2?(e=t.a,t.a=-2):e=t.b.Pc(),e}function UO(t){var e;for(ut(t,15),e=0;e<t.q;e++)(t.u[e]&3)!=0&&Me(t,e,1,0)}function Gu(t,e){var A;for(A=e;A<t.length;A++)if(t[A]==62)return A;return-1}function Ju(t,e,A){var n=t.Jc(),P=n.createTextField(e,A);return new c7(P)}function bv(t,e){return Jv(e)!=10&&B($L(e),e.ud,e.__elementTypeId$,Jv(e),t),t}function Rv(t,e){this.M=w.Math.max(1,t),this.N=w.Math.max(1,e),RR(this)}function OD(t){this.b=c(Ut,Tt,6,t,15,1),this.c=c(Ut,Tt,6,t,15,1),this.a=0}function Ih(t){this.e=t,this.d=c(F,k,6,0,15,1),this.c=c(F,k,6,0,15,1)}function xh(t){this.e=t,this.b=this.e.a.entries(),this.a=c(DP,A0,1,0,5,1)}function jL(t,e){TU.call(this,t,e),this.a=c(IPt,A0,122,2,0,1),this.b=!0}function jv(t,e){Rm(),this.d=e,this.i=new Pn(t),this.g=new br,this.b=new br}function i8(){this.g=new f1,this.f=new f1,this.a=new f1,this.d=-1,this.c=!1}function pv(t,e,A){this.b=w.Math.max(t,e),this.c=w.Math.min(t,e),this.a=A}function Cv(){this.b=c(Ut,Tt,6,64,15,1),this.c=c(Ut,Tt,6,64,15,1),this.a=0}function Hv(t){this.b=eP(\"/resources/forcefield/mmff94/angle.csv\"),this.a=t}function Mv(){this.a=eP(\"/resources/forcefield/mmff94/herschbachlaurie.csv\")}function LO(t){return at(n9,typeof t)||id(t,w.java.lang.Number$impl)}function Vv(t){return t==5||t==6||t==7||t==8||t==15||t==16||t==33||t==34}function sO(t,e){var A;return A=t.C[e],A==3||A==11||A==19||A==37||A==55||A==87}function yO(t,e){var A;return A=t.C[e],A==4||A==12||A==20||A==38||A==56||A==88}function lO(t,e){var A;for(A=fl[e]/2;t<-A;)t+=F0;for(;t>=A;)t-=fl[e];return t}function f8(t,e){var A;for(A=0;A<t.e.length;A++)if(e==t.e[A])return A;return-1}function xr(t,e,A){for(;A<t.a.length;++A)if(Y8(e,t.a[A]))return A;return-1}function Nh(t){var e;for(e=0;e<t.q;e++)if(t.J[e].c!=0)return!0;return!1}function hO(t){return G(t,0)==0&&2<Eo.length?Eo[2]:new ef(t,2)}function Ev(t){return t.d.a.length<2?null:new _b(N(t.d,0),N(t.d,1))}function pL(t){return t.a.d!=t.c?lg(t.a,t.b.value[0]):t.b.value[1]}function Sv(t,e,A){if(e==null||A==null)throw At(new dr);return q9(t.e,e,A)}function TO(t,e,A,n,P){Ct(e,A,t.length),Ct(P,P+(A-e),n.length),Sx(t,e,A,n,P)}function qv(t,e,A,n){return L1(t),L1(e),L1(A),L1(n),new Mu(t,e,A,new fw)}function Xi(t,e,A,n){var P;n=(yU(),n||Bl),P=t.slice(e,A),WT(P,t,e,A,-e,n)}function Z8(t,e,A,n,P,r,i){i.a=e.a+P,i.c=e.c+r,i.b=e.b+P,i.d=e.d+r,Mn(t,i,A,n)}function Iv(t,e,A,n,P,r){this.c=t,this.e=e,this.d=A,this.f=n,this.b=P,this.a=r}function Je(t,e){J1();var A;for(A=t-e;A<k6;)A+=F0;for(;A>U1;)A-=F0;return A}function cO(t,e){var A,n;for(n=new f1,A=0;A<e.r;A++)mt(n,new sB(t,e,A));return n}function Oh(t,e){var A,n;for(n=new Zt(t.a);n.a<n.c.a.length;)A=$t(n),A.mc(e)}function wO(t,e){var A,n;for(n=new Zt(t.a);n.a<n.c.a.length;)A=$t(n),A.mc(e)}function Zi(t,e){var A;return e==null||e.length==0?null:BT(t,Ln((A=e,c0(),A)))}function gO(t){var e,A;return new aP((e=new i8,A=new Pn(new Rr(t)),pY(e,A),e))}function dO(t,e){return uh(LG(Ld(t,new Nl),sd(e,new Nl),new Uw),new Lw)}function Gh(t,e){return new gP(t.b*e.c-t.c*e.b,t.c*e.a-t.a*e.c,t.a*e.b-t.b*e.a)}function CL(t,e,A){var n;for(n=0;n<t.q;n++)t.J[n].a+=e,t.J[n].b+=A;t.U+=e,t.V+=A}function xv(t,e){return ut(t,7),t.o[e]==2&&t.j[e]==2?Qb(t,e,!1):Ns(t,e,!1)}function BO(t,e){e&&(t.eb=w.Math.max(t.eb,1),e1(t.k),q1(t,new S1(t,1,!0)))}function vO(t,e){e&&(t.eb=w.Math.max(t.eb,1),e1(t.k),q1(t,new S1(t,1,!0)))}function FO(t,e){t.L||(H$(t,e),t.L=!0),t.r||(E_(t,e),fa(t),cY(t),t.r=!0)}function Nv(t,e,A){e8(t.g,A,e),t.b[e.a]=!0,e.g!=-1&&(t.c[u1(t.k,e.a,e.g)]=!0)}function HL(t){return t.v<<=t.t,(!t.r||t.v!=63)&&(t.v+=64),Oe(t.u,t.v&c1),t.u.a}function Ov(t,e){var A;for(A=0;A<e.length;A++)if(e[A]==t)return!0;return!1}function p0(t){var e;return o0(t)&&(e=0-t,!isNaN(e))?e:pn(Z9(t))}function mO(t,e){try{t.i[0].b=on(e)}catch(A){if(A=a1(A),!Xt(A,40))throw At(A)}}function kO(t,e){try{t.i[0].a=on(e)}catch(A){if(A=a1(A),!Xt(A,40))throw At(A)}}function Jh(t){var e;return e=t.b.a.length==0?null:N(t.b,0),e!=null&&_h(t,0),e}function zh(t,e,A,n){if(A==null||A.length==0){xL(e),e.d=null;return}mp(t,e,A,n,0)}function bO(t){return RT(t,(K9(),ec))<0?-SI(Z9(t)):t.l+t.m*iP+t.h*fP}function RO(t,e){return new xe(t.b*e.c-t.c*e.b,-(t.a*e.c-t.c*e.a),t.a*e.b-t.b*e.a)}function Gv(t,e){this.a=j0(t.b[e][5]),this.b=j0(t.b[e][6]),this.c=j0(t.b[e][7])}function Wi(t,e){return(t.F[e]&768)>>8!=1&&(t.F[e]&768)>>8!=2?-1:(t.F[e]&hn)>>10}function Yh(t,e){return t.o[e]==2&&t.j[e]==2&&t.n[e][0]==2&&t.n[e][1]==2&&t.C[e]<=7}function jO(t){return t==1||t>=5&&t<=9||t>=14&&t<=17||t>=32&&t<=35||t>=52&&t<=53}function Jv(t){return t.__elementTypeCategory$==null?10:t.__elementTypeCategory$}function pO(t){var e,A;for(A=t.a,e=0;e<t.b.length;e++)A+=t.b[e]*F4[t.c[e]];return A}function CO(t){var e,A;for(A=t.d,e=0;e<t.b.length;e++)A+=t.b[e]*m4[t.c[e]];return A}function HO(t){var e,A,n;for(e=MF(t),n=0,A=0;A<NP.length;A++)n+=e[A]*NP[A];return n}function MO(t,e){var A,n;for(A=0,n=0;n<t.b;n++)t.e[n][e]&&t.c[n]==-3&&++A;return A}function Kh(t,e,A){var n;for(n=N(t.k,e).length;A>=n;)A-=n;for(;A<0;)A+=n;return A}function zv(t,e){return t.V.q!=0&&t.r?XN(t.r,e?Ob(t.V):Kn(t.V)):!1}function VO(t){var e,A;if(t.a){A=null;do e=t.a,t.a=null,A=Wk(e,A);while(t.a);t.a=A}}function EO(t){var e,A;if(t.b){A=null;do e=t.b,t.b=null,A=Wk(e,A);while(t.b);t.b=A}}function SO(t,e){if(t.N!=0){t.C!=-4&&(t.C=-4,t.Bb(t.N));return}t.C=-5,t.P=e,t.Bb(e)}function qO(t,e,A,n,P){return L1(t),L1(e),L1(A),L1(n),L1(P),new Mu(t,e,A,n)}function ML(t,e){return e?(ut(t,1),wP(t,t.f,t.g,gn)):wP(t,t.q,t.r,gn)}function IO(){return er(),B(d(SPt,1),Ye,71,0,[SE,HE,CE,ME,dl,VE,se,EE])}function Xh(){Xh=d1,Uc=new Lu(\"All\",0),IE=new Eg,xE=new Ng,NE=new Vg}function K9(){K9=d1,a4=S0(x0,x0,524287),BE=S0(0,0,h8),tc=TL(1),TL(2),ec=TL(0)}function GD(){this.i=c(K4,A0,56,2,0,1),this.i[0]=new cr,this.i[1]=new cr,this.a=0}function xO(t){this.e=\"\",this.c=9,this.d=0,this.i=c(K4,A0,56,1,0,1),this.i[0]=t}function VL(t,e,A){op.call(this,t),this.b=e,this.c=G(A,0)==0?new ZD:new Ki(A)}function Yv(){YP.call(this,\"invalid JS RegExp: RGROUPS=\\\\((\\\\d+) (\\\\d+).*\\\\)\")}function NO(t,e){try{t.d=Q1(e,P1,Et)}catch(A){if(A=a1(A),!Xt(A,40))throw At(A)}}function zu(t,e){var A,n;for(n=su(t.b,e),A=n.length;A<10;A++)Oe(t.a,32);J(t.a,n)}function Kv(t,e){var A,n;for(n=su(t.a,e),A=n.length;A<10;A++)Oe(t.b,32);J(t.b,n)}function Xv(t,e){var A,n;for(A=t.o[e],n=0;n<t.j[e];n++)tA(t,t.i[e][n])&&++A;return A}function X9(t,e,A){var n,P;for(n=0,P=0;P<t.j[e];P++)X(t,t.i[e][P])==A&&++n;return n}function Nr(t,e){var A;for(A=0;A<t.e.length;A++)if(e==t.e[A])return!0;return!1}function Zv(t,e,A,n){var P;return P=0,e&&(P|=1),A&&(P|=2),n&&(P|=4),ku(new lD(t.a,P))}function Wv(t,e,A,n,P){var r;return r=Nb(t,e,A,n,P),r<0?Kb(t,e,A,n,P):j0(t.b[r][5])}function OO(t,e){var A;return dh(e),A=e/31|0,A<t.a.length&&((t.a[A]|0)>>>e%31&1)==1}function EL(t,e){var A,n;if(A=0,t.K)for(n=0;n<t.j[e];n++)Qe(t,t.i[e][n])&&++A;return A}function e0(t,e){var A,n;for(A=t.j[e],n=0;n<t.j[e];n++)t.C[t.i[e][n]]==1&&--A;return A}function Zh(t,e){var A,n,P,r;return n=e/2|0,P=t>=n,P&&(t-=n),r=e/32,A=r*t/(n-t),P?-A:A}function GO(t){var e,A;return e=c(F,k,6,t.q,15,1),A=nr(t,e,!1,!1),fj(t,e,A)}function Yu(t,e,A){if(!t.c){if(t.e.a.length==4){t.c=!0;return}mt(t.e,new Y3(t,e,A))}}function JO(t,e,A){t.a==null&&(t.a=c(E,q,6,t.R.f,15,1),Vq(t.a)),t.a[e]=A<<24>>24}function EA(t,e){return(t.u[e]&F1)>>18!=1&&(t.u[e]&F1)>>18!=2?-1:(t.u[e]&jA)>>20}function Wn(t,e){var A;return t.t==null||t.t[e]==null?null:fn((A=t.t[e],c0(),A))}function Ku(t){return J1(),t>=0&&t<L9.length&&L9[t]!=null?L9[t]:t>=171&&t<=190?qV:IV}function _v(t){return t!=null&&(typeof t===iy||typeof t==\"function\")&&t.vd!==AD}function JD(t,e){IU(t>=0,\"Digits < 0\"),nh(e,\"null RoundingMode\"),this.a=t,this.b=e}function SL(t,e,A,n,P,r){pr.call(this,n),this.e=t,this.b=e,this.c=A,this.a=P,this.d=r}function $v(t,e,A,n,P,r,i,f){this.e=t,this.a=e,this.b=A,this.f=n,this.d=i,this.c=P*r/f}function zO(t,e,A){var n,P;for(P=0;P<t.j[A];P++)if(n=t.i[A][P],n!=e)return n;return-1}function qL(t,e,A){var n,P;for(n=0,P=0;P<Ht(t.f,A);P++)Nr(e,_(t.f,A,P))&&++n;return n}function YO(t){var e,A;for(ut(t,7),e=0,A=0;A<t.p.j.a.length;A++)D3(t.p,A)&&++e;return e}function av(t,e){var A;if(t.i!=null)for(A=0;A<t.i.length;A++)t.i[A].a*=e,t.i[A].b*=e}function tF(t,e){var A;if(t){e.k=t;var n=hN(e);if(!n){co[t]=[e];return}n.td=e}}function Fe(t,e,A){var n=function(){return t.apply(n,arguments)};return e.apply(n,A),n}function KO(t,e,A){var n;return n=LK(t,e,A),n&&A==386&&(ut(t,7),n=n&(t.F[e]&128)==0),n}function IL(t){var e;return e=new uT,e.n=\"Class$\"+(t?\"S\"+t:\"\"+e.i),e.b=e.n,e.j=e.n,e}function XO(t){var e,A;if(t.K)return 0;for(ut(t,1),A=0,e=0;e<t.f;e++)A+=It(t,e);return A}function ZO(t,e){var A;for(A=0;A<t.j[e];A++)if(t.s[t.i[e][A]]<0)return!0;return!1}function eF(t,e){var A;for(A=0;A<t.j[e];A++)if(t.s[t.i[e][A]]>0)return!0;return!1}function WO(t,e){var A;return A=t.C[e]<L9.length?L9[t.C[e]]:null,A==null?6:A[A.length-1]}function xL(t){t.q=0,t.r=0,t.K=!1,t.L=!1,t.I=0,t.v=null,t.t=null,t.P=null,t.T=0}function AF(t){vu(t.c>=0),Dz(t.d,t.c)<0&&(t.a=t.a-1&t.d.a.length-1,t.b=t.d.c),t.c=-1}function _O(t,e){var A,n,P,r;if(t.e!=null)for(n=t.e,P=0,r=n.length;P<r;++P)A=n[P],A.J=e}function nF(t,e,A){var n,P,r;for(r=t.a.length-1,P=t.b,n=0;n<A;P=P+1&r,++n)e[n]=t.a[P]}function Xu(t,e,A,n){return vt(w.Math.round((t.a[e]*t.c[e]+n*t.c[A])/(t.c[e]+t.c[A])))}function h1(t,e,A,n){n?t.B[e]=Y(t.B[e],A):t.B[e]=V(t.B[e],Gn(A)),t.T=0,t.K=!0}function $O(t,e,A,n){this.d=e,this.a=A,this.b=n,this.e=U2(t.d,e,A,n),this.c=e$(t.d,e,A,n)}function PF(t,e){t&&(this.k=c(Ur,U9,26,1,0,1),this.k[0]=t),this.c=0,this.g=e,Fs(this)}function rF(t,e){return t.b!=e.b?t.b>e.b?-1:1:t.c!=e.c?t.c>e.c?-1:1:0}function aO(t,e){return t.d!=e.d?t.d<e.d?-1:1:t.e!=e.e?t.e<e.e?-1:1:0}function iF(t,e){var A;for(A=0;A<t.j[e];A++)if(b1(t,t.i[e][A])<0)return!0;return!1}function tG(t){var e,A;for(A=0,e=0;e<t.a.q;e++)(X(t.a,e)==7||X(t.a,e)==8)&&++A;return A}function NL(t){var e,A;if(t==0)return 32;for(A=0,e=1;(e&t)==0;e<<=1)++A;return A}function eG(t){var e,A;return e=yL(t.a),e==-1?0:(A=t.a[e]|0,e*31+(32-$r(A)))}function AG(t){var e=t.Gc(),A=e.pasteMolecule();return A?A.vc():null}function nG(){a7();for(var t=Al,e=0;e<arguments.length;e++)t.push(arguments[e])}function PG(t,e,A){var n;if(t.i!=null)for(n=0;n<t.i.length;n++)t.i[n].a+=e,t.i[n].b+=A}function Wh(t,e,A){var n;wa(e,A,(t.e&12)!=0),n=m5(t,e.b[0],e.b[1],0),mF(t,e.b[0],e.b[1],n)}function _h(t,e){var A;A=LA(t.b,t.b.a.length-1),e<t.b.a.length&&(qr(t.b,e,A),Lb(t,e))}function rG(t,e,A){var n,P;for(t.J&=~e,P=new Zt(t.S);P.a<P.c.a.length;)n=$t(P),n.mc(A)}function fF(t,e){var A,n;t.b&&(G1(t),n=(t.U&4)!=0,A=new Om(t._,t.V,e,n),ex(A,new jw(t)))}function DF(t){var e;t.a=!1,e=new _2(PB(t)),jN(e,0,0,t.b.o,t.b.e),F$(t.b,new _2(PB(t)))}function iG(t,e){Xm(),this.o=t,this.n=G(t,0)==0?new ZD:new Ki(t),this.r=new Vd(t,e)}function _n(t,e){for(var A in e)e[A].configurable=!0;Object.defineProperties(t,e)}function fG(t,e){typeof window===iy&&typeof window.$gwt===iy&&(window.$gwt[t]=e)}function DG(t,e){var A;for(A=0;A<t.j[e];A++)if(X(t,t.i[e][A])!=6)return!0;return!1}function uF(t,e){var A;for(Kz(t),A=0;A<t.b.length;A++)if(e[t.b[A]])return!0;return!1}function QF(t,e,A){var n,P;for(P=N(t.j,e),n=0;n<P.length;n++)if(A==P[n])return n;return-1}function uG(t,e,A){var n,P;for(P=N(t.k,e),n=0;n<P.length;n++)if(A==P[n])return n;return-1}function QG(t,e,A){var n;return HG(t),t.b=!0,n=new dw,n.a=e,iI(t.a,new og(n,A)),n.a}function Zu(t,e){var A,n;return A=1-e,n=t.a[A],t.a[A]=n.a[e],n.a[e]=t,t.b=!0,n.b=!1,n}function OL(t){var e;return e=t.e[t.d++]-48,Xn(t.e[t.d]&c1)&&(e=10*e+(t.e[t.d++]-48)),e}function oF(t){var e;return e=c(Ut,Tt,6,2,15,1),e[0]=dn*(t/17|0)+F8,e[1]=dn*(t%17)+F8,e}function W8(t,e){var A;return A=c(F,k,6,e,15,1),sA(t,0,A,0,w.Math.min(t.length,e)),A}function oG(t,e){var A;return A=c(OA,te,6,e,14,1),sA(t,0,A,0,w.Math.min(t.length,e)),A}function UG(t,e){var A;for(A=0;A<O(t.k,e);A++)if(!t.b[_(t.k,e,A)])return!0;return!1}function Wu(t,e){var A;for(A=0;A<t.q;A++)w.Math.abs(t.w[A])==w.Math.abs(e)&&(t.w[A]=0)}function _u(t,e,A,n){var P,r;this.a=sn(t,e,A,n),P=A-t,r=n-e,this.b=w.Math.sqrt(P*P+r*r)}function _i(t,e){var A;return A=c(F,k,6,e,15,1),sA(t,0,A,0,w.Math.min(t.length,e)),A}function RP(t,e,A,n){var P,r;return r=t.length,P=w.Math.min(n,r)-A,n5(t,A,e,0,P,!0),e}function LG(t,e,A){return qv(A,new Cd(t,e),new cw,B(d(vl,1),Ye,95,0,[(DQ(),Io)]))}function UF(){UF=d1,new JD(34,(er(),se)),new JD(7,se),new JD(16,se),new JD(0,dl)}function jn(t){return Rs(t,26)*14901161193847656e-24+Rs(t,27)*11102230246251565e-32}function sG(t){return t>=21&&t<=30||t>=39&&t<=48||t==57||t>=72&&t<=80||t==89||t>=104&&t<=112}function LF(t){return vt(w.Math.round((de==-1&&(de=globalThis.devicePixelRatio||1),de*t)))}function GL(t){O3(this),Vh(this),this.backingJsObject=t,yb(this,t),this.f=t==null?P9:XD(t)}function me(t){return t.J==null&&(Di(t),(t.Q&N1)==0&&(ta(t),Fj(t,1),Fj(t,2)),wtt(t)),t.J}function sF(t,e){var A,n,P;for(L1(e),A=!1,P=e.Tb();P.bd();)n=P.cd(),A=A|t.add(n);return A}function JL(t,e){var A;return A=c(Pt,ft,6,e,16,1),sA(t,0,A,0,w.Math.min(t.length,e)),A}function $i(t,e){var A;for(A=0;A<O(t.j,e);A++)if(_0(t.j,_(t.j,e,A)))return!0;return!1}function zL(t,e,A){var n;for(n=0;n<t.k.a.length;n++)if(tf(t,n,e)&&tf(t,n,A))return n;return-1}function u1(t,e,A){var n;for(n=0;n<t.i[e].length;n++)if(t.i[e][n]==A)return t.k[e][n];return-1}function yF(t,e,A){var n,P,r;for(P=0,r=0;r<t.j[e];r++)n=t.i[e][r],n!=A&&t.j[n]>2&&++P;return P}function lF(t,e,A){var n,P,r;for(n=0,P=0;P<A;P++)r=e[P],t[P]=r<<1|n,n=r>>>31;n!=0&&(t[A]=n)}function yG(t,e){var A,n;if(t.g)for(n=new Zt(t.g);n.a<n.c.a.length;)A=$t(n),A.Ib(e,t.p)}function hF(t,e){var A;(!t.q||!e.q)&&(A=new EB(t.o),!t.q&&(t.q=VT(A,t)),!e.q&&(e.q=VT(A,e)))}function YL(t,e){var A;return A=os(t.V,z(t.V,0,e)),A!=-1&&qe(t.V,A)!=1&&qe(t.V,A)!=2&&(A=-1),A}function TF(t){var e,A;for(ut(t,31),A=0,e=0;e<t.f;e++)(t.u[e]&3)!=0&&(t.u[e]&4)==0&&++A;return A}function lG(t){var e,A;if(e=t.q,t.t)for(A=0;A<t.q;A++)t.e[A]&&--e;return t.i>0&&e>t.i&&(e=t.i),e}function cF(t){var e;if(t.b==-2){if(t.e==0)e=-1;else for(e=0;t.a[e]==0;e++);t.b=e}return t.b}function hG(t){var e={};return t!=null&&(e=t&&t.prototype,!e&&(e=co[t])),Object.create(e)}function KL(t,e){var A=t.Kc(),n=A.getBounds(e);return new QA(n.x,n.y,n.width,n.height)}function XL(t,e,A,n,P,r,i,f,D,Q){var o=t.Kc(),L=e.pc();return o.drawImage(L,A,n,P,r,i,f,D,Q)}function ZL(t,e,A,n,P,r){this.f=e,this.d=A,this.a=n,this.b=P,this.c=r,this.e=NZ(t.k,e,A,n,P,r)}function wF(t){this.f=t,this.e=new Mh(this.f.c),this.a=this.e,this.b=PT(this),this.d=this.f.b}function $h(t,e,A,n){pr.call(this,t),this.a=c(Ut,Tt,6,1,15,1),this.a[0]=A,this.b=e,this.c=n}function Or(t,e){var A;return A=c(F,k,6,2,15,1),t>e?(A[0]=t,A[1]=e):(A[0]=e,A[1]=t),A}function ah(t,e){var A,n;for(A=0,n=0;n<t.j[e];n++)tA(t,t.i[e][n])&&!gu(t,t.k[e][n])&&++A;return A}function TG(t){var e,A,n;for(A=0,e=-1,n=0;n<t.a.length;n++)A<t.a[n]&&(A=t.a[n],e=n);return e}function cG(t){var e,A;for(A=!0,e=0;e<t.i.f;e++)if(t.o[e]!=0&&!t.e[e]){A=!1;break}return A}function wG(t){var e;for(e=0;e<t.o.q;e++)if((t.a==null?NaN:t.a[e])>2.72)return!1;return!0}function gG(t){var e;for(e=0;e<t.g;e++)if(t.H[e]==8)return Bf(new c9(t),null,!1);return!1}function $u(t,e){var A,n;for(n=0,A=0;A<t.r;A++)(t.D[0][A]==e||t.D[1][A]==e)&&(n+=dt(t,A));return n}function gF(t){var e,A,n;for(n=0,A=t.Tb();A.bd();)e=A.cd(),n=n+(e!=null?a8(e):0),n=n|0;return n}function tT(t,e){var A,n;for(n=t.o.Fc(),n.removeAllItems(),A=0;A<16;A++)Nt(t.o,\"\"+(e+A));return 16}function pn(t){var e;return e=t.h,e==0?t.l+t.m*iP:e==tn?t.l+t.m*iP-fP:t}function dF(t){return t.a<54?t.f<0?-1:t.f>0?1:0:(!t.c&&(t.c=kP(M1(t.f))),t.c).e}function M1(t){return j2<t&&t<fP?t<0?w.Math.ceil(t):w.Math.floor(t):pn(ZX(t))}function dG(t,e,A){var n;return n=N(t.I,0),bQ(n,kt(t.V,e),pt(t.V,e))==bQ(n,kt(t.V,A),pt(t.V,A))}function BF(t,e,A){var n,P,r;n=vt(X6*M8(t.V)),P=vt(kt(t.V,A)),r=vt(pt(t.V,A)),nL(e,P-n,r-n,2*n)}function vF(t,e,A,n){var P;P=t.a.length,A>P?A=P:Gt(e,A+1),t.a=oA(t.a,0,e)+(\"\"+n)+HD(t.a,A)}function Qn(t,e){var A;A=t.a.length,e<A?t.a=oA(t.a,0,e):e>A&&(t.a+=S8(c(lr,te,6,e-A,15,1)))}function BG(t,e){var A;this.c=t,A=new f1,kT(t,A,e,t.b,null,!1,null,!1),this.a=new hh(A,0)}function FF(t,e){pr.call(this,t),this.a=c(Ut,Tt,6,2,15,1),this.a[0]=e,this.a[1]=Ve,this.c=-1}function vG(t){if(L1(t),t.length==0)throw At(new XP(\"Zero length BigInteger\"));lW(this,t)}function FG(t,e,A,n){n&&e!=-1&&(t.eb=w.Math.max(t.eb,1),e1(t.k),q1(t,new S1(t,1,!0))),A.nc()}function mF(t,e,A,n){var P;P=w.Math.min(xr(t.d,e,0),xr(t.d,A,0)),e8(t.d,P,n),X8(t.d,e),X8(t.d,A)}function kF(t,e){return w.Math.sqrt((t.a-e.a)*(t.a-e.a)+(t.b-e.b)*(t.b-e.b)+(t.c-e.c)*(t.c-e.c))}function eT(t,e){return w.Math.sqrt((e.a-t.a)*(e.a-t.a)+(e.b-t.b)*(e.b-t.b)+(e.c-t.c)*(e.c-t.c))}function mG(t,e){return t.C[e]==1&&t.A[e]==0&&t.s[e]==0&&(t.u[e]&d8)==0&&(t.t==null||t.t[e]==null)}function AT(t,e){return!!($1(t.b,e)==1&&X(t.b,e)<10||vn(t.b,e)||SP(t.b,e,!0))}function kG(t,e,A){var n;for(n=0;n<t.j.g.length;n++)if(t.e[e][n]&&t.e[A][n])return!0;return!1}function bG(t,e){var A;for(A=0;A<t.b;A++)if(t.e[A][e]&&t.c[A]==-3)return A<t.a?1:A<t.b?2:0;return-1}function bF(t,e){var A,n;for(A=0,n=t.size();A<n;++A)if(Y8(e,t.getAtIndex(A)))return A;return-1}function RG(t,e){var A,n,P;for(P=(ut(t,7),t.p),n=0,A=0;A<P.j.a.length;A++)QF(P,A,e)>=0&&++n;return n}function pe(t){var e,A,n,P;return P=t,n=0,P<0&&(P+=fP,n=tn),A=vt(P/iP),e=vt(P-A*iP),S0(e,A,n)}function RF(t,e){return e>=t.f?0:e<t.f&&r0(t.p,e)&&t.C[e]==6&&t.s[e]!=0?1:t.o[e]}function jF(t){return ut(t,15),!t.d&&(t.f<2||!Ds(t.J[0],t.J[1]))&&(t.d=new FA(t)),t.d?me(t.d):null}function jG(t){return ut(t,15),!t.d&&(t.f<2||!Ds(t.J[0],t.J[1]))&&(t.d=new FA(t)),t.d?k7(t.d):null}function pF(t,e){var A,n;for(n=e.Tb();n.bd();)if(A=n.cd(),oh(t,A.fd()))return!0;return!1}function pG(t){var e,A,n;for(n=1,A=t.Tb();A.bd();)e=A.cd(),n=31*n+(e!=null?a8(e):0),n=n|0;return n}function nT(t){var e;return G(t,0)<0&&(t=Gn(t)),e=Jt(DA(t,32)),64-(e!=0?$r(e):$r(Jt(t))+32)}function a1(t){var e;return Xt(t,27)?t:(e=t&&t.__java$exception,e||(e=new YB(t),void 0),e)}function CG(t){return t==null?!1:t.$implements__java_lang_Cloneable||Array.isArray(t)}function HG(t){if(t.b)throw At(new rU(\"Stream already terminated, can't be modified or used\"))}function au(t,e){t.w!=e&&(t.w==19||e==19?(t.w=e,t.eb=w.Math.max(t.eb,1),e1(t.k)):t.w=e)}function PT(t){return t.a.bd()?!0:t.a!=t.e?!1:(t.a=new xh(t.f.a),t.a.bd())}function CF(t,e){if(e==null)return!1;for(;t.a!=t.b;)if(VP(e,Dm(t)))return!0;return!1}function MG(t){var e;return t<128?(e=(Gd(),Ac)[t],!e&&(e=Ac[t]=new Jl(t)),e):new Jl(t)}function rT(t){var e,A;return e=vt(t.i[1].a-t.i[0].a),A=vt(t.i[1].b-t.i[0].b),w.Math.sqrt(e*e+A*A)}function HF(t,e){var A,n,P;return A=t.l-e.l,n=t.m-e.m+(A>>22),P=t.h-e.h+(n>>22),S0(A&x0,n&x0,P&tn)}function VG(t,e){var A,n,P;return A=t.l+e.l,n=t.m+e.m+(A>>22),P=t.h+e.h+(n>>22),S0(A&x0,n&x0,P&tn)}function EG(t,e,A){var n,P;return e==null?null:Ls(t,Ln((P=e,c0(),P)),A==null?null:Ln((n=A,n)),0)}function SG(t,e){var A;for(A=0;A<t.j.g;A++)t.e[A]&&ps(e,A)&&(Af(t,z(t.j,0,A)),Af(t,z(t.j,1,A)))}function qG(t){var e,A;for(A=0,e=0;e<t.a.q;e++)(X(t.a,e)==7||X(t.a,e)==8)&&vd(t.a,e)>0&&++A;return A}function MF(t){var e,A;for(A=c(F,k,6,NP.length+2,15,1),ut(t,7),e=0;e<t.f;e++)++A[ttt(t,e)];return A}function VF(t,e){var A;return A=t.a.get(e),A===void 0?++t.d:(t.a.delete(e),--t.c,++t.b.b),A}function IG(t){var e;return e=t.a[t.b],e==null?null:(t.a[t.b]=null,t.b=t.b+1&t.a.length-1,e)}function EF(t,e){var A;return e>0?(t[e]+t[e-1])/2:(A=U1+(t[0]+t[t.length-1])/2,A>U1?A-F0:A)}function SF(t,e,A,n){return ytt(n,t,e),A!=null&&(A[0]=n.f[0],A[1]=n.b[0],A[2]=n.b[1],A[3]=n.f[1]),n.d}function sA(t,e,A,n,P){z1(),nh(t,\"src\"),nh(A,\"dest\"),YG(t,e,A,n,P),n5(t,e,A,n,P,!0)}function B(t,e,A,n,P){return P.td=t,P.ud=e,P.vd=AD,P.__elementTypeId$=A,P.__elementTypeCategory$=n,P}function qF(t){return t.n==null&&(t.n=bn(t.e,t.e.length),t.n.sort(Fe(D0.prototype.hd,D0,[]))),t.n}function xG(t){return t.includes(\"ATOMS=(\")?m2:t.includes(\"BONDS=(\")?\"BONDS\":null}function tQ(t,e){var A;for(A=0;A<t.j[e];A++)if(t.n[e][A]==2&&X(t,t.i[e][A])>6)return!0;return!1}function NG(t,e){var A,n;return A=js(t,e),A==-1?-1:(n=t.b.a.length,mt(t.b,e),e8(t.a,A,m1(n)),n)}function OG(t){var e,A,n;for(n=w.Math.max(t.d.length,t.c.length),A=1,e=n-t.a+1;e<=n;e++)A*=e;return A}function IF(t){var e,A;for(A=new Zt(t.U);A.a<A.c.a.length;)e=$t(A),Z1(t,e.a),KI(t,e.b,e.c);Z1(t,t.Q)}function GG(t){_F();var e;e=Yy,(e.startsWith(Ky)||e.startsWith(Xy)||e.startsWith(Zy))&&sY(t,fE)}function Z9(t){var e,A,n;return e=~t.l+1&x0,A=~t.m+(e==0?1:0)&x0,n=~t.h+(e==0&&A==0?1:0)&tn,S0(e,A,n)}function JG(t){var e;if(t<0)return P1;if(t==0)return 0;for(e=wn;(e&t)==0;e>>=1);return e}function jP(t,e){var A,n;return A=e.toArray(),n=A.length,n==0?!1:(jd(t.a,t.a.length,A),!0)}function zG(t,e){var A;for(A=0;A<t.b;A++)if(t.e[A][e]&&t.c[A]==-3)return A<t.a?A:A<t.b?A-t.a:-1;return-1}function xF(t,e,A,n){var P,r;for(r=0;r<O(t.f,A);r++)if(P=_(t.f,A,r),P!=n&&P<e)return!1;return!0}function iT(t,e,A){var n,P,r,i;for(P=e,r=0,i=P.length;r<i;++r)n=P[r],t.f[n&1073741823]=(n&wn)!=0^A?2:1}function YG(t,e,A,n,P){var r,i;if(i=t.length,r=A.length,e<0||n<0||P<0||e+P>i||n+P>r)throw At(new e3)}function ze(t,e,A){var n,P;return n=new jL(e,A),P=new Zo,t.b=PR(t,t.b,n,P),P.b||++t.c,t.b.b=!1,P.d}function NF(t,e,A,n){var P;return Q2(t,e,A,n),yd(t.R)?null:(P=t.R,N3(t.R,t.L),t.R=new tu,P)}function OF(t){var e,A;return A=$r(t.h),A==32?(e=$r(t.m),e==32?$r(t.l)+32:e+20-10):A-12}function KG(t,e){var A,n;for(A=c(H2,F2,29,e,0,1),n=0;n<t.length;n++)t[n]&&(A[n]=new du(t[n]));return A}function XG(t,e){var A;if(t.c!=null){for(A=0;A<t.c.length;A++)if(e==t.c[A]&&t.d[A])return!0}return!1}function fT(t){var e,A;return A=(t[1]+t[0])/2,e=w.Math.abs(t[1]-t[0]),e>U1?A:A<0?A+U1:A-U1}function ZG(t,e){return rr(t)==-1||rr(e)==-1||((rr(t)|rr(e))&1)!=0?3:rr(t)==rr(e)?1:2}function GF(t,e,A){var n;for(n=0;n<t.j[e];n++)if(X(t,t.i[e][n])!=6&&t.i[e][n]!=A)return!0;return!1}function WG(t,e,A){var n,P,r;for(ut(e,1),P=N(t.a,A),n=0;n<t.d.d.a.length;n++)r=k9(t.d,n),jZ(r,e,P);Ai(e)}function _G(t,e,A,n){mt(t.$,new QA(e-t.V,A-t.V,2*t.V,2*t.V)),t.K||mt(t.U,new mu(e,A,oQ(t,n)?-3:t.p[n]))}function Ce(t,e,A){t.a==t.b.length&&(t.b=VD(t.b,2*t.a),t.c=VD(t.c,2*t.a)),t.b[t.a]=e,t.c[t.a]=A,++t.a}function $G(t,e){var A,n;for(A=t.a.length-1,t.c=t.c-1&A;e!=t.c;)n=e+1&A,t.a[e]=t.a[n],e=n;t.a[t.c]=null}function aG(t,e){var A,n;for(A=t.a.length-1;e!=t.b;)n=e-1&A,t.a[e]=t.a[n],e=n;t.a[t.b]=null,t.b=t.b+1&A}function JF(t,e,A){var n;return t.A.d.a.length!=0&&(n=k9(t.A,0),n.a<e)?(tU(t.A,0),n.b):t.pd(A)}function tJ(t,e,A,n,P){var r;return r=D5(t,e),A&&WL(r),P&&(t=Oz(t,e),n?In=Z9(t):In=S0(t.l,t.m,t.h)),r}function eQ(t,e){t.D[0]=W8(t.D[0],e),t.D[1]=W8(t.D[1],e),t.H=W8(t.H,e),t.F=W8(t.F,e),t.G=W8(t.G,e),t.N=e}function WL(t){var e,A,n;e=~t.l+1&x0,A=~t.m+(e==0?1:0)&x0,n=~t.h+(e==0&&A==0?1:0)&tn,t.l=e,t.m=A,t.h=n}function DT(t){var e,A;for(e=0,A=0;A<t.length;A++)e=(e<<5)-e+(Gt(A,t.length),t.charCodeAt(A))|0;return e}function AQ(t,e){var A,n;for(L1(e),n=e.Tb();n.bd();)if(A=n.cd(),!t.contains(A))return!1;return!0}function eJ(t,e){return t.a>e.a?1:t.a<e.a?-1:t.b>e.b?1:t.b<e.b?-1:0}function AJ(t,e){return t.c<e.c?-1:t.c>e.c?1:t.d<e.d?-1:t.d>e.d?1:0}function nJ(t,e){return qA(e,t.c)!=0?1:(t.j=OZ(e),t.j==null?lJ(e)?3:4:t.j.length==0?3:2)}function zD(t,e,A,n){var P;return(t.G&1)!=0?!1:(P=N(t.$,n),e>P.c&&e<P.c+P.b&&A>P.d&&A<P.d+P.a)}function Gr(t,e){var A,n,P;for(P=t.b;P;){if(A=t.a.Rb(e,P.c),A==0)return P;n=A<0?0:1,P=P.a[n]}return null}function zF(t,e){bp();var A,n;for(n=e-t,A=0;A<Pl[t].length;A++)if(Pl[t][A].b==n)return Pl[t][A].a;return NaN}function PJ(t){Hs();var e,A;for(ut(t,1),A=0,e=0;e<t.q;e++)t.C[e]==1?++A:A+=t.e[e]-t.j[e]+It(t,e);return A}function YF(t,e,A,n){var P,r,i;for(P=c(E,q,6,n,15,1),i=TJ(t.a,P),r=0;r<i;r++)e[A+r]=P[r]&c1;return i}function KF(t,e){var A,n,P,r;for(n=e,P=0,r=n.length;P<r;++P)if(A=n[P],oh(t,A.ed()))return A;return null}function rJ(t,e,A){var n,P;for(P=0;P<t.g[e].length;P++)n=t.g[e][P],t.k[n]==2&&(t.k[n]=1,t.j[n]=A<<24>>24)}function nQ(t){var e,A;for(A=!1,e=0;e<t.q;e++)(t.u[e]&512)!=0&&(t.C[e]=-1,A=!0);return A&&Ai(t)!=null}function ai(t,e){var A;return A=Fh(e,\"([/\\\\\\\\\\\\.\\\\*\\\\+\\\\?\\\\|\\\\(\\\\)\\\\[\\\\]\\\\{\\\\}$^])\",\"\\\\\\\\$1\"),Fh(t,A,\"\")}function XF(t,e){var A;return A=TA(0,e,0,t.a.length,!0,t),j0(t.a[A][3])*w.Math.pow(j0(t.a[A][1]),.25)}function PQ(t,e){var A;e*2+1>=t.b.a.length||(PQ(t,2*e+1),A=2*e+2,A<t.b.a.length&&PQ(t,A),Lb(t,e))}function rQ(t,e,A){var n;for(n=A-1;n>=0&&t[n]==e[n];n--);return n<0?0:pi(V(t[n],T1),V(e[n],T1))?-1:1}function iJ(t,e){var A,n,P;for(P=0,n=new Zt(e);n.a<n.c.a.length;)A=$t(n),P+=Am(t,A.c,A.b)?t.b:0;return P}function fJ(t,e){var A;if(O(t.L,e)!=2)return!1;for(A=0;A<2;A++)if(CA(t.L,e,A)!=2)return!1;return!0}function ZF(t,e,A){var n;if(t.i!=null)for(n=0;n<t.i.length;n++)t.i[n].a=t.o[n]+e-t.k,t.i[n].b=t.p[n]+A-t.n}function DJ(t,e){var A;for(A=0;A<O(t.R,e);A++)if(t.o[xt(t.R,e,A)]==3&&CA(t.R,e,A)==1)return!0;return!1}function yA(t,e,A){var n,P,r,i;for(P=N(t.j,e),r=0,i=P.length;r<i;++r)if(n=P[r],A==n)return!0;return!1}function tf(t,e,A){var n,P,r,i;for(P=N(t.k,e),r=0,i=P.length;r<i;++r)if(n=P[r],A==n)return!0;return!1}function uJ(t,e){Ff();var A,n,P;for(P=0,A=0,n=0;n<t.length;n++)P+=zr(t[n]&e[n]),A+=zr(t[n]|e[n]);return P/A}function WF(t,e){this.n=t,this.k=e,this.j=(e&16)==0,this.d=-1,this.e=0,this.o=0,this.a=-1,this.g=-1,this.c=0}function _L(t,e,A,n,P){pr.call(this,t),this.a=c(Ut,Tt,6,2,15,1),this.a[0]=A,this.a[1]=n,this.b=e,this.c=P}function uT(){this.i=dtt++,this.n=null,this.j=null,this.g=null,this.d=null,this.b=null,this.k=null,this.a=null}function QJ(t){return at(typeof t,mf)?!0:t!=null&&t.$implements__java_lang_CharSequence}function D8(){D8=d1,Fl=B(d(it,1),Dt,2,6,[\"distance\",\"plane\",\"line\",\"torsion\",\"stereo\",\"binap\"])}function Jr(){Jr=d1,hi=B(d(it,1),Dt,2,6,[\"\",\"0\",\"00\",\"000\",\"0000\",\"00000\",\"000000\",\"0000000\",\"00000000\"])}function W9(){W9=d1,NA=B(d(Ee,1),PA,6,15,[.29899999499320984,.5870000123977661,.11400000005960464])}function _F(){_F=d1,X4=B(d(F,1),k,6,15,[5258420,0]),fE=B(d(F,1),k,6,15,[11837695,14737632])}function oJ(t){return t>=3&&t<=4||t>=11&&t<=13||t>=19&&t<=31||t>=37&&t<=51||t>=55&&t<=84||t>=87&&t<=112}function $L(t){return H8(t)?it:Ci(t)?vtt:yu(t)?Btt:Ah(t)||th(t)?t.td:t.td||Array.isArray(t)&&d(EV,1)||EV}function iQ(t,e,A,n,P,r,i){return e9(t,e,A,n,P,r==null?t.D[0][A]:r[t.D[0][A]],r==null?t.D[1][A]:r[t.D[1][A]],i)}function YD(t,e){var A;for(A=0;A<e.k.length;A++)mD(t.k[A],e.k[A]);e.j==null?t.j=null:t.j=fL(e.j,e.j.length)}function $F(t,e){var A;for(A=0;A<t.f.length;A++)if(gt(t.f[A],e.f[A]))return pi(t.f[A],e.f[A])?-1:1;return 0}function UJ(t,e){var A;for(A=0;A<e.length;A++){if(e[A]<t.g[A].a.length-1)return++e[A],!0;e[A]=0}return!1}function aF(t,e){var A,n;for(n=c(F,k,6,e.length+1,15,1),A=0;A<e.length;A++)n[A]=e[A];return n[e.length]=t,n}function LJ(t,e,A){var n,P;for(++t.b,n=new hD(t),n.p=A,P=t.g.length-1;P>=0;P--)OI(t,n,t.g[P],P,e[P]);return n}function tm(t,e,A){var n;G1(t),n=e==-1?new bm(t._,t,t.F,t.B,t.D,t.C,t.A):new Ok(t._,t,t.V,e),nx(n,new wd(t,e,A))}function sJ(t){var e,A;if(A=d$(t),P0(t.A,t.a))for(e=0;e<t.A.q;e++)P0(t.A,e)&&gp(t,e,A);else gp(t,t.a,A);bj(t.A)}function em(t){var e;for(this.o=t,this.k=c(H2,F2,29,t.q,0,1),e=0;e<t.q;e++)this.k[e]=new du(t.J[e]);this.n=NaN}function fQ(t){var e,A,n;for(n=t.a.a.length,e=new Array(n),A=0;A<n;A++)e[A]=bI(N(t.a,A).a,N(t.a,A).b);return e}function yJ(t){var e,A,n,P,r;for(r=1,A=t,n=0,P=A.length;n<P;++n)e=A[n],r=31*r+(e!=null?a8(e):0),r=r|0;return r}function lJ(t){var e;if(t.length<3){for(e=1;e<(J1(),X0).length;e++)if(X0[e].startsWith(t))return!0}return!1}function hJ(t,e){var A;for(A=0;A<O(t.i,e);A++)if(CA(t.i,e,A)==2&&X(t.i,_(t.i,e,A))==8)return!0;return!1}function Am(t,e,A){var n;for(n=0;n<e.length;n++)if(gt(V(t.f[n],e[n]),V(A[n],e[n])))return!1;return!0}function nm(t,e){var A;return t===e?!0:Xt(e,160)?(A=e,t.Nc()==A.Nc()&&t.Oc()==A.Oc()):t===e}function TJ(t,e){var A;return t.a==t.b?-1:(A=w.Math.min(e.length,t.b-t.a),tN(e,t.c,t.a,A),t.a+=A,A)}function aL(t,e){var A,n,P;for(L1(e),A=!1,n=t.Tb();n.bd();)P=n.cd(),e.contains(P)&&(n.dd(),A=!0);return A}function cJ(t,e){var A,n,P;for(n=!1,A=1;A<4;A++)for(P=0;P<A;P++)t[P]>t[A]&&(n=!n),e[P]>e[A]&&(n=!n);return n}function ts(t,e){var A;for(!e&&(e=Kn(t.o)),e.T&=-249,A=0;A<e.q;A++)mD(e.J[A],t.k[A]);return t.p!=null&&W2(e,t.p),e}function Pm(t,e){return!(t.C[e]!=6||t.s[e]!=0||It(t,e)+t.j[e]!=4)}function es(t,e){return(t.u[e]&d8)!=0?!0:t.C[e]<=1?!1:Cb(t,e)||t.C[e]==13||t.C[e]>=171}function wJ(t){var e;return t!=null&&(e=t.__java$exception,e)?e:id(t,TypeError)?new d7(t):new GL(t)}function rm(t){t.J=1,t.R=new tu,t.$=new f1,t.U=new f1,t.s=c(Pt,ft,6,t.L.q,16,1),t.w=new cr,t.Q=0,t.C=-1,Sb(t)}function DQ(){DQ=d1,OE=new cU(\"CONCURRENT\",0),Io=new cU(\"IDENTITY_FINISH\",1),Lc=new cU(\"UNORDERED\",2)}function im(t,e,A){if(t>e)throw At(new YP(YQ+t+jp+e));if(t<0||e>A)throw At(new p7(YQ+t+o6+e+pp+A))}function gJ(t,e,A,n,P,r,i,f){var D;for(D=A;r<i;)D>=n||e<A&&f.Rb(t[e],t[D])<=0?P[r++]=t[e++]:P[r++]=t[D++]}function dJ(t,e){var A,n;for(A=MF(t),n=0;n<NP.length;n++)A[n]!=0&&_P(e,\"\"+A[n]+\" * \"+NP[n]+\"   AtomType: \"+ZV[n],2)}function BJ(t,e){var A,n,P;for(n=0,A=0;A<t.V.q;A++)P0(t.V,A)&&++n;P=n!=0&&n!=t.V.q,(t.U&1)!=0?_$(t,e,P):QY(t,e,P)}function fm(t,e){var A,n,P;for(L1(e),A=!1,n=t.Tb();n.bd();)P=n.cd(),e.contains(P)||(n.dd(),A=!0);return A}function Dm(t){var e;return vD(t.a!=t.b),e=t.d.a[t.a],ed(t.b==t.d.c&&e!=null),t.c=t.a,t.a=t.a+1&t.d.a.length-1,e}function um(t){var e;if(t.c!=0)return t.c;for(e=0;e<t.a.length;e++)t.c=t.c*33+(t.a[e]&-1);return t.c=t.c*t.e,t.c}function vJ(t){var e,A,n;for(n=t.a.length,e=new Array(n),A=0;A<n;A++)e[A]=PI((ve(A,t.a.length),t.a[A]));return e}function Qm(t,e,A){var n,P;return DL(e,t.a.length),n=A.toArray(),P=n.length,P==0?!1:(jd(t.a,e,n),!0)}function QT(t,e,A){if(A){if(t.s[e]>8)return!1;++t.s[e]}else{if(t.s[e]<-8)return!1;--t.s[e]}return t.T=0,!0}function _8(t,e){var A;return A=le(t.b,e),A||(A=new Bj(t.k,t.q,t.s,e,t.n),ze(t.b,bn(e,e.length),A),A)}function on(t){var e;return e=Le(t),e>Ip?1/0:e<-34028234663852886e22?-1/0:e}function G(t,e){var A;return o0(t)&&o0(e)&&(A=t-e,!isNaN(A))?A:RT(o0(t)?pe(t):t,o0(e)?pe(e):e)}function FJ(t,e){var A,n;for(n=c(Ur,U9,26,t.length,0,1),A=0;A<t.length;A++)n[A]=t[A].a;return new aP(new gT(n,e))}function om(t){var e;for(t.q=c(Pt,ft,6,t.L.q,16,1),e=0;e<t.L.r;e++)t.q[z(t.L,0,e)]=!0,t.q[z(t.L,1,e)]=!0}function oT(t,e,A){t.v==null&&(t.v=c(F,f0,7,t.M,0,2)),A.sort(Fe(D0.prototype.hd,D0,[])),t.v[e]=A,t.T=0,t.K=!0}function Um(t,e,A,n){this.c=c(OA,te,6,n.c,14,1),this.b=c(OA,te,6,n.c,14,1),oY(n,t,e,this.c,this.b),this.a=A}function As(t,e,A,n,P){A<n?(this.a=t,this.b=e,this.c=A,this.d=n):(this.a=e,this.b=t,this.c=n,this.d=A),this.e=P}function mJ(t,e,A,n,P){e==0||n==0||(e==1?P[n]=Qs(P,A,n,t[0]):n==1?P[e]=Qs(P,t,e,A[0]):rX(t,A,P,e,n))}function kJ(t,e){var A,n,P,r;if(e.length==0)return null;for(n=e,P=0,r=n.length;P<r;++P)A=n[P],t.C[A]=-1;return Ai(t)}function UT(){kp();var t,e,A,n;if(!Jf&&!Jf)for(Jf=new bi,e=XV,A=0,n=e.length;A<n;++A)t=UQ(e[A]),K8(Jf,t)}function m1(t){var e,A;return t>-129&&t<128?(Od(),e=t+128,A=nc[e],!A&&(A=nc[e]=new zl(t)),A):new zl(t)}function bJ(t){var e,A;for(e=new yD,A=0;A<t.b.length;A++)Mi(e,(J1(),X0)[t.c[A]]),t.b[A]>1&&Xq(e,t.b[A]);return e.a}function pP(t,e){var A,n;for(n=new Zt(t);n.a<n.c.a.length;)if(A=$t(n),gz(A,e))return!1;return t.a.push(e),!0}function RJ(t,e,A){var n,P;if(t.I){for(P=new Zt(t.I);P.a<P.c.a.length;)if(n=$t(P),n.Hb(e,A))return n}return null}function jJ(t,e,A){var n,P,r;return r=1.02*_B(t.f[1],e)+_B(t.f[0],e),n=A/r,P=w.Math.pow(n,-6),n>=1?0:2*(P*P-P)}function pJ(t,e,A){var n,P;for(n=k1(it,[nA,Dt],[13,2],6,[t.f,e],2),ut(t,7),P=0;P<t.f;P++)n[P]=ZR(t,P,e,A);return n}function Lm(t,e,A,n){this.a=(r8(e),RP(t,c(F,k,6,e,15,1),0,e)),this.b=(r8(n),RP(A,c(F,k,6,n,15,1),0,n))}function sm(t,e){return kr(),H8(t)?Y9(t,e):Ci(t)?$8((L1(t),t),(L1(e),e)):yu(t)?WI((L1(t),t),(L1(e),e)):t.Sb(e)}function LT(t,e){var A;t.c=e,t.a=hT(e),t.a<54&&(t.f=(A=e.d>1?Sr(e.a[0],e.a[1]):Sr(e.a[0],0),J9(e.e>0?A:p0(A))))}function ef(t,e){this.e=e,this.a=nT(t),this.a<54?this.f=J9(t):this.c=(ke(),G(t,0)>=0?we(t):FP(we(p0(t))))}function ym(t,e,A,n,P,r){var i;this.a=A,this.b=n,this.c=P,this.d=r,i=Utt(t.o,e,A,n,P,r),this.e=i.a,this.f=i.b,this.g=i.c}function CJ(t,e,A,n){var P,r,i;for(P=e+1;P<A;++P)for(r=P;r>e&&n.Rb(t[r-1],t[r])>0;--r)i=t[r],t[r]=t[r-1],t[r-1]=i}function lm(t,e,A){var n;for(n=0;n<t.j[e];n++)if(t.n[e][n]==2&&X(t,t.i[e][n])>6&&t.i[e][n]!=A)return!0;return!1}function uQ(t,e,A){var n,P;return n=N(t.g,t.q[e]),n.g==A?!1:(P=N(t.g,t.q[A]),P.g==e?!0:XG(P,e))}function QQ(t,e){return t.e[e]-e0(t,e)+It(t,e)<=0?!1:tA(t,e)?!0:t.o[e]==0}function $8(t,e){return t<e?-1:t>e?1:t==e?t==0?$8(1/t,1/e):0:isNaN(t)?isNaN(e)?0:1:-1}function HJ(t,e){return t.a!=e.a?t.a<e.a?-1:1:t.b!=e.b?t.b<e.b?-1:1:t.c!=e.c?t.c<e.c?-1:1:0}function MJ(t,e){t.V!=e&&(G1(t),t.V=e,t.U=0,t.I=null,t.eb=w.Math.max(t.eb,4),e1(t.k),q1(t,new S1(t,1,!1)))}function sT(t,e){t.e=e.e,t.c=e.c,t.b=e.b,t.a=e.a==null?null:VD(e.a,e.a.length),t.d=e.d==null?null:VD(e.d,e.d.length)}function VJ(t){var e,A,n,P;for(e=(t.g==null&&(t.g=(P=jY(t),dY(P))),t.g),A=0,n=e.length;A<n;++A);}function hm(t){var e,A,n,P;return t.e==0?t:(e=t.d,A=e+1,n=c(F,k,6,A,15,1),lF(n,t.a,e),P=new oe(t.e,A,n),Rn(P),P)}function EJ(t){var e,A,n,P;for(t.a=15,P=(A=new rD(t.c).a._c().Tb(),new iD(A));P.a.bd();)n=(e=P.a.cd(),e.fd()),Ja(n)}function SJ(t){var e,A;if(t.$!=null)for(e=0;e<t.R.f;e++)Id(t.R,e,t.$[e]);if(t.i!=null)for(A=0;A<t.R.g;A++)Pd(t.R,A,t.i[A])}function Tm(t){var e,A;for(e=0,Og(t.e),A=0;A<t.e.length;A++)(A==0||Us(t.e[A],t.e[A-1])!=0)&&++e,t.f[t.e[A].a]=e;return e}function cm(t,e,A){var n;return n=t.a.get(e),t.a.set(e,A===void 0?null:A),n===void 0?(++t.c,++t.b.b):++t.d,n}function yT(t,e){var A;return O1(t)===O1(e)?!0:Xt(e,23)?(A=e,t.e==A.e&&t.d==A.d&&ZN(t,A.a)):!1}function I1(t,e){var A;return o0(t)&&o0(e)&&(A=t+e,j2<A&&A<fP)?A:pn(VG(o0(t)?pe(t):t,o0(e)?pe(e):e))}function Un(t,e){var A;return o0(t)&&o0(e)&&(A=t*e,j2<A&&A<fP)?A:pn(A$(o0(t)?pe(t):t,o0(e)?pe(e):e))}function l0(t,e){var A;return o0(t)&&o0(e)&&(A=t-e,j2<A&&A<fP)?A:pn(HF(o0(t)?pe(t):t,o0(e)?pe(e):e))}function qJ(t,e,A,n){return(t.U&6)!=0&&A[1]!=n[1]?A[1]==0?-1:1:$8(e[A[0]].a+e[A[0]].b,e[n[0]].a+e[n[0]].b)}function wm(t,e,A){if(t<0||e>A)throw At(new g9(YQ+t+o6+e+\", size: \"+A));if(t>e)throw At(new YP(YQ+t+jp+e))}function gm(t){if(t<P1)throw At(new p8(\"Overflow\"));if(t>Et)throw At(new p8(\"Underflow\"));return vt(t)}function KD(t){var e,A;return t.includes(\"/csd/\")?null:(e=(A=GE[t],typeof A===iy?A:null),!e&&vN(t),new Yg(e))}function oQ(t,e){var A;if(Ht(t.L,e)==0)return!1;for(A=0;A<Ht(t.L,e);A++)if(!F9(t.L,xt(t.L,e,A)))return!1;return!0}function dm(t,e,A,n,P){var r,i;return r=Q8(t,e,A,n)+Q8(t,e,n,P),i=r,D2(e,A,n,P,3)?i+=r>0?4:3:D2(e,A,n,P,4)&&(i+=r>0?6:4),i}function Bm(t,e,A){var n,P;for(n=e;t.j[A]==2&&t.o[A]==2&&A!=n;)P=A,A=t.i[A][0]==e?t.i[A][1]:t.i[A][0],e=P;return A==n?-1:A}function lT(t,e){var A,n,P,r;return A=t.D[0][e],n=t.D[1][e],P=t.J[n].a-t.J[A].a,r=t.J[n].b-t.J[A].b,w.Math.sqrt(P*P+r*r)}function Af(t,e){var A,n;for(t.d[e]&&(t.d[e]=!1,--t.b),n=0;n<O(t.j,e);n++)A=xt(t.j,e,n),t.e[A]&&(t.e[A]=!1,--t.c)}function IJ(t,e,A){var n,P;for(P=!1,n=0;n<e.e.length;n++)if(!fN(Gi(e.e,n))){P=!0;break}P||X8(t.I,e),e1(t.k),yB(A.a)}function xJ(t,e){var A,n,P,r;for(P=0,r=0;P<t.length&&r<e.length;){if(A=t[P],n=e[r],A==n)return!0;A<n?++P:++r}return!1}function nf(t,e){var A,n;for(n=c(F,k,6,t==null?1:t.length+1,15,1),A=0;A<n.length-1;A++)n[A]=t[A];return n[n.length-1]=e,n}function vm(t){var e,A;return t.w.d.a.length==0?null:(e=Xt(t,116)?yQ(t.c,t.w.d.a.length):0,A=k9(t.w,e),tU(t.w,e),A)}function XD(t){var e;return Array.isArray(t)&&t.vd===AD?uu($L(t))+\"@\"+(e=a8(t)>>>0,e.toString(16)):t.toString()}function NJ(t,e){var A;if(t.i==null)return!1;for(A=0;A<t.i.length;A++)if(!e.Hb(t.i[A].a,t.i[A].b))return!1;return!0}function Fm(t,e,A,n,P){var r,i,f;for(Tf(t,e,t.k[A],n,P),f=t.o,i=0;i<f.e[e];i++)r=f.i[e][i],f.e[r]==1&&Tf(t,r,t.k[A],n,P)}function ns(t,e,A){var n;for(n=0;n<t.f;n++)if(t.C[n]==A&&t.s[n]==0&&t.j[n]==0&&(t.s[n]=-1,t.T=0,--e,e==0))return 0;return e}function K0(t,e,A){A>=0&&A<=190&&(A==151||A==152?(t.C[e]=1,t.A[e]=A-149):(t.C[e]=A,t.A[e]=0),t.u[e]&=-2013265921,t.T=0)}function OJ(t){return t.c?(tI(\"find was already called on this matcher\"),!1):(t.c=!0,t.b=gN(t.a),!!t.b)}function GJ(t,e){return t.h==h8&&t.m==0&&t.l==0?(e&&(In=S0(0,0,0)),dg((K9(),tc))):(e&&(In=S0(t.l,t.m,t.h)),S0(0,0,0))}function zr(t){return t-=t>>1&1431655765,t=(t>>2&858993459)+(t&858993459),t=(t>>4)+t&252645135,t+=t>>8,t+=t>>16,t&63}function mm(){this.b=eP(\"/resources/forcefield/mmff94/pbci.csv\"),this.a=eP(\"/resources/forcefield/mmff94/bci.csv\")}function km(t,e,A,n,P){this.f=e,this.a=A,this.b=n,this.c=P,this.d=ND(t.b,e.a[n]),this.g=Wv(t.a,e,A,n,P),this.e=LY(t.a,e,A,n,P)}function bm(t,e,A,n,P,r,i){cT(),this.c=MD(t,hV,this),this.d=e,this.a=-1,this.k=A,this.g=n,this.j=P,this.i=r,this.n=i,np(this)}function Rm(){Rm=d1,KV=B(d(it,1),Dt,2,6,[\"Idorsia No\",\"Actelion No\",\"ID\",\"IDNUMBER\",\"COMPOUND_ID\",\"NAME\",\"COMPND\"])}function jm(){jm=d1,iE=B(d(it,1),Dt,2,6,[\"none\",\"pressed\",\"released\",\"clicked\",\"entered\",\"exited\",\"moved\",\"dragged\"])}function ZD(){ET();var t,e,A;A=qPt+++Date.now(),t=vt(w.Math.floor(A*RV))&ui,e=vt(A-t*h4),this.a=t^1502,this.b=e^tl}function JJ(t,e){var A,n,P;for(A=0,Og(t.b),n=0;n<e.length;n++)(n==0||Us(t.b[n],t.b[n-1])!=0)&&++A,P=t.b[n].a,e[P]=A;return A}function Ln(t){var e,A,n,P;for(P=t.length,e=c(E,q,6,0,15,1),n=0;n<P;)A=hk(t,n,t.length),n+=A>=u0?2:1,D$(e,A);return e}function zJ(t){var e,A,n;for(N$(t),n=c(Ur,nA,74,lG(t),0,2),e=0,A=0;A<t.q&&e<t.i;A++)(!t.t||!t.e[A])&&(n[e++]=t.n[A]);return n}function pm(t,e){var A,n;for(n=0,Xi(t,0,t.length,null),A=0;A<t.length;A++)(A==0||Us(t[A],t[A-1])!=0)&&++n,e[t[A].a]=n;return n}function Cm(t,e){var A,n;return n=t.d.a.length,A=K8(t,e),t.d.a.length!=n?(mt(t.b,e),t.a=null,n):(t.a==null&&kz(t),t.a[A])}function Hm(t,e){var A;return A=e?aJ(t):dT(t),A&&t.r?(z1(),\"\"+null.wd(),!0):!1}function Mm(){if(!ul)try{yi=new hR,ul=!0}catch(t){if(t=a1(t),Xt(t,19))z1();else throw At(t)}}function YJ(t){var e;if(CN(t,t.a))for(e=0;e<t.u.r;e++)P0(t.u,z(t.u,0,e))&&P0(t.u,z(t.u,1,e))&&Lj(t,e);else Lj(t,t.a);eR(t.u)}function KJ(t){var e;for(e=0;e<t.o.q;e++)if((t.a==null?NaN:t.a[e])>1e3||(t.a==null?NaN:t.a[e])>2e3)return!0;return!1}function XJ(t,e){var A,n;for(n=0;n<t.b.length;n++)if(A=w.Math.abs(t.b[n]-e.b[n]),A>py&&A<t.a[n]-py)return!1;return!0}function Vm(t,e){var A,n;for(n=0;n<t.$.a.length;n++)t.v=dQ(t.v,N(t.$,n));yZ(t,e),A=.1*e,t.v.c-=A,t.v.d-=A,t.v.b+=2*A,t.v.a+=2*A}function Em(t){var e,A;ut(t.V,15),e=c(F,k,6,t.V.q,15,1),A=nr(t.V,e,!1,!0),A=s$(t,e,A),o_(t,e,A),t.M=e,t.L=fj(t.V,e,A)}function hT(t){var e,A,n;return t.e==0?0:(e=t.d<<5,A=t.a[t.d-1],t.e<0&&(n=cF(t),n==t.d-1&&(--A,A=A|0)),e-=$r(A),e)}function ZJ(t){var e,A,n;for(A=!1,n=!1,e=0;e<t.q;e++)t.A[e]!=0&&(t.A[e]=0,A=!0,t.C[e]==1&&(n=!0));return n&&(t.T=0),A}function Cn(t,e){var A,n;return A=((t.u[e]&d8)>>>27)-1,A==-1&&(A=(n=t.C[e]<L9.length?L9[t.C[e]]:null,n==null?6:n[n.length-1])),A}function WJ(t,e,A){var n,P,r;for(P=0,r=0;r<t.a.length;r++)if(n=(1-A)*t.a[r]+A/t.a.length,P+=n,e<=P)return r;return t.a.length-1}function Sm(t,e,A){var n,P;for(P=t.Tb();P.bd();)if(n=P.cd(),O1(e)===O1(n)||e!=null&&VP(e,n))return A&&P.dd(),!0;return!1}function _J(t,e,A,n,P){var r;return r=e.a[n],!(ND(t.b,r)||A==P||u1(e,A,n)==-1||u1(e,n,P)==-1)}function sn(t,e,A,n){var P,r,i;return r=A-t,i=n-e,i!=0?(P=w.Math.atan(r/i),i<0&&(r<0?P-=U1:P+=U1)):P=r>0?RA:eo,P}function qm(t,e,A,n){var P,r;for(ut(t,1),P=0;P<n;P++)for(r=0;r<t.e[e[P]];r++)if(t.i[e[P]][r]==e[P+1]){A[P]=t.k[e[P]][r];break}}function $J(t,e,A){var n,P;for(n=V(A,T1),P=0;G(n,0)!=0&&P<e;P++)n=I1(n,V(t[P],T1)),t[P]=Jt(n),n=q0(n,32);return Jt(n)}function Im(t){var e,A,n;for(n=new V0,A=new Zt(t);A.a<A.c.a.length;)e=$t(A),J(J(n,d6+e.Lb()+'\"'+e.Kb()+B6),$A);return n.a}function aJ(t){var e,A,n;for(A=new i8,e=0;e<t.L.length;e++)n=Ob(t.L[e]),n&&(e<t.Y?(mt(A.g,n),A.d=-1):(mt(A.f,n),A.d=-1));return A}function tz(t){var e,A,n;return t<qo.length?qo[t]:(A=t>>5,e=t&31,n=c(F,k,6,A+1,15,1),n[A]=1<<e,new oe(1,A+1,n))}function we(t){ke();var e,A;return A=Jt(t),e=Jt(DA(t,32)),e!=0?new zB(A,e):A>10||A<0?new kA(1,A):RE[A]}function $n(t){return t<3?0:t<11?1:t<19?2:t<37?3:t<55?4:0}function TT(t,e,A,n,P,r,i,f,D,Q){jm(),sU.call(this,t,Q),this.b=e,this.c=A,this.g=n,this.i=P,this.f=r,this.d=i,this.a=f,this.e=D}function xm(t,e,A,n,P,r,i,f,D,Q){this.i=t,this.a=e,this.f=A,this.o=n,this.c=P,this.k=r,this.j=i,this.p=f,this.d=D,this.n=Q,l$(this)}function Nm(t,e,A){this.b=new ab(this,t.a),this.c=e,this.e=A,this.d=new A3,al(this.d,this.b),FB(this,this.b.o,this.b.e),DF(this)}function Om(t,e,A,n){K5(),this.v=MD(t,(e.u[A]&512)!=0?\"Atom Query Features (Multiple)\":\"Atom Query Features\",this),htt(this,e,A,n)}function cT(){cT=d1,aV=B(d(it,1),Dt,2,6,[\"None\",\"One electron (duplet)\",\"Two electrons (triplet)\",\"Two electrons (singulet)\"])}function WD(t,e){var A;if(t.f==null)e.a+=\" atoms:<null>\";else for(J(e,\" atoms:\"+t.f[0]),A=1;A<t.f.length;A++)J(e,\",\"+t.f[A])}function Gm(t,e,A){var n,P;for(t.U=e,n=0;n<t.R.f;n++)t.f[n]=A[n],t.db[n]=0,t.ib[n]=!1;for(P=0;P<t.R.g;P++)t.o[P]=0,t.q[P]=!1}function Jm(t,e,A){var n;for(n=0;n<t.r;n++)if((t.D[0][n]==e&&t.D[1][n]==A||t.D[0][n]==A&&t.D[1][n]==e)&&t.H[n]!=512)return n;return-1}function nt(t,e){var A,n;for(A=e,n=0;e!=0;)t.d==0&&(t.f=(t.c[++t.e]&63)<<11,t.d=6),n|=(u0&t.f)>>16-A+e,t.f<<=1,--e,--t.d;return n}function zm(t,e,A){var n,P,r;for(r=0,n=c(F,k,6,O(t.b,e)-1,15,1),P=0;P<O(t.b,e);P++)_(t.b,e,P)!=A&&(n[r++]=_(t.b,e,P));return n}function ez(t,e,A){var n,P,r;for(r=0,n=c(F,k,6,O(t.c,e)-1,15,1),P=0;P<O(t.c,e);P++)_(t.c,e,P)!=A&&(n[r++]=_(t.c,e,P));return n}function an(t,e,A){var n,P,r,i;for(r=e+A,Ct(e,r,t.length),i=\"\",P=e;P<r;)n=w.Math.min(P+AP,r),i+=Zx(t.slice(P,n)),P=n;return i}function Ym(t,e){var A,n,P,r;return A=e>>5,e&=31,P=t.d+A+(e==0?0:1),n=c(F,k,6,P,15,1),ST(n,t.a,A,e),r=new oe(t.e,P,n),Rn(r),r}function Pf(t,e){var A,n;for(n=t.a.length,e.length<n&&(e=iu(new Array(n),e)),A=0;A<n;++A)e[A]=t.a[A];return e.length>n&&(e[n]=null),e}function wT(t){var e,A;for(A=0,e=0;e<t.length;e++)A<(Gt(e,t.length),t.charCodeAt(e))&&(A=(Gt(e,t.length),t.charCodeAt(e)));return A}function Km(t,e){var A,n;for(n=0;n<t.g[e].length;n++)if(A=t.g[e][n],t.f[A]&&(t.o[A]==1||t.o[A]==2)&&t.k[A]==0)return!0;return!1}function Ps(t,e){for(var A=0;!e[A]||e[A]==\"\";)A++;for(var n=e[A++];A<e.length;A++)!e[A]||e[A]==\"\"||(n+=t+e[A]);return n}function Az(t){var e=/^#?0\\.(0+)$/.exec(t);if(!e)throw new Error(\"unimplemented DecimalFormat with pattern \"+t);return e[1].length}function Xm(){var t;!uP&&(uP=new gg),(uP.b&1)!=0&&uP.a!=15&&z1(),t=1&~uP.b,t!=0&&(pa(uP,t),t==1&&EJ(uP))}function nz(t){_A();var e,A,n;return n=new xw,A=(n.j=null,n6(n,new Pn(new Rr(t)))?n.j:null),e=n.f==null?Du(n.j):n.f,qI(new HA(A),e)}function gT(t,e){i8.call(this),t!=null&&(jP(this.g,new qD(new iU(t),0,e)),jP(this.f,new qD(new iU(t),e,t.length))),this.c=cQ(this)}function Yr(t,e){var A;return o0(t)&&o0(e)&&(A=t%e,j2<A&&A<fP)?A:pn((O5(o0(t)?pe(t):t,o0(e)?pe(e):e,!0),In))}function Pz(t){var e;return e=typeof t,at(e,h2)||at(e,n9)||at(e,mf)?!0:t!=null&&t.$implements__java_lang_Comparable}function Zm(t,e,A){for(t.j==null&&(t.j=c(zt,_t,6,t.o.r,15,1),qq(t.j));A<0;)A=A+360<<16>>16;for(;A>=360;)A=A-360<<16>>16;t.j[e]=A}function rz(){var t,e;if(t=(e=FN(\"RGROUPS=\\\\((\\\\d+) (\\\\d+).*\\\\)\"),e?new _w(e):null),t)return new Kw(t);throw At(new Yv)}function UQ(t){var e,A;return G(t,-129)>0&&G(t,128)<0?(Nd(),e=Jt(t)+128,A=Pc[e],!A&&(A=Pc[e]=new Yl(t)),A):new Yl(t)}function dT(t){var e,A;if((t.U&4)==0||t.L==null)return null;for(A=new i8,e=0;e<t.L.length;e++)e<t.Y?N7(A,t.L[e]):x7(A,t.L[e]);return A}function Wm(t,e){var A,n;for(n=t.a.length,e.length<n&&(e=iu(new Array(n),e)),A=0;A<n;++A)e[A]=t.a[A];return e.length>n&&(e[n]=null),e}function iz(t,e){var A,n;for(A=e;A<t.length;A++){if(n=(Gt(A,t.length),t.charCodeAt(A)),n==32||n==9)return-1;if(n==61)return A}return-1}function fz(t){return t>=48&&t<48+w.Math.min(10,10)?t-48:t>=97&&t<97?t-97+10:t>=65&&t<65?t-65+10:-1}function rs(t,e){return t.e>e.e?1:t.e<e.e?-1:t.d>e.d?t.e:t.d<e.d?-e.e:t.e*rQ(t.a,e.a,t.d)}function Kr(t,e){return L1(t),e==null?!1:at(t,e)?!0:t.length==e.length&&at(t.toLowerCase(),e.toLowerCase())}function bA(t,e,A,n){J1();var P,r,i;return r=A-t,i=n-e,i!=0?(P=w.Math.atan(r/i),i<0&&(r<0?P-=U1:P+=U1)):P=r>0?RA:eo,P}function Dz(t,e){var A,n,P,r;return n=t.a.length-1,A=e-t.b&n,r=t.c-e&n,P=t.c-t.b&n,ed(A<P),A>=r?($G(t,e),-1):(aG(t,e),1)}function BT(t,e){var A;if(e==null||e.length==0)return null;for(A=2;A<e.length-2;A++)if(e[A]==32)return Ls(t,e,e,A+1);return Ls(t,e,null,0)}function uz(t){var e;try{return KY((new UT,t.a))}catch(A){if(A=a1(A),Xt(A,19))return e=A,Zr(e,(z1(),Ti),\"\"),-999;throw At(A)}}function _m(){_m=d1,OV=B(d(F,2),f0,7,0,[B(d(F,1),k,6,15,[0,0,1]),B(d(F,1),k,6,15,[0,2,3]),B(d(F,1),k,6,15,[1,3,3])])}function Xr(){Xr=d1,G4=new TD(\"ONE_ONE\",0),z4=new TD(\"ONE_TWO\",1),J4=new TD(\"ONE_THREE\",2),si=new TD(\"ONE_FOUR\",3),S2=new TD(\"ONE_X\",4)}function $m(t,e,A){this.s=MD(t,P0(e,e.D[0][A])&&P0(e,e.D[1][A])?\"Bond Query Features (Multiple)\":\"Bond Query Features\",this),Za(this,e,A)}function Qz(t,e){e=e||{};var A=(typeof e.maxSphereSize===ho?5:e.maxSphereSize)|0,n=(typeof e.type===ho?0:e.type)|0;return WK(t,A,n)}function oz(t,e){t.a=e;var A=t.Jc(),n=t;function P(){n.Ic()}function r(){n.Hc()}var i={fireOk:P,fireCancel:r};A.setEventConsumer(i)}function He(t){_5();var e;if(!isNaN(t)&&!isFinite(t)||isNaN(t))throw At(new XP(\"Infinite or NaN\"));Oa(this,(e=t,e.toPrecision(20)))}function Uz(t){var e;return Eh(t.Vb(),(e=dB(new Qw,qv(new uw,new Dw,new Tw,B(d(vl,1),Ye,95,0,[(DQ(),Io)]))),uh(e,new ow)))}function Lz(){var t,e;if(V2==null)for(e=new JA(!1),V2=c(Ur,U9,26,s9.length,0,1),t=0;t<s9.length;t++)V2[t]=Zi(e,s9[t]),ut(V2[t],1)}function am(t){ke(),t.length==0?(this.e=0,this.d=1,this.a=B(d(F,1),k,6,15,[0])):(this.e=1,this.d=t.length,this.a=t,Rn(this))}function LQ(t){this.j=t&-4,this.q=t&3,this.o=(t&32)!=0,this.e=(t&64)!=0,this.i=(t&8)!=0,this.d=2,(t&4)!=0&&(this.d|=1),this.i&&(this.d&=-3)}function rf(t,e){var A,n;for(A=0,n=0;n<t.j[e];n++)t.n[e][n]==2&&(X(t,t.i[e][n])==7||X(t,t.i[e][n])==8||X(t,t.i[e][n])==16)&&++A;return A}function tk(t,e,A){var n,P,r,i,f;for(P=0,i=0,f=0;f<t.g[e].length;f++)n=t.g[e][f],t.k[n]==A&&(r=1<<t.j[n],(i&r)==0&&(i|=r,++P));return P}function is(t,e){var A,n,P,r,i;for(i=0,n=1,r=new Zt(t.a);r.a<r.c.a.length;)P=$t(r),A=P.cc(e,null,\"\"+n,!1),A!=0&&(i+=A,++n);return i}function sz(t,e,A,n){var P,r;if(t.d.length>t.c.length)for(P=0;P<t.a;P++)A[n+P]=t.c[P];else for(r=N(t.b,e),P=0;P<t.a;P++)A[n+P]=t.c[r[P]]}function yz(t,e,A,n){var P,r;if(t.d.length<=t.c.length)for(P=0;P<t.a;P++)A[n+P]=t.d[P];else for(r=N(t.b,e),P=0;P<t.a;P++)A[n+P]=t.d[r[P]]}function ek(t,e,A){var n,P,r,i;for(i=i=c(Pt,ft,6,t.q,16,1),r=SX(t,e,A,i),P=c(F,k,6,r,15,1),r=0,n=0;n<t.q;n++)i[n]&&(P[r++]=n);return P}function lz(){var t;return Ho!=0&&(t=Date.now(),t-dE>2e3&&(dE=t,Mo=w.setTimeout(Zq,10))),Ho++==0?(VO((L3(),$4)),!0):!1}function _9(t){switch(J1(),t){case 7:case 8:case 9:case 15:case 16:case 17:case 33:case 34:case 35:case 52:case 53:return!0}return!1}function hz(t,e){var A,n,P;if(n=rr(t),P=rr(e),n==-1||P==-1||(n+P&1)==0)return 3;switch(A=0,n+P){case 3:case 7:A=2;break;case 5:A=1}return A}function Tz(t,e){var A,n,P;if(n=rr(t),P=rr(e),n==-1||P==-1||(n+P&1)==0)return 3;switch(A=0,n+P){case 3:case 7:A=1;break;case 5:A=2}return A}function cz(t,e,A){A!=null&&A.length==0&&(A=null),A==null?t.t!=null&&(t.t[e]=null):(t.t==null&&(t.t=c(E,g8,10,t.M,0,2)),t.t[e]=A)}function Ak(t,e,A,n){var P;P=new fs(t,e),hL(P,A,dt(e,A)==1?2:3),hL(P,n,dt(e,n)==2?1:2),t.g[A]=!0,t.g[n]=!0,Oi(t.e,P)&&uL(t.d,P)}function wz(){var t,e;if(hl==null&&hl==null){for(t=c(Ett,A0,199,jo.length,0,1),e=0;e<jo.length;e++)t[e]=new lp(jo[e][0],jo[e][1]);hl=t}}function CP(t){var e;if(t<hi.length)return hi[t];for(e=new V0;t>=hi.length;)J(e,hi[hi.length-1]),t-=hi.length-1;return J(e,hi[t]),e.a}function gz(t,e){var A,n,P;if(e.e.length!=t.e.length)return!1;for(n=qF(t),P=qF(e),A=0;A<n.length;A++)if(n[A]!=P[A])return!1;return!0}function nk(t,e){var A,n,P;for(P=0,n=0;n<t.length;n++){for(A=t[n];e[P]<A;)if(++P,P==e.length)return!1;if(e[P]>A)return!1}return!0}function dz(t,e){Ff();var A,n,P,r;for(r=0,n=0,P=0,A=0;A<t.length;A++)r+=zr(t[A]&e[A]),n+=zr(t[A]),P+=zr(e[A]);return r/w.Math.sqrt(n*P)}function Pk(t,e){var A,n,P,r;for(n=0,P=0,r=0,A=0;A<t.V.q;A++)(!e||P0(t.V,A))&&(P+=kt(t.V,A),r+=pt(t.V,A),++n);return n>1?new ug(P/n,r/n):null}function Bz(t,e){var A,n;for(n=!0,A=0;A<t.c.length;A++)(gt(V(Gn(t.c[A]),e.c[A]),0)||gt(V(t.b[A],e.c[A]),e.b[A]))&&(n=!1);return n}function vz(t,e){var A,n;for(n=!0,A=0;A<t.c.length;A++)(gt(V(Gn(e.c[A]),t.c[A]),0)||gt(V(e.b[A],t.c[A]),t.b[A]))&&(n=!1);return n}function Fz(t,e,A,n){var P,r,i;for(r=0,i=0;i<t.i[e].length;i++)if(P=(1-n)*t.e[e][i]+n/t.i[e].length,r+=P,A<=r)return i;return t.i[e].length-1}function rk(t,e,A,n){var P;for(P=0;P<A.length;P++)A[P]||(A[P]=!0,n[e]=P,e+1==n.length?mt(t.b,bn(n,n.length)):rk(t,e+1,A,n),A[P]=!1)}function fs(t,e){var A;for(this.b=t,this.a=c(F,k,6,(t.i.g+15)/16|0,15,1),A=0;A<t.i.g;A++)this.a[A>>4]|=w.Math.min(3,dt(e,A))<<2*(A&15)}function HP(t,e,A){this.j=t,this.i=A,this.e=c(F,k,6,e,15,1),this.k=c(F,k,6,e,15,1),this.a=c(Ut,Tt,6,e,15,1),this.b=c(Ut,Tt,6,e,15,1)}function mz(t){var e,A,n,P,r;for(A=_X(new BP(238,238,238)),n=ui&A.a,P=0;P<xU(t);P++)for(r=0;r<NU(t);r++)e=_d(t,P,r),GU(t,P,r,(qn&e)+n)}function kz(t){var e,A,n,P;for(t.a=c(F,k,6,t.d.a.length,15,1),e=0,P=new Zt(t.b);P.a<P.c.a.length;)n=$t(P),t.a[A=ar(t,n),A<0?-1:A]=e++}function bz(t,e){var A,n,P;for(t.c=e,P=new Zt(t.g);P.a<P.c.a.length;)A=$t(P),je(A,e);for(n=new Zt(t.f);n.a<n.c.a.length;)A=$t(n),je(A,e)}function vT(t,e){var A,n,P,r;return A=e/2|0,P=t<0,t=w.Math.abs(t),r=e/32|0,n=w.Math.min(A-1,Jt(M1(w.Math.round(t*A/(t+r))))),P?A+n:n}function ik(t,e,A){var n;return n=e==0?F0+t[0]-t[t.length-1]:t[e]-t[e-1],A>g6&&A<AA?n-=2*w.Math.cos(A+B2):n-=.5*w.Math.cos(A+B2),n}function Ds(t,e){var A;return e==null||!Xt(e,29)?!1:(A=e,w.Math.abs(A.a-t.a)+w.Math.abs(A.b-t.b)+w.Math.abs(A.c-t.c)<1e-6)}function fk(){fk=d1,vo=B(d(Pt,1),ft,6,16,[!1,!1,!1,!1,!1,!0,!0,!0,!0,!1,!1,!1,!1,!1,!1,!0,!0])}function Rz(t,e){return H8(t)?!!MV[e]:t.ud?!!t.ud[e]:Ci(t)?!!HV[e]:yu(t)?!!CV[e]:!1}function sQ(t,e){switch(e){case 0:return YY(t,!1);case 1:return jz(t);case 2:return AK(t);case 3:return Yz(t);case 4:return FY(t)}return null}function Dk(t){var e;e=t.R.c*(t.r!=0?t.r:M8(t.L)),t.Y=e*mtt,t.T=e*Ftt,t.S=e*.38,t.W=e*.47,t.X=vt(e*t.J*ktt+.5),t.V=e*.12,t.Z=e*.4,t.A=e*.5+.5}function jz(t){try{return t=Kn(t),ds(t),me(new FA(t))}catch(e){if(e=a1(e),Xt(e,27))return z1(),null;throw At(e)}}function pz(t,e){var A,n;for(n=0;n<t.b.i.g;n++)t.b.g[n]&&(A=3&t.a[n>>4]>>2*(n&15),w0(e,n,A==1?1:A==2?t.b.g[n]&&!$P(t.b.i,n)?386:2:A==3?4:16))}function Cz(t,e,A){var n,P;for(n=new FA(ts(A,null)),me(n),Su(n,n.jb),t.d=c(F,k,6,e.g.length,15,1),P=0;P<t.d.length;P++)t.d[P]=rd(A,e.g[P].a)}function a8(t){return H8(t)?DT(t):Ci(t)?vt((L1(t),t)):yu(t)?(L1(t),t?1231:1237):Ah(t)?t.ob():th(t)?dD(t):t&&t.hashCode?t.hashCode():dD(t)}function Hz(t){var e,A;for(e=0;e<t.R.f;e++)(!t.M[e]||t.db[e]==3)&&(t.bb[e]=0);for(A=0;A<t.R.g;A++)(l1(t.R,A)!=1||t.o[A]==0||t.o[A]==3)&&(t.n[A]=0)}function Mz(t,e){var A,n;if((t.u[e]&cn)!=0){for(n=(ut(t,7),t.p),A=0;A<n.j.a.length;A++)if(N(n.k,A).length==6&&yA(n,A,e))return!0}return!1}function _D(t,e){var A,n;if(t.C[e]==7&&t.e[e]+It(t,e)>=3){for(A=0;A<t.e[e];A++)if(n=t.i[e][A],t.C[n]==8&&t.e[n]+It(t,n)==1)return!0}return!1}function yQ(t,e){var A,n;if(td(e>0),(e&-e)==e)return vt(e*Rs(t,31)*4656612873077393e-25);do A=Rs(t,31),n=A%e;while(A-n+(e-1)<0);return vt(n)}function us(t){var e,A;Tu(this);try{if(t)for(A=new Zt(t);A.a<A.c.a.length;)e=$t(A),mt(this,e.Gb())}catch(n){if(n=a1(n),!Xt(n,19))throw At(n)}}function XA(t,e,A){A>=-1&&A<=14&&(t.u[e]&=-2013265921,t.u[e]|=1+A<<27,t.C[e]==6&&(A==-1||A==0||A==2||A==4)&&(t.u[e]&=-49,A==2&&(t.u[e]|=16)))}function uk(t,e,A,n){var P,r,i,f;for(r=-1,i=-1,f=0;f<Ht(t.e,e);f++)if(P=_(t.e,e,f),P==A||P==n)if(i==-1)i=f;else{r=f;break}return t.a[e][r][i]}function Qk(t,e){var A,n,P,r,i;for(A=-1,n=-1,r=0;r<O(t.k,e);r++)P=_(t.k,e,r),i=(CA(t.k,e,r)<<24)+t.a[P],!t.b[P]&&(A==-1||n<i)&&(A=r,n=i);return A}function Vz(t,e){var A,n,P,r;for(n=1,r=0;r<t.u.length;r++)n*=o3(t.u[r],e.d[r]);for(A=_8(t.i,e.d),P=0;P<t.v.length;P++)n*=m3(A,P,e.i[P]);return n}function ok(t,e){var A,n;for(n=0;n<t.b.length;n++)if(A=w.Math.abs(t.b[n]-e.b[n]),A>py&&A<t.a[n]-py)return A<t.a[n]/2^t.b[n]<e.b[n]?1:-1;return 0}function FT(t,e,A,n){var P,r;for(r=0;r<t.g[e].length;r++)P=t.g[e][r],t.f[P]&&(t.o[P]==1||t.o[P]==2)&&t.k[P]==0&&(t.k[P]=n<<24>>24,t.j[P]=A<<24>>24)}function Uk(t,e){return w.Math.acos((t.a*e.a+t.b*e.b+t.c*e.c)/(w.Math.sqrt(t.a*t.a+t.b*t.b+t.c*t.c)*w.Math.sqrt(e.a*e.a+e.b*e.b+e.c*e.c)))}function Qs(t,e,A,n){Pr();var P,r;for(P=0,r=0;r<A;r++)P=I1(Un(V(e[r],T1),V(n,T1)),V(Jt(P),T1)),t[r]=Jt(P),P=DA(P,32);return Jt(P)}function tP(t,e){var A;for(A=0;A<t.w;A++)e-=16;for(e<0&&z1();e>15;)Ot(t,1,1),Ot(t,15,4),e-=16,++t.w;Ot(t,1,1),Ot(t,e,4)}function mT(){_m(),this.c=new YA(24,29),this.i=c(F,k,6,24,15,1),this.b=c(F,k,6,2,15,1),this.e=c(F,k,6,2,15,1),this.f=c(F,k,6,2,15,1)}function Ez(t,e,A){return xI(t>=0&&t<=1114111),t>=u0?(e[A++]=55296+(t-u0>>10&1023)&c1,e[A]=56320+(t-u0&1023)&c1,2):(e[A]=t&c1,1)}function Lk(t,e){var A,n,P,r;for(r=t.size(),e.length<r&&(e=iu(new Array(r),e)),P=e,n=t.Tb(),A=0;A<r;++A)P[A]=n.cd();return e.length>r&&(e[r]=null),e}function Sz(t){var e;if(t.q==1)return!0;for(e=1;e<t.q;e++)if(t.J[e].a!=t.J[0].a||t.J[e].b!=t.J[0].b||t.J[e].c!=t.J[0].c)return!0;return!1}function qz(t,e,A){var n,P;for(P=0;P<O(t.j,e);P++)if(n=_(t.j,e,P),X(t.j,n)==8&&O(t.j,n)==1)return A&&b1(t.j,n)==0&&E0(t.j,n,-1),!0;return!1}function Iz(t){var e;return Eh(t.Vb(),(e=dB(new lw,qO(new sw,new yw,new ww,new gw,B(d(vl,1),Ye,95,0,[(DQ(),Lc),Io]))),uh(e,new hw)))}function os(t,e){var A;if(t.j[e]==3&&e<t.f&&r0(t.p,e)&&(t.p&&e<t.f?iA(t.p,e):0)>=5){for(A=0;A<t.j[e];A++)if(Pi(t,t.k[e][A]))return t.k[e][A]}return-1}function xz(t){var e,A,n;for(A=!1,e=1;e<t.e.a.length;e++)for(n=0;n<e;n++)N(t.e,n).a>N(t.e,e).a&&(A=!A),N(t.e,n).b>N(t.e,e).b&&(A=!A);return A}function Nz(t){var e,A;for(e=0;e<t.f.q;e++)!t.b[e]&&Ht(t.f,e)==0&&(A=new HP(t.f,1,!1),t.b[e]=!0,A.e[0]=e,A.a[0]=0,A.b[0]=0,A.k[0]=0,pP(t.d,A))}function Oz(t,e){var A,n,P;return e<=22?(A=t.l&(1<<e)-1,n=P=0):e<=44?(A=t.l,n=t.m&(1<<e-22)-1,P=0):(A=t.l,n=t.m,P=t.h&(1<<e-44)-1),S0(A,n,P)}function kT(t,e,A,n,P,r,i,f){var D,Q;n&&(D=n.a[0],D&&kT(t,e,A,D,P,r,i,f),az(t,A,n.c,P,r,i,f)&&e.add(n),Q=n.a[1],Q&&kT(t,e,A,Q,P,r,i,f))}function Us(t,e){var A;for(A=0;A<t.c;A++)if(gt(t.d[A],e.d[A]))return pi(t.d[A],e.d[A])?-1:1;return t0(t.d[t.c],e.d[t.c])?0:pi(t.d[t.c],e.d[t.c])?-1:1}function sk(t,e,A){var n,P,r;for(r=e.length,n=new HP(t.f,r,!1),n.a[0]=0,n.b[0]=0,P=0;P<r;P++)n.k[P]=128-r,n.e[P]=e[P];r<8?hQ(n):itt(t,n,e,A),pP(t.d,n)}function yk(t,e){var A=new Array(e),n;switch(t){case 14:case 15:n=0;break;case 16:n=!1;break;default:return A}for(var P=0;P<e;++P)A[P]=n;return A}function lk(t){var e;return e=new tD,t.a<=t.b?(e.c=t.a,e.b=t.b-t.a):(e.c=t.b,e.b=t.a-t.b),t.c<=t.d?(e.d=t.c,e.a=t.d-t.c):(e.d=t.d,e.a=t.c-t.d),e}function Ot(t,e,A){for(;A!=0;)t.t==0&&((!t.r||t.v!=63)&&(t.v+=64),Oe(t.u,t.v&c1),t.t=6,t.v=0),t.v<<=1,t.v=Jt(Y(t.v,V(e,1))),e=q0(e,1),--A,--t.t}function Gz(t,e,A,n,P,r,i,f,D,Q){var o;return o=bT(l5(t,e,A,n,P,r,i,f,D)),!Q&&o==-1&&(o=bT(l5(t,e,A,n,P,r,i,7,7)),o==-1&&(o=bT(l5(t,e,A,n,P,3,3,7,7)))),o}function bT(t){var e,A,n,P;for(C4||k_(),P=C0,n=N1,A=0;A<13;A++){if(e=P>=Bo.length||t<Bo[P]?-1:t==Bo[P]?0:1,e==0)return P;P=e<0?P-n:P+n,n=n/2|0}return-1}function Jz(t,e){_A();var A;return typeof e===ho&&(e=!0),typeof e===h2?A=new HA(Zi(new JA(e),t)):typeof e===mf&&(A=new HA(EG(new JA(!1),t,e))),A}function hk(t,e,A){var n,P;return n=Gi(t,e++),n>=55296&&n<=56319&&e<A&&EI(P=(Gt(e,t.length),t.charCodeAt(e)))?u0+((n&1023)<<10)+(P&1023):n}function zz(t){var e;return t==null?!1:(e=typeof t,at(e,h2)||at(e,n9)||at(e,mf)||t.$implements__java_io_Serializable||Array.isArray(t))}function Yz(t){var e;try{return e=$R(new P5(t)),me(new SA(e,8))}catch(A){if(A=a1(A),Xt(A,27))return z1(),null;throw At(A)}}function lQ(t,e){var A,n,P;return A=t.a,n=t.b,P=t.c,t.a=A*e[0][0]+n*e[1][0]+P*e[2][0],t.b=A*e[0][1]+n*e[1][1]+P*e[2][1],t.c=A*e[0][2]+n*e[1][2]+P*e[2][2],t}function Ls(t,e,A,n){var P,r,i,f,D;return e==null?null:(aU(t,e,0),P=nt(t,4),f=nt(t,4),P>8&&(P=f),r=nt(t,P),i=nt(t,f),D=new YA(r,i),mp(t,D,e,A,n),D)}function Tk(t,e,A){var n,P,r;if(t.i!=null)for(n=0;n<t.i.length;n++)r=t.p[n]*e,P=t.o[n]-A,t.i[n].a=t.k+r*w.Math.sin(P),t.i[n].b=t.n+r*w.Math.cos(P)}function Kz(t){var e,A,n,P,r,i;for(A=0,P=t.a,r=0,i=P.length;r<i;++r)n=P[r],n&&++A;for(t.b=c(F,k,6,A,15,1),A=0,e=0;e<t.a.length;e++)t.a[e]&&(t.b[A++]=e)}function m0(t,e){t.b!=e&&e>=0&&e<34&&(e!=t.b||e==20||e==33)&&(e!=19||(t.a.U&4)!=0)&&(e!=21||(t.a.U&8)!=0)&&!(e==0||e==17||e==1)&&(t.b=e,au(t.a,e),pD(t.n))}function Xz(t,e){switch(e){default:case 0:return sQ(t.a,0);case 1:return sQ(t.a,1);case 2:return sQ(t.a,2);case 3:return sQ(t.a,3);case 4:return sQ(t.a,4)}}function Zz(t){switch(typeof t){case mf:return DT(t);case n9:return vt((L1(t),t));case h2:return L1(t),t?1231:1237;default:return t==null?0:dD(t)}}function Wz(t){var e,A,n;t.b==t.c&&(n=t.a.length,A=JG(w.Math.max(8,n))<<1,t.b!=0?(e=zI(t.a,A),nF(t,e,n),t.a=e,t.b=0):Bi(t.a,A),t.c=n)}function MP(t,e,A,n,P){var r,i,f;P&&(r=t.vb(n),i=r/2+(t.wb()/8|0),f=t.wb()/2|0,(n==\"+\"||n==\"-\")&&(f=f*2/3),mt(t.$,new QA(e-i,A-f,2*i,2*f))),t.K||t.tb(n,e,A)}function _z(t){var e,A;for(A=!1,e=0;e<t.V.f;e++)R1(t.V,e)!=0&&Bn(t.V,e)&&(A||(G1(t),A=!0),We(t.V,e,R1(t.V,e),!1));A&&dL(t,w.Math.max(t.eb,1))}function $z(t,e){var A,n,P;return P=t.h-e.h,P<0||(A=t.l-e.l,n=t.m-e.m+(A>>22),P+=n>>22,P<0)?!1:(t.l=A&x0,t.m=n&x0,t.h=P&tn,!0)}function az(t,e,A,n,P,r,i){var f,D;return!(e.md()&&(D=t.a.Rb(A,n),D<0||!P&&D==0)||e.nd()&&(f=t.a.Rb(A,r),f>0||!i&&f==0))}function $D(t,e,A,n){var P;return P=c(Ut,Tt,6,3,15,1),P[0]=t.k[n].a-t.k[A].a,P[1]=t.k[n].b-t.k[A].b,P[2]=t.k[n].c-t.k[A].c,P[0]*e[0]+P[1]*e[1]+P[2]*e[2]>0}function tY(t,e){var A;for(A=0;A<t.j.f;A++)t.d[A]&&gQ(t.j,A)==0&&(!e||X(t.j,A)==5&&b1(t.j,A)<0||X(t.j,A)==6||X(t.j,A)==14||tA(t.j,A)&&b1(t.j,A)>0)&&Af(t,A)}function $9(t){var e;return e=w.Math.sqrt(t.a*t.a+t.b*t.b+t.c*t.c),e==0?(z1(),t.a=1,t.b=0,t.c=0,t):(t.a/=e,t.b/=e,t.c/=e,t)}function a9(t){return J1(),!(t==1||t==6||_9(t)||t==2||t==10||t==18||t==36||t==54||t==86||t>103)}function ck(t){var e,A,n,P,r,i;for(i=eP(t),r=i.length,e=i[0].length,P=k1(F,[f0,k],[7,6],15,[r,e],2),A=0;A<r;A++)for(n=0;n<e;n++)P[A][n]=i[A][n].a;return P}function wk(t){var e;return e=0,t==2?e=1:t>=3&&t<=10?e=2:t>=11&&t<=18?e=3:t>=19&&t<=36?e=4:t>=37&&t<=54&&(e=5),(t>=21&&t<=30||t>=39&&t<=48)&&(e*=10),e}function eY(t,e){e.j==1?(t.a!=-1&&(K0(t.e,t.a,t.k),R9(t.e,t.a,t.g),XA(t.e,t.a,t.j),Ne(t.e,t.a,t.i),EP(t.e,t.a,t.n)),j9(t.c)):e.j==0&&(W$(t),j9(t.c))}function ss(t){var e,A;return isNaN(t)?{l:0,m:0,h:524160}:(e=(A=new ArrayBuffer(8),new Float64Array(A)[0]=t,new Uint32Array(A)),Sr(e[0]|0,e[1]|0))}function gk(t){var e,A;if(t.K){for(e=0;e<t.q;e++)if(gt(V(t.B[e],a0),0)){for(t=new z9(t),A=e;A<t.q;A++)gt(V(t.B[A],a0),0)&&(t.C[A]=-1);Ai(t)}}return t}function dk(t,e,A,n,P,r){this.f=t,P!=0&&P!=1?this.c=!0:(this.a=e,this.b=A,this.d=r,this.e=new f1,n!=-1&&Yu(this,n,A-1),n!=-1&&P==1&&Yu(this,io,A+1))}function u8(t,e){G1(t),GT(t.V,t.hb,t.kb,e,0,-1,0,null)&&(t.t!=-1&&(t.t=-1,q1(t,new S1(t,4,!0))),t.eb=w.Math.max(t.eb,3),e1(t.k),q1(t,new S1(t,1,!0)))}function AY(t){var e,A,n,P,r,i;for(r=-1,i=Ve,e=0;e<t.V.q;e++)n=t.hb-kt(t.V,e),P=t.kb-pt(t.V,e),A=w.Math.sqrt(n*n+P*P),A<24&&i>A&&(i=A,r=t.M[e]);return r}function nY(t,e){var A,n,P;for(n=0;n<t.j[e];n++)if(t.n[e][n]!=1){for(A=t.i[e][n],P=0;P<t.j[A];P++)if(t.n[A][P]==1&&rf(t,t.i[A][P])!=0)return!0}return!1}function ff(t,e){var A,n;for(e.v=null,e.t=null,e.K=t.K,e.q=0,A=0;A<t.q;A++)En(t,e,A,0,0);for(e.r=0,n=0;n<t.r;n++)e9(t,e,n,0,0,t.D[0][n],t.D[1][n],!1);t.Yb(e)}function PY(t,e){var A,n;for(A=c(F,f0,7,e,0,2),n=0;n<t.length;n++)t[n]!=null&&(A[n]=c(F,k,6,t[n].length,15,1),sA(t[n],0,A[n],0,t[n].length));return A}function rY(t,e){var A,n;for(A=c(E,g8,10,e,0,2),n=0;n<t.length;n++)t[n]!=null&&(A[n]=c(E,q,6,t[n].length,15,1),sA(t[n],0,A[n],0,t[n].length));return A}function Bk(t,e,A){var n,P,r,i,f;if(r=x1(t,e),n=WA(t,e,r,A),i=((t.u[e]&d8)>>>27)-1,i==-1){for(f=Ku(t.C[e]),P=0;P<f.length-1&&r>f[P]+n;)++P;i=f[P]}return i+n-r}function iY(t,e){var A;if(t.b.length!=e.b.length)return t.b.length<e.b.length?-1:1;for(A=0;A<t.b.length;A++)if(t.b[A]!=e.b[A])return t.b[A]<e.b[A]?-1:1;return 0}function fY(t,e){var A,n,P;t.j||e.startsWith(\"COUNTS\")&&(A=lA(e,Pe(e,7)),n=Q1(oA(e,7,Pe(e,7)),P1,Et),P=Q1(oA(e,A,Pe(e,A)),P1,Et),t.j=new YA(n,P))}function DY(t,e){var A,n,P,r,i,f;for(i=new dA,f=t.c.length==2?t.c:t.b,n=f,P=0,r=n.length;P<r;++P)A=n[P],M9(i,e.k[A]);return md(i,.5),$9(Hx(i,J0(e,t.f[4]))),i}function uY(t,e){var A,n;if(n=!1,t.f.t==null)for(t.f.t=c(F,k,6,e.length,15,1),A=t.f.t.length;--A>=0;)t.f.t[e[A]]=A;return n=_j(t,e,0,n),n=_j(t,e,1,n),n}function QY(t,e,A){var n;if(t.eb==6){if(A)for(n=0;n<t.V.q;n++)Jn(t.V,n,!P0(t.V,n));A9(new z8(A?4:0),t.V),A&&eh(t.V)}R5(t.G,e,new QA(0,0,CD(t.k),E9(t.k)),u0|t.T)}function vk(t,e){var A,n,P;if(dh(e),A=e/31|0,n=t.a.length,A>=n)return-1;for(P=(t.a[A]|0)&Et<<e%31;P==0;){if(++A>=n)return-1;P=t.a[A]|0}return A*31+NL(P)}function RT(t,e){var A,n,P,r,i,f,D,Q;return D=t.h>>19,Q=e.h>>19,D!=Q?Q-D:(P=t.h,f=e.h,P!=f?P-f:(n=t.m,i=e.m,n!=i?n-i:(A=t.l,r=e.l,A-r)))}function Df(t,e,A,n){var P;if(e==0){A<0?n.a=t.T:n.a=-t.T,n.b=0;return}P=w.Math.atan(A/e),e<0&&(P+=U1),n.a=-(t.T*w.Math.sin(P)),n.b=t.T*w.Math.cos(P)}function oY(t,e,A,n,P){var r,i,f,D;for(i=A,f=0,D=i.length;f<D;++f)r=i[f],P[t.d[r]]=I1(P[t.d[r]],e[r]<<t.b[r]),n[t.d[r]]=I1(n[t.d[r]],j1(sc[t.a[r]],t.b[r]))}function UY(t){var e=t.backingJsObject;if(e&&e.stack){var A=e.stack,n=e+$A;return A.substring(0,n.length)==n&&(A=A.substring(n.length)),A.split($A)}return[]}function hQ(t){var e,A;for(e=U1-U1*(t.e.length-2)/t.e.length,A=1;A<t.e.length;A++)t.a[A]=t.a[A-1]+w.Math.sin(e*(A-1)),t.b[A]=t.b[A-1]+w.Math.cos(e*(A-1))}function LY(t,e,A,n,P){var r;return r=Nb(t,e,A,n,P),r<0?Vj(t,e,A,n,P,Kb(t,e,A,n,P)):w.Math.abs(j0(t.b[r][4]))<.001?Vj(t,e,A,n,P,j0(t.b[r][5])):j0(t.b[r][4])}function sY(t,e){var A,n,P,r,i;for(r=0;r<xU(t);r++)for(i=0;i<NU(t);i++)for(A=_d(t,r,i),P=A&ui,n=0;n<X4.length;n++)if(P==X4[n]){GU(t,r,i,(qn&A)+e[n]);break}}function yY(t,e,A){var n,P;if(t.k=e,t.n=A,t.i!=null)for(P=t.i.length,t.o=c(Ut,Tt,6,P,15,1),t.p=c(Ut,Tt,6,P,15,1),n=0;n<P;n++)t.o[n]=t.i[n].a,t.p[n]=t.i[n].b}function ys(t,e){var A,n,P;if($1(t.R,e)<2)return!1;if(O(t.R,e)==2)return!0;for(A=0,P=0;P<O(t.R,e);P++)n=xt(t.R,e,P),_e(t.R,n)&&(A+=dt(t.R,n)-1);return A>1}function tr(){tr=d1,sl=new ji(\"CREATE\",0),Ll=new ji(\"CHANGE_DIF\",1),Ul=new ji(\"CHANGE_ABS\",2),yl=new ji(\"REMOVE\",3),Ro=new ji(\"NO_CHANGE\",4),ll=new ji(\"UNKNOWN\",5)}function Fk(t,e){var A,n,P;return A=e.ed(),P=e.fd(),n=t.get(A),!(!(O1(P)===O1(n)||P!=null&&VP(P,n))||n==null&&!t.containsKey(A))}function lY(t,e,A){var n,P,r,i,f,D,Q;if(t.e!=null)for(r=t.e,f=0,Q=r.length;f<Q;++f)n=r[f],nd(n,e,A);if(t.b!=null)for(P=t.b,i=0,D=P.length;i<D;++i)n=P[i],nd(n,e,A)}function mk(t,e,A){var n,P,r,i,f;for(r=!0,f=N(t.g,e).a,i=Qk(t,f);i!=-1;)n=_(t.k,f,i),P=xt(t.k,f,i),i=Qk(t,n),Nv(t,new kh(n,P,f,A&&r,A&&i==-1),++e),f=n,r=!1}function kk(t,e){var A,n;if(e!=null)for(ut(t.j,1),A=0;A<t.j.f;A++)e[A]!=0&&(n=Bu(t.j,A,x1(t.j,A)),e[A]==15?n>=0&&XA(t.j,A,0):e[A]!=Lh(t.j,A)&&XA(t.j,A,e[A]-n))}function jT(t){var e,A,n;if(A=new f1,e=t.e.indexOf(k0(10)),e==-1)mt(A,t.e);else{for(n=0;e!=-1;)mt(A,oA(t.e,n,e)),n=e+1,e=aI(t.e,10,n);mt(A,HD(t.e,n))}return A}function VP(t,e){return H8(t)?at(t,e):Ci(t)||yu(t)?(L1(t),O1(t)===O1(e)):Ah(t)?t.mb(e):th(t)?Tg(t,e):t&&t.equals?t.equals(e):O1(t)===O1(e)}function hY(t,e,A){var n,P;return n=c(F,k,6,4,15,1),n[0]=e.b,n[1]=e.a,n[2]=A.a,n[3]=A.b,P=qQ(t.R,n),w.Math.abs(P)<.3||w.Math.abs(P)>Cp?3:P<0?2:1}function TY(t,e,A){var n,P;return n=c(F,k,6,4,15,1),n[0]=e.b,n[1]=e.a,n[2]=A.a,n[3]=A.b,P=qQ(t.R,n),w.Math.abs(P)<.3||w.Math.abs(P)>Cp?3:P<0?1:2}function lA(t,e){var A;if(e==-1)return-1;for(A=e+1;A<t.length;A++)if(Gt(A,t.length),t.charCodeAt(A)!=32&&(Gt(A,t.length),t.charCodeAt(A)!=9))return A;return-1}function cY(t){var e,A;for(t.b=null,e=0;e<t.g.g;e++)gu(t.g,e)&&(!t.b&&(t.b=new f1),A=new Z2,A.a=z(t.g,0,e),A.b=z(t.g,1,e),A.d=q3(t.g,e),A.c=Th(t.g,e),mt(t.b,A))}function bk(){hp();var t,e,A,n,P,r,i;for(Tu(this),r=new BU,A=JV,n=0,P=A.length;n<P;++n)e=A[n],t=Zi(new Ko,e),ut(t,31),wK(r,t),i=new wg(t),i.a=M8(i.b),this.a.push(i)}function TQ(t){var e,A,n;for(Em(t),Ba(new u7,dT(t)),n=c(F,k,6,t.L.length,15,1),e=0;e<t.V.q;e++)A=t.M[e],We(t.V,e,R1(t.L[A],n[A]),R1(t.V,e)==0||Bn(t.V,e)),++n[A]}function wY(t,r){var A=vE;A||(A=Z.createElement(\"canvas\"),vE=A);var n=\"\"+t.b+\"px \"+t.a,P=A.getContext(\"2d\");P.font=n;var r=P.measureText(r);return r.width}function Rk(t,e){var A,n,P,r,i;for(r=Ib(t,t.D[0][e])||Ib(t,t.D[1][e])?5:3,n=0;n<2;n++)A=t.D[n][e],P=dt(t,e)+(i=Cn(t,A),i+WA(t,A,i,t.C[A]))-x1(t,A),r>P&&(r=P);return r}function gY(t,e,A){var n,P,r,i,f;if(n=xt(t.k,e,A),i=_(t.k,e,A),t.e[n]!=0){for(f=8*t.q[e]+1,P=N(t.g,t.q[e]).c,r=0;r<P.length&&i!=P[r];r++)++f;return f}return 8*t.q[i]}function dY(t){var e,A,n,P;for(e=\"x3\",A=\"eB\",P=w.Math.min(t.length,5),n=P-1;n>=0;n--)if(at(t[n].d,e)||at(t[n].d,A)){t.length>=n+1&&t.splice(0,n+1);break}return t}function BY(t){var e,A,n,P;for(P=0,n=null,A=new Zt(t);A.a<A.c.a.length;)e=$t(A),P<e.b[0].e.length*e.b[1].e.length&&(P=e.b[0].e.length*e.b[1].e.length,n=e);return n}function cQ(t){var e,A,n;for(n=new Zt(t.g);n.a<n.c.a.length;)if(e=$t(n),e.K)return!0;for(A=new Zt(t.f);A.a<A.c.a.length;)if(e=$t(A),e.K)return!0;return!1}function Hn(t,e){var A;return o0(t)&&o0(e)&&(A=t/e,j2<A&&A<fP)?A<0?w.Math.ceil(A):w.Math.floor(A):pn(O5(o0(t)?pe(t):t,o0(e)?pe(e):e,!1))}function vY(t,e){var A,n,P;for(t.g=c(F,k,6,t.k.q,15,1),A=tR(t.k,t.g,e,!0),t.q=c(NPt,A0,177,A,0,1),P=!0,n=0;n<A;n++)P=P&!!(t.q[n]=Qtt(t.r,t.k,t.g,n));return P}function FY(t){var e;try{return t=Kn(t),ds(t),e=$R(new P5(t)),me(new SA(e,8))}catch(A){if(A=a1(A),Xt(A,27))return z1(),null;throw At(A)}}function uf(t,e,A){var n,P,r;if(P=x1(t,e),P-=WA(t,e,P,t.C[e]),A&&(P-=t.e[e]-t.j[e]),r=Ku(t.C[e]),P<=r[0])return-1;for(n=1;n<r.length;n++)if(r[n]>=P)return r[n];return P}function jk(t,e,A,n,P){this.f=e,this.a=A,this.b=n,this.c=P,this.j=Wv(t.a,e,A,n,P),this.g=U2(t.d,e,A,n),this.i=U2(t.d,e,P,n),this.d=lR(t.n,e,A,n,P),this.e=lR(t.n,e,P,n,A)}function pk(t,e,A,n,P,r,i){var f,D,Q,o,L;if(o=P[r],Q=r==i-1,f=Q?n:0,L=yk(f,o),n!=10&&B(d(t,i-r),e[r],A[r],f,L),!Q)for(++r,D=0;D<o;++D)L[D]=pk(t,e,A,n,P,r,i);return L}function wQ(t,e){var A,n;for(A=0;A<t.r;A++)for(n=0;n<2;n++)t.D[n][A]==e&&(t.H[A]=512);Wu(t,t.w[e]),t.C[e]=-1,t.v!=null&&(t.v[e]=null),t.t!=null&&(t.t[e]=null),vf(t),t.T=0}function mY(t,e){var A,n,P,r;for(A=t.e[e],r=c(F,k,6,A,15,1),P=0;P<A;P++)r[P]=(t.i[e][P]<<16)+P;for(r.sort(Fe(D0.prototype.hd,D0,[])),n=0;n<A;n++)r[n]&=c1;return r}function kY(t,e){var A,n,P;for(P=new V0,n=0;n<t.a.a.length;n++)P.a.length!=0&&(P.a+=\"+\"),A=new FA(N(t.a,n)),J(P,me(A)),e&&(P.a+=\" \",J(P,Su(A,!0)));return P.a}function bY(t,e){if(t.b==-1)t.a=c(qtt,A0,170,e,0,1),t.b=e,t.c=e-1;else do t.c=t.c==0?t.b-1:t.c-1;while(t.a[t.c]&&CT(t.a[t.c]));return!t.a[t.c]&&(t.a[t.c]=new Gl),t.c}function pT(t,e,A){var n,P,r;for(P=t._c().Tb();P.bd();)if(n=P.cd(),r=n.ed(),O1(e)===O1(r)||e!=null&&VP(e,r))return A&&(n=new TU(n.ed(),n.fd()),P.dd()),n;return null}function Mn(t,e,A,n){F9(t.L,u1(t.L,A,n))?(Z1(t,-3),t.qb(e),Z1(t,t.Q)):t.p[A]!=t.p[n]?lK(t,e,A,n):t.p[A]!=0?(Z1(t,t.p[A]),t.qb(e),Z1(t,t.Q)):t.qb(e)}function gQ(t,e){var A,n,P,r,i;if(!t.K||t.v==null||t.v[e]==null)return Bk(t,e,t.C[e]);for(i=0,n=t.v[e],P=0,r=n.length;P<r;++P)A=n[P],i=w.Math.max(i,Bk(t,e,A));return i}function Ck(){Ck=d1,F8=vt(w.Math.round(vt(w.Math.round((de==-1&&(de=globalThis.devicePixelRatio||1),de*2))))),dn=(de==-1&&(de=globalThis.devicePixelRatio||1),de*21)}function dQ(t,e){var A,n,P,r;return P=w.Math.min(t.c,e.c),r=w.Math.min(t.d,e.d),n=w.Math.max(t.c+t.b,e.c+e.b)-P,A=w.Math.max(t.d+t.a,e.d+e.a)-r,new QA(P,r,n,A)}function RY(t,e,A,n){a7();var P=Al;Rt=e,y1=A,gtt=n;function r(){for(var i=0;i<P.length;i++)P[i]()}if(t)try{_E(r)()}catch(i){t(e,i)}else _E(r)()}function Hk(t,e,A,n){var P,r,i;for(P=0;P<t.q;P++)(!n||(t.u[P]&512)!=0)&&(i=t.R[P]*e,r=t.Q[P]-A,t.J[P].a=t.U+i*w.Math.sin(r),t.J[P].b=t.V+i*w.Math.cos(r));n&&(t.T&=7)}function CT(t){var e,A,n,P,r;if(!t.d)if(t.b==-1)t.d=!0;else{for(r=!1,A=t.a,n=0,P=A.length;n<P;++n)if(e=A[n],!e)r=!0;else if(!CT(e))return!1;t.d=!r}return t.d}function jY(t){var e,A,n,P,r,i;if(P=UY(t),r=c(mE,T0,114,0,0,1),e=0,n=P.length,n==0)return r;for(i=xj(P[0]),at(i.d,s4)||(r[e++]=i),A=1;A<n;A++)r[e++]=xj(P[A]);return r}function Mk(t,e,A){for(var n,P;A<0;)A=A+360<<16>>16;for(;A>=360;)A=A-360<<16>>16;n=e.a,A!=(t.j==null?-1:t.j[n])&&(P=A-(t.j==null?-1:t.j[n]),JZ(t,e,U1*P/180),Zm(t,n,A))}function BQ(t){var e,A,n;if(!t.a)return null;for(t.e||JR(t,1),e=null,n=new Zt(t.a);n.a<n.c.a.length;)A=$t(n),!A.b&&(!e||e.e>A.e)&&(e=A);return e?e.b=!0:t.a=null,e}function Vk(t){var e,A,n,P;for(n=-1,P=Et,e=0;e<t.k.f;e++)t.b[e]||(A=t.a[e],Qe(t.k,e)&&(A+=wn),O(t.k,e)==0?A+=1056964608:A+=O(t.k,e)<<24,P>A&&(P=A,n=e));return n}function Qf(t,e,A){var n,P;if(e<t.f&&r0(t.p,e)){for(P=(ut(t,7),t.p),n=0;n<P.j.a.length;n++)if(!(N(P.k,n).length!=A||!yA(P,n,e))&&t.b[n]==0)return!0}return!1}function pY(t,e){var A,n;if(n=Y1(e),A=!1,n==null||!n.startsWith(\"$RXN\"))throw At(new C1(\"'$RXN' tag not found\"));return at(n,DH)?A=O$(t,e,!1):A=ua(t,e,!1),A}function Ek(t,e,A){if(t.f[e])return 0;if(t.a){if(Ht(t.j,e)!=3)return 0}else if(Ht(t.j,e)>3)return 0;return X(t.j,e)==6?(A&&E0(t.j,e,1),2):X(t.j,e)==5?4:0}function ZA(t,e,A){var n,P,r,i,f,D,Q,o;for(i=-1,P=wP(t,t.q,t.r,gn),f=Ve,D=P*P/12,n=0;n<t.q;n++)Q=t.J[n].a,o=t.J[n].b,r=(e-Q)*(e-Q)+(A-o)*(A-o),r<D&&r<f&&(f=r,i=n);return i}function Sk(t,e){var A,n,P,r,i,f;for(n=t,P=0,r=n.length;P<r;++P)if(A=n[P],e.j[A]!=0)return!1;for(i=b1(e,t[0]),f=1;f<t.length;f++)if(b1(e,t[f])!=i)return!1;return!0}function qk(t,e,A){var n,P;return t.L.q==0?null:(t.v=yR(t),n=t.R.c*M8(t.L),P=new Zs(t.v,e,n,A),P.c==1&&P.a==0&&P.b==0?P=null:(Hu(P,t.R),Iu(P,t.v)),T5(t,e,n,A),P)}function CY(t){var e,A,n,P;for(ut(t,1),P=0,e=0;e<t.q;e++)n=t.A[e]!=0?t.A[e]:or[t.C[e]],P+=n+It(t,e)*or[1],t.C[e]>=171&&t.C[e]<=190&&(A=t.e[e],A>2&&(P-=(A-2)*or[1]));return P}function Ik(t,e,A){var n,P,r,i,f,D;for(P=0,r=0;r<t.j[e];r++)if(n=t.i[e][r],n!=A){for(i=0,f=0;f<t.j[n];f++)D=t.i[n][f],D!=e&&_e(t,t.k[n][f])&&t.j[D]>2&&++i;i==2&&++P}return P}function HY(t,e){var A,n,P,r,i,f,D,Q;for(D=-1,n=0,i=0;i<2;i++)for(A=t.D[i][e],f=0;f<t.e[A];f++)P=t.i[A][f],P!=t.D[1-i][e]&&(r=t.k[A][f],Q=CQ(t,r,P),n<Q&&(n=Q,D=r));return D}function MY(t,e){var A,n,P,r,i,f;for(A=new f1,n=0;n<e.q;n++)if(e.e[n]>1)for(P=0;P<e.e[n];P++)for(i=e.i[n][P],r=P+1;r<e.e[n];r++)f=e.i[n][r],mt(A,new km(t,e,i,n,f));return A}function VY(t,e){var A,n,P,r;for(A=1;A<e.q;A++)for(n=0;n<A;n++)!t[A][n]&&(t[A][n]=new FF(Or(A,n),(r=e.C[A],(r<(l2(),xA).length?xA[r]:2)+(P=e.C[n],P<xA.length?xA[P]:2))))}function EY(t){var e,A,n,P,r;for(r=new xg,A=t,n=0,P=A.length;n<P;++n)e=A[n],r.a?J(r.a,r.b):r.a=new Fn(r.d),Fg(r.a,e);return r.a?r.e.length==0?r.a.a:r.a.a+(\"\"+r.e):r.c}function HT(t,e){var A,n,P;return P=-1,n=-1,(t.G&128)!=0||(V8(t.L,e)&&(P=ne(t.L,e),n=EA(t.L,e)),A=os(t.L,e),A!=-1&&(P=cP(t.L,A),n=Wi(t.L,A)),P!=-1&&P!=0&&(P|=n<<8)),P}function MT(t,e,A,n,P,r,i,f){var D,Q;for(Q=1;Q<f;Q++){for(D=i[Q];D<i[Q+1];D++)A[D]=r[P[D]]+(A[n[D]]<<8);if(zR(t,e,A,n,P,i,Q),A[1]!=A[2])return!0;Q>1&&QR(A,n,i,Q)}return!1}function xk(t,e,A){var n,P;if(A[0]=0,t[e]==43||t[e]==45){for(P=t[e],n=1,++A[0];t[e+A[0]]==P;)++n,++A[0];return n==1&&Xn(t[e+1]&c1)&&(n=t[e+1]-48,++A[0]),P==43?n:-n}return 0}function Zr(t,e,A){var n,P,r,i,f;for(VJ(t),P=(t.i==null&&(t.i=c(SV,T0,27,0,0,1)),t.i),r=0,i=P.length;r<i;++r)n=P[r],Zr(n,e,\"\t\"+A);f=t.e,f&&Zr(f,e,A)}function VT(t,e){var A,n,P;for(P=c(Ee,PA,6,t.d.length,15,1),n=c(Ee,PA,6,t.d.length,15,1),A=0;A<t.d.length;A++)P[A]=lO(lL(e,t.a[A]),t.e[A]),n[A]=fl[t.e[A]];return new G7(P,n)}function ET(){ET=d1;var t,e,A,n;for(Qc=c(Ut,Tt,6,25,15,1),oc=c(Ut,Tt,6,33,15,1),n=152587890625e-16,e=32;e>=0;e--)oc[e]=n,n*=.5;for(A=1,t=24;t>=0;t--)Qc[t]=A,A*=.5}function Nk(t,e){var A,n,P,r,i;for(P=-1,r=Ve,n=0;n<t.e.length;n++)i=U1*t.e[n]/180,A=w.Math.abs(e-i),A>U1&&(A=F0-A),A/=10+w.Math.sqrt(t.b[n]),r>A&&(r=A,P=n);return P}function SY(t,e,A){var n,P,r;if(n=A[e],n!=-1&&d0(t.a,n)!=0&&kK(t,e,n,A)){if(r=d0(t.b,e),P=d0(t.a,n),r==3){if(P==1||P==2)return 5}else if(P==3||WY(t,e,A)==(r==P))return 5}return 0}function qY(t){var e,A,n;return G(t,0)>=0?(A=Hn(t,xf),n=Yr(t,xf)):(e=DA(t,1),A=Hn(e,5e8),n=Yr(e,5e8),n=I1(j1(n,1),V(t,1))),Y(j1(n,32),V(A,T1))}function IY(t,e){Pr();var A,n;for(n=(ke(),q2),A=t;e>1;e>>=1)(e&1)!=0&&(n=bP(n,A)),A.d==1?A=bP(A,A):A=new am(SR(A.a,A.d,c(F,k,6,A.d<<1,15,1)));return n=bP(n,A),n}function ls(t,e){var A,n;for(L1(e),n=t.b.a.length,mt(t.b,e);n>0;){if(A=n,n=(n-1)/2|0,t.a.Rb(N(t.b,n),e)<=0)return qr(t.b,A,e),!0;qr(t.b,A,N(t.b,n))}return qr(t.b,n,e),!0}function aD(t,e){var A,n,P,r;for(l1(t.j,e)==1&&(w0(t.j,e,2),t.k+=2),P=0;P<2;P++)for(A=z(t.j,P,e),t.d[A]=!1,r=0;r<O(t.j,A);r++)n=xt(t.j,A,r),t.e[n]&&(t.e[n]=!1,--t.c)}function xY(t){var e,A,n,P,r;for(A=0;A<t.j.g;A++)if(dt(t.j,A)==2){for(P=0;P<2;P++)if(e=z(t.j,P,A),X(t.j,e)<=8){for(r=0;r<O(t.j,e);r++)if(n=xt(t.j,e,r),t.e[n]){Af(t,e);break}}}}function NY(t,e){var A,n,P,r,i,f;if(!(e.length<=0||e[0]<64))for(aU(t,e,0),f=nt(t,4),P=nt(t,1)==1,r=nt(t,1)==1,A=0;A<t.g.f;A++)i=nt(t,f),n=P,P&&r&&(n=nt(t,1)==1),We(t.g,A,i,n)}function OY(t,e,A,n,P){var r,i;for(r=0,i=0;i<P;i++)r=I1(r,l0(V(e[i],T1),V(n[i],T1))),t[i]=Jt(r),r=q0(r,32);for(;i<A;i++)r=I1(r,V(e[i],T1)),t[i]=Jt(r),r=q0(r,32)}function GY(t,e,A,n,P){var r,i;if(r=x3(t.a,t.b,P),i=_U(x3(e.a,e.b,P)),n.containsKey(r)){if(A)throw At(new rU(\"Duplicate key \"+r));n.put(r,null.wd(n.get(r)))}else n.put(r,i)}function JY(t){var e,A,n;for(e=0;e<t.R.f;e++)!v9(t.R,e)&&t.db[e]==3&&ZU(t.R,e,!0);for(A=0;A<t.R.g;A++)t.o[A]==3&&(n=dt(t.R,A),n==1?ZU(t.R,z(t.R,0,A),!0):n==2&&w0(t.R,A,386))}function ST(t,e,A,n){var P,r,i;if(n==0)sA(e,0,t,A,t.length-A);else for(i=32-n,t[t.length-1]=0,r=t.length-1;r>A;r--)t[r]|=e[r-A-1]>>>i,t[r-1]=e[r-A-1]<<n;for(P=0;P<A;P++)t[P]=0}function g0(t,e){var A,n,P;if(e<0||e>999){J(t.a,\"  ?\");return}for(A=!1,n=0;n<3;n++)P=e/100|0,P==0?n==2||A?Oe(t.a,48):Oe(t.a,32):(Oe(t.a,48+P&c1),A=!0),e=10*(e%100)}function Ok(t,e,A,n){cT(),this.c=MD(t,hV,this),this.d=e,this.e=A,this.a=n,this.k=X(this.e,n),this.g=ye(this.e,n),this.j=b9(this.e,n),this.i=mA(this.e,n),this.n=Wn(this.e,n),np(this)}function qT(t,e,A,n,P){var r,i,f,D;for(r=-1,i=-1,D=0;D<Ht(t.e,e);D++)if(f=xt(t.e,e,D),f==A||f==n)if(r==-1)r=D;else{i=D;break}t.a[e][i][r]==0&&(t.a[e][i][r]=P,t.d[e]+=P,++t.c[e])}function zY(t,e){var A,n,P;return P=c(F,k,6,2,15,1),u1(t,e[1],e[2])!=-1?(P[0]=e[2],P[1]=e[1]):(A=c(F,k,6,16,15,1),n=L2(t,A,e[1],e[2],15,null,null),P[0]=A[1],P[1]=A[n-1]),P}function YY(t,e){try{return e?(t=Kn(t),IR(t,!0),Na(t),me(new FA(t))):me(new FA(t))}catch(A){if(A=a1(A),Xt(A,27))return z1(),null;throw At(A)}}function Gk(t,e,A){$5(),wB.call(this,t,e),this.j=1,this.k=10,this.n=400,this.f=400,this.i=!0,this.d=\"black\",this.b=new f1,this.a=new f1,this.c=new V0,this.e=new a3(12),this.g=A,++E2}function KY(t){var e,A,n,P,r;for(A=0,fi(t),ut(t,7),e=0;e<t.f;e++)try{r=Ay(t,e,6241),P=(n=ar(Jf,UQ(r)),n<0?-1:n),P!=-1&&(A+=Y4[P])}catch(i){if(i=a1(i),!Xt(i,19))throw At(i)}return A}function k0(t){var e,A;return t>=u0?(e=55296+(t-u0>>10&1023)&c1,A=56320+(t-u0&1023)&c1,String.fromCharCode(e)+(\"\"+String.fromCharCode(A))):String.fromCharCode(t&c1)}function t2(t,e){var A;return w.Math.abs(t)>w.Math.abs(e)?(A=e/t,A=w.Math.abs(t)*w.Math.sqrt(1+A*A)):e!=0?(A=t/e,A=w.Math.abs(e)*w.Math.sqrt(1+A*A)):A=0,A}function tA(t,e){var A,n,P,r;if(t.K){if(gt(V(t.B[e],1),0))return!1;if(t.v!=null&&t.v[e]!=null){for(n=t.v[e],P=0,r=n.length;P<r;++P)if(A=n[P],!_9(A))return!1}}return _9(t.C[e])}function XY(t,e){var A,n,P,r;if(t.K){if(gt(V(t.B[e],1),0))return!1;if(t.v!=null&&t.v[e]!=null){for(n=t.v[e],P=0,r=n.length;P<r;++P)if(A=n[P],!a9(A))return!1}}return a9(t.C[e])}function ZY(){ry();var t,e,A,n,P,r,i,f,D;for(rl=new lP,i=k4,f=0,D=i.length;f<D;++f)for(r=i[f],P=L8(r[0],\";\"),e=P,A=0,n=e.length;A<n;++A)t=e[A],ze(rl,ai(t.toLowerCase(),\"-\"),r[1])}function Jk(t){Bs();var e,A,n,P,r;for(ut(t,7),P=c(Pt,ft,6,t.g,16,1),n=0,A=0;A<t.g;A++)h$(t,A)&&(P[A]=!0,++n);for(r=c(F,k,6,n,15,1),n=0,e=0;e<t.g;e++)P[e]&&(r[n++]=e);return r}function WY(t,e,A){var n,P,r,i,f,D,Q;if(D=!1,$1(t.b,e)==0)for(f=1;f<O(t.b,e);f++)for(Q=0;Q<f;Q++)n=_(t.b,e,f),P=_(t.b,e,Q),r=A[n],i=A[P],r!=-1&&i!=-1&&r>i^n>P&&(D=!D);return D}function IT(t,e,A){var n,P;for(P=!1,n=0;n<t.V.f;n++)R1(t.V,n)!=0&&(A&&!Bn(t.V,n)||e&&Bn(t.V,n))&&(P||(G1(t),P=!0),We(t.V,n,0,!1));P&&(e||TQ(t),dL(t,w.Math.max(t.eb,1)))}function zk(){zk=d1,Tl=B(d(F,1),k,6,15,[0,2,1,3]),eE=B(d(it,1),Dt,2,6,[\"plain\",\"italic\",\"bold\",\"italics & bold\"]),tE=B(d(it,1),Dt,2,6,[\"8\",\"9\",\"10\",\"12\",\"14\",\"18\",\"24\",\"32\"])}function hs(t,e){var A,n;if(!e)return null;for(n=c(F,k,6,(s9.length+31)/32|0,15,1),e=gk(e),un(t.g,e),A=0;A<s9.length;A++)yn(t.g,V2[A]),ln(t.g,1,4)>0&&(n[A/32|0]|=1<<31-A%32);return n}function Yk(t,e){var A,n,P,r;for(A=c(F,k,6,t.j[e]-EL(t,e),15,1),r=0,P=0;P<t.j[e];P++)n=t.i[e][P],gt(V(t.B[n],a0),0)||(A[r++]=t.C[n]);return A.sort(Fe(D0.prototype.hd,D0,[])),A}function Ts(t,e){var A;if(t==null)return e==null?0:1;if(e==null)return-1;for(A=0;A<t.length;A++){if(e.length==A)return 1;if(t[A]!=e[A])return t[A]<e[A]?-1:1}return e.length>t.length?-1:0}function cs(t,e){var A;if(t==null)return e==null?0:1;if(e==null)return-1;for(A=0;A<t.length;A++){if(e.length==A)return 1;if(t[A]!==e[A])return t[A]<e[A]?-1:1}return e.length>t.length?-1:0}function _Y(t,e,A,n){var P,r;for(r=e,P=r.c==null||t.a.Rb(A.c,r.c)>0?1:0;r.a[P]!=A;)r=r.a[P],P=t.a.Rb(A.c,r.c)>0?1:0;r.a[P]=n,n.b=A.b,n.a[0]=A.a[0],n.a[1]=A.a[1],A.a[0]=null,A.a[1]=null}function $Y(t){var e,A;try{return A=new Sd(t),Jb(A,4e3,Lo),is(A,A.i)}catch(n){if(n=a1(n),Xt(n,185))return NaN;if(Xt(n,19))return e=n,Zr(e,(z1(),Ti),\"\"),NaN;throw At(n)}}function Kk(t,e){var A,n,P,r,i;for(r=e.length,i=c(F,k,6,r,15,1),n=0;n<r;n++)for(A=n==r-1?e[0]:e[n+1],P=0;P<O(t.i,e[n]);P++)if(_(t.i,e[n],P)==A){i[n]=xt(t.i,e[n],P);break}return i}function ws(t,e,A){var n,P;if((t.u[e]&cn)==0||(t.u[A]&cn)==0)return!1;for(P=(ut(t,7),t.p),n=0;n<P.j.a.length;n++)if(N(P.k,n).length==5&&yA(P,n,e)&&yA(P,n,A))return!0;return!1}function aY(t){var e,A;return t.f||(A=new $2,t.a&&(A.a=!0),t.f=$B(A,(e=t.g.a,e)),t.f&&(t.f.P==null||t.f.P.length==0)&&W2(t.f,t.e!=-1&&t.c!=null?t.c[t.e]:t.f?t.f.P:null)),t.f}function tK(t,e,A){var n,P,r,i,f,D,Q;if(D=!1,$1(t.g,e)==0)for(f=1;f<O(t.g,e);f++)for(Q=0;Q<f;Q++)n=_(t.g,e,f),P=_(t.g,e,Q),r=R1(t.g,n),i=R1(t.g,P),A[r]>A[i]^n>P&&(D=!D);return D}function eK(t,e){var A;for(A=0;e<t.length&&(t[e]!=93||A!=0);)t[e]==91?++A:t[e]==93&&--A,++e;if(e==t.length)throw At(new C1(\"SmilesParser: No matching closing bracket found.\"));return e+1}function Xk(t,e,A){return t.L!=null&&t.L[e]!=null&&t.L[e][A]?null:t.I[e]==0&&t.B[A]==0?(O(t.u,A)!=0&&(t.H[t.G[e]]=!0),O(t.D,e)!=0&&(t.A[t.w[A]]=!0),new cD(e,A)):null}function Zk(t){var e,A,n;for(n=new wL(\", \",\"[\",\"]\"),A=t.Tb();A.bd();)e=A.cd(),wv(n,O1(e)===O1(t)?\"(this Collection)\":e==null?P9:XD(e));return n.a?n.e.length==0?n.a.a:n.a.a+(\"\"+n.e):n.c}function e2(t){var e,A,n;if(il==null){if(e=KD(\"/resources/csd/\"+t),e)return il=\"csd/\",new Pn(new di((n=e,c0(),n)));il=\"cod/\"}return new Pn(new di((A=KD(\"/resources/\"+il+t),c0(),A)))}function AK(t){var e,A;try{for(t=Kn(t),ds(t),e=t.r,A=0;A<e;A++)t.H[A]=1,t.T=0;return me(new FA(t))}catch(n){if(n=a1(n),Xt(n,27))return z1(),null;throw At(n)}}function Wk(t,e){var A,n,P,r;for(n=0,P=t.length;n<P;n++){r=t[n];try{r[1]?r[0].wd()&&(e=mx(e,r)):r[0].wd()}catch(i){if(i=a1(i),Xt(i,27))A=i,Yx(Xt(A,163)?A.Mc():A);else throw At(i)}}return e}function _k(t){var e,A,n,P,r,i,f,D;for(f=c(F,k,6,t.f,15,1),D=(ut(t,7),t.p),r=0;r<w.Math.min(32,D.j.a.length);r++)for(i=N(D.j,r),A=i,n=0,P=A.length;n<P;++n)e=A[n],f[e]|=1<<r;return f}function xT(t){var e,A,n,P;if(A=Jt(DA(t,32)),A==0)return n=Jt(t)>>>0,n.toString(16);e=c(lr,te,6,17,15,1),P=17;do e[--P]=Kx(Jt(t)&15),t=DA(t,4);while(G(t,0)!=0);return an(e,P,17-P)}function x1(t,e){var A,n,P,r,i,f;for(t.$b(1),i=!1,n=!1,f=0,P=0;P<t.e[e];P++)(!t.K||!Qe(t,t.i[e][P]))&&(r=t.n[e][P],f+=r,r>1&&(i=!0),A=t.k[e][P],t.H[A]==8&&(n=!0));return n&&!i&&++f,f}function vQ(t,e){var A,n,P,r;for(l1(t.k,e)==1&&w0(t.k,e,2),P=0;P<2;P++)for(A=z(t.k,P,e),z0(t.k,A)&&(Jn(t.k,A,!1),--t.b),r=0;r<O(t.k,A);r++)n=xt(t.k,A,r),t.g[n]&&(t.g[n]=!1,--t.c)}function NT(t,e,A){var n,P,r,i,f;for(P=0,i=new Zt(A);i.a<i.c.a.length;)r=$t(i),r.length!=0&&(f=KL(e,r).b,P<f&&(P=f));return n=t.c*fo*(A.a.length-1)+t.c,new QA(t.i[0].a,t.i[0].b-t.c/2,P,n)}function Le(t){if(w4==null&&(w4=new RegExp(\"^\\\\s*[+-]?(NaN|Infinity|((\\\\d+\\\\.?\\\\d*)|(\\\\.\\\\d+))([eE][+-]?\\\\d+)?[dDfF]?)\\\\s*$\")),!w4.test(t))throw At(new XP(T2+t+'\"'));return parseFloat(t)}function OT(t){var e,A;for(A=k1(F,[nA,f0],[28,7],0,[2,32],2),e=0;e<t.R.f;e++)t.M[e]&&(t.bb[e]==1?A[0][t.ab[e]]=nf(A[0][t.ab[e]],e):t.bb[e]==2&&(A[1][t.ab[e]]=nf(A[0][t.ab[e]],e)));return A}function gs(t){var e,A,n,P;for(P=new Pn(new di((A=KD(t),c0(),A))),n=new eu;;)try{if(e=Y1(P),e!=null)js(n,e);else break}catch(r){if(r=a1(r),Xt(r,75))break;throw At(r)}return n}function $k(t,e){var A,n,P;return e&=63,e<22?(A=t.l<<e,n=t.m<<e|t.l>>22-e,P=t.h<<e|t.m>>22-e):e<44?(A=0,n=t.l<<e-22,P=t.m<<e-22|t.l>>44-e):(A=0,n=0,P=t.l<<e-44),S0(A&x0,n&x0,P&tn)}function ak(t,e){var A,n,P,r,i;if(at(t.a,\"Helvetica\")){for(r=0,n=0,P=e.length;n<P;n++)A=(Gt(n,e.length),e.charCodeAt(n)),r+=(A<128?i=FE[A]:i=wA,i*t.b/20);return r}else return wY(t,e)}function tb(t,e,A){var n,P,r,i;return P=t.c[A][0]*U1/180,r=t.c[A][1]*U1/180,i=t.e[A]*U1/180,e<i-U1?e+=F0:e>i+U1&&(e-=F0),n=(i-e)/(i-(e<i?P:r)),n<1?0:n<2?(n-=1,n*n):1}function nK(t,e){var A,n,P,r,i;if(t.e!=null)for(A=p5(t)/t.p.c,P=t.e,r=0,i=P.length;r<i;++r)n=P[r],CS(n,t.f),n.r=A/n.R.c,Z5(n,e);if(t.b!=null)for(P=t.b,r=0,i=P.length;r<i;++r)n=P[r],Z5(n,e)}function Pe(t,e){var A,n,P,r;for(A=!1,P=!1,n=e;n<t.length;n++)if(r=(Gt(n,t.length),t.charCodeAt(n)),r==40?A=!0:r==41?A=!1:r==34&&(P=!P),!A&&!P&&(r==32||r==9))return n;return-1}function PK(t){lU();var e,A,n,P;for(h5(t,1),n=t.q,A=c(it,Dt,2,n,6,1),e=0;e<n;e++)P=Kn(t),EP(P,e,(J1(),X0)[P.C[e]]+\"*\"),P.C[e]==1?K0(P,e,H4):R9(P,e,P.A[e]+5),UO(P),A[e]=me(new SA(P,8));return A}function ds(t){var e,A;for(ut(t,15),t.L=!1,e=0;e<t.q;e++)t.u[e]&=dy,(t.u[e]&3)!=0?t.u[e]|=no:t.u[e]&=gy;for(A=0;A<t.r;A++)(t.F[A]&3)!=0&&dt(t,A)==2?t.H[A]=386:t.H[A]&=-385;t.T&=-249}function FQ(t,e,A,n,P){var r;n|=P1,r=oF(A),n!=-1&&(ae(e,n),Rh(e,r[0],r[1],dn,dn)),A==20?XL(e,t.c,0,t.d*84,84,84,r[0],r[1],dn,dn):XL(e,P?t.g:t.i,(r[0]-F8)*t.j,(r[1]-F8)*t.j,84,84,r[0],r[1],dn,dn)}function A2(t,e){var A,n,P,r;for(P=!1,n=0;n<t.R.g;n++)JQ(t,n,1)&&(t.q[n]=t.L,e&&QW(t,n),P=!0);for(r=!1,A=0;A<t.R.f;A++)ty(t,A,1)&&(t.ib[A]=t.L,e&&W_(t,A),r=!0);return r&&(t.L=!t.L),P||r}function Wr(t,e){return t.q>=t.M&&kQ(t,t.M*2),t.C[t.q]=0,K0(t,t.q,e),t.s[t.q]=0,t.u[t.q]=0,t.B[t.q]=0,t.w[t.q]=0,vU(t.J[t.q],0,0,0),t.v!=null&&(t.v[t.q]=null),t.t!=null&&(t.t[t.q]=null),t.T=0,t.q++}function rK(t){var e,A,n,P,r;for(r=new LU(t.g,t.f),P=c(F,k,6,t.g.q,15,1),A=0;A<t.g.q;A++)P[A]=R1(t.g,A);for(n=c(F,k,6,t.f.q,15,1),e=0;e<t.f.q;e++)n[e]=R1(t.f,e);return-Ys(r,$T(r,P,n))*.25}function ti(t){var e,A,n,P;for(P=new Pn(new di((n=KD(t),c0(),n))),e=new f1;;)try{if(A=Y1(P),A!=null)e.a.push(A);else break}catch(r){if(r=a1(r),Xt(r,75))break;throw At(r)}return e}function iK(t,e){var A,n,P;for(A=c(F,k,6,t.e.length,15,1),P=0;P<t.e.length;P++)n=j1(sc[t.a[P]],t.b[P]),gt(V(e.c[t.d[P]],n),0)?A[P]=Jt(q0(V(e.b[t.d[P]],n),t.b[P])):A[P]=-1;return A}function fK(t,e){D8();var A,n,P,r;for(n=c(Pt,ft,6,e.q,16,1),A=0;A<e.f;A++)if(!n[A]&&e.o[A]==2&&e.C[A]<=8){for(P=PW(A,e),r=0;r<P.length;r++)n[P[r]]=!0;P[0]!=P[P.length-1]&&mt(t,new V7(P))}}function GT(t,e,A,n,P,r,i,f){var D,Q;return D=ZA(t,e,A),D==-1?(t.q>=t.M&&kQ(t,t.M*2),D=Wr(t,n),vU(t.J[D],e,A,0),t.A[D]=P,XA(t,D,r),Ne(t,D,i),EP(t,D,f),!0):(Q=gf(t,D,n,P,r,i),Q=Q|EP(t,D,f),Q)}function eb(t,e,A,n){var P,r,i,f;for(ut(e,1),r=0;r<A;r++)n[r]!=-1&&t.C[r]!=1&&t.e[r]!=Ht(e,n[r])&&(P=uf(t,r,!1),P!=-1&&(f=uf(e,n[r],!1),P!=f&&(i=b9(e,n[r]),(i==-1||i<P)&&XA(e,n[r],P))))}function DK(t,e,A){var n,P,r;for(r=0;r<t.e.length;r++)P=w.Math.sqrt((t.a[r]-e)*(t.a[r]-e)+(t.b[r]-A)*(t.b[r]-A)),n=0-sn(e,A,t.a[r],t.b[r]),t.a[r]=e+P*w.Math.sin(n),t.b[r]=A+P*w.Math.cos(n)}function uK(t,e,A){var n,P,r,i,f;return r=(P=t/e,P>0?w.Math.floor(P):w.Math.ceil(P)),i=t%e,f=$8(t*e,0),i!=0&&(n=$8(w.Math.abs(i)*2,w.Math.abs(e)),r+=EQ(vt(r)&1,f*(5+n),A)),new _3(r)}function JT(t,e){var A,n,P;for(pr.call(this,t),A=0,P=0;P<t.length;P++)e.j[t[P]]!=1&&++A;if(A>2)for(this.a=c(F,k,6,A,15,1),A=0,n=0;n<t.length;n++)e.j[t[n]]!=1&&(this.a[A++]=t[n]);else this.a=t}function ei(t,e,A,n,P,r){var i,f,D,Q;for(D=0,f=0;f<t.R.g;f++)(Ae(t.R,t.C[f])&n)!=0&&++D;if(D!=0)for(tP(t,e),Ot(t,D,A),i=0;i<t.R.g;i++)Q=Ae(t.R,t.C[i])&n,Q!=0&&(Ot(t,i,A),P!=1&&Ot(t,Q>>r,P))}function zT(t,e){var A,n,P;if(t.v==null||t.v[e]==null)return gt(V(t.B[e],1),0)?\"\":X0[t.C[e]];for(P=\"\",n=0;n<t.v[e].length;n++)n>0&&(P=(L1(P),P+(L1(\",\"),\",\"))),A=t.v[e][n],P=bu(P,X0[A]);return P}function of(t){var e,A,n,P;for(ut(t,7),n=0;n<t.g;n++)(t.H[n]==257||t.H[n]==129)&&(t.H[n]=1);for(e=0;e<t.f;e++)ey(t,e);for(P=0;P<t.g;P++)Yj(t,P);for(A=0;A<t.g;A++)t.H[A]==2&&(t.F[A]&3)==3&&(t.H[A]=386)}function QK(t,e,A){var n,P,r;if(e.c!=null)for(P=0;P<e.c.length;P++)for(r=0;r<O(t.k,e.a);r++)e.c[P]==_(t.k,e.a,r)&&(n=xt(t.k,e.a,r),e.d[P]||Xj(t,n,e.a,A),t.e[n]>9&&(A.a+=\"%\"),w3(A,t.e[n]))}function oK(t,e){var A,n,P,r,i;if(t.i.K){if(gt(V(y0(t.i,e),1),0))return!1;if(A=MA(t.i,e),A!=null){for(P=A,r=0,i=P.length;r<i;++r)if(n=P[r],!_9(n))return!1;return!0}}return _9(X(t.i,e))}function Ab(t,e,A,n,P){var r,i,f;for(r=!0,i=0;i<n;i++)r=r&A[i]==0;if(P==0)sA(A,n,t,0,e),i=e;else{for(f=32-P,r=r&A[i]<<f==0,i=0;i<e-1;i++)t[i]=A[i+n]>>>P|A[i+n+1]<<f;t[i]=A[i+n]>>>P,++i}return r}function UK(t){var e,A;(t.G&32)==0&&(A=bR(t.L),A!=null&&(t.w.a==0&&t.w.b==0&&(e=t.R.c*M8(t.L),t.v=yR(t),Vm(t,e),T5(t,null,e,0)),t.Cb(vt(t.A)),t.L.O!=1&&Z1(t,448),t.tb(A,t.w.a,t.w.b+bf*t.A)))}function nb(t){var e,A,n;if(Tu(this),!(t==null||t.length==0))for(e=0,A=t.indexOf(k0(10));A!=-1;)n=YX((Ct(e,A,t.length),t.substr(e,A-e))),n&&this.a.push(n),e=A+1,A=t.indexOf(k0(10),e)}function LK(t,e,A){var n,P;switch(P=A&127,n=Rk(t,e),P){case 1:case 8:return n>=1;case 2:return n>=2;case 4:return n>=3;case 32:return n>=4;case 64:return n>=5;case 16:return!0;default:return!1}}function Uf(t,e,A,n){var P,r,i;for(i=0;i<t.e.length;i++)r=w.Math.sqrt((t.a[i]-e)*(t.a[i]-e)+(t.b[i]-A)*(t.b[i]-A)),P=sn(e,A,t.a[i],t.b[i])+n,t.a[i]=e+r*w.Math.sin(P),t.b[i]=A+r*w.Math.cos(P)}function YT(t,e){var A,n,P;return n=e.g-F8,P=e.i-F8,n<0||n>=2*dn||P<0||P>=17*dn?-1:(A=17*vt(n/dn)+vt(P/dn),A>=0&&A<34&&(A!=t.b||A==20||A==33)&&(A!=19||(t.a.U&4)!=0)&&(A!=21||(t.a.U&8)!=0)?A:-1)}function sK(t){var e;t.c==null&&(e=O1(t.b)===O1(_4)?null:t.b,t.d=e==null?P9:_v(e)?e==null?null:e.name:H8(e)?\"String\":uu($L(e)),t.a=t.a+\": \"+(_v(e)?e==null?null:e.message:e+\"\"),t.c=\"(\"+t.d+\") \"+t.a)}function yK(t,e){var A,n,P,r;return e&=63,A=t.h&tn,e<22?(r=A>>>e,P=t.m>>e|A<<22-e,n=t.l>>e|t.m<<22-e):e<44?(r=0,P=A>>>e-22,n=t.m>>e-22|t.h<<44-e):(r=0,P=0,n=A>>>e-44),S0(n&x0,P&x0,r&tn)}function lK(t,e,A,n){var P,r;P=new s1,r=new s1,P.a=e.a,P.c=e.c,P.b=(e.a+e.b)/2,P.d=(e.c+e.d)/2,r.a=P.b,r.c=P.d,r.b=e.b,r.d=e.d,cA(t,P)&&(Z1(t,t.p[A]),t.qb(P)),cA(t,r)&&(Z1(t,t.p[n]),t.qb(r)),Z1(t,t.Q)}function Pb(t,e,A){var n,P;return n=ZA(t,e,A),n!=-1?((t.u[n]&512)!=0?nQ(t):wQ(t,n),t.T=0,!0):(P=wf(t,e,A),P!=-1?((t.u[t.D[0][P]]&t.u[t.D[1][P]]&512)!=0?nQ(t):XT(t,P),t.T=0,!0):!1)}function rb(t,e,A){var n,P,r;for(t.U=e,t.V=A,t.Q=c(Ut,Tt,6,t.q,15,1),t.R=c(Ut,Tt,6,t.q,15,1),n=0;n<t.q;n++)P=e-t.J[n].a,r=A-t.J[n].b,t.R[n]=w.Math.sqrt(P*P+r*r),t.Q[n]=bA(e,A,t.J[n].a,t.J[n].b)}function ib(t,e){var A,n,P,r;for(r=c(F,k,6,t.j[e]-EL(t,e),15,1),P=0,n=0;n<t.j[e];n++)A=t.i[e][n],gt(V(t.B[A],a0),0)||(r[P++]=w.Math.abs(t.w[A]));return r.sort(Fe(D0.prototype.hd,D0,[])),r}function fb(t,e){var A,n,P,r,i;if(A=-1,t.o[e]==1){for(r=0;r<t.j[e];r++)if(t.n[e][r]==2){if(n=t.i[e][r],t.j[n]==2&&t.o[n]==2){for(i=0;i<2;i++)if(P=t.i[n][i],P!=e&&t.o[P]==1){A=n;break}}break}}return A}function hK(t,e){var A,n,P,r,i;for(i=new f1,r=0;r<e.q;r++)e.e[r]==3&&(A=e.i[r][0],n=e.i[r][1],P=e.i[r][2],mt(i,new ZL(t,e,r,A,n,P)),mt(i,new ZL(t,e,r,A,P,n)),mt(i,new ZL(t,e,r,n,P,A)));return i}function Y1(t){var e,A,n;if(A=RL(t),A==-1)return null;for(n=new V0,e=!1;!e;)if(A==10?e=!0:A==13&&(e=!0,A=RL(t),A!=10&&(t.a=A)),!e){if(A==-1)break;Oe(n,A&c1),A=RL(t)}return n.a}function TK(t,e,A){var n,P,r,i,f,D;if(D=N(t.b,e),t.d.length<=t.c.length)for(f=0;f<t.a;f++)A[t.d[f]]=t.c[D[f]];else{for(P=t.d,r=0,i=P.length;r<i;++r)n=P[r],A[n]=-1;for(f=0;f<t.a;f++)A[t.d[D[f]]]=t.c[f]}}function cK(t){return t.K++==64?!1:t.i?CT(t.i.b)?!1:(hU(t.I,0),hU(t.B,0),u3(t.H),u3(t.A),ub(t),zS(t.i),t.q=FR(t),t.g=7,t.c=0,t.d=0,t.e=0,t.f=0,!0):(t.i=new Kg,!0)}function Db(t,e,A){var n,P,r,i;if(i=ch(e),P=(n=t.a.get(i),n??c(DP,A0,1,0,5,1)),P.length==0)t.a.set(i,P);else if(r=KF(e,P),r)return r.gd(A);return P[P.length]=new TU(e,A),++t.c,++t.b.b,null}function p(t,e,A){var n=co,P=n[t],r=P instanceof Array?P[0]:null;P&&!r?U=P:(U=hG(e),U.ud=A,!e&&(U.vd=AD),n[t]=U);for(var i=3;i<arguments.length;++i)arguments[i].prototype=U;r&&(U.td=r)}function KT(t,e){var A,n;if((t.G&4224)!=0||(n=HT(t,e),n==-1&&(A=fb(t.L,e),A!=-1&&(e=A,n=HT(t,e))),n==-1))return t.p[e];switch(n&255){case 1:return 384;case 2:return 64;default:return 448}}function XT(t,e){var A,n,P;for(n=0;n<2;n++){for(A=0,P=0;P<t.r;P++)P!=e&&(t.D[0][P]==t.D[n][e]||t.D[1][P]==t.D[n][e])&&++A;A==0&&(Wu(t,t.w[t.D[n][e]]),t.C[t.D[n][e]]=-1)}t.H[e]=512,vf(t),t.T=0}function wK(t,e){var A,n;if(!e)return null;for(n=c(OA,te,6,(s9.length+63)/64|0,14,1),e=gk(e),un(t.g,e),A=0;A<s9.length;A++)yn(t.g,V2[A]),ln(t.g,1,4)>0&&(n[A/64|0]=Y(n[A/64|0],j1(1,63-A%64)));return n}function gK(t,e,A,n){var P,r,i,f;for(f=c(F,k,6,t.o[e].f,15,1),Vr(f,f.length,-1),r=d9(t.c,e),P=0;P<r.f;P++)A[P]!=-1&&(f[A[P]]=w.Math.abs(r.w[P]));for(i=0;i<f.length;i++)f[i]==-1&&(f[i]=n++);return f}function ub(t){var e,A,n,P,r,i,f,D,Q;for(Q=t.F.g,t.J=bn(Q,Q.length),e=t.v.g,t.C=bn(e,e.length),P=t.J,i=0,D=P.length;i<D;++i)A=P[i],t.o<A&&(t.o=A);for(n=t.C,r=0,f=n.length;r<f;++r)A=n[r],t.n<A&&(t.n=A)}function dK(t,e){var A,n,P,r,i,f,D,Q,o;if(t==null)return e;for(o=c(F,k,6,t.length+e.length,15,1),Q=0,P=t,i=0,D=P.length;i<D;++i)A=P[i],o[Q++]=A;for(n=e,r=0,f=n.length;r<f;++r)A=n[r],o[Q++]=A;return o}function BK(t,e){switch(e){case 0:Tb(t);return;case 1:G1(t),t.eb=w.Math.max(t.eb,6),e1(t.k),q1(t,new S1(t,1,!0));return;case 17:Lv(t),t.eb=w.Math.max(t.eb,2),e1(t.k),q1(t,new S1(t,1,!0));return}}function Qb(t,e,A){var n,P,r,i,f,D,Q,o;for(Q=-1,P=0,f=0;f<2;f++)for(n=t.i[e][f],D=0;D<t.e[n];D++)r=t.i[n][D],r!=e&&(i=t.k[n][D],o=CQ(t,i,r),P<o&&(!A||!(t.H[i]==257||t.H[i]==129))&&(P=o,Q=i));return Q}function ob(t){var e,A,n,P;for(A=0,e=0,n=0;n<t.g.a.length+t.f.a.length;n++)P=n<t.g.a.length?N(t.g,n):N(t.f,n-t.g.a.length),P.r!=0&&(A+=P.r,e+=wP(P,P.q,P.r,(J1(),gn))*P.r);return A==0?(J1(),J1(),gn):e/A}function vK(t,e,A,n){var P,r,i,f,D;for(i=c(Pt,ft,6,t.length+1,16,1),D=c(F,k,6,n,15,1),f=0;f<n;f++)P=A==null?f:A[f],P!=-1&&(D[f]=t[P],i[D[f]]=!0);for(r=0;r<e.length;r++)i[e[r]]||(e[r]=0);return D}function FK(t,e,A){var n,P,r,i,f,D,Q,o,L,s;for(n=0,A*=A,f=0;f<e.q;f++){for(Q=e.J[f].a,L=e.J[f].b,i=!1,D=0;D<t.V.q;D++)if(o=kt(t.V,D),s=pt(t.V,D),P=o-Q,r=s-L,P*P+r*r<A){i=!0;break}i&&++n}return n==e.q}function mQ(){mQ=d1,new BP(255,255,255),new BP(128,128,128),new BP(0,0,0),new BP(0,255,0),new BP(255,255,0),new BP(255,200,0),new BP(255,0,0),new BP(0,255,255),new BP(0,0,255),new BP(255,0,255)}function mK(t,e,A){var n;return Pb(t.V,e,A)?(t.eb=w.Math.max(t.eb,1),e1(t.k),q1(t,new S1(t,1,!0)),!0):(n=RJ(t,e,A),n?(X8(t.I,n),t.v=null,t.eb=w.Math.max(t.eb,1),e1(t.k),!0):!1)}function kK(t,e,A,n){var P,r,i,f;if(O(t.b,e)!=O(t.a,A))return!1;for(r=0;r<O(t.b,e);r++){for(f=_(t.b,e,r),P=!1,i=0;i<O(t.a,A);i++)if(n[f]==_(t.a,A,i)){P=!0;break}if(!P)return!1}return!0}function Ub(t,e){var A,n,P,r,i,f,D,Q,o;for(o=0,P=t,i=0,D=P.length;i<D;++i)A=P[i],e[A]==0&&++o;if(o==0)return null;for(Q=c(F,k,6,o,15,1),o=0,n=t,r=0,f=n.length;r<f;++r)A=n[r],e[A]==0&&(Q[o++]=A);return Q}function bK(t,e){var A,n,P,r;for(t.j=new zA,n=0;n<e.g.a.length;n++)r=N(e.g,n),ut(r,1),y5(t.j,r,r.f,r.g,!r.K);for(t.d=new zA,A=0;A<e.f.a.length;A++)P=N(e.f,A),ut(P,1),y5(t.d,P,P.f,P.g,!P.K);fi(t.j),fi(t.d)}function RK(t,e){var A,n;return Ap(t,e,!1)?t.s!=null?(t.B=new ih(t,t.o),Ad(t.B,400),t.b=new Ni(new eD),Sj(t)):(n=new xQ(e),ao(n,t.v),A=bX(n,t.o),Ws(t,A),A.p=\"SO#1\",A):null}function Lb(t,e){var A,n,P,r,i,f;for(A=t.b.a.length,P=N(t.b,e);e*2+1<A&&(n=(r=2*e+1,i=r+1,f=r,i<A&&t.a.Rb(N(t.b,i),N(t.b,r))<0&&(f=i),f),!(t.a.Rb(P,N(t.b,n))<0));)qr(t.b,e,N(t.b,n)),e=n;qr(t.b,e,P)}function B1(t){var e,A,n;for(A=t.length,n=0;n<A&&(Gt(n,t.length),t.charCodeAt(n)<=32);)++n;for(e=A;e>n&&(Gt(e-1,t.length),t.charCodeAt(e-1)<=32);)--e;return n>0||e<A?(Ct(n,e,t.length),t.substr(n,e-n)):t}function ZT(){ZT=d1,WV=B(d(it,1),Dt,2,6,[\"mutagenic\",\"tumorigenic\",\"irritant\",\"reproductive effective\"]),bo=B(d(it,1),Dt,2,6,[\"Mutagenicity\",\"Tumorigenicity\",\"Irritating effects\",\"Reproductive effects\"])}function sb(t,e,A,n,P){var r,i,f,D,Q;for(r=A[n],Q=!1,f=0;f<e.f;f++)if(f!=n&&A[f]==r){Q=!0;break}if(!Q)return P;for(i=0;i<e.f;i++)(i==n||A[i]>r)&&++A[i];++P;do D=P,G_(t,e,A),P=JJ(t,A);while(D!=P);return P}function WT(t,e,A,n,P,r){var i,f,D,Q;if(i=n-A,i<7){CJ(e,A,n,r);return}if(D=A+P,f=n+P,Q=D+(f-D>>1),WT(e,t,D,Q,-P,r),WT(e,t,Q,f,-P,r),r.Rb(t[Q-1],t[Q])<=0){for(;A<n;)e[A++]=t[D++];return}gJ(t,D,Q,f,e,A,n,r)}function yb(t,e){if(e instanceof Object)try{e.__java$exception=t;var A=t;Object.defineProperties(e,{cause:{get:function(){var n=A.hc();return n&&n.fc()}},suppressed:{get:function(){return A.gc()}}})}catch{}}function lb(t,e){var A,n,P;return n=t.a*t.a+t.b*t.b+t.c*t.c,P=e.a*e.a+e.b*e.b+e.c*e.c,n==0||P==0||(A=(t.a*e.a+t.b*e.b+t.c*e.c)/w.Math.sqrt(n*P),A>=1)?0:A<=-1?U1:w.Math.acos(A)}function jK(t,e,A){var n,P,r;P=B1((Ct(31,34,A.length),A.substr(31,3))),at(P,\"A\")||at(P,\"*\")?h1(t.j,e,1,!0):at(P,\"Q\")?(r=c(F,k,6,1,15,1),r[0]=6,yf(t.j,e,r,!0)):(n=qA(P,67),K0(t.j,e,n))}function _T(t,e){var A,n,P,r;if(r=t.c.a.length,r==0)return-1;for(P=1;2*P<=r;)P<<=1;for(n=P,--P;n!=0;){if(n>>=1,P>=r){P-=n;continue}if(A=Y9(e,N(t.c,P)),A==0)return P;if(n==0)break;A<0?P-=n:P+=n}return-1}function $T(t,e,A){var n,P,r,i;for(r=c(F,k,6,t.b.f+1,15,1),Vr(r,r.length,-1),P=0;P<A.length;P++)A[P]!=0&&(r[A[P]]=P);for(i=c(F,k,6,t.b.f,15,1),Vr(i,i.length,-1),n=0;n<e.length;n++)i[n]=r[e[n]];return i}function hb(t){var e,A;return t.d>0||(e=1,A=1,t.a<54?(t.a>=1&&(A=t.f),e+=w.Math.log10(w.Math.abs(A))):(e+=(t.a-1)*To,I5((!t.c&&(t.c=kP(M1(t.f))),t.c),ni(e)).e!=0&&++e),t.d=vt(e)),t.d}function pK(t){var e;for(e=0;e<t.q;e++)switch(t.C[e]){case 1:case 5:case 6:case 7:case 8:case 9:case 14:case 15:case 16:case 17:case 33:case 34:case 35:case 52:case 53:continue;default:return!1}return!0}function CK(t){Ff();var e,A,n,P,r,i;if(t==null)return null;for(e=c(E,q,6,t.length*8,15,1),n=0;n<t.length;n++)for(i=t[n],P=7;P>=0;P--)A=i&15,A>9&&(A+=7),e[n*8+P]=48+A<<24>>24,i>>=4;return fn((r=e,c0(),r))}function U0(t,e,A,n,P){var r,i,f,D,Q,o;for(r=Ht(t.e,e),D=O(t.e,e),Q=1;Q<r;Q++)for(i=Q<D?t.f[xt(t.e,e,Q)]:0,o=0;o<Q;o++)t.a[e][Q][o]==0&&(f=o<D?t.f[xt(t.e,e,o)]:0,(i==A&&f==n||i==n&&f==A)&&(t.a[e][Q][o]=P))}function HK(t){var e;for(e=0;0<=(e=t.indexOf(\"\\\\\",e));)Gt(e+1,t.length),t.charCodeAt(e+1)==36?t=(Ct(0,e,t.length),t.substr(0,e)+\"$\"+HD(t,++e)):t=(Ct(0,e,t.length),t.substr(0,e)+(\"\"+HD(t,++e)));return t}function MK(t,e,A,n){var P,r,i,f,D;for(D=new f1,r=0;r<e.q;r++)for(i=r+1;i<e.q;i++)P=new Ii(r,i),f=S9(A.a,P)!=null?S9(A.a,P):(Xr(),S2),(f==(Xr(),si)||f==S2)&&kn(new lh(e,r,i))<n&&mt(D,new sj(t,e,r,i));return D}function aT(t,e,A){var n;n=t.D[0][e],t.D[0][e]=t.D[0][A],t.D[0][A]=n,n=t.D[1][e],t.D[1][e]=t.D[1][A],t.D[1][A]=n,n=t.H[e],t.H[e]=t.H[A],t.H[A]=n,n=t.F[e],t.F[e]=t.F[A],t.F[A]=n,n=t.G[e],t.G[e]=t.G[A],t.G[A]=n,t.T=0}function VK(t,e){var A,n,P;if(e.j==0){try{A=Q1((P=t.b.Fc(),P.getSelectedItem()),P1,Et)}catch(r){if(r=a1(r),Xt(r,40)){RD(t.c,\"Illegal text size.\");return}else throw At(r)}n=Tl[B0(t.a)],Rg(t.e,xi(t.d),A,n)}j9(t.c)}function EK(t){var e,A,n,P;for(t.Ab(2*t.S),P=new s1,n=0;n<t.L.r;n++)e=z(t.L,0,n),A=z(t.L,1,n),H3(t.L,n)&&(P.a=X1(t.R,kt(t.L,e)),P.c=K1(t.R,pt(t.L,e)),P.b=X1(t.R,kt(t.L,A)),P.d=K1(t.R,pt(t.L,A)),Z1(t,-2),t.qb(P))}function Bs(){Bs=d1,fl=B(d(Ut,1),Tt,6,15,[F0,U1,b2,AA]),NV=B(d(F,2),f0,7,0,[B(d(F,1),k,6,15,[0,0,0,2]),B(d(F,1),k,6,15,[0,0,1,2]),B(d(F,1),k,6,15,[0,1,1,3]),B(d(F,1),k,6,15,[2,2,3,2])])}function SK(t){var e,A,n,P;for(n=-.5299999713897705,fi(t),ut(t,7),e=0;e<t.f;e++){P=-1;try{P=Ay(t,e,2144)}catch(r){if(r=a1(r),!Xt(r,19))throw At(r)}for(A=0;A<zf.length;A++)if(t0(Ql[A],P)){n+=zf[A];break}}return n}function Tb(t){var e;t.I&&(t.I.a.length=0,t.eb=w.Math.max(t.eb,1),e1(t.k)),G1(t),e=t.V.K,vi(t.V),je(t.V,e),t.cb.q!=0?(t.eb=w.Math.max(t.eb,1),e1(t.k),q1(t,new S1(t,1,!0))):(t.eb=w.Math.max(t.eb,1),e1(t.k))}function cb(t,e){var A,n,P,r,i,f;for(r=c(F,k,6,t.q,15,1),n=0;n<t.q;n++)r[n]=n;P=t.q;do--P;while(P>=0&&e[P]);for(A=0;A<P;A++)if(e[r[A]]){f=r[A],r[A]=r[P],r[P]=f,i=e[A],e[A]=e[P],e[P]=i;do--P;while(e[P])}return r}function qK(t){Ff();var e,A,n,P;if(t.length==0||(t.length&7)!=0)return null;for(n=c(F,k,6,t.length/8|0,15,1),A=0;A<t.length;A++)P=A/8|0,e=(Gt(A,t.length),t.charCodeAt(A)-48),e>16&&(e-=7),n[P]<<=4,n[P]+=e;return n}function _r(t,e,A){var n,P,r;if(t.length!=e.length)return-1;for(r=0,n=A.lc(),P=0;P<t.length-1;P++)if(r=TA(t[P],e[P],r,n+1,!0,A),n=TA(t[P],e[P],r,n+1,!1,A),r==-1||n==-1)return-1;return TA(t[P],e[P],r,n+1,!0,A)}function IK(t,e,A){var n,P,r,i,f,D,Q;P=vt(X6*M8(t.V)),r=vt(kt(t.V,z(t.V,0,A))),f=vt(pt(t.V,z(t.V,0,A))),i=vt(kt(t.V,z(t.V,1,A))),D=vt(pt(t.V,z(t.V,1,A))),n=(Q=e.Kc(),Q.getLineWidth()),KU(e,P),x9(e,r,f,i,D),KU(e,n)}function wb(t){switch(t){case 6:return 1;case 53:return 2;case 33:return 3;case 34:return 4;case 35:return 5;case 15:return 6;case 16:return 7;case 17:return 8;case 7:return 9;case 8:return 10;case 9:return 11}return 0}function xK(t){var e;for(t.e=new f3,t.d=new zg,tx(t,new fs(t,t.i)),e=Kn(t.i);!m7(t.d);)if(pz(IG(t.d),e),$$(t,e),t.e.a.c>=Htt){z1(),\"\"+me(new FA(t.i));break}}function vs(t){var e,A;return t>-0x800000000000&&t<0x800000000000?t==0?0:(e=t<0,e&&(t=-t),A=vt(w.Math.floor(w.Math.log(t)/.6931471805599453)),(!e||t!=w.Math.pow(2,A))&&++A,A):nT(M1(t))}function NK(t,e){var A,n,P,r,i,f;if(t.s[e]==0)return!1;for(f=!0,A=t.s[e],r=t.j[e],i=0,n=0;n<r;n++)P=t.i[e][n],i+=t.s[P];return w.Math.abs(A)<=w.Math.abs(i)&&w.Math.sign(A)!=w.Math.sign(i)&&(f=!1),f}function OK(t,e){var A,n,P,r,i,f;for(ut(t,1),i=0;i<2;i++)if(A=t.D[i][e],t.C[A]==7){for(n=t.D[1-i][e],f=0;f<t.j[n];f++)if(P=t.i[n][f],r=t.k[n][f],(t.C[P]==7||t.C[P]==8||t.C[P]==16)&&dt(t,r)>=2)return!0}return!1}function GK(t){var e;if(t.f!=null){for(e=0;e<t.f.length;e++)if((t.c[e]&~t.f[e])!=0)return!1}else return!1;return!t.d&&(t.d=BT(new JA(!1),t.e)),!t.a&&(t.a=BT(new JA(!1),t.b)),un(t.g,t.d),yn(t.g,t.a),ng(t.g)}function gb(t){var e;e=KA(t.d),vP(t.k,!e),vP(t.c,!e),vP(t.n,!e),vP(t.i,!e),vP(t.j,!e),vP(t.b,!e),vP(t.g,!e),vP(t.f,!e&&dt(t.u,t.a)==2&&qe(t.u,t.a)!=0&&qe(t.u,t.a)!=3),vP(t.q,!e),vP(t.r,!e&&B0(t.q)!=1),vP(t.p,e),vP(t.o,e)}function er(){er=d1,SE=new jr(\"UP\",0),HE=new jr(\"DOWN\",1),CE=new jr(\"CEILING\",2),ME=new jr(\"FLOOR\",3),dl=new jr(\"HALF_UP\",4),VE=new jr(\"HALF_DOWN\",5),se=new jr(\"HALF_EVEN\",6),EE=new jr(\"UNNECESSARY\",7)}function t5(t,e,A){var n,P,r;for(n=!1,r=0;r<t.j[e];r++)if(!_e(t,t.k[e][r])&&t.n[e][r]==1&&(P=t.i[e][r],!(P<t.f&&r0(t.p,P))&&(t.C[P]==6&&rf(t,P)==1||t.C[P]==16&&rf(t,P)==2))){if(n||!A)return!0;n=!0}return!1}function JK(t,e){var A,n,P,r,i;for(A=c(Ut,Tt,6,t.v.length+t.u.length,15,1),n=_8(t.i,e.d).c,r=new Zt(n);r.a<r.c.a.length;)if(P=$t(r),(Am(e,P.c,P.b)?e.b:0)!=0)for(i=0;i<A.length;i++)pN(t.C,P,i)&&(A[i]+=P.a);return A}function hA(t,e,A,n,P,r){var i,f,D,Q;for(D=0,f=0;f<t.R.f;f++)gt(V(y0(t.R,t.B[f]),n),0)&&++D;if(D!=0)for(tP(t,e),Ot(t,D,A),i=0;i<t.R.f;i++)Q=V(y0(t.R,t.B[i]),n),G(Q,0)!=0&&(Ot(t,i,A),P!=1&&Ot(t,q0(Q,r),P))}function zK(t,e){var A,n,P,r,i,f,D;for(i=Ht(t.R,e),f=c(F,k,6,i,15,1),P=0;P<i;P++)f[P]=_(t.R,e,P);for(n=i;n>1;n--){for(A=!1,r=1;r<n;r++)e6(t,e,f[r-1],f[r])&&(A=!0,D=f[r-1],f[r-1]=f[r],f[r]=D);if(!A)break}return f}function YK(t){var e,A,n,P,r,i,f;for(i=c(E,xy,58,8,0,3),f=0;f<=7;f++)for(i[f]=c(E,g8,10,t[f].c,0,2),n=0,r=(A=new x8(new I8(new wr(t[f]).a).b),new gr(A));Cr(r.a.a);)P=(e=B9(r.a),e.ed()),i[f][n++]=P;return i}function kQ(t,e){var A,n;for(t.C=W8(t.C,e),t.s=W8(t.s,e),t.w=W8(t.w,e),n=t.J.length,t.J=KG(t.J,e),A=n;A<e;A++)t.J[A]=new dA;t.A=W8(t.A,e),t.u=W8(t.u,e),t.B=oG(t.B,e),t.v!=null&&(t.v=PY(t.v,e)),t.t!=null&&(t.t=rY(t.t,e)),t.M=e}function db(t,e,A){var n,P,r,i;if(t.k=e,t.n=A,t.i!=null)for(i=t.i.length,t.o=c(Ut,Tt,6,i,15,1),t.p=c(Ut,Tt,6,i,15,1),r=0;r<i;r++)n=e-t.i[r].a,P=A-t.i[r].b,t.p[r]=w.Math.sqrt(n*n+P*P),t.o[r]=bA(e,A,t.i[r].a,t.i[r].b)}function KK(t,e){var A,n,P,r,i,f,D;for(n=c(Pt,ft,6,O(t.e,e),16,1),D=0,P=0;P<O(t.e,e);P++){for(f=0,i=-1,r=0;r<O(t.e,e);r++)n[r]||(A=xt(t.e,e,r),f<t.f[A]&&(f=t.f[A],i=r));if(f==0)return D;D<<=8,D+=f,n[i]=!0}return D}function Vn(t){return w.Math.sqrt(t.a*t.a+t.b*t.b+t.c*t.c)>0?new gP(t.a/w.Math.sqrt(t.a*t.a+t.b*t.b+t.c*t.c),t.b/w.Math.sqrt(t.a*t.a+t.b*t.b+t.c*t.c),t.c/w.Math.sqrt(t.a*t.a+t.b*t.b+t.c*t.c)):new gP(0,0,0)}function Fs(t){var e;if(t.p=new tu,t.k!=null)for(t.e=c(rE,A0,104,t.k.length,0,1),e=0;e<t.k.length;e++)t.e[e]=new hu(t.k[e]);if(t.a!=null)for(t.b=c(rE,A0,104,t.a.length,0,1),e=0;e<t.a.length;e++)t.b[e]=new hu(t.a[e]);t.d=24}function XK(t,e,A){var n,P;if(P=N(t.b,e),t.d.length<=t.c.length){for(n=0;n<t.a;n++)if(A[t.d[n]]!=null&&A[t.d[n]][t.c[P[n]]])return!0}else for(n=0;n<t.a;n++)if(A[t.d[P[n]]]!=null&&A[t.d[P[n]]][t.c[n]])return!0;return!1}function ZK(t,e){A6();var A,n,P,r;if(Kf[e]!=null){for(n=0;n<Kf[e].length;n++)for(r=Kf[e][n],P=15;P>=0;P--)(r&3)==0&&GU(t,P,n,-1),r>>=2;for(A=0;A<Kf[e].length;A++)for(r=Kf[e][A],P=15;P>=0;P--)(r&3)==1&&GU(t,P,A,qn),r>>=2}}function $r(t){var e,A,n;return t<0?0:t==0?32:(n=-(t>>16),e=n>>16&16,A=16-e,t=t>>e,n=t-256,e=n>>16&8,A+=e,t<<=e,n=t-C0,e=n>>16&4,A+=e,t<<=e,n=t-Sn,e=n>>16&2,A+=e,t<<=e,n=t>>14,e=n&~(n>>1),A+2-e)}function L0(t,e){var A=w;if(t===\"\")return A;var n=t.split(\".\");if(!(n[0]in A)&&A.execScript&&A.execScript(\"var \"+n[0]),e){var P=e.prototype.td;P.e=e}for(var r;n.length&&(r=n.shift());)A=A[r]=A[r]||!n.length&&e||{};return A}function e5(t,e,A,n,P,r,i){var f,D;return f=_(t.g,t.s[e],n),f<t.D.length&&(!t.D[f]||t.f[f]==i)&&f!=t.u[e]&&(D=xt(t.g,t.s[e],n),!r[D]&&!gu(t.g,D)&&(t.s[++A]=f,t.u[A]=t.s[e],t.v[A]=D,r[D]=!0,P[f]?t.t[A]=!0:P[f]=!0)),A}function n2(t,e){var A,n,P,r,i;for(i=0,A=0,n=0;n<e;n++)i+=t[n].b*w.Math.sin(t[n].a),A+=t[n].b*w.Math.cos(t[n].a);return A==0?r=i>0?RA:eo:(r=w.Math.atan(i/A),A<0&&(r+=U1)),P=w.Math.sqrt(i*i+A*A)/e,new ZP(r,P)}function ms(t){var e,A,n;if(t.d!=-1)return t.d;for(t.d=0,A=0;A<t.g.a.length+t.f.a.length;A++)for(n=A<t.g.a.length?N(t.g,A):N(t.f,A-t.g.a.length),e=0;e<n.q;e++)t.d<w.Math.abs(n.w[e])&&(t.d=w.Math.abs(n.w[e]));return t.d}function A5(t,e){W9();var A;return A=c(Ee,PA,6,4,15,1),A[0]=L4*((t&rP)>>16),A[1]=L4*((t&nP)>>8),A[2]=L4*(t&255),iW(A,e),t&qn|vt(w.Math.round(A[0]*255))<<16|vt(w.Math.round(A[1]*255))<<8|vt(w.Math.round(A[2]*255))}function n5(t,e,A,n,P,r){var i,f,D,Q,o;if(P!=0)for(O1(t)===O1(A)&&(t=t.slice(e,e+P),e=0),D=A,f=e,Q=e+P;f<Q;)i=w.Math.min(f+AP,Q),P=i-f,o=t.slice(f,i),o.splice(0,0,n,r?P:0),Array.prototype.splice.apply(D,o),f=i,n+=P}function WK(t,e,A){var n,P,r,i,f;for(f=Zi(new JA(!0),t),P=-1,r=0;r<f.q;r++)if(n=f.t==null||f.t[r]==null?null:fn((i=f.t[r],c0(),i)),n!=null&&n.endsWith(\"*\")){P=r;break}return P>=0?ZR(f,P,e,A):c(it,Dt,2,0,6,1)}function P2(t,e){var A;if(e<0)throw At(new p8(\"Negative exponent\"));if(e==0)return q2;if(e==1||yT(t,q2)||yT(t,yr))return t;if(!RQ(t,0)){for(A=1;!RQ(t,A);)++A;return bP(tz(A*e),P2(Sh(t,A),e))}return IY(t,e)}function Bb(t,e,A,n,P){var r,i,f,D,Q;for(Q=-1,i=0;i<O(t.j,A);i++)if(_(t.j,A,i)==e){Q=i;break}for(f=-1,r=0;r<O(t.d,P);r++)if(_(t.d,P,r)==n){f=r;break}for(D=0;D<8;D++)if(cs(t.k[A][Q][D],t.e[P][f][D])!=0)return D<<8;return N1}function vb(t,e,A,n){var P;for(P=0;P<t.r;P++)if(t.D[0][P]==e&&t.D[1][P]==A||t.D[0][P]==A&&t.D[1][P]==e)return o8(t,P,n),t.T=0,P;return t.r>=t.N&&eQ(t,t.N*2),t.D[0][t.r]=e,t.D[1][t.r]=A,t.H[t.r]=n,t.F[t.r]=0,t.G[t.r]=0,t.T=0,t.r++}function Fb(t,e,A){var n,P,r,i,f,D,Q,o,L,s;for(s=e.length,P=e,r=0,i=P.length;r<i;++r)n=P[r],L=t.a[n]&c1,(L==0||L>s)&&(t.a[n]&=IP,t.a[n]|=s);for(D=A,Q=0,o=D.length;Q<o;++Q)f=D[Q],L=t.c[f]&c1,(L==0||L>s)&&(t.c[f]&=IP,t.c[f]|=s)}function ks(t,e){this.a=new Hv(this),this.e=new mm,this.b=new IB,this.c=new xB,this.d=new Tv(this),this.f=new Qv,this.i=new NB,this.g=new qB,this.j=new Mv,this.k=new jg(this,t),this.n=new hv(this),this.o=new pg(this,e),this.p=new ov}function bQ(t,e,A){var n,P,r,i,f,D;return n=t.i[1].a-t.i[0].a,P=t.i[1].b-t.i[0].b,i=(t.i[0].a+t.i[1].a)/2,f=(t.i[0].b+t.i[1].b)/2,n==0?P<0^A>f:P==0?n<0^e>i:(r=-n/P,D=(t.i[0].a+r*r*e-r*A+r*t.i[0].b)/(1+r*r),n<0^D>i)}function _K(t,e,A){var n,P,r,i,f;for(f=c(HPt,T0,159,A,0,1),i=c(F,k,6,A,15,1),r=0;r<A;r++)f[r]=new tw;for(n=0;n<t.V.q;n++)f[e[n]].a+=kt(t.V,n),f[e[n]].b+=pt(t.V,n),++i[e[n]];for(P=0;P<A;P++)f[P].a/=i[P],f[P].b/=i[P];return f}function Ai(t){var e,A,n;for(n=!1,e=0;e<t.q;e++)t.C[e]==-1&&(n=!0,Wu(t,t.w[e]));for(A=0;A<t.r;A++)t.H[A]==512?n=!0:(t.C[t.D[0][A]]==-1||t.C[t.D[1][A]]==-1)&&(t.H[A]=512,n=!0);return n?(t.T=0,vf(t)):null}function $K(t,e,A){var n,P,r,i,f,D;for(f=c(Pt,ft,6,t.f,16,1),A[0]=e,D=1,f[e]=!0,r=0;r<D;r++)for(i=0;i<t.j[A[r]];i++)P=t.k[A[r]][i],((t.F[P]&64)!=0||dt(t,P)==2||Pi(t,P))&&(n=t.i[A[r]][i],f[n]||(A[D++]=n,f[n]=!0));return D}function aK(t){var e,A,n,P;for(P=!1,A=0;A<t.V.q;A++)if(P0(t.V,A)){P=!0;break}if(n=Pk(t,P),n){for(G1(t),e=0;e<t.V.q;e++)(!P||P0(t.V,e))&&(Be(t.V,e,2*n.a-kt(t.V,e)),Ie(t.V,e,2*n.b-pt(t.V,e)));t.eb=w.Math.max(t.eb,1),e1(t.k)}}function mb(t,e,A){var n;Bh();var P;this.a=new _R(new zA,t,A,this),_S(this.a,new Vw(this)),this.c=e,this.f=A,this.e=new A3,al(this.e,this.a),this.d=new n7,al(this.d,this.a),P=(n=this.Ac(),n.getClipboardHandler()),JS(this.a,new qw(P))}function kb(t){op.call(this,t),this.d=c(F,k,6,this.v.length,15,1),this.c=c(F,k,6,this.u.length,15,1),this.a=c(KE,v2,165,1,0,1),this.a[0]=Nu(this,c(F,k,6,this.v.length,15,1),c(F,k,6,this.u.length,15,1)),this.b=-1}function P5(t){var e,A;for(this.i=Kn(t),MW(this),ut(this.i,7),this.g=c(Pt,ft,6,this.i.g,16,1),this.f=c(Pt,ft,6,this.i.f,16,1),e=0;e<this.i.f;e++)A=Ku(X(this.i,e))[0],this.f[e]=e0(this.i,e)<A;xK(this),GW(this),mZ(this),XX(this)}function tX(t){t=t||{};var e=0;return t.matchAtomCharge===!0&&(e|=1),t.matchAtomMass===!0&&(e|=2),t.matchDBondToDelocalized===!0&&(e|=4),(t.matchAromDBondToDelocalized===!0||t.matchAromDBondToDelocalized===void 0)&&(e|=8),e}function bb(t,e){var A,n,P,r,i,f,D;for(D=Nn(t.R),A=0;A<D.j.a.length;A++)if(D.e[A]&&yA(D,A,e)){for(P=N(D.j,A),r=0,i=P.length;r<i;++r)if(n=P[r],n!=e){for(f=0;f<O(t.R,n);f++)if(Pi(t.R,xt(t.R,n,f)))return!0}return!1}return!1}function Lf(t,e,A){var n,P,r;if(n=X(t.j,e),n>=5&&n<=8||n==15||n==16||n==33||n==34||n==52){if(r=gQ(t.j,e),r!=0)return!0;if(P=b1(t.j,e),n==5&&P>=0)return A&&E0(t.j,e,P-1),!0;if(n!=5&&P<=0)return A&&E0(t.j,e,P+1),!0}return!1}function eX(t,e,A){var n,P,r,i,f;for(f=!1,i=1,e[A]=i,n=!0;n;){for(n=!1,P=0;P<t.b;P++)if(e[P]==i)for(r=0;r<t.b;r++)e[r]==0&&kG(t,P,r)&&(t.c[r]==-2?(e[r]=i+1,n=!0):t.c[r]!=t.c[A]&&(e[r]=i+1,f=!0));++i}return f}function AX(t,e){var A;for(this.o=e,this.k=c(H2,F2,29,t.k.length,0,1),A=0;A<this.k.length;A++)this.k[A]=new du(t.k[A]);t.j!=null&&(this.j=fL(t.j,t.j.length)),this.p=t.p==null||t.p.endsWith(\" (copy)\")?t.p:bu(t.p,\" (copy)\"),this.n=NaN}function Rb(t,e){var A,n,P,r,i;for(r=c(qE,T0,44,8,0,1),i=0;i<=7;i++)for(r[i]=new Ni(new Il),A=0;A<t.f;A++)P=e[A][i],P!=null&&(n=le(r[i],P),n=n==null?c(F,k,6,1,15,1):bn(n,n.length+1),n[n.length-1]=A,ze(r[i],P,n));return r}function nX(t,e){var A,n,P;if(t.t!=-1&&(ae(e,(P=SD(e),P!=0?P:zy)),BF(t,e,t.t),t.w==19&&(n=R1(t.V,t.t),n!=0)))for(A=0;A<t.V.f;A++)A!=t.t&&R1(t.V,A)==n&&BF(t,e,A);t.u!=-1&&(ae(e,(P=SD(e),P!=0?P:zy)),IK(t,e,t.u)),t.v&&t.v.Mb(e)}function r5(t,e){var A,n,P,r,i;for(r=ch(e),n=(A=t.a.get(r),A??c(DP,A0,1,0,5,1)),i=0;i<n.length;i++)if(P=n[i],oh(e,P.ed()))return n.length==1?(n.length=0,t.a.delete(r)):n.splice(i,1),--t.c,++t.b.b,P.fd();return null}function PX(t,e){var A,n,P,r,i;if(t.C[e]!=8||t.j[e]!=1)return!1;if(A=t.i[e][0],t.C[A]==15){for(i=t.j[A],n=0;n<i;n++)if(P=t.i[A][n],P!=e&&t.C[P]==8&&(r=u1(t,A,P),t.H[r]==2))return!0}return!1}function i5(t,e){var A,n;if(t==null)return e==null?0:1;if(e==null)return-1;for(A=w.Math.min(t.length,e.length),n=0;n<A;n++)if((t[n]&IP)!=(e[n]&IP))return(t[n]&IP)<(e[n]&IP)?-1:1;return t.length==e.length?0:t.length<e.length?-1:1}function rX(t,e,A,n,P){var r,i,f,D;if(O1(t)===O1(e)&&n==P){SR(t,n,A);return}for(f=0;f<n;f++){for(i=0,r=t[f],D=0;D<P;D++)i=I1(I1(Un(V(r,T1),V(e[D],T1)),V(A[f+D],T1)),V(Jt(i),T1)),A[f+D]=Jt(i),i=DA(i,32);A[f+P]=Jt(i)}}function iX(t){var e,A,n,P,r;for(A=0;A<t.R.f;A++)$e(t.e[A],A),W1(t.e[A],t.c+1,Un(2,t.f[A]));for(r=c(F,k,6,t.U+1,15,1),n=0;n<t.R.f;n++)++r[t.f[n]];for(P=1;r[P]==1;)++P;for(e=0;e<t.R.f;e++)if(t.f[e]==P){ue(t.e[e],1);break}t.U=Zn(t)}function f5(t,e){var A,n,P;if(t.a==null){for(t.a=c(Ut,Tt,6,t.o.q,15,1),t.d=c(Ut,Tt,6,(D8(),Fl).length,15,1),P=new Zt(e);P.a<P.c.a.length;)n=$t(P),n.g&&(t.d[n.sd()]+=n.qd(t,t.a));for(t.e=0,A=0;A<t.o.q;A++)t.e+=t.a[A];t.c=-1}}function fX(t,e){e=e||{};var A=e.smartsMode||\"smiles\",n=e.skipCoordinateTemplates||!1,P=e.makeHydrogenExplicit||!1,r=e.noCactvs||!1,i=e.singleDotSeparator||!1,f=e.createSmartsWarnings||!1;t.yc(A,n,P,r,i,f)}function RQ(t,e){var A,n,P;if(e==0)return(t.a[0]&1)!=0;if(e<0)throw At(new p8(\"Negative bit address\"));if(P=e>>5,P>=t.d)return t.e<0;if(A=t.a[P],e=1<<(e&31),t.e<0){if(n=cF(t),P<n)return!1;n==P?A=-A:A=~A}return(A&e)!=0}function jb(t,e,A,n,P,r,i){var f,D,Q;f=A==-1?(i[e].a-i[t.B[0]].a)/8:i[e].a-i[A].a,D=A==-1?(i[e].b-i[t.B[0]].b)/8:i[e].b-i[A].b,Ot(t,vt((n+f)/P),r),Ot(t,vt((n+D)/P),r),t.jb&&(Q=A==-1?(i[e].c-i[t.B[0]].c)/8:i[e].c-i[A].c,Ot(t,vt((n+Q)/P),r))}function pb(t,e){var A,n,P,r;if(t.d!=e.d)return t.d>e.d?1:-1;for(P=t.a.length,r=e.a.length,A=w.Math.min(P,r),n=0;n<A;n++)if(--P,--r,t.a[P]!=e.a[r])return t.a[P]>e.a[r]?1:-1;return P!=r?P>r?1:-1:t.b!=e.b?t.b>e.b?1:-1:0}function Cb(t,e){var A,n,P,r;if(t.K){if(gt(V(t.B[e],1),0))return!1;if(t.v!=null&&t.v[e]!=null){for(n=t.v[e],P=0,r=n.length;P<r;++P)if(A=n[P],!(A==1||A>=5&&A<=9||A>=14&&A<=17||A>=32&&A<=35||A>=52&&A<=53))return!1}}return jO(t.C[e])}function DX(t){var e,A,n,P,r,i;if(!ul)return PV;for(r=0,n=0,i=new bD(1),A=new zA,P=0;P<yi.a.a.length;P++)i2(new JA(!1),A,v3(yi,P)),un(i,t),yn(i,A),ln(i,1,i.c)>0&&(r+=Ag(yi,P),++n);return e=n==0?-1:r/w.Math.sqrt(n),e+\"\t\"+n+\"\t\"+t.f}function Hb(t,e){var A,n,P,r;for(r=0,n=new oB;r<e;){try{P=Y1(t.i)}catch(i){if(i=a1(i),Xt(i,75))break;throw At(i)}if(P==null)break;P.startsWith(Po)&&++r,P.startsWith(\">\")&&(A=nj(P),A!=null&&NG(n,A))}t.d=Pf(n.b,c(it,Dt,2,0,6,1))}function D5(t,e){var A,n,P,r,i;return e&=63,A=t.h,n=(A&h8)!=0,n&&(A|=-1048576),e<22?(i=A>>e,r=t.m>>e|A<<22-e,P=t.l>>e|t.m<<22-e):e<44?(i=n?tn:0,r=A>>e-22,P=t.m>>e-22|A<<44-e):(i=n?tn:0,r=n?x0:0,P=A>>e-44),S0(P&x0,r&x0,i&tn)}function sf(t,e,A,n,P,r){for(var i,f,D;t.q+n>t.M;)kQ(t,t.M*2);for(;t.r+n>t.N;)eQ(t,t.N*2);return i=ZA(t,e,A),i!=-1?jR(t,i,n,P,r):(f=wf(t,e,A),f!=-1?GQ(t,f,n,P,r):(i=W0(t,e,A,0),D=U1*(n-2)/n,G5(t,i,n,i,P,0,U1-D,r),t.T=0,!0))}function Mb(t){var e,A,n,P,r,i,f,D,Q,o;for(D=0,n=t,r=0,f=n.length;r<f;++r)e=n[r],e==-1&&++D;if(D!=0)for(o=t,t=c(F,k,6,o.length-D,15,1),Q=0,A=o,P=0,i=A.length;P<i;++P)e=A[P],e!=-1&&(t[Q++]=e);return t.sort(Fe(D0.prototype.hd,D0,[])),t}function uX(t){var e,A,n,P;if(A=new i8,t.g.a.length!=0){for(P=new z9(N(t.g,0)),e=1;e<t.g.a.length;e++)kD(P,N(t.g,e));mt(A.g,P),A.d=-1}if(t.f.a.length!=0){for(n=new z9(N(t.f,0)),e=1;e<t.f.a.length;e++)kD(n,N(t.f,e));mt(A.f,n),A.d=-1}return A}function QX(t,e){var A,n,P,r,i;for(t.i=c(F,k,6,t.g.f,15,1),n=0;n<t.f.f;n++)R1(t.f,n)!=0&&(t.i[e[R1(t.f,n)]]=R0(t.f,n));if(i=c(F,k,6,t.g.q,15,1),r=nr(t.g,i,!1,!1),r>1)for(P=c(F,k,6,r,15,1),A=0;A<t.g.f;A++)t.i[A]|=P[i[A]]++<<5}function oX(t,e){return!e&&(e={mode:3}),e=Object.assign({},e),\"ensureCoordinates\"in e?(e.ensureCoordinates=!!e.ensureCoordinates,eO(t,e.ensureCoordinates)):(typeof e.mode!==n9&&(e.mode=3),e.mode=Math.trunc(e.mode),SN(t,e.mode))}function yf(t,e,A,n){var P;if(A==null){t.v!=null&&(t.v[e]=null);return}if(A.length==1&&!n){P=A[0],t.C[e]!=P&&gf(t,e,P,0,-1,0),t.v!=null&&(t.v[e]=null);return}t.v==null&&(t.v=c(F,f0,7,t.M,0,2)),t.v[e]=A,n&&(t.B[e]=Y(t.B[e],1)),t.T=0,t.K=!0}function UX(t,e){var A,n,P,r,i,f,D;for(A=c(Ut,Tt,6,Ht(t.L,e),15,1),P=0;P<Ht(t.L,e);P++)A[P]=Y0(t.L,e,_(t.L,e,P));for(A.sort(Fe(gi.prototype.hd,gi,[])),r=EF(A,0),i=ik(A,0,r),n=1;n<A.length;n++)f=EF(A,n),D=ik(A,n,f),i<D&&(i=D,r=f);return r}function LX(t,e,A){var n,P,r,i,f,D,Q,o,L,s;for(s=new QU(new eD),Q=e,o=0,L=Q.length;o<L;++o)for(D=Q[o],P=A,r=0,i=P.length;r<i;++r)n=P[r],f=c(F,k,6,2,15,1),f[0]=t.J[D],f[1]=t.C[n],ze(s.a,f,(kr(),wo))==null;return Lk(s,c(F,f0,7,0,0,2))}function ar(t,e){var A,n,P,r;if(r=t.d.a.length,r==0)return-1;for(P=1;2*P<=r;)P<<=1;for(n=P,--P;n!=0;){if(n>>=1,P>=r){P-=n;continue}if(A=Zd(t,e,N(t.d,P)),A==0)return P;if(n==0)break;A<0?P-=n:P+=n}return P<r&&Zd(t,e,N(t.d,P))>0&&++P,-(P+1)}function sX(t,e,A,n){var P,r,i,f,D,Q;if(P=t.e[e],f=c(F,k,6,P,15,1),Q=b5(t,e,A,n,f),Q==3)return!1;for(i=(t.u[e]&3)==Q?257:129,D=0;D<P;D++)(f[D]&1)==1&&(r=t.k[e][A[D]],t.H[r]=i,t.D[0][r]!=e&&(t.D[1][r]=t.D[0][r],t.D[0][r]=e));return!0}function yX(t){var e,A,n,P;for(n=new Zt(t.g);n.a<n.c.a.length;)if(e=$t(n),e.q!=0)return!1;for(P=new Zt(t.f);P.a<P.c.a.length;)if(e=$t(P),e.q!=0)return!1;for(A=new Zt(t.a);A.a<A.c.a.length;)if(e=$t(A),e.q!=0)return!1;return!0}function lX(t,e){var A,n,P;if(t.f=e,W7(t.e,t.c,t.f),ln(t.e,4,8)==0)return t.a=null,0;for(t.a=t.e.F,A=t.a.a.length-1;A>=0;A--)for(P=N(t.a,A),n=0;n<P.length;n++)if(P[n]!=-1&&t.b[n]>0&&t.b[n]>Yi(t.f,P[n])){LA(t.a,A);break}return t.a.a.length}function Vb(t,e,A){var n,P,r,i,f;for(this.a=c(F,k,6,t.f,15,1),this.a[0]=e,A[e]=!0,r=0,i=0;r<=i;){for(P=O(t,this.a[r]),f=0;f<P;f++)n=_(t,this.a[r],f),w.Math.abs(t.w[n])==0&&t0(V(t.B[n],a0),0)&&!A[n]&&(this.a[++i]=n,A[n]=!0);++r}}function hX(t,e,A,n,P){var r,i,f,D,Q,o,L,s;return r=$n(e.C[A]),i=$n(e.C[P]),f=r>i?4:3,D=(Q=$n(e.C[A]),o=$n(e.C[n]),L=$n(e.C[P]),Q>L&&(Q=(s=m1(L),m1(L=Q),s).a),_r(B(d(F,1),k,6,15,[1,0,2]),B(d(F,1),k,6,15,[o,Q,L]),t)),D>=0?j0(t.a[D][f]):0}function Eb(t,e,A){var n,P,r;if(t.o[e]==2||(t.o[e]==1||SP(t,e,!0))&&t.j[e]!=3||t.o[e]==0&&t.j[e]!=4)return 1;for(r=-2,P=0;P<t.j[e];P++)if(n=t.i[e][P],n!=A){if(r==-2)r=HU(t.d,n);else if(r!=HU(t.d,n))return 1}return t.j[e]-1}function TX(t,e){var A,n,P,r,i;if(t.i.K){if(gt(V(y0(t.i,e),1),0))return!0;if(i=MA(t.i,e),i!=null){for(n=i,P=0,r=n.length;P<r;++P)if(A=n[P],A==5||A==6||A==7||A==8||A==15||A==16||A==33||A==34)return!0;return!1}}return Vv(X(t.i,e))}function cX(t,e,A){var n,P,r,i,f,D,Q,o,L;for(L=c(OA,te,6,1+t.d[t.d.length-1],14,1),n=0,i=e,D=0,o=i.length;D<o;++D)P=i[D],L[t.d[n]]=I1(L[t.d[n]],P<<t.b[n]),++n;for(r=A,f=0,Q=r.length;f<Q;++f)P=r[f],L[t.d[n]]=I1(L[t.d[n]],P<<t.b[n]),++n;return L}function u5(t,e){var A,n,P;this.a=t.D[0][e],this.b=t.D[1][e],n=R1(t,this.a),P=R1(t,this.b),n<P?(this.d=n,this.e=P):(this.d=P,this.e=n),this.c=t.G[e]&31,A=t.H[e]&127,A==16?this.c|=16:A==2?this.c|=2:A==4?this.c|=4:this.c|=1,this.i=(tr(),ll)}function bs(t,e){var A,n,P;if(A=z(t.V,0,e),d0(t.V,A)!=0)return Hi(t.V,A)||d0(t.V,A)!=1&&d0(t.V,A)!=2?-1:A;if($1(t.V,A)==1){for(P=0;P<O(t.V,A);P++)if(CA(t.V,A,P)==2&&(n=_(t.V,A,P),$1(t.V,n)==2&&(d0(t.V,n)==1||d0(t.V,n)==2)))return n}return-1}function wX(t){if(t.Wc()){var e=t.c;e.Xc()?t.n=\"[\"+e.k:e.Wc()?t.n=\"[\"+e.Uc():t.n=\"[L\"+e.Uc()+\";\",t.b=e.Tc()+\"[]\",t.j=e.Vc()+\"[]\";return}var A=t.g,n=t.d;n=n.split(\"/\"),t.n=Ps(\".\",[A,Ps(\"$\",n)]),t.b=Ps(\".\",[A,Ps(\".\",n)]),t.j=n[n.length-1]}function Sb(t){var e,A,n,P;e=t.M!=0?t.M:t.D!=0?t.D:-1,t.t=(W9(),A=(e&rP)>>16,n=(e&nP)>>8,P=e&255,(A+vt(w.Math.round(bf*(92-A)))<<16)+(n+vt(w.Math.round(bf*(160-n)))<<8)+P+vt(w.Math.round(bf*(255-P)))),t.u=Os(sy,e),t.H=-24321,t.I=-6291392}function jQ(t){var e,A,n,P,r,i,f;do for(f=!1,A=0;A<t.j.g;A++)if(t.e[A]){for(r=!1,P=0;P<2;P++){for(n=z(t.j,P,A),e=!1,i=0;i<O(t.j,n);i++)if(A!=xt(t.j,n,i)&&t.e[xt(t.j,n,i)]){e=!0;break}if(!e){r=!0;break}}r&&(f=!0,aD(t,A))}while(f)}function Q5(t){var e,A,n,P,r,i,f;do for(f=!1,A=0;A<t.k.g;A++)if(t.g[A]){for(r=!1,P=0;P<2;P++){for(e=!1,n=z(t.k,P,A),i=0;i<O(t.k,n);i++)if(A!=xt(t.k,n,i)&&t.g[xt(t.k,n,i)]){e=!0;break}if(!e){r=!0;break}}r&&(f=!0,vQ(t,A))}while(f)}function qb(t){var e,A,n,P,r,i;for(t.e=c(Ut,Tt,6,t.d,15,1),A=new Zt(t.a);A.a<A.c.a.length;)e=$t(A),e.dc(t.i,t.e);for(i=-1e8,n=.1,r=0;r<t.d;r++)t.e[r]*=n,t.e[r]>i&&(i=t.e[r]);if(i>10){for(;i*n>10;)n*=.5;for(P=0;P<t.d;P++)t.e[P]*=n}return n}function gX(t){t=t||{};var e=t.countMode||FV;switch(e){case FV:return 4;case\"existence\":return 1;case\"firstMatch\":return 2;case\"separated\":return 3;case\"rigorous\":return 5;case\"unique\":return 6;default:throw new Error(\"invalid count mode: \"+e)}}function Rs(t,e){var A,n,P,r,i,f;return r=t.a*tl+t.b*1502,f=t.b*tl+11,A=w.Math.floor(f*RV),r+=A,f-=A*h4,r%=h4,t.a=r,t.b=f,e<=24?w.Math.floor(t.a*Qc[e]):(P=t.a*(1<<e-24),i=w.Math.floor(t.b*oc[e]),n=P+i,n>=lo&&(n-=s8),n)}function Ib(t,e){var A,n,P,r;if(t.K){if(gt(V(t.B[e],1),0))return!1;if(t.v!=null&&t.v[e]!=null){for(n=t.v[e],P=0,r=n.length;P<r;++P)if(A=n[P],!(A>=21&&A<=30||A>=39&&A<=48||A==57||A>=72&&A<=80||A==89||A>=104&&A<=112))return!1}}return sG(t.C[e])}function dX(t,e,A,n,P,r){var i,f,D,Q,o,L,s;for(q8(t.k[A],n,P,r),s=t.o,L=c(Pt,ft,6,s.q,16,1),D=c(F,k,6,s.q,15,1),D[0]=A,L[e]=!0,L[A]=!0,f=0,Q=0;f<=Q;){for(o=0;o<s.e[D[f]];o++)i=s.i[D[f]][o],L[i]||(L[i]=!0,D[++Q]=i,q8(t.k[i],n,P,r));++f}}function O0(t,e,A,n){var P;if(e==A)return-1;for(P=0;P<t.r;P++)if(t.D[0][P]==e&&t.D[1][P]==A||t.D[0][P]==A&&t.D[1][P]==e)return t.H[P]<n&&(t.H[P]=n),P;return t.r>=t.N&&eQ(t,t.N*2),t.D[0][t.r]=e,t.D[1][t.r]=A,t.H[t.r]=n,t.F[t.r]=0,t.G[t.r]=0,t.T=0,t.r++}function o5(t,e,A){var n,P,r,i,f,D;if(e==A)return 0;for(ut(t,1),i=c(F,k,6,t.q,15,1),r=c(F,k,6,t.q,15,1),r[0]=e,i[e]=1,P=0,f=0;P<=f;){for(D=0;D<t.e[r[P]];D++){if(n=t.i[r[P]][D],n==A)return i[r[P]];i[n]==0&&(r[++f]=n,i[n]=i[r[P]]+1)}++P}return-1}function pQ(t,e){var A,n;if(ut(t,1),t.j[e]==2&&t.n[e][0]==2&&t.n[e][1]==2){for(A=0;A<2;A++)for(n=0;n<t.e[t.i[e][A]];n++)if(G9(t,t.k[t.i[e][A]][n],t.i[e][A]))return t.k[t.i[e][A]][n]}else for(A=0;A<t.e[e];A++)if(G9(t,t.k[e][A],e))return t.k[e][A];return-1}function U5(t,e,A){var n,P,r,i,f,D;for(ut(t,1),r=c(F,k,6,t.f,15,1),D=c(Pt,ft,6,t.f,16,1),r[0]=e,r[1]=A,D[e]=!0,D[A]=!0,P=1,i=1;P<=i;){for(f=0;f<t.j[r[P]];f++){if(n=t.i[r[P]][f],n==e&&P!=1)return-1;D[n]||(D[n]=!0,r[++i]=n)}++P}return i}function r2(t,e){var A;return e==null?null:(A=le(t.c,e),A||((e.endsWith(\"<\")||e.endsWith(\"-\"))&&(A=le(t.c,e.endsWith(\"<\")?oA(e,0,e.length-1)+\">\":e.endsWith(\"-\")?oA(e,0,e.length-1)+\"+\":e),A)?(A=new cj(A),ze(t.c,e,A),A):null))}function BX(t,e,A,n,P,r){var i,f,D,Q,o;for(f=new f1,i=D_(t,e),D=0;D<e.q;D++)for(Q=0;Q<D+1;Q++)o=UN(A,new Ii(D,Q)),(o==(Xr(),si)||o==S2)&&w.Math.abs(i[D])>yo&&w.Math.abs(i[Q])>yo&&kn(new lh(e,D,Q))<n&&mt(f,new $v(e,D,Q,o,i[D],i[Q],P,r));return f}function vX(t,e,A,n,P){var r,i,f,D,Q;for(Q=-1,i=0;i<O(t.j,A);i++)if(_(t.j,A,i)==e){Q=i;break}for(f=-1,r=0;r<O(t.d,P);r++)if(_(t.d,P,r)==n){f=r;break}for(D=2;D<8;D++)if(t.p[A][Q][D]==null||cs(t.p[A][Q][D],t.i[P][f][D])!=0)return D-2<<8;return 1536}function FX(t,e,A,n){var P,r,i,f,D,Q,o;for(o=n.a.length,0<o?n.a=oA(n.a,0,0):0>o&&(n.a+=S8(c(lr,te,6,-o,15,1))),D=vn(t.k,e)&&(t.j&4)==0,r=A,i=0,f=r.length;i<f;++i)P=r[i],n.a.length!=0&&(n.a+=\",\"),Q=(J1(),X0)[P],J(n,D?Q.toLowerCase():Q);return n.a}function mX(t){var e,A;for(A=new yD,e=0;e<t.length;e++)switch(Gt(e,t.length),t.charCodeAt(e)){case 38:A.a+=\"&&\";break;case 9:A.a+=\"&09\";break;case 10:A.a+=\"&0A\";break;case 32:A.a+=\"&20\";break;default:fB(A,(Gt(e,t.length),t.charCodeAt(e)))}return A.a}function kX(t,e,A,n,P){var r,i,f,D;if(t.j.length==0||t.n.a.length==0)return null;for(D=c(Pt,T0,12,e,0,2),f=c(Pt,ft,6,n,16,1),i=0;i<P.length;i++)P[i]!=-1&&R1(t.f,i)==0&&(f[P[i]]=!0);for(r=0;r<A.length;r++)A[r]!=-1&&R1(t.g,r)==0&&(D[A[r]]=f);return D}function L5(t,e,A,n,P,r){var i,f,D,Q,o;for(q8(t.k[e],n,P,r),o=t.o,D=0;D<o.e[e];D++){if(i=o.i[e][D],f=!1,A!=null){for(Q=0;Q<A.length;Q++)if(i==A[Q]){f=!0;break}}f||(o.e[i]==1?q8(t.k[i],n,P,r):fA(o,o.k[e][D])?q8(t.k[i],n/3,P/3,r/3):dX(t,e,i,n,P,r))}}function i2(t,e,A){var n,P,r,i;if(A==null||A.length==0){zh(t,e,null,null);return}n=A.indexOf(k0(32)),n>0&&n<A.length-1?zh(t,e,Ln((r=(Ct(0,n,A.length),A.substr(0,n)),c0(),r)),Ln((i=(Gt(n+1,A.length+1),A.substr(n+1)),i))):zh(t,e,Ln((P=A,c0(),P)),null)}function bX(t,e){var A,n,P,r;for(t.f=G(e,0)==0?new ZD:new Ki(e),n=new Fu(t.d),A=null,P=0;P<12&&!(gt(t.n,0)&&(z1(),E1(M1(Date.now()),t.n)));P++){if(TR(t,n)||G(e,0)!=0)return n;A?A.e>n.e&&(r=A,A=n,n=r):(A=n,n=new Fu(t.d))}return A}function f2(t,e){var A,n,P,r,i,f;if(!t.b)return!1;for(P=!1,r=t.b.a.length-1;r>=0;r--)if(n=!1,i=N(t.b,r),i.a==2?n=$W(t,i.b,i.c,i.d,e):i.a==1&&(n=xW(t,i.b,e)),n){for(X8(t.b,i),f=0;f<t.g[i.b].length;f++)A=t.g[i.b][f],t.n[A]=!1;P=!0}return P}function CQ(t,e,A){return dt(t,e)!=1?0:16-t.e[A]+16*w.Math.max(0,w.Math.min(9,t.p&&e<t.g?yP(t.p,e):0)-2)+((t.H[e]&384)==0||t.D[0][e]!=A?y8:0)+((t.u[A]&3)==0?C0:0)+(t.C[A]==1?N1:0)+(t.e[A]==1?re:0)+((t.F[e]&64)!=0?0:512)+(t.C[A]!=6?256:0)}function xb(t,e,A,n){var P,r,i,f,D,Q,o;for(P=c(F,k,6,O(t.i,A),15,1),f=0,i=0;i<O(t.i,A);i++)P[f]=_(t.i,A,i),!n[P[f]]&&Ks(t,e,P[f])&&++f;if(f==0)return-1;if(f==1)return P[0];for(D=-1,Q=Et,r=0;r<f;r++)o=iR(t.i,e,P[r],Et,n),o<Q&&(Q=o,D=P[r]);return D}function RX(t,e){var A,n,P;e.j==1?j9(t.s):e.j==0?(YJ(t),t.v=!0,j9(t.s)):O1(e.k)===O1(t.d)||O1(e.k)===O1(t.q)?gb(t):O1(e.k)===O1(t.p)&&(P=B0(t.p),t.t!=P&&(n=t.t+B0(t.o),A=tT(t,P),n<P?Wt(t.o,0):n<P+A?Wt(t.o,n-P):Wt(t.o,A-1),t.t=P))}function jX(t,e){var A,n,P,r;return A=b9(t.R,e),n=uf(t.R,e,!1),P=uf(t.R,e,!0),r=-1,n!=P?A!=-1&&A>n?r=A<<24>>24:r=n<<24>>24:A!=-1?(A>P||A<P&&A>=x1(t.R,e))&&(r=A<<24>>24):!es(t.R,e)&&b3(t.R,e)!=0&&(r=x1(t.R,e),r-=Bu(t.R,e,r)),JO(t,e,r),r}function pX(t){var e,A,n;for(e=0,A=0,n=0;n<t.g.a.length+t.f.a.length;n++)e+=M8(n<t.g.a.length?N(t.g,n):N(t.f,n-t.g.a.length))*(n<t.g.a.length?N(t.g,n):N(t.f,n-t.g.a.length)).r,A+=(n<t.g.a.length?N(t.g,n):N(t.f,n-t.g.a.length)).r;return A!=0?A/e:1}function CX(t){var e,A,n;for(e=0,A=0,n=0;n<t.g.a.length+t.f.a.length;n++)e+=M8(n<t.g.a.length?N(t.g,n):N(t.f,n-t.g.a.length))*(n<t.g.a.length?N(t.g,n):N(t.f,n-t.g.a.length)).r,A+=(n<t.g.a.length?N(t.g,n):N(t.f,n-t.g.a.length)).r;return A!=0?A/e:1}function _0(t,e){var A,n,P,r;if(t.K){if(gt(V(t.B[e],1),0))return!1;if(t.v!=null&&t.v[e]!=null){for(n=t.v[e],P=0,r=n.length;P<r;++P)if(A=n[P],!(A>=3&&A<=4||A>=11&&A<=13||A>=19&&A<=31||A>=37&&A<=51||A>=55&&A<=84||A>=87&&A<=112))return!1}}return oJ(t.C[e])}function js(t,e){var A,n,P,r;if(r=t.c.a.length,r==0)return e8(t.c,0,e),0;for(P=1;2*P<=r;)P<<=1;for(n=P,--P;n!=0;){if(n>>=1,P>=r){P-=n;continue}if(A=Y9(e,N(t.c,P)),A==0)return-1;if(n==0)break;A<0?P-=n:P+=n}return P<r&&Y9(e,N(t.c,P))>0&&++P,e8(t.c,P,e),P}function HX(t){var e,A,n,P,r,i,f,D,Q;if(Q=1,n=wP(t,t.q,t.r,(J1(),gn)),n!=0)(n<1||n>3)&&(Q=1.5/n);else{for(D=Ip,e=1;e<t.q;e++)for(A=0;A<e;A++)r=t.J[A].a-t.J[e].a,i=t.J[A].b-t.J[e].b,f=t.J[A].c-t.J[e].c,P=r*r+i*i+f*f,D>P&&(D=P);Q=3/w.Math.max(.75,D)}return Q}function MX(t){var e,A,n,P;for(A=0;A<t.R.f;A++)$e(t.e[A],A),W1(t.e[A],2*t.c+4,j1(t.f[A],t.c+4));for(P=!1,e=0;e<t.R.f;e++)P=P|ty(t,e,3);for(n=0;n<t.R.g;n++)P=P|JQ(t,n,3);if(!P)return!1;for(;t.U<t.R.f&&(P=w$(t),!!P);)o2(t),t.P&&f2(t.P,t.f);return!0}function Nb(t,e,A,n,P){var r,i,f,D,Q,o,L,s,y;for(r=e.a[A],f=e.a[n],D=e.a[P],o=dm(t.a,e,A,n,P),s=-1,L=0;L<5&&s<0;L++)i=t.a.g.a[r-1][L],Q=t.a.g.a[D-1][L],i>Q&&(i=(y=m1(Q),m1(Q=i),y).a),s=_r(B(d(F,1),k,6,15,[2,1,3,0]),B(d(F,1),k,6,15,[f,i,Q,o]),t);return s}function VX(t,e,A,n,P){var r,i,f;for(r=0,i=0,f=0;f<n;f++)r=(Pr(),I1(Un(V(A[f],T1),V(P,T1)),V(Jt(r),T1))),i=I1(l0(V(t[e+f],T1),V(r,T1)),i),t[e+f]=Jt(i),i=q0(i,32),r=DA(r,32);return i=I1(l0(V(t[e+n],T1),r),i),t[e+n]=Jt(i),Jt(q0(i,32))}function EX(t,e,A,n){var P,r,i,f,D,Q;for(i=c(F,k,6,t.f.q,15,1),f=c(F,k,6,t.f.q,15,1),i[0]=A,i[1]=e,f[A]=1,f[e]=2,r=1,D=1;r<=D;){for(Q=0;Q<O(t.f,i[r]);Q++){if(P=_(t.f,i[r],Q),P==n)return 1+f[i[r]];f[P]==0&&Vi(t.f,P)&&(i[++D]=P,f[P]=f[i[r]]+1)}++r}return 0}function SX(t,e,A,n){var P,r,i,f,D,Q,o;for(ut(t,1),n==null&&(n=c(Pt,ft,6,t.q,16,1)),D=c(F,k,6,t.q,15,1),D[0]=e,n[e]=!0,i=0,Q=0,f=1;i<=Q;){for(r=A?t.i[D[i]].length:t.e[D[i]],o=0;o<r;o++)P=t.i[D[i]][o],P<n.length&&!n[P]&&(D[++Q]=P,n[P]=!0,++f);++i}return f}function ps(t,e){var A,n,P,r,i,f;for(i=0;i<2;i++)if(A=z(t.i,i,e),X(t.i,A)==7&&O(t.i,A)==2&&(n=z(t.i,1-i,e),X(t.i,n)==6)){for(f=0;f<O(t.i,n);f++)if(P=_(t.i,n,f),r=xt(t.i,n,f),(X(t.i,P)==8||X(t.i,P)==16)&&dt(t.i,r)==2&&O(t.i,P)==1)return!0}return!1}function qX(t){var e,A,n;return A=t.l,(A&A-1)!=0||(n=t.m,(n&n-1)!=0)||(e=t.h,(e&e-1)!=0)||e==0&&n==0&&A==0?-1:e==0&&n==0&&A!=0?NL(A):e==0&&n!=0&&A==0?NL(n)+22:e!=0&&n==0&&A==0?NL(e)+44:-1}function HQ(t,e,A,n,P){t[e[0]][e[1]]?t[e[0]][e[1]].a.length==2||t[e[0]][e[1]].c<P?t[e[0]][e[1]]=new $h(e,A,n,P):t[e[0]][e[1]].c==P&&(t[e[0]][e[1]].a[0]=(t[e[0]][e[1]].a[0]+n)/2,t[e[0]][e[1]].b=dK(t[e[0]][e[1]].b,A)):t[e[0]][e[1]]=new $h(e,A,n,P)}function IX(t,e,A){var n,P,r,i,f,D,Q;if(Ht(t.d,A)==1&&(r=_(t.d,A,0),dU(t.d,r))){for(n=e.k[A],P=e.k[r],D=new xe(P.a-n.a,P.b-n.b,P.c-n.c),i=0;i<O(t.d,r);i++)if(f=_(t.d,r,i),Vi(t.d,f)&&(Q=J8(P,e.k[f]),lb(D,Q)>RA))return!1;return M9(M9(n,D),D),!0}return!1}function xX(t){var e,A,n,P,r,i;for(e=0;e<t.k.g;e++)if(t.g[e]){for(r=!0,P=0;P<2&&r;P++)for(A=z(t.k,P,e),i=0;i<O(t.k,A)&&r;i++)e!=xt(t.k,A,i)&&t.g[xt(t.k,A,i)]&&(r=!1);if(r)for(w0(t.k,e,8),--t.c,n=0;n<2;n++)A=z(t.k,n,e),z0(t.k,A)&&(Jn(t.k,A,!1),--t.b)}}function NX(t,e){e.j==0?(sJ(t),t.B=!0,j9(t.v)):e.j==1?j9(t.v):O1(e.k)===O1(t.b)?e.a==1?(N8(t.D,\"\"),JU(t.w,A4)):(N8(t.D,Ri(t.A,t.a)),JU(t.w,lV)):O1(e.k)===O1(t.c)?(uA(t.f,!1),Wt(t.n,0),Wt(t.j,0)):O1(e.k)===O1(t.f)&&uA(t.c,!1)}function OX(t,e,A,n,P){var r,i,f,D,Q,o;for(r=1/(1+w.Math.exp(t-5)),o=1-1/(1+w.Math.exp(e+5)),Q=1/(1+w.Math.exp(.012*A-6)),i=1-1/(1+w.Math.exp(n)),f=(.5+r/2)*(.5+o/2)*(.5+Q/2)*(.5+i/2),D=0;P!=null&&D<P.length;D++)P[D]==2?f*=.8:P[D]==3&&(f*=.6);return f}function Ob(t){var e,A,n,P,r,i,f;for(n=0,A=0;A<t.q;A++)(t.u[A]&512)!=0&&++n;if(n==0)return null;for(r=0,P=0;P<t.r;P++)(t.u[t.D[0][P]]&t.u[t.D[1][P]]&512)!=0&&++r;for(f=c(Pt,ft,6,t.q,16,1),e=0;e<t.q;e++)f[e]=(t.u[e]&512)!=0;return i=new YA(n,r),ii(t,i,f,!1,null),i}function GX(t,e){var A,n,P,r,i,f,D,Q;for(i=0,n=e,P=0,r=n.length;P<r;++P)A=n[P],A==-1&&++i;for(Q=c(F,k,6,e.length-i,15,1),D=0,f=0;f<e.length;f++)e[f]!=-1&&(Q[D]=R0(t.g,f)<<16|R0(t.H,e[f]),t.i!=null&&(Q[D]|=t.i[f]<<24),++D);return Q.sort(Fe(D0.prototype.hd,D0,[])),Q}function Cs(t,e){var A,n;A=-1,n=0,(t.G[e]&16)!=0&&(A=16,++n),(t.G[e]&64)!=0&&(A=64,++n),(t.G[e]&32)!=0&&(A=32,++n),(t.G[e]&4)!=0&&(A=4,++n),(t.G[e]&2)!=0&&(A=2,++n),(t.G[e]&8)!=0&&(A=8,++n),(t.G[e]&1)!=0&&(A=1,++n),A!=-1&&A!=(t.H[e]&127)&&(t.H[e]=A),n<2&&(t.G[e]&=-128)}function JX(t,e){var A,n;t.c==e.c?t.i=(tr(),Ro):zr(e.c)==1?(t.g=e.c==1?1:e.c==2?386:e.c==4?4:e.c==16?16:8,t.i=(tr(),Ul)):(A=(t.c&16)!=0?0:(t.c&1)!=0?1:(t.c&2)!=0?2:3,n=(e.c&16)!=0?0:(e.c&1)!=0?1:(e.c&2)!=0?2:3,n==A?t.i=(tr(),Ro):(t.f=n-A,t.i=(tr(),Ll)))}function zX(t,e,A,n,P,r){var i,f,D,Q,o,L;return Q=u1(e,n,P),i=Q8(t,e,A,n),f=Q8(t,e,n,P),D=Q8(t,e,P,r),L=f,f==0&&dt(e,Q)==1&&(i==1||D==1)&&(L=2),o=AW(e,A,n,P,r),o==4&&u1(e,A,P)==-1&&u1(e,n,r)==-1?40+L:o==5&&(e.a[A]==1||e.a[n]==1||e.a[P]==1||e.a[r]==1)?50+L:L}function YX(t){var e,A,n;return!t.startsWith(d6)||!t.endsWith(B6)||(A=t.indexOf(k0(34),21),A==-1)?null:(n=(Ct(21,A,t.length),t.substr(21,A-21)),e=oA(t,21+n.length+1,t.length-17),at(n,\"arrow\")?new dj(e):at(n,\"text\")?new kR(e):null)}function KX(t){var e,A,n,P,r,i,f,D;for(ut(t,1),f=c(Ee,PA,6,t.f,15,1),n=c(F,k,6,t.f,15,1),D=0;D<t.f;D++){for(n[0]=D,P=c(F,k,6,t.f,15,1),P[D]=1,A=0,r=0;A<=r;){for(i=0;i<t.j[n[A]];i++)e=t.i[n[A]][i],P[e]==0&&(P[e]=P[n[A]]+1,n[++r]=e,f[D]+=P[e]-1);++A}f[D]/=r}return f}function XX(t){var e,A,n;for(t.n=c(F,k,6,t.j,15,1),t.k=c(F,k,6,t.j,15,1),t.o=c(F,k,6,t.j,15,1),e=0;e<t.i.f;e++)t.b[e]!=0&&(n=t.b[e]-1,t.a!=null&&(t.k[n]+=t.a[e]),t.c!=null&&(t.o[n]+=t.c[e]));for(A=0;A<t.i.g;A++)t.g[A]&&dt(t.i,A)==2&&(t.n[t.b[z(t.i,0,A)]-1]+=2)}function Hs(){Hs=d1,M4=w.Math.cos(B2),q4=w.Math.sin(B2),E4=w.Math.cos(t4),x4=w.Math.sin(t4),Fo=w.Math.cos(AA),mo=w.Math.sin(AA),V4=w.Math.cos(Uo),I4=w.Math.sin(Uo),S4=w.Math.cos(b6),N4=w.Math.sin(b6),w.Math.cos(zC),w.Math.sin(zC)}function ZX(t){var e,A,n,P,r;return isNaN(t)?(K9(),ec):t<-9223372036854776e3?(K9(),BE):t>=9223372036854776e3?(K9(),a4):(P=!1,t<0&&(P=!0,t=-t),n=0,t>=fP&&(n=vt(t/fP),t-=n*fP),A=0,t>=iP&&(A=vt(t/iP),t-=A*iP),e=vt(t),r=S0(e,A,n),P&&WL(r),r)}function s5(t,e){W9();var A,n,P,r,i;return A=t&qn,i=(t&rP)>>16,P=(t&nP)>>8,n=t&255,r=vt(1/(1-e)),i==0&&P==0&&n==0?A|r<<16|r<<8|r:(i>0&&i<r&&(i=r),P>0&&P<r&&(P=r),n>0&&n<r&&(n=r),A|w.Math.min(vt(i/e),255)<<16|w.Math.min(vt(P/e),255)<<8|w.Math.min(vt(n/e),255))}function WX(t,e){var A,n,P,r,i,f,D,Q,o;for(D=Nn(t.e),Q=N(D.k,e).length,f=N(D.k,e),o=!1,P=0;P<Q;P++)if(t.f[f[P]]==0){o=!0;break}if(o){for(A=(180*Q-360)/Q*.01745329238474369,i=N(D.j,e),r=0;r<Q;r++)qT(t,i[r],f[r==0?Q-1:r-1],f[r],A);if(Q<=4)for(n=0;n<Q;n++)t.f[f[n]]+=Q}}function MQ(t,e,A,n){this.b=c(O4,A0,48,2,0,1),this.b[0]=t,this.b[1]=e,this.c=c(Ut,Tt,6,2,15,1),this.d=c(Ut,Tt,6,2,15,1),this.c[0]=nu(this.b[0],A),this.d[0]=Pu(this.b[0],A),this.c[1]=nu(this.b[1],n),this.d[1]=Pu(this.b[1],n),this.a=c(F,k,6,2,15,1),this.a[0]=1,this.a[1]=1}function _X(t){W9();var e,A,n,P;return P=t.a>>16&255,n=t.a>>8&255,A=t.a&255,e=t.a>>24&255,P==0&&n==0&&A==0?new bL(5,5,5,e):(P>0&&P<5&&(P=5),n>0&&n<5&&(n=5),A>0&&A<5&&(A=5),new bL(w.Math.min(vt(P/qf),255),w.Math.min(vt(n/qf),255),w.Math.min(vt(A/qf),255),e))}function Ms(t,e){Pr();var A,n,P,r,i,f,D,Q,o;return e.d>t.d&&(f=t,t=e,e=f),e.d<63?TZ(t,e):(i=(t.d&-2)<<4,Q=Sh(t,i),o=Sh(e,i),n=xs(t,Ir(Q,i)),P=xs(e,Ir(o,i)),D=Ms(Q,o),A=Ms(n,P),r=Ms(xs(Q,n),xs(P,o)),r=s2(s2(r,D),A),r=Ir(r,i),D=Ir(D,i<<1),s2(s2(D,r),A))}function Q8(t,e,A,n){var P,r,i,f,D,Q,o,L,s,y;for(P=e.a[A],r=e.a[n],o=u1(e,A,n),L=!0,y=(ut(e,7),e.p),s=0;s<y.j.a.length&&L;s++)for(f=N(y.k,s),D=0,Q=f.length;D<Q;++D)if(i=f[D],i==o&&e.b[s]==0){L=!1;break}return dt(e,o)==1&&L&&(PL(t.b,P)&&PL(t.b,r)||bB(t.b,P)&&bB(t.b,r))?1:0}function t9(t,e){Jr();var A,n,P,r;if(isNaN(t))return\"NaN\";if(!isNaN(t)&&!isFinite(t))return\"Infinity\";if(t==0)return\"0\";for(P=1,n=1;n<e;n++)P*=10;for(r=P*10,A=0;w.Math.abs(t)+.5<P;)t*=10,--A;for(;w.Math.abs(t)+.5>=r;)t/=10,++A;return Ma(M1(t+(t<0?-.5:.5)),A,e,!0)}function $X(t){var e,A,n,P,r,i;for(n=0,r=0;r<t.e.length;r++)for(e=t.e[r],A=Ht(t.j,e),i=0;i<A;i++)_(t.j,e,i)>e&&++n;for(t.f=c(F,k,6,n,15,1),t.g=c(F,k,6,t.j.q,15,1),n=0,P=0;P<t.e.length;P++)for(e=t.e[P],A=Ht(t.j,e),t.g[e]=P,i=0;i<A;i++)_(t.j,e,i)>e&&(t.f[n++]=xt(t.j,e,i))}function aX(t){for(var e,A,n,P,r,i;;){for(r=c(Pt,ft,6,t.U+1,16,1),n=-1,A=0;A<t.R.f;A++)gQ(t.R,A)!=0&&(r[t.f[A]]&&n<t.f[A]&&(n=t.f[A]),r[t.f[A]]=!0);if(n==-1)break;for(P=0,e=0;e<t.R.f;e++)i=0,t.f[e]==n&&(i=++P),$e(t.e[e],e),W1(t.e[e],t.c,t.f[e]),W1(t.e[e],8,i);t.U=Zn(t)}}function Gb(t,e){var A,n,P,r,i;if(t.q==0)return null;for(n=t.J[0].a,r=t.J[0].b,P=t.J[0].a,i=t.J[0].b,A=1;A<t.q;A++)n>t.J[A].a?n=t.J[A].a:P<t.J[A].a&&(P=t.J[A].a),r>t.J[A].b?r=t.J[A].b:i<t.J[A].b&&(i=t.J[A].b);return e?(e.c=n,e.d=r,e.b=P-n,e.a=i-r):e=new QA(n,r,P-n,i-r),e}function Jb(t,e,A){var n,P,r,i;for(i=1,P=0;P<t.g.q;P++)t.i[3*P]=kt(t.g,P),t.i[3*P+1]=pt(t.g,P),t.i[3*P+2]=vA(t.g,P);if(i=Ga(t,e,A),i==0)for(n=0;n<t.g.q;n++)Be(t.g,n,t.i[3*n]),Ie(t.g,n,t.i[3*n+1]),TP(t.g,n,t.i[3*n+2]);for(r=new Zt(t.c);r.a<r.c.a.length;)$t(r),null.wd();return i}function tZ(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y;for(r=!1,P=0;P<2;P++)if(A=z(t.g,P,e),o=t.G[A],O(t.H,o)>2){for(s=z(t.g,1-P,e),D=Et,f=0;f<O(t.g,A);f++)n=_(t.g,A,f),n!=s&&D>n&&(D=n);for(y=t.G[s],Q=Et,i=0;i<O(t.H,o);i++)L=_(t.H,o,i),L!=y&&Q>L&&(Q=L);t.G[D]!=Q&&(r=!r)}return r}function eZ(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y;for(Q=new Zt(e);Q.a<Q.c.a.length;)if(D=$t(Q),D.sd()==1){for(f=D.f,L=t,s=0,y=L.length;s<y;++s){if(o=L[s],o==-1)return!1;for(A=!1,P=f,r=0,i=P.length;r<i;++r)if(n=P[r],o==n){A=!0;break}if(!A)return!1}return!0}return!1}function AZ(t,e,A,n,P){var r,i,f,D,Q,o,L;if(A)return w_(e,n[1],n[2]);for(Q=k1(Pt,[T0,ft],[12,6],16,[2,e.q],2),i=c(F,k,6,2,15,1),f=0;f<2;f++)i[f]=SQ(e,n[1+f],P[f],Q[f],null,null);for(L=i[0]<i[1]?0:1,o=c(F,k,6,i[L],15,1),D=0,r=0;r<e.q;r++)Q[L][r]&&(o[D++]=r);return t.a=L==1,o}function zb(t,e){var A,n,P,r,i,f;for(P=0;P<t.b;P++)if(t.e[P][e]&&t.c[P]!=-3){for(n=0;n<=t.j.g.length;n++)if(n!=e&&t.e[P][n])for(t.e[P][e]=!1,f=P<t.a?P:P<t.b?P-t.a:-1,i=ox(t,P<t.a?1:P<t.b?2:0),r=0;r<t.j.g[e].length;r++)A=t.j.g[e][r],rh(t.j,A)&&t.j.j[A]==f&&(t.j.j[A]=i<<24>>24)}}function lf(t){var e,A,n,P,r;for(r=new V0,P=t.length,n=0;n<P;n++)switch(e=hk(t,n,t.length),A=e&c1,e){case 38:r.a+=\"&amp;\";break;case 60:r.a+=\"&lt;\";break;case 62:r.a+=\"&gt;\";break;case 34:r.a+=\"&quot;\";break;case 39:r.a+=\"&apos;\";break;default:r.a+=String.fromCharCode(A)}return r.a}function nZ(t){var e,A,n,P;for(e=0;e<t.k.f;e++)if(X(t.k,e)==7&&b1(t.k,e)==0&&x1(t.k,e)>3&&$1(t.k,e)>0){for(P=0;P<O(t.k,e);P++)if(A=_(t.k,e,P),n=xt(t.k,e,P),dt(t.k,n)>1&&tA(t.k,A)){l1(t.k,n)==4?w0(t.k,n,2):w0(t.k,n,1),E0(t.k,e,b1(t.k,e)+1),E0(t.k,A,b1(t.k,A)-1),XA(t.k,e,-1);break}}}function PZ(t,e){var A,n,P,r,i,f;for(r=t.indexOf(e+\"=(\")+e.length+2,i=t.indexOf(k0(41),r),P=Pe(t,r),A=Q1((Ct(r,P,t.length),t.substr(r,P-r)),P1,Et),f=c(F,k,6,A,15,1),n=0;n<A;n++)r=lA(t,P),P=Pe(t,r),(P==-1||P>i)&&(P=i),f[n]=Q1((Ct(r,P,t.length),t.substr(r,P-r)),P1,Et);return f}function Yb(t,e){var A;if(A=0,e<t.g&&(E8(t.p,e)||t.H[e]==8)||t.H[e]==8)A|=8;else switch(dt(t,e)){case 0:A|=16;break;case 1:A|=1;break;case 2:A|=2;break;case 3:A|=4;break;case 4:A|=32;break;case 5:A|=64}return(t.F[e]&64)!=0?A|=256:t.K||(A|=128),e<t.g&&Re(t.p,e)?A|=IA:t.K||(A|=iP),A}function Kb(t,e,A,n,P){var r;if(D2(e,A,n,P,3))return 60;if(D2(e,A,n,P,4))return 90;switch(r=e.a[n],mn(t.a.b,r)){case 2:if(e.C[n]==8)return 105;if(ND(t.a.b,r))return 180;break;case 3:if(n8(t.a.b,r)==3&&VA(t.a.b,r)==0)return e.C[n]==7?107:92;break;case 4:return 109.45}return 120}function rZ(t,e,A){var n,P,r,i,f,D,Q,o;for(n=!1,D=0;D<e.j.a.length;D++)if(N(e.k,D).length==6){for(f=!0,Q=N(e.j,D),o=N(e.k,D),r=0;r<6;r++)if(!Lf(t,Q[r],!1)||!t.e[o[r]]){f=!1;break}if(f){if(A)for(i=0;i<6;i++)Lf(t,Q[i],!0);for(P=0;P<6;P+=2)aD(t,o[P]);n=!0;break}}return n}function W1(t,e,A){t.b==0&&(++t.c,t.b=63),t.b==63?(t.d[t.c]=Y(t.d[t.c],A),t.b-=e):t.b>=e?(t.d[t.c]=j1(t.d[t.c],e),t.d[t.c]=Y(t.d[t.c],A),t.b-=e):(t.d[t.c]=j1(t.d[t.c],t.b),t.d[t.c]=Y(t.d[t.c],q0(A,e-t.b)),e-=t.b,++t.c,t.b=63-e,t.d[t.c]=Y(t.d[t.c],V(A,(1<<e)-1)))}function Xb(t,e,A,n){var P,r,i,f;if(n==1&&!AT(t,e)){if(O(t.b,e)==3)return-1;if(O(t.b,e)==3)return P=zm(t,e,A),R0(t.b,P[0])==R0(t.b,P[1])?P[2]:R0(t.b,P[0])==R0(t.b,P[2])?P[1]:P[0]}for(i=-1,f=-1,r=0;r<O(t.b,e);r++)P=_(t.b,e,r),P!=A&&i<R0(t.b,P)&&(i=R0(t.b,P),f=P);return f}function Zb(t){var e,A,n,P,r,i,f,D;for(t.c=0,A=new f1,P=1;P<t.e.length;P++)for(r=0;r<P;r++)f=w.Math.abs(t.a[P]-t.a[r]),D=w.Math.abs(t.b[P]-t.b[r]),n=w.Math.sqrt(f*f+D*D),n<.8&&(e=c(F,k,6,2,15,1),e[0]=t.e[P],e[1]=t.e[r],A.a.push(e)),i=1-w.Math.min(n,1),t.c+=i*i;return A}function iZ(t){var e;return e=new fD,mt(e.a,new Ze(\"The polar surface area prediction is based on an atom-type based\",2)),mt(e.a,new Ze(\"increment system, published by P. Ertl, B. Rohde, P. Selzer\",2)),mt(e.a,new Ze(\"in J. Med. Chem. 2000, 43, 3714-3717\",2)),mt(e.a,new Ze(e4,2)),dJ(t,e),e}function fZ(t){var e,A,n,P,r,i,f;for(f=t.T&248,ut(t,1),i=c(F,k,6,t.f,15,1),A=0;A<t.f;A++)i[A]=It(t,A);for(n=0;n<i.length;n++)if(i[n]!=0)for(r=0;r<i[n];r++)O0(t,n,Wr(t,1),1);for(ut(t,1),P=.8*wP(t,t.q,t.r,(J1(),gn)),e=0;e<i.length;e++)i[e]!=0&&g$(t,e,i[e],P);(f&8)!=0&&(t.T|=248&(8|f))}function Wb(t){var e,A,n,P;for(P=!1,A=0;A<t.q;A++)gt(V(t.B[A],a0),0)&&(t.C[A]=-1,P=!0);for(P&&Ai(t),t.v!=null&&(t.v=null,P=!0),e=0;e<t.q;e++)gt(t.B[e],0)&&(t.B[e]=0,P=!0);for(n=0;n<t.r;n++)t.G[n]!=0&&(t.G[n]=0,P=!0),t.H[n]==8&&(t.H[n]=1,P=!0);return P&&(t.T=0),P}function DZ(t,e,A,n,P){var r,i,f,D,Q,o,L,s;for(i=c(F,k,6,P,15,1),r=0;r<t.f.q;r++){for(D=0;D<Ht(t.f,r);D++){for(s=A[_(t.f,r,D)],Q=0;Q<D&&!(s<i[Q]);Q++);for(o=D;o>Q;o--)i[o]=i[o-1];i[Q]=s}for(L=Ht(t.f,r),$e(e[r],r),W1(e[r],n,A[r]),W1(e[r],(P-L)*(n+1),0),f=0;f<L;f++)W1(e[r],n+1,i[f])}}function _b(t,e){var A,n;for(this.b=c(O4,A0,48,2,0,1),this.b[0]=t,this.b[1]=e,this.c=c(Ut,Tt,6,2,15,1),this.d=c(Ut,Tt,6,2,15,1),this.a=c(F,k,6,2,15,1),A=0;A<2;A++){for(n=0;n<this.b[A].e.length;n++)this.c[A]+=nu(this.b[A],n),this.d[A]+=Pu(this.b[A],n);this.a[A]=this.b[A].e.length}}function uZ(t,e){var A,n,P,r;this.a=new s3((n=my,n)),ut(t,15),r=(z1(),$A),this.b=e,P=t.P!=null?t.P:\"\",J(this.b,P+r),J(this.b,\"Actelion Java MolfileCreator 2.0\"+r+r),J(this.b,\"  0  0  0  0  0  0              0 V3000\"+r),this.c=1,A=Sz(t),A&&(this.c=HX(t)),vp(this,t,A),J(this.b,Dr+r)}function QZ(t,e){var A,n,P;if(A=z(t.R,0,e),A>=t.R.f)return!1;if(t.db[A]==1||t.db[A]==2)return!0;if(t.db[A]==3)return!1;if(n=os(t.R,A),n!=-1)return t.o[n]==1||t.o[n]==2;for(P=0;P<O(t.R,A);P++)if(CA(t.R,A,P)==2&&(t.db[_(t.R,A,P)]==1||t.db[_(t.R,A,P)]==2))return!0;return!1}function y5(t,e,A,n,P){var r,i,f,D,Q;for(t.K=t.K|e.K,i=c(F,k,6,e.q,15,1),D=$0(t,1),Q=$0(t,2),r=0;r<A;r++)(P||t0(V(e.B[r],a0),0))&&(i[r]=En(e,t,r,D,Q));for(f=0;f<n;f++)(P||!Qe(e,e.D[0][f])&&!Qe(e,e.D[1][f]))&&e9(e,t,f,D,Q,i[e.D[0][f]],i[e.D[1][f]],!1);return t.L=t.L&&e.L,t.I=0,t.T=0,i}function oZ(t,e,A){var n,P;if(e<3||(n=e-1,(t[n]==43||t[n]==45)&&--n,!Xn(t[n]&c1))||(--n,t[n]!=68&&t[n]!=82&&t[n]!=88&&t[n]!=122))return!1;for(A[0]=0;n>0&&mB(t[n-1]);)--n,++A[0];for(P=e+1;mB(t[n]);){if(t.length<=P||t[n]!==t[P])return!1;++n,++P}return!0}function UZ(t,e){var A,n,P,r,i,f,D,Q,o;return Q=t.e,Q==0?(ke(),yr):(n=t.d,A=t.a,n==1?(P=Un(V(A[0],T1),V(e,T1)),D=Jt(P),i=Jt(DA(P,32)),i==0?new kA(Q,D):new oe(Q,2,B(d(F,1),k,6,15,[D,i]))):(f=n+1,r=c(F,k,6,f,15,1),r[n]=Qs(r,A,n,e),o=new oe(Q,f,r),Rn(o),o))}function LZ(t,e){var A,n,P,r,i,f;if(e.startsWith(\"M  CHG\")&&(r=Q1(B1((Ct(6,9,e.length),e.substr(6,3))),P1,Et),r>0))for(A=10,f=14,i=1;i<=r;++i,A+=8,f+=8)n=Q1(B1((Ct(A,A+3,e.length),e.substr(A,A+3-A))),P1,Et)-1,P=Q1(B1((Ct(f,f+3,e.length),e.substr(f,f+3-f))),P1,Et),E0(t.j,n,P)}function sZ(t,e){var A,n,P,r,i,f;if(e.startsWith(\"M  ISO\")&&(P=Q1(B1((Ct(6,9,e.length),e.substr(6,3))),P1,Et),P>0))for(A=10,f=14,r=1;r<=P;++r,A+=8,f+=8)n=Q1(B1((Ct(A,A+3,e.length),e.substr(A,A+3-A))),P1,Et)-1,i=Q1(B1((Ct(f,f+3,e.length),e.substr(f,f+3-f))),P1,Et),R9(t.j,n,i)}function $b(t,e){var A,n,P,r,i;if(n=e>>5,e&=31,n>=t.d)return t.e<0?(ke(),Dc):(ke(),yr);if(r=t.d-n,P=c(F,k,6,r+1,15,1),Ab(P,r,t.a,n,e),t.e<0){for(A=0;A<n&&t.a[A]==0;A++);if(A<n||e>0&&t.a[A]<<32-e!=0){for(A=0;A<r&&P[A]==-1;A++)P[A]=0;A==r&&++r,++P[A]}}return i=new oe(t.e,r,P),Rn(i),i}function yZ(t,e){var A,n,P,r,i,f,D;for(P=c(Pt,ft,6,t.L.q,16,1),n=0;n<t.L.r;n++)H3(t.L,n)&&(P[z(t.L,0,n)]=!0,P[z(t.L,1,n)]=!0);for(i=new tD,A=0;A<t.L.q;A++)r=Qe(t.L,A)?e*.47:P[A]?e*.38:0,r!=0&&(f=X1(t.R,kt(t.L,A)),D=K1(t.R,pt(t.L,A)),i.c=f-r,i.d=D-r,i.b=r*2,i.a=r*2,t.v=dQ(t.v,i))}function lZ(t){var e,A,n,P;for(P=new V0,A=0;A<t.g.a.length;A++)A!=0&&(P.a+=\".\"),J(P,ku(new lD(N(t.g,A),2)));for(P.a+=\">\",n=0;n<t.a.a.length;n++)n!=0&&(P.a+=\".\"),J(P,ku(new R7(N(t.a,n))));for(P.a+=\">\",e=0;e<t.f.a.length;e++)e!=0&&(P.a+=\".\"),J(P,ku(new lD(N(t.f,e),2)));return P.a}function ab(t,e){Ck(),this.n=t,this.a=e,this.i=Q6(this.a._,f4),GG(this.i),this.g=Q6(this.a._,f4),mz(this.g),this.o=2*F8+LF(xU(this.i)/4|0),this.e=2*F8+LF(NU(this.i)/4|0),this.c=Q6(this.a._,dV),this.j=(de==-1&&(de=globalThis.devicePixelRatio||1),4/de),this.b=5,this.k=-1,this.f=-1,this.a.db=this}function hZ(t,e,A,n,P){if(!Ap(t,e,P))return!1;if(t.s==null)t.t=new xQ(e),ao(t.t,t.v),g5(t.t,t.o,-1);else{switch(t.b=new Ni(new eD),A){case 2:t.B=new VL(t,!1,t.o);break;case 3:t.B=new VL(t,!0,t.o);break;case 4:t.B=new ih(t,t.o);break;case 1:t.B=new kb(t)}Ad(t.B,n)}return!0}function D2(t,e,A,n,P){var r,i,f,D,Q,o,L,s;if(s=(ut(t,7),t.p),Q=new DD,A8(Q,m1(e)),A8(Q,m1(A)),A8(Q,m1(n)),u1(t,e,A)>=0&&u1(t,A,n)>=0){for(o=0;o<s.j.a.length;o++)if(N(s.k,o).length==P){for(L=new DD,i=N(s.j,o),f=0,D=i.length;f<D;++f)r=i[f],A8(L,m1(r));if(AQ(L,Q))return!0}}return!1}function tR(t,e,A,n){var P,r,i,f,D,Q,o,L,s;for(ut(t,1),r=0;r<t.q;r++)e[r]=-1;for(Q=0,P=0;P<t.q;P++)if(e[P]==-1){for(e[P]=Q,o=c(F,k,6,t.q,15,1),o[0]=P,D=0,L=0;D<=L;){for(f=n?t.i[o[D]].length:t.e[o[D]],s=0;s<f;s++)i=t.i[o[D]][s],e[i]==-1&&!A[t.k[o[D]][s]]&&(o[++L]=i,e[i]=Q);++D}++Q}return Q}function eR(t){var e,A,n;if(t.K)for(ut(t,7),e=0;e<t.g;e++)n=zr(t.G[e]&127),(e<t.g&&(E8(t.p,e)||t.H[e]==8))&(t.G[e]&8)!=0&&(t.G[e]&=-9,--n),n!=0&&(A=t.H[e]&127,A==1?t.G[e]|=1:A==2?t.G[e]|=2:A==4?t.G[e]|=4:A==32?t.G[e]|=32:A==64?t.G[e]|=64:A==16?t.G[e]|=16:A==8&&(t.G[e]|=8))}function l5(t,e,A,n,P,r,i,f,D){var Q,o,L,s,y;return s=n<vo.length&&vo[n]?w.Math.min(3,r):0,y=P<vo.length&&vo[P]?w.Math.min(3,i):0,f=w.Math.min(7,f),D=w.Math.min(7,D),Q=f+(s<<3)+(w.Math.min(127,n)<<5),o=D+(y<<3)+(w.Math.min(127,P)<<5),L=A?8:e?8+t:t,(L<<24)+(Q<o?(Q<<12)+o:(o<<12)+Q)}function TZ(t,e){var A,n,P,r,i,f,D,Q,o,L,s;return n=t.d,r=e.d,f=n+r,D=t.e!=e.e?-1:1,f==2?(o=Un(V(t.a[0],T1),V(e.a[0],T1)),s=Jt(o),L=Jt(DA(o,32)),L==0?new kA(D,s):new oe(D,2,B(d(F,1),k,6,15,[s,L]))):(A=t.a,P=e.a,i=c(F,k,6,f,15,1),mJ(A,n,P,r,i),Q=new oe(D,f,i),Rn(Q),Q)}function AR(t,e){var A,n,P,r,i,f;if(dt(t,e)!=1)return!1;for(r=0;r<2;r++){for(A=t.D[r][e],f=t.D[1-r][e];t.o[A]==2&&t.j[A]==2&&t.C[A]<10;)for(i=0;i<2;i++)if(n=t.i[A][i],n!=f){if(t.j[n]==1||(P=t.k[A][i],dt(t,P)==1&&P<e))return!0;f=A,A=n;break}if(t.j[A]==1)return!0}return!1}function nR(t,e,A,n,P){var r,i,f,D,Q,o,L,s,y;for(y=c(Pt,ft,6,n.length,16,1),f=t,Q=0,L=f.length;Q<L;++Q)if(r=f[Q],e[r]==0){if(n[A[r]]||y[A[r]])return!1;y[A[r]]=!0}for(s=-1,i=t,D=0,o=i.length;D<o;++D)if(r=i[D],e[r]==0){if(s==-1)s=P[r];else if(P[r]!=s)return!1}return!0}function PR(t,e,A,n){var P,r;if(e){if(P=t.a.Rb(A.c,e.c),P==0)return n.d=hd(e,A.d),n.b=!0,e;r=P<0?0:1,e.a[r]=PR(t,e.a[r],A,n),KP(e.a[r])&&(KP(e.a[1-r])?(e.b=!0,e.a[0].b=!1,e.a[1].b=!1):KP(e.a[r].a[r])?e=Zu(e,1-r):KP(e.a[r].a[1-r])&&(e=ZB(e,1-r)))}else return A;return e}function rR(t,e,A,n,P){var r,i,f;return r=A==-1?w.Math.abs(P[e].a-P[t.B[0]].a)/8:w.Math.abs(P[e].a-P[A].a),n<r&&(n=r),i=A==-1?w.Math.abs(P[e].b-P[t.B[0]].b)/8:w.Math.abs(P[e].b-P[A].b),n<i&&(n=i),t.jb&&(f=A==-1?w.Math.abs(P[e].c-P[t.B[0]].c)/8:w.Math.abs(P[e].c-P[A].c),n<f&&(n=f)),n}function iR(t,e,A,n,P){var r,i,f,D,Q,o;if(e==A)return 0;for(t.$b(1),D=c(F,k,6,t.q,15,1),f=c(F,k,6,t.q,15,1),f[0]=e,D[e]=1,i=0,Q=0;i<=Q&&D[f[i]]<=n;){for(o=0;o<t.e[f[i]];o++){if(r=t.i[f[i]][o],r==A)return D[f[i]];D[r]==0&&(P==null||P.length<=r||!P[r])&&(f[++Q]=r,D[r]=D[f[i]]+1)}++i}return-1}function cZ(t,e,A){var n,P,r,i,f;return r=iz(e,A),r==-1?-1:(P=(n=Pe(e,r+1),n==-1?e.length:n),i=(Ct(A,r,e.length),e.substr(A,r-A)),f=(Ct(r+1,P,e.length),e.substr(r+1,P-(r+1))),(f.startsWith(\"(\")&&f.endsWith(\")\")||f.startsWith('\"')&&f.endsWith('\"'))&&(f=oA(f,1,f.length-1)),ze(t,i,f),lA(e,P))}function eA(t,e){var A;return L1(e),A=2-t.e,A==0?t:A>0?A<ci.length&&t.a+gl[vt(A)]<54?new _3(t.f*ci[vt(A)]):new jD($N((!t.c&&(t.c=kP(M1(t.f))),t.c),vt(A)),2):t.a<54&&-A<ci.length?uK(t.f,ci[vt(-A)],e):b$((!t.c&&(t.c=kP(M1(t.f))),t.c),ni(-A),e)}function h5(t,e){lU();var A,n,P,r,i;for(P=0;P<t.q;P++)for(i=Kn(t),K0(i,P,H4),ut(i,15),n=0;n<i.f;n++)(i.u[n]&Tn)!=0&&pQ(i,n)==-1&&(r=(ut(i,7),i.o[n]==2&&i.j[n]==2?Qb(i,n,!1):Ns(i,n,!1)),r!=-1&&(t.H[r]=257,t.T=0,t.D[1][r]==n&&(A=t.D[0][r],t.D[0][r]=n,t.T=0,t.D[1][r]=A,t.T=0),Me(t,n,e,0)))}function wZ(t,e,A,n,P,r){D8();var i,f,D,Q,o,L,s,y,l,h,T;for(s=t.o,i=c(Pt,ft,6,s.q,16,1),Q=c(F,k,6,s.q,15,1),Q[0]=e,i[e]=!0,l=A,h=0,T=l.length;h<T;++h)y=l[h],i[y]=!0;for(Tf(t,e,n,P,r),D=0,o=0;D<=o;){for(L=0;L<s.e[Q[D]];L++)f=s.i[Q[D]][L],i[f]||(i[f]=!0,Q[++o]=f,Tf(t,f,n,P,r));++D}}function gZ(t){var e,A,n,P;if(t.g.K)for(e=0;e<t.g.r;e++)n=Ae(t.g,e),(n&127)!=0&&(A=-1,P=0,(n&16)!=0&&(A=16,++P),(n&64)!=0&&(A=64,++P),(n&32)!=0&&(A=32,++P),(n&4)!=0&&(A=4,++P),(n&2)!=0&&(A=2,++P),(n&8)!=0&&(A=8,++P),(n&1)!=0&&(A=1,++P),A!=-1&&(w0(t.g,e,A),P==1&&Ge(t.g,e,127,!1)))}function dZ(t,e,A){var n;switch(n=A.length<45?0:Mr(B1((Ct(42,45,A.length),A.substr(42,3)))),n){case 0:break;case 1:h1(t.j,e,768,!0);break;case 2:h1(t.j,e,128,!0);break;case 3:h1(t.j,e,384,!0);break;default:h1(t.j,e,896,!0)}A.length>=48&&(Gt(47,A.length),A.charCodeAt(47)==49)&&h1(t.j,e,ge,!0)}function fR(t,e,A,n,P){var r,i,f,D,Q,o;if(ut(t,7),!((t.u[e]&cn)==0||A&&!(e<t.f&&r0(t.p,e))))for(D=c(F,k,6,t.f,15,1),D[0]=e,n[e]=!0,f=0,Q=0;f<=Q;){for(o=0;o<t.j[D[f]];o++)i=t.k[D[f]][o],!P[i]&&(t.F[i]&64)!=0&&(!A||i<t.g&&Re(t.p,i))&&(P[i]=!0,r=t.i[D[f]][o],n[r]||(n[r]=!0,D[++Q]=r));++f}}function hf(t,e,A,n,P,r){var i,f,D,Q,o,L;for(t.a[A]=e<<16>>16,t.c[A]=t.c[A]+t.c[n]<<16>>16,t.d[A][0]=P<<16>>16,t.d[A][1]=r<<16>>16,L=t.a.length-1,D=c(zt,_t,6,L,15,1),Q=c(zt,_t,6,L,15,1),o=c(zt,ee,16,L,0,2),f=0,i=0;i<t.a.length;i++)i!=n&&(D[f]=t.a[i],Q[f]=t.c[i],o[f]=t.d[i],++f);t.a=D,t.c=Q,t.d=o}function Ar(t){var e;switch(e=-1,t.w){case 18:e=9;break;case 2:t.t!=-1&&P0(t.V,t.t)||t.u!=-1&&mP(t.V,t.u)?e=t.W?4:t.Z?3:2:t.t!=-1||t.u!=-1?e=11:t.v?e=t.W?4:t.Z&&!Xt(t.v,62)?3:2:e=t.Z?t.d?8:6:t.d?7:5;break;case 4:e=1;break;case 22:e=0;break;case 21:e=12;break;default:e=11}t.s!=e&&(t.s=e,Wd(t._,e))}function Tf(t,e,A,n,P){var r,i,f,D,Q,o,L,s,y;L=n.a,s=n.b,y=n.c,r=w.Math.cos(P),Q=w.Math.sin(P),o=1-r,i=t.k[e].a-A.a,f=t.k[e].b-A.b,D=t.k[e].c-A.c,AU(t,e,A.a+(o*L*L+r)*i+(o*L*s+Q*y)*f+(o*L*y-Q*s)*D),nU(t,e,A.b+(o*L*s-Q*y)*i+(o*s*s+r)*f+(o*s*y+Q*L)*D),PU(t,e,A.c+(o*L*y+Q*s)*i+(o*y*s-Q*L)*f+(o*y*y+r)*D)}function BZ(t,e){var A,n,P,r,i,f,D,Q;for(Q=new f1,A=0;A<e.q;A++)if(n=e.a[A],!(e.e[A]<=1&&ND(t.b,n)))for(r=0;r<e.e[A];r++)for(f=e.i[A][r],i=0;i<e.e[A];i++)D=e.i[A][i],!(f>D)&&_J(t,e,f,A,D)&&(P=new jk(t,e,f,A,D),(w.Math.abs(P.d)>Lo||w.Math.abs(P.e)>Lo)&&Q.a.push(P));return Q}function vZ(t,e,A,n,P){var r,i,f,D,Q,o,L;switch(r=e.a[A],i=e.a[P],Q=Q8(t,e,A,n),L=Q8(t,e,n,P),D=r<=i?Q:L,o=r<i?L:Q,f=dm(t,e,A,n,P),f){case 1:return D>0||D==o?1:2;case 2:return 3;case 3:return 5;case 4:return 4;case 5:return D>0||D==o?6:7;case 6:return 8;case 7:return D>0||D==o?9:10;case 8:return 11}return 0}function FZ(t,e){var A,n,P;if(t.c)return 3;for(P=new Zt(t.e);P.a<P.c.a.length;)n=$t(P),n.a!=io&&n.a!=Et&&(n.a=e[n.a]);switch(A=!1,t.e.a.length){case 2:if(N(t.e,0).a>=io||N(t.e,1).a>=io)return 3;A=uY(t,e);break;case 3:mt(t.e,new Y3(t,Et,t.b));case 4:A=xz(t);break;default:return 3}return t.d^A?1:2}function DR(t,e,A){var n,P;if(dt(t,e)!=1)return!1;if((t.u[A]&3)!=0)return!0;for(P=0;P<t.r;P++)if(P!=e&&t.H[P]==2&&(t.D[0][P]==A&&(t.u[t.D[1][P]]&3)!=0||t.D[1][P]==A&&(t.u[t.D[0][P]]&3)!=0))return!0;for(n=0;n<t.r;n++)if(n!=e&&t.H[n]==1&&(t.D[0][n]==A||t.D[1][n]==A)&&(t.F[n]&3)!=0)return!0;return!1}function mZ(t){var e,A,n,P;for(n=0;n<t.i.r;n++)for(P=0;P<2;P++)e=z(t.i,P,n),A=z(t.i,1-P,n),X(t.i,e)==1&&ye(t.i,e)>1&&X(t.i,A)>1&&t.b[A]!=0&&(ye(t.i,e)==2?(t.a==null&&(t.a=c(F,k,6,t.i.q,15,1)),++t.a[A]):(t.c==null&&(t.c=c(F,k,6,t.i.q,15,1)),++t.c[A]),$w(t.i,e));(t.a!=null||t.c!=null)&&Ai(t.i)}function kZ(t){var e,A,n,P,r,i,f,D,Q;if(t.b){for(e=c(F,k,6,t.F.a.length,15,1),n=0;n<e.length;n++)for(e[n]=n,r=N(t.a,n),i=0,f=r.length;i<f;++i)P=r[i],P&&(e[n]+=u0);for(e.sort(Fe(D0.prototype.hd,D0,[])),Q=new f1,D=new f1,A=0;A<e.length;A++)mt(Q,N(t.F,e[A]&c1)),mt(D,N(t.a,e[A]&c1));t.F=Q,t.a=D}}function bZ(t){return t.t!=-1?(wQ(t.V,t.t),t.t=-1,t.eb=w.Math.max(t.eb,1),e1(t.k),q1(t,new S1(t,1,!0)),!0):t.u!=-1?(XT(t.V,t.u),t.u=-1,t.eb=w.Math.max(t.eb,1),e1(t.k),q1(t,new S1(t,1,!0)),!0):t.v&&!t.v.j?(X8(t.I,t.v),t.v=null,t.eb=w.Math.max(t.eb,1),e1(t.k),!0):!1}function RZ(t,e){var A,n,P,r;for(P=2+2*w.Math.sqrt(t.d.q),n=0;n<t.d.q;n++)Ht(t.d,n)!=1&&(AU(e,n,P*jn(t.f)-P/2),nU(e,n,P*jn(t.f)-P/2),PU(e,n,P*jn(t.f)-P/2));for(A=0;A<t.d.q;A++)Ht(t.d,A)==1&&(r=_(t.d,A,0),AU(e,A,e.k[r].a+4*jn(t.f)-2),nU(e,A,e.k[r].b+4*jn(t.f)-2),PU(e,A,e.k[r].c+4*jn(t.f)-2));pU(e)}function jZ(t,e,A){var n,P,r,i;if(n=A[t.a],P=A[t.b],t.i==(tr(),sl))return O0(e,n,P,t.g),!0;if(r=u1(e,n,P),t.i==Ul)return w0(e,r,t.g),!0;if(t.i==Ll){if(i=dt(e,r)+t.f,i>=0&&i<=3)return w0(e,r,(J1(),i==0?16:i==1?1:i==2?386:i==3?4:i==4?32:64)),!0}else if(t.i==yl)return e.H[r]=512,!0;return!1}function T5(t,e,A,n){var P;switch(P=A/2,n&F1){case F1:if(e){t.w.a=e.c+e.b/2,t.w.b=e.d+e.a-P;break}case 0:t.w.a=t.v.c+t.v.b/2,t.w.b=t.v.d+t.v.a+P,e&&t.w.b>e.d+e.a-P&&(t.w.b=e.d+e.a-P);break;case h8:if(e){t.w.a=e.c+e.b/2,t.w.b=e.d+P;break}case T8:t.w.a=t.v.c+t.v.b/2,t.w.b=t.v.d-P,e&&t.w.b<e.d+P&&(t.w.b=e.d+P)}}function uR(t,e){var A,n;for(this.k=c(Ur,U9,26,t.g.a.length+t.f.a.length,0,1),n=0;n<t.g.a.length+t.f.a.length;n++)this.k[n]=n<t.g.a.length?N(t.g,n):N(t.f,n-t.g.a.length);for(this.n=t.g.a.length,this.a=c(Ur,U9,26,t.a.a.length,0,1),A=0;A<t.a.a.length;A++)this.a[A]=N(t.a,A);this.o=!1,this.c=1,this.g=e,Fs(this)}function pZ(t,e){var A,n,P,r,i,f,D,Q;for(Q=Nn(t.H),f=0;f<Q.j.a.length;f++)if(tf(Q,f,e)){for(D=c(F,k,6,2,15,1),P=0;P<2;P++)for(D[P]=Et,n=z(t.H,P,e),r=0;r<O(t.H,n);r++)A=_(t.H,n,r),A!=z(t.H,1-P,e)&&D[P]>A&&(D[P]=A);return i=0,yA(Q,f,D[0])&&++i,yA(Q,f,D[1])&&++i,i==2?2:i==1?1:2}return 0}function CZ(t,e){var A,n,P,r,i,f;if(e.startsWith(\"M  RGP\")&&(P=Q1(B1((Ct(6,9,e.length),e.substr(6,3))),P1,Et),P>0))for(A=10,f=14,r=1;r<=P;++r,A+=8,f+=8)n=Q1(B1((Ct(A,A+3,e.length),e.substr(A,A+3-A))),P1,Et)-1,i=Q1(B1((Ct(f,f+3,e.length),e.substr(f,f+3-f))),P1,Et),i>=1&&i<=20&&K0(t.j,n,qA(\"R\"+i,2))}function QR(t,e,A,n){var P,r,i,f,D,Q,o,L,s;for(L=A[n],i=A[n+1]-L,s=c(Rtt,A0,175,i,0,1),D=0;D<i;D++)s[D]=new M0,s[D].c=t[D+L],s[D].b=e[D+L],s[D].a=D+L;for(P=new N0,o=n;o>1;o--){for(Q=0;Q<i;Q++)s[Q].c+=t[s[Q].b]<<16,s[Q].b=e[s[Q].b];for(Xi(s,0,s.length,P),r=1,f=0;f<i;f++)t[s[f].a]=r,f!=i-1&&lB(s[f],s[f+1])!=0&&++r}}function HZ(t){var e,A,n,P,r,i;if(t.R.f==0){t.N=\"\";return}for(r=0,n=!1,P=!1,A=0;A<t.R.f;A++)r<R1(t.R,A)&&(r=R1(t.R,A)),Bn(t.R,A)?n=!0:P=!0;if(r==0){t.N=\"\";return}for(i=G8(r),W3(t,!0),Ot(t,i,4),Ot(t,n?1:0,1),Ot(t,P?1:0,1),e=0;e<t.R.f;e++)Ot(t,R1(t.R,t.B[e]),i),n&&P&&Ot(t,Bn(t.R,t.B[e])?1:0,1);t.N=HL(t)}function c5(t,e,A,n){var P,r,i;for(P=0;P<2;P++)if(r=t.i[A[1]][P],r!=A[0])return r==e||(i=t.k[A[1]][P],A[0]=A[1],A[1]=r,t.j[r]==1)?!1:(n!=null&&(t.u[A[0]]&I0)==0&&(t.u[A[1]]&I0)==0&&(n[0]=w.Math.max(n[0],i)),t.j[r]==2&&t.o[r]==2&&t.C[r]<=7?c5(t,e,A,n):!0);return!1}function MZ(t){var e;for(t.S=c(Pt,ft,6,t.R.f,16,1),e=0;e<t.R.f;e++)if(X(t.R,e)==7){if(O(t.R,e)==4){t.S[e]=!0;continue}if(O(t.R,e)==3){if(Hr(t.R,e)==3){t.S[e]=!0;continue}if(b1(t.R,e)==1){t.S[e]=!0;continue}if(SP(t.R,e,!0))continue;if((t.Q&32)!=0){t.S[e]=!0;continue}if(Ss(t.R,e)){t.S[e]=!0;continue}}}}function Vs(t){var e,A,n,P,r,i;for(i8.call(this),i=t&&t.g?t.g.a.length:0,r=t&&t.f?t.f.a.length:0,e=t&&t.a?t.a.a.length:0,n=0;n<i;n++)mt(this.g,new z9(N(t.g,n)));for(P=0;P<r;P++)mt(this.f,new z9(N(t.f,P)));for(A=0;A<e;A++)mt(this.a,new z9(N(t.a,A)));this.b=new us(t.b),t.e!=null&&(this.e=t.e),this.c=t.c||cQ(t)}function VZ(t,e,A,n,P){var r,i,f,D,Q,o,L,s;for(s=0,L=-1,i=0;i<t.j.f;i++){o=N(e.g,s),ut(o,1);do++L==o.f&&(L=0,o=d9(e,++s));while(o.K&&gt(V(o.B[L],a0),0));We(o,L,A[i],A[i]<=P)}for(Q=0,D=-1,r=0;r<t.d.f;r++){f=N(e.f,Q),ut(f,1);do++D==f.f&&(D=0,f=c3(e,++Q));while(f.K&&gt(V(f.B[D],a0),0));We(f,D,n[r],n[r]<=P)}}function oR(t){var e,A,n,P,r;if(t.l==0&&t.m==0&&t.h==0)return\"0\";if(t.h==h8&&t.m==0&&t.l==0)return\"-9223372036854775808\";if(t.h>>19!=0)return\"-\"+oR(Z9(t));for(A=t,n=\"\";!(A.l==0&&A.m==0&&A.h==0);){if(P=TL(xf),A=O5(A,P,!0),e=\"\"+I7(In),!(A.l==0&&A.m==0&&A.h==0))for(r=9-e.length;r>0;r--)e=\"0\"+e;n=e+n}return n}function EZ(t,e){var A,n,P,r;if(!ol)return 0;if(Yf[e].bc(me(new FA(t)))!=-1)return 3;for(r=new bD(1),A=new zA,P=0;P<Lr[e].a.length;P++)if(i2(new JA(!1),A,N(Lr[e],P)),un(r,t),yn(r,A),ln(r,1,r.c)>0)return 3;for(n=0;n<sr[e].a.length;n++)if(i2(new JA(!1),A,N(sr[e],n)),un(r,t),yn(r,A),ln(r,1,r.c)>0)return 2;return 1}function u2(t,e){var A,n,P,r;return r=w.Math.sin(e),A=w.Math.cos(e),n=1-A,P=k1(Ut,[T0,Tt],[15,6],15,[3,3],2),P[0][0]=t.a*t.a*n+A,P[1][1]=t.b*t.b*n+A,P[2][2]=t.c*t.c*n+A,P[0][1]=t.a*t.b*n-t.c*r,P[1][2]=t.b*t.c*n-t.a*r,P[2][0]=t.c*t.a*n-t.b*r,P[0][2]=t.a*t.c*n+t.b*r,P[1][0]=t.b*t.a*n+t.c*r,P[2][1]=t.c*t.b*n+t.a*r,P}function UR(t,e,A){var n;if(O(t.b,e)==2)return 1;if(n=zm(t,e,A),O(t.b,e)==3)return R0(t.b,n[0])==R0(t.b,n[1])?AT(t,e)?2:1:AT(t,e)?1:0;if(O(t.b,e)==4){if(R0(t.b,n[0])==R0(t.b,n[1])&&R0(t.b,n[0])==R0(t.b,n[2]))return 3;if(R0(t.b,n[0])==R0(t.b,n[1])||R0(t.b,n[0])==R0(t.b,n[2])||R0(t.b,n[1])==R0(t.b,n[2]))return 1}return 0}function SZ(t,e){var A,n,P,r,i;return n=V(e,T1),G(t,0)>=0?(r=Hn(t,n),i=Yr(t,n)):(A=DA(t,1),P=e>>>1,r=Hn(A,P),i=Yr(A,P),i=I1(j1(i,1),V(t,1)),(e&1)!=0&&(G(r,i)<=0?i=l0(i,r):hg(l0(r,i),n)?(i=I1(i,l0(n,r)),r=l0(r,1)):(i=I1(i,l0(j1(n,1),r)),r=l0(r,2)))),Y(j1(i,32),V(r,T1))}function LR(t,e){var A,n,P;for(A=k1(Ut,[T0,Tt],[15,6],15,[2,3],2),n=0;n<2;n++)A[n][0]=vr(e,t.f[n])-vr(e,t.f[4]),A[n][1]=Fr(e,t.f[n])-Fr(e,t.f[4]),A[n][2]=mr(e,t.f[n])-mr(e,t.f[4]);return P=c(Ut,Tt,6,3,15,1),P[0]=A[0][1]*A[1][2]-A[0][2]*A[1][1],P[1]=A[0][2]*A[1][0]-A[0][0]*A[1][2],P[2]=A[0][0]*A[1][1]-A[0][1]*A[1][0],P}function qZ(t){var e,A,n,P;for(t.L=!0,t.$=c(E,q,6,t.R.f,15,1),t.i=c(E,q,6,t.R.g,15,1),P=A2(t,!0);t.U<t.R.f&&P;){for(e=0;e<t.R.f;e++)$e(t.e[e],e),W1(t.e[e],t.c+4,Y(j1(t.f[e],4),t.db[e]<<2));for(A=0;A<t.R.g;A++)ue(t.e[z(t.R,0,A)],t.o[A]),ue(t.e[z(t.R,1,A)],t.o[A]);if(n=Zn(t),t.U==n)break;t.U=n,P=A2(t,!0)}}function w5(t,e){var A,n,P,r,i,f;for(ut(t,e?15:1),t.q=t.f,t.r=t.g,f=c(Pt,ft,6,t.f,16,1),P=0;P<t.f;P++)t.e[P]!=t.j[P]&&(A=uf(t,P,!1),f[P]=t.e[P]==t.j[P]+1&&p9(t,t.k[P][t.j[P]]),t.e[P]=t.j[P],A!=-1&&(i=uf(t,P,!0),A!=i&&(r=((t.u[P]&d8)>>>27)-1,(r==-1||r<A)&&XA(t,P,A))));if(e)for(n=0;n<t.f;n++)f[n]&&ey(t,n);t.T=0}function IZ(t,e){var A,n;return!Vv(X(t.k,e))||X(t.k,e)==6&&(!z0(t.k,e)||b1(t.k,e)>0)||(A=Wn(t.k,e)==null||Z3(t.k,e)[0]==9?0:Z3(t.k,e)[0],n=Yi(t.k,e)-A,n<1)?!1:X(t.k,e)==16||X(t.k,e)==34||X(t.k,e)==52?O(t.k,e)==2&&b1(t.k,e)<=0?!1:n!=2:!0}function dt(t,e){if(t.K&&(t.G[e]&127)!=0){if((t.G[e]&9)!=0)return 1;if((t.G[e]&2)!=0)return 2;if((t.G[e]&4)!=0)return 3;if((t.G[e]&32)!=0)return 4;if((t.G[e]&64)!=0)return 5;if((t.G[e]&16)!=0)return 0}switch(t.H[e]&127){case 1:case 8:return 1;case 2:return 2;case 4:return 3;case 32:return 4;case 64:return 5;default:return 0}}function nr(t,e,A,n){var P,r,i,f,D,Q,o,L,s;for(ut(t,1),r=0;r<t.q;r++)e[r]=-1;for(Q=0,P=0;P<t.q;P++)if(e[P]==-1&&(!A||(t.u[P]&I0)!=0)){for(e[P]=Q,o=c(F,k,6,t.q,15,1),o[0]=P,D=0,L=0;D<=L;){for(f=n?t.i[o[D]].length:t.e[o[D]],s=0;s<f;s++)i=t.i[o[D]][s],e[i]==-1&&(!A||(t.u[i]&I0)!=0)&&(o[++L]=i,e[i]=Q);++D}++Q}return Q}function sR(t,e,A){var n,P,r;return r=w.Math.sqrt((t.i[0].a-e)*(t.i[0].a-e)+(t.i[0].b-A)*(t.i[0].b-A)),r<8?1:(P=w.Math.sqrt((t.i[1].a-e)*(t.i[1].a-e)+(t.i[1].b-A)*(t.i[1].b-A)),P<8?2:(n=w.Math.sqrt((t.i[1].a-t.i[0].a)*(t.i[1].a-t.i[0].a)+(t.i[1].b-t.i[0].b)*(t.i[1].b-t.i[0].b)),r+P<n+5?3:0))}function g5(t,e,A){var n,P,r;for(t.f=G(e,0)==0?new ZD:new Ki(e),t.a=new f1,new f1,t.c=c(Ut,Tt,6,2,15,1),t.c[0]=Ve,t.c[1]=Ve,t.e=!1,P=0,r=0,n=0;n<t.d.g;n++)!_e(t.d,n)&&dt(t.d,n)==1&&Ht(t.d,z(t.d,0,n))>1&&Ht(t.d,z(t.d,1,n))>1&&(fA(t.d,n)?C9(t.d,n)>4&&++r:++P);t.b=A==-1?1<<1+P+(r/2|0):A,JR(t,w.Math.min(8,t.b))}function yR(t){var e,A,n,P,r;for(P=X1(t.R,kt(t.L,0)),A=X1(t.R,kt(t.L,0)),r=K1(t.R,pt(t.L,0)),n=K1(t.R,pt(t.L,0)),e=0;e<t.L.q;e++)P>X1(t.R,kt(t.L,e))&&(P=X1(t.R,kt(t.L,e))),A<X1(t.R,kt(t.L,e))&&(A=X1(t.R,kt(t.L,e))),r>K1(t.R,pt(t.L,e))&&(r=K1(t.R,pt(t.L,e))),n<K1(t.R,pt(t.L,e))&&(n=K1(t.R,pt(t.L,e)));return new QA(P,r,A-P,n-r)}function lR(t,e,A,n,P){var r,i,f,D,Q,o,L,s,y,l,h;return r=e.a[A],i=e.a[P],D=Q8(t.a,e,A,n),Q=Q8(t.a,e,n,P),o=(L=e.a[A],s=e.a[n],y=e.a[P],l=vZ(t.a,e,A,n,P),L>y&&(L=(h=m1(y),m1(y=L),h).a),_r(B(d(F,1),k,6,15,[2,1,3,0]),B(d(F,1),k,6,15,[s,L,y,l]),t)),f=r>i||r==i&&D<Q?1:0,o>=0?j0(t.b[o][4+f]):hX(t.a.i,e,A,n,P)}function hR(){var t,e,A,n,P,r;for(r=new Pn(new di((A=KD(\"/resources/druglikenessNoIndex.txt\"),c0(),A))),this.a=new f1;P=Y1(r),P!=null;){if(n=P.indexOf(k0(9)),n==-1)throw At(new C1(\"line without TAB\"));t=(Ct(0,n,P.length),P.substr(0,n)),e=oD(Le((Gt(n+1,P.length+1),P.substr(n+1)))),mt(this.a,new J7(t,e))}}function TR(t,e){var A,n,P,r,i;if(t.d.q<2)return!0;for(i=new Zt(t.j);i.a<i.c.a.length;)r=$t(i),r.g=!0;for(P=0;P<t.k.length;P++)t.k[P]=!1;for(RZ(t,e),A=new fd(e),Js(t,e,A,0),n=0;KJ(e)&&n<3&&!(gt(t.n,0)&&(z1(),E1(M1(Date.now()),t.n)))&&n$(t,e)!=0;n++)Js(t,e,A,2);return Js(t,e,A,3),Js(t,e,A,4),wG(e)}function xZ(t,e,A,n){var P,r,i,f,D,Q;return r=n==e.length-1?0:n+1,f=n==0?e.length-1:n-1,i=r==e.length-1?0:r+1,dt(t.f,A[n])==2&&(P=qe(t.f,A[n]),P==1||P==2)?(xF(t,e[f],e[n],e[r])^xF(t,e[i],e[r],e[n])&&(P=P==1?2:1),P):$P(t.f,A[n])?(D=zL(Nn(t.f),A[f],A[n]),Q=zL(Nn(t.f),A[r],A[n]),D!=-1||Q!=-1?D==Q?2:1:2):0}function NZ(t,e,A,n,P,r){var i,f,D,Q,o,L;for(i=e.a[A],o=B(d(F,1),k,6,15,[e.a[n],e.a[P],e.a[r]]),f=0;f<4;f++){for(L=c(F,k,6,3,15,1),Q=0;Q<3;Q++)L[Q]=t.a.g.a[o[Q]-1][f+1];if(L.sort(Fe(D0.prototype.hd,D0,[])),D=_r(B(d(F,1),k,6,15,[1,0,2,3]),B(d(F,1),k,6,15,[i,L[0],L[1],L[2]]),t),D>=0)return j0(t.b[D][4])}return 0}function OZ(t){ry();var e,A,n,P,r,i,f,D,Q,o;if(t==null||t.length==0)return null;for(i=null,t=ai(t.toLowerCase(),\"-\"),D=k4,Q=0,o=D.length;Q<o;++Q)for(f=D[Q],r=L8(f[0],\";\"),A=r,n=0,P=A.length;n<P;++n){if(e=A[n],at(ai(e.toLowerCase(),\"-\"),t))return e;if(ai(e.toLowerCase(),\"-\").startsWith(t))if(i==null)i=e;else return\"\"}return i}function d5(t,e){var A,n,P,r,i,f,D,Q;if(i=!1,$1(t.g,e)==0)for(r=1;r<O(t.g,e);r++)for(f=0;f<r;f++)n=_(t.g,e,r),P=_(t.g,e,f),t.G[n]>t.G[P]^n>P&&(i=!i);else for(r=0;r<O(t.g,e);r++){for(A=_(t.g,e,r),Q=0,D=c(F,k,6,3,15,1),f=0;f<O(t.g,A);f++)D[Q]=_(t.g,A,f),D[Q]!=e&&++Q;Q==2&&t.G[D[0]]>t.G[D[1]]^D[0]>D[1]&&(i=!i)}return i}function GZ(t){var e,A,n,P,r;for(r=w.Math.max(t.D.f,t.u.f),t.a=G8(r),t.s=2,A=0;A<t.D.f;A++)t.s=w.Math.max(t.s,O(t.D,A)+Si(t.D,A));for(n=0;n<t.u.f;n++)t.s=w.Math.max(t.s,O(t.u,n)+Si(t.u,n));for(P=w.Math.max(2,(62+t.a+t.s*(t.a+5))/63|0),t.b=c(d4,v2,100,r,0,1),e=0;e<r;e++)t.b[e]=new bU(P);t.F=new SA(t.D,1),t.v=new SA(t.u,1)}function B5(t,e){var A,n,P,r,i;for(i=!1,n=0;n<t.V.q;n++)if(P0(t.V,n)){i=!0;break}if(r=Pk(t,i),r){for(G1(t),A=0;A<t.V.q;A++)(!i||P0(t.V,A))&&(e?Be(t.V,A,2*r.a-kt(t.V,A)):Ie(t.V,A,2*r.b-pt(t.V,A)));for(P=0;P<t.V.r;P++)(!i||mP(t.V,P))&&(l1(t.V,P)==257?w0(t.V,P,129):l1(t.V,P)==129&&w0(t.V,P,257));t.eb=w.Math.max(t.eb,1),e1(t.k)}}function cR(t){var e,A,n,P,r;for(n=$j(t);n;){for(r=!1,A=0;A<O(t.D,n.b);A++)t.I[_(t.D,n.b,A)]==0&&(r=!0);for(P=!1,e=0;e<O(t.u,n.a);e++)t.B[_(t.u,n.a,e)]==0&&(P=!0);if(r&&P)break;t.I[n.b]=Ny,t.B[n.a]=Ny,n=$j(t)}if(!n){for(A=0;A<t.I.length;A++)t.I[A]==Ny&&(t.I[A]=0);for(e=0;e<t.B.length;e++)t.B[e]==Ny&&(t.B[e]=0)}return n}function JZ(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l;for(o=e.p,D=e.n,Q=J0(t,o[2]),L=$9(J8(Q,J0(t,o[1]))),f=u2(L,D==o[1]?A:-A),P=e.o,r=0,i=P.length;r<i;++r)n=P[r],n!=D&&(s=t.k[n].a-Q.a,y=t.k[n].b-Q.b,l=t.k[n].c-Q.c,AU(t,n,s*f[0][0]+y*f[0][1]+l*f[0][2]+Q.a),nU(t,n,s*f[1][0]+y*f[1][1]+l*f[1][2]+Q.b),PU(t,n,s*f[2][0]+y*f[2][1]+l*f[2][2]+Q.c))}function EP(t,e,A){var n,P,r;if(A!=null&&(A.length==0?A=null:(n=qA(A,321),(n!=0&&n==t.C[e]||at(A,\"?\"))&&(K0(t,e,n),A=null))),A==null){if(t.t!=null&&t.t[e]!=null)return t.t[e]=null,!0}else if(t.t==null&&(t.t=c(E,g8,10,t.M,0,2)),t.t[e]==null||!at(fn((r=t.t[e],c0(),r)),A))return t.t[e]=Ln((P=A,c0(),P)),!0;return!1}function zZ(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T;for(ut(e,1),l=t.k,h=0,T=l.length;h<T;++h)y=l[h],Q=A[y.a],o=A[y.b],L=u1(e,Q,o),L==-1?O0(e,Q,o,y.e):y.e==-1?e.H[L]=512:y.e!=-2&&w0(e,L,y.e);if(f=Ai(e),t.a.length!=0)for(ut(e,7),P=t.a,r=0,i=P.length;r<i;++r)n=P[r],D=f==null?A[n]:f[A[n]],s=e.u[D]&3,ce(e,D,s==1?2:1,!1),ey(e,D);return f}function YZ(t,e,A){var n,P,r,i,f;if(t.V.K){if(Qe(t.V,e)||Qe(t.V,A)||(n=MA(t.V,e),P=MA(t.V,A),n==null^P==null))return!1;if(n!=null){if(n.length!=P.length)return!1;for(r=0;r<n.length;r++)if(n[r]!=P[r])return!1}if(i=gt(V(y0(t.V,e),1),0),f=gt(V(y0(t.V,A),1),0),i!=f)return!1}return X(t.V,e)==X(t.V,A)}function wR(){wR=d1,YE=B(d(zt,1),_t,6,15,[0,60,120,180,240,300]),JE=B(d(zt,1),_t,6,15,[17,17,17,17,17,17]),zE=B(d(zt,2),ee,16,0,[B(d(zt,1),_t,6,15,[-20,20]),B(d(zt,1),_t,6,15,[40,80]),B(d(zt,1),_t,6,15,[100,140]),B(d(zt,1),_t,6,15,[160,200]),B(d(zt,1),_t,6,15,[220,260]),B(d(zt,1),_t,6,15,[280,320])])}function v5(t,e){var A,n,P,r;return A=t.D[0][e],n=t.D[1][e],P=tA(t,A),r=tA(t,n),!P&&!r?e<t.g&&Re(t.p,e)?pC:G6+dt(t,e)/10:P&&r||P&&_0(t,n)||r&&_0(t,A)?oo:P&&lm(t,n,A)||r&&lm(t,A,n)?jy:P&&GF(t,n,A)||r&&GF(t,A,n)?_6:P&&n<t.f&&r0(t.p,n)||r&&A<t.f&&r0(t.p,A)?1.9500000476837158:G6}function KZ(t){var e,A;for(t=V(t,r9),A=0;A<(K5(),li).length;A++)if(t0(t,li[A]))return $V[A];return e=new Fn(\"R\"),gt(V(t,s8),0)&&(e.a+=\"0\"),gt(V(t,i9),0)&&(e.a+=\"3\"),gt(V(t,f9),0)&&(e.a+=\"4\"),gt(V(t,D9),0)&&(e.a+=\"5\"),gt(V(t,u9),0)&&(e.a+=\"6\"),gt(V(t,Q9),0)&&(e.a+=\"7\"),gt(V(t,Rf),0)&&(e.a+=\"8\"),e.a}function XZ(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y;for(L=Rj(t.D),f=Rj(t.u),i=c(qE,T0,44,8,0,1),y=Rb(t.D,L),Q=Rb(t.u,f),o=0;o<=7;o++)for(i[o]=new Ni(new Il),r=(n=new x8(new I8(new wr(y[o]).a).b),new gr(n));Cr(r.a.a);)P=(A=B9(r.a),A.ed()),s=le(y[o],P),D=le(Q[o],P),D!=null&&(e=c(F,f0,7,2,0,2),e[0]=s,e[1]=D,ze(i[o],P,e));return i}function ZZ(t,e){var A,n,P,r,i,f,D,Q,o,L,s;for(A=e.a,s=e.i,i=1;i<A.length;i++)if(A[i]!=null){for(f=0;f<i;f++)if(A[i][f]!=0){for(o=t.f[i][f],L=new Um(s,o,A[i][f],t.C),D=!1,Q=null,n=_8(t.i,e.d).c,r=new Zt(n);r.a<r.c.a.length;){if(P=$t(r),vz(P,L)){D=!0;break}Bz(P,L)&&(!Q&&(Q=new f1),Q.a.push(P))}D||(Q&&aL(n,Q),n.a.push(L))}}}function F5(t,e){var A,n,P,r;if(t.o[e]==2&&t.j[e]==2&&t.n[e][0]==2){for(P=0;P<2;P++)if(A=Bm(t,e,t.i[e][P]),A!=-1)for(r=0;r<t.j[A];r++)n=t.k[A][r],(t.H[n]==257||t.H[n]==129)&&t.D[0][n]==A&&(t.H[t.k[A][r]]=1);return}if(t.o[e]==0||t.C[e]>=15)for(P=0;P<t.e[e];P++)n=t.k[e][P],(t.H[n]==257||t.H[n]==129)&&t.D[0][n]==e&&t.D[0][n]==e&&(t.H[n]=1)}function gR(t,e,A){var n,P,r,i,f;if(t.b){for(t.C=c(Pt,ft,6,e.length,16,1),P=new Zt(t.b);P.a<P.c.a.length;)if(n=$t(P),t.f==null||A==-1&&t.f[n.a]==-1&&t.f[n.b]==-1||A!=-1&&(t.f[n.a]==A||t.f[n.b]==A)){if(f=c(F,k,6,n.c+2,15,1),r=L2(t.H,f,t.G[n.a],t.G[n.b],n.c+1,e,null)-1,r<n.d||r>n.c)return!1;for(i=1;i<=r;i++)t.C[f[i]]=!0}}return!0}function WZ(t){var e,A,n,P,r,i;if(t.L.K){for(i=t.W,Z1(t,-7),e=0;e<t.L.f;e++)Qe(t.L,e)&&t.ub(X1(t.R,kt(t.L,e))-i,K1(t.R,pt(t.L,e))-i,2*i);for(t.Ab(2*t.W),r=new s1,P=0;P<t.L.r;P++)A=z(t.L,0,P),n=z(t.L,1,P),gt(V(V(y0(t.L,A),y0(t.L,n)),a0),0)&&(r.a=X1(t.R,kt(t.L,A)),r.c=K1(t.R,pt(t.L,A)),r.b=X1(t.R,kt(t.L,n)),r.d=K1(t.R,pt(t.L,n)),t.qb(r))}}function _Z(t,e){var A,n,P,r,i,f,D,Q,o;for(o=new f1,A=0;A<e.q;A++)for(i=0;i<e.e[A];i++)for(n=e.i[A][i],f=0;f<e.e[n];f++)if(P=e.i[n][f],A!=P)for(D=0;D<e.e[P];D++)r=e.i[P][D],!(n==r||A==r)&&r>A&&(Q=new ym(t,e,A,n,P,r),(w.Math.abs(Q.e)>.001||w.Math.abs(Q.f)>.001||w.Math.abs(Q.g)>.001)&&o.a.push(Q));return o}function dR(t){var e,A,n,P,r,i,f,D,Q;for(Q=0,ut(t,7),n=0;n<t.g;n++)if(dt(t,n)==1&&(t.F[n]&64)==0){for(f=!0,i=0;i<2;i++){if(e=t.D[i][n],t.j[e]==1){f=!1;break}if(t.C[e]==7&&!(e<t.f&&r0(t.p,e))){for(A=t.D[1-i][n],D=0;D<t.j[A];D++)if(P=t.i[A][D],r=t.k[A][D],r!=n&&dt(t,r)>1&&!(P<t.f&&r0(t.p,P))&&tA(t,P)){f=!1;break}}}f&&!AR(t,n)&&++Q}return Q}function TA(t,e,A,n,P,r){var i,f,D,Q;if(A=w.Math.max(0,A),n=w.Math.min(r.lc(),n),i=(n-A)/2|0,D=A,f=n,r.kc(D,t)>e||r.kc(f-1,t)<e)return-1;for(;n>=A;){if(i=A+((n-A)/2|0),Q=r.kc(i,t),Q==e)if(P&&i>D&&r.kc(i-1,t)==e)n=i;else if(!P&&i<f-1&&r.kc(i+1,t)==e)A=i;else return i;else Q>e?n=i:Q<e&&(A=i);if(n-A==1&&r.kc(A,t)<e&&r.kc(n,t)>e)break}return-1}function BR(t,e,A){var n,P,r,i;if(O(t.c,e)==2)return 1;if(n=ez(t,e,A),O(t.c,e)==3)return R0(t.c,n[0])==R0(t.c,n[1])?$1(t.c,e)==1&&X(t.c,e)<10||vn(t.c,e)||SP(t.c,e,!0)?2:1:$1(t.c,e)==1&&X(t.c,e)<10||vn(t.c,e)||SP(t.c,e,!0)?1:0;if(O(t.c,e)==4){for(P=0;P<n.length;P++)for(i=R0(t.c,n[P]),r=P+1;r<n.length;r++)if(i==R0(t.c,n[r]))return 1}return 0}function m5(t,e,A,n){var P,r,i,f,D;for(r=new HP(t.f,e.e.length+A.e.length-n,e.i|A.i),P=0,f=0;f<e.e.length;f++)r.e[P]=e.e[f],r.k[P]=e.k[f],r.a[P]=e.a[f],r.b[P++]=e.b[f];for(i=0;i<A.e.length;i++)D=f8(e,A.e[i]),D==-1?(r.e[P]=A.e[i],r.k[P]=A.k[i],r.a[P]=A.a[i],r.b[P++]=A.b[i]):r.k[D]<A.k[i]&&(r.k[D]=A.k[i],r.a[D]=A.a[i],r.b[D]=A.b[i]);return r}function k5(t,e,A,n){var P,r,i,f;if(f=new s1,!(e.a==e.b&&e.c==e.d)){for(f.a=e.a,f.c=e.c,f.b=e.b,f.d=e.d,i=lk(f),P=0;P<t.$.a.length;P++)if(r=N(t.$,P),!(r.c>i.c+i.b||r.d>i.d+i.a||i.c>r.c+r.b||i.d>r.d+r.a)){if(zD(t,f.a,f.c,P)){if(zD(t,f.b,f.d,P))return;qs(t,f,0,P),k5(t,f,A,n);return}if(zD(t,f.b,f.d,P)){qs(t,f,1,P),k5(t,f,A,n);return}}HW(t,f,A,n)}}function $Z(t){var e,A,n,P,r,i,f,D,Q;for(D=c(F,k,6,t.j.q,15,1),n=0;n<t.j.r;n++)if(l1(t.j,n)==8)for(i=0;i<2;i++)D[z(t.j,i,n)]=1;for(P=0;P<t.j.r;P++)for(Q=dt(t.j,P),r=0;r<2;r++)D[z(t.j,r,P)]+=Q;for(A=0;A<t.j.r;A++)if(dt(t.j,A)==1){for(r=0;r<2;r++)if(f=z(t.j,1-r,A),_0(t.j,f)&&(e=z(t.j,r,A),tA(t.j,e)&&D[e]>Lh(t.j,e))){w0(t.j,A,16);continue}}}function ut(t,e){var A,n,P,r;if(Gj(t,e),(e&~t.T)!=0){for((t.T&15)!=0&&t.q>1&&Ds(t.J[0],t.J[1])&&A9(new z8(0),t),t.c&&(e|=128),A=0;A<t.q;A++)t.u[A]&=-67223560;for(n=0;n<t.g;n++)t.F[n]&=-64;P=0,r=0,(e&32)!=0?(P=32,r=1):(e&64)!=0&&(P=64,r=3),(e&128)!=0&&(P|=128,r|=32),t.d=new SA(t,r),X5(t.d),PN(t.d),SJ(t.d),R_(t)&&(t.d=new SA(t,r)),t.T|=24|P}}function aZ(t,e,A){var n,P,r,i,f,D,Q;for(u3(t.p),t.o[0]=e,t.p[e]=!0,r=0,i=0;r<=i;){for(f=0;f<t.j[t.o[r]].length;f++){if(P=t.j[t.o[r]][f],P==A){for(n=1,D=r;D!=0;)++n,D=t.q[D];for(Q=c(F,k,6,n,15,1),Q[0]=t.k[t.o[r]][f],n=1;r!=0;)Q[n++]=t.n[r],r=t.q[r];return Q}t.p[P]||(t.p[P]=!0,++i,t.o[i]=P,t.n[i]=t.k[t.o[r]][f],t.q[i]=r)}++r}return null}function tW(t,e,A,n){var P,r,i,f,D,Q,o,L,s,y,l,h;for(L=e.b-e.a,l=e.d-e.c,D=w.Math.sqrt(L*L+l*l),Q=2*Jt(M1(w.Math.round(D/(4*t.Y)))),s=L/(Q-1),h=l/(Q-1),F9(t.L,u1(t.L,A,n))?(P=-3,r=-3):(P=t.p[A],r=t.p[n]),o=e.a-t.Y/2,y=e.c-t.Y/2,Z1(t,P),f=0;f<(Q/2|0);f++)t.ub(o,y,t.Y),o+=s,y+=h;for(Z1(t,r),i=0;i<(Q/2|0);i++)t.ub(o,y,t.Y),o+=s,y+=h;Z1(t,t.Q)}function eW(t){for((t.Q&1)!=0&&(t.Q&2)==0&&(t.g=bn(t.f,t.R.f)),(t.Q&N1)==0&&(t.W=c(Pt,ft,6,t.R.f,16,1),t.V=c(Pt,ft,6,t.R.g,16,1),t.U<t.R.f&&(MX(t),(t.Q&N1)==0&&(o2(t),t.P&&f2(t.P,t.f)))),t.g==null&&(t.Q&1)!=0&&(t.Q&2)!=0&&(t.g=bn(t.f,t.R.f));t.U<t.R.f;)iX(t),(t.Q&N1)==0&&(o2(t),t.P&&f2(t.P,t.f));(t.Q&N1)==0&&(o2(t),Wa(t),c$(t))}function AW(t,e,A,n,P){var r,i,f,D,Q,o,L,s;if(u1(t,e,A)==-1||u1(t,A,n)==-1||u1(t,n,P)==-1)return 0;if(u1(t,P,e)>=0)return 4;for(L=(ut(t,7),t.p),s=new DD,A8(s,m1(e)),A8(s,m1(A)),A8(s,m1(n)),A8(s,m1(P)),Q=0;Q<L.j.a.length;Q++)if(N(L.k,Q).length==5){for(o=new DD,i=N(L.j,Q),f=0,D=i.length;f<D;++f)r=i[f],A8(o,m1(r));if(AQ(o,s))return 5}return 0}function nW(t,e,A){var n,P,r,i,f,D,Q,o,L;for(o=c(Pt,ft,6,A.q,16,1),o[t[0]]=!0,i=0,f=0;i<=f&&A.o[t[i]]<2;){for(Q=0;Q<A.j[t[i]];Q++)n=A.i[t[i]][Q],P=A.k[t[i]][Q],e[P]&&(o[n]||(t[++f]=n,o[n]=!0),e[P]=!1);++i}for(D=f;D>=0;D--)if(A.C[t[D]]<=8)for(L=0;L<A.e[t[D]];L++)r=A.i[t[D]][L],!o[r]&&A.n[t[D]][L]!=0&&(t[++f]=r,o[r]=!0);return f+1}function PW(t,e){var A,n,P,r,i,f,D,Q;for(r=t,n=e.i[r][0];e.e[r]!=1&&e.o[r]==2&&(Q=n,n=r,r=e.i[r][0]==Q?e.i[r][1]:e.i[r][0],r!=t););for(D=r,i=n,P=2;e.e[i]!=1&&e.o[i]==2&&(Q=D,D=i,i=e.i[i][0]==Q?e.i[i][1]:e.i[i][0],++P,i!=r););for(A=c(F,k,6,P,15,1),A[0]=r,A[1]=n,f=2;f<P;f++)A[f]=e.i[A[f-1]][0]==A[f-2]?e.i[A[f-1]][1]:e.i[A[f-1]][0];return A}function rW(t){var e,A;if(t.indexOf(\"[\")>=0){if(e=t.indexOf(\" NOT[\"),A=t.indexOf(\"]\",e),e>=0&&A>0)return-(A+1);if(e=t.indexOf(\" [\"),A=t.indexOf(\"]\",e),e>=0&&A>0)return A+1;if(e=t.indexOf(\" 'NOT[\"),A=t.indexOf(\"]'\",e),e>=0&&A>0)return-(A+2);if(e=t.indexOf(\" '[\"),A=t.indexOf(\"]'\",e),e>=0&&A>0)return A+2;z1()}return 0}function iW(t,e){var A,n,P,r,i,f,D,Q;if(i=NA[0]*t[0]+NA[1]*t[1]+NA[2]*t[2],i==0){t[0]=0,t[1]=0,t[2]=0;return}for(A=e/i,Q=0,D=0,P=0;P<3;P++)t[P]*=A,t[P]<1?D+=NA[P]:(Q+=(t[P]-1)*NA[P],t[P]=1);if(Q!=0){for(f=0,r=0;r<3;r++)t[r]<1&&(t[r]+=Q/D,t[r]>1&&(f+=(t[r]-1)*NA[r],t[r]=1));if(f!=0)for(n=0;n<3;n++)t[n]<1&&(t[n]+=f/NA[n],t[n]>1&&(t[n]=1))}}function Es(t,e,A,n){var P,r,i,f,D,Q,o,L;for(P=0;P<t.f;P++)if(t.C[P]==A&&t.s[P]==0&&It(t,P)>0)for(f=!1,Q=0;Q<t.j[P];Q++){if(t.n[P][Q]==1&&(r=t.i[P][Q],t.C[r]==n)){for(L=!1,D=!1,o=0;o<t.j[r];o++){if(i=t.i[r][o],t.s[i]<0){D=!0;break}i!=P&&t.C[i]==8&&t.n[r][o]==2&&(L=!0)}if(!D&&L){if(t.s[P]=-1,t.T=0,--e,e==0)return 0;f=!0}}if(f)break}return e}function fW(t,e,A,n,P){var r,i,f,D;if((e.u[A]&3)!=0&&(e.u[A]&4)==0&&t0(V(e.B[A],w8),0)&&(f=w.Math.abs(e.w[A]),f!=0)){for(i=0;i<t.c.g.a.length;i++)for(r=d9(t.c,i),D=0;D<r.f;D++)if(w.Math.abs(r.w[D])==f)return!!(e.j[A]==n.j[P]||gt(V(r.B[D],ge),0)||(r.u[D]&F1)>>18!=(e.u[A]&F1)>>18)}return!1}function DW(t,e){var A,n,P,r,i,f,D;if(e.startsWith(\"M  ALS\")&&(n=Q1(B1((Ct(7,10,e.length),e.substr(7,3))),P1,Et)-1,n>=0)){for(i=Q1(B1((Ct(10,13,e.length),e.substr(10,3))),P1,Et),P=(Gt(14,e.length),e.charCodeAt(14)==84),D=c(F,k,6,i,15,1),A=16,r=0;r<i;++r,A+=4)f=B1((Ct(A,A+4,e.length),e.substr(A,A+4-A))),D[r]=qA(f,1);K0(t.j,n,6),yf(t.j,n,D,P)}}function VQ(t,e,A,n){var P,r,i,f,D;f=(e.b-e.a)/10,D=(e.d-e.c)/10,P=new s1,F9(t.L,u1(t.L,A,n))?(r=-3,i=-3):(r=t.p[A],i=t.p[n]),Z1(t,r),P.a=e.a,P.c=e.c,P.b=e.a+f*2,P.d=e.c+D*2,t.qb(P),P.a=e.a+f*4,P.c=e.c+D*4,P.b=e.a+f*5,P.d=e.c+D*5,t.qb(P),Z1(t,i),P.a=e.a+f*5,P.c=e.c+D*5,P.b=e.a+f*6,P.d=e.c+D*6,t.qb(P),P.a=e.a+f*8,P.c=e.c+D*8,P.b=e.b,P.d=e.d,t.qb(P),Z1(t,t.Q)}function b5(t,e,A,n,P){var r,i,f,D,Q,o,L,s;if((t.p&&e<t.f?iA(t.p,e):0)>24||(r=t.e[e],P==null&&(P=c(F,k,6,r,15,1)),!jW(t,e,A,n,P)))return 3;for(D=-1,Q=0;Q<r;Q++)if((P[Q]&1)==1){if(i=t.H[t.k[e][A[Q]]],D!=-1&&D!=i)return 3;D=i}return o=w.Math.abs(P[0]-P[1])==2?1:0,f=P[o]-P[o+1],s=w.Math.abs(f)==3^P[o]<P[o+1],L=r==3||(P[3]&1)==1,s^L^D==129?1:2}function Q2(t,e,A,n){var P,r,i,f;if(t.L.q==0)return null;for(i=t.Db(A,n),ut(t.L,(t.G&256)!=0?63:(t.G&512)!=0?95:31),om(t),t.U.a.length=0,t.$.a.length=0,t.B=e,Dk(t),t.Cb(t.X),t.K=!0,r=0;r<t.L.q;r++)zQ(t,r,null);return t.K=!1,P=t.R.c*M8(t.L),Vm(t,P),T5(t,A,P,n),!A||oN(A,t.v)?i:(f=new Zs(t.v,A,P,n),Hu(f,t.R),Iu(f,t.v),Hd(f,t.w),i?(Hu(f,i),i):f)}function uW(t,e,A,n){var P,r,i,f,D,Q,o,L,s,y;for(P=c(F,k,6,n,15,1),r=0,i=0;i<e.e.length;i++)for(f=0;f<A.e.length;f++)e.e[i]==A.e[f]&&(P[r++]=e.e[i]);D=n==1?(Q=f8(e,P[0]),o=f8(A,P[0]),rv(A,e.a[Q]-A.a[o],e.b[Q]-A.b[o]),L=kj(t,e,P[0]),s=kj(t,A,P[0]),y=0,qL(t,e,P[0])==1&&qL(t,A,P[0])==1&&(y=AA),Uf(A,A.a[o],A.b[o],L-s+y+U1),m5(t,e,A,1)):xa(t,e,A,P,n),mF(t,e,A,D)}function QW(t,e){var A,n,P,r,i,f;if((t.o[e]==1||t.o[e]==2)&&!$P(t.R,e)){i=!1;try{for(r=0;r<2;r++)if(A=z(t.R,r,e),O(t.R,A)==3){for(n=c(F,k,6,2,15,1),P=0,f=0;f<O(t.R,A);f++)xt(t.R,A,f)!=e&&(n[P++]=_(t.R,A,f));t.f[n[0]]>t.f[n[1]]^e6(t,A,n[0],n[1])&&(i=!i)}}catch(D){if(D=a1(D),Xt(D,19)){t.i[e]=3;return}else throw At(D)}t.o[e]==1^i?t.i[e]=1:t.i[e]=2}}function oW(t){var e,A,n;for(this.c=new f1,n=0,e=0;e<t.f;e++)n+=It(t,e);if(n>0)throw At(new YP(\"molecule needs explicit hydrogen atoms for force field calculations\"));for(this.g=t,this.d=3*t.q,this.e=c(Ut,Tt,6,this.d,15,1),this.i=c(Ut,Tt,6,this.d,15,1),this.f=!1,this.j=20,A=0;A<t.q;A++)this.i[3*A]=t.J[A].a,this.i[3*A+1]=t.J[A].b,this.i[3*A+2]=t.J[A].c}function vR(t){var e,A,n,P,r,i,f,D,Q,o;for(this.a=new LP,e=0;e<t.q;e++)for(q9(this.a,new Ii(e,e),(Xr(),G4)),A=0;A<t.e[e];A++)for(D=t.i[e][A],f=new Ii(e,D),q9(this.a,f,z4),n=0;n<t.e[D];n++)for(Q=t.i[D][n],i=new Ii(e,Q),(!pu(this.a,i)||O1(S9(this.a,i))===O1(si))&&q9(this.a,i,J4),P=0;P<t.e[Q];P++)o=t.i[Q][P],r=new Ii(e,o),pu(this.a,r)||q9(this.a,r,si)}function UW(t){at(t,Q4)&&!DE?(ki(),z3(Q4,new ks(\"/resources/forcefield/mmff94/outofplane.csv\",\"/resources/forcefield/mmff94/torsion.csv\")),DE=!0):at(t,o4)&&!uE?(ki(),z3(o4,new ks(BV,\"/resources/forcefield/mmff94/94s/torsion.csv\")),uE=!0):at(t,Ey)&&!QE&&(ki(),z3(Ey,new ks(BV,\"/resources/forcefield/mmff94/94s/torsionPlus.csv\")),QE=!0)}function LW(t,e){return!e&&(e={keepAbsoluteCoordinates:!1,mode:3}),e=Object.assign({},e),e.keepAbsoluteCoordinates=!!e.keepAbsoluteCoordinates,\"sortByIDCode\"in e?(e.sortByIDCode=!!e.sortByIDCode,II(t,e.keepAbsoluteCoordinates,e.sortByIDCode)):(typeof e.mode!==n9&&(e.mode=3),e.mode=Math.trunc(e.mode),oI(t,e.keepAbsoluteCoordinates,e.mode))}function cf(t,e,A,n){var P,r,i,f;for(this.e=t,this.g=A,this.a=n,i=-1,f=0;f<Ht(this.e,this.a);f++){if(P=_(this.e,this.a,f),r=xt(this.e,this.a,f),P==this.g){l1(this.e,r)==386&&(this.j=-1);continue}G9(this.e,r,this.a)&&(this.i&&(t.u[n]|=u0),this.i=!0),i==e[P]?(this.d=P,this.f=!0,this.c=fA(this.e,r)):i<e[P]?(i=e[P],this.d=this.b,this.b=P):this.d=P}}function sW(t,e){var A,n,P,r,i,f;if(e.startsWith(\"M  RAD\")&&(P=Q1(B1((Ct(6,9,e.length),e.substr(6,3))),P1,Et),P>0))for(A=10,f=14,r=1;r<=P;++r,A+=8,f+=8)switch(n=Q1(B1((Ct(A,A+3,e.length),e.substr(A,A+3-A))),P1,Et)-1,i=Q1(B1((Ct(f,f+3,e.length),e.substr(f,f+3-f))),P1,Et),i){case 1:Ne(t.j,n,16);break;case 2:Ne(t.j,n,32);break;case 3:Ne(t.j,n,48)}}function FR(t){var e,A,n,P,r,i,f,D;for(t.t=new f1,n=1,r=0,A=0;A<t.u.f;A++)R1(t.u,A)!=0&&!Bn(t.u,A)&&(r=w.Math.max(r,R1(t.u,A)));if(r!=0){for(P=c(F,k,6,r+1,15,1),e=0;e<t.u.f;e++)R1(t.u,e)!=0&&!Bn(t.u,e)&&(P[R1(t.u,e)]=e+1);for(f=0;f<t.D.f;f++)D=R1(t.D,f),D!=0&&D<=r&&!Bn(t.D,f)&&P[D]!=0&&(i=P[D]-1,t.I[f]=n,t.B[i]=n++,mt(t.t,new cD(f,i)))}return t.t.a.length}function ke(){ke=d1;var t;for(q2=new kA(1,1),So=new kA(1,10),new kA(1,2),yr=new kA(0,0),Dc=new kA(-1,1),RE=B(d(wi,1),Ye,23,0,[yr,q2,new kA(1,2),new kA(1,3),new kA(1,4),new kA(1,5),new kA(1,6),new kA(1,7),new kA(1,8),new kA(1,9),So]),qo=c(wi,Ye,23,32,0,1),t=0;t<qo.length;t++)qo[t]=lu(j1(1,t),0)?we(j1(1,t)):FP(we(p0(j1(1,t))))}function mR(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h;if(r=e.e,r==0)throw At(new p8(mV));return P=e.d,n=e.a,P==1?_W(t,n[0],r):(y=t.a,l=t.d,A=l!=P?l>P?1:-1:rQ(y,n,l),A<0?B(d(wi,1),Ye,23,0,[yr,t]):(h=t.e,f=l-P+1,o=P,D=h==r?1:-1,i=c(F,k,6,f,15,1),Q=Oj(i,f,y,l,n,P),L=new oe(D,f,i),s=new oe(h,o,Q),Rn(L),Rn(s),B(d(wi,1),Ye,23,0,[L,s])))}function R5(t,e,A,n){var P,r,i,f,D,Q,o,L,s,y,l,h,T,g;if(hj(t,e,A,n),yd(t.p))return null;if(t.k!=null)for(s=t.k,y=0,l=s.length;y<l;++y)L=s[y],N3(t.p,L);if(t.g)for(T=new Zt(t.g);T.a<T.c.a.length;)h=$t(T),CI(t.p,h);if(t.e!=null)for(i=t.e,D=0,o=i.length;D<o;++D)P=i[D],fU(P.R);if(t.b!=null)for(r=t.b,f=0,Q=r.length;f<Q;++f)P=r[f],fU(P.R);return g=t.p,t.p=new tu,g}function o8(t,e,A){var n,P,r,i,f;return r=!1,i=t.H[e],A==511?r=Y_(t,e):KO(t,e,A)&&(A==257||A==129?(n=DR(t,e,t.D[0][e]),P=DR(t,e,t.D[1][e]),A==i?(n==P||P)&&(f=t.D[0][e],t.D[0][e]=t.D[1][e],t.D[1][e]=f,r=!0):(!n&&P&&(f=t.D[0][e],t.D[0][e]=t.D[1][e],t.D[1][e]=f),t.H[e]=A,r=!0)):(t.H[e]=A,r=!0)),r&&(t.T=(i&127)==(A&127)?t.T&7:0,t.G[e]=0),r}function yW(t){var e,A,n,P,r,i,f,D;if(f=null,A=t.indexOf(\"[\"),n=t.indexOf(\"]\",A),A>=0&&n>0){for(e=c(F,k,6,16,15,1),D=(Ct(A+1,n,t.length),t.substr(A+1,n-(A+1))),P=0,i=!0;i&&P<16;)A=D.indexOf(\",\"),r=null,A==-1?(r=D,i=!1):(r=(Ct(0,A,D.length),D.substr(0,A)),D=(Gt(A+1,D.length+1),D.substr(A+1))),e[P++]=qA(r,1);f=c(F,k,6,P,15,1),sA(e,0,f,0,P)}return f}function kR(t){var e,A,n,P;for(UU.call(this),e=0;e!=-1&&(A=t.indexOf('=\"',e),A!=-1);)n=(Ct(e+1,A,t.length),t.substr(e+1,A-(e+1))),e=t.indexOf('\"',A+2),P=e==-1?(Gt(A+1,t.length+1),t.substr(A+1)):(Ct(A+1,e,t.length),t.substr(A+1,e-(A+1))),at(n,\"text\")?this.e=ZW(P):at(n,\"x\")?kO(this,P):at(n,\"y\")?mO(this,P):at(n,\"size\")?uO(this,P):at(n,\"style\")&&NO(this,P)}function lW(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T;for(y=e.length,D=y,Gt(0,e.length),e.charCodeAt(0)==45?(L=-1,s=1,--y):(L=1,s=0),r=(Is(),pE)[10],P=y/r|0,T=y%r,T!=0&&++P,f=c(F,k,6,P,15,1),A=jE[8],i=0,l=s+(T==0?r:T),h=s;h<D;h=l,l=h+r)n=Q1((Ct(h,l,e.length),e.substr(h,l-h)),P1,Et),Q=(Pr(),Qs(f,f,i,A)),Q+=$J(f,i,n),f[i++]=Q;o=i,t.e=L,t.d=o,t.a=f,Rn(t)}function bR(t){var e;switch(ut(t,31),e=t.I&c1,t.I&IP){case u0:return null;case I0:return e==1?\"meso\":\"\"+e+\" meso diastereomers\";case 0:return\"unknown chirality\";case yy:return\"both enantiomers\";case T8:return\"this enantiomer\";case 327680:return\"this or other enantiomer\";case Ui:return\"two epimers\";default:return e==1?\"one stereo isomer\":\"\"+e+\" stereo isomers\"}}function RR(t){var e;for(t.T=0,t.C=c(F,k,6,t.M,15,1),t.s=c(F,k,6,t.M,15,1),t.w=c(F,k,6,t.M,15,1),t.J=c(H2,F2,29,t.M,0,1),e=0;e<t.M;e++)t.J[e]=new dA;t.A=c(F,k,6,t.M,15,1),t.u=c(F,k,6,t.M,15,1),t.B=c(OA,te,6,t.M,14,1),t.v=null,t.t=null,t.D=k1(F,[f0,k],[7,6],15,[2,t.N],2),t.H=c(F,k,6,t.N,15,1),t.F=c(F,k,6,t.N,15,1),t.G=c(F,k,6,t.N,15,1)}function hW(t,e,A,n,P,r,i){var f,D,Q,o,L;if(O(t.j,A)==3&&(d0(t.j,A)==1||d0(t.j,A)==2)&&O(t.d,r)==3&&(d0(t.d,r)==1||d0(t.d,r)==2)){for(L=e>n,Q=-1,D=0;D<O(t.j,A);D++)if(Q=_(t.j,A,D),Q!=e&&Q!=n){(Q>n&&Q<e||Q<n&&Q>e)&&(L=!L);break}for(o=P>i,f=0;f<O(t.d,r);f++)if(Q=_(t.d,r,f),Q!=P&&Q!=i){(Q>i&&Q<P||Q<i&&Q>P)&&(o=!o);break}return L==o==(d0(t.j,A)==d0(t.d,r))}return!0}function j5(t,e){var A,n,P,r,i,f;for(i=(t.U&4)!=0,f=!1,P=!1,r=!1,A=null,n=0;n<t.V.q;n++)if(P0(t.V,n))if(f){if(r!=bQ(A,kt(t.V,n),pt(t.V,n))){P=!0;break}}else{if(f=!0,!i)break;A=N(t.I,0),r=bQ(A,kt(t.V,n),pt(t.V,n))}return e?i?P?(Hm(t,!0),!0):f?(zv(t,!0),!1):(Hm(t,!1),!0):(zv(t,f),!1):i&&(P||!f)}function TW(t,e,A,n){var P,r,i,f,D,Q,o,L,s,y,l,h,T;for(f=0,s=0;s<A.c.length;s++)for(P=A.e[A.c[s]],T=xD(X(t.k,P)),y=0;y<n.c.length;y++)r=n.e[n.c[y]],l=T+xD(X(t.k,r)),Q=w.Math.abs(e.k[P].a-e.k[r].a),Q<l&&(o=w.Math.abs(e.k[P].b-e.k[r].b),o<l&&(L=w.Math.abs(e.k[P].c-e.k[r].c),L<l&&(D=w.Math.sqrt(Q*Q+o*o+L*L),D<l&&(h=(l-D)/l,i=h*h,f+=i))));return 20*f}function cW(t){var e,A,n,P,r;for(t.a=t.d.f,t.b=c(Pt,ft,6,t.k.f,16,1),t.c=c(Pt,ft,6,t.k.g,16,1),t.g=new f1,e=Vk(t);e!=-1;){if(A=t.g.a.length,Nv(t,new kh(e,-1,-1,!1,!1),A),O(t.k,e)!=0)for(mk(t,A,!1);A<t.g.a.length-1;){for(;UG(t,N(t.g,A).a);)mk(t,A,!0);++A}e=Vk(t)}for(t.q=c(F,k,6,t.k.f,15,1),n=0,r=new Zt(t.g);r.a<r.c.a.length;)P=$t(r),t.q[P.a]=n++}function jR(t,e,A,n,P){var r,i,f,D,Q,o;if(n&&x1(t,e)>1||!n&&x1(t,e)>2)return!1;for(i=0,r=c(Ut,Tt,6,4,15,1),D=0;D<t.r;D++){for(Q=0;Q<2;Q++)if(t.D[Q][D]==e){if(i==2){i=3;break}r[i++]=Y0(t,e,t.D[1-Q][D])}if(i==3)break}return i==3?!1:(o=i==1?r[0]+U1:w.Math.abs(r[0]-r[1])>U1?(r[0]+r[1])/2:(r[0]+r[1])/2+U1,f=U1*(A-2)/A,G5(t,e,A,e,n,o-f/2,U1-f,P),t.T=0,!0)}function p5(t){var e,A,n,P,r;if(P=new M7(new z2),r=new $7,t.k!=null)for(n=0;n<t.k.length;n++)for(e=0;e<t.k[n].r;e++)ls(P,t.e[n].R.c*lT(t.k[n],e)),ls(r,Jh(P)),P.b.a.length<r.b.a.length&&ls(P,Jh(r));return A=P.b.a.length+r.b.a.length,A==0?vW(t):t.p.c*(A%2==0?(oD(P.b.a.length==0?null:N(P.b,0))+oD(r.b.a.length==0?null:N(r.b,0)))/2:oD(P.b.a.length==0?null:N(P.b,0)))}function pR(t,e,A,n,P){var r,i,f,D,Q,o,L,s,y,l;for(L=!1,s=0,Q=0;Q<A;Q++)t.H[Q]!=16&&(t.G[Q]&l8)==0&&++s;if(s==0){for(o=0;o<A;o++)(t.G[o]&l8)==0&&++s;L=!0}if(s==0){if(e<2)return n;for(l=Ve,r=1;r<e;r++)for(i=0;i<r;i++)y=eT(P[r],P[i]),y>0&&y<l&&(l=y);return l!=Ve?.6*l:n}for(f=0,D=0;D<A;D++)(L||t.H[D]!=16)&&(t.G[D]&l8)==0&&(f+=eT(P[t.D[1][D]],P[t.D[0][D]]));return f/s}function CR(t,e){var A,n,P,r,i,f,D,Q;for(t.p=new oU(t,e),n=c(F,k,6,t.f,15,1),P=0;P<t.g;P++)yP(t.p,P)!=0&&(t.F[P]|=64,++n[t.D[0][P]],++n[t.D[1][P]]);for(A=0;A<t.f;A++)n[A]==2?t.u[A]|=re:n[A]==3?t.u[A]|=N1:n[A]>3&&(t.u[A]|=cn);for(Q=0;Q<t.p.j.a.length;Q++)for(i=h3(t.p,Q),D=q7(t.p,Q),f=i.length,r=0;r<f;r++)t.u[i[r]]|=8,t.F[D[r]]|=128,t.H[D[r]]==386&&(t.H[D[r]]=2)}function HR(t,e,A){var n,P,r,i,f,D,Q,o,L,s;for(o=-1,L=-1,s=-1,r=c(Pt,ft,6,O(t.c,e),16,1),D=0;D<O(t.c,e);D++)if(!r[D]&&(P=_(t.c,e,D),P!=A&&(i=R0(t.c,P),L<i))){for(f=!1,Q=D+1;Q<O(t.c,e);Q++)if(n=_(t.c,e,Q),n!=A&&R0(t.c,n)==i){if(r[Q]=!0,f)return P;f=!0}f?s=P:(L=i,o=P)}return o==-1&&($1(t.c,e)==1&&X(t.c,e)<10||vn(t.c,e)||SP(t.c,e,!0))?s:o}function wW(t){var e,A,n,P,r,i,f,D,Q,o,L;for(n=G8(t.f.f),D=2,A=0;A<t.f.f;A++)D=w.Math.max(D,Ht(t.f,A));for(r=(62+2*n+D*(n+1))/63|0,P=c(d4,v2,100,t.f.q,0,1),e=0;e<t.f.q;e++)P[e]=new bU(r),$e(P[e],e);for(L=c(F,k,6,t.f.q,15,1),i=0;i<t.f.g;i++)f=qe(t.f,i),(f==1||f==2)&&(ue(P[z(t.f,0,i)],f),ue(P[z(t.f,1,i)],f));Q=pm(P,L);do o=Q,DZ(t,P,L,n,D),Q=pm(P,L);while(o!=Q);return L}function MR(t,e,A,n){mQ();var P,r,i,f,D,Q;if(i=0,Q=0,P=0,n==null&&(n=c(Ee,PA,6,3,15,1)),D=w.Math.min(t,w.Math.min(e,A)),f=w.Math.max(t,w.Math.max(e,A)),P=f,r=f-D,r==0)return P=D,i=0,n[0]=i,n[1]=Q,n[2]=P,n;if(f!=0)Q=r/f;else return Q=0,i=0,n[0]=i,n[1]=Q,n[2]=P,n;return t==f?i=(e-A)/r:e==f?i=2+(A-t)/r:i=4+(t-e)/r,i*=60,i<0&&(i+=360),n[0]=i/360,n[1]=Q,n[2]=P,n}function gW(t,e,A,n,P,r){var i,f,D,Q,o,L,s;for(Q=OF(e)-OF(t),i=$k(e,Q),D=S0(0,0,0);Q>=0&&(f=$z(t,i),!(f&&(Q<22?D.l|=1<<Q:Q<44?D.m|=1<<Q-22:D.h|=1<<Q-44,t.l==0&&t.m==0&&t.h==0)));)o=i.m,L=i.h,s=i.l,i.h=L>>>1,i.m=o>>>1|(L&1)<<21,i.l=s>>>1|(o&1)<<21,--Q;return A&&WL(D),r&&(n?(In=Z9(t),P&&(In=HF(In,(K9(),tc)))):In=S0(t.l,t.m,t.h)),D}function Q1(t,e,A){var n,P,r,i,f;if(t==null)throw At(new XP(P9));for(r=t.length,i=r>0&&(Gt(0,t.length),t.charCodeAt(0)==45||(Gt(0,t.length),t.charCodeAt(0)==43))?1:0,n=i;n<r;n++)if(fz((Gt(n,t.length),t.charCodeAt(n)))==-1)throw At(new XP(T2+t+'\"'));if(f=parseInt(t,10),P=f<e,isNaN(f))throw At(new XP(T2+t+'\"'));if(P||f>A)throw At(new XP(T2+t+'\"'));return f}function dW(t,e){var A,n,P,r;if(e>0&&(e=ns(t,e,9)),e>0&&(e=ns(t,e,17)),e>0&&(e=ns(t,e,35)),e>0&&(e=ns(t,e,53)),e>0){for(A=0;A<t.f;A++)if(t.s[A]>0){for(P=!1,r=0;r<t.j[A];r++)if(n=t.i[A][r],t.s[n]==0&&tA(t,n)&&It(t,n)>0){if(t.s[n]=-1,t.T=0,--e,e==0)return 0;P=!0;break}if(P)continue}}return e>0&&(e=Es(t,e,8,16)),e>0&&(e=Es(t,e,8,15)),e>0&&(e=Es(t,e,8,6)),e>0&&(e=Es(t,e,7,16)),e}function VR(t,e){var A,n,P,r,i,f,D,Q;for(P=0;P<t.g.g;P++)if((Ae(t.g,P)&c8)!=0){if(r=qe(t.g,P),r==0)continue;if(A=z(t.g,0,P),n=z(t.g,1,P),t.f==null||e==-1&&t.f[A]==-1&&t.f[n]==-1||e!=-1&&(t.f[A]==e||t.f[n]==e)){if(i=t.G[A],f=t.G[n],D=u1(t.H,i,f),Q=qe(t.H,D),Q==0&&($P(t.H,D)&&(Q=pZ(t,D)),Q==0)||r==3||Q==3)continue;if(tZ(t,P)==(r==Q))return!1}}return!0}function BW(t,e,A){var n,P,r,i,f,D;f=M1(ci[A]),i=l0(M1(t.e),A),D=M1(t.f),r=Hn(D,f),P=Yr(D,f),G(P,0)!=0&&(n=pi(j1(G(P,0)<0?p0(P):P,1),f)?-1:E1(j1(G(P,0)<0?p0(P):P,1),f)?1:0,r=I1(r,EQ(Jt(r)&1,(G(P,0)==0?0:G(P,0)<0?-1:1)*(5+n),e.b)),w.Math.log10(J9(G(r,0)<0?p0(r):r))>=e.a&&(r=Hn(r,10),i=l0(i,1))),t.e=gm(J9(i)),t.d=e.a,t.f=J9(r),t.a=nT(r),t.c=null}function ER(t,e,A,n){var P,r,i,f,D,Q,o;for(Q=0,r=V(n,T1),f=A-1;f>=0;f--)o=Y(j1(Q,32),V(e[f],T1)),G(o,0)>=0?(D=Hn(o,r),Q=Yr(o,r)):(P=DA(o,1),i=n>>>1,D=Hn(P,i),Q=Yr(P,i),Q=I1(j1(Q,1),V(o,1)),(n&1)!=0&&(G(D,Q)<=0?Q=l0(Q,D):hg(l0(D,Q),r)?(Q=I1(Q,l0(r,D)),D=l0(D,1)):(Q=I1(Q,l0(j1(r,1),D)),D=l0(D,2)))),t[f]=Jt(V(D,T1));return Jt(Q)}function vW(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l,h;if(L=Ve,s=m6,l=Ve,h=m6,P=0,t.k!=null)for(f=0;f<t.k.length;f++)for(A=0;A<t.k[f].q;A++)o=X1(t.e[f].R,U7(t.k[f],A).a),y=K1(t.e[f].R,U7(t.k[f],A).b),L=w.Math.min(L,o),s=w.Math.max(s,o),l=w.Math.min(l,y),h=w.Math.max(h,y),++P;return P<=1?t.d:(r=s-L,i=h-l,D=(r+i)/2,Q=3*P,e=r*i,n=D/(1-Q),w.Math.sqrt(n*n-e/(1-Q))-n)}function FW(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h;for(Q=t.i.M,o=0,r=0;r<A;r++)Q>e[r]&&(Q=e[r],o=r);for(h=c(F,k,6,A,15,1),D=o>0?o-1:A-1,L=o<A-1?o+1:0,i=e[D]<e[L],P=0;P<A;P++)h[P]=e[o],i?--o<0&&(o=A-1):++o==A&&(o=0);for(l=new Zt(t.j);l.a<l.c.a.length;)if(y=$t(l),y.length==A){for(n=!0,f=0;f<A;f++)if(y[f]!=h[f]){n=!1;break}if(n)return}mt(t.j,h),s=Kk(t,h),mt(t.k,s),Fb(t,h,s)}function mW(t,e,A,n,P,r,i){return!(X(t.j,A)==8&&$1(t.j,A)==0&&tQ(t.j,e)&&tQ(t.d,n)&&r!=N1||X(t.j,A)==8&&O(t.j,A)==2&&tQ(t.j,zO(t.j,e,A))&&r<768||X(t.j,e)==8&&(tQ(t.j,A)||tQ(t.d,P))&&r<512||!i&&(X(t.j,A)!=6||!DG(t.j,e))||X(t.j,A)==8&&X(t.j,e)!=6&&r!=N1||X(t.j,e)==5&&X(t.j,A)==6&&r<768)}function C5(t,e,A){var n,P;return P=Qp(t,e,(A&16)==0),P==null?null:(n=new Fn(P[0]),A!=0&&(n.a+=\"#\",(A&1)!=0&&P.length>1&&P[1]!=null&&(n.a+=\"\"+P[1])),A&=-2,A!=0&&(n.a+=\"#\",(A&2)!=0&&P.length>2&&P[2]!=null&&(n.a+=\"\"+P[2])),A&=-3,A!=0&&(n.a+=\"#\",(A&4)!=0&&P.length>3&&P[3]!=null&&(n.a+=\"\"+P[3])),A&=-5,A!=0&&(n.a+=\"#\",(A&8)!=0&&P.length>4&&P[4]!=null&&(n.a+=\"\"+P[4])),n.a)}function Pr(){Pr=d1;var t,e;for(y9=c(wi,Ye,23,32,0,1),Xf=c(wi,Ye,23,32,0,1),uc=B(d(F,1),k,6,15,[1,10,100,1e3,AP,Ry,1e6,1e7,1e8,xf]),t=1,e=0;e<=18;e++)y9[e]=(ke(),G(t,0)>=0?we(t):FP(we(p0(t)))),Xf[e]=lu(j1(t,e),0)?we(j1(t,e)):FP(we(p0(j1(t,e)))),t=Un(t,5);for(;e<Xf.length;e++)y9[e]=bP(y9[e-1],y9[1]),Xf[e]=bP(Xf[e-1],(ke(),So))}function SR(t,e,A){var n,P,r,i,f;for(r=0;r<e;r++){for(n=0,f=r+1;f<e;f++)n=I1(I1(Un(V(t[r],T1),V(t[f],T1)),V(A[r+f],T1)),V(Jt(n),T1)),A[r+f]=Jt(n),n=DA(n,32);A[r+e]=Jt(n)}for(lF(A,A,e<<1),n=0,P=0,i=0;P<e;++P,i++)n=I1(I1(Un(V(t[P],T1),V(t[P],T1)),V(A[i],T1)),V(Jt(n),T1)),A[i]=Jt(n),n=DA(n,32),++i,n=I1(n,V(A[i],T1)),A[i]=Jt(n),n=DA(n,32);return A}function qR(t){var e,A,n,P,r,i,f,D,Q,o;i=x5(t),D=t.q;do--D;while(D>=0&&i[D]);for(e=0;e<D;e++)if(i[e]){E5(t,e,D),o=i[e],i[e]=i[D],i[D]=o;do--D;while(i[D])}if(t.f=D+1,t.q==t.f){t.g=t.r;return}for(f=c(Pt,ft,6,t.r,16,1),r=0;r<t.r;r++)A=t.D[0][r],n=t.D[1][r],(i[A]||i[n])&&(f[r]=!0);Q=t.r;do--Q;while(Q>=0&&f[Q]);for(P=0;P<Q;P++)if(f[P]){aT(t,P,Q),f[P]=!1;do--Q;while(f[Q])}t.g=Q+1}function kW(t,e,A){var n,P,r,i,f,D,Q;for(D=c(F,k,6,t.g,15,1),i=c(F,k,6,t.g,15,1),Q=c(Pt,ft,6,t.i.f,16,1),n=z(t.i,0,e),P=z(t.i,1,e),D[0]=n,D[1]=P,i[1]=-1,Q[P]=!0,f=1;f>=1;){if(++i[f],i[f]==O(t.i,D[f])){Q[D[f]]=!1,--f;continue}if(r=_(t.i,D[f],i[f]),!(Q[r]||A[r])){if(r==n&&f>1){if(FW(t,D,f+1),t.j.a.length>=re)return;continue}f+1<t.g&&(++f,D[f]=r,Q[r]=!0,i[f]=-1)}}}function bW(t,e){var A,n,P,r,i,f,D,Q,o,L;if(o=ld(t.f)!=1?1:Eb(e,t.p[1],t.k[0]),L=ld(t.g)!=1?1:Eb(e,t.p[2],t.k[1]),!(o==1&&L==1)){for(i=360/w.Math.max(o,L)|0,A=0,n=0,r=0;r<t.d.length&&t.d[r]<i;r++)n+=t.c[r],++A;if(A!=0){for(Q=c(zt,_t,6,A,15,1),f=c(zt,_t,6,A,15,1),D=c(zt,ee,16,A,0,2),P=0;P<A;P++)Q[P]=t.d[P],f[P]=(t.c[P]*100/n|0)<<16>>16,D[P]=t.e[P];t.d=Q,t.c=f,t.e=D}}}function IR(t,e){var A,n,P,r,i,f,D,Q,o,L;if(f=c(F,k,6,t.q,15,1),i=nr(t,f,!1,e),i<=1)return null;for(D=c(F,k,6,i,15,1),n=0;n<t.f;n++)++D[f[n]];for(o=0,L=D[0],Q=1;Q<i;Q++)L<D[Q]&&(L=D[Q],o=Q);for(A=0;A<t.q;A++)f[A]!=o&&(t.C[A]=-1);for(r=0;r<t.r;r++)(!e&&t.H[r]==16||f[t.D[0][r]]!=o)&&(t.H[r]=512);P=vf(t),t.T=0;try{up(t,!0,!0)}catch(s){if(s=a1(s),!Xt(s,19))throw At(s)}return P}function RW(t){for(var e,A,n,P,r,i,f;;){for(r=null,e=0;e<t.f.q;e++){for(f=0,P=0;P<Ht(t.f,e);P++)t.c[xt(t.f,e,P)]||++f;f==1&&(i=P_(t,e),(!r||i.a.length>r.a.length)&&(r=i))}if(!r)break;for(A=new HP(t.f,r.a.length,!1),n=0;n<r.a.length;n++)t.b[r.a[n]]=!0,n<r.a.length-1&&(t.c[r.b[n]]=!0),A.e[n]=r.a[n],A.a[n]=w.Math.cos(B2)*n,A.b[n]=(n&1)==1?0:.5,A.k[n]=128+r.a.length;pP(t.d,A)}}function jW(t,e,A,n,P){var r,i,f,D;if(i=t.e[e],t.o[e]!=0||e<t.f&&r0(t.p,e)||t.j[e]<3||i>4)return!1;for(D=c(Pt,ft,6,4,16,1),f=0;f<i;f++){if(r=3.9269908169872414-n[f],w.Math.abs(b6-r%RA)>.0872664675116539||(P[f]=3&vt(r/RA),D[P[f]]))return!1;if(D[P[f]]=!0,(P[f]&1)==0){if(t.H[t.k[e][A[f]]]!=1)return!1}else if(!G9(t,t.k[e][A[f]],e))return!1}return D[0]&&D[2]}function pW(t,e,A,n){var P,r,i,f,D,Q,o,L,s,y;for(s=c(F,k,6,t.f,15,1),y=$K(t,e,s),i=!1,r=!1,L=new f1,P=0;P<y;P++)(t.u[s[P]]&4)!=0&&(Q=H5(t,s[P],n),(Q==1||Q==2)&&(f=A.u[n[s[P]]]&3,(f==1||f==2)&&(Q==f?i=!0:r=!0)),D=c(F,k,6,2,15,1),D[0]=s[P],D[1]=Q,L.a.push(D));if(!i||!r)for(o=new Zt(L);o.a<o.c.a.length;)Q=$t(o),D=Q[1],(D==1||D==2)&&r&&(D=D==1?2:1),ce(A,n[Q[0]],D,!0)}function EQ(t,e,A){var n;switch(n=0,A.b){case 7:if(e!=0)throw At(new p8(\"Rounding necessary\"));break;case 0:n=e==0?0:e<0?-1:1;break;case 2:n=w.Math.max(e==0?0:e<0?-1:1,0);break;case 3:n=w.Math.min(e==0?0:e<0?-1:1,0);break;case 4:w.Math.abs(e)>=5&&(n=e==0?0:e<0?-1:1);break;case 5:w.Math.abs(e)>5&&(n=e==0?0:e<0?-1:1);break;case 6:w.Math.abs(e)+t>5&&(n=e==0?0:e<0?-1:1)}return n}function CW(t,e){var A,n;if(A=eT(J0(e,t.f[1]),J0(e,t.f[0])),t.a.length==2){if(A<1.02*t.a[0])return jJ(t,e.o,A);if(A>t.a[1])return F7((A-t.a[1])/A)}else if(n=t.c==10?bq(w.Math.abs(t.a[0]-A)/w.Math.max(t.a[0],A)):t.c==5?Iq(w.Math.abs(t.a[0]-A)/w.Math.max(t.a[0],A)):F7(w.Math.abs(t.a[0]-A)/w.Math.max(t.a[0],A)),w.Math.abs(n)>.009999999776482582)return n;return 0}function Ss(t,e){var A,n,P,r,i;if(e<t.f&&r0(t.p,e)||t.o[e]!=0||gt(V(t.B[e],o9),0)||(n=t.u[e]&cn,(n==0?0:n==re?2:n==N1?3:4)<3)||(i=t.p&&e<t.f?iA(t.p,e):0,i>7))return!1;for(r=0;r<t.p.j.a.length&&!(I3(t.p,r)==i&&yA(t.p,r,e));)++r;if(r>=re&&r==t.p.j.a.length)return!1;for(P=0;P<t.j[e];P++)if(A=t.k[e][P],!tf(t.p,r,A)&&La(t,e,r,t.i[e][P],A))return!0;return!1}function HW(t,e,A,n){var P,r,i,f,D,Q,o,L,s,y,l,h,T,g;D=(e.c-e.d)/9,y=(e.b-e.a)/9,Q=e.b+D,l=e.d+y,o=e.b-D,h=e.d-y,L=(e.a+Q)/2,T=(e.c+l)/2,s=(e.a+o)/2,g=(e.c+h)/2,i=new OD(3),f=new OD(4),Ce(i,e.a,e.c),Ce(i,L,T),Ce(i,s,g),Ce(f,s,g),Ce(f,L,T),Ce(f,Q,l),Ce(f,o,h),F9(t.L,u1(t.L,A,n))?(P=-3,r=-3):(P=t.p[A],r=t.p[n],t.L.O!=1&&(r=KT(t,A),P==Qu(t.L,A)&&(P=r))),Z1(t,P),t.sb(i),Z1(t,r),t.sb(f),Z1(t,t.Q)}function MW(t){var e,A,n,P,r,i,f,D;ut(t.i,1),f=t.i.f;do--f;while(f>=0&&X(t.i,f)==1);for(e=0;e<f;e++)if(X(t.i,e)==1){E5(t.i,e,f);do--f;while(X(t.i,f)==1)}if(f!=t.i.f-1){for(i=c(Pt,ft,6,t.i.g,16,1),r=0;r<t.i.g;r++)A=z(t.i,0,r),n=z(t.i,1,r),(X(t.i,A)==1||X(t.i,n)==1)&&(i[r]=!0);D=t.i.g;do--D;while(D>=0&&i[D]);for(P=0;P<D;P++)if(i[P]){aT(t.i,P,D),i[P]=!1;do--D;while(i[D])}}}function VW(t,e,A){var n,P,r,i,f,D;for(f=new V0,n=iK(t,e),f.a+=\" rb:\",D=f.a.length,r=0;r<n.length;r++)n[r]!=-1&&(f.a.length!=D&&(f.a+=\",\"),f.a+=r);for(f.a+=\" ti:\",D=f.a.length,i=0;i<n.length;i++)n[i]!=-1&&(f.a.length!=D&&(f.a+=\",\"),f.a+=n[i]);for(f.a+=\" (\",D=f.a.length,P=0;P<n.length;P++)n[P]!=-1&&(f.a.length!=D&&(f.a+=\",\"),w3(f,A.i[P][n[P]]));return J(f,(Jr(),\") \"+t9(e.a,3))),f.a}function qs(t,e,A,n){var P,r,i,f,D,Q,o,L,s,y,l;A==0?(L=e.a,y=e.c,s=e.b,l=e.d):(L=e.b,y=e.d,s=e.a,l=e.c),o=N(t.$,n),D=s>L?o.c+o.b:o.c,Q=l>y?o.d+o.a:o.d,P=s-L,r=l-y,w.Math.abs(P)>w.Math.abs(r)?y==l?(i=D,f=y):(i=L+P*(Q-y)/r,s>L==D>i?f=Q:(i=D,f=y+r*(D-L)/P)):L==s?(i=L,f=Q):(f=y+r*(D-L)/P,l>y==Q>f?i=D:(i=L+P*(Q-y)/r,f=Q)),A==0?(e.a=i,e.c=f):(e.b=i,e.d=f)}function H5(t,e,A){var n,P,r,i,f,D,Q,o,L;if(L=t.u[e]&3,L==1||L==2){if(f=!1,t.o[e]==2&&t.j[e]==2&&t.n[e][0]==2&&t.n[e][1]==2&&t.C[e]<=7)for(i=0;i<t.j[e];i++){for(n=t.i[e][i],o=0,Q=c(F,k,6,3,15,1),D=0;D<t.j[n];D++)Q[o]=t.i[n][D],Q[o]!=e&&++o;o==2&&Q[0]<Q[1]^A[Q[0]]<A[Q[1]]&&(f=!f)}else for(i=1;i<t.j[e];i++)for(D=0;D<i;D++)P=t.i[e][i],r=t.i[e][D],P<r^A[P]<A[r]&&(f=!f);f&&(L=L==1?2:1)}return L}function EW(t){var e,A,n,P,r,i,f,D,Q,o,L,s;for(t.u=c(Pt,T0,12,t.k.q,0,2),A=1;A<t.k.q;A++)t.u[A]=c(Pt,ft,6,A,16,1);for(o=t.q,L=0,s=o.length;L<s;++L)for(Q=o[L],i=1;i<Q.d.length;i++)for(D=0;D<i;D++)hB(t,Q.e[Q.d[i]],Q.e[Q.d[D]]);for(e=0;e<t.k.f;e++)for(r=1;r<Ht(t.k,e);r++)for(f=0;f<r;f++)hB(t,_(t.k,e,r),_(t.k,e,f));if(t.e!=null)for(n=1;n<t.k.q;n++)for(P=0;P<n;P++)t.e[n]!=t.e[P]&&(t.u[n][P]=!0)}function SW(t){var e,A,n,P,r,i,f,D;if(!t.k||t.k.q==0)return\"\";for(ut(t.k,15),t.d=new SA(t.k,129),P=t.d.T,t.o=c(Pt,ft,6,P+1,16,1),t.n=c(Pt,ft,6,P+1,16,1),t.i=k1(F,[f0,k],[7,6],15,[2,32],2),e=0;e<t.k.f;e++)D=ne(t.k,e)-1,D!=-1&&++t.i[D][EA(t.k,e)];for(cW(t),R$(t),Ka(t),n=new V0,A=new V0,r=!0,f=new Zt(t.g);f.a<f.c.a.length;)i=$t(f),i.g==-1&&(r?r=!1:n.a+=\".\"),Ha(t,i,n,A);return n.a}function xR(t,e){var A,n,P,r;for(vi(t.V),t.L=c(Ur,U9,26,e.g.a.length+e.f.a.length,0,1),t.Y=e.g.a.length,P=0;P<e.g.a.length+e.f.a.length;P++)t.L[P]=P<e.g.a.length?N(e.g,P):N(e.f,P-e.g.a.length),kD(t.V,t.L[P]);for(je(t.V,e.c||cQ(e)),G1(t),t.M=c(F,k,6,t.V.q,15,1),A=0,n=0;n<t.L.length;n++)for(r=0;r<t.L[n].q;r++)t.M[A++]=n;t.I=new eU,t.U=5,t.eb=w.Math.max(t.eb,5),e1(t.k),q1(t,new S1(t,1,!1))}function qW(t){var e,A,n,P,r,i;if(t.L.K){for(Z1(t,320),e=0;e<t.L.f;e++)P=y0(t.L,e),G(P,0)!=0&&((t.G&8)!=0||gt(V(P,{l:ge,m:896,h:1048448}),0))&&t.ub(X1(t.R,kt(t.L,e))-t.Z/2,K1(t.R,pt(t.L,e))-t.Z/2,t.Z);for(r=0;r<t.L.g;r++)i=Ae(t.L,r),i!=0&&((t.G&8)!=0||(i&-8388481)!=0)&&(A=z(t.L,0,r),n=z(t.L,1,r),t.ub((X1(t.R,kt(t.L,A))+X1(t.R,kt(t.L,n))-t.Z)/2,(K1(t.R,pt(t.L,A))+K1(t.R,pt(t.L,n))-t.Z)/2,t.Z))}}function NR(t){t.r&&(j5(t,!1),null.wd(),null.wd(),(t.U&4)!=0&&(null.wd(),null.wd()),(t.U&4)!=0&&null.wd()),(t.U&4)!=0&&t.w==19&&(null.wd(),null.wd(),null.wd(),null.wd(),null.wd(),null.wd()),t.w==18&&(null.wd(),null.wd(),null.wd()),t.g&&t.t!=-1&&(Qu(t.V,t.t),null.wd(),null.wd(),null.wd(),null.wd(),null.wd(),null.wd(),null.wd(),null.wd(),null.wd(),null.wd()),null.wd()}function SQ(t,e,A,n,P,r){var i,f,D,Q,o;for(ut(t,1),P&&(xL(P),P.d=null,P.K=!1),D=c(F,k,6,t.q,15,1),n==null?n=c(Pt,ft,6,t.q,16,1):Cu(n,n.length),D[0]=e,D[1]=A,n[e]=!0,n[A]=!0,f=1,Q=1;f<=Q;){for(o=0;o<t.e[D[f]];o++){if(i=t.i[D[f]][o],i==e&&f!=1)return-1;n[i]||(n[i]=!0,D[++Q]=i)}++f}return P&&(r==null&&(r=c(F,k,6,n.length,15,1)),ii(t,P,n,!1,r),gf(P,r[e],0,0,-1,0)),n[e]=!1,Q}function IW(t){var e,A,n,P,r,i,f,D;for(A=0;A<t.j.g;A++)if(t.e[A])for(P=0;P<2;P++){for(f=z(t.j,P,A),e=!1,i=0;i<O(t.j,f);i++)if(A!=xt(t.j,f,i)&&t.e[xt(t.j,f,i)]){e=!0;break}if(!e){for(D=A,n=z(t.j,1-P,A);D!=-1;)for(t.d[f]=!1,t.e[D]=!1,--t.c,w0(t.j,D,8),D=-1,f=n,r=0;r<O(t.j,f);r++)if(t.e[xt(t.j,f,r)])if(D==-1)D=xt(t.j,f,r),n=_(t.j,f,r);else{f=-1,D=-1;break}f!=-1&&(t.d[n]=!1);break}}}function xW(t,e,A){var n,P,r,i,f,D,Q,o;for(r=t.g[e],P=1,D=0;D<r.length;D++)if(n=r[D],t.f[n]&&t.k[n]==2){P=2;break}for(i=c(F,f0,7,32,0,2),Q=0;Q<r.length;Q++)n=r[Q],t.f[n]&&t.k[n]==P&&(i[t.j[n]]=nf(i[t.j[n]],(A[n]<<16)+n));for(o=0;o<32;o++)i[o]!=null&&i[o].sort(Fe(D0.prototype.hd,D0,[]));if(cu(i,new Xe),i5(i[0],i[1])==0)return!1;for(f=0;f<i[0].length;f++)n=i[0][f]&c1,t.k[n]=0,t.j[n]=-1;return!0}function NW(t){var e,A,n,P,r,i,f,D,Q,o,L;for(n=c(F,k,6,t.O,15,1),e=0;e<t.R.f;e++){for(o=O(t.R,e)+Si(t.R,e),Q=0,r=0;r<De(t.R,e);r++)if(r<O(t.R,e)||r>=Ht(t.R,e)){for(L=2*t.f[_(t.R,e,r)],A=xt(t.R,e,r),dt(t.R,A)==2&&(_e(t.R,A)||++L),f=0;f<Q&&!(L<n[f]);f++);for(D=Q;D>f;D--)n[D]=n[D-1];n[f]=L,++Q}for($e(t.e[e],e),W1(t.e[e],t.c,t.f[e]),i=o;i<t.O;i++)W1(t.e[e],t.c+1,0);for(P=0;P<o;P++)W1(t.e[e],t.c+1,n[P])}}function OW(t,e){var A,n,P,r,i,f,D,Q;if(e.startsWith(\"M  SUB\")&&(r=Q1(B1((Ct(6,9,e.length),e.substr(6,3))),P1,Et),r>0)){for(A=10,Q=14,i=1;i<=r;++i,A+=8,Q+=8)if(n=Q1(B1((Ct(A,A+3,e.length),e.substr(A,A+3-A))),P1,Et)-1,f=Q1(B1((Ct(Q,Q+3,e.length),e.substr(Q,Q+3-Q))),P1,Et),f==-2)h1(t.j,n,N1,!0);else if(f>0){for(D=0,P=0;P<t.j.r;P++)(z(t.j,0,P)==n||z(t.j,1,P)==n)&&++D;f>D&&h1(t.j,n,C0,!0)}}}function OR(t,e){var A,n,P,r,i,f;return P=dF(t),f=dF(e),P==f?t.e==e.e&&t.a<54&&e.a<54?t.f<e.f?-1:t.f>e.f?1:0:(n=t.e-e.e,A=(t.d>0?t.d:w.Math.floor((t.a-1)*To)+1)-(e.d>0?e.d:w.Math.floor((e.a-1)*To)+1),A>n+1?P:A<n-1?-P:(r=(!t.c&&(t.c=kP(M1(t.f))),t.c),i=(!e.c&&(e.c=kP(M1(e.f))),e.c),n<0?r=bP(r,ni(-n)):n>0&&(i=bP(i,ni(n))),rs(r,i))):P<f?-1:1}function GW(t){var e,A,n,P,r,i,f,D,Q,o,L;for(t.b=c(F,k,6,t.i.f,15,1),f=c(F,k,6,t.i.f,15,1),n=c(Pt,ft,6,t.i.g,16,1),L=0,A=0;A<t.i.g;A++)if(!n[A]&&t.g[A])for(++L,t.b[z(t.i,0,A)]=L,t.b[z(t.i,1,A)]=L,n[A]=!0,Q=0;Q<2;Q++)for(e=z(t.i,Q,A),t.b[e]=L,i=0,D=0,f[0]=e;i<=D;){for(o=0;o<O(t.i,f[i]);o++)r=xt(t.i,f[i],o),!n[r]&&t.g[r]&&(n[r]=!0,P=_(t.i,f[i],o),t.b[P]==0&&(t.b[P]=L,f[++D]=P));++i}t.j=L}function JW(t,e,A,n,P){var r,i;if(r=I1(V(e[0],T1),V(n[0],T1)),t[0]=Jt(r),r=q0(r,32),A>=P){for(i=1;i<P;i++)r=I1(r,I1(V(e[i],T1),V(n[i],T1))),t[i]=Jt(r),r=q0(r,32);for(;i<A;i++)r=I1(r,V(e[i],T1)),t[i]=Jt(r),r=q0(r,32)}else{for(i=1;i<A;i++)r=I1(r,I1(V(e[i],T1),V(n[i],T1))),t[i]=Jt(r),r=q0(r,32);for(;i<P;i++)r=I1(r,V(n[i],T1)),t[i]=Jt(r),r=q0(r,32)}G(r,0)!=0&&(t[i]=Jt(r))}function M5(t,e,A,n,P){D8();var r,i,f,D,Q,o,L,s,y,l,h;for(D=0;D<e.length;D++)M9(A,t.k[e[D]]);for(md(A,1/e.length),Q=0;Q<e.length;Q++)P[Q][0]=t.k[e[Q]].a-A.a,P[Q][1]=t.k[e[Q]].b-A.b,P[Q][2]=t.k[e[Q]].c-A.c;for(l=k1(Ut,[T0,Tt],[15,6],15,[3,3],2),o=0;o<e.length;o++)for(L=0;L<3;L++)for(s=0;s<3;s++)l[L][s]+=P[o][L]*P[o][s];for(h=new Py(l),r=h.e,y=0,f=1;f<3;f++)r[f]<r[y]&&(y=f);i=h.a,n.a=i[0][y],n.b=i[1][y],n.c=i[2][y]}function zW(t,e,A,n){var P,r,i,f,D,Q,o,L,s,y,l;if(o=c(Pt,ft,6,e.q,16,1),s=SQ(e,t.k[0],t.p[1],o,null,null),P=0,t.k[0]!=t.p[2]&&(P=o5(e,t.k[0],t.p[2])),Q=!1,s>n-P-s&&(s=n-P-s,Q=!0),Q&&P!=0){for(l=t.k[0],i=t.p[1];e.o[l]==2&&e.j[l]==2&&e.C[l]<10;)for(o[l]=!0,L=0;L<2;L++)if(f=e.i[l][L],f!=i){i=l,l=f;break}}for(y=0,D=A[t.p[1]],t.o=c(F,k,6,s,15,1),r=0;r<e.q;r++)A[r]==D&&o[r]^Q&&(t.o[y++]=r);t.n=t.p[Q?2:1]}function GR(t,e){fg();var A,n,P,r;n=new Vs(t);try{for(r=new i3,rA(r,\"$RXN\"+Gf),Mi(r.a,e??\"\"),rA(r,Gf+(\"\"+Gf)),rA(r,Sy+C5(t,!0,27)),rA(r,Gf),rA(r,\"  \"+n.g.a.length+\"  \"+n.f.a.length+Gf),P=pX(n),A=0;A<n.g.a.length+n.f.a.length;A++)rA(r,\"$MOL\"+Gf),cq(new i6(A<n.g.a.length?N(n.g,A):N(n.f,A-n.g.a.length),P,null),r);this.a=r.a}catch(i){if(i=a1(i),Xt(i,19))z1();else throw At(i)}}function YW(t){var e,A,n,P,r,i,f,D,Q,o;for(r=wP(t,t.q,t.r,gn),i=r*r/16,n=1;n<t.q;n++)for(P=0;P<n;P++)if(D=t.J[P].a-t.J[n].a,Q=t.J[P].b-t.J[n].b,o=t.J[P].c-t.J[n].c,D*D+Q*Q+o*o<i)throw At(new C1(\"The distance between two atoms is too close.\"));for(ut(t,1),e=0,A=0;A<t.f;A++){if(x1(t,A)>(f=Cn(t,A),f+WA(t,A,f,t.C[A])))throw At(new C1(\"atom valence exceeded\"));e+=t.s[A]}if(e!=0)throw At(new C1(\"unbalanced atom charge\"))}function qQ(t,e){var A,n,P,r,i,f,D,Q,o;return A=t.J[e[0]],n=t.J[e[1]],P=t.J[e[2]],r=t.J[e[3]],D=new xe(n.a-A.a,n.b-A.b,n.c-A.c),Q=new xe(P.a-n.a,P.b-n.b,P.c-n.c),o=new xe(r.a-P.a,r.b-P.b,r.c-P.c),i=new xe(D.b*Q.c-D.c*Q.b,-(D.a*Q.c-D.c*Q.a),D.a*Q.b-D.b*Q.a),f=new xe(Q.b*o.c-Q.c*o.b,-(Q.a*o.c-Q.c*o.a),Q.a*o.b-Q.b*o.a),-w.Math.atan2(w.Math.sqrt(Q.a*Q.a+Q.b*Q.b+Q.c*Q.c)*(D.a*f.a+D.b*f.b+D.c*f.c),i.a*f.a+i.b*f.b+i.c*f.c)}function IQ(t,e){var A,n,P,r,i,f,D,Q,o;return A=J0(t,e[0]),n=J0(t,e[1]),P=J0(t,e[2]),r=J0(t,e[3]),D=new xe(n.a-A.a,n.b-A.b,n.c-A.c),Q=new xe(P.a-n.a,P.b-n.b,P.c-n.c),o=new xe(r.a-P.a,r.b-P.b,r.c-P.c),i=new xe(D.b*Q.c-D.c*Q.b,-(D.a*Q.c-D.c*Q.a),D.a*Q.b-D.b*Q.a),f=new xe(Q.b*o.c-Q.c*o.b,-(Q.a*o.c-Q.c*o.a),Q.a*o.b-Q.b*o.a),-w.Math.atan2(w.Math.sqrt(Q.a*Q.a+Q.b*Q.b+Q.c*Q.c)*(D.a*f.a+D.b*f.b+D.c*f.c),i.a*f.a+i.b*f.b+i.c*f.c)}function JR(t,e){var A,n,P,r,i,f;for(P=null,r=t.a.a.length+e,f=e*12,n=new f1,i=0;i<f&&t.a.a.length<r&&!(gt(t.n,0)&&(z1(),E1(M1(Date.now()),t.n)));i++)!P&&(P=new Fu(t.d)),TR(t,P)?XR(t,P,t.a,0)&&(P=null):XR(t,P,n,1)&&(P=null);t.a.a.length==0&&n.a.length!=0&&(A=Pf(n,c(WE,pV,96,0,0,1)),cu(A,new mw),jP(t.a,new qD(new iU(A),0,w.Math.min(e,A.length))),t.e=!0),(t.a.a.length<r||t.a.a.length==t.b)&&(t.e=!0)}function wf(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m;for(s=-1,l=wP(t,t.q,t.r,gn),y=Ve,n=0;n<t.r;n++)h=t.J[t.D[0][n]].a,g=t.J[t.D[0][n]].b,T=t.J[t.D[1][n]].a,m=t.J[t.D[1][n]].b,o=T-h,L=m-g,P=w.Math.sqrt(o*o+L*L),r=(h+T)/2,i=(g+m)/2,o=e-r,L=A-i,!(w.Math.sqrt(o*o+L*L)>P/2)&&(T==h?Q=w.Math.abs(h-e):(f=(m-g)/(h-T),D=-f*h-g,Q=w.Math.abs((f*e+A+D)/w.Math.sqrt(f*f+1))),Q<l&&Q<y&&(y=Q,s=n));return s}function KW(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l;for(P=z(t.i,0,e),r=z(t.i,1,e),D=c(F,k,6,t.i.f,15,1),Q=c(F,k,6,t.i.f,15,1),o=c(F,k,6,t.i.f,15,1),D[0]=P,D[1]=r,Q[P]=1,Q[r]=2,o[P]=-1,o[r]=P,f=1,L=1;f<=L;){for(s=0;s<O(t.i,D[f]);s++){if(i=_(t.i,D[f],s),f>1&&i==P){for(l=c(F,k,6,Q[D[f]],15,1),n=D[f],y=0;y<l.length;y++)l[y]=n,n=o[n];return l}Q[i]==0&&!A[i]&&(D[++L]=i,Q[i]=Q[D[f]]+1,o[i]=D[f])}++f}return null}function XW(t,e){var A,n,P,r,i,f,D,Q,o,L;for(o=Et,D=-1,L=-1,Q=-1,n=0;n<t.j.i.f;n++)if(rh(t.j,n)&&t.j.k[n]!=0)for(f=0;f<e.length;f++)P=e[f]<t.a?e[f]:e[f]<t.b?e[f]-t.a:-1,r=e[f]<t.a?1:e[f]<t.b?2:0,t.j.k[n]==r&&t.j.j[n]==P&&o>t.j.a[n]+(r==1?u0:0)&&(o=t.j.a[n]+(r==1?u0:0),D=P,L=r,Q=e[f]);for(A=0;A<t.j.i.f;A++)rh(t.j,A)&&t.j.k[A]==L&&t.j.j[A]==D&&(t.j.k[A]=0,t.j.j[A]=-1);for(i=0;i<t.j.g.length;i++)t.e[Q][i]=!1}function ZW(t){var e,A,n,P,r;if(A=t.indexOf(k0(38)),A==-1)return t;for(P=0,r=new yD;A!=-1;)Mi(r,(Ct(P,A,t.length),t.substr(P,A-P))),Gt(A+1,t.length),t.charCodeAt(A+1)==38?(r.a+=\"&\",P=A+2):(e=(Gt(A+1,t.length),t.charCodeAt(A+1)),e=e-(e<65?48:e<97?65:97),n=(Gt(A+2,t.length),t.charCodeAt(A+2)),n=n-(n<65?48:n<97?65:97),fB(r,16*e+n&c1),P=A+3),A=t.indexOf(k0(38),P);return Mi(r,(Gt(P,t.length+1),t.substr(P))),r.a}function WW(t){var e,A,n,P,r,i;for(t.L=!0,r=A2(t,!1);t.U<t.R.f&&r;){for(e=0;e<t.R.f;e++)$e(t.e[e],e),W1(t.e[e],t.c,t.f[e]),i=t.db[e]<<7,(t.db[e]==1||t.db[e]==2)&&t.bb[e]!=0&&(i|=t.bb[e]<<5,i|=t.ab[e]),W1(t.e[e],18,j1(i,9));for(A=0;A<t.R.g;A++)n=t.o[A]<<7,(t.o[A]==1||t.o[A]==2)&&l1(t.R,A)==1&&t.n[A]!=0&&(n|=t.n[A]<<5,n|=t.k[A]),ue(t.e[z(t.R,0,A)],n),ue(t.e[z(t.R,1,A)],n);if(P=Zn(t),t.U==P)break;t.U=P,r=A2(t,!1)}}function _W(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h;return y=t.a,l=t.d,h=t.e,l==1?(n=V(y[0],T1),P=V(e,T1),r=Hn(n,P),Q=Yr(n,P),h!=A&&(r=p0(r)),h<0&&(Q=p0(Q)),B(d(wi,1),Ye,23,0,[(ke(),G(r,0)>=0?we(r):FP(we(p0(r)))),G(Q,0)>=0?we(Q):FP(we(p0(Q)))])):(f=l,D=h==A?1:-1,i=c(F,k,6,f,15,1),o=B(d(F,1),k,6,15,[ER(i,y,l,e)]),L=new oe(D,f,i),s=new oe(h,1,o),Rn(L),Rn(s),B(d(wi,1),Ye,23,0,[L,s]))}function SA(t,e){this.R=t,this.Q=e,ut(this.R,7),this.c=G8(this.R.f),(this.Q&N1)==0&&MZ(this),this.jb=(e&64)!=0||Nh(this.R),this.b=XO(this.R)==0,(this.Q&N1)==0&&(this.db=c(E,q,6,this.R.f,15,1),this.fb=c(Pt,ft,6,this.R.f,16,1),this.ib=c(Pt,ft,6,this.R.f,16,1),this.o=c(E,q,6,this.R.g,15,1),this.q=c(Pt,ft,6,this.R.g,16,1),this.p=c(Pt,ft,6,this.R.g,16,1)),this.d=!1,Ptt(this),(this.Q&N1)==0&&m$(this),eW(this)}function $W(t,e,A,n,P){var r,i,f,D,Q,o;for(D=null,r=null,o=0;o<t.g[e].length;o++)i=t.g[e][o],t.f[i]&&(t.o[i]==1||t.o[i]==2)&&(t.k[i]==0?r=nf(r,(P[i]<<16)+i):t.k[i]==n&&t.j[i]==A&&(D=nf(D,(P[i]<<16)+i)));if(f=i5(D,r),f==0)return!1;if(f<0)for(Q=0;Q<t.g[e].length;Q++)i=t.g[e][Q],t.f[i]&&(t.o[i]==1||t.o[i]==2)&&(t.k[i]==0?(t.k[i]=n<<24>>24,t.j[i]=A<<24>>24):t.k[i]==n&&t.j[i]==A&&(t.k[i]=0,t.j[i]=-1));return!0}function aW(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l;for(f=c(F,k,6,t.f.q,15,1),D=c(F,k,6,t.f.q,15,1),Q=c(F,k,6,t.f.q,15,1),o=c(F,k,6,t.f.q,15,1),f[0]=A,Q[A]=1,o[0]=-1,i=0,L=0;i<=L;){for(s=0;s<Ht(t.f,f[i]);s++){if(P=_(t.f,f[i],s),l=xt(t.f,f[i],s),P==e){for(r=Q[f[i]],n=c(F,k,6,r,15,1),n[0]=l,y=1;y<r;y++)n[y]=D[i],i=o[i];return n}Q[P]==0&&(f[++L]=P,D[L]=l,Q[P]=Q[f[i]]+1,o[L]=i)}if(i==L)return null;++i}return null}function t_(t,e,A){var n,P,r,i,f;return!Pi(t.R,e)||(n=z(t.R,0,e),P=z(t.R,1,e),i=new cf(t.R,t.f,n,P),i.f&&A==1)||(f=new cf(t.R,t.f,P,n),f.f&&A==1)||i.f&&f.f?!1:(A==3&&(i.f&&(t.V[e]=bb(t,P)),f.f&&(t.V[e]=bb(t,n))),r=t.jb?TY(t,i,f):Tz(i,f),A==1?t.o[e]=r:A==2&&(i.f&&(r==2?ue(t.e[i.b],t.f[P]):ue(t.e[i.d],t.f[P])),f.f&&(r==2?ue(t.e[f.b],t.f[n]):ue(t.e[f.d],t.f[n]))),!0)}function e_(t){t=t||{};var e=0;return t.createSymmetryRank&&(e|=1),t.considerStereoheterotopicity&&(e|=2),t.encodeAtomCustomLabels&&(e|=8),t.encodeAtomSelection&&(e|=16),t.assignParitiesToTetrahedralN&&(e|=32),t.coordsAre3d&&(e|=64),t.createPseudoStereoGroups&&(e|=128),t.distinguishRacemicOrGroups&&(e|=256),t.tieBreakFreeValenceAtoms&&(e|=512),t.encodeAtomCustomLabelsWithoutRanking&&(e|=re),t.neglectAnyStereoInformation&&(e|=N1),e}function zR(t,e,A,n,P,r,i){var f,D,Q,o,L,s,y,l,h,T,g;for(L=i;L>1;L--){for(h=r[L]-r[L-1],g=c(btt,A0,174,h,0,1),f=r[L],l=0;l<h;l++){for(T=r[L-1]+l,s=f;s<r[L+1]&&n[s]==T;)++s;for(g[l]=new n0,g[l].c=T,g[l].d=A[T],g[l].b=e[T]?0:Bd(t.R,P[T]),g[l].a=c(F,k,6,s-f,15,1),o=f;o<s;o++)g[l].a[o-f]=A[o];g[l].a.sort(Fe(D0.prototype.hd,D0,[])),f=s}for(D=new o1,Xi(g,0,g.length,D),Q=1,y=0;y<h;y++)A[g[y].c]=Q,y!=h-1&&pb(g[y],g[y+1])!=0&&++Q}}function A_(t,e,A){var n,P,r,i,f,D,Q,o,L,s;for(r=0;r<t.f.r;r++)if(n=z(t.f,0,r),P=z(t.f,1,r),!(fA(t.f,r)||dt(t.f,r)!=1||Ht(t.f,n)==1||Ht(t.f,P)==1)&&!((t.e&4)!=0&&z0(t.f,n)&&z0(t.f,P))){for(L=!1,Q=0;Q<2;Q++)if(i=z(t.f,Q,r),Ht(t.f,i)>2){for(s=!0,D=-1,o=0;o<Ht(t.f,i);o++)f=_(t.f,i,o),f!=z(t.f,1-Q,r)&&(D==-1?D=A[f]:D!=A[f]&&(s=!1));if(s){L=!0;break}}L||((t.e&8)!=0&&z0(t.f,n)&&z0(t.f,P)?e[r]=1:e[r]=2)}}function o2(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y;for(f=!1,D=0;D<t.hb.a.length;D++){for(i=N(t.hb,D),e=!0,y=-1,Q=!1,L=0;L<i.length;L++){if(A=i[L],t.db[A]==0){e=!1;break}if(t.db[A]!=3){for(o=!0,s=0;s<i.length;s++)if(s!=L&&t.f[A]==t.f[i[s]]){o=!1;break}o&&y<t.f[A]&&(y=t.f[A],Q=t.db[A]==1)}}if(e&&y!=-1){for(n=i,P=0,r=n.length;P<r;++P)A=n[P],(t.db[A]==1||t.db[A]==2)&&(t.eb[A]=Q),t.gb[A]=!1;X8(t.hb,i),f=!0,--D}}return f}function YR(t,e,A,n){var P,r,i,f,D,Q,o,L,s;for(ut(e,1),n==null&&(n=c(F,k,6,e.q,15,1)),f=$0(t,1),D=$0(t,2),s=c(Pt,ft,6,e.q,16,1),Q=c(F,k,6,e.q,15,1),Q[0]=A,s[A]=!0,n[A]=En(e,t,A,f,D),i=0,o=0;i<=o;){for(L=0;L<e.e[Q[i]];L++)r=e.i[Q[i]][L],s[r]||(Q[++o]=r,s[r]=!0,n[r]=En(e,t,r,f,D));++i}for(P=0;P<e.r;P++)s[e.D[0][P]]&&e9(e,t,P,f,D,n==null?e.D[0][P]:n[e.D[0][P]],n==null?e.D[1][P]:n[e.D[1][P]],!1);$0(t,1),$0(t,2),t.T=0}function V5(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l;for(ut(t,7),r=c(Pt,ft,6,t.g,16,1),L=c(Pt,ft,6,t.g,16,1),l=c(F,k,6,t.f,15,1),i=0,f=1;f<t.j[e];f++)if(n=t.k[e][f],(t.F[n]&64)!=0){for(Q=0;Q<f;Q++)if(P=t.k[e][Q],(t.F[P]&64)!=0&&(L[n]=!0,L[P]=!0,y=L2(t,l,t.i[e][f],t.i[e][Q],A-2,null,L),L[n]=!1,L[P]=!1,y!=-1)){for(D=!1,s=c(F,k,6,y,15,1),qm(t,l,s,y),o=0;o<y;o++)r[s[o]]||(r[s[o]]=!0,D=!0);D&&++i}}return i}function KR(t,e,A,n,P,r){var i,f,D,Q;switch(Q=1,f=!1,P){case 1:Q=257;break;case 3:Q=386;break;case 4:Q=257,f=!0;break;case 6:Q=129;break;default:switch(n){case 1:Q=1;break;case 2:Q=2;break;case 3:Q=4;break;case 4:Q=8;break;case 9:Q=16}}if(i=O0(t.j,e,A,Q),D=0,f&&Me(t.j,e,1,-1),n>4)switch(n){case 5:D|=3;break;case 6:D|=9;break;case 7:D|=10;break;case 8:Q!=16&&(D|=127)}return r==1&&(D|=256),r==2&&(D|=128),D!=0&&Ge(t.j,i,D,!0),i}function U2(t,e,A,n){var P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m;return o=eB(t.a,e,u1(e,A,n)),i=e.a[A],Q=e.a[n],i>Q&&(i=(T=m1(Q),m1(Q=i),T).a),l=_r(B(d(F,1),k,6,15,[1,2,0]),B(d(F,1),k,6,15,[i,Q,o]),t),l>=0?j0(t.b[l][4]):(r=e.C[A],D=e.C[n],r>D&&(r=(h=m1(D),m1(D=r),h).a),P=Yd(r,t.a.f),f=Yd(D,t.a.f),g=bg(t.a.f,P),m=bg(t.a.f,f),s=kg(t.a.f,P),y=kg(t.a.f,f),L=r==1||D==1?.05:.085,g+m-L*w.Math.pow(w.Math.abs(s-y),1.4))}function gf(t,e,A,n,P,r){var i;if((A==1||A==151||A==152)&&x1(t,e)>1)return!1;if((A==151||A==152)&&(n=A-149,A=1),i=A!=t.C[e]&&(!t.K||t0(V(t.B[e],1),0)&&(t.v==null||t.v[e]==null)),i)t.B[e]=0,t.v!=null&&t.v[e]!=null&&(t.v[e]=null),t.t!=null&&t.t[e]!=null&&(t.t[e]=null);else if(n==t.A[e]&&P==((t.u[e]&d8)>>>27)-1&&r==(t.u[e]&48))return!1;return i&&(t.C[e]=A,t.u[e]&=960,t.s[e]=0,Wu(t,t.w[e])),t.A[e]=n,XA(t,e,P),Ne(t,e,r),t.T=0,!0}function XR(t,e,A,n){var P,r,i,f;if(t.g==null&&(t.g=Jk(t.d)),i=w.Math.max(t.c[n]+2.72,t.c[n]*2),e.e>i)return!1;for(HI(e,t.g),r=A.a.length-1;r>=0;r--)if(f=(ve(r,A.a.length),A.a[r]),hF(e,f),XJ(e.q,f.q))return f.e>e.e?(ve(r,A.a.length),A.a.splice(r,1),A.a.push(e),t.c[n]>e.e&&(t.c[n]=e.e),!0):!1;if(A.a.push(e),t.c[n]>e.e)for(t.c[n]=e.e,P=A.a.length-1;P>=0;P--)f=(ve(P,A.a.length),A.a[P]),f.e>i&&LA(A,P);return!0}function WA(t,e,A,n){var P,r;return n>=171&&n<=190?0:(r=0,(t.u[e]&48)==32&&(r-=1),((t.u[e]&48)==16||(t.u[e]&48)==48)&&(r-=2),P=t.s[e],P==0&&t.K&&(t0(V(t.B[e],ir),pf)&&(P=-1),t0(V(t.B[e],ir),jf)&&(P=1)),n==7||n==8||n==9?r+=P:n==6||n==14||n==32?r-=w.Math.abs(P):n==15||n==33?A-r-P<=3?r+=P:r-=P:n==16||n==34||n==52?A-r-P<=4?r+=P:r-=w.Math.abs(P):n==17||n==35||n==53?A-r-P<=5?r+=P:r-=w.Math.abs(P):r-=P,r)}function n_(t,e){var A,n,P,r,i,f;if((e.startsWith(\"M  RBC\")||e.startsWith(\"M  RBD\"))&&(P=Q1(B1((Ct(6,9,e.length),e.substr(6,3))),P1,Et),P>0))for(A=10,f=14,r=1;r<=P;++r,A+=8,f+=8)switch(n=Q1(B1((Ct(A,A+3,e.length),e.substr(A,A+3-A))),P1,Et)-1,i=Q1(B1((Ct(f,f+3,e.length),e.substr(f,f+3-f))),P1,Et),i){case 3:case-1:h1(t.j,n,112,!0);break;case 1:h1(t.j,n,8,!0);break;case 2:h1(t.j,n,104,!0);break;case 4:h1(t.j,n,56,!0)}}function P_(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y;for(P=c(F,k,6,t.f.q,15,1),r=c(F,k,6,t.f.q,15,1),i=c(F,k,6,t.f.q,15,1),f=c(F,k,6,t.f.q,15,1),P[0]=e,i[e]=1,f[0]=-1,n=0,D=0;n<=D;){if(n==0||!t.b[P[n]])for(Q=0;Q<Ht(t.f,P[n]);Q++)A=_(t.f,P[n],Q),s=xt(t.f,P[n],Q),i[A]==0&&!t.c[s]&&(P[++D]=A,r[D]=s,i[A]=i[P[n]]+1,f[D]=n);if(n==D){for(y=new jh(i[P[n]]),o=n,L=0;L<y.a.length;L++)y.a[L]=P[o],y.b[L]=r[o],o=f[o];return y}++n}return null}function r_(t,e,A,n){var P,r,i,f,D,Q,o;return o=A>n?1:-1,Q=A>n?n:A,D=A>n?A:n,r=Kd(t,Q,t.a.length,!0),P=Kd(t,Q,t.a.length,!1),r==-1||P==-1||(f=TA(2,D,r,P+1,!0,new Wo(t)),i=TA(2,D,r,P+1,!1,new Wo(t)),f==-1||i==-1)?j0(t.b[A-1][1])-j0(t.b[n-1][1]):e==0&&zn(t.a[f][0])==0?o*j0(t.a[f][3]):e==1&&zn(t.a[i][0])==1?o*j0(t.a[i][3]):j0(t.b[A-1][1])-j0(t.b[n-1][1])}function i_(t,e,A,n,P){var r,i,f,D,Q,o,L,s;for(r=c(F,k,6,n,15,1),s=c(F,k,6,4,15,1),s[0]=_(t,A,t.i[A][0]==e?1:0),s[1]=A,s[2]=e,s[3]=_(t,e,t.i[e][0]==A?1:0),D=0,Q=0;Q<t.e[e];Q++)i=t.i[e][Q],i!=A&&(r[D++]=i);L=c(zt,_t,6,3,15,1),f=c(zt,_t,6,3,15,1),o=k1(zt,[ee,_t],[16,6],15,[3,2],2),L[0]=60,L[1]=180,L[2]=300,f[0]=33,f[1]=33,f[2]=33,o[0][0]=45,o[0][1]=75,o[1][0]=165,o[1][1]=195,o[2][0]=285,o[2][1]=315,mt(P,new SL(L,f,o,s,r,1))}function E5(t,e,A){var n,P,r,i,f,D;for(i=t.C[e],t.C[e]=t.C[A],t.C[A]=i,i=t.s[e],t.s[e]=t.s[A],t.s[A]=i,i=t.A[e],t.A[e]=t.A[A],t.A[A]=i,i=t.u[e],t.u[e]=t.u[A],t.u[A]=i,D=t.B[e],t.B[e]=t.B[A],t.B[A]=D,i=t.w[e],t.w[e]=t.w[A],t.w[A]=i,r=t.J[e],t.J[e]=t.J[A],t.J[A]=r,t.v!=null&&(f=t.v[e],t.v[e]=t.v[A],t.v[A]=f),t.t!=null&&(f=t.t[e],t.t[e]=t.t[A],t.t[A]=f),n=0;n<t.r;n++)for(P=0;P<2;P++)t.D[P][n]==e?t.D[P][n]=A:t.D[P][n]==A&&(t.D[P][n]=e);t.T=0}function L2(t,e,A,n,P,r,i){var f,D,Q,o,L,s,y,l,h;if(A==n)return e[0]=A,0;for(t.$b(1),o=c(F,k,6,t.q,15,1),Q=c(F,k,6,t.q,15,1),h=c(F,k,6,t.q,15,1),Q[0]=A,o[A]=1,D=0,L=0;D<=L&&o[Q[D]]<=P;){for(l=Q[D],s=0;s<t.e[l];s++)if(i==null||i.length<=t.k[l][s]||!i[t.k[l][s]]){if(f=t.i[l][s],f==n){for(y=o[l],e[y]=f,e[--y]=l;y>0;)e[y-1]=h[e[y]],--y;return o[l]}o[f]==0&&(r==null||r.length<=f||!r[f])&&(Q[++L]=f,o[f]=o[l]+1,h[f]=l)}++D}return-1}function f_(t,e){var A,n,P,r,i,f;for(r=0;r<2;r++){for(A=z(e,r,t.a),f=z(e,1-r,t.a);e.o[A]==2&&e.j[A]==2&&e.C[A]<10;)for(i=0;i<2;i++)if(n=e.i[A][i],n!=f){f=A,A=n;break}t.p[r+1]=A,t.k[r]=f}if($1(e,t.p[1])==0&&O(e,t.p[1])==3)t.p[0]=-1;else for(P=0;P<O(e,t.p[1]);P++)if(n=_(e,t.p[1],P),n!=t.p[2]){t.p[0]=n;break}if($1(e,t.p[2])==0&&O(e,t.p[2])==3)t.p[3]=-1;else for(P=0;P<O(e,t.p[2]);P++)if(n=_(e,t.p[2],P),n!=t.p[1]){t.p[3]=n;break}}function D_(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g;for(f=Xa(e),i=c(Ut,Tt,6,f.length,15,1),n=0;n<f.length;n++){if(T=e.a[n],y=f[n],g=kI(t.e,T),A=mn(t.b,T),l=0,h=0,w.Math.abs(g)<Lo)for(Q=0;Q<e.e[n];Q++)L=e.i[n][Q],f[L]<0&&(y+=f[L]/(2*e.e[L]));if(T==62)for(o=0;o<e.e[n];o++)L=e.i[n][o],f[L]>0&&(y-=f[L]/2);for(D=0;D<e.e[n];D++)L=e.i[n][D],P=u1(e,n,L),s=e.a[L],r=Q8(t,e,e.D[0][P],e.D[1][P]),h+=r_(t.e,r,T,s),l+=f[L];i[n]=(1-A*g)*y+g*l+h}return i}function S5(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m;for(L=e.f,s=e.g,P=e.a,g=0,r=z(t.o,0,P),i=z(t.o,1,P),y=0;y<L.c.length;y++)if(A=L.e[L.c[y]],A!=r&&A!=i)for(m=xD(X(t.o,A)),l=0;l<s.c.length;l++)n=s.e[s.c[l]],n!=r&&n!=i&&(h=m+xD(X(t.o,n)),D=w.Math.abs(t.k[A].a-t.k[n].a),D<h&&(Q=w.Math.abs(t.k[A].b-t.k[n].b),Q<h&&(o=w.Math.abs(t.k[A].c-t.k[n].c),o<h&&(f=w.Math.sqrt(D*D+Q*Q+o*o),f<h&&(T=(h-f)/h,g+=T*T)))));return g}function u_(t,e,A,n){var P,r,i,f,D,Q,o,L,s,y,l,h,T;if(L=e[n==0?4:n-1],T=e[n==4?0:n+1],O(t.j,L)==3&&O(t.j,T)==3){for(y=c(F,k,6,t.j.f,15,1),s=c(Pt,ft,6,t.j.g,16,1),r=A,i=0,f=r.length;i<f;++i)D=r[i],s[D]=!0;for(P=0;P<t.j.g;P++)t.e[P]||(s[P]=!0);if(l=L2(t.j,y,L,T,14,null,s),l==14){for(h=!0,o=2;o<=12;o++)if((o&3)!=1^Hr(t.j,y[o])==5){h=!1;break}if(h)for(Af(t,y[7]),Q=1;Q<=5;Q+=2)aD(t,u1(t.j,y[Q],y[Q+1])),aD(t,u1(t.j,y[Q+7],y[Q+8]))}}}function ZR(t,e,A,n){var P,r,i,f,D,Q,o,L,s,y,l,h;for(D=new YA(t.f,t.g),o=new r7,y=0,s=0,i=c(Pt,ft,6,t.f,16,1),r=c(F,k,6,t.f,15,1),h=0;h<A&&s<t.f;h++){if(s==0)r[0]=e,i[e]=!0,s=1;else{for(l=s,Q=y;Q<s;Q++)for(P=r[Q],L=0;L<t.j[P];L++)if(f=t.i[P][L],!i[f])switch(n){case 0:i[f]=!0,r[l++]=f;break;case 1:Pm(t,P)&&Pm(t,f)||(i[f]=!0,r[l++]=f)}y=s,s=l}ii(t,D,i,!0,null),tg(o,me(new SA(D,8)))}return eg(o,c(it,Dt,2,o.a.a.length,6,1))}function WR(t,e){var A,n,P,r;if(!e||e.q==0)return!1;if(e.r!=0)for(n=rn(t.V,24*t.ab),NF(new hu(e),new _2(nB(t.k)),new QA(0,0,CD(t.k),E9(t.k)),u0+vt(n));FK(t,e,.2*n);)CL(e,.5*n,.5*n);if(G1(t),Jd(e),AB(e),P=t.V.K,t.V.q==0)ff(e,t.V),t.a||je(t.V,P),t.eb=w.Math.max(t.eb,4),e1(t.k),q1(t,new S1(t,1,!0));else{for(r=t.V.q,kD(t.V,e),t.a||je(t.V,P),A=0;A<t.V.q;A++)dP(t.V,A,A>=r);t.eb=w.Math.max(t.eb,3),e1(t.k),q1(t,new S1(t,1,!0))}return!0}function _R(t,e,A,n){this.V=t,this.U=e,this._=A,this.k=n,this.S=new f1,this.w=5,this.t=-1,this.u=-1,this.v=null,this.e=-1,this.F=6,this.B=0,this.D=-1,this.C=0,this.A=null,this.b=!0,this.a=!1,this.X=0,this.s=11,this.i=new V0,this.c=331,this.$=1,this.ab=(de==-1&&(de=globalThis.devicePixelRatio||1),de),this.T=vt(w.Math.round((de==-1&&(de=globalThis.devicePixelRatio||1),de*24))),(this.U&6)!=0&&(this.U|=1),(this.U&12)!=0&&(this.I=new eU),this.eb=4}function $R(t){var e,A,n,P,r,i,f,D,Q,o;if(t.e.a.c==1)return t.i;for(Q=Kn(t.i),je(Q,!0),ut(Q,7),P=0;P<Q.g;P++)t.g[P]&&(Q.H[P]=1,Q.T=0,Ge(Q,P,3,!0));for(A=0;A<Q.f;A++)t.b[A]!=0&&e0(t.i,A)<4&&(F5(Q,A),Q.u[A]&=gy,Q.T&=7,Me(Q,A,0,-1));for(f=c(F,k,6,t.j,15,1),D=c(F,k,6,t.j,15,1),n=new FA(Q).f,e=0;e<Q.f;e++)t.b[e]!=0&&(o=t.b[e]-1,D[o]<n[e]&&(D[o]=n[e],f[o]=e));for(r=0;r<t.j;r++)i=\"\"+t.n[r]+\"|\"+t.k[r]+\"|\"+t.o[r],EP(Q,f[r],i);return Q}function Q_(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y;for(i=c(F,k,6,t.j.q,15,1),A=0;A<t.j.q;A++)i[A]=-b1(t.j,A);for(Bf(new c9(t.j),null,!0),n=0;n<t.j.q;n++)i[n]+=b1(t.j,n);for(e=0;e<t.j.q;e++)if(i[e]!=0)for(f=-i[e],P=0;P<t.j.r;P++)for(Q=0;Q<2;Q++)f>0&&l1(t.j,P)==16&&z(t.j,1-Q,P)==e&&(L=z(t.j,Q,P),_0(t.j,L)&&(o=(s=X(t.j,L),y=s<(J1(),v4).length?v4[s]:null,y==null?0:y[y.length-1]),r=b1(t.j,L),r<o&&(D=w.Math.min(f,o-r),E0(t.j,L,r+D),f-=D)))}function aR(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h;if(h=Ub(e,t.I),h==null||(l=Ub(A,t.B),l==null))return null;if(h.length==1&&l.length==1)return new cD(h[0],l[0]);if(y=LX(t,h,l),y.length==1)return new cD(h[0],l[0]);for(o=$x(t.i,y.length),s=-1,r=h,f=0,Q=r.length;f<Q;++f)if(n=r[f],t.J[n]==y[o][0]){s=n;break}for(L=-1,P=l,i=0,D=P.length;i<D;++i)if(n=P[i],t.C[n]==y[o][1]){L=n;break}return t.o=sb(t,t.D,t.J,s,t.o),t.n=sb(t,t.u,t.C,L,t.n),new cD(s,L)}function e9(t,e,A,n,P,r,i,f){var D,Q,o,L;return Q=e.r,Q>=e.N&&eQ(e,e.N*2),L=(t.F[A]&768)>>8,o=-1,L==1&&(n==-1?o=$0(e,L):o=w.Math.min(32,n+((t.F[A]&768)>>8!=1&&(t.F[A]&768)>>8!=2?-1:(t.F[A]&hn)>>10))),L==2&&(P==-1?o=$0(e,L):o=w.Math.min(32,P+((t.F[A]&768)>>8!=1&&(t.F[A]&768)>>8!=2?-1:(t.F[A]&hn)>>10))),e.D[0][Q]=r,e.D[1][Q]=i,D=f&&t.Zb(A)?8:t.H[A],e.H[Q]=D,e.F[Q]=t.F[A],e.G[Q]=e.K?t.G[A]:0,o!=-1&&(e.F[Q]&=-31745,e.F[Q]|=o<<10),++e.r,e.T=0,Q}function ni(t){Pr();var e,A,n,P;if(e=vt(t),t<Xf.length)return Xf[e];if(t<=50)return P2((ke(),So),e);if(t<=1e3)return Ir(P2(y9[1],e),e);if(t>1e6)throw At(new p8(\"power of ten too big\"));if(t<=Et)return Ir(P2(y9[1],e),e);for(n=P2(y9[1],Et),P=n,A=M1(t-Et),e=vt(t%Et);G(A,Et)>0;)P=bP(P,n),A=l0(A,Et);for(P=bP(P,P2(y9[1],e)),P=Ir(P,Et),A=M1(t-Et);G(A,Et)>0;)P=Ir(P,Et),A=l0(A,Et);return P=Ir(P,e),P}function rr(t){var e,A,n,P,r,i;if(t.j!=0)return t.j;if(t.i&&X(t.e,t.a)!=15&&X(t.e,t.a)!=16){for(i=0;i<Ht(t.e,t.a);i++)if(r=xt(t.e,t.a,i),G9(t.e,r,t.a))return _(t.e,t.a,i)==t.b?t.j=l1(t.e,r)==257?3:1:t.j=l1(t.e,r)==257?1:3,t.j}return e=Y0(t.e,t.a,t.g),n=Y0(t.e,t.a,t.b),n<e&&(n+=F0),Ht(t.e,t.a)==2?(A=n-e,A>3.0915926535897933&&A<3.191592653589793?(t.j=-1,t.j):(t.j=A<U1?4:2,t.j)):(P=Y0(t.e,t.a,t.d),P<e&&(P+=F0),t.j=P<n?2:4,t.j)}function o_(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y;for(L=k1(F,[f0,k],[7,6],15,[A,(t.U&6)!=0?2:1],2),D=0;D<A;D++)L[D][0]=D;if(o=_K(t,e,A),(t.U&4)!=0)for(t.Y=0,n=(t.U&4)!=0?N(t.I,0):null,Q=0;Q<A;Q++)L[Q][1]=bQ(n,o[Q].a,o[Q].b)?1:0,L[Q][1]==0&&++t.Y;else if((t.U&2)!=0)for(t.Y=A,P=0;P<t.V.q;P++)X(t.V,P)==0&&L[e[P]][1]==0&&(L[e[P]][1]=1,--t.Y);for(i=o,cu(L,new X7(t,i)),s=c(F,k,6,A,15,1),f=0;f<A;f++)y=L[f][0],s[y]=f;for(r=0;r<t.V.q;r++)e[r]=s[e[r]]}function U_(t){var e,A,n,P,r,i,f,D,Q,o,L,s;if(!t.A){for(t.A=new f1,o=0,L=c(F,k,6,t.R.f,15,1),i=c(F,k,6,t.R.f,15,1),D=c(F,k,6,t.R.g,15,1),e=0;e<t.R.f;e++)if(L[e]==0&&(Vi(t.R,e)||$1(t.R,e)==1)){for(i[0]=e,f=1,Q=0,L[e]=++o,A=c(Pt,ft,6,t.R.g,16,1),r=0;r<f;r++)for(s=0;s<O(t.R,i[r]);s++)P=xt(t.R,i[r],s),(fA(t.R,P)||dt(t.R,P)==2||Pi(t.R,P))&&(n=_(t.R,i[r],s),A[P]||(D[Q++]=P,A[P]=!0),L[n]==0&&(i[f++]=n,L[n]=o));mt(t.A,new Lm(i,f,D,Q))}}}function L_(t,e){D8();var A,n,P,r,i,f,D,Q,o,L;for(A=0;A<e.f;A++)if(e.e[A]>=3&&(o=e.u[A]&3,(o==1||o==2)&&!(e.o[A]==2&&e.j[A]==2&&e.n[A][0]==2&&e.n[A][1]==2&&e.C[A]<=7))){for(n=c(F,k,6,5,15,1),P=c(F,k,6,4,15,1),f=0;f<e.e[A];f++){for(r=e.i[A][f],i=e.k[A][f],D=0;D<f&&r>n[D];)++D;for(Q=f-1;Q>=D;Q--)n[Q+1]=n[Q],P[Q+1]=P[Q];n[D]=r,P[D]=i}e.e[A]==3&&(n[3]=-1,P[3]=-1),n[4]=A,o==1&&(L=n[1],n[1]=n[0],n[0]=L,L=P[1],P[1]=P[0],P[0]=L),mt(t,new tB(e,n,P))}}function s_(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T;for(l=0;l<e.j.a.length;l++)if(N(e.k,l).length!=6&&t.i[l]){for(L=!0,T=N(e.k,l),o=0;o<T.length;o++)if(!t.e[T[o]]){L=!1;break}if(L){for(f=-1,D=0,h=N(e.j,l),Q=0;Q<h.length;Q++)n=h[Q],y=t.g[n]?rj(t,n,!1):Ek(t,n,!1),D<y&&(D=y,f=Q);if(f!=-1){if(s=h[f],A){for(P=h,r=0,i=P.length;r<i;++r)n=P[r],n!=s&&Lf(t,n,!0);t.g[s]?rj(t,s,!0):Ek(t,s,!0)}return Af(t,s),t.g[s]&&u_(t,h,T,f),!0}}}return!1}function tj(t,e,A,n){var P,r,i,f,D;if(e[A+1]!=40)throw At(new C1(\"SmilesParser: '$' for recursive SMARTS must be followed by '('. position:\"+A));for(f=1,r=A+2;r<e.length&&f>0;)e[r]==40?++f:e[r]==41&&--f,++r;if(f>0)throw At(new C1(\"SmilesParser: Missing closing ')' for recursive SMARTS. '('-position:\"+(A+1)));if(i=new YA(16,16),D=new LQ(t.k),xS(D,t.n.f),f6(D,i,e,A+2,r-1,!0,!0),je(i,!0),n.a.push(i),e[A-1]==33)for(P=0;P<i.q;P++)h1(i,P,a0,!0);return r-A}function q5(t){var e,A;for(this.j=t.j,this.i=t.i,this.e=c(F,k,6,t.e.length,15,1),this.k=c(F,k,6,t.e.length,15,1),this.a=c(Ut,Tt,6,t.e.length,15,1),this.b=c(Ut,Tt,6,t.e.length,15,1),A=0;A<t.e.length;A++)this.e[A]=t.e[A],this.k[A]=t.k[A],this.a[A]=t.a[A],this.b[A]=t.b[A];if(t.f!=null)for(this.f=c(F,k,6,t.f.length,15,1),e=0;e<t.f.length;e++)this.f[e]=t.f[e];if(t.g!=null)for(this.g=c(F,k,6,t.g.length,15,1),e=0;e<t.g.length;e++)this.g[e]=t.g[e]}function cA(t,e){var A,n,P,r,i,f;if(e.a==e.b&&e.c==e.d){for(i=new Zt(t.$);i.a<i.c.a.length;)if(r=$t(i),N9(r,e.a,e.c))return!1;return!0}for(f=lk(e),A=!1,e.a>e.b&&(Eu(e),A=!0),n=0;n<t.$.a.length;n++)if(r=N(t.$,n),!(r.c>f.c+f.b||r.d>f.d+f.a||f.c>r.c+r.b||f.d>r.d+r.a)){if(zD(t,e.a,e.c,n))return zD(t,e.b,e.d,n)?(A&&Eu(e),!1):(qs(t,e,0,n),P=cA(t,e),A&&Eu(e),P);if(zD(t,e.b,e.d,n))return qs(t,e,1,n),P=cA(t,e),A&&Eu(e),P}return A&&Eu(e),!0}function y_(t,e){var A,n,P,r,i,f,D;if(t.C[e]!=8||t.s[e]!=0||t.j[e]!=1||t.n[e][0]!=1)return!1;if(A=t.i[e][0],t.C[A]==6){for(i=t.j[A],n=0;n<i;n++)if(P=t.i[A][n],P!=e&&t.C[P]==8&&(r=u1(t,A,P),t.H[r]==2))return!0}else if(t.C[A]==7){if(t.s[A]==1)return!0}else if(t.C[A]==16){for(f=t.j[A],D=0,n=0;n<f;n++)P=t.i[A][n],P!=e&&t.C[P]==8&&(r=u1(t,A,P),t.H[r]==2&&++D);if(D==2)return!0}else if(PX(t,e))return!0;return!1}function l_(t,e,A){var n,P,r,i,f,D,Q,o;if(t.o[e]=A,t.n=null,P=d9(t.c,e),W7(t.s,P,t.o[e]),D=8+(t.a?0:1),ln(t.s,5,D)==0)return t.g[e]=new f1,t.q=0,!1;for(t.g[e]=t.s.F,i=t.g[e].a.length-1;i>=0;i--)for(Q=N(t.g[e],i),f=0;f<Q.length;f++)if(Q[f]!=-1&&(n=0,t.a&&P.s[f]==0&&b1(t.o[e],Q[f])!=0&&(o=Cn(t.o[e],Q[f]),n=Bu(t.o[e],Q[f],o)),t.k[e][f]>0&&t.k[e][f]>Yi(t.o[e],Q[f])-n)){LA(t.g[e],i);break}for(t.q=1,r=0;r<t.o.length;r++)t.q*=t.g[r]?t.g[r].a.length:0;return!0}function h_(t){t=t||{};var e=0;if(t.maxAVBL){if(!Number.isInteger(t.maxAVBL)||t.maxAVBL<0||t.maxAVBL>c1)throw new Error(\"maxAVBL must be an integer between 0 and 65535\");e|=t.maxAVBL}return(t.inflateToMaxAVBL===!0||t.inflateToMaxAVBL===void 0&&t.inflateToHighResAVBL!==!0)&&(e|=u0),t.inflateToHighResAVBL&&(e|=I0),t.chiralTextBelowMolecule!==!1&&(e|=0),t.chiralTextAboveMolecule&&(e|=T8),t.chiralTextOnFrameTop&&(e|=h8),t.chiralTextOnFrameBottom&&(e|=F1),e}function T_(t,e,A,n){var P,r,i,f,D,Q,o,L;for(L=c(F,k,6,t.g,15,1),D=c(Pt,ft,6,t.g,16,1),i=0;i<t.g;i++)L[i]=t.H[i],e[i]&&(D[i]=!0,t.H[i]=1,t.T=0);for(P=0;P<t.f;P++)if(P!=n&&t.o[P]==0&&D[t.k[n][0]])for(o=0;o<t.j[P];o++)f=t.k[P][o],t.H[f]=1,t.T=0,D[f]=!1;for(Q=0;Q<t.j[A];Q++)f=t.k[A][Q],t.H[f]=1,t.T=0,D[f]=!1;if(Bf(new c9(t),D,!1))return t.s[A]=0,t.T=0,t.j[n]!=t.e[n]&&wQ(t,_(t,n,t.e[n]-1)),ut(t,7),!0;for(r=0;r<t.g;r++)w0(t,r,L[r]);return!1}function df(t,e,A){var n,P,r,i,f;if(t.a=!1,t.d=e,Xn(t.e[e]&c1)){for(f=OL(t),t.c=t.b=f,n=e-1;n>1&&dN(t.e[n-1]);)--n;for(;t.e[t.d]==44;){for(i=!0,r=e-n,P=0;P<r;P++)if(t.e[n+P]!==t.e[t.d+1+P]){i=!1;break}if(!i)break;t.d+=1+r,f=OL(t),t.c>f?t.c=f:t.b<f&&(t.b=f)}return t.d-e}return t.e[e]==123&&Xn(t.e[e+1]&c1)?(++t.d,t.c=OL(t),t.e[t.d++]!=45||!Xn(t.e[t.d]&c1)||(t.b=OL(t),t.e[t.d++]!=125)?0:t.d-e):(t.c=1,t.b=A,t.a=!0,0)}function ej(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y;if(dt(t,A)!=2&&!(A<t.g&&Re(t.p,A))||(y=t.F[A]&3,y!=1&&y!=2))return-1;for(D=0;D<2;D++){for(n=t.D[D][A],P=t.D[1-D][A],s=-1,i=!1,o=0;o<t.j[n];o++)r=t.i[n][o],r!=P&&(r==e?i=!0:s=r);if(i){for(L=-1,f=-1,Q=0;Q<t.j[P];Q++)r=t.i[P][Q],r!=n&&(L==-1?L=r:r>L?f=r:(f=L,L=r));return t.j[n]==2?t.j[P]==2?y==2?L:-1:y==2?L:f:t.j[P]==2?y==2^e<s?-1:L:y==2^e<s?f:L}}return-1}function I5(t,e){var A,n,P,r,i,f,D,Q,o,L;if(e.e==0)throw At(new p8(mV));return P=e.e,e.d==1&&e.a[0]==1?e.e>0||t.e==0?t:new oe(-t.e,t.d,t.a):(o=t.e,Q=t.d,n=e.d,Q+n==2?(L=Hn(V(t.a[0],T1),V(e.a[0],T1)),o!=P&&(L=p0(L)),G(L,0)>=0?we(L):FP(we(p0(L)))):(A=Q!=n?Q>n?1:-1:rQ(t.a,e.a,Q),A==0?o==P?q2:Dc:A==-1?yr:(i=Q-n+1,r=c(F,k,6,i,15,1),f=o==P?1:-1,n==1?ER(r,t.a,Q,e.a[0]):Oj(r,i,t.a,Q,e.a,n),D=new oe(f,i,r),Rn(D),D)))}function Aj(t){var e,A,n,P,r;for(t.a=k1(F,[f0,k],[7,6],15,[t.d.length,4],2),t.c=k1(F,[f0,k],[7,6],15,[t.d.length,2],2),t.e=c(F,k,6,t.d.length,15,1),e=c(F,k,6,2,15,1),P=0;P<t.d.length;P++){for(r=0;r<2;r++)e[0]=z(t.b,1-r,t.d[P]),e[1]=z(t.b,r,t.d[P]),XU(t.b,e[1])&&c5(t.b,e[0],e,null),t.a[P][1+r]=e[1],t.c[P][r]=e[0];A=UR(t,t.a[P][1],t.c[P][0]),n=UR(t,t.a[P][2],t.c[P][1]),t.e[P]=NV[A][n],t.a[P][0]=Xb(t,t.a[P][1],t.c[P][0],A),t.a[P][3]=Xb(t,t.a[P][2],t.c[P][1],n)}}function c_(t){var e,A,n,P,r,i;for(YW(t),ut(t,31),n=0;n<t.f;n++){if(((t.u[n]&F1)>>18==1||(t.u[n]&F1)>>18==2)&&((t.u[n]&Tn)==0||(t.u[n]&3)==3))throw At(new C1(V6));if((t.u[n]&u0)!=0)throw At(new C1(E6));if(((t.u[n]&3)==1||(t.u[n]&3)==2)&&t.o[n]==0){for(e=c(Ut,Tt,6,t.j[n],15,1),r=0;r<t.j[n];r++)e[r]=Y0(t,n,t.i[n][r]);for(P=1;P<t.j[n];P++)if(!G9(t,t.k[n][P],n)){for(i=0;i<P;i++)if(!G9(t,t.k[n][i],n)&&(A=w.Math.abs(Je(e[P],e[i])),A<.08||A>Mp))throw At(new C1(S6))}}}}function w_(t,e,A){var n,P,r,i,f,D,Q,o,L,s;for(n=c(F,k,6,t.f,15,1),L=c(Pt,ft,6,t.f,16,1),L[A]=!0,L[e]=!0,n[0]=e,i=0,f=1;i<=f;){for(Q=0;Q<t.j[n[i]];Q++)_e(t,t.k[n[i]][Q])&&(r=t.i[n[i]][Q],L[r]||(n[++f]=r,L[r]=!0));++i}for(o=0;o<=f;o++)for(s=0;s<t.j[n[o]];s++)r=t.i[n[o]][s],!L[r]&&!fA(t,t.k[n[o]][s])&&SQ(t,n[o],r,L,null,null);for(L[A]=!1,D=0;D<=f;D++)L[n[D]]=!1;for(P=0;P<L.length;P++)L[P]&&(n[++f]=P);return r8(f+1),RP(n,c(F,k,6,f+1,15,1),0,f+1)}function Is(){Is=d1,jE=B(d(F,1),k,6,15,[P1,1162261467,wn,1220703125,362797056,1977326743,wn,387420489,xf,214358881,429981696,815730721,1475789056,170859375,o9,410338673,612220032,893871739,128e7,1801088541,113379904,148035889,191102976,244140625,308915776,387420489,481890304,594823321,729e6,887503681,wn,1291467969,1544804416,1838265625,60466176]),pE=B(d(F,1),k,6,15,[-1,-1,31,19,15,13,11,11,10,9,9,8,8,8,8,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5])}function g_(t,e){var A,n,P,r,i;if(t.i!=0&&t.k!=null){for(n=p5(t)/t.p.c,ae(e,t.i),AL(e,vt(1.6*n),!0,!1),r=0;r<t.k.length;r++)if(t.k[r].q!=0){for(P=new S7,A=0;A<t.k[r].q;A++)P.a=vt(P.a+kt(t.k[r],A)),P.b=vt(P.b+pt(t.k[r],A));P.a=P.a/t.k[r].q|0,P.b=P.b/t.k[r].q|0,P.a=vt(X1(t.e[r].R,P.a)),P.b=vt(K1(t.e[r].R,P.b)),i=t.c==0?\"\"+(r+1):t.c==2?r<t.j?\"\"+String.fromCharCode(65+r&c1):\"R\"+(r+1-t.j):t.c==1?r<t.n?\"\"+String.fromCharCode(65+r&c1):\"P\"+(r+1-t.n):\"?\"+(r+1),bh(e,P.a,P.b,i)}}}function d_(t){var e,A,n,P,r,i,f,D,Q,o;for(r=0,A=0;A<t.R.f;A++)t.bb[A]!=0&&(t.bb[A]!=2||(t.Q&256)==0)&&++r;if(r!=0){for(o=c(F,k,6,r,15,1),r=0,n=0;n<t.R.f;n++)t.bb[n]!=0&&(t.bb[n]!=2||(t.Q&256)==0)&&(o[r]=t.bb[n]<<29|t.ab[n]<<24|t.f[n]<<12|n,++r);for(o.sort(Fe(D0.prototype.hd,D0,[])),i=0,Q=0,f=o[0]&qn;;)if(++Q,Q==o.length||f!=(o[Q]&qn)){for(P=c(F,k,6,Q-i,15,1),D=i;D<Q;D++)e=o[D]&4095,P[D-i]=e,t.gb[e]=!0;if(mt(t.hb,P),Q==o.length)break;f=o[Q]&qn,i=Q}}}function nj(t){var e,A,n,P;if(t.length==0||(Gt(0,t.length),t.charCodeAt(0)!=62))return null;for(n=1,P=0,e=0;n<t.length;){if(Gt(n,t.length),t.charCodeAt(n)==60){if(P!=0)return null;P=n}else if(Gt(n,t.length),t.charCodeAt(n)==62){if(e!=0)return null;e=n}++n}if(P!=0&&P<e)return Ct(P+1,e,t.length),t.substr(P+1,e-(P+1));if(n=t.indexOf(\"DT\",1),n==-1)return null;for(A=n+2;t.length>A&&Xn((Gt(A,t.length),t.charCodeAt(A)));)++A;return A==n+2?null:(Ct(n,A,t.length),t.substr(n,A-n))}function B_(t,e,A,n,P,r,i,f,D,Q){var o,L,s,y,l,h,T,g,m,v;t!=e&&(o=Or(t,e),!(D[o[0]][o[1]]&&D[o[0]][o[1]].a.length==1)&&(s=f.a[i]-f.a[A]*w.Math.cos(P)-f.a[n]*w.Math.cos(r),m=f.a[A]*w.Math.sin(P),v=f.a[n]*w.Math.sin(r),y=m+v,l=m-v,T=w.Math.sqrt(s*s+l*l),h=w.Math.sqrt(s*s+y*y),g=c(F,k,6,2,15,1),g[0]=Q.D[0][i],g[1]=Q.D[1][i],L=D[o[0]][o[1]],L?(L.a[0]=w.Math.min(L.a[0],T),L.a[1]=w.Math.min(L.a[1],h)):D[o[0]][o[1]]=new _L(o,g,T,h,3)))}function v_(t,e,A,n,P){if(e[A-1]==42)t.d=6,t.c=Y(t.c,1);else if(e[A-1]==63)t.d=0;else if((e[A-1]==65||e[A-1]==97)&&P)t.d=6,t.c=Y(t.c,1),t.c=Y(t.c,e[A-1]==65?4:2),t.r=!0;else switch(String.fromCharCode(e[A-1]).toUpperCase().charCodeAt(0)){case 66:A<n&&e[A]==114?(t.d=35,++A):t.d=5;break;case 67:A<n&&e[A]==108?(t.d=17,++A):t.d=6;break;case 70:t.d=9;break;case 73:t.d=53;break;case 78:t.d=7;break;case 79:t.d=8;break;case 80:t.d=15;break;case 83:t.d=16}return A}function F_(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T;for(n=c(Ut,Tt,6,2,15,1),y=zY(t,A),D=0;D<2;D++)if(A[3*D]!=-1){for(r=2-D,l=3-3*D,Q=0,s=0;s<3;s++)i=t.i[A[r]][s],i!=y[1-D]&&t.C[i]!=1&&(A[l]=i,e?n[Q++]=IQ(e,A):n[Q++]=qQ(t,A));return A[l]=-1,fT(n)}for(P=c(Ut,Tt,6,2,15,1),o=0,f=0;f<3;f++)if(h=t.i[A[1]][f],h!=y[0]&&t.C[h]!=1){for(A[0]=h,L=0,s=0;s<3;s++)T=t.i[A[2]][s],T!=y[1]&&t.C[T]!=1&&(A[3]=T,e?P[L++]=IQ(e,A):P[L++]=qQ(t,A));n[o++]=fT(P)}return A[0]=-1,A[3]=-1,fT(n)}function Pj(t,e){vv();var A,n,P,r,i,f,D,Q,o,L,s,y;for(this.e=e,this.a=c(F,k,6,e.length+t.length,15,1),this.b=c(F,k,6,e.length+t.length,15,1),this.d=c(F,k,6,e.length+t.length,15,1),A=0,r=0,P=0,f=e,D=0,Q=f.length;D<Q;++D)i=f[D],n=SB(i.d.length),A+n<=64?(this.b[P]=A,A+=n):(++r,this.b[P]=0,A=0),this.a[P]=n,this.d[P]=r,++P;for(L=t,s=0,y=L.length;s<y;++s)o=L[s],n=SB(o.b.length),A+n<=64?(this.b[P]=A,A+=n):(++r,this.b[P]=0,A=0),this.a[P]=n,this.d[P]=r,++P;this.c=r+1}function m_(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l;for(Q=c(F,k,6,t.k.f,15,1),f=c(F,k,6,t.k.f,15,1),D=c(F,k,6,t.k.f,15,1),o=c(F,k,6,t.k.f,15,1),A=z(t.k,0,e),n=z(t.k,1,e),f[0]=A,f[1]=n,D[0]=-1,D[1]=e,Q[A]=1,Q[n]=2,o[A]=-1,o[n]=A,i=1,L=1;i<=L&&Q[f[i]]<15;){for(l=f[i],s=0;s<O(t.k,l);s++)if(P=_(t.k,l,s),P!=o[l]){if(r=xt(t.k,l,s),P==A){for(D[0]=r,y=0;y<=L;y++)t.g[D[s]]||(t.g[D[s]]=!0,++t.c);return}z0(t.k,P)&&Q[P]==0&&(++L,f[L]=P,D[L]=r,Q[P]=Q[l]+1,o[P]=l)}++i}}function xs(t,e){var A,n,P,r,i,f,D,Q,o,L;if(i=t.e,D=e.e,D==0)return t;if(i==0)return e.e==0?e:new oe(-e.e,e.d,e.a);if(r=t.d,f=e.d,r+f==2)return A=V(t.a[0],T1),n=V(e.a[0],T1),i<0&&(A=p0(A)),D<0&&(n=p0(n)),ke(),lu(l0(A,n),0)?we(l0(A,n)):FP(we(p0(l0(A,n))));if(P=r!=f?r>f?1:-1:rQ(t.a,e.a,r),P==-1)L=-D,o=i==D?vL(e.a,f,t.a,r):mL(e.a,f,t.a,r);else if(L=i,i==D){if(P==0)return ke(),yr;o=vL(t.a,r,e.a,f)}else o=mL(t.a,r,e.a,f);return Q=new oe(L,o.length,o),Rn(Q),Q}function k_(){var t,e,A,n,P,r,i;if(!C4)try{for(t=e2(\"bondLengthData.txt\"),A=Y1(t),e=A==null?0:Q1(A,P1,Et),Bo=c(F,k,6,e,15,1),j4=c(Ee,PA,6,e,15,1),p4=c(Ee,PA,6,e,15,1),xV=c(F,k,6,e,15,1),P=0;P<e;P++)if(i=Y1(t),i!=null&&(r=L8(i,\"\\\\t\"),r.length==4))try{Bo[P]=Q1(r[0],P1,Et),j4[P]=on(r[1]),p4[P]=on(r[2]),xV[P]=Q1(r[3],P1,Et)}catch(f){if(f=a1(f),Xt(f,40))break;throw At(f)}C4=!0}catch(f){if(f=a1(f),Xt(f,75))n=f,Zr(n,(z1(),Ti),\"\");else throw At(f)}}function b_(t,e){var A,n;return n={},A=t.G[e],n.single=E1(V(A,1),0),n.double=E1(V(A,2),0),n.triple=E1(V(A,4),0),n.delocalized=E1(V(A,8),0),n.metalLigand=E1(V(A,16),0),n.quadruple=E1(V(A,32),0),n.quintuple=E1(V(A,64),0),n.notRing=E1(V(A,128),0),n.ring=E1(V(A,256),0),n.aromatic=E1(V(A,IA),0),n.nonAromatic=E1(V(A,iP),0),n.ringSize=Jt(V(A,qP))>>17,n.brigdeMin=Jt(V(A,7680))>>9,n.brigdeSpan=Jt(V(A,cy))>>13,n}function rj(t,e,A){if(t.f[e])return 0;if(X(t.j,e)==7){if(Ht(t.j,e)==3)return 6;if(O(t.j,e)==2)return t.a?0:4}else{if(X(t.j,e)==8)return 10;if(X(t.j,e)==15||X(t.j,e)==33){if(O(t.j,e)==3)return 8}else if(X(t.j,e)==16||X(t.j,e)==34||X(t.j,e)==52){if(O(t.j,e)==2)return 11;if(O(t.j,e)==3)return b1(t.j,e)==1?12:(A&&E0(t.j,e,1),5)}else if(X(t.j,e)==6)return b1(t.j,e)==-1?Ht(t.j,e)==3?16:De(t.j,e)==3?15:14:(A&&E0(t.j,e,-1),Ht(t.j,e)!=De(t.j,e)?2:3)}return 0}function R_(t){var e,A,n,P,r,i,f;for(f=!1,A=0;A<t.f;A++)((t.u[A]&Tn)==0||(t.u[A]&3)==3)&&(t.u[A]&=dy);for(r=0;r<t.g;r++)(dt(t,r)!=1||(t.F[r]&3)==0||(t.F[r]&3)==3)&&(t.F[r]&=-32513);if(t.L){if((t.I&IP)!=I0){for(i=c(Pt,ft,6,t.f,16,1),n=0;n<t.f;n++)(t.u[n]&Tn)!=0&&(t.u[n]&3)!=3&&(t.u[n]&F1)>>18==1&&(i[n]=!0);for(P=0;P<t.f;P++)(t.u[P]&Tn)!=0&&(t.u[P]&3)!=3&&(Me(t,P,1,0),f=!0);for(e=0;e<t.f;e++)i[e]&&(ce(t,e,1,!1),Me(t,e,1,-1),f=!0)}t.L=!1}return $0(t,1),$0(t,2),f}function j_(t){var e,A,n;if(t.a==0)return!0;if(t.d.length==1&&t.c.length==1)return(t.e.i==null||t.e.i[t.d[0]]==null||!t.e.i[t.d[0]][t.c[0]])&&(++t.e.b,t.e.f[t.d[0]]=t.e.b,t.e.d[t.c[0]]=t.e.b),!0;if(Sk(t.d,t.e.e)||Sk(t.c,t.e.c)){for(e=w.Math.min(t.d.length,t.c.length),n=0;e!=0&&n<t.d.length;n++)for(A=0;A<t.c.length;A++)if(t.e.d[t.c[A]]==0&&(t.e.i==null||t.e.i[t.d[n]]==null||!t.e.i[t.d[n]][t.c[A]])){--e,++t.e.b,t.e.f[t.d[n]]=t.e.b,t.e.d[t.c[A]]=t.e.b;break}return!0}return!1}function ij(t,e,A,n,P,r,i){wR();var f,D;this.a=e,this.p=c(F,k,6,4,15,1),this.k=c(F,k,6,2,15,1),f=new mT,SF(t,e,this.p,f)!=null?(this.k[0]=f.e[0],this.k[1]=f.e[1]):f_(this,t),this.i=A[this.p[1]],this.j=A[this.p[2]],this.f=r[this.i],this.g=r[this.j],this.b=A[t.D[0][e]]==this.i,i?(this.d=YE,this.c=JE,this.e=zE):(this.d=Ex(f.d),this.d==null?(D=new r6(t,this.p),this.d=D.b,this.c=D.a,this.e=D.c):(this.c=Mx(f.d),this.e=Vx(f.d))),O_(this,t),bW(this,t),zW(this,t,n,P)}function p_(t,e,A,n){var P,r,i,f,D,Q,o,L,s,y,l;for(D=n+1;D<t.j.g.length;D++)if(D!=n&&t.e[e][D]&&t.e[A][D])return i=c(F,k,6,2,15,1),i[0]=A,i[1]=e,i;for(l=c(F,k,6,t.b,15,1),o=c(F,k,6,t.b,15,1),Q=c(F,k,6,t.b,15,1),r=0,L=0,Q[0]=e,o[e]=1;r<=L;){for(s=0;s<t.d[Q[r]].length;s++){if(P=t.d[Q[r]][s],P==A){if(r==0)continue;for(f=o[Q[r]]+1,i=c(F,k,6,f,15,1),i[0]=P,i[1]=Q[r],y=2;y<f;y++)i[y]=l[i[y-1]];return i}o[P]==0&&t.c[P]!=-3&&(o[P]=o[Q[r]]+1,Q[++L]=P,l[P]=Q[r])}++r}return null}function C_(t){var e,A,n,P;if(t.g.a.length+t.f.a.length<=1)return!1;for(e=ob(t),P=c(cl,A0,35,t.g.a.length+t.f.a.length,0,1),A=0;A<t.g.a.length+t.f.a.length;A++)if(P[A]=Gb(A<t.g.a.length?N(t.g,A):N(t.f,A-t.g.a.length),null),P[A]){for(n=0;n<A;n++)if(P[n]&&(P[A].c+P[A].b>=P[n].c&&P[A].c<=P[n].c+P[n].b||P[A].d+P[A].a>=P[n].d&&P[A].d<=P[n].d+P[n].a))return!0;if(A!=0&&P[A-1]&&(P[A].c-P[A-1].c-P[A].b>5*e||P[A].d-P[A-1].d-P[A].a>5*e))return!0}return!1}function Me(t,e,A,n){var P,r,i;if(A==0)t.u[e]&=dy,t.u[e]|=A<<18;else{if(n>=32)return;if(n==-1){for(i=-1,r=0;r<t.q;r++)r!=e&&A==(t.u[r]&F1)>>18&&i<((t.u[r]&F1)>>18!=1&&(t.u[r]&F1)>>18!=2?-1:(t.u[r]&jA)>>20)&&(i=(t.u[r]&F1)>>18!=1&&(t.u[r]&F1)>>18!=2?-1:(t.u[r]&jA)>>20);for(P=0;P<t.r;P++)A==(t.F[P]&768)>>8&&i<((t.F[P]&768)>>8!=1&&(t.F[P]&768)>>8!=2?-1:(t.F[P]&hn)>>10)&&(i=(t.F[P]&768)>>8!=1&&(t.F[P]&768)>>8!=2?-1:(t.F[P]&hn)>>10);if(n=i+1,n>=32)return}t.u[e]&=dy,t.u[e]|=A<<18|n<<20}t.T&=7}function U8(t,e,A,n){var P,r,i;if(A==0)t.F[e]&=-32513,t.F[e]|=A<<8;else{if(n>=32)return;if(n==-1){for(i=-1,r=0;r<t.q;r++)A==(t.u[r]&F1)>>18&&i<((t.u[r]&F1)>>18!=1&&(t.u[r]&F1)>>18!=2?-1:(t.u[r]&jA)>>20)&&(i=(t.u[r]&F1)>>18!=1&&(t.u[r]&F1)>>18!=2?-1:(t.u[r]&jA)>>20);for(P=0;P<t.r;P++)P!=e&&A==(t.F[P]&768)>>8&&i<((t.F[P]&768)>>8!=1&&(t.F[P]&768)>>8!=2?-1:(t.F[P]&hn)>>10)&&(i=(t.F[P]&768)>>8!=1&&(t.F[P]&768)>>8!=2?-1:(t.F[P]&hn)>>10);if(n=i+1,n>=32)return}t.F[e]&=-32513,t.F[e]|=A<<8|n<<10}t.T&=7}function H_(t,e){var A,n,P,r,i,f,D;if(r=e.a,!((t.d>0?t.d:w.Math.floor((t.a-1)*To)+1)-r<0||r==0)&&(n=hb(t)-r,!(n<=0))){if(t.a<54){BW(t,e,n);return}f=ni(n),P=mR((!t.c&&(t.c=kP(M1(t.f))),t.c),f),i=t.e-n,P[1].e!=0&&(A=rs(hm(P[1].e<0?P[1].e==0?P[1]:new oe(-P[1].e,P[1].d,P[1].a):P[1]),f),A=EQ(RQ(P[0],0)?1:0,P[1].e*(5+A),e.b),A!=0&&(P[0]=s2(P[0],(ke(),G(A,0)>=0?we(A):FP(we(p0(A)))))),D=new _7(P[0]),hb(D)>r&&(P[0]=I5(P[0],(ke(),So)),--i)),t.e=gm(i),t.d=r,LT(t,P[0])}}function fj(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g;for(T=c(Ur,U9,26,A,0,1),i=c(F,k,6,A,15,1),Q=c(F,k,6,A,15,1),r=c(F,k,6,t.q,15,1),P=0;P<t.q;P++)e[P]!=-1&&(r[P]=i[e[P]]++);for(D=0;D<t.r;D++)l=e[t.D[0][D]],h=e[t.D[1][D]],l==h&&l!=-1&&++Q[l];for(g=0;g<A;g++)T[g]=new YA(i[g],Q[g]),kU(t,T[g]);for(n=0;n<t.q;n++)e[n]!=-1&&En(t,T[e[n]],n,0,0);for(f=0;f<t.r;f++)l=e[t.D[0][f]],h=e[t.D[1][f]],l==h&&l!=-1&&iQ(t,T[l],f,0,0,r,!1);for(L=T,s=0,y=L.length;s<y;++s)o=L[s],$0(o,1),$0(o,2);return T}function M_(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l;for(A=z(t.f,0,e),n=z(t.f,1,e),i=c(F,k,6,t.f.q,15,1),f=c(F,k,6,t.f.q,15,1),D=c(F,k,6,t.f.q,15,1),Q=c(F,k,6,t.f.q,15,1),i[0]=A,i[1]=n,f[1]=e,D[A]=1,D[n]=2,Q[0]=-1,Q[1]=0,r=1,o=1;r<=o;){for(L=0;L<O(t.f,i[r]);L++){if(P=_(t.f,i[r],L),r>1&&P==A){for(l=new jh(D[i[r]]),f[0]=xt(t.f,i[r],L),s=r,y=0;y<l.a.length;y++)l.a[y]=i[s],l.b[y]=f[s],s=Q[s];return l}D[P]==0&&Vi(t.f,P)&&(i[++o]=P,f[o]=xt(t.f,i[r],L),D[P]=D[i[r]]+1,Q[o]=r)}++r}return null}function V_(t,e){var A,n,P,r,i,f,D,Q,o,L,s;for(A=0;A<t.k.f;A++)if(z0(t.k,A))for(D=c(F,k,6,t.k.f,15,1),f=c(F,k,6,t.k.f,15,1),Q=c(F,k,6,t.k.f,15,1),f[0]=A,D[A]=1,Q[A]=-1,i=0,o=0;i<=o;){for(P=(D[f[i]]&1)==1?1:2,L=0;L<O(t.k,f[i]);L++)if(n=xt(t.k,f[i],L),dt(t.k,n)==P&&e[n]&&(r=_(t.k,f[i],L),D[r]==0)){if(P==1&&z0(t.k,r)){for(s=f[i];s!=-1;)w0(t.k,u1(t.k,r,s),P==1?2:1),P=3-P,r=s,s=Q[s];return Jn(t.k,A,!1),Jn(t.k,r,!1),t.b-=2,!0}f[++o]=r,Q[r]=f[i],D[r]=D[f[i]]+1}++i}return!1}function Dj(t,e,A,n,P,r){var i,f,D,Q,o,L;for(t.j=e,t.d=A,t.n=c(F,k,6,n.length,15,1),t.f=c(F,k,6,P.length,15,1),t.k=as(t.j,!1),t.p=as(t.j,!0),t.e=as(t.d,!1),t.i=as(t.d,!0),t.o=_k(t.j),t.g=_k(t.d),t.q=Iy,Q=new lj(e,A,t.n,t.f,r),t.a=0;cK(Q);){for(++t.a,t.c=Q.q,f=Q.r,D=cR(Q);D;)Ca(t,D),D=cR(Q);t.b=t.c,t.c<f?(i=new Uj(t.j,t.d,t.n,t.f,t.c,r),o=Ra(i),t.c+=i.b-i.g):(L=new LU(t.j,t.d),o=Ys(L,$T(L,t.n,t.f))),t.q<o&&(t.q=o,sA(t.n,0,n,0,n.length),sA(t.f,0,P,0,P.length))}return t.q!=Iy}function E_(t,e){var A,n,P,r,i,f,D,Q,o,L;for(r=null,D=null,i=null,ut(t.g,t.N),t.o=c(F,k,6,t.g.f,15,1),n=0;n<t.g.f;n++)t.o[n]=O(t.g,n);if(t.p!=0){for(Q=new YA(t.g.q,t.g.r),L=c(Pt,ft,6,t.g.q,16,1),P=0;P<t.g.q;P++)L[P]=!t.D[P];for(ii(t.g,Q,L,!0,null),ut(Q,t.N),Kj(t,Q,e),r=t.j,D=t.n,i=t.k,o=0,A=0;A<t.g.f;A++)t.D[A]||(t.o[A]=O(Q,o++))}if(Kj(t,t.g,e),t.p!=0){for(o=0,A=0;A<t.g.q;A++)t.D[A]||(t.j[A]=r[o],t.k[A]=i[o++]);for(o=0,f=0;f<t.g.r;f++)!t.D[z(t.g,0,f)]&&!t.D[z(t.g,1,f)]&&(t.n[f]=D[o++])}}function S_(t,e){var A,n,P,r,i,f,D,Q,o;if(A=new fD,!ul)return mt(A.a,new Ze(PV,2)),-999;for(mt(A.a,new Ze(\"Found sub-structure fragments and their contributions:\",2)),mt(A.a,new Ze(\"(yellow atoms carry at least one more substituent)\",2)),Q=0,D=0,r=0,o=new bD(1),P=new zA,i=0;i<yi.a.a.length;i++)i2(new JA(!1),P,v3(yi,i)),un(o,e),yn(o,P),ln(o,1,o.c)>0&&(f=Ag(yi,i),f<-1?Q+=f:(D+=f,++r),_P(A,v3(yi,i),1),mt(A.a,new Ze(\"\"+f,3)));return r==0?-1:(n=Q+D/w.Math.sqrt(r),n=n+.0625*(r-40),t.a=A,n)}function uj(t){J1();var e,A,n,P,r;for(z9.call(this,t),cb(this,x5(this)),r=(ut(this,7),this.p),this.b=c(zV,k,6,r.j.a.length,15,1),Sq(this.b),e=!1,A=!0;!e&&A;)for(e=!0,A=!1,P=0;P<r.j.a.length;P++)this.b[P]==2&&(this.b[P]=q$(this,P),this.b[P]!=2&&(A=!0)),this.b[P]==2&&(e=!1);if(!e)throw At(new e7);for(this.a=c(F,k,6,this.q,15,1),n=0;n<this.a.length;n++)if(this.a[n]=-1,this.a[n]=oO(this,n),this.a[n]==0)throw At(new w7(\"Couldn't assign an atom type to atom \"+n+\" (\"+X0[this.C[n]]+\")\"))}function q_(t,e){var A,n,P,r,i,f,D,Q,o,L,s;for(r=k1(F,[f0,k],[7,6],15,[2,32],2),i=0;i<2;i++){for(A=c(F,f0,7,32,0,2),s=0,P=0;P<32;P++)if(e[i][P]!=null){for(o=e[i][P].length,A[P]=c(F,k,6,o,15,1),f=0;f<o;f++)A[P][f]=t.f[e[i][P][f]];A[P].sort(Fe(D0.prototype.hd,D0,[])),++s}for(L=s;L>0;L--){for(Q=0,D=null,n=0;n<32;n++)if(A[n]!=null){if(D==null||D.length<A[n].length)D=A[n],Q=n;else if(D.length==A[n].length){for(f=D.length-1;f>=0;f--)if(D[f]<A[n][f]){D=A[n],Q=n;break}}}r[i][Q]=L,A[Q]=null}}return r}function I_(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l;for(r=0,A=0;A<t.V.q;A++)P0(t.V,A)&&++r;for(y=t.V.q,l=t.V.r,t.gb=VD(t.gb,t.gb.length+r),t.jb=VD(t.jb,t.jb.length+r),i=c(F,k,6,t.V.q,15,1),D=$0(t.V,1),Q=$0(t.V,2),n=0;n<y;n++)P0(t.V,n)&&(L=t.V.q,t.gb[L]=t.gb[n],t.jb[L]=t.jb[n],i[n]=L,En(t.V,t.V,n,D,Q));for(f=0;f<l;f++)mP(t.V,f)&&iQ(t.V,t.V,f,D,Q,i,!1);for(P=0;P<y;P++)dP(t.V,P,!1);for(e=y;e<t.V.q;e++)We(t.V,e,0,!1);if(t.I)for(o=t.I.a.length-1;o>=0;o--)s=N(t.I,o),s.g&&!Xt(s,62)&&mt(t.I,s.Gb())}function x_(t){var e,A,n,P,r,i,f,D;if(t.g!=null)for(i=new Lp(t),t.b=new f1,P=0;P<t.g.length;P++)n=MO(i,P),n==0?(zb(i,P),f=tk(t,P,2),e=tk(t,P,1),A=Km(t,P),f==1&&e==1&&!A&&(rJ(t,P,i.a+i.f++),mt(t.b,new Ji(P,1,-1,-1))),f>0?(A&&(FT(t,P,i.i+i.g++,2),++f),mt(t.b,new Ji(P,1,-1,-1))):e>0?(A&&FT(t,P,i.a+i.f++,1),mt(t.b,new Ji(P,1,-1,-1))):A&&(FT(t,P,i.a+i.f++,1),mt(t.b,new Ji(P,1,-1,-1)))):n==1&&(Km(t,P)?(r=zG(i,P),D=bG(i,P),mt(t.b,new Ji(P,2,r,D))):(zb(i,P),mt(t.b,new Ji(P,1,-1,-1))))}function xQ(t){ph(),this.d=t,ut(this.d,15),this.j=new f1,this.k=c(Pt,ft,6,(D8(),Fl).length,16,1),this.i=c(F,k,6,Fl.length,15,1),ltt(this.j,t),this.i[0]=this.j.a.length,this.i[1]=-this.j.a.length,Sa(this.j,t),this.i[1]+=this.j.a.length,this.i[2]=-this.j.a.length,fK(this.j,t),this.i[2]+=this.j.a.length,this.i[4]=-this.j.a.length,L_(this.j,t),this.i[4]+=this.j.a.length,this.i[5]=-this.j.a.length,E$(this.j,t),this.i[5]+=this.j.a.length,this.i[3]=-this.j.a.length,Qa(this.j,t),this.i[3]+=this.j.a.length}function N_(t,e,A,n){var P,r,i,f,D,Q,o,L,s,y,l;for(i=c(F,k,6,A.q,15,1),o=c(F,k,6,A.q,15,1),Q=c(Ut,Tt,6,A.q,15,1),o[0]=e,D=0,L=0;D<=L;){for(l=o[D],s=0;s<A.e[l];s++)f=A.i[l][s],i[f]==0&&f!=e&&(o[++L]=f,i[f]=i[l]+1,i[f]==2?Q[f]=f<e?t[e][f].a[0]:t[f][e].a[0]:i[f]>2&&(Q[f]=Q[l]+Br(n,A.k[l][s]),f<e&&!t[e][f]&&(i[f]==3?t[e][f]=new Pg:(y=c(F,k,6,2,15,1),y[0]=o[1],y[1]=l,t[e][f]=new _L(Or(e,f),y,(r=A.C[e],(r<(l2(),xA).length?xA[r]:2)+(P=A.C[f],P<xA.length?xA[P]:2)),Q[f],0)))));++D}}function L8(t,e){var A,n,P,r,i,f,D,Q;for(A=new RegExp(e,\"g\"),D=c(it,Dt,2,0,6,1),n=0,Q=t,r=null;;)if(f=A.exec(Q),f==null||Q==\"\"){D[n]=Q;break}else{if(i=f.index,r==null&&i==0&&f[0].length==0){Q=oA(Q,i+f[0].length,Q.length),A.lastIndex=0,r=Q;continue}D[n]=(Ct(0,i,Q.length),Q.substr(0,i)),Q=oA(Q,i+f[0].length,Q.length),A.lastIndex=0,r==Q&&(D[n]=(Ct(0,1,Q.length),Q.substr(0,1)),Q=(Gt(1,Q.length+1),Q.substr(1))),r=Q,++n}if(t.length>0){for(P=D.length;P>0&&D[P-1]==\"\";)--P;P<D.length&&(D.length=P)}return D}function Ns(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m;for(n=t.e[e],P=c(Ut,Tt,6,n,15,1),y=0;y<n;y++)P[y]=Y0(t,e,t.i[e][y]);for(l=1;l<n;l++)for(h=0;h<l;h++)if(r=w.Math.abs(Je(P[l],P[h])),r<.08||r>Mp){for(i=0,f=0,T=0;T<n;T++)T!=l&&T!=h&&(i+=w.Math.abs(Pv(P[l],P[T])),f+=w.Math.abs(Pv(P[h],P[T])));if(Q=i<f?t.k[e][l]:t.k[e][h],dt(t,Q)==1&&(!A||!(t.H[Q]==257||t.H[Q]==129)))return Q}for(g=-1,D=0,s=0;s<n;s++)o=t.i[e][s],L=t.k[e][s],m=CQ(t,L,o),D<m&&(!A||!(t.H[L]==257||t.H[L]==129))&&(D=m,g=L);return g}function O_(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h;if(dt(e,t.a)==1&&(qe(e,t.a)==1||qe(e,t.a)==2)){for(Q=!1,f=0;f<2;f++)for(n=t.p[3*f],A=t.p[1+f],h=t.p[2-f],o=0;o<e.j[A];o++)if(l=e.i[A][o],l!=h&&l!=n){l<n&&(Q=!Q);break}for(qe(e,t.a)==1&&(Q=!Q),P=0,r=0,D=0;D<t.d.length;D++)t.d[D]<180^Q&&(r+=t.c[D],++P);if(P<t.d.length){for(y=c(zt,_t,6,P,15,1),L=c(zt,_t,6,P,15,1),s=c(zt,ee,16,P,0,2),P=0,i=0;i<t.d.length;i++)t.d[i]<180^Q&&(y[P]=t.d[i],L[P]=(t.c[i]*100/r|0)<<16>>16,s[P]=t.e[i],++P);t.d=y,t.c=L,t.e=s}}}function G_(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l;for(i=c(F,k,6,t.s,15,1),P=0;P<e.f;P++){for(y=e.j[P]+(e.i[P].length-e.e[P]),s=0,D=0;D<e.i[P].length;D++)if(D<e.j[P]||D>=e.e[P]){for(l=2*A[e.i[P][D]],r=e.k[P][D],dt(e,r)==2&&(r<e.g&&Re(e.p,r)||++l),o=0;o<s&&!(l<i[o]);o++);for(L=s;L>o;L--)i[L]=i[L-1];i[o]=l,++s}for($e(t.b[P],P),W1(t.b[P],t.a,A[P]),Q=y;Q<t.s;Q++)W1(t.b[P],t.a+1,0);for(f=0;f<y;f++)W1(t.b[P],t.a+1,i[f])}for(n=e.f;n<t.b.length;n++)for($e(t.b[n],n),W1(t.b[n],t.a,e.f+1),f=0;f<t.s;f++)W1(t.b[n],t.a+1,0)}function Qj(t){var e,A,n,P,r,i,f,D,Q,o;switch(e=null,o=t.c.length,t.e){case 1:for(e=c(zt,_t,6,2*o,15,1),n=0;n<o;n++)e[n]=t.c[n],e[o+n]=t.c[n];return e;case 2:for(P=t.a[0]==0?1:0,r=t.a[o-1]==180?o-1:o,Q=r-P,e=c(zt,_t,6,o+Q,15,1),i=0;i<o;i++)e[i]=t.c[i];for(f=P;f<r;f++)e[e.length-1-f+P]=t.c[f];return e;case 3:for(P=t.a[0]==0?1:0,r=t.a[o-1]==90?o-1:o,Q=r-P,e=c(zt,_t,6,2*o+2*Q,15,1),D=0;D<o;D++)e[D]=t.c[D],e[o+Q+D]=t.c[D];for(A=P;A<r;A++)e[o+Q-1-A+P]=t.c[A],e[e.length-1-A+P]=t.c[A];return e;default:return t.c}}function yn(t,e){var A,n,P,r,i;if(!e||e.q==0||!e.K){t.g=null;return}for(t.g=e,t.r=!1,ut(t.g,1),t.N=7,n=0;n<t.g.f;n++)gt(V(y0(t.g,n),{l:ge,m:0,h:3}),0)&&(t.N=15);for(i=0;i<t.g.g;i++)(Ae(t.g,i)&c8)!=0&&(t.N=15);for(t.L&&t.N!=7&&ut(t.H,t.N),t.p=0,t.q=0,t.D=c(Pt,ft,6,t.g.f,16,1),P=0;P<t.g.f;P++)t.D[P]=Qe(t.g,P),t.D[P]&&++t.p;if(t.d=0,t.f=null,t.i=null,t.p!=0){for(r=0;r<t.g.g;r++)(t.D[z(t.g,0,r)]||t.D[z(t.g,1,r)])&&++t.q;for(A=0;A<t.g.q;A++)Jn(t.g,A,t.D[A]);t.f=c(F,k,6,t.g.q,15,1),t.d=nr(t.g,t.f,!0,!1)}}function oj(t,e){Dg();var A,n,P,r,i,f;r=new Vs(t);try{if(f=new i3,rA(f,DH+v8),Mi(f.a,e??\"\"),rA(f,v8+(\"\"+v8)),rA(f,Sy+C5(t,!0,11)),rA(f,v8),P=r.g.a.length,n=r.f.a.length,rA(f,Ep+P+\" \"+n+v8),i=CX(r),P>0){for(rA(f,oH+v8),A=0;A<r.g.a.length;A++)rA(f,Uv(N(r.g,A),i));rA(f,\"M  V30 END REACTANT\"+v8)}if(n>0){for(rA(f,LH+v8),A=0;A<r.f.a.length;A++)rA(f,Uv(N(r.f,A),i));rA(f,\"M  V30 END PRODUCT\"+v8)}rA(f,Dr+v8),this.a=f.a}catch(D){if(D=a1(D),Xt(D,19))z1();else throw At(D)}}function J_(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l;for(D=null,l=Nn(t.R),L=0;L<l.j.a.length;L++)if(l.f[L]){for(r=0,s=N(l.j,L),A=s,n=0,P=A.length;n<P;++n)e=A[n],ys(t,e)&&++r;if(r!=0)if(y=N(l.k,L),D==null&&(D=c(Pt,ft,6,t.R.g,16,1)),r==s.length){for(Q=-1,o=Et,i=0;i<s.length;i++)o>t.B[y[i]]&&(o=t.B[y[i]],Q=i);for(;r>0;)D[y[Q]]=!0,Q=uU(Q+2,s.length),r-=2}else{for(f=0;ys(t,s[f]);)++f;for(;!ys(t,s[f]);)f=uU(f+1,s.length);for(;r>0;)for(D[y[f]]=!0,f=uU(f+2,s.length),r-=2;!ys(t,s[f]);)f=uU(f+1,s.length)}}return D}function z_(t){var e,A,n,P,r,i,f,D,Q,o,L,s;for(t.b=UA(t.c),r=tE,f=0,Q=r.length;f<Q;++f)n=r[f],Nt(t.b,n);for(s=t.b.Fc(),s.setEditable(!0),eN(t.b,\"\"+vt(t.e.c)),t.a=UA(t.c),P=eE,i=0,D=P.length;i<D;++i)n=P[i],Nt(t.a,n);for(o=0,A=0;A<Tl.length;A++)if(t.e.d==Tl[A]){o=A;break}Wt(t.a,o),e=B(d(F,1),k,6,15,[8,-2,4,-2,8]),L=B(d(F,1),k,6,15,[8,-2,4,-2,8,-2,8]),WU(t.c,e,L),i0(t.c,Ue(t.c,\"Text size:\"),1,1),i0(t.c,t.b,3,1),i0(t.c,Ue(t.c,\"Text style:\"),1,3),i0(t.c,t.a,3,3),t.d=Ju(t.c,20,3),N8(t.d,t.e.e),Te(t.c,t.d,1,5,3,5)}function Y_(t,e){var A,n,P;return n=Rk(t,e),A=_0(t,t.D[0][e])||_0(t,t.D[1][e]),P=A?16:1,t.H[e]==64?(t.H[e]=P,t.T=0,!0):t.H[e]==32?(t.H[e]=n>4?64:P,t.T=0,!0):t.H[e]==4?(t.H[e]=n>3?32:P,t.T=0,!0):t.H[e]==2&&(t.H[e]=386,t.T&=7,(t.F[e]&128)==0)?!0:t.H[e]==386?(n>2?t.H[e]=4:t.H[e]=P,t.T=0,!0):(384&t.H[e])!=0?(t.H[e]=1,t.T&=7,!0):!A&&n<2?!1:t.H[e]==1?(t.H[e]=2,t.T=0,!0):n<1?!1:t.H[e]==16?(t.H[e]=1,t.T=0,!0):!1}function K_(t,e){var A,n;if(e.j==1){if(A=YT(t,e),!(A>=0&&A<34&&(A!=t.b||A==20||A==33)&&(A!=19||(t.a.U&4)!=0)&&(A!=21||(t.a.U&8)!=0)))return;A==20&&A==t.b&&(t.d=++t.d%3),t.k=A,pD(t.n)}else if(e.j==2){if(t.k==-1)return;if(n=YT(t,e),n!=t.k||t.k==19&&(t.a.U&4)==0||t.k==21&&(t.a.U&8)==0){t.k=-1,pD(t.n);return}if(t.k=-1,n==0||n==1||n==17){pD(t.n),BK(t.a,n);return}t.b=n,pD(t.n),t.b==20?au(t.a,t.d==0?101:t.d==1?103:102):t.b==33?tm(t.a,-1,new Z7(t,n)):au(t.a,n)}else(e.j==6||e.j==5)&&(A=YT(t,e),A==t.k&&(A=-1),A!=t.f&&(t.f=A,pD(t.n)))}function Pi(t,e){var A,n,P,r,i,f;return t.H[e]!=1||e<t.g&&Re(t.p,e)||(t.F[e]&64)!=0&&(t.p&&e<t.g?yP(t.p,e):0)<7||(A=t.D[0][e],!(A<t.f&&r0(t.p,A))||(t.p&&A<t.f?iA(t.p,A):0)<5)||(n=t.D[1][e],!(n<t.f&&r0(t.p,n))||(t.p&&n<t.f?iA(t.p,n):0)<5)?!1:(P=yF(t,A,n),r=yF(t,n,A),(t.p&&A<t.f?iA(t.p,A):0)>5&&(t.p&&n<t.f?iA(t.p,n):0)>5?P+r>2:(i=Ik(t,A,n),f=Ik(t,n,A),P==2&&f>=1||r==2&&i>=1||i==2&&(r>=1||f>=1)||f==2&&(P>=1||i>=1)))}function X_(t){var e,A,n,P,r,i,f;for(t.L=!0,n=OT(t),t.P&&f2(t.P,t.f)&&(n=OT(t)),A2(t,!1)&&o2(t),i=!0;t.U<t.R.f&&i;){for(P=q_(t,n),e=0;e<t.R.f;e++)$e(t.e[e],e),W1(t.e[e],t.c,t.f[e]),W1(t.e[e],20,0),!t.cb[e]&&t.bb[e]!=0&&ue(t.e[e],I1(t.bb[e]<<18,j1(P[t.bb[e]==1?0:1][t.ab[e]],8))),f=t.db[e],t.eb[e]&&(f==1?f=2:f==2&&(f=1)),ue(t.e[e],f<<4);for(A=0;A<t.R.g;A++)ue(t.e[z(t.R,0,A)],t.o[A]),ue(t.e[z(t.R,1,A)],t.o[A]);if(r=Zn(t),t.U==r)break;t.U=r,i=!1,t.P&&f2(t.P,t.f)&&(i=!0,n=OT(t)),A2(t,!1)&&(i=!0,o2(t))}}function Z_(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l;for(e=0;e<t.j.f;e++)if(t.d[e])for(i=!1,f=c(F,k,6,t.j.f,15,1),l=c(F,k,6,t.j.f,15,1),D=c(F,k,6,t.j.f,15,1),f[0]=e,l[e]=-1,D[e]=1,P=0,Q=0;P<=Q&&!i;){for(r=f[P],o=0;o<O(t.j,r)&&!i;o++)if(L=(D[r]&1)==1^dt(t.j,xt(t.j,r,o))>1,n=_(t.j,r,o),D[n]==0&&L)if(t.d[n]){if((D[r]&1)==1){for(t.d[e]=!1,t.d[n]=!1,t.k+=2,y=r,s=0;s<D[r];s++)A=u1(t.j,n,y),t.e[A]&&(t.e[A]=!1,--t.c),fh(t.j,A,dt(t.j,A)==1?2:dt(t.j,A)-1),n=y,y=l[n];i=!0}}else f[++Q]=n,l[n]=r,D[n]=D[r]+1;++P}}function qA(t,e){J1();var A,n,P,r,i;if((e&256)!=0&&at(t,\"?\"))return 0;for(n=1;n<=128;n++)if(!at(t,_1)&&Kr(t,X0[n]))return n;if((e&2)!=0){for(P=129;P<=144;P++)if(Kr(t,X0[P]))return P}if((e&4)!=0){for(r=146;r<=148;r++)if(Kr(t,X0[r]))return r}if((e&1)!=0){for(i=151;i<=152;i++)if(Kr(t,X0[i]))return i}if((e&32)!=0&&Kr(t,X0[153]))return 153;if((e&8)!=0&&Kr(t,X0[154]))return 154;if((e&16)!=0&&Kr(t,X0[145]))return 145;if((e&128)!=0&&Kr(t,X0[159]))return 159;if((e&64)!=0){for(A=171;A<=190;A++)if(Kr(t,X0[A]))return A}return 0}function W_(t,e){var A,n,P,r,i,f,D;if(t.db[e]==1||t.db[e]==2){if(f=!1,$1(t.R,e)==2&&O(t.R,e)==2)try{for(i=0;i<2;i++)if(A=_(t.R,e,i),O(t.R,A)==3){for(P=c(F,k,6,2,15,1),r=0,D=0;D<O(t.R,A);D++)CA(t.R,A,D)==1&&(P[r++]=_(t.R,A,D));t.f[P[0]]>t.f[P[1]]^e6(t,A,P[0],P[1])&&(f=!f)}}catch(Q){if(Q=a1(Q),Xt(Q,19)){t.$[e]=3;return}else throw At(Q)}else{try{n=zK(t,e)}catch(Q){if(Q=a1(Q),Xt(Q,19)){t.$[e]=3;return}else throw At(Q)}for(i=1;i<n.length;i++)for(D=0;D<i;D++)t.f[n[i]]<t.f[n[D]]&&(f=!f)}t.db[e]==1^f?t.$[e]=1:t.$[e]=2}}function __(t,e,A,n,P){var r,i,f,D,Q,o,L,s,y,l,h;for(L=-1,o=0;o<t.j[A];o++)t.n[A][o]==2&&(L=t.i[A][o]);for(r=c(F,k,6,n,15,1),h=c(F,k,6,4,15,1),h[0]=L,h[1]=A,h[2]=e,D=0,Q=0;Q<t.e[e];Q++)i=t.i[e][Q],t.C[i]==1&&(D==0&&(h[3]=i),r[D++]=i);y=!(A<t.f&&r0(t.p,A))&&n==1?1:2,l=c(zt,_t,6,y,15,1),f=c(zt,_t,6,y,15,1),s=k1(zt,[ee,_t],[16,6],15,[y,2],2),!(A<t.f&&r0(t.p,A))&&n==1?(l[0]=0,f[0]=100,s[0][0]=-15,s[0][1]=15):(l[0]=0,l[1]=180,f[0]=50,f[1]=50,s[0][0]=-15,s[0][1]=15,s[1][0]=165,s[1][1]=195),mt(P,new SL(l,f,s,h,r,1))}function be(t){var e,A,n,P,r;return t.g!=null?t.g:t.a<32?(t.g=ga(M1(t.f),vt(t.e)),t.g):(P=a5((!t.c&&(t.c=kP(M1(t.f))),t.c),0),t.e==0?P:(e=(!t.c&&(t.c=kP(M1(t.f))),t.c).e<0?2:1,A=P.length,n=-t.e+A-e,r=new V0,r.a+=\"\"+P,t.e>0&&n>=-6?n>=0?FD(r,A-vt(t.e),\".\"):(vF(r,e-1,e-1,\"0.\"),FD(r,e+1,an(Vo,0,-vt(n)-1))):(A-e>=1&&(FD(r,e,\".\"),++A),FD(r,A,\"E\"),n>0&&FD(r,++A,\"+\"),FD(r,++A,\"\"+he(M1(n)))),t.g=r.a,t.g))}function $_(t){var e,A,n,P,r,i,f;if(n=new fD,mt(n.a,new Ze(\"Solubility values are estimated applying an atom-type based increment system.\",2)),mt(n.a,new Ze(nV,2)),mt(n.a,new Ze(e4,2)),mt(n.a,new Ze(\"Base value = -0.530\",2)),A=c(F,k,6,zf.length,15,1),t)for(fi(t),ut(t,7),e=0;e<t.f;e++){f=-1;try{f=Ay(t,e,2144)}catch(D){if(D=a1(D),!Xt(D,19))throw At(D)}for(i=0;i<zf.length;i++)if(t0(Ql[i],f)){++A[i];break}}for(P=new Au(\"#0.000\"),r=0;r<zf.length;r++)A[r]!=0&&_P(n,\"\"+A[r]+\" * \"+yg(P,zf[r])+\"   AtomType: 0x\"+xT(Ql[r]),2);return n}function x5(t){var e,A,n,P,r,i,f,D;for(f=c(Pt,ft,6,t.q,16,1),A=0;A<t.q;A++)f[A]=t.C[A]==1&&t.A[A]==0&&t.s[A]==0&&(t.u[A]&d8)==0&&(t.t==null||t.t[A]==null);for(D=c(Pt,ft,6,t.q,16,1),i=0;i<t.r;i++){if(n=t.D[0][i],P=t.D[1][i],dt(t,i)!=1){f[n]=!1,f[P]=!1;continue}D[n]&&(f[n]=!1),D[P]&&(f[P]=!1),f[n]&&_0(t,P)&&t.C[P]!=13&&(f[n]=!1),f[P]&&_0(t,n)&&t.C[n]!=13&&(f[P]=!1),D[n]=!0,D[P]=!0}for(r=0;r<t.r;r++)f[t.D[0][r]]&&f[t.D[1][r]]&&(f[t.D[0][r]]=!1,f[t.D[1][r]]=!1);for(e=0;e<t.q;e++)D[e]||(f[e]=!1);return f}function a_(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g;for(g=0;g<t.e.length;g++)if(t.e[g]){for(T=!1,n=N(t.j,g),r=0,f=n.length;r<f;++r)e=n[r],t.a[e]|=u0,oK(t,e)&&(T=!0);for(o=N(t.k,g),s=0,h=o.length;s<h;++s)D=o[s],t.c[D]|=u0;if(t.f[g]){for(A=N(t.j,g),P=0,i=A.length;P<i;++P)e=A[P],t.a[e]|=I0;for(Q=N(t.k,g),L=0,l=Q.length;L<l;++L)D=Q[L],t.c[D]|=I0}if(T){for(A=N(t.j,g),P=0,i=A.length;P<i;++P)e=A[P],t.a[e]|=T8;for(Q=N(t.k,g),L=0,l=Q.length;L<l;++L)D=Q[L],t.c[D]|=T8}}for(y=new Zt(t.b);y.a<y.c.a.length;)D=$t(y).a,t.c[D]=0}function eP(t){var e,A,n,P,r,i,f,D,Q;e=null;try{for(e=new Pn(new di((P=KD(t),c0(),P))),D=Q1(B1(Y1(e)),P1,Et),n=L8(B1(Y1(e)),\",\"),Q=k1(DP,[nA,A0],[8,1],5,[D,n.length],2),i=0;(r=Y1(e))!=null&&i<D;i++)for(f=L8(B1(r),\",\"),A=0;A<n.length;A++)switch(Gi(n[A],0)){case 105:Q[i][A]=m1(Q1(B1(f[A]),P1,Et));break;case 102:Q[i][A]=Le(B1(f[A]));break;case 99:Q[i][A]=MG(Gi(ai(ai(B1(f[A]),\"'\"),'\"'),0))}return Q}catch(o){if(o=a1(o),Xt(o,75))z1();else throw At(o)}return k1(DP,[nA,A0],[8,1],5,[1,1],2)}function t$(t,e,A,n,P){var r,i;return!(X(t.j,A)==6&&w.Math.abs(O(t.j,A)-O(t.d,P))>1||X(t.j,A)==8&&O(t.j,A)==2&&X9(t.j,e,8)>X9(t.d,n,8)||X(t.d,P)==8&&O(t.d,P)==2&&X9(t.j,e,8)<X9(t.d,n,8)||X(t.j,A)==8&&O(t.j,A)==2&&O(t.d,P)==2&&(i=_(t.j,A,0)==e?0:1,r=_(t.d,P,0)==n?0:1,cs(t.p[A][i][3],t.i[P][r][3])!=0)||X(t.j,A)==7&&X9(t.j,e,7)<X9(t.d,n,7)||X(t.d,P)==7&&X9(t.j,e,7)>X9(t.d,n,7)||C9(t.j,u1(t.j,e,A))==3^C9(t.d,u1(t.d,n,P))==3)}function Os(t,e){W9();var A,n,P,r,i,f,D,Q,o,L,s;return A=(NA[0]*((e&rP)>>16)+NA[1]*((e&nP)>>8)+NA[2]*(e&255))/255,i=(NA[0]*((t&rP)>>16)+NA[1]*((t&nP)>>8)+NA[2]*(t&255))/255,P=w.Math.abs(A-i),P>bf||(f=(mQ(),MR(((e&rP)>>16)/255,((e&nP)>>8)/255,(e&255)/255,null)),D=MR(((t&rP)>>16)/255,((t&nP)>>8)/255,(t&255)/255,null),Q=w.Math.abs(D[0]-f[0]),Q>.5&&(Q=1-Q),s=1-w.Math.max(D[1],f[1]),n=w.Math.abs(i+A-1),o=w.Math.cos(U1*Q*3),L=bf*w.Math.max(s,w.Math.max(n,o)),P>L)?t:(r=i>A?i+L>1:i-L>0,A5(t,r?A-L:A+L))}function Bf(t,e,A){var n,P,r,i;if(ut(t.j,1),i=new oU(t.j,1),p$(t,e,i),t.c==0)return!0;if(A)for(P=0;P<t.j.f;P++)t.d[P]&&X(t.j,P)==7&&(t.f[P]||O(t.j,P)==3&&!t.g[P])&&E0(t.j,P,1);for(t.a=!1,tY(t,A),t.j.K&&IW(t),qa(t,i),SG(t,i),xY(t),A&&sa(t),jQ(t);B$(t,i,A);)jQ(t);for(;rZ(t,i,A);)jQ(t);for(;s_(t,i,A);)jQ(t);for(;t.c!=0;)for(r=0;r<t.j.g;r++)t.e[r]&&(aD(t,r),jQ(t));for(A&&f$(t,A),t.b-t.k>=2&&Z_(t),n=0;n<t.j.f;n++)t.d[n]&&It(t.j,n)!=0&&(A&&(b1(t.j,n)==1&&tA(t.j,n)||b1(t.j,n)==-1&&X(t.j,n)==5)?E0(t.j,n,0):Ne(t.j,n,32),++t.k);return t.b==t.k}function Uj(t,e,A,n,P,r){var i,f,D,Q,o,L,s,y;for(this.e=t,this.c=e,this.f=A,this.d=n,this.g=P,this.b=P,this.i=r,Q=new lP,f=0;f<t.f;f++)A[f]==0&&(D=t.C[f]+(t.A[f]<<16),s=le(Q,m1(D)),s||(s=new Ih(this),ze(Q,m1(D),s)),s.d=aF(f,s.d),s.d.length<=s.c.length&&(s.a=s.d.length));for(i=0;i<e.f;i++)n[i]==0&&(D=e.C[i]+(e.A[i]<<16),s=le(Q,m1(D)),s||(s=new Ih(this),ze(Q,m1(D),s)),s.c=aF(i,s.c),s.c.length<=s.d.length&&(s.a=s.c.length));for(this.a=new f1,y=(L=new rD(Q).a._c().Tb(),new iD(L));y.a.bd();)s=(o=y.a.cd(),o.fd()),j_(s)||mt(this.a,s)}function Lj(t,e){var A,n,P,r,i;r=0,KA(t.d)?(P=B0(t.p),A=B0(t.o),r|=P<<9,r|=A<<13,r&=-128,w0(t.u,e,1)):(KA(t.k)&&(r|=1),KA(t.c)&&(r|=2),KA(t.n)&&(r|=4),KA(t.i)&&(r|=32),KA(t.j)&&(r|=64),KA(t.b)&&(r|=8),KA(t.g)&&(r|=16),B0(t.q)!=0&&(B0(t.q)==1?fA(t.u,e)||(r|=128):B0(t.q)==2?fA(t.u,e)||(r|=256):B0(t.q)==3?_e(t.u,e)||(r|=4194560):B0(t.q)==4?_e(t.u,e)||(r|=IA):B0(t.q)==5&&(_e(t.u,e)||(r|=iP))),B0(t.r)!=0&&(i=B0(t.r)+2,i>7&&(i-=7),n=C9(t.u,e),(i<=2||i!=n)&&(r|=i<<17)),KA(t.e)&&(r|=Mf),KA(t.f)&&(r|=c8)),Ge(t.u,e,ui,!1),Ge(t.u,e,r,!0),Cs(t.u,e)}function Gs(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h;for(P=c(F,k,6,e.q,15,1),D=$0(t,1),Q=$0(t,2),n=0;n<e.q;n++)if(e.C[n]!=0||(e.t==null||e.t[n]==null?null:fn((y=e.t[n],c0(),y)))!=null)P[n]=En(e,t,n,D,Q);else if(P[n]=A,(e.T&8)!=0){for(f=0;f<e.r;f++)for(o=0;o<2;o++)if(e.D[o][f]==n){if(l=e.D[1-o][f],h=e.u[l]&3,L=!1,h==1||h==2){for(r=0;r<e.r;r++)if(r!=f)for(s=0;s<2;s++)e.D[s][r]==l&&e.D[1-s][r]<n&&(L=!L)}L&&ce(e,l,h==1?2:1,(e.u[l]&4)!=0)}}for(i=0;i<e.r;i++)e9(e,t,i,D,Q,P[e.D[0][i]],P[e.D[1][i]],!1);return t.L=t.L&&e.L,t.I=0,t.T=0,P}function sj(t,e,A,n){var P,r,i,f,D,Q,o,L,s,y,l,h,T,g;this.g=e,this.b=e.a[A],this.d=e.a[n],this.a=A,this.c=n,P=(i=XF(t.p,this.b),f=XF(t.p,this.d),D=rL(t.p,this.b),Q=rL(t.p,this.d),o=(i-f)/(i+f),.5*(i+f)*(1+(D==68||Q==68?0:.2*(1-w.Math.exp(-12*o*o))))),r=(L=GB(t.p,this.b),s=GB(t.p,this.d),y=OB(t.p,this.b),l=OB(t.p,this.d),h=JB(t.p,this.b),T=JB(t.p,this.d),g=P*P,181.16*L*s*y*l/((w.Math.sqrt(y/h)+w.Math.sqrt(l/T))*g*g*g)),this.e=rL(t.p,this.b),this.f=rL(t.p,this.d),(this.e==68&&this.f==65||this.e==65&&this.f==68)&&(P=P*.8,r*=.5),this.i=P,this.j=r}function e$(t,e,A,n){var P,r,i,f,D,Q,o,L,s,y,l,h;return o=eB(t.a,e,u1(e,A,n)),r=e.a[A],f=e.a[n],r>f&&(r=(l=m1(f),m1(f=r),l).a),s=_r(B(d(F,1),k,6,15,[1,2,0]),B(d(F,1),k,6,15,[r,f,o]),t),s>=0?j0(t.b[s][3]):(P=e.C[A],i=e.C[n],P>i&&(P=(y=m1(i),m1(i=P),y).a),h=U2(t,e,A,n),Q=_r(B(d(F,1),k,6,15,[0,1]),B(d(F,1),k,6,15,[P,i]),t.a.c),Q>=0?(L=w.Math.pow(sI(t.a.c,Q)/h,6),LI(t.a.c,Q)*L):(D=_r(B(d(F,1),k,6,15,[0,1]),B(d(F,1),k,6,15,[wk(P),wk(i)]),t.a.j),w.Math.pow(10,-(h-Gg(t.a.j,D,2))/Gg(t.a.j,D,3))))}function A$(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R,j,C,S,I,x,tt,M;return A=t.l&8191,n=t.l>>13|(t.m&15)<<9,P=t.m>>4&8191,r=t.m>>17|(t.h&255)<<5,i=(t.h&1048320)>>8,f=e.l&8191,D=e.l>>13|(e.m&15)<<9,Q=e.m>>4&8191,o=e.m>>17|(e.h&255)<<5,L=(e.h&1048320)>>8,S=A*f,I=n*f,x=P*f,tt=r*f,M=i*f,D!=0&&(I+=A*D,x+=n*D,tt+=P*D,M+=r*D),Q!=0&&(x+=A*Q,tt+=n*Q,M+=P*Q),o!=0&&(tt+=A*o,M+=n*o),L!=0&&(M+=A*L),y=S&x0,l=(I&511)<<13,s=y+l,T=S>>22,g=I>>9,m=(x&262143)<<4,v=(tt&31)<<17,h=T+g+m+v,R=x>>18,j=tt>>5,C=(M&4095)<<8,b=R+j+C,h+=s>>22,s&=x0,b+=h>>22,h&=x0,b&=tn,S0(s,h,b)}function n$(t,e){var A,n,P,r,i,f,D,Q,o,L,s;for(f5(e,t.j),r=0,n=0;n<t.d.q;n++)i=e.a==null?NaN:e.a[n],i>1e3&&IX(t,e,n)&&++r;if(r==0){for(s=16,P=0;P<t.d.q;P++)s>Ht(t.d,P)&&(e.a==null?NaN:e.a[P])>(o=w.Math.min(4,Ht(t.d,P)),400+o*2e3/5)&&(s=Ht(t.d,P));if(s!=16)for(A=0;A<t.d.q;A++)s==Ht(t.d,A)&&(e.a==null?NaN:e.a[A])>(Q=w.Math.min(4,Ht(t.d,A)),400+Q*2e3/5)&&(f=e.k[A],Ht(t.d,A)==1?(D=J0(e,_(t.d,A,0)),q8(f,2*(D.a-f.a),2*(D.b-f.b),2*(D.c-f.c))):(L=Ht(t.d,A)==0?16:8,q8(f,L*jn(t.f)-L/2,L*jn(t.f)-L/2,L*jn(t.f)-L/2)),++r)}return r!=0&&pU(e),r}function yj(t){var e,A,n,P,r,i,f;for(i=c(F,k,6,t.U+1,15,1),A=0;A<t.R.f;A++)ne(t.R,A)==0&&(t.db[A]==1?++i[t.f[A]]:t.db[A]==2&&--i[t.f[A]]);for(P=0;P<t.R.g;P++)dt(t.R,P)==1&&cP(t.R,P)==0&&(t.o[P]==1?(++i[t.f[z(t.R,0,P)]],++i[t.f[z(t.R,1,P)]]):t.o[P]==2&&(--i[t.f[z(t.R,0,P)]],--i[t.f[z(t.R,1,P)]]));for(f=1;f<=t.U;f++)if(i[f]!=0){if(r=i[f]<0,r){for(e=0;e<t.R.f;e++)ne(t.R,e)==0&&(t.db[e]==1?t.db[e]=2:t.db[e]==2&&(t.db[e]=1));for(n=0;n<t.R.g;n++)dt(t.R,n)==1&&cP(t.R,n)==0&&(t.o[n]==1?t.o[n]=2:t.o[n]==2&&(t.o[n]=1))}return r}return!1}function P$(t,e){var A,n,P,r,i,f,D,Q,o,L;for(t.j=0,P=0;P<e.g.a.length+e.f.a.length;P++)for(D=fv(t.c,P),A=0;A<D.f;A++)gt(V(D.B[A],a0),0)?D.w[A]=0:t.j<w.Math.abs(D.w[A])&&(t.j=w.Math.abs(D.w[A]));for(L=c(Pt,ft,6,t.j+1,16,1),r=0;r<e.g.a.length;r++)for(o=N(e.g,r),A=0;A<o.f;A++)f=w.Math.abs(o.w[A]),f!=0&&(L[f]=!0);for(i=0;i<e.f.a.length;i++)for(Q=N(e.f,i),A=0;A<Q.f;A++)f=w.Math.abs(Q.w[A]),f!=0&&(L[f]?L[f]=!1:Q.w[A]=0);for(n=0;n<e.g.a.length;n++)for(o=N(e.g,n),A=0;A<o.f;A++)f=w.Math.abs(o.w[A]),f!=0&&L[f]&&(o.w[A]=0)}function r$(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m;for(l=null,l=new qi,un(l,t.f),i=c(Pt,ft,6,t.f.f,16,1),T=e.Tb();T.bd();)if(h=T.cd(),y=null,m=h.b,yn(l,m),ln(l,4,8)!=0&&(y=l.F),y)for(s=new Zt(y);s.a<s.c.a.length;){for(L=$t(s),g=0,n=L,P=0,r=n.length;P<r;++P)A=n[P],i[A]&&++g;if(g<=1){for(D=h.c,t.a?D=!1:t.a=!0,Q=new HP(t.f,L.length,D),o=0;o<L.length;o++)A=L[o],D&&Jn(t.f,A,!0),Q.k[o]=256,Q.e[o]=A,Q.a[o]=kt(h.b,o)/h.a,Q.b[o]=pt(h.b,o)/h.a,i[A]=!0,t.b[A]=!0;for(f=0;f<m.g;f++)t.c[u1(t.f,L[m.D[0][f]],L[m.D[1][f]])]=!0;pP(t.d,Q)}}return i}function lj(t,e,A,n,P){var r,i,f,D,Q;for(this.D=t,this.u=e,this.I=A,this.B=n,this.L=P,GZ(this),ub(this),this.k=XZ(this),this.j=YK(this.k),this.r=0,Q=(f=new x8(new I8(new wr(this.k[0]).a).b),new gr(f));Cr(Q.a.a);)D=(i=B9(Q.a),i.ed()),r=le(this.k[0],D),this.r+=w.Math.min(r[0].length,r[1].length);this.p=this.r==this.D.f&&this.D.f==this.u.f,this.G=c(F,k,6,this.D.f,15,1),this.w=c(F,k,6,this.u.f,15,1),this.H=c(Pt,ft,6,nr(this.D,this.G,!1,!1),16,1),this.A=c(Pt,ft,6,nr(this.u,this.w,!1,!1),16,1),this.q=FR(this),this.g=7,this.K=0}function hj(t,e,A,n){var P,r,i,f,D,Q,o,L,s,y,l,h,T;if(t.o&&ia(t,e),r=null,t.e!=null)for(f=t.e,Q=0,L=f.length;Q<L;++Q)i=f[Q],Q2(i,e,null,0),r=r?dQ(r,i.v):i.v;if(t.b!=null)for(f=t.b,Q=0,L=f.length;Q<L;++Q)i=f[Q],Q2(i,e,null,0),r=r?dQ(r,i.v):i.v;if(t.g)for(l=new Zt(t.g);l.a<l.c.a.length;)y=$t(l),h=y.Jb(e),Iu(t.p,h),r=r?dQ(r,h):h;if(!r)return null;if(P=p5(t),T=new Zs(r,A,P,n),!(T.c==1&&T.a==0&&T.b==0)){if(Hu(T,t.p),t.e!=null)for(D=t.e,o=0,s=D.length;o<s;++o)i=D[o],SU(i,T);if(t.b!=null)for(f=t.b,Q=0,L=f.length;Q<L;++Q)i=f[Q],SU(i,T);return T}return null}function Js(t,e,A,n){var P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m;for(D=XE[n],f=1,y=n==4?w.Math.exp(w.Math.log(.01)/D):1,P=t.d.q*t.d.q,s=c(Ut,Tt,6,10,15,1),L=0,o=0;o<D&&!(gt(t.n,0)&&(z1(),E1(M1(Date.now()),t.n)));o++){for(n!=0&&o%10==0&&va(t,e),Q=0;Q<P&&!(gt(t.n,0)&&(z1(),E1(M1(Date.now()),t.n)));Q++)l=null,l=N(t.j,vt(jn(t.f)*t.j.a.length)),l.g&&!t.k[l.sd()]&&(i=l.rd(e,f),i&&pU(e));if(f5(e,t.j),s[L++]=e.e,L==10&&(L=0),o>10){for(r=0,T=s,g=0,m=T.length;g<m;++g)h=T[g],r+=h;if(r/=10,e.e>r)break}A.e>e.e&&(YD(A,e),sT(A,e)),f*=y}e.e>A.e&&(YD(e,A),sT(e,A))}function Tj(){Tj=d1,FE=B(d(Ut,1),Tt,6,15,[5.55,15,15,15,15,15,15,15,15,wA,wA,wA,wA,wA,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,wA,wA,7.1,ie,ie,17.78,Qr,3.82,6.66,6.66,7.78,11.68,wA,6.66,wA,wA,ie,ie,ie,ie,ie,ie,ie,ie,ie,ie,wA,wA,11.68,11.68,11.68,ie,20.3,Qr,Qr,Nf,Nf,Qr,12.22,15.56,Nf,wA,10,Qr,ie,16.66,Nf,15.56,Qr,15.56,Nf,Qr,12.22,Nf,Qr,18.88,Qr,Qr,12.22,wA,wA,wA,9.38,ie,6.66,ie,ie,10,ie,ie,wA,ie,ie,4.44,4.44,10,4.44,16.66,ie,ie,ie,ie,6.66,10,wA,ie,10,Nf,10,10,10,6.68,5.2,6.68,11.68,10.5])}function i$(t,e){var A,n,P,r,i,f,D,Q,o,L;if(lN(t.C[e]))return 0;if(t.C[e]==1)return t.j[e]==0?0:a9(t.C[t.i[e][0]])?-1:1;if(L=t.s[e],D=t.e[e]-e0(t,e)+It(t,e),t.C[e]!=1&&t.C[e]!=15&&(a9(t.C[e])?L+=D:L-=D),t.j[e]==0)return L;for(o=0;o<t.j[e];o++)r=t.i[e][o],A=O8(t,t.k[e][o])?1:t.n[e][o],a9(t.C[e])?a9(t.C[r])||(L+=A):a9(t.C[r])?L-=A:t.C[e]!=t.C[r]&&(TB(t.C[e]).a<TB(t.C[r]).a?L+=A:L-=A);if(e<t.f&&cI(t.p,e)){for(n=0,P=0,f=0,Q=0;Q<t.j[e];Q++)O8(t,t.k[e][Q])&&(i=t.C[t.i[e][Q]],i==6?++P:_9(i)?++f:++n);t.C[e]==6?n>1?--L:f>1&&++L:tA(t,e)?n+P>1&&--L:f+P>1&&++L}return L}function N5(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l;for(l=c(F,k,6,16,15,1),A=c(Ut,Tt,6,16,15,1),r=c(Ut,Tt,6,2,15,1),n=0,o=0;o<2;o++)for(P=t.D[o][e],L=0;L<t.j[P];L++)if(D=t.k[P][L],D!=e){if(n==4)return 0;f=t.i[P][L],l[n]=16,t.o[f]!=0&&(l[n]+=(t.u[f]&cn)!=0?1:4),(t.F[e]&64)!=0&&(t.F[D]&64)!=0&&(s=zL(t.p,e,D),s!=-1&&(l[n]+=D3(t.p,s)?64:6)),A[n++]=bA(t.J[P].a,t.J[P].b,t.J[f].a,t.J[f].b)}for(r[0]=Y0(t,t.D[0][e],t.D[1][e]),r[0]<0?(r[1]=r[0]+U1,i=!1):(r[1]=r[0],r[0]=r[1]-U1,i=!0),y=0,Q=0;Q<n;Q++)A[Q]>r[0]&&A[Q]<r[1]?y-=l[Q]:y+=l[Q];return i?-y:y}function cj(t){var e;if(this.e=t.e,t.a!=null)for(this.a=c(zt,_t,6,t.a.length,15,1),e=0;e<this.a.length;e++)this.a[e]=360-t.a[this.a.length-e-1]<<16>>16;if(t.d!=null)for(this.d=k1(zt,[ee,_t],[16,6],15,[t.d.length,2],2),e=0;e<this.d.length;e++)this.d[e][0]=360-t.d[this.a.length-e-1][1]<<16>>16,this.d[e][1]=360-t.d[this.a.length-e-1][0]<<16>>16;if(t.c!=null)for(this.c=c(zt,_t,6,t.c.length,15,1),e=0;e<this.c.length;e++)this.c[e]=t.c[this.c.length-e-1];if(t.b!=null)for(this.b=c(E,q,6,t.b.length,15,1),e=0;e<this.b.length;e++)this.b[e]=t.b[this.b.length-e-1]}function f$(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h;for(A=0;A<t.j.f;A++)if(ut(t.j,1),X(t.j,A)==7&&b1(t.j,A)==1&&$1(t.j,A)==1&&!qz(t,A,e))for(f=!1,D=c(F,k,6,t.j.f,15,1),h=c(F,k,6,t.j.f,15,1),Q=c(F,k,6,t.j.f,15,1),D[0]=A,h[A]=-1,Q[A]=1,r=0,o=0;r<=o&&!f;){for(i=D[r],L=0;L<O(t.j,i)&&!f;L++)if(s=(Q[i]&1)==0^dt(t.j,xt(t.j,i,L))>1,P=_(t.j,i,L),Q[P]==0&&s)if(X(t.j,P)==7&&$1(t.j,P)==0&&O(t.j,P)==2){if((Q[i]&1)==0){for(E0(t.j,A,0),l=i,y=0;y<Q[i];y++)n=u1(t.j,P,l),fh(t.j,n,dt(t.j,n)==1?2:dt(t.j,n)-1),P=l,l=h[P];f=!0}}else D[++o]=P,h[P]=i,Q[P]=Q[i]+1;++r}}function D$(t,e){if(e<128)t.push((e&127)<<24>>24);else if(e<N1)t.push((e>>6&31|192)<<24>>24),t.push((e&63|128)<<24>>24);else if(e<u0)t.push((e>>12&15|224)<<24>>24),t.push((e>>6&63|128)<<24>>24),t.push((e&63|128)<<24>>24);else if(e<IA)t.push((e>>18&7|240)<<24>>24),t.push((e>>12&63|128)<<24>>24),t.push((e>>6&63|128)<<24>>24),t.push((e&63|128)<<24>>24);else if(e<Tn)t.push((e>>24&3|248)<<24>>24),t.push((e>>18&63|128)<<24>>24),t.push((e>>12&63|128)<<24>>24),t.push((e>>6&63|128)<<24>>24),t.push((e&63|128)<<24>>24);else throw At(new YP(\"Character out of range: \"+e))}function u$(t,e,A){var n,P,r,i,f;return X(t.R,e)!=6&&X(t.R,e)!=7||(P=_(t.R,e,0),r=_(t.R,e,1),$1(t.R,P)!=1||$1(t.R,r)!=1)||O(t.R,P)==1||O(t.R,r)==1||Ht(t.R,P)>3||Ht(t.R,r)>3||(i=new cf(t.R,t.f,e,P),i.f&&A==1)||(f=new cf(t.R,t.f,e,r),f.f&&A==1)||i.f&&f.f?!1:(A==3&&(i.f&&i.c&&(t.W[e]=!0),f.f&&f.c&&(t.W[e]=!0)),n=t.jb?hY(t,i,f):hz(i,f),A==1?t.db[e]=n:A==2&&(i.f&&(n==1?ue(t.e[i.b],t.f[P]):ue(t.e[i.d],t.f[P])),f.f&&(n==2?ue(t.e[f.b],t.f[r]):ue(t.e[f.d],t.f[r]))),!0)}function zs(t,e,A){var n,P,r,i,f,D,Q,o,L,s;if(Q=t.K[e],i=t.n[A],(Ae(t.g,A)&Mf)!=0){if(D=ou(t.H,e),P=ou(t.g,A),r=Ae(t.g,A)&127,D!=P&&!(D==1&&(r&1)!=0)&&!(D==2&&(r&2)!=0)&&!(D==4&&(r&4)!=0)&&!(D==32&&(r&32)!=0)&&!(D==64&&(r&64)!=0)&&!(D==16&&(r&16)!=0)&&!(D==8&&(r&8)!=0))return!1;Q&=-128,i&=-128}if((Q&~i)!=0)return!1;if(s=(Ae(t.g,A)&qP)>>17,s!=0){if(t.H.K&&s==(Ae(t.H,A)&qP)>>17)return!0;if(s<=2)return o=C9(t.H,e),s==1?o>=8&&o<=12:o>=12;for(n=!1,L=Nn(t.H),f=0;f<L.j.a.length;f++)if(N(L.k,f).length==s&&tf(L,f,e)){n=!0;break}if(!n)return!1}return!0}function Q$(t,e,A,n,P,r,i,f,D,Q){var o,L,s,y,l,h,T,g,m,v,b,R,j,C;t!=e&&(o=Or(t,e),!(D[o[0]][o[1]]&&D[o[0]][o[1]].a.length==1)&&(C=.866,L=.5,(Q.F[i]&64)!=0&&(b=Q.p&&i<Q.g?yP(Q.p,i):0,b<6&&(C=0,L=1)),y=f.a[i]-f.a[A]*w.Math.cos(P)-f.a[n]*w.Math.cos(r),R=f.a[A]*w.Math.sin(P),j=f.a[n]*w.Math.sin(r),l=R+j,h=R-j*L,T=j*C,m=w.Math.sqrt(y*y+h*h+T*T),g=w.Math.sqrt(y*y+l*l),v=c(F,k,6,2,15,1),v[0]=Q.D[0][i],v[1]=Q.D[1][i],s=D[o[0]][o[1]],s?(s.a[0]=w.Math.min(s.a[0],m),s.a[1]=w.Math.min(s.a[1],g)):D[o[0]][o[1]]=new _L(o,v,m,g,3)))}function A9(t,e){var A,n,P,r,i,f,D;for(f=(e.T&15)!=0,D=e.T&248,!t.g&&(t.g=new ZD),(t.e&2)!=0&&w5(e,!1),t.f=e,ut(t.f,7),t.d=new A7,t.b=c(Pt,ft,6,t.f.q,16,1),t.c=c(Pt,ft,6,t.f.r,16,1),t.i=c(F,k,6,t.f.q,15,1),A=0;A<t.f.q;A++)t.i[A]=b1(t.f,A);for((t.e&12)!=0&&I$(t),(t.e&1)==0&&ko&&r$(t,ko),stt(t),mj(t),RW(t),mj(t),r=new Zt(t.d);r.a<r.c.a.length;)n=$t(r),$X(n);for(k$(t),ea(t),Nz(t),KN(t),rN(t),iN(t),P=new Zt(t.d);P.a<P.c.a.length;)for(n=$t(P),i=0;i<n.e.length;i++)Be(t.f,n.e[i],n.a[i]),Ie(t.f,n.e[i],n.b[i]),TP(t.f,n.e[i],0);f&&(UD(t.f,D),of(t.f)),t.a&&eh(t.f)}function Ys(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T;for(L=0,i=c(Pt,ft,6,t.a.f,16,1),n=e,P=0,r=n.length;P<r;++P)A=n[P],A!=-1&&(i[A]=!0);for(s=c(Pt,ft,6,t.a.g,16,1),T=0;T<t.b.g;T++)if(l=z(t.b,0,T),h=z(t.b,1,T),!(t.b.K&&(Qe(t.b,l)||Qe(t.b,h)))){if(f=e[l],D=e[h],HN(t.b,T),f==-1||D==-1){(f!=-1||D!=-1)&&(L+=v5(t.b,T));continue}if(o=u1(t.a,f,D),o==-1){L+=v5(t.b,T);continue}s[o]=!0,L+=Fv(t.b,T)==Fv(t.a,o)?0:1}for(Q=0;Q<t.a.g;Q++)t.a.K&&(Qe(t.a,z(t.a,0,Q))||Qe(t.a,z(t.a,1,Q)))||s[Q]||(L+=v5(t.a,Q));for(y=0;y<t.b.f;y++)d0(t.b,y)!=0&&(L+=SY(t,y,e));return-L}function o$(t){if(!t)return 0;var e=0;return t.noTabus&&(e|=1),t.showAtomNumber&&(e|=2),t.showBondNumber&&(e|=4),t.highlightQueryFeatures&&(e|=8),t.showMapping&&(e|=16),t.suppressChiralText&&(e|=32),t.suppressCIPParity&&(e|=64),t.suppressESR&&(e|=128),t.noCarbonLabelWithCustomLabel&&(e|=y8),t.noAtomCustomLabels&&(e|=u0),t.showSymmetryAny&&(e|=768),t.showSymmetrySimple&&(e|=256),t.showSymmetryStereoHeterotopicity&&(e|=512),t.noImplicitAtomLabelColors&&(e|=re),t.noStereoProblem&&(e|=N1),t.noColorOnESRAndCIP&&(e|=C0),t.noImplicitHydrogen&&(e|=ge),t.drawBondsInGray&&(e|=Sn),e}function ri(t,e,A,n,P){var r,i,f,D,Q,o,L,s,y,l;for(s=!1,P.a=0,P.b=0,n>0?r=s6:r=y6,l=Y0(t.L,e,A),o=0;o<O(t.L,e);o++)i=xt(t.L,e,o),f=l,z(t.L,0,i)==e?L=z(t.L,1,i):L=z(t.L,0,i),L!=A&&(y=Y0(t.L,e,L),f<y&&(f+=F0),D=f-y,n>0?(D<U1&&(s=!0),D>s6&&(D=s6),D<.523598776&&(D=.523598776),D<=r&&(r=D,Q=t.T*w.Math.tan(r-RA)/2,P.a=-(Q*w.Math.sin(f)),P.b=-(Q*w.Math.cos(f)))):(D>=U1&&(s=!0),D<y6&&(D=y6),D>5.759586531&&(D=5.759586531),D>=r&&(r=D,Q=t.T*w.Math.tan(4.712388981-r)/2,P.a=-(Q*w.Math.sin(f)),P.b=-(Q*w.Math.cos(f)))));return s}function U$(t,e,A){var n,P,r,i,f,D;for(n=c(F,k,6,4,15,1),f=0;f<Ht(t.R,e);f++)n[f]=_(t.R,e,A[f]);for(Ht(t.R,e)==3&&(n[3]=e),P=k1(Ut,[T0,Tt],[15,6],15,[3,3],2),i=0;i<3;i++)P[i][0]=kt(t.R,n[i+1])-kt(t.R,n[0]),P[i][1]=pt(t.R,n[i+1])-pt(t.R,n[0]),P[i][2]=vA(t.R,n[i+1])-vA(t.R,n[0]);return D=c(Ut,Tt,6,3,15,1),D[0]=P[0][1]*P[1][2]-P[0][2]*P[1][1],D[1]=P[0][2]*P[1][0]-P[0][0]*P[1][2],D[2]=P[0][0]*P[1][1]-P[0][1]*P[1][0],r=(P[2][0]*D[0]+P[2][1]*D[1]+P[2][2]*D[2])/(w.Math.sqrt(P[2][0]*P[2][0]+P[2][1]*P[2][1]+P[2][2]*P[2][2])*w.Math.sqrt(D[0]*D[0]+D[1]*D[1]+D[2]*D[2])),r>0?1:2}function wj(t,e){var A,n,P,r,i,f,D,Q,o,L,s;for(ut(t,7),ut(e,7),this.c=t,this.d=new bi,n=0;n<t.g;n++)K8(this.d,new u5(t,n));for(A=0;A<e.g;A++)o=new u5(e,A),D=(f=ar(this.d,o),f<0?-1:f),D==-1?(o.i=(tr(),sl),K8(this.d,o)):JX(k9(this.d,D),o);for(i=this.d.d.a.length-1;i>=0;i--)o=k9(this.d,i),o.i!=(tr(),ll)?k9(this.d,i).i==Ro&&tU(this.d,i):o.i=yl;for(this.b=c(F,k,6,t.f,15,1),r=0;r<t.f;r++)for(Q=0;Q<e.f;Q++)if(w.Math.abs(e.w[Q])==w.Math.abs(t.w[r])){P=(s=Cn(t,r),s+WA(t,r,s,t.C[r])-x1(t,r)-(L=Cn(e,Q),L+WA(e,Q,L,e.C[Q])-x1(e,Q))),this.b[r]=P>0?P:0;break}this.e=new qi}function gj(t,e,A,n,P){var r,i,f,D,Q,o,L,s,y,l,h;for(f=0;f<A;f++)if(n[f]!=-1&&t.e[f]>3&&(t.u[f]&Tn)!=0){for(h=0,s=-1,L=-1,o=0;o<t.e[f];o++)P[t.k[f][o]]!=-1?++h:t.n[f][o]==1&&p9(t,t.k[f][o])&&t.D[0][t.k[f][o]]==f&&(s=t.k[f][o],L=t.i[f][o]);if(s!=-1&&h>=3){for(r=bA(t.J[f].a,t.J[f].b,t.J[L].a,t.J[L].b),y=10,l=-1,Q=0;Q<t.e[f];Q++)t.n[f][Q]==1&&(!p9(t,t.k[f][Q])||t.D[0][t.k[f][Q]]==f)&&P[t.k[f][Q]]!=-1&&(i=w.Math.abs(Je(r,Y0(t,f,t.i[f][Q]))),y>i&&(y=i,l=t.k[f][Q]));l!=-1&&(D=P[l],w0(e,D,t.H[l]==257?129:257),t.D[0][l]!=f&&(gD(e,1,D,n[t.D[0][l]]),gD(e,0,D,n[f])))}}}function dj(t){var e,A,n,P;for(GD.call(this),e=0;e!=-1&&(A=t.indexOf('=\"',e),A!=-1);)if(n=(Ct(e+1,A,t.length),t.substr(e+1,A-(e+1))),e=t.indexOf('\"',A+2),P=e==-1?(Gt(A+1,t.length+1),t.substr(A+1)):(Ct(A+1,e,t.length),t.substr(A+1,e-(A+1))),at(n,\"x1\"))try{this.i[0].a=on(P)}catch(r){if(r=a1(r),!Xt(r,40))throw At(r)}else if(at(n,\"y1\"))try{this.i[0].b=on(P)}catch(r){if(r=a1(r),!Xt(r,40))throw At(r)}else if(at(n,\"x2\"))try{this.i[1].a=on(P)}catch(r){if(r=a1(r),!Xt(r,40))throw At(r)}else if(at(n,\"y2\"))try{this.i[1].b=on(P)}catch(r){if(r=a1(r),!Xt(r,40))throw At(r)}}function O5(t,e,A){var n,P,r,i,f,D;if(e.l==0&&e.m==0&&e.h==0)throw At(new p8(\"divide by zero\"));if(t.l==0&&t.m==0&&t.h==0)return A&&(In=S0(0,0,0)),S0(0,0,0);if(e.h==h8&&e.m==0&&e.l==0)return GJ(t,A);if(D=!1,e.h>>19!=0&&(e=Z9(e),D=!D),i=qX(e),r=!1,P=!1,n=!1,t.h==h8&&t.m==0&&t.l==0)if(P=!0,r=!0,i==-1)t=dg((K9(),a4)),n=!0,D=!D;else return f=D5(t,i),D&&WL(f),A&&(In=S0(0,0,0)),f;else t.h>>19!=0&&(r=!0,t=Z9(t),n=!0,D=!D);return i!=-1?tJ(t,i,D,r,A):RT(t,e)<0?(A&&(r?In=Z9(t):In=S0(t.l,t.m,t.h)),S0(0,0,0)):gW(n?t:S0(t.l,t.m,t.h),e,D,r,P,A)}function s2(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l;if(i=t.e,D=e.e,i==0)return e;if(D==0)return t;if(r=t.d,f=e.d,r+f==2)return A=V(t.a[0],T1),n=V(e.a[0],T1),i==D?(o=I1(A,n),l=Jt(o),y=Jt(DA(o,32)),y==0?new kA(i,l):new oe(i,2,B(d(F,1),k,6,15,[l,y]))):(ke(),lu(i<0?l0(n,A):l0(A,n),0)?we(i<0?l0(n,A):l0(A,n)):FP(we(p0(i<0?l0(n,A):l0(A,n)))));if(i==D)s=i,L=r>=f?mL(t.a,r,e.a,f):mL(e.a,f,t.a,r);else{if(P=r!=f?r>f?1:-1:rQ(t.a,e.a,r),P==0)return ke(),yr;P==1?(s=i,L=vL(t.a,r,e.a,f)):(s=D,L=vL(e.a,f,t.a,r))}return Q=new oe(s,L.length,L),Rn(Q),Q}function NQ(t,e){var A,n,P,r,i,f,D,Q,o,L,s;if(t.D.d.a.length==t.t)return null;L=c(F,k,6,t.v.length,15,1),n=c(F,k,6,t.u.length,15,1),P=0;do{if(P++==64)return null;if(e&&t.D.d.a.length==0){for(o=0;o<t.u.length;o++)n[o]=TG(t.u[o]);for(A=_8(t.i,n),Q=0;Q<t.v.length;Q++)L[Q]=A.a[Q]}else if(t.b){for(D=P/64,o=0;o<t.u.length;o++)n[o]=WJ(t.u[o],jn(t.c),D);for(A=_8(t.i,n),Q=0;Q<t.v.length;Q++)L[Q]=Fz(A,Q,jn(t.c),D)}else{for(f=0;f<t.u.length;f++)n[f]=yQ(t.c,t.u[f].b.length);for(i=0;i<t.v.length;i++)L[i]=yQ(t.c,t.v[i].d.length)}s=Nu(t,L,n)}while(r=ar(t.D,s),(r<0?-1:r)!=-1);return s}function Ks(t,e,A){var n,P,r,i,f;if(e==A||t.a[e]!=t.a[A]||t.o[e]!=0&&(t.o[e]==3||t.o[A]==3||t.p[e]^t.o[e]!==t.o[A]||t.k[e]!==t.k[A]||t.j[e]!==t.j[A])||(n=u1(t.i,e,A),n!=-1&&(dt(t.i,n)==1&&t.c[n]!=0||dt(t.i,n)==2&&t.c[n]==1)))return!1;if($1(t.i,e)==1&&!vn(t.i,e)){for(P=-1,f=0;f<O(t.i,e);f++)if(_(t.i,e,f)!=A&&CA(t.i,e,f)==2){P=xt(t.i,e,f);break}for(r=-1,i=0;i<O(t.i,A);i++)if(_(t.i,A,i)!=e&&CA(t.i,A,i)==2){r=xt(t.i,A,i);break}if(P!=-1&&t.c[P]!=0&&t.d[P]^t.c[P]===t.c[r])return!1}return!0}function L$(t){var e,A,n,P,r,i,f;r=Ae(t.u,t.a),n=l1(t.u,t.a)==8||O8(t.u,t.a)?6:dt(t.u,t.a),((r&1)!=0||n==1)&&uA(t.k,!0),((r&2)!=0||n==2)&&uA(t.c,!0),((r&4)!=0||n==3)&&uA(t.n,!0),((r&32)!=0||n==4)&&uA(t.i,!0),((r&64)!=0||n==5)&&uA(t.j,!0),((r&8)!=0||n==6)&&uA(t.b,!0),((r&16)!=0||n==0)&&uA(t.g,!0),(r&Mf)!=0&&uA(t.e,!0),(r&c8)!=0&&uA(t.f,!0),f=r&384,e=r&Ao,f==128?Wt(t.q,1):e==IA?Wt(t.q,4):f==256?Wt(t.q,e==0?2:3):Wt(t.q,e==0?0:5),i=(r&qP)>>17,Wt(t.r,i==0?0:i<=2?i+5:i-2),(r&l8)!=0?(uA(t.d,!0),P=(r&7680)>>9,A=(r&cy)>>13,Wt(t.p,P),tT(t,P),Wt(t.o,A)):Wt(t.o,0),gb(t)}function Bj(t,e,A,n,P){var r,i,f,D,Q,o,L,s;for(em.call(this,t),this.f=P,this.g=A,this.i=c(zt,ee,16,A.length,0,2),this.d=c(zt,ee,16,A.length,0,2),this.e=c(Ut,T0,15,A.length,0,2),f=c(zt,nA,37,A.length,0,3),i=0;i<A.length;i++)s=A[i].d,this.i[i]=fL(s,s.length),D=A[i].c,this.d[i]=fL(D,D.length),this.e[i]=c(Ut,Tt,6,this.i[i].length,15,1),f[i]=A[i].e;for(this.a=c(F,k,6,A.length,15,1),o=c(Pt,ft,6,e.length,16,1),r=0;r<A.length;r++)utt(this,A[r],r,o,n,f[r]);for(Q=0;Q<e.length;Q++)if(!o[Q])for(L=0;L<e[Q].c.length;L++)sD(this,e[Q].e[e[Q].c[L]],J0(e[Q].b[n[Q]],e[Q].c[L]));this.c=new f1}function Xs(t,e,A,n,P){var r,i,f,D,Q,o,L,s,y,l,h,T;for(r=c(F,f0,7,t.j.a.length,0,2),Q=0;Q<t.j.a.length;Q++)for(r[Q]=c(F,k,6,N(t.j,Q).length,15,1),o=0;o<N(t.j,Q).length;o++)r[Q][o]=-1;for(h=c(F,k,6,t.i.g,15,1),y=0;y<t.k.a.length;y++)if(l=N(t.k,y),l.length==3||l.length>=5&&l.length<=7)for(D=0;D<l.length;D++)f=l[D],O(t.i,z(t.i,0,f))==3&&O(t.i,z(t.i,1,f))==3&&(h[f]>0?(r[h[f]>>>16][h[f]&32767]=y,r[y][D]=h[f]>>>16):h[f]=(y<<16)+y8+D);for(i=c(Pt,ft,6,t.j.a.length,16,1),T=0,L=-1;T>L;)for(L=T,s=0;s<t.j.a.length;s++)i[s]||_a(t,s,r,i,e,A,n,P)&&(i[s]=!0,++T)}function s$(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R,j,C;if(A<2)return A;for(R=c(Pt,T0,12,A,0,2),l=1;l<A;l++)R[l]=c(Pt,ft,6,l,16,1);for(i=rn(t.V,24*t.ab),P=1;P<t.V.q;P++)for(r=0;r<P;r++)D=kt(t.V,r)-kt(t.V,P),Q=pt(t.V,r)-pt(t.V,P),f=w.Math.sqrt(D*D+Q*Q),f<oo*i&&(L=e[P],s=e[r],L!=s&&(L>s?R[L][s]=!0:R[s][L]=!0));for(C=c(F,k,6,A,15,1),o=0;o<A;o++)C[o]=o;for(b=0,y=1;y<A;y++)for(g=0;g<y;g++)if(R[y][g]&&(h=C[y],T=C[g],h!=T))for(++b,j=w.Math.min(h,T),v=w.Math.max(h,T),m=0;m<A;m++)C[m]==v?C[m]=j:C[m]>v&&--C[m];for(n=0;n<t.V.q;n++)e[n]=C[e[n]];return A-b}function OQ(t,e,A){var n,P,r,i,f,D,Q,o,L;return t==null?null:(D=t,o=null,Q=null,L=null,f=null,n=t.indexOf(k0(35)),n==-1?D=t:(D=(Ct(0,n,t.length),t.substr(0,n)),P=t.indexOf(k0(35),n+1),P==-1?o=(Gt(n+1,t.length+1),t.substr(n+1)):(o=(Ct(n+1,P,t.length),t.substr(n+1,P-(n+1))),r=t.indexOf(k0(35),P+1),r==-1?Q=(Gt(P+1,t.length+1),t.substr(P+1)):(Q=(Ct(P+1,r,t.length),t.substr(P+1,r-(P+1))),i=t.indexOf(k0(35),r+1),i==-1?L=(Gt(r+1,t.length+1),t.substr(r+1)):(L=(Ct(r+1,i,t.length),t.substr(r+1,i-(r+1))),f=(Gt(i+1,t.length+1),t.substr(i+1)))))),ip(D,o,Q,L,f,e,A))}function G5(t,e,A,n,P,r,i,f){var D,Q,o,L,s,y,l,h,T,g;for(e!=n&&(T=t.J[e].a-t.J[n].a,g=t.J[e].b-t.J[n].b,f=w.Math.sqrt(T*T+g*g)),D=e,o=$u(t,e)!=3,h=1;h<A;h++){for(s=t.J[D].a+f*w.Math.sin(r),y=t.J[D].b+f*w.Math.cos(r),l=-1,L=0;L<t.q;L++)if(w.Math.abs(s-t.J[L].a)<4&&w.Math.abs(y-t.J[L].b)<4){l=L;break}l==-1&&(l=W0(t,s,y,0),t.J[l].a=s,t.J[l].b=y,t.J[l].c=0),Q=Jm(t,D,l),Q==-1&&(Q=O0(t,D,l,_0(t,D)||_0(t,l)?16:1),P&&(o&&$u(t,t.D[0][Q])<4&&$u(t,t.D[1][Q])<3&&(t.H[Q]=2),o=!o)),D=l,r+=i}Q=Jm(t,D,n),Q==-1&&(Q=O0(t,D,n,_0(t,D)||_0(t,n)?16:1)),P&&o&&$u(t,t.D[0][Q])<4&&$u(t,t.D[1][Q])<4&&(t.H[Q]=2)}function vj(t){var e,A,n,P,r,i,f,D,Q,o;fk();var L,s;for(ut(t,7),this.a=c(Ee,PA,6,t.r,15,1),this.b=c(Ee,PA,6,t.r,15,1),L=0;L<t.r;L++)s=(e=t.D[0][L],A=t.D[1][L],n=t.C[e],P=t.C[A],r=t.j[e],i=t.j[A],Gz(dt(t,L),L<t.g&&Re(t.p,L),L<t.g&&(E8(t.p,L)||t.H[L]==8),n,P,RF(t,e),RF(t,A),r,i,!1)),s==-1?(this.a[L]=(f=X(t,t.D[0][L]),D=X(t,t.D[1][L]),(f<(l2(),Of).length?Of[f]:f<xA.length?Do*xA[f]:jy)+(D<Of.length?Of[D]:D<xA.length?Do*xA[D]:jy)),this.b[L]=(Q=X(t,t.D[0][L]),o=X(t,t.D[1][L]),(Q<Of.length?x6:.125)+(o<Of.length?x6:.125))):(this.a[L]=s==-1?2.000499963760376:j4[s],this.b[L]=s==-1?1:p4[s])}function Zs(t,e,A,n){var P,r,i,f;fU(this),e?(n&yy)==0?N9(e,t.c,t.d)&&N9(e,t.c+t.b,t.d+t.a)||((t.b>e.b||t.a>e.a)&&(r=e.b/t.b,f=e.a/t.a,this.c=w.Math.min(r,f)),t.c*this.c<e.c?this.a=e.c-t.c*this.c:(t.c+t.b)*this.c>e.c+e.b&&(this.a=e.c+e.b-(t.c+t.b)*this.c),t.d*this.c<e.d?this.b=e.d-t.d*this.c:(t.d+t.a)*this.c>e.d+e.a&&(this.b=e.d+e.a-(t.d+t.a)*this.c)):(r=e.b/t.b,f=e.a/t.a,i=n&c1,i==0?i=24:(n&I0)!=0&&(i/=256),P=i/A,this.c=w.Math.min(P,w.Math.min(r,f)),this.a=e.c+e.b/2-this.c*(t.c+t.b/2),this.b=e.d+e.a/2-this.c*(t.d+t.a/2)):(n&u0)!=0&&(i=(n&c1)!=0?n&c1:24,this.c=i/A)}function J5(t,e){var A,n,P,r,i,f,D,Q,o,L,s;if(L=b2,e!=-1){for(A=c(Ut,Tt,6,9,15,1),i=0;i<De(t.V,e);i++)A[i]=Y0(t.V,e,_(t.V,e,i));if(De(t.V,e)==1)A[0]<-2.6179938779914944?L=AA:A[0]<eo?L=b2:A[0]<t4?L=AA:A[0]<0?L=b2:A[0]<B2?L=g6:A[0]<RA?L=Uo:A[0]<2.6179938779914944?L=g6:L=Uo;else{for(f=De(t.V,e)-1;f>0;f--)for(D=0;D<f;D++)A[D]>A[D+1]&&(s=A[D],A[D]=A[D+1],A[D+1]=s);for(A[De(t.V,e)]=A[0]+F0,o=0,Q=0,r=0;r<De(t.V,e);r++)n=A[r+1]-A[r],Q<n&&(Q=n,o=r);L=(A[o]+A[o+1])/2}}P=rn(t.V,24*t.ab),t.ib=(e==-1?t.hb:kt(t.V,e))+P*w.Math.sin(L),t.lb=(e==-1?t.kb:pt(t.V,e))+P*w.Math.cos(L)}function y$(t,e){var A,n,P,r,i,f,D,Q,o;for(Di(t),Q=new YA(t.R.f,t.R.g),je(Q,t.R.K),i=0;i<t.R.f;i++)En(t.R,Q,t.B[i],0,0),Me(Q,i,t.bb[t.B[i]],t.ab[t.B[i]]);for(f=0;f<t.R.g;f++)iQ(t.R,Q,t.C[f],0,0,t.H,!1),!(Q.H[f]==257||Q.H[f]==129)&&Q.D[0][f]>Q.D[1][f]&&(o=Q.D[0][f],gD(Q,0,f,Q.D[1][f]),Q.D[1][f]=o,Q.T=0),U8(Q,f,t.n[t.C[f]],t.k[t.C[f]]);if(e)for(r=0;r<t.R.f;r++)for(A=t.B[r],D=O(t.R,A);D<Ht(t.R,A);D++)P=En(t.R,Q,_(t.R,A,D),0,0),e9(t.R,Q,xt(t.R,A,D),0,0,t.H[A],P,!1);for(n=0;n<Q.r;n++)A=Q.D[0][n],t.eb[t.B[A]]&&(Q.H[n]==257?(Q.H[n]=129,Q.T=0):Q.H[n]==129&&(Q.H[n]=257,Q.T=0));return kU(t.R,Q),Q.T&=-9,Q}function GQ(t,e,A,n,P){var r,i,f,D,Q,o,L,s,y,l,h;if(Q=c(F,k,6,2,15,1),D=c(Ut,Tt,6,2,15,1),Q[0]=t.D[0][e],Q[1]=t.D[1][e],x1(t,Q[0])>3||x1(t,Q[1])>3)return!1;for(i=0,r=c(Ut,Tt,6,4,15,1),s=0;s<t.r;s++)if(s!=e){for(y=0;y<2;y++){for(l=0;l<2;l++)if(t.D[y][s]==Q[l]){if(i==4){i=5;break}r[i++]=Y0(t,Q[l],t.D[1-y][s])}if(i==5)break}if(i==5)break}if(i==5)return!1;for(D[0]=Y0(t,Q[0],Q[1]),D[0]<0?(D[1]=D[0]+U1,f=0):(D[1]=D[0],D[0]=D[1]-U1,f=1),h=0,L=0;L<i;L++)r[L]>D[0]&&r[L]<D[1]?--h:++h;return f=h>0?1-f:f,o=U1*(A-2)/A,G5(t,Q[f],A-1,Q[1-f],n,D[h>0?0:1]+U1-o,U1-o,P),t.T=0,!0}function z5(t,e){var A;Xt(e,137)?K_(t,e):Xt(e,156)&&(A=e.b,e.j==1&&(A==-9&&t.b>=17?m0(t,t.b-17):A==-10&&t.b<17?m0(t,t.b+17):A==-11&&t.b%17>0?m0(t,t.b-1):A==-12&&t.b%17<16?m0(t,t.b+1):A==122?m0(t,18):A==32?m0(t,2):A==48?m0(t,4):A==116?m0(t,21):A==49?m0(t,5):A==50?m0(t,22):A==109?m0(t,19):A==51?m0(t,7):A==52?m0(t,24):A==53?m0(t,8):A==54?m0(t,25):A==55?m0(t,9):A==97?m0(t,26):A==45?m0(t,27):A==43?m0(t,10):A==117?m0(t,6):A==100?m0(t,23):A==99?m0(t,11):A==110?m0(t,12):A==112?m0(t,29):A==111?m0(t,13):A==115?m0(t,30):A==102?m0(t,14):A==108?m0(t,31):A==98?m0(t,15):A==105?m0(t,32):A==104?m0(t,16):A==46&&m0(t,33)))}function Z1(t,e){if(!t.K&&(e==-10&&(t.C=-999,e=t.Q),e!=-2&&e!=-7&&t.N!=0&&(e=-4),e!=t.C&&!(t.C==-8&&e!=-9)))switch(e==-8&&(t.O=t.C),e==-9&&(e=t.O),t.C=e,e){case 0:t.Bb(t.F==0?qn:t.F);break;case-6:t.Bb(t.F);break;case-4:t.Bb(t.N);break;case-2:t.Bb(t.t);break;case-3:t.Bb(t.u);break;case-7:t.Bb(t.H);break;case-8:t.Bb(t.I);break;case-5:t.Bb(t.P);break;case 64:t.Bb(-14655233);break;case 128:t.Bb(IP);break;case 256:t.Bb(-4194049);break;case 192:t.Bb(-16711936);break;case 320:t.Bb(-24576);break;case 384:t.Bb(-16744448);break;case 448:t.Bb(-6291456);break;case 1:t.Bb(fy);break;default:t.Bb(qn)}}function l$(t){var e,A,n,P,r,i,f,D,Q,o,L,s;for(o=new f3,L=0;L<t.i.f;L++)if($1(t.i,L)<2||O(t.i,L)>2)for(i=1;i<O(t.i,L);i++)for(e=_(t.i,L,i),f=0;f<i;f++)A=_(t.i,L,f),Ks(t,e,A)&&(D=yp(t,e,A),D&&uF(D,t.f)&&ze(o.a,D,(kr(),wo))==null);for(s=0;s<t.i.g;s++)t.c[s]!=0&&(dt(t.i,s)!=2||t.c[s]!=2)||(e=z(t.i,0,s),A=z(t.i,1,s),Ks(t,e,A)&&(D=yp(t,e,A),D&&uF(D,t.f)&&ze(o.a,D,(kr(),wo))==null));for(t.g=c(F,f0,7,o.a.c,0,2),t.e=c(Pt,ft,6,t.i.f,16,1),r=0,Q=(P=new x8(new I8(new wr(o.a).a).b),new gr(P));Cr(Q.a.a);)for(D=(n=B9(Q.a),n.ed()),t.g[r++]=D.b,i=0;i<D.b.length;i++)t.e[D.b[i]]=!0}function h$(t,e){var A,n,P,r,i,f,D,Q,o,L,s;if(dt(t,e)!=1||e<t.g&&Re(t.p,e)||(t.p&&e<t.g?yP(t.p,e):0)==3)return!1;for(A=c(F,k,6,2,15,1),f=0;f<2;f++)if(A[f]=t.D[f][e],(t.u[A[f]]&I0)!=0||e0(t,A[f])<=1)return!1;if(XU(t,A[0])||XU(t,A[1])){for(L=c(F,k,6,1,15,1),L[0]=e,n=c(F,f0,7,2,0,2),D=0;D<2;D++)if(XU(t,A[D])&&(n[D]=c(F,k,6,2,15,1),n[D][0]=A[1-D],n[D][1]=A[D],!c5(t,A[1-D],n[D],L)))return!1;if(e!=L[0])return!1;for(Q=0;Q<2;Q++)n[Q]!=null&&(A[Q]=n[Q][1])}for(i=0;i<2;i++){if(r=t.j[A[i]],r==1)return!1;for(s=0,o=0;o<r;o++)P=t.i[A[i]][o],(t.u[P]&I0)!=0||++s;if(s<2)return!1}return!0}function Fj(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l;for(D=c(F,k,6,32,15,1),Q=0,n=0;n<t.R.f;n++)(t._[n]==1||t._[n]==2)&&t.bb[n]==e&&(f=t.ab[n],D[f]<t.f[n]&&(D[f]==0&&++Q,D[f]=t.f[n]));for(r=0;r<t.R.g;r++)(t.j[r]==1||t.j[r]==2)&&t.n[r]==e&&l1(t.R,r)==1&&(f=t.k[r],l=w.Math.max(t.f[z(t.R,0,r)],t.f[z(t.R,1,r)]),D[f]<l&&(D[f]==0&&++Q,D[f]=l));for(i=c(E,q,6,32,15,1),o=0;o<Q;o++){for(s=-1,y=0,L=0;L<32;L++)y<D[L]&&(y=D[L],s=L);D[s]=0,i[s]=o<<24>>24}for(A=0;A<t.R.f;A++)(t._[A]==1||t._[A]==2)&&t.bb[A]==e&&(t.ab[A]=i[t.ab[A]]);for(P=0;P<t.R.g;P++)(t.j[P]==1||t.j[P]==2)&&t.n[P]==e&&l1(t.R,P)==1&&(t.k[P]=i[t.k[P]])}function T$(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y;for(ut(t.k,7),L=!1,s=c(F,k,6,2,15,1),y=c(F,k,6,2,15,1),o=c(F,k,6,2,15,1),n=0;n<t.k.g;n++)if(!$P(t.k,n)&&l1(t.k,n)==2){for(i=0;i<2;i++){for(s[i]=-1,o[i]=-1,e=z(t.k,i,n),Q=0;Q<O(t.k,e);Q++)P=xt(t.k,e,Q),P!=n&&(s[i]==-1&&(l1(t.k,P)==257||l1(t.k,P)==129)?(s[i]=_(t.k,e,Q),y[i]=P):o[i]=_(t.k,e,Q));if(s[i]==-1)break}if(s[0]!=-1&&s[1]!=-1){for(D=l1(t.k,y[0])==l1(t.k,y[1]),f=0;f<2;f++)s[f]==z(t.k,0,y[f])&&(D=!D);for(r=0;r<2;r++)o[r]!=-1&&o[r]<s[r]&&(D=!D);P8(t.k,n,D?2:1,!1),L=!0}}for(A=0;A<t.k.g;A++)(l1(t.k,A)==257||l1(t.k,A)==129)&&w0(t.k,A,1);return L}function mj(t){for(var e,A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m;;){for(m=0,y=0,T=null,g=null,i=1;i<t.d.a.length;i++)for(n=N(t.d,i),f=0;f<i;f++){for(P=N(t.d,f),e=0,A=0,l=0,h=0,o=0;o<n.e.length;o++)for(s=0;s<P.e.length;s++)n.e[o]==P.e[s]&&(++A,e=n.e[o],l<n.k[o]&&(l=n.k[o]),h<P.k[s]&&(h=P.k[s]));if(A>0&&(r=A==1&&qL(t,n,e)==1&&qL(t,P,e)==1?0:1,l>h?D=(r<<24)+(l<<16)+(h<<8)+A:D=(r<<24)+(h<<16)+(l<<8)+A,m<D)){for(m=D,y=A,l=0,h=0,L=0;L<n.e.length;L++)l<n.k[L]&&(l=n.k[L]);for(Q=0;Q<P.e.length;Q++)h<P.k[Q]&&(h=P.k[Q]);l>h?(T=n,g=P):(T=P,g=n)}}if(m==0)break;y==T.e.length?X8(t.d,T):y==g.e.length?X8(t.d,g):uW(t,T,g,y)}}function Ws(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l;if(t.d>1){for(Q=c(Ut,Tt,6,t.d,15,1),o=c(Ut,Tt,6,t.d,15,1),L=c(Ut,Tt,6,t.d,15,1),D=c(Ut,Tt,6,t.d,15,1),i=0;i<t.d;i++)L[i]=xf,D[i]=-1e9;for(n=0;n<e.k.length;n++)Q[t.e[n]]+=e.k[n].a,o[t.e[n]]+=e.k[n].b,L[t.e[n]]>e.k[n].c&&(L[t.e[n]]=e.k[n].c),D[t.e[n]]<e.k[n].c&&(D[t.e[n]]=e.k[n].c);for(f=0;f<t.d;f++)Q[f]/=t.f[f],o[f]/=t.f[f];for(s=c(Ut,Tt,6,t.d,15,1),y=c(Ut,Tt,6,t.d,15,1),l=c(Ut,Tt,6,t.d,15,1),r=1;r<t.d;r++)s[r]=Q[0]-Q[r],y[r]=o[0]-o[r],l[r]=l[r-1]+D[r-1]-L[r]+3;for(A=0;A<e.k.length;A++)t.e[A]!=0&&(P=e.k[A],P.a+=s[t.e[A]],P.b+=y[t.e[A]],P.c+=l[t.e[A]])}}function vf(t){var e,A,n,P,r,i,f,D;for(i=0;i<t.r;i++)t.H[i]==512&&(A=t.D[0][i],n=t.D[1][i],t.C[A]==-1^t.C[n]==-1&&t.s[A]!=0&&t.s[n]!=0&&t.s[A]<0^t.s[n]<0&&(t.s[A]<0?(++t.s[A],--t.s[n]):(--t.s[A],++t.s[n])));for(D=c(F,k,6,t.q,15,1),P=0,e=0;e<t.q;e++){if(t.C[e]==-1){D[e]=-1;continue}P<e&&(t.C[P]=t.C[e],t.s[P]=t.s[e],t.A[P]=t.A[e],t.u[P]=t.u[e],t.B[P]=t.B[e],t.w[P]=t.w[e],mD(t.J[P],t.J[e]),t.v!=null&&(t.v[P]=t.v[e]),t.t!=null&&(t.t[P]=t.t[e])),D[e]=P,++P}for(t.q=P,f=0,r=0;r<t.r;r++)t.H[r]!=512&&(t.H[f]=t.H[r],t.F[f]=t.F[r],t.G[f]=t.G[r],t.D[0][f]=D[t.D[0][r]],t.D[1][f]=D[t.D[1][r]],++f);return t.r=f,D}function It(t,e){var A,n,P,r,i,f,D,Q;if(t.K&&t0(V(t.B[e],N1),0)||!es(t,e))return 0;if(ut(t,1),t.K){if(gt(V(t.B[e],1),0)||t.v!=null&&t.v[e]!=null&&t.v[e].length>1)return 0;for(P=0;P<t.e[e];P++)if(zr(t.G[t.k[e][P]]&127)>1)return 0}if(t.C[e]==0||at(\"*\",t.t==null||t.t[e]==null?null:fn((i=t.t[e],c0(),i))))return t.e[e]==0?1:0;for(D=0,r=0;r<t.e[e];r++)(!t.K||t0(V(t.B[t.i[e][r]],a0),0))&&(D+=t.n[e][r]);if(t.K){for(A=1,n=0;n<t.j[e];n++)t.H[t.k[e][n]]==8&&++A;D+=A>>1}if(D-=WA(t,e,D,t.C[e]),f=((t.u[e]&d8)>>>27)-1,f==-1)for(Q=Ku(t.C[e]),f=Q[0],n=1;f<D&&n<Q.length;n++)f=Q[n];return w.Math.max(0,f-D)}function kj(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v;for(P=c(Ut,Tt,6,Ht(t.f,A)+1,15,1),i=c(F,k,6,Ht(t.f,A)+1,15,1),f=c(F,k,6,Ht(t.f,A)+1,15,1),T=f8(e,A),r=0,Q=0;Q<Ht(t.f,A);Q++)i[r]=_(t.f,A,Q),f[r]=xt(t.f,A,Q),L=f8(e,i[r]),L!=-1&&(P[r++]=sn(e.a[T],e.b[T],e.a[L],e.b[L]));if(r==1)return P[0]+U1;for(o=r-1;o>0;o--)for(s=0;s<o;s++)P[s]>P[s+1]&&(g=P[s],P[s]=P[s+1],P[s+1]=g,m=i[s],i[s]=i[s+1],i[s+1]=m,v=f[s],f[s]=f[s+1],f[s+1]=v);for(P[r]=P[0]+F0,i[r]=i[0],f[r]=f[0],y=-100,l=0,D=0;D<r;D++)n=P[D+1]-P[D],r>2&&fA(t.f,f[D])&&fA(t.f,f[D+1])&&(h=EX(t,i[D],A,i[D+1]),h!=0&&(n-=100-h)),y<n&&(y=n,l=D);return(P[l]+P[l+1])/2}function c$(t){var e,A,n;for(e=0;e<t.R.f;e++)t.db[e]==3&&!v9(t.R,e)&&sP(t.R,e),(ne(t.R,e)==1||ne(t.R,e)==2)&&t.db[e]==3&&sP(t.R,e),v9(t.R,e)&&t.db[e]!=3&&!DJ(t,e)&&sP(t.R,e);for(n=0;n<t.R.r;n++)p9(t.R,n)&&!QZ(t,n)&&sP(t.R,z(t.R,0,n));for(A=0;A<t.R.g;A++)dt(t.R,A)==2&&(M3(t.R,A)&&(t.o[A]==1||t.o[A]==2)&&(t.o[A]=3,w0(t.R,A,386)),t.o[A]==3&&!t.p[A]&&l1(t.R,A)!=386&&(sP(t.R,z(t.R,0,A)),sP(t.R,z(t.R,1,A)))),l1(t.R,A)==1&&t.o[A]==3&&!v9(t.R,z(t.R,0,A))&&!v9(t.R,z(t.R,1,A))&&(sP(t.R,z(t.R,0,A)),sP(t.R,z(t.R,1,A))),(cP(t.R,A)==1||cP(t.R,A)==2)&&(l1(t.R,A)!=1||t.o[A]!=1&&t.o[A]!=2)&&(sP(t.R,z(t.R,0,A)),sP(t.R,z(t.R,1,A)))}function w$(t){var e,A,n,P,r,i,f,D,Q;for(A=0;A<t.R.f;A++)$e(t.e[A],A),W1(t.e[A],2*t.c+4,j1(t.f[A],t.c+4));for(D=1;D<=t.U;D++){for(P=!1,n=0;n<t.R.f;n++)t.f[n]==D&&(P=P|ty(t,n,2));if(P){if(f=t.U,t.U=Zn(t),t.U!=f)return!0;for(e=0;e<t.R.f;e++)$e(t.e[e],e),W1(t.e[e],2*t.c+4,j1(t.f[e],t.c+4))}}for(Q=c(jtt,v2,173,t.R.g,0,1),i=0;i<Q.length;i++)Q[i]=new pv(t.f[z(t.R,0,i)],t.f[z(t.R,1,i)],i);for(Xi(Q,0,Q.length,null),r=0;r<Q.length;r++)if(JQ(t,Q[r].a,2)){for(;r+1<Q.length&&rF(Q[r],Q[r+1])==0;)JQ(t,Q[++r].a,2);if(f=t.U,t.U=Zn(t),t.U!=f)return!0;for(e=0;e<t.R.f;e++)$e(t.e[e],e),W1(t.e[e],2*t.c+4,j1(t.f[e],t.c+4))}return!1}function g$(t,e,A,n){var P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b;for(L=t.e[e]-A,b=-1,m=NaN,l=0;l<L;l++)if(G9(t,t.k[e][l],e)){b=l,m=Y0(t,e,t.i[e][l]);break}if(v=b==-1?0:1,i=null,v<L){for(i=c(Ut,Tt,6,L-v,15,1),Q=0,h=0;h<L;h++)h!=b&&(i[Q++]=Y0(t,e,t.i[e][h]));i.sort(Fe(gi.prototype.hd,gi,[]))}if(f=F0/w.Math.max(A,3),g=0,i!=null)if(i.length==1&&A==1)g=i[0];else{for(D=0,h=0;h<i.length;h++)P=h==0?i[i.length-1]-F0:i[h-1],r=i[h],D<r-P&&(D=r-P,g=P);f=D/(A+1)}for(y=0;y<A;y++)g+=f,s=g,v!=0&&(o=Je(s,m),w.Math.abs(o)<f/2&&(o<0?s=m-f/2:s=m+f/2)),T=t.i[e][L+y],Be(t,T,t.J[e].a+n*w.Math.sin(s)),Ie(t,T,t.J[e].b+n*w.Math.cos(s))}function bj(t){var e,A;if(t.K)for(ut(t,7),e=0;e<t.f;e++)(t.u[e]&cn)!=0&&(t0(V(t.B[e],120),8)&&(t.B[e]=V(t.B[e],-9)),t.B[e]=V(t.B[e],-4294967297)),e<t.f&&r0(t.p,e)?t.B[e]=V(t.B[e],{l:4194297,m:x0,h:1048571}):gt(V(t.B[e],2),0)&&(t.B[e]=V(t.B[e],-5)),(gt(V(t.B[e],fr),0)||gt(V(t.B[e],r9),0)&&t0(V(t.B[e],s8),0))&&t0(V(t.B[e],120),8)&&(t.B[e]=V(t.B[e],-9)),t.s[e]!=0&&(t.B[e]=V(t.B[e],-234881025)),x1(t,e)==(A=Cn(t,e),A+WA(t,e,A,t.C[e]))&&(t.B[e]=V(t.B[e],-4063233),t.B[e]=V(t.B[e],-0xf8000000001),t.B[e]=V(t.B[e],-1921),t.B[e]=V(t.B[e],-114689)),gt(V(t.B[e],a0),0)&&t.w[e]!=0&&Wu(t,t.w[e])}function Rj(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T;for(ut(t,7),D=new YA(t.f,t.g),f=k1(E,[xy,g8],[58,10],0,[t.f,8],2),n=c(F,k,6,t.f,15,1),P=c(Pt,ft,6,t.f,16,1),r=c(Pt,ft,6,t.g,16,1),h=0;h<t.f;h++){for(h!=0&&(Cu(P,P.length),Cu(r,r.length)),f[h][0]=c(E,q,6,2,15,1),f[h][0][0]=t.C[h]<<24>>24,f[h][0][1]=t.A[h]<<24>>24,n[0]=h,P[h]=!0,y=0,s=1,t.u[h]|=512,T=1;T<=7&&s<t.f;T++){for(l=s,Q=y;Q<s;Q++)for(A=n[Q],o=0;o<t.j[A];o++)i=t.i[A][o],P[i]||(P[i]=!0,n[l++]=i),r[t.k[A][o]]=!0;if(l==s)break;for(y=s,s=l,qj(t,D,r,!0,null),e=0;e<D.q;e++)D.s[e]=0,D.T=0,Ne(D,e,0);f[h][T]=Ln((L=me(new SA(D,16)),c0(),L))}t.u[h]&=-513}return f}function d$(t){var e,A,n,P,r,i,f,D,Q;for(f=null,D=B1(xi(t.D));D.length!=0;){if(A=D.indexOf(k0(44)),A==-1?(i=B1(D),D=\"\"):(i=B1((Ct(0,A,D.length),D.substr(0,A))),D=B1((Gt(A+1,D.length+1),D.substr(A+1)))),at(i,\"X\")){D.length!=0&&(D=\",\"),D=(L1(D),D+(L1(\"F,Cl,Br,I\"),\"F,Cl,Br,I\"));continue}if(e=(J1(),qA(i,321)),e!=0)if(e==1)RD(t.v,\"'H' cannot be part of an atom list and is removed.\");else if(f==null)f=c(F,k,6,1,15,1),f[0]=e;else{for(n=!1,r=0;r<f.length;r++)if(e==f[r]){n=!0;break}if(!n){for(Q=c(F,k,6,f.length+1,15,1),P=0;P<f.length;P++)Q[P]=f[P];Q[f.length]=e,f=Q}}}return f?.sort(Fe(D0.prototype.hd,D0,[])),f}function y2(t,e,A){var n,P,r,i,f,D,Q,o,L;for(r=0,Q=0;Q<A;){if(++r,P=t[e+Q],(P&192)==128)throw At(new YP(T4));if((P&128)==0)++Q;else if((P&224)==192)Q+=2;else if((P&240)==224)Q+=3;else if((P&248)==240)Q+=4;else throw At(new YP(T4));if(Q>A)throw At(new g9(T4))}for(i=c(lr,te,6,r,15,1),L=0,f=0,D=0;D<A;){for(P=t[e+D++],(P&128)==0?(f=1,P&=127):(P&224)==192?(f=2,P&=31):(P&240)==224?(f=3,P&=15):(P&248)==240?(f=4,P&=7):(P&252)==248&&(f=5,P&=3);--f>0;){if(n=t[e+D++],(n&192)!=128)throw At(new YP(\"Invalid UTF8 sequence at \"+(e+D-1)+\", byte=\"+(o=n>>>0,o.toString(16))));P=P<<6|n&63}L+=Ez(P,i,L)}return i}function jj(t){var e,A,n,P,r,i,f,D,Q,o;for(e=null,Q=null,i=0;i<t.f.g;i++)if(l1(t.f,i)==16){for(A=z(t.f,0,i),P=-1,f=0;f<t.d.a.length&&(P=f8(N(t.d,f),A),P==-1);f++);for(n=z(t.f,1,i),r=-1,D=0;D<t.d.a.length&&(r=f8(N(t.d,D),n),r==-1);D++);f!=D&&(f>D&&(o=f,f=D,D=o,o=P,P=r,r=o),Q==null&&(Q=c(GV,nA,463,t.d.a.length,0,2)),Q[D]==null&&(Q[D]=c(GV,{463:1,4:1,5:1,8:1},105,D,0,1)),Q[D][f]?(Q[D][f].c[0]+=nu(Q[D][f].b[0],P),Q[D][f].d[0]+=Pu(Q[D][f].b[0],P),Q[D][f].c[1]+=nu(Q[D][f].b[1],r),Q[D][f].d[1]+=Pu(Q[D][f].b[1],r),++Q[D][f].a[0],++Q[D][f].a[1]):(Q[D][f]=new MQ(N(t.d,f),N(t.d,D),P,r),!e&&(e=new f1),e.a.push(Q[D][f])))}return e}function B$(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m;for(m=c(F,k,6,t.j.g,15,1),h=0;h<e.j.a.length;h++){for(g=N(e.k,h),L=!0,D=0;D<g.length;D++)if(!t.e[g[D]]){L=!1;break}if(L)for(f=0;f<g.length;f++)++m[g[f]]}for(P=t.c,l=0;l<e.j.a.length;l++)for(i=!1,T=N(e.j,l),g=N(e.k,l),f=0;f<g.length&&!i;f++)if(m[g[f]]>1&&(r=F3(f,g.length),m[g[r]]==1)){for(Q=!1,y=F3(r,g.length);m[g[y]]==1;)(!Lf(t,T[y],!1)||g.length!=6&&X(t.j,T[y])!=6)&&(Q=!0),y=F3(y,g.length);if(!Q&&(n=y>r?y-r:y+g.length-r,n>2&&(n&1)==1)){for(s=1;s<n;s+=2)o=r+s<g.length?r+s:r+s-g.length,A&&(Lf(t,T[o],!0),Lf(t,T[o==T.length-1?0:o+1],!0)),aD(t,g[o]);i=!0}}return P!=t.c}function v$(t,e){var A,n,P,r,i,f,D,Q,o;return t==null?null:(f=t,Q=null,D=null,o=null,i=null,A=t.indexOf(k0(35)),A==-1?f=t:(f=(Ct(0,A,t.length),t.substr(0,A)),n=t.indexOf(k0(35),A+1),n==-1?Q=(Gt(A+1,t.length+1),t.substr(A+1)):(Q=(Ct(A+1,n,t.length),t.substr(A+1,n-(A+1))),P=t.indexOf(k0(35),n+1),P==-1?D=(Gt(n+1,t.length+1),t.substr(n+1)):(D=(Ct(n+1,P,t.length),t.substr(n+1,P-(n+1))),r=t.indexOf(k0(35),P+1),r==-1?o=(Gt(P+1,t.length+1),t.substr(P+1)):(o=(Ct(P+1,r,t.length),t.substr(P+1,r-(P+1))),i=(Gt(r+1,t.length+1),t.substr(r+1)))))),ip(f,(e&1)!=0?Q:null,(e&2)!=0?D:null,(e&4)!=0?o:null,(e&8)!=0?i:null,!1,null))}function pj(t,e,A){var n,P,r,i,f,D,Q;if(e&&e.g&&++t.B,e&&t.r>e.b&&(t.r=e.b),t.F)return vm(t);if(t.D.d.a.length==t.s)return null;if(e&&e.b>3){if(n=A?_8(t.i,e.d):null,i=A?n.c:null,r=A?i.a.length:0,ZZ(t,e),A)for(f=r;f<i.a.length;f++)Uq(le(A.a,G3(e.c)),VW(t.C,(ve(f,i.a.length),i.a[f]),n));e.g||(e.b<6?K8(t.w,e):(!t.e||t.e.b>e.b)&&(t.e=e)),++t.g}for(D=t.r+3,Q=JF(t,D,e);Q&&(P=iJ(Q,_8(t.i,Q.d).c),!(P<D));){if(P<6&&K8(t.A,new sg(Q,P)),++t.g,Cm(t.D,Q),t.D.d.a.length==t.s)return null;D=t.r+3,Q=JF(t,D,Q)}if(!Q){if(t.w.d.a.length!=0){for(t.F=!0;t.w.d.a.length!=0&&k9(t.w,t.w.d.a.length-1).b>t.r+3;)tU(t.w,t.w.d.a.length-1);Q=vm(t)}return Q}return Cm(t.D,Q),Q}function F$(t,e){var A,n,P,r,i,f,D,Q;A=(Q=t.n.Bc(),Q.getBackgroundRGB()),P=(W9(),(NA[0]*((A&rP)>>16)+NA[1]*((A&nP)>>8)+NA[2]*(A&255))/255<.5),n=P?s5(A,bf):A&qn|vt(w.Math.round(Do*((A&rP)>>16)))<<16|vt(w.Math.round(Do*((A&nP)>>8)))<<8|vt(w.Math.round(Do*(A&255))),i=P?s5(A,.5):A&qn|vt(w.Math.round(qf*((A&rP)>>16)))<<16|vt(w.Math.round(qf*((A&nP)>>8)))<<8|vt(w.Math.round(qf*(A&255))),D=xU(t.i),f=NU(t.i),XL(e,t.i,0,0,D,f,F8,F8,D/t.j,f/t.j),r=oF(20),XL(e,t.c,0,t.d*84,84,84,r[0],r[1],dn,dn),(t.a.U&4)==0&&FQ(t,e,19,-1,!0),(t.a.U&8)==0&&FQ(t,e,21,-1,!0),FQ(t,e,t.b,i,!1),t.f!=-1&&t.f!=t.k&&FQ(t,e,t.f,n,!1),t.k!=-1&&FQ(t,e,t.k,7167924,!1)}function Cj(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y;if(!t.b)return!1;for(i=null,s=null,D=new jL(null,null),P=1,D.a[1]=t.b,L=D;L.a[P];)Q=P,f=s,s=L,L=L.a[P],n=t.a.Rb(e,L.c),P=n<0?0:1,n==0&&(!A.c||Y8(L.d,A.d))&&(i=L),!(L&&L.b)&&!KP(L.a[P])&&(KP(L.a[1-P])?s=s.a[Q]=Zu(L,P):KP(L.a[1-P])||(y=s.a[1-Q],y&&(!KP(y.a[1-Q])&&!KP(y.a[Q])?(s.b=!1,y.b=!0,L.b=!0):(r=f.a[1]==s?1:0,KP(y.a[Q])?f.a[r]=ZB(s,Q):KP(y.a[1-Q])&&(f.a[r]=Zu(s,Q)),L.b=f.a[r].b=!0,f.a[r].a[0].b=!1,f.a[r].a[1].b=!1))));return i&&(A.b=!0,A.d=i.d,L!=i&&(o=new jL(L.c,L.d),_Y(t,D,i,o),s==i&&(s=o)),s.a[s.a[1]==L?1:0]=L.a[L.a[0]?0:1],--t.c),t.b=D.a[1],t.b&&(t.b.b=!1),A.b}function Y5(t,e,A){ki();var n,P,r,i,f;oW.call(this,t),this.a=new f1,this.b=new uj(t),ut(this.g,7),f=qu(Dl,e),r=t8(A.c,ZC)?oD(A.c.a.get(ZC)):100,n=t8(A.c,WC)?oD(A.c.a.get(WC)):1,P=t8(A.c,_C)&&VP(A.c.a.get(_C),\"distance\"),i=new vR(this.b),(!t8(A.c,$C)||Fi(A.c.a.get($C)))&&jP(this.a,MY(f,this.b)),(!t8(A.c,aC)||Fi(A.c.a.get(aC)))&&jP(this.a,cO(f,this.b)),(!t8(A.c,tH)||Fi(A.c.a.get(tH)))&&jP(this.a,BX(f,this.b,i,r,P,n)),(!t8(A.c,eH)||Fi(A.c.a.get(eH)))&&jP(this.a,hK(f,this.b)),(!t8(A.c,AH)||Fi(A.c.a.get(AH)))&&jP(this.a,BZ(f,this.b)),(!t8(A.c,nH)||Fi(A.c.a.get(nH)))&&jP(this.a,_Z(f,this.b)),(!t8(A.c,PH)||Fi(A.c.a.get(PH)))&&jP(this.a,MK(f,this.b,i,r))}function m$(t){var e,A,n,P,r;for(r=t.U,P=bn(t.f,t.R.f),t.R.K||(qZ(t),Gm(t,r,P)),t.bb=c(E,q,6,t.R.f,15,1),t.ab=c(E,q,6,t.R.f,15,1),A=0;A<t.R.f;A++)t.bb[A]=ne(t.R,A)<<24>>24,t.ab[A]=EA(t.R,A)<<24>>24;for(t.n=c(E,q,6,t.R.g,15,1),t.k=c(E,q,6,t.R.g,15,1),n=0;n<t.R.g;n++)t.n[n]=cP(t.R,n)<<24>>24,t.k[n]=Wi(t.R,n)<<24>>24;for(WW(t),t.Z=!1,t.M=c(Pt,ft,6,t.R.f,16,1),e=0;e<t.R.f;e++)t.db[e]!=0&&(t.M[e]=!0,t.Z=!0);Hz(t),t.P=null,t.cb=c(Pt,ft,6,t.R.f,16,1),t.Z&&(t.P=new xm(t.R,P,t.M,t.db,t.o,t.bb,t.ab,t.ib,t.q,t.cb),x_(t.P)),t.eb=c(Pt,ft,6,t.R.f,16,1),t.gb=c(Pt,ft,6,t.R.f,16,1),t.hb=new f1,t.P&&f2(t.P,t.f),d_(t),Gm(t,r,P),X_(t),t.P&&(t.K=cG(t.P)),la(t)}function k$(t){var e,A,n,P,r,i,f,D,Q,o,L,s;for(D=new Zt(t.d);D.a<D.c.a.length;)for(f=$t(D),Q=0;Q<f.f.length;Q++)if(n=f.f[Q],dt(t.f,n)==2&&(!$P(t.f,n)&&(qe(t.f,n)==3||qe(t.f,n)==0)&&n3(t.f,n),!fA(t.f,n)&&O(t.f,z(t.f,0,n))>1&&O(t.f,z(t.f,1,n))>1&&(qe(t.f,n)==1||qe(t.f,n)==2))){for(s=c(F,k,6,2,15,1),P=c(F,k,6,2,15,1),o=0;o<2;o++)for(s[o]=t.f.M,P[o]=z(t.f,o,n),L=0;L<Ht(t.f,P[o]);L++)r=_(t.f,P[o],L),r!=z(t.f,1-o,n)&&s[o]>r&&(s[o]=r);i=sn(f.a[f.g[P[0]]],f.b[f.g[P[0]]],f.a[f.g[P[1]]],f.b[f.g[P[1]]]),e=sn(f.a[f.g[s[0]]],f.b[f.g[s[0]]],f.a[f.g[P[0]]],f.b[f.g[P[0]]]),A=sn(f.a[f.g[P[1]]],f.b[f.g[P[1]]],f.a[f.g[s[1]]],f.b[f.g[s[1]]]),kL(i,e)<0^kL(i,A)<0^qe(t.f,n)==2&&aj(f,n)}}function b$(t,e,A){var n,P,r,i,f,D,Q,o,L;return r=mR(t,e),i=r[0],D=r[1],D.e==0?new jD(i,2):(Q=t.e*e.e,hT(e)<54?(f=(L=D.d>1?Sr(D.a[0],D.a[1]):Sr(D.a[0],0),D.e>0?L:p0(L)),P=(o=e.d>1?Sr(e.a[0],e.a[1]):Sr(e.a[0],0),e.e>0?o:p0(o)),n=pi(j1(G(f,0)<0?p0(f):f,1),G(P,0)<0?p0(P):P)?-1:E1(j1(G(f,0)<0?p0(f):f,1),G(P,0)<0?p0(P):P)?1:0,n=EQ(RQ(i,0)?1:0,Q*(5+n),A)):(n=rs(hm(D.e<0?D.e==0?D:new oe(-D.e,D.d,D.a):D),e.e<0?e.e==0?e:new oe(-e.e,e.d,e.a):e),n=EQ(RQ(i,0)?1:0,Q*(5+n),A)),n!=0?hT(i)<54?hO((o=i.d>1?Sr(i.a[0],i.a[1]):Sr(i.a[0],0),I1(i.e>0?o:p0(o),n))):(i=s2(i,(ke(),G(n,0)>=0?we(n):FP(we(p0(n))))),new jD(i,2)):new jD(i,2))}function Hj(t){var e,A,n,P,r,i,f,D,Q;switch(e=null,t.e){case 1:for(e=c(zt,_t,6,2*t.a.length,15,1),n=0;n<t.a.length;n++)e[n]=t.a[n],e[t.a.length+n]=180+t.a[n]<<16>>16;return e;case 2:for(P=t.a[0]==0?1:0,r=t.a[t.a.length-1]==180?t.a.length-1:t.a.length,Q=r-P,e=c(zt,_t,6,t.a.length+Q,15,1),i=0;i<t.a.length;i++)e[i]=t.a[i];for(f=P;f<r;f++)e[e.length-1-f+P]=360-t.a[f]<<16>>16;return e;case 3:for(P=t.a[0]==0?1:0,r=t.a[t.a.length-1]==90?t.a.length-1:t.a.length,Q=r-P,e=c(zt,_t,6,2*t.a.length+2*Q,15,1),D=0;D<t.a.length;D++)e[D]=t.a[D],e[t.a.length+Q+D]=180+t.a[D]<<16>>16;for(A=P;A<r;A++)e[t.a.length+Q-1-A+P]=180-t.a[A]<<16>>16,e[e.length-1-A+P]=360-t.a[A]<<16>>16;return e;default:return t.a}}function R$(t){var e,A,n,P,r,i,f,D,Q,o,L;for(L=new Zt(t.g);L.a<L.c.a.length;){for(Q=$t(L),A=0,r=0;r<O(t.k,Q.a);r++)t.c[xt(t.k,Q.a,r)]||++A;if(A!=0){for(Q.c=c(F,k,6,A,15,1),A=0,i=0;i<O(t.k,Q.a);i++)t.c[xt(t.k,Q.a,i)]||(D=_(t.k,Q.a,i),Q.c[A++]=t.q[D]<<16|D);for(Q.c.sort(Fe(D0.prototype.hd,D0,[])),P=0;P<Q.c.length;P++)Q.c[P]=c1&Q.c[P]}}for(n=c(Pt,ft,6,t.k.g,16,1),t.e=c(F,k,6,t.k.g,15,1),o=new Zt(t.g);o.a<o.c.a.length;)if(Q=$t(o),Q.c!=null){for(Q.d=c(Pt,ft,6,Q.c.length,16,1),P=0;P<Q.c.length;P++)for(f=0;f<O(t.k,Q.a);f++)if(Q.c[P]==_(t.k,Q.a,f))if(e=xt(t.k,Q.a,f),t.c[e])n[t.e[e]]=!1;else{for(t.c[e]=!0,Q.d[P]=!0,t.e[e]=1;n[t.e[e]];)++t.e[e];n[t.e[e]]=!0}}}function Mj(){if(ZT(),!ol)try{Yf=c(Ctt,T0,101,4,0,1),Lr=c(B4,T0,20,4,0,1),sr=c(B4,T0,20,4,0,1),Lr[0]=ti(\"/resources/toxpredictor/m1.txt\"),Lr[1]=ti(\"/resources/toxpredictor/t1.txt\"),Lr[2]=ti(\"/resources/toxpredictor/i1.txt\"),Lr[3]=ti(\"/resources/toxpredictor/r1.txt\"),sr[0]=ti(\"/resources/toxpredictor/m2.txt\"),sr[1]=ti(\"/resources/toxpredictor/t2.txt\"),sr[2]=ti(\"/resources/toxpredictor/i2.txt\"),sr[3]=ti(\"/resources/toxpredictor/r2.txt\"),Yf[0]=gs(\"/resources/toxpredictor/m3.txt\"),Yf[1]=gs(\"/resources/toxpredictor/t3.txt\"),Yf[2]=gs(\"/resources/toxpredictor/i3.txt\"),Yf[3]=gs(\"/resources/toxpredictor/r3.txt\"),ol=!0}catch(t){if(t=a1(t),Xt(t,19))z1();else throw At(t)}}function j$(t,e){var A,n,P,r,i,f,D;if(D=new fD,!ol)return mt(D.a,new Ze(\"Toxicity predictor not properly initialized.\",2)),D;if(i=me(new FA(t)),Yf[e].bc(i)!=-1)return _P(D,\"This molecule is known to be \"+WV[e]+\":\",2),mt(D.a,new Ze(i,1)),D;for(f=new bD(1),A=!1,n=new zA,r=0;r<Lr[e].a.length;r++)i2(new JA(!1),n,N(Lr[e],r)),un(f,t),yn(f,n),ln(f,1,f.c)>0&&(A||_P(D,\"High-risk fragments indicating \"+bo[e]+\":\",2),A=!0,_P(D,N(Lr[e],r),1));for(A=!1,P=0;P<sr[e].a.length;P++)i2(new JA(!1),n,N(sr[e],P)),un(f,t),yn(f,n),ln(f,1,f.c)>0&&(A||_P(D,\"Medium-risk fragments indicating \"+bo[e]+\":\",2),A=!0,_P(D,N(sr[e],P),1));return D.a.a.length==0&&_P(D,\"No indication for \"+bo[e]+\" found.\",2),D}function Vj(t,e,A,n,P,r){var i,f,D,Q,o,L,s,y,l;for(l=B(d(Ut,1),Tt,6,15,[0,0,0]),Q=B(d(Ut,1),Tt,6,15,[0,0,0]),f=B(d(F,1),k,6,15,[e.C[A],e.C[n],e.C[P]]),D=1.75,o=0;o<3;o++)switch(f[o]){case 1:l[o]=1.395;break;case 6:l[o]=2.494,Q[o]=1.016;break;case 7:l[o]=2.711,Q[o]=1.113;break;case 8:l[o]=3.045,Q[o]=1.337;break;case 9:l[o]=2.847;break;case 14:l[o]=2.35,Q[o]=.811;break;case 15:l[o]=2.35,Q[o]=1.068;break;case 16:l[o]=2.98,Q[o]=1.249;break;case 17:l[o]=2.909,Q[o]=1.078;break;case 35:l[o]=3.017;break;case 53:l[o]=3.086}return L=U2(t.a.d,e,A,n),s=U2(t.a.d,e,n,P),i=(L-s)*(L-s)/((L+s)*(L+s)),y=YC*r,D2(e,A,n,P,4)?D*=.85:D2(e,A,n,P,3)&&(D*=.05),D*l[0]*Q[1]*l[2]/((L+s)*y*y*w.Math.exp(2*i))}function p$(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g;if(e!=null)t.e=e;else for(t.e=c(Pt,ft,6,t.j.g,16,1),s=0;s<t.j.g;s++)l1(t.j,s)==8&&(t.e[s]=!0,w0(t.j,s,1));for(y=0;y<t.j.g;y++)t.e[y]&&++t.c;for(t.d=c(Pt,ft,6,t.j.f,16,1),t.f=c(Pt,ft,6,t.j.f,16,1),f=0;f<t.j.f;f++){for(l=0,h=0;h<O(t.j,f);h++)t.e[xt(t.j,f,h)]&&++l;l>0&&(t.d[f]=!0,++t.b,l==3&&(t.f[f]=!0))}for(t.i=c(Pt,ft,6,A.j.a.length,16,1),g=0;g<A.j.a.length;g++)for(t.i[g]=!0,Q=N(A.k,g),o=0,L=Q.length;o<L;++o)if(D=Q[o],!t.e[D]){t.i[g]=!1;break}for(t.g=c(Pt,ft,6,t.j.f,16,1),T=0;T<A.j.a.length;T++)if(t.i[T]&&N(A.k,T).length!=6)for(P=N(A.j,T),r=0,i=P.length;r<i;++r)n=P[r],N(A.k,T).length==5&&(t.g[n]=!0);t.k=0}function _s(t,e,A,n,P,r,i){var f,D,Q,o,L,s,y,l,h,T,g,m;for(y=0;y<e.j[A];y++)if(f=e.i[A][y],!r[f]&&(o=e.k[A][y],g=dt(e,o),n&&g>=2||!n&&g<=2)){for(r[f]=!0,i.add(m1(o)),l=0;l<e.j[f];l++)if(D=e.i[f][l],!r[D]&&(L=e.k[f][l],m=dt(e,L),e.o[f]+2==g+m&&(n&&m<=2||!n&&m>=2))){if(r[D]=!0,i.add(m1(L)),t.f[D]&&(X(t.i,D)==5||X(t.i,D)==6||X(t.i,D)==7||X(t.i,D)==8||X(t.i,D)==16||X(t.i,D)==34||X(t.i,D)==52)&&(!n||QQ(e,D))){for(s=new fs(t,e),h=0;h<i.a.length;h++)Q=(ve(h,i.a.length),i.a[h]).a,T=h<2?n^(h&1)==0:P^(h&1)==0,T?hL(s,Q,dt(e,Q)==1?2:3):hL(s,Q,dt(e,Q)==2?1:2),t.g[Q]=!0;Oi(t.e,s)&&uL(t.d,s)}else _s(t,e,D,n,P,r,i);LA(i,i.a.length-1),r[D]=!1}LA(i,i.a.length-1),r[f]=!1}return!1}function $0(t,e){var A,n,P,r,i,f,D,Q,o;if(e==0)return 0;for(f=null,n=0;n<t.q;n++)(t.u[n]&F1)>>18==e&&(f==null&&(f=c(Pt,ft,6,32,16,1)),f[(t.u[n]&F1)>>18!=1&&(t.u[n]&F1)>>18!=2?-1:(t.u[n]&jA)>>20]=!0);for(r=0;r<t.r;r++)(t.F[r]&768)>>8==e&&(f==null&&(f=c(Pt,ft,6,32,16,1)),f[(t.F[r]&768)>>8!=1&&(t.F[r]&768)>>8!=2?-1:(t.F[r]&hn)>>10]=!0);if(o=0,f!=null){for(Q=c(F,k,6,32,15,1),D=0;D<32;D++)f[D]&&(Q[D]=o++);for(A=0;A<t.q;A++)(t.u[A]&F1)>>18==e&&(i=Q[(t.u[A]&F1)>>18!=1&&(t.u[A]&F1)>>18!=2?-1:(t.u[A]&jA)>>20],t.u[A]&=-32505857,t.u[A]|=i<<20);for(P=0;P<t.r;P++)(t.F[P]&768)>>8==e&&(i=Q[(t.F[P]&768)>>8!=1&&(t.F[P]&768)>>8!=2?-1:(t.F[P]&hn)>>10],t.F[P]&=-31745,t.F[P]|=i<<10)}return o}function ii(t,e,A,n,P){var r,i,f,D,Q,o,L,s;for(ut(t,n?7:1),e.v=null,t.K&&je(e,!0),D=A.length,P==null&&(P=c(F,k,6,D,15,1)),e.q=0,r=0;r<D;r++)if(A[r]){if(P[r]=En(t,e,r,0,0),t.C[r]==1&&(s=x1(t,r),s>1)){for(L=0;L<t.e[r];L++)if(!A[t.i[r][L]]){XA(e,P[r],s);break}}}else P[r]=-1;for(o=c(F,k,6,t.r,15,1),Vr(o,o.length,-1),e.r=0,Q=0;Q<t.r;Q++)i=t.D[0][Q],f=t.D[1][Q],i<D&&f<D&&(A[i]&&A[f]?o[Q]=e9(t,e,Q,0,0,P==null?t.D[0][Q]:P[t.D[0][Q]],P==null?t.D[1][Q]:P[t.D[1][Q]],n):t.s[i]!=0&&t.s[f]!=0&&t.s[i]<0^t.s[f]<0&&(A[i]&&(e.s[P[i]]+=t.s[i]<0?1:-1),A[f]&&(e.s[P[f]]+=t.s[f]<0?1:-1)));UL(t,e),t.d&&(e.T=0),e.T=0,$0(e,1),$0(e,2),e.q!=D&&je(e,!0),gj(t,e,D,P,o),eb(t,e,D,P),n&&Bf(new c9(e),null,!1)}function C$(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l;if(D=!1,$1(t.k,e)!=0&&O(t.k,e)==2&&CA(t.k,e,0)==2&&CA(t.k,e,1)==2){for(i=0;i<O(t.k,e);i++)if(n=_(t.k,e,i),n!=A&&O(t.k,n)==2){D=!0;break}for(r=0;r<O(t.k,e);r++){for(n=_(t.k,e,r),l=0,y=c(F,k,6,3,15,1),o=0;o<O(t.k,n);o++)y[l]=_(t.k,n,o),y[l]!=e&&++l;l==2&&t.q[y[0]]<t.q[y[1]]^y[0]<y[1]&&(D=!D)}}else{for(L=c(F,k,6,4,15,1),s=c(F,k,6,4,15,1),f=0,A!=-1&&(L[f]=A,s[f++]=8*t.q[A]),(It(t.k,e)!=0||O(t.k,e)==3)&&(L[f]=Et,s[f++]=8*t.q[e]),r=0;r<O(t.k,e);r++)n=_(t.k,e,r),n!=A&&(L[f]=n,s[f++]=gY(t,e,r));D=cJ(L,s)}return Q=d0(t.k,e)==1^D,Hi(t.k,e)&&(P=dq(t.d,e),t.n[P]||(t.n[P]=!0,t.o[P]=Q),t.o[P]&&(Q=!Q)),Q?\"@@\":\"@\"}function H$(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y;for(ut(t.H,t.N),o=t.H.f,t.J=c(F,k,6,o,15,1),t.I=c(OA,te,6,o,14,1),i=0;i<o;i++)t.I[i]=O9(V(Y(sp(t.H,i),y0(t.H,i)),p6),xp),t.J[i]=X(t.H,i),(e&1)!=0&&(t.J[i]+=b1(t.H,i)+16<<8),(e&2)!=0&&(t.J[i]+=ye(t.H,i)<<16);for(t.M=c(OA,te,6,o,14,1),s=Nn(t.H),Q=0;Q<s.j.a.length;Q++)for(y=N(s.k,Q).length,n=N(s.j,Q),P=0,r=n.length;P<r;++P)f=n[P],y==3?t.M[f]=Y(t.M[f],i9):y==4?t.M[f]=Y(t.M[f],f9):y==5?t.M[f]=Y(t.M[f],D9):y==6?t.M[f]=Y(t.M[f],u9):y==7&&(t.M[f]=Y(t.M[f],Q9));for(A=0;A<o;A++)y=Hr(t.H,A),y==0?t.M[A]=Y(t.M[A],s8):y>7&&(t.M[A]=Y(t.M[A],Rf));for(L=t.H.g,t.K=c(F,k,6,L,15,1),D=0;D<L;D++)t.K[D]=(Yb(t.H,D)|Ae(t.H,D))&6422527^6291840}function $s(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l;if(Qn(t.i,0),n=qA(e,t.c),n!=0){if(G1(t),L=n==1^X(t.V,t.t)==1,gf(t.V,t.t,n,0,-1,0)){L&&(t.t=-1,q1(t,new S1(t,4,!0))),t.eb=w.Math.max(t.eb,3),e1(t.k),q1(t,new S1(t,1,!0));return}t.eb=w.Math.max(t.eb,0),e1(t.k)}if(t.j!=null&&t.j.length!=0&&(e=t.j),y=(ry(),o=(!rl&&ZY(),le(rl,ai(e.toLowerCase(),\"-\"))),o==null?null:Zi(new JA(!1),o)),y){for(G1(t),D=new zA,YR(D,t.V,t.t,null),s=rn(D,t.ab*24),i=D.q,A=0;A<D.q;A++)D.u[A]|=I0;for(Gs(D,y,0),A9(new z8(4),D),P=kt(t.V,t.t)-s*D.J[0].a,r=pt(t.V,t.t)-s*D.J[0].b,f=t.V.q,Gs(t.V,y,t.t),l=t.V.q-f,Q=0;Q<l;Q++)Be(t.V,f+Q,s*D.J[i+Q].a+P),Ie(t.V,f+Q,s*D.J[i+Q].b+r);of(t.V),t.eb=w.Math.max(t.eb,3),e1(t.k),q1(t,new S1(t,1,!0))}}function Ej(t,e,A){if(b1(t.j,e)!=0)return 0;if(t.a){if(X(t.j,e)==5)return x1(t.j,e)!=2?0:(A&&E0(t.j,e,1),1);if(X(t.j,e)==7)return x1(t.j,e)!=2?0:(A&&E0(t.j,e,-1),$i(t,e)?6:3);if(X(t.j,e)==8)return x1(t.j,e)!=1?0:(A&&E0(t.j,e,-1),$i(t,e)?7:4);if(X(t.j,e)==16)return x1(t.j,e)!=1?0:(A&&E0(t.j,e,-1),$i(t,e)?5:2);if(X(t.j,e)==34)return x1(t.j,e)!=1?0:(A&&E0(t.j,e,-1),$i(t,e)?4:1)}else{if(X(t.j,e)==5)return x1(t.j,e)>2?0:(A&&E0(t.j,e,1),1);if(X(t.j,e)==7)return x1(t.j,e)>2?0:(A&&E0(t.j,e,-1),$i(t,e)?5:3);if(X(t.j,e)==8)return x1(t.j,e)>1?0:(A&&E0(t.j,e,-1),$i(t,e)?7:4);if(X(t.j,e)==16)return x1(t.j,e)>1?0:(A&&E0(t.j,e,-1),$i(t,e)?5:2)}return 0}function Sj(t){var e,A;if(t.s==null&&!t.t)return null;if(t.t)return A=BQ(t.t),A?(Ws(t,A),++t.p,kw(A,\"SO#\"+ ++t.a),A):null;if(t.j)return null;for(t.b.c==0&&_8(t,c(F,k,6,t.q.length,15,1)),t.A=pj(t.B,t.A,t.c);t.A&&!(gt(t.v,0)&&(z1(),E1(M1(Date.now()),t.v)));){if(e=_8(t,t.A.d),t.A.c||(Wx(t.A,LJ(e,t.A.i,\"#\"+ ++t.a)),t.i&&NI(t.c,t.A)),t.A.b==0&&(Ij(t,t.A,t.A.c),t.A.b!=0&&Ta(t,t.A),t.i&&(Cz(Ei(t.c,t.A),e,t.A.c),Ei(t.c,t.A))),t.A.b>t.B.r+3){if(t.A=pj(t.B,t.A,t.c),t.A||t.p!=0)continue;if(t.C&&(t.t=new xQ(t.k),ao(t.t,t.v),g5(t.t,t.o,-1),A=BQ(t.t),A))return Ws(t,A),++t.p,kw(A,\"SO#\"+ ++t.a),A;t.A=t.B.e,t.j=!0}if(t.A)return Ws(t,t.A.c),t.A.g=!0,++t.p,t.i&&Ei(t.c,t.A),t.A.c}return null}function M$(t,e,A,n){var P,r,i,f,D,Q;if(P=Wr(e,t.d),E0(e,P,t.e),We(e,P,t.o,!1),XA(e,P,t.a),gt(t.c,0)&&(gt(V(t.c,2),0)?(t.c=V(t.c,-3),e.u[P]|=I0):e.u[P]&=wy,h1(e,P,t.c,!0)),t.b){for(Q=c(F,k,6,t.b.d.a.length,15,1),D=0;D<t.b.d.a.length;D++)Q[D]=k9(t.b,D).a;oT(e,P,Q),t.b.d.a.length=0}else if(String.fromCharCode(A).toLowerCase().charCodeAt(0)==A&&kB(A)){if(t.d!=5&&t.d!=6&&t.d!=7&&t.d!=8&&t.d!=15&&t.d!=16&&t.d!=33&&t.d!=34)throw At(new C1(\"SmilesParser: atomicNo \"+t.d+\" must not be aromatic. Position:\"+(n-1)));e.u[P]|=I0}else e.u[P]&=wy;if(t.f)for(f=new Zt(t.f);f.a<f.c.a.length;)i=$t(f),t.r=!0,K0(i,0,0),je(e,!0),Gs(e,i,P);return t.g!=-1&&t.d!=1&&(r=c(E,q,6,1,15,1),r[0]=t.g<<24>>24,cz(e,P,r)),P}function V$(t,e){var A,n,P,r,i,f,D,Q,o,L,s;if(e==2||e==5)mt(t.F,_i(t.G,t.G.length)),t.b&&mt(t.a,JL(t.C,t.C.length));else if(e==4)s=Mb(_i(t.G,t.G.length)),wU(t.O,s)||(Oi(t.O,s),mt(t.F,_i(t.G,t.G.length)),t.b&&mt(t.a,JL(t.C,t.C.length)));else if(e==3){if(s=Mb(_i(t.G,t.G.length)),!wU(t.O,s)){for(L=!1,Q=(f=new x8(new I8(new wr(t.O.a).a).b),new gr(f));Cr(Q.a.a);){for(D=(i=B9(Q.a),i.ed()),o=0,n=s,P=0,r=n.length;P<r;++P){for(A=n[P];o<D.length&&D[o]<A;)++o;if(o<D.length&&A==D[o]){L=!0;break}}if(L)break}L||(Oi(t.O,s),mt(t.F,_i(t.G,t.G.length)),t.b&&mt(t.a,JL(t.C,t.C.length)))}}else e==6&&(s=GX(t,_i(t.G,t.G.length)),wU(t.O,s)||(Oi(t.O,s),mt(t.F,_i(t.G,t.G.length)),t.b&&mt(t.a,JL(t.C,t.C.length))))}function En(t,e,A,n,P){var r,i,f;return r=e.q,r>=e.M&&kQ(e,e.M*2),f=(t.u[A]&F1)>>18,i=-1,f==1?n==-1?i=$0(e,f):i=w.Math.min(31,n+((t.u[A]&F1)>>18!=1&&(t.u[A]&F1)>>18!=2?-1:(t.u[A]&jA)>>20)):f==2&&(P==-1?i=$0(e,f):i=w.Math.min(31,P+((t.u[A]&F1)>>18!=1&&(t.u[A]&F1)>>18!=2?-1:(t.u[A]&jA)>>20))),e.C[r]=t.C[A],e.s[r]=t.s[A],e.A[r]=t.A[A],e.u[r]=t.u[A],e.B[r]=e.K?t.B[A]:0,mD(e.J[r],t.J[A]),e.w[r]=t.w[A],e.v!=null&&(e.v[r]=null),t.v!=null&&t.v[A]!=null&&e.K&&(e.v==null&&(e.v=c(F,f0,7,e.C.length,0,2)),e.v[r]=bn(t.v[A],t.v[A].length)),e.t!=null&&(e.t[r]=null),t.t!=null&&t.t[A]!=null&&(e.t==null&&(e.t=c(E,g8,10,e.C.length,0,2)),e.t[r]=cN(t.t[A],t.t[A].length)),i!=-1&&(e.u[r]&=-32505857,e.u[r]|=i<<20),++e.q,e.T=0,r}function K5(){K5=d1,$V=B(d(it,1),Dt,2,6,[\"\",\"r0\",\"r\",\"r3\",\"r3-4\",\"r3-5\",\"r3-6\",\"r3-7\",\"r4\",\"r4-5\",\"r4-6\",\"r4-7\",\"r>3\",\"r5\",\"r5-6\",\"r5-7\",\"r>4\",\"r6\",\"r6-7\",\"r>5\",\"r7\",\"r>6\",\"r>7\"]),_V=B(d(it,1),Dt,2,6,[B8,UV,\"is in any ring\",\"3 members\",\"3-4 members\",\"3-5 members\",\"3-6 members\",\"3-7 members\",\"4 members\",\"4-5 members\",\"4-6 members\",\"4-7 members\",\"> 3 members\",\"5 members\",\"5-6 members\",\"5-7 members\",\"> 4 members\",\"6 members\",\"6-7 members\",\"> 5 members\",\"7 members\",\"> 6 members\",\"> 7 members\"]),li=B(d(OA,1),te,6,14,[0,s8,Vp,i9,25769803776,60129542144,128849018880,266287972352,f9,51539607552,120259084288,257698037760,532575944704,D9,103079215104,240518168576,515396075520,u9,206158430208,481036337152,Q9,412316860416,Rf])}function E$(t,e){D8();var A,n,P,r,i,f,D,Q,o,L,s;for(r=0;r<e.f;r++)if(e.o[r]==2&&e.j[r]==2&&e.n[r][0]==2&&e.n[r][1]==2&&e.C[r]<=7&&(o=e.u[r]&3,o==1||o==2)){for(n=c(F,k,6,4,15,1),s=c(F,k,6,2,15,1),f=0;f<e.j[r];f++){for(A=e.i[r][f],Q=Et,D=0;D<e.j[A];D++)i=e.i[A][D],i!=r&&Q>i&&(Q=i);n[3*f]=Q,n[1+f]=A,s[f]=r}if(n[0]==Et||n[3]==Et){z1(),\"\"+me(new FA(e));break}mt(t,new qh(e,n,s,(e.u[r]&cn)!=0,o==1))}for(P=0;P<e.g;P++)if(o=e.F[P]&3,(o==1||o==2)&&dt(e,P)!=2){for(n=c(F,k,6,4,15,1),s=c(F,k,6,2,15,1),f=0;f<2;f++){for(A=e.D[f][P],L=e.D[1-f][P],Q=Et,D=0;D<e.j[A];D++)i=e.i[A][D],i!=L&&Q>i&&(Q=i);n[3*f]=Q,n[1+f]=A,s[f]=e.D[1-f][P]}mt(t,new qh(e,n,s,(e.F[P]&64)!=0,o==2))}}function S$(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l;for(f=ms(t),i=c(Pt,ft,6,f+1,16,1),l=new Zt(t.g);l.a<l.c.a.length;)for(s=$t(l),A=0;A<s.q;A++)if(P=w.Math.abs(s.w[A]),P!=0){if(i[P])throw At(new C1(\"Duplicate mapping no in reactants: \"+P));i[P]=!0}for(r=c(Pt,ft,6,f+1,16,1),L=new Zt(t.f);L.a<L.c.a.length;)for(Q=$t(L),A=0;A<Q.q;A++)if(P=w.Math.abs(Q.w[A]),P!=0){if(r[P])throw At(new C1(\"Duplicate mapping no in products: \"+P));r[P]=!0}for(D=c(F,k,6,f+1,15,1),n=0,e=1;e<=f;e++)i[e]&&r[e]&&(D[e]=++n);if(n!=f){for(y=new Zt(t.g);y.a<y.c.a.length;)for(s=$t(y),A=0;A<s.q;A++)We(s,A,D[w.Math.abs(s.w[A])],s.w[A]<0);for(o=new Zt(t.f);o.a<o.c.a.length;)for(Q=$t(o),A=0;A<Q.q;A++)We(Q,A,D[w.Math.abs(Q.w[A])],Q.w[A]<0)}}function q$(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g;if(g=(ut(t,7),t.p),!g.e[e])return 1;if(N(g.k,e).length==6){for(n=N(g.j,e),P=0,r=n.length;P<r;++P)if(A=n[P],x1(t,A)+It(t,A)!=t.e[A]+It(t,A)+1)return 1;for(D=N(g.k,e),Q=0,o=D.length;Q<o;++Q)if(f=D[Q],L=B(d(F,1),k,6,15,[-1,-1]),dt(t,f)==1){for(y=0;y<=1;y++)for(i=t.D[y][f],s=0;s<t.e[i];s++)if(l=t.i[i][s],!yA(g,e,l)&&dt(t,u1(t,i,l))==2){L[y]=l;break}if(L[0]>-1&&L[1]>-1)for(T=0;T<g.j.a.length;T++){if(yA(g,T,L[0])&&yA(g,T,L[1])&&t.b[T]==2)return 2;if(yA(g,T,L[0])&&yA(g,T,L[1])&&t.b[T]!=0)return 1}}}if(N(g.k,e).length==5)for(h=1,n=N(g.j,e),P=0,r=n.length;P<r;++P){if(A=n[P],x1(t,A)+It(t,A)==t.e[A]+It(t,A)&&h>0){--h;continue}if(x1(t,A)+It(t,A)!=t.e[A]+It(t,A)+1)return 1}return 0}function X5(t){var e,A,n,P,r,i,f,D,Q,o,L;for(e=0;e<t.R.f;e++)if(t.db[e]==1||t.db[e]==2){if(D=!1,Yh(t.R,e))for(f=0;f<O(t.R,e);f++){for(P=_(t.R,e,f),L=0,o=c(F,k,6,3,15,1),Q=0;Q<O(t.R,P);Q++)o[L]=_(t.R,P,Q),o[L]!=e&&++L;L==2&&t.f[o[0]]>t.f[o[1]]^o[0]<o[1]&&(D=!D)}else for(f=1;f<O(t.R,e);f++)for(Q=0;Q<f;Q++)r=_(t.R,e,f),i=_(t.R,e,Q),t.f[r]>t.f[i]&&(D=!D),r<i&&(D=!D);ce(t.R,e,t.db[e]==1^D?1:2,t.fb[e])}else ce(t.R,e,t.db[e],t.fb[e]);for(A=0;A<t.R.g;A++)if(t.o[A]==1||t.o[A]==2){for(D=!1,f=0;f<2;f++)if(n=z(t.R,f,A),O(t.R,n)==3){for(o=c(F,k,6,2,15,1),L=0,Q=0;Q<3;Q++)_(t.R,n,Q)!=z(t.R,1-f,A)&&(o[L++]=_(t.R,n,Q));t.f[o[0]]>t.f[o[1]]&&(D=!D),o[0]<o[1]&&(D=!D)}P8(t.R,A,t.o[A]==1^D?1:2,t.p[A])}else P8(t.R,A,t.o[A],t.p[A])}function qj(t,e,A,n,P){var r,i,f,D,Q,o,L,s;for(ut(t,n?7:1),e.v=null,t.K&&je(e,!0),P==null&&(P=c(F,k,6,t.q,15,1)),e.q=0,r=0;r<t.q;r++)for(P[r]=-1,o=0;o<t.j[r];o++)if(A[t.k[r][o]]){if(P[r]=En(t,e,r,0,0),t.C[r]==1&&(s=x1(t,r),s>1)){for(L=0;L<t.e[r];L++)if(!A[t.k[r][L]]){XA(e,P[r],s);break}}break}for(Q=c(F,k,6,t.r,15,1),e.r=0,D=0;D<t.r;D++)A[D]?Q[D]=e9(t,e,D,0,0,P==null?t.D[0][D]:P[t.D[0][D]],P==null?t.D[1][D]:P[t.D[1][D]],n):(Q[D]=-1,i=t.D[0][D],f=t.D[1][D],P[i]==-1^P[f]==-1&&t.s[i]!=0&&t.s[f]!=0&&t.s[i]<0^t.s[f]<0&&(P[i]!=-1&&(e.s[P[i]]+=t.s[i]<0?1:-1),P[f]!=-1&&(e.s[P[f]]+=t.s[f]<0?1:-1)));return UL(t,e),t.d&&(e.T=0),e.T=0,$0(e,1),$0(e,2),e.q!=t.q&&je(e,!0),gj(t,e,t.q,P,Q),eb(t,e,t.q,P),n&&Bf(new c9(e),null,!1),P}function I$(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R;for(f=0,A=0;A<t.f.q;A++)z0(t.f,A)&&++f;if(!(f<2)){for(L=0,Q=0,o=0;o<t.f.r;o++)n=z(t.f,0,o),P=z(t.f,1,o),z0(t.f,n)&&z0(t.f,P)&&(t.c[o]=!0,t.b[n]=!0,t.b[P]=!0,Q+=lT(t.f,o),++L);for(L!=0&&Q!=0?Q/=L:Q=M8(t.f),r=0;r<t.f.q;r++)z0(t.f,r)&&!t.b[r]&&--f;if(!(f<2)){for(v=c(F,k,6,t.f.q,15,1),s=nr(t.f,v,!0,!0),m=c(F,k,6,s,15,1),i=0;i<t.f.q;i++)v[i]!=-1&&++m[v[i]];for(g=c(O4,A0,48,s,0,1),l=0;l<s;l++)g[l]=new HP(t.f,m[l],!0);for(D=c(F,k,6,s,15,1),e=0;e<t.f.q;e++)h=v[e],h!=-1&&(g[h].k[D[h]]=re,g[h].e[D[h]]=e,g[h].a[D[h]]=kt(t.f,e)/Q,g[h].b[D[h]]=pt(t.f,e)/Q,++D[h]);for(b=-1,R=0,T=0;T<s;T++)R<m[T]&&(R=m[T],b=T);for(pP(t.d,g[b]),y=0;y<s;y++)y!=b&&pP(t.d,g[y])}}}function x$(t,e){var A,n,P,r,i,f,D,Q,o,L,s;for(n=0;n<t.e[e];n++)switch(o=t.i[e][n],t.C[o]){case 6:return 5;case 7:switch(D6(t,o)){case 8:case 39:case 62:case 67:case 68:return 23;case 34:case 54:case 55:case 56:case 58:case 81:return 36;case 9:return 27;default:return 28}case 8:switch(D6(t,o)){case 49:return 50;case 51:return 52;case 70:return 31;case 6:for(P=!1,r=!1,i=!1,f=!1,D=0;D<t.e[o];D++){if(L=t.i[o][D],t.C[L]==6)for(Q=0;Q<t.e[L];Q++)s=t.i[L][Q],s!=o&&(A=u1(t,L,s),(t.C[s]==6||t.C[s]==7)&&(dt(t,A)==2||A<t.g&&Re(t.p,A))&&(P=!0),t.C[s]==8&&dt(t,A)==2&&(r=!0));t.C[L]==15&&(i=!0),t.C[L]==16&&(f=!0)}if(r||i)return 24;if(P)return 29;if(f)return 33;default:return 21}case 14:return 5;case 16:case 15:return 71}return 0}function N$(t){var e,A,n,P,r,i,f,D,Q,o,L;if(t.n==null){if(t.b)for(n=t.j+1,t.p=c(F,nA,28,t.o.length,0,3),r=0;r<t.o.length;r++){for(t.p[r]=c(F,f0,7,t.g[r].a.length,0,2),f=0;f<t.g[r].a.length;f++)t.p[r][f]=gK(t,r,N(t.g[r],f),n);for(n+=t.o[r].f,P=d9(t.c,r),e=0;e<P.f;e++)gt(V(P.B[e],a0),0)||--n}if(t.n=k1(Ur,[nA,U9],[74,26],0,[t.q,t.c.f.a.length],2),t.d=k1(it,[nA,Dt],[13,2],6,[t.q,t.c.f.a.length],2),t.e=c(Pt,ft,6,t.q,16,1),L=new eu,o=new V0,i=0,A=0,t.q!=0){D=c(F,k,6,t.o.length,15,1);do{for(Q=o.a.length,0<Q?o.a=oA(o.a,0,0):0>Q&&(o.a+=S8(c(lr,te,6,-Q,15,1))),r=0;r<t.c.f.a.length;r++)t.n[i][r]=Ttt(t,t.g,D,r),t.d[i][r]=me(new FA(t.n[i][r])),J(o,t.d[i][r]);t.e[i]=js(L,o.a)==-1,(!t.t||!t.e[i])&&++A,++i}while(UJ(t,D)&&A<t.i)}}}function Ij(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m;for(t.i&&(Ei(t.c,e).a=null),D=0,f=null,T=A.o,n=1;n<T.q;n++)for(m=xD(T.C[n]),P=0;P<n;P++)t.u[n][P]||(h=m+xD(T.C[P]),o=w.Math.abs(A.k[n].a-A.k[P].a),o<h&&(L=w.Math.abs(A.k[n].b-A.k[P].b),L<h&&(s=w.Math.abs(A.k[n].c-A.k[P].c),s<h&&(Q=w.Math.sqrt(o*o+L*L+s*s),Q<h&&(g=(h-Q)/h,i=20*g*g,D+=i,t.i&&(wN(Ei(t.c,e),\"a1:\"+n+\" f1:\"+t.g[n]+\" a2:\"+P+\" f2:\"+t.g[P]+jV+(Jr(),t9(Q,5))+\" min:\"+t9(h,5)),Ei(t.c,e).a==null&&(r=c(F,k,6,2,15,1),r[0]=n,r[1]=P,YS(Ei(t.c,e),r))),f==null&&(f=c(Ut,T0,15,t.q.length,0,2)),y=t.g[n],l=t.g[P],y<l?(f[l]==null&&(f[l]=c(Ut,Tt,6,l,15,1)),f[l][y]+=i):(f[y]==null&&(f[y]=c(Ut,Tt,6,y,15,1)),f[y][l]+=i))))));return Av(e,D,f),D!=0}function O$(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l;if(Q=B1(Y1(e)),Q.length==0||(t.e=Q),Y1(e),n=Y1(e),!A&&n.startsWith(Sy)&&(P=(Gt(13,n.length+1),n.substr(13)),OQ(P,!0,t)))return!0;if(l=Y1(e),i=new $2,l!=null&&l.startsWith(\"M  V30 COUNTS\")){if(y=B1((Gt(13,l.length+1),l.substr(13))),o=L8(y,\" \"),s=Q1(o[0],P1,Et),L=Q1(o[1],P1,Et),s>0){if(l=Y1(e),at(oH,l))for(r=0;r<s;r++){f=new zA,D=new ru,D.a+=UH;do l=Y1(e),D.a+=\"\"+l,D.a+=$A;while(l!=null&&!l.startsWith(R6));mU(i,f,new Pn(new Rr(D.a))),mt(t.g,f),t.d=-1}l=Y1(e)}if(L>0&&(l=Y1(e),at(LH,l))){for(r=0;r<L;r++){f=new zA,D=new ru,D.a+=UH;do l=Y1(e),D.a+=\"\"+l,D.a+=$A;while(l!=null&&!l.startsWith(R6));mU(i,f,new Pn(new Rr(D.a))),mt(t.f,f),t.d=-1}l=Y1(e)}return!0}return!1}function xj(t){var e,A,n,P,r,i,f;return i=\"\",t.length==0?new Qh(s4,y4):(f=B1(t),f.startsWith(\"at \")&&(f=(Gt(3,f.length+1),f.substr(3))),f=f.replace(/\\[.*?\\]/g,\"\"),P=f.indexOf(\"(\"),P==-1?(P=f.indexOf(\"@\"),P==-1?(i=f,f=\"\"):(i=B1((Gt(P+1,f.length+1),f.substr(P+1))),f=B1((Ct(0,P,f.length),f.substr(0,P))))):(e=f.indexOf(\")\",P),i=(Ct(P+1,e,f.length),f.substr(P+1,e-(P+1))),f=B1((Ct(0,P,f.length),f.substr(0,P)))),P=f.indexOf(k0(46)),P!=-1&&(f=(Gt(P+1,f.length+1),f.substr(P+1))),(f.length==0||at(f,\"Anonymous function\"))&&(f=s4),r=i.lastIndexOf(k0(58)),A=jx(i,k0(58),r-1),n=y4,r!=-1&&A!=-1&&(n=(Ct(0,A,i.length),i.substr(0,A)),cg((Ct(A+1,r,i.length),i.substr(A+1,r-(A+1)))),cg((Gt(r+1,i.length+1),i.substr(r+1)))),new Qh(f,n))}function Nj(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T;for(l=!1,n=0;n<t.L.g;n++)Q=null,gu(t.L,n)?(L=q3(t.L,n),o=Th(t.L,n),Q=L==o?\"[\"+L+\"]\":\"[\"+L+\":\"+o+\"]\"):(Ae(t.L,n)&Ao)!=0?Q=(Ae(t.L,n)&Ao)==IA?\"a\":(Ae(t.L,n)&384)==256?\"!ar\":\"!a\":(Ae(t.L,n)&384)!=0&&(Q=(Ae(t.L,n)&384)==256?\"r\":\"!r\"),s=(Ae(t.L,n)&qP)>>17,s!=0&&(y=s==1?\"8-11\":s==2?\">11\":\"\"+s,Q=(Q==null?\"\":Q.endsWith(\"r\")?Q:Q+\"r\")+y),Q!=null&&(e=z(t.L,0,n),A=z(t.L,1,n),l||(t.Cb((t.X*2+1)/3|0),l=!0),h=(X1(t.R,kt(t.L,e))+X1(t.R,kt(t.L,A)))/2,T=(K1(t.R,pt(t.L,e))+K1(t.R,pt(t.L,A)))/2,r=X1(t.R,kt(t.L,A))-X1(t.R,kt(t.L,e)),i=K1(t.R,pt(t.L,A))-K1(t.R,pt(t.L,e)),P=w.Math.sqrt(r*r+i*i),D=.6*t.vb(Q),f=.55*t.wb(),P!=0&&(r>0?MP(t,h+D*i/P,T-f*r/P,Q,!0):MP(t,h-D*i/P,T+f*r/P,Q,!0)));l&&t.Cb(t.X)}function fi(t){var e,A,n,P,r,i,f,D,Q,o,L;for(ut(t,1),gG(t),Q=!1,A=0;A<t.f;A++)if(t.C[A]==7&&t.s[A]==0){if(L=x1(t,A),L==4){for(o=0;o<t.j[A];o++)if(f=t.i[A][o],t.n[A][o]==1&&t.C[f]==8&&t.j[f]==1&&t.s[f]==0){Q=!0,++t.s[A],--t.s[f];break}}else if(L==5)for(o=0;o<t.j[A];o++){if(f=t.i[A][o],D=t.k[A][o],t.n[A][o]==2&&t.C[f]==8){Q=!0,++t.s[A],--t.s[f],t.H[D]=1;break}if(t.n[A][o]==3&&t.C[f]==7){Q=!0,++t.s[A],--t.s[f],t.H[D]=2;break}}}for(i=!1,r=0;r<t.g;r++)for(o=0;o<2;o++)if(tA(t,t.D[o][r])){e=t.D[1-o][r],P=t.C[e],(P==3||P==11||P==19||P==37||P==55||P==87||(n=t.C[e],n==4||n==12||n==20||n==38||n==56||n==88))&&(dt(t,r)==1?(++t.s[e],--t.s[t.D[o][r]],t.H[r]=512,i=!0):t.H[r]==16&&(t.H[r]=512,i=!0));break}return i&&(vf(t),Q=!0),Q&&(t.T=0),Q}function Z5(t,e){var A,n,P,r,i,f;if(t.L.q!=0){for(ut(t.L,(t.G&256)!=0?63:(t.G&512)!=0?95:31),t.B=e,Dk(t),P=G$(t.L),r=!1,t.p=c(F,k,6,t.L.q,15,1),A=0;A<t.L.q;A++)t.p[A]=Qu(t.L,A),t.p[A]!=0&&(r=!0),P0(t.L,A)&&(t.p[A]=128),Ig(t.L,A)&&(t.G&N1)==0&&(t.p[A]=256);for(Z1(t,-10),WZ(t),EK(t),qW(t),UK(t),t.Cb(t.X),t.Ab(t.Y),Z1(t,t.Q),om(t),t.U.a.length=0,t.$.a.length=0,(t.G&1)!=0&&(Dp(t,P),IF(t),Nj(t)),i=0;i<t.L.q;i++)oQ(t,i)?(Z1(t,-3),zQ(t,i,P),Z1(t,t.Q)):t.p[i]!=0?(Z1(t,t.p[i]),zQ(t,i,P),Z1(t,t.Q)):!r&&t.L.O!=1&&X(t.L,i)!=1&&X(t.L,i)!=6&&(t.G&re)==0&&MA(t.L,i)==null&&X(t.L,i)<nl.length&&nl[X(t.L,i)]!=0?(f=nl[X(t.L,i)],SO(t,(n=t.M!=0?t.M:t.D!=0?t.D:-1,Os(f,n))),zQ(t,i,P),Z1(t,t.Q)):zQ(t,i,P);(t.G&1)==0&&(IF(t),Nj(t),Dp(t,P))}}function Oj(t,e,A,n,P,r){var i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R,j,C;for(T=c(F,k,6,n+1,15,1),g=c(F,k,6,r+1,15,1),m=r,D=$r(P[r-1]),D!=0?(ST(g,P,0,D),ST(T,A,0,D)):(sA(A,0,T,0,n),sA(P,0,g,0,r)),Q=g[m-1],L=e-1,s=n;L>=0;){if(o=0,T[s]==Q)o=-1;else if(v=I1(j1(V(T[s],T1),32),V(T[s-1],T1)),j=SZ(v,Q),o=Jt(j),R=Jt(q0(j,32)),o!=0){l=0,C=0,b=!1,++o;do{if(--o,b)break;l=Un(V(o,T1),V(g[m-2],T1)),C=I1(j1(R,32),V(T[s-2],T1)),h=I1(V(R,T1),V(Q,T1)),$r(Jt(DA(h,32)))<32?b=!0:R=Jt(h)}while(E1(O9(l,kV),O9(C,kV)))}if(o!=0&&(i=VX(T,s-m,g,m,o),i!=0))for(--o,f=0,y=0;y<m;y++)f=I1(f,I1(V(T[s-m+y],T1),V(g[y],T1))),T[s-m+y]=Jt(f),f=DA(f,32);t[L]=o,--s,--L}return D!=0?(Ab(g,m,T,0,D),g):(sA(T,0,g,0,r),T)}function G$(t){var e,A,n,P,r,i,f;for(ut(t,15),i=c(F,k,6,3,15,1),A=0;A<t.f;A++)(t.u[A]&Tn)!=0&&(f=(t.u[A]&F1)>>18,f!=0&&(i[f]=w.Math.max(i[f],(t.u[A]&F1)>>18!=1&&(t.u[A]&F1)>>18!=2?-1:(t.u[A]&jA)>>20)));for(P=0;P<t.g;P++)((t.F[P]&3)==1||(t.F[P]&3)==2)&&t.H[P]==1&&(f=(t.F[P]&768)>>8,f!=0&&(i[f]=w.Math.max(i[f],(t.F[P]&768)>>8!=1&&(t.F[P]&768)>>8!=2?-1:(t.F[P]&hn)>>10)));for(r=c(F,f0,7,3,0,2),r[1]=c(F,k,6,1+i[1],15,1),r[2]=c(F,k,6,1+i[2],15,1),e=0;e<t.f;e++)(t.u[e]&Tn)!=0&&(f=(t.u[e]&F1)>>18,f!=0&&++r[f][(t.u[e]&F1)>>18!=1&&(t.u[e]&F1)>>18!=2?-1:(t.u[e]&jA)>>20]);for(n=0;n<t.g;n++)((t.F[n]&3)==1||(t.F[n]&3)==2)&&t.H[n]==1&&(f=(t.F[n]&768)>>8,f!=0&&++r[f][(t.F[n]&768)>>8!=1&&(t.F[n]&768)>>8!=2?-1:(t.F[n]&hn)>>10]);return r}function J$(t,e){var A,n,P,r;for(t.b&&mi(t.b),t.c&&mi(t.c),P=0,n=Y1(e);n!=null&&n.startsWith(ro);){for(n=B1((Gt(7,n.length+1),n.substr(7)));n.endsWith(\"-\");){if(A=Y1(e),!A.startsWith(ro))return!1;n=B1(bu(oA(n,0,n.length-1),(Gt(7,A.length+1),A.substr(7))))}if(n.startsWith(\"BEGIN\"))if(r=B1((Gt(6,n.length+1),n.substr(6))),r.startsWith(\"CTAB\"))P=1;else if(r.startsWith(\"ATOM\"))P=2;else if(r.startsWith(\"BOND\"))P=3;else if(r.startsWith(\"SGROUP\"))P=4;else if(r.startsWith(\"COLLECTION\"))P=5;else return!1;else if(n.startsWith(\"END\"))P=0;else if(P==1)fY(t,n);else if(P==2)ftt(t,n);else if(P==3)Da(t,n);else if(P==4)ya(t,n);else if(P==5)z$(t,n);else return!1;n=Y1(e)}for(;n!=null&&!(n.startsWith(Dr)||at(n,Po));)n=Y1(e);return!0}function z$(t,e){var A,n,P,r,i,f;if(f=xG(e),f!=null){if(i=PZ(e,f),e.startsWith(\"MDLV30/STEABS\"))if(at(f,m2))for(r=0;r<i.length;r++)Me(t.j,ID(t,i[r]),0,-1);else for(P=0;P<i.length;P++)U8(t.j,LL(t,i[P]),0,-1);else if(e.startsWith(\"MDLV30/STERAC\"))if(n=Q1(oA(e,13,Pe(e,13)),P1,Et),at(f,m2))for(r=0;r<i.length;r++)Me(t.j,ID(t,i[r]),1,n-1);else for(P=0;P<i.length;P++)U8(t.j,LL(t,i[P]),1,n-1);else if(e.startsWith(\"MDLV30/STEREL\"))if(n=Q1(oA(e,13,Pe(e,13)),P1,Et),at(f,m2))for(r=0;r<i.length;r++)Me(t.j,ID(t,i[r]),2,n-1);else for(P=0;P<i.length;P++)U8(t.j,LL(t,i[P]),2,n-1);else if(e.startsWith(\"MDLV30/HILITE\"))if(at(f,m2))for(P=0;P<i.length;P++)BD(t.j,ID(t,i[P]),448);else for(P=0;P<i.length;P++)A=LL(t,i[P]),BD(t.j,z(t.j,0,A),448),BD(t.j,z(t.j,1,A),448)}}function Y$(t){var e,A,n,P,r,i,f,D,Q;if(!t.i)return!1;Qn(t.g,0),Qn(t.b,0),t.f=null,Q=!1,A=-1,n=null,t.c=t.d==null?null:c(it,Dt,2,t.d.length,6,1),t.e=-1;do{try{if(D=Y1(t.i),D==null)return Qn(t.g,0),!1}catch(o){if(o=a1(o),Xt(o,75))return Qn(t.g,0),!1;throw At(o)}if(Q)J(t.b,D),Oe(t.b,10);else if(D.startsWith(\">\"))Q=!0,J(t.g,Dr),Oe(t.g,10),J(t.b,D),Oe(t.b,10);else{J(t.g,D),Oe(t.g,10),D.startsWith(Dr)&&(Q=!0);continue}if(t.d!=null)if(D.length==0)A=-1;else if(A==-1){if(n=nj(D),n!=null){for(A=-1,e=0;e<t.d.length;e++)if(at(n,t.d[e])){A=e;break}if(t.e==-1){for(r=KV,i=0,f=r.length;i<f;++i)if(P=r[i],at(n,P)){t.e=A;break}}}}else t.c[A]==null?t.c[A]=D:t.c[A]=bu(bu(t.c[A],$A),D)}while(!D.startsWith(Po));return!0}function K$(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y;for(A=0;A<t.q;A++)y=Cn(t,A),y+WA(t,A,y,t.C[A])-x1(t,A)<=0&&!(t.s[A]==0&&(t.C[A]==5||(P=t.C[A],P==7||P==15||P==33)||(n=t.C[A],n==8||n==16||n==34||n==52||n==84)))&&(t.B[A]=V(t.B[A],-6145));if(t.S)return!1;for(i=!1,e=0;e<t.f;e++)if(f=t.e[e]-t.j[e],f>0)for(t0(V(t.B[e],N1),0)&&(o=t0(V(t.B[e],PP),896)?3:t0(V(t.B[e],PP),384)?2:t0(V(t.B[e],128),128)?1:0,D=(y=Cn(t,e),y+WA(t,e,y,t.C[e])-x1(t,e)),t.s[e]==0&&t0(V(t.B[e],ir),0)&&t.C[e]!=6&&++D,L=f,L>3-o&&(L=3-o),L>D+f-o&&(L=D+f-o),L>0&&(s=o==0?0:j1(V(t.B[e],PP),L),s=Y(s,(L==3?7:f==2?3:1)<<7),t.B[e]=V(t.B[e],-1921),t.B[e]=Y(t.B[e],V(PP,s)))),Q=t.j[e];Q<t.e[e];Q++)r=t.k[e][Q],t.H[r]==1&&(t.C[t.i[e][Q]]=-1,t.H[r]=512,i=!0);return i&&vf(t),i}function Gj(t,e){var A,n,P,r,i,f,D,Q,o,L;if((e&~t.T)!=0&&((t.T&1)==0&&(qR(t),rp(t),t.T|=1,t.K&&!Nh(t)&&K$(t)&&(qR(t),rp(t),t.T|=1)),(e&~t.T)!=0)){if((t.T&-7)!=0){for(n=0;n<t.f;n++)t.u[n]&=-15369;for(r=0;r<t.g;r++)t.F[r]&=-705;if((e&4)==0){CR(t,1),t.T|=2;return}for(CR(t,7),P=0;P<t.f;P++)for(o=0;o<t.j[P];o++)if(D=t.k[P][o],!(D<t.g&&Re(t.p,D)))for(f=t.i[P][o],L=0;L<t.j[f];L++)t.k[f][L]!=D&&t.n[f][L]>1&&(t.C[t.i[f][L]]==6?t.u[P]|=C0:!_e(t,t.k[f][L])&&tA(t,t.i[f][L])&&(t.u[P]|=ge));for(;;){for(Q=!1,A=0;A<t.f;A++)if(t.o[A]>0&&(t.u[A]&ge)!=0&&!r0(t.p,A)){for(o=0;o<t.j[A];o++)if(t.n[A][o]>1)for(f=t.i[A][o],D=t.k[A][o],L=0;L<t.j[f];L++)t.k[f][L]!=D&&(i=t.i[f][L],(t.u[i]&ge)==0&&(t.u[i]|=ge,Q=!0))}if(!Q)break}}t.T|=6}}function Jj(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g;for(ut(t,7),Q=0,P=0;P<t.g;P++)dt(t,P)==1&&!(P<t.g&&Re(t.p,P))&&e0(t,t.D[0][P])>1&&e0(t,t.D[1][P])>1&&(t.F[P]&64)==0&&!((t.F[P]&128)!=0&&(t.p&&P<t.g?yP(t.p,P):0)<=5)&&(e[P]=!0,++Q);for(i=c(F,k,6,2,15,1),y=c(F,k,6,2,15,1),r=null,n=0;n<t.g;n++)if(e[n]&&(r==null||!r[n])){for(A=0,L=0;L<2;L++)for(i[L]=t.D[L][n],y[L]=t.D[1-L][n],h=y[L];t.o[i[L]]==2&&e0(t,i[L])==2&&t.C[i[L]]<10;){for(s=0;s<2;s++)if(f=t.i[i[L]][s],f!=y[L]){D=t.k[i[L]][s],e[D]&&dt(t,D)==1&&(e[D]=!1,--Q),y[L]=i[L],i[L]=f,++A;break}if(i[L]==h){A=0;break}}A!=0&&(e[n]=!1,--Q,e0(t,i[0])>1&&e0(t,i[1])>1&&(T=U5(t,y[0],i[0]),g=U5(t,y[1],i[1]),o=T<g?0:1,l=u1(t,y[o],i[o]),r==null&&(r=c(Pt,ft,6,t.g,16,1)),r[l]=!0,e[l]=!0,++Q))}return Q}function JQ(t,e,A){var n,P,r,i,f,D,Q,o;if(t.o[e]!=0)return!1;if(t.R.K){for(Q=0;Q<2;Q++)for(n=z(t.R,Q,e),o=0;o<Ht(t.R,n);o++)if(Qe(t.R,_(t.R,n,o)))return!1}return dt(t.R,e)==1?t_(t,e,A):dt(t.R,e)!=2||_e(t.R,e)||(r=z(t.R,0,e),i=z(t.R,1,e),O(t.R,r)==1||O(t.R,i)==1)||O(t.R,r)>3||O(t.R,i)>3||$1(t.R,r)==2||$1(t.R,i)==2||(f=new cf(t.R,t.f,i,r),f.f&&A==1)||(D=new cf(t.R,t.f,r,i),D.f&&A==1)||f.f&&D.f?!1:(A==3&&(f.f&&f.c&&(t.V[e]=!0),D.f&&D.c&&(t.V[e]=!0)),P=M3(t.R,e)?3:t.jb?oa(t,f,D):ZG(f,D),A==1?t.o[e]=P:A==2&&(f.f&&(P==1?ue(t.e[f.b],t.f[r]):P==2&&ue(t.e[f.d],t.f[r])),D.f&&(P==1?ue(t.e[D.b],t.f[i]):P==2&&ue(t.e[D.d],t.f[i]))),!0)}function X$(t){var e,A,n,P,r,i,f,D,Q,o,L;for(A=0,L=new Zt(t.g);L.a<L.c.a.length;)if(Q=$t(L),ut(Q,1),Q.K)for(e=0;e<Q.f;e++)if(gt(V(Q.B[e],a0),0)){if(w.Math.abs(Q.w[e])!=0)return!1}else++A;else A+=Q.f;for(D=new Zt(t.f);D.a<D.c.a.length;)if(i=$t(D),ut(i,1),i.K)for(e=0;e<i.f;e++)if(gt(V(i.B[e],a0),0)){if(w.Math.abs(i.w[e])!=0)return!1}else--A;else A-=i.f;if(A!=0)return!1;for(r=ms(t),n=c(Pt,ft,6,r+1,16,1),o=new Zt(t.g);o.a<o.c.a.length;)for(Q=$t(o),e=0;e<Q.f;e++)if(!Q.K||t0(V(Q.B[e],a0),0)){if(P=w.Math.abs(Q.w[e]),n[P])return!1;n[P]=!0}for(f=new Zt(t.f);f.a<f.c.a.length;)for(i=$t(f),ut(i,1),e=0;e<i.f;e++)if(!i.K||t0(V(i.B[e],a0),0)){if(P=w.Math.abs(i.w[e]),P>=r||!n[P])return!1;n[P]=!1}return!0}function Z$(t,e,A,n){var P,r,i,f,D,Q,o,L;for(f=t.e[n],D=f+1;D<t.A&&t.f[t.s[D]]==n;)++D;for(o=f;o<D;o++)A[o]=-1;for(i=f;;){if(L=t.u[i]==-1?t.H.f:De(t.H,t.G[t.u[i]]),++A[i],A[i]==L){if(A[i]=-1,i==f)break;--i,t.t[i]||(e[t.G[t.s[i]]]=!1,t.G[t.s[i]]=-1);continue}if(t.u[i]==-1)e[A[i]]||ny(t,A[i],t.s[i])&&(t.G[t.s[i]]=A[i],e[A[i]]=!0,++i);else{if(_(t.H,t.G[t.u[i]],A[i])>=t.H.f)continue;r=_(t.H,t.G[t.u[i]],A[i]),t.t[i]?r==t.G[t.s[i]]&&zs(t,xt(t.H,t.G[t.u[i]],A[i]),t.v[i])&&++i:e[r]||ny(t,r,t.s[i])&&zs(t,xt(t.H,t.G[t.u[i]],A[i]),t.v[i])&&(e[r]=!0,t.G[t.s[i]]=r,++i)}if(i==D){if(Wj(t,n)&&VR(t,n)&&gR(t,e,n)){for(Q=f;Q<D;Q++)t.t[Q]||(P=t.s[Q],e[t.G[P]]=!1,t.G[P]=-1);return!0}--i,t.t[i]||(e[t.G[t.s[i]]]=!1,t.G[t.s[i]]=-1)}}return!1}function W$(t){var e,A,n,P,r,i,f;if(i=xi(t.o),A=null,i.length!=0&&(n=i.indexOf(k0(64)),n!=-1&&(A=(Ct(0,n,i.length),i.substr(0,n)),i=(Gt(n+1,i.length+1),i.substr(n+1)))),i.length!=0&&(e=qA(i,t.d.c),e!=0||at(i,\"?\"))){if(P=0,xi(t.p).length!=0)try{if(P=Q1(xi(t.p),P1,Et),P<(J1(),or)[e]-18||P>or[e]+12){RD(t.c,\"Your mass is out of range!\");return}}catch(D){if(D=a1(D),Xt(D,40)){RD(t.c,\"Your mass is not a number!\");return}else throw At(D)}if(f=-1,xi(t.q).length!=0)try{if(f=Q1(xi(t.q),P1,Et),f<0||f>15){RD(t.c,\"Your valence is out of range!\");return}}catch(D){if(D=a1(D),Xt(D,40)){RD(t.c,\"Your valence is not a number!\");return}else throw At(D)}r=B0(t.b)==1?32:B0(t.b)==2?48:B0(t.b)==3?16:0,Jx(t.d,e,P,f,r,A),t.a!=-1&&(gf(t.e,t.a,e,P,f,r),EP(t.e,t.a,A)),t.f=!0,j9(t.c)}}function _$(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m;if(A&&t.eb==6)for(T=c(F,k,6,t.L.length,15,1),r=0;r<t.V.q;r++)s=t.M[r],Jn(t.L[s],T[s],!P0(t.V,r)),++T[s];for(f=c(cl,A0,35,t.L.length,0,1),y=0;y<t.L.length;y++)t.eb==6&&(A9(new z8(A?4:0),t.L[y]),of(t.L[y])),D=new hu(t.L[y]),NF(D,e,null,u0|t.T),f[y]=D.v;for(m=1.8000000715255737*t.T,i=rn(t.V,24*t.ab),n=(t.U&4)==0?0:t.eb==5?eV*CD(t.k):rT(N(t.I,0))*t.T/i,g=.5*m,l=0;l<=t.L.length&&((t.U&4)!=0&&l==t.Y&&(mh(N(t.I,0),g-m/2,E9(t.k)/2,g-m/2+n,E9(t.k)/2),g+=n),l!=t.L.length);l++)Q=g-f[l].c,o=.5*(E9(t.k)-f[l].a)-f[l].d,CL(t.L[l],Q,o),g+=m+f[l].b;for(R5(t.G,e,new QA(0,0,CD(t.k),E9(t.k)),u0|t.T),h=c(F,k,6,t.L.length,15,1),P=0;P<t.V.q;P++)L=t.M[P],Be(t.V,P,kt(t.L[L],h[L])),Ie(t.V,P,pt(t.L[L],h[L])),++h[L];of(t.V)}function $$(t,e){var A,n,P,r,i,f,D,Q,o,L,s;for(f=new f1,ut(e,1),Q=c(Pt,ft,6,e.f,16,1),A=0;A<e.f;A++)if(t.f[A]&&(X(t.i,A)==7||X(t.i,A)==8||X(t.i,A)==16||X(t.i,A)==34||X(t.i,A)==52)){for(Q[A]=!0,D=0;D<e.j[A];D++)if(n=e.i[A][D],r=e.k[A][D],L=e.n[A][D],e.o[n]!=0&&e.o[A]<L){for(Q[n]=!0,mt(f,m1(r)),o=0;o<e.j[n];o++)P=e.i[n][o],Q[P]||(Q[P]=!0,i=e.k[n][o],s=e.n[n][o],e.o[n]+2==L+s&&(mt(f,m1(i)),L>=s&&(e.o[P]<s?QQ(e,P)&&_s(t,e,P,!0,!1,Q,f):_s(t,e,P,!0,!0,Q,f)),s>=L&&QQ(e,A)&&_s(t,e,P,!1,!1,Q,f),t.f[P]&&(X(t.i,P)==5||X(t.i,P)==6||X(t.i,P)==7||X(t.i,P)==8||X(t.i,P)==16||X(t.i,P)==34||X(t.i,P)==52)&&e.o[P]<s&&(L<=2&&s>=2&&QQ(e,A)&&Ak(t,e,r,i),L>=2&&s<=2&&QQ(e,P)&&Ak(t,e,i,r)),LA(f,f.a.length-1)),Q[P]=!1);LA(f,f.a.length-1),Q[n]=!1}Q[A]=!1}}function a$(t,e,A,n,P,r){var i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R,j,C,S,I,x,tt;for(v=-1,C=0,j=0,I=0,T=0,g=0,m=0,x=0,tt=0,C=0,o=0;o<t.d;o++)C+=n[o]*n[o];if(C=w.Math.sqrt(C),C>r)for(L=0;L<t.d;L++)n[L]*=r/C;for(j=0,s=0;s<t.d;s++)j+=n[s]*t.e[s];if(j>=0)return v;for(I=0,y=0;y<t.d;y++)S=w.Math.abs(n[y])/w.Math.max(w.Math.abs(e[y]),1),S>I&&(I=S);for(m=1e-7/I,T=1,h=0;h<1e3;){if(T<m){v=1;break}for(l=0;l<t.d;l++)P[l]=e[l]+T*n[l];if(t.k=is(t,P),t.k-A<=Lo*T*j)return 0;h==0?x=-j/(2*(t.k-A-j)):(b=t.k-A-T*j,R=tt-A-g*j,i=(b/(T*T)-R/(g*g))/(T-g),f=(-g*b/(T*T)+T*R/(g*g))/(T-g),i==0?x=-j/(2*f):(D=f*f-3*i*j,D<0?x=.5*T:f<=0?x=(-f+w.Math.sqrt(D))/(3*i):x=-j/(f+w.Math.sqrt(D))),x>.5*T&&(x=.5*T)),g=T,tt=t.k,T=w.Math.max(x,.1*T),++h}for(Q=0;Q<t.d;Q++)P[Q]=e[Q];return v}function ta(t){var e,A,n,P,r,i,f,D,Q,o,L;for(t._=c(E,q,6,t.R.f,15,1),e=0;e<t.R.f;e++)if(t.db[e]==1||t.db[e]==2){if(D=t.eb[e],Yh(t.R,e))for(f=0;f<O(t.R,e);f++){for(P=_(t.R,e,f),L=0,o=c(F,k,6,3,15,1),Q=0;Q<O(t.R,P);Q++)o[L]=_(t.R,P,Q),o[L]!=e&&++L;L==2&&t.f[o[0]]>t.f[o[1]]^t.H[o[0]]<t.H[o[1]]&&(D=!D)}else for(f=1;f<O(t.R,e);f++)for(Q=0;Q<f;Q++)r=_(t.R,e,f),i=_(t.R,e,Q),t.f[r]>t.f[i]&&(D=!D),t.H[r]<t.H[i]&&(D=!D);t._[e]=t.db[e]==1^D?1:2}else t._[e]=t.db[e];for(t.j=c(E,q,6,t.R.g,15,1),A=0;A<t.R.g;A++)if(t.o[A]==1||t.o[A]==2){for(D=!1,f=0;f<2;f++)if(n=z(t.R,f,A),O(t.R,n)==3){for(o=c(F,k,6,2,15,1),L=0,Q=0;Q<3;Q++)_(t.R,n,Q)!=z(t.R,1-f,A)&&(o[L++]=_(t.R,n,Q));t.f[o[0]]>t.f[o[1]]&&(D=!D),t.H[o[0]]<t.H[o[1]]&&(D=!D)}t.j[A]=t.o[A]==1^D?1:2}else t.j[A]=t.o[A]}function ea(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b;for(e=wW(t),r=c(E,q,6,t.f.r,15,1),A_(t,r,e),P=0;P<t.f.r;P++)r[P]==2&&(Vi(t.f,z(t.f,0,P))||Vi(t.f,z(t.f,1,P)))&&(r[P]=3);for(y=0;y<t.d.a.length;y++){for(L=N(t.d,y),D=Zb(L),g=L.c,T=new q5(L),h=-1,s=0;s<224&&D.a.length!=0;s++){if(Q=yQ(t.g,D.a.length),f=(ve(Q,D.a.length),D.a[Q]),i=aW(t,f[0],f[1]),A=c(F,k,6,i.length,15,1),n=0,s<32)for(l=1;l<i.length-1;l++)r[i[l]]==3&&(A[n++]=i[l]);else if(s<96)for(l=1;l<i.length-1;l++)r[i[l]]>=2&&(A[n++]=i[l]);else for(l=1;l<i.length-1;l++)r[i[l]]>=1&&(A[n++]=i[l]);if(n!=0){if(v=A[0],n>1)do v=A[yQ(t.g,n)];while(v==h);v!=h&&(h=v,aj(L,v),D=Zb(L),g>L.c&&(g=L.c,T=new q5(L)))}}qr(t.d,y,T),L=T,o=1;do{for(m=9999,l=0;l<L.e.length;l++)b=e[L.e[l]],b==o?Fa(L,l):b>o&&b<m&&(m=b);o=m}while(m!=9999)}}function zj(t,e,A,n,P){var r,i;if(P.d=!0,P.c=!0,e[A]==35){for(++A,t.r=!0,P.a=0,P.b=1;A<n&&Xn(e[A]&c1);)P.a=10*P.a+e[A]-48,++P.b,++A;if(P.a==0||P.a>=(J1(),X0).length)throw At(new C1(\"SmilesParser: Atomic number out of range. position:\"+(A-1)));return!0}if(e[A]>=65&&e[A]<=90){if(P.b=e[A+1]>=97&&e[A+1]<=122?2:1,P.a=(J1(),qA(S8(y2(e,A,(i=P.b,c0(),i))),321)),P.b==2&&P.a==0&&(P.b=1,P.a=qA(S8(y2(e,A,(r=P.b,r))),321)),P.d=!1,P.a==0)throw At(new C1(\"SmilesParser: Unknown atom label. position:\"+(A-1)));return!0}return e[A]==97&&e[A+1]==115||e[A]==115&&e[A+1]==101?(P.b=2,P.a=(J1(),qA(S8(y2(e,A,(r=P.b,c0(),r))),321)),P.c=!1,!0):e[A]==99||e[A]==110||e[A]==111||e[A]==112||e[A]==115?(P.b=1,P.a=(J1(),qA(S8(y2(e,A,(r=P.b,c0(),r))),321)),P.c=!1,!0):!1}function Aa(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m;for(A=-1,Q=!1,y=Ve,e=_8(t.i,t.c),h=0;h<t.d.length;h++)t.d[h]<t.v[h].d.length-1&&(s=m3(e,h,t.d[h])/m3(e,h,t.d[h]+1),y>s&&(y=s,A=h));for(T=0;T<t.c.length;T++)t.c[T]<t.u[T].b.length-1&&(s=o3(t.u[T],t.c[T])/o3(t.u[T],t.c[T]+1),y>s&&(y=s,A=T,Q=!0));if(A==-1){t.a=null;return}for(r=1,f=0;f<t.d.length;f++)(Q||f!=A)&&(r*=t.d[f]+1);for(D=0;D<t.c.length;D++)(!Q||D!=A)&&(r*=t.c[D]+1);for(t.a=c(KE,v2,165,r,0,1),Q?++t.c[A]:++t.d[A],i=0;i<r;i++){for(l=i,m=c(F,k,6,t.d.length,15,1),L=0;L<t.d.length;L++)(Q||L!=A)&&(g=t.d[L]+1,g!=1&&(m[L]=l%g,l=l/g|0));for(P=c(F,k,6,t.c.length,15,1),o=0;o<t.c.length;o++)(!Q||o!=A)&&(n=t.c[o]+1,n!=1&&(P[o]=l%n,l=l/n|0));Q?P[A]=t.c[A]:m[A]=t.d[A],t.a[i]=Nu(t,m,P)}cu(t.a,new vw),t.b=-1}function Yj(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R,j,C;if(!((t.F[e]&3)==0||(t.F[e]&3)==3||!Pi(t,e))){for(R=-1,v=-1,b=-1,m=-1,P=0,L=0;L<2;L++)for(n=t.D[L][e],l=0;l<t.e[n];l++)f=t.k[n][l],f!=e&&dt(t,f)==1&&(i=t.i[n][l],j=CQ(t,f,i),P<j&&(P=j,v=i,R=f,b=n,m=t.D[1-L][e]));if(v!=-1){for(s=0;s<2;s++)for(l=0;l<t.e[t.D[s][e]];l++)f=t.k[t.D[s][e]][l],f!=e&&dt(t,f)==1&&(t.H[f]=1);for(t.D[1][R]!=v&&(t.D[0][R]=t.D[1][R],t.D[1][R]=v),D=Et,y=0;y<t.j[b];y++)i=t.i[b][y],t.k[b][y]!=e&&D>i&&(D=i);for(T=c(F,k,6,2,15,1),g=0,o=0;o<t.j[m];o++)t.k[m][o]!=e&&(T[g++]=t.i[m][o]);r=bA(t.J[b].a,t.J[b].b,t.J[m].a,t.J[m].b),A=0,g==2?(T[0]>T[1]&&(C=T[0],T[0]=T[1],T[1]=C),Q=Je(r,Y0(t,m,T[0])),h=Je(r,Y0(t,m,T[1])),A=Q-h):A=Je(r,Y0(t,m,T[0])),A<0^(t.F[e]&3)==2^D==v?t.H[R]=257:t.H[R]=129}}}function na(t){var e,A,n;if(null.wd()||null.wd())j5(t,!0);else if(null.wd())t.r&&Bv();else if(null.wd())$I(t,null.wd());else if(null.wd())cv(t);else if(!null.wd())if(null.wd())TQ(t),dL(t,w.Math.max(t.eb,1));else if(null.wd())IT(t,!0,!0);else if(null.wd())IT(t,!1,!0);else if(null.wd())IT(t,!0,!1);else if(null.wd())_z(t);else if(null.wd())po=!po,po&&TQ(t);else if(null.wd())B5(t,!0);else if(null.wd())B5(t,!1);else if(null.wd())aK(t);else if(null.wd())yh(t._,TV,cV);else if(null.wd())if(null.wd(),e=Q1(null.wd(),P1,Et),A=Q1(null.wd(),P1,Et),P0(t.V,e))for(n=0;n<t.V.f;n++)P0(t.V,n)&&BD(t.V,n,A);else BD(t.V,e,A);else null.wd()?(t.H=6,t.eb=w.Math.max(t.eb,1),e1(t.k)):null.wd()?(t.H=256,t.eb=w.Math.max(t.eb,1),e1(t.k)):null.wd()&&ax(t,t.w==19?16:0)}function Pa(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l,h;if(P=new fD,mt(P.a,new Ze(\"cLogP Values are estimated applying an atom-type based increment system.\",2)),mt(P.a,new Ze(nV,2)),mt(P.a,new Ze(e4,2)),t){for(fi(t),ut(t,7),f=0,n=new lP,D=new Au(\"#0.000\"),e=0;e<t.f;e++)try{A=Ay(t,e,6241),h=le(n,UQ(A)),h?ze(n,UQ(A),m1(h.a+1)):ze(n,UQ(A),m1(1))}catch(T){if(T=a1(T),Xt(T,19))++f;else throw At(T)}for(f!=0&&mt(P.a,new Ze(\"Warning: \"+f+\" atom type(s) could not be determined.\",2)),l=(i=new x8(new I8(new wr(n).a).b),new gr(i));Cr(l.a.a);)y=(r=B9(l.a),r.ed()),o=ar(Jf,y),(o<0?-1:o)!=-1?_P(P,(s=y,WP(Gr(n,s))+\" * \"+yg(D,Y4[Q=ar(Jf,y),Q<0?-1:Q])+\" AtomType: 0x\"+xT(y.a)),2):_P(P,\"Warning: For atom type 0x\"+xT(y.a)+\" (\"+(L=y,WP(Gr(n,L)))+\" times found) is no increment available.\",2)}return P}function Kj(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m;for(h=e.f,t.j=c(OA,te,6,e.f,14,1),t.k=c(F,k,6,e.f,15,1),f=0;f<h;f++)t.j[f]=O9(V(Y(sp(e,f),e.B[f]),p6),xp),t.k[f]=e.C[f],(A&1)!=0&&(t.k[f]+=e.s[f]+16<<8),(A&2)!=0&&(t.k[f]+=e.A[f]<<16);for(t.B=c(OA,te,6,e.f,14,1),g=(ut(e,7),e.p),l=0;l<g.j.a.length;l++){for(y=!1,Q=N(g.k,l),o=0,L=Q.length;o<L;++o)if(s=Q[o],(e.G[s]&l8)!=0){y=!0;break}if(!y)for(m=N(g.k,l).length,P=N(g.j,l),r=0,i=P.length;r<i;++r)n=P[r],m==3?t.B[n]=Y(t.B[n],i9):m==4?t.B[n]=Y(t.B[n],f9):m==5?t.B[n]=Y(t.B[n],D9):m==6?t.B[n]=Y(t.B[n],u9):m==7&&(t.B[n]=Y(t.B[n],Q9))}for(T=e.g,t.n=c(F,k,6,e.g,15,1),D=0;D<T;D++)t.n[D]=(Yb(e,D)|e.G[D])&6291967^6291840,(A&4)!=0?(t.n[D]&2)!=0&&(t.n[D]|=8):(A&8)!=0&&(t.n[D]&2)!=0&&D<e.g&&Re(e.p,D)&&(t.n[D]|=8)}function ra(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l;if(f=-1,P=bs(t,e),i=P==-1?YL(t,e):-1,A!=0){for(y=-1,o=0;o<t.V.f;o++)o!=P&&ne(t.V,o)==A&&(!mP(t.V,e)||!P0(t.V,o))&&(D=EA(t.V,o),y<D&&(y=D));for(L=0;L<t.V.g;L++)L!=i&&cP(t.V,L)==A&&(!mP(t.V,e)||!mP(t.V,L))&&(D=Wi(t.V,L),y<D&&(y=D));if((P==-1?cP(t.V,i):ne(t.V,P))!=A)f=w.Math.min(y+1,31);else if(f=P==-1?Wi(t.V,i):EA(t.V,P),mP(t.V,e)){for(l=!0,s=0;s<t.V.f;s++)if(s!=P&&P0(t.V,s)&&ne(t.V,s)==A&&EA(t.V,s)!=f){l=!1;break}for(Q=0;Q<t.V.g;Q++)if(Q!=i&&mP(t.V,Q)&&cP(t.V,Q)==A&&Wi(t.V,Q)!=f){l=!1;break}l&&(f<=y?(++f,f==32&&(f=0)):f=0)}else f<=y?(++f,f==32&&(f=0)):f=0}if(mP(t.V,e))for(Q=0;Q<t.V.g;Q++)mP(t.V,Q)&&p9(t.V,Q)&&(n=bs(t,Q),r=YL(t,Q),n!=-1?Me(t.V,n,A,f):r!=-1&&U8(t.V,r,A,f));else P!=-1?Me(t.V,P,A,f):i!=-1&&U8(t.V,i,A,f)}function ia(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R;for(P=c(cl,A0,35,t.k.length,0,1),R=0,b=0,y=0;y<t.k.length;y++)Q2(t.e[y],e,null,u0),P[y]=t.e[y].v,R+=P[y].b,b=w.Math.max(b,P[y].a);for(f=c(cl,A0,35,t.a.length,0,1),v=0,m=0,l=0;l<t.a.length;l++)Q2(t.b[l],e,null,65552),f[l]=t.b[l].v,v=w.Math.max(v,f[l].b),m+=f[l].a+12;if(n=w.Math.max(48,v+24),b=w.Math.max(b,24+2*m),A=-1,!t.g)t.g=new eU,mt(t.g,new GD),A=0;else{for(h=0;h<t.g.a.length;h++)if(Xt(N(t.g,h),62)){A=h;break}A==-1&&(A=t.g.a.length,mt(t.g,new GD))}for(g=18,s=0;s<t.k.length;s++){if(s==t.n){for(mh(N(t.g,A),g-18,b/2,g-18+n,b/2),r=g+-6,i=.5*(b-12)-m,T=0;T<t.a.length;T++)Q=r+.5*(v-f[T].b)-f[T].c,L=i-f[T].d,SU(t.b[T],new J3(Q,L)),i+=12+f[T].a;g+=n}D=g-P[s].c,o=.5*(b-P[s].a)-P[s].d,SU(t.e[s],new J3(D,o)),g+=36+P[s].b}t.o=!1}function fa(t){var e,A,n,P,r,i,f,D,Q,o,L,s;for(ut(t.g,t.N),D=w.Math.max(t.g.f,t.g.g)+16,t.s=c(F,k,6,D,15,1),t.u=c(F,k,6,D,15,1),t.v=c(F,k,6,D,15,1),t.t=c(Pt,ft,6,D+1,16,1),i=c(Pt,ft,6,t.g.f,16,1),f=c(Pt,ft,6,t.g.g,16,1),n=0,A=0;A<t.g.f;A++)if(!t.D[A]&&!i[A])for(t.s[n]=A,t.v[n]=-1,t.u[n]=-1,Q=n;n<=Q;){for(o=0;o<De(t.g,t.s[n]);o++)Q=e5(t,n,Q,o,i,f,-1);for(;t.t[++n];);}if(t.w=n,t.p!=0){for(Q=t.w-1,r=0;r<t.d;r++)for(n=0;n<=Q;){for(L=0;L<De(t.g,t.s[n]);L++)Q=e5(t,n,Q,L,i,f,r);for(;t.t[++n];);}for(e=0;e<t.g.f;e++)if(t.D[e]&&!i[e])for(t.s[n]=e,t.v[n]=-1,t.u[n]=-1,Q=n;n<=Q;){for(L=0;L<De(t.g,t.s[n]);L++)_(t.g,t.s[n],L)<t.g.f&&(Q=e5(t,n,Q,L,i,f,t.f[e]));for(;t.t[++n];);}for(t.e=c(F,k,6,t.d,15,1),s=0;s<t.d;s++)t.e[s]=-1;for(o=t.w;o<n;o++)P=t.f[t.s[o]],t.e[P]==-1&&(t.e[P]=o)}t.A=n}function Da(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v;for(l=0,h=(D=Pe(e,l),D==-1?e.length:D),r=Q1((Ct(l,h,e.length),e.substr(l,h-l)),P1,Et),l=lA(e,h),h=(Q=Pe(e,l),Q==-1?e.length:Q),i=Q1((Ct(l,h,e.length),e.substr(l,h-l)),P1,Et),l=lA(e,h),h=(o=Pe(e,l),o==-1?e.length:o),A=ID(t,Q1((Ct(l,h,e.length),e.substr(l,h-l)),P1,Et)),l=lA(e,h),h=(L=Pe(e,l),L==-1?e.length:L),n=ID(t,Q1((Ct(l,h,e.length),e.substr(l,h-l)),P1,Et)),g=0,m=0;(l=lA(e,h))!=-1;)if(h=(f=Pe(e,l),f==-1?e.length:f),T=(Ct(l,h,e.length),e.substr(l,h-l)),y=T.indexOf(k0(61)),s=(Ct(0,y,T.length),T.substr(0,y)),v=Q1((Gt(y+1,T.length+1),T.substr(y+1)),P1,Et),at(s,\"CFG\"))switch(v){case 1:g=1;break;case 2:g=i==2?3:4;break;case 3:g=6}else at(s,\"TOPO\")&&(m=v);P=KR(t,A,n,i,g,m),P+1!=r&&(!t.c&&(t.c=new lP),ze(t.c,m1(r),m1(P)))}function ua(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l;if(Q=B1(Y1(e)),Q.length==0||(t.e=Q),Y1(e),n=Y1(e),!A&&n.startsWith(Sy)&&(P=(Gt(13,n.length+1),n.substr(13)),OQ(P,!0,t)))return!0;for(l=Y1(e),y=Q1(B1((Ct(0,3,l.length),l.substr(0,3))),P1,Et),L=Q1(B1((Ct(3,6,l.length),l.substr(3,3))),P1,Et),f=new $2,i=0;i<y;i++){if(l=Y1(e),l==null||!l.startsWith(\"$MOL\"))throw At(new C1(uH));s=new zA,D=new ru;do l=Y1(e),D.a+=\"\"+l,D.a+=$A;while(l!=null&&!l.startsWith(Dr));if(l==null)throw At(new C1(QH));mU(f,s,new Pn(new Rr(D.a))),mt(t.g,s),t.d=-1}for(r=0;r<L;r++){if(l=Y1(e),l==null||!l.startsWith(\"$MOL\"))throw At(new C1(uH));o=new zA,D=new ru;do l=Y1(e),D.a+=\"\"+l,D.a+=$A;while(l!=null&&!l.startsWith(Dr));if(l==null)throw At(new C1(QH));mU(f,o,new Pn(new Rr(D.a))),mt(t.f,o),t.d=-1}return!0}function Qa(t,e){D8();var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R,j,C,S,I,x;for(Xm(),l=c(Pt,ft,6,e.r,16,1),Jj(e,l),i=0;i<e.g;i++)if(l[i]&&(S=c(F,k,6,4,15,1),I=new mT,x=SF(e,i,S,I),x!=null&&!eZ(S,t)&&(C=(R=r2(uP,x),R?Hj(R):null),Q=(j=r2(uP,x),j?Qj(j):null),g=(b=r2(uP,x),b?tp(b):null),C==null&&(T=new r6(e,S),C=T.b,Q=T.a,g=T.c),C!=null))){if(n=null,v=0,(e.F[i]&64)==0){for(y=k1(Pt,[T0,ft],[12,6],16,[2,e.q],2),D=c(F,k,6,2,15,1),L=0;L<2;L++)D[L]=SQ(e,I.e[L],I.b[L],y[L],null,null);for(v=D[0]<D[1]?0:1,n=c(F,k,6,D[v],15,1),s=0,A=0;A<e.q;A++)y[v][A]&&(n[s++]=A)}mt(t,new SL(C,Q,g,S,n,v))}for(r=0;r<e.g;r++)if(e.H[r]==1&&(e.F[r]&64)==0){for(L=0;L<2;L++)if(f=e.D[L][r],h=e0(e,f),o=e.e[f]-h,h==1&&o!=0){m=e.D[1-L][r],P=e.C[f],P>6&&e.o[m]==1?__(e,f,m,o,t):e.o[m]!=2&&e.e[m]>1&&i_(e,f,m,o,t);break}}}function oa(t,e,A){var n,P,r,i,f,D,Q;return r=c(Ut,Tt,6,3,15,1),r[0]=kt(t.R,A.a)-kt(t.R,e.a),r[1]=pt(t.R,A.a)-pt(t.R,e.a),r[2]=vA(t.R,A.a)-vA(t.R,e.a),D=c(Ut,Tt,6,3,15,1),D[0]=kt(t.R,e.b)-kt(t.R,e.a),D[1]=pt(t.R,e.b)-pt(t.R,e.a),D[2]=vA(t.R,e.b)-vA(t.R,e.a),Q=c(Ut,Tt,6,3,15,1),Q[0]=kt(t.R,A.b)-kt(t.R,A.a),Q[1]=pt(t.R,A.b)-pt(t.R,A.a),Q[2]=vA(t.R,A.b)-vA(t.R,A.a),i=c(Ut,Tt,6,3,15,1),i[0]=r[1]*D[2]-r[2]*D[1],i[1]=r[2]*D[0]-r[0]*D[2],i[2]=r[0]*D[1]-r[1]*D[0],f=c(Ut,Tt,6,3,15,1),f[0]=r[1]*i[2]-r[2]*i[1],f[1]=r[2]*i[0]-r[0]*i[2],f[2]=r[0]*i[1]-r[1]*i[0],n=(D[0]*f[0]+D[1]*f[1]+D[2]*f[2])/(w.Math.sqrt(D[0]*D[0]+D[1]*D[1]+D[2]*D[2])*w.Math.sqrt(f[0]*f[0]+f[1]*f[1]+f[2]*f[2])),P=(Q[0]*f[0]+Q[1]*f[1]+Q[2]*f[2])/(w.Math.sqrt(Q[0]*Q[0]+Q[1]*Q[1]+Q[2]*Q[2])*w.Math.sqrt(f[0]*f[0]+f[1]*f[1]+f[2]*f[2])),n<0^P<0?1:2}function Xj(t,e,A,n){var P,r,i,f,D;D=n.a.length,t.f[e]!=0&&Oe(n,t.f[e]==1?47:92),t.j==1&&(P=Ae(t.k,e)&127,P!=0&&((P&1)!=0&&t.f[e]==0&&(n.a+=\"-\"),(P&2)!=0&&(n.a.length!=D&&(n.a+=\",\"),n.a+=\"=\"),(P&4)!=0&&(n.a.length!=D&&(n.a+=\",\"),n.a+=\"#\"),(P&32)!=0&&(n.a.length!=D&&(n.a+=\",\"),n.a+=\"$\"),(P&64)!=0&&(n.a.length!=D&&(n.a+=\",\"),n.a+=\"$\"),(P&8)!=0&&(n.a.length!=D&&(n.a+=\",\"),n.a+=\":\"),(P&16)!=0&&(n.a.length!=D&&(n.a+=\",\"),J(n,_0(t.k,A)?\"<-\":\"->\")))),D==n.a.length&&(!_e(t.k,e)||(t.j&4)!=0)&&(r=l1(t.k,e)&127,r==1?vn(t.k,z(t.k,0,e))&&vn(t.k,z(t.k,1,e))&&(t.j&4)==0&&t.f[e]==0&&(n.a+=\"-\"):r==2?n.a+=\"=\":r==4?n.a+=\"#\":r==32||r==64?n.a+=\"$\":r==8?n.a+=\":\":r==16&&J(n,_0(t.k,A)?\"<-\":\"->\")),t.j==1&&(i=D==n.a.length?\"\":\";\",f=Ae(t.k,e)&384,f==256?n.a+=i+\"@\":f==128&&(n.a+=i+\"!@\"))}function Ua(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T;if(t.R.f==0){t.s=\"\";return}for(L=t.jb&t.b,T=t.jb?16:8,W3(t,!0),Oe(t.u,L?35:33),Ot(t,t.jb?1:0,1),Ot(t,e?1:0,1),Ot(t,T>>1,4),l=0,D=1;D<t.R.f;D++)l=rR(t,t.B[D],t.F[D]==-1?-1:t.B[t.F[D]],l,A);if(L)for(Q=0;Q<t.R.f;Q++)for(n=t.B[Q],y=O(t.R,n);y<Ht(t.R,n);y++)l=rR(t,_(t.R,n,y),n,l,A);if(t.R.f>1&&l==0){t.s=\"\";return}for(i=1<<T,s=l/((i>>1)-1),h=l+.5*s,o=1;o<t.R.f;o++)jb(t,t.B[o],t.F[o]==-1?-1:t.B[t.F[o]],h,s,T,A);if(L)for(f=0;f<t.R.f;f++)for(n=t.B[f],y=O(t.R,n);y<Ht(t.R,n);y++)jb(t,_(t.R,n,y),n,h,s,T,A);e&&(r=t.jb?1.5:(J1(),J1(),gn),P=pR(t.R,L?t.R.q:t.R.f,L?t.R.r:t.R.g,r,A),Ot(t,w.Math.min(i-1,w.Math.max(0,vt(.5+w.Math.log10(P/.1)/w.Math.log10(2e3)*(i-1)))),T),Ot(t,vT(A[t.B[0]].a/P,i),T),Ot(t,vT(A[t.B[0]].b/P,i),T),t.jb&&Ot(t,vT(A[t.B[0]].c/P,i),T)),t.s=HL(t)}function W5(t,e){var A,n,P,r,i,f,D,Q,o,L;for(P=Gu(e,0);P>0&&e[P-1]==45;)P=Gu(e,P+1);for(r=P==-1?-1:Gu(e,P+1);r>0&&e[r-1]==45;)r=Gu(e,r+1);if(r==-1)throw At(new C1(\"Missing one or both separators ('>').\"));if(Gu(e,r+1)!=-1)throw At(new C1(\"Found more than 2 separators ('>').\"));for(L=new i8,o=0,n=0;n<e.length;){for(;n<e.length&&e[n]==46;)++n;if(n==e.length)break;for(Q=n,D=-1,i=0,A=n;A<e.length;A++){if(e[A]==40){++i;continue}if(e[A]==41){if(--i<0)throw At(new C1(\"Found closing bracket without matching opening one.\"));continue}if(i==0&&(e[A]==46&&(t.o||A+1<e.length&&e[A+1]==46)||e[A]==62&&(A==0||e[A-1]!=45))){D=A;break}}if(D==-1&&(D=e.length),Q<D){if(f=new zA,f6(t,f,e,Q,D,!0,!0),t.q==1&&t.p)return W5(new LQ(t.j|2),e);o==0?(mt(L.g,f),L.d=-1):o==1?mt(L.a,f):(mt(L.f,f),L.d=-1)}for(n=D;n<e.length&&e[n]==62;)++n,++o}return L}function _5(){_5=d1;var t,e,A;for(new ef(1,0),new ef(10,0),new ef(0,0),kE=c(bE,Ye,31,11,0,1),Vo=c(lr,te,6,100,15,1),rc=B(d(Ut,1),Tt,6,15,[1,5,25,125,625,3125,15625,78125,390625,1953125,9765625,48828125,244140625,1220703125,6103515625,30517578125,152587890625,762939453125,3814697265625,19073486328125,95367431640625,476837158203125,0x878678326eac9]),ic=c(F,k,6,rc.length,15,1),ci=B(d(Ut,1),Tt,6,15,[1,10,100,1e3,AP,Ry,1e6,1e7,1e8,xf,1e10,1e11,1e12,1e13,1e14,1e15,1e16]),gl=c(F,k,6,ci.length,15,1),Eo=c(bE,Ye,31,11,0,1),t=0;t<Eo.length;t++)kE[t]=new ef(t,0),Eo[t]=new ef(0,t),Vo[t]=48;for(;t<Vo.length;t++)Vo[t]=48;for(A=0;A<ic.length;A++)ic[A]=vs(rc[A]);for(e=0;e<gl.length;e++)gl[e]=vs(ci[e]);Pr()}function Zj(t){var e,A,n,P,r,i;if(r='<svg id=\"'+lf(t.g!=null?t.g:\"mol\"+E2)+H0+'xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" width=\"'+t.n+'px\" height=\"'+t.f+'px\" viewBox=\"0 0 '+t.n+\" \"+t.f+`\">\n`,i=t.i?\"<style> #\"+lf(t.g!=null?t.g:\"mol\"+E2)+\" { pointer-events:none; } #\"+lf(t.g!=null?t.g:\"mol\"+E2)+` .event  { pointer-events:all; } line { stroke-linecap:round; } polygon { stroke-linejoin:round; } </style>\n`:'<g style=\"font-size:'+t.k+'px; fill-opacity:1; stroke-opacity:1; fill:black; stroke:black; font-weight:normal; text-rendering:optimizeLegibility; font-family:sans-serif; stroke-linejoin:round; stroke-linecap:round; stroke-dashoffset:0;\">',r+=\"  \",r+=i,t.i){for(P=new Zt(t.b);P.a<P.c.a.length;)n=$t(P),V9(t,n);for(A=new Zt(t.a);A.a<A.c.a.length;)e=$t(A),V9(t,e)}return t.i||V9(t,\"</g>\"),r+t.c.a+\"</svg>\"}function La(t,e,A,n,P){var r,i,f,D,Q,o,L,s,y,l,h,T,g,m;if(s=c(Pt,ft,6,t.g,16,1),s[P]=!0,y=c(F,k,6,11,15,1),l=L2(t,y,n,e,10,null,s),l==-1)return!1;for(i=1;!yA(t.p,A,y[i]);)++i;if(r=l-i,f=y[i],m=I3(t.p,A),m==6&&r==2&&i==3&&Ch(t,y[1])>=3){for(g=h3(t.p,A),L=0;L<6;L++)if(e==g[L]){if(T=Kh(t.p,A,f==g[Kh(t.p,A,L+2)]?L-2:L+2),h=g[T],o=t.u[h]&cn,(o==0?0:o==re?2:o==N1?3:4)>=3&&iR(t,y[1],h,2,null)==2)return!0;break}}if(D=t.o[f]==1||f<t.f&&r0(t.p,f)||SP(t,f,!1),Q=!D&&t.C[f]==7&&t.s[f]!=1,r==1)return!D&&!Q&&m<=4&&i<=3;switch(m){case 4:if(!D&&!Q&&i<=4)return!0;break;case 5:if(Q){if(i<=3)return!0}else if(!D&&i<=4)return!0;break;case 6:if(r==2){if(D){if(i<=4)return!0}else if(!Q&&i<=3)return!0}else if(r==3){if(D){if(i<=6)return!0}else if(i<=4)return!0}break;case 7:if(r==3&&i<=3)return!0}return!1}function sa(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g;for(e=0;e<t.j.f;e++){for(i=0,f=!1,Q=!1,s=0;s<O(t.j,e)&&!f;s++)if(P=xt(t.j,e,s),t.e[P]){for(++i,n=_(t.j,e,s),tA(t.j,n)&&(Q=!0),h=0;h<O(t.j,n);h++)if(T=_(t.j,n,h),g=xt(t.j,n,h),T!=e&&t.e[g]){f=!0;break}}if(i>=2&&!f){for(r=c(F,k,6,i,15,1),o=gQ(t.j,e),o==0&&(o=2),l=0,y=0;y<O(t.j,e);y++)P=xt(t.j,e,y),t.e[P]&&(n=_(t.j,e,y),r[l++]=(A=X(t.j,n),((A==8?14+(O(t.j,n)==1?1:0):A==7?12+(O(t.j,n)==1?1:0):A==16?10+(O(t.j,n)==1?1:0):A==34?8+(O(t.j,n)==1?1:0):A==15?6+(O(t.j,n)==1?1:0):A==33?4+(O(t.j,n)==1?1:0):A==6?2+(O(t.j,n)==1?0:1):O(t.j,n)==1?0:1)<<16)+y));for(r.sort(Fe(D0.prototype.hd,D0,[])),t.b-=1+i,t.d[e]=!1,D=w.Math.min(i-1,o),L=0;L<r.length;L++)n=_(t.j,e,r[L]&c1),P=xt(t.j,e,r[L]&c1),t.d[n]=!1,t.e[P]=!1,--t.c,L<r.length-D?E0(t.j,n,Q?-1:1):w0(t.j,P,2)}}}function Wj(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h;for(i=0,D=0;D<t.g.f;D++)if((t.f==null||t.f[D]==e)&&gt(V(y0(t.g,D),ge),0)){if(s=t.G[D],L=d0(t.g,D),l=d0(t.H,s),L==0||L==3)continue;if(l==0||l==3)return!1;if(ne(t.g,D)==1){++i;continue}if(ne(t.H,s)==1)return!1;if(ne(t.g,D)==2){++i;continue}if(ne(t.H,s)==2||d5(t,D)==(L==l))return!1}if(i!=0){for(P=c(F,k,6,i,15,1),r=0,Q=0;Q<t.g.f;Q++)(t.f==null||t.f[Q]==e)&&gt(V(y0(t.g,Q),ge),0)&&(L=d0(t.g,Q),L!=0&&L!=3&&(P[r++]=EA(t.g,Q)<<24|ne(t.g,Q)<<22|Q));for(P.sort(Fe(D0.prototype.hd,D0,[])),r=0;r<P.length;)for(o=P[r]&x0,y=t.G[o],A=P[r]&-4194304,n=d5(t,o)^d0(t.g,o)==d0(t.H,y),++r;r<P.length&&(P[r]&-4194304)==A;r++)if(f=P[r]&x0,s=t.G[f],ne(t.H,s)!=ne(t.H,y)||EA(t.H,s)!=EA(t.H,y)||(h=d5(t,f)^d0(t.g,f)==d0(t.H,s),h!=n))return!1}return!0}function ya(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v;if(s=0,y=(r=Pe(e,s),r==-1?e.length:r),v=(Ct(s,y,e.length),e.substr(s,y-s)),at(\"DEFAULT\",v)&&(s=lA(e,y),y=(i=Pe(e,s),i==-1?e.length:i),v=(Ct(s,y,e.length),e.substr(s,y-s)),v.startsWith(\"CLASS\")&&(s=lA(e,y),y=(f=Pe(e,s),f==-1?e.length:f),v=(Ct(s,y,e.length),e.substr(s,y-s)),at(\"-\",v)&&(s=lA(e,y),y=(D=Pe(e,s),D==-1?e.length:D),v=(Ct(s,y,e.length),e.substr(s,y-s))))),Q1(v,P1,Et),s=lA(e,y),y=(Q=Pe(e,s),Q==-1?e.length:Q),m=(Ct(s,y,e.length),e.substr(s,y-s)),!!at(\"DAT\",m)){for(s=lA(e,y),y=(P=Pe(e,s),P==-1?e.length:P),Q1((Ct(s,y,e.length),e.substr(s,y-s)),P1,Et),g=new lP,s=lA(e,y);s!=-1;)s=cZ(g,e,s);n=(h=m2,WP(Gr(g,h))),L=(T=\"FIELDNAME\",WP(Gr(g,T))),o=(l=\"FIELDDATA\",WP(Gr(g,l))),!(!at(ky,L)||n==null||o==null)&&(A=L8(n,\" \"),A.length==2&&EP(t.j,Q1(A[1],P1,Et)-1,o))}}function _j(t,e,A,n){var P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R,j,C,S,I,x,tt,M,K;if(v=t.f.k,P=N(t.e,A),K=P.a,L=e[t.a],T=It(v,K)>0&&v.j[K]==v.e[K],h=OO(t.f.a,t.f.t[K]),!T&&!h)return i=v.i[K][2],v.C[i]==1&&(i=t.f.t[i],(A==0?i>K:t.f.t[v.i[K][1]]>i)&&(n=!n)),n;if(T&&(r=v.i[K][A],i=t.f.t[r],i>K&&(n=!n,v.C[r]==1&&(n=!n))),h){for(b=v.e[K],y=c(F,k,6,b-1,15,1),l=c(F,k,6,b-1,15,1),R=0,g=0,C=0;g<b;g++)i=v.i[K][g],i!=L&&(y[C]=i,Q=u1(v,K,i),x=qu(t.f.s,t.f.t[K]+\"_\"+t.f.t[i]),l[C++]=x==null?-1:Q,x!=null&&++R);if(T)y[0]<K&&(n=!n);else switch(R){case 1:if(It(v,K)>0)break;m=l[0]>=0,s=y[m?0:1],j=y[m?1:0],j>K?s>K&&v.C[j]!=1&&(n=!n):s<K&&(n=!n);break;case 2:f=Dv(t,l[0],K),D=Dv(t,l[1],K),tt=qu(t.f.s,K+\"_\"+t.f.t[f]),M=qu(t.f.s,K+\"_\"+t.f.t[D]),o=t.b,A==0?(S=tt[1]<o?tt[1]:tt[0],I=M[1]<o?M[1]:M[0]):(S=tt[0]<o?tt[1]:tt[0],I=M[0]<o?M[1]:M[0]),S<I!=f<D&&(n=!n)}}return n}function la(t){var e,A,n,P,r,i,f,D,Q,o,L,s;for(r=0,o=0,i=0,f=0,D=0,Q=0,L=0,s=!1,e=c(Pt,ft,6,32,16,1),A=0;A<t.R.f;A++)t.db[A]!=0&&(++r,t.db[A]==3?++o:t.bb[A]==0?(++i,t.P&&uD(t.P,A)&&++f):t.bb[A]==2?t.ab[A]==0&&++Q:t.bb[A]==1&&(P=t.ab[A],e[P]||(++L,e[P]=!0),t.ab[A]==0&&++D,t.P&&uD(t.P,A)&&(s=!0)));for(n=0;n<t.R.g;n++)t.o[n]!=0&&l1(t.R,n)==1&&(++r,t.o[n]==3?++o:t.n[n]==0?(++i,t.P&&uD(t.P,z(t.R,0,n))&&uD(t.P,z(t.R,1,n))&&++f):t.n[n]==2?t.k[n]==0&&++Q:t.n[n]==1&&(P=t.k[n],e[P]||(++L,e[P]=!0),t.k[n]==0&&++D,t.P&&uD(t.P,z(t.R,0,n))&&uD(t.P,z(t.R,1,n))&&(s=!0)));if(r==0){t.R.I=u0;return}if(o!=0){t.R.I=0;return}if(t.K){Ol(t.R,I0+(1<<L));return}D+f==r&&!s?t.R.I=yy:i==r?t.R.I=T8:Q==r?t.R.I=327680:i==r-1&&D==1?t.R.I=Ui:Ol(t.R,458752+(1<<L))}function ha(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R,j,C;if(t.j[e]!=2||t.n[e][0]!=2||t.n[e][1]!=2||t.j[t.i[e][0]]<2||t.j[t.i[e][1]]<2||t.o[t.i[e][0]]!=1||t.o[t.i[e][1]]!=1){ce(t,e,0,!1);return}for(R=-1,b=-1,v=-1,T=-1,r=0,L=0;L<2;L++)for(n=t.i[e][L],l=0;l<t.e[n];l++)i=t.i[n][l],i!=e&&(f=t.k[n][l],j=CQ(t,f,i),r<j&&(r=j,b=i,R=f,v=n,T=t.i[e][1-L]));if(b!=-1){for(s=0;s<2;s++)for(n=t.i[e][s],l=0;l<t.e[n];l++)i=t.i[n][l],f=t.k[n][l],i!=e&&t.D[0][f]==n&&(t.H[f]=1);for(t.D[1][R]!=b&&(t.D[0][R]=t.D[1][R],t.D[1][R]=b),D=Et,y=0;y<t.j[v];y++)i=t.i[v][y],i!=e&&D>i&&(D=i);for(g=c(F,k,6,2,15,1),m=0,o=0;o<t.j[T];o++)i=t.i[T][o],i!=e&&(g[m++]=i);A=bA(t.J[e].a,t.J[e].b,t.J[T].a,t.J[T].b),P=0,m==2?(g[0]>g[1]&&(C=g[0],g[0]=g[1],g[1]=C),Q=Je(A,Y0(t,T,g[0])),h=Je(A,Y0(t,T,g[1])),P=Q-h):P=Je(A,Y0(t,T,g[0])),P<0^(t.u[e]&3)==1^D==b?t.H[R]=257:t.H[R]=129}}function Ta(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R,j,C;if(gt(t.v,0)&&(z1(),E1(M1(Date.now()),t.v)))return!1;for(y=e.a,m=0,i=1;i<y.length;i++)if(y[i]!=null)for(D=0;D<i;D++)y[i][D]!=0&&k3(t.B,i,D).length!=2&&(m+=y[i][D]);if(m>6)return!1;for(P=null,s=null,Q=null,A=Ve,l=e.b,r=1;r<y.length;r++)if(y[r]!=null){for(f=0;f<r;f++)if(y[r][f]>1&&k3(t.B,r,f).length==2){for(g=k3(t.B,r,f),b=c(F,k,6,2,15,1),L=0;L<2;L++)v=t.s[g[L]],b[L]=rd(e.c,v.a);for(C=c(F,k,6,2,15,1),h=-1;h<=1;h+=2)for(C[0]=h*8,T=-1;T<=1;T+=2){for(C[1]=T*8,n=y[r][f],R=1;R<=3;R++){for(P?YD(P,e.c):P=new hD(e.c),o=0;o<2;o++)Mk(P,t.s[g[o]],b[o]+R*C[o]<<16>>16);if(j=TW(t,P,t.q[r],t.q[f]),j<n-1){if(n=j,s?YD(s,P):s=new hD(P),n<1)break}else break}n<y[r][f]&&n<A&&(A=n,Q?YD(Q,s):Q=new hD(s))}}}return Q?(Ij(t,e,Q),e.b>=l?(Av(e,l,y),!1):(YD(e.c,Q),!0)):!1}function ca(t,e,A,n,P){var r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R,j,C,S,I,x,tt,M;if(t.e.length==1)return 0;for(I=P+w.Math.sqrt(n),o=c(Ut,Tt,6,36,15,1),l=0;l<t.e.length;l++)r=sn(e,A,t.a[l],t.b[l]),f=JI(Jt(M1(w.Math.round(r*36/F0)))),L=e-t.a[l],s=A-t.b[l],tt=L*L+s*s,o[f]<tt&&(o[f]=tt);for(R=-1,b=-1,h=0;h<36;h++)o[h]=w.Math.sqrt(o[h]),R<o[h]&&(R=o[h],b=h);for(x=b-18<0?b-18+36:b-18>=36?b-18-36:b-18,T=0;T<=18;T++)o[x+T<0?x+T+36:x+T>=36?x+T-36:x+T]+=.01*T,o[x-T<0?x-T+36:x-T>=36?x-T-36:x-T]+=.01*T;for(M=c(Ut,Tt,6,9,15,1),D=c(Ut,Tt,6,9,15,1),g=1;g<9;g++)M[g]=w.Math.sin(g*KC),D[g]=w.Math.cos(g*KC);for(C=Ve,j=-1,i=0;i<36;i++)if(!(o[i]>=C)){for(v=o[i],y=1;y<9;y++){for(m=-1;m<=1&&(S=i+m*y<0?i+m*y+36:i+m*y>=36?i+m*y-36:i+m*y,!(!(o[S]*D[y]<=v)&&(Q=D[y]*w.Math.min(o[S],I/M[y]),v<Q&&(v=Q,C<=v))));m+=2);if(C<=v)break}C>v&&(C=v,j=i)}return F0*j/36}function $j(t){for(var e,A,n,P,r;t.t.a.length!=0;)if(n=LA(t.t,0),t.I[n.b]==0&&t.B[n.a]==0)return n;for(;t.g>=0;){for(;t.g>=2&&t.c<t.j[t.g].length;){if(A=t.j[t.g][t.c],e=le(t.k[t.g],A),X(t.D,e[0][0])==6&&(n=aR(t,e[0],e[1]),n))return n;++t.c}for(;t.g>=2&&t.d<t.j[t.g].length;){if(A=t.j[t.g][t.d],e=le(t.k[t.g],A),X(t.D,e[0][0])!=6&&(n=aR(t,e[0],e[1]),n))return n;++t.d}for(;t.p&&t.g==0&&t.e<t.j[0].length;)if(A=t.j[0][t.e++],e=le(t.k[t.g],A),e[0].length==1&&e[1].length==1&&(n=Xk(t,e[0][0],e[1][0]),n))return n;for(;t.g==0&&t.f<t.j[t.g].length;)if(A=t.j[t.g][t.f++],e=le(t.k[t.g],A),e[0].length>=e[1].length&&nR(e[0],t.I,t.G,t.H,t.J)||e[1].length>=e[0].length&&nR(e[1],t.B,t.w,t.A,t.C)){for(r=0,P=0;r<e[0].length&&t.I[e[0][r]]!=0;)++r;for(;P<e[1].length&&t.B[e[1][P]]!=0;)++P;if(r<e[0].length&&P<e[1].length&&(n=Xk(t,e[0][r],e[1][P]),n))return n}--t.g,t.c=0,t.d=0,t.e=0,t.f=0}return null}function SP(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h;if(t.C[e]!=7||t.j[e]==4)return!1;if(e<t.f&&r0(t.p,e)||t.o[e]!=0||gt(V(t.B[e],o9),0))return!0;if(t.s[e]==1)return!1;for(D=0;D<t.j[e];D++)if(C9(t,t.k[e][D])==3)return!1;for(i=0,Q=0;Q<t.j[e];Q++)t.n[e][Q]==1&&(n=t.C[t.i[e][Q]],(n==8||n==9||n==17)&&++i);if(i==0){for(f=0;f<t.j[e];f++)if(P=t.i[e][f],t.o[P]!=0){if(P<t.f&&r0(t.p,P)){if((t.p&&P<t.f?iA(t.p,P):0)>=5){for(h=0,s=0;s<t.j[P];s++)l=t.i[P][s],l!=e&&e0(t,l)>=3&&++h;if(y=e0(t,e),h==2&&y>=2||h==1&&y==3)continue}return!A||!Ss(t,e)}for(L=0;L<t.j[P];L++)if(t.n[P][L]==2||_e(t,t.k[P][L]))return!A||!Ss(t,e)}}if(i<2)for(f=0;f<t.j[e];f++){for(P=t.i[e][f],o=!1,r=!1,L=0;L<t.j[P];L++)t.i[P][L]!=e&&(t.n[P][L]!=1&&(t.C[t.i[P][L]]==7||t.C[t.i[P][L]]==8||t.C[t.i[P][L]]==16)&&(o=!0),t.n[P][L]==1&&t.C[t.i[P][L]]==7&&(r=!0));if(o&&(!r||i==0))return!A||!Ss(t,e)}return!1}function wa(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R,j;for(n=c(Ut,Tt,6,2,15,1),Q=0;Q<2;Q++)t.c[Q]/=t.a[Q],t.d[Q]/=t.a[Q],n[Q]=ca(t.b[Q],t.c[Q],t.d[Q],t.b[1-Q].e.length,e);for(Uf(t.b[0],t.c[0],t.d[0],RA-n[0]),Uf(t.b[1],t.c[1],t.d[1],4.71238898038469-n[1]),j=Ve,R=m6,i=t.d[0]-t.d[1],o=0;o<t.b[1].b.length;o++)t.b[1].b[o]+=i,j>t.b[1].b[o]&&(j=t.b[1].b[o]),R<t.b[1].b[o]&&(R=t.b[1].b[o]);for(v=R-j+2*e,P=vt(w.Math.ceil(v)),j+=(v-P)/2-e,g=c(Ut,Tt,6,P,15,1),L=0;L<P;L++)g[L]=t.c[1]+e;for(s=0;s<t.b[1].b.length;s++)for(b=t.b[1].b[s]-j,m=vt(b-e),f=w.Math.min(vt(b+e),P-1),T=m;T<=f;T++)g[T]>t.b[1].a[s]&&(g[T]=t.b[1].a[s]);for(y=0;y<P;y++)g[y]-=e;for(r=t.c[0]-t.c[1],l=0;l<t.b[0].a.length;l++)h=vt(t.b[0].b[l]-j),h>=0&&h<g.length&&r<t.b[0].a[l]-g[h]&&(r=t.b[0].a[l]-g[h]);for(D=0;D<t.b[1].a.length;D++)t.b[1].a[D]+=r;A&&(Uf(t.b[0],t.c[0],t.d[0],n[0]-RA),Uf(t.b[1],t.c[0],t.d[0],n[0]-RA))}function aj(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R,j;if(t.d==null&&(t.d=c(F,f0,7,t.j.r,0,2)),t.d[e]==null){for(y=c(F,k,6,t.e.length,15,1),v=c(Pt,ft,6,t.j.q,16,1),P=z(t.j,0,e),r=z(t.j,1,e),y[0]=P,v[P]=!0,o=0,l=0;o<=l;){for(T=0;T<Ht(t.j,y[o]);T++)i=_(t.j,y[o],T),!v[i]&&i!=r&&(y[++l]=i,v[i]=!0);if(o==l)break;++o}if(s=l+1>(t.e.length/2|0),t.i){for(D=!1,f=!1,T=0;T<t.e.length;T++)n=t.e[T],z0(t.j,n)&&n!=P&&n!=r&&(v[t.e[T]]?D=!0:f=!0);D!=f&&(s=D)}for(Q=2,t.d[e]=c(F,k,6,s?t.e.length-l:l+2,15,1),g=0;g<t.e.length;g++)t.e[g]==P?t.d[e][s?0:1]=g:t.e[g]==r?t.d[e][s?1:0]=g:s^v[t.e[g]]&&(t.d[e][Q++]=g)}for(R=t.a[t.d[e][0]],j=t.b[t.d[e][0]],b=sn(R,j,t.a[t.d[e][1]],t.b[t.d[e][1]]),h=2;h<t.d[e].length;h++)m=t.d[e][h],L=w.Math.sqrt((t.a[m]-R)*(t.a[m]-R)+(t.b[m]-j)*(t.b[m]-j)),A=2*b-sn(R,j,t.a[m],t.b[m]),t.a[m]=R+L*w.Math.sin(A),t.b[m]=j+L*w.Math.cos(A)}function tp(t){var e,A,n,P,r,i,f,D,Q,o;switch(e=null,o=t.d.length,t.e){case 1:for(e=k1(zt,[ee,_t],[16,6],15,[2*o,2],2),n=0;n<o;n++)e[n][0]=t.d[n][0],e[n][1]=t.d[n][1],e[o+n][0]=180+t.d[n][0]<<16>>16,e[o+n][1]=180+t.d[n][1]<<16>>16;return e;case 2:for(P=t.a[0]==0?1:0,r=t.a[o-1]==180?o-1:o,Q=r-P,e=k1(zt,[ee,_t],[16,6],15,[o+Q,2],2),i=0;i<o;i++)e[i][0]=t.d[i][0],e[i][1]=t.d[i][1];for(f=P;f<r;f++)e[e.length-1-f+P][0]=360-t.d[f][1]<<16>>16,e[e.length-1-f+P][1]=360-t.d[f][0]<<16>>16;return e;case 3:for(P=t.a[0]==0?1:0,r=t.a[o-1]==90?o-1:o,Q=r-P,e=k1(zt,[ee,_t],[16,6],15,[2*o+2*Q,2],2),D=0;D<o;D++)e[D][0]=t.d[D][0],e[D][1]=t.d[D][1],e[o+Q+D][0]=180+t.d[D][0]<<16>>16,e[o+Q+D][1]=180+t.d[D][1]<<16>>16;for(A=P;A<r;A++)e[o+Q-1-A+P][0]=180-t.d[A][1]<<16>>16,e[o+Q-1-A+P][1]=180-t.d[A][0]<<16>>16,e[e.length-1-A+P][0]=360-t.d[A][1]<<16>>16,e[e.length-1-A+P][1]=360-t.d[A][0]<<16>>16;return e;default:return t.d}}function ep(t,e,A,n){var P,r,i,f,D,Q;if(i=ZA(t.V,e,A),f=-1,n&&t.X==8&&i!=-1&&(!YZ(t,t.e,i)||R1(t.V,t.e)!=0&&R1(t.V,t.e)==R1(t.V,i)&&!Bn(t.V,t.e)||dG(t,t.e,i))&&(i=-1),i!=-1&&(t.w==101||t.w==103||t.w==102?(f=pQ(t.V,i),i=-1):t.w==19&&i>=t.V.f&&(i=-1)),f==-1&&i==-1&&t.w!=22&&t.w!=19&&t.w!=3&&t.w!=10&&t.w!=27&&t.w!=16&&t.w!=11&&t.w!=12&&t.w!=13&&t.w!=28&&t.w!=29&&t.w!=30&&t.w!=14&&t.w!=31&&t.w!=15&&t.w!=32&&t.w!=33&&(f=wf(t.V,e,A)),f!=-1&&(t.w==101||t.w==103||t.w==102)&&!(p9(t.V,f)&&(bs(t,f)!=-1||YL(t,f)!=-1))&&(f=-1),P=t.v,!n&&t.I&&(P=null,i==-1&&f==-1&&(t.w==2||t.w==4||t.w==21))){for(Q=new Zt(t.I);Q.a<Q.c.a.length;)if(D=$t(Q),(t.w==2||t.w==4&&!Xt(D,62)||t.w==21&&Xt(D,93))&&D.Eb(e,A)){P=D,t.v&&t.v!=D&&t.v.Fb();break}}return r=t.t!=i||t.u!=f||t.v!=P||!!P,t.t!=i&&(t.t!=-1&&t.i.a.length!=0?$s(t,t.i.a):(t.t=i,Qn(t.i,0),q1(t,new S1(t,4,!0)))),t.u!=f&&(t.u=f,q1(t,new S1(t,8,!0))),t.v=P,r}function as(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b;for(ut(t,7),o=new YA(t.f,t.g),Q=k1(E,[nA,xy],[204,58],0,[t.f,8],2),n=c(F,k,6,t.f,15,1),P=c(F,k,6,t.f,15,1),r=c(Pt,ft,6,t.f,16,1),v=0;v<t.f;v++)if(Q[v]=k1(E,[xy,g8],[58,10],0,[t.j[v],8],2),!(e&&t.C[v]!=6))for(D=0;D<t.j[v];D++){for(L=t.i[v][D],Cu(r,r.length),g=1,T=2,t.u[L]|=512,b=0;b<8&&T<t.f;b++){if(b==0)n[0]=L,r[L]=!0,n[1]=v,r[v]=!0;else{for(m=T,y=g;y<T;y++)for(A=n[y],l=0;l<t.j[A];l++)f=t.i[A][l],!r[f]&&(!e||t.C[f]==6)&&(r[f]=!0,n[m++]=f);if(m==T){if(!e)for(s=b;s<8;s++)Q[v][D][s]=Q[v][D][s-1];break}g=T,T=m}if(b==0)Q[v][D][b]=c(E,q,6,2,15,1),Q[v][D][b][0]=t.C[v]<<24>>24,Q[v][D][b][1]=t.A[v]<<24>>24;else{for(ii(t,o,r,!0,P),E0(o,P[L],0),Ne(o,P[L],0),A=0;A<t.f;A++)P[A]!=-1&&t.j[A]>o.j[P[A]]&&h1(o,P[A],C0,!0);if(e)for(i=0;i<o.g;i++)o.H[i]=1,o.T=0;Q[v][D][b]=Ln((h=me(new SA(o,16)),c0(),h))}}t.u[L]&=-513}return Q}function ga(t,e){Is();var A,n,P,r,i,f,D,Q,o,L,s,y,l,h;if(D=G(t,0)<0,D&&(t=p0(t)),G(t,0)==0)switch(e){case 0:return\"0\";case 1:return\"0.0\";case 2:return\"0.00\";case 3:return\"0.000\";case 4:return my;case 5:return\"0.00000\";case 6:return\"0.000000\";default:return y=new V0,e<0?y.a+=\"0E+\":y.a+=\"0E\",y.a+=e==P1?\"2147483648\":\"\"+-e,y.a}o=18,L=c(lr,te,6,o+1,15,1),A=o,h=t;do Q=h,h=Hn(h,10),L[--A]=Jt(I1(48,l0(Q,Un(h,10))))&c1;while(G(h,0)!=0);if(P=l0(l0(l0(o,A),e),1),e==0)return D&&(L[--A]=45),an(L,A,o-A);if(e>0&&G(P,-6)>=0){if(G(P,0)>=0){for(r=A+Jt(P),f=o-1;f>=r;f--)L[f+1]=L[f];return L[++r]=46,D&&(L[--A]=45),an(L,A,o-A+1)}for(i=2;pi(i,I1(p0(P),1));i++)L[--A]=48;return L[--A]=46,L[--A]=48,D&&(L[--A]=45),an(L,A,o-A)}return l=A+1,n=o,s=new br,D&&(s.a+=\"-\"),n-l>=1?(Oe(s,L[A]),s.a+=\".\",s.a+=an(L,A+1,o-A-1)):s.a+=an(L,A,o-A),s.a+=\"E\",G(P,0)>0&&(s.a+=\"+\"),s.a+=\"\"+he(P),s.a}function da(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g;if(e==0||(e&A)!=0){hQ(t);return}for(T=-1,g=0,r=1<<t.e.length-2,P=1<<t.e.length-1,f=1,i=2,Q=0;Q<t.e.length;Q++)(A&(P|f))==0&&(e&(P|f))!=0&&(e&r)==0&&(l=0,(A&r)!=0&&(l+=4),(e&P)!=0&&(l+=2),(e&f)!=0&&(l+=1),g<l&&(g=l,T=Q)),r=P,P=f,f=i,i=1<<(Q+2<t.e.length?Q+2:Q+2-t.e.length);if(T==-1){hQ(t);return}for(s=0,s|=1<<T,y=2;y<t.e.length-1;){if(L=T+y<t.e.length?T+y:T+y-t.e.length,P=1<<(L==0?t.e.length-1:L-1),(A&P)!=0){++y;continue}if(f=1<<L,(e&P)!=0){if((A&f)!=0){hQ(t);return}s|=f,y+=2;continue}if(i=1<<(L+1<t.e.length?L+1:L+1-t.e.length),(e&f)!=0&&(A&i)!=0){s|=f,y+=3;continue}++y}if(s==0){hQ(t);return}for(n=U1-U1*(t.e.length-2)/t.e.length,o=1;o<t.e.length;o++)t.a[o]=t.a[o-1]+w.Math.sin(n*(o-1)),t.b[o]=t.b[o-1]+w.Math.cos(n*(o-1));for(f=1,h=2*w.Math.sin(n/2),D=0;D<t.e.length;D++)(s&f)!=0&&(t.a[D]+=h*w.Math.cos(n*(D-.5)),t.b[D]-=h*w.Math.sin(n*(D-.5))),f<<=1}function Ap(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h;for(t.v=t0(t.w,0)?0:(z1(),I1(M1(Date.now()),t.w)),XS(t.r,t.v),t.t=null,ut(e,1),P=0;P<e.f;P++)if(x1(e,P)>(h=Cn(e,P),h+WA(e,P,h,e.C[P])))return!1;if(fZ(e),e.S=!0,i=null,o=null,f=null,L=null,(e.T&8)!=0){for(i=c(F,k,6,e.f,15,1),f=c(Pt,ft,6,e.f,16,1),r=0;r<e.f;r++)i[r]=e.u[r]&3,f[r]=(e.u[r]&4)!=0;for(o=c(F,k,6,e.g,15,1),L=c(Pt,ft,6,e.g,16,1),Q=0;Q<e.g;Q++)o[Q]=e.F[Q]&3,L[Q]=(e.F[Q]&4)!=0}if(ut(e,63),i!=null){for(r=0;r<e.f;r++)ce(e,r,i[r],f[r]);for(Q=0;Q<e.g;Q++)P8(e,Q,o[Q],L[Q])}for(t.k=e,t.a=0,t.p=0,t.A=null,t.s=null,t.e=c(F,k,6,e.q,15,1),t.d=nr(e,t.e,!1,!0),t.f=c(F,k,6,t.d,15,1),n=0;n<e.q;n++)++t.f[t.e[n]];if(y=c(Pt,ft,6,e.r,16,1),s=Jj(e,y),s==0)return!0;if(!vY(t,y))return!1;for(t.s=c(OPt,A0,176,s,0,1),l=0,D=0;D<e.g;D++)y[D]&&(t.s[l++]=new ij(e,D,t.g,t.e,t.f[t.e[e.D[0][D]]],t.q,A));return cu(t.s,new Fw),t.i&&(t.c=new Q7),EW(t),!0}function Ba(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R,j,C,S,I,x,tt;for(wz(),D=new Se,bK(D,e),T=D.j,L=D.d,ut(T,1),ut(L,1),b=new qi,h=new qi,un(b,T),un(h,L),t.c=P1,i=null,r=null,P=0,I=0,t.a=new V0,A=new zA,j=hl,C=0,S=j.length;C<S&&(R=j[C],I++!=t.b);++C)if(yn(b,R.g),ES(b,R.i),ln(b,6,8)!=0&&(yn(h,R.f),ln(h,2,8)!=0&&b.F.a.length<=512)){for(f=-1e4,l=N(h.F,0),v=new Zt(b.F);v.a<v.c.a.length&&(m=$t(v),!(I++>=t.b));)ff(T,A),Q=zZ(R,A,m),tt=kX(R,T.f,m,L.f,l),ut(A,1),n=c(F,k,6,A.f,15,1),y=c(F,k,6,L.f,15,1),Dj(D,A,L,n,y,tt)&&(x=D.q-R.e,f<x&&(f=x),t.c<x&&(t.c=x,i=vK(n,y,Q,T.f),r=y,P=D.b));o=D.a<=1?\"\":oV+D.a+\")\",J(t.a,R.d+(R.b?\"_S\":R.j.length==0?\"_L\":R.n.a.length==0?\"_I\":\"_U\")+(Jr(),t9(f,5))+o+$A)}return g=c(F,k,6,T.f,15,1),s=c(F,k,6,L.f,15,1),Dj(D,T,L,g,s,null)&&(x=D.q,t.c<=x&&(t.c=x,i=g,r=s,P=D.b),o=D.a<=1?\"\":oV+D.a+\")\",J(t.a,(Jr(),\"no rule:\"+t9(x,5)+o+$A))),t.c==P1?!1:(VZ(D,e,i,r,P),!0)}function va(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R,j,C,S,I,x;for(r=!1,S=Nn(t.d),m=0;m<S.j.a.length;m++)if(C=N(S.j,m),C.length==6&&!S.f[m]){for(y=!0,b=N(S.k,m),R=0,j=b.length;R<j;++R)if(v=b[R],dt(t.d,v)!=1||O8(t.d,v)){y=!1;break}if(y){for(i=new dA,h=new dA,D=k1(Ut,[T0,Tt],[15,6],15,[6,3],2),M5(e,C,i,h,D),Q=c(Ut,Tt,6,C.length,15,1),I=0,L=0;L<C.length;L++)Q[L]=-(h.a*D[L][0]+h.b*D[L][1]+h.c*D[L][2]),Q[L]<0^(L&1)==1&&++I;if(I!=0&&I!=6){for(o=0;o<C.length;o++)if(Q[o]<0^(o&1)==1^I>=3){if(T=c(F,k,6,2,15,1),T[0]=C[o==0?5:o-1],T[1]=C[o==5?0:o+1],g=e.k[C[o]],n=$9(RO(J8(e.k[C[o]],i),h)),A=.6+w.Math.asin(w.Math.abs(Q[o])/w.Math.sqrt((i.a-g.a)*(i.a-g.a)+(i.b-g.b)*(i.b-g.b)+(i.c-g.c)*(i.c-g.c))),x=Q[o]<0?A:-A,P=AO(new du(g),i),s=!1,O(t.d,C[o])>2){for(l=0;l<O(t.d,C[o]);l++)if(f=_(t.d,C[o],l),f!=T[0]&&f!=T[1]&&fA(t.d,xt(t.d,C[o],l))){s=!0;break}}s||wZ(e,C[o],T,P,n,x)}r=!0}}}return r&&(pU(e),f5(e,t.j)),r}function Fa(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R;for(l=t.a[e],m=t.b[e],r=c(Li,A0,41,4,0,1),o=0,L=0;L<t.f.length&&!(o>=4);L++)if(!(e==t.g[z(t.j,0,t.f[L])]||e==t.g[z(t.j,1,t.f[L])])){if(h=t.a[t.g[z(t.j,0,t.f[L])]],v=t.b[t.g[z(t.j,0,t.f[L])]],T=t.a[t.g[z(t.j,1,t.f[L])]],b=t.b[t.g[z(t.j,1,t.f[L])]],f=w.Math.sqrt((h-l)*(h-l)+(v-m)*(v-m)),D=w.Math.sqrt((T-l)*(T-l)+(b-m)*(b-m)),P=w.Math.sqrt((T-h)*(T-h)+(b-v)*(b-v)),f<P&&D<P){h==T?(i=w.Math.abs(l-h),i<.5&&(r[o++]=new ZP(sn(h,m,l,m),(.5-i)/2))):v==b?(i=w.Math.abs(m-v),i<.5&&(r[o++]=new ZP(sn(l,v,l,m),(.5-i)/2))):(s=(b-v)/(T-h),y=-1/s,A=v-s*h,n=m-y*l,g=(n-A)/(s-y),R=s*g+A,i=w.Math.sqrt((g-l)*(g-l)+(R-m)*(R-m)),i<.5&&(r[o++]=new ZP(sn(g,R,l,m),(.5-i)/2)));continue}if(f<.5){r[o++]=new ZP(sn(h,v,l,m),(.5-f)/2);continue}if(D<.5){r[o++]=new ZP(sn(T,b,l,m),(.5-D)/2);continue}}o>0&&(Q=n2(r,o),t.a[e]+=Q.b*w.Math.sin(Q.a),t.b[e]+=Q.b*w.Math.cos(Q.a))}function np(t){var e,A,n,P,r,i,f,D,Q;for(A=B(d(F,1),k,6,15,[8,-2,8,-2,8]),Q=B(d(F,1),k,6,15,[8,-2,4,-2,12,-2,4,-2,12,-2,4,-2,12,-2,8]),WU(t.c,A,Q),t.o=Ju(t.c,1,1),zP(t.o,t),i0(t.c,Ue(t.c,\"Atom Label:\"),1,1),i0(t.c,t.o,3,1),Te(t.c,Ue(t.c,\"(examples: 'D', 'Li', 'Cys', 'R12', 'R3@C')\"),1,3,3,3),t.p=Ju(t.c,1,1),zP(t.p,t),i0(t.c,Ue(t.c,\"Atom Mass:\"),1,5),i0(t.c,t.p,3,5),Te(t.c,Ue(t.c,\"(empty for natural abundance)\"),1,7,3,7),t.q=Ju(t.c,1,1),zP(t.q,t),i0(t.c,Ue(t.c,\"Abnormal Valence:\"),1,9),i0(t.c,t.q,3,9),Te(t.c,Ue(t.c,\"(empty for default valence)\"),1,11,3,11),t.a==-1?(n=(J1(),X0)[t.k],N8(t.o,t.n==null?n:t.n+\"@\"+n),t.g!=0&&N8(t.p,\"\"+t.g),t.j!=-1&&N8(t.q,\"\"+t.j)):(n=Ri(t.e,t.a),e=Wn(t.e,t.a),N8(t.o,e==null?n:e+\"@\"+n),ye(t.e,t.a)!=0&&N8(t.p,\"\"+ye(t.e,t.a)),b9(t.e,t.a)!=-1&&N8(t.q,\"\"+b9(t.e,t.a))),t.b=UA(t.c),r=aV,i=0,f=r.length;i<f;++i)P=r[i],Nt(t.b,P);D=t.a==-1?t.i:mA(t.e,t.a),Wt(t.b,D==32?1:D==48?2:D==16?3:0),i0(t.c,Ue(t.c,\"Radical State:\"),1,13),i0(t.c,t.b,3,13)}function ma(t,e,A){var n,P,r,i,f,D,Q,o,L,s;for(s=B(d(F,2),f0,7,0,[B(d(F,1),k,6,15,[2,1,2,1]),B(d(F,1),k,6,15,[1,2,2,1]),B(d(F,1),k,6,15,[1,1,2,2]),B(d(F,1),k,6,15,[2,1,1,2]),B(d(F,1),k,6,15,[2,2,1,1]),B(d(F,1),k,6,15,[1,2,1,2])]),n=c(Ut,Tt,6,Ht(t.R,e),15,1),i=0;i<Ht(t.R,e);i++)n[i]=Y0(t.R,_(t.R,e,A[i]),e);if(Q=b5(t.R,e,A,n,null)<<24>>24,Q!=3)return Q;for(o=0,L=0,f=0;f<Ht(t.R,e);f++)P=xt(t.R,e,A[f]),z(t.R,0,P)==e&&(l1(t.R,P)==129&&(L!=0&&sP(t.R,e),o=f,L=1),l1(t.R,P)==257&&(L!=0&&sP(t.R,e),o=f,L=2));if(L==0)return 3;for(r=1;r<Ht(t.R,e);r++)n[r]<n[0]&&(n[r]+=F0);if(Ht(t.R,e)==3){switch(o){case 0:(n[1]<n[2]&&n[2]-n[1]<U1||n[1]>n[2]&&n[1]-n[2]>U1)&&(L=3-L);break;case 1:n[2]-n[0]>U1&&(L=3-L);break;case 2:n[1]-n[0]<U1&&(L=3-L)}return L==1?2:1}return D=0,n[1]<=n[2]&&n[2]<=n[3]?D=0:n[1]<=n[3]&&n[3]<=n[2]?D=1:n[2]<=n[1]&&n[1]<=n[3]?D=2:n[2]<=n[3]&&n[3]<=n[1]?D=3:n[3]<=n[1]&&n[1]<=n[2]?D=4:n[3]<=n[2]&&n[2]<=n[1]&&(D=5),s[D][o]==L?2:1}function ka(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v;if(t.g.a.length==0||t.f.a.length==0||(s=ms(t),s==0))return null;for(L=c(F,f0,7,t.f.a.length,0,2),r=0;r<t.f.a.length;r++)for(h=N(t.f,r),ut(h,15),L[r]=c(F,k,6,s+1,15,1),hU(L[r],-1),e=0;e<h.q;e++){if(o=w.Math.abs(h.w[e]),o!=0&&L[r][o]!=-1)return null;L[r][o]=e}for(i=c(Pt,ft,6,s+1,16,1),P=0;P<t.g.a.length;P++)for(v=N(t.g,P),ut(v,15),g=0;g<v.q;g++)if(o=w.Math.abs(v.w[g]),o!=0&&!i[o]){for(f=0;f<t.f.a.length;f++)if(y=L[f][o],y!=-1){if(h=N(t.f,f),v.j[g]!=h.j[y]){i[o]=!0;break}if((v.u[g]&3)!=(h.u[y]&3)){i[o]=!0;break}for(D=0;D<v.j[g];D++)if(A=R1(v,v.i[g][D]),A==0)i[o]=!0;else{for(m=v.k[g][D],n=!1,Q=0;Q<h.j[y];Q++){if(T=R1(h,h.i[y][Q]),T==0){i[o]=!0;break}if(T==A){if(n=!0,l=h.k[y][Q],(m<v.g&&(E8(v.p,m)||v.H[m]==8))^(l<h.g&&(E8(h.p,l)||h.H[l]==8))||!(m<v.g&&(E8(v.p,m)||v.H[m]==8))&&(dt(v,m)!=dt(h,l)||(v.F[m]&3)!=(h.F[l]&3))){i[o]=!0,i[A]=!0;break}break}}n||(i[o]=!0)}}}return i}function ba(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y;for(this.r=!0,this.b=!1,this.t=!0,this.a=!1,this.i=Et,this.c=t,this.o=c(Ur,U9,26,t.g.a.length,0,1),n=0;n<t.g.a.length;n++)je(N(t.g,n),!0),ut(N(t.g,n),15);for(P=0;P<t.f.a.length;P++)ut(N(t.f,P),15);for(P$(this,t),this.k=c(F,f0,7,t.g.a.length,0,2),r=0;r<t.g.a.length;r++)for(L=N(t.g,r),this.k[r]=c(F,k,6,L.f,15,1),i=0;i<L.f;i++)if(Q=w.Math.abs(L.w[i]),Q!=0)for(f=0;f<t.f.a.length;f++)for(o=N(t.f,f),D=0;D<o.f;D++)w.Math.abs(o.w[D])==Q&&(e=(y=Cn(L,i),y+WA(L,i,y,L.C[i])-x1(L,i)-(s=Cn(o,D),s+WA(o,D,s,o.C[D])-x1(o,D))),this.k[r][i]=w.Math.max(e,0));for(this.f=c(Pt,T0,12,t.f.a.length,0,2),A=0;A<t.f.a.length;A++)for(o=N(t.f,A),this.f[A]=c(Pt,ft,6,o.f,16,1),i=0;i<o.f;i++)if(Q=w.Math.abs(o.w[i]),Q!=0)for(f=0;f<t.g.a.length;f++)for(L=N(t.g,f),D=0;D<L.f;D++)w.Math.abs(L.w[D])==Q&&(Ts(ib(o,i),ib(L,D))!=0||Ts(Yk(o,i),Yk(L,D))!=0)&&(this.f[A][i]=!0);this.s=new qi,this.g=c(B4,T0,20,this.o.length,0,1)}function Ra(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R,j,C;if(g=new LU(t.e,t.c),h=$T(g,t.f,t.d),t.a.a.length==0)return Ys(g,h);for(m=1,b=new Zt(t.a);b.a<b.c.a.length;)v=$t(b),m*=OG(v);if(m>4e6)return z1(),-m;for(e=0,i=c(F,k,6,t.a.a.length,15,1),y=c(F,k,6,t.a.a.length,15,1),D=0;D<t.a.a.length;D++)v=N(t.a,D),y[D]=(v.b=new f1,j=c(F,k,6,v.a,15,1),C=c(Pt,ft,6,w.Math.max(v.d.length,v.c.length),16,1),rk(v,0,C,j),v.b.a.length),i[D]=e,e+=v.a;for(r=Iy,P=null,n=null,l=c(F,k,6,t.a.a.length,15,1),s=t.a.a.length!=0;s;){if(R=!1,t.i!=null){for(Q=0;Q<t.a.a.length;Q++)if(XK(N(t.a,Q),l[Q],t.i)){R=!0;break}}if(!R){for(Q=0;Q<t.a.a.length;Q++)TK(N(t.a,Q),l[Q],h);if(T=Ys(g,h),r<T)for(r=T,P=c(F,k,6,e,15,1),n=c(F,k,6,e,15,1),A=0,o=0;o<t.a.a.length;o++)v=N(t.a,o),yz(v,l[o],P,A),sz(v,l[o],n,A),A+=v.a}for(s=!1,f=0;f<l.length;f++){if(++l[f],l[f]<y[f]){s=!0;break}l[f]=0}}if(r!=Iy)for(L=t.b,f=0;f<e;f++)++L,t.f[P[f]]=L,t.d[n[f]]=L;return r}function Pp(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g;for(s=new f1,g=new f1,n=new f1,r=new Zt(t.d);r.a<r.c.a.length;){for(P=$t(r),i=0,n.a.length=0,f=0;f<P.e.length;f++)e=P.e[f],A=t.i[e],A!=0&&(mt(n,new K3(P,f,A)),i+=A);if(i!=0)for(p3(n,new JP),Q=new Zt(n);Q.a<Q.c.a.length&&(D=$t(Q),!(i*D.b>0&&(A=w.Math.abs(i)>=w.Math.abs(D.b)?D.b:i,i-=A,mt(A<0?s:g,new K3(P,D.a,A)),i==0))););}if(s.a.length==0||g.a.length==0)return null;for(p3(g,new Xo),p3(s,new J2),h=new Zt(g);h.a<h.c.a.length;)for(y=$t(h),L=new Zt(s);L.a<L.c.a.length;)if(o=$t(L),y.b==-o.b)return t.i[QD(y.c,y.a)]-=y.b,t.i[QD(o.c,o.a)]-=o.b,new MQ(y.c,o.c,y.a,o.a);for(T=new Zt(g);T.a<T.c.a.length;)for(y=$t(T),L=new Zt(s);L.a<L.c.a.length;)if(o=$t(L),y.b>-o.b)return t.i[QD(y.c,y.a)]+=o.b,t.i[QD(o.c,o.a)]-=o.b,new MQ(y.c,o.c,y.a,o.a);for(l=new Zt(g);l.a<l.c.a.length;)for(y=$t(l),L=new Zt(s);L.a<L.c.a.length;)if(o=$t(L),y.b<-o.b)return t.i[QD(y.c,y.a)]-=y.b,t.i[QD(o.c,o.a)]+=y.b,new MQ(y.c,o.c,y.a,o.a);return null}function ln(t,e,A){var n,P,r,i,f,D,Q;if(t.P=!1,t.F=new f1,t.a=new f1,mi(t.O.a),!t.H||!t.g||t.g.f-t.p>t.H.f||t.g.g-t.q>t.H.g||t.g.f==0)return 0;for(e==6&&(t.N=63),FO(t,A),n=c(Pt,ft,6,t.H.f,16,1),t.G=c(F,k,6,t.g.f,15,1),hU(t.G,-1),f=c(F,k,6,t.A,15,1),Vr(f,f.length,-1),r=0;!t.P;){if(t.w!=0){if(Q=t.u[r]==-1?t.H.f:De(t.H,t.G[t.u[r]]),++f[r],f[r]==Q){if(f[r]=-1,r==0)break;--r,t.t[r]||(n[t.G[t.s[r]]]=!1);continue}if(t.u[r]==-1)n[f[r]]||ny(t,f[r],t.s[r])&&(t.G[t.s[r]]=f[r],n[f[r]]=!0,++r);else{if(_(t.H,t.G[t.u[r]],f[r])>=t.H.f)continue;P=_(t.H,t.G[t.u[r]],f[r]),t.t[r]?P==t.G[t.s[r]]&&zs(t,xt(t.H,t.G[t.u[r]],f[r]),t.v[r])&&++r:n[P]||ny(t,P,t.s[r])&&zs(t,xt(t.H,t.G[t.u[r]],f[r]),t.v[r])&&(n[P]=!0,t.G[t.s[r]]=P,++r)}}if(r==t.w){if(Wj(t,-1)&&VR(t,-1)&&gR(t,n,-1)){for(D=!1,i=0;i<t.d;i++)if(Z$(t,n,f,i)){D=!0;break}if(e==1&&!D||!D&&(V$(t,e),e==2))return 1}if(r==0)break;--r,t.t[r]||(n[t.G[t.s[r]]]=!1)}}return kZ(t),t.F.a.length}function ja(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R,j,C,S,I,x,tt,M,K,et,W,$,a,st,ht;for($=Nn(t.e),a=N($.k,e).length,et=N($.j,e),W=N($.k,e),I=!0,g=1;g<a;g++)if(Br(t.b,W[g])!=Br(t.b,W[0])){I=!1;break}if(I){for(r=(a-2)*k2/a,m=0;m<a;m++)qT(t,et[m],W[m],W[m==0?a-1:m-1],r);return}for(M=c(Ee,PA,6,a,15,1),P=0,v=0;v<a;v++)M[v]=$1(t.e,et[v])==0?1.9106119386631804:$1(t.e,et[v])==1?2.094499897810209:k2,P+=M[v];for(n=((a-2)*k2-P)/a,b=0;b<a;b++)M[b]+=n;for(o=c(Ee,PA,6,a,15,1),R=1;R<a;R++)o[R]=o[R-1]+k2-M[R];for(f=c(Ee,PA,6,a,15,1),i=0;i<100;i++){for(st=0,ht=0,m=0;m<a;m++)st+=Br(t.b,W[m])*w.Math.sin(o[m]),ht+=Br(t.b,W[m])*w.Math.cos(o[m]);for(y=bA(0,0,st,ht),h=w.Math.sqrt(st*st+ht*ht),tt=-1,x=0,j=0;j<a;j++)C=j==0?a-1:j-1,S=j+1==a?0:j+1,D=Je(o[j],o[C]),Q=Je(o[S],o[j]),K=Je(M[j],M[S]),f[j]=2*D-2*Q+2*K,l=w.Math.cos(o[j]-q6-y),s=h*l-_p*f[j],w.Math.abs(s)>w.Math.abs(x)&&(x=s,tt=j);L=w.Math.exp(-5*i/100),o[tt]+=L*x}for(T=0;T<a;T++)C=T==0?a-1:T-1,A=o[C]+k2-o[T],A>F0&&(A-=F0),qT(t,et[T],W[C],W[T],A)}function rp(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y;for(t.j=c(F,k,6,t.q,15,1),t.e=c(F,k,6,t.q,15,1),t.i=c(F,f0,7,t.q,0,2),t.k=c(F,f0,7,t.q,0,2),t.n=c(F,f0,7,t.q,0,2),t.o=c(F,k,6,t.f,15,1),o=c(F,k,6,t.q,15,1),i=0;i<t.r;i++)++o[t.D[0][i]],++o[t.D[1][i]];for(n=0;n<t.q;n++)t.i[n]=c(F,k,6,o[n],15,1),t.k[n]=c(F,k,6,o[n],15,1),t.n[n]=c(F,k,6,o[n],15,1);for(s=!1,Q=0;Q<t.g;Q++){if(y=dt(t,Q),y==0){s=!0;continue}for(L=0;L<2;L++)A=t.D[L][Q],e=t.e[A],t.n[A][e]=y,t.i[A][e]=t.D[1-L][Q],t.k[A][e]=Q,++t.e[A],++t.j[A],A<t.f&&y>1&&(t.o[A]+=y-1)}for(D=0;D<t.g;D++)if(t.H[D]==8)for(L=0;L<2;L++)A=t.D[L][D],A<t.f&&t.o[A]==0&&(t.o[A]=1);for(f=t.g;f<t.r;f++){if(y=dt(t,f),y==0){s=!0;continue}for(L=0;L<2;L++)A=t.D[L][f],e=t.e[A],t.n[A][e]=y,t.i[A][e]=t.D[1-L][f],t.k[A][e]=f,++t.e[A],t.D[1-L][f]<t.f&&++t.j[A]}if(s){for(e=c(F,k,6,t.q,15,1),P=0;P<t.q;P++)e[P]=t.e[P];for(r=0;r<t.r;r++)if(y=dt(t,r),y==0)for(L=0;L<2;L++)A=t.D[L][r],t.n[A][e[A]]=y,t.i[A][e[A]]=t.D[1-L][r],t.k[A][e[A]]=r,++e[A]}}function pa(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h;t.b|=e;try{for(l=e2(\"torsionID.txt\"),n=(e&1)==0?null:e2(\"torsionAngle.txt\"),s=(e&1)==0?null:e2(\"torsionRange.txt\"),f=(e&1)==0?null:e2(\"torsionFrequency.txt\"),r=(e&2)==0?null:e2(\"torsionBins.txt\"),h=Y1(l);h!=null;){if(y=le(t.c,h),y||(y=new Rw(h.endsWith(\"<\")||h.endsWith(\">\")?0:h.endsWith(\"-\")||h.endsWith(\"+\")?1:h.endsWith(\"=\")?3:2),ze(t.c,h,y)),n)for(A=L8(Y1(n),\",\"),y.a=c(zt,_t,6,A.length,15,1),Q=0;Q<A.length;Q++)y.a[Q]=Q1(A[Q],sy,32767)<<16>>16;if(s)for(L=L8(Y1(s),\",\"),y.d=k1(zt,[ee,_t],[16,6],15,[L.length,2],2),Q=0;Q<L.length;Q++)o=L[Q].indexOf(k0(45),1),y.d[Q][0]=Q1(oA(L[Q],0,o),sy,32767)<<16>>16,y.d[Q][1]=Q1(HD(L[Q],o+1),sy,32767)<<16>>16;if(f)for(D=L8(Y1(f),\",\"),y.c=c(zt,_t,6,D.length,15,1),Q=0;Q<D.length;Q++)y.c[Q]=Q1(D[Q],-128,127)<<24>>24;if(r)for(P=L8(Y1(r),\",\"),y.b=c(E,q,6,P.length,15,1),Q=0;Q<P.length;Q++)y.b[Q]=Q1(P[Q],-128,127)<<24>>24;h=Y1(l)}}catch(T){if(T=a1(T),Xt(T,75))i=T,Zr(i,(z1(),Ti),\"\");else throw At(T)}}function Di(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R;if(t.R.f!=0&&!t.G){for(t.I=0,R=0,A=1;A<t.R.f;A++)t.f[A]>t.f[R]&&(R=A);for(n=c(Pt,ft,6,t.R.f,16,1),i=c(Pt,ft,6,t.R.g,16,1),t.H=c(F,k,6,t.R.f,15,1),t.B=c(F,k,6,t.R.f,15,1),t.F=c(F,k,6,t.R.f,15,1),t.C=c(F,k,6,t.R.g,15,1),t.B[0]=R,t.H[R]=0,n[R]=!0,P=1,D=0,Q=1,o=0;D<t.R.f;)if(D<Q){for(;;){for(l=0,h=0,s=-1,e=t.B[D],T=0;T<De(t.R,e);T++)(T<O(t.R,e)||T>=Ht(t.R,e))&&(f=_(t.R,e,T),!n[f]&&t.f[f]>s&&(l=f,h=xt(t.R,e,T),s=t.f[f]));if(s==-1)break;t.H[l]=Q,t.F[Q]=D,t.B[Q++]=l,t.C[o++]=h,n[l]=!0,i[h]=!0}++D}else{for(y=0,s=-1,e=0;e<t.R.f;e++)!n[e]&&t.f[e]>s&&(y=e,s=t.f[e]);++P,t.H[y]=Q,t.F[Q]=-1,t.B[Q++]=y,n[y]=!0}for(t.D=c(F,k,6,2*(t.R.g-o),15,1);;){for(m=t.R.M,v=t.R.M,b=-1,r=0;r<t.R.g;r++)i[r]||(t.H[z(t.R,0,r)]<t.H[z(t.R,1,r)]?(g=t.H[z(t.R,0,r)],L=t.H[z(t.R,1,r)]):(g=t.H[z(t.R,1,r)],L=t.H[z(t.R,0,r)]),(g<m||g==m&&L<v)&&(m=g,v=L,b=r));if(b==-1)break;i[b]=!0,t.C[o++]=b,t.D[2*t.I]=m,t.D[2*t.I+1]=v,++t.I}t.G=!0}}function ip(t,e,A,n,P,r,i){var f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R,j;if(t==null||t.length==0||(j=t.indexOf(k0(33)),j==-1))return null;for(l=!1,L=j!=0?0:t.length==1?-1:1,v=0,D=0,i?nv(i):i=new i8;L!=-1;)L>j&&(l=!0),Q=t.indexOf(k0(32),L),j>L&&(Q>j||Q==-1)&&(Q=j),o=Q==-1?(Gt(L,t.length+1),t.substr(L)):(Ct(L,Q,t.length),t.substr(L,Q-L)),L=Q==-1||Q==t.length-1?-1:Q+1,m=null,e!=null&&e.length!=0&&(Q=e.indexOf(k0(32),v),Q==-1?m=(Gt(v,e.length+1),e.substr(v)):(m=(Ct(v,Q,e.length),e.substr(v,Q-v)),v=Q+1)),f=null,A!=null&&A.length!=0&&(Q=A.indexOf(k0(32),D),Q==-1?f=(Gt(D,A.length+1),A.substr(D)):(f=(Ct(D,Q,A.length),A.substr(D,Q-D)),D=Q+1)),R=new JA(r),b=o==null?null:Ls(R,Ln((T=o,c0(),T)),f==null?null:Ln((g=f,g)),0),m!=null&&NY(R,Ln((h=m,c0(),h))),l?(mt(i.f,b),i.d=-1):(mt(i.g,b),i.d=-1);if(n!=null&&n.length!=0&&OS(i,new nb(n)),P!=null&&P.length!=0){for(R=new JA(r),s=0,y=P.indexOf(k0(43));y!=-1;)$l(i,Zi(R,(Ct(s,y,P.length),P.substr(s,y-s)))),s=y+1,y=P.indexOf(k0(43),s);$l(i,Zi(R,(Gt(s,P.length+1),P.substr(s))))}return i}function Ca(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R,j,C,S;for(Q=c(F,k,6,t.j.f,15,1),g=c(F,k,6,t.d.f,15,1),o=c(F,k,6,t.j.f,15,1),v=c(F,k,6,t.d.f,15,1),Q[0]=e.b,o[e.b]=e.b,g[0]=e.a,v[e.a]=e.a,t.n[e.b]==0&&(++t.c,t.n[e.b]=t.c,t.f[e.a]=t.c),f=0,L=0;f<=L;){for(j=Q[f],b=g[f],T=k1(F,[f0,k],[7,6],15,[O(t.j,j),O(t.d,b)],2),y=0;y<O(t.j,j);y++)if(R=_(t.j,j,y),t.n[R]==0)for(r=mv(t.j,xt(t.j,j,y)),h=0;h<O(t.d,b);h++)m=_(t.d,b,h),t.f[m]==0&&X(t.j,R)==X(t.d,m)&&(i=xt(t.d,b,h),S=vX(t,j,R,b,m),r==mv(t.d,i)||S!=0?t$(t,j,R,b,m)&&(D=Bb(t,j,R,b,m),C=w.Math.max(S,D),C!=0&&(l=hW(t,o[j],j,R,v[b],b,m),mW(t,j,R,b,m,C,l)&&(T[y][h]=C,l&&(T[y][h]+=64),qd(o[j],j,R,t.o)==qd(v[b],b,m,t.g)&&(T[y][h]+=128),Xv(t.j,R)==Xv(t.d,m)&&(T[y][h]+=1)))):Bb(t,j,R,b,m)==N1&&(T[y][h]=768));for(;;){for(A=0,P=-1,n=-1,s=0;s<T.length;s++)if(R=_(t.j,j,s),t.n[R]==0)for(h=0;h<T[s].length;h++)m=_(t.d,b,h),t.f[m]==0&&A<T[s][h]&&(A=T[s][h],P=R,n=m);if(A==0)break;++L,Q[L]=P,o[P]=Q[f],g[L]=n,v[n]=g[f],++t.c,t.n[P]=t.c,t.f[n]=t.c}++f}return L+1}function fp(){fp=d1,go=B(d(zt,1),_t,6,15,[-1,-1,-1,0,0,1,2,3,4,5,-1,0,0,0,6,7,8,9,-1,0,0,10,10,10,10,10,10,10,10,10,10,1,11,11,12,13,-1,0,0,10,10,10,10,10,10,10,10,10,10,0,0,0,11,14,-1,0,0,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,10,10,10,10,10,10,10,10,1,1,1,1,-1,-1,-1,-1,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]),g4=B(d(zt,1),_t,6,15,[-1,-1,-1,0,0,0,2,5,5,5,-1,0,0,0,0,9,9,9,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1])}function Ha(t,e,A,n){var P,r,i,f,D,Q,o,L,s,y,l,h,T,g;P=e.a,y=e.g,Q=gt(V(y0(t.k,P),1),0),r=MA(t.k,P),L=r!=null?FX(t,P,r,n):Q?\"*\":Ri(t.k,P),!Q&&r==null&&vn(t.k,P)&&(t.j&4)==0&&($1(t.k,P)!=0||b9(t.k,P)==-1&&mA(t.k,P)==0)&&(L=L.toLowerCase()),e.f&&(A.a+=\"(\"),y!=-1&&Xj(t,u1(t.k,e.a,e.g),e.g,A),i=b1(t.k,P),i==0&&(t.j&1)!=0&&(f=V(y0(t.k,P),ir),G(f,pf)==0?i=-1:G(f,jf)==0&&(i=1)),o=ye(t.k,P),s=(t.j&2)!=0?R1(t.k,P):0,l=(t.j&1)!=0?Att(t,P,n):null,g=!Q&&!DN(X(t.k,P))||r!=null||(d0(t.k,P)==1||d0(t.k,P)==2)&&(T=ne(t.k,P)-1,!(T!=-1&&t.i[T][EA(t.k,P)]<=1))&&(X(t.k,P)!=7||b1(t.k,P)>0)||vn(t.k,P)&&$1(t.k,P)==0&&(t.j&4)==0||i!=0||o!=0||s!=0||b9(t.k,P)!=-1||mA(t.k,P)!=0||l!=null,g&&(A.a+=\"[\"),o!=0&&(A.a+=o),A.a+=\"\"+L,(d0(t.k,P)==1||d0(t.k,P)==2)&&(h=ne(t.k,P)-1,!(h!=-1&&t.i[h][EA(t.k,P)]<=1))&&(X(t.k,P)!=7||b1(t.k,P)>0)&&J(A,C$(t,P,y)),(t.j&1)==0&&g&&(D=Bd(t.k,P),D==1?A.a+=\"H\":D>1&&(A.a+=\"H\"+D)),i!=0&&(A.a+=String.fromCharCode(i>0?43:45),w.Math.abs(i)>1&&w3(A,w.Math.abs(i))),l!=null&&(A.a+=\"\"+l),s!=0&&(A.a+=\":\",A.a+=s),g&&(A.a+=\"]\"),QK(t,e,A),e.e&&(A.a+=\")\")}function Ma(t,e,A,n){var P,r,i,f,D,Q;if(i=1,G(t,0)==0)return n||A==1?\"0\":\"0.\"+CP(A-1);if(G(t,0)!=0){for(;t0(Yr(t,10),0);)t=Hn(t,10),++e;for(i=0,f=t;G(f,0)!=0;f=Hn(f,10))++i}return r=new V0,G(t,0)<0&&(r.a+=\"-\"),D=w.Math.max(0,A-i),P=\"\"+he(G(t,0)<0?p0(t):t),e==0?(r.a+=P,!n&&D!=0&&(r.a+=\".\",J(r,CP(D)))):e>0?(Q=n?e>4:e-D>4,Q?(i==1?(r.a+=P,A>1&&(r.a+=\".\",n?r.a+=\"0\":J(r,CP(D)))):(J(r,(Ct(0,1,P.length),P.substr(0,1))),r.a+=\".\",J(r,(Gt(1,P.length+1),P.substr(1))),!n&&D!=0&&J(r,CP(D))),r.a+=\"e\",r.a+=\"\"+(e+i-1)):(r.a+=P,J(r,CP(e)),!n&&D>e&&(r.a+=\".\",J(r,CP(D-e))))):-e<i?(J(r,(Ct(0,i+e,P.length),P.substr(0,i+e))),r.a+=\".\",J(r,(Gt(i+e,P.length+1),P.substr(i+e))),!n&&D!=0&&J(r,CP(D))):-e==i?(r.a+=\"0.\",r.a+=P,!n&&D!=0&&J(r,CP(D))):e+i<-2?(i==1?(r.a+=P,A>1&&(r.a+=\".\",n?r.a+=\"0\":J(r,CP(D)))):(Oe(r,(Gt(0,P.length),P.charCodeAt(0))),r.a+=\".\",J(r,(Gt(1,P.length+1),P.substr(1))),!n&&D!=0&&J(r,CP(D))),r.a+=\"e-\",r.a+=\"\"+(1-e-i)):(r.a+=\"0.\",J(r,CP(-e-i)),r.a+=P,!n&&D!=0&&J(r,CP(D))),r.a}function Va(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g;if(r=ZA(t.V,e,A),i=wf(t.V,e,A),t.w==2){if(t.V.K){if(r!=-1)fF(t,r);else if(i!=-1)sv(t,i);else if(t.v){if(!t.Z){for(s=0;s<t.V.q;s++)dP(t.V,s,!1);for(P=new Zt(t.I);P.a<P.c.a.length;)n=$t(P),n.g=!1}t.v.g=!0,t.eb=w.Math.max(t.eb,1),e1(t.k)}}else if(g=-1,r!=-1?g=r:i!=-1&&(g=z(t.V,0,i)),g!=-1||t.v){if(!t.Z){for(s=0;s<t.V.q;s++)dP(t.V,s,!1);if(t.I)for(Q=new Zt(t.I);Q.a<Q.c.a.length;)D=$t(Q),D.g=!1}if(g!=-1)if((t.U&1)!=0)for(o=t.M[g],s=0;s<t.V.q;s++)t.M[s]==o&&dP(t.V,s,!0);else for(L=ek(t.V,g,!1),s=0;s<L.length;s++)dP(t.V,L[s],!0);else t.v.g=!0;t.eb=w.Math.max(t.eb,1),e1(t.k)}}else if(t.w==18&&(o=-2,(t.U&1)!=0&&(o=AY(t)),o!=-1)){for(T=Et,h=P1,y=0;y<t.V.q;y++)(o==-2||t.M[y]==o)&&(T>kt(t.V,y)&&(T=kt(t.V,y)),h<kt(t.V,y)&&(h=kt(t.V,y)));if(h>T){for(f=(h+T)/2,l=0;l<t.V.q;l++)(o==-2||t.M[l]==o)&&Be(t.V,l,2*f-kt(t.V,l));for(s=0;s<t.V.r;s++)if(o==-2||t.M[z(t.V,0,s)]==o)switch(l1(t.V,s)){case 257:w0(t.V,s,129);break;case 129:w0(t.V,s,257)}}t.eb=w.Math.max(t.eb,1),e1(t.k),q1(t,new S1(t,1,!0))}}function Dp(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l;for(o=t.Q,L=t.F,(t.G&Sn)!=0&&(t.Q=-6,t.F=fy,Z1(t,1)),t.o=c(K4,A0,56,t.L.q,0,1),D=0;D<t.L.r;D++)(l1(t.L,D)==2||l1(t.L,D)==386||l1(t.L,D)==8)&&Tp(t,D);for(Q=0;Q<t.L.r;Q++)l1(t.L,Q)!=2&&l1(t.L,Q)!=386&&l1(t.L,Q)!=8&&Tp(t,Q);if((t.G&64)==0)for(f=0;f<t.L.r;f++)wu(t.L,f)!=0&&(P=null,wu(t.L,f)==1||wu(t.L,f)==2?(dt(t.L,f)==2||cP(t.L,f)==0||e[cP(t.L,f)][Wi(t.L,f)]>1)&&(wu(t.L,f)==1?P=dt(t.L,f)==2?\"E\":gU(t.L,f)?\"p\":\"P\":P=dt(t.L,f)==2?\"Z\":gU(t.L,f)?\"m\":\"M\"):P=\"?\",P!=null&&(t.Cb((t.X*2+1)/3|0),Z1(t,F9(t.L,f)?-3:t.L.O==1||(t.G&C0)!=0?t.Q:448),A=z(t.L,0,f),n=z(t.L,1,f),y=(X1(t.R,kt(t.L,A))+X1(t.R,kt(t.L,n)))/2,l=(K1(t.R,pt(t.L,A))+K1(t.R,pt(t.L,n)))/2,r=(X1(t.R,kt(t.L,A))-X1(t.R,kt(t.L,n)))/3,i=(K1(t.R,pt(t.L,A))-K1(t.R,pt(t.L,n)))/3,MP(t,y+i,l-r,P,!0),Z1(t,t.Q),t.Cb(t.X)));if((t.G&4)!=0){for(t.Cb((t.X*2+1)/3|0),Z1(t,384),f=0;f<t.L.r;f++)A=z(t.L,0,f),n=z(t.L,1,f),s=O8(t.L,f)?\"d\":_e(t.L,f)?\"a\":\"\",y=(X1(t.R,kt(t.L,A))+X1(t.R,kt(t.L,n)))/2,l=(K1(t.R,pt(t.L,A))+K1(t.R,pt(t.L,n)))/2,MP(t,y,l,s+(\"\"+f),!0);Z1(t,t.Q),t.Cb(t.X)}(t.G&Sn)!=0&&(t.Q=o,t.F=L)}function up(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R,j;for(ut(t,1),A&&(e=!0),D=0;D<t.r;D++)if(Q=dt(t,D),Q==1||Q==2){if(t.s[t.D[0][D]]>0&&t.s[t.D[1][D]]<0)r=t.D[0][D],i=t.D[1][D];else if(t.s[t.D[0][D]]<0&&t.s[t.D[1][D]]>0)r=t.D[1][D],i=t.D[0][D];else continue;if(_0(t,r)||_0(t,i)||t.C[r]<9&&x1(t,r)>3||t.C[i]<9&&x1(t,i)>3)continue;L=It(t,r)!=0,t.s[r]-=1,t.s[i]+=1,L||(m=t.H[D],Q==1?t.H[D]=2:t.H[D]=4,(m==129||m==257)&&(j=t.D[0][D],g=Ns(t,j,!1),t.D[0][g]!=j&&(t.D[1][g]=t.D[0][g],t.D[0][g]=j))),t.T=0}for(v=0,h=0,y=0,P=0;P<t.q;P++)v+=t.s[P],t.s[P]<0&&!eF(t,P)&&(++h,tA(t,P)&&(y-=t.s[P]));if(!e&&v!=0)throw At(new C1(\"molecule's overall charges are not balanced\"));for(ut(t,1),b=0,R=A?v+y:y,f=0;f<t.q;f++)t.s[f]>0&&!ZO(t,f)&&tA(t,f)&&(o=w.Math.min(It(t,f),t.s[f]),o!=0&&R>=o&&(v-=o,b-=o,R-=o,t.s[f]-=o,t.T&=1));if(T=A?v:b,T<0){for(l=c(F,k,6,h,15,1),h=0,r=0;r<t.q;r++)t.s[r]<0&&!eF(t,r)&&(l[h++]=(t.C[r]<<22)+r);for(l.sort(Fe(D0.prototype.hd,D0,[])),s=l.length-1;T<0&&s>=l.length-h;s--)n=l[s]&x0,tA(t,n)&&(o=w.Math.min(-T,-t.s[n]),v+=o,T+=o,t.s[n]+=o,t.T&=1)}return v}function Qp(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m;for(o=c(it,Dt,2,t.g.a.length+t.f.a.length,6,1),l=c(it,Dt,2,t.g.a.length+t.f.a.length,6,1),r=c(it,Dt,2,t.g.a.length+t.f.a.length,6,1),D=0;D<t.g.a.length+t.f.a.length;D++){if(g=D<t.g.a.length?N(t.g,D):N(t.f,D-t.g.a.length),g.K&&D<t.g.a.length)for(n=0;n<g.q;n++)h1(g,n,w8,!1);if(P=new FA(g),o[D]=me(P),o[D]==null)return null;l[D]=Xd(P),r[D]=Su(P,e)}for(L=new V0,i=new V0,h=new V0,Q=0;Q<t.g.a.length;Q++){if(s=Q,A)for(T=\"\",s=-1,y=0;y<t.g.a.length;y++)Y9(T,o[y])<0&&(T=o[y],s=y);Q>0&&(L.a+=\" \",h.a+=\" \",i.a+=\" \"),L.a+=\"\"+o[s],h.a+=\"\"+l[s],i.a+=\"\"+r[s],o[s]=\"\"}for(L.a+=\"!\",t.f.a.length!=0&&t.g.a.length!=0&&(h.a+=\" \",i.a+=\" \"),f=t.g.a.length;f<t.g.a.length+t.f.a.length;f++){if(s=f,A)for(T=\"\",s=-1,y=t.g.a.length;y<t.g.a.length+t.f.a.length;y++)Y9(T,o[y])<0&&(T=o[y],s=y);f>t.g.a.length&&(L.a+=\" \",h.a+=\" \",i.a+=\" \"),L.a+=\"\"+o[s],h.a+=\"\"+l[s],i.a+=\"\"+r[s],o[s]=\"\"}return m=c(it,Dt,2,5,6,1),m[0]=L.a,h.a.length>t.g.a.length+t.f.a.length-1&&(m[1]=h.a),i.a.length>t.g.a.length+t.f.a.length-1&&(m[2]=i.a),t.b&&(m[3]=Im(t.b)),t.a.a.length!=0&&(m[4]=kY(t,e)),m}function op(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R;for(this.i=t,this.v=t.s,this.u=t.q,this.C=new Pj(this.u,this.v),r=0,o=this.v,y=0,T=o.length;y<T;++y)D=o[y],r=w.Math.max(r,w.Math.max(1+D.i,1+D.j));for(e=c(F,k,6,r,15,1),L=this.v,l=0,g=L.length;l<g;++l)D=L[l],++e[D.i],++e[D.j];for(this.j=c(F,f0,7,e.length,0,2),this.k=c(F,f0,7,e.length,0,2),f=0;f<e.length;f++)this.j[f]=c(F,k,6,e[f],15,1),this.k[f]=c(F,k,6,e[f],15,1);for(Vr(e,e.length,0),i=0;i<this.v.length;i++)n=mg(this.v[i],0),P=mg(this.v[i],1),this.j[n][e[n]]=P,this.j[P][e[P]]=n,this.k[n][e[n]]=i,this.k[P][e[P]]=i,++e[n],++e[P];for(this.o=c(F,k,6,r,15,1),this.n=c(F,k,6,r,15,1),this.q=c(F,k,6,r,15,1),this.p=c(Pt,ft,6,r,16,1),this.f=c(F,nA,28,r,0,3),A=1;A<r;A++)for(this.f[A]=c(F,f0,7,A,0,2),P=0;P<A;P++)this.f[A][P]=aZ(this,A,P);for(this.t=1,Q=this.v,s=0,h=Q.length;s<h;++s)D=Q[s],this.t*=D.d.length;for(v=this.u,b=0,R=v.length;b<R;++b)m=v[b],this.t*=m.b.length;this.t<=0&&(this.t=Et),this.D=new _g,this.w=new j3((L1(new Bw),new nw)),this.A=new bi,this.g=0,this.B=0,this.r=3,this.F=!1,this.s=w.Math.min(AP,this.t)}function Ea(t,e){var A,n;return n={},A=t.B[e],n.aromatic=E1(V(A,2),0),n.notAromatic=E1(V(A,4),0),n.notChain=E1(V(A,8),0),n.not2RingBonds=E1(V(A,16),0),n.not3RingBonds=E1(V(A,32),0),n.not4RingBonds=E1(V(A,64),0),n.noMoreNeighbours=E1(V(A,N1),0),n.moreNeighbours=E1(V(A,C0),0),n.matchStereo=E1(V(A,ge),0),n.not0PiElectrons=E1(V(A,Sn),0),n.not1PiElectron=E1(V(A,y8),0),n.not2PiElectrons=E1(V(A,u0),0),n.not0Hydrogen=E1(V(A,128),0),n.not1Hydrogen=E1(V(A,256),0),n.not2Hydrogen=E1(V(A,512),0),n.not3Hydrogen=E1(V(A,re),0),n.not0Neighbours=E1(V(A,I0),0),n.not1Neighbour=E1(V(A,T8),0),n.not2Neighbours=E1(V(A,h8),0),n.not3Neighbours=E1(V(A,c8),0),n.not4Neighbours=E1(V(A,IA),0),n.notChargeNeg=E1(V(A,no),0),n.notCharge0=E1(V(A,Tn),0),n.noChargePos=E1(V(A,134217728),0),n.ringSize0=E1(V(A,s8),0),n.ringSize3=E1(V(A,i9),0),n.ringSize4=E1(V(A,f9),0),n.ringSize5=E1(V(A,D9),0),n.ringSize6=E1(V(A,u9),0),n.ringSize7=E1(V(A,Q9),0),n.ringSizeLarge=E1(V(A,Rf),0),n}function Sa(t,e){D8();var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R;for(g=c(Pt,ft,6,e.g,16,1),R=(ut(e,7),e.p),T=c(Pt,ft,6,R.j.a.length,16,1),Xs(R,T,c(Pt,ft,6,R.j.a.length,16,1),c(F,k,6,R.j.a.length,15,1),!0),b=0;b<R.j.a.length;b++)if(T[b])for(h=0;h<N(R.k,b).length;h++)g[N(R.k,b)[h]]=!0;for(P=c(F,k,6,2,15,1),i=0;i<e.g;i++)if(D=e.D[0][i],Q=e.D[1][i],P[0]=e.C[D],P[1]=e.C[Q],g[i]=g[i]|(i<e.g&&Re(e.p,i)||dt(e,i)==2&&P[0]<=8&&P[1]<=8&&e.o[D]==1&&e.o[Q]==1&&e.e[D]>1&&e.e[Q]>1),!g[i]&&dt(e,i)==1){for(l=0;l<2;l++)if((P[l]==7||P[l]==8)&&P[1-l]==6){for(o=e.D[1-l][i],v=0;v<e.j[o];v++)if(e.n[o][v]==2&&(L=e.i[o][v],e.C[L]==7||e.C[L]==8||e.C[L]==16)){g[i]=!0;break}}}for(m=c(Pt,ft,6,e.f,16,1),f=0;f<e.g;f++)g[f]&&(m[e.D[0][f]]=!0,m[e.D[1][f]]=!0);for(y=c(F,k,6,e.q,15,1),r=0;r<e.g;r++)if(g[r]){for(y[0]=e.D[0][r],s=nW(y,g,e),n=c(F,k,6,s,15,1),l=0;l<s;l++)n[l]=y[l];mt(t,new JT(n,e))}for(A=0;A<e.f;A++)if(!m[A]&&(e.C[A]==5&&e.s[A]==0&&e.e[A]<=3||e.C[A]<=8&&e.o[A]==1&&e.e[A]>1||SP(e,A,!0)&&e.o[A]!=2&&e.e[A]>1)){for(n=c(F,k,6,1+e.e[A],15,1),l=0;l<e.e[A];l++)n[l]=e.i[A][l];n[e.e[A]]=A,mt(t,new JT(n,e))}}function qa(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R,j,C,S,I,x,tt,M;for(v=c(Pt,ft,6,t.j.f,16,1),I=0;I<e.j.a.length;I++)if(x=N(e.k,I).length,(x==3||x==5||x==6||x==7)&&t.i[I])for(n=N(e.j,I),P=0,r=n.length;P<r;++P)A=n[P],v[A]=!0;for(s=c(F,k,6,t.j.f,15,1),l=c(Pt,ft,6,t.j.f,16,1),Q=0;Q<t.j.g;Q++)i=z(t.j,0,Q),f=z(t.j,1,Q),!v[i]&&!v[f]&&(t.e[Q]&&(++s[i],++s[f]),l1(t.j,Q)==16&&(l[i]=!0,l[f]=!0));for(S=c(F,k,6,t.j.f,15,1),y=c(F,k,6,t.j.f,15,1),M=0;M<t.j.f;M++)if(s[M]==1)for(y[0]=M,L=0,h=0;L<=h;){for(T=0;T<O(t.j,y[L]);T++)if(t.e[xt(t.j,y[L],T)]&&(o=_(t.j,y[L],T),(L==0||o!=y[L-1])&&s[o]!=0)){if(y[++h]=o,(s[o]&1)!=0){for(R=1;R<h;R+=2)S[y[R]]=-1;h=0}break}++L}for(D=c(Pt,ft,6,t.j.f,16,1),tt=0;tt<t.j.f;tt++)if(!D[tt]&&s[tt]!=0){for(y[0]=tt,D[tt]=!0,L=0,h=0;L<=h;){for(T=0;T<O(t.j,y[L]);T++)t.e[xt(t.j,y[L],T)]&&(o=_(t.j,y[L],T),D[o]||(y[++h]=o,D[o]=!0));++L}if((h&1)==0){for(g=0;g<=h;g++)S[y[g]]==0&&(S[y[g]]=Ej(t,y[g],!1));for(b=!0,m=0;m<=h;m++)if(S[y[m]]<=0&&!Lf(t,y[m],!1)){b=!1;break}if(b){for(C=0,j=-1,T=0;T<=h;T++)C<S[y[T]]&&(C=S[y[T]],j=y[T]);C>0&&(Ej(t,j,!0),Af(t,j))}}}}function Up(t,e,A,n){var P,r,i,f,D,Q,o,L,s,y,l,h;P=new s1,D=new s1,o=new cr,Q=new cr,i=z(t.L,0,A),f=z(t.L,1,A),n&&(s=e.a,e.a=e.b,e.b=s,s=e.c,e.c=e.d,e.d=s,y=i,i=f,f=y),cA(t,e)&&(fA(t.L,A)?(P.a=e.a,P.c=e.c,P.b=e.b,P.d=e.d,L=n?-N5(t.L,A):N5(t.L,A),L==0&&(L=1),Df(t,e.b-e.a,e.d-e.c,o),L>0?(D.a=e.a+o.a,D.c=e.c+o.b,D.b=e.b+o.a,D.d=e.d+o.b,(ri(t,i,f,1,Q)||O(t.L,i)>1)&&(D.a+=Q.a+o.b,D.c+=Q.b-o.a)):(D.a=e.a-o.a,D.c=e.c-o.b,D.b=e.b-o.a,D.d=e.d-o.b,(ri(t,i,f,-1,Q)||O(t.L,i)>1)&&(D.a+=Q.a+o.b,D.c+=Q.b-o.a)),l1(t.L,A)==386&&iL(P,D),cA(t,P)&&Mn(t,P,i,f),l1(t.L,A)==8?cA(t,D)&&VQ(t,D,i,f):cA(t,D)&&Mn(t,D,i,f)):(Df(t,e.b-e.a,e.d-e.c,o),l=o.a/2,h=o.b/2,r=!1,P.a=e.a+l,P.c=e.c+h,P.b=e.b+l,P.d=e.d+h,O(t.L,i)>1&&(ri(t,i,f,1,Q)?(P.a+=Q.a,P.c+=Q.b,O(t.L,i)==2&&(Q.a!=0||Q.b!=0)&&(P.a+=o.b,P.c-=o.a)):t.o[i]=new d3(P.a,P.c)),D.a=e.a-l,D.c=e.c-h,D.b=e.b-l,D.d=e.d-h,O(t.L,i)>1&&(ri(t,i,f,0,Q)?(D.a+=Q.a,D.c+=Q.b,O(t.L,i)==2&&(Q.a!=0||Q.b!=0)&&(D.a+=o.b,D.c-=o.a)):(t.o[i]=new d3(D.a,D.c),r=!0)),l1(t.L,A)==386&&iL(P,D),l1(t.L,A)==8?r?(VQ(t,P,i,f),Mn(t,D,i,f)):(Mn(t,P,i,f),VQ(t,D,i,f)):(Mn(t,P,i,f),Mn(t,D,i,f))))}function Ia(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m;this.i=t,this.g=7,this.j=new f1,this.k=new f1,this.b=new f1,this.a=c(F,k,6,this.i.f,15,1),this.c=c(F,k,6,this.i.g,15,1),this.i.$b(1),s=c(Pt,ft,6,this.i.f,16,1),y=c(Pt,ft,6,this.i.g,16,1);do for(i=!1,A=0;A<this.i.f;A++)if(!s[A]){for(T=0,L=0;L<O(this.i,A);L++)s[_(this.i,A,L)]||++T;if(T<2){for(s[A]=!0,o=0;o<O(this.i,A);o++)y[xt(this.i,A,o)]=!0;i=!0}}while(i);for(m=0;m<this.i.f&&s[m];)++m;if(m!=this.i.f){for(D=c(F,k,6,this.i.f,15,1),D[0]=m,h=c(F,k,6,this.i.f,15,1),h[0]=-1,f=c(F,k,6,this.i.f,15,1),f[m]=1,r=0,Q=0,l=1;r<=Q;){for(o=0;o<O(this.i,D[r]);o++)if(P=_(this.i,D[r],o),P!=h[D[r]]){if(f[P]!=0){kW(this,xt(this.i,D[r],o),s);continue}s[P]||(f[P]=l,h[P]=D[r],D[++Q]=P)}if(++r,r>Q){for(A=0;A<this.i.f;A++)if(f[A]==0&&!s[A]){f[A]=++l,D[++Q]=A,h[A]=-1;break}}}if((e&4)!=0&&(this.e=c(Pt,ft,6,this.j.a.length,16,1),this.f=c(Pt,ft,6,this.j.a.length,16,1),this.d=c(F,k,6,this.j.a.length,15,1),Xs(this,this.e,this.f,this.d,(e&8)!=0),a_(this)),(e&2)!=0)for(n=0;n<this.i.g;n++)!y[n]&&dt(this.i,n)!=0&&(g=KW(this,n,s),g!=null&&Fb(this,g,Kk(this,g)))}}function xa(t,e,A,n,P){var r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R,j,C,S,I,x,tt,M,K,et,W,$,a;for(v=c(F,k,6,P,15,1),b=c(F,k,6,P,15,1),h=0;h<P;h++)v[h]=f8(e,n[h]),b[h]=f8(A,n[h]);for(tt=0,K=0,M=0,et=0,T=0;T<P;T++)tt+=e.a[v[T]],K+=e.b[v[T]],M+=A.a[b[T]],et+=A.b[b[T]];for(tt/=P,K/=P,M/=P,et/=P,rv(A,tt-M,K-et),Q=c(Li,A0,41,P,0,1),L=c(Li,A0,41,P,0,1),r=c(Li,A0,41,P,0,1),i=c(Li,A0,41,P,0,1),g=0;g<P;g++)Q[g]=new _u(tt,K,e.a[v[g]],e.b[v[g]]),L[g]=new _u(tt,K,A.a[b[g]],A.b[b[g]]),r[g]=new ZP(Q[g].a-L[g].a,Q[g].b*L[g].b),i[g]=new ZP(Q[g].a+L[g].a,Q[g].b*L[g].b);for(j=n2(r,P),C=n2(i,P),$=0,a=0,m=0;m<P;m++)for(R=0;R<Ht(t.f,n[m]);R++)f=_(t.f,n[m],R),Nr(e,f)&&!Nr(A,f)&&++$,!Nr(e,f)&&Nr(A,f)&&++a;for(o=c(Li,A0,41,$,0,1),s=c(Li,A0,41,a,0,1),y=c(Li,A0,41,a,0,1),$=0,a=0,l=0;l<P;l++)for(R=0;R<Ht(t.f,n[l]);R++)f=_(t.f,n[l],R),Nr(e,f)&&!Nr(A,f)&&(D=f8(e,f),o[$]=new _u(e.a[v[l]],e.b[v[l]],e.a[D],e.b[D]),++$),!Nr(e,f)&&Nr(A,f)&&(D=f8(A,f),W=new _u(A.a[b[l]],A.b[b[l]],A.a[D],A.b[D]),s[a]=new ZP(j.a+W.a,W.b),y[a]=new ZP(C.a-W.a,W.b),++a);return S=n2(o,$),I=n2(s,a),x=n2(y,a),w.Math.abs(kL(S.a,I.a))>w.Math.abs(kL(S.a,x.a))?Uf(A,tt,K,j.a):(DK(A,tt,K),Uf(A,tt,K,C.a)),m5(t,e,A,P)}function Na(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R,j,C,S,I;for(ut(t,7),S=0,y=c(Pt,ft,6,t.f,16,1),I=c(F,k,6,t.f,15,1),r=0;r<t.g;r++)A=t.D[0][r],n=t.D[1][r],i=t.s[A],f=t.s[n],i!=0&&f!=0&&i<0^f<0&&(y[A]=!0,y[n]=!0),I[A]+=dt(t,r),I[n]+=dt(t,r);for(D=0;D<t.f;D++)if(S+=t.s[D],t.s[D]==1){if(t.C[D]==7&&!y[D]){if(I[D]<=3)S-=1,t.s[D]=0,t.T=0,t.j[D]!=t.e[D]&&(wQ(t,_(t,D,t.e[D]-1)),ut(t,7));else if(D<t.f&&r0(t.p,D)){for(g=c(Pt,ft,6,t.f,16,1),m=c(Pt,ft,6,t.g,16,1),fR(t,D,!0,g,m),o=0;o<t.f;o++)if(g[o]&&t.C[o]==7&&t.s[o]==0&&I[o]==2&&T_(t,m,D,o)){S-=1;break}}}}else if(t.s[D]<0&&(t.C[D]==6||t.C[D]==7||t.C[D]==8||t.C[D]==16))if(y[D]){for(R=c(F,k,6,16,15,1),R[0]=D,C=1,j=0;j<C;){for(P=0;P<t.r;P++)if(e=-1,t.D[0][P]==R[j]?e=t.D[1][P]:t.D[1][P]==R[j]&&(e=t.D[0][P]),e!=-1&&t.s[e]!=0){for(L=!1,h=0;h<C;h++)if(e==R[h]){L=!0;break}L||(C==R.length&&(Q=c(F,k,6,2*R.length,15,1),sA(R,0,Q,0,R.length),R=Q),R[C++]=e)}++j}for(s=0,T=0;T<C;T++)s+=t.s[R[T]];if(s<0){for(v=-1,b=99,l=0;l<C;l++)t.s[R[l]]<0&&b>wb(t.C[R[l]])&&(b=wb(t.C[R[l]]),v=R[l]);v!=-1&&(S-=t.s[v],t.s[v]=0,t.T=0)}}else S-=t.s[D],t.s[D]=0,t.T=0;return S>0&&(S=dW(t,S)),S}function $5(){$5=d1,nl=B(d(F,1),k,6,15,[0,ui,14286847,13402367,12779264,16758197,9474192,3166456,16715021,9494608,11789301,11230450,9109248,12560038,1578e4,16744448,16777008,2093087,8442339,9388244,4062976,15132390,12567239,10921643,9083335,10255047,14706227,15765664,5296208,13140019,8224944,12750735,6721423,12419299,16752896,10889513,6076625,7351984,nP,9764863,9756896,7586505,5551541,3907230,2396047,687500,27013,12632256,16767375,10909043,6717568,10380213,13924864,9699476,4366e3,5707663,51456,7394559,16777159,14286791,13107143,10747847,9437127,6422471,4587463,3211207,2097095,65436,58997,54354,48952,43812,5096191,5089023,2200790,2522539,2516630,1528967,13684960,16765219,12105936,10900557,5724513,10375093,11230208,7688005,4358806,4325478,32e3,7384058,47871,41471,36863,33023,27647,5528818,7888099,9064419,10565332,11739092,11739066,11734438,12389767,13041766,13369433,13697103,14221381,14680120,15073326,15400998,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13158600,1334015,56540,15075850,15132160,56540,15075850,15461355,8553170,1016335,1016335,1334015,15132160,3289770,14456450,16422400,16422400,11819700,3289770,1016335])}function ty(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h;if(t.db[e]!=0||X(t.R,e)!=5&&X(t.R,e)!=6&&X(t.R,e)!=7&&X(t.R,e)!=14&&X(t.R,e)!=15&&X(t.R,e)!=16||(t.Q&C0)!=0&&X(t.R,e)>=14)return!1;if($1(t.R,e)!=0){if(Yh(t.R,e))return u$(t,e,A);if(X(t.R,e)!=15&&X(t.R,e)!=16)return!1}if(O(t.R,e)<3||Ht(t.R,e)>4||b1(t.R,e)>0&&X(t.R,e)==6||X(t.R,e)==5&&Ht(t.R,e)!=4)return!1;if(t.R.K){if(Qe(t.R,e))return!1;for(f=0;f<Ht(t.R,e);f++)if(Qe(t.R,_(t.R,e,f)))return!1}if(X(t.R,e)==7&&!t.S[e])return!1;for(l=c(F,k,6,4,15,1),h=c(F,k,6,4,15,1),o=c(Pt,ft,6,4,16,1),D=0;D<Ht(t.R,e);D++){for(r=-1,P=0,Q=0;Q<Ht(t.R,e);Q++)o[Q]||r<t.f[_(t.R,e,Q)]&&(r=t.f[_(t.R,e,Q)],P=Q);l[D]=P,h[D]=r,o[P]=!0}if(Ht(t.R,e)==4&&h[0]==h[1]&&h[2]==h[3]||Ht(t.R,e)==4&&(h[0]==h[2]||h[1]==h[3])||Ht(t.R,e)==3&&h[0]==h[2])return!1;for(L=0,s=0,y=!1,i=1;i<Ht(t.R,e);i++)if(h[i-1]==h[i]){if(A==1||h[i]==0)return!1;L=_(t.R,e,l[i-1]),s=_(t.R,e,l[i]),A==3&&fA(t.R,xt(t.R,e,l[i]))&&(t.W[e]=!0),y=!0}return A!=1&&!y?!1:(n=t.jb?U$(t,e,l):ma(t,e,l),A==1?t.db[e]=n:A==2&&(n==1?ue(t.e[L],t.f[e]):n==2&&ue(t.e[s],t.f[e])),!0)}function ey(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T;if(F5(t,e),!((t.u[e]&3)==0||(t.u[e]&3)==3)){if(t.o[e]==2&&t.j[e]==2){ha(t,e);return}if(t.j[e]<3||t.j[e]>4){ce(t,e,0,!1);return}for(A=t.e[e],l=!1,i=0;i<A;i++)if(dt(t,t.k[e][i])==1){l=!0;break}if(l){for(h=mY(t,e),n=c(Ut,Tt,6,A,15,1),f=0;f<A;f++)n[f]=Y0(t,t.i[e][h[f]],e);for(D=0;D<A;D++)t.D[0][t.k[e][D]]==e&&dt(t,t.k[e][D])==1&&(t.H[t.k[e][D]]=1);if(!((t.p&&e<t.f?iA(t.p,e):0)<=24&&sX(t,e,h,n))&&(s=Ns(t,e,!0),s!=-1)){for(t.D[0][s]!=e&&(t.D[1][s]=t.D[0][s],t.D[0][s]=e),y=-1,Q=0;Q<A;Q++)if(s==t.k[e][h[Q]]){y=Q;break}for(T=B(d(F,2),f0,7,0,[B(d(F,1),k,6,15,[2,1,2,1]),B(d(F,1),k,6,15,[1,2,2,1]),B(d(F,1),k,6,15,[1,1,2,2]),B(d(F,1),k,6,15,[2,1,1,2]),B(d(F,1),k,6,15,[2,2,1,1]),B(d(F,1),k,6,15,[1,2,1,2])]),r=1;r<A;r++)n[r]<n[0]&&(n[r]+=F0);if(A==3){switch(o=!1,y){case 0:o=n[1]<n[2]&&n[2]-n[1]<U1||n[1]>n[2]&&n[1]-n[2]>U1;break;case 1:o=n[2]-n[0]>U1;break;case 2:o=n[1]-n[0]<U1}P=(t.u[e]&3)==1^o?257:129}else L=0,n[1]<=n[2]&&n[2]<=n[3]?L=0:n[1]<=n[3]&&n[3]<=n[2]?L=1:n[2]<=n[1]&&n[1]<=n[3]?L=2:n[2]<=n[3]&&n[3]<=n[1]?L=3:n[3]<=n[1]&&n[1]<=n[2]?L=4:n[3]<=n[2]&&n[2]<=n[1]&&(L=5),P=(t.u[e]&3)==1^T[L][y]==1?129:257;t.H[s]=P}}}}function Ay(t,e,A){fp();var n,P,r,i,f,D,Q,o,L,s,y,l,h,T;for(ut(t,7),y=c(OA,te,6,t.j[e],14,1),s=0,D=0;D<t.j[e];D++)if(P=t.i[e][D],t.C[P]!=1){if(i=0,(A&32)!=0&&(r=t.n[e][D],A==32190?G(r,3)<0&&O8(t,t.k[e][D])&&t.o[e]==1&&(r=0):G(r,3)<0&&_e(t,t.k[e][D])&&(r=0),i=Y(i,j1(r,4))),(A&128)!=0){if(go[t.C[P]]==-1)throw At(new C1(v6+t.C[P]));i=I1(i,go[t.C[P]])}else if((A&64)!=0){if(g4[t.C[P]]==-1)throw At(new C1(v6+t.C[P]));i=I1(i,g4[t.C[P]])}for((A&256)!=0&&(l=t.j[P]-1,l>3&&(l=3),(A&512)==0&&l>1&&(l=1),i=Y(i,l<<6)),(A&re)!=0&&(t.u[P]&8)!=0&&(i=Y(i,256)),(A&N1)!=0&&P<t.f&&r0(t.p,P)&&(i=Y(i,512)),(A&Sn)!=0&&(t.u[P]&ge)!=0&&(i=Y(i,re)),o=0;G(i,y[o])<0;)++o;for(L=D;L>o;L--)y[L]=y[L-1];y[o]=i,++s}for(s>4&&(s=4),n=0,Q=0;Q<s;Q++)n=j1(n,11),n=Y(n,y[Q]);if(n=j1(n,15),go[t.C[e]]==-1)throw At(new C1(v6+t.C[e]));if(n=Y(n,go[t.C[e]]),(A&2)!=0?(T=t.p&&e<t.f?iA(t.p,e):0,T>9&&(T=9),T>2&&(T-=2),n=Y(n,T<<4)):(A&1)!=0&&(t.u[e]&8)!=0&&(n=Y(n,64)),(A&4)!=0&&e<t.f&&r0(t.p,e)&&(n=Y(n,re)),(A&8)!=0&&(t.u[e]&C0)!=0&&(n=Y(n,N1)),(A&16)!=0&&(t.u[e]&ge)!=0&&(n=Y(n,C0)),(A&C0)!=0&&(NK(t,e)&&(n=Y(n,ge)),ntt(t,e))){for(f=0;f<t.f;f++)if(y_(t,f)){n=Y(n,Sn);break}}return(A&ge)!=0&&(h=V5(t,e,10),n=Y(n,j1(h,7))),n}function a5(t,e){Is();var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R,j,C,S,I,x,tt,M,K;if(S=t.e,l=t.d,P=t.a,S==0)switch(e){case 0:return\"0\";case 1:return\"0.0\";case 2:return\"0.00\";case 3:return\"0.000\";case 4:return my;case 5:return\"0.00000\";case 6:return\"0.000000\";default:return j=new V0,e<0?j.a+=\"0E+\":j.a+=\"0E\",j.a+=-e,j.a}if(v=l*10+1+7,b=c(lr,te,6,v+1,15,1),A=v,l==1)if(f=P[0],f<0){K=V(f,T1);do h=K,K=Hn(K,10),b[--A]=48+Jt(l0(h,Un(K,10)))&c1;while(G(K,0)!=0)}else{K=f;do h=K,K=K/10|0,b[--A]=48+(h-K*10)&c1;while(K!=0)}else{x=c(F,k,6,l,15,1),M=l,sA(P,0,x,0,M);t:for(;;){for(C=0,Q=M-1;Q>=0;Q--)tt=I1(j1(C,32),V(x[Q],T1)),g=qY(tt),x[Q]=Jt(g),C=Jt(q0(g,32));m=Jt(C),T=A;do b[--A]=48+m%10&c1;while((m=m/10|0)!=0&&A!=0);for(n=9-T+A,D=0;D<n&&A>0;D++)b[--A]=48;for(L=M-1;x[L]==0;L--)if(L==0)break t;M=L+1}for(;b[A]==48;)++A}if(y=S<0,i=v-A-e-1,e==0)return y&&(b[--A]=45),an(b,A,v-A);if(e>0&&i>=-6){if(i>=0){for(o=A+i,s=v-1;s>=o;s--)b[s+1]=b[s];return b[++o]=46,y&&(b[--A]=45),an(b,A,v-A+1)}for(L=2;L<-i+1;L++)b[--A]=48;return b[--A]=46,b[--A]=48,y&&(b[--A]=45),an(b,A,v-A)}return I=A+1,r=v,R=new br,y&&(R.a+=\"-\"),r-I>=1?(Oe(R,b[A]),R.a+=\".\",R.a+=an(b,A+1,v-A-1)):R.a+=an(b,A,v-A),R.a+=\"E\",i>0&&(R.a+=\"+\"),R.a+=\"\"+i,R.a}function ny(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y;if(f=O(t.H,e),n=t.o[A],n>f)return!1;if(Q=y0(t.H,e),r=y0(t.g,A),P=MA(t.g,A),D=MA(t.H,e),gt(V(r,1),0)){if(P!=null){if(gt(V(Q,1),0)){if(D==null||!nk(P,D))return!1}else if(D!=null){if(xJ(D,P))return!1}else if(Ov(X(t.H,e),P))return!1}}else{if(gt(V(Q,1),0))return!1;if(P!=null){if(D!=null){if(!nk(D,P))return!1}else if(!Ov(X(t.H,e),P))return!1}else if(D!=null||t.J[e]!=t.k[A])return!1}if(gt(Y(Q,r),0)){if(gt(V(r,N1),0)){if(t.H.K&&t0(V(Q,N1),0))return!1;if(n!=f)return!1}if(gt(V(r,C0),0)&&n>=f&&t0(V(Q,C0),0))return!1}if(gt(V(t.I[e],Gn(t.j[A])),0)||gt(V(t.B[A],Gn(t.M[e])),0))return!1;if(i=V(r,r9),t.H.K){if(o=V(r,r9),G(o,0)!=0&&(G(i,0)==0||gt(V(i,Gn(o)),0)))return!1}else if(G(i,0)!=0&&t0(V(i,t.M[e]),0))return!1;return b1(t.g,A)!=0&&b1(t.g,A)!=b1(t.H,e)||ye(t.g,A)!=0&&ye(t.g,A)!=ye(t.H,e)||mA(t.g,A)!=0&&mA(t.g,A)!=mA(t.H,e)||(L=V(r,d2),G(L,0)!=0&&i$(t.H,e)!=Jt(q0(L,47))-7)?!1:(s=V(r,fr),G(s,0)!=0?(s=q0(s,22),t.H.K?(y=Jt(q0(V(y0(t.H,e),fr),22)),Jt(s)==y):Hr(t.H,e)==Jt(s)):!0)}function Oa(t,e){var A,n,P,r,i,f,D,Q;if(A=0,i=0,r=e.length,f=null,Q=new br,i<r&&(Gt(i,e.length),e.charCodeAt(i)==43)&&(++i,++A,i<r&&(Gt(i,e.length),e.charCodeAt(i)==43||(Gt(i,e.length),e.charCodeAt(i)==45))))throw At(new XP(T2+e+'\"'));for(;i<r&&(Gt(i,e.length),e.charCodeAt(i)!=46)&&(Gt(i,e.length),e.charCodeAt(i)!=101)&&(Gt(i,e.length),e.charCodeAt(i)!=69);)++i;if(Q.a+=\"\"+(Ct(A,i,(e??P9).length),(e??P9).substr(A,i-A)),i<r&&(Gt(i,e.length),e.charCodeAt(i)==46)){for(++i,A=i;i<r&&(Gt(i,e.length),e.charCodeAt(i)!=101)&&(Gt(i,e.length),e.charCodeAt(i)!=69);)++i;t.e=i-A,Q.a+=\"\"+(Ct(A,i,(e??P9).length),(e??P9).substr(A,i-A))}else t.e=0;if(i<r&&(Gt(i,e.length),e.charCodeAt(i)==101||(Gt(i,e.length),e.charCodeAt(i)==69))&&(++i,A=i,i<r&&(Gt(i,e.length),e.charCodeAt(i)==43)&&(++i,i<r&&(Gt(i,e.length),e.charCodeAt(i)!=45)&&++A),f=(Ct(A,r,e.length),e.substr(A,r-A)),t.e=t.e-Q1(f,P1,Et),t.e!=vt(t.e)))throw At(new XP(\"Scale out of range.\"));if(D=Q.a,D.length<16){if(t.f=(fc==null&&(fc=new RegExp(\"^[+-]?\\\\d*$\",\"i\")),fc.test(D)?parseInt(D,10):NaN),isNaN(t.f))throw At(new XP(T2+e+'\"'));t.a=vs(t.f)}else LT(t,new Hg(D));for(t.d=Q.a.length,P=0;P<Q.a.length&&(n=Gi(Q.a,P),!(n!=45&&n!=48));++P)--t.d;t.d==0&&(t.d=1)}function Lp(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T;for(this.j=t,n=0;n<t.i.f;n++)t.f[n]&&(t.o[n]==1||t.o[n]==2)&&(t.k[n]==1?this.a<=t.j[n]&&(this.a=1+t.j[n]):t.k[n]==2&&this.i<=t.j[n]&&(this.i=1+t.j[n]));for(this.b=this.a+this.i,this.e=k1(Pt,[T0,ft],[12,6],16,[this.b+1,t.g.length+1],2),P=0;P<t.i.f;P++)t.f[P]&&(t.o[P]==1||t.o[P]==2)&&!t.e[P]&&(this.e[dv(this,P)][t.g.length]=!0);for(D=0;D<t.g.length;D++)for(T=0;T<t.g[D].length;T++)A=t.g[D][T],t.f[A]&&(t.o[A]==1||t.o[A]==2)&&(this.e[dv(this,A)][D]=!0);for(this.d=c(F,f0,7,this.b,0,2),Q=0;Q<t.g.length;Q++)for(y=1;y<this.b;y++)if(this.e[y][Q])for(l=0;l<y;l++)this.e[l][Q]&&(this.d[y]=nf(this.d[y],l),this.d[l]=nf(this.d[l],y));for(this.c=c(F,k,6,this.b+1,15,1),s=0;s<this.b;s++)this.e[s][t.g.length]?this.c[s]=-1:this.c[s]=-2;for(o=0;o<t.g.length;o++)if(this.e[this.b][o])for(L=0;L<this.b;L++)this.e[L][o]&&this.c[L]!=o&&(this.c[L]==-2?this.c[L]=o:this.c[L]=-3);for(e=0;e<this.b;e++)if(this.c[e]>=-1&&(r=c(F,k,6,this.b,15,1),eX(this,r,e)))for(L=0;L<this.b;L++)r[L]!=0&&(this.c[L]=-3);for(f=0;f<t.g.length-1;f++)for(y=1;y<this.b;y++)if(this.e[y][f]&&this.c[y]!=-3){for(l=0;l<y;l++)if(this.e[l][f]&&this.c[l]!=-3&&(i=p_(this,y,l,f),i!=null)){for(h=0;h<i.length;h++)this.c[i[h]]=-3;XW(this,i);break}}}function Ga(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R,j,C,S,I,x,tt,M,K,et,W,$,a,st,ht,wt;for(t.e=c(Ut,Tt,6,t.d,15,1),n=c(Ut,Tt,6,t.d,15,1),Q=c(Ut,Tt,6,t.d,15,1),S=c(Ut,Tt,6,t.d,15,1),wt=c(Ut,Tt,6,t.d,15,1),m=c(Ut,Tt,6,t.d*t.d,15,1),L=0;L<t.d;L++)S[L]=t.i[L];for(f=is(t,t.i),qb(t),x=0,s=0;s<t.d;s++)m[s*t.d+s]=1,wt[s]=-t.e[s],x+=t.i[s]*t.i[s];for(C=100*w.Math.max(w.Math.sqrt(x),t.d),K=(z1(),M1(Date.now())),b=1;b<=e&&!t.f;b++){if(I=a$(t,t.i,f,wt,S,C),I<0)return 2;for(f=t.k,a=0,y=0;y<t.d;y++)wt[y]=S[y]-t.i[y],t.i[y]=S[y],W=w.Math.abs(wt[y])/w.Math.max(w.Math.abs(t.i[y]),1),W>a&&(a=W),n[y]=t.e[y];if(a<12e-8)return 0;for(D=qb(t),a=0,$=w.Math.max(t.k*D,1),l=0;l<t.d;l++)ht=w.Math.abs(t.e[l])*w.Math.max(w.Math.abs(t.i[l]),1),a=w.Math.max(a,ht),n[l]=t.e[l]-n[l];if(a/=$,a<A)return 0;for(P=0,i=0,tt=0,M=0,h=0;h<t.d;h++){for(v=h*t.d,Q[h]=0,R=0;R<t.d;R++)Q[h]+=m[v+R]*n[R];P+=n[h]*wt[h],i+=n[h]*Q[h],tt+=n[h]*n[h],M+=wt[h]*wt[h]}if(P>w.Math.sqrt(3e-8*tt*M)){for(P=1/P,r=1/i,T=0;T<t.d;T++)n[T]=P*wt[T]-r*Q[T];for(g=0;g<t.d;g++)for(v=g*t.d,R=g;R<t.d;R++)m[v+R]+=P*wt[g]*wt[R]-r*Q[g]*Q[R]+i*n[g]*n[R],m[R*t.d+g]=m[v+R]}for(o=0;o<t.d;o++)for(v=o*t.d,wt[o]=0,R=0;R<t.d;R++)wt[o]-=m[v+R]*t.e[R];if(et=M1(Date.now()),st=l0(et,K),lu(st,t.j)){for(j=new Zt(t.c);j.a<j.c.a.length;)$t(j),null.wd();K=et}}return 1}function Ja(t){var e,A,n,P,r,i,f,D,Q,o,L,s;for(e=0;t.a.length!=0;){if(t.a.length==1){if(t.e==1||t.e==0)break;if(t.e==2&&(t.a[0]==0||t.a[0]==180))break;if(t.e==3&&(t.a[0]==0||t.a[0]==90))break}for(s=t.a[0]!=0&&(t.e==2||t.e==3)?-1:0,L=-1,o=Et,i=s;i<t.a.length;i++)D=i+1,A=i>=0?t.a[i]:-t.a[0],n=D<t.a.length?t.a[D]:t.e==1?t.a[0]+180:t.e==2?360-t.a[t.a[i]==180?i-1:i]:t.e==3?180-t.a[t.a[i]==90?i-1:i]:t.a[0]+360,o>n-A&&(o=n-A,L=i);if(o>15)break;r=L,f=r+1,r==-1?(e+=t.c[0],t.a[0]=0,t.c[0]=t.c[0]*2<<16>>16,t.d[0][0]=-t.d[0][1]):f<t.a.length?(Q=Xu(t,r,f,t.a[f]),hf(t,Q,r,f,t.d[r][0],t.d[f][1])):t.e==1?(f=0,Q=Xu(t,r,f,t.a[f]+180),Q<=180?hf(t,Q,r,f,t.d[r][0],t.d[f][1]+180):hf(t,Q-180,f,r,t.d[f][0],t.d[r][1]-180)):t.e==2?(f=t.a[r]==180?r-1:r,t.a[r]<180?(e+=t.c[r],t.a[r]=180,t.c[r]=t.c[r]*2<<16>>16,t.d[r][1]=360-t.d[r][0]<<16>>16):(z1(),Q=Xu(t,r,f,t.a[f]),hf(t,Q,f,r,t.d[f][0],t.d[r][1]))):t.e==3?(f=t.a[r]==90?r-1:r,t.a[r]<90?(e+=t.c[r],t.a[r]=90,t.c[r]=t.c[r]*2<<16>>16,t.d[r][1]=180-t.d[r][0]<<16>>16):(z1(),Q=Xu(t,r,f,t.a[f]),hf(t,Q,f,r,t.d[f][0],t.d[r][1]))):(f=0,Q=Xu(t,r,f,t.a[f]+360),Q<=360?hf(t,Q,r,f,t.d[r][0],t.d[f][1]+360):hf(t,Q-360,f,r,t.d[f][0],t.d[r][1]-360))}if(e!=0)for(P=0;P<t.c.length;P++)t.c[P]=vt(w.Math.round(100*t.c[P]/(100+e)))<<16>>16}function sp(t,e){var A,n,P,r,i,f,D,Q;if(D=0,t.K){switch(e<t.f&&V3(t.p,e)?D=Y(D,j6):e<t.f&&r0(t.p,e)&&(D=Y(D,2)),Q=(P=t.u[e]&cn,P==0?0:P==re?2:P==N1?3:4),Q!=0&&(D=Y(D,8),Q>2&&(D=Y(D,16)),Q>3&&(D=Y(D,32))),A=t.s[e],A<0?D=Y(D,pf):A>0&&(D=Y(D,jf)),i=t.j[e],i){case 0:break;case 1:D=Y(D,I0);break;case 2:D=Y(D,Ui);break;case 3:D=Y(D,qP);break;default:D=Y(D,Cf)}switch(n=ah(t,e),n){case 0:break;case 1:D=Y(D,g2);break;case 2:D=Y(D,Uy);break;case 3:D=Y(D,Ly);break;default:D=Y(D,to)}f=t.o[e],f>0&&(D=Y(D,Sn)),f>1&&(D=Y(D,y8))}else{switch(e<t.f&&V3(t.p,e)?D=Y(D,j6):e<t.f&&r0(t.p,e)?D=Y(D,2):D=Y(D,4),(t.u[e]&Tn)!=0?D=Y(D,KQ):D=Y(D,XQ),Q=(P=t.u[e]&cn,P==0?0:P==re?2:P==N1?3:4),Q==0?D=Y(D,112):Q==2?D=Y(D,104):Q==3?D=Y(D,88):D=Y(D,56),A=t.s[e],A==0?D=Y(D,WQ):A<0?D=Y(D,pf):D=Y(D,jf),r=t.e[e]-e0(t,e)+It(t,e),r){case 0:D=Y(D,1792);break;case 1:D=Y(D,1664);break;case 2:D=Y(D,1408);break;default:D=Y(D,896)}switch(i=t.j[e],i){case 0:D=Y(D,3932160);break;case 1:D=Y(D,_Q);break;case 2:D=Y(D,c2);break;case 3:D=Y(D,w2);break;default:D=Y(D,Cf)}switch(n=ah(t,e),n){case 0:D=Y(D,Dy);break;case 1:D=Y(D,uy);break;case 2:D=Y(D,Qy);break;case 3:D=Y(D,oy);break;default:D=Y(D,to)}switch(f=t.o[e],f){case 0:D=Y(D,98304);break;case 1:D=Y(D,81920);break;default:D=Y(D,49152)}}return D}function yp(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R;for(D=c(F,k,6,t.i.f,15,1),g=c(F,k,6,t.i.f,15,1),l=c(Pt,ft,6,t.i.f,16,1),Q=c(Pt,ft,6,t.i.f,16,1),m=new ag(t.i.f),D[0]=e,g[e]=A,g[A]=-2,m.a[e]=!0,m.a[A]=!0,r=0,o=0;r<=o;){if(i=D[r],g[i]==i){for(L=0;L<O(t.i,i);L++)if(n=_(t.i,i,L),!m.a[n]){if(CA(t.i,i,L)==2&&X(t.i,n)<10)D[++o]=n,g[n]=n,Q[n]=Q[i]||$1(t.i,n)==2,l[n]=Q[i]&&!l[i],m.a[n]=!0;else if(Q[i]&&l[i]){if(v=xb(t,n,g[i],m.a),v==-1)return null;D[++o]=n,g[n]=v,g[v]=-2,Q[n]=!1,m.a[n]=!0,m.a[v]=!0}else if(fA(t.i,xt(t.i,i,L))&&(D[++o]=n,g[n]=n,Q[n]=!1,m.a[n]=!0,(X(t.i,n)==6&&$1(t.i,n)==0||X(t.i,n)==7&&b1(t.i,n)==1||X(t.i,n)==14||X(t.i,n)==15&&O(t.i,n)>2||X(t.i,n)==16&&O(t.i,n)>2)&&O(t.i,n)>2)){for(f=!1,h=1;h<O(t.i,n);h++)if(b=_(t.i,n,h),!m.a[b])for(T=0;T<h;T++)R=_(t.i,n,T),m.a[R]||Ks(t,b,R)&&(D[++o]=b,g[b]=R,g[R]=-2,Q[b]=!1,m.a[b]=!0,m.a[R]=!0,f=!0);if(!f)return null}}}else{for(P=c(Pt,ft,6,O(t.i,i),16,1),s=0;s<O(t.i,i);s++)if(n=_(t.i,i,s),m.a[n])P[s]=g[n]==n;else for(h=0;h<O(t.i,n);h++)if(_(t.i,n,h)==g[i]){P[s]=!0;break}for(y=0;y<O(t.i,i);y++)if(P[y])if(n=_(t.i,i,y),m.a[n]){if(u1(t.i,n,g[i])==-1)return null}else D[++o]=n,g[n]=n,l[n]=!1,Q[n]=!0,m.a[n]=!0;for(L=0;L<O(t.i,i);L++)if(!P[L]&&(n=_(t.i,i,L),!m.a[n])){if(v=xb(t,n,g[i],m.a),v==-1)return null;D[++o]=n,g[n]=v,g[v]=-2,Q[n]=!1,m.a[n]=!0,m.a[v]=!0}}++r}return m}function za(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l,h;switch(s=t.X,t.X=0,s){case 1:if(l=ZA(t.V,t.ib,t.lb),l!=-1&&De(t.V,l)==8)return;G1(t),t.e==-1&&(t.e=W0(t.V,t.hb,t.kb,0)),l==-1&&(l=W0(t.V,t.ib,t.lb,0)),t.e!=-1&&l!=-1&&(P=_0(t.V,t.e)||_0(t.V,l)?16:1,t.w==6&&(P=257),t.w==23&&(P=129),vb(t.V,t.e,l,P)),t.eb=w.Math.max(t.eb,3),e1(t.k),q1(t,new S1(t,1,!0));break;case 2:if(G1(t),t.q>0&&(t.e==-1&&(t.e=W0(t.V,t.hb,t.kb,0)),t.n[0]==-1&&(t.n[0]=W0(t.V,t.o[0],t.p[0],0)),t.n[0]!=-1&&eL(t.V,t.e,t.n[0])),t.q>1)for(f=1;f<t.q;f++)t.n[f]==-1&&(t.n[f]=W0(t.V,t.o[f],t.p[f],0)),t.n[f]!=-1&&eL(t.V,t.n[f-1],t.n[f]);t.eb=w.Math.max(t.eb,3),e1(t.k),q1(t,new S1(t,1,!0));break;case 3:case 4:case 7:t.eb=w.Math.max(t.eb,3),e1(t.k),q1(t,new S1(t,1,!0));break;case 10:t.eb=w.Math.max(t.eb,3),e1(t.k);break;case 5:case 6:for(y=!1,i=0;i<t.V.q;i++)if(t.P[i]!=P0(t.V,i)){y=!0;break}e1(t.k),y&&q1(t,new S1(t,2,!0));break;case 8:if(L=!1,n=t.t,n!=-1&&t.V.K&&Qe(t.V,n)&&(n=-1),Q=R1(t.V,t.e),n==-1){if(G1(t),Q!=0){for(L=!0,h=!1,e=0;e<t.V.f;e++)R1(t.V,e)==Q&&(h=h|Bn(t.V,e),We(t.V,e,0,!1));po&&!h&&TQ(t)}}else{if(G1(t),L=!0,h=!1,t.e==n)for(D=R1(t.V,t.e),e=0;e<t.V.f;e++)R1(t.V,e)==D&&(h=h|Bn(t.V,e),We(t.V,e,0,!1));else{for(o=R1(t.V,n),A=0;A<t.V.f;A++)(R1(t.V,A)==Q||R1(t.V,A)==o)&&We(t.V,A,0,!1);for(r=1,e=0;e<t.V.f;e++)R1(t.V,e)==r&&(++r,e=-1);We(t.V,t.e,r,!1),We(t.V,n,r,!1)}po&&!h&&TQ(t)}L&&dL(t,w.Math.max(t.eb,1)),e1(t.k)}}function Ya(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b;if(v=bA(t.hb,t.kb,t.ib,t.lb),g=t.ib-t.hb,m=t.lb-t.kb,L=t.q,s=0,l=0,y=0,h=0,L>0&&(s=Jt(M1(w.Math.round(t.o[0]))),l=Jt(M1(w.Math.round(t.p[0])))),L>1&&(y=Jt(M1(w.Math.round(t.o[1]))),h=Jt(M1(w.Math.round(t.p[1])))),D=0,t.e==-1||De(t.V,t.e)==0)D=AA*J9(M1(w.Math.round(v*3/U1)));else if(De(t.V,t.e)==1)A=Y0(t.V,_(t.V,t.e,0),t.e),n=A-AA,P=A+AA,D=w.Math.abs(Je(v,n))<w.Math.abs(Je(v,P))?n:P;else{for(r=c(Ut,Tt,6,De(t.V,t.e),15,1),o=0;o<De(t.V,t.e);o++)r[o]=Y0(t.V,t.e,_(t.V,t.e,o));for(r.sort(Fe(gi.prototype.hd,gi,[])),Q=0;Q<r.length;Q++){if(T=Q==0?r[r.length-1]-F0:r[Q-1],T<v&&v<r[Q]){D=(r[Q]+T)/2;break}if(T<v-F0&&v-F0<r[Q]){D=(r[Q]+T)/2;break}}}if(e=rn(t.V,24*t.ab),t.q=w.Math.abs(Je(v,D))>AA?0:vt(w.Math.sqrt(g*g+m*m)/e),t.q>0){for((t.o==null||t.o.length<t.q)&&(t.o=c(Ut,Tt,6,t.q,15,1),t.p=c(Ut,Tt,6,t.q,15,1)),i=c(Ut,Tt,6,2,15,1),f=c(Ut,Tt,6,2,15,1),b=Je(v,D)<0?D-AA:D+AA,i[0]=e*w.Math.sin(D),f[0]=e*w.Math.cos(D),i[1]=e*w.Math.sin(b),f[1]=e*w.Math.cos(b),o=0;o<t.q;o++)t.o[o]=(o==0?t.hb:t.o[o-1])+i[o&1],t.p[o]=(o==0?t.kb:t.p[o-1])+f[o&1];for(t.n=c(F,k,6,t.q,15,1),Q=0;Q<t.q;Q++)t.n[Q]=ZA(t.V,t.o[Q],t.p[Q]),t.n[Q]!=-1&&(t.o[Q]=kt(t.V,t.n[Q]),t.p[Q]=pt(t.V,t.n[Q]))}return L!=t.q||t.q!=0&&(s!=Jt(M1(w.Math.round(t.o[0])))||l!=Jt(M1(w.Math.round(t.p[0]))))||t.q>1&&(y!=Jt(M1(w.Math.round(t.o[1])))||h!=Jt(M1(w.Math.round(t.p[1]))))}function Ka(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R,j,C,S,I,x,tt,M,K,et,W,$,a,st,ht,wt;for(st=new f1,g=new Zt(t.g);g.a<g.c.a.length;)if(T=$t(g),T.g!=-1&&(v=u1(t.k,T.a,T.g),!Pi(t.k,v)&&!$P(t.k,v)&&(qe(t.k,v)==1||qe(t.k,v)==2))){if($=N(t.g,t.q[T.g]),A=c(F,k,6,O(t.k,T.a)+O(t.k,$.a)-2,15,1),S=0,a=!1,$.g!=-1)A[S++]=$.b;else{for(b=-1,ht=-1,R=Et,x=0;x<O(t.k,$.a);x++)L=_(t.k,$.a,x),L!=T.a&&(b==-1?(b=x,R=t.q[L]):R<t.q[L]?ht=x:(ht=b,b=x));ht==-1?(K=_(t.k,$.a,b),et=xt(t.k,$.a,b),A[S++]=et|(uQ(t,$.a,K)?wn:0)):(s=_(t.k,$.a,b),l=xt(t.k,$.a,b),y=_(t.k,$.a,ht),h=xt(t.k,$.a,ht),A[S++]=l|(uQ(t,$.a,s)?wn:0),A[S++]=h|(uQ(t,$.a,y)?0:wn))}if(O(t.k,$.a)==3&&$.g!=-1){for(x=0;x<O(t.k,$.a);x++)if(L=_(t.k,$.a,x),L!=$.g&&L!=T.a){n=xt(t.k,$.a,x),A[S++]=n|(uQ(t,$.a,L)?wn:0),L<$.g&&(a=!a);break}}for(qe(t.k,v)==2&&(a=!a),I=0;I<O(t.k,T.a);I++)if(D=_(t.k,T.a,I),D!=T.g){if(C=a,O(t.k,T.a)==3){for(M=0;M<O(t.k,T.a);M++)if(L=_(t.k,T.a,M),L!=T.g&&L!=D){L<D&&(C=!C);break}}gU(t.k,v)&&(j=gq(t.d,v),t.n[j]||(t.n[j]=!0,t.o[j]=C),t.o[j]&&(C=!C)),Q=u1(t.k,T.a,D),A[S++]=Q|(C^uQ(t,T.a,D)?0:wn)}st.a.push(A)}for(t.f=c(F,k,6,t.k.g,15,1),st.a.length!=0&&iT(t,LA(st,0),!1);st.a.length!=0;){for(wt=st.a.length,I=st.a.length-1;I>=0;I--){for(A=(ve(I,st.a.length),st.a[I]),W=0,tt=!1,o=!1,r=A,i=0,f=r.length;i<f;++i)P=r[i],e=P&1073741823,t.f[e]!=0&&(m=(P&wn)!=0^t.f[e]==2,W==0?tt=m:tt!=m&&(o=!0),++W);W!=0&&(A=LA(st,I),o||iT(t,A,tt))}wt==st.a.length&&iT(t,LA(st,0),!1)}}function lp(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R,j,C,S,I;for(this.d=t,I=OQ(e,!1,null),(I.g.a.length!=1||I.f.a.length!=1)&&z1(),I.c||cQ(I)||z1(),this.g=N(I.g,0),this.f=N(I.f,0),ut(this.g,1),ut(this.f,63),Q=new bi,this.c=c(F,k,6,this.g.f+1,15,1),this.c[0]=-1,n=0;n<this.g.f;n++)R1(this.g,n)!=0&&(this.c[R1(this.g,n)]=n);for(QX(this,this.c),j=c(Pt,ft,6,this.g.g,16,1),g=0;g<this.f.g;g++)h=z(this.f,0,g),T=z(this.f,1,g),s=R1(this.f,h),y=R1(this.f,T),s!=0&&y!=0&&(P=this.c[s],r=this.c[y],m=ou(this.f,g),R=u1(this.g,P,r),R==-1?K8(Q,new As(P,r,s,y,m)):((Ae(this.g,R)&31)==0&&(C=ou(this.g,R),C!=m&&K8(Q,new As(P,r,s,y,m))),j[R]=!0));for(D=0;D<this.g.g;D++)j[D]||(P=z(this.g,0,D),r=z(this.g,1,D),!Qe(this.g,P)&&!Qe(this.g,r)&&(s=R1(this.g,P),y=R1(this.g,r),(s!=0||y!=0)&&K8(Q,new As(P,r,s,y,-1))));for(this.k=Kq(Q,c(Stt,{477:1,4:1,5:1,11:1,8:1},148,0,0,1)),o=0,i=0;i<this.g.f;i++)R1(this.g,i)==0&&!Qe(this.g,i)&&++o;for(this.j=c(F,k,6,o,15,1),o=0,f=0;f<this.g.f;f++)R1(this.g,f)==0&&!Qe(this.g,f)&&(this.j[o++]=f);for(this.n=new f1,L=c(Pt,ft,6,this.f.f,16,1),A=0;A<this.f.f;A++)R1(this.f,A)==0&&!Qe(this.f,A)&&!L[A]&&mt(this.n,new Vb(this.f,A,L));for(this.b=this.j.length==0&&this.n.a.length==0,this.a=c(F,k,6,0,15,1),l=0;l<this.f.f;l++)v=d0(this.f,l),(v==1||v==2)&&(b=this.c[R1(this.f,l)],b!=-1&&(S=d0(this.g,b),tK(this,l,this.c)==(S==v)&&(this.a=bn(this.a,this.a.length+1),this.a[this.a.length-1]=b)));this.e=rK(this)}function t6(){t6=d1,ZV=B(d(it,1),Dt,2,6,[\"[N](-*)(-*)-*\",\"[N](-*)=*\",\"[N]#*\",\"[N](-*)(=*)=* as in nitro\",\"[N](=*)#* middle atom of azide\",\"[N]1(-*)-*-*-1 3-membered ring\",\"[NH](-*)-*\",\"[NH]1-*-*-1 3-membered ring\",\"[NH]=*\",\"[NH2]-*\",\"[N+](-*)(-*)(-*)-*\",\"[N+](-*)(-*)=*\",\"[N+](-*)#* N in isocyano\",\"[NH+](-*)(-*)-*\",\"[NH+](-*)=*\",\"[NH2+](-*)-*\",\"[NH2+]=*\",\"[NH3+]-*\",\"[n](:*):*\",\"[n](:*)(:*):*\",\"[n](-*)(:*):*\",\"[n](=*)(:*):* as in pyridine-N-oxid\",\"[nH](:*):*\",\"[n+](:*)(:*):*\",\"[n+](-*)(:*):*\",\"[nH+](:*):*\",\"[O](-*)-*\",\"[O]1-*-*-1 3-membered ring\",\"[O]=*\",\"[OH]-*\",\"[O-]-*\",\"[o](:*):*\",\"[S](-*)-*\",\"[S]=*\",\"[S](-*)(-*)=*\",\"[S](-*)(-*)(=*)=*\",\"[SH]-*\",\"[s](:*):*\",\"[s](=*)(:*):*\",\"[P](-*)(-*)-*\",\"[P](-*)=*\",\"[P](-*)(-*)(-*)=*\",\"[PH](-*)(-*)=*\"]),NP=B(d(Ee,1),PA,6,15,[3.240000009536743,12.359999656677246,23.790000915527344,11.680000305175781,13.600000381469727,rV,12.029999732971191,21.940000534057617,23.850000381469727,26.020000457763672,0,rV,4.360000133514404,4.440000057220459,13.970000267028809,16.610000610351562,25.59000015258789,27.639999389648438,12.890000343322754,4.409999847412109,4.929999828338623,8.390000343322754,15.789999961853027,4.099999904632568,3.880000114440918,14.140000343322754,9.229999542236328,12.529999732971191,17.06999969482422,20.229999542236328,23.059999465942383,13.140000343322754,25.299999237060547,32.09000015258789,19.209999084472656,8.380000114440918,38.79999923706055,28.239999771118164,21.700000762939453,13.59000015258789,34.13999938964844,9.8100004196167,23.469999313354492])}function hp(){hp=d1,JV=B(d(it,1),Dt,2,6,[\"gkvt@@@@LddTTTrbTRTRTRRRRRRRRRRRRRrVRrIh\\\\IAaQxlY@gRHdJCJcRXlv_CfJx|A\\\\hRHejiLaQjTje^kSjtFcIhvXmVKMjt{lN{Kavy\\\\^wGjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjh@@vo@HBC@PhLN@bPhtFKCcpDbILaRhtzCIbsX\\\\nOO`JDbqDjSKdJeJmQjtz}Ahr[LVkMnpz\\\\nwGj{PBhBdBlBBBjBfBnBaBiBeBmBcBkBgBoB`bhbdblbbbjbfbnbabibebmbcbkbgbob`RhRdRlRbRjRfRnRaRiReRmRcRkRgRoR`rhrdrlrbrjrfrnrarirermrcrkrgror`JhJdJlJbJjJfJnJaJiJeJmJcJkJgJoJ`jhjdjljbjjjfjnjajijej` !BnkjyVwsVr|iQn|Q|goTZWPIJwbudnRkVYBez]siZymNJZUqNFBqZWxS~iCXVU]SeRjwrtSPAjkvXLpBAZauDPzq]PfMlecrMnkv|@\\\\SFD`m|mWiEoCXp`SIe_J[l|[XCbloTV`[Gc@FJGopyyoOlFQfUy^w\\\\Bgz|\",\"gcrt@@@@LdbbbbTRbRbRbRRRRRRRRRRRRVRrVQIA`HtRGAaIxZAHfShTjCIbqylQGKgqdBaXeQJeruBiPitZmFoPZLFSYbvZlVGMnsZ]vWSmr{]UUUUUUUUUUUUUUUUUUUUUUUUUUUUUT@@[G`DAA`HTFG@QHTZCEaqxBQDfPiTZ]AdqYlNWGgpEBQXbUIerEReVhuZ]^`tYMfKUfwX]NW[jkPBhBdBlBbBjBfBnBaBiBeBmBcBkBgBoB`bhbdblbbbjbfbnbabibebmbcbkbgbob`RhRdRlRbRjRfRnRaRiReRmRcRkRgRoR`rhrdrlrbrjrfrnrarirermrcrkrgror`JhJdJlJbJjJfJnJaJiJeJmJcJkJgJoJ`jhjdjljbjjjfjnjajij` !B^cR]`]Fm]QkfljE\\\\p?UVfgOmFXsQe_gXPyXis_wF|vUUX_XbxpzU]HUFgYViwFo~@uemc@}~T?IEPioYVwr]JnM~[ZEC\\\\g}~o_pUfdo~irsklTLiyVJshnw^iVAsZ`_~}PYkckURH{FYMImFaRaccUlCZSHMfP\",\"dml@@Dje^VGiyZjjjh@vtHSBinFU@ !BPTCTy[skMzUPF`AJbBixEZHS[Il\",\"dml@@DjYVvGiyZjjjh@vtHSBinFU@ !BwLo~BJ~UquhXBinZ\\\\ykA@F_eMrT\",\"dml@@LdfbbQX^fUZjjj`C[PaLJfxYT !BzxIHVc{OiJVRpprePho~]}y?wLl\",\"deL@@DjUYkfEijjjj@MeBDpj[ad !B?aA?MVr[AvkKzm_jKvVbD{sk\",\"dil@@LddTQRl[NX^Fjjjj@MiBDpj[a@ !BPfL@?ox@M~T@?ox@?`C~@@\",\"daL@@DjYtKJqjynjjjj@MaBDpj[` !B`bL@_gx@@Gy~@Gx@_`@\"])}function Xa(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R,j,C,S,I;i=c(Ut,Tt,6,t.q,15,1);t:for(r=0;r<i.length;r++){switch(I=t.a[r],i[r]=0,I){case 32:case 72:for(Q=0;Q<t.e[r];Q++){for(g=t.i[r][Q],b=t.a[g],h=0,T=0,L=0;L<t.e[g];L++)m=t.i[g][L],t.C[m]==7&&t.e[m]+It(t,m)==2&&!(m<t.f&&r0(t.p,m))&&++h,(t.C[m]==8||t.C[m]==16)&&t.e[m]+It(t,m)==1&&++T;if(t.C[g]==16&&T==2&&h==1&&(h=0),t.C[g]==6&&T>0){i[r]=T==1?-1:-(T-1)/T;continue t}if(b==45&&T==3){i[r]=-.3333333333333333;continue t}if(b==25&&T>0){i[r]=T==1?0:-(T-1)/T;continue t}if(b==18&&T>0){i[r]=h+T==2?0:-(h+T-2)/T;continue t}if(b==73&&T>0){i[r]=T==1?0:-(T-1)/T;continue t}if(b==77&&T>0){i[r]=-1/T;continue t}}break;case 76:for(C=0,S=(ut(t,7),t.p),j=0;j<S.j.a.length;j++)if(yA(S,j,r)){C=j;break}if(C<S.j.a.length){for(l=0,A=N(S.j,C),n=0,P=A.length;n<P;++n)e=A[n],e>-1&&t.a[e]==76&&++l;if(l>0){i[r]=-1/l;continue t}}break;case 55:case 56:case 81:for(i[r]=t.s[r],y=1,R=0,f=c(Pt,ft,6,t.q,16,1),f[r]=!0;y>R;)for(R=y,o=0;o<t.q;o++)if(f[o]){for(L=0;L<t.e[o];L++)if(g=t.i[o][L],b=t.a[g],!(b!=57&&b!=80))for(s=0;s<t.e[g];s++)m=t.i[g][s],v=t.a[m],!(v!=55&&v!=56&&v!=81)&&(f[m]||(f[m]=!0,i[r]+=t.s[m],++y))}i[r]/=y;continue t;case 61:for(D=0;D<t.e[r];D++)if(g=t.i[r][D],t.a[g]==42){i[r]=1;continue t}continue t;case 34:case 49:case 51:case 54:case 58:case 92:case 93:case 94:case 97:i[r]=1;continue t;case 87:case 95:case 96:case 98:case 99:i[r]=2;continue t;case 88:i[r]=3;continue t;case 35:case 62:case 89:case 90:case 91:i[r]=-1;continue t}i[r]=0}return i}function Za(t,e,A){var n,P,r,i;for(t.u=e,t.a=A,n=vt(w.Math.round((de==-1&&(de=globalThis.devicePixelRatio||1),de*8))),P=B(d(F,1),k,6,15,[n,-1,-2,-2,n]),i=B(d(F,1),k,6,15,[n,-2,n,-2,-2,-2,-2,-2,-2,-2,n,-2,n,-2,n,-2,n,-2,2*n,-2,n/2|0,-2,n/2|0,-2,2*n]),WU(t.s,P,i),Te(t.s,Ue(t.s,\"Desired Bond type(s):\"),1,1,3,1),t.k=Dn(t.s,\"Single\"),Te(t.s,t.k,1,3,3,3),t.c=Dn(t.s,\"Double\"),Te(t.s,t.c,1,4,3,4),t.n=Dn(t.s,\"Triple\"),Te(t.s,t.n,1,5,3,5),t.i=Dn(t.s,\"Quadruple\"),Te(t.s,t.i,1,6,3,6),t.j=Dn(t.s,\"Quintuple\"),Te(t.s,t.j,1,7,3,7),t.b=Dn(t.s,\"Delocalized\"),Te(t.s,t.b,1,8,3,8),t.g=Dn(t.s,\"Coordinate (0-order)\"),Te(t.s,t.g,1,9,3,9),t.q=UA(t.s),Nt(t.q,\"any ring state\"),Nt(t.q,UV),Nt(t.q,\"is any ring bond\"),Nt(t.q,\"is non-aromatic ring bond\"),Nt(t.q,\"is aromatic bond\"),Nt(t.q,\"is any non-aromatic bond\"),zP(t.q,t),Te(t.s,t.q,1,11,3,11),t.r=UA(t.s),Nt(t.r,\"any ring size\"),Nt(t.r,\"is in 3-membered ring\"),Nt(t.r,\"is in 4-membered ring\"),Nt(t.r,\"is in 5-membered ring\"),Nt(t.r,\"is in 6-membered ring\"),Nt(t.r,\"is in 7-membered ring\"),Nt(t.r,\"smallest ring 8 to 11\"),Nt(t.r,\"smallest ring >= 12\"),Te(t.s,t.r,1,13,3,13),t.e=Dn(t.s,\"Match formal bond order\"),uA(t.e,(e.G[A]&Mf)!=0),zP(t.e,t),Te(t.s,t.e,1,15,3,15),t.f=Dn(t.s,\"Match Stereo Configuration\"),uA(t.f,(e.G[A]&c8)!=0),zP(t.f,t),Te(t.s,t.f,1,17,3,17),t.d=Dn(t.s,\"Is atom bridge between\"),zP(t.d,t),Te(t.s,t.d,1,19,3,19),t.p=UA(t.s),r=0;r<16;r++)Nt(t.p,\"\"+r);i0(t.s,t.p,2,21),i0(t.s,Ue(t.s,\" and\"),3,21),zP(t.p,t),t.o=UA(t.s),tT(t,0),i0(t.s,t.o,2,23),i0(t.s,Ue(t.s,\" atoms\"),3,23),ut(t.u,7),L$(t)}function Wa(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R,j,C,S;for(m=c(Pt,ft,6,t.R.f,16,1),v=c(Pt,ft,6,t.R.g,16,1),e=0,R=!1,(t.Q&128)!=0&&(t.Y=c(F,k,6,t.R.f,15,1),t.X=c(F,k,6,t.R.g,15,1)),n=0;n<t.R.f;n++)t.W[n]&&(t.fb[n]||ty(t,n,1)&&(t.fb[n]=!0,m[n]=!0,++e));for(r=0;r<t.R.g;r++)t.V[r]&&(t.p[r]||JQ(t,r,1)&&(t.p[r]=!0,v[r]=!0,++e));if(e==1){for(A=0;A<t.R.f;A++)if(m[A]){t.db[A]=0;break}for(P=0;P<t.R.g;P++)if(v[P]){t.o[P]=0;break}}else if(e>1)for(U_(t),t.T=0,f=new Zt(t.A);f.a<f.c.a.length;){for(i=$t(f),b=0,j=0,o=0,Q=0,L=-1,D=-1,l=0;l<i.a.length;l++)m[i.a[l]]&&(++b,(t.db[i.a[l]]==1||t.db[i.a[l]]==2)&&(++j,R=!0,L<t.f[i.a[l]]&&(L=t.f[i.a[l]],o=i.a[l])));for(h=0;h<i.b.length;h++)v[i.b[h]]&&(++b,C=t.f[z(t.R,0,i.b[h])],S=t.f[z(t.R,1,i.b[h])],s=C>S?(C<<16)+S:(S<<16)+C,(t.o[i.b[h]]==1||t.o[i.b[h]]==2)&&(++j,R=!0,D<s&&(D=s,Q=i.b[h])));if(b!=0)if(b==1){for(T=0;T<i.a.length;T++)m[i.a[T]]&&(t.db[i.a[T]]=0);for(y=0;y<i.b.length;y++)v[i.b[y]]&&(t.o[i.b[y]]=0)}else if(j==1){for(T=0;T<i.a.length;T++)m[i.a[T]]&&(t.db[i.a[T]]=3);for(y=0;y<i.b.length;y++)v[i.b[y]]&&(t.o[i.b[y]]=3)}else{if((t.Q&128)!=0){for(++t.T,T=0;T<i.a.length;T++)m[i.a[T]]&&(t.Y[i.a[T]]=t.T);for(y=0;y<i.b.length;y++)v[i.b[y]]&&(t.X[i.b[y]]=t.T)}if(g=!1,L!=-1?t.db[o]==2&&(g=!0):t.o[Q]==2&&(g=!0),g){for(T=0;T<i.a.length;T++)if(m[i.a[T]])switch(t.db[i.a[T]]){case 1:t.db[i.a[T]]=2;break;case 2:t.db[i.a[T]]=1}for(y=0;y<i.b.length;y++)if(v[i.b[y]])switch(t.o[i.b[y]]){case 1:t.o[i.b[y]]=2;break;case 2:t.o[i.b[y]]=1}}}}return R}function _a(t,e,A,n,P,r,i,f){var D,Q,o,L,s,y,l,h,T,g,m,v,b,R,j,C,S,I,x,tt,M,K,et,W,$,a,st,ht,wt,rt;for(et=N(t.j,e),L=et,s=0,y=L.length;s<y;++s)if(o=L[s],!TX(t,o))return!0;for(W=N(t.k,e),$=W.length,h=0,Q=0,rt=!1,C=0;C<$;C++)h<<=1,Q<<=1,dt(t.i,W[C])>1||l1(t.i,W[C])==8?h|=1:f&&ps(t,W[C])?(h|=1,Q|=1):(D=A[e][C],D!=-1&&(n[D]?P[D]&&(h|=1,r[D]||(Q|=1)):rt=!0));switch(R=!1,$){case 3:for(T=B(d(F,1),k,6,15,[2,1,4]),R=!0,b=0;b<3;b++)(h&T[b])==T[b]&&(X(t.i,et[b])==6&&b1(t.i,et[b])==1||X(t.i,et[b])==5&&b1(t.i,et[b])==0)&&(P[e]=!0,i[e]=b,(Q&T[b])==0&&(R=!1));break;case 5:for(g=B(d(F,1),k,6,15,[10,5,18,9,20]),R=!0,K=0;K<5;K++)if((h&g[K])==g[K])switch(X(t.i,et[K])){case 6:b1(t.i,et[K])==-1&&(P[e]=!0,i[e]=K,(Q&g[K])==0&&(R=!1));break;case 7:b1(t.i,et[K])<=0&&(P[e]=!0,i[e]=K);break;case 8:P[e]=!0,i[e]=K;break;case 16:case 34:case 52:O(t.i,et[K])==2&&(P[e]=!0,i[e]=K)}break;case 6:R=!0,(h&21)==21&&(P[e]=!0,(Q&21)==0&&(R=!1)),(h&42)==42&&(P[e]=!0,(Q&42)==0&&(R=!1));break;case 7:for(m=B(d(F,1),k,6,15,[42,21,74,37,82,41,84]),R=!0,v=0;v<7;v++)if((h&m[v])==m[v]){if(X(t.i,et[v])==6&&(b1(t.i,et[v])==1||f&&hJ(t,et[v]))||X(t.i,et[v])==5&&b1(t.i,et[v])==0)P[e]=!0,i[e]=v,(Q&m[v])==0&&(R=!1);else for(j=0;j<2;j++)if(st=(v+6+j)%7,a=W[st],ht=A[e][st],ht!=-1&&!P[ht]&&N(t.k,ht).length==5){for(wt=N(t.k,ht),S=0;wt[S]!=a;)++S;for(I=!1,M=0,x=1;x<=4;x++){if(l=wt[(S+x)%5],tt=dt(t.i,l)>1||l1(t.i,l)==8||f&&ps(t,l),tt&&I){M=0;break}I=tt,I&&++M}if(M==2){P[e]=!0,P[ht]=!0,r[e]=!0,r[ht]=!0,mt(t.b,m1(a));break}}}}return P[e]&&!R&&(r[e]=!0),P[e]?!0:!rt}function $a(t){var e,A,n,P,r,i,f,D,Q,o,L;for(ut(t,1),P=c(F,k,6,191,15,1),A=0;A<t.q;A++)switch(t.C[A]){case 171:P[1]+=5,P[6]+=3,P[7]+=1,P[8]+=1;break;case 172:P[1]+=12,P[6]+=6,P[7]+=4,P[8]+=1;break;case 173:P[1]+=6,P[6]+=4,P[7]+=2,P[8]+=2;break;case 174:P[1]+=5,P[6]+=4,P[7]+=1,P[8]+=3;break;case 175:P[1]+=5,P[6]+=3,P[7]+=1,P[8]+=1,P[16]+=1;break;case 176:P[1]+=8,P[6]+=5,P[7]+=2,P[8]+=2;break;case 177:P[1]+=7,P[6]+=5,P[7]+=1,P[8]+=3;break;case 178:P[1]+=3,P[6]+=2,P[7]+=1,P[8]+=1;break;case 179:P[1]+=7,P[6]+=6,P[7]+=3,P[8]+=1;break;case 181:case 180:P[1]+=11,P[6]+=6,P[7]+=1,P[8]+=1;break;case 182:P[1]+=12,P[6]+=6,P[7]+=2,P[8]+=1;break;case 183:P[1]+=9,P[6]+=5,P[7]+=1,P[8]+=1,P[16]+=1;break;case 184:P[1]+=9,P[6]+=9,P[7]+=1,P[8]+=1;break;case 185:P[1]+=7,P[6]+=5,P[7]+=1,P[8]+=1;break;case 186:P[1]+=5,P[6]+=3,P[7]+=1,P[8]+=2;break;case 187:P[1]+=7,P[6]+=4,P[7]+=1,P[8]+=2;break;case 188:P[1]+=10,P[6]+=11,P[7]+=2,P[8]+=1;break;case 189:P[1]+=9,P[6]+=9,P[7]+=1,P[8]+=2;break;case 190:P[1]+=9,P[6]+=5,P[7]+=1,P[8]+=1;break;case 1:switch(t.A[A]){case 0:case 1:++P[1];break;case 2:++P[151];break;case 3:++P[152]}break;default:++P[t.C[A]]}for(n=0;n<t.q;n++)t.C[n]>=171&&t.C[n]<=190?P[1]+=2-x1(t,n):P[1]+=It(t,n);for(f=0,Q=1;Q<=190;Q++)P[Q]!=0&&++f;for(this.b=c(F,k,6,f,15,1),this.c=c(F,k,6,f,15,1),f=0,D=0;D<M2.length;D++)P[M2[D]]!=0&&(this.b[f]=P[M2[D]],this.c[f]=M2[D],++f,P[M2[D]]=0);for(;;){for(L=\"zzz\",o=-1,i=1;i<=190;i++)P[i]>0&&Y9(L,(J1(),X0)[i])>0&&(L=(J1(),X0)[i],o=i);if(o==-1)break;this.b[f]=P[o],this.c[f]=o,++f,P[o]=0}for(this.a=0,this.d=0,e=0;e<t.f;e++)t.C[e]!=1&&t.A[e]!=0&&(i=t.C[e],r=t.A[e],this.a+=zF(i,r)-F4[i],this.d+=zF(i,r)-m4[i])}function aa(t,e,A,n){var P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R,j,C,S,I,x,tt,M,K,et,W,$,a,st,ht,wt,rt,ct,Kt,St,t1,Qt,bt,yt,Yt,V1,r1,D1,Lt,jt,Q0,H1,s0;for(s0=A[4],Yt=A[3]==-1?3:4,l=c(F,k,6,e.q,15,1),St=c(Pt,ft,6,e.r,16,1),g=0;g<Yt;g++)St[n[g]]=!0;for(y=tR(e,l,St,!1),h=c(F,k,6,y,15,1),Q=l,o=0,L=Q.length;o<L;++o)s=Q[o],++h[s];for(Qt=0,C=c(Pt,ft,6,y,16,1),m=0;m<Yt;m++)s=l[A[m]],C[s]||(C[s]=!0,++Qt);for(bt=c(F,k,6,Qt,15,1),yt=c(F,k,6,Qt,15,1),t1=c(F,k,6,Qt,15,1),j=0,D=0;D<y;D++)if(C[D]){for(bt[j]=D,yt[j]=h[D],v=0;v<Yt;v++)D==l[A[v]]&&++t1[j];++j}if(S=c(Pt,ft,6,e.q,16,1),r1=0,H1=2,Qt==Yt)for(Kt=-1,v=0;v<Yt-2;v++){for(Lt=-1,jt=Et,x=0;x<Qt;x++)x!=Kt&&yt[x]<jt&&(Lt=x,jt=yt[x]);for(P=0;P<e.q;P++)l[P]==bt[Lt]&&(S[P]=!0,++r1);Kt=Lt}else for(v=0;v<bt.length;v++){if(t1[v]==1&&Yt==3){for(I=2*yt[v]<e.q,I||(H1=1),P=0;P<e.q;P++)P!=s0&&l[P]==bt[v]==I&&(S[P]=!0,++r1);break}if(t1[v]==2&&Yt==4){for(I=2*yt[v]<e.q,P=0;P<e.q;P++)P!=s0&&l[P]==bt[v]==I&&(S[P]=!0,++r1);break}}if(r1==0){for(v=0;v<bt.length;v++)if(t1[v]==1){for(P=0;P<e.q;P++)l[P]==bt[v]&&(S[P]=!0,++r1);break}for(V1=Yt-2-(r1==0?0:1),b=0;b<V1;b++)for(x=0;x<Yt;x++)if(!S[A[x]]){S[A[x]]=!0,++r1;break}}for(j=0,t.a=c(F,k,6,r1,15,1),R=0;R<S.length;R++)S[R]&&(t.a[j++]=R);for(Q0=0,D1=0,t.c=c(F,k,6,H1,15,1),t.b=c(F,k,6,Yt-H1,15,1),T=0;T<Yt;T++)if(S[A[T]]){if(D1>=t.b.length){for(z1(),\"\"+new C3(e).a.a,M=A,$=0,wt=M.length;$<wt;++$);for(K=n,a=0,rt=K.length;a<rt;++a);for(et=l,st=0,ct=et.length;st<ct;++st);for(tt=C,W=0,ht=tt.length;W<ht;++W);for(r=S,i=0,f=r.length;i<f;++i);}t.b[D1++]=A[T]}else t.c[Q0++]=A[T]}function ttt(t,e){var A;switch(t.C[e]){case 7:if(e<t.f&&r0(t.p,e)){if(t.s[e]==0)if(t.e[e]-e0(t,e)+It(t,e)==0){if(e0(t,e)==2)return 18;for(A=0;A<e0(t,e);A++)if(!_e(t,t.k[e][A]))return 20;return 19}else return 22;else if(t.s[e]==1)if(t.e[e]-e0(t,e)+It(t,e)==0){for(A=0;A<e0(t,e);A++)if(!_e(t,t.k[e][A]))return b1(t,t.i[e][A])<0?21:24;return 23}else return 25}else if(t.s[e]==0)switch(t.e[e]-e0(t,e)+It(t,e)){case 0:switch(t.o[e]){case 0:return(t.p&&e<t.f?iA(t.p,e):0)==3?5:0;case 1:return 1;case 2:return 2}break;case 1:switch(t.o[e]){case 0:return(t.p&&e<t.f?iA(t.p,e):0)==3?7:6;case 1:return 8}break;case 2:return 9}else if(t.s[e]==1)switch(t.e[e]-e0(t,e)+It(t,e)){case 0:switch(t.o[e]){case 0:return 10;case 1:return iF(t,e)?3:11;case 2:return t.n[e][0]==2?iF(t,e)?4:NP.length+1:12}break;case 1:switch(t.o[e]){case 0:return 13;case 1:return 14}break;case 2:return t.o[e]==0?15:16;case 3:return 17}return NP.length+1;case 8:if(e<t.f&&r0(t.p,e)){if(t.s[e]==0)return 31}else{if(t.s[e]==0)return t.o[e]>0?28:e0(t,e)==1?29:(t.p&&e<t.f?iA(t.p,e):0)==3?27:26;if(t.s[e]==-1)return e0(t,e)==1&&b1(t,t.i[e][0])>0?28:30}return NP.length+1;case 15:if(t.s[e]==0){if(t.e[e]-e0(t,e)+It(t,e)==0){if(e0(t,e)==3&&t.o[e]==0)return 39;if(e0(t,e)==2&&t.o[e]==1)return 40;if(e0(t,e)==4&&t.o[e]==1)return 41}else if(t.e[e]-e0(t,e)+It(t,e)==1&&e0(t,e)==3&&t.o[e]==1)return 42}return NP.length+1;case 16:if(t.s[e]==0){if(e<t.f&&r0(t.p,e))return e0(t,e)==2?37:38;if(t.e[e]-e0(t,e)+It(t,e)==0){if(e0(t,e)==2&&t.o[e]==0)return 32;if(e0(t,e)==1&&t.o[e]==1)return 33;if(e0(t,e)==3&&t.o[e]==1)return 34;if(e0(t,e)==4&&t.o[e]==2)return 35}else if(t.e[e]-e0(t,e)+It(t,e)==1&&e0(t,e)==1)return 36}return NP.length+1}return NP.length}function ett(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R,j,C,S,I,x,tt,M,K,et,W,$,a,st,ht,wt,rt,ct,Kt,St,t1,Qt;for(ut(t.k,1),t.g=c(Pt,ft,6,t.k.g,16,1),t.c=0,L=0;L<t.k.g;L++)l1(t.k,L)==8&&(w0(t.k,L,1),t.g[L]=!0,++t.c);for(v=c(Pt,ft,6,t.k.f,16,1),Qt=new oU(t.k,3),m=c(Pt,ft,6,Qt.j.a.length,16,1),ct=0;ct<Qt.j.a.length;ct++){for(St=N(Qt.j,ct),m[ct]=!0,C=St,x=0,K=C.length;x<K;++x)if(R=C[x],!z0(t.k,R)){m[ct]=!1;break}if(m[ct]){for(S=St,tt=0,et=S.length;tt<et;++tt)R=S[tt],v[R]=!0;for(t1=N(Qt.k,ct),j=t1,I=0,M=j.length;I<M;++I)R=j[I],t.g[R]||(t.g[R]=!0,++t.c)}}for(s=0;s<t.k.g;s++)!t.g[s]&&(Qt.c[s]&c1)!=0&&z0(t.k,z(t.k,0,s))&&z0(t.k,z(t.k,1,s))&&m_(t,s);for(y=0;y<t.k.g;y++)t.g[y]||(r=z(t.k,0,y),i=z(t.k,1,y),!v[r]&&!v[i]&&z0(t.k,r)&&z0(t.k,i)&&(t.g[y]=!0,++t.c));for(ut(t.k,7),(t.q==2||t.q==1&&t.p)&&xX(t),g=c(Pt,ft,6,t.k.g,16,1),t.k.g>=0&&sA(t.g,0,g,0,t.k.g),Kt=0;Kt<Qt.j.a.length;Kt++)if(m[Kt]){for(St=N(Qt.j,Kt),$=St,a=0,st=$.length;a<st;++a)if(W=$[a],!IZ(t,W))for(z0(t.k,W)&&(Jn(t.k,W,!1),--t.b),R=0;R<O(t.k,W);R++)h=xt(t.k,W,R),t.g[h]&&(t.g[h]=!1,--t.c)}for(Q5(t),rt=0;rt<Qt.j.a.length;rt++)if(m[rt]&&N(Qt.k,rt).length==6){for(t1=N(Qt.k,rt),b=!0,D=t1,Q=0,o=D.length;Q<o;++Q)if(f=D[Q],!t.g[f]){b=!1;break}b&&(vQ(t,t1[0]),vQ(t,t1[2]),vQ(t,t1[4]),Q5(t))}for(wt=5;wt>=4;wt--)do for(ht=!1,f=0;f<t.k.g;f++)if(t.g[f]){for(n=0,T=0;T<2;T++)for(l=z(t.k,T,f),R=0;R<O(t.k,l);R++)t.g[xt(t.k,l,R)]&&++n;if(n==wt){vQ(t,f),Q5(t),ht=!0;break}}while(ht);for(;t.b>=2&&V_(t,g););if(e){if(t.b!=0)for(P=0;P<t.k.f;P++)z0(t.k,P)&&(Jn(t.k,P,!1),h1(t.k,P,2,!0),--t.b,A=!0);if(t.c!=0)for(f=0;f<t.k.g;f++)t.g[f]&&(t.g[f]=!1,w0(t.k,f,8),--t.c,A=!0)}else for(P=0;P<t.k.f;P++)z0(t.k,P)&&It(t.k,P)!=0&&(Jn(t.k,P,!1),Ne(t.k,P,32),--t.b);if(t.q==0||t.q==1&&!A){if(t.b!=0)throw At(new C1(Xp));if(t.c!=0)throw At(new C1(Xp))}}function l2(){l2=d1,xA=B(d(Ee,1),PA,6,15,[1,uo,N6,2.119999885559082,1.9800000190734863,1.909999966621399,1.7699999809265137,Cy,1.5,O6,1.5800000429153442,2.5,2.509999990463257,2.25,2.190000057220459,G6,1.8899999856948853,iC,1.8300000429153442,2.7300000190734863,2.619999885559082,2.5799999237060547,fC,DC,Hy,Hy,J6,uC,uC,2.380000114440918,2.390000104904175,z6,Y6,1.8799999952316284,iC,QC,2.25,3.2100000381469727,2.8399999141693115,2.75,2.5199999809265137,2.559999942779541,Hy,J6,fC,J6,2.1500000953674316,oC,UC,2.430000066757202,DC,LC,1.9900000095367432,2.0399999618530273,2.059999942779541,3.4800000190734863,3.0299999713897705,2.9800000190734863,sC,yC,2.950000047683716,yC,2.9000000953674316,lC,K6,hC,lC,TC,K6,hC,cC,2.740000009536743,2.630000114440918,oC,2.569999933242798,UC,2.4800000190734863,2.4100000858306885,Y6,z6,Hy,LC,2.5999999046325684,2.5399999618530273,2.5,2.5,2.5,2.5,2.5,cC,2.930000066757202,sC,2.7100000381469727,2.819999933242798,TC,K6,wC,3.4000000953674316,wC,2.700000047683716]),Of=B(d(Ee,1),PA,6,15,[.25,X6,.46000000834465027,gC,1.0199999809265137,Qo,.75,.7099999785423279,.6299999952316284,.6399999856948853,.9599999785423279,dC,BC,1.2599999904632568,Z6,vC,1.0299999713897705,.9900000095367432,FC,mC,kC,1.4800000190734863,W6,bC,RC,1.190000057220459,Z6,vC,1.100000023841858,uo,uo,jC,My,My,Z6,1.1399999856948853,My,pC,_6,$6,1.5399999618530273,CC,1.3799999952316284,HC,1.25,1.25,uo,BC,MC,O6,fo,fo,W6,gC,1.350000023841858,z6,mC,jy,$6,VC,1.7400000095367432,EC,SC,Vy,qC,Vy,IC,Cy,a6,1.6399999856948853,oo,xC,1.5199999809265137,O6,NC,1.309999942779541,OC,RC,1.2300000190734863,jC,1.4199999570846558,1.5,MC,1.5099999904632568,GC,CC,GC,2.2300000190734863,2.009999990463257,QC,1.75,qC,oo,kC,SC,Cy,Cy,Vy,Vy,a6,IC,EC,VC,1.6100000143051147,JC,1.4900000095367432,N6,1.409999966621399,bC,OC,HC,My,NC,W6,N6,xC,1.75,a6,JC])}function Att(t,e,A){var n,P,r,i,f,D,Q,o;switch(f=A.a.length,0<f?A.a=oA(A.a,0,0):0>f&&(A.a+=S8(c(lr,te,6,-f,15,1))),D=y0(t.k,e),P=Jt(q0(V(D,ir),3)),P){case 20971520:A.a+=\"+0\";break;case 25165824:b1(t.k,e)==0&&(A.a+=\"-\");break;case 12582912:b1(t.k,e)==0&&(A.a+=\"+\")}return n=V(D,ly),G(n,2)==0?A.a+=\";a\":G(n,4)==0&&(A.a+=\";A\"),r=V(D,PP),G(r,0)!=0&&(G(r,1792)==0?A.a+=\";H0\":G(r,1664)==0?A.a+=\";H1\":G(r,1408)==0?A.a+=\";H2\":G(r,896)==0?A.a+=\";H3\":G(r,128)==0?A.a+=\";!H0\":G(r,384)==0?A.a+=\";!H0;!H1\":G(r,1536)==0?A.a+=\";!H2;!H3\":G(r,re)==0&&(A.a+=\";!H3\")),o=V(D,120),G(o,8)==0?A.a+=\";!R0\":G(o,16)==0?A.a+=\";!R1\":G(o,32)==0?A.a+=\";!R2\":G(o,64)==0?A.a+=\";!R3\":G(o,112)==0?A.a+=\";R0\":G(o,104)==0?A.a+=\";R1\":G(o,88)==0?A.a+=\";R2\":G(o,56)==0&&(A.a+=\";R3\"),Q=V(D,r9),G(Q,s8)==0?A.a+=\";!r\"+he(Q):G(Q,Vp)==0?A.a+=\";r\"+he(Q):G(Q,0)!=0&&(gt(V(Q,Rf),0)?(t0(V(Q,s8),0)&&(A.a+=\";!r0\"+he(Q)),t0(V(Q,i9),0)&&(A.a+=\";!r3\"+he(Q)),t0(V(Q,f9),0)&&(A.a+=\";!r4\"+he(Q)),t0(V(Q,D9),0)&&(A.a+=\";!r5\"+he(Q)),t0(V(Q,u9),0)&&(A.a+=\";!r6\"+he(Q)),t0(V(Q,Q9),0)&&(A.a+=\";!r7\"+he(Q))):(A.a+=\";\",gt(V(Q,s8),0)&&(A.a+=\"r0,\"+he(Q)),gt(V(Q,i9),0)&&(A.a+=\"r3,\"+he(Q)),gt(V(Q,f9),0)&&(A.a+=\"r4,\"+he(Q)),gt(V(Q,D9),0)&&(A.a+=\"r5,\"+he(Q)),gt(V(Q,u9),0)&&(A.a+=\"r6,\"+he(Q)),gt(V(Q,Q9),0)&&(A.a+=\"r7,\"+he(Q)),Qn(A,A.a.length-1))),G(Q,0)==0&&(Q=q0(V(D,fr),22),G(Q,0)!=0&&(A.a+=\";r\"+he(Q))),i=V(D,oi),G(i,_Q)==0&&(A.a+=\";D1\"),G(i,c2)==0&&(A.a+=\";D2\"),G(i,w2)==0&&(A.a+=\";D3\"),G(i,$Q)==0&&(A.a+=\";!D3;!D4\"),G(i,IA)==0&&(A.a+=\";!D4\"),G(i,Ui)==0&&(A.a+=\";!D0;!D1\"),G(i,qP)==0&&(A.a+=\";!D0;!D1;!D2\"),G(i,Cf)==0&&(A.a+=\";!D0;!D1;!D2;!D3\"),gt(V(D,N1),0)&&J(A,\";D\"+O(t.k,e)),gt(V(D,C0),0)&&J(A,\";!D\"+O(t.k,e)),A.a.length==0?null:A.a}function ntt(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R,j,C;if(t.C[e]!=7||t.s[e]!=0||t.j[e]+t.o[e]>3)return!1;if(e<t.f&&r0(t.p,e)){if(t.o[e]!=1||V5(t,e,7)!=1)return!1;for(b=(ut(t,7),t.p),m=0;m<b.j.a.length;m++)if(yA(b,m,e)){if(N(b.k,m).length==5||N(b.k,m).length==6){for(R=N(b.j,m),T=-1,D=0;D<R.length;D++)if(R[D]==e){T=D;break}for(P=0,g=null,h=null,R.length==5&&(g=c(F,k,6,2,15,1),g[0]=R[T-1<0?T+4:T-1],g[1]=R[T-4<0?T+1:T-4],h=c(F,k,6,2,15,1),h[0]=R[T-2<0?T+3:T-2],h[1]=R[T-3<0?T+2:T-3]),R.length==6&&(g=c(F,k,6,3,15,1),g[0]=R[T-1<0?T+5:T-1],g[1]=R[T-3<0?T+3:T-3],g[2]=R[T-5<0?T+1:T-5],h=c(F,k,6,2,15,1),h[0]=R[T-2<0?T+4:T-2],h[1]=R[T-4<0?T+2:T-4]),Q=0;Q<R.length;Q++)e!=R[Q]&&t.C[R[Q]]==7&&t.o[R[Q]]==1&&--P;for(o=0;o<g.length;o++){for(r=-1,i=-1,l=0;l<t.j[g[o]];l++)if(!_e(t,t.k[g[o]][l])){r=t.i[g[o]][l],i=t.k[g[o]][l];break}if(r!=-1){if(t.C[r]==7&&t.o[r]==0&&t.j[r]+t.o[r]<=3&&!t5(t,r,!1)){++P;continue}if(t.C[r]==8&&t.j[r]==1){P+=2;continue}if(i<t.g&&Re(t.p,i)){for(j=0;j<b.j.a.length;j++)if(b.e[j]&&yA(b,j,r)){for(v=N(b.j,j),y=0;y<v.length;y++)if(t.C[v[y]]==7&&t.o[v[y]]==1){--P;break}break}}}}for(L=0;L<h.length;L++){for(r=-1,y=0;y<t.j[h[L]];y++)_e(t,t.k[h[L]][y])||(r=t.i[h[L]][y]);t.C[h[L]]==6?r!=-1&&rf(t,r)!=0&&--P:t.C[h[L]]==7&&t.o[h[L]]==0&&(r==-1||!(r<t.f&&r0(t.p,r))&&rf(t,r)==0)&&++P}return P>0}break}return!1}if(t.o[e]>1)return!1;if(t.o[e]==1){for(s=-1,C=0,D=0;D<t.j[e];D++){if(n=t.i[e][D],t.n[e][D]==2){if(t.C[n]!=6)return!1;s=n;continue}if(t.C[n]==8)return!1;if(t.C[n]==7){--C,t5(t,n,!1)&&--C;continue}n<t.f&&r0(t.p,n)&&--C}if(s==-1)return!1;for(A=0,Q=0;Q<t.j[s];Q++)if(t.n[s][Q]==1){if(n=t.i[s][Q],rf(t,n)!=0)return!1;n<t.f&&r0(t.p,n)&&++A,t.C[n]==7&&!t5(t,n,!0)&&++C,(t.C[n]==8||t.C[n]==16)&&--C}return A==2&&--C,C>=0}for(f=0;f<t.j[e];f++)if(n=t.i[e][f],n<t.f&&r0(t.p,n)||t.C[n]!=6||rf(t,n)!=0||t.o[n]!=0&&nY(t,n))return!1;return!0}function e6(t,e,A,n){var P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R,j,C,S,I,x,tt,M,K,et,W,$,a,st;if(X(t.R,A)!=X(t.R,n))return X(t.R,A)>X(t.R,n);if(ye(t.R,A)!=ye(t.R,n))return K=fu(t.R,A)?(J1(),or)[X(t.R,A)]:ye(t.R,A),et=fu(t.R,n)?(J1(),or)[X(t.R,n)]:ye(t.R,n),K>et;for(j=t.R.f,m=c(F,k,6,j,15,1),b=c(F,k,6,j,15,1),R=c(F,k,6,j,15,1),v=c(Pt,ft,6,j,16,1),D=c(Pt,ft,6,t.R.q,16,1),m[0]=e,m[1]=A,m[2]=n,b[0]=-1,b[1]=0,b[2]=0,D[e]=!0,D[A]=!0,D[n]=!0,s=1,C=2,M=c(F,k,6,64,15,1),M[1]=1,M[2]=3,l=2;s<=C;){for(;s<M[l];){if(y=m[s],!v[s]){for(h=0,T=0,I=0;I<O(t.R,y);I++){if(o=_(t.R,y,I),C+CA(t.R,y,I)+1>=j&&(j+=t.R.f,m=FL(m,j),b=FL(b,j),R=FL(R,j),v=(st=c(Pt,ft,6,j,16,1),sA(v,0,st,0,v.length),st)),O8(t.R,xt(t.R,y,I)))++h,T+=X(t.R,o);else if(o!=e)for(tt=1;tt<CA(t.R,y,I);tt++)++C,m[C]=o,b[C]=s,v[C]=!0;if($=b[s],o!=m[$]){if(f=!1,D[o])for(W=b[$];W!=-1;){if(o==m[W]){f=!0;break}W=b[W]}f?(++C,m[C]=o,b[C]=s,v[C]=!0):(++C,m[C]=o,b[C]=s,D[o]=!0)}}h!=0&&(++C,R[C]=(T<<2)/h|0,b[C]=s,v[C]=!0)}if(++s,s==AP)throw At(new C1(\"Emergency break in while loop.\"))}for(M.length==l+1&&(M=FL(M,M.length+64)),M[l+1]=C+1,S=M[l];S<M[l+1];S++)R[S]==0&&(R[S]=(X(t.R,m[S])==151||X(t.R,m[S])==152?1:X(t.R,m[S]))<<2),R[S]+=R[b[S]]<<16;if(zR(t,v,R,b,m,M,l),R[1]!=R[2])return R[1]>R[2];l>1&&QR(R,b,M,l),++l}for(L=c(F,k,6,t.R.f,15,1),x=!1,r=0;r<t.R.f;r++)if(D[r]&&!fu(t.R,r)){x=!0;break}if(x){for(i=0;i<t.R.f;i++)L[i]=fu(t.R,i)?(J1(),or)[X(t.R,i)]:ye(t.R,i);if(MT(t,v,R,b,m,L,M,l))return R[1]>R[2]}for(Vr(L,L.length,0),g=!1,Q=0;Q<t.R.g;Q++)(D[z(t.R,0,Q)]||D[z(t.R,1,Q)])&&(t.i[Q]==1?(L[z(t.R,0,Q)]=1,L[z(t.R,1,Q)]=1,g=!0):t.i[Q]==2&&(L[z(t.R,0,Q)]=2,L[z(t.R,1,Q)]=2,g=!0));if(g&&MT(t,v,R,b,m,L,M,l))return R[1]>R[2];for(Vr(L,L.length,0),a=!1,P=0;P<t.R.f;P++)D[P]&&(t.$[P]==2?(L[P]=1,a=!0):t.$[P]==1&&(L[P]=2,a=!0));if(a&&MT(t,v,R,b,m,L,M,l))return R[1]>R[2];throw t.d=!0,At(new C1(\"no distinction applying CIP rules\"))}function A6(){A6=d1,Kf=B(d(F,2),f0,7,0,[B(d(F,1),k,6,15,[-1432180054,-1434146134,-1441453406,-1471067516,-1589095916,-2060839854,1420461386,1454022954,1454024874]),B(d(F,1),k,6,15,[-1431677611,-1431764987,-1432092655,-1433403327,-1438646015,-1459616762,-1543499750,-1879031702,1431634346,1073809066,1073814186,1073834666,1431677610]),B(d(F,1),k,6,15,[-1431737686,-1453057622,-1542187926,-1542188954,-1459351471,-1459351487,D4,1094713345,1077936134,-1879048186,-1543503866,-1543503846,-1459617766,u4,R2,R2]),B(d(F,1),k,6,15,[-1431737686,-1453057622,-1542187926,-1542188954,-1459351471,-1459351487,D4,1094713345,1077952518,-1879031802,-1543154682,-1543487462,-1459601382,u4,R2,R2]),B(d(F,1),k,6,15,[Wy,Wy,-1431741782,-1437330070,-1459351462,-1459351482,D4,-1858076671,-1874853882,-1879048186,-1543503866,-1543503846,-1459617766,u4,R2,R2]),B(d(F,1),k,6,15,[Wy,-1432005270,-1454374890,-1543503871,-1879048191,1073741825,1073741846,1073743210,-1795073366,1079421610,1147841194,-1783977302,_y,_y,-1498764630]),B(d(F,1),k,6,15,[Wy,-1432005270,-1454374890,-1543438335,-1878982655,1075138561,1073807382,1073808746,-1795073366,1079421610,1147841194,-1783977302,_y,_y,-1498764630]),B(d(F,1),k,6,15,[1431655786,ur,If,ur,If,ur,If,ur,If,ur,If,ur,1145324650]),B(d(F,1),k,6,15,[1431655786,ur,If,ur,If,ur,1073758314,1073758250,1074091114,1073758250,1073758314,ur,1145324650]),B(d(F,1),k,6,15,[-1432003926,-1437248086,1767548266,1437248090,1437248086,1433053846,1433037477,-1431672155,-1432004955,1433037477,1433037462,1437248086,1437248090,1767548266,-1437248086,-1432003926]),null]),AE=B(d(F,1),k,6,15,[1,7,7,5,8,7,8,7,8,7,2,14,2,14,0,0,0,0,8,8,0,0]),nE=B(d(F,1),k,6,15,[4,20,10,29,18,18,18,18,18,18,16,11,16,11,4,5,4,5,16,16,16,16,0,0,0,0,12,2]),PE=B(d(it,1),Dt,2,6,[\"chain.png\",\"eraser.png\",\"hand.png\",\"handPlus.png\",\"fist.png\",\"lasso.png\",\"lassoPlus.png\",\"rect.png\",\"rectPlus.png\",\"zoom.png\",\"invisible.png\",null,null,\"pointingHand.png\"])}function Ptt(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v;if(L=!1,t.R.K){for(Q=0;Q<t.R.g;Q++)if(Ae(t.R,Q)!=0){L=!0;break}}for(t.O=2,A=0;A<t.R.f;A++)t.O=w.Math.max(t.O,O(t.R,A)+Si(t.R,A));for(D=w.Math.max(2,L?(62+t.c+t.O*(t.c+23))/63|0:(62+t.c+t.O*(t.c+5))/63|0),t.f=c(F,k,6,t.R.q,15,1),t.e=c(d4,v2,100,t.R.f,0,1),n=0;n<t.R.f;n++)t.e[n]=new bU(D);for(f=!1,P=0;P<t.R.f;P++)$e(t.e[P],P),gt(V(y0(t.R,P),1),0)||MA(t.R,P)!=null?W1(t.e[P],8,6):W1(t.e[P],8,X(t.R,P)),W1(t.e[P],8,ye(t.R,P)),W1(t.e[P],2,$1(t.R,P)),W1(t.e[P],4,O(t.R,P)+Si(t.R,P)),gt(V(y0(t.R,P),1),0)?W1(t.e[P],4,8):W1(t.e[P],4,8+b1(t.R,P)),W1(t.e[P],5,w.Math.min(31,Hr(t.R,P))),W1(t.e[P],4,jX(t,P)+1),W1(t.e[P],2,mA(t.R,P)>>4),t.R.K&&(W1(t.e[P],51,y0(t.R,P)),MA(t.R,P)!=null&&(f=!0));if(t.U=Zn(t),t.U<t.R.f){for(e=0;e<t.R.f;e++){for($e(t.e[e],e),W1(t.e[e],t.c,t.f[e]),s=c(F,k,6,O(t.R,e),15,1),l=0;l<O(t.R,e);l++)s[l]=t.f[_(t.R,e,l)]<<5,s[l]|=w.Math.min(31,C9(t.R,xt(t.R,e,l)));for(s.sort(Fe(D0.prototype.hd,D0,[])),h=t.O;h>s.length;h--)W1(t.e[e],t.c+5,0);for(y=s.length-1;y>=0;y--)W1(t.e[e],t.c+5,s[y])}t.U=Zn(t)}if(f&&t.U<t.R.f){for(e=0;e<t.R.f;e++){for($e(t.e[e],e),W1(t.e[e],t.c,t.f[e]),i=MA(t.R,e),m=i==null?0:w.Math.min(12,i.length),l=12;l>m;l--)W1(t.e[e],8,0);for(y=m-1;y>=0;y--)W1(t.e[e],8,i[y])}t.U=Zn(t)}if(L&&t.U<t.R.f){for(e=0;e<t.R.f;e++){for($e(t.e[e],e),W1(t.e[e],t.c,t.f[e]),o=c(OA,te,6,O(t.R,e)+Si(t.R,e),14,1),T=0,l=0;l<De(t.R,e);l++)(l<O(t.R,e)||l>=Ht(t.R,e))&&(o[T]=t.f[_(t.R,e,l)],o[T]=j1(o[T],23),o[T]=Y(o[T],Ae(t.R,xt(t.R,e,l))),++T);for(o.sort(Fe(xl.prototype.jd,xl,[])),h=t.O;h>o.length;h--)W1(t.e[e],t.c+23,0);for(y=o.length-1;y>=0;y--)W1(t.e[e],t.c+23,o[y])}t.U=Zn(t)}if((t.Q&8)!=0&&t.U<t.R.f){for(g=new eu,r=0;r<t.R.f;r++)Wn(t.R,r)!=null&&js(g,Wn(t.R,r));for(e=0;e<t.R.f;e++)v=Wn(t.R,e)==null?0:1+_T(g,Wn(t.R,e)),$e(t.e[e],e),W1(t.e[e],t.c,t.f[e]),W1(t.e[e],t.c,v);t.U=Zn(t)}if((t.Q&16)!=0&&t.U<t.R.f){for(e=0;e<t.R.f;e++)$e(t.e[e],e),W1(t.e[e],t.c,t.f[e]),W1(t.e[e],1,P0(t.R,e)?1:0);t.U=Zn(t)}(t.Q&512)!=0&&t.R.K&&aX(t)}function rtt(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m;if(e.j==1){if(t.t!=-1&&t.i.a.length!=0&&$s(t,t.i.a),Qn(t.i,0),e.e){NR(t);return}if(e.b==1){if(e.c==2)return;t.W=!0,Ar(t),ctt(t,e)}}if(e.j==2){if(e.e){NR(t);return}e.b==1&&(t.W=!1,Ar(t),za(t))}if(e.j==3&&e.b==1&&e.c==2){Va(t,e.g,e.i);return}if(e.j==4&&(Md(t._),Ar(t)),e.j==6&&(t.W=!1,g=e.g,m=e.i,ep(t,g,m,!1)&&e1(t.k),Ar(t)),e.j==7){switch(t.W=!0,t.ib=e.g,t.lb=e.i,s=ep(t,t.ib,t.lb,!0),t.X){case 2:Ya(t)&&(s=!0);break;case 1:(t.ib-t.hb)*(t.ib-t.hb)+(t.lb-t.kb)*(t.lb-t.kb)<100&&J5(t,t.e),s=!0;break;case 3:Be(t.V,t.e,t.gb[t.e]+t.ib-t.hb),Ie(t.V,t.e,t.jb[t.e]+t.lb-t.kb),t.f!=-1&&(Be(t.V,t.f,t.gb[t.f]+t.ib-t.hb),Ie(t.V,t.f,t.jb[t.f]+t.lb-t.kb)),t.eb=w.Math.max(t.eb,2),e1(t.k);break;case 9:I_(t),t.X=4;case 4:if(t.I)for(r=new Zt(t.I);r.a<r.c.a.length;)P=$t(r),P.g&&P.Ob(t.ib,t.lb);for(f=0;f<t.V.q;f++)P0(t.V,f)&&(Be(t.V,f,t.gb[f]+t.ib-t.hb),Ie(t.V,f,t.jb[f]+t.lb-t.kb));t.eb=w.Math.max(t.eb,2),e1(t.k);break;case 11:mt(t.I,t.v.Gb()),t.X=10;case 10:t.v.Ob(t.ib,t.lb),t.eb=w.Math.max(t.eb,2),e1(t.k);break;case 7:for(y=!1,n=0;n<t.V.q&&!y;n++)y=P0(t.V,n);if(l=!1,t.I)for(D=0;D<t.I.a.length&&!l;D++)l=N(t.I,D).g;if(o=w.Math.abs(t.lb-t.kb)<20?1:w.Math.exp((t.lb-t.kb)/100),A=w.Math.abs(t.ib-t.hb)<20?0:(t.ib-t.hb)/50,h=y||l,t.I&&(!h||l)){for(D=0;D<t.I.a.length;D++)(!h||N(t.I,D).g)&&N(t.I,D).Pb(o,A);t.eb=w.Math.max(t.eb,2),e1(t.k)}(!h||y)&&(Hk(t.V,o,A,h),t.eb=w.Math.max(t.eb,2),e1(t.k));break;case 5:case 6:if(T=null,t.X==5){if(w.Math.abs(t.ib-L7(t.R,t.R.a-1))<3&&w.Math.abs(t.lb-s7(t.R,t.R.a-1))<3)break;uq(t.R),Ce(t.R,t.ib,t.lb),Ce(t.R,t.hb,t.kb),T=t.R}else T=new QA(w.Math.min(t.hb,t.ib),w.Math.min(t.kb,t.lb),w.Math.abs(t.ib-t.hb),w.Math.abs(t.lb-t.kb));if(t.I)for(D=0;D<t.I.a.length;D++)L=N(t.I,D),Q=NJ(L,T),(!t.O||!t.Q[D])&&Q!=L.g&&(L.g=Q,t.eb=w.Math.max(t.eb,1));for(i=0;i<t.V.q;i++)Q=T.Hb(vt(kt(t.V,i)),vt(pt(t.V,i))),(!t.O||!t.P[i])&&Q!=P0(t.V,i)&&(dP(t.V,i,Q),t.eb=w.Math.max(t.eb,1));s=!0;break;case 8:s=!0}s&&e1(t.k)}}function itt(t,e,A,n){var P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R,j,C,S,I;if(o=B(d(Ut,2),T0,15,0,[B(d(Ut,1),Tt,6,15,[20]),null,null,B(d(Ut,1),Tt,6,15,[0,10]),null,null,B(d(Ut,1),Tt,6,15,[-4,12]),B(d(Ut,1),Tt,6,15,[0,0,-7.5]),null,null,null,null,B(d(Ut,1),Tt,6,15,[8.571428571428571,-8.571428571428571]),null,null,null,B(d(Ut,1),Tt,6,15,[-2.4])]),L=B(d(F,2),f0,7,0,[B(d(F,1),k,6,15,[146]),B(d(F,1),k,6,15,[627]),null,B(d(F,1),k,6,15,[2457,1170]),null,B(d(F,1),k,6,15,[2451,8643,2519]),B(d(F,1),k,6,15,[9362,14798]),B(d(F,1),k,6,15,[34377,-2147448999,26214]),null,B(d(F,1),k,6,15,[37449,137313,95703,34371,37815,54891,132867,-2147309741,54857,55129,-2147449005,-2147449065]),null,B(d(F,1),k,6,15,[530697,531819,899169,137289,694617,-2146951863,-2146952797,-2146939175,-2146929547,-2146929564,-2146625111,-2146931799,-2146940503,-2146931935]),B(d(F,1),k,6,15,[1007293,610915]),B(d(F,1),k,6,15,[542985,137283,2122017,530691,2206773,-2144711351,219209,2840841,137555,-2146871031,-2147264167,613705,-2145360543,-2146625271,694611,2454837,-2145356703,-2147345133,-2146928951,-2146931805,-2144641719,-2146951869,-2146625237,-2146624183,2841963,1074905,-2146625117,2799955,-2144723645,138583,859225,-2145264843,-2145216253,-2146624149,-2144700727,-2146928917,-2143905527,-2144045771,-2146789097,2288547,544407,2104323,-2146911977,-2144479405,3633737,-2146870089,-2146952169]),null,B(d(F,1),k,6,15,[8487297,2172633,2116611,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8829813]),B(d(F,1),k,6,15,[14071213])]),m=1<<e.e.length,i=0,D=0,e.e.length>7)for(y=0;y<e.e.length;y++)f=xZ(t,A,n,y),f==1?i+=m:f==2&&(D+=m),i>>>=1,D>>>=1;if(R=e.e.length-9,e.e.length>=9&&e.e.length<=25&&L[R]!=null)for(I=0;I<L[R].length;I++)for(g=(P1&L[R][I])==0,Q=Et&L[R][I],h=!1;!h;h=!h){if(h){if(g)break;for(v=0,P=1;P!=m;P<<=1)v<<=1,(Q&P)!=0&&(v|=1);Q=v}for(j=0;j<e.e.length;j++){if((Q&i)==0&&(~Q&D)==0){for(r=0,s=YC*(o[R]==null?0:o[R][I]),b=0,C=Q,T=!0,l=0;l<e.e.length;l++)T&&++b,(C&1)==0&&(T=!T),C>>>=1;for(S=b>(e.e.length/2|0),y=1;y<e.e.length;y++)e.a[y]=e.a[y-1]+w.Math.sin(r),e.b[y]=e.b[y-1]+w.Math.cos(r),(Q&1)==0&&(S=!S),r+=s+(S?AA:Uo),Q>>>=1;return}(Q&1)!=0&&(Q|=m),Q>>>=1}}da(e,i,D)}function ftt(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R,j,C,S,I,x,tt,M,K,et,W;for(h=0,T=(f=Pe(e,h),f==-1?e.length:f),n=Q1((Ct(h,T,e.length),e.substr(h,T-h)),P1,Et),h=lA(e,T),T=(D=Pe(e,h),D==-1?e.length:D),v=(Ct(h,T,e.length),e.substr(h,T-h)),tt=null,P=!1,m=rW(e),m!=0&&(tt=yW(e),m<0&&(P=!0),T=w.Math.abs(m)),h=lA(e,T),T=(Q=Pe(e,h),Q==-1?e.length:Q),K=on((Ct(h,T,e.length),e.substr(h,T-h))),h=lA(e,T),T=(o=Pe(e,h),o==-1?e.length:o),et=on((Ct(h,T,e.length),e.substr(h,T-h))),h=lA(e,T),T=(L=Pe(e,h),L==-1?e.length:L),W=on((Ct(h,T,e.length),e.substr(h,T-h))),h=lA(e,T),T=(s=Pe(e,h),s==-1?e.length:s),R=Q1((Ct(h,T,e.length),e.substr(h,T-h)),P1,Et),A=W0(t.j,K,-et,-W),A+1!=n&&(!t.b&&(t.b=new lP),ze(t.b,m1(n),m1(A))),tt!=null&&(K0(t.j,A,6),yf(t.j,A,tt,P)),R!=0&&We(t.j,A,R,!1),at(v,\"A\")||at(v,\"*\")?h1(t.j,A,1,!0):at(v,\"Q\")?(b=c(F,k,6,1,15,1),b[0]=6,yf(t.j,A,b,!0)):K0(t.j,A,qA(v,67));(h=lA(e,T))!=-1;)if(T=(i=Pe(e,h),i==-1?e.length:i),I=(Ct(h,T,e.length),e.substr(h,T-h)),l=I.indexOf(k0(61)),y=(Ct(0,l,I.length),I.substr(0,l)),at(y,\"CHG\"))M=Q1((Gt(l+1,I.length+1),I.substr(l+1)),P1,Et),E0(t.j,A,M);else if(at(y,\"RAD\"))switch(M=Q1((Gt(l+1,I.length+1),I.substr(l+1)),P1,Et),M){case 1:Ne(t.j,A,16);break;case 2:Ne(t.j,A,32);break;case 3:Ne(t.j,A,48)}else if(!at(y,\"CFG\"))if(at(y,\"MASS\"))M=Q1((Gt(l+1,I.length+1),I.substr(l+1)),P1,Et),R9(t.j,A,M);else if(at(y,\"VAL\"))M=Q1((Gt(l+1,I.length+1),I.substr(l+1)),P1,Et),XA(t.j,A,M==-1?0:M==0?-1:M);else if(at(y,\"HCOUNT\"))switch(M=Q1((Gt(l+1,I.length+1),I.substr(l+1)),P1,Et),M){case 0:break;case-1:h1(t.j,A,1792,!0);break;case 1:h1(t.j,A,128,!0);break;case 2:h1(t.j,A,384,!0);break;default:h1(t.j,A,896,!0)}else if(at(y,\"SUBST\")){if(M=Q1((Gt(l+1,I.length+1),I.substr(l+1)),P1,Et),M==-1)h1(t.j,A,N1,!0);else if(M>0){for(x=0,r=0;r<t.j.r;r++)(z(t.j,0,r)==A||z(t.j,1,r)==A)&&++x;M>x&&h1(t.j,A,C0,!0)}}else if(at(y,\"RBCNT\"))switch(M=Q1((Gt(l+1,I.length+1),I.substr(l+1)),P1,Et),M){case 3:case-1:h1(t.j,A,112,!0);break;case 1:h1(t.j,A,8,!0);break;case 2:h1(t.j,A,104,!0);break;case 4:h1(t.j,A,56,!0)}else at(y,\"RGROUPS\")&&(C=rz(),j=(g=FI(C.a,e),new Yw(g)),OJ(j)&&(S=\"R\"+(j.b.a[2]||null),EP(t.j,A,S)))}function Dtt(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T;for(o=y0(t.A,t.a),gt(V(o,1),0)?(uA(t.b,!0),JU(t.w,A4)):JU(t.w,lV),N8(t.D,MA(t.A,t.a)==null?\"\":zT(t.A,t.a)),e=V(o,ly),gt(V(e,ZQ),0)?Wt(t.g,2):G(e,2)==0?Wt(t.g,1):G(e,4)==0?Wt(t.g,3):Wt(t.g,0),y=V(o,120),G(y,112)==0?Wt(t.s,1):G(y,96)==0?Wt(t.s,2):G(y,8)==0?Wt(t.s,3):G(y,104)==0?Wt(t.s,4):G(y,88)==0?Wt(t.s,5):G(y,56)==0?Wt(t.s,6):Wt(t.s,0),h=Jt(q0(V(o,fr),22)),Wt(t.t,h==0?0:h-2),s=V(o,r9),f=-1,i=0;i<li.length;i++)if(t0(s,li[i])){f=i;break}f!=-1?Wt(t.r,f):(n=new Fn(\"Custom:\"),gt(V(s,s8),0)&&(n.a+=\" 0\"),gt(V(s,i9),0)&&(n.a+=\" 3\"),gt(V(s,f9),0)&&(n.a+=\" 4\"),gt(V(s,D9),0)&&(n.a+=\" 5\"),gt(V(s,u9),0)&&(n.a+=\" 6\"),gt(V(s,Q9),0)&&(n.a+=\" 7\"),gt(V(s,Rf),0)&&(n.a+=\" >=8\"),t.C=s,Nt(t.r,n.a),Wt(t.r,li.length)),D=V(o,oi),G(D,_Q)==0?Wt(t.n,1):G(D,c2)==0?Wt(t.n,2):G(D,w2)==0?Wt(t.n,3):G(D,$Q)==0?Wt(t.n,4):G(D,IA)==0?Wt(t.n,5):G(D,I0)==0?Wt(t.n,6):G(D,Ui)==0?Wt(t.n,7):G(D,qP)==0?Wt(t.n,8):G(D,Cf)==0?Wt(t.n,9):G(D,3276800)==0?Wt(t.n,10):G(D,2228224)==0?Wt(t.n,11):G(D,2490368)==0?Wt(t.n,12):Wt(t.n,0),P=V(o,Hf),G(P,Dy)==0?Wt(t.j,1):G(P,uy)==0?Wt(t.j,2):G(P,Qy)==0?Wt(t.j,3):G(P,oy)==0?Wt(t.j,4):G(P,l6)==0?Wt(t.j,5):G(P,h6)==0?Wt(t.j,6):G(P,aQ)==0?Wt(t.j,7):G(P,g2)==0?Wt(t.j,8):G(P,Uy)==0?Wt(t.j,9):G(P,Ly)==0?Wt(t.j,10):G(P,to)==0?Wt(t.j,11):G(P,T6)==0?Wt(t.j,12):G(P,c6)==0?Wt(t.j,13):G(P,w6)==0?Wt(t.j,14):Wt(t.j,0),A=V(o,ir),G(A,WQ)==0?Wt(t.i,1):G(A,pf)==0?Wt(t.i,2):G(A,jf)==0?Wt(t.i,3):Wt(t.i,0),r=V(o,PP),G(r,1792)==0?Wt(t.k,1):G(r,1664)==0?Wt(t.k,2):G(r,1408)==0?Wt(t.k,3):G(r,128)==0?Wt(t.k,4):G(r,384)==0?Wt(t.k,5):G(r,896)==0?Wt(t.k,6):G(r,1536)==0?Wt(t.k,7):G(r,re)==0?Wt(t.k,8):G(r,1152)==0?Wt(t.k,9):Wt(t.k,0),Q=V(o,Qi),G(Q,98304)==0?Wt(t.p,1):G(Q,81920)==0?Wt(t.p,2):G(Q,49152)==0?Wt(t.p,3):G(Q,Sn)==0?Wt(t.p,4):Wt(t.p,0),L=q0(V(o,d2),47),Wt(t.o,Jt(L)),gt(V(o,N1),0)&&uA(t.c,!0),gt(V(o,C0),0)&&uA(t.f,!0),T=V(o,F6),t0(T,KQ)?Wt(t.u,1):t0(T,XQ)?Wt(t.u,2):Wt(t.u,0),gt(V(o,ge),0)&&uA(t.e,!0),gt(V(o,a0),0)&&uA(t.d,!0),t.q&&(l=V(o,w8),G(l,wn)==0?Wt(t.q,1):G(l,lo)==0?Wt(t.q,2):G(l,w8)==0?Wt(t.q,3):Wt(t.q,0))}function Tp(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R;if(v=new s1,A=new s1,i=new s1,T=new cr,h=new cr,P=z(t.L,0,e),r=z(t.L,1,e),t.zb(e,X1(t.R,kt(t.L,P)),K1(t.R,pt(t.L,P)),X1(t.R,kt(t.L,r)),K1(t.R,pt(t.L,r))),!P0(t.L,P)&&!P0(t.L,r)&&gt(V(Y(y0(t.L,P),y0(t.L,r)),a0),0)&&Z1(t,-8),t.o[P]?(v.a=t.o[P].a,v.c=t.o[P].b):(v.a=X1(t.R,kt(t.L,P)),v.c=K1(t.R,pt(t.L,P))),t.o[r]?(v.b=t.o[r].a,v.d=t.o[r].b):(v.b=X1(t.R,kt(t.L,r)),v.d=K1(t.R,pt(t.L,r))),(Ae(t.L,e)&l8)!=0){cA(t,v)&&t.rb(v),Z1(t,-9);return}switch(f=l1(t.L,e)==8?0:l1(t.L,e)==16?1:dt(t.L,e),f){case 1:if(D=l1(t.L,e),(t.G&128)!=0&&(D==257||D==129)&&(m=z(t.L,0,e),y=ne(t.L,m),y!=0)){for(s=EA(t.L,m),L=0,n=0;n<t.L.f;n++)ne(t.L,n)==y&&EA(t.L,n)==s&&++L;L==1&&(D=1)}switch(D){case 1:cA(t,v)&&Mn(t,v,P,r);break;case 257:k5(t,v,P,r);break;case 129:for(b=v.b-v.a,R=v.d-v.c,F9(t.L,u1(t.L,P,r))?(Q=-3,o=-3):(Q=t.p[P],o=KT(t,P),Q==Qu(t.L,P)&&(Q=o)),l=2;l<17;l+=2)A.a=v.a+l*b/17-l*R/128,A.c=v.c+l*R/17+l*b/128,A.b=v.a+l*b/17+l*R/128,A.d=v.c+l*R/17-l*b/128,cA(t,A)&&(Z1(t,l<9?Q:o),t.qb(A),Z1(t,t.Q));break;case 16:cA(t,v)&&tW(t,v,P,r)}break;case 0:case 2:if((t.s[P]||$1(t.L,P)==2)&&(t.s[r]||$1(t.L,r)==2)&&!fA(t.L,e)&&f==2){if(!cA(t,v))break;Df(t,v.b-v.a,v.d-v.c,T),b=T.a/2,R=T.b/2,A.a=v.a+b,A.c=v.c+R,A.b=v.b+b,A.d=v.d+R,i.a=v.a-b,i.c=v.c-R,i.b=v.b-b,i.d=v.d-R,l1(t.L,e)==386&&iL(A,i),Mn(t,A,P,r),f==2?Mn(t,i,P,r):VQ(t,i,P,r)}else(t.s[r]||$1(t.L,r)==2)&&f==2?Up(t,v,e,!1):(t.s[P]||$1(t.L,P)==2)&&f==2?Up(t,v,e,!0):(g=N5(t.L,e),g==0&&(g=1),A.a=v.a,A.c=v.c,A.b=v.b,A.d=v.d,Df(t,v.b-v.a,v.d-v.c,T),g>0?(i.a=v.a+T.a,i.c=v.c+T.b,i.b=v.b+T.a,i.d=v.d+T.b,(ri(t,P,r,1,h)||O(t.L,P)>1)&&(i.a+=h.a+T.b,i.c+=h.b-T.a),(ri(t,r,P,-1,h)||O(t.L,r)>1)&&(i.b+=h.a-T.b,i.d+=h.b+T.a)):(i.a=v.a-T.a,i.c=v.c-T.b,i.b=v.b-T.a,i.d=v.d-T.b,(ri(t,P,r,-1,h)||O(t.L,P)>1)&&(i.a+=h.a+T.b,i.c+=h.b-T.a),(ri(t,r,P,1,h)||O(t.L,r)>1)&&(i.b+=h.a-T.b,i.d+=h.b+T.a)),l1(t.L,e)==386&&iL(A,i),cA(t,A)&&Mn(t,A,P,r),f==2?cA(t,i)&&Mn(t,i,P,r):cA(t,i)&&VQ(t,i,P,r));break;case 3:cA(t,v)&&(Mn(t,v,P,r),Df(t,v.b-v.a,v.d-v.c,T),Z8(t,v,P,r,T.a,T.b,A),Z8(t,v,P,r,-T.a,-T.b,A));break;case 4:cA(t,v)&&(Df(t,v.b-v.a,v.d-v.c,T),Z8(t,v,P,r,1.5*T.a,1.5*T.b,A),Z8(t,v,P,r,.5*T.a,.5*T.b,A),Z8(t,v,P,r,-.5*T.a,-.5*T.b,A),Z8(t,v,P,r,-1.5*T.a,-1.5*T.b,A));break;case 5:cA(t,v)&&(Mn(t,v,P,r),Df(t,v.b-v.a,v.d-v.c,T),Z8(t,v,P,r,2*T.a,2*T.b,A),Z8(t,v,P,r,T.a,T.b,A),Z8(t,v,P,r,-T.a,-T.b,A),Z8(t,v,P,r,-2*T.a,-2*T.b,A))}t.C==-8&&Z1(t,-9)}function utt(t,e,A,n,P,r){var i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R,j,C,S,I,x,tt,M,K,et,W,$,a,st,ht,wt,rt,ct,Kt,St,t1,Qt,bt,yt,Yt,V1,r1,D1,Lt,jt,Q0,H1,s0,v1;if(M=e.i,K=e.j,C=e.f,S=e.g,!n[M]&&!n[K])for(ht=C.c.length>S.c.length?C:S,wt=C.c.length>S.c.length?M:K,n[wt]=!0,x=P==null?0:P[wt],a=0;a<ht.d.length;a++)D=ht.e[ht.d[a]],sD(t,D,J0(ht.b[x],ht.d[a]));if(n[M]?(tt=K,j=S,s=e.b?1:0):(tt=M,j=C,s=e.b?0:1),L=e.a,bt=z(t.o,s,L),St=z(t.o,1-s,L),I=P==null?0:P[tt],b=j.f[bt],v=j.f[St],et=J0(j.b[I],j.d[b]),Qt=t.k[bt],W=$9(J8(et,J0(j.b[I],j.d[v]))),v1=$9(J8(Qt,t.k[St])),i=lb(W,v1),R=c(H2,F2,29,j.d.length,0,1),i<.0010000000474974513)for(a=0;a<j.d.length;a++)D=j.e[j.d[a]],D!=bt&&D!=St&&(R[a]=i>RA?J8(et,J0(j.b[I],j.d[a])):J8(J0(j.b[I],j.d[a]),et));else for(i<3.1405926535422957?yt=new xe(v1.b*W.c-v1.c*W.b,-(v1.a*W.c-v1.c*W.a),v1.a*W.b-v1.b*W.a):w.Math.abs(v1.a)>=w.Math.abs(v1.b)&&w.Math.abs(v1.a)>=w.Math.abs(v1.c)?yt=new xe(-(v1.b+v1.c)/v1.a,1,1):w.Math.abs(v1.b)>=w.Math.abs(v1.a)&&w.Math.abs(v1.b)>=w.Math.abs(v1.c)?yt=new xe(1,-(v1.a+v1.c)/v1.b,1):yt=new xe(1,1,-(v1.a+v1.b)/v1.c),rt=u2($9(yt),i),a=0;a<j.d.length;a++)D=j.e[j.d[a]],D!=bt&&D!=St&&(R[a]=lQ(J8(J0(j.b[I],j.d[a]),et),rt));for(n[tt]=!0,st=0;st<O(t.o,bt);st++)h=_(t.o,bt,st),h!=St&&(m=j.f[h],rq(t,h,new xe(R[m].a+Qt.a,R[m].b+Qt.b,R[m].c+Qt.c)));for(Yt=lL(t,e.p),T=-1,Q=0,o=0,D1=0;D1<t.i[A].length;D1++){for(T=t.i[A][D1],rt=u2(v1,U1*T/180-Yt),a=0;a<j.d.length;a++)D=j.e[j.d[a]],D!=bt&&D!=St&&(sD(t,D,R[a]),M9(lQ(t.k[D],rt),Qt));if(y=S5(t,e),s0=y,jt=0,y<x6)t1=y/c4,t.e[A][D1]=t.d[A][D1]*(1-t1*t1);else{for(l=t.i[A][D1],H1=Ve,ct=0;ct<2;ct++)if(T=r[D1][ct],T!=l){for(rt=u2(v1,U1*T/180-Yt),$=0;$<j.d.length;$++)D=j.e[j.d[$]],D!=bt&&D!=St&&(sD(t,D,R[$]),M9(lQ(t.k[D],rt),Qt));Kt=S5(t,e),Kt<y*qf&&Kt<H1&&(t.i[A][D1]=r[D1][ct],t1=Kt/.16000000476837162,t.e[A][D1]=t.d[A][D1]*(1-t1*t1),s0=Kt,jt=ct+1,H1=Kt)}H1==Ve&&y<c4&&(t1=y/c4,t.e[A][D1]=t.d[A][D1]*(1-t1*t1))}t.e[A][t.a[A]]<t.e[A][D1]&&(t.a[A]=D1,Q=jt,o=s0)}for(Q0=0,Lt=0;Lt<t.i[A].length;Lt++)t.e[A][Lt]>0&&(Q0+=t.e[A][Lt]);if(t.e[A][t.a[A]]<=0)for(t.e[A][t.a[A]]=1,f=Q==1?-8:Q==2?8:jn(t.f)<.5?-8:8,V1=1;V1<=4;V1++){for(T=t.i[A][t.a[A]]+f*V1<<16>>16,rt=u2(v1,U1*T/180-Yt),$=0;$<j.d.length;$++)D=j.e[j.d[$]],D!=bt&&D!=St&&(sD(t,D,R[$]),M9(lQ(t.k[D],rt),Qt));if(g=S5(t,e),o-g<.05)break;t.i[A][t.a[A]]=T}else for(r1=0;r1<t.i[A].length;r1++)t.e[A][r1]/=Q0;if(T!=t.i[A][t.a[A]])for(rt=u2(v1,U1*t.i[A][t.a[A]]/180-Yt),$=0;$<j.d.length;$++)D=j.e[j.d[$]],D!=bt&&D!=St&&(sD(t,D,R[$]),M9(lQ(t.k[D],rt),Qt));Zm(t,L,t.i[A][t.a[A]])}function cp(){cp=d1,m4=B(d(Ut,1),Tt,6,15,[0,1.00794,4.0026,6.941,9.0122,10.811,12.011,14.007,15.999,18.998,20.18,22.99,24.305,26.982,28.086,30.974,32.066,35.453,39.948,39.098,40.078,44.956,47.867,50.942,51.996,54.938,55.845,58.933,58.693,63.546,65.39,69.723,72.61,74.922,78.96,79.904,83.8,85.468,87.62,88.906,91.224,92.906,95.94,98.906,101.07,102.91,106.42,107.87,112.41,114.82,118.71,121.76,127.6,126.9,131.29,132.91,137.33,138.91,140.12,140.91,144.24,146.92,150.36,151.96,157.25,158.93,162.5,164.93,167.26,168.93,173.04,174.97,178.49,180.95,183.84,186.21,190.23,192.22,195.08,196.97,200.59,204.38,207.2,208.98,209.98,209.99,222.02,223.02,226.03,227.03,232.04,231.04,238.03,237.05,239.05,241.06,244.06,249.08,252.08,252.08,257.1,258.1,259.1,262.11,267.12,268.13,271.13,270.13,277.15,276.15,By,By,283.17,285.18,vy,vy,293.2,Fy,Fy,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2.0141,3.016,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,71.0787,156.18828,114.10364,115.0877,103.1447,128.13052,129.11458,57.05182,137.14158,113.15934,113.15934,128.17428,131.19846,147.17646,97.11658,87.0777,101.10458,186.2134,163.17546,99.13246]),F4=B(d(Ut,1),Tt,6,15,[0,1.007825,4.0026,7.016003,9.012182,11.009305,12,14.003074,15.994915,18.998403,19.992435,22.989767,23.985042,26.98153,27.976927,30.973762,31.97207,34.968852,39.962384,38.963707,39.962591,44.95591,47.947947,50.943962,51.940509,54.938047,55.934939,58.933198,57.935346,62.939598,63.929145,68.92558,73.921177,74.921594,79.91652,78.918336,83.911507,84.911794,87.905619,88.905849,89.904703,92.906377,97.905406,89.92381,101.904348,102.9055,105.903478,106.905092,113.903357,114.90388,119.9022,120.903821,129.906229,126.904473,131.904144,132.905429,137.905232,138.906346,139.905433,140.907647,141.907719,135.92398,151.919729,152.921225,157.924099,158.925342,163.929171,164.930319,165.93029,168.934212,173.938859,174.94077,179.946545,180.947992,183.950928,186.955744,191.961467,192.962917,194.964766,196.966543,201.970617,204.974401,207.976627,208.980374,193.98818,195.99573,199.9957,201.00411,206.0038,210.00923,232.038054,216.01896,238.050784,229.03623,232.041169,237.05005,238.05302,242.06194,240.06228,243.06947,243.07446,248.08275,251.08887,253.09515,257.10295,257.10777,271.13,270.13,277.15,276.15,By,By,283.17,285.18,vy,vy,291.2,Fy,Fy,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2.014,3.01605,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),M2=B(d(F,1),k,6,15,[6,1,7,8])}function Qtt(t,e,A,n){var P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R,j,C,S,I,x,tt,M,K,et,W,$,a,st,ht,wt,rt,ct,Kt,St,t1,Qt,bt,yt,Yt,V1,r1,D1,Lt,jt,Q0,H1,s0,v1,g1,h0,G0,GA,b0,w1,fe,Ke,gA;for(K=0,Q=0,st=0,Yt=c(Pt,ft,6,e.q,16,1),Lt=c(Pt,ft,6,e.q,16,1),D1=c(Pt,ft,6,e.q,16,1),r=0;r<e.q;r++)A[r]==n&&(D1[r]=!0,Yt[r]=!0,++Q,++K);for(i=0;i<e.q;i++)if(D1[i])for(St=0;St<e.j[i];St++)C=e.i[i][St],Yt[C]||(Yt[C]=!0,++Q,++st);for(f=0;f<e.q;f++)if(Yt[f]&&!D1[f]&&!Lt[f])for(St=0;St<e.e[f];St++)C=e.i[f][St],Yt[C]||(Lt[C]=!0,Yt[C]=!0,++Q);for(y=0,s=0;s<e.r;s++)Yt[e.D[0][s]]&&Yt[e.D[1][s]]&&++y;for(wt=new YA(Q,y),ii(e,wt,Yt,!1,null),je(wt,!0),et=c(F,k,6,K,15,1),ct=c(F,k,6,Q,15,1),ht=c(F,k,6,K+st,15,1),h0=c(F,k,6,e.q,15,1),M=0,rt=0,a=0,D=0;D<e.q;D++)Yt[D]&&(SP(e,D,!0)&&h1(wt,rt,o9,!0),D1[D]||(wt.u[rt]|=I0),(D1[D]||!Lt[D])&&(ht[a]=rt,h0[D]=a,++a),D1[D]&&(et[M]=rt,++M),ct[rt]=D,wt.C[rt]==1&&(wt.A[rt]=2,wt.T&=wt.C[rt]==1?0:7),++rt);if(j=null,H1=null,T=null,Q0=null,r1=!1,fe=!!t.a&&cx(t.a)&&Q<=32,fe){for(T=new SA(wt,512),P=0;P<wt.f;P++)if(T.db[P]==3){fe=!1;break}for(L=0;L<wt.g;L++)if(T.o[L]==3){fe=!1;break}fe&&X5(T)}if(t.a&&!fe&&++t.a.d,wt.T|=8,fe&&(r1=yj(T),Q0=me(T),h=aB(t.a,Q0),h)){for(Kt=(Di(T),T.H),j=new f1,I=h.a,x=0,tt=I.length;x<tt;++x){for(S=I[x],jt=0;jt<wt.q;jt++)l=S[Kt[jt]],Be(wt,jt,l.a),Ie(wt,jt,l.b),TP(wt,jt,r1?-l.c:l.c);mt(j,new Fu(wt))}H1=h.c}if(!j){for(b0=new xQ(wt),ao(b0,t.d),g5(b0,t.c,16),j=new f1,o=BQ(b0),j.a.push(o),R=BQ(b0);R;)j.a.push(R),R=BQ(b0);for(g1=Ve,v=new Zt(j);v.a<v.c.a.length;)g=$t(v),g1=w.Math.min(g1,g.e);for(w1=2*g1,t1=j.a.length-1;t1>=0;t1--)(ve(t1,j.a.length),j.a[t1]).e>w1&&LA(j,t1);for(H1=c(Ut,Tt,6,j.a.length,15,1),s0=0,V1=0,Qt=0;Qt<j.a.length;Qt++)g=(ve(Qt,j.a.length),j.a[Qt]),H1[Qt]=w.Math.pow(10,(g1-g.e)/13.600000000000001),s0+=H1[Qt];for(bt=0;bt<j.a.length;bt++)H1[bt]/=s0;if(t.b){for(Ke=0,v1=Ve,b=new Zt(j);b.a<b.c.a.length;)g=$t(b),W=$Y(ts(g,g.o)),g.n=W,isNaN(W)||(v1=w.Math.min(v1,W),++Ke),nN(g,wt);for($=v1+2.72,m=new Zt(j);m.a<m.c.a.length;)g=$t(m),!isNaN(g.n)&&g.n>$&&(g.n=NaN,--Ke);if(Ke!=0){for(G0=c(Ut,Tt,6,Ke,15,1),GA=0,V1=0,yt=j.a.length-1;yt>=0;yt--)g=(ve(yt,j.a.length),j.a[yt]),isNaN(g.n)?LA(j,yt):(G0[V1]=w.Math.pow(10,(v1-g.n)/1.36),GA+=G0[V1],++V1);for(H1=c(Ut,Tt,6,Ke,15,1),St=0;St<Ke;St++)H1[St]=G0[St]/GA}}if(fe){for(Kt=(Di(T),T.H),S=k1(H2,[nA,F2],[127,29],0,[j.a.length,Kt.length],2),St=0;St<S.length;St++)for(jt=0;jt<Kt.length;jt++)gA=J0((ve(St,j.a.length),j.a[St]),jt),S[St][Kt[jt]]=new xe(gA.a,gA.b,r1?-gA.c:gA.c);ev(t.a,Q0,new Lg(S,H1))}}return new Iv(et,ct,ht,h0,Pf(j,c(WE,pV,96,0,0,1)),H1)}function wp(t,e){Hs();var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R,j,C,S,I,x,tt,M,K,et,W;switch(C=It(t,e),et=t.J[e].a,W=t.J[e].b,C){case 1:{if(I=t.j[e],I==0?(o=ML(t,!0),y=0):(o=et-kt(t,t.i[e][0]),y=W-pt(t,t.i[e][0])),I==1)v=W0(t,et+S4*o+N4*y,W-N4*o+S4*y,0);else if(I==2)o=et-.5*(kt(t,t.i[e][0])+kt(t,t.i[e][1])),y=W-.5*(pt(t,t.i[e][0])+pt(t,t.i[e][1])),v=W0(t,et+o,W+y,0);else if(I==3){for(tt=t.i[e][0],g=1;g<3;g++)f=t.k[e][g],(t.H[f]==129||t.H[f]==257)&&(tt=t.i[e][g]);if(A=w.Math.abs(Je(bA(t.J[e].a,t.J[e].b,kt(t,t.i[e][0]),pt(t,t.i[e][0])),bA(t.J[e].a,t.J[e].b,kt(t,t.i[e][1]),pt(t,t.i[e][1])))),n=w.Math.abs(Je(bA(t.J[e].a,t.J[e].b,kt(t,t.i[e][0]),pt(t,t.i[e][0])),bA(t.J[e].a,t.J[e].b,kt(t,t.i[e][2]),pt(t,t.i[e][2])))),P=w.Math.abs(Je(bA(t.J[e].a,t.J[e].b,kt(t,t.i[e][1]),pt(t,t.i[e][1])),bA(t.J[e].a,t.J[e].b,kt(t,t.i[e][2]),pt(t,t.i[e][2])))),x=!0,A>n&&A>P?n+P<U1&&(x=!1,o=et-.5*(kt(t,t.i[e][0])+kt(t,t.i[e][1])),y=W-.5*(pt(t,t.i[e][0])+pt(t,t.i[e][1]))):n>A&&n>P?A+P<U1&&(x=!1,o=et-.5*(kt(t,t.i[e][0])+kt(t,t.i[e][2])),y=W-.5*(pt(t,t.i[e][0])+pt(t,t.i[e][2]))):A+n<U1&&(x=!1,o=et-.5*(kt(t,t.i[e][1])+kt(t,t.i[e][2])),y=W-.5*(pt(t,t.i[e][1])+pt(t,t.i[e][2]))),x){for(M=t.i[e][0],Q=Ve,T=0;T<3;T++)r=t.i[e][T],r!=tt&&(D=w.Math.pow(t.J[e].a-t.J[r].a,2)+w.Math.pow(t.J[e].b-t.J[r].b,2),D<Q&&(M=r,Q=D,z1()));v=W0(t,(t.J[tt].a+t.J[M].a)/2,(t.J[tt].b+t.J[M].b)/2,0)}else v=W0(t,et+o,W+y,0)}else v=W0(t,et+o,W+y,0);K0(t,v,1),O0(t,e,v,1)}break;case 2:if(S=t.j[e],S==1)o=et-kt(t,t.i[e][0]),y=W-pt(t,t.i[e][0]),v=W0(t,et+(Fo*o-mo*y)*.7,W+(mo*o+Fo*y)*.7,0),K0(t,v,1),O0(t,e,v,1),v=W0(t,et+(V4*o-I4*y)*.7,W+(I4*o+V4*y)*.7,0),K0(t,v,1),O0(t,e,v,1);else if(S==2)L=et-kt(t,t.i[e][0]),l=W-pt(t,t.i[e][0]),s=et-kt(t,t.i[e][1]),h=W-pt(t,t.i[e][1]),R=w.Math.sqrt(L*L+l*l)*.7,j=w.Math.sqrt(s*s+h*h)*.7,o=L+s,y=l+h,b=w.Math.sqrt(o*o+y*y),i=(R+j)/2,o=o/b*i,y=y/b*i,K=pQ(t,e),v=W0(t,et+M4*o-q4*y,W+q4*o+M4*y,0),K0(t,v,1),K>-1?O0(t,e,v,1):O0(t,e,v,257),v=W0(t,et+E4*o-x4*y,W+x4*o+E4*y,0),K0(t,v,1),O0(t,e,v,1);else for(m=0;m<C;m++)v=W0(t,et,W,0),K0(t,v,1),O0(t,e,v,1);break;case 3:t.i[e][0]>0?(o=(et-kt(t,t.i[e][0]))*.7,y=(W-pt(t,t.i[e][0]))*.7,v=W0(t,et+o,W+y,0),K0(t,v,1),O0(t,e,v,1),v=W0(t,et-y,W+o,0),K0(t,v,1),O0(t,e,v,1),v=W0(t,et+y,W-o,0),K0(t,v,1),O0(t,e,v,1)):(o=ML(t,!0),y=ML(t,!0),v=W0(t,et+o,W+y,0),K0(t,v,1),O0(t,e,v,1),v=W0(t,et-y*Fo,W+o*mo,0),K0(t,v,1),O0(t,e,v,1),v=W0(t,et-y*Fo,W-o*mo,0),K0(t,v,1),O0(t,e,v,1));break;default:{for(m=0;m<C;m++)v=W0(t,et,W,0),K0(t,v,1),O0(t,e,v,1);break}}}function ott(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R,j,C,S,I,x,tt,M,K,et,W,$,a,st,ht,wt,rt,ct;if((t.fb!=CD(t.k)||t.N!=E9(t.k))&&(t.fb=CD(t.k),t.N=E9(t.k),t.eb<3&&(t.eb=3)),P=Dh(e),f=QB(e),ae(e,P),Rh(e,0,0,t.fb,t.N),(t.U&4)!=0&&t.I.a.length==0&&(y=.5*t.fb,l=.5*t.N,r=.03999999910593033*t.fb,A=new GD,mh(A,y-r,l,y+r,l),A.j=!0,mt(t.I,A)),o=!1,t.eb!=0){switch((t.U&1)!=0&&t.eb!=5&&Em(t),t.G=(t.U&4)!=0?new uR(new gT(t.L,t.Y),t.I):(t.U&2)!=0?new VB(t.L,t.Y,t.I):(t.U&1)!=0?new $d(t.L,t.I):new PF(t.V,t.I),lY(t.G,f,P),HS(t.G,t.T),VS(t.G,(t.U&1)==0?0:(L=Yy,L.startsWith(Ky)||L.startsWith(Xy)||L.startsWith(Zy)?s5(P,Qo):(W9(),P&qn|vt(w.Math.round(Qo*((P&rP)>>16)))<<16|vt(w.Math.round(Qo*((P&nP)>>8)))<<8|vt(w.Math.round(Qo*(P&255)))))),_O(t.G,t.$),MS(t.G,t.H|8|(t.w==19?80:0)),t.eb){case 6:case 4:case 5:BJ(t,e);break;case 3:R=R5(t.G,e,new QA(0,0,t.fb,t.N),0),R&&(t.U&1)!=0&&N3(R,t.V);break;case 2:j=hj(t.G,e,new QA(0,0,t.fb,t.N),0),o=!!j&&!(j.c==1&&j.a==0&&j.b==0)}t.eb=0}switch(t.G&&g_(t.G,e),o||nX(t,e),t.G&&(nK(t.G,e),yG(t.G,e)),t.t!=-1&&t.i.a.length!=0&&(I=vt(kt(t.V,t.t)),W=vt(pt(t.V,t.t)),T=t.i.a,C=nJ(t,T),ae(e,C==1?f:C==2?-16776961:fy),C==1?T=(J1(),X0)[qA(T,t.c)]:C==2&&(T=oA(t.j,0,T.length)),i=3*(rt=e.Kc(),rt.getFontSize())/2|0,AL(e,i,!1,!1),sh(e,I,W,T),C==4&&(ae(e,IP),bh(e,I+KL(e,T).b/2,W+i,\"<unknown>\")),C==2&&(ae(e,fy),sh(e,I+KL(e,T).b,W,HD(t.j,T.length)))),ae(e,f),t.X){case 1:switch(x=vt(t.hb),$=vt(t.kb),t.t==-1||t.t==t.e?(tt=vt(t.ib),a=vt(t.lb)):(tt=vt(kt(t.V,t.t)),a=vt(pt(t.V,t.t))),t.w){case 5:x9(e,x,$,tt,a);break;case 6:M=($-a)/9|0,st=(tt-x)/9|0,h=new OD(3),Ce(h,x,$),Ce(h,tt+M,a+st),Ce(h,tt-M,a-st),YU(e,new nD(h));break;case 23:for(M=tt-x,st=a-$,Q=2;Q<17;Q+=2)K=x+(Q*M/17|0)-(Q*st/128|0),ht=$+(Q*st/17|0)+(Q*M/128|0),et=x+(Q*M/17|0)+(Q*st/128|0),wt=$+(Q*st/17|0)-(Q*M/128|0),x9(e,K,ht,et,wt)}break;case 2:if(t.q>0&&x9(e,vt(t.hb),vt(t.kb),vt(t.o[0]),vt(t.p[0])),t.q>1)for(Q=1;Q<t.q;Q++)x9(e,vt(t.o[Q-1]),vt(t.p[Q-1]),vt(t.o[Q]),vt(t.p[Q]));break;case 5:ae(e,(m=(v=SD(e),v!=0?v:zy),A5(m,(s=Yy,s.startsWith(Ky)||s.startsWith(Xy)||s.startsWith(Zy)?wV:gV)))),Nx(e,new nD(t.R)),ae(e,f);break;case 6:I=t.hb<t.ib?vt(t.hb):vt(t.ib),W=t.kb<t.lb?vt(t.kb):vt(t.lb),S=vt(w.Math.abs(t.ib-t.hb)),D=vt(w.Math.abs(t.lb-t.kb)),ae(e,(b=(g=SD(e),g!=0?g:zy),A5(b,(L=Yy,L.startsWith(Ky)||L.startsWith(Xy)||L.startsWith(Zy)?wV:gV)))),ct=e.Kc(),ct.drawRectangle(I,W,S,D),ae(e,f);break;case 8:x=vt(t.hb),$=vt(t.kb),t.t==-1||t.t==t.e?(tt=vt(t.ib),a=vt(t.lb)):(tt=vt(kt(t.V,t.t)),a=vt(pt(t.V,t.t))),ae(e,(n=Dh(e),Os(-8388608,n))),x9(e,x,$,tt,a),ae(e,f)}}function gp(t,e,A){var n,P,r,i,f,D;for(r=0,KA(t.b)?(r=Y(r,1),yf(t.A,e,A,!0)):yf(t.A,e,A,!1),B0(t.g)==2?mI(t.A,e)||(r=Y(r,j6)):vn(t.A,e)||(B0(t.g)==1?r=Y(r,2):B0(t.g)==3&&(r=Y(r,4))),f=0,P=0;P<O(t.A,e);P++)gt(V(y0(t.A,_(t.A,e,P)),a0),0)&&fA(t.A,xt(t.A,e,P))&&++f;switch(B0(t.s)){case 1:f==0&&(r=Y(r,112));break;case 2:f<=2&&(r=Y(r,96));break;case 3:r=Y(r,8);break;case 4:f<3&&(r=Y(r,104));break;case 5:f<4&&(r=Y(r,88));break;case 6:r=Y(r,56)}switch(B0(t.t)!=0&&(r=Y(r,j1(B0(t.t)+2,22))),D=B0(t.r),D==li.length?r=Y(r,t.C):D!=0&&(r=Y(r,li[D])),B0(t.i)){case 1:r=Y(r,WQ);break;case 2:r=Y(r,pf);break;case 3:r=Y(r,jf)}switch(i=UI(t.A,e),B0(t.n)){case 1:i==1?r=Y(r,N1):i<1&&(r=Y(r,_Q));break;case 2:i==2?r=Y(r,N1):i<2&&(r=Y(r,c2));break;case 3:i==3?r=Y(r,N1):i<3&&(r=Y(r,w2));break;case 4:i==2?r=Y(r,N1):i<2&&(r=Y(r,$Q));break;case 5:i==3?r=Y(r,N1):i<3&&(r=Y(r,IA));break;case 6:i==0&&(r=Y(r,C0));break;case 7:i==1?r=Y(r,C0):i<1&&(r=Y(r,Ui));break;case 8:i==2?r=Y(r,C0):i<2&&(r=Y(r,qP));break;case 9:i==3?r=Y(r,C0):i<3&&(r=Y(r,Cf));break;case 10:i==0?r=Y(r,3276800):r=Y(r,$Q);break;case 11:i==0?r=Y(r,2228224):r=Y(r,IA);break;case 12:i<=1?r=Y(r,2490368):i<=3&&(r=Y(r,IA))}switch(n=ah(t.A,e),B0(t.j)){case 1:n==0&&(r=Y(r,Dy));break;case 2:n<=1&&(r=Y(r,uy));break;case 3:n<=2&&(r=Y(r,Qy));break;case 4:n<=3&&(r=Y(r,oy));break;case 5:n<2&&(r=Y(r,l6));break;case 6:n<3&&(r=Y(r,h6));break;case 7:n<4&&(r=Y(r,aQ));break;case 8:n==0&&(r=Y(r,g2));break;case 9:n<2&&(r=Y(r,Uy));break;case 10:n<3&&(r=Y(r,Ly));break;case 11:n<4&&(r=Y(r,to));break;case 12:n<2&&(r=Y(r,T6));break;case 13:n<3&&(r=Y(r,c6));break;case 14:n<3&&(r=Y(r,w6))}switch(B0(t.k)){case 1:r=Y(r,1792);break;case 2:r=Y(r,1664);break;case 3:r=Y(r,1408);break;case 4:r=Y(r,128);break;case 5:r=Y(r,384);break;case 6:r=Y(r,896);break;case 7:r=Y(r,1536);break;case 8:r=Y(r,re);break;case 9:r=Y(r,1152)}switch(B0(t.p)){case 1:r=Y(r,98304);break;case 2:r=Y(r,81920);break;case 3:r=Y(r,49152);break;case 4:r=Y(r,Sn)}switch(B0(t.o)!=0&&(r=Y(r,j1(B0(t.o),47))),KA(t.c)&&(Yi(t.A,e)>0||b1(t.A,e)==0&&(X(t.A,e)==5||Uh(t.A,e)||Hh(t.A,e)))&&(r=Y(r,N1)),KA(t.f)&&(Yi(t.A,e)>0||b1(t.A,e)==0&&(X(t.A,e)==5||Uh(t.A,e)||Hh(t.A,e)))&&(r=Y(r,C0)),B0(t.u)){case 1:r=Y(r,KQ);break;case 2:r=Y(r,XQ)}if(KA(t.e)&&(r=Y(r,ge)),KA(t.d)&&(r=Y(r,a0)),t.q)switch(B0(t.q)){case 1:r=Y(r,wn);break;case 2:r=Y(r,lo);break;case 3:r=Y(r,w8)}h1(t.A,e,-1,!1),h1(t.A,e,r,!0)}function Utt(t,e,A,n,P,r){var i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R,j,C,S,I,x,tt,M,K,et,W,$,a;for(o=e.a[A],L=e.a[n],s=e.a[P],y=e.a[r],W=zX(t.a,e,A,n,P,r),$=W>10?W/10|0:W,a=W>10?W-$*10:0,S=-1,I=0,C=0,x=0,R=$,K=5;(I<K&&(S==-1||K==4)||I==4&&$==5&&a>0)&&(K==5&&I==4&&(K=4,I=0,R=a),I==1?(C=1,x=3):I==2?(C=3,x=1):(C=I,x=I),g=t.a.g.a[o-1][w.Math.min(C+1,4)],m=L,v=s,b=t.a.g.a[y-1][w.Math.min(x+1,4)],m>v?(v=(M=m1(m),m1(m=v),M).a,b=(tt=m1(g),m1(g=b),tt).a):m==v&&g>b&&(b=(tt=m1(g),m1(g=b),tt).a),S=_r(B(d(F,1),k,6,15,[2,3,1,4,0]),B(d(F,1),k,6,15,[m,v,g,b,R]),t),!(S!=-1&&K==4));)++I;if(S>=0)return new Gv(t,S);for(T=u1(e,n,P),f=B(d(Ut,1),Tt,6,15,[0,0]),D=B(d(Ut,1),Tt,6,15,[0,0]),Q=B(d(Ut,1),Tt,6,15,[0,0]),l=B(d(F,1),k,6,15,[e.C[n],e.C[P]]),i=(mn(t.a.b,L)-1)*(mn(t.a.b,s)-1),j=0;j<2;j++)switch(l[j]){case 6:f[j]=2,D[j]=2.12;break;case 7:f[j]=2,D[j]=1.5;break;case 8:f[j]=2,D[j]=.2,Q[j]=2;break;case 14:f[j]=1.25,D[j]=1.22;break;case 15:f[j]=1.25,D[j]=2.4;break;case 16:f[j]=1.25,D[j]=.49,Q[j]=8}return ND(t.a.b,L)||ND(t.a.b,s)?new On(0,0):PL(t.a.b,L)&&PL(t.a.b,s)&&T<e.g&&Re(e.p,T)?(h=n8(t.a.b,L)==3&&n8(t.a.b,s)==4||n8(t.a.b,L)==4&&n8(t.a.b,s)==3?3:6,et=I9(t.a.b,L)==0&&I9(t.a.b,s)==0?.5:.3,new On(h*et*w.Math.sqrt(f[0]*f[1]),0)):dt(e,T)==2?(et=VA(t.a.b,L)==2&&VA(t.a.b,s)==2?1:.4,new On(6*et*w.Math.sqrt(f[0]*f[1]),0)):mn(t.a.b,L)==4&&mn(t.a.b,s)==4?new On(0,w.Math.sqrt(D[0]*D[1])/i):mn(t.a.b,L)==4&&mn(t.a.b,s)!=4?mn(t.a.b,s)==3&&(n8(t.a.b,s)==4||n8(t.a.b,s)==34||VA(t.a.b,s)>0)||mn(t.a.b,s)==2&&(n8(t.a.b,s)==3||VA(t.a.b,s)>0)?new RU:new On(0,w.Math.sqrt(D[0]*D[1])/i):mn(t.a.b,s)==4&&mn(t.a.b,L)!=4?mn(t.a.b,L)==3&&(n8(t.a.b,L)==4||n8(t.a.b,L)==34||VA(t.a.b,L)>0)||mn(t.a.b,L)==2&&(n8(t.a.b,L)==3||VA(t.a.b,L)>0)?new RU:new On(0,w.Math.sqrt(D[0]*D[1])/i):dt(e,T)==1&&VA(t.a.b,L)>0&&VA(t.a.b,s)>0||VA(t.a.b,L)>0&&I9(t.a.b,s)>0||I9(t.a.b,L)>0&&VA(t.a.b,s)>0?I9(t.a.b,L)>0&&I9(t.a.b,s)>0?new RU:I9(t.a.b,L)>0&&VA(t.a.b,s)>0?(et=0,VA(t.a.b,L)==1?et=.5:$n(l[0])==2&&$n(l[1])==2?et=.3:($n(l[0])!=2||$n(l[1])!=2)&&(et=.15),new On(6*et*w.Math.sqrt(f[0]*f[1]),0)):I9(t.a.b,s)>0&&VA(t.a.b,L)>0?(et=0,VA(t.a.b,s)==1?et=.5:$n(l[0])==2&&$n(l[1])==2?et=.3:($n(l[0])!=2||$n(l[1])!=2)&&(et=.15),new On(6*et*w.Math.sqrt(f[0]*f[1]),0)):(VA(t.a.b,L)==1||VA(t.a.b,s)==1)&&(l[0]!=6||l[1]!=6)?new On(2.4000000000000004*w.Math.sqrt(f[0]*f[1]),0):new On(.8999999999999999*w.Math.sqrt(f[0]*f[1]),0):(l[0]==8||l[0]==16)&&(l[1]==8||l[1]==16)?new On(-w.Math.sqrt(Q[0]*Q[1]),0):new On(0,w.Math.sqrt(D[0]*D[1])/i)}function Ltt(t,e){var A,n,P,r,i,f,D,Q,o,L;if(!t.W){if(Q=e.b,e.j==1)if(Q==-3)t.Z=!0,Ar(t);else if(Q==-2)t.d=!0,Ar(t);else if(Q==-1)Ar(t);else if(e.a)Q==122?(Lv(t),t.eb=w.Math.max(t.eb,2),e1(t.k),q1(t,new S1(t,1,!0))):Q==99?j5(t,!0):Q==118&&((t.U&4)!=0&&t.r&&Bv(),cv(t));else if(Q==-4)t.w!=19&&(G1(t),bZ(t)||nQ(t.V)&&(t.eb=w.Math.max(t.eb,1),e1(t.k),q1(t,new S1(t,1,!0))));else if(Q==-6||t.t==-1&&Q==63){yh(t._,TV,cV);return}else if(Q==-8)t.i.a.length!=0&&($s(t,t.i.a),Qn(t.i,0));else if(t.u!=-1)Q==113&&t.V.K?sv(t,t.u):Q==118?GQ(t.V,t.u,3,!1,rn(t.V,24*t.ab))&&(t.eb=w.Math.max(t.eb,3),e1(t.k),q1(t,new S1(t,1,!0))):Q>=52&&Q<=55?GQ(t.V,t.u,Q-48,!1,rn(t.V,24*t.ab))&&(t.eb=w.Math.max(t.eb,3),e1(t.k),q1(t,new S1(t,1,!0))):Q==97||Q==98?GQ(t.V,t.u,6,!0,rn(t.V,24*t.ab))&&(t.eb=w.Math.max(t.eb,3),e1(t.k),q1(t,new S1(t,1,!0))):(P=Q==48?(G1(t),o8(t.V,t.u,16)):Q==49?(G1(t),o8(t.V,t.u,1)):Q==50?(G1(t),o8(t.V,t.u,2)):Q==51?(G1(t),o8(t.V,t.u,4)):Q==117?(G1(t),o8(t.V,t.u,257)):Q==100?(G1(t),o8(t.V,t.u,129)):Q==99?(G1(t),o8(t.V,t.u,386)):Q==109&&(G1(t),o8(t.V,t.u,16)),P&&(t.eb=w.Math.max(t.eb,1),e1(t.k),q1(t,new S1(t,1,!0))));else if(t.t!=-1)if(D=t.i.a.length==0,D?t.K=Q:(t.K==108&&(Qn(t.i,0),Oe(t.i,76)),t.K=-1),D&&Q==108)J(t.i,\"Cl\"),t.eb=w.Math.max(t.eb,1),e1(t.k);else if(D&&(Q==43||Q==45))G1(t),QT(t.V,t.t,Q==43)&&(t.eb=w.Math.max(t.eb,3),e1(t.k),q1(t,new S1(t,1,!0)));else if(D&&Q==46)G1(t),L=mA(t.V,t.t)==32?0:32,Ne(t.V,t.t,L),t.eb=w.Math.max(t.eb,3),e1(t.k),q1(t,new S1(t,1,!0));else if(D&&Q==58)G1(t),L=mA(t.V,t.t)==48?16:mA(t.V,t.t)==16?0:48,Ne(t.V,t.t,L),t.eb=w.Math.max(t.eb,3),e1(t.k),q1(t,new S1(t,1,!0));else if(D&&Q==113&&t.V.K)fF(t,t.t);else if(D&&t.V.K&&(Q==120||Q==88))o=B(d(F,1),k,6,15,[9,17,35,53]),oT(t.V,t.t,o),t.eb=w.Math.max(t.eb,3),e1(t.k),q1(t,new S1(t,1,!0));else if(D&&Q==63)G1(t),gf(t.V,t.t,0,0,-1,0)&&(t.eb=w.Math.max(t.eb,3),e1(t.k),q1(t,new S1(t,1,!0)));else if(D&&Q>48&&Q<=57){if(Yi(t.V,t.t)>0){for(G1(t),r=Q-47,A=t.t,i=t.V.q-t.V.f,f=1;f<r&&(J5(t,A),n=W0(t.V,t.ib,t.lb,0),n!=-1);f++)eL(t.V,A,n),A=n-i,ut(t.V,1);t.eb=w.Math.max(t.eb,3),e1(t.k),q1(t,new S1(t,1,!0))}}else!D&&Q==-7?(Qn(t.i,0),t.eb=w.Math.max(t.eb,1),e1(t.k)):!D&&Q==-5?(Qn(t.i,t.i.a.length-1),t.eb=w.Math.max(t.eb,1),e1(t.k)):Q>=65&&Q<=90||Q>=97&&Q<=122||Q>=48&&Q<=57||Q==45?(Oe(t.i,Q&c1),t.eb=w.Math.max(t.eb,1),e1(t.k)):(Q==10||Q==13)&&$s(t,t.i.a);else Q==104||Q==118?(t.U&7)==0&&B5(t,Q==104):t.db&&z5(t.db,e);e.j==2&&(Q==-3?(t.Z=!1,Ar(t)):Q==-2?(t.d=!1,Ar(t)):Q==-1?Ar(t):t.db&&z5(t.db,e))}}function stt(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R,j,C,S,I,x,tt,M,K,et,W,$,a,st;for(n=0;n<t.f.f;n++)if(Ht(t.f,n)>4){for(s=new HP(t.f,1+Ht(t.f,n),!1),s.a[Ht(t.f,n)]=0,s.b[Ht(t.f,n)]=0,s.k[Ht(t.f,n)]=32,s.e[Ht(t.f,n)]=n,t.b[n]=!0,l=0;l<Ht(t.f,n);l++)Q=_(t.f,n,l),s.a[l]=w.Math.sin(AA*l-b2),s.b[l]=w.Math.cos(AA*l-b2),s.k[l]=32,s.e[l]=Q,t.b[Q]=!0,t.c[xt(t.f,n,l)]=!0;pP(t.d,s)}for(et=Nn(t.f),K=0;K<et.j.a.length;K++){if(W=N(et.k,K).length,tt=N(et.j,K),$=!1,(t.e&12)!=0){for($=!0,l=0;l<W;l++)if(!z0(t.f,tt[l])){$=!1;break}}if(!$){for(g=!1,h=0;h<W;h++)if(Hr(t.f,tt[h])==W){g=!0;break}if(g)for(M=N(et.k,K),sk(t,tt,M),l=0;l<W;l++)t.b[tt[l]]=!0,t.c[M[l]]=!0}}for(f=0;f<t.f.g;f++)if(fA(t.f,f)&&!t.c[f])for(st=M_(t,f),tt=st.a,M=st.b,sk(t,tt,M),l=0;l<st.a.length;l++)t.b[tt[l]]=!0,t.c[M[l]]=!0;for(D=0;D<t.f.r;D++)if(!t.c[D]&&dt(t.f,D)==3&&(P=z(t.f,0,D),r=z(t.f,1,D),j=Ht(t.f,P)+Ht(t.f,r),j>2)){for(s=new HP(t.f,j,!1),o=0,h=0;h<Ht(t.f,P);h++)Q=_(t.f,P,h),Q!=r&&(s.e[o++]=Q,t.b[Q]=!0,t.c[xt(t.f,P,h)]=!0);for(s.e[o++]=P,s.e[o++]=r,T=0;T<Ht(t.f,r);T++)Q=_(t.f,r,T),Q!=P&&(s.e[o++]=Q,t.b[Q]=!0,t.c[xt(t.f,r,T)]=!0);for(l=0;l<j;l++)s.a[l]=l,s.b[l]=0,s.k[l]=1;t.b[P]=!0,t.b[r]=!0,t.c[D]=!0,pP(t.d,s)}for(i=0;i<t.f.r;i++)if(!t.c[i]&&dt(t.f,i)==2){for(e=c(F,k,6,t.f.q,15,1),l=0;l<2;l++)if(e[0]=z(t.f,l,i),e[1]=z(t.f,1-l,i),$1(t.f,e[0])==1&&$1(t.f,e[1])==2&&Ht(t.f,e[1])==2){t.b[e[0]]=!0,t.b[e[1]]=!0,t.c[i]=!0,R=1;do{if(C=_(t.f,e[R],0)==e[R-1]?1:0,e[R+1]=_(t.f,e[R],C),$1(t.f,e[R+1])==2&&Ht(t.f,e[R+1])>2)break;t.b[e[R+1]]=!0,t.c[xt(t.f,e[R],C)]=!0,++R}while($1(t.f,e[R])==2&&Ht(t.f,e[R])==2);for(j=Ht(t.f,e[0])+Ht(t.f,e[R])+R-1,s=new HP(t.f,j,!1),v=0;v<=R;v++)s.a[v]=v,s.b[v]=0,s.k[v]=64,s.e[v]=e[v];for(L=R+1,y=!1,b=0;b<Ht(t.f,e[0]);b++)Q=_(t.f,e[0],b),Q!=e[1]&&(s.a[L]=-.5,s.b[L]=y?w.Math.sin(AA):-w.Math.sin(AA),s.k[L]=64,s.e[L]=Q,++L,y=!0);for(y=!1,m=0;m<Ht(t.f,e[R]);m++)Q=_(t.f,e[R],m),Q!=e[R-1]&&(s.a[L]=R+.5,s.b[L]=y?-w.Math.sin(AA):w.Math.sin(AA),s.k[L]=64,s.e[L]=Q,++L,y=!0);pP(t.d,s)}}for(A=0;A<t.f.q;A++)if(Ht(t.f,A)==4){for(S=c(F,k,6,4,15,1),I=c(F,k,6,4,15,1),x=0,h=0;h<4;h++)S[x]=_(t.f,A,h),I[x]=xt(t.f,A,h),Ht(t.f,S[x])==1&&!t.c[I[x]]&&++x;if(x==2){for(s=new HP(t.f,3,!1),l=0;l<2;l++)t.b[S[l]]=!0,t.c[I[l]]=!0,s.e[l]=S[l],s.k[l]=32;s.a[0]=-.5,s.b[0]=.866,s.a[1]=.5,s.b[1]=.866,s.a[2]=0,s.b[2]=0,s.k[2]=32,s.e[2]=A,pP(t.d,s)}if(x==3){for(T=0;T<2;T++)dt(t.f,I[T])==1&&(a=S[T],S[T]=S[2],S[2]=a,a=I[T],I[T]=I[2],I[2]=a);for(s=new HP(t.f,4,!1),l=0;l<3;l++)t.b[S[l]]=!0,t.c[I[l]]=!0,s.e[l]=S[l],s.k[l]=32;s.a[0]=-1,s.b[0]=0,s.a[1]=1,s.b[1]=0,s.a[2]=0,s.b[2]=1,s.a[3]=0,s.b[3]=0,s.k[3]=32,s.e[3]=A,pP(t.d,s)}}}function ytt(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R,j,C,S,I,x,tt,M,K,et,W,$,a,st,ht,wt,rt,ct,Kt,St,t1,Qt,bt;if(vi(t.c),t.d=null,ut(e,63),dt(e,A)!=1||A<e.g&&Re(e.p,A)||X(e,e.D[0][A])==1||X(e,e.D[1][A])==1||(et=(e.F[A]&128)!=0,et&&(e.p&&A<e.g?yP(e.p,A):0)<6))return!1;for(P=c(Pt,ft,6,e.f,16,1),t.a=0,C=0;C<2;C++){for(t.b[C]=e.D[C][A],t.e[C]=e.D[1-C][A];$1(e,t.b[C])==2&&e0(e,t.b[C])==2&&X(e,t.b[C])<10;)for(W=0;W<O(e,t.b[C]);W++)if(i=_(e,t.b[C],W),i!=t.e[C]&&e.C[i]!=1){if(e.j[i]==1||t.a==16)return!1;P[t.b[C]]=!0,t.e[C]=t.b[C],t.b[C]=i,++t.a;break}if($=e0(e,t.b[C]),$>4||$==1)return!1;P[t.b[C]]=!0}for(S=0;S<2;S++)for(W=0;W<O(e,t.b[S]);W++)i=_(e,t.b[S],W),e.C[i]!=1&&(P[i]=!0);for(t.g=c(F,k,6,e.f,15,1),ii(e,t.c,P,!0,t.g),I=0;I<t.g.length;I++)t.g[I]!=-1&&(t.i[t.g[I]]=I);if(je(t.c,!0),et&&(r=u1(t.c,t.g[t.b[0]],t.g[t.b[1]]),r!=-1)){for(Ge(t.c,r,256,!0),Kt=(ut(e,7),e.p),ct=0;ct<Kt.j.a.length;ct++)if(tf(Kt,ct,A)){for(x=0;x<2;x++)for(W=0;W<O(e,t.b[x]);W++)if(i=_(e,t.b[x],W),i!=t.e[x]&&yA(Kt,ct,i)&&e.C[i]!=1){Ge(t.c,u1(t.c,t.g[t.b[x]],t.g[i]),256,!0);break}}}for(tt=0;tt<2;tt++){for(SP(e,t.b[tt],!0)&&h1(t.c,t.g[t.b[tt]],o9,!0),D=!1,W=0;W<O(e,t.b[tt]);W++)i=_(e,t.b[tt],W),i!=t.e[tt]&&e.C[i]!=1&&(g=u1(t.c,t.g[t.b[tt]],t.g[i]),l1(t.c,g)==8?D=!0:e.C[i]==6&&!vn(e,t.b[tt])&&(T=i<e.f&&r0(e.p,i)?2:4,h1(t.c,t.g[i],T,!0)),f=xt(e,t.b[tt],W),St=e.p&&f<e.g?yP(e.p,f):0,(St==3||St==4)&&Ge(t.c,g,St<<17,!0),(f<e.g&&Re(e.p,f)||CA(e,t.b[tt],W)==2)&&($=e0(e,i),R=$==3,!R&&$==2&&(e.u[i]&cn)==0&&(R=ej(e,t.b[1-tt],f)!=-1),R?h1(t.c,t.g[i],w2,!0):f<e.g&&Re(e.p,f)&&h1(t.c,t.g[i],c2,!0)),CA(e,t.b[tt],W)==1&&(e0(e,i)==4?h1(t.c,t.g[i],Cf,!0):e.C[i]==6&&h1(t.c,t.g[i],IA,!0)));D||(vn(e,t.b[tt])?h1(t.c,t.g[t.b[tt]],2,!0):h1(t.c,t.g[t.b[tt]],4,!0))}for(ut(t.c,191),j=0;j<2;j++)if(m=t.g[t.b[j]],d0(t.c,m)==3){if(d0(e,t.b[j])==3)return!1;a=xv(t.c,m),w0(t.c,a,257),z(t.c,0,a)!=m&&(gD(t.c,1,a,z(t.c,0,a)),gD(t.c,0,a,m)),ut(t.c,191)}if(s=t.g[t.b[0]],y=t.g[t.b[1]],wt=t.g[t.e[0]],rt=t.g[t.e[1]],Q=ne(t.c,s),o=ne(t.c,y),V8(t.c,s)&&V8(t.c,y)&&(Q!=0||o!=0)&&(Q!=o||EA(t.c,s)!=EA(t.c,y)))return!1;if(L=!1,V8(t.c,s)&&Q!=0&&(Me(t.c,s,0,-1),L=!0),V8(t.c,y)&&o!=0&&(Me(t.c,y,0,-1),L=!0),L&&ut(t.c,191),st=R0(t.c,s),ht=R0(t.c,y),st<ht&&(bt=t.b[0],t.b[0]=t.b[1],t.b[1]=bt,bt=t.e[0],t.e[0]=t.e[1],t.e[1]=bt,bt=s,s=y,y=bt,bt=wt,wt=rt,rt=bt),K=!1,(V8(t.c,s)||V8(t.c,y))&&(V8(t.c,s)?K=T3(t.c,s)==1:V8(t.c,y)&&(K=T3(t.c,y)==1),K)){for(n=0;n<t.c.q;n++)Be(t.c,n,-kt(t.c,n));ut(t.c,191)}return l=HR(t,s,wt),h=HR(t,y,rt),t.f[0]=l==-1?-1:t.i[l],t.f[1]=h==-1?-1:t.i[h],M=jF(t.c),M==null?!1:(v=BR(t,s,wt),b=BR(t,y,rt),v==0&&b==0&&(t.c.I&IP)==I0?Qt=2:Qt=OV[v][b],t1=Qt==0?K?\"<\":\">\":Qt==1?K?\"-\":\"+\":Qt==3?\"=\":\"\",t.d=M+t1,!0)}function ltt(t,e){var A,n,P;D8();var r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R,j,C,S,I,x,tt,M,K,et,W,$,a,st,ht,wt,rt,ct,Kt,St,t1,Qt,bt,yt,Yt,V1,r1;for(v=new vj(e),T=new dp(e,v),r1=c(ZE,nA,467,e.q,0,2),wt=1;wt<e.q;wt++)r1[wt]=c(ZE,{4:1,5:1,8:1,468:1,467:1},81,wt,0,1);for(h=0;h<e.r;h++)Q=Or(e.D[0][h],e.D[1][h]),HQ(r1,Q,Q,v.a[h],10);for(s=0;s<e.f;s++)for(rt=1;rt<e.e[s];rt++)for(S=e.i[s][rt],tt=e.k[s][rt],g=v.a[tt],Qt=0;Qt<rt;Qt++)I=e.i[s][Qt],M=e.k[s][Qt],r=rt<Qt?T.a[s][Qt][rt]:T.a[s][rt][Qt],m=v.a[M],et=w.Math.sqrt(g*g+m*m-2*g*m*w.Math.cos(r)),yt=c(F,k,6,1,15,1),yt[0]=s,HQ(r1,Or(S,I),yt,et,5);for(l=0;l<e.r;l++)if(!(l<e.g&&Re(e.p,l)||(e.F[l]&64)!=0&&(e.p&&l<e.g?yP(e.p,l):0)<=5)){for(Q=c(F,k,6,2,15,1),rt=0;rt<2;rt++)Q[rt]=e.D[rt][l];if(e.e[Q[0]]>1&&e.e[Q[1]]>1){if(dt(e,l)==3){for(et=v.a[l],V1=c(F,k,6,2,15,1),ct=0;ct<2;ct++)for(Qt=0;Qt<e.e[Q[ct]];Qt++)if(x=e.k[Q[ct]][Qt],x!=l){et+=v.a[x],V1[ct]=e.i[Q[ct]][Qt];break}yt=c(F,k,6,2,15,1),yt[0]=Q[0],yt[1]=Q[1],HQ(r1,Or(V1[0],V1[1]),yt,et,3)}else if(dt(e,l)==2&&e.o[Q[0]]==1&&e.o[Q[1]]==1&&(e.F[l]&3)!=3){for(C=c(F,f0,7,2,0,2),x=c(F,f0,7,2,0,2),j=c(Ut,T0,15,2,0,2),ct=0;ct<2;ct++){for(C[ct]=c(F,k,6,e.e[Q[ct]]-1,15,1),x[ct]=c(F,k,6,e.e[Q[ct]]-1,15,1),j[ct]=c(Ut,Tt,6,e.e[Q[ct]]-1,15,1),W=-1,Qt=0;Qt<e.e[Q[ct]];Qt++)if(e.i[Q[ct]][Qt]==Q[1-ct]){W=Qt;break}for(K=0,bt=0;bt<e.e[Q[ct]];bt++)bt!=W&&(C[ct][K]=e.i[Q[ct]][bt],x[ct][K]=e.k[Q[ct]][bt],j[ct][K]=Vu(T,Q[ct],W,bt),++K)}for(Kt=0;Kt<C[0].length;Kt++)for(Qt=0;Qt<C[1].length;Qt++)St=(e.F[l]&3)==1,C[0].length==2&&C[0][Kt]>C[0][1-Kt]&&(St=!St),C[1].length==2&&C[1][Qt]>C[1][1-Qt]&&(St=!St),A=v.a[l]-v.a[x[0][Kt]]*w.Math.cos(j[0][Kt])-v.a[x[1][Qt]]*w.Math.cos(j[1][Qt]),n=v.a[x[0][Kt]]*w.Math.sin(j[0][Kt]),St?n+=v.a[x[1][Qt]]*w.Math.sin(j[1][Qt]):n-=v.a[x[1][Qt]]*w.Math.sin(j[1][Qt]),P=c(F,k,6,2,15,1),P[0]=e.D[0][l],P[1]=e.D[1][l],HQ(r1,Or(C[0][Kt],C[1][Qt]),P,w.Math.sqrt(A*A+n*n),3)}else if(dt(e,l)!=0){for(Yt=c(F,k,6,2,15,1),ct=0;ct<2;ct++)for(Qt=0;Qt<e.e[Q[ct]];Qt++)if(e.i[Q[ct]][Qt]==Q[1-ct]){Yt[ct]=Qt;break}for(Kt=0;Kt<e.e[Q[0]];Kt++)if(Kt!=Yt[0])for(Qt=0;Qt<e.e[Q[1]];Qt++)Qt!=Yt[1]&&(e.o[Q[0]]==0&&e.o[Q[1]]==0?Q$(e.i[Q[0]][Kt],e.i[Q[1]][Qt],e.k[Q[0]][Kt],e.k[Q[1]][Qt],Vu(T,Q[0],Yt[0],Kt),Vu(T,Q[1],Yt[1],Qt),l,v,r1,e):B_(e.i[Q[0]][Kt],e.i[Q[1]][Qt],e.k[Q[0]][Kt],e.k[Q[1]][Qt],Vu(T,Q[0],Yt[0],Kt),Vu(T,Q[1],Yt[1],Qt),l,v,r1,e))}}}for(y=0;y<e.f;y++)if(e.o[y]==2&&e.j[y]==2&&e.n[y][0]==2&&e.n[y][1]==2){for(o=e.i[y][0],L=e.i[y][1],rt=0;rt<e.e[o];rt++)if(b=e.i[o][rt],b!=y)for(Qt=0;Qt<e.e[L];Qt++)R=e.i[L][Qt],R!=y&&(i=uk(T,o,y,b),f=uk(T,L,y,R),g=Br(v,e.k[o][rt]),m=Br(v,e.k[L][Qt]),$=Br(v,e.k[y][0])+Br(v,e.k[y][1])-g*w.Math.cos(i)-m*w.Math.cos(f),a=g*w.Math.sin(i),st=m*w.Math.sin(f),yt=c(F,k,6,2,15,1),yt[0]=o,yt[1]=L,HQ(r1,Or(b,R),yt,w.Math.sqrt($*$+a*a+st*st),3))}for(D=0;D<e.q;D++)N_(r1,D,e,v);for(VY(r1,e),ht=1;ht<e.q;ht++)for(t1=0;t1<ht;t1++)r1[ht][t1].a!=null&&t.a.push(r1[ht][t1])}function n6(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R,j,C,S,I,x,tt,M,K,et,W,$;K=null,Q=null;try{if(t.f=null,t.j&&(vi(t.j),je(t.j,!1)),v=T=Y1(e),v==null||(T=Y1(e))==null||(T=Y1(e))==null||(t.k=T.includes(\"From CSD data. Using bond type 'Any'\"),t.e=T.includes(\"From CSD data.\"),(T=Y1(e))==null))return!1;t.g=!1,t.d=t.a;try{b=Q1(B1((Ct(0,3,T.length),T.substr(0,3))),P1,Et),R=Q1(B1((Ct(3,6,T.length),T.substr(3,3))),P1,Et),j=Mr(B1((Ct(6,9,T.length),T.substr(6,3)))),t.d=t.d|Mr(B1((Ct(12,15,T.length),T.substr(12,3))))==1,t.g=T.length>=39&&T.startsWith(\"V3000\",34)}catch(a){if(a=a1(a),Xt(a,19))return!1;throw At(a)}if(t.g)return S=J$(t,e),W2(t.j,v),S;if(!t.j&&(t.j=new YA(b,R)),W2(t.j,v),t.d||(t.j.L=!0),b==0){for(;T!=null&&!(at(T,Dr)||at(T,Po)||at((Gt(1,T.length+1),T.substr(1)),\"$\"));)T=Y1(e);return!0}for(y=0;y<b;y++){if((T=Y1(e))==null)return!1;A=(et=on(B1((Ct(0,10,T.length),T.substr(0,10)))),W=on(B1((Ct(10,20,T.length),T.substr(10,10)))),$=on(B1((Ct(20,30,T.length),T.substr(20,10)))),W0(t.j,et,-W,-$)),jK(t,A,T),m=Mr(B1((Ct(34,36,T.length),T.substr(34,2)))),m!=0&&R9(t.j,A,(J1(),or)[X(t.j,A)]+m),i=Mr(B1((Ct(36,39,T.length),T.substr(36,3)))),i!=0&&(i==4?Ne(t.j,A,32):E0(t.j,A,4-i)),g=T.length<63?0:Mr(B1((Ct(60,63,T.length),T.substr(60,3)))),We(t.j,A,g,!1),dZ(t,A,T),M=T.length<51?0:Mr(B1((Ct(48,51,T.length),T.substr(48,3)))),M!=0&&(K==null&&(K=c(F,k,6,b,15,1)),K[A]=M)}for(l=0;l<R;l++){if((T=Y1(e))==null)return!1;n=Q1(B1((Ct(0,3,T.length),T.substr(0,3))),P1,Et)-1,P=Q1(B1((Ct(3,6,T.length),T.substr(3,3))),P1,Et)-1,r=Q1(B1((Ct(6,9,T.length),T.substr(6,3))),P1,Et),x=T.length<12?0:Mr(B1((Ct(9,12,T.length),T.substr(9,3)))),tt=T.length<18?0:Mr(B1((Ct(15,18,T.length),T.substr(15,3)))),r==8&&(t.k||_0(t.j,n)||_0(t.j,P))&&(r=9),KR(t,n,P,r,x,tt)}for(s=0;s<j;s++)if((T=Y1(e))==null)return!1;if((T=Y1(e))==null)return(t.i&1)!=0&&(t.f=Du(t.j)),kk(t,K),t.d||ut(t.j,15),!0;for(;T!=null&&!(at(T,Dr)||at(T,Po));)LZ(t,T),sZ(t,T),sW(t,T),n_(t,T),DW(t,T),OW(t,T),CZ(t,T),(T.startsWith(\"M  SAL\")&&T.length>=17||T.startsWith(\"M  SDT\")&&T.length>=12||T.startsWith(\"M  SED\")&&T.length>=12)&&(!Q&&(Q=new lP),I=(Ct(7,10,T.length),T.substr(7,3)),f=(h=I,WP(Gr(Q,h))),f||(f=new Y2,ze(Q,I,f)),T.startsWith(\"M  SAL\")&&T.startsWith(\"  1\",10)?f.a=Q1(B1((Ct(13,17,T.length),T.substr(13,4))),P1,Et):T.startsWith(\"M  SDT\")?f.b=(Gt(11,T.length+1),T.substr(11)).startsWith(ky):T.startsWith(\"M  SED\")&&(f.c=B1((Gt(11,T.length+1),T.substr(11))))),T=Y1(e)}catch(a){if(a=a1(a),Xt(a,19))return o=a,Zr(o,(z1(),Ti),\"\"),!1;throw At(a)}if(Q)for(D=(C=new rD(Q).a._c().Tb(),new iD(C));D.a.bd();)f=(L=D.a.cd(),L.fd()),f.b&&f.a!=0&&f.c!=null&&EP(t.j,f.a-1,f.c);return t.e&&($Z(t),Q_(t)),(t.i&1)!=0&&(t.f=Du(t.j)),kk(t,K),ut(t.j,15),!0}function dp(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R,j,C;for(this.b=e,this.e=t,this.a=c(Ee,nA,470,this.e.f,0,3),P=0;P<this.e.f;P++)for(this.a[P]=c(Ee,{470:1,4:1,9:1,5:1,8:1},46,Ht(this.e,P),0,2),D=1;D<Ht(this.e,P);D++)this.a[P][D]=c(Ee,PA,6,D,15,1);for(this.c=c(F,k,6,this.e.f,15,1),this.d=c(Ee,PA,6,this.e.f,15,1),this.f=c(F,k,6,this.e.g,15,1),j=Nn(this.e),s=c(Pt,ft,6,j.j.a.length,16,1),Xs(j,s,c(Pt,ft,6,j.j.a.length,16,1),c(F,k,6,j.j.a.length,15,1),!0),f=3;f<=7;f++)for(g=0;g<j.j.a.length;g++)C=N(j.k,g).length,C==f&&(s[g]?ja(this,g):C<=4&&WX(this,g));for(L=c(Pt,ft,6,this.e.f,16,1),T=0;T<j.j.a.length;T++)if(s[T])for(v=N(j.j,T),b=0,R=v.length;b<R;++b)m=v[b],L[m]=!0;for(r=B(d(F,1),k,6,15,[0,0,1,3,6,10,15,21]),n=0;n<this.e.f;n++){if(i=Ht(this.e,n),i>4){for(D=1;D<i;D++)for(l=0;l<D;l++)this.a[n][D][l]=q6;this.c[n]=r[i];continue}if(this.c[n]!=r[i])if(dU(this.e,n)&&(L[n]||Hr(this.e,n)<=4&&$1(this.e,n)>0)){if(i>2){if(this.c[n]==1)X(this.e,n)<=14?A=($p-this.d[n])/2:A=ap+(ap-this.d[n])*.18000000715255737;else if(A=$p-this.d[n],i>3){if(this.c[n]==2){for(y=c(Pt,ft,6,Ht(this.e,n),16,1),Q=1;Q<i;Q++)for(h=0;h<Q;h++)this.a[n][Q][h]!=0&&(y[Q]=!y[Q],y[h]=!y[h]);for(o=0;o<i;o++)if(y[o]){for(h=o+1;h<i;h++)if(y[h]){this.a[n][h][o]=A;break}break}}A=q6}for(D=1;D<i;D++)for(l=0;l<D;l++)this.a[n][D][l]==0&&(this.a[n][D][l]=A)}}else if(dU(this.e,n)&&Hr(this.e,n)<=4)switch(KK(this,n)){case 771:U0(this,n,0,3,2.0653998851776123),U0(this,n,0,0,1.9814722631346626);break;case 1028:U0(this,n,0,4,1.9797999858856201),U0(this,n,0,0,1.94691481878138);break;case 393987:U0(this,n,0,3,tC),U0(this,n,0,6,tC),U0(this,n,3,3,1.7229016938441077);break;case 459779:U0(this,n,0,3,I6),U0(this,n,0,4,I6),U0(this,n,0,7,I6),U0(this,n,3,4,1.9322539839360076);break;case 525316:U0(this,n,0,4,eC),U0(this,n,0,8,eC),U0(this,n,4,4,1.99944913298566);case 394758:U0(this,n,0,6,2.526099920272827);break;case 460550:U0(this,n,0,6,AC),U0(this,n,0,7,AC);break;case 526087:U0(this,n,0,7,nC),U0(this,n,0,8,nC);break;case 526344:U0(this,n,0,8,2.186300039291382);break;case 50529027:U0(this,n,3,3,2.4189000129699707);break;case 67371779:U0(this,n,3,4,2.2298998832702637);break;case 67372036:U0(this,n,4,4,2.094399929046631);break;case 101057283:U0(this,n,3,6,1.839926051241747),U0(this,n,3,3,2.9061476191098734);break;case 117834755:U0(this,n,3,4,2.812249087174905),U0(this,n,3,7,1.7910569124592968),U0(this,n,4,6,2.1224948975613245);break;case 134677507:U0(this,n,3,4,2.642428360523752),U0(this,n,3,8,2.027723514585844),U0(this,n,4,7,2.251474717631936);break;case 117900035:U0(this,n,3,7,2.109753935530918),U0(this,n,3,3,3.1052897491356646);break;case 117900292:U0(this,n,4,7,2.090729910747413),U0(this,n,4,4,2.551671293386306);break;case 134743044:U0(this,n,4,8,2.139250042271712),U0(this,n,4,4,2.3520055858942612)}else for(A=X(this.e,n)>10?PC:$1(this.e,n)==2?k2:SP(this.e,n,!0)?rC:$1(this.e,n)==0?PC:rC,D=1;D<i;D++)for(l=0;l<D;l++)this.a[n][D][l]=A}}function htt(t,e,A,n){var P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R;for(t.A=e,t.a=A,L=vt(w.Math.round((de==-1&&(de=globalThis.devicePixelRatio||1),de*8))),s=B(d(F,1),k,6,15,[L,L/2|0,L*3/2|0,L/2|0,L/2|0,L/2|0,L/2|0,L/2|0,L/2|0,L/2|0,L/2|0,L/2|0,L*3/2|0,L/4|0,L/2|0,L/2|0,L/4|0]),y=B(d(F,1),k,6,15,[L*3/2|0,L/2|0]),l=B(d(F,1),k,6,15,[L,-2,L,-2,L]),R=c(F,k,6,1+2*s.length+(n?2*y.length:0),15,1),T=0,i=s,D=0,o=i.length;D<o;++D)P=i[D],R[T++]=P,R[T++]=-2;if(n)for(r=y,f=0,Q=r.length;f<Q;++f)P=r[f],R[T++]=P,R[T++]=-2;for(R[T++]=L,WU(t.v,l,R),t.b=Dn(t.v,\"Any atomic number\"),zP(t.b,t),Te(t.v,t.b,1,1,3,1),t.w=Ue(t.v,A4),t.D=Ju(t.v,16,1),i0(t.v,t.w,1,3),i0(t.v,t.D,3,3),t.g=UA(t.v),Nt(t.g,B8),Nt(t.g,\"is aromatic\"),Nt(t.g,\"is hetero-aromatic\"),Nt(t.g,\"is not aromatic\"),i0(t.v,Ue(t.v,\"Aromaticity:\"),1,5),i0(t.v,t.g,3,5),t.s=UA(t.v),Nt(t.s,B8),Nt(t.s,\"0 (not in a ring)\"),Nt(t.s,\"0 or 2 (0 or 1 ring)\"),Nt(t.s,\">=2 (any ring count)\"),Nt(t.s,\"2 (in 1 ring)\"),Nt(t.s,\"3 (bridge head; 2 rings)\"),Nt(t.s,\">3 (in more than 2 rings)\"),i0(t.v,Ue(t.v,\"Ring bonds:\"),1,7),i0(t.v,t.s,3,7),t.t=UA(t.v),Nt(t.t,B8),Nt(t.t,\"3 members\"),Nt(t.t,\"4 members\"),Nt(t.t,\"5 members\"),Nt(t.t,\"6 members\"),Nt(t.t,\"7 members\"),i0(t.v,Ue(t.v,\"Smallest ring size:\"),1,9),i0(t.v,t.t,3,9),t.r=UA(t.v),m=_V,v=0,b=m.length;v<b;++v)g=m[v],Nt(t.r,g);for(i0(t.v,Ue(t.v,\"Any ring size:\"),1,11),i0(t.v,t.r,3,11),t.i=UA(t.v),Nt(t.i,B8),Nt(t.i,\"not charged\"),Nt(t.i,\"has negative charge\"),Nt(t.i,\"has positive charge\"),i0(t.v,Ue(t.v,\"Charge:\"),1,13),i0(t.v,t.i,3,13),t.n=UA(t.v),Nt(t.n,B8),Nt(t.n,Oy),Nt(t.n,Gy),Nt(t.n,\"exactly 3\"),Nt(t.n,n4),Nt(t.n,LV),Nt(t.n,Jy),Nt(t.n,P4),Nt(t.n,r4),Nt(t.n,sV),Nt(t.n,i4),Nt(t.n,\"1,2, or 3\"),Nt(t.n,\"2 or 3\"),i0(t.v,Ue(t.v,\"Non-H neighbours:\"),1,15),i0(t.v,t.n,3,15),t.j=UA(t.v),Nt(t.j,B8),Nt(t.j,\"exactly 0\"),Nt(t.j,Oy),Nt(t.j,Gy),Nt(t.j,\"exactly 3\"),Nt(t.j,yV),Nt(t.j,n4),Nt(t.j,LV),Nt(t.j,Jy),Nt(t.j,P4),Nt(t.j,r4),Nt(t.j,sV),Nt(t.j,i4),Nt(t.j,\"1,2, or 3\"),Nt(t.j,\"2 or 3\"),i0(t.v,Ue(t.v,\"Electroneg. neighbours:\"),1,17),i0(t.v,t.j,3,17),t.k=UA(t.v),Nt(t.k,B8),Nt(t.k,\"none\"),Nt(t.k,Oy),Nt(t.k,Gy),Nt(t.k,Jy),Nt(t.k,P4),Nt(t.k,r4),Nt(t.k,yV),Nt(t.k,n4),Nt(t.k,i4),i0(t.v,Ue(t.v,\"Hydrogen count:\"),1,19),i0(t.v,t.k,3,19),t.p=UA(t.v),Nt(t.p,B8),Nt(t.p,\"none\"),Nt(t.p,Oy),Nt(t.p,Gy),Nt(t.p,Jy),i0(t.v,Ue(t.v,\"Pi-electron count:\"),1,21),i0(t.v,t.p,3,21),t.o=UA(t.v),Nt(t.o,B8),h=1;h<15;h++)Nt(t.o,\"\"+(h-7));i0(t.v,Ue(t.v,\"Oxidation state:\"),1,23),i0(t.v,t.o,3,23),t.c=Dn(t.v,\"prohibit further substitution\"),zP(t.c,t),Te(t.v,t.c,1,25,3,25),t.f=Dn(t.v,\"require further substitution\"),zP(t.f,t),Te(t.v,t.f,1,27,3,27),t.u=UA(t.v),Nt(t.u,B8),Nt(t.u,\"is a stereo center\"),Nt(t.u,\"is not a stereo center\"),i0(t.v,Ue(t.v,\"Stereo center:\"),1,29),i0(t.v,t.u,3,29),t.e=Dn(t.v,\"match stereo center\"),Te(t.v,t.e,1,31,3,31),t.d=Dn(t.v,\"is part of exclude group\"),Te(t.v,t.d,1,33,3,33),n&&(Te(t.v,Ue(t.v,\"Stereo center hint for product:\"),1,35,3,35),t.q=UA(t.v),Nt(t.q,\"Copy from generic product\"),Nt(t.q,\"Keep reactant configuration\"),Nt(t.q,\"Invert reactant configuration\"),Nt(t.q,\"Racemise configuration\"),Te(t.v,t.q,1,37,3,37)),ut(t.A,31),Dtt(t)}function Bp(){var t,e,A,n;for(this.b=new LP,this.c=new LP,this.d=new LP,b4=B(d(ptt,1),A0,18,0,[new qt(1,\"Hydrogen\",\"H\",2.2),new qt(2,\"Helium\",\"He\",0),new qt(3,\"Lithium\",\"Li\",.98),new qt(4,\"Beryllium\",\"Be\",1.57),new qt(5,\"Boron\",\"B\",2.04),new qt(6,\"Carbon\",\"C\",2.55),new qt(7,\"Nitrogen\",\"N\",3.04),new qt(8,\"Oxygen\",\"O\",3.44),new qt(9,\"Fluorine\",\"F\",3.98),new qt(10,\"Neon\",\"Ne\",0),new qt(11,\"Sodium\",\"Na\",.93),new qt(12,\"Magnesium\",\"Mg\",1.31),new qt(13,\"Aluminum\",\"Al\",1.61),new qt(14,\"Silicon\",\"Si\",1.9),new qt(15,\"Phosphorus\",\"P\",2.19),new qt(16,\"Sulfur\",\"S\",2.58),new qt(17,\"Chlorine\",\"Cl\",3.16),new qt(18,\"Argon\",\"Ar\",0),new qt(19,\"Potassium\",\"K\",1),new qt(20,\"Calcium\",\"Ca\",1.36),new qt(21,\"Scandium\",\"Sc\",1.54),new qt(22,\"Titanium\",\"Ti\",1.63),new qt(23,\"Vanadium\",\"V\",1.66),new qt(24,\"Chromium\",\"Cr\",1.55),new qt(25,\"Manganese\",\"Mn\",1.83),new qt(26,\"Iron\",\"Fe\",1.88),new qt(27,\"Cobalt\",\"Co\",1.91),new qt(28,\"Nickel\",\"Ni\",1.9),new qt(29,\"Copper\",\"Cu\",1.65),new qt(30,\"Zinc\",\"Zn\",1.81),new qt(31,\"Gallium\",\"Ga\",2.01),new qt(32,\"Germanium\",\"Ge\",0),new qt(33,\"Arsenic\",\"As\",2.18),new qt(34,\"Selenium\",\"Se\",2.55),new qt(35,\"Bromine\",\"Br\",0),new qt(36,\"Krypton\",\"Kr\",2.96),new qt(37,\"Rubidium\",\"Rb\",0),new qt(38,\"Strontium\",\"Sr\",.82),new qt(39,\"Yttrium\",\"Y\",.95),new qt(40,\"Zirconium\",\"Zr\",1.22),new qt(41,\"Niobium\",\"Nb\",1.33),new qt(42,\"Molybdenum\",\"Mo\",1.6),new qt(43,\"Technetium\",\"Tc\",2.16),new qt(44,\"Ruthenium\",\"Ru\",1.9),new qt(45,\"Rhodium\",\"Rh\",2.2),new qt(46,\"Palladium\",\"Pd\",2.28),new qt(47,\"Silver\",\"Ag\",2.2),new qt(48,\"Cadmium\",\"Cd\",1.93),new qt(49,\"Indium\",\"In\",1.69),new qt(50,\"Tin\",\"Sn\",1.78),new qt(51,\"Antimony\",\"Sb\",1.96),new qt(52,\"Tellurium\",\"Te\",0),new qt(53,\"Iodine\",\"I\",2.05),new qt(54,\"Xenon\",\"Xe\",2.1),new qt(55,\"Cesium\",\"Cs\",2.66),new qt(56,\"Barium\",\"Ba\",2.6),new qt(57,\"Lanthanum\",\"La\",.79),new qt(58,\"Cerium\",\"Ce\",.89),new qt(59,\"Praesodymium\",\"Pr\",1.1),new qt(60,\"Neodymium\",\"Nd\",1.12),new qt(61,\"Promethium\",\"Pm\",1.13),new qt(62,\"Samarium\",\"Sm\",1.14),new qt(63,\"Europium\",\"Eu\",0),new qt(64,\"Gadolinium\",\"Gd\",1.17),new qt(65,\"Terbium\",\"Tb\",0),new qt(66,\"Dyprosium\",\"Dy\",1.2),new qt(67,\"Holmium\",\"Ho\",0),new qt(68,\"Erbium\",\"Er\",1.22),new qt(69,\"Thulium\",\"Tm\",1.23),new qt(70,\"Ytterbium\",\"Yb\",1.24),new qt(71,\"Lutetium\",\"Lu\",1.25),new qt(72,\"Hafnium\",\"Hf\",0),new qt(73,\"Tantalium\",\"Ta\",1.27),new qt(74,\"Wolfram\",\"W\",1.3),new qt(75,\"Rhenium\",\"Re\",1.5),new qt(76,\"Osmium\",\"Os\",2.36),new qt(77,\"Iridium\",\"Ir\",1.9),new qt(78,\"Platinum\",\"Pt\",2.2),new qt(79,\"Gold\",\"Au\",2.2),new qt(80,\"Mercury\",\"Hg\",2.28),new qt(81,\"Thallium\",\"Tl\",2.54),new qt(82,\"Lead\",\"Pb\",2),new qt(83,\"Bismuth\",\"Bi\",1.62),new qt(84,\"Polonium\",\"Po\",2.33),new qt(85,\"Astatine\",\"At\",2.02),new qt(86,\"Radon\",\"Rn\",2),new qt(87,\"Francium\",\"Fr\",2.2),new qt(88,\"Radium\",\"Ra\",0),new qt(89,\"Actinium\",\"Ac\",.7),new qt(90,\"Thorium\",\"Th\",.89),new qt(91,\"Protactinium\",\"Pa\",1.1),new qt(92,\"Uranium\",\"U\",1.3),new qt(93,\"Neptunium\",\"Np\",1.5),new qt(94,\"Plutonium\",\"Pu\",1.38),new qt(95,\"Americium\",\"Am\",1.36),new qt(96,\"Curium\",\"Cm\",1.28),new qt(97,\"Berkelium\",\"Bk\",1.3),new qt(98,\"Californium\",\"Cf\",1.3),new qt(99,\"Einsteinium\",\"E\",1.3),new qt(100,\"Fermium\",\"Fm\",1.3),new qt(101,\"Mendelevium\",\"Mv\",1.3)]),e=b4,A=0,n=e.length;A<n;++A)t=e[A],q9(this.b,m1(t.c),t),ED(this.c,t.b,t),ED(this.d,t.d.toLowerCase(),t);this.a=c(Pt,ft,6,b4.length,16,1),this.a[3]=!0,this.a[11]=!0,this.a[19]=!0,this.a[37]=!0,this.a[55]=!0,this.a[87]=!0}function Ttt(t,e,A,n){var P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R,j,C,S,I,x,tt,M,K,et,W,$,a,st,ht,wt,rt,ct,Kt,St,t1,Qt,bt,yt,Yt,V1,r1,D1,Lt,jt,Q0,H1,s0,v1,g1,h0,G0,GA,b0,w1,fe,Ke,gA,hr,m8,QP,oP,en,Tr,xn,An;for(S=c3(t.c,n),w1=new zA,h=0,T=0,xn=null,ht=0;ht<t.o.length;ht++){for(I=d9(t.c,ht),ut(t.o[ht],1),v1=N(e[ht],A[ht]),s0=c(F,k,6,t.o[ht].f,15,1),v=c(Pt,ft,6,t.o[ht].f,16,1),b=c(Pt,ft,6,t.o[ht].g,16,1),Qt=0;Qt<I.f;Qt++)if(v1[Qt]!=-1)if(w.Math.abs(I.w[Qt])==0){for(R=v1[Qt],v[R]=!0,jt=0;jt<O(t.o[ht],R);jt++)b[xt(t.o[ht],R,jt)]=!0;for(Lt=Ht(t.o[ht],R);Lt<De(t.o[ht],R);Lt++)b[xt(t.o[ht],R,Lt)]=!0}else s0[v1[Qt]]=w.Math.abs(I.w[Qt]);for(bt=0;bt<I.g;bt++)if(L=I.D[0][bt],s=I.D[1][bt],w.Math.abs(I.w[L])!=0&&w.Math.abs(I.w[s])!=0&&(f=v1[L],D=v1[s],f!=-1&&D!=-1)){for(Lt=0;Lt<t.o[ht].g;Lt++)if(z(t.o[ht],0,Lt)==f&&z(t.o[ht],1,Lt)==D||z(t.o[ht],0,Lt)==D&&z(t.o[ht],1,Lt)==f){b[Lt]=!0;break}}for(G0=c(F,k,6,t.o[ht].f,15,1),yt=0;yt<t.o[ht].f;yt++)if(!v[yt]&&(G0[yt]=En(t.o[ht],w1,yt,h,T),t.b&&We(w1,G0[yt],t.p[ht][A[ht]][yt],!1),s0[yt]!=0)){for(We(w1,G0[yt],s0[yt],!1),Lt=0;Lt<S.f;Lt++)if(w.Math.abs(S.w[Lt])==s0[yt]){if(E0(w1,G0[yt],S.s[Lt]),Ne(w1,G0[yt],S.u[Lt]&48),t.f[n][Lt])if(b0=d0(t.o[ht],yt),Ke=V(S.B[Lt],w8),G(Ke,0)==0)ce(w1,G0[yt],3,!1);else if(G(Ke,w8)==0)!xn&&(xn=new f1),mt(xn,m1(G0[yt]));else if(b0==1||b0==2){for(rt=G(Ke,lo)==0,Q0=0;Q0<O(t.o[ht],yt);Q0++)if(y=_(t.o[ht],yt,Q0),v[y])for(H1=0;H1<O(t.o[ht],yt);H1++)GA=_(t.o[ht],yt,H1),!v[GA]&&GA>y&&(rt=!rt);rt&&(b0=b0==1?2:1),ce(w1,G0[yt],b0,!1)}else ce(w1,G0[yt],0,!1);break}}for(Yt=0;Yt<t.o[ht].g;Yt++)b[Yt]||iQ(t.o[ht],w1,Yt,h,T,G0,!0);h=$0(w1,1),T=$0(w1,2)}for(h0=c(F,k,6,S.f,15,1),V1=0;V1<S.f;V1++)if(s0=w.Math.abs(S.w[V1]),s0==0)h0[V1]=En(S,w1,V1,h,T);else for(Lt=0;Lt<w1.q;Lt++)if(w.Math.abs(w1.w[Lt])==s0){h0[V1]=Lt;break}if(t.r)for(Qt=0;Qt<S.f;Qt++)Jn(w1,h0[Qt],!0),Be(w1,h0[Qt],S.J[Qt].a),Ie(w1,h0[Qt],S.J[Qt].b);for(x=0;x<S.g;x++)if((S.G[x]&l8)==0&&(fe=e9(S,w1,x,h,T,h0[S.D[0][x]],h0[S.D[1][x]],!1),gA=S.G[x]&31,gA!=0))for(C=!1,Ge(w1,fe,31,!1),tt=R1(S,S.D[0][x]),M=R1(S,S.D[1][x]),st=0;!C&&st<t.c.g.a.length;st++)for(I=d9(t.c,st),W=0;!C&&W<I.g;W++)K=I.D[0][W],et=I.D[1][W],$=w.Math.abs(I.w[K]),a=w.Math.abs(I.w[et]),$!=0&&a!=0&&($==tt&&a==M||$==M&&a==tt)&&(C=!0,An=I.G[W]&31,An!=0&&(v1=N(e[st],A[st]),m8=v1[K],QP=v1[et],oP=u1(t.o[st],m8,QP),Tr=l1(t.o[st],oP),en=dt(t.o[st],oP),An&=7,gA&=7,An==3&&gA==6?(w1.H[fe]=en<=1?2:4,w1.T=0):An==6&&gA==3?(w1.H[fe]=en==3?2:1,w1.T=0):(w1.H[fe]=Tr,w1.T=0)));for(ut(w1,1),g=!1,r1=0;r1<S.f;r1++)w.Math.abs(S.w[r1])==0?(b0=H5(S,r1,h0),ce(w1,h0[r1],b0,!1)):t.f[n][r1]&&fW(t,S,r1,w1,h0[r1])&&(b0=H5(S,r1,h0),ce(w1,h0[r1],b0,!1),(b0==1||b0==2)&&(m=(S.u[r1]&F1)>>18,l=(S.u[r1]&F1)>>18!=1&&(S.u[r1]&F1)>>18!=2?-1:(S.u[r1]&jA)>>20,m==1?l+=h:m==2&&(l+=T),Me(w1,h0[r1],m,l),g=!0));for(g&&(h=$0(w1,1),T=$0(w1,2)),hr=c(Pt,ft,6,S.q,16,1),D1=0;D1<S.f;D1++)t.f[n][D1]&&!hr[D1]&&(S.u[D1]&4)!=0&&t0(V(S.B[D1],w8),0)&&S.j[D1]==w1.j[h0[D1]]&&pW(S,D1,w1,h0);for(wt=c(Pt,ft,6,w1.q,16,1),Kt=h0,St=0,t1=Kt.length;St<t1;++St)ct=Kt[St],wt[ct]=!0;for(j=!0;j;)for(j=!1,o=0;o<w1.r;o++)f=w1.D[0][o],D=w1.D[1][o],wt[f]&&!wt[D]?(wt[D]=!0,j=!0):wt[D]&&!wt[f]&&(wt[f]=!0,j=!0);for(i=0;i<w1.q;i++)dP(w1,i,!wt[i]);if(nQ(w1),!t.b)for(Q=0;Q<w1.q;Q++)w1.w[Q]=0;if(Bf(new c9(w1),null,!1),w1.T|=8,g1=2|(t.r?8:0),A9(new z8(g1),w1),xn)for(ut(w1,15),r=new Zt(xn);r.a<r.c.a.length;)P=$t(r).a,(w1.u[P]&Tn)!=0&&(ce(w1,P,1,!1),Me(w1,P,1,h++));return w1}function ctt(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l;switch(t.hb=e.g,t.kb=e.i,t.w){case 18:if(y=t.hb,l=t.kb,t.e=ZA(t.V,t.hb,t.kb),t.e!=-1&&(t.hb=kt(t.V,t.e),t.kb=pt(t.V,t.e)),rb(t.V,y,l),t.I)for(f=new Zt(t.I);f.a<f.c.a.length;)i=$t(f),i.Qb(y,l);G1(t),t.X=7;break;case 2:if(t.X=0,t.e=ZA(t.V,t.hb,t.kb),t.e!=-1&&(t.f=-1,t.hb=kt(t.V,t.e),t.kb=pt(t.V,t.e),P0(t.V,t.e)?t.X=t.Z?9:4:t.X=3),t.X==0&&(P=wf(t.V,t.hb,t.kb),P!=-1&&(t.e=z(t.V,0,P),t.f=z(t.V,1,P),mP(t.V,P)?t.X=t.Z?9:4:t.X=3)),t.X==0&&t.v&&(t.v.g?t.X=t.Z?9:4:t.X=t.Z&&!Xt(t.v,62)?11:10),t.X!=0){for(t.gb=c(Ut,Tt,6,t.V.q,15,1),t.jb=c(Ut,Tt,6,t.V.q,15,1),D=0;D<t.V.q;D++)t.gb[D]=kt(t.V,D),t.jb[D]=pt(t.V,D);if(t.I)for(f=new Zt(t.I);f.a<f.c.a.length;)i=$t(f),yY(i,t.hb,t.kb);G1(t);break}if(e.a?t.X=6:(t.R=new Cv,Ce(t.R,t.hb,t.kb),Ce(t.R,t.hb,t.kb),t.X=5),t.P=c(Pt,ft,6,t.V.q,16,1),t.I&&(t.Q=c(Pt,ft,6,t.I.a.length,16,1)),t.O=e.f,t.O){for(Q=0;Q<t.V.q;Q++)t.P[Q]=P0(t.V,Q);if(t.I)for(D=0;D<t.I.a.length;D++)t.Q[D]=N(t.I,D).g}else{for(L=!1,Q=0;Q<t.V.q;Q++)P0(t.V,Q)&&(dP(t.V,Q,!1),L=!0);if(t.I)for(D=0;D<t.I.a.length;D++)N(t.I,D).g&&(N(t.I,D).g=!1,L=!0);L&&(t.eb=1,e1(t.k))}break;case 4:G1(t),mK(t,t.hb,t.kb);break;case 3:s=ZA(t.V,t.hb,t.kb),s!=-1&&(G1(t),ZU(t.V,s,!v9(t.V,s)),t.eb=w.Math.max(t.eb,1),e1(t.k),q1(t,new S1(t,1,!0)));break;case 101:case 103:case 102:t.u!=-1&&yN(t,t.u)&&(G1(t),ra(t,t.u,t.w==101?0:t.w==103?1:2),t.eb=w.Math.max(t.eb,1),e1(t.k),q1(t,new S1(t,1,!0)));break;case 5:case 6:case 23:if(t.e=ZA(t.V,t.hb,t.kb),t.e==-1){if(n=wf(t.V,t.hb,t.kb),n!=-1){G1(t),r=511,t.w==6?r=257:t.w==23&&(r=129),o8(t.V,n,r)&&(t.eb=w.Math.max(t.eb,1),e1(t.k),q1(t,new S1(t,1,!0)));break}}else{if(De(t.V,t.e)==8)return;t.hb=kt(t.V,t.e),t.kb=pt(t.V,t.e)}t.X=1,J5(t,t.e),e1(t.k);break;case 22:if(t.e=ZA(t.V,t.hb,t.kb),t.e!=-1){if(De(t.V,t.e)==8)return;t.hb=kt(t.V,t.e),t.kb=pt(t.V,t.e)}t.X=2,t.q=0;break;case 7:G1(t),sf(t.V,t.hb,t.kb,3,!1,rn(t.V,24*t.ab))&&(t.eb=w.Math.max(t.eb,3),e1(t.k),q1(t,new S1(t,1,!0)));break;case 24:G1(t),sf(t.V,t.hb,t.kb,4,!1,rn(t.V,24*t.ab))&&(t.eb=w.Math.max(t.eb,3),e1(t.k),q1(t,new S1(t,1,!0)));break;case 8:G1(t),sf(t.V,t.hb,t.kb,5,!1,rn(t.V,24*t.ab))&&(t.eb=w.Math.max(t.eb,3),e1(t.k),q1(t,new S1(t,1,!0)));break;case 25:G1(t),sf(t.V,t.hb,t.kb,6,!1,rn(t.V,24*t.ab))&&(t.eb=w.Math.max(t.eb,3),e1(t.k),q1(t,new S1(t,1,!0)));break;case 9:G1(t),sf(t.V,t.hb,t.kb,7,!1,rn(t.V,24*t.ab))&&(t.eb=w.Math.max(t.eb,3),e1(t.k),q1(t,new S1(t,1,!0)));break;case 26:G1(t),sf(t.V,t.hb,t.kb,6,!0,rn(t.V,24*t.ab))&&(t.eb=w.Math.max(t.eb,3),e1(t.k),q1(t,new S1(t,1,!0)));break;case 10:G1(t),RB(t.V,t.hb,t.kb,!0)&&(t.eb=w.Math.max(t.eb,3),e1(t.k),q1(t,new S1(t,1,!0)));break;case 27:G1(t),RB(t.V,t.hb,t.kb,!1)&&(t.eb=w.Math.max(t.eb,3),e1(t.k),q1(t,new S1(t,1,!0)));break;case 16:u8(t,1);break;case 11:u8(t,6);break;case 12:u8(t,7);break;case 13:u8(t,8);break;case 28:u8(t,14);break;case 29:u8(t,15);break;case 30:u8(t,16);break;case 14:u8(t,9);break;case 31:u8(t,17);break;case 15:u8(t,35);break;case 32:u8(t,53);break;case 33:e.d||e.a?(A=ZA(t.V,t.hb,t.kb),A!=-1&&tm(t,A,new pA)):(G1(t),GT(t.V,t.hb,t.kb,t.F,t.B,t.D,t.C,t.A)&&(t.t=-1,t.eb=w.Math.max(t.eb,3),e1(t.k),q1(t,new S1(t,1,!0))));break;case 19:t.e=ZA(t.V,t.hb,t.kb),t.e!=-1&&t.e<t.V.f&&(!t.V.K||!Qe(t.V,t.e))&&(t.hb=kt(t.V,t.e),t.kb=pt(t.V,t.e),t.X=8);break;case 21:o=null,t.v?Xt(t.v,93)&&(o=t.v):(o=new UU,Jg(o,t.hb,t.kb),mt(t.I,o)),gx(t,o,new Cw(t))}}function Py(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R,j,C,S,I,x,tt,M,K,et,W,$,a,st,ht,wt,rt,ct;for(this.c=t.length,this.d=t[0].length,M=w.Math.min(this.c,this.d),this.e=c(Ut,Tt,6,w.Math.min(this.c+1,this.d),15,1),this.a=k1(Ut,[T0,Tt],[15,6],15,[this.c,M],2),this.b=k1(Ut,[T0,Tt],[15,6],15,[this.d,this.d],2),P=c(Ut,Tt,6,this.d,15,1),ct=c(Ut,Tt,6,this.c,15,1),x=w.Math.min(this.c-1,this.d),tt=w.Math.max(0,w.Math.min(this.d-2,this.c)),R=0;R<w.Math.max(x,tt);R++){if(R<x){for(this.e[R]=0,L=R;L<this.c;L++)this.e[R]=t2(this.e[R],t[L][R]);if(this.e[R]!=0){for(t[R][R]<0&&(this.e[R]=-this.e[R]),o=R;o<this.c;o++)t[o][R]/=this.e[R];t[R][R]+=1}this.e[R]=-this.e[R]}for(T=R+1;T<this.d;T++){if(R<x&this.e[R]!=0){for(rt=0,L=R;L<this.c;L++)rt+=t[L][R]*t[L][T];for(rt=-rt/t[R][R],o=R;o<this.c;o++)t[o][T]+=rt*t[o][R]}P[T]=t[R][T]}if(!0&R<x)for(o=R;o<this.c;o++)this.a[o][R]=t[o][R];if(R<tt){for(P[R]=0,L=R+1;L<this.d;L++)P[R]=t2(P[R],P[L]);if(P[R]!=0){for(P[R+1]<0&&(P[R]=-P[R]),s=R+1;s<this.d;s++)P[s]/=P[R];P[R+1]+=1}if(P[R]=-P[R],R+1<this.c&P[R]!=0){for(s=R+1;s<this.c;s++)ct[s]=0;for(g=R+1;g<this.d;g++)for(y=R+1;y<this.c;y++)ct[y]+=P[g]*t[y][g];for(m=R+1;m<this.d;m++)for(rt=-P[m]/P[R+1],y=R+1;y<this.c;y++)t[y][m]+=rt*ct[y]}for(o=R+1;o<this.d;o++)this.b[o][R]=P[o]}}for(K=w.Math.min(this.d,this.c+1),x<this.d&&(this.e[x]=t[x][x]),this.c<K&&(this.e[K-1]=0),tt+1<K&&(P[tt]=t[tt][K-1]),P[K-1]=0,v=x;v<M;v++){for(o=0;o<this.c;o++)this.a[o][v]=0;this.a[v][v]=1}for(j=x-1;j>=0;j--)if(this.e[j]!=0){for(h=j+1;h<M;h++){for(rt=0,L=j;L<this.c;L++)rt+=this.a[L][j]*this.a[L][h];for(rt=-rt/this.a[j][j],s=j;s<this.c;s++)this.a[s][h]+=rt*this.a[s][j]}for(y=j;y<this.c;y++)this.a[y][j]=-this.a[y][j];for(this.a[j][j]=1+this.a[j][j],o=0;o<j-1;o++)this.a[o][j]=0}else{for(o=0;o<this.c;o++)this.a[o][j]=0;this.a[j][j]=1}for(C=this.d-1;C>=0;C--){if(C<tt&P[C]!=0)for(h=C+1;h<M;h++){for(rt=0,L=C+1;L<this.d;L++)rt+=this.b[L][C]*this.b[L][h];for(rt=-rt/this.b[C+1][C],s=C+1;s<this.d;s++)this.b[s][h]+=rt*this.b[s][C]}for(o=0;o<this.d;o++)this.b[o][C]=0;this.b[C][C]=1}for(et=K-1,l=0,f=w.Math.pow(2,-52);K>0;){for(b=K-2;b>=-1&&b!=-1;b--)if(w.Math.abs(P[b])<=f*(w.Math.abs(this.e[b])+w.Math.abs(this.e[b+1]))){P[b]=0;break}if(b==K-2)S=4;else{for(I=K-1;I>=b&&I!=b;I--)if(rt=(I!=K?w.Math.abs(P[I]):0)+(I!=b+1?w.Math.abs(P[I-1]):0),w.Math.abs(this.e[I])<=f*rt){this.e[I]=0;break}I==b?S=3:I==K-1?S=1:(S=2,b=I)}switch(++b,S){case 1:for(D=P[K-2],P[K-2]=0,h=K-2;h>=b;h--)for(rt=t2(this.e[h],D),n=this.e[h]/rt,st=D/rt,this.e[h]=rt,h!=b&&(D=-st*P[h-1],P[h-1]=n*P[h-1]),o=0;o<this.d;o++)rt=n*this.b[o][h]+st*this.b[o][K-1],this.b[o][K-1]=-st*this.b[o][h]+n*this.b[o][K-1],this.b[o][h]=rt;break;case 2:for(D=P[b-1],P[b-1]=0,h=b;h<K;h++)for(rt=t2(this.e[h],D),n=this.e[h]/rt,st=D/rt,this.e[h]=rt,D=-st*P[h],P[h]=n*P[h],o=0;o<this.c;o++)rt=n*this.a[o][h]+st*this.a[o][b-1],this.a[o][b-1]=-st*this.a[o][h]+n*this.a[o][b-1],this.a[o][h]=rt;break;case 3:{for(W=w.Math.max(w.Math.max(w.Math.max(w.Math.max(w.Math.abs(this.e[K-1]),w.Math.abs(this.e[K-2])),w.Math.abs(P[K-2])),w.Math.abs(this.e[b])),w.Math.abs(P[b])),ht=this.e[K-1]/W,wt=this.e[K-2]/W,i=P[K-2]/W,a=this.e[b]/W,r=P[b]/W,e=((wt+ht)*(wt-ht)+i*i)/2,A=ht*i*(ht*i),$=0,e!=0|A!=0&&($=w.Math.sqrt(e*e+A),e<0&&($=-$),$=A/(e+$)),D=(a+ht)*(a-ht)+$,Q=a*r,h=b;h<K-1;h++){for(rt=t2(D,Q),n=D/rt,st=Q/rt,h!=b&&(P[h-1]=rt),D=n*this.e[h]+st*P[h],P[h]=n*P[h]-st*this.e[h],Q=st*this.e[h+1],this.e[h+1]=n*this.e[h+1],L=0;L<this.d;L++)rt=n*this.b[L][h]+st*this.b[L][h+1],this.b[L][h+1]=-st*this.b[L][h]+n*this.b[L][h+1],this.b[L][h]=rt;if(rt=t2(D,Q),n=D/rt,st=Q/rt,this.e[h]=rt,D=n*P[h]+st*this.e[h+1],this.e[h+1]=-st*P[h]+n*this.e[h+1],Q=st*P[h+1],P[h+1]=n*P[h+1],h<this.c-1)for(o=0;o<this.c;o++)rt=n*this.a[o][h]+st*this.a[o][h+1],this.a[o][h+1]=-st*this.a[o][h]+n*this.a[o][h+1],this.a[o][h]=rt}P[K-2]=D,l=l+1}break;case 4:{if(this.e[b]<=0)for(this.e[b]=this.e[b]<0?-this.e[b]:0,o=0;o<=et;o++)this.b[o][b]=-this.b[o][b];for(;b<et&&!(this.e[b]>=this.e[b+1]);){if(rt=this.e[b],this.e[b]=this.e[b+1],this.e[b+1]=rt,b<this.d-1)for(o=0;o<this.d;o++)rt=this.b[o][b+1],this.b[o][b+1]=this.b[o][b],this.b[o][b]=rt;if(b<this.c-1)for(o=0;o<this.c;o++)rt=this.a[o][b+1],this.a[o][b+1]=this.a[o][b],this.a[o][b]=rt;++b}l=0,--K}}}}function ry(){ry=d1,k4=B(d(it,2),nA,13,0,[B(d(it,1),Dt,2,6,[\"Acyl\",\"gCaHA`AIf`@\"]),B(d(it,1),Dt,2,6,[\"Alloc\",\"gNph@l@ILzuR@@\"]),B(d(it,1),Dt,2,6,[\"Allyl\",\"Al\"]),B(d(it,1),Dt,2,6,[\"Benzyl;Bn\",\"daD@`F@DjUZxHH@@\"]),B(d(it,1),Dt,2,6,[\"Boc\",\"daxD`@S@AIgijj@@\"]),B(d(it,1),Dt,2,6,[\"BOM;BzOM\",\"deTH`@H@Re[TYj`@@@\"]),B(d(it,1),Dt,2,6,[\"Bs\",\"dmtDpAdLS`aPAIe]jf`@e`@@\"]),B(d(it,1),Dt,2,6,[\"Bt\",\"dew@`@aJ@DiY]paej`@@@\"]),B(d(it,1),Dt,2,6,[\"Btm\",\"did@P@BJ@Die_ahH@@@\"]),B(d(it,1),Dt,2,6,[\"Butyl;nButyl\",\"gJPHB@IRuP@\"]),B(d(it,1),Dt,2,6,[\"Benzoyl;Bz\",\"didH`@p@RYm^Eh@@@@\"]),B(d(it,1),Dt,2,6,[\"Bzh\",\"dg|@`N@LdbRbtJUB]aAP@@@@\"]),B(d(it,1),Dt,2,6,[\"Cbz\",\"dmtD`@S@AIgYVUZh@@@@\"]),B(d(it,1),Dt,2,6,[\"cButyl\",\"gKPHL@IThuT@@\"]),B(d(it,1),Dt,2,6,[\"cHeptyl\",\"daD@`L@DjWVzjj`@\"]),B(d(it,1),Dt,2,6,[\"cHexyl\",\"gOpHL@IToWUU@@\"]),B(d(it,1),Dt,2,6,[\"cOctyl\",\"did@`L@DjWWajjj@@\"]),B(d(it,1),Dt,2,6,[\"cPentyl\",\"gFpHL@ITimUP@\"]),B(d(it,1),Dt,2,6,[\"cPropyl\",\"gBPHL@Qxjh@\"]),B(d(it,1),Dt,2,6,[\"COOH\",\"gC`h@l@ILt@@ !Bb@K~@Hc}\"]),B(d(it,1),Dt,2,6,[\"DEAE\",\"daz@`@x@RiUjj`@\"]),B(d(it,1),Dt,2,6,[\"DEIPS\",\"diD@P@\\\\B@DjfVjj`@\"]),B(d(it,1),Dt,2,6,[\"DMIPS\",\"gNpD@xD@RjZjh@\"]),B(d(it,1),Dt,2,6,[\"DMPM\",\"dcLD`@kPCIEMDdcttDDT@@\"]),B(d(it,1),Dt,2,6,[\"DMPS\",\"deT@P@\\\\B@LddTjPsU@@@@\"]),B(d(it,1),Dt,2,6,[\"DMTr\",\"fak@b@@Mt@ISZ{SMjo{NQKfm@AU@@@E@@@@\"]),B(d(it,1),Dt,2,6,[\"DNP\",\"dkmB`hdDt~@HeNfS{HihheCAUhBHX@@\"]),B(d(it,1),Dt,2,6,[\"DNS;Dan\",\"fhi`a@KPP@HH@YIHYheEhYKQgKP@@QP@@@\"]),B(d(it,1),Dt,2,6,[\"DPIPS\",\"fdyAA@H@\\\\B@FRRIQSQIHzp_Qjh@h@@@@@\"]),B(d(it,1),Dt,2,6,[\"DPTBS\",\"fleAA@H@\\\\B@FRRIQSRIIWNbEMU@EP@@@@@\"]),B(d(it,1),Dt,2,6,[\"DTBMS\",\"dmT@P@\\\\B@Djffjjjh@@\"]),B(d(it,1),Dt,2,6,[\"Ethyl\",\"eMBD@ch@\"]),B(d(it,1),Dt,2,6,[\"Fmoc\",\"fde@b@@Hp@IL{LrjxeVCzKUT@@@P@@@\"]),B(d(it,1),Dt,2,6,[\"iAmyl\",\"gGPHJ@YIDZj@@\"]),B(d(it,1),Dt,2,6,[\"iButyl\",\"gJPHB@ITuP@\"]),B(d(it,1),Dt,2,6,[\"Im\",\"gFtHAj@IRnKSP@\"]),B(d(it,1),Dt,2,6,[\"iPropyl\",\"gC`HL@Qz`@\"]),B(d(it,1),Dt,2,6,[\"MDIPS\",\"diD@P@\\\\B@DjfZjj`@\"]),B(d(it,1),Dt,2,6,[\"MDPS\",\"foA@A@@NA@CIIEEBdeeVLzj@@@@@@\"]),B(d(it,1),Dt,2,6,[\"Methyl\",\"eFBH@c@@\"]),B(d(it,1),Dt,2,6,[\"MEM\",\"gNphAR@IRoUT@@\"]),B(d(it,1),Dt,2,6,[\"Mes\",\"deT@`J@DjY{[`bB`@@\"]),B(d(it,1),Dt,2,6,[\"MMTr\",\"ffcAB@@Z@Dim]ifuWYrI\\\\uh@Jh@@@@@@\"]),B(d(it,1),Dt,2,6,[\"MOM\",\"gCaHA`AJZ`@\"]),B(d(it,1),Dt,2,6,[\"MPM;PMB\",\"deTH`@d@Rfuunh@J@@\"]),B(d(it,1),Dt,2,6,[\"Ms\",\"gJPdH`DD@cuh@\"]),B(d(it,1),Dt,2,6,[\"MTM\",\"gC`D@DX@Rfh@\"]),B(d(it,1),Dt,2,6,[\"mTolyl\",\"daD@`N@DjWjXHB@@\"]),B(d(it,1),Dt,2,6,[\"N3\",\"gClHaE`@RnReX@\"]),B(d(it,1),Dt,2,6,[\"nAmyl;Amyl\",\"gGPHJ@IRmU@@\"]),B(d(it,1),Dt,2,6,[\"neoAm\",\"gGPHJ@IUMU@@\"]),B(d(it,1),Dt,2,6,[\"NO2,Nitro\",\"gChhhE`BRnRYh@\"]),B(d(it,1),Dt,2,6,[\"Np\",\"deVDaHAI@HeNR[e_aZ@B@@\"]),B(d(it,1),Dt,2,6,[\"nPropyl;Propyl\",\"gC`HL@IST@@\"]),B(d(it,1),Dt,2,6,[\"oTolyl\",\"daD@`J@DjYvxH`@@\"]),B(d(it,1),Dt,2,6,[\"Phenyl\",\"gOpHL@IToVD@@@\"]),B(d(it,1),Dt,2,6,[\"Pht\",\"dcLL`@RU@Dfyed]ZBA`@@\"]),B(d(it,1),Dt,2,6,[\"Piv;Pv\",\"gNqHA`AIffj`@\"]),B(d(it,1),Dt,2,6,[\"PMBM\",\"dcLD`@T`AJUm]FZh@J@@\"]),B(d(it,1),Dt,2,6,[\"PNB\",\"dcNLaHAEt@bTyInUvxV`@f@@\"]),B(d(it,1),Dt,2,6,[\"Poc\",\"didD`@S@AIgexVjj`@\"]),B(d(it,1),Dt,2,6,[\"PPi\",\"diDFsHSB[`|J|A@Lxn{lddqdZih@@\"]),B(d(it,1),Dt,2,6,[\"pTolyl\",\"daD@`N@DjWzXHB@@\"]),B(d(it,1),Dt,2,6,[\"sAmyl\",\"gGPHL@YIDZj@@\"]),B(d(it,1),Dt,2,6,[\"sButyl\",\"gJPHL@ITuP@\"]),B(d(it,1),Dt,2,6,[\"SEM\",\"diDHPFApD@rRQUJjj`@\"]),B(d(it,1),Dt,2,6,[\"SES\",\"dedDpHP@``AgCIICeHmUT@@\"]),B(d(it,1),Dt,2,6,[\"SO3H\",\"gJQdHl@``D^m@@\"]),B(d(it,1),Dt,2,6,[\"tAmyl\",\"gGPHB@IUMU@@\"]),B(d(it,1),Dt,2,6,[\"TBDMS;TBS\",\"dax@P@\\\\B@Djfjjh@@\"]),B(d(it,1),Dt,2,6,[\"TBDPS\",\"fdy@A@@NA@CIIEEEIde]XOhuPAT@@@@@\"]),B(d(it,1),Dt,2,6,[\"TBMPS\",\"dg\\\\HPHApH@rRQJJPjg]UAT@@@\"]),B(d(it,1),Dt,2,6,[\"tButyl,tBu\",\"gJPHB@Q}T@@\"]),B(d(it,1),Dt,2,6,[\"TDS\",\"ded@P@\\\\B@LddTeeUUP@@\"]),B(d(it,1),Dt,2,6,[\"Tf\",\"daxDhHP@``BiAiCiCIICHmU@@\"]),B(d(it,1),Dt,2,6,[\"TFA\",\"gNqBJIARFdF@YEHYUL@@\"]),B(d(it,1),Dt,2,6,[\"Thexyl\",\"gNpHB@IUMUT@@\"]),B(d(it,1),Dt,2,6,[\"THF\",\"gFqH@PAJYujj@@\"]),B(d(it,1),Dt,2,6,[\"THP\",\"gOqH@PAJYZzjh@\"]),B(d(it,1),Dt,2,6,[\"TIPS\",\"dmT@P@\\\\B@DjfYjjjh@@\"]),B(d(it,1),Dt,2,6,[\"TMS\",\"gJPD@xD@czh@\"]),B(d(it,1),Dt,2,6,[\"Tosyl;Ts\",\"dmtDPHP@``CIICLeaeZ@B@@\"]),B(d(it,1),Dt,2,6,[\"Troc\",\"diDDHJxHaHcH`PCHiBeJjf@@\"]),B(d(it,1),Dt,2,6,[\"Trt\",\"fbm@B@A@FRQIRKQPiIZdoIcdHJ`@@@@@@\"]),B(d(it,1),Dt,2,6,[\"Xyl\",\"did@`J@DjYynBHH@@\"])])}function P6(t,e,A,n,P,r){var i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R,j;if(e[A-1]==36){if(t.r=!0,t.q=new f1,A+=tj(t,e,A-1,t.q)-1,e[A++]!=93){if(!r)throw At(new C1(\"SmilesParser: A positive recursive SMARTS followed by another one or by atom query features is not supported. Position:\"+(A-1)));(t.k&128)==0&&(A=eK(e,A))}return A}if(e[A-1]==42)t.d=6,t.c=Y(t.c,1);else if(e[A-1]==63)t.d=0;else if(Q=e[A-1]==33,Q&&(t.r=!0,t.c=Y(t.c,1),++A),e[A-1]==82&&P&&(Xn(e[A]&c1)||t.j&&e[A]==123))t.d=6,t.c=Y(t.c,1),--A,Q&&--A;else{if(o=new Nw,!zj(t,e,A-1,n,o))throw At(new C1(\"SmilesParser: Unexpected character in atom definition:'\"+String.fromCharCode(e[A-1]&c1)+Gp+(A-1)));if(t.d=o.a,A+=o.b-1,(t.k&3)!=2&&(t.g=9),P&&(e[A]==44||Q)){for(y=o.d,s=o.c,v=A-o.b;v<n;){if(!zj(t,e,v,n,o)){if(!Q)throw At(new C1(\"SmilesParser: Unexpected character in atom list:'\"+String.fromCharCode(e[v]&c1)+Jp+v));break}if(o.a==1){if(!Q)throw At(new C1(\"SmilesParser: Hydrogen is not supported in positive atom lists:'\"+mN((IU(v<=n,v+\" > \"+n),j=e.length,im(v,v,j),RP(e,c(E,q,6,n-v,15,1),v,n)))+Jp+v))}else wx(t,o.a),y=y|o.d,s=s|o.c;if(v+=o.b,Q&&e[v]!=59&&e[v]!=38||!Q&&e[v]!=44||Q&&e[v+1]!=33)break;++v,e[v]==33&&++v}t.b&&t.b.d.a.length>1&&(t.g=-1,s?y||(t.c=Y(t.c,4)):t.c=Y(t.c,2)),A=v}}for(h=new bw(e),g=c(F,k,6,1,15,1),m=!0;m;){if(e[A]==64){++A,e[A]==64&&(t.i=!0,++A),t.p=!0;continue}if(e[A]==58){for(++A;Xn(e[A]&c1);)t.o=10*t.o+e[A]-48,++A;continue}if(e[A]==91)throw At(new C1(\"SmilesParser: nested square brackets found. Position:\"+A));if(e[A]==93){++A,m=!1;continue}if(t.e=xk(e,A,g),g[0]!=0){A+=g[0],t.e==0&&(t.c=Y(t.c,WQ));continue}if(D=e[A]==33,D&&++A,e[A]==72){++A,A+=df(h,A,1),i=0,h.c<=0&&h.b>=0&&(i=Y(i,128)),h.c<=1&&h.b>=1&&(i=Y(i,256)),h.c<=2&&h.b>=2&&(i=Y(i,512)),h.c<=3&&h.b>=3&&(i=Y(i,re)),D?(t.c=Y(t.c,i),t.g=-1):h.b==h.c?t.g=h.c:(t.c=Y(t.c,V(PP,Gn(i))),t.g=-1);continue}if(e[A]==68||e[A]==100){++A,A+=df(h,A,1),i=0,h.c<=0&&h.b>=0&&(i=Y(i,I0)),h.c<=1&&h.b>=1&&(i=Y(i,T8)),h.c<=2&&h.b>=2&&(i=Y(i,h8)),h.c<=3&&h.b>=3&&(i=Y(i,c8)),h.c<=4&&h.b>=4&&(i=Y(i,IA)),G(i,0)!=0&&(D?t.c=Y(t.c,i):gt(V(t.c,oi),0)?t.c=V(t.c,Gn(i)):(i=O9(i,oi),t.c=Y(t.c,i)));continue}if(e[A]==122&&t.j){++A,A+=df(h,A,4),i=0,h.c<=0&&h.b>=0&&(i=Y(i,g2)),h.c<=1&&h.b>=1&&(i=Y(i,zp)),h.c<=2&&h.b>=2&&(i=Y(i,Yp)),h.c<=3&&h.b>=3&&(i=Y(i,Kp)),h.c<=4&&h.b>=4&&(i=Y(i,aQ)),G(i,0)!=0&&(D?t.c=Y(t.c,i):gt(V(t.c,Hf),0)?t.c=V(t.c,Gn(i)):(i=O9(i,Hf),t.c=Y(t.c,i)));continue}if(e[A]==88){if(++A,A+=df(h,A,1),R=(J1(),L9)[t.d],R==null)continue;b=R[0],L=xk(e,A,g),g[0]!=0&&(_9(t.d)?b+=L:t.d==6?b-=w.Math.abs(L):b-=L),i=0,b-h.c<=0&&b-h.b>=0&&(i=Y(i,Sn)),b-h.c<=1&&b-h.b>=1&&(i=Y(i,y8)),b-h.c<=2&&b-h.b>=2&&(i=Y(i,u0)),G(i,0)!=0&&(D?t.c=Y(t.c,i):gt(V(t.c,Qi),0)?t.c=V(t.c,Gn(i)):(i=O9(i,Qi),t.c=Y(t.c,i)));continue}if(e[A]==65||e[A]==97){t.c=Y(t.c,D^e[A]==65?4:2),++A;continue}if(e[A]==82){++A,A+=df(h,A,3),i=0,h.c<=0&&h.b>=0&&(i=Y(i,8)),h.c<=1&&h.b>=1&&(i=Y(i,16)),h.c<=2&&h.b>=2&&(i=Y(i,32)),h.c<=3&&h.b>=3&&(i=Y(i,64)),h.b>3&&xu(t.n,(D?\"!R\":\"R\")+h.b),G(i,0)!=0&&(D?t.c=Y(t.c,i):gt(V(t.c,120),0)?t.c=V(t.c,Gn(i)):(i=O9(i,120),t.c=Y(t.c,i)));continue}if(e[A]==114){if(++A,A+=df(h,A,1),h.a){D?t.c=Y(t.c,384):t.c=Y(t.c,8);continue}T=h.c,h.b>h.c&&xu(t.n,(D?\"!r\":\"r\")+(\"{\"+h.c+\"-\"+h.b+\"}\")),!D&&T>=3&&T<=7?t.c=Y(t.c,T<<22):h.b>h.c||xu(t.n,(D?\"!r\":\"r\")+T);continue}if(e[A]==118){++A,A+=df(h,A,1),b=h.c,h.b>h.c&&xu(t.n,(D?\"!v\":\"v\")+(\"{\"+h.c+\"-\"+h.b+\"}\")),!D&&b<=14?t.a=b:h.b>h.c||xu(t.n,(D?\"!v\":\"v\")+b);continue}if(e[A]==94){if(++A,f=e[A++]-48,f<1||f>3)throw At(new C1(\"SmilesParser: Unsupported hybridization. Position:\"+A));l=f==1?u0:f==2?y8:Sn,D||(l=V(Qi,Gn(l))),t.c=Y(t.c,l);continue}if(e[A]==36){if(!D)throw At(new C1(\"SmilesParser: non-negated recursive SMARTS relating to preceding atom are not supported yet. Position:\"+A));!t.f&&(t.f=new f1),t.r=!0,A+=tj(t,e,A,t.f);continue}if(P&&(e[A]==59||e[A]==38)){t.r=!0,++A;continue}if(P&&e[A]==44&&oZ(e,A,g)){t.r=!0,A+=g[0]+1;continue}if(P&&e[A]==44&&(t.k&128)!=0){t.r=!0,A+=1;break}throw e[A]==44?At(new C1(\"SmilesParser: alternative atom definitions not supported. (Tip: enumerate SMARTS): '\"+String.fromCharCode(e[A]&c1)+M6+A)):At(new C1(\"SmilesParser: unexpected character inside brackets: '\"+String.fromCharCode(e[A]&c1)+M6+A))}return A}function r6(t,e){var A,n,P,r;A=e[1],n=e[2],P=t.j[A]-1,r=t.j[n]-1,P>3||r>3?(this.b=c(zt,_t,6,4,15,1),this.b[0]=45,this.b[1]=135,this.b[2]=225,this.b[2]=315,this.c=k1(zt,[ee,_t],[16,6],15,[4,2],2),this.c[0][0]=30,this.c[0][1]=60,this.c[1][0]=120,this.c[1][1]=150,this.c[2][0]=210,this.c[2][1]=240,this.c[2][0]=300,this.c[2][1]=330,this.a=c(zt,_t,6,4,15,1),this.a[0]=25,this.a[1]=25,this.a[2]=25,this.a[3]=25):(t.o[A]==0||t.C[A]>9)&&(t.o[n]==0||t.C[n]>9)?P==3&&r==3||P==3&&r==2||P==3&&r==1||P==2&&r==3||P==1&&r==3||P==2&&r==2&&(e[0]!=-1||e[3]!=-1)?(this.b=c(zt,_t,6,3,15,1),this.b[0]=60,this.b[1]=180,this.b[2]=300,this.c=k1(zt,[ee,_t],[16,6],15,[3,2],2),this.c[0][0]=45,this.c[0][1]=75,this.c[1][0]=165,this.c[1][1]=195,this.c[2][0]=285,this.c[2][1]=315,this.a=c(zt,_t,6,3,15,1),this.a[0]=33,this.a[1]=33,this.a[2]=33):P==1&&r==2&&e[3]==-1||P==2&&r==1&&e[0]==-1?(this.b=c(zt,_t,6,3,15,1),this.b[0]=60,this.b[1]=180,this.b[2]=300,this.c=k1(zt,[ee,_t],[16,6],15,[3,2],2),this.c[0][0]=45,this.c[0][1]=75,this.c[1][0]=165,this.c[1][1]=195,this.c[2][0]=285,this.c[2][1]=315,this.a=c(zt,_t,6,3,15,1),this.a[0]=40,this.a[1]=20,this.a[2]=40):(P==1&&r==1||P==1&&r==2&&e[3]!=-1||P==2&&r==1&&e[0]!=-1||P==2&&r==2&&e[0]==-1&&e[3]==-1)&&(this.b=c(zt,_t,6,3,15,1),this.b[0]=60,this.b[1]=180,this.b[2]=300,this.c=k1(zt,[ee,_t],[16,6],15,[3,2],2),this.c[0][0]=45,this.c[0][1]=75,this.c[1][0]=165,this.c[1][1]=195,this.c[2][0]=285,this.c[2][1]=315,this.a=c(zt,_t,6,3,15,1),this.a[0]=25,this.a[1]=50,this.a[2]=25):(t.o[A]==0||t.C[A]>9)&&t.o[n]==1||(t.o[n]==0||t.C[n]>9)&&t.o[A]==1?P==3||r==3?(this.b=c(zt,_t,6,6,15,1),this.b[0]=0,this.b[1]=60,this.b[2]=120,this.b[3]=180,this.b[4]=240,this.b[5]=300,this.c=k1(zt,[ee,_t],[16,6],15,[6,2],2),this.c[0][0]=-15,this.c[0][1]=15,this.c[1][0]=45,this.c[1][1]=75,this.c[2][0]=105,this.c[2][1]=135,this.c[3][0]=165,this.c[3][1]=195,this.c[4][0]=225,this.c[4][1]=255,this.c[5][0]=285,this.c[5][1]=315,this.a=c(zt,_t,6,6,15,1),this.a[0]=16,this.a[1]=16,this.a[2]=16,this.a[3]=16,this.a[4]=16,this.a[5]=16):P==1&&r==1?(this.b=c(zt,_t,6,2,15,1),this.b[0]=120,this.b[1]=240,this.c=k1(zt,[ee,_t],[16,6],15,[2,2],2),this.c[0][0]=105,this.c[0][1]=135,this.c[1][0]=225,this.c[1][1]=255,this.a=c(zt,_t,6,2,15,1),this.a[0]=50,this.a[1]=50):t.o[A]==1&&P==2&&r==1||t.o[n]==1&&r==2&&P==1?(this.b=c(zt,_t,6,2,15,1),this.b[0]=90,this.b[1]=270,this.c=k1(zt,[ee,_t],[16,6],15,[2,2],2),this.c[0][0]=75,this.c[0][1]=105,this.c[1][0]=255,this.c[1][1]=285,this.a=c(zt,_t,6,2,15,1),this.a[0]=50,this.a[1]=50):t.o[A]==1&&P==1&&r==2&&e[3]==-1||t.o[n]==1&&r==1&&P==2&&e[0]==-1?(this.b=c(zt,_t,6,3,15,1),this.b[0]=0,this.b[1]=120,this.b[2]=240,this.c=k1(zt,[ee,_t],[16,6],15,[3,2],2),this.c[0][0]=-15,this.c[0][1]=15,this.c[1][0]=105,this.c[1][1]=135,this.c[2][0]=225,this.c[2][1]=255,this.a=c(zt,_t,6,3,15,1),this.a[0]=60,this.a[1]=20,this.a[2]=20):t.o[A]==1&&P==1&&r==2&&e[3]!=-1||t.o[n]==1&&r==1&&P==2&&e[0]!=-1?(this.b=c(zt,_t,6,3,15,1),this.b[0]=0,this.b[1]=120,this.b[2]=240,this.c=k1(zt,[ee,_t],[16,6],15,[3,2],2),this.c[0][0]=-15,this.c[0][1]=15,this.c[1][0]=105,this.c[1][1]=135,this.c[2][0]=225,this.c[2][1]=255,this.a=c(zt,_t,6,3,15,1),this.a[0]=20,this.a[1]=40,this.a[2]=40):P==2&&r==2&&(e[0]==-1||e[3]==-1?(this.b=c(zt,_t,6,2,15,1),this.b[0]=0,this.b[1]=180,this.c=k1(zt,[ee,_t],[16,6],15,[2,2],2),this.c[0][0]=-15,this.c[0][1]=15,this.c[1][0]=165,this.c[1][1]=195,this.a=c(zt,_t,6,2,15,1),this.a[0]=50,this.a[1]=50):(this.b=c(zt,_t,6,2,15,1),this.b[0]=90,this.b[1]=270,this.c=k1(zt,[ee,_t],[16,6],15,[2,2],2),this.c[0][0]=75,this.c[0][1]=105,this.c[1][0]=255,this.c[1][1]=285,this.a=c(zt,_t,6,2,15,1),this.a[0]=50,this.a[1]=50)):t.o[A]==1&&t.o[n]==1?P==1&&r==1?(this.b=c(zt,_t,6,2,15,1),this.b[0]=0,this.b[1]=180,this.c=k1(zt,[ee,_t],[16,6],15,[2,2],2),this.c[0][0]=-15,this.c[0][1]=15,this.c[1][0]=165,this.c[1][1]=195,this.a=c(zt,_t,6,2,15,1),this.a[0]=10,this.a[1]=90):(this.b=c(zt,_t,6,6,15,1),this.b[0]=0,this.b[1]=50,this.b[2]=130,this.b[3]=180,this.b[4]=230,this.b[5]=310,this.c=k1(zt,[ee,_t],[16,6],15,[6,2],2),this.c[0][0]=-15,this.c[0][1]=15,this.c[1][0]=35,this.c[1][1]=65,this.c[2][0]=115,this.c[2][1]=145,this.c[3][0]=165,this.c[3][1]=195,this.c[4][0]=215,this.c[4][1]=245,this.c[5][0]=295,this.c[5][1]=325,this.a=c(zt,_t,6,6,15,1),this.a[0]=40,this.a[1]=5,this.a[2]=5,this.a[3]=40,this.a[4]=5,this.a[5]=5):(this.b=c(zt,_t,6,1,15,1),this.b[0]=180,this.c=k1(zt,[ee,_t],[16,6],15,[1,2],2),this.c[0][0]=165,this.c[0][1]=195,this.a=c(zt,_t,6,1,15,1),this.a[0]=100)}function vp(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R,j,C,S,I,x,tt,M,K,et,W,$,a,st,ht,wt,rt,ct;for(x=(z1(),$A),J(t.b,\"M  V30 BEGIN CTAB\"+x),J(t.b,Ep+e.q+\" \"+e.r+\" 0 0 0\"+x),J(t.b,\"M  V30 BEGIN ATOM\"+x),D=0;D<e.q;D++){if(J(t.b,ro+(D+1)),(e.v==null?null:e.v[D])!=null){for(s=e.v==null?null:e.v[D],tt=gt(V(e.B[D],1),0),J(t.b,tt?\" NOT[\":\" [\"),j=0;j<s.length;j++)switch(j>0&&J(t.b,\",\"),C=(J1(),X0)[s[j]],C.length){case 2:case 3:case 1:J(t.b,C);break;default:J(t.b,\"?\")}J(t.b,\"]\")}else gt(V(e.B[D],1),0)?J(t.b,\" A\"):e.C[D]>=129&&e.C[D]<=144||e.C[D]==154?J(t.b,\" R#\"):J(t.b,\" \"+(J1(),X0)[e.C[D]]);if(A?(J(t.b,\" \"+vt(AP*t.c*e.J[D].a)/AP),J(t.b,\" \"+vt(AP*t.c*-e.J[D].b)/AP),J(t.b,\" \"+vt(AP*t.c*-e.J[D].c)/AP)):J(t.b,\" 0 0 0\"),J(t.b,\" \"+w.Math.abs(e.w[D])),e.s[D]!=0&&J(t.b,\" CHG=\"+e.s[D]),(e.u[D]&48)!=0)switch(J(t.b,\" RAD=\"),e.u[D]&48){case 16:J(t.b,\"1\");break;case 32:J(t.b,\"2\");break;case 48:J(t.b,\"3\")}((e.u[D]&3)==1||(e.u[D]&3)==2)&&(J(t.b,\" CFG=\"),(e.u[D]&3)==1?J(t.b,\"1\"):J(t.b,\"2\")),e.A[D]!=0&&J(t.b,\" MASS=\"+e.A[D]),ct=((e.u[D]&d8)>>>27)-1,ct!=-1&&J(t.b,\" VAL=\"+(ct==0?\"-1\":m1(ct))),y=e.C[D],(y>=129&&y<=144||y==154)&&J(t.b,\" RGROUPS=(1 \"+(y==154?0:y>=142?y-141:y-125)+\")\"),R=V(PP,e.B[D]),G(R,384)==0?J(t.b,\" HCOUNT=2\"):G(R,128)==0?J(t.b,\" HCOUNT=1\"):G(R,1792)==0?J(t.b,\" HCOUNT=-1\"):G(R,1664)==0&&J(t.b,\" HCOUNT=1\"),ht=V(e.B[D],6144),G(ht,0)!=0&&(gt(V(ht,C0),0)?J(t.b,\" SUBST=\"+(e.e[D]+1)):J(t.b,\" SUBST=-1\")),$=V(e.B[D],120),G($,0)!=0&&(G($,112)==0?J(t.b,\" RBCNT=-1\"):G($,8)==0||G($,104)==0?J(t.b,\" RBCNT=2\"):G($,88)==0?J(t.b,\" RBCNT=3\"):G($,56)==0&&J(t.b,\" RBCNT=4\")),J(t.b,x)}for(J(t.b,\"M  V30 END ATOM\"+x),J(t.b,\"M  V30 BEGIN BOND\"+x),h=0;h<e.r;h++){switch(J(t.b,ro+(h+1)),e.H[h]){case 1:et=1,st=0;break;case 2:et=2,st=0;break;case 4:et=3,st=0;break;case 129:et=1,st=3;break;case 257:et=1,st=1;break;case 386:et=2,st=2;break;case 8:et=4,st=0;break;case 16:et=9,st=0;break;default:et=1,st=0}g=e.G[h]&31,g!=0&&(g==8?et=4:g==3?et=5:g==9?et=6:g==10?et=7:et=8),J(t.b,\" \"+et+\" \"+(e.D[0][h]+1)+\" \"+(e.D[1][h]+1)),st!=0&&J(t.b,\" CFG=\"+st),a=e.G[h]&384,wt=a==0?0:a==256?1:2,wt!=0&&J(t.b,\" TOPO=\"+wt),J(t.b,x)}for(J(t.b,\"M  V30 END BOND\"+x),v=!1,Q=0;Q<e.q;Q++)if((e.t==null||e.t[Q]==null?null:fn((S=e.t[Q],c0(),S)))!=null){v=!0;break}if(v){for(J(t.b,\"M  V30 BEGIN SGROUP\"+x),m=0,o=0;o<e.q;o++)(e.t==null||e.t[o]==null?null:fn((I=e.t[o],c0(),I)))!=null&&(++m,J(t.b,ro+m+\" DAT \"+m+\" ATOMS=(1 \"+(o+1)+') FIELDNAME=\"'+ky+'\" -'+x),J(t.b,'M  V30 FIELDDISP=\"'),Kv(t,A?t.c*e.J[o].a:0),Kv(t,A?t.c*e.J[o].b:0),J(t.b,'    DA    ALL  1       5\" FIELDDATA=\"'+(e.t==null||e.t[o]==null?null:fn((S=e.t[o],c0(),S)))+'\"'+x));J(t.b,\"M  V30 END SGROUP\"+x)}for(W=!1,n=0,M=c(F,k,6,32,15,1),r=c(F,k,6,32,15,1),L=0;L<e.f;L++)((e.u[L]&3)==1||(e.u[L]&3)==2)&&(W=!0,rt=(e.u[L]&F1)>>18,rt==1?++r[(e.u[L]&F1)>>18!=1&&(e.u[L]&F1)>>18!=2?-1:(e.u[L]&jA)>>20]:rt==2?++M[(e.u[L]&F1)>>18!=1&&(e.u[L]&F1)>>18!=2?-1:(e.u[L]&jA)>>20]:++n);for(P=0,K=c(F,k,6,32,15,1),i=c(F,k,6,32,15,1),T=0;T<e.g;T++)dt(e,T)!=2&&((e.F[T]&3)==1||(e.F[T]&3)==2)&&(W=!0,rt=(e.F[T]&768)>>8,rt==1?++i[(e.F[T]&768)>>8!=1&&(e.F[T]&768)>>8!=2?-1:(e.F[T]&hn)>>10]:rt==2?++K[(e.F[T]&768)>>8!=1&&(e.F[T]&768)>>8!=2?-1:(e.F[T]&hn)>>10]:++P);if(W){if(J(t.b,\"M  V30 BEGIN COLLECTION\"+x),n!=0){for(J(t.b,\"M  V30 MDLV30/STEABS ATOMS=(\"+n),f=0;f<e.f;f++)((e.u[f]&3)==1||(e.u[f]&3)==2)&&(e.u[f]&F1)>>18==0&&J(t.b,\" \"+(f+1));J(t.b,\")\"+x)}if(P!=0){for(J(t.b,\"M  V30 MDLV30/STEABS BONDS=(\"+P),l=0;l<e.g;l++)dt(e,l)!=2&&((e.F[l]&3)==1||(e.F[l]&3)==2)&&(e.F[l]&768)>>8==0&&J(t.b,\" \"+(l+1));J(t.b,\")\"+x)}for(b=0;b<32;b++){if(M[b]!=0){for(J(t.b,Sp+(b+1)+\" ATOMS=(\"+M[b]),f=0;f<e.f;f++)((e.u[f]&3)==1||(e.u[f]&3)==2)&&(e.u[f]&F1)>>18==2&&((e.u[f]&F1)>>18!=1&&(e.u[f]&F1)>>18!=2?-1:(e.u[f]&jA)>>20)==b&&J(t.b,\" \"+(f+1));J(t.b,\")\"+x)}if(r[b]!=0){for(J(t.b,qp+(b+1)+\" ATOMS=(\"+r[b]),f=0;f<e.f;f++)((e.u[f]&3)==1||(e.u[f]&3)==2)&&(e.u[f]&F1)>>18==1&&((e.u[f]&F1)>>18!=1&&(e.u[f]&F1)>>18!=2?-1:(e.u[f]&jA)>>20)==b&&J(t.b,\" \"+(f+1));J(t.b,\")\"+x)}if(K[b]!=0){for(J(t.b,Sp+(b+1)+\" BONDS=(\"+K[b]),l=0;l<e.g;l++)dt(e,l)!=2&&((e.F[l]&3)==1||(e.F[l]&3)==2)&&(e.F[l]&768)>>8==2&&((e.F[l]&768)>>8!=1&&(e.F[l]&768)>>8!=2?-1:(e.F[l]&hn)>>10)==b&&J(t.b,\" \"+(l+1));J(t.b,\")\"+x)}if(i[b]!=0){for(J(t.b,qp+(b+1)+\" BONDS=(\"+i[b]),l=0;l<e.g;l++)dt(e,l)!=2&&((e.F[l]&3)==1||(e.F[l]&3)==2)&&(e.F[l]&768)>>8==1&&((e.F[l]&768)>>8!=1&&(e.F[l]&768)>>8!=2?-1:(e.F[l]&hn)>>10)==b&&J(t.b,\" \"+(l+1));J(t.b,\")\"+x)}}J(t.b,\"M  V30 END COLLECTION\"+x)}J(t.b,R6+x)}function wtt(t){var e,A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R,j,C,S,I,x,tt,M,K,et,W,$,a,st,ht,wt,rt,ct,Kt,St,t1,Qt,bt,yt,Yt,V1,r1,D1,Lt,jt,Q0,H1,s0,v1;if(W3(t,!1),Ot(t,9,4),jt=w.Math.max(G8(t.R.f),G8(t.R.g)),Ot(t,jt,4),jt==0){Ot(t,t.R.K?1:0,1),Ot(t,0,1),t.J=HL(t);return}for(Q0=s0=H1=K=0,D=0;D<t.R.f;D++)if(t0(V(y0(t.R,D),1),0)){switch(X(t.R,D)){case 6:break;case 7:++Q0;break;case 8:++s0;break;default:++H1}b1(t.R,D)!=0&&++K}for(Ot(t,t.R.f,jt),Ot(t,t.R.g,jt),Ot(t,Q0,jt),Ot(t,s0,jt),Ot(t,H1,jt),Ot(t,K,jt),Q=0;Q<t.R.f;Q++)X(t.R,t.B[Q])==7&&t0(V(y0(t.R,t.B[Q]),1),0)&&Ot(t,Q,jt);for(s=0;s<t.R.f;s++)X(t.R,t.B[s])==8&&t0(V(y0(t.R,t.B[s]),1),0)&&Ot(t,s,jt);for(y=0;y<t.R.f;y++)X(t.R,t.B[y])!=6&&X(t.R,t.B[y])!=7&&X(t.R,t.B[y])!=8&&t0(V(y0(t.R,t.B[y]),1),0)&&(Ot(t,y,jt),Ot(t,X(t.R,t.B[y]),8));for(l=0;l<t.R.f;l++)b1(t.R,t.B[l])!=0&&t0(V(y0(t.R,t.B[l]),1),0)&&(Ot(t,l,jt),Ot(t,8+b1(t.R,t.B[l]),4));for(D1=0,R=0,h=1;h<t.R.f;h++)t.F[h]==-1?st=0:(st=1+t.F[h]-R,R=t.F[h]),D1<st&&(D1=st);for(a=G8(D1),Ot(t,a,4),R=0,T=1;T<t.R.f;T++)t.F[T]==-1?st=0:(st=1+t.F[T]-R,R=t.F[T]),Ot(t,st,a);for(St=0;St<2*t.I;St++)Ot(t,t.D[St],jt);for(C=0;C<t.R.g;C++)M=(Ae(t.R,t.C[C])&l8)!=0||l1(t.R,t.C[C])==16?1:O8(t.R,t.C[C])?0:w.Math.min(3,dt(t.R,t.C[C])),Ot(t,M,2);if(A=0,(t.Q&N1)==0)for(g=0;g<t.R.f;g++)t._[t.B[g]]!=0&&t._[t.B[g]]!=3&&++A;if(Ot(t,A,jt),(t.Q&N1)==0)for(g=0;g<t.R.f;g++)t._[t.B[g]]!=0&&t._[t.B[g]]!=3&&(Ot(t,g,jt),t.bb[t.B[g]]==0?Ot(t,t._[t.B[g]],3):(v1=t._[t.B[g]]==1?t.bb[t.B[g]]==1?4:6:t.bb[t.B[g]]==1?5:7,Ot(t,v1,3),Ot(t,t.ab[t.B[g]],3)));if(e=0,(t.Q&N1)==0)for(S=0;S<t.R.g;S++)t.j[t.C[S]]!=0&&t.j[t.C[S]]!=3&&(!$P(t.R,t.C[S])||l1(t.R,t.C[S])==1)&&++e;if(Ot(t,e,jt),(t.Q&N1)==0)for(S=0;S<t.R.g;S++)t.j[t.C[S]]!=0&&t.j[t.C[S]]!=3&&(!$P(t.R,t.C[S])||l1(t.R,t.C[S])==1)&&(Ot(t,S,jt),l1(t.R,t.C[S])==1?t.n[t.C[S]]==0?Ot(t,t.j[t.C[S]],3):(v1=t.j[t.C[S]]==1?t.n[t.C[S]]==1?4:6:t.n[t.C[S]]==1?5:7,Ot(t,v1,3),Ot(t,t.k[t.C[S]],3)):Ot(t,t.j[t.C[S]],2));for(Ot(t,t.R.K?1:0,1),$=0,m=0;m<t.R.f;m++)ye(t.R,t.B[m])!=0&&++$;if($!=0)for(tP(t,1),Ot(t,$,jt),g=0;g<t.R.f;g++)ye(t.R,t.B[g])!=0&&(Ot(t,g,jt),Ot(t,ye(t.R,t.B[g]),8));if(t.w=0,t.R.K){for(hA(t,0,jt,N1,1,-1),hA(t,3,jt,C0,1,-1),hA(t,4,jt,120,4,3),hA(t,5,jt,ly,2,1),hA(t,6,jt,1,1,-1),hA(t,7,jt,PP,4,7),$=0,g=0;g<t.R.f;g++)MA(t.R,t.B[g])!=null&&++$;if($>0){for(tP(t,8),Ot(t,$,jt),v=0;v<t.R.f;v++)if(b=MA(t.R,t.B[v]),b!=null)for(Ot(t,v,jt),Ot(t,b.length,4),P=b,r=0,i=P.length;r<i;++r)n=P[r],Ot(t,n,8)}ei(t,9,jt,384,2,7),ei(t,10,jt,31,5,0),hA(t,11,jt,ge,1,-1),ei(t,12,jt,l8,8,9),hA(t,13,jt,Qi,3,14),hA(t,14,jt,oi,5,17),hA(t,16,jt,fr,3,22)}for($=0,o=0;o<t.R.f;o++)t.a!=null&&t.a[t.B[o]]!=-1&&++$;if($!=0)for(tP(t,17),Ot(t,$,jt),g=0;g<t.R.f;g++)t.a!=null&&t.a[t.B[g]]!=-1&&(Ot(t,g,jt),Ot(t,t.a[t.B[g]],4));if(rt=0,wt=0,ht=0,(t.Q&8)!=0||(t.Q&re)!=0){for($=0,r1=0,g=0;g<t.R.f;g++)if(bt=Wn(t.R,t.B[g]),bt!=null){if(V1=wT(bt),bt.length>15||V1>127){rt<bt.length&&(rt=w.Math.min(63,bt.length)),wt<V1&&(wt=V1),++ht;continue}++$,r1=w.Math.max(r1,bt.length)}if($!=0){for(yt=G8(r1),tP(t,18),Ot(t,$,jt),Ot(t,yt,4),v=0;v<t.R.f;v++)if(bt=Wn(t.R,t.B[v]),bt!=null&&bt.length<=15&&wT(bt)<=127)for(Ot(t,v,jt),Ot(t,bt.length,yt),Kt=0;Kt<bt.length;Kt++)Ot(t,(Gt(Kt,bt.length),bt.charCodeAt(Kt)),7)}}for(t.R.K&&(hA(t,19,jt,ir,3,25),ei(t,20,jt,qP,3,17)),$=0,L=0;L<t.R.f;L++)mA(t.R,t.B[L])!=0&&++$;if($!=0)for(tP(t,21),Ot(t,$,jt),f=0;f<t.R.f;f++)mA(t.R,t.B[f])!=0&&(Ot(t,f,jt),Ot(t,mA(t.R,t.B[f])>>4,2));if(t.R.K&&(hA(t,22,jt,o9,1,-1),ei(t,23,jt,c8,1,-1),ei(t,24,jt,Ao,2,21)),(t.Q&16)!=0){for(f=0;f<t.R.f;f++)if(P0(t.R,t.B[f])){for(tP(t,25),n=0;n<t.R.f;n++)Ot(t,P0(t.R,t.B[n])?1:0,1);break}}if(t1=J_(t),t1!=null){for($=0,S=0;S<t.R.g;S++)t1[t.C[S]]&&++$;for(tP(t,26),Ot(t,$,jt),I=0;I<t.R.g;I++)t1[t.C[I]]&&Ot(t,I,jt)}for(t.R.K&&hA(t,27,jt,a0,1,-1),$=0,x=0;x<t.R.g;x++)l1(t.R,t.C[x])==16&&++$;if($!=0)for(tP(t,28),Ot(t,$,jt),S=0;S<t.R.g;S++)l1(t.R,t.C[S])==16&&Ot(t,S,jt);for(t.R.K&&(hA(t,29,jt,w8,2,30),hA(t,30,jt,r9,7,32),hA(t,32,jt,F6,2,44),hA(t,33,jt,Hf,5,39),hA(t,34,jt,ZQ,1,-1),ei(t,35,jt,Mf,1,-1),ei(t,36,jt,96,2,5)),$=0,tt=0;tt<t.R.g;tt++)(l1(t.R,t.C[tt])==32||l1(t.R,t.C[tt])==64)&&++$;if($!=0)for(tP(t,37),Ot(t,$,jt),j=0;j<t.R.g;j++)(l1(t.R,t.C[j])==32||l1(t.R,t.C[j])==64)&&(Ot(t,j,jt),Ot(t,l1(t.R,t.C[j])==32?0:1,1));if(t.b&&(t.Q&16)!=0){for($=0,et=0,g=0;g<t.R.f;g++){for(W=0,Qt=O(t.R,t.B[g]);Qt<Ht(t.R,t.B[g]);Qt++)P0(t.R,_(t.R,t.B[g],Qt))&&(ct=Qt-O(t.R,t.B[g]),W|=1<<ct,et=w.Math.max(et,ct+1));W!=0&&++$}if($!=0)for(tP(t,38),Ot(t,$,jt),Ot(t,et,3),f=0;f<t.R.f;f++){for(W=0,Qt=O(t.R,t.B[f]);Qt<Ht(t.R,t.B[f]);Qt++)P0(t.R,_(t.R,t.B[f],Qt))&&(ct=Qt-O(t.R,t.B[f]),W|=1<<ct);W!=0&&(Ot(t,f,jt),Ot(t,W,et))}}if(t.R.K&&hA(t,39,jt,d2,4,47),ht!=0){for(yt=G8(rt),Lt=G8(wt),tP(t,40),Ot(t,ht,jt),Ot(t,yt,6),Ot(t,Lt,16),f=0;f<t.R.f;f++)if(bt=Wn(t.R,t.B[f]),bt!=null&&(bt.length>15||wT(bt)>127))for(Ot(t,f,jt),Yt=w.Math.min(63,bt.length),Ot(t,Yt,yt),Kt=0;Kt<Yt;Kt++)Ot(t,(Gt(Kt,bt.length),bt.charCodeAt(Kt)),Lt)}Ot(t,0,1),t.J=HL(t)}function i6(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R,j,C,S,I,x,tt,M,K,et,W,$,a,st,ht,wt,rt,ct,Kt,St,t1,Qt,bt,yt,Yt,V1,r1,D1,Lt,jt,Q0,H1;for(this.b=new s3((rt=my,rt)),bt=(z1(),$A),ut(t,15),st=!0,P=0;P<t.f;P++)if((t.u[P]&3)!=0&&(t.u[P]&3)!=3&&(t.u[P]&F1)>>18!=1){st=!1;break}if(Kt=-1,st){for(M=c(F,k,6,32,15,1),St=0,r=0;r<t.f;r++)if((t.u[r]&3)!=0&&(t.u[r]&3)!=3&&(t.u[r]&F1)>>18==1){et=(t.u[r]&F1)>>18!=1&&(t.u[r]&F1)>>18!=2?-1:(t.u[r]&jA)>>20,++M[et],St<M[et]&&(St=M[et],Kt=et);break}}for(this.a=A||new V0,Qt=t.P!=null?t.P:\"\",J(this.a,Qt+bt),J(this.a,\"Actelion Java MolfileCreator 1.0\"+bt+bt),g0(this,t.q),g0(this,t.r),J(this.a,\"  0  0\"),g0(this,st?0:1),J(this.a,\"  0  0  0  0  0999 V2000\"+bt),W=t.q==1,Q=1;Q<t.q;Q++)if(t.J[Q].a!=t.J[0].a||t.J[Q].b!=t.J[0].b||t.J[Q].c!=t.J[0].c){W=!0;break}if(K=1,W)if(e!=0)K=e;else if(v=wP(t,t.q,t.r,(J1(),gn)),v!=0)(v<1||v>3)&&(K=1.5/v);else{for(t1=Ve,r=1;r<t.q;r++)for(D=0;D<r;D++)I=t.J[D].a-t.J[r].a,x=t.J[D].b-t.J[r].b,tt=t.J[D].c-t.J[r].c,S=I*I+x*x+tt*tt,t1>S&&(t1=S);K=3/t1}for(o=0;o<t.q;o++)W?(zu(this,K*t.J[o].a),zu(this,K*-t.J[o].b),zu(this,K*-t.J[o].c)):J(this.a,\"    0.0000    0.0000    0.0000\"),(t.v==null?null:t.v[o])!=null?J(this.a,\" L  \"):gt(V(t.B[o],1),0)?J(this.a,\" A  \"):t.C[o]>=129&&t.C[o]<=144||t.C[o]==154?J(this.a,\" R# \"):(T=(J1(),X0)[t.C[o]],J(this.a,\" \"+T),T.length==1?J(this.a,\"  \"):T.length==2&&J(this.a,\" \")),J(this.a,\" 0  0  0\"),$=V(PP,t.B[o]),G($,0)==0?J(this.a,\"  0\"):G($,384)==0?J(this.a,\"  3\"):G($,128)==0?J(this.a,\"  2\"):G($,1792)==0?J(this.a,\"  1\"):G($,1664)==0&&J(this.a,\"  2\"),J(this.a,gt(V(t.B[o],ge),0)?\"  1\":\"  0\"),H1=((t.u[o]&d8)>>>27)-1,H1==-1?J(this.a,\"  0\"):H1==0?J(this.a,\" 15\"):g0(this,H1),J(this.a,\"  0  0  0\"),g0(this,w.Math.abs(t.w[o])),J(this.a,\"  0  0\"+bt);for(b=0;b<t.r;b++){switch(t.H[b]){case 1:Yt=1,Lt=0;break;case 2:Yt=2,Lt=0;break;case 4:Yt=3,Lt=0;break;case 129:Yt=1,Lt=6;break;case 257:Yt=1,Lt=1;break;case 386:Yt=2,Lt=3;break;case 8:Yt=4,Lt=0;break;case 16:Yt=8,Lt=0;break;default:Yt=1,Lt=0}st&&(Lt==1||Lt==6)&&(r=t.D[0][b],(t.u[r]&F1)>>18==2?Lt=0:(t.u[r]&F1)>>18==1&&((t.u[r]&F1)>>18!=1&&(t.u[r]&F1)>>18!=2?-1:(t.u[r]&jA)>>20)!=Kt&&(Lt=4)),R=t.G[b]&31,R!=0&&(R==8?Yt=4:R==3?Yt=5:R==9?Yt=6:R==10?Yt=7:Yt=8),r1=t.G[b]&384,Q0=r1==0?0:r1==256?1:2,g0(this,1+t.D[0][b]),g0(this,1+t.D[1][b]),g0(this,Yt),g0(this,Lt),J(this.a,\"  0\"),g0(this,Q0),J(this.a,\"  0\"+bt)}for(yt=0,L=0;L<t.q;L++)t.s[L]!=0&&++yt;if(yt!=0)for(C=0,r=0;r<t.q;r++)t.s[r]!=0&&(C==0&&(J(this.a,\"M  CHG\"),g0(this,w.Math.min(8,yt))),J(this.a,\" \"),g0(this,r+1),j=t.s[r],j<0?(J(this.a,\"  -\"),j=-j):J(this.a,\"   \"),Oe(this.a,48+j&c1),--yt,(++C==8||yt==0)&&(C=0,J(this.a,bt)));for(yt=0,s=0;s<t.q;s++)t.A[s]==0||++yt;if(yt!=0)for(C=0,r=0;r<t.q;r++)t.A[r]!=0&&(C==0&&(J(this.a,\"M  ISO\"),g0(this,w.Math.min(8,yt))),J(this.a,\" \"),g0(this,r+1),J(this.a,\" \"),g0(this,t.A[r]),--yt,(++C==8||yt==0)&&(C=0,J(this.a,bt)));for(yt=0,y=0;y<t.q;y++)(t.u[y]&48)!=0&&++yt;if(yt!=0){for(C=0,r=0;r<t.q;r++)if((t.u[r]&48)!=0){switch(C==0&&(J(this.a,\"M  RAD\"),g0(this,w.Math.min(8,yt))),J(this.a,\" \"),g0(this,r+1),t.u[r]&48){case 16:J(this.a,\"   1\");break;case 32:J(this.a,\"   2\");break;case 48:J(this.a,\"   3\")}--yt,(++C==8||yt==0)&&(C=0,J(this.a,bt))}}for(yt=0,l=0;l<t.q;l++)(t.C[l]>=129&&t.C[l]<=144||t.C[l]==154)&&++yt;if(yt!=0)for(C=0,r=0;r<t.q;r++)m=t.C[r],(m>=129&&m<=144||m==154)&&(C==0&&(J(this.a,\"M  RGP\"),g0(this,w.Math.min(8,yt))),J(this.a,\" \"),g0(this,r+1),J(this.a,\" \"),g0(this,m==154?0:m>=142?m-141:m-125),--yt,(++C==8||yt==0)&&(C=0,J(this.a,bt)));if(t.K){for(yt=0,r=0;r<t.q;r++)gt(V(t.B[r],120),0)&&++yt;if(yt!=0)for(C=0,D=0;D<t.q;D++)V1=V(t.B[D],120),G(V1,0)!=0&&(C==0&&(J(this.a,\"M  RBC\"),g0(this,w.Math.min(8,yt))),J(this.a,\" \"),g0(this,D+1),G(V1,112)==0?J(this.a,\"  -1\"):G(V1,8)==0?J(this.a,\"   1\"):G(V1,104)==0?J(this.a,\"   2\"):G(V1,88)==0?J(this.a,\"   3\"):G(V1,56)==0&&J(this.a,\"   4\"),--yt,(++C==8||yt==0)&&(C=0,J(this.a,bt)));for(h=0;h<t.q;h++)if(g=t.v==null?null:t.v[h],g!=null){for(J(this.a,\"M  ALS \"),g0(this,h+1),g0(this,g.length),J(this.a,gt(V(t.B[h],1),0)?\" T \":\" F \"),a=0;a<g.length;a++)switch(ht=(J1(),X0)[g[a]],ht.length){case 1:J(this.a,ht+\"   \");break;case 2:J(this.a,ht+\"  \");break;case 3:J(this.a,ht+\" \");break;default:J(this.a,\"   ?\")}J(this.a,bt)}for(yt=0,i=0;i<t.q;i++)gt(V(t.B[i],6144),0)&&++yt;if(yt!=0)for(C=0,D=0;D<t.q;D++)jt=V(t.B[D],6144),G(jt,0)!=0&&(C==0&&(J(this.a,\"M  SUB\"),g0(this,w.Math.min(8,yt))),J(this.a,\" \"),g0(this,D+1),gt(V(jt,C0),0)?J(this.a,\"   \"+(t.e[D]+1)):J(this.a,\"  -2\"),--yt,(++C==8||yt==0)&&(C=0,J(this.a,bt)))}for(yt=0,f=0;f<t.q;f++)(t.t==null||t.t[f]==null?null:fn((ct=t.t[f],c0(),ct)))!=null&&++yt;if(yt!=0)for(D1=0,n=0;n<t.q;n++)ht=t.t==null||t.t[n]==null?null:fn((wt=t.t[n],c0(),wt)),ht!=null&&(++D1,J(this.a,\"M  STY  1 \"),g0(this,D1),J(this.a,\" DAT\"),J(this.a,bt),J(this.a,\"M  SLB  1 \"),g0(this,D1),J(this.a,\" \"),g0(this,D1),J(this.a,bt),J(this.a,\"M  SAL \"),g0(this,D1),J(this.a,\"  1 \"),g0(this,n+1),J(this.a,bt),J(this.a,\"M  SDT \"),g0(this,D1),J(this.a,\" \"),J(this.a,ky),J(this.a,bt),J(this.a,\"M  SDD \"),g0(this,D1),J(this.a,\" \"),zu(this,t.J[n].a),zu(this,t.J[n].b),J(this.a,\"    DA    ALL  1       5\"),J(this.a,bt),J(this.a,\"M  SED \"),g0(this,D1),J(this.a,\" \"),J(this.a,ht),J(this.a,bt));J(this.a,Dr+bt)}function f6(t,e,A,n,P,r,i){var f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R,j,C,S,I,x,tt,M,K,et,W,$,a,st,ht,wt,rt,ct,Kt,St,t1,Qt,bt,yt,Yt,V1,r1,D1,Lt,jt,Q0,H1,s0,v1,g1,h0;for(t.k=e,vi(t.k),t.s=new LP,t.a=new $g,t.r&&Qn(t.r,0),t.b=0,t.p=!1,Q=t.q!=0,bt=null,l=c(F,k,6,32,15,1),l[0]=-1,yt=c(F,k,6,16,15,1),r1=c(F,k,6,16,15,1),V1=c(F,k,6,16,15,1),Yt=c(F,k,6,16,15,1),W=0;W<16;W++)yt[W]=-1;for(s=0,I=-1,D1=!1,ht=!1,M=!1,v=0,g=1,T=0;A[n]<=32;)++n;for(;n<P;){if(Lt=A[n++]&c1,kB(Lt)||Lt==42||Lt==63||Lt==33&&Q&&D1||Lt==35&&Q&&D1||Lt==36&&Q&&D1){if(y=new WF(t,t.j|t.q),D1)if((t.j&128)!=0){if(j=new b7(n-1),n=P6(y,A,n,P,!0,!0),A[n-1]!=93){for(;A[n-1]!=93;)n=P6(y,A,n+1,P,!0,!0),++j.a;t.f.add(j)}}else n=P6(y,A,n,P,Q,!1);else n=v_(y,A,n,P,Q);if(D1=!1,y.q&&N(y.q,0)){I=l[v],l[v]=e.q,kD(e,y.q?N(y.q,0):null),I!=-1&&g!=512&&(h=O0(t.k,I,I,g),T!=0&&(t.p=!0,Ge(t.k,h,T,!0),Cs(t.k,h))),g=1,T=0;continue}if(y.d==-1&&Lt!=63)throw At(new C1(\"SmilesParser: unknown element label found. Position:\"+(n-1)));y.r&&(t.p=!0),L=M$(y,t.k,Lt,n),z0(t.k,L)&&++t.b,I=l[v],I!=-1&&g!=512&&(h=O0(t.k,I,L,g),T!=0&&(t.p=!0,Ge(t.k,h,T,!0),Cs(t.k,h))),g=1,T=0,l[v]=L,s!=0&&(R9(t.k,L,s),s=0),i&&(t1=bt?le(bt,m1(I)):null,t1&&Yu(t1,L,(wt=n,y.d==1&&ye(t.k,L)==0,wt)),y.p&&(!bt&&(bt=new lP),K=y.g==9?0:y.g,ze(bt,m1(L),new dk(t,L,n-2,I,K,y.i))));continue}if(Lt==46){l[v]=-1,g=512;continue}if(Lt==45||Lt==61||Lt==35||Lt==36||Lt==58||Lt==47||Lt==92||Lt==60||Lt==126||Lt==33||Lt==64){if(D1)throw At(new C1(\"SmilesParser: unexpected bond symbol inside square brackets: '\"+String.fromCharCode(Lt)+M6+(n-1)));for(C=0;Lt==45||Lt==61||Lt==35||Lt==36||Lt==58||Lt==47||Lt==92||Lt==60||Lt==126||Lt==33||Lt==64;){if(Lt==33)if(Lt=A[n++]&c1,Lt==64)T|=128;else if(Lt==45&&A[n]==62||Lt==60&&A[n]==45)C|=16,++n;else if(Lt==45)C|=1;else if(Lt==61)C|=2;else if(Lt==35)C|=4;else if(Lt==36)C|=32;else if(Lt==58)C|=8;else throw At(new C1(\"SmilesParser: bond symbol '\"+String.fromCharCode(Lt)+\"' not allowed after '!'. Position:\"+(n-1)));else if(Lt==64?T|=256:Lt==61?g=2:Lt==35?g=4:Lt==36?g=32:Lt==58?g=8:Lt==126?T|=15:Lt==47?i&&(g=257):Lt==92?i&&(g=129):(Lt==45&&A[n]==62||Lt==60&&A[n]==45)&&(g=16,++n),A[n]==44)for(T|=(g==16?62:Lt)==61?2:(g==16?62:Lt)==35?4:(g==16?62:Lt)==36?32:(g==16?62:Lt)==58?8:(g==16?62:Lt)==62?16:(g==16?62:Lt)==126?127:1;A[n]==44;)A[n+1]==60&&A[n+2]==45||A[n+1]==45&&A[n+2]==62?(T|=16,n+=3):(T|=(A[n+1]&c1)==61?2:(A[n+1]&c1)==35?4:(A[n+1]&c1)==36?32:(A[n+1]&c1)==58?8:(A[n+1]&c1)==62?16:(A[n+1]&c1)==126?127:1,n+=2);if(A[n]==59){++n,Lt=A[n++]&c1;continue}C!=0&&(T|=127&~C);break}continue}if(Lt<=32){n=P;continue}if(Xn(Lt)){if(ct=Lt-48,D1){for(;n<P&&Xn(A[n]&c1);)ct=10*ct+A[n]-48,++n;s=ct}else{if(m=ht?n-3:n-2,tt=A[m]==45||A[m]==47||A[m]==92||A[m]==61||A[m]==35||A[m]==36||A[m]==58||A[m]==62||A[m]==126,ht&&n<P&&Xn(A[n]&c1)&&(ct=10*ct+A[n]-48,ht=!1,++n),ct>=yt.length){if(ct>=100)throw At(new C1(\"SmilesParser: ringClosureAtom number out of range: \"+ct));for(Kt=yt.length,rt=yt.length;rt<=ct;)rt=w.Math.min(100,rt+16);for(yt=(r8(rt),RP(yt,c(F,k,6,rt,15,1),0,rt)),r1=(r8(rt),RP(r1,c(F,k,6,rt,15,1),0,rt)),V1=(r8(rt),RP(V1,c(F,k,6,rt,15,1),0,rt)),Yt=(r8(rt),RP(Yt,c(F,k,6,rt,15,1),0,rt)),$=Kt;$<rt;$++)yt[$]=-1}if(yt[ct]==-1)yt[ct]=l[v],r1[ct]=n-1,V1[ct]=tt?g:-1,Yt[ct]=tt?T:0;else{if(yt[ct]==l[v])throw At(new C1(\"SmilesParser: ring closure to same atom\"));i&&bt&&(t1=le(bt,m1(yt[ct])),t1&&Yu(t1,l[v],r1[ct]),t1=le(bt,m1(l[v])),t1&&Yu(t1,yt[ct],n-1)),V1[ct]!=-1?g=V1[ct]:g==257?g=129:g==129&&(g=257),f=yt[ct],D=l[v],h=(h0=O0(t.k,f,D,g),ED(t.s,f+\"_\"+D,B(d(F,1),k,6,15,[r1[ct],n-1])),ED(t.s,D+\"_\"+f,B(d(F,1),k,6,15,[r1[ct],n-1])),gv(t.a,f),gv(t.a,D),h0),Yt[ct]!=0&&(T=Yt[ct]),T!=0&&(t.p=!0,Ge(t.k,h,Yt[ct],!0),Cs(t.k,h)),yt[ct]=-1}g=1,T=0}continue}if(Lt==43)throw At(new C1(\"SmilesParser: '+' found outside brackets. Position:\"+(n-1)));if(Lt==40){if(l[v]==-1){M=!0;continue}++v,l.length==v&&(l=bn(l,l.length+32)),l[v]=l[v-1];continue}if(Lt==41){if(v==0){if(!M)throw At(new C1(\"SmilesParser: Closing ')' without opening counterpart. Position:\"+(n-1)));l[0]=-1,M=!1;continue}--v;continue}if(Lt==91){D1=!0;continue}if(Lt==93)throw At(new C1(\"SmilesParser: closing bracket at unexpected position:\"+(n-1)));if(Lt==37){ht=!0;continue}throw At(new C1(\"SmilesParser: unexpected character outside brackets: '\"+String.fromCharCode(Lt)+Gp+(n-1)))}if(g!=1)throw At(new C1(\"SmilesParser: dangling open bond; position:\"+n));for(a=0;a<yt.length;a++)if(yt[a]!=-1)throw At(new C1(\"SmilesParser: dangling ring closure: \"+a+\"; position:\"+n));for(x=Du(t.k),t.k.S=!0,ut(t.k,1),o=0;o<t.k.q;o++)if(Wn(t.k,o)!=null)if(S=Z3(t.k,o)[0],t.p||t.q==2){if(S!=9)if(t.i)for(et=0;et<S;et++)O0(t.k,o,Wr(t.k,1),1);else S==0&&h1(t.k,o,1792,!0),S==1&&h1(t.k,o,1664,!0),S==2&&h1(t.k,o,1408,!0),S==3&&h1(t.k,o,896,!0)}else{if(S==9&&(S=0),!_0(t.k,o)&&(!z0(t.k,o)||X(t.k,o)==6&&b1(t.k,o)==0)){for(g1=Ku(X(t.k,o)),b=!1,jt=x1(t.k,o),jt-=Bu(t.k,o,jt),jt+=S,z0(t.k,o)&&++jt,H1=g1,s0=0,v1=H1.length;s0<v1;++s0)if(Q0=H1[s0],jt<=Q0){b=!0,Q0==jt+2?Ne(t.k,o,48):Q0==jt+1?Ne(t.k,o,32):(Q0!=jt||Q0!=g1[0])&&XA(t.k,o,jt);break}b||XA(t.k,o,jt)}if(t.i||!es(t.k,o))for(et=0;et<S;et++)O0(t.k,o,Wr(t.k,1),1)}else!t.i&&(t.p||t.q==2)&&(S=b3(t.k,o),S>=1&&h1(t.k,o,128,!0),S>=2&&h1(t.k,o,256,!0),S>=3&&h1(t.k,o,512,!0),S>=4&&h1(t.k,o,re,!0));if(!t.i&&(t.p||t.q==2)&&w5(t.k,!1),ut(t.k,1),nZ(t),ett(t,Q,t.p),t.k.t=null,t.k.S=!1,i&&(T$(t),bt)){for(Qt=(St=new rD(bt).a._c().Tb(),new iD(St));Qt.a.bd();)t1=(R=Qt.a.cd(),R.fd()),ce(t.k,x[t1.a],FZ(t1,x),!1);UD(t.k,0)}UD(t.k,0),r&&(st=new z8(t.d),gt(t.n,0)&&B7(st,t.n),A9(st,t.k),i&&S3(t.k)),(t.p||t.q==2)&&(je(t.k,!0),bj(t.k),eR(t.k))}function Fp(){Fp=d1,jo=B(d(it,2),nA,13,0,[B(d(it,1),Dt,2,6,[\"e\",\"daXJ@@PjyITuiX@`!dahJ@@SJYIMMfPB#IaLJfxP IaAhl[`#!BDpAl@AL@[@Be}aL@[@@ !B|Osp?QZR?O_}}zGze`@##\"]),B(d(it,1),Dt,2,6,[\"g\",\"gBa`@lde@XS@!gCA`@mDPOdku`#qbq qJt#!B[G|S_qgq !BjW}q]cga##\"]),B(d(it,1),Dt,2,6,[\"o\",\"gGQHDDqIUjdB!gGQHHDqAeMjhB#qbqk qfQ]#!B@AL@[@@S@Fp@Dp !BFQ{~_q|ZGvUSYp##\"]),B(d(it,1),Dt,2,6,[\"r\",\"gOQdEjHbAFQRBrtAaJ!gNQdEbHbABCTKPFDH#qbMwX qbM~X#!BNDm`ra?UjW~YBYX@ !Ba[zw?_x@?g~H?XO~##\"]),B(d(it,1),Dt,2,6,[\"s\",\"gOp`ATigujj`H!gOp`ATiVKjj`H#qnyS` qY~eP#!BTLtk^sE?BOs|]pc} !BbOvw?_y??g~H?[_}##\"]),B(d(it,1),Dt,2,6,[\"t\",\"gOP`@dcUZdB!gNp`@tiTMjj@`#q{ir` qkLrx#!Be`Bzr_wp?OC}|Osp !B?g~w@k_}m?vw@n[a##\"]),B(d(it,1),Dt,2,6,[\"u\",\"daXB`Hrn@HrPEILt`D!daXB`DJn@HRUMjV@H#IxVaLJ` IylJhPP#!B[G}l@OKyDpAl@AL@[@@ !B@Fp@DpAl@AN]?`Al@AL##\"]),B(d(it,1),Dt,2,6,[\"Sakurai\",\"gOQH@wAINvZ@pdcFe@x@!gOQH@wAIgJi@pdcFe@x@#qreKx qrLkx#!BDpAl@IknDw|S@Fp@ !Bb@JH?_x@b@JH?Ven##\"]),B(d(it,1),Dt,2,6,[\"Mitsunobu\",\"gFP`ATfRhdPp`}KEYg]d@!gFP`ATfRhd`pekL{l`#qrLk qZLn#!B@hc}b@C~@h`YM` !B@hc}b@C~@h`YM`##\"]),B(d(it,1),Dt,2,6,[\"Aldol-Addition\",\"gOQ@AdTAcS@[Q^crJTLES`DJsL?vH!gGQ@@dsuRAcJg@HUaX#qYEbp qYub#!BxOyBzLKg`dG~xG~{ !Bb@K~@Hc}FBIA@@##\"]),B(d(it,1),Dt,2,6,[\"Aldol-Condensation\",\"gOQ@AdTAcS@[Q^crJTLES`DJsL?vH!gFQ@@`rrpdlHHpipBEXf@#qYEbp q^aU#!B{ZRRqA?AQfyA@L_C !B}QFw@h`B_tnH_P##\"]),B(d(it,1),Dt,2,6,[\"Acetal-Aldol-Addition\",\"dmdB@@serQS@sJjfd@p`Xir\\\\@`j\\\\@aUJXK@!daxL@@[df[ZjT@qQdxACdxABjTqf@#qB@`OuX qBtM{#!B_]]}rHKWw?y}uy[~GJbBu{wWqG| !BfJK~TIa]fJJghg{`pP@##\"]),B(d(it,1),Dt,2,6,[\"Acetal-Aldol-Condensation\",\"dmdB@@serQS@sJjfd@p`Xir\\\\@`j\\\\@aUJXK@!gNp`CTjUiV@qQS`DJg@HUVXV@#qB@`OuX qqj{`#!B?[_}b@Jw_?{}m~[~[N@Bm?vwkN| !BfsK~yzPrw}m?rzQM##\"]),B(d(it,1),Dt,2,6,[\"Acetal-Aldol-Condensation-Cyclization\",\"dkLB@@ZURYUvUjljh@paHpr\\\\@`!didD@@yIfUXXHL@CFNS`D@#IXljNPY@@@ IXljIyA#!BbOw~_x`Bm?vH?[_}b@JH?_y?b@Jw?Xc} !BbOvH?Oy??`BH?Xa}?`C~_p##\"]),B(d(it,1),Dt,2,6,[\"Enolester-Cleavage\",\"gOQ`@fdscT`_Qp!gOQ`@cdTASS@P#q}Kr` q}cNP#!B@k]}mpC~@k]}mqdY !Bb@K~@Hc}BfzH@hc}##\"]),B(d(it,1),Dt,2,6,[\"propargylEnone\",\"gCa@@dmXFD@!gCa@@dkHD#qNT qLV#!BbOw~_?y? !B@AL@[@@S##\"]),B(d(it,1),Dt,2,6,[\"Arndt-Eistert\",\"daiDaJYBBHj^{HhAYMpAaA@!daiD`FzLBHPVsZl@p`@#IyHHZ[@ IzDGBi`#!B?`Bw?H`Bn]{~\\\\g?~@Ox !B@rzH?_y?b@JH?_n~bOt##\"]),B(d(it,1),Dt,2,6,[\"Curtius\",\"gO]IcVaDF[s{HhCIe@`!gN]HMWADHJfm`XP@#q~Jk` qytUX#!B@O{|b@Jw\\\\o{~_?x@ !Bj]y??g?~?[^G_hc}##\"]),B(d(it,1),Dt,2,6,[\"diazomethanHomologation\",\"gFU@lQioIIs\\\\AyH!gFU@CPdimXD#qbM^ qbqk#!B?X`BbFZN?`C~_p !B@AL@[@@Su[x@Dp##\"]),B(d(it,1),Dt,2,6,[uV,\"deD@@LdbEdSTu@FqHWSDda`JFChXIa`?tdKi@!deD@@Ldb`\\\\SUM@FqHPsDda`JF@XXIa`?tdHY@#qTEApX qQECf@#!BQzK~}ubbW`BEgcb]?a@gg[zO !BQzK~}ubbW`Ag{VVAQzJ~c?xP##\"]),B(d(it,1),Dt,2,6,[uV,\"deD@@LdbEdSTu@FqHWSDda`JFChXIa`?tdKi@!gC`@DiZDE@#qPDA@p qQf#!BmpK~_x`Bm?tAs[]}?`BH_[_| !B_vp@[G|S##\"]),B(d(it,1),Dt,2,6,[\"yne-Metathesis\",\"daX@@LdPLWWPAlRXwQIHXLa`ZFChXO}IL[`!daX@@LdPLWWPAlRXwQIHXLa`ZFChXO}IL[`#qT@q@ qt@Q@#!BZmoi@Fjo|SFe|IkGiU@ !BZmoi@Fjo|SFe|IkGiU@##\"]),B(d(it,1),Dt,2,6,[\"ene-yne-Metathesis\",\"dcd@@LdPLPLWSSPAlrXwKlVRFCHXFa`zFAXXMa`?udqnWP!dcT@@LdbbplTsTt@[MeMr{Ela`jFAhXNa`VFCXXO}[J[et#qe@N@S@ qeHP@s@#!B?g?~@Oy?^gG}bOvw?H`E@PJw@hc}mp !B?`BH?[_}mpJH@oy??`AuC`Jw@hc}mp##\"]),B(d(it,1),Dt,2,6,[\"Alkyne-Cyclisation\",\"gG`@DcO|CFAFC`@!gFp@DiTt@@CFAFC`@#qi\\\\V qiSt#!B_y[qA`Biu^zV@@ !B?g~w@k_}m?vw@`##\"]),B(d(it,1),Dt,2,6,[\"Elimination-Claisen\",\"gNp`AldTQji@~a`!gGQ@@djmRA@#qtHUX qtSi#!Bm?vH?[\\\\B?g~H@hc} !B@AL@[@@S@Fp@Dp##\"]),B(d(it,1),Dt,2,6,[\"imineFormationAzaCope\",\"daZH@LAIMUjd@pRL@!daZH@HAAn]jd@p`@#IGfaLJ` IFDzfK@#!BDpAl@IkqDpAl@AL@[@@ !BFaFw@h`BbOw~@H`BbOt##\"]),B(d(it,1),Dt,2,6,[\"didehydroCopeWithAromatisation\",\"gNp@Di]ejDcjcr|wK`!gOp@DjWkB@@H#qrLkx q\\\\oQp#!B?g~H?K_}bGvH?H`B !Bm?w~@Hc}mpJw@ox@##\"]),B(d(it,1),Dt,2,6,[\"symAldolNitrogenRing\",\"dovJ@GBfttf\\\\v\\\\qjViPCADGbDodnGp!doNJ@JCSmtefWTCaYjje@H#IlZXi]]yL~C IqMVCzaIim?#!BQtl_riY?Qtl_rfuvNCQ`uZd@NCQ`uVVu}?sA]P !B?`BH@ox@bGvH@k\\\\Bb@JH_Xa}b@K~_rYltUr|W@##\"]),B(d(it,1),Dt,2,6,[\"Diels-Alder\",\"gFP@LdPLjA@!gFp@DiTujhB#qiZf qMSf#!B?_C}}?spIPFV@@ !B?g~w@k_}m?vw@`##\"]),B(d(it,1),Dt,2,6,[\"Claisen-RA\",\"gGQ@@eKtRA@!gGQ@@djqRA@#qMsT qM\\\\V#!B_qL@Dw}l@Fp@Dp !B@AL@[@@S@Fp@Dp##\"]),B(d(it,1),Dt,2,6,[\"Cope\",\"gGQ@DeZmRAbhcApIF@P@!gGQ@HeZmRAbhc@HIFC`@#qkNT qi\\\\V#!B_vp@[@@S@Fp@Dp !B_vp@[@@S@Fp@Dp##\"]),B(d(it,1),Dt,2,6,[\"OxyCope\",\"gNq@@dr}SHFD@!gNq@@djkUHD#qynZ` qykbp#!B?g~w?Xc}mpJH@hc} !B@Fp@DpAl@AL@[@@S##\"]),B(d(it,1),Dt,2,6,[\"Vinylcyclopropane\",\"gKP@DklVj@`!gKP@Di\\\\Vj@`#qaVh qTqh#!Bm?vH?PC~?K\\\\ !B?g|_Fa}eTv\\\\##\"]),B(d(it,1),Dt,2,6,[\"Furan-CH2-OH-Rearrangement\",\"gOp`@tiguif`H!gOp`@tfWMZZ`H#qZna@ qZtM@#!BTLtk^sE?BOs|]pc} !BBOuPtdy?UGm@V]Ho##\"]),B(d(it,1),Dt,2,6,[\"rearrangement1032\",\"gOp`ATieMji`H!gOp`ATeekZj`H#qaSnx qa]~P#!BTLtk^pc|LW?|]pc} !BBOpH?UCRSg}T^tAY##\"]),B(d(it,1),Dt,2,6,[\"Pinacol-Rearrangement\",\"gNp`ATffjj@pPh!gOP`@tfXZhCAA`#qb^ix qb^oH#!B@k^H@k_}@k_~@Hc} !BbOvH@oy??`BH?PFf##\"]),B(d(it,1),Dt,2,6,[\"1,3-WaterEliminationWith12Shift\",\"gJQ@@dmU@_SP!gKa@@`vtA}A@#qiTp qjap#!BbOvH@ox@bOt !BJdE?[@Al@AL##\"]),B(d(it,1),Dt,2,6,[\"Epoxydation\",\"gB``ADcdCB@!gC``AhtUPGtt@#qqb qtQ#!BjW}Y\\\\YX@ !B?g~w?^Va##\"]),B(d(it,1),Dt,2,6,[\"oxydativePropargylAmine13Shift\",\"gKi@HDEZpLHOQP!gJY@BDeVXB#qMr` qNTh#!BqiXTy{U?mW| !B@Fp@DpAl@AL##\"]),B(d(it,1),Dt,2,6,[\"Baeyer-Villiger\",\"gFQ`@[dTAZ`LHP!gFQ`@jdrMPGtl@#qrak qrlK#!B_?{}mwvHs^FVP@ !BbOvH@oy?bOuQzP##\"]),B(d(it,1),Dt,2,6,[QV,\"gGa@@dYs@XHFJIBDQbUeHPbLRl@!gFQ@@eNUPFJIBDQbUeHPbLRls@`#qbq] qfQk#!B@AOIDW}l@tD@Dp !B_qL@Dw}l_qNcDP##\"]),B(d(it,1),Dt,2,6,[QV,\"gBa@@d\\\\`XP@!gJQ@@eOU@XpdHQFIVY`P#qbq qfQ@#!B@AOIDW}l !B_qL@Dw}l_qL##\"]),B(d(it,1),Dt,2,6,[\"Hantzsch Thiazol\",\"daZHPDp@chaIMefh@ppDzTD~hYmC^bhbcPp]dQbUg~pp!gKXHL@aJWFe`H#qNPe@ qNj`#!BvuK[KUxv_yS[k_zhvuH !BTqa`FbpX?`@##\"]),B(d(it,1),Dt,2,6,[\"Oxadiazole\",\"gOX`BEdTASW@XQ@!gOu@HPeKNMKTA@#qrDMX qpULX#!BmpK~@K_}Mlx@?`C~ !BZ?`C}v|m_rYR[z?\\\\##\"]),B(d(it,1),Dt,2,6,[\"Imidazole\",\"dmeHPNg@qJqLbTtATijZ@LLJnuDmhWtSDXUFC`?rIoTAP!gOt@ATieuej`H#qDPpM_@ q~ZM`#!BqvKGg_yOqvKGg_xphrGkLcz@_sD !BTMHkACD@BOw|B@QT##\"]),B(d(it,1),Dt,2,6,[\"1,2,3-Triazole\",\"gB`HAbIGXFDWiM@!gF|@ADeKXmT`P#QIp Q@v#!B_vpU?g}l !BTv]`YRqg?g|XK@##\"]),B(d(it,1),Dt,2,6,[\"1,2,4-Triazole\",\"deFD@NALbbfASUW@FD]YJZLUCAVJ}?nES@!gO|@ABeKNLuRA@#qDB@FM q@LuP#!BY?r~@F_]jDJW`j`}Iaxx[UC] !BTv]@IPqgog|hCBT_##\"])])}function _A(){_A=d1,lE=new tD,UE=B(d(it,1),Dt,2,6,[\"?\",\"H\",\"He\",\"Li\",\"Be\",\"B\",\"C\",\"N\",\"O\",\"F\",\"Ne\",\"Na\",\"Mg\",\"Al\",\"Si\",\"P\",\"S\",\"Cl\",\"Ar\",\"K\",\"Ca\",\"Sc\",\"Ti\",\"V\",\"Cr\",\"Mn\",\"Fe\",\"Co\",\"Ni\",\"Cu\",\"Zn\",\"Ga\",\"Ge\",\"As\",\"Se\",\"Br\",\"Kr\",\"Rb\",\"Sr\",\"Y\",\"Zr\",\"Nb\",\"Mo\",\"Tc\",\"Ru\",\"Rh\",\"Pd\",\"Ag\",\"Cd\",\"In\",\"Sn\",\"Sb\",\"Te\",\"I\",\"Xe\",\"Cs\",\"Ba\",\"La\",\"Ce\",\"Pr\",\"Nd\",\"Pm\",\"Sm\",\"Eu\",\"Gd\",\"Tb\",\"Dy\",\"Ho\",\"Er\",\"Tm\",\"Yb\",\"Lu\",\"Hf\",\"Ta\",\"W\",\"Re\",\"Os\",\"Ir\",\"Pt\",\"Au\",\"Hg\",\"Tl\",\"Pb\",\"Bi\",\"Po\",\"At\",\"Rn\",\"Fr\",\"Ra\",\"Ac\",\"Th\",\"Pa\",\"U\",\"Np\",\"Pu\",\"Am\",\"Cm\",\"Bk\",\"Cf\",\"Es\",\"Fm\",\"Md\",\"No\",\"Lr\",\"Rf\",\"Db\",\"Sg\",\"Bh\",\"Hs\",\"Mt\",\"Ds\",\"Rg\",\"Cn\",\"Nh\",\"Fl\",\"Mc\",\"Lv\",\"Ts\",\"Og\",_1,_1,_1,_1,_1,_1,_1,_1,_1,_1,\"R4\",\"R5\",\"R6\",\"R7\",\"R8\",\"R9\",\"R10\",\"R11\",\"R12\",\"R13\",\"R14\",\"R15\",\"R16\",\"R1\",\"R2\",\"R3\",\"A\",\"A1\",\"A2\",\"A3\",_1,_1,\"D\",\"T\",\"X\",\"R\",\"H2\",\"H+\",\"Nnn\",\"HYD\",\"Pol\",_1,_1,_1,_1,_1,_1,_1,_1,_1,_1,_1,\"Ala\",\"Arg\",\"Asn\",\"Asp\",\"Cys\",\"Gln\",\"Glu\",\"Gly\",\"His\",\"Ile\",\"Leu\",\"Lys\",\"Met\",\"Phe\",\"Pro\",\"Ser\",\"Thr\",\"Trp\",\"Tyr\",\"Val\"]),yE=B(d(zt,1),_t,6,15,[0,1,4,7,9,11,12,14,16,19,20,23,24,27,28,31,32,35,40,39,40,45,48,51,52,55,56,59,58,63,64,69,74,75,80,79,84,85,88,89,90,93,98,0,102,103,106,107,114,115,120,121,130,127,132,133,138,139,140,141,142,0,152,153,158,159,164,165,166,169,174,175,180,181,184,187,192,193,195,197,202,205,208,209,209,210,222,223,226,227,232,231,238,237,244,243,247,247,251,252,257,258,259,262,267,268,271,270,277,276,281,281,283,285,289,289,293,294,294,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,71,156,114,115,103,128,129,57,137,113,113,128,131,147,97,87,101,186,163,99]),LE=B(d(E,2),g8,10,0,[null,B(d(E,1),q,6,15,[1]),B(d(E,1),q,6,15,[0]),B(d(E,1),q,6,15,[1]),B(d(E,1),q,6,15,[2]),B(d(E,1),q,6,15,[3]),B(d(E,1),q,6,15,[4]),B(d(E,1),q,6,15,[3]),B(d(E,1),q,6,15,[2]),B(d(E,1),q,6,15,[1]),B(d(E,1),q,6,15,[0]),B(d(E,1),q,6,15,[1]),B(d(E,1),q,6,15,[2]),B(d(E,1),q,6,15,[3]),B(d(E,1),q,6,15,[4]),B(d(E,1),q,6,15,[3,5]),B(d(E,1),q,6,15,[2,4,6]),B(d(E,1),q,6,15,[1,3,5,7]),B(d(E,1),q,6,15,[0]),B(d(E,1),q,6,15,[1]),B(d(E,1),q,6,15,[2]),null,null,null,null,null,null,null,null,null,null,B(d(E,1),q,6,15,[2,3]),B(d(E,1),q,6,15,[2,4]),B(d(E,1),q,6,15,[3,5]),B(d(E,1),q,6,15,[2,4,6]),B(d(E,1),q,6,15,[1,3,5,7]),B(d(E,1),q,6,15,[0,2]),B(d(E,1),q,6,15,[1]),B(d(E,1),q,6,15,[2]),null,null,null,null,null,null,null,null,null,null,B(d(E,1),q,6,15,[1,2,3]),B(d(E,1),q,6,15,[2,4]),B(d(E,1),q,6,15,[3,5]),B(d(E,1),q,6,15,[2,4,6]),B(d(E,1),q,6,15,[1,3,5,7]),B(d(E,1),q,6,15,[0,2,4,6]),B(d(E,1),q,6,15,[1]),B(d(E,1),q,6,15,[2]),null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,B(d(E,1),q,6,15,[2]),B(d(E,1),q,6,15,[2]),B(d(E,1),q,6,15,[2]),B(d(E,1),q,6,15,[2]),B(d(E,1),q,6,15,[3]),B(d(E,1),q,6,15,[2]),B(d(E,1),q,6,15,[2]),B(d(E,1),q,6,15,[2]),B(d(E,1),q,6,15,[2]),B(d(E,1),q,6,15,[2]),B(d(E,1),q,6,15,[2]),B(d(E,1),q,6,15,[2]),B(d(E,1),q,6,15,[2]),B(d(E,1),q,6,15,[2]),B(d(E,1),q,6,15,[2]),B(d(E,1),q,6,15,[2]),B(d(E,1),q,6,15,[2]),B(d(E,1),q,6,15,[2]),B(d(E,1),q,6,15,[2]),B(d(E,1),q,6,15,[2])]),sE=B(d(E,2),g8,10,0,[null,B(d(E,1),q,6,15,[1]),null,B(d(E,1),q,6,15,[1]),B(d(E,1),q,6,15,[2]),null,null,B(d(E,1),q,6,15,[-3]),B(d(E,1),q,6,15,[-2]),B(d(E,1),q,6,15,[-1]),null,B(d(E,1),q,6,15,[1]),B(d(E,1),q,6,15,[2]),B(d(E,1),q,6,15,[3]),null,B(d(E,1),q,6,15,[-3]),B(d(E,1),q,6,15,[-2]),B(d(E,1),q,6,15,[-1]),null,B(d(E,1),q,6,15,[1]),B(d(E,1),q,6,15,[2]),B(d(E,1),q,6,15,[3]),B(d(E,1),q,6,15,[2,3,4]),B(d(E,1),q,6,15,[2,3,4,5]),B(d(E,1),q,6,15,[2,3,6]),B(d(E,1),q,6,15,[2,3,4,7]),B(d(E,1),q,6,15,[2,3]),B(d(E,1),q,6,15,[2,3]),B(d(E,1),q,6,15,[2,3]),B(d(E,1),q,6,15,[1,2]),B(d(E,1),q,6,15,[2]),B(d(E,1),q,6,15,[3]),B(d(E,1),q,6,15,[2,4]),B(d(E,1),q,6,15,[-3,3,5]),B(d(E,1),q,6,15,[-2]),B(d(E,1),q,6,15,[-1]),null,B(d(E,1),q,6,15,[1]),B(d(E,1),q,6,15,[2]),B(d(E,1),q,6,15,[3]),B(d(E,1),q,6,15,[4]),B(d(E,1),q,6,15,[3,5]),B(d(E,1),q,6,15,[6]),B(d(E,1),q,6,15,[4,6,7]),B(d(E,1),q,6,15,[3]),B(d(E,1),q,6,15,[3]),B(d(E,1),q,6,15,[2,4]),B(d(E,1),q,6,15,[1]),B(d(E,1),q,6,15,[2]),B(d(E,1),q,6,15,[3]),B(d(E,1),q,6,15,[2,4]),B(d(E,1),q,6,15,[-3,3,5]),B(d(E,1),q,6,15,[-2,4,6]),B(d(E,1),q,6,15,[-1]),null,B(d(E,1),q,6,15,[1]),B(d(E,1),q,6,15,[2]),B(d(E,1),q,6,15,[3]),B(d(E,1),q,6,15,[3,4]),B(d(E,1),q,6,15,[3]),B(d(E,1),q,6,15,[3]),B(d(E,1),q,6,15,[3]),B(d(E,1),q,6,15,[2,3]),B(d(E,1),q,6,15,[2,3]),B(d(E,1),q,6,15,[3]),B(d(E,1),q,6,15,[3]),B(d(E,1),q,6,15,[3]),B(d(E,1),q,6,15,[3]),B(d(E,1),q,6,15,[3]),B(d(E,1),q,6,15,[3]),B(d(E,1),q,6,15,[2,3]),B(d(E,1),q,6,15,[3]),B(d(E,1),q,6,15,[4]),B(d(E,1),q,6,15,[5]),B(d(E,1),q,6,15,[6]),B(d(E,1),q,6,15,[4,6,7]),B(d(E,1),q,6,15,[3,4]),B(d(E,1),q,6,15,[3,4]),B(d(E,1),q,6,15,[2,4]),B(d(E,1),q,6,15,[1,3]),B(d(E,1),q,6,15,[1,2]),B(d(E,1),q,6,15,[1,3]),B(d(E,1),q,6,15,[2,4]),B(d(E,1),q,6,15,[3,5]),B(d(E,1),q,6,15,[-2,2,4]),B(d(E,1),q,6,15,[-1,1]),null,B(d(E,1),q,6,15,[1]),B(d(E,1),q,6,15,[2]),B(d(E,1),q,6,15,[3]),B(d(E,1),q,6,15,[4]),B(d(E,1),q,6,15,[4,5]),B(d(E,1),q,6,15,[3,4,5,6]),B(d(E,1),q,6,15,[3,4,5,6]),B(d(E,1),q,6,15,[3,4,5,6]),B(d(E,1),q,6,15,[3,4,5,6]),B(d(E,1),q,6,15,[3]),B(d(E,1),q,6,15,[3,4]),B(d(E,1),q,6,15,[3]),B(d(E,1),q,6,15,[3]),B(d(E,1),q,6,15,[3]),B(d(E,1),q,6,15,[2,3]),B(d(E,1),q,6,15,[2,3]),B(d(E,1),q,6,15,[3])]),oE=B(d(it,1),Dt,2,6,[V6,E6,S6])}function J1(){J1=d1,X0=B(d(it,1),Dt,2,6,[\"?\",\"H\",\"He\",\"Li\",\"Be\",\"B\",\"C\",\"N\",\"O\",\"F\",\"Ne\",\"Na\",\"Mg\",\"Al\",\"Si\",\"P\",\"S\",\"Cl\",\"Ar\",\"K\",\"Ca\",\"Sc\",\"Ti\",\"V\",\"Cr\",\"Mn\",\"Fe\",\"Co\",\"Ni\",\"Cu\",\"Zn\",\"Ga\",\"Ge\",\"As\",\"Se\",\"Br\",\"Kr\",\"Rb\",\"Sr\",\"Y\",\"Zr\",\"Nb\",\"Mo\",\"Tc\",\"Ru\",\"Rh\",\"Pd\",\"Ag\",\"Cd\",\"In\",\"Sn\",\"Sb\",\"Te\",\"I\",\"Xe\",\"Cs\",\"Ba\",\"La\",\"Ce\",\"Pr\",\"Nd\",\"Pm\",\"Sm\",\"Eu\",\"Gd\",\"Tb\",\"Dy\",\"Ho\",\"Er\",\"Tm\",\"Yb\",\"Lu\",\"Hf\",\"Ta\",\"W\",\"Re\",\"Os\",\"Ir\",\"Pt\",\"Au\",\"Hg\",\"Tl\",\"Pb\",\"Bi\",\"Po\",\"At\",\"Rn\",\"Fr\",\"Ra\",\"Ac\",\"Th\",\"Pa\",\"U\",\"Np\",\"Pu\",\"Am\",\"Cm\",\"Bk\",\"Cf\",\"Es\",\"Fm\",\"Md\",\"No\",\"Lr\",\"Rf\",\"Db\",\"Sg\",\"Bh\",\"Hs\",\"Mt\",\"Ds\",\"Rg\",\"Cn\",\"Nh\",\"Fl\",\"Mc\",\"Lv\",\"Ts\",\"Og\",_1,_1,_1,_1,_1,_1,_1,_1,_1,_1,\"R4\",\"R5\",\"R6\",\"R7\",\"R8\",\"R9\",\"R10\",\"R11\",\"R12\",\"R13\",\"R14\",\"R15\",\"R16\",\"R1\",\"R2\",\"R3\",\"A\",\"A1\",\"A2\",\"A3\",_1,_1,\"D\",\"T\",\"X\",\"R\",\"H2\",\"H+\",\"Nnn\",\"HYD\",\"Pol\",_1,_1,_1,_1,_1,_1,_1,_1,_1,_1,_1,\"Ala\",\"Arg\",\"Asn\",\"Asp\",\"Cys\",\"Gln\",\"Glu\",\"Gly\",\"His\",\"Ile\",\"Leu\",\"Lys\",\"Met\",\"Phe\",\"Pro\",\"Ser\",\"Thr\",\"Trp\",\"Tyr\",\"Val\"]),or=B(d(zt,1),_t,6,15,[0,1,4,7,9,11,12,14,16,19,20,23,24,27,28,31,32,35,40,39,40,45,48,51,52,55,56,59,58,63,64,69,74,75,80,79,84,85,88,89,90,93,98,0,102,103,106,107,114,115,120,121,130,127,132,133,138,139,140,141,142,0,152,153,158,159,164,165,166,169,174,175,180,181,184,187,192,193,195,197,202,205,208,209,209,210,222,223,226,227,232,231,238,237,244,243,247,247,251,252,257,258,259,262,267,268,271,270,277,276,281,281,283,285,289,289,293,294,294,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,71,156,114,115,103,128,129,57,137,113,113,128,131,147,97,87,101,186,163,99]),IV=B(d(E,1),q,6,15,[6]),qV=B(d(E,1),q,6,15,[2]),L9=B(d(E,2),g8,10,0,[null,B(d(E,1),q,6,15,[1]),B(d(E,1),q,6,15,[0]),B(d(E,1),q,6,15,[1]),B(d(E,1),q,6,15,[2]),B(d(E,1),q,6,15,[3]),B(d(E,1),q,6,15,[4]),B(d(E,1),q,6,15,[3]),B(d(E,1),q,6,15,[2]),B(d(E,1),q,6,15,[1]),B(d(E,1),q,6,15,[0]),B(d(E,1),q,6,15,[1]),B(d(E,1),q,6,15,[2]),B(d(E,1),q,6,15,[3]),B(d(E,1),q,6,15,[4]),B(d(E,1),q,6,15,[3,5]),B(d(E,1),q,6,15,[2,4,6]),B(d(E,1),q,6,15,[1,3,5,7]),B(d(E,1),q,6,15,[0]),B(d(E,1),q,6,15,[1]),B(d(E,1),q,6,15,[2]),null,null,null,null,null,null,null,null,null,null,B(d(E,1),q,6,15,[2,3]),B(d(E,1),q,6,15,[2,4]),B(d(E,1),q,6,15,[3,5]),B(d(E,1),q,6,15,[2,4,6]),B(d(E,1),q,6,15,[1,3,5,7]),B(d(E,1),q,6,15,[0,2]),B(d(E,1),q,6,15,[1]),B(d(E,1),q,6,15,[2]),null,null,null,null,null,null,null,null,null,null,B(d(E,1),q,6,15,[1,2,3]),B(d(E,1),q,6,15,[2,4]),B(d(E,1),q,6,15,[3,5]),B(d(E,1),q,6,15,[2,4,6]),B(d(E,1),q,6,15,[1,3,5,7]),B(d(E,1),q,6,15,[0,2,4,6]),B(d(E,1),q,6,15,[1]),B(d(E,1),q,6,15,[2]),null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,B(d(E,1),q,6,15,[2]),B(d(E,1),q,6,15,[2]),B(d(E,1),q,6,15,[2]),B(d(E,1),q,6,15,[2]),B(d(E,1),q,6,15,[3]),B(d(E,1),q,6,15,[2]),B(d(E,1),q,6,15,[2]),B(d(E,1),q,6,15,[2]),B(d(E,1),q,6,15,[2]),B(d(E,1),q,6,15,[2]),B(d(E,1),q,6,15,[2]),B(d(E,1),q,6,15,[2]),B(d(E,1),q,6,15,[2]),B(d(E,1),q,6,15,[2]),B(d(E,1),q,6,15,[2]),B(d(E,1),q,6,15,[2]),B(d(E,1),q,6,15,[2]),B(d(E,1),q,6,15,[2]),B(d(E,1),q,6,15,[2]),B(d(E,1),q,6,15,[2])]),v4=B(d(E,2),g8,10,0,[null,B(d(E,1),q,6,15,[1]),null,B(d(E,1),q,6,15,[1]),B(d(E,1),q,6,15,[2]),null,null,B(d(E,1),q,6,15,[-3]),B(d(E,1),q,6,15,[-2]),B(d(E,1),q,6,15,[-1]),null,B(d(E,1),q,6,15,[1]),B(d(E,1),q,6,15,[2]),B(d(E,1),q,6,15,[3]),null,B(d(E,1),q,6,15,[-3]),B(d(E,1),q,6,15,[-2]),B(d(E,1),q,6,15,[-1]),null,B(d(E,1),q,6,15,[1]),B(d(E,1),q,6,15,[2]),B(d(E,1),q,6,15,[3]),B(d(E,1),q,6,15,[2,3,4]),B(d(E,1),q,6,15,[2,3,4,5]),B(d(E,1),q,6,15,[2,3,6]),B(d(E,1),q,6,15,[2,3,4,7]),B(d(E,1),q,6,15,[2,3]),B(d(E,1),q,6,15,[2,3]),B(d(E,1),q,6,15,[2,3]),B(d(E,1),q,6,15,[1,2]),B(d(E,1),q,6,15,[2]),B(d(E,1),q,6,15,[3]),B(d(E,1),q,6,15,[2,4]),B(d(E,1),q,6,15,[-3,3,5]),B(d(E,1),q,6,15,[-2]),B(d(E,1),q,6,15,[-1]),null,B(d(E,1),q,6,15,[1]),B(d(E,1),q,6,15,[2]),B(d(E,1),q,6,15,[3]),B(d(E,1),q,6,15,[4]),B(d(E,1),q,6,15,[3,5]),B(d(E,1),q,6,15,[6]),B(d(E,1),q,6,15,[4,6,7]),B(d(E,1),q,6,15,[3]),B(d(E,1),q,6,15,[3]),B(d(E,1),q,6,15,[2,4]),B(d(E,1),q,6,15,[1]),B(d(E,1),q,6,15,[2]),B(d(E,1),q,6,15,[3]),B(d(E,1),q,6,15,[2,4]),B(d(E,1),q,6,15,[-3,3,5]),B(d(E,1),q,6,15,[-2,4,6]),B(d(E,1),q,6,15,[-1]),null,B(d(E,1),q,6,15,[1]),B(d(E,1),q,6,15,[2]),B(d(E,1),q,6,15,[3]),B(d(E,1),q,6,15,[3,4]),B(d(E,1),q,6,15,[3]),B(d(E,1),q,6,15,[3]),B(d(E,1),q,6,15,[3]),B(d(E,1),q,6,15,[2,3]),B(d(E,1),q,6,15,[2,3]),B(d(E,1),q,6,15,[3]),B(d(E,1),q,6,15,[3]),B(d(E,1),q,6,15,[3]),B(d(E,1),q,6,15,[3]),B(d(E,1),q,6,15,[3]),B(d(E,1),q,6,15,[3]),B(d(E,1),q,6,15,[2,3]),B(d(E,1),q,6,15,[3]),B(d(E,1),q,6,15,[4]),B(d(E,1),q,6,15,[5]),B(d(E,1),q,6,15,[6]),B(d(E,1),q,6,15,[4,6,7]),B(d(E,1),q,6,15,[3,4]),B(d(E,1),q,6,15,[3,4]),B(d(E,1),q,6,15,[2,4]),B(d(E,1),q,6,15,[1,3]),B(d(E,1),q,6,15,[1,2]),B(d(E,1),q,6,15,[1,3]),B(d(E,1),q,6,15,[2,4]),B(d(E,1),q,6,15,[3,5]),B(d(E,1),q,6,15,[-2,2,4]),B(d(E,1),q,6,15,[-1,1]),null,B(d(E,1),q,6,15,[1]),B(d(E,1),q,6,15,[2]),B(d(E,1),q,6,15,[3]),B(d(E,1),q,6,15,[4]),B(d(E,1),q,6,15,[4,5]),B(d(E,1),q,6,15,[3,4,5,6]),B(d(E,1),q,6,15,[3,4,5,6]),B(d(E,1),q,6,15,[3,4,5,6]),B(d(E,1),q,6,15,[3,4,5,6]),B(d(E,1),q,6,15,[3]),B(d(E,1),q,6,15,[3,4]),B(d(E,1),q,6,15,[3]),B(d(E,1),q,6,15,[3]),B(d(E,1),q,6,15,[3]),B(d(E,1),q,6,15,[2,3]),B(d(E,1),q,6,15,[2,3]),B(d(E,1),q,6,15,[3])])}function zQ(t,e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R,j,C,S,I,x,tt,M,K,et,W,$,a,st,ht,wt,rt,ct,Kt,St,t1,Qt,bt,yt,Yt;if(t.K||t.yb(e,Ri(t.L,e),X1(t.R,kt(t.L,e)),K1(t.R,pt(t.L,e))),ht=null,b1(t.L,e)!=0&&(t1=w.Math.abs(b1(t.L,e))==1?\"\":\"\"+w.Math.abs(b1(t.L,e)),ht=b1(t.L,e)<0?t1+\"-\":t1+\"+\"),M=null,wt=y0(t.L,e),G(wt,0)!=0&&(gt(V(wt,KQ),0)&&(M=M==null?\"*\":M+\",*\"),gt(V(wt,XQ),0)&&(M=M==null?\"!*\":M+\",!*\"),gt(V(wt,ZQ),0)?M=M==null?\"ha\":M+\",ha\":gt(V(wt,2),0)?M=M==null?\"a\":M+\",a\":gt(V(wt,4),0)&&(M=M==null?\"!a\":M+\",!a\"),gt(V(wt,C0),0)&&(M=M==null?\"s\":M+\",s\"),gt(V(wt,PP),0)&&(j=V(wt,PP),G(j,1792)==0?M=M==null?\"h0\":M+\",h0\":G(j,1664)==0?M=M==null?\"h1\":M+\",h1\":G(j,1408)==0?M=M==null?\"h2\":M+\",h2\":G(j,128)==0?M=M==null?\"h>0\":M+\",h>0\":G(j,384)==0?M=M==null?\"h>1\":M+\",h>1\":G(j,896)==0?M=M==null?\"h>2\":M+\",h>2\":G(j,re)==0?M=M==null?\"h<3\":M+\",h<3\":G(j,1536)==0?M=M==null?\"h<2\":M+\",h<2\":G(j,1152)==0&&(M=M==null?\"h1-2\":M+\",h1-2\")),gt(V(wt,ir),0)&&(D=V(wt,ir),G(D,WQ)==0?M=M==null?\"c0\":M+\",c0\":G(D,jf)==0?M=M==null?\"c+\":M+\",c+\":G(D,pf)==0&&(M=M==null?\"c-\":M+\",c-\")),gt(V(wt,Qi),0)&&(st=V(wt,Qi),G(st,98304)==0?M=M==null?\"pi0\":M+\",pi0\":G(st,81920)==0?M=M==null?\"pi1\":M+\",pi1\":G(st,49152)==0?M=M==null?\"pi2\":M+\",pi2\":G(st,Sn)==0&&(M=M==null?\"pi>0\":M+\",pi>0\")),gt(V(wt,oi),0)&&(a=V(wt,oi),G(a,_Q)==0?M=M==null?\"n1\":M+\",n1\":G(a,c2)==0?M=M==null?\"n2\":M+\",n2\":G(a,w2)==0?M=M==null?\"n3\":M+\",n3\":G(a,$Q)==0?M=M==null?\"n<3\":M+\",n<3\":G(a,IA)==0?M=M==null?\"n<4\":M+\",n<4\":G(a,Ui)==0?M=M==null?\"n>1\":M+\",n>1\":G(a,qP)==0?M=M==null?\"n>2\":M+\",n>2\":G(a,Cf)==0?M=M==null?\"n>3\":M+\",n>3\":G(a,3276800)==0?M=M==null?\"n1-2\":M+\",n1-2\":G(a,2228224)==0?M=M==null?\"n1-3\":M+\",n1-3\":G(a,2490368)==0&&(M=M==null?\"n2-3\":M+\",n2-3\")),gt(V(wt,Hf),0)&&(l=V(wt,Hf),G(l,Dy)==0?M=M==null?\"e0\":M+\",e0\":G(l,uy)==0?M=M==null?\"e1\":M+\",e1\":G(l,Qy)==0?M=M==null?\"e2\":M+\",e2\":G(l,oy)==0?M=M==null?\"e3\":M+\",e3\":G(l,l6)==0?M=M==null?\"e<2\":M+\",e<2\":G(l,h6)==0?M=M==null?\"e<3\":M+\",e<3\":G(l,aQ)==0?M=M==null?\"e<4\":M+\",e<4\":G(l,g2)==0?M=M==null?\"e>0\":M+\",e>0\":G(l,Uy)==0?M=M==null?\"e>1\":M+\",e>1\":G(l,Ly)==0?M=M==null?\"e>2\":M+\",e>2\":G(l,to)==0?M=M==null?\"e>3\":M+\",e>3\":G(l,T6)==0?M=M==null?\"e1-2\":M+\",e1-2\":G(l,c6)==0?M=M==null?\"e1-3\":M+\",e1-3\":G(l,w6)==0&&(M=M==null?\"e2-3\":M+\",e2-3\")),gt(V(wt,120),0)&&(rt=V(wt,120),G(rt,112)==0?M=M==null?\"!r\":M+\",!r\":G(rt,8)==0?M=M==null?\"r\":M+\",r\":G(rt,96)==0?M=M==null?\"rb<3\":M+\",rb<3\":G(rt,104)==0?M=M==null?\"rb2\":M+\",rb2\":G(rt,88)==0?M=M==null?\"rb3\":M+\",rb3\":G(rt,56)==0&&(M=M==null?\"rb4\":M+\",rb4\")),gt(V(wt,fr),0)&&(M=M==null?\"r\"+he(q0(V(wt,fr),22)):M+\",\"+(\"r\"+he(q0(V(wt,fr),22)))),gt(V(wt,r9),0)&&(M=zU(M,KZ(wt))),gt(V(wt,d2),0)&&(M=M==null?\"ox\"+he(l0(q0(V(wt,d2),47),7)):M+\",\"+(\"ox\"+he(l0(q0(V(wt,d2),47),7)))),gt(V(wt,o9),0)&&(M=M==null?\"f\":M+\",f\")),ye(t.L,e)!=0&&(M=zU(M,\"\"+ye(t.L,e))),St=0,mA(t.L,e)!=0)switch(mA(t.L,e)){case 16:ht=ht==null?\"|\":ht+\",|\";break;case 32:St=1;break;case 48:St=2}if(L=null,(t.G&64)==0){if(v9(t.L,e))L=\"?\";else if(jU(t.L,e)!=0&&(ne(t.L,e)==0||A==null||A[ne(t.L,e)][EA(t.L,e)]>1))if(O(t.L,e)==2)switch(jU(t.L,e)){case 2:L=Hi(t.L,e)?\"p\":\"P\";break;case 1:L=Hi(t.L,e)?\"m\":\"M\";break;default:L=\"*\"}else switch(jU(t.L,e)){case 1:L=Hi(t.L,e)?\"r\":\"R\";break;case 2:L=Hi(t.L,e)?\"s\":\"S\";break;default:L=\"*\"}}if((t.G&768)!=0&&(L=zU(L,\"\"+R0(t.L,e))),W=null,(t.G&16)!=0&&R1(t.L,e)!=0&&(W=\"\"+R1(t.L,e)),T=null,pQ(t.L,e)!=-1&&(h=HT(t,e),h!=-1&&(T=h==0?\"abs\":((h&255)==1?\"&\":\"or\")+(1+(h>>8)))),C=0,(t.G&ge)==0&&(t.L.K?gt(V(y0(t.L,e),N1),0)&&(C=It(t.L,e)):(X(t.L,e)!=6||ye(t.L,e)!=0||!t.q[e]||mA(t.L,e)!=0)&&(C=It(t.L,e))),tt=!1,x=!1,r=(t.G&u0)!=0?null:Wn(t.L,e),r!=null&&r.startsWith(\"]\")&&(tt=M==null,x=!0,M=zU((Gt(1,r.length+1),r.substr(1)),M),r=null),r!=null?C=0:MA(t.L,e)!=null?(P=gt(V(y0(t.L,e),1),0)?\"[!\":\"[\",r=P+zT(t.L,e)+\"]\",r.length>5&&(r=P+MA(t.L,e).length+\"]\")):gt(V(y0(t.L,e),1),0)?r=\"?\":(X(t.L,e)!=6||ht!=null||M!=null&&(!tt||(t.G&y8)==0)||C>0||!t.q[e])&&(r=Ri(t.L,e)),gt(V(y0(t.L,e),N1),0)&&C==0&&(M=M==null?\"!s\":M+\",!s\"),et=0,!P0(t.L,e)&Qe(t.L,e)&&Z1(t,-8),r!=null?(et=t.vb(r),MP(t,X1(t.R,kt(t.L,e)),K1(t.R,pt(t.L,e)),r,!0),t.s[e]=!0):fJ(t,e)&&_G(t,X1(t.R,kt(t.L,e)),K1(t.R,pt(t.L,e)),e),ht!=null&&(t.Cb((t.X*2+1)/3|0),Qt=X1(t.R,kt(t.L,e))+((et+t.vb(ht))/2+1),yt=K1(t.R,pt(t.L,e))-((t.wb()*4-4)/8|0),MP(t,Qt,yt,ht,!0),t.Cb(t.X)),(t.G&2)!=0&&(M=\"\"+e),M!=null&&(x?t.Cb((t.X*5+1)/6|0):t.Cb((t.X*2+1)/3|0),Qt=X1(t.R,kt(t.L,e))-(et+t.vb(M))/2,yt=K1(t.R,pt(t.L,e))-((t.wb()*4-4)/8|0),MP(t,Qt,yt,M,!0),t.Cb(t.X)),L!=null&&(t.Cb((t.X*2+1)/3|0),Qt=X1(t.R,kt(t.L,e))-(et+t.vb(L))/2,yt=K1(t.R,pt(t.L,e))+((t.wb()*4+4)/8|0),Kt=t.C,t.L.O!=1&&(t.G&C0)==0&&Z1(t,448),MP(t,Qt,yt,L,!1),Z1(t,Kt),t.Cb(t.X)),W!=null&&(t.Cb((t.X*2+1)/3|0),Qt=X1(t.R,kt(t.L,e))+((et+t.vb(W))/2+1),yt=K1(t.R,pt(t.L,e))+((t.wb()*4+4)/8|0),Kt=t.C,Z1(t,Bn(t.L,e)?384:448),MP(t,Qt,yt,W,!0),Z1(t,Kt),t.Cb(t.X)),T!=null&&(n=UX(t,e),t.Cb((t.X*2+1)/3|0),Qt=X1(t.R,kt(t.L,e))+.7*t.wb()*w.Math.sin(n),yt=K1(t.R,pt(t.L,e))+.7*t.wb()*w.Math.cos(n),Kt=t.C,!t.K&&t.L.O!=1&&Z1(t,KT(t,e)),MP(t,Qt,yt,T,!1),Z1(t,Kt),t.Cb(t.X)),C==0&&St==0){t.C==-8&&Z1(t,-9);return}for(b=c(Ut,Tt,6,4,15,1),I=0;I<De(t.L,e);I++)for(f=xt(t.L,e,I),K=0;K<2;K++)z(t.L,K,f)==e&&(ct=Y0(t.L,z(t.L,K,f),z(t.L,1-K,f)),ct<eo?(b[0]-=ct+RA,b[3]+=ct+U1):ct<0?(b[2]+=ct+RA,b[3]-=ct):ct<RA?(b[1]+=ct,b[2]+=RA-ct):(b[0]+=ct-RA,b[1]+=U1-ct));if(O(t.L,e)==0?tA(t.L,e)?b[3]-=.2:b[1]-=.2:b[1]-=.1,(ht!=null||W!=null)&&(b[1]+=10),(M!=null||L!=null)&&(b[3]+=10),m=\"\",C!=0&&(R=t.vb(\"H\"),v=0,g=t.wb(),C>1&&(m=\"\"+C,t.Cb((t.X*2+1)/3|0),v=t.vb(m)),b[1]<.6||b[3]<.6?(o=K1(t.R,pt(t.L,e)),b[1]<=b[3]?(b[1]+=10,Q=X1(t.R,kt(t.L,e))+(et+R)/2):(b[3]+=10,Q=X1(t.R,kt(t.L,e))-(et+R)/2-v)):(Q=X1(t.R,kt(t.L,e)),b[0]<b[2]?(b[0]+=10,o=K1(t.R,pt(t.L,e))-g):(b[2]+=10,o=K1(t.R,pt(t.L,e))+g)),v>0&&(Qt=Q+(R+v)/2,yt=o+((t.wb()*4+4)/8|0),MP(t,Qt,yt,m,!0),t.Cb(t.X)),MP(t,Q,o,\"H\",!0)),i=0,St!=0){for($=50,s=0,S=0;S<4;S++)y=S>1?S-2:S+2,b[S]<$?(i=S,$=b[S],s=b[y]):b[S]==$&&b[y]>s&&(i=S,s=b[y]);switch(i){case 0:Q=X1(t.R,kt(t.L,e)),o=K1(t.R,pt(t.L,e))-t.V-et/2;break;case 1:Q=X1(t.R,kt(t.L,e))+t.V+et/2,o=K1(t.R,pt(t.L,e));break;case 2:Q=X1(t.R,kt(t.L,e)),o=K1(t.R,pt(t.L,e))+t.V+et/2;break;default:Q=X1(t.R,kt(t.L,e))-t.V-et/2,o=K1(t.R,pt(t.L,e))}if(St==1)mt(t.$,new QA(Q-t.V,o-t.V,2*t.V,2*t.V)),t.K||mt(t.U,new mu(Q,o,oQ(t,e)?-3:t.p[e]));else{switch(i){case 2:case 0:bt=2*t.V,Yt=0,Q-=t.V;break;case 1:bt=0,Yt=2*t.V,o-=t.V;break;default:bt=0,Yt=2*t.V,o-=t.V}mt(t.$,new QA(Q-t.V,o-t.V,2*t.V,2*t.V)),t.K||mt(t.U,new mu(Q,o,oQ(t,e)?-3:t.p[e])),mt(t.$,new QA(Q+bt-t.V,o+Yt-t.V,2*t.V,2*t.V)),t.K||mt(t.U,new mu(Q+bt,o+Yt,oQ(t,e)?-3:t.p[e]))}}t.C==-8&&Z1(t,-9)}function D6(t,e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R,j,C,S,I,x,tt,M,K,et,W,$,a,st,ht,wt,rt,ct,Kt,St,t1,Qt,bt,yt,Yt,V1,r1,D1,Lt,jt,Q0,H1,s0,v1,g1,h0,G0,GA,b0,w1,fe,Ke,gA,hr,m8,QP,oP,en,Tr,xn,An,l9,Zf,lt,A1,k8,Wf,_f,$f;if(e<t.f&&r0(t.p,e)){if(Qf(t,e,5)){if(h=new cL(t.q),m=new cL(t.q),l=!1,x=!1,tt=!1,t.C[e]==6||t.C[e]==7){for(C=0;C<t.e[e];C++)if(lt=t.i[e][C],!!Qf(t,lt,5))for(ws(t,e,lt)&&(t.C[lt]==8||t.C[lt]==16||t.C[lt]==7&&t.e[lt]+It(t,lt)==3&&!_D(t,lt))&&mt(h,m1(lt)),h0=0;h0<t.e[lt];h0++)A1=t.i[lt][h0],A1!=e&&Qf(t,A1,5)&&ws(t,e,A1)&&(t.C[A1]==8||t.C[A1]==16||t.C[A1]==7&&t.e[A1]+It(t,A1)==3&&!_D(t,A1))&&mt(m,m1(A1));for(y=new Zt(h);y.a<y.c.a.length;)if(s=$t(y).a,t.C[s]==8||t.C[s]==16){x=!0;break}for(g=new Zt(m);g.a<g.c.a.length;)if(T=$t(g).a,t.C[T]==8||t.C[T]==16){tt=!0;break}for(j=0;j<h.a.length;j++)for(g1=j;g1<m.a.length;g1++)if(ws(t,(ve(j,h.a.length),h.a[j]).a,(ve(g1,m.a.length),m.a[g1]).a)){l=!0;break}}switch(t.C[e]){case 6:if(m.a.length==0){for(Ke=0,GA=0,w1=0,fe=0,j=0;j<t.e[e];j++)lt=t.i[e][j],t.C[lt]==7&&t.e[lt]+It(t,lt)==3&&(++Ke,t.s[lt]>0&&!_D(t,lt)&&++GA,Qf(t,lt,5)&&++w1,Qf(t,lt,6)&&++fe);if((Ke==2&&w1>0||Ke==3&&w1==2)&&GA>0&&fe==0)return 80}if(!(h.a.length==0^m.a.length==0)){for($f=!0,_f=!0,j=0;j<t.e[e];j++)lt=t.i[e][j],(t.C[lt]!=6||!Mz(t,lt))&&($f=!1),ws(t,e,lt)&&!(lt<t.f&&r0(t.p,lt))&&(_f=!1);if(h.a.length==0&&m.a.length==0&&!$f&&_f||h.a.length!=0&&h.a.length!=0&&(!l||!x&&!tt))return 78}if(h.a.length!=0&&(m.a.length==0||x))return 63;if(m.a.length!=0&&(h.a.length==0||tt))return 64;break;case 7:if(_D(t,e))return 82;if(h.a.length==0&&m.a.length==0)return t.e[e]+It(t,e)==3?39:76;if(t.e[e]+It(t,e)==3&&h.a.length==0^m.a.length==0)return 81;if(h.a.length!=0&&(m.a.length==0||x))return 65;if(m.a.length!=0&&(h.a.length==0||tt))return 66;if(h.a.length!=0&&m.a.length!=0)return 79;break;case 8:return 59;case 16:return 44}}if(Qf(t,e,6))switch(t.C[e]){case 6:return 37;case 7:return _D(t,e)?69:t.e[e]+It(t,e)==3?58:38}}switch(t.C[e]){case 3:if(t.j[e]==0)return 92;break;case 6:if(t.e[e]+It(t,e)==4)return(t.p&&e<t.f?iA(t.p,e):0)==3?22:(t.p&&e<t.f?iA(t.p,e):0)==4?20:1;if(t.e[e]+It(t,e)==3){for(gA=0,hr=0,QP=0,xn=0,b=0,C=0;C<t.e[e];C++)lt=t.i[e][C],dt(t,u1(t,e,lt))==2&&(b=t.C[lt]),t.e[lt]+It(t,lt)==1?(t.C[lt]==8&&++QP,t.C[lt]==16&&++xn):t.C[lt]==7&&(t.e[lt]+It(t,lt)==3?++hr:t.e[lt]+It(t,lt)==2&&dt(t,u1(t,e,lt))==2&&++gA);return hr>=2&&gA==0&&b==7?57:QP==2||xn==2?41:(t.p&&e<t.f?iA(t.p,e):0)==4&&b==6?30:b==7||b==8||b==15||b==16?3:2}if(t.e[e]+It(t,e)==2)return 4;if(t.e[e]+It(t,e)==1)return 60;break;case 7:for(l9=0,H1=!1,S=0;S<t.e[e];S++)if(lt=t.i[e][S],t.C[lt]==8&&t.e[lt]+It(t,lt)==1&&++l9,x1(t,e)+It(t,e)>=3&&(t.C[lt]==15||t.C[lt]==16)){for(Tr=0,g1=0;g1<t.e[lt];g1++)A1=t.i[lt][g1],t.C[A1]==8&&t.e[A1]+It(t,A1)==1&&++Tr;H1||(H1=Tr>=2)}if(t.e[e]+It(t,e)==4)return _D(t,e)?68:34;if(t.e[e]+It(t,e)==3){if(x1(t,e)+It(t,e)>=4){for(R=!1,j=0;j<t.e[e];j++)if(lt=t.i[e][j],dt(t,u1(t,e,lt))==2&&(R=t.C[lt]==7||t.C[lt]==6,t.C[lt]==6))for(g1=0;R&&g1<t.e[lt];g1++)A1=t.i[lt][g1],A1!=e&&(R=!(t.C[A1]==7&&t.e[A1]+It(t,A1)==3));if(l9==1)return 67;if(l9>=2)return 45;if(R)return 54}if(x1(t,e)+It(t,e)>=3){for(ht=!1,st=!1,wt=!1,rt=!1,Qt=!1,t1=!1,A=0,n=0,P=0,r=0,f=0,o=0,j=0;j<t.e[e];j++)if(lt=t.i[e][j],t.C[lt]==6){for(Qt=!0,lt<t.f&&r0(t.p,lt)&&(t.p&&lt<t.f?iA(t.p,lt):0)==6&&(t1=!0),P=0,r=0,f=0,o=0,GA=0,I=0,g1=0;g1<t.e[lt];g1++){if(A1=t.i[lt][g1],v=u1(t,lt,A1),dt(t,v)==2&&(t.C[A1]==8||t.C[A1]==16)&&(ht=!0),(dt(t,v)==2||v<t.g&&Re(t.p,v)&&(t.C[A1]==6||t.C[A1]==7&&RG(t,A1)==1))&&(A=t.C[A1]),dt(t,v)==3&&(n=t.C[A1]),t.C[A1]==7&&t.e[A1]+It(t,A1)==3){for(t.s[A1]==1&&++GA,Qf(t,lt,6)&&++I,Q=0,G0=0;G0<t.e[A1];G0++)k8=t.i[A1][G0],t.C[k8]==8&&++Q;Q<2&&++r}t.C[A1]==7&&t.e[A1]+It(t,A1)==2&&(dt(t,v)==2||v<t.g&&Re(t.p,v))&&++P,A1<t.f&&r0(t.p,A1)&&(t.C[A1]==8&&++f,t.C[A1]==16&&++o)}A==7&&(r==2&&P==0&&GA>0&&I==0&&t.e[lt]+It(t,lt)<4&&(st=!0),r==3&&(wt=!0))}else if(t.C[lt]==7){for(i=0,D=0,L=0,g1=0;g1<t.e[lt];g1++)if(A1=t.i[lt][g1],v=u1(t,lt,A1),dt(t,v)==2){if(t.C[A1]==6){for(G0=0;G0<t.e[A1];G0++)k8=t.i[A1][G0],k8!=e&&(t.C[k8]==7?++i:t.C[k8]==8?++D:t.C[k8]==16&&++L);i==0&&D==0&&L==0&&!t1&&(rt=!0)}t.C[A1]==7&&!t1&&(rt=!0)}}if(Qt){if(n==7&&(H1=!0),st)return 55;if(wt)return 56;if(!ht&&!H1&&(f==0&&o==0&&t1||A==6||A==7||A==15||n==6))return 40}if(!H1&&(ht||rt))return 10}}if(t.e[e]+It(t,e)==2){if(x1(t,e)+It(t,e)==4){for($=!1,j=0;!$&&j<t.e[e];j++)lt=t.i[e][j],$=dt(t,u1(t,e,lt))==3;return $?61:53}if(x1(t,e)+It(t,e)==3){for(yt=!1,W=!1,j=0;j<t.e[e];j++)lt=t.i[e][j],dt(t,u1(t,e,lt))==2&&(yt=t.C[lt]==8&&l9==1,W=t.C[lt]==6||t.C[lt]==7);if(yt&&!W)return 46;if(W)return 9}if(x1(t,e)+It(t,e)>=2){for(Kt=!1,j=0;j<t.e[e];j++)if(lt=t.i[e][j],t.C[lt]==16){for(Zf=0,g1=0;g1<t.e[lt];g1++)A1=t.i[lt][g1],t.C[A1]==8&&t.e[A1]+It(t,A1)==1&&++Zf;Kt=Zf==1}if(Kt)return 48;if(!H1)return 62}}if(H1)return 43;if(t.e[e]+It(t,e)==1){for(St=!1,a=!1,j=0;!St&&!a&&j<t.e[e];j++)if(lt=t.i[e][j],St=dt(t,u1(t,e,lt))==3,t.C[lt]==7&&t.e[lt]+It(t,lt)==2)for(g1=0;!a&&g1<t.e[lt];g1++)A1=t.i[lt][g1],a=t.C[A1]==7&&t.e[A1]+It(t,A1)==2||t.C[A1]==6&&t.e[A1]+It(t,A1)==3;if(St)return 42;if(a)return 47}return 8;case 8:if(t.e[e]+It(t,e)==3)return 49;if(t.e[e]+It(t,e)==2){if(x1(t,e)+It(t,e)==3)return 51;for(b0=0,j=0;j<t.e[e];j++)lt=t.i[e][j],t.C[lt]==1&&++b0;return b0+It(t,e)==2?70:6}if(t.j[e]<=1){for(m8=0,en=0,An=0,D1=t.e[e]-t.j[e]+It(t,e)>0,K=!1,M=!1,r1=!1,Yt=!1,Lt=!1,ct=!1,bt=!1,v1=!1,Q0=!1,s0=!1,jt=!1,j=0;j<t.e[e]&&!(D1||K||M||r1||Yt||Lt||ct||bt||v1||Q0||s0||jt);j++){if(lt=t.i[e][j],t.C[lt]==6||t.C[lt]==7||t.C[lt]==16)for(g1=0;g1<t.e[lt];g1++)A1=t.i[lt][g1],t.C[A1]==7&&t.e[A1]+It(t,A1)==2&&++m8,t.C[A1]==8&&t.e[A1]+It(t,A1)==1&&++en,t.C[A1]==16&&t.e[A1]+It(t,A1)==1&&++An;D1=t.C[lt]==1,t.C[lt]==6&&(K=en==2,M=dt(t,u1(t,e,lt))==2,r1=dt(t,u1(t,e,lt))==1&&en==1),t.C[lt]==7&&(Yt=dt(t,u1(t,e,lt))==2,dt(t,u1(t,e,lt))==1&&en==1&&(Lt=t.e[lt]+It(t,lt)==2||x1(t,lt)+It(t,lt)==3,ct=x1(t,lt)+It(t,lt)==4),bt=en>=2),t.C[lt]==16&&(v1=An==1,Q0=dt(t,u1(t,e,lt))==1||dt(t,u1(t,e,lt))==2&&en+m8>1,s0=dt(t,u1(t,e,lt))==2&&en+m8==1),jt=t.C[lt]==15||t.C[lt]==17}if(r1||Lt||D1)return 35;if(K||bt||ct||v1||Q0||jt)return 32;if(M||Yt||s0)return 7}break;case 9:if(t.j[e]==1)return 11;if(t.j[e]==0)return 89;break;case 11:if(t.j[e]==0)return 93;break;case 12:if(t.j[e]==0)return 99;break;case 14:return 19;case 15:if(t.e[e]+It(t,e)==4)return 25;if(t.e[e]+It(t,e)==3)return 26;if(t.e[e]+It(t,e)==2)return 75;break;case 16:if(t.e[e]+It(t,e)==3||t.e[e]+It(t,e)==4){for(oP=0,An=0,et=!1,j=0;j<t.e[e];j++)lt=t.i[e][j],t.C[lt]==6&&dt(t,u1(t,e,lt))==2&&(et=!0),(t.j[lt]==1&&t.C[lt]==8||t.e[lt]+It(t,lt)==2&&t.C[lt]==7)&&++oP,t.j[lt]==1&&t.C[lt]==16&&++An;return t.e[e]+It(t,e)==3&&oP==2&&et||t.e[e]+It(t,e)==4?18:oP>0&&An>0||oP==2&&!et?73:17}if(t.e[e]+It(t,e)==2){for(V1=!1,j=0;j<t.e[e];j++)lt=t.i[e][j],t.C[lt]==8&&dt(t,u1(t,e,lt))==2&&(V1=!0);return V1?74:15}if(t.e[e]+It(t,e)==1){for(Wf=0,et=!1,j=0;j<t.e[e];j++){for(lt=t.i[e][j],g1=0;g1<t.e[lt];g1++)A1=t.i[lt][g1],t.C[A1]==16&&t.e[A1]+It(t,A1)==1&&++Wf;t.C[lt]==6&&dt(t,u1(t,e,lt))==2&&(et=!0)}return et&&Wf!=2?16:72}break;case 17:if(t.j[e]==4){for(QP=0,j=0;j<t.e[e];j++)lt=t.i[e][j],t.C[lt]==8&&++QP;if(QP==4)return 77}if(t.j[e]==1)return 12;if(t.j[e]==0)return 90;break;case 19:if(t.j[e]==0)return 94;break;case 20:if(t.j[e]==0)return 96;break;case 26:if(t.j[e]==0){if(t.s[e]==2)return 87;if(t.s[e]==3)return 88}break;case 29:if(t.j[e]==0){if(t.s[e]==1)return 97;if(t.s[e]==2)return 98}break;case 30:if(t.j[e]==0)return 95;break;case 35:if(t.j[e]==1)return 13;if(t.j[e]==0)return 91;break;case 53:if(t.j[e]==1)return 14}return 0}function u6(){u6=d1,Ql=B(d(OA,1),te,6,14,[524290,524292,524297,524301,589826,589827,589828,589829,589832,589833,589837,589838,688130,688131,688132,688137,688141,819202,819203,819204,819205,819208,819209,1114114,1114115,1114116,1114120,1212420,1343492,1343496,1638402,1638403,17367042,17367043,17367044,17367045,17367048,17367049,17367053,17367054,17465346,1074266116,1208483842,1208483844,1208549378,1208549379,1208549380,1208549384,1208549388,1409810434,1409875970,1409875971,1409875972,1409875976,1409974274,1409974280,1409974284,1678311426,1678311427,1678311428,1678311432,1678311436,1678409730,1678409731,1678409732,1678540802,1678540803,1678540804,1678540808,2282291202,2282291203,2282389506,2282389507,2282520578,2282520579,2483617794,2483617795,2483716098,2483716099,2752675842,3356033026,3557359618,3557457922,3557588994,34510798850,34510798851,34510798852,34510798856,34712125442,34712125443,34712125444,34712125448,34712223746,34712223747,34712223748,34980560898,34980560899,34980659202,35568287746,35568287747,35568287748,35568287752,35568386050,35568386051,35568386052,35568517122,35568517123,35568517124,35568517128,35568812034,35568812035,35568910338,35568910339,35568910350,35569336322,35585064962,35585064963,35585064964,35585064968,35769548802,35769614338,35769712642,35769843714,35786391554,sH,yH,lH,hH,TH,cH,wH,gH,dH,BH,vH,FH,mH,3437652377603,kH,bH,4674334294019,RH,jH,4674602827778,pH,CH,HH,MH,5086651154435,VH,5086651252739,EH,5086651252744,SH,5086919589896,qH,5086919819266,IH,xH,NH,5636675633154,{l:589826,m:73760,h:4},{l:589827,m:73760,h:4},{l:688130,m:73760,h:4},{l:819202,m:73760,h:4},{l:65538,m:73764,h:4},{l:65539,m:73764,h:4},{l:589826,m:172064,h:4},{l:589827,m:172064,h:4},{l:688130,m:172064,h:4},{l:819202,m:172064,h:4},{l:819203,m:172064,h:4},{l:65538,m:172068,h:4},{l:65539,m:172068,h:4},{l:589826,m:172112,h:4},{l:589827,m:172112,h:4},{l:688130,m:172112,h:4},{l:819202,m:172112,h:4},{l:65538,m:172116,h:4},{l:163842,m:172116,h:4},{l:589826,m:303136,h:4},{l:688130,m:303136,h:4},{l:819202,m:303136,h:4},{l:65538,m:303140,h:4},{l:589826,m:303184,h:4},{l:688130,m:303184,h:4},{l:819202,m:303184,h:4},{l:65538,m:303188,h:4},OH,GH,JH,zH,YH,KH,XH,{l:688130,m:590224,h:4},{l:819202,m:590224,h:4},ZH,WH,_H,$H,aH,tM,eM,AM,{l:688135,m:590416,h:4},nM,{l:1212430,m:590416,h:4},{l:65538,m:598052,h:4},{l:65538,m:598100,h:4},{l:65539,m:598100,h:4},{l:163842,m:598100,h:4},{l:163843,m:598100,h:4},PM,rM,iM,{l:688131,m:598304,h:4},fM,DM,uM,QM,oM,{l:589826,m:688672,h:4},UM,LM,sM,yM,{l:589827,m:590112,h:336},lM,hM,TM,cM,wM,gM,dM,BM,vM,{l:688130,m:819536,h:400},FM,mM,kM,{l:589831,m:590112,h:592},bM,RM,jM,pM,CM,HM,{l:819207,m:819600,h:592},MM,VM,EM,{l:589832,m:1212816,h:592},{l:688136,m:1212816,h:592},SM,qM,IM,xM,NM,{l:589826,m:819488,h:8480},OM,GM,JM,zM,{l:819208,m:1213008,h:8480},YM,KM,{l:688130,m:590160,h:8484},{l:589826,m:598304,h:8484},XM,{l:819202,m:598304,h:8484}]),zf=B(d(Ee,1),PA,6,15,[-.1899999976158142,1.2699999809265137,-.7009999752044678,2.690999984741211,-.22699999809265137,_p,.10599999874830246,-.47600001096725464,-.44699999690055847,-.19099999964237213,-.3330000042915344,.0860000029206276,.24699999392032623,-.06199999898672104,.01600000075995922,.3869999945163727,.23499999940395355,-.4320000112056732,-.902999997138977,.38999998569488525,.5809999704360962,4.52400016784668,-.6349999904632568,-.2800000011920929,.7699999809265137,-.05000000074505806,1.0870000123977661,.19200000166893005,.19599999487400055,-.5199999809265137,.5419999957084656,.3630000054836273,.7919999957084656,.5920000076293945,.9639999866485596,$M,-.6850000023841858,-.3149999976158142,-.4129999876022339,-.5950000286102295,.2199999988079071,-1.4320000410079956,-2.253999948501587,.4399999976158142,-.27000001072883606,-.13300000131130219,-.26899999380111694,.2669999897480011,.5720000267028809,-.5680000185966492,.17399999499320984,-.1850000023841858,-.23499999940395355,iV,fV,-.34200000762939453,-.3479999899864197,-.43700000643730164,-.8040000200271606,-.41200000047683716,-.2150000035762787,-.625,-.8309999704360962,.4970000088214874,-.4309999942779541,-1.3309999704360962,.5070000290870667,-.6320000290870667,-.5989999771118164,-.15600000321865082,-.3529999852180481,-.164000004529953,-.4410000145435333,-.4970000088214874,-1.059999942779541,.11500000208616257,-.22499999403953552,-.15399999916553497,-.03099999949336052,-1.5740000009536743,-1.093000054359436,AV,-.44999998807907104,-.5559999942779541,fV,2.384000062942505,1.75,-1.6660000085830688,-1.065999984741211,1.3270000219345093,.8029999732971191,-1.5049999952316284,-2.5369999408721924,iV,.14900000393390656,.5210000276565552,2.9049999713897705,-.25200000405311584,.8600000143051147,.3610000014305115,.40299999713897705,.004999999888241291,1.1460000276565552,.9359999895095825,-.30000001192092896,.20900000631809235,-.5830000042915344,-.024000000208616257,-.009999999776482582,.6110000014305115,.4860000014305115,.8619999885559082,-.03500000014901161,-.5960000157356262,1.1610000133514404,1.6469999551773071,.843999981880188,.125,.1420000046491623,-.17100000381469727,.44200000166893005,.08799999952316284,3.065999984741211,1.6519999504089355,DV,-.017999999225139618,.023000000044703484,.0729999989271164,.2540000081062317,.5540000200271606,.5950000286102295,-.4059999883174896,-.6370000243186951,-.17399999499320984,-.10100000351667404,-.5429999828338623,-2.4059998989105225,-3.2920000553131104,-.05299999937415123,-.19300000369548798,_6,-1.2610000371932983,-.656000018119812,-.7300000190734863,-.9380000233650208,.12800000607967377,1.1540000438690186,.24199999868869781,-.5289999842643738,-.27799999713897705,-.8019999861717224,.9120000004768372,-1.38100004196167,.46299999952316284,1.0740000009536743,-.628000020980835,-.9620000123977661,-1.8320000171661377,-1.4989999532699585,-2.115999937057495,-2.2070000171661377,-1.3170000314712524,2.500999927520752,-.8489999771118164,tV,-.621999979019165,2.121999979019165,-2.2260000705718994,.9129999876022339,-2.259000062942505,-1.25,1.3940000534057617,-1.4019999504089355,2.072999954223633,-2.9570000171661377,.29100000858306885,-3.4760000705718994,-2.7269999980926514,-3.131999969482422,-2.119999885559082,-.7250000238418579,-.296999990940094,.08299999684095383,.34700000286102295,-1.4249999523162842,-1.659999966621399,-1.281999945640564,-1.2649999856948853,.718999981880188,.1379999965429306,1.3020000457763672,.859000027179718,1.3589999675750732,.6589999794960022,-.9399999976158142,.8999999761581421,.3190000057220459,-2.571000099182129,1.1089999675750732,.972000002861023,1.652999997138977,2.6019999980926514,.7289999723434448,1.065999984741211,1.0670000314712524,-.3109999895095825,.03099999949336052,DV,-.6809999942779541,-1.2580000162124634,FC,-3.0959999561309814,-.2280000001192093,1.9329999685287476,.11900000274181366,2.1080000400543213,.11299999803304672,1.628000020980835,1.3079999685287476,3.3359999656677246,.7540000081062317,-.4650000035762787,-.3970000147819519,.07699999958276749,-.4790000021457672,-.15299999713897705,.14100000262260437,2.134999990463257,.23399999737739563,.460999995470047,.6700000166893005,-.3610000014305115,-1.0390000343322754,-.4830000102519989,.13699999451637268,-.7680000066757202,-.5109999775886536,3.4240000247955322,-.8550000190734863,-.5849999785423279,-1.5670000314712524,3.3429999351501465,1.840000033378601,.3889999985694885,1.121999979019165,$6,1.3350000381469727,.3659999966621399,-.5569999814033508,.4320000112056732,.20399999618530273,.8820000290870667,.4659999907016754,-.4580000042915344,.40400001406669617,.6570000052452087,1.1150000095367432,1.9759999513626099,1.7860000133514404,-.035999998450279236,-1.0499999523162842,1.0449999570846558,.04399999976158142,1.0329999923706055,-1.0800000429153442,2.5390000343322754,2.234999895095825,Y6,3.121000051498413,3.931999921798706,2.75])}function mp(t,e,A,n,P){var r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R,j,C,S,I,x,tt,M,K,et,W,$,a,st,ht,wt,rt,ct,Kt,St,t1,Qt,bt,yt,Yt,V1,r1,D1,Lt,jt,Q0,H1,s0,v1,g1,h0,G0,GA,b0,w1,fe,Ke,gA,hr,m8,QP,oP,en,Tr,xn,An,l9,Zf,lt,A1,k8,Wf,_f,$f,yc,lc,hc,Tc,cc,wc,gc,dc,ml,kl,Bc,vc,Fc,mc,kc,bc,nn,Rc,jc,pc,Cc,Hc,Mc,Vc,Ec,Sc,qc,Ic,OP,xc,b8,I2,x2,aE,bl,tS,eS,AS,nS,n1,Nc,PS,rS,iS,h9,fS,GP,N2,Rl,No,DS,UP,jl,uS,Oo,QS,Go,oS,Jo;if(xL(e),e.d=null,!(A==null||0>=A.length)){if(t.g=e,jl=8,n!=null&&(P<0||P>=n.length)&&(n=null),aU(t,A,0),f=nt(t,4),C=nt(t,4),f>8&&(jl=f,f=C),f==0){je(t.g,nt(t,1)==1);return}for(D=nt(t,f),Q=nt(t,C),nS=nt(t,f),iS=nt(t,f),PS=nt(t,f),ht=nt(t,f),y=0;y<D;y++)Wr(t.g,6);for(Ke=0;Ke<nS;Ke++)K0(t.g,nt(t,f),7);for(gA=0;gA<iS;gA++)K0(t.g,nt(t,f),8);for(lt=0;lt<PS;lt++)K0(t.g,nt(t,f),nt(t,8));for(wc=0;wc<ht;wc++)E0(t.g,nt(t,f),nt(t,4)-8);for(wt=1+Q-D,yt=nt(t,4),j=0,Be(t.g,0,0),Ie(t.g,0,0),TP(t.g,0,0),Yt=n!=null&&n[P]>=39,UP=0,Oo=0,Go=0,Jo=0,St=!1,t1=!1,Yt&&(n.length>2*D-2&&n[2*D-2]==39||n.length>3*D-3&&n[3*D-3]==39?(t1=!0,St=n.length==3*D-3+9,OP=St?3*D-3:2*D-2,R=86*(n[OP+1]-40)+n[OP+2]-40,UP=w.Math.pow(10,R/2e3-1),OP+=2,uS=86*(n[OP+1]-40)+n[OP+2]-40,Oo=w.Math.pow(10,uS/1500-1),OP+=2,QS=86*(n[OP+1]-40)+n[OP+2]-40,Go=w.Math.pow(10,QS/1500-1),St&&(OP+=2,oS=86*(n[OP+1]-40)+n[OP+2]-40,Jo=w.Math.pow(10,oS/1500-1))):St=n.length==3*D-3),t._b()&&St&&(n=null,Yt=!1),nn=1;nn<D;nn++){if(D1=nt(t,yt),D1==0){Yt&&(Be(t.g,nn,t.g.J[0].a+8*(n[nn*2-2]-83)),Ie(t.g,nn,t.g.J[0].b+8*(n[nn*2-1]-83)),St&&TP(t.g,nn,t.g.J[0].c+8*(n[2*D-3+nn]-83))),++wt;continue}j+=D1-1,Yt&&(Be(t.g,nn,kt(t.g,j)+n[nn*2-2]-83),Ie(t.g,nn,pt(t.g,j)+n[nn*2-1]-83),St&&TP(t.g,nn,vA(t.g,j)+(n[2*D-3+nn]-83))),O0(t.g,j,nn,1)}for(Vc=0;Vc<wt;Vc++)O0(t.g,nt(t,f),nt(t,f),1);for(xc=c(Pt,ft,6,Q,16,1),K=0;K<Q;K++)switch(et=nt(t,2),et){case 0:xc[K]=!0;break;case 2:w0(t.g,K,2);break;case 3:w0(t.g,K,4)}for(i=nt(t,f),Ec=0;Ec<i;Ec++)if(s=nt(t,f),jl==8)h9=nt(t,2),h9==3?(Me(t.g,s,1,0),ce(t.g,s,1,!1)):ce(t.g,s,h9,!1);else switch(h9=nt(t,3),h9){case 4:ce(t.g,s,1,!1),Me(t.g,s,1,nt(t,3));break;case 5:ce(t.g,s,2,!1),Me(t.g,s,1,nt(t,3));break;case 6:ce(t.g,s,1,!1),Me(t.g,s,2,nt(t,3));break;case 7:ce(t.g,s,2,!1),Me(t.g,s,2,nt(t,3));break;default:ce(t.g,s,h9,!1)}for(jl==8&&nt(t,1)==0&&(t.g.L=!0),r=nt(t,C),Sc=0;Sc<r;Sc++)if(I=nt(t,C),l1(t.g,I)==1)switch(h9=nt(t,3),h9){case 4:P8(t.g,I,1,!1),U8(t.g,I,1,nt(t,3));break;case 5:P8(t.g,I,2,!1),U8(t.g,I,1,nt(t,3));break;case 6:P8(t.g,I,1,!1),U8(t.g,I,2,nt(t,3));break;case 7:P8(t.g,I,2,!1),U8(t.g,I,2,nt(t,3));break;default:P8(t.g,I,h9,!1)}else P8(t.g,I,nt(t,2),!1);for(je(t.g,nt(t,1)==1),L=null,No=null,Nc=0;nt(t,1)==1;)switch(bt=Nc+nt(t,4),bt){case 0:for(n1=nt(t,f),qc=0;qc<n1;qc++)s=nt(t,f),h1(t.g,s,N1,!0);break;case 1:for(n1=nt(t,f),Ic=0;Ic<n1;Ic++)s=nt(t,f),tS=nt(t,8),R9(t.g,s,tS);break;case 2:for(n1=nt(t,C),hr=0;hr<n1;hr++)nt(t,C);break;case 3:for(n1=nt(t,f),m8=0;m8<n1;m8++)s=nt(t,f),h1(t.g,s,C0,!0);break;case 4:for(n1=nt(t,f),QP=0;QP<n1;QP++)s=nt(t,f),Rl=j1(nt(t,4),3),h1(t.g,s,Rl,!0);break;case 5:for(n1=nt(t,f),oP=0;oP<n1;oP++)s=nt(t,f),o=j1(nt(t,2),1),h1(t.g,s,o,!0);break;case 6:for(n1=nt(t,f),en=0;en<n1;en++)s=nt(t,f),h1(t.g,s,1,!0);break;case 7:for(n1=nt(t,f),Tr=0;Tr<n1;Tr++)s=nt(t,f),b0=j1(nt(t,4),7),h1(t.g,s,b0,!0);break;case 8:for(n1=nt(t,f),xn=0;xn<n1;xn++){for(s=nt(t,f),m=nt(t,4),T=c(F,k,6,m,15,1),b8=0;b8<m;b8++)g=nt(t,8),T[b8]=g;oT(t.g,s,T)}break;case 9:for(n1=nt(t,C),An=0;An<n1;An++)I=nt(t,C),Rl=nt(t,2)<<7,Ge(t.g,I,Rl,!0);break;case 10:for(n1=nt(t,C),l9=0;l9<n1;l9++)I=nt(t,C),$=nt(t,5),Ge(t.g,I,$,!0);break;case 11:for(n1=nt(t,f),Zf=0;Zf<n1;Zf++)s=nt(t,f),h1(t.g,s,ge,!0);break;case 12:for(n1=nt(t,C),A1=0;A1<n1;A1++)I=nt(t,C),a=nt(t,8)<<9,Ge(t.g,I,a,!0);break;case 13:for(n1=nt(t,f),k8=0;k8<n1;k8++)s=nt(t,f),fS=j1(nt(t,3),14),h1(t.g,s,fS,!0);break;case 14:for(n1=nt(t,f),Wf=0;Wf<n1;Wf++)s=nt(t,f),AS=j1(nt(t,5),17),h1(t.g,s,AS,!0);break;case 15:case 31:Nc+=16;break;case 16:for(n1=nt(t,f),_f=0;_f<n1;_f++)s=nt(t,f),N2=j1(nt(t,3),22),h1(t.g,s,N2,!0);break;case 17:for(n1=nt(t,f),$f=0;$f<n1;$f++)s=nt(t,f),XA(t.g,s,nt(t,4));break;case 18:for(n1=nt(t,f),bl=nt(t,4),yc=0;yc<n1;yc++){for(s=nt(t,f),Qt=nt(t,bl),I2=c(E,q,6,Qt,15,1),b8=0;b8<Qt;b8++)I2[b8]=nt(t,7)<<24>>24;EP(t.g,s,fn((x2=I2,c0(),x2)))}break;case 19:for(n1=nt(t,f),lc=0;lc<n1;lc++)s=nt(t,f),st=j1(nt(t,3),25),h1(t.g,s,st,!0);break;case 20:for(n1=nt(t,C),hc=0;hc<n1;hc++)I=nt(t,C),N2=nt(t,3)<<17,Ge(t.g,I,N2,!0);break;case 21:for(n1=nt(t,f),Tc=0;Tc<n1;Tc++)s=nt(t,f),Ne(t.g,s,nt(t,2)<<4);break;case 22:for(n1=nt(t,f),cc=0;cc<n1;cc++)s=nt(t,f),h1(t.g,s,o9,!0);break;case 23:for(n1=nt(t,C),gc=0;gc<n1;gc++)I=nt(t,C),Ge(t.g,I,c8,!0);break;case 24:for(n1=nt(t,C),dc=0;dc<n1;dc++)I=nt(t,C),o=nt(t,2)<<21,Ge(t.g,I,o,!0);break;case 25:for(ml=0;ml<D;ml++)nt(t,1)==1&&dP(t.g,ml,!0);break;case 26:for(n1=nt(t,C),L=c(F,k,6,n1,15,1),kl=0;kl<n1;kl++)L[kl]=nt(t,C);break;case 27:for(n1=nt(t,f),Bc=0;Bc<n1;Bc++)s=nt(t,f),h1(t.g,s,a0,!0);break;case 28:for(n1=nt(t,C),vc=0;vc<n1;vc++)w0(t.g,nt(t,C),16);break;case 29:for(n1=nt(t,f),Fc=0;Fc<n1;Fc++)s=nt(t,f),GA=j1(nt(t,2),30),h1(t.g,s,GA,!0);break;case 30:for(n1=nt(t,f),mc=0;mc<n1;mc++)s=nt(t,f),N2=j1(nt(t,7),32),h1(t.g,s,N2,!0);break;case 32:for(n1=nt(t,f),kc=0;kc<n1;kc++)s=nt(t,f),DS=j1(nt(t,2),44),h1(t.g,s,DS,!0);break;case 33:for(n1=nt(t,f),bc=0;bc<n1;bc++)s=nt(t,f),s0=j1(nt(t,5),39),h1(t.g,s,s0,!0);break;case 34:for(n1=nt(t,f),Rc=0;Rc<n1;Rc++)s=nt(t,f),h1(t.g,s,ZQ,!0);break;case 35:for(n1=nt(t,C),jc=0;jc<n1;jc++)I=nt(t,C),Ge(t.g,I,Mf,!0);break;case 36:for(n1=nt(t,C),pc=0;pc<n1;pc++)I=nt(t,C),W=nt(t,2)<<5,Ge(t.g,I,W,!0);break;case 37:for(n1=nt(t,C),Cc=0;Cc<n1;Cc++)I=nt(t,C),W=nt(t,1)==0?32:64,w0(t.g,I,W);break;case 38:for(n1=nt(t,f),rt=nt(t,3),No=c(F,k,6,D,15,1),Hc=0;Hc<n1;Hc++)s=nt(t,f),ct=nt(t,rt),No[s]=ct;break;case 39:for(n1=nt(t,f),Mc=0;Mc<n1;Mc++)s=nt(t,f),rS=j1(nt(t,4),47),h1(t.g,s,rS,!0);break;case 40:for(n1=nt(t,f),bl=nt(t,6),eS=nt(t,16),fe=0;fe<n1;fe++){for(s=nt(t,f),Qt=nt(t,bl),I2=new V0,b8=0;b8<Qt;b8++)Oe(I2,nt(t,eS)&c1);EP(t.g,s,I2.a)}}if(Bf(new c9(t.g),xc,!1),L!=null)for(x=L,tt=0,M=x.length;tt<M;++tt)I=x[tt],w0(t.g,I,l1(t.g,I)==2?4:2);if(n==null&&!t.i&&A.length>t.e+1&&(A[t.e+1]==32||A[t.e+1]==9)&&(n=A,P=t.e+2),n!=null)try{if(n[P]==33||n[P]==35){for(aU(t,n,P+1),St=nt(t,1)==1,t1=nt(t,1)==1,GP=2*nt(t,4),S=1<<GP,h0=0,I=0,l=1;l<D;l++)I<Q&&z(t.g,1,I)==l?(h0=z(t.g,0,I++),g1=1):(h0=0,g1=8),V1=g1*(nt(t,GP)+1-(S>>1)),r1=g1*(nt(t,GP)+1-(S>>1)),Be(t.g,l,kt(t.g,h0)+V1),Ie(t.g,l,pt(t.g,h0)+r1),St&&TP(t.g,l,vA(t.g,h0)+g1*(nt(t,GP)+1-(S>>1)));if(n[P]==35){for(w1=0,G0=c(F,k,6,D,15,1),h=0;h<D;h++)w1+=G0[h]=It(t.g,h);for(s=0;s<D;s++)for(fe=0;fe<G0[s];fe++)b0=Wr(t.g,1),O0(t.g,s,b0,1),Be(t.g,b0,kt(t.g,s)+(nt(t,GP)+1-(S>>1))),Ie(t.g,b0,pt(t.g,s)+(nt(t,GP)+1-(S>>1))),St&&TP(t.g,b0,vA(t.g,s)+(nt(t,GP)+1-(S>>1))),No!=null&&(No[s]&1<<fe)!=0&&dP(t.g,b0,!0);D+=w1,Q+=w1}if(b=St?1.5:(J1(),J1(),gn),v=wP(t.g,D,Q,b),t1)for(UP=DO(nt(t,GP),S),Oo=UP*Zh(nt(t,GP),S),Go=UP*Zh(nt(t,GP),S),St&&(Jo=UP*Zh(nt(t,GP),S)),g1=UP/v,s=0;s<D;s++)Be(t.g,s,Oo+g1*kt(t.g,s)),Ie(t.g,s,Go+g1*pt(t.g,s)),St&&TP(t.g,s,Jo+g1*vA(t.g,s));else for(UP=1.5,g1=UP/v,s=0;s<D;s++)Be(t.g,s,g1*kt(t.g,s)),Ie(t.g,s,g1*pt(t.g,s)),St&&TP(t.g,s,g1*vA(t.g,s))}else if(St&&!t1&&UP==0&&(UP=1.5),UP!=0&&t.g.r!=0){for(v=0,I=0;I<t.g.r;I++)Lt=kt(t.g,z(t.g,0,I))-kt(t.g,z(t.g,1,I)),jt=pt(t.g,z(t.g,0,I))-pt(t.g,z(t.g,1,I)),Q0=St?vA(t.g,z(t.g,0,I))-vA(t.g,z(t.g,1,I)):0,v+=w.Math.sqrt(Lt*Lt+jt*jt+Q0*Q0);for(v/=t.g.r,v1=UP/v,s=0;s<t.g.q;s++)Be(t.g,s,kt(t.g,s)*v1+Oo),Ie(t.g,s,pt(t.g,s)*v1+Go),St&&TP(t.g,s,vA(t.g,s)*v1+Jo)}}catch(R8){if(R8=a1(R8),Xt(R8,19))H1=R8,Zr(H1,(z1(),Ti),\"\"),\"\"+H1+fn((aE=A,c0(),aE))+fn((x2=n,x2)),n=null,St=!1;else throw At(R8)}if(Kt=n!=null&&!St,gZ(t),Kt||t._b())for(ut(t.g,7),I=0;I<t.g.g;I++)dt(t.g,I)==2&&!$P(t.g,I)&&qe(t.g,I)==0&&n3(t.g,I);if(UD(t.g,0),!Kt&&t._b())try{t.ac(t.g),Kt=!0}catch(R8){if(R8=a1(R8),Xt(R8,19))H1=R8,Zr(H1,(z1(),Ti),\"\"),\"\"+H1+fn((x2=A,c0(),x2));else throw At(R8)}Kt?(of(t.g),S3(t.g)):St||UD(t.g,0)}}function Ff(){Ff=d1,s9=B(d(it,1),Dt,2,6,[\"QM@HzAmdqjF@\",\"RF@Q``\",\"qC`@ISTAlQE`\",\"`J@H\",\"QM@HzAmdqbF@\",\"qC`@ISTAlQEhqPp@\",\"sJP@DiZhAmQEb\",\"RF@QPvR@\",\"QM@HzA@\",\"qC`@ISTAlQEhpPp@\",\"qC`@Qz`MbHl\",\"sJP@DiZhAmQEcFZF@\",\"RFPDXH\",\"qC`@IVtAlQE`\",\"QM@HvAmdqfF@\",\"sGP@DiVj`FsDVM@\",\"`L@H\",\"sJP@DizhAmQEcFBF@\",\"sJP@DjvhAmQEb\",\"sFp@DiTt@@AlqEcP\",\"sGP@LdbMU@MfHlZ\",\"QMHAIhD\",\"QM@HzAy@\",\"sJP@DkVhAmQEb\",\"sNp@DiUjj@[\\\\QXu`\",\"sJP@DiZhAmQEcFBF@\",\"sGP@DjVj`FsDVM@\",\"RFPDTH\",\"RG@DXOH@\",\"sGP@Divj`FsDVMcAC@\",\"sGP@Dj}j`FsDVM@\",\"qC`@Qz`MbHmFRF@\",\"sNp@LdbJjj@[\\\\QXu`\",\"QMHAIhGe@\",\"QM@HzAyd`\",\"QM`AIhD\",\"qC`@ISTA@\",\"sGP@DkUj`FsDVM@\",\"qC`@IVtAlQEhqPp@\",\"sNp@DiUjj@[\\\\QXuqea`@\",\"KAx@@IRjuUPAlHPfES\\\\\",\"QM`BN`P\",\"sJP@DjZhAmQEcFJF@\",\"Hid@@DjU^nBBH@FtaBXUMp`\",\"sNp@Diujj@[\\\\QXuq`a`@\",\"sJP@DjvhAmQEcFZF@\",\"sJP@DjZhAmQEcFFF@\",\"sOp@DjWkB@@FwDVM\\\\YhX@\",\"sNp@Dj}Zj@[\\\\QXu`\",\"sNp@DiWjj@[\\\\QXuq`a`@\",\"sOp@DjWkB@@D\",\"KAx@@ITouUPAlHPfES\\\\\",\"KAx@@YIDTjjh@vDHSBin@\",\"sNp@DkUZj@[\\\\QXu`\",\"RFPDXOH@\",\"QM`BN`^L`\",\"qC`@ISTAy@\",\"sGP@LdbMU@MfHl[FVF@\",\"qCb@AIZ`H\",\"KAx@@IRjuUPAlHPfES]FFa`@\",\"KAx@@ITnuUPAlHPfES\\\\\",\"HiD@@DiUVjj`AmHPfES\\\\H\",\"sNp@DjUjj@[\\\\QXu`\",\"sJP@DkVhAmQEcFJF@\",\"sGP@DjVj`FsDVMcCC@\",\"qC`@Qz`MbHmFBF@\",\"sJP@DkfhAmQEb\",\"qC`@IVtAlQEhsPp@\",\"sGP@Djuj`FsDVM@\",\"sGP@Dj}j`FsDVMcMC@\",\"sJP@DiZhA@\",\"KAx@@ISjuUPAlHPfES]F@a`@\",\"sJP@DjZhAmQEcFRF@\",\"KAx@@IRnuUPAlHPfES]F@a`@\",\"HiD@@DjWvjj`AmHPfES\\\\H\",\"QMHAIhGd@\",\"sNp@DiUjj@[\\\\QXuq`a`@\",\"KAx@@IVjmUPAlHPfES\\\\\",\"sGP@DjVj`FsDVMcMC@\",\"QM`AIhGe@\",\"HiD@@LdbJRjjh@[RDIaTwB\",\"qCp@AIZ`H\",\"sGP@LdbMU@MfHl[FFF@\",\"QMDARVA@\",\"sNp@LdbJjj@[\\\\QXuqba`@\",\"sNp@LdbJjj@[\\\\QXuqca`@\",\"sGP@Dkej`FsDVM@\",\"qCb@AIZ`OI@\",\"HaD@@DjUZxHH@AlHPfES]FLa`@\",\"sGP@DkYj`FsDVM@\",\"qCb@AIV`H\",\"sNp@LdbJjj@[\\\\QXuqea`@\",\"sGP@DkUj`FsDVMcEC@\",\"sFp@DiTt@@Axa@\",\"Hmt@@DjU_ZxHHj@AmhPfES\\\\Lj\",\"QM`BN`^P\",\"qCb@AIZ`OH`\",\"sFp@DiTt@@AxaP\",\"sGP@Djuj`FsDVMcEC@\",\"sGP@Djuj`FsDVMcIC@\",\"sGP@DkUj`FsDVMcKC@\",\"sJP@DkfhAmQEcFRF@\",\"sGP@DjVj`FsDVMcIC@\",\"HaD@@DjUZxHH@AlHPfES]FFa`@\",\"qC`@IRtDVqDV@\",\"sNp@Dj}Zj@[\\\\QXuqfa`@\",\"KAx@@ITnuUPAlHPfES]FFa`@\",\"HiD@@DkUUjj`AmHPfES\\\\H\",\"sJQ@@dkU@H\",\"qC`@Qz`H\",\"KAx@@IUkmUPAlHPfES\\\\\",\"KAx@@ITouUPAlHPfES]FJa`@\",\"sJP@H~j@[TQX`\",\"sGP@DjZj`FsDVM@\",\"sJP@DkVhAmQEcFFF@\",\"sJX@@eKU@H\",\"sJP@DizhAy@\",\"QMHAIhGbP\",\"KAx@@ITouUPAlHPfES]FNa`@\",\"HaD@@DjUZxHD@AlHPfES\\\\\",\"HaD@@DjUZxHH@A@\",\"sNp@LdbJjj@[\\\\QXuqaa`@\",\"Hed@@LdbRQUUUP@vTHSBinFP\",\"KAx@@ITouUPAlHPfES]FLa`@\",\"sNp@DkUZj@[\\\\QXuqba`@\",\"KAx@@ITjuUPAlHPfES]FNa`@\",\"KAx@@YIDTjjh@vDHSBincGPp@\",\"HaD@@DjYvxH`@AlHPfES]FLa`@\",\"RF@QP`\",\"qCb@AIj`H\",\"sNp@DjUjj@[\\\\QXuqaa`@\",\"sNp@DkVZj@[\\\\QXu`\",\"KAx@@YIDUJjh@vDHSBin@\",\"sGP@DkYj`FsDVMcIC@\",\"sGP@DjVj`FsDVMcAC@\",\"sGP@DiVj`D\",\"sJP@DkVhAmQEcFZF@\",\"sNp@LdbLjj@[\\\\QXu`\",\"QM@HvAmdqbF@\",\"HaD@@DjWjXHB@AlHPfES\\\\\",\"sNp@DjwZj@[\\\\QXuqba`@\",\"sNp@LdbJjj@[\\\\QXuqda`@\",\"sFp@DiTt@@Axa`\",\"HiD@@Djuujj`AmHPfES\\\\H\",\"sNp@DkUZj@[\\\\QXuqca`@\",\"sJP@DiZhAy@\",\"KAx@@YIDTjjh@vDHSBincCPp@\",\"KAx@@IWNmUPAlHPfES\\\\\",\"KAx@@IVkMUPAlHPfES\\\\\",\"sJQ@@dju@H\",\"qCb@AIZ`OH@\",\"qC`@ISTAxa@\",\"sNp@DjyZj@[\\\\QXu`\",\"Hid@@DjUfaBB`@FtaBXUMp`\",\"HiD@@DiUVjj`AmHPfES\\\\LXBF@\",\"KAx@@IUjmUPAlHPfES\\\\\",\"HiD@@DjWvjj`AmHPfES\\\\LXjF@\",\"sJP@DjVhAmQEb\",\"qCb@AIV`OH`\",\"HiD@@LdbJRjjh@[RDIaTwCFDa`@\",\"KAx@@YIDTjjh@vDHSBinc@Pp@\",\"sNp@DjUjj@[\\\\QXuqda`@\",\"qC`@Qz`OED\",\"sJP@DkfhAmQEcFZF@\",\"KAx@@YIDbjjh@vDHSBincDPp@\",\"sGP@Djyj`FsDVMcMC@\",\"KAx@@IVrmUPAlHPfES\\\\\",\"qCp@AIZ`OI@\",\"sJX@@dkU@H\",\"sJQ@@dkU@OH`\",\"sNp@Di]ZjBBvxbqk@\",\"Hkl@@DjU_Uk``bj`@[VDIaTwCJzX\",\"sGP@DjZj`FsDVMcEC@\",\"Hid@@DjU^nBBH@FtaBXUMpqcHX@\",\"sNp@DkeZj@[\\\\QXu`\",\"sNp@DjYjj@[\\\\QXuqca`@\",\"sGQ@@djuT@`\",\"HiD@@LdbJTjjh@[RDIaTwB\",\"sOp@DjWkB@@Gd`\",\"HeT@@LdbbRKBDQD@CYPaLJfxY@\",\"qCr@XIKTA@\",\"HiD@@DjW^jj`AmHPfES\\\\LXJF@\",\"HeT@@DjU]k``b`@[JDIaTwCH\",\"sGP@Djuj`FsDVMcCC@\",\"`IH`B\",\"sOp@DjWkB@@GdX\",\"sJQ@@eKU@H\",\"KAx@@YIDUJjh@vDHSBincBPp@\",\"sJX@@eKU@OH@\",\"KAx@@YIDTjjh@vDHSBincAPp@\",\"sOq@@drm\\\\@@@`\",\"KAx@@IUkMUPAlHPfES\\\\\",\"qCp@AIj`H\",\"Hed@@DjUUjjj@FraBXUMpr\",\"sGX@@eJuT@`\",\"sGP@DkUj`FsDVMcCC@\",\"HiD@@Dj}Ujj`AmHPfES\\\\LXrF@\",\"KAx@@ITouUPAlHPfES]FHa`@\",\"Hed@@DjWujjj@FraBXUMpsFIa`@\",\"sGP@DiUj``mfHlZ\",\"sFp@DiTvjhAlqEcP\",\"Hid@@DjU^nBBH@FtaBXUMpq`XX@\",\"sJP@DkVdAmQEb\",\"qCp@AIZ`OH`\",\"QMhDRVA@\",\"qC`@ISJAlQE`\",\"qCp@BOTAyhl\",\"sJX@@eOU@ODB\",\"sFp@DiTt@@AyaB\",\"sGP@DkUj`FsDVMcMC@\",\"Hid@@DjYUaBH`@FtaBXUMpqcHX@\",\"qC`@Qz`OH@\",\"HiD@@DjUVjj`AmHPfES\\\\LXZF@\",\"sJP@H~j@[TQXqda`@\",\"sJX@@eKU@OI@\",\"sNp@Djejj@[\\\\QXu`\",\"sJQ@@dsU@H\",\"sJQ@@dkU@OI`\",\"KAx@@YIMDVjh@vDHSBin@\",\"Hid@@DjU^nBBD@FtaBXUMp`\",\"sNp@DkgZj@[\\\\QXuqca`@\",\"qC`@IRtDVqDVcEC@\",\"Hed@@LdbRQeUUP@vTHSBinFP\",\"sNp@DiUjj@P\",\"qC`@IRtDT\",\"sNp@DkYZj@[\\\\QXuqca`@\",\"KAx@@IUkmUPAlHPfES]FDa`@\",\"KAx@@IVjmUPAlHPfES]FNa`@\",\"sOx@@drm\\\\@@@`\",\"KAx@@ITjuUPAlHPfES]FBa`@\",\"QMDARVAyH\",\"sJP`@dfvhA@\",\"HeT@@DjU_k``b`@[JDIaTwCLXfF@\",\"KAx@@IToUUPAlHPfES]FJa`@\",\"sGP@DkYj`FsDVMcEC@\",\"qCb@AIZ`ODH\",\"`I@`B\",\"KAx@@IUzmUPAlHPfES]FFa`@\",\"sNp@DkfZj@[\\\\QXu`\",\"KAx@@ITnuUPAlHPfES]F@a`@\",\"HiD@@LddURjjh@[RDIaTwB\",\"sNp@Dj~Zj@[\\\\QXuqfa`@\",\"Hed@@Dj{uZjj@FraBXUMpr\",\"KAx@@ITsUUPAlHPfES\\\\\",\"Hid@@LdbRQk``b@AmHPfES\\\\LXrF@\",\"sOp@DjWkB@@GdH\",\"sJQ@@dkU@OH@\",\"Hid@@DjU^nBBH@FtaBXUMpqahX@\",\"sGP@DiYj``mfHlZ\",\"KAx@@IToUUPAlHPfES]FLa`@\",\"qCp@AJZ`ODH\",\"Hmt@@DjU]ZxHHj@AmhPfES\\\\Lj\",\"sGP@DkUjPFsDVM@\",\"qC`@IVtA@\",\"Hed@@LdbJReUUP@vTHSBinFP\",\"sNp@DjuZj@[\\\\QXuqea`@\",\"KAx@@IUkmUPAlHPfES]FNa`@\",\"HiD@@DkVUjj`AmHPfES\\\\H\",\"Hed@@DkUeZjj@FraBXUMpr\",\"sNp@DkVZj@[\\\\QXuqea`@\",\"sJP@DiVhHKZbKFLLL@\",\"HiD@@Djuyjj`AmHPfES\\\\H\",\"sNp@DjUjj@[\\\\QXuq`a`@\",\"HeT@@DjYUXPbH`@[JDIaTwCH\",\"HiD@@DjwUjj`AmHPfES\\\\LXRF@\",\"sNq@@djmUPB\",\"KAx@@YIEEZjh@vDHSBincCPp@\",\"sGP@Di^V`dmfHlZ\",\"Hid@@DjYUaBHP@FtaBXUMp`\",\"sNp@DjYjj@[\\\\QXuqba`@\",\"sGP@Dkej`FsDVMcKC@\",\"HeT@@DjU^k``b`@[JDIaTwCH\",\"qC`@Qv`MbHmFBF@\",\"sGQ@@djmT@`\",\"qCr@XIKTAyH\",\"qC`@IVtAlQEhpPp@\",\"Hid@@LdbbQxXF@@AmHPfES\\\\LXjF@\",\"sGP@DkYj`FsDVMcCC@\",\"KAx@@IVsMUPAlHPfES\\\\\",\"qCp@AIj`ODl\",\"HiD@@DkeUjj`AmHPfES\\\\H\",\"deT@@DjU[k``b`@vTHSBinFP\",\"sJP@DkVdAmQEcFRF@\",\"HiD@@LdbJTjjh@[RDIaTwCFDa`@\",\"HiD@@DkYyjj`AmHPfES\\\\H\",\"sJP@DjZhAyH\",\"KAx@@IVkMUPAlHPfES]FDa`@\",\"sJX@@dkU@OI@\",\"Hed@@LdbRQUUUP@vTHSBinFXpLL@\",\"Hed@@DjuUZjj@FraBXUMpr\",\"sGP@Djfj`FsDVMcKC@\",\"sNp@DkVZj@[\\\\QXuqba`@\",\"sNp@DjyZj@[\\\\QXuqfa`@\",\"qCb@AIj`OH@\",\"sNp@DjUZj@[\\\\QXu`\",\"KAx@@IWOMUPAlHPfES\\\\\",\"Hid@@DjU^nBBH@D\",\"Hed@@DjuvZjj@FraBXUMpr\",\"sJP@DiVhHKZbKFLtL@\",\"dmt@@DjU_ZxHHj@C[PaLJfxYVLKC@\",\"sNp@DjuZj@[\\\\QXuqca`@\",\"sJP@DkfhAmQEcFJF@\",\"sNp@LdbJZj@[\\\\QXu`\",\"HeT@@DjU_k``b`@[JDIaTwCLXFF@\",\"KAx@@IVlmUPAlHPfES]FNa`@\",\"HeT@@LdbbRKBDQD@CYPaLJfxYcEPp@\",\"Hid@@DjUZnBBH@FtaBXUMpqcHX@\",\"qCa@CIKTA@\",\"HiD@@Dj~]jj`AmHPfES\\\\LXFF@\",\"sKP@Di\\\\Zj@[TQX`\",\"sGP@Djfj`FsDVMcEC@\",\"HiD@@DkgYjj`AmHPfES\\\\H\",\"sNp@DjuZj@[\\\\QXuqaa`@\",\"KAx@@YIMDVjh@vDHSBincDPp@\",\"sJP@DjVhHKZbKFLTL@\",\"Hid@@LdbRQk``b@AmHPfES\\\\LXZF@\",\"HiD@@Dj}Ujj`AmHPfES\\\\LXzF@\",\"HeT@@DjU_k``bP@[JDIaTwCH\",\"sNp@DkUZi@[\\\\QXu`\",\"HiD@@DjYfjj`AmHPfES\\\\H\",\"sGP@DjZj`FsDVMcAC@\",\"Hmt@@DjU_jxHHj@AmhPfES\\\\Lj\",\"Hid@@LdbRQk``R@AmHPfES\\\\H\",\"KAx@@YIDUJjh@vDHSBincDPp@\",\"qCr@XIKTAyD\",\"sOq@@drm\\\\@@@|`@\",\"Hed@@DjW^jjj@FraBXUMpsFBa`@\",\"HeT@@DjY]zXFB@@[JDIaTwCH\",\"Hkl@@DjU_Vk``bj`@[VDIaTwCJzX\",\"Hid@@DjY}nBHH@FtaBXUMpqcHX@\",\"sGX@@eKuT@|d@\",\"sGP@Dj^Y`FsDVM@\",\"HcL@@DjU_ZnBBJh@FqaBXUMprn`\",\"sJP@DkVdAmQEcFJF@\",\"sOq@@drm\\\\@@@|b@\",\"sNp@DjyZj@[\\\\QXuqaa`@\",\"HaD@@DjUZxHH@AyD@\",\"qC`@Qv`H\",\"dmt@@DjU_ZxHHj@C[PaLJfxYVLYC@\",\"sGP@Dkej`FsDVMcMC@\",\"Hed@@DjUUjjj@FraBXUMpsFHa`@\",\"HeT@@LdbbRkBDQD@CYPaLJfxY@\",\"KAx@@IU{MUPAlHPfES]FLa`@\",\"RG@DTH\",\"sJY@DDeVhA@\",\"KAx@@YIDUJjh@vDHSBinc@Pp@\",\"sJX@@dkU@OI`\",\"sJQ@@dju@OI`\",\"HeT@@LdbbRKBDQD@CYPaLJfxYcFPp@\",\"sFp@DiTvjhAlqEcXpPp@\",\"HaD@@DjUZxHH@AyG@\",\"sNx@@eJ}UPB\",\"sNp@LddUjj@[\\\\QXuqca`@\",\"HaDH@@RVU[j@@@D\",\"sNp@DkgZi@[\\\\QXu`\",\"sGY@LDeVj`D\",\"sNp@LdbJfZBZvxbqk@\",\"sJP`@dfvhAyL\",\"sGX@AddQjhAxe`\",\"Hmt@@DjU_ZxHHj@AmhPfES\\\\LkFIa`@\",\"qCh@CIKTA@\",\"sNp@LdbLjj@[\\\\QXuq`a`@\",\"sOq@@drm\\\\@@@|a@\",\"KAx@@IUzmUPAlHPfES]FJa`@\",\"sNx@AddQUUPB\",\"sGP@Di]jP`mfHlZ\",\"sJP`@TeZhA@\",\"KAx@@IRjmUPHKXPaLJfx\",\"HeT@@LdbRTM\\\\DDT@CYPaLJfxY@\",\"HaF@@@Rfu[j@@@D\",\"Hid@@DjYUaBH`@FtaBXUMpqchX@\",\"KAx@@IUjmTpAlHPfES\\\\\",\"Hid@@DjU^nBBD@FtaBXUMpqcHX@\",\"sGP@DiUj``mfHl[FFF@\",\"KAx@@IUvmUPAlHPfES]FLa`@\",\"Hed@@LdbQTUUUP@vTHSBinFXqDL@\",\"sJP@DkVhA@\",\"sOx@@drm\\\\@@@|b@\",\"KAx@@IUkMUPAlHPfES]FDa`@\",\"HeT@@LdbRQU\\\\DDT@CYPaLJfxY@\",\"HiD@@Dj}Yjj`AmHPfES\\\\LXrF@\",\"HiD@@Dj{ujj`AmHPfES\\\\LXFF@\",\"KAx@@IWNmUPAlHPfES]FFa`@\",\"KAx@@IRkMUPHKXPaLJfx\",\"sJP@DjYdAmQEcFZF@\",\"sJY@LDeZhAyL\",\"HaDH@@RVU[f@@@D\",\"sJP`@deVhAyB\",\"HaD@@DjWjZjj`AlHPfES\\\\\",\"sGP@DkYj`FsDVMcMC@\",\"sNp@DkgZj@[\\\\QXuqea`@\",\"sJQ@@dlu@H\",\"HeT@@DjU]k``b`@[JDIaTwCLXrF@\",\"sJX@@dkU@OH`\",\"RFDDQFCr`\",\"sJP@DiYXIKZbKFLLL@\",\"KAx@@YIHjjjh@vDHSBincGPp@\",\"Hk\\\\@@DjU^ukmLHH@@@AmXPfES\\\\Lki`\",\"sGQ@@djmT@|b@\",\"Hid@@DjUfaBB`@FtaBXUMpqahX@\",\"sNx@@eRmUPB\",\"Hmt@@LdbRVak``ah@FvaBXUMprh\",\"qCr@XIJtA@\",\"KAx@@IWMmUPAlHPfES]FNa`@\",\"HeT@@DjYYZPbJ@@[JDIaTwCH\",\"sNp@DkfZj@[\\\\QXuqea`@\",\"Hid@@DjU^nBAHAEVtaBXUMp`\",\"dmt@@DjUgZDHJJ@C[PaLJfxYT\",\"sGP@DkejPFsDVM@\",\"sNx@@eJmUPB\",\"qCb@AIf`H\",\"HcL@@DjU_VnBBJh@FqaBXUMprnqcXX@\",\"Hid@@DjUZnBBH@FtaBXUMpqahX@\",\"sNp@LdbQZjBBvxbqkcGC@\",\"sOx@@drm\\\\@@@|c@\",\"sJP@H~j@^R@\",\"KAx@@YIDcFjhDElHPfES\\\\\",\"Hid@@DjUZnBAH@FtaBXUMp`\",\"sNp@LddUji@[\\\\QXu`\",\"sGP@DjfjPFsDVM@\",\"HeT@@DjYUXPbD`@[JDIaTwCH\",\"KAx@@IUoMUPAlHPfES]FDa`@\",\"sFp@DiTt@@AyaD\",\"Hed@@DjuuZjj@FraBXUMpsFIa`@\",\"HeT@@DjUghP`h`@[JDIaTwCLXfF@\",\"sOp@DjWkjj`FwDVM\\\\YhX@\",\"sGP@Djfj`FsDVMcIC@\",\"KAx@@IRkmUPHKXPaLJfzL]C@\",\"sNx@@djmUPB\",\"QM`AIdD\",\"sOp@DjWkB@@Gbe@\",\"sNp@DjyZj@[\\\\QXuqca`@\",\"QM@HuAmd`\",\"sNp@LddUjj@[\\\\QXuqea`@\",\"daD@@DjUZxHD@CXPaLJfzLYC@\",\"qCb@AIZPH\",\"HiD@@LdbJTjjh@[RDIaTwCF@a`@\",\"Hmt@@DjU_ZxHHi@AmhPfES\\\\Lj\",\"HaDH@@RYWih@H@D\",\"HiD@@LdbJTjjh@[RDIaTwCFHa`@\",\"sGX@@djuT@|a@\",\"sNp@DkfZj@[\\\\QXuqaa`@\",\"Hid@@DjU^nBBH@GdL\",\"KAx@@IVkMUPAlHPfES]FJa`@\",\"qCr@XIKTAy@\",\"HmT@@Dj{uVjjh@[ZDIaTwCJqaXX@\",\"dmt@@DjYWVDHbJ@C[PaLJfxYT\",\"Hif@@@RUe^Fh@@@P\",\"HaDH@@Rfu[j@@@GdH\",\"KAx@@IVsMUPAlHPfES]FDa`@\",\"sKP@Di\\\\Zj@[TQXq`a`@\",\"sJX@@eMU@OH@\",\"HeT@@DjU^k``b`@[JDIaTwCLXFF@\",\"Hmt@@LdbbRJXPbHh@FvaBXUMprh\",\"sJP@DjvhAmQEcFBF@\",\"dmt@@LdbbRNXPbHh@MmBDpj[aeXplL@\",\"sJP`@dfvhAyD\",\"sGP@Di^V`dmfHl[FVF@\",\"KAx@@IVsmUPAlHPfES]FBa`@\",\"sOq@@drm\\\\@@@|PP\",\"sJY@BDeZhA@\",\"HeT@@LdbRbmBDED@CYPaLJfxY@\",\"Hed@@Djy[Zjj@FraBXUMpr\",\"HeT@@DjU]k``b`@[JDIaTwCLXFF@\",\"Hid@@DjUfaBB`@D\",\"qCa@CIJtA@\",\"QMPARVA@\",\"Hid@@DjUfaBB`@FtaBXUMpqcHX@\",\"sJY@BDfZhA@\",\"HeT@@DjUghP`hP@[JDIaTwCH\",\"Hed@@Dj{uZjj@FraBXUMpsFIa`@\",\"dmt@@DjYUvDHbJ@C[PaLJfxYVLUC@\",\"sNp`@dfuZj@P\",\"sJQ@@dmU@OH@\",\"sJX@@dmU@H\",\"HeT@@DjU]k``b`@[JDIaTwCLXZF@\",\"HiD@@LdfbJZjh@[RDIaTwCFAa`@\",\"sOx@@drm\\\\@@@|a@\",\"deT@@DjUfhP`h`@vTHSBinFP\",\"dmt@@DjU]ZxHHj@C[PaLJfxYVLKC@\",\"sOp@DjWkjj`FwDVM\\\\XHX@\",\"HcL@@LdbbRNSBDQEP@McBDpj[ae]cFpp@\",\"HiD@@Dj}Yji`AmHPfES\\\\H\",\"HaDH@@RYe[hB@@D\",\"Hid@@DjU^njjj@FtaBXUMpq`XX@\",\"deT@@LdbbRKBDQB@FraBXUMpr\",\"QMPARZA@\",\"sOq@@drm\\\\@@@|QX\",\"HaD@@DjYvxH`@A@\",\"HcL@@LdbbRNcBDQEP@McBDpj[ae]@\",\"QMhDRZA@\",\"RG@DXLHmP\",\"QM`BN`XQYd\",\"RG@DTLHmP\",\"QMHAIXFEVd\",\"QMDARVAaH\",\"RFPDXLHmP\",\"RF@Q`vRbdLEC@\",\"RF@QpvR@\",\"QO@HyjAmd`\",\"`II@B\",\"`II@CFspqJp\",\"`II@CF[@hM@prB`\",\"`H@[T[|B`XN@PdM@p|@bHrBcDk@\",\"RG@DXMj}F@\",\"QM`BN`[L~b@\",\"RG@DTMj}D@\",\"QMHAIXFt~j@\",\"QMDARVA}L@\",\"RFPDXMj}D@\",\"sKP@Di\\\\YZ@[TQXqaa`@\",\"eF`BHD\"])}function kp(){kp=d1,XV=B(d(OA,1),te,6,14,[524290,524292,589826,589827,589828,589829,589832,589833,589837,589838,598019,598020,598024,606211,688130,688131,688132,688137,688142,696324,819202,819203,819204,819205,819214,827396,1048580,1114114,1114115,1114116,1114120,1212420,1220611,1343492,1343496,1638402,1638403,17367042,17367043,17367044,17367045,17367048,17367049,17367053,17367054,17375236,17465346,17465348,17465353,17473540,1208483842,1208483848,1208483912,1208549378,1208549379,1208549380,1208549384,1208549388,1208549442,1208549443,1208549444,1208549448,1208557571,1208565763,1208565827,1409875970,1409875971,1409875972,1409875976,1409876034,1409876035,1409876036,1409876040,1409884163,1409974274,1409974280,1409974338,1678245892,1678311426,1678311427,1678311428,1678311432,1678311490,1678311491,1678311492,1678311496,1678409730,1678409731,1678409732,1678409794,1678540802,1678540808,1678540810,1678540866,2282291202,2282291203,2282291266,2282291267,2282389506,2282389507,2282389570,2282389571,2282389572,2282520578,2282520579,2282520642,2282520643,2282537027,2483617794,2483617795,2483617858,2483617859,2483617860,2483617864,2483716098,2483716099,2483716162,2483716163,2484150275,2484248579,2752675842,3356033026,3356139523,3557359618,3557457922,3557588994,34510798914,34510798915,34510798916,34510798920,34510807107,34510815299,34712125506,34712125507,34712125508,34712125512,34712223810,34712223811,34712223812,34712223816,34980560962,34980560963,34980659266,34980659267,34980659268,35568287746,35568287747,35568287748,35568287752,35568287756,35568287810,35568287811,35568287812,35568287816,35568287820,35568386050,35568386051,35568386052,35568386114,35568386120,35568517122,35568517123,35568517124,35568517128,35568517186,35568517187,35568517188,35568517192,35568812034,35568812035,35568812098,35568812099,35568910338,35568910339,35568910403,35569336322,35569434626,35585064962,35585064963,35585064964,35585064968,35585065026,35585065027,35585065028,35585065032,35769614338,35769614340,35769614402,35769712642,35770138626,35770236930,35786391554,35786391555,2475109646403,sH,yH,2475109711938,2475109711939,2475109720067,2475109720131,2475109728259,2475109728323,lH,hH,2887426572354,2887426572355,TH,cH,2887627898946,wH,2887627997250,gH,dH,3437182386242,3437182386243,BH,3437383712771,3437383712834,vH,FH,mH,kH,4674132967490,4674132967491,4674132975619,bH,4674334294082,4674334294083,4674334302211,4674334302275,RH,4674334392386,jH,4674602729538,4674602827842,pH,4674602958914,CH,HH,5086449827906,5086449827907,5086449827912,MH,5086651154498,5086651162627,VH,EH,5086651252802,5086651252808,5086651260931,SH,5086919589954,qH,5086919688258,5086919819330,5636205641794,IH,5636406968386,xH,5636407066690,5636675403842,NH,5636675502146,{l:589890,m:73760,h:4},{l:589891,m:73760,h:4},{l:598083,m:73760,h:4},{l:688194,m:73760,h:4},{l:688195,m:73760,h:4},{l:696387,m:73760,h:4},{l:819266,m:73760,h:4},{l:65602,m:73764,h:4},{l:65603,m:73764,h:4},{l:589890,m:172064,h:4},{l:589891,m:172064,h:4},{l:598083,m:172064,h:4},{l:688194,m:172064,h:4},{l:688195,m:172064,h:4},{l:696387,m:172064,h:4},{l:819266,m:172064,h:4},{l:65602,m:172068,h:4},{l:65603,m:172068,h:4},{l:589890,m:172112,h:4},{l:589891,m:172112,h:4},{l:688194,m:172112,h:4},{l:819266,m:172112,h:4},{l:65602,m:172116,h:4},{l:65608,m:172116,h:4},{l:163906,m:172116,h:4},{l:589890,m:303136,h:4},{l:688194,m:303136,h:4},{l:819266,m:303136,h:4},{l:65602,m:303140,h:4},{l:589890,m:303184,h:4},{l:688194,m:303184,h:4},{l:819266,m:303184,h:4},{l:65602,m:303188,h:4},{l:65602,m:303252,h:4},OH,GH,{l:589890,m:590112,h:4},{l:589891,m:590112,h:4},JH,zH,{l:589890,m:590160,h:4},{l:589891,m:590160,h:4},YH,{l:688194,m:590160,h:4},KH,XH,{l:589890,m:590224,h:4},{l:589891,m:590224,h:4},{l:688131,m:590224,h:4},{l:688194,m:590224,h:4},ZH,WH,{l:589890,m:590368,h:4},_H,{l:688194,m:590368,h:4},{l:696323,m:590368,h:4},$H,aH,{l:819266,m:590368,h:4},tM,eM,{l:589890,m:590416,h:4},{l:589891,m:590416,h:4},{l:589896,m:590416,h:4},AM,{l:688136,m:590416,h:4},{l:688194,m:590416,h:4},{l:696323,m:590416,h:4},nM,{l:819266,m:590416,h:4},{l:688130,m:590480,h:4},{l:688194,m:590480,h:4},{l:65602,m:598052,h:4},{l:65603,m:598052,h:4},{l:65602,m:598100,h:4},{l:65603,m:598100,h:4},{l:73795,m:598100,h:4},{l:163906,m:598100,h:4},{l:163907,m:598100,h:4},{l:65602,m:598164,h:4},{l:163906,m:598164,h:4},PM,rM,{l:589890,m:598304,h:4},{l:589891,m:598304,h:4},iM,{l:688194,m:598304,h:4},fM,{l:1114178,m:598304,h:4},DM,{l:1212424,m:598304,h:4},{l:1212482,m:598304,h:4},uM,QM,{l:589890,m:688416,h:4},oM,{l:589890,m:688464,h:4},{l:589890,m:688528,h:4},UM,LM,{l:688130,m:688784,h:4},{l:65602,m:696356,h:4},{l:65602,m:696404,h:4},{l:163906,m:696404,h:4},{l:589826,m:696608,h:4},{l:1114178,m:696608,h:4},{l:1212418,m:696608,h:4},{l:589826,m:696612,h:4},{l:524355,m:590112,h:288},{l:589825,m:590112,h:288},sM,{l:589890,m:590112,h:288},{l:598019,m:590112,h:288},{l:598083,m:590112,h:288},yM,{l:589890,m:590112,h:336},{l:598019,m:590112,h:336},{l:598083,m:590112,h:336},lM,{l:589890,m:688416,h:336},hM,{l:589890,m:688464,h:336},TM,cM,{l:589827,m:590112,h:400},{l:589890,m:590112,h:400},{l:589891,m:590112,h:400},wM,gM,dM,BM,{l:589890,m:819488,h:400},vM,FM,mM,kM,{l:589827,m:819488,h:544},bM,RM,jM,{l:688199,m:688464,h:592},pM,CM,HM,{l:688202,m:819600,h:592},MM,{l:589896,m:1212704,h:592},VM,EM,{l:688200,m:1212752,h:592},SM,{l:688135,m:688464,h:656},{l:688135,m:819536,h:656},{l:589891,m:65936,h:8228},qM,{l:589890,m:590112,h:8480},{l:598019,m:590112,h:8480},IM,{l:589890,m:688416,h:8480},xM,{l:589890,m:688464,h:8480},NM,OM,GM,JM,{l:589896,m:1213008,h:8480},zM,{l:688200,m:1213008,h:8480},{l:688135,m:1343824,h:8480},YM,{l:589890,m:590112,h:8484},KM,{l:589890,m:590160,h:8484},{l:1212424,m:590416,h:8484},{l:1212488,m:590416,h:8484},XM,{l:688194,m:598304,h:8484},{l:589826,m:590112,h:8528},{l:589890,m:590112,h:8528}]),Y4=B(d(Ee,1),PA,6,15,[.6966999769210815,0,.4885999858379364,-.47269999980926514,-.07490000128746033,ZM,.273499995470047,.5699999928474426,.7009999752044678,.9534000158309937,-3.6435000896453857,-2.150899887084961,.4975000023841858,-2.19950008392334,-.2809000015258789,-.8259999752044678,-.1784999966621399,-1.620300054550171,-1.0959999561309814,-.3619999885559082,.13950000703334808,-.29750001430511475,-1.2907999753952026,1.0161999464035034,WM,-2.5383999347686768,qy,.4291999936103821,-.5824000239372253,-.1834000051021576,.1306000053882599,-.5015000104904175,ZM,-.5257999897003174,.4244000017642975,-.16099999845027924,-.2777999937534332,.5110999941825867,-.435699999332428,-.10409999638795853,.3424000144004822,-.061500001698732376,.6035000085830688,.7226999998092651,.43459999561309814,-1.6821000576019287,-.3310000002384186,-.49799999594688416,_M,-.3650999963283539,.45969998836517334,.3384000062942505,.6632999777793884,.4544000029563904,.15970000624656677,.633899986743927,.35040000081062317,.04490000009536743,.34200000762939453,.26109999418258667,.40459999442100525,.5218999981880188,-1.065000057220459,-1.2314000129699707,-1.802299976348877,-.36320000886917114,-.4108000099658966,.30570000410079956,-.14560000598430634,-.27129998803138733,-.5192999839782715,.45260000228881836,.5539000034332275,.8374000191688538,-.7070000171661377,-.48809999227523804,-.4099999964237213,0,.14790000021457672,.3447999954223633,.42980000376701355,.5579000115394592,-.1264999955892563,-.042500000447034836,.07670000195503235,.6635000109672546,-.38119998574256897,-.8367999792098999,1.0286999940872192,-.10209999978542328,.3587000072002411,-.5945000052452087,.16920000314712524,-.121799997985363,.32829999923706055,.22390000522136688,.20430000126361847,.05900000035762787,-.48350000381469727,.6165000200271606,-.4011000096797943,.5577999949455261,-.21639999747276306,-.017500000074505806,.29809999465942383,.10999999940395355,.27149999141693115,-.2994999885559082,-.46700000762939453,.1565999984741211,.046799998730421066,-.13210000097751617,1.3686000108718872,0,-.4115999937057495,1.0185999870300293,-.3935000002384186,.5223000049591064,.3684999942779541,.25769999623298645,1.5192999839782715,.2705000042915344,.3790999948978424,.012000000104308128,-.33970001339912415,.14830000698566437,.2766000032424927,.35929998755455017,.7714999914169312,.3149999976158142,-1.618499994277954,.18889999389648438,-.2651999890804291,-.09650000184774399,.420199990272522,.18709999322891235,-.3684000074863434,-.07779999822378159,.8942999839782715,.3693999946117401,.28790000081062317,.4489000141620636,-.26010000705718994,.4771000146865845,.1923000067472458,.43810001015663147,.16949999332427979,.45249998569488525,.3352000117301941,.1582999974489212,.4036000072956085,-.04800000041723251,.5023000240325928,-.26489999890327454,.76910001039505,-.35519999265670776,1.0300999879837036,-.11410000175237656,-.5932000279426575,.17489999532699585,.13130000233650208,-.18039999902248383,.399399995803833,.22910000383853912,.31690001487731934,.35989999771118164,-.0038999998942017555,-.2955999970436096,.4408999979496002,-.16089999675750732,.3774999976158142,-.13459999859333038,.2838999927043915,.5128999948501587,.1265999972820282,.4293999969959259,.28060001134872437,.49070000648498535,$M,.219200000166893,.15649999678134918,.6934999823570251,.3617999851703644,.6735000014305115,.5777999758720398,-.5636000037193298,.5569000244140625,.30379998683929443,-.32760000228881836,-.6991999745368958,.010300000198185444,-.4659000039100647,aM,qy,.18410000205039978,.707099974155426,.12269999831914902,.7949000000953674,-.6592000126838684,-1.3148000240325928,-.4066999852657318,-.1316000074148178,-.4925000071525574,-.09290000051259995,-.4352000057697296,-.2206999957561493,-.9959999918937683,-.723800003528595,-.5468999743461609,-1.2939000129699707,-.01360000018030405,.065700002014637,.7189000248908997,.05700000002980232,.661899983882904,-.6381000280380249,-.8072999715805054,.23549999296665192,.30480000376701355,-.019899999722838402,-.07519999891519547,.44609999656677246,.1559000015258789,1.1167999505996704,-1.8039000034332275,.23649999499320984,-.22059999406337738,.4480000138282776,-1.1339999437332153,-.5652999877929688,-.40529999136924744,-.13609999418258667,.2198999971151352,.053599998354911804,-.020999999716877937,.6984999775886536,.9642999768257141,-.41519999504089355,-1.0369000434875488,-.18299999833106995,.5882999897003174,-.29179999232292175,-.5293999910354614,-.6541000008583069,.9473000168800354,-.19059999287128448,-.8483999967575073,-.3456999957561493,.9541000127792358,1.4230999946594238,-.7924000024795532,tV,eV,-.2596000134944916,.8381999731063843,-.4415999948978424,-.37040001153945923,-.7487000226974487,-.10790000110864639,-.29919999837875366,-.3276999890804291,.025100000202655792,-.9187999963760376,.10939999669790268,.8230999708175659,-3.233299970626831,.03500000014901161,aM,AV,.2791000008583069,.3206000030040741,.5662000179290771,-.3783999979496002,.4032000005245209,-1.794800043106079,-.15539999306201935,.3785000145435333,.05339999869465828,-.16529999673366547,-.09870000183582306,-.10050000250339508,-.6460999846458435,.8034999966621399,-.24050000309944153,-.12380000203847885,-.35760000348091125,.09610000252723694,-.6401000022888184,.2029000073671341,.23589999973773956,.4950999915599823,.19210000336170197,-.37450000643730164,.34630000591278076,.289900004863739,-.15330000221729279,-.4169999957084656,.37700000405311584,.6998000144958496,.593999981880188,.5911999940872192,-.5570999979972839,.023800000548362732,-.2475000023841858,.030700000002980232,-.38749998807907104,-.7437000274658203,.5144000053405762,.00570000009611249,.765500009059906,.1720000058412552,-2.5624001026153564,-.30660000443458557,.36469998955726624,.17270000278949738,-.03290000185370445,-.18930000066757202,.07020000368356705,-1.2453999519348145,.14959999918937683,WM,.4146000146865845,-.2667999863624573,-.11060000211000443,.03620000183582306,-.3188999891281128,-.7278000116348267,-.08940000087022781,-.22769999504089355,-.2393999993801117,1.011199951171875,-.2962000072002411,.7775999903678894,.2944999933242798,-.22339999675750732,.27639999985694885,.8011000156402588,-.17440000176429749,.15809999406337738,-1.7552000284194946,-.384799987077713,.5993000268936157,.5267999768257141,-.04170000180602074,.4733000099658966,-.3400999903678894,-.14499999582767487,.7088000178337097,-.13179999589920044,.04259999841451645,-.5027999877929688,.3831999897956848,-.011800000444054604,-.4357999861240387,.3749000132083893,-.12030000239610672,-.5648000240325928,-.1972000002861023,-.8769000172615051,-.3675000071525574,-.2003999948501587,-.6069999933242798,-.18569999933242798,.3467999994754791,-.36239999532699585,.5357999801635742,-.3700999915599823,.13359999656677246,.9545000195503235,.11389999836683273,-.16990000009536743,qy,.2890999913215637,.2612999975681305,-.03440000116825104,-1.9498000144958496,-2.024899959564209,-.6004999876022339,-.6258000135421753,-1.2348999977111816,.328000009059906,-.54339998960495,-.7712000012397766,-.9057000279426575,-.16680000722408295,-.9904999732971191,-.03720000013709068,-1.1638000011444092,.12620000541210175,-.5248000025749207,-.15379999577999115,-.36820000410079956,.3249000012874603,.06499999761581421,.051100000739097595,-.46070000529289246,.22310000658035278,.28220000863075256,.1396999955177307,-.49380001425743103,.39480000734329224,-.4074999988079071,-.6410999894142151,-.009100000374019146,-.13330000638961792,-.5192000269889832,-.16609999537467957,qy,-.07069999724626541,.4805999994277954,.38280001282691956,.22290000319480896,.6159999966621399,.33709999918937683,.188400000333786,.13809999823570251,_M,.2833000123500824,-.1225999966263771,-3.9189000129699707,-.459199994802475,-.3434999883174896,-.6654000282287598,-.5055999755859375,-.863099992275238,.15360000729560852,-.6427000164985657,-.08839999884366989,-.0471000000834465,.11060000211000443,.382099986076355,-.23919999599456787,-.4050999879837036,.08910000324249268,-.6972000002861023,-.4699000120162964,.09220000356435776,.08060000091791153,-.6773999929428101,-.062199998646974564,-.9300000071525574,.13369999825954437])}function bp(){bp=d1,Pl=B(d(Mt,2),nA,17,0,[null,B(d(Mt,1),Vt,3,0,[new u(0,1.007825032),new u(1,2.014101778),new u(2,3.016049268),new u(3,4.027834627),new u(4,5.039542911),new u(5,6.044942608)]),B(d(Mt,1),Vt,3,0,[new u(1,3.01602931),new u(2,4.00260325),new u(3,5.012223628),new u(4,6.018888072),new u(5,7.028030527),new u(6,8.033921838),new u(7,9.043820323),new u(8,10.052399713)]),B(d(Mt,1),Vt,3,0,[new u(1,4.027182329),new u(2,5.012537796),new u(3,6.015122281),new u(4,7.016004049),new u(5,8.02248667),new u(6,9.026789122),new u(7,10.035480884),new u(8,11.043796166),new u(9,12.05378)]),B(d(Mt,1),Vt,3,0,[new u(1,5.04079),new u(2,6.019725804),new u(3,7.016929246),new u(4,8.005305094),new u(5,9.012182135),new u(6,10.01353372),new u(7,11.021657653),new u(8,12.026920631),new u(9,13.036133834),new u(10,14.042815522)]),B(d(Mt,1),Vt,3,0,[new u(2,7.029917389),new u(3,8.024606713),new u(4,9.013328806),new u(5,10.012937027),new u(6,11.009305466),new u(7,12.014352109),new u(8,13.017780267),new u(9,14.025404064),new u(10,15.031097291),new u(11,16.039808836),new u(12,17.046931399),new u(13,18.05617),new u(14,19.06373)]),B(d(Mt,1),Vt,3,0,[new u(2,8.037675026),new u(3,9.031040087),new u(4,10.01685311),new u(5,11.011433818),new u(6,12),new u(7,13.003354838),new u(8,14.003241988),new u(9,15.010599258),new u(10,16.014701243),new u(11,17.022583712),new u(12,18.026757058),new u(13,19.035248094),new u(14,20.040322395),new u(15,21.04934),new u(16,22.05645)]),B(d(Mt,1),Vt,3,0,[new u(3,10.042618),new u(4,11.026796226),new u(5,12.018613202),new u(6,13.005738584),new u(7,14.003074005),new u(8,15.000108898),new u(9,16.006101417),new u(10,17.008449673),new u(11,18.014081827),new u(12,19.017026896),new u(13,20.023367295),new u(14,21.027087574),new u(15,22.034440259),new u(16,23.04051),new u(17,24.0505)]),B(d(Mt,1),Vt,3,0,[new u(4,12.034404776),new u(5,13.0248104),new u(6,14.008595285),new u(7,15.003065386),new u(8,15.994914622),new u(9,16.999131501),new u(10,17.999160419),new u(11,19.00357873),new u(12,20.00407615),new u(13,21.008654631),new u(14,22.009967157),new u(15,23.015691325),new u(16,24.020369922),new u(17,25.02914),new u(18,26.03775)]),B(d(Mt,1),Vt,3,0,[new u(5,14.03608),new u(6,15.018010856),new u(7,16.01146573),new u(8,17.002095238),new u(9,18.000937667),new u(10,18.998403205),new u(11,19.999981324),new u(12,20.999948921),new u(13,22.00299925),new u(14,23.003574385),new u(15,24.008099371),new u(16,25.012094963),new u(17,26.019633157),new u(18,27.026892316),new u(19,28.03567),new u(20,29.04326)]),B(d(Mt,1),Vt,3,0,[new u(6,16.025756907),new u(7,17.017697565),new u(8,18.005697066),new u(9,19.001879839),new u(10,19.992440176),new u(11,20.993846744),new u(12,21.99138551),new u(13,22.994467337),new u(14,23.993615074),new u(15,24.997789899),new u(16,26.000461498),new u(17,27.0076152),new u(18,28.012108072),new u(19,29.019345902),new u(20,30.023872),new u(21,31.03311),new u(22,32.03991)]),B(d(Mt,1),Vt,3,0,[new u(7,18.02718),new u(8,19.01387945),new u(9,20.00734826),new u(10,20.997655099),new u(11,21.994436782),new u(12,22.989769675),new u(13,23.990963332),new u(14,24.989954352),new u(15,25.992589898),new u(16,26.994008702),new u(17,27.99889041),new u(18,29.002811301),new u(19,30.009226487),new u(20,31.013595108),new u(21,32.019649792),new u(22,33.027386),new u(23,34.0349),new u(24,35.04418)]),B(d(Mt,1),Vt,3,0,[new u(8,20.018862744),new u(9,21.011714174),new u(10,21.999574055),new u(11,22.99412485),new u(12,23.985041898),new u(13,24.985837023),new u(14,25.98259304),new u(15,26.984340742),new u(16,27.983876703),new u(17,28.988554743),new u(18,29.990464529),new u(19,30.996548459),new u(20,31.999145889),new u(21,33.005586975),new u(22,34.00907244),new u(23,35.018669),new u(24,36.02245),new u(25,37.03124)]),B(d(Mt,1),Vt,3,0,[new u(8,21.02804),new u(9,22.01952),new u(10,23.0072649),new u(11,23.999940911),new u(12,24.990428555),new u(13,25.986891659),new u(14,26.981538441),new u(15,27.981910184),new u(16,28.980444848),new u(17,29.982960304),new u(18,30.983946023),new u(19,31.988124379),new u(20,32.990869587),new u(21,33.996927255),new u(22,34.99993765),new u(23,36.006351501),new u(24,37.01031),new u(25,38.0169),new u(26,39.0219)]),B(d(Mt,1),Vt,3,0,[new u(8,22.03453),new u(9,23.02552),new u(10,24.011545711),new u(11,25.00410664),new u(12,25.992329935),new u(13,26.986704764),new u(14,27.976926533),new u(15,28.976494719),new u(16,29.973770218),new u(17,30.975363275),new u(18,31.974148129),new u(19,32.97800052),new u(20,33.978575745),new u(21,34.984584158),new u(22,35.986687363),new u(23,36.99299599),new u(24,37.99598),new u(25,39.0023),new u(26,40.0058),new u(27,41.0127),new u(28,42.0161)]),B(d(Mt,1),Vt,3,0,[new u(9,24.03435),new u(10,25.02026),new u(11,26.01178),new u(12,26.999191645),new u(13,27.99231233),new u(14,28.981801376),new u(15,29.978313807),new u(16,30.973761512),new u(17,31.973907163),new u(18,32.971725281),new u(19,33.973636381),new u(20,34.973314249),new u(21,35.978259824),new u(22,36.979608338),new u(23,37.98447),new u(24,38.98642),new u(25,39.99105),new u(26,40.9948),new u(27,42.00009),new u(28,43.00331),new u(29,44.00988),new u(30,45.01514),new u(31,46.02383)]),B(d(Mt,1),Vt,3,0,[new u(10,26.02788),new u(11,27.018795),new u(12,28.004372661),new u(13,28.996608805),new u(14,29.984902954),new u(15,30.979554421),new u(16,31.97207069),new u(17,32.971458497),new u(18,33.967866831),new u(19,34.96903214),new u(20,35.96708088),new u(21,36.971125716),new u(22,37.971163443),new u(23,38.975135275),new u(24,39.97547),new u(25,40.98003),new u(26,41.98149),new u(27,42.9866),new u(28,43.98832),new u(29,44.99482),new u(30,45.99957),new u(31,47.00762),new u(32,48.01299),new u(33,49.02201)]),B(d(Mt,1),Vt,3,0,[new u(11,28.02851),new u(12,29.01411),new u(13,30.00477),new u(14,30.992416014),new u(15,31.985688908),new u(16,32.977451798),new u(17,33.973761967),new u(18,34.968852707),new u(19,35.968306945),new u(20,36.9659026),new u(21,37.96801055),new u(22,38.968007677),new u(23,39.970415555),new u(24,40.970650212),new u(25,41.973174994),new u(26,42.974203385),new u(27,43.978538712),new u(28,44.9797),new u(29,45.98412),new u(30,46.98795),new u(31,47.99485),new u(32,48.99989),new u(33,50.00773),new u(34,51.01353)]),B(d(Mt,1),Vt,3,0,[new u(12,30.02156),new u(13,31.012126),new u(14,31.99766066),new u(15,32.989928719),new u(16,33.980270118),new u(17,34.975256726),new u(18,35.967546282),new u(19,36.966775912),new u(20,37.962732161),new u(21,38.964313413),new u(22,39.962383123),new u(23,40.964500828),new u(24,41.963046386),new u(25,42.965670701),new u(26,43.965365269),new u(27,44.968094979),new u(28,45.968093467),new u(29,46.972186238),new u(30,47.97507),new u(31,48.98218),new u(32,49.98594),new u(33,50.99324),new u(34,51.99817),new u(35,53.006227)]),B(d(Mt,1),Vt,3,0,[new u(13,32.02192),new u(14,33.00726),new u(15,33.99841),new u(16,34.988011615),new u(17,35.981293405),new u(18,36.973376915),new u(19,37.969080107),new u(20,38.963706861),new u(21,39.963998672),new u(22,40.961825972),new u(23,41.962403059),new u(24,42.960715746),new u(25,43.961556146),new u(26,44.960699658),new u(27,45.961976203),new u(28,46.961677807),new u(29,47.965512946),new u(30,48.967450084),new u(31,49.972782832),new u(32,50.97638),new u(33,51.98261),new u(34,52.98712),new u(35,53.99399),new u(36,54.999388)]),B(d(Mt,1),Vt,3,0,[new u(14,34.01412),new u(15,35.004765),new u(16,35.993087234),new u(17,36.985871505),new u(18,37.976318637),new u(19,38.970717729),new u(20,39.962591155),new u(21,40.962278349),new u(22,41.958618337),new u(23,42.958766833),new u(24,43.955481094),new u(25,44.956185938),new u(26,45.953692759),new u(27,46.954546459),new u(28,47.952533512),new u(29,48.955673302),new u(30,49.957518286),new u(31,50.961474238),new u(32,51.9651),new u(33,52.97005),new u(34,53.97468),new u(35,54.98055),new u(36,55.98579),new u(37,56.992356)]),B(d(Mt,1),Vt,3,0,[new u(15,36.01492),new u(16,37.00305),new u(17,37.9947),new u(18,38.984790009),new u(19,39.977964014),new u(20,40.969251316),new u(21,41.965516761),new u(22,42.96115098),new u(23,43.959403048),new u(24,44.955910243),new u(25,45.95517025),new u(26,46.952408027),new u(27,47.952234991),new u(28,48.950024065),new u(29,49.952187008),new u(30,50.9536027),new u(31,51.95665),new u(32,52.95817),new u(33,53.963),new u(34,54.9694),new u(35,55.97266),new u(36,56.97704),new u(37,57.98307),new u(38,58.988041)]),B(d(Mt,1),Vt,3,0,[new u(16,38.00977),new u(17,39.001323),new u(18,39.990498907),new u(19,40.983131),new u(20,41.973031622),new u(21,42.968523342),new u(22,43.959690235),new u(23,44.958124349),new u(24,45.952629491),new u(25,46.951763792),new u(26,47.947947053),new u(27,48.947870789),new u(28,49.944792069),new u(29,50.946616017),new u(30,51.946898175),new u(31,52.949731709),new u(32,53.95087),new u(33,54.95512),new u(34,55.95799),new u(35,56.9643),new u(36,57.96611),new u(37,58.97196),new u(38,59.97564),new u(39,60.982018)]),B(d(Mt,1),Vt,3,0,[new u(17,40.01109),new u(18,40.99974),new u(19,41.99123),new u(20,42.98065),new u(21,43.9744),new u(22,44.965782286),new u(23,45.960199491),new u(24,46.954906918),new u(25,47.95225448),new u(26,48.948516914),new u(27,49.947162792),new u(28,50.943963675),new u(29,51.944779658),new u(30,52.944342517),new u(31,53.946444381),new u(32,54.947238194),new u(33,55.95036),new u(34,56.95236),new u(35,57.95665),new u(36,58.9593),new u(37,59.9645),new u(38,60.96741),new u(39,61.97314),new u(40,62.97675)]),B(d(Mt,1),Vt,3,0,[new u(18,42.00643),new u(19,42.997707),new u(20,43.98547),new u(21,44.97916),new u(22,45.968361649),new u(23,46.962906512),new u(24,47.954035861),new u(25,48.951341135),new u(26,49.946049607),new u(27,50.944771767),new u(28,51.940511904),new u(29,52.940653781),new u(30,53.938884921),new u(31,54.940844164),new u(32,55.940645238),new u(33,56.9437538),new u(34,57.94425),new u(35,58.94863),new u(36,59.94973),new u(37,60.95409),new u(38,61.9558),new u(39,62.96186),new u(40,63.9642),new u(41,64.97037)]),B(d(Mt,1),Vt,3,0,[new u(19,44.00687),new u(20,44.99451),new u(21,45.98672),new u(22,46.9761),new u(23,47.96887),new u(24,48.959623415),new u(25,49.95424396),new u(26,50.948215487),new u(27,51.945570079),new u(28,52.941294702),new u(29,53.940363247),new u(30,54.938049636),new u(31,55.938909366),new u(32,56.938287458),new u(33,57.939986451),new u(34,58.940447166),new u(35,59.943193998),new u(36,60.94446),new u(37,61.94797),new u(38,62.94981),new u(39,63.95373),new u(40,64.9561),new u(41,65.96082),new u(42,66.96382)]),B(d(Mt,1),Vt,3,0,[new u(19,45.01456),new u(20,46.00081),new u(21,46.99289),new u(22,47.98056),new u(23,48.97361),new u(24,49.962993316),new u(25,50.956824936),new u(26,51.948116526),new u(27,52.945312282),new u(28,53.939614836),new u(29,54.938298029),new u(30,55.934942133),new u(31,56.935398707),new u(32,57.933280458),new u(33,58.934880493),new u(34,59.934076943),new u(35,60.936749461),new u(36,61.936770495),new u(37,62.940118442),new u(38,63.94087),new u(39,64.94494),new u(40,65.94598),new u(41,66.95),new u(42,67.95251),new u(43,68.9577)]),B(d(Mt,1),Vt,3,0,[new u(21,48.00176),new u(22,48.98972),new u(23,49.98154),new u(24,50.97072),new u(25,51.96359),new u(26,52.954224985),new u(27,53.948464147),new u(28,54.942003149),new u(29,55.939843937),new u(30,56.936296235),new u(31,57.935757571),new u(32,58.933200194),new u(33,59.933822196),new u(34,60.932479381),new u(35,61.934054212),new u(36,62.933615218),new u(37,63.935813523),new u(38,64.936484581),new u(39,65.939825412),new u(40,66.94061),new u(41,67.94436),new u(42,68.9452),new u(43,69.94981),new u(44,70.95173),new u(45,71.95641)]),B(d(Mt,1),Vt,3,0,[new u(22,49.99593),new u(23,50.98772),new u(24,51.97568),new u(25,52.96846),new u(26,53.957910508),new u(27,54.951336329),new u(28,55.942136339),new u(29,56.939800489),new u(30,57.935347922),new u(31,58.934351553),new u(32,59.930790633),new u(33,60.931060442),new u(34,61.928348763),new u(35,62.929672948),new u(36,63.927969574),new u(37,64.930088013),new u(38,65.929115232),new u(39,66.931569638),new u(40,67.931844932),new u(41,68.935181837),new u(42,69.93614),new u(43,70.94),new u(44,71.9413),new u(45,72.94608),new u(46,73.94791),new u(47,74.95297),new u(48,75.95533),new u(49,76.96083),new u(50,77.9638)]),B(d(Mt,1),Vt,3,0,[new u(23,51.99718),new u(24,52.98555),new u(25,53.97671),new u(26,54.96605),new u(27,55.95856),new u(28,56.949215695),new u(29,57.944540734),new u(30,58.939504114),new u(31,59.937368123),new u(32,60.933462181),new u(33,61.932587299),new u(34,62.929601079),new u(35,63.929767865),new u(36,64.927793707),new u(37,65.928873041),new u(38,66.927750294),new u(39,67.929637875),new u(40,68.929425281),new u(41,69.932409287),new u(42,70.932619818),new u(43,71.93552),new u(44,72.93649),new u(45,73.9402),new u(46,74.9417),new u(47,75.94599),new u(48,76.94795),new u(49,77.95281),new u(50,78.95528),new u(51,79.96189)]),B(d(Mt,1),Vt,3,0,[new u(24,53.99295),new u(25,54.98398),new u(26,55.97238),new u(27,56.96491),new u(28,57.954596465),new u(29,58.949267074),new u(30,59.941832031),new u(31,60.939513907),new u(32,61.934334132),new u(33,62.933215563),new u(34,63.929146578),new u(35,64.929245079),new u(36,65.926036763),new u(37,66.927130859),new u(38,67.924847566),new u(39,68.926553538),new u(40,69.92532487),new u(41,70.927727195),new u(42,71.926861122),new u(43,72.929779469),new u(44,73.929458261),new u(45,74.932937379),new u(46,75.933394207),new u(47,76.937085857),new u(48,77.938569576),new u(49,78.942095175),new u(50,79.944414722),new u(51,80.95048),new u(52,81.95484)]),B(d(Mt,1),Vt,3,0,[new u(25,55.99491),new u(26,56.98293),new u(27,57.97425),new u(28,58.96337),new u(29,59.95706),new u(30,60.94917),new u(31,61.944179608),new u(32,62.939141527),new u(33,63.936838307),new u(34,64.932739322),new u(35,65.931592355),new u(36,66.928204915),new u(37,67.927983497),new u(38,68.925580912),new u(39,69.926027741),new u(40,70.92470501),new u(41,71.92636935),new u(42,72.925169832),new u(43,73.926940999),new u(44,74.926500645),new u(45,75.928928262),new u(46,76.929281189),new u(47,77.93165595),new u(48,78.932916371),new u(49,79.936588154),new u(50,80.937752955),new u(51,81.94316),new u(52,82.94687),new u(53,83.95234)]),B(d(Mt,1),Vt,3,0,[new u(26,57.99101),new u(27,58.98175),new u(28,59.97019),new u(29,60.96379),new u(30,61.95465),new u(31,62.94964),new u(32,63.941572638),new u(33,64.939440762),new u(34,65.933846798),new u(35,66.932738415),new u(36,67.928097266),new u(37,68.927972002),new u(38,69.924250365),new u(39,70.924953991),new u(40,71.922076184),new u(41,72.923459361),new u(42,73.921178213),new u(43,74.922859494),new u(44,75.921402716),new u(45,76.923548462),new u(46,77.922852886),new u(47,78.92540156),new u(48,79.925444764),new u(49,80.928821065),new u(50,81.929550326),new u(51,82.93451),new u(52,83.93731),new u(53,84.94269),new u(54,85.94627)]),B(d(Mt,1),Vt,3,0,[new u(27,59.99313),new u(28,60.98062),new u(29,61.9732),new u(30,62.96369),new u(31,63.957572),new u(32,64.949484),new u(33,65.944099147),new u(34,66.939190417),new u(35,67.936792976),new u(36,68.932280154),new u(37,69.930927811),new u(38,70.927114724),new u(39,71.926752647),new u(40,72.923825288),new u(41,73.923929076),new u(42,74.921596417),new u(43,75.922393933),new u(44,76.920647703),new u(45,77.921828577),new u(46,78.920948498),new u(47,79.922578162),new u(48,80.922132884),new u(49,81.924504668),new u(50,82.924980625),new u(51,83.92906),new u(52,84.93181),new u(53,85.93623),new u(54,86.93958),new u(55,87.94456),new u(56,88.94923)]),B(d(Mt,1),Vt,3,0,[new u(31,64.96466),new u(32,65.95521),new u(33,66.95009),new u(34,67.94187),new u(35,68.939562155),new u(36,69.933504),new u(37,70.931868378),new u(38,71.927112313),new u(39,72.9267668),new u(40,73.922476561),new u(41,74.922523571),new u(42,75.919214107),new u(43,76.91991461),new u(44,77.917309522),new u(45,78.918499802),new u(46,79.916521828),new u(47,80.917992931),new u(48,81.9167),new u(49,82.919119072),new u(50,83.918464523),new u(51,84.922244678),new u(52,85.924271165),new u(53,86.928520749),new u(54,87.931423982),new u(55,88.93602),new u(56,89.93942),new u(57,90.94537),new u(58,91.94933)]),B(d(Mt,1),Vt,3,0,[new u(32,66.96479),new u(33,67.958248),new u(34,68.950178),new u(35,69.944208),new u(36,70.939246),new u(37,71.936496876),new u(38,72.931794889),new u(39,73.929891152),new u(40,74.92577641),new u(41,75.924541974),new u(42,76.921380123),new u(43,77.92114613),new u(44,78.918337647),new u(45,79.918529952),new u(46,80.91629106),new u(47,81.916804666),new u(48,82.915180219),new u(49,83.916503685),new u(50,84.915608027),new u(51,85.918797162),new u(52,86.920710713),new u(53,87.924065908),new u(54,88.92638726),new u(55,89.930634988),new u(56,90.9339653),new u(57,91.939255258),new u(58,92.9431),new u(59,93.94868)]),B(d(Mt,1),Vt,3,0,[new u(33,68.96532),new u(34,69.95601),new u(35,70.95051),new u(36,71.94190754),new u(37,72.938931115),new u(38,73.933258225),new u(39,74.931033794),new u(40,75.925948304),new u(41,76.92466788),new u(42,77.920386271),new u(43,78.920082992),new u(44,79.91637804),new u(45,80.916592419),new u(46,81.913484601),new u(47,82.914135952),new u(48,83.911506627),new u(49,84.912526954),new u(50,85.910610313),new u(51,86.913354251),new u(52,87.914446951),new u(53,88.917632505),new u(54,89.919523803),new u(55,90.923442418),new u(56,91.926152752),new u(57,92.931265246),new u(58,93.934362),new u(59,94.93984),new u(60,95.94307),new u(61,96.94856)]),B(d(Mt,1),Vt,3,0,[new u(34,70.96532),new u(35,71.95908),new u(36,72.950366),new u(37,73.944470376),new u(38,74.938569199),new u(39,75.935071448),new u(40,76.930406599),new u(41,77.928141485),new u(42,78.923996719),new u(43,79.922519322),new u(44,80.918994165),new u(45,81.918207691),new u(46,82.915111951),new u(47,83.914384676),new u(48,84.911789341),new u(49,85.91116708),new u(50,86.909183465),new u(51,87.911318556),new u(52,88.912279939),new u(53,89.914808941),new u(54,90.91653416),new u(55,91.919725442),new u(56,92.922032765),new u(57,93.926407326),new u(58,94.92931926),new u(59,95.934283962),new u(60,96.937342863),new u(61,97.941703557),new u(62,98.945420616),new u(63,99.94987),new u(64,100.953195994),new u(65,101.95921)]),B(d(Mt,1),Vt,3,0,[new u(35,72.96597),new u(36,73.95631),new u(37,74.94992),new u(38,75.94161),new u(39,76.937761511),new u(40,77.932179362),new u(41,78.929707076),new u(42,79.924524588),new u(43,80.923213095),new u(44,81.918401258),new u(45,82.917555029),new u(46,83.913424778),new u(47,84.912932689),new u(48,85.909262351),new u(49,86.908879316),new u(50,87.905614339),new u(51,88.907452906),new u(52,89.907737596),new u(53,90.910209845),new u(54,91.911029895),new u(55,92.91402241),new u(56,93.915359856),new u(57,94.919358213),new u(58,95.921680473),new u(59,96.926148757),new u(60,97.928471177),new u(61,98.933315038),new u(62,99.935351729),new u(63,100.940517434),new u(64,101.943018795),new u(65,102.94895),new u(66,103.95233)]),B(d(Mt,1),Vt,3,0,[new u(38,76.94962),new u(39,77.9435),new u(40,78.937350712),new u(41,79.931982402),new u(42,80.929128719),new u(43,81.926792071),new u(44,82.922352572),new u(45,83.920387768),new u(46,84.916427076),new u(47,85.914887724),new u(48,86.910877833),new u(49,87.909503361),new u(50,88.905847902),new u(51,89.907151443),new u(52,90.907303415),new u(53,91.908946832),new u(54,92.909581582),new u(55,93.911594008),new u(56,94.912823709),new u(57,95.915897787),new u(58,96.918131017),new u(59,97.922219525),new u(60,98.924634736),new u(61,99.927756402),new u(62,100.930313395),new u(63,101.933555501),new u(64,102.93694),new u(65,103.94145),new u(66,104.94509),new u(67,105.95022)]),B(d(Mt,1),Vt,3,0,[new u(39,78.94916),new u(40,79.94055),new u(41,80.936815296),new u(42,81.931086249),new u(43,82.92865213),new u(44,83.92325),new u(45,84.92146522),new u(46,85.916472851),new u(47,86.914816578),new u(48,87.910226179),new u(49,88.908888916),new u(50,89.904703679),new u(51,90.905644968),new u(52,91.905040106),new u(53,92.906475627),new u(54,93.906315765),new u(55,94.908042739),new u(56,95.908275675),new u(57,96.910950716),new u(58,97.912746366),new u(59,98.916511084),new u(60,99.917761704),new u(61,100.921139958),new u(62,101.922981089),new u(63,102.926597062),new u(64,103.92878),new u(65,104.93305),new u(66,105.93591),new u(67,106.94086),new u(68,107.94428)]),B(d(Mt,1),Vt,3,0,[new u(40,80.94905),new u(41,81.94313),new u(42,82.936703713),new u(43,83.93357),new u(44,84.927906486),new u(45,85.925037588),new u(46,86.920361435),new u(47,87.91833144),new u(48,88.913495503),new u(49,89.911264109),new u(50,90.906990538),new u(51,91.907193214),new u(52,92.906377543),new u(53,93.907283457),new u(54,94.906835178),new u(55,95.908100076),new u(56,96.908097144),new u(57,97.91033069),new u(58,98.911617864),new u(59,99.914181434),new u(60,100.915251567),new u(61,101.918037417),new u(62,102.919141297),new u(63,103.922459464),new u(64,104.923934023),new u(65,105.92819),new u(66,106.93031),new u(67,107.93501),new u(68,108.93763),new u(69,109.94268)]),B(d(Mt,1),Vt,3,0,[new u(41,82.94874),new u(42,83.94009),new u(43,84.93659),new u(44,85.930695167),new u(45,86.92732683),new u(46,87.921952728),new u(47,88.919480562),new u(48,89.913936161),new u(49,90.911750754),new u(50,91.90681048),new u(51,92.906812213),new u(52,93.905087578),new u(53,94.905841487),new u(54,95.904678904),new u(55,96.906021033),new u(56,97.905407846),new u(57,98.907711598),new u(58,99.907477149),new u(59,100.910346543),new u(60,101.910297162),new u(61,102.913204596),new u(62,103.913758387),new u(63,104.916972087),new u(64,105.918134284),new u(65,106.921694724),new u(66,107.923973837),new u(67,108.92781),new u(68,109.92973),new u(69,110.93451),new u(70,111.93684),new u(71,112.94203)]),B(d(Mt,1),Vt,3,0,[new u(42,84.94894),new u(43,85.94288),new u(44,86.93653),new u(45,87.93283),new u(46,88.92754288),new u(47,89.92355583),new u(48,90.9184282),new u(49,91.915259655),new u(50,92.910248473),new u(51,93.909656309),new u(52,94.907656454),new u(53,95.907870803),new u(54,96.906364843),new u(55,97.907215692),new u(56,98.906254554),new u(57,99.907657594),new u(58,100.90731438),new u(59,101.909212938),new u(60,102.909178805),new u(61,103.911444898),new u(62,104.911658043),new u(63,105.914355408),new u(64,106.915081691),new u(65,107.918479973),new u(66,108.919980998),new u(67,109.92339),new u(68,110.92505),new u(69,111.92924),new u(70,112.93133),new u(71,113.93588),new u(72,114.93828)]),B(d(Mt,1),Vt,3,0,[new u(43,86.94918),new u(44,87.94042),new u(45,88.93611),new u(46,89.92978),new u(47,90.926377434),new u(48,91.92012),new u(49,92.917051523),new u(50,93.911359569),new u(51,94.910412729),new u(52,95.907597681),new u(53,96.907554546),new u(54,97.905287111),new u(55,98.905939307),new u(56,99.904219664),new u(57,100.905582219),new u(58,101.904349503),new u(59,102.906323677),new u(60,103.905430145),new u(61,104.907750341),new u(62,105.907326913),new u(63,106.909907207),new u(64,107.910192211),new u(65,108.913201565),new u(66,109.913966185),new u(67,110.91756),new u(68,111.918821673),new u(69,112.92254),new u(70,113.923891981),new u(71,114.92831),new u(72,115.93016),new u(73,116.93479),new u(74,117.93703)]),B(d(Mt,1),Vt,3,0,[new u(44,88.94938),new u(45,89.94287),new u(46,90.93655),new u(47,91.93198),new u(48,92.92574),new u(49,93.921698),new u(50,94.915898541),new u(51,95.914518212),new u(52,96.911336643),new u(53,97.910716431),new u(54,98.908132101),new u(55,99.90811663),new u(56,100.906163526),new u(57,101.906842845),new u(58,102.905504182),new u(59,103.906655315),new u(60,104.905692444),new u(61,105.907284615),new u(62,106.90675054),new u(63,107.908730768),new u(64,108.908735621),new u(65,109.910949525),new u(66,110.91166),new u(67,111.913969253),new u(68,112.91542),new u(69,113.91734336),new u(70,114.920124676),new u(71,115.922746643),new u(72,116.92535),new u(73,117.92943),new u(74,118.93136),new u(75,119.93578),new u(76,120.93808)]),B(d(Mt,1),Vt,3,0,[new u(45,90.94948),new u(46,91.94042),new u(47,92.93591),new u(48,93.92877),new u(49,94.92469),new u(50,95.91822194),new u(51,96.916478921),new u(52,97.912720751),new u(53,98.911767757),new u(54,99.908504596),new u(55,100.908289144),new u(56,101.905607716),new u(57,102.906087204),new u(58,103.904034912),new u(59,104.905084046),new u(60,105.903483087),new u(61,106.905128453),new u(62,107.903894451),new u(63,108.905953535),new u(64,109.905152385),new u(65,110.907643952),new u(66,111.907313277),new u(67,112.910151346),new u(68,113.910365322),new u(69,114.91368341),new u(70,115.914158288),new u(71,116.91784),new u(72,117.918983915),new u(73,118.92268),new u(74,119.92403),new u(75,120.92818),new u(76,121.9298),new u(77,122.93426)]),B(d(Mt,1),Vt,3,0,[new u(47,93.94278),new u(48,94.93548),new u(49,95.93068),new u(50,96.924),new u(51,97.921759995),new u(52,98.917597103),new u(53,99.916069387),new u(54,100.912802135),new u(55,101.911999996),new u(56,102.908972453),new u(57,103.908628228),new u(58,104.906528234),new u(59,105.906666431),new u(60,106.90509302),new u(61,107.905953705),new u(62,108.904755514),new u(63,109.90611046),new u(64,110.905294679),new u(65,111.907004132),new u(66,112.906565708),new u(67,113.908807907),new u(68,114.908762282),new u(69,115.911359558),new u(70,116.911684187),new u(71,117.914582383),new u(72,118.915666045),new u(73,119.918788609),new u(74,120.919851074),new u(75,121.92332),new u(76,122.9249),new u(77,123.92853),new u(78,124.93054),new u(79,125.9345),new u(80,126.93688)]),B(d(Mt,1),Vt,3,0,[new u(48,95.93977),new u(49,96.93494),new u(50,97.927579),new u(51,98.92501),new u(52,99.920230232),new u(53,100.918681442),new u(54,101.914777255),new u(55,102.913418952),new u(56,103.909848091),new u(57,104.909467818),new u(58,105.906458007),new u(59,106.906614232),new u(60,107.904183403),new u(61,108.904985569),new u(62,109.903005578),new u(63,110.904181628),new u(64,111.902757226),new u(65,112.904400947),new u(66,113.903358121),new u(67,114.905430553),new u(68,115.904755434),new u(69,116.907218242),new u(70,117.906914144),new u(71,118.909922582),new u(72,119.909851352),new u(73,120.91298039),new u(74,121.9135),new u(75,122.917003675),new u(76,123.917648302),new u(77,124.92124717),new u(78,125.922353996),new u(79,126.926434822),new u(80,127.927760617),new u(81,128.93226),new u(82,129.93398)]),B(d(Mt,1),Vt,3,0,[new u(49,97.94224),new u(50,98.93461),new u(51,99.931149033),new u(52,100.92656),new u(53,101.924707541),new u(54,102.919913896),new u(55,103.918338416),new u(56,104.914673434),new u(57,105.913461134),new u(58,106.910292195),new u(59,107.909719683),new u(60,108.907154078),new u(61,109.907168783),new u(62,110.905110677),new u(63,111.905533338),new u(64,112.904061223),new u(65,113.904916758),new u(66,114.903878328),new u(67,115.905259995),new u(68,116.904515731),new u(69,117.906354623),new u(70,118.905846334),new u(71,119.907961505),new u(72,120.907848847),new u(73,121.910277103),new u(74,122.910438951),new u(75,123.913175916),new u(76,124.913601387),new u(77,125.916464532),new u(78,126.917344048),new u(79,127.920170658),new u(80,128.921657958),new u(81,129.924854941),new u(82,130.926767408),new u(83,131.932919005),new u(84,132.93834),new u(85,133.94466)]),B(d(Mt,1),Vt,3,0,[new u(50,99.938954),new u(51,100.93606),new u(52,101.93049),new u(53,102.92813),new u(54,103.923185469),new u(55,104.921390409),new u(56,105.916880472),new u(57,106.915666702),new u(58,107.911965339),new u(59,108.911286879),new u(60,109.907852688),new u(61,110.907735404),new u(62,111.90482081),new u(63,112.905173373),new u(64,113.902781816),new u(65,114.903345973),new u(66,115.901744149),new u(67,116.902953765),new u(68,117.901606328),new u(69,118.90330888),new u(70,119.902196571),new u(71,120.904236867),new u(72,121.903440138),new u(73,122.905721901),new u(74,123.90527463),new u(75,124.907784924),new u(76,125.907653953),new u(77,126.91035098),new u(78,127.910534953),new u(79,128.913439976),new u(80,129.913852185),new u(81,130.916919144),new u(82,131.917744455),new u(83,132.923814085),new u(84,133.928463576),new u(85,134.93473),new u(86,135.93934),new u(87,136.94579)]),B(d(Mt,1),Vt,3,0,[new u(52,102.94012),new u(53,103.936287),new u(54,104.931528593),new u(55,105.928183134),new u(56,106.92415),new u(57,107.92216),new u(58,108.918136092),new u(59,109.917533911),new u(60,110.912534147),new u(61,111.91239464),new u(62,112.909377941),new u(63,113.909095876),new u(64,114.906598812),new u(65,115.906797235),new u(66,116.90483959),new u(67,117.905531885),new u(68,118.90394646),new u(69,119.905074315),new u(70,120.903818044),new u(71,121.905175415),new u(72,122.904215696),new u(73,123.905937525),new u(74,124.905247804),new u(75,125.907248153),new u(76,126.906914564),new u(77,127.90916733),new u(78,128.909150092),new u(79,129.911546459),new u(80,130.911946487),new u(81,131.914413247),new u(82,132.915236466),new u(83,133.920551554),new u(84,134.925167962),new u(85,135.93066),new u(86,136.93531),new u(87,137.94096),new u(88,138.94571)]),B(d(Mt,1),Vt,3,0,[new u(54,105.937702),new u(55,106.935036),new u(56,107.929486838),new u(57,108.927456483),new u(58,109.922407164),new u(59,110.921120589),new u(60,111.917061617),new u(61,112.915452551),new u(62,113.912498025),new u(63,114.911578627),new u(64,115.908420253),new u(65,116.90863418),new u(66,117.905825187),new u(67,118.90640811),new u(68,119.904019891),new u(69,120.904929815),new u(70,121.903047064),new u(71,122.904272951),new u(72,123.902819466),new u(73,124.904424718),new u(74,125.903305543),new u(75,126.90521729),new u(76,127.904461383),new u(77,128.906595593),new u(78,129.906222753),new u(79,130.90852188),new u(80,131.908523782),new u(81,132.910939068),new u(82,133.911540546),new u(83,134.916450782),new u(84,135.920103155),new u(85,136.925324769),new u(86,137.92922),new u(87,138.93473),new u(88,139.9387),new u(89,140.94439),new u(90,141.9485)]),B(d(Mt,1),Vt,3,0,[new u(55,107.943291),new u(56,108.938191658),new u(57,109.934634181),new u(58,110.930276),new u(59,111.92797),new u(60,112.923644245),new u(61,113.92185),new u(62,114.918272),new u(63,115.916735014),new u(64,116.913647692),new u(65,117.91337523),new u(66,118.910180837),new u(67,119.910047843),new u(68,120.907366063),new u(69,121.907592451),new u(70,122.905597944),new u(71,123.906211423),new u(72,124.90462415),new u(73,125.905619387),new u(74,126.90446842),new u(75,127.905805254),new u(76,128.904987487),new u(77,129.906674018),new u(78,130.906124168),new u(79,131.907994525),new u(80,132.907806465),new u(81,133.909876552),new u(82,134.91005031),new u(83,135.914655105),new u(84,136.917872653),new u(85,137.922383666),new u(86,138.926093402),new u(87,139.93121),new u(88,140.93483),new u(89,141.94018),new u(90,142.94407),new u(91,143.94961)]),B(d(Mt,1),Vt,3,0,[new u(56,109.944476),new u(57,110.941632),new u(58,111.93566535),new u(59,112.933382836),new u(60,113.928145),new u(61,114.926979032),new u(62,115.921394197),new u(63,116.920564355),new u(64,117.91657092),new u(65,118.915554295),new u(66,119.91215199),new u(67,120.911386497),new u(68,121.908548396),new u(69,122.908470748),new u(70,123.905895774),new u(71,124.906398236),new u(72,125.904268868),new u(73,126.905179581),new u(74,127.903530436),new u(75,128.904779458),new u(76,129.903507903),new u(77,130.90508192),new u(78,131.904154457),new u(79,132.90590566),new u(80,133.905394504),new u(81,134.907207499),new u(82,135.907219526),new u(83,136.911562939),new u(84,137.913988549),new u(85,138.918786859),new u(86,139.921635665),new u(87,140.926646282),new u(88,141.929702981),new u(89,142.93489),new u(90,143.93823),new u(91,144.94367),new u(92,145.9473),new u(93,146.95301)]),B(d(Mt,1),Vt,3,0,[new u(57,111.950331),new u(58,112.944535512),new u(59,113.940841319),new u(60,114.935939),new u(61,115.932914152),new u(62,116.928639484),new u(63,117.926554883),new u(64,118.922370879),new u(65,119.920678219),new u(66,120.917183637),new u(67,121.916121946),new u(68,122.912990168),new u(69,123.912245731),new u(70,124.909724871),new u(71,125.909447953),new u(72,126.9074176),new u(73,127.907747919),new u(74,128.906063369),new u(75,129.906706163),new u(76,130.905460232),new u(77,131.906429799),new u(78,132.90544687),new u(79,133.906713419),new u(80,134.905971903),new u(81,135.907305741),new u(82,136.907083505),new u(83,137.911010537),new u(84,138.913357921),new u(85,139.917277075),new u(86,140.920043984),new u(87,141.924292317),new u(88,142.927330292),new u(89,143.932027373),new u(90,144.935388226),new u(91,145.940162028),new u(92,146.943864435),new u(93,147.948899539),new u(94,148.95272),new u(95,149.95797),new u(96,150.962)]),B(d(Mt,1),Vt,3,0,[new u(58,113.950941),new u(59,114.94771),new u(60,115.94168),new u(61,116.937700229),new u(62,117.93344),new u(63,118.931051927),new u(64,119.926045941),new u(65,120.924485908),new u(66,121.92026),new u(67,122.91885),new u(68,123.915088437),new u(69,124.914620234),new u(70,125.911244146),new u(71,126.911121328),new u(72,127.90830887),new u(73,128.908673749),new u(74,129.906310478),new u(75,130.906930798),new u(76,131.905056152),new u(77,132.906002368),new u(78,133.904503347),new u(79,134.905682749),new u(80,135.904570109),new u(81,136.905821414),new u(82,137.905241273),new u(83,138.908835384),new u(84,139.910599485),new u(85,140.914406439),new u(86,141.916448175),new u(87,142.920617184),new u(88,143.922940468),new u(89,144.926923807),new u(90,145.930106645),new u(91,146.933992519),new u(92,147.937682377),new u(93,148.94246),new u(94,149.94562),new u(95,150.9507),new u(96,151.95416),new u(97,152.95961)]),B(d(Mt,1),Vt,3,0,[new u(60,116.95001),new u(61,117.94657),new u(62,118.94099),new u(63,119.93807),new u(64,120.93301),new u(65,121.93071),new u(66,122.92624),new u(67,123.92453),new u(68,124.92067),new u(69,125.91937),new u(70,126.91616),new u(71,127.91544794),new u(72,128.912667334),new u(73,129.91232),new u(74,130.910108489),new u(75,131.910110399),new u(76,132.908396372),new u(77,133.908489607),new u(78,134.906971003),new u(79,135.907651181),new u(80,136.906465656),new u(81,137.907106826),new u(82,138.90634816),new u(83,139.909472552),new u(84,140.910957016),new u(85,141.914074489),new u(86,142.916058646),new u(87,143.919591666),new u(88,144.92163837),new u(89,145.925700146),new u(90,146.927819639),new u(91,147.932191197),new u(92,148.93437),new u(93,149.93857),new u(94,150.94156),new u(95,151.94611),new u(96,152.94945),new u(97,153.9544),new u(98,154.95813)]),B(d(Mt,1),Vt,3,0,[new u(61,118.95276),new u(62,119.94664),new u(63,120.94367),new u(64,121.93801),new u(65,122.93551),new u(66,123.93052),new u(67,124.92854),new u(68,125.9241),new u(69,126.92275),new u(70,127.91887),new u(71,128.918679183),new u(72,129.914339361),new u(73,130.914424137),new u(74,131.91149),new u(75,132.91155),new u(76,133.909026379),new u(77,134.909145555),new u(78,135.907143574),new u(79,136.907777634),new u(80,137.905985574),new u(81,138.906646605),new u(82,139.905434035),new u(83,140.908271103),new u(84,141.909239733),new u(85,142.912381158),new u(86,143.913642686),new u(87,144.917227871),new u(88,145.918689722),new u(89,146.922510962),new u(90,147.924394738),new u(91,148.928289207),new u(92,149.930226399),new u(93,150.93404),new u(94,151.93638),new u(95,152.94058),new u(96,153.94332),new u(97,154.94804),new u(98,155.95126),new u(99,156.95634)]),B(d(Mt,1),Vt,3,0,[new u(62,120.955364),new u(63,121.95165),new u(64,122.94596),new u(65,123.94296),new u(66,124.93783),new u(67,125.93531),new u(68,126.93083),new u(69,127.9288),new u(70,128.92486),new u(71,129.92338),new u(72,130.920060245),new u(73,131.91912),new u(74,132.9162),new u(75,133.915672),new u(76,134.91313914),new u(77,135.912646935),new u(78,136.910678351),new u(79,137.910748891),new u(80,138.908932181),new u(81,139.909071204),new u(82,140.907647726),new u(83,141.910039865),new u(84,142.910812233),new u(85,143.913300595),new u(86,144.914506897),new u(87,145.917588016),new u(88,146.918979001),new u(89,147.922183237),new u(90,148.923791056),new u(91,149.926995031),new u(92,150.928227869),new u(93,151.9316),new u(94,152.93365),new u(95,153.93739),new u(96,154.93999),new u(97,155.94412),new u(98,156.94717),new u(99,157.95178),new u(100,158.95523)]),B(d(Mt,1),Vt,3,0,[new u(66,125.94307),new u(67,126.9405),new u(68,127.93539),new u(69,128.932385),new u(70,129.92878),new u(71,130.927102697),new u(72,131.92312),new u(73,132.92221),new u(74,133.918645),new u(75,134.91824),new u(76,135.915020542),new u(77,136.91463973),new u(78,137.91291745),new u(79,138.91192415),new u(80,139.909309824),new u(81,140.9096048),new u(82,141.907718643),new u(83,142.909809626),new u(84,143.910082629),new u(85,144.912568847),new u(86,145.913112139),new u(87,146.916095794),new u(88,147.916888516),new u(89,148.92014419),new u(90,149.920886563),new u(91,150.923824739),new u(92,151.924682428),new u(93,152.927694534),new u(94,153.929483295),new u(95,154.932629551),new u(96,155.9352),new u(97,156.93927),new u(98,157.94187),new u(99,158.94639),new u(100,159.94939),new u(101,160.95433)]),B(d(Mt,1),Vt,3,0,[new u(67,127.94826),new u(68,128.94316),new u(69,129.94045),new u(70,130.9358),new u(71,131.93375),new u(72,132.92972),new u(73,133.92849),new u(74,134.924617),new u(75,135.923447865),new u(76,136.920713),new u(77,137.920432261),new u(78,138.916759814),new u(79,139.915801649),new u(80,140.913606636),new u(81,141.912950738),new u(82,142.910927571),new u(83,143.912585768),new u(84,144.912743879),new u(85,145.914692165),new u(86,146.915133898),new u(87,147.917467786),new u(88,148.918329195),new u(89,149.920979477),new u(90,150.921202693),new u(91,151.923490557),new u(92,152.924113189),new u(93,153.926547019),new u(94,154.928097047),new u(95,155.931060357),new u(96,156.9332),new u(97,157.93669),new u(98,158.93913),new u(99,159.94299),new u(100,160.94586),new u(101,161.95029),new u(102,162.95352)]),B(d(Mt,1),Vt,3,0,[new u(68,129.94863),new u(69,130.94589),new u(70,131.94082),new u(71,132.93873),new u(72,133.93402),new u(73,134.93235),new u(74,135.9283),new u(75,136.927046709),new u(76,137.92354),new u(77,138.922302),new u(78,139.918991),new u(79,140.918468512),new u(80,141.915193274),new u(81,142.914623555),new u(82,143.91199473),new u(83,144.913405611),new u(84,145.91303676),new u(85,146.914893275),new u(86,147.914817914),new u(87,148.917179521),new u(88,149.917271454),new u(89,150.919928351),new u(90,151.919728244),new u(91,152.922093907),new u(92,153.922205303),new u(93,154.92463594),new u(94,155.925526236),new u(95,156.928354506),new u(96,157.929987938),new u(97,158.9332),new u(98,159.93514),new u(99,160.93883),new u(100,161.94122),new u(101,162.94536),new u(102,163.94828),new u(103,164.95298)]),B(d(Mt,1),Vt,3,0,[new u(69,131.95416),new u(70,132.9489),new u(71,133.94632),new u(72,134.94172),new u(73,135.9395),new u(74,136.93521),new u(75,137.93345),new u(76,138.92882915),new u(77,139.928083921),new u(78,140.924885867),new u(79,141.923400033),new u(80,142.920286634),new u(81,143.918774116),new u(82,144.916261285),new u(83,145.917199714),new u(84,146.916741206),new u(85,147.918153775),new u(86,148.917925922),new u(87,149.919698294),new u(88,150.919846022),new u(89,151.921740399),new u(90,152.921226219),new u(91,153.922975386),new u(92,154.922889429),new u(93,155.924750855),new u(94,156.925419435),new u(95,157.927841923),new u(96,158.9290845),new u(97,159.931460406),new u(98,160.93368),new u(99,161.93704),new u(100,162.93921),new u(101,163.94299),new u(102,164.94572),new u(103,165.94997),new u(104,166.95305)]),B(d(Mt,1),Vt,3,0,[new u(72,135.94707),new u(73,136.94465),new u(74,137.93997),new u(75,138.93808),new u(76,139.933236934),new u(77,140.93221),new u(78,141.927908919),new u(79,142.926738636),new u(80,143.923390357),new u(81,144.921687498),new u(82,145.918305344),new u(83,146.919089446),new u(84,147.918109771),new u(85,148.919336427),new u(86,149.918655455),new u(87,150.920344273),new u(88,151.919787882),new u(89,152.921746283),new u(90,153.920862271),new u(91,154.922618801),new u(92,155.922119552),new u(93,156.923956686),new u(94,157.924100533),new u(95,158.926385075),new u(96,159.927050616),new u(97,160.929665688),new u(98,161.930981211),new u(99,162.93399),new u(100,163.93586),new u(101,164.93938),new u(102,165.9416),new u(103,166.94557),new u(104,167.94836),new u(105,168.95287)]),B(d(Mt,1),Vt,3,0,[new u(73,137.95287),new u(74,138.94803),new u(75,139.945367985),new u(76,140.94116),new u(77,141.939073781),new u(78,142.93475),new u(79,143.93253),new u(80,144.92888),new u(81,145.927180629),new u(82,146.924037176),new u(83,147.924298636),new u(84,148.92324163),new u(85,149.923654158),new u(86,150.923098169),new u(87,151.924071324),new u(88,152.923430858),new u(89,153.924686236),new u(90,154.923500411),new u(91,155.924743749),new u(92,156.924021155),new u(93,157.92541026),new u(94,158.925343135),new u(95,159.927164021),new u(96,160.927566289),new u(97,161.929484803),new u(98,162.930643942),new u(99,163.933347253),new u(100,164.93488),new u(101,165.93805),new u(102,166.94005),new u(103,167.94364),new u(104,168.94622),new u(105,169.95025),new u(106,170.9533)]),B(d(Mt,1),Vt,3,0,[new u(74,139.95379),new u(75,140.95119),new u(76,141.946695946),new u(77,142.94383),new u(78,143.93907),new u(79,144.936717),new u(80,145.932720118),new u(81,146.930878496),new u(82,147.927177882),new u(83,148.927333981),new u(84,149.925579728),new u(85,150.92617963),new u(86,151.924713874),new u(87,152.925760865),new u(88,153.924422046),new u(89,154.92574895),new u(90,155.924278273),new u(91,156.925461256),new u(92,157.924404637),new u(93,158.92573566),new u(94,159.925193718),new u(95,160.926929595),new u(96,161.926794731),new u(97,162.928727532),new u(98,163.929171165),new u(99,164.931699828),new u(100,165.932803241),new u(101,166.935649025),new u(102,167.93723),new u(103,168.940303648),new u(104,169.94267),new u(105,170.94648),new u(106,171.94911),new u(107,172.95344)]),B(d(Mt,1),Vt,3,0,[new u(75,141.95986),new u(76,142.95469),new u(77,143.95164),new u(78,144.94688),new u(79,145.9441),new u(80,146.93984),new u(81,147.937269),new u(82,148.933789944),new u(83,149.932760914),new u(84,150.931680791),new u(85,151.931740598),new u(86,152.930194506),new u(87,153.930596268),new u(88,154.929079084),new u(89,155.929001869),new u(90,156.928188059),new u(91,157.92894573),new u(92,158.927708537),new u(93,159.928725679),new u(94,160.927851662),new u(95,161.92909242),new u(96,162.928730286),new u(97,163.930230577),new u(98,164.930319169),new u(99,165.932281267),new u(100,166.933126195),new u(101,167.935496424),new u(102,168.936868306),new u(103,169.939614951),new u(104,170.941461227),new u(105,171.94482),new u(106,172.94729),new u(107,173.95115),new u(108,174.95405)]),B(d(Mt,1),Vt,3,0,[new u(76,143.96059),new u(77,144.95746),new u(78,145.95212),new u(79,146.94931),new u(80,147.94444),new u(81,148.942780527),new u(82,149.937171034),new u(83,150.93746),new u(84,151.935078452),new u(85,152.935093125),new u(86,153.932777294),new u(87,154.933204273),new u(88,155.931015001),new u(89,156.931945517),new u(90,157.929912),new u(91,158.930680718),new u(92,159.929078924),new u(93,160.930001348),new u(94,161.928774923),new u(95,162.930029273),new u(96,163.929196996),new u(97,164.9307228),new u(98,165.93028997),new u(99,166.932045448),new u(100,167.932367781),new u(101,168.934588082),new u(102,169.935460334),new u(103,170.938025885),new u(104,171.939352149),new u(105,172.9424),new u(106,173.94434),new u(107,174.94793),new u(108,175.95029),new u(109,176.95437)]),B(d(Mt,1),Vt,3,0,[new u(77,145.966495),new u(78,146.961081),new u(79,147.95755),new u(80,148.95265),new u(81,149.94967),new u(82,150.944842),new u(83,151.9443),new u(84,152.942027631),new u(85,153.940832325),new u(86,154.939191562),new u(87,155.939006895),new u(88,156.936756069),new u(89,157.936996),new u(90,158.934808966),new u(91,159.935090772),new u(92,160.933398042),new u(93,161.933970147),new u(94,162.932647648),new u(95,163.933450972),new u(96,164.932432463),new u(97,165.933553133),new u(98,166.932848844),new u(99,167.934170375),new u(100,168.934211117),new u(101,169.935797877),new u(102,170.936425817),new u(103,171.938396118),new u(104,172.939600336),new u(105,173.942164618),new u(106,174.943832897),new u(107,175.946991412),new u(108,176.94904),new u(109,177.95264),new u(110,178.95534)]),B(d(Mt,1),Vt,3,0,[new u(78,147.96676),new u(79,148.96348),new u(80,149.95799),new u(81,150.954657965),new u(82,151.950167),new u(83,152.94921),new u(84,153.945651145),new u(85,154.945792),new u(86,155.942847109),new u(87,156.94265865),new u(88,157.939857897),new u(89,158.940153735),new u(90,159.93756),new u(91,160.937357719),new u(92,161.93575),new u(93,162.936265492),new u(94,163.93452),new u(95,164.935397592),new u(96,165.933879623),new u(97,166.934946862),new u(98,167.933894465),new u(99,168.93518712),new u(100,169.934758652),new u(101,170.936322297),new u(102,171.936377696),new u(103,172.938206756),new u(104,173.938858101),new u(105,174.941272494),new u(106,175.942568409),new u(107,176.945257126),new u(108,177.946643396),new u(109,178.95017),new u(110,179.95233),new u(111,180.95615)]),B(d(Mt,1),Vt,3,0,[new u(79,149.972668),new u(80,150.967147),new u(81,151.96361),new u(82,152.95869),new u(83,153.9571),new u(84,154.953641324),new u(85,155.952907),new u(86,156.950101536),new u(87,157.948577981),new u(88,158.946615113),new u(89,159.945383),new u(90,160.943047504),new u(91,161.943222),new u(92,162.941203796),new u(93,163.941215),new u(94,164.939605886),new u(95,165.939762646),new u(96,166.938307056),new u(97,167.938698576),new u(98,168.937648757),new u(99,169.93847219),new u(100,170.937909903),new u(101,171.939082239),new u(102,172.938926901),new u(103,173.940333522),new u(104,174.940767904),new u(105,175.942682399),new u(106,176.943754987),new u(107,177.945951366),new u(108,178.947324216),new u(109,179.949879968),new u(110,180.95197),new u(111,181.95521),new u(112,182.95757),new u(113,183.96117)]),B(d(Mt,1),Vt,3,0,[new u(82,153.96425),new u(83,154.96276),new u(84,155.959247),new u(85,156.958127),new u(86,157.95405528),new u(87,158.954003),new u(88,159.950713588),new u(89,160.950330852),new u(90,161.947202977),new u(91,162.947057),new u(92,163.944422),new u(93,164.94454),new u(94,165.94225),new u(95,166.9426),new u(96,167.94063),new u(97,168.941158567),new u(98,169.93965),new u(99,170.94049),new u(100,171.93945798),new u(101,172.94065),new u(102,173.940040159),new u(103,174.941502991),new u(104,175.941401828),new u(105,176.943220013),new u(106,177.943697732),new u(107,178.945815073),new u(108,179.94654876),new u(109,180.949099124),new u(110,181.950552893),new u(111,182.953531012),new u(112,183.95544788),new u(113,184.95878),new u(114,185.96092)]),B(d(Mt,1),Vt,3,0,[new u(83,155.971689),new u(84,156.968145),new u(85,157.966368),new u(86,158.96232309),new u(87,159.961358),new u(88,160.958372992),new u(89,161.956556553),new u(90,162.95431665),new u(91,163.95357),new u(92,164.950817),new u(93,165.95047),new u(94,166.948639),new u(95,167.947787),new u(96,168.94592),new u(97,169.94609),new u(98,170.94446),new u(99,171.944739818),new u(100,172.94459),new u(101,173.944167937),new u(102,174.94365),new u(103,175.944740551),new u(104,176.944471766),new u(105,177.945750349),new u(106,178.945934113),new u(107,179.947465655),new u(108,180.947996346),new u(109,181.950152414),new u(110,182.951373188),new u(111,183.954009331),new u(112,184.955559086),new u(113,185.9585501),new u(114,186.96041),new u(115,187.96371)]),B(d(Mt,1),Vt,3,0,[new u(84,157.973939),new u(85,158.97228),new u(86,159.968369),new u(87,160.967089),new u(88,161.962750303),new u(89,162.962532),new u(90,163.95898381),new u(91,164.958335962),new u(92,165.955019896),new u(93,166.954672),new u(94,167.951863),new u(95,168.951759),new u(96,169.948473988),new u(97,170.94946),new u(98,171.948228837),new u(99,172.948884),new u(100,173.94616),new u(101,174.94677),new u(102,175.94559),new u(103,176.94662),new u(104,177.945848364),new u(105,178.947071733),new u(106,179.946705734),new u(107,180.948198054),new u(108,181.948205519),new u(109,182.950224458),new u(110,183.950932553),new u(111,184.953420586),new u(112,185.954362204),new u(113,186.957158365),new u(114,187.958486954),new u(115,188.96191222),new u(116,189.963179541)]),B(d(Mt,1),Vt,3,0,[new u(85,159.981485),new u(86,160.977661),new u(87,161.975707),new u(88,162.971375872),new u(89,163.970319),new u(90,164.967050268),new u(91,165.965211372),new u(92,166.962564),new u(93,167.961609),new u(94,168.95883),new u(95,169.958163),new u(96,170.955547),new u(97,171.955285),new u(98,172.953062),new u(99,173.952114),new u(100,174.951393),new u(101,175.95157),new u(102,176.95027),new u(103,177.950851081),new u(104,178.949981038),new u(105,179.95078768),new u(106,180.950064596),new u(107,181.951211444),new u(108,182.950821349),new u(109,183.952524289),new u(110,184.952955747),new u(111,185.954986529),new u(112,186.955750787),new u(113,187.958112287),new u(114,188.959228359),new u(115,189.961816139),new u(116,190.963123592),new u(117,191.96596)]),B(d(Mt,1),Vt,3,0,[new u(86,161.983819),new u(87,162.982048),new u(88,163.977927),new u(89,164.976475),new u(90,165.971934911),new u(91,166.971554),new u(92,167.967832911),new u(93,168.967076205),new u(94,169.963569716),new u(95,170.96304),new u(96,171.960078),new u(97,172.959791),new u(98,173.956307704),new u(99,174.95708),new u(100,175.953757941),new u(101,176.955045),new u(102,177.953348225),new u(103,178.953951),new u(104,179.952308241),new u(105,180.953274494),new u(106,181.952186222),new u(107,182.95311),new u(108,183.952490808),new u(109,184.954043023),new u(110,185.953838355),new u(111,186.955747928),new u(112,187.955835993),new u(113,188.958144866),new u(114,189.95844521),new u(115,190.960927951),new u(116,191.961479047),new u(117,192.964148083),new u(118,193.965179314),new u(119,194.968123889),new u(120,195.96962255)]),B(d(Mt,1),Vt,3,0,[new u(88,164.98758),new u(89,165.985506),new u(90,166.980951577),new u(91,167.979966),new u(92,168.976390868),new u(93,169.974441697),new u(94,170.971779),new u(95,171.970643),new u(96,172.967707),new u(97,173.966804),new u(98,174.964279),new u(99,175.963511),new u(100,176.96117),new u(101,177.960084944),new u(102,178.95915),new u(103,179.958555615),new u(104,180.957642156),new u(105,181.958127689),new u(106,182.956814),new u(107,183.957388318),new u(108,184.95659),new u(109,185.957951104),new u(110,186.95736083),new u(111,187.958851962),new u(112,188.958716473),new u(113,189.960592299),new u(114,190.960591191),new u(115,191.962602198),new u(116,192.9629237),new u(117,193.96507561),new u(118,194.9659768),new u(119,195.968379906),new u(120,196.969636496),new u(121,197.97228),new u(122,198.973787159)]),B(d(Mt,1),Vt,3,0,[new u(90,167.988035),new u(91,168.986421),new u(92,169.981734918),new u(93,170.981251),new u(94,171.977376138),new u(95,172.976499642),new u(96,173.972811276),new u(97,174.972276),new u(98,175.969),new u(99,176.968453),new u(100,177.964894223),new u(101,178.965475),new u(102,179.962023729),new u(103,180.963177),new u(104,181.961267637),new u(105,182.961729),new u(106,183.959851685),new u(107,184.960753782),new u(108,185.959432346),new u(109,186.960697),new u(110,187.959395697),new u(111,188.9608319),new u(112,189.959930073),new u(113,190.961684653),new u(114,191.961035158),new u(115,192.962984504),new u(116,193.962663581),new u(117,194.964774449),new u(118,195.964934884),new u(119,196.967323401),new u(120,197.967876009),new u(121,198.970576213),new u(122,199.971423885),new u(123,200.974496467),new u(124,201.97574)]),B(d(Mt,1),Vt,3,0,[new u(92,170.991183),new u(93,171.990109),new u(94,172.986398138),new u(95,173.984325861),new u(96,174.981552),new u(97,175.980269),new u(98,176.977215),new u(99,177.975975),new u(100,178.973412),new u(101,179.972396),new u(102,180.969948),new u(103,181.968621416),new u(104,182.96762),new u(105,183.966776046),new u(106,184.965806956),new u(107,185.965997671),new u(108,186.964562),new u(109,187.965321662),new u(110,188.9642243),new u(111,189.964698757),new u(112,190.963649239),new u(113,191.964810107),new u(114,192.964131745),new u(115,193.96533889),new u(116,194.965017928),new u(117,195.966551315),new u(118,196.966551609),new u(119,197.968225244),new u(120,198.968748016),new u(121,199.970717886),new u(122,200.971640839),new u(123,201.973788431),new u(124,202.975137256),new u(125,203.977705),new u(126,204.97961)]),B(d(Mt,1),Vt,3,0,[new u(95,174.991411),new u(96,175.987413248),new u(97,176.986336874),new u(98,177.982476325),new u(99,178.981783),new u(100,179.978322),new u(101,180.977806),new u(102,181.97393546),new u(103,182.974561),new u(104,183.970705219),new u(105,184.971983),new u(106,185.969460021),new u(107,186.969785),new u(108,187.967511693),new u(109,188.968733187),new u(110,189.966958568),new u(111,190.96706311),new u(112,191.965921572),new u(113,192.966644169),new u(114,193.965381832),new u(115,194.966638981),new u(116,195.965814846),new u(117,196.967195333),new u(118,197.96675183),new u(119,198.968262489),new u(120,199.968308726),new u(121,200.970285275),new u(122,201.970625604),new u(123,202.972857096),new u(124,203.97347564),new u(125,204.976056104),new u(126,205.977498672),new u(127,206.982577025),new u(128,207.98594)]),B(d(Mt,1),Vt,3,0,[new u(96,176.996881),new u(97,177.994637),new u(98,178.991466),new u(99,179.990194),new u(100,180.986904),new u(101,181.98561),new u(102,182.982697),new u(103,183.98176),new u(104,184.9791),new u(105,185.977549881),new u(106,186.97617),new u(107,187.97592),new u(108,188.974290451),new u(109,189.974473379),new u(110,190.972261952),new u(111,191.972770785),new u(112,192.970548),new u(113,193.971053),new u(114,194.96965),new u(115,195.970515),new u(116,196.9695362),new u(117,197.970466294),new u(118,198.969813837),new u(119,199.970945394),new u(120,200.97080377),new u(121,201.972090569),new u(122,202.972329088),new u(123,203.973848646),new u(124,204.97441227),new u(125,205.976095321),new u(126,206.977407908),new u(127,207.982004653),new u(128,208.985349125),new u(129,209.990065574)]),B(d(Mt,1),Vt,3,0,[new u(99,180.996714),new u(100,181.992676101),new u(101,182.99193),new u(102,183.988198),new u(103,184.98758),new u(104,185.983485388),new u(105,186.98403),new u(106,187.979869108),new u(107,188.98088),new u(108,189.978180008),new u(109,190.9782),new u(110,191.975719811),new u(111,192.97608),new u(112,193.974648056),new u(113,194.975920279),new u(114,195.97271),new u(115,196.97338),new u(116,197.97198),new u(117,198.972909384),new u(118,199.97181556),new u(119,200.972846589),new u(120,201.972143786),new u(121,202.973375491),new u(122,203.973028761),new u(123,204.974467112),new u(124,205.974449002),new u(125,206.975880605),new u(126,207.97663585),new u(127,208.981074801),new u(128,209.984173129),new u(129,210.988731474),new u(130,211.991887495),new u(131,212.9965),new u(132,213.999798147)]),B(d(Mt,1),Vt,3,0,[new u(102,184.997708),new u(103,185.99648),new u(104,186.993458),new u(105,187.992173),new u(106,188.989505),new u(107,189.987520007),new u(108,190.986053),new u(109,191.985368),new u(110,192.983662229),new u(111,193.983430186),new u(112,194.98112697),new u(113,195.981236107),new u(114,196.978934287),new u(115,197.979024396),new u(116,198.977576953),new u(117,199.978141983),new u(118,200.976970721),new u(119,201.977674504),new u(120,202.976868118),new u(121,203.977805161),new u(122,204.977374688),new u(123,205.978482854),new u(124,206.978455217),new u(125,207.979726699),new u(126,208.980383241),new u(127,209.984104944),new u(128,210.987258139),new u(129,211.991271542),new u(130,212.994374836),new u(131,213.998698664),new u(132,215.001832349),new u(133,216.006199)]),B(d(Mt,1),Vt,3,0,[new u(106,189.994293888),new u(107,190.994653),new u(108,191.99033039),new u(109,192.991102),new u(110,193.988284107),new u(111,194.988045),new u(112,195.985469432),new u(113,196.985567),new u(114,197.984024384),new u(115,198.985044507),new u(116,199.981735),new u(117,200.982209),new u(118,201.980704),new u(119,202.981412863),new u(120,203.980307113),new u(121,204.981165396),new u(122,205.980465241),new u(123,206.981578228),new u(124,207.981231059),new u(125,208.982415788),new u(126,209.982857396),new u(127,210.986636869),new u(128,211.988851755),new u(129,212.992842522),new u(130,213.995185949),new u(131,214.999414609),new u(132,216.001905198),new u(133,217.006253),new u(134,218.008965773)]),B(d(Mt,1),Vt,3,0,[new u(108,193.000188),new u(109,193.997973),new u(110,194.996554),new u(111,195.995702),new u(112,196.993891293),new u(113,197.99343368),new u(114,198.991008569),new u(115,199.990920883),new u(116,200.988486908),new u(117,201.988448629),new u(118,202.986847216),new u(119,203.987261559),new u(120,204.986036352),new u(121,205.986599242),new u(122,206.985775861),new u(123,207.986582508),new u(124,208.986158678),new u(125,209.987131308),new u(126,210.987480806),new u(127,211.990734657),new u(128,212.99292115),new u(129,213.996356412),new u(130,214.998641245),new u(131,216.002408839),new u(132,217.004709619),new u(133,218.008681458),new u(134,219.011296478),new u(135,220.015301),new u(136,221.01814),new u(137,222.02233),new u(138,223.02534)]),B(d(Mt,1),Vt,3,0,[new u(110,196.001117268),new u(111,197.001661),new u(112,197.998779978),new u(113,198.998309),new u(114,199.995634148),new u(115,200.995535),new u(116,201.993899382),new u(117,202.994765192),new u(118,203.991365),new u(119,204.991668),new u(120,205.99016),new u(121,206.990726826),new u(122,207.989631237),new u(123,208.990376634),new u(124,209.989679862),new u(125,210.99058541),new u(126,211.990688899),new u(127,212.993868354),new u(128,213.995346275),new u(129,214.998729195),new u(130,216.000258153),new u(131,217.003914555),new u(132,218.005586315),new u(133,219.009474831),new u(134,220.011384149),new u(135,221.015455),new u(136,222.017570472),new u(137,223.02179),new u(138,224.02409),new u(139,225.02844),new u(140,226.03089),new u(141,227.035407),new u(142,228.038084)]),B(d(Mt,1),Vt,3,0,[new u(113,200.006499),new u(114,201.00458692),new u(115,202.00396885),new u(116,203.001423829),new u(117,204.001221209),new u(118,204.998663961),new u(119,205.998486886),new u(120,206.996859385),new u(121,207.997133849),new u(122,208.995915421),new u(123,209.996398327),new u(124,210.995529332),new u(125,211.996194988),new u(126,212.996174845),new u(127,213.99895474),new u(128,215.000326029),new u(129,216.003187873),new u(130,217.004616452),new u(131,218.007563326),new u(132,219.009240843),new u(133,220.012312978),new u(134,221.014245654),new u(135,222.017543957),new u(136,223.019730712),new u(137,224.023235513),new u(138,225.025606914),new u(139,226.029343423),new u(140,227.031833167),new u(141,228.034776087),new u(142,229.038426),new u(143,230.04251),new u(144,231.045407),new u(145,232.049654)]),B(d(Mt,1),Vt,3,0,[new u(115,203.00921),new u(116,204.006434513),new u(117,205.006187),new u(118,206.004463814),new u(119,207.005176607),new u(120,208.001776),new u(121,209.001944),new u(122,210.000446),new u(123,211.000893996),new u(124,211.999783492),new u(125,213.000345847),new u(126,214.000091141),new u(127,215.002704195),new u(128,216.003518402),new u(129,217.00630601),new u(130,218.007123948),new u(131,219.010068787),new u(132,220.011014669),new u(133,221.013907762),new u(134,222.01536182),new u(135,223.01849714),new u(136,224.020202004),new u(137,225.023604463),new u(138,226.025402555),new u(139,227.029170677),new u(140,228.031064101),new u(141,229.034820309),new u(142,230.037084774),new u(143,231.04122),new u(144,232.043693),new u(145,233.047995),new u(146,234.050547)]),B(d(Mt,1),Vt,3,0,[new u(118,207.012469754),new u(119,208.012112949),new u(120,209.009568736),new u(121,210.009256802),new u(122,211.007648196),new u(123,212.007811441),new u(124,213.006573689),new u(125,214.006893072),new u(126,215.006450832),new u(127,216.008721268),new u(128,217.009332676),new u(129,218.011625045),new u(130,219.012404918),new u(131,220.014752105),new u(132,221.015575746),new u(133,222.017828852),new u(134,223.01912603),new u(135,224.021708435),new u(136,225.023220576),new u(137,226.026089848),new u(138,227.027746979),new u(139,228.031014825),new u(140,229.032930871),new u(141,230.036025144),new u(142,231.038551503),new u(143,232.042022474),new u(144,233.04455),new u(145,234.04842),new u(146,235.051102),new u(147,236.055178)]),B(d(Mt,1),Vt,3,0,[new u(120,210.015711883),new u(121,211.016306912),new u(122,212.012916),new u(123,213.012962),new u(124,214.011451),new u(125,215.011726597),new u(126,216.011050963),new u(127,217.013066169),new u(128,218.013267744),new u(129,219.015521253),new u(130,220.015733126),new u(131,221.018171499),new u(132,222.018454131),new u(133,223.020795153),new u(134,224.02145925),new u(135,225.023941441),new u(136,226.024890681),new u(137,227.027698859),new u(138,228.028731348),new u(139,229.03175534),new u(140,230.033126574),new u(141,231.03629706),new u(142,232.03805036),new u(143,233.041576923),new u(144,234.043595497),new u(145,235.04750442),new u(146,236.04971),new u(147,237.053894),new u(148,238.056243)]),B(d(Mt,1),Vt,3,0,[new u(122,213.021183209),new u(123,214.02073923),new u(124,215.019097612),new u(125,216.019109649),new u(126,217.018288571),new u(127,218.020007906),new u(128,219.019880348),new u(129,220.021876493),new u(130,221.021863742),new u(131,222.023726),new u(132,223.023963748),new u(133,224.025614854),new u(134,225.026115172),new u(135,226.02793275),new u(136,227.028793151),new u(137,228.031036942),new u(138,229.032088601),new u(139,230.034532562),new u(140,231.035878898),new u(141,232.03858172),new u(142,233.040240235),new u(143,234.043302325),new u(144,235.045436759),new u(145,236.048675176),new u(146,237.05113943),new u(147,238.054497046),new u(148,239.05713),new u(149,240.06098)]),B(d(Mt,1),Vt,3,0,[new u(126,218.023487),new u(127,219.024915423),new u(128,220.024712),new u(129,221.026351),new u(130,222.02607),new u(131,223.027722956),new u(132,224.027590139),new u(133,225.029384369),new u(134,226.02933975),new u(135,227.031140069),new u(136,228.031366357),new u(137,229.033496137),new u(138,230.033927392),new u(139,231.036289158),new u(140,232.03714628),new u(141,233.039628196),new u(142,234.040945606),new u(143,235.043923062),new u(144,236.045561897),new u(145,237.048723955),new u(146,238.050782583),new u(147,239.054287777),new u(148,240.056585734),new u(149,241.06033),new u(150,242.062925)]),B(d(Mt,1),Vt,3,0,[new u(132,225.033899689),new u(133,226.035129),new u(134,227.034958261),new u(135,228.03618),new u(136,229.036246866),new u(137,230.037812591),new u(138,231.038233161),new u(139,232.040099),new u(140,233.04073235),new u(141,234.042888556),new u(142,235.044055876),new u(143,236.046559724),new u(144,237.048167253),new u(145,238.050940464),new u(146,239.052931399),new u(147,240.056168828),new u(148,241.058246266),new u(149,242.061635),new u(150,243.064273),new u(151,244.06785)]),B(d(Mt,1),Vt,3,0,[new u(134,228.038727686),new u(135,229.040138934),new u(136,230.039645603),new u(137,231.041258),new u(138,232.041179445),new u(139,233.04298757),new u(140,234.043304681),new u(141,235.0452815),new u(142,236.046048088),new u(143,237.048403774),new u(144,238.0495534),new u(145,239.052156519),new u(146,240.05380746),new u(147,241.056845291),new u(148,242.058736847),new u(149,243.061997013),new u(150,244.06419765),new u(151,245.067738657),new u(152,246.070198429),new u(153,247.07407)]),B(d(Mt,1),Vt,3,0,[new u(136,231.04556),new u(137,232.04659),new u(138,233.046472),new u(139,234.047794),new u(140,235.048029),new u(141,236.049569),new u(142,237.049970748),new u(143,238.051977839),new u(144,239.053018481),new u(145,240.055287826),new u(146,241.056822944),new u(147,242.059543039),new u(148,243.061372686),new u(149,244.064279429),new u(150,245.066445398),new u(151,246.069768438),new u(152,247.072086),new u(153,248.075745),new u(154,249.07848)]),B(d(Mt,1),Vt,3,0,[new u(137,233.0508),new u(138,234.05024),new u(139,235.051591),new u(140,236.051405),new u(141,237.052891),new u(142,238.053016298),new u(143,239.054951),new u(144,240.055519046),new u(145,241.057646736),new u(146,242.058829326),new u(147,243.061382249),new u(148,244.062746349),new u(149,245.065485586),new u(150,246.067217551),new u(151,247.070346811),new u(152,248.072342247),new u(153,249.075947062),new u(154,250.078350687),new u(155,251.082277873),new u(156,252.08487)]),B(d(Mt,1),Vt,3,0,[new u(138,235.05658),new u(139,236.05733),new u(140,237.057127),new u(141,238.058266),new u(142,239.058362),new u(143,240.059749),new u(144,241.060223),new u(145,242.06205),new u(146,243.06300157),new u(147,244.065167882),new u(148,245.066355386),new u(149,246.068666836),new u(150,247.070298533),new u(151,248.07308),new u(152,249.074979937),new u(153,250.078310529),new u(154,251.08075344),new u(155,252.084303),new u(156,253.08688),new u(157,254.0906)]),B(d(Mt,1),Vt,3,0,[new u(139,237.06207),new u(140,238.06141),new u(141,239.062579),new u(142,240.062295),new u(143,241.063716),new u(144,242.063688713),new u(145,243.065421),new u(146,244.06599039),new u(147,245.068039),new u(148,246.068798807),new u(149,247.070992043),new u(150,248.07217808),new u(151,249.074846818),new u(152,250.076399951),new u(153,251.079580056),new u(154,252.081619582),new u(155,253.085126791),new u(156,254.087316198),new u(157,255.091039),new u(158,256.09344)]),B(d(Mt,1),Vt,3,0,[new u(141,240.06892),new u(142,241.068662),new u(143,242.069699),new u(144,243.069631),new u(145,244.070969),new u(146,245.071317),new u(147,246.072965),new u(148,247.07365),new u(149,248.075458),new u(150,249.076405),new u(151,250.078654),new u(152,251.079983592),new u(153,252.082972247),new u(154,253.084817974),new u(155,254.088016026),new u(156,255.090266386),new u(157,256.093592),new u(158,257.095979)]),B(d(Mt,1),Vt,3,0,[new u(142,242.07343),new u(143,243.07451),new u(144,244.074077),new u(145,245.075375),new u(146,246.075281634),new u(147,247.076819),new u(148,248.077184411),new u(149,249.079024),new u(150,250.079514759),new u(151,251.081566467),new u(152,252.082460071),new u(153,253.085176259),new u(154,254.086847795),new u(155,255.089955466),new u(156,256.091766522),new u(157,257.095098635),new u(158,258.097069),new u(159,259.100588)]),B(d(Mt,1),Vt,3,0,[new u(144,245.081017),new u(145,246.081933),new u(146,247.081804),new u(147,248.082909),new u(148,249.083002),new u(149,250.084488),new u(150,251.084919),new u(151,252.08663),new u(152,253.08728),new u(153,254.089725),new u(154,255.091075196),new u(155,256.094052757),new u(156,257.095534643),new u(157,258.098425321),new u(158,259.100503),new u(159,260.103645)]),B(d(Mt,1),Vt,3,0,[new u(147,249.087823),new u(148,250.087493),new u(149,251.08896),new u(150,252.088965909),new u(151,253.090649),new u(152,254.090948746),new u(153,255.093232449),new u(154,256.094275879),new u(155,257.096852778),new u(156,258.0982),new u(157,259.101024),new u(158,260.102636),new u(159,261.105743),new u(160,262.10752)]),B(d(Mt,1),Vt,3,0,[new u(148,251.09436),new u(149,252.09533),new u(150,253.095258),new u(151,254.096587),new u(152,255.096769),new u(153,256.098763),new u(154,257.099606),new u(155,258.101883),new u(156,259.10299),new u(157,260.105572),new u(158,261.106941),new u(159,262.109692),new u(160,263.111394)]),B(d(Mt,1),Vt,3,0,[new u(149,253.100679),new u(150,254.100166),new u(151,255.101492),new u(152,256.101179573),new u(153,257.103072),new u(154,258.103568),new u(155,259.105628),new u(156,260.106434),new u(157,261.108752),new u(158,262.109918),new u(159,263.11254),new u(160,264.113978)]),B(d(Mt,1),Vt,3,0,[new u(150,255.107398),new u(151,256.10811),new u(152,257.107858),new u(153,258.109438),new u(154,259.109721),new u(155,260.111427),new u(156,261.112106),new u(157,262.114153),new u(158,263.115078),new u(159,264.117473),new u(160,265.118659)]),B(d(Mt,1),Vt,3,0,[new u(152,258.113151),new u(153,259.114652),new u(154,260.114435447),new u(155,261.116199),new u(156,262.116477),new u(157,263.118313),new u(158,264.118924),new u(159,265.121066),new u(160,266.121928)]),B(d(Mt,1),Vt,3,0,[new u(153,260.121803),new u(154,261.1218),new u(155,262.123009),new u(156,263.123146),new u(157,264.12473),new u(158,265.125198),new u(159,266.127009),new u(160,267.12774)]),B(d(Mt,1),Vt,3,0,[new u(155,263.12871),new u(156,264.128408258),new u(157,265.130001),new u(158,266.130042),new u(159,267.131774),new u(160,268.132156),new u(161,269.134114)]),B(d(Mt,1),Vt,3,0,[new u(156,265.136567),new u(157,266.13794),new u(158,267.137526),new u(159,268.138816),new u(160,269.139106),new u(161,270.140723),new u(162,271.141229)])])}function Q6(t,e){return at(e,f4)?new _o(iv(t,168,1428,\"%5968%UDy0ClA8tJ9QPLT6UDy08FA8tJVQPLQK%858%BQPLQdUDy0yVA8tP9QPLT/UDy0/1A8tP9QPLSW%362%D4BwYC+AYGAvgHBgE%303%D/AAAB/wAAAQ%159%FA8tC1QPLThUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTl%330%D5BgcB+AcGBPkHBhX5BwdN+QYHefgHB2/5Bwc8+AYGFfgGBgj5BgcF+AYGAvkHBgE%245%/wAAAf8AAAL/AAAG/wAAEP8AACP/AAA7/wAAP/8AAD3/AAAg/wAABw%154%UDy0RFA8tPJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT5%325%PkFCAT4BgZE+QcHo/gHB+X5Bwb/+QcH//kHB//4Bwf9+QYH1vgHB5X5BwZD+QcGDvkHBwb5BgYD+QcGAQ%228%D/AAAS/wAARP8AAIL/AAC4/wAA2/8AAPf/AAD//wAA//8AAPj/AAB+/wAADw%148%BQPLRnUDy0+1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%314%D5BwYC+AYHK/kHBrb4Bwf4+AcH//gHB//5Bwf/+AcG//kHBv/5Bwf/+AYH//gHB/75Bwf3+AYHs/kHBkH5BgcR+QYGB/kFBgL6BgYB%197%P8AAAH/AAAI/wAAKP8AAIj/AADh/wAA9/8AAP3/AAD//wAA//8AAP//AAD6/wAAzv8AAGH/AAAq/wAAEw%143%FA8tI9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%304%+QYHAfoIBwX4BgZu+QcH6fkGB//5Bgf/+QYH//kHB//5Bwf/+QcG//kHBv/4Bwb/+AcH//gHB//5Bgf/+AcH//kHBvT5Bwas+QYGO/kGBgr5BgUG+gUFAQ%175%P8AAAE%5%/wAACv8AAFX/AACy/wAA8P8AAP//AAD//wAA//8AAP//AAD//wAA//8AANP/AACD/wAARf8AACz/AAAZ/wAACQ%132%BQPLQJUDy0qlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%304%+QcGBPkGB374Bwf5+AcH//kHB//5Bwf/+QcH//kHBv/4Bwf/+AcH//gHB//5Bwf/+QcG//gHB//5Bwf/+QcG//gGB//4Bwb/+QYG8PkGBoD5BgYg+gYFCvoFBQQ%165%/wAAAf8AAA7/AABV/wAAzf8AAPv/AAD//wAA//8AAP//AAD//wAA//8AAPz/AADo/wAAkf8AAEr/AAAz/wAAH/8AAA//AAAG/wAAAQ%127%FA8tBNQPLTDUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%304%+QYGUvgHBvn4Bwf/+AcH//kHB//5Bwf/+QcH//kHB//4Bgf/+QcH//gHB//4Bwb/+AcH//gHB//4Bgf/+QcG//gGB//5Bwf/+QYG//kGBv76BgbL+gYFTfoFBQ76BQUH+gUEAQ%148%D/AAAG/wAAWf8AAMb/AAD9/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA7P8AAJ3/AABW/wAANP8AACL/AAAS/wAAB/8AAAI%133%UDy0I1A8tNtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%293%PkHBwH4BwYD+AYHwfgHB//4Bwb/+QYH//gGBv/4Bwf/+QYH//kGB//5Bwf/+AcH//gHB//5Bwb/+AcH//kGB//4Bwf/+AYG//kHB//4Bwb/+AYG//kHB//5BQb/+QYF8/oFBX76BQUd+wQFCfsEBAI%133%/wAABv8AADj/AAC5/wAA/P8AAP//AAD//wAA//8AAP//AAD//wAA//8AAPP/AAC6/wAAXv8AADn/AAAm/wAAE/8AAAj/AAAC/wAAAQ%132%BQPLQ7UDy06FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%293%PgGBgH4BggD+QcGqPgHB//4Bwf/+AcH//gHB//4Bwf/+AcG//gHB//4Bgf/+QYG//gGBv/5Bgb/+AcH//kHB//4Bgb/+QcH//gHB//5Bwf/+QcH//kHBv/5Bgb/+gYG//oFBfz6BQW++wQFMfoFBAz7BAQE%112%/wAAAQ%4%D/AAAf/wAAo/8AAPD/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA0P8AAHL/AABB/wAAKf8AABb/AAAJ/wAAA/8AAAE%138%FA8tFNQPLT2UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%293%PgGBwH4BwcE+AcHJ/gHB8j4Bgf/+AcH//kHBv/4Bwf/+QcH//gHB//5Bgb/+AcG//gHB//4Bwf/+AYH//gHB//4Bwb/+QcH//kGB//5Bwf/+AYH//kHBv/5Bgb/+QYG//oFBv/6BQX/+gQF3foEBVL7BAQR+wMEBvwDAwE%101%/wAAEP8AAGj/AADm/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAOj/AACX/wAASP8AADD/AAAb/wAADP8AAAT/AAAB%144%UDy0blA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0LlA8tAI%287%D5BgcC+QcGC/gGBir5Bwea+QcH9vkHB//4Bwb/+QYG//gHB//4Bwf/+QYG//gGB//4Bwf/+AcH//gGBv/4Bwf/+QYH//kGB//4Bgf/+QcH//gHBv/5Bgb/+QUG//kGBf/6BQX/+gUF//oEBfD7BAR0/AQEFPsDAwj8BAMC%80%/wAAAf8AAAL/AAA1/wAAyv8AAPr/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD8/wAAwv8AAGD/AAA5/wAAI/8AABD/AAAG/wAAAg%143%FA8tAFQPLSRUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTmUDy0yFA8tJpQPLR4UDy0UFA8tCI%261%+AYHA/gGBw35BwYa+AYHWPkHBr75Bwf4+AcH//kHB//4Bwf/+AYH//gHB//5Bwf/+QcH//gHB//4Bwb/+QcG//kHBv/4Bwf/+QcG//gHBv/5Bgb/+QYG//oGBv/6BQX/+gUF//sEBf/7BAT+/AQEkvwDAx38AwMK/QMDAg%74%/wAAFP8AAIP/AADy/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAO7/AACX/wAAR/8AAC7/AAAX/wAACf8AAAI%149%UDy0B1A8tKpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTzUDy0v1A8tI1QPLRSUDy0Fw%239%PkHBwL4BwcI+AYGFPgHByf5Bgdh+AYHzPkHB/v5Bwf/+QcG//kHBv/4Bwb/+QcG//kHB//5Bwf/+QYG//gHBv/4Bwf/+QcH//gGB//5Bwb/+QYG//oGBv/6BgX/+gQF//oFBP/7BAT/+wQE/fwEBK/8BAMk/AMDDPwCAgM%53%/wAAAf8AAAP/AAA5/wAA0v8AAP3/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD+/wAA3P8AAGz/AAA8/wAAIv8AAA//AAAF/wAAAQ%148%BQPLQTUDy0xlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNdQPLSTUDy0TlA8tAw%223%D4BgYB+QcHBPkHBgv4BwcV+AYGK/gHB3H4BwfM+AcH/vgHB//4Bgf/+QYG//gHB//4Bwb/+AYH//gHBv/5Bwf/+QcH//gHB//4Bwb/+QYG//kGBv/6Bgb/+gUF//sEBf/7BAT/+wQE//wEBP78AwS7/AMDLP0DAgz9AgID%37%P8AAAE%5%/wAAEP8AAIL/AADx/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAC5/wAAVv8AADH/AAAa/wAACf8AAAI%154%FA8tCBQPLTZUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPxQPLS3UDy0aVA8tBg%218%PkHBwH5BwcF+QYHDPgHBxn5Bwct+QYHd/kHBt/5Bwb8+AcG//gHB//4Bwf/+QcG//gGBv/4Bwf/+AcG//gHB//5Bgb/+QcH//kGBv/6BgX/+gYF//oFBf/7BAX/+wUE//sEBP/7AwT//AMDy/0DAzP8AwIO/QIDB%32%P8AAAP/AAAr/wAAx/8AAP3/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA9v8AAJz/AABG/wAAK/8AABP/AAAG/wAAAQ%154%UDy0NVA8tONQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS2UDy0XlA8tAg%213%+QYGAfgHBgX4BwcN+QcHGPgHBzf4BgeF+QcH4/gGBv/4Bwb/+AcH//gHB//5Bwf/+QcG//gHB//5Bwb/+QYG//kGBv/5Bgb/+QYF//oFBf/7BQX/+gUE//sEBP/8BAP//AMD//wDAtD9AgI3/QICDv0CAgQ%21%/wAAAv8AAG7/AADo/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AADq/wAAgf8AAD7/AAAk/wAADv8AAAQ%159%BQPLRJUDy09VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOxQPLSSUDy0L%213%D5BwcB+QYHBfgGBg/5Bgcb+AcGOfgHB6D5Bwfv+QcH//kGBv/5Bwb/+AcH//gGB//5Bwf/+QYG//kGBv/5Bgb/+gUG//oGBf/6BAX/+gQF//sEBP/7BAP/+wMD//wDA//9AwPW/QMCOf0CAg/9AQIE%5%P4BAQH/AQEd/wEApv8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AANz/AABo/wAAOP8AAB7/AAAL/wAAAw%159%FA8tGZQPLT5UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tLxQPLRB%213%PgHBwL5BgcH+AcHEPkHBh/5BgZN+AYHsfgGB/v4Bwf/+AYG//gHBv/4Bgf/+QYH//kGBv/5Bgb/+gYG//oFBf/6BQX/+gQF//sEBP/7BAP//AQE//wDA//8AwP//QID0/0CAjP9AgEP/QEBAv4BAUf+AQDX/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAAx/8AAFz/AAAz/wAAGP8AAAj/AAAB%160%UDy0elA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0zFA8tEQ%207%D5BgcB+QcHAvgHBwj4BwYT+AYGIfgHB2j5BgfW+QcH/PkHBv/5Bwf/+AYH//gHBv/5Bgb/+QUF//oFBv/7BQX/+gUF//sFBP/7BAT//AME//wDA//8AwL//AMD//wCAsv+AgI8/QEBfP4BAfb+AQH//wEA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAPv/AAC6/wAAUP8AAC7/AAAV/wAABv8AAAE%159%BQPLSYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTAUDy0Mw%207%PkHBwH4BwcD+QcHCvgHBhb5Bwcy+QYHh/kHB/H4Bwf/+AcH//kGBv/5Bgb/+QYG//oFBv/6BQX/+gUF//oFBP/7BAT/+wQD//sDA//8AwP//QMD//0DAv79AgLp/gIC+/4CAf/+AQH//wAB//8AAP//AAD//wAA//8AAP//AAD//wAA+f8AAKL/AABJ/wAAKf8AABH/AAAF%165%FA8tJdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tJZQPLQO%208%+AYGAfkHBwT4BgYO+QYGGfgHB0n5Bwe7+QcH+vkHBv/5Bgb/+gYF//kGBv/6BgX/+wUF//oEBf/7BAT/+wME//wDA//8AwP//AMD//wCAv/9AgL//QIC//4BAf/+AQH//gAA//8AAf//AAD//wAA//8AAP//AAD1/wAAmf8AAEP/AAAm/wAADv8AAAQ%170%FA8tPNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLToUDy0VQ%212%D4BwcC+AcHB/kHBxL5BgYm+QcHb/kGB+n5Bwf++QYG//kFBv/5BgX/+wUF//sFBf/7BAT/+wME//wDA//8AwT//AMD//0DAv/9AgL//QIC//4CAf/+AgH//gAB//4AAP//AAD//wAA//8AAPT/AACF/wAAQP8AACL/AAAN/wAAAw%175%FA8tPRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tK1QPLQP%208%+AcHAfkHBwT4BwcL+QcHF/gHBj/5Bgau+QYG+/oFBv/6BQX/+gUF//sFBf/7BQT/+wQE//sEBP/8AwP//AMD//wCA//9AgL//gEC//4CAf/+AQH//gEA//4BAf//AAD//wAA6/8AAHz/AAA7/wAAH/8AAAv/AAAC%181%FA8tHVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTgUDy0Mw%212%D5BwYB+QcHBvgHBhH5Bwci+QYHbPoGBuX5Bgb++gUG//oFBf/7BAT/+wUE//sEBP/8AwT//AMD//0CAv/9AgL//QIC//4BAf/+AgL//gEB//8AAP/+AADs/wAAcv8AADr/AAAd/wAACv8AAAI%191%BQPLSNUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09VA8tFs%213%+AcHAfgHBwP4BwcK+QYGFfkGBkD5BQWz+gUF/PoFBf/7BAT/+wQE//sEBP/7BAP//AME//wDA//8AgL//QIC//0CAv/9AgL//gEB//8BAPf/AAB5/wAAPP8AABz/AAAI/wAAAQ%202%UDy0f1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLRt%218%D5BwYB+AYGBfkGBhH6BQYk+gUFqfsEBf77BAX/+wUF//sEBP/7BAP//AMD//wDA//9AwL//QMD//0BAv/+AQL//gEB//4BAf/+AAG//wAANP8AABH/AAAD%213%FA8tGhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0iw%218%+AcGAfkGBgn6BgaD+QUF8foFBf/7BQX/+wUE//sEBP/7BAT//AMD//wDBP/9AwP//QMC//4CAv/+AQL//gIB//4BAf//AAD8/wAAjf8AABr/AAAI/wAAAQ%212%BQPLRSUDy09VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tHM%213%+AcHEfkGB5X6BgX7+gYF//oFBf/6BAX/+wUE//sEBP/7AwT//AMD//wDA//8AwL//AMD//0CAv/+AgL//gIB//4BAf/+AQD//wAA9/8AAGH/AAAU/wAABg%218%UDy0OlA8tO9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLRf%202%D5BwcZ+AYHvfkGB/75Bgb/+gYG//oFBf/6BQX/+gQE//sEBP/7BAT//AQE//wDA//9AwP//AMD//0CAv/9AgL//gIB//4BAf/+AAD//wAA//8AAOT/AABE/wAAEf8AAAQ%218%FA8tCJQPLTfUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT2UDy0O%187%9wcIAfkHByz5BgfN+QcH//kGBv/5Bgb/+QYG//oFBf/6BQX/+gUE//sEBP/7BAT//AQE//wEA//9AwP//QID//0CAv/9AgL//QIC//4BAf//AQH//gAB//8AAf//AADB/wAAKP8AAAz/AAAC%218%BQPLQXUDy0yVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy031A8tAw%175%D4BwcB+AcGPPgHB9/4Bwb/+AcH//kHBv/5Bgb/+gYG//kGBf/6BQX/+gUE//oFBP/7BAX/+wQE//wDA/38AwP//AMD//0CA//9AgL//QIB//4CAv/+AQH//wEB//8AAP//AAD+/wAAn/8AAB3/AAAI/wAAAQ%218%UDy0ClA8tLFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tKM%165%+AcGAfgGBwP5BwdU+AcH7fgGB//5Bgf/+AcH//kHB//5Bgb/+QYG//kFBv/6BQX/+wUF//oFBP/7BAT/+wQE5fwDBIr8AwPM/AMD//0DA//9AgL//QIC//0BAv/+AQH//gEA//8BAP//AAD//wAA9f8AAGb/AAAV/wAABQ%223%FA8tAFQPLSXUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLQ7%160%+QcGAvkHB2D5Bgfx+AYH//kGBv/4Bwf/+QYH//kHBv/4Bgb/+QYG//oGBv/6Bgb/+gUF//sEBP/7BATp+wQEbPwDBD78AwM6/AMDuP0DA/79AgL//gIC//0CAf/+AQL//gEB//8AAP//AAD//wAA//8AAOX/AAA8/wAAEP8AAAQ%229%UDy0cVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%10%BQPLQRUDy0MVA8tFJQPLRvUDy0lVA8tMdQPLTwUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTI%149%PgGBgH4BwYE+AYGcvgHB/r4Bwb/+QcG//kHB//5Bwb/+AcG//gHB//4Bwb/+QYG//kGBv/6BgX/+gUF//oEBev7BARy+wQENvsEBBz8AwQU/AMDKP0DA6b8AgL//QIC//4CAv/+AgH//gAB//4AAP//AAD//wAA//8AAP//AAC8/wAAJv8AAAz/AAAB%229%FA8tFNQPLT2UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%48%UDy0LFA8tGFQPLSgUDy05FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0Pw%138%+QcHAfkGBgT4Bgd5+QcG/PkHB//5Bwb/+AYH//gGB//5Bwf/+AcH//kGBv/5Bwf/+QYG//oGBv/5Bgb/+gUF8/oFBX/6BQU6+wQEGvwEBAj7AwQD/AMDDP0DAx39AgKV/QIC+f4CAv/9AQH//gEB//8AAf//AAD//wAA//8AAP//AAD7/wAAe/8AABj/AAAH/wAAAQ%228%BQPLQ7UDy051A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%69%FA8tClQPLSAUDy0z1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0rg%132%D4BgcB+QcGA/gGB3/5Bgf8+QcH//kHB//4Bwf/+QYH//gGBv/5Bgf/+AcG//gHBv/5Bwb/+AYG//kGBv/5Bgb8+gYGlfoFBT37BQQe+wUECfsEBAE%5%/AMDAvwCAwr8AwIb/QICi/4CAvn+AgH//gEB//4BAP/+AAD//wAA//8AAP//AAD//wAA7v8AAEz/AAAS/wAAAw%234%UDy0IlA8tNxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%85%FA8tCdQPLSEUDy05lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/FA8tBU%122%PkHBgH5BQcG+QcHfPgHB/75Bgb/+AYH//kGB//4Bwf/+QcG//gHB//5Bwf/+QcH//gHBv/5Bgf/+AcG//kGB/75Bgax+gUGRPkFBSL6BQQK+wQFAg%15%PwDAwL8AgIJ/QMCGP4CAYD+AQL2/gEB//4BAP//AQH//wAB//8AAP//AAD//wAA//8AAML/AAAp/wAADP8AAAI%234%FA8tBRQPLTCUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%96%UDy0CFA8tFpQPLTQUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tF4%117%+QcGAfkHBwP5Bwd8+QcG+/gHB//4Bwf/+QcH//kGB//5Bwf/+AcH//kHBv/5Bwf/+AcH//kHB//5Bwf/+QcH//kGBtD6BgZR+gYGKPoFBg36BQUC%26%D9AwMB/QIDCP0CAhf9AgJ5/gIB9/4BAf//AQH//wAA//8AAP//AAD//wAA//8AAPv/AAB7/wAAF/8AAAc%239%BQPLQJUDy0rVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%112%UDy0UVA8tNlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tJ8%117%+QcGBPkHBm34Bwf7+QYH//gGB//4Bwf/+AcH//kHB//5Bwf/+AcH//kHB//4Bwb/+AcH//gHB//4Bgf/+AcG5/gGB2D5BgYv+gUFEvoFBgM%37%/QICAf0CAgj+AgEW/gEBgP4BAfn+AQH//wAB//8AAP//AAD//wAA//8AAP//AADt/wAARP8AABH/AAAD%245%FA8tI5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%122%BQPLRoUDy08FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMw%111%D5BwcB+QcHXPgHB/T4Bwb/+QcG//kHB//5Bwf/+AcH//kHBv/5Bwf/+QcG//kHBv/4Bgb/+QcH//kHBv/5Bgf7+AcHhPkGBjj5BgYX+QYGBQ%47%P0DAgH9AgII/QECGP4BAYP+AQD7/wEA//4AAP//AAD//wAA//8AAP//AAD//wAAsv8AACP/AAAK/wAAAQ%244%BQPLRmUDy0+1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%128%UDy0HFA8tMBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tO4%106%PkJBQH5BgdD+AcG7/gHBv/5Bgf/+QcG//gHB//4Bgf/+AcG//kHB//5Bwf/+AcH//gHB//4Bwf/+QcG//gGB/75Bwen+QcHPvkHBh75BgYI+QYGAQ%52%D+AgIB/QEBCf4BARj+AQGX/gEB/v8AAf//AAD//wAA//8AAP//AAD//wAA9/8AAGL/AAAV/wAABg%250%UDy0RFA8tPFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT2%133%FA8tARQPLSVUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%101%+QcGAfkHByv4Bgfg+QcG//kHB//4Bwb/+QYG//kHB//4Bgb/+QcG//gHBv/5Bwf/+AcH//gGBv/5Bwf/+QcG//kHB9D4BwZP+QcGJ/gHBgv5BwcC%64%/QICAf0BAgn+AQEc/gEBo/8AAP//AAD//wAA//8AAP//AAD//wAA//8AANv/AAAx/wAADv8AAAI%250%FA8tCtQPLTgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTd%144%UDy0i1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%95%D6BwcB+AcHFPgGB8j4Bwf/+AcG//gHB//4Bgf/+QcG//kHB//4Bwb/+QcG//kHB//4Bwf/+AYH//gHB//4Bgf/+QcH7vgHBmr5BwYw+AYHEfgHBgM%74%P4CAQH+AQEK/gEBJP8BALz/AAD//wAA//8AAP//AAD//wAA//8AAP3/AACQ/wAAHP8AAAc%255%BQPLQRUDy0wlA8tP9QPLT/UDy0/1A8tP9QPLSb%149%FA8tItQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%90%PkHBwH4BgcJ+AYHp/kHBv/4Bgf/+QYG//gHB//4Bgb/+AcH//kHBv/4Bwf/+QYH//kHB//4Bwf/+QYH//kHB//4Bgf7+QcHjPkGBzn5BwcY+QYGBQ%84%D9AQEC/gEBC/4AASv/AQDT/wAA//8AAP//AAD//wAA//8AAP//AADq/wAAQ/8AABL/AAAD%256%UDy0B1A8tIlQPLT8UDy0+1A8tKFQPLQK%154%BQPLSnUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPs%95%D5Bwdk+QcH+fgGB//4Bwf/+QcH//kHBv/4Bgf/+QcG//kHBv/4Bwf/+QcH//gHB//4Bwf/+AcH//kGB//5BwbA+QcHR/gHByL5BgcJ+AcHAQ%90%/gEBA/8BAAz/AABD/wAA5v8AAP//AAD//wAA//8AAP//AAD//wAAt/8AACP/AAAK/wAAAQ%436%BQPLQLUDy03lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tN0%85%+AcGAfkGBy35Bgbw+QcH//kHB//5Bwf/+QYH//gGB//5Bgf/+AcG//kHB//4Bwb/+AcH//gGB//4Bgf/+QcH//kHBuf5Bwdb+AcGK/gHBg75BwcC%101%P4AAAT/AQEO/wAAZP8AAPn/AAD//wAA//8AAP//AAD//wAA9v8AAGP/AAAW/wAAB%443%UDy0UFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tL%80%D4BwYB+AcHC/gHBrb4Bwf/+QcH//gHB//5Bwf/+QcG//gGB//4Bgf/+QcH//gHB//4Bwf/+AYH//kHB//4Bwb/+AYH9/kHB4H4Bwc2+QcHFfgHBgU%111%D+AQEF/wAAEv8AAIb/AAD7/wAA//8AAP//AAD//wAA//8AAMb/AAAp/wAADf8AAAE%442%FA8tNJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tHk%85%+AcGWfkHBvz5Bwb/+QYG//kHBv/4Bwb/+QYG//gHBv/4Bgf/+AcH//gHB//5Bgf/+QcH//gHB//4Bwf/+AcHu/gHBkT5BwYf+AYHB/gGBwE%111%D/AAAB/wEAB/8AAB3/AAC8/wAA//8AAP//AAD//wAA//8AAP//AABu/wAAFv8AAAU%442%FA8tHZQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tCo%74%PgHBwH5BwcV+AcH4PgHB//4Bgf/+QcH//kGB//5Bwb/+QcH//kHB//5Bwb/+QcH//gHB//5Bwb/+QYH//gHB//5Bwfh+QcHV/gHByn4BwcN+AcHAg%122%/wEAAf8AAAn/AAAu/wAA2/8AAP//AAD//wAA//8AAP//AADW/wAAMP8AAA3/AAAC%437%FA8tDFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy01%80%PgHBwL5BgZ2+AYG/fgGB//5Bwf/+AYH//gHB//4Bwf/+AcG//gHB//4Bwf/+AcG//kHB//4Bwf/+AcH//gHB/j4BwaB+QcHNfkGBxT5BwcD%133%P8AAAP/AAAN/wAAWf8AAPT/AAD//wAA//8AAP//AAD4/wAAcf8AABn/AAAF%442%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0ag%79%PgHBw/4BwbO+QYH//kHBv/5Bwb/+AYH//kHBv/5Bwf/+QcG//gGB//4Bgb/+QYH//gHB//5Bgf/+QYH//gHB7r5BwdD+QcGHvkHBgf5BwcB%138%D/AAAE/wAAEf8AAJP/AAD//wAA//8AAP//AAD//wAAyP8AACn/AAAN/wAAAQ%436%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTmUDy0Cg%79%PkHBkb4Bgf9+QcH//gGBv/5Bwb/+AYH//gHB//4Bwb/+AcG//kHB//4Bwf/+AcG//kHBv/4Bwb/+QcG4/kHB1j4BwYp+AcGDfkGBwE%143%D/AAAB/wAAB/8AAB7/AADO/wAA//8AAP//AAD//wAA/v8AAGT/AAAX/wAABQ%436%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLRs%85%PkHB6H4Bgb/+QYH//kHBv/4Bwf/+QYH//kHBv/4Bwb/+AYH//kHBv/4Bgb/+QYH//gHBv/4Bwf5+QYGifkGBzj5BwYV+QcHB%155%/wAAAf8AAAv/AABW/wAA9v8AAP//AAD//wAA//8AAMH/AAAp/wAACv8AAAE%426%FA8tBdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNRQPLQE%80%+QcHGPgGB+j4Bgb/+AcH//gHB//4Bgf/+AcG//kGBv/5Bwb/+QYH//kGBv/5Bwf/+AcH//gGB//5Bwbw+AcHWPgGByT5BwYJ%165%P8AAAT/AAAP/wAAnv8AAP//AAD//wAA//8AAO7/AABN/wAAFP8AAAM%426%FA8tExQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+lA8tDU%79%D5BgcB+AcHQ/gGBvj4Bwf/+AcH//gHB//5Bwb/+QcH//kHB//5Bwf/+QcH//kHB//4Bwf/+QcH//kHBv/5Bwfs+QcGS/kHBhn5BwcE%170%D/AAAH/wAAJf8AANj/AAD//wAA//8AAP7/AACL/wAAHv8AAAc%426%FA8tKNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0dw%84%D4BwcC+QcHZ/kHB/v5Bwf/+AcH//gGBv/4Bwb/+AcH//kHBv/5Bwf/+AYH//kHB//4Bgf/+QcG//gHB//5Bwfs+AYHR/gGBhb5BgYD%170%D/AAAC/wAADP8AAGf/AAD8/wAA//8AAP//AADR/wAALf8AAA7/AAAC%416%UDy0FlA8tPZQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSq%90%D4BgYC+AcHe/gHB/35Bwf/+QYH//kHBv/4Bgb/+QcH//kHBv/5Bgf/+AcG//kGB//4Bwb/+AcH//gGB//4Bwfs+AcGR/kHBhb5BwcD%176%/wAABP8AABL/AACz/wAA//8AAP//AAD8/wAAVP8AABX/AAAD%416%UDy0kVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMNQPLQJ%90%D5BwcD+AcHgPkGB/35Bwf/+QcH//gHB//4Bgb/+QcG//gGB//5Bwf/+QcH//gGBv/5Bwb/+QYH//kHB//4Bwbs+QcHR/kHBxX4BwcD%176%/wAAAf8AAAj/AAAy/wAA4/8AAP//AAD//wAAjf8AAB//AAAG%410%BQPLQ0UDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy00lA8tAs%95%D5BgcE+AYHePkGBvz5Bwf/+AcH//kGB//5Bwb/+QcH//gHB//4Bgf/+QcH//kGBv/4Bwf/+QYH//gGB//5Bwbm+QYHQPgGBxX4BwYD%181%P8AAAP/AAAO/wAAfP8AAP3/AAD//wAAvP8AACr/AAAL%405%FA8tBBQPLTeUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTDUDy0EQ%100%D4BwcD+AcHXfgGB/r4Bwb/+QcH//kGB//4Bwf/+QcH//kHB//5Bwf/+AYH//gHB//4Bwb/+AcH//kHB//4BwfQ+QYHOPkHBhL5BwYC%186%D/AAAF/wAAF/8AALz/AAD//wAA1v8AADb/AAAP/wAAAQ%394%UDy0ClA8tMJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tLVQPLQK%106%D4BgcC+QYGNfkGB/b4Bwf/+QcH//gHBv/4Bwb/+QcH//gGB//5Bwf/+QcH//gGB//4Bwf/+AYG//kGB//4Bwem+AcGLfgHBw75BgYB%186%D/AAAB/wAACf8AADr/AADp/wAA3v8AADz/AAAS/wAAAg%388%BQPLQKUDy0uVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0hVA8tAI%111%D4BwcC+AYGEPgHB9P5Bgf/+AcG//gHBv/4Bwf/+AcG//gHB//5Bgf/+AcH//gGB//5Bwb/+QcH//kHB/34BwZt+AcHJvkHBgn4BwcB%192%/wAAA/8AAA7/AAB2/wAA0v8AADH/AAAR/wAAAg%383%FA8tBxQPLTKUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOtQPLRL%128%9wgHA/kGB275Bwf/+QYG//kHBv/4Bgf/+AcH//kHB//5Bwf/+QcH//gHB//4Bwb/+AcH//kHB9H5BwdF+QcHG/gHBgU%202%P8AAAb/AAAT/wAAOv8AABz/AAAK/wAAAQ%378%UDy0PlA8tOhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0s1A8tBc%133%+QYHBPkGBxv5BwfO+AYG//gHB//5Bwf/+QcH//kGB//4Bwf/+QcG//kHB//5Bwf/+AcH+fkHB4T5Bwcx+AcHD/kHBwI%202%P8AAAH/AAAG/wAACv8AAAr/AAAE%373%FA8tA9QPLSWUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOJQPLRS%144%+QcGAfgHBgr5BwZS+QYH8/kHBv/5Bwf/+QcH//gHBv/5Bwb/+QYH//gGB//4Bwf/+AcHs/gHB0H4Bwcd+QYHBw%212%D/AAAB/wAAAf8AAAH/AAAB%368%UDy0W1A8tOdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT0UDy0ilA8tAs%154%PkHBgT5BgYO+QYHYvgHB+n5Bgb/+AYH//gHBv/4Bgb/+AYG//kHB/n5Bwa5+AcHSvkHBif5BgcN+QcHAQ%591%FA8tFFQPLTSUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+lA8tJZQPLQb%165%PkHBwH5BwcG+QcGEvkHBkj5Bweq+QcG5fgHB/v4Bwbx+AYHzfgGB4b5BwdE+AcHJ/gGBxD4BgcD%592%UDy0blA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPJQPLSNUDy0Gw%186%+AcHBfkGBxH4Bwce+QcGOPgHBkz5BwdL+AcHPPkHBy/5Bwce+QYHDfgGBwM%597%UDy0mFA8tP9QPLT/UDy0/1A8tP9QPLTeUDy0clA8tA4%202%PkHBwP5BwcJ+QYHEPgGBxb4BgcY+AcGFfgHBg75BwYH+QcHAg%602%UDy0PlA8tOtQPLTtUDy0nlA8tERQPLQB%10133%FA8tEFQPLTPUDy0/1A8tOhQPLR3%128%UDy0Z1A8tOhQPLT/UDy01lA8tEQ%709%UDy0LFA8tPhQPLT/UDy0/1A8tP9QPLT/UDy0ag%116%BQPLRiUDy0/1A8tP9QPLT/UDy0/1A8tPhQPLQ0%704%UDy0kFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy06FA9tAM%106%FI+tQFQPLTgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSY%704%UDy0nVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tFg%106%FA8tExQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSe%704%UDy0c1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tL0%106%FA8tLNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLR3%704%UDy0D1A8tPhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLQo%96%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPxQPLQZ%709%FA8tJpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSU%96%UDy0h1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tKg%714%FA8tDRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT0UDy0D%85%BQPLQHUDy061A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tE%720%BQPLTIUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0a%85%BQPLRbUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy00Q%724%BQPLRjUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy00g%84%BQPLTJUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0aw%724%BQPLQIUDy071A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tDg%74%FA8tDFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTwUDy0Dg%730%UDy0ilA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tKY%74%FA8tJxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSa%736%UDy0JFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPtQPLQV%64%UDy0DVA8tPNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLQt%741%FA8tLlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLR9%64%UDy0blA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMM%746%FA8tExQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTgUj+1AQ%58%UDy02VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tFs%746%FE+tAFQPLTlUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0U%53%BQPLRAUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy06FA8tAc%751%BQPLR6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0tQ%52%BQPLSrUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0h%757%BQPLQTUDy0+1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tBk%42%FA8tApQPLT8UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0Hg%762%UDy0olA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tDI%42%FA8tCpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSv%768%UDy0O1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy07lA8tAk%42%FJAtQFQPLTnUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLQ/%506%BRPrQBUDy0IVE9tAM%111%BQPLQsUDy0kFA8tJ5QPLR/UDy0GQ%111%FA8tJhQPLT/UDy0/1A8tP9QPLT+UDy0Xw%52%BQPLRVUDy0/lA8tP9QPLT/UDy0/1A8tJs%111%BQPLQUUDy0eFA8tJ5QPLSYUDy0N%357%BQPLQBUDy0I1A8tHFQPLTNUDy0/FA8tJ1QPLQD%101%FA8tEFQPLT4UDy0/1A8tP9QPLT/UDy0/FA8tKhQPLRB%106%BQPLRQUDy0mFA8tI9QPLQ2%64%UDy0MFA8tI9QPLSYUDy0Ww%106%UDy0PVA8tKdQPLT4UDy0/1A8tP9QPLT/UDy0+FA8tEQ%335%BQPLQBUDy0I1A8tHFQPLTNUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLSdUT20Aw%95%FA8tM9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy01lA8tGtQPLQR%288%UDy0DlA8tGpQPLTRUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNY%319%BQPLQBUDy0I1A8tHFQPLTNUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0nVE9tAM%90%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT1UDy0mlA8tC8%266%FA8tCxQPLSTUDy071A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%303%BQPLQBUDy0I1A8tHFQPLTNUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tJ1RPbQD%85%FA8tOVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTDUDy0XFA8tAc%234%FA8tAdQPLRUUDy0wFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOg%287%BQPLQBUDy0I1A8tHFQPLTNUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSdUDy0Aw%79%FA8tGFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOxQPLSIUDy0Hg%212%BQPLQYUDy0glA8tOhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tGc%271%BQPLQBUDy0I1A8tHFQPLTNUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0nVE9tAM%79%BQPLRZUDy02VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tK9QPLRH%192%UDy0PVA8tK9QPLT7UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTgUDy0Yg%260%BQPLQBUDy0I1A8tHFQPLTNUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tJ1RPbQD%80%Uj61AVA8tEVQPLSzUDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0qw%74%UDy0EFA8tEBQPLRkUDy0ZFA8tEJQPLQT%74%BQPLSbUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0tVA8tE9SP7UB%250%BQPLQBUDy0I1A8tHFQPLTNUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSdUT20Aw%90%UDy0HFA8tIZQPLTrUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tGI%58%FA8tEpQPLS6UDy0/VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0xFA8tFY%58%FA8tFtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy07FA8tI5QPLQk%250%BQPLQBUDy0I1A8tHFQPLTNUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0nVA8tAM%95%BQPLQHUDy0W1A8tMRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tKE%47%BQPLQYUDy0t1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTAUDy0Hw%47%FA8tJhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMlQPLReUDy0CQ%244%BQPLQBUDy0I1A8tHFQPLTNUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tJ1RPbQD%106%BQPLQwUDy0mlA8tPRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tJ0%42%FA8tCFQPLTgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy07VA8tD%43%FA8tI9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPRQPLSdUDy0Mg%244%BQPLQBUDy0I1A8tHFQPLTNUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSdUT20Aw%111%FA8tA1QPLRuUDy02FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tDY%37%UDy0EVA8tOBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOdQPLQf%37%FA8tDBQPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTaUDy0cFA8tBQ%245%UDy0HVA8tGxQPLTHUDy091A8tPpQPLT6UDy0+lA8tPpQPLT6UDy0+lA8tPpQPLT6UDy0+lA8tPpQPLT6UDy0+lA8tPpQPLT8UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0+lA8tPpQPLT6UDy0+lA8tPpQPLT6UDy0+lA8tPpQPLT6UDy0+lA8tPpQPLT6UDy0+lA8tPpQPLT6UDy0mFI+tQE%122%FA8tD9QPLSrUDy0/FA8tP9QPLTuUDy0Xw%42%UDy0r1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS/%42%BQPLRVUDy051A8tP9QPLT9UDy0rVA8tEc%261%UT20A1A8tAVQPLQFUDy0BVA8tAVQPLQFUDy0BVA8tAVQPLQFUDy0BVA8tAVQPLQFUDy0BVA8tAVQPLQFUDy0BVA8tDhQPLTgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPxQPLRiUDy0BVA8tAVQPLQFUDy0BVA8tAVQPLQFUDy0BVA8tAVQPLQFUDy0BVA8tAVQPLQFUDy0BVA8tAVQPLQFUDy0BQ%138%UDy0ClA8tC1RPrUB%42%BQPLRAUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0V%43%UkC1AVA8tCpQPLQO%352%UDy0UlA8tOxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tI8%287%BQPLStUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0x%400%FA8tANQPLRwUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0rVE9tAM%282%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tBM%389%UDy0BFA8tJ1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTNUDy0Ew%287%FA8tDVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tEo%383%BQPLQTUDy0y1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOxQPLQj%293%FA8tF9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tGU%378%FA8tDJQPLTcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+1A8tDQ%298%FA8tGRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tGY%373%UDy0UlA8tOxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT8UDy0Yg%303%FA8tFRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tGU%362%FA8tANQPLRwUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLR/%309%FA8tClQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tDo%357%UDy0BFA8tJ1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tJ5RPbQD%309%FJAtQFQPLTpUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09FA8tAo%351%BQPLQUUDy0y1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0zVA8tBE%261%UDy0E1A8tDJQPLQJ%42%BQPLSPUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0og%42%UDy0CFA8tDJQPLQZ%293%FA8tDJQPLTrUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTrUDy0F%251%Uj+1AVA8tEdQPLS0UDy0/VA8tP9QPLTyUDy0Yw%36%BQPLQfUDy09lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT9UDy0Kw%36%BQPLRfUDy07lA8tP9QPLT/UDy0tFA8tFBSP7UB%272%UDy0YVA8tO5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tO5QPLQy%245%FA8tBRQPLR0UDy031A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tD0%37%UDy0fVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSO%37%FA8tDBQPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTgUDy0d1A8tBU%250%FA8tANQPLR/UDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/FA8tGE%239%BQPLQ3UDy0oFA8tPRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tJ0%37%UT60AVA8tLdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMFQPLQJ%37%FA8tI9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPtQPLSkUDy0O%235%UDy0EVA8tJ5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0fw%228%BQPLQMUDy0Y1A8tMpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tKE%42%FA8tAlQPLSyUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vlA8tAs%42%FA8tJhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNJQPLRmUDy0D%213%BQPLQ0UDy0zVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSdUDy0Aw%218%UDy0JFA8tI5QPLTtUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tFs%53%UDy0dlA8tPFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPJQPLR7UT20Aw%47%FA8tFBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09FA8tJNQPLQo%85%FA8tAVQPLQFUDy0BVA8tAVQPLQFUDy0BVA8tAVQPLQFUDy0BVA8tAVQPLQFUDy0BVA8tAVQPLQFUDy0BVA8tAVQPLQFUDy0BVA8tAVQPLQFUDy0BVA8tGJQPLT7UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tM9QPLQJUDy0BVA8tAVQPLQFUDy0BVA8tAVQPLQFUDy0BVA8tAVQPLQFUDy0BVA8tAVQPLQFUDy0BVA8tAVQPLQFUDy0BVA8tAVQPLQFUDy0BVA8tAVRPrUB%96%UD20A1A8tE9QPLS7UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0mw%63%FA8tA9QPLRyUDy0vlA8tPlQPLT/UDy0/1A8tPxQPLTFUDy0fVA8tBQ%63%BQPLSYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vVA8tFhQPbQD%64%UT60AVA8tJhQPLT6UDy0+lA8tPpQPLT6UDy0+lA8tPpQPLT6UDy0+lA8tPpQPLT6UDy0+lA8tPpQPLT6UDy0+lA8tPpQPLT6UDy0+lA8tPpQPLT6UDy0+lA8tP5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPxQPLT6UDy0+lA8tPpQPLT6UDy0+lA8tPpQPLT6UDy0+lA8tPpQPLT6UDy0+lA8tPpQPLT6UDy0+lA8tPpQPLT6UDy0+lA8tPpQPLT0UDy0q1A8tFpQPLQP%90%BQPLRiUDy05lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+1A8tKpQPLQ9%90%BRPbQBUDy0Bg%90%UDy0O1A8tKdQPLT7UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLToUDy0ag%63%FE9tANQPLSdUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDy0sVA8tGBQPLQU%101%FA8tGFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOVQPLSCUDy0G%213%BQPLQTUDy0elA8tOVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tHs%63%BRPbQDUDy0nVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDy0sVA8tGBQPLQU%117%FA8tOVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS+UDy0VFE+tQE%234%FE+tAFQPLRMUDy0uVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOo%69%UT20A1A8tJ1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDy0sVA8tGBQPLQU%133%FA8tP5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTvUDy0klA8tCw%266%FA8tCRQPLSMUDy071A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%74%FE9tANQPLSdUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDy0sVA8tGBQPLQU%149%FA8tMhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy00FA8tGRQPLQM%288%UDy0CFA8tGNQPLTJUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNY%79%BRPbQDUDy0nVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDy0sVA8tGBQPLQU%165%FA8tDlQPLT1UDy0/1A8tP9QPLT/UDy0+FA8tKJQPLQ5%106%BQPLRbUDy0oVA8tJ1QPLQ9%64%UDy0NlA8tJNQPLShUDy0Yg%106%UDy0NVA8tKBQPLT4UDy0/1A8tP9QPLT/UDy0+FA8tEQ%85%UT20A1A8tJ1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDy0sVA8tGBQPLQU%186%BQPLQkUDy0jlA8tJ5QPLR4UDy0FQ%111%FA8tJtQPLT/UDy0/1A8tP9QPLT/UDy0Yw%52%BQPLRVUDy0/lA8tP9QPLT/UDy0/1A8tKs%111%BQPLQPUDy0c1A8tJ1QPLSQUDy0L%96%FE9tANQPLSdUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDy0sVA8tGBQPLQU%336%UDy0PFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy08lA8tAk%42%FJAtQFQPLTnUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLRH%234%BRPbQDUDy0nVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDy0sVA8tGBQPLQU%352%UDy0p1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tDI%42%FA8tCpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS3%240%UT20A1A8tJ1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDy0sVA8tGBQPLQU%362%BQPLQWUDy0+1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tBk%42%FA8tApQPLT8UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0Hg%239%FE9tANQPLSdUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDy0sVA8tGBQPLQU%378%BQPLR5UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0t%53%BQPLSoUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0ig%244%BRPbQDUDy0nVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDy0sVA8tGBQPLQU%389%FE+tAFQPLTlUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0T%53%BQPLQ/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy07FA8tAc%245%UT20A1A8tJ1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDy0sVA8tGBQPLQU%405%FA8tFBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTfUj+1AQ%58%UDy02FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tFw%250%FE9tANQPLSdUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDy0sVA8tGBQPLQU%421%FA8tLxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLR0%64%UDy0bFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMM%255%BRPbQDUDy0nVA8tP9QPLT/UDy0/1A8tP9QPLT6UDy0sVA8tGBQPLQU%432%UDy0JlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPpQPLQV%64%UDy0DVA8tPRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLQv%256%UT20A1A8tJ1QPLT6UDy0sVA8tGBQPLQU%448%UDy0jFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tKQ%74%FA8tJRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSb%261%FE9tANQPLQT%458%BQPLQIUDy071A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tDg%74%FA8tC9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT1UDy0EQ%724%BQPLRjUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy00Q%84%BQPLTEUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0bQ%724%BQPLTQUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0Zg%84%BQPLRbUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy01g%719%FA8tDVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTtUDy0D%85%BQPLQHUDy061A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tEE%714%FA8tKFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLST%96%UDy0hlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tK0%709%UDy0EFA8tPhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLQo%96%UDy0HFA8tP5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPxQPLQZ%704%UDy0c1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tLw%106%FA8tLJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSB%704%UDy0nVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tFQ%106%FA8tEVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSe%704%UDy0jlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy05lA9tAM%106%FI+tQFQPLTZUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSY%704%UDy0JFA8tPVQPLT/UDy0/1A8tP9QPLT/UDy0Yw%116%BQPLRZUDy0/1A8tP9QPLT/UDy0/1A8tPhQPLQ0%709%FA8tDlQPLTIUDy0/lA8tOhQPLRn%128%UDy0YVA8tOVQPLT/UDy0z1A8tEE%7914%FA8tAJQPLQNUDy0RVA8tG9QPLSFUDy0vFA8tMFQPLTgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy04FA8tMFQPLS3UDy0g1A8tG1QPLRFUDy0DVA8tAI%762%FA8tBlQPLRaUDy0nFA8tNdQPLT9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/VA8tNZQPLSdUDy0W1A8tBk%730%FA8tBpQPLRtUDy0vFA8tP1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP1QPLS8UDy0bVA8tBo%485%UDy0P1A8tJZQPLTWUDy0+VA8tPlQPLTWUDy0llA8tD8%170%FA8tAJQPLREUDy0rFA8tPdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPhQPLSrUDy0Q1A8tAI%458%FA8tBpQPLSTUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSTUDy0Gg%148%BQPLQCUDy0SlA8tMdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMdQPLRKUDy0Ag%442%UDy0GlA8tKdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0p1A8tBo%138%FA8tD9QPLTJUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy03VA8tLFQPLSUUDy0XVA8tFlQPLQjUDy0HFA8tBxQPLQcUDy0HFA8tBxQPLQcUDy0JFA8tFhQPLRdUDy0lFA8tLBQPLTeUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0yVA8tD4%437%UDy0k1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tJM%127%BQPLQWUDy0plA8tPtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTeUDy0nFA8tFVQPLQXUDy0Ag%84%BQPLQCUDy0FlA8tFRQPLScUDy031A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPtQPLSlUDy0Fw%420%BQPLQ/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLQ/%117%FA8tExQPLTmUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLToUDy0j1A8tDFQPLQE%128%UDy0BFA8tDFQPLSPUDy06FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy05lA8tEw%415%BQPLSWUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSW%106%BQPLQEUDy0j1A8tPxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0z1A8tFpQPLQJ%160%UDy0CVA8tFlQPLTPUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPxQPLSPUDy0Aw%404%BQPLTWUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTW%101%FA8tA1QPLTBUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tM9QPLRRUDy0Ag%180%BQPLQCUDy0UVA8tM9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0wVA8tA0%399%BQPLT5UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT5%96%UDy0EFA8tMNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTwUDy0a1A8tAQ%202%FA8tAVQPLRsUDy071A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMNQPLQQ%394%BQPLT5UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT5%90%BQPLQOUDy0yVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tLlQPLQf%224%UDy0HVA8tLlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTHUDy0Dg%388%BQPLTWUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTW%85%FA8tA9QPLTFUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT4UDy0ew%244%BQPLR7UDy0+FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0xVA8tA8%383%BQPLSWUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSW%80%UDy0AlA8tKxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPhQPLRN%256%UDy0TVA8tPhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tKtQPLQC%378%BQPLQ/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLQ/%80%UDy0cVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy091A8tEs%266%FA8tEtQPLT3UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLRx%384%UDy0k1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tJM%79%BQPLQsUDy0+FA8tP9QPLT/UDy0/1A8tP9QPLT3UDy0Sg%276%BQPLRKUDy091A8tP9QPLT/UDy0/1A8tP9QPLT3UDy0LQ%378%UDy0GlA8tKdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0p1A8tBo%74%FA8tANQPLTCUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLRc%288%UDy0XFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0wlA8tAM%378%FA8tBpQPLSTUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSTUDy0Gg%79%FA8tE9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tJpQPLUB%288%UDy1AVA8tJpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tE8%389%UDy0P1A8tJZQPLTWUDy0+VA8tPlQPLTWUDy0llA8tD8%85%UDy0A1A8tNFQPLT/UDy0/1A8tP9QPLT/UDy03VA8tA0%298%FA8tA1QPLTdUDy0/1A8tP9QPLT/UDy0/1A8tNFQPLQD%277%FE9tAJQPLSlUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%149%UDy0SlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0W%309%BQPLRYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLRK%282%BQPLQFUDy0plA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%149%UDy0qVA8tP9QPLT/UDy0/1A8tP9QPLTSUDy0BQ%308%BQPLQFUDy00lA8tP9QPLT/UDy0/1A8tP9QPLSp%288%UDy0BVA8tKZQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%143%BQPLQLUDy081A8tP9QPLT/UDy0/1A8tP9QPLRe%320%UDy0XlA8tP9QPLT/UDy0/1A8tP9QPLT0UDy0Cw%287%FA8tAVQPLSmUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%143%BQPLRNUDy0/1A8tP9QPLT/UDy0/1A8tO9QPLQM%320%UDy0DFA8tO9QPLT/UDy0/1A8tP9QPLT/UDy0Tg%292%BQPLQFUDy0plA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%143%BQPLSHUDy0/1A8tP9QPLT/UDy0/1A8tLM%330%FA8tLFQPLT/UDy0/1A8tP9QPLT/UDy0hw%298%UDy0BVA8tLpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%143%BQPLS+UDy0/1A8tP9QPLT/UDy0/1A8tH%331%FA8tG9QPLT/UDy0/1A8tP9QPLT/UDy0vg%298%UDy0fFA8tP5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%143%BQPLTVUDy0/1A8tP9QPLT/UDy0/1A8tEQ%330%FA8tEVQPLT/UDy0/1A8tP9QPLT/UDy01w%292%BQPLQIUDy0+FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%143%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tCQ%330%FA8tCRQPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLQOUDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%143%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tCQ%330%FA8tCRQPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLQEUDy06FA8tP9QPLT/UDy0/1A8tP5QPLS6UDy0/1A8tP9QPLT/UDy0/1A8tP8%143%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tCQ%330%FA8tCRQPLT/UDy0/1A8tP9QPLT/UDy0/w%271%FNAtQJQPLRlUDy01VA8tNVQPLRlUDy0N1A8tOhQPLT+UDy0+FA8tHxQPLQFUDy0plA8tP9QPLT/UDy0/1A8tP8%143%BQPLT9UDy0/1A8tP9QPLT/UDy0/1A8tCU%330%FA8tCRQPLT/UDy0/1A8tP9QPLT/UDy0/g%271%FA8tGVQPLT+UDy0/1A8tP9QPLT+UDy0ZVA8tARQPLQOUDy0C%11%UDy0BVA8tKZQPLT/UDy0/1A8tP8%143%BQPLTGUDy0/1A8tP9QPLT/UDy0/1A8tFs%330%FA8tFRQPLT/UDy0/1A8tP9QPLT/UDy0y%272%FA8tNVQPLT/UDy0/1A8tP9QPLT/UDy01Q%31%FA8tAVQPLSmUDy0/1A8tP8%143%BQPLSsUDy0/1A8tP9QPLT/UDy0/1A8tI0%213%UDy0BQ%111%FA8tIBQPLT/UDy0/1A8tP9QPLT/UDy0sw%271%FA8tNVQPLT/UDy0/1A8tP9QPLT/UDy01Q%36%BQPLQFUDy0plA8tP8%143%BQPLRvUDy0/1A8tP9QPLT/UDy0/1A8tNxQPLQC%208%UDy0n1A8tFNQPLQB%101%FA8tMNQPLT/UDy0/1A8tP9QPLT/UDy0f%256%FA9tAhQPLQOUT20BFA8tGVQPLT+UDy0/1A8tP9QPLT+UDy0ZQ%42%UD20BVA8tKU%143%BQPLQtUDy0/lA8tP9QPLT/UDy0/1A8tP9QPLQ9%208%UDy0sFA8tP9QPLSTUDy0Cg%90%UDy0HFA8tPdQPLT/UDy0/1A8tP9QPLT/UDy0P%251%UDy0fFA8tPhQPLT+UDy06FA8tDdQPLRlUDy01VA8tNVQPLRlUDy0Ag%47%FE9tAI%143%BQPLQDUDy01lA8tP9QPLT/UDy0/1A8tP9QPLSx%208%UDy0sFA8tP9QPLT/UDy0y1A8tCM%85%UDy0d1A8tP9QPLT/UDy0/1A8tP9QPLTmUDy0B%245%BQPLQ1UDy0/lA8tP9QPLT/UDy0/1A8tOhRPbQE%224%UDy0b1A8tP9QPLT/UDy0/1A8tP9QPLT9UDy0T%203%UDy0sFA8tP9QPLT/UDy0/1A8tPNQPLRY%74%BQPLQLUDy06FA8tP9QPLT/UDy0/1A8tP9QPLSb%250%BQPLSGUDy0/1A8tP9QPLT/UDy0/1A8tP5QPLQO%224%UDy0CVA8tOZQPLT/UDy0/1A8tP9QPLT/UDy02FA8tAw%197%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0mFA8tAo%63%BQPLR1UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLQv%250%BQPLRaUDy0/1A8tP9QPLT/UDy0/1A8tPhQPLQI%229%FA8tG9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tKdQPLQD%192%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNBQPLQk%53%FA8tCBQPLTzUDy0/1A8tP9QPLT/UDy0/1A8tLI%239%BQPLQ1UDy0hlA8tFpQPLQIUDy0zFA8tP9QPLT/UDy0/lA8tHw%234%FA8tAVQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLRz%192%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT2UDy0XFA8tQE%37%UDy0BlA8tL5QPLT/UDy0/1A8tP9QPLT/UDy0/VA8tD%235%FA8tHxQPLT+UDy0/1A8tP9QPLTMUDy0CFA8tFpQPLSGUDy0NQ%244%BQPLQyUDy081A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0d%187%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tJxQPLQJ%32%UDy0ilA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0n%235%UDy0CFA8tPhQPLT/UDy0/1A8tP9QPLT/UDy0Wg%266%UDy0a1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tHU%181%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTUUDy0Jw%20%BQPLQqUDy09lA8tP9QPLT/UDy0/1A8tP9QPLTlUDy0FQ%234%UDy0DlA8tP5QPLT/UDy0/1A8tP9QPLT/UDy0hg%266%UDy0BFA8tKBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLR3%176%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy091A8tGFQPLQB%16%UDy0LlA8tNRQPLT/UDy0/1A8tPxQPLRJ%240%UDy0BFA8tOhQPLT/UDy0/1A8tP9QPLT+UDy0NQ%271%FA8tANQPLSuUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0kFA8tAc%165%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLShUDy0EQ%15%FA8tBBQPLShUDy0/1A8tHw%170%FE9tAI%47%BTQLUCUDy0ZVA8tNVQPLTVUDy0ZVA8tDdQPLToUDy0/lA8tPhQPLR8%282%BQPLQRUDy0zFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tLJQPLQV%160%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy04FA8tDs%15%BQPLQDUDy0PFA8tAM%170%FA8tKVQPLQF%42%BQPLRlUDy0/lA8tP9QPLT/UDy0/lA8tGVQPLQEUDy0DlA8tAg%293%UDy0ElA8tLtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTbUDy0Lw%4%BQPLQRUDy0M1A8tGpQPLRzUDy0qVA8tKpQPLSqUDy0qlA8tJBQPLRsUDy0UlA8tCk%85%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPdQPLR1%197%FA8tP9QPLSmUDy0BQ%36%BQPLTVUDy0/1A8tP9QPLT/UDy0/1A8tNU%314%FA8tARQPLSbUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09FA8tMlQPLT1UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLTnUDy0oVA8tFJQPLQF%64%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0tVA8tAk%186%FA8tP9QPLT/UDy0plA8tAU%31%BQPLTVUDy0/1A8tP9QPLT/UDy0/1A8tNU%319%BQPLQCUDy0ilA8tPxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTkUDy0eFA8tAY%53%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tL9QPLQi%181%FA8tP9QPLT/UDy0/1A8tKZQPLQF%10%BQPLQIUDy0DlA8tARQPLRlUDy0/lA8tP9QPLT/UDy0/lA8tGU%330%FA8tGZQPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNlQPLQ2%48%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTgUDy0Qg%175%FA8tP9QPLT/UDy0/1A8tP9QPLSmUDy0BVA8tHxQPLT4UDy0/lA8tOhQPLQ3UDy0ZVA8tNVQPLTVUDy0ZVA8tAI%325%UDy0E1A8tMxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT2UDy0ZQ%42%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT8UDy0ig%175%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0ulA8tP5QPLT/UDy0/1A8tP9QPLToUDy0B%341%BQPLQDUDy0t1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy08VA8tHlQPLRyUDy0clA8tHtQPLSwUDy01FA8tPhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+1A8tDo%37%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tMZQPLQs%181%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0Dg%340%BQPLRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMpQPLQc%21%FA8tBhQPLRTUDy0vFA8tP1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNxQPLRVUDy0alA8tJNQPLSZUDy0T%11%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTcUDy0Ug%191%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT4UDy0C%341%BQPLTLUDy0/1A8tP9QPLT/UDy0/1A8tPlQPLSIUDy0SVA8tOlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTpUDy0Qw%31%FA8tDxQPLTUUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0Xw%10%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy08FA8tIJQPLQI%197%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLR8%341%FA8tAZQPLTxUDy0/1A8tP9QPLT/UDy0/lA8tFw%10%FA8tBdQPLTAUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09lA8tHI%31%BQPLQTUDy021A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0Xw%10%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0YQ%207%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tLpQPLQF%341%FA8tBJQPLT2UDy0/1A8tP9QPLT/UDy0+lA8tB8%15%BQPLQCUDy0g1A8tPxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLSKUDy0Bw%26%UDy0qVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0Xw%10%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy04FA8tAw%202%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSmUDy0BQ%340%BQPLToUDy0/1A8tP9QPLT/UDy0/1A8tMBQPLQh%21%FA8tExQPLTrUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0slA8tAc%15%BQPLRzUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0Xw%10%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tIM%202%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0plA8tAU%335%BQPLSUUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTzUDy0hFA8tBc%15%BQPLQmUDy0y1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tLNQPLQJUDy0SVA8tMdQPLT+UDy0/1A8tP9QPLT/UDy0/1A8tPxQPLTGUDy0lVA8tIlQPLR9UDy0H%11%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPlQPLQ1%197%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tKZQPLQF%330%BQPLQcUDy06lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPpQPLS8UDy0fFA8tEJQPLQoUDy0FlA8tKxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT3UDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tIc%37%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tO5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTCUDy0AQ%191%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSmUD20BQ%330%UDy0V1A8tPtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT9UDy0+lA8tPtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0xlA8tAY%37%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLTUUDy0VVA8tDdQPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0d%192%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0pVE9tAI%330%FA8tFJQPLTpUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSkUDy0Dw%42%UDy0sFA8tP9QPLT/UDy091A8tHRQPLQM%10%BQPLSWUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy091A8tBs%122%FA8tD9QPLSWUDy01lA8tPlQPLT5UDy01lA8tJZQPLQ/%442%BQPLQaUDy0sFA8tPtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy05VA8tFxQPLQC%48%UDy0sFA8tPtQPLSfUDy0Gg%20%BQPLQeUDy08VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tLVQPLQD%106%BQPLQaUDy0k1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0k1A8tBo%442%FA8tDNQPLSWUDy071A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0Uw%58%UDy0glA8tDY%37%UDy0dFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLRi%101%FA8tBpQPLSnUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tKdQPLQa%448%UDy0C1A8tD9QPLR9UDy0rVA8tOBQPLTnUDy0/1A8tP9QPLT/UDy0/1A8tPVQPLTgUDy03FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy04lA8tB%102%UDy0A1A8tNBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTmUDy0F%96%FA8tJNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLST%474%BQPLQFUDy0HFA8tBxQPLQcUDy0HFA8tBI%5%UDy0AVA8tJJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tKJQPLQB%101%FA8tE1QPLT8UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0p%91%UDy0P1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0Pw%511%FA8tAlQPLTIUDy0/1A8tP9QPLT/UDy0/1A8tP5QPLQ7%106%BQPLSzUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/VA8tEE%85%UDy0llA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0lg%516%BQPLQoUDy09FA8tP9QPLT/UDy0/1A8tP9QPLS/UDy0AQ%100%BQPLQrUDy091A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNhQPLQL%80%UDy01lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy01g%522%UDy0dlA8tP9QPLT/UDy0/1A8tP9QPLT+UDy0Pw%106%UDy0klA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSR%80%UDy0+VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+Q%522%UDy0CVA8tN1QPLT/UDy0/1A8tP9QPLT/UDy0sg%106%UDy0DlA8tOVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTyUDy0HQ%74%UDy0+VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+Q%527%FA8tGVQPLT/UDy0/1A8tP9QPLT/UDy0+1A8tB8%106%FA8tG9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMZQPLQ5%80%UDy01lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy01g%527%FA8tAxQPLTuUDy0/1A8tP9QPLT/UDy0/1A8tG0%106%FA8tAFQPLTQUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTwUDy0ZFA8tAY%85%UDy0llA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0lg%532%BQPLSXUDy0/1A8tP9QPLT/UDy0/1A8tLQ%111%BQPLQ0UDy0/VA8tP9QPLT/UDy0+VA8tIxQPLQS%96%UDy0P1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0Pw%532%BQPLRIUDy0/1A8tP9QPLT/UDy0/1A8tPFQPLQB%106%BQPLUBUDy0qVA8tP5QPLS+UDy0Jw%111%FA8tJNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLST%538%BQPLQRUDy09lA8tP9QPLT/UDy0/1A8tP5QPLQu%112%UDy0GVA8tFo%122%FA8tBpQPLSnUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tKdQPLQa%544%UDy02FA8tP9QPLT/UDy0/1A8tP9QPLRM%250%BQPLQaUDy0k1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0k1A8tBo%549%UDy0sVA8tP9QPLT/UDy0/1A8tP9QPLRz%261%FA8tD9QPLSWUDy01lA8tPlQPLT5UDy01lA8tJZQPLQ/%560%UDy0qlA8tP9QPLT/UDy0/1A8tP9QPLRz%864%UDy0eVA8tP9QPLT/UDy0/1A8tP9QPLRz%14133%FA8tAZQPLRgUDy0r1A8tLdQPLR8UDy0Fw%308%BQPLQGUDy0MVA8tDhQPLQO%528%UDy0BlA8tK1QPLT+UDy0/1A8tP9QPLT/UDy07VA8tH9QPLQT%288%UDy0AVA8tExQPLTZUDy0/lA8tP5QPLTtUDy0a1A8tAE%517%UDy0YFA8tP5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTsUDy0f1A8tBM%266%FA8tAFQPLRBUDy0vlA8tP5QPLT/UDy0/1A8tP9QPLT/UDy0/VA8tFo%517%UDy0r1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOtQPLRgUDy0B%245%BQPLQDUDy0TlA8tL5QPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tM9QPLQC%512%UDy0t1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy021A8tGBQPLQE%224%UDy0AVA8tEFQPLS+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPZQPLQF%512%UDy0fFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTbUDy0YFA8tAM%202%FA8tAFQPLRBUDy0vlA8tP5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOBQPLQD%512%UDy0ElA8tNdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tL5QPLRBUDy0AQ%186%UDy0MlA8tL5QPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tH4%522%FA8tBtQPLSkUDy0+1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0vlA8tEFQPLQB%165%FA8tCRQPLSfUDy0+1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT9UDy0qFA8tAk%533%UDy0JFA8tJ9QPLT7UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLS+UDy0Mg%148%BQPLQkUDy0n1A8tPtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tK1QPLQ+UDy0Ag%548%BQPLQkUDy0rVA8tP5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+1A8tJ9QPLQk%128%UDy0JFA8tJ9QPLT7UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLS+UDy0QVA8tAE%565%UDy0AVA8tEFQPLS+UDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT7UDy0n1A8tCQ%106%FA8tCRQPLSfUDy0+1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0vlA8tEFQPLQB%586%BQPLQBUDy0QVA8tL5QPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPtQPLSRUDy0F%85%BQPLQkUDy0n1A8tPtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tM1QPLRBUDy0AQ%607%FA8tAFQPLRCUDy021A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+lA8tIFQPLQT%64%UDy0JFA8tJ9QPLT7UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTbUDy0YFA8tAQ%629%UDy0BFA8tGBQPLTbUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTsUDy0f1A8tBM%42%FA8tCRQPLSfUDy0+1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy021A8tGBQPLQE%650%BQPLQEUDy0YFA8tNtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOtQPLRgUDy0B%21%BQPLQTUDy0kVA8tPtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNxQPLRgUDy0B%672%FA8tARQPLR+UDy07FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy021A8tGBQPLQEUDy0E1A8tH9QPLTsUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTsUDy0f1A8tBE%693%UDy0E1A8tH9QPLTsUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTdUDy07FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy07FA8tH9QPLQT%714%BQPLQTUDy0f1A8tOxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOxQPLR/UDy0Ew%735%FA8tBRQPLSfUDy0+1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT7UDy0n1A8tBQ%757%UDy0JFA8tJ9QPLT7UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+1A8tJ9QPLQk%730%D/AAAD/wAAKP8AAE3/AABg/wAAYf8AAE3/AAAm/wAAAw%4%BQPLQnUDy0olA8tPxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPtQPLSfUDy0J%16%FA8tARQPLR6UDy0fVA8tH1QPLR9UDy0Jg%682%/wAAC/8AAHH/AADZ/wAA/f8AAP//AAD//wAA//8AAP//AAD9/wAA2/8AAHX/AAAN/wAAAlA8tEFQPLS+UDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0vlA8tDI%26%FA8tAhQPLT6UDy0/1A8tP9QPLT/UDy0Tw%676%D/AAAs/wAA1f8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AADe/wAAPQ%4%BQPLQBUDy0QVA8tL5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tL5QPLRBUDy0AQ%31%FA8tAhQPLT6UDy0/1A8tP9QPLT/UDy0Tw%671%P8AACH/AADm/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA9P8AAEM%10%FA8tAdQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0wVA8tAE%42%FA8tAhQPLT6UDy0/1A8tP9QPLT/UDy0Tw%666%/wAAAf8AALP/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD8/wAA+/8AAP7/AAD//wAA//8AAP//AAD//wAA//8AAOj/AAAZ%5%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%47%FA8tAhQPLT6UDy0/1A8tP9QPLT/UDy0Tw%666%/wAAMP8AAPz/AAD//wAA//8AAP//AAD//wAA7P8AAGj/AAAa/wAAEv8AAEn/AADP/wAA//8AAP//AAD//wAA//8AAP//AACR%5%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%15%FA8tGhQPLRYUDy0E%16%FA8tAhQPLT6UDy0/1A8tP9QPLT/UDy0Tw%15%FA8tAZQPLQ/UDy0hlA8tAU%629%/wAAiP8AAP//AAD//wAA//8AAP//AAD0/wAANQ%20%D/AAAR/wAA0v8AAP//AAD//wAA//8AAP//AADr/wAACFA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%10%UDy0B1A8tOdQPLT/UDy08lA8tK5QPLRaUDy0ElA8tAhQPLT6UDy0/1A8tP9QPLT/UDy0T1A8tAdQPLRCUDy0lVA8tONQPLT+UDy0/lA8tDs%623%D/AAAB/wAAx/8AAP//AAD//wAA//8AAP//AACI%32%/wAATP8AAP7/AAD//wAA//8AAP//AAD+/wAAMlA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%10%UDy0QVA8tP5QPLT/UDy0/1A8tP9QPLT/UDy081A8tLRQPLT9UDy0/1A8tP9QPLT/UDy0wVA8tOVQPLT+UDy0/1A8tP9QPLT/UDy0/1A8tIo%623%D/AAAF/wAA7/8AAP//AAD//wAA//8AAP3/AAAw%32%/wAAC/8AAPf/AAD//wAA//8AAP//AAD//wAAUFA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%10%UDy0kVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNdQPLQD%618%D/AAAS/wAA+/8AAP//AAD//wAA//8AAPr/AAAM%32%/wAABP8AAPD/AAD//wAA//8AAP//AAD//wAAVVA8tAhQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%4%BQPLQBUDy0e1A8tOFQPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09lA8tLdQPLQP%618%D/AAAM/wAAdP8AAHb/AAB2/wAAdv8AAHP/AAAC%32%/wAAIv8AAPz/AAD//wAA//8AAP//AAD//wAAQFA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%15%FA8tAVQPLQ9UDy0kFA8tN9QPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy08lA8tLBQPLReUDy0FVA8tAE%687%D/AAAB/wAAlP8AAP//AAD//wAA//8AAP//AAD5/wAAGFA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%31%FA8tARQPLQ6UDy0uFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOJQPLRVUDy0Dw%708%D/AABh/wAA/P8AAP//AAD//wAA//8AAP//AAC2/wAAAVA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%36%BQPLQVUDy04VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPtQPLRH%704%/wAAAv8AAHj/AAD7/wAA//8AAP//AAD//wAA//8AAPT/AAAx%5%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%31%FA8tAJQPLSrUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTiUDy0Fw%692%D/AAAG/wAAmv8AAP7/AAD//wAA//8AAP//AAD//wAA9v8AAFE%10%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%31%FA8tGVQPLT+UDy0/1A8tP9QPLT/UDy03FA8tKpQPLT/UDy0/1A8tP9QPLT/UDy0rVA8tAI%682%P8AAAH/AACc/wAA//8AAP//AAD//wAA//8AAP//AADn/wAAQw%15%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%26%UDy0KVA8tPFQPLT/UDy0/1A8tP9QPLT5UDy0PVA8tBBQPLTaUDy0/1A8tP9QPLT/UDy0/lA8tGc%682%P8AAE//AAD+/wAA//8AAP//AAD//wAA//8AALz/AAAe%21%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%20%BQPLQIUDy0yFA8tP9QPLT/UDy0/1A8tP9QPLS%11%BQPLQ7UDy0+FA8tP9QPLT/UDy0/1A8tPJQPLQq%672%/wAAAv8AAMf/AAD//wAA//8AAP//AAD+/wAAkf8AAAY%26%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%20%BQPLQdUDy001A8tP9QPLT/UDy0/1A8tMNQPLQG%16%UDy0fVA8tP9QPLT/UDy0/1A8tPBQPLRL%672%/wAAHP8AAPv/AAD//wAA//8AAP//AAC6/wAAAw%31%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%26%UDy0DlA8tJ1QPLT+UDy07lA8tCQ%21%UDy0BlA8tMBQPLT/UDy0zFA8tCk%677%/wAAQf8AAP//AAD//wAA//8AAP//AABv%37%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%31%FA8tAFQPLReUDy0W%32%FA8tCJQPLSKUDy0Cw%682%/wAASv8AAPH/AADx/wAA8f8AAPH/AABU%37%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%778%/wAAAf8AAAT/AAAE/wAABP8AAAT/AAAC%37%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%778%/wAAA/8AAAX/AAAF/wAABf8AAAX/AAAE%37%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%778%/wAAqP8AAPT/AAD0/wAA9P8AAPT/AADh/wAAB%32%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%778%/wAAr/8AAP//AAD//wAA//8AAP//AADr/wAAB%32%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%778%/wAAr/8AAP//AAD//wAA//8AAP//AADr/wAAB%32%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%778%/wAAr/8AAP//AAD//wAA//8AAP//AADr/wAAB%32%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%778%/wAAr/8AAP//AAD//wAA//8AAP//AADr/wAAB%32%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%778%/wAAWP8AAH//AAB//wAAf/8AAH//AAB2/wAAAg%31%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%847%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%847%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%847%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%847%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%847%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%847%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%847%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%847%FA8tAVQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vw%847%FA8tARQPLTrUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0rw%852%BQPLSfUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0Y%853%BQPLQbUDy011A8tP9QPLT/UDy0/1A8tP5QPLStUDy0Bg%858%UDy0ElA8tHxQPLS3UDy0r1A8tGBQPLQG%19749%FA8tCxQPLTgUDy0/FA8tHk%869%UDy0K1A8tOlQPLT/UDy0/1A8tP9QPLSE%858%BQPLQqUDy06FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0dw%847%FA8tClQPLToUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tHU%837%UDy0KFA8tOdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSB%826%BQPLQnUDy05lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT9UDy0e%816%FA8tCZQPLTlUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tH%806%UDy0JVA8tOVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLR1UDy0AQ%788%BQPLQkUDy05FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTvUDy0uVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0bw%783%FA8tCNQPLTjUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPBQPLQ2UDy0CFA8tKVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tGtQPLQB%768%UDy0IlA8tONQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy08VA8tDc%10%FA8tAZQPLSqUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLRz%762%BQPLQhUDy04lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTxUDy0O%21%BQPLQFUDy0rFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0bg%751%FA8tCBQPLTcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPJQPLQ5%32%UDy0AlA8tLZQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tGY%741%UDy0H1A8tOBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy08lA8tDo%42%FA8tANQPLStUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLR1%730%BQPLQfUDy031A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTzUDy0Ow%52%BQPLQDUDy0rlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT5UDy0Yw%719%FA8tB5QPLTeUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPNQPLQ9%64%UDy0ClA8tKpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tGI%709%UDy0HVA8tN1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09FA8tD4%74%FA8tAtQPLSvUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLRk%698%BQPLQcUDy03FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT0UDy0Pw%84%BQPLQFUDy0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0Yg%79%FE9tXVQPbSgUD20oFA9tKBQPbSgUD20oFA9tKBQPbSgUD20oFA9tKBQPbSgUD20oFA9tKBQPbSgUD20oFA9tKBQPbSgUD20oFA9tKBQPbSgUD20oFA9tKBQPbSgUD20oFA7tH0%474%FA8tBxQPLTbUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPVQPLR%97%UDy0ClA8tLRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/VA8tF0%74%FA8tLxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMg%469%UDy0G1A8tNpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09VA8tEE%106%FA8tAVQPLTAUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP1QPLRc%69%FA8tLxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMg%218%Es8tBFQPbNQUD2zUFA9s1BQPbNQUD2zUE47tTQ%207%BQPLQaUDy02VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT2UDy0Qw%116%BQPLQEUDy0uFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT8UDy0WQ%63%FA8tLxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMg%218%FI7tjhQPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%202%FA8tBpQPLTYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPZQPLRE%128%UDy0BVA8tMlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+Q%63%FA8tLxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMg%218%FI7tjhQPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%197%UDy0GVA8tNdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09lA8tEY%133%UDy0SFA8tPVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0w%64%FE9tXVQPbSgUD20oFA9tKBQPbSgUD20oFA9tKBQPbSgUD20oFA8tMtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPFQPbSgUD20oFA9tKBQPbSgUD20oFA9tKBQPbSgUD20oFA7tH0%218%FI7tjhQPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%191%BQPLQYUDy01lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT3UDy0Rw%132%BQPLRHUDy09VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTPUDy0Gw%111%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%266%FI7tjhQPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%186%FA8tBdQPLTVUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPdQPLRI%133%FA8tD9QPLT1UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tN1QPLQc%117%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%69%gACAAk0zswo%186%FI7tjhQPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%181%UDy0FlA8tM9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+FA8tEo%133%UDy0PlA8tPRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy03lA8tB0%122%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%47%BVQLUYUDu0cFA7s71QPLToUDy0/VA8tP9QPLT5UDy00FA9tI9SPbMy%26%BgQL8ITz20pFA7tLBQO7SwUDu0sFA7tLBQO7SwUTy0q1VAqgw%26%FUrqgZQPLSmUDu0sFA7tLBQO7SwUDu0sFA7tLBQPLSpTjuxDUlJtgdSO7Y4Uju2OFA7tGNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tLtSO7Y4Uju2OE47tTQ%159%BQPLQWUDy01FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT4UDy0Sw%132%BQPLRBUDy081A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTeUDy0GQ%127%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%37%QEC/BFA7s3lQPLTzUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy1r0w5sxs%21%UD20bVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tX8%26%FE8tW5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLV8%5%FBAtyBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP%155%FA8tBVQPLTTUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPlQPLRM%133%FA8tEFQPLTzUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tN9QPLQa%133%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%31%BJSbYHUDu0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOtOPrU+%18%D/AVA8tMNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPJVPbYV%16%VUCqDFA8tOpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tM9AQL8E%5%FBAtyBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP%150%UDy0FFA8tNJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+VA8tE0%133%UDy0OlA8tPNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy04FA8tC%139%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%31%BRPLSrUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTyUj2zMg%15%FM+syVQPLT2UDy0/1A8tP9QPLT/UDy0/1A8tP9QO7SS%16%UDy1f1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+04+tjE%10%FBAtyBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP%144%BQPLQTUDy00VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDy0Tw%132%BQPLQ5UDy08lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTbUDy0IQ%143%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%26%FA8tV1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QO7O9UT20flA7s3lQPLSmUDy0+FA8tP9QPLT/UDy0/1A8tP9QPLT/UTy01GYzzAU%15%BRPbV1UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT5Uzy0Ig%4%BNQLMUUDy08lA8tP9QPLT/UDy0/1A8tP9QPLT/Tzy0h%16%FE6uRZQO7SwUDu0sFE7tMFQPLT/UDy0/1A8tP9QPLT/UDy0/1E8tORQO7SwUDu0sFA8s6U%143%BQPLSIUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPpQPLRQ%133%FA8tDhQPLTxUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tN1QPLQi%149%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%21%ZjPMBU88tOdQPLT/UDy0/1A8tP9QPLT/UDy0/FE8tFU%21%Uz6zJVA8tN5QPLT/UDy0/1A8tP9QPLT/UDy0/088tGo%15%BVVaoDUDy0yVA8tP9QPLT/UDy0/1A8tP9QPLT/UDyzpQ%4%BQPLWQUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTVSUm2Bw%31%FI7tjhQPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%159%BQPLSGUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPVQPLRX%128%UDy0N1A8tPFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy04lA8tCM%154%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%21%UT20WFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0j%32%FI7tjhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tM8%21%TTuyK1A8tPlQPLT/UDy0/1A8tP9QPLT/UDy0/lA9s1BQPLT5UDy0/1A8tP9QPLT/UDy0/1A8tP1PPLU3%37%FI7tjhQPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%159%BQPLQQUDy0y1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT8UDy0VQ%116%BQPLQ2UDy08FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTjUDy0J%160%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%21%UDu0sFA8tP9QPLT/UDy0/1A8tP9QPLT/UkC2H%37%BQPLTDUDy0/1A8tP9QPLT/UDy0/1A8tP9TObMo%21%FA7tH1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tIw%42%FI7tjhQPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%143%D/AAAK/wAAC%11%UDy0EVA8tMxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+1A8tFQ%106%FA8tDVQPLTvUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tORQPLQf%165%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%21%UDy06FA8tP9QPLT/UDy0/1A8tP9RPLTU%42%BQPLV/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPbVg%21%GYzzAVQPLTQUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD2021U5qgk%42%FI7tjhQPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%133%/wAABv8AAKb/AAD//wAA+/8AAIM%10%FA8tBFQPLTNUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPtQPLRT%96%UDy0OVA8tO9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy05FA8tC%171%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%15%BSQLYcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTPTz21ZE89tWRPPbVkTz21ZE89tWRPPbVkTz21ZE89tWRQPLSdUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSV%26%BOPrYxUDy0+1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+Tj61Pg%47%FI7tjhQPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%127%D/AAAF/wAAtf8AAP//AAD//wAA//8AAP//AACI%10%BQPLQSUDy0z1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDy0UQ%84%BQPLQ5UDy07lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTeUDy0Iw%175%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%15%BQPLQzUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QO7Sw%32%UD21hlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSV%53%FI7tjhQPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%122%P8AAAX/AAC5/wAA//8AAP//AAD//wAA//8AAP//AAD//wAAhg%10%UDy0E1A8tNBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+lA8tEs%74%FA8tDFQPLTyUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOFQPLQn%181%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%15%BPPLREUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLX%33%YEC/CFA8tPJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPlLPLQR%53%FI7tjhQPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%117%/wAABf8AAK3/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAIQ%10%FA8tBRQPLTRUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPlQPLRP%64%UDy0MFA8tPJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy051A8tCg%186%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%15%BSPbRLUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTM%32%UD20bVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RPLR7%53%FI7tjhQPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%111%D/AAAF/wAAq/8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AACD%10%BQPLQUUDy00lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT5UDy0Tg%52%BQPLQzUDy07VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLToUDy0KQ%191%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%15%BSPbY7UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTLTzy0hE88tIRPPLSETzy0hE88tIRPPLSETzy0hE88tIRPPLSETzy0hE88tIRPPLSETzy0hE88tIRQPLRm%26%BNPrIhUDy09FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT5TTuyKw%47%FI7tjhQPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%106%P8AAAT/AACq/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAAgQ%10%UDy0FVA8tNNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+FA8tEw%42%FA8tDRQPLTrUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOlQPLQq%197%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%15%BRPrQpUDy0/1A8tP9QPLT/UDy0/1A8tP9RPLWh%104%/wFRPLS+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21ylVVqgM%42%FI7tjhQPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%101%/wAABP8AAKj/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAH8%10%FA8tBZQPLTUUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPhQPLRL%32%UDy0LVA8tOpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy06VA8tCY%202%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%15%BVK6oGTzy091A8tP9QPLT/UDy0/1A8tP9QPLTC%101%FA9tGlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9s3Y%42%FI7tjhQPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%95%D/AAAE/wAAp/8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAB+%10%BQPLQXUDy01VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT4UDy0SQ%20%BQPLQyUDy06lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTqUDy0Jw%207%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%21%Tzy0xFA8tP9QPLT/UDy0/1A8tP9PPLT3Rka5Cw%36%BTPLQiTz21ZE89tWRPPbVkTz21ZE89tWRRPLMv%16%Ujq1H1A8tPJQPLT/UDy0/1A8tP9QPLT/UDy0/087tWdQPLT8UDy0/1A8tP9QPLT/UDy0/088tPdTObMo%37%FI7tjhQPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%90%P8AAAP/AACl/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAAf%11%UDy0F1A8tNZQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy091A8tEg%10%FA8tC9QPLTpUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOtQPLQo%213%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%21%UT21dVA8tP9QPLT/UDy0/1A8tP9QPLT/Tz21cQ%34%/wFQO7O9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPbM2%16%UDy0u1A8tP9QPLT/UDy0/1A8tP9QPLT/UT20sQ%4%BRO7ObUDy0/1A8tP9QPLT/UDy0/1A8tP9QPbTGgACAAg%31%FI7tjhQPLT/UDy0/1A8tP9QPLT/UDy0/1A7s6w%85%/wAAA/8AAKT/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAHo%10%FA8tBhQPLTXUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPdQPLRHUDy0L1A8tOlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy06FA8tC0%218%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%21%Szy0EVA8tPVQPLT/UDy0/1A8tP9QPLT/UDy09lE8tUw%21%TjuxDVE8taFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMU%15%BQPLRmUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT8UT60KQ%4%BOO7EaUDy09lA8tP9QPLT/UDy0/1A8tP9QPLT/UTyzcg%31%FA9szZQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNI%79%D/AAAD/wAAo/8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAB4%10%BQPLQZUDy02FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT3UDy06FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTnUDy0Lw%223%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%26%FE9tH5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QO7POTzy0mlA8tZBQPLStUDy08lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+lI9szI%10%E8+sB1QPLTxUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSZ%16%UD21hlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy09lM+syU%26%FM5syhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLO2UD20gk88tIQ%63%D/AACM/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAAdw%10%UDy0GlA8tNlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOdQPLQw%229%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%26%FVVqgNQPLTFUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTu0Xw%15%E88tLdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPRVQLUY%16%VUS7D1A9tOxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMIAAP8B%21%GYzzAVQPLT0UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP%64%D/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAHU%10%FA8tBpQPLTaUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy07FA8tDI%234%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%31%BQQK8QUDy0wlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPZQO7VW%16%UTy0YlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/087tIE%26%FA7tHBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPbRt%26%BRPLSYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP%64%D/AADW/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AABz%10%BQPLQbUDy021A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTuUDy0Lw%239%E87tHRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%37%YEC/CFA9tIJQPLT1UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDu0sFA6tiM%15%BMObMbUDy08FA8tP9QPLT/UDy0/1A8tP9QPLT/UDyz6VVAqgw%26%FUrqgZQPLTeUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT0Uzy0Ig%20%BVRLsPUDy0zFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP%64%D/AAAu/wAA6/8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAAcQ%10%UDy0HFA8tNxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tO9QPLQ0%330%BON7EXUD20aVE9tLFPPLTXUD207FA8tPBQPLTeTzy0t1A8tXxQOrYj%176%SUm2B1E8tWtQO7O9Tzy051A8tPRQPLPpUDy00E88s5E%69%/wAAL/8AAOv/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAG8%10%FA8tBxQPLTdUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy071A8tC8%682%P8AADD/AADs/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AABu%10%BQPLQdUDy03lA8tP9QPLT/UDy0/1A8tP9QPLTwUDy0Ng%692%D/AAAx/wAA7f8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAAb%11%UDy0HlA8tN9QPLT/UDy0/1A8tOxQPLQ3%704%/wAAMv8AAO7/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAGo%10%FA8tB9QPLSzUDy0v1A8tC0%714%P8AADP/AADu/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AABp%746%D/AAA0/wAA7/8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD+/wAAZ%747%/wAANf8AAPD/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA8v8AAB%747%P8AADb/AADw/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AACU%751%D/AAA4/wAA8f8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAAxQ%762%/wAAOf8AAPH/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AADW/wAAFw%767%P8AADr/AADy/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AANf/AAAY%778%D/AAA7/wAA8/8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA2P8AABg%789%/wAAPP8AAPP/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AADZ/wAAGQ%799%P8AAD3/AAD0/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AANr/AAAa%810%D/AAA//wAA9P8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA2/8AABs%821%/wAAQP8AAOT/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAC8/wAAGw%24986%UDy0GFA8tI5QPLTHUDy0tVA8tFFQPLQB%858%BQPLQWUDy021A8tP9QPLT/UDy0/1A8tP1QPLRz%858%BQPLSFUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTzUDy0K%853%BQPLS3UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy071A8tD0%847%BQPLShUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPJQPLQ9%842%BQPLQ9UDy0+VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTzUDy0Pg%842%UDy0aVA8tPVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy081A8tD4%842%FA8tIxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPNQPLQ/%842%BQPLSLUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTzUDy0Pw%431%FA8tANQPLRvUDy0cFA8tAM%229%UDy0D1A8tH9QPLRY%144%UDy0i1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09FA8tE%422%UDy0BFA8tK1QPLT/UDy0/1A8tLBQPLQG%218%BQPLQXUDy011A8tP9QPLT/UDy0Uw%143%FA8tIpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPRQPLR%411%BQPLQDUDy0pFA8tP9QPLT/UDy0/1A8tP9QPLSqUDy0BQ%207%FA8tBJQPLTQUDy0/1A8tP9QPLT/UDy0xQ%148%BQPLSJUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT0UDy0QQ%399%FA8tAFQPLScUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0o1A8tAI%197%UDy0EFA8tMxQPLT/UDy0/1A8tP9QPLT/UDy0/lA8tAI%149%UDy0iFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09FA8tEI%394%FA8tJRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tJ0%191%BQPLQMUDy0x1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tAQ%154%FA8tIhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPVQPLRC%384%UDy0jFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSWUDy0AQ%175%FA8tApQPLTBUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tAI%159%BQPLSHUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTkUDy0HQ%372%BQPLSDUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0jQ%170%UDy0CFA8tLpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0zQ%170%UDy0hlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy021A8tB0%362%FA8tHpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tIQ%159%BQPLQGUDy0s1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0Xw%175%FA8tIVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNtQPLQe%352%UDy0clA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLR7%149%FA8tARQPLSrUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSZ%186%BQPLSLUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTcUDy0Hg%340%BQPLRqUDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTPUDy0yVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0cg%138%UDy0AlA8tKRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tKFQPLQC%186%BQPLQKUDy0ulA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy03FA8tB4%330%FA8tGRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNFQPLQSUDy0EVA8tM9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tGk%127%BQPLQBUDy0nVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0p1A8tAQ%197%UDy0CVA8tLpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tN1QPLQf%320%UDy0W1A8tP5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy01FA8tBg%10%FA8tBVQPLTUUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLRi%117%FA8tAFQPLSVUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSuUDy0BQ%207%FA8tAlQPLS5UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTdUDy0Hw%308%BQPLRbUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTcUDy0Fg%20%BQPLQYUDy02VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT9UDy0Wg%111%FA8tI9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tLdQPLQD%218%BQPLQJUDy0uFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy03VA8tC%299%FA8tFdQPLT5UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNxQPLQb%32%UDy0GlA8tN5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+lA8tFQ%101%UDy0h1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0u1A8tAc%229%UDy0CVA8tLhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tN5QPLQg%288%UDy0S1A8tPdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy03lA8tBw%42%FA8tCBQPLTgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPlQPLRN%90%BQPLR7UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS8UDy0Cg%239%FA8tAhQPLS3UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTeUDy0I%277%BQPLRHUDy0+1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTmUDy0I%53%BQPLQiUDy05VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT3UDy0RQ%79%FA8tHlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMVQPLQL%250%BQPLQIUDy0t1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy031A8tCE%266%FA8tEVQPLT4UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOZQPLQl%64%UDy0JFA8tOtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+FA8tEI%69%UDy0c1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0yFA8tA4%261%UDy0CFA8tLZQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tN9QPLQh%256%UDy0QFA8tPRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy05VA8tCY%74%FA8tCtQPLTqUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPRQPLRB%58%BQPLRqUDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTJUDy0D%272%FA8tAhQPLS2UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTfUDy0Ig%244%BQPLQ8UDy08lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTpUDy0Lg%84%BQPLQtUDy06FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTzUDy0Nw%47%FA8tGRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNFQPLQR%282%BQPLQHUDy0tVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy031A8tAk%234%FA8tDRQPLT0UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tO9QPLQx%96%UDy0L1A8tO5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy08FA8tDU%37%UDy0YFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy001A8tBc%293%UDy0B1A8tLRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tLpQPLQJ%224%UDy0MVA8tPFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy08FA8tDQ%106%FA8tDdQPLT0UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPJQPLQ0%26%BQPLRdUDy0/VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTVUDy0Fg%303%FA8tAdQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS6UDy0CQ%212%BQPLQvUDy07FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT0UDy0Ow%116%BQPLQ4UDy08lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTsUDy0L%16%FA8tFlQPLT5UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNxQPLQb%314%BQPLQeUDy03FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0u1A8tAo%202%FA8tCpQPLTpUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPVQPLR%129%UDy0O1A8tPVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy05lA8tCo%5%UDy0TVA8tPxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy03lA8tBs%325%UDy0HlA8tNtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tLtQPLQK%192%UDy0JFA8tOVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy091A8tEY%138%FA8tERQPLT1UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOdQPLRtUDy0+1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLThUDy0IQ%335%FA8tB1QPLTbUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS8UDy0Cg%180%BQPLQfUDy04lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDy0Tg%148%BQPLRHUDy0+VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOZQPLQm%346%BQPLQdUDy021A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vFA8tAo%170%FA8tANQPLTWUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPxQPLRV%160%UDy0TFA8tPxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy06VA8tCk%357%UDy0HVA8tNpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tL1QPLQK%165%FA8tFZQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/VA8tFw%170%FA8tFRQPLT7UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTsUDy0Lg%367%FA8tBxQPLTaUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS9UDy0Cw%159%FA8tJRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0Z%181%BQPLRcUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPBQPLQ0%378%BQPLQcUDy02VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vlA8tAs%154%FA8tJpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLRs%192%UDy0ZFA8tP5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy081A8tDo%389%UDy0HFA8tNlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tL9QPLQL%149%FA8tJpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tHM%202%FA8tGtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT1UDy0Q%400%FA8tBtQPLTZUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS/UDy0Cw%143%FA8tGxQPLT/UDy0/1A8tP9QPLT/UDy0fg%212%BQPLR0UDy0/1A8tP9QPLT/UDy0/1A8tPhQPLRG%410%BQPLQbUDy02FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0wFA8tAw%138%FA8tBNQPLTvUDy0/1A8tP9QPLSG%224%UDy0fVA8tP9QPLT/UDy0+lA8tE0%421%UDy0GlA8tNhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMBQPLQM%138%BQPLRBUDy0tFA8tGg%234%FA8tHNQPLS0UDy0Tg%431%FA8tBtQPLTyUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSh%842%BQPLQ+UDy081A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0jg%842%UDy0PVA8tPJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tI4%842%FA8tD1QPLTyUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSP%842%BQPLQ8UDy08lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0k%843%UDy0PFA8tPJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tJE%842%FA8tDtQPLTxUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSHUDy0BQ%836%BQPLQ7UDy08VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0jg%842%UDy0OlA8tPFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+VA8tBk%842%FA8tDpQPLTxUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tD8%847%BQPLQ5UDy07lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+1A8tB4%853%UDy0L1A8tPJQPLT/UDy0/1A8tP9QPLT/UDy0nQ%863%FA8tDxQPLTHUDy0+FA8tOlQPLSKUDy0Cg%868%BQPLQCUDy0CVA8tAY%22101%UDy0SFA8tNpQPLTsUDy0Xg%442%UDy0MlA8tLdQPLT/UDy0mFA8tCo%405%UDy04FA8tP9QPLT/UDy0/1A8tJFQPLQH%426%BQPLRGUDy0/FA8tP9QPLT/UDy0/1A8tO5QPLQO%400%UDy07FA8tP9QPLT/UDy0/1A8tP9QPLTVUDy0Kw%415%FA8tEZQPLT8UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLR6%400%UDy0XlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy071A8tFw%405%UDy0R1A8tPxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLR8%405%FA8tJFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPJQPLRi%400%UDy01lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLRE%405%FA8tAZQPLS9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT8UDy0lVE9tAM%389%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tItQPLQB%410%BQPLQYUDy03VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMNQPLQV%384%UDy07FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0i1A8tAE%421%UDy0N1A8tPFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTkUDy0Mw%378%UDy0a1A8tP9QPLT/UDy0/1A8tP9QPLSLUDy0AQ%431%FA8tGJQPLT8UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy091A8tF8%378%FA8tDhQPLSyUDy0vVA8tERQPLQB%37%FA8tBdQPLSxUDy051A8tOVQPLRd%378%BQPLSVUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLSRUDy0BQ%426%UDy0F1A8tN1QPLT/UDy0/1A8tP9QPLT/UDy0Uw%372%BRPbQDUDy0w1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vVA8tBc%415%BQPLQXUDy03VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0q%379%UDy0FVA8tORQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tN5QPLQ1%405%FA8tBdQPLTdUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0r%384%FA8tDNQPLT3UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTyUDy0Y%395%UDy0F1A8tN1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0cw%388%BQPLRfUDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/FA8tJRQPLQE%378%BQPLQXUDy03VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSF%400%UDy0kVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTCUDy0Fg%367%FA8tAFQPLTSUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tIU%405%UDy0BVA8tL1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy041A8tDQ%362%FA8tC9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0hQ%42%UDy0AlA8tAhQPLQIUDy0AQ%351%FA8tBdQPLTeUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPdQPLRf%357%FA8tC1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSF%42%BQPLQgUDy0qVA8tP9QPLT/UDy0sFA8tAw%351%BQPLQ1UDy08lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0kVA8tAU%351%BQPLS9UDy0/1A8tP9QPLT/UDy0/1A8tIU%42%FA8tCBQPLTdUDy0/1A8tP9QPLT/UDy0/1A8tLw%357%UDy0YFA8tPxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tL5QPLQX%346%BQPLQMUDy0oVA8tP5QPLT0UDy0cg%42%UDy0IFA8tN1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPNQPLQT%357%FA8tJRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTgUDy0N%405%BQPLQhUDy03FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPFQPLQS%357%FA8tARQPLTCUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09FA8tF8%394%FA8tCFQPLTcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tJ4%367%BQPLQWUDy041A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP1QPLSTUDy0Bg%378%UDy0IFA8tNxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0x1A8tAo%373%UDy0NFA8tPdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0wVA8tBc%367%BQPLQgUDy03VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTIUDy0CQ%383%FA8tF9QPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOJQPLQ1%357%FA8tB9QPLTdUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMhQPLQJ%42%BQPLQ1UDy0R1A8tBQ%335%BQPLSRUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT3UDy0Xw%346%UDy0AlA8tMhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0yFA8tAg%37%UDy0A1A8tK1QPLT9UDy0/1A8tPhQPLR%331%BQPLQFUDy0vlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tJFQPLQF%336%UDy0QVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTIUDy0C%37%BQPLQDUDy0rFA8tP9QPLT/UDy0/1A8tP9QPLT5UDy0F%331%UDy0F1A8tOBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS/UDy0Fg%330%UDy0WlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMhQPLQJ%37%FA8tARQPLSsUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0WQ%335%FA8tDRQPLT0UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy04FA8tDM%325%UDy0B1A8tPVQPLT/UDy0/1A8tP9QPLT/UDy0x1A8tAk%37%UDy0BFA8tKxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0S%341%BQPLRfUDy0/VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPVQPLRdUj+1AQ%319%FA8tD1QPLTpUDy0/1A8tP9QPLS3UDy0Cg%36%BQPLQEUDy0q1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT%353%UDy0k1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0kVA8tAc%319%BQPLQLUDy0HVA8tB0%42%FA8tARQPLSrUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMBQPLQJ%352%UDy0BlA8tMFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMBQPLQY%368%UDy0BFA8tKtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0v1A8tAk%362%FA8tBdQPLTiUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLThUDy0NQ%356%BQPLQEUDy0rFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS/UDy0Cg%42%UDy0LlA8tH1QPLQgUDy0Ag%308%BQPLQ1UDy091A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09lA8tF8%346%FA8tANQPLSsUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tL5QPLQK%37%FA8tARQPLSMUDy0/lA8tP9QPLT/UDy0mFA8tAI%309%UDy0X1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSRUDy0BQ%330%UDy0A1A8tKxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vlA8tAs%37%UDy0BFA8tLRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tGo%314%FA8tJFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0v1A8tBU%325%UDy0rVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS+UDy0Cw%36%BQPLQDUDy0tFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tKQ%314%FA8tAVQPLS/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOFQPLQy%314%BQPLQ1UDy0/VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tL9QPLQK%37%FA8tANQPLS1UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tHo%319%BQPLQWUDy04FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT3UDy0XFE+tAE%303%BQPLR8UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0v1A8tAo%37%UDy0AlA8tLVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy07VA8tA8%325%UDy0M1A8tPVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tI9QPLQJ%298%BQPLRGUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTAUDy0CQ%36%BQPLQCUDy0tVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTsUDy0Kw%335%FA8tF1QPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS+UDy0GQ%298%UDy0klA8tP9QPLT/UDy0/1A8tMBQPLQJ%37%FA8tAJQPLS2UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOtQPLQs%341%FI/tQFQPLSRUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy04FA8tDY%298%FA8tFRQPLSdUDy0X1A8tAg%37%UDy0AlA8tLVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy06lA8tC0%42%FA8tClQPLSSUDy0dFA8tB8%287%BQPLQHUDy0wFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPZQPLRf%346%BQPLQDUDy0tVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTpUDy0Lg%42%UDy0aVA8tP9QPLT/UDy0/1A8tNpQPLQe%288%UDy0GFA8tOFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0kVA8tAQ%330%FA8tANQPLS1UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOlQPLQu%42%BQPLRpUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS/%293%FA8tDVQPLT2UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMBQPLQU%320%UDy0BFA8tLRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy06VA8tC8%42%FA8tGpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%298%BQPLRfUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTiUDy0MQ%308%BQPLQEUDy0tFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTpUDy0Lw%42%UDy0alA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTJ%304%UDy0kVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+FA8tFtRPbQB%298%BQPLSmUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOlQPLQu%42%BQPLRqUDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLQp%304%UDy0BVA8tL9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSE%293%FA8tE5QPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy06lA8tC4%42%FA8tGtQPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tGU%314%FA8tBVQPLThUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT8%293%FA8tHxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTrUDy0LQ%42%UDy0a1A8tP5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0ZQ%324%BQPLQyUDy091A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTo%293%FA8tGlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOxQPLQs%42%BQPLRrUDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLRm%336%UDy0XFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPRQPLRB%293%FA8tAtQPLTbUDy0/1A8tP9QPLT/UDy07FA8tCs%42%FA8tGtQPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tGY%341%UT60AVA8tI9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09FA8tEE%303%BQPLQVUDy0q1A8tNxQPLSzUDy0L%43%UDy0a1A8tP5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0Zg%351%FA8tAlQPLS+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT0UDy0QQ%372%BQPLRqUDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP1QPLRn%362%BQPLQZUDy04FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPRQPLRB%373%FA8tGpQPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/VA8tGc%373%UDy0NlA8tPZQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09FA8tEE%373%UDy0alA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT9UDy0Zw%383%FA8tF9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT0UDy0QQ%372%BQPLRpUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLRn%394%BQPLSRUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPRQPLRB%373%FA8tGlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tGY%399%BQPLQEUDy0wFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09FA8tEE%373%UDy0SFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0Zg%410%UDy0FFA8tOJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT0UDy0QQ%378%UDy0p1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLRm%421%FA8tDFQPLT4UDy0/1A8tP9QPLT/UDy0/1A8tPRQPLRB%384%UDy0pVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tGU%431%BQPLRbUDy0/1A8tP9QPLT/UDy09FA8tEE%389%UDy0OVA8tP5QPLT/UDy0/1A8tP9QPLT/UDy0ZQ%436%BRPbQBUDy0hFA8tPxQPLToUDy0QQ%399%FA8tFFQPLT+UDy0/1A8tOVQPLRE%32549%FA8tAlQPLQ2UDy0K%421%BQPLQOUDy0I1A8tCNQPLQjUDy0I1A8tCNQPLQjUDy0I1A8tCNQPLQjUDy0I1A8tCNQPLQjUDy0I1A8tCNQPLQjUDy0I1A8tCNQPLQjUDy0I1A8tCNQPLQjUDy0I1A8tCNQPLQjUDy0I1A8tCNQPLQjUDy0I1A8tCNQPLQjUDy0Cg%282%UDy0E1A8tNpQPLT/UDy0/lA8tK1QPLQj%405%FA8tDFQPLTsUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy04lA8tCE%277%UDy0ZlA8tP9QPLT/UDy0/1A8tP9QPLT7UDy0g1A8tAs%394%FA8tKNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tIc%277%UDy0aFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tN9QPLRbUT20Ag%383%FA8tKlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0ylA8tDM%378%FA8tKlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSjUDy0H%368%FA8tKlQPLT/UDy0/1A8tP9QPLT0UDy0QFA8tEFQPLRBUDy0QVA8tEFQPLRBUDy0QVA8tEFQPLRBUDy0QVA8tEFQPLRBUDy0QVA8tEFQPLRBUDy0QVA8tEFQPLRBUDy0QVA8tEFQPLRBUDy0QVA8tEFQPLRBUDy03lA8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy07VA8tHpQPLQG%357%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpQPLQ8UDy001A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTbUDy0UFJAtQE%346%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpSPrUBUD20A1A8tG9QPLToUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMJQPLQq%341%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpSPrUB%10%BQPLQWUDy0jVA8tP1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT9UDy0j1A8tBY%330%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpSPrUB%21%FA8tCpQPLTAUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOlQPLRwUT20Ag%319%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpSPrUB%26%BRPrQBUDy0UFA8tNhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy01VA8tD0%314%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpSPrUB%37%FA8tAdQPLR5UDy07FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLSvUDy0J%304%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpSPrUB%48%UDy0HFA8tKJQPLT9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+VA8tIVQPLQS%293%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpSPrUB%58%BQPLQzUDy0yFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTjUDy0X%288%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpSPrUB%64%UT60AVA8tFxQPLTcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tM1QPLQ5%277%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpSPrUB%74%BQPLQNUDy0g1A8tPlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTI%277%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpSPrUB%80%Uj+1AVA8tGFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTxUDy0Bw%271%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpSPrUB%74%BQPLQnUDy0sVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS0%277%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpSPrUB%64%UDy0C1A8tIlQPLT9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tJ5QPLQN%277%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpSPrUB%53%FE9tAJQPLRfUDy05FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTGUDy0Lg%287%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpSPrUB%48%UDy0N1A8tM9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy04VA8tGBRPrUB%293%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpSPrUB%37%FA8tB5QPLSdUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPpQPLR+UDy0Dw%303%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpSPrUB%26%BQPLQGUDy0f1A8tO9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0p1A8tB8%314%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpSPrUB%21%FA8tFZQPLTfUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tM1QPLRC%325%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpSPrUB%10%BQPLQvUDy0vFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTmUDy0a1A9tAM%330%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPpSPrUBUDy0GFA8tJRQPLT9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/FA8tIhQPLQT%341%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tPtQPLR3UDy061A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLS8UDy0Jw%351%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy00lA8tE0%362%FA8tKlQPLT/UDy0/1A8tP9QPLTx%128%UDy001A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPVQPLR1UDy0Bw%367%FA8tKlQPLT/UDy0/1A8tP9QPLT3UDy0d1A8tHhQPLR4UDy0eFA8tHhQPLR4UDy0eFA8tHhQPLR4UDy0eFA8tHhQPLR4UDy0eFA8tHhQPLR4UDy0eFA8tHhQPLR4UDy0eFA8tHhQPLR4UDy0eFA8tHhQPLR3UDy06FA8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT7UDy0nlA8tBg%378%FA8tKlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tI0%277%UDy0aFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tMJQPLQx%389%FA8tKlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tI0%277%UDy0XlA8tP9QPLT/UDy0/1A8tP9QPLTiUDy0WQ%399%FA8tJhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tIc%277%UDy0DFA8tL5QPLT/UDy091A8tH9QPLQO%405%FA8tCZQPLTeUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy03lA8tCE%282%FE9tAJQPLQQUDy0Cw%420%BQPLQHUDy0I1A8tCNQPLQjUDy0I1A8tCNQPLQjUDy0I1A8tCNQPLQjUDy0I1A8tCNQPLQjUDy0I1A8tCNQPLQjUDy0I1A8tCNQPLQjUDy0I1A8tCNQPLQjUDy0I1A8tCNQPLQjUDy0I1A8tCNQPLQjUDy0I1A8tCNQPLQjUT20Ag%33967%FA8tBhQPLQd%874%BQPLQYUDy0n1A8tPxQPLT/UDy0xlA8tC4%853%UT20AlA8tHZQPLTrUDy0/1A8tP9QPLT/UDy0/1A8tP1QPLSTUDy0G%837%BQPLRNUDy02FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy06lA8tHRRPbQC%816%UDy0KlA8tLFQPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTXUDy0QQ%420%BQPLQlUDy0TFA8tCU%362%FA8tBRQPLSKUDy0+VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPtQPLT2UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tLJQPLQn%394%BQPLQjUDy0d1A8tMpQPLT+UDy0/1A8tPhQPLRM%346%BRPbQDUDy0a1A8tOVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0wVA8tDJQPLQaUDy0n1A8tPxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDy0iFA8tBQ%362%FNAtQFQPLQgUDy0elA8tMhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTlUDy0Gw%335%FA8tDtQPLTOUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNlQPLRZ%21%FA8tDFQPLTEUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOVQPLRgUj+1AQ%340%BQPLQ2UDy0hFA8tNNQPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0wlE9tAM%319%BQPLQmUDy0plA8tP5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT2UDy0gFA8tA0%31%BSP7UBUDy0WVA8tOJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0z1A8tDg%319%BQPLQ0UDy0hlA8tNxQPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tIc%309%UDy0CFA8tH9QPLTzUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/VA8tKtQPLQb%53%FA8tA9QPLSAUDy091A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP1QPLSnUDy0Iw%287%FA8tAZQPLQuUDy0ilA8tNlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPpQPLTaUDy0/1A8tP9QPLT/UDy0/1A8tPpQPLQ+%293%FE9tANQPLRUUDy04VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTIUDy0Ow%74%UDy0HlA8tKtQPLT8UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09VA8tH9QPLQG%261%FA9tANQPLRFUDy0lVA8tOpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPtQPLS+UDy0bVA8tBhRPbQCUDy0wlA8tP9QPLT/UDy0/1A8tP9QPLTeUDy0Cw%282%UDy0NVA8tMNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy07FA8tGI%95%BQPLQ8UDy0y1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTeUDy0VVE9tAE%234%FE9tAJQPLRGUDy0llA8tOhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPVQPLSxUDy0V1A8tA8%21%UDy0HVA8tO9QPLT/UDy0/1A8tP9QPLT/UDy0qlI/tQE%266%FA8tBVQPLSbUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPlQPLSLUDy0E%107%UDy0B1A8tGdQPLTqUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMRQPLQy%213%FA8tAxQPLRLUDy0mFA8tOdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPRQPLSyUDy0WVA8tA4%42%FA8tFZQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tGY%255%BQPLQHUDy0c1A8tO1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0tFA8tC%128%BQPLQSUDy0jFA8tPhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDy0k1A8tBc%186%FA8tAZQPLRUUDy0pVA8tPVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tO5QPLSnUDy0XVA8tAw%63%BQPLSfUDy0/1A8tP9QPLT/UDy0/1A8tPFQPLQo%240%UT60AVA8tElQPLTeUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNVQPLRD%149%FA8tCFQPLS2UDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOtQPLRzUDy0BQ%175%FA8tK9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tO1QPLSgUDy0RVA8tAg%79%BQPLQOUDy00lA8tP9QPLT/UDy0/1A8tP9QPLTTUDy0Bw%228%BQPLQeUDy0ulA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTyUDy0a1A8tAk%165%UDy0UFA8tNRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy02lA8tEg%165%UDy0HFA8tP1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOxQPLShUDy0R1A8tAg%101%UDy0NVA8tPtQPLT/UDy0/1A8tP9QPLT/UDy0kQ%228%BQPLTNUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/VA8tJRQPLQU%181%FA8tApQPLRsUDy08lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPtQPLQY%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOJQPLSLUDy0TVA8tAQ%122%FA8tG9QPLT/UDy0/1A8tP9QPLT/UDy0/FA8tE4%223%BQPLT2UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS9UDy0Jw%202%UDy0FVA8tJZQPLT8UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLS3UDy0NlA9tAM%143%BQPLS0UDy0/1A8tP9QPLT/UDy0/1A8tOtQPLQV%218%BQPLT2UDy0/1A8tP9QPLT/UDy03FA8tFhSP7UB%218%BQPLQzUDy0xFA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%154%BQPLQZUDy05lA8tP9QPLT/UDy0/1A8tP9QPLS8UDy0BQ%212%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%160%UDy0QlA8tP1QPLT/UDy0/1A8tP9QPLT/UDy0dw%212%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%165%FA8tIlQPLT/UDy0/1A8tP9QPLT/UDy0+FA8tDc%207%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%165%FA8tAlQPLTGUDy0/1A8tP9QPLT/UDy0/1A8tOJQPLQQ%202%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%170%BQPLQlUDy09FA8tP9QPLT/UDy0/1A8tP9QPLSj%202%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%176%UDy0WlA8tP5QPLT/UDy0/1A8tP9QPLT+UDy0YQ%196%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%181%FA8tKRQPLT/UDy0/1A8tP9QPLT/UDy09FA8tCI%191%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%181%FA8tA9QPLTbUDy0/1A8tP9QPLT/UDy0/1A8tMxQPLQM%186%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%186%BQPLQxUDy091A8tP9QPLT/UDy0/1A8tP9QPLSI%186%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%192%UDy0dlA8tP9QPLT/UDy0/1A8tP9QPLT9UDy0SQ%180%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%192%UDy0BVA8tLZQPLT/UDy0/1A8tP9QPLT/UDy07VA8tBs%175%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%197%FA8tBlQPLTrUDy0/1A8tP9QPLT/UDy0/1A8tJ4%175%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%202%BQPLSrUDy0/1A8tP9QPLT/UDy0/1A8tLg%175%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%197%FA8tFJQPLT+UDy0/1A8tP9QPLT/UDy0/1A8tF4%175%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%192%UDy0HlA8tPJQPLT/UDy0/1A8tP9QPLT/UDy0rVA9tAM%175%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%186%BSPrUBUDy0vlA8tP9QPLT/UDy0/1A8tP9QPLTmUDy0Ew%180%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%186%BQPLSBUDy0/1A8tP9QPLT/UDy0/1A8tPhQPLR%187%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%181%FA8tDpQPLT9UDy0/1A8tP9QPLT/UDy0/1A8tIk%191%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%176%UDy0FlA8tN5QPLT/UDy0/1A8tP9QPLT/UDy0xFA8tAU%191%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%176%UDy0plA8tP9QPLT/UDy0/1A8tP9QPLTtUDy0HQ%196%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%170%BQPLRnUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLRa%202%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%165%FA8tChQPLT5UDy0/1A8tP9QPLT/UDy0/1A8tJk%207%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%160%UDy0BVA8tNBQPLT/UDy0/1A8tP9QPLT/UDy02FA8tAo%207%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR2%160%UDy0l1A8tP9QPLT/UDy0/1A8tP9QPLTyUDy0MQ%212%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLR3%154%BQPLRNUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLR1%218%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLT3UDy0rlA8tFlQPLQQ%133%FA8tB9QPLTnUDy0/1A8tP9QPLT/UDy0/1A8tLJSP7UB%218%BQPLT2UDy0/1A8tP9QPLT/UDy0bg%234%UDy0PVA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0IlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT4UDy0q1A8tFtQPLQO%112%UD20A1A8tLpQPLT/UDy0/1A8tP9QPLT/UDy05lA8tBI%223%BQPLT2UDy0/1A8tP9QPLT/UDy08VA8tHRQPLQI%213%FA9tANQPLRRUDy03VA8tP9QPLT/UDy0/1A8tP9QPLRb%160%UDy0CVA8tPBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT1UDy0ulA8tGhQPLQa%96%UDy0fVA8tP9QPLT/UDy0/1A8tP9QPLT+UDy0RQ%228%BQPLT2UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTeUDy0T%203%UDy0KVA8tLlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLRY%165%FA8tElQPLTdUDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT7UDy0wVA8tGpQPLQa%74%BQPLQ2UDy0/FA8tP9QPLT/UDy0/1A8tP9QPLSE%234%BQPLTEUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tLJQPLQq%181%FA8tBFQPLSVUDy0+FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOtQPLQV%176%UDy0NFA8tIRQPLTdUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0u1A8tGxQPLQY%53%FA8tAxQPLTgUDy0/1A8tP9QPLT/UDy0/1A8tMhQPLQE%234%BQPLQWUDy0mlA8tPlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT4UDy0lFA8tA8%159%BQPLQGUDy0alA8tO9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0u1A8tCk%191%BRPbQCUDy0MFA8tIpQPLTTUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT8UDy01FA8tHhQPLQp%32%UT20AlA8tK1QPLT/UDy0/1A8tP9QPLT/UDy07FA8tCY%250%FA8tDZQPLS6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tO1QPLRpUDy0Bw%143%FA8tEVQPLTUUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tN9QPLRMUT20AQ%218%UDy0I1A8tHRQPLTNUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT9UDy001A8tHhQPLQo%16%UDy0X1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0Xw%260%BQPbQDUDy0TlA8tN9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0yVA8tEU%127%BQPLQgUDy0sVA8tPxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTxUDy0dVA8tAY%245%UDy0JVA8tHJQPLTQUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0zVA8tIRQPLRZUDy08FA8tP9QPLT/UDy0/1A8tP9QPLSd%277%FA8tAhQPLR2UDy08VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPxQPLStUDy0IQ%106%UDy0DlA8tIlQPLT3UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tJ1QPLQe%272%UDy0I1A8tHhQPLS2UDy0/VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNxQPLQL%288%UDy0HlA8tJ5QPLT9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09VA8tIlQPLQN%85%FE9tAJQPLRhUDy07FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTGUDy0Og%298%UDy0FlA8tGVQPLS7UDy0+lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+lA8tDI%303%BQPLQ8UDy0xVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTiUDy0XFA9tAQ%69%UDy0OlA8tMNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy05lA8tFdSPrUB%320%UDy0FlA8tGNQPLTAUDy0+FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0bQ%314%UD20A1A8tFdQPLTnUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMFQPLQ7%53%FA8tBhQPLSoUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPRQPLSLUDy0CQ%346%UDy0FlA8tFtQPLSnUDy09lA8tP9QPLT/UDy0/1A8tP9QPLS4UT20Ag%324%BQPLQKUDy0i1A8tPZQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDy0qFA8tBg%31%BQPLQJUDy0dFA8tPVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0qVA8tCQ%373%UDy0DVA8tFRQPLSpUDy0w1A8tKtQPLQa%341%FA8tCRQPLSoUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPNQPLRzUDy0CQ%15%FA8tFdQPLTbUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tM1QPLRD%768%UDy0RFA8tNlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy02lA8tFZQPLQxUDy0u1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTrUDy0a1A9tAM%778%FA9tANQPLRtUDy07FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09lA8tJVQPLQO%800%UDy0DlA8tJZQPLT4UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSxUDy0L%821%BQPLQrUDy0vlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy031A8tEtRPrUB%837%FA8tE5QPLTgUDy0/1A8tP9QPLT/UDy0/1A8tO5QPLR1UDy0Bw%852%BQPLQGUDy0dlA8tOhQPLT4UDy0p1A8tBU%874%FA8tARQPLQI%13829%FE9tANQPbQD%880%UDy0ZlA8tOVQPLTrUDy0u1A8tH5QPLRAUDy0EQ%847%FA8tAZQPLSMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+1A8tM1QPLSaUDy0V1A8tCE%821%UDy0FlA8tLpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTjUDy0pFA8tHBQPLQxUDy0Cw%788%BQPLQxUDy03FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy08lA8tMFQPLSDUDy0T1A8tA4%383%BQPLQvUDy0VlA8tBM%362%FA8tFhQPLTyUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLToUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP1QPLTUUDy0llA8tGRQPLQmUT20AQ%346%UDy0JFA8tKlQPLT9UDy0/1A8tPNQPLRtUD20Aw%340%BQPLQIUDy0ilA8tP5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tL5QPLQeUT20AlA8tDpQPLR6UDy0rVA8tOZQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy05FA8tLJQPLR0UDy0QlA8tAs%314%FA8tAZQPLSBUDy09lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy00VA8tEU%330%FA8tBpQPLTAUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0lFA8tAo%26%FA9tARQPLQpUDy0XVA8tJxQPLTPUDy0+lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPhQPLTEUDy0kFA8tCk%287%BRPbQBUDy0WFA8tOBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSrUDy0IQ%314%UDy0N1A8tOBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPlQPLRiUT20AQ%58%UDy0EVA8tEpQPLSDUDy0u1A8tPNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tO5QPLQl%277%FA8tDRQPLTHUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+lA8tIJQPLQR%293%FI+tQFQPLRgUDy09VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy041A8tDY%90%FA8tAZQPLQ3UDy0alA8tKhQPLTnUDy0/VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSb%266%BQPLQZUDy0nVA8tP5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT4UDy011A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTiUDy0Yw%282%UDy0ClA8tJJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTDUDy0Gg%122%UDy0HlA8tFlQPLSMUDy0zFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT0UDy0Fg%250%UDy0BlA8tHZQPLTsUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tLRQPLQgUT20AlA8tF1QPLTgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMpQPLQx%266%BQPLQdUDy0vVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tJdQPLQH%149%FA8tAdQPLRFUDy0hFA8tMxQPLT/UDy0/1A8tP9QPLT/UDy0hw%239%FE9tAJQPLRMUDy021A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTRUDy0Qw%20%BQPLQMUDy0g1A8tPJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT9UDy0olA8tBw%250%FA8tDpQPLTdUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT7UDy0ZVI/tQE%170%FA8tB1QPLT3UDy0/1A8tP9QPLT/UDy09FA8tBU%229%UDy0LlA8tLtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy08FA8tGpQPLQK%37%FA8tCVQPLSuUDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPVQPLR4UDy0Dg%234%UDy0YlA8tPNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOpQPLQ2%186%BQPLSXUDy0/1A8tP9QPLT/UDy0/1A8tIk%218%FA8tBFQPLSQUDy09lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPtQPLSUUDy0F%21%BQPLQ8UDy0vlA8tMlQPLRuUDy0BQ%10%UDy0P1A8tNFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy02lA8tF%219%FE9tAJQPLSTUDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vFA8tBY%191%BQPLQeUDy0/1A8tP9QPLT/UDy0/1A8tPJQPLQU%202%BQPLQFUDy0alA8tOlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0vFA8tDI%26%FA8tA5QPLTzUDy0/1A8tP9QPLT/UDy021A8tEU%10%FE9tANQPLRpUDy06lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLTBUDy0Kw%202%UDy0FlA8tMNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSPUDy0BQ%202%UDy0rlA8tP9QPLT/UDy0/1A8tP9QPLR2%192%Uj+1AVA8tD9QPLTNUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNpQPLRW%37%FA8tD9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS3UDy0Jw%10%UDy0F1A8tJBQPLT7UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+1A8tJdQPLQV%186%BQPLQ0UDy04lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+VA8tFw%213%UDy0M1A8tP5QPLT/UDy0/1A8tP9QPLTlUDy0C%181%BQPLQmUDy0p1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT2UDy0dFA8tAs%42%FA8tAZQPLThUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09FA8tI9QPLQL%10%BQPLQpUDy0u1A8tP5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTnUDy0b1E9tAI%170%FA8tF5QPLT2UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTmUDy0Lw%223%FA8tLBQPLT/UDy0/1A8tP9QPLT/UDy0bg%170%UDy0ClA8tIpQPLTyUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tKhQPLQY%58%BQPLQrUDy0wVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLToUDy0ZVE+tAE%10%FA8tEtQPLTWUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNNQPLRG%154%BRPbQCUDy0kVA8tP5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMBQPLQS%229%FA8tDJQPLT9UDy0/1A8tP9QPLT/UDy041A8tAc%154%FE9tAJQPLRVUDy05VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTFUDy0OQ%74%Uj61AVA8tF1QPLTfUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNRQPLQ9%10%BQPLQMUDy0dlA8tPJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0tVA8tB8%138%FA8tBBQPLTAUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0kVA9tAQ%239%BQPLSzUDy0/1A8tP9QPLT/UDy0/1A8tG8%149%UDy0I1A8tNBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy04VA8tGBRPrQB%90%BQPLQMUDy0elA8tPdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy0olA8tC%11%FA8tBtQPLSdUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPdQPLSIUD20Aw%127%FA8tI1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPdQPLRf%250%BQPLRCUDy0/1A8tP9QPLT/UDy0/1A8tOJQPLQI%144%UDy0r1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPpQPLSJUDy0Dg%111%FA8tBxQPLSuUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPJQPLSEUDy0Bg%10%UDy0LlA8tMVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0Sw%127%FA8tLFQPLT/UDy0/1A8tP9QPLT/UDy05VA8tDQ%255%BRPrQBUDy0y1A8tP9QPLT/UDy0/1A8tP9QPLRQ%144%UDy09VA8tP9QPLT/UDy0/1A8tP9QPLT+UDy0sVA8tB8%133%UDy0QFA8tMdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy04lA8tFFSP7UB%10%BQPLRgUDy03lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTwUDy0F%267%UDy0S1A8tP9QPLT/UDy0/1A8tP9QPLTPUT61AQ%138%UDy09VA8tP9QPLT/UDy0/1A8tN1QPLRC%149%FA9tARQPLRlUDy05VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTAUDy0NQ%10%UDy0D1A8tH5QPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%272%UT20A1A8tMxQPLT/UDy0/1A8tP9QPLT/UDy0Ug%138%UDy09VA8tP9QPLT/UDy0/1A8tKQ%165%UDy0EVA8tJBQPLT4UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/VA8tEw%10%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%277%FA8tExQPLT/UDy0/1A8tP9QPLT/UDy0zQ%138%UDy09VA8tP9QPLT/UDy0/1A8tKQ%10%FA8tC9QPLTTUDy06VA8tK1QPLQL%138%BQPLQlUDy0tlA8tP1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tLw%10%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%277%FE9tAJQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tFI%133%UDy09VA8tP9QPLT/UDy0/1A8tKQ%10%FA8tNNQPLT/UDy0/1A8tP9QPLR1%149%FA8tEtQPLTOUDy0/1A8tP9QPLT/UDy0/1A8tLM%10%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%282%BQPLRpUDy0/1A8tP9QPLT/UDy0/1A8tMM%133%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0DlA8tP9QPLT/UDy0/1A8tP9QPLSH%154%BQPLQJUDy0cFA8tPFQPLT/UDy06lA8tDc%10%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%282%BQPLQIUDy04lA8tP9QPLT/UDy0/1A8tP9QPLQ3%128%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0DlA8tP9QPLT/UDy0/1A8tP9QPLSH%165%FA8tAhQPLQ6UD20Aw%15%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%288%UDy0ZlA8tP9QPLT/UDy0/1A8tP9QPLSz%128%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0DlA8tP9QPLT/UDy0/1A8tP9QPLSH%197%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%288%UDy0CVA8tOJQPLT/UDy0/1A8tP9QPLT/UDy0Ng%122%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0DlA8tP9QPLT/UDy0/1A8tP9QPLSH%197%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%293%FA8tGhQPLT/UDy0/1A8tP9QPLT/UDy0tQ%122%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0DlA8tP9QPLT/UDy0/1A8tP9QPLSH%197%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%293%FA8tAdQPLTsUDy0/1A8tP9QPLT/UDy0/VA8tDU%117%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0DlA8tP9QPLT/UDy0/1A8tP9QPLSH%197%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%298%BQPLSDUDy0/1A8tP9QPLT/UDy0/1A8tJ8%117%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0DlA8tP9QPLT/UDy0/1A8tP9QPLSH%197%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%298%BQPLQUUDy08lA8tP9QPLT/UDy0/1A8tPpQPLQg%112%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0DlA8tP9QPLT/UDy0/1A8tP9QPLSH%197%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%304%UDy0hFA8tP9QPLT/UDy0/1A8tP9QPLSX%112%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0DlA8tP9QPLT/UDy0/1A8tP9QPLSH%197%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%304%UDy0GFA8tP5QPLT/UDy0/1A8tP9QPLTI%112%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0DlA8tP9QPLT/UDy0/1A8tP9QPLSH%197%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%304%UDy0X1A8tP9QPLT/UDy0/1A8tP9QPLS8%112%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0DlA8tP9QPLT/UDy0/1A8tP9QPLSH%197%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%298%BRPbQCUDy0zFA8tP9QPLT/UDy0/1A8tP9QPLRT%112%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0DlA8tP9QPLT/UDy0/1A8tP9QPLSH%197%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%298%BQPLRKUDy0/1A8tP9QPLT/UDy0/1A8tM9SP7UB%112%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0DlA8tP9QPLT/UDy0/1A8tP9QPLSH%197%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%293%FE9tAJQPLTLUDy0/1A8tP9QPLT/UDy0/1A8tFE%117%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0DlA8tP9QPLT/UDy0/1A8tP9QPLSH%197%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%293%FA8tExQPLT/UDy0/1A8tP9QPLT/UDy00FE9tAM%117%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0DlA8tP9QPLT/UDy0/1A8tP9QPLSH%197%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%293%FA8tMpQPLT/UDy0/1A8tP9QPLT/UDy0Zg%122%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0DlA8tP9QPLT/UDy0/1A8tP9QPLSH%197%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%288%UDy0OlA8tP9QPLT/UDy0/1A8tP9QPLTjUDy0Bw%122%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0DlA8tP9QPLT/UDy0/1A8tP9QPLSH%197%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%288%UDy0sFA8tP9QPLT/UDy0/1A8tP9QPLRv%128%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0DlA8tP9QPLT/UDy0/1A8tP9QPLSH%197%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%282%BQPLQyUDy0/lA8tP9QPLT/UDy0/1A8tOVQPLQI%128%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0DlA8tP9QPLT/UDy0/1A8tP9QPLSH%160%UDy0BlA8tGVQPLSaUDy0blI/tQE%10%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%282%BQPLStUDy0/1A8tP9QPLT/UDy0/1A8tGw%133%UDy09VA8tP9QPLT/UDy0/1A8tKQ%5%UDy0CVA8tPNQPLT/UDy0/1A8tP9QPLSI%154%BQPLRMUDy04FA8tP9QPLT/UDy0/1A8tHE%10%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%277%FA8tDJQPLT/UDy0/1A8tP9QPLT/UDy05lA8tAo%133%UDy09VA8tP9QPLT/UDy0/1A8tKQ%10%FA8tJ9QPLT/UDy0/1A8tP5QPLQ4%144%UDy0K1A8tL1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMM%10%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTp%277%FA8tK5QPLT/UDy0/1A8tP9QPLT/UDy0ig%138%UDy09VA8tP9QPLT/UDy0/1A8tKQ%10%FA8tAdQPLRnUDy0iFA8tDg%138%FA8tA1QPLSVUDy09lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tJQ%10%FA8tAZQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLTrUT61AQ%266%UDy0HFA8tPZQPLT/UDy0/1A8tP9QPLT0UDy0FQ%138%UDy09VA8tP9QPLT/UDy0/1A8tK9SP7UB%154%BRPbQCUDy0a1A8tOxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0sVA8tB0%10%FA8tBNQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tLFQPLT/UDy0/1A8tP9QPLT/UDy0mlA8tAw%261%UDy0k1A8tP9QPLT/UDy0/1A8tP9QPLSI%144%UDy09VA8tP9QPLT/UDy0/1A8tP9QPLS1UDy0Lw%143%FA8tENQPLTYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNtQPLRY%10%BQPLQEUDy0YVA8tOtQPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tJtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMNQPLQi%250%BQPLQdUDy0+FA8tP9QPLT/UDy0/1A8tPRQPLQX%144%UDy05FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+VA8tI1QPLQL%122%BQPLQjUDy0p1A8tP5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT1UDy0dFA8tAk%10%FA8tD1QPLTDUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0X%128%FA8tDpQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLThUDy0QQ%244%BQPLSRUDy0/1A8tP9QPLT/UDy0/1A8tIg%149%UDy0h1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLToUDy0ZFA9tAQ%101%UDy0CVA8tIpQPLT1UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+1A8tJ5QPLQY%10%BQPLQaUDy0qlA8tPpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTyUDy0Iw%132%BQPLQvUDy02FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy09VA8tGs%234%FA8tBxQPLT4UDy0/1A8tP9QPLT/UDy0+1A8tBk%149%UD20BFA8tFhQPLThUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNJQPLQ/%85%FE9tAJQPLRhUDy05lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTCUDy0Ow%10%UDy0ClA8tHZQPLT0UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tKVQPLQi%144%UDy0E1A8tLRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLSdUDy0Bg%223%FA8tIhQPLT/UDy0/1A8tP9QPLT/UDy0pQ%164%BQPLQMUDy0e1A8tPRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT9UDy0olA8tB8%69%UDy0OlA8tMRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy04lA8tF9QPbQD%5%FI/tQFQPLRYUDy03FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTMUDy0Qg%159%FA8tARQPLSFUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0yVA8tCc%213%UDy0DlA8tOtQPLT/UDy0/1A8tP9QPLT9UDy0KQ%175%FA8tBhQPLSmUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPNQPLSDUDy0Cg%52%BQPLSDUDy0/VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPZQPLSKUDy0Dg%10%UDy0M1A8tLxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy061A8tGpRPbQC%176%UDy0VFA8tPdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOVQPLRI%208%UDy0dlA8tP9QPLT/UDy0/1A8tP9QPLSj%192%UDy0QlA8tMhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy05VA8tFhQPbQE%37%FA8tBtQPLT9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT8UDy0sFA8tCE%10%FA8tBNQPLSUUDy0+lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPdQPLSTUDy0D%192%FA8tChQPLTeUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT3UDy0cw%196%BQPLQNUDy061A8tP9QPLT/UDy0/1A8tP1QPLQr%197%FA8tAZQPLRdUDy06lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS8UDy0O%32%FA8tChQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMpQPLRG%10%BQPLQGUDy0bFA8tPJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0sFA8tCk%207%BQPLQPUDy0uFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lA8tKZQPLQJ%186%BQPLR4UDy0/1A8tP9QPLT/UDy0/1A8tKU%213%UDy0DlA8tIZQPLT4UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+VA8tJ5QPLQX%21%FE9tAJQPLS7UDy0/1A8tP9QPLTvUDy0alA8tAc%10%FA8tE9QPLTWUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tN9QPLRL%224%UD20A1A8tIhQPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTPUDy0I%176%FA8tAxQPLTqUDy0/1A8tP9QPLT/UDy0/1A8tDw%223%BQPLQoUDy0rlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTvUDy0eFA8tAg%15%BQPLQMUDy0VVA8tGVQPLQR%10%BQPLQgUDy0s1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTvUDy0dFA8tAU%239%BQPLRWUDy09VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy06VA8tEM%159%BRPbQCUDy0H1A8tIhQPLT/UDy0/1A8tP9QPLT/UDy0w%240%FA8tEpQPLTRUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNdQPLRMUT20AQ%26%UDy0DlA8tIpQPLT6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+FA8tJ5QPLQS%256%UDy0LVA8tOFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPpQPLRw%133%FA8tAZQPLQ6UDy0eFA8tKtQPLTnUDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0Qg%244%BQPLQHUDy0clA8tPBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0s1A8tC4%10%FA8tAVQPLRhUDy07VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTEUDy0Mg%271%FA8tA5QPLSxUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0o1A8tAY%101%UDy0FVA8tFFQPLSJUDy0yVA8tPZQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT%262%FA8tBFQPLSaUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPZQPLSNUDy0RVA8tM5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy05VA8tFRRPbQC%282%BRPbQCUDy0f1A8tP1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNBQPLQZ%69%FA8tAVQPLQrUDy0YFA8tJ9QPLTdUDy0+lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLRB%272%UDy0L1A8tLhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPJQPLR+UDy0CQ%303%FA8tE5QPLTyUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTtUDy0Pw%42%UDy0C1A8tD9QPLR+UDy0u1A8tOhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UDy041A8tHxRPrQB%282%BQPLRUUDy05FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0pVA8tCU%319%BQPLQnUDy03FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+1A8tG4%15%BQPLQiUDy0U1A8tJBQPLTCUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLTPUDy0lFA8tFVQPLQk%304%UDy0CFA8tHxQPLT0UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMxQPLQ/Uj+1AQ%330%UDy0C1A8tLRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSrUDy0oVA8tOBQPLT9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy06lA8tL5QPLSAUDy0QVA8tA4%335%BQPLQWUDy0pVA8tPxQPLT/UDy0/1A8tP9QPLToUDy0XlA8tAQ%346%FE+tQFQPLSCUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPtQPLTgUDy0oVA8tG5QPLQuUDy0Bg%367%FA8tDdQPLS1UDy0yVA8tJBQPLQQ%368%UDy0UlA8tO9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy091A8tMxQPLSMUDy0V1A8tBY%794%FA8tC1QPLTXUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLTqUDy0rVA8tHpQPLQ9UDy0C%821%BQPLQSUDy0tFA8tP9QPLT/UDy0/1A8tNFQPLSdUDy0X1A8tCxRPbQC%848%UT20A1A8tDpQPLRBUDy0Fg%31375%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%789%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%277%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%277%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%277%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%277%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%277%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%277%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%277%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%277%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%277%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%277%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%277%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%277%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%277%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%277%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%277%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%341%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%853%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%41162%BOO7cnUT21T1E8tW5QPLV8UDyzg087tHRRPLRiTzyzTUw5sxs%357%UECvEFE+tkJRO7RfUDyzb1E9tH5PPLSEUTy0e088tGpRPbVPUz6zJQAA/wE%415%BPPLREUTy1oVA8tOpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTgUDu0n1I7tjg%325%Tz22KlA8tY1QPbTbUDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tO9PPLSnUTu0UkBAvwQ%63%BQPbVTUDy06FA8tOhQPLToUDy06FA8tOhQPLToUDy01Q%282%UTy1SFA8tM9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTJUD2zQw%303%FM+syVQPLS8UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOBRPLVrVVWqAw%52%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%272%EZGuQtQPLOiUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/k88s5RNM7MK%288%UDuzbE88tPdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0xU0+siE%47%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%267%Uj24GVA8tNBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTMVUS7Dw%276%BQPLRzUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tONNPLMe%42%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%261%BROrkWTzy011A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0yE47sQ0%266%FE9tU9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTWVSuqBg%36%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%256%EBAvwRQPLTCUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8s6U%261%YEC/CFA7tN9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTvUDy0yFA8tLhRPLS+UDy0z1A8tPZQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Tzu0d%37%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%256%FA8s4NQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT5UDyzs088s2FQPLNATju3J049sS5QO7ZJUDyzg1A8tOBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QOrNG%256%Tzu1Z1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTy0q1I7tjg%26%IAAgAJROrM5UTy1nlA8tP1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy08FVAqgw%31%BQPbM2UTy0mFE8tJhRPLSYUTy0mFE8tJhRPLSYUDy0j%251%UzmzKFA8tPpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tblNPLMe%37%FVVqgNQPLRzUDy0+VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTW%256%Tzy0t1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RPbNl%53%E87tD1QPLTwUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tV0%325%UDy0qlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0j%59%UT21T1A8tPxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Uju2O%245%BmM8wFUDy0+FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tKY%63%BOO7ROUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A7tKM%319%BQOrYjUDy0/VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9PPbSkAAD/AQ%63%FE9tItQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0lQ%244%BMObMbUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E8tUw%69%UD21ylA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E8tdE%31%BJSbYHTUCzFE1AsxRNQLMUTUCzFE1AsxRNQLMUVTm4Eg%244%BQPLODUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOpQQK8Q%69%Ek3tg5QPLTyUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Tzy01w%244%BSPbMyUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9szY%69%UTy0e1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tO0%31%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%245%BQPLTZUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tGk%79%BQPLSZUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+1UrqgY%239%BSO7Y4UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/087s1c%69%UTqzOU89tKRPPbSkTz20pE89tKRPPbSkTz20pFE8tZ4%31%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%240%FI6tR9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09k47sQ0%79%BRPLVMUDy08FA8tPBQPLTwUDy08FA8tPBQPLTwUDy08FM5syg%239%BRPLUmUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMKAAIAC%138%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%240%E88tVpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0qQ%372%BNM7MKUDy0+lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLWvUkC2H%133%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%240%FA8tYlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTuza%379%UDy0xVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+lA8ta9QPLVdVUC1G%117%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%240%FE8tK5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTqzOQ%378%Tzu1Z1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tN1QPLSmTzu0dFE+tkJVObgS%90%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%240%FA8tMlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/TjuxDQ%378%VSuqBlA8tNxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy04FE8tK5QO7N5Tz60OmYzzAU%63%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%240%FA8tNxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT7%389%FE6tCxQPLTyUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPNRPLWhUDyzQ%53%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%240%FA8tOVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTt%394%BRPrQpUDy01VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tcBOPrYx%42%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%240%FA8tOpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTj%400%VSuqBk88tGpQPLTjUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT5TzyzYQ%36%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%240%FA8tONQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTt%410%CAAIACUD2zQ088tJpQPLTeUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E8tFU%31%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%240%FA8tNlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT7%432%Uj24GVA9tVNQPbWGUDy0uFA8s+lQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPJROrkW%26%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%240%FA8tMNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/STe2Dg%452%BSQLYcTzyzTVE7tIVQPLS/UDy0+lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9PPLSE%26%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%240%E88tKdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Tz60Og%474%VUS7D1A8tGZQPLTaUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTc%26%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%240%FA8tX9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD20aQ%484%BVK6oGUTy0mFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Uj24GQ%20%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%240%FE9tU9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0rQ%84%BRPrZCUDy09FA8tPRQPLT0UDy09FA8tPRQPLT0UDy09FE7tFI%359%D/AU88tMRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTqzOQ%20%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%240%FU5uBJQPLT9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+FVEuw8%79%BPPbVxUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tDM%239%BRPbVPUT20WFE9tFhRPbRYUT20WFE9tFhRPbRYTzu0PQ%79%E88tVpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Uj20Sw%20%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%245%BPPLPHUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/089tXE%79%BQO7O9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1VEuw8%239%BQO7POUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0z%80%E4+tjFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTy1T%21%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%245%BQPbRtUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tO5RNq4T%69%E47tydQPLT8UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDyz2%245%BQPLSqUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+VU5uBI%74%FI9tjtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Uj22Ow%20%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%245%BRNq4TUDy09VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RPbSxVVWqAw%58%gACAAlA8tLtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD20gg%244%BQPLV/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/089tHo%74%FE8tHtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTq5Fg%20%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%251%UDy1jVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTy1nmYzzAU%47%BVVaoDUTy0mFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/TTuyKw%244%BOPbEuUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/088tPdSO7Y4%64%TTyzHlA8tO1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTa%26%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%251%UTauE1A8tOtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E8tdFPPrQ6%37%FA8tDNRO7TBUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QO7Os%256%UDy01VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT0UT2zZYAAgAI%47%BQPLNAUDy041A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9PPLSE%26%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%256%FA8tVlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy02k88s5FPO7R0UD21YFE8tW5QPbSPUDy0zVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPVNPLMe%256%UD20XFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tN1QPbWGUTy1TE45sSRVPbYVUECvEFJAthxRPLM8UDyzb1A8tMJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/088tPdMObMb%26%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%261%BQPLSWUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/087tWc%266%FE8tL5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E8tHs%31%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%261%BAQL8EUDy0rVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy1f%272%FI6tR9QPLThUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Tzy0tFVVqgM%31%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%267%ZjPMBVA8tJxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPxPPbR6%282%BTPLQiUDy04VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RPbSxVTmqCQ%36%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%277%BPPLNhUDy071A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy03lE6szk%293%VT22FU89tKRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy08FE7s2gAAP8B%42%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%283%UTq5FlA8tY1QPLTzUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNpRPLVrTTOzCg%308%BQPbNDUD20tVA8tPxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOpQPLWNVUC1G%53%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD207%293%BGRrkLUTuzW1A8s6JQPLTcUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy09VE7tMFPPLSEUD2zQ4AAgAI%330%E47sRpQPbRtUDu0o1A8tNZQPLT9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy08VA8tcBQPLWNTju0TmYzzAU%421%ZjPMBVBAtyBROrQsTj2xLk08sx5GRrkL%378%BVVaoDVTm4Ek0+siFRPLMvUT60KU47sRpGRrkL%40704%UDy0w1A8tOhQPLToUDy06FA8tOhQPLToUDy06FA8tOhRPbNl%74%BQPLS4UDy06FA8tOhQPLToUDy06FA8tOhQPLToUDy06%293%BQPLTDUDy06FA8tOhQPLToUDy06FA8tOhQPLToUDy06FA8tOhQPLToUDy06FA8tOhQPLToUDy06FA8tOhQPLToTzy051A8tN1QPLTLUDy0uFA9tYZSPbRLVUCqD%315%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPbTsSzy0EQ%68%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy071E8tIhVPbYV%304%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDu0kg%68%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9PPLTnUDyzQ%299%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+007sis%63%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/FE8tUw%293%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tLw%63%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPFTObMo%288%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RO7RS%58%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLWy%288%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QO7TfYEC/C%53%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+1E8tJhRPLSYUTy0mFE8tJhRPLSYUTy0mFE8tJhQPLScUTy0rlA8tNpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTyzLw%282%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy1f%53%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%53%BPPrUtUTy0vlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD20gg%282%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09VJAthw%47%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%59%QEC/BFE8tL5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0wg%282%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tKY%47%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%64%E49sS5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy08g%282%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RPLM8%42%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%69%BQO7TfUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1UrqgY%277%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5QPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QO7POgACAAg%36%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%69%BQPLS7UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1VAtRg%277%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPRQO7SjUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0Zg%36%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%69%BRPbSxUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E2rhM%277%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPROO7EaUDy081A8tP9QPLT/UDy0/1A8tP9QPLT/UDy061BArx%32%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%69%BQPLTFUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/oAAgAI%277%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%5%UDuzeVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tZ%32%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%64%ElJtgdQPLT1UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy06w%282%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%5%SUm2B1A8tN1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPtPPbYq%26%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%64%FE7s2hQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD20tQ%282%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%10%FE9tU9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS6%26%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%59%UTyzPFA8tPRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTy1e%283%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%15%BQPLS6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UT21Tw%20%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09EBAvwRAQL8EQEC/BEBAvwRAQL8EQEC/BEBAvwRgQL8IUj24GVE8tUhQO7SfUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT9UDq2Iw%282%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%15%BPPbYqUDy0+1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy03UlJtgc%15%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSt%288%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%21%UDy1kFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/089tHo%15%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPZPPbYq%288%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%21%UECvEFA8tOtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPRMObMb%10%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tGY%293%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%26%FA8tGZQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9PPbSk%10%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy1fw%298%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%26%IAAgAJQO7POUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Tz60Og%4%BQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tO5PPLNe%304%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%31%BPO7Q9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0zIAAgAJQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTgUTy0iEs8tBE%309%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%37%Tzy0p1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/089tWRQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+VA8tXxQPLV8UDy1fFA8tXxQPLV8UDy1fFA8tXxQPLV8UDy1fFE8tHtPPLRqTz2zVE07sis%325%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%37%Tz6wHVA8tPVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOpQPLTaUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%395%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%42%FA7tH1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%395%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%42%GBAvwhQO7TfUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%395%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%47%BQPbVTUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%395%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%53%UTy0vlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%395%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%53%Tz61LVA8tPxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%395%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%58%E88s5RQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%395%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%58%FU5uBJQPLTtUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%395%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%63%BPPLRqUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%395%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%63%BVVaoDUDy00lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%395%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%69%UDyzQFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%395%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%FE8tKtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%395%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%FI6tR9QPLT2UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%292%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%39872%EBAvwRQOrUwUTy0VVE8s3JRPbR+Tzy0hFA7s3lRO7NoUDqzRkw5sxs%389%UECvEFE+tkJRO7RfUDyzb1E9tH5PPLSEUTy0e088tGpRPbVPUz6zJQAA/wE%378%FU5qglPPLVaUDyzs1A8tPNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTeTzyzkVI6sjU%357%Tz22KlA8tY1QPbTbUDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tO9PPLSnUTu0UkBAvwQ%351%BmM8wFUTyzclA8tOhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RO7TBTzu0PQ%335%FM+syVQPLS8UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOBRPLVrVVWqAw%335%FI9szJQPLTTUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/lE7s5tNM7MK%320%UDuzbE88tPdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0xU0+siE%325%UDy1WVA8tPZQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RPLXRUjq1Hw%308%BQPLRzUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tONNPLMe%314%BPPLNhUDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy04E0+siE%298%FE9tU9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTWVSuqBg%303%FE8tUxQPLT9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tNtLPLQR%288%YEC/CFA7tN9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTvUDy0yFA8tLhRPLS+UDy0z1A8tPZQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Tzu0d%299%UDq2I1A8tPFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLThUDy0jFE9tU9QPbM2Tju3J1E9sj9QPLVdUDy0qVA8tPRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS4%288%Tzu1Z1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTy0q1I7tjg%26%IAAgAJROrM5UTy1nlA8tP1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy08FVAqgw%290%P8BUTu0wVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy07k89tWQAAP8B%37%FVEuw9PPLSaUDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Tzu1Zw%282%Tzy0t1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RPbNl%53%E87tD1QPLTwUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tV0%287%BQPbRcUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTaTDmzGw%58%TzyzUVA8tPtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy07lBArx%272%BmM8wFUDy0+FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tKY%63%BOO7ROUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A7tKM%282%FVVqgNQPLTdUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOBSQLYc%69%FE8tFVQPLT+UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8s4M%271%BMObMbUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E8tUw%69%UD21ylA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E8tdE%282%FE9tU9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/047tEE%79%BPPLSaUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOpVK6oG%266%BSPbMyUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9szY%69%UTy0e1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tO0%282%FE9tLFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTy1ng%84%BQQK8QUDy06lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPbVT%266%BSO7Y4UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/087s1c%69%UTqzOU89tKRPPbSkTz20pE89tKRPPbSkTz20pFE8tZ4%277%VTmqCVA8tPZQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Tz22Kg%90%Tzyzh1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RPLWh%266%BRPLUmUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMKAAIAC%384%UTu1RVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9PPLTE%96%TjmxJFA8tP5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTm%266%BNM7MKUDy0+lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLWvUkC2H%379%Tz20elA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QO7N5%101%FA8tNVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/TjuxGg%266%UDy0xVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+lA8ta9QPLVdVUC1G%363%UDyzpVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPbND%101%FA8s6JQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Tz20Rw%266%Tzu1Z1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tN1QPLSmTzu0dFE+tkJVObgS%336%Tzy0xFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9LPLQR%101%FA8s29QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UT2zZQ%266%VSuqBlA8tNxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy04FE8tK5QO7N5Tz60OmYzzAU%309%UDy02lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPw%106%FA8tVlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UT20fg%271%FE6tCxQPLTyUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPNRPLWhUDyzQ%299%UTy05FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tO0%106%FA7tklQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy1iQ%276%BRPrQpUDy01VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tcBOPrYx%288%UDyz6VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E8tOQ%106%FE8szxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/TzyzkQ%282%VSuqBk88tGpQPLTjUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT5TzyzYQ%282%UDy14lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPI%106%FE8tUhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UT20iw%292%CAAIACUD2zQ088tJpQPLTeUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E8tFU%277%UDy01lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP5VVaoD%101%FA8tVlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDyzg%315%Uj24GVA9tVNQPbWGUDy0uFA8s+lQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPJROrkW%272%UDy0u1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9NPLMe%101%FA8tHNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0Zg%340%BSQLYcTzyzTVE7tIVQPLS/UDy0+lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9PPLSE%272%Tzy0mlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9PPbNU%101%FA8tKlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDqzRg%362%VUS7D1A8tGZQPLTaUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTc%272%Tzy0alA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSM%101%FA8tOFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTq5Fg%372%BVK6oGUTy0mFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Uj24GQ%266%Uj2zMlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLXigACAAg%90%Tz60OlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTe%386%D/AU88tMRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTqzOQ%268%D/AVA8tOZQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/TzuzSg%90%UDu0o1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9PPLOU%266%BRPbVPUT20WFE9tFhRPbRYUT20WFE9tFhRPbRYTzu0PQ%79%E88tVpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Uj20Sw%271%E88s5RQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0zFVVqgM%79%BOPbEuUDy0+lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLN%267%BQO7POUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0z%80%E4+tjFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTy1T%272%FE8sy9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/087tHQ%74%FVVqgNQPLTMUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8s9g%271%BQPLSqUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+VU5uBI%74%FI9tjtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Uj22Ow%276%BQPbW5UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPpPPLNN%64%gACAAlA7tKNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/088s2E%271%BQPLV/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/089tHo%74%FE8tHtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTq5Fg%276%BOO7U0UDy0/VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT5UTuzWw%52%BOO7ENUDyzpVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTy01FVVqgM%271%BOPbEuUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/088tPdSO7Y4%64%TTyzHlA8tO1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTa%288%UDu0klA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tLVSOrI1%32%VTmqCVE7s1tQPLTjUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT9Uju2O%283%UDy01VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT0UT2zZYAAgAI%47%BQPLNAUDy041A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9PPLSE%288%TTOzClA8tNJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy03VA8s6JRPLSIUTy0e088s5FRPbSxUDy09FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLO%289%UD20XFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tN1QPbWGUTy1TE45sSRVPbYVUECvEFJAthxRPLM8UDyzb1A8tMJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/088tPdMObMb%293%E0+siFQPLPpUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tK0AAP8B%293%FE8tL5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E8tHs%303%BNO7IrUDyz6VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Tzy0tFUrqgY%298%FI6tR9QPLThUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Tzy0tFVVqgM%309%TT6yIVE8tdFQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9PPbWXZjPMBQ%308%BTPLQiUDy04VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RPbSxVTmqCQ%319%FU5qglRPbSLUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Tzy051A9tVM%325%VT22FU89tKRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy08FE7s2gAAP8B%336%Tju3J1A9tKBQPLT4UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOZRPLV4TjuxDQ%340%BQPbNDUD20tVA8tPxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOpQPLWNVUC1G%357%BQQK8QTzyzYU89tKRQPLTcUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy09VA8tMxQPLWQUDqzRlVVqgM%362%E47sRpQPbRtUDu0o1A8tNZQPLT9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy08VA8tcBQPLWNTju0TmYzzAU%389%ZjPMBVI6tR9NO7IrTj62MU47tydON7EX%410%BVVaoDVTm4Ek0+siFRPLMvUT60KU47sRpGRrkL%39354%BOO7cnUT21T1E8tW5QPLV8UDyzg087tHRRPLRiTzyzTUw5sxs%831%BPPLREUTy1oVA8tOpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTgUDu0n1I7tjg%69%TzyzkVA8tOhQPLToUDy06FA8tOhQPLToUDy06FE8tJg%255%BQPLTDUDy06FA8tOhQPLToUDy06FA8tOhQPLToUDy06FA8tOhQPLToUDy06FA8tOhQPLToUDy06FA8tOhQPLToUDy06FA8tOhQPLToUDy06FA8tOhQPLToUDy06FA8tOhQPLToUDy06FA9tLU%293%UTy1SFA8tM9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTJUD2zQw%58%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMg%282%EZGuQtQPLOiUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/k88s5RNM7MK%48%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMg%277%Uj24GVA8tNBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTMVUS7Dw%42%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMg%271%BROrkWTzy011A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0yE47sQ0%37%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMg%266%EBAvwRQPLTCUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8s6U%37%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMg%266%FA8s4NQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT5UDyzs088s2FQPLNATju3J049sS5QO7ZJUDyzg1A8tOBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QOrNG%32%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+1E8tJhRPLSYUTy0mFE8tJhRPLSYUTy0mFE8tJhRPLSYUTy0mFE8tJhRPLSYUTy0mFE8tJhRPLSYUTy0mFE8tJhRPLSYUTy0mFA9s3Y%261%UzmzKFA8tPpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tblNPLMe%37%FVVqgNQPLRzUDy0+VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTW%32%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%363%UDy0qlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0j%59%UT21T1A8tPxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Uju2O%27%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%357%BQOrYjUDy0/VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9PPbSkAAD/AQ%63%FE9tItQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0lQ%26%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%357%BQPLODUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOpQQK8Q%69%Ek3tg5QPLTyUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Tzy01w%26%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%357%BQPLTZUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tGk%79%BQPLSZUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+1UrqgY%21%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%352%FI6tR9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09k47sQ0%79%BRPLVMUDy08FA8tPBQPLTwUDy08FA8tPBQPLTwUDy08FM5syg%21%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%352%E88tVpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0qQ%154%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%352%FA8tYlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTuza%155%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%352%FE8tK5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTqzOQ%154%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/VE8tNRRPLTUUTy01FE8tNRRPLTUUTy01FE8tNRRPLTUUTy01FE8tNRRPLTUUTy01FE8tNRRPLTUUTy01FE8tNRQPLRz%261%FA8tMlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/TjuxDQ%154%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSM%261%FA8tNxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT7%160%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSM%261%FA8tOVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTt%160%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSM%261%FA8tOpQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTj%160%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSM%261%FA8tONQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTt%160%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSM%261%FA8tNlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT7%160%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/FA7s6xQO7OsUDuzrFA7s6xQO7OsUDuzrFA7s6xQO7OsUDuzrFA7s6xQO7OsUDuzrFA7s6xQO7OsUDuzrFA7s6xPPLNe%261%FA8tMNQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/STe2Dg%154%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%352%E88tKdQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/Tz60Og%154%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%352%FA8tX9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD20aQ%154%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%352%FE9tU9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0rQ%84%BRPrZCUDy09FA8tPRQPLT0UDy09FA8tPRQPLT0UDy09FE7tFI%21%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%352%FU5uBJQPLT9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+FVEuw8%79%BPPbVxUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tDM%21%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%357%BPPLPHUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/089tXE%79%BQO7O9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1VEuw8%21%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%357%BQPbRtUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tO5RNq4T%69%E47tydQPLT8UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDyz2%27%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%357%BRNq4TUDy09VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RPbSxVVWqAw%58%gACAAlA8tLtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD20gg%26%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%363%UDy1jVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTy1nmYzzAU%47%BVVaoDUTy0mFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/TTuyKw%26%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%363%UTauE1A8tOtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E8tdFPPrQ6%37%FA8tDNRO7TBUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QO7Os%32%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%368%FA8tVlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy02k88s5FPO7R0UD21YFE8tW5QPbSPUDy0zVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPVNPLMe%32%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%373%BQPLSWUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/087tWc%37%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%373%BAQL8EUDy0rVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy1f%43%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%379%ZjPMBVA8tJxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPxPPbR6%48%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%389%BPPLNhUDy071A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy03lE6szk%53%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%395%UTq5FlA8tY1QPLTzUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNpRPLVrTTOzCg%58%UD20oFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tag%255%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%405%BGRrkLUTuzW1A8s6JQPLTcUDy0/FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy09VE7tMFPPLSEUD2zQ4AAgAI%837%ZjPMBVBAtyBROrQsTj2xLk08sx5GRrkL%40650%BQPLTDUDy06FA8tOhQPLToUDy06FA8tOhQPLToUDy06FA8tOhQPLToUDy06FA8tOhQPLToUDy06FA8tOhQPLToUDy06FA8tONQPLPYUDy0v1E7s5tRPLRiVUC1G%443%UDy0w1A8tOhQPLToUDy06FA8tOhQPLToUDy06FA8tN0%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/U88tLRROrM5%432%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT+UTy0mFUrqgY%421%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tLVVVaoD%416%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RPLR7%416%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT5UTy1Jg%410%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+1E8tJhRPLSYUTy0mFE8tJhRPLSYUTy0mFE8tJhRPLSYTzy0mlA9tahQPLTNUDy0/VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTy1ng%410%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%59%UkC2HFA8tKlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09mBAvwg%405%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%67%/wFQPbS1UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/047tEE%405%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%69%BOO7RBUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/088s2E%31%BVQKoMTUCzFE1AsxRNQLMUTUCzFE1AsxRNQLMUTjuxDQ%20%BAQL8EUD2zQ1A9s3ZPPLOHUTq0L%283%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%69%BVPbYVUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E7s2g%31%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21q%16%E88s2FRPLTkUDy0/1A8tP9QPLT/UT20W%283%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%69%BOO7EaUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/047tE4%31%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21q%5%BVK6oGUDyzpVA8tP9QPLT/UDy0/1A8tP9QPLT/UT20W%283%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%69%BRO7RSUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/FE6uRY%31%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21q%5%BRPLWhUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UT20W%283%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%64%FVAqgxRPLXRUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDuzr%37%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21qFE9tFhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UT20W%283%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%53%BGRrkLUD21U1A8tNVQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTxUzy0Ig%36%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0rVA8teJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UT20W%283%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/VE8tNRRPLTUUTy01FE8tNRRPLTUUTy01FE8tNRRPLTUUDy01VA8tONQPLT9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/088tPdQOrNG%42%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UT20W%283%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDyz6VE8szw%47%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPxRPLXRUDy0ulA9tLVQPLTJUTy1T%283%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS4VUC1G%53%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTyUDu0cEk3tg4%309%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RPLTkTzyzTQ%52%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPFNO7Ir%320%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tIyAAIAC%42%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/088tGo%325%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLOlVVWqAw%36%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+U0zswo%325%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/FA7s6xQO7OsUDuzrFA7s6xQO7OsUDuzrFA7s6xQO7OsUDuzrFA7tLBRO7TBUD207FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UT20iw%36%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0yQ%330%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%61%D/AVA9s0NQPLTSUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/087tD0%31%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UT20sQ%330%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%69%BJN7YOUDy01lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tMI%31%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21q%331%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%75%Tz2zVFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9TPLQi%26%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21q%331%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%75%UECvEFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9PPLNe%26%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21q%331%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%80%FA8tPlQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLV8%26%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21q%331%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%75%YEC/CFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RPbR+%26%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21q%331%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%75%Tju0QVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPbRp%26%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21q%331%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%69%CAAIACUDuzvVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9ROrM5%26%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21q%331%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy09%64%FI9uBlRPLSuUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPBAQL8E%26%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21q%331%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+lA8s4BQPLOAUDyzgFA8s4BQPLOAUDyzgFA8s4BQPLOAUDyzgFA8s4NQPbSTUDy1wFA8tPtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E9tIs%31%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21q%331%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy08k47sRo%31%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21q%331%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDu0Yw%36%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21q%331%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLSd%42%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21q%331%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0+087tIGAAIAC%42%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21q%331%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPpQPLSmTz22Kg%52%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21q%331%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%287%BQPLPYUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP1QPLT1UDy041A8tMVPPbWXUD20XEs8tBE%63%BQPbSgUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UD21q%331%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%41055%BLPLQRUD21U1A8s4BQPLSdUDy0qlA8s6VPPLORUTy0e1E7tUVNM7MK%448%UDy0w1A8tOhQPLToUDy06FA8tOhQPLToUDy06FA8tN0%74%Ek3tg5QPLToUDy06FA8tOhQPLToUDy06FA8tOhQPLToUD20tQ%218%Tj61PlA7tLBQPLT8UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT6UDu0sFI7tjg%437%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%FBArxBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%208%FE6uRZQPbWoUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QO7SwVTm4Eg%426%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%FBArxBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%203%Uzy0IlA8tN1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy04VI9szI%421%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%FBArxBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%197%BRNq4TUDy04VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOpQOrYj%416%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%FBArxBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%197%BQO7SfUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTZYEC/C%411%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%FBArxBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%192%FE8tSZQPLT9UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP1QPLS7UTu0hVE9tH5PPLSnUDy08lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTy1e%411%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%FBArxBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%192%FE7tI5QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy03FA8tDM%21%VT22FVA8tbJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy08UZGuQs%405%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%FBArxBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%192%FA7tN9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLToUkC2H%32%FVVqgNQPLS6UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E9tU8%405%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%FBArxBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%187%UkC2HFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9PO7NX%42%BNPLMeUDy0+lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tJk%405%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%FBArxBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%187%UT20WFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8teKAAIAC%48%Tzy0tFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E8tL4%405%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%FBArxBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%187%Tz20elA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E8tZ4%53%UDyzgFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNU%405%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%FBArxBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%187%UTu0jlA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E8tXg%53%UDy0c1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tOM%405%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%FBArxBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%187%UDu0n1A8tPxQPLT8UDy0/FA8tPxQPLT8UDy0/E87tWc%53%UD20k1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tNY%405%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%FBArxBQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%277%CAAIACUDy02VA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tLU%405%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPxQPLS4UDy0uFA8tLhQPLS4UDy0uFA8tLhQPLS4UDy0uFA8tLhQPLS4UDy0uFA8tLhQPLS4UDy0uFA8tLxQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%277%BPPLNeUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8s4%406%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%272%E8+tS1QPLTzUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E6tCw%405%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%267%Tju1NFA8tOtQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDu0s%411%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%261%BRPLVMUDy09FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLPpUj24GQ%410%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%256%FA9tG1QPLT8UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tO9QOrUw%416%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%251%Tzy0d1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy04VE6tCw%421%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP1QPLTIUDy0yFA8tMhQPLTIUDy0yFA8tMhQPLTIUDy0yFA8tMhQPLTIUDy0yFA8tMhQPLTIUDy0yFA8tMhQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%245%BRPbVPUDy0/lA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLS7TjexFw%426%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%EBAvwRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%240%FU5qglQPLThUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/FA7tH2AAIAC%432%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%EBAvwRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%240%FA9tG1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLTvUD2zQw%442%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%EBAvwRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%240%FA8tMJQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPZQPLQz%448%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%EBAvwRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%235%Rka5C1A8tP1QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tZ%454%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%EBAvwRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%235%Uz6zJVA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A9tVM%453%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%EBAvwRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%235%UTyzPFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E6szk%453%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%EBAvwRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%235%Uz6zJVA8tIxQPLSMUDy0jFA8tIxQPLSMUDy0jEw5sxs%453%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%EBAvwRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%731%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%EBAvwRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%731%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%EBAvwRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%235%UD2zdlE8tJhRPLSYUTy0mFE8tJhRPLSYUTy0mFE8tJiAAIAC%69%E87tD1RPLSYUTy0mFE8tJhRPLSYUTy0mFE8tJhRPLSYTzu0PQ%20%BPO7Q9UTy0mFE8tJhRPLSYUTy0mFE8tJhRPLSYUTy0mE87tD0%21%Tzu0PVE8tJhRPLSYUTy0mFE8tJhRPLSYUTy0mFE8tJhPO7Q9%192%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%EBAvwRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%235%UDy0yFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9AQL8E%69%FE7s2hQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTuza%21%BRO7NoUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E7s2g%21%UTuzaFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RO7No%192%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%EBAvwRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%235%UDy0yFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9AQL8E%69%FE7s2hQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTuza%21%BRO7NoUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E7s2g%21%UTuzaFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RO7No%192%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%EBAvwRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%235%UDy0yFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9AQL8E%69%FE7s2hQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTuza%21%BRO7NoUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E7s2g%21%UTuzaFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RO7No%192%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%EBAvwRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%235%UDy0yFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9AQL8E%69%FE7s2hQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTuza%21%BRO7NoUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E7s2g%21%UTuzaFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RO7No%192%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%EBAvwRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%235%UDy0yFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9AQL8E%69%FE7s2hQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTuza%21%BRO7NoUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E7s2g%21%UTuzaFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RO7No%192%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%EBAvwRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%235%UDy0yFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9AQL8E%69%FE7s2hQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTuza%21%BRO7NoUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E7s2g%21%UTuzaFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RO7No%192%UDyz2FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tPQ%74%EBAvwRQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0y%235%UDy0yFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9AQL8E%69%FE7s2hQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UTuza%21%BRO7NoUDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1E7s2g%21%UTuzaFA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9RO7No%20656%\")):at(e,dV)?new _o(iv(t,84,252,\"%2549%P8AAO7/AAD/%432%/wAA3P8AAP//AAD//wAA/w%420%D/AACt/wAA//8AAP//AAD//wAA//8AAP8%163%D/%250%D/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/%158%D/%4%/w%239%P8AAPz/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA/w%152%D/%4%/wAAAP8%229%/wAA6/8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP8%147%D/%4%/wAAAP8AAAD/%218%D/AAC9/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/%142%D/%4%/wAAAP8AAAD/%4%/w%207%P8AAI//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA/w%136%D/%4%/wAAAP8AAAD/%4%/wAAAP8%202%P8AAPz/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP8%131%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%192%/wAA7P8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/%126%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/w%180%D/AADN/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA/w%120%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8%170%P8AAJ7/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP8%115%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%165%P8AAP7/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/%110%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/w%154%/wAA7v8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA/w%104%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8%143%D/AADc/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP8%99%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%133%P8AAK3/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/%94%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/w%127%P8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA/w%88%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%128%/wAA/P8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP8%83%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8%127%D/AADr/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/%78%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/w%127%P8AAL3/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA/w%72%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%133%P8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA6w%72%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8%133%/wAA/P8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP7/AACt%78%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/w%132%D/AADs/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA3%89%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%133%P8AAM3/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAPw%99%D/%4%/wAAAP8AAAD/%4%/wAAAP8%138%P8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA3%105%D/%4%/wAAAP8AAAD/%4%/w%138%/wAA/v8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAPs%115%D/%4%/wAAAP8AAAD/%138%D/AADu/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAAzQ%120%D/%4%/wAAAP8%138%P8AANz/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAPs%131%D/%4%/w%138%/wAArf8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAAvg%136%D/%144%/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAO4%287%D/AAD8/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAAvQ%287%P8AAOv/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAOs%293%/wAAvf8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD+%304%/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAOs%303%D/AAD8/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD8%309%P8AAOz/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AANw%309%/wAAzf8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD7%320%/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAM0%319%D/AAD+/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD7%325%P8AAO7/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAL4%325%/wAA3P8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AADu%336%/wAA//8AAP//AAD//wAA//8AAP//AAD/UDy0/1A8tP9QPLT/UDy0/1A8tP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAL0%335%D/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/UDy0/1A8tP9QPLT/UDy0/1A8tP//AAD//wAA//8AAP//AAD//wAA//8AAP//AADr%341%P8AAPz/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/UDy0/1A8tP9QPLT/UDy0/1A8tP//AAD//wAA//8AAP//AAD//wAA/g%346%/wAA6/8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/UDy0/1A8tP9QPLT/UDy0/1A8tP//AAD//wAA//8AAP//AADr%352%/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/UDy0/1A8tP9QPLT/UDy0/1A8tP//AAD//wAA/%357%D/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/UDy0/1A8tP9QPLT/UDy0/1A8tP//AADc%357%P8AAPz/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/UDy0/1A8tP9QPLT/UDy0/1A8tP8%325%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/UDy0/1A8tP9QPLT/UDy0/1A8tP8%15%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%79%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%144%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/UDy0/1A8tP9QPLT/UDy0/1A8tP8%10%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%58%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%122%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP//AAD//wAA//8AAP//AAD//wAA//8AAP//AADNUDy0/1A8tP9QPLT/UDy0/1A8tP8%5%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%47%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%111%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP//AAD//wAA//8AAP//AAD//wAA7g%10%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%37%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%106%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT//wAA//8AAP8%21%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%32%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%5%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%96%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%5%P8AABH/AAD//wAA//8AAP//AAD/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT//wAA7%27%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%21%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%26%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%32%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%96%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%5%P8AABH/AAD//wAA//8AAP//AAD//wAA/1A8tP9QPLT/UDy0/1A8tP9QPLT/%32%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%31%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%26%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%37%FA8tP9QPLT/UDy0/1A8tP9QPLT/%96%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%10%D/AAAD/wAA//8AAP//AAD//wAA/1A8tP9QPLT/UDy0/1A8tP9QPLT/%32%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%42%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%21%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%208%/wAAA/8AAP//AAD/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%32%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%42%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%21%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%181%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%32%UDy0/1A8tP9QPLT/UDy0/1A8tP8%47%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%21%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%144%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%32%UDy0/1A8tP9QPLT/UDy0/1A8tP8%53%UDy0/1A8tP9QPLT/UDy0/1A8tP8%26%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%116%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%32%UDy0/1A8tP9QPLT/UDy0/1A8tP8%53%UDy0/1A8tP9QPLT/UDy0/1A8tP8%31%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%106%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%15%FA8tP9QPLT/UDy0/1A8tP9QPLT/%32%UDy0/1A8tP9QPLT/UDy0/1A8tP8%53%UDy0/1A8tP9QPLT/UDy0/1A8tP8%42%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%96%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%31%FA8tP9QPLT/UDy0/1A8tP9QPLT/%32%UDy0/1A8tP9QPLT/UDy0/1A8tP8%47%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%63%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%90%UDy0/1A8tP9QPLT/UDy0/1A8tP8%42%FA8tP9QPLT/UDy0/1A8tP9QPLT/%32%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%42%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%79%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%90%UDy0/1A8tP9QPLT/UDy0/1A8tP8%37%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%32%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%42%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%90%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%90%UDy0/1A8tP9QPLT/UDy0/1A8tP8%37%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%32%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%31%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%20%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%42%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%90%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%26%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%32%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%21%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%20%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%37%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%90%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%32%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%32%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%96%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%32%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%32%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%101%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%5%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%26%UDy0/1A8tP9QPLT/UDy0/1A8tP8%5%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%42%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%111%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%10%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%26%UDy0/1A8tP9QPLT/UDy0/1A8tP8%10%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%52%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%127%FA8tP9QPLT/UDy0/1A8tP9QPLT/%122%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%79%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%6208%D/AP8A/wD/%433%P8A/wD/AP8A/wD/AP8A/w%422%/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8%163%D/%252%/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/%158%D/%4%/w%240%D/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/w%152%D/%4%/wAAAP8%230%P8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8%147%D/%4%/wAAAP8AAAD/%220%/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/%142%D/%4%/wAAAP8AAAD/%4%/w%208%D/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/w%136%D/%4%/wAAAP8AAAD/%4%/wAAAP8%203%D/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8%131%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%193%P8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/%126%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/w%182%/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/w%120%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8%171%D/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8%115%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%166%D/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/%110%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/w%155%P8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/w%104%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8%145%/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8%99%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%134%D/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/%94%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/w%128%D/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/w%88%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%129%P8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8%83%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8%129%/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/%78%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/w%128%D/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/w%72%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%134%D/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/w%72%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8%134%P8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/%78%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/w%134%/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/w%88%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%134%D/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8%99%D/%4%/wAAAP8AAAD/%4%/wAAAP8%139%D/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/w%104%D/%4%/wAAAP8AAAD/%4%/w%139%P8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8%115%D/%4%/wAAAP8AAAD/%140%/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/w%120%D/%4%/wAAAP8%139%D/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8%131%D/%4%/w%139%P8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/w%136%D/%145%P8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8%289%/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/w%288%D/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8%294%P8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/%305%P8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8%305%/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/%310%D/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8%310%P8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/%321%P8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8%321%/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/%326%D/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8%326%P8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/%337%P8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8%63%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%241%/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/%64%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%224%D/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/w%68%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%214%P8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/%69%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%214%P8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/w%79%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%4%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%204%/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/%80%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%21%FA8tP9QPLT/UDy0/1A8tP9QPLT/%198%D/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/w%90%UDy0/1A8tP9QPLT/UDy0/1A8tP8%26%FA8tP9QPLT/UDy0/1A8tP9QPLT/%193%P8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/%96%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%21%FA8tP9QPLT/UDy0/1A8tP9QPLT/%188%/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/w%106%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%21%FA8tP9QPLT/UDy0/1A8tP9QPLT/%188%/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/%117%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%10%UDy0/1A8tP9QPLT/UDy0/1A8tP8%187%D/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/w%127%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%187%P8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8%143%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%182%/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/w%154%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%193%/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8%159%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%203%P8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/w%159%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%26%FA8tP9QPLT/UDy0/1A8tP9QPLT/%150%D/AP8A/wD/AP8A/wD/AP8%165%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%21%FA8tP9QPLT/UDy0/1A8tP9QPLT/%156%/wD/AP8A/w%164%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%15%FA8tP9QPLT/UDy0/1A8tP8%330%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%15%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%5%UDy0/1A8tP9QPLT/UDy0/1A8tP8%330%FA8tP9QPLT/UDy0/1A8tP9QPLT/%26%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%5%UDy0/1A8tP9QPLT/UDy0/1A8tP8%325%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%32%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%325%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%37%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%330%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%37%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%330%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%42%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%336%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%36%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%341%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%21%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%335%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%335%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%336%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%5%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%335%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%21%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%351%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%6242%//8AAP//%434%D//wAA//8AAP//AAD//w%423%P//AAD//wAA//8AAP//AAD//wAA//8%163%D/%253%P//AAD//wAA//8AAP//AAD//wAA//8AAP//%158%D/%4%/w%242%//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w%152%D/%4%/wAAAP8%231%D//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8%147%D/%4%/wAAAP8AAAD/%221%P//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//%142%D/%4%/wAAAP8AAAD/%4%/w%210%//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w%136%D/%4%/wAAAP8AAAD/%4%/wAAAP8%205%//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8%131%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%194%D//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//%126%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/w%183%P//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w%120%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8%173%//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8%115%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%168%//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//%110%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/w%156%D//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w%104%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8%146%P//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8%99%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%136%//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//%94%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/w%130%//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w%88%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%130%D//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8%83%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8%130%P//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//%78%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/w%130%//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w%72%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%136%//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w%72%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/wAAAP8%135%D//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//%78%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%4%/w%135%P//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w%88%D/%4%/wAAAP8AAAD/%4%/wAAAP8AAAD/%136%//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8%99%D/%4%/wAAAP8AAAD/%4%/wAAAP8%141%//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w%104%D/%4%/wAAAP8AAAD/%4%/w%140%D//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8%115%D/%4%/wAAAP8AAAD/%141%P//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w%120%D/%4%/wAAAP8%141%//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8%131%D/%4%/w%140%D//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w%136%D/%146%D//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8%290%P//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w%290%//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8%295%D//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//%306%D//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8%306%P//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//%312%//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8%311%D//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//%322%D//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8%322%P//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//%328%//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8%327%D//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//%338%D//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8%338%P//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//%344%//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w%348%D//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//%354%D//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w%359%P//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//%360%//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w%364%D//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//%48%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%63%FA8tP9QPLT/UDy0/1A8tP9QPLT/%21%FA8tP9QPLT/UDy0/w%151%P//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w%42%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%53%FA8tP9QPLT/UDy0/1A8tP9QPLT/%10%BQPLT/UDy0/1A8tP9QPLT/UDy0/w%151%P//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//%42%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%47%FA8tP9QPLT/UDy0/1A8tP9QPLT/%5%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%146%//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w%47%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%42%FA8tP9QPLT/UDy0/1A8tP9QPLT/%5%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%140%D//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8%53%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%37%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%135%P//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w%58%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%26%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%31%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%135%P//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8%63%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%37%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%31%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%167%D//wAA//8AAP//AAD//wAA//8AAP//AAD//w%68%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%47%BQPLT/UDy0/1A8tP9QPLT/UDy0/w%31%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%178%//8AAP//AAD//wAA//8%79%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%47%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%26%FA8tP9QPLT/UDy0/1A8tP9QPLT/%189%P//AAD//w%84%BQPLT/UDy0/1A8tP9QPLT/UDy0/w%52%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%26%FA8tP9QPLT/UDy0/1A8tP9QPLT/%282%BQPLT/UDy0/1A8tP9QPLT/UDy0/w%52%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%26%FA8tP9QPLT/UDy0/1A8tP9QPLT/%282%BQPLT/UDy0/1A8tP9QPLT/UDy0/w%52%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%26%FA8tP9QPLT/UDy0/1A8tP9QPLT/%282%BQPLT/UDy0/1A8tP9QPLT/UDy0/w%52%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%26%FA8tP9QPLT/UDy0/1A8tP9QPLT/%282%BQPLT/UDy0/1A8tP9QPLT/UDy0/w%52%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%26%FA8tP9QPLT/UDy0/1A8tP9QPLT/%282%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%47%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%26%FA8tP9QPLT/UDy0/1A8tP9QPLT/%282%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%47%BQPLT/UDy0/1A8tP9QPLT/UDy0/w%31%FA8tP9QPLT/UDy0/1A8tP9QPLT/%282%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%37%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%31%FA8tP9QPLT/UDy0/1A8tP9QPLT/%288%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%26%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%31%FA8tP9QPLT/UDy0/1A8tP9QPLT/%288%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%37%FA8tP9QPLT/UDy0/1A8tP9QPLT/%293%FA8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP8%42%FA8tP9QPLT/UDy0/1A8tP9QPLT/%298%BQPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%47%FA8tP9QPLT/UDy0/1A8tP9QPLT/%304%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/%53%FA8tP9QPLT/UDy0/1A8tP9QPLT/%320%UDy0/1A8tP9QPLT/UDy0/1A8tP9QPLT/UDy0/w%3754%\")):null}var iy=\"object\",$A=`\n`,h2=\"boolean\",n9=\"number\",mf=\"string\",Et=2147483647,T2='For input string: \"',P9=\"null\",T0={4:1,9:1,5:1,8:1},Rp=\"__noinit__\",A0={4:1,5:1,8:1},aA={4:1,19:1,32:1,27:1},Dt={4:1,9:1,14:1,5:1,11:1,8:1,13:1},u0=65536,c1=65535,AP=1e4,YQ=\"fromIndex: \",jp=\" > toIndex: \",o6=\", toIndex: \",pp=\", length: \",U6=\"Index: \",L6=\", Size: \",Tt={15:1,4:1,5:1},kf={4:1},k={7:1,4:1,5:1},ui=16777215,nP=65280,bf=.30000001192092896,r9=545460846592,s8=4294967296,i9=8589934592,f9=17179869184,D9=34359738368,u9=68719476736,Q9=137438953472,Rf=274877906944,ft={12:1,4:1,5:1},a0=536870912,ge=8192,s6=2.617993878,y6=3.665191429,F0=6.283185307179586,U1=3.141592653589793,RA=1.5707963267948966,Sn=16384,fy=-8355712,C0=4096,KQ={l:0,m:0,h:1},XQ={l:0,m:0,h:2},ZQ={l:0,m:0,h:4},PP=1920,re=1024,ir=234881024,WQ=167772160,jf=100663296,pf=201326592,Qi=114688,oi=4063232,_Q=3801088,c2=3538944,w2=3014656,$Q=3145728,IA=2097152,Ui=393216,qP=917504,Cf=1966080,Hf=0xf8000000000,Dy=0xf0000000000,uy=0xe8000000000,Qy=0xd8000000000,oy=0xb8000000000,l6=0xe0000000000,h6=0xc0000000000,aQ=8796093022208,g2=549755813888,Uy=1649267441664,Ly=3848290697216,to=8246337208320,T6=0xc8000000000,c6=9345848836096,w6=0x98000000000,fr=29360128,d2={l:0,m:0,h:120},o9=268435456,N1=2048,y8=32768,eo=-1.5707963267948966,l8=130560,Ao=6291456,g6=-2.0943951023931953,AA=1.0471975511965976,B2=.5235987755982988,F1=786432,h8=524288,T8=262144,qn=-16777216,IP=-65536,rP=16711680,sy=-32768,d6='<DrawingObject type=\"',B6=\"></DrawingObject>\",_t={4:1,5:1,16:1},te={4:1,5:1},v6=\"unsupported atomicNo:\",Cp=2.8415926535897933,f0={28:1,4:1,9:1,5:1,8:1},v2={4:1,5:1,11:1,8:1},q={10:1,4:1,5:1},nA={4:1,9:1,5:1,8:1,30:1},I0=131072,yy=196608,ly={l:6,m:0,h:4},c8=1048576,w8=3221225472,F6={l:0,m:0,h:3},Mf=8388608,hy={36:1,43:1,38:1},Ye={4:1,9:1,5:1,11:1,8:1},Hp={36:1,43:1,94:1,38:1,83:1},Ty={4:1,5:1,36:1,43:1,94:1,20:1,38:1,83:1,125:1},Ve=17976931348623157e292,m6=-17976931348623157e292,U9={87:1,73:1,74:1,4:1,9:1,5:1,8:1},_1=\"??\",g8={58:1,4:1,9:1,5:1,8:1},d8=2013265920,jA=32505856,hn=31744,cy=122880,F2={127:1,4:1,9:1,5:1,11:1,8:1},no=33554432,Tn=67108864,wy=-131073,gy=-33554433,dy=-33292289,k6=-3.141592653589793,x0=4194303,cn=3072,PA={46:1,4:1,5:1},b6=.7853981633974483,Mp=3.061592653589793,wn=1073741824,Vp=541165879296,Vt={17:1,4:1,5:1,8:1},By=281.17,vy=289.19,Fy=294.21,my=\"0.0000\",ky=\"NOSEARCH_OCL_CUSTOM_LABEL\",Dr=\"M  END\",P1=-2147483648,m2=\"ATOMS\",Po=\"$$$$\",ro=\"M  V30 \",Ep=\"M  V30 COUNTS \",Sp=\"M  V30 MDLV30/STEREL\",qp=\"M  V30 MDLV30/STERAC\",R6=\"M  V30 END CTAB\",Ip=34028234663852886e22,j6={l:2,m:0,h:4},iP=4194304,p6={l:4179966,m:4063288,h:7},xp={l:4194302,m:4193343,h:127},H0='\" ',C6='stroke=\"',H6='stroke-width=\"',by='\" />',Np='class=\"event\" ',Op='opacity=\"0\" />',Gp=\"' position:\",Jp=\"'. Position:\",zp=1099511627776,Yp=2199023255552,Kp=4398046511104,M6=\"', position:\",Xp=\"Assignment of aromatic double bonds failed\",io=2147483646,Zp={101:1,4:1},V6=\"Members of ESR groups must only be stereo centers with known configuration.\",E6=\"Over- or under-specified stereo feature or more than one racemic type bond\",S6=\"Ambiguous configuration at stereo center because of 2 parallel bonds\",Wp={112:1,88:1,26:1,4:1},Ry=1e5,fo=1.399999976158142,k2=3.1415927410125732,q6=1.5707963705062866,_p=.029999999329447746,$p=6.2831854820251465,ap=1.9106119871139526,tC=2.2639999389648438,I6=2.16759991645813,eC=2.0662999153137207,AC=2.3561999797821045,nC=2.2844998836517334,PC=1.9106120066311025,rC=2.094395160675049,Do=.6000000238418579,jy=1.7999999523162842,x6=.05000000074505806,ee={4:1,9:1,5:1,8:1,37:1},py=.2617993950843811,b2=2.0943951023931953,uo=1.2000000476837158,N6=1.4299999475479126,Cy=1.659999966621399,O6=1.4600000381469727,G6=1.899999976158142,iC=1.8200000524520874,fC=2.4600000381469727,DC=2.4200000762939453,Hy=2.450000047683716,J6=2.440000057220459,uC=2.4000000953674316,z6=2.319999933242798,Y6=2.2899999618530273,QC=1.8600000143051147,oC=2.5299999713897705,UC=2.490000009536743,LC=2.4700000286102295,sC=2.880000114440918,yC=2.9200000762939453,lC=2.869999885559082,K6=2.8299999237060547,hC=2.7899999618530273,TC=2.809999942779541,cC=2.799999952316284,wC=3.049999952316284,X6=.3199999928474426,gC=1.3300000429153442,Qo=.8500000238418579,dC=1.600000023841858,BC=1.3899999856948853,Z6=1.159999966621399,vC=1.1100000143051147,FC=1.0700000524520874,mC=1.9600000381469727,kC=1.7100000381469727,W6=1.3600000143051147,bC=1.340000033378601,RC=1.2200000286102295,jC=1.2400000095367432,My=1.2100000381469727,pC=2.0999999046325684,_6=1.850000023841858,$6=1.6299999952316284,CC=1.4700000286102295,HC=1.2799999713897705,MC=1.440000057220459,VC=1.7599999904632568,EC=1.7300000190734863,SC=1.7200000286102295,Vy=1.6799999475479126,qC=1.690000057220459,IC=1.6699999570846558,a6=1.649999976158142,oo=1.7000000476837158,xC=1.6200000047683716,NC=1.3700000047683716,OC=1.2899999618530273,GC=1.4500000476837158,JC=1.5700000524520874,t4=-.5235987755982988,Uo=-1.0471975511965976,zC=-.7853981633974483,YC=.017453292519943295,KC=.17453292519943295,Lo=1e-4,Vf={149:1},Ef=57.29577951308232,XC=.021922173386725217,so=1e-8,xP=2.5120960256267386,yo=1e-5,Ey=\"MMFF94s+\",ZC=\"nonbonded cutoff\",WC=\"dielectric constant\",_C=\"dielectric model\",$C=\"angle bend\",aC=\"bond stretch\",tH=\"electrostatic\",eH=\"out of plane\",AH=\"stretch bend\",nH=\"torsion angle\",PH=\"van der waals\",rH=.07000000000000006,iH=.1200000000000001,fH=-7.840000000000001,Sy=\"OCL_RXN_V1.0:\",DH=\"$RXN V3000\",uH=\"'$MOL' tag not found\",QH=\"'M  END' not found\",oH=\"M  V30 BEGIN REACTANT\",UH=`\nActelion Java MolfileCreator 2.0\n\n  0  0  0  0  0  0              0 V3000\n`,LH=\"M  V30 BEGIN PRODUCT\",sH=2475109711874,yH=2475109711875,lH=2887426572290,hH=2887426572291,TH=2887627898882,cH=2887627898883,wH=2887627997186,gH=3437182386178,dH=3437182386179,BH=3437383712770,vH=3437383811074,FH=3437652148226,mH=3437652377602,kH=4674132967426,bH=4674334294018,RH=4674334392322,jH=4674602729474,pH=4674602958850,CH=5086449827842,HH=5086449827848,MH=5086651154434,VH=5086651252738,EH=5086651252743,SH=5086919589890,qH=5086919688194,IH=5636406968322,xH=5636407066626,NH=5636675502082,OH={l:589826,m:590112,h:4},GH={l:589827,m:590112,h:4},JH={l:589826,m:590160,h:4},zH={l:589827,m:590160,h:4},YH={l:688130,m:590160,h:4},KH={l:589826,m:590224,h:4},XH={l:589827,m:590224,h:4},ZH={l:819203,m:590224,h:4},WH={l:589826,m:590368,h:4},_H={l:688130,m:590368,h:4},$H={l:819202,m:590368,h:4},aH={l:819208,m:590368,h:4},tM={l:589826,m:590416,h:4},eM={l:589832,m:590416,h:4},AM={l:688130,m:590416,h:4},nM={l:819202,m:590416,h:4},PM={l:589826,m:598304,h:4},rM={l:589827,m:598304,h:4},iM={l:688130,m:598304,h:4},fM={l:1114114,m:598304,h:4},DM={l:1212418,m:598304,h:4},uM={l:589826,m:598308,h:4},QM={l:589826,m:688416,h:4},oM={l:589826,m:688464,h:4},UM={l:589826,m:688720,h:4},LM={l:688130,m:688720,h:4},sM={l:589826,m:590112,h:288},yM={l:589826,m:590112,h:336},lM={l:589826,m:688416,h:336},hM={l:589826,m:688464,h:336},TM={l:688130,m:688464,h:336},cM={l:589826,m:590112,h:400},wM={l:589826,m:688416,h:400},gM={l:589826,m:688464,h:400},dM={l:688130,m:688464,h:400},BM={l:589826,m:819488,h:400},vM={l:589826,m:819536,h:400},FM={l:589826,m:819600,h:400},mM={l:688130,m:819600,h:400},kM={l:819202,m:819600,h:400},bM={l:589831,m:688416,h:592},RM={l:589831,m:688464,h:592},jM={l:688135,m:688464,h:592},pM={l:589831,m:819536,h:592},CM={l:688135,m:819536,h:592},HM={l:688135,m:819600,h:592},MM={l:589832,m:1212704,h:592},VM={l:589832,m:1212752,h:592},EM={l:688136,m:1212752,h:592},SM={l:589831,m:688464,h:656},qM={l:589826,m:590112,h:8480},IM={l:589826,m:688416,h:8480},xM={l:589826,m:688464,h:8480},NM={l:688130,m:688464,h:8480},OM={l:819202,m:819600,h:8480},GM={l:688135,m:1212752,h:8480},JM={l:589832,m:1213008,h:8480},zM={l:688136,m:1213008,h:8480},YM={l:589826,m:590112,h:8484},KM={l:589826,m:590160,h:8484},XM={l:688130,m:598304,h:8484},ZM=.6262000203132629,WM=-1.3825000524520874,qy=.33169999718666077,_M=-1.4915000200271606,$M=.3540000021457672,aM=.38179999589920044,tV=-.6019999980926514,eV=.07999999821186066,AV=-.7379999756813049,nV=\"Atom-types are 64-bit numbers describing atoms and their near surrounding.\",e4=\"Recognized atom types and their contributions are:\",PV=\"Druglikeness predictor not properly initialized.\",rV=3.009999990463257,iV=-.17000000178813934,fV=-.1809999942779541,DV=-.2029999941587448,lo=2147483648,uV=\"ene-Metathesis\",QV=\"Halogenation ring closure\",oV=\" (rootPairSets:\",Iy=-1e10,xy={204:1,4:1,9:1,5:1,8:1,30:1},Ny=-99999,B8=\"any\",UV=\"is not in a ring\",A4=\"Excluded atoms:\",Oy=\"exactly 1\",Gy=\"exactly 2\",n4=\"less than 3\",LV=\"less than 4\",Jy=\"at least 1\",P4=\"at least 2\",r4=\"at least 3\",sV=\"at least 4\",i4=\"1 or 2\",yV=\"less than 2\",lV=\"Allowed atoms:\",Sf={138:1},hV=\"Atom Properties\",zy=-8346432,TV=\"/html/editor/editor.html\",cV=\"Structure Editor Help\",Yy=\"Dummy look and feel\",Ky=\"Substance Graphite\",Xy=\"Radiance Graphite\",Zy=\"Radiance Night\",wV=.6499999761581421,gV=.3499999940395355,qf=.800000011920929,f4=\"editorButtons.png\",dV=\"esrButtons.png\",D4=-1774190527,u4=-1438646166,R2=-1433403286,Wy=-1431655766,_y=-1448432982,ur=1073741866,If=1073741930,Q4=\"MMFF94\",o4=\"MMFF94s\",BV=\"/resources/forcefield/mmff94/94s/outofplane.csv\",ho=\"undefined\",U4={172:1,4:1,5:1,8:1},vV=.08726646502812703,FV=\"overlapping\",L4=.003921568859368563,s4=\"anonymous\",y4=\"Unknown\",tn=1048575,fP=17592186044416,xf=1e9,j2=-17592186044416,wA=5.56,ie=11.12,Qr=13.34,Nf=14.44,To=.3010299956639812,mV=\"BigInteger divide by zero\",T1=4294967295,kV={l:0,m:0,h:524288},$y={33:1,113:1},l4={106:1,109:1},p2={36:1,43:1,38:1,85:1},ay=16777619,bV={36:1,38:1,85:1},tl=15525485,RV=5960464477539063e-23,h4=16777216,el={4:1,33:1,55:1,80:1},T4=\"Invalid UTF8 sequence\",c4=.20000000298023224,jV=\" distance:\",pV={4:1,5:1,11:1,8:1,465:1},C2={50:1},U,co,Al,gtt=-1;w.goog=w.goog||{},w.goog.global=w.goog.global||w,co={},p(1,null,{},i1),U.mb=function(e){return Tg(this,e)},U.nb=function(){return this.td},U.ob=function(){return dD(this)},U.pb=function(){var e;return uu($L(this))+\"@\"+(e=a8(this)>>>0,e.toString(16))},U.equals=function(t){return this.mb(t)},U.hashCode=function(){return this.ob()},U.toString=function(){return this.pb()};var CV,HV,MV;CV={4:1,308:1,33:1};var wo;p(207,1,{},uT),U.Sc=function(e){var A;return A=new uT,A.f=4,e>1?A.c=MB(this,e-1):A.c=this,A},U.Tc=function(){return CU(this),this.b},U.Uc=function(){return uu(this)},U.Vc=function(){return CU(this),this.j},U.Wc=function(){return(this.f&4)!=0},U.Xc=function(){return(this.f&1)!=0},U.pb=function(){return((this.f&2)!=0?\"interface \":(this.f&1)!=0?\"\":\"class \")+(CU(this),this.n)},U.f=0,U.i=0;var dtt=1;p(119,1,{4:1,119:1});var w4;HV={4:1,33:1,309:1,119:1},p(27,1,{4:1,27:1}),U.ec=function(e){return new Error(e)},U.fc=function(){return this.backingJsObject},U.gc=function(){var e,A,n;for(n=(this.i==null&&(this.i=c(SV,T0,27,0,0,1)),this.i),A=c(DP,A0,1,n.length,5,1),e=0;e<n.length;e++)A[e]=n[e].backingJsObject;return A},U.hc=function(){return this.e},U.ic=function(){return this.f},U.jc=function(){YI(this,GN(this.ec(vB(this,this.f))))},U.pb=function(){return vB(this,this.ic())},U.backingJsObject=Rp,U.j=!0,p(19,27,{4:1,19:1,27:1},C1),p(32,19,aA),p(79,32,aA,e3,g9),p(128,32,aA,GL),p(69,128,aA,dr,d7,g7),U.ec=function(e){return new TypeError(e)},MV={4:1,206:1,33:1,2:1},p(231,79,aA,U3),p(517,1,{}),p(449,1,{},Aw);var VV=0;p(450,1,{});var DP=H(1),EV=H(0),Btt=H(308),t8t=H(207),e8t=H(119),vtt=H(309),SV=H(27),A8t=H(19),n8t=H(32),P8t=H(79),r8t=H(128),i8t=H(69),it=H(2),f8t=H(231),D8t=H(449),u8t=H(450);p(200,1,kf,Py),U.c=0,U.d=0;var Q8t=H(200);p(120,1,{120:1}),U.xb=function(){rm(this)},U.yb=function(e,A,n,P){},U.zb=function(e,A,n,P,r){},U.Db=function(e,A){return qk(this,e,A)},U.r=0,U.t=0,U.u=0,U.A=0,U.C=0,U.D=0,U.F=0,U.G=0,U.H=0,U.I=0,U.J=0,U.K=!1,U.M=0,U.N=0,U.O=0,U.P=0,U.Q=0,U.S=0,U.T=0,U.V=0,U.W=0,U.X=0,U.Y=0,U.Z=0;var nl,Ftt=.15,mtt=.06,ktt=.6,o8t=H(120);p(144,1,{144:1},mu),U.a=0,U.b=0,U.c=0;var U8t=H(144);p(68,1,{},s1),U.a=0,U.b=0,U.c=0,U.d=0;var L8t=H(68);p(193,1,{193:1}),U.Jb=function(e){var A,n;if(this.i==null)return null;for(A=new QA(this.i[0].a,this.i[0].b,0,0),n=1;n<this.i.length;n++)A.c>this.i[n].a?(A.b+=A.c-this.i[n].a,A.c=this.i[n].a):A.b<this.i[n].a-A.c&&(A.b=this.i[n].a-A.c),A.d>this.i[n].b?(A.a+=A.d-this.i[n].b,A.d=this.i[n].b):A.a<this.i[n].b-A.d&&(A.a=this.i[n].b-A.d);return A},U.Nb=function(e){av(this,e)},U.pb=function(){var e;return e=new yD,Mi(e,d6+this.Lb()+'\"'+this.Kb()+B6),e.a},U.Ob=function(e,A){ZF(this,e,A)},U.Pb=function(e,A){Tk(this,e,A)},U.Qb=function(e,A){db(this,e,A)},U.g=!1,U.j=!1,U.k=0,U.n=0;var s8t=H(193);p(89,1,{},c9),U.a=!1,U.b=0,U.c=0,U.k=0;var y8t=H(89),go,g4;p(34,1,{},FA,SA),U.b=!1,U.c=0,U.d=!1,U.r=!1,U.t=0,U.v=0,U.w=0,U.G=!1,U.I=0,U.K=!1,U.L=!1,U.O=0,U.Q=0,U.T=0,U.U=0,U.Z=!1,U.jb=!1;var l8t=H(34);p(267,1,{},o1),U.Rb=function(e,A){return pb(e,A)},U.mb=function(e){return this===e};var h8t=H(267);p(174,1,{174:1},n0),U.b=0,U.c=0,U.d=0;var btt=H(174);p(268,1,{},N0),U.Rb=function(e,A){return lB(e,A)},U.mb=function(e){return this===e};var T8t=H(268);p(175,1,{175:1},M0),U.a=0,U.b=0,U.c=0;var Rtt=H(175);p(100,1,{100:1,33:1},bU),U.Sb=function(e){return Us(this,e)},U.a=0,U.b=0,U.c=0;var d4=H(100);p(173,1,{173:1,33:1},pv),U.Sb=function(e){return rF(this,e)},U.a=0,U.b=0,U.c=0;var jtt=H(173);p(208,1,{208:1},Lm);var c8t=H(208);p(266,1,{},xm);var w8t=H(266);p(365,1,{},Lp),U.a=0,U.b=0,U.f=0,U.g=0,U.i=0;var g8t=H(365);p(366,1,{},Xe),U.Rb=function(e,A){return i5(e,A)},U.mb=function(e){return this===e};var d8t=H(366);p(29,1,{29:1,4:1,33:1},dA,xe,du),U.Sb=function(e){return HJ(this,e)},U.mb=function(e){return Ds(this,e)},U.pb=function(){var e;return e=new Au(\"0.00\"),\"[\"+su(e,this.a)+\", \"+su(e,this.b)+\", \"+su(e,this.c)+\"]\"},U.a=0,U.b=0,U.c=0;var H2=H(29);p(78,1,{},tu,J3,Zs),U.pb=function(){return\"DepictorTransformation Offset: \"+this.a+\",\"+this.b+\" Scaling: \"+this.c},U.a=0,U.b=0,U.c=0;var B8t=H(78);p(43,1,hy),U.Ub=function(){return new C8(this)},U.Vb=function(){return new Q3(this.Ub())},U.add=function(e){throw At(new LD(\"Add not supported on this collection\"))},U.addAll=function(e){return sF(this,e)},U.clear=function(){var e;for(e=this.Tb();e.bd();)e.cd(),e.dd()},U.contains=function(e){return Sm(this,e,!1)},U.containsAll=function(e){return AQ(this,e)},U.isEmpty=function(){return this.size()==0},U.remove=function(e){return Sm(this,e,!0)},U.removeAll=function(e){return aL(this,e)},U.retainAll=function(e){return fm(this,e)},U.toArray=function(){return this.Wb(c(DP,A0,1,this.size(),5,1))},U.Wb=function(e){return Lk(this,e)},U.pb=function(){return Zk(this)};var v8t=H(43);p(94,43,Hp),U.Ub=function(){return new C8(this)},U.addAtIndex=function(e,A){throw At(new LD(\"Add not supported on this list\"))},U.add=function(e){return this.addAtIndex(this.size(),e),!0},U.addAllAtIndex=function(e,A){var n,P,r;for(L1(A),n=!1,r=A.Tb();r.bd();)P=r.cd(),this.addAtIndex(e++,P),n=!0;return n},U.clear=function(){this.Xb(0,this.size())},U.mb=function(e){var A,n,P,r,i;if(e===this)return!0;if(!Xt(e,83)||(i=e,this.size()!=i.size()))return!1;for(r=i.Tb(),n=this.Tb();n.bd();)if(A=n.cd(),P=r.cd(),!(O1(A)===O1(P)||A!=null&&VP(A,P)))return!1;return!0},U.ob=function(){return pG(this)},U.indexOf=function(e){return bF(this,e)},U.Tb=function(){return new Xl(this)},U.lastIndexOf=function(e){var A;for(A=this.size()-1;A>-1;--A)if(Y8(e,this.getAtIndex(A)))return A;return-1},U.removeAtIndex=function(e){throw At(new LD(\"Remove not supported on this list\"))},U.Xb=function(e,A){var n,P;for(P=new hh(this,e),n=e;n<A;++n)vD(P.a<P.c.size()),P.c.getAtIndex(P.b=P.a++),oL(P)},U.setAtIndex=function(e,A){throw At(new LD(\"Set not supported on this list\"))},U.subList=function(e,A){return new qD(this,e,A)};var F8t=H(94);p(20,94,Ty,f1,cL),U.addAtIndex=function(e,A){e8(this,e,A)},U.add=function(e){return mt(this,e)},U.addAllAtIndex=function(e,A){return Qm(this,e,A)},U.addAll=function(e){return jP(this,e)},U.clear=function(){this.a.length=0},U.contains=function(e){return xr(this,e,0)!=-1},U.getAtIndex=function(e){return N(this,e)},U.indexOf=function(e){return xr(this,e,0)},U.isEmpty=function(){return this.a.length==0},U.Tb=function(){return new Zt(this)},U.lastIndexOf=function(e){return od(this,e)},U.removeAtIndex=function(e){return LA(this,e)},U.remove=function(e){return X8(this,e)},U.Xb=function(e,A){XB(this,e,A)},U.setAtIndex=function(e,A){return qr(this,e,A)},U.size=function(){return this.a.length},U.toArray=function(){return $3(this.a)},U.Wb=function(e){return Pf(this,e)};var B4=H(20);p(102,20,Ty,eU,us,nb),U.pb=function(){return Im(this)};var m8t=H(102);p(108,1,{108:1},Ji),U.a=0,U.b=0,U.c=0,U.d=0;var k8t=H(108);p(115,1,{},cf),U.a=0,U.b=0,U.c=!1,U.d=0,U.f=!1,U.g=0,U.i=!1,U.j=0;var b8t=H(115);p(18,1,{18:1},qt),U.pb=function(){return this.d},U.a=0,U.c=0;var ptt=H(18);p(158,1,{},PF,uR,VB,$d),U.c=0,U.d=0,U.f=0,U.i=0,U.j=0,U.n=0,U.o=!1;var R8t=H(158);p(363,1,{},z2),U.Rb=function(e,A){return L1(e),e>(L1(A),A)?-1:(L1(e),e<(L1(A),A)?1:0)},U.mb=function(e){return this===e};var j8t=H(363);p(88,1,{88:1,4:1},X3),U.Yb=function(e){UL(this,e)},U.Zb=function(e){return this.H[e]==8},U.q=0,U.r=0,U.I=0,U.K=!1,U.L=!1,U.M=0,U.N=0,U.O=0,U.S=!1,U.T=0,U.U=0,U.V=0;var qV,X0,L9,v4,IV,or,gn=24,p8t=H(88);p(112,88,{112:1,88:1,4:1}),U.$b=function(e){Gj(this,e)},U.Zb=function(e){return O8(this,e)},U.f=0,U.g=0;var C8t=H(112);p(333,1,{},Ko),U._b=function(){return!1},U.ac=function(e){throw At(new C1(\"Unexpected request to invent coordinates. Check source code logic!\"))},U.d=0,U.e=0,U.f=0,U.i=!1;var H8t=H(333);p(52,333,{},JA),U._b=function(){return this.b},U.ac=function(e){var A;A=new z8(this.a),A.g=new Ki(78187493520),A9(A,e)},U.a=2,U.b=!1;var M8t=H(52);p(110,1,{},R7,lD),U.j=0;var V8t=H(110);p(3,1,{3:1},u),U.a=0,U.b=0;var Mt=H(3),Pl;p(240,1,{240:1,33:1},ag),U.Sb=function(e){return iY(this,e)};var E8t=H(240);p(153,1,{153:1}),U.mb=function(e){var A;if(e===this)return!0;if(!Xt(e,153))return!1;for(A=0;A<this.b.length;A++)if(this.b[A]!=e.b[A])return!1;return!0},U.a=0,U.d=0;var F4,M2,m4,S8t=H(153);p(111,1,{},C3,i6);var q8t=H(111);p(126,1,{},$2,xw),U.a=!1,U.d=!1,U.e=!1,U.g=!1,U.i=0,U.k=!1;var I8t=H(126);p(225,1,{225:1},Y2),U.a=0,U.b=!1;var x8t=H(225);p(150,1,{},P7,qg),U.c=1;var N8t=H(150),k4,rl=null;p(402,1,{},Bp),U.pb=function(){return\"\"};var b4,R4,O8t=H(402);p(151,1,{},oU),U.g=0;var G8t=H(151);p(65,1,{},qi,bD),U.c=0,U.d=0,U.p=0,U.q=0,U.r=!1,U.w=0,U.A=0,U.L=!1,U.N=0,U.P=!1;var J8t=H(65);p(215,1,{215:1},Z2),U.a=0,U.b=0,U.c=0,U.d=0;var z8t=H(215);p(180,1,{},BU);var s9,V2,Y8t=H(180);p(259,120,{120:1},Gk),U.qb=function(e){var A;A='<line x1=\"'+Le(be(eA(new He(e.a),(er(),se))))+H0+'y1=\"'+Le(be(eA(new He(e.c),se)))+H0+'x2=\"'+Le(be(eA(new He(e.b),se)))+H0+'y2=\"'+Le(be(eA(new He(e.d),se)))+H0+C6+this.d+H0+H6+this.j+by,V9(this,A)},U.rb=function(e){var A,n;A=Le(be(eA(new He(3*this.j),(er(),se)))),n='<line stroke-dasharray=\"'+A+\",\"+A+H0+'x1=\"'+Le(be(eA(new He(e.a),se)))+H0+'y1=\"'+Le(be(eA(new He(e.c),se)))+H0+'x2=\"'+Le(be(eA(new He(e.b),se)))+H0+'y2=\"'+Le(be(eA(new He(e.d),se)))+H0+C6+this.d+H0+\"stroke-width:\"+this.j+by,V9(this,n)},U.sb=function(e){var A,n;for(n=new Fn('<polygon points=\"'),A=0;A<e.a;A++)Cg(n,M1(w.Math.round(e.b[A]))),n.a+=\",\",Cg(n,M1(w.Math.round(e.c[A]))),n.a+=\" \";J(n,'\" fill=\"'+this.d+H0+C6+this.d+H0+H6+this.j+by),V9(this,n.a)},U.tb=function(e,A,n){var P,r,i,f;i=(P=(f=ak(this.e,e),new Ph(f)).b,P),r='<text x=\"'+Le(be(eA(new He(A-i/2),(er(),se))))+H0+'y=\"'+Le(be(eA(new He(n+this.k/3),se)))+H0+'stroke=\"none\" font-size=\"'+this.e.b+H0+'fill=\"'+lf(this.d)+'\">'+lf(e)+\"</text>\",V9(this,r)},U.ub=function(e,A,n){var P;P='<circle cx=\"'+Le(be(eA(new He(e+n/2),(er(),se))))+H0+'cy=\"'+Le(be(eA(new He(A+n/2),se)))+H0+'r=\"'+Le(be(eA(new He(n/2),se)))+H0+'fill=\"'+this.d+by,V9(this,P)},U.vb=function(e){var A;return(A=ak(this.e,e),new Ph(A)).b},U.wb=function(){return this.k},U.yb=function(e,A,n,P){var r,i;r=R1(this.L,e),i='<circle id=\"'+lf(this.g!=null?this.g:\"mol\"+E2)+\":Atom:\"+e+H0+Np+(r==0?\"\":'data-atom-map-no=\"'+r+H0)+'cx=\"'+Le(be(eA(new He(n),(er(),se))))+H0+'cy=\"'+Le(be(eA(new He(P),se)))+H0+'r=\"8'+H0+Op,mt(this.a,i)},U.zb=function(e,A,n,P,r){var i;i='<line id=\"'+lf(this.g!=null?this.g:\"mol\"+E2)+\":Bond:\"+e+H0+Np+'x1=\"'+Le(be(eA(new He(A),(er(),se))))+H0+'y1=\"'+Le(be(eA(new He(n),se)))+H0+'x2=\"'+Le(be(eA(new He(P),se)))+H0+'y2=\"'+Le(be(eA(new He(r),se)))+H0+H6+8+H0+Op,mt(this.b,i)},U.Ab=function(e){this.j=J9(M1(w.Math.round(100*w.Math.max(e,1))))/100},U.Bb=function(e){this.d=\"rgb(\"+((e&rP)>>16)+\",\"+((e&nP)>>8)+\",\"+(e&255)+\")\"},U.Cb=function(e){this.k!=e&&(this.k=e,this.e=new a3(e))},U.Db=function(e,A){return this.n=Jt(M1(w.Math.round(e.b))),this.f=Jt(M1(w.Math.round(e.a))),qk(this,e,A)},U.pb=function(){return Zj(this)},U.f=0,U.i=!1,U.j=0,U.k=0,U.n=0;var E2=0,K8t=H(259);p(184,1,{184:1},kh),U.a=0,U.b=0,U.e=!1,U.f=!1,U.g=0;var X8t=H(184);p(284,1,{},WF),U.a=0,U.c=0,U.d=0,U.e=0,U.g=0,U.i=!1,U.j=!1,U.k=0,U.o=0,U.p=!1,U.r=!1;var Z8t=H(284);p(376,1,{},Nw),U.a=0,U.b=0,U.c=!1,U.d=!1;var W8t=H(376);p(377,1,{},bw),U.pb=function(){return\"{\"+this.c+\"-\"+this.b+\"}\"},U.a=!1,U.b=0,U.c=0,U.d=0;var _8t=H(377);p(132,1,{},D7,LQ),U.b=0,U.c=0,U.d=0,U.e=!1,U.i=!1,U.j=0,U.n=0,U.o=!1,U.p=!1,U.q=0;var $8t=H(132);p(216,1,{216:1,33:1},b7),U.Sb=function(e){return E3(e.b,this.b)},U.a=0,U.b=0;var a8t=H(216);p(217,1,{217:1},dk),U.a=0,U.b=0,U.c=!1,U.d=!1;var trt=H(217);p(182,1,{182:1},Y3),U.pb=function(){return\"[\"+(this.a==io?\"h\":this.a==Et?\"lp\":Ri(this.c.f.k,this.a))+this.b+\"]\"},U.a=0,U.b=0;var ert=H(182);p(101,1,Zp,eu),U.bc=function(e){return _T(this,e)};var Ctt=H(101);p(26,112,Wp,zA,YA,z9),U.Yb=function(e){kU(this,e)},U.$b=function(e){ut(this,e)},U.c=!1;var Ur=H(26);p(241,1,{},P5),U.j=0;var Htt=Ry,Art=H(241);p(167,1,{167:1,33:1},fs),U.Sb=function(e){return Ts(this.a,e.a)};var nrt=H(167);p(93,193,{193:1,93:1},UU,kR),U.Eb=function(e,A){return this.a=!!this.b&&N9(this.b,e,A),this.a},U.Fb=function(){this.a=!1},U.Gb=function(){var e;return e=new UU,Rg(e,this.e,this.c,this.d),Jg(e,this.i[0].a,this.i[0].b),e.g=this.g,e},U.Hb=function(e,A){return!!this.b&&N9(this.b,e,A)},U.Ib=function(e,A){var n,P,r,i;for(P=A?A.c*this.c:this.c,AL(e,vt(w.Math.round(P)),(this.d&1)!=0,(this.d&2)!=0),ae(e,this.g?IP:(i=e.Kc(),i.isDarkBackground()?-1:qn)),r=jT(this),this.b=NT(this,e,r),A&&Iu(A,this.b),n=0;n<r.a.length;n++)sh(e,this.b.c,this.b.d+1+P*5/6+P*fo*n,(ve(n,r.a.length),r.a[n]))},U.Jb=function(e){var A;return A=jT(this),NT(this,e,A)},U.Kb=function(){var e;return e=new V0,J(e,' text=\"'+mX(this.e)+'\"'),J(e,' x=\"'+this.i[0].a+'\"'),J(e,' y=\"'+this.i[0].b+'\"'),this.c!=9&&J(e,' size=\"'+be(new ad(this.c,new xd))+'\"'),this.d!=0&&J(e,' style=\"'+this.d+'\"'),e.a},U.Lb=function(){return\"text\"},U.Mb=function(e){var A,n;A=(n=jT(this),NT(this,e,n)),ae(e,SD(e)),Rh(e,A.c,A.d,A.b,A.a)},U.Nb=function(e){av(this,e),this.c*=e},U.Pb=function(e,A){Tk(this,e,A),this.c=this.f*e},U.Qb=function(e,A){db(this,e,A),this.f=this.c},U.a=!1,U.c=0,U.d=0,U.f=0;var Prt=H(93);p(283,101,Zp,oB),U.bc=function(e){var A;return A=_T(this,e),A==-1?-1:N(this.a,A).a};var rrt=H(283);p(380,1,{},dp);var irt=H(380);p(379,1,{},vj);var xV,Bo,j4,p4,vo,C4=!1,frt=H(379);p(64,1,{64:1,33:1},hD),U.Sb=function(e){return hF(this,e),ok(this.q,e.q)},U.n=0;var Drt=H(64);p(368,1,{},gg),U.a=0,U.b=0;var il,uP,urt=H(368);p(256,1,{256:1,33:1},G7),U.Sb=function(e){return ok(this,e)},U.pb=function(){var e,A;for(A=new V0,e=0;e<this.b.length;e++)A.a+=e==0?\"Torsions: \":\", \",J(A,(Jr(),t9(this.b[e],3)+\"(\"+vt(w.Math.round(this.a[e]+.5))+\")\"));return A.a};var Qrt=H(256);p(254,1,{},EB,pB);var NV,fl,ort=H(254);p(250,1,{},mT),U.a=0;var OV,Urt=H(250);p(194,1,{194:1},Rw,cj),U.e=0;var Lrt=H(194);p(251,1,{},r6);var srt=H(251),Of,xA,H4=0,M4=0,V4=0,E4=0,S4=0,Fo=0,q4=0,I4=0,x4=0,N4=0,mo=0;p(72,1,{},z8),U.a=!1,U.e=0;var ko,yrt=H(72);p(329,20,Ty,A7),U.add=function(e){return pP(this,e)};var lrt=H(329);p(331,1,{},Xo),U.Rb=function(e,A){var n;return rO((n=e,n))},U.mb=function(e){return this===e};var hrt=H(331);p(332,1,{},J2),U.Rb=function(e,A){var n;return iO((n=e,n))},U.mb=function(e){return this===e};var Trt=H(332);p(330,1,{},JP),U.Rb=function(e,A){var n,P;return n=w.Math.abs(e.b),P=w.Math.abs(A.b),n<P?-1:n>P?1:0},U.mb=function(e){return this===e};var crt=H(330);p(105,1,{105:1},_b,MQ);var GV=H(105);p(41,1,{41:1},ZP,_u),U.a=0,U.b=0;var Li=H(41);p(247,1,{},jh);var wrt=H(247);p(197,1,{197:1},K3),U.a=0,U.b=0;var grt=H(197);p(364,20,Ty,bk);var JV,drt=H(364);p(48,1,{48:1},HP,q5),U.c=0,U.i=!1;var O4=H(48);p(246,1,{246:1},wg),U.a=0,U.c=!1;var Brt=H(246);p(276,1,{}),U.d=0,U.f=!1,U.j=0,U.k=0;var vrt=H(276);p(358,1,Vf,km),U.cc=function(e,A,n,P){var r,i,f;return P&&(X(this.f,this.a)==1||X(this.f,this.c)==1)?0:(f=Uk(new v0(e,this.b,this.a),new v0(e,this.b,this.c)),r=f*Ef-this.g,i=this.d?143.9325*this.e*(1+w.Math.cos(f)):XC*this.e*r*r*(1+-.006981317*r),i)},U.dc=function(e,A){var n,P,r,i,f,D,Q,o,L,s;Q=Vn(new v0(e,this.b,this.a)),o=Vn(new v0(e,this.b,this.c)),f=kn(new v0(e,this.b,this.a)),D=kn(new v0(e,this.b,this.c)),P=(Q.a*o.a+Q.b*o.b+Q.c*o.c)/(w.Math.sqrt(Q.a*Q.a+Q.b*Q.b+Q.c*Q.c)*w.Math.sqrt(o.a*o.a+o.b*o.b+o.c*o.c)),s=1-P*P,L=so,s>0&&(L=w.Math.sqrt(s)),n=Ef*w.Math.acos(P)-this.g,i=xP*this.e*n*(1+-.0104719755*n),this.d&&(i=-143.9325*this.e*L),r=B(d(Ut,1),Tt,6,15,[1/f*(o.a-P*Q.a),1/f*(o.b-P*Q.b),1/f*(o.c-P*Q.c),1/D*(Q.a-P*o.a),1/D*(Q.b-P*o.b),1/D*(Q.c-P*o.c)]),A[3*this.a]+=i*r[0]/-L,A[3*this.a+1]+=i*r[1]/-L,A[3*this.a+2]+=i*r[2]/-L,A[3*this.b]+=i*(-r[0]-r[3])/-L,A[3*this.b+1]+=i*(-r[1]-r[4])/-L,A[3*this.b+2]+=i*(-r[2]-r[5])/-L,A[3*this.c]+=i*r[3]/-L,A[3*this.c+1]+=i*r[4]/-L,A[3*this.c+2]+=i*r[5]/-L},U.a=0,U.b=0,U.c=0,U.d=!1,U.e=0,U.g=0;var Frt=H(358);p(185,32,{185:1,4:1,19:1,32:1,27:1},w7);var mrt=H(185);p(336,32,aA,e7);var krt=H(336);p(237,1,Vf,sB),U.cc=function(e,A,n,P){var r,i,f;return P&&(X(this.d,this.a)==1||X(this.d,this.b)==1)?0:(i=kF(new zi(e,this.a),new zi(e,this.b)),r=(i-this.e)*(i-this.e),f=71.96625*this.c*r*(1+-2*(i-this.e)+2.3333333333333335*r),f)},U.dc=function(e,A){var n,P,r,i;if(P=kF(new zi(e,this.a),new zi(e,this.b)),r=P-this.e,n=143.9325*this.c*r*(1+-3*r+4.666666666666667*r*r),P>0)for(i=0;i<3;i++)A[3*this.a+i]+=n*(e[3*this.a+i]-e[3*this.b+i])/P,A[3*this.b+i]-=n*(e[3*this.a+i]-e[3*this.b+i])/P},U.a=0,U.b=0,U.c=0,U.e=0;var brt=H(237);p(359,1,Vf,$v),U.cc=function(e,A,n,P){var r,i,f;return P&&(X(this.e,this.a)==1||X(this.e,this.b)==1)?0:(i=kn(new v0(e,this.a,this.b)),r=i+.05,this.d&&(r*=r),f=332.0716*this.c/r*(this.f==(Xr(),si)?.75:1),f)},U.dc=function(e,A){var n,P,r,i,f;for(i=kn(new v0(e,this.a,this.b)),n=i+.05,n*=this.d?n*n:n,P=-332.0716*(this.d?2:1)*this.c/n*(this.f==(Xr(),si)?.75:1),f=0;f<3;f++)r=.02,i>0&&(r=P*(e[3*this.a+f]-e[3*this.b+f])/i),A[3*this.a+f]+=r,A[3*this.b+f]-=r},U.a=0,U.b=0,U.c=0,U.d=!1;var Rrt=H(359);p(178,276,{},Sd,Y5);var Dl,jrt=H(178);p(277,26,Wp,uj);var prt=H(277);p(192,1,Vf,ZL),U.cc=function(e,A,n,P){var r,i,f,D,Q,o;return P&&(X(this.f,this.a)==1||X(this.f,this.b)==1||X(this.f,this.c)==1)?0:(D=Vn(new v0(e,this.d,this.a)),Q=Vn(new v0(e,this.d,this.b)),o=Vn(new v0(e,this.d,this.c)),f=Vn(new gP(D.b*Q.c-D.c*Q.b,D.c*Q.a-D.a*Q.c,D.a*Q.b-D.b*Q.a)),r=Ef*w.Math.asin(f.a*o.a+f.b*o.b+f.c*o.c),i=XC*this.e*r*r,i)},U.dc=function(e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R,j,C,S,I,x;for(y=new v0(e,this.d,this.a),l=new v0(e,this.d,this.b),h=new v0(e,this.d,this.c),D=w.Math.sqrt(y.a*y.a+y.b*y.b+y.c*y.c),Q=w.Math.sqrt(l.a*l.a+l.b*l.b+l.c*l.c),o=w.Math.sqrt(h.a*h.a+h.b*h.b+h.c*h.c),y=Vn(y),l=Vn(l),h=Vn(h),s=Vn(Gh(new gP(-y.a,-y.b,-y.c),l)),T=h.a*s.a+h.b*s.b+h.c*s.c,r=1-T*T,P=w.Math.max(r>0?w.Math.sqrt(r):0,so),n=Ef*w.Math.asin(T),i=y.a*l.a+y.b*l.b+y.c*l.c,m=w.Math.max(1-i*i,so),g=w.Math.max(m>0?w.Math.sqrt(m):0,so),f=xP*this.e*n,v=new gP(h.b*l.c-h.c*l.b,h.c*l.a-h.a*l.c,h.a*l.b-h.b*l.a),b=new gP(y.b*h.c-y.c*h.b,y.c*h.a-y.a*h.c,y.a*h.b-y.b*h.a),R=new gP(l.b*y.c-l.c*y.b,l.c*y.a-l.a*y.c,l.a*y.b-l.b*y.a),j=P*g,C=T/(P*m),S=B(d(Ut,1),Tt,6,15,[(v.a/j-(y.a-l.a*i)*C)/D,(v.b/j-(y.b-l.b*i)*C)/D,(v.c/j-(y.c-l.c*i)*C)/D]),I=B(d(Ut,1),Tt,6,15,[(b.a/j-(l.a-y.a*i)*C)/Q,(b.b/j-(l.b-y.b*i)*C)/Q,(b.c/j-(l.c-y.c*i)*C)/Q]),x=B(d(Ut,1),Tt,6,15,[(R.a/j-h.a*T/P)/o,(R.b/j-h.b*T/P)/o,(R.c/j-h.c*T/P)/o]),L=0;L<3;L++)A[3*this.a+L]+=f*S[L],A[3*this.d+L]+=-f*(S[L]+I[L]+x[L]),A[3*this.b+L]+=f*I[L],A[3*this.c+L]+=f*x[L]},U.a=0,U.b=0,U.c=0,U.d=0,U.e=0;var Crt=H(192);p(55,1,{4:1,33:1,55:1}),U.Sb=function(e){return this.b-e.b},U.compareTo=function(e){return this.b-e.b},U.equals=function(e){return this===e},U.mb=function(t){return this.equals(t)},U.hashCode=function(){return dD(this)},U.ob=function(){return this.hashCode()},U.name=function(){return this.a!=null?this.a:\"\"+this.b},U.ordinal=function(){return this.b},U.toString=function(){return this.a!=null?this.a:\"\"+this.b},U.pb=function(){return this.toString()},U.b=0;var Hrt=H(55),zV=Er(null,Tx);p(278,1,{},vR);var Mrt=H(278);p(107,55,{107:1,4:1,33:1,55:1},TD);var si,G4,J4,z4,S2,Mtt=Er(107,VN);p(98,1,{98:1,33:1},Ii),U.Sb=function(e){return eJ(this,e)},U.mb=function(e){var A;return e===this?!0:Xt(e,98)?(A=e,this.a==A.a&&this.b==A.b):!1},U.ob=function(){return this.a^this.b},U.pb=function(){return this.a+\",\"+this.b},U.a=0,U.b=0;var Vrt=H(98);p(360,1,Vf,jk),U.cc=function(e,A,n,P){var r,i,f,D,Q;return P&&(X(this.f,this.a)==1||X(this.f,this.c)==1)?0:(r=kn(new v0(e,this.b,this.a)),i=kn(new v0(e,this.b,this.c)),Q=Uk(new v0(e,this.b,this.a),new v0(e,this.b,this.c)),D=xP*(Q*Ef-this.j),f=D*(r-this.g)*this.d+D*(i-this.i)*this.e,f)},U.dc=function(e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g;L=kn(new v0(e,this.b,this.a)),s=kn(new v0(e,this.b,this.c)),l=Vn(new v0(e,this.b,this.a)),h=Vn(new v0(e,this.b,this.c)),P=l.a*h.a+l.b*h.b+l.c*h.c,g=1-P*P,T=w.Math.max(g>0?w.Math.sqrt(g):0,so),n=Ef*w.Math.acos(P)-this.j,y=Ef*(this.d*(L-this.g)+this.e*(s-this.i)),r=1/L*(h.a-P*l.a),i=1/L*(h.b-P*l.b),f=1/L*(h.c-P*l.c),D=1/s*(l.a-P*h.a),Q=1/s*(l.b-P*h.b),o=1/s*(l.c-P*h.c),A[3*this.a]+=xP*(l.a*this.d*n+r/-T*y),A[3*this.a+1]+=xP*(l.b*this.d*n+i/-T*y),A[3*this.a+2]+=xP*(l.c*this.d*n+f/-T*y),A[3*this.b]+=xP*((-l.a*this.d-h.a*this.e)*n+(-r-D)/-T*y),A[3*this.b+1]+=xP*((-l.b*this.d-h.b*this.e)*n+(-i-Q)/-T*y),A[3*this.b+2]+=xP*((-l.c*this.d-h.c*this.e)*n+(-f-o)/-T*y),A[3*this.c]+=xP*(h.a*this.e*n+D/-T*y),A[3*this.c+1]+=xP*(h.b*this.e*n+Q/-T*y),A[3*this.c+2]+=xP*(h.c*this.e*n+o/-T*y)},U.a=0,U.b=0,U.c=0,U.d=0,U.e=0,U.g=0,U.i=0,U.j=0;var Ert=H(360);p(155,1,{155:1},ks);var Srt=H(155);p(361,1,Vf,ym),U.cc=function(e,A,n,P){var r,i,f,D,Q,o,L,s,y,l;return Q=new v0(e,this.a,this.b),o=new v0(e,this.c,this.b),L=new v0(e,this.b,this.c),s=new v0(e,this.d,this.c),y=new gP(Q.b*o.c-Q.c*o.b,Q.c*o.a-Q.a*o.c,Q.a*o.b-Q.b*o.a),l=new gP(L.b*s.c-L.c*s.b,L.c*s.a-L.a*s.c,L.a*s.b-L.b*s.a),f=(y.a*l.a+y.b*l.b+y.c*l.c)/(w.Math.sqrt(y.a*y.a+y.b*y.b+y.c*y.c)*w.Math.sqrt(l.a*l.a+l.b*l.b+l.c*l.c)),r=2*f*f-1,i=f*(2*r-1),D=.5*(this.e*(1+f)+this.f*(1-r)+this.g*(1+i)),D},U.dc=function(e,A){var n,P,r,i,f,D,Q,o,L,s,y;f=B(d(YV,1),A0,22,0,[new v0(e,this.b,this.a),new v0(e,this.b,this.c),new v0(e,this.c,this.b),new v0(e,this.c,this.d)]),y=B(d(YV,1),A0,22,0,[Gh(f[0],f[1]),Gh(f[2],f[3])]),P=B(d(Ut,1),Tt,6,15,[kn(y[0]),kn(y[1])]),!(w.Math.abs(P[0])<yo||w.Math.abs(P[1])<yo)&&(y[0]=Vn(y[0]),y[1]=Vn(y[1]),n=y[0].a*y[1].a+y[0].b*y[1].b+y[0].c*y[1].c,L=1-n*n,o=L>0?w.Math.sqrt(L):0,D=2*o*n,Q=3*o-4*o*L,i=.5*(-this.e*o+2*this.f*D-3*this.g*Q),s=-i*(w.Math.abs(o)<yo?1/n:1/o),r=B(d(Ut,1),Tt,6,15,[1/P[0]*(y[1].a-n*y[0].a),1/P[0]*(y[1].b-n*y[0].b),1/P[0]*(y[1].c-n*y[0].c),1/P[1]*(y[0].a-n*y[1].a),1/P[1]*(y[0].b-n*y[1].b),1/P[1]*(y[0].c-n*y[1].c)]),A[3*this.a]+=s*(r[2]*f[1].b-r[1]*f[1].c),A[3*this.a+1]+=s*(r[0]*f[1].c-r[2]*f[1].a),A[3*this.a+2]+=s*(r[1]*f[1].a-r[0]*f[1].b),A[3*this.b]+=s*(r[1]*(f[1].c-f[0].c)+r[2]*(f[0].b-f[1].b)+r[4]*-f[3].c+r[5]*f[3].b),A[3*this.b+1]+=s*(r[0]*(f[0].c-f[1].c)+r[2]*(f[1].a-f[0].a)+r[3]*f[3].c+r[5]*-f[3].a),A[3*this.b+2]+=s*(r[0]*(f[1].b-f[0].b)+r[1]*(f[0].a-f[1].a)+r[3]*-f[3].b+r[4]*f[3].a),A[3*this.c]+=s*(r[1]*f[0].c+r[2]*-f[0].b+r[4]*(f[3].c-f[2].c)+r[5]*(f[2].b-f[3].b)),A[3*this.c+1]+=s*(r[0]*-f[0].c+r[2]*f[0].a+r[3]*(f[2].c-f[3].c)+r[5]*(f[3].a-f[2].a)),A[3*this.c+2]+=s*(r[0]*f[0].b+r[1]*-f[0].a+r[3]*(f[3].b-f[2].b)+r[4]*(f[2].a-f[3].a)),A[3*this.d]+=s*(r[4]*f[2].c-r[5]*f[2].b),A[3*this.d+1]+=s*(r[5]*f[2].a-r[3]*f[2].c),A[3*this.d+2]+=s*(r[3]*f[2].b-r[4]*f[2].a))},U.a=0,U.b=0,U.c=0,U.d=0,U.e=0,U.f=0,U.g=0;var qrt=H(361);p(362,1,Vf,sj),U.cc=function(e,A,n,P){var r,i,f,D,Q,o,L,s,y,l;return P&&(X(this.g,this.a)==1||X(this.g,this.c)==1)?0:(Q=kn(new v0(e,this.a,this.c)),o=Q*Q,L=o*o*o*Q,r=1.07*this.i/(Q+rH*this.i),i=r*r,f=i*i*i*r,y=this.i*this.i,l=y*y*y*this.i,D=1.12*l/(L+iH*l)-2,s=f*D*this.j,s)},U.dc=function(e,A){var n,P,r,i,f,D,Q,o,L,s,y,l;for(r=kn(new v0(e,this.a,this.c)),f=r/this.i,D=f*f,Q=D*D*D,o=Q*f,L=o+iH,s=1.07/(f+1.07-1),y=s*s,l=y*y*y*s,n=this.j/this.i*l*(fH*Q/(L*L)+(fH/L+14)/(f+rH)),i=0;i<3;i++)P=.01*this.i,r>0&&(P=n*(e[3*this.a+i]-e[3*this.c+i])/r),A[3*this.a+i]+=P,A[3*this.c+i]-=P},U.a=0,U.b=0,U.c=0,U.d=0,U.e=0,U.f=0,U.i=0,U.j=0;var Irt=H(362);p(22,1,{22:1},gP,gh,lh,zi,v0),U.mb=function(e){var A;return e===this?!0:Xt(e,22)?(A=e,w.Math.abs(this.a-A.a)<.01&&w.Math.abs(this.b-A.b)<.01&&w.Math.abs(this.c-A.c)<.01):!1},U.ob=function(){return vt(this.a)+vt(this.b)+vt(this.c)},U.a=0,U.b=0,U.c=0;var YV=H(22);p(383,1,{},Hv),U.kc=function(e,A){return zn(this.b[e][A])},U.lc=function(){return this.b.length};var xrt=H(383);p(375,1,{},IB),U.kc=function(e,A){return this.a[e][A]},U.lc=function(){return this.a.length};var Nrt=H(375);p(390,1,{},xB),U.kc=function(e,A){return zn(this.a[e][A])},U.lc=function(){return this.a.length};var Ort=H(390);p(386,1,{},Tv),U.kc=function(e,A){return zn(this.b[e][A])},U.lc=function(){return this.b.length};var Grt=H(386);p(384,1,{},mm);var Jrt=H(384);p(196,1,{},Wo),U.kc=function(e,A){return zn(this.a.a[e][A])},U.lc=function(){return this.a.a.length};var zrt=H(196);p(391,1,{},Qv),U.kc=function(e,A){return zn(this.a[e][A])},U.lc=function(){return this.a.length};var Yrt=H(391);p(393,1,{},qB);var Krt=H(393);p(392,1,{},NB),U.kc=function(e,A){return zn(this.a[e][A])},U.lc=function(){return this.a.length};var Xrt=H(392);p(394,1,{},Mv),U.kc=function(e,A){return zn(this.a[e][A])},U.lc=function(){return this.a.length};var Zrt=H(394);p(385,1,{},jg),U.kc=function(e,A){return zn(this.b[e][A])},U.lc=function(){return this.b.length};var Wrt=H(385);p(387,1,{},hv),U.kc=function(e,A){return zn(this.b[e][A])},U.lc=function(){return this.b.length};var _rt=H(387);p(388,1,{},pg),U.kc=function(e,A){return zn(this.b[e][A])},U.lc=function(){return this.b.length};var $rt=H(388);p(51,1,{},RU,On,Gv),U.pb=function(){return this.a+\",\"+this.b+\",\"+this.c},U.a=0,U.b=0,U.c=0;var art=H(51);p(389,1,{},ov),U.kc=function(e,A){return zn(this.a[e][A])},U.lc=function(){return this.a.length};var t9t=H(389);p(430,1,{});var e9t=H(430);p(280,1,{},GR),U.a=null;var Gf,A9t=H(280);p(281,1,{},oj),U.a=null;var v8,n9t=H(281);p(282,430,{},jv),U.a=!1,U.e=0;var KV,P9t=H(282);p(213,1,{},UT);var XV,Y4,Jf,r9t=H(213);p(274,1,{},Mm);var yi,ul=!1,i9t=H(274);p(275,1,{},hR);var f9t=H(275);p(236,1,{236:1},J7),U.b=0;var D9t=H(236);p(45,1,{45:1},Ze),U.b=0;var u9t=H(45);p(131,1,{},fD);var Q9t=H(131),ZV,NP;p(279,1,{});var o9t=H(279),Ql,zf;p(285,1,{},Mj);var WV,bo,Lr,ol=!1,sr,Yf,U9t=H(285);p(49,1,kf,i8,Vs,R3,gT),U.c=!1,U.d=0;var L9t=H(49);p(62,193,{193:1,62:1,4:1},GD,dj),U.Eb=function(e,A){return this.a=sR(this,e,A),this.a!=0},U.Fb=function(){this.a=0},U.Gb=function(){var e;return e=new GD,e.i[0].a=this.i[0].a,e.i[0].b=this.i[0].b,e.i[1].a=this.i[1].a,e.i[1].b=this.i[1].b,e.g=this.g,e},U.Hb=function(e,A){return sR(this,e,A)!=0},U.Ib=function(e,A){var n,P,r,i,f,D,Q;ae(e,this.g?Os(rP,Dh(e)):QB(e)),i=A?X1(A,this.i[0].a):this.i[0].a,D=A?K1(A,this.i[0].b):this.i[0].b,f=A?X1(A,this.i[1].a):this.i[1].a,Q=A?K1(A,this.i[1].b):this.i[1].b,n=f-i,P=Q-D,KU(e,w.Math.max(1,.019999999552965164*w.Math.sqrt(n*n+P*P))),x9(e,i,D,f,Q),r=new OD(4),Ce(r,f+n/40,Q+P/40),Ce(r,f-n/5+P/10,Q-P/5-n/10),Ce(r,f-n/20,Q-P/20),Ce(r,f-n/5-P/10,Q-P/5+n/10),YU(e,new nD(r))},U.Jb=function(e){var A,n,P,r,i,f;return f=rT(this),i=w.Math.max(f/8,3),A=bA(this.i[0].a,this.i[0].b,this.i[1].a,this.i[1].b),P=w.Math.abs(i*w.Math.cos(A)),r=w.Math.abs(i*w.Math.sin(A)),n=new tD,this.i[0].a<this.i[1].a?(n.c=this.i[0].a-P,n.b=this.i[1].a-this.i[0].a+2*P):(n.c=this.i[1].a-P,n.b=this.i[0].a-this.i[1].a+2*P),this.i[0].b<this.i[1].b?(n.d=this.i[0].b-r,n.a=this.i[1].b-this.i[0].b+2*r):(n.d=this.i[1].b-r,n.a=this.i[0].b-this.i[1].b+2*r),n},U.Kb=function(){var e;return e=new V0,J(e,' x1=\"'+this.i[0].a+'\"'),J(e,' y1=\"'+this.i[0].b+'\"'),J(e,' x2=\"'+this.i[1].a+'\"'),J(e,' y2=\"'+this.i[1].b+'\"'),e.a},U.Lb=function(){return\"arrow\"},U.Mb=function(e){var A,n,P,r,i,f;switch(ae(e,SD(e)),this.a){case 1:nL(e,this.i[0].a-8,this.i[0].b-8,16);break;case 2:nL(e,this.i[1].a-8,this.i[1].b-8,16);break;case 3:i=rT(this),r=w.Math.max(i/8,3),A=bA(this.i[0].a,this.i[0].b,this.i[1].a,this.i[1].b),n=r*w.Math.cos(A),P=-r*w.Math.sin(A),f=new OD(4),Ce(f,this.i[0].a+n,this.i[0].b+P),Ce(f,this.i[1].a+n,this.i[1].b+P),Ce(f,this.i[1].a-n,this.i[1].b-P),Ce(f,this.i[0].a-n,this.i[0].b-P),YU(e,new nD(f))}},U.Ob=function(e,A){switch(this.a){case 1:this.i[0].a=this.o[0]+e-this.k,this.i[0].b=this.p[0]+A-this.n;break;case 2:this.i[1].a=this.o[1]+e-this.k,this.i[1].b=this.p[1]+A-this.n;break;default:ZF(this,e,A)}},U.a=0;var s9t=H(62);p(214,1,{},y7),U.a=!1,U.b=!1,U.i=0,U.j=0,U.q=0,U.r=!1,U.t=!1;var y9t=H(214);p(286,1,{},wj);var l9t=H(286);p(183,1,{183:1,33:1},u5),U.Sb=function(e){return aO(this,e)},U.mb=function(e){return this.d==e.d&&this.e==e.e},U.a=0,U.b=0,U.c=0,U.d=0,U.e=0,U.f=0,U.g=0;var h9t=H(183);p(97,55,{97:1,4:1,33:1,55:1},ji);var Ul,Ll,sl,Ro,yl,ll,Vtt=Er(97,JN);p(199,1,{199:1},lp),U.b=!1,U.e=0;var Ett=H(199);p(148,1,{148:1,33:1},As),U.Sb=function(e){return AJ(this,e)},U.a=0,U.b=0,U.c=0,U.d=0,U.e=0;var Stt=H(148);p(300,1,{},u7),U.b=0,U.c=0;var jo,hl,T9t=H(300);p(202,1,{},LU);var c9t=H(202);p(414,1,{},Uj),U.b=0,U.g=0;var w9t=H(414);p(201,1,{201:1},Ih),U.a=0;var g9t=H(201);p(124,1,{124:1,33:1},cD),U.Sb=function(e){return this.b<e.b?-1:this.b>e.b?1:this.a<e.a?-1:this.a>e.a?1:0},U.a=0,U.b=0;var d9t=H(124);p(413,1,{},Kg);var B9t=H(413);p(170,1,{170:1},Gl),U.b=0,U.c=0,U.d=!1;var qtt=H(170);p(412,1,{},lj),U.a=0,U.c=0,U.d=0,U.e=0,U.f=0,U.g=0,U.n=0,U.o=0,U.p=!1,U.q=0,U.r=0,U.s=0,U.K=0;var v9t=H(412);p(409,1,{},Vb);var F9t=H(409);p(408,1,{},Se),U.a=0,U.b=0,U.c=0,U.q=0;var m9t=H(408);p(293,1,Sf,Om),U.mc=function(e){NX(this,e)},U.a=0,U.B=!1,U.C=0;var _V,$V,li,k9t=H(293);p(378,1,{},z7),U.nc=function(){eq(this.a,this.b)};var b9t=H(378);p(295,1,Sf,$m),U.mc=function(e){RX(this,e)},U.a=0,U.t=0,U.v=!1;var R9t=H(295);p(403,1,{},Y7),U.nc=function(){Aq(this.a,this.b)};var j9t=H(403);p(220,1,Sf,bm,Ok),U.mc=function(e){eY(this,e)},U.a=0,U.f=!1,U.g=0,U.i=0,U.j=0,U.k=0;var aV,p9t=H(220);p(404,1,{},K7),U.nc=function(){nq(this.a,this.b)};var C9t=H(404);p(338,1,{});var H9t=H(338);p(162,338,{}),U.j=0;var M9t=H(162);p(24,162,{24:1},S1),U.a=!1;var V9t=H(24);p(287,1,Sf,_R),U.mc=function(e){var A;Xt(e,140)?na((A=this,A)):Xt(e,156)?Ltt(this,e):Xt(e,137)&&rtt(this,e)},U.a=!1,U.b=!1,U.c=0,U.d=!1,U.e=0,U.f=0,U.g=!1,U.q=0,U.s=0,U.t=0,U.u=0,U.w=0,U.B=0,U.C=0,U.D=0,U.F=0,U.H=0,U.J=0,U.K=0,U.N=0,U.O=!1,U.T=0,U.U=0,U.W=!1,U.X=0,U.Y=0,U.Z=!1,U.$=0,U.ab=0,U.eb=0,U.fb=0,U.hb=0,U.ib=0,U.kb=0,U.lb=0;var po=!0,E9t=H(287);p(294,1,{},jw);var S9t=H(294);p(296,1,{},pw);var q9t=H(296);p(297,1,{},wd),U.b=0;var I9t=H(297);p(298,1,{},pA),U.nc=function(){};var x9t=H(298);p(299,1,{},Cw),U.nc=function(){yB(this.a)};var N9t=H(299);p(302,1,{},gd);var O9t=H(302);p(303,1,{262:1},dd),U.oc=function(){rG(this.a,this.c,this.b)},U.c=0;var G9t=H(303);p(304,1,{},X7),U.Rb=function(e,A){return qJ(this.a,this.b,e,A)},U.mb=function(e){return this===e};var J9t=H(304);p(305,1,Sf,ab),U.mc=function(e){z5(this,e)},U.b=0,U.d=0,U.e=0,U.f=0,U.j=0,U.k=0,U.o=0;var F8=0,dn=0,z9t=H(305);p(307,1,{},Z7),U.nc=function(){$S(this.a,this.b)},U.b=0;var Y9t=H(307);p(301,1,Sf,uv),U.mc=function(e){VK(this,e)};var tE,Tl,eE,K9t=H(301);p(410,1,{},Hw),U.nc=function(){kq(this.a)};var X9t=H(410);p(140,162,{140:1},VU),U.a=0;var Z9t=H(140),AE,nE,Kf,PE;p(104,120,{120:1,104:1},hu),U.qb=function(e){x9(this.B,e.a,e.c,e.b,e.d)},U.rb=function(e){xN(this.B,e.a,e.c,e.b,e.d)},U.sb=function(e){YU(this.B,new nD(e))},U.tb=function(e,A,n){bh(this.B,A,n,e)},U.ub=function(e,A,n){nL(this.B,e,A,n)},U.vb=function(e){return KL(this.B,e).b},U.wb=function(){return this.b},U.xb=function(){rm(this),this.a=1},U.Ab=function(e){this.a=e,KU(this.B,this.a)},U.Bb=function(e){ae(this.B,e)},U.Cb=function(e){this.b=e,this.B&&AL(this.B,e,!1,!1)},U.a=0,U.b=0;var rE=H(104);p(221,1,{});var W9t=H(221);p(156,162,{156:1},UB),U.a=!1,U.b=0;var _9t=H(156);p(137,162,{137:1},TT),U.pb=function(){return iE[this.j]+\" x:\"+this.g+\" y:\"+this.i+\" button:\"+this.b+\" clicks:\"+this.c+(this.f?\" shift\":\"\")+(this.d?\" ctrl\":\"\")+(this.a?\" alt\":\"\")+\" isPopup:\"+(this.e?\"y\":\"n\")},U.a=!1,U.b=0,U.c=0,U.d=!1,U.e=!1,U.f=!1,U.g=0,U.i=0;var iE,$9t=H(137);p(56,1,{56:1},cr,d3),U.pb=function(){return\"x:\"+this.a+\" y:\"+this.b},U.a=0,U.b=0;var K4=H(56);p(117,1,{419:1},Cv,OD),U.Hb=function(e,A){var n,P,r;for(r=!1,P=this.a-1,n=0;n<this.a;n++)this.c[n]>A!=this.c[P]>A&&e<(this.b[P]-this.b[n])*(A-this.c[n])/(this.c[P]-this.c[n])+this.b[n]&&(r=!r),P=n;return r},U.a=0;var a9t=H(117);p(35,1,{35:1,419:1},tD,QA),U.Hb=function(e,A){return N9(this,e,A)},U.pb=function(){return\"x:\"+this.c+\" y:\"+this.d+\" w:\"+this.b+\" h:\"+this.a},U.a=0,U.b=0,U.c=0,U.d=0;var cl=H(35),de=-1,fE,X4;p(416,1,{},Xg),U.getCanMolecule=function(e){var A;return A=y$(this.a,e),new HA(A)},U.getEncodedCoordinates=function(e){return Su(this.a,e)},U.getEncodedMapping=function(){return Xd(this.a)},U.getFinalRank=function(){return this.a.f},U.getGraphAtoms=function(){return jq(this.a)},U.getGraphIndexes=function(){return pq(this.a)},U.getIDCode=function(){return me(this.a)},U.getSymmetryRank=function(e){return HU(this.a,e)},U.getSymmetryRanks=function(){return this.a.g},U.hasCIPParityDistinctionProblem=function(){return this.a.d},U.invalidateCoordinates=function(){this.a.s=null},U.normalizeEnantiomer=function(){return yj(this.a)},U.setParities=function(){X5(this.a)};var tit=H(416);p(420,1,{},Wc);var Itt=2,xtt=0,Ntt=1,Ott=4,Gtt=3,eit=H(420);p(421,1,{},Wg),U.getConformerCount=function(){return this.a.p},U.getNextConformerAsMolecule=function(e){var A,n;return A=e?e.a:null,n=Xx(this.a,A),n?n==A?e:new HA(n):null},U.getOneConformerAsMolecule=function(e){var A;return A=AN(this.a,e.a),A?e:null},U.getPotentialConformerCount=function(){return fI(this.a)},U.qc=function(e,A,n,P){return hZ(this.a,e.a,A,n,P)},U.initializeConformers=function(e,A){A===void 0&&(A={});var n=A.strategy;n===void 0&&(n=3);var P=A.maxTorsionSets;P===void 0&&(P=Ry);var r=A.use60degreeSteps;return r===void 0&&(r=!1),this.qc(e,n,P,r)};var Jtt=4,ztt=3,Ytt=1,Ktt=2,Ait=H(421);p(422,1,{},_c);var nit=H(422);p(423,1,{},vg),U.assessDruglikeness=function(e){var A;return S_(this.a,(A=e.a,!wl&&(wl=new ql),A))},U.getDetail=function(){var e;return e=this.a.a,!e&&aN(),fQ(e)},U.getDruglikenessString=function(e){return DX(e.a)};var Xtt=-999,Pit=H(423);p(424,1,{},CB),U._minimise=function(e,A,n){return Jb(this.a,e,A)},U.getTotalEnergy=function(){return Cq(this.a)},U.size=function(){return this.a.b.q};var Ztt=Q4,Wtt=o4,_tt=Ey,DE=!1,uE=!1,QE=!1,rit=H(424);p(42,1,{42:1},Qd,tL,HA),U.addAtom=function(e){return Wr(this.a,e)},U.addBond=function(e,A){return eL(this.a,e,A)},U.addFragment=function(e,A,n){YR(this.a,e.a,A,n)},U.rc=function(){EN(this.a)},U.sc=function(e){wp(this.a,e)},U.addImplicitHydrogens=function(e){e===void 0?this.rc():this.sc(e)},U.tc=function(){lU(),h5(this.a,1)},U.uc=function(e){h5(this.a,e)},U.addMissingChirality=function(e){e===void 0?this.tc():this.uc(e)},U.addMolecule=function(e){return kD(this.a,e.a)},U.addOrChangeAtom=function(e,A,n,P,r,i,f){return GT(this.a,e,A,n,P,r,i,f)},U.addOrChangeBond=function(e,A,n){return vb(this.a,e,A,n)},U.addRing=function(e,A,n,P,r){return sf(this.a,e,A,n,P,r)},U.addRingToAtom=function(e,A,n,P){return jR(this.a,e,A,n,P)},U.addRingToBond=function(e,A,n,P){return GQ(this.a,e,A,n,P)},U.addSubstituent=function(e,A){return Gs(this.a,e.a,A)},U.calculateTorsion=function(e){return qQ(this.a,e)},U.canonizeCharge=function(e){return up(this.a,e,!1)},U.changeAtom=function(e,A,n,P,r){return gf(this.a,e,A,n,P,r)},U.changeAtomCharge=function(e,A){return QT(this.a,e,A)},U.changeBond=function(e,A){return o8(this.a,e,A)},U.clear=function(){vi(this.a)},U.convertStereoBondsToSingleBonds=function(e){F5(this.a,e)},U.copyAtom=function(e,A,n,P){return En(this.a,e.a,A,n,P)},U.copyBond=function(e,A,n,P,r,i){return iQ(this.a,e.a,A,n,P,r,i)},U.copyMolecule=function(e){ff(this.a,e.a)},U.copyMoleculeByAtoms=function(e,A,n,P){ii(this.a,e.a,A,n,P)},U.copyMoleculeByBonds=function(e,A,n,P){return qj(this.a,e.a,A,n,P)},U.copyMoleculeProperties=function(e){kU(this.a,e.a)},U.deleteAtom=function(e){wQ(this.a,e)},U.deleteAtomOrBond=function(e,A){return Pb(this.a,e,A)},U.deleteAtoms=function(e){return kJ(this.a,e)},U.deleteBond=function(e){pI(this.a,e)},U.deleteBondAndSurrounding=function(e){XT(this.a,e)},U.deleteMarkedAtomsAndBonds=function(){return Ai(this.a)},U.deleteMolecule=function(){vi(this.a)},U.deleteSelectedAtoms=function(){return nQ(this.a)},U.ensureHelperArrays=function(e){ut(this.a,e)},U.findAlleneCenterAtom=function(e){return fb(this.a,e)},U.findAlleneEndAtom=function(e,A){return Bm(this.a,e,A)},U.findAtom=function(e,A){return ZA(this.a,e,A)},U.findBINAPChiralityBond=function(e){return os(this.a,e)},U.findBond=function(e,A){return wf(this.a,e,A)},U.findRingSystem=function(e,A,n,P){fR(this.a,e,A,n,P)},U.getAbsoluteAtomParity=function(e){return T3(this.a,e)},U.getAbsoluteBondParity=function(e){return zq(this.a,e)},U.getAllAtoms=function(){return this.a.q},U.getAllBonds=function(){return this.a.r},U.getAllConnAtoms=function(e){return Ht(this.a,e)},U.getAllConnAtomsPlusMetalBonds=function(e){return De(this.a,e)},U.getAllHydrogens=function(e){return vd(this.a,e)},U.getAromaticRingCount=function(){return YO(this.a)},U.getAtomAbnormalValence=function(e){return b9(this.a,e)},U.getAtomCIPParity=function(e){return jU(this.a,e)},U.getAtomCharge=function(e){return b1(this.a,e)},U.getAtomColor=function(e){return Qu(this.a,e)},U.getAtomCustomLabel=function(e){return Wn(this.a,e)},U.getAtomESRGroup=function(e){return EA(this.a,e)},U.getAtomESRType=function(e){return ne(this.a,e)},U.getAtomLabel=function(e){return Ri(this.a,e)},U.getAtomList=function(e){return MA(this.a,e)},U.getAtomListString=function(e){return zT(this.a,e)},U.getAtomMapNo=function(e){return R1(this.a,e)},U.getAtomMass=function(e){return ye(this.a,e)},U.getAtomParity=function(e){return d0(this.a,e)},U.getAtomPi=function(e){return $1(this.a,e)},U.getAtomPreferredStereoBond=function(e){return xv(this.a,e)},U.getAtomQueryFeaturesObject=function(e){return Ea(this.a,e)},U.getAtomRadical=function(e){return mA(this.a,e)},U.getAtomRingBondCount=function(e){return Ch(this.a,e)},U.getAtomRingCount=function(e,A){return V5(this.a,e,A)},U.getAtomRingSize=function(e){return Hr(this.a,e)},U.getAtomX=function(e){return kt(this.a,e)},U.getAtomY=function(e){return pt(this.a,e)},U.getAtomZ=function(e){return vA(this.a,e)},U.getAtomicNo=function(e){return X(this.a,e)},U.getAtoms=function(){return this.a.f},U.getAverageBondLength=function(e){return ML(this.a,e)},U.getAverageTopologicalAtomDistance=function(){return KX(this.a)},U.getBond=function(e,A){return u1(this.a,e,A)},U.getBondAngle=function(e,A){return Y0(this.a,e,A)},U.getBondAtom=function(e,A){return z(this.a,e,A)},U.getBondBridgeMaxSize=function(e){return Th(this.a,e)},U.getBondBridgeMinSize=function(e){return q3(this.a,e)},U.getBondCIPParity=function(e){return wu(this.a,e)},U.getBondESRGroup=function(e){return Wi(this.a,e)},U.getBondESRType=function(e){return cP(this.a,e)},U.getBondLength=function(e){return lT(this.a,e)},U.getBondOrder=function(e){return dt(this.a,e)},U.getBondParity=function(e){return qe(this.a,e)},U.getBondPreferredStereoBond=function(e){return HY(this.a,e)},U.getBondQueryFeatures=function(e){return Ae(this.a,e)},U.getBondQueryFeaturesObject=function(e){return b_(this.a,e)},U.getBondRingSize=function(e){return C9(this.a,e)},U.getBondType=function(e){return l1(this.a,e)},U.getBondTypeSimple=function(e){return ou(this.a,e)},U.getBonds=function(){return this.a.g},U.getBounds=function(){var e;return e=Gb(this.a,lE),e?zx(e.c,e.d,e.b,e.a):null},U.getCanonizedIDCode=function(e){var A;return A=new SA(this.a,e),me(A)},U.getChiralText=function(){return bR(this.a)},U.getChirality=function(){return this.a.I},U.getCompactCopy=function(){return new HA(Kn(this.a))},U.getConnAtom=function(e,A){return _(this.a,e,A)},U.getConnAtoms=function(e){return O(this.a,e)},U.getConnBond=function(e,A){return xt(this.a,e,A)},U.getConnBondOrder=function(e,A){return CA(this.a,e,A)},U.getDefaultMaxValenceUncharged=function(e){return WO(this.a,e)},U.getDiastereotopicAtomIDs=function(){return PK(this.a)},U.getElectronValenceCorrection=function(e,A){return Bu(this.a,e,A)},U.getExcludedNeighbourCount=function(e){return EL(this.a,e)},U.getExplicitHydrogens=function(e){return b3(this.a,e)},U.getFinalRanks=function(e){var A;return A=new SA(this.a,e),A.f},U.getFisherProjectionParity=function(e,A,n,P){return b5(this.a,e,A,n,P)},U.getFragmentAtoms=function(e,A){return ek(this.a,e,A)},U.getFragmentNumbers=function(e,A,n){return nr(this.a,e,A,n)},U.getFragments=function(){var e,A,n;for(e=GO(this.a),n=c(Z4,U4,42,e.length,0,1),A=0;A<e.length;A++)n[A]=new HA(e[A]);return n},U.getFreeValence=function(e){return Yi(this.a,e)},U.getHandleHydrogenMap=function(){return Du(this.a)},U.getHelperArrayStatus=function(){return this.a.T},U.getHoseCodes=function(e){e=e||{};var A=(typeof e.maxSphereSize===ho?5:e.maxSphereSize)|0,n=(typeof e.type===ho?0:e.type)|0;return pJ(this.a,A,n)},U.getIDCode=function(){var e;return e=jF(this.a),e==null&&(e=me(new FA(this.a))),e},U.getIDCodeAndCoordinates=function(){return{idCode:this.getIDCode(),coordinates:this.getIDCoordinates()}},U.getIDCoordinates=function(){var e;return e=jG(this.a),e==null&&(e=k7(new FA(this.a))),e},U.getImplicitHigherValence=function(e,A){return uf(this.a,e,A)},U.getImplicitHydrogens=function(e){return It(this.a,e)},U.getIndex=function(){return sx(this.a)},U.getLowestFreeValence=function(e){return gQ(this.a,e)},U.getMaxAtoms=function(){return this.a.M},U.getMaxBonds=function(){return this.a.N},U.getMaxValence=function(e){return Lh(this.a,e)},U.getMaxValenceUncharged=function(e){return Cn(this.a,e)},U.getMetalBondedConnAtoms=function(e){return Si(this.a,e)},U.getMolecularFormula=function(){return new rg(this.a)},U.getMoleculeColor=function(){return this.a.O},U.getMolweight=function(){return CY(this.a)},U.getName=function(){return this.a.P},U.getNonHydrogenNeighbourCount=function(e){return e0(this.a,e)},U.getNumberOfHydrogens=function(){return PJ(this.a)},U.getOccupiedValence=function(e){return x1(this.a,e)},U.getPath=function(e,A,n,P,r){return L2(this.a,e,A,n,P,null,r)},U.getPathBonds=function(e,A,n){qm(this.a,e,A,n)},U.getPathLength=function(e,A){return o5(this.a,e,A)},U.getRingSet=function(){return new Mw(Nn(this.a))},U.getRotatableBondCount=function(){return dR(this.a)},U.getStereoBond=function(e){return pQ(this.a,e)},U.getStereoCenterCount=function(){return TF(this.a)},U.vc=function(){return this.a},U.getStereoProblem=function(e){return Ig(this.a,e)},U.getSubstituent=function(e,A,n,P,r){return SQ(this.a,e,A,n,P.a,r)},U.getSubstituentSize=function(e,A){return U5(this.a,e,A)},U.getSymmetryRank=function(e){return R0(this.a,e)},U.getZNeighbour=function(e,A){return ej(this.a,e,A)},U.invalidateHelperArrays=function(e){WS(this.a,e)},U.wc=function(e,A){var n;n=new z8(e),A>=0&&B7(n,A),A9(n,this.a),of(this.a)},U.inventCoordinates=function(e){e=e||{};var A=0;e.skipDefaultTemplates&&(A|=1),e.keepHydrogens!==!0&&(A|=2),e.keepMarkedAtomCoordinates&&(A|=4),e.preferMarkedAtomCoordinates&&(A|=8);var n=e.seed||0;this.wc(A,n)},U.is3D=function(){return Nh(this.a)},U.isAlkaliMetal=function(e){return sO(this.a,e)},U.isAllylicAtom=function(e){return hI(this.a,e)},U.isAmideTypeBond=function(e){return OK(this.a,e)},U.isAromaticAtom=function(e){return vn(this.a,e)},U.isAromaticBond=function(e){return _e(this.a,e)},U.isAtomConfigurationUnknown=function(e){return v9(this.a,e)},U.isAtomMarkedForDeletion=function(e){return Wq(this.a,e)},U.isAtomParityPseudo=function(e){return Hi(this.a,e)},U.isAtomStereoCenter=function(e){return V8(this.a,e)},U.isAutoMappedAtom=function(e){return Bn(this.a,e)},U.isBINAPChiralityBond=function(e){return Pi(this.a,e)},U.isBondBackgroundHilited=function(e){return H3(this.a,e)},U.isBondBridge=function(e){return gu(this.a,e)},U.isBondForegroundHilited=function(e){return F9(this.a,e)},U.isBondMarkedForDeletion=function(e){return AI(this.a,e)},U.isBondParityPseudo=function(e){return gU(this.a,e)},U.isBondParityUnknownOrNone=function(e){return M3(this.a,e)},U.isChalcogene=function(e){return Hh(this.a,e)},U.isDelocalizedBond=function(e){return O8(this.a,e)},U.isEarthAlkaliMetal=function(e){return yO(this.a,e)},U.isElectronegative=function(e){return tA(this.a,e)},U.isElectropositive=function(e){return XY(this.a,e)},U.isFlatNitrogen=function(e){return SP(this.a,e,!0)},U.isFragment=function(){return this.a.K},U.isHalogene=function(e){return _N(this.a,e)},U.isMarkedAtom=function(e){return z0(this.a,e)},U.isMetalAtom=function(e){return _0(this.a,e)},U.isNaturalAbundance=function(e){return fu(this.a,e)},U.isNitrogenFamily=function(e){return Uh(this.a,e)},U.isOrganicAtom=function(e){return Cb(this.a,e)},U.isPseudoRotatableBond=function(e){return AR(this.a,e)},U.isPurelyOrganic=function(){return pK(this.a)},U.isRingAtom=function(e){return Vi(this.a,e)},U.isRingBond=function(e){return fA(this.a,e)},U.isSelectedAtom=function(e){return P0(this.a,e)},U.isSelectedBond=function(e){return mP(this.a,e)},U.isSimpleHydrogen=function(e){return mG(this.a,e)},U.isSmallRingAtom=function(e){return dU(this.a,e)},U.isSmallRingBond=function(e){return $P(this.a,e)},U.isStabilizedAtom=function(e){return TI(this.a,e)},U.isStereoBond=function(e){return p9(this.a,e)},U.markAtomForDeletion=function(e){$w(this.a,e)},U.markBondForDeletion=function(e){Pq(this.a,e)},U.normalizeAmbiguousBonds=function(){return fi(this.a)},U.removeAtomColors=function(){Jd(this.a)},U.removeAtomCustomLabels=function(){this.a.t=null},U.removeAtomMarkers=function(){eh(this.a)},U.removeAtomSelection=function(){Fx(this.a)},U.removeBondHiliting=function(){AB(this.a)},U.removeExplicitHydrogens=function(){w5(this.a,!0)},U.removeQueryFeatures=function(){return Wb(this.a)},U.renumberESRGroups=function(e){return $0(this.a,e)},U.scaleCoords=function(e){KB(this.a,e)},U.setAllAtoms=function(e){Qq(this.a,e)},U.setAllBonds=function(e){oq(this.a,e)},U.setAssignParitiesToNitrogen=function(e){xq(this.a,e)},U.setAtomAbnormalValence=function(e,A){XA(this.a,e,A)},U.setAtomCIPParity=function(e,A){Id(this.a,e,A)},U.setAtomCharge=function(e,A){E0(this.a,e,A)},U.setAtomColor=function(e,A){BD(this.a,e,A)},U.setAtomConfigurationUnknown=function(e,A){ZU(this.a,e,A)},U.setAtomCustomLabel=function(e,A){EP(this.a,e,A)},U.setAtomESR=function(e,A,n){Me(this.a,e,A,n)},U.setAtomList=function(e,A,n){yf(this.a,e,A,n)},U.setAtomMapNo=function(e,A,n){We(this.a,e,A,n)},U.setAtomMarker=function(e,A){Jn(this.a,e,A)},U.setAtomMass=function(e,A){R9(this.a,e,A)},U.setAtomParity=function(e,A,n){ce(this.a,e,A,n)},U.setAtomQueryFeature=function(e,A,n){h1(this.a,e,A,n)},U.setAtomRadical=function(e,A){Ne(this.a,e,A)},U.setAtomSelection=function(e,A){dP(this.a,e,A)},U.setAtomX=function(e,A){Be(this.a,e,A)},U.setAtomY=function(e,A){Ie(this.a,e,A)},U.setAtomZ=function(e,A){TP(this.a,e,A)},U.setAtomicNo=function(e,A){K0(this.a,e,A)},U.setBondAtom=function(e,A,n){gD(this.a,e,A,n)},U.setBondBackgroundHiliting=function(e,A){px(this.a,e,A)},U.setBondCIPParity=function(e,A){Pd(this.a,e,A)},U.setBondESR=function(e,A,n){U8(this.a,e,A,n)},U.setBondForegroundHiliting=function(e,A){Cx(this.a,e,A)},U.setBondOrder=function(e,A){fh(this.a,e,A)},U.setBondParity=function(e,A,n){P8(this.a,e,A,n)},U.setBondParityUnknownOrNone=function(e){n3(this.a,e)},U.setBondQueryFeature=function(e,A,n){Ge(this.a,e,A,n)},U.setBondType=function(e,A){w0(this.a,e,A)},U.setChirality=function(e){Ol(this.a,e)},U.setFragment=function(e){je(this.a,e)},U.setHelperValidity=function(e){SS(this.a,e)},U.setHydrogenProtection=function(e){qS(this.a,e)},U.setMaxAtoms=function(e){kQ(this.a,e)},U.setMaxBonds=function(e){eQ(this.a,e)},U.setMoleculeColor=function(e){IS(this.a,e)},U.setName=function(e){W2(this.a,e)},U.setParitiesValid=function(e){UD(this.a,e)},U.setStereoBondFromAtomParity=function(e){ey(this.a,e)},U.setStereoBondFromBondParity=function(e){Yj(this.a,e)},U.setStereoBondsFromParity=function(){of(this.a)},U.setToRacemate=function(){this.a.L=!0},U.setUnknownParitiesToExplicitlyUnknown=function(){S3(this.a)},U.shareSameFragment=function(e,A){return o5(this.a,e,A)!=-1},U.stripIsotopInfo=function(){return ZJ(this.a)},U.stripSmallFragments=function(e){return IR(this.a,e)},U.stripStereoInformation=function(){ds(this.a)},U.suggestBondType=function(e,A){return Qx(this.a,e,A)},U.supportsImplicitHydrogen=function(e){return es(this.a,e)},U.swapAtoms=function(e,A){E5(this.a,e,A)},U.swapBonds=function(e,A){aT(this.a,e,A)},U.toIsomericSmiles=function(e){e=e||{};var A=e.createSmarts===!0,n=e.includeMapping===!0,P=e.kekulizedOutput===!0;return this.xc(A,n,P)},U.xc=function(e,A,n){return Zv(this,e,A,n)},U.toMolfile=function(){var e;return e=new C3(this.a),e.a.a},U.toMolfileV3=function(){var e;return e=new qg(this.a),e.b.a},U.toSVG=function(e,A,n,P,r,i,f){var D,Q,o,L,s,y,l,h,T,g,m,v;for(o=!0,s=0;s<this.a.q-1;s++)if(kt(this.a,s)!=kt(this.a,s+1)||pt(this.a,s)!=pt(this.a,s+1)){o=!1;break}return y=o?Kn(this.a):this.a,o&&A9(new z8(0),y),ut(y,95),v=h_(f),L=o$(f),Q=new Gk(y,L,i),Q.J=n,Q2(Q,null,new QA(0,0,e,A),v),D=Q.v,Z5(Q,null),m=Zj(Q),P?(h=Jt(M1(w.Math.round(D.b+r*2))),l=Jt(M1(w.Math.round(D.a+r*2))),T=Jt(M1(w.Math.round(D.c-r))),g=Jt(M1(w.Math.round(D.d-r))),Fh(m,'width=\"\\\\d+px\" height=\"\\\\d+px\" viewBox=\"0 0 \\\\d+ \\\\d+\"','width=\"'+h+'px\" height=\"'+l+'px\" viewBox=\"'+T+\" \"+g+\" \"+h+\" \"+l+'\"')):m},U.toSmarts=function(){return ku(new lD(this.a,1))},U.toSmiles=function(){return Zv(this,!1,!1,!0)},U.translateCoords=function(e,A){CL(this.a,e,A)},U.validate=function(){c_(this.a)},U.zoomAndRotate=function(e,A,n){Hk(this.a,e,A,n)},U.zoomAndRotateInit=function(e,A){rb(this.a,e,A)};var $tt=32,att=2,t1t=4,e1t=6,A1t=64,n1t=128,P1t=1,r1t=256,i1t=8,f1t=re,D1t=16,u1t=N1,Q1t=512,o1t=vV,U1t=24,L1t=vV,oE,s1t=S6,y1t=V6,l1t=E6,h1t=0,T1t=3,c1t=1,w1t=2,g1t=64,d1t=384,B1t=448,v1t=192,F1t=256,m1t=0,k1t=320,b1t=128,UE,R1t=1,j1t=2,p1t=4,C1t=0,H1t=3,M1t=1,V1t=ly,E1t=2,S1t=1,q1t=2,I1t=ir,x1t=3,N1t=25,O1t={l:4186111,m:4193407,h:127},G1t=5,J1t=39,z1t=Hf,Y1t=a0,K1t=o9,X1t=ZQ,Z1t=PP,W1t=4,_1t=7,$1t=XQ,a1t=KQ,t0t=ge,e0t=C0,A0t={l:4194302,m:4193343,h:7},n0t=5,P0t=17,r0t=oi,i0t=r9,f0t=7,D0t=32,u0t=N1,Q0t=46,o0t=g2,U0t=128,L0t=I0,s0t=Sn,y0t=zp,l0t=256,h0t=T8,T0t=y8,c0t=Yp,w0t=512,g0t=h8,d0t=u0,B0t=16,v0t=Kp,F0t=re,m0t=c8,k0t=32,b0t=aQ,R0t=IA,j0t=64,p0t=4,C0t=8,H0t=Tn,M0t=no,V0t=134217728,E0t=3,S0t=14,q0t=Qi,I0t=s8,x0t=i9,N0t=f9,O0t=D9,G0t=u9,J0t=Q9,z0t=Rf,Y0t=120,K0t=4,X0t=3,Z0t=2,W0t=w8,_0t=lo,$0t=w8,a0t=wn,tet=30,eet=p6,Aet=fr,net=3,Pet=22,ret=F6,iet=2,fet=44,Det=48,uet=32,Qet=0,oet=16,Uet=4,Let=48,LE,set=1,yet=0,het=3,Tet=2,cet=1,wet=0,get=3,det=2,Bet=ui,vet=Ao,Fet=2,met=21,ket=IA,bet=31,Ret=5,jet=0,pet=l8,Cet=8,Het=7680,Met=4,Vet=9,Eet=9,qet=cy,Iet=4,xet=13,Net=8,Oet=8388480,Get=2,Jet=Mf,zet=c8,Yet=16,Ket=6291840,Xet=23,Zet=iP,Wet=128,_et=32,$et=64,aet=96,tAt=2,eAt=5,AAt=256,nAt=qP,PAt=3,rAt=17,iAt=384,fAt=2,DAt=7,uAt=6291967,QAt=1,oAt=4,UAt=386,LAt=512,sAt=8,yAt=2,lAt=129,hAt=511,TAt=127,cAt=384,wAt=16,gAt=32,dAt=64,BAt=1,vAt=4,FAt=257,mAt=458752,kAt=Ui,bAt=c1,RAt=T8,jAt=I0,pAt=u0,CAt=yy,HAt=0,MAt=327680,sE,VAt=24,EAt=321,SAt=6,qAt=5,IAt=32,xAt=0,NAt=1,OAt=2,GAt=255,JAt=16,zAt=128,YAt=1,KAt=8,XAt=4,ZAt=2,WAt=32,_At=64,$At=248,aAt=31,tnt=1,ent=0,Ant=15,nnt=7,Pnt=3,rnt=63,int=95,fnt=190,Dnt=16,unt=0,Qnt=1,ont=16,Unt=256,Lnt=128,snt=8,ynt=32,lnt=4,hnt=511,Tnt=64,cnt=1,wnt=2,yE,lE,Z4=H(42);p(425,279,{},E7),_n(U,{acceptorCount:{get:function(){return tG(this)}}}),_n(U,{donorCount:{get:function(){return qG(this)}}}),_n(U,{logP:{get:function(){return uz(this)}}}),_n(U,{logPString:{get:function(){return fQ(Pa((new UT,this.a)))}}}),_n(U,{logS:{get:function(){return SK((u6(),this.a))}}}),_n(U,{logSString:{get:function(){return fQ($_((u6(),this.a)))}}}),_n(U,{polarSurfaceArea:{get:function(){return HO((t6(),this.a))}}}),_n(U,{polarSurfaceAreaString:{get:function(){return fQ(iZ((t6(),this.a)))}}}),_n(U,{rotatableBondCount:{get:function(){return dR(this.a)}}}),_n(U,{stereoCenterCount:{get:function(){return TF(this.a)}}});var iit=H(425);p(67,1,{},aP,Ed),U.addCatalyst=function(e){$l(this.a,e.a)},U.addCatalystAt=function(e,A){mq(this.a,e.a,A)},U.addProduct=function(e){x7(this.a,e.a)},U.addProductAt=function(e,A){yI(this.a,e.a,A)},U.addReactant=function(e){N7(this.a,e.a)},U.addReactantAt=function(e,A){lI(this.a,e.a,A)},U.clear=function(){nv(this.a)},U.clone=function(){return new aP(new Vs(this.a))},U.getAverageBondLength=function(){return ob(this.a)},U.getCatalyst=function(e){return new HA(Yq(this.a,e))},U.getCatalysts=function(){return this.a.a.a.length},U.getHighestMapNo=function(){return ms(this.a)},U.getMergedCopy=function(){return new aP(uX(this.a))},U.getMolecule=function(e){return new HA(fv(this.a,e))},U.getMolecules=function(){return Ux(this.a)},U.getName=function(){return wI(this.a)},U.getProduct=function(e){return new HA(c3(this.a,e))},U.getProducts=function(){return this.a.f.a.length},U.getReactant=function(e){return new HA(d9(this.a,e))},U.getReactants=function(){return this.a.g.a.length},U.getReactionCenterMapNos=function(){return ka(this.a)},U.isEmpty=function(){return yX(this.a)},U.isFragment=function(){return Gq(this.a)},U.isPerfectlyMapped=function(){return X$(this.a)},U.isReactionLayoutRequired=function(){return C_(this.a)},U.removeCatalysts=function(){Bi(this.a.a.a,0)},U.setFragment=function(e){bz(this.a,e)},U.setName=function(e){GS(this.a,e)},U.toRxn=function(e){var A;return A=new GR(this.a,e),A.a?A.a.a:null},U.toRxnV3=function(e){var A;return A=new oj(this.a,e),A.a?A.a.a:null},U.toSmiles=function(){return lZ(this.a)},U.validateMapping=function(){S$(this.a)};var fit=H(67);p(426,1,{},X2);var gnt=\"+\",dnt=15,Bnt=8,vnt=2,Fnt=3,mnt=4,knt=1,bnt=0,Rnt=\" \",jnt=\"#\",pnt=\"!\",Cnt=16,Dit=H(426);p(427,1,{},O7),U.getProducts=function(){var e,A,n,P;if(P=zJ(this.a),P.length==0)return k1(Z4,[nA,U4],[172,42],0,[0,0],2);for(n=k1(Z4,[nA,U4],[172,42],0,[P.length,P[0].length],2),e=0;e<P.length;e++)for(A=0;A<P[0].length;A++)n[e][A]=new HA(P[e][A]);return n},U.setReactant=function(e,A){return l_(this.a,e,A.a)};var uit=H(427);p(428,1,{},K2);var Co=!1,Qit=H(428);p(261,1,{},Mw),U.determineAromaticity=function(e,A,n,P){Xs(this.a,e,A,n,P)},U.getAtomIndex=function(e,A){return QF(this.a,e,A)},U.getAtomRingSize=function(e){return iA(this.a,e)},U.getBondIndex=function(e,A){return uG(this.a,e,A)},U.getBondRingSize=function(e){return yP(this.a,e)},U.getHeteroPosition=function(e){return Bq(this.a,e)},U.getRingAtoms=function(e){return h3(this.a,e)},U.getRingBonds=function(e){return q7(this.a,e)},U.getRingSize=function(e){return I3(this.a,e)},U.getSharedRing=function(e,A){return zL(this.a,e,A)},U.getSize=function(){return this.a.j.a.length},U.isAromatic=function(e){return D3(this.a,e)},U.isAtomMember=function(e,A){return yA(this.a,e,A)},U.isBondMember=function(e,A){return tf(this.a,e,A)},U.isDelocalized=function(e){return vq(this.a,e)},U.qualifiesAsAmideTypeBond=function(e){return ps(this.a,e)},U.validateMemberIndex=function(e,A){return Kh(this.a,e,A)};var Hnt=7,Mnt=3,Vnt=7,Ent=5,Snt=1,oit=H(261);p(429,1,{},Ud),U.getField=function(e){var A,n;for(n=Lx(this.a),A=0;A<n.length;A++)if(at(n[A],e))return uB(this.a,A);return null},U.getFieldData=function(e){return uB(this.a,e)},U.getFieldNames=function(e){return rx(this.a,e)},U.getMolecule=function(){return new HA(aY(this.a))},U.getNextFieldData=function(){var e;return e=this.a.b.a,e},U.getNextMolFile=function(){var e;return e=this.a.g.a,e},U.next=function(){return Y$(this.a)};var Uit=H(429);p(431,1,{},rB),U.findFragmentInMolecule=function(e){var A;return A=gX(e),ln(this.b,A,this.a)},U.getMatchList=function(){return vJ(this.b.F)},U.isFragmentInMolecule=function(){return ng(this.b)},U.setFragment=function(e){yn(this.b,e.a)},U.setMol=function(e,A){un(this.b,A.a),yn(this.b,e.a)},U.setMolecule=function(e){un(this.b,e.a)},U.a=0;var Lit=H(431);p(432,1,{},aw),U.createIndex=function(e){return hs(this.a,e.a)},U.isFragmentInMolecule=function(){return GK(this.a)},U.setFragment=function(e,A){kN(this.a,e.a,A)},U.setMolecule=function(e,A){bN(this.a,e.a,A)};var sit=H(432);p(433,1,{},t3),U.getSmartsWarning=function(){return BN(this.a)},U.yc=function(e,A,n,P,r,i){var f;switch(f=0,e){case\"smarts\":f=2;break;case\"guess\":f=1}n&&(f|=8),A&&(f|=4),P&&(f|=16),r&&(f|=32),i&&(f|=64),this.a=new LQ(f)},U.zc=function(e,A,n,P){var r;return ux(this.a,e.a,Ln((r=A,Ou(),r)),n,P),e},U.parseMolecule=function(e,A){A=A||{};var n=A.molecule||new Qd,P=!A.noCoordinates,r=!A.noStereo;return this.zc(n,e,P,r)},U.parseReaction=function(e){return new aP(qN(this.a,e))},U.setRandomSeed=function(e){NS(this.a,e)};var yit=H(433);p(434,1,{},ig),U.assessRisk=function(e,A){var n;return EZ(e.a,(n=A,!wl&&(wl=new ql),n))},U.getDetail=function(e,A){return fQ(j$(e.a,A))};var qnt=3,Int=2,hE,xnt=1,Nnt=0,Ont=2,Gnt=0,Jnt=3,znt=1,lit=H(434);p(435,1,{},Zg),U.applyTransformation=function(e,A){WG(this.a,e.a,A)},U.setMolecule=function(e,A){return lX(this.a,e.a)};var hit=H(435);p(436,1,{},$c);var Tit=H(436);p(260,153,{153:1},rg),_n(U,{absoluteWeight:{get:function(){return pO(this)}}}),_n(U,{formula:{get:function(){return bJ(this)}}}),_n(U,{relativeWeight:{get:function(){return CO(this)}}});var cit=H(260);p(437,1,{},mb),U.addPastedOrDropped=function(e,A,n){WR(this.a,e.a)},U.clearAll=function(){Tb(this.a)},U.fireKeyEvent=function(e,A,n,P,r,i){var f;f=new UB(e,A,i,this.a),Oh(this.d,f)},U.fireMouseEvent=function(e,A,n,P,r,i,f,D,Q){var o;o=new TT(e,A,n,P,r,i,f,D,Q,this.a),Oh(this.e,o)},U.getGenericEditorArea=function(){return this.a},U.Ac=function(){return this.c},U.getMode=function(){return this.a.U},U.getMolecule=function(){return new HA(this.a.V)},U.getReaction=function(){return new aP(dT(this.a))},U.moleculeChanged=function(){fO(this.a)},U.repaint=function(){e1(this)},U.setMolecule=function(e){MJ(this.a,e.a)},U.setReaction=function(e){xR(this.a,e.a)},U.toolChanged=function(e){au(this.a,e)},U.b=!1;var Ynt=4,Knt=8,Xnt=1,Znt=2,TE,cE,wE,gE,Wnt=-2,_nt=-5,$nt=-1,ant=-4,tPt=-8,ePt=-7,APt=1,nPt=2,PPt=-6,rPt=-3,iPt=8,fPt=2,DPt=1,uPt=4,QPt=3,oPt=7,UPt=4,LPt=5,sPt=6,yPt=1,lPt=2,hPt=-1,TPt=-2,cPt=0,wPt=1,gPt=4,dPt=2,BPt=3,vPt=10,FPt=5,mPt=6,kPt=13,bPt=11,RPt=7,jPt=8,pPt=12,CPt=9,wit=H(437);p(288,1,Sf,Vw),U.mc=function(e){Ox(this.a,e.j,e.a)};var git=H(288);p(291,1,{262:1},Ew),U.oc=function(){Px(this.a)};var dit=H(291);p(439,1,{},Nm),U.fireMouseEvent=function(e,A,n,P,r,i,f,D,Q){var o;o=new TT(e,A,n,P,r,i,f,D,Q,this.b),Oh(this.d,o)},U.getHeight=function(){return this.b.e},U.Bc=function(){return this.c},U.getWidth=function(){return this.b.o},U.setDimensions=function(e,A){FB(this,e,A)},U.a=!1;var Bit=H(439);p(306,1,{262:1},Sw),U.oc=function(){DF(this.a)};var vit=H(306);p(438,1,{},cB),U.build16x16CursorImage=function(e){var A;return A=yv(this,16,16),ZK(A,e),A.a},U.createDialog=function(e,A){return MD(this,e,A)},U.createImage=function(e,A){return yv(this,e,A)},U.createNativeDialog=function(e){return iB(this,e)},U.createPopupMenu=function(e){return null},U.Cc=function(){return this.a},U.grabFocus=function(){Md(this)},U.openChemistryFile=function(e){return null},U.runLater=function(e){sL(this,e)},U.Dc=function(e){e.oc()},U.setCursor=function(e){Wd(this,e)},U.setEditorArea=function(e){},U.showHelpDialog=function(e,A){yh(this,e,A)},U.showMessage=function(e){};var Fit=H(438);p(171,1,{}),U.Ec=function(e,A){wO(this,new VU(this,e,A))},U.Fc=function(){return this.b};var mit=H(171);p(460,171,{},l7);var kit=H(460);p(290,1,{},qw),U.Gc=function(){return this.a};var bit=H(290);p(461,171,{},T7);var Rit=H(461);p(292,1,{},Iw),U.Hc=function(){this.a&&this.a.mc(new VU(this,1,0))},U.Ic=function(){this.a&&this.a.mc(new VU(this,0,0))},U.Jc=function(){return this.b};var jit=H(292);p(157,1,{},_2),U.Kc=function(){return this.a};var pit=H(157);p(219,1,{},_o),U.pc=function(){var e=this.Lc();return e},U.Lc=function(){return this.a};var Cit=H(219);p(289,221,{},n7);var Hit=H(289);p(459,171,{},h7);var Mit=H(459);p(218,221,{},A3);var Vit=H(218);p(139,1,{},nD),U.getSize=function(){return this.a.a},U.getX=function(e){return L7(this.a,e)},U.getY=function(e){return s7(this.a,e)};var Eit=H(139);p(462,171,{},c7);var Sit=H(462);p(212,1,{},ql);var wl=null,qit=H(212),W4=null;p(257,1,kf,Il),U.Rb=function(e,A){return cs(e,A)},U.mb=function(e){return this===e};var Iit=H(257),NA,hi;p(130,1,kf,eD),U.Rb=function(e,A){return Ts(e,A)},U.mb=function(e){return this===e};var xit=H(130);p(92,1,{},bi,j3);var Nit=H(92);p(382,92,kf,_g);var Oit=H(382);p(344,128,aA);var Git=H(344);p(163,344,{163:1,4:1,19:1,32:1,27:1},YB),U.ic=function(){return sK(this),this.c},U.Mc=function(){return O1(this.b)===O1(_4)?null:this.b};var _4,Jit=H(163);p(415,1,{});var zit=H(415),Ho=0,dE=0,Mo=-1;p(396,415,{},ac);var $4,Yit=H(396),In,a4,BE,tc,ec;p(57,1,{},BP,bL),U.a=0;var Kit=H(57);p(239,1,{},a3),U.b=0;var vE=null,FE,Xit=H(239);p(160,1,{160:1}),U.mb=function(e){return nm(this,e)},U.ob=function(){var e;return e=this.Nc()+this.Oc(),vt(e)*37};var Zit=H(160);p(168,160,{168:1,160:1},S7),U.mb=function(e){var A;return Xt(e,168)?(A=e,this.a==A.a&&this.b==A.b):nm(this,e)},U.Nc=function(){return this.a},U.Oc=function(){return this.b},U.a=0,U.b=0;var Wit=H(168);p(159,160,{160:1,159:1,4:1},tw,ug),U.Nc=function(){return this.a},U.Oc=function(){return this.b},U.a=0,U.b=0;var HPt=H(159);p(457,1,{});var _it=H(457);p(248,457,{248:1}),U.mb=function(e){var A;return e===this?!0:Xt(e,169)?(A=e,this.c==A.c&&this.d==A.d&&this.b==A.b&&this.a==A.a):!1},U.ob=function(){var e;return e=ss(this.c),e=I1(e,Un(ss(this.d),37)),e=I1(e,Un(ss(this.b),43)),e=I1(e,Un(ss(this.a),47)),Jt(e)^Jt(q0(e,32))};var $it=H(248);p(169,248,{248:1,169:1},Ph),U.a=0,U.b=0,U.c=0,U.d=0;var ait=H(169);p(453,1,{}),U.Pc=function(){var e;return e=c(lr,te,6,1,15,1),this.Qc(e)==-1?-1:e[0]},U.Qc=function(e){return this.Rc(e,0,e.length)};var tft=H(453);p(53,453,{},Pn),U.Pc=function(){return RL(this)},U.Rc=function(e,A,n){return this.b.Rc(e,A,n)},U.a=0;var eft=H(53);p(418,1,{});var Aft=H(418);p(417,418,{});var nft=H(417);p(452,1,{});var Pft=H(452);p(103,453,{},di),U.Pc=function(){return _x(this.a)},U.Qc=function(e){return YF(this,e,0,e.length)},U.Rc=function(e,A,n){return YF(this,e,A,n)};var rft=H(103);p(265,417,{},ew);var ift=H(265);p(86,453,{},Rr),U.Pc=function(){return this.a==this.b.length?-1:Gi(this.b,this.a++)},U.Rc=function(e,A,n){var P;return this.a>=this.b.length?-1:(P=w.Math.min(this.b.length-this.a,n),TO(this.b,this.a,this.a+P,e,A),this.a+=P,P)},U.a=0;var fft=H(86);p(454,1,{});var Dft=H(454);p(238,454,{},i3),U.pb=function(){return this.a.a};var uft=H(238);p(129,1,{206:1}),U.pb=function(){return this.a};var Qft=H(129);p(82,32,aA,p8);var oft=H(82);p(255,79,aA,o7,p7);var Uft=H(255);p(141,1,{4:1,141:1,33:1},Jl),U.Sb=function(e){return this.a-e.a},U.mb=function(e){return Xt(e,141)&&e.a==this.a},U.ob=function(){return this.a},U.pb=function(){return String.fromCharCode(this.a)},U.a=0;var MPt=H(141),Ac;p(61,32,aA,P3,YP);var Lft=H(61);p(164,32,aA,i7,rU);var sft=H(164);p(142,119,{4:1,33:1,142:1,119:1},zl),U.Sb=function(e){return E3(this.a,e.a)},U.Yc=function(){return this.a},U.mb=function(e){return Xt(e,142)&&e.a==this.a},U.ob=function(){return this.a},U.Zc=function(){return this.a},U.pb=function(){return\"\"+this.a},U.a=0;var VPt=H(142),nc;p(143,119,{4:1,33:1,143:1,119:1},Yl),U.Sb=function(e){return xx(this.a,e.a)},U.Yc=function(){return J9(this.a)},U.mb=function(e){return Xt(e,143)&&t0(e.a,this.a)},U.ob=function(){return ZI(this.a)},U.Zc=function(){return Jt(this.a)},U.pb=function(){return\"\"+he(this.a)},U.a=0;var EPt=H(143),Pc;p(520,1,{}),p(400,32,aA,v7);var yft=H(400);p(40,61,{4:1,19:1,40:1,32:1,27:1},XP);var lft=H(40);p(114,1,{4:1,114:1},Qh),U.mb=function(e){var A;return Xt(e,114)?(A=e,this.c==A.c&&this.d==A.d&&this.a==A.a&&this.b==A.b):!1},U.ob=function(){return yJ(B(d(DP,1),A0,1,5,[m1(this.c),this.a,this.d,this.b]))},U.pb=function(){return this.a+\".\"+this.d+\"(\"+(this.b!=null?this.b:\"Unknown Source\")+(this.c>=0?\":\"+this.c:\"\")+\")\"},U.c=0;var mE=H(114);p(76,129,{206:1},yD,ru);var hft=H(76);p(25,129,{206:1},V0,br,Fn);var Tft=H(25);p(522,1,{});var Ti;p(39,32,aA,BA,LD);var cft=H(39);p(31,119,{4:1,33:1,119:1,31:1},He,_3,ad,ef,_7,jD),U.Sb=function(e){return OR(this,e)},U.Yc=function(){return Le(be(this))},U.mb=function(e){var A;return this===e?!0:Xt(e,31)?(A=e,this.e==A.e&&OR(this,A)==0):!1},U.ob=function(){var e;return this.b!=0?this.b:this.a<54?(e=M1(this.f),this.b=Jt(V(e,-1)),this.b=33*this.b+Jt(V(q0(e,32),-1)),this.b=17*this.b+vt(this.e),this.b):(this.b=17*um(this.c)+vt(this.e),this.b)},U.Zc=function(){return this.e<=-32||this.e>(this.d>0?this.d:w.Math.floor((this.a-1)*To)+1)?0:zd(this.e==0||this.a==0&&this.f!=-1?(!this.c&&(this.c=kP(M1(this.f))),this.c):this.e<0?bP((!this.c&&(this.c=kP(M1(this.f))),this.c),ni(-this.e)):I5((!this.c&&(this.c=kP(M1(this.f))),this.c),ni(this.e)))},U.pb=function(){return be(this)},U.a=0,U.b=0,U.d=0,U.e=0,U.f=0;var kE,Vo,rc,ic,ci,gl,Eo,fc,bE=H(31);p(23,119,{4:1,33:1,119:1,23:1},kA,zB,oe,am,Hg),U.Sb=function(e){return rs(this,e)},U.Yc=function(){return Le(a5(this,0))},U.mb=function(e){return yT(this,e)},U.ob=function(){return um(this)},U.Zc=function(){return zd(this)},U.pb=function(){return a5(this,0)},U.b=-2,U.c=0,U.d=0,U.e=0;var Dc,q2,RE,So,qo,yr,wi=H(23),jE,pE;p(99,1,{4:1,99:1},xd,JD),U.mb=function(e){return Xt(e,99)&&e.a==this.a&&e.b==this.b},U.ob=function(){return this.a<<3|this.b.b},U.pb=function(){return\"precision=\"+this.a+\" roundingMode=\"+this.b},U.a=0;var wft=H(99),y9,Xf,uc;p(71,55,{4:1,33:1,55:1,71:1},jr);var CE,HE,ME,VE,se,dl,EE,SE,SPt=Er(71,IO);p(113,1,$y),U.Sb=function(e){return LN(this.a,e.a)},U.mb=function(e){var A;return e===this?!0:Xt(e,113)?(A=e,at(this.a,A.a)):!1},U.ob=function(){return DT(this.a)},U.pb=function(){return this.a};var gft=H(113);p(456,1,{});var dft=H(456);p(123,456,{},Au,s3),U.a=0;var Bft=H(123);p(106,1,l4),U.getOrDefault=function(e,A){var n;return n=this.get(e),n==null&&!this.containsKey(e)?A:n},U.putIfAbsent=function(e,A){var n;return n=this.get(e),n??this.put(e,A)},U.replace=function(e,A){return this.containsKey(e)?this.put(e,A):null},U.clear=function(){this._c().clear()},U.$c=function(e){return Fk(this,e)},U.containsKey=function(e){return!!pT(this,e,!1)},U.containsValue=function(e){var A,n,P;for(n=this._c().Tb();n.bd();)if(A=n.cd(),P=A.fd(),O1(e)===O1(P)||e!=null&&VP(e,P))return!0;return!1},U.mb=function(e){var A,n,P;if(e===this)return!0;if(!Xt(e,109)||(P=e,this.size()!=P.size()))return!1;for(n=P._c().Tb();n.bd();)if(A=n.cd(),!this.$c(A))return!1;return!0},U.get=function(e){return WP(pT(this,e,!1))},U.ob=function(){return gF(this._c())},U.isEmpty=function(){return this.size()==0},U.keySet=function(){return new Kl(this)},U.put=function(e,A){throw At(new LD(\"Put not supported on this map\"))},U.putAll=function(e){var A,n;for(L1(e),n=e._c().Tb();n.bd();)A=n.cd(),this.put(A.ed(),A.fd())},U.remove=function(e){return WP(pT(this,e,!0))},U.size=function(){return this._c().size()},U.pb=function(){var e,A,n;for(n=new wL(\", \",\"{\",\"}\"),A=this._c().Tb();A.bd();)e=A.cd(),wv(n,HB(this,e.ed())+\"=\"+HB(this,e.fd()));return n.a?n.e.length==0?n.a.a:n.a.a+(\"\"+n.e):n.c},U.values=function(){return new rD(this)};var vft=H(106);p(334,106,l4),U.clear=function(){ju(this)},U.containsKey=function(e){return pu(this,e)},U.containsValue=function(e){return pd(this,e)},U._c=function(){return new PD(this)},U.get=function(e){return S9(this,e)},U.put=function(e,A){return q9(this,e,A)},U.remove=function(e){return BL(this,e)},U.size=function(){return wD(this)},U.b=0;var Fft=H(334);p(451,43,p2),U.Ub=function(){return new C8(this)},U.mb=function(e){var A;return e===this?!0:!Xt(e,85)||(A=e,A.size()!=this.size())?!1:AQ(this,A)},U.ob=function(){return gF(this)},U.removeAll=function(e){var A,n,P,r;if(L1(e),r=this.size(),r<e.size())for(A=this.Tb();A.bd();)n=A.cd(),e.contains(n)&&A.dd();else for(P=e.Tb();P.bd();)n=P.cd(),this.remove(n);return r!=this.size()};var mft=H(451);p(145,451,p2,PD),U.clear=function(){ju(this.a)},U.contains=function(e){return jB(this,e)},U.Tb=function(){return new wF(this.a)},U.remove=function(e){var A;return jB(this,e)?(A=e.ed(),BL(this.a,A),!0):!1},U.size=function(){return wD(this.a)};var kft=H(145);p(335,1,{},wF),U.ad=function(e){Yn(this,e)},U.cd=function(){var e;return Rd(this.f.b,this.d),vD(this.b),this.c=this.a,e=this.a.cd(),this.b=PT(this),e},U.bd=function(){return this.b},U.dd=function(){vu(!!this.c),Rd(this.f.b,this.d),this.c.dd(),this.c=null,this.b=PT(this),this.d=this.f.b},U.b=!1,U.d=0;var bft=H(335);p(226,1,{},Xl),U.ad=function(e){Yn(this,e)},U.bd=function(){return Cr(this)},U.cd=function(){return tv(this)},U.dd=function(){oL(this)},U.a=0,U.b=-1;var Rft=H(226);p(227,226,{},hh),U.dd=function(){oL(this)};var jft=H(227);p(133,94,Hp,qD),U.addAtIndex=function(e,A){DL(e,this.b),this.c.addAtIndex(this.a+e,A),++this.b},U.getAtIndex=function(e){return ve(e,this.b),this.c.getAtIndex(this.a+e)},U.removeAtIndex=function(e){var A;return ve(e,this.b),A=this.c.removeAtIndex(this.a+e),--this.b,A},U.setAtIndex=function(e,A){return ve(e,this.b),this.c.setAtIndex(this.a+e,A)},U.size=function(){return this.b},U.a=0,U.b=0;var pft=H(133);p(228,451,p2,Kl),U.clear=function(){this.a.clear()},U.contains=function(e){return this.a.containsKey(e)},U.Tb=function(){var e;return e=this.a._c().Tb(),new Zl(e)},U.remove=function(e){return this.a.containsKey(e)?(this.a.remove(e),!0):!1},U.size=function(){return this.a.size()};var Cft=H(228);p(229,1,{},Zl),U.ad=function(e){Yn(this,e)},U.bd=function(){return this.a.bd()},U.cd=function(){var e;return e=this.a.cd(),e.ed()},U.dd=function(){this.a.dd()};var Hft=H(229);p(135,43,hy,rD),U.clear=function(){this.a.clear()},U.contains=function(e){return this.a.containsValue(e)},U.Tb=function(){var e;return e=this.a._c().Tb(),new iD(e)},U.size=function(){return this.a.size()};var Mft=H(135);p(136,1,{},iD),U.ad=function(e){Yn(this,e)},U.bd=function(){return this.a.bd()},U.cd=function(){var e;return e=this.a.cd(),e.fd()},U.dd=function(){this.a.dd()};var Vft=H(136),Eft=ix();p(161,1,{161:1,84:1}),U.mb=function(e){var A;return Xt(e,84)?(A=e,Y8(this.c,A.ed())&&Y8(this.d,A.fd())):!1},U.ed=function(){return this.c},U.fd=function(){return this.d},U.ob=function(){return FU(this.c)^FU(this.d)},U.gd=function(e){return hd(this,e)},U.pb=function(){return this.c+\"=\"+this.d};var Sft=H(161);p(146,161,{161:1,146:1,84:1},TU);var qft=H(146);p(455,1,{84:1}),U.mb=function(e){var A;return Xt(e,84)?(A=e,Y8(this.b.value[0],A.ed())&&Y8(pL(this),A.fd())):!1},U.ob=function(){return FU(this.b.value[0])^FU(pL(this))},U.pb=function(){return this.b.value[0]+\"=\"+pL(this)};var Ift=H(455);p(233,106,{106:1,233:1,109:1,466:1,464:1}),U.$c=function(e){return lv(this,e)},U.containsKey=function(e){return qU(this,e)},U._c=function(){return new Wl(this)},U.get=function(e){return le(this,e)},U.keySet=function(){return new wr(this)};var xft=H(233);p(234,451,p2,Wl),U.contains=function(e){return Xt(e,84)&&lv(this.b,e)},U.Tb=function(){return new x8(this.b)},U.remove=function(e){var A;return Xt(e,84)?(A=e,kv(this.b,A)):!1},U.size=function(){return this.b.c};var Nft=H(234);p(90,451,p2,wr),U.Ub=function(){return new y3(this)},U.clear=function(){mi(this.a)},U.contains=function(e){return qU(this.a,e)},U.Tb=function(){var e;return e=new x8(new I8(this.a).b),new gr(e)},U.remove=function(e){return qU(this.a,e)?(wh(this.a,e),!0):!1},U.size=function(){return this.a.c};var Oft=H(90);p(91,1,{},gr),U.ad=function(e){Yn(this,e)},U.bd=function(){return Cr(this.a.a)},U.cd=function(){var e;return e=B9(this.a),e.ed()},U.dd=function(){kd(this.a)};var Gft=H(91);p(458,43,hy),U.add=function(e){return QO(ls(this,e)),!0},U.addAll=function(e){return L1(e),IU(e!=this,\"Can't add a queue to itself\"),sF(this,e)},U.clear=function(){for(;Jh(this)!=null;);};var Jft=H(458);p(401,43,{5:1,36:1,43:1,38:1},zg),U.add=function(e){return uL(this,e),!0},U.clear=function(){this.b!=this.c&&(this.a=c(DP,A0,1,8,5,1),this.b=0,this.c=0)},U.contains=function(e){return CF(new $U(this),e)},U.isEmpty=function(){return m7(this)},U.Tb=function(){return new $U(this)},U.remove=function(e){return TN(new $U(this),e)},U.size=function(){return this.c-this.b&this.a.length-1},U.Ub=function(){return new C8(this)},U.Wb=function(e){var A;return A=this.c-this.b&this.a.length-1,e.length<A&&(e=iu(new Array(A),e)),nF(this,e,A),e.length>A&&(e[A]=null),e},U.b=0,U.c=0;var zft=H(401);p(198,1,{},$U),U.ad=function(e){Yn(this,e)},U.bd=function(){return this.a!=this.b},U.cd=function(){return Dm(this)},U.dd=function(){AF(this)},U.a=0,U.b=0,U.c=-1;var Yft=H(198);p(21,1,{},Zt),U.ad=function(e){Yn(this,e)},U.bd=function(){return this.a<this.c.a.length},U.cd=function(){return $t(this)},U.dd=function(){vu(this.b!=-1),LA(this.c,this.a=this.b),this.b=-1},U.a=0,U.b=-1;var Kft=H(21);p(269,w.Function,{},gi),U.hd=function(e,A){return $8(e,A)},p(472,w.Function,{},xl),U.jd=function(e,A){return G(e,A)<0?-1:G(e,A)>0?1:0},p(179,94,{4:1,36:1,43:1,94:1,38:1,83:1,125:1},iU),U.contains=function(e){return bF(this,e)!=-1},U.getAtIndex=function(e){return ve(e,this.a.length),this.a[e]},U.setAtIndex=function(e,A){var n;return n=(ve(e,this.a.length),this.a[e]),this.a[e]=A,n},U.size=function(){return this.a.length},U.toArray=function(){return Wm(this,c(DP,A0,1,this.a.length,5,1))},U.Wb=function(e){return Wm(this,e)};var Xft=H(179);p(47,w.Function,{},D0),U.hd=function(e,A){return e-A},p(181,1,{181:1},$g),U.mb=function(e){var A,n,P;if(this===e)return!0;if(!Xt(e,181)||(P=e,n=yL(this.a),n!=yL(P.a)))return!1;for(A=0;A<=n;A++)if((this.a[A]|0)!=(P.a[A]|0))return!1;return!0},U.ob=function(){var e,A,n,P;for(n=yL(this.a),e=-2128831035^n,A=0;A<=n;A++)P=this.a[A]|0,e=e*ay&-1^P&255,e=e*ay&-1^P>>>8&255,e=e*ay&-1^P>>>16&255,e=e*ay&-1^P>>>24;return e},U.pb=function(){var e,A;if(eG(this)==0)return\"{}\";for(A=new Fn(\"{\"),e=vk(this,0),A.a+=e;(e=vk(this,e+1))!=-1;)A.a+=\", \",A.a+=e;return A.a+=\"}\",A.a};var Zft=H(181);p(186,1,{36:1,38:1},$o),U.Ub=function(){return new C8(this)},U.Vb=function(){return new Q3(this.Ub())},U.add=function(e){throw At(new BA)},U.addAll=function(e){throw At(new BA)},U.clear=function(){throw At(new BA)},U.contains=function(e){return this.b.contains(e)},U.containsAll=function(e){return this.b.containsAll(e)},U.isEmpty=function(){return this.b.isEmpty()},U.Tb=function(){return new Ow(this.b.Tb())},U.remove=function(e){throw At(new BA)},U.removeAll=function(e){throw At(new BA)},U.retainAll=function(e){throw At(new BA)},U.size=function(){return this.b.size()},U.toArray=function(){return this.b.toArray()},U.pb=function(){return XD(this.b)};var Wft=H(186);p(342,1,{},Ow),U.ad=function(e){Yn(this,e)},U.bd=function(){return this.a.bd()},U.cd=function(){return this.a.cd()},U.dd=function(){aq()};var _ft=H(342);p(187,186,{36:1,38:1,83:1},MU),U.Ub=function(){return new C8(this)},U.addAtIndex=function(e,A){throw At(new BA)},U.addAllAtIndex=function(e,A){throw At(new BA)},U.mb=function(e){return VP(this.a,e)},U.getAtIndex=function(e){return this.a.getAtIndex(e)},U.ob=function(){return a8(this.a)},U.indexOf=function(e){return this.a.indexOf(e)},U.isEmpty=function(){return this.a.isEmpty()},U.lastIndexOf=function(e){return this.a.lastIndexOf(e)},U.removeAtIndex=function(e){throw At(new BA)},U.setAtIndex=function(e,A){throw At(new BA)},U.subList=function(e,A){return new MU(this.a.subList(e,A))};var $ft=H(187);p(339,1,{109:1},Gw),U.getOrDefault=function(e,A){var n;return n=this.c.get(e),n==null&&!this.c.containsKey(e)?A:n},U.putIfAbsent=function(e,A){var n;return n=this.c.get(e),n??B3()},U.replace=function(e,A){return this.c.containsKey(e)?B3():null},U.clear=function(){throw At(new BA)},U.containsKey=function(e){return this.c.containsKey(e)},U.containsValue=function(e){return this.c.containsValue(e)},U._c=function(){return!this.a&&(this.a=new C7(this.c._c())),this.a},U.mb=function(e){return VP(this.c,e)},U.get=function(e){return this.c.get(e)},U.ob=function(){return a8(this.c)},U.isEmpty=function(){return this.c.isEmpty()},U.keySet=function(){return!this.b&&(this.b=new DU(this.c.keySet())),this.b},U.put=function(e,A){return B3()},U.putAll=function(e){throw At(new BA)},U.remove=function(e){throw At(new BA)},U.size=function(){return this.c.size()},U.pb=function(){return XD(this.c)},U.values=function(){return!this.d&&(this.d=new $o(this.c.values())),this.d};var aft=H(339);p(188,186,bV,DU),U.Ub=function(){return new C8(this)},U.mb=function(e){return VP(this.b,e)},U.ob=function(){return a8(this.b)};var tDt=H(188);p(340,188,bV,C7),U.contains=function(e){return this.b.contains(e)},U.containsAll=function(e){return this.b.containsAll(e)},U.Tb=function(){var e;return e=this.b.Tb(),new Jw(e)},U.toArray=function(){var e;return e=this.b.toArray(),QN(e,e.length),e};var eDt=H(340);p(343,1,{},Jw),U.ad=function(e){Yn(this,e)},U.cd=function(){return new _l(this.a.cd())},U.bd=function(){return this.a.bd()},U.dd=function(){throw At(new BA)};var ADt=H(343);p(230,1,{84:1},_l),U.mb=function(e){return this.a.mb(e)},U.ed=function(){return this.a.ed()},U.fd=function(){return this.a.fd()},U.ob=function(){return this.a.ob()},U.gd=function(e){throw At(new BA)},U.pb=function(){return XD(this.a)};var nDt=H(230);p(341,187,{36:1,38:1,83:1,125:1},H7);var PDt=H(341);p(263,1,kf,nw),U.Rb=function(e,A){return $8(e.b,A.b)},U.mb=function(e){return this===e};var rDt=H(263),Bl;p(371,1,kf,Pw),U.Rb=function(e,A){return L1(e),sm(e,(L1(A),A))},U.mb=function(e){return this===e};var iDt=H(371);p(258,32,aA,r3);var fDt=H(258);p(66,334,{4:1,5:1,106:1,109:1},LP);var DDt=H(66);p(121,451,{4:1,5:1,36:1,43:1,38:1,121:1,85:1},DD),U.add=function(e){return A8(this,e)},U.clear=function(){ju(this.a)},U.contains=function(e){return pu(this.a,e)},U.isEmpty=function(){return wD(this.a)==0},U.Tb=function(){var e;return e=new Kl(this.a).a._c().Tb(),new Zl(e)},U.remove=function(e){return BL(this.a,e)!=null},U.size=function(){return wD(this.a)};var uDt=H(121);p(374,1,{36:1},Td),U.Tb=function(){return new xh(this)},U.c=0;var QDt=H(374);p(245,1,{},xh),U.ad=function(e){Yn(this,e)},U.cd=function(){return this.d=this.a[this.c++],this.d},U.bd=function(){var e;return this.c<this.a.length?!0:(e=this.b.next(),e.done?!1:(this.a=e.value[1],this.c=0,!0))},U.dd=function(){r5(this.e,this.d.ed()),this.c!=0&&--this.c},U.c=0,U.d=null;var oDt=H(245);p(372,1,{36:1},cd),U.Tb=function(){return new Mh(this)},U.c=0,U.d=0;var UDt=H(372);p(244,1,{},Mh),U.ad=function(e){Yn(this,e)},U.cd=function(){return this.c=this.a,this.a=this.b.next(),new Fd(this.d,this.c,this.d.d)},U.bd=function(){return!this.a.done},U.dd=function(){VF(this.d,this.c.value[0])};var LDt=H(244);p(373,455,{84:1},Fd),U.ed=function(){return this.b.value[0]},U.fd=function(){return pL(this)},U.gd=function(e){return cm(this.a,this.b.value[0],e)},U.c=0;var sDt=H(373);p(310,1,{},rw),U.kd=function(e){return Ld(this,e)},U.ld=function(e){return e.ed()};var yDt=H(310);p(311,1,{},iw),U.kd=function(e){return sd(this,e)},U.ld=function(e){return e.fd()};var lDt=H(311);p(411,32,aA,f7);var hDt=H(411);p(147,458,hy,$7,M7),U.addAll=function(e){var A,n,P;for(L1(e),td(e!=this),P=this.b.a.length,n=e.Tb();n.bd();)A=n.cd(),mt(this.b,L1(A));return P!=this.b.a.length?(PQ(this,0),!0):!1},U.clear=function(){Bi(this.b.a,0)},U.contains=function(e){return(e==null?-1:xr(this.b,e,0))!=-1},U.Tb=function(){return new zw(this)},U.remove=function(e){var A;return A=e==null?-1:xr(this.b,e,0),A<0?!1:(_h(this,A),!0)},U.removeAll=function(e){return aL(this.b,e)?(PQ(this,0),!0):!1},U.retainAll=function(e){return fm(this.b,e)?(PQ(this,0),!0):!1},U.size=function(){return this.b.a.length},U.Ub=function(){return new C8(this)},U.toArray=function(){return $3(this.b.a)},U.Wb=function(e){return Pf(this.b,e)};var TDt=H(147);p(395,1,{},zw),U.ad=function(e){Yn(this,e)},U.bd=function(){return this.a<this.c.b.a.length},U.cd=function(){return vD(this.a<this.c.b.a.length),this.b=this.a++,N(this.c.b,this.b)},U.dd=function(){vu(this.b!=-1),_h(this.c,this.a=this.b),this.b=-1},U.a=0,U.b=-1;var cDt=H(395);p(63,1,{},ZD,Ki),U.a=0,U.b=0;var Qc,oc,qPt=0,wDt=H(63);p(59,1,{},C8);var gDt=H(59);p(189,59,{},y3);var dDt=H(189);p(152,1,{},xg,wL),U.pb=function(){return this.a?this.e.length==0?this.a.a:this.a.a+(\"\"+this.e):this.c};var BDt=H(152);p(44,233,{4:1,5:1,106:1,233:1,109:1,466:1,464:1,44:1},lP,Ni),U.clear=function(){mi(this)},U._c=function(){return new I8(this)},U.put=function(e,A){return ze(this,e,A)},U.remove=function(e){return wh(this,e)},U.size=function(){return this.c},U.c=0;var qE=H(44);p(70,1,{},x8),U.ad=function(e){Yn(this,e)},U.cd=function(){return B9(this)},U.bd=function(){return Cr(this.a)},U.dd=function(){kd(this)};var vDt=H(70);p(77,234,p2,I8),U.clear=function(){mi(this.a)};var FDt=H(77);p(122,146,{161:1,146:1,84:1,122:1},jL),U.b=!1;var IPt=H(122);p(191,1,{},Zo),U.pb=function(){return\"State: mv=\"+this.c+\" value=\"+this.d+\" done=\"+this.a+\" found=\"+this.b},U.a=!1,U.b=!1,U.c=!1;var mDt=H(191);p(80,55,el,Lu),U.md=function(){return!1},U.nd=function(){return!1};var Uc,IE,xE,NE,xPt=Er(80,zN);p(354,80,el,Eg),U.nd=function(){return!0};var kDt=Er(354,null);p(355,80,el,Ng),U.md=function(){return!0},U.nd=function(){return!0};var bDt=Er(355,null);p(356,80,el,Vg),U.md=function(){return!0};var RDt=Er(356,null);p(134,451,{4:1,5:1,36:1,43:1,38:1,85:1},f3,QU),U.Ub=function(){return new y3(this)},U.add=function(e){return Oi(this,e)},U.clear=function(){mi(this.a)},U.contains=function(e){return wU(this,e)},U.Tb=function(){var e;return e=new x8(new I8(new wr(this.a).a).b),new gr(e)},U.remove=function(e){return wh(this.a,e)!=null},U.size=function(){return this.a.c};var jDt=H(134);p(367,94,{4:1,5:1,36:1,43:1,94:1,38:1,83:1,125:1},r7),U.addAtIndex=function(e,A){Ru(e,this.a.a.length+1),e8(this.a,e,A)},U.add=function(e){return tg(this,e)},U.addAllAtIndex=function(e,A){return Ru(e,this.a.a.length+1),Qm(this.a,e,A)},U.addAll=function(e){return jP(this.a,e)},U.clear=function(){Bi(this.a.a,0)},U.contains=function(e){return xr(this.a,e,0)!=-1},U.containsAll=function(e){return AQ(this.a,e)},U.getAtIndex=function(e){return Ru(e,this.a.a.length),N(this.a,e)},U.indexOf=function(e){return xr(this.a,e,0)},U.isEmpty=function(){return this.a.a.length==0},U.Tb=function(){return new Zt(this.a)},U.lastIndexOf=function(e){return od(this.a,e)},U.removeAtIndex=function(e){return Ru(e,this.a.a.length),LA(this.a,e)},U.removeAll=function(e){return aL(this.a,e)},U.Xb=function(e,A){XB(this.a,e,A)},U.setAtIndex=function(e,A){return Ru(e,this.a.a.length),qr(this.a,e,A)},U.size=function(){return this.a.a.length},U.subList=function(e,A){return new qD(this.a,e,A)},U.toArray=function(){return $3(this.a.a)},U.Wb=function(e){return eg(this,e)},U.pb=function(){return Zk(this.a)};var pDt=H(367);p(350,106,l4),U.containsKey=function(e){return vh(this,e)},U.containsValue=function(e){if(e==null)throw At(new dr);return pd(this.e,e)},U._c=function(){return new PD(this.e)},U.get=function(e){return WB(this,e)},U.put=function(e,A){return Sv(this,e,A)},U.putIfAbsent=function(e,A){return vh(this,e)?this.get(e):this.put(e,A)},U.remove=function(e){if(e==null)throw At(new dr);return BL(this.e,e)},U.replace=function(e,A){if(A==null)throw At(new dr);return vh(this,e)?this.put(e,A):null};var CDt=H(350);p(264,1,{},fw),U.kd=function(e){return L1(e),new hP(this,e)},U.ld=function(e){return e};var HDt=H(264);p(60,1,{},hP),U.kd=function(e){return L1(e),new hP(this,e)},U.ld=function(e){return x3(this.a,this.b,e)};var MDt=H(60);p(398,1,{},Yw),U.b=null,U.c=!1;var VDt=H(398);p(397,1,{},Kw);var EDt=H(397);p(399,61,aA,Yv);var SDt=H(399);p(95,55,{4:1,33:1,55:1,95:1},cU);var OE,Io,Lc,vl=Er(95,MN);p(166,1,{},Mu);var qDt=H(166);p(314,1,{},Dw),U.od=function(e,A){e.add(A)};var IDt=H(314);p(316,1,{},uw),U.pc=function(){return new f1};var xDt=H(316);p(317,1,{},Qw),U.kd=function(e){return L1(e),new hP(this,e)},U.ld=function(e){return _U(e)};var NDt=H(317);p(318,1,{},ow),U.kd=function(e){return L1(e),new hP(this,e)},U.ld=function(e){return Xt(e,125)?new H7(e):new MU(e)};var ODt=H(318);p(319,1,{},Uw),U.pc=function(){return new LP};var GDt=H(319);p(320,1,{},Lw),U.kd=function(e){return L1(e),new hP(this,e)},U.ld=function(e){return new Gw(e)};var JDt=H(320);p(224,1,{},Nl),U.kd=function(e){return L1(e),new hP(this,e)},U.ld=function(e){return _U(e)};var zDt=H(224);p(323,1,{},sw),U.pc=function(){return new DD};var YDt=H(323);p(324,1,{},yw),U.od=function(e,A){A8(e,A)};var KDt=H(324);p(327,1,{},lw),U.kd=function(e){return L1(e),new hP(this,e)},U.ld=function(e){return _U(e)};var XDt=H(327);p(328,1,{},hw),U.kd=function(e){return L1(e),new hP(this,e)},U.ld=function(e){return new DU(e)};var ZDt=H(328);p(313,1,{},Qg),U.od=function(e,A){dI(this.a,this.b,e,A)};var WDt=H(313);p(315,1,{},Tw);var _Dt=H(315);p(321,1,{},Cd),U.od=function(e,A){GY(this.a,this.c,this.b,e,A)},U.b=!1;var $Dt=H(321);p(322,1,{},cw);var aDt=H(322);p(325,1,{},ww);var t2t=H(325);p(326,1,{},gw),U.kd=function(e){return L1(e),new hP(this,e)},U.ld=function(e){return e};var e2t=H(326);p(345,1,{}),U.b=!1;var A2t=H(345);p(190,345,{},Q3);var n2t=H(190);p(346,1,{},dw);var P2t=H(346);p(347,1,{},Xw);var r2t=H(347);p(348,1,{},og);var i2t=H(348);p(222,113,$y);var f2t=H(222);p(223,222,$y,l3);var D2t=H(223);p(312,222,$y,Mg);var u2t=H(312);p(337,452,{},Yg),U.a=0,U.b=0;var GE=null,Q2t=H(337);p(407,1,{},Ww);var o2t=H(407);p(406,1,{},Ug);var U2t=H(406);p(405,1,{},_w);var L2t=H(405);p(211,64,{64:1,33:1,211:1},Bj),U.b=0;var s2t=H(211);p(249,1,{249:1},Dd);var y2t=H(249);p(209,1,{},Sg),U.a=0,U.d=0,U.i=!1,U.j=!1,U.o=0,U.p=0,U.v=0,U.w=0,U.C=!1;var l2t=H(209);p(271,1,{},Fw),U.Rb=function(e,A){return E3(A.o.length,e.o.length)},U.mb=function(e){return this===e};var h2t=H(271);p(272,1,{},Q7);var T2t=H(272);p(177,1,{177:1},Iv);var NPt=H(177);p(351,350,{4:1,106:1,109:1},ud),U.get=function(e){return aB(this,e)},U.put=function(e,A){return ev(this,e,A)},U.clear=function(){ju(new PD(this.e).a)},U.a=0,U.b=0,U.c=0,U.d=0;var xo,c2t=H(351);p(232,1,{33:1,232:1},Lg),U.Sb=function(e){return uN(this,e)},U.b=0;var w2t=H(232);p(270,1,{},Vd),U.b=!1,U.c=0,U.d=0;var g2t=H(270);p(176,1,{176:1},ij),U.a=0,U.b=!1,U.i=0,U.j=0,U.n=0;var JE,zE,YE,OPt=H(176);p(165,1,{33:1,165:1},LB),U.Sb=function(e){return $F(this,e)},U.mb=function(e){return $F(this,e)==0},U.pb=function(){var e,A,n,P,r,i,f,D;for(D=new V0,n=this.i,r=0,f=n.length;r<f;++r)e=n[r],D.a+=e,D.a+=\",\";for(this.i.length!=0&&Qn(D,D.a.length-1),D.a+=\";\",A=this.d,P=0,i=A.length;P<i;++P)e=A[P],D.a+=e,D.a+=\",\";return this.d.length!=0&&Qn(D,D.a.length-1),D.a},U.b=0,U.e=0,U.g=!1;var KE=H(165);p(252,1,{252:1},Um),U.a=0;var d2t=H(252);p(381,1,{},Pj),U.c=0;var sc,B2t=H(381);p(235,1,{}),U.g=0,U.r=0,U.s=0,U.t=0,U.B=0,U.F=!1;var v2t=H(235);p(352,1,{},Bw);var F2t=H(352);p(116,235,{116:1},VL),U.pd=function(e){return NQ(this,this.b)},U.b=!1;var m2t=H(116);p(210,116,{116:1},ih),U.pd=function(e){var A,n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v;if(!e)return NQ(this,this.a);if(e.b==0)return NQ(this,this.b);for(P=JK(this,e),n=e.i,A=e.d,L=c(Pt,ft,6,P.length,16,1),i=0;i<64;i++){for((L[0]||this.v[0].d.length==1)&&(P[0]=0),o=1,D=1;D<this.v.length;D++)L[o]||this.v[D].d.length==1?P[o]=P[o-1]:P[o]+=P[o-1],++o;for(h=this.u,T=0,g=h.length;T<g;++T)l=h[T],L[o]||l.b.length==1?P[o]=P[o-1]:P[o]+=P[o-1],++o;if(P[P.length-1]==0)return NQ(this,this.b);for(y=jn(this.c)*P[P.length-1],f=0;f<P.length;f++)if(y<P[f]){if(m=bn(n,n.length),r=bn(A,A.length),f<this.v.length){for(s=1;s<this.v[f].d.length;s++)if(++m[f],m[f]==this.v[f].d.length&&(m[f]=0),v=Nu(this,m,r),Q=ar(this.D,v),(Q<0?-1:Q)==-1)return v}else for(f-=this.v.length,s=1;s<this.u[f].b.length;s++)if(++r[f],r[f]==this.u[f].b.length&&(r[f]=0),v=Nu(this,m,r),Q=ar(this.D,v),(Q<0?-1:Q)==-1)return v;L[f]=!0;break}}return NQ(this,this.b)},U.a=!1;var k2t=H(210);p(273,235,{},kb),U.pd=function(e){return this.a==null||(this.b+1==this.a.length&&Aa(this),this.a==null)?null:(++this.b,this.a[this.b])},U.b=0;var b2t=H(273);p(357,1,{},vw),U.Rb=function(e,A){return $8(A.e,e.e)},U.mb=function(e){return this===e};var R2t=H(357);p(253,1,{33:1,253:1},sg),U.Sb=function(e){return this.a<e.a?-1:this.a>e.a?1:0},U.a=0;var j2t=H(253);p(50,1,C2),U.g=!1;var Fl,p2t=H(50);p(243,50,C2,qh),U.qd=function(e,A){var n,P,r,i,f;if(f=IQ(e,this.f)<0?1:0,A!=null)for(P=this.f,r=0,i=P.length;r<i;++r)n=P[r],A[n]+=f/4;return f},U.rd=function(e,A){var n,P,r,i,f,D,Q;if(D=IQ(e,this.f),D==0||this.b==D>0)return!1;for(Q=J8(J0(e,this.f[2]),J0(e,this.f[1])),$9(Q),f=w.Math.abs(D)<RA?-2*D:2*(U1-D),this.a&&(f=-f),P=this.c,r=0,i=P.length;r<i;++r)n=P[r],Tf(e,n,J0(e,this.f[1]),Q,f);return!0},U.sd=function(){return 5},U.pb=function(){var e;return e=new Fn(\"binap rule (\"+(this.b?\"positive\":\"negative\")+\" torsion):\"),WD(this,e),e.a},U.a=!1,U.b=!1;var C2t=H(243);p(154,1,{},xQ),U.b=0,U.e=!1,U.n=0;var XE,H2t=H(154);p(353,1,{},mw),U.Rb=function(e,A){return ph(),$8(e.e,A.e)},U.mb=function(e){return this===e};var M2t=H(353);p(81,50,{50:1,81:1},Pg,FF,_L,$h),U.qd=function(e,A){var n;return n=CW(this,e),A!=null&&n>0&&(A[this.f[0]]+=n/2,A[this.f[1]]+=n/2),n},U.rd=function(e,A){var n,P,r,i,f,D,Q;if(r=vr(e,this.f[1])-vr(e,this.f[0]),i=Fr(e,this.f[1])-Fr(e,this.f[0]),f=mr(e,this.f[1])-mr(e,this.f[0]),n=w.Math.sqrt(r*r+i*i+f*f),P=0,this.a.length==2?n<this.a[0]?P=(n-this.a[0])/n:n>this.a[1]&&(P=(n-this.a[1])/n):n<this.a[0]?P=(n-this.a[0])/n:n>this.a[0]&&(P=(n-this.a[0])/n),w.Math.abs(P)<.001)return!1;if(D=A*P,Q=e.o,this.c==10){if(Ht(Q,this.f[0])==1&&Ht(Q,this.f[1])!=1)return q8(J0(e,this.f[0]),r*D,i*D,f*D),!0;if(Ht(Q,this.f[0])!=1&&Ht(Q,this.f[1])==1)return q8(J0(e,this.f[1]),-r*D,-i*D,-f*D),!0}return D/=2,L5(e,this.f[0],this.b,r*D,i*D,f*D),L5(e,this.f[1],this.b,-r*D,-i*D,-f*D),!0},U.sd=function(){return 0},U.pb=function(){var e,A;if(A=new Fn(\"distance rule:\"),WD(this,A),this.a.length==1?J(A,(Jr(),jV+t9(this.a[0],5))):J(A,(Jr(),\" min:\"+t9(this.a[0],5)+\" max:\"+t9(this.a[1],5))),this.b!=null)for(J(A,\" not:\"+this.b[0]),e=1;e<this.b.length;e++)J(A,\",\"+this.b[e]);return A.a},U.c=0;var ZE=H(81);p(242,50,C2,JT),U.qd=function(e,A){var n,P,r,i,f,D,Q;for(n=new dA,f=new dA,P=k1(Ut,[T0,Tt],[15,6],15,[this.f.length,3],2),M5(e,this.f,n,f,P),Q=0,i=0;i<this.f.length;i++)r=-(f.a*P[i][0]+f.b*P[i][1]+f.c*P[i][2]),D=20*r*r,A!=null&&(A[this.f[i]]+=D),Q+=D;return Q},U.rd=function(e,A){var n,P,r,i,f;for(n=new dA,f=new dA,P=k1(Ut,[T0,Tt],[15,6],15,[this.a.length,3],2),M5(e,this.a,n,f,P),i=0;i<this.f.length;i++)r=-(f.a*(vr(e,this.f[i])-n.a)+f.b*(Fr(e,this.f[i])-n.b)+f.c*(mr(e,this.f[i])-n.c)),L5(e,this.f[i],this.f,.5*r*A*f.a,.5*r*A*f.b,.5*r*A*f.c);return!0},U.sd=function(){return 1},U.pb=function(){var e;return e=new Fn(\"plane rule:\"),WD(this,e),e.a};var V2t=H(242);p(96,64,{64:1,33:1,96:1},Fu,fd),U.b=!1,U.c=0,U.e=0;var WE=H(96);p(369,50,C2,V7),U.qd=function(e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R,j,C,S,I;for(i=c(Ut,Tt,6,3,15,1),L=0;L<this.f.length;L++)i[0]+=vr(e,this.f[L]),i[1]+=Fr(e,this.f[L]),i[2]+=mr(e,this.f[L]);for(g=0;g<3;g++)i[g]/=this.f.length;for(n=k1(Ut,[T0,Tt],[15,6],15,[this.f.length,3],2),s=0;s<this.f.length;s++)n[s][0]=vr(e,this.f[s])-i[0],n[s][1]=Fr(e,this.f[s])-i[1],n[s][2]=mr(e,this.f[s])-i[2];for(j=k1(Ut,[T0,Tt],[15,6],15,[3,3],2),y=0;y<this.f.length;y++)for(T=0;T<3;T++)for(m=0;m<3;m++)j[T][m]+=n[y][T]*n[y][m];for(S=new Py(j),P=S.e,b=0,l=1;l<3;l++)P[l]>P[b]&&(b=l);for(r=S.a,R=c(Ut,Tt,6,3,15,1),h=0;h<3;h++)R[h]=r[h][b];for(I=0,o=0;o<this.f.length;o++)v=R[0]*n[o][0]+R[1]*n[o][1]+R[2]*n[o][2],f=v*R[0]-n[o][0],D=v*R[1]-n[o][1],Q=v*R[2]-n[o][2],C=10*f*f+D*D+Q*Q,A!=null&&(A[this.f[o]]+=C),I+=C;return I},U.rd=function(e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R,j,C,S;for(i=c(Ut,Tt,6,3,15,1),D=0;D<this.f.length;D++)i[0]+=vr(e,this.f[D]),i[1]+=Fr(e,this.f[D]),i[2]+=mr(e,this.f[D]);for(m=0;m<3;m++)i[m]/=this.f.length;for(n=k1(Ut,[T0,Tt],[15,6],15,[this.f.length,3],2),Q=0;Q<this.f.length;Q++)n[Q][0]=vr(e,this.f[Q])-i[0],n[Q][1]=Fr(e,this.f[Q])-i[1],n[Q][2]=mr(e,this.f[Q])-i[2];for(C=k1(Ut,[T0,Tt],[15,6],15,[3,3],2),o=0;o<this.f.length;o++)for(g=0;g<3;g++)for(v=0;v<3;v++)C[g][v]+=n[o][g]*n[o][v];for(S=new Py(C),P=S.e,R=0,L=1;L<3;L++)P[L]>P[R]&&(R=L);for(r=S.a,j=c(Ut,Tt,6,3,15,1),s=0;s<3;s++)j[s]=r[s][R];for(b=c(Ut,Tt,6,this.f.length,15,1),y=0;y<this.f.length;y++)b[y]=j[0]*n[y][0]+j[1]*n[y][1]+j[2]*n[y][2];if(A==1){for(h=!1,T=b[0]<b[1],l=2;l<this.f.length;l++)if(T!=b[l-1]<b[l]){h=!0;break}if(h)return!1}for(f=0;f<this.f.length;f++)q8(J0(e,this.f[f]),A*(b[f]*j[0]-n[f][0]),A*(b[f]*j[1]-n[f][1]),A*(b[f]*j[2]-n[f][2]));return!0},U.sd=function(){return 2},U.pb=function(){var e;return e=new Fn(\"line rule:\"),WD(this,e),e.a};var E2t=H(369);p(370,50,C2,tB),U.qd=function(e,A){var n,P,r,i,f;if(i=0,P=LR(this,e),f=0,this.f[3]==-1?$D(e,P,this.f[4],this.f[2])||++f:($D(e,P,this.f[4],this.f[2])||++f,$D(e,P,this.f[4],this.f[3])&&++f),f!=0)for(n=0;n<this.f.length;n++)this.f[n]!=-1&&(r=.68*f,A!=null&&(A[this.f[n]]+=r),i+=r);return i},U.rd=function(e,A){var n,P,r,i,f,D,Q;if(D=LR(this,e),f=this.f[3]==-1&&!$D(e,D,this.f[4],this.f[2])||this.f[3]!=-1&&!$D(e,D,this.f[4],this.f[2])&&$D(e,D,this.f[4],this.f[3]),!f)return!1;for(Q=DY(this,e),P=this.a,r=0,i=P.length;r<i;++r)n=P[r],Tf(e,n,J0(e,this.f[4]),Q,U1);return!0},U.sd=function(){return 4},U.pb=function(){var e,A,n,P,r;for(r=new Fn(\"stereo rule:\"),WD(this,r),r.a+=\" rotatable:\",A=this.a,n=0,P=A.length;n<P;++n)e=A[n],r.a+=e+\" \";return r.a};var S2t=H(370);p(195,50,C2,SL),U.qd=function(e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h;if(n=lL(e,this.f),isNaN(n))return 0;if(n<0&&(n+=F0),l=180*n/U1,f=Nk(this,n),f==-1)for(z1(),L=this.e,s=0,y=L.length;s<y;++s);if(Q=tb(this,n,f),Q==0)return 0;for(P=w.Math.abs(l-this.e[f]),P>180&&(P=360-P),P>60&&(P=60),D=e.o,o=3*Q*P*P/3600,h=0,i=0;i<Ht(D,this.f[1]);i++)_(D,this.f[1],i)!=this.f[2]&&(A!=null&&(A[_(D,this.f[1],i)]+=o),h+=o);for(r=0;r<Ht(D,this.f[2]);r++)_(D,this.f[2],r)!=this.f[1]&&(A!=null&&(A[_(D,this.f[2],r)]+=o),h+=o);return h},U.rd=function(e,A){var n,P,r,i,f,D,Q,o,L,s,y,l,h,T,g,m,v,b,R;if(Q=lL(e,this.f),isNaN(Q)||(Q<0&&(Q+=F0),y=Nk(this,Q),b=tb(this,Q,y),b==0)||(f=U1*this.e[y]/180-Q,w.Math.abs(f)>U1&&(f=f<0?F0+f:f-F0),w.Math.abs(f)<.0031415926535897933))return!1;if(R=J8(J0(e,this.f[2]),J0(e,this.f[1])),$9(R),f*=A*b,g=e.o,this.a!=null)for(m=this.d==0?-f:f,P=this.a,r=0,i=P.length;r<i;++r)n=P[r],Tf(e,n,J0(e,this.f[1]),R,m);else for(D=u1(g,this.f[1],this.f[2]),l=D!=-1&&(g.p&&D<g.g?yP(g.p,D):0)<=5,s=1;s<=2;s++)for(o=(s==1?-2:2)*Ch(g,this.f[s]),h=0;h<Ht(g,this.f[s]);h++)if(L=_(g,this.f[s],h),L!=this.f[3-s]&&(Fm(e,L,this.f[s],R,f/o),!l))for(T=0;T<g.j[L];T++)v=g.i[L][T],v!=L&&g.e[v]!=1&&Fm(e,v,this.f[s],R,f/(4*o));return!0},U.sd=function(){return 3},U.pb=function(){var e,A;for(A=new Fn(\"torsion rule:\"),WD(this,A),A.a+=\" torsions:\",e=0;e<this.e.length;e++)e!=0&&(A.a+=\",\"),J(A,this.e[e]+\"(\"+this.b[e]+\")\");return A.a},U.d=0;var q2t=H(195),zt=H9(\"S\"),E=H9(\"B\"),F=H9(\"I\"),Pt=H9(\"Z\"),Ut=H9(\"D\"),Ee=H9(\"F\"),OA=H9(\"J\"),lr=H9(\"C\");U=L0(\"OCL.Canonizer\",Xg),U=L0(\"OCL.CanonizerUtil\",Wc),U.BACKBONE=Itt,U.NORMAL=xtt,U.NOSTEREO=Ntt,U.NOSTEREO_TAUTOMER=Ott,U.TAUTOMER=Gtt,U.getIDCode=Xz,U=L0(\"OCL.ConformerGenerator\",Wg),U.STRATEGY_ADAPTIVE_RANDOM=Jtt,U.STRATEGY_LIKELY_RANDOM=ztt,U.STRATEGY_LIKELY_SYSTEMATIC=Ytt,U.STRATEGY_PURE_RANDOM=Ktt,U=L0(\"OCL.DrugScoreCalculator\",_c),U.calculate=GI,U=L0(\"OCL.DruglikenessPredictor\",vg),U.DRUGLIKENESS_UNKNOWN=Xtt,U=L0(\"OCL.ForceFieldMMFF94\",CB),U.MMFF94=Ztt,U.MMFF94S=Wtt,U.MMFF94SPLUS=_tt,Bh(),U=L0(\"OCL.GenericEditorArea\",mb),U.EDITOR_EVENT_HIGHLIGHT_ATOM_CHANGED=Ynt,U.EDITOR_EVENT_HIGHLIGHT_BOND_CHANGED=Knt,U.EDITOR_EVENT_MOLECULE_CHANGED=Xnt,U.EDITOR_EVENT_SELECTION_CHANGED=Znt,U.HOTSPOT_16=TE,U.HOTSPOT_32=cE,U.IMAGE_DATA_16=wE,U.IMAGE_NAME_32=gE,U.KEY_ALT=Wnt,U.KEY_BACK_SPACE=_nt,U.KEY_CTRL=$nt,U.KEY_DELETE=ant,U.KEY_ENTER=tPt,U.KEY_ESCAPE=ePt,U.KEY_EVENT_PRESSED=APt,U.KEY_EVENT_RELEASED=nPt,U.KEY_HELP=PPt,U.KEY_SHIFT=rPt,U.MODE_DRAWING_OBJECTS=iPt,U.MODE_MARKUSH_STRUCTURE=fPt,U.MODE_MULTIPLE_FRAGMENTS=DPt,U.MODE_REACTION=uPt,U.MOUSE_EVENT_CLICKED=QPt,U.MOUSE_EVENT_DRAGGED=oPt,U.MOUSE_EVENT_ENTERED=UPt,U.MOUSE_EVENT_EXITED=LPt,U.MOUSE_EVENT_MOVED=sPt,U.MOUSE_EVENT_PRESSED=yPt,U.MOUSE_EVENT_RELEASED=lPt,U.TableLayoutFill=hPt,U.TableLayoutPreferred=TPt,U.cChainCursor=cPt,U.cDeleteCursor=wPt,U.cFistCursor=gPt,U.cHandCursor=dPt,U.cHandPlusCursor=BPt,U.cInvisibleCursor=vPt,U.cLassoCursor=FPt,U.cLassoPlusCursor=mPt,U.cPointedHandCursor=kPt,U.cPointerCursor=bPt,U.cSelectRectCursor=RPt,U.cSelectRectPlusCursor=jPt,U.cTextCursor=pPt,U.cZoomCursor=CPt,U=L0(\"OCL.GenericEditorToolbar\",Nm),U=L0(\"OCL.GenericUIHelper\",cB),_A(),U=L0(\"OCL.Molecule\",tL),U.CANONIZER_ASSIGN_PARITIES_TO_TETRAHEDRAL_N=$tt,U.CANONIZER_CONSIDER_DIASTEREOTOPICITY=att,U.CANONIZER_CONSIDER_ENANTIOTOPICITY=t1t,U.CANONIZER_CONSIDER_STEREOHETEROTOPICITY=e1t,U.CANONIZER_COORDS_ARE_3D=A1t,U.CANONIZER_CREATE_PSEUDO_STEREO_GROUPS=n1t,U.CANONIZER_CREATE_SYMMETRY_RANK=P1t,U.CANONIZER_DISTINGUISH_RACEMIC_OR_GROUPS=r1t,U.CANONIZER_ENCODE_ATOM_CUSTOM_LABELS=i1t,U.CANONIZER_ENCODE_ATOM_CUSTOM_LABELS_WITHOUT_RANKING=f1t,U.CANONIZER_ENCODE_ATOM_SELECTION=D1t,U.CANONIZER_NEGLECT_ANY_STEREO_INFORMATION=u1t,U.CANONIZER_TIE_BREAK_FREE_VALENCE_ATOMS=Q1t,U.FISCHER_PROJECTION_LIMIT=o1t,U.FISCHER_PROJECTION_RING_LIMIT=U1t,U.STEREO_ANGLE_LIMIT=L1t,U.VALIDATION_ERRORS_STEREO=oE,U.VALIDATION_ERROR_AMBIGUOUS_CONFIGURATION=s1t,U.VALIDATION_ERROR_ESR_CENTER_UNKNOWN=y1t,U.VALIDATION_ERROR_OVER_UNDER_SPECIFIED=l1t,U.cAtomCIPParityNone=h1t,U.cAtomCIPParityProblem=T1t,U.cAtomCIPParityRorM=c1t,U.cAtomCIPParitySorP=w1t,U.cAtomColorBlue=g1t,U.cAtomColorDarkGreen=d1t,U.cAtomColorDarkRed=B1t,U.cAtomColorGreen=v1t,U.cAtomColorMagenta=F1t,U.cAtomColorNone=m1t,U.cAtomColorOrange=k1t,U.cAtomColorRed=b1t,U.cAtomLabel=UE,U.cAtomParity1=R1t,U.cAtomParity2=j1t,U.cAtomParityIsPseudo=p1t,U.cAtomParityNone=C1t,U.cAtomParityUnknown=H1t,U.cAtomQFAny=M1t,U.cAtomQFAromState=V1t,U.cAtomQFAromStateBits=E1t,U.cAtomQFAromStateShift=S1t,U.cAtomQFAromatic=q1t,U.cAtomQFCharge=I1t,U.cAtomQFChargeBits=x1t,U.cAtomQFChargeShift=N1t,U.cAtomQFDepictedFeatures=O1t,U.cAtomQFENeighbourBits=G1t,U.cAtomQFENeighbourShift=J1t,U.cAtomQFENeighbours=z1t,U.cAtomQFExcludeGroup=Y1t,U.cAtomQFFlatNitrogen=K1t,U.cAtomQFHeteroAromatic=X1t,U.cAtomQFHydrogen=Z1t,U.cAtomQFHydrogenBits=W1t,U.cAtomQFHydrogenShift=_1t,U.cAtomQFIsNotStereo=$1t,U.cAtomQFIsStereo=a1t,U.cAtomQFMatchStereo=t0t,U.cAtomQFMoreNeighbours=e0t,U.cAtomQFNarrowing=A0t,U.cAtomQFNeighbourBits=n0t,U.cAtomQFNeighbourShift=P0t,U.cAtomQFNeighbours=r0t,U.cAtomQFNewRingSize=i0t,U.cAtomQFNewRingSizeBits=f0t,U.cAtomQFNewRingSizeShift=D0t,U.cAtomQFNoMoreNeighbours=u0t,U.cAtomQFNoOfBits=Q0t,U.cAtomQFNot0ENeighbours=o0t,U.cAtomQFNot0Hydrogen=U0t,U.cAtomQFNot0Neighbours=L0t,U.cAtomQFNot0PiElectrons=s0t,U.cAtomQFNot1ENeighbour=y0t,U.cAtomQFNot1Hydrogen=l0t,U.cAtomQFNot1Neighbour=h0t,U.cAtomQFNot1PiElectron=T0t,U.cAtomQFNot2ENeighbours=c0t,U.cAtomQFNot2Hydrogen=w0t,U.cAtomQFNot2Neighbours=g0t,U.cAtomQFNot2PiElectrons=d0t,U.cAtomQFNot2RingBonds=B0t,U.cAtomQFNot3ENeighbours=v0t,U.cAtomQFNot3Hydrogen=F0t,U.cAtomQFNot3Neighbours=m0t,U.cAtomQFNot3RingBonds=k0t,U.cAtomQFNot4ENeighbours=b0t,U.cAtomQFNot4Neighbours=R0t,U.cAtomQFNot4RingBonds=j0t,U.cAtomQFNotAromatic=p0t,U.cAtomQFNotChain=C0t,U.cAtomQFNotCharge0=H0t,U.cAtomQFNotChargeNeg=M0t,U.cAtomQFNotChargePos=V0t,U.cAtomQFPiElectronBits=E0t,U.cAtomQFPiElectronShift=S0t,U.cAtomQFPiElectrons=q0t,U.cAtomQFRingSize0=I0t,U.cAtomQFRingSize3=x0t,U.cAtomQFRingSize4=N0t,U.cAtomQFRingSize5=O0t,U.cAtomQFRingSize6=G0t,U.cAtomQFRingSize7=J0t,U.cAtomQFRingSizeLarge=z0t,U.cAtomQFRingState=Y0t,U.cAtomQFRingStateBits=K0t,U.cAtomQFRingStateShift=X0t,U.cAtomQFRxnParityBits=Z0t,U.cAtomQFRxnParityHint=W0t,U.cAtomQFRxnParityInvert=_0t,U.cAtomQFRxnParityRacemize=$0t,U.cAtomQFRxnParityRetain=a0t,U.cAtomQFRxnParityShift=tet,U.cAtomQFSimpleFeatures=eet,U.cAtomQFSmallRingSize=Aet,U.cAtomQFSmallRingSizeBits=net,U.cAtomQFSmallRingSizeShift=Pet,U.cAtomQFStereoState=ret,U.cAtomQFStereoStateBits=iet,U.cAtomQFStereoStateShift=fet,U.cAtomRadicalState=Det,U.cAtomRadicalStateD=uet,U.cAtomRadicalStateNone=Qet,U.cAtomRadicalStateS=oet,U.cAtomRadicalStateShift=Uet,U.cAtomRadicalStateT=Let,U.cAtomValence=LE,U.cBondCIPParityEorP=set,U.cBondCIPParityNone=yet,U.cBondCIPParityProblem=het,U.cBondCIPParityZorM=Tet,U.cBondParityEor1=cet,U.cBondParityNone=wet,U.cBondParityUnknown=get,U.cBondParityZor2=det,U.cBondQFAllFeatures=Bet,U.cBondQFAromState=vet,U.cBondQFAromStateBits=Fet,U.cBondQFAromStateShift=met,U.cBondQFAromatic=ket,U.cBondQFBondTypes=bet,U.cBondQFBondTypesBits=Ret,U.cBondQFBondTypesShift=jet,U.cBondQFBridge=pet,U.cBondQFBridgeBits=Cet,U.cBondQFBridgeMin=Het,U.cBondQFBridgeMinBits=Met,U.cBondQFBridgeMinShift=Vet,U.cBondQFBridgeShift=Eet,U.cBondQFBridgeSpan=qet,U.cBondQFBridgeSpanBits=Iet,U.cBondQFBridgeSpanShift=xet,U.cBondQFDelocalized=Net,U.cBondQFDepictedFeatures=Oet,U.cBondQFDouble=Get,U.cBondQFMatchFormalOrder=Jet,U.cBondQFMatchStereo=zet,U.cBondQFMetalLigand=Yet,U.cBondQFNarrowing=Ket,U.cBondQFNoOfBits=Xet,U.cBondQFNotAromatic=Zet,U.cBondQFNotRing=Wet,U.cBondQFQuadruple=_et,U.cBondQFQuintuple=$et,U.cBondQFRareBondTypes=aet,U.cBondQFRareBondTypesBits=tAt,U.cBondQFRareBondTypesShift=eAt,U.cBondQFRing=AAt,U.cBondQFRingSize=nAt,U.cBondQFRingSizeBits=PAt,U.cBondQFRingSizeShift=rAt,U.cBondQFRingState=iAt,U.cBondQFRingStateBits=fAt,U.cBondQFRingStateShift=DAt,U.cBondQFSimpleFeatures=uAt,U.cBondQFSingle=QAt,U.cBondQFTriple=oAt,U.cBondTypeCross=UAt,U.cBondTypeDeleted=LAt,U.cBondTypeDelocalized=sAt,U.cBondTypeDouble=yAt,U.cBondTypeDown=lAt,U.cBondTypeIncreaseOrder=hAt,U.cBondTypeMaskSimple=TAt,U.cBondTypeMaskStereo=cAt,U.cBondTypeMetalLigand=wAt,U.cBondTypeQuadruple=gAt,U.cBondTypeQuintuple=dAt,U.cBondTypeSingle=BAt,U.cBondTypeTriple=vAt,U.cBondTypeUp=FAt,U.cChiralityDiastereomers=mAt,U.cChiralityEpimers=kAt,U.cChiralityIsomerCountMask=bAt,U.cChiralityKnownEnantiomer=RAt,U.cChiralityMeso=jAt,U.cChiralityNotChiral=pAt,U.cChiralityRacemic=CAt,U.cChiralityUnknown=HAt,U.cChiralityUnknownEnantiomer=MAt,U.cCommonOxidationState=sE,U.cDefaultAVBL=VAt,U.cDefaultAllowedPseudoAtoms=EAt,U.cDefaultAtomValence=SAt,U.cESRGroupBits=qAt,U.cESRMaxGroups=IAt,U.cESRTypeAbs=xAt,U.cESRTypeAnd=NAt,U.cESRTypeOr=OAt,U.cHelperAll=GAt,U.cHelperBitCIP=JAt,U.cHelperBitIncludeNitrogenParities=zAt,U.cHelperBitNeighbours=YAt,U.cHelperBitParities=KAt,U.cHelperBitRings=XAt,U.cHelperBitRingsSimple=ZAt,U.cHelperBitSymmetrySimple=WAt,U.cHelperBitSymmetryStereoHeterotopicity=_At,U.cHelperBitsStereo=$At,U.cHelperCIP=aAt,U.cHelperNeighbours=tnt,U.cHelperNone=ent,U.cHelperParities=Ant,U.cHelperRings=nnt,U.cHelperRingsSimple=Pnt,U.cHelperSymmetrySimple=rnt,U.cHelperSymmetryStereoHeterotopicity=int,U.cMaxAtomicNo=fnt,U.cMaxConnAtoms=Dnt,U.cMoleculeColorDefault=unt,U.cMoleculeColorNeutral=Qnt,U.cPseudoAtomA=ont,U.cPseudoAtomAttachmentPoint=Unt,U.cPseudoAtomPolymer=Lnt,U.cPseudoAtomR=snt,U.cPseudoAtomX=ynt,U.cPseudoAtomsAGroups=lnt,U.cPseudoAtomsAll=hnt,U.cPseudoAtomsAminoAcids=Tnt,U.cPseudoAtomsHydrogenIsotops=cnt,U.cPseudoAtomsRGroups=wnt,U.cRoundedMass=yE,U.fromIDCode=Jz,U.fromMolfile=Dx,U.fromMolfileWithAtomMap=nz,U.fromSmiles=PO,U.getAngle=_I,U.getAngleDif=DI,U.getAtomicNoFromLabel=uI,U.getDefaultAverageBondLength=gI,U.isAtomicNoElectronegative=Nq,U.isAtomicNoElectropositive=Oq,U.setDefaultAverageBondLength=hq,U=L0(\"OCL.MoleculeProperties\",E7),U=L0(\"OCL.Reaction\",Ed),U.create=nI,U.fromMolecules=FJ,U.fromRxn=gO,U.fromSmiles=tO,U=L0(\"OCL.ReactionEncoder\",X2),U.CATALYST_DELIMITER=gnt,U.INCLUDE_ALL=dnt,U.INCLUDE_CATALYSTS=Bnt,U.INCLUDE_COORDS=vnt,U.INCLUDE_DEFAULT=Fnt,U.INCLUDE_DRAWING_OBJECTS=mnt,U.INCLUDE_MAPPING=knt,U.INCLUDE_RXN_CODE_ONLY=bnt,U.MOLECULE_DELIMITER=Rnt,U.OBJECT_DELIMITER=jnt,U.PRODUCT_IDENTIFIER=pnt,U.RETAIN_REACTANT_AND_PRODUCT_ORDER=Cnt,U.decode=oX,U.encode=LW,U=L0(\"OCL.Reactor\",O7),U=L0(\"OCL.Resources\",K2),U._register=lq,U=L0(\"OCL.RingCollection\"),U.MAX_SMALL_RING_SIZE=Hnt,U.MODE_SMALL_AND_LARGE_RINGS=Mnt,U.MODE_SMALL_AND_LARGE_RINGS_AND_AROMATICITY=Vnt,U.MODE_SMALL_RINGS_AND_AROMATICITY=Ent,U.MODE_SMALL_RINGS_ONLY=Snt,U=L0(\"OCL.SDFileParser\",Ud),U=L0(\"OCL.SSSearcher\",rB),U=L0(\"OCL.SSSearcherWithIndex\",aw),U.bitCount=sq,U.getHexStringFromIndex=iq,U.getIndexFromHexString=fq,U.getKeyIDCode=yq,U.getSimilarityAngleCosine=Hq,U.getSimilarityTanimoto=Mq,U=L0(\"OCL.SmilesParser\",t3),g3(),U=L0(\"OCL.ToxicityPredictor\",ig),U.RISK_HIGH=qnt,U.RISK_LOW=Int,U.RISK_NAMES=hE,U.RISK_NO=xnt,U.RISK_UNKNOWN=Nnt,U.TYPE_IRRITANT=Ont,U.TYPE_MUTAGENIC=Gnt,U.TYPE_REPRODUCTIVE_EFFECTIVE=Jnt,U.TYPE_TUMORIGENIC=znt,U=L0(\"OCL.Transformer\",Zg),U=L0(\"OCL.Util\",$c),U.getHoseCodesFromDiastereotopicID=Qz,U=L0(\"java.io.Serializable\"),U.$isInstance=zz,kr(),U=L0(\"java.lang.Boolean\"),U.$isInstance=fx,U=L0(\"java.lang.CharSequence\"),U.$isInstance=QJ,U=L0(\"java.lang.Cloneable\"),U.$isInstance=CG,U=L0(\"java.lang.Comparable\"),U.$isInstance=Pz,U=L0(\"java.lang.Double\"),U.$isInstance=MI,U=L0(\"java.lang.Number\"),U.$isInstance=LO,U=L0(\"java.lang.String\"),U.$isInstance=VI,U=L0(\"java.lang.Throwable\"),U.of=wJ,U=L0(\"java.util.List\"),U.copyOf=Uz,U=L0(\"java.util.Map\"),U.copyOf=sN,U=L0(\"java.util.Set\"),U.copyOf=Iz,U=L0(\"javaemul.internal.HashCodes\",Aw),U.getIdentityHashCode=Zz,U.getNextHash=Dq,U.getObjectIdentityHashCode=dD,U=L0(\"javaemul.internal.JsUtils\"),U.toDoubleFromUnsignedInt=Lq;var _E=ON,GPt=RY;nG(pS),fG(\"permProps\",[[]]),p1(\"moduleStartup\",\"moduleEvalEnd\"),GPt(Ft.__errFn,Ft.__moduleName,Ft.__moduleBase,Ft.__softPermutationId,Ft.__computePropValue),p1(\"moduleStartup\",\"end\"),Bt&&Bt.permProps&&Ft.__moduleStartupDone(Bt.permProps);let $E=w.OCL;return $E.version=\"9.22.1\",$E}var WPt=typeof window<\"u\"&&typeof window.document<\"u\",j8;j8={document:{compatMode:\"CSS1Compat\"}},j8.setTimeout=globalThis.setTimeout?globalThis.setTimeout.bind(globalThis):af,j8.clearTimeout=globalThis.clearTimeout?globalThis.clearTimeout.bind(globalThis):af,j8.setInterval=globalThis.setInterval?globalThis.setInterval.bind(globalThis):af,j8.clearInterval=globalThis.clearInterval?globalThis.clearInterval.bind(globalThis):af,j8.Error=globalThis.Error,j8.Map=globalThis.Map,j8.Math=globalThis.Math,j8.RegExp=globalThis.RegExp,j8.TypeError=globalThis.TypeError;var _Pt=ZPt(j8),Z0=_Pt;function jS(w){let Z=w.Resources._register.bind(w.Resources);if(delete w.Resources._register,w.Resources.register=function(Ft){typeof Ft==\"string\"&&(Ft=JSON.parse(Ft));let p1=new TextEncoder;if(typeof Ft!=\"object\"||Ft===null)throw new TypeError(\"resources must be an object\");let Rt={};for(let[y1,i1]of Object.entries(Ft)){if(typeof i1!=\"string\")throw new TypeError(`resource ${y1} must be a string`);Rt[y1]=p1.encode(i1)}Z(Rt)},w.Resources.registerFromUrl=async function(Ft=$Pt()){let Rt=await(await fetch(Ft)).json(),y1=new TextEncoder,i1=Object.fromEntries(Object.entries(Rt).map(([s1,o1])=>[s1,y1.encode(o1)]));Z(i1)},typeof process<\"u\"){let ot=function(){let Ft=process.getBuiltinModule(\"node:path\"),p1=Ft.join(import.meta.dirname,\"resources.json\");return import.meta.filename.endsWith(\"register_resources.js\")&&(p1=Ft.join(import.meta.dirname,\"../dist/resources.json\")),p1};var Bt=ot;w.Resources.registerFromNodejs=function(p1=ot()){let y1=process.getBuiltinModule(\"node:fs\").readFileSync(p1,\"ascii\");w.Resources.register(y1)}}else w.Resources.registerFromNodejs=function(){throw new Error(\"Resources.registerFromNodejs can only be called from Node.js\")}}function $Pt(){return new URL(\"resources.json\",import.meta.url).href}Zc(Z0);RS(Z0);jS(Z0);var xut=Z0,Nut=Z0.CanvasEditor,Out=Z0.registerCustomElement,Gut=Z0.Canonizer,Jut=Z0.CanonizerUtil,zut=Z0.ConformerGenerator,Yut=Z0.DrugScoreCalculator,Kut=Z0.DruglikenessPredictor,Xut=Z0.ForceFieldMMFF94,Zut=Z0.Molecule,Wut=Z0.MoleculeProperties,_ut=Z0.Reaction,$ut=Z0.ReactionEncoder,aut=Z0.Reactor,tQt=Z0.Resources,eQt=Z0.RingCollection,AQt=Z0.SDFileParser,nQt=Z0.SSSearcher,PQt=Z0.SSSearcherWithIndex,rQt=Z0.SmilesParser,iQt=Z0.ToxicityPredictor,fQt=Z0.Transformer,DQt=Z0.Util,uQt=Z0.version;export{Gut as Canonizer,Jut as CanonizerUtil,Nut as CanvasEditor,zut as ConformerGenerator,Yut as DrugScoreCalculator,Kut as DruglikenessPredictor,Xut as ForceFieldMMFF94,Zut as Molecule,Wut as MoleculeProperties,_ut as Reaction,$ut as ReactionEncoder,aut as Reactor,tQt as Resources,eQt as RingCollection,AQt as SDFileParser,nQt as SSSearcher,PQt as SSSearcherWithIndex,rQt as SmilesParser,iQt as ToxicityPredictor,fQt as Transformer,DQt as Util,xut as default,Out as registerCustomElement,uQt as version};\n/**\n * openchemlib - Manipulate molecules\n * @version v9.22.1\n * @date 2026-05-02T08:37:30.222Z\n * @link https://github.com/cheminfo/openchemlib-js\n * @license BSD-3-Clause\n*/\n","import { SSSearcher } from 'openchemlib';\n/**\n * Applies fragment labels from a fragment molecule to a target molecule. This method is in\n * place and modifies the target molecule directly.\n * @param molecule - The target molecule to which fragment labels will be applied.\n * @param fragment - The fragment molecule containing the labels to apply.\n * @param options\n * @returns The number of matches found\n */\nexport function applyFragmentLabels(molecule, fragment, options = {}) {\n    const { algorithm = 'overlapping', prefix = '', suffix = '' } = options;\n    const sssearcher = new SSSearcher();\n    sssearcher.setMolecule(molecule);\n    sssearcher.setFragment(fragment);\n    const found = sssearcher.findFragmentInMolecule({ countMode: algorithm });\n    const matches = sssearcher.getMatchList();\n    for (const match of matches) {\n        for (let fragmentAtomIndex = 0; fragmentAtomIndex < match.length; fragmentAtomIndex++) {\n            const moleculeAtomIndex = match[fragmentAtomIndex];\n            const label = fragment.getAtomCustomLabel(fragmentAtomIndex);\n            if (label) {\n                molecule.setAtomCustomLabel(moleculeAtomIndex, prefix + label + suffix);\n            }\n        }\n    }\n    return found;\n}\n//# sourceMappingURL=applyFragmentLabels.js.map","export const autoLabelDatabase = [\n    {\n        idCode: 'ea^P@@@LdbVRRbbvRRbLVRbrTVRdsRuMTmSSMLuSPEdEaLWEiATSUCRu]_QKPiHn{FkY]vLVZ{l[MuwXrX[ni`tw]cQen{FC[Mv\\\\\\\\wQuw]cSgf{v~[kXEnuhVzVQ{lX]bw\\\\qK]STmvLswXw[gnqfwxeXN@@AkhB\\\\@S@XM]@C`BXB`[hBL@C@DpG@wPDXAN@I`IFn`NpALAhMtAF@Q`BXBqkhAl@S@^C]@Q`BX@f@bZz@k@DpFPwPDXAf@I`Jan`@P@l@S@]C]@Q`@x@f@fFz@c@BpALAlMt@f@A`BXBx[h@D@s@DpGpwPDXAV@I`HQn`@PAL@S@Tc]@@`DX@f@eFz@c@NpALAjMtAF@M`BXB',\n        coordinates: '!BmpJH@oy?mwvH_[\\\\Bb@Jw_Xa}mpK~_x`B?g~w_Xa}mpJH@k]}bGw~_{\\\\Bb@JH__x@b@JH_X`BbGw~@H`BbGvH@ha}?`BH@ha}b@K~@Ha}',\n        mf: 'C40H56',\n        mw: 536.88464,\n        label: 'Lycopene',\n    },\n    {\n        idCode: 'eaYP@@@LdbbTbsbrTVRTVRbrbbdWBaOKUMUMLtsSMLuUU@RTVdyAVUUCRu]_tJPknqjuW]cEfn{Fs]]vLfF{jXMMwXtY[nq`vs]gGMt]]wXtyyn}ofzvA[mZEnqdVzVq{lX\\\\RwTuO]c]f^{F[\\\\mwM~IVC`@@Zz@[@DpFCWPEX@f@hZz@{@DpGCWPDX@f@dZz@K@DpF`wPDX@N@I`KFn`ApALAxut@f@I`Han`HpCl@S@YC]@Q`CX@f@jZz@s@DpGSWPDx@f@fFz@c@@pALAlMtAF@S`BXBx[hBL@c@DpGpwPDX@f@I`HQn`HpCL@S@Xc]@Q`AX@f@iFz@S@@pALArMtAF@U`BXB',\n        coordinates: '!B?`BH_[]}mpJH?H`BmpIt^pnGmwvH_X`B?g~H_X`BbGvH@oy?bGvH@ha}b@JH__x@b@JH_X`BbGw~@H`BbGw~_x`BbGvw_Xa}f~atnH`B',\n        mf: 'C40H56',\n        mw: 536.88464,\n        label: 'beta-carotene',\n    },\n    {\n        idCode: 'eghP@@@LddTTVdRVbLf|VRgEdbgfPRUUUUUUUUUUUW@B`RDhbb\\\\ST@~P`aBOt^PAnshFzNP{lXMawXtXcnqiuG]cEfF{vx[mXQnqiN{FSJ]vMft{lZlYw\\\\pZqnmgFzV|[jXKnqntW]cCdn{F[YMwLUwTtzkniasW]SAnnzfSC]uMFf{j[LmwTq[[nijqw]S]knzf[@',\n        coordinates: '!BmwvH__x@?g~w@oy??g~H@k\\\\B?`@_YSF?bGvH_Xa}Gqhq`ELXb@KxF}MgYVBw?Cctm?vw?K_}m?s~_p',\n        mf: 'C30H54',\n        mw: 414.75876,\n        label: 'Cucurbitane',\n    },\n    {\n        idCode: 'eghP@@@LddTbbtVdIVbdsRdabcfefSUUUUUUUUUUUW@D`bDh`bbbR@~PPbbOt^PAnchN{FKHMv]`w^qG]cCjN{FsL]vMVx{nXLIwXpZSnqhrc][Z]vMvL{lYMYwXsYqnuoF{FB{lZ]EwTpYInelfzfJ{jYMUwTtYinynnzfgC]uLNf{j[LmwTq[[nijqw]S]knzf[@',\n        coordinates: '!BmpJH@oy??`C~@A}eL[~H__x@bGt_Fh`BTqc~_x`B?`AeXHa}bGvw?Cctb@KxF}Mgm?vw?K_}m?s~_p',\n        mf: 'C30H54',\n        mw: 414.75876,\n        label: 'Dammarane',\n    },\n    {\n        idCode: 'eghP@@@LddTTVbTad|VLVR`fdea`VUUUUUUUUUUUUW@B`UBxRdBST@~P`bbOt^PCnq`tC]gHMvm`wXqG]cSjFzNX{lZMpwRpc][RMuLiwXq[Qn}cN{FSVMwLywTt{sniapW]cYhn{FkI]wLFr{l[lUwXpzknqfsW]SAnnzfSC]uMFf{j[LmwTq[[nijqw]S]knzf[@',\n        coordinates: '!BmpK~_x`B?`Bw__x@bGvw_Xa}mpK~_{\\\\Bb@KxF}Mg?`@_YSF?Gqhq`ELXYVBw@cctm?vw@k_}mpK~_p',\n        mf: 'C30H54',\n        mw: 414.75876,\n        label: 'Lanostane',\n    },\n    {\n        idCode: 'eghP@@@LddTbbtVdIVbdsRdabcfefSUUUUUUUUUUUW@B`RBhPbbbR@~PPbbOtnPAnchN{FKHMv]`w^qG]cCjN{FsL]vMVD{lXMIwXtYQnmmN{F{F]vLfl{lYlxwZwc]cA]vMNb{jXLdwRvS]SE]uLfj{jZLtw\\\\wW]SSanzfGS]uMfV{jXmmwTuX{ninuw]SM`',\n        coordinates: '!BmpJH@oy??`C~@A}eL[~H__x@bGt_Fh`BTqc~_x`B?`AeXHa}bGvw@cctb@KxF}Mgm?vw@k_}mpK~_p',\n        mf: 'C30H54',\n        mw: 414.75876,\n        label: 'Protostane',\n    },\n    {\n        idCode: 'egdP@@@LddTQdVeRdtVLVRgD`bfag`VUUUUUUUUUUUUUp@jHICHy@du@OhCHQy@FzV`[mYAnylNzfgD]uLNh{lXLpwVwC]SBMv]HwXrg]cSmF{vL[hzsnqhsg]cEoN{FSA]vMfb{lZlew\\\\p[KnqnqW]cCjn{F[M]uLFz{jYLMwTtZ[nilrw]SEmnzfkG]uMvn{jYl',\n        coordinates: '!BmpJH@o`[tv_~@K]}?`Bw@h`B?`Bw@k]}?`Bw@k\\\\B?`@_YSF?Gqhq`ELXYVBw@cctm?vw@k_}mpK~_p',\n        mf: 'C30H52',\n        mw: 412.74288,\n        label: 'Cycloartane',\n    },\n    {\n        idCode: 'egdP@@@LddTbbtVbtVtT|R`ebf`QVWVquUUUUUUUUUUTh@hHaJDIMHDhitidA}`aEDQQ~cr@]vMf`{lXlawXp{CnqdqG]SMjFzNX{lZmqwTwXSnqntg]cSeN{FcZMv\\\\Xw^ug]cMgNzfS^]uLNB{jXMEwXpYKnijvS][E]uMFj{nXLuwTt{inuaf{Ff[iY[nibvs]SGMwM]wTvX',\n        coordinates: '!B?l]klaRrW`@TcVnM?l]kc_{XEHtTlo{GZ{IklalMZ{HTc_{GEHw~vAL|HgS~qqRrEHtAmqRMEKK~qp',\n        mf: 'C30H52',\n        mw: 412.74288,\n        label: 'Friedelane',\n    },\n    {\n        idCode: 'egdP@@@LddTbbtVadLTRltdabce`VSPvuUUUUUUUUUUUpAHHaAEhgIt`OdDHDc}Gd@{lXm@wQrG]cYlN{FkD]uMvh[lyan}nNzf[B]vLNd{lYLiwXs[Snq`qg]cQkFzv\\\\{l[mywXtxInuhf{FR{jZmewTrXkniauW]SAfnzfc]MtlLwTtw]sAenzfg[MwL]wTqZ{nilp',\n        coordinates: '!BbGw~@K]}?g~H@oy??`Bw@h`BmpJH__x@bGvw_Yg@?g~H@ox@nuSOsURDotzH_Xa}bGwIPH`BuB^KAp',\n        mf: 'C30H52',\n        mw: 412.74288,\n        label: 'Lupane',\n    },\n    {\n        idCode: 'egdP@@@LddTbbtVdLJtRdvdabcedQPwVuUUUUUUUUUUUpAHHHmIELet`OhMHQy@FzN`{lXl`wYvC]{D]uLvh{l[LqwXu[cninpg]cAiN{FcJMumiwXpxsnqdug]cMgF{V|[lXKnijtW]c]dn{FgYMtlTwTuW]SIfnzfG]]uLFF[nZ[nibrw]SYmnzfcG]wLFn{jZ\\\\',\n        coordinates: '!BmpJH@oy??`C~@K]}?g~H__x@bGvw@h`BmpK~_x`B?`Bw__x@bGvH_[\\\\BCwvw@h`BuB^KA?x@vuPlf@',\n        mf: 'C30H52',\n        mw: 412.74288,\n        label: 'Oleanane',\n    },\n    {\n        idCode: 'egdP@@@LddTbbtVadLTRvtdabce`UTpvuUUUUUUUUUUUHAHHaAIhgIyJet`OdDHDc}Gd@{lXm@wQrG]cYlN{FkD]uMvh[lyan}nNzf[B]vLNd{lYLiwXs[Snq`qg]cQkFzv\\\\{l[mywXtxInuhf{FR{jZmewTrXkniauW]SAfnzfg]MtlLwTtw]SQen{fC[MwL]wTqZ{nilp',\n        coordinates: '!BRGw~`C]}?k}H@oz??`@w@d`BMpIH__z@RGtw__z@?k}H@ox@MpKwoS\\\\Bb@IH_Ta}?hC~@D`BANmSip',\n        mf: 'C30H52',\n        mw: 412.74288,\n        label: 'Taraxastane',\n    },\n    {\n        idCode: 'egdP@@@LdbTbbTVbbQvdjteB`e`QVSRvsUUUUUUUUUUTH`lIQAIH`hdidA}AaGzOHAwXvZCnqdrG]cElN{FGD]vMFh[hycnqjwG]S]aN{F{R]vMNT[l{Qn}cNzf[V]vLv\\\\{jYMywTpxKni`tW]SSdn{FCYMulUwTtZkny`sS]k]MvLMwTuZYneefzfv[nX{nibuw]SY`',\n        coordinates: '!BR@K~os\\\\BRGuH_S]}?k|w__z@?k?~o?x@MpHw@o^}MpJH@da}RGw~`Ox@?k}H@ox@RGuH_T`BANmSip',\n        mf: 'C30H50',\n        mw: 410.727,\n        label: 'Ursane',\n    },\n    {\n        idCode: 'ek`P@@@LddTTVbvebQbrbbxtdlL\\\\BRjjjjjjjjjjk`APJaJQqYSj@_XPQQBd_i\\\\`G]cAhF{NP[m[AnqbN{FgTMt\\\\qwXt[anmaFzVd[jYSnqbvc]{F]vLfl[nYsnqlwg]cU`n{F{Q]vLNR{lYmewTpXkniduW]SQfnzfs]]uLVF{jZmMwTpy[ninvw]SMcnzfg@',\n        coordinates: '!BmpK~_x`B?`Bw__x@mwvH_Xa}mpK~_{\\\\Bb@K~@A}eGqhq`ELXYVBw?Cctm?vw?K_}?`Bw?Oy?Stp',\n        mf: 'C29H52',\n        mw: 400.73187999999993,\n        label: 'Poriferastane',\n    },\n    {\n        idCode: 'ek`P@@@LddTTVbvebQbrbbxtdlL\\\\BRjjjjjjjjjjk`APJaJQqYSi@_XPQQBd_i\\\\`G]cAhF{NP[m[AnqbN{FgTMt\\\\qwXt[anmaFzVd[jYSnqbvc]{F]vLfl[nYsnqlwg]cU`n{F{Q]vLNR{lYmewTpXkniduW]SQfnzfs]]uLVF{jZmMwTpy[ninvw]SMcnzfg@',\n        coordinates: '!BmpK~_x`B?`Bw__x@mwvH_Xa}mpK~_{\\\\Bb@K~@A}eGqhq`ELXYVBw?Cctm?vw?K_}?`Bw?Oy?Stp',\n        mf: 'C29H52',\n        mw: 400.73187999999993,\n        label: 'Stigmastane',\n    },\n    {\n        idCode: 'ekdPD@@@LLdTbRbRUTRtrTfVXTxDl\\\\RrZzvNjjjjjjjjjjjbHDPkET`Oz[IAwTrYCnifqG]SAjNzfsL]uMVx{lYlIwXwZSnihrg]SEmNzf{F]vMVl{l[LywXq[snqdpW]cChfzNR{lZMdwYqS]{U]vLFZ[k[inuaf{Ff{lZ\\\\lwRvs]SGMwL',\n        coordinates: '!BgF_GS_ygnOiwSb|fnOeBRwiXe?U?IdIKnOfx~fSR?badSVSMYCK~YvQMYDw~YvPr?aadSVQMYCH',\n        mf: 'C27H44O2',\n        mw: 400.64435999999995,\n        label: 'Spirostane',\n    },\n    {\n        idCode: String.raw `fc@@@LddTTVbvebQbrbgMRlYpTuUUUUUUUUUW@JBheQrsNhGvHQREQ~atAwXpZC]gH[m[C]cD{lZ]Qncf]vMFxwVpfzVdwTrn{FKZ[oXw]cIkMwL{nqlwn{FkA{l[mGnqar^{F[Y{jXLWnidu^zfcM{j[Mwnibp~zfkS{jX\\oninv~zf[@`,\n        coordinates: '!BmpK~_x`B?`Bw__x@mwvH_Xa}mpK~_{\\\\Bb@K~@A}eGqhq`ELXYVBw@cctmwvw@k]}?`Bw@oy?',\n        mf: 'C28H50',\n        mw: 386.705,\n        label: 'Campestane',\n    },\n    {\n        idCode: String.raw `fc@@@LddTTVbvebQbrbgMRlYpTuUUUUUUUUUW@JBheQrsNpGvHQREQ~atAwXpZC]gH[m[C]cD{lZ]Qncf]vMFxwVpfzVdwTrn{FKZ[oXw]cIkMwL{nqlwn{FkA{l[mGnqar^{F[Y{jXLWnidu^zfcM{j[Mwnibp~zfkS{jX\\oninv~zf[@`,\n        coordinates: '!BmpK~_x`B?`Bw__x@mwvH_Xa}mpK~_{\\\\Bb@K~@A}eGqhq`ELXYVBw@cctmwvw@k]}?`Bw@oy?',\n        mf: 'C28H50',\n        mw: 386.705,\n        label: 'Ergostane',\n    },\n    {\n        idCode: 'ec`PH@@@LdTTRRTVVbfQdrvEG@g`USRvuUUUUUUUUUUXTKaEHC~frP]vLvP{jYMawXwXcnqjuG]SAfNzfs\\\\]vMfD{lXmIwTtYSnibvg]cIcN{FGVMt\\\\ywTu[snqhpS]gQMwlewTw[KnifqW]cAjfzvZ[m[inqan{FgSMtllwTvs]s@',\n        coordinates: '!BtJW~hNpx{D_Pfd_ltJWPfak`esvhPox@jCvWPj`}jDK~gy\\\\}?bBhOZ`}?i~hPoz`jCvhOZaB',\n        mf: 'C27H46O',\n        mw: 386.66124,\n        label: 'Furostane',\n    },\n    {\n        idCode: 'eglPD@@@MlbbbbbRRqfbbbRRsDbeagaSPqrusP@PAE@D@HPP@@_tTQsnq`vS]KUMvltwYwS]cCMwMLwQrs][GMuM\\\\w^wxiXN@AAkhB\\\\@S@TC]@S`BXCFxXFz@G@DpFMpHMt@V@I`L[aQkhBL@S@VK]@Q`@X@f@qnGFn`ApALADut@V@I`Lan`Hp@L@S@UM]@I`BXCikhBl@S@SM]@]`BXCYkhCL@S@_M]@M`BXBEkh@l@c\\\\Hc]@Q`@XAFxIZz@g@Hw@kWP@xAFx@',\n        coordinates: '!B?`Bw@h`B?`Bw__x@bOvw?H`BmpJH@h`Bm?w~@Hc}mpJH@ox@m?w~@Hc}b@Jw@k\\\\Bb@JH@ox@m?vH?P',\n        mf: 'C28H18O2',\n        mw: 386.44892,\n        label: 'Bisanthrone',\n    },\n    {\n        idCode: 'fmo@@@LddTTVbvebQbrTyjUcNBfjjjjjjjjjh@Oz[PCFCPirJmbcDXtzdNXqhwIlJKRdrfLVu]cLYMZsNXv[sFkAXwZKFGIXs[JfCETrZjfcMTv[jfKCTuZZf{KTsX',\n        coordinates: '!BetK~gzaBM`BWO_z`esvhOZ`}etK~gy]BjDK~hL~esyhqXNLxi]BWP`QLesvWPi\\\\}?i~WP`',\n        mf: 'C27H48',\n        mw: 372.67812,\n        label: 'cholesterol',\n    },\n    {\n        idCode: 'fmo@@@LddTTVbvebQbrTyjUcNBfjjjjjjjjji`EATRhyY`OlPbdJc}MhCnq`tF{NPwZvF{FIwXtzc]GL{lZMqnmaMtmInie]vLVtw^qn{FSV[nYw]cYo]vMVCwXwZO]cCd}vLvswTpXo]SIj}uMF[wTv[o]SEa}uMVgwTwY_]SM`',\n        coordinates: '!BmpK~_x`B?`Bw__x@mwvH_Xa}mpK~_{\\\\Bb@K~@A}eGqhq`ELXYVBw@cctmwvw@k]}mpK~_p',\n        mf: 'C27H48',\n        mw: 372.67812,\n        label: 'Cholestane',\n    },\n    {\n        idCode: 'fa{@@@LddTTVbvebQbwMRlYpTuUUUUUUUUL@hJbUGKLA}bDTaT_hM@]vLF`wYrF{VpwXqN{FgT[hyg]cQnMulIneiMuLknqbvf{vMwXrZs]sN{l[M{nqjp^{F{Q{lX\\\\gnqfv^zfCE{jYMWnihs^zfs]{jXl',\n        coordinates: '!BmpK~_x`B?`Bw__x@mwvH_Xa}mpK~_{\\\\Bb@K~@A}eGqhq`ELXYVBw@cctmwvw@`',\n        mf: 'C24H42',\n        mw: 330.59748,\n        label: 'Cholane',\n    },\n    {\n        idCode: 'fj}@p@@FmxI\\\\dTTTRbTRR~XJSdyhJHBb`JCBDqB`OlHadBc}AHAnqdMuLQncfMwMqnuaMtmIn}gMum~HdG@@awP@xAFxX{h@l@c\\\\J]tAF@I`Jnz@[@DpGW]@I`BXCGn`JpALASwPFX@f@y{h@l@S@P',\n        coordinates: '!BbOvw?_y?bOrw?Oy?bGvw_Xc}m?w~@K]}?g~H@oy?bOrw?K\\\\B?`Bw@`',\n        mf: 'C15H14O6',\n        mw: 290.27016000000003,\n        label: 'Flavan-3,4-diol',\n    },\n    {\n        idCode: 'fjc@@@LddTTVbvebQyjUcNBfjjjjjjjj`EATRhy@~qBJPjOtj`N{FCP[lyC]kX[lXg]cSjMt\\\\snqhwFzvDwRtfzfUwXq[S]{F{lYMYnyg]vMf}wXuXO]c]h}vLNSwXs[O]SAb}uMF@',\n        coordinates: '!BmpK~_x`B?`Bw__x@mwvH_Xa}mpK~_{\\\\Bb@K~@A}eGqhq`ELXYV@x}@',\n        mf: 'C21H36',\n        mw: 288.51684,\n        label: 'Pregnane',\n    },\n    {\n        idCode: 'fj}@p@@LDhI\\\\bbbbbfqbRvxKUdyZBhb@`JAFEq@~QbNQ~`d`wRvF{fhwZwFzfDwXtfzNtwVuf{vDRC`@H{h@l@c\\\\B]t@N@QnAnz@c@DpEw]@M`BXC{n`DpALAcwPEX@f@i{hCL@S@\\\\}t@V@I`H',\n        coordinates: '!B?`BH@k\\\\B?`BH_[]}?`Bw?Hc|?g~H@k_|bOvw?_x@bOrw?K\\\\B?`Bw@`',\n        mf: 'C15H12O6',\n        mw: 288.25428,\n        label: 'Dihydroflavonol',\n    },\n    {\n        idCode: 'fj}@p@@DEiI\\\\bbbfbTtQRQXHwhyZdJH@BJ@@OzBRC]KH[nZc]S\\\\[mXS]cJ[hxs][^[o[|QHN@Acn`BpBMpYwP@xAFxR{hBL@S@[]t@v@I`Knz@S@DpDO]@U`BXCGn`LpALAswPAX@f@`',\n        coordinates: '!B?`Bw@h`Bmww~@Ox@bGvH?K_|bOs~_x`Bm?w~@Hc}m?rw@hc|?`Bw@`',\n        mf: 'C15H10O6',\n        mw: 286.23839999999996,\n        label: 'Flavonol',\n    },\n    {\n        idCode: 'fbmAP@@Fm{NRJJJIQJYIy`iNbf`h`JHB`PaLPOdHad_hI@MvLanibMt\\\\qnynMvlIneiMwlynmoqD`x@DNz@G@HwCG]@E`D[aSn`HpALAUwPCX@f@z{hAL@S@P}tAV@I`L^z@s@DpEO]@E`BXB',\n        coordinates: '!BbOvw?_y?bOrw?Oy?bGvw_Xc}m?w~@K]}?g~H@hc|m?rw@ox@mpH',\n        mf: 'C15H14O5',\n        mw: 274.27116,\n        label: 'Flavan-3-ol',\n    },\n    {\n        idCode: 'fbmAP@@\\\\e{NQQQJJKFIKYgEFbehJH`HB``q@~`rOtDdFzVpw\\\\uF{VXwTwF{FDwQrfzvLw^wxbP\\\\@AG]@E`D[`Sn`ApBMpuwPDX@f@v{hAl@S@W]t@f@I`H^z@k@DpFO]@Y`BXBgn`BpALA@',\n        coordinates: '!B?`BH@k\\\\B?`BH?_x@m?rH?Oy?b@Jw?Hc}m?w~@Hc|m?rw@ox@mpH',\n        mf: 'C15H12O5',\n        mw: 272.25527999999997,\n        label: 'Flavanone',\n    },\n    {\n        idCode: 'fbmAPD@\\\\}GHIrQQQQQHiQItDXKd`PP@ADP@@_tD`F{F`wTvF{fXwQpfzVtwZqf{vBwVwxbP\\\\@AG]@C`D[`Sn`HpALAiwPAXAFxR{hAl@S@U]t@f@I`Mnz@k@DpEw]@Y`BXBgn`BpALA@',\n        coordinates: '!Bm?vH?_y?m?s~_xc|mwvH_[_}?`BH_Xc}m?rw@oy?b@JH?Ox@mpH',\n        mf: 'C15H11O5',\n        mw: 271.24734,\n        label: 'Anthocyanidine',\n    },\n    {\n        idCode: 'fbmAP@@\\\\e{NQQQJJKFIKYgEFbehFH`HB`@C~`d`wRvF{fhwZsFzfxwXpfzNTwVqf{vDRC`@H{h@l@c\\\\B]t@N@QnFnz@c@DpFw]@M`BXB{n`DpALACwPEX@f@q{hCL@S@T}t@V@I`H',\n        coordinates: '!B?`BH@k\\\\B?`BH?_x@mpJH@oy?b@Jw@hc}m?w~@H`BmpJw@ox@mpH',\n        mf: 'C15H10O5',\n        mw: 270.2394,\n        label: 'Flavone',\n    },\n    {\n        idCode: String.raw `fluhP@DTxIPCQSdTRbbUTRRSNRT{sUKMUUUP@_t\\dIlbcXjqIMR{LbwKMJGJivfMrlinSdmr|ynPVmr@`,\n        coordinates: '!B?oum~QKy?ouBuo{}Dog]aYkMPlg~_ySz^bTT~Rc~?cK~eQKz',\n        mf: 'C10H13N5O4',\n        mw: 267.24422,\n        label: 'deoxyguanosine',\n    },\n    {\n        idCode: 'fbm@`@@HRY[UfUWISrXyZjj@@@H@@iIHMv]ancfMwlInqeMuminigMvmynydmtm~LdG@@IwPDx@f@t{h@\\\\@S@^]tAv@I`Lnz@c@DpDw]@M`BXC[n`DpALACwPEX@f@q{hCL@S@\\\\}t@V@I`H',\n        coordinates: '!BFfASFF@ZKAc~@Hc}b@K~_xc}m?vH?_y?b@K~_?y?bOvH?Xc}b@H',\n        mf: 'C18H18O2',\n        mw: 266.33892,\n        label: 'Butyrolactone',\n    },\n    {\n        idCode: 'fb}@`@@FrQQJIIIHsIDiHvgIsUPTE@@T@@_tddF{vpwXqFzNXwVwFzfDwYrf{Vtw\\\\sfzVFRC`@H{hB\\\\@S@Z]t@N@I`Lnz@{@DpFw]@Q`BXC{n`FpALACwPBX@f@q{hBl@S@T}tAf@I`N^z@K@DpD',\n        coordinates: String.raw `!Bb@J{UHc}f\\CRtOy?b@KRtIg@bOvH?[mTs}JH@f]SLXCOtl?RLX@`,\n        mf: 'C18H18O2',\n        mw: 266.33892,\n        label: 'Furanofuran lignan',\n    },\n    {\n        idCode: 'fb}@`@@HRY[efuWHrRoIcejjh@@@h@@iIHMv]ancjMwlInqcMumYni`mvmEnylmtm~LdG@@IwPDx@f@l{h@\\\\@S@^]t@v@I`Lnz@{@DpEW]@Q`BXCkn`JpALA]wPBX@f@~{h@l@S@T}tAf@I`H',\n        coordinates: '!BFfASFF@ZKAbH?_x@b@K~_x`B?`BH?[_}bOvH@h`B?g?~_xc}bOt',\n        mf: 'C18H16O2',\n        mw: 264.32304,\n        label: 'Arylnaphthalene lactone',\n    },\n    {\n        idCode: 'flm@@@LddTTVbvebyjUcNBfjjjjjjj@C~fT@q`tJ\\\\bkXhqFMNiCfLZMr[BbtiLicEmWXsFSVlsfMf|qjpVMvbqarVLv@',\n        coordinates: '!BetK~gzaBM`BWO_z`esvhOZ`}etK~gy]BjDK~hL~esyhqXNLx',\n        mf: 'C19H32',\n        mw: 260.46308,\n        label: 'steroid',\n    },\n    {\n        idCode: 'flm@@@LddTTVbvebyjUcNBfjjjjjjjhAPUDjNPOlPbdJc}LhCnq`tF{NPwZvF{FIwXtzc]GL{lZMqnmaMtmInie]vLVtw^qn{FSV[nYw]cYo]vMVCwXwZO]cCd}vLv@',\n        coordinates: '!BmpK~_x`B?`Bw__x@mwvH_Xa}mpK~_{\\\\Bb@K~@A}eGqhq`ELX',\n        mf: 'C19H32',\n        mw: 260.46308,\n        label: 'Androstane',\n    },\n    {\n        idCode: 'fle@P@@\\\\\\\\eIfVWyWyZCEhFB@`H@Pi_tddF{NpwQsF{vTwXqfzvlwTwf{VBw\\\\tVzVEbC`@H{hBL@S@R]t@f@I`MNz@[@DpDW]@Y`BXCKn`JpALAuwPAX@f@`',\n        coordinates: '!B?`BH@k\\\\BbGw~@Ox@?g~H@hc|m?s~@K_}?`BH?K_|mpK~@K\\\\B',\n        mf: 'C15H12O4',\n        mw: 256.25628,\n        label: 'Chalcone',\n    },\n    {\n        idCode: 'fluA@@@ISLrrn~QchaSUTDD@A@@G}IHan}jMvLqnceMuminicMv]ynu`mwLeneoqd`x@DNz@{@DpGG]@Q`BXBSn`ApALAywPCX@f@b{hAL@S@Y]tAN@I`Mnz@k@DpEw]@Y`BXCGn`BpALA@',\n        coordinates: '!BsA_LZNU_HNkeHBCeEOm?VVcSEOa?IfcLyU?eW~T`yRA?VW|f',\n        mf: 'C18H20O',\n        mw: 252.35579999999996,\n        label: 'Monofuranic lignan 7-O-7′',\n    },\n    {\n        idCode: 'fluA@@@ISKJn}jRfkQSUPTD@A@@G}IIAn}lMvLQncfMumqniaMv\\\\inumMwMYneoqd`x@BNz@g@DpFg]@C`BXCKn`NpALAMwPDX@f@n{hAl@S@_]t@f@I`H^z@k@DpFO]@Y`BXBgn`BpALA@',\n        coordinates: String.raw `!BG@\\\\^LE?lEjpIY\\]fOwhw^cBp^?A{~c]fOw~{~cBzMwhw^cB`,\n        mf: 'C18H20O',\n        mw: 252.35579999999996,\n        label: 'Monofuranic lignan 7-O-9′',\n    },\n    {\n        idCode: 'fluA@@@IRjkLjo`chaSUUP@@A@@G}IHansbMt\\\\qn}aMvMinmcMuMynu`mwLeneoqd`x@DNz@g@DpGG]@C`BXCSn`NpALAywPDX@f@r{hAl@S@U]t@f@I`Mnz@k@DpEw]@Y`BXCGn`BpALA@',\n        coordinates: '!BKA`lYvAeXAjH@ha}bGw~_?y?b@Jw_Xa}bGvH__y??g~H@ha}',\n        mf: 'C18H20O',\n        mw: 252.35579999999996,\n        label: 'Monofuranic lignan 9-O-9′',\n    },\n    {\n        idCode: 'fdei`@LZlFHIJrQQQSIQEYDhZw`uUUPHEP@G}GIAc\\\\dI[ebgDTwJcfyLZwKdVECmVXuVm]gR[tvCQ`',\n        coordinates: '!Bj?dT~_x@^bTEI_xrO]ZZtozUDoim~_{|i]Im~fwz?os~?@',\n        mf: 'C10H13N5O3',\n        mw: 251.24521999999996,\n        label: 'deoxyadenosine',\n    },\n    {\n        idCode: 'fdu@@@LddTRtjTrSA\\\\dZpXuUUUUUUT@hJddmHGqHQRIQjOtR`N{FsP{lXlcnqdvN{F{D{lX]Qncf]vMVywXtXW]cMiMv\\\\in}m]vLFLwVuf{V\\\\wXwfzVBwTtV{f@',\n        coordinates: '!B?g~H?A|ZLPBH_Q}ebOuSYx`B?g~H_Xc}?g~H@hc}bGvH?@',\n        mf: 'C18H30',\n        mw: 246.43619999999999,\n        label: 'Estrane',\n    },\n    {\n        idCode: 'fhiQP@DX@IW`yEEDeDdbdsakMUMMUU@ASRPdrJMbsDfuFMrYEnUZRfyFRwJsfyNZwH',\n        coordinates: '!B@yhCi_xl@yk~_pNZ?brT~ghe?bpCfaSyJO{~LozUDoh',\n        mf: 'C10H14N2O5',\n        mw: 242.23016,\n        label: 'deoxythymidine',\n    },\n    {\n        idCode: 'fdy@@@DjU^{yVg@qBBJj@@@@iIAMt\\\\in}mMv\\\\YnqkMulynioMvlEnyhmtm~LdG@@AwPDX@f@p{hAl@S@T]t@f@I`NNz@{@DpDg]@U`BXCSn`LpALAYwP@x@f@|{h@l@S@Y]tAN@I`H',\n        coordinates: String.raw `!B?g~H@k\\BbOvH?[_}b@K~_{\\BbOvw?_y?m?vH?_y??g~H?P`,\n        mf: 'C18H22',\n        mw: 238.37267999999997,\n        label: 'Dibenzylbutane',\n    },\n    {\n        idCode: 'fde@@@LdbbTRtVRKIBTFHQEDE@D@ARRX[o[c]cB[h{S][F[jZs]g^[mXK]sQ[i[|YHN@@Cn`FpALAawPDX@f@h{hBl@S@R]t@f@I`MNz@{@DpEg]@E`BXCKn`LpALAUwP@x@f@n{hB\\\\@S@P',\n        coordinates: '!B?`BH?[_}b@Jw@h`B?g~w@hc}m?vw?Xc}GvT_Foy??g~H?P',\n        mf: 'C18H20',\n        mw: 236.35679999999996,\n        label: 'Arylnaphthalene',\n    },\n    {\n        idCode: 'fde@@@LdbbbTRVQpcZ][t@DDDUA@ARR@[kYC]cX[mYc]S\\\\[oXS]KF[nZs]GA[l{|YHN@ACn`DpALAIwPDX@f@t{hCL@S@Y]t@v@I`Jnz@{@DpGW]@E`BXB{n`JpALA}wP@x@f@q{hB\\\\@S@P',\n        coordinates: '!B?g~[iBAzfyl`AWh`_?yzHGi__?yzWrAzfyl`AYndKwHoCP',\n        mf: 'C18H20',\n        mw: 236.35679999999996,\n        label: 'Dibenzocycloctane',\n    },\n    {\n        idCode: 'fhe@@@LdbbbTReryHQmN|Fjjjjjj`@iE@TzCFCHavFMFIUjTYcFK\\\\npfLfeMeQ[TfLqlufMV]YoL[lEcM`',\n        coordinates: '!BbOvw?_x@?g~H@k\\\\B?g~w@k_}bOvH?_x@GvVH@a|ZTq`',\n        mf: 'C17H28',\n        mw: 232.40931999999998,\n        label: 'steroid core',\n    },\n    {\n        idCode: 'fhe@@@LdbbbTReryHQmN|Fjjjjjjj@TDaLadCz`HaBHYAhRJ@[lzG]cAdMt]cnqhqF{VhwXsN{FK\\\\[oXW]cIiMulinemMuL[nqlun{FkN[n[w]c]`}vLv@',\n        coordinates: '!BbGvw__x@?g~H@k\\\\B?g~w?K_}bOvH__x@GvVH?A|ZTq`',\n        mf: 'C17H28',\n        mw: 232.40931999999998,\n        label: 'Gonane',\n    },\n    {\n        idCode: 'f`qQP@DX@ISoILrl{jsfcMUMMUT@G}MIBSHhvKLR[TXwIdVyUiJ[eiK\\\\cN[eYk\\\\`',\n        coordinates: '!B@yhCi_xl@yk~_pNZ?brT~ghe?bpT~Rc~?cK~eQKz',\n        mf: 'C9H12N2O5',\n        mw: 228.20328,\n        label: 'deoxyuridine',\n    },\n    {\n        idCode: 'f`qpP@DXxBSoYEDhihTdjBtYijjji`@iiHRYEfqQbQZdvXqnPjliS\\\\mI[dYs\\\\kM[d',\n        coordinates: '!B@yk~K@Ne@yhCfoy??bpCiYSz^bTT~Rc~?cK~eQKz',\n        mf: 'C9H13N3O4',\n        mw: 227.21921999999998,\n        label: 'deoxycytidine',\n    },\n    {\n        idCode: 'fhy@`@@BrJJJJIPy[`eV|EhJ`@@`@C~`d`wRvF{fhwZwFzfDwXtfzNTwVuf{vDRC`@H{h@l@c\\\\B]t@N@QnCNz@c@DpGW]@M`BXB[n`DpALA]wPEX@f@~{hCL@S@P}t@V@I`H',\n        coordinates: '!B?`BH@k\\\\B?`BH_[]}?`Bw@h`Bb@K~_{\\\\BbGvw_[]}mpH',\n        mf: 'C15H12O2',\n        mw: 224.25827999999998,\n        label: 'Isoflavanone',\n    },\n    {\n        idCode: 'fhy@`@@JRYfYU_XhwgAZd@`@H@@hIHMtlanyjMuMqnueMvMinccMumyn}oqD`x@FNz@K@Hw@g]@Q`BXBsn`ApBMpEwPCX@f@r{hAL@S@[]tAV@I`Knz@s@DpDO]@E`BXB',\n        coordinates: '!B?`Bw@h`Bm?w~@Ox@bOw~_{\\\\Bb@JH@h`Bm?vw?Xc}mpH',\n        mf: 'C15H10O2',\n        mw: 222.24239999999998,\n        label: 'Isoflavone',\n    },\n    {\n        idCode: 'f`i@`@@VRYfYU]`eNMyh@`AB@@OzJRC]gT[l[c]GB{lXMIneeMuMinucMwlynyoMum~ILE@@QkhgBM|ZzApc\\\\fn`lHwX[hc@LHw@',\n        coordinates: '!B?g~w_Xa}?g~w@oy?b@JH_[]}mwvH_Xa}?g~w@h`B',\n        mf: 'C14H8O2',\n        mw: 208.21552,\n        label: 'Anthraquinone',\n    },\n    {\n        idCode: 'foQ@`@@BRYfYWvBUXsf`B@@`@C~bd`wYuF{FxwQpn{FCR[iYS]SZ[mXs]{V[nYs][_bSAP@DZzIpc_Fn`\\\\HwIkhKBMvFzHpCBMp',\n        coordinates: '!B?g~w?Xc}?g~w@oy?b@JH?[_}m?vH?Xc}mpJH@`',\n        mf: 'C13H8O2',\n        mw: 196.20452,\n        label: 'Xanthone',\n    },\n    {\n        idCode: String.raw `foQA@@@YEEEEDdbrRkF\\t@D@D@@_tTdF{NhwXwFzNDwRtn{FCJ[j[S]kF[oZs]sN[k[|RXJ@@cWQND[xutCaFyM]AXQnpwQF@XQn`,\n        coordinates: '!B?g~w?Xc}?g~w@oy?b@Jw?Xc}m?vH?Xc}mpJH@`',\n        mf: 'C14H10O',\n        mw: 194.23239999999998,\n        label: 'Anthrone',\n    },\n    {\n        idCode: 'dg|@@DjU_eZx{BAH@@BJozL`mvMK][JwTvmvl[]sVwRwxb`x@@]tAF@I`L]t@v@I`J]t@f@I`N]t@f@Y`I]tAV@I`M]tAf@I`K]tAF@Y`O]t@V@I`H',\n        coordinates: '!B?`Bw?Xc}mpJw?Hc|m?vH?_y?bOrH?Xc}b@H',\n        mf: 'C14H12',\n        mw: 180.24928,\n        label: 'Stilbene',\n    },\n    {\n        idCode: 'fgA@@@DjYU_VByHu`@@@@@@OzJQC]gX[lXg]cAjMtmqniiMwLincmMvlYn}kMum~ILE@@AkhgBMxZzBpc]fn`\\\\HwD[hc@LHw@',\n        coordinates: String.raw `!B?g~H@k\\BbOvw?Xc}m?vH@k\\Bb@JH?Xc}b@H`,\n        mf: 'C14H10',\n        mw: 178.2334,\n        label: 'Anthracene',\n    },\n    {\n        idCode: 'dclD@@UIfV][iuhFAH@OzBdMtmc]sTwZsMuMs]cBwQtmumk]{_bbB`@IwPVD[ewPND[`',\n        coordinates: '!B?`BH@k\\\\B?`BH?_x@mpJH@h`B?`BH?P',\n        mf: 'C10H6O2',\n        mw: 158.15563999999998,\n        label: 'Naphtoquinone',\n    },\n    {\n        idCode: 'dmLD@@QIe[VfeVi@B@C~`iC]SHwXvMwMS]K\\\\wQpmvmK]{JwVp',\n        coordinates: '!Bb@JH?_x@b@JH@ox@bOvH@h`BbOt',\n        mf: 'C9H6O2',\n        mw: 146.14463999999998,\n        label: 'Coumarin',\n    },\n    {\n        idCode: 'dazH`Jx@aJ]nji`dG}JPGJQap|T\\\\MGGBaIppP',\n        coordinates: '!B?g~H@k_}?g~H?[_}?g|',\n        mf: 'C5H11NOS',\n        mw: 133.21434,\n        label: 'methionine',\n    },\n    {\n        idCode: 'detH@@rQQJHtpsPT@`APTAnqd[jXfzNinyf[i[f{VEn}i[k[|TPT@BNzApc_NzBpc\\\\',\n        coordinates: '!BbOvw?_y?b@K~_{_}bOvH?X`B',\n        mf: 'C9H8O',\n        mw: 132.16152,\n        label: '2H-Chromene',\n    },\n    {\n        idCode: 'daDD@@qJYnnjjh@htQcIkESUKM[]s@',\n        coordinates: '!Bm?vH?[_|?g?~_x`BbOt',\n        mf: 'C6H12O2',\n        mw: 116.15928000000001,\n        label: 'pyranose',\n    },\n    {\n        idCode: 'gOp`AdifMjj`OzVIcJVMM^Yzp',\n        coordinates: '!BTv]`YW?~KF_~_q`l',\n        mf: 'C5H10O2',\n        mw: 102.1324,\n        label: 'furanose',\n    },\n    {\n        idCode: 'gOp`Adigkjj`OzVIcKVMMYY|p',\n        coordinates: '!Bm?vH?[_|?g?~_xc}',\n        mf: 'C5H10O2',\n        mw: 102.1324,\n        label: 'pyranose core',\n    },\n    {\n        idCode: 'gFp`AdidvjhC~abXrecSWf@',\n        coordinates: '!BTv]`YW?~KF_~_p',\n        mf: 'C4H8O2',\n        mw: 88.10552,\n        label: 'furanose core',\n    },\n];\n//# sourceMappingURL=autoLabelDatabase.js.map","const MAX_R = 10;\n/**\n * Generate molecules and calculate predicted properties form a list of smiles and fragments\n * @param {string} coreSmiles\n * @param {Array} fragments - Array of {smiles,R1,R2,...}\n * @param {typeof import('openchemlib')} OCL - openchemlib library\n * @param {object} [options={}] - Options\n * @param {Function} [options.onStep] - method to execute each new molecules\n * @param {boolean} [options.complexity] - returns only the number of molecules to evaluate\n * @returns {Promise<any>} promise that resolves to molecules or complexity as a number\n */\nexport async function combineSmiles(coreSmiles, fragments, OCL, options = {}) {\n    const { complexity = false } = options;\n    const core = getCore(coreSmiles);\n    const rGroups = getRGroups(core, fragments);\n    if (complexity) {\n        return getComplexity(rGroups);\n    }\n    return generate(core, rGroups, OCL, options);\n}\nfunction getComplexity(rGroups) {\n    let complexity = 1;\n    for (const rGroup of rGroups) {\n        complexity *= rGroup.smiles.length;\n    }\n    return complexity;\n}\nasync function generate(core, rGroups, OCL, options = {}) {\n    const { onStep } = options;\n    const molecules = {};\n    const sizes = new Array(rGroups.length);\n    const currents = new Array(rGroups.length);\n    for (let i = 0; i < rGroups.length; i++) {\n        sizes[i] = rGroups[i].smiles.length - 1;\n        currents[i] = 0;\n    }\n    let position = 0;\n    let counter = 0;\n    while (true) {\n        counter++;\n        while (position < currents.length) {\n            if (currents[position] < sizes[position]) {\n                if (onStep) {\n                    // eslint-disable-next-line no-await-in-loop\n                    await onStep(counter);\n                }\n                appendMolecule(molecules, core, rGroups, currents, OCL);\n                currents[position]++;\n                for (let i = 0; i < position; i++) {\n                    currents[i] = 0;\n                }\n                position = 0;\n            }\n            else {\n                position++;\n            }\n        }\n        if ((position = currents.length)) {\n            if (onStep) {\n                // eslint-disable-next-line no-await-in-loop\n                await onStep(counter);\n            }\n            appendMolecule(molecules, core, rGroups, currents, OCL);\n            break;\n        }\n    }\n    const mols = Object.values(molecules);\n    mols.sort((m1, m2) => m1.mw - m2.mw);\n    return mols;\n}\nfunction appendMolecule(molecules, core, rGroups, currents, OCL) {\n    let newSmiles = core.smiles;\n    for (let i = 0; i < currents.length; i++) {\n        newSmiles += `.${rGroups[i].smiles[currents[i]]}`;\n    }\n    const currentMol = OCL.Molecule.fromSmiles(newSmiles);\n    const idCode = currentMol.getIDCode();\n    if (!molecules[idCode]) {\n        const molecule = {};\n        molecules[idCode] = molecule;\n        molecule.smiles = currentMol.toSmiles();\n        molecule.combinedSmiles = newSmiles;\n        molecule.idCode = idCode;\n        molecule.molfile = currentMol.toMolfile();\n        const props = new OCL.MoleculeProperties(currentMol);\n        molecule.nbHAcceptor = props.acceptorCount;\n        molecule.nbHDonor = props.donorCount;\n        molecule.logP = props.logP;\n        molecule.logS = props.logS;\n        molecule.PSA = props.polarSurfaceArea;\n        molecule.nbRottable = props.rotatableBondCount;\n        molecule.nbStereoCenter = props.stereoCenterCount;\n        const mf = currentMol.getMolecularFormula();\n        molecule.mf = mf.formula;\n        molecule.mw = mf.relativeWeight;\n    }\n}\nfunction getCore(coreSmiles) {\n    const core = {\n        originalSmiles: coreSmiles,\n        smiles: updateRPosition(coreSmiles).replaceAll(/\\[R(?<group>[1-4])]/g, '%5$<group>'),\n    };\n    for (let i = 0; i < MAX_R; i++) {\n        if (core.originalSmiles.includes(`[R${i}]`))\n            core[`R${i}`] = true;\n    }\n    return core;\n}\nfunction getRGroups(core, fragments) {\n    const rGroups = {};\n    for (const fragment of fragments) {\n        if (fragment.smiles) {\n            const smiles = updateRPosition(fragment.smiles);\n            for (let i = 0; i < MAX_R; i++) {\n                if (core[`R${i}`] && // we only consider the R that are in the core\n                    fragment[`R${i}`]) {\n                    if (!rGroups[`R${i}`]) {\n                        rGroups[`R${i}`] = {\n                            group: `R${i}`,\n                            smiles: [],\n                        };\n                    }\n                    rGroups[`R${i}`].smiles.push(smiles.replace(/\\[R]/, `(%5${i})`));\n                }\n            }\n        }\n    }\n    return Object.keys(rGroups).map((key) => rGroups[key]);\n}\n/**\n * Repositions an R-group marker when it appears at the beginning of a SMILES string.\n * R-group markers (`[R]`, `[R1]`, `[R2]`, ..., `[R9]`) at position 0 are not valid in\n * SMILES notation, so this function moves them after the first atom at the top level\n * of the molecular graph.\n * @param {string} smiles - SMILES string potentially starting with an R-group marker\n * @returns {string} SMILES string with the R-group marker repositioned if needed\n */\nfunction updateRPosition(smiles) {\n    // Match R group at the beginning: [R], [R1], [R2], ..., [R9]\n    const match = smiles.match(/^\\[R\\d?]/);\n    if (!match)\n        return smiles;\n    const rGroup = match[0];\n    if (smiles.length === rGroup.length)\n        return `[H]${rGroup}`;\n    // we are in trouble ... we need to move the R\n    const newSmiles = smiles.slice(rGroup.length);\n    // we need to check where we should put the R group\n    let level = 0;\n    for (let j = 0; j < newSmiles.length; j++) {\n        const currentChar = newSmiles.charAt(j);\n        const currentSubstring = newSmiles.slice(j);\n        if (currentChar === '(') {\n            level++;\n        }\n        else if (currentChar === ')') {\n            level--;\n        }\n        else if (level === 0) {\n            if (currentSubstring.match(/^[a-z]/)) {\n                return `${newSmiles.slice(0, Math.max(0, j + 1))}(${rGroup})${newSmiles.slice(j + 1)}`;\n            }\n            else if (currentSubstring.match(/^[A-Z][a-z]/)) {\n                return `${newSmiles.slice(0, Math.max(0, j + 2))}(${rGroup})${newSmiles.slice(j + 2)}`;\n            }\n            else if (currentSubstring.match(/^[A-Z]/)) {\n                return `${newSmiles.slice(0, Math.max(0, j + 1))}(${rGroup})${newSmiles.slice(j + 1)}`;\n            }\n        }\n    }\n    return smiles;\n}\n//# sourceMappingURL=combineSmiles.js.map","/**\n * Converts a string to camel case.\n * @param {string} name\n * @returns {string}\n */\nexport function getCamelCase(name) {\n    return name.replaceAll(/[ -][a-z]/g, (string) => string[1].toUpperCase());\n}\n//# sourceMappingURL=getCamelCase.js.map","export function parseColumnbProperties(lines) {\n    lines = lines.map((line) => {\n        const [key, value] = line.slice(1, -1).split('=');\n        return { key, value: value.slice(1, -1) };\n    });\n    const columnProperties = {};\n    let currentColumnName = '';\n    for (const line of lines) {\n        switch (line.key) {\n            case 'columnName':\n                currentColumnName = line.value;\n                columnProperties[currentColumnName] = {};\n                break;\n            case 'columnProperty':\n                {\n                    if (!currentColumnName) {\n                        throw new Error('This should not happen');\n                    }\n                    const [key, value] = line.value.split('\\t');\n                    columnProperties[currentColumnName][key] = value;\n                }\n                break;\n            default:\n                throw new Error('This should not happen');\n        }\n    }\n    for (const key in columnProperties) {\n        const columnPropery = columnProperties[key];\n        if (columnProperties[key].parent) {\n            const target = columnProperties[columnPropery.parent];\n            if (!target) {\n                throw new Error('Parent column not found');\n            }\n            if (!target.related) {\n                target.related = {};\n            }\n            target.related[columnPropery.specialType] = key;\n        }\n    }\n    return columnProperties;\n}\n//# sourceMappingURL=parseColumnbProperties.js.map","export function parseData(lines, options = {}) {\n    lines = lines.filter((line) => !line.match(/^\\s*$/));\n    const { columnProperties = {} } = options;\n    const headers = lines\n        .shift()\n        .split('\\t')\n        .map((header) => {\n        if (columnProperties[header]) {\n            return { label: header, ...columnProperties[header] };\n        }\n        return { label: header };\n    });\n    const entries = [];\n    const rawEntries = [];\n    for (const line of lines) {\n        const fields = line.split('\\t');\n        const rawEntry = {};\n        for (const [index, header] of headers.entries()) {\n            rawEntry[header.label] = fields[index];\n        }\n        rawEntries.push(rawEntry);\n        const entry = {};\n        for (const header of headers) {\n            if (header.parent)\n                continue;\n            entry[header.label] = valueEhnhancer(header, rawEntry);\n        }\n        entries.push(entry);\n    }\n    return { entries, rawEntries };\n}\nfunction valueEhnhancer(header, rawEntry) {\n    if (header?.specialType === 'rxncode') {\n        return `${rawEntry[header.label]}#${rawEntry[header.related.atomMapping]}#${rawEntry[header.related.idcoordinates2D]}`;\n    }\n    return rawEntry[header.label];\n}\n/*\nentry.rxnCode =\n*/\n//# sourceMappingURL=parseData.js.map","import { ensureString } from 'ensure-string';\nimport { getParts } from './utils/getParts.js';\nimport { parseColumnbProperties } from './utils/parseColumnbProperties.js';\nimport { parseData } from './utils/parseData.js';\n/**\n * Convert a DataWarrior database into a JSON object\n * @param {string} text\n * @returns\n */\nexport function parseDwar(text) {\n    text = ensureString(text);\n    const parts = getParts(text);\n    improveParts(parts);\n    return parts;\n}\nfunction improveParts(parts) {\n    for (const key in parts) {\n        switch (key) {\n            case 'columnProperties':\n                parts[key] = parseColumnbProperties(parts[key]);\n                break;\n            case 'data':\n                break;\n            default:\n                parts[key] = parseDefault(parts[key]);\n        }\n    }\n    const data = parseData(parts.data, {\n        columnProperties: parts.columnProperties,\n    });\n    parts.data = data.entries;\n    parts.rawData = data.rawEntries;\n}\nfunction parseDefault(lines) {\n    const result = {};\n    for (const line of lines) {\n        const [key, value] = line.slice(1, -1).split('=');\n        result[key] = value.slice(1, -1);\n    }\n    return result;\n}\n//# sourceMappingURL=parseDwar.js.map","import { getDiastereotopicAtomIDs } from '../diastereotopic/getDiastereotopicAtomIDs.js';\n/**\n * Returns various information about atoms in the molecule\n * @param {import('openchemlib').Molecule} [molecule]\n */\nexport function getAtomsInfo(molecule) {\n    const OCL = molecule.getOCL();\n    molecule.ensureHelperArrays(OCL.Molecule.cHelperRings);\n    const diaIDs = getDiastereotopicAtomIDs(molecule);\n    const results = [];\n    for (let i = 0; i < diaIDs.length; i++) {\n        const result = {\n            oclID: diaIDs[i],\n            extra: {\n                singleBonds: 0,\n                doubleBonds: 0,\n                tripleBonds: 0,\n                aromaticBonds: 0,\n                cnoHybridation: 0, // should be 1 (sp), 2 (sp2) or 3 (sp3)\n            },\n        };\n        const extra = result.extra;\n        results.push(result);\n        result.abnormalValence = molecule.getAtomAbnormalValence(i); // -1 is normal otherwise specified\n        result.charge = molecule.getAtomCharge(i);\n        result.cipParity = molecule.getAtomCIPParity(i);\n        result.color = molecule.getAtomColor(i);\n        result.customLabel = molecule.getAtomCustomLabel(i);\n        //        result.esrGroup=molecule.getAtomESRGroup(i);\n        //        result.esrType=molecule.getAtomESRType(i);\n        result.atomicNo = molecule.getAtomicNo(i);\n        result.label = molecule.getAtomLabel(i);\n        //        result.list=molecule.getAtomList(i);\n        //        result.listString=molecule.getAtomListString(i);\n        //        result.mapNo=molecule.getAtomMapNo(i);\n        result.mass = molecule.getAtomMass(i);\n        //        result.parity=molecule.getAtomParity(i);\n        //        result.pi=molecule.getAtomPi(i);\n        //        result.preferredStereoBond=molecule.getAtomPreferredStereoBond(i);\n        //        result.queryFeatures=molecule.getAtomQueryFeatures(i);\n        result.radical = molecule.getAtomRadical(i);\n        result.ringBondCount = molecule.getAtomRingBondCount(i);\n        //        result.ringCount=molecule.getAtomRingCount(i);\n        result.ringSize = molecule.getAtomRingSize(i);\n        result.x = molecule.getAtomX(i);\n        result.y = molecule.getAtomY(i);\n        result.z = molecule.getAtomZ(i);\n        result.allHydrogens = molecule.getAllHydrogens(i);\n        result.connAtoms = molecule.getConnAtoms(i);\n        result.allConnAtoms = molecule.getAllConnAtoms(i);\n        result.implicitHydrogens =\n            result.allHydrogens + result.connAtoms - result.allConnAtoms;\n        result.isAromatic = molecule.isAromaticAtom(i);\n        result.isAllylic = molecule.isAllylicAtom(i);\n        result.isStereoCenter = molecule.isAtomStereoCenter(i);\n        result.isRing = molecule.isRingAtom(i);\n        result.isSmallRing = molecule.isSmallRingAtom(i);\n        result.isStabilized = molecule.isStabilizedAtom(i);\n        // todo HACK to circumvent bug in OCL that consider than an hydrogen is connected to itself\n        result.extra.singleBonds =\n            result.atomicNo === 1 ? 0 : result.implicitHydrogens;\n        for (let j = 0; j < molecule.getAllConnAtoms(i); j++) {\n            const bond = molecule.getConnBond(i, j);\n            const bondOrder = molecule.getBondOrder(bond);\n            if (molecule.isAromaticBond(bond)) {\n                extra.aromaticBonds++;\n            }\n            else if (bondOrder === 1) {\n                // not an hydrogen\n                extra.singleBonds++;\n            }\n            else if (bondOrder === 2) {\n                extra.doubleBonds++;\n            }\n            else if (bondOrder === 3) {\n                extra.tripleBonds++;\n            }\n        }\n        result.extra.totalBonds =\n            result.extra.singleBonds +\n                result.extra.doubleBonds +\n                result.extra.tripleBonds +\n                result.extra.aromaticBonds;\n        if (result.atomicNo === 6) {\n            result.extra.cnoHybridation = result.extra.totalBonds - 1;\n        }\n        else if (result.atomicNo === 7) {\n            result.extra.cnoHybridation = result.extra.totalBonds;\n        }\n        else if (result.atomicNo === 8) {\n            result.extra.cnoHybridation = result.extra.totalBonds + 1;\n        }\n        else if (result.atomicNo === 1) {\n            const connectedAtom = molecule.getAllConnAtoms(i) === 0\n                ? 0\n                : molecule.getAtomicNo(molecule.getConnAtom(i, 0));\n            result.extra.hydrogenOnAtomicNo = connectedAtom;\n            if (connectedAtom === 7 || connectedAtom === 8) {\n                result.extra.labileHydrogen = true;\n            }\n        }\n    }\n    return results;\n}\n//# sourceMappingURL=getAtomsInfo.js.map","import { atomSorter } from 'atom-sorter';\n/**\n * Calculate the molecular formula in 'chemcalc' notation taking into account fragments, isotopes and charges\n * @param {import('openchemlib').Molecule} molecule - an instance of OCL.Molecule\n * @returns {object}\n */\nexport function getMF(molecule) {\n    const entries = molecule.getFragments();\n    const result = {};\n    let parts = [];\n    const allAtoms = [];\n    for (const entry of entries) {\n        const mf = getFragmentMF(entry, allAtoms);\n        parts.push(mf);\n    }\n    const counts = {};\n    for (const part of parts) {\n        if (!counts[part])\n            counts[part] = 0;\n        counts[part]++;\n    }\n    parts = [];\n    const sortedKeys = Object.keys(counts);\n    sortedKeys.sort();\n    for (const key of sortedKeys) {\n        if (counts[key] > 1) {\n            parts.push(counts[key] + key);\n        }\n        else {\n            parts.push(key);\n        }\n    }\n    result.parts = parts;\n    result.mf = toMFString(allAtoms);\n    return result;\n}\nfunction getFragmentMF(molecule, allAtoms) {\n    const atoms = [];\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        const atom = {\n            charge: molecule.getAtomCharge(i),\n            label: molecule.getAtomLabel(i),\n            mass: molecule.getAtomMass(i),\n            implicitHydrogens: molecule.getImplicitHydrogens(i),\n        };\n        if (atom.label === '?')\n            atom.label = 'R';\n        atoms.push(atom);\n        allAtoms.push(atom);\n    }\n    return toMFString(atoms);\n}\nfunction toMFString(atoms) {\n    let charge = 0;\n    const mfs = {};\n    for (const atom of atoms) {\n        let label = atom.label;\n        charge += atom.charge;\n        if (atom.mass) {\n            label = `[${atom.mass}${label}]`;\n        }\n        const mfAtom = mfs[label];\n        if (!mfAtom) {\n            mfs[label] = 0;\n        }\n        mfs[label] += 1;\n        if (atom.implicitHydrogens) {\n            if (!mfs.H)\n                mfs.H = 0;\n            mfs.H += atom.implicitHydrogens;\n        }\n    }\n    let mf = '';\n    const keys = Object.keys(mfs);\n    keys.sort(atomSorter);\n    for (const key of keys) {\n        mf += key;\n        if (mfs[key] > 1)\n            mf += mfs[key];\n    }\n    if (charge > 0) {\n        mf += `(+${charge > 1 ? charge : ''})`;\n    }\n    else if (charge < 0) {\n        mf += `(${charge < -1 ? charge : '-'})`;\n    }\n    return mf;\n}\n//# sourceMappingURL=getMF.js.map","const unsaturationsObject = {\n    O: 0,\n    N: 1,\n    H: -1,\n    C: 2,\n    F: -1,\n    Si: 2,\n    Cl: -1,\n    Br: -1,\n    I: -1,\n};\n/**\n * Simplified version of the calculation in mf-parser\n * @param mf\n * @returns\n */\nexport function getUnsaturation(mf) {\n    // split a molecular formula into its elements\n    const elements = mf.match(/[A-Z][a-z]*\\d*/g);\n    if (!elements || elements.length === 0)\n        return undefined;\n    let unsaturation = 0;\n    for (const element of elements) {\n        const matches = element.match(/([A-Z][a-z]?)(\\d*)/);\n        const symbol = matches[1];\n        const count = matches[2] ? Number.parseInt(matches[2], 10) : 1;\n        const elementObject = unsaturationsObject[symbol];\n        if (elementObject === undefined) {\n            return undefined;\n        }\n        unsaturation += elementObject * count;\n    }\n    return unsaturation / 2 + 1;\n}\n//# sourceMappingURL=getUnsaturation.js.map","// this page allows to debug the hints: https://my.cheminfo.org/?viewURL=https%3A%2F%2Fmyviews.cheminfo.org%2Fdb%2Fvisualizer%2Fentry%2F108024089da99d0cb70a57724486d0c6%2Fview.json\nimport { TopicMolecule } from \"../topic/TopicMolecule.js\";\nimport { getUnsaturation } from \"./getUnsaturation.js\";\nconst defaultPossibleHints = [\n    {\n        idCode: String.raw `eF@Hp\\pcc`,\n        message: 'What about a non-aromatic ring?',\n    },\n    {\n        idCode: 'eF@HpZpk|X`',\n        message: 'You should consider an aromatic ring.',\n    },\n    {\n        idCode: 'gFp@DiTt@@B',\n        message: 'Did you think about benzene derivatives?',\n    },\n    {\n        idCode: 'eFHBLFLYpB@QVE_cD',\n        message: 'An aromatic cycle can be an heterocycle.',\n    },\n    {\n        idCode: 'eMHJN`q[N@PBGN@PBJhjU~JU@',\n        anyMatches: ['gFx@@eJf`@@P', 'gKP@Di\\\\YZ@qas`D@`'],\n        message: 'There could be more than one heteroatom in an aromatic cycle.',\n    },\n    {\n        idCode: 'gFp@DiTvjhCYbKFuXUEIVTUUWxlTeZMX',\n        anyMatches: ['gKP@Di\\\\Zj@vhbqkPjJRlhj?FbdkQ`'],\n        message: 'Aromatic cycles can have 5 or 6 atoms.',\n        remarks: 'Proposed 5 and it is 6',\n    },\n    {\n        idCode: 'gKP@Di\\\\Zj@vhbqkPjJRlhj?FbdkQ`',\n        anyMatches: ['gFp@DiTvjhCYbKFuXUEIVTUUWxlTeZMX'],\n        message: 'Aromatic cycles can have 5 or 6 atoms.',\n        remarks: 'Proposed 6 and it is 5',\n    },\n    {\n        idCode: 'gFx@@eJf`@@P',\n        message: 'Did you think about pyridine derivatives?',\n    },\n    {\n        idCode: 'gNp@LdbLjj@vdrpqSdm_qhXiKT',\n        message: 'I would consider bicyclo products.',\n        remarks: 'One atom bridge',\n    },\n    {\n        idCode: 'eFHBJD',\n        message: 'Adding a carbonyl could help.',\n    },\n    {\n        idCode: 'eMHAIhMi}EqfFBmN?vP',\n        message: 'You should consider an alcohol.',\n    },\n    {\n        idCode: 'eMB@HRZCBKSFXXJt{?Y@',\n        message: 'You should consider a thiol.',\n    },\n    {\n        idCode: 'gJQ@@eKU@[KFJtLAa`sAUR]g_zlP',\n        message: 'You should consider an ether.',\n    },\n    {\n        idCode: 'gJQ@@eKU@[KFJtLAa`r`q?EAcuX`',\n        anyMatches: ['gJQ@@eKU@[KFJtLAa`?uX`'],\n        message: 'An ether can be in a cycle.',\n    },\n    {\n        idCode: 'gJPH@DIRuPFrqbmC@XXLpUTgYw~kD',\n        message: 'You should consider a thioether.',\n    },\n    {\n        idCode: 'gJPH@DIRuPFrqbmC@XXLhL_qPX}VH',\n        anyMatches: ['gJPH@DIRuPFrqbmC@XXO}VH'],\n        message: 'A thioether can be in a cycle.',\n    },\n    {\n        idCode: 'eM`AIhLHmLYa`kSo}d',\n        message: 'You should consider a primary amine.',\n        remarks: 'primary',\n    },\n    {\n        idCode: 'gJX@@eKU@XPVVLUhXCCAUIv]?jq@',\n        message: 'You should consider a secondary amine.',\n        remarks: 'secondary',\n    },\n    {\n        idCode: 'gNx@@eRmUPFDElZxxppVFAppUv\\\\WUw~xu`',\n        message: 'You should consider a tertiary amine.',\n        remarks: 'tertiary',\n    },\n    {\n        idCode: 'gJX@@eKU@XPVVLUhXCCAeAcUIv]~JCGjq@',\n        anyMatches: ['gJX@@eKU@XPVVLUhXCCAfBjd{N?uX`'],\n        message: 'A secondary amine can be in a cycle.',\n        remarks: 'secondary cyclic amine',\n    },\n    {\n        idCode: 'gNx@@eRmUPFDElZxxppVFAppYPXuv\\\\WUwxhL^xu`',\n        anyMatches: ['gNx@@eRmUPFDElZxxppVFAppY`j{NKj{?\\\\Zp'],\n        message: 'A tertiary amine can be in a cycle.',\n        remarks: 'tertiary cyclic amine',\n    },\n    {\n        idCode: 'gGP`@df]j`MekEZFBppUa]?ju@',\n        message: 'What about an ester?',\n    },\n    {\n        idCode: 'gGP`@df]j`MekEZFBppYdZpn?FQzmP',\n        anyMatches: ['gGP`@df]j`MekEZFBppUa]?ju@'],\n        message: 'An ester can be in a cycle.',\n    },\n    {\n        idCode: 'gGY@DDf]j`MekEZFBppUa]?ju@',\n        message: 'There is an amide function in the molecule.',\n    },\n    {\n        idCode: 'gGY@DDf]j`MekEZFBppYdZpn?FQzmP',\n        anyMatches: ['gGY@DDf]j`MekEZFBppUa]?ju@@'],\n        message: 'An amide can be in a cycle.',\n    },\n    {\n        idCode: 'gCi@DDfZ@~btl',\n        message: 'There is a primary amide in the molecule.',\n    },\n    {\n        idCode: 'gC``@dfZ@~bl',\n        message: 'You should think about carboxylic acids. The OH signal may be very wide.',\n    },\n    {\n        idCode: String.raw `eF@Hh\\q@`,\n        message: 'What about having an olefin?',\n    },\n    {\n        idCode: 'gFp@DiTt@@CqC^LmV[m`',\n        anyMatches: ['gFp@DiTt@@CBqXwd@'],\n        message: 'Did you think about disubstituted aromatic rings?',\n        remarks: 'meta',\n    },\n    {\n        idCode: 'gFp@DiTt@@CqB~LmWkM`',\n        anyMatches: ['gFp@DiTt@@CBqXwd@'],\n        message: 'Did you think about disubstituted aromatic rings?',\n        remarks: 'para',\n    },\n    {\n        idCode: 'gFp@DiTt@@CqB^JoV[m',\n        anyMatches: ['gFp@DiTt@@CBqXwd@'],\n        message: 'Did you think about disubstituted aromatic rings?',\n        remarks: 'ortho',\n    },\n    {\n        idCode: 'gFp@DiTt@@CqB^JoV[m',\n        anyMatches: ['gFp@DiTt@@CqC^LmV[m`', 'gFp@DiTt@@CqB~LmWkM`'],\n        message: 'Disubstituted aromatic ring can be ortho (1,2), meta (1,3) or para (1,4).',\n        remarks: 'ortho',\n    },\n    {\n        idCode: 'gFp@DiTt@@CqC^LmV[m`',\n        anyMatches: ['gFp@DiTt@@CqB^JoV[m', 'gFp@DiTt@@CqB~LmWkM`'],\n        message: 'Disubstituted aromatic ring can be ortho (1,2), meta (1,3) or para (1,4).',\n        remarks: 'meta',\n    },\n    {\n        idCode: 'gFp@DiTt@@CqB~LmWkM`',\n        anyMatches: ['gFp@DiTt@@CqC^LmV[m`', 'gFp@DiTt@@CqB^JoV[m'],\n        message: 'Disubstituted aromatic ring can be ortho (1,2), meta (1,3) or para (1,4).',\n        remarks: 'para',\n    },\n    {\n        idCode: 'gGP`@df]j`H',\n        anyMatches: ['gGP`@dfUj`H'],\n        message: 'You should check the orientation of the ester.',\n    },\n    {\n        idCode: String.raw `gOq@@drm\\@@Aa@`,\n        message: 'Alcohols on aromatic ring may have surprising chemical shifts.',\n    },\n    {\n        idCode: String.raw `gOx@@drm\\@@A}A@`,\n        message: 'NH on aromatic ring may have surprising chemical shifts.',\n    },\n    {\n        idCode: 'eFHBJGuP',\n        message: 'Hydrogens on a carbonyl have very high chemical shifts.',\n    },\n];\n/**\n *\n * @param correct\n * @param proposed\n * @param options\n * @returns\n */\nexport function getNMRHints(correct, proposed, options = {}) {\n    const hints = [\n        ...checkMF(correct, proposed),\n        ...checkUnsaturation(correct, proposed),\n        ...checkStereoAndTautomer(correct, proposed),\n    ];\n    const { possibleHints = defaultPossibleHints } = options;\n    const OCL = correct.getOCL();\n    const searcherCorrect = new OCL.SSSearcher();\n    searcherCorrect.setMolecule(correct);\n    const searcherAnswer = new OCL.SSSearcher();\n    searcherAnswer.setMolecule(proposed);\n    for (const possibleHint of possibleHints) {\n        const { anyMatches } = possibleHint;\n        if (anyMatches) {\n            // we filter the molecules so they match at least one of the anyMatches\n            let match = false;\n            for (const anyMatch of anyMatches) {\n                const matchFragment = OCL.Molecule.fromIDCode(anyMatch);\n                searcherAnswer.setFragment(matchFragment);\n                if (searcherAnswer.isFragmentInMolecule()) {\n                    match = true;\n                    break;\n                }\n            }\n            if (!match)\n                continue;\n        }\n        const fragment = OCL.Molecule.fromIDCode(possibleHint.idCode);\n        searcherCorrect.setFragment(fragment);\n        searcherAnswer.setFragment(fragment);\n        if (searcherCorrect.isFragmentInMolecule() &&\n            !searcherAnswer.isFragmentInMolecule()) {\n            hints.push(possibleHint);\n        }\n    }\n    // we suggest symmetry only if MF is correct\n    if (isMFCorrect(correct, proposed)) {\n        hints.push(...checkSymmetry(correct, proposed));\n    }\n    return hints.map((hint) => ({\n        ...hint,\n        hash: getHash(JSON.stringify(hint)),\n    }));\n}\nfunction isMFCorrect(correct, answer) {\n    const mfCorrect = correct.getMolecularFormula().formula;\n    const mfAnswer = answer.getMolecularFormula().formula;\n    return mfCorrect === mfAnswer;\n}\nfunction checkMF(correct, answer) {\n    if (isMFCorrect(correct, answer))\n        return [];\n    return [\n        {\n            message: 'You should check the molecular formula.',\n        },\n    ];\n}\nfunction checkUnsaturation(correct, answer) {\n    const mfCorrect = correct.getMolecularFormula().formula;\n    const mfAnswer = answer.getMolecularFormula().formula;\n    if (mfCorrect !== mfAnswer) {\n        const unsaturationCorrect = getUnsaturation(mfCorrect);\n        const unsaturationAnswer = getUnsaturation(mfAnswer);\n        if (unsaturationCorrect === unsaturationAnswer ||\n            unsaturationAnswer === undefined ||\n            unsaturationCorrect === undefined) {\n            return [];\n        }\n        if (unsaturationCorrect > unsaturationAnswer) {\n            return [\n                {\n                    message: 'The proposed molecule has a double bond equivalent (DBE) that is too low.',\n                },\n            ];\n        }\n        else {\n            return [\n                {\n                    message: 'The proposed molecule has a double bond equivalent (DBE) that is too high.',\n                },\n            ];\n        }\n    }\n    return [];\n}\nfunction checkStereoAndTautomer(correct, answer) {\n    if (correct.getIDCode() === answer.getIDCode())\n        return [];\n    if (getNoStereoIDCode(correct) === getNoStereoIDCode(answer)) {\n        return [\n            {\n                message: 'There is only a problem with stereochemistry.',\n            },\n        ];\n    }\n    if (getTautomerIDCode(correct) === getTautomerIDCode(answer)) {\n        return [\n            {\n                message: \"Weird, you didn't draw the expected tautomer.\",\n            },\n        ];\n    }\n    return [];\n}\nfunction checkSymmetry(correct, answer) {\n    const nbCorrectRanks = Object.keys(new TopicMolecule(correct).getDiaIDsObject()).length;\n    const nbAnswerRanks = Object.keys(new TopicMolecule(answer).getDiaIDsObject()).length;\n    if (nbCorrectRanks === nbAnswerRanks)\n        return [];\n    if (nbCorrectRanks > nbAnswerRanks) {\n        return [\n            {\n                message: 'The proposed molecule is too symmetric.',\n            },\n        ];\n    }\n    else {\n        return [\n            {\n                message: 'The proposed molecule is not symmetric enough.',\n            },\n        ];\n    }\n}\nfunction getTautomerIDCode(molecule) {\n    const OCL = molecule.getOCL();\n    return OCL.CanonizerUtil.getIDCode(molecule, OCL.CanonizerUtil.TAUTOMER);\n}\nfunction getNoStereoIDCode(molecule) {\n    const OCL = molecule.getOCL();\n    return OCL.CanonizerUtil.getIDCode(molecule, OCL.CanonizerUtil.NOSTEREO);\n}\n/*\n    https://github.com/bryc/code/blob/master/jshash/experimental/cyrb53.js\n    cyrb53a (c) 2023 bryc (github.com/bryc)\n    License: Public domain. Attribution appreciated.\n    The original cyrb53 has a slight mixing bias in the low bits of h1.\n    This shouldn't be a huge problem, but I want to try to improve it.\n    This new version should have improved avalanche behavior, but\n    it is not quite final, I may still find improvements.\n    So don't expect it to always produce the same output.\n*/\nfunction getHash(str, seed = 0) {\n    let h1 = 0xdeadbeef ^ seed;\n    let h2 = 0x41c6ce57 ^ seed;\n    for (let i = 0, ch; i < str.length; i++) {\n        ch = str.codePointAt(i);\n        h1 = Math.imul(h1 ^ ch, 0x85ebca77);\n        h2 = Math.imul(h2 ^ ch, 0xc2b2ae3d);\n    }\n    h1 ^= Math.imul(h1 ^ (h2 >>> 15), 0x735a2d97);\n    h2 ^= Math.imul(h2 ^ (h1 >>> 15), 0xcaf649a9);\n    h1 ^= h2 >>> 16;\n    h2 ^= h1 >>> 16;\n    return 2097152 * (h2 >>> 0) + (h1 >>> 11);\n}\n//# sourceMappingURL=getNMRHints.js.map","let toxicityPredictor;\nlet druglikenessPredictor;\n/**\n *\n * @param {import('openchemlib').Molecule} molecule\n * @param {object} [options={}]\n * @param {boolean} [options.includeToxicities=false]\n * @param {boolean} [options.includeDruglikeness=false]\n */\nexport function getProperties(molecule, options = {}) {\n    const { includeToxicities = false, includeDruglikeness = false } = options;\n    const OCL = molecule.getOCL();\n    if (!OCL.MoleculeProperties) {\n        throw new Error('OCL.MoleculeProperties is not defined');\n    }\n    const props = new OCL.MoleculeProperties(molecule);\n    const moleculeFormula = molecule.getMolecularFormula();\n    const result = {\n        acceptorCount: props.acceptorCount,\n        donorCount: props.donorCount,\n        logP: props.logP,\n        logS: props.logS,\n        polarSurfaceArea: props.polarSurfaceArea,\n        rotatableBondCount: props.rotatableBondCount,\n        stereoCenterCount: props.stereoCenterCount,\n        mw: moleculeFormula.relativeWeight,\n        mf: moleculeFormula.formula,\n    };\n    if (includeToxicities) {\n        const { ToxicityPredictor } = molecule.getOCL();\n        if (!ToxicityPredictor) {\n            throw new Error('OCL.ToxicityPredictor is not defined');\n        }\n        if (!toxicityPredictor) {\n            toxicityPredictor = new ToxicityPredictor();\n        }\n        result.mutagenic = toxicityPredictor.assessRisk(molecule, ToxicityPredictor.TYPE_MUTAGENIC);\n        result.tumorigenic = toxicityPredictor.assessRisk(molecule, ToxicityPredictor.TYPE_TUMORIGENIC);\n        result.irritant = toxicityPredictor.assessRisk(molecule, ToxicityPredictor.TYPE_IRRITANT);\n        result.reproductiveEffective = toxicityPredictor.assessRisk(molecule, ToxicityPredictor.TYPE_REPRODUCTIVE_EFFECTIVE);\n    }\n    if (includeDruglikeness) {\n        const { DruglikenessPredictor } = molecule.getOCL();\n        if (!DruglikenessPredictor) {\n            throw new Error('OCL.DruglikenessPredictor is not defined');\n        }\n        if (!druglikenessPredictor) {\n            druglikenessPredictor = new DruglikenessPredictor();\n        }\n        result.drugLikeness = druglikenessPredictor.assessDruglikeness(molecule);\n    }\n    if (result.drugLikeness !== undefined && result.mutagenic !== undefined) {\n        result.drugScore = OCL.DrugScoreCalculator.calculate(result.logP, result.polarSurfaceArea, result.mw, result.drugLikeness, [\n            result.mutagenic,\n            result.tumurogenic,\n            result.irritant,\n            result.reproductiveEffective,\n        ]);\n    }\n    return result;\n}\n//# sourceMappingURL=getProperties.js.map","import { getHoseCodesForPath } from '../hose/getHoseCodesForPath.js';\nimport { getAtomsInfo } from '../util/getAtomsInfo.js';\nimport { getConnectivityMatrix } from '../util/getConnectivityMatrix.js';\nimport { getPathAndTorsion } from './getPathAndTorsion.js';\nlet fragment;\n/**\n *\n * @param {import('openchemlib').Molecule} molecule\n * @param {object} [options={}]\n * @param {string} [options.fromLabel='H']\n * @param {string} [options.toLabel='H']\n * @param {number} [options.minLength=1]\n * @param {number} [options.maxLength=4]\n * @param {boolean} [options.withHOSES=false]\n */\nexport function getPathsInfo(molecule, options = {}) {\n    const { fromLabel = 'H', toLabel = 'H', minLength = 1, maxLength = 4, withHOSES = false, } = options;\n    const OCL = molecule.getOCL();\n    if (!fragment) {\n        fragment = new OCL.Molecule(0, 0);\n    }\n    const fromAtomicNumber = OCL.Molecule.getAtomicNoFromLabel(fromLabel);\n    const toAtomicNumber = OCL.Molecule.getAtomicNoFromLabel(toLabel);\n    // we need to find all the atoms 'fromLabel' and 'toLabel'\n    const atomsInfo = getAtomsInfo(molecule);\n    const pathLengthMatrix = getConnectivityMatrix(molecule, {\n        pathLength: true,\n    });\n    for (let from = 0; from < molecule.getAllAtoms(); from++) {\n        atomsInfo[from].paths = [];\n        for (let to = 0; to < molecule.getAllAtoms(); to++) {\n            if (from !== to &&\n                molecule.getAtomicNo(from) === fromAtomicNumber &&\n                molecule.getAtomicNo(to) === toAtomicNumber) {\n                const pathLength = pathLengthMatrix[from][to];\n                if (pathLength >= minLength && pathLength <= maxLength) {\n                    if (withHOSES) {\n                        atomsInfo[from].paths.push(getHoseCodesForPath(molecule, from, to, pathLength));\n                    }\n                    else {\n                        atomsInfo[from].paths.push(getPathAndTorsion(molecule, from, to, pathLength));\n                    }\n                }\n            }\n        }\n    }\n    return atomsInfo;\n}\n//# sourceMappingURL=getPathsInfo.js.map","/**\n * Calculate the molecular formula in 'chemcalc' notation taking into account fragments, isotopes and charges\n * @param {OCL.Molecule} [molecule] - an instance of OCL.Molecule\n * @returns {}\n */\nexport function getAtoms(molecule) {\n    const entries = molecule.getFragments();\n    const atoms = {};\n    const result = { atoms, parts: [] };\n    for (const entry of entries) {\n        const part = {};\n        result.parts.push(part);\n        appendAtomPart(entry, atoms, part);\n    }\n    return result;\n}\nfunction appendAtomPart(molecule, atoms, part) {\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        const label = molecule.getAtomLabel(i);\n        if (!atoms[label]) {\n            atoms[label] = 0;\n        }\n        atoms[label] += 1;\n        if (!part[label]) {\n            part[label] = 0;\n        }\n        part[label] += 1;\n        const implicitHydrogens = molecule.getImplicitHydrogens(i);\n        if (implicitHydrogens) {\n            if (!atoms.H) {\n                atoms.H = 0;\n            }\n            atoms.H += implicitHydrogens;\n            if (!part.H) {\n                part.H = 0;\n            }\n            part.H += implicitHydrogens;\n        }\n    }\n}\n//# sourceMappingURL=getAtoms.js.map","/**\n * Calculates the path between 2 atoms\n * @param {import('openchemlib').Molecule} molecule\n * @param {number} from - index of the first atom\n * @param {number} to - index of the end atom\n * @param {number} maxLength - maximal length of the path\n */\nexport function getPathAndTorsion(molecule, from, to, maxLength) {\n    const originalAtoms = []; // path before renumbering\n    molecule.getPath(originalAtoms, from, to, maxLength + 1);\n    let torsion;\n    if (originalAtoms.length === 4) {\n        torsion = molecule.calculateTorsion(originalAtoms);\n    }\n    return {\n        atoms: originalAtoms,\n        from,\n        to,\n        torsion,\n        length: originalAtoms.length - 1,\n    };\n}\n//# sourceMappingURL=getPathAndTorsion.js.map","/* @license\nPapa Parse\nv5.5.3\nhttps://github.com/mholt/PapaParse\nLicense: MIT\n*/\n((e,t)=>{\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof module&&\"undefined\"!=typeof exports?module.exports=t():e.Papa=t()})(this,function r(){var n=\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:void 0!==n?n:{};var d,s=!n.document&&!!n.postMessage,a=n.IS_PAPA_WORKER||!1,o={},h=0,v={};function u(e){this._handle=null,this._finished=!1,this._completed=!1,this._halted=!1,this._input=null,this._baseIndex=0,this._partialLine=\"\",this._rowCount=0,this._start=0,this._nextChunk=null,this.isFirstChunk=!0,this._completeResults={data:[],errors:[],meta:{}},function(e){var t=b(e);t.chunkSize=parseInt(t.chunkSize),e.step||e.chunk||(t.chunkSize=null);this._handle=new i(t),(this._handle.streamer=this)._config=t}.call(this,e),this.parseChunk=function(t,e){var i=parseInt(this._config.skipFirstNLines)||0;if(this.isFirstChunk&&0<i){let e=this._config.newline;e||(r=this._config.quoteChar||'\"',e=this._handle.guessLineEndings(t,r)),t=[...t.split(e).slice(i)].join(e)}this.isFirstChunk&&U(this._config.beforeFirstChunk)&&void 0!==(r=this._config.beforeFirstChunk(t))&&(t=r),this.isFirstChunk=!1,this._halted=!1;var i=this._partialLine+t,r=(this._partialLine=\"\",this._handle.parse(i,this._baseIndex,!this._finished));if(!this._handle.paused()&&!this._handle.aborted()){t=r.meta.cursor,i=(this._finished||(this._partialLine=i.substring(t-this._baseIndex),this._baseIndex=t),r&&r.data&&(this._rowCount+=r.data.length),this._finished||this._config.preview&&this._rowCount>=this._config.preview);if(a)n.postMessage({results:r,workerId:v.WORKER_ID,finished:i});else if(U(this._config.chunk)&&!e){if(this._config.chunk(r,this._handle),this._handle.paused()||this._handle.aborted())return void(this._halted=!0);this._completeResults=r=void 0}return this._config.step||this._config.chunk||(this._completeResults.data=this._completeResults.data.concat(r.data),this._completeResults.errors=this._completeResults.errors.concat(r.errors),this._completeResults.meta=r.meta),this._completed||!i||!U(this._config.complete)||r&&r.meta.aborted||(this._config.complete(this._completeResults,this._input),this._completed=!0),i||r&&r.meta.paused||this._nextChunk(),r}this._halted=!0},this._sendError=function(e){U(this._config.error)?this._config.error(e):a&&this._config.error&&n.postMessage({workerId:v.WORKER_ID,error:e,finished:!1})}}function f(e){var r;(e=e||{}).chunkSize||(e.chunkSize=v.RemoteChunkSize),u.call(this,e),this._nextChunk=s?function(){this._readChunk(),this._chunkLoaded()}:function(){this._readChunk()},this.stream=function(e){this._input=e,this._nextChunk()},this._readChunk=function(){if(this._finished)this._chunkLoaded();else{if(r=new XMLHttpRequest,this._config.withCredentials&&(r.withCredentials=this._config.withCredentials),s||(r.onload=y(this._chunkLoaded,this),r.onerror=y(this._chunkError,this)),r.open(this._config.downloadRequestBody?\"POST\":\"GET\",this._input,!s),this._config.downloadRequestHeaders){var e,t=this._config.downloadRequestHeaders;for(e in t)r.setRequestHeader(e,t[e])}var i;this._config.chunkSize&&(i=this._start+this._config.chunkSize-1,r.setRequestHeader(\"Range\",\"bytes=\"+this._start+\"-\"+i));try{r.send(this._config.downloadRequestBody)}catch(e){this._chunkError(e.message)}s&&0===r.status&&this._chunkError()}},this._chunkLoaded=function(){4===r.readyState&&(r.status<200||400<=r.status?this._chunkError():(this._start+=this._config.chunkSize||r.responseText.length,this._finished=!this._config.chunkSize||this._start>=(e=>null!==(e=e.getResponseHeader(\"Content-Range\"))?parseInt(e.substring(e.lastIndexOf(\"/\")+1)):-1)(r),this.parseChunk(r.responseText)))},this._chunkError=function(e){e=r.statusText||e;this._sendError(new Error(e))}}function l(e){(e=e||{}).chunkSize||(e.chunkSize=v.LocalChunkSize),u.call(this,e);var i,r,n=\"undefined\"!=typeof FileReader;this.stream=function(e){this._input=e,r=e.slice||e.webkitSlice||e.mozSlice,n?((i=new FileReader).onload=y(this._chunkLoaded,this),i.onerror=y(this._chunkError,this)):i=new FileReaderSync,this._nextChunk()},this._nextChunk=function(){this._finished||this._config.preview&&!(this._rowCount<this._config.preview)||this._readChunk()},this._readChunk=function(){var e=this._input,t=(this._config.chunkSize&&(t=Math.min(this._start+this._config.chunkSize,this._input.size),e=r.call(e,this._start,t)),i.readAsText(e,this._config.encoding));n||this._chunkLoaded({target:{result:t}})},this._chunkLoaded=function(e){this._start+=this._config.chunkSize,this._finished=!this._config.chunkSize||this._start>=this._input.size,this.parseChunk(e.target.result)},this._chunkError=function(){this._sendError(i.error)}}function c(e){var i;u.call(this,e=e||{}),this.stream=function(e){return i=e,this._nextChunk()},this._nextChunk=function(){var e,t;if(!this._finished)return e=this._config.chunkSize,i=e?(t=i.substring(0,e),i.substring(e)):(t=i,\"\"),this._finished=!i,this.parseChunk(t)}}function p(e){u.call(this,e=e||{});var t=[],i=!0,r=!1;this.pause=function(){u.prototype.pause.apply(this,arguments),this._input.pause()},this.resume=function(){u.prototype.resume.apply(this,arguments),this._input.resume()},this.stream=function(e){this._input=e,this._input.on(\"data\",this._streamData),this._input.on(\"end\",this._streamEnd),this._input.on(\"error\",this._streamError)},this._checkIsFinished=function(){r&&1===t.length&&(this._finished=!0)},this._nextChunk=function(){this._checkIsFinished(),t.length?this.parseChunk(t.shift()):i=!0},this._streamData=y(function(e){try{t.push(\"string\"==typeof e?e:e.toString(this._config.encoding)),i&&(i=!1,this._checkIsFinished(),this.parseChunk(t.shift()))}catch(e){this._streamError(e)}},this),this._streamError=y(function(e){this._streamCleanUp(),this._sendError(e)},this),this._streamEnd=y(function(){this._streamCleanUp(),r=!0,this._streamData(\"\")},this),this._streamCleanUp=y(function(){this._input.removeListener(\"data\",this._streamData),this._input.removeListener(\"end\",this._streamEnd),this._input.removeListener(\"error\",this._streamError)},this)}function i(m){var n,s,a,t,o=Math.pow(2,53),h=-o,u=/^\\s*-?(\\d+\\.?|\\.\\d+|\\d+\\.\\d+)([eE][-+]?\\d+)?\\s*$/,d=/^((\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d\\.\\d+([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z)))$/,i=this,r=0,f=0,l=!1,e=!1,c=[],p={data:[],errors:[],meta:{}};function y(e){return\"greedy\"===m.skipEmptyLines?\"\"===e.join(\"\").trim():1===e.length&&0===e[0].length}function g(){if(p&&a&&(k(\"Delimiter\",\"UndetectableDelimiter\",\"Unable to auto-detect delimiting character; defaulted to '\"+v.DefaultDelimiter+\"'\"),a=!1),m.skipEmptyLines&&(p.data=p.data.filter(function(e){return!y(e)})),_()){if(p)if(Array.isArray(p.data[0])){for(var e=0;_()&&e<p.data.length;e++)p.data[e].forEach(t);p.data.splice(0,1)}else p.data.forEach(t);function t(e,t){U(m.transformHeader)&&(e=m.transformHeader(e,t)),c.push(e)}}function i(e,t){for(var i=m.header?{}:[],r=0;r<e.length;r++){var n=r,s=e[r],s=((e,t)=>(e=>(m.dynamicTypingFunction&&void 0===m.dynamicTyping[e]&&(m.dynamicTyping[e]=m.dynamicTypingFunction(e)),!0===(m.dynamicTyping[e]||m.dynamicTyping)))(e)?\"true\"===t||\"TRUE\"===t||\"false\"!==t&&\"FALSE\"!==t&&((e=>{if(u.test(e)){e=parseFloat(e);if(h<e&&e<o)return 1}})(t)?parseFloat(t):d.test(t)?new Date(t):\"\"===t?null:t):t)(n=m.header?r>=c.length?\"__parsed_extra\":c[r]:n,s=m.transform?m.transform(s,n):s);\"__parsed_extra\"===n?(i[n]=i[n]||[],i[n].push(s)):i[n]=s}return m.header&&(r>c.length?k(\"FieldMismatch\",\"TooManyFields\",\"Too many fields: expected \"+c.length+\" fields but parsed \"+r,f+t):r<c.length&&k(\"FieldMismatch\",\"TooFewFields\",\"Too few fields: expected \"+c.length+\" fields but parsed \"+r,f+t)),i}var r;p&&(m.header||m.dynamicTyping||m.transform)&&(r=1,!p.data.length||Array.isArray(p.data[0])?(p.data=p.data.map(i),r=p.data.length):p.data=i(p.data,0),m.header&&p.meta&&(p.meta.fields=c),f+=r)}function _(){return m.header&&0===c.length}function k(e,t,i,r){e={type:e,code:t,message:i};void 0!==r&&(e.row=r),p.errors.push(e)}U(m.step)&&(t=m.step,m.step=function(e){p=e,_()?g():(g(),0!==p.data.length&&(r+=e.data.length,m.preview&&r>m.preview?s.abort():(p.data=p.data[0],t(p,i))))}),this.parse=function(e,t,i){var r=m.quoteChar||'\"',r=(m.newline||(m.newline=this.guessLineEndings(e,r)),a=!1,m.delimiter?U(m.delimiter)&&(m.delimiter=m.delimiter(e),p.meta.delimiter=m.delimiter):((r=((e,t,i,r,n)=>{var s,a,o,h;n=n||[\",\",\"\\t\",\"|\",\";\",v.RECORD_SEP,v.UNIT_SEP];for(var u=0;u<n.length;u++){for(var d,f=n[u],l=0,c=0,p=0,g=(o=void 0,new E({comments:r,delimiter:f,newline:t,preview:10}).parse(e)),_=0;_<g.data.length;_++)i&&y(g.data[_])?p++:(d=g.data[_].length,c+=d,void 0===o?o=d:0<d&&(l+=Math.abs(d-o),o=d));0<g.data.length&&(c/=g.data.length-p),(void 0===a||l<=a)&&(void 0===h||h<c)&&1.99<c&&(a=l,s=f,h=c)}return{successful:!!(m.delimiter=s),bestDelimiter:s}})(e,m.newline,m.skipEmptyLines,m.comments,m.delimitersToGuess)).successful?m.delimiter=r.bestDelimiter:(a=!0,m.delimiter=v.DefaultDelimiter),p.meta.delimiter=m.delimiter),b(m));return m.preview&&m.header&&r.preview++,n=e,s=new E(r),p=s.parse(n,t,i),g(),l?{meta:{paused:!0}}:p||{meta:{paused:!1}}},this.paused=function(){return l},this.pause=function(){l=!0,s.abort(),n=U(m.chunk)?\"\":n.substring(s.getCharIndex())},this.resume=function(){i.streamer._halted?(l=!1,i.streamer.parseChunk(n,!0)):setTimeout(i.resume,3)},this.aborted=function(){return e},this.abort=function(){e=!0,s.abort(),p.meta.aborted=!0,U(m.complete)&&m.complete(p),n=\"\"},this.guessLineEndings=function(e,t){e=e.substring(0,1048576);var t=new RegExp(P(t)+\"([^]*?)\"+P(t),\"gm\"),i=(e=e.replace(t,\"\")).split(\"\\r\"),t=e.split(\"\\n\"),e=1<t.length&&t[0].length<i[0].length;if(1===i.length||e)return\"\\n\";for(var r=0,n=0;n<i.length;n++)\"\\n\"===i[n][0]&&r++;return r>=i.length/2?\"\\r\\n\":\"\\r\"}}function P(e){return e.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\")}function E(C){var S=(C=C||{}).delimiter,O=C.newline,x=C.comments,I=C.step,A=C.preview,T=C.fastMode,D=null,L=!1,F=null==C.quoteChar?'\"':C.quoteChar,j=F;if(void 0!==C.escapeChar&&(j=C.escapeChar),(\"string\"!=typeof S||-1<v.BAD_DELIMITERS.indexOf(S))&&(S=\",\"),x===S)throw new Error(\"Comment character same as delimiter\");!0===x?x=\"#\":(\"string\"!=typeof x||-1<v.BAD_DELIMITERS.indexOf(x))&&(x=!1),\"\\n\"!==O&&\"\\r\"!==O&&\"\\r\\n\"!==O&&(O=\"\\n\");var z=0,M=!1;this.parse=function(i,t,r){if(\"string\"!=typeof i)throw new Error(\"Input must be a string\");var n=i.length,e=S.length,s=O.length,a=x.length,o=U(I),h=[],u=[],d=[],f=z=0;if(!i)return w();if(T||!1!==T&&-1===i.indexOf(F)){for(var l=i.split(O),c=0;c<l.length;c++){if(d=l[c],z+=d.length,c!==l.length-1)z+=O.length;else if(r)return w();if(!x||d.substring(0,a)!==x){if(o){if(h=[],k(d.split(S)),R(),M)return w()}else k(d.split(S));if(A&&A<=c)return h=h.slice(0,A),w(!0)}}return w()}for(var p=i.indexOf(S,z),g=i.indexOf(O,z),_=new RegExp(P(j)+P(F),\"g\"),m=i.indexOf(F,z);;)if(i[z]===F)for(m=z,z++;;){if(-1===(m=i.indexOf(F,m+1)))return r||u.push({type:\"Quotes\",code:\"MissingQuotes\",message:\"Quoted field unterminated\",row:h.length,index:z}),E();if(m===n-1)return E(i.substring(z,m).replace(_,F));if(F===j&&i[m+1]===j)m++;else if(F===j||0===m||i[m-1]!==j){-1!==p&&p<m+1&&(p=i.indexOf(S,m+1));var y=v(-1===(g=-1!==g&&g<m+1?i.indexOf(O,m+1):g)?p:Math.min(p,g));if(i.substr(m+1+y,e)===S){d.push(i.substring(z,m).replace(_,F)),i[z=m+1+y+e]!==F&&(m=i.indexOf(F,z)),p=i.indexOf(S,z),g=i.indexOf(O,z);break}y=v(g);if(i.substring(m+1+y,m+1+y+s)===O){if(d.push(i.substring(z,m).replace(_,F)),b(m+1+y+s),p=i.indexOf(S,z),m=i.indexOf(F,z),o&&(R(),M))return w();if(A&&h.length>=A)return w(!0);break}u.push({type:\"Quotes\",code:\"InvalidQuotes\",message:\"Trailing quote on quoted field is malformed\",row:h.length,index:z}),m++}}else if(x&&0===d.length&&i.substring(z,z+a)===x){if(-1===g)return w();z=g+s,g=i.indexOf(O,z),p=i.indexOf(S,z)}else if(-1!==p&&(p<g||-1===g))d.push(i.substring(z,p)),z=p+e,p=i.indexOf(S,z);else{if(-1===g)break;if(d.push(i.substring(z,g)),b(g+s),o&&(R(),M))return w();if(A&&h.length>=A)return w(!0)}return E();function k(e){h.push(e),f=z}function v(e){var t=0;return t=-1!==e&&(e=i.substring(m+1,e))&&\"\"===e.trim()?e.length:t}function E(e){return r||(void 0===e&&(e=i.substring(z)),d.push(e),z=n,k(d),o&&R()),w()}function b(e){z=e,k(d),d=[],g=i.indexOf(O,z)}function w(e){if(C.header&&!t&&h.length&&!L){var s=h[0],a=Object.create(null),o=new Set(s);let n=!1;for(let r=0;r<s.length;r++){let i=s[r];if(a[i=U(C.transformHeader)?C.transformHeader(i,r):i]){let e,t=a[i];for(;e=i+\"_\"+t,t++,o.has(e););o.add(e),s[r]=e,a[i]++,n=!0,(D=null===D?{}:D)[e]=i}else a[i]=1,s[r]=i;o.add(i)}n&&console.warn(\"Duplicate headers found and renamed.\"),L=!0}return{data:h,errors:u,meta:{delimiter:S,linebreak:O,aborted:M,truncated:!!e,cursor:f+(t||0),renamedHeaders:D}}}function R(){I(w()),h=[],u=[]}},this.abort=function(){M=!0},this.getCharIndex=function(){return z}}function g(e){var t=e.data,i=o[t.workerId],r=!1;if(t.error)i.userError(t.error,t.file);else if(t.results&&t.results.data){var n={abort:function(){r=!0,_(t.workerId,{data:[],errors:[],meta:{aborted:!0}})},pause:m,resume:m};if(U(i.userStep)){for(var s=0;s<t.results.data.length&&(i.userStep({data:t.results.data[s],errors:t.results.errors,meta:t.results.meta},n),!r);s++);delete t.results}else U(i.userChunk)&&(i.userChunk(t.results,n,t.file),delete t.results)}t.finished&&!r&&_(t.workerId,t.results)}function _(e,t){var i=o[e];U(i.userComplete)&&i.userComplete(t),i.terminate(),delete o[e]}function m(){throw new Error(\"Not implemented.\")}function b(e){if(\"object\"!=typeof e||null===e)return e;var t,i=Array.isArray(e)?[]:{};for(t in e)i[t]=b(e[t]);return i}function y(e,t){return function(){e.apply(t,arguments)}}function U(e){return\"function\"==typeof e}return v.parse=function(e,t){var i=(t=t||{}).dynamicTyping||!1;U(i)&&(t.dynamicTypingFunction=i,i={});if(t.dynamicTyping=i,t.transform=!!U(t.transform)&&t.transform,!t.worker||!v.WORKERS_SUPPORTED)return i=null,v.NODE_STREAM_INPUT,\"string\"==typeof e?(e=(e=>65279!==e.charCodeAt(0)?e:e.slice(1))(e),i=new(t.download?f:c)(t)):!0===e.readable&&U(e.read)&&U(e.on)?i=new p(t):(n.File&&e instanceof File||e instanceof Object)&&(i=new l(t)),i.stream(e);(i=(()=>{var e;return!!v.WORKERS_SUPPORTED&&(e=(()=>{var e=n.URL||n.webkitURL||null,t=r.toString();return v.BLOB_URL||(v.BLOB_URL=e.createObjectURL(new Blob([\"var global = (function() { if (typeof self !== 'undefined') { return self; } if (typeof window !== 'undefined') { return window; } if (typeof global !== 'undefined') { return global; } return {}; })(); global.IS_PAPA_WORKER=true; \",\"(\",t,\")();\"],{type:\"text/javascript\"})))})(),(e=new n.Worker(e)).onmessage=g,e.id=h++,o[e.id]=e)})()).userStep=t.step,i.userChunk=t.chunk,i.userComplete=t.complete,i.userError=t.error,t.step=U(t.step),t.chunk=U(t.chunk),t.complete=U(t.complete),t.error=U(t.error),delete t.worker,i.postMessage({input:e,config:t,workerId:i.id})},v.unparse=function(e,t){var n=!1,_=!0,m=\",\",y=\"\\r\\n\",s='\"',a=s+s,i=!1,r=null,o=!1,h=((()=>{if(\"object\"==typeof t){if(\"string\"!=typeof t.delimiter||v.BAD_DELIMITERS.filter(function(e){return-1!==t.delimiter.indexOf(e)}).length||(m=t.delimiter),\"boolean\"!=typeof t.quotes&&\"function\"!=typeof t.quotes&&!Array.isArray(t.quotes)||(n=t.quotes),\"boolean\"!=typeof t.skipEmptyLines&&\"string\"!=typeof t.skipEmptyLines||(i=t.skipEmptyLines),\"string\"==typeof t.newline&&(y=t.newline),\"string\"==typeof t.quoteChar&&(s=t.quoteChar),\"boolean\"==typeof t.header&&(_=t.header),Array.isArray(t.columns)){if(0===t.columns.length)throw new Error(\"Option columns is empty\");r=t.columns}void 0!==t.escapeChar&&(a=t.escapeChar+s),t.escapeFormulae instanceof RegExp?o=t.escapeFormulae:\"boolean\"==typeof t.escapeFormulae&&t.escapeFormulae&&(o=/^[=+\\-@\\t\\r].*$/)}})(),new RegExp(P(s),\"g\"));\"string\"==typeof e&&(e=JSON.parse(e));if(Array.isArray(e)){if(!e.length||Array.isArray(e[0]))return u(null,e,i);if(\"object\"==typeof e[0])return u(r||Object.keys(e[0]),e,i)}else if(\"object\"==typeof e)return\"string\"==typeof e.data&&(e.data=JSON.parse(e.data)),Array.isArray(e.data)&&(e.fields||(e.fields=e.meta&&e.meta.fields||r),e.fields||(e.fields=Array.isArray(e.data[0])?e.fields:\"object\"==typeof e.data[0]?Object.keys(e.data[0]):[]),Array.isArray(e.data[0])||\"object\"==typeof e.data[0]||(e.data=[e.data])),u(e.fields||[],e.data||[],i);throw new Error(\"Unable to serialize unrecognized input\");function u(e,t,i){var r=\"\",n=(\"string\"==typeof e&&(e=JSON.parse(e)),\"string\"==typeof t&&(t=JSON.parse(t)),Array.isArray(e)&&0<e.length),s=!Array.isArray(t[0]);if(n&&_){for(var a=0;a<e.length;a++)0<a&&(r+=m),r+=k(e[a],a);0<t.length&&(r+=y)}for(var o=0;o<t.length;o++){var h=(n?e:t[o]).length,u=!1,d=n?0===Object.keys(t[o]).length:0===t[o].length;if(i&&!n&&(u=\"greedy\"===i?\"\"===t[o].join(\"\").trim():1===t[o].length&&0===t[o][0].length),\"greedy\"===i&&n){for(var f=[],l=0;l<h;l++){var c=s?e[l]:l;f.push(t[o][c])}u=\"\"===f.join(\"\").trim()}if(!u){for(var p=0;p<h;p++){0<p&&!d&&(r+=m);var g=n&&s?e[p]:p;r+=k(t[o][g],p)}o<t.length-1&&(!i||0<h&&!d)&&(r+=y)}}return r}function k(e,t){var i,r;return null==e?\"\":e.constructor===Date?JSON.stringify(e).slice(1,25):(r=!1,o&&\"string\"==typeof e&&o.test(e)&&(e=\"'\"+e,r=!0),i=e.toString().replace(h,a),(r=r||!0===n||\"function\"==typeof n&&n(e,t)||Array.isArray(n)&&n[t]||((e,t)=>{for(var i=0;i<t.length;i++)if(-1<e.indexOf(t[i]))return!0;return!1})(i,v.BAD_DELIMITERS)||-1<i.indexOf(m)||\" \"===i.charAt(0)||\" \"===i.charAt(i.length-1))?s+i+s:i)}},v.RECORD_SEP=String.fromCharCode(30),v.UNIT_SEP=String.fromCharCode(31),v.BYTE_ORDER_MARK=\"\\ufeff\",v.BAD_DELIMITERS=[\"\\r\",\"\\n\",'\"',v.BYTE_ORDER_MARK],v.WORKERS_SUPPORTED=!s&&!!n.Worker,v.NODE_STREAM_INPUT=1,v.LocalChunkSize=10485760,v.RemoteChunkSize=5242880,v.DefaultDelimiter=\",\",v.Parser=E,v.ParserHandle=i,v.NetworkStreamer=f,v.FileStreamer=l,v.StringStreamer=c,v.ReadableStreamStreamer=p,n.jQuery&&((d=n.jQuery).fn.parse=function(o){var i=o.config||{},h=[];return this.each(function(e){if(!(\"INPUT\"===d(this).prop(\"tagName\").toUpperCase()&&\"file\"===d(this).attr(\"type\").toLowerCase()&&n.FileReader)||!this.files||0===this.files.length)return!0;for(var t=0;t<this.files.length;t++)h.push({file:this.files[t],inputElem:this,instanceConfig:d.extend({},i)})}),e(),this;function e(){if(0===h.length)U(o.complete)&&o.complete();else{var e,t,i,r,n=h[0];if(U(o.before)){var s=o.before(n.file,n.inputElem);if(\"object\"==typeof s){if(\"abort\"===s.action)return e=\"AbortError\",t=n.file,i=n.inputElem,r=s.reason,void(U(o.error)&&o.error({name:e},t,i,r));if(\"skip\"===s.action)return void u();\"object\"==typeof s.config&&(n.instanceConfig=d.extend(n.instanceConfig,s.config))}else if(\"skip\"===s)return void u()}var a=n.instanceConfig.complete;n.instanceConfig.complete=function(e){U(a)&&a(e,n.file,n.inputElem),u()},v.parse(n.file,n.instanceConfig)}}function u(){h.splice(0,1),e()}}),a&&(n.onmessage=function(e){e=e.data;void 0===v.WORKER_ID&&e&&(v.WORKER_ID=e.workerId);\"string\"==typeof e.input?n.postMessage({workerId:v.WORKER_ID,results:v.parse(e.input,e.config),finished:!0}):(n.File&&e.input instanceof File||e.input instanceof Object)&&(e=v.parse(e.input,e.config))&&n.postMessage({workerId:v.WORKER_ID,results:e,finished:!0})}),(f.prototype=Object.create(u.prototype)).constructor=f,(l.prototype=Object.create(u.prototype)).constructor=l,(c.prototype=Object.create(c.prototype)).constructor=c,(p.prototype=Object.create(u.prototype)).constructor=p,v});","export default function getMoleculeCreators(OCL) {\n    const fields = new Map([\n        ['oclid', OCL.Molecule.fromIDCode],\n        ['idcode', OCL.Molecule.fromIDCode],\n        ['smiles', OCL.Molecule.fromSmiles],\n        ['molfile', OCL.Molecule.fromMolfile],\n        [\n            'smarts',\n            (smarts) => {\n                const smilesParser = new OCL.SmilesParser({ smartsMode: 'smarts' });\n                return smilesParser.parseMolecule(smarts);\n            },\n        ],\n    ]);\n    return fields;\n}\n//# sourceMappingURL=getMoleculeCreators.js.map","import { ensureString } from 'ensure-string';\nimport Papa from 'papaparse';\nimport getMoleculeCreators from './getMoleculeCreators.js';\nconst defaultCSVOptions = {\n    header: true,\n    dynamicTyping: true,\n    skipEmptyLines: true,\n};\nexport default async function appendCSV(moleculesDB, csv, options = {}) {\n    const { onStep } = options;\n    csv = ensureString(csv);\n    const moleculeCreators = getMoleculeCreators(moleculesDB.OCL);\n    if (typeof csv !== 'string') {\n        throw new TypeError('csv must be a string');\n    }\n    options = { ...defaultCSVOptions, ...options };\n    const parsed = Papa.parse(csv, options);\n    const fields = parsed.meta.fields;\n    const stats = new Array(fields.length);\n    const firstElement = parsed.data[0];\n    let moleculeCreator, moleculeField;\n    for (let i = 0; i < fields.length; i++) {\n        stats[i] = {\n            label: fields[i],\n            isNumeric: typeof firstElement[fields[i]] === 'number',\n        };\n        const lowerField = fields[i].toLowerCase();\n        if (moleculeCreators.has(lowerField)) {\n            moleculeCreator = moleculeCreators.get(lowerField);\n            moleculeField = fields[i];\n        }\n    }\n    if (!moleculeCreator) {\n        throw new Error('this document does not contain any molecule field');\n    }\n    for (let i = 0; i < parsed.data.length; i++) {\n        moleculesDB.pushEntry(moleculeCreator(parsed.data[i][moleculeField]), parsed.data[i]);\n        if (onStep) {\n            // eslint-disable-next-line no-await-in-loop\n            await onStep(i + 1, parsed.data.length);\n        }\n    }\n}\n//# sourceMappingURL=appendCSV.js.map","var __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// index.ts\nvar isObject = /* @__PURE__ */ __name((v) => v !== null && typeof v === \"object\", \"isObject\");\nvar join = /* @__PURE__ */ __name((segs, joinChar, options) => {\n  if (typeof options.join === \"function\") {\n    return options.join(segs);\n  }\n  return segs[0] + joinChar + segs[1];\n}, \"join\");\nvar split = /* @__PURE__ */ __name((path, splitChar, options) => {\n  if (typeof options.split === \"function\") {\n    return options.split(path);\n  }\n  return path.split(splitChar);\n}, \"split\");\nvar isValid = /* @__PURE__ */ __name((key, target = {}, options) => {\n  if (typeof options?.isValid === \"function\") {\n    return options.isValid(key, target);\n  }\n  return true;\n}, \"isValid\");\nvar isValidObject = /* @__PURE__ */ __name((v) => {\n  return isObject(v) || typeof v === \"function\";\n}, \"isValidObject\");\nvar getValue = /* @__PURE__ */ __name((target, path, options = {}) => {\n  if (!isObject(options)) {\n    options = { default: options };\n  }\n  if (!isValidObject(target)) {\n    return typeof options.default !== \"undefined\" ? options.default : target;\n  }\n  if (typeof path === \"number\") {\n    path = String(path);\n  }\n  const pathIsArray = Array.isArray(path);\n  const pathIsString = typeof path === \"string\";\n  const splitChar = options.separator || \".\";\n  const joinChar = options.joinChar || (typeof splitChar === \"string\" ? splitChar : \".\");\n  if (!pathIsString && !pathIsArray) {\n    return target;\n  }\n  if (target[path] !== void 0) {\n    return isValid(path, target, options) ? target[path] : options.default;\n  }\n  const segs = pathIsArray ? path : split(path, splitChar, options);\n  const len = segs.length;\n  let idx = 0;\n  do {\n    let prop = segs[idx];\n    if (typeof prop !== \"string\") {\n      prop = String(prop);\n    }\n    while (prop && prop.slice(-1) === \"\\\\\") {\n      prop = join([prop.slice(0, -1), segs[++idx] || \"\"], joinChar, options);\n    }\n    if (target[prop] !== void 0) {\n      if (!isValid(prop, target, options)) {\n        return options.default;\n      }\n      target = target[prop];\n    } else {\n      let hasProp = false;\n      let n = idx + 1;\n      while (n < len) {\n        prop = join([prop, segs[n++]], joinChar, options);\n        if (hasProp = target[prop] !== void 0) {\n          if (!isValid(prop, target, options)) {\n            return options.default;\n          }\n          target = target[prop];\n          idx = n - 1;\n          break;\n        }\n      }\n      if (!hasProp) {\n        return options.default;\n      }\n    }\n  } while (++idx < len && isValidObject(target));\n  if (idx === len) {\n    return target;\n  }\n  return options.default;\n}, \"getValue\");\nvar index_default = getValue;\nexport {\n  index_default as default\n};\n/*!\n * get-value <https://github.com/jonschlinkert/get-value>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n//# sourceMappingURL=index.mjs.map","/**\n * Parse a single SDF entry string into a molecule object.\n * @param sdfPart - A single SDF record (everything before the `$$$$` line).\n * @param labels - Shared label tracking object, mutated in place.\n * @param currentLabels - Array to collect label names found in this entry.\n * @param options - Resolved parse options.\n * @returns The molecule object, or `undefined` if the entry is too short.\n */\nexport function getMolecule(sdfPart, labels, currentLabels, options) {\n    const { eol, dynamicTyping, include, exclude, modifiers, forEach } = options;\n    const parts = sdfPart.split(`${eol}>`);\n    if (parts.length === 0 || parts[0].length <= 5)\n        return undefined;\n    const molecule = { molfile: parts[0] + eol };\n    for (let j = 1; j < parts.length; j++) {\n        const lines = parts[j].split(eol);\n        const from = lines[0].indexOf('<');\n        const to = lines[0].indexOf('>');\n        const label = lines[0].slice(from + 1, to);\n        currentLabels.push(label);\n        if (!labels[label]) {\n            labels[label] = {\n                counter: 0,\n                isNumeric: dynamicTyping,\n                keep: false,\n            };\n            if (!exclude?.includes(label) && (!include || include.includes(label))) {\n                labels[label].keep = true;\n                if (modifiers[label])\n                    labels[label].modifier = modifiers[label];\n                if (forEach[label])\n                    labels[label].forEach = forEach[label];\n            }\n        }\n        if (labels[label].keep) {\n            for (let k = 1; k < lines.length - 1; k++) {\n                if (molecule[label]) {\n                    molecule[label] = `${molecule[label]}${eol}${lines[k]}`;\n                }\n                else {\n                    molecule[label] = lines[k];\n                }\n            }\n            if (labels[label].modifier) {\n                const modifiedValue = labels[label].modifier(molecule[label]);\n                if (modifiedValue === undefined || modifiedValue === null) {\n                    // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n                    delete molecule[label];\n                }\n                else {\n                    molecule[label] = modifiedValue;\n                }\n            }\n            if (labels[label].isNumeric &&\n                (!Number.isFinite(+molecule[label]) ||\n                    molecule[label].match(/^0[0-9]/))) {\n                labels[label].isNumeric = false;\n            }\n        }\n    }\n    return molecule;\n}\n//# sourceMappingURL=getMolecule.js.map","import { ensureString } from 'ensure-string';\nimport { parse } from 'sdf-parser';\nexport default async function appendSDF(moleculesDB, sdf, options = {}) {\n    const { onStep, dynamicTyping, mixedEOL = true, eol } = options;\n    sdf = ensureString(sdf);\n    if (typeof sdf !== 'string') {\n        throw new TypeError('sdf must be a string');\n    }\n    const parsed = parse(sdf, { dynamicTyping, mixedEOL, eol });\n    for (let i = 0; i < parsed.molecules.length; i++) {\n        const molecule = parsed.molecules[i];\n        moleculesDB.pushEntry(moleculesDB.OCL.Molecule.fromMolfile(molecule.molfile), molecule);\n        if (onStep) {\n            // eslint-disable-next-line no-await-in-loop\n            await onStep(i + 1, parsed.molecules.length);\n        }\n    }\n}\n//# sourceMappingURL=appendSDF.js.map","import { ensureString } from 'ensure-string';\nimport { getEntriesBoundaries } from \"./getEntriesBoundaries.js\";\nimport { getMolecule } from \"./util/getMolecule.js\";\n/**\n * Synchronously parse an SDF file into an array of molecule objects.\n * @param sdf - The SDF content as a string, `ArrayBuffer`, or `ArrayBufferView`.\n * @param options - Parsing options.\n * @returns A {@link ParseResult} containing molecules and statistics.\n * @example\n * ```ts\n * import { readFileSync } from 'node:fs';\n * import { parse } from 'sdf-parser';\n *\n * const sdf = readFileSync('compounds.sdf', 'utf8');\n * const { molecules, statistics } = parse(sdf);\n * ```\n */\nexport function parse(sdf, options = {}) {\n    options = { ...options };\n    if (options.modifiers === undefined)\n        options.modifiers = {};\n    if (options.forEach === undefined)\n        options.forEach = {};\n    if (options.dynamicTyping === undefined)\n        options.dynamicTyping = true;\n    // ensureString converts ArrayBuffer/ArrayBufferView to string\n    const sdfString = ensureString(sdf);\n    if (typeof sdfString !== 'string') {\n        throw new TypeError('Parameter \"sdf\" must be a string');\n    }\n    if (options.eol === undefined) {\n        options.eol = '\\n';\n        if (options.mixedEOL) {\n            // Normalize all line endings to \\n\n            // We work on a local variable so no issue here\n        }\n        else {\n            // Note: new Set(string) creates a Set of individual characters.\n            // '\\r\\n' is two characters so header.has('\\r\\n') would always be false.\n            // This preserves the original detection behaviour.\n            const header = new Set(sdfString.slice(0, 1000));\n            if (header.has('\\r\\n')) {\n                options.eol = '\\r\\n';\n            }\n            else if (header.has('\\r')) {\n                options.eol = '\\r';\n            }\n        }\n    }\n    let workingSdf = sdfString;\n    if (options.mixedEOL) {\n        workingSdf = workingSdf.replaceAll('\\r\\n', '\\n');\n        workingSdf = workingSdf.replaceAll('\\r', '\\n');\n    }\n    const eol = options.eol;\n    const modifiers = options.modifiers;\n    const forEachMap = options.forEach;\n    const dynamicTyping = options.dynamicTyping;\n    const entriesBoundaries = getEntriesBoundaries(workingSdf, `${eol}$$$$`, eol);\n    const molecules = [];\n    const labels = {};\n    const start = Date.now();\n    for (const boundary of entriesBoundaries) {\n        const sdfPart = workingSdf.slice(...boundary);\n        if (sdfPart.length < 40)\n            continue;\n        const currentLabels = [];\n        const molecule = getMolecule(sdfPart, labels, currentLabels, {\n            eol,\n            dynamicTyping,\n            modifiers,\n            forEach: forEachMap,\n            include: options.include,\n            exclude: options.exclude,\n        });\n        if (!molecule)\n            continue;\n        if (!options.filter || options.filter(molecule)) {\n            molecules.push(molecule);\n            for (const label of currentLabels) {\n                labels[label].counter++;\n            }\n        }\n    }\n    // Convert all numeric fields and compute min/max\n    for (const label in labels) {\n        const currentLabel = labels[label];\n        if (currentLabel.isNumeric) {\n            currentLabel.minValue = Infinity;\n            currentLabel.maxValue = -Infinity;\n            for (const molecule of molecules) {\n                if (molecule[label]) {\n                    const value = Number.parseFloat(molecule[label]);\n                    molecule[label] = value;\n                    if (value > (currentLabel.maxValue ?? -Infinity)) {\n                        currentLabel.maxValue = value;\n                    }\n                    if (value < (currentLabel.minValue ?? Infinity)) {\n                        currentLabel.minValue = value;\n                    }\n                }\n            }\n        }\n    }\n    for (const key in labels) {\n        labels[key].always = labels[key].counter === molecules.length;\n    }\n    const statistics = [];\n    for (const key in labels) {\n        const info = labels[key];\n        statistics.push({\n            label: key,\n            counter: info.counter,\n            isNumeric: info.isNumeric,\n            keep: info.keep,\n            minValue: info.minValue,\n            maxValue: info.maxValue,\n            always: info.always ?? false,\n        });\n    }\n    return {\n        time: Date.now() - start,\n        molecules,\n        labels: Object.keys(labels),\n        statistics,\n    };\n}\n//# sourceMappingURL=parse.js.map","/**\n * Get the [start, end] boundaries of each SDF entry in a string.\n *\n * Uses `indexOf` for fast splitting without regex overhead.\n * @param string - The full SDF string.\n * @param substring - The delimiter to search for (e.g. `'\\n$$$$'`).\n * @param eol - The end-of-line character used to skip past the delimiter line.\n * @returns An array of `[start, end]` index pairs, one per SDF entry.\n */\nexport function getEntriesBoundaries(string, substring, eol) {\n    const res = [];\n    let previous = 0;\n    let next = 0;\n    while (next !== -1) {\n        next = string.indexOf(substring, previous);\n        if (next !== -1) {\n            res.push([previous, next]);\n            const nextMatch = string.indexOf(eol, next + substring.length);\n            if (nextMatch === -1) {\n                next = -1;\n            }\n            else {\n                previous = nextMatch + eol.length;\n                next = previous;\n            }\n        }\n        else {\n            res.push([previous, string.length]);\n        }\n    }\n    return res;\n}\n//# sourceMappingURL=getEntriesBoundaries.js.map","/**\n *\n * @param {MoleculesDB} moleculesDB\n * @param {import('openchemlib').Molecule} molecule\n * @param {object} data\n * @param {object} [moleculeInfo]\n * @param {string} [moleculeInfo.idCode]\n * @param {number[]} [moleculeInfo.index]\n */\nexport default function pushEntry(moleculesDB, molecule, data = {}, moleculeInfo = {}) {\n    // the following line could be the source of problems if the idCode version\n    // changes\n    const moleculeIDCode = getMoleculeIDCode(molecule, moleculeInfo);\n    const id = moleculeIDCode || crypto.randomUUID();\n    let entry = moleculesDB.db[id];\n    if (!entry) {\n        // a new molecule\n        // ensure helper arrays needed for substructure search\n        molecule.ensureHelperArrays(moleculesDB.OCL.Molecule.cHelperRings);\n        let index;\n        if (!moleculeInfo.index) {\n            index = molecule.getIndex();\n        }\n        else {\n            index = moleculeInfo.index;\n        }\n        const molecularFormula = molecule.getMolecularFormula();\n        entry = {\n            molecule,\n            properties: {\n                mw: molecularFormula.relativeWeight,\n                em: molecularFormula.absoluteWeight,\n                mf: molecularFormula.formula,\n            },\n            data: [],\n            idCode: moleculeIDCode,\n            index,\n        };\n        moleculesDB.db[id] = entry;\n        if (moleculesDB.computeProperties) {\n            const properties = new moleculesDB.OCL.MoleculeProperties(molecule);\n            entry.properties = {\n                ...entry.properties,\n                acceptorCount: properties.acceptorCount,\n                donorCount: properties.donorCount,\n                logP: properties.logP,\n                logS: properties.logS,\n                polarSurfaceArea: properties.polarSurfaceArea,\n                rotatableBondCount: properties.rotatableBondCount,\n                stereoCenterCount: properties.stereoCenterCount,\n            };\n        }\n        updateStatistics(moleculesDB.calculatedStatistics, entry.properties);\n    }\n    entry.data.push(data);\n    updateStatistics(moleculesDB.dataStatistics, data);\n}\nfunction updateStatistics(statistics, data) {\n    for (const key in data) {\n        const value = data[key];\n        if (!statistics.has(key)) {\n            statistics.set(key, {\n                counter: 0,\n                kind: typeof value,\n            });\n        }\n        const stat = statistics.get(key);\n        stat.counter++;\n        if (stat.kind !== typeof value) {\n            stat.kind = 'mixed';\n        }\n    }\n}\nfunction getMoleculeIDCode(molecule, moleculeInfo) {\n    let idCode = moleculeInfo.idCode;\n    if (!idCode) {\n        idCode = molecule.getIDCode();\n    }\n    if (idCode === 'd@')\n        return ''; // empty molecule\n    return idCode;\n}\n//# sourceMappingURL=pushEntry.js.map","export async function noWait() {\n    return new Promise((resolve) => {\n        if (typeof setImmediate === 'function') {\n            setImmediate(() => resolve());\n        }\n        else {\n            // didn't find a better way to do it in the browser\n            setTimeout(() => resolve(), 0);\n        }\n    });\n}\n//# sourceMappingURL=noWait.js.map","import { noWait } from '../../util/noWait.js';\nimport getMoleculeCreators from './getMoleculeCreators.js';\nclass AbortError extends Error {\n    name = 'AbortError';\n    code = 20;\n}\nfunction getQuery(moleculesDB, query, options) {\n    const { format = 'idCode' } = options;\n    if (typeof query === 'string') {\n        const moleculeCreators = getMoleculeCreators(moleculesDB.OCL);\n        query = moleculeCreators.get(format.toLowerCase())(query);\n    }\n    else if (!(query instanceof moleculesDB.OCL.Molecule)) {\n        throw new TypeError('toSearch must be a Molecule or string');\n    }\n    return query;\n}\n/**\n * Internal function to search in the database\n * @param {import('../MoleculesDB.js').MoleculesDB} moleculesDB\n * @param {string} query\n * @param {Record<string, any>} [options={}]\n * @param {'exact'|'substructure'|'substructureOR'|'similarity'} [options.mode='substructure']\n * @returns\n */\nexport function search(moleculesDB, query = '', options = {}) {\n    const { mode = 'substructure' } = options;\n    query = getQuery(moleculesDB, query, options);\n    let result;\n    switch (mode.toLowerCase()) {\n        case 'exact':\n            result = exactSearch(moleculesDB, query);\n            break;\n        case 'exactnostereo':\n            result = exactSearchNoStereo(moleculesDB, query);\n            break;\n        case 'substructure':\n            result = substructureSearch(moleculesDB, query);\n            break;\n        case 'substructureor':\n            result = substructureSearchOR(moleculesDB, query);\n            break;\n        case 'similarity':\n            result = similaritySearch(moleculesDB, query);\n            break;\n        default:\n            throw new Error(`unknown search mode: ${options.mode}`);\n    }\n    return processResult(result, options);\n}\nexport async function searchAsync(moleculesDB, query = '', options = {}) {\n    const { mode = 'substructure' } = options;\n    query = getQuery(moleculesDB, query, options);\n    let result;\n    switch (mode.toLowerCase()) {\n        case 'exact':\n            result = exactSearch(moleculesDB, query);\n            break;\n        case 'exactnostereo':\n            result = exactSearchNoStereo(moleculesDB, query);\n            break;\n        case 'substructure':\n            result = await subStructureSearchAsync(moleculesDB, query, options);\n            break;\n        case 'substructureor':\n            result = substructureSearchOR(moleculesDB, query);\n            break;\n        case 'similarity':\n            result = similaritySearch(moleculesDB, query);\n            break;\n        default:\n            throw new Error(`unknown search mode: ${options.mode}`);\n    }\n    return processResult(result, options);\n}\n/**\n * Search for an exact match in the database including stereochemistry\n * @param {import('../MoleculesDB.js').MoleculesDB} moleculesDB\n * @param {import('openchemlib').Molecule} query\n * @returns\n */\nfunction exactSearch(moleculesDB, query) {\n    query = query.getCompactCopy();\n    query.setFragment(false);\n    const queryIDCode = query.getIDCode();\n    const searchResult = moleculesDB.db[queryIDCode]\n        ? [moleculesDB.db[queryIDCode]]\n        : [];\n    return searchResult;\n}\n/**\n * Search for an exact match without stereo information\n * @param {import('../MoleculesDB.js').MoleculesDB} moleculesDB\n * @param {import('openchemlib').Molecule}  query\n * @returns\n */\nfunction exactSearchNoStereo(moleculesDB, query) {\n    query = query.getCompactCopy();\n    query.setFragment(false);\n    query.stripStereoInformation();\n    const queryIDCode = query.getIDCode();\n    // first filter by molecular weight\n    const mw = query.getMolecularFormula().relativeWeight;\n    const results = [];\n    for (const idCode in moleculesDB.db) {\n        const entry = moleculesDB.db[idCode];\n        if (mw !== entry.properties.mw) {\n            continue;\n        }\n        const candidateMolecule = entry.molecule.getCompactCopy();\n        candidateMolecule.stripStereoInformation();\n        const candidateIDCode = candidateMolecule.getIDCode();\n        if (candidateIDCode !== queryIDCode) {\n            continue;\n        }\n        results.push(entry);\n    }\n    return results;\n}\n/**\n * No atoms in the query, we return all the molecules\n * @param {import('../MoleculesDB.js').MoleculesDB} moleculesDB\n * @param {import('openchemlib').Molecule} query\n * @returns\n */\nfunction substructureSearchBegin(moleculesDB, query) {\n    const searchResult = [];\n    if (query.getAllAtoms() === 0) {\n        for (const idCode in moleculesDB.db) {\n            searchResult.push(moleculesDB.db[idCode]);\n        }\n    }\n    return { searchResult };\n}\nfunction substructureSearchEnd(searchResult, queryMW) {\n    searchResult.sort((a, b) => {\n        return (Math.abs(queryMW - a.properties.mw) - Math.abs(queryMW - b.properties.mw));\n    });\n    return searchResult;\n}\n/**\n * Search by substructure in the database\n * If the substructure is composed of many fragments all the fragments must be present\n * @param {import('../MoleculesDB.js').MoleculesDB} moleculesDB\n * @param {import('openchemlib').Molecule} query\n * @returns\n */\nfunction substructureSearch(moleculesDB, query) {\n    const queryMW = getMW(query);\n    const { searchResult } = substructureSearchBegin(moleculesDB, query);\n    if (searchResult.length === 0) {\n        query = query.getCompactCopy();\n        query.setFragment(true);\n        const queryIndex = query.getIndex();\n        const searcher = moleculesDB.searcher;\n        searcher.setFragment(query, queryIndex);\n        for (const idCode in moleculesDB.db) {\n            const entry = moleculesDB.db[idCode];\n            searcher.setMolecule(entry.molecule, entry.index);\n            if (searcher.isFragmentInMolecule()) {\n                searchResult.push(entry);\n            }\n        }\n    }\n    return substructureSearchEnd(searchResult, queryMW);\n}\n/**\n * Search by substructure in the database\n * If the substructure is composed of many fragments only one fragment must be present\n * @param {import('../MoleculesDB.js').MoleculesDB} moleculesDB\n * @param {import('openchemlib').Molecule} query\n * @returns\n */\nfunction substructureSearchOR(moleculesDB, query) {\n    const queryMW = getMW(query);\n    const { searchResult } = substructureSearchBegin(moleculesDB, query);\n    if (searchResult.length === 0) {\n        query = query.getCompactCopy();\n        query.setFragment(true);\n        const queries = [];\n        for (const fragment of query.getFragments()) {\n            queries.push({\n                fragment,\n                queryIndex: fragment.getIndex(),\n            });\n        }\n        const searcher = moleculesDB.searcher;\n        molecule: for (const idCode in moleculesDB.db) {\n            const entry = moleculesDB.db[idCode];\n            searcher.setMolecule(entry.molecule, entry.index);\n            for (const { fragment, queryIndex } of queries) {\n                searcher.setFragment(fragment, queryIndex);\n                if (searcher.isFragmentInMolecule()) {\n                    searchResult.push(entry);\n                    continue molecule;\n                }\n            }\n        }\n    }\n    return substructureSearchEnd(searchResult, queryMW);\n}\nasync function subStructureSearchAsync(moleculesDB, query, options = {}) {\n    const queryMW = getMW(query); // we\n    query = query.getCompactCopy();\n    query.setFragment(true);\n    const { interval = 100, onStep, controller } = options;\n    let shouldAbort = false;\n    if (controller) {\n        const abortEventListener = () => {\n            shouldAbort = true;\n        };\n        controller.signal.addEventListener('abort', abortEventListener);\n    }\n    const { searchResult } = substructureSearchBegin(moleculesDB, query);\n    let begin = performance.now();\n    if (searchResult.length === 0) {\n        const queryIndex = query.getIndex();\n        const searcher = moleculesDB.searcher;\n        searcher.setFragment(query, queryIndex);\n        let index = 0;\n        const length = Object.keys(moleculesDB.db).length;\n        for (const idCode in moleculesDB.db) {\n            if (shouldAbort) {\n                throw new AbortError('Query aborted');\n            }\n            const entry = moleculesDB.db[idCode];\n            searcher.setMolecule(entry.molecule, entry.index);\n            if (searcher.isFragmentInMolecule()) {\n                searchResult.push(entry);\n            }\n            if ((onStep || controller) && performance.now() - begin >= interval) {\n                begin = performance.now();\n                if (onStep) {\n                    onStep(index, length);\n                }\n                if (controller && !onStep) {\n                    // eslint-disable-next-line no-await-in-loop\n                    await noWait();\n                }\n            }\n            index++;\n        }\n    }\n    return substructureSearchEnd(searchResult, queryMW);\n}\nfunction similaritySearch(moleculesDB, query) {\n    const queryIndex = query.getIndex();\n    const queryMW = getMW(query);\n    const queryIdCode = query.getIDCode();\n    const searchResult = [];\n    let similarity;\n    for (const idCode in moleculesDB.db) {\n        const entry = moleculesDB.db[idCode];\n        if (entry.idCode === queryIdCode) {\n            similarity = Number.MAX_SAFE_INTEGER;\n        }\n        else {\n            similarity =\n                moleculesDB.OCL.SSSearcherWithIndex.getSimilarityTanimoto(queryIndex, entry.index) *\n                    1000000 -\n                    Math.abs(queryMW - entry.properties.mw) / 10000;\n        }\n        searchResult.push({ similarity, entry });\n    }\n    searchResult.sort((a, b) => {\n        return b.similarity - a.similarity;\n    });\n    return searchResult.map((entry) => entry.entry);\n}\nfunction getMW(query) {\n    const copy = query.getCompactCopy();\n    copy.setFragment(false);\n    return copy.getMolecularFormula().relativeWeight;\n}\nfunction processResult(entries, options = {}) {\n    const { flattenResult = true, keepMolecule = false, limit = Number.MAX_SAFE_INTEGER, } = options;\n    const results = [];\n    if (flattenResult) {\n        for (const entry of entries) {\n            for (const data of entry.data) {\n                const result = {\n                    data,\n                    idCode: entry.idCode,\n                    properties: entry.properties,\n                };\n                if (keepMolecule) {\n                    result.molecule = entry.molecule;\n                }\n                results.push(result);\n            }\n        }\n    }\n    else {\n        for (const entry of entries) {\n            results.push({\n                data: entry.data,\n                idCode: entry.idCode,\n                properties: entry.properties,\n                molecule: keepMolecule ? entry.molecule : undefined,\n            });\n        }\n    }\n    if (limit < results.length)\n        results.length = limit;\n    return results;\n}\n//# sourceMappingURL=search.js.map","let rAtomicNumber = 0;\n/**\n * Returns the atomic number of the X atom\n * @param {import('openchemlib').Molecule} molecule - An instance of a molecule\n * @returns\n */\nexport function getRAtomicNumber(molecule) {\n    if (!rAtomicNumber) {\n        const OCL = molecule.getOCL();\n        rAtomicNumber = OCL.Molecule.getAtomicNoFromLabel('R', OCL.Molecule.cPseudoAtomR);\n    }\n    return rAtomicNumber;\n}\n//# sourceMappingURL=getRAtomicNumber.js.map","/**\n *\n * @param {*} processedMolecules\n * @param {import('openchemlib').Molecule|string} molecule\n * @param {*} options\n * @returns\n */\nexport function checkIfExistsOrAddInfo(processedMolecules, molecule, options) {\n    const { moleculeInfoCallback, asReagent, asProduct } = options;\n    const idCode = typeof molecule === 'string' ? idCode : molecule.getIDCode();\n    if (processedMolecules.has(idCode)) {\n        const entry = processedMolecules.get(idCode);\n        let exists = false;\n        if (asReagent) {\n            if (entry.asReagent) {\n                exists = true;\n            }\n            else {\n                entry.asReagent = true;\n            }\n        }\n        if (asProduct) {\n            if (entry.asProduct) {\n                exists = true;\n            }\n            else {\n                entry.asProduct = true;\n            }\n        }\n        return { exists, info: entry };\n    }\n    else {\n        let info = {\n            idCode,\n            asReagent,\n            asProduct,\n            info: {},\n        };\n        if (moleculeInfoCallback) {\n            info.info = moleculeInfoCallback(molecule);\n        }\n        processedMolecules.set(idCode, info);\n        return { exists: false, info };\n    }\n}\n//# sourceMappingURL=checkIfExistsOrAddInfo.js.map","import { checkIfExistsOrAddInfo } from './checkIfExistsOrAddInfo.js';\n/**\n * @description apply one reaction to one reactant\n * @param {import('openchemlib').Molecule[]} reactants\n * @param tree\n * @param {Array<object>} reactions - rxnCode of the reaction\n * @param {object} options - options to apply the reaction\n * @param {number} options.currentDepth - current depth of the recursion\n * @param {number} options.maxDepth - max depth of the recursion\n * @param {number} options.maxCurrentDepth - max depth of the recursion for this set of reactions\n * @param {number} options.limitReactions - limit the number of reactions\n * @param {object} options.stats - stats of the recursion\n * @param {number} options.stats.counter - number of reactions\n * @param {Map} options.processedMolecules - set of processed molecules\n * @param {Array} options.trees - array of trees of previous recursions\n * @param {object} options.OCL - OCL object\n * @returns {Array} array of results\n */\nexport function applyOneReactantReactions(tree, reactions, options) {\n    const { currentDepth, maxDepth, maxCurrentDepth, processedMolecules, OCL, logger, } = options;\n    if (tree.molecules.length !== 1) {\n        logger?.warn('applyOneReactantReactions:tree.reactants.length!==1', tree.reactants.length);\n        return [];\n    }\n    const reactant = OCL.Molecule.fromIDCode(tree.molecules[0].idCode);\n    const todoNextDepth = [];\n    // if the current depth is greater than the max depth, we stop the recursion and return an empty array\n    if (currentDepth > maxCurrentDepth || tree.depth >= maxDepth) {\n        return [];\n    }\n    const existsAndInfo = checkIfExistsOrAddInfo(processedMolecules, reactant, {\n        ...options,\n        asReagent: true,\n    });\n    // check if the reactant has already been processed\n    if (existsAndInfo.exists) {\n        return [];\n    }\n    for (const reaction of reactions) {\n        if (options.stats.counter >= options.limitReactions) {\n            return [];\n        }\n        const reactor = new OCL.Reactor(reaction.oclReaction);\n        // isMatching is true if the reactant is matching the reaction else we continue to the next reaction\n        const isMatching = Boolean(reactor.setReactant(0, reactant));\n        if (isMatching) {\n            options.stats.counter++;\n            // get the products of the reaction\n            const oneReactionProducts = reactor.getProducts();\n            for (const oneReactionProduct of oneReactionProducts) {\n                for (const reactionProduct of oneReactionProduct) {\n                    // get the info of the product (idCode, mf)\n                    const productExistsAndInfo = checkIfExistsOrAddInfo(processedMolecules, reactionProduct, { ...options, asProduct: true });\n                    // if the product has not been processed yet, we add it to the list of products and we add it to the list of todoNextDepth\n                    if (!productExistsAndInfo.exists) {\n                        // eslint-disable-next-line no-unused-vars\n                        const { oclReaction, needToBeCharged, ...reactionWithoutOCL } = reaction;\n                        const oneReaction = {\n                            reaction: reactionWithoutOCL,\n                            depth: tree.depth + 1,\n                            isValid: true,\n                            currentDepth,\n                            molecules: [\n                                checkIfExistsOrAddInfo(processedMolecules, reactionProduct, options).info,\n                            ],\n                        };\n                        if (!tree.children)\n                            tree.children = [];\n                        tree.children.push(oneReaction);\n                        todoNextDepth.push(() => {\n                            return applyOneReactantReactions(oneReaction, reactions, {\n                                ...options,\n                                currentDepth: options.currentDepth + 1,\n                            });\n                        });\n                    }\n                }\n            }\n        }\n    }\n    // by returning todoNextDepth, we make sure that the recursion will continue\n    return todoNextDepth;\n}\n//# sourceMappingURL=applyOneReactantReactions.js.map","export function getFilteredTrees(reactions, options = {}) {\n    const { filter = () => true } = options;\n    const nodesToKeep = reactions.getNodes().filter(filter);\n    const parentMap = reactions.getParentMap();\n    for (let currentNode of nodesToKeep) {\n        const parent = parentMap.get(currentNode);\n        if (parent && nodesToKeep.includes(parent) === false) {\n            nodesToKeep.push(parent);\n        }\n    }\n    return getValidChildren(reactions.trees, { nodesToKeep });\n}\nfunction getValidChildren(nodes, options) {\n    const { nodesToKeep } = options;\n    const validNodes = nodes\n        .filter((node) => nodesToKeep.includes(node))\n        .map((node) => ({ ...node }));\n    for (const node of validNodes) {\n        if (node.children) {\n            const validChildren = node.children.filter((child) => nodesToKeep.includes(child));\n            if (validChildren.length > 0) {\n                node.children = getValidChildren(validChildren, { nodesToKeep });\n            }\n            else {\n                delete node.children;\n            }\n        }\n    }\n    return validNodes;\n}\n//# sourceMappingURL=getFilteredTrees.js.map","export function getLeaves(trees) {\n    const leaves = [];\n    for (const tree of trees) {\n        appendLeavesSS(leaves, tree);\n    }\n    return leaves;\n}\nfunction appendLeavesSS(leaves, currentBranch) {\n    if (!currentBranch.children || currentBranch.children.length === 0) {\n        leaves.push(currentBranch);\n        return;\n    }\n    for (const child of currentBranch.children) {\n        appendLeavesSS(leaves, child);\n    }\n}\n//# sourceMappingURL=getLeaves.js.map","export function getNodes(trees) {\n    const nodes = [];\n    for (const tree of trees) {\n        getNodesSS(nodes, tree);\n    }\n    return nodes;\n}\nfunction getNodesSS(nodes, currentBranch) {\n    nodes.push(currentBranch);\n    for (const child of currentBranch?.children || []) {\n        getNodesSS(nodes, child);\n    }\n}\n//# sourceMappingURL=getNodes.js.map","import { appendOCLReaction } from './utils/appendOCLReaction.js';\nimport { applyOneReactantReactions } from './utils/applyOneReactantReactions.js';\nimport { checkIfExistsOrAddInfo } from './utils/checkIfExistsOrAddInfo.js';\nimport { getFilteredTrees } from './utils/getFilteredTrees.js';\nimport { getLeaves } from './utils/getLeaves.js';\nimport { getNodes } from './utils/getNodes.js';\nexport class Reactions {\n    /**\n     *\n     * @param OCL\n     * @param {object} [options={}]\n     * @param {import('cheminfo-types').Logger} logger\n     * @param {number} [options.maxDepth=5]\n     * @param {Function} [options.moleculeInfoCallback]\n     * @param {boolean} [options.skipProcessed=true]\n     */\n    constructor(OCL, options = {}) {\n        this.moleculeInfoCallback = options.moleculeInfoCallback;\n        this.maxDepth = options.maxDepth ?? 5;\n        this.limitReactions = options.limitReactions ?? 200;\n        this.skipProcessed = options.skipProcessed ?? true;\n        this.logger = options.logger;\n        this.processedMolecules = new Map();\n        this.OCL = OCL;\n        this.trees = [];\n        this.moleculeInfo = {}; // a cache containing molecule information like mw, etc.\n    }\n    /**\n     * We need to call this method for all the reactants on which we want to apply the reactions.\n     * If there is only one reactant, we call this method with an array of one reactant.\n     * If there are multiple reactants, we call this method with an array of the reactants.\n     * This method has to be called for all the reactants\n     * @param {import('openchemlib').Molecule[]|string[]} molecules\n     * @param moleculesOrIDCodes\n     */\n    appendHead(moleculesOrIDCodes) {\n        if (!Array.isArray(moleculesOrIDCodes)) {\n            throw new TypeError('reactants must be an array');\n        }\n        const molecules = moleculesOrIDCodes.map((molecule) => checkIfExistsOrAddInfo(this.processedMolecules, molecule, {\n            moleculeInfoCallback: this.moleculeInfoCallback,\n        }).info);\n        const tree = {\n            molecules,\n            depth: 0,\n            isValid: true, // this node could be implied in reactions\n        };\n        this.trees.push(tree);\n    }\n    /**\n     * Returns all the leaves of the trees\n     * @returns\n     */\n    getLeaves() {\n        return getLeaves(this.trees);\n    }\n    /**\n     * Returns all the nodes of the trees\n     * @returns\n     */\n    getNodes() {\n        return getNodes(this.trees);\n    }\n    getParentMap() {\n        const parentMap = new Map();\n        const nodes = this.getNodes();\n        for (const node of nodes) {\n            if (node.children) {\n                for (const child of node.children) {\n                    parentMap.set(child, node);\n                }\n            }\n        }\n        return parentMap;\n    }\n    /**\n     * When applying reactions some branches may be dead because it can not be implied in any reaction.\n     * This is the case when we specify a 'min' reaction depth.\n     * This will returno only the valid nodes\n     * @returns\n     */\n    getValidNodes() {\n        return this.getNodes().filter((node) => node.isValid);\n    }\n    /**\n     *\n     * @param {object} [options={}]\n     * @param {(object):boolean} [options.filter] - a function that will be called for each node and return true if the node should be kept\n     */\n    getFilteredReactions(options = {}) {\n        const filteredReactions = new Reactions();\n        filteredReactions.moleculeInfoCallback = this.moleculeInfoCallback;\n        filteredReactions.maxDepth = this.maxDepth;\n        filteredReactions.limitReactions = this.limitReactions;\n        filteredReactions.skipProcessed = this.skipProcessed;\n        filteredReactions.logger = this.logger;\n        filteredReactions.processedMolecules = this.processedMolecules;\n        filteredReactions.OCL = this.OCL;\n        filteredReactions.moleculeInfo = this.moleculeInfo; // a cache containing molecule information like mw, etc.\n        filteredReactions.trees = getFilteredTrees(this, options);\n        return filteredReactions;\n    }\n    /**\n     *\n     * @param {object[]} reactions - array of reactions that should be applied\n     * @param {object} [options={}]\n     * @param {number} [options.min=0] - min depth of the reaction\n     * @param {number} [options.max=3] - max depth of the reaction\n     */\n    applyOneReactantReactions(reactions, options = {}) {\n        const { min = 0, max = 3 } = options;\n        clearAsFromProcessedMolecules(this.processedMolecules);\n        const nodes = this.getNodes().filter((node) => node.isValid);\n        for (const node of nodes) {\n            node.currentDepth = 0;\n        }\n        reactions = appendOCLReaction(reactions, this.OCL);\n        const stats = { counter: 0 };\n        // Start the recursion by applying the first level of reactions\n        for (const node of nodes) {\n            let todoCurrentLevel = applyOneReactantReactions(node, reactions, {\n                OCL: this.OCL,\n                currentDepth: 1,\n                processedMolecules: this.processedMolecules,\n                moleculeInfoCallback: this.moleculeInfoCallback,\n                maxDepth: this.maxDepth,\n                maxCurrentDepth: max,\n                stats,\n                limitReactions: this.limitReactions,\n            });\n            do {\n                const nexts = [];\n                for (const todo of todoCurrentLevel) {\n                    nexts.push(todo());\n                }\n                todoCurrentLevel = nexts.flat();\n            } while (todoCurrentLevel.length > 0);\n        }\n        const newNodes = this.getNodes().filter((node) => node.isValid);\n        for (const node of newNodes) {\n            if (node.currentDepth < min || node.currentDepth > max) {\n                node.isValid = false;\n            }\n            delete node.currentDepth;\n        }\n    }\n}\nfunction clearAsFromProcessedMolecules(processedMolecules) {\n    for (const [, value] of processedMolecules) {\n        if (value.asReagent) {\n            value.asReagent = false;\n        }\n        if (value.asProduct) {\n            value.asProduct = false;\n        }\n    }\n}\n//# sourceMappingURL=Reactions.js.map","/**\n * @description Append the OCL reaction to the reaction object\n * @param {Array} reactions - array of reactions objects with rxnCode and label\n * @param {typeof import('openchemlib')} OCL - OCL object\n * @param {object} [options={}]\n * @param {import('cheminfo-types').Logger} [options.logger]\n * @returns {Array} array of reactions objects with rxnCode, label and oclReaction (a decoded version of rxnCode reaction)\n */\nexport function appendOCLReaction(reactions, OCL, options = {}) {\n    const { logger } = options;\n    const newReactions = [];\n    for (const reaction of reactions) {\n        if (reaction.rxnCode) {\n            newReactions.push({\n                ...reaction,\n                oclReaction: OCL.ReactionEncoder.decode(reaction.rxnCode),\n            });\n        }\n        else if (logger) {\n            logger.warn(reaction, 'Reaction without rxnCode');\n        }\n    }\n    return newReactions;\n}\n//# sourceMappingURL=appendOCLReaction.js.map","import appendCSV from './utils/appendCSV.js';\nimport appendColor from './utils/appendColor.js';\nimport appendEntries from './utils/appendEntries.js';\nimport appendSDF from './utils/appendSDF.js';\nimport appendSmilesList from './utils/appendSmilesList.js';\nimport pushEntry from './utils/pushEntry.js';\nimport pushMoleculeInfo from './utils/pushMoleculeInfo.js';\nimport { search, searchAsync } from './utils/search.js';\n/*\n * @typedef {object} InternalStatistics\n * @property {number} counter - number of entries\n * @property {'number'|'boolean'|'string'|'object'|'mixed'} kind - kind of value\n */\n/**\n * this.db is an object with properties 'oclID' that has as value\n * an object that contains the following properties:\n * molecule: an OCL molecule instance\n * index: OCL index used for substructure searching\n * properties: all the calculates properties\n * data: array containing free data associated with this molecule\n */\nexport class MoleculesDB {\n    /**\n     * Creates an instance of MoleculesDB.\n     * @param {typeof import('openchemlib')} OCL - openchemlib library\n     * @param {object} [options={}] - Options.\n     * @param {boolean} [options.computeProperties=false]\n     * @param {boolean} [options.keepEmptyMolecules=false]\n     */\n    constructor(OCL, options = {}) {\n        const { computeProperties = false, keepEmptyMolecules = false } = options;\n        this.OCL = OCL;\n        this.db = {};\n        /**\n         * @type {Map<string, InternalStatistics>}\n         */\n        this.dataStatistics = new Map();\n        /**\n         * @type {Map<string, InternalStatistics>}\n         */\n        this.calculatedStatistics = new Map();\n        this.computeProperties = computeProperties;\n        this.keepEmptyMolecules = keepEmptyMolecules;\n        this.searcher = new OCL.SSSearcherWithIndex();\n    }\n    clear() {\n        this.db = {};\n        this.dataStatistics.clear();\n        this.calculatedStatistics.clear();\n    }\n    get nbMolecules() {\n        return Object.keys(this.db).length;\n    }\n    get nbData() {\n        let number = 0;\n        for (const entry of Object.values(this.db)) {\n            number += entry.data.length;\n        }\n        return number;\n    }\n    get statistics() {\n        const nbData = this.nbData;\n        const nbMolecules = this.nbMolecules;\n        const statistics = {\n            data: [],\n            calculated: [],\n        };\n        for (const [key, value] of this.dataStatistics.entries()) {\n            const statistic = {\n                label: key,\n                counter: value.counter,\n                kind: value.kind,\n                always: value.counter === nbData,\n                isNumber: false,\n            };\n            statistics.data.push(statistic);\n            // if kind is numeric, add minValue and maxValue. Need to go through all the values\n            if (value.kind === 'number') {\n                statistic.isNumeric = true;\n                statistic.minValue = Number.POSITIVE_INFINITY;\n                statistic.maxValue = Number.NEGATIVE_INFINITY;\n                for (const entry of Object.values(this.db)) {\n                    for (const data of entry.data) {\n                        if (data[key] < statistic.minValue) {\n                            statistic.minValue = data[key];\n                        }\n                        if (data[key] > statistic.maxValue) {\n                            statistic.maxValue = data[key];\n                        }\n                    }\n                }\n            }\n        }\n        for (const [key, value] of this.calculatedStatistics.entries()) {\n            const statistic = {\n                label: key,\n                counter: value.counter,\n                kind: value.kind,\n                always: value.counter === nbMolecules,\n                isNumeric: false,\n            };\n            statistics.calculated.push(statistic);\n            // if kind is numeric, add minValue and maxValue. Need to go through all the values\n            if (value.kind === 'number') {\n                statistic.isNumeric = true;\n                statistic.minValue = Number.POSITIVE_INFINITY;\n                statistic.maxValue = Number.NEGATIVE_INFINITY;\n                for (const entry of Object.values(this.db)) {\n                    if (entry.properties[key] < statistic.minValue) {\n                        statistic.minValue = entry.properties[key];\n                    }\n                    if (entry.properties[key] > statistic.maxValue) {\n                        statistic.maxValue = entry.properties[key];\n                    }\n                }\n            }\n        }\n        return statistics;\n    }\n    /**\n     * Append an array of entries to the current database. An entry is an object that by default should contain a 'ocl' property containing idCode and optionally index and coordinates\n     * @param {*} moleculesDB\n     * @param {object[]} entries\n     * @param {object} [options={}]\n     * @param {string} [options.idCodePath='ocl.idCode']\n     * @param {string} [options.indexPath='ocl.index']\n     * @param {string} [options.coordinatesPath='ocl.coordinates']\n     * @param {string} [options.mwPath='mw']\n     * @param {string} [options.smilesPath]\n     * @param {string} [options.molfilePath]\n     * @param {Function} [options.onStep] - call back to execute after each molecule\n     * @returns {Promise<void>}\n     */\n    appendEntries(entries, options) {\n        return appendEntries(this, entries, {\n            computeProperties: this.computeProperties,\n            ...options,\n        });\n    }\n    /**\n     * append to the current database a CSV file\n     * @param {string|ArrayBuffer} csv - text file containing the comma separated value file\n     * @param {object} [options={}] - options.\n     * @param {boolean} [options.header=true] - if the first line of the file is a header\n     * @param {boolean} [options.dynamicTyping=true] - dynamically type the data (convert values to number of boolean if possible)\n     * @param {boolean} [options.skipEmptyLines=true] - skip empty lines\n     * @param {Function} [options.onStep] - call back to execute after each molecule\n     * @returns {Promise<void>}\n     */\n    appendCSV(csv, options) {\n        return appendCSV(this, csv, options);\n    }\n    /**\n     * Append a SDF to the current database\n     * @param {string|ArrayBuffer} sdf - text file containing the sdf\n     * @param {object} [options={}] - options\n     * @param {Function} [options.onStep] - callback to execute after each molecule\n     * @param {boolean} [options.dynamicTyping=true] - Dynamically type the data\n     * @param {boolean} [options.mixedEOL=false] - Set to true if you know there is a mixture between \\r\\n and \\n\n     * @param {string} [options.eol] - Specify the end of line character. Default will be the one found in the file\n     * @returns {Promise<void>}\n     */\n    appendSDF(sdf, options) {\n        return appendSDF(this, sdf, options);\n    }\n    /**\n     * Append a list of SMILES to the current database.\n     * @param {string|ArrayBuffer} smiles - text file containing a list of smiles\n     * @param {object} [options={}] - Options\n     * @param {Function} [options.onStep] - call back to execute after each molecule\n     * @returns {Promise<void>}\n     */\n    appendSmilesList(smiles, options) {\n        return appendSmilesList(this, smiles, options);\n    }\n    /**\n     * Add a molecule to the current database.\n     * @param {import('openchemlib').Molecule} molecule - The molecule to append.\n     * @param {object} [data={}] - Options.\n     * @param {object} [moleculeInfo={}] - May contain precalculated index and mw.\n     */\n    pushEntry(molecule, data, moleculeInfo) {\n        pushEntry(this, molecule, data, moleculeInfo);\n    }\n    /**\n     * Add an entry in the database.\n     * @param {object} moleculeInfo - a molecule as a JSON that may contain the following properties: molfile, smiles, idCode, mf, index\n     * @param {object} [data={}]\n     */\n    pushMoleculeInfo(moleculeInfo, data) {\n        return pushMoleculeInfo(this, moleculeInfo, data);\n    }\n    /**\n     * Search in a MoleculesDB\n     * Inside the database all the same molecules are group together\n     * @param {string|import('openchemlib').Molecule} [query] - smiles, molfile, idlCode or instance of Molecule to look for\n     * @param {object} [options={}] - Options\n     * @param {'smiles'|'idCode'|'smarts'|'molfile'} [options.format='idCode'] - query format\n     * @param {'substructure'|'substructureOR'|'exact'|'exactNoStereo'|'similarity'} [options.mode='substructure'] - search algorithm\n     * @param {boolean} [options.flattenResult=true] - The database group the data for the same product. This allows to flatten the result\n     * @param {boolean} [options.keepMolecule=false] - keep the OCL.Molecule object in the result\n     * @param {number} [options.limit=Number.MAX_SAFE_INTEGER] - maximal number of result\n     * @returns {Array} array of object of the type {(molecule), idCode, data, properties}\n     */\n    search(query, options) {\n        return search(this, query, options);\n    }\n    /**\n     * Search in a MoleculesDB\n     * Inside the database all the same molecules are group together\n     * @param {string|import('openchemlib').Molecule} [query] - smiles, molfile, idCode or instance of Molecule to look for\n     * @param {object} [options={}] - Options.\n     * @param {'smiles'|'idCode'|'smarts'|'molfile'} [options.format='idCode'] - query format\n     * @param {'substructure'|'substructureOR'|'exact'|'exactNoStereo'|'similarity'} [options.mode='substructure'] - search algorithm\n     * @param {boolean} [options.flattenResult=true] - The database group the data for the same product. This allows to flatten the result\n     * @param {boolean} [options.keepMolecule=false] - keep the OCL.Molecule object in the result\n     * @param {number} [options.limit=Number.MAX_SAFE_INTEGER] - maximal number of result\n     * @param {number} [options.interval=100] - interval in ms to call the onStep callback\n     * @param {Function} [options.onStep] - callback to execute after each interval\n     * @param {AbortController} [options.controler] - callback to execute to check if the search should be aborted\n     * @returns {Promise<Array>} array of object of the type {(molecule), idCode, data, properties}\n     */\n    searchAsync(query, options) {\n        return searchAsync(this, query, options);\n    }\n    /**\n     * Returns an array with the current database\n     * @returns\n     */\n    getDB() {\n        return Object.keys(this.db).map((key) => this.db[key]);\n    }\n    /**\n     * Append the property `data.color` to each entry based on a data or property label\n     * {object} [options={}]\n     * {string} [options.dataLabel] name of the property from `data` to use\n     * {string} [options.propertyLabel] name of the property from `properties` to use\n     * {number} [options.colorLabel='color'] name of the property to add in data that will contain the color\n     * {number} [options.minValue]\n     * {number} [options.maxValue]\n     * {number} [options.minHue=0]\n     * {number} [options.maxHue=360]\n     * {number} [options.saturation=65] percent of color saturation\n     * {number} [options.lightness=65] percent of color lightness\n     * @param options\n     */\n    appendColor(options) {\n        appendColor(this, options);\n    }\n}\n//# sourceMappingURL=MoleculesDB.js.map","import get from 'get-value';\n/**\n * Append an array of entries to the current database. An entry is an object that by default should contain a 'ocl' property containing idCode and optionally index and coordinates\n * @param {*} moleculesDB\n * @param {object[]} entries\n * @param {object} [options={}]\n * @param {string} [options.idCodePath='ocl.idCode']\n * @param {string} [options.indexPath='ocl.index']\n * @param {string} [options.coordinatesPath='ocl.coordinates']\n * @param {string} [options.mwPath='mw']\n * @param {string} [options.smilesPath]\n * @param {string} [options.molfilePath]\n * @param {Function} [options.onStep] - call back to execute after each molecule\n * @returns\n */\nexport default async function appendEntries(moleculesDB, entries, options = {}) {\n    const { onStep, idCodePath = 'ocl.idCode', indexPath = 'ocl.index', coordinatesPath = 'ocl.coordinates', mwPath = 'mw', smilesPath, molfilePath, } = options;\n    const Molecule = moleculesDB.OCL.Molecule;\n    for (let i = 0; i < entries.length; i++) {\n        let idCode;\n        const entry = entries[i];\n        let molecule;\n        if (smilesPath) {\n            molecule = Molecule.fromSmiles(get(entry, smilesPath));\n        }\n        if (molfilePath && !molecule) {\n            molecule = Molecule.fromMolfile(get(entry, molfilePath));\n        }\n        if (!molecule) {\n            idCode = get(entry, idCodePath);\n            if (idCode) {\n                const coordinates = get(entry, coordinatesPath);\n                molecule = Molecule.fromIDCode(idCode, coordinates || false);\n            }\n        }\n        const index = get(entry, indexPath);\n        const mw = get(entry, mwPath);\n        if (onStep) {\n            // eslint-disable-next-line no-await-in-loop\n            await onStep(i + 1, entries.length);\n        }\n        if (!moleculesDB.keepEmptyMolecules &&\n            (!molecule || molecule.getAllAtoms() === 0)) {\n            continue;\n        }\n        else if (!molecule) {\n            molecule = new moleculesDB.OCL.Molecule(0, 0);\n        }\n        if (molecule) {\n            moleculesDB.pushEntry(molecule, entry, { index, mw });\n        }\n    }\n}\n//# sourceMappingURL=appendEntries.js.map","import { ensureString } from 'ensure-string';\nexport default async function appendSmilesList(moleculesDB, text, options = {}) {\n    const { onStep } = options;\n    text = ensureString(text);\n    if (typeof text !== 'string') {\n        throw new TypeError('text must be a string');\n    }\n    const smilesArray = text\n        .split(/\\r?\\n/)\n        .map((line) => line.trim())\n        .filter(Boolean);\n    for (let i = 0; i < smilesArray.length; i++) {\n        const oneSmiles = smilesArray[i];\n        moleculesDB.pushEntry(moleculesDB.OCL.Molecule.fromSmiles(oneSmiles));\n        if (onStep) {\n            // eslint-disable-next-line no-await-in-loop\n            await onStep(i + 1, smilesArray.length);\n        }\n    }\n}\n//# sourceMappingURL=appendSmilesList.js.map","export default function pushMoleculeInfo(moleculesDB, moleculeInfo, data = {}) {\n    if (typeof moleculeInfo !== 'object') {\n        throw new Error('pushMoleculeInfo requires an object as first parameter');\n    }\n    const Molecule = moleculesDB.OCL.Molecule;\n    let molecule;\n    if (moleculeInfo.molfile) {\n        molecule = Molecule.fromMolfile(moleculeInfo.molfile);\n    }\n    if (moleculeInfo.smiles)\n        molecule = Molecule.fromSmiles(moleculeInfo.smiles);\n    if (moleculeInfo.idCode) {\n        if (moleculesDB.db[moleculeInfo.idCode]) {\n            molecule = moleculesDB.db[moleculeInfo.idCode].molecule;\n        }\n        else {\n            molecule = Molecule.fromIDCode(moleculeInfo.idCode, moleculeInfo.coordinates || false);\n        }\n    }\n    if (molecule) {\n        moleculesDB.pushEntry(molecule, data, moleculeInfo);\n    }\n}\n//# sourceMappingURL=pushMoleculeInfo.js.map","export default function appendColor(moleculesDB, options = {}) {\n    const { dataLabel, propertyLabel, minValue, maxValue, minHue = 0, maxHue = 360, saturation = 65, lightness = 65, colorLabel = 'color', } = options;\n    const db = moleculesDB.getDB();\n    let values;\n    if (dataLabel) {\n        values = db.flatMap((result) => result.data.map((datum) => ({ value: datum[dataLabel], data: datum })));\n    }\n    else if (propertyLabel) {\n        values = db.flatMap((result) => result.data.map((datum) => ({\n            value: result.properties[propertyLabel],\n            data: datum,\n        })));\n    }\n    else {\n        values = db.flatMap((result) => result.data.map((datum) => ({ value: undefined, data: datum })));\n    }\n    if (minValue !== undefined) {\n        for (const value of values) {\n            if (value.value !== undefined && value.value < minValue) {\n                value.value = minValue;\n            }\n        }\n    }\n    if (maxValue !== undefined) {\n        for (const value of values) {\n            if (value.value !== undefined && value.value > maxValue) {\n                value.value = maxValue;\n            }\n        }\n    }\n    const definedValues = values.filter((value) => value.value !== undefined);\n    const min = Math.min(...definedValues.map((value) => value.value));\n    const max = Math.max(...definedValues.map((value) => value.value));\n    for (const value of values) {\n        if (value.value !== undefined) {\n            value.data[colorLabel] = `hsl(${Math.floor(((value.value - min) / (max - min)) * (maxHue - minHue) + minHue)},${saturation}%,${lightness}%)`;\n        }\n        else {\n            value.data.color = 'black';\n        }\n    }\n}\n//# sourceMappingURL=appendColor.js.map","import { applyFragmentLabels } from \"./applyFragmentLabels.js\";\nimport { autoLabelDatabase } from './autoLabelDatabase.js';\n/**\n * In place modification of the molecule to add auto labels to its atoms based on\n * a database of common substructures.\n * @param molecule\n */\nexport function autoLabel(molecule) {\n    const { Molecule } = molecule.getOCL();\n    for (const entry of autoLabelDatabase) {\n        const fragment = Molecule.fromIDCode(entry.idCode);\n        const result = applyFragmentLabels(molecule, fragment, {\n            algorithm: 'separated',\n        });\n        if (result > 0)\n            return;\n    }\n}\n//# sourceMappingURL=autoLabel.js.map","import { getMF } from '../util/getMF.js';\nimport { getRAtomicNumber } from '../util/getRAtomicNumber.js';\nexport function fragmentAcyclicSingleBonds(molecule) {\n    const OCL = molecule.getOCL();\n    const atoms = [];\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        const atom = {};\n        atoms.push(atom);\n        atom.i = i;\n        atom.links = []; // we will store connected atoms of broken bonds\n    }\n    const bonds = [];\n    for (let i = 0; i < molecule.getAllBonds(); i++) {\n        const bond = {};\n        bonds.push(bond);\n        bond.i = i;\n        bond.order = molecule.getBondOrder(i);\n        bond.atom1 = molecule.getBondAtom(0, i);\n        bond.atom2 = molecule.getBondAtom(1, i);\n        bond.type = molecule.getBondType(i);\n        bond.isAromatic = molecule.isAromaticBond(i);\n        bond.isRingBond = molecule.isRingBond(i);\n        if (!bond.isAromatic && (bond.type & 0b11) === 1 && !bond.isRingBond) {\n            bond.selected = true;\n            atoms[bond.atom1].links.push(bond.atom2);\n            atoms[bond.atom2].links.push(bond.atom1);\n        }\n    }\n    const brokenMolecule = molecule.getCompactCopy();\n    for (const bond of bonds) {\n        if (bond.selected) {\n            brokenMolecule.markBondForDeletion(bond.i);\n        }\n    }\n    brokenMolecule.deleteMarkedAtomsAndBonds();\n    const fragmentMap = [];\n    const nbFragments = brokenMolecule.getFragmentNumbers(fragmentMap);\n    const results = [];\n    for (let i = 0; i < nbFragments; i++) {\n        const result = { atomMap: [] };\n        const includeAtom = fragmentMap.map((id) => {\n            return id === i;\n        });\n        const fragment = new OCL.Molecule(0, 0);\n        const atomMap = [];\n        brokenMolecule.copyMoleculeByAtoms(fragment, includeAtom, false, atomMap);\n        // we will add some R groups at the level of the broken bonds\n        for (let j = 0; j < atomMap.length; j++) {\n            if (atomMap[j] > -1) {\n                result.atomMap.push(j);\n                if (atoms[j].links.length > 0) {\n                    for (let k = 0; k < atoms[j].links.length; k++) {\n                        fragment.addBond(atomMap[j], fragment.addAtom(getRAtomicNumber(brokenMolecule)), 1);\n                    }\n                }\n            }\n        }\n        fragment.setFragment(false);\n        result.idCode = fragment.getIDCode();\n        result.mf = getMF(fragment).mf.replace(/R[1-9]?/, '');\n        results.push(result);\n    }\n    return results;\n}\n//# sourceMappingURL=fragmentAcyclicSingleBonds.js.map","import { makeRacemic } from '../util/makeRacemic.js';\nexport function getAtomFeatures(originalMolecule, options = {}) {\n    const OCL = originalMolecule.getOCL();\n    const { sphere = 1 } = options;\n    const fragment = new OCL.Molecule(0, 0);\n    const results = [];\n    for (let rootAtom = 0; rootAtom < originalMolecule.getAllAtoms(); rootAtom++) {\n        let min = 0;\n        let max = 0;\n        const atomMask = new Array(originalMolecule.getAtoms());\n        const atomList = new Array(originalMolecule.getAtoms());\n        const molecule = originalMolecule.getCompactCopy();\n        for (let currentSphere = 0; currentSphere <= sphere; currentSphere++) {\n            if (max === 0) {\n                atomList[max] = rootAtom;\n                atomMask[rootAtom] = true;\n                max++;\n            }\n            else {\n                let newMax = max;\n                for (let i = min; i < max; i++) {\n                    const atom = atomList[i];\n                    for (let j = 0; j < molecule.getAllConnAtoms(atom); j++) {\n                        const connAtom = molecule.getConnAtom(atom, j);\n                        if (!atomMask[connAtom]) {\n                            atomMask[connAtom] = true;\n                            atomList[newMax++] = connAtom;\n                        }\n                    }\n                }\n                min = max;\n                max = newMax;\n            }\n            molecule.copyMoleculeByAtoms(fragment, atomMask, true, null);\n            if (currentSphere === sphere) {\n                makeRacemic(fragment);\n                results.push(fragment.getCanonizedIDCode());\n            }\n        }\n    }\n    const atoms = {};\n    for (const result of results) {\n        if (!atoms[result]) {\n            atoms[result] = 1;\n        }\n        else {\n            atoms[result]++;\n        }\n    }\n    return atoms;\n}\n//# sourceMappingURL=getAtomFeatures.js.map","/**\n * Returns the charge of a molecule\n * @param {import('openchemlib').Molecule} molecule - an instance of OCL.Molecule\n * @returns {number}\n */\nexport function getCharge(molecule) {\n    let charge = 0;\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        charge += molecule.getAtomCharge(i);\n    }\n    return charge;\n}\n//# sourceMappingURL=getCharge.js.map","import { getDiastereotopicAtomIDsAndH } from './getDiastereotopicAtomIDsAndH.js';\n/**\n * Parse a molfile and returns an object containing the molecule, the map and the diaIDs\n * The map allows to reload properties assigned to the atom molfile\n * Please take care than numbering of atoms starts at 0 !\n * @param {typeof import('openchemlib')} OCL - openchemlib library\n * @param {string} molfile\n * @returns\n */\nexport function getDiastereotopicAtomIDsFromMolfile(OCL, molfile) {\n    const { map, molecule } = OCL.Molecule.fromMolfileWithAtomMap(molfile);\n    const diaIDsArray = getDiastereotopicAtomIDsAndH(molecule);\n    const diaIDs = {};\n    for (let i = 0; i < map.length; i++) {\n        diaIDs[map[i]] = { source: map[i], destination: i, ...diaIDsArray[i] };\n    }\n    return { map: diaIDs, molecule, diaIDs: diaIDsArray };\n}\n//# sourceMappingURL=getDiastereotopicAtomIDsFromMolfile.js.map","import { getDiastereotopicAtomIDs } from './getDiastereotopicAtomIDs.js';\nimport { groupDiastereotopicAtomIDs } from './groupDiastereotopicAtomIDs.js';\n/**\n * This function groups the diasterotopic atomIds of the molecule based on equivalence of atoms. The output object contains\n * a set of chemically equivalent atoms(element.atoms) and the groups of magnetically equivalent atoms (element.magneticGroups)\n * @param {import('openchemlib').Molecule} molecule\n * @param {object} [options={}]\n * @param {string} [options.atomLabel] - Select atoms of the given atomLabel. By default it returns all the explicit atoms in the molecule\n * @returns {Array}\n */\nexport function getGroupedDiastereotopicAtomIDs(molecule, options = {}) {\n    const diaIDs = getDiastereotopicAtomIDs(molecule);\n    return groupDiastereotopicAtomIDs(diaIDs, molecule, options);\n}\n//# sourceMappingURL=getGroupedDiastereotopicAtomIDs.js.map","export function groupDiastereotopicAtomIDs(diaIDs, molecule, options = {}) {\n    const { atomLabel } = options;\n    const diaIDsObject = {};\n    for (let i = 0; i < diaIDs.length; i++) {\n        if (!atomLabel || molecule.getAtomLabel(i) === atomLabel) {\n            const diaID = diaIDs[i];\n            if (!diaIDsObject[diaID]) {\n                diaIDsObject[diaID] = {\n                    counter: 0,\n                    atoms: [],\n                    oclID: diaID,\n                    atomLabel: molecule.getAtomLabel(i),\n                };\n            }\n            diaIDsObject[diaID].counter++;\n            diaIDsObject[diaID].atoms.push(i);\n        }\n    }\n    return Object.keys(diaIDsObject).map((key) => diaIDsObject[key]);\n}\n//# sourceMappingURL=groupDiastereotopicAtomIDs.js.map","import { ensureHeterotopicChiralBonds } from '../diastereotopic/ensureHeterotopicChiralBonds.js';\nimport { getCompactCopyWithoutCustomLabels } from \"../util/getCompactCopyWithoutCustomLabels.js\";\nimport { tagAtom } from \"../util/tagAtom.js\";\nimport { getHoseCodesForAtomsAsStrings } from './getHoseCodesForAtomsAsStrings.js';\n/**\n * Returns the hose codes for all atoms in the molecule\n * @param {*} molecule\n * @param {object} [options={}]\n * @param {string[]} [options.atomLabels]\n * @param {number} [options.minSphereSize=0]\n * @param {number} [options.maxSphereSize=4]\n * @returns\n */\nexport function getHoseCodes(molecule, options = {}) {\n    const { atomLabels, minSphereSize, maxSphereSize } = options;\n    const { Molecule } = molecule.getOCL();\n    const atomicNumbers = atomLabels?.map((label) => Molecule.getAtomicNoFromLabel(label));\n    const internalMolecule = getCompactCopyWithoutCustomLabels(molecule);\n    internalMolecule.addImplicitHydrogens();\n    ensureHeterotopicChiralBonds(internalMolecule);\n    const hoses = [];\n    for (let i = 0; i < internalMolecule.getAllAtoms(); i++) {\n        if (atomicNumbers &&\n            !atomicNumbers.includes(internalMolecule.getAtomicNo(i))) {\n            hoses.push(undefined);\n        }\n        else {\n            const tempMolecule = internalMolecule.getCompactCopy();\n            tagAtom(tempMolecule, i);\n            hoses.push(getHoseCodesForAtomsAsStrings(tempMolecule, {\n                minSphereSize,\n                maxSphereSize,\n            }));\n        }\n    }\n    return hoses;\n}\n//# sourceMappingURL=getHoseCodes.js.map","import { ensureHeterotopicChiralBonds } from '../diastereotopic/ensureHeterotopicChiralBonds.js';\nimport { getCompactCopyWithoutCustomLabels } from \"../util/getCompactCopyWithoutCustomLabels.js\";\nimport { getConnectivityMatrix } from '../util/getConnectivityMatrix.js';\nimport { getSymmetryRanks } from '../util/getSymmetryRanks.js';\nimport { makeRacemic } from '../util/makeRacemic.js';\nimport { tagAtom } from \"../util/tagAtom.js\";\nimport { getHoseCodesForAtomsAsStrings } from './getHoseCodesForAtomsAsStrings.js';\n/**\n * Returns an object containing a molfile, molfile with hydrogens, hoses codes and optionally the diaIDs\n * and the diaIDs\n * The map allows to reload properties assigned to the atom molfile\n * Please take care than numbering of atoms starts at 0 !\n * @param {import('openchemlib').Molecule} molecule\n * @param {object} [options={}]\n * @param {string[]} [options.atomLabels]\n * @param {boolean} [options.calculateDiastereotopicIDs=true]\n * @param {number} [options.minSphereSize=0]\n * @param {number} [options.maxSphereSize=4]\n * @returns\n */\nexport function getHoseCodesAndInfo(molecule, options = {}) {\n    const { minSphereSize, maxSphereSize, calculateDiastereotopicIDs = true, } = options;\n    const { Molecule } = molecule.getOCL();\n    molecule = molecule.getCompactCopy();\n    // this will force reordering of the hydrogens to the end, just to have the same order as in the molfile\n    molecule.ensureHelperArrays(Molecule.cHelperNeighbours);\n    const newMolfile = molecule.toMolfile();\n    molecule.addImplicitHydrogens();\n    ensureHeterotopicChiralBonds(molecule);\n    molecule.ensureHelperArrays(Molecule.cHelperSymmetryStereoHeterotopicity);\n    const newMolfileWithH = molecule.toMolfile();\n    const symmetryRanks = getSymmetryRanks(molecule);\n    const cache = {};\n    const hoses = [];\n    const diaIDs = [];\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        const rank = symmetryRanks[i];\n        if (rank && cache[rank]) {\n            diaIDs.push(cache[rank].diaID);\n            hoses.push(cache[rank].hose);\n            continue;\n        }\n        const tempMolecule = getCompactCopyWithoutCustomLabels(molecule);\n        tagAtom(tempMolecule, i);\n        let diaID;\n        if (calculateDiastereotopicIDs) {\n            makeRacemic(tempMolecule);\n            diaID = tempMolecule.getCanonizedIDCode(Molecule.CANONIZER_ENCODE_ATOM_CUSTOM_LABELS);\n            diaIDs.push(diaID);\n        }\n        const hose = getHoseCodesForAtomsAsStrings(tempMolecule, {\n            minSphereSize,\n            maxSphereSize,\n        });\n        hoses.push(hose);\n        cache[rank] = { diaID, hose };\n    }\n    const distanceMatrix = getConnectivityMatrix(molecule, { pathLength: true });\n    return {\n        molfile: newMolfile,\n        molfileWithH: newMolfileWithH,\n        hoses,\n        diaIDs: calculateDiastereotopicIDs ? diaIDs : undefined,\n        moleculeWithHydrogens: molecule,\n        distanceMatrix,\n    };\n}\n//# sourceMappingURL=getHoseCodesAndInfo.js.map","import { getHoseCodesForAtoms } from './getHoseCodesForAtoms.js';\n/**\n * Returns the hose code for a specific atom number\n * @param {import('openchemlib').Molecule} originalMolecule\n * @param {number} rootAtom\n * @param {object} [options={}]\n * @param {boolean} [options.isTagged] - Specify is the atom is already tagged\n * @param {number} [options.minSphereSize=0] - Smallest hose code sphere\n * @param {number} [options.maxSphereSize=4] - Largest hose code sphere\n * @param {number} [options.kind=FULL_HOSE_CODE] - Kind of hose code, default usual sphere\n */\nexport function getHoseCodesForAtom(originalMolecule, rootAtom, options = {}) {\n    return getHoseCodesForAtoms(originalMolecule, [rootAtom], options);\n}\n//# sourceMappingURL=getHoseCodesForAtom.js.map","import { ensureHeterotopicChiralBonds } from '../diastereotopic/ensureHeterotopicChiralBonds.js';\nimport { getHoseCodesForAtomsAsStrings } from './getHoseCodesForAtomsAsStrings.js';\n/**\n * Returns an array of strings (idCodes) specified molecule. Each string corresponds to a\n * hose code. By default it will calculate the hose codes for sphere 0 to 4 and will reuse\n * the existing tagged atoms.\n * This method ensure implicity hydrogens and possible missing chiral bonds.\n * @param {import('openchemlib').Molecule} molecule - The OCL molecule to process.\n * @param {object} options - Options for generating hose codes.\n * @param {string[]} [options.allowedCustomLabels] - Array of the custom labels that are considered as root atoms. By default all atoms having a customLabel\n * @param {number} [options.minSphereSize=0] - Smallest hose code sphere\n * @param {number} [options.maxSphereSize=4] - Largest hose code sphere\n * @param {number} [options.kind=FULL_HOSE_CODE] - Kind of hose code, default usual sphere\n *  @param {number[]} [options.rootAtoms=[]] - Array of atom from which we should start to create the HOSE. By default we will used the taggedAtoms\n * @param {number[]} [options.tagAtoms=[]] - Array of atom indices to tag as root atoms\n * @param {Function} [options.tagAtomFct=tagAtom] - Function to tag an atom as root atom. By default it is defined internal\n * @returns {Array} - An array of hose code fragments.\n */\nexport function getHoseCodesFromDiastereotopicID(molecule, options = {}) {\n    molecule.addImplicitHydrogens();\n    ensureHeterotopicChiralBonds(molecule);\n    return getHoseCodesForAtomsAsStrings(molecule, options);\n}\n//# sourceMappingURL=getHoseCodesFromDiastereotopicID.js.map","export function getImplicitHydrogensCount(molecule, atomID) {\n    return molecule.getImplicitHydrogens(atomID);\n}\n//# sourceMappingURL=getImplicitHydrogensCount.js.map","/**\n * We have 2 molfiles and we would like to map the atom number from one to the other.\n * We expect that both molfiles contain the same atoms that can be in a different order.\n * @param {typeof import('openchemlib')} OCL - openchemlib library\n * @param {string} from\n * @param {string} to\n * @returns {{fromTo: number[], toFrom: number[]}} - fromTo is an array of the same length as the number of atoms in the from molfile. Each element is the index of the corresponding atom in the to molfile. toFrom is the opposite.\n */\nexport function getMolfilesMapping(OCL, from, to) {\n    const { Molecule } = OCL;\n    const fromF = from.replaceAll(' H ', ' X ');\n    const toF = to.replaceAll(' H ', ' X ');\n    // we may ignore mapping because we should not have hydrogens anymore\n    const fromMoleculeF = Molecule.fromMolfile(fromF);\n    const toMoleculeF = Molecule.fromMolfile(toF);\n    if (fromMoleculeF.getIDCode() !== toMoleculeF.getIDCode()) {\n        // only a problem of hydrogens ?\n        const fromMolecule = Molecule.fromMolfile(from);\n        const toMolecule = Molecule.fromMolfile(to);\n        if (fromMolecule.getIDCode() === toMolecule.getIDCode()) {\n            throw new Error('Molecules do not have the same explicit hydrogens');\n        }\n        else {\n            throw new Error('Molecules are different');\n        }\n    }\n    const fromFinalRanks = [...fromMoleculeF.getFinalRanks()];\n    const toFinalRanks = [...toMoleculeF.getFinalRanks()];\n    // need now to create the mapping\n    const fromTo = [];\n    const toFrom = [];\n    for (let i = 0; i < fromFinalRanks.length; i++) {\n        const fromRank = fromFinalRanks[i];\n        const toRank = toFinalRanks.indexOf(fromRank);\n        if (toRank === -1) {\n            throw new Error('Rank not found. This should never happen.');\n        }\n        fromTo[i] = toRank;\n        toFrom[toRank] = i;\n    }\n    return { fromTo, toFrom };\n}\n//# sourceMappingURL=getMolfilesMapping.js.map","import { getNMRHints } from \"./getNMRHints.js\";\n/**\n *\n * @param correct\n * @param proposed\n * @param providedHints\n */\nexport function getNextNMRHint(correct, proposed, providedHints) {\n    const hints = getNMRHints(correct, proposed);\n    const possibleHints = hints.filter((possibleHint) => !providedHints.some((providedHint) => possibleHint.hash === providedHint.hash));\n    if (possibleHints.length === 0)\n        return undefined;\n    return {\n        ...possibleHints[0],\n        idCode: proposed.getIDCode(),\n    };\n}\n//# sourceMappingURL=getNextNMRHint.js.map","/**\n * Get the shortest path between each pair of atoms in the molecule\n * @param {import('openchemlib').Molecule} molecule\n * @param {object} [options={}]\n * @param {string} [options.fromLabel='H']\n * @param {string} [options.toLabel='H']\n * @param {number} [options.maxLength=4]\n * @returns {Array<Array>} A matrix containing on each cell (i,j) the shortest path from atom i to atom j\n */\nexport function getShortestPaths(molecule, options = {}) {\n    const OCL = molecule.getOCL();\n    const { fromLabel = '', toLabel = '', maxLength = 3 } = options;\n    const fromAtomicNumber = OCL.Molecule.getAtomicNoFromLabel(fromLabel);\n    const toAtomicNumber = OCL.Molecule.getAtomicNoFromLabel(toLabel);\n    const nbAtoms = molecule.getAllAtoms();\n    const allShortestPaths = new Array(nbAtoms);\n    for (let i = 0; i < nbAtoms; i++) {\n        allShortestPaths[i] = new Array(nbAtoms);\n    }\n    for (let from = 0; from < nbAtoms; from++) {\n        allShortestPaths[from][from] = [from];\n        for (let to = from + 1; to < nbAtoms; to++) {\n            if ((fromAtomicNumber === 0 ||\n                molecule.getAtomicNo(from) === fromAtomicNumber) &&\n                (toAtomicNumber === 0 || molecule.getAtomicNo(to) === toAtomicNumber)) {\n                const path = [];\n                molecule.getPath(path, from, to, maxLength);\n                if (path.length > 0) {\n                    allShortestPaths[from][to] = path.slice();\n                    allShortestPaths[to][from] = path.toReversed();\n                }\n                else {\n                    allShortestPaths[from][to] = null;\n                    allShortestPaths[to][from] = null;\n                }\n            }\n            else {\n                allShortestPaths[from][to] = null;\n                allShortestPaths[to][from] = null;\n            }\n        }\n    }\n    return allShortestPaths;\n}\n//# sourceMappingURL=getShortestPaths.js.map","/**\n * Return the number of Carbonyl groups in a molecule or fragment\n * @param {import('openchemlib').Molecule} molecule\n * @returns {number} 'Number of Carbonyl groups'\n */\nexport function nbCHO(molecule) {\n    let counter = 0;\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        // if there is not at least one hydrogen in the carbon atom there can not be a carbonyl group\n        if (molecule.getAtomicNo(i) === 6 && molecule.getAllHydrogens(i) > 0) {\n            let carbonyl = false;\n            let carbonOrHydrogen = true;\n            for (let neighbour = 0; neighbour < molecule.getConnAtoms(i); neighbour++) {\n                const neighbourAtom = molecule.getConnAtom(i, neighbour);\n                const neighbourBond = molecule.getConnBond(i, neighbour);\n                if (molecule.getAtomicNo(neighbourAtom) === 8) {\n                    if (molecule.getBondOrder(neighbourBond) === 2) {\n                        // If there is more than one carbonyl group on the same carbon atom they are not counted as carbonyl groups\n                        if (carbonyl) {\n                            carbonyl = false;\n                            break;\n                        }\n                        carbonyl = true;\n                    }\n                }\n                else if (\n                // If there is not at least one carbon or hydrogen as neighbour atom it is not counted as Carbonyl group\n                molecule.getAtomicNo(neighbourAtom) !== 6 &&\n                    molecule.getAtomicNo(neighbourAtom) !== 1) {\n                    carbonOrHydrogen = false;\n                }\n            }\n            if (carbonyl && carbonOrHydrogen)\n                counter++;\n        }\n    }\n    return counter;\n}\n//# sourceMappingURL=nbCHO.js.map","/**\n * Return the number of Nitrile groups in a molecule or fragment\n * @param {import('openchemlib').Molecule} molecule\n * @returns {number} 'Number of Nitrile groups'\n */\nexport function nbCN(molecule) {\n    let counter = 0;\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        if (molecule.getAtomicNo(i) === 6) {\n            let cn = false;\n            let carbonOrHydrogen = true;\n            for (let neighbour = 0; neighbour < molecule.getConnAtoms(i); neighbour++) {\n                const neighbourAtom = molecule.getConnAtom(i, neighbour);\n                const neighbourBond = molecule.getConnBond(i, neighbour);\n                if (molecule.getAtomicNo(neighbourAtom) === 7 &&\n                    molecule.getBondOrder(neighbourBond) === 3) {\n                    // If there is more than one Nitrile group in the same carbon atome they are not counted as Nitrile groups\n                    if (cn) {\n                        cn = false;\n                        break;\n                    }\n                    cn = true;\n                }\n                else if (\n                // If there is not at least one carbon or hydrogen as neighbour atom it is not counted as Nitrile group\n                molecule.getAtomicNo(neighbourAtom) !== 6 &&\n                    molecule.getAtomicNo(neighbourAtom) !== 1) {\n                    carbonOrHydrogen = false;\n                }\n            }\n            if (cn && carbonOrHydrogen)\n                counter++;\n        }\n    }\n    return counter;\n}\n//# sourceMappingURL=nbCN.js.map","/**\n * Return the number of Carboxyl groups in a molecule or fragment\n * @param {import('openchemlib').Molecule} molecule\n * @returns {number} 'Number of Carboxyl groups'\n */\nexport function nbCOOH(molecule) {\n    let counter = 0;\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        if (molecule.getAtomicNo(i) === 6) {\n            let carbonyl = false;\n            let hydroxyl = false;\n            let carbonOrHydrogen = true;\n            for (let neighbour = 0; neighbour < molecule.getConnAtoms(i); neighbour++) {\n                const neighbourAtom = molecule.getConnAtom(i, neighbour);\n                const neighbourBond = molecule.getConnBond(i, neighbour);\n                if (molecule.getAtomicNo(neighbourAtom) === 8) {\n                    if (molecule.getBondOrder(neighbourBond) === 1 &&\n                        molecule.getAllHydrogens(neighbourAtom) > 0) {\n                        // If there is more than a Hydroxyl in the same carbon atom it is not couted as Carboxyl group\n                        if (hydroxyl) {\n                            hydroxyl = false;\n                            break;\n                        }\n                        hydroxyl = true;\n                    }\n                    else if (molecule.getBondOrder(neighbourBond) === 2) {\n                        // If there is more than one carbonyl in the same carbon atom it is not count as Carboxyl group\n                        if (carbonyl) {\n                            carbonyl = false;\n                            break;\n                        }\n                        carbonyl = true;\n                    }\n                }\n                else if (\n                // If there is not at least one carbon or hydrogen as neighbour atom it is not counted as Carboxyl group\n                molecule.getAtomicNo(neighbourAtom) !== 6 &&\n                    molecule.getAtomicNo(neighbourAtom) !== 1) {\n                    carbonOrHydrogen = false;\n                }\n            }\n            if (carbonyl && hydroxyl && carbonOrHydrogen)\n                counter++;\n        }\n    }\n    return counter;\n}\n//# sourceMappingURL=nbCOOH.js.map","/**\n * Return the number of labile protons being either on O, N, Br, Cl, F, I or S\n * @param {import('openchemlib').Molecule} molecule\n * @param {object} [options={}]\n * @param {Array<number>} [options.atomicNumbers=[7, 8, 9, 16, 17, 35, 53]] - atomic numbers of the labile protons\n * @returns {number} 'Number of labile protons'\n */\nexport function nbLabileH(molecule, options = {}) {\n    const { atomicNumbers = [7, 8, 9, 16, 17, 35, 53] } = options;\n    let counter = 0;\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        if (atomicNumbers.includes(molecule.getAtomicNo(i))) {\n            counter += molecule.getAllHydrogens(i);\n        }\n    }\n    return counter;\n}\n//# sourceMappingURL=nbLabileH.js.map","/**\n * Return the number of Primary amine groups in a molecule or fragment\n * @param {import('openchemlib').Molecule} molecule\n * @returns {number} 'Number of Primary amine groups'\n */\nexport function nbNH2(molecule) {\n    let counter = 0;\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        if (molecule.getAtomicNo(i) === 6) {\n            let amine = false;\n            let carbonOrHydrogen = true;\n            for (let neighbour = 0; neighbour < molecule.getConnAtoms(i); neighbour++) {\n                const neighbourAtom = molecule.getConnAtom(i, neighbour);\n                const neighbourBond = molecule.getConnBond(i, neighbour);\n                if (molecule.getAtomicNo(neighbourAtom) === 7 &&\n                    molecule.getBondOrder(neighbourBond) === 1 &&\n                    molecule.getAllHydrogens(neighbourAtom) > 1) {\n                    // If there is more than a Primary amine in the same carbon atom they are not couted as Primary amines groups\n                    if (amine) {\n                        amine = false;\n                        break;\n                    }\n                    amine = true;\n                }\n                else if (\n                // If there is not at least one carbon or hydrogen as neighbour atom it is not counted as Primary amine group\n                molecule.getAtomicNo(neighbourAtom) !== 6 &&\n                    molecule.getAtomicNo(neighbourAtom) !== 1) {\n                    carbonOrHydrogen = false;\n                }\n            }\n            if (amine && carbonOrHydrogen)\n                counter++;\n        }\n    }\n    return counter;\n}\n//# sourceMappingURL=nbNH2.js.map","/**\n * Return the number of Hydroxyl groups in a molecule or fragment\n * @param {import('openchemlib').Molecule} molecule\n * @returns {number} 'Number of Hydroxyl groups'\n */\nexport function nbOH(molecule) {\n    let counter = 0;\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        if (molecule.getAtomicNo(i) === 6) {\n            let carbonyl = false;\n            let hydroxyl = false;\n            let carbonOrHydrogen = true;\n            for (let neighbour = 0; neighbour < molecule.getConnAtoms(i); neighbour++) {\n                const neighbourAtom = molecule.getConnAtom(i, neighbour);\n                const neighbourBond = molecule.getConnBond(i, neighbour);\n                if (molecule.getAtomicNo(neighbourAtom) === 8) {\n                    if (molecule.getBondOrder(neighbourBond) === 1 &&\n                        molecule.getAllHydrogens(neighbourAtom) > 0) {\n                        // If there is more than a Hydroxyl in the same carbon atome they are not couted as Hydroxyl groups\n                        if (hydroxyl) {\n                            hydroxyl = false;\n                            break;\n                        }\n                        hydroxyl = true;\n                    }\n                    else if (molecule.getBondOrder(neighbourBond) === 2) {\n                        // If there is Carbonyl group on the same carbon atom it is not couted as Hydroxyl group\n                        carbonyl = true;\n                    }\n                }\n                else if (\n                // If there is not at least one carbon or hydrogen as neighbour atom it is not counted as Hydroxyl group\n                molecule.getAtomicNo(neighbourAtom) !== 6 &&\n                    molecule.getAtomicNo(neighbourAtom) !== 1) {\n                    carbonOrHydrogen = false;\n                }\n            }\n            if (!carbonyl && hydroxyl && carbonOrHydrogen)\n                counter++;\n        }\n    }\n    return counter;\n}\n//# sourceMappingURL=nbOH.js.map","import { getCamelCase } from './getCamelCase.js';\nexport function getParts(text) {\n    const lines = text.split(/\\r?\\n/);\n    const parts = { data: [] };\n    let currentPart = parts.data;\n    let currentLabel = '';\n    for (const line of lines) {\n        if (line.startsWith('</')) {\n            // close existing part\n            if (currentLabel !== line.slice(2, -1)) {\n                throw new Error('This should not happen');\n            }\n            currentLabel = '';\n            currentPart = parts.data;\n        }\n        else if (line.startsWith('<') && !line.includes('=')) {\n            // open new part\n            if (currentLabel) {\n                throw new Error('This should not happen');\n            }\n            currentLabel = line.slice(1, -1);\n            const target = getCamelCase(currentLabel);\n            parts[target] = [];\n            currentPart = parts[target];\n        }\n        else if (currentLabel) {\n            // add line to current part\n            currentPart.push(line);\n        }\n        else {\n            //data lines\n            currentPart.push(line);\n        }\n    }\n    return parts;\n}\n//# sourceMappingURL=getParts.js.map","import { getDiastereotopicAtomIDsAndH } from './getDiastereotopicAtomIDsAndH.js';\n/**\n * Returns a SVG\n * @param {*} molecule\n * @param {*} [options={}]\n */\nexport function toDiastereotopicSVG(molecule, options = {}) {\n    const { width = 300, height = 200, prefix = 'ocl', heavyAtomHydrogen = false, } = options;\n    let svg = options.svg;\n    let diaIDs = [];\n    const hydrogenInfo = {};\n    for (const line of getDiastereotopicAtomIDsAndH(molecule)) {\n        hydrogenInfo[line.oclID] = line;\n    }\n    if (heavyAtomHydrogen) {\n        for (let i = 0; i < molecule.getAtoms(); i++) {\n            diaIDs.push([]);\n        }\n        const groupedDiaIDs = molecule.getGroupedDiastereotopicAtomIDs();\n        for (const diaID of groupedDiaIDs) {\n            if (hydrogenInfo[diaID.oclID] &&\n                hydrogenInfo[diaID.oclID].nbHydrogens > 0) {\n                for (const atom of diaID.atoms) {\n                    for (const id of hydrogenInfo[diaID.oclID].hydrogenOCLIDs) {\n                        if (!diaIDs[atom * 1].includes(id))\n                            diaIDs[atom].push(id);\n                    }\n                }\n            }\n        }\n    }\n    else {\n        diaIDs = molecule.getDiastereotopicAtomIDs().map((a) => [a]);\n    }\n    if (!svg)\n        svg = molecule.toSVG(width, height, prefix);\n    svg = svg.replaceAll(/Atom:\\d+\"/g, (value) => {\n        const atom = value.replaceAll(/\\D/g, '');\n        return `${value} data-diaid=\"${diaIDs[atom].join(',')}\"`;\n    });\n    return svg;\n}\n//# sourceMappingURL=toDiastereotopicSVG.js.map","import { getDiastereotopicAtomIDs } from '../diastereotopic/getDiastereotopicAtomIDs.js';\n/**\n * Convert a molecule to a molfile object compatible with the visualizer.\n * @param {import('openchemlib').Molecule} molecule - The molecule to convert.\n * @param {object} [options={}] - Options to control atom highlighting and grouping.\n * @param {boolean} [options.diastereotopic] - If true, group atoms by diastereotopic IDs.\n * @param {boolean} [options.atomMapNo] - If true, group atoms by their atom map number. Atoms with no map number (0) are excluded from highlighting.\n * @param {boolean} [options.customAtomLabel] - If true, group atoms by their custom atom label. Atoms with no custom label are excluded from highlighting.\n * @param {boolean} [options.heavyAtomHydrogen] - If true, copy each hydrogen's highlight label to its parent heavy atom. When used with diastereotopic, implicit hydrogens are added internally to compute their diastereotopic IDs.\n * @param {boolean} [options.collapseHydrogens] - If true, remove explicit hydrogens from the molfile. Implies heavyAtomHydrogen.\n * @returns {{ type: string, value: string, _highlight: Array, _atoms: object }} A molfile object with highlight and atom mapping information.\n */\nexport function toVisualizerMolfile(molecule, options = {}) {\n    const { diastereotopic, atomMapNo, customAtomLabel, heavyAtomHydrogen, collapseHydrogens, } = options;\n    const copyH = heavyAtomHydrogen || collapseHydrogens;\n    // Work on a copy to avoid mutating the original molecule.\n    // When heavyAtomHydrogen is used with diastereotopic, add implicit H\n    // so we can compute their diastereotopic IDs.\n    let labelMolecule = molecule.getCompactCopy();\n    const { Molecule } = labelMolecule.getOCL();\n    if (heavyAtomHydrogen && diastereotopic) {\n        labelMolecule.addImplicitHydrogens();\n    }\n    labelMolecule.ensureHelperArrays(Molecule.cHelperNeighbours);\n    // Phase 1: Label all atoms based on the chosen mode\n    // Build groups: label → [atomIndices]\n    const groups = {};\n    if (diastereotopic) {\n        const diaIDs = getDiastereotopicAtomIDs(labelMolecule);\n        for (let i = 0; i < diaIDs.length; i++) {\n            const label = diaIDs[i];\n            if (!groups[label]) {\n                groups[label] = [];\n            }\n            if (!groups[label].includes(i)) {\n                groups[label].push(i);\n            }\n        }\n    }\n    else if (customAtomLabel) {\n        for (let i = 0; i < labelMolecule.getAllAtoms(); i++) {\n            const label = labelMolecule.getAtomCustomLabel(i);\n            if (!label)\n                continue;\n            if (!groups[label]) {\n                groups[label] = [];\n            }\n            groups[label].push(i);\n        }\n    }\n    else if (atomMapNo) {\n        for (let i = 0; i < labelMolecule.getAllAtoms(); i++) {\n            const mapNo = labelMolecule.getAtomMapNo(i);\n            if (mapNo === 0)\n                continue;\n            if (!groups[mapNo]) {\n                groups[mapNo] = [];\n            }\n            groups[mapNo].push(i);\n        }\n    }\n    else {\n        for (let i = 0; i < labelMolecule.getAllAtoms(); i++) {\n            groups[i] = [i];\n        }\n    }\n    // Phase 2: If heavyAtomHydrogen or collapseHydrogens, copy each hydrogen's\n    // label entries to its parent heavy atom\n    if (copyH) {\n        for (const atomIndices of Object.values(groups)) {\n            for (const atomIndex of atomIndices) {\n                if (labelMolecule.getAtomicNo(atomIndex) !== 1)\n                    continue;\n                if (labelMolecule.getAllConnAtoms(atomIndex) === 0)\n                    continue;\n                const heavyAtom = labelMolecule.getConnAtom(atomIndex, 0);\n                if (!atomIndices.includes(heavyAtom)) {\n                    atomIndices.push(heavyAtom);\n                }\n            }\n        }\n    }\n    // Phase 3: Remove H atoms from groups and remap indices.\n    // This runs when collapseHydrogens is set, or when we internally added H\n    // for heavyAtomHydrogen with diastereotopic (to restore the original atom count).\n    const shouldCollapse = collapseHydrogens || (heavyAtomHydrogen && diastereotopic);\n    if (shouldCollapse) {\n        const totalAtoms = labelMolecule.getAllAtoms();\n        const isHydrogen = new Array(totalAtoms).fill(false);\n        const atomsToDelete = [];\n        for (let i = 0; i < totalAtoms; i++) {\n            if (labelMolecule.getAtomicNo(i) === 1) {\n                isHydrogen[i] = true;\n                atomsToDelete.push(i);\n            }\n        }\n        // Build index remap: old index → new index for non-H atoms\n        const indexRemap = new Map();\n        let newIdx = 0;\n        for (let i = 0; i < totalAtoms; i++) {\n            if (!isHydrogen[i]) {\n                indexRemap.set(i, newIdx++);\n            }\n        }\n        // Remap atom indices in groups: remove H, remap heavy atoms\n        for (const label of Object.keys(groups)) {\n            groups[label] = groups[label]\n                .filter((i) => !isHydrogen[i])\n                .map((i) => indexRemap.get(i));\n            if (groups[label].length === 0) {\n                delete groups[label];\n            }\n        }\n        if (collapseHydrogens) {\n            labelMolecule.deleteAtoms(atomsToDelete);\n        }\n    }\n    // Build highlight and atoms from groups\n    const highlight = [];\n    const atoms = {};\n    for (const label of Object.keys(groups)) {\n        highlight.push(atomMapNo ? Number(label) : label);\n        atoms[label] = groups[label];\n    }\n    // Use the original molecule for the molfile unless we collapsed H\n    const outputMolecule = collapseHydrogens ? labelMolecule : molecule;\n    return {\n        type: 'mol2d',\n        value: outputMolecule.toMolfile(),\n        _highlight: highlight,\n        _atoms: atoms,\n    };\n}\n//# sourceMappingURL=toVisualizerMolfile.js.map","/**\n * Toggle presence of implicity hydrogens on/off\n * @param molecule\n * @param atomID\n */\nexport function toggleHydrogens(molecule, atomID) {\n    if (molecule.getImplicitHydrogens(atomID) === 0) {\n        const atomsToDelete = [];\n        for (let i = 0; i < molecule.getAllConnAtoms(atomID); i++) {\n            const connectedAtom = molecule.getConnAtom(atomID, i);\n            if (molecule.getAtomicNo(connectedAtom) === 1) {\n                atomsToDelete.push(connectedAtom);\n            }\n        }\n        molecule.deleteAtoms(atomsToDelete);\n    }\n    else {\n        molecule.addImplicitHydrogens(atomID);\n    }\n}\n//# sourceMappingURL=toggleHydrogens.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fragmentAcyclicBonds = fragmentAcyclicBonds;\nconst mf_parser_1 = require(\"mf-parser\");\nconst openchemlib_utils_1 = require(\"openchemlib-utils\");\n/**\n * The function performs the fragmentation of all single linear bonds\n * @param {import('openchemlib').Molecule} molecule - The OCL molecule to be fragmented\n * @param {object} [options={}]\n * @param {boolean} [options.calculateHoseCodes=false] - calculating hose code for bonds is quite time consuming\n * @param {string} [options.parentIDCode=molecule.getIDCode()]\n * @returns Results fragmentation of acyclic bonds\n */\nfunction fragmentAcyclicBonds(molecule, options = {}) {\n    const { Molecule } = molecule.getOCL();\n    const { calculateHoseCodes, parentIDCode = molecule.getIDCode() } = options;\n    let atoms = [];\n    // Prepare object with lenght equal to number of atoms\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        let atom = {};\n        atoms.push(atom);\n        atom.i = i;\n        atom.links = [];\n    }\n    let bonds = [];\n    for (let i = 0; i < molecule.getAllBonds(); i++) {\n        let bond = {\n            index: i,\n            order: molecule.getBondOrder(i),\n            atom1: molecule.getBondAtom(0, i),\n            atom2: molecule.getBondAtom(1, i),\n            type: molecule.getBondType(i),\n            isAromatic: molecule.isAromaticBond(i),\n            isRingBond: molecule.isRingBond(i),\n            selected: false,\n        };\n        // Mapping of bonds to be fragmented, only if they are single bond not aromatic and cyclic the mapping occurs\n        if (bond.isAromatic ||\n            bond.type > 1 ||\n            bond.isRingBond ||\n            bond.order !== 1) {\n            continue;\n        }\n        else {\n            bond.selected = true;\n            atoms[bond.atom1].links.push(bond.atom2);\n            atoms[bond.atom2].links.push(bond.atom1);\n        }\n        bonds.push(bond);\n    }\n    let brokenMolecule = {};\n    let fragmentMap = [];\n    let nbFragments = 0;\n    let results = [];\n    for (let bond of bonds) {\n        if (bond.selected) {\n            // if bond.selected is true (line 46) the molecule will be fragmented\n            brokenMolecule[bond.index] = molecule.getCompactCopy(); // get a copy of the molecule\n            brokenMolecule[bond.index].setAtomCustomLabel(bond.atom1, '*');\n            brokenMolecule[bond.index].setAtomCustomLabel(bond.atom2, '*');\n            brokenMolecule[bond.index].markBondForDeletion(bond.index); //mark bond to be deleted\n            // the function returns an array of map\n            brokenMolecule[bond.index].deleteMarkedAtomsAndBonds(); // delete marked bonds\n        }\n        nbFragments = brokenMolecule[bond.index].getFragmentNumbers(fragmentMap);\n        // only if there are 2 fragments code can continue\n        if (nbFragments === 2) {\n            for (let i = 0; i < nbFragments; i++) {\n                const result = {};\n                if (calculateHoseCodes) {\n                    result.hoses = (0, openchemlib_utils_1.getHoseCodesForAtoms)(molecule, [\n                        bond.atom1,\n                        bond.atom2,\n                    ]);\n                }\n                result.atomMap = [];\n                // assign fragment id to index of for loop\n                let includeAtom = fragmentMap.map((id) => {\n                    return id === i;\n                });\n                let fragment = new Molecule(100, 100);\n                let atomMap = [];\n                brokenMolecule[bond.index].copyMoleculeByAtoms(fragment, includeAtom, false, atomMap);\n                for (let j = 0; j < atomMap.length; j++) {\n                    if (fragment.getAtomCustomLabel(atomMap[j]) === '*') {\n                        result.atomMap.push(j);\n                        if (atoms[j].links.length > 0) {\n                            fragment.addBond(atomMap[j], fragment.addAtom(154));\n                        }\n                    }\n                }\n                fragment.removeAtomCustomLabels();\n                fragment.setFragment(false);\n                result.idCode = fragment.getIDCode();\n                result.parentIDCode = parentIDCode;\n                result.cleavedBonds = [\n                    {\n                        index: bond.index,\n                        order: bond.order,\n                        atom1: bond.atom1,\n                        atom2: bond.atom2,\n                    },\n                ];\n                result.mfInfo = new mf_parser_1.MF((0, openchemlib_utils_1.getMF)(fragment).mf.replace(/R[1-9]?/, '')).getInfo();\n                result.fragmentType = 'acyclic';\n                results.push(result);\n            }\n        }\n    }\n    // sort result in order fragment 1-2; 3-4; ...\n    results = results.toSorted((a, b) => {\n        return a.mfInfo.monoisotopicMass - b.mfInfo.monoisotopicMass;\n    });\n    return results;\n}\n//# sourceMappingURL=fragmentAcyclicBonds.js.map","\"use strict\";\n/**\n * This function returns ringBond, and object that contains information about the bonds of each ring\n * @param {import('openchemlib').Molecule} molecule - The OCL molecule to be fragmented\n * @returns Information of ring bonds for each ring in the molecule\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getRingsInfo = getRingsInfo;\nfunction getRingsInfo(molecule) {\n    const ringSet = molecule.getRingSet();\n    let ringBonds = [];\n    // create a new array with the length of the number of bonds in the molecule and fills it with 0\n    let nbRingForBonds = new Array(molecule.getAllBonds()).fill(0);\n    for (let i = 0; i < ringSet.getSize(); i++) {\n        for (let bond of ringSet.getRingBonds(i)) {\n            nbRingForBonds[bond]++;\n        }\n    }\n    for (let i = 0; i < ringSet.getSize(); i++) {\n        ringBonds.push({\n            bonds: ringSet.getRingBonds(i).map((bondIndex) => ({\n                index: bondIndex,\n                ringIndex: i,\n                nbRings: nbRingForBonds[bondIndex], // in how many rings this bond is included\n                order: molecule.getBondOrder(bondIndex),\n                isAromatic: ringSet.isAromatic(i),\n                atom1: molecule.getBondAtom(0, bondIndex),\n                atom2: molecule.getBondAtom(1, bondIndex),\n            })),\n        });\n    }\n    return ringBonds;\n}\n//# sourceMappingURL=getRingsInfo.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getFragmentableRings = getFragmentableRings;\nconst getRingsInfo_js_1 = require(\"./getRingsInfo.js\");\n/**\n * This function returns an array of objects with all combination of 2 bonds who can be fragmented in the same ring\n * @param {import('openchemlib').Molecule} molecule - The OCL molecule to be fragmented\n * @returns All combination of 2 bonds who can be fragmented in the same ring\n */\nfunction getFragmentableRings(molecule) {\n    let ringsInfo = (0, getRingsInfo_js_1.getRingsInfo)(molecule);\n    let fragmentableRingBonds = [];\n    for (let ring = 0; ring < ringsInfo.length; ring++) {\n        let bonds = ringsInfo[ring].bonds;\n        // we prevent to consecutive bonds to be cleaved\n        for (let first = 0; first < bonds.length; first++) {\n            let end = first === 0 ? bonds.length - 1 : bonds.length;\n            for (let second = first + 2; second < end; second++) {\n                if (bonds[first].order === 1 &&\n                    bonds[second].order === 1 &&\n                    !bonds[first].isAromatic &&\n                    !bonds[second].isAromatic &&\n                    bonds[first].nbRings < 2 &&\n                    bonds[second].nbRings < 2) {\n                    fragmentableRingBonds.push({ bonds: [bonds[first], bonds[second]] });\n                }\n            }\n        }\n    }\n    return fragmentableRingBonds;\n}\n//# sourceMappingURL=getFragmentableRings.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fragmentRings = fragmentRings;\nconst mf_parser_1 = require(\"mf-parser\");\nconst openchemlib_utils_1 = require(\"openchemlib-utils\");\nconst getFragmentableRings_js_1 = require(\"./utils/getFragmentableRings.js\");\n/**\n * The function performs the fragmentation of all single ring bonds not belonging to aromatic rings\n * @param {import('openchemlib').Molecule} molecule - The OCL molecule to be fragmented\n * @param {object} [options={}]\n * @param {boolean} [options.calculateHoseCodes=false] - calculating hose code for bonds is quite time consuming\n * @param {string} [options.parentIDCode=molecule.getIDCode()]\n * @returns  Array with results for the fragmentation of ring bonds\n */\nfunction fragmentRings(molecule, options = {}) {\n    const { Molecule } = molecule.getOCL();\n    const { calculateHoseCodes, parentIDCode = molecule.getIDCode() } = options;\n    const fragmentableRingBonds = (0, getFragmentableRings_js_1.getFragmentableRings)(molecule);\n    let fragmentationResults = [];\n    for (let ringBonds of fragmentableRingBonds) {\n        const brokenMolecule = molecule.getCompactCopy();\n        let fragmentMap = [];\n        let atoms = [];\n        let rLinks = {};\n        for (let bond of ringBonds.bonds) {\n            brokenMolecule.markBondForDeletion(bond.index);\n            brokenMolecule.setAtomCustomLabel(bond.atom1, '*');\n            brokenMolecule.setAtomCustomLabel(bond.atom2, '*');\n            atoms.push(bond.atom1, bond.atom2);\n            rLinks[bond.atom1] = bond.atom2;\n            rLinks[bond.atom2] = bond.atom1;\n        }\n        brokenMolecule.deleteMarkedAtomsAndBonds();\n        const nbFragments = brokenMolecule.getFragmentNumbers(fragmentMap);\n        for (let i = 0; i < nbFragments; i++) {\n            const result = {};\n            if (calculateHoseCodes) {\n                result.hoses = (0, openchemlib_utils_1.getHoseCodesForAtoms)(molecule, atoms);\n            }\n            result.atomMap = [];\n            let includeAtom = fragmentMap.map((id) => {\n                return id === i;\n            });\n            let fragment = new Molecule(0, 0);\n            let atomMap = [];\n            brokenMolecule.copyMoleculeByAtoms(fragment, includeAtom, false, atomMap);\n            // if includeAtom has more then 3 true all true should become false and all false should become true\n            for (let j = 0; j < atomMap.length; j++) {\n                if (fragment.getAtomCustomLabel(atomMap[j]) === '*') {\n                    result.atomMap.push(j);\n                    if (rLinks[j] !== undefined) {\n                        fragment.addBond(atomMap[j], fragment.addAtom(154));\n                    }\n                }\n            }\n            fragment.removeAtomCustomLabels();\n            fragment.setFragment(false);\n            //      console.log(fragment.getIDCode(), getMF(fragment).mf);\n            result.idCode = fragment.getIDCode();\n            result.parentIDCode = parentIDCode;\n            result.cleavedBonds = ringBonds.bonds;\n            result.mfInfo = new mf_parser_1.MF((0, openchemlib_utils_1.getMF)(fragment).mf.replace(/R[1-9]?/, '')).getInfo();\n            result.fragmentType = 'cyclic';\n            fragmentationResults.push(result);\n        }\n    }\n    fragmentationResults = fragmentationResults.toSorted((a, b) => {\n        return a.mfInfo.monoisotopicMass - b.mfInfo.monoisotopicMass;\n    });\n    return fragmentationResults;\n}\n//# sourceMappingURL=fragmentRings.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fragment = fragment;\nconst mf_parser_1 = require(\"mf-parser\");\nconst openchemlib_utils_1 = require(\"openchemlib-utils\");\nconst fragmentAcyclicBonds_js_1 = require(\"./fragmentAcyclicBonds.js\");\nconst fragmentRings_js_1 = require(\"./fragmentRings.js\");\n/**\n * This function fragment both acyclic and cyclic bonds of the molecule\n * @param {import('openchemlib').Molecule} molecule - The OCL molecule to be fragmented\n * @param {object} [options={}]\n * @param {boolean} [options.calculateHoseCodes=false] - calculating hose code for bonds is quite time consuming\n * @param {boolean} [options.cyclic=true] - calculate cyclic fragmentation\n * @param {boolean} [options.acyclic=true] - calculate acyclic fragmentation\n * @param {boolean} [options.full=true] - calculate the molecular formula of the full molecule\n * @returns {object} In-Silico fragmentation results\n */\nfunction fragment(molecule, options = {}) {\n    const { cyclic = true, acyclic = true, full = true, calculateHoseCodes = false, } = options;\n    const parentIDCode = molecule.getIDCode();\n    let molecularIon = full\n        ? [\n            {\n                idCode: parentIDCode,\n                parentIDCode,\n                mfInfo: new mf_parser_1.MF((0, openchemlib_utils_1.getMF)(molecule).mf).getInfo(),\n                fragmentType: 'molecule',\n            },\n        ]\n        : [];\n    let acyclicBonds = acyclic\n        ? (0, fragmentAcyclicBonds_js_1.fragmentAcyclicBonds)(molecule, { calculateHoseCodes, parentIDCode })\n        : [];\n    let cyclicBonds = cyclic\n        ? (0, fragmentRings_js_1.fragmentRings)(molecule, { calculateHoseCodes, parentIDCode })\n        : [];\n    let result = [...molecularIon, ...acyclicBonds, ...cyclicBonds];\n    return result.toSorted((a, b) => a.mfInfo.monoisotopicMass - b.mfInfo.monoisotopicMass);\n}\n//# sourceMappingURL=fragment.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.defaultDatabase = void 0;\nexports.defaultDatabase = [\n    {\n        label: 'alpha cleavage',\n        rxnCode: 'eM``eIhOh`!fH@Oj@ eF``fJD#Qg Qp Qd#!RPNp@@qtJ_@ !RGUi| !R_P@]nop',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1149/1945-7111/abdde7',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Water elimination',\n        rxnCode: 'eMHJN`pksPqFdD@`!fI@GudYA@H@ eF@HhP#Q^ Qp Qd#!RWrL@@qvrO@ !RG]i| !R@@L]~kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.7',\n        description: 'Fig. 18 b.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Water elimination',\n        rxnCode: 'eFH`fLGtX!fI@Gu` fHT`P#QX QP a`#!R@AL]|gp !RGUi| !RG[i|',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '7',\n        description: 'Fig. 32 c.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Water elimination',\n        rxnCode: 'gCiALAJRu@_HYlgHE@!fI@Gu` eO``fNZ`~cIrE@#qNT qH Qg#!R@BL@[@@cGPj| !RG]i| !Rog~w?Qwzo@',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: '',\n        section: '7.4.3.',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: 'ISBN: 978-0-470-03310-4',\n        software: '',\n    },\n    {\n        label: 'Water elimination',\n        rxnCode: 'eMH`eIXOda`!fI@Gu` eF@bXhP#Qy Qp Qd#!R@Fp@XqtJ_@ !RG]i| !R@FL]^gp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: '',\n        section: '7.4.3.',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: 'ISBN: 978-0-470-03310-4',\n        software: '',\n    },\n    {\n        label: 'Ureas fragmentation',\n        rxnCode: 'gGTAAaJTwTpGrDZHpypB@P!gCh@@eKHFLv\\\\@`D@ eF``fLGtX#qn\\\\J qfQ qk#!R|Gvw__A|_g?p_Qurw@ !R_wy||G}~GYk| !R@FL]~gp',\n        ionization: 'esi,ei',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 23',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Ureas fragmentation',\n        rxnCode: 'gGTAAaJTwTpGrDZHpypB@P!gCh@@eKHFLv\\\\@`D@ eF``fLGtX#qbu_ qj{ Ql#!RlKvwo[@|og~poQurw@ !R_{x|lG~~GYk| !R@BL]~gp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 24',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Ureas fragmentation',\n        rxnCode: 'gGTAAaJTwTpGtDQas`D@`!gJT@AdijdCzZHpypB@P fHT`P#qbqo qJ|h Qp#!R|Gvw__A|_g?p_Qurw@ !Rb@KW@gx@bGt]vhH !RG_i|',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 25',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Ureas fragmentation',\n        rxnCode: 'gGTAAaJTwTpGtFQas`D@`!gChAAIRfdCF[N@PB@ eF`BLGtX#qj|^ qbs qo#!Rm?wp?[]|_g~w?QvRw@ !R@Fp?[@AcG]k| !R@FL]~gp',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 26',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Ureas fragmentation',\n        rxnCode: 'day@B@HIRigjf`Cy@`hcEYpB@P!gGTAAaJTwTpGrFZHpypB@P eF@HhP#IaLJfxP IaBia q~#!RbGwW_Wx@bOq~O}_|bGt]lcp !R|Gvw__A|_g?p_Qtzw@ !R@FL]Akp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 27',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Tropylium rearragement',\n        rxnCode: 'gOpAMJUKua@@Gtt@!gOpAGJTju`@@Gt\\\\@#qgVMX qYoTp#!Ri}w^@Hc]i?rg?Mx@GPhB !Rwg}GED]sw~g_~dvOG]h|',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: 'ISBN: 978-0-470-03310-4',\n        software: '',\n    },\n    {\n        label: 'Tropylium fragmentation',\n        rxnCode: 'gOpAGJTju`@@D!gKPACJTnLE@P eF@HxP#qqUcx qMsx Qd#!RkpXxCLvpO`BblClLG[KB !RS|T~@BLXSzh]FhH !R@DL]^kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: 'http://people.whitman.edu/~dunnivfm/C_MS_Ebook/CH6/6_9_5.html',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Tropylium fragmentation',\n        rxnCode: 'gFpAAJTjZ@@A@!gBPAAJTkRpD eF@HxP#qbqk qbu qY#!RdMvww]y?wg~wwQurW@ !R@M{^[}yoGUj| !R@@L]^kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: 'https://en.wikipedia.org/wiki/Fragmentation_%28mass_spectrometry%29',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Thiophosphonates fragmentation',\n        rxnCode: 'gJPeE`DSpTiMMPGtT@!gC`eE`DSpdiLtA@ fH@Oj@#qbNh qbN qh#!Rb@I~Owx@bGt]|`H !Ru?sW_Wx@GQjB !RGWi|',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 60',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Thiophosphate B fragmentation',\n        rxnCode: 'gGQeLZ@b^@eJZihCzB@!gJQdEb@b^BSTtA}A@ fHT`P#qbqk qbMX Qp#!ROvL@Xvp?OvMc@AtrO@ !RbOq~@Gx?bGt]v`H !RGWi|',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 49',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Thiophosphate B fragmentation',\n        rxnCode: 'gNqeLZ@b^@eJZZZ`OhH@!gJQeEb@b^@eIjZ@~`p eF@HhP#qbqkx qbMX q~#!ROvp@[FL?Ovql@@AcGSHB !RbOq~@Gx?bGt]N`H !R@FL]~kp',\n        ionization: 'esi,ei',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 50',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Thiophosphate B fragmentation',\n        rxnCode: 'gGQeLZ@b^@eJZihCzB@!gCaiHlO@SGZ@` eFB@HcA}D@#qbqk qQ] Ql#!ROvL@Xvp?OvMc@AwRO@ !Ruwu~@Ha}GUk| !R@FL]~gp',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 51',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Thiophosphate A fragmentation',\n        rxnCode: 'gGQeEb@b^BeIiZhCzJ@!gC`eE`DSpdiLtA@ eFHBLGtP#qbqk qbM qs#!RXp@@[C}cXp@@XqtrP` !RbOq~@Ha}G]jB !R@FL]~gp',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 45',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Thiophosphate A fragmentation',\n        rxnCode: 'gNqeEb@b^BgHiDVj`Ohh@!gJQeEb@b^BeIij@~bp eF@HhP#qbqkx qbqh q_#!R[@@@Xs}l[@@@[@AcGPiB !RbOq~@Gx?bGt]N`H !R@FL]~kp',\n        ionization: 'esi,ei',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 46',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Thiophosphate A fragmentation',\n        rxnCode: 'daxLRDp`BH|DgHiDbuU@GtI@!gGPdE`DSpRYvi@~d` eFH`fLGtX#IaLJfxP IaBka qs#!R[C|?XpAc[@@?[@Al@FL]lmp !RbOrH_Wx@b@JH_Qvz`` !R@FL]Agp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 47',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Thiophosphate A fragmentation',\n        rxnCode: 'gGQeEb@b^BeIiZhCzJ@!gC`eE`DSpdiLtA@ eFHBLGtP#qbqk qbM qs#!RXp@@[C}cXp@@XqtrP` !RbOq~@Ha}G]jB !R@FL]~gp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 48',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Thiocarbamates fragmentation',\n        rxnCode: 'gJYIC`DBTijXCzB@!eMhdiRVB eFB@HcA}D@#qbqh qJh Ql#!Rb@KW@gx@bGt]\\\\hH !R@Fp@XqwZ?@ !R@FL]~gp',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 19',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Thiocarbamates fragmentation',\n        rxnCode: 'gGYIC`DBTiff`OhH@!gCiIL`DBTff@~`p eF@HhP#IaLJa qbM IG@#!RupJH@m]}_`BH_Qtr`` !RbOq~@Ha}GSjB !R@FL]~kp',\n        ionization: 'esi,ei',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 20',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Thiocarbamates fragmentation',\n        rxnCode: 'gNyIC`DF\\\\dTJij@~a`!gJYHC`DISTpGtL@ eF@bXpP#IaLJnD qbqh IxP#!Rb@KW@gx@bGvH?Ha}GWJB !Rb@KW@gx@bGt]NhH !R@FL]Agp',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 21',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Thiocarbamates fragmentation',\n        rxnCode: 'gGYIC`DB\\\\dTMM@_PP!gCaHL@aJZPH eF``fJGtP#qbqo qbq qo#!R|Gvw_Wy?|Gsp_Qvrw@ !R@Fp?[@AcG]i| !R@FL]~gp',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 22',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Sulfoxides fragmentation',\n        rxnCode: 'eMJhBBXvCyH\\\\@!fHT`P eFJHBHh_Q@#Qg Qp Qd#!ROvL@Xqwro@ !RGUi| !R@FL]^kp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 65',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Sulfones fragmentation',\n        rxnCode: 'gC`iH`DRXzpGrdZ@!fHT`P eMFI@bM`~f@#qbq qH Qm#!Re{v~@Hb}G[K| !RGYi| !RWrL@Hquzo@',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 66',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Sulfones fragmentation',\n        rxnCode: 'gC`iH`DRXzpGtd@!fHT`P eMFI@bMP~b@#qfQ qH Qm#!R_`CW_Xa}G[K| !RGQi| !R@Gx?_avz_@',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 67',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Sulfites fragmentation',\n        rxnCode: 'gJQiHl@aReVu@_QP!gCahHl@bNtA}E@ fHT`P#qbqh qbq qh#!Rmwsp_Gy?|Ot]lkp !RuwvH_Wx@G]k| !RG_i|',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 68',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Sulfides fragmentation',\n        rxnCode: 'eMB`HIchOh`!fHT`P eFB@HcA}D@#Q[ a` Q\\\\#!ROvL@Xqur_@ !RGYi| !R@FL]ngp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 61',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Sulfides fragmentation',\n        rxnCode: 'gC`I@DBTij@~``!eFB`HIcA}F@ eF@HhP#qrL qq Qd#!RGtL@Pq}lG[I| !R_pp]Vop !R_pp]nop',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 62',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Simple inductive cleavage',\n        rxnCode: 'eM@bXzCKGgW@!fHT`P eF@HpP#Q[ a` Q\\\\#!R_qL@Dqwro@ !RGUi| !R@AL]^kp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '4.1',\n        description: 'Fig. 7.1.1',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Sigmatropic rearrangement',\n        rxnCode: 'eM@HvCzX@!eM@HvB#Q^ Q[#!ROvL@XquJO@ !ROvL@Xqtzo@',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.7',\n        description: 'Fig. 18 a.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Retro-heteroene (McLafferty-type rearrangement)',\n        rxnCode: 'gJP@DkVhCzFHrEpBG`D@!eM@HvCzXcI\\\\@axA@ eF@HhP#qTqh Q^ qM#!ROvL@XpAl@FL]Bcp !R@FL?XqwZO@ !R@FL]Akp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '3',\n        description: 'Fig. 4.3',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Retro-heteroene (Claisen rearrangement)',\n        rxnCode: String.raw `daxH@JrRHiMUHAcEHHA@!daxH@NrSRHmUHAcGHHA@#IZaxla@ IhfP^c@#!Ru{vHo[x@u?sWoY_|e{t]Dop !R@BL?Xs|\\[E|cWs}cOqp]vcp`,\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.4',\n        description: 'Fig. 12 b.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Retro-heteroene',\n        rxnCode: 'daxDBDqIRiubJ`CZN|bPtQqDD@cDD@chXO}c`!gJQ@DeNl`XqHHA@ eFH`fLGtYFDD@`#qqj\\\\x qqkx QX#!RbCtAHN\\\\}b@Kg@cx@yst]xop !R@DL?W@Al@DL]Nop !R@DL]agp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.5',\n        description: 'Fig. 13 a.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Retro-heteroene',\n        rxnCode: 'gGY@DDf]j`Odkl@!gCi@DDff@~`l eF@HhP#qrLk qrL qk#!RbOrH_Wx@b@JH_QuJ@` !RbOq~@Ha}GSjB !R@FL]Akp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.5',\n        description: 'Fig. 13 b.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Retro-heteroene',\n        rxnCode: 'daDLBHSdeJmVfZjh@~QHzHyBB@PbB@QrB@P!gCaAIiRmhCFQA@H@ gC``Eh{PGrTZHiHHAFPPB@#Ikb[HPP I`Tp qky#!R}{rpwKy?lGvpO[y?og|]dep !ROqp@[@@cGUk| !RbKwW_[x@G_k|',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.4',\n        description: 'Fig. 14 b.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Retro-heteroene',\n        rxnCode: 'gGP`MTj}jPOihbl``DUA@H@!eMHJMPqiA@H@ eMHFM`~fHr``D@#qStM qTX qNh#!RbKwWo[x@upKW_QtR?@ !R@Ox?oawZ_@ !R@BL?XqwzO@',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.4',\n        description: 'Fig. 14 c.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Retro-ene',\n        rxnCode: 'gJQ@DeZu@_PqFIA@HFB@!eMHJM`qiA@H@ eF@HhP#qeVH qbh qq#!RWrM@XpAl@BL]Bcp !ROvL@HqwZO@ !R@BL]Akp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.3',\n        description: 'Fig. 11 b.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Retro-ene',\n        rxnCode: 'gJP@DkVhCzF@!eM@HvCzX@ eF@HhP#qbqh Qm qM#!ROvL@XpAl@FL]bcp !R@FL?XqwZO@ !R@FL]~kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '3',\n        description: 'Fig. 4.3',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Retro-Diels–Alder ',\n        rxnCode: 'daDD@DqJg^ffZh@qQDD@cDD@`!gGQ@BeJmJHGFEA@H@ eFHBJFLHHA@#IGmdehp IxakS IeP#!Rog?w_KC\\\\lCvp?[@|lOt]tkp !R|Gw~@OA|mpKp_QwZ`` !R@BL]Agp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.2',\n        description: 'Fig. 10 a.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Retro-Diels–Alder ',\n        rxnCode: 'gFp@DiTujhB!gC`@Die@` eF@HhP#q]aV q]a Q\\\\#!R_g~w_K_}mwvw_AuRO@ !R@Fp?[@AcGUk| !R@FL]^kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.2',\n        description: 'Fig. 10 b.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Retro-Diels–Alder ',\n        rxnCode: 'gFx@@eJfuS@P!gC`@Die@` eF`BJD#q]aV qqU q\\\\#!R_g~w_K_}mwvw_AuRO@ !R@Fp?[@AcGUk| !R@FL]^gp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.2',\n        description: 'Fig. 10 c.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Retro-Diels–Alder ',\n        rxnCode: 'gOu@AReLm]SLAcB``D@!gJY@@TeVTCFEA@H@ eF`BJD#IKJRV` IZDrP qM#!R}xNp?[y?}{r~_{@}GQI\\\\ !R_vq?Dw}l_vp]z`H !R@BL]Agp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.2',\n        description: 'Fig. 10 d.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Retro-Diels–Alder ',\n        rxnCode: String.raw `didDB@{iRYefxijh@zRhX!gNpaAQJRs\\uBIzQg@ eF@HhP#IwlDdeZ IwlIEh IFP#!RbMvH?Cx_bMt~@Hc]Oa~H?AtJo@ !Rm{vwoSy?musPO[\\}GYh\\ !R@DL]Akp`,\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.2',\n        description: 'Fig. 9 a.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Retro-Diels–Alder ',\n        rxnCode: 'fdeA`D@\\\\brTfYY_m]gIZ|DhJB@@h@@~aF@!didHB@BTfUvfZVV@OhB@ didD@@iIYgxUie`B#iup`jXdibCPcXKoI iSxKhvMHP IwbkEYH#!RbCvH?Ky_bCv~@H`}oe~H?Hc|oe~~@H`}esv~W{y_e{v~WquRs@ !RlKvpwKy?lKvpO[y?lKvpOQwZg@ !Rmwvw_[y?msrpo[^}mwvwOAuzG@',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.2',\n        description: 'Fig. 9 b.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Retro-Diels–Alder ',\n        rxnCode: 'deTDB@{iRYemnJXj`CiJaoQt@!gGPa@QJRmsPbX gC`@DiPDCteZ@#IaLJfxYT IaBxU IriX#!RbGvH?Gx?bGu~@Hb}_c~H?Gx?G[I\\\\ !RbGvH_X`B_`BH_Qtz_@ !R|Gq~_?C}GXX|',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.2',\n        description: 'Fig. 9 c.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Remote Hydrogen rearrangment',\n        rxnCode: 'gC`AEJTu@P!fH@Oj@ eM@fXvB#qVa qH Q^#!R@Fq?[@@SG_HB !RGWi| !R@AM?DqtZO@',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Remote Hydrogen rearrangement',\n        rxnCode: 'eM@HzCzhcO\\\\@axADQbU`!fH@OjHw\\\\@axADQbU` eF@HhP#Q[ Qp Qd#!ROvL@XqurO@ !RGUi| !R@FL]^kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.1',\n        description: 'Fig. 4.1. a',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Remote Hydrogen rearrangement',\n        rxnCode: 'eM@HzCzhcW\\\\@axADQbU`!fH@Oj@ eF@HhXqw@H^@QDXeX#Q^ a` Qt#!R@FL?XqwrO@ !RGUi| !R_rp]ngp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '3',\n        description: 'Fig. 4.1. b',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Rearrangment d',\n        rxnCode: 'gOpAIJUKua@@Gtt@!gOpAMJUKua@@D#q]gJp q\\\\oQp#!Ro`BWoXb}e?rW?I^}GPhB !Resv~@H`}epJW@kx@GShB',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.comptc.2016.07.018',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Rearrangment a',\n        rxnCode: 'dnD@BLeJV|jfZih@`!gOpAGJTju`@@D#qTuYx qigSp#!RSF\\\\_iUMg_wy~_wy?G_I\\\\ !RgtXxCJvp_`Cbl@\\\\LG]kB',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.comptc.2016.07.018',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Radical resonance',\n        rxnCode: 'gCaA@IRVXROtD_u@`!gCa@@dkPGtD_uD`#qbq qbq#!R_`BH@ha}GXhB !R@FL@[@AcG[i|',\n        ionization: 'esi',\n        reaction: 'Reaction',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'resonance',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Radical resonance',\n        rxnCode: 'gCaA@IRVdCzCOzdP!gCaA@IRVXROtF_uL`#qbq qbq#!R@FL@[@AcGTj| !R_`BH?Ha}G[hB',\n        ionization: 'esi',\n        reaction: 'Reaction',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'resonance',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Radical H Rearrangment',\n        rxnCode: 'eM@jXzCzXcV\\\\@`DSc@jd!eM@jXzCFlxA@HgFATh#Qg Qg#!ROvL@XqtJO@ !ROvL@XqtzO@',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Phosphonic acid fragmentation',\n        rxnCode: 'gGPiHaxJ\\\\ddKU@_QYFEF@P@!gC`iHaxJX{PGrDKHsHpB@ eF@HhP#qqZl qq] Qd#!R[C|?XpAlXp@@Xqvr_@ !Ruwu~@Ha}G]k| !R@FL]~kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 41&42',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Phosphonic acid fragmentation',\n        rxnCode: 'gGQiHlOASddeZhCyKM@!gCahHlOBNtA}aBcP eF@bXpP#qVLk qVa qk#!RPpAlGq}C@Fp@Pqvr_@ !RO^\\\\@OcvHG]i| !RY`@]^op',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 43',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Phosphonic acid fragmentation',\n        rxnCode: 'gJQiHlOASGmPGrVZ@!gC`iHaxBX{PGtT@ fI@Gu`#qbqh qbM Qp#!Re{v~@Ky_bKt]Lgp !Re{v~@Hb}GYk| !RGWi|',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 44',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Phosphonates fragmentation',\n        rxnCode: 'gJQiHlOBSGmPGtd@!gCahHlOBOTA}I@ fHT`P#qbqh qbq qh#!Ruwu~@Gx?bGt]Lgp !Ruwu~@Ha}GUk| !RGWi|',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 59',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Phosphates fragmentation',\n        rxnCode: String.raw `gNpYHlQxR\\ddqZj@~Tap!gJPYHlQxRX}j@~TaP eF@HhP#qbuKx qbqh q{#!RXs|@Xs}l[@@@[@AcGPi| !Ruwu~@Gx?bGt]vgp !R@FL]Akp`,\n        ionization: 'esi,ei',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 37A&B',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Phosphates fragmentation',\n        rxnCode: 'gGPYHlQxJTjmj`Ohh@!gCaiHlO@SGZ@` eFHBLGtP#IaLJa qbi IpP#!R[C|@[C}cXp@@Xqvr_@ !Ruwu~@Ha}GUk| !R@FL]~gp',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 38',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Phosphates fragmentation',\n        rxnCode: 'gGPYHlQxJTjmj`OlhtF@!gJPXHlQxQ{TA}eF`p fHT`P#qqU\\\\ qqUX a`#!R[C|@[C}cXp@@Xqvr_@ !Ruwu~@Gx?bGt]vgp !RG_i|',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 40',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Oxonium Resonance',\n        rxnCode: 'eFH`fJGtQFDD@`!eFHhfLGuQFdD@`#QX Qd#!R@BL]bgp !R_vp]vop',\n        ionization: 'esi',\n        reaction: 'Reaction',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'resonance',\n        web: 'https://en.wikipedia.org/wiki/Oxonium_ion',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Oxime-ethers fragmentation',\n        rxnCode: 'gCiAHIJTt`_JPh@!eF``fJGtX eFHBJD#qbq qQ Ql#!R@Fp?[@AcGWK| !R@FL]Vgp !R@FL]^gp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 36',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Ketones fragmentation',\n        rxnCode: 'eMH`eIXOh`!fH@Oj@ eFHbfJD#Qg Qp Qd#!R@Fp@Xqwr_@ !RGUi| !R@FL]^kp',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 31',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Ketones fragmentation',\n        rxnCode: 'eMH`eIXOh`!fHT`P eMHAIXOj`#qNP QP qN@#!R@Fp@Xqwr_@ !RGQi| !R@Fp@Xquz?@',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 32',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Ionization',\n        rxnCode: 'eFBCDcAcBQFIdT!eFBcDIcA}EqaHcD@#QX QX#!R@FL]bgp !R@FL]vgp',\n        ionization: 'esi',\n        reaction: 'ionization',\n        doi: '',\n        section: '5',\n        description: 'Fig. 10',\n        kind: 'ionization',\n        web: 'https://www.orgchemboulder.com/Spectroscopy/MS/fragmech.shtml',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Ionization',\n        rxnCode: 'eF@HhP!eF@bXp_zi@#Qd Qd#!R@FL]Rkp !R@FL]vkp',\n        ionization: 'esi',\n        reaction: 'ionization',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'ionization',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Ionization',\n        rxnCode: 'gC`@DkZ@qds`D@`!fH@H eM@fXvCFlxA@H@#qbq qH Qg#!RWvp@[@@cGWHB !RGYi| !RWrL@HqvzO@',\n        ionization: 'esi',\n        reaction: 'ionization',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'ionization',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Ionization',\n        rxnCode: 'eF@H`Zp`!eF@bXp_U@#Qd QX#!R@FL]Rkp !R_rp]Vop',\n        ionization: 'esi',\n        reaction: 'ionization',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'ionization',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Ionization',\n        rxnCode: 'fI@FL``D@!fIRPLYA@HjP#a` a`#!RGPi| !RG]i|',\n        ionization: 'esi',\n        reaction: 'ionization',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'ionization',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Ionization',\n        rxnCode: 'eF@HpXp``D@!eF@bXpXt``D@#Qd QX#!R@FL]bgp !R_rp]Vop',\n        ionization: 'esi',\n        reaction: 'ionization',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'ionization',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Ionization',\n        rxnCode: 'eFHBLGtP!gChaHDiRUhCzJ@#Qd QBP#!R@FL]Bgp !R@FL@[@AcGSj|',\n        ionization: 'esi',\n        reaction: 'ionization',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'ionization',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Ionization',\n        rxnCode: 'fI@FMg@HAG~U@!eFJhrJXpXug@HA@#a` aP#!RGXi| !R@FL]Nkp',\n        ionization: 'esi',\n        reaction: 'Ionisation ',\n        doi: 'https://doi.org/10.1186/1477-5956-10-S1-S8',\n        section: '',\n        description: '',\n        kind: 'ionization',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Ionization',\n        rxnCode: 'fI@FMg@HAG~U@!eFJhtJXpXug@HA@#a` aP#!RGXi| !R_rp]Vop',\n        ionization: 'esi',\n        reaction: 'Ionisation ',\n        doi: 'https://doi.org/10.1186/1477-5956-10-S1-S8',\n        section: '',\n        description: '',\n        kind: 'ionization',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Ionization',\n        rxnCode: 'fI@FMg@HAG~U@!fIRPOjHv\\\\@`D@#a` a`#!RG\\\\i| !RGUi|',\n        ionization: 'esi',\n        reaction: 'ionization',\n        doi: 'https://doi.org/10.1186/1477-5956-10-S1-S8',\n        section: '',\n        description: '',\n        kind: 'ionization',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Ionization',\n        rxnCode: 'fI@GuD[N@PBO|j!fIS`L[N@PB@#a` a`#!RGZi| !RGUi|',\n        ionization: 'esi',\n        reaction: 'ionization',\n        doi: 'https://doi.org/10.1186/1477-5956-10-S1-S8',\n        section: '',\n        description: '',\n        kind: 'ionization',\n        web: '',\n        mode: 'negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Ionization',\n        rxnCode: 'fI@FMg@HAG~U@!eMjrX@fezN`~SjHug@HA@#a` aP#!RGPi| !R_qL@DquZo@',\n        ionization: 'esi',\n        reaction: 'ionization',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'ionization',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Inductive cleavages assisted by adjacent heteroatoms',\n        rxnCode: 'gCaALIRfhCJAxsEpBG`D@!eFH`fJFLEpBG`D@ eF@Hp_Q@#qbq qJ Ql#!R[pL@@v}lGSI| !R@@L]Vgp !R@@L]^gp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '4.1',\n        description: 'Fig. 7.1.2',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Inductive cleavages assisted by β-hydrogen removal',\n        rxnCode: 'dayHBDxDeIYtjj@LhQHdU@!gCi@DDeZ@~b` gChA@IRVdCzB@#IyjH\\\\R@ IyjD qbq#!RtEsP_]A\\\\Og?P_]A\\\\tGt]|kp !R@DL@[@ACGSi| !R@DL@[@ACGXY|',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '6.1.4',\n        description: 'Fig 23 c.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Inductive cleavages assisted by β-hydrogen removal',\n        rxnCode: 'gJPAMJTmTAeLhHcBW@H^@QNRO@!gC`AMJUm@_SQFXn@P|@b\\\\d^ fH@H#quQ` quT qH#!R@Fq_[@@cWrL]Lgp !R@BM_Hu}lGUi| !RGPY|',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '4.1',\n        description: 'Fig. 7.1.4',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Inductive cleavage',\n        rxnCode: 'gChA@Icu@YPOYQ^`bNB\\\\GaHXECAjb@!fJ@FLgAx@ fHT`P#Q`P a` QP#!Rwg~PO[\\\\}G_H| !RGUi| !RGWi|',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '6.1.1',\n        description: 'Fig 22 a.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Inductive cleavage',\n        rxnCode: 'eFH`fLFTOzLcBB@P!fI@GudYA@H@ fHT`P#Qd a` QP#!R@DL]\\\\gp !RG]i| !RGWi|',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '6.1.1',\n        description: 'Fig 22 a.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Inductive cleavage',\n        rxnCode: 'eMhdYRRCJW}N@!fJ@D eFH`fND#Qg Qp Qd#!R@Fp@PquJ_@ !RGUi| !R@DL]^gp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '6.1.1',\n        description: 'Fig 22 b.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Inductive cleavage',\n        rxnCode: 'eMDaYRRCJW}LQeA@H@!fI@FL``D@ eFH`fND#Qg Qp Qd#!R@Fp@@qvJ_@ !RGUi| !R@@L]^gp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '6.1.1',\n        description: 'Fig 22 b.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Inductive cleavage',\n        rxnCode: 'diD@b@|@gIIETjji@NlRrJ@!gC`HAxQz`H eM@fXvB eF@HhP#IaLJfxY qan IF^ qS#!R@FMl@C}lXs|@[@Ac@Fp@Xqvr_@ !Ruwu~@Ha}GYk| !ROvL@XquzO@ !R@FL]Qkp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '7',\n        description: 'Fig. 31',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Inductive cleavage',\n        rxnCode: 'gGYALMJT}TpGRdX!gJY@DDefXB fHT`P#qnZa qnTH qX#!RbGwW_X`B_`BH_Qur?@ !RbGvH@gx@bGt]Nop !RG_i|',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '7',\n        description: 'Fig. 32 a.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Inductive cleavage',\n        rxnCode: 'gCaA@IRmhCzZHpHHA@!eFH`fJGtQFDD@` eF@HhP#qqT qq Qd#!RWvp@[@@cG_I| !R@BL]vgp !R@BL]~kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '7.4.1.3.',\n        description: 'Fig. 7.7',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: 'ISBN: 978-0-470-03310-4',\n        software: '',\n    },\n    {\n        label: 'Inductive cleavage',\n        rxnCode: 'gGPiH`DZ\\\\ddJu@XsHp\\\\@!gC`iH`DBXzpD eF@HhXpcAp@#qVLk qVM qc#!R[C}c@@AlOvL@Xqvr_@ !Ruwu~@Ha}GYk| !R_rp]^gp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1002/rcm.9131',\n        section: 'conclusion',\n        description: 'scheme 1',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Inductive cleavage',\n        rxnCode: 'eFH`fLG~hP!fI@G~i@ fHT`P#QX QP a`#!R_rp]\\\\gp !RGYi| !RGSi|',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Inductive cleavage',\n        rxnCode: 'eM@jXzCKGgW@!fHT`P eF@HhP#Q[ Qp Qd#!ROvL@Xqwro@ !RGUi| !R@FL]^kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Inductive cleavage',\n        rxnCode: 'gBPAML^Jj@sfb`!gC`AMJUm@YqQP#qVL qTN#!R@GxBu}\\\\BG_I| !ROvp@[@AcGSi|',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Inductive cleavage',\n        rxnCode: 'eM@jXzCfh!fHT`P eF@HhP#Q[ Qp Qd#!RGtL@Pqwro@ !RGUi| !R@DL]^kp',\n        ionization: 'esi',\n        reaction: 'ionization',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'ionization',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Inductive cleavage',\n        rxnCode: 'eM@bXzCzhsT!fHT`P eF@HhP#Q^ a` Q\\\\#!R_qL@Dquro@ !RGYi| !R@AL]nkp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1093/chromsci/43.2.92',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Hydrogen rearrangment',\n        rxnCode: 'gCaA@IRUhCzB@!eFHbfLGtP eF@HhP#qtQ Qx qQ#!R@FL@[@AcGPi| !R@FL]vkp !R@FL]^kp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Hydrogen rearrangment',\n        rxnCode: 'eMH`eIhOhp!fH@H eFH`fJGtP#Qg Qp Qd#!R@Fp@XqtJ_@ !RGYi| !R@FL]ngp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Hydrogen rearrangment',\n        rxnCode: 'gJQA@IRUZ`OhH@!eMH`eIdOhp eF@HhP#qTqh Q[ qM#!R@Fp@XpAl@FL]Bgp !R@Fp@Xqtz_@ !R@FL]~kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Hydrogen rearrangment',\n        rxnCode: 'gCaA@IRVhCzC@!eFH`fJGtP eF@HhP#qTq QX qq#!R@FL@[@AcGPi| !R@FL]vgp !R@FL]~kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Hydrogen rearrangment',\n        rxnCode: 'gJPaAaJTtlA@!eMHAITH eFH`fJGtP#qfUH qnH Qd#!Rb@KW@ha}_`@]lhH !R@Gx@_awZ_@ !R@FL]^gp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Hydrogen rearrangment',\n        rxnCode: 'gJQAAIRgjPH!gJQA@IRgeaDp#qTnH qTnH#!ROvL@Xs}lOvL]\\\\kp !RbGwW_X`B_`@]nop',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Hydrogen rearrangment',\n        rxnCode: 'gCaA@iRZhCzB@!fI@Gu` eM@fXvB#qJt qH Q[#!Ru?q~@M]}GSJB !RGUi| !ROvL@XquzO@',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Hydrogen rearrangment',\n        rxnCode: 'eM@jXzB!fHT`P eF@HhP#Qg QP Qx#!R_qL@DqtJO@ !RGSi| !R@AL]fkp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Hydrogen rearrangment',\n        rxnCode: 'gJPAEJUkTA@!eM@bXvB eF@HhP#qVah Q[ qi#!R_qL@DpAl@AL]bcp !R_qL@Dqvz_@ !R@AL]Vkp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Hydrogen rearrangment',\n        rxnCode: 'eM@jXzCKGgW@!fHT`P eF@HhP#Q[ Qp Qd#!R_qL@Dqwro@ !RGUi| !R@AL]^kp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Hydrogen lost',\n        rxnCode: 'eM@jXzCVd@!eO@bXyjCVT@#Q[ Qg#!R_qL@DquJO@ !R?`Bw@auZ?@',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Hydrogen elimination',\n        rxnCode: 'gFpACJTj[ATA}C`!gFpAAJTjZ@@A@#qbqk qn\\\\J#!Rog~wOK_}m{vwOAurO@ !Rog~wOK_}m{vwOAuZO@',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '7.4.3.',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: 'ISBN: 978-0-470-03310-4',\n        software: '',\n    },\n    {\n        label: 'Halide Elimination',\n        rxnCode: 'eMBGDchOjbLiDX`!fHfHA}QFRHq@ eF@HhP#Q[ Qp Qd#!ROvL@DqurO@ !RGUi| !R@BL]^kp',\n        ionization: 'esi,ei',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 1',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'H Radical Lost',\n        rxnCode: 'eF@bXp_QDXs`D@c~hP!fHd@AjP eF@bXhXqg@HA@#QX  QX#!R_rp]|gp !RGYi| !R_rp]ngp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Grob-Wharton',\n        rxnCode: 'gNpaIYJU_MU@_JQXbh``DUA@H@!gCa@IGj@~dbLbB@P eMHjfM`~jHt``D@#qqWeX qqW qeX#!Ru{vHo[x@b@J~@Hb}GSK| !Ruwv~@Hb}GUi| !ROvL@HqwzO@',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '6.1.5',\n        description: 'Fig. 24 a.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Grob-Wharton',\n        rxnCode: 'gNxaLJIRU[jXCzZ@!eMH`eIxH eF`BJGtP eFHBND#q{iV` Qv qM q{#!R_c}~Oxa}b@I~@Ha}G]H\\\\ !R_wy?_awj_@ !R@FL]ngp !R@FL]Agp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '6.1.5',\n        description: 'Fig. 24 b.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Grob-Wharton',\n        rxnCode: 'gGPACJTkUPFtlUlxA@HlLG~r`!eN@HdH eF@HhXqg@HA@#qrLh qqh Qd#!R@FL?XpAlOvp@Xquro@ !RJW}yXQuZO@ !R@FL]Agp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '4.1',\n        description: 'Fig. 7.1.5',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Formation of stabilized cations',\n        rxnCode: 'daF@B@BTeeVz`@@B!gOpAMJUKua@@D fJRPH#IGfbdK@ q\\\\oQp ID#!Rmwrw_Wy?mwrw_[_}mwp]Dcp !Ru{u~@Hb}upKW@gx@GUhB !RG_i|',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 2',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Formation of stabilized cations',\n        rxnCode: 'did@BLeJeWk``b@CzAbLMcApB@!gOpAMJUKua@@D eF@HhXqcApB@#IZJyBGI q\\\\oQp IFP#!Rquu^@Ha]q?sG?H`BW`BHWQur@` !Rquu^@Ha]q?sG?Ex@G]hB !R@Gt]Agp',\n        ionization: 'esi,ei',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 2',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Formation of stabilized cations',\n        rxnCode: 'dif@B@BTeYWaz@@@OhB@!gOpAMJUKua@@D eF`BND#Id^ZJPl q\\\\oQp IdP#!R_`A~@M\\\\Bu{u~@M\\\\BupI~@AuRh` !Ru{u~@Hb}upKW@gx@GUhB !R@FL]~gp',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 2',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Formation of stabilized cations',\n        rxnCode: 'didHB@BTiyWaj@@@OhB@!gOpAMJUKua@@D eFHBLGtP#IGiZJPl q\\\\oQp IFP#!RuwvH_]_|uwu~@M_|u?q~@Awb@` !Ru{u~@Hb}upKW@gx@GUhB !R_rp]~gp',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 2',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Formation of stabilized cations',\n        rxnCode: 'dmtDB@PIRY^UeVj@@@OhB@!gOpAMJUKua@@D gC``@deZ@`#IaLJfxYWP I[aJUt qbu#!R_`CW?Hc|uwvH_Xc|_c~H_Xb}_c|]LhH !Ruwu~@Ha}u?sW?Gx@GUhB !R@FL@[@AcGXY|',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 2',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Ethers fragmentation',\n        rxnCode: 'eMH`fN`~b@!fHT`P eFHBLGtP#Qg QP Ql#!ROvL@Xqur_@ !RGYi| !R@FL]ngp',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 33',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Ethers fragmentation',\n        rxnCode: 'gCaA@IRfhCiQs{BIF`!eFH`fLGtX eF@HhP#qVa QX qN#!R@Fp?[@AcGPk| !R@FL]vgp !R@FL]~kp',\n        ionization: 'esi,ei',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 34',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Ethers fragmentation',\n        rxnCode: 'eMH`fN`~RJ@!fH@Oj@ eFH`fJGtP#Q[ Qp QX#!ROvL@Xqvro@ !RGUi| !R@FL]ngp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 35',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Ether/water elimination',\n        rxnCode: 'gCa@@eMPFtWihb```DJFCX`!fI@GuDYA@H@ eF@HhP#Qdp a` Q\\\\#!R@Fq?[@@SG_K| !RG]i| !R@AL]~kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.3390%2Ftoxins6082580',\n        section: '2.2',\n        description: 'Fig. 3',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Ether/water elimination',\n        rxnCode: 'gCaAHiRfhCZ[tTQTPPBMCAlp!fI@GuDYA@H@ eF@bXhP#Q[@ a` Qt#!R_qL@Xs}lG[J| !RG]i| !R_qp]^op',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.3390%2Ftoxins6082580',\n        section: '2.2',\n        description: 'Fig. 3',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Esters fragmentation',\n        rxnCode: 'gC`a@aJRm@_PP!eMHAIhOh` eFH`fND#qbq qq@ Qd#!R@FL@[@AcG_I| !R@Fp@XqwZ_@ !R@FL]^gp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'http://dx.doi.org/10.1088/1468-6996/10/3/034602',\n        section: 'Results',\n        description: 'Fig. 5',\n        kind: 'reaction',\n        web: 'https://www.researchgate.net/figure/a-Chemical-structure-of-oxidative-reserpine-MW-6077-b-Post-source-decay_fig4_26637371',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Esters fragmentation',\n        rxnCode: 'gJPa@eJSKTA}E@!eMHbeIXH eFHBLGtX#qrLh Qv qM#!R@W~GKVQuazH]Lep !R@W|LEQvZw@ !R_tP]^op',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 11',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Esters fragmentation',\n        rxnCode: 'gGPa@eJSNuPGtT@!gC`a@eJSM@_QX eF@HhP#satpj satp qi#!RbOrHo[x@b@JHoQtJ`` !RbOrHo[x@GSjB !R_tp]~op',\n        ionization: 'esi,ei',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 12',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Esters fragmentation',\n        rxnCode: 'gGPa@eJSNuPGtT@!gC``@dfZ@~b` eF@bXpP#qbqk qbq qk#!RbOrHo[x@b@JHoQwr`` !RbOrHo[x@GSjB !R@BL]~gp',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 13',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Esters fragmentation',\n        rxnCode: 'gGPa@eJSJuPGtT@!gC``@deZ@` eF@bXpP#qbqk qbu qK#!Ro`BW?Hc|e{vHoQtr`` !R@BL@[@@cGSi| !R_tp]^gp',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 14',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Esters fragmentation',\n        rxnCode: 'gJPa@eJSKTA}E@!eMHAITH eFH`fLGtX#qbqh qbH qu#!R|Gwp_Gy?|Gt]|cp !R_wy?_atZ_@ !R@FL]~gp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 15',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Elimination (missing source)',\n        rxnCode: 'eM`AIhOdq`!fJ@Gup eF@HhP#Qv Qp Qd#!R_rq?Dqvr_@ !RG]i| !R@FL]^kp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'To check',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Elimination',\n        rxnCode: 'eMHAIhOdm`!fI@Guh eF@HhP#Qg a` Qt#!R@Fp@HqvJ_@ !RG]i| !R@BL]^kp',\n        ionization: 'esi,ei',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 1',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Elimination',\n        rxnCode: 'gC`@Dij@~b`!eF@Hp_Q@ eF@HhP#qVa qq Qd#!R@Fp?[@AcG_HB !R@FL]vgp !R@FL]^kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.jpha.2016.04.008',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Electron Sharing',\n        rxnCode: 'gCaAAIRVdCzB@!gCaA@IRUdCzB@#qbq qbq#!R@FL@[@AcGTj| !R@FL@[@AcG[i|',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Double cleavage',\n        rxnCode: 'gJPaAaJTkTHGyZCDTDD@cHHA@!eMDiicXOfabKHHAB``D@ eF@HhP#qbqh qTH qu#!RepJH@kx@bKt]LhH !ROvL@HqwZO@ !R@BL]Akp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '7.4.3.',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: 'ISBN: 978-0-470-03310-4',\n        software: '',\n    },\n    {\n        label: 'Double cleavage',\n        rxnCode: 'gChA@IRmhCzB@!eF``fJGtX eF@HhP#qTq QX qq#!ROvp@[@AcG_I| !R@FL]Vgp !R@FL]^kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '7.4.3.',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: 'ISBN: 978-0-470-03310-4',\n        software: '',\n    },\n    {\n        label: 'Double cleavage',\n        rxnCode: 'gJXA@IRmZ`OdHL@!eM`bfN`~b@ eF@HhP#qTqh Q^ qi#!ROvL@XpAl@FL]Bkp !ROvL@XqwZo@ !R@FL]Akp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: '',\n        section: '7.4.3.',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: 'ISBN: 978-0-470-03310-4',\n        software: '',\n    },\n    {\n        label: 'Double cleavage',\n        rxnCode: 'gChA@Icu@_PP!fH@H eM``fM`~b@#qTq qH Q[#!Ruwu~@Ha}GWK| !RGYi| !ROvL@Xqvz_@',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: '',\n        section: '7.4.3.',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: 'ISBN: 978-0-470-03310-4',\n        software: '',\n    },\n    {\n        label: 'Dithiophosphates fragmentation',\n        rxnCode: 'gGPmLPDSpPPiRZVj@~b`!gJPlLPDSpPPdtu@_QP fHT`P#qbqk qbqh qX#!RXp@@[C}cXp@@XqvrP` !RbOq~@Gx?bGt]v`H !RGWi|',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 52',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Dithiophosphates fragmentation',\n        rxnCode: 'gGPmLPDSpPPiRZVj@~b`!gC`eE`DSpdiLtA@ eFB@HcA}D@#qbqk qbM qs#!RXp@@[C}cXp@@XqtrP` !RbOq~@Ha}G]jB !R@FL]~gp',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 53',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Dithiophosphates fragmentation',\n        rxnCode: 'gGPmLPDSpPPiRZVj@~b`!gJPmLPDSpPQIRZV`H fH@Oj@#q`qk qpeH qX#!RXp@@[C}cXp@@XqtrP` !RbOq~@Gx?bGt]v`H !RG_i|',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 54',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Displacement reaction ',\n        rxnCode: 'gCaALiRfhCJIxsHHADxH\\\\!fH@H eOH`fNZ`qaA@HgLN#qbq Qp qJ`#!R@Fq_[@@cG_K| !RGUi| !Rog~w?Quzo@',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '4.1',\n        description: 'Fig. 7.1.3 a.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Displacement reaction ',\n        rxnCode: 'gJXA@YRgj`LhWmEFJFB\\\\TOlP!fH@H eO`BNZ`sfG@#qJDp Qp qJ`#!RWrL@Hu}lWrL]lkp !RG]i| !Rog~w?QuzO@',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '4.1',\n        description: 'Fig. 7.1.3 a.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Displacement reaction ',\n        rxnCode: 'gJPACJUkTAeB|YBXN@PBIqQx!gBPAML^Jj@qfI`xA@HgMG` fH@H#qTnH qVl qH#!RWrL@HpAl@BL]|cp !R@K{|ey\\\\BG]i| !RG_i|',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '4.1',\n        description: 'Fig. 7.1.3 b.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Displacement Reaction b.',\n        rxnCode: 'gJXA@IRUjPH!eM@fXvB eF`BLGtP#qlVH qrH ql#!R@Fp@XpAl@FL]Bgp !ROvL@XqwZO@ !R@FL]~gp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '4.1',\n        description: 'Fig. 7',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Displacement Reaction b.',\n        rxnCode: 'gJQABYRmZ`LXTD@`!eM@fXvB eFH`fLGtQFDD@`#qMr` qNh Qd#!R@BL?Xs|\\\\OvL]xcp !RWrL@HquZO@ !R@BL]~gp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '4.1',\n        description: 'Fig. 7',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Displacement Reaction a.',\n        rxnCode: 'gGYADEJSLuPGtT_nlK|!gChA@Icu@_PP eFHBND#qtSi qQ] Qx#!RbGvH@gx?_`BH_QtJo@ !Ruwu~@Ha}GUk| !R@FL]^gp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '7.1.3',\n        description: 'Fig. 22 c. ',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Dioxolane fragmentation',\n        rxnCode: 'dclDB@iYRfUw\\\\kahHBj@CzI`!eFHBJD deTHB@RTfU]ih@I`Hz~`H@#IzAQirbWS IdP IzD[JI]L#!RIm~?ck^}|KuMswy?_g?po_B}|GspoQwR{@ !R@FL]fgp !RbOq~@Ha}b@JH@ha}bGvH?Ha}GXZB',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1002/jms.1963',\n        section: '',\n        description: 'Fig. 4',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Dioxolane fragmentation',\n        rxnCode: 'detDB@jYRfUwJxZB@h@H!eFHBJD daDHB@RTfUVyiZPB#IaLJfxYT Ql IXdziEP#!RIm~?ck^}|KuMswy?_g?po_B}GSKl !R@FL]fgp !RBGvh[AF?HBVDj?Jo@MX]Aep',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C3AY40543E',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'DB rearrangement',\n        rxnCode: 'eM@HvCzX@!eM@HvCzX@#Q[ Q^#!ROvL@XqvJO@ !R@FL?XqtzO@',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.jpha.2016.04.008',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Cycloreversion',\n        rxnCode: 'gFp@DiTvjhB!eF@HhP eF@HhP eF@HhP#qbqk qn qY Qd#!R_g~w_K_}mwvw_AvRO@ !R@FL]Fkp !R@FL]Nkp !R@FL]~kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '3',\n        description: 'Fig. 4.7',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Cyclization',\n        rxnCode: 'eM@jXzCNhh!eO@bXyjCNXh#Q[ Qg#!R_qL@DquJO@ !R?g~w?QuZo@',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Charge Stabilization',\n        rxnCode: 'gCaAAIRVdCzB@!gCaAAiRVXROtD@#qbq qbq#!R@AL@[@@SGRj| !R?`BH@hc}GShB',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Charge Remote Fragmentation',\n        rxnCode: 'gC`@Dij@~RcP!eF@HhP eF@HhP#qqb Ql qJ#!R@Fp?[@AcGXk| !R@FL]vkp !R@FL]^kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '3',\n        description: 'Fig. 4.5',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Carbamates fragmentation',\n        rxnCode: 'gJXaLDiRYZ`Ohh@!eMhdiRVB eFHBLGtP#qbqh qbH qu#!R|Owp_Gy?|Gt]|mp !R@Fp@XqwZ?@ !R@FL]~gp',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 16A & B',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Carbamates fragmentation',\n        rxnCode: 'gJXaLDiRYZ`Ohh@!eMhDRUB eFH`fLGtX#qbqh qbH qu#!R|Gwp_Gy?|Gt]|mp !R_wy?_atZ_@ !R@FL]~gp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 17',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Carbamates fragmentation',\n        rxnCode: 'gGXaLDiRYvj@~b`!gChaLDiRYhCzK@ eF@HhP#IaLJa qbq IF`#!Rwg~Pw[_]dArP_Qwrw@ !RdKw^_yA\\\\GSk\\\\ !R_wP]^op',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 18',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'COOH loss',\n        rxnCode: 'gOxaBDYR[fmjj@pb}C@!gBXA@IReYj@` eMDARVCzX@#qbqkx qi{ Qg#!RbOp~@H`}HMkZK}hoGPhB !RO`@@O`@~GUhB !R_pq?Dqvz?@',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1038/s41598-019-42777-8',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'CO loss',\n        rxnCode: 'gOxaBDYR[fmjj@pb}C@!gJYABCJRkTA}C@ eFHPfzND#qbqkx qq_h Qd#!RypKgOSx@iJSKiLndG^KB !R_pq?Dw|L_qL]zop !R_pp]~op',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1038/s41598-019-42777-8',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'CO elimination',\n        rxnCode: 'gCa@@dsPFRTZ@!eFHPfzND eF@HpYIE@#qJf qJ Ql#!RbOq~@Ha}G_JB !R@FL]Vkp !R@FL]^kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '3',\n        description: 'Fig. 4.8',\n        kind: 'reaction',\n        web: '',\n        mode: 'negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'CO elimination',\n        rxnCode: 'gOq@@drm[UTA@!gKP@Di\\\\Zj@` eFHBND#qbqkx qY~h Qd#!RbOvH?Oy?bOvH__y?GPi\\\\ !R?g|_Fa}eTv\\\\]fcp !R@AL]^gp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '3',\n        description: 'Fig. 4.8',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'CO Elimination',\n        rxnCode: 'gCaA@IRWhCZZLtLG~s@!fHT`P eFHPfzND#Qg@ Qp Qd#!R_g}~_?A}G_H\\\\ !RGYi| !R@FL]nkp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Beta Remote Hydrogen rearrangment ',\n        rxnCode: 'gGPACJTkUPD!gJPACJUkTA@ fH@Oj@#qrLk qTqh qX#!R@AM?DpAl_vp@Dqtr_@ !R_qL@DpAl@AL]~cp !RGYi|',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: '',\n        section: '',\n        description: '',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: 'Mass-Frontier',\n    },\n    {\n        label: 'Aromatic elimination',\n        rxnCode: 'ded@@DiUUeiZ@hTZfh!gFp@DiTt@@B gC`@DiZDC@#IpdjFGiT qcUq IGiT#!RbGvw_X`B?g?~@K]}b@K~_?x@GWJ| !R?g~w@k_}m?vw@avZO@ !Rb@K~_xc}GPZ|',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.6',\n        description: 'Fig. 16',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Aminothiophosphates fragmentation',\n        rxnCode: 'gGXiMDOCSddajXCFEA@H@!gC`iHaxBX}HFLrB@P eF`BLD#qbqk qbu qK#!RXp@?XpAl[C|@Xqvr_@ !Ruwu~@Ha}GUk| !R@FL]~gp',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 55',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Aminothiophosphates fragmentation',\n        rxnCode: 'dazDbLa@|LeJi~ij@OdrNbLD``D@!gC`hHaxQvPOhHcL``D@ eF``fLGtX eF@HxP#IaLJnXP qbu qK IxP#!R@FMc@C}c[@@@[C}l@FL]top !Ruwu~@Ha}GUk| !R@FL]~gp !R@FL]Qkp',\n        ionization: 'esi,ei',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 56',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Aminothiophosphates fragmentation',\n        rxnCode: 'gNxiMDOCSddauSPGrtNHphHA@!gJXiMDOCSGuHGtvQaPPB@ eF@HhP#qbqkx qbqh q_#!R[@@?[@AcXs|@[@AcG_I| !Ruwu~@Gx?bGt]Ngp !R@FL]Akp',\n        ionization: 'esi,ei',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 57',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Aminosulphate fragmentation',\n        rxnCode: 'gGXiMD@cSddaVhCz[@!gC`iH`DBXzpD eF`BLGtX#qqj\\\\ qqk QX#!R[@ACGq}l@DL_PqwR_@ !RysvHOSx@GYk| !R_pp]^op',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 63',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Aminosulphate fragmentation',\n        rxnCode: 'gGXiMD@cSddaVhCy[C@!gC`hH`DQuPH eF``fLGt\\\\#qbqk qbu qK#!R[C}c@@AlOvL@Xqvr_@ !Ruwu~@Ha}GYk| !R@FL]^gp',\n        ionization: 'esi,ei',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 64',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Aminodithiophosphate fragmentation',\n        rxnCode: 'gGYMC`DSphPIRfji@~`bLjB@P!gCiEEAxXHDqzPLYdD@` eFB@HcA}D@#qrYl qQl qs#!ROvL@Xs}cXpAlOqwRO@ !R_`BH_]]}GUk| !R@FL]~gp',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 58',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Amines fragmentation',\n        rxnCode: 'gChA@IRfhB!eF`BLD eF@bXpP#qLZ qK Qd#!RpDp^_|B]GPj| !R@Kt]Vgp !R_qP]nop',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 3',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Amines fragmentation',\n        rxnCode: 'gChA@IRfhCyBM@!eF``fLGtX eF@HhP#qbq Ql qQ#!R@Fp?[@AcGPi| !R@FL]vgp !R@FL]~kp',\n        ionization: 'esi,ei',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 4 ',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Amines fragmentation',\n        rxnCode: 'gJXA@IRij`OhH@!gChA@Icm@P fH@Oj@#qrM` qri a`#!Ruwu~@Ha}upH]Lop !Ruwu~@Ha}GUk| !RGWi|',\n        ionization: 'esi,ei',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 5',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Amides fragmentation',\n        rxnCode: 'gGYADEJSNuPD!gCiADEJSM@_QP eF@HhP#qbq_ qbq q{#!RbOrH_Wx@b@JH_QvJ@` !RbOq~@Ha}GSjB !R@FL]~kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 10',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Amides fragmentation',\n        rxnCode: 'gJYADEJSKTAkLh!eMHbeIXH eF`BLFlJ@#qbqh qbH qu#!RxCw`[Ey?xEt]Bcp !R@Fp@?QwZ?@ !R@Gt]^gp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 6',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Amides fragmentation',\n        rxnCode: 'gJYADEJSKTAkLh!eMHAITH eF``fLGtQVE@#qbqh qbH qu#!R|Gwp_Gy?|Gt]|cp !R_wy?_atZ_@ !R@FL]^gp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 7',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Amides fragmentation',\n        rxnCode: 'gCiADEJSM@P!fHT`P eMhDRVB#qbq qH Qg#!RbOq~@Ha}G_JB !RGQi| !R@Fp@Xquz_@',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 8',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Amides fragmentation',\n        rxnCode: 'gJYADEJSKTA@!gCi@DDfZ@` fHT`P#qbsH qbs qH#!R|Owp_Gy?|Gt]Bcp !RbOq~@Ha}G]jB !RGWi|',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 9',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Acyl urea fragmentation',\n        rxnCode: 'dayDBDpFRTfUfjX@~QLr@!gJU@E`dru@_SX eMHbeIXH#IZbyAr@ IZnHP Qv#!Ro`BW?Hc|e{vHo[y_e?p]ThH !Ro`BH?I_|bKt]vhH !R_tq?Dqwz?@',\n        ionization: 'esi,ei',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 28',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Acyl urea fragmentation',\n        rxnCode: 'gGTaEaUJSNuHGrVZ@!eMhdYRVCz^@ eMhDRUB#qyuS qZp qyh#!RbOrH_Wx@b@JH_Qur`` !R@Fp@XqwZ_@ !R_wy?_auz_@',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 29',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Acyl urea fragmentation',\n        rxnCode: 'dayDBDpFRTf[VjX@~QHr@!gGTaEaUJSNuHGrVZ@ eF@HhP#IaLJfEP IaLJa IU`#!Rb@JH_Wx@_c~H@m]}bGt]|gp !RbOrH_Wx@b@JH_Qvz`` !R@FL]Akp',\n        ionization: 'esi,ei',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 30',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: '1,5-shift',\n        rxnCode: 'gJP@DiYXRWtL@!gJP@DiYXRWtL@#qbqh qfUH#!ROvp@[C}c@FL]Bop !R@Fp?[@AcOvL]nop',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '3',\n        description: 'Fig. 4.7',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: '1,4-elimination',\n        rxnCode: 'gC`@Dij@~RcP!eF@HhP eF@HhP#qVa Qd qq#!R@Fp?[@AcGXk| !R@FL]vkp !R@FL]^kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.5',\n        description: 'Fig 15 a.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: '1,4-elimination',\n        rxnCode: 'gC``Adej@~PcP!eFHBJD eFHBJD#qtQ qJ Qx#!R@FL@[@AcGTj| !R@FL]vgp !R@FL]^gp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.5',\n        description: 'Fig 15 c.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: '1,4-elimination',\n        rxnCode: 'gCa@@dmPGrDZ@!eFHBJD eF@HhP#qNT qN Qd#!R_rq?Dw|lGSK| !R@FL]vgp !R@FL]~kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.5',\n        description: 'Fig 15 d.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: '1,3-shift',\n        rxnCode: 'gJP@DiYXRWtL@!gJP@DkVdCzJ@#qqU` qTqh#!R@Fp?[@AcOvL]\\\\op !ROvL@XpAl@FL]ncp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '3',\n        description: 'Fig. 4.7',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: '1,3-elimination',\n        rxnCode: 'gCa@@dmPGrDZ@!eFHBJD eF@HhP#qTq QX qq#!R@FL@[@AcGTj| !R@FL]vgp !R@FL]~kp',\n        ionization: 'esi',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '5.5',\n        description: 'Fig 15 b.',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive,negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'α-Elimination',\n        rxnCode: 'eM@ghzCFZXN@P|@`!fHW@P eF@HhXqSApBG`D@#Q^ Qp Qd#!R_qL@DqwrO@ !RG[i| !R@AL]Vgp',\n        ionization: 'esi',\n        reaction: 'CMF',\n        doi: 'https://doi.org/10.1039/C5NP00073D',\n        section: '4.1',\n        description: 'Fig. 7.1.4',\n        kind: 'reaction',\n        web: '',\n        mode: 'negative',\n        isbn: '',\n        software: '',\n    },\n    {\n        label: 'Aminosulphate fragmentation',\n        rxnCode: 'dcMDbLvD@Hr\\\\ddJfRtjmP@P@_If[@!eF``fLGt\\\\ deVD`Ia@BLdabRwBkRs@D#IaLJf{QVS qK IaLkmEYL#!R@m]}ux`BupJH_]]}_`CW?M\\\\B_`CW?Avb`` !R@FL]fgp !Ruwu~@Ha}bOq~Oxa}bKu~Oxa}GXX|',\n        ionization: 'esi,ei',\n        reaction: 'CRF',\n        doi: 'https://doi.org/10.1016/j.ijms.2010.10.024',\n        section: 'Table 1',\n        description: 'Rule 64',\n        kind: 'reaction',\n        web: '',\n        mode: 'positive',\n        isbn: '',\n        software: '',\n    },\n];\n//# sourceMappingURL=defaultDatabase.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getDatabase = getDatabase;\nconst openchemlib_utils_1 = require(\"openchemlib-utils\");\nconst defaultDatabase_js_1 = require(\"./defaultDatabase.js\");\n/**\n * @description Get the default databases of reactions for positive and negative mode\n * @param {Object} options - Options for database selection\n * @param {('ionization'|'resonance'|'reaction')[]} [options.kind=['ionization','resonance','reaction']] - The kind of database to be used\n * @param {('esi'|'ei')[]} [options.ionizations=['esi','ei']] - The ionization technique to be used\n * @param {('positive'|'negative')[]} [options.modes=['positive','negative']] - The ionization mode to be used\n * @param {string} [options.dwar] - The dwar file to use. Default will use an included mass fragmentation database\n * @returns\n */\nfunction getDatabase(options = {}) {\n    const { kind = ['ionization', 'resonance', 'reaction'], ionizations = ['esi', 'ei'], modes = ['positive', 'negative'], dwar, } = options;\n    const fullDatabase = dwar ? (0, openchemlib_utils_1.parseDwar)(dwar).data : defaultDatabase_js_1.defaultDatabase;\n    const database = fullDatabase.filter((entry) => kind.some((k) => entry.kind.includes(k)) &&\n        ionizations.some((ik) => entry.ionization.split(',').includes(ik)) &&\n        modes.some((m) => entry.mode.split(',').includes(m)));\n    return database;\n}\n//# sourceMappingURL=getDatabase.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getMasses = getMasses;\n/**\n * @description get array of mz from fragmentation nodes\n * @param {Array} nodes valid nodes of fragmentation process\n * @returns {Array}  array of unique mz values\n\n */\nfunction getMasses(nodes) {\n    let masses = {};\n    for (const node of nodes) {\n        for (let molecule of node.molecules) {\n            if (molecule.info.mz) {\n                if (!masses[molecule.info.mz]) {\n                    masses[molecule.info.mz] = {\n                        ...molecule.info,\n                        molecules: [],\n                        minDepth: node.depth,\n                    };\n                }\n                masses[molecule.info.mz].molecules.push({\n                    idCode: molecule.idCode,\n                    molfile: molecule.molfile,\n                    depth: node.depth,\n                });\n                if (masses[molecule.info.mz].minDepth > node.depth) {\n                    masses[molecule.info.mz].minDepth = node.depth;\n                }\n            }\n        }\n    }\n    return Object.values(masses);\n}\n//# sourceMappingURL=getMasses.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.reactionFragmentation = reactionFragmentation;\nconst mf_parser_1 = require(\"mf-parser\");\nconst openchemlib_1 = __importDefault(require(\"openchemlib\"));\nconst openchemlib_utils_1 = require(\"openchemlib-utils\");\nconst getDatabase_1 = require(\"./database/getDatabase\");\nconst getMasses_1 = require(\"./utils/getMasses\");\n/**\n * @description Fragment a molecule by applying reactions from a custom database of reactions\n * @param {import('openchemlib').Molecule} oclMolecule - The OCL molecule to be fragmented\n * @param {Object}  [options={}]\n * @param {('esi'|'ei')[]}  [options.ionizations=['esi']] - The ionization technique to be used\n * @param {('positive'|'negative')[]}  [options.modes=['positive']] - The ionization mode to be used\n * @param {number}  [options.maxDepth=5] - The maximum depth of the overall fragmentation tree\n * @param {number}  [options.limitReactions=200] - The maximum number of reactions to be applied to each branch\n * @param {string}  [options.dwar] - The dwar entry to be used, if not provided, the default one will be used\n * @param {number}  [options.maxIonizations=1] - The maximum depth of the ionization tree\n * @param {number}  [options.minIonizations=1] - The minimum depth of the ionization tree\n * @param {number}  [options.minReactions=0] - The minimum depth of the reaction tree\n * @param {number}  [options.maxReactions=3] - The maximum depth of the reaction tree\n * @returns {object} In-Silico fragmentation results with the following properties:\n * - masses: array of monoisotopic masses\n * - trees: array of fragmentation trees\n * - validNodes: nodes without dead branches\n */\nfunction reactionFragmentation(oclMolecule, options = {}) {\n    const { ionizations = ['esi'], modes = ['positive'], dwar, maxDepth = 5, limitReactions = 200, minIonizations = 1, maxIonizations = 1, minReactions = 0, maxReactions = 3, } = options;\n    const reactions = new openchemlib_utils_1.Reactions(openchemlib_1.default, {\n        moleculeInfoCallback: (molecule) => {\n            // @ts-ignore\n            const mf = (0, openchemlib_utils_1.getMF)(molecule).mf;\n            const mfInfo = new mf_parser_1.MF(mf).getInfo();\n            return {\n                mf,\n                mw: mfInfo.mass,\n                em: mfInfo.monoisotopicMass,\n                mz: mfInfo.observedMonoisotopicMass,\n                charge: mfInfo.charge,\n            };\n        },\n        maxDepth,\n        limitReactions,\n        skipProcessed: true,\n    });\n    reactions.appendHead([oclMolecule]);\n    reactions.applyOneReactantReactions((0, getDatabase_1.getDatabase)({\n        kind: ['ionization'],\n        ionizations,\n        modes,\n        dwar,\n    }), {\n        min: minIonizations,\n        max: maxIonizations,\n    });\n    const reactionDb = (0, getDatabase_1.getDatabase)({\n        kind: ['reaction'],\n        ionizations,\n        modes,\n        dwar,\n    });\n    for (let i = 1; i <= maxReactions; i++) {\n        let min = 1;\n        if (minReactions < i + 1) {\n            min = 0;\n        }\n        reactions.applyOneReactantReactions(reactionDb, {\n            min,\n            max: 1,\n        });\n    }\n    const trees = reactions.trees;\n    const validNodes = reactions.getValidNodes();\n    const masses = (0, getMasses_1.getMasses)(validNodes);\n    return {\n        trees,\n        validNodes,\n        masses,\n        reactions,\n    };\n}\n//# sourceMappingURL=reactionFragmentation.js.map","/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n  REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n  var key = null;\n  void 0 !== maybeKey && (key = \"\" + maybeKey);\n  void 0 !== config.key && (key = \"\" + config.key);\n  if (\"key\" in config) {\n    maybeKey = {};\n    for (var propName in config)\n      \"key\" !== propName && (maybeKey[propName] = config[propName]);\n  } else maybeKey = config;\n  config = maybeKey.ref;\n  return {\n    $$typeof: REACT_ELEMENT_TYPE,\n    type: type,\n    key: key,\n    ref: void 0 !== config ? config : null,\n    props: maybeKey\n  };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n  module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","/**\n * @license React\n * react.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n  REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n  REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n  REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n  REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n  REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n  REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n  REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n  REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n  REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n  REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n  REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n  MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nfunction getIteratorFn(maybeIterable) {\n  if (null === maybeIterable || \"object\" !== typeof maybeIterable) return null;\n  maybeIterable =\n    (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n    maybeIterable[\"@@iterator\"];\n  return \"function\" === typeof maybeIterable ? maybeIterable : null;\n}\nvar ReactNoopUpdateQueue = {\n    isMounted: function () {\n      return !1;\n    },\n    enqueueForceUpdate: function () {},\n    enqueueReplaceState: function () {},\n    enqueueSetState: function () {}\n  },\n  assign = Object.assign,\n  emptyObject = {};\nfunction Component(props, context, updater) {\n  this.props = props;\n  this.context = context;\n  this.refs = emptyObject;\n  this.updater = updater || ReactNoopUpdateQueue;\n}\nComponent.prototype.isReactComponent = {};\nComponent.prototype.setState = function (partialState, callback) {\n  if (\n    \"object\" !== typeof partialState &&\n    \"function\" !== typeof partialState &&\n    null != partialState\n  )\n    throw Error(\n      \"takes an object of state variables to update or a function which returns an object of state variables.\"\n    );\n  this.updater.enqueueSetState(this, partialState, callback, \"setState\");\n};\nComponent.prototype.forceUpdate = function (callback) {\n  this.updater.enqueueForceUpdate(this, callback, \"forceUpdate\");\n};\nfunction ComponentDummy() {}\nComponentDummy.prototype = Component.prototype;\nfunction PureComponent(props, context, updater) {\n  this.props = props;\n  this.context = context;\n  this.refs = emptyObject;\n  this.updater = updater || ReactNoopUpdateQueue;\n}\nvar pureComponentPrototype = (PureComponent.prototype = new ComponentDummy());\npureComponentPrototype.constructor = PureComponent;\nassign(pureComponentPrototype, Component.prototype);\npureComponentPrototype.isPureReactComponent = !0;\nvar isArrayImpl = Array.isArray;\nfunction noop() {}\nvar ReactSharedInternals = { H: null, A: null, T: null, S: null },\n  hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction ReactElement(type, key, props) {\n  var refProp = props.ref;\n  return {\n    $$typeof: REACT_ELEMENT_TYPE,\n    type: type,\n    key: key,\n    ref: void 0 !== refProp ? refProp : null,\n    props: props\n  };\n}\nfunction cloneAndReplaceKey(oldElement, newKey) {\n  return ReactElement(oldElement.type, newKey, oldElement.props);\n}\nfunction isValidElement(object) {\n  return (\n    \"object\" === typeof object &&\n    null !== object &&\n    object.$$typeof === REACT_ELEMENT_TYPE\n  );\n}\nfunction escape(key) {\n  var escaperLookup = { \"=\": \"=0\", \":\": \"=2\" };\n  return (\n    \"$\" +\n    key.replace(/[=:]/g, function (match) {\n      return escaperLookup[match];\n    })\n  );\n}\nvar userProvidedKeyEscapeRegex = /\\/+/g;\nfunction getElementKey(element, index) {\n  return \"object\" === typeof element && null !== element && null != element.key\n    ? escape(\"\" + element.key)\n    : index.toString(36);\n}\nfunction resolveThenable(thenable) {\n  switch (thenable.status) {\n    case \"fulfilled\":\n      return thenable.value;\n    case \"rejected\":\n      throw thenable.reason;\n    default:\n      switch (\n        (\"string\" === typeof thenable.status\n          ? thenable.then(noop, noop)\n          : ((thenable.status = \"pending\"),\n            thenable.then(\n              function (fulfilledValue) {\n                \"pending\" === thenable.status &&\n                  ((thenable.status = \"fulfilled\"),\n                  (thenable.value = fulfilledValue));\n              },\n              function (error) {\n                \"pending\" === thenable.status &&\n                  ((thenable.status = \"rejected\"), (thenable.reason = error));\n              }\n            )),\n        thenable.status)\n      ) {\n        case \"fulfilled\":\n          return thenable.value;\n        case \"rejected\":\n          throw thenable.reason;\n      }\n  }\n  throw thenable;\n}\nfunction mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) {\n  var type = typeof children;\n  if (\"undefined\" === type || \"boolean\" === type) children = null;\n  var invokeCallback = !1;\n  if (null === children) invokeCallback = !0;\n  else\n    switch (type) {\n      case \"bigint\":\n      case \"string\":\n      case \"number\":\n        invokeCallback = !0;\n        break;\n      case \"object\":\n        switch (children.$$typeof) {\n          case REACT_ELEMENT_TYPE:\n          case REACT_PORTAL_TYPE:\n            invokeCallback = !0;\n            break;\n          case REACT_LAZY_TYPE:\n            return (\n              (invokeCallback = children._init),\n              mapIntoArray(\n                invokeCallback(children._payload),\n                array,\n                escapedPrefix,\n                nameSoFar,\n                callback\n              )\n            );\n        }\n    }\n  if (invokeCallback)\n    return (\n      (callback = callback(children)),\n      (invokeCallback =\n        \"\" === nameSoFar ? \".\" + getElementKey(children, 0) : nameSoFar),\n      isArrayImpl(callback)\n        ? ((escapedPrefix = \"\"),\n          null != invokeCallback &&\n            (escapedPrefix =\n              invokeCallback.replace(userProvidedKeyEscapeRegex, \"$&/\") + \"/\"),\n          mapIntoArray(callback, array, escapedPrefix, \"\", function (c) {\n            return c;\n          }))\n        : null != callback &&\n          (isValidElement(callback) &&\n            (callback = cloneAndReplaceKey(\n              callback,\n              escapedPrefix +\n                (null == callback.key ||\n                (children && children.key === callback.key)\n                  ? \"\"\n                  : (\"\" + callback.key).replace(\n                      userProvidedKeyEscapeRegex,\n                      \"$&/\"\n                    ) + \"/\") +\n                invokeCallback\n            )),\n          array.push(callback)),\n      1\n    );\n  invokeCallback = 0;\n  var nextNamePrefix = \"\" === nameSoFar ? \".\" : nameSoFar + \":\";\n  if (isArrayImpl(children))\n    for (var i = 0; i < children.length; i++)\n      (nameSoFar = children[i]),\n        (type = nextNamePrefix + getElementKey(nameSoFar, i)),\n        (invokeCallback += mapIntoArray(\n          nameSoFar,\n          array,\n          escapedPrefix,\n          type,\n          callback\n        ));\n  else if (((i = getIteratorFn(children)), \"function\" === typeof i))\n    for (\n      children = i.call(children), i = 0;\n      !(nameSoFar = children.next()).done;\n\n    )\n      (nameSoFar = nameSoFar.value),\n        (type = nextNamePrefix + getElementKey(nameSoFar, i++)),\n        (invokeCallback += mapIntoArray(\n          nameSoFar,\n          array,\n          escapedPrefix,\n          type,\n          callback\n        ));\n  else if (\"object\" === type) {\n    if (\"function\" === typeof children.then)\n      return mapIntoArray(\n        resolveThenable(children),\n        array,\n        escapedPrefix,\n        nameSoFar,\n        callback\n      );\n    array = String(children);\n    throw Error(\n      \"Objects are not valid as a React child (found: \" +\n        (\"[object Object]\" === array\n          ? \"object with keys {\" + Object.keys(children).join(\", \") + \"}\"\n          : array) +\n        \"). If you meant to render a collection of children, use an array instead.\"\n    );\n  }\n  return invokeCallback;\n}\nfunction mapChildren(children, func, context) {\n  if (null == children) return children;\n  var result = [],\n    count = 0;\n  mapIntoArray(children, result, \"\", \"\", function (child) {\n    return func.call(context, child, count++);\n  });\n  return result;\n}\nfunction lazyInitializer(payload) {\n  if (-1 === payload._status) {\n    var ctor = payload._result;\n    ctor = ctor();\n    ctor.then(\n      function (moduleObject) {\n        if (0 === payload._status || -1 === payload._status)\n          (payload._status = 1), (payload._result = moduleObject);\n      },\n      function (error) {\n        if (0 === payload._status || -1 === payload._status)\n          (payload._status = 2), (payload._result = error);\n      }\n    );\n    -1 === payload._status && ((payload._status = 0), (payload._result = ctor));\n  }\n  if (1 === payload._status) return payload._result.default;\n  throw payload._result;\n}\nvar reportGlobalError =\n    \"function\" === typeof reportError\n      ? reportError\n      : function (error) {\n          if (\n            \"object\" === typeof window &&\n            \"function\" === typeof window.ErrorEvent\n          ) {\n            var event = new window.ErrorEvent(\"error\", {\n              bubbles: !0,\n              cancelable: !0,\n              message:\n                \"object\" === typeof error &&\n                null !== error &&\n                \"string\" === typeof error.message\n                  ? String(error.message)\n                  : String(error),\n              error: error\n            });\n            if (!window.dispatchEvent(event)) return;\n          } else if (\n            \"object\" === typeof process &&\n            \"function\" === typeof process.emit\n          ) {\n            process.emit(\"uncaughtException\", error);\n            return;\n          }\n          console.error(error);\n        },\n  Children = {\n    map: mapChildren,\n    forEach: function (children, forEachFunc, forEachContext) {\n      mapChildren(\n        children,\n        function () {\n          forEachFunc.apply(this, arguments);\n        },\n        forEachContext\n      );\n    },\n    count: function (children) {\n      var n = 0;\n      mapChildren(children, function () {\n        n++;\n      });\n      return n;\n    },\n    toArray: function (children) {\n      return (\n        mapChildren(children, function (child) {\n          return child;\n        }) || []\n      );\n    },\n    only: function (children) {\n      if (!isValidElement(children))\n        throw Error(\n          \"React.Children.only expected to receive a single React element child.\"\n        );\n      return children;\n    }\n  };\nexports.Activity = REACT_ACTIVITY_TYPE;\nexports.Children = Children;\nexports.Component = Component;\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.Profiler = REACT_PROFILER_TYPE;\nexports.PureComponent = PureComponent;\nexports.StrictMode = REACT_STRICT_MODE_TYPE;\nexports.Suspense = REACT_SUSPENSE_TYPE;\nexports.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n  ReactSharedInternals;\nexports.__COMPILER_RUNTIME = {\n  __proto__: null,\n  c: function (size) {\n    return ReactSharedInternals.H.useMemoCache(size);\n  }\n};\nexports.cache = function (fn) {\n  return function () {\n    return fn.apply(null, arguments);\n  };\n};\nexports.cacheSignal = function () {\n  return null;\n};\nexports.cloneElement = function (element, config, children) {\n  if (null === element || void 0 === element)\n    throw Error(\n      \"The argument must be a React element, but you passed \" + element + \".\"\n    );\n  var props = assign({}, element.props),\n    key = element.key;\n  if (null != config)\n    for (propName in (void 0 !== config.key && (key = \"\" + config.key), config))\n      !hasOwnProperty.call(config, propName) ||\n        \"key\" === propName ||\n        \"__self\" === propName ||\n        \"__source\" === propName ||\n        (\"ref\" === propName && void 0 === config.ref) ||\n        (props[propName] = config[propName]);\n  var propName = arguments.length - 2;\n  if (1 === propName) props.children = children;\n  else if (1 < propName) {\n    for (var childArray = Array(propName), i = 0; i < propName; i++)\n      childArray[i] = arguments[i + 2];\n    props.children = childArray;\n  }\n  return ReactElement(element.type, key, props);\n};\nexports.createContext = function (defaultValue) {\n  defaultValue = {\n    $$typeof: REACT_CONTEXT_TYPE,\n    _currentValue: defaultValue,\n    _currentValue2: defaultValue,\n    _threadCount: 0,\n    Provider: null,\n    Consumer: null\n  };\n  defaultValue.Provider = defaultValue;\n  defaultValue.Consumer = {\n    $$typeof: REACT_CONSUMER_TYPE,\n    _context: defaultValue\n  };\n  return defaultValue;\n};\nexports.createElement = function (type, config, children) {\n  var propName,\n    props = {},\n    key = null;\n  if (null != config)\n    for (propName in (void 0 !== config.key && (key = \"\" + config.key), config))\n      hasOwnProperty.call(config, propName) &&\n        \"key\" !== propName &&\n        \"__self\" !== propName &&\n        \"__source\" !== propName &&\n        (props[propName] = config[propName]);\n  var childrenLength = arguments.length - 2;\n  if (1 === childrenLength) props.children = children;\n  else if (1 < childrenLength) {\n    for (var childArray = Array(childrenLength), i = 0; i < childrenLength; i++)\n      childArray[i] = arguments[i + 2];\n    props.children = childArray;\n  }\n  if (type && type.defaultProps)\n    for (propName in ((childrenLength = type.defaultProps), childrenLength))\n      void 0 === props[propName] &&\n        (props[propName] = childrenLength[propName]);\n  return ReactElement(type, key, props);\n};\nexports.createRef = function () {\n  return { current: null };\n};\nexports.forwardRef = function (render) {\n  return { $$typeof: REACT_FORWARD_REF_TYPE, render: render };\n};\nexports.isValidElement = isValidElement;\nexports.lazy = function (ctor) {\n  return {\n    $$typeof: REACT_LAZY_TYPE,\n    _payload: { _status: -1, _result: ctor },\n    _init: lazyInitializer\n  };\n};\nexports.memo = function (type, compare) {\n  return {\n    $$typeof: REACT_MEMO_TYPE,\n    type: type,\n    compare: void 0 === compare ? null : compare\n  };\n};\nexports.startTransition = function (scope) {\n  var prevTransition = ReactSharedInternals.T,\n    currentTransition = {};\n  ReactSharedInternals.T = currentTransition;\n  try {\n    var returnValue = scope(),\n      onStartTransitionFinish = ReactSharedInternals.S;\n    null !== onStartTransitionFinish &&\n      onStartTransitionFinish(currentTransition, returnValue);\n    \"object\" === typeof returnValue &&\n      null !== returnValue &&\n      \"function\" === typeof returnValue.then &&\n      returnValue.then(noop, reportGlobalError);\n  } catch (error) {\n    reportGlobalError(error);\n  } finally {\n    null !== prevTransition &&\n      null !== currentTransition.types &&\n      (prevTransition.types = currentTransition.types),\n      (ReactSharedInternals.T = prevTransition);\n  }\n};\nexports.unstable_useCacheRefresh = function () {\n  return ReactSharedInternals.H.useCacheRefresh();\n};\nexports.use = function (usable) {\n  return ReactSharedInternals.H.use(usable);\n};\nexports.useActionState = function (action, initialState, permalink) {\n  return ReactSharedInternals.H.useActionState(action, initialState, permalink);\n};\nexports.useCallback = function (callback, deps) {\n  return ReactSharedInternals.H.useCallback(callback, deps);\n};\nexports.useContext = function (Context) {\n  return ReactSharedInternals.H.useContext(Context);\n};\nexports.useDebugValue = function () {};\nexports.useDeferredValue = function (value, initialValue) {\n  return ReactSharedInternals.H.useDeferredValue(value, initialValue);\n};\nexports.useEffect = function (create, deps) {\n  return ReactSharedInternals.H.useEffect(create, deps);\n};\nexports.useEffectEvent = function (callback) {\n  return ReactSharedInternals.H.useEffectEvent(callback);\n};\nexports.useId = function () {\n  return ReactSharedInternals.H.useId();\n};\nexports.useImperativeHandle = function (ref, create, deps) {\n  return ReactSharedInternals.H.useImperativeHandle(ref, create, deps);\n};\nexports.useInsertionEffect = function (create, deps) {\n  return ReactSharedInternals.H.useInsertionEffect(create, deps);\n};\nexports.useLayoutEffect = function (create, deps) {\n  return ReactSharedInternals.H.useLayoutEffect(create, deps);\n};\nexports.useMemo = function (create, deps) {\n  return ReactSharedInternals.H.useMemo(create, deps);\n};\nexports.useOptimistic = function (passthrough, reducer) {\n  return ReactSharedInternals.H.useOptimistic(passthrough, reducer);\n};\nexports.useReducer = function (reducer, initialArg, init) {\n  return ReactSharedInternals.H.useReducer(reducer, initialArg, init);\n};\nexports.useRef = function (initialValue) {\n  return ReactSharedInternals.H.useRef(initialValue);\n};\nexports.useState = function (initialState) {\n  return ReactSharedInternals.H.useState(initialState);\n};\nexports.useSyncExternalStore = function (\n  subscribe,\n  getSnapshot,\n  getServerSnapshot\n) {\n  return ReactSharedInternals.H.useSyncExternalStore(\n    subscribe,\n    getSnapshot,\n    getServerSnapshot\n  );\n};\nexports.useTransition = function () {\n  return ReactSharedInternals.H.useTransition();\n};\nexports.version = \"19.2.5\";\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react.production.js');\n} else {\n  module.exports = require('./cjs/react.development.js');\n}\n","/**\n * @license React\n * react-dom.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\");\nfunction formatProdErrorMessage(code) {\n  var url = \"https://react.dev/errors/\" + code;\n  if (1 < arguments.length) {\n    url += \"?args[]=\" + encodeURIComponent(arguments[1]);\n    for (var i = 2; i < arguments.length; i++)\n      url += \"&args[]=\" + encodeURIComponent(arguments[i]);\n  }\n  return (\n    \"Minified React error #\" +\n    code +\n    \"; visit \" +\n    url +\n    \" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"\n  );\n}\nfunction noop() {}\nvar Internals = {\n    d: {\n      f: noop,\n      r: function () {\n        throw Error(formatProdErrorMessage(522));\n      },\n      D: noop,\n      C: noop,\n      L: noop,\n      m: noop,\n      X: noop,\n      S: noop,\n      M: noop\n    },\n    p: 0,\n    findDOMNode: null\n  },\n  REACT_PORTAL_TYPE = Symbol.for(\"react.portal\");\nfunction createPortal$1(children, containerInfo, implementation) {\n  var key =\n    3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : null;\n  return {\n    $$typeof: REACT_PORTAL_TYPE,\n    key: null == key ? null : \"\" + key,\n    children: children,\n    containerInfo: containerInfo,\n    implementation: implementation\n  };\n}\nvar ReactSharedInternals =\n  React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;\nfunction getCrossOriginStringAs(as, input) {\n  if (\"font\" === as) return \"\";\n  if (\"string\" === typeof input)\n    return \"use-credentials\" === input ? input : \"\";\n}\nexports.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n  Internals;\nexports.createPortal = function (children, container) {\n  var key =\n    2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : null;\n  if (\n    !container ||\n    (1 !== container.nodeType &&\n      9 !== container.nodeType &&\n      11 !== container.nodeType)\n  )\n    throw Error(formatProdErrorMessage(299));\n  return createPortal$1(children, container, null, key);\n};\nexports.flushSync = function (fn) {\n  var previousTransition = ReactSharedInternals.T,\n    previousUpdatePriority = Internals.p;\n  try {\n    if (((ReactSharedInternals.T = null), (Internals.p = 2), fn)) return fn();\n  } finally {\n    (ReactSharedInternals.T = previousTransition),\n      (Internals.p = previousUpdatePriority),\n      Internals.d.f();\n  }\n};\nexports.preconnect = function (href, options) {\n  \"string\" === typeof href &&\n    (options\n      ? ((options = options.crossOrigin),\n        (options =\n          \"string\" === typeof options\n            ? \"use-credentials\" === options\n              ? options\n              : \"\"\n            : void 0))\n      : (options = null),\n    Internals.d.C(href, options));\n};\nexports.prefetchDNS = function (href) {\n  \"string\" === typeof href && Internals.d.D(href);\n};\nexports.preinit = function (href, options) {\n  if (\"string\" === typeof href && options && \"string\" === typeof options.as) {\n    var as = options.as,\n      crossOrigin = getCrossOriginStringAs(as, options.crossOrigin),\n      integrity =\n        \"string\" === typeof options.integrity ? options.integrity : void 0,\n      fetchPriority =\n        \"string\" === typeof options.fetchPriority\n          ? options.fetchPriority\n          : void 0;\n    \"style\" === as\n      ? Internals.d.S(\n          href,\n          \"string\" === typeof options.precedence ? options.precedence : void 0,\n          {\n            crossOrigin: crossOrigin,\n            integrity: integrity,\n            fetchPriority: fetchPriority\n          }\n        )\n      : \"script\" === as &&\n        Internals.d.X(href, {\n          crossOrigin: crossOrigin,\n          integrity: integrity,\n          fetchPriority: fetchPriority,\n          nonce: \"string\" === typeof options.nonce ? options.nonce : void 0\n        });\n  }\n};\nexports.preinitModule = function (href, options) {\n  if (\"string\" === typeof href)\n    if (\"object\" === typeof options && null !== options) {\n      if (null == options.as || \"script\" === options.as) {\n        var crossOrigin = getCrossOriginStringAs(\n          options.as,\n          options.crossOrigin\n        );\n        Internals.d.M(href, {\n          crossOrigin: crossOrigin,\n          integrity:\n            \"string\" === typeof options.integrity ? options.integrity : void 0,\n          nonce: \"string\" === typeof options.nonce ? options.nonce : void 0\n        });\n      }\n    } else null == options && Internals.d.M(href);\n};\nexports.preload = function (href, options) {\n  if (\n    \"string\" === typeof href &&\n    \"object\" === typeof options &&\n    null !== options &&\n    \"string\" === typeof options.as\n  ) {\n    var as = options.as,\n      crossOrigin = getCrossOriginStringAs(as, options.crossOrigin);\n    Internals.d.L(href, as, {\n      crossOrigin: crossOrigin,\n      integrity:\n        \"string\" === typeof options.integrity ? options.integrity : void 0,\n      nonce: \"string\" === typeof options.nonce ? options.nonce : void 0,\n      type: \"string\" === typeof options.type ? options.type : void 0,\n      fetchPriority:\n        \"string\" === typeof options.fetchPriority\n          ? options.fetchPriority\n          : void 0,\n      referrerPolicy:\n        \"string\" === typeof options.referrerPolicy\n          ? options.referrerPolicy\n          : void 0,\n      imageSrcSet:\n        \"string\" === typeof options.imageSrcSet ? options.imageSrcSet : void 0,\n      imageSizes:\n        \"string\" === typeof options.imageSizes ? options.imageSizes : void 0,\n      media: \"string\" === typeof options.media ? options.media : void 0\n    });\n  }\n};\nexports.preloadModule = function (href, options) {\n  if (\"string\" === typeof href)\n    if (options) {\n      var crossOrigin = getCrossOriginStringAs(options.as, options.crossOrigin);\n      Internals.d.m(href, {\n        as:\n          \"string\" === typeof options.as && \"script\" !== options.as\n            ? options.as\n            : void 0,\n        crossOrigin: crossOrigin,\n        integrity:\n          \"string\" === typeof options.integrity ? options.integrity : void 0\n      });\n    } else Internals.d.m(href);\n};\nexports.requestFormReset = function (form) {\n  Internals.d.r(form);\n};\nexports.unstable_batchedUpdates = function (fn, a) {\n  return fn(a);\n};\nexports.useFormState = function (action, initialState, permalink) {\n  return ReactSharedInternals.H.useFormState(action, initialState, permalink);\n};\nexports.useFormStatus = function () {\n  return ReactSharedInternals.H.useHostTransitionStatus();\n};\nexports.version = \"19.2.5\";\n","'use strict';\n\nfunction checkDCE() {\n  /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n  if (\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n  ) {\n    return;\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    // This branch is unreachable because this function is only called\n    // in production, but the condition is true only in development.\n    // Therefore if the branch is still here, dead code elimination wasn't\n    // properly applied.\n    // Don't change the message. React DevTools relies on it. Also make sure\n    // this message doesn't occur elsewhere in this function, or it will cause\n    // a false positive.\n    throw new Error('^_^');\n  }\n  try {\n    // Verify that the code above has been dead code eliminated (DCE'd).\n    __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n  } catch (err) {\n    // DevTools shouldn't crash React, no matter what.\n    // We should still report in case we break this code.\n    console.error(err);\n  }\n}\n\nif (process.env.NODE_ENV === 'production') {\n  // DCE check should happen before ReactDOM bundle executes so that\n  // DevTools can report bad minification during injection.\n  checkDCE();\n  module.exports = require('./cjs/react-dom.production.js');\n} else {\n  module.exports = require('./cjs/react-dom.development.js');\n}\n","/**\n * @license React\n * scheduler.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nfunction push(heap, node) {\n  var index = heap.length;\n  heap.push(node);\n  a: for (; 0 < index; ) {\n    var parentIndex = (index - 1) >>> 1,\n      parent = heap[parentIndex];\n    if (0 < compare(parent, node))\n      (heap[parentIndex] = node), (heap[index] = parent), (index = parentIndex);\n    else break a;\n  }\n}\nfunction peek(heap) {\n  return 0 === heap.length ? null : heap[0];\n}\nfunction pop(heap) {\n  if (0 === heap.length) return null;\n  var first = heap[0],\n    last = heap.pop();\n  if (last !== first) {\n    heap[0] = last;\n    a: for (\n      var index = 0, length = heap.length, halfLength = length >>> 1;\n      index < halfLength;\n\n    ) {\n      var leftIndex = 2 * (index + 1) - 1,\n        left = heap[leftIndex],\n        rightIndex = leftIndex + 1,\n        right = heap[rightIndex];\n      if (0 > compare(left, last))\n        rightIndex < length && 0 > compare(right, left)\n          ? ((heap[index] = right),\n            (heap[rightIndex] = last),\n            (index = rightIndex))\n          : ((heap[index] = left),\n            (heap[leftIndex] = last),\n            (index = leftIndex));\n      else if (rightIndex < length && 0 > compare(right, last))\n        (heap[index] = right), (heap[rightIndex] = last), (index = rightIndex);\n      else break a;\n    }\n  }\n  return first;\n}\nfunction compare(a, b) {\n  var diff = a.sortIndex - b.sortIndex;\n  return 0 !== diff ? diff : a.id - b.id;\n}\nexports.unstable_now = void 0;\nif (\"object\" === typeof performance && \"function\" === typeof performance.now) {\n  var localPerformance = performance;\n  exports.unstable_now = function () {\n    return localPerformance.now();\n  };\n} else {\n  var localDate = Date,\n    initialTime = localDate.now();\n  exports.unstable_now = function () {\n    return localDate.now() - initialTime;\n  };\n}\nvar taskQueue = [],\n  timerQueue = [],\n  taskIdCounter = 1,\n  currentTask = null,\n  currentPriorityLevel = 3,\n  isPerformingWork = !1,\n  isHostCallbackScheduled = !1,\n  isHostTimeoutScheduled = !1,\n  needsPaint = !1,\n  localSetTimeout = \"function\" === typeof setTimeout ? setTimeout : null,\n  localClearTimeout = \"function\" === typeof clearTimeout ? clearTimeout : null,\n  localSetImmediate = \"undefined\" !== typeof setImmediate ? setImmediate : null;\nfunction advanceTimers(currentTime) {\n  for (var timer = peek(timerQueue); null !== timer; ) {\n    if (null === timer.callback) pop(timerQueue);\n    else if (timer.startTime <= currentTime)\n      pop(timerQueue),\n        (timer.sortIndex = timer.expirationTime),\n        push(taskQueue, timer);\n    else break;\n    timer = peek(timerQueue);\n  }\n}\nfunction handleTimeout(currentTime) {\n  isHostTimeoutScheduled = !1;\n  advanceTimers(currentTime);\n  if (!isHostCallbackScheduled)\n    if (null !== peek(taskQueue))\n      (isHostCallbackScheduled = !0),\n        isMessageLoopRunning ||\n          ((isMessageLoopRunning = !0), schedulePerformWorkUntilDeadline());\n    else {\n      var firstTimer = peek(timerQueue);\n      null !== firstTimer &&\n        requestHostTimeout(handleTimeout, firstTimer.startTime - currentTime);\n    }\n}\nvar isMessageLoopRunning = !1,\n  taskTimeoutID = -1,\n  frameInterval = 5,\n  startTime = -1;\nfunction shouldYieldToHost() {\n  return needsPaint\n    ? !0\n    : exports.unstable_now() - startTime < frameInterval\n      ? !1\n      : !0;\n}\nfunction performWorkUntilDeadline() {\n  needsPaint = !1;\n  if (isMessageLoopRunning) {\n    var currentTime = exports.unstable_now();\n    startTime = currentTime;\n    var hasMoreWork = !0;\n    try {\n      a: {\n        isHostCallbackScheduled = !1;\n        isHostTimeoutScheduled &&\n          ((isHostTimeoutScheduled = !1),\n          localClearTimeout(taskTimeoutID),\n          (taskTimeoutID = -1));\n        isPerformingWork = !0;\n        var previousPriorityLevel = currentPriorityLevel;\n        try {\n          b: {\n            advanceTimers(currentTime);\n            for (\n              currentTask = peek(taskQueue);\n              null !== currentTask &&\n              !(\n                currentTask.expirationTime > currentTime && shouldYieldToHost()\n              );\n\n            ) {\n              var callback = currentTask.callback;\n              if (\"function\" === typeof callback) {\n                currentTask.callback = null;\n                currentPriorityLevel = currentTask.priorityLevel;\n                var continuationCallback = callback(\n                  currentTask.expirationTime <= currentTime\n                );\n                currentTime = exports.unstable_now();\n                if (\"function\" === typeof continuationCallback) {\n                  currentTask.callback = continuationCallback;\n                  advanceTimers(currentTime);\n                  hasMoreWork = !0;\n                  break b;\n                }\n                currentTask === peek(taskQueue) && pop(taskQueue);\n                advanceTimers(currentTime);\n              } else pop(taskQueue);\n              currentTask = peek(taskQueue);\n            }\n            if (null !== currentTask) hasMoreWork = !0;\n            else {\n              var firstTimer = peek(timerQueue);\n              null !== firstTimer &&\n                requestHostTimeout(\n                  handleTimeout,\n                  firstTimer.startTime - currentTime\n                );\n              hasMoreWork = !1;\n            }\n          }\n          break a;\n        } finally {\n          (currentTask = null),\n            (currentPriorityLevel = previousPriorityLevel),\n            (isPerformingWork = !1);\n        }\n        hasMoreWork = void 0;\n      }\n    } finally {\n      hasMoreWork\n        ? schedulePerformWorkUntilDeadline()\n        : (isMessageLoopRunning = !1);\n    }\n  }\n}\nvar schedulePerformWorkUntilDeadline;\nif (\"function\" === typeof localSetImmediate)\n  schedulePerformWorkUntilDeadline = function () {\n    localSetImmediate(performWorkUntilDeadline);\n  };\nelse if (\"undefined\" !== typeof MessageChannel) {\n  var channel = new MessageChannel(),\n    port = channel.port2;\n  channel.port1.onmessage = performWorkUntilDeadline;\n  schedulePerformWorkUntilDeadline = function () {\n    port.postMessage(null);\n  };\n} else\n  schedulePerformWorkUntilDeadline = function () {\n    localSetTimeout(performWorkUntilDeadline, 0);\n  };\nfunction requestHostTimeout(callback, ms) {\n  taskTimeoutID = localSetTimeout(function () {\n    callback(exports.unstable_now());\n  }, ms);\n}\nexports.unstable_IdlePriority = 5;\nexports.unstable_ImmediatePriority = 1;\nexports.unstable_LowPriority = 4;\nexports.unstable_NormalPriority = 3;\nexports.unstable_Profiling = null;\nexports.unstable_UserBlockingPriority = 2;\nexports.unstable_cancelCallback = function (task) {\n  task.callback = null;\n};\nexports.unstable_forceFrameRate = function (fps) {\n  0 > fps || 125 < fps\n    ? console.error(\n        \"forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported\"\n      )\n    : (frameInterval = 0 < fps ? Math.floor(1e3 / fps) : 5);\n};\nexports.unstable_getCurrentPriorityLevel = function () {\n  return currentPriorityLevel;\n};\nexports.unstable_next = function (eventHandler) {\n  switch (currentPriorityLevel) {\n    case 1:\n    case 2:\n    case 3:\n      var priorityLevel = 3;\n      break;\n    default:\n      priorityLevel = currentPriorityLevel;\n  }\n  var previousPriorityLevel = currentPriorityLevel;\n  currentPriorityLevel = priorityLevel;\n  try {\n    return eventHandler();\n  } finally {\n    currentPriorityLevel = previousPriorityLevel;\n  }\n};\nexports.unstable_requestPaint = function () {\n  needsPaint = !0;\n};\nexports.unstable_runWithPriority = function (priorityLevel, eventHandler) {\n  switch (priorityLevel) {\n    case 1:\n    case 2:\n    case 3:\n    case 4:\n    case 5:\n      break;\n    default:\n      priorityLevel = 3;\n  }\n  var previousPriorityLevel = currentPriorityLevel;\n  currentPriorityLevel = priorityLevel;\n  try {\n    return eventHandler();\n  } finally {\n    currentPriorityLevel = previousPriorityLevel;\n  }\n};\nexports.unstable_scheduleCallback = function (\n  priorityLevel,\n  callback,\n  options\n) {\n  var currentTime = exports.unstable_now();\n  \"object\" === typeof options && null !== options\n    ? ((options = options.delay),\n      (options =\n        \"number\" === typeof options && 0 < options\n          ? currentTime + options\n          : currentTime))\n    : (options = currentTime);\n  switch (priorityLevel) {\n    case 1:\n      var timeout = -1;\n      break;\n    case 2:\n      timeout = 250;\n      break;\n    case 5:\n      timeout = 1073741823;\n      break;\n    case 4:\n      timeout = 1e4;\n      break;\n    default:\n      timeout = 5e3;\n  }\n  timeout = options + timeout;\n  priorityLevel = {\n    id: taskIdCounter++,\n    callback: callback,\n    priorityLevel: priorityLevel,\n    startTime: options,\n    expirationTime: timeout,\n    sortIndex: -1\n  };\n  options > currentTime\n    ? ((priorityLevel.sortIndex = options),\n      push(timerQueue, priorityLevel),\n      null === peek(taskQueue) &&\n        priorityLevel === peek(timerQueue) &&\n        (isHostTimeoutScheduled\n          ? (localClearTimeout(taskTimeoutID), (taskTimeoutID = -1))\n          : (isHostTimeoutScheduled = !0),\n        requestHostTimeout(handleTimeout, options - currentTime)))\n    : ((priorityLevel.sortIndex = timeout),\n      push(taskQueue, priorityLevel),\n      isHostCallbackScheduled ||\n        isPerformingWork ||\n        ((isHostCallbackScheduled = !0),\n        isMessageLoopRunning ||\n          ((isMessageLoopRunning = !0), schedulePerformWorkUntilDeadline())));\n  return priorityLevel;\n};\nexports.unstable_shouldYield = shouldYieldToHost;\nexports.unstable_wrapCallback = function (callback) {\n  var parentPriorityLevel = currentPriorityLevel;\n  return function () {\n    var previousPriorityLevel = currentPriorityLevel;\n    currentPriorityLevel = parentPriorityLevel;\n    try {\n      return callback.apply(this, arguments);\n    } finally {\n      currentPriorityLevel = previousPriorityLevel;\n    }\n  };\n};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/scheduler.production.js');\n} else {\n  module.exports = require('./cjs/scheduler.development.js');\n}\n","/**\n * @license React\n * react-dom-client.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n\"use strict\";\nvar Scheduler = require(\"scheduler\"),\n  React = require(\"react\"),\n  ReactDOM = require(\"react-dom\");\nfunction formatProdErrorMessage(code) {\n  var url = \"https://react.dev/errors/\" + code;\n  if (1 < arguments.length) {\n    url += \"?args[]=\" + encodeURIComponent(arguments[1]);\n    for (var i = 2; i < arguments.length; i++)\n      url += \"&args[]=\" + encodeURIComponent(arguments[i]);\n  }\n  return (\n    \"Minified React error #\" +\n    code +\n    \"; visit \" +\n    url +\n    \" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"\n  );\n}\nfunction isValidContainer(node) {\n  return !(\n    !node ||\n    (1 !== node.nodeType && 9 !== node.nodeType && 11 !== node.nodeType)\n  );\n}\nfunction getNearestMountedFiber(fiber) {\n  var node = fiber,\n    nearestMounted = fiber;\n  if (fiber.alternate) for (; node.return; ) node = node.return;\n  else {\n    fiber = node;\n    do\n      (node = fiber),\n        0 !== (node.flags & 4098) && (nearestMounted = node.return),\n        (fiber = node.return);\n    while (fiber);\n  }\n  return 3 === node.tag ? nearestMounted : null;\n}\nfunction getSuspenseInstanceFromFiber(fiber) {\n  if (13 === fiber.tag) {\n    var suspenseState = fiber.memoizedState;\n    null === suspenseState &&\n      ((fiber = fiber.alternate),\n      null !== fiber && (suspenseState = fiber.memoizedState));\n    if (null !== suspenseState) return suspenseState.dehydrated;\n  }\n  return null;\n}\nfunction getActivityInstanceFromFiber(fiber) {\n  if (31 === fiber.tag) {\n    var activityState = fiber.memoizedState;\n    null === activityState &&\n      ((fiber = fiber.alternate),\n      null !== fiber && (activityState = fiber.memoizedState));\n    if (null !== activityState) return activityState.dehydrated;\n  }\n  return null;\n}\nfunction assertIsMounted(fiber) {\n  if (getNearestMountedFiber(fiber) !== fiber)\n    throw Error(formatProdErrorMessage(188));\n}\nfunction findCurrentFiberUsingSlowPath(fiber) {\n  var alternate = fiber.alternate;\n  if (!alternate) {\n    alternate = getNearestMountedFiber(fiber);\n    if (null === alternate) throw Error(formatProdErrorMessage(188));\n    return alternate !== fiber ? null : fiber;\n  }\n  for (var a = fiber, b = alternate; ; ) {\n    var parentA = a.return;\n    if (null === parentA) break;\n    var parentB = parentA.alternate;\n    if (null === parentB) {\n      b = parentA.return;\n      if (null !== b) {\n        a = b;\n        continue;\n      }\n      break;\n    }\n    if (parentA.child === parentB.child) {\n      for (parentB = parentA.child; parentB; ) {\n        if (parentB === a) return assertIsMounted(parentA), fiber;\n        if (parentB === b) return assertIsMounted(parentA), alternate;\n        parentB = parentB.sibling;\n      }\n      throw Error(formatProdErrorMessage(188));\n    }\n    if (a.return !== b.return) (a = parentA), (b = parentB);\n    else {\n      for (var didFindChild = !1, child$0 = parentA.child; child$0; ) {\n        if (child$0 === a) {\n          didFindChild = !0;\n          a = parentA;\n          b = parentB;\n          break;\n        }\n        if (child$0 === b) {\n          didFindChild = !0;\n          b = parentA;\n          a = parentB;\n          break;\n        }\n        child$0 = child$0.sibling;\n      }\n      if (!didFindChild) {\n        for (child$0 = parentB.child; child$0; ) {\n          if (child$0 === a) {\n            didFindChild = !0;\n            a = parentB;\n            b = parentA;\n            break;\n          }\n          if (child$0 === b) {\n            didFindChild = !0;\n            b = parentB;\n            a = parentA;\n            break;\n          }\n          child$0 = child$0.sibling;\n        }\n        if (!didFindChild) throw Error(formatProdErrorMessage(189));\n      }\n    }\n    if (a.alternate !== b) throw Error(formatProdErrorMessage(190));\n  }\n  if (3 !== a.tag) throw Error(formatProdErrorMessage(188));\n  return a.stateNode.current === a ? fiber : alternate;\n}\nfunction findCurrentHostFiberImpl(node) {\n  var tag = node.tag;\n  if (5 === tag || 26 === tag || 27 === tag || 6 === tag) return node;\n  for (node = node.child; null !== node; ) {\n    tag = findCurrentHostFiberImpl(node);\n    if (null !== tag) return tag;\n    node = node.sibling;\n  }\n  return null;\n}\nvar assign = Object.assign,\n  REACT_LEGACY_ELEMENT_TYPE = Symbol.for(\"react.element\"),\n  REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n  REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n  REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n  REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n  REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n  REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n  REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n  REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n  REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n  REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n  REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n  REACT_LAZY_TYPE = Symbol.for(\"react.lazy\");\nSymbol.for(\"react.scope\");\nvar REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\");\nSymbol.for(\"react.legacy_hidden\");\nSymbol.for(\"react.tracing_marker\");\nvar REACT_MEMO_CACHE_SENTINEL = Symbol.for(\"react.memo_cache_sentinel\");\nSymbol.for(\"react.view_transition\");\nvar MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nfunction getIteratorFn(maybeIterable) {\n  if (null === maybeIterable || \"object\" !== typeof maybeIterable) return null;\n  maybeIterable =\n    (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n    maybeIterable[\"@@iterator\"];\n  return \"function\" === typeof maybeIterable ? maybeIterable : null;\n}\nvar REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\");\nfunction getComponentNameFromType(type) {\n  if (null == type) return null;\n  if (\"function\" === typeof type)\n    return type.$$typeof === REACT_CLIENT_REFERENCE\n      ? null\n      : type.displayName || type.name || null;\n  if (\"string\" === typeof type) return type;\n  switch (type) {\n    case REACT_FRAGMENT_TYPE:\n      return \"Fragment\";\n    case REACT_PROFILER_TYPE:\n      return \"Profiler\";\n    case REACT_STRICT_MODE_TYPE:\n      return \"StrictMode\";\n    case REACT_SUSPENSE_TYPE:\n      return \"Suspense\";\n    case REACT_SUSPENSE_LIST_TYPE:\n      return \"SuspenseList\";\n    case REACT_ACTIVITY_TYPE:\n      return \"Activity\";\n  }\n  if (\"object\" === typeof type)\n    switch (type.$$typeof) {\n      case REACT_PORTAL_TYPE:\n        return \"Portal\";\n      case REACT_CONTEXT_TYPE:\n        return type.displayName || \"Context\";\n      case REACT_CONSUMER_TYPE:\n        return (type._context.displayName || \"Context\") + \".Consumer\";\n      case REACT_FORWARD_REF_TYPE:\n        var innerType = type.render;\n        type = type.displayName;\n        type ||\n          ((type = innerType.displayName || innerType.name || \"\"),\n          (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n        return type;\n      case REACT_MEMO_TYPE:\n        return (\n          (innerType = type.displayName || null),\n          null !== innerType\n            ? innerType\n            : getComponentNameFromType(type.type) || \"Memo\"\n        );\n      case REACT_LAZY_TYPE:\n        innerType = type._payload;\n        type = type._init;\n        try {\n          return getComponentNameFromType(type(innerType));\n        } catch (x) {}\n    }\n  return null;\n}\nvar isArrayImpl = Array.isArray,\n  ReactSharedInternals =\n    React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n  ReactDOMSharedInternals =\n    ReactDOM.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n  sharedNotPendingObject = {\n    pending: !1,\n    data: null,\n    method: null,\n    action: null\n  },\n  valueStack = [],\n  index = -1;\nfunction createCursor(defaultValue) {\n  return { current: defaultValue };\n}\nfunction pop(cursor) {\n  0 > index ||\n    ((cursor.current = valueStack[index]), (valueStack[index] = null), index--);\n}\nfunction push(cursor, value) {\n  index++;\n  valueStack[index] = cursor.current;\n  cursor.current = value;\n}\nvar contextStackCursor = createCursor(null),\n  contextFiberStackCursor = createCursor(null),\n  rootInstanceStackCursor = createCursor(null),\n  hostTransitionProviderCursor = createCursor(null);\nfunction pushHostContainer(fiber, nextRootInstance) {\n  push(rootInstanceStackCursor, nextRootInstance);\n  push(contextFiberStackCursor, fiber);\n  push(contextStackCursor, null);\n  switch (nextRootInstance.nodeType) {\n    case 9:\n    case 11:\n      fiber = (fiber = nextRootInstance.documentElement)\n        ? (fiber = fiber.namespaceURI)\n          ? getOwnHostContext(fiber)\n          : 0\n        : 0;\n      break;\n    default:\n      if (\n        ((fiber = nextRootInstance.tagName),\n        (nextRootInstance = nextRootInstance.namespaceURI))\n      )\n        (nextRootInstance = getOwnHostContext(nextRootInstance)),\n          (fiber = getChildHostContextProd(nextRootInstance, fiber));\n      else\n        switch (fiber) {\n          case \"svg\":\n            fiber = 1;\n            break;\n          case \"math\":\n            fiber = 2;\n            break;\n          default:\n            fiber = 0;\n        }\n  }\n  pop(contextStackCursor);\n  push(contextStackCursor, fiber);\n}\nfunction popHostContainer() {\n  pop(contextStackCursor);\n  pop(contextFiberStackCursor);\n  pop(rootInstanceStackCursor);\n}\nfunction pushHostContext(fiber) {\n  null !== fiber.memoizedState && push(hostTransitionProviderCursor, fiber);\n  var context = contextStackCursor.current;\n  var JSCompiler_inline_result = getChildHostContextProd(context, fiber.type);\n  context !== JSCompiler_inline_result &&\n    (push(contextFiberStackCursor, fiber),\n    push(contextStackCursor, JSCompiler_inline_result));\n}\nfunction popHostContext(fiber) {\n  contextFiberStackCursor.current === fiber &&\n    (pop(contextStackCursor), pop(contextFiberStackCursor));\n  hostTransitionProviderCursor.current === fiber &&\n    (pop(hostTransitionProviderCursor),\n    (HostTransitionContext._currentValue = sharedNotPendingObject));\n}\nvar prefix, suffix;\nfunction describeBuiltInComponentFrame(name) {\n  if (void 0 === prefix)\n    try {\n      throw Error();\n    } catch (x) {\n      var match = x.stack.trim().match(/\\n( *(at )?)/);\n      prefix = (match && match[1]) || \"\";\n      suffix =\n        -1 < x.stack.indexOf(\"\\n    at\")\n          ? \" (<anonymous>)\"\n          : -1 < x.stack.indexOf(\"@\")\n            ? \"@unknown:0:0\"\n            : \"\";\n    }\n  return \"\\n\" + prefix + name + suffix;\n}\nvar reentry = !1;\nfunction describeNativeComponentFrame(fn, construct) {\n  if (!fn || reentry) return \"\";\n  reentry = !0;\n  var previousPrepareStackTrace = Error.prepareStackTrace;\n  Error.prepareStackTrace = void 0;\n  try {\n    var RunInRootFrame = {\n      DetermineComponentFrameRoot: function () {\n        try {\n          if (construct) {\n            var Fake = function () {\n              throw Error();\n            };\n            Object.defineProperty(Fake.prototype, \"props\", {\n              set: function () {\n                throw Error();\n              }\n            });\n            if (\"object\" === typeof Reflect && Reflect.construct) {\n              try {\n                Reflect.construct(Fake, []);\n              } catch (x) {\n                var control = x;\n              }\n              Reflect.construct(fn, [], Fake);\n            } else {\n              try {\n                Fake.call();\n              } catch (x$1) {\n                control = x$1;\n              }\n              fn.call(Fake.prototype);\n            }\n          } else {\n            try {\n              throw Error();\n            } catch (x$2) {\n              control = x$2;\n            }\n            (Fake = fn()) &&\n              \"function\" === typeof Fake.catch &&\n              Fake.catch(function () {});\n          }\n        } catch (sample) {\n          if (sample && control && \"string\" === typeof sample.stack)\n            return [sample.stack, control.stack];\n        }\n        return [null, null];\n      }\n    };\n    RunInRootFrame.DetermineComponentFrameRoot.displayName =\n      \"DetermineComponentFrameRoot\";\n    var namePropDescriptor = Object.getOwnPropertyDescriptor(\n      RunInRootFrame.DetermineComponentFrameRoot,\n      \"name\"\n    );\n    namePropDescriptor &&\n      namePropDescriptor.configurable &&\n      Object.defineProperty(\n        RunInRootFrame.DetermineComponentFrameRoot,\n        \"name\",\n        { value: \"DetermineComponentFrameRoot\" }\n      );\n    var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(),\n      sampleStack = _RunInRootFrame$Deter[0],\n      controlStack = _RunInRootFrame$Deter[1];\n    if (sampleStack && controlStack) {\n      var sampleLines = sampleStack.split(\"\\n\"),\n        controlLines = controlStack.split(\"\\n\");\n      for (\n        namePropDescriptor = RunInRootFrame = 0;\n        RunInRootFrame < sampleLines.length &&\n        !sampleLines[RunInRootFrame].includes(\"DetermineComponentFrameRoot\");\n\n      )\n        RunInRootFrame++;\n      for (\n        ;\n        namePropDescriptor < controlLines.length &&\n        !controlLines[namePropDescriptor].includes(\n          \"DetermineComponentFrameRoot\"\n        );\n\n      )\n        namePropDescriptor++;\n      if (\n        RunInRootFrame === sampleLines.length ||\n        namePropDescriptor === controlLines.length\n      )\n        for (\n          RunInRootFrame = sampleLines.length - 1,\n            namePropDescriptor = controlLines.length - 1;\n          1 <= RunInRootFrame &&\n          0 <= namePropDescriptor &&\n          sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor];\n\n        )\n          namePropDescriptor--;\n      for (\n        ;\n        1 <= RunInRootFrame && 0 <= namePropDescriptor;\n        RunInRootFrame--, namePropDescriptor--\n      )\n        if (sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor]) {\n          if (1 !== RunInRootFrame || 1 !== namePropDescriptor) {\n            do\n              if (\n                (RunInRootFrame--,\n                namePropDescriptor--,\n                0 > namePropDescriptor ||\n                  sampleLines[RunInRootFrame] !==\n                    controlLines[namePropDescriptor])\n              ) {\n                var frame =\n                  \"\\n\" +\n                  sampleLines[RunInRootFrame].replace(\" at new \", \" at \");\n                fn.displayName &&\n                  frame.includes(\"<anonymous>\") &&\n                  (frame = frame.replace(\"<anonymous>\", fn.displayName));\n                return frame;\n              }\n            while (1 <= RunInRootFrame && 0 <= namePropDescriptor);\n          }\n          break;\n        }\n    }\n  } finally {\n    (reentry = !1), (Error.prepareStackTrace = previousPrepareStackTrace);\n  }\n  return (previousPrepareStackTrace = fn ? fn.displayName || fn.name : \"\")\n    ? describeBuiltInComponentFrame(previousPrepareStackTrace)\n    : \"\";\n}\nfunction describeFiber(fiber, childFiber) {\n  switch (fiber.tag) {\n    case 26:\n    case 27:\n    case 5:\n      return describeBuiltInComponentFrame(fiber.type);\n    case 16:\n      return describeBuiltInComponentFrame(\"Lazy\");\n    case 13:\n      return fiber.child !== childFiber && null !== childFiber\n        ? describeBuiltInComponentFrame(\"Suspense Fallback\")\n        : describeBuiltInComponentFrame(\"Suspense\");\n    case 19:\n      return describeBuiltInComponentFrame(\"SuspenseList\");\n    case 0:\n    case 15:\n      return describeNativeComponentFrame(fiber.type, !1);\n    case 11:\n      return describeNativeComponentFrame(fiber.type.render, !1);\n    case 1:\n      return describeNativeComponentFrame(fiber.type, !0);\n    case 31:\n      return describeBuiltInComponentFrame(\"Activity\");\n    default:\n      return \"\";\n  }\n}\nfunction getStackByFiberInDevAndProd(workInProgress) {\n  try {\n    var info = \"\",\n      previous = null;\n    do\n      (info += describeFiber(workInProgress, previous)),\n        (previous = workInProgress),\n        (workInProgress = workInProgress.return);\n    while (workInProgress);\n    return info;\n  } catch (x) {\n    return \"\\nError generating stack: \" + x.message + \"\\n\" + x.stack;\n  }\n}\nvar hasOwnProperty = Object.prototype.hasOwnProperty,\n  scheduleCallback$3 = Scheduler.unstable_scheduleCallback,\n  cancelCallback$1 = Scheduler.unstable_cancelCallback,\n  shouldYield = Scheduler.unstable_shouldYield,\n  requestPaint = Scheduler.unstable_requestPaint,\n  now = Scheduler.unstable_now,\n  getCurrentPriorityLevel = Scheduler.unstable_getCurrentPriorityLevel,\n  ImmediatePriority = Scheduler.unstable_ImmediatePriority,\n  UserBlockingPriority = Scheduler.unstable_UserBlockingPriority,\n  NormalPriority$1 = Scheduler.unstable_NormalPriority,\n  LowPriority = Scheduler.unstable_LowPriority,\n  IdlePriority = Scheduler.unstable_IdlePriority,\n  log$1 = Scheduler.log,\n  unstable_setDisableYieldValue = Scheduler.unstable_setDisableYieldValue,\n  rendererID = null,\n  injectedHook = null;\nfunction setIsStrictModeForDevtools(newIsStrictMode) {\n  \"function\" === typeof log$1 && unstable_setDisableYieldValue(newIsStrictMode);\n  if (injectedHook && \"function\" === typeof injectedHook.setStrictMode)\n    try {\n      injectedHook.setStrictMode(rendererID, newIsStrictMode);\n    } catch (err) {}\n}\nvar clz32 = Math.clz32 ? Math.clz32 : clz32Fallback,\n  log = Math.log,\n  LN2 = Math.LN2;\nfunction clz32Fallback(x) {\n  x >>>= 0;\n  return 0 === x ? 32 : (31 - ((log(x) / LN2) | 0)) | 0;\n}\nvar nextTransitionUpdateLane = 256,\n  nextTransitionDeferredLane = 262144,\n  nextRetryLane = 4194304;\nfunction getHighestPriorityLanes(lanes) {\n  var pendingSyncLanes = lanes & 42;\n  if (0 !== pendingSyncLanes) return pendingSyncLanes;\n  switch (lanes & -lanes) {\n    case 1:\n      return 1;\n    case 2:\n      return 2;\n    case 4:\n      return 4;\n    case 8:\n      return 8;\n    case 16:\n      return 16;\n    case 32:\n      return 32;\n    case 64:\n      return 64;\n    case 128:\n      return 128;\n    case 256:\n    case 512:\n    case 1024:\n    case 2048:\n    case 4096:\n    case 8192:\n    case 16384:\n    case 32768:\n    case 65536:\n    case 131072:\n      return lanes & 261888;\n    case 262144:\n    case 524288:\n    case 1048576:\n    case 2097152:\n      return lanes & 3932160;\n    case 4194304:\n    case 8388608:\n    case 16777216:\n    case 33554432:\n      return lanes & 62914560;\n    case 67108864:\n      return 67108864;\n    case 134217728:\n      return 134217728;\n    case 268435456:\n      return 268435456;\n    case 536870912:\n      return 536870912;\n    case 1073741824:\n      return 0;\n    default:\n      return lanes;\n  }\n}\nfunction getNextLanes(root, wipLanes, rootHasPendingCommit) {\n  var pendingLanes = root.pendingLanes;\n  if (0 === pendingLanes) return 0;\n  var nextLanes = 0,\n    suspendedLanes = root.suspendedLanes,\n    pingedLanes = root.pingedLanes;\n  root = root.warmLanes;\n  var nonIdlePendingLanes = pendingLanes & 134217727;\n  0 !== nonIdlePendingLanes\n    ? ((pendingLanes = nonIdlePendingLanes & ~suspendedLanes),\n      0 !== pendingLanes\n        ? (nextLanes = getHighestPriorityLanes(pendingLanes))\n        : ((pingedLanes &= nonIdlePendingLanes),\n          0 !== pingedLanes\n            ? (nextLanes = getHighestPriorityLanes(pingedLanes))\n            : rootHasPendingCommit ||\n              ((rootHasPendingCommit = nonIdlePendingLanes & ~root),\n              0 !== rootHasPendingCommit &&\n                (nextLanes = getHighestPriorityLanes(rootHasPendingCommit)))))\n    : ((nonIdlePendingLanes = pendingLanes & ~suspendedLanes),\n      0 !== nonIdlePendingLanes\n        ? (nextLanes = getHighestPriorityLanes(nonIdlePendingLanes))\n        : 0 !== pingedLanes\n          ? (nextLanes = getHighestPriorityLanes(pingedLanes))\n          : rootHasPendingCommit ||\n            ((rootHasPendingCommit = pendingLanes & ~root),\n            0 !== rootHasPendingCommit &&\n              (nextLanes = getHighestPriorityLanes(rootHasPendingCommit))));\n  return 0 === nextLanes\n    ? 0\n    : 0 !== wipLanes &&\n        wipLanes !== nextLanes &&\n        0 === (wipLanes & suspendedLanes) &&\n        ((suspendedLanes = nextLanes & -nextLanes),\n        (rootHasPendingCommit = wipLanes & -wipLanes),\n        suspendedLanes >= rootHasPendingCommit ||\n          (32 === suspendedLanes && 0 !== (rootHasPendingCommit & 4194048)))\n      ? wipLanes\n      : nextLanes;\n}\nfunction checkIfRootIsPrerendering(root, renderLanes) {\n  return (\n    0 ===\n    (root.pendingLanes &\n      ~(root.suspendedLanes & ~root.pingedLanes) &\n      renderLanes)\n  );\n}\nfunction computeExpirationTime(lane, currentTime) {\n  switch (lane) {\n    case 1:\n    case 2:\n    case 4:\n    case 8:\n    case 64:\n      return currentTime + 250;\n    case 16:\n    case 32:\n    case 128:\n    case 256:\n    case 512:\n    case 1024:\n    case 2048:\n    case 4096:\n    case 8192:\n    case 16384:\n    case 32768:\n    case 65536:\n    case 131072:\n    case 262144:\n    case 524288:\n    case 1048576:\n    case 2097152:\n      return currentTime + 5e3;\n    case 4194304:\n    case 8388608:\n    case 16777216:\n    case 33554432:\n      return -1;\n    case 67108864:\n    case 134217728:\n    case 268435456:\n    case 536870912:\n    case 1073741824:\n      return -1;\n    default:\n      return -1;\n  }\n}\nfunction claimNextRetryLane() {\n  var lane = nextRetryLane;\n  nextRetryLane <<= 1;\n  0 === (nextRetryLane & 62914560) && (nextRetryLane = 4194304);\n  return lane;\n}\nfunction createLaneMap(initial) {\n  for (var laneMap = [], i = 0; 31 > i; i++) laneMap.push(initial);\n  return laneMap;\n}\nfunction markRootUpdated$1(root, updateLane) {\n  root.pendingLanes |= updateLane;\n  268435456 !== updateLane &&\n    ((root.suspendedLanes = 0), (root.pingedLanes = 0), (root.warmLanes = 0));\n}\nfunction markRootFinished(\n  root,\n  finishedLanes,\n  remainingLanes,\n  spawnedLane,\n  updatedLanes,\n  suspendedRetryLanes\n) {\n  var previouslyPendingLanes = root.pendingLanes;\n  root.pendingLanes = remainingLanes;\n  root.suspendedLanes = 0;\n  root.pingedLanes = 0;\n  root.warmLanes = 0;\n  root.expiredLanes &= remainingLanes;\n  root.entangledLanes &= remainingLanes;\n  root.errorRecoveryDisabledLanes &= remainingLanes;\n  root.shellSuspendCounter = 0;\n  var entanglements = root.entanglements,\n    expirationTimes = root.expirationTimes,\n    hiddenUpdates = root.hiddenUpdates;\n  for (\n    remainingLanes = previouslyPendingLanes & ~remainingLanes;\n    0 < remainingLanes;\n\n  ) {\n    var index$7 = 31 - clz32(remainingLanes),\n      lane = 1 << index$7;\n    entanglements[index$7] = 0;\n    expirationTimes[index$7] = -1;\n    var hiddenUpdatesForLane = hiddenUpdates[index$7];\n    if (null !== hiddenUpdatesForLane)\n      for (\n        hiddenUpdates[index$7] = null, index$7 = 0;\n        index$7 < hiddenUpdatesForLane.length;\n        index$7++\n      ) {\n        var update = hiddenUpdatesForLane[index$7];\n        null !== update && (update.lane &= -536870913);\n      }\n    remainingLanes &= ~lane;\n  }\n  0 !== spawnedLane && markSpawnedDeferredLane(root, spawnedLane, 0);\n  0 !== suspendedRetryLanes &&\n    0 === updatedLanes &&\n    0 !== root.tag &&\n    (root.suspendedLanes |=\n      suspendedRetryLanes & ~(previouslyPendingLanes & ~finishedLanes));\n}\nfunction markSpawnedDeferredLane(root, spawnedLane, entangledLanes) {\n  root.pendingLanes |= spawnedLane;\n  root.suspendedLanes &= ~spawnedLane;\n  var spawnedLaneIndex = 31 - clz32(spawnedLane);\n  root.entangledLanes |= spawnedLane;\n  root.entanglements[spawnedLaneIndex] =\n    root.entanglements[spawnedLaneIndex] |\n    1073741824 |\n    (entangledLanes & 261930);\n}\nfunction markRootEntangled(root, entangledLanes) {\n  var rootEntangledLanes = (root.entangledLanes |= entangledLanes);\n  for (root = root.entanglements; rootEntangledLanes; ) {\n    var index$8 = 31 - clz32(rootEntangledLanes),\n      lane = 1 << index$8;\n    (lane & entangledLanes) | (root[index$8] & entangledLanes) &&\n      (root[index$8] |= entangledLanes);\n    rootEntangledLanes &= ~lane;\n  }\n}\nfunction getBumpedLaneForHydration(root, renderLanes) {\n  var renderLane = renderLanes & -renderLanes;\n  renderLane =\n    0 !== (renderLane & 42) ? 1 : getBumpedLaneForHydrationByLane(renderLane);\n  return 0 !== (renderLane & (root.suspendedLanes | renderLanes))\n    ? 0\n    : renderLane;\n}\nfunction getBumpedLaneForHydrationByLane(lane) {\n  switch (lane) {\n    case 2:\n      lane = 1;\n      break;\n    case 8:\n      lane = 4;\n      break;\n    case 32:\n      lane = 16;\n      break;\n    case 256:\n    case 512:\n    case 1024:\n    case 2048:\n    case 4096:\n    case 8192:\n    case 16384:\n    case 32768:\n    case 65536:\n    case 131072:\n    case 262144:\n    case 524288:\n    case 1048576:\n    case 2097152:\n    case 4194304:\n    case 8388608:\n    case 16777216:\n    case 33554432:\n      lane = 128;\n      break;\n    case 268435456:\n      lane = 134217728;\n      break;\n    default:\n      lane = 0;\n  }\n  return lane;\n}\nfunction lanesToEventPriority(lanes) {\n  lanes &= -lanes;\n  return 2 < lanes\n    ? 8 < lanes\n      ? 0 !== (lanes & 134217727)\n        ? 32\n        : 268435456\n      : 8\n    : 2;\n}\nfunction resolveUpdatePriority() {\n  var updatePriority = ReactDOMSharedInternals.p;\n  if (0 !== updatePriority) return updatePriority;\n  updatePriority = window.event;\n  return void 0 === updatePriority ? 32 : getEventPriority(updatePriority.type);\n}\nfunction runWithPriority(priority, fn) {\n  var previousPriority = ReactDOMSharedInternals.p;\n  try {\n    return (ReactDOMSharedInternals.p = priority), fn();\n  } finally {\n    ReactDOMSharedInternals.p = previousPriority;\n  }\n}\nvar randomKey = Math.random().toString(36).slice(2),\n  internalInstanceKey = \"__reactFiber$\" + randomKey,\n  internalPropsKey = \"__reactProps$\" + randomKey,\n  internalContainerInstanceKey = \"__reactContainer$\" + randomKey,\n  internalEventHandlersKey = \"__reactEvents$\" + randomKey,\n  internalEventHandlerListenersKey = \"__reactListeners$\" + randomKey,\n  internalEventHandlesSetKey = \"__reactHandles$\" + randomKey,\n  internalRootNodeResourcesKey = \"__reactResources$\" + randomKey,\n  internalHoistableMarker = \"__reactMarker$\" + randomKey;\nfunction detachDeletedInstance(node) {\n  delete node[internalInstanceKey];\n  delete node[internalPropsKey];\n  delete node[internalEventHandlersKey];\n  delete node[internalEventHandlerListenersKey];\n  delete node[internalEventHandlesSetKey];\n}\nfunction getClosestInstanceFromNode(targetNode) {\n  var targetInst = targetNode[internalInstanceKey];\n  if (targetInst) return targetInst;\n  for (var parentNode = targetNode.parentNode; parentNode; ) {\n    if (\n      (targetInst =\n        parentNode[internalContainerInstanceKey] ||\n        parentNode[internalInstanceKey])\n    ) {\n      parentNode = targetInst.alternate;\n      if (\n        null !== targetInst.child ||\n        (null !== parentNode && null !== parentNode.child)\n      )\n        for (\n          targetNode = getParentHydrationBoundary(targetNode);\n          null !== targetNode;\n\n        ) {\n          if ((parentNode = targetNode[internalInstanceKey])) return parentNode;\n          targetNode = getParentHydrationBoundary(targetNode);\n        }\n      return targetInst;\n    }\n    targetNode = parentNode;\n    parentNode = targetNode.parentNode;\n  }\n  return null;\n}\nfunction getInstanceFromNode(node) {\n  if (\n    (node = node[internalInstanceKey] || node[internalContainerInstanceKey])\n  ) {\n    var tag = node.tag;\n    if (\n      5 === tag ||\n      6 === tag ||\n      13 === tag ||\n      31 === tag ||\n      26 === tag ||\n      27 === tag ||\n      3 === tag\n    )\n      return node;\n  }\n  return null;\n}\nfunction getNodeFromInstance(inst) {\n  var tag = inst.tag;\n  if (5 === tag || 26 === tag || 27 === tag || 6 === tag) return inst.stateNode;\n  throw Error(formatProdErrorMessage(33));\n}\nfunction getResourcesFromRoot(root) {\n  var resources = root[internalRootNodeResourcesKey];\n  resources ||\n    (resources = root[internalRootNodeResourcesKey] =\n      { hoistableStyles: new Map(), hoistableScripts: new Map() });\n  return resources;\n}\nfunction markNodeAsHoistable(node) {\n  node[internalHoistableMarker] = !0;\n}\nvar allNativeEvents = new Set(),\n  registrationNameDependencies = {};\nfunction registerTwoPhaseEvent(registrationName, dependencies) {\n  registerDirectEvent(registrationName, dependencies);\n  registerDirectEvent(registrationName + \"Capture\", dependencies);\n}\nfunction registerDirectEvent(registrationName, dependencies) {\n  registrationNameDependencies[registrationName] = dependencies;\n  for (\n    registrationName = 0;\n    registrationName < dependencies.length;\n    registrationName++\n  )\n    allNativeEvents.add(dependencies[registrationName]);\n}\nvar VALID_ATTRIBUTE_NAME_REGEX = RegExp(\n    \"^[:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD][:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]*$\"\n  ),\n  illegalAttributeNameCache = {},\n  validatedAttributeNameCache = {};\nfunction isAttributeNameSafe(attributeName) {\n  if (hasOwnProperty.call(validatedAttributeNameCache, attributeName))\n    return !0;\n  if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) return !1;\n  if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName))\n    return (validatedAttributeNameCache[attributeName] = !0);\n  illegalAttributeNameCache[attributeName] = !0;\n  return !1;\n}\nfunction setValueForAttribute(node, name, value) {\n  if (isAttributeNameSafe(name))\n    if (null === value) node.removeAttribute(name);\n    else {\n      switch (typeof value) {\n        case \"undefined\":\n        case \"function\":\n        case \"symbol\":\n          node.removeAttribute(name);\n          return;\n        case \"boolean\":\n          var prefix$10 = name.toLowerCase().slice(0, 5);\n          if (\"data-\" !== prefix$10 && \"aria-\" !== prefix$10) {\n            node.removeAttribute(name);\n            return;\n          }\n      }\n      node.setAttribute(name, \"\" + value);\n    }\n}\nfunction setValueForKnownAttribute(node, name, value) {\n  if (null === value) node.removeAttribute(name);\n  else {\n    switch (typeof value) {\n      case \"undefined\":\n      case \"function\":\n      case \"symbol\":\n      case \"boolean\":\n        node.removeAttribute(name);\n        return;\n    }\n    node.setAttribute(name, \"\" + value);\n  }\n}\nfunction setValueForNamespacedAttribute(node, namespace, name, value) {\n  if (null === value) node.removeAttribute(name);\n  else {\n    switch (typeof value) {\n      case \"undefined\":\n      case \"function\":\n      case \"symbol\":\n      case \"boolean\":\n        node.removeAttribute(name);\n        return;\n    }\n    node.setAttributeNS(namespace, name, \"\" + value);\n  }\n}\nfunction getToStringValue(value) {\n  switch (typeof value) {\n    case \"bigint\":\n    case \"boolean\":\n    case \"number\":\n    case \"string\":\n    case \"undefined\":\n      return value;\n    case \"object\":\n      return value;\n    default:\n      return \"\";\n  }\n}\nfunction isCheckable(elem) {\n  var type = elem.type;\n  return (\n    (elem = elem.nodeName) &&\n    \"input\" === elem.toLowerCase() &&\n    (\"checkbox\" === type || \"radio\" === type)\n  );\n}\nfunction trackValueOnNode(node, valueField, currentValue) {\n  var descriptor = Object.getOwnPropertyDescriptor(\n    node.constructor.prototype,\n    valueField\n  );\n  if (\n    !node.hasOwnProperty(valueField) &&\n    \"undefined\" !== typeof descriptor &&\n    \"function\" === typeof descriptor.get &&\n    \"function\" === typeof descriptor.set\n  ) {\n    var get = descriptor.get,\n      set = descriptor.set;\n    Object.defineProperty(node, valueField, {\n      configurable: !0,\n      get: function () {\n        return get.call(this);\n      },\n      set: function (value) {\n        currentValue = \"\" + value;\n        set.call(this, value);\n      }\n    });\n    Object.defineProperty(node, valueField, {\n      enumerable: descriptor.enumerable\n    });\n    return {\n      getValue: function () {\n        return currentValue;\n      },\n      setValue: function (value) {\n        currentValue = \"\" + value;\n      },\n      stopTracking: function () {\n        node._valueTracker = null;\n        delete node[valueField];\n      }\n    };\n  }\n}\nfunction track(node) {\n  if (!node._valueTracker) {\n    var valueField = isCheckable(node) ? \"checked\" : \"value\";\n    node._valueTracker = trackValueOnNode(\n      node,\n      valueField,\n      \"\" + node[valueField]\n    );\n  }\n}\nfunction updateValueIfChanged(node) {\n  if (!node) return !1;\n  var tracker = node._valueTracker;\n  if (!tracker) return !0;\n  var lastValue = tracker.getValue();\n  var value = \"\";\n  node &&\n    (value = isCheckable(node)\n      ? node.checked\n        ? \"true\"\n        : \"false\"\n      : node.value);\n  node = value;\n  return node !== lastValue ? (tracker.setValue(node), !0) : !1;\n}\nfunction getActiveElement(doc) {\n  doc = doc || (\"undefined\" !== typeof document ? document : void 0);\n  if (\"undefined\" === typeof doc) return null;\n  try {\n    return doc.activeElement || doc.body;\n  } catch (e) {\n    return doc.body;\n  }\n}\nvar escapeSelectorAttributeValueInsideDoubleQuotesRegex = /[\\n\"\\\\]/g;\nfunction escapeSelectorAttributeValueInsideDoubleQuotes(value) {\n  return value.replace(\n    escapeSelectorAttributeValueInsideDoubleQuotesRegex,\n    function (ch) {\n      return \"\\\\\" + ch.charCodeAt(0).toString(16) + \" \";\n    }\n  );\n}\nfunction updateInput(\n  element,\n  value,\n  defaultValue,\n  lastDefaultValue,\n  checked,\n  defaultChecked,\n  type,\n  name\n) {\n  element.name = \"\";\n  null != type &&\n  \"function\" !== typeof type &&\n  \"symbol\" !== typeof type &&\n  \"boolean\" !== typeof type\n    ? (element.type = type)\n    : element.removeAttribute(\"type\");\n  if (null != value)\n    if (\"number\" === type) {\n      if ((0 === value && \"\" === element.value) || element.value != value)\n        element.value = \"\" + getToStringValue(value);\n    } else\n      element.value !== \"\" + getToStringValue(value) &&\n        (element.value = \"\" + getToStringValue(value));\n  else\n    (\"submit\" !== type && \"reset\" !== type) || element.removeAttribute(\"value\");\n  null != value\n    ? setDefaultValue(element, type, getToStringValue(value))\n    : null != defaultValue\n      ? setDefaultValue(element, type, getToStringValue(defaultValue))\n      : null != lastDefaultValue && element.removeAttribute(\"value\");\n  null == checked &&\n    null != defaultChecked &&\n    (element.defaultChecked = !!defaultChecked);\n  null != checked &&\n    (element.checked =\n      checked && \"function\" !== typeof checked && \"symbol\" !== typeof checked);\n  null != name &&\n  \"function\" !== typeof name &&\n  \"symbol\" !== typeof name &&\n  \"boolean\" !== typeof name\n    ? (element.name = \"\" + getToStringValue(name))\n    : element.removeAttribute(\"name\");\n}\nfunction initInput(\n  element,\n  value,\n  defaultValue,\n  checked,\n  defaultChecked,\n  type,\n  name,\n  isHydrating\n) {\n  null != type &&\n    \"function\" !== typeof type &&\n    \"symbol\" !== typeof type &&\n    \"boolean\" !== typeof type &&\n    (element.type = type);\n  if (null != value || null != defaultValue) {\n    if (\n      !(\n        (\"submit\" !== type && \"reset\" !== type) ||\n        (void 0 !== value && null !== value)\n      )\n    ) {\n      track(element);\n      return;\n    }\n    defaultValue =\n      null != defaultValue ? \"\" + getToStringValue(defaultValue) : \"\";\n    value = null != value ? \"\" + getToStringValue(value) : defaultValue;\n    isHydrating || value === element.value || (element.value = value);\n    element.defaultValue = value;\n  }\n  checked = null != checked ? checked : defaultChecked;\n  checked =\n    \"function\" !== typeof checked && \"symbol\" !== typeof checked && !!checked;\n  element.checked = isHydrating ? element.checked : !!checked;\n  element.defaultChecked = !!checked;\n  null != name &&\n    \"function\" !== typeof name &&\n    \"symbol\" !== typeof name &&\n    \"boolean\" !== typeof name &&\n    (element.name = name);\n  track(element);\n}\nfunction setDefaultValue(node, type, value) {\n  (\"number\" === type && getActiveElement(node.ownerDocument) === node) ||\n    node.defaultValue === \"\" + value ||\n    (node.defaultValue = \"\" + value);\n}\nfunction updateOptions(node, multiple, propValue, setDefaultSelected) {\n  node = node.options;\n  if (multiple) {\n    multiple = {};\n    for (var i = 0; i < propValue.length; i++)\n      multiple[\"$\" + propValue[i]] = !0;\n    for (propValue = 0; propValue < node.length; propValue++)\n      (i = multiple.hasOwnProperty(\"$\" + node[propValue].value)),\n        node[propValue].selected !== i && (node[propValue].selected = i),\n        i && setDefaultSelected && (node[propValue].defaultSelected = !0);\n  } else {\n    propValue = \"\" + getToStringValue(propValue);\n    multiple = null;\n    for (i = 0; i < node.length; i++) {\n      if (node[i].value === propValue) {\n        node[i].selected = !0;\n        setDefaultSelected && (node[i].defaultSelected = !0);\n        return;\n      }\n      null !== multiple || node[i].disabled || (multiple = node[i]);\n    }\n    null !== multiple && (multiple.selected = !0);\n  }\n}\nfunction updateTextarea(element, value, defaultValue) {\n  if (\n    null != value &&\n    ((value = \"\" + getToStringValue(value)),\n    value !== element.value && (element.value = value),\n    null == defaultValue)\n  ) {\n    element.defaultValue !== value && (element.defaultValue = value);\n    return;\n  }\n  element.defaultValue =\n    null != defaultValue ? \"\" + getToStringValue(defaultValue) : \"\";\n}\nfunction initTextarea(element, value, defaultValue, children) {\n  if (null == value) {\n    if (null != children) {\n      if (null != defaultValue) throw Error(formatProdErrorMessage(92));\n      if (isArrayImpl(children)) {\n        if (1 < children.length) throw Error(formatProdErrorMessage(93));\n        children = children[0];\n      }\n      defaultValue = children;\n    }\n    null == defaultValue && (defaultValue = \"\");\n    value = defaultValue;\n  }\n  defaultValue = getToStringValue(value);\n  element.defaultValue = defaultValue;\n  children = element.textContent;\n  children === defaultValue &&\n    \"\" !== children &&\n    null !== children &&\n    (element.value = children);\n  track(element);\n}\nfunction setTextContent(node, text) {\n  if (text) {\n    var firstChild = node.firstChild;\n    if (\n      firstChild &&\n      firstChild === node.lastChild &&\n      3 === firstChild.nodeType\n    ) {\n      firstChild.nodeValue = text;\n      return;\n    }\n  }\n  node.textContent = text;\n}\nvar unitlessNumbers = new Set(\n  \"animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp\".split(\n    \" \"\n  )\n);\nfunction setValueForStyle(style, styleName, value) {\n  var isCustomProperty = 0 === styleName.indexOf(\"--\");\n  null == value || \"boolean\" === typeof value || \"\" === value\n    ? isCustomProperty\n      ? style.setProperty(styleName, \"\")\n      : \"float\" === styleName\n        ? (style.cssFloat = \"\")\n        : (style[styleName] = \"\")\n    : isCustomProperty\n      ? style.setProperty(styleName, value)\n      : \"number\" !== typeof value ||\n          0 === value ||\n          unitlessNumbers.has(styleName)\n        ? \"float\" === styleName\n          ? (style.cssFloat = value)\n          : (style[styleName] = (\"\" + value).trim())\n        : (style[styleName] = value + \"px\");\n}\nfunction setValueForStyles(node, styles, prevStyles) {\n  if (null != styles && \"object\" !== typeof styles)\n    throw Error(formatProdErrorMessage(62));\n  node = node.style;\n  if (null != prevStyles) {\n    for (var styleName in prevStyles)\n      !prevStyles.hasOwnProperty(styleName) ||\n        (null != styles && styles.hasOwnProperty(styleName)) ||\n        (0 === styleName.indexOf(\"--\")\n          ? node.setProperty(styleName, \"\")\n          : \"float\" === styleName\n            ? (node.cssFloat = \"\")\n            : (node[styleName] = \"\"));\n    for (var styleName$16 in styles)\n      (styleName = styles[styleName$16]),\n        styles.hasOwnProperty(styleName$16) &&\n          prevStyles[styleName$16] !== styleName &&\n          setValueForStyle(node, styleName$16, styleName);\n  } else\n    for (var styleName$17 in styles)\n      styles.hasOwnProperty(styleName$17) &&\n        setValueForStyle(node, styleName$17, styles[styleName$17]);\n}\nfunction isCustomElement(tagName) {\n  if (-1 === tagName.indexOf(\"-\")) return !1;\n  switch (tagName) {\n    case \"annotation-xml\":\n    case \"color-profile\":\n    case \"font-face\":\n    case \"font-face-src\":\n    case \"font-face-uri\":\n    case \"font-face-format\":\n    case \"font-face-name\":\n    case \"missing-glyph\":\n      return !1;\n    default:\n      return !0;\n  }\n}\nvar aliases = new Map([\n    [\"acceptCharset\", \"accept-charset\"],\n    [\"htmlFor\", \"for\"],\n    [\"httpEquiv\", \"http-equiv\"],\n    [\"crossOrigin\", \"crossorigin\"],\n    [\"accentHeight\", \"accent-height\"],\n    [\"alignmentBaseline\", \"alignment-baseline\"],\n    [\"arabicForm\", \"arabic-form\"],\n    [\"baselineShift\", \"baseline-shift\"],\n    [\"capHeight\", \"cap-height\"],\n    [\"clipPath\", \"clip-path\"],\n    [\"clipRule\", \"clip-rule\"],\n    [\"colorInterpolation\", \"color-interpolation\"],\n    [\"colorInterpolationFilters\", \"color-interpolation-filters\"],\n    [\"colorProfile\", \"color-profile\"],\n    [\"colorRendering\", \"color-rendering\"],\n    [\"dominantBaseline\", \"dominant-baseline\"],\n    [\"enableBackground\", \"enable-background\"],\n    [\"fillOpacity\", \"fill-opacity\"],\n    [\"fillRule\", \"fill-rule\"],\n    [\"floodColor\", \"flood-color\"],\n    [\"floodOpacity\", \"flood-opacity\"],\n    [\"fontFamily\", \"font-family\"],\n    [\"fontSize\", \"font-size\"],\n    [\"fontSizeAdjust\", \"font-size-adjust\"],\n    [\"fontStretch\", \"font-stretch\"],\n    [\"fontStyle\", \"font-style\"],\n    [\"fontVariant\", \"font-variant\"],\n    [\"fontWeight\", \"font-weight\"],\n    [\"glyphName\", \"glyph-name\"],\n    [\"glyphOrientationHorizontal\", \"glyph-orientation-horizontal\"],\n    [\"glyphOrientationVertical\", \"glyph-orientation-vertical\"],\n    [\"horizAdvX\", \"horiz-adv-x\"],\n    [\"horizOriginX\", \"horiz-origin-x\"],\n    [\"imageRendering\", \"image-rendering\"],\n    [\"letterSpacing\", \"letter-spacing\"],\n    [\"lightingColor\", \"lighting-color\"],\n    [\"markerEnd\", \"marker-end\"],\n    [\"markerMid\", \"marker-mid\"],\n    [\"markerStart\", \"marker-start\"],\n    [\"overlinePosition\", \"overline-position\"],\n    [\"overlineThickness\", \"overline-thickness\"],\n    [\"paintOrder\", \"paint-order\"],\n    [\"panose-1\", \"panose-1\"],\n    [\"pointerEvents\", \"pointer-events\"],\n    [\"renderingIntent\", \"rendering-intent\"],\n    [\"shapeRendering\", \"shape-rendering\"],\n    [\"stopColor\", \"stop-color\"],\n    [\"stopOpacity\", \"stop-opacity\"],\n    [\"strikethroughPosition\", \"strikethrough-position\"],\n    [\"strikethroughThickness\", \"strikethrough-thickness\"],\n    [\"strokeDasharray\", \"stroke-dasharray\"],\n    [\"strokeDashoffset\", \"stroke-dashoffset\"],\n    [\"strokeLinecap\", \"stroke-linecap\"],\n    [\"strokeLinejoin\", \"stroke-linejoin\"],\n    [\"strokeMiterlimit\", \"stroke-miterlimit\"],\n    [\"strokeOpacity\", \"stroke-opacity\"],\n    [\"strokeWidth\", \"stroke-width\"],\n    [\"textAnchor\", \"text-anchor\"],\n    [\"textDecoration\", \"text-decoration\"],\n    [\"textRendering\", \"text-rendering\"],\n    [\"transformOrigin\", \"transform-origin\"],\n    [\"underlinePosition\", \"underline-position\"],\n    [\"underlineThickness\", \"underline-thickness\"],\n    [\"unicodeBidi\", \"unicode-bidi\"],\n    [\"unicodeRange\", \"unicode-range\"],\n    [\"unitsPerEm\", \"units-per-em\"],\n    [\"vAlphabetic\", \"v-alphabetic\"],\n    [\"vHanging\", \"v-hanging\"],\n    [\"vIdeographic\", \"v-ideographic\"],\n    [\"vMathematical\", \"v-mathematical\"],\n    [\"vectorEffect\", \"vector-effect\"],\n    [\"vertAdvY\", \"vert-adv-y\"],\n    [\"vertOriginX\", \"vert-origin-x\"],\n    [\"vertOriginY\", \"vert-origin-y\"],\n    [\"wordSpacing\", \"word-spacing\"],\n    [\"writingMode\", \"writing-mode\"],\n    [\"xmlnsXlink\", \"xmlns:xlink\"],\n    [\"xHeight\", \"x-height\"]\n  ]),\n  isJavaScriptProtocol =\n    /^[\\u0000-\\u001F ]*j[\\r\\n\\t]*a[\\r\\n\\t]*v[\\r\\n\\t]*a[\\r\\n\\t]*s[\\r\\n\\t]*c[\\r\\n\\t]*r[\\r\\n\\t]*i[\\r\\n\\t]*p[\\r\\n\\t]*t[\\r\\n\\t]*:/i;\nfunction sanitizeURL(url) {\n  return isJavaScriptProtocol.test(\"\" + url)\n    ? \"javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')\"\n    : url;\n}\nfunction noop$1() {}\nvar currentReplayingEvent = null;\nfunction getEventTarget(nativeEvent) {\n  nativeEvent = nativeEvent.target || nativeEvent.srcElement || window;\n  nativeEvent.correspondingUseElement &&\n    (nativeEvent = nativeEvent.correspondingUseElement);\n  return 3 === nativeEvent.nodeType ? nativeEvent.parentNode : nativeEvent;\n}\nvar restoreTarget = null,\n  restoreQueue = null;\nfunction restoreStateOfTarget(target) {\n  var internalInstance = getInstanceFromNode(target);\n  if (internalInstance && (target = internalInstance.stateNode)) {\n    var props = target[internalPropsKey] || null;\n    a: switch (((target = internalInstance.stateNode), internalInstance.type)) {\n      case \"input\":\n        updateInput(\n          target,\n          props.value,\n          props.defaultValue,\n          props.defaultValue,\n          props.checked,\n          props.defaultChecked,\n          props.type,\n          props.name\n        );\n        internalInstance = props.name;\n        if (\"radio\" === props.type && null != internalInstance) {\n          for (props = target; props.parentNode; ) props = props.parentNode;\n          props = props.querySelectorAll(\n            'input[name=\"' +\n              escapeSelectorAttributeValueInsideDoubleQuotes(\n                \"\" + internalInstance\n              ) +\n              '\"][type=\"radio\"]'\n          );\n          for (\n            internalInstance = 0;\n            internalInstance < props.length;\n            internalInstance++\n          ) {\n            var otherNode = props[internalInstance];\n            if (otherNode !== target && otherNode.form === target.form) {\n              var otherProps = otherNode[internalPropsKey] || null;\n              if (!otherProps) throw Error(formatProdErrorMessage(90));\n              updateInput(\n                otherNode,\n                otherProps.value,\n                otherProps.defaultValue,\n                otherProps.defaultValue,\n                otherProps.checked,\n                otherProps.defaultChecked,\n                otherProps.type,\n                otherProps.name\n              );\n            }\n          }\n          for (\n            internalInstance = 0;\n            internalInstance < props.length;\n            internalInstance++\n          )\n            (otherNode = props[internalInstance]),\n              otherNode.form === target.form && updateValueIfChanged(otherNode);\n        }\n        break a;\n      case \"textarea\":\n        updateTextarea(target, props.value, props.defaultValue);\n        break a;\n      case \"select\":\n        (internalInstance = props.value),\n          null != internalInstance &&\n            updateOptions(target, !!props.multiple, internalInstance, !1);\n    }\n  }\n}\nvar isInsideEventHandler = !1;\nfunction batchedUpdates$1(fn, a, b) {\n  if (isInsideEventHandler) return fn(a, b);\n  isInsideEventHandler = !0;\n  try {\n    var JSCompiler_inline_result = fn(a);\n    return JSCompiler_inline_result;\n  } finally {\n    if (\n      ((isInsideEventHandler = !1),\n      null !== restoreTarget || null !== restoreQueue)\n    )\n      if (\n        (flushSyncWork$1(),\n        restoreTarget &&\n          ((a = restoreTarget),\n          (fn = restoreQueue),\n          (restoreQueue = restoreTarget = null),\n          restoreStateOfTarget(a),\n          fn))\n      )\n        for (a = 0; a < fn.length; a++) restoreStateOfTarget(fn[a]);\n  }\n}\nfunction getListener(inst, registrationName) {\n  var stateNode = inst.stateNode;\n  if (null === stateNode) return null;\n  var props = stateNode[internalPropsKey] || null;\n  if (null === props) return null;\n  stateNode = props[registrationName];\n  a: switch (registrationName) {\n    case \"onClick\":\n    case \"onClickCapture\":\n    case \"onDoubleClick\":\n    case \"onDoubleClickCapture\":\n    case \"onMouseDown\":\n    case \"onMouseDownCapture\":\n    case \"onMouseMove\":\n    case \"onMouseMoveCapture\":\n    case \"onMouseUp\":\n    case \"onMouseUpCapture\":\n    case \"onMouseEnter\":\n      (props = !props.disabled) ||\n        ((inst = inst.type),\n        (props = !(\n          \"button\" === inst ||\n          \"input\" === inst ||\n          \"select\" === inst ||\n          \"textarea\" === inst\n        )));\n      inst = !props;\n      break a;\n    default:\n      inst = !1;\n  }\n  if (inst) return null;\n  if (stateNode && \"function\" !== typeof stateNode)\n    throw Error(\n      formatProdErrorMessage(231, registrationName, typeof stateNode)\n    );\n  return stateNode;\n}\nvar canUseDOM = !(\n    \"undefined\" === typeof window ||\n    \"undefined\" === typeof window.document ||\n    \"undefined\" === typeof window.document.createElement\n  ),\n  passiveBrowserEventsSupported = !1;\nif (canUseDOM)\n  try {\n    var options = {};\n    Object.defineProperty(options, \"passive\", {\n      get: function () {\n        passiveBrowserEventsSupported = !0;\n      }\n    });\n    window.addEventListener(\"test\", options, options);\n    window.removeEventListener(\"test\", options, options);\n  } catch (e) {\n    passiveBrowserEventsSupported = !1;\n  }\nvar root = null,\n  startText = null,\n  fallbackText = null;\nfunction getData() {\n  if (fallbackText) return fallbackText;\n  var start,\n    startValue = startText,\n    startLength = startValue.length,\n    end,\n    endValue = \"value\" in root ? root.value : root.textContent,\n    endLength = endValue.length;\n  for (\n    start = 0;\n    start < startLength && startValue[start] === endValue[start];\n    start++\n  );\n  var minEnd = startLength - start;\n  for (\n    end = 1;\n    end <= minEnd &&\n    startValue[startLength - end] === endValue[endLength - end];\n    end++\n  );\n  return (fallbackText = endValue.slice(start, 1 < end ? 1 - end : void 0));\n}\nfunction getEventCharCode(nativeEvent) {\n  var keyCode = nativeEvent.keyCode;\n  \"charCode\" in nativeEvent\n    ? ((nativeEvent = nativeEvent.charCode),\n      0 === nativeEvent && 13 === keyCode && (nativeEvent = 13))\n    : (nativeEvent = keyCode);\n  10 === nativeEvent && (nativeEvent = 13);\n  return 32 <= nativeEvent || 13 === nativeEvent ? nativeEvent : 0;\n}\nfunction functionThatReturnsTrue() {\n  return !0;\n}\nfunction functionThatReturnsFalse() {\n  return !1;\n}\nfunction createSyntheticEvent(Interface) {\n  function SyntheticBaseEvent(\n    reactName,\n    reactEventType,\n    targetInst,\n    nativeEvent,\n    nativeEventTarget\n  ) {\n    this._reactName = reactName;\n    this._targetInst = targetInst;\n    this.type = reactEventType;\n    this.nativeEvent = nativeEvent;\n    this.target = nativeEventTarget;\n    this.currentTarget = null;\n    for (var propName in Interface)\n      Interface.hasOwnProperty(propName) &&\n        ((reactName = Interface[propName]),\n        (this[propName] = reactName\n          ? reactName(nativeEvent)\n          : nativeEvent[propName]));\n    this.isDefaultPrevented = (\n      null != nativeEvent.defaultPrevented\n        ? nativeEvent.defaultPrevented\n        : !1 === nativeEvent.returnValue\n    )\n      ? functionThatReturnsTrue\n      : functionThatReturnsFalse;\n    this.isPropagationStopped = functionThatReturnsFalse;\n    return this;\n  }\n  assign(SyntheticBaseEvent.prototype, {\n    preventDefault: function () {\n      this.defaultPrevented = !0;\n      var event = this.nativeEvent;\n      event &&\n        (event.preventDefault\n          ? event.preventDefault()\n          : \"unknown\" !== typeof event.returnValue && (event.returnValue = !1),\n        (this.isDefaultPrevented = functionThatReturnsTrue));\n    },\n    stopPropagation: function () {\n      var event = this.nativeEvent;\n      event &&\n        (event.stopPropagation\n          ? event.stopPropagation()\n          : \"unknown\" !== typeof event.cancelBubble &&\n            (event.cancelBubble = !0),\n        (this.isPropagationStopped = functionThatReturnsTrue));\n    },\n    persist: function () {},\n    isPersistent: functionThatReturnsTrue\n  });\n  return SyntheticBaseEvent;\n}\nvar EventInterface = {\n    eventPhase: 0,\n    bubbles: 0,\n    cancelable: 0,\n    timeStamp: function (event) {\n      return event.timeStamp || Date.now();\n    },\n    defaultPrevented: 0,\n    isTrusted: 0\n  },\n  SyntheticEvent = createSyntheticEvent(EventInterface),\n  UIEventInterface = assign({}, EventInterface, { view: 0, detail: 0 }),\n  SyntheticUIEvent = createSyntheticEvent(UIEventInterface),\n  lastMovementX,\n  lastMovementY,\n  lastMouseEvent,\n  MouseEventInterface = assign({}, UIEventInterface, {\n    screenX: 0,\n    screenY: 0,\n    clientX: 0,\n    clientY: 0,\n    pageX: 0,\n    pageY: 0,\n    ctrlKey: 0,\n    shiftKey: 0,\n    altKey: 0,\n    metaKey: 0,\n    getModifierState: getEventModifierState,\n    button: 0,\n    buttons: 0,\n    relatedTarget: function (event) {\n      return void 0 === event.relatedTarget\n        ? event.fromElement === event.srcElement\n          ? event.toElement\n          : event.fromElement\n        : event.relatedTarget;\n    },\n    movementX: function (event) {\n      if (\"movementX\" in event) return event.movementX;\n      event !== lastMouseEvent &&\n        (lastMouseEvent && \"mousemove\" === event.type\n          ? ((lastMovementX = event.screenX - lastMouseEvent.screenX),\n            (lastMovementY = event.screenY - lastMouseEvent.screenY))\n          : (lastMovementY = lastMovementX = 0),\n        (lastMouseEvent = event));\n      return lastMovementX;\n    },\n    movementY: function (event) {\n      return \"movementY\" in event ? event.movementY : lastMovementY;\n    }\n  }),\n  SyntheticMouseEvent = createSyntheticEvent(MouseEventInterface),\n  DragEventInterface = assign({}, MouseEventInterface, { dataTransfer: 0 }),\n  SyntheticDragEvent = createSyntheticEvent(DragEventInterface),\n  FocusEventInterface = assign({}, UIEventInterface, { relatedTarget: 0 }),\n  SyntheticFocusEvent = createSyntheticEvent(FocusEventInterface),\n  AnimationEventInterface = assign({}, EventInterface, {\n    animationName: 0,\n    elapsedTime: 0,\n    pseudoElement: 0\n  }),\n  SyntheticAnimationEvent = createSyntheticEvent(AnimationEventInterface),\n  ClipboardEventInterface = assign({}, EventInterface, {\n    clipboardData: function (event) {\n      return \"clipboardData\" in event\n        ? event.clipboardData\n        : window.clipboardData;\n    }\n  }),\n  SyntheticClipboardEvent = createSyntheticEvent(ClipboardEventInterface),\n  CompositionEventInterface = assign({}, EventInterface, { data: 0 }),\n  SyntheticCompositionEvent = createSyntheticEvent(CompositionEventInterface),\n  normalizeKey = {\n    Esc: \"Escape\",\n    Spacebar: \" \",\n    Left: \"ArrowLeft\",\n    Up: \"ArrowUp\",\n    Right: \"ArrowRight\",\n    Down: \"ArrowDown\",\n    Del: \"Delete\",\n    Win: \"OS\",\n    Menu: \"ContextMenu\",\n    Apps: \"ContextMenu\",\n    Scroll: \"ScrollLock\",\n    MozPrintableKey: \"Unidentified\"\n  },\n  translateToKey = {\n    8: \"Backspace\",\n    9: \"Tab\",\n    12: \"Clear\",\n    13: \"Enter\",\n    16: \"Shift\",\n    17: \"Control\",\n    18: \"Alt\",\n    19: \"Pause\",\n    20: \"CapsLock\",\n    27: \"Escape\",\n    32: \" \",\n    33: \"PageUp\",\n    34: \"PageDown\",\n    35: \"End\",\n    36: \"Home\",\n    37: \"ArrowLeft\",\n    38: \"ArrowUp\",\n    39: \"ArrowRight\",\n    40: \"ArrowDown\",\n    45: \"Insert\",\n    46: \"Delete\",\n    112: \"F1\",\n    113: \"F2\",\n    114: \"F3\",\n    115: \"F4\",\n    116: \"F5\",\n    117: \"F6\",\n    118: \"F7\",\n    119: \"F8\",\n    120: \"F9\",\n    121: \"F10\",\n    122: \"F11\",\n    123: \"F12\",\n    144: \"NumLock\",\n    145: \"ScrollLock\",\n    224: \"Meta\"\n  },\n  modifierKeyToProp = {\n    Alt: \"altKey\",\n    Control: \"ctrlKey\",\n    Meta: \"metaKey\",\n    Shift: \"shiftKey\"\n  };\nfunction modifierStateGetter(keyArg) {\n  var nativeEvent = this.nativeEvent;\n  return nativeEvent.getModifierState\n    ? nativeEvent.getModifierState(keyArg)\n    : (keyArg = modifierKeyToProp[keyArg])\n      ? !!nativeEvent[keyArg]\n      : !1;\n}\nfunction getEventModifierState() {\n  return modifierStateGetter;\n}\nvar KeyboardEventInterface = assign({}, UIEventInterface, {\n    key: function (nativeEvent) {\n      if (nativeEvent.key) {\n        var key = normalizeKey[nativeEvent.key] || nativeEvent.key;\n        if (\"Unidentified\" !== key) return key;\n      }\n      return \"keypress\" === nativeEvent.type\n        ? ((nativeEvent = getEventCharCode(nativeEvent)),\n          13 === nativeEvent ? \"Enter\" : String.fromCharCode(nativeEvent))\n        : \"keydown\" === nativeEvent.type || \"keyup\" === nativeEvent.type\n          ? translateToKey[nativeEvent.keyCode] || \"Unidentified\"\n          : \"\";\n    },\n    code: 0,\n    location: 0,\n    ctrlKey: 0,\n    shiftKey: 0,\n    altKey: 0,\n    metaKey: 0,\n    repeat: 0,\n    locale: 0,\n    getModifierState: getEventModifierState,\n    charCode: function (event) {\n      return \"keypress\" === event.type ? getEventCharCode(event) : 0;\n    },\n    keyCode: function (event) {\n      return \"keydown\" === event.type || \"keyup\" === event.type\n        ? event.keyCode\n        : 0;\n    },\n    which: function (event) {\n      return \"keypress\" === event.type\n        ? getEventCharCode(event)\n        : \"keydown\" === event.type || \"keyup\" === event.type\n          ? event.keyCode\n          : 0;\n    }\n  }),\n  SyntheticKeyboardEvent = createSyntheticEvent(KeyboardEventInterface),\n  PointerEventInterface = assign({}, MouseEventInterface, {\n    pointerId: 0,\n    width: 0,\n    height: 0,\n    pressure: 0,\n    tangentialPressure: 0,\n    tiltX: 0,\n    tiltY: 0,\n    twist: 0,\n    pointerType: 0,\n    isPrimary: 0\n  }),\n  SyntheticPointerEvent = createSyntheticEvent(PointerEventInterface),\n  TouchEventInterface = assign({}, UIEventInterface, {\n    touches: 0,\n    targetTouches: 0,\n    changedTouches: 0,\n    altKey: 0,\n    metaKey: 0,\n    ctrlKey: 0,\n    shiftKey: 0,\n    getModifierState: getEventModifierState\n  }),\n  SyntheticTouchEvent = createSyntheticEvent(TouchEventInterface),\n  TransitionEventInterface = assign({}, EventInterface, {\n    propertyName: 0,\n    elapsedTime: 0,\n    pseudoElement: 0\n  }),\n  SyntheticTransitionEvent = createSyntheticEvent(TransitionEventInterface),\n  WheelEventInterface = assign({}, MouseEventInterface, {\n    deltaX: function (event) {\n      return \"deltaX\" in event\n        ? event.deltaX\n        : \"wheelDeltaX\" in event\n          ? -event.wheelDeltaX\n          : 0;\n    },\n    deltaY: function (event) {\n      return \"deltaY\" in event\n        ? event.deltaY\n        : \"wheelDeltaY\" in event\n          ? -event.wheelDeltaY\n          : \"wheelDelta\" in event\n            ? -event.wheelDelta\n            : 0;\n    },\n    deltaZ: 0,\n    deltaMode: 0\n  }),\n  SyntheticWheelEvent = createSyntheticEvent(WheelEventInterface),\n  ToggleEventInterface = assign({}, EventInterface, {\n    newState: 0,\n    oldState: 0\n  }),\n  SyntheticToggleEvent = createSyntheticEvent(ToggleEventInterface),\n  END_KEYCODES = [9, 13, 27, 32],\n  canUseCompositionEvent = canUseDOM && \"CompositionEvent\" in window,\n  documentMode = null;\ncanUseDOM &&\n  \"documentMode\" in document &&\n  (documentMode = document.documentMode);\nvar canUseTextInputEvent = canUseDOM && \"TextEvent\" in window && !documentMode,\n  useFallbackCompositionData =\n    canUseDOM &&\n    (!canUseCompositionEvent ||\n      (documentMode && 8 < documentMode && 11 >= documentMode)),\n  SPACEBAR_CHAR = String.fromCharCode(32),\n  hasSpaceKeypress = !1;\nfunction isFallbackCompositionEnd(domEventName, nativeEvent) {\n  switch (domEventName) {\n    case \"keyup\":\n      return -1 !== END_KEYCODES.indexOf(nativeEvent.keyCode);\n    case \"keydown\":\n      return 229 !== nativeEvent.keyCode;\n    case \"keypress\":\n    case \"mousedown\":\n    case \"focusout\":\n      return !0;\n    default:\n      return !1;\n  }\n}\nfunction getDataFromCustomEvent(nativeEvent) {\n  nativeEvent = nativeEvent.detail;\n  return \"object\" === typeof nativeEvent && \"data\" in nativeEvent\n    ? nativeEvent.data\n    : null;\n}\nvar isComposing = !1;\nfunction getNativeBeforeInputChars(domEventName, nativeEvent) {\n  switch (domEventName) {\n    case \"compositionend\":\n      return getDataFromCustomEvent(nativeEvent);\n    case \"keypress\":\n      if (32 !== nativeEvent.which) return null;\n      hasSpaceKeypress = !0;\n      return SPACEBAR_CHAR;\n    case \"textInput\":\n      return (\n        (domEventName = nativeEvent.data),\n        domEventName === SPACEBAR_CHAR && hasSpaceKeypress ? null : domEventName\n      );\n    default:\n      return null;\n  }\n}\nfunction getFallbackBeforeInputChars(domEventName, nativeEvent) {\n  if (isComposing)\n    return \"compositionend\" === domEventName ||\n      (!canUseCompositionEvent &&\n        isFallbackCompositionEnd(domEventName, nativeEvent))\n      ? ((domEventName = getData()),\n        (fallbackText = startText = root = null),\n        (isComposing = !1),\n        domEventName)\n      : null;\n  switch (domEventName) {\n    case \"paste\":\n      return null;\n    case \"keypress\":\n      if (\n        !(nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) ||\n        (nativeEvent.ctrlKey && nativeEvent.altKey)\n      ) {\n        if (nativeEvent.char && 1 < nativeEvent.char.length)\n          return nativeEvent.char;\n        if (nativeEvent.which) return String.fromCharCode(nativeEvent.which);\n      }\n      return null;\n    case \"compositionend\":\n      return useFallbackCompositionData && \"ko\" !== nativeEvent.locale\n        ? null\n        : nativeEvent.data;\n    default:\n      return null;\n  }\n}\nvar supportedInputTypes = {\n  color: !0,\n  date: !0,\n  datetime: !0,\n  \"datetime-local\": !0,\n  email: !0,\n  month: !0,\n  number: !0,\n  password: !0,\n  range: !0,\n  search: !0,\n  tel: !0,\n  text: !0,\n  time: !0,\n  url: !0,\n  week: !0\n};\nfunction isTextInputElement(elem) {\n  var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n  return \"input\" === nodeName\n    ? !!supportedInputTypes[elem.type]\n    : \"textarea\" === nodeName\n      ? !0\n      : !1;\n}\nfunction createAndAccumulateChangeEvent(\n  dispatchQueue,\n  inst,\n  nativeEvent,\n  target\n) {\n  restoreTarget\n    ? restoreQueue\n      ? restoreQueue.push(target)\n      : (restoreQueue = [target])\n    : (restoreTarget = target);\n  inst = accumulateTwoPhaseListeners(inst, \"onChange\");\n  0 < inst.length &&\n    ((nativeEvent = new SyntheticEvent(\n      \"onChange\",\n      \"change\",\n      null,\n      nativeEvent,\n      target\n    )),\n    dispatchQueue.push({ event: nativeEvent, listeners: inst }));\n}\nvar activeElement$1 = null,\n  activeElementInst$1 = null;\nfunction runEventInBatch(dispatchQueue) {\n  processDispatchQueue(dispatchQueue, 0);\n}\nfunction getInstIfValueChanged(targetInst) {\n  var targetNode = getNodeFromInstance(targetInst);\n  if (updateValueIfChanged(targetNode)) return targetInst;\n}\nfunction getTargetInstForChangeEvent(domEventName, targetInst) {\n  if (\"change\" === domEventName) return targetInst;\n}\nvar isInputEventSupported = !1;\nif (canUseDOM) {\n  var JSCompiler_inline_result$jscomp$286;\n  if (canUseDOM) {\n    var isSupported$jscomp$inline_427 = \"oninput\" in document;\n    if (!isSupported$jscomp$inline_427) {\n      var element$jscomp$inline_428 = document.createElement(\"div\");\n      element$jscomp$inline_428.setAttribute(\"oninput\", \"return;\");\n      isSupported$jscomp$inline_427 =\n        \"function\" === typeof element$jscomp$inline_428.oninput;\n    }\n    JSCompiler_inline_result$jscomp$286 = isSupported$jscomp$inline_427;\n  } else JSCompiler_inline_result$jscomp$286 = !1;\n  isInputEventSupported =\n    JSCompiler_inline_result$jscomp$286 &&\n    (!document.documentMode || 9 < document.documentMode);\n}\nfunction stopWatchingForValueChange() {\n  activeElement$1 &&\n    (activeElement$1.detachEvent(\"onpropertychange\", handlePropertyChange),\n    (activeElementInst$1 = activeElement$1 = null));\n}\nfunction handlePropertyChange(nativeEvent) {\n  if (\n    \"value\" === nativeEvent.propertyName &&\n    getInstIfValueChanged(activeElementInst$1)\n  ) {\n    var dispatchQueue = [];\n    createAndAccumulateChangeEvent(\n      dispatchQueue,\n      activeElementInst$1,\n      nativeEvent,\n      getEventTarget(nativeEvent)\n    );\n    batchedUpdates$1(runEventInBatch, dispatchQueue);\n  }\n}\nfunction handleEventsForInputEventPolyfill(domEventName, target, targetInst) {\n  \"focusin\" === domEventName\n    ? (stopWatchingForValueChange(),\n      (activeElement$1 = target),\n      (activeElementInst$1 = targetInst),\n      activeElement$1.attachEvent(\"onpropertychange\", handlePropertyChange))\n    : \"focusout\" === domEventName && stopWatchingForValueChange();\n}\nfunction getTargetInstForInputEventPolyfill(domEventName) {\n  if (\n    \"selectionchange\" === domEventName ||\n    \"keyup\" === domEventName ||\n    \"keydown\" === domEventName\n  )\n    return getInstIfValueChanged(activeElementInst$1);\n}\nfunction getTargetInstForClickEvent(domEventName, targetInst) {\n  if (\"click\" === domEventName) return getInstIfValueChanged(targetInst);\n}\nfunction getTargetInstForInputOrChangeEvent(domEventName, targetInst) {\n  if (\"input\" === domEventName || \"change\" === domEventName)\n    return getInstIfValueChanged(targetInst);\n}\nfunction is(x, y) {\n  return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is;\nfunction shallowEqual(objA, objB) {\n  if (objectIs(objA, objB)) return !0;\n  if (\n    \"object\" !== typeof objA ||\n    null === objA ||\n    \"object\" !== typeof objB ||\n    null === objB\n  )\n    return !1;\n  var keysA = Object.keys(objA),\n    keysB = Object.keys(objB);\n  if (keysA.length !== keysB.length) return !1;\n  for (keysB = 0; keysB < keysA.length; keysB++) {\n    var currentKey = keysA[keysB];\n    if (\n      !hasOwnProperty.call(objB, currentKey) ||\n      !objectIs(objA[currentKey], objB[currentKey])\n    )\n      return !1;\n  }\n  return !0;\n}\nfunction getLeafNode(node) {\n  for (; node && node.firstChild; ) node = node.firstChild;\n  return node;\n}\nfunction getNodeForCharacterOffset(root, offset) {\n  var node = getLeafNode(root);\n  root = 0;\n  for (var nodeEnd; node; ) {\n    if (3 === node.nodeType) {\n      nodeEnd = root + node.textContent.length;\n      if (root <= offset && nodeEnd >= offset)\n        return { node: node, offset: offset - root };\n      root = nodeEnd;\n    }\n    a: {\n      for (; node; ) {\n        if (node.nextSibling) {\n          node = node.nextSibling;\n          break a;\n        }\n        node = node.parentNode;\n      }\n      node = void 0;\n    }\n    node = getLeafNode(node);\n  }\n}\nfunction containsNode(outerNode, innerNode) {\n  return outerNode && innerNode\n    ? outerNode === innerNode\n      ? !0\n      : outerNode && 3 === outerNode.nodeType\n        ? !1\n        : innerNode && 3 === innerNode.nodeType\n          ? containsNode(outerNode, innerNode.parentNode)\n          : \"contains\" in outerNode\n            ? outerNode.contains(innerNode)\n            : outerNode.compareDocumentPosition\n              ? !!(outerNode.compareDocumentPosition(innerNode) & 16)\n              : !1\n    : !1;\n}\nfunction getActiveElementDeep(containerInfo) {\n  containerInfo =\n    null != containerInfo &&\n    null != containerInfo.ownerDocument &&\n    null != containerInfo.ownerDocument.defaultView\n      ? containerInfo.ownerDocument.defaultView\n      : window;\n  for (\n    var element = getActiveElement(containerInfo.document);\n    element instanceof containerInfo.HTMLIFrameElement;\n\n  ) {\n    try {\n      var JSCompiler_inline_result =\n        \"string\" === typeof element.contentWindow.location.href;\n    } catch (err) {\n      JSCompiler_inline_result = !1;\n    }\n    if (JSCompiler_inline_result) containerInfo = element.contentWindow;\n    else break;\n    element = getActiveElement(containerInfo.document);\n  }\n  return element;\n}\nfunction hasSelectionCapabilities(elem) {\n  var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n  return (\n    nodeName &&\n    ((\"input\" === nodeName &&\n      (\"text\" === elem.type ||\n        \"search\" === elem.type ||\n        \"tel\" === elem.type ||\n        \"url\" === elem.type ||\n        \"password\" === elem.type)) ||\n      \"textarea\" === nodeName ||\n      \"true\" === elem.contentEditable)\n  );\n}\nvar skipSelectionChangeEvent =\n    canUseDOM && \"documentMode\" in document && 11 >= document.documentMode,\n  activeElement = null,\n  activeElementInst = null,\n  lastSelection = null,\n  mouseDown = !1;\nfunction constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget) {\n  var doc =\n    nativeEventTarget.window === nativeEventTarget\n      ? nativeEventTarget.document\n      : 9 === nativeEventTarget.nodeType\n        ? nativeEventTarget\n        : nativeEventTarget.ownerDocument;\n  mouseDown ||\n    null == activeElement ||\n    activeElement !== getActiveElement(doc) ||\n    ((doc = activeElement),\n    \"selectionStart\" in doc && hasSelectionCapabilities(doc)\n      ? (doc = { start: doc.selectionStart, end: doc.selectionEnd })\n      : ((doc = (\n          (doc.ownerDocument && doc.ownerDocument.defaultView) ||\n          window\n        ).getSelection()),\n        (doc = {\n          anchorNode: doc.anchorNode,\n          anchorOffset: doc.anchorOffset,\n          focusNode: doc.focusNode,\n          focusOffset: doc.focusOffset\n        })),\n    (lastSelection && shallowEqual(lastSelection, doc)) ||\n      ((lastSelection = doc),\n      (doc = accumulateTwoPhaseListeners(activeElementInst, \"onSelect\")),\n      0 < doc.length &&\n        ((nativeEvent = new SyntheticEvent(\n          \"onSelect\",\n          \"select\",\n          null,\n          nativeEvent,\n          nativeEventTarget\n        )),\n        dispatchQueue.push({ event: nativeEvent, listeners: doc }),\n        (nativeEvent.target = activeElement))));\n}\nfunction makePrefixMap(styleProp, eventName) {\n  var prefixes = {};\n  prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();\n  prefixes[\"Webkit\" + styleProp] = \"webkit\" + eventName;\n  prefixes[\"Moz\" + styleProp] = \"moz\" + eventName;\n  return prefixes;\n}\nvar vendorPrefixes = {\n    animationend: makePrefixMap(\"Animation\", \"AnimationEnd\"),\n    animationiteration: makePrefixMap(\"Animation\", \"AnimationIteration\"),\n    animationstart: makePrefixMap(\"Animation\", \"AnimationStart\"),\n    transitionrun: makePrefixMap(\"Transition\", \"TransitionRun\"),\n    transitionstart: makePrefixMap(\"Transition\", \"TransitionStart\"),\n    transitioncancel: makePrefixMap(\"Transition\", \"TransitionCancel\"),\n    transitionend: makePrefixMap(\"Transition\", \"TransitionEnd\")\n  },\n  prefixedEventNames = {},\n  style = {};\ncanUseDOM &&\n  ((style = document.createElement(\"div\").style),\n  \"AnimationEvent\" in window ||\n    (delete vendorPrefixes.animationend.animation,\n    delete vendorPrefixes.animationiteration.animation,\n    delete vendorPrefixes.animationstart.animation),\n  \"TransitionEvent\" in window ||\n    delete vendorPrefixes.transitionend.transition);\nfunction getVendorPrefixedEventName(eventName) {\n  if (prefixedEventNames[eventName]) return prefixedEventNames[eventName];\n  if (!vendorPrefixes[eventName]) return eventName;\n  var prefixMap = vendorPrefixes[eventName],\n    styleProp;\n  for (styleProp in prefixMap)\n    if (prefixMap.hasOwnProperty(styleProp) && styleProp in style)\n      return (prefixedEventNames[eventName] = prefixMap[styleProp]);\n  return eventName;\n}\nvar ANIMATION_END = getVendorPrefixedEventName(\"animationend\"),\n  ANIMATION_ITERATION = getVendorPrefixedEventName(\"animationiteration\"),\n  ANIMATION_START = getVendorPrefixedEventName(\"animationstart\"),\n  TRANSITION_RUN = getVendorPrefixedEventName(\"transitionrun\"),\n  TRANSITION_START = getVendorPrefixedEventName(\"transitionstart\"),\n  TRANSITION_CANCEL = getVendorPrefixedEventName(\"transitioncancel\"),\n  TRANSITION_END = getVendorPrefixedEventName(\"transitionend\"),\n  topLevelEventsToReactNames = new Map(),\n  simpleEventPluginEvents =\n    \"abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel\".split(\n      \" \"\n    );\nsimpleEventPluginEvents.push(\"scrollEnd\");\nfunction registerSimpleEvent(domEventName, reactName) {\n  topLevelEventsToReactNames.set(domEventName, reactName);\n  registerTwoPhaseEvent(reactName, [domEventName]);\n}\nvar reportGlobalError =\n    \"function\" === typeof reportError\n      ? reportError\n      : function (error) {\n          if (\n            \"object\" === typeof window &&\n            \"function\" === typeof window.ErrorEvent\n          ) {\n            var event = new window.ErrorEvent(\"error\", {\n              bubbles: !0,\n              cancelable: !0,\n              message:\n                \"object\" === typeof error &&\n                null !== error &&\n                \"string\" === typeof error.message\n                  ? String(error.message)\n                  : String(error),\n              error: error\n            });\n            if (!window.dispatchEvent(event)) return;\n          } else if (\n            \"object\" === typeof process &&\n            \"function\" === typeof process.emit\n          ) {\n            process.emit(\"uncaughtException\", error);\n            return;\n          }\n          console.error(error);\n        },\n  concurrentQueues = [],\n  concurrentQueuesIndex = 0,\n  concurrentlyUpdatedLanes = 0;\nfunction finishQueueingConcurrentUpdates() {\n  for (\n    var endIndex = concurrentQueuesIndex,\n      i = (concurrentlyUpdatedLanes = concurrentQueuesIndex = 0);\n    i < endIndex;\n\n  ) {\n    var fiber = concurrentQueues[i];\n    concurrentQueues[i++] = null;\n    var queue = concurrentQueues[i];\n    concurrentQueues[i++] = null;\n    var update = concurrentQueues[i];\n    concurrentQueues[i++] = null;\n    var lane = concurrentQueues[i];\n    concurrentQueues[i++] = null;\n    if (null !== queue && null !== update) {\n      var pending = queue.pending;\n      null === pending\n        ? (update.next = update)\n        : ((update.next = pending.next), (pending.next = update));\n      queue.pending = update;\n    }\n    0 !== lane && markUpdateLaneFromFiberToRoot(fiber, update, lane);\n  }\n}\nfunction enqueueUpdate$1(fiber, queue, update, lane) {\n  concurrentQueues[concurrentQueuesIndex++] = fiber;\n  concurrentQueues[concurrentQueuesIndex++] = queue;\n  concurrentQueues[concurrentQueuesIndex++] = update;\n  concurrentQueues[concurrentQueuesIndex++] = lane;\n  concurrentlyUpdatedLanes |= lane;\n  fiber.lanes |= lane;\n  fiber = fiber.alternate;\n  null !== fiber && (fiber.lanes |= lane);\n}\nfunction enqueueConcurrentHookUpdate(fiber, queue, update, lane) {\n  enqueueUpdate$1(fiber, queue, update, lane);\n  return getRootForUpdatedFiber(fiber);\n}\nfunction enqueueConcurrentRenderForLane(fiber, lane) {\n  enqueueUpdate$1(fiber, null, null, lane);\n  return getRootForUpdatedFiber(fiber);\n}\nfunction markUpdateLaneFromFiberToRoot(sourceFiber, update, lane) {\n  sourceFiber.lanes |= lane;\n  var alternate = sourceFiber.alternate;\n  null !== alternate && (alternate.lanes |= lane);\n  for (var isHidden = !1, parent = sourceFiber.return; null !== parent; )\n    (parent.childLanes |= lane),\n      (alternate = parent.alternate),\n      null !== alternate && (alternate.childLanes |= lane),\n      22 === parent.tag &&\n        ((sourceFiber = parent.stateNode),\n        null === sourceFiber || sourceFiber._visibility & 1 || (isHidden = !0)),\n      (sourceFiber = parent),\n      (parent = parent.return);\n  return 3 === sourceFiber.tag\n    ? ((parent = sourceFiber.stateNode),\n      isHidden &&\n        null !== update &&\n        ((isHidden = 31 - clz32(lane)),\n        (sourceFiber = parent.hiddenUpdates),\n        (alternate = sourceFiber[isHidden]),\n        null === alternate\n          ? (sourceFiber[isHidden] = [update])\n          : alternate.push(update),\n        (update.lane = lane | 536870912)),\n      parent)\n    : null;\n}\nfunction getRootForUpdatedFiber(sourceFiber) {\n  if (50 < nestedUpdateCount)\n    throw (\n      ((nestedUpdateCount = 0),\n      (rootWithNestedUpdates = null),\n      Error(formatProdErrorMessage(185)))\n    );\n  for (var parent = sourceFiber.return; null !== parent; )\n    (sourceFiber = parent), (parent = sourceFiber.return);\n  return 3 === sourceFiber.tag ? sourceFiber.stateNode : null;\n}\nvar emptyContextObject = {};\nfunction FiberNode(tag, pendingProps, key, mode) {\n  this.tag = tag;\n  this.key = key;\n  this.sibling =\n    this.child =\n    this.return =\n    this.stateNode =\n    this.type =\n    this.elementType =\n      null;\n  this.index = 0;\n  this.refCleanup = this.ref = null;\n  this.pendingProps = pendingProps;\n  this.dependencies =\n    this.memoizedState =\n    this.updateQueue =\n    this.memoizedProps =\n      null;\n  this.mode = mode;\n  this.subtreeFlags = this.flags = 0;\n  this.deletions = null;\n  this.childLanes = this.lanes = 0;\n  this.alternate = null;\n}\nfunction createFiberImplClass(tag, pendingProps, key, mode) {\n  return new FiberNode(tag, pendingProps, key, mode);\n}\nfunction shouldConstruct(Component) {\n  Component = Component.prototype;\n  return !(!Component || !Component.isReactComponent);\n}\nfunction createWorkInProgress(current, pendingProps) {\n  var workInProgress = current.alternate;\n  null === workInProgress\n    ? ((workInProgress = createFiberImplClass(\n        current.tag,\n        pendingProps,\n        current.key,\n        current.mode\n      )),\n      (workInProgress.elementType = current.elementType),\n      (workInProgress.type = current.type),\n      (workInProgress.stateNode = current.stateNode),\n      (workInProgress.alternate = current),\n      (current.alternate = workInProgress))\n    : ((workInProgress.pendingProps = pendingProps),\n      (workInProgress.type = current.type),\n      (workInProgress.flags = 0),\n      (workInProgress.subtreeFlags = 0),\n      (workInProgress.deletions = null));\n  workInProgress.flags = current.flags & 65011712;\n  workInProgress.childLanes = current.childLanes;\n  workInProgress.lanes = current.lanes;\n  workInProgress.child = current.child;\n  workInProgress.memoizedProps = current.memoizedProps;\n  workInProgress.memoizedState = current.memoizedState;\n  workInProgress.updateQueue = current.updateQueue;\n  pendingProps = current.dependencies;\n  workInProgress.dependencies =\n    null === pendingProps\n      ? null\n      : { lanes: pendingProps.lanes, firstContext: pendingProps.firstContext };\n  workInProgress.sibling = current.sibling;\n  workInProgress.index = current.index;\n  workInProgress.ref = current.ref;\n  workInProgress.refCleanup = current.refCleanup;\n  return workInProgress;\n}\nfunction resetWorkInProgress(workInProgress, renderLanes) {\n  workInProgress.flags &= 65011714;\n  var current = workInProgress.alternate;\n  null === current\n    ? ((workInProgress.childLanes = 0),\n      (workInProgress.lanes = renderLanes),\n      (workInProgress.child = null),\n      (workInProgress.subtreeFlags = 0),\n      (workInProgress.memoizedProps = null),\n      (workInProgress.memoizedState = null),\n      (workInProgress.updateQueue = null),\n      (workInProgress.dependencies = null),\n      (workInProgress.stateNode = null))\n    : ((workInProgress.childLanes = current.childLanes),\n      (workInProgress.lanes = current.lanes),\n      (workInProgress.child = current.child),\n      (workInProgress.subtreeFlags = 0),\n      (workInProgress.deletions = null),\n      (workInProgress.memoizedProps = current.memoizedProps),\n      (workInProgress.memoizedState = current.memoizedState),\n      (workInProgress.updateQueue = current.updateQueue),\n      (workInProgress.type = current.type),\n      (renderLanes = current.dependencies),\n      (workInProgress.dependencies =\n        null === renderLanes\n          ? null\n          : {\n              lanes: renderLanes.lanes,\n              firstContext: renderLanes.firstContext\n            }));\n  return workInProgress;\n}\nfunction createFiberFromTypeAndProps(\n  type,\n  key,\n  pendingProps,\n  owner,\n  mode,\n  lanes\n) {\n  var fiberTag = 0;\n  owner = type;\n  if (\"function\" === typeof type) shouldConstruct(type) && (fiberTag = 1);\n  else if (\"string\" === typeof type)\n    fiberTag = isHostHoistableType(\n      type,\n      pendingProps,\n      contextStackCursor.current\n    )\n      ? 26\n      : \"html\" === type || \"head\" === type || \"body\" === type\n        ? 27\n        : 5;\n  else\n    a: switch (type) {\n      case REACT_ACTIVITY_TYPE:\n        return (\n          (type = createFiberImplClass(31, pendingProps, key, mode)),\n          (type.elementType = REACT_ACTIVITY_TYPE),\n          (type.lanes = lanes),\n          type\n        );\n      case REACT_FRAGMENT_TYPE:\n        return createFiberFromFragment(pendingProps.children, mode, lanes, key);\n      case REACT_STRICT_MODE_TYPE:\n        fiberTag = 8;\n        mode |= 24;\n        break;\n      case REACT_PROFILER_TYPE:\n        return (\n          (type = createFiberImplClass(12, pendingProps, key, mode | 2)),\n          (type.elementType = REACT_PROFILER_TYPE),\n          (type.lanes = lanes),\n          type\n        );\n      case REACT_SUSPENSE_TYPE:\n        return (\n          (type = createFiberImplClass(13, pendingProps, key, mode)),\n          (type.elementType = REACT_SUSPENSE_TYPE),\n          (type.lanes = lanes),\n          type\n        );\n      case REACT_SUSPENSE_LIST_TYPE:\n        return (\n          (type = createFiberImplClass(19, pendingProps, key, mode)),\n          (type.elementType = REACT_SUSPENSE_LIST_TYPE),\n          (type.lanes = lanes),\n          type\n        );\n      default:\n        if (\"object\" === typeof type && null !== type)\n          switch (type.$$typeof) {\n            case REACT_CONTEXT_TYPE:\n              fiberTag = 10;\n              break a;\n            case REACT_CONSUMER_TYPE:\n              fiberTag = 9;\n              break a;\n            case REACT_FORWARD_REF_TYPE:\n              fiberTag = 11;\n              break a;\n            case REACT_MEMO_TYPE:\n              fiberTag = 14;\n              break a;\n            case REACT_LAZY_TYPE:\n              fiberTag = 16;\n              owner = null;\n              break a;\n          }\n        fiberTag = 29;\n        pendingProps = Error(\n          formatProdErrorMessage(130, null === type ? \"null\" : typeof type, \"\")\n        );\n        owner = null;\n    }\n  key = createFiberImplClass(fiberTag, pendingProps, key, mode);\n  key.elementType = type;\n  key.type = owner;\n  key.lanes = lanes;\n  return key;\n}\nfunction createFiberFromFragment(elements, mode, lanes, key) {\n  elements = createFiberImplClass(7, elements, key, mode);\n  elements.lanes = lanes;\n  return elements;\n}\nfunction createFiberFromText(content, mode, lanes) {\n  content = createFiberImplClass(6, content, null, mode);\n  content.lanes = lanes;\n  return content;\n}\nfunction createFiberFromDehydratedFragment(dehydratedNode) {\n  var fiber = createFiberImplClass(18, null, null, 0);\n  fiber.stateNode = dehydratedNode;\n  return fiber;\n}\nfunction createFiberFromPortal(portal, mode, lanes) {\n  mode = createFiberImplClass(\n    4,\n    null !== portal.children ? portal.children : [],\n    portal.key,\n    mode\n  );\n  mode.lanes = lanes;\n  mode.stateNode = {\n    containerInfo: portal.containerInfo,\n    pendingChildren: null,\n    implementation: portal.implementation\n  };\n  return mode;\n}\nvar CapturedStacks = new WeakMap();\nfunction createCapturedValueAtFiber(value, source) {\n  if (\"object\" === typeof value && null !== value) {\n    var existing = CapturedStacks.get(value);\n    if (void 0 !== existing) return existing;\n    source = {\n      value: value,\n      source: source,\n      stack: getStackByFiberInDevAndProd(source)\n    };\n    CapturedStacks.set(value, source);\n    return source;\n  }\n  return {\n    value: value,\n    source: source,\n    stack: getStackByFiberInDevAndProd(source)\n  };\n}\nvar forkStack = [],\n  forkStackIndex = 0,\n  treeForkProvider = null,\n  treeForkCount = 0,\n  idStack = [],\n  idStackIndex = 0,\n  treeContextProvider = null,\n  treeContextId = 1,\n  treeContextOverflow = \"\";\nfunction pushTreeFork(workInProgress, totalChildren) {\n  forkStack[forkStackIndex++] = treeForkCount;\n  forkStack[forkStackIndex++] = treeForkProvider;\n  treeForkProvider = workInProgress;\n  treeForkCount = totalChildren;\n}\nfunction pushTreeId(workInProgress, totalChildren, index) {\n  idStack[idStackIndex++] = treeContextId;\n  idStack[idStackIndex++] = treeContextOverflow;\n  idStack[idStackIndex++] = treeContextProvider;\n  treeContextProvider = workInProgress;\n  var baseIdWithLeadingBit = treeContextId;\n  workInProgress = treeContextOverflow;\n  var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1;\n  baseIdWithLeadingBit &= ~(1 << baseLength);\n  index += 1;\n  var length = 32 - clz32(totalChildren) + baseLength;\n  if (30 < length) {\n    var numberOfOverflowBits = baseLength - (baseLength % 5);\n    length = (\n      baseIdWithLeadingBit &\n      ((1 << numberOfOverflowBits) - 1)\n    ).toString(32);\n    baseIdWithLeadingBit >>= numberOfOverflowBits;\n    baseLength -= numberOfOverflowBits;\n    treeContextId =\n      (1 << (32 - clz32(totalChildren) + baseLength)) |\n      (index << baseLength) |\n      baseIdWithLeadingBit;\n    treeContextOverflow = length + workInProgress;\n  } else\n    (treeContextId =\n      (1 << length) | (index << baseLength) | baseIdWithLeadingBit),\n      (treeContextOverflow = workInProgress);\n}\nfunction pushMaterializedTreeId(workInProgress) {\n  null !== workInProgress.return &&\n    (pushTreeFork(workInProgress, 1), pushTreeId(workInProgress, 1, 0));\n}\nfunction popTreeContext(workInProgress) {\n  for (; workInProgress === treeForkProvider; )\n    (treeForkProvider = forkStack[--forkStackIndex]),\n      (forkStack[forkStackIndex] = null),\n      (treeForkCount = forkStack[--forkStackIndex]),\n      (forkStack[forkStackIndex] = null);\n  for (; workInProgress === treeContextProvider; )\n    (treeContextProvider = idStack[--idStackIndex]),\n      (idStack[idStackIndex] = null),\n      (treeContextOverflow = idStack[--idStackIndex]),\n      (idStack[idStackIndex] = null),\n      (treeContextId = idStack[--idStackIndex]),\n      (idStack[idStackIndex] = null);\n}\nfunction restoreSuspendedTreeContext(workInProgress, suspendedContext) {\n  idStack[idStackIndex++] = treeContextId;\n  idStack[idStackIndex++] = treeContextOverflow;\n  idStack[idStackIndex++] = treeContextProvider;\n  treeContextId = suspendedContext.id;\n  treeContextOverflow = suspendedContext.overflow;\n  treeContextProvider = workInProgress;\n}\nvar hydrationParentFiber = null,\n  nextHydratableInstance = null,\n  isHydrating = !1,\n  hydrationErrors = null,\n  rootOrSingletonContext = !1,\n  HydrationMismatchException = Error(formatProdErrorMessage(519));\nfunction throwOnHydrationMismatch(fiber) {\n  var error = Error(\n    formatProdErrorMessage(\n      418,\n      1 < arguments.length && void 0 !== arguments[1] && arguments[1]\n        ? \"text\"\n        : \"HTML\",\n      \"\"\n    )\n  );\n  queueHydrationError(createCapturedValueAtFiber(error, fiber));\n  throw HydrationMismatchException;\n}\nfunction prepareToHydrateHostInstance(fiber) {\n  var instance = fiber.stateNode,\n    type = fiber.type,\n    props = fiber.memoizedProps;\n  instance[internalInstanceKey] = fiber;\n  instance[internalPropsKey] = props;\n  switch (type) {\n    case \"dialog\":\n      listenToNonDelegatedEvent(\"cancel\", instance);\n      listenToNonDelegatedEvent(\"close\", instance);\n      break;\n    case \"iframe\":\n    case \"object\":\n    case \"embed\":\n      listenToNonDelegatedEvent(\"load\", instance);\n      break;\n    case \"video\":\n    case \"audio\":\n      for (type = 0; type < mediaEventTypes.length; type++)\n        listenToNonDelegatedEvent(mediaEventTypes[type], instance);\n      break;\n    case \"source\":\n      listenToNonDelegatedEvent(\"error\", instance);\n      break;\n    case \"img\":\n    case \"image\":\n    case \"link\":\n      listenToNonDelegatedEvent(\"error\", instance);\n      listenToNonDelegatedEvent(\"load\", instance);\n      break;\n    case \"details\":\n      listenToNonDelegatedEvent(\"toggle\", instance);\n      break;\n    case \"input\":\n      listenToNonDelegatedEvent(\"invalid\", instance);\n      initInput(\n        instance,\n        props.value,\n        props.defaultValue,\n        props.checked,\n        props.defaultChecked,\n        props.type,\n        props.name,\n        !0\n      );\n      break;\n    case \"select\":\n      listenToNonDelegatedEvent(\"invalid\", instance);\n      break;\n    case \"textarea\":\n      listenToNonDelegatedEvent(\"invalid\", instance),\n        initTextarea(instance, props.value, props.defaultValue, props.children);\n  }\n  type = props.children;\n  (\"string\" !== typeof type &&\n    \"number\" !== typeof type &&\n    \"bigint\" !== typeof type) ||\n  instance.textContent === \"\" + type ||\n  !0 === props.suppressHydrationWarning ||\n  checkForUnmatchedText(instance.textContent, type)\n    ? (null != props.popover &&\n        (listenToNonDelegatedEvent(\"beforetoggle\", instance),\n        listenToNonDelegatedEvent(\"toggle\", instance)),\n      null != props.onScroll && listenToNonDelegatedEvent(\"scroll\", instance),\n      null != props.onScrollEnd &&\n        listenToNonDelegatedEvent(\"scrollend\", instance),\n      null != props.onClick && (instance.onclick = noop$1),\n      (instance = !0))\n    : (instance = !1);\n  instance || throwOnHydrationMismatch(fiber, !0);\n}\nfunction popToNextHostParent(fiber) {\n  for (hydrationParentFiber = fiber.return; hydrationParentFiber; )\n    switch (hydrationParentFiber.tag) {\n      case 5:\n      case 31:\n      case 13:\n        rootOrSingletonContext = !1;\n        return;\n      case 27:\n      case 3:\n        rootOrSingletonContext = !0;\n        return;\n      default:\n        hydrationParentFiber = hydrationParentFiber.return;\n    }\n}\nfunction popHydrationState(fiber) {\n  if (fiber !== hydrationParentFiber) return !1;\n  if (!isHydrating) return popToNextHostParent(fiber), (isHydrating = !0), !1;\n  var tag = fiber.tag,\n    JSCompiler_temp;\n  if ((JSCompiler_temp = 3 !== tag && 27 !== tag)) {\n    if ((JSCompiler_temp = 5 === tag))\n      (JSCompiler_temp = fiber.type),\n        (JSCompiler_temp =\n          !(\"form\" !== JSCompiler_temp && \"button\" !== JSCompiler_temp) ||\n          shouldSetTextContent(fiber.type, fiber.memoizedProps));\n    JSCompiler_temp = !JSCompiler_temp;\n  }\n  JSCompiler_temp && nextHydratableInstance && throwOnHydrationMismatch(fiber);\n  popToNextHostParent(fiber);\n  if (13 === tag) {\n    fiber = fiber.memoizedState;\n    fiber = null !== fiber ? fiber.dehydrated : null;\n    if (!fiber) throw Error(formatProdErrorMessage(317));\n    nextHydratableInstance =\n      getNextHydratableInstanceAfterHydrationBoundary(fiber);\n  } else if (31 === tag) {\n    fiber = fiber.memoizedState;\n    fiber = null !== fiber ? fiber.dehydrated : null;\n    if (!fiber) throw Error(formatProdErrorMessage(317));\n    nextHydratableInstance =\n      getNextHydratableInstanceAfterHydrationBoundary(fiber);\n  } else\n    27 === tag\n      ? ((tag = nextHydratableInstance),\n        isSingletonScope(fiber.type)\n          ? ((fiber = previousHydratableOnEnteringScopedSingleton),\n            (previousHydratableOnEnteringScopedSingleton = null),\n            (nextHydratableInstance = fiber))\n          : (nextHydratableInstance = tag))\n      : (nextHydratableInstance = hydrationParentFiber\n          ? getNextHydratable(fiber.stateNode.nextSibling)\n          : null);\n  return !0;\n}\nfunction resetHydrationState() {\n  nextHydratableInstance = hydrationParentFiber = null;\n  isHydrating = !1;\n}\nfunction upgradeHydrationErrorsToRecoverable() {\n  var queuedErrors = hydrationErrors;\n  null !== queuedErrors &&\n    (null === workInProgressRootRecoverableErrors\n      ? (workInProgressRootRecoverableErrors = queuedErrors)\n      : workInProgressRootRecoverableErrors.push.apply(\n          workInProgressRootRecoverableErrors,\n          queuedErrors\n        ),\n    (hydrationErrors = null));\n  return queuedErrors;\n}\nfunction queueHydrationError(error) {\n  null === hydrationErrors\n    ? (hydrationErrors = [error])\n    : hydrationErrors.push(error);\n}\nvar valueCursor = createCursor(null),\n  currentlyRenderingFiber$1 = null,\n  lastContextDependency = null;\nfunction pushProvider(providerFiber, context, nextValue) {\n  push(valueCursor, context._currentValue);\n  context._currentValue = nextValue;\n}\nfunction popProvider(context) {\n  context._currentValue = valueCursor.current;\n  pop(valueCursor);\n}\nfunction scheduleContextWorkOnParentPath(parent, renderLanes, propagationRoot) {\n  for (; null !== parent; ) {\n    var alternate = parent.alternate;\n    (parent.childLanes & renderLanes) !== renderLanes\n      ? ((parent.childLanes |= renderLanes),\n        null !== alternate && (alternate.childLanes |= renderLanes))\n      : null !== alternate &&\n        (alternate.childLanes & renderLanes) !== renderLanes &&\n        (alternate.childLanes |= renderLanes);\n    if (parent === propagationRoot) break;\n    parent = parent.return;\n  }\n}\nfunction propagateContextChanges(\n  workInProgress,\n  contexts,\n  renderLanes,\n  forcePropagateEntireTree\n) {\n  var fiber = workInProgress.child;\n  null !== fiber && (fiber.return = workInProgress);\n  for (; null !== fiber; ) {\n    var list = fiber.dependencies;\n    if (null !== list) {\n      var nextFiber = fiber.child;\n      list = list.firstContext;\n      a: for (; null !== list; ) {\n        var dependency = list;\n        list = fiber;\n        for (var i = 0; i < contexts.length; i++)\n          if (dependency.context === contexts[i]) {\n            list.lanes |= renderLanes;\n            dependency = list.alternate;\n            null !== dependency && (dependency.lanes |= renderLanes);\n            scheduleContextWorkOnParentPath(\n              list.return,\n              renderLanes,\n              workInProgress\n            );\n            forcePropagateEntireTree || (nextFiber = null);\n            break a;\n          }\n        list = dependency.next;\n      }\n    } else if (18 === fiber.tag) {\n      nextFiber = fiber.return;\n      if (null === nextFiber) throw Error(formatProdErrorMessage(341));\n      nextFiber.lanes |= renderLanes;\n      list = nextFiber.alternate;\n      null !== list && (list.lanes |= renderLanes);\n      scheduleContextWorkOnParentPath(nextFiber, renderLanes, workInProgress);\n      nextFiber = null;\n    } else nextFiber = fiber.child;\n    if (null !== nextFiber) nextFiber.return = fiber;\n    else\n      for (nextFiber = fiber; null !== nextFiber; ) {\n        if (nextFiber === workInProgress) {\n          nextFiber = null;\n          break;\n        }\n        fiber = nextFiber.sibling;\n        if (null !== fiber) {\n          fiber.return = nextFiber.return;\n          nextFiber = fiber;\n          break;\n        }\n        nextFiber = nextFiber.return;\n      }\n    fiber = nextFiber;\n  }\n}\nfunction propagateParentContextChanges(\n  current,\n  workInProgress,\n  renderLanes,\n  forcePropagateEntireTree\n) {\n  current = null;\n  for (\n    var parent = workInProgress, isInsidePropagationBailout = !1;\n    null !== parent;\n\n  ) {\n    if (!isInsidePropagationBailout)\n      if (0 !== (parent.flags & 524288)) isInsidePropagationBailout = !0;\n      else if (0 !== (parent.flags & 262144)) break;\n    if (10 === parent.tag) {\n      var currentParent = parent.alternate;\n      if (null === currentParent) throw Error(formatProdErrorMessage(387));\n      currentParent = currentParent.memoizedProps;\n      if (null !== currentParent) {\n        var context = parent.type;\n        objectIs(parent.pendingProps.value, currentParent.value) ||\n          (null !== current ? current.push(context) : (current = [context]));\n      }\n    } else if (parent === hostTransitionProviderCursor.current) {\n      currentParent = parent.alternate;\n      if (null === currentParent) throw Error(formatProdErrorMessage(387));\n      currentParent.memoizedState.memoizedState !==\n        parent.memoizedState.memoizedState &&\n        (null !== current\n          ? current.push(HostTransitionContext)\n          : (current = [HostTransitionContext]));\n    }\n    parent = parent.return;\n  }\n  null !== current &&\n    propagateContextChanges(\n      workInProgress,\n      current,\n      renderLanes,\n      forcePropagateEntireTree\n    );\n  workInProgress.flags |= 262144;\n}\nfunction checkIfContextChanged(currentDependencies) {\n  for (\n    currentDependencies = currentDependencies.firstContext;\n    null !== currentDependencies;\n\n  ) {\n    if (\n      !objectIs(\n        currentDependencies.context._currentValue,\n        currentDependencies.memoizedValue\n      )\n    )\n      return !0;\n    currentDependencies = currentDependencies.next;\n  }\n  return !1;\n}\nfunction prepareToReadContext(workInProgress) {\n  currentlyRenderingFiber$1 = workInProgress;\n  lastContextDependency = null;\n  workInProgress = workInProgress.dependencies;\n  null !== workInProgress && (workInProgress.firstContext = null);\n}\nfunction readContext(context) {\n  return readContextForConsumer(currentlyRenderingFiber$1, context);\n}\nfunction readContextDuringReconciliation(consumer, context) {\n  null === currentlyRenderingFiber$1 && prepareToReadContext(consumer);\n  return readContextForConsumer(consumer, context);\n}\nfunction readContextForConsumer(consumer, context) {\n  var value = context._currentValue;\n  context = { context: context, memoizedValue: value, next: null };\n  if (null === lastContextDependency) {\n    if (null === consumer) throw Error(formatProdErrorMessage(308));\n    lastContextDependency = context;\n    consumer.dependencies = { lanes: 0, firstContext: context };\n    consumer.flags |= 524288;\n  } else lastContextDependency = lastContextDependency.next = context;\n  return value;\n}\nvar AbortControllerLocal =\n    \"undefined\" !== typeof AbortController\n      ? AbortController\n      : function () {\n          var listeners = [],\n            signal = (this.signal = {\n              aborted: !1,\n              addEventListener: function (type, listener) {\n                listeners.push(listener);\n              }\n            });\n          this.abort = function () {\n            signal.aborted = !0;\n            listeners.forEach(function (listener) {\n              return listener();\n            });\n          };\n        },\n  scheduleCallback$2 = Scheduler.unstable_scheduleCallback,\n  NormalPriority = Scheduler.unstable_NormalPriority,\n  CacheContext = {\n    $$typeof: REACT_CONTEXT_TYPE,\n    Consumer: null,\n    Provider: null,\n    _currentValue: null,\n    _currentValue2: null,\n    _threadCount: 0\n  };\nfunction createCache() {\n  return {\n    controller: new AbortControllerLocal(),\n    data: new Map(),\n    refCount: 0\n  };\n}\nfunction releaseCache(cache) {\n  cache.refCount--;\n  0 === cache.refCount &&\n    scheduleCallback$2(NormalPriority, function () {\n      cache.controller.abort();\n    });\n}\nvar currentEntangledListeners = null,\n  currentEntangledPendingCount = 0,\n  currentEntangledLane = 0,\n  currentEntangledActionThenable = null;\nfunction entangleAsyncAction(transition, thenable) {\n  if (null === currentEntangledListeners) {\n    var entangledListeners = (currentEntangledListeners = []);\n    currentEntangledPendingCount = 0;\n    currentEntangledLane = requestTransitionLane();\n    currentEntangledActionThenable = {\n      status: \"pending\",\n      value: void 0,\n      then: function (resolve) {\n        entangledListeners.push(resolve);\n      }\n    };\n  }\n  currentEntangledPendingCount++;\n  thenable.then(pingEngtangledActionScope, pingEngtangledActionScope);\n  return thenable;\n}\nfunction pingEngtangledActionScope() {\n  if (\n    0 === --currentEntangledPendingCount &&\n    null !== currentEntangledListeners\n  ) {\n    null !== currentEntangledActionThenable &&\n      (currentEntangledActionThenable.status = \"fulfilled\");\n    var listeners = currentEntangledListeners;\n    currentEntangledListeners = null;\n    currentEntangledLane = 0;\n    currentEntangledActionThenable = null;\n    for (var i = 0; i < listeners.length; i++) (0, listeners[i])();\n  }\n}\nfunction chainThenableValue(thenable, result) {\n  var listeners = [],\n    thenableWithOverride = {\n      status: \"pending\",\n      value: null,\n      reason: null,\n      then: function (resolve) {\n        listeners.push(resolve);\n      }\n    };\n  thenable.then(\n    function () {\n      thenableWithOverride.status = \"fulfilled\";\n      thenableWithOverride.value = result;\n      for (var i = 0; i < listeners.length; i++) (0, listeners[i])(result);\n    },\n    function (error) {\n      thenableWithOverride.status = \"rejected\";\n      thenableWithOverride.reason = error;\n      for (error = 0; error < listeners.length; error++)\n        (0, listeners[error])(void 0);\n    }\n  );\n  return thenableWithOverride;\n}\nvar prevOnStartTransitionFinish = ReactSharedInternals.S;\nReactSharedInternals.S = function (transition, returnValue) {\n  globalMostRecentTransitionTime = now();\n  \"object\" === typeof returnValue &&\n    null !== returnValue &&\n    \"function\" === typeof returnValue.then &&\n    entangleAsyncAction(transition, returnValue);\n  null !== prevOnStartTransitionFinish &&\n    prevOnStartTransitionFinish(transition, returnValue);\n};\nvar resumedCache = createCursor(null);\nfunction peekCacheFromPool() {\n  var cacheResumedFromPreviousRender = resumedCache.current;\n  return null !== cacheResumedFromPreviousRender\n    ? cacheResumedFromPreviousRender\n    : workInProgressRoot.pooledCache;\n}\nfunction pushTransition(offscreenWorkInProgress, prevCachePool) {\n  null === prevCachePool\n    ? push(resumedCache, resumedCache.current)\n    : push(resumedCache, prevCachePool.pool);\n}\nfunction getSuspendedCache() {\n  var cacheFromPool = peekCacheFromPool();\n  return null === cacheFromPool\n    ? null\n    : { parent: CacheContext._currentValue, pool: cacheFromPool };\n}\nvar SuspenseException = Error(formatProdErrorMessage(460)),\n  SuspenseyCommitException = Error(formatProdErrorMessage(474)),\n  SuspenseActionException = Error(formatProdErrorMessage(542)),\n  noopSuspenseyCommitThenable = { then: function () {} };\nfunction isThenableResolved(thenable) {\n  thenable = thenable.status;\n  return \"fulfilled\" === thenable || \"rejected\" === thenable;\n}\nfunction trackUsedThenable(thenableState, thenable, index) {\n  index = thenableState[index];\n  void 0 === index\n    ? thenableState.push(thenable)\n    : index !== thenable && (thenable.then(noop$1, noop$1), (thenable = index));\n  switch (thenable.status) {\n    case \"fulfilled\":\n      return thenable.value;\n    case \"rejected\":\n      throw (\n        ((thenableState = thenable.reason),\n        checkIfUseWrappedInAsyncCatch(thenableState),\n        thenableState)\n      );\n    default:\n      if (\"string\" === typeof thenable.status) thenable.then(noop$1, noop$1);\n      else {\n        thenableState = workInProgressRoot;\n        if (null !== thenableState && 100 < thenableState.shellSuspendCounter)\n          throw Error(formatProdErrorMessage(482));\n        thenableState = thenable;\n        thenableState.status = \"pending\";\n        thenableState.then(\n          function (fulfilledValue) {\n            if (\"pending\" === thenable.status) {\n              var fulfilledThenable = thenable;\n              fulfilledThenable.status = \"fulfilled\";\n              fulfilledThenable.value = fulfilledValue;\n            }\n          },\n          function (error) {\n            if (\"pending\" === thenable.status) {\n              var rejectedThenable = thenable;\n              rejectedThenable.status = \"rejected\";\n              rejectedThenable.reason = error;\n            }\n          }\n        );\n      }\n      switch (thenable.status) {\n        case \"fulfilled\":\n          return thenable.value;\n        case \"rejected\":\n          throw (\n            ((thenableState = thenable.reason),\n            checkIfUseWrappedInAsyncCatch(thenableState),\n            thenableState)\n          );\n      }\n      suspendedThenable = thenable;\n      throw SuspenseException;\n  }\n}\nfunction resolveLazy(lazyType) {\n  try {\n    var init = lazyType._init;\n    return init(lazyType._payload);\n  } catch (x) {\n    if (null !== x && \"object\" === typeof x && \"function\" === typeof x.then)\n      throw ((suspendedThenable = x), SuspenseException);\n    throw x;\n  }\n}\nvar suspendedThenable = null;\nfunction getSuspendedThenable() {\n  if (null === suspendedThenable) throw Error(formatProdErrorMessage(459));\n  var thenable = suspendedThenable;\n  suspendedThenable = null;\n  return thenable;\n}\nfunction checkIfUseWrappedInAsyncCatch(rejectedReason) {\n  if (\n    rejectedReason === SuspenseException ||\n    rejectedReason === SuspenseActionException\n  )\n    throw Error(formatProdErrorMessage(483));\n}\nvar thenableState$1 = null,\n  thenableIndexCounter$1 = 0;\nfunction unwrapThenable(thenable) {\n  var index = thenableIndexCounter$1;\n  thenableIndexCounter$1 += 1;\n  null === thenableState$1 && (thenableState$1 = []);\n  return trackUsedThenable(thenableState$1, thenable, index);\n}\nfunction coerceRef(workInProgress, element) {\n  element = element.props.ref;\n  workInProgress.ref = void 0 !== element ? element : null;\n}\nfunction throwOnInvalidObjectTypeImpl(returnFiber, newChild) {\n  if (newChild.$$typeof === REACT_LEGACY_ELEMENT_TYPE)\n    throw Error(formatProdErrorMessage(525));\n  returnFiber = Object.prototype.toString.call(newChild);\n  throw Error(\n    formatProdErrorMessage(\n      31,\n      \"[object Object]\" === returnFiber\n        ? \"object with keys {\" + Object.keys(newChild).join(\", \") + \"}\"\n        : returnFiber\n    )\n  );\n}\nfunction createChildReconciler(shouldTrackSideEffects) {\n  function deleteChild(returnFiber, childToDelete) {\n    if (shouldTrackSideEffects) {\n      var deletions = returnFiber.deletions;\n      null === deletions\n        ? ((returnFiber.deletions = [childToDelete]), (returnFiber.flags |= 16))\n        : deletions.push(childToDelete);\n    }\n  }\n  function deleteRemainingChildren(returnFiber, currentFirstChild) {\n    if (!shouldTrackSideEffects) return null;\n    for (; null !== currentFirstChild; )\n      deleteChild(returnFiber, currentFirstChild),\n        (currentFirstChild = currentFirstChild.sibling);\n    return null;\n  }\n  function mapRemainingChildren(currentFirstChild) {\n    for (var existingChildren = new Map(); null !== currentFirstChild; )\n      null !== currentFirstChild.key\n        ? existingChildren.set(currentFirstChild.key, currentFirstChild)\n        : existingChildren.set(currentFirstChild.index, currentFirstChild),\n        (currentFirstChild = currentFirstChild.sibling);\n    return existingChildren;\n  }\n  function useFiber(fiber, pendingProps) {\n    fiber = createWorkInProgress(fiber, pendingProps);\n    fiber.index = 0;\n    fiber.sibling = null;\n    return fiber;\n  }\n  function placeChild(newFiber, lastPlacedIndex, newIndex) {\n    newFiber.index = newIndex;\n    if (!shouldTrackSideEffects)\n      return (newFiber.flags |= 1048576), lastPlacedIndex;\n    newIndex = newFiber.alternate;\n    if (null !== newIndex)\n      return (\n        (newIndex = newIndex.index),\n        newIndex < lastPlacedIndex\n          ? ((newFiber.flags |= 67108866), lastPlacedIndex)\n          : newIndex\n      );\n    newFiber.flags |= 67108866;\n    return lastPlacedIndex;\n  }\n  function placeSingleChild(newFiber) {\n    shouldTrackSideEffects &&\n      null === newFiber.alternate &&\n      (newFiber.flags |= 67108866);\n    return newFiber;\n  }\n  function updateTextNode(returnFiber, current, textContent, lanes) {\n    if (null === current || 6 !== current.tag)\n      return (\n        (current = createFiberFromText(textContent, returnFiber.mode, lanes)),\n        (current.return = returnFiber),\n        current\n      );\n    current = useFiber(current, textContent);\n    current.return = returnFiber;\n    return current;\n  }\n  function updateElement(returnFiber, current, element, lanes) {\n    var elementType = element.type;\n    if (elementType === REACT_FRAGMENT_TYPE)\n      return updateFragment(\n        returnFiber,\n        current,\n        element.props.children,\n        lanes,\n        element.key\n      );\n    if (\n      null !== current &&\n      (current.elementType === elementType ||\n        (\"object\" === typeof elementType &&\n          null !== elementType &&\n          elementType.$$typeof === REACT_LAZY_TYPE &&\n          resolveLazy(elementType) === current.type))\n    )\n      return (\n        (current = useFiber(current, element.props)),\n        coerceRef(current, element),\n        (current.return = returnFiber),\n        current\n      );\n    current = createFiberFromTypeAndProps(\n      element.type,\n      element.key,\n      element.props,\n      null,\n      returnFiber.mode,\n      lanes\n    );\n    coerceRef(current, element);\n    current.return = returnFiber;\n    return current;\n  }\n  function updatePortal(returnFiber, current, portal, lanes) {\n    if (\n      null === current ||\n      4 !== current.tag ||\n      current.stateNode.containerInfo !== portal.containerInfo ||\n      current.stateNode.implementation !== portal.implementation\n    )\n      return (\n        (current = createFiberFromPortal(portal, returnFiber.mode, lanes)),\n        (current.return = returnFiber),\n        current\n      );\n    current = useFiber(current, portal.children || []);\n    current.return = returnFiber;\n    return current;\n  }\n  function updateFragment(returnFiber, current, fragment, lanes, key) {\n    if (null === current || 7 !== current.tag)\n      return (\n        (current = createFiberFromFragment(\n          fragment,\n          returnFiber.mode,\n          lanes,\n          key\n        )),\n        (current.return = returnFiber),\n        current\n      );\n    current = useFiber(current, fragment);\n    current.return = returnFiber;\n    return current;\n  }\n  function createChild(returnFiber, newChild, lanes) {\n    if (\n      (\"string\" === typeof newChild && \"\" !== newChild) ||\n      \"number\" === typeof newChild ||\n      \"bigint\" === typeof newChild\n    )\n      return (\n        (newChild = createFiberFromText(\n          \"\" + newChild,\n          returnFiber.mode,\n          lanes\n        )),\n        (newChild.return = returnFiber),\n        newChild\n      );\n    if (\"object\" === typeof newChild && null !== newChild) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          return (\n            (lanes = createFiberFromTypeAndProps(\n              newChild.type,\n              newChild.key,\n              newChild.props,\n              null,\n              returnFiber.mode,\n              lanes\n            )),\n            coerceRef(lanes, newChild),\n            (lanes.return = returnFiber),\n            lanes\n          );\n        case REACT_PORTAL_TYPE:\n          return (\n            (newChild = createFiberFromPortal(\n              newChild,\n              returnFiber.mode,\n              lanes\n            )),\n            (newChild.return = returnFiber),\n            newChild\n          );\n        case REACT_LAZY_TYPE:\n          return (\n            (newChild = resolveLazy(newChild)),\n            createChild(returnFiber, newChild, lanes)\n          );\n      }\n      if (isArrayImpl(newChild) || getIteratorFn(newChild))\n        return (\n          (newChild = createFiberFromFragment(\n            newChild,\n            returnFiber.mode,\n            lanes,\n            null\n          )),\n          (newChild.return = returnFiber),\n          newChild\n        );\n      if (\"function\" === typeof newChild.then)\n        return createChild(returnFiber, unwrapThenable(newChild), lanes);\n      if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n        return createChild(\n          returnFiber,\n          readContextDuringReconciliation(returnFiber, newChild),\n          lanes\n        );\n      throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n    }\n    return null;\n  }\n  function updateSlot(returnFiber, oldFiber, newChild, lanes) {\n    var key = null !== oldFiber ? oldFiber.key : null;\n    if (\n      (\"string\" === typeof newChild && \"\" !== newChild) ||\n      \"number\" === typeof newChild ||\n      \"bigint\" === typeof newChild\n    )\n      return null !== key\n        ? null\n        : updateTextNode(returnFiber, oldFiber, \"\" + newChild, lanes);\n    if (\"object\" === typeof newChild && null !== newChild) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          return newChild.key === key\n            ? updateElement(returnFiber, oldFiber, newChild, lanes)\n            : null;\n        case REACT_PORTAL_TYPE:\n          return newChild.key === key\n            ? updatePortal(returnFiber, oldFiber, newChild, lanes)\n            : null;\n        case REACT_LAZY_TYPE:\n          return (\n            (newChild = resolveLazy(newChild)),\n            updateSlot(returnFiber, oldFiber, newChild, lanes)\n          );\n      }\n      if (isArrayImpl(newChild) || getIteratorFn(newChild))\n        return null !== key\n          ? null\n          : updateFragment(returnFiber, oldFiber, newChild, lanes, null);\n      if (\"function\" === typeof newChild.then)\n        return updateSlot(\n          returnFiber,\n          oldFiber,\n          unwrapThenable(newChild),\n          lanes\n        );\n      if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n        return updateSlot(\n          returnFiber,\n          oldFiber,\n          readContextDuringReconciliation(returnFiber, newChild),\n          lanes\n        );\n      throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n    }\n    return null;\n  }\n  function updateFromMap(\n    existingChildren,\n    returnFiber,\n    newIdx,\n    newChild,\n    lanes\n  ) {\n    if (\n      (\"string\" === typeof newChild && \"\" !== newChild) ||\n      \"number\" === typeof newChild ||\n      \"bigint\" === typeof newChild\n    )\n      return (\n        (existingChildren = existingChildren.get(newIdx) || null),\n        updateTextNode(returnFiber, existingChildren, \"\" + newChild, lanes)\n      );\n    if (\"object\" === typeof newChild && null !== newChild) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          return (\n            (existingChildren =\n              existingChildren.get(\n                null === newChild.key ? newIdx : newChild.key\n              ) || null),\n            updateElement(returnFiber, existingChildren, newChild, lanes)\n          );\n        case REACT_PORTAL_TYPE:\n          return (\n            (existingChildren =\n              existingChildren.get(\n                null === newChild.key ? newIdx : newChild.key\n              ) || null),\n            updatePortal(returnFiber, existingChildren, newChild, lanes)\n          );\n        case REACT_LAZY_TYPE:\n          return (\n            (newChild = resolveLazy(newChild)),\n            updateFromMap(\n              existingChildren,\n              returnFiber,\n              newIdx,\n              newChild,\n              lanes\n            )\n          );\n      }\n      if (isArrayImpl(newChild) || getIteratorFn(newChild))\n        return (\n          (existingChildren = existingChildren.get(newIdx) || null),\n          updateFragment(returnFiber, existingChildren, newChild, lanes, null)\n        );\n      if (\"function\" === typeof newChild.then)\n        return updateFromMap(\n          existingChildren,\n          returnFiber,\n          newIdx,\n          unwrapThenable(newChild),\n          lanes\n        );\n      if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n        return updateFromMap(\n          existingChildren,\n          returnFiber,\n          newIdx,\n          readContextDuringReconciliation(returnFiber, newChild),\n          lanes\n        );\n      throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n    }\n    return null;\n  }\n  function reconcileChildrenArray(\n    returnFiber,\n    currentFirstChild,\n    newChildren,\n    lanes\n  ) {\n    for (\n      var resultingFirstChild = null,\n        previousNewFiber = null,\n        oldFiber = currentFirstChild,\n        newIdx = (currentFirstChild = 0),\n        nextOldFiber = null;\n      null !== oldFiber && newIdx < newChildren.length;\n      newIdx++\n    ) {\n      oldFiber.index > newIdx\n        ? ((nextOldFiber = oldFiber), (oldFiber = null))\n        : (nextOldFiber = oldFiber.sibling);\n      var newFiber = updateSlot(\n        returnFiber,\n        oldFiber,\n        newChildren[newIdx],\n        lanes\n      );\n      if (null === newFiber) {\n        null === oldFiber && (oldFiber = nextOldFiber);\n        break;\n      }\n      shouldTrackSideEffects &&\n        oldFiber &&\n        null === newFiber.alternate &&\n        deleteChild(returnFiber, oldFiber);\n      currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);\n      null === previousNewFiber\n        ? (resultingFirstChild = newFiber)\n        : (previousNewFiber.sibling = newFiber);\n      previousNewFiber = newFiber;\n      oldFiber = nextOldFiber;\n    }\n    if (newIdx === newChildren.length)\n      return (\n        deleteRemainingChildren(returnFiber, oldFiber),\n        isHydrating && pushTreeFork(returnFiber, newIdx),\n        resultingFirstChild\n      );\n    if (null === oldFiber) {\n      for (; newIdx < newChildren.length; newIdx++)\n        (oldFiber = createChild(returnFiber, newChildren[newIdx], lanes)),\n          null !== oldFiber &&\n            ((currentFirstChild = placeChild(\n              oldFiber,\n              currentFirstChild,\n              newIdx\n            )),\n            null === previousNewFiber\n              ? (resultingFirstChild = oldFiber)\n              : (previousNewFiber.sibling = oldFiber),\n            (previousNewFiber = oldFiber));\n      isHydrating && pushTreeFork(returnFiber, newIdx);\n      return resultingFirstChild;\n    }\n    for (\n      oldFiber = mapRemainingChildren(oldFiber);\n      newIdx < newChildren.length;\n      newIdx++\n    )\n      (nextOldFiber = updateFromMap(\n        oldFiber,\n        returnFiber,\n        newIdx,\n        newChildren[newIdx],\n        lanes\n      )),\n        null !== nextOldFiber &&\n          (shouldTrackSideEffects &&\n            null !== nextOldFiber.alternate &&\n            oldFiber.delete(\n              null === nextOldFiber.key ? newIdx : nextOldFiber.key\n            ),\n          (currentFirstChild = placeChild(\n            nextOldFiber,\n            currentFirstChild,\n            newIdx\n          )),\n          null === previousNewFiber\n            ? (resultingFirstChild = nextOldFiber)\n            : (previousNewFiber.sibling = nextOldFiber),\n          (previousNewFiber = nextOldFiber));\n    shouldTrackSideEffects &&\n      oldFiber.forEach(function (child) {\n        return deleteChild(returnFiber, child);\n      });\n    isHydrating && pushTreeFork(returnFiber, newIdx);\n    return resultingFirstChild;\n  }\n  function reconcileChildrenIterator(\n    returnFiber,\n    currentFirstChild,\n    newChildren,\n    lanes\n  ) {\n    if (null == newChildren) throw Error(formatProdErrorMessage(151));\n    for (\n      var resultingFirstChild = null,\n        previousNewFiber = null,\n        oldFiber = currentFirstChild,\n        newIdx = (currentFirstChild = 0),\n        nextOldFiber = null,\n        step = newChildren.next();\n      null !== oldFiber && !step.done;\n      newIdx++, step = newChildren.next()\n    ) {\n      oldFiber.index > newIdx\n        ? ((nextOldFiber = oldFiber), (oldFiber = null))\n        : (nextOldFiber = oldFiber.sibling);\n      var newFiber = updateSlot(returnFiber, oldFiber, step.value, lanes);\n      if (null === newFiber) {\n        null === oldFiber && (oldFiber = nextOldFiber);\n        break;\n      }\n      shouldTrackSideEffects &&\n        oldFiber &&\n        null === newFiber.alternate &&\n        deleteChild(returnFiber, oldFiber);\n      currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);\n      null === previousNewFiber\n        ? (resultingFirstChild = newFiber)\n        : (previousNewFiber.sibling = newFiber);\n      previousNewFiber = newFiber;\n      oldFiber = nextOldFiber;\n    }\n    if (step.done)\n      return (\n        deleteRemainingChildren(returnFiber, oldFiber),\n        isHydrating && pushTreeFork(returnFiber, newIdx),\n        resultingFirstChild\n      );\n    if (null === oldFiber) {\n      for (; !step.done; newIdx++, step = newChildren.next())\n        (step = createChild(returnFiber, step.value, lanes)),\n          null !== step &&\n            ((currentFirstChild = placeChild(step, currentFirstChild, newIdx)),\n            null === previousNewFiber\n              ? (resultingFirstChild = step)\n              : (previousNewFiber.sibling = step),\n            (previousNewFiber = step));\n      isHydrating && pushTreeFork(returnFiber, newIdx);\n      return resultingFirstChild;\n    }\n    for (\n      oldFiber = mapRemainingChildren(oldFiber);\n      !step.done;\n      newIdx++, step = newChildren.next()\n    )\n      (step = updateFromMap(oldFiber, returnFiber, newIdx, step.value, lanes)),\n        null !== step &&\n          (shouldTrackSideEffects &&\n            null !== step.alternate &&\n            oldFiber.delete(null === step.key ? newIdx : step.key),\n          (currentFirstChild = placeChild(step, currentFirstChild, newIdx)),\n          null === previousNewFiber\n            ? (resultingFirstChild = step)\n            : (previousNewFiber.sibling = step),\n          (previousNewFiber = step));\n    shouldTrackSideEffects &&\n      oldFiber.forEach(function (child) {\n        return deleteChild(returnFiber, child);\n      });\n    isHydrating && pushTreeFork(returnFiber, newIdx);\n    return resultingFirstChild;\n  }\n  function reconcileChildFibersImpl(\n    returnFiber,\n    currentFirstChild,\n    newChild,\n    lanes\n  ) {\n    \"object\" === typeof newChild &&\n      null !== newChild &&\n      newChild.type === REACT_FRAGMENT_TYPE &&\n      null === newChild.key &&\n      (newChild = newChild.props.children);\n    if (\"object\" === typeof newChild && null !== newChild) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          a: {\n            for (var key = newChild.key; null !== currentFirstChild; ) {\n              if (currentFirstChild.key === key) {\n                key = newChild.type;\n                if (key === REACT_FRAGMENT_TYPE) {\n                  if (7 === currentFirstChild.tag) {\n                    deleteRemainingChildren(\n                      returnFiber,\n                      currentFirstChild.sibling\n                    );\n                    lanes = useFiber(\n                      currentFirstChild,\n                      newChild.props.children\n                    );\n                    lanes.return = returnFiber;\n                    returnFiber = lanes;\n                    break a;\n                  }\n                } else if (\n                  currentFirstChild.elementType === key ||\n                  (\"object\" === typeof key &&\n                    null !== key &&\n                    key.$$typeof === REACT_LAZY_TYPE &&\n                    resolveLazy(key) === currentFirstChild.type)\n                ) {\n                  deleteRemainingChildren(\n                    returnFiber,\n                    currentFirstChild.sibling\n                  );\n                  lanes = useFiber(currentFirstChild, newChild.props);\n                  coerceRef(lanes, newChild);\n                  lanes.return = returnFiber;\n                  returnFiber = lanes;\n                  break a;\n                }\n                deleteRemainingChildren(returnFiber, currentFirstChild);\n                break;\n              } else deleteChild(returnFiber, currentFirstChild);\n              currentFirstChild = currentFirstChild.sibling;\n            }\n            newChild.type === REACT_FRAGMENT_TYPE\n              ? ((lanes = createFiberFromFragment(\n                  newChild.props.children,\n                  returnFiber.mode,\n                  lanes,\n                  newChild.key\n                )),\n                (lanes.return = returnFiber),\n                (returnFiber = lanes))\n              : ((lanes = createFiberFromTypeAndProps(\n                  newChild.type,\n                  newChild.key,\n                  newChild.props,\n                  null,\n                  returnFiber.mode,\n                  lanes\n                )),\n                coerceRef(lanes, newChild),\n                (lanes.return = returnFiber),\n                (returnFiber = lanes));\n          }\n          return placeSingleChild(returnFiber);\n        case REACT_PORTAL_TYPE:\n          a: {\n            for (key = newChild.key; null !== currentFirstChild; ) {\n              if (currentFirstChild.key === key)\n                if (\n                  4 === currentFirstChild.tag &&\n                  currentFirstChild.stateNode.containerInfo ===\n                    newChild.containerInfo &&\n                  currentFirstChild.stateNode.implementation ===\n                    newChild.implementation\n                ) {\n                  deleteRemainingChildren(\n                    returnFiber,\n                    currentFirstChild.sibling\n                  );\n                  lanes = useFiber(currentFirstChild, newChild.children || []);\n                  lanes.return = returnFiber;\n                  returnFiber = lanes;\n                  break a;\n                } else {\n                  deleteRemainingChildren(returnFiber, currentFirstChild);\n                  break;\n                }\n              else deleteChild(returnFiber, currentFirstChild);\n              currentFirstChild = currentFirstChild.sibling;\n            }\n            lanes = createFiberFromPortal(newChild, returnFiber.mode, lanes);\n            lanes.return = returnFiber;\n            returnFiber = lanes;\n          }\n          return placeSingleChild(returnFiber);\n        case REACT_LAZY_TYPE:\n          return (\n            (newChild = resolveLazy(newChild)),\n            reconcileChildFibersImpl(\n              returnFiber,\n              currentFirstChild,\n              newChild,\n              lanes\n            )\n          );\n      }\n      if (isArrayImpl(newChild))\n        return reconcileChildrenArray(\n          returnFiber,\n          currentFirstChild,\n          newChild,\n          lanes\n        );\n      if (getIteratorFn(newChild)) {\n        key = getIteratorFn(newChild);\n        if (\"function\" !== typeof key) throw Error(formatProdErrorMessage(150));\n        newChild = key.call(newChild);\n        return reconcileChildrenIterator(\n          returnFiber,\n          currentFirstChild,\n          newChild,\n          lanes\n        );\n      }\n      if (\"function\" === typeof newChild.then)\n        return reconcileChildFibersImpl(\n          returnFiber,\n          currentFirstChild,\n          unwrapThenable(newChild),\n          lanes\n        );\n      if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n        return reconcileChildFibersImpl(\n          returnFiber,\n          currentFirstChild,\n          readContextDuringReconciliation(returnFiber, newChild),\n          lanes\n        );\n      throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n    }\n    return (\"string\" === typeof newChild && \"\" !== newChild) ||\n      \"number\" === typeof newChild ||\n      \"bigint\" === typeof newChild\n      ? ((newChild = \"\" + newChild),\n        null !== currentFirstChild && 6 === currentFirstChild.tag\n          ? (deleteRemainingChildren(returnFiber, currentFirstChild.sibling),\n            (lanes = useFiber(currentFirstChild, newChild)),\n            (lanes.return = returnFiber),\n            (returnFiber = lanes))\n          : (deleteRemainingChildren(returnFiber, currentFirstChild),\n            (lanes = createFiberFromText(newChild, returnFiber.mode, lanes)),\n            (lanes.return = returnFiber),\n            (returnFiber = lanes)),\n        placeSingleChild(returnFiber))\n      : deleteRemainingChildren(returnFiber, currentFirstChild);\n  }\n  return function (returnFiber, currentFirstChild, newChild, lanes) {\n    try {\n      thenableIndexCounter$1 = 0;\n      var firstChildFiber = reconcileChildFibersImpl(\n        returnFiber,\n        currentFirstChild,\n        newChild,\n        lanes\n      );\n      thenableState$1 = null;\n      return firstChildFiber;\n    } catch (x) {\n      if (x === SuspenseException || x === SuspenseActionException) throw x;\n      var fiber = createFiberImplClass(29, x, null, returnFiber.mode);\n      fiber.lanes = lanes;\n      fiber.return = returnFiber;\n      return fiber;\n    } finally {\n    }\n  };\n}\nvar reconcileChildFibers = createChildReconciler(!0),\n  mountChildFibers = createChildReconciler(!1),\n  hasForceUpdate = !1;\nfunction initializeUpdateQueue(fiber) {\n  fiber.updateQueue = {\n    baseState: fiber.memoizedState,\n    firstBaseUpdate: null,\n    lastBaseUpdate: null,\n    shared: { pending: null, lanes: 0, hiddenCallbacks: null },\n    callbacks: null\n  };\n}\nfunction cloneUpdateQueue(current, workInProgress) {\n  current = current.updateQueue;\n  workInProgress.updateQueue === current &&\n    (workInProgress.updateQueue = {\n      baseState: current.baseState,\n      firstBaseUpdate: current.firstBaseUpdate,\n      lastBaseUpdate: current.lastBaseUpdate,\n      shared: current.shared,\n      callbacks: null\n    });\n}\nfunction createUpdate(lane) {\n  return { lane: lane, tag: 0, payload: null, callback: null, next: null };\n}\nfunction enqueueUpdate(fiber, update, lane) {\n  var updateQueue = fiber.updateQueue;\n  if (null === updateQueue) return null;\n  updateQueue = updateQueue.shared;\n  if (0 !== (executionContext & 2)) {\n    var pending = updateQueue.pending;\n    null === pending\n      ? (update.next = update)\n      : ((update.next = pending.next), (pending.next = update));\n    updateQueue.pending = update;\n    update = getRootForUpdatedFiber(fiber);\n    markUpdateLaneFromFiberToRoot(fiber, null, lane);\n    return update;\n  }\n  enqueueUpdate$1(fiber, updateQueue, update, lane);\n  return getRootForUpdatedFiber(fiber);\n}\nfunction entangleTransitions(root, fiber, lane) {\n  fiber = fiber.updateQueue;\n  if (null !== fiber && ((fiber = fiber.shared), 0 !== (lane & 4194048))) {\n    var queueLanes = fiber.lanes;\n    queueLanes &= root.pendingLanes;\n    lane |= queueLanes;\n    fiber.lanes = lane;\n    markRootEntangled(root, lane);\n  }\n}\nfunction enqueueCapturedUpdate(workInProgress, capturedUpdate) {\n  var queue = workInProgress.updateQueue,\n    current = workInProgress.alternate;\n  if (\n    null !== current &&\n    ((current = current.updateQueue), queue === current)\n  ) {\n    var newFirst = null,\n      newLast = null;\n    queue = queue.firstBaseUpdate;\n    if (null !== queue) {\n      do {\n        var clone = {\n          lane: queue.lane,\n          tag: queue.tag,\n          payload: queue.payload,\n          callback: null,\n          next: null\n        };\n        null === newLast\n          ? (newFirst = newLast = clone)\n          : (newLast = newLast.next = clone);\n        queue = queue.next;\n      } while (null !== queue);\n      null === newLast\n        ? (newFirst = newLast = capturedUpdate)\n        : (newLast = newLast.next = capturedUpdate);\n    } else newFirst = newLast = capturedUpdate;\n    queue = {\n      baseState: current.baseState,\n      firstBaseUpdate: newFirst,\n      lastBaseUpdate: newLast,\n      shared: current.shared,\n      callbacks: current.callbacks\n    };\n    workInProgress.updateQueue = queue;\n    return;\n  }\n  workInProgress = queue.lastBaseUpdate;\n  null === workInProgress\n    ? (queue.firstBaseUpdate = capturedUpdate)\n    : (workInProgress.next = capturedUpdate);\n  queue.lastBaseUpdate = capturedUpdate;\n}\nvar didReadFromEntangledAsyncAction = !1;\nfunction suspendIfUpdateReadFromEntangledAsyncAction() {\n  if (didReadFromEntangledAsyncAction) {\n    var entangledActionThenable = currentEntangledActionThenable;\n    if (null !== entangledActionThenable) throw entangledActionThenable;\n  }\n}\nfunction processUpdateQueue(\n  workInProgress$jscomp$0,\n  props,\n  instance$jscomp$0,\n  renderLanes\n) {\n  didReadFromEntangledAsyncAction = !1;\n  var queue = workInProgress$jscomp$0.updateQueue;\n  hasForceUpdate = !1;\n  var firstBaseUpdate = queue.firstBaseUpdate,\n    lastBaseUpdate = queue.lastBaseUpdate,\n    pendingQueue = queue.shared.pending;\n  if (null !== pendingQueue) {\n    queue.shared.pending = null;\n    var lastPendingUpdate = pendingQueue,\n      firstPendingUpdate = lastPendingUpdate.next;\n    lastPendingUpdate.next = null;\n    null === lastBaseUpdate\n      ? (firstBaseUpdate = firstPendingUpdate)\n      : (lastBaseUpdate.next = firstPendingUpdate);\n    lastBaseUpdate = lastPendingUpdate;\n    var current = workInProgress$jscomp$0.alternate;\n    null !== current &&\n      ((current = current.updateQueue),\n      (pendingQueue = current.lastBaseUpdate),\n      pendingQueue !== lastBaseUpdate &&\n        (null === pendingQueue\n          ? (current.firstBaseUpdate = firstPendingUpdate)\n          : (pendingQueue.next = firstPendingUpdate),\n        (current.lastBaseUpdate = lastPendingUpdate)));\n  }\n  if (null !== firstBaseUpdate) {\n    var newState = queue.baseState;\n    lastBaseUpdate = 0;\n    current = firstPendingUpdate = lastPendingUpdate = null;\n    pendingQueue = firstBaseUpdate;\n    do {\n      var updateLane = pendingQueue.lane & -536870913,\n        isHiddenUpdate = updateLane !== pendingQueue.lane;\n      if (\n        isHiddenUpdate\n          ? (workInProgressRootRenderLanes & updateLane) === updateLane\n          : (renderLanes & updateLane) === updateLane\n      ) {\n        0 !== updateLane &&\n          updateLane === currentEntangledLane &&\n          (didReadFromEntangledAsyncAction = !0);\n        null !== current &&\n          (current = current.next =\n            {\n              lane: 0,\n              tag: pendingQueue.tag,\n              payload: pendingQueue.payload,\n              callback: null,\n              next: null\n            });\n        a: {\n          var workInProgress = workInProgress$jscomp$0,\n            update = pendingQueue;\n          updateLane = props;\n          var instance = instance$jscomp$0;\n          switch (update.tag) {\n            case 1:\n              workInProgress = update.payload;\n              if (\"function\" === typeof workInProgress) {\n                newState = workInProgress.call(instance, newState, updateLane);\n                break a;\n              }\n              newState = workInProgress;\n              break a;\n            case 3:\n              workInProgress.flags = (workInProgress.flags & -65537) | 128;\n            case 0:\n              workInProgress = update.payload;\n              updateLane =\n                \"function\" === typeof workInProgress\n                  ? workInProgress.call(instance, newState, updateLane)\n                  : workInProgress;\n              if (null === updateLane || void 0 === updateLane) break a;\n              newState = assign({}, newState, updateLane);\n              break a;\n            case 2:\n              hasForceUpdate = !0;\n          }\n        }\n        updateLane = pendingQueue.callback;\n        null !== updateLane &&\n          ((workInProgress$jscomp$0.flags |= 64),\n          isHiddenUpdate && (workInProgress$jscomp$0.flags |= 8192),\n          (isHiddenUpdate = queue.callbacks),\n          null === isHiddenUpdate\n            ? (queue.callbacks = [updateLane])\n            : isHiddenUpdate.push(updateLane));\n      } else\n        (isHiddenUpdate = {\n          lane: updateLane,\n          tag: pendingQueue.tag,\n          payload: pendingQueue.payload,\n          callback: pendingQueue.callback,\n          next: null\n        }),\n          null === current\n            ? ((firstPendingUpdate = current = isHiddenUpdate),\n              (lastPendingUpdate = newState))\n            : (current = current.next = isHiddenUpdate),\n          (lastBaseUpdate |= updateLane);\n      pendingQueue = pendingQueue.next;\n      if (null === pendingQueue)\n        if (((pendingQueue = queue.shared.pending), null === pendingQueue))\n          break;\n        else\n          (isHiddenUpdate = pendingQueue),\n            (pendingQueue = isHiddenUpdate.next),\n            (isHiddenUpdate.next = null),\n            (queue.lastBaseUpdate = isHiddenUpdate),\n            (queue.shared.pending = null);\n    } while (1);\n    null === current && (lastPendingUpdate = newState);\n    queue.baseState = lastPendingUpdate;\n    queue.firstBaseUpdate = firstPendingUpdate;\n    queue.lastBaseUpdate = current;\n    null === firstBaseUpdate && (queue.shared.lanes = 0);\n    workInProgressRootSkippedLanes |= lastBaseUpdate;\n    workInProgress$jscomp$0.lanes = lastBaseUpdate;\n    workInProgress$jscomp$0.memoizedState = newState;\n  }\n}\nfunction callCallback(callback, context) {\n  if (\"function\" !== typeof callback)\n    throw Error(formatProdErrorMessage(191, callback));\n  callback.call(context);\n}\nfunction commitCallbacks(updateQueue, context) {\n  var callbacks = updateQueue.callbacks;\n  if (null !== callbacks)\n    for (\n      updateQueue.callbacks = null, updateQueue = 0;\n      updateQueue < callbacks.length;\n      updateQueue++\n    )\n      callCallback(callbacks[updateQueue], context);\n}\nvar currentTreeHiddenStackCursor = createCursor(null),\n  prevEntangledRenderLanesCursor = createCursor(0);\nfunction pushHiddenContext(fiber, context) {\n  fiber = entangledRenderLanes;\n  push(prevEntangledRenderLanesCursor, fiber);\n  push(currentTreeHiddenStackCursor, context);\n  entangledRenderLanes = fiber | context.baseLanes;\n}\nfunction reuseHiddenContextOnStack() {\n  push(prevEntangledRenderLanesCursor, entangledRenderLanes);\n  push(currentTreeHiddenStackCursor, currentTreeHiddenStackCursor.current);\n}\nfunction popHiddenContext() {\n  entangledRenderLanes = prevEntangledRenderLanesCursor.current;\n  pop(currentTreeHiddenStackCursor);\n  pop(prevEntangledRenderLanesCursor);\n}\nvar suspenseHandlerStackCursor = createCursor(null),\n  shellBoundary = null;\nfunction pushPrimaryTreeSuspenseHandler(handler) {\n  var current = handler.alternate;\n  push(suspenseStackCursor, suspenseStackCursor.current & 1);\n  push(suspenseHandlerStackCursor, handler);\n  null === shellBoundary &&\n    (null === current || null !== currentTreeHiddenStackCursor.current\n      ? (shellBoundary = handler)\n      : null !== current.memoizedState && (shellBoundary = handler));\n}\nfunction pushDehydratedActivitySuspenseHandler(fiber) {\n  push(suspenseStackCursor, suspenseStackCursor.current);\n  push(suspenseHandlerStackCursor, fiber);\n  null === shellBoundary && (shellBoundary = fiber);\n}\nfunction pushOffscreenSuspenseHandler(fiber) {\n  22 === fiber.tag\n    ? (push(suspenseStackCursor, suspenseStackCursor.current),\n      push(suspenseHandlerStackCursor, fiber),\n      null === shellBoundary && (shellBoundary = fiber))\n    : reuseSuspenseHandlerOnStack(fiber);\n}\nfunction reuseSuspenseHandlerOnStack() {\n  push(suspenseStackCursor, suspenseStackCursor.current);\n  push(suspenseHandlerStackCursor, suspenseHandlerStackCursor.current);\n}\nfunction popSuspenseHandler(fiber) {\n  pop(suspenseHandlerStackCursor);\n  shellBoundary === fiber && (shellBoundary = null);\n  pop(suspenseStackCursor);\n}\nvar suspenseStackCursor = createCursor(0);\nfunction findFirstSuspended(row) {\n  for (var node = row; null !== node; ) {\n    if (13 === node.tag) {\n      var state = node.memoizedState;\n      if (\n        null !== state &&\n        ((state = state.dehydrated),\n        null === state ||\n          isSuspenseInstancePending(state) ||\n          isSuspenseInstanceFallback(state))\n      )\n        return node;\n    } else if (\n      19 === node.tag &&\n      (\"forwards\" === node.memoizedProps.revealOrder ||\n        \"backwards\" === node.memoizedProps.revealOrder ||\n        \"unstable_legacy-backwards\" === node.memoizedProps.revealOrder ||\n        \"together\" === node.memoizedProps.revealOrder)\n    ) {\n      if (0 !== (node.flags & 128)) return node;\n    } else if (null !== node.child) {\n      node.child.return = node;\n      node = node.child;\n      continue;\n    }\n    if (node === row) break;\n    for (; null === node.sibling; ) {\n      if (null === node.return || node.return === row) return null;\n      node = node.return;\n    }\n    node.sibling.return = node.return;\n    node = node.sibling;\n  }\n  return null;\n}\nvar renderLanes = 0,\n  currentlyRenderingFiber = null,\n  currentHook = null,\n  workInProgressHook = null,\n  didScheduleRenderPhaseUpdate = !1,\n  didScheduleRenderPhaseUpdateDuringThisPass = !1,\n  shouldDoubleInvokeUserFnsInHooksDEV = !1,\n  localIdCounter = 0,\n  thenableIndexCounter = 0,\n  thenableState = null,\n  globalClientIdCounter = 0;\nfunction throwInvalidHookError() {\n  throw Error(formatProdErrorMessage(321));\n}\nfunction areHookInputsEqual(nextDeps, prevDeps) {\n  if (null === prevDeps) return !1;\n  for (var i = 0; i < prevDeps.length && i < nextDeps.length; i++)\n    if (!objectIs(nextDeps[i], prevDeps[i])) return !1;\n  return !0;\n}\nfunction renderWithHooks(\n  current,\n  workInProgress,\n  Component,\n  props,\n  secondArg,\n  nextRenderLanes\n) {\n  renderLanes = nextRenderLanes;\n  currentlyRenderingFiber = workInProgress;\n  workInProgress.memoizedState = null;\n  workInProgress.updateQueue = null;\n  workInProgress.lanes = 0;\n  ReactSharedInternals.H =\n    null === current || null === current.memoizedState\n      ? HooksDispatcherOnMount\n      : HooksDispatcherOnUpdate;\n  shouldDoubleInvokeUserFnsInHooksDEV = !1;\n  nextRenderLanes = Component(props, secondArg);\n  shouldDoubleInvokeUserFnsInHooksDEV = !1;\n  didScheduleRenderPhaseUpdateDuringThisPass &&\n    (nextRenderLanes = renderWithHooksAgain(\n      workInProgress,\n      Component,\n      props,\n      secondArg\n    ));\n  finishRenderingHooks(current);\n  return nextRenderLanes;\n}\nfunction finishRenderingHooks(current) {\n  ReactSharedInternals.H = ContextOnlyDispatcher;\n  var didRenderTooFewHooks = null !== currentHook && null !== currentHook.next;\n  renderLanes = 0;\n  workInProgressHook = currentHook = currentlyRenderingFiber = null;\n  didScheduleRenderPhaseUpdate = !1;\n  thenableIndexCounter = 0;\n  thenableState = null;\n  if (didRenderTooFewHooks) throw Error(formatProdErrorMessage(300));\n  null === current ||\n    didReceiveUpdate ||\n    ((current = current.dependencies),\n    null !== current &&\n      checkIfContextChanged(current) &&\n      (didReceiveUpdate = !0));\n}\nfunction renderWithHooksAgain(workInProgress, Component, props, secondArg) {\n  currentlyRenderingFiber = workInProgress;\n  var numberOfReRenders = 0;\n  do {\n    didScheduleRenderPhaseUpdateDuringThisPass && (thenableState = null);\n    thenableIndexCounter = 0;\n    didScheduleRenderPhaseUpdateDuringThisPass = !1;\n    if (25 <= numberOfReRenders) throw Error(formatProdErrorMessage(301));\n    numberOfReRenders += 1;\n    workInProgressHook = currentHook = null;\n    if (null != workInProgress.updateQueue) {\n      var children = workInProgress.updateQueue;\n      children.lastEffect = null;\n      children.events = null;\n      children.stores = null;\n      null != children.memoCache && (children.memoCache.index = 0);\n    }\n    ReactSharedInternals.H = HooksDispatcherOnRerender;\n    children = Component(props, secondArg);\n  } while (didScheduleRenderPhaseUpdateDuringThisPass);\n  return children;\n}\nfunction TransitionAwareHostComponent() {\n  var dispatcher = ReactSharedInternals.H,\n    maybeThenable = dispatcher.useState()[0];\n  maybeThenable =\n    \"function\" === typeof maybeThenable.then\n      ? useThenable(maybeThenable)\n      : maybeThenable;\n  dispatcher = dispatcher.useState()[0];\n  (null !== currentHook ? currentHook.memoizedState : null) !== dispatcher &&\n    (currentlyRenderingFiber.flags |= 1024);\n  return maybeThenable;\n}\nfunction checkDidRenderIdHook() {\n  var didRenderIdHook = 0 !== localIdCounter;\n  localIdCounter = 0;\n  return didRenderIdHook;\n}\nfunction bailoutHooks(current, workInProgress, lanes) {\n  workInProgress.updateQueue = current.updateQueue;\n  workInProgress.flags &= -2053;\n  current.lanes &= ~lanes;\n}\nfunction resetHooksOnUnwind(workInProgress) {\n  if (didScheduleRenderPhaseUpdate) {\n    for (\n      workInProgress = workInProgress.memoizedState;\n      null !== workInProgress;\n\n    ) {\n      var queue = workInProgress.queue;\n      null !== queue && (queue.pending = null);\n      workInProgress = workInProgress.next;\n    }\n    didScheduleRenderPhaseUpdate = !1;\n  }\n  renderLanes = 0;\n  workInProgressHook = currentHook = currentlyRenderingFiber = null;\n  didScheduleRenderPhaseUpdateDuringThisPass = !1;\n  thenableIndexCounter = localIdCounter = 0;\n  thenableState = null;\n}\nfunction mountWorkInProgressHook() {\n  var hook = {\n    memoizedState: null,\n    baseState: null,\n    baseQueue: null,\n    queue: null,\n    next: null\n  };\n  null === workInProgressHook\n    ? (currentlyRenderingFiber.memoizedState = workInProgressHook = hook)\n    : (workInProgressHook = workInProgressHook.next = hook);\n  return workInProgressHook;\n}\nfunction updateWorkInProgressHook() {\n  if (null === currentHook) {\n    var nextCurrentHook = currentlyRenderingFiber.alternate;\n    nextCurrentHook =\n      null !== nextCurrentHook ? nextCurrentHook.memoizedState : null;\n  } else nextCurrentHook = currentHook.next;\n  var nextWorkInProgressHook =\n    null === workInProgressHook\n      ? currentlyRenderingFiber.memoizedState\n      : workInProgressHook.next;\n  if (null !== nextWorkInProgressHook)\n    (workInProgressHook = nextWorkInProgressHook),\n      (currentHook = nextCurrentHook);\n  else {\n    if (null === nextCurrentHook) {\n      if (null === currentlyRenderingFiber.alternate)\n        throw Error(formatProdErrorMessage(467));\n      throw Error(formatProdErrorMessage(310));\n    }\n    currentHook = nextCurrentHook;\n    nextCurrentHook = {\n      memoizedState: currentHook.memoizedState,\n      baseState: currentHook.baseState,\n      baseQueue: currentHook.baseQueue,\n      queue: currentHook.queue,\n      next: null\n    };\n    null === workInProgressHook\n      ? (currentlyRenderingFiber.memoizedState = workInProgressHook =\n          nextCurrentHook)\n      : (workInProgressHook = workInProgressHook.next = nextCurrentHook);\n  }\n  return workInProgressHook;\n}\nfunction createFunctionComponentUpdateQueue() {\n  return { lastEffect: null, events: null, stores: null, memoCache: null };\n}\nfunction useThenable(thenable) {\n  var index = thenableIndexCounter;\n  thenableIndexCounter += 1;\n  null === thenableState && (thenableState = []);\n  thenable = trackUsedThenable(thenableState, thenable, index);\n  index = currentlyRenderingFiber;\n  null ===\n    (null === workInProgressHook\n      ? index.memoizedState\n      : workInProgressHook.next) &&\n    ((index = index.alternate),\n    (ReactSharedInternals.H =\n      null === index || null === index.memoizedState\n        ? HooksDispatcherOnMount\n        : HooksDispatcherOnUpdate));\n  return thenable;\n}\nfunction use(usable) {\n  if (null !== usable && \"object\" === typeof usable) {\n    if (\"function\" === typeof usable.then) return useThenable(usable);\n    if (usable.$$typeof === REACT_CONTEXT_TYPE) return readContext(usable);\n  }\n  throw Error(formatProdErrorMessage(438, String(usable)));\n}\nfunction useMemoCache(size) {\n  var memoCache = null,\n    updateQueue = currentlyRenderingFiber.updateQueue;\n  null !== updateQueue && (memoCache = updateQueue.memoCache);\n  if (null == memoCache) {\n    var current = currentlyRenderingFiber.alternate;\n    null !== current &&\n      ((current = current.updateQueue),\n      null !== current &&\n        ((current = current.memoCache),\n        null != current &&\n          (memoCache = {\n            data: current.data.map(function (array) {\n              return array.slice();\n            }),\n            index: 0\n          })));\n  }\n  null == memoCache && (memoCache = { data: [], index: 0 });\n  null === updateQueue &&\n    ((updateQueue = createFunctionComponentUpdateQueue()),\n    (currentlyRenderingFiber.updateQueue = updateQueue));\n  updateQueue.memoCache = memoCache;\n  updateQueue = memoCache.data[memoCache.index];\n  if (void 0 === updateQueue)\n    for (\n      updateQueue = memoCache.data[memoCache.index] = Array(size), current = 0;\n      current < size;\n      current++\n    )\n      updateQueue[current] = REACT_MEMO_CACHE_SENTINEL;\n  memoCache.index++;\n  return updateQueue;\n}\nfunction basicStateReducer(state, action) {\n  return \"function\" === typeof action ? action(state) : action;\n}\nfunction updateReducer(reducer) {\n  var hook = updateWorkInProgressHook();\n  return updateReducerImpl(hook, currentHook, reducer);\n}\nfunction updateReducerImpl(hook, current, reducer) {\n  var queue = hook.queue;\n  if (null === queue) throw Error(formatProdErrorMessage(311));\n  queue.lastRenderedReducer = reducer;\n  var baseQueue = hook.baseQueue,\n    pendingQueue = queue.pending;\n  if (null !== pendingQueue) {\n    if (null !== baseQueue) {\n      var baseFirst = baseQueue.next;\n      baseQueue.next = pendingQueue.next;\n      pendingQueue.next = baseFirst;\n    }\n    current.baseQueue = baseQueue = pendingQueue;\n    queue.pending = null;\n  }\n  pendingQueue = hook.baseState;\n  if (null === baseQueue) hook.memoizedState = pendingQueue;\n  else {\n    current = baseQueue.next;\n    var newBaseQueueFirst = (baseFirst = null),\n      newBaseQueueLast = null,\n      update = current,\n      didReadFromEntangledAsyncAction$60 = !1;\n    do {\n      var updateLane = update.lane & -536870913;\n      if (\n        updateLane !== update.lane\n          ? (workInProgressRootRenderLanes & updateLane) === updateLane\n          : (renderLanes & updateLane) === updateLane\n      ) {\n        var revertLane = update.revertLane;\n        if (0 === revertLane)\n          null !== newBaseQueueLast &&\n            (newBaseQueueLast = newBaseQueueLast.next =\n              {\n                lane: 0,\n                revertLane: 0,\n                gesture: null,\n                action: update.action,\n                hasEagerState: update.hasEagerState,\n                eagerState: update.eagerState,\n                next: null\n              }),\n            updateLane === currentEntangledLane &&\n              (didReadFromEntangledAsyncAction$60 = !0);\n        else if ((renderLanes & revertLane) === revertLane) {\n          update = update.next;\n          revertLane === currentEntangledLane &&\n            (didReadFromEntangledAsyncAction$60 = !0);\n          continue;\n        } else\n          (updateLane = {\n            lane: 0,\n            revertLane: update.revertLane,\n            gesture: null,\n            action: update.action,\n            hasEagerState: update.hasEagerState,\n            eagerState: update.eagerState,\n            next: null\n          }),\n            null === newBaseQueueLast\n              ? ((newBaseQueueFirst = newBaseQueueLast = updateLane),\n                (baseFirst = pendingQueue))\n              : (newBaseQueueLast = newBaseQueueLast.next = updateLane),\n            (currentlyRenderingFiber.lanes |= revertLane),\n            (workInProgressRootSkippedLanes |= revertLane);\n        updateLane = update.action;\n        shouldDoubleInvokeUserFnsInHooksDEV &&\n          reducer(pendingQueue, updateLane);\n        pendingQueue = update.hasEagerState\n          ? update.eagerState\n          : reducer(pendingQueue, updateLane);\n      } else\n        (revertLane = {\n          lane: updateLane,\n          revertLane: update.revertLane,\n          gesture: update.gesture,\n          action: update.action,\n          hasEagerState: update.hasEagerState,\n          eagerState: update.eagerState,\n          next: null\n        }),\n          null === newBaseQueueLast\n            ? ((newBaseQueueFirst = newBaseQueueLast = revertLane),\n              (baseFirst = pendingQueue))\n            : (newBaseQueueLast = newBaseQueueLast.next = revertLane),\n          (currentlyRenderingFiber.lanes |= updateLane),\n          (workInProgressRootSkippedLanes |= updateLane);\n      update = update.next;\n    } while (null !== update && update !== current);\n    null === newBaseQueueLast\n      ? (baseFirst = pendingQueue)\n      : (newBaseQueueLast.next = newBaseQueueFirst);\n    if (\n      !objectIs(pendingQueue, hook.memoizedState) &&\n      ((didReceiveUpdate = !0),\n      didReadFromEntangledAsyncAction$60 &&\n        ((reducer = currentEntangledActionThenable), null !== reducer))\n    )\n      throw reducer;\n    hook.memoizedState = pendingQueue;\n    hook.baseState = baseFirst;\n    hook.baseQueue = newBaseQueueLast;\n    queue.lastRenderedState = pendingQueue;\n  }\n  null === baseQueue && (queue.lanes = 0);\n  return [hook.memoizedState, queue.dispatch];\n}\nfunction rerenderReducer(reducer) {\n  var hook = updateWorkInProgressHook(),\n    queue = hook.queue;\n  if (null === queue) throw Error(formatProdErrorMessage(311));\n  queue.lastRenderedReducer = reducer;\n  var dispatch = queue.dispatch,\n    lastRenderPhaseUpdate = queue.pending,\n    newState = hook.memoizedState;\n  if (null !== lastRenderPhaseUpdate) {\n    queue.pending = null;\n    var update = (lastRenderPhaseUpdate = lastRenderPhaseUpdate.next);\n    do (newState = reducer(newState, update.action)), (update = update.next);\n    while (update !== lastRenderPhaseUpdate);\n    objectIs(newState, hook.memoizedState) || (didReceiveUpdate = !0);\n    hook.memoizedState = newState;\n    null === hook.baseQueue && (hook.baseState = newState);\n    queue.lastRenderedState = newState;\n  }\n  return [newState, dispatch];\n}\nfunction updateSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) {\n  var fiber = currentlyRenderingFiber,\n    hook = updateWorkInProgressHook(),\n    isHydrating$jscomp$0 = isHydrating;\n  if (isHydrating$jscomp$0) {\n    if (void 0 === getServerSnapshot) throw Error(formatProdErrorMessage(407));\n    getServerSnapshot = getServerSnapshot();\n  } else getServerSnapshot = getSnapshot();\n  var snapshotChanged = !objectIs(\n    (currentHook || hook).memoizedState,\n    getServerSnapshot\n  );\n  snapshotChanged &&\n    ((hook.memoizedState = getServerSnapshot), (didReceiveUpdate = !0));\n  hook = hook.queue;\n  updateEffect(subscribeToStore.bind(null, fiber, hook, subscribe), [\n    subscribe\n  ]);\n  if (\n    hook.getSnapshot !== getSnapshot ||\n    snapshotChanged ||\n    (null !== workInProgressHook && workInProgressHook.memoizedState.tag & 1)\n  ) {\n    fiber.flags |= 2048;\n    pushSimpleEffect(\n      9,\n      { destroy: void 0 },\n      updateStoreInstance.bind(\n        null,\n        fiber,\n        hook,\n        getServerSnapshot,\n        getSnapshot\n      ),\n      null\n    );\n    if (null === workInProgressRoot) throw Error(formatProdErrorMessage(349));\n    isHydrating$jscomp$0 ||\n      0 !== (renderLanes & 127) ||\n      pushStoreConsistencyCheck(fiber, getSnapshot, getServerSnapshot);\n  }\n  return getServerSnapshot;\n}\nfunction pushStoreConsistencyCheck(fiber, getSnapshot, renderedSnapshot) {\n  fiber.flags |= 16384;\n  fiber = { getSnapshot: getSnapshot, value: renderedSnapshot };\n  getSnapshot = currentlyRenderingFiber.updateQueue;\n  null === getSnapshot\n    ? ((getSnapshot = createFunctionComponentUpdateQueue()),\n      (currentlyRenderingFiber.updateQueue = getSnapshot),\n      (getSnapshot.stores = [fiber]))\n    : ((renderedSnapshot = getSnapshot.stores),\n      null === renderedSnapshot\n        ? (getSnapshot.stores = [fiber])\n        : renderedSnapshot.push(fiber));\n}\nfunction updateStoreInstance(fiber, inst, nextSnapshot, getSnapshot) {\n  inst.value = nextSnapshot;\n  inst.getSnapshot = getSnapshot;\n  checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);\n}\nfunction subscribeToStore(fiber, inst, subscribe) {\n  return subscribe(function () {\n    checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);\n  });\n}\nfunction checkIfSnapshotChanged(inst) {\n  var latestGetSnapshot = inst.getSnapshot;\n  inst = inst.value;\n  try {\n    var nextValue = latestGetSnapshot();\n    return !objectIs(inst, nextValue);\n  } catch (error) {\n    return !0;\n  }\n}\nfunction forceStoreRerender(fiber) {\n  var root = enqueueConcurrentRenderForLane(fiber, 2);\n  null !== root && scheduleUpdateOnFiber(root, fiber, 2);\n}\nfunction mountStateImpl(initialState) {\n  var hook = mountWorkInProgressHook();\n  if (\"function\" === typeof initialState) {\n    var initialStateInitializer = initialState;\n    initialState = initialStateInitializer();\n    if (shouldDoubleInvokeUserFnsInHooksDEV) {\n      setIsStrictModeForDevtools(!0);\n      try {\n        initialStateInitializer();\n      } finally {\n        setIsStrictModeForDevtools(!1);\n      }\n    }\n  }\n  hook.memoizedState = hook.baseState = initialState;\n  hook.queue = {\n    pending: null,\n    lanes: 0,\n    dispatch: null,\n    lastRenderedReducer: basicStateReducer,\n    lastRenderedState: initialState\n  };\n  return hook;\n}\nfunction updateOptimisticImpl(hook, current, passthrough, reducer) {\n  hook.baseState = passthrough;\n  return updateReducerImpl(\n    hook,\n    currentHook,\n    \"function\" === typeof reducer ? reducer : basicStateReducer\n  );\n}\nfunction dispatchActionState(\n  fiber,\n  actionQueue,\n  setPendingState,\n  setState,\n  payload\n) {\n  if (isRenderPhaseUpdate(fiber)) throw Error(formatProdErrorMessage(485));\n  fiber = actionQueue.action;\n  if (null !== fiber) {\n    var actionNode = {\n      payload: payload,\n      action: fiber,\n      next: null,\n      isTransition: !0,\n      status: \"pending\",\n      value: null,\n      reason: null,\n      listeners: [],\n      then: function (listener) {\n        actionNode.listeners.push(listener);\n      }\n    };\n    null !== ReactSharedInternals.T\n      ? setPendingState(!0)\n      : (actionNode.isTransition = !1);\n    setState(actionNode);\n    setPendingState = actionQueue.pending;\n    null === setPendingState\n      ? ((actionNode.next = actionQueue.pending = actionNode),\n        runActionStateAction(actionQueue, actionNode))\n      : ((actionNode.next = setPendingState.next),\n        (actionQueue.pending = setPendingState.next = actionNode));\n  }\n}\nfunction runActionStateAction(actionQueue, node) {\n  var action = node.action,\n    payload = node.payload,\n    prevState = actionQueue.state;\n  if (node.isTransition) {\n    var prevTransition = ReactSharedInternals.T,\n      currentTransition = {};\n    ReactSharedInternals.T = currentTransition;\n    try {\n      var returnValue = action(prevState, payload),\n        onStartTransitionFinish = ReactSharedInternals.S;\n      null !== onStartTransitionFinish &&\n        onStartTransitionFinish(currentTransition, returnValue);\n      handleActionReturnValue(actionQueue, node, returnValue);\n    } catch (error) {\n      onActionError(actionQueue, node, error);\n    } finally {\n      null !== prevTransition &&\n        null !== currentTransition.types &&\n        (prevTransition.types = currentTransition.types),\n        (ReactSharedInternals.T = prevTransition);\n    }\n  } else\n    try {\n      (prevTransition = action(prevState, payload)),\n        handleActionReturnValue(actionQueue, node, prevTransition);\n    } catch (error$66) {\n      onActionError(actionQueue, node, error$66);\n    }\n}\nfunction handleActionReturnValue(actionQueue, node, returnValue) {\n  null !== returnValue &&\n  \"object\" === typeof returnValue &&\n  \"function\" === typeof returnValue.then\n    ? returnValue.then(\n        function (nextState) {\n          onActionSuccess(actionQueue, node, nextState);\n        },\n        function (error) {\n          return onActionError(actionQueue, node, error);\n        }\n      )\n    : onActionSuccess(actionQueue, node, returnValue);\n}\nfunction onActionSuccess(actionQueue, actionNode, nextState) {\n  actionNode.status = \"fulfilled\";\n  actionNode.value = nextState;\n  notifyActionListeners(actionNode);\n  actionQueue.state = nextState;\n  actionNode = actionQueue.pending;\n  null !== actionNode &&\n    ((nextState = actionNode.next),\n    nextState === actionNode\n      ? (actionQueue.pending = null)\n      : ((nextState = nextState.next),\n        (actionNode.next = nextState),\n        runActionStateAction(actionQueue, nextState)));\n}\nfunction onActionError(actionQueue, actionNode, error) {\n  var last = actionQueue.pending;\n  actionQueue.pending = null;\n  if (null !== last) {\n    last = last.next;\n    do\n      (actionNode.status = \"rejected\"),\n        (actionNode.reason = error),\n        notifyActionListeners(actionNode),\n        (actionNode = actionNode.next);\n    while (actionNode !== last);\n  }\n  actionQueue.action = null;\n}\nfunction notifyActionListeners(actionNode) {\n  actionNode = actionNode.listeners;\n  for (var i = 0; i < actionNode.length; i++) (0, actionNode[i])();\n}\nfunction actionStateReducer(oldState, newState) {\n  return newState;\n}\nfunction mountActionState(action, initialStateProp) {\n  if (isHydrating) {\n    var ssrFormState = workInProgressRoot.formState;\n    if (null !== ssrFormState) {\n      a: {\n        var JSCompiler_inline_result = currentlyRenderingFiber;\n        if (isHydrating) {\n          if (nextHydratableInstance) {\n            b: {\n              var JSCompiler_inline_result$jscomp$0 = nextHydratableInstance;\n              for (\n                var inRootOrSingleton = rootOrSingletonContext;\n                8 !== JSCompiler_inline_result$jscomp$0.nodeType;\n\n              ) {\n                if (!inRootOrSingleton) {\n                  JSCompiler_inline_result$jscomp$0 = null;\n                  break b;\n                }\n                JSCompiler_inline_result$jscomp$0 = getNextHydratable(\n                  JSCompiler_inline_result$jscomp$0.nextSibling\n                );\n                if (null === JSCompiler_inline_result$jscomp$0) {\n                  JSCompiler_inline_result$jscomp$0 = null;\n                  break b;\n                }\n              }\n              inRootOrSingleton = JSCompiler_inline_result$jscomp$0.data;\n              JSCompiler_inline_result$jscomp$0 =\n                \"F!\" === inRootOrSingleton || \"F\" === inRootOrSingleton\n                  ? JSCompiler_inline_result$jscomp$0\n                  : null;\n            }\n            if (JSCompiler_inline_result$jscomp$0) {\n              nextHydratableInstance = getNextHydratable(\n                JSCompiler_inline_result$jscomp$0.nextSibling\n              );\n              JSCompiler_inline_result =\n                \"F!\" === JSCompiler_inline_result$jscomp$0.data;\n              break a;\n            }\n          }\n          throwOnHydrationMismatch(JSCompiler_inline_result);\n        }\n        JSCompiler_inline_result = !1;\n      }\n      JSCompiler_inline_result && (initialStateProp = ssrFormState[0]);\n    }\n  }\n  ssrFormState = mountWorkInProgressHook();\n  ssrFormState.memoizedState = ssrFormState.baseState = initialStateProp;\n  JSCompiler_inline_result = {\n    pending: null,\n    lanes: 0,\n    dispatch: null,\n    lastRenderedReducer: actionStateReducer,\n    lastRenderedState: initialStateProp\n  };\n  ssrFormState.queue = JSCompiler_inline_result;\n  ssrFormState = dispatchSetState.bind(\n    null,\n    currentlyRenderingFiber,\n    JSCompiler_inline_result\n  );\n  JSCompiler_inline_result.dispatch = ssrFormState;\n  JSCompiler_inline_result = mountStateImpl(!1);\n  inRootOrSingleton = dispatchOptimisticSetState.bind(\n    null,\n    currentlyRenderingFiber,\n    !1,\n    JSCompiler_inline_result.queue\n  );\n  JSCompiler_inline_result = mountWorkInProgressHook();\n  JSCompiler_inline_result$jscomp$0 = {\n    state: initialStateProp,\n    dispatch: null,\n    action: action,\n    pending: null\n  };\n  JSCompiler_inline_result.queue = JSCompiler_inline_result$jscomp$0;\n  ssrFormState = dispatchActionState.bind(\n    null,\n    currentlyRenderingFiber,\n    JSCompiler_inline_result$jscomp$0,\n    inRootOrSingleton,\n    ssrFormState\n  );\n  JSCompiler_inline_result$jscomp$0.dispatch = ssrFormState;\n  JSCompiler_inline_result.memoizedState = action;\n  return [initialStateProp, ssrFormState, !1];\n}\nfunction updateActionState(action) {\n  var stateHook = updateWorkInProgressHook();\n  return updateActionStateImpl(stateHook, currentHook, action);\n}\nfunction updateActionStateImpl(stateHook, currentStateHook, action) {\n  currentStateHook = updateReducerImpl(\n    stateHook,\n    currentStateHook,\n    actionStateReducer\n  )[0];\n  stateHook = updateReducer(basicStateReducer)[0];\n  if (\n    \"object\" === typeof currentStateHook &&\n    null !== currentStateHook &&\n    \"function\" === typeof currentStateHook.then\n  )\n    try {\n      var state = useThenable(currentStateHook);\n    } catch (x) {\n      if (x === SuspenseException) throw SuspenseActionException;\n      throw x;\n    }\n  else state = currentStateHook;\n  currentStateHook = updateWorkInProgressHook();\n  var actionQueue = currentStateHook.queue,\n    dispatch = actionQueue.dispatch;\n  action !== currentStateHook.memoizedState &&\n    ((currentlyRenderingFiber.flags |= 2048),\n    pushSimpleEffect(\n      9,\n      { destroy: void 0 },\n      actionStateActionEffect.bind(null, actionQueue, action),\n      null\n    ));\n  return [state, dispatch, stateHook];\n}\nfunction actionStateActionEffect(actionQueue, action) {\n  actionQueue.action = action;\n}\nfunction rerenderActionState(action) {\n  var stateHook = updateWorkInProgressHook(),\n    currentStateHook = currentHook;\n  if (null !== currentStateHook)\n    return updateActionStateImpl(stateHook, currentStateHook, action);\n  updateWorkInProgressHook();\n  stateHook = stateHook.memoizedState;\n  currentStateHook = updateWorkInProgressHook();\n  var dispatch = currentStateHook.queue.dispatch;\n  currentStateHook.memoizedState = action;\n  return [stateHook, dispatch, !1];\n}\nfunction pushSimpleEffect(tag, inst, create, deps) {\n  tag = { tag: tag, create: create, deps: deps, inst: inst, next: null };\n  inst = currentlyRenderingFiber.updateQueue;\n  null === inst &&\n    ((inst = createFunctionComponentUpdateQueue()),\n    (currentlyRenderingFiber.updateQueue = inst));\n  create = inst.lastEffect;\n  null === create\n    ? (inst.lastEffect = tag.next = tag)\n    : ((deps = create.next),\n      (create.next = tag),\n      (tag.next = deps),\n      (inst.lastEffect = tag));\n  return tag;\n}\nfunction updateRef() {\n  return updateWorkInProgressHook().memoizedState;\n}\nfunction mountEffectImpl(fiberFlags, hookFlags, create, deps) {\n  var hook = mountWorkInProgressHook();\n  currentlyRenderingFiber.flags |= fiberFlags;\n  hook.memoizedState = pushSimpleEffect(\n    1 | hookFlags,\n    { destroy: void 0 },\n    create,\n    void 0 === deps ? null : deps\n  );\n}\nfunction updateEffectImpl(fiberFlags, hookFlags, create, deps) {\n  var hook = updateWorkInProgressHook();\n  deps = void 0 === deps ? null : deps;\n  var inst = hook.memoizedState.inst;\n  null !== currentHook &&\n  null !== deps &&\n  areHookInputsEqual(deps, currentHook.memoizedState.deps)\n    ? (hook.memoizedState = pushSimpleEffect(hookFlags, inst, create, deps))\n    : ((currentlyRenderingFiber.flags |= fiberFlags),\n      (hook.memoizedState = pushSimpleEffect(\n        1 | hookFlags,\n        inst,\n        create,\n        deps\n      )));\n}\nfunction mountEffect(create, deps) {\n  mountEffectImpl(8390656, 8, create, deps);\n}\nfunction updateEffect(create, deps) {\n  updateEffectImpl(2048, 8, create, deps);\n}\nfunction useEffectEventImpl(payload) {\n  currentlyRenderingFiber.flags |= 4;\n  var componentUpdateQueue = currentlyRenderingFiber.updateQueue;\n  if (null === componentUpdateQueue)\n    (componentUpdateQueue = createFunctionComponentUpdateQueue()),\n      (currentlyRenderingFiber.updateQueue = componentUpdateQueue),\n      (componentUpdateQueue.events = [payload]);\n  else {\n    var events = componentUpdateQueue.events;\n    null === events\n      ? (componentUpdateQueue.events = [payload])\n      : events.push(payload);\n  }\n}\nfunction updateEvent(callback) {\n  var ref = updateWorkInProgressHook().memoizedState;\n  useEffectEventImpl({ ref: ref, nextImpl: callback });\n  return function () {\n    if (0 !== (executionContext & 2)) throw Error(formatProdErrorMessage(440));\n    return ref.impl.apply(void 0, arguments);\n  };\n}\nfunction updateInsertionEffect(create, deps) {\n  return updateEffectImpl(4, 2, create, deps);\n}\nfunction updateLayoutEffect(create, deps) {\n  return updateEffectImpl(4, 4, create, deps);\n}\nfunction imperativeHandleEffect(create, ref) {\n  if (\"function\" === typeof ref) {\n    create = create();\n    var refCleanup = ref(create);\n    return function () {\n      \"function\" === typeof refCleanup ? refCleanup() : ref(null);\n    };\n  }\n  if (null !== ref && void 0 !== ref)\n    return (\n      (create = create()),\n      (ref.current = create),\n      function () {\n        ref.current = null;\n      }\n    );\n}\nfunction updateImperativeHandle(ref, create, deps) {\n  deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;\n  updateEffectImpl(4, 4, imperativeHandleEffect.bind(null, create, ref), deps);\n}\nfunction mountDebugValue() {}\nfunction updateCallback(callback, deps) {\n  var hook = updateWorkInProgressHook();\n  deps = void 0 === deps ? null : deps;\n  var prevState = hook.memoizedState;\n  if (null !== deps && areHookInputsEqual(deps, prevState[1]))\n    return prevState[0];\n  hook.memoizedState = [callback, deps];\n  return callback;\n}\nfunction updateMemo(nextCreate, deps) {\n  var hook = updateWorkInProgressHook();\n  deps = void 0 === deps ? null : deps;\n  var prevState = hook.memoizedState;\n  if (null !== deps && areHookInputsEqual(deps, prevState[1]))\n    return prevState[0];\n  prevState = nextCreate();\n  if (shouldDoubleInvokeUserFnsInHooksDEV) {\n    setIsStrictModeForDevtools(!0);\n    try {\n      nextCreate();\n    } finally {\n      setIsStrictModeForDevtools(!1);\n    }\n  }\n  hook.memoizedState = [prevState, deps];\n  return prevState;\n}\nfunction mountDeferredValueImpl(hook, value, initialValue) {\n  if (\n    void 0 === initialValue ||\n    (0 !== (renderLanes & 1073741824) &&\n      0 === (workInProgressRootRenderLanes & 261930))\n  )\n    return (hook.memoizedState = value);\n  hook.memoizedState = initialValue;\n  hook = requestDeferredLane();\n  currentlyRenderingFiber.lanes |= hook;\n  workInProgressRootSkippedLanes |= hook;\n  return initialValue;\n}\nfunction updateDeferredValueImpl(hook, prevValue, value, initialValue) {\n  if (objectIs(value, prevValue)) return value;\n  if (null !== currentTreeHiddenStackCursor.current)\n    return (\n      (hook = mountDeferredValueImpl(hook, value, initialValue)),\n      objectIs(hook, prevValue) || (didReceiveUpdate = !0),\n      hook\n    );\n  if (\n    0 === (renderLanes & 42) ||\n    (0 !== (renderLanes & 1073741824) &&\n      0 === (workInProgressRootRenderLanes & 261930))\n  )\n    return (didReceiveUpdate = !0), (hook.memoizedState = value);\n  hook = requestDeferredLane();\n  currentlyRenderingFiber.lanes |= hook;\n  workInProgressRootSkippedLanes |= hook;\n  return prevValue;\n}\nfunction startTransition(fiber, queue, pendingState, finishedState, callback) {\n  var previousPriority = ReactDOMSharedInternals.p;\n  ReactDOMSharedInternals.p =\n    0 !== previousPriority && 8 > previousPriority ? previousPriority : 8;\n  var prevTransition = ReactSharedInternals.T,\n    currentTransition = {};\n  ReactSharedInternals.T = currentTransition;\n  dispatchOptimisticSetState(fiber, !1, queue, pendingState);\n  try {\n    var returnValue = callback(),\n      onStartTransitionFinish = ReactSharedInternals.S;\n    null !== onStartTransitionFinish &&\n      onStartTransitionFinish(currentTransition, returnValue);\n    if (\n      null !== returnValue &&\n      \"object\" === typeof returnValue &&\n      \"function\" === typeof returnValue.then\n    ) {\n      var thenableForFinishedState = chainThenableValue(\n        returnValue,\n        finishedState\n      );\n      dispatchSetStateInternal(\n        fiber,\n        queue,\n        thenableForFinishedState,\n        requestUpdateLane(fiber)\n      );\n    } else\n      dispatchSetStateInternal(\n        fiber,\n        queue,\n        finishedState,\n        requestUpdateLane(fiber)\n      );\n  } catch (error) {\n    dispatchSetStateInternal(\n      fiber,\n      queue,\n      { then: function () {}, status: \"rejected\", reason: error },\n      requestUpdateLane()\n    );\n  } finally {\n    (ReactDOMSharedInternals.p = previousPriority),\n      null !== prevTransition &&\n        null !== currentTransition.types &&\n        (prevTransition.types = currentTransition.types),\n      (ReactSharedInternals.T = prevTransition);\n  }\n}\nfunction noop() {}\nfunction startHostTransition(formFiber, pendingState, action, formData) {\n  if (5 !== formFiber.tag) throw Error(formatProdErrorMessage(476));\n  var queue = ensureFormComponentIsStateful(formFiber).queue;\n  startTransition(\n    formFiber,\n    queue,\n    pendingState,\n    sharedNotPendingObject,\n    null === action\n      ? noop\n      : function () {\n          requestFormReset$1(formFiber);\n          return action(formData);\n        }\n  );\n}\nfunction ensureFormComponentIsStateful(formFiber) {\n  var existingStateHook = formFiber.memoizedState;\n  if (null !== existingStateHook) return existingStateHook;\n  existingStateHook = {\n    memoizedState: sharedNotPendingObject,\n    baseState: sharedNotPendingObject,\n    baseQueue: null,\n    queue: {\n      pending: null,\n      lanes: 0,\n      dispatch: null,\n      lastRenderedReducer: basicStateReducer,\n      lastRenderedState: sharedNotPendingObject\n    },\n    next: null\n  };\n  var initialResetState = {};\n  existingStateHook.next = {\n    memoizedState: initialResetState,\n    baseState: initialResetState,\n    baseQueue: null,\n    queue: {\n      pending: null,\n      lanes: 0,\n      dispatch: null,\n      lastRenderedReducer: basicStateReducer,\n      lastRenderedState: initialResetState\n    },\n    next: null\n  };\n  formFiber.memoizedState = existingStateHook;\n  formFiber = formFiber.alternate;\n  null !== formFiber && (formFiber.memoizedState = existingStateHook);\n  return existingStateHook;\n}\nfunction requestFormReset$1(formFiber) {\n  var stateHook = ensureFormComponentIsStateful(formFiber);\n  null === stateHook.next && (stateHook = formFiber.alternate.memoizedState);\n  dispatchSetStateInternal(\n    formFiber,\n    stateHook.next.queue,\n    {},\n    requestUpdateLane()\n  );\n}\nfunction useHostTransitionStatus() {\n  return readContext(HostTransitionContext);\n}\nfunction updateId() {\n  return updateWorkInProgressHook().memoizedState;\n}\nfunction updateRefresh() {\n  return updateWorkInProgressHook().memoizedState;\n}\nfunction refreshCache(fiber) {\n  for (var provider = fiber.return; null !== provider; ) {\n    switch (provider.tag) {\n      case 24:\n      case 3:\n        var lane = requestUpdateLane();\n        fiber = createUpdate(lane);\n        var root$69 = enqueueUpdate(provider, fiber, lane);\n        null !== root$69 &&\n          (scheduleUpdateOnFiber(root$69, provider, lane),\n          entangleTransitions(root$69, provider, lane));\n        provider = { cache: createCache() };\n        fiber.payload = provider;\n        return;\n    }\n    provider = provider.return;\n  }\n}\nfunction dispatchReducerAction(fiber, queue, action) {\n  var lane = requestUpdateLane();\n  action = {\n    lane: lane,\n    revertLane: 0,\n    gesture: null,\n    action: action,\n    hasEagerState: !1,\n    eagerState: null,\n    next: null\n  };\n  isRenderPhaseUpdate(fiber)\n    ? enqueueRenderPhaseUpdate(queue, action)\n    : ((action = enqueueConcurrentHookUpdate(fiber, queue, action, lane)),\n      null !== action &&\n        (scheduleUpdateOnFiber(action, fiber, lane),\n        entangleTransitionUpdate(action, queue, lane)));\n}\nfunction dispatchSetState(fiber, queue, action) {\n  var lane = requestUpdateLane();\n  dispatchSetStateInternal(fiber, queue, action, lane);\n}\nfunction dispatchSetStateInternal(fiber, queue, action, lane) {\n  var update = {\n    lane: lane,\n    revertLane: 0,\n    gesture: null,\n    action: action,\n    hasEagerState: !1,\n    eagerState: null,\n    next: null\n  };\n  if (isRenderPhaseUpdate(fiber)) enqueueRenderPhaseUpdate(queue, update);\n  else {\n    var alternate = fiber.alternate;\n    if (\n      0 === fiber.lanes &&\n      (null === alternate || 0 === alternate.lanes) &&\n      ((alternate = queue.lastRenderedReducer), null !== alternate)\n    )\n      try {\n        var currentState = queue.lastRenderedState,\n          eagerState = alternate(currentState, action);\n        update.hasEagerState = !0;\n        update.eagerState = eagerState;\n        if (objectIs(eagerState, currentState))\n          return (\n            enqueueUpdate$1(fiber, queue, update, 0),\n            null === workInProgressRoot && finishQueueingConcurrentUpdates(),\n            !1\n          );\n      } catch (error) {\n      } finally {\n      }\n    action = enqueueConcurrentHookUpdate(fiber, queue, update, lane);\n    if (null !== action)\n      return (\n        scheduleUpdateOnFiber(action, fiber, lane),\n        entangleTransitionUpdate(action, queue, lane),\n        !0\n      );\n  }\n  return !1;\n}\nfunction dispatchOptimisticSetState(fiber, throwIfDuringRender, queue, action) {\n  action = {\n    lane: 2,\n    revertLane: requestTransitionLane(),\n    gesture: null,\n    action: action,\n    hasEagerState: !1,\n    eagerState: null,\n    next: null\n  };\n  if (isRenderPhaseUpdate(fiber)) {\n    if (throwIfDuringRender) throw Error(formatProdErrorMessage(479));\n  } else\n    (throwIfDuringRender = enqueueConcurrentHookUpdate(\n      fiber,\n      queue,\n      action,\n      2\n    )),\n      null !== throwIfDuringRender &&\n        scheduleUpdateOnFiber(throwIfDuringRender, fiber, 2);\n}\nfunction isRenderPhaseUpdate(fiber) {\n  var alternate = fiber.alternate;\n  return (\n    fiber === currentlyRenderingFiber ||\n    (null !== alternate && alternate === currentlyRenderingFiber)\n  );\n}\nfunction enqueueRenderPhaseUpdate(queue, update) {\n  didScheduleRenderPhaseUpdateDuringThisPass = didScheduleRenderPhaseUpdate =\n    !0;\n  var pending = queue.pending;\n  null === pending\n    ? (update.next = update)\n    : ((update.next = pending.next), (pending.next = update));\n  queue.pending = update;\n}\nfunction entangleTransitionUpdate(root, queue, lane) {\n  if (0 !== (lane & 4194048)) {\n    var queueLanes = queue.lanes;\n    queueLanes &= root.pendingLanes;\n    lane |= queueLanes;\n    queue.lanes = lane;\n    markRootEntangled(root, lane);\n  }\n}\nvar ContextOnlyDispatcher = {\n  readContext: readContext,\n  use: use,\n  useCallback: throwInvalidHookError,\n  useContext: throwInvalidHookError,\n  useEffect: throwInvalidHookError,\n  useImperativeHandle: throwInvalidHookError,\n  useLayoutEffect: throwInvalidHookError,\n  useInsertionEffect: throwInvalidHookError,\n  useMemo: throwInvalidHookError,\n  useReducer: throwInvalidHookError,\n  useRef: throwInvalidHookError,\n  useState: throwInvalidHookError,\n  useDebugValue: throwInvalidHookError,\n  useDeferredValue: throwInvalidHookError,\n  useTransition: throwInvalidHookError,\n  useSyncExternalStore: throwInvalidHookError,\n  useId: throwInvalidHookError,\n  useHostTransitionStatus: throwInvalidHookError,\n  useFormState: throwInvalidHookError,\n  useActionState: throwInvalidHookError,\n  useOptimistic: throwInvalidHookError,\n  useMemoCache: throwInvalidHookError,\n  useCacheRefresh: throwInvalidHookError\n};\nContextOnlyDispatcher.useEffectEvent = throwInvalidHookError;\nvar HooksDispatcherOnMount = {\n    readContext: readContext,\n    use: use,\n    useCallback: function (callback, deps) {\n      mountWorkInProgressHook().memoizedState = [\n        callback,\n        void 0 === deps ? null : deps\n      ];\n      return callback;\n    },\n    useContext: readContext,\n    useEffect: mountEffect,\n    useImperativeHandle: function (ref, create, deps) {\n      deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;\n      mountEffectImpl(\n        4194308,\n        4,\n        imperativeHandleEffect.bind(null, create, ref),\n        deps\n      );\n    },\n    useLayoutEffect: function (create, deps) {\n      return mountEffectImpl(4194308, 4, create, deps);\n    },\n    useInsertionEffect: function (create, deps) {\n      mountEffectImpl(4, 2, create, deps);\n    },\n    useMemo: function (nextCreate, deps) {\n      var hook = mountWorkInProgressHook();\n      deps = void 0 === deps ? null : deps;\n      var nextValue = nextCreate();\n      if (shouldDoubleInvokeUserFnsInHooksDEV) {\n        setIsStrictModeForDevtools(!0);\n        try {\n          nextCreate();\n        } finally {\n          setIsStrictModeForDevtools(!1);\n        }\n      }\n      hook.memoizedState = [nextValue, deps];\n      return nextValue;\n    },\n    useReducer: function (reducer, initialArg, init) {\n      var hook = mountWorkInProgressHook();\n      if (void 0 !== init) {\n        var initialState = init(initialArg);\n        if (shouldDoubleInvokeUserFnsInHooksDEV) {\n          setIsStrictModeForDevtools(!0);\n          try {\n            init(initialArg);\n          } finally {\n            setIsStrictModeForDevtools(!1);\n          }\n        }\n      } else initialState = initialArg;\n      hook.memoizedState = hook.baseState = initialState;\n      reducer = {\n        pending: null,\n        lanes: 0,\n        dispatch: null,\n        lastRenderedReducer: reducer,\n        lastRenderedState: initialState\n      };\n      hook.queue = reducer;\n      reducer = reducer.dispatch = dispatchReducerAction.bind(\n        null,\n        currentlyRenderingFiber,\n        reducer\n      );\n      return [hook.memoizedState, reducer];\n    },\n    useRef: function (initialValue) {\n      var hook = mountWorkInProgressHook();\n      initialValue = { current: initialValue };\n      return (hook.memoizedState = initialValue);\n    },\n    useState: function (initialState) {\n      initialState = mountStateImpl(initialState);\n      var queue = initialState.queue,\n        dispatch = dispatchSetState.bind(null, currentlyRenderingFiber, queue);\n      queue.dispatch = dispatch;\n      return [initialState.memoizedState, dispatch];\n    },\n    useDebugValue: mountDebugValue,\n    useDeferredValue: function (value, initialValue) {\n      var hook = mountWorkInProgressHook();\n      return mountDeferredValueImpl(hook, value, initialValue);\n    },\n    useTransition: function () {\n      var stateHook = mountStateImpl(!1);\n      stateHook = startTransition.bind(\n        null,\n        currentlyRenderingFiber,\n        stateHook.queue,\n        !0,\n        !1\n      );\n      mountWorkInProgressHook().memoizedState = stateHook;\n      return [!1, stateHook];\n    },\n    useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {\n      var fiber = currentlyRenderingFiber,\n        hook = mountWorkInProgressHook();\n      if (isHydrating) {\n        if (void 0 === getServerSnapshot)\n          throw Error(formatProdErrorMessage(407));\n        getServerSnapshot = getServerSnapshot();\n      } else {\n        getServerSnapshot = getSnapshot();\n        if (null === workInProgressRoot)\n          throw Error(formatProdErrorMessage(349));\n        0 !== (workInProgressRootRenderLanes & 127) ||\n          pushStoreConsistencyCheck(fiber, getSnapshot, getServerSnapshot);\n      }\n      hook.memoizedState = getServerSnapshot;\n      var inst = { value: getServerSnapshot, getSnapshot: getSnapshot };\n      hook.queue = inst;\n      mountEffect(subscribeToStore.bind(null, fiber, inst, subscribe), [\n        subscribe\n      ]);\n      fiber.flags |= 2048;\n      pushSimpleEffect(\n        9,\n        { destroy: void 0 },\n        updateStoreInstance.bind(\n          null,\n          fiber,\n          inst,\n          getServerSnapshot,\n          getSnapshot\n        ),\n        null\n      );\n      return getServerSnapshot;\n    },\n    useId: function () {\n      var hook = mountWorkInProgressHook(),\n        identifierPrefix = workInProgressRoot.identifierPrefix;\n      if (isHydrating) {\n        var JSCompiler_inline_result = treeContextOverflow;\n        var idWithLeadingBit = treeContextId;\n        JSCompiler_inline_result =\n          (\n            idWithLeadingBit & ~(1 << (32 - clz32(idWithLeadingBit) - 1))\n          ).toString(32) + JSCompiler_inline_result;\n        identifierPrefix =\n          \"_\" + identifierPrefix + \"R_\" + JSCompiler_inline_result;\n        JSCompiler_inline_result = localIdCounter++;\n        0 < JSCompiler_inline_result &&\n          (identifierPrefix += \"H\" + JSCompiler_inline_result.toString(32));\n        identifierPrefix += \"_\";\n      } else\n        (JSCompiler_inline_result = globalClientIdCounter++),\n          (identifierPrefix =\n            \"_\" +\n            identifierPrefix +\n            \"r_\" +\n            JSCompiler_inline_result.toString(32) +\n            \"_\");\n      return (hook.memoizedState = identifierPrefix);\n    },\n    useHostTransitionStatus: useHostTransitionStatus,\n    useFormState: mountActionState,\n    useActionState: mountActionState,\n    useOptimistic: function (passthrough) {\n      var hook = mountWorkInProgressHook();\n      hook.memoizedState = hook.baseState = passthrough;\n      var queue = {\n        pending: null,\n        lanes: 0,\n        dispatch: null,\n        lastRenderedReducer: null,\n        lastRenderedState: null\n      };\n      hook.queue = queue;\n      hook = dispatchOptimisticSetState.bind(\n        null,\n        currentlyRenderingFiber,\n        !0,\n        queue\n      );\n      queue.dispatch = hook;\n      return [passthrough, hook];\n    },\n    useMemoCache: useMemoCache,\n    useCacheRefresh: function () {\n      return (mountWorkInProgressHook().memoizedState = refreshCache.bind(\n        null,\n        currentlyRenderingFiber\n      ));\n    },\n    useEffectEvent: function (callback) {\n      var hook = mountWorkInProgressHook(),\n        ref = { impl: callback };\n      hook.memoizedState = ref;\n      return function () {\n        if (0 !== (executionContext & 2))\n          throw Error(formatProdErrorMessage(440));\n        return ref.impl.apply(void 0, arguments);\n      };\n    }\n  },\n  HooksDispatcherOnUpdate = {\n    readContext: readContext,\n    use: use,\n    useCallback: updateCallback,\n    useContext: readContext,\n    useEffect: updateEffect,\n    useImperativeHandle: updateImperativeHandle,\n    useInsertionEffect: updateInsertionEffect,\n    useLayoutEffect: updateLayoutEffect,\n    useMemo: updateMemo,\n    useReducer: updateReducer,\n    useRef: updateRef,\n    useState: function () {\n      return updateReducer(basicStateReducer);\n    },\n    useDebugValue: mountDebugValue,\n    useDeferredValue: function (value, initialValue) {\n      var hook = updateWorkInProgressHook();\n      return updateDeferredValueImpl(\n        hook,\n        currentHook.memoizedState,\n        value,\n        initialValue\n      );\n    },\n    useTransition: function () {\n      var booleanOrThenable = updateReducer(basicStateReducer)[0],\n        start = updateWorkInProgressHook().memoizedState;\n      return [\n        \"boolean\" === typeof booleanOrThenable\n          ? booleanOrThenable\n          : useThenable(booleanOrThenable),\n        start\n      ];\n    },\n    useSyncExternalStore: updateSyncExternalStore,\n    useId: updateId,\n    useHostTransitionStatus: useHostTransitionStatus,\n    useFormState: updateActionState,\n    useActionState: updateActionState,\n    useOptimistic: function (passthrough, reducer) {\n      var hook = updateWorkInProgressHook();\n      return updateOptimisticImpl(hook, currentHook, passthrough, reducer);\n    },\n    useMemoCache: useMemoCache,\n    useCacheRefresh: updateRefresh\n  };\nHooksDispatcherOnUpdate.useEffectEvent = updateEvent;\nvar HooksDispatcherOnRerender = {\n  readContext: readContext,\n  use: use,\n  useCallback: updateCallback,\n  useContext: readContext,\n  useEffect: updateEffect,\n  useImperativeHandle: updateImperativeHandle,\n  useInsertionEffect: updateInsertionEffect,\n  useLayoutEffect: updateLayoutEffect,\n  useMemo: updateMemo,\n  useReducer: rerenderReducer,\n  useRef: updateRef,\n  useState: function () {\n    return rerenderReducer(basicStateReducer);\n  },\n  useDebugValue: mountDebugValue,\n  useDeferredValue: function (value, initialValue) {\n    var hook = updateWorkInProgressHook();\n    return null === currentHook\n      ? mountDeferredValueImpl(hook, value, initialValue)\n      : updateDeferredValueImpl(\n          hook,\n          currentHook.memoizedState,\n          value,\n          initialValue\n        );\n  },\n  useTransition: function () {\n    var booleanOrThenable = rerenderReducer(basicStateReducer)[0],\n      start = updateWorkInProgressHook().memoizedState;\n    return [\n      \"boolean\" === typeof booleanOrThenable\n        ? booleanOrThenable\n        : useThenable(booleanOrThenable),\n      start\n    ];\n  },\n  useSyncExternalStore: updateSyncExternalStore,\n  useId: updateId,\n  useHostTransitionStatus: useHostTransitionStatus,\n  useFormState: rerenderActionState,\n  useActionState: rerenderActionState,\n  useOptimistic: function (passthrough, reducer) {\n    var hook = updateWorkInProgressHook();\n    if (null !== currentHook)\n      return updateOptimisticImpl(hook, currentHook, passthrough, reducer);\n    hook.baseState = passthrough;\n    return [passthrough, hook.queue.dispatch];\n  },\n  useMemoCache: useMemoCache,\n  useCacheRefresh: updateRefresh\n};\nHooksDispatcherOnRerender.useEffectEvent = updateEvent;\nfunction applyDerivedStateFromProps(\n  workInProgress,\n  ctor,\n  getDerivedStateFromProps,\n  nextProps\n) {\n  ctor = workInProgress.memoizedState;\n  getDerivedStateFromProps = getDerivedStateFromProps(nextProps, ctor);\n  getDerivedStateFromProps =\n    null === getDerivedStateFromProps || void 0 === getDerivedStateFromProps\n      ? ctor\n      : assign({}, ctor, getDerivedStateFromProps);\n  workInProgress.memoizedState = getDerivedStateFromProps;\n  0 === workInProgress.lanes &&\n    (workInProgress.updateQueue.baseState = getDerivedStateFromProps);\n}\nvar classComponentUpdater = {\n  enqueueSetState: function (inst, payload, callback) {\n    inst = inst._reactInternals;\n    var lane = requestUpdateLane(),\n      update = createUpdate(lane);\n    update.payload = payload;\n    void 0 !== callback && null !== callback && (update.callback = callback);\n    payload = enqueueUpdate(inst, update, lane);\n    null !== payload &&\n      (scheduleUpdateOnFiber(payload, inst, lane),\n      entangleTransitions(payload, inst, lane));\n  },\n  enqueueReplaceState: function (inst, payload, callback) {\n    inst = inst._reactInternals;\n    var lane = requestUpdateLane(),\n      update = createUpdate(lane);\n    update.tag = 1;\n    update.payload = payload;\n    void 0 !== callback && null !== callback && (update.callback = callback);\n    payload = enqueueUpdate(inst, update, lane);\n    null !== payload &&\n      (scheduleUpdateOnFiber(payload, inst, lane),\n      entangleTransitions(payload, inst, lane));\n  },\n  enqueueForceUpdate: function (inst, callback) {\n    inst = inst._reactInternals;\n    var lane = requestUpdateLane(),\n      update = createUpdate(lane);\n    update.tag = 2;\n    void 0 !== callback && null !== callback && (update.callback = callback);\n    callback = enqueueUpdate(inst, update, lane);\n    null !== callback &&\n      (scheduleUpdateOnFiber(callback, inst, lane),\n      entangleTransitions(callback, inst, lane));\n  }\n};\nfunction checkShouldComponentUpdate(\n  workInProgress,\n  ctor,\n  oldProps,\n  newProps,\n  oldState,\n  newState,\n  nextContext\n) {\n  workInProgress = workInProgress.stateNode;\n  return \"function\" === typeof workInProgress.shouldComponentUpdate\n    ? workInProgress.shouldComponentUpdate(newProps, newState, nextContext)\n    : ctor.prototype && ctor.prototype.isPureReactComponent\n      ? !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState)\n      : !0;\n}\nfunction callComponentWillReceiveProps(\n  workInProgress,\n  instance,\n  newProps,\n  nextContext\n) {\n  workInProgress = instance.state;\n  \"function\" === typeof instance.componentWillReceiveProps &&\n    instance.componentWillReceiveProps(newProps, nextContext);\n  \"function\" === typeof instance.UNSAFE_componentWillReceiveProps &&\n    instance.UNSAFE_componentWillReceiveProps(newProps, nextContext);\n  instance.state !== workInProgress &&\n    classComponentUpdater.enqueueReplaceState(instance, instance.state, null);\n}\nfunction resolveClassComponentProps(Component, baseProps) {\n  var newProps = baseProps;\n  if (\"ref\" in baseProps) {\n    newProps = {};\n    for (var propName in baseProps)\n      \"ref\" !== propName && (newProps[propName] = baseProps[propName]);\n  }\n  if ((Component = Component.defaultProps)) {\n    newProps === baseProps && (newProps = assign({}, newProps));\n    for (var propName$73 in Component)\n      void 0 === newProps[propName$73] &&\n        (newProps[propName$73] = Component[propName$73]);\n  }\n  return newProps;\n}\nfunction defaultOnUncaughtError(error) {\n  reportGlobalError(error);\n}\nfunction defaultOnCaughtError(error) {\n  console.error(error);\n}\nfunction defaultOnRecoverableError(error) {\n  reportGlobalError(error);\n}\nfunction logUncaughtError(root, errorInfo) {\n  try {\n    var onUncaughtError = root.onUncaughtError;\n    onUncaughtError(errorInfo.value, { componentStack: errorInfo.stack });\n  } catch (e$74) {\n    setTimeout(function () {\n      throw e$74;\n    });\n  }\n}\nfunction logCaughtError(root, boundary, errorInfo) {\n  try {\n    var onCaughtError = root.onCaughtError;\n    onCaughtError(errorInfo.value, {\n      componentStack: errorInfo.stack,\n      errorBoundary: 1 === boundary.tag ? boundary.stateNode : null\n    });\n  } catch (e$75) {\n    setTimeout(function () {\n      throw e$75;\n    });\n  }\n}\nfunction createRootErrorUpdate(root, errorInfo, lane) {\n  lane = createUpdate(lane);\n  lane.tag = 3;\n  lane.payload = { element: null };\n  lane.callback = function () {\n    logUncaughtError(root, errorInfo);\n  };\n  return lane;\n}\nfunction createClassErrorUpdate(lane) {\n  lane = createUpdate(lane);\n  lane.tag = 3;\n  return lane;\n}\nfunction initializeClassErrorUpdate(update, root, fiber, errorInfo) {\n  var getDerivedStateFromError = fiber.type.getDerivedStateFromError;\n  if (\"function\" === typeof getDerivedStateFromError) {\n    var error = errorInfo.value;\n    update.payload = function () {\n      return getDerivedStateFromError(error);\n    };\n    update.callback = function () {\n      logCaughtError(root, fiber, errorInfo);\n    };\n  }\n  var inst = fiber.stateNode;\n  null !== inst &&\n    \"function\" === typeof inst.componentDidCatch &&\n    (update.callback = function () {\n      logCaughtError(root, fiber, errorInfo);\n      \"function\" !== typeof getDerivedStateFromError &&\n        (null === legacyErrorBoundariesThatAlreadyFailed\n          ? (legacyErrorBoundariesThatAlreadyFailed = new Set([this]))\n          : legacyErrorBoundariesThatAlreadyFailed.add(this));\n      var stack = errorInfo.stack;\n      this.componentDidCatch(errorInfo.value, {\n        componentStack: null !== stack ? stack : \"\"\n      });\n    });\n}\nfunction throwException(\n  root,\n  returnFiber,\n  sourceFiber,\n  value,\n  rootRenderLanes\n) {\n  sourceFiber.flags |= 32768;\n  if (\n    null !== value &&\n    \"object\" === typeof value &&\n    \"function\" === typeof value.then\n  ) {\n    returnFiber = sourceFiber.alternate;\n    null !== returnFiber &&\n      propagateParentContextChanges(\n        returnFiber,\n        sourceFiber,\n        rootRenderLanes,\n        !0\n      );\n    sourceFiber = suspenseHandlerStackCursor.current;\n    if (null !== sourceFiber) {\n      switch (sourceFiber.tag) {\n        case 31:\n        case 13:\n          return (\n            null === shellBoundary\n              ? renderDidSuspendDelayIfPossible()\n              : null === sourceFiber.alternate &&\n                0 === workInProgressRootExitStatus &&\n                (workInProgressRootExitStatus = 3),\n            (sourceFiber.flags &= -257),\n            (sourceFiber.flags |= 65536),\n            (sourceFiber.lanes = rootRenderLanes),\n            value === noopSuspenseyCommitThenable\n              ? (sourceFiber.flags |= 16384)\n              : ((returnFiber = sourceFiber.updateQueue),\n                null === returnFiber\n                  ? (sourceFiber.updateQueue = new Set([value]))\n                  : returnFiber.add(value),\n                attachPingListener(root, value, rootRenderLanes)),\n            !1\n          );\n        case 22:\n          return (\n            (sourceFiber.flags |= 65536),\n            value === noopSuspenseyCommitThenable\n              ? (sourceFiber.flags |= 16384)\n              : ((returnFiber = sourceFiber.updateQueue),\n                null === returnFiber\n                  ? ((returnFiber = {\n                      transitions: null,\n                      markerInstances: null,\n                      retryQueue: new Set([value])\n                    }),\n                    (sourceFiber.updateQueue = returnFiber))\n                  : ((sourceFiber = returnFiber.retryQueue),\n                    null === sourceFiber\n                      ? (returnFiber.retryQueue = new Set([value]))\n                      : sourceFiber.add(value)),\n                attachPingListener(root, value, rootRenderLanes)),\n            !1\n          );\n      }\n      throw Error(formatProdErrorMessage(435, sourceFiber.tag));\n    }\n    attachPingListener(root, value, rootRenderLanes);\n    renderDidSuspendDelayIfPossible();\n    return !1;\n  }\n  if (isHydrating)\n    return (\n      (returnFiber = suspenseHandlerStackCursor.current),\n      null !== returnFiber\n        ? (0 === (returnFiber.flags & 65536) && (returnFiber.flags |= 256),\n          (returnFiber.flags |= 65536),\n          (returnFiber.lanes = rootRenderLanes),\n          value !== HydrationMismatchException &&\n            ((root = Error(formatProdErrorMessage(422), { cause: value })),\n            queueHydrationError(createCapturedValueAtFiber(root, sourceFiber))))\n        : (value !== HydrationMismatchException &&\n            ((returnFiber = Error(formatProdErrorMessage(423), {\n              cause: value\n            })),\n            queueHydrationError(\n              createCapturedValueAtFiber(returnFiber, sourceFiber)\n            )),\n          (root = root.current.alternate),\n          (root.flags |= 65536),\n          (rootRenderLanes &= -rootRenderLanes),\n          (root.lanes |= rootRenderLanes),\n          (value = createCapturedValueAtFiber(value, sourceFiber)),\n          (rootRenderLanes = createRootErrorUpdate(\n            root.stateNode,\n            value,\n            rootRenderLanes\n          )),\n          enqueueCapturedUpdate(root, rootRenderLanes),\n          4 !== workInProgressRootExitStatus &&\n            (workInProgressRootExitStatus = 2)),\n      !1\n    );\n  var wrapperError = Error(formatProdErrorMessage(520), { cause: value });\n  wrapperError = createCapturedValueAtFiber(wrapperError, sourceFiber);\n  null === workInProgressRootConcurrentErrors\n    ? (workInProgressRootConcurrentErrors = [wrapperError])\n    : workInProgressRootConcurrentErrors.push(wrapperError);\n  4 !== workInProgressRootExitStatus && (workInProgressRootExitStatus = 2);\n  if (null === returnFiber) return !0;\n  value = createCapturedValueAtFiber(value, sourceFiber);\n  sourceFiber = returnFiber;\n  do {\n    switch (sourceFiber.tag) {\n      case 3:\n        return (\n          (sourceFiber.flags |= 65536),\n          (root = rootRenderLanes & -rootRenderLanes),\n          (sourceFiber.lanes |= root),\n          (root = createRootErrorUpdate(sourceFiber.stateNode, value, root)),\n          enqueueCapturedUpdate(sourceFiber, root),\n          !1\n        );\n      case 1:\n        if (\n          ((returnFiber = sourceFiber.type),\n          (wrapperError = sourceFiber.stateNode),\n          0 === (sourceFiber.flags & 128) &&\n            (\"function\" === typeof returnFiber.getDerivedStateFromError ||\n              (null !== wrapperError &&\n                \"function\" === typeof wrapperError.componentDidCatch &&\n                (null === legacyErrorBoundariesThatAlreadyFailed ||\n                  !legacyErrorBoundariesThatAlreadyFailed.has(wrapperError)))))\n        )\n          return (\n            (sourceFiber.flags |= 65536),\n            (rootRenderLanes &= -rootRenderLanes),\n            (sourceFiber.lanes |= rootRenderLanes),\n            (rootRenderLanes = createClassErrorUpdate(rootRenderLanes)),\n            initializeClassErrorUpdate(\n              rootRenderLanes,\n              root,\n              sourceFiber,\n              value\n            ),\n            enqueueCapturedUpdate(sourceFiber, rootRenderLanes),\n            !1\n          );\n    }\n    sourceFiber = sourceFiber.return;\n  } while (null !== sourceFiber);\n  return !1;\n}\nvar SelectiveHydrationException = Error(formatProdErrorMessage(461)),\n  didReceiveUpdate = !1;\nfunction reconcileChildren(current, workInProgress, nextChildren, renderLanes) {\n  workInProgress.child =\n    null === current\n      ? mountChildFibers(workInProgress, null, nextChildren, renderLanes)\n      : reconcileChildFibers(\n          workInProgress,\n          current.child,\n          nextChildren,\n          renderLanes\n        );\n}\nfunction updateForwardRef(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  Component = Component.render;\n  var ref = workInProgress.ref;\n  if (\"ref\" in nextProps) {\n    var propsWithoutRef = {};\n    for (var key in nextProps)\n      \"ref\" !== key && (propsWithoutRef[key] = nextProps[key]);\n  } else propsWithoutRef = nextProps;\n  prepareToReadContext(workInProgress);\n  nextProps = renderWithHooks(\n    current,\n    workInProgress,\n    Component,\n    propsWithoutRef,\n    ref,\n    renderLanes\n  );\n  key = checkDidRenderIdHook();\n  if (null !== current && !didReceiveUpdate)\n    return (\n      bailoutHooks(current, workInProgress, renderLanes),\n      bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n    );\n  isHydrating && key && pushMaterializedTreeId(workInProgress);\n  workInProgress.flags |= 1;\n  reconcileChildren(current, workInProgress, nextProps, renderLanes);\n  return workInProgress.child;\n}\nfunction updateMemoComponent(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  if (null === current) {\n    var type = Component.type;\n    if (\n      \"function\" === typeof type &&\n      !shouldConstruct(type) &&\n      void 0 === type.defaultProps &&\n      null === Component.compare\n    )\n      return (\n        (workInProgress.tag = 15),\n        (workInProgress.type = type),\n        updateSimpleMemoComponent(\n          current,\n          workInProgress,\n          type,\n          nextProps,\n          renderLanes\n        )\n      );\n    current = createFiberFromTypeAndProps(\n      Component.type,\n      null,\n      nextProps,\n      workInProgress,\n      workInProgress.mode,\n      renderLanes\n    );\n    current.ref = workInProgress.ref;\n    current.return = workInProgress;\n    return (workInProgress.child = current);\n  }\n  type = current.child;\n  if (!checkScheduledUpdateOrContext(current, renderLanes)) {\n    var prevProps = type.memoizedProps;\n    Component = Component.compare;\n    Component = null !== Component ? Component : shallowEqual;\n    if (Component(prevProps, nextProps) && current.ref === workInProgress.ref)\n      return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n  }\n  workInProgress.flags |= 1;\n  current = createWorkInProgress(type, nextProps);\n  current.ref = workInProgress.ref;\n  current.return = workInProgress;\n  return (workInProgress.child = current);\n}\nfunction updateSimpleMemoComponent(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  if (null !== current) {\n    var prevProps = current.memoizedProps;\n    if (\n      shallowEqual(prevProps, nextProps) &&\n      current.ref === workInProgress.ref\n    )\n      if (\n        ((didReceiveUpdate = !1),\n        (workInProgress.pendingProps = nextProps = prevProps),\n        checkScheduledUpdateOrContext(current, renderLanes))\n      )\n        0 !== (current.flags & 131072) && (didReceiveUpdate = !0);\n      else\n        return (\n          (workInProgress.lanes = current.lanes),\n          bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n        );\n  }\n  return updateFunctionComponent(\n    current,\n    workInProgress,\n    Component,\n    nextProps,\n    renderLanes\n  );\n}\nfunction updateOffscreenComponent(\n  current,\n  workInProgress,\n  renderLanes,\n  nextProps\n) {\n  var nextChildren = nextProps.children,\n    prevState = null !== current ? current.memoizedState : null;\n  null === current &&\n    null === workInProgress.stateNode &&\n    (workInProgress.stateNode = {\n      _visibility: 1,\n      _pendingMarkers: null,\n      _retryCache: null,\n      _transitions: null\n    });\n  if (\"hidden\" === nextProps.mode) {\n    if (0 !== (workInProgress.flags & 128)) {\n      prevState =\n        null !== prevState ? prevState.baseLanes | renderLanes : renderLanes;\n      if (null !== current) {\n        nextProps = workInProgress.child = current.child;\n        for (nextChildren = 0; null !== nextProps; )\n          (nextChildren =\n            nextChildren | nextProps.lanes | nextProps.childLanes),\n            (nextProps = nextProps.sibling);\n        nextProps = nextChildren & ~prevState;\n      } else (nextProps = 0), (workInProgress.child = null);\n      return deferHiddenOffscreenComponent(\n        current,\n        workInProgress,\n        prevState,\n        renderLanes,\n        nextProps\n      );\n    }\n    if (0 !== (renderLanes & 536870912))\n      (workInProgress.memoizedState = { baseLanes: 0, cachePool: null }),\n        null !== current &&\n          pushTransition(\n            workInProgress,\n            null !== prevState ? prevState.cachePool : null\n          ),\n        null !== prevState\n          ? pushHiddenContext(workInProgress, prevState)\n          : reuseHiddenContextOnStack(),\n        pushOffscreenSuspenseHandler(workInProgress);\n    else\n      return (\n        (nextProps = workInProgress.lanes = 536870912),\n        deferHiddenOffscreenComponent(\n          current,\n          workInProgress,\n          null !== prevState ? prevState.baseLanes | renderLanes : renderLanes,\n          renderLanes,\n          nextProps\n        )\n      );\n  } else\n    null !== prevState\n      ? (pushTransition(workInProgress, prevState.cachePool),\n        pushHiddenContext(workInProgress, prevState),\n        reuseSuspenseHandlerOnStack(workInProgress),\n        (workInProgress.memoizedState = null))\n      : (null !== current && pushTransition(workInProgress, null),\n        reuseHiddenContextOnStack(),\n        reuseSuspenseHandlerOnStack(workInProgress));\n  reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n  return workInProgress.child;\n}\nfunction bailoutOffscreenComponent(current, workInProgress) {\n  (null !== current && 22 === current.tag) ||\n    null !== workInProgress.stateNode ||\n    (workInProgress.stateNode = {\n      _visibility: 1,\n      _pendingMarkers: null,\n      _retryCache: null,\n      _transitions: null\n    });\n  return workInProgress.sibling;\n}\nfunction deferHiddenOffscreenComponent(\n  current,\n  workInProgress,\n  nextBaseLanes,\n  renderLanes,\n  remainingChildLanes\n) {\n  var JSCompiler_inline_result = peekCacheFromPool();\n  JSCompiler_inline_result =\n    null === JSCompiler_inline_result\n      ? null\n      : { parent: CacheContext._currentValue, pool: JSCompiler_inline_result };\n  workInProgress.memoizedState = {\n    baseLanes: nextBaseLanes,\n    cachePool: JSCompiler_inline_result\n  };\n  null !== current && pushTransition(workInProgress, null);\n  reuseHiddenContextOnStack();\n  pushOffscreenSuspenseHandler(workInProgress);\n  null !== current &&\n    propagateParentContextChanges(current, workInProgress, renderLanes, !0);\n  workInProgress.childLanes = remainingChildLanes;\n  return null;\n}\nfunction mountActivityChildren(workInProgress, nextProps) {\n  nextProps = mountWorkInProgressOffscreenFiber(\n    { mode: nextProps.mode, children: nextProps.children },\n    workInProgress.mode\n  );\n  nextProps.ref = workInProgress.ref;\n  workInProgress.child = nextProps;\n  nextProps.return = workInProgress;\n  return nextProps;\n}\nfunction retryActivityComponentWithoutHydrating(\n  current,\n  workInProgress,\n  renderLanes\n) {\n  reconcileChildFibers(workInProgress, current.child, null, renderLanes);\n  current = mountActivityChildren(workInProgress, workInProgress.pendingProps);\n  current.flags |= 2;\n  popSuspenseHandler(workInProgress);\n  workInProgress.memoizedState = null;\n  return current;\n}\nfunction updateActivityComponent(current, workInProgress, renderLanes) {\n  var nextProps = workInProgress.pendingProps,\n    didSuspend = 0 !== (workInProgress.flags & 128);\n  workInProgress.flags &= -129;\n  if (null === current) {\n    if (isHydrating) {\n      if (\"hidden\" === nextProps.mode)\n        return (\n          (current = mountActivityChildren(workInProgress, nextProps)),\n          (workInProgress.lanes = 536870912),\n          bailoutOffscreenComponent(null, current)\n        );\n      pushDehydratedActivitySuspenseHandler(workInProgress);\n      (current = nextHydratableInstance)\n        ? ((current = canHydrateHydrationBoundary(\n            current,\n            rootOrSingletonContext\n          )),\n          (current = null !== current && \"&\" === current.data ? current : null),\n          null !== current &&\n            ((workInProgress.memoizedState = {\n              dehydrated: current,\n              treeContext:\n                null !== treeContextProvider\n                  ? { id: treeContextId, overflow: treeContextOverflow }\n                  : null,\n              retryLane: 536870912,\n              hydrationErrors: null\n            }),\n            (renderLanes = createFiberFromDehydratedFragment(current)),\n            (renderLanes.return = workInProgress),\n            (workInProgress.child = renderLanes),\n            (hydrationParentFiber = workInProgress),\n            (nextHydratableInstance = null)))\n        : (current = null);\n      if (null === current) throw throwOnHydrationMismatch(workInProgress);\n      workInProgress.lanes = 536870912;\n      return null;\n    }\n    return mountActivityChildren(workInProgress, nextProps);\n  }\n  var prevState = current.memoizedState;\n  if (null !== prevState) {\n    var dehydrated = prevState.dehydrated;\n    pushDehydratedActivitySuspenseHandler(workInProgress);\n    if (didSuspend)\n      if (workInProgress.flags & 256)\n        (workInProgress.flags &= -257),\n          (workInProgress = retryActivityComponentWithoutHydrating(\n            current,\n            workInProgress,\n            renderLanes\n          ));\n      else if (null !== workInProgress.memoizedState)\n        (workInProgress.child = current.child),\n          (workInProgress.flags |= 128),\n          (workInProgress = null);\n      else throw Error(formatProdErrorMessage(558));\n    else if (\n      (didReceiveUpdate ||\n        propagateParentContextChanges(current, workInProgress, renderLanes, !1),\n      (didSuspend = 0 !== (renderLanes & current.childLanes)),\n      didReceiveUpdate || didSuspend)\n    ) {\n      nextProps = workInProgressRoot;\n      if (\n        null !== nextProps &&\n        ((dehydrated = getBumpedLaneForHydration(nextProps, renderLanes)),\n        0 !== dehydrated && dehydrated !== prevState.retryLane)\n      )\n        throw (\n          ((prevState.retryLane = dehydrated),\n          enqueueConcurrentRenderForLane(current, dehydrated),\n          scheduleUpdateOnFiber(nextProps, current, dehydrated),\n          SelectiveHydrationException)\n        );\n      renderDidSuspendDelayIfPossible();\n      workInProgress = retryActivityComponentWithoutHydrating(\n        current,\n        workInProgress,\n        renderLanes\n      );\n    } else\n      (current = prevState.treeContext),\n        (nextHydratableInstance = getNextHydratable(dehydrated.nextSibling)),\n        (hydrationParentFiber = workInProgress),\n        (isHydrating = !0),\n        (hydrationErrors = null),\n        (rootOrSingletonContext = !1),\n        null !== current &&\n          restoreSuspendedTreeContext(workInProgress, current),\n        (workInProgress = mountActivityChildren(workInProgress, nextProps)),\n        (workInProgress.flags |= 4096);\n    return workInProgress;\n  }\n  current = createWorkInProgress(current.child, {\n    mode: nextProps.mode,\n    children: nextProps.children\n  });\n  current.ref = workInProgress.ref;\n  workInProgress.child = current;\n  current.return = workInProgress;\n  return current;\n}\nfunction markRef(current, workInProgress) {\n  var ref = workInProgress.ref;\n  if (null === ref)\n    null !== current &&\n      null !== current.ref &&\n      (workInProgress.flags |= 4194816);\n  else {\n    if (\"function\" !== typeof ref && \"object\" !== typeof ref)\n      throw Error(formatProdErrorMessage(284));\n    if (null === current || current.ref !== ref)\n      workInProgress.flags |= 4194816;\n  }\n}\nfunction updateFunctionComponent(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  prepareToReadContext(workInProgress);\n  Component = renderWithHooks(\n    current,\n    workInProgress,\n    Component,\n    nextProps,\n    void 0,\n    renderLanes\n  );\n  nextProps = checkDidRenderIdHook();\n  if (null !== current && !didReceiveUpdate)\n    return (\n      bailoutHooks(current, workInProgress, renderLanes),\n      bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n    );\n  isHydrating && nextProps && pushMaterializedTreeId(workInProgress);\n  workInProgress.flags |= 1;\n  reconcileChildren(current, workInProgress, Component, renderLanes);\n  return workInProgress.child;\n}\nfunction replayFunctionComponent(\n  current,\n  workInProgress,\n  nextProps,\n  Component,\n  secondArg,\n  renderLanes\n) {\n  prepareToReadContext(workInProgress);\n  workInProgress.updateQueue = null;\n  nextProps = renderWithHooksAgain(\n    workInProgress,\n    Component,\n    nextProps,\n    secondArg\n  );\n  finishRenderingHooks(current);\n  Component = checkDidRenderIdHook();\n  if (null !== current && !didReceiveUpdate)\n    return (\n      bailoutHooks(current, workInProgress, renderLanes),\n      bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n    );\n  isHydrating && Component && pushMaterializedTreeId(workInProgress);\n  workInProgress.flags |= 1;\n  reconcileChildren(current, workInProgress, nextProps, renderLanes);\n  return workInProgress.child;\n}\nfunction updateClassComponent(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  prepareToReadContext(workInProgress);\n  if (null === workInProgress.stateNode) {\n    var context = emptyContextObject,\n      contextType = Component.contextType;\n    \"object\" === typeof contextType &&\n      null !== contextType &&\n      (context = readContext(contextType));\n    context = new Component(nextProps, context);\n    workInProgress.memoizedState =\n      null !== context.state && void 0 !== context.state ? context.state : null;\n    context.updater = classComponentUpdater;\n    workInProgress.stateNode = context;\n    context._reactInternals = workInProgress;\n    context = workInProgress.stateNode;\n    context.props = nextProps;\n    context.state = workInProgress.memoizedState;\n    context.refs = {};\n    initializeUpdateQueue(workInProgress);\n    contextType = Component.contextType;\n    context.context =\n      \"object\" === typeof contextType && null !== contextType\n        ? readContext(contextType)\n        : emptyContextObject;\n    context.state = workInProgress.memoizedState;\n    contextType = Component.getDerivedStateFromProps;\n    \"function\" === typeof contextType &&\n      (applyDerivedStateFromProps(\n        workInProgress,\n        Component,\n        contextType,\n        nextProps\n      ),\n      (context.state = workInProgress.memoizedState));\n    \"function\" === typeof Component.getDerivedStateFromProps ||\n      \"function\" === typeof context.getSnapshotBeforeUpdate ||\n      (\"function\" !== typeof context.UNSAFE_componentWillMount &&\n        \"function\" !== typeof context.componentWillMount) ||\n      ((contextType = context.state),\n      \"function\" === typeof context.componentWillMount &&\n        context.componentWillMount(),\n      \"function\" === typeof context.UNSAFE_componentWillMount &&\n        context.UNSAFE_componentWillMount(),\n      contextType !== context.state &&\n        classComponentUpdater.enqueueReplaceState(context, context.state, null),\n      processUpdateQueue(workInProgress, nextProps, context, renderLanes),\n      suspendIfUpdateReadFromEntangledAsyncAction(),\n      (context.state = workInProgress.memoizedState));\n    \"function\" === typeof context.componentDidMount &&\n      (workInProgress.flags |= 4194308);\n    nextProps = !0;\n  } else if (null === current) {\n    context = workInProgress.stateNode;\n    var unresolvedOldProps = workInProgress.memoizedProps,\n      oldProps = resolveClassComponentProps(Component, unresolvedOldProps);\n    context.props = oldProps;\n    var oldContext = context.context,\n      contextType$jscomp$0 = Component.contextType;\n    contextType = emptyContextObject;\n    \"object\" === typeof contextType$jscomp$0 &&\n      null !== contextType$jscomp$0 &&\n      (contextType = readContext(contextType$jscomp$0));\n    var getDerivedStateFromProps = Component.getDerivedStateFromProps;\n    contextType$jscomp$0 =\n      \"function\" === typeof getDerivedStateFromProps ||\n      \"function\" === typeof context.getSnapshotBeforeUpdate;\n    unresolvedOldProps = workInProgress.pendingProps !== unresolvedOldProps;\n    contextType$jscomp$0 ||\n      (\"function\" !== typeof context.UNSAFE_componentWillReceiveProps &&\n        \"function\" !== typeof context.componentWillReceiveProps) ||\n      ((unresolvedOldProps || oldContext !== contextType) &&\n        callComponentWillReceiveProps(\n          workInProgress,\n          context,\n          nextProps,\n          contextType\n        ));\n    hasForceUpdate = !1;\n    var oldState = workInProgress.memoizedState;\n    context.state = oldState;\n    processUpdateQueue(workInProgress, nextProps, context, renderLanes);\n    suspendIfUpdateReadFromEntangledAsyncAction();\n    oldContext = workInProgress.memoizedState;\n    unresolvedOldProps || oldState !== oldContext || hasForceUpdate\n      ? (\"function\" === typeof getDerivedStateFromProps &&\n          (applyDerivedStateFromProps(\n            workInProgress,\n            Component,\n            getDerivedStateFromProps,\n            nextProps\n          ),\n          (oldContext = workInProgress.memoizedState)),\n        (oldProps =\n          hasForceUpdate ||\n          checkShouldComponentUpdate(\n            workInProgress,\n            Component,\n            oldProps,\n            nextProps,\n            oldState,\n            oldContext,\n            contextType\n          ))\n          ? (contextType$jscomp$0 ||\n              (\"function\" !== typeof context.UNSAFE_componentWillMount &&\n                \"function\" !== typeof context.componentWillMount) ||\n              (\"function\" === typeof context.componentWillMount &&\n                context.componentWillMount(),\n              \"function\" === typeof context.UNSAFE_componentWillMount &&\n                context.UNSAFE_componentWillMount()),\n            \"function\" === typeof context.componentDidMount &&\n              (workInProgress.flags |= 4194308))\n          : (\"function\" === typeof context.componentDidMount &&\n              (workInProgress.flags |= 4194308),\n            (workInProgress.memoizedProps = nextProps),\n            (workInProgress.memoizedState = oldContext)),\n        (context.props = nextProps),\n        (context.state = oldContext),\n        (context.context = contextType),\n        (nextProps = oldProps))\n      : (\"function\" === typeof context.componentDidMount &&\n          (workInProgress.flags |= 4194308),\n        (nextProps = !1));\n  } else {\n    context = workInProgress.stateNode;\n    cloneUpdateQueue(current, workInProgress);\n    contextType = workInProgress.memoizedProps;\n    contextType$jscomp$0 = resolveClassComponentProps(Component, contextType);\n    context.props = contextType$jscomp$0;\n    getDerivedStateFromProps = workInProgress.pendingProps;\n    oldState = context.context;\n    oldContext = Component.contextType;\n    oldProps = emptyContextObject;\n    \"object\" === typeof oldContext &&\n      null !== oldContext &&\n      (oldProps = readContext(oldContext));\n    unresolvedOldProps = Component.getDerivedStateFromProps;\n    (oldContext =\n      \"function\" === typeof unresolvedOldProps ||\n      \"function\" === typeof context.getSnapshotBeforeUpdate) ||\n      (\"function\" !== typeof context.UNSAFE_componentWillReceiveProps &&\n        \"function\" !== typeof context.componentWillReceiveProps) ||\n      ((contextType !== getDerivedStateFromProps || oldState !== oldProps) &&\n        callComponentWillReceiveProps(\n          workInProgress,\n          context,\n          nextProps,\n          oldProps\n        ));\n    hasForceUpdate = !1;\n    oldState = workInProgress.memoizedState;\n    context.state = oldState;\n    processUpdateQueue(workInProgress, nextProps, context, renderLanes);\n    suspendIfUpdateReadFromEntangledAsyncAction();\n    var newState = workInProgress.memoizedState;\n    contextType !== getDerivedStateFromProps ||\n    oldState !== newState ||\n    hasForceUpdate ||\n    (null !== current &&\n      null !== current.dependencies &&\n      checkIfContextChanged(current.dependencies))\n      ? (\"function\" === typeof unresolvedOldProps &&\n          (applyDerivedStateFromProps(\n            workInProgress,\n            Component,\n            unresolvedOldProps,\n            nextProps\n          ),\n          (newState = workInProgress.memoizedState)),\n        (contextType$jscomp$0 =\n          hasForceUpdate ||\n          checkShouldComponentUpdate(\n            workInProgress,\n            Component,\n            contextType$jscomp$0,\n            nextProps,\n            oldState,\n            newState,\n            oldProps\n          ) ||\n          (null !== current &&\n            null !== current.dependencies &&\n            checkIfContextChanged(current.dependencies)))\n          ? (oldContext ||\n              (\"function\" !== typeof context.UNSAFE_componentWillUpdate &&\n                \"function\" !== typeof context.componentWillUpdate) ||\n              (\"function\" === typeof context.componentWillUpdate &&\n                context.componentWillUpdate(nextProps, newState, oldProps),\n              \"function\" === typeof context.UNSAFE_componentWillUpdate &&\n                context.UNSAFE_componentWillUpdate(\n                  nextProps,\n                  newState,\n                  oldProps\n                )),\n            \"function\" === typeof context.componentDidUpdate &&\n              (workInProgress.flags |= 4),\n            \"function\" === typeof context.getSnapshotBeforeUpdate &&\n              (workInProgress.flags |= 1024))\n          : (\"function\" !== typeof context.componentDidUpdate ||\n              (contextType === current.memoizedProps &&\n                oldState === current.memoizedState) ||\n              (workInProgress.flags |= 4),\n            \"function\" !== typeof context.getSnapshotBeforeUpdate ||\n              (contextType === current.memoizedProps &&\n                oldState === current.memoizedState) ||\n              (workInProgress.flags |= 1024),\n            (workInProgress.memoizedProps = nextProps),\n            (workInProgress.memoizedState = newState)),\n        (context.props = nextProps),\n        (context.state = newState),\n        (context.context = oldProps),\n        (nextProps = contextType$jscomp$0))\n      : (\"function\" !== typeof context.componentDidUpdate ||\n          (contextType === current.memoizedProps &&\n            oldState === current.memoizedState) ||\n          (workInProgress.flags |= 4),\n        \"function\" !== typeof context.getSnapshotBeforeUpdate ||\n          (contextType === current.memoizedProps &&\n            oldState === current.memoizedState) ||\n          (workInProgress.flags |= 1024),\n        (nextProps = !1));\n  }\n  context = nextProps;\n  markRef(current, workInProgress);\n  nextProps = 0 !== (workInProgress.flags & 128);\n  context || nextProps\n    ? ((context = workInProgress.stateNode),\n      (Component =\n        nextProps && \"function\" !== typeof Component.getDerivedStateFromError\n          ? null\n          : context.render()),\n      (workInProgress.flags |= 1),\n      null !== current && nextProps\n        ? ((workInProgress.child = reconcileChildFibers(\n            workInProgress,\n            current.child,\n            null,\n            renderLanes\n          )),\n          (workInProgress.child = reconcileChildFibers(\n            workInProgress,\n            null,\n            Component,\n            renderLanes\n          )))\n        : reconcileChildren(current, workInProgress, Component, renderLanes),\n      (workInProgress.memoizedState = context.state),\n      (current = workInProgress.child))\n    : (current = bailoutOnAlreadyFinishedWork(\n        current,\n        workInProgress,\n        renderLanes\n      ));\n  return current;\n}\nfunction mountHostRootWithoutHydrating(\n  current,\n  workInProgress,\n  nextChildren,\n  renderLanes\n) {\n  resetHydrationState();\n  workInProgress.flags |= 256;\n  reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n  return workInProgress.child;\n}\nvar SUSPENDED_MARKER = {\n  dehydrated: null,\n  treeContext: null,\n  retryLane: 0,\n  hydrationErrors: null\n};\nfunction mountSuspenseOffscreenState(renderLanes) {\n  return { baseLanes: renderLanes, cachePool: getSuspendedCache() };\n}\nfunction getRemainingWorkInPrimaryTree(\n  current,\n  primaryTreeDidDefer,\n  renderLanes\n) {\n  current = null !== current ? current.childLanes & ~renderLanes : 0;\n  primaryTreeDidDefer && (current |= workInProgressDeferredLane);\n  return current;\n}\nfunction updateSuspenseComponent(current, workInProgress, renderLanes) {\n  var nextProps = workInProgress.pendingProps,\n    showFallback = !1,\n    didSuspend = 0 !== (workInProgress.flags & 128),\n    JSCompiler_temp;\n  (JSCompiler_temp = didSuspend) ||\n    (JSCompiler_temp =\n      null !== current && null === current.memoizedState\n        ? !1\n        : 0 !== (suspenseStackCursor.current & 2));\n  JSCompiler_temp && ((showFallback = !0), (workInProgress.flags &= -129));\n  JSCompiler_temp = 0 !== (workInProgress.flags & 32);\n  workInProgress.flags &= -33;\n  if (null === current) {\n    if (isHydrating) {\n      showFallback\n        ? pushPrimaryTreeSuspenseHandler(workInProgress)\n        : reuseSuspenseHandlerOnStack(workInProgress);\n      (current = nextHydratableInstance)\n        ? ((current = canHydrateHydrationBoundary(\n            current,\n            rootOrSingletonContext\n          )),\n          (current = null !== current && \"&\" !== current.data ? current : null),\n          null !== current &&\n            ((workInProgress.memoizedState = {\n              dehydrated: current,\n              treeContext:\n                null !== treeContextProvider\n                  ? { id: treeContextId, overflow: treeContextOverflow }\n                  : null,\n              retryLane: 536870912,\n              hydrationErrors: null\n            }),\n            (renderLanes = createFiberFromDehydratedFragment(current)),\n            (renderLanes.return = workInProgress),\n            (workInProgress.child = renderLanes),\n            (hydrationParentFiber = workInProgress),\n            (nextHydratableInstance = null)))\n        : (current = null);\n      if (null === current) throw throwOnHydrationMismatch(workInProgress);\n      isSuspenseInstanceFallback(current)\n        ? (workInProgress.lanes = 32)\n        : (workInProgress.lanes = 536870912);\n      return null;\n    }\n    var nextPrimaryChildren = nextProps.children;\n    nextProps = nextProps.fallback;\n    if (showFallback)\n      return (\n        reuseSuspenseHandlerOnStack(workInProgress),\n        (showFallback = workInProgress.mode),\n        (nextPrimaryChildren = mountWorkInProgressOffscreenFiber(\n          { mode: \"hidden\", children: nextPrimaryChildren },\n          showFallback\n        )),\n        (nextProps = createFiberFromFragment(\n          nextProps,\n          showFallback,\n          renderLanes,\n          null\n        )),\n        (nextPrimaryChildren.return = workInProgress),\n        (nextProps.return = workInProgress),\n        (nextPrimaryChildren.sibling = nextProps),\n        (workInProgress.child = nextPrimaryChildren),\n        (nextProps = workInProgress.child),\n        (nextProps.memoizedState = mountSuspenseOffscreenState(renderLanes)),\n        (nextProps.childLanes = getRemainingWorkInPrimaryTree(\n          current,\n          JSCompiler_temp,\n          renderLanes\n        )),\n        (workInProgress.memoizedState = SUSPENDED_MARKER),\n        bailoutOffscreenComponent(null, nextProps)\n      );\n    pushPrimaryTreeSuspenseHandler(workInProgress);\n    return mountSuspensePrimaryChildren(workInProgress, nextPrimaryChildren);\n  }\n  var prevState = current.memoizedState;\n  if (\n    null !== prevState &&\n    ((nextPrimaryChildren = prevState.dehydrated), null !== nextPrimaryChildren)\n  ) {\n    if (didSuspend)\n      workInProgress.flags & 256\n        ? (pushPrimaryTreeSuspenseHandler(workInProgress),\n          (workInProgress.flags &= -257),\n          (workInProgress = retrySuspenseComponentWithoutHydrating(\n            current,\n            workInProgress,\n            renderLanes\n          )))\n        : null !== workInProgress.memoizedState\n          ? (reuseSuspenseHandlerOnStack(workInProgress),\n            (workInProgress.child = current.child),\n            (workInProgress.flags |= 128),\n            (workInProgress = null))\n          : (reuseSuspenseHandlerOnStack(workInProgress),\n            (nextPrimaryChildren = nextProps.fallback),\n            (showFallback = workInProgress.mode),\n            (nextProps = mountWorkInProgressOffscreenFiber(\n              { mode: \"visible\", children: nextProps.children },\n              showFallback\n            )),\n            (nextPrimaryChildren = createFiberFromFragment(\n              nextPrimaryChildren,\n              showFallback,\n              renderLanes,\n              null\n            )),\n            (nextPrimaryChildren.flags |= 2),\n            (nextProps.return = workInProgress),\n            (nextPrimaryChildren.return = workInProgress),\n            (nextProps.sibling = nextPrimaryChildren),\n            (workInProgress.child = nextProps),\n            reconcileChildFibers(\n              workInProgress,\n              current.child,\n              null,\n              renderLanes\n            ),\n            (nextProps = workInProgress.child),\n            (nextProps.memoizedState =\n              mountSuspenseOffscreenState(renderLanes)),\n            (nextProps.childLanes = getRemainingWorkInPrimaryTree(\n              current,\n              JSCompiler_temp,\n              renderLanes\n            )),\n            (workInProgress.memoizedState = SUSPENDED_MARKER),\n            (workInProgress = bailoutOffscreenComponent(null, nextProps)));\n    else if (\n      (pushPrimaryTreeSuspenseHandler(workInProgress),\n      isSuspenseInstanceFallback(nextPrimaryChildren))\n    ) {\n      JSCompiler_temp =\n        nextPrimaryChildren.nextSibling &&\n        nextPrimaryChildren.nextSibling.dataset;\n      if (JSCompiler_temp) var digest = JSCompiler_temp.dgst;\n      JSCompiler_temp = digest;\n      nextProps = Error(formatProdErrorMessage(419));\n      nextProps.stack = \"\";\n      nextProps.digest = JSCompiler_temp;\n      queueHydrationError({ value: nextProps, source: null, stack: null });\n      workInProgress = retrySuspenseComponentWithoutHydrating(\n        current,\n        workInProgress,\n        renderLanes\n      );\n    } else if (\n      (didReceiveUpdate ||\n        propagateParentContextChanges(current, workInProgress, renderLanes, !1),\n      (JSCompiler_temp = 0 !== (renderLanes & current.childLanes)),\n      didReceiveUpdate || JSCompiler_temp)\n    ) {\n      JSCompiler_temp = workInProgressRoot;\n      if (\n        null !== JSCompiler_temp &&\n        ((nextProps = getBumpedLaneForHydration(JSCompiler_temp, renderLanes)),\n        0 !== nextProps && nextProps !== prevState.retryLane)\n      )\n        throw (\n          ((prevState.retryLane = nextProps),\n          enqueueConcurrentRenderForLane(current, nextProps),\n          scheduleUpdateOnFiber(JSCompiler_temp, current, nextProps),\n          SelectiveHydrationException)\n        );\n      isSuspenseInstancePending(nextPrimaryChildren) ||\n        renderDidSuspendDelayIfPossible();\n      workInProgress = retrySuspenseComponentWithoutHydrating(\n        current,\n        workInProgress,\n        renderLanes\n      );\n    } else\n      isSuspenseInstancePending(nextPrimaryChildren)\n        ? ((workInProgress.flags |= 192),\n          (workInProgress.child = current.child),\n          (workInProgress = null))\n        : ((current = prevState.treeContext),\n          (nextHydratableInstance = getNextHydratable(\n            nextPrimaryChildren.nextSibling\n          )),\n          (hydrationParentFiber = workInProgress),\n          (isHydrating = !0),\n          (hydrationErrors = null),\n          (rootOrSingletonContext = !1),\n          null !== current &&\n            restoreSuspendedTreeContext(workInProgress, current),\n          (workInProgress = mountSuspensePrimaryChildren(\n            workInProgress,\n            nextProps.children\n          )),\n          (workInProgress.flags |= 4096));\n    return workInProgress;\n  }\n  if (showFallback)\n    return (\n      reuseSuspenseHandlerOnStack(workInProgress),\n      (nextPrimaryChildren = nextProps.fallback),\n      (showFallback = workInProgress.mode),\n      (prevState = current.child),\n      (digest = prevState.sibling),\n      (nextProps = createWorkInProgress(prevState, {\n        mode: \"hidden\",\n        children: nextProps.children\n      })),\n      (nextProps.subtreeFlags = prevState.subtreeFlags & 65011712),\n      null !== digest\n        ? (nextPrimaryChildren = createWorkInProgress(\n            digest,\n            nextPrimaryChildren\n          ))\n        : ((nextPrimaryChildren = createFiberFromFragment(\n            nextPrimaryChildren,\n            showFallback,\n            renderLanes,\n            null\n          )),\n          (nextPrimaryChildren.flags |= 2)),\n      (nextPrimaryChildren.return = workInProgress),\n      (nextProps.return = workInProgress),\n      (nextProps.sibling = nextPrimaryChildren),\n      (workInProgress.child = nextProps),\n      bailoutOffscreenComponent(null, nextProps),\n      (nextProps = workInProgress.child),\n      (nextPrimaryChildren = current.child.memoizedState),\n      null === nextPrimaryChildren\n        ? (nextPrimaryChildren = mountSuspenseOffscreenState(renderLanes))\n        : ((showFallback = nextPrimaryChildren.cachePool),\n          null !== showFallback\n            ? ((prevState = CacheContext._currentValue),\n              (showFallback =\n                showFallback.parent !== prevState\n                  ? { parent: prevState, pool: prevState }\n                  : showFallback))\n            : (showFallback = getSuspendedCache()),\n          (nextPrimaryChildren = {\n            baseLanes: nextPrimaryChildren.baseLanes | renderLanes,\n            cachePool: showFallback\n          })),\n      (nextProps.memoizedState = nextPrimaryChildren),\n      (nextProps.childLanes = getRemainingWorkInPrimaryTree(\n        current,\n        JSCompiler_temp,\n        renderLanes\n      )),\n      (workInProgress.memoizedState = SUSPENDED_MARKER),\n      bailoutOffscreenComponent(current.child, nextProps)\n    );\n  pushPrimaryTreeSuspenseHandler(workInProgress);\n  renderLanes = current.child;\n  current = renderLanes.sibling;\n  renderLanes = createWorkInProgress(renderLanes, {\n    mode: \"visible\",\n    children: nextProps.children\n  });\n  renderLanes.return = workInProgress;\n  renderLanes.sibling = null;\n  null !== current &&\n    ((JSCompiler_temp = workInProgress.deletions),\n    null === JSCompiler_temp\n      ? ((workInProgress.deletions = [current]), (workInProgress.flags |= 16))\n      : JSCompiler_temp.push(current));\n  workInProgress.child = renderLanes;\n  workInProgress.memoizedState = null;\n  return renderLanes;\n}\nfunction mountSuspensePrimaryChildren(workInProgress, primaryChildren) {\n  primaryChildren = mountWorkInProgressOffscreenFiber(\n    { mode: \"visible\", children: primaryChildren },\n    workInProgress.mode\n  );\n  primaryChildren.return = workInProgress;\n  return (workInProgress.child = primaryChildren);\n}\nfunction mountWorkInProgressOffscreenFiber(offscreenProps, mode) {\n  offscreenProps = createFiberImplClass(22, offscreenProps, null, mode);\n  offscreenProps.lanes = 0;\n  return offscreenProps;\n}\nfunction retrySuspenseComponentWithoutHydrating(\n  current,\n  workInProgress,\n  renderLanes\n) {\n  reconcileChildFibers(workInProgress, current.child, null, renderLanes);\n  current = mountSuspensePrimaryChildren(\n    workInProgress,\n    workInProgress.pendingProps.children\n  );\n  current.flags |= 2;\n  workInProgress.memoizedState = null;\n  return current;\n}\nfunction scheduleSuspenseWorkOnFiber(fiber, renderLanes, propagationRoot) {\n  fiber.lanes |= renderLanes;\n  var alternate = fiber.alternate;\n  null !== alternate && (alternate.lanes |= renderLanes);\n  scheduleContextWorkOnParentPath(fiber.return, renderLanes, propagationRoot);\n}\nfunction initSuspenseListRenderState(\n  workInProgress,\n  isBackwards,\n  tail,\n  lastContentRow,\n  tailMode,\n  treeForkCount\n) {\n  var renderState = workInProgress.memoizedState;\n  null === renderState\n    ? (workInProgress.memoizedState = {\n        isBackwards: isBackwards,\n        rendering: null,\n        renderingStartTime: 0,\n        last: lastContentRow,\n        tail: tail,\n        tailMode: tailMode,\n        treeForkCount: treeForkCount\n      })\n    : ((renderState.isBackwards = isBackwards),\n      (renderState.rendering = null),\n      (renderState.renderingStartTime = 0),\n      (renderState.last = lastContentRow),\n      (renderState.tail = tail),\n      (renderState.tailMode = tailMode),\n      (renderState.treeForkCount = treeForkCount));\n}\nfunction updateSuspenseListComponent(current, workInProgress, renderLanes) {\n  var nextProps = workInProgress.pendingProps,\n    revealOrder = nextProps.revealOrder,\n    tailMode = nextProps.tail;\n  nextProps = nextProps.children;\n  var suspenseContext = suspenseStackCursor.current,\n    shouldForceFallback = 0 !== (suspenseContext & 2);\n  shouldForceFallback\n    ? ((suspenseContext = (suspenseContext & 1) | 2),\n      (workInProgress.flags |= 128))\n    : (suspenseContext &= 1);\n  push(suspenseStackCursor, suspenseContext);\n  reconcileChildren(current, workInProgress, nextProps, renderLanes);\n  nextProps = isHydrating ? treeForkCount : 0;\n  if (!shouldForceFallback && null !== current && 0 !== (current.flags & 128))\n    a: for (current = workInProgress.child; null !== current; ) {\n      if (13 === current.tag)\n        null !== current.memoizedState &&\n          scheduleSuspenseWorkOnFiber(current, renderLanes, workInProgress);\n      else if (19 === current.tag)\n        scheduleSuspenseWorkOnFiber(current, renderLanes, workInProgress);\n      else if (null !== current.child) {\n        current.child.return = current;\n        current = current.child;\n        continue;\n      }\n      if (current === workInProgress) break a;\n      for (; null === current.sibling; ) {\n        if (null === current.return || current.return === workInProgress)\n          break a;\n        current = current.return;\n      }\n      current.sibling.return = current.return;\n      current = current.sibling;\n    }\n  switch (revealOrder) {\n    case \"forwards\":\n      renderLanes = workInProgress.child;\n      for (revealOrder = null; null !== renderLanes; )\n        (current = renderLanes.alternate),\n          null !== current &&\n            null === findFirstSuspended(current) &&\n            (revealOrder = renderLanes),\n          (renderLanes = renderLanes.sibling);\n      renderLanes = revealOrder;\n      null === renderLanes\n        ? ((revealOrder = workInProgress.child), (workInProgress.child = null))\n        : ((revealOrder = renderLanes.sibling), (renderLanes.sibling = null));\n      initSuspenseListRenderState(\n        workInProgress,\n        !1,\n        revealOrder,\n        renderLanes,\n        tailMode,\n        nextProps\n      );\n      break;\n    case \"backwards\":\n    case \"unstable_legacy-backwards\":\n      renderLanes = null;\n      revealOrder = workInProgress.child;\n      for (workInProgress.child = null; null !== revealOrder; ) {\n        current = revealOrder.alternate;\n        if (null !== current && null === findFirstSuspended(current)) {\n          workInProgress.child = revealOrder;\n          break;\n        }\n        current = revealOrder.sibling;\n        revealOrder.sibling = renderLanes;\n        renderLanes = revealOrder;\n        revealOrder = current;\n      }\n      initSuspenseListRenderState(\n        workInProgress,\n        !0,\n        renderLanes,\n        null,\n        tailMode,\n        nextProps\n      );\n      break;\n    case \"together\":\n      initSuspenseListRenderState(\n        workInProgress,\n        !1,\n        null,\n        null,\n        void 0,\n        nextProps\n      );\n      break;\n    default:\n      workInProgress.memoizedState = null;\n  }\n  return workInProgress.child;\n}\nfunction bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes) {\n  null !== current && (workInProgress.dependencies = current.dependencies);\n  workInProgressRootSkippedLanes |= workInProgress.lanes;\n  if (0 === (renderLanes & workInProgress.childLanes))\n    if (null !== current) {\n      if (\n        (propagateParentContextChanges(\n          current,\n          workInProgress,\n          renderLanes,\n          !1\n        ),\n        0 === (renderLanes & workInProgress.childLanes))\n      )\n        return null;\n    } else return null;\n  if (null !== current && workInProgress.child !== current.child)\n    throw Error(formatProdErrorMessage(153));\n  if (null !== workInProgress.child) {\n    current = workInProgress.child;\n    renderLanes = createWorkInProgress(current, current.pendingProps);\n    workInProgress.child = renderLanes;\n    for (renderLanes.return = workInProgress; null !== current.sibling; )\n      (current = current.sibling),\n        (renderLanes = renderLanes.sibling =\n          createWorkInProgress(current, current.pendingProps)),\n        (renderLanes.return = workInProgress);\n    renderLanes.sibling = null;\n  }\n  return workInProgress.child;\n}\nfunction checkScheduledUpdateOrContext(current, renderLanes) {\n  if (0 !== (current.lanes & renderLanes)) return !0;\n  current = current.dependencies;\n  return null !== current && checkIfContextChanged(current) ? !0 : !1;\n}\nfunction attemptEarlyBailoutIfNoScheduledUpdate(\n  current,\n  workInProgress,\n  renderLanes\n) {\n  switch (workInProgress.tag) {\n    case 3:\n      pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n      pushProvider(workInProgress, CacheContext, current.memoizedState.cache);\n      resetHydrationState();\n      break;\n    case 27:\n    case 5:\n      pushHostContext(workInProgress);\n      break;\n    case 4:\n      pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n      break;\n    case 10:\n      pushProvider(\n        workInProgress,\n        workInProgress.type,\n        workInProgress.memoizedProps.value\n      );\n      break;\n    case 31:\n      if (null !== workInProgress.memoizedState)\n        return (\n          (workInProgress.flags |= 128),\n          pushDehydratedActivitySuspenseHandler(workInProgress),\n          null\n        );\n      break;\n    case 13:\n      var state$102 = workInProgress.memoizedState;\n      if (null !== state$102) {\n        if (null !== state$102.dehydrated)\n          return (\n            pushPrimaryTreeSuspenseHandler(workInProgress),\n            (workInProgress.flags |= 128),\n            null\n          );\n        if (0 !== (renderLanes & workInProgress.child.childLanes))\n          return updateSuspenseComponent(current, workInProgress, renderLanes);\n        pushPrimaryTreeSuspenseHandler(workInProgress);\n        current = bailoutOnAlreadyFinishedWork(\n          current,\n          workInProgress,\n          renderLanes\n        );\n        return null !== current ? current.sibling : null;\n      }\n      pushPrimaryTreeSuspenseHandler(workInProgress);\n      break;\n    case 19:\n      var didSuspendBefore = 0 !== (current.flags & 128);\n      state$102 = 0 !== (renderLanes & workInProgress.childLanes);\n      state$102 ||\n        (propagateParentContextChanges(\n          current,\n          workInProgress,\n          renderLanes,\n          !1\n        ),\n        (state$102 = 0 !== (renderLanes & workInProgress.childLanes)));\n      if (didSuspendBefore) {\n        if (state$102)\n          return updateSuspenseListComponent(\n            current,\n            workInProgress,\n            renderLanes\n          );\n        workInProgress.flags |= 128;\n      }\n      didSuspendBefore = workInProgress.memoizedState;\n      null !== didSuspendBefore &&\n        ((didSuspendBefore.rendering = null),\n        (didSuspendBefore.tail = null),\n        (didSuspendBefore.lastEffect = null));\n      push(suspenseStackCursor, suspenseStackCursor.current);\n      if (state$102) break;\n      else return null;\n    case 22:\n      return (\n        (workInProgress.lanes = 0),\n        updateOffscreenComponent(\n          current,\n          workInProgress,\n          renderLanes,\n          workInProgress.pendingProps\n        )\n      );\n    case 24:\n      pushProvider(workInProgress, CacheContext, current.memoizedState.cache);\n  }\n  return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n}\nfunction beginWork(current, workInProgress, renderLanes) {\n  if (null !== current)\n    if (current.memoizedProps !== workInProgress.pendingProps)\n      didReceiveUpdate = !0;\n    else {\n      if (\n        !checkScheduledUpdateOrContext(current, renderLanes) &&\n        0 === (workInProgress.flags & 128)\n      )\n        return (\n          (didReceiveUpdate = !1),\n          attemptEarlyBailoutIfNoScheduledUpdate(\n            current,\n            workInProgress,\n            renderLanes\n          )\n        );\n      didReceiveUpdate = 0 !== (current.flags & 131072) ? !0 : !1;\n    }\n  else\n    (didReceiveUpdate = !1),\n      isHydrating &&\n        0 !== (workInProgress.flags & 1048576) &&\n        pushTreeId(workInProgress, treeForkCount, workInProgress.index);\n  workInProgress.lanes = 0;\n  switch (workInProgress.tag) {\n    case 16:\n      a: {\n        var props = workInProgress.pendingProps;\n        current = resolveLazy(workInProgress.elementType);\n        workInProgress.type = current;\n        if (\"function\" === typeof current)\n          shouldConstruct(current)\n            ? ((props = resolveClassComponentProps(current, props)),\n              (workInProgress.tag = 1),\n              (workInProgress = updateClassComponent(\n                null,\n                workInProgress,\n                current,\n                props,\n                renderLanes\n              )))\n            : ((workInProgress.tag = 0),\n              (workInProgress = updateFunctionComponent(\n                null,\n                workInProgress,\n                current,\n                props,\n                renderLanes\n              )));\n        else {\n          if (void 0 !== current && null !== current) {\n            var $$typeof = current.$$typeof;\n            if ($$typeof === REACT_FORWARD_REF_TYPE) {\n              workInProgress.tag = 11;\n              workInProgress = updateForwardRef(\n                null,\n                workInProgress,\n                current,\n                props,\n                renderLanes\n              );\n              break a;\n            } else if ($$typeof === REACT_MEMO_TYPE) {\n              workInProgress.tag = 14;\n              workInProgress = updateMemoComponent(\n                null,\n                workInProgress,\n                current,\n                props,\n                renderLanes\n              );\n              break a;\n            }\n          }\n          workInProgress = getComponentNameFromType(current) || current;\n          throw Error(formatProdErrorMessage(306, workInProgress, \"\"));\n        }\n      }\n      return workInProgress;\n    case 0:\n      return updateFunctionComponent(\n        current,\n        workInProgress,\n        workInProgress.type,\n        workInProgress.pendingProps,\n        renderLanes\n      );\n    case 1:\n      return (\n        (props = workInProgress.type),\n        ($$typeof = resolveClassComponentProps(\n          props,\n          workInProgress.pendingProps\n        )),\n        updateClassComponent(\n          current,\n          workInProgress,\n          props,\n          $$typeof,\n          renderLanes\n        )\n      );\n    case 3:\n      a: {\n        pushHostContainer(\n          workInProgress,\n          workInProgress.stateNode.containerInfo\n        );\n        if (null === current) throw Error(formatProdErrorMessage(387));\n        props = workInProgress.pendingProps;\n        var prevState = workInProgress.memoizedState;\n        $$typeof = prevState.element;\n        cloneUpdateQueue(current, workInProgress);\n        processUpdateQueue(workInProgress, props, null, renderLanes);\n        var nextState = workInProgress.memoizedState;\n        props = nextState.cache;\n        pushProvider(workInProgress, CacheContext, props);\n        props !== prevState.cache &&\n          propagateContextChanges(\n            workInProgress,\n            [CacheContext],\n            renderLanes,\n            !0\n          );\n        suspendIfUpdateReadFromEntangledAsyncAction();\n        props = nextState.element;\n        if (prevState.isDehydrated)\n          if (\n            ((prevState = {\n              element: props,\n              isDehydrated: !1,\n              cache: nextState.cache\n            }),\n            (workInProgress.updateQueue.baseState = prevState),\n            (workInProgress.memoizedState = prevState),\n            workInProgress.flags & 256)\n          ) {\n            workInProgress = mountHostRootWithoutHydrating(\n              current,\n              workInProgress,\n              props,\n              renderLanes\n            );\n            break a;\n          } else if (props !== $$typeof) {\n            $$typeof = createCapturedValueAtFiber(\n              Error(formatProdErrorMessage(424)),\n              workInProgress\n            );\n            queueHydrationError($$typeof);\n            workInProgress = mountHostRootWithoutHydrating(\n              current,\n              workInProgress,\n              props,\n              renderLanes\n            );\n            break a;\n          } else {\n            current = workInProgress.stateNode.containerInfo;\n            switch (current.nodeType) {\n              case 9:\n                current = current.body;\n                break;\n              default:\n                current =\n                  \"HTML\" === current.nodeName\n                    ? current.ownerDocument.body\n                    : current;\n            }\n            nextHydratableInstance = getNextHydratable(current.firstChild);\n            hydrationParentFiber = workInProgress;\n            isHydrating = !0;\n            hydrationErrors = null;\n            rootOrSingletonContext = !0;\n            renderLanes = mountChildFibers(\n              workInProgress,\n              null,\n              props,\n              renderLanes\n            );\n            for (workInProgress.child = renderLanes; renderLanes; )\n              (renderLanes.flags = (renderLanes.flags & -3) | 4096),\n                (renderLanes = renderLanes.sibling);\n          }\n        else {\n          resetHydrationState();\n          if (props === $$typeof) {\n            workInProgress = bailoutOnAlreadyFinishedWork(\n              current,\n              workInProgress,\n              renderLanes\n            );\n            break a;\n          }\n          reconcileChildren(current, workInProgress, props, renderLanes);\n        }\n        workInProgress = workInProgress.child;\n      }\n      return workInProgress;\n    case 26:\n      return (\n        markRef(current, workInProgress),\n        null === current\n          ? (renderLanes = getResource(\n              workInProgress.type,\n              null,\n              workInProgress.pendingProps,\n              null\n            ))\n            ? (workInProgress.memoizedState = renderLanes)\n            : isHydrating ||\n              ((renderLanes = workInProgress.type),\n              (current = workInProgress.pendingProps),\n              (props = getOwnerDocumentFromRootContainer(\n                rootInstanceStackCursor.current\n              ).createElement(renderLanes)),\n              (props[internalInstanceKey] = workInProgress),\n              (props[internalPropsKey] = current),\n              setInitialProperties(props, renderLanes, current),\n              markNodeAsHoistable(props),\n              (workInProgress.stateNode = props))\n          : (workInProgress.memoizedState = getResource(\n              workInProgress.type,\n              current.memoizedProps,\n              workInProgress.pendingProps,\n              current.memoizedState\n            )),\n        null\n      );\n    case 27:\n      return (\n        pushHostContext(workInProgress),\n        null === current &&\n          isHydrating &&\n          ((props = workInProgress.stateNode =\n            resolveSingletonInstance(\n              workInProgress.type,\n              workInProgress.pendingProps,\n              rootInstanceStackCursor.current\n            )),\n          (hydrationParentFiber = workInProgress),\n          (rootOrSingletonContext = !0),\n          ($$typeof = nextHydratableInstance),\n          isSingletonScope(workInProgress.type)\n            ? ((previousHydratableOnEnteringScopedSingleton = $$typeof),\n              (nextHydratableInstance = getNextHydratable(props.firstChild)))\n            : (nextHydratableInstance = $$typeof)),\n        reconcileChildren(\n          current,\n          workInProgress,\n          workInProgress.pendingProps.children,\n          renderLanes\n        ),\n        markRef(current, workInProgress),\n        null === current && (workInProgress.flags |= 4194304),\n        workInProgress.child\n      );\n    case 5:\n      if (null === current && isHydrating) {\n        if (($$typeof = props = nextHydratableInstance))\n          (props = canHydrateInstance(\n            props,\n            workInProgress.type,\n            workInProgress.pendingProps,\n            rootOrSingletonContext\n          )),\n            null !== props\n              ? ((workInProgress.stateNode = props),\n                (hydrationParentFiber = workInProgress),\n                (nextHydratableInstance = getNextHydratable(props.firstChild)),\n                (rootOrSingletonContext = !1),\n                ($$typeof = !0))\n              : ($$typeof = !1);\n        $$typeof || throwOnHydrationMismatch(workInProgress);\n      }\n      pushHostContext(workInProgress);\n      $$typeof = workInProgress.type;\n      prevState = workInProgress.pendingProps;\n      nextState = null !== current ? current.memoizedProps : null;\n      props = prevState.children;\n      shouldSetTextContent($$typeof, prevState)\n        ? (props = null)\n        : null !== nextState &&\n          shouldSetTextContent($$typeof, nextState) &&\n          (workInProgress.flags |= 32);\n      null !== workInProgress.memoizedState &&\n        (($$typeof = renderWithHooks(\n          current,\n          workInProgress,\n          TransitionAwareHostComponent,\n          null,\n          null,\n          renderLanes\n        )),\n        (HostTransitionContext._currentValue = $$typeof));\n      markRef(current, workInProgress);\n      reconcileChildren(current, workInProgress, props, renderLanes);\n      return workInProgress.child;\n    case 6:\n      if (null === current && isHydrating) {\n        if ((current = renderLanes = nextHydratableInstance))\n          (renderLanes = canHydrateTextInstance(\n            renderLanes,\n            workInProgress.pendingProps,\n            rootOrSingletonContext\n          )),\n            null !== renderLanes\n              ? ((workInProgress.stateNode = renderLanes),\n                (hydrationParentFiber = workInProgress),\n                (nextHydratableInstance = null),\n                (current = !0))\n              : (current = !1);\n        current || throwOnHydrationMismatch(workInProgress);\n      }\n      return null;\n    case 13:\n      return updateSuspenseComponent(current, workInProgress, renderLanes);\n    case 4:\n      return (\n        pushHostContainer(\n          workInProgress,\n          workInProgress.stateNode.containerInfo\n        ),\n        (props = workInProgress.pendingProps),\n        null === current\n          ? (workInProgress.child = reconcileChildFibers(\n              workInProgress,\n              null,\n              props,\n              renderLanes\n            ))\n          : reconcileChildren(current, workInProgress, props, renderLanes),\n        workInProgress.child\n      );\n    case 11:\n      return updateForwardRef(\n        current,\n        workInProgress,\n        workInProgress.type,\n        workInProgress.pendingProps,\n        renderLanes\n      );\n    case 7:\n      return (\n        reconcileChildren(\n          current,\n          workInProgress,\n          workInProgress.pendingProps,\n          renderLanes\n        ),\n        workInProgress.child\n      );\n    case 8:\n      return (\n        reconcileChildren(\n          current,\n          workInProgress,\n          workInProgress.pendingProps.children,\n          renderLanes\n        ),\n        workInProgress.child\n      );\n    case 12:\n      return (\n        reconcileChildren(\n          current,\n          workInProgress,\n          workInProgress.pendingProps.children,\n          renderLanes\n        ),\n        workInProgress.child\n      );\n    case 10:\n      return (\n        (props = workInProgress.pendingProps),\n        pushProvider(workInProgress, workInProgress.type, props.value),\n        reconcileChildren(current, workInProgress, props.children, renderLanes),\n        workInProgress.child\n      );\n    case 9:\n      return (\n        ($$typeof = workInProgress.type._context),\n        (props = workInProgress.pendingProps.children),\n        prepareToReadContext(workInProgress),\n        ($$typeof = readContext($$typeof)),\n        (props = props($$typeof)),\n        (workInProgress.flags |= 1),\n        reconcileChildren(current, workInProgress, props, renderLanes),\n        workInProgress.child\n      );\n    case 14:\n      return updateMemoComponent(\n        current,\n        workInProgress,\n        workInProgress.type,\n        workInProgress.pendingProps,\n        renderLanes\n      );\n    case 15:\n      return updateSimpleMemoComponent(\n        current,\n        workInProgress,\n        workInProgress.type,\n        workInProgress.pendingProps,\n        renderLanes\n      );\n    case 19:\n      return updateSuspenseListComponent(current, workInProgress, renderLanes);\n    case 31:\n      return updateActivityComponent(current, workInProgress, renderLanes);\n    case 22:\n      return updateOffscreenComponent(\n        current,\n        workInProgress,\n        renderLanes,\n        workInProgress.pendingProps\n      );\n    case 24:\n      return (\n        prepareToReadContext(workInProgress),\n        (props = readContext(CacheContext)),\n        null === current\n          ? (($$typeof = peekCacheFromPool()),\n            null === $$typeof &&\n              (($$typeof = workInProgressRoot),\n              (prevState = createCache()),\n              ($$typeof.pooledCache = prevState),\n              prevState.refCount++,\n              null !== prevState && ($$typeof.pooledCacheLanes |= renderLanes),\n              ($$typeof = prevState)),\n            (workInProgress.memoizedState = { parent: props, cache: $$typeof }),\n            initializeUpdateQueue(workInProgress),\n            pushProvider(workInProgress, CacheContext, $$typeof))\n          : (0 !== (current.lanes & renderLanes) &&\n              (cloneUpdateQueue(current, workInProgress),\n              processUpdateQueue(workInProgress, null, null, renderLanes),\n              suspendIfUpdateReadFromEntangledAsyncAction()),\n            ($$typeof = current.memoizedState),\n            (prevState = workInProgress.memoizedState),\n            $$typeof.parent !== props\n              ? (($$typeof = { parent: props, cache: props }),\n                (workInProgress.memoizedState = $$typeof),\n                0 === workInProgress.lanes &&\n                  (workInProgress.memoizedState =\n                    workInProgress.updateQueue.baseState =\n                      $$typeof),\n                pushProvider(workInProgress, CacheContext, props))\n              : ((props = prevState.cache),\n                pushProvider(workInProgress, CacheContext, props),\n                props !== $$typeof.cache &&\n                  propagateContextChanges(\n                    workInProgress,\n                    [CacheContext],\n                    renderLanes,\n                    !0\n                  ))),\n        reconcileChildren(\n          current,\n          workInProgress,\n          workInProgress.pendingProps.children,\n          renderLanes\n        ),\n        workInProgress.child\n      );\n    case 29:\n      throw workInProgress.pendingProps;\n  }\n  throw Error(formatProdErrorMessage(156, workInProgress.tag));\n}\nfunction markUpdate(workInProgress) {\n  workInProgress.flags |= 4;\n}\nfunction preloadInstanceAndSuspendIfNeeded(\n  workInProgress,\n  type,\n  oldProps,\n  newProps,\n  renderLanes\n) {\n  if ((type = 0 !== (workInProgress.mode & 32))) type = !1;\n  if (type) {\n    if (\n      ((workInProgress.flags |= 16777216),\n      (renderLanes & 335544128) === renderLanes)\n    )\n      if (workInProgress.stateNode.complete) workInProgress.flags |= 8192;\n      else if (shouldRemainOnPreviousScreen()) workInProgress.flags |= 8192;\n      else\n        throw (\n          ((suspendedThenable = noopSuspenseyCommitThenable),\n          SuspenseyCommitException)\n        );\n  } else workInProgress.flags &= -16777217;\n}\nfunction preloadResourceAndSuspendIfNeeded(workInProgress, resource) {\n  if (\"stylesheet\" !== resource.type || 0 !== (resource.state.loading & 4))\n    workInProgress.flags &= -16777217;\n  else if (((workInProgress.flags |= 16777216), !preloadResource(resource)))\n    if (shouldRemainOnPreviousScreen()) workInProgress.flags |= 8192;\n    else\n      throw (\n        ((suspendedThenable = noopSuspenseyCommitThenable),\n        SuspenseyCommitException)\n      );\n}\nfunction scheduleRetryEffect(workInProgress, retryQueue) {\n  null !== retryQueue && (workInProgress.flags |= 4);\n  workInProgress.flags & 16384 &&\n    ((retryQueue =\n      22 !== workInProgress.tag ? claimNextRetryLane() : 536870912),\n    (workInProgress.lanes |= retryQueue),\n    (workInProgressSuspendedRetryLanes |= retryQueue));\n}\nfunction cutOffTailIfNeeded(renderState, hasRenderedATailFallback) {\n  if (!isHydrating)\n    switch (renderState.tailMode) {\n      case \"hidden\":\n        hasRenderedATailFallback = renderState.tail;\n        for (var lastTailNode = null; null !== hasRenderedATailFallback; )\n          null !== hasRenderedATailFallback.alternate &&\n            (lastTailNode = hasRenderedATailFallback),\n            (hasRenderedATailFallback = hasRenderedATailFallback.sibling);\n        null === lastTailNode\n          ? (renderState.tail = null)\n          : (lastTailNode.sibling = null);\n        break;\n      case \"collapsed\":\n        lastTailNode = renderState.tail;\n        for (var lastTailNode$106 = null; null !== lastTailNode; )\n          null !== lastTailNode.alternate && (lastTailNode$106 = lastTailNode),\n            (lastTailNode = lastTailNode.sibling);\n        null === lastTailNode$106\n          ? hasRenderedATailFallback || null === renderState.tail\n            ? (renderState.tail = null)\n            : (renderState.tail.sibling = null)\n          : (lastTailNode$106.sibling = null);\n    }\n}\nfunction bubbleProperties(completedWork) {\n  var didBailout =\n      null !== completedWork.alternate &&\n      completedWork.alternate.child === completedWork.child,\n    newChildLanes = 0,\n    subtreeFlags = 0;\n  if (didBailout)\n    for (var child$107 = completedWork.child; null !== child$107; )\n      (newChildLanes |= child$107.lanes | child$107.childLanes),\n        (subtreeFlags |= child$107.subtreeFlags & 65011712),\n        (subtreeFlags |= child$107.flags & 65011712),\n        (child$107.return = completedWork),\n        (child$107 = child$107.sibling);\n  else\n    for (child$107 = completedWork.child; null !== child$107; )\n      (newChildLanes |= child$107.lanes | child$107.childLanes),\n        (subtreeFlags |= child$107.subtreeFlags),\n        (subtreeFlags |= child$107.flags),\n        (child$107.return = completedWork),\n        (child$107 = child$107.sibling);\n  completedWork.subtreeFlags |= subtreeFlags;\n  completedWork.childLanes = newChildLanes;\n  return didBailout;\n}\nfunction completeWork(current, workInProgress, renderLanes) {\n  var newProps = workInProgress.pendingProps;\n  popTreeContext(workInProgress);\n  switch (workInProgress.tag) {\n    case 16:\n    case 15:\n    case 0:\n    case 11:\n    case 7:\n    case 8:\n    case 12:\n    case 9:\n    case 14:\n      return bubbleProperties(workInProgress), null;\n    case 1:\n      return bubbleProperties(workInProgress), null;\n    case 3:\n      renderLanes = workInProgress.stateNode;\n      newProps = null;\n      null !== current && (newProps = current.memoizedState.cache);\n      workInProgress.memoizedState.cache !== newProps &&\n        (workInProgress.flags |= 2048);\n      popProvider(CacheContext);\n      popHostContainer();\n      renderLanes.pendingContext &&\n        ((renderLanes.context = renderLanes.pendingContext),\n        (renderLanes.pendingContext = null));\n      if (null === current || null === current.child)\n        popHydrationState(workInProgress)\n          ? markUpdate(workInProgress)\n          : null === current ||\n            (current.memoizedState.isDehydrated &&\n              0 === (workInProgress.flags & 256)) ||\n            ((workInProgress.flags |= 1024),\n            upgradeHydrationErrorsToRecoverable());\n      bubbleProperties(workInProgress);\n      return null;\n    case 26:\n      var type = workInProgress.type,\n        nextResource = workInProgress.memoizedState;\n      null === current\n        ? (markUpdate(workInProgress),\n          null !== nextResource\n            ? (bubbleProperties(workInProgress),\n              preloadResourceAndSuspendIfNeeded(workInProgress, nextResource))\n            : (bubbleProperties(workInProgress),\n              preloadInstanceAndSuspendIfNeeded(\n                workInProgress,\n                type,\n                null,\n                newProps,\n                renderLanes\n              )))\n        : nextResource\n          ? nextResource !== current.memoizedState\n            ? (markUpdate(workInProgress),\n              bubbleProperties(workInProgress),\n              preloadResourceAndSuspendIfNeeded(workInProgress, nextResource))\n            : (bubbleProperties(workInProgress),\n              (workInProgress.flags &= -16777217))\n          : ((current = current.memoizedProps),\n            current !== newProps && markUpdate(workInProgress),\n            bubbleProperties(workInProgress),\n            preloadInstanceAndSuspendIfNeeded(\n              workInProgress,\n              type,\n              current,\n              newProps,\n              renderLanes\n            ));\n      return null;\n    case 27:\n      popHostContext(workInProgress);\n      renderLanes = rootInstanceStackCursor.current;\n      type = workInProgress.type;\n      if (null !== current && null != workInProgress.stateNode)\n        current.memoizedProps !== newProps && markUpdate(workInProgress);\n      else {\n        if (!newProps) {\n          if (null === workInProgress.stateNode)\n            throw Error(formatProdErrorMessage(166));\n          bubbleProperties(workInProgress);\n          return null;\n        }\n        current = contextStackCursor.current;\n        popHydrationState(workInProgress)\n          ? prepareToHydrateHostInstance(workInProgress, current)\n          : ((current = resolveSingletonInstance(type, newProps, renderLanes)),\n            (workInProgress.stateNode = current),\n            markUpdate(workInProgress));\n      }\n      bubbleProperties(workInProgress);\n      return null;\n    case 5:\n      popHostContext(workInProgress);\n      type = workInProgress.type;\n      if (null !== current && null != workInProgress.stateNode)\n        current.memoizedProps !== newProps && markUpdate(workInProgress);\n      else {\n        if (!newProps) {\n          if (null === workInProgress.stateNode)\n            throw Error(formatProdErrorMessage(166));\n          bubbleProperties(workInProgress);\n          return null;\n        }\n        nextResource = contextStackCursor.current;\n        if (popHydrationState(workInProgress))\n          prepareToHydrateHostInstance(workInProgress, nextResource);\n        else {\n          var ownerDocument = getOwnerDocumentFromRootContainer(\n            rootInstanceStackCursor.current\n          );\n          switch (nextResource) {\n            case 1:\n              nextResource = ownerDocument.createElementNS(\n                \"http://www.w3.org/2000/svg\",\n                type\n              );\n              break;\n            case 2:\n              nextResource = ownerDocument.createElementNS(\n                \"http://www.w3.org/1998/Math/MathML\",\n                type\n              );\n              break;\n            default:\n              switch (type) {\n                case \"svg\":\n                  nextResource = ownerDocument.createElementNS(\n                    \"http://www.w3.org/2000/svg\",\n                    type\n                  );\n                  break;\n                case \"math\":\n                  nextResource = ownerDocument.createElementNS(\n                    \"http://www.w3.org/1998/Math/MathML\",\n                    type\n                  );\n                  break;\n                case \"script\":\n                  nextResource = ownerDocument.createElement(\"div\");\n                  nextResource.innerHTML = \"<script>\\x3c/script>\";\n                  nextResource = nextResource.removeChild(\n                    nextResource.firstChild\n                  );\n                  break;\n                case \"select\":\n                  nextResource =\n                    \"string\" === typeof newProps.is\n                      ? ownerDocument.createElement(\"select\", {\n                          is: newProps.is\n                        })\n                      : ownerDocument.createElement(\"select\");\n                  newProps.multiple\n                    ? (nextResource.multiple = !0)\n                    : newProps.size && (nextResource.size = newProps.size);\n                  break;\n                default:\n                  nextResource =\n                    \"string\" === typeof newProps.is\n                      ? ownerDocument.createElement(type, { is: newProps.is })\n                      : ownerDocument.createElement(type);\n              }\n          }\n          nextResource[internalInstanceKey] = workInProgress;\n          nextResource[internalPropsKey] = newProps;\n          a: for (\n            ownerDocument = workInProgress.child;\n            null !== ownerDocument;\n\n          ) {\n            if (5 === ownerDocument.tag || 6 === ownerDocument.tag)\n              nextResource.appendChild(ownerDocument.stateNode);\n            else if (\n              4 !== ownerDocument.tag &&\n              27 !== ownerDocument.tag &&\n              null !== ownerDocument.child\n            ) {\n              ownerDocument.child.return = ownerDocument;\n              ownerDocument = ownerDocument.child;\n              continue;\n            }\n            if (ownerDocument === workInProgress) break a;\n            for (; null === ownerDocument.sibling; ) {\n              if (\n                null === ownerDocument.return ||\n                ownerDocument.return === workInProgress\n              )\n                break a;\n              ownerDocument = ownerDocument.return;\n            }\n            ownerDocument.sibling.return = ownerDocument.return;\n            ownerDocument = ownerDocument.sibling;\n          }\n          workInProgress.stateNode = nextResource;\n          a: switch (\n            (setInitialProperties(nextResource, type, newProps), type)\n          ) {\n            case \"button\":\n            case \"input\":\n            case \"select\":\n            case \"textarea\":\n              newProps = !!newProps.autoFocus;\n              break a;\n            case \"img\":\n              newProps = !0;\n              break a;\n            default:\n              newProps = !1;\n          }\n          newProps && markUpdate(workInProgress);\n        }\n      }\n      bubbleProperties(workInProgress);\n      preloadInstanceAndSuspendIfNeeded(\n        workInProgress,\n        workInProgress.type,\n        null === current ? null : current.memoizedProps,\n        workInProgress.pendingProps,\n        renderLanes\n      );\n      return null;\n    case 6:\n      if (current && null != workInProgress.stateNode)\n        current.memoizedProps !== newProps && markUpdate(workInProgress);\n      else {\n        if (\"string\" !== typeof newProps && null === workInProgress.stateNode)\n          throw Error(formatProdErrorMessage(166));\n        current = rootInstanceStackCursor.current;\n        if (popHydrationState(workInProgress)) {\n          current = workInProgress.stateNode;\n          renderLanes = workInProgress.memoizedProps;\n          newProps = null;\n          type = hydrationParentFiber;\n          if (null !== type)\n            switch (type.tag) {\n              case 27:\n              case 5:\n                newProps = type.memoizedProps;\n            }\n          current[internalInstanceKey] = workInProgress;\n          current =\n            current.nodeValue === renderLanes ||\n            (null !== newProps && !0 === newProps.suppressHydrationWarning) ||\n            checkForUnmatchedText(current.nodeValue, renderLanes)\n              ? !0\n              : !1;\n          current || throwOnHydrationMismatch(workInProgress, !0);\n        } else\n          (current =\n            getOwnerDocumentFromRootContainer(current).createTextNode(\n              newProps\n            )),\n            (current[internalInstanceKey] = workInProgress),\n            (workInProgress.stateNode = current);\n      }\n      bubbleProperties(workInProgress);\n      return null;\n    case 31:\n      renderLanes = workInProgress.memoizedState;\n      if (null === current || null !== current.memoizedState) {\n        newProps = popHydrationState(workInProgress);\n        if (null !== renderLanes) {\n          if (null === current) {\n            if (!newProps) throw Error(formatProdErrorMessage(318));\n            current = workInProgress.memoizedState;\n            current = null !== current ? current.dehydrated : null;\n            if (!current) throw Error(formatProdErrorMessage(557));\n            current[internalInstanceKey] = workInProgress;\n          } else\n            resetHydrationState(),\n              0 === (workInProgress.flags & 128) &&\n                (workInProgress.memoizedState = null),\n              (workInProgress.flags |= 4);\n          bubbleProperties(workInProgress);\n          current = !1;\n        } else\n          (renderLanes = upgradeHydrationErrorsToRecoverable()),\n            null !== current &&\n              null !== current.memoizedState &&\n              (current.memoizedState.hydrationErrors = renderLanes),\n            (current = !0);\n        if (!current) {\n          if (workInProgress.flags & 256)\n            return popSuspenseHandler(workInProgress), workInProgress;\n          popSuspenseHandler(workInProgress);\n          return null;\n        }\n        if (0 !== (workInProgress.flags & 128))\n          throw Error(formatProdErrorMessage(558));\n      }\n      bubbleProperties(workInProgress);\n      return null;\n    case 13:\n      newProps = workInProgress.memoizedState;\n      if (\n        null === current ||\n        (null !== current.memoizedState &&\n          null !== current.memoizedState.dehydrated)\n      ) {\n        type = popHydrationState(workInProgress);\n        if (null !== newProps && null !== newProps.dehydrated) {\n          if (null === current) {\n            if (!type) throw Error(formatProdErrorMessage(318));\n            type = workInProgress.memoizedState;\n            type = null !== type ? type.dehydrated : null;\n            if (!type) throw Error(formatProdErrorMessage(317));\n            type[internalInstanceKey] = workInProgress;\n          } else\n            resetHydrationState(),\n              0 === (workInProgress.flags & 128) &&\n                (workInProgress.memoizedState = null),\n              (workInProgress.flags |= 4);\n          bubbleProperties(workInProgress);\n          type = !1;\n        } else\n          (type = upgradeHydrationErrorsToRecoverable()),\n            null !== current &&\n              null !== current.memoizedState &&\n              (current.memoizedState.hydrationErrors = type),\n            (type = !0);\n        if (!type) {\n          if (workInProgress.flags & 256)\n            return popSuspenseHandler(workInProgress), workInProgress;\n          popSuspenseHandler(workInProgress);\n          return null;\n        }\n      }\n      popSuspenseHandler(workInProgress);\n      if (0 !== (workInProgress.flags & 128))\n        return (workInProgress.lanes = renderLanes), workInProgress;\n      renderLanes = null !== newProps;\n      current = null !== current && null !== current.memoizedState;\n      renderLanes &&\n        ((newProps = workInProgress.child),\n        (type = null),\n        null !== newProps.alternate &&\n          null !== newProps.alternate.memoizedState &&\n          null !== newProps.alternate.memoizedState.cachePool &&\n          (type = newProps.alternate.memoizedState.cachePool.pool),\n        (nextResource = null),\n        null !== newProps.memoizedState &&\n          null !== newProps.memoizedState.cachePool &&\n          (nextResource = newProps.memoizedState.cachePool.pool),\n        nextResource !== type && (newProps.flags |= 2048));\n      renderLanes !== current &&\n        renderLanes &&\n        (workInProgress.child.flags |= 8192);\n      scheduleRetryEffect(workInProgress, workInProgress.updateQueue);\n      bubbleProperties(workInProgress);\n      return null;\n    case 4:\n      return (\n        popHostContainer(),\n        null === current &&\n          listenToAllSupportedEvents(workInProgress.stateNode.containerInfo),\n        bubbleProperties(workInProgress),\n        null\n      );\n    case 10:\n      return (\n        popProvider(workInProgress.type), bubbleProperties(workInProgress), null\n      );\n    case 19:\n      pop(suspenseStackCursor);\n      newProps = workInProgress.memoizedState;\n      if (null === newProps) return bubbleProperties(workInProgress), null;\n      type = 0 !== (workInProgress.flags & 128);\n      nextResource = newProps.rendering;\n      if (null === nextResource)\n        if (type) cutOffTailIfNeeded(newProps, !1);\n        else {\n          if (\n            0 !== workInProgressRootExitStatus ||\n            (null !== current && 0 !== (current.flags & 128))\n          )\n            for (current = workInProgress.child; null !== current; ) {\n              nextResource = findFirstSuspended(current);\n              if (null !== nextResource) {\n                workInProgress.flags |= 128;\n                cutOffTailIfNeeded(newProps, !1);\n                current = nextResource.updateQueue;\n                workInProgress.updateQueue = current;\n                scheduleRetryEffect(workInProgress, current);\n                workInProgress.subtreeFlags = 0;\n                current = renderLanes;\n                for (renderLanes = workInProgress.child; null !== renderLanes; )\n                  resetWorkInProgress(renderLanes, current),\n                    (renderLanes = renderLanes.sibling);\n                push(\n                  suspenseStackCursor,\n                  (suspenseStackCursor.current & 1) | 2\n                );\n                isHydrating &&\n                  pushTreeFork(workInProgress, newProps.treeForkCount);\n                return workInProgress.child;\n              }\n              current = current.sibling;\n            }\n          null !== newProps.tail &&\n            now() > workInProgressRootRenderTargetTime &&\n            ((workInProgress.flags |= 128),\n            (type = !0),\n            cutOffTailIfNeeded(newProps, !1),\n            (workInProgress.lanes = 4194304));\n        }\n      else {\n        if (!type)\n          if (\n            ((current = findFirstSuspended(nextResource)), null !== current)\n          ) {\n            if (\n              ((workInProgress.flags |= 128),\n              (type = !0),\n              (current = current.updateQueue),\n              (workInProgress.updateQueue = current),\n              scheduleRetryEffect(workInProgress, current),\n              cutOffTailIfNeeded(newProps, !0),\n              null === newProps.tail &&\n                \"hidden\" === newProps.tailMode &&\n                !nextResource.alternate &&\n                !isHydrating)\n            )\n              return bubbleProperties(workInProgress), null;\n          } else\n            2 * now() - newProps.renderingStartTime >\n              workInProgressRootRenderTargetTime &&\n              536870912 !== renderLanes &&\n              ((workInProgress.flags |= 128),\n              (type = !0),\n              cutOffTailIfNeeded(newProps, !1),\n              (workInProgress.lanes = 4194304));\n        newProps.isBackwards\n          ? ((nextResource.sibling = workInProgress.child),\n            (workInProgress.child = nextResource))\n          : ((current = newProps.last),\n            null !== current\n              ? (current.sibling = nextResource)\n              : (workInProgress.child = nextResource),\n            (newProps.last = nextResource));\n      }\n      if (null !== newProps.tail)\n        return (\n          (current = newProps.tail),\n          (newProps.rendering = current),\n          (newProps.tail = current.sibling),\n          (newProps.renderingStartTime = now()),\n          (current.sibling = null),\n          (renderLanes = suspenseStackCursor.current),\n          push(\n            suspenseStackCursor,\n            type ? (renderLanes & 1) | 2 : renderLanes & 1\n          ),\n          isHydrating && pushTreeFork(workInProgress, newProps.treeForkCount),\n          current\n        );\n      bubbleProperties(workInProgress);\n      return null;\n    case 22:\n    case 23:\n      return (\n        popSuspenseHandler(workInProgress),\n        popHiddenContext(),\n        (newProps = null !== workInProgress.memoizedState),\n        null !== current\n          ? (null !== current.memoizedState) !== newProps &&\n            (workInProgress.flags |= 8192)\n          : newProps && (workInProgress.flags |= 8192),\n        newProps\n          ? 0 !== (renderLanes & 536870912) &&\n            0 === (workInProgress.flags & 128) &&\n            (bubbleProperties(workInProgress),\n            workInProgress.subtreeFlags & 6 && (workInProgress.flags |= 8192))\n          : bubbleProperties(workInProgress),\n        (renderLanes = workInProgress.updateQueue),\n        null !== renderLanes &&\n          scheduleRetryEffect(workInProgress, renderLanes.retryQueue),\n        (renderLanes = null),\n        null !== current &&\n          null !== current.memoizedState &&\n          null !== current.memoizedState.cachePool &&\n          (renderLanes = current.memoizedState.cachePool.pool),\n        (newProps = null),\n        null !== workInProgress.memoizedState &&\n          null !== workInProgress.memoizedState.cachePool &&\n          (newProps = workInProgress.memoizedState.cachePool.pool),\n        newProps !== renderLanes && (workInProgress.flags |= 2048),\n        null !== current && pop(resumedCache),\n        null\n      );\n    case 24:\n      return (\n        (renderLanes = null),\n        null !== current && (renderLanes = current.memoizedState.cache),\n        workInProgress.memoizedState.cache !== renderLanes &&\n          (workInProgress.flags |= 2048),\n        popProvider(CacheContext),\n        bubbleProperties(workInProgress),\n        null\n      );\n    case 25:\n      return null;\n    case 30:\n      return null;\n  }\n  throw Error(formatProdErrorMessage(156, workInProgress.tag));\n}\nfunction unwindWork(current, workInProgress) {\n  popTreeContext(workInProgress);\n  switch (workInProgress.tag) {\n    case 1:\n      return (\n        (current = workInProgress.flags),\n        current & 65536\n          ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n          : null\n      );\n    case 3:\n      return (\n        popProvider(CacheContext),\n        popHostContainer(),\n        (current = workInProgress.flags),\n        0 !== (current & 65536) && 0 === (current & 128)\n          ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n          : null\n      );\n    case 26:\n    case 27:\n    case 5:\n      return popHostContext(workInProgress), null;\n    case 31:\n      if (null !== workInProgress.memoizedState) {\n        popSuspenseHandler(workInProgress);\n        if (null === workInProgress.alternate)\n          throw Error(formatProdErrorMessage(340));\n        resetHydrationState();\n      }\n      current = workInProgress.flags;\n      return current & 65536\n        ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n        : null;\n    case 13:\n      popSuspenseHandler(workInProgress);\n      current = workInProgress.memoizedState;\n      if (null !== current && null !== current.dehydrated) {\n        if (null === workInProgress.alternate)\n          throw Error(formatProdErrorMessage(340));\n        resetHydrationState();\n      }\n      current = workInProgress.flags;\n      return current & 65536\n        ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n        : null;\n    case 19:\n      return pop(suspenseStackCursor), null;\n    case 4:\n      return popHostContainer(), null;\n    case 10:\n      return popProvider(workInProgress.type), null;\n    case 22:\n    case 23:\n      return (\n        popSuspenseHandler(workInProgress),\n        popHiddenContext(),\n        null !== current && pop(resumedCache),\n        (current = workInProgress.flags),\n        current & 65536\n          ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n          : null\n      );\n    case 24:\n      return popProvider(CacheContext), null;\n    case 25:\n      return null;\n    default:\n      return null;\n  }\n}\nfunction unwindInterruptedWork(current, interruptedWork) {\n  popTreeContext(interruptedWork);\n  switch (interruptedWork.tag) {\n    case 3:\n      popProvider(CacheContext);\n      popHostContainer();\n      break;\n    case 26:\n    case 27:\n    case 5:\n      popHostContext(interruptedWork);\n      break;\n    case 4:\n      popHostContainer();\n      break;\n    case 31:\n      null !== interruptedWork.memoizedState &&\n        popSuspenseHandler(interruptedWork);\n      break;\n    case 13:\n      popSuspenseHandler(interruptedWork);\n      break;\n    case 19:\n      pop(suspenseStackCursor);\n      break;\n    case 10:\n      popProvider(interruptedWork.type);\n      break;\n    case 22:\n    case 23:\n      popSuspenseHandler(interruptedWork);\n      popHiddenContext();\n      null !== current && pop(resumedCache);\n      break;\n    case 24:\n      popProvider(CacheContext);\n  }\n}\nfunction commitHookEffectListMount(flags, finishedWork) {\n  try {\n    var updateQueue = finishedWork.updateQueue,\n      lastEffect = null !== updateQueue ? updateQueue.lastEffect : null;\n    if (null !== lastEffect) {\n      var firstEffect = lastEffect.next;\n      updateQueue = firstEffect;\n      do {\n        if ((updateQueue.tag & flags) === flags) {\n          lastEffect = void 0;\n          var create = updateQueue.create,\n            inst = updateQueue.inst;\n          lastEffect = create();\n          inst.destroy = lastEffect;\n        }\n        updateQueue = updateQueue.next;\n      } while (updateQueue !== firstEffect);\n    }\n  } catch (error) {\n    captureCommitPhaseError(finishedWork, finishedWork.return, error);\n  }\n}\nfunction commitHookEffectListUnmount(\n  flags,\n  finishedWork,\n  nearestMountedAncestor$jscomp$0\n) {\n  try {\n    var updateQueue = finishedWork.updateQueue,\n      lastEffect = null !== updateQueue ? updateQueue.lastEffect : null;\n    if (null !== lastEffect) {\n      var firstEffect = lastEffect.next;\n      updateQueue = firstEffect;\n      do {\n        if ((updateQueue.tag & flags) === flags) {\n          var inst = updateQueue.inst,\n            destroy = inst.destroy;\n          if (void 0 !== destroy) {\n            inst.destroy = void 0;\n            lastEffect = finishedWork;\n            var nearestMountedAncestor = nearestMountedAncestor$jscomp$0,\n              destroy_ = destroy;\n            try {\n              destroy_();\n            } catch (error) {\n              captureCommitPhaseError(\n                lastEffect,\n                nearestMountedAncestor,\n                error\n              );\n            }\n          }\n        }\n        updateQueue = updateQueue.next;\n      } while (updateQueue !== firstEffect);\n    }\n  } catch (error) {\n    captureCommitPhaseError(finishedWork, finishedWork.return, error);\n  }\n}\nfunction commitClassCallbacks(finishedWork) {\n  var updateQueue = finishedWork.updateQueue;\n  if (null !== updateQueue) {\n    var instance = finishedWork.stateNode;\n    try {\n      commitCallbacks(updateQueue, instance);\n    } catch (error) {\n      captureCommitPhaseError(finishedWork, finishedWork.return, error);\n    }\n  }\n}\nfunction safelyCallComponentWillUnmount(\n  current,\n  nearestMountedAncestor,\n  instance\n) {\n  instance.props = resolveClassComponentProps(\n    current.type,\n    current.memoizedProps\n  );\n  instance.state = current.memoizedState;\n  try {\n    instance.componentWillUnmount();\n  } catch (error) {\n    captureCommitPhaseError(current, nearestMountedAncestor, error);\n  }\n}\nfunction safelyAttachRef(current, nearestMountedAncestor) {\n  try {\n    var ref = current.ref;\n    if (null !== ref) {\n      switch (current.tag) {\n        case 26:\n        case 27:\n        case 5:\n          var instanceToUse = current.stateNode;\n          break;\n        case 30:\n          instanceToUse = current.stateNode;\n          break;\n        default:\n          instanceToUse = current.stateNode;\n      }\n      \"function\" === typeof ref\n        ? (current.refCleanup = ref(instanceToUse))\n        : (ref.current = instanceToUse);\n    }\n  } catch (error) {\n    captureCommitPhaseError(current, nearestMountedAncestor, error);\n  }\n}\nfunction safelyDetachRef(current, nearestMountedAncestor) {\n  var ref = current.ref,\n    refCleanup = current.refCleanup;\n  if (null !== ref)\n    if (\"function\" === typeof refCleanup)\n      try {\n        refCleanup();\n      } catch (error) {\n        captureCommitPhaseError(current, nearestMountedAncestor, error);\n      } finally {\n        (current.refCleanup = null),\n          (current = current.alternate),\n          null != current && (current.refCleanup = null);\n      }\n    else if (\"function\" === typeof ref)\n      try {\n        ref(null);\n      } catch (error$140) {\n        captureCommitPhaseError(current, nearestMountedAncestor, error$140);\n      }\n    else ref.current = null;\n}\nfunction commitHostMount(finishedWork) {\n  var type = finishedWork.type,\n    props = finishedWork.memoizedProps,\n    instance = finishedWork.stateNode;\n  try {\n    a: switch (type) {\n      case \"button\":\n      case \"input\":\n      case \"select\":\n      case \"textarea\":\n        props.autoFocus && instance.focus();\n        break a;\n      case \"img\":\n        props.src\n          ? (instance.src = props.src)\n          : props.srcSet && (instance.srcset = props.srcSet);\n    }\n  } catch (error) {\n    captureCommitPhaseError(finishedWork, finishedWork.return, error);\n  }\n}\nfunction commitHostUpdate(finishedWork, newProps, oldProps) {\n  try {\n    var domElement = finishedWork.stateNode;\n    updateProperties(domElement, finishedWork.type, oldProps, newProps);\n    domElement[internalPropsKey] = newProps;\n  } catch (error) {\n    captureCommitPhaseError(finishedWork, finishedWork.return, error);\n  }\n}\nfunction isHostParent(fiber) {\n  return (\n    5 === fiber.tag ||\n    3 === fiber.tag ||\n    26 === fiber.tag ||\n    (27 === fiber.tag && isSingletonScope(fiber.type)) ||\n    4 === fiber.tag\n  );\n}\nfunction getHostSibling(fiber) {\n  a: for (;;) {\n    for (; null === fiber.sibling; ) {\n      if (null === fiber.return || isHostParent(fiber.return)) return null;\n      fiber = fiber.return;\n    }\n    fiber.sibling.return = fiber.return;\n    for (\n      fiber = fiber.sibling;\n      5 !== fiber.tag && 6 !== fiber.tag && 18 !== fiber.tag;\n\n    ) {\n      if (27 === fiber.tag && isSingletonScope(fiber.type)) continue a;\n      if (fiber.flags & 2) continue a;\n      if (null === fiber.child || 4 === fiber.tag) continue a;\n      else (fiber.child.return = fiber), (fiber = fiber.child);\n    }\n    if (!(fiber.flags & 2)) return fiber.stateNode;\n  }\n}\nfunction insertOrAppendPlacementNodeIntoContainer(node, before, parent) {\n  var tag = node.tag;\n  if (5 === tag || 6 === tag)\n    (node = node.stateNode),\n      before\n        ? (9 === parent.nodeType\n            ? parent.body\n            : \"HTML\" === parent.nodeName\n              ? parent.ownerDocument.body\n              : parent\n          ).insertBefore(node, before)\n        : ((before =\n            9 === parent.nodeType\n              ? parent.body\n              : \"HTML\" === parent.nodeName\n                ? parent.ownerDocument.body\n                : parent),\n          before.appendChild(node),\n          (parent = parent._reactRootContainer),\n          (null !== parent && void 0 !== parent) ||\n            null !== before.onclick ||\n            (before.onclick = noop$1));\n  else if (\n    4 !== tag &&\n    (27 === tag &&\n      isSingletonScope(node.type) &&\n      ((parent = node.stateNode), (before = null)),\n    (node = node.child),\n    null !== node)\n  )\n    for (\n      insertOrAppendPlacementNodeIntoContainer(node, before, parent),\n        node = node.sibling;\n      null !== node;\n\n    )\n      insertOrAppendPlacementNodeIntoContainer(node, before, parent),\n        (node = node.sibling);\n}\nfunction insertOrAppendPlacementNode(node, before, parent) {\n  var tag = node.tag;\n  if (5 === tag || 6 === tag)\n    (node = node.stateNode),\n      before ? parent.insertBefore(node, before) : parent.appendChild(node);\n  else if (\n    4 !== tag &&\n    (27 === tag && isSingletonScope(node.type) && (parent = node.stateNode),\n    (node = node.child),\n    null !== node)\n  )\n    for (\n      insertOrAppendPlacementNode(node, before, parent), node = node.sibling;\n      null !== node;\n\n    )\n      insertOrAppendPlacementNode(node, before, parent), (node = node.sibling);\n}\nfunction commitHostSingletonAcquisition(finishedWork) {\n  var singleton = finishedWork.stateNode,\n    props = finishedWork.memoizedProps;\n  try {\n    for (\n      var type = finishedWork.type, attributes = singleton.attributes;\n      attributes.length;\n\n    )\n      singleton.removeAttributeNode(attributes[0]);\n    setInitialProperties(singleton, type, props);\n    singleton[internalInstanceKey] = finishedWork;\n    singleton[internalPropsKey] = props;\n  } catch (error) {\n    captureCommitPhaseError(finishedWork, finishedWork.return, error);\n  }\n}\nvar offscreenSubtreeIsHidden = !1,\n  offscreenSubtreeWasHidden = !1,\n  needsFormReset = !1,\n  PossiblyWeakSet = \"function\" === typeof WeakSet ? WeakSet : Set,\n  nextEffect = null;\nfunction commitBeforeMutationEffects(root, firstChild) {\n  root = root.containerInfo;\n  eventsEnabled = _enabled;\n  root = getActiveElementDeep(root);\n  if (hasSelectionCapabilities(root)) {\n    if (\"selectionStart\" in root)\n      var JSCompiler_temp = {\n        start: root.selectionStart,\n        end: root.selectionEnd\n      };\n    else\n      a: {\n        JSCompiler_temp =\n          ((JSCompiler_temp = root.ownerDocument) &&\n            JSCompiler_temp.defaultView) ||\n          window;\n        var selection =\n          JSCompiler_temp.getSelection && JSCompiler_temp.getSelection();\n        if (selection && 0 !== selection.rangeCount) {\n          JSCompiler_temp = selection.anchorNode;\n          var anchorOffset = selection.anchorOffset,\n            focusNode = selection.focusNode;\n          selection = selection.focusOffset;\n          try {\n            JSCompiler_temp.nodeType, focusNode.nodeType;\n          } catch (e$20) {\n            JSCompiler_temp = null;\n            break a;\n          }\n          var length = 0,\n            start = -1,\n            end = -1,\n            indexWithinAnchor = 0,\n            indexWithinFocus = 0,\n            node = root,\n            parentNode = null;\n          b: for (;;) {\n            for (var next; ; ) {\n              node !== JSCompiler_temp ||\n                (0 !== anchorOffset && 3 !== node.nodeType) ||\n                (start = length + anchorOffset);\n              node !== focusNode ||\n                (0 !== selection && 3 !== node.nodeType) ||\n                (end = length + selection);\n              3 === node.nodeType && (length += node.nodeValue.length);\n              if (null === (next = node.firstChild)) break;\n              parentNode = node;\n              node = next;\n            }\n            for (;;) {\n              if (node === root) break b;\n              parentNode === JSCompiler_temp &&\n                ++indexWithinAnchor === anchorOffset &&\n                (start = length);\n              parentNode === focusNode &&\n                ++indexWithinFocus === selection &&\n                (end = length);\n              if (null !== (next = node.nextSibling)) break;\n              node = parentNode;\n              parentNode = node.parentNode;\n            }\n            node = next;\n          }\n          JSCompiler_temp =\n            -1 === start || -1 === end ? null : { start: start, end: end };\n        } else JSCompiler_temp = null;\n      }\n    JSCompiler_temp = JSCompiler_temp || { start: 0, end: 0 };\n  } else JSCompiler_temp = null;\n  selectionInformation = { focusedElem: root, selectionRange: JSCompiler_temp };\n  _enabled = !1;\n  for (nextEffect = firstChild; null !== nextEffect; )\n    if (\n      ((firstChild = nextEffect),\n      (root = firstChild.child),\n      0 !== (firstChild.subtreeFlags & 1028) && null !== root)\n    )\n      (root.return = firstChild), (nextEffect = root);\n    else\n      for (; null !== nextEffect; ) {\n        firstChild = nextEffect;\n        focusNode = firstChild.alternate;\n        root = firstChild.flags;\n        switch (firstChild.tag) {\n          case 0:\n            if (\n              0 !== (root & 4) &&\n              ((root = firstChild.updateQueue),\n              (root = null !== root ? root.events : null),\n              null !== root)\n            )\n              for (\n                JSCompiler_temp = 0;\n                JSCompiler_temp < root.length;\n                JSCompiler_temp++\n              )\n                (anchorOffset = root[JSCompiler_temp]),\n                  (anchorOffset.ref.impl = anchorOffset.nextImpl);\n            break;\n          case 11:\n          case 15:\n            break;\n          case 1:\n            if (0 !== (root & 1024) && null !== focusNode) {\n              root = void 0;\n              JSCompiler_temp = firstChild;\n              anchorOffset = focusNode.memoizedProps;\n              focusNode = focusNode.memoizedState;\n              selection = JSCompiler_temp.stateNode;\n              try {\n                var resolvedPrevProps = resolveClassComponentProps(\n                  JSCompiler_temp.type,\n                  anchorOffset\n                );\n                root = selection.getSnapshotBeforeUpdate(\n                  resolvedPrevProps,\n                  focusNode\n                );\n                selection.__reactInternalSnapshotBeforeUpdate = root;\n              } catch (error) {\n                captureCommitPhaseError(\n                  JSCompiler_temp,\n                  JSCompiler_temp.return,\n                  error\n                );\n              }\n            }\n            break;\n          case 3:\n            if (0 !== (root & 1024))\n              if (\n                ((root = firstChild.stateNode.containerInfo),\n                (JSCompiler_temp = root.nodeType),\n                9 === JSCompiler_temp)\n              )\n                clearContainerSparingly(root);\n              else if (1 === JSCompiler_temp)\n                switch (root.nodeName) {\n                  case \"HEAD\":\n                  case \"HTML\":\n                  case \"BODY\":\n                    clearContainerSparingly(root);\n                    break;\n                  default:\n                    root.textContent = \"\";\n                }\n            break;\n          case 5:\n          case 26:\n          case 27:\n          case 6:\n          case 4:\n          case 17:\n            break;\n          default:\n            if (0 !== (root & 1024)) throw Error(formatProdErrorMessage(163));\n        }\n        root = firstChild.sibling;\n        if (null !== root) {\n          root.return = firstChild.return;\n          nextEffect = root;\n          break;\n        }\n        nextEffect = firstChild.return;\n      }\n}\nfunction commitLayoutEffectOnFiber(finishedRoot, current, finishedWork) {\n  var flags = finishedWork.flags;\n  switch (finishedWork.tag) {\n    case 0:\n    case 11:\n    case 15:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      flags & 4 && commitHookEffectListMount(5, finishedWork);\n      break;\n    case 1:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      if (flags & 4)\n        if (((finishedRoot = finishedWork.stateNode), null === current))\n          try {\n            finishedRoot.componentDidMount();\n          } catch (error) {\n            captureCommitPhaseError(finishedWork, finishedWork.return, error);\n          }\n        else {\n          var prevProps = resolveClassComponentProps(\n            finishedWork.type,\n            current.memoizedProps\n          );\n          current = current.memoizedState;\n          try {\n            finishedRoot.componentDidUpdate(\n              prevProps,\n              current,\n              finishedRoot.__reactInternalSnapshotBeforeUpdate\n            );\n          } catch (error$139) {\n            captureCommitPhaseError(\n              finishedWork,\n              finishedWork.return,\n              error$139\n            );\n          }\n        }\n      flags & 64 && commitClassCallbacks(finishedWork);\n      flags & 512 && safelyAttachRef(finishedWork, finishedWork.return);\n      break;\n    case 3:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      if (\n        flags & 64 &&\n        ((finishedRoot = finishedWork.updateQueue), null !== finishedRoot)\n      ) {\n        current = null;\n        if (null !== finishedWork.child)\n          switch (finishedWork.child.tag) {\n            case 27:\n            case 5:\n              current = finishedWork.child.stateNode;\n              break;\n            case 1:\n              current = finishedWork.child.stateNode;\n          }\n        try {\n          commitCallbacks(finishedRoot, current);\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      }\n      break;\n    case 27:\n      null === current &&\n        flags & 4 &&\n        commitHostSingletonAcquisition(finishedWork);\n    case 26:\n    case 5:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      null === current && flags & 4 && commitHostMount(finishedWork);\n      flags & 512 && safelyAttachRef(finishedWork, finishedWork.return);\n      break;\n    case 12:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      break;\n    case 31:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      flags & 4 && commitActivityHydrationCallbacks(finishedRoot, finishedWork);\n      break;\n    case 13:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      flags & 4 && commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);\n      flags & 64 &&\n        ((finishedRoot = finishedWork.memoizedState),\n        null !== finishedRoot &&\n          ((finishedRoot = finishedRoot.dehydrated),\n          null !== finishedRoot &&\n            ((finishedWork = retryDehydratedSuspenseBoundary.bind(\n              null,\n              finishedWork\n            )),\n            registerSuspenseInstanceRetry(finishedRoot, finishedWork))));\n      break;\n    case 22:\n      flags = null !== finishedWork.memoizedState || offscreenSubtreeIsHidden;\n      if (!flags) {\n        current =\n          (null !== current && null !== current.memoizedState) ||\n          offscreenSubtreeWasHidden;\n        prevProps = offscreenSubtreeIsHidden;\n        var prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;\n        offscreenSubtreeIsHidden = flags;\n        (offscreenSubtreeWasHidden = current) && !prevOffscreenSubtreeWasHidden\n          ? recursivelyTraverseReappearLayoutEffects(\n              finishedRoot,\n              finishedWork,\n              0 !== (finishedWork.subtreeFlags & 8772)\n            )\n          : recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n        offscreenSubtreeIsHidden = prevProps;\n        offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;\n      }\n      break;\n    case 30:\n      break;\n    default:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n  }\n}\nfunction detachFiberAfterEffects(fiber) {\n  var alternate = fiber.alternate;\n  null !== alternate &&\n    ((fiber.alternate = null), detachFiberAfterEffects(alternate));\n  fiber.child = null;\n  fiber.deletions = null;\n  fiber.sibling = null;\n  5 === fiber.tag &&\n    ((alternate = fiber.stateNode),\n    null !== alternate && detachDeletedInstance(alternate));\n  fiber.stateNode = null;\n  fiber.return = null;\n  fiber.dependencies = null;\n  fiber.memoizedProps = null;\n  fiber.memoizedState = null;\n  fiber.pendingProps = null;\n  fiber.stateNode = null;\n  fiber.updateQueue = null;\n}\nvar hostParent = null,\n  hostParentIsContainer = !1;\nfunction recursivelyTraverseDeletionEffects(\n  finishedRoot,\n  nearestMountedAncestor,\n  parent\n) {\n  for (parent = parent.child; null !== parent; )\n    commitDeletionEffectsOnFiber(finishedRoot, nearestMountedAncestor, parent),\n      (parent = parent.sibling);\n}\nfunction commitDeletionEffectsOnFiber(\n  finishedRoot,\n  nearestMountedAncestor,\n  deletedFiber\n) {\n  if (injectedHook && \"function\" === typeof injectedHook.onCommitFiberUnmount)\n    try {\n      injectedHook.onCommitFiberUnmount(rendererID, deletedFiber);\n    } catch (err) {}\n  switch (deletedFiber.tag) {\n    case 26:\n      offscreenSubtreeWasHidden ||\n        safelyDetachRef(deletedFiber, nearestMountedAncestor);\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      deletedFiber.memoizedState\n        ? deletedFiber.memoizedState.count--\n        : deletedFiber.stateNode &&\n          ((deletedFiber = deletedFiber.stateNode),\n          deletedFiber.parentNode.removeChild(deletedFiber));\n      break;\n    case 27:\n      offscreenSubtreeWasHidden ||\n        safelyDetachRef(deletedFiber, nearestMountedAncestor);\n      var prevHostParent = hostParent,\n        prevHostParentIsContainer = hostParentIsContainer;\n      isSingletonScope(deletedFiber.type) &&\n        ((hostParent = deletedFiber.stateNode), (hostParentIsContainer = !1));\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      releaseSingletonInstance(deletedFiber.stateNode);\n      hostParent = prevHostParent;\n      hostParentIsContainer = prevHostParentIsContainer;\n      break;\n    case 5:\n      offscreenSubtreeWasHidden ||\n        safelyDetachRef(deletedFiber, nearestMountedAncestor);\n    case 6:\n      prevHostParent = hostParent;\n      prevHostParentIsContainer = hostParentIsContainer;\n      hostParent = null;\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      hostParent = prevHostParent;\n      hostParentIsContainer = prevHostParentIsContainer;\n      if (null !== hostParent)\n        if (hostParentIsContainer)\n          try {\n            (9 === hostParent.nodeType\n              ? hostParent.body\n              : \"HTML\" === hostParent.nodeName\n                ? hostParent.ownerDocument.body\n                : hostParent\n            ).removeChild(deletedFiber.stateNode);\n          } catch (error) {\n            captureCommitPhaseError(\n              deletedFiber,\n              nearestMountedAncestor,\n              error\n            );\n          }\n        else\n          try {\n            hostParent.removeChild(deletedFiber.stateNode);\n          } catch (error) {\n            captureCommitPhaseError(\n              deletedFiber,\n              nearestMountedAncestor,\n              error\n            );\n          }\n      break;\n    case 18:\n      null !== hostParent &&\n        (hostParentIsContainer\n          ? ((finishedRoot = hostParent),\n            clearHydrationBoundary(\n              9 === finishedRoot.nodeType\n                ? finishedRoot.body\n                : \"HTML\" === finishedRoot.nodeName\n                  ? finishedRoot.ownerDocument.body\n                  : finishedRoot,\n              deletedFiber.stateNode\n            ),\n            retryIfBlockedOn(finishedRoot))\n          : clearHydrationBoundary(hostParent, deletedFiber.stateNode));\n      break;\n    case 4:\n      prevHostParent = hostParent;\n      prevHostParentIsContainer = hostParentIsContainer;\n      hostParent = deletedFiber.stateNode.containerInfo;\n      hostParentIsContainer = !0;\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      hostParent = prevHostParent;\n      hostParentIsContainer = prevHostParentIsContainer;\n      break;\n    case 0:\n    case 11:\n    case 14:\n    case 15:\n      commitHookEffectListUnmount(2, deletedFiber, nearestMountedAncestor);\n      offscreenSubtreeWasHidden ||\n        commitHookEffectListUnmount(4, deletedFiber, nearestMountedAncestor);\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      break;\n    case 1:\n      offscreenSubtreeWasHidden ||\n        (safelyDetachRef(deletedFiber, nearestMountedAncestor),\n        (prevHostParent = deletedFiber.stateNode),\n        \"function\" === typeof prevHostParent.componentWillUnmount &&\n          safelyCallComponentWillUnmount(\n            deletedFiber,\n            nearestMountedAncestor,\n            prevHostParent\n          ));\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      break;\n    case 21:\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      break;\n    case 22:\n      offscreenSubtreeWasHidden =\n        (prevHostParent = offscreenSubtreeWasHidden) ||\n        null !== deletedFiber.memoizedState;\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      offscreenSubtreeWasHidden = prevHostParent;\n      break;\n    default:\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n  }\n}\nfunction commitActivityHydrationCallbacks(finishedRoot, finishedWork) {\n  if (\n    null === finishedWork.memoizedState &&\n    ((finishedRoot = finishedWork.alternate),\n    null !== finishedRoot &&\n      ((finishedRoot = finishedRoot.memoizedState), null !== finishedRoot))\n  ) {\n    finishedRoot = finishedRoot.dehydrated;\n    try {\n      retryIfBlockedOn(finishedRoot);\n    } catch (error) {\n      captureCommitPhaseError(finishedWork, finishedWork.return, error);\n    }\n  }\n}\nfunction commitSuspenseHydrationCallbacks(finishedRoot, finishedWork) {\n  if (\n    null === finishedWork.memoizedState &&\n    ((finishedRoot = finishedWork.alternate),\n    null !== finishedRoot &&\n      ((finishedRoot = finishedRoot.memoizedState),\n      null !== finishedRoot &&\n        ((finishedRoot = finishedRoot.dehydrated), null !== finishedRoot)))\n  )\n    try {\n      retryIfBlockedOn(finishedRoot);\n    } catch (error) {\n      captureCommitPhaseError(finishedWork, finishedWork.return, error);\n    }\n}\nfunction getRetryCache(finishedWork) {\n  switch (finishedWork.tag) {\n    case 31:\n    case 13:\n    case 19:\n      var retryCache = finishedWork.stateNode;\n      null === retryCache &&\n        (retryCache = finishedWork.stateNode = new PossiblyWeakSet());\n      return retryCache;\n    case 22:\n      return (\n        (finishedWork = finishedWork.stateNode),\n        (retryCache = finishedWork._retryCache),\n        null === retryCache &&\n          (retryCache = finishedWork._retryCache = new PossiblyWeakSet()),\n        retryCache\n      );\n    default:\n      throw Error(formatProdErrorMessage(435, finishedWork.tag));\n  }\n}\nfunction attachSuspenseRetryListeners(finishedWork, wakeables) {\n  var retryCache = getRetryCache(finishedWork);\n  wakeables.forEach(function (wakeable) {\n    if (!retryCache.has(wakeable)) {\n      retryCache.add(wakeable);\n      var retry = resolveRetryWakeable.bind(null, finishedWork, wakeable);\n      wakeable.then(retry, retry);\n    }\n  });\n}\nfunction recursivelyTraverseMutationEffects(root$jscomp$0, parentFiber) {\n  var deletions = parentFiber.deletions;\n  if (null !== deletions)\n    for (var i = 0; i < deletions.length; i++) {\n      var childToDelete = deletions[i],\n        root = root$jscomp$0,\n        returnFiber = parentFiber,\n        parent = returnFiber;\n      a: for (; null !== parent; ) {\n        switch (parent.tag) {\n          case 27:\n            if (isSingletonScope(parent.type)) {\n              hostParent = parent.stateNode;\n              hostParentIsContainer = !1;\n              break a;\n            }\n            break;\n          case 5:\n            hostParent = parent.stateNode;\n            hostParentIsContainer = !1;\n            break a;\n          case 3:\n          case 4:\n            hostParent = parent.stateNode.containerInfo;\n            hostParentIsContainer = !0;\n            break a;\n        }\n        parent = parent.return;\n      }\n      if (null === hostParent) throw Error(formatProdErrorMessage(160));\n      commitDeletionEffectsOnFiber(root, returnFiber, childToDelete);\n      hostParent = null;\n      hostParentIsContainer = !1;\n      root = childToDelete.alternate;\n      null !== root && (root.return = null);\n      childToDelete.return = null;\n    }\n  if (parentFiber.subtreeFlags & 13886)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      commitMutationEffectsOnFiber(parentFiber, root$jscomp$0),\n        (parentFiber = parentFiber.sibling);\n}\nvar currentHoistableRoot = null;\nfunction commitMutationEffectsOnFiber(finishedWork, root) {\n  var current = finishedWork.alternate,\n    flags = finishedWork.flags;\n  switch (finishedWork.tag) {\n    case 0:\n    case 11:\n    case 14:\n    case 15:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 4 &&\n        (commitHookEffectListUnmount(3, finishedWork, finishedWork.return),\n        commitHookEffectListMount(3, finishedWork),\n        commitHookEffectListUnmount(5, finishedWork, finishedWork.return));\n      break;\n    case 1:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 512 &&\n        (offscreenSubtreeWasHidden ||\n          null === current ||\n          safelyDetachRef(current, current.return));\n      flags & 64 &&\n        offscreenSubtreeIsHidden &&\n        ((finishedWork = finishedWork.updateQueue),\n        null !== finishedWork &&\n          ((flags = finishedWork.callbacks),\n          null !== flags &&\n            ((current = finishedWork.shared.hiddenCallbacks),\n            (finishedWork.shared.hiddenCallbacks =\n              null === current ? flags : current.concat(flags)))));\n      break;\n    case 26:\n      var hoistableRoot = currentHoistableRoot;\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 512 &&\n        (offscreenSubtreeWasHidden ||\n          null === current ||\n          safelyDetachRef(current, current.return));\n      if (flags & 4) {\n        var currentResource = null !== current ? current.memoizedState : null;\n        flags = finishedWork.memoizedState;\n        if (null === current)\n          if (null === flags)\n            if (null === finishedWork.stateNode) {\n              a: {\n                flags = finishedWork.type;\n                current = finishedWork.memoizedProps;\n                hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;\n                b: switch (flags) {\n                  case \"title\":\n                    currentResource =\n                      hoistableRoot.getElementsByTagName(\"title\")[0];\n                    if (\n                      !currentResource ||\n                      currentResource[internalHoistableMarker] ||\n                      currentResource[internalInstanceKey] ||\n                      \"http://www.w3.org/2000/svg\" ===\n                        currentResource.namespaceURI ||\n                      currentResource.hasAttribute(\"itemprop\")\n                    )\n                      (currentResource = hoistableRoot.createElement(flags)),\n                        hoistableRoot.head.insertBefore(\n                          currentResource,\n                          hoistableRoot.querySelector(\"head > title\")\n                        );\n                    setInitialProperties(currentResource, flags, current);\n                    currentResource[internalInstanceKey] = finishedWork;\n                    markNodeAsHoistable(currentResource);\n                    flags = currentResource;\n                    break a;\n                  case \"link\":\n                    var maybeNodes = getHydratableHoistableCache(\n                      \"link\",\n                      \"href\",\n                      hoistableRoot\n                    ).get(flags + (current.href || \"\"));\n                    if (maybeNodes)\n                      for (var i = 0; i < maybeNodes.length; i++)\n                        if (\n                          ((currentResource = maybeNodes[i]),\n                          currentResource.getAttribute(\"href\") ===\n                            (null == current.href || \"\" === current.href\n                              ? null\n                              : current.href) &&\n                            currentResource.getAttribute(\"rel\") ===\n                              (null == current.rel ? null : current.rel) &&\n                            currentResource.getAttribute(\"title\") ===\n                              (null == current.title ? null : current.title) &&\n                            currentResource.getAttribute(\"crossorigin\") ===\n                              (null == current.crossOrigin\n                                ? null\n                                : current.crossOrigin))\n                        ) {\n                          maybeNodes.splice(i, 1);\n                          break b;\n                        }\n                    currentResource = hoistableRoot.createElement(flags);\n                    setInitialProperties(currentResource, flags, current);\n                    hoistableRoot.head.appendChild(currentResource);\n                    break;\n                  case \"meta\":\n                    if (\n                      (maybeNodes = getHydratableHoistableCache(\n                        \"meta\",\n                        \"content\",\n                        hoistableRoot\n                      ).get(flags + (current.content || \"\")))\n                    )\n                      for (i = 0; i < maybeNodes.length; i++)\n                        if (\n                          ((currentResource = maybeNodes[i]),\n                          currentResource.getAttribute(\"content\") ===\n                            (null == current.content\n                              ? null\n                              : \"\" + current.content) &&\n                            currentResource.getAttribute(\"name\") ===\n                              (null == current.name ? null : current.name) &&\n                            currentResource.getAttribute(\"property\") ===\n                              (null == current.property\n                                ? null\n                                : current.property) &&\n                            currentResource.getAttribute(\"http-equiv\") ===\n                              (null == current.httpEquiv\n                                ? null\n                                : current.httpEquiv) &&\n                            currentResource.getAttribute(\"charset\") ===\n                              (null == current.charSet\n                                ? null\n                                : current.charSet))\n                        ) {\n                          maybeNodes.splice(i, 1);\n                          break b;\n                        }\n                    currentResource = hoistableRoot.createElement(flags);\n                    setInitialProperties(currentResource, flags, current);\n                    hoistableRoot.head.appendChild(currentResource);\n                    break;\n                  default:\n                    throw Error(formatProdErrorMessage(468, flags));\n                }\n                currentResource[internalInstanceKey] = finishedWork;\n                markNodeAsHoistable(currentResource);\n                flags = currentResource;\n              }\n              finishedWork.stateNode = flags;\n            } else\n              mountHoistable(\n                hoistableRoot,\n                finishedWork.type,\n                finishedWork.stateNode\n              );\n          else\n            finishedWork.stateNode = acquireResource(\n              hoistableRoot,\n              flags,\n              finishedWork.memoizedProps\n            );\n        else\n          currentResource !== flags\n            ? (null === currentResource\n                ? null !== current.stateNode &&\n                  ((current = current.stateNode),\n                  current.parentNode.removeChild(current))\n                : currentResource.count--,\n              null === flags\n                ? mountHoistable(\n                    hoistableRoot,\n                    finishedWork.type,\n                    finishedWork.stateNode\n                  )\n                : acquireResource(\n                    hoistableRoot,\n                    flags,\n                    finishedWork.memoizedProps\n                  ))\n            : null === flags &&\n              null !== finishedWork.stateNode &&\n              commitHostUpdate(\n                finishedWork,\n                finishedWork.memoizedProps,\n                current.memoizedProps\n              );\n      }\n      break;\n    case 27:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 512 &&\n        (offscreenSubtreeWasHidden ||\n          null === current ||\n          safelyDetachRef(current, current.return));\n      null !== current &&\n        flags & 4 &&\n        commitHostUpdate(\n          finishedWork,\n          finishedWork.memoizedProps,\n          current.memoizedProps\n        );\n      break;\n    case 5:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 512 &&\n        (offscreenSubtreeWasHidden ||\n          null === current ||\n          safelyDetachRef(current, current.return));\n      if (finishedWork.flags & 32) {\n        hoistableRoot = finishedWork.stateNode;\n        try {\n          setTextContent(hoistableRoot, \"\");\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      }\n      flags & 4 &&\n        null != finishedWork.stateNode &&\n        ((hoistableRoot = finishedWork.memoizedProps),\n        commitHostUpdate(\n          finishedWork,\n          hoistableRoot,\n          null !== current ? current.memoizedProps : hoistableRoot\n        ));\n      flags & 1024 && (needsFormReset = !0);\n      break;\n    case 6:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      if (flags & 4) {\n        if (null === finishedWork.stateNode)\n          throw Error(formatProdErrorMessage(162));\n        flags = finishedWork.memoizedProps;\n        current = finishedWork.stateNode;\n        try {\n          current.nodeValue = flags;\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      }\n      break;\n    case 3:\n      tagCaches = null;\n      hoistableRoot = currentHoistableRoot;\n      currentHoistableRoot = getHoistableRoot(root.containerInfo);\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      currentHoistableRoot = hoistableRoot;\n      commitReconciliationEffects(finishedWork);\n      if (flags & 4 && null !== current && current.memoizedState.isDehydrated)\n        try {\n          retryIfBlockedOn(root.containerInfo);\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      needsFormReset &&\n        ((needsFormReset = !1), recursivelyResetForms(finishedWork));\n      break;\n    case 4:\n      flags = currentHoistableRoot;\n      currentHoistableRoot = getHoistableRoot(\n        finishedWork.stateNode.containerInfo\n      );\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      currentHoistableRoot = flags;\n      break;\n    case 12:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      break;\n    case 31:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 4 &&\n        ((flags = finishedWork.updateQueue),\n        null !== flags &&\n          ((finishedWork.updateQueue = null),\n          attachSuspenseRetryListeners(finishedWork, flags)));\n      break;\n    case 13:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      finishedWork.child.flags & 8192 &&\n        (null !== finishedWork.memoizedState) !==\n          (null !== current && null !== current.memoizedState) &&\n        (globalMostRecentFallbackTime = now());\n      flags & 4 &&\n        ((flags = finishedWork.updateQueue),\n        null !== flags &&\n          ((finishedWork.updateQueue = null),\n          attachSuspenseRetryListeners(finishedWork, flags)));\n      break;\n    case 22:\n      hoistableRoot = null !== finishedWork.memoizedState;\n      var wasHidden = null !== current && null !== current.memoizedState,\n        prevOffscreenSubtreeIsHidden = offscreenSubtreeIsHidden,\n        prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;\n      offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden || hoistableRoot;\n      offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden || wasHidden;\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;\n      offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden;\n      commitReconciliationEffects(finishedWork);\n      if (flags & 8192)\n        a: for (\n          root = finishedWork.stateNode,\n            root._visibility = hoistableRoot\n              ? root._visibility & -2\n              : root._visibility | 1,\n            hoistableRoot &&\n              (null === current ||\n                wasHidden ||\n                offscreenSubtreeIsHidden ||\n                offscreenSubtreeWasHidden ||\n                recursivelyTraverseDisappearLayoutEffects(finishedWork)),\n            current = null,\n            root = finishedWork;\n          ;\n\n        ) {\n          if (5 === root.tag || 26 === root.tag) {\n            if (null === current) {\n              wasHidden = current = root;\n              try {\n                if (((currentResource = wasHidden.stateNode), hoistableRoot))\n                  (maybeNodes = currentResource.style),\n                    \"function\" === typeof maybeNodes.setProperty\n                      ? maybeNodes.setProperty(\"display\", \"none\", \"important\")\n                      : (maybeNodes.display = \"none\");\n                else {\n                  i = wasHidden.stateNode;\n                  var styleProp = wasHidden.memoizedProps.style,\n                    display =\n                      void 0 !== styleProp &&\n                      null !== styleProp &&\n                      styleProp.hasOwnProperty(\"display\")\n                        ? styleProp.display\n                        : null;\n                  i.style.display =\n                    null == display || \"boolean\" === typeof display\n                      ? \"\"\n                      : (\"\" + display).trim();\n                }\n              } catch (error) {\n                captureCommitPhaseError(wasHidden, wasHidden.return, error);\n              }\n            }\n          } else if (6 === root.tag) {\n            if (null === current) {\n              wasHidden = root;\n              try {\n                wasHidden.stateNode.nodeValue = hoistableRoot\n                  ? \"\"\n                  : wasHidden.memoizedProps;\n              } catch (error) {\n                captureCommitPhaseError(wasHidden, wasHidden.return, error);\n              }\n            }\n          } else if (18 === root.tag) {\n            if (null === current) {\n              wasHidden = root;\n              try {\n                var instance = wasHidden.stateNode;\n                hoistableRoot\n                  ? hideOrUnhideDehydratedBoundary(instance, !0)\n                  : hideOrUnhideDehydratedBoundary(wasHidden.stateNode, !1);\n              } catch (error) {\n                captureCommitPhaseError(wasHidden, wasHidden.return, error);\n              }\n            }\n          } else if (\n            ((22 !== root.tag && 23 !== root.tag) ||\n              null === root.memoizedState ||\n              root === finishedWork) &&\n            null !== root.child\n          ) {\n            root.child.return = root;\n            root = root.child;\n            continue;\n          }\n          if (root === finishedWork) break a;\n          for (; null === root.sibling; ) {\n            if (null === root.return || root.return === finishedWork) break a;\n            current === root && (current = null);\n            root = root.return;\n          }\n          current === root && (current = null);\n          root.sibling.return = root.return;\n          root = root.sibling;\n        }\n      flags & 4 &&\n        ((flags = finishedWork.updateQueue),\n        null !== flags &&\n          ((current = flags.retryQueue),\n          null !== current &&\n            ((flags.retryQueue = null),\n            attachSuspenseRetryListeners(finishedWork, current))));\n      break;\n    case 19:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 4 &&\n        ((flags = finishedWork.updateQueue),\n        null !== flags &&\n          ((finishedWork.updateQueue = null),\n          attachSuspenseRetryListeners(finishedWork, flags)));\n      break;\n    case 30:\n      break;\n    case 21:\n      break;\n    default:\n      recursivelyTraverseMutationEffects(root, finishedWork),\n        commitReconciliationEffects(finishedWork);\n  }\n}\nfunction commitReconciliationEffects(finishedWork) {\n  var flags = finishedWork.flags;\n  if (flags & 2) {\n    try {\n      for (\n        var hostParentFiber, parentFiber = finishedWork.return;\n        null !== parentFiber;\n\n      ) {\n        if (isHostParent(parentFiber)) {\n          hostParentFiber = parentFiber;\n          break;\n        }\n        parentFiber = parentFiber.return;\n      }\n      if (null == hostParentFiber) throw Error(formatProdErrorMessage(160));\n      switch (hostParentFiber.tag) {\n        case 27:\n          var parent = hostParentFiber.stateNode,\n            before = getHostSibling(finishedWork);\n          insertOrAppendPlacementNode(finishedWork, before, parent);\n          break;\n        case 5:\n          var parent$141 = hostParentFiber.stateNode;\n          hostParentFiber.flags & 32 &&\n            (setTextContent(parent$141, \"\"), (hostParentFiber.flags &= -33));\n          var before$142 = getHostSibling(finishedWork);\n          insertOrAppendPlacementNode(finishedWork, before$142, parent$141);\n          break;\n        case 3:\n        case 4:\n          var parent$143 = hostParentFiber.stateNode.containerInfo,\n            before$144 = getHostSibling(finishedWork);\n          insertOrAppendPlacementNodeIntoContainer(\n            finishedWork,\n            before$144,\n            parent$143\n          );\n          break;\n        default:\n          throw Error(formatProdErrorMessage(161));\n      }\n    } catch (error) {\n      captureCommitPhaseError(finishedWork, finishedWork.return, error);\n    }\n    finishedWork.flags &= -3;\n  }\n  flags & 4096 && (finishedWork.flags &= -4097);\n}\nfunction recursivelyResetForms(parentFiber) {\n  if (parentFiber.subtreeFlags & 1024)\n    for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n      var fiber = parentFiber;\n      recursivelyResetForms(fiber);\n      5 === fiber.tag && fiber.flags & 1024 && fiber.stateNode.reset();\n      parentFiber = parentFiber.sibling;\n    }\n}\nfunction recursivelyTraverseLayoutEffects(root, parentFiber) {\n  if (parentFiber.subtreeFlags & 8772)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      commitLayoutEffectOnFiber(root, parentFiber.alternate, parentFiber),\n        (parentFiber = parentFiber.sibling);\n}\nfunction recursivelyTraverseDisappearLayoutEffects(parentFiber) {\n  for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n    var finishedWork = parentFiber;\n    switch (finishedWork.tag) {\n      case 0:\n      case 11:\n      case 14:\n      case 15:\n        commitHookEffectListUnmount(4, finishedWork, finishedWork.return);\n        recursivelyTraverseDisappearLayoutEffects(finishedWork);\n        break;\n      case 1:\n        safelyDetachRef(finishedWork, finishedWork.return);\n        var instance = finishedWork.stateNode;\n        \"function\" === typeof instance.componentWillUnmount &&\n          safelyCallComponentWillUnmount(\n            finishedWork,\n            finishedWork.return,\n            instance\n          );\n        recursivelyTraverseDisappearLayoutEffects(finishedWork);\n        break;\n      case 27:\n        releaseSingletonInstance(finishedWork.stateNode);\n      case 26:\n      case 5:\n        safelyDetachRef(finishedWork, finishedWork.return);\n        recursivelyTraverseDisappearLayoutEffects(finishedWork);\n        break;\n      case 22:\n        null === finishedWork.memoizedState &&\n          recursivelyTraverseDisappearLayoutEffects(finishedWork);\n        break;\n      case 30:\n        recursivelyTraverseDisappearLayoutEffects(finishedWork);\n        break;\n      default:\n        recursivelyTraverseDisappearLayoutEffects(finishedWork);\n    }\n    parentFiber = parentFiber.sibling;\n  }\n}\nfunction recursivelyTraverseReappearLayoutEffects(\n  finishedRoot$jscomp$0,\n  parentFiber,\n  includeWorkInProgressEffects\n) {\n  includeWorkInProgressEffects =\n    includeWorkInProgressEffects && 0 !== (parentFiber.subtreeFlags & 8772);\n  for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n    var current = parentFiber.alternate,\n      finishedRoot = finishedRoot$jscomp$0,\n      finishedWork = parentFiber,\n      flags = finishedWork.flags;\n    switch (finishedWork.tag) {\n      case 0:\n      case 11:\n      case 15:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        commitHookEffectListMount(4, finishedWork);\n        break;\n      case 1:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        current = finishedWork;\n        finishedRoot = current.stateNode;\n        if (\"function\" === typeof finishedRoot.componentDidMount)\n          try {\n            finishedRoot.componentDidMount();\n          } catch (error) {\n            captureCommitPhaseError(current, current.return, error);\n          }\n        current = finishedWork;\n        finishedRoot = current.updateQueue;\n        if (null !== finishedRoot) {\n          var instance = current.stateNode;\n          try {\n            var hiddenCallbacks = finishedRoot.shared.hiddenCallbacks;\n            if (null !== hiddenCallbacks)\n              for (\n                finishedRoot.shared.hiddenCallbacks = null, finishedRoot = 0;\n                finishedRoot < hiddenCallbacks.length;\n                finishedRoot++\n              )\n                callCallback(hiddenCallbacks[finishedRoot], instance);\n          } catch (error) {\n            captureCommitPhaseError(current, current.return, error);\n          }\n        }\n        includeWorkInProgressEffects &&\n          flags & 64 &&\n          commitClassCallbacks(finishedWork);\n        safelyAttachRef(finishedWork, finishedWork.return);\n        break;\n      case 27:\n        commitHostSingletonAcquisition(finishedWork);\n      case 26:\n      case 5:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        includeWorkInProgressEffects &&\n          null === current &&\n          flags & 4 &&\n          commitHostMount(finishedWork);\n        safelyAttachRef(finishedWork, finishedWork.return);\n        break;\n      case 12:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        break;\n      case 31:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        includeWorkInProgressEffects &&\n          flags & 4 &&\n          commitActivityHydrationCallbacks(finishedRoot, finishedWork);\n        break;\n      case 13:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        includeWorkInProgressEffects &&\n          flags & 4 &&\n          commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);\n        break;\n      case 22:\n        null === finishedWork.memoizedState &&\n          recursivelyTraverseReappearLayoutEffects(\n            finishedRoot,\n            finishedWork,\n            includeWorkInProgressEffects\n          );\n        safelyAttachRef(finishedWork, finishedWork.return);\n        break;\n      case 30:\n        break;\n      default:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n    }\n    parentFiber = parentFiber.sibling;\n  }\n}\nfunction commitOffscreenPassiveMountEffects(current, finishedWork) {\n  var previousCache = null;\n  null !== current &&\n    null !== current.memoizedState &&\n    null !== current.memoizedState.cachePool &&\n    (previousCache = current.memoizedState.cachePool.pool);\n  current = null;\n  null !== finishedWork.memoizedState &&\n    null !== finishedWork.memoizedState.cachePool &&\n    (current = finishedWork.memoizedState.cachePool.pool);\n  current !== previousCache &&\n    (null != current && current.refCount++,\n    null != previousCache && releaseCache(previousCache));\n}\nfunction commitCachePassiveMountEffect(current, finishedWork) {\n  current = null;\n  null !== finishedWork.alternate &&\n    (current = finishedWork.alternate.memoizedState.cache);\n  finishedWork = finishedWork.memoizedState.cache;\n  finishedWork !== current &&\n    (finishedWork.refCount++, null != current && releaseCache(current));\n}\nfunction recursivelyTraversePassiveMountEffects(\n  root,\n  parentFiber,\n  committedLanes,\n  committedTransitions\n) {\n  if (parentFiber.subtreeFlags & 10256)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      commitPassiveMountOnFiber(\n        root,\n        parentFiber,\n        committedLanes,\n        committedTransitions\n      ),\n        (parentFiber = parentFiber.sibling);\n}\nfunction commitPassiveMountOnFiber(\n  finishedRoot,\n  finishedWork,\n  committedLanes,\n  committedTransitions\n) {\n  var flags = finishedWork.flags;\n  switch (finishedWork.tag) {\n    case 0:\n    case 11:\n    case 15:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      flags & 2048 && commitHookEffectListMount(9, finishedWork);\n      break;\n    case 1:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      break;\n    case 3:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      flags & 2048 &&\n        ((finishedRoot = null),\n        null !== finishedWork.alternate &&\n          (finishedRoot = finishedWork.alternate.memoizedState.cache),\n        (finishedWork = finishedWork.memoizedState.cache),\n        finishedWork !== finishedRoot &&\n          (finishedWork.refCount++,\n          null != finishedRoot && releaseCache(finishedRoot)));\n      break;\n    case 12:\n      if (flags & 2048) {\n        recursivelyTraversePassiveMountEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions\n        );\n        finishedRoot = finishedWork.stateNode;\n        try {\n          var _finishedWork$memoize2 = finishedWork.memoizedProps,\n            id = _finishedWork$memoize2.id,\n            onPostCommit = _finishedWork$memoize2.onPostCommit;\n          \"function\" === typeof onPostCommit &&\n            onPostCommit(\n              id,\n              null === finishedWork.alternate ? \"mount\" : \"update\",\n              finishedRoot.passiveEffectDuration,\n              -0\n            );\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      } else\n        recursivelyTraversePassiveMountEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions\n        );\n      break;\n    case 31:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      break;\n    case 13:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      break;\n    case 23:\n      break;\n    case 22:\n      _finishedWork$memoize2 = finishedWork.stateNode;\n      id = finishedWork.alternate;\n      null !== finishedWork.memoizedState\n        ? _finishedWork$memoize2._visibility & 2\n          ? recursivelyTraversePassiveMountEffects(\n              finishedRoot,\n              finishedWork,\n              committedLanes,\n              committedTransitions\n            )\n          : recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork)\n        : _finishedWork$memoize2._visibility & 2\n          ? recursivelyTraversePassiveMountEffects(\n              finishedRoot,\n              finishedWork,\n              committedLanes,\n              committedTransitions\n            )\n          : ((_finishedWork$memoize2._visibility |= 2),\n            recursivelyTraverseReconnectPassiveEffects(\n              finishedRoot,\n              finishedWork,\n              committedLanes,\n              committedTransitions,\n              0 !== (finishedWork.subtreeFlags & 10256) || !1\n            ));\n      flags & 2048 && commitOffscreenPassiveMountEffects(id, finishedWork);\n      break;\n    case 24:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      flags & 2048 &&\n        commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);\n      break;\n    default:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n  }\n}\nfunction recursivelyTraverseReconnectPassiveEffects(\n  finishedRoot$jscomp$0,\n  parentFiber,\n  committedLanes$jscomp$0,\n  committedTransitions$jscomp$0,\n  includeWorkInProgressEffects\n) {\n  includeWorkInProgressEffects =\n    includeWorkInProgressEffects &&\n    (0 !== (parentFiber.subtreeFlags & 10256) || !1);\n  for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n    var finishedRoot = finishedRoot$jscomp$0,\n      finishedWork = parentFiber,\n      committedLanes = committedLanes$jscomp$0,\n      committedTransitions = committedTransitions$jscomp$0,\n      flags = finishedWork.flags;\n    switch (finishedWork.tag) {\n      case 0:\n      case 11:\n      case 15:\n        recursivelyTraverseReconnectPassiveEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions,\n          includeWorkInProgressEffects\n        );\n        commitHookEffectListMount(8, finishedWork);\n        break;\n      case 23:\n        break;\n      case 22:\n        var instance = finishedWork.stateNode;\n        null !== finishedWork.memoizedState\n          ? instance._visibility & 2\n            ? recursivelyTraverseReconnectPassiveEffects(\n                finishedRoot,\n                finishedWork,\n                committedLanes,\n                committedTransitions,\n                includeWorkInProgressEffects\n              )\n            : recursivelyTraverseAtomicPassiveEffects(\n                finishedRoot,\n                finishedWork\n              )\n          : ((instance._visibility |= 2),\n            recursivelyTraverseReconnectPassiveEffects(\n              finishedRoot,\n              finishedWork,\n              committedLanes,\n              committedTransitions,\n              includeWorkInProgressEffects\n            ));\n        includeWorkInProgressEffects &&\n          flags & 2048 &&\n          commitOffscreenPassiveMountEffects(\n            finishedWork.alternate,\n            finishedWork\n          );\n        break;\n      case 24:\n        recursivelyTraverseReconnectPassiveEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions,\n          includeWorkInProgressEffects\n        );\n        includeWorkInProgressEffects &&\n          flags & 2048 &&\n          commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);\n        break;\n      default:\n        recursivelyTraverseReconnectPassiveEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions,\n          includeWorkInProgressEffects\n        );\n    }\n    parentFiber = parentFiber.sibling;\n  }\n}\nfunction recursivelyTraverseAtomicPassiveEffects(\n  finishedRoot$jscomp$0,\n  parentFiber\n) {\n  if (parentFiber.subtreeFlags & 10256)\n    for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n      var finishedRoot = finishedRoot$jscomp$0,\n        finishedWork = parentFiber,\n        flags = finishedWork.flags;\n      switch (finishedWork.tag) {\n        case 22:\n          recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork);\n          flags & 2048 &&\n            commitOffscreenPassiveMountEffects(\n              finishedWork.alternate,\n              finishedWork\n            );\n          break;\n        case 24:\n          recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork);\n          flags & 2048 &&\n            commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);\n          break;\n        default:\n          recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork);\n      }\n      parentFiber = parentFiber.sibling;\n    }\n}\nvar suspenseyCommitFlag = 8192;\nfunction recursivelyAccumulateSuspenseyCommit(\n  parentFiber,\n  committedLanes,\n  suspendedState\n) {\n  if (parentFiber.subtreeFlags & suspenseyCommitFlag)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      accumulateSuspenseyCommitOnFiber(\n        parentFiber,\n        committedLanes,\n        suspendedState\n      ),\n        (parentFiber = parentFiber.sibling);\n}\nfunction accumulateSuspenseyCommitOnFiber(\n  fiber,\n  committedLanes,\n  suspendedState\n) {\n  switch (fiber.tag) {\n    case 26:\n      recursivelyAccumulateSuspenseyCommit(\n        fiber,\n        committedLanes,\n        suspendedState\n      );\n      fiber.flags & suspenseyCommitFlag &&\n        null !== fiber.memoizedState &&\n        suspendResource(\n          suspendedState,\n          currentHoistableRoot,\n          fiber.memoizedState,\n          fiber.memoizedProps\n        );\n      break;\n    case 5:\n      recursivelyAccumulateSuspenseyCommit(\n        fiber,\n        committedLanes,\n        suspendedState\n      );\n      break;\n    case 3:\n    case 4:\n      var previousHoistableRoot = currentHoistableRoot;\n      currentHoistableRoot = getHoistableRoot(fiber.stateNode.containerInfo);\n      recursivelyAccumulateSuspenseyCommit(\n        fiber,\n        committedLanes,\n        suspendedState\n      );\n      currentHoistableRoot = previousHoistableRoot;\n      break;\n    case 22:\n      null === fiber.memoizedState &&\n        ((previousHoistableRoot = fiber.alternate),\n        null !== previousHoistableRoot &&\n        null !== previousHoistableRoot.memoizedState\n          ? ((previousHoistableRoot = suspenseyCommitFlag),\n            (suspenseyCommitFlag = 16777216),\n            recursivelyAccumulateSuspenseyCommit(\n              fiber,\n              committedLanes,\n              suspendedState\n            ),\n            (suspenseyCommitFlag = previousHoistableRoot))\n          : recursivelyAccumulateSuspenseyCommit(\n              fiber,\n              committedLanes,\n              suspendedState\n            ));\n      break;\n    default:\n      recursivelyAccumulateSuspenseyCommit(\n        fiber,\n        committedLanes,\n        suspendedState\n      );\n  }\n}\nfunction detachAlternateSiblings(parentFiber) {\n  var previousFiber = parentFiber.alternate;\n  if (\n    null !== previousFiber &&\n    ((parentFiber = previousFiber.child), null !== parentFiber)\n  ) {\n    previousFiber.child = null;\n    do\n      (previousFiber = parentFiber.sibling),\n        (parentFiber.sibling = null),\n        (parentFiber = previousFiber);\n    while (null !== parentFiber);\n  }\n}\nfunction recursivelyTraversePassiveUnmountEffects(parentFiber) {\n  var deletions = parentFiber.deletions;\n  if (0 !== (parentFiber.flags & 16)) {\n    if (null !== deletions)\n      for (var i = 0; i < deletions.length; i++) {\n        var childToDelete = deletions[i];\n        nextEffect = childToDelete;\n        commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n          childToDelete,\n          parentFiber\n        );\n      }\n    detachAlternateSiblings(parentFiber);\n  }\n  if (parentFiber.subtreeFlags & 10256)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      commitPassiveUnmountOnFiber(parentFiber),\n        (parentFiber = parentFiber.sibling);\n}\nfunction commitPassiveUnmountOnFiber(finishedWork) {\n  switch (finishedWork.tag) {\n    case 0:\n    case 11:\n    case 15:\n      recursivelyTraversePassiveUnmountEffects(finishedWork);\n      finishedWork.flags & 2048 &&\n        commitHookEffectListUnmount(9, finishedWork, finishedWork.return);\n      break;\n    case 3:\n      recursivelyTraversePassiveUnmountEffects(finishedWork);\n      break;\n    case 12:\n      recursivelyTraversePassiveUnmountEffects(finishedWork);\n      break;\n    case 22:\n      var instance = finishedWork.stateNode;\n      null !== finishedWork.memoizedState &&\n      instance._visibility & 2 &&\n      (null === finishedWork.return || 13 !== finishedWork.return.tag)\n        ? ((instance._visibility &= -3),\n          recursivelyTraverseDisconnectPassiveEffects(finishedWork))\n        : recursivelyTraversePassiveUnmountEffects(finishedWork);\n      break;\n    default:\n      recursivelyTraversePassiveUnmountEffects(finishedWork);\n  }\n}\nfunction recursivelyTraverseDisconnectPassiveEffects(parentFiber) {\n  var deletions = parentFiber.deletions;\n  if (0 !== (parentFiber.flags & 16)) {\n    if (null !== deletions)\n      for (var i = 0; i < deletions.length; i++) {\n        var childToDelete = deletions[i];\n        nextEffect = childToDelete;\n        commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n          childToDelete,\n          parentFiber\n        );\n      }\n    detachAlternateSiblings(parentFiber);\n  }\n  for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n    deletions = parentFiber;\n    switch (deletions.tag) {\n      case 0:\n      case 11:\n      case 15:\n        commitHookEffectListUnmount(8, deletions, deletions.return);\n        recursivelyTraverseDisconnectPassiveEffects(deletions);\n        break;\n      case 22:\n        i = deletions.stateNode;\n        i._visibility & 2 &&\n          ((i._visibility &= -3),\n          recursivelyTraverseDisconnectPassiveEffects(deletions));\n        break;\n      default:\n        recursivelyTraverseDisconnectPassiveEffects(deletions);\n    }\n    parentFiber = parentFiber.sibling;\n  }\n}\nfunction commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n  deletedSubtreeRoot,\n  nearestMountedAncestor\n) {\n  for (; null !== nextEffect; ) {\n    var fiber = nextEffect;\n    switch (fiber.tag) {\n      case 0:\n      case 11:\n      case 15:\n        commitHookEffectListUnmount(8, fiber, nearestMountedAncestor);\n        break;\n      case 23:\n      case 22:\n        if (\n          null !== fiber.memoizedState &&\n          null !== fiber.memoizedState.cachePool\n        ) {\n          var cache = fiber.memoizedState.cachePool.pool;\n          null != cache && cache.refCount++;\n        }\n        break;\n      case 24:\n        releaseCache(fiber.memoizedState.cache);\n    }\n    cache = fiber.child;\n    if (null !== cache) (cache.return = fiber), (nextEffect = cache);\n    else\n      a: for (fiber = deletedSubtreeRoot; null !== nextEffect; ) {\n        cache = nextEffect;\n        var sibling = cache.sibling,\n          returnFiber = cache.return;\n        detachFiberAfterEffects(cache);\n        if (cache === fiber) {\n          nextEffect = null;\n          break a;\n        }\n        if (null !== sibling) {\n          sibling.return = returnFiber;\n          nextEffect = sibling;\n          break a;\n        }\n        nextEffect = returnFiber;\n      }\n  }\n}\nvar DefaultAsyncDispatcher = {\n    getCacheForType: function (resourceType) {\n      var cache = readContext(CacheContext),\n        cacheForType = cache.data.get(resourceType);\n      void 0 === cacheForType &&\n        ((cacheForType = resourceType()),\n        cache.data.set(resourceType, cacheForType));\n      return cacheForType;\n    },\n    cacheSignal: function () {\n      return readContext(CacheContext).controller.signal;\n    }\n  },\n  PossiblyWeakMap = \"function\" === typeof WeakMap ? WeakMap : Map,\n  executionContext = 0,\n  workInProgressRoot = null,\n  workInProgress = null,\n  workInProgressRootRenderLanes = 0,\n  workInProgressSuspendedReason = 0,\n  workInProgressThrownValue = null,\n  workInProgressRootDidSkipSuspendedSiblings = !1,\n  workInProgressRootIsPrerendering = !1,\n  workInProgressRootDidAttachPingListener = !1,\n  entangledRenderLanes = 0,\n  workInProgressRootExitStatus = 0,\n  workInProgressRootSkippedLanes = 0,\n  workInProgressRootInterleavedUpdatedLanes = 0,\n  workInProgressRootPingedLanes = 0,\n  workInProgressDeferredLane = 0,\n  workInProgressSuspendedRetryLanes = 0,\n  workInProgressRootConcurrentErrors = null,\n  workInProgressRootRecoverableErrors = null,\n  workInProgressRootDidIncludeRecursiveRenderUpdate = !1,\n  globalMostRecentFallbackTime = 0,\n  globalMostRecentTransitionTime = 0,\n  workInProgressRootRenderTargetTime = Infinity,\n  workInProgressTransitions = null,\n  legacyErrorBoundariesThatAlreadyFailed = null,\n  pendingEffectsStatus = 0,\n  pendingEffectsRoot = null,\n  pendingFinishedWork = null,\n  pendingEffectsLanes = 0,\n  pendingEffectsRemainingLanes = 0,\n  pendingPassiveTransitions = null,\n  pendingRecoverableErrors = null,\n  nestedUpdateCount = 0,\n  rootWithNestedUpdates = null;\nfunction requestUpdateLane() {\n  return 0 !== (executionContext & 2) && 0 !== workInProgressRootRenderLanes\n    ? workInProgressRootRenderLanes & -workInProgressRootRenderLanes\n    : null !== ReactSharedInternals.T\n      ? requestTransitionLane()\n      : resolveUpdatePriority();\n}\nfunction requestDeferredLane() {\n  if (0 === workInProgressDeferredLane)\n    if (0 === (workInProgressRootRenderLanes & 536870912) || isHydrating) {\n      var lane = nextTransitionDeferredLane;\n      nextTransitionDeferredLane <<= 1;\n      0 === (nextTransitionDeferredLane & 3932160) &&\n        (nextTransitionDeferredLane = 262144);\n      workInProgressDeferredLane = lane;\n    } else workInProgressDeferredLane = 536870912;\n  lane = suspenseHandlerStackCursor.current;\n  null !== lane && (lane.flags |= 32);\n  return workInProgressDeferredLane;\n}\nfunction scheduleUpdateOnFiber(root, fiber, lane) {\n  if (\n    (root === workInProgressRoot &&\n      (2 === workInProgressSuspendedReason ||\n        9 === workInProgressSuspendedReason)) ||\n    null !== root.cancelPendingCommit\n  )\n    prepareFreshStack(root, 0),\n      markRootSuspended(\n        root,\n        workInProgressRootRenderLanes,\n        workInProgressDeferredLane,\n        !1\n      );\n  markRootUpdated$1(root, lane);\n  if (0 === (executionContext & 2) || root !== workInProgressRoot)\n    root === workInProgressRoot &&\n      (0 === (executionContext & 2) &&\n        (workInProgressRootInterleavedUpdatedLanes |= lane),\n      4 === workInProgressRootExitStatus &&\n        markRootSuspended(\n          root,\n          workInProgressRootRenderLanes,\n          workInProgressDeferredLane,\n          !1\n        )),\n      ensureRootIsScheduled(root);\n}\nfunction performWorkOnRoot(root$jscomp$0, lanes, forceSync) {\n  if (0 !== (executionContext & 6)) throw Error(formatProdErrorMessage(327));\n  var shouldTimeSlice =\n      (!forceSync &&\n        0 === (lanes & 127) &&\n        0 === (lanes & root$jscomp$0.expiredLanes)) ||\n      checkIfRootIsPrerendering(root$jscomp$0, lanes),\n    exitStatus = shouldTimeSlice\n      ? renderRootConcurrent(root$jscomp$0, lanes)\n      : renderRootSync(root$jscomp$0, lanes, !0),\n    renderWasConcurrent = shouldTimeSlice;\n  do {\n    if (0 === exitStatus) {\n      workInProgressRootIsPrerendering &&\n        !shouldTimeSlice &&\n        markRootSuspended(root$jscomp$0, lanes, 0, !1);\n      break;\n    } else {\n      forceSync = root$jscomp$0.current.alternate;\n      if (\n        renderWasConcurrent &&\n        !isRenderConsistentWithExternalStores(forceSync)\n      ) {\n        exitStatus = renderRootSync(root$jscomp$0, lanes, !1);\n        renderWasConcurrent = !1;\n        continue;\n      }\n      if (2 === exitStatus) {\n        renderWasConcurrent = lanes;\n        if (root$jscomp$0.errorRecoveryDisabledLanes & renderWasConcurrent)\n          var JSCompiler_inline_result = 0;\n        else\n          (JSCompiler_inline_result = root$jscomp$0.pendingLanes & -536870913),\n            (JSCompiler_inline_result =\n              0 !== JSCompiler_inline_result\n                ? JSCompiler_inline_result\n                : JSCompiler_inline_result & 536870912\n                  ? 536870912\n                  : 0);\n        if (0 !== JSCompiler_inline_result) {\n          lanes = JSCompiler_inline_result;\n          a: {\n            var root = root$jscomp$0;\n            exitStatus = workInProgressRootConcurrentErrors;\n            var wasRootDehydrated = root.current.memoizedState.isDehydrated;\n            wasRootDehydrated &&\n              (prepareFreshStack(root, JSCompiler_inline_result).flags |= 256);\n            JSCompiler_inline_result = renderRootSync(\n              root,\n              JSCompiler_inline_result,\n              !1\n            );\n            if (2 !== JSCompiler_inline_result) {\n              if (\n                workInProgressRootDidAttachPingListener &&\n                !wasRootDehydrated\n              ) {\n                root.errorRecoveryDisabledLanes |= renderWasConcurrent;\n                workInProgressRootInterleavedUpdatedLanes |=\n                  renderWasConcurrent;\n                exitStatus = 4;\n                break a;\n              }\n              renderWasConcurrent = workInProgressRootRecoverableErrors;\n              workInProgressRootRecoverableErrors = exitStatus;\n              null !== renderWasConcurrent &&\n                (null === workInProgressRootRecoverableErrors\n                  ? (workInProgressRootRecoverableErrors = renderWasConcurrent)\n                  : workInProgressRootRecoverableErrors.push.apply(\n                      workInProgressRootRecoverableErrors,\n                      renderWasConcurrent\n                    ));\n            }\n            exitStatus = JSCompiler_inline_result;\n          }\n          renderWasConcurrent = !1;\n          if (2 !== exitStatus) continue;\n        }\n      }\n      if (1 === exitStatus) {\n        prepareFreshStack(root$jscomp$0, 0);\n        markRootSuspended(root$jscomp$0, lanes, 0, !0);\n        break;\n      }\n      a: {\n        shouldTimeSlice = root$jscomp$0;\n        renderWasConcurrent = exitStatus;\n        switch (renderWasConcurrent) {\n          case 0:\n          case 1:\n            throw Error(formatProdErrorMessage(345));\n          case 4:\n            if ((lanes & 4194048) !== lanes) break;\n          case 6:\n            markRootSuspended(\n              shouldTimeSlice,\n              lanes,\n              workInProgressDeferredLane,\n              !workInProgressRootDidSkipSuspendedSiblings\n            );\n            break a;\n          case 2:\n            workInProgressRootRecoverableErrors = null;\n            break;\n          case 3:\n          case 5:\n            break;\n          default:\n            throw Error(formatProdErrorMessage(329));\n        }\n        if (\n          (lanes & 62914560) === lanes &&\n          ((exitStatus = globalMostRecentFallbackTime + 300 - now()),\n          10 < exitStatus)\n        ) {\n          markRootSuspended(\n            shouldTimeSlice,\n            lanes,\n            workInProgressDeferredLane,\n            !workInProgressRootDidSkipSuspendedSiblings\n          );\n          if (0 !== getNextLanes(shouldTimeSlice, 0, !0)) break a;\n          pendingEffectsLanes = lanes;\n          shouldTimeSlice.timeoutHandle = scheduleTimeout(\n            commitRootWhenReady.bind(\n              null,\n              shouldTimeSlice,\n              forceSync,\n              workInProgressRootRecoverableErrors,\n              workInProgressTransitions,\n              workInProgressRootDidIncludeRecursiveRenderUpdate,\n              lanes,\n              workInProgressDeferredLane,\n              workInProgressRootInterleavedUpdatedLanes,\n              workInProgressSuspendedRetryLanes,\n              workInProgressRootDidSkipSuspendedSiblings,\n              renderWasConcurrent,\n              \"Throttled\",\n              -0,\n              0\n            ),\n            exitStatus\n          );\n          break a;\n        }\n        commitRootWhenReady(\n          shouldTimeSlice,\n          forceSync,\n          workInProgressRootRecoverableErrors,\n          workInProgressTransitions,\n          workInProgressRootDidIncludeRecursiveRenderUpdate,\n          lanes,\n          workInProgressDeferredLane,\n          workInProgressRootInterleavedUpdatedLanes,\n          workInProgressSuspendedRetryLanes,\n          workInProgressRootDidSkipSuspendedSiblings,\n          renderWasConcurrent,\n          null,\n          -0,\n          0\n        );\n      }\n    }\n    break;\n  } while (1);\n  ensureRootIsScheduled(root$jscomp$0);\n}\nfunction commitRootWhenReady(\n  root,\n  finishedWork,\n  recoverableErrors,\n  transitions,\n  didIncludeRenderPhaseUpdate,\n  lanes,\n  spawnedLane,\n  updatedLanes,\n  suspendedRetryLanes,\n  didSkipSuspendedSiblings,\n  exitStatus,\n  suspendedCommitReason,\n  completedRenderStartTime,\n  completedRenderEndTime\n) {\n  root.timeoutHandle = -1;\n  suspendedCommitReason = finishedWork.subtreeFlags;\n  if (\n    suspendedCommitReason & 8192 ||\n    16785408 === (suspendedCommitReason & 16785408)\n  ) {\n    suspendedCommitReason = {\n      stylesheets: null,\n      count: 0,\n      imgCount: 0,\n      imgBytes: 0,\n      suspenseyImages: [],\n      waitingForImages: !0,\n      waitingForViewTransition: !1,\n      unsuspend: noop$1\n    };\n    accumulateSuspenseyCommitOnFiber(\n      finishedWork,\n      lanes,\n      suspendedCommitReason\n    );\n    var timeoutOffset =\n      (lanes & 62914560) === lanes\n        ? globalMostRecentFallbackTime - now()\n        : (lanes & 4194048) === lanes\n          ? globalMostRecentTransitionTime - now()\n          : 0;\n    timeoutOffset = waitForCommitToBeReady(\n      suspendedCommitReason,\n      timeoutOffset\n    );\n    if (null !== timeoutOffset) {\n      pendingEffectsLanes = lanes;\n      root.cancelPendingCommit = timeoutOffset(\n        commitRoot.bind(\n          null,\n          root,\n          finishedWork,\n          lanes,\n          recoverableErrors,\n          transitions,\n          didIncludeRenderPhaseUpdate,\n          spawnedLane,\n          updatedLanes,\n          suspendedRetryLanes,\n          exitStatus,\n          suspendedCommitReason,\n          null,\n          completedRenderStartTime,\n          completedRenderEndTime\n        )\n      );\n      markRootSuspended(root, lanes, spawnedLane, !didSkipSuspendedSiblings);\n      return;\n    }\n  }\n  commitRoot(\n    root,\n    finishedWork,\n    lanes,\n    recoverableErrors,\n    transitions,\n    didIncludeRenderPhaseUpdate,\n    spawnedLane,\n    updatedLanes,\n    suspendedRetryLanes\n  );\n}\nfunction isRenderConsistentWithExternalStores(finishedWork) {\n  for (var node = finishedWork; ; ) {\n    var tag = node.tag;\n    if (\n      (0 === tag || 11 === tag || 15 === tag) &&\n      node.flags & 16384 &&\n      ((tag = node.updateQueue),\n      null !== tag && ((tag = tag.stores), null !== tag))\n    )\n      for (var i = 0; i < tag.length; i++) {\n        var check = tag[i],\n          getSnapshot = check.getSnapshot;\n        check = check.value;\n        try {\n          if (!objectIs(getSnapshot(), check)) return !1;\n        } catch (error) {\n          return !1;\n        }\n      }\n    tag = node.child;\n    if (node.subtreeFlags & 16384 && null !== tag)\n      (tag.return = node), (node = tag);\n    else {\n      if (node === finishedWork) break;\n      for (; null === node.sibling; ) {\n        if (null === node.return || node.return === finishedWork) return !0;\n        node = node.return;\n      }\n      node.sibling.return = node.return;\n      node = node.sibling;\n    }\n  }\n  return !0;\n}\nfunction markRootSuspended(\n  root,\n  suspendedLanes,\n  spawnedLane,\n  didAttemptEntireTree\n) {\n  suspendedLanes &= ~workInProgressRootPingedLanes;\n  suspendedLanes &= ~workInProgressRootInterleavedUpdatedLanes;\n  root.suspendedLanes |= suspendedLanes;\n  root.pingedLanes &= ~suspendedLanes;\n  didAttemptEntireTree && (root.warmLanes |= suspendedLanes);\n  didAttemptEntireTree = root.expirationTimes;\n  for (var lanes = suspendedLanes; 0 < lanes; ) {\n    var index$6 = 31 - clz32(lanes),\n      lane = 1 << index$6;\n    didAttemptEntireTree[index$6] = -1;\n    lanes &= ~lane;\n  }\n  0 !== spawnedLane &&\n    markSpawnedDeferredLane(root, spawnedLane, suspendedLanes);\n}\nfunction flushSyncWork$1() {\n  return 0 === (executionContext & 6)\n    ? (flushSyncWorkAcrossRoots_impl(0, !1), !1)\n    : !0;\n}\nfunction resetWorkInProgressStack() {\n  if (null !== workInProgress) {\n    if (0 === workInProgressSuspendedReason)\n      var interruptedWork = workInProgress.return;\n    else\n      (interruptedWork = workInProgress),\n        (lastContextDependency = currentlyRenderingFiber$1 = null),\n        resetHooksOnUnwind(interruptedWork),\n        (thenableState$1 = null),\n        (thenableIndexCounter$1 = 0),\n        (interruptedWork = workInProgress);\n    for (; null !== interruptedWork; )\n      unwindInterruptedWork(interruptedWork.alternate, interruptedWork),\n        (interruptedWork = interruptedWork.return);\n    workInProgress = null;\n  }\n}\nfunction prepareFreshStack(root, lanes) {\n  var timeoutHandle = root.timeoutHandle;\n  -1 !== timeoutHandle &&\n    ((root.timeoutHandle = -1), cancelTimeout(timeoutHandle));\n  timeoutHandle = root.cancelPendingCommit;\n  null !== timeoutHandle &&\n    ((root.cancelPendingCommit = null), timeoutHandle());\n  pendingEffectsLanes = 0;\n  resetWorkInProgressStack();\n  workInProgressRoot = root;\n  workInProgress = timeoutHandle = createWorkInProgress(root.current, null);\n  workInProgressRootRenderLanes = lanes;\n  workInProgressSuspendedReason = 0;\n  workInProgressThrownValue = null;\n  workInProgressRootDidSkipSuspendedSiblings = !1;\n  workInProgressRootIsPrerendering = checkIfRootIsPrerendering(root, lanes);\n  workInProgressRootDidAttachPingListener = !1;\n  workInProgressSuspendedRetryLanes =\n    workInProgressDeferredLane =\n    workInProgressRootPingedLanes =\n    workInProgressRootInterleavedUpdatedLanes =\n    workInProgressRootSkippedLanes =\n    workInProgressRootExitStatus =\n      0;\n  workInProgressRootRecoverableErrors = workInProgressRootConcurrentErrors =\n    null;\n  workInProgressRootDidIncludeRecursiveRenderUpdate = !1;\n  0 !== (lanes & 8) && (lanes |= lanes & 32);\n  var allEntangledLanes = root.entangledLanes;\n  if (0 !== allEntangledLanes)\n    for (\n      root = root.entanglements, allEntangledLanes &= lanes;\n      0 < allEntangledLanes;\n\n    ) {\n      var index$4 = 31 - clz32(allEntangledLanes),\n        lane = 1 << index$4;\n      lanes |= root[index$4];\n      allEntangledLanes &= ~lane;\n    }\n  entangledRenderLanes = lanes;\n  finishQueueingConcurrentUpdates();\n  return timeoutHandle;\n}\nfunction handleThrow(root, thrownValue) {\n  currentlyRenderingFiber = null;\n  ReactSharedInternals.H = ContextOnlyDispatcher;\n  thrownValue === SuspenseException || thrownValue === SuspenseActionException\n    ? ((thrownValue = getSuspendedThenable()),\n      (workInProgressSuspendedReason = 3))\n    : thrownValue === SuspenseyCommitException\n      ? ((thrownValue = getSuspendedThenable()),\n        (workInProgressSuspendedReason = 4))\n      : (workInProgressSuspendedReason =\n          thrownValue === SelectiveHydrationException\n            ? 8\n            : null !== thrownValue &&\n                \"object\" === typeof thrownValue &&\n                \"function\" === typeof thrownValue.then\n              ? 6\n              : 1);\n  workInProgressThrownValue = thrownValue;\n  null === workInProgress &&\n    ((workInProgressRootExitStatus = 1),\n    logUncaughtError(\n      root,\n      createCapturedValueAtFiber(thrownValue, root.current)\n    ));\n}\nfunction shouldRemainOnPreviousScreen() {\n  var handler = suspenseHandlerStackCursor.current;\n  return null === handler\n    ? !0\n    : (workInProgressRootRenderLanes & 4194048) ===\n        workInProgressRootRenderLanes\n      ? null === shellBoundary\n        ? !0\n        : !1\n      : (workInProgressRootRenderLanes & 62914560) ===\n            workInProgressRootRenderLanes ||\n          0 !== (workInProgressRootRenderLanes & 536870912)\n        ? handler === shellBoundary\n        : !1;\n}\nfunction pushDispatcher() {\n  var prevDispatcher = ReactSharedInternals.H;\n  ReactSharedInternals.H = ContextOnlyDispatcher;\n  return null === prevDispatcher ? ContextOnlyDispatcher : prevDispatcher;\n}\nfunction pushAsyncDispatcher() {\n  var prevAsyncDispatcher = ReactSharedInternals.A;\n  ReactSharedInternals.A = DefaultAsyncDispatcher;\n  return prevAsyncDispatcher;\n}\nfunction renderDidSuspendDelayIfPossible() {\n  workInProgressRootExitStatus = 4;\n  workInProgressRootDidSkipSuspendedSiblings ||\n    ((workInProgressRootRenderLanes & 4194048) !==\n      workInProgressRootRenderLanes &&\n      null !== suspenseHandlerStackCursor.current) ||\n    (workInProgressRootIsPrerendering = !0);\n  (0 === (workInProgressRootSkippedLanes & 134217727) &&\n    0 === (workInProgressRootInterleavedUpdatedLanes & 134217727)) ||\n    null === workInProgressRoot ||\n    markRootSuspended(\n      workInProgressRoot,\n      workInProgressRootRenderLanes,\n      workInProgressDeferredLane,\n      !1\n    );\n}\nfunction renderRootSync(root, lanes, shouldYieldForPrerendering) {\n  var prevExecutionContext = executionContext;\n  executionContext |= 2;\n  var prevDispatcher = pushDispatcher(),\n    prevAsyncDispatcher = pushAsyncDispatcher();\n  if (workInProgressRoot !== root || workInProgressRootRenderLanes !== lanes)\n    (workInProgressTransitions = null), prepareFreshStack(root, lanes);\n  lanes = !1;\n  var exitStatus = workInProgressRootExitStatus;\n  a: do\n    try {\n      if (0 !== workInProgressSuspendedReason && null !== workInProgress) {\n        var unitOfWork = workInProgress,\n          thrownValue = workInProgressThrownValue;\n        switch (workInProgressSuspendedReason) {\n          case 8:\n            resetWorkInProgressStack();\n            exitStatus = 6;\n            break a;\n          case 3:\n          case 2:\n          case 9:\n          case 6:\n            null === suspenseHandlerStackCursor.current && (lanes = !0);\n            var reason = workInProgressSuspendedReason;\n            workInProgressSuspendedReason = 0;\n            workInProgressThrownValue = null;\n            throwAndUnwindWorkLoop(root, unitOfWork, thrownValue, reason);\n            if (\n              shouldYieldForPrerendering &&\n              workInProgressRootIsPrerendering\n            ) {\n              exitStatus = 0;\n              break a;\n            }\n            break;\n          default:\n            (reason = workInProgressSuspendedReason),\n              (workInProgressSuspendedReason = 0),\n              (workInProgressThrownValue = null),\n              throwAndUnwindWorkLoop(root, unitOfWork, thrownValue, reason);\n        }\n      }\n      workLoopSync();\n      exitStatus = workInProgressRootExitStatus;\n      break;\n    } catch (thrownValue$165) {\n      handleThrow(root, thrownValue$165);\n    }\n  while (1);\n  lanes && root.shellSuspendCounter++;\n  lastContextDependency = currentlyRenderingFiber$1 = null;\n  executionContext = prevExecutionContext;\n  ReactSharedInternals.H = prevDispatcher;\n  ReactSharedInternals.A = prevAsyncDispatcher;\n  null === workInProgress &&\n    ((workInProgressRoot = null),\n    (workInProgressRootRenderLanes = 0),\n    finishQueueingConcurrentUpdates());\n  return exitStatus;\n}\nfunction workLoopSync() {\n  for (; null !== workInProgress; ) performUnitOfWork(workInProgress);\n}\nfunction renderRootConcurrent(root, lanes) {\n  var prevExecutionContext = executionContext;\n  executionContext |= 2;\n  var prevDispatcher = pushDispatcher(),\n    prevAsyncDispatcher = pushAsyncDispatcher();\n  workInProgressRoot !== root || workInProgressRootRenderLanes !== lanes\n    ? ((workInProgressTransitions = null),\n      (workInProgressRootRenderTargetTime = now() + 500),\n      prepareFreshStack(root, lanes))\n    : (workInProgressRootIsPrerendering = checkIfRootIsPrerendering(\n        root,\n        lanes\n      ));\n  a: do\n    try {\n      if (0 !== workInProgressSuspendedReason && null !== workInProgress) {\n        lanes = workInProgress;\n        var thrownValue = workInProgressThrownValue;\n        b: switch (workInProgressSuspendedReason) {\n          case 1:\n            workInProgressSuspendedReason = 0;\n            workInProgressThrownValue = null;\n            throwAndUnwindWorkLoop(root, lanes, thrownValue, 1);\n            break;\n          case 2:\n          case 9:\n            if (isThenableResolved(thrownValue)) {\n              workInProgressSuspendedReason = 0;\n              workInProgressThrownValue = null;\n              replaySuspendedUnitOfWork(lanes);\n              break;\n            }\n            lanes = function () {\n              (2 !== workInProgressSuspendedReason &&\n                9 !== workInProgressSuspendedReason) ||\n                workInProgressRoot !== root ||\n                (workInProgressSuspendedReason = 7);\n              ensureRootIsScheduled(root);\n            };\n            thrownValue.then(lanes, lanes);\n            break a;\n          case 3:\n            workInProgressSuspendedReason = 7;\n            break a;\n          case 4:\n            workInProgressSuspendedReason = 5;\n            break a;\n          case 7:\n            isThenableResolved(thrownValue)\n              ? ((workInProgressSuspendedReason = 0),\n                (workInProgressThrownValue = null),\n                replaySuspendedUnitOfWork(lanes))\n              : ((workInProgressSuspendedReason = 0),\n                (workInProgressThrownValue = null),\n                throwAndUnwindWorkLoop(root, lanes, thrownValue, 7));\n            break;\n          case 5:\n            var resource = null;\n            switch (workInProgress.tag) {\n              case 26:\n                resource = workInProgress.memoizedState;\n              case 5:\n              case 27:\n                var hostFiber = workInProgress;\n                if (\n                  resource\n                    ? preloadResource(resource)\n                    : hostFiber.stateNode.complete\n                ) {\n                  workInProgressSuspendedReason = 0;\n                  workInProgressThrownValue = null;\n                  var sibling = hostFiber.sibling;\n                  if (null !== sibling) workInProgress = sibling;\n                  else {\n                    var returnFiber = hostFiber.return;\n                    null !== returnFiber\n                      ? ((workInProgress = returnFiber),\n                        completeUnitOfWork(returnFiber))\n                      : (workInProgress = null);\n                  }\n                  break b;\n                }\n            }\n            workInProgressSuspendedReason = 0;\n            workInProgressThrownValue = null;\n            throwAndUnwindWorkLoop(root, lanes, thrownValue, 5);\n            break;\n          case 6:\n            workInProgressSuspendedReason = 0;\n            workInProgressThrownValue = null;\n            throwAndUnwindWorkLoop(root, lanes, thrownValue, 6);\n            break;\n          case 8:\n            resetWorkInProgressStack();\n            workInProgressRootExitStatus = 6;\n            break a;\n          default:\n            throw Error(formatProdErrorMessage(462));\n        }\n      }\n      workLoopConcurrentByScheduler();\n      break;\n    } catch (thrownValue$167) {\n      handleThrow(root, thrownValue$167);\n    }\n  while (1);\n  lastContextDependency = currentlyRenderingFiber$1 = null;\n  ReactSharedInternals.H = prevDispatcher;\n  ReactSharedInternals.A = prevAsyncDispatcher;\n  executionContext = prevExecutionContext;\n  if (null !== workInProgress) return 0;\n  workInProgressRoot = null;\n  workInProgressRootRenderLanes = 0;\n  finishQueueingConcurrentUpdates();\n  return workInProgressRootExitStatus;\n}\nfunction workLoopConcurrentByScheduler() {\n  for (; null !== workInProgress && !shouldYield(); )\n    performUnitOfWork(workInProgress);\n}\nfunction performUnitOfWork(unitOfWork) {\n  var next = beginWork(unitOfWork.alternate, unitOfWork, entangledRenderLanes);\n  unitOfWork.memoizedProps = unitOfWork.pendingProps;\n  null === next ? completeUnitOfWork(unitOfWork) : (workInProgress = next);\n}\nfunction replaySuspendedUnitOfWork(unitOfWork) {\n  var next = unitOfWork;\n  var current = next.alternate;\n  switch (next.tag) {\n    case 15:\n    case 0:\n      next = replayFunctionComponent(\n        current,\n        next,\n        next.pendingProps,\n        next.type,\n        void 0,\n        workInProgressRootRenderLanes\n      );\n      break;\n    case 11:\n      next = replayFunctionComponent(\n        current,\n        next,\n        next.pendingProps,\n        next.type.render,\n        next.ref,\n        workInProgressRootRenderLanes\n      );\n      break;\n    case 5:\n      resetHooksOnUnwind(next);\n    default:\n      unwindInterruptedWork(current, next),\n        (next = workInProgress =\n          resetWorkInProgress(next, entangledRenderLanes)),\n        (next = beginWork(current, next, entangledRenderLanes));\n  }\n  unitOfWork.memoizedProps = unitOfWork.pendingProps;\n  null === next ? completeUnitOfWork(unitOfWork) : (workInProgress = next);\n}\nfunction throwAndUnwindWorkLoop(\n  root,\n  unitOfWork,\n  thrownValue,\n  suspendedReason\n) {\n  lastContextDependency = currentlyRenderingFiber$1 = null;\n  resetHooksOnUnwind(unitOfWork);\n  thenableState$1 = null;\n  thenableIndexCounter$1 = 0;\n  var returnFiber = unitOfWork.return;\n  try {\n    if (\n      throwException(\n        root,\n        returnFiber,\n        unitOfWork,\n        thrownValue,\n        workInProgressRootRenderLanes\n      )\n    ) {\n      workInProgressRootExitStatus = 1;\n      logUncaughtError(\n        root,\n        createCapturedValueAtFiber(thrownValue, root.current)\n      );\n      workInProgress = null;\n      return;\n    }\n  } catch (error) {\n    if (null !== returnFiber) throw ((workInProgress = returnFiber), error);\n    workInProgressRootExitStatus = 1;\n    logUncaughtError(\n      root,\n      createCapturedValueAtFiber(thrownValue, root.current)\n    );\n    workInProgress = null;\n    return;\n  }\n  if (unitOfWork.flags & 32768) {\n    if (isHydrating || 1 === suspendedReason) root = !0;\n    else if (\n      workInProgressRootIsPrerendering ||\n      0 !== (workInProgressRootRenderLanes & 536870912)\n    )\n      root = !1;\n    else if (\n      ((workInProgressRootDidSkipSuspendedSiblings = root = !0),\n      2 === suspendedReason ||\n        9 === suspendedReason ||\n        3 === suspendedReason ||\n        6 === suspendedReason)\n    )\n      (suspendedReason = suspenseHandlerStackCursor.current),\n        null !== suspendedReason &&\n          13 === suspendedReason.tag &&\n          (suspendedReason.flags |= 16384);\n    unwindUnitOfWork(unitOfWork, root);\n  } else completeUnitOfWork(unitOfWork);\n}\nfunction completeUnitOfWork(unitOfWork) {\n  var completedWork = unitOfWork;\n  do {\n    if (0 !== (completedWork.flags & 32768)) {\n      unwindUnitOfWork(\n        completedWork,\n        workInProgressRootDidSkipSuspendedSiblings\n      );\n      return;\n    }\n    unitOfWork = completedWork.return;\n    var next = completeWork(\n      completedWork.alternate,\n      completedWork,\n      entangledRenderLanes\n    );\n    if (null !== next) {\n      workInProgress = next;\n      return;\n    }\n    completedWork = completedWork.sibling;\n    if (null !== completedWork) {\n      workInProgress = completedWork;\n      return;\n    }\n    workInProgress = completedWork = unitOfWork;\n  } while (null !== completedWork);\n  0 === workInProgressRootExitStatus && (workInProgressRootExitStatus = 5);\n}\nfunction unwindUnitOfWork(unitOfWork, skipSiblings) {\n  do {\n    var next = unwindWork(unitOfWork.alternate, unitOfWork);\n    if (null !== next) {\n      next.flags &= 32767;\n      workInProgress = next;\n      return;\n    }\n    next = unitOfWork.return;\n    null !== next &&\n      ((next.flags |= 32768), (next.subtreeFlags = 0), (next.deletions = null));\n    if (\n      !skipSiblings &&\n      ((unitOfWork = unitOfWork.sibling), null !== unitOfWork)\n    ) {\n      workInProgress = unitOfWork;\n      return;\n    }\n    workInProgress = unitOfWork = next;\n  } while (null !== unitOfWork);\n  workInProgressRootExitStatus = 6;\n  workInProgress = null;\n}\nfunction commitRoot(\n  root,\n  finishedWork,\n  lanes,\n  recoverableErrors,\n  transitions,\n  didIncludeRenderPhaseUpdate,\n  spawnedLane,\n  updatedLanes,\n  suspendedRetryLanes\n) {\n  root.cancelPendingCommit = null;\n  do flushPendingEffects();\n  while (0 !== pendingEffectsStatus);\n  if (0 !== (executionContext & 6)) throw Error(formatProdErrorMessage(327));\n  if (null !== finishedWork) {\n    if (finishedWork === root.current) throw Error(formatProdErrorMessage(177));\n    didIncludeRenderPhaseUpdate = finishedWork.lanes | finishedWork.childLanes;\n    didIncludeRenderPhaseUpdate |= concurrentlyUpdatedLanes;\n    markRootFinished(\n      root,\n      lanes,\n      didIncludeRenderPhaseUpdate,\n      spawnedLane,\n      updatedLanes,\n      suspendedRetryLanes\n    );\n    root === workInProgressRoot &&\n      ((workInProgress = workInProgressRoot = null),\n      (workInProgressRootRenderLanes = 0));\n    pendingFinishedWork = finishedWork;\n    pendingEffectsRoot = root;\n    pendingEffectsLanes = lanes;\n    pendingEffectsRemainingLanes = didIncludeRenderPhaseUpdate;\n    pendingPassiveTransitions = transitions;\n    pendingRecoverableErrors = recoverableErrors;\n    0 !== (finishedWork.subtreeFlags & 10256) ||\n    0 !== (finishedWork.flags & 10256)\n      ? ((root.callbackNode = null),\n        (root.callbackPriority = 0),\n        scheduleCallback$1(NormalPriority$1, function () {\n          flushPassiveEffects();\n          return null;\n        }))\n      : ((root.callbackNode = null), (root.callbackPriority = 0));\n    recoverableErrors = 0 !== (finishedWork.flags & 13878);\n    if (0 !== (finishedWork.subtreeFlags & 13878) || recoverableErrors) {\n      recoverableErrors = ReactSharedInternals.T;\n      ReactSharedInternals.T = null;\n      transitions = ReactDOMSharedInternals.p;\n      ReactDOMSharedInternals.p = 2;\n      spawnedLane = executionContext;\n      executionContext |= 4;\n      try {\n        commitBeforeMutationEffects(root, finishedWork, lanes);\n      } finally {\n        (executionContext = spawnedLane),\n          (ReactDOMSharedInternals.p = transitions),\n          (ReactSharedInternals.T = recoverableErrors);\n      }\n    }\n    pendingEffectsStatus = 1;\n    flushMutationEffects();\n    flushLayoutEffects();\n    flushSpawnedWork();\n  }\n}\nfunction flushMutationEffects() {\n  if (1 === pendingEffectsStatus) {\n    pendingEffectsStatus = 0;\n    var root = pendingEffectsRoot,\n      finishedWork = pendingFinishedWork,\n      rootMutationHasEffect = 0 !== (finishedWork.flags & 13878);\n    if (0 !== (finishedWork.subtreeFlags & 13878) || rootMutationHasEffect) {\n      rootMutationHasEffect = ReactSharedInternals.T;\n      ReactSharedInternals.T = null;\n      var previousPriority = ReactDOMSharedInternals.p;\n      ReactDOMSharedInternals.p = 2;\n      var prevExecutionContext = executionContext;\n      executionContext |= 4;\n      try {\n        commitMutationEffectsOnFiber(finishedWork, root);\n        var priorSelectionInformation = selectionInformation,\n          curFocusedElem = getActiveElementDeep(root.containerInfo),\n          priorFocusedElem = priorSelectionInformation.focusedElem,\n          priorSelectionRange = priorSelectionInformation.selectionRange;\n        if (\n          curFocusedElem !== priorFocusedElem &&\n          priorFocusedElem &&\n          priorFocusedElem.ownerDocument &&\n          containsNode(\n            priorFocusedElem.ownerDocument.documentElement,\n            priorFocusedElem\n          )\n        ) {\n          if (\n            null !== priorSelectionRange &&\n            hasSelectionCapabilities(priorFocusedElem)\n          ) {\n            var start = priorSelectionRange.start,\n              end = priorSelectionRange.end;\n            void 0 === end && (end = start);\n            if (\"selectionStart\" in priorFocusedElem)\n              (priorFocusedElem.selectionStart = start),\n                (priorFocusedElem.selectionEnd = Math.min(\n                  end,\n                  priorFocusedElem.value.length\n                ));\n            else {\n              var doc = priorFocusedElem.ownerDocument || document,\n                win = (doc && doc.defaultView) || window;\n              if (win.getSelection) {\n                var selection = win.getSelection(),\n                  length = priorFocusedElem.textContent.length,\n                  start$jscomp$0 = Math.min(priorSelectionRange.start, length),\n                  end$jscomp$0 =\n                    void 0 === priorSelectionRange.end\n                      ? start$jscomp$0\n                      : Math.min(priorSelectionRange.end, length);\n                !selection.extend &&\n                  start$jscomp$0 > end$jscomp$0 &&\n                  ((curFocusedElem = end$jscomp$0),\n                  (end$jscomp$0 = start$jscomp$0),\n                  (start$jscomp$0 = curFocusedElem));\n                var startMarker = getNodeForCharacterOffset(\n                    priorFocusedElem,\n                    start$jscomp$0\n                  ),\n                  endMarker = getNodeForCharacterOffset(\n                    priorFocusedElem,\n                    end$jscomp$0\n                  );\n                if (\n                  startMarker &&\n                  endMarker &&\n                  (1 !== selection.rangeCount ||\n                    selection.anchorNode !== startMarker.node ||\n                    selection.anchorOffset !== startMarker.offset ||\n                    selection.focusNode !== endMarker.node ||\n                    selection.focusOffset !== endMarker.offset)\n                ) {\n                  var range = doc.createRange();\n                  range.setStart(startMarker.node, startMarker.offset);\n                  selection.removeAllRanges();\n                  start$jscomp$0 > end$jscomp$0\n                    ? (selection.addRange(range),\n                      selection.extend(endMarker.node, endMarker.offset))\n                    : (range.setEnd(endMarker.node, endMarker.offset),\n                      selection.addRange(range));\n                }\n              }\n            }\n          }\n          doc = [];\n          for (\n            selection = priorFocusedElem;\n            (selection = selection.parentNode);\n\n          )\n            1 === selection.nodeType &&\n              doc.push({\n                element: selection,\n                left: selection.scrollLeft,\n                top: selection.scrollTop\n              });\n          \"function\" === typeof priorFocusedElem.focus &&\n            priorFocusedElem.focus();\n          for (\n            priorFocusedElem = 0;\n            priorFocusedElem < doc.length;\n            priorFocusedElem++\n          ) {\n            var info = doc[priorFocusedElem];\n            info.element.scrollLeft = info.left;\n            info.element.scrollTop = info.top;\n          }\n        }\n        _enabled = !!eventsEnabled;\n        selectionInformation = eventsEnabled = null;\n      } finally {\n        (executionContext = prevExecutionContext),\n          (ReactDOMSharedInternals.p = previousPriority),\n          (ReactSharedInternals.T = rootMutationHasEffect);\n      }\n    }\n    root.current = finishedWork;\n    pendingEffectsStatus = 2;\n  }\n}\nfunction flushLayoutEffects() {\n  if (2 === pendingEffectsStatus) {\n    pendingEffectsStatus = 0;\n    var root = pendingEffectsRoot,\n      finishedWork = pendingFinishedWork,\n      rootHasLayoutEffect = 0 !== (finishedWork.flags & 8772);\n    if (0 !== (finishedWork.subtreeFlags & 8772) || rootHasLayoutEffect) {\n      rootHasLayoutEffect = ReactSharedInternals.T;\n      ReactSharedInternals.T = null;\n      var previousPriority = ReactDOMSharedInternals.p;\n      ReactDOMSharedInternals.p = 2;\n      var prevExecutionContext = executionContext;\n      executionContext |= 4;\n      try {\n        commitLayoutEffectOnFiber(root, finishedWork.alternate, finishedWork);\n      } finally {\n        (executionContext = prevExecutionContext),\n          (ReactDOMSharedInternals.p = previousPriority),\n          (ReactSharedInternals.T = rootHasLayoutEffect);\n      }\n    }\n    pendingEffectsStatus = 3;\n  }\n}\nfunction flushSpawnedWork() {\n  if (4 === pendingEffectsStatus || 3 === pendingEffectsStatus) {\n    pendingEffectsStatus = 0;\n    requestPaint();\n    var root = pendingEffectsRoot,\n      finishedWork = pendingFinishedWork,\n      lanes = pendingEffectsLanes,\n      recoverableErrors = pendingRecoverableErrors;\n    0 !== (finishedWork.subtreeFlags & 10256) ||\n    0 !== (finishedWork.flags & 10256)\n      ? (pendingEffectsStatus = 5)\n      : ((pendingEffectsStatus = 0),\n        (pendingFinishedWork = pendingEffectsRoot = null),\n        releaseRootPooledCache(root, root.pendingLanes));\n    var remainingLanes = root.pendingLanes;\n    0 === remainingLanes && (legacyErrorBoundariesThatAlreadyFailed = null);\n    lanesToEventPriority(lanes);\n    finishedWork = finishedWork.stateNode;\n    if (injectedHook && \"function\" === typeof injectedHook.onCommitFiberRoot)\n      try {\n        injectedHook.onCommitFiberRoot(\n          rendererID,\n          finishedWork,\n          void 0,\n          128 === (finishedWork.current.flags & 128)\n        );\n      } catch (err) {}\n    if (null !== recoverableErrors) {\n      finishedWork = ReactSharedInternals.T;\n      remainingLanes = ReactDOMSharedInternals.p;\n      ReactDOMSharedInternals.p = 2;\n      ReactSharedInternals.T = null;\n      try {\n        for (\n          var onRecoverableError = root.onRecoverableError, i = 0;\n          i < recoverableErrors.length;\n          i++\n        ) {\n          var recoverableError = recoverableErrors[i];\n          onRecoverableError(recoverableError.value, {\n            componentStack: recoverableError.stack\n          });\n        }\n      } finally {\n        (ReactSharedInternals.T = finishedWork),\n          (ReactDOMSharedInternals.p = remainingLanes);\n      }\n    }\n    0 !== (pendingEffectsLanes & 3) && flushPendingEffects();\n    ensureRootIsScheduled(root);\n    remainingLanes = root.pendingLanes;\n    0 !== (lanes & 261930) && 0 !== (remainingLanes & 42)\n      ? root === rootWithNestedUpdates\n        ? nestedUpdateCount++\n        : ((nestedUpdateCount = 0), (rootWithNestedUpdates = root))\n      : (nestedUpdateCount = 0);\n    flushSyncWorkAcrossRoots_impl(0, !1);\n  }\n}\nfunction releaseRootPooledCache(root, remainingLanes) {\n  0 === (root.pooledCacheLanes &= remainingLanes) &&\n    ((remainingLanes = root.pooledCache),\n    null != remainingLanes &&\n      ((root.pooledCache = null), releaseCache(remainingLanes)));\n}\nfunction flushPendingEffects() {\n  flushMutationEffects();\n  flushLayoutEffects();\n  flushSpawnedWork();\n  return flushPassiveEffects();\n}\nfunction flushPassiveEffects() {\n  if (5 !== pendingEffectsStatus) return !1;\n  var root = pendingEffectsRoot,\n    remainingLanes = pendingEffectsRemainingLanes;\n  pendingEffectsRemainingLanes = 0;\n  var renderPriority = lanesToEventPriority(pendingEffectsLanes),\n    prevTransition = ReactSharedInternals.T,\n    previousPriority = ReactDOMSharedInternals.p;\n  try {\n    ReactDOMSharedInternals.p = 32 > renderPriority ? 32 : renderPriority;\n    ReactSharedInternals.T = null;\n    renderPriority = pendingPassiveTransitions;\n    pendingPassiveTransitions = null;\n    var root$jscomp$0 = pendingEffectsRoot,\n      lanes = pendingEffectsLanes;\n    pendingEffectsStatus = 0;\n    pendingFinishedWork = pendingEffectsRoot = null;\n    pendingEffectsLanes = 0;\n    if (0 !== (executionContext & 6)) throw Error(formatProdErrorMessage(331));\n    var prevExecutionContext = executionContext;\n    executionContext |= 4;\n    commitPassiveUnmountOnFiber(root$jscomp$0.current);\n    commitPassiveMountOnFiber(\n      root$jscomp$0,\n      root$jscomp$0.current,\n      lanes,\n      renderPriority\n    );\n    executionContext = prevExecutionContext;\n    flushSyncWorkAcrossRoots_impl(0, !1);\n    if (\n      injectedHook &&\n      \"function\" === typeof injectedHook.onPostCommitFiberRoot\n    )\n      try {\n        injectedHook.onPostCommitFiberRoot(rendererID, root$jscomp$0);\n      } catch (err) {}\n    return !0;\n  } finally {\n    (ReactDOMSharedInternals.p = previousPriority),\n      (ReactSharedInternals.T = prevTransition),\n      releaseRootPooledCache(root, remainingLanes);\n  }\n}\nfunction captureCommitPhaseErrorOnRoot(rootFiber, sourceFiber, error) {\n  sourceFiber = createCapturedValueAtFiber(error, sourceFiber);\n  sourceFiber = createRootErrorUpdate(rootFiber.stateNode, sourceFiber, 2);\n  rootFiber = enqueueUpdate(rootFiber, sourceFiber, 2);\n  null !== rootFiber &&\n    (markRootUpdated$1(rootFiber, 2), ensureRootIsScheduled(rootFiber));\n}\nfunction captureCommitPhaseError(sourceFiber, nearestMountedAncestor, error) {\n  if (3 === sourceFiber.tag)\n    captureCommitPhaseErrorOnRoot(sourceFiber, sourceFiber, error);\n  else\n    for (; null !== nearestMountedAncestor; ) {\n      if (3 === nearestMountedAncestor.tag) {\n        captureCommitPhaseErrorOnRoot(\n          nearestMountedAncestor,\n          sourceFiber,\n          error\n        );\n        break;\n      } else if (1 === nearestMountedAncestor.tag) {\n        var instance = nearestMountedAncestor.stateNode;\n        if (\n          \"function\" ===\n            typeof nearestMountedAncestor.type.getDerivedStateFromError ||\n          (\"function\" === typeof instance.componentDidCatch &&\n            (null === legacyErrorBoundariesThatAlreadyFailed ||\n              !legacyErrorBoundariesThatAlreadyFailed.has(instance)))\n        ) {\n          sourceFiber = createCapturedValueAtFiber(error, sourceFiber);\n          error = createClassErrorUpdate(2);\n          instance = enqueueUpdate(nearestMountedAncestor, error, 2);\n          null !== instance &&\n            (initializeClassErrorUpdate(\n              error,\n              instance,\n              nearestMountedAncestor,\n              sourceFiber\n            ),\n            markRootUpdated$1(instance, 2),\n            ensureRootIsScheduled(instance));\n          break;\n        }\n      }\n      nearestMountedAncestor = nearestMountedAncestor.return;\n    }\n}\nfunction attachPingListener(root, wakeable, lanes) {\n  var pingCache = root.pingCache;\n  if (null === pingCache) {\n    pingCache = root.pingCache = new PossiblyWeakMap();\n    var threadIDs = new Set();\n    pingCache.set(wakeable, threadIDs);\n  } else\n    (threadIDs = pingCache.get(wakeable)),\n      void 0 === threadIDs &&\n        ((threadIDs = new Set()), pingCache.set(wakeable, threadIDs));\n  threadIDs.has(lanes) ||\n    ((workInProgressRootDidAttachPingListener = !0),\n    threadIDs.add(lanes),\n    (root = pingSuspendedRoot.bind(null, root, wakeable, lanes)),\n    wakeable.then(root, root));\n}\nfunction pingSuspendedRoot(root, wakeable, pingedLanes) {\n  var pingCache = root.pingCache;\n  null !== pingCache && pingCache.delete(wakeable);\n  root.pingedLanes |= root.suspendedLanes & pingedLanes;\n  root.warmLanes &= ~pingedLanes;\n  workInProgressRoot === root &&\n    (workInProgressRootRenderLanes & pingedLanes) === pingedLanes &&\n    (4 === workInProgressRootExitStatus ||\n    (3 === workInProgressRootExitStatus &&\n      (workInProgressRootRenderLanes & 62914560) ===\n        workInProgressRootRenderLanes &&\n      300 > now() - globalMostRecentFallbackTime)\n      ? 0 === (executionContext & 2) && prepareFreshStack(root, 0)\n      : (workInProgressRootPingedLanes |= pingedLanes),\n    workInProgressSuspendedRetryLanes === workInProgressRootRenderLanes &&\n      (workInProgressSuspendedRetryLanes = 0));\n  ensureRootIsScheduled(root);\n}\nfunction retryTimedOutBoundary(boundaryFiber, retryLane) {\n  0 === retryLane && (retryLane = claimNextRetryLane());\n  boundaryFiber = enqueueConcurrentRenderForLane(boundaryFiber, retryLane);\n  null !== boundaryFiber &&\n    (markRootUpdated$1(boundaryFiber, retryLane),\n    ensureRootIsScheduled(boundaryFiber));\n}\nfunction retryDehydratedSuspenseBoundary(boundaryFiber) {\n  var suspenseState = boundaryFiber.memoizedState,\n    retryLane = 0;\n  null !== suspenseState && (retryLane = suspenseState.retryLane);\n  retryTimedOutBoundary(boundaryFiber, retryLane);\n}\nfunction resolveRetryWakeable(boundaryFiber, wakeable) {\n  var retryLane = 0;\n  switch (boundaryFiber.tag) {\n    case 31:\n    case 13:\n      var retryCache = boundaryFiber.stateNode;\n      var suspenseState = boundaryFiber.memoizedState;\n      null !== suspenseState && (retryLane = suspenseState.retryLane);\n      break;\n    case 19:\n      retryCache = boundaryFiber.stateNode;\n      break;\n    case 22:\n      retryCache = boundaryFiber.stateNode._retryCache;\n      break;\n    default:\n      throw Error(formatProdErrorMessage(314));\n  }\n  null !== retryCache && retryCache.delete(wakeable);\n  retryTimedOutBoundary(boundaryFiber, retryLane);\n}\nfunction scheduleCallback$1(priorityLevel, callback) {\n  return scheduleCallback$3(priorityLevel, callback);\n}\nvar firstScheduledRoot = null,\n  lastScheduledRoot = null,\n  didScheduleMicrotask = !1,\n  mightHavePendingSyncWork = !1,\n  isFlushingWork = !1,\n  currentEventTransitionLane = 0;\nfunction ensureRootIsScheduled(root) {\n  root !== lastScheduledRoot &&\n    null === root.next &&\n    (null === lastScheduledRoot\n      ? (firstScheduledRoot = lastScheduledRoot = root)\n      : (lastScheduledRoot = lastScheduledRoot.next = root));\n  mightHavePendingSyncWork = !0;\n  didScheduleMicrotask ||\n    ((didScheduleMicrotask = !0), scheduleImmediateRootScheduleTask());\n}\nfunction flushSyncWorkAcrossRoots_impl(syncTransitionLanes, onlyLegacy) {\n  if (!isFlushingWork && mightHavePendingSyncWork) {\n    isFlushingWork = !0;\n    do {\n      var didPerformSomeWork = !1;\n      for (var root$170 = firstScheduledRoot; null !== root$170; ) {\n        if (!onlyLegacy)\n          if (0 !== syncTransitionLanes) {\n            var pendingLanes = root$170.pendingLanes;\n            if (0 === pendingLanes) var JSCompiler_inline_result = 0;\n            else {\n              var suspendedLanes = root$170.suspendedLanes,\n                pingedLanes = root$170.pingedLanes;\n              JSCompiler_inline_result =\n                (1 << (31 - clz32(42 | syncTransitionLanes) + 1)) - 1;\n              JSCompiler_inline_result &=\n                pendingLanes & ~(suspendedLanes & ~pingedLanes);\n              JSCompiler_inline_result =\n                JSCompiler_inline_result & 201326741\n                  ? (JSCompiler_inline_result & 201326741) | 1\n                  : JSCompiler_inline_result\n                    ? JSCompiler_inline_result | 2\n                    : 0;\n            }\n            0 !== JSCompiler_inline_result &&\n              ((didPerformSomeWork = !0),\n              performSyncWorkOnRoot(root$170, JSCompiler_inline_result));\n          } else\n            (JSCompiler_inline_result = workInProgressRootRenderLanes),\n              (JSCompiler_inline_result = getNextLanes(\n                root$170,\n                root$170 === workInProgressRoot ? JSCompiler_inline_result : 0,\n                null !== root$170.cancelPendingCommit ||\n                  -1 !== root$170.timeoutHandle\n              )),\n              0 === (JSCompiler_inline_result & 3) ||\n                checkIfRootIsPrerendering(root$170, JSCompiler_inline_result) ||\n                ((didPerformSomeWork = !0),\n                performSyncWorkOnRoot(root$170, JSCompiler_inline_result));\n        root$170 = root$170.next;\n      }\n    } while (didPerformSomeWork);\n    isFlushingWork = !1;\n  }\n}\nfunction processRootScheduleInImmediateTask() {\n  processRootScheduleInMicrotask();\n}\nfunction processRootScheduleInMicrotask() {\n  mightHavePendingSyncWork = didScheduleMicrotask = !1;\n  var syncTransitionLanes = 0;\n  0 !== currentEventTransitionLane &&\n    shouldAttemptEagerTransition() &&\n    (syncTransitionLanes = currentEventTransitionLane);\n  for (\n    var currentTime = now(), prev = null, root = firstScheduledRoot;\n    null !== root;\n\n  ) {\n    var next = root.next,\n      nextLanes = scheduleTaskForRootDuringMicrotask(root, currentTime);\n    if (0 === nextLanes)\n      (root.next = null),\n        null === prev ? (firstScheduledRoot = next) : (prev.next = next),\n        null === next && (lastScheduledRoot = prev);\n    else if (\n      ((prev = root), 0 !== syncTransitionLanes || 0 !== (nextLanes & 3))\n    )\n      mightHavePendingSyncWork = !0;\n    root = next;\n  }\n  (0 !== pendingEffectsStatus && 5 !== pendingEffectsStatus) ||\n    flushSyncWorkAcrossRoots_impl(syncTransitionLanes, !1);\n  0 !== currentEventTransitionLane && (currentEventTransitionLane = 0);\n}\nfunction scheduleTaskForRootDuringMicrotask(root, currentTime) {\n  for (\n    var suspendedLanes = root.suspendedLanes,\n      pingedLanes = root.pingedLanes,\n      expirationTimes = root.expirationTimes,\n      lanes = root.pendingLanes & -62914561;\n    0 < lanes;\n\n  ) {\n    var index$5 = 31 - clz32(lanes),\n      lane = 1 << index$5,\n      expirationTime = expirationTimes[index$5];\n    if (-1 === expirationTime) {\n      if (0 === (lane & suspendedLanes) || 0 !== (lane & pingedLanes))\n        expirationTimes[index$5] = computeExpirationTime(lane, currentTime);\n    } else expirationTime <= currentTime && (root.expiredLanes |= lane);\n    lanes &= ~lane;\n  }\n  currentTime = workInProgressRoot;\n  suspendedLanes = workInProgressRootRenderLanes;\n  suspendedLanes = getNextLanes(\n    root,\n    root === currentTime ? suspendedLanes : 0,\n    null !== root.cancelPendingCommit || -1 !== root.timeoutHandle\n  );\n  pingedLanes = root.callbackNode;\n  if (\n    0 === suspendedLanes ||\n    (root === currentTime &&\n      (2 === workInProgressSuspendedReason ||\n        9 === workInProgressSuspendedReason)) ||\n    null !== root.cancelPendingCommit\n  )\n    return (\n      null !== pingedLanes &&\n        null !== pingedLanes &&\n        cancelCallback$1(pingedLanes),\n      (root.callbackNode = null),\n      (root.callbackPriority = 0)\n    );\n  if (\n    0 === (suspendedLanes & 3) ||\n    checkIfRootIsPrerendering(root, suspendedLanes)\n  ) {\n    currentTime = suspendedLanes & -suspendedLanes;\n    if (currentTime === root.callbackPriority) return currentTime;\n    null !== pingedLanes && cancelCallback$1(pingedLanes);\n    switch (lanesToEventPriority(suspendedLanes)) {\n      case 2:\n      case 8:\n        suspendedLanes = UserBlockingPriority;\n        break;\n      case 32:\n        suspendedLanes = NormalPriority$1;\n        break;\n      case 268435456:\n        suspendedLanes = IdlePriority;\n        break;\n      default:\n        suspendedLanes = NormalPriority$1;\n    }\n    pingedLanes = performWorkOnRootViaSchedulerTask.bind(null, root);\n    suspendedLanes = scheduleCallback$3(suspendedLanes, pingedLanes);\n    root.callbackPriority = currentTime;\n    root.callbackNode = suspendedLanes;\n    return currentTime;\n  }\n  null !== pingedLanes && null !== pingedLanes && cancelCallback$1(pingedLanes);\n  root.callbackPriority = 2;\n  root.callbackNode = null;\n  return 2;\n}\nfunction performWorkOnRootViaSchedulerTask(root, didTimeout) {\n  if (0 !== pendingEffectsStatus && 5 !== pendingEffectsStatus)\n    return (root.callbackNode = null), (root.callbackPriority = 0), null;\n  var originalCallbackNode = root.callbackNode;\n  if (flushPendingEffects() && root.callbackNode !== originalCallbackNode)\n    return null;\n  var workInProgressRootRenderLanes$jscomp$0 = workInProgressRootRenderLanes;\n  workInProgressRootRenderLanes$jscomp$0 = getNextLanes(\n    root,\n    root === workInProgressRoot ? workInProgressRootRenderLanes$jscomp$0 : 0,\n    null !== root.cancelPendingCommit || -1 !== root.timeoutHandle\n  );\n  if (0 === workInProgressRootRenderLanes$jscomp$0) return null;\n  performWorkOnRoot(root, workInProgressRootRenderLanes$jscomp$0, didTimeout);\n  scheduleTaskForRootDuringMicrotask(root, now());\n  return null != root.callbackNode && root.callbackNode === originalCallbackNode\n    ? performWorkOnRootViaSchedulerTask.bind(null, root)\n    : null;\n}\nfunction performSyncWorkOnRoot(root, lanes) {\n  if (flushPendingEffects()) return null;\n  performWorkOnRoot(root, lanes, !0);\n}\nfunction scheduleImmediateRootScheduleTask() {\n  scheduleMicrotask(function () {\n    0 !== (executionContext & 6)\n      ? scheduleCallback$3(\n          ImmediatePriority,\n          processRootScheduleInImmediateTask\n        )\n      : processRootScheduleInMicrotask();\n  });\n}\nfunction requestTransitionLane() {\n  if (0 === currentEventTransitionLane) {\n    var actionScopeLane = currentEntangledLane;\n    0 === actionScopeLane &&\n      ((actionScopeLane = nextTransitionUpdateLane),\n      (nextTransitionUpdateLane <<= 1),\n      0 === (nextTransitionUpdateLane & 261888) &&\n        (nextTransitionUpdateLane = 256));\n    currentEventTransitionLane = actionScopeLane;\n  }\n  return currentEventTransitionLane;\n}\nfunction coerceFormActionProp(actionProp) {\n  return null == actionProp ||\n    \"symbol\" === typeof actionProp ||\n    \"boolean\" === typeof actionProp\n    ? null\n    : \"function\" === typeof actionProp\n      ? actionProp\n      : sanitizeURL(\"\" + actionProp);\n}\nfunction createFormDataWithSubmitter(form, submitter) {\n  var temp = submitter.ownerDocument.createElement(\"input\");\n  temp.name = submitter.name;\n  temp.value = submitter.value;\n  form.id && temp.setAttribute(\"form\", form.id);\n  submitter.parentNode.insertBefore(temp, submitter);\n  form = new FormData(form);\n  temp.parentNode.removeChild(temp);\n  return form;\n}\nfunction extractEvents$1(\n  dispatchQueue,\n  domEventName,\n  maybeTargetInst,\n  nativeEvent,\n  nativeEventTarget\n) {\n  if (\n    \"submit\" === domEventName &&\n    maybeTargetInst &&\n    maybeTargetInst.stateNode === nativeEventTarget\n  ) {\n    var action = coerceFormActionProp(\n        (nativeEventTarget[internalPropsKey] || null).action\n      ),\n      submitter = nativeEvent.submitter;\n    submitter &&\n      ((domEventName = (domEventName = submitter[internalPropsKey] || null)\n        ? coerceFormActionProp(domEventName.formAction)\n        : submitter.getAttribute(\"formAction\")),\n      null !== domEventName && ((action = domEventName), (submitter = null)));\n    var event = new SyntheticEvent(\n      \"action\",\n      \"action\",\n      null,\n      nativeEvent,\n      nativeEventTarget\n    );\n    dispatchQueue.push({\n      event: event,\n      listeners: [\n        {\n          instance: null,\n          listener: function () {\n            if (nativeEvent.defaultPrevented) {\n              if (0 !== currentEventTransitionLane) {\n                var formData = submitter\n                  ? createFormDataWithSubmitter(nativeEventTarget, submitter)\n                  : new FormData(nativeEventTarget);\n                startHostTransition(\n                  maybeTargetInst,\n                  {\n                    pending: !0,\n                    data: formData,\n                    method: nativeEventTarget.method,\n                    action: action\n                  },\n                  null,\n                  formData\n                );\n              }\n            } else\n              \"function\" === typeof action &&\n                (event.preventDefault(),\n                (formData = submitter\n                  ? createFormDataWithSubmitter(nativeEventTarget, submitter)\n                  : new FormData(nativeEventTarget)),\n                startHostTransition(\n                  maybeTargetInst,\n                  {\n                    pending: !0,\n                    data: formData,\n                    method: nativeEventTarget.method,\n                    action: action\n                  },\n                  action,\n                  formData\n                ));\n          },\n          currentTarget: nativeEventTarget\n        }\n      ]\n    });\n  }\n}\nfor (\n  var i$jscomp$inline_1577 = 0;\n  i$jscomp$inline_1577 < simpleEventPluginEvents.length;\n  i$jscomp$inline_1577++\n) {\n  var eventName$jscomp$inline_1578 =\n      simpleEventPluginEvents[i$jscomp$inline_1577],\n    domEventName$jscomp$inline_1579 =\n      eventName$jscomp$inline_1578.toLowerCase(),\n    capitalizedEvent$jscomp$inline_1580 =\n      eventName$jscomp$inline_1578[0].toUpperCase() +\n      eventName$jscomp$inline_1578.slice(1);\n  registerSimpleEvent(\n    domEventName$jscomp$inline_1579,\n    \"on\" + capitalizedEvent$jscomp$inline_1580\n  );\n}\nregisterSimpleEvent(ANIMATION_END, \"onAnimationEnd\");\nregisterSimpleEvent(ANIMATION_ITERATION, \"onAnimationIteration\");\nregisterSimpleEvent(ANIMATION_START, \"onAnimationStart\");\nregisterSimpleEvent(\"dblclick\", \"onDoubleClick\");\nregisterSimpleEvent(\"focusin\", \"onFocus\");\nregisterSimpleEvent(\"focusout\", \"onBlur\");\nregisterSimpleEvent(TRANSITION_RUN, \"onTransitionRun\");\nregisterSimpleEvent(TRANSITION_START, \"onTransitionStart\");\nregisterSimpleEvent(TRANSITION_CANCEL, \"onTransitionCancel\");\nregisterSimpleEvent(TRANSITION_END, \"onTransitionEnd\");\nregisterDirectEvent(\"onMouseEnter\", [\"mouseout\", \"mouseover\"]);\nregisterDirectEvent(\"onMouseLeave\", [\"mouseout\", \"mouseover\"]);\nregisterDirectEvent(\"onPointerEnter\", [\"pointerout\", \"pointerover\"]);\nregisterDirectEvent(\"onPointerLeave\", [\"pointerout\", \"pointerover\"]);\nregisterTwoPhaseEvent(\n  \"onChange\",\n  \"change click focusin focusout input keydown keyup selectionchange\".split(\" \")\n);\nregisterTwoPhaseEvent(\n  \"onSelect\",\n  \"focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange\".split(\n    \" \"\n  )\n);\nregisterTwoPhaseEvent(\"onBeforeInput\", [\n  \"compositionend\",\n  \"keypress\",\n  \"textInput\",\n  \"paste\"\n]);\nregisterTwoPhaseEvent(\n  \"onCompositionEnd\",\n  \"compositionend focusout keydown keypress keyup mousedown\".split(\" \")\n);\nregisterTwoPhaseEvent(\n  \"onCompositionStart\",\n  \"compositionstart focusout keydown keypress keyup mousedown\".split(\" \")\n);\nregisterTwoPhaseEvent(\n  \"onCompositionUpdate\",\n  \"compositionupdate focusout keydown keypress keyup mousedown\".split(\" \")\n);\nvar mediaEventTypes =\n    \"abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting\".split(\n      \" \"\n    ),\n  nonDelegatedEvents = new Set(\n    \"beforetoggle cancel close invalid load scroll scrollend toggle\"\n      .split(\" \")\n      .concat(mediaEventTypes)\n  );\nfunction processDispatchQueue(dispatchQueue, eventSystemFlags) {\n  eventSystemFlags = 0 !== (eventSystemFlags & 4);\n  for (var i = 0; i < dispatchQueue.length; i++) {\n    var _dispatchQueue$i = dispatchQueue[i],\n      event = _dispatchQueue$i.event;\n    _dispatchQueue$i = _dispatchQueue$i.listeners;\n    a: {\n      var previousInstance = void 0;\n      if (eventSystemFlags)\n        for (\n          var i$jscomp$0 = _dispatchQueue$i.length - 1;\n          0 <= i$jscomp$0;\n          i$jscomp$0--\n        ) {\n          var _dispatchListeners$i = _dispatchQueue$i[i$jscomp$0],\n            instance = _dispatchListeners$i.instance,\n            currentTarget = _dispatchListeners$i.currentTarget;\n          _dispatchListeners$i = _dispatchListeners$i.listener;\n          if (instance !== previousInstance && event.isPropagationStopped())\n            break a;\n          previousInstance = _dispatchListeners$i;\n          event.currentTarget = currentTarget;\n          try {\n            previousInstance(event);\n          } catch (error) {\n            reportGlobalError(error);\n          }\n          event.currentTarget = null;\n          previousInstance = instance;\n        }\n      else\n        for (\n          i$jscomp$0 = 0;\n          i$jscomp$0 < _dispatchQueue$i.length;\n          i$jscomp$0++\n        ) {\n          _dispatchListeners$i = _dispatchQueue$i[i$jscomp$0];\n          instance = _dispatchListeners$i.instance;\n          currentTarget = _dispatchListeners$i.currentTarget;\n          _dispatchListeners$i = _dispatchListeners$i.listener;\n          if (instance !== previousInstance && event.isPropagationStopped())\n            break a;\n          previousInstance = _dispatchListeners$i;\n          event.currentTarget = currentTarget;\n          try {\n            previousInstance(event);\n          } catch (error) {\n            reportGlobalError(error);\n          }\n          event.currentTarget = null;\n          previousInstance = instance;\n        }\n    }\n  }\n}\nfunction listenToNonDelegatedEvent(domEventName, targetElement) {\n  var JSCompiler_inline_result = targetElement[internalEventHandlersKey];\n  void 0 === JSCompiler_inline_result &&\n    (JSCompiler_inline_result = targetElement[internalEventHandlersKey] =\n      new Set());\n  var listenerSetKey = domEventName + \"__bubble\";\n  JSCompiler_inline_result.has(listenerSetKey) ||\n    (addTrappedEventListener(targetElement, domEventName, 2, !1),\n    JSCompiler_inline_result.add(listenerSetKey));\n}\nfunction listenToNativeEvent(domEventName, isCapturePhaseListener, target) {\n  var eventSystemFlags = 0;\n  isCapturePhaseListener && (eventSystemFlags |= 4);\n  addTrappedEventListener(\n    target,\n    domEventName,\n    eventSystemFlags,\n    isCapturePhaseListener\n  );\n}\nvar listeningMarker = \"_reactListening\" + Math.random().toString(36).slice(2);\nfunction listenToAllSupportedEvents(rootContainerElement) {\n  if (!rootContainerElement[listeningMarker]) {\n    rootContainerElement[listeningMarker] = !0;\n    allNativeEvents.forEach(function (domEventName) {\n      \"selectionchange\" !== domEventName &&\n        (nonDelegatedEvents.has(domEventName) ||\n          listenToNativeEvent(domEventName, !1, rootContainerElement),\n        listenToNativeEvent(domEventName, !0, rootContainerElement));\n    });\n    var ownerDocument =\n      9 === rootContainerElement.nodeType\n        ? rootContainerElement\n        : rootContainerElement.ownerDocument;\n    null === ownerDocument ||\n      ownerDocument[listeningMarker] ||\n      ((ownerDocument[listeningMarker] = !0),\n      listenToNativeEvent(\"selectionchange\", !1, ownerDocument));\n  }\n}\nfunction addTrappedEventListener(\n  targetContainer,\n  domEventName,\n  eventSystemFlags,\n  isCapturePhaseListener\n) {\n  switch (getEventPriority(domEventName)) {\n    case 2:\n      var listenerWrapper = dispatchDiscreteEvent;\n      break;\n    case 8:\n      listenerWrapper = dispatchContinuousEvent;\n      break;\n    default:\n      listenerWrapper = dispatchEvent;\n  }\n  eventSystemFlags = listenerWrapper.bind(\n    null,\n    domEventName,\n    eventSystemFlags,\n    targetContainer\n  );\n  listenerWrapper = void 0;\n  !passiveBrowserEventsSupported ||\n    (\"touchstart\" !== domEventName &&\n      \"touchmove\" !== domEventName &&\n      \"wheel\" !== domEventName) ||\n    (listenerWrapper = !0);\n  isCapturePhaseListener\n    ? void 0 !== listenerWrapper\n      ? targetContainer.addEventListener(domEventName, eventSystemFlags, {\n          capture: !0,\n          passive: listenerWrapper\n        })\n      : targetContainer.addEventListener(domEventName, eventSystemFlags, !0)\n    : void 0 !== listenerWrapper\n      ? targetContainer.addEventListener(domEventName, eventSystemFlags, {\n          passive: listenerWrapper\n        })\n      : targetContainer.addEventListener(domEventName, eventSystemFlags, !1);\n}\nfunction dispatchEventForPluginEventSystem(\n  domEventName,\n  eventSystemFlags,\n  nativeEvent,\n  targetInst$jscomp$0,\n  targetContainer\n) {\n  var ancestorInst = targetInst$jscomp$0;\n  if (\n    0 === (eventSystemFlags & 1) &&\n    0 === (eventSystemFlags & 2) &&\n    null !== targetInst$jscomp$0\n  )\n    a: for (;;) {\n      if (null === targetInst$jscomp$0) return;\n      var nodeTag = targetInst$jscomp$0.tag;\n      if (3 === nodeTag || 4 === nodeTag) {\n        var container = targetInst$jscomp$0.stateNode.containerInfo;\n        if (container === targetContainer) break;\n        if (4 === nodeTag)\n          for (nodeTag = targetInst$jscomp$0.return; null !== nodeTag; ) {\n            var grandTag = nodeTag.tag;\n            if (\n              (3 === grandTag || 4 === grandTag) &&\n              nodeTag.stateNode.containerInfo === targetContainer\n            )\n              return;\n            nodeTag = nodeTag.return;\n          }\n        for (; null !== container; ) {\n          nodeTag = getClosestInstanceFromNode(container);\n          if (null === nodeTag) return;\n          grandTag = nodeTag.tag;\n          if (\n            5 === grandTag ||\n            6 === grandTag ||\n            26 === grandTag ||\n            27 === grandTag\n          ) {\n            targetInst$jscomp$0 = ancestorInst = nodeTag;\n            continue a;\n          }\n          container = container.parentNode;\n        }\n      }\n      targetInst$jscomp$0 = targetInst$jscomp$0.return;\n    }\n  batchedUpdates$1(function () {\n    var targetInst = ancestorInst,\n      nativeEventTarget = getEventTarget(nativeEvent),\n      dispatchQueue = [];\n    a: {\n      var reactName = topLevelEventsToReactNames.get(domEventName);\n      if (void 0 !== reactName) {\n        var SyntheticEventCtor = SyntheticEvent,\n          reactEventType = domEventName;\n        switch (domEventName) {\n          case \"keypress\":\n            if (0 === getEventCharCode(nativeEvent)) break a;\n          case \"keydown\":\n          case \"keyup\":\n            SyntheticEventCtor = SyntheticKeyboardEvent;\n            break;\n          case \"focusin\":\n            reactEventType = \"focus\";\n            SyntheticEventCtor = SyntheticFocusEvent;\n            break;\n          case \"focusout\":\n            reactEventType = \"blur\";\n            SyntheticEventCtor = SyntheticFocusEvent;\n            break;\n          case \"beforeblur\":\n          case \"afterblur\":\n            SyntheticEventCtor = SyntheticFocusEvent;\n            break;\n          case \"click\":\n            if (2 === nativeEvent.button) break a;\n          case \"auxclick\":\n          case \"dblclick\":\n          case \"mousedown\":\n          case \"mousemove\":\n          case \"mouseup\":\n          case \"mouseout\":\n          case \"mouseover\":\n          case \"contextmenu\":\n            SyntheticEventCtor = SyntheticMouseEvent;\n            break;\n          case \"drag\":\n          case \"dragend\":\n          case \"dragenter\":\n          case \"dragexit\":\n          case \"dragleave\":\n          case \"dragover\":\n          case \"dragstart\":\n          case \"drop\":\n            SyntheticEventCtor = SyntheticDragEvent;\n            break;\n          case \"touchcancel\":\n          case \"touchend\":\n          case \"touchmove\":\n          case \"touchstart\":\n            SyntheticEventCtor = SyntheticTouchEvent;\n            break;\n          case ANIMATION_END:\n          case ANIMATION_ITERATION:\n          case ANIMATION_START:\n            SyntheticEventCtor = SyntheticAnimationEvent;\n            break;\n          case TRANSITION_END:\n            SyntheticEventCtor = SyntheticTransitionEvent;\n            break;\n          case \"scroll\":\n          case \"scrollend\":\n            SyntheticEventCtor = SyntheticUIEvent;\n            break;\n          case \"wheel\":\n            SyntheticEventCtor = SyntheticWheelEvent;\n            break;\n          case \"copy\":\n          case \"cut\":\n          case \"paste\":\n            SyntheticEventCtor = SyntheticClipboardEvent;\n            break;\n          case \"gotpointercapture\":\n          case \"lostpointercapture\":\n          case \"pointercancel\":\n          case \"pointerdown\":\n          case \"pointermove\":\n          case \"pointerout\":\n          case \"pointerover\":\n          case \"pointerup\":\n            SyntheticEventCtor = SyntheticPointerEvent;\n            break;\n          case \"toggle\":\n          case \"beforetoggle\":\n            SyntheticEventCtor = SyntheticToggleEvent;\n        }\n        var inCapturePhase = 0 !== (eventSystemFlags & 4),\n          accumulateTargetOnly =\n            !inCapturePhase &&\n            (\"scroll\" === domEventName || \"scrollend\" === domEventName),\n          reactEventName = inCapturePhase\n            ? null !== reactName\n              ? reactName + \"Capture\"\n              : null\n            : reactName;\n        inCapturePhase = [];\n        for (\n          var instance = targetInst, lastHostComponent;\n          null !== instance;\n\n        ) {\n          var _instance = instance;\n          lastHostComponent = _instance.stateNode;\n          _instance = _instance.tag;\n          (5 !== _instance && 26 !== _instance && 27 !== _instance) ||\n            null === lastHostComponent ||\n            null === reactEventName ||\n            ((_instance = getListener(instance, reactEventName)),\n            null != _instance &&\n              inCapturePhase.push(\n                createDispatchListener(instance, _instance, lastHostComponent)\n              ));\n          if (accumulateTargetOnly) break;\n          instance = instance.return;\n        }\n        0 < inCapturePhase.length &&\n          ((reactName = new SyntheticEventCtor(\n            reactName,\n            reactEventType,\n            null,\n            nativeEvent,\n            nativeEventTarget\n          )),\n          dispatchQueue.push({ event: reactName, listeners: inCapturePhase }));\n      }\n    }\n    if (0 === (eventSystemFlags & 7)) {\n      a: {\n        reactName =\n          \"mouseover\" === domEventName || \"pointerover\" === domEventName;\n        SyntheticEventCtor =\n          \"mouseout\" === domEventName || \"pointerout\" === domEventName;\n        if (\n          reactName &&\n          nativeEvent !== currentReplayingEvent &&\n          (reactEventType =\n            nativeEvent.relatedTarget || nativeEvent.fromElement) &&\n          (getClosestInstanceFromNode(reactEventType) ||\n            reactEventType[internalContainerInstanceKey])\n        )\n          break a;\n        if (SyntheticEventCtor || reactName) {\n          reactName =\n            nativeEventTarget.window === nativeEventTarget\n              ? nativeEventTarget\n              : (reactName = nativeEventTarget.ownerDocument)\n                ? reactName.defaultView || reactName.parentWindow\n                : window;\n          if (SyntheticEventCtor) {\n            if (\n              ((reactEventType =\n                nativeEvent.relatedTarget || nativeEvent.toElement),\n              (SyntheticEventCtor = targetInst),\n              (reactEventType = reactEventType\n                ? getClosestInstanceFromNode(reactEventType)\n                : null),\n              null !== reactEventType &&\n                ((accumulateTargetOnly =\n                  getNearestMountedFiber(reactEventType)),\n                (inCapturePhase = reactEventType.tag),\n                reactEventType !== accumulateTargetOnly ||\n                  (5 !== inCapturePhase &&\n                    27 !== inCapturePhase &&\n                    6 !== inCapturePhase)))\n            )\n              reactEventType = null;\n          } else (SyntheticEventCtor = null), (reactEventType = targetInst);\n          if (SyntheticEventCtor !== reactEventType) {\n            inCapturePhase = SyntheticMouseEvent;\n            _instance = \"onMouseLeave\";\n            reactEventName = \"onMouseEnter\";\n            instance = \"mouse\";\n            if (\"pointerout\" === domEventName || \"pointerover\" === domEventName)\n              (inCapturePhase = SyntheticPointerEvent),\n                (_instance = \"onPointerLeave\"),\n                (reactEventName = \"onPointerEnter\"),\n                (instance = \"pointer\");\n            accumulateTargetOnly =\n              null == SyntheticEventCtor\n                ? reactName\n                : getNodeFromInstance(SyntheticEventCtor);\n            lastHostComponent =\n              null == reactEventType\n                ? reactName\n                : getNodeFromInstance(reactEventType);\n            reactName = new inCapturePhase(\n              _instance,\n              instance + \"leave\",\n              SyntheticEventCtor,\n              nativeEvent,\n              nativeEventTarget\n            );\n            reactName.target = accumulateTargetOnly;\n            reactName.relatedTarget = lastHostComponent;\n            _instance = null;\n            getClosestInstanceFromNode(nativeEventTarget) === targetInst &&\n              ((inCapturePhase = new inCapturePhase(\n                reactEventName,\n                instance + \"enter\",\n                reactEventType,\n                nativeEvent,\n                nativeEventTarget\n              )),\n              (inCapturePhase.target = lastHostComponent),\n              (inCapturePhase.relatedTarget = accumulateTargetOnly),\n              (_instance = inCapturePhase));\n            accumulateTargetOnly = _instance;\n            if (SyntheticEventCtor && reactEventType)\n              b: {\n                inCapturePhase = getParent;\n                reactEventName = SyntheticEventCtor;\n                instance = reactEventType;\n                lastHostComponent = 0;\n                for (\n                  _instance = reactEventName;\n                  _instance;\n                  _instance = inCapturePhase(_instance)\n                )\n                  lastHostComponent++;\n                _instance = 0;\n                for (var tempB = instance; tempB; tempB = inCapturePhase(tempB))\n                  _instance++;\n                for (; 0 < lastHostComponent - _instance; )\n                  (reactEventName = inCapturePhase(reactEventName)),\n                    lastHostComponent--;\n                for (; 0 < _instance - lastHostComponent; )\n                  (instance = inCapturePhase(instance)), _instance--;\n                for (; lastHostComponent--; ) {\n                  if (\n                    reactEventName === instance ||\n                    (null !== instance && reactEventName === instance.alternate)\n                  ) {\n                    inCapturePhase = reactEventName;\n                    break b;\n                  }\n                  reactEventName = inCapturePhase(reactEventName);\n                  instance = inCapturePhase(instance);\n                }\n                inCapturePhase = null;\n              }\n            else inCapturePhase = null;\n            null !== SyntheticEventCtor &&\n              accumulateEnterLeaveListenersForEvent(\n                dispatchQueue,\n                reactName,\n                SyntheticEventCtor,\n                inCapturePhase,\n                !1\n              );\n            null !== reactEventType &&\n              null !== accumulateTargetOnly &&\n              accumulateEnterLeaveListenersForEvent(\n                dispatchQueue,\n                accumulateTargetOnly,\n                reactEventType,\n                inCapturePhase,\n                !0\n              );\n          }\n        }\n      }\n      a: {\n        reactName = targetInst ? getNodeFromInstance(targetInst) : window;\n        SyntheticEventCtor =\n          reactName.nodeName && reactName.nodeName.toLowerCase();\n        if (\n          \"select\" === SyntheticEventCtor ||\n          (\"input\" === SyntheticEventCtor && \"file\" === reactName.type)\n        )\n          var getTargetInstFunc = getTargetInstForChangeEvent;\n        else if (isTextInputElement(reactName))\n          if (isInputEventSupported)\n            getTargetInstFunc = getTargetInstForInputOrChangeEvent;\n          else {\n            getTargetInstFunc = getTargetInstForInputEventPolyfill;\n            var handleEventFunc = handleEventsForInputEventPolyfill;\n          }\n        else\n          (SyntheticEventCtor = reactName.nodeName),\n            !SyntheticEventCtor ||\n            \"input\" !== SyntheticEventCtor.toLowerCase() ||\n            (\"checkbox\" !== reactName.type && \"radio\" !== reactName.type)\n              ? targetInst &&\n                isCustomElement(targetInst.elementType) &&\n                (getTargetInstFunc = getTargetInstForChangeEvent)\n              : (getTargetInstFunc = getTargetInstForClickEvent);\n        if (\n          getTargetInstFunc &&\n          (getTargetInstFunc = getTargetInstFunc(domEventName, targetInst))\n        ) {\n          createAndAccumulateChangeEvent(\n            dispatchQueue,\n            getTargetInstFunc,\n            nativeEvent,\n            nativeEventTarget\n          );\n          break a;\n        }\n        handleEventFunc && handleEventFunc(domEventName, reactName, targetInst);\n        \"focusout\" === domEventName &&\n          targetInst &&\n          \"number\" === reactName.type &&\n          null != targetInst.memoizedProps.value &&\n          setDefaultValue(reactName, \"number\", reactName.value);\n      }\n      handleEventFunc = targetInst ? getNodeFromInstance(targetInst) : window;\n      switch (domEventName) {\n        case \"focusin\":\n          if (\n            isTextInputElement(handleEventFunc) ||\n            \"true\" === handleEventFunc.contentEditable\n          )\n            (activeElement = handleEventFunc),\n              (activeElementInst = targetInst),\n              (lastSelection = null);\n          break;\n        case \"focusout\":\n          lastSelection = activeElementInst = activeElement = null;\n          break;\n        case \"mousedown\":\n          mouseDown = !0;\n          break;\n        case \"contextmenu\":\n        case \"mouseup\":\n        case \"dragend\":\n          mouseDown = !1;\n          constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget);\n          break;\n        case \"selectionchange\":\n          if (skipSelectionChangeEvent) break;\n        case \"keydown\":\n        case \"keyup\":\n          constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget);\n      }\n      var fallbackData;\n      if (canUseCompositionEvent)\n        b: {\n          switch (domEventName) {\n            case \"compositionstart\":\n              var eventType = \"onCompositionStart\";\n              break b;\n            case \"compositionend\":\n              eventType = \"onCompositionEnd\";\n              break b;\n            case \"compositionupdate\":\n              eventType = \"onCompositionUpdate\";\n              break b;\n          }\n          eventType = void 0;\n        }\n      else\n        isComposing\n          ? isFallbackCompositionEnd(domEventName, nativeEvent) &&\n            (eventType = \"onCompositionEnd\")\n          : \"keydown\" === domEventName &&\n            229 === nativeEvent.keyCode &&\n            (eventType = \"onCompositionStart\");\n      eventType &&\n        (useFallbackCompositionData &&\n          \"ko\" !== nativeEvent.locale &&\n          (isComposing || \"onCompositionStart\" !== eventType\n            ? \"onCompositionEnd\" === eventType &&\n              isComposing &&\n              (fallbackData = getData())\n            : ((root = nativeEventTarget),\n              (startText = \"value\" in root ? root.value : root.textContent),\n              (isComposing = !0))),\n        (handleEventFunc = accumulateTwoPhaseListeners(targetInst, eventType)),\n        0 < handleEventFunc.length &&\n          ((eventType = new SyntheticCompositionEvent(\n            eventType,\n            domEventName,\n            null,\n            nativeEvent,\n            nativeEventTarget\n          )),\n          dispatchQueue.push({ event: eventType, listeners: handleEventFunc }),\n          fallbackData\n            ? (eventType.data = fallbackData)\n            : ((fallbackData = getDataFromCustomEvent(nativeEvent)),\n              null !== fallbackData && (eventType.data = fallbackData))));\n      if (\n        (fallbackData = canUseTextInputEvent\n          ? getNativeBeforeInputChars(domEventName, nativeEvent)\n          : getFallbackBeforeInputChars(domEventName, nativeEvent))\n      )\n        (eventType = accumulateTwoPhaseListeners(targetInst, \"onBeforeInput\")),\n          0 < eventType.length &&\n            ((handleEventFunc = new SyntheticCompositionEvent(\n              \"onBeforeInput\",\n              \"beforeinput\",\n              null,\n              nativeEvent,\n              nativeEventTarget\n            )),\n            dispatchQueue.push({\n              event: handleEventFunc,\n              listeners: eventType\n            }),\n            (handleEventFunc.data = fallbackData));\n      extractEvents$1(\n        dispatchQueue,\n        domEventName,\n        targetInst,\n        nativeEvent,\n        nativeEventTarget\n      );\n    }\n    processDispatchQueue(dispatchQueue, eventSystemFlags);\n  });\n}\nfunction createDispatchListener(instance, listener, currentTarget) {\n  return {\n    instance: instance,\n    listener: listener,\n    currentTarget: currentTarget\n  };\n}\nfunction accumulateTwoPhaseListeners(targetFiber, reactName) {\n  for (\n    var captureName = reactName + \"Capture\", listeners = [];\n    null !== targetFiber;\n\n  ) {\n    var _instance2 = targetFiber,\n      stateNode = _instance2.stateNode;\n    _instance2 = _instance2.tag;\n    (5 !== _instance2 && 26 !== _instance2 && 27 !== _instance2) ||\n      null === stateNode ||\n      ((_instance2 = getListener(targetFiber, captureName)),\n      null != _instance2 &&\n        listeners.unshift(\n          createDispatchListener(targetFiber, _instance2, stateNode)\n        ),\n      (_instance2 = getListener(targetFiber, reactName)),\n      null != _instance2 &&\n        listeners.push(\n          createDispatchListener(targetFiber, _instance2, stateNode)\n        ));\n    if (3 === targetFiber.tag) return listeners;\n    targetFiber = targetFiber.return;\n  }\n  return [];\n}\nfunction getParent(inst) {\n  if (null === inst) return null;\n  do inst = inst.return;\n  while (inst && 5 !== inst.tag && 27 !== inst.tag);\n  return inst ? inst : null;\n}\nfunction accumulateEnterLeaveListenersForEvent(\n  dispatchQueue,\n  event,\n  target,\n  common,\n  inCapturePhase\n) {\n  for (\n    var registrationName = event._reactName, listeners = [];\n    null !== target && target !== common;\n\n  ) {\n    var _instance3 = target,\n      alternate = _instance3.alternate,\n      stateNode = _instance3.stateNode;\n    _instance3 = _instance3.tag;\n    if (null !== alternate && alternate === common) break;\n    (5 !== _instance3 && 26 !== _instance3 && 27 !== _instance3) ||\n      null === stateNode ||\n      ((alternate = stateNode),\n      inCapturePhase\n        ? ((stateNode = getListener(target, registrationName)),\n          null != stateNode &&\n            listeners.unshift(\n              createDispatchListener(target, stateNode, alternate)\n            ))\n        : inCapturePhase ||\n          ((stateNode = getListener(target, registrationName)),\n          null != stateNode &&\n            listeners.push(\n              createDispatchListener(target, stateNode, alternate)\n            )));\n    target = target.return;\n  }\n  0 !== listeners.length &&\n    dispatchQueue.push({ event: event, listeners: listeners });\n}\nvar NORMALIZE_NEWLINES_REGEX = /\\r\\n?/g,\n  NORMALIZE_NULL_AND_REPLACEMENT_REGEX = /\\u0000|\\uFFFD/g;\nfunction normalizeMarkupForTextOrAttribute(markup) {\n  return (\"string\" === typeof markup ? markup : \"\" + markup)\n    .replace(NORMALIZE_NEWLINES_REGEX, \"\\n\")\n    .replace(NORMALIZE_NULL_AND_REPLACEMENT_REGEX, \"\");\n}\nfunction checkForUnmatchedText(serverText, clientText) {\n  clientText = normalizeMarkupForTextOrAttribute(clientText);\n  return normalizeMarkupForTextOrAttribute(serverText) === clientText ? !0 : !1;\n}\nfunction setProp(domElement, tag, key, value, props, prevValue) {\n  switch (key) {\n    case \"children\":\n      \"string\" === typeof value\n        ? \"body\" === tag ||\n          (\"textarea\" === tag && \"\" === value) ||\n          setTextContent(domElement, value)\n        : (\"number\" === typeof value || \"bigint\" === typeof value) &&\n          \"body\" !== tag &&\n          setTextContent(domElement, \"\" + value);\n      break;\n    case \"className\":\n      setValueForKnownAttribute(domElement, \"class\", value);\n      break;\n    case \"tabIndex\":\n      setValueForKnownAttribute(domElement, \"tabindex\", value);\n      break;\n    case \"dir\":\n    case \"role\":\n    case \"viewBox\":\n    case \"width\":\n    case \"height\":\n      setValueForKnownAttribute(domElement, key, value);\n      break;\n    case \"style\":\n      setValueForStyles(domElement, value, prevValue);\n      break;\n    case \"data\":\n      if (\"object\" !== tag) {\n        setValueForKnownAttribute(domElement, \"data\", value);\n        break;\n      }\n    case \"src\":\n    case \"href\":\n      if (\"\" === value && (\"a\" !== tag || \"href\" !== key)) {\n        domElement.removeAttribute(key);\n        break;\n      }\n      if (\n        null == value ||\n        \"function\" === typeof value ||\n        \"symbol\" === typeof value ||\n        \"boolean\" === typeof value\n      ) {\n        domElement.removeAttribute(key);\n        break;\n      }\n      value = sanitizeURL(\"\" + value);\n      domElement.setAttribute(key, value);\n      break;\n    case \"action\":\n    case \"formAction\":\n      if (\"function\" === typeof value) {\n        domElement.setAttribute(\n          key,\n          \"javascript:throw new Error('A React form was unexpectedly submitted. If you called form.submit() manually, consider using form.requestSubmit() instead. If you\\\\'re trying to use event.stopPropagation() in a submit event handler, consider also calling event.preventDefault().')\"\n        );\n        break;\n      } else\n        \"function\" === typeof prevValue &&\n          (\"formAction\" === key\n            ? (\"input\" !== tag &&\n                setProp(domElement, tag, \"name\", props.name, props, null),\n              setProp(\n                domElement,\n                tag,\n                \"formEncType\",\n                props.formEncType,\n                props,\n                null\n              ),\n              setProp(\n                domElement,\n                tag,\n                \"formMethod\",\n                props.formMethod,\n                props,\n                null\n              ),\n              setProp(\n                domElement,\n                tag,\n                \"formTarget\",\n                props.formTarget,\n                props,\n                null\n              ))\n            : (setProp(domElement, tag, \"encType\", props.encType, props, null),\n              setProp(domElement, tag, \"method\", props.method, props, null),\n              setProp(domElement, tag, \"target\", props.target, props, null)));\n      if (\n        null == value ||\n        \"symbol\" === typeof value ||\n        \"boolean\" === typeof value\n      ) {\n        domElement.removeAttribute(key);\n        break;\n      }\n      value = sanitizeURL(\"\" + value);\n      domElement.setAttribute(key, value);\n      break;\n    case \"onClick\":\n      null != value && (domElement.onclick = noop$1);\n      break;\n    case \"onScroll\":\n      null != value && listenToNonDelegatedEvent(\"scroll\", domElement);\n      break;\n    case \"onScrollEnd\":\n      null != value && listenToNonDelegatedEvent(\"scrollend\", domElement);\n      break;\n    case \"dangerouslySetInnerHTML\":\n      if (null != value) {\n        if (\"object\" !== typeof value || !(\"__html\" in value))\n          throw Error(formatProdErrorMessage(61));\n        key = value.__html;\n        if (null != key) {\n          if (null != props.children) throw Error(formatProdErrorMessage(60));\n          domElement.innerHTML = key;\n        }\n      }\n      break;\n    case \"multiple\":\n      domElement.multiple =\n        value && \"function\" !== typeof value && \"symbol\" !== typeof value;\n      break;\n    case \"muted\":\n      domElement.muted =\n        value && \"function\" !== typeof value && \"symbol\" !== typeof value;\n      break;\n    case \"suppressContentEditableWarning\":\n    case \"suppressHydrationWarning\":\n    case \"defaultValue\":\n    case \"defaultChecked\":\n    case \"innerHTML\":\n    case \"ref\":\n      break;\n    case \"autoFocus\":\n      break;\n    case \"xlinkHref\":\n      if (\n        null == value ||\n        \"function\" === typeof value ||\n        \"boolean\" === typeof value ||\n        \"symbol\" === typeof value\n      ) {\n        domElement.removeAttribute(\"xlink:href\");\n        break;\n      }\n      key = sanitizeURL(\"\" + value);\n      domElement.setAttributeNS(\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:href\",\n        key\n      );\n      break;\n    case \"contentEditable\":\n    case \"spellCheck\":\n    case \"draggable\":\n    case \"value\":\n    case \"autoReverse\":\n    case \"externalResourcesRequired\":\n    case \"focusable\":\n    case \"preserveAlpha\":\n      null != value && \"function\" !== typeof value && \"symbol\" !== typeof value\n        ? domElement.setAttribute(key, \"\" + value)\n        : domElement.removeAttribute(key);\n      break;\n    case \"inert\":\n    case \"allowFullScreen\":\n    case \"async\":\n    case \"autoPlay\":\n    case \"controls\":\n    case \"default\":\n    case \"defer\":\n    case \"disabled\":\n    case \"disablePictureInPicture\":\n    case \"disableRemotePlayback\":\n    case \"formNoValidate\":\n    case \"hidden\":\n    case \"loop\":\n    case \"noModule\":\n    case \"noValidate\":\n    case \"open\":\n    case \"playsInline\":\n    case \"readOnly\":\n    case \"required\":\n    case \"reversed\":\n    case \"scoped\":\n    case \"seamless\":\n    case \"itemScope\":\n      value && \"function\" !== typeof value && \"symbol\" !== typeof value\n        ? domElement.setAttribute(key, \"\")\n        : domElement.removeAttribute(key);\n      break;\n    case \"capture\":\n    case \"download\":\n      !0 === value\n        ? domElement.setAttribute(key, \"\")\n        : !1 !== value &&\n            null != value &&\n            \"function\" !== typeof value &&\n            \"symbol\" !== typeof value\n          ? domElement.setAttribute(key, value)\n          : domElement.removeAttribute(key);\n      break;\n    case \"cols\":\n    case \"rows\":\n    case \"size\":\n    case \"span\":\n      null != value &&\n      \"function\" !== typeof value &&\n      \"symbol\" !== typeof value &&\n      !isNaN(value) &&\n      1 <= value\n        ? domElement.setAttribute(key, value)\n        : domElement.removeAttribute(key);\n      break;\n    case \"rowSpan\":\n    case \"start\":\n      null == value ||\n      \"function\" === typeof value ||\n      \"symbol\" === typeof value ||\n      isNaN(value)\n        ? domElement.removeAttribute(key)\n        : domElement.setAttribute(key, value);\n      break;\n    case \"popover\":\n      listenToNonDelegatedEvent(\"beforetoggle\", domElement);\n      listenToNonDelegatedEvent(\"toggle\", domElement);\n      setValueForAttribute(domElement, \"popover\", value);\n      break;\n    case \"xlinkActuate\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:actuate\",\n        value\n      );\n      break;\n    case \"xlinkArcrole\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:arcrole\",\n        value\n      );\n      break;\n    case \"xlinkRole\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:role\",\n        value\n      );\n      break;\n    case \"xlinkShow\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:show\",\n        value\n      );\n      break;\n    case \"xlinkTitle\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:title\",\n        value\n      );\n      break;\n    case \"xlinkType\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:type\",\n        value\n      );\n      break;\n    case \"xmlBase\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/XML/1998/namespace\",\n        \"xml:base\",\n        value\n      );\n      break;\n    case \"xmlLang\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/XML/1998/namespace\",\n        \"xml:lang\",\n        value\n      );\n      break;\n    case \"xmlSpace\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/XML/1998/namespace\",\n        \"xml:space\",\n        value\n      );\n      break;\n    case \"is\":\n      setValueForAttribute(domElement, \"is\", value);\n      break;\n    case \"innerText\":\n    case \"textContent\":\n      break;\n    default:\n      if (\n        !(2 < key.length) ||\n        (\"o\" !== key[0] && \"O\" !== key[0]) ||\n        (\"n\" !== key[1] && \"N\" !== key[1])\n      )\n        (key = aliases.get(key) || key),\n          setValueForAttribute(domElement, key, value);\n  }\n}\nfunction setPropOnCustomElement(domElement, tag, key, value, props, prevValue) {\n  switch (key) {\n    case \"style\":\n      setValueForStyles(domElement, value, prevValue);\n      break;\n    case \"dangerouslySetInnerHTML\":\n      if (null != value) {\n        if (\"object\" !== typeof value || !(\"__html\" in value))\n          throw Error(formatProdErrorMessage(61));\n        key = value.__html;\n        if (null != key) {\n          if (null != props.children) throw Error(formatProdErrorMessage(60));\n          domElement.innerHTML = key;\n        }\n      }\n      break;\n    case \"children\":\n      \"string\" === typeof value\n        ? setTextContent(domElement, value)\n        : (\"number\" === typeof value || \"bigint\" === typeof value) &&\n          setTextContent(domElement, \"\" + value);\n      break;\n    case \"onScroll\":\n      null != value && listenToNonDelegatedEvent(\"scroll\", domElement);\n      break;\n    case \"onScrollEnd\":\n      null != value && listenToNonDelegatedEvent(\"scrollend\", domElement);\n      break;\n    case \"onClick\":\n      null != value && (domElement.onclick = noop$1);\n      break;\n    case \"suppressContentEditableWarning\":\n    case \"suppressHydrationWarning\":\n    case \"innerHTML\":\n    case \"ref\":\n      break;\n    case \"innerText\":\n    case \"textContent\":\n      break;\n    default:\n      if (!registrationNameDependencies.hasOwnProperty(key))\n        a: {\n          if (\n            \"o\" === key[0] &&\n            \"n\" === key[1] &&\n            ((props = key.endsWith(\"Capture\")),\n            (tag = key.slice(2, props ? key.length - 7 : void 0)),\n            (prevValue = domElement[internalPropsKey] || null),\n            (prevValue = null != prevValue ? prevValue[key] : null),\n            \"function\" === typeof prevValue &&\n              domElement.removeEventListener(tag, prevValue, props),\n            \"function\" === typeof value)\n          ) {\n            \"function\" !== typeof prevValue &&\n              null !== prevValue &&\n              (key in domElement\n                ? (domElement[key] = null)\n                : domElement.hasAttribute(key) &&\n                  domElement.removeAttribute(key));\n            domElement.addEventListener(tag, value, props);\n            break a;\n          }\n          key in domElement\n            ? (domElement[key] = value)\n            : !0 === value\n              ? domElement.setAttribute(key, \"\")\n              : setValueForAttribute(domElement, key, value);\n        }\n  }\n}\nfunction setInitialProperties(domElement, tag, props) {\n  switch (tag) {\n    case \"div\":\n    case \"span\":\n    case \"svg\":\n    case \"path\":\n    case \"a\":\n    case \"g\":\n    case \"p\":\n    case \"li\":\n      break;\n    case \"img\":\n      listenToNonDelegatedEvent(\"error\", domElement);\n      listenToNonDelegatedEvent(\"load\", domElement);\n      var hasSrc = !1,\n        hasSrcSet = !1,\n        propKey;\n      for (propKey in props)\n        if (props.hasOwnProperty(propKey)) {\n          var propValue = props[propKey];\n          if (null != propValue)\n            switch (propKey) {\n              case \"src\":\n                hasSrc = !0;\n                break;\n              case \"srcSet\":\n                hasSrcSet = !0;\n                break;\n              case \"children\":\n              case \"dangerouslySetInnerHTML\":\n                throw Error(formatProdErrorMessage(137, tag));\n              default:\n                setProp(domElement, tag, propKey, propValue, props, null);\n            }\n        }\n      hasSrcSet &&\n        setProp(domElement, tag, \"srcSet\", props.srcSet, props, null);\n      hasSrc && setProp(domElement, tag, \"src\", props.src, props, null);\n      return;\n    case \"input\":\n      listenToNonDelegatedEvent(\"invalid\", domElement);\n      var defaultValue = (propKey = propValue = hasSrcSet = null),\n        checked = null,\n        defaultChecked = null;\n      for (hasSrc in props)\n        if (props.hasOwnProperty(hasSrc)) {\n          var propValue$184 = props[hasSrc];\n          if (null != propValue$184)\n            switch (hasSrc) {\n              case \"name\":\n                hasSrcSet = propValue$184;\n                break;\n              case \"type\":\n                propValue = propValue$184;\n                break;\n              case \"checked\":\n                checked = propValue$184;\n                break;\n              case \"defaultChecked\":\n                defaultChecked = propValue$184;\n                break;\n              case \"value\":\n                propKey = propValue$184;\n                break;\n              case \"defaultValue\":\n                defaultValue = propValue$184;\n                break;\n              case \"children\":\n              case \"dangerouslySetInnerHTML\":\n                if (null != propValue$184)\n                  throw Error(formatProdErrorMessage(137, tag));\n                break;\n              default:\n                setProp(domElement, tag, hasSrc, propValue$184, props, null);\n            }\n        }\n      initInput(\n        domElement,\n        propKey,\n        defaultValue,\n        checked,\n        defaultChecked,\n        propValue,\n        hasSrcSet,\n        !1\n      );\n      return;\n    case \"select\":\n      listenToNonDelegatedEvent(\"invalid\", domElement);\n      hasSrc = propValue = propKey = null;\n      for (hasSrcSet in props)\n        if (\n          props.hasOwnProperty(hasSrcSet) &&\n          ((defaultValue = props[hasSrcSet]), null != defaultValue)\n        )\n          switch (hasSrcSet) {\n            case \"value\":\n              propKey = defaultValue;\n              break;\n            case \"defaultValue\":\n              propValue = defaultValue;\n              break;\n            case \"multiple\":\n              hasSrc = defaultValue;\n            default:\n              setProp(domElement, tag, hasSrcSet, defaultValue, props, null);\n          }\n      tag = propKey;\n      props = propValue;\n      domElement.multiple = !!hasSrc;\n      null != tag\n        ? updateOptions(domElement, !!hasSrc, tag, !1)\n        : null != props && updateOptions(domElement, !!hasSrc, props, !0);\n      return;\n    case \"textarea\":\n      listenToNonDelegatedEvent(\"invalid\", domElement);\n      propKey = hasSrcSet = hasSrc = null;\n      for (propValue in props)\n        if (\n          props.hasOwnProperty(propValue) &&\n          ((defaultValue = props[propValue]), null != defaultValue)\n        )\n          switch (propValue) {\n            case \"value\":\n              hasSrc = defaultValue;\n              break;\n            case \"defaultValue\":\n              hasSrcSet = defaultValue;\n              break;\n            case \"children\":\n              propKey = defaultValue;\n              break;\n            case \"dangerouslySetInnerHTML\":\n              if (null != defaultValue) throw Error(formatProdErrorMessage(91));\n              break;\n            default:\n              setProp(domElement, tag, propValue, defaultValue, props, null);\n          }\n      initTextarea(domElement, hasSrc, hasSrcSet, propKey);\n      return;\n    case \"option\":\n      for (checked in props)\n        if (\n          props.hasOwnProperty(checked) &&\n          ((hasSrc = props[checked]), null != hasSrc)\n        )\n          switch (checked) {\n            case \"selected\":\n              domElement.selected =\n                hasSrc &&\n                \"function\" !== typeof hasSrc &&\n                \"symbol\" !== typeof hasSrc;\n              break;\n            default:\n              setProp(domElement, tag, checked, hasSrc, props, null);\n          }\n      return;\n    case \"dialog\":\n      listenToNonDelegatedEvent(\"beforetoggle\", domElement);\n      listenToNonDelegatedEvent(\"toggle\", domElement);\n      listenToNonDelegatedEvent(\"cancel\", domElement);\n      listenToNonDelegatedEvent(\"close\", domElement);\n      break;\n    case \"iframe\":\n    case \"object\":\n      listenToNonDelegatedEvent(\"load\", domElement);\n      break;\n    case \"video\":\n    case \"audio\":\n      for (hasSrc = 0; hasSrc < mediaEventTypes.length; hasSrc++)\n        listenToNonDelegatedEvent(mediaEventTypes[hasSrc], domElement);\n      break;\n    case \"image\":\n      listenToNonDelegatedEvent(\"error\", domElement);\n      listenToNonDelegatedEvent(\"load\", domElement);\n      break;\n    case \"details\":\n      listenToNonDelegatedEvent(\"toggle\", domElement);\n      break;\n    case \"embed\":\n    case \"source\":\n    case \"link\":\n      listenToNonDelegatedEvent(\"error\", domElement),\n        listenToNonDelegatedEvent(\"load\", domElement);\n    case \"area\":\n    case \"base\":\n    case \"br\":\n    case \"col\":\n    case \"hr\":\n    case \"keygen\":\n    case \"meta\":\n    case \"param\":\n    case \"track\":\n    case \"wbr\":\n    case \"menuitem\":\n      for (defaultChecked in props)\n        if (\n          props.hasOwnProperty(defaultChecked) &&\n          ((hasSrc = props[defaultChecked]), null != hasSrc)\n        )\n          switch (defaultChecked) {\n            case \"children\":\n            case \"dangerouslySetInnerHTML\":\n              throw Error(formatProdErrorMessage(137, tag));\n            default:\n              setProp(domElement, tag, defaultChecked, hasSrc, props, null);\n          }\n      return;\n    default:\n      if (isCustomElement(tag)) {\n        for (propValue$184 in props)\n          props.hasOwnProperty(propValue$184) &&\n            ((hasSrc = props[propValue$184]),\n            void 0 !== hasSrc &&\n              setPropOnCustomElement(\n                domElement,\n                tag,\n                propValue$184,\n                hasSrc,\n                props,\n                void 0\n              ));\n        return;\n      }\n  }\n  for (defaultValue in props)\n    props.hasOwnProperty(defaultValue) &&\n      ((hasSrc = props[defaultValue]),\n      null != hasSrc &&\n        setProp(domElement, tag, defaultValue, hasSrc, props, null));\n}\nfunction updateProperties(domElement, tag, lastProps, nextProps) {\n  switch (tag) {\n    case \"div\":\n    case \"span\":\n    case \"svg\":\n    case \"path\":\n    case \"a\":\n    case \"g\":\n    case \"p\":\n    case \"li\":\n      break;\n    case \"input\":\n      var name = null,\n        type = null,\n        value = null,\n        defaultValue = null,\n        lastDefaultValue = null,\n        checked = null,\n        defaultChecked = null;\n      for (propKey in lastProps) {\n        var lastProp = lastProps[propKey];\n        if (lastProps.hasOwnProperty(propKey) && null != lastProp)\n          switch (propKey) {\n            case \"checked\":\n              break;\n            case \"value\":\n              break;\n            case \"defaultValue\":\n              lastDefaultValue = lastProp;\n            default:\n              nextProps.hasOwnProperty(propKey) ||\n                setProp(domElement, tag, propKey, null, nextProps, lastProp);\n          }\n      }\n      for (var propKey$201 in nextProps) {\n        var propKey = nextProps[propKey$201];\n        lastProp = lastProps[propKey$201];\n        if (\n          nextProps.hasOwnProperty(propKey$201) &&\n          (null != propKey || null != lastProp)\n        )\n          switch (propKey$201) {\n            case \"type\":\n              type = propKey;\n              break;\n            case \"name\":\n              name = propKey;\n              break;\n            case \"checked\":\n              checked = propKey;\n              break;\n            case \"defaultChecked\":\n              defaultChecked = propKey;\n              break;\n            case \"value\":\n              value = propKey;\n              break;\n            case \"defaultValue\":\n              defaultValue = propKey;\n              break;\n            case \"children\":\n            case \"dangerouslySetInnerHTML\":\n              if (null != propKey)\n                throw Error(formatProdErrorMessage(137, tag));\n              break;\n            default:\n              propKey !== lastProp &&\n                setProp(\n                  domElement,\n                  tag,\n                  propKey$201,\n                  propKey,\n                  nextProps,\n                  lastProp\n                );\n          }\n      }\n      updateInput(\n        domElement,\n        value,\n        defaultValue,\n        lastDefaultValue,\n        checked,\n        defaultChecked,\n        type,\n        name\n      );\n      return;\n    case \"select\":\n      propKey = value = defaultValue = propKey$201 = null;\n      for (type in lastProps)\n        if (\n          ((lastDefaultValue = lastProps[type]),\n          lastProps.hasOwnProperty(type) && null != lastDefaultValue)\n        )\n          switch (type) {\n            case \"value\":\n              break;\n            case \"multiple\":\n              propKey = lastDefaultValue;\n            default:\n              nextProps.hasOwnProperty(type) ||\n                setProp(\n                  domElement,\n                  tag,\n                  type,\n                  null,\n                  nextProps,\n                  lastDefaultValue\n                );\n          }\n      for (name in nextProps)\n        if (\n          ((type = nextProps[name]),\n          (lastDefaultValue = lastProps[name]),\n          nextProps.hasOwnProperty(name) &&\n            (null != type || null != lastDefaultValue))\n        )\n          switch (name) {\n            case \"value\":\n              propKey$201 = type;\n              break;\n            case \"defaultValue\":\n              defaultValue = type;\n              break;\n            case \"multiple\":\n              value = type;\n            default:\n              type !== lastDefaultValue &&\n                setProp(\n                  domElement,\n                  tag,\n                  name,\n                  type,\n                  nextProps,\n                  lastDefaultValue\n                );\n          }\n      tag = defaultValue;\n      lastProps = value;\n      nextProps = propKey;\n      null != propKey$201\n        ? updateOptions(domElement, !!lastProps, propKey$201, !1)\n        : !!nextProps !== !!lastProps &&\n          (null != tag\n            ? updateOptions(domElement, !!lastProps, tag, !0)\n            : updateOptions(domElement, !!lastProps, lastProps ? [] : \"\", !1));\n      return;\n    case \"textarea\":\n      propKey = propKey$201 = null;\n      for (defaultValue in lastProps)\n        if (\n          ((name = lastProps[defaultValue]),\n          lastProps.hasOwnProperty(defaultValue) &&\n            null != name &&\n            !nextProps.hasOwnProperty(defaultValue))\n        )\n          switch (defaultValue) {\n            case \"value\":\n              break;\n            case \"children\":\n              break;\n            default:\n              setProp(domElement, tag, defaultValue, null, nextProps, name);\n          }\n      for (value in nextProps)\n        if (\n          ((name = nextProps[value]),\n          (type = lastProps[value]),\n          nextProps.hasOwnProperty(value) && (null != name || null != type))\n        )\n          switch (value) {\n            case \"value\":\n              propKey$201 = name;\n              break;\n            case \"defaultValue\":\n              propKey = name;\n              break;\n            case \"children\":\n              break;\n            case \"dangerouslySetInnerHTML\":\n              if (null != name) throw Error(formatProdErrorMessage(91));\n              break;\n            default:\n              name !== type &&\n                setProp(domElement, tag, value, name, nextProps, type);\n          }\n      updateTextarea(domElement, propKey$201, propKey);\n      return;\n    case \"option\":\n      for (var propKey$217 in lastProps)\n        if (\n          ((propKey$201 = lastProps[propKey$217]),\n          lastProps.hasOwnProperty(propKey$217) &&\n            null != propKey$201 &&\n            !nextProps.hasOwnProperty(propKey$217))\n        )\n          switch (propKey$217) {\n            case \"selected\":\n              domElement.selected = !1;\n              break;\n            default:\n              setProp(\n                domElement,\n                tag,\n                propKey$217,\n                null,\n                nextProps,\n                propKey$201\n              );\n          }\n      for (lastDefaultValue in nextProps)\n        if (\n          ((propKey$201 = nextProps[lastDefaultValue]),\n          (propKey = lastProps[lastDefaultValue]),\n          nextProps.hasOwnProperty(lastDefaultValue) &&\n            propKey$201 !== propKey &&\n            (null != propKey$201 || null != propKey))\n        )\n          switch (lastDefaultValue) {\n            case \"selected\":\n              domElement.selected =\n                propKey$201 &&\n                \"function\" !== typeof propKey$201 &&\n                \"symbol\" !== typeof propKey$201;\n              break;\n            default:\n              setProp(\n                domElement,\n                tag,\n                lastDefaultValue,\n                propKey$201,\n                nextProps,\n                propKey\n              );\n          }\n      return;\n    case \"img\":\n    case \"link\":\n    case \"area\":\n    case \"base\":\n    case \"br\":\n    case \"col\":\n    case \"embed\":\n    case \"hr\":\n    case \"keygen\":\n    case \"meta\":\n    case \"param\":\n    case \"source\":\n    case \"track\":\n    case \"wbr\":\n    case \"menuitem\":\n      for (var propKey$222 in lastProps)\n        (propKey$201 = lastProps[propKey$222]),\n          lastProps.hasOwnProperty(propKey$222) &&\n            null != propKey$201 &&\n            !nextProps.hasOwnProperty(propKey$222) &&\n            setProp(domElement, tag, propKey$222, null, nextProps, propKey$201);\n      for (checked in nextProps)\n        if (\n          ((propKey$201 = nextProps[checked]),\n          (propKey = lastProps[checked]),\n          nextProps.hasOwnProperty(checked) &&\n            propKey$201 !== propKey &&\n            (null != propKey$201 || null != propKey))\n        )\n          switch (checked) {\n            case \"children\":\n            case \"dangerouslySetInnerHTML\":\n              if (null != propKey$201)\n                throw Error(formatProdErrorMessage(137, tag));\n              break;\n            default:\n              setProp(\n                domElement,\n                tag,\n                checked,\n                propKey$201,\n                nextProps,\n                propKey\n              );\n          }\n      return;\n    default:\n      if (isCustomElement(tag)) {\n        for (var propKey$227 in lastProps)\n          (propKey$201 = lastProps[propKey$227]),\n            lastProps.hasOwnProperty(propKey$227) &&\n              void 0 !== propKey$201 &&\n              !nextProps.hasOwnProperty(propKey$227) &&\n              setPropOnCustomElement(\n                domElement,\n                tag,\n                propKey$227,\n                void 0,\n                nextProps,\n                propKey$201\n              );\n        for (defaultChecked in nextProps)\n          (propKey$201 = nextProps[defaultChecked]),\n            (propKey = lastProps[defaultChecked]),\n            !nextProps.hasOwnProperty(defaultChecked) ||\n              propKey$201 === propKey ||\n              (void 0 === propKey$201 && void 0 === propKey) ||\n              setPropOnCustomElement(\n                domElement,\n                tag,\n                defaultChecked,\n                propKey$201,\n                nextProps,\n                propKey\n              );\n        return;\n      }\n  }\n  for (var propKey$232 in lastProps)\n    (propKey$201 = lastProps[propKey$232]),\n      lastProps.hasOwnProperty(propKey$232) &&\n        null != propKey$201 &&\n        !nextProps.hasOwnProperty(propKey$232) &&\n        setProp(domElement, tag, propKey$232, null, nextProps, propKey$201);\n  for (lastProp in nextProps)\n    (propKey$201 = nextProps[lastProp]),\n      (propKey = lastProps[lastProp]),\n      !nextProps.hasOwnProperty(lastProp) ||\n        propKey$201 === propKey ||\n        (null == propKey$201 && null == propKey) ||\n        setProp(domElement, tag, lastProp, propKey$201, nextProps, propKey);\n}\nfunction isLikelyStaticResource(initiatorType) {\n  switch (initiatorType) {\n    case \"css\":\n    case \"script\":\n    case \"font\":\n    case \"img\":\n    case \"image\":\n    case \"input\":\n    case \"link\":\n      return !0;\n    default:\n      return !1;\n  }\n}\nfunction estimateBandwidth() {\n  if (\"function\" === typeof performance.getEntriesByType) {\n    for (\n      var count = 0,\n        bits = 0,\n        resourceEntries = performance.getEntriesByType(\"resource\"),\n        i = 0;\n      i < resourceEntries.length;\n      i++\n    ) {\n      var entry = resourceEntries[i],\n        transferSize = entry.transferSize,\n        initiatorType = entry.initiatorType,\n        duration = entry.duration;\n      if (transferSize && duration && isLikelyStaticResource(initiatorType)) {\n        initiatorType = 0;\n        duration = entry.responseEnd;\n        for (i += 1; i < resourceEntries.length; i++) {\n          var overlapEntry = resourceEntries[i],\n            overlapStartTime = overlapEntry.startTime;\n          if (overlapStartTime > duration) break;\n          var overlapTransferSize = overlapEntry.transferSize,\n            overlapInitiatorType = overlapEntry.initiatorType;\n          overlapTransferSize &&\n            isLikelyStaticResource(overlapInitiatorType) &&\n            ((overlapEntry = overlapEntry.responseEnd),\n            (initiatorType +=\n              overlapTransferSize *\n              (overlapEntry < duration\n                ? 1\n                : (duration - overlapStartTime) /\n                  (overlapEntry - overlapStartTime))));\n        }\n        --i;\n        bits += (8 * (transferSize + initiatorType)) / (entry.duration / 1e3);\n        count++;\n        if (10 < count) break;\n      }\n    }\n    if (0 < count) return bits / count / 1e6;\n  }\n  return navigator.connection &&\n    ((count = navigator.connection.downlink), \"number\" === typeof count)\n    ? count\n    : 5;\n}\nvar eventsEnabled = null,\n  selectionInformation = null;\nfunction getOwnerDocumentFromRootContainer(rootContainerElement) {\n  return 9 === rootContainerElement.nodeType\n    ? rootContainerElement\n    : rootContainerElement.ownerDocument;\n}\nfunction getOwnHostContext(namespaceURI) {\n  switch (namespaceURI) {\n    case \"http://www.w3.org/2000/svg\":\n      return 1;\n    case \"http://www.w3.org/1998/Math/MathML\":\n      return 2;\n    default:\n      return 0;\n  }\n}\nfunction getChildHostContextProd(parentNamespace, type) {\n  if (0 === parentNamespace)\n    switch (type) {\n      case \"svg\":\n        return 1;\n      case \"math\":\n        return 2;\n      default:\n        return 0;\n    }\n  return 1 === parentNamespace && \"foreignObject\" === type\n    ? 0\n    : parentNamespace;\n}\nfunction shouldSetTextContent(type, props) {\n  return (\n    \"textarea\" === type ||\n    \"noscript\" === type ||\n    \"string\" === typeof props.children ||\n    \"number\" === typeof props.children ||\n    \"bigint\" === typeof props.children ||\n    (\"object\" === typeof props.dangerouslySetInnerHTML &&\n      null !== props.dangerouslySetInnerHTML &&\n      null != props.dangerouslySetInnerHTML.__html)\n  );\n}\nvar currentPopstateTransitionEvent = null;\nfunction shouldAttemptEagerTransition() {\n  var event = window.event;\n  if (event && \"popstate\" === event.type) {\n    if (event === currentPopstateTransitionEvent) return !1;\n    currentPopstateTransitionEvent = event;\n    return !0;\n  }\n  currentPopstateTransitionEvent = null;\n  return !1;\n}\nvar scheduleTimeout = \"function\" === typeof setTimeout ? setTimeout : void 0,\n  cancelTimeout = \"function\" === typeof clearTimeout ? clearTimeout : void 0,\n  localPromise = \"function\" === typeof Promise ? Promise : void 0,\n  scheduleMicrotask =\n    \"function\" === typeof queueMicrotask\n      ? queueMicrotask\n      : \"undefined\" !== typeof localPromise\n        ? function (callback) {\n            return localPromise\n              .resolve(null)\n              .then(callback)\n              .catch(handleErrorInNextTick);\n          }\n        : scheduleTimeout;\nfunction handleErrorInNextTick(error) {\n  setTimeout(function () {\n    throw error;\n  });\n}\nfunction isSingletonScope(type) {\n  return \"head\" === type;\n}\nfunction clearHydrationBoundary(parentInstance, hydrationInstance) {\n  var node = hydrationInstance,\n    depth = 0;\n  do {\n    var nextNode = node.nextSibling;\n    parentInstance.removeChild(node);\n    if (nextNode && 8 === nextNode.nodeType)\n      if (((node = nextNode.data), \"/$\" === node || \"/&\" === node)) {\n        if (0 === depth) {\n          parentInstance.removeChild(nextNode);\n          retryIfBlockedOn(hydrationInstance);\n          return;\n        }\n        depth--;\n      } else if (\n        \"$\" === node ||\n        \"$?\" === node ||\n        \"$~\" === node ||\n        \"$!\" === node ||\n        \"&\" === node\n      )\n        depth++;\n      else if (\"html\" === node)\n        releaseSingletonInstance(parentInstance.ownerDocument.documentElement);\n      else if (\"head\" === node) {\n        node = parentInstance.ownerDocument.head;\n        releaseSingletonInstance(node);\n        for (var node$jscomp$0 = node.firstChild; node$jscomp$0; ) {\n          var nextNode$jscomp$0 = node$jscomp$0.nextSibling,\n            nodeName = node$jscomp$0.nodeName;\n          node$jscomp$0[internalHoistableMarker] ||\n            \"SCRIPT\" === nodeName ||\n            \"STYLE\" === nodeName ||\n            (\"LINK\" === nodeName &&\n              \"stylesheet\" === node$jscomp$0.rel.toLowerCase()) ||\n            node.removeChild(node$jscomp$0);\n          node$jscomp$0 = nextNode$jscomp$0;\n        }\n      } else\n        \"body\" === node &&\n          releaseSingletonInstance(parentInstance.ownerDocument.body);\n    node = nextNode;\n  } while (node);\n  retryIfBlockedOn(hydrationInstance);\n}\nfunction hideOrUnhideDehydratedBoundary(suspenseInstance, isHidden) {\n  var node = suspenseInstance;\n  suspenseInstance = 0;\n  do {\n    var nextNode = node.nextSibling;\n    1 === node.nodeType\n      ? isHidden\n        ? ((node._stashedDisplay = node.style.display),\n          (node.style.display = \"none\"))\n        : ((node.style.display = node._stashedDisplay || \"\"),\n          \"\" === node.getAttribute(\"style\") && node.removeAttribute(\"style\"))\n      : 3 === node.nodeType &&\n        (isHidden\n          ? ((node._stashedText = node.nodeValue), (node.nodeValue = \"\"))\n          : (node.nodeValue = node._stashedText || \"\"));\n    if (nextNode && 8 === nextNode.nodeType)\n      if (((node = nextNode.data), \"/$\" === node))\n        if (0 === suspenseInstance) break;\n        else suspenseInstance--;\n      else\n        (\"$\" !== node && \"$?\" !== node && \"$~\" !== node && \"$!\" !== node) ||\n          suspenseInstance++;\n    node = nextNode;\n  } while (node);\n}\nfunction clearContainerSparingly(container) {\n  var nextNode = container.firstChild;\n  nextNode && 10 === nextNode.nodeType && (nextNode = nextNode.nextSibling);\n  for (; nextNode; ) {\n    var node = nextNode;\n    nextNode = nextNode.nextSibling;\n    switch (node.nodeName) {\n      case \"HTML\":\n      case \"HEAD\":\n      case \"BODY\":\n        clearContainerSparingly(node);\n        detachDeletedInstance(node);\n        continue;\n      case \"SCRIPT\":\n      case \"STYLE\":\n        continue;\n      case \"LINK\":\n        if (\"stylesheet\" === node.rel.toLowerCase()) continue;\n    }\n    container.removeChild(node);\n  }\n}\nfunction canHydrateInstance(instance, type, props, inRootOrSingleton) {\n  for (; 1 === instance.nodeType; ) {\n    var anyProps = props;\n    if (instance.nodeName.toLowerCase() !== type.toLowerCase()) {\n      if (\n        !inRootOrSingleton &&\n        (\"INPUT\" !== instance.nodeName || \"hidden\" !== instance.type)\n      )\n        break;\n    } else if (!inRootOrSingleton)\n      if (\"input\" === type && \"hidden\" === instance.type) {\n        var name = null == anyProps.name ? null : \"\" + anyProps.name;\n        if (\n          \"hidden\" === anyProps.type &&\n          instance.getAttribute(\"name\") === name\n        )\n          return instance;\n      } else return instance;\n    else if (!instance[internalHoistableMarker])\n      switch (type) {\n        case \"meta\":\n          if (!instance.hasAttribute(\"itemprop\")) break;\n          return instance;\n        case \"link\":\n          name = instance.getAttribute(\"rel\");\n          if (\"stylesheet\" === name && instance.hasAttribute(\"data-precedence\"))\n            break;\n          else if (\n            name !== anyProps.rel ||\n            instance.getAttribute(\"href\") !==\n              (null == anyProps.href || \"\" === anyProps.href\n                ? null\n                : anyProps.href) ||\n            instance.getAttribute(\"crossorigin\") !==\n              (null == anyProps.crossOrigin ? null : anyProps.crossOrigin) ||\n            instance.getAttribute(\"title\") !==\n              (null == anyProps.title ? null : anyProps.title)\n          )\n            break;\n          return instance;\n        case \"style\":\n          if (instance.hasAttribute(\"data-precedence\")) break;\n          return instance;\n        case \"script\":\n          name = instance.getAttribute(\"src\");\n          if (\n            (name !== (null == anyProps.src ? null : anyProps.src) ||\n              instance.getAttribute(\"type\") !==\n                (null == anyProps.type ? null : anyProps.type) ||\n              instance.getAttribute(\"crossorigin\") !==\n                (null == anyProps.crossOrigin ? null : anyProps.crossOrigin)) &&\n            name &&\n            instance.hasAttribute(\"async\") &&\n            !instance.hasAttribute(\"itemprop\")\n          )\n            break;\n          return instance;\n        default:\n          return instance;\n      }\n    instance = getNextHydratable(instance.nextSibling);\n    if (null === instance) break;\n  }\n  return null;\n}\nfunction canHydrateTextInstance(instance, text, inRootOrSingleton) {\n  if (\"\" === text) return null;\n  for (; 3 !== instance.nodeType; ) {\n    if (\n      (1 !== instance.nodeType ||\n        \"INPUT\" !== instance.nodeName ||\n        \"hidden\" !== instance.type) &&\n      !inRootOrSingleton\n    )\n      return null;\n    instance = getNextHydratable(instance.nextSibling);\n    if (null === instance) return null;\n  }\n  return instance;\n}\nfunction canHydrateHydrationBoundary(instance, inRootOrSingleton) {\n  for (; 8 !== instance.nodeType; ) {\n    if (\n      (1 !== instance.nodeType ||\n        \"INPUT\" !== instance.nodeName ||\n        \"hidden\" !== instance.type) &&\n      !inRootOrSingleton\n    )\n      return null;\n    instance = getNextHydratable(instance.nextSibling);\n    if (null === instance) return null;\n  }\n  return instance;\n}\nfunction isSuspenseInstancePending(instance) {\n  return \"$?\" === instance.data || \"$~\" === instance.data;\n}\nfunction isSuspenseInstanceFallback(instance) {\n  return (\n    \"$!\" === instance.data ||\n    (\"$?\" === instance.data && \"loading\" !== instance.ownerDocument.readyState)\n  );\n}\nfunction registerSuspenseInstanceRetry(instance, callback) {\n  var ownerDocument = instance.ownerDocument;\n  if (\"$~\" === instance.data) instance._reactRetry = callback;\n  else if (\"$?\" !== instance.data || \"loading\" !== ownerDocument.readyState)\n    callback();\n  else {\n    var listener = function () {\n      callback();\n      ownerDocument.removeEventListener(\"DOMContentLoaded\", listener);\n    };\n    ownerDocument.addEventListener(\"DOMContentLoaded\", listener);\n    instance._reactRetry = listener;\n  }\n}\nfunction getNextHydratable(node) {\n  for (; null != node; node = node.nextSibling) {\n    var nodeType = node.nodeType;\n    if (1 === nodeType || 3 === nodeType) break;\n    if (8 === nodeType) {\n      nodeType = node.data;\n      if (\n        \"$\" === nodeType ||\n        \"$!\" === nodeType ||\n        \"$?\" === nodeType ||\n        \"$~\" === nodeType ||\n        \"&\" === nodeType ||\n        \"F!\" === nodeType ||\n        \"F\" === nodeType\n      )\n        break;\n      if (\"/$\" === nodeType || \"/&\" === nodeType) return null;\n    }\n  }\n  return node;\n}\nvar previousHydratableOnEnteringScopedSingleton = null;\nfunction getNextHydratableInstanceAfterHydrationBoundary(hydrationInstance) {\n  hydrationInstance = hydrationInstance.nextSibling;\n  for (var depth = 0; hydrationInstance; ) {\n    if (8 === hydrationInstance.nodeType) {\n      var data = hydrationInstance.data;\n      if (\"/$\" === data || \"/&\" === data) {\n        if (0 === depth)\n          return getNextHydratable(hydrationInstance.nextSibling);\n        depth--;\n      } else\n        (\"$\" !== data &&\n          \"$!\" !== data &&\n          \"$?\" !== data &&\n          \"$~\" !== data &&\n          \"&\" !== data) ||\n          depth++;\n    }\n    hydrationInstance = hydrationInstance.nextSibling;\n  }\n  return null;\n}\nfunction getParentHydrationBoundary(targetInstance) {\n  targetInstance = targetInstance.previousSibling;\n  for (var depth = 0; targetInstance; ) {\n    if (8 === targetInstance.nodeType) {\n      var data = targetInstance.data;\n      if (\n        \"$\" === data ||\n        \"$!\" === data ||\n        \"$?\" === data ||\n        \"$~\" === data ||\n        \"&\" === data\n      ) {\n        if (0 === depth) return targetInstance;\n        depth--;\n      } else (\"/$\" !== data && \"/&\" !== data) || depth++;\n    }\n    targetInstance = targetInstance.previousSibling;\n  }\n  return null;\n}\nfunction resolveSingletonInstance(type, props, rootContainerInstance) {\n  props = getOwnerDocumentFromRootContainer(rootContainerInstance);\n  switch (type) {\n    case \"html\":\n      type = props.documentElement;\n      if (!type) throw Error(formatProdErrorMessage(452));\n      return type;\n    case \"head\":\n      type = props.head;\n      if (!type) throw Error(formatProdErrorMessage(453));\n      return type;\n    case \"body\":\n      type = props.body;\n      if (!type) throw Error(formatProdErrorMessage(454));\n      return type;\n    default:\n      throw Error(formatProdErrorMessage(451));\n  }\n}\nfunction releaseSingletonInstance(instance) {\n  for (var attributes = instance.attributes; attributes.length; )\n    instance.removeAttributeNode(attributes[0]);\n  detachDeletedInstance(instance);\n}\nvar preloadPropsMap = new Map(),\n  preconnectsSet = new Set();\nfunction getHoistableRoot(container) {\n  return \"function\" === typeof container.getRootNode\n    ? container.getRootNode()\n    : 9 === container.nodeType\n      ? container\n      : container.ownerDocument;\n}\nvar previousDispatcher = ReactDOMSharedInternals.d;\nReactDOMSharedInternals.d = {\n  f: flushSyncWork,\n  r: requestFormReset,\n  D: prefetchDNS,\n  C: preconnect,\n  L: preload,\n  m: preloadModule,\n  X: preinitScript,\n  S: preinitStyle,\n  M: preinitModuleScript\n};\nfunction flushSyncWork() {\n  var previousWasRendering = previousDispatcher.f(),\n    wasRendering = flushSyncWork$1();\n  return previousWasRendering || wasRendering;\n}\nfunction requestFormReset(form) {\n  var formInst = getInstanceFromNode(form);\n  null !== formInst && 5 === formInst.tag && \"form\" === formInst.type\n    ? requestFormReset$1(formInst)\n    : previousDispatcher.r(form);\n}\nvar globalDocument = \"undefined\" === typeof document ? null : document;\nfunction preconnectAs(rel, href, crossOrigin) {\n  var ownerDocument = globalDocument;\n  if (ownerDocument && \"string\" === typeof href && href) {\n    var limitedEscapedHref =\n      escapeSelectorAttributeValueInsideDoubleQuotes(href);\n    limitedEscapedHref =\n      'link[rel=\"' + rel + '\"][href=\"' + limitedEscapedHref + '\"]';\n    \"string\" === typeof crossOrigin &&\n      (limitedEscapedHref += '[crossorigin=\"' + crossOrigin + '\"]');\n    preconnectsSet.has(limitedEscapedHref) ||\n      (preconnectsSet.add(limitedEscapedHref),\n      (rel = { rel: rel, crossOrigin: crossOrigin, href: href }),\n      null === ownerDocument.querySelector(limitedEscapedHref) &&\n        ((href = ownerDocument.createElement(\"link\")),\n        setInitialProperties(href, \"link\", rel),\n        markNodeAsHoistable(href),\n        ownerDocument.head.appendChild(href)));\n  }\n}\nfunction prefetchDNS(href) {\n  previousDispatcher.D(href);\n  preconnectAs(\"dns-prefetch\", href, null);\n}\nfunction preconnect(href, crossOrigin) {\n  previousDispatcher.C(href, crossOrigin);\n  preconnectAs(\"preconnect\", href, crossOrigin);\n}\nfunction preload(href, as, options) {\n  previousDispatcher.L(href, as, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && href && as) {\n    var preloadSelector =\n      'link[rel=\"preload\"][as=\"' +\n      escapeSelectorAttributeValueInsideDoubleQuotes(as) +\n      '\"]';\n    \"image\" === as\n      ? options && options.imageSrcSet\n        ? ((preloadSelector +=\n            '[imagesrcset=\"' +\n            escapeSelectorAttributeValueInsideDoubleQuotes(\n              options.imageSrcSet\n            ) +\n            '\"]'),\n          \"string\" === typeof options.imageSizes &&\n            (preloadSelector +=\n              '[imagesizes=\"' +\n              escapeSelectorAttributeValueInsideDoubleQuotes(\n                options.imageSizes\n              ) +\n              '\"]'))\n        : (preloadSelector +=\n            '[href=\"' +\n            escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n            '\"]')\n      : (preloadSelector +=\n          '[href=\"' +\n          escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n          '\"]');\n    var key = preloadSelector;\n    switch (as) {\n      case \"style\":\n        key = getStyleKey(href);\n        break;\n      case \"script\":\n        key = getScriptKey(href);\n    }\n    preloadPropsMap.has(key) ||\n      ((href = assign(\n        {\n          rel: \"preload\",\n          href:\n            \"image\" === as && options && options.imageSrcSet ? void 0 : href,\n          as: as\n        },\n        options\n      )),\n      preloadPropsMap.set(key, href),\n      null !== ownerDocument.querySelector(preloadSelector) ||\n        (\"style\" === as &&\n          ownerDocument.querySelector(getStylesheetSelectorFromKey(key))) ||\n        (\"script\" === as &&\n          ownerDocument.querySelector(getScriptSelectorFromKey(key))) ||\n        ((as = ownerDocument.createElement(\"link\")),\n        setInitialProperties(as, \"link\", href),\n        markNodeAsHoistable(as),\n        ownerDocument.head.appendChild(as)));\n  }\n}\nfunction preloadModule(href, options) {\n  previousDispatcher.m(href, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && href) {\n    var as = options && \"string\" === typeof options.as ? options.as : \"script\",\n      preloadSelector =\n        'link[rel=\"modulepreload\"][as=\"' +\n        escapeSelectorAttributeValueInsideDoubleQuotes(as) +\n        '\"][href=\"' +\n        escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n        '\"]',\n      key = preloadSelector;\n    switch (as) {\n      case \"audioworklet\":\n      case \"paintworklet\":\n      case \"serviceworker\":\n      case \"sharedworker\":\n      case \"worker\":\n      case \"script\":\n        key = getScriptKey(href);\n    }\n    if (\n      !preloadPropsMap.has(key) &&\n      ((href = assign({ rel: \"modulepreload\", href: href }, options)),\n      preloadPropsMap.set(key, href),\n      null === ownerDocument.querySelector(preloadSelector))\n    ) {\n      switch (as) {\n        case \"audioworklet\":\n        case \"paintworklet\":\n        case \"serviceworker\":\n        case \"sharedworker\":\n        case \"worker\":\n        case \"script\":\n          if (ownerDocument.querySelector(getScriptSelectorFromKey(key)))\n            return;\n      }\n      as = ownerDocument.createElement(\"link\");\n      setInitialProperties(as, \"link\", href);\n      markNodeAsHoistable(as);\n      ownerDocument.head.appendChild(as);\n    }\n  }\n}\nfunction preinitStyle(href, precedence, options) {\n  previousDispatcher.S(href, precedence, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && href) {\n    var styles = getResourcesFromRoot(ownerDocument).hoistableStyles,\n      key = getStyleKey(href);\n    precedence = precedence || \"default\";\n    var resource = styles.get(key);\n    if (!resource) {\n      var state = { loading: 0, preload: null };\n      if (\n        (resource = ownerDocument.querySelector(\n          getStylesheetSelectorFromKey(key)\n        ))\n      )\n        state.loading = 5;\n      else {\n        href = assign(\n          { rel: \"stylesheet\", href: href, \"data-precedence\": precedence },\n          options\n        );\n        (options = preloadPropsMap.get(key)) &&\n          adoptPreloadPropsForStylesheet(href, options);\n        var link = (resource = ownerDocument.createElement(\"link\"));\n        markNodeAsHoistable(link);\n        setInitialProperties(link, \"link\", href);\n        link._p = new Promise(function (resolve, reject) {\n          link.onload = resolve;\n          link.onerror = reject;\n        });\n        link.addEventListener(\"load\", function () {\n          state.loading |= 1;\n        });\n        link.addEventListener(\"error\", function () {\n          state.loading |= 2;\n        });\n        state.loading |= 4;\n        insertStylesheet(resource, precedence, ownerDocument);\n      }\n      resource = {\n        type: \"stylesheet\",\n        instance: resource,\n        count: 1,\n        state: state\n      };\n      styles.set(key, resource);\n    }\n  }\n}\nfunction preinitScript(src, options) {\n  previousDispatcher.X(src, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && src) {\n    var scripts = getResourcesFromRoot(ownerDocument).hoistableScripts,\n      key = getScriptKey(src),\n      resource = scripts.get(key);\n    resource ||\n      ((resource = ownerDocument.querySelector(getScriptSelectorFromKey(key))),\n      resource ||\n        ((src = assign({ src: src, async: !0 }, options)),\n        (options = preloadPropsMap.get(key)) &&\n          adoptPreloadPropsForScript(src, options),\n        (resource = ownerDocument.createElement(\"script\")),\n        markNodeAsHoistable(resource),\n        setInitialProperties(resource, \"link\", src),\n        ownerDocument.head.appendChild(resource)),\n      (resource = {\n        type: \"script\",\n        instance: resource,\n        count: 1,\n        state: null\n      }),\n      scripts.set(key, resource));\n  }\n}\nfunction preinitModuleScript(src, options) {\n  previousDispatcher.M(src, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && src) {\n    var scripts = getResourcesFromRoot(ownerDocument).hoistableScripts,\n      key = getScriptKey(src),\n      resource = scripts.get(key);\n    resource ||\n      ((resource = ownerDocument.querySelector(getScriptSelectorFromKey(key))),\n      resource ||\n        ((src = assign({ src: src, async: !0, type: \"module\" }, options)),\n        (options = preloadPropsMap.get(key)) &&\n          adoptPreloadPropsForScript(src, options),\n        (resource = ownerDocument.createElement(\"script\")),\n        markNodeAsHoistable(resource),\n        setInitialProperties(resource, \"link\", src),\n        ownerDocument.head.appendChild(resource)),\n      (resource = {\n        type: \"script\",\n        instance: resource,\n        count: 1,\n        state: null\n      }),\n      scripts.set(key, resource));\n  }\n}\nfunction getResource(type, currentProps, pendingProps, currentResource) {\n  var JSCompiler_inline_result = (JSCompiler_inline_result =\n    rootInstanceStackCursor.current)\n    ? getHoistableRoot(JSCompiler_inline_result)\n    : null;\n  if (!JSCompiler_inline_result) throw Error(formatProdErrorMessage(446));\n  switch (type) {\n    case \"meta\":\n    case \"title\":\n      return null;\n    case \"style\":\n      return \"string\" === typeof pendingProps.precedence &&\n        \"string\" === typeof pendingProps.href\n        ? ((currentProps = getStyleKey(pendingProps.href)),\n          (pendingProps = getResourcesFromRoot(\n            JSCompiler_inline_result\n          ).hoistableStyles),\n          (currentResource = pendingProps.get(currentProps)),\n          currentResource ||\n            ((currentResource = {\n              type: \"style\",\n              instance: null,\n              count: 0,\n              state: null\n            }),\n            pendingProps.set(currentProps, currentResource)),\n          currentResource)\n        : { type: \"void\", instance: null, count: 0, state: null };\n    case \"link\":\n      if (\n        \"stylesheet\" === pendingProps.rel &&\n        \"string\" === typeof pendingProps.href &&\n        \"string\" === typeof pendingProps.precedence\n      ) {\n        type = getStyleKey(pendingProps.href);\n        var styles$243 = getResourcesFromRoot(\n            JSCompiler_inline_result\n          ).hoistableStyles,\n          resource$244 = styles$243.get(type);\n        resource$244 ||\n          ((JSCompiler_inline_result =\n            JSCompiler_inline_result.ownerDocument || JSCompiler_inline_result),\n          (resource$244 = {\n            type: \"stylesheet\",\n            instance: null,\n            count: 0,\n            state: { loading: 0, preload: null }\n          }),\n          styles$243.set(type, resource$244),\n          (styles$243 = JSCompiler_inline_result.querySelector(\n            getStylesheetSelectorFromKey(type)\n          )) &&\n            !styles$243._p &&\n            ((resource$244.instance = styles$243),\n            (resource$244.state.loading = 5)),\n          preloadPropsMap.has(type) ||\n            ((pendingProps = {\n              rel: \"preload\",\n              as: \"style\",\n              href: pendingProps.href,\n              crossOrigin: pendingProps.crossOrigin,\n              integrity: pendingProps.integrity,\n              media: pendingProps.media,\n              hrefLang: pendingProps.hrefLang,\n              referrerPolicy: pendingProps.referrerPolicy\n            }),\n            preloadPropsMap.set(type, pendingProps),\n            styles$243 ||\n              preloadStylesheet(\n                JSCompiler_inline_result,\n                type,\n                pendingProps,\n                resource$244.state\n              )));\n        if (currentProps && null === currentResource)\n          throw Error(formatProdErrorMessage(528, \"\"));\n        return resource$244;\n      }\n      if (currentProps && null !== currentResource)\n        throw Error(formatProdErrorMessage(529, \"\"));\n      return null;\n    case \"script\":\n      return (\n        (currentProps = pendingProps.async),\n        (pendingProps = pendingProps.src),\n        \"string\" === typeof pendingProps &&\n        currentProps &&\n        \"function\" !== typeof currentProps &&\n        \"symbol\" !== typeof currentProps\n          ? ((currentProps = getScriptKey(pendingProps)),\n            (pendingProps = getResourcesFromRoot(\n              JSCompiler_inline_result\n            ).hoistableScripts),\n            (currentResource = pendingProps.get(currentProps)),\n            currentResource ||\n              ((currentResource = {\n                type: \"script\",\n                instance: null,\n                count: 0,\n                state: null\n              }),\n              pendingProps.set(currentProps, currentResource)),\n            currentResource)\n          : { type: \"void\", instance: null, count: 0, state: null }\n      );\n    default:\n      throw Error(formatProdErrorMessage(444, type));\n  }\n}\nfunction getStyleKey(href) {\n  return 'href=\"' + escapeSelectorAttributeValueInsideDoubleQuotes(href) + '\"';\n}\nfunction getStylesheetSelectorFromKey(key) {\n  return 'link[rel=\"stylesheet\"][' + key + \"]\";\n}\nfunction stylesheetPropsFromRawProps(rawProps) {\n  return assign({}, rawProps, {\n    \"data-precedence\": rawProps.precedence,\n    precedence: null\n  });\n}\nfunction preloadStylesheet(ownerDocument, key, preloadProps, state) {\n  ownerDocument.querySelector('link[rel=\"preload\"][as=\"style\"][' + key + \"]\")\n    ? (state.loading = 1)\n    : ((key = ownerDocument.createElement(\"link\")),\n      (state.preload = key),\n      key.addEventListener(\"load\", function () {\n        return (state.loading |= 1);\n      }),\n      key.addEventListener(\"error\", function () {\n        return (state.loading |= 2);\n      }),\n      setInitialProperties(key, \"link\", preloadProps),\n      markNodeAsHoistable(key),\n      ownerDocument.head.appendChild(key));\n}\nfunction getScriptKey(src) {\n  return '[src=\"' + escapeSelectorAttributeValueInsideDoubleQuotes(src) + '\"]';\n}\nfunction getScriptSelectorFromKey(key) {\n  return \"script[async]\" + key;\n}\nfunction acquireResource(hoistableRoot, resource, props) {\n  resource.count++;\n  if (null === resource.instance)\n    switch (resource.type) {\n      case \"style\":\n        var instance = hoistableRoot.querySelector(\n          'style[data-href~=\"' +\n            escapeSelectorAttributeValueInsideDoubleQuotes(props.href) +\n            '\"]'\n        );\n        if (instance)\n          return (\n            (resource.instance = instance),\n            markNodeAsHoistable(instance),\n            instance\n          );\n        var styleProps = assign({}, props, {\n          \"data-href\": props.href,\n          \"data-precedence\": props.precedence,\n          href: null,\n          precedence: null\n        });\n        instance = (hoistableRoot.ownerDocument || hoistableRoot).createElement(\n          \"style\"\n        );\n        markNodeAsHoistable(instance);\n        setInitialProperties(instance, \"style\", styleProps);\n        insertStylesheet(instance, props.precedence, hoistableRoot);\n        return (resource.instance = instance);\n      case \"stylesheet\":\n        styleProps = getStyleKey(props.href);\n        var instance$249 = hoistableRoot.querySelector(\n          getStylesheetSelectorFromKey(styleProps)\n        );\n        if (instance$249)\n          return (\n            (resource.state.loading |= 4),\n            (resource.instance = instance$249),\n            markNodeAsHoistable(instance$249),\n            instance$249\n          );\n        instance = stylesheetPropsFromRawProps(props);\n        (styleProps = preloadPropsMap.get(styleProps)) &&\n          adoptPreloadPropsForStylesheet(instance, styleProps);\n        instance$249 = (\n          hoistableRoot.ownerDocument || hoistableRoot\n        ).createElement(\"link\");\n        markNodeAsHoistable(instance$249);\n        var linkInstance = instance$249;\n        linkInstance._p = new Promise(function (resolve, reject) {\n          linkInstance.onload = resolve;\n          linkInstance.onerror = reject;\n        });\n        setInitialProperties(instance$249, \"link\", instance);\n        resource.state.loading |= 4;\n        insertStylesheet(instance$249, props.precedence, hoistableRoot);\n        return (resource.instance = instance$249);\n      case \"script\":\n        instance$249 = getScriptKey(props.src);\n        if (\n          (styleProps = hoistableRoot.querySelector(\n            getScriptSelectorFromKey(instance$249)\n          ))\n        )\n          return (\n            (resource.instance = styleProps),\n            markNodeAsHoistable(styleProps),\n            styleProps\n          );\n        instance = props;\n        if ((styleProps = preloadPropsMap.get(instance$249)))\n          (instance = assign({}, props)),\n            adoptPreloadPropsForScript(instance, styleProps);\n        hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;\n        styleProps = hoistableRoot.createElement(\"script\");\n        markNodeAsHoistable(styleProps);\n        setInitialProperties(styleProps, \"link\", instance);\n        hoistableRoot.head.appendChild(styleProps);\n        return (resource.instance = styleProps);\n      case \"void\":\n        return null;\n      default:\n        throw Error(formatProdErrorMessage(443, resource.type));\n    }\n  else\n    \"stylesheet\" === resource.type &&\n      0 === (resource.state.loading & 4) &&\n      ((instance = resource.instance),\n      (resource.state.loading |= 4),\n      insertStylesheet(instance, props.precedence, hoistableRoot));\n  return resource.instance;\n}\nfunction insertStylesheet(instance, precedence, root) {\n  for (\n    var nodes = root.querySelectorAll(\n        'link[rel=\"stylesheet\"][data-precedence],style[data-precedence]'\n      ),\n      last = nodes.length ? nodes[nodes.length - 1] : null,\n      prior = last,\n      i = 0;\n    i < nodes.length;\n    i++\n  ) {\n    var node = nodes[i];\n    if (node.dataset.precedence === precedence) prior = node;\n    else if (prior !== last) break;\n  }\n  prior\n    ? prior.parentNode.insertBefore(instance, prior.nextSibling)\n    : ((precedence = 9 === root.nodeType ? root.head : root),\n      precedence.insertBefore(instance, precedence.firstChild));\n}\nfunction adoptPreloadPropsForStylesheet(stylesheetProps, preloadProps) {\n  null == stylesheetProps.crossOrigin &&\n    (stylesheetProps.crossOrigin = preloadProps.crossOrigin);\n  null == stylesheetProps.referrerPolicy &&\n    (stylesheetProps.referrerPolicy = preloadProps.referrerPolicy);\n  null == stylesheetProps.title && (stylesheetProps.title = preloadProps.title);\n}\nfunction adoptPreloadPropsForScript(scriptProps, preloadProps) {\n  null == scriptProps.crossOrigin &&\n    (scriptProps.crossOrigin = preloadProps.crossOrigin);\n  null == scriptProps.referrerPolicy &&\n    (scriptProps.referrerPolicy = preloadProps.referrerPolicy);\n  null == scriptProps.integrity &&\n    (scriptProps.integrity = preloadProps.integrity);\n}\nvar tagCaches = null;\nfunction getHydratableHoistableCache(type, keyAttribute, ownerDocument) {\n  if (null === tagCaches) {\n    var cache = new Map();\n    var caches = (tagCaches = new Map());\n    caches.set(ownerDocument, cache);\n  } else\n    (caches = tagCaches),\n      (cache = caches.get(ownerDocument)),\n      cache || ((cache = new Map()), caches.set(ownerDocument, cache));\n  if (cache.has(type)) return cache;\n  cache.set(type, null);\n  ownerDocument = ownerDocument.getElementsByTagName(type);\n  for (caches = 0; caches < ownerDocument.length; caches++) {\n    var node = ownerDocument[caches];\n    if (\n      !(\n        node[internalHoistableMarker] ||\n        node[internalInstanceKey] ||\n        (\"link\" === type && \"stylesheet\" === node.getAttribute(\"rel\"))\n      ) &&\n      \"http://www.w3.org/2000/svg\" !== node.namespaceURI\n    ) {\n      var nodeKey = node.getAttribute(keyAttribute) || \"\";\n      nodeKey = type + nodeKey;\n      var existing = cache.get(nodeKey);\n      existing ? existing.push(node) : cache.set(nodeKey, [node]);\n    }\n  }\n  return cache;\n}\nfunction mountHoistable(hoistableRoot, type, instance) {\n  hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;\n  hoistableRoot.head.insertBefore(\n    instance,\n    \"title\" === type ? hoistableRoot.querySelector(\"head > title\") : null\n  );\n}\nfunction isHostHoistableType(type, props, hostContext) {\n  if (1 === hostContext || null != props.itemProp) return !1;\n  switch (type) {\n    case \"meta\":\n    case \"title\":\n      return !0;\n    case \"style\":\n      if (\n        \"string\" !== typeof props.precedence ||\n        \"string\" !== typeof props.href ||\n        \"\" === props.href\n      )\n        break;\n      return !0;\n    case \"link\":\n      if (\n        \"string\" !== typeof props.rel ||\n        \"string\" !== typeof props.href ||\n        \"\" === props.href ||\n        props.onLoad ||\n        props.onError\n      )\n        break;\n      switch (props.rel) {\n        case \"stylesheet\":\n          return (\n            (type = props.disabled),\n            \"string\" === typeof props.precedence && null == type\n          );\n        default:\n          return !0;\n      }\n    case \"script\":\n      if (\n        props.async &&\n        \"function\" !== typeof props.async &&\n        \"symbol\" !== typeof props.async &&\n        !props.onLoad &&\n        !props.onError &&\n        props.src &&\n        \"string\" === typeof props.src\n      )\n        return !0;\n  }\n  return !1;\n}\nfunction preloadResource(resource) {\n  return \"stylesheet\" === resource.type && 0 === (resource.state.loading & 3)\n    ? !1\n    : !0;\n}\nfunction suspendResource(state, hoistableRoot, resource, props) {\n  if (\n    \"stylesheet\" === resource.type &&\n    (\"string\" !== typeof props.media ||\n      !1 !== matchMedia(props.media).matches) &&\n    0 === (resource.state.loading & 4)\n  ) {\n    if (null === resource.instance) {\n      var key = getStyleKey(props.href),\n        instance = hoistableRoot.querySelector(\n          getStylesheetSelectorFromKey(key)\n        );\n      if (instance) {\n        hoistableRoot = instance._p;\n        null !== hoistableRoot &&\n          \"object\" === typeof hoistableRoot &&\n          \"function\" === typeof hoistableRoot.then &&\n          (state.count++,\n          (state = onUnsuspend.bind(state)),\n          hoistableRoot.then(state, state));\n        resource.state.loading |= 4;\n        resource.instance = instance;\n        markNodeAsHoistable(instance);\n        return;\n      }\n      instance = hoistableRoot.ownerDocument || hoistableRoot;\n      props = stylesheetPropsFromRawProps(props);\n      (key = preloadPropsMap.get(key)) &&\n        adoptPreloadPropsForStylesheet(props, key);\n      instance = instance.createElement(\"link\");\n      markNodeAsHoistable(instance);\n      var linkInstance = instance;\n      linkInstance._p = new Promise(function (resolve, reject) {\n        linkInstance.onload = resolve;\n        linkInstance.onerror = reject;\n      });\n      setInitialProperties(instance, \"link\", props);\n      resource.instance = instance;\n    }\n    null === state.stylesheets && (state.stylesheets = new Map());\n    state.stylesheets.set(resource, hoistableRoot);\n    (hoistableRoot = resource.state.preload) &&\n      0 === (resource.state.loading & 3) &&\n      (state.count++,\n      (resource = onUnsuspend.bind(state)),\n      hoistableRoot.addEventListener(\"load\", resource),\n      hoistableRoot.addEventListener(\"error\", resource));\n  }\n}\nvar estimatedBytesWithinLimit = 0;\nfunction waitForCommitToBeReady(state, timeoutOffset) {\n  state.stylesheets &&\n    0 === state.count &&\n    insertSuspendedStylesheets(state, state.stylesheets);\n  return 0 < state.count || 0 < state.imgCount\n    ? function (commit) {\n        var stylesheetTimer = setTimeout(function () {\n          state.stylesheets &&\n            insertSuspendedStylesheets(state, state.stylesheets);\n          if (state.unsuspend) {\n            var unsuspend = state.unsuspend;\n            state.unsuspend = null;\n            unsuspend();\n          }\n        }, 6e4 + timeoutOffset);\n        0 < state.imgBytes &&\n          0 === estimatedBytesWithinLimit &&\n          (estimatedBytesWithinLimit = 62500 * estimateBandwidth());\n        var imgTimer = setTimeout(\n          function () {\n            state.waitingForImages = !1;\n            if (\n              0 === state.count &&\n              (state.stylesheets &&\n                insertSuspendedStylesheets(state, state.stylesheets),\n              state.unsuspend)\n            ) {\n              var unsuspend = state.unsuspend;\n              state.unsuspend = null;\n              unsuspend();\n            }\n          },\n          (state.imgBytes > estimatedBytesWithinLimit ? 50 : 800) +\n            timeoutOffset\n        );\n        state.unsuspend = commit;\n        return function () {\n          state.unsuspend = null;\n          clearTimeout(stylesheetTimer);\n          clearTimeout(imgTimer);\n        };\n      }\n    : null;\n}\nfunction onUnsuspend() {\n  this.count--;\n  if (0 === this.count && (0 === this.imgCount || !this.waitingForImages))\n    if (this.stylesheets) insertSuspendedStylesheets(this, this.stylesheets);\n    else if (this.unsuspend) {\n      var unsuspend = this.unsuspend;\n      this.unsuspend = null;\n      unsuspend();\n    }\n}\nvar precedencesByRoot = null;\nfunction insertSuspendedStylesheets(state, resources) {\n  state.stylesheets = null;\n  null !== state.unsuspend &&\n    (state.count++,\n    (precedencesByRoot = new Map()),\n    resources.forEach(insertStylesheetIntoRoot, state),\n    (precedencesByRoot = null),\n    onUnsuspend.call(state));\n}\nfunction insertStylesheetIntoRoot(root, resource) {\n  if (!(resource.state.loading & 4)) {\n    var precedences = precedencesByRoot.get(root);\n    if (precedences) var last = precedences.get(null);\n    else {\n      precedences = new Map();\n      precedencesByRoot.set(root, precedences);\n      for (\n        var nodes = root.querySelectorAll(\n            \"link[data-precedence],style[data-precedence]\"\n          ),\n          i = 0;\n        i < nodes.length;\n        i++\n      ) {\n        var node = nodes[i];\n        if (\n          \"LINK\" === node.nodeName ||\n          \"not all\" !== node.getAttribute(\"media\")\n        )\n          precedences.set(node.dataset.precedence, node), (last = node);\n      }\n      last && precedences.set(null, last);\n    }\n    nodes = resource.instance;\n    node = nodes.getAttribute(\"data-precedence\");\n    i = precedences.get(node) || last;\n    i === last && precedences.set(null, nodes);\n    precedences.set(node, nodes);\n    this.count++;\n    last = onUnsuspend.bind(this);\n    nodes.addEventListener(\"load\", last);\n    nodes.addEventListener(\"error\", last);\n    i\n      ? i.parentNode.insertBefore(nodes, i.nextSibling)\n      : ((root = 9 === root.nodeType ? root.head : root),\n        root.insertBefore(nodes, root.firstChild));\n    resource.state.loading |= 4;\n  }\n}\nvar HostTransitionContext = {\n  $$typeof: REACT_CONTEXT_TYPE,\n  Provider: null,\n  Consumer: null,\n  _currentValue: sharedNotPendingObject,\n  _currentValue2: sharedNotPendingObject,\n  _threadCount: 0\n};\nfunction FiberRootNode(\n  containerInfo,\n  tag,\n  hydrate,\n  identifierPrefix,\n  onUncaughtError,\n  onCaughtError,\n  onRecoverableError,\n  onDefaultTransitionIndicator,\n  formState\n) {\n  this.tag = 1;\n  this.containerInfo = containerInfo;\n  this.pingCache = this.current = this.pendingChildren = null;\n  this.timeoutHandle = -1;\n  this.callbackNode =\n    this.next =\n    this.pendingContext =\n    this.context =\n    this.cancelPendingCommit =\n      null;\n  this.callbackPriority = 0;\n  this.expirationTimes = createLaneMap(-1);\n  this.entangledLanes =\n    this.shellSuspendCounter =\n    this.errorRecoveryDisabledLanes =\n    this.expiredLanes =\n    this.warmLanes =\n    this.pingedLanes =\n    this.suspendedLanes =\n    this.pendingLanes =\n      0;\n  this.entanglements = createLaneMap(0);\n  this.hiddenUpdates = createLaneMap(null);\n  this.identifierPrefix = identifierPrefix;\n  this.onUncaughtError = onUncaughtError;\n  this.onCaughtError = onCaughtError;\n  this.onRecoverableError = onRecoverableError;\n  this.pooledCache = null;\n  this.pooledCacheLanes = 0;\n  this.formState = formState;\n  this.incompleteTransitions = new Map();\n}\nfunction createFiberRoot(\n  containerInfo,\n  tag,\n  hydrate,\n  initialChildren,\n  hydrationCallbacks,\n  isStrictMode,\n  identifierPrefix,\n  formState,\n  onUncaughtError,\n  onCaughtError,\n  onRecoverableError,\n  onDefaultTransitionIndicator\n) {\n  containerInfo = new FiberRootNode(\n    containerInfo,\n    tag,\n    hydrate,\n    identifierPrefix,\n    onUncaughtError,\n    onCaughtError,\n    onRecoverableError,\n    onDefaultTransitionIndicator,\n    formState\n  );\n  tag = 1;\n  !0 === isStrictMode && (tag |= 24);\n  isStrictMode = createFiberImplClass(3, null, null, tag);\n  containerInfo.current = isStrictMode;\n  isStrictMode.stateNode = containerInfo;\n  tag = createCache();\n  tag.refCount++;\n  containerInfo.pooledCache = tag;\n  tag.refCount++;\n  isStrictMode.memoizedState = {\n    element: initialChildren,\n    isDehydrated: hydrate,\n    cache: tag\n  };\n  initializeUpdateQueue(isStrictMode);\n  return containerInfo;\n}\nfunction getContextForSubtree(parentComponent) {\n  if (!parentComponent) return emptyContextObject;\n  parentComponent = emptyContextObject;\n  return parentComponent;\n}\nfunction updateContainerImpl(\n  rootFiber,\n  lane,\n  element,\n  container,\n  parentComponent,\n  callback\n) {\n  parentComponent = getContextForSubtree(parentComponent);\n  null === container.context\n    ? (container.context = parentComponent)\n    : (container.pendingContext = parentComponent);\n  container = createUpdate(lane);\n  container.payload = { element: element };\n  callback = void 0 === callback ? null : callback;\n  null !== callback && (container.callback = callback);\n  element = enqueueUpdate(rootFiber, container, lane);\n  null !== element &&\n    (scheduleUpdateOnFiber(element, rootFiber, lane),\n    entangleTransitions(element, rootFiber, lane));\n}\nfunction markRetryLaneImpl(fiber, retryLane) {\n  fiber = fiber.memoizedState;\n  if (null !== fiber && null !== fiber.dehydrated) {\n    var a = fiber.retryLane;\n    fiber.retryLane = 0 !== a && a < retryLane ? a : retryLane;\n  }\n}\nfunction markRetryLaneIfNotHydrated(fiber, retryLane) {\n  markRetryLaneImpl(fiber, retryLane);\n  (fiber = fiber.alternate) && markRetryLaneImpl(fiber, retryLane);\n}\nfunction attemptContinuousHydration(fiber) {\n  if (13 === fiber.tag || 31 === fiber.tag) {\n    var root = enqueueConcurrentRenderForLane(fiber, 67108864);\n    null !== root && scheduleUpdateOnFiber(root, fiber, 67108864);\n    markRetryLaneIfNotHydrated(fiber, 67108864);\n  }\n}\nfunction attemptHydrationAtCurrentPriority(fiber) {\n  if (13 === fiber.tag || 31 === fiber.tag) {\n    var lane = requestUpdateLane();\n    lane = getBumpedLaneForHydrationByLane(lane);\n    var root = enqueueConcurrentRenderForLane(fiber, lane);\n    null !== root && scheduleUpdateOnFiber(root, fiber, lane);\n    markRetryLaneIfNotHydrated(fiber, lane);\n  }\n}\nvar _enabled = !0;\nfunction dispatchDiscreteEvent(\n  domEventName,\n  eventSystemFlags,\n  container,\n  nativeEvent\n) {\n  var prevTransition = ReactSharedInternals.T;\n  ReactSharedInternals.T = null;\n  var previousPriority = ReactDOMSharedInternals.p;\n  try {\n    (ReactDOMSharedInternals.p = 2),\n      dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);\n  } finally {\n    (ReactDOMSharedInternals.p = previousPriority),\n      (ReactSharedInternals.T = prevTransition);\n  }\n}\nfunction dispatchContinuousEvent(\n  domEventName,\n  eventSystemFlags,\n  container,\n  nativeEvent\n) {\n  var prevTransition = ReactSharedInternals.T;\n  ReactSharedInternals.T = null;\n  var previousPriority = ReactDOMSharedInternals.p;\n  try {\n    (ReactDOMSharedInternals.p = 8),\n      dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);\n  } finally {\n    (ReactDOMSharedInternals.p = previousPriority),\n      (ReactSharedInternals.T = prevTransition);\n  }\n}\nfunction dispatchEvent(\n  domEventName,\n  eventSystemFlags,\n  targetContainer,\n  nativeEvent\n) {\n  if (_enabled) {\n    var blockedOn = findInstanceBlockingEvent(nativeEvent);\n    if (null === blockedOn)\n      dispatchEventForPluginEventSystem(\n        domEventName,\n        eventSystemFlags,\n        nativeEvent,\n        return_targetInst,\n        targetContainer\n      ),\n        clearIfContinuousEvent(domEventName, nativeEvent);\n    else if (\n      queueIfContinuousEvent(\n        blockedOn,\n        domEventName,\n        eventSystemFlags,\n        targetContainer,\n        nativeEvent\n      )\n    )\n      nativeEvent.stopPropagation();\n    else if (\n      (clearIfContinuousEvent(domEventName, nativeEvent),\n      eventSystemFlags & 4 &&\n        -1 < discreteReplayableEvents.indexOf(domEventName))\n    ) {\n      for (; null !== blockedOn; ) {\n        var fiber = getInstanceFromNode(blockedOn);\n        if (null !== fiber)\n          switch (fiber.tag) {\n            case 3:\n              fiber = fiber.stateNode;\n              if (fiber.current.memoizedState.isDehydrated) {\n                var lanes = getHighestPriorityLanes(fiber.pendingLanes);\n                if (0 !== lanes) {\n                  var root = fiber;\n                  root.pendingLanes |= 2;\n                  for (root.entangledLanes |= 2; lanes; ) {\n                    var lane = 1 << (31 - clz32(lanes));\n                    root.entanglements[1] |= lane;\n                    lanes &= ~lane;\n                  }\n                  ensureRootIsScheduled(fiber);\n                  0 === (executionContext & 6) &&\n                    ((workInProgressRootRenderTargetTime = now() + 500),\n                    flushSyncWorkAcrossRoots_impl(0, !1));\n                }\n              }\n              break;\n            case 31:\n            case 13:\n              (root = enqueueConcurrentRenderForLane(fiber, 2)),\n                null !== root && scheduleUpdateOnFiber(root, fiber, 2),\n                flushSyncWork$1(),\n                markRetryLaneIfNotHydrated(fiber, 2);\n          }\n        fiber = findInstanceBlockingEvent(nativeEvent);\n        null === fiber &&\n          dispatchEventForPluginEventSystem(\n            domEventName,\n            eventSystemFlags,\n            nativeEvent,\n            return_targetInst,\n            targetContainer\n          );\n        if (fiber === blockedOn) break;\n        blockedOn = fiber;\n      }\n      null !== blockedOn && nativeEvent.stopPropagation();\n    } else\n      dispatchEventForPluginEventSystem(\n        domEventName,\n        eventSystemFlags,\n        nativeEvent,\n        null,\n        targetContainer\n      );\n  }\n}\nfunction findInstanceBlockingEvent(nativeEvent) {\n  nativeEvent = getEventTarget(nativeEvent);\n  return findInstanceBlockingTarget(nativeEvent);\n}\nvar return_targetInst = null;\nfunction findInstanceBlockingTarget(targetNode) {\n  return_targetInst = null;\n  targetNode = getClosestInstanceFromNode(targetNode);\n  if (null !== targetNode) {\n    var nearestMounted = getNearestMountedFiber(targetNode);\n    if (null === nearestMounted) targetNode = null;\n    else {\n      var tag = nearestMounted.tag;\n      if (13 === tag) {\n        targetNode = getSuspenseInstanceFromFiber(nearestMounted);\n        if (null !== targetNode) return targetNode;\n        targetNode = null;\n      } else if (31 === tag) {\n        targetNode = getActivityInstanceFromFiber(nearestMounted);\n        if (null !== targetNode) return targetNode;\n        targetNode = null;\n      } else if (3 === tag) {\n        if (nearestMounted.stateNode.current.memoizedState.isDehydrated)\n          return 3 === nearestMounted.tag\n            ? nearestMounted.stateNode.containerInfo\n            : null;\n        targetNode = null;\n      } else nearestMounted !== targetNode && (targetNode = null);\n    }\n  }\n  return_targetInst = targetNode;\n  return null;\n}\nfunction getEventPriority(domEventName) {\n  switch (domEventName) {\n    case \"beforetoggle\":\n    case \"cancel\":\n    case \"click\":\n    case \"close\":\n    case \"contextmenu\":\n    case \"copy\":\n    case \"cut\":\n    case \"auxclick\":\n    case \"dblclick\":\n    case \"dragend\":\n    case \"dragstart\":\n    case \"drop\":\n    case \"focusin\":\n    case \"focusout\":\n    case \"input\":\n    case \"invalid\":\n    case \"keydown\":\n    case \"keypress\":\n    case \"keyup\":\n    case \"mousedown\":\n    case \"mouseup\":\n    case \"paste\":\n    case \"pause\":\n    case \"play\":\n    case \"pointercancel\":\n    case \"pointerdown\":\n    case \"pointerup\":\n    case \"ratechange\":\n    case \"reset\":\n    case \"resize\":\n    case \"seeked\":\n    case \"submit\":\n    case \"toggle\":\n    case \"touchcancel\":\n    case \"touchend\":\n    case \"touchstart\":\n    case \"volumechange\":\n    case \"change\":\n    case \"selectionchange\":\n    case \"textInput\":\n    case \"compositionstart\":\n    case \"compositionend\":\n    case \"compositionupdate\":\n    case \"beforeblur\":\n    case \"afterblur\":\n    case \"beforeinput\":\n    case \"blur\":\n    case \"fullscreenchange\":\n    case \"focus\":\n    case \"hashchange\":\n    case \"popstate\":\n    case \"select\":\n    case \"selectstart\":\n      return 2;\n    case \"drag\":\n    case \"dragenter\":\n    case \"dragexit\":\n    case \"dragleave\":\n    case \"dragover\":\n    case \"mousemove\":\n    case \"mouseout\":\n    case \"mouseover\":\n    case \"pointermove\":\n    case \"pointerout\":\n    case \"pointerover\":\n    case \"scroll\":\n    case \"touchmove\":\n    case \"wheel\":\n    case \"mouseenter\":\n    case \"mouseleave\":\n    case \"pointerenter\":\n    case \"pointerleave\":\n      return 8;\n    case \"message\":\n      switch (getCurrentPriorityLevel()) {\n        case ImmediatePriority:\n          return 2;\n        case UserBlockingPriority:\n          return 8;\n        case NormalPriority$1:\n        case LowPriority:\n          return 32;\n        case IdlePriority:\n          return 268435456;\n        default:\n          return 32;\n      }\n    default:\n      return 32;\n  }\n}\nvar hasScheduledReplayAttempt = !1,\n  queuedFocus = null,\n  queuedDrag = null,\n  queuedMouse = null,\n  queuedPointers = new Map(),\n  queuedPointerCaptures = new Map(),\n  queuedExplicitHydrationTargets = [],\n  discreteReplayableEvents =\n    \"mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset\".split(\n      \" \"\n    );\nfunction clearIfContinuousEvent(domEventName, nativeEvent) {\n  switch (domEventName) {\n    case \"focusin\":\n    case \"focusout\":\n      queuedFocus = null;\n      break;\n    case \"dragenter\":\n    case \"dragleave\":\n      queuedDrag = null;\n      break;\n    case \"mouseover\":\n    case \"mouseout\":\n      queuedMouse = null;\n      break;\n    case \"pointerover\":\n    case \"pointerout\":\n      queuedPointers.delete(nativeEvent.pointerId);\n      break;\n    case \"gotpointercapture\":\n    case \"lostpointercapture\":\n      queuedPointerCaptures.delete(nativeEvent.pointerId);\n  }\n}\nfunction accumulateOrCreateContinuousQueuedReplayableEvent(\n  existingQueuedEvent,\n  blockedOn,\n  domEventName,\n  eventSystemFlags,\n  targetContainer,\n  nativeEvent\n) {\n  if (\n    null === existingQueuedEvent ||\n    existingQueuedEvent.nativeEvent !== nativeEvent\n  )\n    return (\n      (existingQueuedEvent = {\n        blockedOn: blockedOn,\n        domEventName: domEventName,\n        eventSystemFlags: eventSystemFlags,\n        nativeEvent: nativeEvent,\n        targetContainers: [targetContainer]\n      }),\n      null !== blockedOn &&\n        ((blockedOn = getInstanceFromNode(blockedOn)),\n        null !== blockedOn && attemptContinuousHydration(blockedOn)),\n      existingQueuedEvent\n    );\n  existingQueuedEvent.eventSystemFlags |= eventSystemFlags;\n  blockedOn = existingQueuedEvent.targetContainers;\n  null !== targetContainer &&\n    -1 === blockedOn.indexOf(targetContainer) &&\n    blockedOn.push(targetContainer);\n  return existingQueuedEvent;\n}\nfunction queueIfContinuousEvent(\n  blockedOn,\n  domEventName,\n  eventSystemFlags,\n  targetContainer,\n  nativeEvent\n) {\n  switch (domEventName) {\n    case \"focusin\":\n      return (\n        (queuedFocus = accumulateOrCreateContinuousQueuedReplayableEvent(\n          queuedFocus,\n          blockedOn,\n          domEventName,\n          eventSystemFlags,\n          targetContainer,\n          nativeEvent\n        )),\n        !0\n      );\n    case \"dragenter\":\n      return (\n        (queuedDrag = accumulateOrCreateContinuousQueuedReplayableEvent(\n          queuedDrag,\n          blockedOn,\n          domEventName,\n          eventSystemFlags,\n          targetContainer,\n          nativeEvent\n        )),\n        !0\n      );\n    case \"mouseover\":\n      return (\n        (queuedMouse = accumulateOrCreateContinuousQueuedReplayableEvent(\n          queuedMouse,\n          blockedOn,\n          domEventName,\n          eventSystemFlags,\n          targetContainer,\n          nativeEvent\n        )),\n        !0\n      );\n    case \"pointerover\":\n      var pointerId = nativeEvent.pointerId;\n      queuedPointers.set(\n        pointerId,\n        accumulateOrCreateContinuousQueuedReplayableEvent(\n          queuedPointers.get(pointerId) || null,\n          blockedOn,\n          domEventName,\n          eventSystemFlags,\n          targetContainer,\n          nativeEvent\n        )\n      );\n      return !0;\n    case \"gotpointercapture\":\n      return (\n        (pointerId = nativeEvent.pointerId),\n        queuedPointerCaptures.set(\n          pointerId,\n          accumulateOrCreateContinuousQueuedReplayableEvent(\n            queuedPointerCaptures.get(pointerId) || null,\n            blockedOn,\n            domEventName,\n            eventSystemFlags,\n            targetContainer,\n            nativeEvent\n          )\n        ),\n        !0\n      );\n  }\n  return !1;\n}\nfunction attemptExplicitHydrationTarget(queuedTarget) {\n  var targetInst = getClosestInstanceFromNode(queuedTarget.target);\n  if (null !== targetInst) {\n    var nearestMounted = getNearestMountedFiber(targetInst);\n    if (null !== nearestMounted)\n      if (((targetInst = nearestMounted.tag), 13 === targetInst)) {\n        if (\n          ((targetInst = getSuspenseInstanceFromFiber(nearestMounted)),\n          null !== targetInst)\n        ) {\n          queuedTarget.blockedOn = targetInst;\n          runWithPriority(queuedTarget.priority, function () {\n            attemptHydrationAtCurrentPriority(nearestMounted);\n          });\n          return;\n        }\n      } else if (31 === targetInst) {\n        if (\n          ((targetInst = getActivityInstanceFromFiber(nearestMounted)),\n          null !== targetInst)\n        ) {\n          queuedTarget.blockedOn = targetInst;\n          runWithPriority(queuedTarget.priority, function () {\n            attemptHydrationAtCurrentPriority(nearestMounted);\n          });\n          return;\n        }\n      } else if (\n        3 === targetInst &&\n        nearestMounted.stateNode.current.memoizedState.isDehydrated\n      ) {\n        queuedTarget.blockedOn =\n          3 === nearestMounted.tag\n            ? nearestMounted.stateNode.containerInfo\n            : null;\n        return;\n      }\n  }\n  queuedTarget.blockedOn = null;\n}\nfunction attemptReplayContinuousQueuedEvent(queuedEvent) {\n  if (null !== queuedEvent.blockedOn) return !1;\n  for (\n    var targetContainers = queuedEvent.targetContainers;\n    0 < targetContainers.length;\n\n  ) {\n    var nextBlockedOn = findInstanceBlockingEvent(queuedEvent.nativeEvent);\n    if (null === nextBlockedOn) {\n      nextBlockedOn = queuedEvent.nativeEvent;\n      var nativeEventClone = new nextBlockedOn.constructor(\n        nextBlockedOn.type,\n        nextBlockedOn\n      );\n      currentReplayingEvent = nativeEventClone;\n      nextBlockedOn.target.dispatchEvent(nativeEventClone);\n      currentReplayingEvent = null;\n    } else\n      return (\n        (targetContainers = getInstanceFromNode(nextBlockedOn)),\n        null !== targetContainers &&\n          attemptContinuousHydration(targetContainers),\n        (queuedEvent.blockedOn = nextBlockedOn),\n        !1\n      );\n    targetContainers.shift();\n  }\n  return !0;\n}\nfunction attemptReplayContinuousQueuedEventInMap(queuedEvent, key, map) {\n  attemptReplayContinuousQueuedEvent(queuedEvent) && map.delete(key);\n}\nfunction replayUnblockedEvents() {\n  hasScheduledReplayAttempt = !1;\n  null !== queuedFocus &&\n    attemptReplayContinuousQueuedEvent(queuedFocus) &&\n    (queuedFocus = null);\n  null !== queuedDrag &&\n    attemptReplayContinuousQueuedEvent(queuedDrag) &&\n    (queuedDrag = null);\n  null !== queuedMouse &&\n    attemptReplayContinuousQueuedEvent(queuedMouse) &&\n    (queuedMouse = null);\n  queuedPointers.forEach(attemptReplayContinuousQueuedEventInMap);\n  queuedPointerCaptures.forEach(attemptReplayContinuousQueuedEventInMap);\n}\nfunction scheduleCallbackIfUnblocked(queuedEvent, unblocked) {\n  queuedEvent.blockedOn === unblocked &&\n    ((queuedEvent.blockedOn = null),\n    hasScheduledReplayAttempt ||\n      ((hasScheduledReplayAttempt = !0),\n      Scheduler.unstable_scheduleCallback(\n        Scheduler.unstable_NormalPriority,\n        replayUnblockedEvents\n      )));\n}\nvar lastScheduledReplayQueue = null;\nfunction scheduleReplayQueueIfNeeded(formReplayingQueue) {\n  lastScheduledReplayQueue !== formReplayingQueue &&\n    ((lastScheduledReplayQueue = formReplayingQueue),\n    Scheduler.unstable_scheduleCallback(\n      Scheduler.unstable_NormalPriority,\n      function () {\n        lastScheduledReplayQueue === formReplayingQueue &&\n          (lastScheduledReplayQueue = null);\n        for (var i = 0; i < formReplayingQueue.length; i += 3) {\n          var form = formReplayingQueue[i],\n            submitterOrAction = formReplayingQueue[i + 1],\n            formData = formReplayingQueue[i + 2];\n          if (\"function\" !== typeof submitterOrAction)\n            if (null === findInstanceBlockingTarget(submitterOrAction || form))\n              continue;\n            else break;\n          var formInst = getInstanceFromNode(form);\n          null !== formInst &&\n            (formReplayingQueue.splice(i, 3),\n            (i -= 3),\n            startHostTransition(\n              formInst,\n              {\n                pending: !0,\n                data: formData,\n                method: form.method,\n                action: submitterOrAction\n              },\n              submitterOrAction,\n              formData\n            ));\n        }\n      }\n    ));\n}\nfunction retryIfBlockedOn(unblocked) {\n  function unblock(queuedEvent) {\n    return scheduleCallbackIfUnblocked(queuedEvent, unblocked);\n  }\n  null !== queuedFocus && scheduleCallbackIfUnblocked(queuedFocus, unblocked);\n  null !== queuedDrag && scheduleCallbackIfUnblocked(queuedDrag, unblocked);\n  null !== queuedMouse && scheduleCallbackIfUnblocked(queuedMouse, unblocked);\n  queuedPointers.forEach(unblock);\n  queuedPointerCaptures.forEach(unblock);\n  for (var i = 0; i < queuedExplicitHydrationTargets.length; i++) {\n    var queuedTarget = queuedExplicitHydrationTargets[i];\n    queuedTarget.blockedOn === unblocked && (queuedTarget.blockedOn = null);\n  }\n  for (\n    ;\n    0 < queuedExplicitHydrationTargets.length &&\n    ((i = queuedExplicitHydrationTargets[0]), null === i.blockedOn);\n\n  )\n    attemptExplicitHydrationTarget(i),\n      null === i.blockedOn && queuedExplicitHydrationTargets.shift();\n  i = (unblocked.ownerDocument || unblocked).$$reactFormReplay;\n  if (null != i)\n    for (queuedTarget = 0; queuedTarget < i.length; queuedTarget += 3) {\n      var form = i[queuedTarget],\n        submitterOrAction = i[queuedTarget + 1],\n        formProps = form[internalPropsKey] || null;\n      if (\"function\" === typeof submitterOrAction)\n        formProps || scheduleReplayQueueIfNeeded(i);\n      else if (formProps) {\n        var action = null;\n        if (submitterOrAction && submitterOrAction.hasAttribute(\"formAction\"))\n          if (\n            ((form = submitterOrAction),\n            (formProps = submitterOrAction[internalPropsKey] || null))\n          )\n            action = formProps.formAction;\n          else {\n            if (null !== findInstanceBlockingTarget(form)) continue;\n          }\n        else action = formProps.action;\n        \"function\" === typeof action\n          ? (i[queuedTarget + 1] = action)\n          : (i.splice(queuedTarget, 3), (queuedTarget -= 3));\n        scheduleReplayQueueIfNeeded(i);\n      }\n    }\n}\nfunction defaultOnDefaultTransitionIndicator() {\n  function handleNavigate(event) {\n    event.canIntercept &&\n      \"react-transition\" === event.info &&\n      event.intercept({\n        handler: function () {\n          return new Promise(function (resolve) {\n            return (pendingResolve = resolve);\n          });\n        },\n        focusReset: \"manual\",\n        scroll: \"manual\"\n      });\n  }\n  function handleNavigateComplete() {\n    null !== pendingResolve && (pendingResolve(), (pendingResolve = null));\n    isCancelled || setTimeout(startFakeNavigation, 20);\n  }\n  function startFakeNavigation() {\n    if (!isCancelled && !navigation.transition) {\n      var currentEntry = navigation.currentEntry;\n      currentEntry &&\n        null != currentEntry.url &&\n        navigation.navigate(currentEntry.url, {\n          state: currentEntry.getState(),\n          info: \"react-transition\",\n          history: \"replace\"\n        });\n    }\n  }\n  if (\"object\" === typeof navigation) {\n    var isCancelled = !1,\n      pendingResolve = null;\n    navigation.addEventListener(\"navigate\", handleNavigate);\n    navigation.addEventListener(\"navigatesuccess\", handleNavigateComplete);\n    navigation.addEventListener(\"navigateerror\", handleNavigateComplete);\n    setTimeout(startFakeNavigation, 100);\n    return function () {\n      isCancelled = !0;\n      navigation.removeEventListener(\"navigate\", handleNavigate);\n      navigation.removeEventListener(\"navigatesuccess\", handleNavigateComplete);\n      navigation.removeEventListener(\"navigateerror\", handleNavigateComplete);\n      null !== pendingResolve && (pendingResolve(), (pendingResolve = null));\n    };\n  }\n}\nfunction ReactDOMRoot(internalRoot) {\n  this._internalRoot = internalRoot;\n}\nReactDOMHydrationRoot.prototype.render = ReactDOMRoot.prototype.render =\n  function (children) {\n    var root = this._internalRoot;\n    if (null === root) throw Error(formatProdErrorMessage(409));\n    var current = root.current,\n      lane = requestUpdateLane();\n    updateContainerImpl(current, lane, children, root, null, null);\n  };\nReactDOMHydrationRoot.prototype.unmount = ReactDOMRoot.prototype.unmount =\n  function () {\n    var root = this._internalRoot;\n    if (null !== root) {\n      this._internalRoot = null;\n      var container = root.containerInfo;\n      updateContainerImpl(root.current, 2, null, root, null, null);\n      flushSyncWork$1();\n      container[internalContainerInstanceKey] = null;\n    }\n  };\nfunction ReactDOMHydrationRoot(internalRoot) {\n  this._internalRoot = internalRoot;\n}\nReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) {\n  if (target) {\n    var updatePriority = resolveUpdatePriority();\n    target = { blockedOn: null, target: target, priority: updatePriority };\n    for (\n      var i = 0;\n      i < queuedExplicitHydrationTargets.length &&\n      0 !== updatePriority &&\n      updatePriority < queuedExplicitHydrationTargets[i].priority;\n      i++\n    );\n    queuedExplicitHydrationTargets.splice(i, 0, target);\n    0 === i && attemptExplicitHydrationTarget(target);\n  }\n};\nvar isomorphicReactPackageVersion$jscomp$inline_1840 = React.version;\nif (\n  \"19.2.5\" !==\n  isomorphicReactPackageVersion$jscomp$inline_1840\n)\n  throw Error(\n    formatProdErrorMessage(\n      527,\n      isomorphicReactPackageVersion$jscomp$inline_1840,\n      \"19.2.5\"\n    )\n  );\nReactDOMSharedInternals.findDOMNode = function (componentOrElement) {\n  var fiber = componentOrElement._reactInternals;\n  if (void 0 === fiber) {\n    if (\"function\" === typeof componentOrElement.render)\n      throw Error(formatProdErrorMessage(188));\n    componentOrElement = Object.keys(componentOrElement).join(\",\");\n    throw Error(formatProdErrorMessage(268, componentOrElement));\n  }\n  componentOrElement = findCurrentFiberUsingSlowPath(fiber);\n  componentOrElement =\n    null !== componentOrElement\n      ? findCurrentHostFiberImpl(componentOrElement)\n      : null;\n  componentOrElement =\n    null === componentOrElement ? null : componentOrElement.stateNode;\n  return componentOrElement;\n};\nvar internals$jscomp$inline_2347 = {\n  bundleType: 0,\n  version: \"19.2.5\",\n  rendererPackageName: \"react-dom\",\n  currentDispatcherRef: ReactSharedInternals,\n  reconcilerVersion: \"19.2.5\"\n};\nif (\"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) {\n  var hook$jscomp$inline_2348 = __REACT_DEVTOOLS_GLOBAL_HOOK__;\n  if (\n    !hook$jscomp$inline_2348.isDisabled &&\n    hook$jscomp$inline_2348.supportsFiber\n  )\n    try {\n      (rendererID = hook$jscomp$inline_2348.inject(\n        internals$jscomp$inline_2347\n      )),\n        (injectedHook = hook$jscomp$inline_2348);\n    } catch (err) {}\n}\nexports.createRoot = function (container, options) {\n  if (!isValidContainer(container)) throw Error(formatProdErrorMessage(299));\n  var isStrictMode = !1,\n    identifierPrefix = \"\",\n    onUncaughtError = defaultOnUncaughtError,\n    onCaughtError = defaultOnCaughtError,\n    onRecoverableError = defaultOnRecoverableError;\n  null !== options &&\n    void 0 !== options &&\n    (!0 === options.unstable_strictMode && (isStrictMode = !0),\n    void 0 !== options.identifierPrefix &&\n      (identifierPrefix = options.identifierPrefix),\n    void 0 !== options.onUncaughtError &&\n      (onUncaughtError = options.onUncaughtError),\n    void 0 !== options.onCaughtError && (onCaughtError = options.onCaughtError),\n    void 0 !== options.onRecoverableError &&\n      (onRecoverableError = options.onRecoverableError));\n  options = createFiberRoot(\n    container,\n    1,\n    !1,\n    null,\n    null,\n    isStrictMode,\n    identifierPrefix,\n    null,\n    onUncaughtError,\n    onCaughtError,\n    onRecoverableError,\n    defaultOnDefaultTransitionIndicator\n  );\n  container[internalContainerInstanceKey] = options.current;\n  listenToAllSupportedEvents(container);\n  return new ReactDOMRoot(options);\n};\nexports.hydrateRoot = function (container, initialChildren, options) {\n  if (!isValidContainer(container)) throw Error(formatProdErrorMessage(299));\n  var isStrictMode = !1,\n    identifierPrefix = \"\",\n    onUncaughtError = defaultOnUncaughtError,\n    onCaughtError = defaultOnCaughtError,\n    onRecoverableError = defaultOnRecoverableError,\n    formState = null;\n  null !== options &&\n    void 0 !== options &&\n    (!0 === options.unstable_strictMode && (isStrictMode = !0),\n    void 0 !== options.identifierPrefix &&\n      (identifierPrefix = options.identifierPrefix),\n    void 0 !== options.onUncaughtError &&\n      (onUncaughtError = options.onUncaughtError),\n    void 0 !== options.onCaughtError && (onCaughtError = options.onCaughtError),\n    void 0 !== options.onRecoverableError &&\n      (onRecoverableError = options.onRecoverableError),\n    void 0 !== options.formState && (formState = options.formState));\n  initialChildren = createFiberRoot(\n    container,\n    1,\n    !0,\n    initialChildren,\n    null != options ? options : null,\n    isStrictMode,\n    identifierPrefix,\n    formState,\n    onUncaughtError,\n    onCaughtError,\n    onRecoverableError,\n    defaultOnDefaultTransitionIndicator\n  );\n  initialChildren.context = getContextForSubtree(null);\n  options = initialChildren.current;\n  isStrictMode = requestUpdateLane();\n  isStrictMode = getBumpedLaneForHydrationByLane(isStrictMode);\n  identifierPrefix = createUpdate(isStrictMode);\n  identifierPrefix.callback = null;\n  enqueueUpdate(options, identifierPrefix, isStrictMode);\n  options = isStrictMode;\n  initialChildren.current.lanes = options;\n  markRootUpdated$1(initialChildren, options);\n  ensureRootIsScheduled(initialChildren);\n  container[internalContainerInstanceKey] = initialChildren.current;\n  listenToAllSupportedEvents(container);\n  return new ReactDOMHydrationRoot(initialChildren);\n};\nexports.version = \"19.2.5\";\n","'use strict';\n\nfunction checkDCE() {\n  /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n  if (\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n  ) {\n    return;\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    // This branch is unreachable because this function is only called\n    // in production, but the condition is true only in development.\n    // Therefore if the branch is still here, dead code elimination wasn't\n    // properly applied.\n    // Don't change the message. React DevTools relies on it. Also make sure\n    // this message doesn't occur elsewhere in this function, or it will cause\n    // a false positive.\n    throw new Error('^_^');\n  }\n  try {\n    // Verify that the code above has been dead code eliminated (DCE'd).\n    __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n  } catch (err) {\n    // DevTools shouldn't crash React, no matter what.\n    // We should still report in case we break this code.\n    console.error(err);\n  }\n}\n\nif (process.env.NODE_ENV === 'production') {\n  // DCE check should happen before ReactDOM bundle executes so that\n  // DevTools can report bad minification during injection.\n  checkDCE();\n  module.exports = require('./cjs/react-dom-client.production.js');\n} else {\n  module.exports = require('./cjs/react-dom-client.development.js');\n}\n","export function calculatePosition(data, options = {}) {\n    const { x = 0, y = 22, spacingVertical = 30, spacingHorizontal = 140, } = options;\n    calculateInnerBoxSize(data, {\n        x,\n        y,\n        spacingVertical,\n        spacingHorizontal,\n    });\n    calculatePositionSS(data, {\n        x,\n        y,\n        spacingVertical,\n        spacingHorizontal,\n    });\n}\nfunction calculateInnerBoxSize(data, options) {\n    for (const datum of data) {\n        if (datum.children) {\n            calculateInnerBoxSize(datum.children, options);\n            datum.childrenBoxSize = {\n                width: datum.position.width +\n                    options.spacingHorizontal +\n                    Math.max(...datum.children.map((d) => d.childrenBoxSize.width)),\n                height: Math.max(datum.position.height, options.spacingVertical * (datum.children.length - 1) +\n                    datum.children\n                        .map((d) => d.childrenBoxSize.height)\n                        .reduce((a, b) => a + b, 0)),\n            };\n        }\n        else {\n            datum.childrenBoxSize = {\n                width: datum.position.width,\n                height: datum.position.height,\n            };\n        }\n    }\n}\nfunction calculatePositionSS(data, options) {\n    let y = options.y;\n    for (const datum of data) {\n        if (datum.children) {\n            calculatePositionSS(datum.children, {\n                ...options,\n                x: options.x + datum.position.width + options.spacingHorizontal,\n                y,\n            });\n        }\n        datum.position.x = options.x;\n        datum.position.y =\n            datum.childrenBoxSize.height / 2 - datum.position.height / 2 + y;\n        y += datum.childrenBoxSize.height + options.spacingVertical;\n        datum.anchor = {\n            left: {\n                x: datum.position.x,\n                y: datum.position.y + datum.position.height / 2,\n            },\n            right: {\n                x: datum.position.x + datum.position.width,\n                y: datum.position.y + datum.position.height / 2,\n            },\n        };\n        datum.childrenBoxSize.height =\n            datum.childrenBoxSize.height + options.spacingVertical;\n    }\n}\n//# sourceMappingURL=calculatePosition.js.map","import { jsx as _jsx, Fragment as _Fragment } from \"react/jsx-runtime\";\nexport function MultilineText(props) {\n    const { label, verticalPosition } = props;\n    if (!label)\n        return;\n    const lines = label.split(/\\r?\\n/);\n    const firstDX = verticalPosition === 'top'\n        ? 1\n        : verticalPosition === 'center'\n            ? -lines.length / 2 + 0.5\n            : -lines.length;\n    return (_jsx(_Fragment, { children: lines.map((line, index) => (_jsx(\"tspan\", { x: \"0\", dy: index === 0 ? `${firstDX}em` : '1em', children: line }, index))) }));\n}\n//# sourceMappingURL=MultilineText.js.map","import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { MultilineText } from './MultilineText';\nexport function Text(props) {\n    const { x, y, label, verticalPosition, horizontalPosition } = props;\n    const transform = `translate(${x},${y})`;\n    let textAnchor;\n    switch (horizontalPosition) {\n        case 'left':\n            textAnchor = 'start';\n            break;\n        case 'center':\n            textAnchor = 'middle';\n            break;\n        case 'right':\n            textAnchor = 'end';\n            break;\n        default:\n            textAnchor = 'middle';\n    }\n    return (_jsxs(_Fragment, { children: [_jsx(\"text\", { textAnchor: textAnchor, transform: transform, stroke: \"rgba(255,255,255,0.5)\", strokeWidth: \"0.5em\", fill: \"none\", fontSize: \"14\", children: _jsx(MultilineText, { label: label, verticalPosition: verticalPosition }) }), _jsx(\"text\", { textAnchor: textAnchor, transform: transform, stroke: \"none\", fontSize: \"14\", fill: \"black\", children: _jsx(MultilineText, { label: label, verticalPosition: verticalPosition }) })] }));\n}\n//# sourceMappingURL=Text.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { refX } from './MarkerDef.utils';\nimport { Text } from './Text';\n/**\n * Creates a simple arrow between 2 points. The arrow has one inflection point, which is the middle of the line.\n * The SVG must define a marker with id=\"arrowhead\" for this to work.\n * @param props\n * @returns\n */\nexport function Arrow(props) {\n    const { id, from, to, label, horizontalPosition = 'center', verticalPosition = 'center', } = props;\n    const middle = { x: (from.x + to.x) / 2, y: (from.y + to.y) / 2 };\n    const headInflectionPoint = {\n        x: to.x - refX * 2, // refX attribute of the marker element in the Arrow component shifts the arrow head to the left, and that the vertices of the arrow head are set to refX, which means that the beginning of the arrow head is refX * 2 to the left.\n        y: to.y,\n    };\n    const d = `M ${from.x} ${from.y} C ${middle.x} ${from.y}  ${middle.x} ${to.y}  ${headInflectionPoint.x} ${to.y} Q ${headInflectionPoint.x} ${to.y}  ${to.x} ${to.y} `;\n    return (_jsxs(\"g\", { id: id, children: [_jsx(\"path\", { d: d, style: {\n                    fill: 'none',\n                    strokeWidth: '2',\n                    stroke: 'black',\n                    markerEnd: 'url(#arrowhead)',\n                } }), horizontalPosition === 'center' && (_jsx(Text, { x: middle.x, y: middle.y, label: label, horizontalPosition: horizontalPosition, verticalPosition: verticalPosition })), horizontalPosition === 'right' && (_jsx(Text, { x: to.x - 12, y: to.y - 8, label: label, horizontalPosition: \"right\", verticalPosition: verticalPosition })), horizontalPosition === 'left' && (_jsx(Text, { x: from.x + 12, y: from.y + 8, label: label, horizontalPosition: \"left\", verticalPosition: verticalPosition }))] }));\n}\n//# sourceMappingURL=Arrow.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Arrow } from '../components/Arrow';\nexport function getArrows(nodes, options = {}) {\n    const status = { level: 0 };\n    const arrows = [];\n    getArrowsSS(nodes, arrows, status, options);\n    return arrows;\n}\nfunction getArrowsSS(nodes, arrows, status, options = {}) {\n    const { getLabel, horizontalPosition, getID, verticalPosition } = options;\n    for (const node of nodes) {\n        if (node.children) {\n            for (const child of node.children) {\n                arrows.push(_jsx(Arrow, { id: getID ? getID(node) : undefined, from: node.anchor.right, to: child.anchor.left, label: getLabel?.(child), horizontalPosition: horizontalPosition, verticalPosition: verticalPosition }, arrows.length));\n            }\n            getArrowsSS(node.children, arrows, {\n                ...status,\n                level: status.level + 1,\n            }, options);\n        }\n    }\n}\n//# sourceMappingURL=getArrows.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nexport function getBoxes(nodes, options) {\n    const boxes = [];\n    appendBoxes(nodes, boxes, options);\n    return boxes;\n}\nfunction appendBoxes(nodes, boxes, options = {}) {\n    const { getID } = options;\n    for (const node of nodes) {\n        boxes.push(_jsx(\"g\", { id: getID ? getID(node) : undefined, transform: `translate(${node.position.x} ${node.position.y})`, children: node.element }, boxes.length));\n        if (node.children) {\n            appendBoxes(node.children, boxes, options);\n        }\n    }\n}\n//# sourceMappingURL=getBoxes.js.map","/**\n * Will calculate the SVG of all the node\n * @param data\n */\nexport function prepareTree(data, options) {\n    data = structuredClone(data);\n    prepareTreeSS(data, options);\n    return data;\n}\nfunction prepareTreeSS(data, options) {\n    const { nodeRenderer, nodeRendererOptions = {}, shouldSkipBranch } = options;\n    for (const datum of data) {\n        if (options.parent) {\n            datum.parent = options.parent;\n        }\n        const elementAndSize = nodeRenderer(datum, nodeRendererOptions);\n        datum.position = {\n            x: 0,\n            y: 0,\n            width: elementAndSize.width,\n            height: elementAndSize.height,\n        };\n        datum.element = elementAndSize.element;\n        if (datum.children && datum.children.length === 0) {\n            delete datum.children;\n        }\n        if (datum.children) {\n            if (shouldSkipBranch) {\n                const parents = [datum];\n                let parent = datum.parent;\n                while (parent) {\n                    parents.push(parent);\n                    parent = parent.parent;\n                }\n                datum.children = datum.children.filter((child) => !shouldSkipBranch(child, parents));\n            }\n            prepareTreeSS(datum.children, {\n                ...options,\n                parent: datum,\n            });\n        }\n    }\n}\n//# sourceMappingURL=prepareTree.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { refX } from './MarkerDef.utils';\nexport function MarkerDef() {\n    return (_jsx(\"defs\", { children: _jsx(\"marker\", { id: \"arrowhead\", markerWidth: \"10\", markerHeight: \"7\", refX: refX, refY: \"3.5\", orient: \"auto\", children: _jsx(\"polygon\", { points: \"0 0, 10 3.5, 0 7\" }) }) }));\n}\n//# sourceMappingURL=MarkerDef.js.map","export const refX = 10;\n//# sourceMappingURL=MarkerDef.utils.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { calculatePosition } from '../data/calculatePosition';\nimport { getArrows } from '../data/getArrows';\nimport { getBoxes } from '../data/getBoxes';\nimport { prepareTree } from '../data/prepareTree';\nimport { MarkerDef } from './MarkerDef';\nexport function SVGBoxesTree(props) {\n    const { tree, ...options } = props;\n    const { arrowRendererOptions, nodeRendererOptions, positionOptions } = options;\n    const data = prepareTree(tree, options);\n    calculatePosition(data, positionOptions);\n    const boxes = getBoxes(data, nodeRendererOptions);\n    const arrows = getArrows(data, arrowRendererOptions);\n    const svgSize = {\n        width: 0,\n        height: 0,\n    };\n    const width = [];\n    for (const datum of data) {\n        width.push(datum.childrenBoxSize.width);\n        svgSize.height += datum.childrenBoxSize.height;\n    }\n    svgSize.width = Math.max(...width);\n    return (_jsxs(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", viewBox: `0 0 ${svgSize.width} ${svgSize.height}`, children: [_jsx(MarkerDef, {}), boxes, arrows] }));\n}\n//# sourceMappingURL=SVGBoxesTree.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nexport function Rectangle(props) {\n    return _jsx(\"rect\", { ...props });\n}\n//# sourceMappingURL=Rectangle.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nexport function SVG(props) {\n    if (!props.svg)\n        return null;\n    return (_jsx(\"g\", { dangerouslySetInnerHTML: {\n            __html: props.svg,\n        } }));\n}\n//# sourceMappingURL=SVG.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Rectangle } from '../components/Rectangle';\nimport { SVG } from '../components/SVG';\nexport function moleculeRenderer(node, nodeRendererOptions) {\n    const molecules = getMolecules(node, nodeRendererOptions);\n    const topLabel = getTopLabel(node, nodeRendererOptions);\n    const width = Math.max(molecules.width, topLabel.width);\n    const height = Math.max(molecules.height, topLabel.height);\n    return {\n        width,\n        height,\n        element: (_jsxs(\"g\", { children: [_jsx(Rectangle, { width: width, height: height, style: {\n                        ...{ stroke: 'black', fill: 'white' },\n                        ...(node.style || {}),\n                        ...(nodeRendererOptions.getBoxStyle?.(node) || {}),\n                    } }), molecules.element, topLabel.element] })),\n    };\n}\nfunction getTopLabel(node, options = {}) {\n    const label = options.getTopLabel?.(node) || node.label;\n    if (!label) {\n        return {\n            width: 0,\n            height: 0,\n            element: null,\n        };\n    }\n    return {\n        width: 200,\n        height: 20,\n        element: (_jsx(\"text\", { x: 0, y: -6, textAnchor: \"left\", stroke: \"none\", fontSize: \"14\", fill: \"black\", children: label })),\n    };\n}\n/**\n * This code is designed to also allow reactions for which we have many molecules\n * @param node\n * @param options\n * @returns\n */\nfunction getMolecules(node, options) {\n    const { maxWidth = 200, maxHeight = 150, getMolecules, getMoleculeStyle, } = options;\n    if (!getMolecules) {\n        throw new Error('getMolecules is not defined');\n    }\n    const molecules = getMolecules(node);\n    if (!molecules) {\n        return {\n            width: 0,\n            height: 0,\n            element: undefined,\n        };\n    }\n    const svgs = molecules\n        .filter((molecule) => molecule)\n        .map((molecule, index) => {\n        const svg = molecule.toSVG(maxWidth, maxHeight, undefined, {\n            autoCrop: true,\n            autoCropMargin: 10,\n            suppressChiralText: true,\n        });\n        if (getMoleculeStyle) {\n            return addStyleToSVG(svg, getMoleculeStyle(molecule, node, index));\n        }\n        return svg;\n    });\n    const { svg, width, height } = joinSVGs(svgs);\n    return {\n        width,\n        height,\n        element: _jsx(SVG, { svg: svg }),\n    };\n}\nfunction getPlus(options = {}) {\n    const { size = 11, padding = 5, strokeWidth = 2 } = options;\n    const x1 = padding + size / 2;\n    const y1 = padding;\n    const x2 = padding + size / 2;\n    const y2 = padding + size;\n    return {\n        svg: `<line x1=\"${x1}\" y1=\"${y1}\" x2=\"${x2}\" y2=\"${y2}\" stroke=\"rgb(0,0,0)\" stroke-width=\"${strokeWidth}\"></line>` +\n            `<line x1=\"${y1}\" y1=\"${x1}\" x2=\"${y2}\" y2=\"${x2}\" stroke=\"rgb(0,0,0)\" stroke-width=\"${strokeWidth}\"></line>`,\n        width: size + padding * 2,\n        height: size + padding * 2,\n    };\n}\nfunction joinSVGs(svgs) {\n    const results = [];\n    let maxHeight = 0;\n    for (const svg of svgs) {\n        const size = getSVGViewBox(svg);\n        if (results.length) {\n            results.push(getPlus());\n        }\n        results.push({ svg, width: size.width, height: size.height });\n        maxHeight = Math.max(maxHeight, size.height);\n    }\n    let currentWidth = 0;\n    for (const result of results) {\n        const shiftX = currentWidth;\n        const shiftY = (maxHeight - result.height) / 2;\n        result.shiftedSVG = `<g transform=\"translate(${shiftX},${shiftY})\">${result.svg}</g>`;\n        currentWidth += result.width;\n    }\n    return {\n        width: currentWidth,\n        height: maxHeight,\n        svg: results.map((result) => result.shiftedSVG).join('\\n'),\n    };\n}\nfunction getSVGViewBox(svg) {\n    const match = svg.match(/.*viewBox=\"(?<minX>-?\\d+) (?<minY>-?\\d+) (?<width>\\d+) (?<height>\\d+)\".*/);\n    if (!match?.groups) {\n        throw new Error('ViewBox not found');\n    }\n    // convert to numbers and return the object\n    return {\n        minX: Number(match.groups.minX),\n        minY: Number(match.groups.minY),\n        width: Number(match.groups.width),\n        height: Number(match.groups.height),\n    };\n}\nfunction styleObjectToString(style) {\n    const styleArray = [];\n    for (const property in style) {\n        if (Object.hasOwn(style, property)) {\n            const kebabCaseProperty = property\n                .replace(/([A-Z])/g, '-$1')\n                .toLowerCase();\n            styleArray.push(`${kebabCaseProperty}: ${style[property]}`);\n        }\n    }\n    return styleArray.join('; ');\n}\nfunction addStyleToSVG(svg, style) {\n    if (!style)\n        return svg;\n    const size = getSVGViewBox(svg);\n    const match = svg.match(/<svg.*>/);\n    if (!match) {\n        throw new Error('SVG tag not found');\n    }\n    const svgTag = match[0];\n    const styleString = styleObjectToString(style);\n    const styleRectange = `<rect x=\"${size.minX}\" y=\"${size.minY}\" width=\"${size.width}\" height=\"${size.height}\" style=\"${styleString}\"></rect>`;\n    return svg.replace(svgTag, `${svgTag}${styleRectange}`);\n}\n//# sourceMappingURL=moleculeRenderer.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { flushSync } from 'react-dom';\nimport { createRoot } from 'react-dom/client';\nimport { SVGBoxesTree } from './components/SVGBoxesTree';\nexport function render(tree, options) {\n    const element = _jsx(SVGBoxesTree, { tree: tree, ...options });\n    const div = document.createElement('div');\n    const root = createRoot(div);\n    flushSync(() => {\n        root.render(element);\n    });\n    return div.innerHTML;\n}\n//# sourceMappingURL=render.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Rectangle } from '../components/Rectangle';\nexport function taxonomyRenderer(node) {\n    const minSize = { width: 120, height: 20 };\n    const taxonomy = getTaxonomy(node, minSize);\n    const label = getLabel(node, minSize);\n    const width = Math.max(taxonomy.width, label.width);\n    const height = Math.max(taxonomy.height, label.height);\n    const nbTaxonomies = getNbTaxonomies(node, width, minSize);\n    return {\n        width,\n        height,\n        element: (_jsxs(\"g\", { children: [_jsx(Rectangle, { width: width, height: height, style: {\n                        ...{ stroke: 'black', fill: 'white' },\n                        ...(node.style || {}),\n                    } }), label.element, taxonomy.element, nbTaxonomies.element] })),\n    };\n}\nfunction getNbTaxonomies(node, width, minSize) {\n    return {\n        width: minSize.width,\n        height: minSize.height,\n        element: (_jsx(\"text\", { x: width, y: -5, textAnchor: \"end\", stroke: \"none\", fontSize: \"14\", fill: \"#00008B\" // dark blue\n            , fontStyle: 'bold', fontFamily: \"Arial, Helvetica, sans-serif\", children: node.nbTaxonomies })),\n    };\n}\nfunction getLabel(node, minSize, options = {}) {\n    const { spacingHorizontal } = {\n        spacingHorizontal: 8,\n        ...options,\n    };\n    if (node.rank === '') {\n        return {\n            width: 0,\n            height: 0,\n            element: null,\n        };\n    }\n    return {\n        width: minSize.width,\n        height: minSize.height,\n        element: (_jsx(\"text\", { x: spacingHorizontal / 2, y: -6, textAnchor: \"start\", stroke: \"none\", fontSize: \"14\", fill: \"grey\", fontStyle: 'italic', fontFamily: \"Arial, Helvetica, sans-serif\", children: node.rank })),\n    };\n}\nfunction getTaxonomy(node, minSize, options = {}) {\n    const { font, fontSize, spacingHorizontal } = {\n        font: 'Arial, Helvetica, sans-serif',\n        fontSize: 16,\n        spacingHorizontal: 8,\n        ...options,\n    };\n    if (node.name === '') {\n        return {\n            width: 0,\n            height: 0,\n            element: null,\n        };\n    }\n    let { width, height } = getStringSize(node.name, {\n        font,\n        fontSize,\n        spacingHorizontal,\n    });\n    const textWith = width;\n    let positionX = spacingHorizontal / 2;\n    if (height <= minSize.height) {\n        height = minSize.height;\n    }\n    if (width <= minSize.width) {\n        width = minSize.width;\n        positionX = (width - textWith + spacingHorizontal) / 2;\n    }\n    return {\n        width,\n        height,\n        element: (_jsx(\"g\", { height: height, width: width, dominantBaseline: \"central\", children: _jsx(\"text\", { x: positionX, y: height / 2, stroke: \"none\", fontSize: fontSize, fill: \"black\", ...(node.url ? { 'data-url': node.url } : {}), fontFamily: font, children: node.name }) })),\n    };\n}\nfunction getStringSize(text, options) {\n    const { font = 'Arial, Helvetica, sans-serif', fontSize = 16, spacingHorizontal = 8, } = options;\n    const tempElement = document.createElement('span');\n    tempElement.style.font = `${fontSize}px ${font}`;\n    tempElement.style.visibility = 'hidden';\n    tempElement.style.position = 'absolute';\n    tempElement.style.top = '-9999px';\n    tempElement.style.left = '-9999px';\n    tempElement.textContent = text;\n    document.body.appendChild(tempElement);\n    const { height, width } = tempElement.getBoundingClientRect();\n    document.body.removeChild(tempElement);\n    return { width: width + spacingHorizontal, height };\n}\n//# sourceMappingURL=taxonomyRenderer.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getFragmentationSVG = getFragmentationSVG;\nconst react_tree_svg_1 = require(\"react-tree-svg\");\n/**\n * @typedef {object} MassPeak\n * @property {number} mass\n * @property {number} intensity\n */\n/**\n * @param {object[]} trees\n * @param {object} [options={}]\n * @param {object} [options.OCL]\n * @param {number} [options.accuracy]\n * @param {MassPeak[]} [options.peaks]\n * @returns\n */\nfunction getFragmentationSVG(trees, options = {}) {\n    const { OCL, accuracy, peaks = [] } = options;\n    const maxIntensity = peaks?.length > 0\n        ? Math.log(Math.max(...peaks.map((peak) => peak.intensity)) + 1)\n        : 0;\n    const rendererOptions = {\n        nodeRenderer: react_tree_svg_1.moleculeRenderer,\n        arrowRendererOptions: {\n            getLabel: (node) => {\n                return node?.reaction?.label;\n            },\n            labelPosition: 'center',\n        },\n        nodeRendererOptions: {\n            getTopLabel: (node) => {\n                const mz = node?.molecules[0]?.info?.mz;\n                if (mz === undefined)\n                    return;\n                return `${mz.toFixed(4)} m/z`;\n            },\n            getBoxStyle: (node) => {\n                for (const molecule of node.molecules) {\n                    const peak = getPeakInRange(peaks, molecule?.info?.mz, accuracy);\n                    if (peak) {\n                        return {\n                            fillOpacity: maxIntensity\n                                ? (0.2 * Math.log(peak.intensity + 1)) / maxIntensity\n                                : 0.2,\n                            fill: 'red',\n                        };\n                    }\n                }\n            },\n            getMolecules: (node) => {\n                return node.molecules.map((molecule) => OCL.Molecule.fromIDCode(molecule.idCode));\n            },\n        },\n        positionOptions: {\n            spacingHorizontal: 150,\n        },\n    };\n    return (0, react_tree_svg_1.render)(trees, rendererOptions);\n}\nfunction getPeakInRange(peaks, mass, accuracy) {\n    if (!mass || !Array.isArray(peaks)) {\n        return undefined;\n    }\n    const massAccuracy = (accuracy * mass) / 1e6;\n    for (const peak of peaks) {\n        if (Math.abs(peak.mass - mass) <= massAccuracy) {\n            return peak;\n        }\n    }\n    return undefined;\n}\n//# sourceMappingURL=getFragmentationSVG.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fromMolecules = fromMolecules;\nconst mass_fragmentation_1 = require(\"mass-fragmentation\");\nconst mf_matcher_1 = require(\"mf-matcher\");\nconst mf_parser_1 = require(\"mf-parser\");\nconst mf_utilities_1 = require(\"mf-utilities\");\n/** * Generates a database 'monoisotopic' from a monoisotopic mass and various options\n * @param {{smiles?:string,molecule?:string,idCode?:string}[]}    entries - Array of object containing a property to recreate the molecule\n * @param {typeof import('openchemlib')} OCL - The OCL library\n * @param {object}    [options={}]\n * @param {function}  [options.onStep] - Callback to do after each step\n * @param {boolean}   [options.allowNeutral=true]\n * @param {string}    [options.ionizations=''] - string containing a comma separated list of modifications\n * @param {number}    [options.precision=100] - Allowed mass range based on precision\n * @param {boolean}   [options.groupResults=false] - Should we group the results if they have the same monoisotopic mass and experimental mass\n * @param {object}    [options.fragmentation={}]\n * @param {object}    [options.fragmentation.acyclic=false]\n * @param {object}    [options.fragmentation.cyclic=false]\n * @param {object}    [options.fragmentation.full=true]\n * @param {import('mf-matcher').MSEMFilterOptions}        [options.filter={}]\n * @returns {Promise}\n */\nasync function fromMolecules(entries, OCL, options = {}) {\n    let { onStep, ionizations, filter, fragmentation = { acyclic: false, cyclic: false, full: true }, groupResults = false, } = options;\n    ionizations = (0, mf_utilities_1.preprocessIonizations)(ionizations);\n    let results = [];\n    for (let i = 0; i < entries.length; i++) {\n        const entry = entries[i];\n        const molecule = getMolecule(entry, OCL);\n        if (!molecule)\n            continue;\n        const { acyclic = false, cyclic = false, full = true } = fragmentation;\n        const allFragments = (0, mass_fragmentation_1.fragment)(molecule, {\n            acyclic,\n            cyclic,\n            full,\n        });\n        for (const oneFragment of allFragments) {\n            appendResults(results, oneFragment, {\n                entry,\n                ionizations,\n                filter,\n            });\n            if (onStep)\n                onStep(i);\n        }\n    }\n    if (groupResults) {\n        results = groupFragmentationResults(results);\n    }\n    return results.toSorted((a, b) => a.em - b.em);\n}\n/**\n * We could group the results and replace the property 'fragment' by 'fragments'\n * @param {*} results\n */\nfunction groupFragmentationResults(results) {\n    const sortedResults = results.slice().toSorted((a, b) => {\n        if (a.em !== b.em) {\n            return a.em - b.em;\n        }\n        if (a.ms.em !== b.ms.em) {\n            return a.ms.em - b.ms.em;\n        }\n        if (a.fragment.idCode < b.fragment.idCode)\n            return -1;\n        return 1;\n    });\n    const groupedResults = [];\n    let currentResult = {};\n    for (let result of sortedResults) {\n        if (result.em !== currentResult.em ||\n            result.ms.em !== currentResult.ms.em) {\n            currentResult = {\n                ...result,\n                fragments: [\n                    {\n                        idCode: result.fragment.idCode,\n                        type: result.fragment.type,\n                        count: 1,\n                        parents: [{ ...result.fragment.parent, count: 1 }],\n                    },\n                ],\n            };\n            delete currentResult.fragment;\n            groupedResults.push(currentResult);\n        }\n        else {\n            const lastFragment = currentResult.fragments.at(-1);\n            if (lastFragment.idCode === result.fragment.idCode) {\n                lastFragment.count++;\n                if (lastFragment.parents.at(-1).idCode === result.fragment.parent.idCode) {\n                    lastFragment.parents.at(-1).count++;\n                }\n                else {\n                    lastFragment.parents.push({ ...result.fragment.parent, count: 1 });\n                }\n            }\n            else {\n                currentResult.fragments.push({\n                    idCode: result.fragment.idCode,\n                    type: result.fragment.type,\n                    count: 1,\n                    parents: [{ ...result.fragment.parent, count: 1 }],\n                });\n            }\n        }\n    }\n    for (let group of groupedResults) {\n        group.fragments = group.fragments.toSorted((a, b) => b.count - a.count);\n    }\n    return groupedResults;\n}\n/**\n *\n * @param {object} entry\n * @param {typeof import('openchemlib')} OCL - The OCL library\n */\nfunction getMolecule(entry, OCL) {\n    if (entry.idCode) {\n        return OCL.Molecule.fromIDCode(entry.idCode);\n    }\n    if (entry.ocl && entry.ocl.idCode) {\n        return OCL.Molecule.fromIDCode(entry.ocl.idCode);\n    }\n    if (entry.smiles) {\n        return OCL.Molecule.fromSmiles(entry.smiles);\n    }\n    if (entry.molfile) {\n        return OCL.Molecule.fromMolfile(entry.molfile);\n    }\n    return undefined;\n}\nfunction appendResults(results, oneFragment, options) {\n    const mf = oneFragment.mfInfo.mf;\n    const { ionizations, filter, entry } = options;\n    const mfInfo = new mf_parser_1.MF(mf).getInfo();\n    for (let ionization of ionizations) {\n        const result = {\n            charge: mfInfo.charge,\n            em: mfInfo.monoisotopicMass,\n            mw: mfInfo.mass,\n            mf: mfInfo.mf,\n            ionization,\n            unsaturation: mfInfo.unsaturation,\n            atoms: mfInfo.atoms,\n            fragment: {\n                parent: {\n                    ...entry,\n                    idCode: oneFragment.parentIDCode,\n                },\n                idCode: oneFragment.idCode,\n                type: oneFragment.fragmentType,\n            },\n        };\n        let match = (0, mf_matcher_1.msemMatcher)(result, filter);\n        if (!match)\n            continue;\n        result.ms = match.ms;\n        result.ionization = match.ionization;\n        results.push(result);\n    }\n}\n//# sourceMappingURL=fromMolecules.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.sequenceToMF = sequenceToMF;\nconst chemical_groups_1 = require(\"chemical-groups\");\nconst mf_utilities_1 = require(\"mf-utilities\");\n/**\n * Convert a nucleic sequence to a MF\n * @param {String} sequence\n * @param {object} [options={}]\n * @param {string} [options.kind] - rna, ds-dna or dna. Default if contains U: rna, otherwise ds-dna\n * @param {string} [options.fivePrime=monophosphate] - alcohol, monophosphate, diphosphate, triphosphate\n * @param {string} [options.circular=false]\n */\nfunction sequenceToMF(sequence, options = {}) {\n    let fivePrimeTerminal = 'HO';\n    let threePrimeTerminal = 'H';\n    sequence = sequence.replace(/^HO/, '');\n    sequence = sequence.replace(/H$/, '');\n    sequence = sequence.trim();\n    if (sequence === '')\n        return '';\n    sequence = (0, mf_utilities_1.ensureUppercaseSequence)(sequence);\n    // if the sequence is in lowercase but the parenthesis we should convert it to uppercase\n    if (sequence.match(/^[a-z]+$/)) {\n        sequence = sequence.toUpperCase();\n    }\n    let { kind, circular, fivePrime = 'monophosphate' } = options;\n    fivePrime = fivePrime.replaceAll(/[^A-Za-z]/g, '').toLowerCase();\n    if (!kind) {\n        if (sequence.includes('U')) {\n            kind = 'rna';\n        }\n        else {\n            kind = 'ds-dna';\n        }\n    }\n    kind = kind.replaceAll(/[^A-Za-z]/g, '').toLowerCase();\n    if (sequence.includes('(') && kind === 'dsdna') {\n        throw new Error('Nucleotide sequenceToMF: modifications not allowed for ds-DNA');\n    }\n    let results = [[]];\n    if (kind === 'dsdna')\n        results.push([]);\n    let parenthesisCounter = 0;\n    for (let i = 0; i < sequence.length; i++) {\n        let currentSymbol = sequence[i];\n        while (sequence[i + 1] && sequence[i + 1].match(/[a-z]/)) {\n            i++;\n            currentSymbol += sequence[i];\n        }\n        if (currentSymbol.length > 1) {\n            results[0].push(currentSymbol);\n            continue;\n        }\n        if (currentSymbol === '(' ||\n            currentSymbol === ')' ||\n            parenthesisCounter > 0) {\n            if (currentSymbol === '(') {\n                parenthesisCounter++;\n                if (i === 0)\n                    fivePrimeTerminal = '';\n            }\n            if (currentSymbol === ')') {\n                parenthesisCounter--;\n                if (i === sequence.length - 1)\n                    threePrimeTerminal = '';\n            }\n            switch (kind) {\n                case 'dna':\n                case 'rna':\n                    results[0].push(currentSymbol);\n                    break;\n                default:\n                    // eslint-disable-next-line no-console\n                    console.warn(`Nucleotide sequenceToMF with modification: unknown kind: ${kind}`);\n            }\n            continue;\n        }\n        let nucleotideType = i === 0 ? fivePrime : 'monophosphate';\n        currentSymbol = currentSymbol.replace(/[\\t\\n\\r ]/, '');\n        if (!currentSymbol)\n            continue;\n        switch (kind) {\n            case 'dna':\n                results[0].push(desoxyNucleotides[nucleotideType][currentSymbol]);\n                break;\n            case 'rna':\n                results[0].push(oxyNucleotides[nucleotideType][currentSymbol]);\n                break;\n            case 'dsdna':\n                results[0].push(desoxyNucleotides[nucleotideType][currentSymbol]);\n                results[1].unshift(desoxyNucleotides[nucleotideType][complementary[currentSymbol]]);\n                break;\n            default:\n                // eslint-disable-next-line no-console\n                console.warn(`Nucleotide sequenceToMF: unknown kind: ${kind}`);\n        }\n    }\n    if (!circular) {\n        for (const result of results)\n            result.unshift(fivePrimeTerminal);\n        for (const result of results)\n            result.push(threePrimeTerminal);\n    }\n    return results.map((result) => result.join('')).join('.');\n}\nconst complementary = {\n    A: 'T',\n    T: 'A',\n    C: 'G',\n    G: 'C',\n};\nconst desoxyNucleotides = {\n    alcohol: {},\n    monophosphate: {},\n    diphosphate: {},\n    triphosphate: {},\n};\nfor (const group of chemical_groups_1.groups.filter(({ kind }) => kind === 'DNA')) {\n    if (group.oneLetter) {\n        desoxyNucleotides.alcohol[group.oneLetter] = group.symbol;\n    }\n}\nfor (const group of chemical_groups_1.groups.filter(({ kind }) => kind === 'DNAp')) {\n    if (group.oneLetter) {\n        desoxyNucleotides.monophosphate[group.oneLetter] = group.symbol;\n    }\n}\nfor (const group of chemical_groups_1.groups.filter(({ kind }) => kind === 'NucleotideP')) {\n    if (group.oneLetter) {\n        desoxyNucleotides.monophosphate[group.oneLetter] = group.symbol;\n    }\n}\nfor (const group of chemical_groups_1.groups.filter(({ kind }) => kind === 'DNApp')) {\n    if (group.oneLetter) {\n        desoxyNucleotides.diphosphate[group.oneLetter] = group.symbol;\n    }\n}\nfor (const group of chemical_groups_1.groups.filter(({ kind }) => kind === 'DNAppp')) {\n    if (group.oneLetter) {\n        desoxyNucleotides.triphosphate[group.oneLetter] = group.symbol;\n    }\n}\nconst oxyNucleotides = {\n    alcohol: {},\n    monophosphate: {},\n    diphosphate: {},\n    triphosphate: {},\n};\nfor (const group of chemical_groups_1.groups.filter(({ kind }) => kind === 'RNA')) {\n    if (group.oneLetter) {\n        oxyNucleotides.alcohol[group.oneLetter] = group.symbol;\n    }\n}\nfor (const group of chemical_groups_1.groups.filter(({ kind }) => kind === 'RNAp')) {\n    if (group.oneLetter) {\n        oxyNucleotides.monophosphate[group.oneLetter] = group.symbol;\n    }\n}\nfor (const group of chemical_groups_1.groups.filter(({ kind }) => kind === 'NucleotideP')) {\n    if (group.oneLetter) {\n        oxyNucleotides.monophosphate[group.oneLetter] = group.symbol;\n    }\n}\nfor (const group of chemical_groups_1.groups.filter(({ kind }) => kind === 'RNApp')) {\n    if (group.oneLetter) {\n        oxyNucleotides.diphosphate[group.oneLetter] = group.symbol;\n    }\n}\nfor (const group of chemical_groups_1.groups.filter(({ kind }) => kind === 'RNAppp')) {\n    if (group.oneLetter) {\n        oxyNucleotides.triphosphate[group.oneLetter] = group.symbol;\n    }\n}\n//# sourceMappingURL=sequenceToMF.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.furanThreeTerm = furanThreeTerm;\nfunction furanThreeTerm(nucleotide) {\n    // last residue should become a furan\n    let parts = nucleotide\n        .replaceAll(' ', '')\n        .replaceAll(/([\\d)a-z])([A-Z][a-z](?=[a-z]))/g, '$1 $2')\n        .split(/ /);\n    let last = parts.pop();\n    if (!last.match(/D[acgt]mp(.*)$/)) {\n        // eslint-disable-next-line no-console\n        console.warn(`furanThreeTerm can not remove a non monophosphate nucleic acid: ${last}`);\n        return parts.join('') + last;\n    }\n    return parts.join('') + last.replace(/D[acgt]mp(.*)$/, 'Furp');\n}\n//# sourceMappingURL=furanThreeTerm.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.addFiveTerm = addFiveTerm;\nconst furanThreeTerm_js_1 = require(\"./furanThreeTerm.js\");\nfunction addFiveTerm(mfs, fiveTerm, i, options) {\n    if (options.a)\n        mfs.push(`${fiveTerm}O-1H-1$a${i}`); // neutral ok\n    if (options.ab && i > 1)\n        mfs.push(`${(0, furanThreeTerm_js_1.furanThreeTerm)(fiveTerm)}$a${i}-B`); // A minus base\n    if (options.b)\n        mfs.push(`${fiveTerm}H$b${i}`); // need to add an hydrogen, see: https://books.google.ch/books?id=B57e37bJjqAC&pg=PA172&lpg=PA172&dq=oligonucleotide+b+fragmentation&source=bl&ots=mRr29Pexx2&sig=1NUQcWV-wuj6o9q81my86AVoRto&hl=fr&sa=X&ved=2ahUKEwjI5M3yn-7fAhUJMewKHQR6Bcs4ChDoATADegQIBhAB#v=onepage&q&f=true\n    if (options.c)\n        mfs.push(`${fiveTerm}PO2$c${i}`); // neutral ok\n    if (options.d)\n        mfs.push(`${fiveTerm}PO3H2$d${i}`);\n    if (options.dh2o)\n        mfs.push(`${fiveTerm}PO2$d${i}-H2O`);\n}\n//# sourceMappingURL=addFiveTerm.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.baseLoss = baseLoss;\nconst mf_utilities_1 = require(\"mf-utilities\");\nconst mfLosses = {};\nfor (const nucleotide of ['Amp', 'Tmp', 'Cmp', 'Gmp', 'Ump']) {\n    mfLosses[nucleotide] = {\n        code: nucleotide.charAt(0),\n        diff: (0, mf_utilities_1.mfDiff)('Rmp', nucleotide),\n    };\n}\nfor (const nucleotide of ['Damp', 'Dtmp', 'Dcmp', 'Dgmp', 'Dump']) {\n    mfLosses[nucleotide] = {\n        code: nucleotide.charAt(1).toUpperCase(),\n        diff: (0, mf_utilities_1.mfDiff)('Drmp', nucleotide),\n    };\n}\nfunction baseLoss(nucleotide) {\n    // any residue can loose a base\n    let results = [];\n    for (let key in mfLosses) {\n        const base = mfLosses[key];\n        if (nucleotide.includes(key)) {\n            results.push(`${nucleotide}(${base.diff})$${base.code}*`);\n        }\n    }\n    return results;\n}\n//# sourceMappingURL=baseLoss.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.addFiveTermBaseLoss = addFiveTermBaseLoss;\nconst baseLoss_js_1 = require(\"./baseLoss.js\");\nfunction addFiveTermBaseLoss(mfs, fiveTerm, i, options) {\n    if (!options.abcdBaseLoss)\n        return;\n    let loss = (0, baseLoss_js_1.baseLoss)(fiveTerm);\n    for (const mf of loss) {\n        if (options.a) {\n            mfs.push(`${mf}`.replace('$', `O-1H-1$a${i} `));\n        }\n        if (options.b) {\n            mfs.push(`${mf}`.replace('$', `H-1$b${i} `));\n        }\n        if (options.c) {\n            mfs.push(`${mf}`.replace('$', `PO2$c${i} `));\n        }\n        if (options.d) {\n            mfs.push(`${mf}`.replace('$', `PO3H2$d${i} `));\n        }\n    }\n}\n//# sourceMappingURL=addFiveTermBaseLoss.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.addInternalTerm = addInternalTerm;\nconst furanThreeTerm_js_1 = require(\"./furanThreeTerm.js\");\n// https://books.google.ch/books?id=B57e37bJjqAC&pg=PA172&lpg=PA172&dq=oligonucleotide+b+fragmentation&source=bl&ots=mRr29Pexx2&sig=1NUQcWV-wuj6o9q81my86AVoRto&hl=fr&sa=X&ved=2ahUKEwjI5M3yn-7fAhUJMewKHQR6Bcs4ChDoATADegQIBhAB#v=onepage&q=oligonucleotide%20b%20fragmentation&f=false\nfunction addInternalTerm(mfs, internal, ter3, ter5, options = {}) {\n    if (options.aw) {\n        // without base loss\n        mfs.push(`HO${internal}O-1H-1$w${ter3}:a${ter5}`); // A W\n    }\n    if (options.bw) {\n        // without base loss\n        mfs.push(`HO${internal}H$w${ter3}:b${ter5}`); // B W\n    }\n    if (options.abw) {\n        // with base loss\n        let fragment = (0, furanThreeTerm_js_1.furanThreeTerm)(internal);\n        mfs.push(`HO${fragment}$w${ter3}:a${ter5}-B`); // A minus base - W\n    }\n    if (options.aby) {\n        // with base loss\n        let fragment = (0, furanThreeTerm_js_1.furanThreeTerm)(internal);\n        mfs.push(`O-2P-1${fragment}$y${ter3}:a${ter5}-B`); // A minus base - Y\n    }\n}\n//# sourceMappingURL=addInternalTerm.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.addThreeTerm = addThreeTerm;\nfunction addThreeTerm(mfs, threeTerm, i, options) {\n    if (options.w)\n        mfs.push(`HO${threeTerm}$w${i}`); // neutral ok\n    if (options.x)\n        mfs.push(`H-1${threeTerm}$x${i}`); // neutral ok\n    if (options.y)\n        mfs.push(`O-2P-1${threeTerm}$y${i}`); // neutral ok\n    if (options.z)\n        mfs.push(`O-3H-2P-1${threeTerm}$z${i}`); // neutral ok\n    if (options.zch2)\n        mfs.push(`O-3H-4C-1P-1${threeTerm}$z${i}-CH2`); // TODO to confirm\n}\n//# sourceMappingURL=addThreeTerm.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.addThreeTermBaseLoss = addThreeTermBaseLoss;\nconst baseLoss_js_1 = require(\"./baseLoss.js\");\nfunction addThreeTermBaseLoss(mfs, threeTerm, i, options) {\n    if (!options.wxyzBaseLoss)\n        return;\n    let loss = (0, baseLoss_js_1.baseLoss)(threeTerm);\n    for (const mf of loss) {\n        if (options.w) {\n            mfs.push(`HO${mf}`.replace('$', `$w${i} `));\n        }\n        if (options.x) {\n            mfs.push(`H-1${mf}`.replace('$', `$x${i} `));\n        }\n        if (options.y) {\n            mfs.push(`O-2P-1${mf}`.replace('$', `$y${i} `));\n        }\n        if (options.z) {\n            mfs.push(`O-3H-1P-1(+)${mf}`.replace('$', `$z${i} `));\n        }\n    }\n}\n//# sourceMappingURL=addThreeTermBaseLoss.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.generateFragments = generateFragments;\nconst addFiveTerm_1 = require(\"./addFiveTerm\");\nconst addFiveTermBaseLoss_1 = require(\"./addFiveTermBaseLoss\");\nconst addInternalTerm_1 = require(\"./addInternalTerm\");\nconst addThreeTerm_1 = require(\"./addThreeTerm\");\nconst addThreeTermBaseLoss_1 = require(\"./addThreeTermBaseLoss\");\nfunction generateFragments(mf, options) {\n    if (options === undefined) {\n        options = {\n            a: false,\n            ab: false,\n            b: false,\n            c: false,\n            d: false,\n            dh2o: false,\n            w: false,\n            x: false,\n            y: false,\n            z: false,\n            zch2: false,\n            aw: false,\n            bw: false,\n            abw: false,\n            aby: false,\n            abcdBaseLoss: false,\n            wxyzBaseLoss: false,\n        };\n    }\n    let mfs = [];\n    // need to allow 0-9 to deal with neutral loss\n    let mfparts = mf\n        .replaceAll(/([\\d)a-z])([A-Z][a-z](?=[a-z]))/g, '$1 $2')\n        .split(/ /);\n    let fiveTerm = '';\n    let threeTerm = '';\n    if (mfparts[0].startsWith('(')) {\n        fiveTerm += mfparts[0];\n        mfparts = mfparts.splice(1);\n    }\n    if (mfparts.at(-1).includes('(')) {\n        threeTerm += mfparts.at(-1).replace(/^[^()]*/, '');\n        mfparts[mfparts.length - 1] = mfparts.at(-1).replace(/\\(.*/, '');\n    }\n    for (let ter5 = 1; ter5 < mfparts.length; ter5++) {\n        fiveTerm += mfparts[ter5 - 1];\n        threeTerm = mfparts[mfparts.length - ter5] + threeTerm;\n        (0, addFiveTerm_1.addFiveTerm)(mfs, fiveTerm, ter5, options);\n        (0, addFiveTermBaseLoss_1.addFiveTermBaseLoss)(mfs, fiveTerm, ter5, options);\n        (0, addThreeTerm_1.addThreeTerm)(mfs, threeTerm, ter5, options);\n        (0, addThreeTermBaseLoss_1.addThreeTermBaseLoss)(mfs, threeTerm, ter5, options);\n    }\n    for (let i = 1; i < mfparts.length - 1; i++) {\n        let internal = '';\n        for (let j = i; j < mfparts.length - 1; j++) {\n            internal += mfparts[j];\n            if (j > i) {\n                (0, addInternalTerm_1.addInternalTerm)(mfs, internal, mfparts.length - i, j + 1, options);\n            }\n        }\n    }\n    return mfs;\n}\n//# sourceMappingURL=generateFragments.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fromNucleicSequence = fromNucleicSequence;\nconst chemical_groups_1 = require(\"chemical-groups\");\nconst mf_generator_1 = require(\"mf-generator\");\nconst nucleotide_1 = require(\"nucleotide\");\n/**\n * Add a database starting from a peptidic sequence\n *\n * @param {string} [sequencesString] Sequence as a string of 1 letter or 3 letters code. Could also be a correct molecular formula respecting uppercase, lowercase\n * @param {object} [options={}]\n * @param {boolean} [options.estimate=false] - estimate the number of MF without filters\n * @param {function} [options.onStep] - Callback to do after each step\n * @param {number} [options.limit=100000]\n * @param {string} [options.ionizations='']\n * @param {object} [options.info={}]\n * @param {string} [options.info.kind] - rna, ds-dna or dna. Default if contains U: rna, otherwise ds-dna\n * @param {string} [options.info.fivePrime=monophosphate] - alcohol, monophosphate, diphosphate, triphosphate\n * @param {string} [options.info.circular=false]\n * @param {array}   [options.mfsArray=[]]\n * @param {object}  [options.fragmentation={}] Object defining options for fragmentation\n * @param {boolean} [options.fragmentation.a=false] If true allow fragments of type 'a'\n * @param {boolean} [options.fragmentation.ab=false] If true allow fragments of type 'a' minus base\n * @param {boolean} [options.fragmentation.b=false] If true allow fragments of type 'b'\n * @param {boolean} [options.fragmentation.c=false] If true allow fragments of type 'c'\n * @param {boolean} [options.fragmentation.d=false] If true allow fragments of type 'd'\n * @param {boolean} [options.fragmentation.dh2o=false] If true allow fragments of type 'd' with water loss\n * @param {boolean} [options.fragmentation.w=false] If true allow fragments of type 'w'\n * @param {boolean} [options.fragmentation.x=false] If true allow fragments of type 'x'\n * @param {boolean} [options.fragmentation.y=false] If true allow fragments of type 'y'\n * @param {boolean} [options.fragmentation.z=false] If true allow fragments of type 'z'\n * @param {boolean} [options.baseLoss=false] If true allow base loss at all the positions\n *\n * @param {object} [options.filter={}] Object defining options for molecular formula filter\n * @param {number} [options.filter.minMass=0] - Minimal monoisotopic mass\n * @param {number} [options.filter.maxMass=+Infinity] - Maximal monoisotopic mass\n * @param {number} [options.filter.minEM=0] - Minimal neutral monoisotopic mass\n * @param {number} [options.filter.maxEM=+Infinity] - Maximal neutral monoisotopic mass\n * @param {number} [options.filter.minMSEM=0] - Minimal observed monoisotopic mass\n * @param {number} [options.filter.maxMSEM=+Infinity] - Maximal observed monoisotopic mass\n * @param {number} [options.filter.minCharge=-Infinity] - Minimal charge\n * @param {number} [options.filter.maxCharge=+Infinity] - Maximal charge\n * @param {boolean}  [options.filter.absoluteCharge=false] - If true, the charge is absolute (so between 0 and +Infinity by default)\n * @param {object} [options.filter.unsaturation={}]\n * @param {number} [options.filter.unsaturation.min=-Infinity] - Minimal unsaturation\n * @param {number} [options.filter.unsaturation.max=+Infinity] - Maximal unsaturation\n * @param {boolean} [options.filter.unsaturation.onlyInteger=false] - Integer unsaturation\n * @param {boolean} [options.filter.unsaturation.onlyNonInteger=false] - Non integer unsaturation\n * @returns {Promise}\n */\nasync function fromNucleicSequence(sequencesString, options = {}) {\n    const { mfsArray = [], fragmentation = {}, filter = {}, ionizations = '', info = {}, estimate = false, limit = 100000, onStep, } = options;\n    let sequences = (0, nucleotide_1.sequenceToMF)(sequencesString, info).split('.');\n    let fragmentsArray = sequences.slice();\n    // calculate fragmentation\n    for (let i = 0; i < sequences.length; i++) {\n        let sequence = sequences[i];\n        let fragments = (0, nucleotide_1.generateFragments)(sequence, fragmentation);\n        if (i === 1) {\n            // complementary sequence\n            fragments = fragments.map((fragment) => fragment.replaceAll('$', '$cmp-'));\n        }\n        fragmentsArray = fragmentsArray.concat(fragments);\n        if (fragmentation.baseLoss) {\n            fragmentsArray = fragmentsArray.concat((0, nucleotide_1.baseLoss)(sequence));\n        }\n    }\n    mfsArray.push(fragmentsArray);\n    let combined = await (0, mf_generator_1.generateMFs)(mfsArray, {\n        ionizations,\n        filter,\n        uniqueMFs: false,\n        estimate,\n        onStep,\n        limit,\n    });\n    if (Array.isArray(combined)) {\n        // not an estimation\n        for (const result of combined) {\n            result.sequence = (0, chemical_groups_1.groupsToSequence)(result.parts.filter(Boolean).join(' '));\n        }\n    }\n    return combined;\n}\n//# sourceMappingURL=fromNucleicSequence.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.aminoAcids = void 0;\n// SOURCE: https://en.wikipedia.org/wiki/Amino_acid\n// Link for UTF8 code for modified: https://codepoints.net/search?sc=Grek\nexports.aminoAcids = [\n    // Standard amino acids\n    {\n        name: 'Alanine',\n        aa3: 'Ala',\n        aa1: 'A',\n        sc: {\n            type: 'hydrophobic',\n        },\n        pKaC: 2.33,\n        pKaN: 9.71,\n    },\n    {\n        name: 'Arginine',\n        aa3: 'Arg',\n        aa1: 'R',\n        sc: {\n            type: 'positive',\n            pKa: 12.1,\n        },\n        pKaC: 2.03,\n        pKaN: 9,\n    },\n    {\n        name: 'Asparagine',\n        aa3: 'Asn',\n        aa1: 'N',\n        sc: {\n            type: 'polar',\n        },\n        pKaC: 2.13,\n        pKaN: 9.05,\n    },\n    {\n        name: 'Aspartic acid',\n        aa3: 'Asp',\n        aa1: 'D',\n        sc: {\n            type: 'negative',\n            pKa: 3.71,\n        },\n        pKaC: 1.95,\n        pKaN: 9.66,\n    },\n    {\n        name: 'Cysteine',\n        aa3: 'Cys',\n        aa1: 'C',\n        sc: {\n            type: 'special',\n            pKa: 8.14,\n        },\n        pKaC: 1.91,\n        pKaN: 10.28,\n    },\n    {\n        name: 'Glutamic acid',\n        aa3: 'Glu',\n        aa1: 'E',\n        sc: {\n            type: 'negative',\n            pKa: 4.15,\n        },\n        pKaC: 2.16,\n        pKaN: 9.58,\n    },\n    {\n        name: 'Glutamine',\n        aa3: 'Gln',\n        aa1: 'Q',\n        sc: {\n            type: 'polar',\n        },\n        pKaC: 2.18,\n        pKaN: 9,\n    },\n    {\n        name: 'Glycine',\n        aa3: 'Gly',\n        aa1: 'G',\n        sc: {\n            type: 'special',\n        },\n        pKaC: 2.34,\n        pKaN: 9.58,\n    },\n    {\n        name: 'Histidine',\n        aa3: 'His',\n        aa1: 'H',\n        sc: {\n            type: 'positive',\n            pKa: 6.04,\n        },\n        pKaC: 1.7,\n        pKaN: 9.09,\n    },\n    {\n        name: 'Isoleucine',\n        aa3: 'Ile',\n        aa1: 'I',\n        sc: {\n            type: 'hydrophobic',\n        },\n        pKaC: 2.26,\n        pKaN: 9.6,\n    },\n    {\n        name: 'Leucine',\n        aa3: 'Leu',\n        aa1: 'L',\n        sc: {\n            type: 'hydrophobic',\n        },\n        pKaC: 2.32,\n        pKaN: 9.58,\n    },\n    {\n        name: 'Lysine',\n        aa3: 'Lys',\n        aa1: 'K',\n        sc: {\n            type: 'positive',\n            pKa: 10.67,\n        },\n        pKaC: 2.15,\n        pKaN: 9.16,\n    },\n    {\n        name: 'Methionine',\n        aa3: 'Met',\n        aa1: 'M',\n        sc: {\n            type: 'hydrophobic',\n        },\n        pKaC: 2.16,\n        pKaN: 9.08,\n    },\n    {\n        name: 'Phenylalanine',\n        aa3: 'Phe',\n        aa1: 'F',\n        sc: {\n            type: 'hydrophobic',\n        },\n        pKaC: 2.18,\n        pKaN: 9.09,\n    },\n    {\n        name: 'Proline',\n        aa3: 'Pro',\n        aa1: 'P',\n        sc: {\n            type: 'special',\n        },\n        pKaC: 1.95,\n        pKaN: 10.47,\n    },\n    {\n        name: 'Serine',\n        aa3: 'Ser',\n        aa1: 'S',\n        sc: {\n            type: 'polar',\n        },\n        pKaC: 2.13,\n        pKaN: 9.05,\n    },\n    {\n        name: 'Threonine',\n        aa3: 'Thr',\n        aa1: 'T',\n        sc: {\n            type: 'polar',\n        },\n        pKaC: 2.2,\n        pKaN: 8.96,\n    },\n    {\n        name: 'Tryptophan',\n        aa3: 'Trp',\n        aa1: 'W',\n        sc: {\n            type: 'hydrophobic',\n        },\n        pKaC: 2.38,\n        pKaN: 9.34,\n    },\n    {\n        name: 'Tyrosine',\n        aa3: 'Tyr',\n        aa1: 'Y',\n        sc: {\n            type: 'hydrophobic',\n        },\n        pKaC: 2.24,\n        pKaN: 9.04,\n    },\n    {\n        name: 'Valine',\n        aa3: 'Val',\n        aa1: 'V',\n        sc: {\n            type: 'hydrophobic',\n        },\n        pKaC: 2.27,\n        pKaN: 9.52,\n    },\n    // Additional\n    {\n        name: 'Selenocysteine',\n        aa3: 'Sec',\n        aa1: 'U',\n    },\n    {\n        name: 'Pyrrolysine',\n        aa3: 'Pyl',\n        aa1: 'O',\n    },\n    // Ambiguous\n    {\n        name: 'Asparagine or aspartic acid',\n        aa3: 'Asx',\n        aa1: 'B',\n    },\n    {\n        name: 'Glutamine or glutamic acid',\n        aa3: 'Glx',\n        aa1: 'Z',\n    },\n    {\n        name: 'Leucine or isoleucine',\n        aa3: 'Xle',\n        aa1: 'J',\n    },\n    {\n        name: 'Unspecified or unknown',\n        aa3: 'Xaa',\n        aa1: 'X',\n    },\n];\n//# sourceMappingURL=aminoAcids.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.calculateCharge = calculateCharge;\nexports.calculateIEP = calculateIEP;\nexports.calculateChart = calculateChart;\nexports.getColor = getColor;\nconst aminoAcids_1 = require(\"./aminoAcids\");\n// we will convert the data to an object to be much faster\nlet aaObject = {};\nfor (let i = 0; i < aminoAcids_1.aminoAcids.length; i++) {\n    aaObject[aminoAcids_1.aminoAcids[i].aa3] = aminoAcids_1.aminoAcids[i];\n}\nfunction calculateCharge(aas, pH = 7) {\n    let combined = combine(aas);\n    if (!combined)\n        return;\n    let charge = calculateForPh(combined, pH);\n    return Math.round(charge * 1000) / 1000;\n}\n// this methods required an array of aas\nfunction calculateIEP(aas) {\n    let combined = combine(aas);\n    if (!combined)\n        return;\n    let first = 0;\n    let last = 14;\n    let current = 14;\n    let previous = 0;\n    let currentCharge;\n    while (Math.abs(current - previous) > 0.0001) {\n        previous = current;\n        current = (last + first) / 2;\n        currentCharge = calculateForPh(combined, current);\n        if (currentCharge > 0) {\n            first = current;\n        }\n        else if (currentCharge < 0) {\n            last = current;\n        }\n        else {\n            previous = current;\n        }\n    }\n    return Math.round(current * 1000) / 1000;\n}\nfunction calculateChart(aas) {\n    let combined = combine(aas);\n    if (!combined)\n        return;\n    let y = [];\n    let x = [];\n    let yAbs = [];\n    for (let i = 0; i <= 14; i = i + 0.01) {\n        let charge = calculateForPh(combined, i);\n        x.push(i);\n        y.push(charge);\n        yAbs.push(Math.abs(charge));\n    }\n    combined.x = x;\n    combined.y = y;\n    combined.yAbs = yAbs;\n    return combined;\n}\nfunction calculateForPh(combined, pH) {\n    let total = 0;\n    total += 1 / (1 + 10 ** (pH - combined.first));\n    total += -1 / (1 + 10 ** (combined.last - pH));\n    for (let key in combined.acid) {\n        total += -combined.acid[key] / (1 + 10 ** (aaObject[key].sc.pKa - pH));\n    }\n    for (let key in combined.basic) {\n        total += combined.basic[key] / (1 + 10 ** (pH - aaObject[key].sc.pKa));\n    }\n    return total;\n}\n// we will combine the amino acids\nfunction combine(aas) {\n    let combined = {};\n    if (aaObject[aas[0]]) {\n        combined.first = aaObject[aas[0]].pKaN;\n    }\n    else {\n        return;\n    }\n    if (aaObject[aas.at(-1)]) {\n        combined.last = aaObject[aas.at(-1)].pKaC;\n    }\n    else {\n        return;\n    }\n    combined.basic = {};\n    combined.acid = {};\n    for (let i = 0; i < aas.length; i++) {\n        let currentAA = aas[i];\n        if (!aaObject[currentAA])\n            return;\n        if (aaObject[currentAA].sc && aaObject[currentAA].sc.type) {\n            if (aaObject[currentAA].sc.type === 'positive') {\n                if (!combined.basic[currentAA]) {\n                    combined.basic[currentAA] = 0;\n                }\n                combined.basic[currentAA]++;\n            }\n            else if (aaObject[currentAA].sc.type === 'negative') {\n                if (!combined.acid[currentAA]) {\n                    combined.acid[currentAA] = 0;\n                }\n                combined.acid[currentAA]++;\n            }\n        }\n    }\n    return combined;\n}\n/*\n We can generate a color based on iep\n 0 -> 7 means that at pH 7 it is charged negatively (blue)\n 7 -> 14 means that at pH7 it is charged positively (red)\n */\nfunction getColor(iep) {\n    if (iep < 7) {\n        if (iep < 3)\n            iep = 3;\n        let white = Math.round(255 - (7 - iep) * (200 / 4));\n        return `rgb(${white},${white},255)`;\n    }\n    else if (iep > 7) {\n        if (iep > 11)\n            iep = 11;\n        let white = Math.round(255 - (iep - 7) * (200 / 4));\n        return `rgb(255,${white},${white})`;\n    }\n    return 'rgb(255,255,255)';\n}\n//# sourceMappingURL=isoElectricPoint.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.splitPeptide = splitPeptide;\nfunction splitPeptide(sequence) {\n    let aas = sequence.replaceAll(/([A-Z])/g, ' $1').split(/ /);\n    let begin = 0;\n    while (aas[begin] === '' || aas[begin] === 'H') {\n        begin++;\n    }\n    let end = aas.length - 1;\n    while (aas[end] === 'O' || aas[end] === 'H') {\n        end--;\n    }\n    aas = aas.slice(begin, end + 1);\n    return aas;\n}\n//# sourceMappingURL=splitPeptide.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.allowNeutralLoss = allowNeutralLoss;\n/**\n * Add neutral loss on natural amino acids\n * @param {*} mf\n * @returns\n */\nfunction allowNeutralLoss(mf) {\n    if (Array.isArray(mf)) {\n        for (let i = 0; i < mf.length; i++) {\n            mf[i] = allowOneNeutralLoss(mf[i]);\n        }\n        return mf;\n    }\n    else {\n        return allowOneNeutralLoss(mf);\n    }\n}\nfunction allowOneNeutralLoss(mf) {\n    mf = mf.replaceAll(/(Ser|Thr|Asp|Glu)(?!\\()/g, '$1(H-2O-1)0-1');\n    mf = mf.replaceAll(/(Arg|Lys|Asn|Gln)(?!\\()/g, '$1(N-1H-3)0-1');\n    return mf;\n}\n//# sourceMappingURL=allowNeutralLoss.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getAA = getAA;\nconst aminoAcids_1 = require(\"./aminoAcids\");\nfunction getAA(code) {\n    if (code.length === 1) {\n        for (let i = 0; i < aminoAcids_1.aminoAcids.length; i++) {\n            if (aminoAcids_1.aminoAcids[i].aa1 === code) {\n                return aminoAcids_1.aminoAcids[i];\n            }\n        }\n    }\n    if (code.length === 3) {\n        for (let i = 0; i < aminoAcids_1.aminoAcids.length; i++) {\n            if (aminoAcids_1.aminoAcids[i].aa3 === code) {\n                return aminoAcids_1.aminoAcids[i];\n            }\n        }\n    }\n}\n//# sourceMappingURL=getAA.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.chargePeptide = chargePeptide;\nconst getAA_1 = require(\"./getAA\");\n// SOURCE: https://en.wikipedia.org/wiki/Amino_acid\nfunction chargePeptide(mf, options = {}) {\n    if (Array.isArray(mf)) {\n        for (let i = 0; i < mf.length; i++) {\n            mf[i] = chargeOnePeptide(mf[i], options);\n        }\n        return mf;\n    }\n    else {\n        return chargeOnePeptide(mf, options);\n    }\n}\nfunction chargeOnePeptide(mf, options) {\n    const { pH = 0 } = options;\n    // we will allow to charge the peptide at a specific pH\n    // first amino acids (N-terminal)\n    if (mf.match(/^H[A-Z][a-z]{2}/)) {\n        let firstAA = mf.replace(/^H([A-Z][a-z]{2}).*/, '$1');\n        if ((0, getAA_1.getAA)(firstAA) && pH < (0, getAA_1.getAA)(firstAA).pKaN) {\n            mf = mf.replace(/^H([^+])/, 'H+H$1');\n        }\n    }\n    // last amino acids (C-terminal)\n    if (mf.match(/[A-Z][a-z]{2}OH$/)) {\n        let lastAA = mf.replace(/.*([A-Z][a-z]{2})OH$/, '$1');\n        if ((0, getAA_1.getAA)(lastAA) && pH > (0, getAA_1.getAA)(lastAA).pKaC) {\n            mf = mf.replace(/OH$/, 'O-');\n        }\n    }\n    // basic AA\n    if (pH < (0, getAA_1.getAA)('Arg').sc.pKa)\n        mf = mf.replaceAll(/(Arg)(?!\\()/g, '$1(H+)');\n    if (pH < (0, getAA_1.getAA)('His').sc.pKa)\n        mf = mf.replaceAll(/(His)(?!\\()/g, '$1(H+)');\n    if (pH < (0, getAA_1.getAA)('Lys').sc.pKa)\n        mf = mf.replaceAll(/(Lys)(?!\\()/g, '$1(H+)');\n    // acid AA\n    if (pH > (0, getAA_1.getAA)('Asp').sc.pKa)\n        mf = mf.replaceAll(/(Asp)(?!\\()/g, '$1(H-1-)');\n    if (pH > (0, getAA_1.getAA)('Glu').sc.pKa)\n        mf = mf.replaceAll(/(Glu)(?!\\()/g, '$1(H-1-)');\n    if (pH > (0, getAA_1.getAA)('Cys').sc.pKa)\n        mf = mf.replaceAll(/(Cys)(?!\\()/g, '$1(H-1-)');\n    return mf;\n}\n//# sourceMappingURL=chargePeptide.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.sequenceToMF = sequenceToMF;\nconst mf_utilities_1 = require(\"mf-utilities\");\nconst aminoAcids_1 = require(\"./aminoAcids\");\nfunction sequenceToMF(mf) {\n    if (mf === '')\n        return '';\n    mf = (0, mf_utilities_1.ensureUppercaseSequence)(mf);\n    // this function will check if it is a sequence of aa in 1 letter or 3 letters and convert them if it is the case\n    // it could be a multiline mf !\n    // if it is a multiline we could make some \"tricks\" ...\n    let newMF = mf;\n    // SEQRES   1 B  256  MET PRO VAL GLU ILE THR VAL LYS GLU LEU LEU GLU ALA\n    // SEQRES   2 B  256  GLY VAL HIS PHE GLY HIS GLU ARG LYS ARG TRP ASN PRO\n    // or\n    // MET PRO VAL GLU ILE THR VAL LYS GLU LEU LEU GLU ALA\n    // GLY VAL HIS PHE GLY HIS GLU ARG LYS ARG TRP ASN PRO\n    if (mf.search(/(?:[A-Z]{3} ){2}[A-Z]{3}/) > -1) {\n        // this is a PDB !\n        let tmpmf = mf.replaceAll(/[\\n\\r]+/g, ' ');\n        tmpmf = tmpmf.replaceAll(/(SEQRES|\\d+| [A-Z] | [\\dA-Z]{4-50})/g, '');\n        // we need to correct the uppercase / lowercase\n        let parts = tmpmf.split(' ');\n        newMF = 'H';\n        for (let i = 0; i < parts.length; i++) {\n            newMF += parts[i].slice(0, 1) + parts[i].slice(1).toLowerCase();\n        }\n        newMF += 'OH';\n    }\n    else if (mf.includes('(') && isOneLetterCode(mf)) {\n        // we expect one-letter code with modification\n        newMF = '';\n        let nTerminal = 'H';\n        let cTerminal = 'OH';\n        let parenthesisCounter = 0;\n        for (let i = 0; i < mf.length; i++) {\n            let currentSymbol = mf[i];\n            if (currentSymbol === '(' ||\n                currentSymbol === ')' ||\n                parenthesisCounter > 0) {\n                if (currentSymbol === '(') {\n                    parenthesisCounter++;\n                    if (i === 0)\n                        nTerminal = '';\n                }\n                if (currentSymbol === ')') {\n                    parenthesisCounter--;\n                    if (i === mf.length - 1)\n                        cTerminal = '';\n                }\n                newMF += currentSymbol;\n                continue;\n            }\n            newMF += convertAA1To3(currentSymbol);\n        }\n        newMF = nTerminal + newMF + cTerminal;\n    }\n    else if (mf.search(/[A-Za-z][\\da-z]/) === -1) {\n        // UNIPROT\n        //   370        380        390        400        410        420\n        //GFKPNLRKTF VSGLFRESCG AHFYRGVDVK PFYIKKPVDN LFALMLILNR LRGWGVVGGM\n        //\n        //    430        440        450        460        470        480\n        //SDPRLYKVWV RLSSQVPSMF FGGTDLAADY YVVSPPTAVS VYTKTPYGRL LADTRTSGFR\n        // We remove all the number, all the spaces, etc\n        newMF = `H${convertAA1To3(newMF.replaceAll(/[^A-Z]/g, ''))}OH`;\n    }\n    return newMF;\n}\nfunction convertAA1To3(mf) {\n    let newmf = '';\n    for (let i = 0; i < mf.length; i++) {\n        newmf += aa1To3(mf.charAt(i));\n    }\n    return newmf;\n}\nfunction aa1To3(code) {\n    for (let i = 0; i < aminoAcids_1.aminoAcids.length; i++) {\n        if (aminoAcids_1.aminoAcids[i].aa1 === code) {\n            return aminoAcids_1.aminoAcids[i].aa3;\n        }\n    }\n    throw new Error(`Invalid 1 letter code: ${code}`);\n}\n// mf can contain as well parenthesis. We need to check if it is not yet a correct molecular formula\nfunction isOneLetterCode(mf) {\n    let parenthesisLevel = 0;\n    for (let char of mf) {\n        if (parenthesisLevel === 0 && char.match(/[a-z]/))\n            return false;\n        if (char === '(')\n            parenthesisLevel++;\n        if (char === ')')\n            parenthesisLevel--;\n    }\n    return true;\n}\n//# sourceMappingURL=sequenceToMF.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.generatePeptideFragments = generatePeptideFragments;\n/**\n * Generate peptide fragments from a molecular formula.\n * @param {string} mf - The molecular formula to fragment.\n * @param {object} [options] - Fragmentation options.\n * @param {boolean} [options.a=false] - Generate a-type fragments.\n * @param {boolean} [options.b] - Generate b-type fragments. Defaults to `true` if no options are specified, otherwise `false`.\n * @param {boolean} [options.c=false] - Generate c-type fragments.\n * @param {boolean} [options.x=false] - Generate x-type fragments.\n * @param {boolean} [options.y] - Generate y-type fragments. Defaults to `true` if no options are specified, otherwise `false`.\n * @param {boolean} [options.z=false] - Generate z-type fragments.\n * @param {boolean} [options.i=false] - Generate internal fragments.\n * @param {boolean} [options.ya=false] - Generate ya-type double fragmentation.\n * @param {boolean} [options.yb=false] - Generate yb-type double fragmentation.\n * @param {boolean} [options.yc=false] - Generate yc-type double fragmentation.\n * @param {boolean} [options.zc=false] - Generate zc-type double fragmentation.\n * @param {number} [options.maxInternal=Infinity] - Maximum number of residues for internal fragments.\n * @param {number} [options.minInternal=0] - Minimum number of residues for internal fragments.\n * @returns {string[]} Array of fragment molecular formulas.\n */\nfunction generatePeptideFragments(mf, options) {\n    const isDefaultCall = options === undefined;\n    if (isDefaultCall) {\n        options = {};\n    }\n    const { a = false, b = isDefaultCall, c = false, x = false, y = isDefaultCall, z = false, i: internal = false, ya = false, yb = false, yc = false, zc = false, maxInternal = Number.MAX_VALUE, minInternal = 0, } = options;\n    let mfs = [];\n    // need to allow 0-9 to deal with neutral loss\n    let mfparts = mf\n        .replaceAll(/([\\d)a-z])([A-Z][a-z](?=[a-z]))/g, '$1 $2')\n        .split(/ /);\n    let nTerm = '';\n    let cTerm = '';\n    if (mfparts[0].startsWith('(')) {\n        nTerm += mfparts[0];\n        mfparts = mfparts.splice(1);\n    }\n    if (mfparts.at(-1).includes('(')) {\n        cTerm += mfparts.at(-1).replace(/^[^()]*/, '');\n        mfparts[mfparts.length - 1] = mfparts.at(-1).replace(/\\(.*/, '');\n    }\n    for (let i = 1; i < mfparts.length; i++) {\n        nTerm += mfparts[i - 1];\n        cTerm = mfparts[mfparts.length - i] + cTerm;\n        addNTerm(mfs, nTerm, i, a, b, c);\n        addCTerm(mfs, cTerm, i, x, y, z);\n        if (internal)\n            mfs.push(`${mfparts[i]}HC-1O-1(+1)$i:${mfparts[i]}`);\n        if (ya || yb || yc || zc) {\n            // we have double fragmentations\n            for (let j = i + 1; j < Math.min(mfparts.length, maxInternal + i + 1); j++) {\n                let iTerm = '';\n                if (j - i >= minInternal) {\n                    for (let k = i; k < j; k++) {\n                        iTerm += mfparts[k];\n                    }\n                    addITerm(mfs, iTerm, mfparts.length - i, j, ya, yb, yc, zc);\n                }\n            }\n        }\n    }\n    // todo does this make sense ??? I think we should remote those 3 lines\n    if (mfs.length === 0) {\n        mfs = mfs.concat([mf]);\n    }\n    return mfs;\n}\nfunction addNTerm(mfs, nTerm, i, a, b, c) {\n    if (a)\n        mfs.push(`${nTerm}C-1O-1(+1)$a${i}`);\n    if (b)\n        mfs.push(`${nTerm}(+1)$b${i}`);\n    if (c)\n        mfs.push(`${nTerm}NH3(+1)$c${i}`);\n}\nfunction addITerm(mfs, iTerm, i, j, ya, yb, yc, zc) {\n    if (ya)\n        mfs.push(`H${iTerm}C-1O-1(+1)$a${j}y${i}`);\n    if (yb)\n        mfs.push(`H${iTerm}(+1)$b${j}y${i}`);\n    if (yc)\n        mfs.push(`H${iTerm}NH3(+1)$c${j}y${i}`);\n    if (zc)\n        mfs.push(`N-1${iTerm}NH3(+1)$c${j}z${i}`);\n}\nfunction addCTerm(mfs, cTerm, i, x, y, z) {\n    if (x)\n        mfs.push(`CO(+1)${cTerm}$x${i}`);\n    if (y)\n        mfs.push(`H2(+1)${cTerm}$y${i}`);\n    if (z)\n        mfs.push(`N-1H-1(+1)${cTerm}$z${i}`);\n}\n//# sourceMappingURL=generatePeptideFragments.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.digestPeptide = digestPeptide;\nconst ml_spectra_processing_1 = require(\"ml-spectra-processing\");\n/**\n * Digest a peptide sequence using a specified enzyme.\n * @param {string} sequence - The peptide sequence to digest.\n * @param {object} [options={}] - Digestion options.\n * @param {string} options.enzyme - The enzyme to use for digestion. Required. Supported values: 'chymotrypsin', 'trypsin', 'lysc', 'glucph4', 'glucph8', 'thermolysin', 'cyanogenbromide', 'any'.\n * @param {number} [options.minMissed=0] - Minimum number of missed cleavages.\n * @param {number} [options.maxMissed=0] - Maximum number of missed cleavages.\n * @param {number} [options.minResidue=0] - Minimum number of residues in a fragment.\n * @param {number} [options.maxResidue=Infinity] - Maximum number of residues in a fragment.\n * @param {number} [options.minDigestions=0] - Minimum number of cleavage sites to use. Generates all combinations with at least this many cleavages. Defaults to `0`.\n * @param {number} [options.maxDigestions=Infinity] - Maximum number of cleavage sites to use. Generates all combinations with at most this many cleavages. Defaults to `Infinity`.\n * @returns {string[]} Array of digested peptide fragments.\n */\nfunction digestPeptide(sequence, options = {}) {\n    const { enzyme, minMissed = 0, maxMissed = 0, minResidue = 0, maxResidue = Number.MAX_VALUE, minDigestions = 0, maxDigestions = Number.MAX_VALUE, } = options;\n    if (!enzyme) {\n        return [];\n    }\n    sequence = sequence.replace(/^H([^a-z])/, '$1').replace(/OH$/, '');\n    let regexp = getRegexp(enzyme);\n    let allFragments = sequence.replace(regexp, '$1 ').split(/ /).filter(Boolean);\n    const numCleavages = allFragments.length - 1;\n    // Return empty if minDigestions is impossible to achieve\n    if (minDigestions > numCleavages) {\n        return [];\n    }\n    const effectiveMaxDigestions = Math.min(maxDigestions, numCleavages);\n    const effectiveMinDigestions = minDigestions;\n    if (effectiveMinDigestions > effectiveMaxDigestions) {\n        return [];\n    }\n    // Determine if we need combinatorial approach\n    // Use combinatorial logic when maxDigestions explicitly limits cleavages OR minDigestions > 0\n    const useCombinatorial = maxDigestions < numCleavages || minDigestions > 0;\n    // When using combinatorial due to maxDigestions limit, ensure at least 1 cleavage\n    const startDigestions = useCombinatorial\n        ? Math.max(1, effectiveMinDigestions)\n        : effectiveMinDigestions;\n    if (!useCombinatorial) {\n        // Default behavior: use all available cleavage sites\n        const results = [];\n        const fragments = [];\n        let fragmentStart = 0;\n        for (let i = 0; i < allFragments.length; i++) {\n            let nbResidue = allFragments[i]\n                .replaceAll(/([A-Z][a-z]{2})/g, ' $1')\n                .split(/ /)\n                .filter(Boolean).length;\n            fragments.push({\n                sequence: allFragments[i],\n                nbResidue,\n                from: fragmentStart,\n                to: fragmentStart + nbResidue - 1,\n            });\n            fragmentStart += nbResidue;\n        }\n        for (let i = 0; i < fragments.length - minMissed; i++) {\n            for (let j = minMissed; j <= Math.min(maxMissed, fragments.length - i - 1); j++) {\n                let fragment = '';\n                let nbResidue = 0;\n                for (let k = i; k <= i + j; k++) {\n                    fragment += fragments[k].sequence;\n                    nbResidue += fragments[k].nbResidue;\n                }\n                let from = fragments[i].from + 1;\n                let to = fragments[i + j].to + 1;\n                if (fragment && nbResidue >= minResidue && nbResidue <= maxResidue) {\n                    results.push(`H${fragment}OH$D${from}>${to}`);\n                }\n            }\n        }\n        return results;\n    }\n    // Combinatorial approach: generate all combinations of cleavage sites\n    const allResults = new Set();\n    for (let numDigestions = startDigestions; numDigestions <= effectiveMaxDigestions; numDigestions++) {\n        const combinations = (0, ml_spectra_processing_1.getCombinationsIterator)(numCleavages, numDigestions);\n        for (const cleavageSites of combinations) {\n            // Create fragments based on selected cleavage sites\n            const fragments = createFragmentsFromCleavages(allFragments, cleavageSites);\n            // Generate results with missed cleavages\n            for (let i = 0; i < fragments.length - minMissed; i++) {\n                for (let j = minMissed; j <= Math.min(maxMissed, fragments.length - i - 1); j++) {\n                    let fragment = '';\n                    let nbResidue = 0;\n                    for (let k = i; k <= i + j; k++) {\n                        fragment += fragments[k].sequence;\n                        nbResidue += fragments[k].nbResidue;\n                    }\n                    let from = fragments[i].from + 1;\n                    let to = fragments[i + j].to + 1;\n                    if (fragment && nbResidue >= minResidue && nbResidue <= maxResidue) {\n                        allResults.add(`H${fragment}OH$D${from}>${to}`);\n                    }\n                }\n            }\n        }\n    }\n    return [...allResults];\n}\n/**\n * Create fragments from selected cleavage sites.\n * @param {string[]} allFragments - All possible fragments if all sites were cleaved.\n * @param {number[]} cleavageSites - Indices of cleavage sites to use.\n * @returns {Array<{sequence: string, nbResidue: number, from: number, to: number}>} Fragment objects.\n */\nfunction createFragmentsFromCleavages(allFragments, cleavageSites) {\n    const fragments = [];\n    const cleavageSet = new Set(cleavageSites);\n    let currentFragment = '';\n    let fragmentStartIndex = 0;\n    for (let i = 0; i < allFragments.length; i++) {\n        currentFragment += allFragments[i];\n        // If this is a cleavage site or the last fragment, close the current fragment\n        if (cleavageSet.has(i) || i === allFragments.length - 1) {\n            const nbResidue = currentFragment\n                .replaceAll(/([A-Z][a-z]{2})/g, ' $1')\n                .split(/ /)\n                .filter(Boolean).length;\n            const from = fragmentStartIndex;\n            const to = from + nbResidue - 1;\n            fragments.push({\n                sequence: currentFragment,\n                nbResidue,\n                from,\n                to,\n            });\n            fragmentStartIndex = to + 1;\n            currentFragment = '';\n        }\n    }\n    return fragments;\n}\nfunction getRegexp(enzyme) {\n    switch (enzyme.toLowerCase().replaceAll(/[^\\da-z]/g, '')) {\n        case 'chymotrypsin':\n            return /(Phe|Tyr|Trp)(?!Pro)/g;\n        case 'trypsin':\n            return /(Lys|Arg)(?!Pro)/g;\n        case 'lysc':\n            return /(Lys)(?!Pro)/g;\n        case 'glucph4':\n            return /(Glu)(?!Pro|Glu)/g;\n        case 'glucph8':\n            return /(Asp|Glu)(?!Pro|Glu)/g;\n        case 'thermolysin': // N-term of  Leu, Phe, Val, Ile, Ala, Met\n            return /()(?=Ile|Leu|Val|Ala|Met|Phe)/g;\n        case 'cyanogenbromide':\n            return /(Met)/g;\n        case 'any':\n            return /()(?=[A-Z][a-z]{2})/g;\n        default:\n            throw new Error(`Digestion enzyme: ${enzyme} is unknown`);\n    }\n}\n//# sourceMappingURL=digestPeptide.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || (function () {\n    var ownKeys = function(o) {\n        ownKeys = Object.getOwnPropertyNames || function (o) {\n            var ar = [];\n            for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n            return ar;\n        };\n        return ownKeys(o);\n    };\n    return function (mod) {\n        if (mod && mod.__esModule) return mod;\n        var result = {};\n        if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n        __setModuleDefault(result, mod);\n        return result;\n    };\n})();\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getInfo = getInfo;\nexports.calculateIEP = calculateIEP;\nexports.calculateIEPChart = calculateIEPChart;\nexports.getColorForIEP = getColorForIEP;\nexports.calculateCharge = calculateCharge;\nconst aminoAcids_1 = require(\"./aminoAcids\");\nconst IEP = __importStar(require(\"./isoElectricPoint\"));\nconst splitPeptide_js_1 = require(\"./splitPeptide.js\");\n__exportStar(require(\"./allowNeutralLoss.js\"), exports);\n__exportStar(require(\"./chargePeptide.js\"), exports);\n__exportStar(require(\"./sequenceToMF.js\"), exports);\n__exportStar(require(\"./generatePeptideFragments.js\"), exports);\n__exportStar(require(\"./digestPeptide.js\"), exports);\n__exportStar(require(\"./splitPeptide.js\"), exports);\nfunction getInfo() {\n    return aminoAcids_1.aminoAcids;\n}\n// sequence should be in the \"right\" format like HAlaGlyProOH\nfunction calculateIEP(sequence) {\n    let aas = (0, splitPeptide_js_1.splitPeptide)(sequence);\n    let result = IEP.calculateIEP(aas);\n    return result;\n}\nfunction calculateIEPChart(sequence) {\n    let aas = (0, splitPeptide_js_1.splitPeptide)(sequence);\n    let result = IEP.calculateChart(aas);\n    return result;\n}\nfunction getColorForIEP(iep) {\n    return IEP.getColor(iep);\n}\nfunction calculateCharge(sequence, ph) {\n    let aas = (0, splitPeptide_js_1.splitPeptide)(sequence);\n    return IEP.calculateCharge(aas, ph);\n}\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fragmentPeptide = fragmentPeptide;\nconst peptide_1 = require(\"peptide\");\nfunction fragmentPeptide(sequence, options = {}) {\n    const { digestion = {}, protonation, fragmentation, protonationPH } = options;\n    sequence = (0, peptide_1.sequenceToMF)(sequence);\n    let fragmentsArray = [sequence];\n    // do we also have some digest fragments ?\n    if (digestion.enzyme) {\n        let digests = (0, peptide_1.digestPeptide)(sequence, digestion);\n        if (protonation) {\n            digests = (0, peptide_1.chargePeptide)(digests, {\n                pH: protonationPH,\n            });\n        }\n        fragmentsArray = fragmentsArray.concat(digests);\n    }\n    // allow neutral loss\n    if (options.allowNeutralLoss) {\n        sequence = (0, peptide_1.allowNeutralLoss)(sequence);\n    }\n    // apply protonation\n    if (protonation) {\n        sequence = (0, peptide_1.chargePeptide)(sequence, { pH: protonationPH });\n    }\n    // calculate fragmentation\n    let fragments = (0, peptide_1.generatePeptideFragments)(sequence, fragmentation);\n    fragmentsArray = fragmentsArray.concat(fragments);\n    return fragmentsArray;\n}\n//# sourceMappingURL=fragmentPeptide.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fromPeptidicSequence = fromPeptidicSequence;\nconst chemical_groups_1 = require(\"chemical-groups\");\nconst mf_generator_1 = require(\"mf-generator\");\nconst fragmentPeptide_1 = require(\"./util/fragmentPeptide\");\n/**\n * Add a database starting from a peptidic sequence\n *\n * @param {string}         [sequences] Sequence as a string of 1 letter or 3 letters code. Could also be a correct molecular formula respecting uppercase, lowercase. It can be comma separated if you have many peptide sequences\n * @param {object}         [options={}]\n * @param {boolean}        [options.estimate=false] - estimate the number of MF without filters\n * @param {string}         [options.ionizations='']\n * @param {function}       [options.onStep] - Callback to do after each step\n * @param {array}          [options.mfsArray=[]]\n * @param {boolean}        [options.protonation=false]\n * @param {number}         [options.protonationPH=7]\n * @param {boolean}        [options.allowNeutralLoss=false]\n * @param {number}         [options.limit=100000]\n *\n * @param {object}         [options.digestion={}] Object defining options for digestion\n * @param {number}         [options.digestion.minMissed=0] Minimal number of allowed missed cleavage\n * @param {number}         [options.digestion.maxMissed=0] Maximal number of allowed missed cleavage\n * @param {number}         [options.digestion.minResidue=0] Minimal number of residues\n * @param {number}         [options.digestion.maxResidue=+Infinity] Maximal number of residues\n * @param {string}         [options.digestion.enzyme] Mandatory field containing the name of the enzyme among: chymotrypsin, trypsin, glucph4, glucph8, thermolysin, cyanogenbromide\n *\n * @param {object}         [options.fragmentation={}] Object defining options for fragmentation\n * @param {boolean}        [options.fragmentation.a=false] If true allow fragments of type 'a'\n * @param {boolean}        [options.fragmentation.b=false] If true allow fragments of type 'b'\n * @param {boolean}        [options.fragmentation.c=false] If true allow fragments of type 'c'\n * @param {boolean}        [options.fragmentation.x=false] If true allow fragments of type 'x'\n * @param {boolean}        [options.fragmentation.y=false] If true allow fragments of type 'y'\n * @param {boolean}        [options.fragmentation.z=false] If true allow fragments of type 'z'\n * @param {boolean}        [options.fragmentation.ya=false] If true allow fragments of type 'ya'\n * @param {boolean}        [options.fragmentation.yb=false] If true allow fragments of type 'yb'\n * @param {boolean}        [options.fragmentation.yc=false] If true allow fragments of type 'yc'\n * @param {boolean}        [options.fragmentation.zc=false] If true allow fragments of type 'zc'\n * @param {number}         [options.fragmentation.minInternal=0] Minimal internal fragment length\n * @param {number}         [options.fragmentation.maxInternal=+Infinity] Maximal internal fragment length\n *\n * @param {object}         [options.filter={}] Object defining options for molecular formula filter\n * @param {number}         [options.filter.precision=1000] - The precision on the experimental mass\n * @param {number}         [options.filter.targetMass] - Target mass, allows to calculate error and filter results\n * @param {number[]}       [options.filter.targetMasses] - Target masses: SORTED array of numbers\n * @param {number[]}       [options.filter.targetIntensities] - Target intensities: SORTED array of numbers\n * @param {number}         [options.filter.minEM=0] - Minimal neutral monoisotopic mass\n * @param {number}         [options.filter.maxEM=+Infinity] - Maximal neutral monoisotopic mass\n * @param {number}         [options.filter.minMSEM=0] - Minimal observed monoisotopic mass\n * @param {number}         [options.filter.maxMSEM=+Infinity] - Maximal observed monoisotopic mass\n * @param {number}         [options.filter.minCharge=-Infinity] - Minimal charge\n * @param {number}         [options.filter.maxCharge=+Infinity] - Maximal charge\n * @param {boolean}        [options.filter.absoluteCharge=false] - If true, the charge is absolute (so between 0 and +Infinity by default)\n * @param {object}         [options.filter.unsaturation={}]\n * @param {number}         [options.filter.unsaturation.min=-Infinity] - Minimal unsaturation\n * @param {number}         [options.filter.unsaturation.max=+Infinity] - Maximal unsaturation\n * @param {boolean}        [options.filter.unsaturation.onlyInteger=false] - Integer unsaturation\n * @param {boolean}        [options.filter.unsaturation.onlyNonInteger=false] - Non integer unsaturation\n * @param {function}       [options.filter.callback] - a function to filter the MF\n * @returns {Promise}\n */\nasync function fromPeptidicSequence(sequences, options = {}) {\n    const { digestion = {}, mfsArray: originalMFsArray = [], allowNeutralLoss = false, protonation = false, protonationPH = 7, fragmentation = {}, filter = {}, ionizations = '', limit = 100000, estimate = false, onStep, links = {}, } = options;\n    const hasLinked = sequences.includes('#');\n    const mfsArrayLinked = structuredClone(originalMFsArray);\n    const mfsArrayUnlinked = structuredClone(originalMFsArray);\n    const unlinked = [];\n    mfsArrayUnlinked.push(unlinked);\n    for (const sequence of sequences.split(/[,:]/)) {\n        let fragmentsArray = (0, fragmentPeptide_1.fragmentPeptide)(sequence, {\n            digestion,\n            protonation,\n            fragmentation,\n            protonationPH,\n            allowNeutralLoss,\n        });\n        mfsArrayLinked.push(fragmentsArray.filter((fragment) => fragment.includes('#')));\n        unlinked.push(...fragmentsArray.filter((fragment) => !fragment.includes('#')));\n    }\n    let combined = await (0, mf_generator_1.generateMFs)(mfsArrayUnlinked, {\n        ionizations,\n        filter,\n        estimate,\n        limit,\n        onStep,\n        links,\n    });\n    if (hasLinked) {\n        combined.push(...(await (0, mf_generator_1.generateMFs)(mfsArrayLinked, {\n            ionizations,\n            filter,\n            estimate,\n            limit,\n            onStep,\n            links,\n        })));\n    }\n    if (!estimate) {\n        for (const result of combined) {\n            result.sequence = (0, chemical_groups_1.groupsToSequence)(result.parts.filter(Boolean).join(' '));\n        }\n    }\n    return combined;\n}\n//# sourceMappingURL=fromPeptidicSequence.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fromRange = fromRange;\nconst mf_generator_1 = require(\"mf-generator\");\n/**\n * Generates a database 'generated' from an array of molecular formula\n * @param {string} rangesString - a string representing the range to search\n * @param {object} [options={}]\n * @param {boolean} [options.estimate=false] - estimate the number of MF without filters\n * @param {function} [options.onStep] - Callback to do after each step\n * @param {string} [options.databaseName='generated']\n * @param {number} [options.limit=100000] - Maximum number of results\n * @param {boolean} [options.canonizeMF=true] - Canonize molecular formula\n * @param {boolean} [options.uniqueMFs=true] - Force canonization and make MF unique\n * @param {string} [options.ionizations=''] - Comma separated list of ionizations (to charge the molecule)\n * @param {object} [options.filter={}]\n * @param {number} [options.filter.minMass=0] - Minimal monoisotopic mass\n * @param {number} [options.filter.maxMass=+Infinity] - Maximal monoisotopic mass\n * @param {number} [options.filter.minEM=0] - Minimal neutral monoisotopic mass\n * @param {number} [options.filter.maxEM=+Infinity] - Maximal neutral monoisotopic mass\n * @param {number} [options.filter.minMSEM=0] - Minimal observed monoisotopic mass\n * @param {number} [options.filter.maxMSEM=+Infinity] - Maximal observed monoisotopic mass\n * @param {number} [options.filter.minCharge=-Infinity] - Minimal charge\n * @param {number} [options.filter.maxCharge=+Infinity] - Maximal charge\n * @param {boolean}   [options.filter.absoluteCharge=false] - If true, the charge is absolute (so between 0 and +Infinity by default)\n * @param {object} [options.filter.unsaturation={}]\n * @param {number} [options.filter.unsaturation.min=-Infinity] - Minimal unsaturation\n * @param {number} [options.filter.unsaturation.max=+Infinity] - Maximal unsaturation\n * @param {boolean} [options.filter.unsaturation.onlyInteger=false] - Integer unsaturation\n * @param {boolean} [options.filter.unsaturation.onlyNonInteger=false] - Non integer unsaturation\n * @param {function} [options.filter.callback] - a function to filter the MF\n * @param {object} [options.filter.atoms] - object of atom:{min, max}\n *\n * @returns {Promise} - list of possible molecular formula\n *\n * @example\n * const {EMDB} = require('emdb');\n * let emdb = new EMDB();\n * // semi-columns separated for combination, comma for 'or'\n * emdb.fromRange('C1-10, H1-10; Cl0-1 Br0-1'); // create a database 'generated' combining all possibilies\n * console.log(emdb.get('generated').length); // 80\n */\nasync function fromRange(rangesString, options = {}) {\n    let ranges = rangesString.split(/ *[\\n\\r;] */);\n    for (let i = 0; i < ranges.length; i++) {\n        let range = ranges[i];\n        if (range.includes(',')) {\n            ranges[i] = range.split(/ *, */);\n        }\n    }\n    return (0, mf_generator_1.generateMFs)(ranges, options);\n}\n//# sourceMappingURL=fromRange.js.map","/*!\n\nJSZip v3.10.1 - A JavaScript class for generating and reading zip files\n<http://stuartk.com/jszip>\n\n(c) 2009-2016 Stuart Knightley <stuart [at] stuartk.com>\nDual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown.\n\nJSZip uses the library pako released under the MIT license :\nhttps://github.com/nodeca/pako/blob/main/LICENSE\n*/\n\n!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{(\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this).JSZip=e()}}(function(){return function s(a,o,h){function u(r,e){if(!o[r]){if(!a[r]){var t=\"function\"==typeof require&&require;if(!e&&t)return t(r,!0);if(l)return l(r,!0);var n=new Error(\"Cannot find module '\"+r+\"'\");throw n.code=\"MODULE_NOT_FOUND\",n}var i=o[r]={exports:{}};a[r][0].call(i.exports,function(e){var t=a[r][1][e];return u(t||e)},i,i.exports,s,a,o,h)}return o[r].exports}for(var l=\"function\"==typeof require&&require,e=0;e<h.length;e++)u(h[e]);return u}({1:[function(e,t,r){\"use strict\";var d=e(\"./utils\"),c=e(\"./support\"),p=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";r.encode=function(e){for(var t,r,n,i,s,a,o,h=[],u=0,l=e.length,f=l,c=\"string\"!==d.getTypeOf(e);u<e.length;)f=l-u,n=c?(t=e[u++],r=u<l?e[u++]:0,u<l?e[u++]:0):(t=e.charCodeAt(u++),r=u<l?e.charCodeAt(u++):0,u<l?e.charCodeAt(u++):0),i=t>>2,s=(3&t)<<4|r>>4,a=1<f?(15&r)<<2|n>>6:64,o=2<f?63&n:64,h.push(p.charAt(i)+p.charAt(s)+p.charAt(a)+p.charAt(o));return h.join(\"\")},r.decode=function(e){var t,r,n,i,s,a,o=0,h=0,u=\"data:\";if(e.substr(0,u.length)===u)throw new Error(\"Invalid base64 input, it looks like a data url.\");var l,f=3*(e=e.replace(/[^A-Za-z0-9+/=]/g,\"\")).length/4;if(e.charAt(e.length-1)===p.charAt(64)&&f--,e.charAt(e.length-2)===p.charAt(64)&&f--,f%1!=0)throw new Error(\"Invalid base64 input, bad content length.\");for(l=c.uint8array?new Uint8Array(0|f):new Array(0|f);o<e.length;)t=p.indexOf(e.charAt(o++))<<2|(i=p.indexOf(e.charAt(o++)))>>4,r=(15&i)<<4|(s=p.indexOf(e.charAt(o++)))>>2,n=(3&s)<<6|(a=p.indexOf(e.charAt(o++))),l[h++]=t,64!==s&&(l[h++]=r),64!==a&&(l[h++]=n);return l}},{\"./support\":30,\"./utils\":32}],2:[function(e,t,r){\"use strict\";var n=e(\"./external\"),i=e(\"./stream/DataWorker\"),s=e(\"./stream/Crc32Probe\"),a=e(\"./stream/DataLengthProbe\");function o(e,t,r,n,i){this.compressedSize=e,this.uncompressedSize=t,this.crc32=r,this.compression=n,this.compressedContent=i}o.prototype={getContentWorker:function(){var e=new i(n.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new a(\"data_length\")),t=this;return e.on(\"end\",function(){if(this.streamInfo.data_length!==t.uncompressedSize)throw new Error(\"Bug : uncompressed data size mismatch\")}),e},getCompressedWorker:function(){return new i(n.Promise.resolve(this.compressedContent)).withStreamInfo(\"compressedSize\",this.compressedSize).withStreamInfo(\"uncompressedSize\",this.uncompressedSize).withStreamInfo(\"crc32\",this.crc32).withStreamInfo(\"compression\",this.compression)}},o.createWorkerFrom=function(e,t,r){return e.pipe(new s).pipe(new a(\"uncompressedSize\")).pipe(t.compressWorker(r)).pipe(new a(\"compressedSize\")).withStreamInfo(\"compression\",t)},t.exports=o},{\"./external\":6,\"./stream/Crc32Probe\":25,\"./stream/DataLengthProbe\":26,\"./stream/DataWorker\":27}],3:[function(e,t,r){\"use strict\";var n=e(\"./stream/GenericWorker\");r.STORE={magic:\"\\0\\0\",compressWorker:function(){return new n(\"STORE compression\")},uncompressWorker:function(){return new n(\"STORE decompression\")}},r.DEFLATE=e(\"./flate\")},{\"./flate\":7,\"./stream/GenericWorker\":28}],4:[function(e,t,r){\"use strict\";var n=e(\"./utils\");var o=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t){return void 0!==e&&e.length?\"string\"!==n.getTypeOf(e)?function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a<s;a++)e=e>>>8^i[255&(e^t[a])];return-1^e}(0|t,e,e.length,0):function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a<s;a++)e=e>>>8^i[255&(e^t.charCodeAt(a))];return-1^e}(0|t,e,e.length,0):0}},{\"./utils\":32}],5:[function(e,t,r){\"use strict\";r.base64=!1,r.binary=!1,r.dir=!1,r.createFolders=!0,r.date=null,r.compression=null,r.compressionOptions=null,r.comment=null,r.unixPermissions=null,r.dosPermissions=null},{}],6:[function(e,t,r){\"use strict\";var n=null;n=\"undefined\"!=typeof Promise?Promise:e(\"lie\"),t.exports={Promise:n}},{lie:37}],7:[function(e,t,r){\"use strict\";var n=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Uint32Array,i=e(\"pako\"),s=e(\"./utils\"),a=e(\"./stream/GenericWorker\"),o=n?\"uint8array\":\"array\";function h(e,t){a.call(this,\"FlateWorker/\"+e),this._pako=null,this._pakoAction=e,this._pakoOptions=t,this.meta={}}r.magic=\"\\b\\0\",s.inherits(h,a),h.prototype.processChunk=function(e){this.meta=e.meta,null===this._pako&&this._createPako(),this._pako.push(s.transformTo(o,e.data),!1)},h.prototype.flush=function(){a.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},h.prototype.cleanUp=function(){a.prototype.cleanUp.call(this),this._pako=null},h.prototype._createPako=function(){this._pako=new i[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var t=this;this._pako.onData=function(e){t.push({data:e,meta:t.meta})}},r.compressWorker=function(e){return new h(\"Deflate\",e)},r.uncompressWorker=function(){return new h(\"Inflate\",{})}},{\"./stream/GenericWorker\":28,\"./utils\":32,pako:38}],8:[function(e,t,r){\"use strict\";function A(e,t){var r,n=\"\";for(r=0;r<t;r++)n+=String.fromCharCode(255&e),e>>>=8;return n}function n(e,t,r,n,i,s){var a,o,h=e.file,u=e.compression,l=s!==O.utf8encode,f=I.transformTo(\"string\",s(h.name)),c=I.transformTo(\"string\",O.utf8encode(h.name)),d=h.comment,p=I.transformTo(\"string\",s(d)),m=I.transformTo(\"string\",O.utf8encode(d)),_=c.length!==h.name.length,g=m.length!==d.length,b=\"\",v=\"\",y=\"\",w=h.dir,k=h.date,x={crc32:0,compressedSize:0,uncompressedSize:0};t&&!r||(x.crc32=e.crc32,x.compressedSize=e.compressedSize,x.uncompressedSize=e.uncompressedSize);var S=0;t&&(S|=8),l||!_&&!g||(S|=2048);var z=0,C=0;w&&(z|=16),\"UNIX\"===i?(C=798,z|=function(e,t){var r=e;return e||(r=t?16893:33204),(65535&r)<<16}(h.unixPermissions,w)):(C=20,z|=function(e){return 63&(e||0)}(h.dosPermissions)),a=k.getUTCHours(),a<<=6,a|=k.getUTCMinutes(),a<<=5,a|=k.getUTCSeconds()/2,o=k.getUTCFullYear()-1980,o<<=4,o|=k.getUTCMonth()+1,o<<=5,o|=k.getUTCDate(),_&&(v=A(1,1)+A(B(f),4)+c,b+=\"up\"+A(v.length,2)+v),g&&(y=A(1,1)+A(B(p),4)+m,b+=\"uc\"+A(y.length,2)+y);var E=\"\";return E+=\"\\n\\0\",E+=A(S,2),E+=u.magic,E+=A(a,2),E+=A(o,2),E+=A(x.crc32,4),E+=A(x.compressedSize,4),E+=A(x.uncompressedSize,4),E+=A(f.length,2),E+=A(b.length,2),{fileRecord:R.LOCAL_FILE_HEADER+E+f+b,dirRecord:R.CENTRAL_FILE_HEADER+A(C,2)+E+A(p.length,2)+\"\\0\\0\\0\\0\"+A(z,4)+A(n,4)+f+b+p}}var I=e(\"../utils\"),i=e(\"../stream/GenericWorker\"),O=e(\"../utf8\"),B=e(\"../crc32\"),R=e(\"../signature\");function s(e,t,r,n){i.call(this,\"ZipFileWorker\"),this.bytesWritten=0,this.zipComment=t,this.zipPlatform=r,this.encodeFileName=n,this.streamFiles=e,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}I.inherits(s,i),s.prototype.push=function(e){var t=e.meta.percent||0,r=this.entriesCount,n=this._sources.length;this.accumulate?this.contentBuffer.push(e):(this.bytesWritten+=e.data.length,i.prototype.push.call(this,{data:e.data,meta:{currentFile:this.currentFile,percent:r?(t+100*(r-n-1))/r:100}}))},s.prototype.openedSource=function(e){this.currentSourceOffset=this.bytesWritten,this.currentFile=e.file.name;var t=this.streamFiles&&!e.file.dir;if(t){var r=n(e,t,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:r.fileRecord,meta:{percent:0}})}else this.accumulate=!0},s.prototype.closedSource=function(e){this.accumulate=!1;var t=this.streamFiles&&!e.file.dir,r=n(e,t,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(r.dirRecord),t)this.push({data:function(e){return R.DATA_DESCRIPTOR+A(e.crc32,4)+A(e.compressedSize,4)+A(e.uncompressedSize,4)}(e),meta:{percent:100}});else for(this.push({data:r.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},s.prototype.flush=function(){for(var e=this.bytesWritten,t=0;t<this.dirRecords.length;t++)this.push({data:this.dirRecords[t],meta:{percent:100}});var r=this.bytesWritten-e,n=function(e,t,r,n,i){var s=I.transformTo(\"string\",i(n));return R.CENTRAL_DIRECTORY_END+\"\\0\\0\\0\\0\"+A(e,2)+A(e,2)+A(t,4)+A(r,4)+A(s.length,2)+s}(this.dirRecords.length,r,e,this.zipComment,this.encodeFileName);this.push({data:n,meta:{percent:100}})},s.prototype.prepareNextSource=function(){this.previous=this._sources.shift(),this.openedSource(this.previous.streamInfo),this.isPaused?this.previous.pause():this.previous.resume()},s.prototype.registerPrevious=function(e){this._sources.push(e);var t=this;return e.on(\"data\",function(e){t.processChunk(e)}),e.on(\"end\",function(){t.closedSource(t.previous.streamInfo),t._sources.length?t.prepareNextSource():t.end()}),e.on(\"error\",function(e){t.error(e)}),this},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(!this.previous&&this._sources.length?(this.prepareNextSource(),!0):this.previous||this._sources.length||this.generatedError?void 0:(this.end(),!0))},s.prototype.error=function(e){var t=this._sources;if(!i.prototype.error.call(this,e))return!1;for(var r=0;r<t.length;r++)try{t[r].error(e)}catch(e){}return!0},s.prototype.lock=function(){i.prototype.lock.call(this);for(var e=this._sources,t=0;t<e.length;t++)e[t].lock()},t.exports=s},{\"../crc32\":4,\"../signature\":23,\"../stream/GenericWorker\":28,\"../utf8\":31,\"../utils\":32}],9:[function(e,t,r){\"use strict\";var u=e(\"../compressions\"),n=e(\"./ZipFileWorker\");r.generateWorker=function(e,a,t){var o=new n(a.streamFiles,t,a.platform,a.encodeFileName),h=0;try{e.forEach(function(e,t){h++;var r=function(e,t){var r=e||t,n=u[r];if(!n)throw new Error(r+\" is not a valid compression method !\");return n}(t.options.compression,a.compression),n=t.options.compressionOptions||a.compressionOptions||{},i=t.dir,s=t.date;t._compressWorker(r,n).withStreamInfo(\"file\",{name:e,dir:i,date:s,comment:t.comment||\"\",unixPermissions:t.unixPermissions,dosPermissions:t.dosPermissions}).pipe(o)}),o.entriesCount=h}catch(e){o.error(e)}return o}},{\"../compressions\":3,\"./ZipFileWorker\":8}],10:[function(e,t,r){\"use strict\";function n(){if(!(this instanceof n))return new n;if(arguments.length)throw new Error(\"The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.\");this.files=Object.create(null),this.comment=null,this.root=\"\",this.clone=function(){var e=new n;for(var t in this)\"function\"!=typeof this[t]&&(e[t]=this[t]);return e}}(n.prototype=e(\"./object\")).loadAsync=e(\"./load\"),n.support=e(\"./support\"),n.defaults=e(\"./defaults\"),n.version=\"3.10.1\",n.loadAsync=function(e,t){return(new n).loadAsync(e,t)},n.external=e(\"./external\"),t.exports=n},{\"./defaults\":5,\"./external\":6,\"./load\":11,\"./object\":15,\"./support\":30}],11:[function(e,t,r){\"use strict\";var u=e(\"./utils\"),i=e(\"./external\"),n=e(\"./utf8\"),s=e(\"./zipEntries\"),a=e(\"./stream/Crc32Probe\"),l=e(\"./nodejsUtils\");function f(n){return new i.Promise(function(e,t){var r=n.decompressed.getContentWorker().pipe(new a);r.on(\"error\",function(e){t(e)}).on(\"end\",function(){r.streamInfo.crc32!==n.decompressed.crc32?t(new Error(\"Corrupted zip : CRC32 mismatch\")):e()}).resume()})}t.exports=function(e,o){var h=this;return o=u.extend(o||{},{base64:!1,checkCRC32:!1,optimizedBinaryString:!1,createFolders:!1,decodeFileName:n.utf8decode}),l.isNode&&l.isStream(e)?i.Promise.reject(new Error(\"JSZip can't accept a stream when loading a zip file.\")):u.prepareContent(\"the loaded zip file\",e,!0,o.optimizedBinaryString,o.base64).then(function(e){var t=new s(o);return t.load(e),t}).then(function(e){var t=[i.Promise.resolve(e)],r=e.files;if(o.checkCRC32)for(var n=0;n<r.length;n++)t.push(f(r[n]));return i.Promise.all(t)}).then(function(e){for(var t=e.shift(),r=t.files,n=0;n<r.length;n++){var i=r[n],s=i.fileNameStr,a=u.resolve(i.fileNameStr);h.file(a,i.decompressed,{binary:!0,optimizedBinaryString:!0,date:i.date,dir:i.dir,comment:i.fileCommentStr.length?i.fileCommentStr:null,unixPermissions:i.unixPermissions,dosPermissions:i.dosPermissions,createFolders:o.createFolders}),i.dir||(h.file(a).unsafeOriginalName=s)}return t.zipComment.length&&(h.comment=t.zipComment),h})}},{\"./external\":6,\"./nodejsUtils\":14,\"./stream/Crc32Probe\":25,\"./utf8\":31,\"./utils\":32,\"./zipEntries\":33}],12:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"../stream/GenericWorker\");function s(e,t){i.call(this,\"Nodejs stream input adapter for \"+e),this._upstreamEnded=!1,this._bindStream(t)}n.inherits(s,i),s.prototype._bindStream=function(e){var t=this;(this._stream=e).pause(),e.on(\"data\",function(e){t.push({data:e,meta:{percent:0}})}).on(\"error\",function(e){t.isPaused?this.generatedError=e:t.error(e)}).on(\"end\",function(){t.isPaused?t._upstreamEnded=!0:t.end()})},s.prototype.pause=function(){return!!i.prototype.pause.call(this)&&(this._stream.pause(),!0)},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(this._upstreamEnded?this.end():this._stream.resume(),!0)},t.exports=s},{\"../stream/GenericWorker\":28,\"../utils\":32}],13:[function(e,t,r){\"use strict\";var i=e(\"readable-stream\").Readable;function n(e,t,r){i.call(this,t),this._helper=e;var n=this;e.on(\"data\",function(e,t){n.push(e)||n._helper.pause(),r&&r(t)}).on(\"error\",function(e){n.emit(\"error\",e)}).on(\"end\",function(){n.push(null)})}e(\"../utils\").inherits(n,i),n.prototype._read=function(){this._helper.resume()},t.exports=n},{\"../utils\":32,\"readable-stream\":16}],14:[function(e,t,r){\"use strict\";t.exports={isNode:\"undefined\"!=typeof Buffer,newBufferFrom:function(e,t){if(Buffer.from&&Buffer.from!==Uint8Array.from)return Buffer.from(e,t);if(\"number\"==typeof e)throw new Error('The \"data\" argument must not be a number');return new Buffer(e,t)},allocBuffer:function(e){if(Buffer.alloc)return Buffer.alloc(e);var t=new Buffer(e);return t.fill(0),t},isBuffer:function(e){return Buffer.isBuffer(e)},isStream:function(e){return e&&\"function\"==typeof e.on&&\"function\"==typeof e.pause&&\"function\"==typeof e.resume}}},{}],15:[function(e,t,r){\"use strict\";function s(e,t,r){var n,i=u.getTypeOf(t),s=u.extend(r||{},f);s.date=s.date||new Date,null!==s.compression&&(s.compression=s.compression.toUpperCase()),\"string\"==typeof s.unixPermissions&&(s.unixPermissions=parseInt(s.unixPermissions,8)),s.unixPermissions&&16384&s.unixPermissions&&(s.dir=!0),s.dosPermissions&&16&s.dosPermissions&&(s.dir=!0),s.dir&&(e=g(e)),s.createFolders&&(n=_(e))&&b.call(this,n,!0);var a=\"string\"===i&&!1===s.binary&&!1===s.base64;r&&void 0!==r.binary||(s.binary=!a),(t instanceof c&&0===t.uncompressedSize||s.dir||!t||0===t.length)&&(s.base64=!1,s.binary=!0,t=\"\",s.compression=\"STORE\",i=\"string\");var o=null;o=t instanceof c||t instanceof l?t:p.isNode&&p.isStream(t)?new m(e,t):u.prepareContent(e,t,s.binary,s.optimizedBinaryString,s.base64);var h=new d(e,o,s);this.files[e]=h}var i=e(\"./utf8\"),u=e(\"./utils\"),l=e(\"./stream/GenericWorker\"),a=e(\"./stream/StreamHelper\"),f=e(\"./defaults\"),c=e(\"./compressedObject\"),d=e(\"./zipObject\"),o=e(\"./generate\"),p=e(\"./nodejsUtils\"),m=e(\"./nodejs/NodejsStreamInputAdapter\"),_=function(e){\"/\"===e.slice(-1)&&(e=e.substring(0,e.length-1));var t=e.lastIndexOf(\"/\");return 0<t?e.substring(0,t):\"\"},g=function(e){return\"/\"!==e.slice(-1)&&(e+=\"/\"),e},b=function(e,t){return t=void 0!==t?t:f.createFolders,e=g(e),this.files[e]||s.call(this,e,null,{dir:!0,createFolders:t}),this.files[e]};function h(e){return\"[object RegExp]\"===Object.prototype.toString.call(e)}var n={load:function(){throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\")},forEach:function(e){var t,r,n;for(t in this.files)n=this.files[t],(r=t.slice(this.root.length,t.length))&&t.slice(0,this.root.length)===this.root&&e(r,n)},filter:function(r){var n=[];return this.forEach(function(e,t){r(e,t)&&n.push(t)}),n},file:function(e,t,r){if(1!==arguments.length)return e=this.root+e,s.call(this,e,t,r),this;if(h(e)){var n=e;return this.filter(function(e,t){return!t.dir&&n.test(e)})}var i=this.files[this.root+e];return i&&!i.dir?i:null},folder:function(r){if(!r)return this;if(h(r))return this.filter(function(e,t){return t.dir&&r.test(e)});var e=this.root+r,t=b.call(this,e),n=this.clone();return n.root=t.name,n},remove:function(r){r=this.root+r;var e=this.files[r];if(e||(\"/\"!==r.slice(-1)&&(r+=\"/\"),e=this.files[r]),e&&!e.dir)delete this.files[r];else for(var t=this.filter(function(e,t){return t.name.slice(0,r.length)===r}),n=0;n<t.length;n++)delete this.files[t[n].name];return this},generate:function(){throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\")},generateInternalStream:function(e){var t,r={};try{if((r=u.extend(e||{},{streamFiles:!1,compression:\"STORE\",compressionOptions:null,type:\"\",platform:\"DOS\",comment:null,mimeType:\"application/zip\",encodeFileName:i.utf8encode})).type=r.type.toLowerCase(),r.compression=r.compression.toUpperCase(),\"binarystring\"===r.type&&(r.type=\"string\"),!r.type)throw new Error(\"No output type specified.\");u.checkSupport(r.type),\"darwin\"!==r.platform&&\"freebsd\"!==r.platform&&\"linux\"!==r.platform&&\"sunos\"!==r.platform||(r.platform=\"UNIX\"),\"win32\"===r.platform&&(r.platform=\"DOS\");var n=r.comment||this.comment||\"\";t=o.generateWorker(this,r,n)}catch(e){(t=new l(\"error\")).error(e)}return new a(t,r.type||\"string\",r.mimeType)},generateAsync:function(e,t){return this.generateInternalStream(e).accumulate(t)},generateNodeStream:function(e,t){return(e=e||{}).type||(e.type=\"nodebuffer\"),this.generateInternalStream(e).toNodejsStream(t)}};t.exports=n},{\"./compressedObject\":2,\"./defaults\":5,\"./generate\":9,\"./nodejs/NodejsStreamInputAdapter\":12,\"./nodejsUtils\":14,\"./stream/GenericWorker\":28,\"./stream/StreamHelper\":29,\"./utf8\":31,\"./utils\":32,\"./zipObject\":35}],16:[function(e,t,r){\"use strict\";t.exports=e(\"stream\")},{stream:void 0}],17:[function(e,t,r){\"use strict\";var n=e(\"./DataReader\");function i(e){n.call(this,e);for(var t=0;t<this.data.length;t++)e[t]=255&e[t]}e(\"../utils\").inherits(i,n),i.prototype.byteAt=function(e){return this.data[this.zero+e]},i.prototype.lastIndexOfSignature=function(e){for(var t=e.charCodeAt(0),r=e.charCodeAt(1),n=e.charCodeAt(2),i=e.charCodeAt(3),s=this.length-4;0<=s;--s)if(this.data[s]===t&&this.data[s+1]===r&&this.data[s+2]===n&&this.data[s+3]===i)return s-this.zero;return-1},i.prototype.readAndCheckSignature=function(e){var t=e.charCodeAt(0),r=e.charCodeAt(1),n=e.charCodeAt(2),i=e.charCodeAt(3),s=this.readData(4);return t===s[0]&&r===s[1]&&n===s[2]&&i===s[3]},i.prototype.readData=function(e){if(this.checkOffset(e),0===e)return[];var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./DataReader\":18}],18:[function(e,t,r){\"use strict\";var n=e(\"../utils\");function i(e){this.data=e,this.length=e.length,this.index=0,this.zero=0}i.prototype={checkOffset:function(e){this.checkIndex(this.index+e)},checkIndex:function(e){if(this.length<this.zero+e||e<0)throw new Error(\"End of data reached (data length = \"+this.length+\", asked index = \"+e+\"). Corrupted zip ?\")},setIndex:function(e){this.checkIndex(e),this.index=e},skip:function(e){this.setIndex(this.index+e)},byteAt:function(){},readInt:function(e){var t,r=0;for(this.checkOffset(e),t=this.index+e-1;t>=this.index;t--)r=(r<<8)+this.byteAt(t);return this.index+=e,r},readString:function(e){return n.transformTo(\"string\",this.readData(e))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var e=this.readInt(4);return new Date(Date.UTC(1980+(e>>25&127),(e>>21&15)-1,e>>16&31,e>>11&31,e>>5&63,(31&e)<<1))}},t.exports=i},{\"../utils\":32}],19:[function(e,t,r){\"use strict\";var n=e(\"./Uint8ArrayReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./Uint8ArrayReader\":21}],20:[function(e,t,r){\"use strict\";var n=e(\"./DataReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.byteAt=function(e){return this.data.charCodeAt(this.zero+e)},i.prototype.lastIndexOfSignature=function(e){return this.data.lastIndexOf(e)-this.zero},i.prototype.readAndCheckSignature=function(e){return e===this.readData(4)},i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./DataReader\":18}],21:[function(e,t,r){\"use strict\";var n=e(\"./ArrayReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.readData=function(e){if(this.checkOffset(e),0===e)return new Uint8Array(0);var t=this.data.subarray(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./ArrayReader\":17}],22:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"../support\"),s=e(\"./ArrayReader\"),a=e(\"./StringReader\"),o=e(\"./NodeBufferReader\"),h=e(\"./Uint8ArrayReader\");t.exports=function(e){var t=n.getTypeOf(e);return n.checkSupport(t),\"string\"!==t||i.uint8array?\"nodebuffer\"===t?new o(e):i.uint8array?new h(n.transformTo(\"uint8array\",e)):new s(n.transformTo(\"array\",e)):new a(e)}},{\"../support\":30,\"../utils\":32,\"./ArrayReader\":17,\"./NodeBufferReader\":19,\"./StringReader\":20,\"./Uint8ArrayReader\":21}],23:[function(e,t,r){\"use strict\";r.LOCAL_FILE_HEADER=\"PK\u0003\u0004\",r.CENTRAL_FILE_HEADER=\"PK\u0001\u0002\",r.CENTRAL_DIRECTORY_END=\"PK\u0005\u0006\",r.ZIP64_CENTRAL_DIRECTORY_LOCATOR=\"PK\u0006\u0007\",r.ZIP64_CENTRAL_DIRECTORY_END=\"PK\u0006\u0006\",r.DATA_DESCRIPTOR=\"PK\u0007\\b\"},{}],24:[function(e,t,r){\"use strict\";var n=e(\"./GenericWorker\"),i=e(\"../utils\");function s(e){n.call(this,\"ConvertWorker to \"+e),this.destType=e}i.inherits(s,n),s.prototype.processChunk=function(e){this.push({data:i.transformTo(this.destType,e.data),meta:e.meta})},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],25:[function(e,t,r){\"use strict\";var n=e(\"./GenericWorker\"),i=e(\"../crc32\");function s(){n.call(this,\"Crc32Probe\"),this.withStreamInfo(\"crc32\",0)}e(\"../utils\").inherits(s,n),s.prototype.processChunk=function(e){this.streamInfo.crc32=i(e.data,this.streamInfo.crc32||0),this.push(e)},t.exports=s},{\"../crc32\":4,\"../utils\":32,\"./GenericWorker\":28}],26:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"./GenericWorker\");function s(e){i.call(this,\"DataLengthProbe for \"+e),this.propName=e,this.withStreamInfo(e,0)}n.inherits(s,i),s.prototype.processChunk=function(e){if(e){var t=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=t+e.data.length}i.prototype.processChunk.call(this,e)},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],27:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"./GenericWorker\");function s(e){i.call(this,\"DataWorker\");var t=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type=\"\",this._tickScheduled=!1,e.then(function(e){t.dataIsReady=!0,t.data=e,t.max=e&&e.length||0,t.type=n.getTypeOf(e),t.isPaused||t._tickAndRepeat()},function(e){t.error(e)})}n.inherits(s,i),s.prototype.cleanUp=function(){i.prototype.cleanUp.call(this),this.data=null},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,n.delay(this._tickAndRepeat,[],this)),!0)},s.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(n.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},s.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var e=null,t=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case\"string\":e=this.data.substring(this.index,t);break;case\"uint8array\":e=this.data.subarray(this.index,t);break;case\"array\":case\"nodebuffer\":e=this.data.slice(this.index,t)}return this.index=t,this.push({data:e,meta:{percent:this.max?this.index/this.max*100:0}})},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],28:[function(e,t,r){\"use strict\";function n(e){this.name=e||\"default\",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}n.prototype={push:function(e){this.emit(\"data\",e)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit(\"end\"),this.cleanUp(),this.isFinished=!0}catch(e){this.emit(\"error\",e)}return!0},error:function(e){return!this.isFinished&&(this.isPaused?this.generatedError=e:(this.isFinished=!0,this.emit(\"error\",e),this.previous&&this.previous.error(e),this.cleanUp()),!0)},on:function(e,t){return this._listeners[e].push(t),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(e,t){if(this._listeners[e])for(var r=0;r<this._listeners[e].length;r++)this._listeners[e][r].call(this,t)},pipe:function(e){return e.registerPrevious(this)},registerPrevious:function(e){if(this.isLocked)throw new Error(\"The stream '\"+this+\"' has already been used.\");this.streamInfo=e.streamInfo,this.mergeStreamInfo(),this.previous=e;var t=this;return e.on(\"data\",function(e){t.processChunk(e)}),e.on(\"end\",function(){t.end()}),e.on(\"error\",function(e){t.error(e)}),this},pause:function(){return!this.isPaused&&!this.isFinished&&(this.isPaused=!0,this.previous&&this.previous.pause(),!0)},resume:function(){if(!this.isPaused||this.isFinished)return!1;var e=this.isPaused=!1;return this.generatedError&&(this.error(this.generatedError),e=!0),this.previous&&this.previous.resume(),!e},flush:function(){},processChunk:function(e){this.push(e)},withStreamInfo:function(e,t){return this.extraStreamInfo[e]=t,this.mergeStreamInfo(),this},mergeStreamInfo:function(){for(var e in this.extraStreamInfo)Object.prototype.hasOwnProperty.call(this.extraStreamInfo,e)&&(this.streamInfo[e]=this.extraStreamInfo[e])},lock:function(){if(this.isLocked)throw new Error(\"The stream '\"+this+\"' has already been used.\");this.isLocked=!0,this.previous&&this.previous.lock()},toString:function(){var e=\"Worker \"+this.name;return this.previous?this.previous+\" -> \"+e:e}},t.exports=n},{}],29:[function(e,t,r){\"use strict\";var h=e(\"../utils\"),i=e(\"./ConvertWorker\"),s=e(\"./GenericWorker\"),u=e(\"../base64\"),n=e(\"../support\"),a=e(\"../external\"),o=null;if(n.nodestream)try{o=e(\"../nodejs/NodejsStreamOutputAdapter\")}catch(e){}function l(e,o){return new a.Promise(function(t,r){var n=[],i=e._internalType,s=e._outputType,a=e._mimeType;e.on(\"data\",function(e,t){n.push(e),o&&o(t)}).on(\"error\",function(e){n=[],r(e)}).on(\"end\",function(){try{var e=function(e,t,r){switch(e){case\"blob\":return h.newBlob(h.transformTo(\"arraybuffer\",t),r);case\"base64\":return u.encode(t);default:return h.transformTo(e,t)}}(s,function(e,t){var r,n=0,i=null,s=0;for(r=0;r<t.length;r++)s+=t[r].length;switch(e){case\"string\":return t.join(\"\");case\"array\":return Array.prototype.concat.apply([],t);case\"uint8array\":for(i=new Uint8Array(s),r=0;r<t.length;r++)i.set(t[r],n),n+=t[r].length;return i;case\"nodebuffer\":return Buffer.concat(t);default:throw new Error(\"concat : unsupported type '\"+e+\"'\")}}(i,n),a);t(e)}catch(e){r(e)}n=[]}).resume()})}function f(e,t,r){var n=t;switch(t){case\"blob\":case\"arraybuffer\":n=\"uint8array\";break;case\"base64\":n=\"string\"}try{this._internalType=n,this._outputType=t,this._mimeType=r,h.checkSupport(n),this._worker=e.pipe(new i(n)),e.lock()}catch(e){this._worker=new s(\"error\"),this._worker.error(e)}}f.prototype={accumulate:function(e){return l(this,e)},on:function(e,t){var r=this;return\"data\"===e?this._worker.on(e,function(e){t.call(r,e.data,e.meta)}):this._worker.on(e,function(){h.delay(t,arguments,r)}),this},resume:function(){return h.delay(this._worker.resume,[],this._worker),this},pause:function(){return this._worker.pause(),this},toNodejsStream:function(e){if(h.checkSupport(\"nodestream\"),\"nodebuffer\"!==this._outputType)throw new Error(this._outputType+\" is not supported by this method\");return new o(this,{objectMode:\"nodebuffer\"!==this._outputType},e)}},t.exports=f},{\"../base64\":1,\"../external\":6,\"../nodejs/NodejsStreamOutputAdapter\":13,\"../support\":30,\"../utils\":32,\"./ConvertWorker\":24,\"./GenericWorker\":28}],30:[function(e,t,r){\"use strict\";if(r.base64=!0,r.array=!0,r.string=!0,r.arraybuffer=\"undefined\"!=typeof ArrayBuffer&&\"undefined\"!=typeof Uint8Array,r.nodebuffer=\"undefined\"!=typeof Buffer,r.uint8array=\"undefined\"!=typeof Uint8Array,\"undefined\"==typeof ArrayBuffer)r.blob=!1;else{var n=new ArrayBuffer(0);try{r.blob=0===new Blob([n],{type:\"application/zip\"}).size}catch(e){try{var i=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);i.append(n),r.blob=0===i.getBlob(\"application/zip\").size}catch(e){r.blob=!1}}}try{r.nodestream=!!e(\"readable-stream\").Readable}catch(e){r.nodestream=!1}},{\"readable-stream\":16}],31:[function(e,t,s){\"use strict\";for(var o=e(\"./utils\"),h=e(\"./support\"),r=e(\"./nodejsUtils\"),n=e(\"./stream/GenericWorker\"),u=new Array(256),i=0;i<256;i++)u[i]=252<=i?6:248<=i?5:240<=i?4:224<=i?3:192<=i?2:1;u[254]=u[254]=1;function a(){n.call(this,\"utf-8 decode\"),this.leftOver=null}function l(){n.call(this,\"utf-8 encode\")}s.utf8encode=function(e){return h.nodebuffer?r.newBufferFrom(e,\"utf-8\"):function(e){var t,r,n,i,s,a=e.length,o=0;for(i=0;i<a;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),o+=r<128?1:r<2048?2:r<65536?3:4;for(t=h.uint8array?new Uint8Array(o):new Array(o),i=s=0;s<o;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),r<128?t[s++]=r:(r<2048?t[s++]=192|r>>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t}(e)},s.utf8decode=function(e){return h.nodebuffer?o.transformTo(\"nodebuffer\",e).toString(\"utf-8\"):function(e){var t,r,n,i,s=e.length,a=new Array(2*s);for(t=r=0;t<s;)if((n=e[t++])<128)a[r++]=n;else if(4<(i=u[n]))a[r++]=65533,t+=i-1;else{for(n&=2===i?31:3===i?15:7;1<i&&t<s;)n=n<<6|63&e[t++],i--;1<i?a[r++]=65533:n<65536?a[r++]=n:(n-=65536,a[r++]=55296|n>>10&1023,a[r++]=56320|1023&n)}return a.length!==r&&(a.subarray?a=a.subarray(0,r):a.length=r),o.applyFromCharCode(a)}(e=o.transformTo(h.uint8array?\"uint8array\":\"array\",e))},o.inherits(a,n),a.prototype.processChunk=function(e){var t=o.transformTo(h.uint8array?\"uint8array\":\"array\",e.data);if(this.leftOver&&this.leftOver.length){if(h.uint8array){var r=t;(t=new Uint8Array(r.length+this.leftOver.length)).set(this.leftOver,0),t.set(r,this.leftOver.length)}else t=this.leftOver.concat(t);this.leftOver=null}var n=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}(t),i=t;n!==t.length&&(h.uint8array?(i=t.subarray(0,n),this.leftOver=t.subarray(n,t.length)):(i=t.slice(0,n),this.leftOver=t.slice(n,t.length))),this.push({data:s.utf8decode(i),meta:e.meta})},a.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:s.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},s.Utf8DecodeWorker=a,o.inherits(l,n),l.prototype.processChunk=function(e){this.push({data:s.utf8encode(e.data),meta:e.meta})},s.Utf8EncodeWorker=l},{\"./nodejsUtils\":14,\"./stream/GenericWorker\":28,\"./support\":30,\"./utils\":32}],32:[function(e,t,a){\"use strict\";var o=e(\"./support\"),h=e(\"./base64\"),r=e(\"./nodejsUtils\"),u=e(\"./external\");function n(e){return e}function l(e,t){for(var r=0;r<e.length;++r)t[r]=255&e.charCodeAt(r);return t}e(\"setimmediate\"),a.newBlob=function(t,r){a.checkSupport(\"blob\");try{return new Blob([t],{type:r})}catch(e){try{var n=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);return n.append(t),n.getBlob(r)}catch(e){throw new Error(\"Bug : can't construct the Blob.\")}}};var i={stringifyByChunk:function(e,t,r){var n=[],i=0,s=e.length;if(s<=r)return String.fromCharCode.apply(null,e);for(;i<s;)\"array\"===t||\"nodebuffer\"===t?n.push(String.fromCharCode.apply(null,e.slice(i,Math.min(i+r,s)))):n.push(String.fromCharCode.apply(null,e.subarray(i,Math.min(i+r,s)))),i+=r;return n.join(\"\")},stringifyByChar:function(e){for(var t=\"\",r=0;r<e.length;r++)t+=String.fromCharCode(e[r]);return t},applyCanBeUsed:{uint8array:function(){try{return o.uint8array&&1===String.fromCharCode.apply(null,new Uint8Array(1)).length}catch(e){return!1}}(),nodebuffer:function(){try{return o.nodebuffer&&1===String.fromCharCode.apply(null,r.allocBuffer(1)).length}catch(e){return!1}}()}};function s(e){var t=65536,r=a.getTypeOf(e),n=!0;if(\"uint8array\"===r?n=i.applyCanBeUsed.uint8array:\"nodebuffer\"===r&&(n=i.applyCanBeUsed.nodebuffer),n)for(;1<t;)try{return i.stringifyByChunk(e,r,t)}catch(e){t=Math.floor(t/2)}return i.stringifyByChar(e)}function f(e,t){for(var r=0;r<e.length;r++)t[r]=e[r];return t}a.applyFromCharCode=s;var c={};c.string={string:n,array:function(e){return l(e,new Array(e.length))},arraybuffer:function(e){return c.string.uint8array(e).buffer},uint8array:function(e){return l(e,new Uint8Array(e.length))},nodebuffer:function(e){return l(e,r.allocBuffer(e.length))}},c.array={string:s,array:n,arraybuffer:function(e){return new Uint8Array(e).buffer},uint8array:function(e){return new Uint8Array(e)},nodebuffer:function(e){return r.newBufferFrom(e)}},c.arraybuffer={string:function(e){return s(new Uint8Array(e))},array:function(e){return f(new Uint8Array(e),new Array(e.byteLength))},arraybuffer:n,uint8array:function(e){return new Uint8Array(e)},nodebuffer:function(e){return r.newBufferFrom(new Uint8Array(e))}},c.uint8array={string:s,array:function(e){return f(e,new Array(e.length))},arraybuffer:function(e){return e.buffer},uint8array:n,nodebuffer:function(e){return r.newBufferFrom(e)}},c.nodebuffer={string:s,array:function(e){return f(e,new Array(e.length))},arraybuffer:function(e){return c.nodebuffer.uint8array(e).buffer},uint8array:function(e){return f(e,new Uint8Array(e.length))},nodebuffer:n},a.transformTo=function(e,t){if(t=t||\"\",!e)return t;a.checkSupport(e);var r=a.getTypeOf(t);return c[r][e](t)},a.resolve=function(e){for(var t=e.split(\"/\"),r=[],n=0;n<t.length;n++){var i=t[n];\".\"===i||\"\"===i&&0!==n&&n!==t.length-1||(\"..\"===i?r.pop():r.push(i))}return r.join(\"/\")},a.getTypeOf=function(e){return\"string\"==typeof e?\"string\":\"[object Array]\"===Object.prototype.toString.call(e)?\"array\":o.nodebuffer&&r.isBuffer(e)?\"nodebuffer\":o.uint8array&&e instanceof Uint8Array?\"uint8array\":o.arraybuffer&&e instanceof ArrayBuffer?\"arraybuffer\":void 0},a.checkSupport=function(e){if(!o[e.toLowerCase()])throw new Error(e+\" is not supported by this platform\")},a.MAX_VALUE_16BITS=65535,a.MAX_VALUE_32BITS=-1,a.pretty=function(e){var t,r,n=\"\";for(r=0;r<(e||\"\").length;r++)n+=\"\\\\x\"+((t=e.charCodeAt(r))<16?\"0\":\"\")+t.toString(16).toUpperCase();return n},a.delay=function(e,t,r){setImmediate(function(){e.apply(r||null,t||[])})},a.inherits=function(e,t){function r(){}r.prototype=t.prototype,e.prototype=new r},a.extend=function(){var e,t,r={};for(e=0;e<arguments.length;e++)for(t in arguments[e])Object.prototype.hasOwnProperty.call(arguments[e],t)&&void 0===r[t]&&(r[t]=arguments[e][t]);return r},a.prepareContent=function(r,e,n,i,s){return u.Promise.resolve(e).then(function(n){return o.blob&&(n instanceof Blob||-1!==[\"[object File]\",\"[object Blob]\"].indexOf(Object.prototype.toString.call(n)))&&\"undefined\"!=typeof FileReader?new u.Promise(function(t,r){var e=new FileReader;e.onload=function(e){t(e.target.result)},e.onerror=function(e){r(e.target.error)},e.readAsArrayBuffer(n)}):n}).then(function(e){var t=a.getTypeOf(e);return t?(\"arraybuffer\"===t?e=a.transformTo(\"uint8array\",e):\"string\"===t&&(s?e=h.decode(e):n&&!0!==i&&(e=function(e){return l(e,o.uint8array?new Uint8Array(e.length):new Array(e.length))}(e))),e):u.Promise.reject(new Error(\"Can't read the data of '\"+r+\"'. Is it in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?\"))})}},{\"./base64\":1,\"./external\":6,\"./nodejsUtils\":14,\"./support\":30,setimmediate:54}],33:[function(e,t,r){\"use strict\";var n=e(\"./reader/readerFor\"),i=e(\"./utils\"),s=e(\"./signature\"),a=e(\"./zipEntry\"),o=e(\"./support\");function h(e){this.files=[],this.loadOptions=e}h.prototype={checkSignature:function(e){if(!this.reader.readAndCheckSignature(e)){this.reader.index-=4;var t=this.reader.readString(4);throw new Error(\"Corrupted zip or bug: unexpected signature (\"+i.pretty(t)+\", expected \"+i.pretty(e)+\")\")}},isSignature:function(e,t){var r=this.reader.index;this.reader.setIndex(e);var n=this.reader.readString(4)===t;return this.reader.setIndex(r),n},readBlockEndOfCentral:function(){this.diskNumber=this.reader.readInt(2),this.diskWithCentralDirStart=this.reader.readInt(2),this.centralDirRecordsOnThisDisk=this.reader.readInt(2),this.centralDirRecords=this.reader.readInt(2),this.centralDirSize=this.reader.readInt(4),this.centralDirOffset=this.reader.readInt(4),this.zipCommentLength=this.reader.readInt(2);var e=this.reader.readData(this.zipCommentLength),t=o.uint8array?\"uint8array\":\"array\",r=i.transformTo(t,e);this.zipComment=this.loadOptions.decodeFileName(r)},readBlockZip64EndOfCentral:function(){this.zip64EndOfCentralSize=this.reader.readInt(8),this.reader.skip(4),this.diskNumber=this.reader.readInt(4),this.diskWithCentralDirStart=this.reader.readInt(4),this.centralDirRecordsOnThisDisk=this.reader.readInt(8),this.centralDirRecords=this.reader.readInt(8),this.centralDirSize=this.reader.readInt(8),this.centralDirOffset=this.reader.readInt(8),this.zip64ExtensibleData={};for(var e,t,r,n=this.zip64EndOfCentralSize-44;0<n;)e=this.reader.readInt(2),t=this.reader.readInt(4),r=this.reader.readData(t),this.zip64ExtensibleData[e]={id:e,length:t,value:r}},readBlockZip64EndOfCentralLocator:function(){if(this.diskWithZip64CentralDirStart=this.reader.readInt(4),this.relativeOffsetEndOfZip64CentralDir=this.reader.readInt(8),this.disksCount=this.reader.readInt(4),1<this.disksCount)throw new Error(\"Multi-volumes zip are not supported\")},readLocalFiles:function(){var e,t;for(e=0;e<this.files.length;e++)t=this.files[e],this.reader.setIndex(t.localHeaderOffset),this.checkSignature(s.LOCAL_FILE_HEADER),t.readLocalPart(this.reader),t.handleUTF8(),t.processAttributes()},readCentralDir:function(){var e;for(this.reader.setIndex(this.centralDirOffset);this.reader.readAndCheckSignature(s.CENTRAL_FILE_HEADER);)(e=new a({zip64:this.zip64},this.loadOptions)).readCentralPart(this.reader),this.files.push(e);if(this.centralDirRecords!==this.files.length&&0!==this.centralDirRecords&&0===this.files.length)throw new Error(\"Corrupted zip or bug: expected \"+this.centralDirRecords+\" records in central dir, got \"+this.files.length)},readEndOfCentral:function(){var e=this.reader.lastIndexOfSignature(s.CENTRAL_DIRECTORY_END);if(e<0)throw!this.isSignature(0,s.LOCAL_FILE_HEADER)?new Error(\"Can't find end of central directory : is this a zip file ? If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html\"):new Error(\"Corrupted zip: can't find end of central directory\");this.reader.setIndex(e);var t=e;if(this.checkSignature(s.CENTRAL_DIRECTORY_END),this.readBlockEndOfCentral(),this.diskNumber===i.MAX_VALUE_16BITS||this.diskWithCentralDirStart===i.MAX_VALUE_16BITS||this.centralDirRecordsOnThisDisk===i.MAX_VALUE_16BITS||this.centralDirRecords===i.MAX_VALUE_16BITS||this.centralDirSize===i.MAX_VALUE_32BITS||this.centralDirOffset===i.MAX_VALUE_32BITS){if(this.zip64=!0,(e=this.reader.lastIndexOfSignature(s.ZIP64_CENTRAL_DIRECTORY_LOCATOR))<0)throw new Error(\"Corrupted zip: can't find the ZIP64 end of central directory locator\");if(this.reader.setIndex(e),this.checkSignature(s.ZIP64_CENTRAL_DIRECTORY_LOCATOR),this.readBlockZip64EndOfCentralLocator(),!this.isSignature(this.relativeOffsetEndOfZip64CentralDir,s.ZIP64_CENTRAL_DIRECTORY_END)&&(this.relativeOffsetEndOfZip64CentralDir=this.reader.lastIndexOfSignature(s.ZIP64_CENTRAL_DIRECTORY_END),this.relativeOffsetEndOfZip64CentralDir<0))throw new Error(\"Corrupted zip: can't find the ZIP64 end of central directory\");this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir),this.checkSignature(s.ZIP64_CENTRAL_DIRECTORY_END),this.readBlockZip64EndOfCentral()}var r=this.centralDirOffset+this.centralDirSize;this.zip64&&(r+=20,r+=12+this.zip64EndOfCentralSize);var n=t-r;if(0<n)this.isSignature(t,s.CENTRAL_FILE_HEADER)||(this.reader.zero=n);else if(n<0)throw new Error(\"Corrupted zip: missing \"+Math.abs(n)+\" bytes.\")},prepareReader:function(e){this.reader=n(e)},load:function(e){this.prepareReader(e),this.readEndOfCentral(),this.readCentralDir(),this.readLocalFiles()}},t.exports=h},{\"./reader/readerFor\":22,\"./signature\":23,\"./support\":30,\"./utils\":32,\"./zipEntry\":34}],34:[function(e,t,r){\"use strict\";var n=e(\"./reader/readerFor\"),s=e(\"./utils\"),i=e(\"./compressedObject\"),a=e(\"./crc32\"),o=e(\"./utf8\"),h=e(\"./compressions\"),u=e(\"./support\");function l(e,t){this.options=e,this.loadOptions=t}l.prototype={isEncrypted:function(){return 1==(1&this.bitFlag)},useUTF8:function(){return 2048==(2048&this.bitFlag)},readLocalPart:function(e){var t,r;if(e.skip(22),this.fileNameLength=e.readInt(2),r=e.readInt(2),this.fileName=e.readData(this.fileNameLength),e.skip(r),-1===this.compressedSize||-1===this.uncompressedSize)throw new Error(\"Bug or corrupted zip : didn't get enough information from the central directory (compressedSize === -1 || uncompressedSize === -1)\");if(null===(t=function(e){for(var t in h)if(Object.prototype.hasOwnProperty.call(h,t)&&h[t].magic===e)return h[t];return null}(this.compressionMethod)))throw new Error(\"Corrupted zip : compression \"+s.pretty(this.compressionMethod)+\" unknown (inner file : \"+s.transformTo(\"string\",this.fileName)+\")\");this.decompressed=new i(this.compressedSize,this.uncompressedSize,this.crc32,t,e.readData(this.compressedSize))},readCentralPart:function(e){this.versionMadeBy=e.readInt(2),e.skip(2),this.bitFlag=e.readInt(2),this.compressionMethod=e.readString(2),this.date=e.readDate(),this.crc32=e.readInt(4),this.compressedSize=e.readInt(4),this.uncompressedSize=e.readInt(4);var t=e.readInt(2);if(this.extraFieldsLength=e.readInt(2),this.fileCommentLength=e.readInt(2),this.diskNumberStart=e.readInt(2),this.internalFileAttributes=e.readInt(2),this.externalFileAttributes=e.readInt(4),this.localHeaderOffset=e.readInt(4),this.isEncrypted())throw new Error(\"Encrypted zip are not supported\");e.skip(t),this.readExtraFields(e),this.parseZIP64ExtraField(e),this.fileComment=e.readData(this.fileCommentLength)},processAttributes:function(){this.unixPermissions=null,this.dosPermissions=null;var e=this.versionMadeBy>>8;this.dir=!!(16&this.externalFileAttributes),0==e&&(this.dosPermissions=63&this.externalFileAttributes),3==e&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||\"/\"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var e=n(this.extraFields[1].value);this.uncompressedSize===s.MAX_VALUE_32BITS&&(this.uncompressedSize=e.readInt(8)),this.compressedSize===s.MAX_VALUE_32BITS&&(this.compressedSize=e.readInt(8)),this.localHeaderOffset===s.MAX_VALUE_32BITS&&(this.localHeaderOffset=e.readInt(8)),this.diskNumberStart===s.MAX_VALUE_32BITS&&(this.diskNumberStart=e.readInt(4))}},readExtraFields:function(e){var t,r,n,i=e.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});e.index+4<i;)t=e.readInt(2),r=e.readInt(2),n=e.readData(r),this.extraFields[t]={id:t,length:r,value:n};e.setIndex(i)},handleUTF8:function(){var e=u.uint8array?\"uint8array\":\"array\";if(this.useUTF8())this.fileNameStr=o.utf8decode(this.fileName),this.fileCommentStr=o.utf8decode(this.fileComment);else{var t=this.findExtraFieldUnicodePath();if(null!==t)this.fileNameStr=t;else{var r=s.transformTo(e,this.fileName);this.fileNameStr=this.loadOptions.decodeFileName(r)}var n=this.findExtraFieldUnicodeComment();if(null!==n)this.fileCommentStr=n;else{var i=s.transformTo(e,this.fileComment);this.fileCommentStr=this.loadOptions.decodeFileName(i)}}},findExtraFieldUnicodePath:function(){var e=this.extraFields[28789];if(e){var t=n(e.value);return 1!==t.readInt(1)?null:a(this.fileName)!==t.readInt(4)?null:o.utf8decode(t.readData(e.length-5))}return null},findExtraFieldUnicodeComment:function(){var e=this.extraFields[25461];if(e){var t=n(e.value);return 1!==t.readInt(1)?null:a(this.fileComment)!==t.readInt(4)?null:o.utf8decode(t.readData(e.length-5))}return null}},t.exports=l},{\"./compressedObject\":2,\"./compressions\":3,\"./crc32\":4,\"./reader/readerFor\":22,\"./support\":30,\"./utf8\":31,\"./utils\":32}],35:[function(e,t,r){\"use strict\";function n(e,t,r){this.name=e,this.dir=r.dir,this.date=r.date,this.comment=r.comment,this.unixPermissions=r.unixPermissions,this.dosPermissions=r.dosPermissions,this._data=t,this._dataBinary=r.binary,this.options={compression:r.compression,compressionOptions:r.compressionOptions}}var s=e(\"./stream/StreamHelper\"),i=e(\"./stream/DataWorker\"),a=e(\"./utf8\"),o=e(\"./compressedObject\"),h=e(\"./stream/GenericWorker\");n.prototype={internalStream:function(e){var t=null,r=\"string\";try{if(!e)throw new Error(\"No output type specified.\");var n=\"string\"===(r=e.toLowerCase())||\"text\"===r;\"binarystring\"!==r&&\"text\"!==r||(r=\"string\"),t=this._decompressWorker();var i=!this._dataBinary;i&&!n&&(t=t.pipe(new a.Utf8EncodeWorker)),!i&&n&&(t=t.pipe(new a.Utf8DecodeWorker))}catch(e){(t=new h(\"error\")).error(e)}return new s(t,r,\"\")},async:function(e,t){return this.internalStream(e).accumulate(t)},nodeStream:function(e,t){return this.internalStream(e||\"nodebuffer\").toNodejsStream(t)},_compressWorker:function(e,t){if(this._data instanceof o&&this._data.compression.magic===e.magic)return this._data.getCompressedWorker();var r=this._decompressWorker();return this._dataBinary||(r=r.pipe(new a.Utf8EncodeWorker)),o.createWorkerFrom(r,e,t)},_decompressWorker:function(){return this._data instanceof o?this._data.getContentWorker():this._data instanceof h?this._data:new i(this._data)}};for(var u=[\"asText\",\"asBinary\",\"asNodeBuffer\",\"asUint8Array\",\"asArrayBuffer\"],l=function(){throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\")},f=0;f<u.length;f++)n.prototype[u[f]]=l;t.exports=n},{\"./compressedObject\":2,\"./stream/DataWorker\":27,\"./stream/GenericWorker\":28,\"./stream/StreamHelper\":29,\"./utf8\":31}],36:[function(e,l,t){(function(t){\"use strict\";var r,n,e=t.MutationObserver||t.WebKitMutationObserver;if(e){var i=0,s=new e(u),a=t.document.createTextNode(\"\");s.observe(a,{characterData:!0}),r=function(){a.data=i=++i%2}}else if(t.setImmediate||void 0===t.MessageChannel)r=\"document\"in t&&\"onreadystatechange\"in t.document.createElement(\"script\")?function(){var e=t.document.createElement(\"script\");e.onreadystatechange=function(){u(),e.onreadystatechange=null,e.parentNode.removeChild(e),e=null},t.document.documentElement.appendChild(e)}:function(){setTimeout(u,0)};else{var o=new t.MessageChannel;o.port1.onmessage=u,r=function(){o.port2.postMessage(0)}}var h=[];function u(){var e,t;n=!0;for(var r=h.length;r;){for(t=h,h=[],e=-1;++e<r;)t[e]();r=h.length}n=!1}l.exports=function(e){1!==h.push(e)||n||r()}}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}],37:[function(e,t,r){\"use strict\";var i=e(\"immediate\");function u(){}var l={},s=[\"REJECTED\"],a=[\"FULFILLED\"],n=[\"PENDING\"];function o(e){if(\"function\"!=typeof e)throw new TypeError(\"resolver must be a function\");this.state=n,this.queue=[],this.outcome=void 0,e!==u&&d(this,e)}function h(e,t,r){this.promise=e,\"function\"==typeof t&&(this.onFulfilled=t,this.callFulfilled=this.otherCallFulfilled),\"function\"==typeof r&&(this.onRejected=r,this.callRejected=this.otherCallRejected)}function f(t,r,n){i(function(){var e;try{e=r(n)}catch(e){return l.reject(t,e)}e===t?l.reject(t,new TypeError(\"Cannot resolve promise with itself\")):l.resolve(t,e)})}function c(e){var t=e&&e.then;if(e&&(\"object\"==typeof e||\"function\"==typeof e)&&\"function\"==typeof t)return function(){t.apply(e,arguments)}}function d(t,e){var r=!1;function n(e){r||(r=!0,l.reject(t,e))}function i(e){r||(r=!0,l.resolve(t,e))}var s=p(function(){e(i,n)});\"error\"===s.status&&n(s.value)}function p(e,t){var r={};try{r.value=e(t),r.status=\"success\"}catch(e){r.status=\"error\",r.value=e}return r}(t.exports=o).prototype.finally=function(t){if(\"function\"!=typeof t)return this;var r=this.constructor;return this.then(function(e){return r.resolve(t()).then(function(){return e})},function(e){return r.resolve(t()).then(function(){throw e})})},o.prototype.catch=function(e){return this.then(null,e)},o.prototype.then=function(e,t){if(\"function\"!=typeof e&&this.state===a||\"function\"!=typeof t&&this.state===s)return this;var r=new this.constructor(u);this.state!==n?f(r,this.state===a?e:t,this.outcome):this.queue.push(new h(r,e,t));return r},h.prototype.callFulfilled=function(e){l.resolve(this.promise,e)},h.prototype.otherCallFulfilled=function(e){f(this.promise,this.onFulfilled,e)},h.prototype.callRejected=function(e){l.reject(this.promise,e)},h.prototype.otherCallRejected=function(e){f(this.promise,this.onRejected,e)},l.resolve=function(e,t){var r=p(c,t);if(\"error\"===r.status)return l.reject(e,r.value);var n=r.value;if(n)d(e,n);else{e.state=a,e.outcome=t;for(var i=-1,s=e.queue.length;++i<s;)e.queue[i].callFulfilled(t)}return e},l.reject=function(e,t){e.state=s,e.outcome=t;for(var r=-1,n=e.queue.length;++r<n;)e.queue[r].callRejected(t);return e},o.resolve=function(e){if(e instanceof this)return e;return l.resolve(new this(u),e)},o.reject=function(e){var t=new this(u);return l.reject(t,e)},o.all=function(e){var r=this;if(\"[object Array]\"!==Object.prototype.toString.call(e))return this.reject(new TypeError(\"must be an array\"));var n=e.length,i=!1;if(!n)return this.resolve([]);var s=new Array(n),a=0,t=-1,o=new this(u);for(;++t<n;)h(e[t],t);return o;function h(e,t){r.resolve(e).then(function(e){s[t]=e,++a!==n||i||(i=!0,l.resolve(o,s))},function(e){i||(i=!0,l.reject(o,e))})}},o.race=function(e){var t=this;if(\"[object Array]\"!==Object.prototype.toString.call(e))return this.reject(new TypeError(\"must be an array\"));var r=e.length,n=!1;if(!r)return this.resolve([]);var i=-1,s=new this(u);for(;++i<r;)a=e[i],t.resolve(a).then(function(e){n||(n=!0,l.resolve(s,e))},function(e){n||(n=!0,l.reject(s,e))});var a;return s}},{immediate:36}],38:[function(e,t,r){\"use strict\";var n={};(0,e(\"./lib/utils/common\").assign)(n,e(\"./lib/deflate\"),e(\"./lib/inflate\"),e(\"./lib/zlib/constants\")),t.exports=n},{\"./lib/deflate\":39,\"./lib/inflate\":40,\"./lib/utils/common\":41,\"./lib/zlib/constants\":44}],39:[function(e,t,r){\"use strict\";var a=e(\"./zlib/deflate\"),o=e(\"./utils/common\"),h=e(\"./utils/strings\"),i=e(\"./zlib/messages\"),s=e(\"./zlib/zstream\"),u=Object.prototype.toString,l=0,f=-1,c=0,d=8;function p(e){if(!(this instanceof p))return new p(e);this.options=o.assign({level:f,method:d,chunkSize:16384,windowBits:15,memLevel:8,strategy:c,to:\"\"},e||{});var t=this.options;t.raw&&0<t.windowBits?t.windowBits=-t.windowBits:t.gzip&&0<t.windowBits&&t.windowBits<16&&(t.windowBits+=16),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new s,this.strm.avail_out=0;var r=a.deflateInit2(this.strm,t.level,t.method,t.windowBits,t.memLevel,t.strategy);if(r!==l)throw new Error(i[r]);if(t.header&&a.deflateSetHeader(this.strm,t.header),t.dictionary){var n;if(n=\"string\"==typeof t.dictionary?h.string2buf(t.dictionary):\"[object ArrayBuffer]\"===u.call(t.dictionary)?new Uint8Array(t.dictionary):t.dictionary,(r=a.deflateSetDictionary(this.strm,n))!==l)throw new Error(i[r]);this._dict_set=!0}}function n(e,t){var r=new p(t);if(r.push(e,!0),r.err)throw r.msg||i[r.err];return r.result}p.prototype.push=function(e,t){var r,n,i=this.strm,s=this.options.chunkSize;if(this.ended)return!1;n=t===~~t?t:!0===t?4:0,\"string\"==typeof e?i.input=h.string2buf(e):\"[object ArrayBuffer]\"===u.call(e)?i.input=new Uint8Array(e):i.input=e,i.next_in=0,i.avail_in=i.input.length;do{if(0===i.avail_out&&(i.output=new o.Buf8(s),i.next_out=0,i.avail_out=s),1!==(r=a.deflate(i,n))&&r!==l)return this.onEnd(r),!(this.ended=!0);0!==i.avail_out&&(0!==i.avail_in||4!==n&&2!==n)||(\"string\"===this.options.to?this.onData(h.buf2binstring(o.shrinkBuf(i.output,i.next_out))):this.onData(o.shrinkBuf(i.output,i.next_out)))}while((0<i.avail_in||0===i.avail_out)&&1!==r);return 4===n?(r=a.deflateEnd(this.strm),this.onEnd(r),this.ended=!0,r===l):2!==n||(this.onEnd(l),!(i.avail_out=0))},p.prototype.onData=function(e){this.chunks.push(e)},p.prototype.onEnd=function(e){e===l&&(\"string\"===this.options.to?this.result=this.chunks.join(\"\"):this.result=o.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg},r.Deflate=p,r.deflate=n,r.deflateRaw=function(e,t){return(t=t||{}).raw=!0,n(e,t)},r.gzip=function(e,t){return(t=t||{}).gzip=!0,n(e,t)}},{\"./utils/common\":41,\"./utils/strings\":42,\"./zlib/deflate\":46,\"./zlib/messages\":51,\"./zlib/zstream\":53}],40:[function(e,t,r){\"use strict\";var c=e(\"./zlib/inflate\"),d=e(\"./utils/common\"),p=e(\"./utils/strings\"),m=e(\"./zlib/constants\"),n=e(\"./zlib/messages\"),i=e(\"./zlib/zstream\"),s=e(\"./zlib/gzheader\"),_=Object.prototype.toString;function a(e){if(!(this instanceof a))return new a(e);this.options=d.assign({chunkSize:16384,windowBits:0,to:\"\"},e||{});var t=this.options;t.raw&&0<=t.windowBits&&t.windowBits<16&&(t.windowBits=-t.windowBits,0===t.windowBits&&(t.windowBits=-15)),!(0<=t.windowBits&&t.windowBits<16)||e&&e.windowBits||(t.windowBits+=32),15<t.windowBits&&t.windowBits<48&&0==(15&t.windowBits)&&(t.windowBits|=15),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new i,this.strm.avail_out=0;var r=c.inflateInit2(this.strm,t.windowBits);if(r!==m.Z_OK)throw new Error(n[r]);this.header=new s,c.inflateGetHeader(this.strm,this.header)}function o(e,t){var r=new a(t);if(r.push(e,!0),r.err)throw r.msg||n[r.err];return r.result}a.prototype.push=function(e,t){var r,n,i,s,a,o,h=this.strm,u=this.options.chunkSize,l=this.options.dictionary,f=!1;if(this.ended)return!1;n=t===~~t?t:!0===t?m.Z_FINISH:m.Z_NO_FLUSH,\"string\"==typeof e?h.input=p.binstring2buf(e):\"[object ArrayBuffer]\"===_.call(e)?h.input=new Uint8Array(e):h.input=e,h.next_in=0,h.avail_in=h.input.length;do{if(0===h.avail_out&&(h.output=new d.Buf8(u),h.next_out=0,h.avail_out=u),(r=c.inflate(h,m.Z_NO_FLUSH))===m.Z_NEED_DICT&&l&&(o=\"string\"==typeof l?p.string2buf(l):\"[object ArrayBuffer]\"===_.call(l)?new Uint8Array(l):l,r=c.inflateSetDictionary(this.strm,o)),r===m.Z_BUF_ERROR&&!0===f&&(r=m.Z_OK,f=!1),r!==m.Z_STREAM_END&&r!==m.Z_OK)return this.onEnd(r),!(this.ended=!0);h.next_out&&(0!==h.avail_out&&r!==m.Z_STREAM_END&&(0!==h.avail_in||n!==m.Z_FINISH&&n!==m.Z_SYNC_FLUSH)||(\"string\"===this.options.to?(i=p.utf8border(h.output,h.next_out),s=h.next_out-i,a=p.buf2string(h.output,i),h.next_out=s,h.avail_out=u-s,s&&d.arraySet(h.output,h.output,i,s,0),this.onData(a)):this.onData(d.shrinkBuf(h.output,h.next_out)))),0===h.avail_in&&0===h.avail_out&&(f=!0)}while((0<h.avail_in||0===h.avail_out)&&r!==m.Z_STREAM_END);return r===m.Z_STREAM_END&&(n=m.Z_FINISH),n===m.Z_FINISH?(r=c.inflateEnd(this.strm),this.onEnd(r),this.ended=!0,r===m.Z_OK):n!==m.Z_SYNC_FLUSH||(this.onEnd(m.Z_OK),!(h.avail_out=0))},a.prototype.onData=function(e){this.chunks.push(e)},a.prototype.onEnd=function(e){e===m.Z_OK&&(\"string\"===this.options.to?this.result=this.chunks.join(\"\"):this.result=d.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg},r.Inflate=a,r.inflate=o,r.inflateRaw=function(e,t){return(t=t||{}).raw=!0,o(e,t)},r.ungzip=o},{\"./utils/common\":41,\"./utils/strings\":42,\"./zlib/constants\":44,\"./zlib/gzheader\":47,\"./zlib/inflate\":49,\"./zlib/messages\":51,\"./zlib/zstream\":53}],41:[function(e,t,r){\"use strict\";var n=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Int32Array;r.assign=function(e){for(var t=Array.prototype.slice.call(arguments,1);t.length;){var r=t.shift();if(r){if(\"object\"!=typeof r)throw new TypeError(r+\"must be non-object\");for(var n in r)r.hasOwnProperty(n)&&(e[n]=r[n])}}return e},r.shrinkBuf=function(e,t){return e.length===t?e:e.subarray?e.subarray(0,t):(e.length=t,e)};var i={arraySet:function(e,t,r,n,i){if(t.subarray&&e.subarray)e.set(t.subarray(r,r+n),i);else for(var s=0;s<n;s++)e[i+s]=t[r+s]},flattenChunks:function(e){var t,r,n,i,s,a;for(t=n=0,r=e.length;t<r;t++)n+=e[t].length;for(a=new Uint8Array(n),t=i=0,r=e.length;t<r;t++)s=e[t],a.set(s,i),i+=s.length;return a}},s={arraySet:function(e,t,r,n,i){for(var s=0;s<n;s++)e[i+s]=t[r+s]},flattenChunks:function(e){return[].concat.apply([],e)}};r.setTyped=function(e){e?(r.Buf8=Uint8Array,r.Buf16=Uint16Array,r.Buf32=Int32Array,r.assign(r,i)):(r.Buf8=Array,r.Buf16=Array,r.Buf32=Array,r.assign(r,s))},r.setTyped(n)},{}],42:[function(e,t,r){\"use strict\";var h=e(\"./common\"),i=!0,s=!0;try{String.fromCharCode.apply(null,[0])}catch(e){i=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(e){s=!1}for(var u=new h.Buf8(256),n=0;n<256;n++)u[n]=252<=n?6:248<=n?5:240<=n?4:224<=n?3:192<=n?2:1;function l(e,t){if(t<65537&&(e.subarray&&s||!e.subarray&&i))return String.fromCharCode.apply(null,h.shrinkBuf(e,t));for(var r=\"\",n=0;n<t;n++)r+=String.fromCharCode(e[n]);return r}u[254]=u[254]=1,r.string2buf=function(e){var t,r,n,i,s,a=e.length,o=0;for(i=0;i<a;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),o+=r<128?1:r<2048?2:r<65536?3:4;for(t=new h.Buf8(o),i=s=0;s<o;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),r<128?t[s++]=r:(r<2048?t[s++]=192|r>>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t},r.buf2binstring=function(e){return l(e,e.length)},r.binstring2buf=function(e){for(var t=new h.Buf8(e.length),r=0,n=t.length;r<n;r++)t[r]=e.charCodeAt(r);return t},r.buf2string=function(e,t){var r,n,i,s,a=t||e.length,o=new Array(2*a);for(r=n=0;r<a;)if((i=e[r++])<128)o[n++]=i;else if(4<(s=u[i]))o[n++]=65533,r+=s-1;else{for(i&=2===s?31:3===s?15:7;1<s&&r<a;)i=i<<6|63&e[r++],s--;1<s?o[n++]=65533:i<65536?o[n++]=i:(i-=65536,o[n++]=55296|i>>10&1023,o[n++]=56320|1023&i)}return l(o,n)},r.utf8border=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}},{\"./common\":41}],43:[function(e,t,r){\"use strict\";t.exports=function(e,t,r,n){for(var i=65535&e|0,s=e>>>16&65535|0,a=0;0!==r;){for(r-=a=2e3<r?2e3:r;s=s+(i=i+t[n++]|0)|0,--a;);i%=65521,s%=65521}return i|s<<16|0}},{}],44:[function(e,t,r){\"use strict\";t.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],45:[function(e,t,r){\"use strict\";var o=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a<s;a++)e=e>>>8^i[255&(e^t[a])];return-1^e}},{}],46:[function(e,t,r){\"use strict\";var h,c=e(\"../utils/common\"),u=e(\"./trees\"),d=e(\"./adler32\"),p=e(\"./crc32\"),n=e(\"./messages\"),l=0,f=4,m=0,_=-2,g=-1,b=4,i=2,v=8,y=9,s=286,a=30,o=19,w=2*s+1,k=15,x=3,S=258,z=S+x+1,C=42,E=113,A=1,I=2,O=3,B=4;function R(e,t){return e.msg=n[t],t}function T(e){return(e<<1)-(4<e?9:0)}function D(e){for(var t=e.length;0<=--t;)e[t]=0}function F(e){var t=e.state,r=t.pending;r>e.avail_out&&(r=e.avail_out),0!==r&&(c.arraySet(e.output,t.pending_buf,t.pending_out,r,e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,0===t.pending&&(t.pending_out=0))}function N(e,t){u._tr_flush_block(e,0<=e.block_start?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,F(e.strm)}function U(e,t){e.pending_buf[e.pending++]=t}function P(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function L(e,t){var r,n,i=e.max_chain_length,s=e.strstart,a=e.prev_length,o=e.nice_match,h=e.strstart>e.w_size-z?e.strstart-(e.w_size-z):0,u=e.window,l=e.w_mask,f=e.prev,c=e.strstart+S,d=u[s+a-1],p=u[s+a];e.prev_length>=e.good_match&&(i>>=2),o>e.lookahead&&(o=e.lookahead);do{if(u[(r=t)+a]===p&&u[r+a-1]===d&&u[r]===u[s]&&u[++r]===u[s+1]){s+=2,r++;do{}while(u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&s<c);if(n=S-(c-s),s=c-S,a<n){if(e.match_start=t,o<=(a=n))break;d=u[s+a-1],p=u[s+a]}}}while((t=f[t&l])>h&&0!=--i);return a<=e.lookahead?a:e.lookahead}function j(e){var t,r,n,i,s,a,o,h,u,l,f=e.w_size;do{if(i=e.window_size-e.lookahead-e.strstart,e.strstart>=f+(f-z)){for(c.arraySet(e.window,e.window,f,f,0),e.match_start-=f,e.strstart-=f,e.block_start-=f,t=r=e.hash_size;n=e.head[--t],e.head[t]=f<=n?n-f:0,--r;);for(t=r=f;n=e.prev[--t],e.prev[t]=f<=n?n-f:0,--r;);i+=f}if(0===e.strm.avail_in)break;if(a=e.strm,o=e.window,h=e.strstart+e.lookahead,u=i,l=void 0,l=a.avail_in,u<l&&(l=u),r=0===l?0:(a.avail_in-=l,c.arraySet(o,a.input,a.next_in,l,h),1===a.state.wrap?a.adler=d(a.adler,o,l,h):2===a.state.wrap&&(a.adler=p(a.adler,o,l,h)),a.next_in+=l,a.total_in+=l,l),e.lookahead+=r,e.lookahead+e.insert>=x)for(s=e.strstart-e.insert,e.ins_h=e.window[s],e.ins_h=(e.ins_h<<e.hash_shift^e.window[s+1])&e.hash_mask;e.insert&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[s+x-1])&e.hash_mask,e.prev[s&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=s,s++,e.insert--,!(e.lookahead+e.insert<x)););}while(e.lookahead<z&&0!==e.strm.avail_in)}function Z(e,t){for(var r,n;;){if(e.lookahead<z){if(j(e),e.lookahead<z&&t===l)return A;if(0===e.lookahead)break}if(r=0,e.lookahead>=x&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+x-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),0!==r&&e.strstart-r<=e.w_size-z&&(e.match_length=L(e,r)),e.match_length>=x)if(n=u._tr_tally(e,e.strstart-e.match_start,e.match_length-x),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=x){for(e.match_length--;e.strstart++,e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+x-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart,0!=--e.match_length;);e.strstart++}else e.strstart+=e.match_length,e.match_length=0,e.ins_h=e.window[e.strstart],e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+1])&e.hash_mask;else n=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++;if(n&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=e.strstart<x-1?e.strstart:x-1,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}function W(e,t){for(var r,n,i;;){if(e.lookahead<z){if(j(e),e.lookahead<z&&t===l)return A;if(0===e.lookahead)break}if(r=0,e.lookahead>=x&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+x-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),e.prev_length=e.match_length,e.prev_match=e.match_start,e.match_length=x-1,0!==r&&e.prev_length<e.max_lazy_match&&e.strstart-r<=e.w_size-z&&(e.match_length=L(e,r),e.match_length<=5&&(1===e.strategy||e.match_length===x&&4096<e.strstart-e.match_start)&&(e.match_length=x-1)),e.prev_length>=x&&e.match_length<=e.prev_length){for(i=e.strstart+e.lookahead-x,n=u._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-x),e.lookahead-=e.prev_length-1,e.prev_length-=2;++e.strstart<=i&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+x-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),0!=--e.prev_length;);if(e.match_available=0,e.match_length=x-1,e.strstart++,n&&(N(e,!1),0===e.strm.avail_out))return A}else if(e.match_available){if((n=u._tr_tally(e,0,e.window[e.strstart-1]))&&N(e,!1),e.strstart++,e.lookahead--,0===e.strm.avail_out)return A}else e.match_available=1,e.strstart++,e.lookahead--}return e.match_available&&(n=u._tr_tally(e,0,e.window[e.strstart-1]),e.match_available=0),e.insert=e.strstart<x-1?e.strstart:x-1,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}function M(e,t,r,n,i){this.good_length=e,this.max_lazy=t,this.nice_length=r,this.max_chain=n,this.func=i}function H(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=v,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new c.Buf16(2*w),this.dyn_dtree=new c.Buf16(2*(2*a+1)),this.bl_tree=new c.Buf16(2*(2*o+1)),D(this.dyn_ltree),D(this.dyn_dtree),D(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new c.Buf16(k+1),this.heap=new c.Buf16(2*s+1),D(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new c.Buf16(2*s+1),D(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function G(e){var t;return e&&e.state?(e.total_in=e.total_out=0,e.data_type=i,(t=e.state).pending=0,t.pending_out=0,t.wrap<0&&(t.wrap=-t.wrap),t.status=t.wrap?C:E,e.adler=2===t.wrap?0:1,t.last_flush=l,u._tr_init(t),m):R(e,_)}function K(e){var t=G(e);return t===m&&function(e){e.window_size=2*e.w_size,D(e.head),e.max_lazy_match=h[e.level].max_lazy,e.good_match=h[e.level].good_length,e.nice_match=h[e.level].nice_length,e.max_chain_length=h[e.level].max_chain,e.strstart=0,e.block_start=0,e.lookahead=0,e.insert=0,e.match_length=e.prev_length=x-1,e.match_available=0,e.ins_h=0}(e.state),t}function Y(e,t,r,n,i,s){if(!e)return _;var a=1;if(t===g&&(t=6),n<0?(a=0,n=-n):15<n&&(a=2,n-=16),i<1||y<i||r!==v||n<8||15<n||t<0||9<t||s<0||b<s)return R(e,_);8===n&&(n=9);var o=new H;return(e.state=o).strm=e,o.wrap=a,o.gzhead=null,o.w_bits=n,o.w_size=1<<o.w_bits,o.w_mask=o.w_size-1,o.hash_bits=i+7,o.hash_size=1<<o.hash_bits,o.hash_mask=o.hash_size-1,o.hash_shift=~~((o.hash_bits+x-1)/x),o.window=new c.Buf8(2*o.w_size),o.head=new c.Buf16(o.hash_size),o.prev=new c.Buf16(o.w_size),o.lit_bufsize=1<<i+6,o.pending_buf_size=4*o.lit_bufsize,o.pending_buf=new c.Buf8(o.pending_buf_size),o.d_buf=1*o.lit_bufsize,o.l_buf=3*o.lit_bufsize,o.level=t,o.strategy=s,o.method=r,K(e)}h=[new M(0,0,0,0,function(e,t){var r=65535;for(r>e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(j(e),0===e.lookahead&&t===l)return A;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+r;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,N(e,!1),0===e.strm.avail_out))return A;if(e.strstart-e.block_start>=e.w_size-z&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):(e.strstart>e.block_start&&(N(e,!1),e.strm.avail_out),A)}),new M(4,4,8,4,Z),new M(4,5,16,8,Z),new M(4,6,32,32,Z),new M(4,4,16,16,W),new M(8,16,32,32,W),new M(8,16,128,128,W),new M(8,32,128,256,W),new M(32,128,258,1024,W),new M(32,258,258,4096,W)],r.deflateInit=function(e,t){return Y(e,t,v,15,8,0)},r.deflateInit2=Y,r.deflateReset=K,r.deflateResetKeep=G,r.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?_:(e.state.gzhead=t,m):_},r.deflate=function(e,t){var r,n,i,s;if(!e||!e.state||5<t||t<0)return e?R(e,_):_;if(n=e.state,!e.output||!e.input&&0!==e.avail_in||666===n.status&&t!==f)return R(e,0===e.avail_out?-5:_);if(n.strm=e,r=n.last_flush,n.last_flush=t,n.status===C)if(2===n.wrap)e.adler=0,U(n,31),U(n,139),U(n,8),n.gzhead?(U(n,(n.gzhead.text?1:0)+(n.gzhead.hcrc?2:0)+(n.gzhead.extra?4:0)+(n.gzhead.name?8:0)+(n.gzhead.comment?16:0)),U(n,255&n.gzhead.time),U(n,n.gzhead.time>>8&255),U(n,n.gzhead.time>>16&255),U(n,n.gzhead.time>>24&255),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,255&n.gzhead.os),n.gzhead.extra&&n.gzhead.extra.length&&(U(n,255&n.gzhead.extra.length),U(n,n.gzhead.extra.length>>8&255)),n.gzhead.hcrc&&(e.adler=p(e.adler,n.pending_buf,n.pending,0)),n.gzindex=0,n.status=69):(U(n,0),U(n,0),U(n,0),U(n,0),U(n,0),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,3),n.status=E);else{var a=v+(n.w_bits-8<<4)<<8;a|=(2<=n.strategy||n.level<2?0:n.level<6?1:6===n.level?2:3)<<6,0!==n.strstart&&(a|=32),a+=31-a%31,n.status=E,P(n,a),0!==n.strstart&&(P(n,e.adler>>>16),P(n,65535&e.adler)),e.adler=1}if(69===n.status)if(n.gzhead.extra){for(i=n.pending;n.gzindex<(65535&n.gzhead.extra.length)&&(n.pending!==n.pending_buf_size||(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending!==n.pending_buf_size));)U(n,255&n.gzhead.extra[n.gzindex]),n.gzindex++;n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),n.gzindex===n.gzhead.extra.length&&(n.gzindex=0,n.status=73)}else n.status=73;if(73===n.status)if(n.gzhead.name){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindex<n.gzhead.name.length?255&n.gzhead.name.charCodeAt(n.gzindex++):0,U(n,s)}while(0!==s);n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.gzindex=0,n.status=91)}else n.status=91;if(91===n.status)if(n.gzhead.comment){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindex<n.gzhead.comment.length?255&n.gzhead.comment.charCodeAt(n.gzindex++):0,U(n,s)}while(0!==s);n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.status=103)}else n.status=103;if(103===n.status&&(n.gzhead.hcrc?(n.pending+2>n.pending_buf_size&&F(e),n.pending+2<=n.pending_buf_size&&(U(n,255&e.adler),U(n,e.adler>>8&255),e.adler=0,n.status=E)):n.status=E),0!==n.pending){if(F(e),0===e.avail_out)return n.last_flush=-1,m}else if(0===e.avail_in&&T(t)<=T(r)&&t!==f)return R(e,-5);if(666===n.status&&0!==e.avail_in)return R(e,-5);if(0!==e.avail_in||0!==n.lookahead||t!==l&&666!==n.status){var o=2===n.strategy?function(e,t){for(var r;;){if(0===e.lookahead&&(j(e),0===e.lookahead)){if(t===l)return A;break}if(e.match_length=0,r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):3===n.strategy?function(e,t){for(var r,n,i,s,a=e.window;;){if(e.lookahead<=S){if(j(e),e.lookahead<=S&&t===l)return A;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=x&&0<e.strstart&&(n=a[i=e.strstart-1])===a[++i]&&n===a[++i]&&n===a[++i]){s=e.strstart+S;do{}while(n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&i<s);e.match_length=S-(s-i),e.match_length>e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=x?(r=u._tr_tally(e,1,e.match_length-x),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):h[n.level].func(n,t);if(o!==O&&o!==B||(n.status=666),o===A||o===O)return 0===e.avail_out&&(n.last_flush=-1),m;if(o===I&&(1===t?u._tr_align(n):5!==t&&(u._tr_stored_block(n,0,0,!1),3===t&&(D(n.head),0===n.lookahead&&(n.strstart=0,n.block_start=0,n.insert=0))),F(e),0===e.avail_out))return n.last_flush=-1,m}return t!==f?m:n.wrap<=0?1:(2===n.wrap?(U(n,255&e.adler),U(n,e.adler>>8&255),U(n,e.adler>>16&255),U(n,e.adler>>24&255),U(n,255&e.total_in),U(n,e.total_in>>8&255),U(n,e.total_in>>16&255),U(n,e.total_in>>24&255)):(P(n,e.adler>>>16),P(n,65535&e.adler)),F(e),0<n.wrap&&(n.wrap=-n.wrap),0!==n.pending?m:1)},r.deflateEnd=function(e){var t;return e&&e.state?(t=e.state.status)!==C&&69!==t&&73!==t&&91!==t&&103!==t&&t!==E&&666!==t?R(e,_):(e.state=null,t===E?R(e,-3):m):_},r.deflateSetDictionary=function(e,t){var r,n,i,s,a,o,h,u,l=t.length;if(!e||!e.state)return _;if(2===(s=(r=e.state).wrap)||1===s&&r.status!==C||r.lookahead)return _;for(1===s&&(e.adler=d(e.adler,t,l,0)),r.wrap=0,l>=r.w_size&&(0===s&&(D(r.head),r.strstart=0,r.block_start=0,r.insert=0),u=new c.Buf8(r.w_size),c.arraySet(u,t,l-r.w_size,r.w_size,0),t=u,l=r.w_size),a=e.avail_in,o=e.next_in,h=e.input,e.avail_in=l,e.next_in=0,e.input=t,j(r);r.lookahead>=x;){for(n=r.strstart,i=r.lookahead-(x-1);r.ins_h=(r.ins_h<<r.hash_shift^r.window[n+x-1])&r.hash_mask,r.prev[n&r.w_mask]=r.head[r.ins_h],r.head[r.ins_h]=n,n++,--i;);r.strstart=n,r.lookahead=x-1,j(r)}return r.strstart+=r.lookahead,r.block_start=r.strstart,r.insert=r.lookahead,r.lookahead=0,r.match_length=r.prev_length=x-1,r.match_available=0,e.next_in=o,e.input=h,e.avail_in=a,r.wrap=s,m},r.deflateInfo=\"pako deflate (from Nodeca project)\"},{\"../utils/common\":41,\"./adler32\":43,\"./crc32\":45,\"./messages\":51,\"./trees\":52}],47:[function(e,t,r){\"use strict\";t.exports=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name=\"\",this.comment=\"\",this.hcrc=0,this.done=!1}},{}],48:[function(e,t,r){\"use strict\";t.exports=function(e,t){var r,n,i,s,a,o,h,u,l,f,c,d,p,m,_,g,b,v,y,w,k,x,S,z,C;r=e.state,n=e.next_in,z=e.input,i=n+(e.avail_in-5),s=e.next_out,C=e.output,a=s-(t-e.avail_out),o=s+(e.avail_out-257),h=r.dmax,u=r.wsize,l=r.whave,f=r.wnext,c=r.window,d=r.hold,p=r.bits,m=r.lencode,_=r.distcode,g=(1<<r.lenbits)-1,b=(1<<r.distbits)-1;e:do{p<15&&(d+=z[n++]<<p,p+=8,d+=z[n++]<<p,p+=8),v=m[d&g];t:for(;;){if(d>>>=y=v>>>24,p-=y,0===(y=v>>>16&255))C[s++]=65535&v;else{if(!(16&y)){if(0==(64&y)){v=m[(65535&v)+(d&(1<<y)-1)];continue t}if(32&y){r.mode=12;break e}e.msg=\"invalid literal/length code\",r.mode=30;break e}w=65535&v,(y&=15)&&(p<y&&(d+=z[n++]<<p,p+=8),w+=d&(1<<y)-1,d>>>=y,p-=y),p<15&&(d+=z[n++]<<p,p+=8,d+=z[n++]<<p,p+=8),v=_[d&b];r:for(;;){if(d>>>=y=v>>>24,p-=y,!(16&(y=v>>>16&255))){if(0==(64&y)){v=_[(65535&v)+(d&(1<<y)-1)];continue r}e.msg=\"invalid distance code\",r.mode=30;break e}if(k=65535&v,p<(y&=15)&&(d+=z[n++]<<p,(p+=8)<y&&(d+=z[n++]<<p,p+=8)),h<(k+=d&(1<<y)-1)){e.msg=\"invalid distance too far back\",r.mode=30;break e}if(d>>>=y,p-=y,(y=s-a)<k){if(l<(y=k-y)&&r.sane){e.msg=\"invalid distance too far back\",r.mode=30;break e}if(S=c,(x=0)===f){if(x+=u-y,y<w){for(w-=y;C[s++]=c[x++],--y;);x=s-k,S=C}}else if(f<y){if(x+=u+f-y,(y-=f)<w){for(w-=y;C[s++]=c[x++],--y;);if(x=0,f<w){for(w-=y=f;C[s++]=c[x++],--y;);x=s-k,S=C}}}else if(x+=f-y,y<w){for(w-=y;C[s++]=c[x++],--y;);x=s-k,S=C}for(;2<w;)C[s++]=S[x++],C[s++]=S[x++],C[s++]=S[x++],w-=3;w&&(C[s++]=S[x++],1<w&&(C[s++]=S[x++]))}else{for(x=s-k;C[s++]=C[x++],C[s++]=C[x++],C[s++]=C[x++],2<(w-=3););w&&(C[s++]=C[x++],1<w&&(C[s++]=C[x++]))}break}}break}}while(n<i&&s<o);n-=w=p>>3,d&=(1<<(p-=w<<3))-1,e.next_in=n,e.next_out=s,e.avail_in=n<i?i-n+5:5-(n-i),e.avail_out=s<o?o-s+257:257-(s-o),r.hold=d,r.bits=p}},{}],49:[function(e,t,r){\"use strict\";var I=e(\"../utils/common\"),O=e(\"./adler32\"),B=e(\"./crc32\"),R=e(\"./inffast\"),T=e(\"./inftrees\"),D=1,F=2,N=0,U=-2,P=1,n=852,i=592;function L(e){return(e>>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function s(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new I.Buf16(320),this.work=new I.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function a(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg=\"\",t.wrap&&(e.adler=1&t.wrap),t.mode=P,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new I.Buf32(n),t.distcode=t.distdyn=new I.Buf32(i),t.sane=1,t.back=-1,N):U}function o(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,a(e)):U}function h(e,t){var r,n;return e&&e.state?(n=e.state,t<0?(r=0,t=-t):(r=1+(t>>4),t<48&&(t&=15)),t&&(t<8||15<t)?U:(null!==n.window&&n.wbits!==t&&(n.window=null),n.wrap=r,n.wbits=t,o(e))):U}function u(e,t){var r,n;return e?(n=new s,(e.state=n).window=null,(r=h(e,t))!==N&&(e.state=null),r):U}var l,f,c=!0;function j(e){if(c){var t;for(l=new I.Buf32(512),f=new I.Buf32(32),t=0;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(T(D,e.lens,0,288,l,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;T(F,e.lens,0,32,f,0,e.work,{bits:5}),c=!1}e.lencode=l,e.lenbits=9,e.distcode=f,e.distbits=5}function Z(e,t,r,n){var i,s=e.state;return null===s.window&&(s.wsize=1<<s.wbits,s.wnext=0,s.whave=0,s.window=new I.Buf8(s.wsize)),n>=s.wsize?(I.arraySet(s.window,t,r-s.wsize,s.wsize,0),s.wnext=0,s.whave=s.wsize):(n<(i=s.wsize-s.wnext)&&(i=n),I.arraySet(s.window,t,r-n,i,s.wnext),(n-=i)?(I.arraySet(s.window,t,r-n,n,0),s.wnext=n,s.whave=s.wsize):(s.wnext+=i,s.wnext===s.wsize&&(s.wnext=0),s.whave<s.wsize&&(s.whave+=i))),0}r.inflateReset=o,r.inflateReset2=h,r.inflateResetKeep=a,r.inflateInit=function(e){return u(e,15)},r.inflateInit2=u,r.inflate=function(e,t){var r,n,i,s,a,o,h,u,l,f,c,d,p,m,_,g,b,v,y,w,k,x,S,z,C=0,E=new I.Buf8(4),A=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!e||!e.state||!e.output||!e.input&&0!==e.avail_in)return U;12===(r=e.state).mode&&(r.mode=13),a=e.next_out,i=e.output,h=e.avail_out,s=e.next_in,n=e.input,o=e.avail_in,u=r.hold,l=r.bits,f=o,c=h,x=N;e:for(;;)switch(r.mode){case P:if(0===r.wrap){r.mode=13;break}for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(2&r.wrap&&35615===u){E[r.check=0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0),l=u=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&u)<<8)+(u>>8))%31){e.msg=\"incorrect header check\",r.mode=30;break}if(8!=(15&u)){e.msg=\"unknown compression method\",r.mode=30;break}if(l-=4,k=8+(15&(u>>>=4)),0===r.wbits)r.wbits=k;else if(k>r.wbits){e.msg=\"invalid window size\",r.mode=30;break}r.dmax=1<<k,e.adler=r.check=1,r.mode=512&u?10:12,l=u=0;break;case 2:for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(r.flags=u,8!=(255&r.flags)){e.msg=\"unknown compression method\",r.mode=30;break}if(57344&r.flags){e.msg=\"unknown header flags set\",r.mode=30;break}r.head&&(r.head.text=u>>8&1),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=3;case 3:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.head&&(r.head.time=u),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,E[2]=u>>>16&255,E[3]=u>>>24&255,r.check=B(r.check,E,4,0)),l=u=0,r.mode=4;case 4:for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.head&&(r.head.xflags=255&u,r.head.os=u>>8),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=5;case 5:if(1024&r.flags){for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.length=u,r.head&&(r.head.extra_len=u),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&(o<(d=r.length)&&(d=o),d&&(r.head&&(k=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),I.arraySet(r.head.extra,n,s,d,k)),512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,r.length-=d),r.length))break e;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===o)break e;for(d=0;k=n[s+d++],r.head&&k&&r.length<65536&&(r.head.name+=String.fromCharCode(k)),k&&d<o;);if(512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,k)break e}else r.head&&(r.head.name=null);r.length=0,r.mode=8;case 8:if(4096&r.flags){if(0===o)break e;for(d=0;k=n[s+d++],r.head&&k&&r.length<65536&&(r.head.comment+=String.fromCharCode(k)),k&&d<o;);if(512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,k)break e}else r.head&&(r.head.comment=null);r.mode=9;case 9:if(512&r.flags){for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(u!==(65535&r.check)){e.msg=\"header crc mismatch\",r.mode=30;break}l=u=0}r.head&&(r.head.hcrc=r.flags>>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=12;break;case 10:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}e.adler=r.check=L(u),l=u=0,r.mode=11;case 11:if(0===r.havedict)return e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,2;e.adler=r.check=1,r.mode=12;case 12:if(5===t||6===t)break e;case 13:if(r.last){u>>>=7&l,l-=7&l,r.mode=27;break}for(;l<3;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}switch(r.last=1&u,l-=1,3&(u>>>=1)){case 0:r.mode=14;break;case 1:if(j(r),r.mode=20,6!==t)break;u>>>=2,l-=2;break e;case 2:r.mode=17;break;case 3:e.msg=\"invalid block type\",r.mode=30}u>>>=2,l-=2;break;case 14:for(u>>>=7&l,l-=7&l;l<32;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if((65535&u)!=(u>>>16^65535)){e.msg=\"invalid stored block lengths\",r.mode=30;break}if(r.length=65535&u,l=u=0,r.mode=15,6===t)break e;case 15:r.mode=16;case 16:if(d=r.length){if(o<d&&(d=o),h<d&&(d=h),0===d)break e;I.arraySet(i,n,s,d,a),o-=d,s+=d,h-=d,a+=d,r.length-=d;break}r.mode=12;break;case 17:for(;l<14;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(r.nlen=257+(31&u),u>>>=5,l-=5,r.ndist=1+(31&u),u>>>=5,l-=5,r.ncode=4+(15&u),u>>>=4,l-=4,286<r.nlen||30<r.ndist){e.msg=\"too many length or distance symbols\",r.mode=30;break}r.have=0,r.mode=18;case 18:for(;r.have<r.ncode;){for(;l<3;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.lens[A[r.have++]]=7&u,u>>>=3,l-=3}for(;r.have<19;)r.lens[A[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,S={bits:r.lenbits},x=T(0,r.lens,0,19,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg=\"invalid code lengths set\",r.mode=30;break}r.have=0,r.mode=19;case 19:for(;r.have<r.nlen+r.ndist;){for(;g=(C=r.lencode[u&(1<<r.lenbits)-1])>>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(b<16)u>>>=_,l-=_,r.lens[r.have++]=b;else{if(16===b){for(z=_+2;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(u>>>=_,l-=_,0===r.have){e.msg=\"invalid bit length repeat\",r.mode=30;break}k=r.lens[r.have-1],d=3+(3&u),u>>>=2,l-=2}else if(17===b){for(z=_+3;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}l-=_,k=0,d=3+(7&(u>>>=_)),u>>>=3,l-=3}else{for(z=_+7;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}l-=_,k=0,d=11+(127&(u>>>=_)),u>>>=7,l-=7}if(r.have+d>r.nlen+r.ndist){e.msg=\"invalid bit length repeat\",r.mode=30;break}for(;d--;)r.lens[r.have++]=k}}if(30===r.mode)break;if(0===r.lens[256]){e.msg=\"invalid code -- missing end-of-block\",r.mode=30;break}if(r.lenbits=9,S={bits:r.lenbits},x=T(D,r.lens,0,r.nlen,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg=\"invalid literal/lengths set\",r.mode=30;break}if(r.distbits=6,r.distcode=r.distdyn,S={bits:r.distbits},x=T(F,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,S),r.distbits=S.bits,x){e.msg=\"invalid distances set\",r.mode=30;break}if(r.mode=20,6===t)break e;case 20:r.mode=21;case 21:if(6<=o&&258<=h){e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,R(e,c),a=e.next_out,i=e.output,h=e.avail_out,s=e.next_in,n=e.input,o=e.avail_in,u=r.hold,l=r.bits,12===r.mode&&(r.back=-1);break}for(r.back=0;g=(C=r.lencode[u&(1<<r.lenbits)-1])>>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(g&&0==(240&g)){for(v=_,y=g,w=b;g=(C=r.lencode[w+((u&(1<<v+y)-1)>>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}u>>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,r.length=b,0===g){r.mode=26;break}if(32&g){r.back=-1,r.mode=12;break}if(64&g){e.msg=\"invalid literal/length code\",r.mode=30;break}r.extra=15&g,r.mode=22;case 22:if(r.extra){for(z=r.extra;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.length+=u&(1<<r.extra)-1,u>>>=r.extra,l-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;g=(C=r.distcode[u&(1<<r.distbits)-1])>>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(0==(240&g)){for(v=_,y=g,w=b;g=(C=r.distcode[w+((u&(1<<v+y)-1)>>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}u>>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,64&g){e.msg=\"invalid distance code\",r.mode=30;break}r.offset=b,r.extra=15&g,r.mode=24;case 24:if(r.extra){for(z=r.extra;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.offset+=u&(1<<r.extra)-1,u>>>=r.extra,l-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg=\"invalid distance too far back\",r.mode=30;break}r.mode=25;case 25:if(0===h)break e;if(d=c-h,r.offset>d){if((d=r.offset-d)>r.whave&&r.sane){e.msg=\"invalid distance too far back\",r.mode=30;break}p=d>r.wnext?(d-=r.wnext,r.wsize-d):r.wnext-d,d>r.length&&(d=r.length),m=r.window}else m=i,p=a-r.offset,d=r.length;for(h<d&&(d=h),h-=d,r.length-=d;i[a++]=m[p++],--d;);0===r.length&&(r.mode=21);break;case 26:if(0===h)break e;i[a++]=r.length,h--,r.mode=21;break;case 27:if(r.wrap){for(;l<32;){if(0===o)break e;o--,u|=n[s++]<<l,l+=8}if(c-=h,e.total_out+=c,r.total+=c,c&&(e.adler=r.check=r.flags?B(r.check,i,c,a-c):O(r.check,i,c,a-c)),c=h,(r.flags?u:L(u))!==r.check){e.msg=\"incorrect data check\",r.mode=30;break}l=u=0}r.mode=28;case 28:if(r.wrap&&r.flags){for(;l<32;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(u!==(4294967295&r.total)){e.msg=\"incorrect length check\",r.mode=30;break}l=u=0}r.mode=29;case 29:x=1;break e;case 30:x=-3;break e;case 31:return-4;case 32:default:return U}return e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,(r.wsize||c!==e.avail_out&&r.mode<30&&(r.mode<27||4!==t))&&Z(e,e.output,e.next_out,c-e.avail_out)?(r.mode=31,-4):(f-=e.avail_in,c-=e.avail_out,e.total_in+=f,e.total_out+=c,r.total+=c,r.wrap&&c&&(e.adler=r.check=r.flags?B(r.check,i,c,e.next_out-c):O(r.check,i,c,e.next_out-c)),e.data_type=r.bits+(r.last?64:0)+(12===r.mode?128:0)+(20===r.mode||15===r.mode?256:0),(0==f&&0===c||4===t)&&x===N&&(x=-5),x)},r.inflateEnd=function(e){if(!e||!e.state)return U;var t=e.state;return t.window&&(t.window=null),e.state=null,N},r.inflateGetHeader=function(e,t){var r;return e&&e.state?0==(2&(r=e.state).wrap)?U:((r.head=t).done=!1,N):U},r.inflateSetDictionary=function(e,t){var r,n=t.length;return e&&e.state?0!==(r=e.state).wrap&&11!==r.mode?U:11===r.mode&&O(1,t,n,0)!==r.check?-3:Z(e,t,n,n)?(r.mode=31,-4):(r.havedict=1,N):U},r.inflateInfo=\"pako inflate (from Nodeca project)\"},{\"../utils/common\":41,\"./adler32\":43,\"./crc32\":45,\"./inffast\":48,\"./inftrees\":50}],50:[function(e,t,r){\"use strict\";var D=e(\"../utils/common\"),F=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],N=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],U=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],P=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];t.exports=function(e,t,r,n,i,s,a,o){var h,u,l,f,c,d,p,m,_,g=o.bits,b=0,v=0,y=0,w=0,k=0,x=0,S=0,z=0,C=0,E=0,A=null,I=0,O=new D.Buf16(16),B=new D.Buf16(16),R=null,T=0;for(b=0;b<=15;b++)O[b]=0;for(v=0;v<n;v++)O[t[r+v]]++;for(k=g,w=15;1<=w&&0===O[w];w--);if(w<k&&(k=w),0===w)return i[s++]=20971520,i[s++]=20971520,o.bits=1,0;for(y=1;y<w&&0===O[y];y++);for(k<y&&(k=y),b=z=1;b<=15;b++)if(z<<=1,(z-=O[b])<0)return-1;if(0<z&&(0===e||1!==w))return-1;for(B[1]=0,b=1;b<15;b++)B[b+1]=B[b]+O[b];for(v=0;v<n;v++)0!==t[r+v]&&(a[B[t[r+v]]++]=v);if(d=0===e?(A=R=a,19):1===e?(A=F,I-=257,R=N,T-=257,256):(A=U,R=P,-1),b=y,c=s,S=v=E=0,l=-1,f=(C=1<<(x=k))-1,1===e&&852<C||2===e&&592<C)return 1;for(;;){for(p=b-S,_=a[v]<d?(m=0,a[v]):a[v]>d?(m=R[T+a[v]],A[I+a[v]]):(m=96,0),h=1<<b-S,y=u=1<<x;i[c+(E>>S)+(u-=h)]=p<<24|m<<16|_|0,0!==u;);for(h=1<<b-1;E&h;)h>>=1;if(0!==h?(E&=h-1,E+=h):E=0,v++,0==--O[b]){if(b===w)break;b=t[r+a[v]]}if(k<b&&(E&f)!==l){for(0===S&&(S=k),c+=y,z=1<<(x=b-S);x+S<w&&!((z-=O[x+S])<=0);)x++,z<<=1;if(C+=1<<x,1===e&&852<C||2===e&&592<C)return 1;i[l=E&f]=k<<24|x<<16|c-s|0}}return 0!==E&&(i[c+E]=b-S<<24|64<<16|0),o.bits=k,0}},{\"../utils/common\":41}],51:[function(e,t,r){\"use strict\";t.exports={2:\"need dictionary\",1:\"stream end\",0:\"\",\"-1\":\"file error\",\"-2\":\"stream error\",\"-3\":\"data error\",\"-4\":\"insufficient memory\",\"-5\":\"buffer error\",\"-6\":\"incompatible version\"}},{}],52:[function(e,t,r){\"use strict\";var i=e(\"../utils/common\"),o=0,h=1;function n(e){for(var t=e.length;0<=--t;)e[t]=0}var s=0,a=29,u=256,l=u+1+a,f=30,c=19,_=2*l+1,g=15,d=16,p=7,m=256,b=16,v=17,y=18,w=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],k=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],x=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],S=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],z=new Array(2*(l+2));n(z);var C=new Array(2*f);n(C);var E=new Array(512);n(E);var A=new Array(256);n(A);var I=new Array(a);n(I);var O,B,R,T=new Array(f);function D(e,t,r,n,i){this.static_tree=e,this.extra_bits=t,this.extra_base=r,this.elems=n,this.max_length=i,this.has_stree=e&&e.length}function F(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t}function N(e){return e<256?E[e]:E[256+(e>>>7)]}function U(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function P(e,t,r){e.bi_valid>d-r?(e.bi_buf|=t<<e.bi_valid&65535,U(e,e.bi_buf),e.bi_buf=t>>d-e.bi_valid,e.bi_valid+=r-d):(e.bi_buf|=t<<e.bi_valid&65535,e.bi_valid+=r)}function L(e,t,r){P(e,r[2*t],r[2*t+1])}function j(e,t){for(var r=0;r|=1&e,e>>>=1,r<<=1,0<--t;);return r>>>1}function Z(e,t,r){var n,i,s=new Array(g+1),a=0;for(n=1;n<=g;n++)s[n]=a=a+r[n-1]<<1;for(i=0;i<=t;i++){var o=e[2*i+1];0!==o&&(e[2*i]=j(s[o]++,o))}}function W(e){var t;for(t=0;t<l;t++)e.dyn_ltree[2*t]=0;for(t=0;t<f;t++)e.dyn_dtree[2*t]=0;for(t=0;t<c;t++)e.bl_tree[2*t]=0;e.dyn_ltree[2*m]=1,e.opt_len=e.static_len=0,e.last_lit=e.matches=0}function M(e){8<e.bi_valid?U(e,e.bi_buf):0<e.bi_valid&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0}function H(e,t,r,n){var i=2*t,s=2*r;return e[i]<e[s]||e[i]===e[s]&&n[t]<=n[r]}function G(e,t,r){for(var n=e.heap[r],i=r<<1;i<=e.heap_len&&(i<e.heap_len&&H(t,e.heap[i+1],e.heap[i],e.depth)&&i++,!H(t,n,e.heap[i],e.depth));)e.heap[r]=e.heap[i],r=i,i<<=1;e.heap[r]=n}function K(e,t,r){var n,i,s,a,o=0;if(0!==e.last_lit)for(;n=e.pending_buf[e.d_buf+2*o]<<8|e.pending_buf[e.d_buf+2*o+1],i=e.pending_buf[e.l_buf+o],o++,0===n?L(e,i,t):(L(e,(s=A[i])+u+1,t),0!==(a=w[s])&&P(e,i-=I[s],a),L(e,s=N(--n),r),0!==(a=k[s])&&P(e,n-=T[s],a)),o<e.last_lit;);L(e,m,t)}function Y(e,t){var r,n,i,s=t.dyn_tree,a=t.stat_desc.static_tree,o=t.stat_desc.has_stree,h=t.stat_desc.elems,u=-1;for(e.heap_len=0,e.heap_max=_,r=0;r<h;r++)0!==s[2*r]?(e.heap[++e.heap_len]=u=r,e.depth[r]=0):s[2*r+1]=0;for(;e.heap_len<2;)s[2*(i=e.heap[++e.heap_len]=u<2?++u:0)]=1,e.depth[i]=0,e.opt_len--,o&&(e.static_len-=a[2*i+1]);for(t.max_code=u,r=e.heap_len>>1;1<=r;r--)G(e,s,r);for(i=h;r=e.heap[1],e.heap[1]=e.heap[e.heap_len--],G(e,s,1),n=e.heap[1],e.heap[--e.heap_max]=r,e.heap[--e.heap_max]=n,s[2*i]=s[2*r]+s[2*n],e.depth[i]=(e.depth[r]>=e.depth[n]?e.depth[r]:e.depth[n])+1,s[2*r+1]=s[2*n+1]=i,e.heap[1]=i++,G(e,s,1),2<=e.heap_len;);e.heap[--e.heap_max]=e.heap[1],function(e,t){var r,n,i,s,a,o,h=t.dyn_tree,u=t.max_code,l=t.stat_desc.static_tree,f=t.stat_desc.has_stree,c=t.stat_desc.extra_bits,d=t.stat_desc.extra_base,p=t.stat_desc.max_length,m=0;for(s=0;s<=g;s++)e.bl_count[s]=0;for(h[2*e.heap[e.heap_max]+1]=0,r=e.heap_max+1;r<_;r++)p<(s=h[2*h[2*(n=e.heap[r])+1]+1]+1)&&(s=p,m++),h[2*n+1]=s,u<n||(e.bl_count[s]++,a=0,d<=n&&(a=c[n-d]),o=h[2*n],e.opt_len+=o*(s+a),f&&(e.static_len+=o*(l[2*n+1]+a)));if(0!==m){do{for(s=p-1;0===e.bl_count[s];)s--;e.bl_count[s]--,e.bl_count[s+1]+=2,e.bl_count[p]--,m-=2}while(0<m);for(s=p;0!==s;s--)for(n=e.bl_count[s];0!==n;)u<(i=e.heap[--r])||(h[2*i+1]!==s&&(e.opt_len+=(s-h[2*i+1])*h[2*i],h[2*i+1]=s),n--)}}(e,t),Z(s,u,e.bl_count)}function X(e,t,r){var n,i,s=-1,a=t[1],o=0,h=7,u=4;for(0===a&&(h=138,u=3),t[2*(r+1)+1]=65535,n=0;n<=r;n++)i=a,a=t[2*(n+1)+1],++o<h&&i===a||(o<u?e.bl_tree[2*i]+=o:0!==i?(i!==s&&e.bl_tree[2*i]++,e.bl_tree[2*b]++):o<=10?e.bl_tree[2*v]++:e.bl_tree[2*y]++,s=i,u=(o=0)===a?(h=138,3):i===a?(h=6,3):(h=7,4))}function V(e,t,r){var n,i,s=-1,a=t[1],o=0,h=7,u=4;for(0===a&&(h=138,u=3),n=0;n<=r;n++)if(i=a,a=t[2*(n+1)+1],!(++o<h&&i===a)){if(o<u)for(;L(e,i,e.bl_tree),0!=--o;);else 0!==i?(i!==s&&(L(e,i,e.bl_tree),o--),L(e,b,e.bl_tree),P(e,o-3,2)):o<=10?(L(e,v,e.bl_tree),P(e,o-3,3)):(L(e,y,e.bl_tree),P(e,o-11,7));s=i,u=(o=0)===a?(h=138,3):i===a?(h=6,3):(h=7,4)}}n(T);var q=!1;function J(e,t,r,n){P(e,(s<<1)+(n?1:0),3),function(e,t,r,n){M(e),n&&(U(e,r),U(e,~r)),i.arraySet(e.pending_buf,e.window,t,r,e.pending),e.pending+=r}(e,t,r,!0)}r._tr_init=function(e){q||(function(){var e,t,r,n,i,s=new Array(g+1);for(n=r=0;n<a-1;n++)for(I[n]=r,e=0;e<1<<w[n];e++)A[r++]=n;for(A[r-1]=n,n=i=0;n<16;n++)for(T[n]=i,e=0;e<1<<k[n];e++)E[i++]=n;for(i>>=7;n<f;n++)for(T[n]=i<<7,e=0;e<1<<k[n]-7;e++)E[256+i++]=n;for(t=0;t<=g;t++)s[t]=0;for(e=0;e<=143;)z[2*e+1]=8,e++,s[8]++;for(;e<=255;)z[2*e+1]=9,e++,s[9]++;for(;e<=279;)z[2*e+1]=7,e++,s[7]++;for(;e<=287;)z[2*e+1]=8,e++,s[8]++;for(Z(z,l+1,s),e=0;e<f;e++)C[2*e+1]=5,C[2*e]=j(e,5);O=new D(z,w,u+1,l,g),B=new D(C,k,0,f,g),R=new D(new Array(0),x,0,c,p)}(),q=!0),e.l_desc=new F(e.dyn_ltree,O),e.d_desc=new F(e.dyn_dtree,B),e.bl_desc=new F(e.bl_tree,R),e.bi_buf=0,e.bi_valid=0,W(e)},r._tr_stored_block=J,r._tr_flush_block=function(e,t,r,n){var i,s,a=0;0<e.level?(2===e.strm.data_type&&(e.strm.data_type=function(e){var t,r=4093624447;for(t=0;t<=31;t++,r>>>=1)if(1&r&&0!==e.dyn_ltree[2*t])return o;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return h;for(t=32;t<u;t++)if(0!==e.dyn_ltree[2*t])return h;return o}(e)),Y(e,e.l_desc),Y(e,e.d_desc),a=function(e){var t;for(X(e,e.dyn_ltree,e.l_desc.max_code),X(e,e.dyn_dtree,e.d_desc.max_code),Y(e,e.bl_desc),t=c-1;3<=t&&0===e.bl_tree[2*S[t]+1];t--);return e.opt_len+=3*(t+1)+5+5+4,t}(e),i=e.opt_len+3+7>>>3,(s=e.static_len+3+7>>>3)<=i&&(i=s)):i=s=r+5,r+4<=i&&-1!==t?J(e,t,r,n):4===e.strategy||s===i?(P(e,2+(n?1:0),3),K(e,z,C)):(P(e,4+(n?1:0),3),function(e,t,r,n){var i;for(P(e,t-257,5),P(e,r-1,5),P(e,n-4,4),i=0;i<n;i++)P(e,e.bl_tree[2*S[i]+1],3);V(e,e.dyn_ltree,t-1),V(e,e.dyn_dtree,r-1)}(e,e.l_desc.max_code+1,e.d_desc.max_code+1,a+1),K(e,e.dyn_ltree,e.dyn_dtree)),W(e),n&&M(e)},r._tr_tally=function(e,t,r){return e.pending_buf[e.d_buf+2*e.last_lit]=t>>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&r,e.last_lit++,0===t?e.dyn_ltree[2*r]++:(e.matches++,t--,e.dyn_ltree[2*(A[r]+u+1)]++,e.dyn_dtree[2*N(t)]++),e.last_lit===e.lit_bufsize-1},r._tr_align=function(e){P(e,2,3),L(e,m,z),function(e){16===e.bi_valid?(U(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):8<=e.bi_valid&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}},{\"../utils/common\":41}],53:[function(e,t,r){\"use strict\";t.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=\"\",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(e,t,r){(function(e){!function(r,n){\"use strict\";if(!r.setImmediate){var i,s,t,a,o=1,h={},u=!1,l=r.document,e=Object.getPrototypeOf&&Object.getPrototypeOf(r);e=e&&e.setTimeout?e:r,i=\"[object process]\"==={}.toString.call(r.process)?function(e){process.nextTick(function(){c(e)})}:function(){if(r.postMessage&&!r.importScripts){var e=!0,t=r.onmessage;return r.onmessage=function(){e=!1},r.postMessage(\"\",\"*\"),r.onmessage=t,e}}()?(a=\"setImmediate$\"+Math.random()+\"$\",r.addEventListener?r.addEventListener(\"message\",d,!1):r.attachEvent(\"onmessage\",d),function(e){r.postMessage(a+e,\"*\")}):r.MessageChannel?((t=new MessageChannel).port1.onmessage=function(e){c(e.data)},function(e){t.port2.postMessage(e)}):l&&\"onreadystatechange\"in l.createElement(\"script\")?(s=l.documentElement,function(e){var t=l.createElement(\"script\");t.onreadystatechange=function(){c(e),t.onreadystatechange=null,s.removeChild(t),t=null},s.appendChild(t)}):function(e){setTimeout(c,0,e)},e.setImmediate=function(e){\"function\"!=typeof e&&(e=new Function(\"\"+e));for(var t=new Array(arguments.length-1),r=0;r<t.length;r++)t[r]=arguments[r+1];var n={callback:e,args:t};return h[o]=n,i(o),o++},e.clearImmediate=f}function f(e){delete h[e]}function c(e){if(u)setTimeout(c,0,e);else{var t=h[e];if(t){u=!0;try{!function(e){var t=e.callback,r=e.args;switch(r.length){case 0:t();break;case 1:t(r[0]);break;case 2:t(r[0],r[1]);break;case 3:t(r[0],r[1],r[2]);break;default:t.apply(n,r)}}(t)}finally{f(e),u=!1}}}}function d(e){e.source===r&&\"string\"==typeof e.data&&0===e.data.indexOf(a)&&c(+e.data.slice(a.length))}}(\"undefined\"==typeof self?void 0===e?this:e:self)}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}]},{},[10])(10)});","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fetchArrayBuffer = fetchArrayBuffer;\nasync function fetchArrayBuffer(url) {\n    const result = await fetch(url);\n    return result.arrayBuffer();\n}\n//# sourceMappingURL=fetchArrayBuffer.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.loadCommercials = loadCommercials;\nconst jszip_1 = __importDefault(require(\"jszip\"));\nconst fetchArrayBuffer_1 = require(\"./util/fetchArrayBuffer\");\nconst loadingPromises = {};\nasync function loadCommercials(options = {}) {\n    const { url = 'https://couch.cheminfo.org/cheminfo-public/d2eb480198c80275a1d05dd3609414f9/upload/commercials.zip', } = options;\n    if (!loadingPromises[url]) {\n        loadingPromises[url] = (0, fetchArrayBuffer_1.fetchArrayBuffer)(url);\n    }\n    const buffer = await loadingPromises[url];\n    const jsZip = new jszip_1.default();\n    let zip = await jsZip.loadAsync(buffer);\n    let fileData = await zip.files['commercials.json'].async('string');\n    let data = JSON.parse(fileData);\n    data.sort((a, b) => a.em - b.em);\n    return data;\n}\n//# sourceMappingURL=loadCommercials.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fetchText = fetchText;\nasync function fetchText(url) {\n    const result = await fetch(url);\n    if (result.status !== 200) {\n        throw new Error(String(result.status));\n    }\n    return result.text();\n}\n//# sourceMappingURL=fetchText.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.mfFromGoogleSheet = mfFromGoogleSheet;\nconst mf_generator_1 = require(\"mf-generator\");\nconst mf_parser_1 = require(\"mf-parser\");\nconst papaparse_1 = __importDefault(require(\"papaparse\"));\nconst fetchText_js_1 = require(\"./util/fetchText.js\");\nasync function mfFromGoogleSheet(url, options = {}) {\n    let { urlReferences } = options;\n    if (urlReferences) {\n        let results = await Promise.all([(0, fetchText_js_1.fetchText)(url), (0, fetchText_js_1.fetchText)(urlReferences)]);\n        return parse(results[0], results[1]);\n    }\n    else {\n        let result = await (0, fetchText_js_1.fetchText)(url);\n        return parse(result);\n    }\n}\nasync function parse(tsv, tsvReferences) {\n    let parsed = papaparse_1.default.parse(tsv, {\n        delimiter: '\\t',\n        header: true,\n    });\n    let fields = parsed.meta.fields;\n    let infoFields = fields.filter((a) => !['mf', 'modif', 'ESI', 'MALDI', 'positive', 'negative'].includes(a));\n    let formulas = parsed.data;\n    let references = {};\n    if (tsvReferences) {\n        let referencesArray = papaparse_1.default.parse(tsvReferences, {\n            delimiter: '\\t',\n            header: true,\n        }).data;\n        for (const r of referencesArray) {\n            references[r.label] = r;\n        }\n    }\n    let results = [];\n    for (let formula of formulas) {\n        if (tsvReferences) {\n            // we add references\n            let refs = formula.references.split(/[ ,]+/);\n            formula.references = [];\n            for (let ref of refs) {\n                formula.references.push(references[ref]);\n            }\n        }\n        // we need to calculate all the possibilities\n        try {\n            let mfs = await (0, mf_generator_1.generateMFs)([formula.mf], {\n                ionizations: formula.modif,\n            });\n            for (let mf of mfs) {\n                mf.info = {};\n                for (let infoField of infoFields) {\n                    mf.info[infoField] = formula[infoField];\n                }\n                if (!formula.ESI &&\n                    !formula.MALDI &&\n                    !formula.positive &&\n                    !formula.negative) {\n                    mf.filter = {\n                        ESI: true,\n                        MALDI: true,\n                        positive: true,\n                        negative: true,\n                    };\n                }\n                else {\n                    mf.filter = {\n                        ESI: formula.ESI === 'X',\n                        MALDI: formula.MALDI === 'X',\n                        positive: formula.positive === 'X',\n                        negative: formula.negative === 'X',\n                    };\n                }\n                mf.mf = new mf_parser_1.MF(mf.mf).toMF();\n                results.push(mf);\n            }\n        }\n        catch (error) {\n            // eslint-disable-next-line no-console\n            console.warn('Non parsable molecular formula:', formula.mf, formula.modif, error.toString());\n        }\n    }\n    results = results.filter((a) => {\n        return a.ms.em !== 0;\n    });\n    results.sort((a, b) => {\n        return a.ms.em - b.ms.em;\n    });\n    let uniqueResults = [results[0]];\n    for (let i = 1; i < results.length; i++) {\n        if (results[i - 1].ms.em !== results[i].ms.em) {\n            uniqueResults.push(results[i]);\n        }\n    }\n    return uniqueResults;\n}\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.loadGoogleSheet = loadGoogleSheet;\nconst mf_from_google_sheet_1 = require(\"mf-from-google-sheet\");\nasync function loadGoogleSheet(options = {}) {\n    let { refUUID = '1C_H9aiJyu9M9in7sHMOaz-d3Sv758rE72oLxEKH9ioA', uuid = '1LrJCl9-xSZKhGA9Y8nKVkYwB-mEOHBkTXg5qYXeFpZY', } = options;\n    if (options.uuid && !options.refUUID)\n        refUUID = '';\n    let url = `https://googledocs.cheminfo.org/spreadsheets/d/${uuid}/export?format=tsv`;\n    let refURL = refUUID\n        ? `https://googledocs.cheminfo.org/spreadsheets/d/${refUUID}/export?format=tsv`\n        : '';\n    let data = await (0, mf_from_google_sheet_1.mfFromGoogleSheet)(url, refURL);\n    data.sort((a, b) => a.em - b.em);\n    return data;\n}\n//# sourceMappingURL=loadGoogleSheet.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.loadKnapSack = loadKnapSack;\nconst jszip_1 = __importDefault(require(\"jszip\"));\nconst fetchArrayBuffer_1 = require(\"./util/fetchArrayBuffer\");\nconst loadingPromises = {};\nasync function loadKnapSack(options = {}) {\n    const { url = 'https://couch.cheminfo.org/cheminfo-public/d2eb480198c80275a1d05dd3609414f9/upload/ms.zip', } = options;\n    if (!loadingPromises[url]) {\n        loadingPromises[url] = (0, fetchArrayBuffer_1.fetchArrayBuffer)(url);\n    }\n    const buffer = await loadingPromises[url];\n    const jsZip = new jszip_1.default();\n    let zip = await jsZip.loadAsync(buffer);\n    let fileData = await zip.files['ms.json'].async('string');\n    let data = JSON.parse(fileData);\n    for (const d of data) {\n        d.url = `http://kanaya.naist.jp/knapsack_jsp/information.jsp?word=${d.id}`;\n    }\n    data.sort((a, b) => a.em - b.em);\n    return data;\n}\n//# sourceMappingURL=loadKnapSack.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.search = search;\nconst mf_matcher_1 = require(\"mf-matcher\");\n/**\n    Searching by various criteria. This mass will not take into account the mass\n    of the mass of the electron\n* @param {object}   [filter={}]\n* @param {number}   [filter.minMW=0] - Minimal molecular weight\n* @param {number}   [filter.maxMW=+Infinity] - Maximal molecular weight\n* @param {number}   [filter.minEM=0] - Minimal monoisotopic mass\n* @param {number}   [filter.maxEM=+Infinity] - Maximal monoisotopic mass\n* @param {number}   [filter.minCharge=-Infinity] - Minimal charge\n* @param {number}   [filter.maxCharge=+Infinity] - Maximal charge\n* @param {boolean}   [filter.absoluteCharge=false] - If true, the charge is absolute (so between 0 and +Infinity by default)\n* @param {object}   [filter.unsaturation={}]\n* @param {number}   [filter.unsaturation.min=-Infinity] - Minimal unsaturation\n* @param {number}   [filter.unsaturation.max=+Infinity] - Maximal unsaturation\n* @param {boolean}   [filter.unsaturation.onlyInteger=false] - Integer unsaturation\n* @param {boolean}   [filter.unsaturation.onlyNonInteger=false] - Non integer unsaturation\n* @param {object}   [filter.atoms] - object of atom:{min, max}\n\n* @param {object}   [options={}]\n* @param {array}    [options.databases] - an array containing the name of the databases so search, by default all\n* @param {boolean}  [options.flatten=false] - should we return the array as a flat result\n*/\nfunction search(emdb, filter, options = {}) {\n    let { databases = Object.keys(emdb.databases), flatten = false } = options;\n    let results = {};\n    for (let database of databases) {\n        results[database] = emdb.databases[database].filter((entry) => (0, mf_matcher_1.generalMatcher)(entry, filter));\n    }\n    if (flatten) {\n        let flattenResults = [];\n        for (let database of databases) {\n            for (let entry of results[database]) {\n                entry.database = database;\n                flattenResults.push(entry);\n            }\n        }\n        return flattenResults;\n    }\n    else {\n        return results;\n    }\n}\n//# sourceMappingURL=search.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.searchMSEM = searchMSEM;\nconst mf_matcher_1 = require(\"mf-matcher\");\nconst mf_utilities_1 = require(\"mf-utilities\");\n/**\nSearch for an experimental monoisotopic mass\n* @param {number}   msem - The observed monoisotopic mass\n* @param {object}   [options={}]\n* @param {array}    [options.databases] - an array containing the name of the databases so search, by default all\n* @param {boolean}  [options.flatten=false] - should we return the array as a flat result\n* @param {string}   [options.ionizations] - list the allowed ionizations possibilities\n* @param {import('mf-matcher').MSEMFilterOptions}        [options.filter={}]\n*/\nfunction searchMSEM(emdb, msem, options = {}) {\n    let filter = { ...options.filter, targetMass: msem };\n    let { databases = Object.keys(emdb.databases), flatten = false } = options;\n    let ionizations = (0, mf_utilities_1.preprocessIonizations)(options.ionizations);\n    let results = {};\n    for (let database of databases) {\n        results[database] = [];\n    }\n    for (let ionization of ionizations) {\n        filter.ionization = ionization;\n        for (let database of databases) {\n            for (let entry of emdb.databases[database]) {\n                let match = (0, mf_matcher_1.msemMatcher)(entry, filter);\n                if (match) {\n                    results[database].push({\n                        ...entry,\n                        ms: match.ms,\n                        ionization: match.ionization,\n                    });\n                }\n            }\n        }\n    }\n    if (flatten) {\n        let flattenResults = [];\n        for (let database of databases) {\n            for (let entry of results[database]) {\n                entry.database = database;\n                flattenResults.push(entry);\n            }\n        }\n        flattenResults.sort((a, b) => Math.abs(a.ms.ppm) - Math.abs(b.ms.ppm));\n        return flattenResults;\n    }\n    else {\n        for (const k of Object.keys(results)) {\n            results[k].sort((a, b) => Math.abs(a.ms.ppm) - Math.abs(b.ms.ppm));\n        }\n        return results;\n    }\n}\n//# sourceMappingURL=searchMSEM.js.map","import { getShape1D } from 'ml-peak-shape-generator';\nexport class BaseSpectrumGenerator {\n    from;\n    to;\n    nbPoints;\n    interval;\n    peakWidthFct;\n    shape;\n    constructor(options = {}) {\n        const { from = 0, to = 1000, nbPoints = 10001, peakWidthFct, shape = { kind: 'gaussian', fwhm: 5 }, } = options;\n        assertNumber(from, 'from');\n        assertNumber(to, 'to');\n        assertInteger(nbPoints, 'nbPoints');\n        if (to <= from) {\n            throw new RangeError('to option must be larger than from');\n        }\n        if (peakWidthFct && typeof peakWidthFct !== 'function') {\n            throw new TypeError('peakWidthFct option must be a function');\n        }\n        this.from = from;\n        this.to = to;\n        this.nbPoints = nbPoints;\n        this.interval = (to - from) / (nbPoints - 1);\n        this.peakWidthFct = peakWidthFct;\n        this.shape = getShape1D(shape);\n    }\n    /**\n     * Resolves a peak to its canonical parameters, cloning and configuring\n     * separate shape instances for the left and right halves.\n     */\n    resolvePeak(peak, options) {\n        let x0;\n        let intensity;\n        let peakFWHM;\n        let peakWidth;\n        let peakShapeOptions;\n        if (Array.isArray(peak)) {\n            [x0, intensity, peakFWHM, peakShapeOptions] = peak;\n        }\n        else {\n            x0 = peak.x;\n            intensity = peak.y;\n            peakWidth = peak.width;\n            peakShapeOptions = peak.shape;\n        }\n        let { shape: shapeOptions } = options;\n        if (peakShapeOptions) {\n            shapeOptions = shapeOptions\n                ? { ...shapeOptions, ...peakShapeOptions }\n                : peakShapeOptions;\n        }\n        const shape = shapeOptions\n            ? getShape1D(shapeOptions)\n            : cloneShape(this.shape);\n        const { width } = options;\n        let { widthLeft, widthRight } = options;\n        const fwhm = peakFWHM !== undefined\n            ? peakFWHM\n            : peakWidth\n                ? shape.widthToFWHM(peakWidth)\n                : this.peakWidthFct\n                    ? this.peakWidthFct(x0)\n                    : width !== undefined\n                        ? width\n                        : shape.fwhm;\n        if (!widthLeft)\n            widthLeft = fwhm;\n        if (!widthRight)\n            widthRight = fwhm;\n        if (!widthLeft || !widthRight) {\n            throw new Error('Width left or right is undefined or zero');\n        }\n        const factor = options.factor === undefined ? shape.getFactor() : options.factor;\n        const shapeLeft = cloneShape(shape);\n        shapeLeft.fwhm = widthLeft;\n        const shapeRight = cloneShape(shape);\n        shapeRight.fwhm = widthRight;\n        return {\n            x0,\n            intensity,\n            shapeLeft,\n            shapeRight,\n            widthLeft,\n            widthRight,\n            factor,\n        };\n    }\n}\nfunction cloneShape(shape) {\n    return Object.assign(Object.create(Object.getPrototypeOf(shape)), shape);\n}\nfunction assertInteger(value, name) {\n    if (!Number.isInteger(value)) {\n        throw new TypeError(`${name} option must be an integer`);\n    }\n}\nfunction assertNumber(value, name) {\n    if (!Number.isFinite(value)) {\n        throw new TypeError(`${name} option must be a number`);\n    }\n}\n//# sourceMappingURL=BaseSpectrumGenerator.js.map","import { BaseSpectrumGenerator } from \"./BaseSpectrumGenerator.js\";\nimport addBaseline from \"./util/addBaseline.js\";\nimport addNoise from \"./util/addNoise.js\";\nexport { BaseSpectrumGenerator } from \"./BaseSpectrumGenerator.js\";\nexport class SpectrumGenerator extends BaseSpectrumGenerator {\n    maxPeakHeight;\n    data;\n    constructor(options = {}) {\n        super(options);\n        this.maxPeakHeight = Number.MIN_SAFE_INTEGER;\n        this.data = {\n            x: new Float64Array(this.nbPoints),\n            y: new Float64Array(this.nbPoints),\n        };\n        this.reset();\n    }\n    /**\n     * Generates a spectrum from a list of peaks and returns it.\n     * @param peaks - List of peaks to add.\n     * @param options - Options for spectrum generation.\n     * @returns The generated spectrum data.\n     */\n    generateSpectrum(peaks, options = {}) {\n        const { noise, baseline, threshold, peakOptions } = options;\n        this.addPeaks(peaks, peakOptions);\n        if (baseline)\n            this.addBaseline(baseline);\n        if (noise)\n            this.addNoise(noise);\n        return this.getSpectrum({ threshold });\n    }\n    /**\n     * Add a series of peaks to the spectrum.\n     * @param peaks - Peaks to add.\n     * @param options - Options for adding peaks.\n     * @returns The generator instance.\n     */\n    addPeaks(peaks, options) {\n        if (!Array.isArray(peaks) &&\n            (typeof peaks !== 'object' ||\n                peaks.x === undefined ||\n                peaks.y === undefined ||\n                !Array.isArray(peaks.x) ||\n                !Array.isArray(peaks.y) ||\n                peaks.x.length !== peaks.y.length)) {\n            throw new TypeError('peaks must be an array or an object containing x[] and y[]');\n        }\n        if (Array.isArray(peaks)) {\n            for (const peak of peaks) {\n                this.addPeak(peak, options);\n            }\n        }\n        else {\n            for (let i = 0; i < peaks.x.length; i++) {\n                this.addPeak([peaks.x[i], peaks.y[i]], options);\n            }\n        }\n        return this;\n    }\n    /**\n     * Add a single peak to the spectrum.\n     * A peak may be either defined as [x,y,fwhm,...] or as {x, y, shape}\n     * @param peak - The peak to add, defined as array or object.\n     * @param options - Options for adding the peak.\n     * @returns The generator instance.\n     */\n    addPeak(peak, options = {}) {\n        if (Array.isArray(peak) && peak.length < 2) {\n            throw new Error('peak must be an array with two (or three) values or an object with {x,y,width?}');\n        }\n        if (!Array.isArray(peak) &&\n            (peak.x === undefined || peak.y === undefined)) {\n            throw new Error('peak must be an array with two (or three) values or an object with {x,y,width?}');\n        }\n        const { x0, intensity, shapeLeft, shapeRight, widthLeft, widthRight, factor, } = this.resolvePeak(peak, options);\n        if (intensity > this.maxPeakHeight)\n            this.maxPeakHeight = intensity;\n        const firstValue = x0 - (widthLeft / 2) * factor;\n        const lastValue = x0 + (widthRight / 2) * factor;\n        const firstPoint = Math.max(0, Math.floor((firstValue - this.from) / this.interval));\n        const lastPoint = Math.min(this.nbPoints - 1, Math.ceil((lastValue - this.from) / this.interval));\n        const middlePoint = Math.round((x0 - this.from) / this.interval);\n        // PEAK SHAPE MAY BE ASYMMETRIC (widthLeft and widthRight) !\n        // we calculate the left part of the shape\n        for (let index = firstPoint; index < Math.max(middlePoint, 0); index++) {\n            this.data.y[index] += intensity * shapeLeft.fct(this.data.x[index] - x0);\n        }\n        // we calculate the right part of the gaussian\n        for (let index = Math.min(middlePoint, lastPoint); index <= lastPoint; index++) {\n            this.data.y[index] += intensity * shapeRight.fct(this.data.x[index] - x0);\n        }\n        return this;\n    }\n    /**\n     * Add a baseline to the spectrum.\n     * @param baselineFct - Mathematical function producing the baseline you want.\n     * @returns The generator instance.\n     */\n    addBaseline(baselineFct) {\n        addBaseline(this.data, baselineFct);\n        return this;\n    }\n    /**\n     * Add noise to the spectrum.\n     * @param options - Configuration for noise generation.\n     * @returns The generator instance.\n     */\n    addNoise(options) {\n        addNoise(this.data, options);\n        return this;\n    }\n    /**\n     * Get the generated spectrum.\n     * @param options - Options for getting the spectrum.\n     * @returns The generated spectrum data.\n     */\n    getSpectrum(options = {}) {\n        if (typeof options === 'boolean') {\n            options = { copy: options };\n        }\n        const { copy = true, threshold = 0 } = options;\n        if (threshold) {\n            const minPeakHeight = this.maxPeakHeight * threshold;\n            const x = [];\n            const y = [];\n            for (let i = 0; i < this.data.x.length; i++) {\n                if (this.data.y[i] >= minPeakHeight) {\n                    x.push(this.data.x[i]);\n                    y.push(this.data.y[i]);\n                }\n            }\n            return { x: Float64Array.from(x), y: Float64Array.from(y) };\n        }\n        if (copy) {\n            return {\n                x: this.data.x.slice(),\n                y: this.data.y.slice(),\n            };\n        }\n        else {\n            return this.data;\n        }\n    }\n    /**\n     * Resets the generator with an empty spectrum.\n     * @returns The generator instance.\n     */\n    reset() {\n        if (this.nbPoints === 1) {\n            this.data.x[0] = (this.from + this.to) / 2;\n        }\n        else {\n            for (let i = 0; i < this.nbPoints; i++) {\n                this.data.x[i] = this.from + i * this.interval;\n            }\n        }\n        return this;\n    }\n}\n//# sourceMappingURL=SpectrumGenerator.js.map","/**\n * Adds a baseline to the spectrum data.\n * @param data - The spectrum data to modify.\n * @param baselineFct - Function that generates the baseline value for a given x.\n * @returns The modified spectrum data.\n */\nexport default function addBaseline(data, baselineFct) {\n    if (!baselineFct)\n        return data;\n    const xs = data.x;\n    const ys = data.y;\n    for (let i = 0; i < xs.length; i++) {\n        ys[i] += baselineFct(xs[i]);\n    }\n    return data;\n}\n//# sourceMappingURL=addBaseline.js.map","import { xMaxValue, xAdd, createRandomArray } from 'ml-spectra-processing';\n/**\n * Adds noise to the spectrum data.\n * @param data - The spectrum data to modify.\n * @param options - Configuration for noise generation.\n * @returns The modified spectrum data.\n */\nexport default function addNoise(data, options = {}) {\n    const { seed = 0, distribution = 'normal', percent = 1 } = options;\n    const range = (xMaxValue(data.y) * percent) / 100;\n    const noise = createRandomArray({\n        distribution,\n        seed,\n        mean: 0,\n        standardDeviation: range,\n        range,\n        length: data.x.length,\n    });\n    data.y = xAdd(data.y, noise);\n    return data;\n}\n//# sourceMappingURL=addNoise.js.map","import { getShape2D } from 'ml-peak-shape-generator';\nimport { matrixCreateEmpty, matrixMinMaxZ } from 'ml-spectra-processing';\nconst axis2D = ['x', 'y'];\nconst peakCoordinates = ['x', 'y', 'z'];\n/**\n * Converts a width value to full width at half maximum (FWHM).\n * @param shape - The 2D shape to use for conversion.\n * @param width - The width value to convert.\n * @returns The converted FWHM value as an XYNumber object.\n */\nconst convertWidthToFWHM = (shape, width) => {\n    const widthData = ensureXYNumber(width);\n    for (const key of axis2D) {\n        widthData[key] = shape.widthToFWHM(widthData[key]);\n    }\n    return widthData;\n};\nexport class Spectrum2DGenerator {\n    from;\n    to;\n    nbPoints;\n    interval;\n    data;\n    maxPeakHeight;\n    shape;\n    peakWidthFct;\n    constructor(options = {}) {\n        const { peakWidthFct = () => 5, shape = {\n            kind: 'gaussian',\n        }, } = options;\n        let { from = 0, to = 100, nbPoints = 1001 } = options;\n        from = ensureXYNumber(from);\n        to = ensureXYNumber(to);\n        nbPoints = ensureXYNumber(nbPoints);\n        for (const axis of axis2D) {\n            assertNumber(from[axis], `from-${axis}`);\n            assertNumber(to[axis], `to-${axis}`);\n            assertInteger(nbPoints[axis], `nbPoints-${axis}`);\n        }\n        this.from = from;\n        this.to = to;\n        this.nbPoints = nbPoints;\n        this.interval = calculeIntervals(from, to, nbPoints);\n        this.peakWidthFct = peakWidthFct;\n        this.maxPeakHeight = Number.MIN_SAFE_INTEGER;\n        const shapeGenerator = getShape2D(shape);\n        this.shape = shapeGenerator;\n        this.data = {\n            x: new Float64Array(nbPoints.x),\n            y: new Float64Array(nbPoints.y),\n            z: matrixCreateEmpty({\n                nbRows: this.nbPoints.y,\n                nbColumns: this.nbPoints.x,\n            }),\n        };\n        for (const axis of axis2D) {\n            if (this.to[axis] <= this.from[axis]) {\n                throw new RangeError('to option must be larger than from');\n            }\n        }\n        if (typeof this.peakWidthFct !== 'function') {\n            throw new TypeError('peakWidthFct option must be a function');\n        }\n        this.reset();\n    }\n    /**\n     * Adds multiple peaks to the 2D spectrum.\n     * @param peaks - Array of peaks or peak series to add.\n     * @param options - Options for adding peaks.\n     * @returns The generator instance.\n     */\n    addPeaks(peaks, options) {\n        if (!Array.isArray(peaks) &&\n            (typeof peaks !== 'object' ||\n                peaks.x === undefined ||\n                peaks.y === undefined ||\n                !Array.isArray(peaks.x) ||\n                !Array.isArray(peaks.y) ||\n                peaks.x.length !== peaks.y.length)) {\n            throw new TypeError('peaks must be an array or an object containing x[] and y[]');\n        }\n        if (Array.isArray(peaks)) {\n            for (const peak of peaks) {\n                this.addPeak(peak, options);\n            }\n        }\n        else {\n            if (!Array.isArray(peaks.x) ||\n                !Array.isArray(peaks.y) ||\n                !Array.isArray(peaks.z)) {\n                throw new TypeError('x, y, z must all be arrays');\n            }\n            const nbPeaks = peaks.x.length;\n            if (peaks.y.length !== nbPeaks || peaks.z.length !== nbPeaks) {\n                throw new Error('x, y, z should have the same length');\n            }\n            for (let i = 0; i < nbPeaks; i++) {\n                this.addPeak([peaks.x[i], peaks.y[i], peaks.z[i]], options);\n            }\n        }\n        return this;\n    }\n    /**\n     * Adds a single peak to the 2D spectrum.\n     * @param peak - Peak to add, can be array or object format.\n     * @param options - Options for adding the peak.\n     * @returns The generator instance.\n     */\n    addPeak(peak, options = {}) {\n        if (Array.isArray(peak) && peak.length < 3) {\n            throw new Error('peak must be an array with three (or four) values or an object with {x,y,z,width?}');\n        }\n        if (!Array.isArray(peak) &&\n            peakCoordinates.some((e) => peak[e] === undefined)) {\n            throw new Error('peak must be an array with three (or four) values or an object with {x,y,z,width?}');\n        }\n        let xPosition;\n        let yPosition;\n        let intensity;\n        let peakFWHM;\n        let peakWidth;\n        let peakShapeOptions;\n        if (Array.isArray(peak)) {\n            [xPosition, yPosition, intensity, peakFWHM, peakShapeOptions] = peak;\n        }\n        else {\n            xPosition = peak.x;\n            yPosition = peak.y;\n            intensity = peak.z;\n            peakFWHM = peak.fwhm;\n            peakWidth = peak.width;\n            peakShapeOptions = peak.shape;\n        }\n        const position = { x: xPosition, y: yPosition };\n        if (intensity > this.maxPeakHeight)\n            this.maxPeakHeight = intensity;\n        const { width } = options;\n        let { shape: shapeOptions } = options;\n        if (peakShapeOptions) {\n            shapeOptions = shapeOptions\n                ? { ...shapeOptions, ...peakShapeOptions }\n                : peakShapeOptions;\n        }\n        const shape = shapeOptions\n            ? getShape2D(shapeOptions)\n            : Object.assign(Object.create(Object.getPrototypeOf(this.shape)), structuredClone(this.shape));\n        let { fwhm = peakFWHM !== undefined\n            ? peakFWHM\n            : peakWidth\n                ? convertWidthToFWHM(shape, peakWidth)\n                : width\n                    ? convertWidthToFWHM(shape, width)\n                    : this.peakWidthFct(xPosition, yPosition), } = options;\n        fwhm = ensureXYNumber(fwhm);\n        let factor = options.factor === undefined ? shape.getFactor() : options.factor;\n        factor = ensureXYNumber(factor);\n        const firstPoint = { x: 0, y: 0 };\n        const lastPoint = { x: 0, y: 0 };\n        for (const axis of axis2D) {\n            const first = position[axis] - (fwhm[axis] / 2) * factor[axis];\n            const last = position[axis] + (fwhm[axis] / 2) * factor[axis];\n            firstPoint[axis] = Math.max(0, Math.floor((first - this.from[axis]) / this.interval[axis]));\n            lastPoint[axis] = Math.min(this.nbPoints[axis], Math.ceil((last - this.from[axis]) / this.interval[axis]));\n        }\n        shape.fwhm = fwhm;\n        for (let xIndex = firstPoint.x; xIndex < lastPoint.x; xIndex++) {\n            for (let yIndex = firstPoint.y; yIndex < lastPoint.y; yIndex++) {\n                const value = intensity *\n                    shape.fct(this.data.x[xIndex] - position.x, this.data.y[yIndex] - position.y);\n                if (Math.abs(value) > 1e-6) {\n                    this.data.z[yIndex][xIndex] += value;\n                }\n            }\n        }\n        return this;\n    }\n    /**\n     * Gets the generated 2D spectrum data.\n     * @param options - Options for getting the spectrum.\n     * @returns The spectrum data object.\n     */\n    getSpectrum(options = {}) {\n        if (typeof options === 'boolean') {\n            options = { copy: options };\n        }\n        const { copy = true } = options;\n        const minMaxZ = matrixMinMaxZ(this.data.z);\n        return {\n            minX: this.from.x,\n            maxX: this.to.x,\n            maxY: this.to.y,\n            minY: this.from.y,\n            minZ: minMaxZ.min,\n            maxZ: minMaxZ.max,\n            z: copy ? this.data.z.slice() : this.data.z,\n        };\n    }\n    /**\n     * Resets the generator to initial state.\n     * @returns The generator instance.\n     */\n    reset() {\n        const spectrum = this.data;\n        for (const axis of axis2D) {\n            for (let i = 0; i < this.nbPoints[axis]; i++) {\n                spectrum[axis][i] = this.from[axis] + i * this.interval[axis];\n            }\n        }\n        for (const row of spectrum.z) {\n            for (let j = 0; j < row.length; j++) {\n                row[j] = 0;\n            }\n        }\n        return this;\n    }\n}\n/**\n * Generates a 2D spectrum with the given peaks.\n * @param peaks - Peaks to include in the spectrum.\n * @param options - Options for spectrum generation.\n * @returns The generated spectrum data.\n */\nexport function generateSpectrum2D(peaks, options = {}) {\n    const { generator: generatorOptions, peaks: addPeaksOptions } = options;\n    const generator = new Spectrum2DGenerator(generatorOptions);\n    generator.addPeaks(peaks, addPeaksOptions);\n    return generator.getSpectrum();\n}\n/**\n * Ensures the input is an XYNumber object.\n * @param input - Number or XYNumber to process.\n * @returns An XYNumber object.\n */\nfunction ensureXYNumber(input) {\n    return typeof input !== 'object' ? { x: input, y: input } : { ...input };\n}\n/**\n * Calculates the intervals between points for both x and y axes.\n * @param from - Starting point coordinates.\n * @param to - Ending point coordinates.\n * @param nbPoints - Number of points in each dimension.\n * @returns The calculated intervals as an XYNumber object.\n */\nfunction calculeIntervals(from, to, nbPoints) {\n    return {\n        x: (to.x - from.x) / (nbPoints.x - 1),\n        y: (to.y - from.y) / (nbPoints.y - 1),\n    };\n}\n/**\n * Validates if a value is an integer.\n * @param value - Number to validate.\n * @param name - Name of the parameter for error message.\n * @throws {TypeError} If value is not an integer.\n */\nfunction assertInteger(value, name) {\n    if (!Number.isInteger(value)) {\n        throw new TypeError(`${name} option must be an integer`);\n    }\n}\n/**\n * Validates if a value is a finite number.\n * @param value - Number to validate.\n * @param name - Name of the parameter for error message.\n * @throws {TypeError} If value is not a finite number.\n */\nfunction assertNumber(value, name) {\n    if (!Number.isFinite(value)) {\n        throw new TypeError(`${name} option must be a number`);\n    }\n}\n//# sourceMappingURL=Spectrum2DGenerator.js.map","import { BaseSpectrumGenerator } from \"./BaseSpectrumGenerator.js\";\nexport class SparseSpectrumGenerator extends BaseSpectrumGenerator {\n    constructor(options = {}) {\n        super(options);\n    }\n    /**\n     * Generates a sparse spectrum containing only x values where at least one\n     * peak contributes above the threshold. No dense array is allocated:\n     * intervals are computed per peak first, then y is evaluated only for the\n     * merged set of required x values.\n     * @param peaks - List of peaks to include.\n     * @param options - Options for sparse spectrum generation.\n     * @returns Sparse spectrum data with x and y arrays covering only peak regions.\n     */\n    generateSparseSpectrum(peaks, options = {}) {\n        if ('noise' in options) {\n            throw new Error('noise is not supported for sparse spectrum generation');\n        }\n        const { baseline, peakOptions = {}, threshold = 1e-7 } = options;\n        const peakArray = Array.isArray(peaks)\n            ? peaks\n            : Array.from(peaks.x, (x, i) => peaks.fwhm !== undefined\n                ? [x, peaks.y[i], peaks.fwhm[i]]\n                : [x, peaks.y[i]]);\n        const resolvedPeaks = peakArray\n            .map((peak) => {\n            const { x0, intensity, shapeLeft, shapeRight } = this.resolvePeak(peak, peakOptions);\n            return {\n                x0,\n                intensity,\n                shapeLeft,\n                shapeRight,\n                xFrom: x0 - computeHalfWidth(shapeLeft, threshold),\n                xTo: x0 + computeHalfWidth(shapeRight, threshold),\n            };\n        })\n            .filter((p) => p.xFrom < this.to && p.xTo > this.from);\n        if (resolvedPeaks.length === 0) {\n            return {\n                x: Float64Array.from([this.from, this.to]),\n                y: baseline\n                    ? Float64Array.from([baseline(this.from), baseline(this.to)])\n                    : new Float64Array(2),\n            };\n        }\n        for (const peak of resolvedPeaks) {\n            peak.xFrom = Math.max(this.from, peak.xFrom);\n            peak.xTo = Math.min(this.to, peak.xTo);\n        }\n        resolvedPeaks.sort((a, b) => a.xFrom - b.xFrom);\n        const mergedIntervals = [];\n        for (const peak of resolvedPeaks) {\n            const last = mergedIntervals.at(-1);\n            if (last !== undefined && peak.xFrom <= last.xTo) {\n                last.xTo = Math.max(last.xTo, peak.xTo);\n                last.peaks.push(peak);\n            }\n            else {\n                mergedIntervals.push({\n                    xFrom: peak.xFrom,\n                    xTo: peak.xTo,\n                    peaks: [peak],\n                });\n            }\n        }\n        const xResult = [this.from];\n        const yResult = [0];\n        // tracks the last grid index written to avoid duplicate guard points when\n        // two intervals are only one step apart\n        let lastWrittenIndex = 0;\n        for (const interval of mergedIntervals) {\n            const firstIndex = Math.max(0, Math.floor((interval.xFrom - this.from) / this.interval));\n            const lastIndex = Math.min(this.nbPoints - 1, Math.ceil((interval.xTo - this.from) / this.interval));\n            const guardBefore = firstIndex - 1;\n            if (guardBefore >= 0 && guardBefore > lastWrittenIndex) {\n                xResult.push(this.from + guardBefore * this.interval);\n                yResult.push(0);\n                lastWrittenIndex = guardBefore;\n            }\n            for (let i = firstIndex; i <= lastIndex; i++) {\n                const x = this.from + i * this.interval;\n                let y = 0;\n                for (const peak of interval.peaks) {\n                    const shape = x < peak.x0 ? peak.shapeLeft : peak.shapeRight;\n                    y += peak.intensity * shape.fct(x - peak.x0);\n                }\n                xResult.push(x);\n                yResult.push(y);\n                lastWrittenIndex = i;\n            }\n            const guardAfter = lastIndex + 1;\n            if (guardAfter < this.nbPoints) {\n                xResult.push(this.from + guardAfter * this.interval);\n                yResult.push(0);\n                lastWrittenIndex = guardAfter;\n            }\n        }\n        if (xResult[0] !== this.from) {\n            xResult.unshift(this.from);\n            yResult.unshift(0);\n        }\n        if (xResult[xResult.length - 1] !== this.to) {\n            xResult.push(this.to);\n            yResult.push(0);\n        }\n        if (baseline) {\n            for (let i = 0; i < yResult.length; i++) {\n                yResult[i] += baseline(xResult[i]);\n            }\n        }\n        return {\n            x: Float64Array.from(xResult),\n            y: Float64Array.from(yResult),\n        };\n    }\n}\n/**\n * Finds the half-width d at which shape.fct(d) equals the given threshold via\n * binary search. Works for any monotonically decreasing shape function.\n */\nfunction computeHalfWidth(shape, threshold) {\n    if (threshold <= 0)\n        return Infinity;\n    if (shape.fct(0) <= threshold)\n        return 0;\n    let high = shape.fwhm;\n    while (shape.fct(high) > threshold) {\n        high *= 2;\n    }\n    let low = 0;\n    for (let i = 0; i < 64; i++) {\n        const mid = (low + high) / 2;\n        if (shape.fct(mid) > threshold) {\n            low = mid;\n        }\n        else {\n            high = mid;\n        }\n    }\n    return (low + high) / 2;\n}\n//# sourceMappingURL=SparseSpectrumGenerator.js.map","import { SparseSpectrumGenerator } from \"./SparseSpectrumGenerator.js\";\n/**\n * Generates a sparse spectrum containing only x values where at least one peak\n * contributes above the threshold. Unlike `generateSpectrum`, no dense array\n * is allocated: intervals are computed per peak first, then y is evaluated only\n * for the merged set of required x values.\n * @param peaks - List of peaks to include.\n * @param options - Configuration for sparse spectrum generation.\n * @returns Sparse spectrum data with x and y arrays covering only peak regions.\n */\nexport function generateSparseSpectrum(peaks, options = {}) {\n    const { generator, ...rest } = options;\n    return new SparseSpectrumGenerator(generator).generateSparseSpectrum(peaks, rest);\n}\n//# sourceMappingURL=generateSparseSpectrum.js.map","import { SpectrumGenerator } from \"./SpectrumGenerator.js\";\n/**\n * Generates a spectrum and returns it.\n * @param peaks - List of peaks to put in the spectrum.\n * @param options - Configuration for spectrum generation.\n * @returns The generated spectrum data.\n */\nexport function generateSpectrum(peaks, options = {}) {\n    const { generator, ...rest } = options;\n    return new SpectrumGenerator(generator).generateSpectrum(peaks, rest);\n}\n//# sourceMappingURL=generateSpectrum.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.closestPointX = closestPointX;\nfunction closestPointX(array, target) {\n    let low = 0;\n    let high = array.length - 1;\n    let middle = 0;\n    while (high - low > 1) {\n        middle = low + ((high - low) >> 1);\n        if (array[middle].x < target) {\n            low = middle;\n        }\n        else if (array[middle].x > target) {\n            high = middle;\n        }\n        else {\n            return array[middle];\n        }\n    }\n    if (low < array.length - 1) {\n        if (Math.abs(target - array[low].x) < Math.abs(array[low + 1].x - target)) {\n            return array[low];\n        }\n        else {\n            return array[low + 1];\n        }\n    }\n    else {\n        return array[low];\n    }\n}\n//# sourceMappingURL=closestPointX.js.map","\"use strict\";\n/**\n * Join x values if there are similar\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.joinX = joinX;\nfunction joinX(self, threshold = Number.EPSILON) {\n    // when we join we will use the center of mass\n    if (self.array.length === 0)\n        return [];\n    self.sortX();\n    let current = self.array[0];\n    let result = [current];\n    for (let i = 1; i < self.array.length; i++) {\n        const item = self.array[i];\n        if (item.x - current.x <= threshold) {\n            // weighted sum\n            current.x =\n                (item.y / (current.y + item.y)) * (item.x - current.x) + current.x;\n            current.y += item.y;\n        }\n        else {\n            current = { ...item };\n            result.push(current);\n        }\n    }\n    self.array = result;\n    self.ySorted = false;\n    return self;\n}\n//# sourceMappingURL=joinX.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.multiply = multiply;\nfunction multiply(a, b, options = {}) {\n    const { minY = 1e-8, maxLines = 5000, deltaX = 1e-2 } = options;\n    const result = new a.constructor();\n    a.sortY();\n    b.sortY();\n    for (let entryA of a.array) {\n        for (let entryB of b.array) {\n            let y = entryA.y * entryB.y;\n            if (y > minY) {\n                const composition = calculateComposition(entryA, entryB);\n                if (composition) {\n                    result.push({ x: entryA.x + entryB.x, y, composition });\n                }\n                else {\n                    result.push({ x: entryA.x + entryB.x, y });\n                }\n            }\n            if (result.length > maxLines * 2) {\n                result.joinX(deltaX);\n                result.topY(maxLines);\n            }\n        }\n    }\n    result.joinX(deltaX);\n    result.topY(maxLines);\n    a.move(result);\n    return a;\n}\nfunction calculateComposition(entryA, entryB) {\n    if (!entryA.composition || !entryB.composition)\n        return;\n    let toReturn = {};\n    const keys = [\n        ...new Set(Object.keys(entryA.composition).concat(Object.keys(entryB.composition))),\n    ];\n    for (let key of keys) {\n        toReturn[key] =\n            (entryA.composition[key] || 0) + (entryB.composition[key] || 0);\n    }\n    return toReturn;\n}\n//# sourceMappingURL=multiply.js.map","\"use strict\";\n// https://en.wikipedia.org/wiki/Exponentiation_by_squaring\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.power = power;\nfunction power(array, p, options = {}) {\n    if (p <= 0)\n        throw new Error('power must be larger than 0');\n    if (p === 1)\n        return array;\n    if (p === 2) {\n        return array.square();\n    }\n    p--;\n    let base = array.copy(); // linear time\n    while (p !== 0) {\n        if ((p & 1) !== 0) {\n            array.multiply(base, options); // executed <= log2(p) times\n        }\n        p >>= 1;\n        if (p !== 0)\n            base.square(options); // executed <= log2(p) times\n    }\n    return array;\n}\n//# sourceMappingURL=power.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Distribution = void 0;\nconst closestPointX_js_1 = require(\"./utils/closestPointX.js\");\nconst joinX_js_1 = require(\"./utils/joinX.js\");\nconst multiply_js_1 = require(\"./utils/multiply.js\");\nconst power_js_1 = require(\"./utils/power.js\");\n/**\n * Internal class to deal with isotopic distribution calculations\n */\nclass Distribution {\n    constructor(array = []) {\n        this.array = array;\n        this.cache = getEmptyCache();\n    }\n    emptyCache() {\n        if (this.cache.isEmpty)\n            return;\n        this.cache = getEmptyCache();\n    }\n    get length() {\n        return this.array.length;\n    }\n    get xs() {\n        return this.array.map((p) => p.x);\n    }\n    get ys() {\n        return this.array.map((p) => p.y);\n    }\n    get sumY() {\n        if (!Number.isNaN(this.cache.sumY))\n            return this.cache.sumY;\n        let sumY = 0;\n        for (let item of this.array) {\n            sumY += item.y;\n        }\n        this.cache.sumY = sumY;\n        this.cache.isEmpty = false;\n        return sumY;\n    }\n    get minX() {\n        if (!Number.isNaN(this.cache.minX))\n            return this.cache.minX;\n        let minX = Number.POSITIVE_INFINITY;\n        for (let item of this.array) {\n            if (item.x < minX) {\n                minX = item.x;\n            }\n        }\n        this.cache.minX = minX;\n        this.cache.isEmpty = false;\n        return minX;\n    }\n    get maxX() {\n        if (!Number.isNaN(this.cache.maxX))\n            return this.cache.maxX;\n        let maxX = Number.NEGATIVE_INFINITY;\n        for (let item of this.array) {\n            if (item.x > maxX) {\n                maxX = item.x;\n            }\n        }\n        this.cache.maxX = maxX;\n        this.cache.isEmpty = false;\n        return maxX;\n    }\n    get minY() {\n        if (!Number.isNaN(this.cache.minY))\n            return this.cache.minY;\n        let minY = Number.POSITIVE_INFINITY;\n        for (let item of this.array) {\n            if (item.y < minY) {\n                minY = item.y;\n            }\n        }\n        this.cache.minY = minY;\n        this.cache.isEmpty = false;\n        return minY;\n    }\n    get maxY() {\n        if (!Number.isNaN(this.cache.maxY))\n            return this.cache.maxY;\n        let maxY = Number.NEGATIVE_INFINITY;\n        for (let item of this.array) {\n            if (item.y > maxY) {\n                maxY = item.y;\n            }\n        }\n        this.cache.maxY = maxY;\n        this.cache.isEmpty = false;\n        return maxY;\n    }\n    multiplyY(value) {\n        for (const item of this.array) {\n            item.y *= value;\n        }\n    }\n    setArray(array) {\n        this.array = array;\n        this.emptyCache();\n    }\n    move(other) {\n        this.array = other.array;\n        this.emptyCache();\n    }\n    push(...points) {\n        this.array.push(...points);\n        this.emptyCache();\n    }\n    /**\n     * Sort by ASCENDING x values\n     * @returns {Distribution}\n     */\n    sortX() {\n        this.cache.ySorted = false;\n        if (this.cache.xSorted)\n            return this;\n        this.array.sort((a, b) => a.x - b.x);\n        this.cache.xSorted = true;\n        this.cache.isEmpty = false;\n        return this;\n    }\n    /**\n     * Sort by DESCENDING y values\n     * @returns {Distribution}\n     */\n    sortY() {\n        this.cache.xSorted = false;\n        if (this.cache.ySorted)\n            return this;\n        this.array.sort((a, b) => b.y - a.y);\n        this.cache.ySorted = true;\n        this.cache.isEmpty = false;\n        return this;\n    }\n    normalize() {\n        const sum = this.sumY;\n        for (let item of this.array) {\n            item.y /= sum;\n        }\n        return this;\n    }\n    /**\n     * Only keep a defined number of peaks\n     * @param {number} limit\n     * @returns\n     */\n    topY(limit) {\n        if (!limit)\n            return this;\n        if (this.array.length <= limit)\n            return this;\n        this.sortY();\n        this.array.splice(limit);\n        return this;\n    }\n    /**\n     * remove all the peaks under a defined relative threshold\n     * @param {number} [relativeValue=0] Should be between 0 and 1. 0 means no peak will be removed, 1 means all peaks will be removed\n     */\n    threshold(relativeValue = 0) {\n        if (!relativeValue)\n            return this;\n        const maxY = this.maxY;\n        const threshold = maxY * relativeValue;\n        this.array = this.array.filter((point) => point.y >= threshold);\n    }\n    square(options = {}) {\n        return this.multiply(this, options);\n    }\n    multiply(b, options) {\n        return (0, multiply_js_1.multiply)(this, b, options);\n    }\n    power(p, options) {\n        return (0, power_js_1.power)(this, p, options);\n    }\n    copy() {\n        let distCopy = new Distribution();\n        distCopy.cache = { ...this.cache };\n        distCopy.array = structuredClone(this.array);\n        return distCopy;\n    }\n    maxToOne() {\n        if (this.array.length === 0)\n            return this;\n        let currentMax = this.maxY;\n        for (let item of this.array) {\n            item.y /= currentMax;\n        }\n        return this;\n    }\n    joinX(threshold) {\n        return (0, joinX_js_1.joinX)(this, threshold);\n    }\n    append(distribution) {\n        for (let item of distribution.array) {\n            this.array.push(item);\n        }\n        this.emptyCache();\n    }\n    closestPointX(target) {\n        this.sortX();\n        return (0, closestPointX_js_1.closestPointX)(this.array, target);\n    }\n}\nexports.Distribution = Distribution;\nfunction getEmptyCache() {\n    return {\n        isEmpty: true,\n        xSorted: false,\n        ySorted: false,\n        minX: Number.NaN,\n        maxX: Number.NaN,\n        minY: Number.NaN,\n        maxY: Number.NaN,\n        sumY: Number.NaN,\n    };\n}\n//# sourceMappingURL=Distribution.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getDerivedCompositionInfo = getDerivedCompositionInfo;\nconst chemical_elements_1 = require(\"chemical-elements\");\nconst mf_parser_1 = require(\"mf-parser\");\n/**\n * Calcultes informations about the isotopic composition explaining a specific mass\n * @param {Record<string, number>} composition\n * @returns\n */\nfunction getDerivedCompositionInfo(composition) {\n    const shortComposition = {};\n    let label = '';\n    let shortLabel = '';\n    let deltaNeutrons = 0;\n    for (let key in composition) {\n        let isotopeLabel = '';\n        for (let i = 0; i < key.length; i++) {\n            if (mf_parser_1.superscript[key[i]]) {\n                isotopeLabel += mf_parser_1.superscript[key[i]];\n            }\n            else {\n                isotopeLabel += key[i];\n            }\n        }\n        if (composition[key] > 1) {\n            const number = String(composition[key]);\n            for (let i = 0; i < number.length; i++) {\n                isotopeLabel += mf_parser_1.subscript[number[i]];\n            }\n        }\n        label += isotopeLabel;\n        const isotope = chemical_elements_1.stableIsotopesObject[key];\n        deltaNeutrons += isotope.deltaNeutrons * composition[key];\n        if (isotope.mostAbundant)\n            continue;\n        shortLabel += isotopeLabel;\n        shortComposition[key] = composition[key];\n    }\n    return { label, shortComposition, shortLabel, deltaNeutrons };\n}\n//# sourceMappingURL=getDerivedCompositionInfo.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.IsotopicDistribution = void 0;\nconst chemical_elements_1 = require(\"chemical-elements\");\nconst mf_parser_1 = require(\"mf-parser\");\nconst mf_utilities_1 = require(\"mf-utilities\");\nconst ml_spectra_processing_1 = require(\"ml-spectra-processing\");\nconst spectrum_generator_1 = require(\"spectrum-generator\");\nconst Distribution_1 = require(\"./Distribution\");\nconst getDerivedCompositionInfo_1 = require(\"./utils/getDerivedCompositionInfo\");\nconst MINIMAL_FWHM = 1e-8;\nconst MINIMAL_Y = 1e-8;\n/** @typedef {import('mf-parser').IsotopesInfo} IsotopesInfo */\n/** @typedef {import('mf-parser').MFInfo} MFInfo */\n/** @typedef {import('./IsotopicDistribution.types').XY} XY */\n/** @typedef {import('./IsotopicDistribution.types').IsotopicDistributionPart} IsotopicDistributionPart */\n/** @typedef {import('./IsotopicDistribution.types').IsotopicDistributionOptions} IsotopicDistributionOptions */\n/**\n * A class that allows to manage isotopic distribution\n */\nclass IsotopicDistribution {\n    /**\n     * Class that manages isotopic distribution\n     * @param {string|Array<any>} value - Molecular formula or an array of parts.\n     * @param {IsotopicDistributionOptions} [options]\n     */\n    constructor(value, options = {}) {\n        this.threshold = options.threshold;\n        this.limit = options.limit;\n        if (Array.isArray(value)) {\n            this.parts = structuredClone(value);\n            for (let part of this.parts) {\n                part.confidence = 0;\n                part.isotopesInfo = new mf_parser_1.MF(part.ionization?.mf\n                    ? `${part.mf}(${part.ionization.mf})`\n                    : part.mf || '').getIsotopesInfo();\n            }\n        }\n        else {\n            let mf = new mf_parser_1.MF(value, { ensureCase: options.ensureCase });\n            let mfInfo = mf.getInfo();\n            const ionizations = (0, mf_utilities_1.preprocessIonizations)(options.ionizations);\n            /** @type {MFInfo} */\n            const parts = 'parts' in mfInfo ? mfInfo.parts : [mfInfo];\n            this.parts = [];\n            for (let partOriginal of parts) {\n                // we calculate information for each part\n                for (const ionization of ionizations) {\n                    let part = structuredClone(partOriginal);\n                    part.em = part.monoisotopicMass; // TODO: To remove !!! we change the name !?\n                    part.isotopesInfo = new mf_parser_1.MF(ionization.mf ? `${part.mf}(${ionization.mf})` : part.mf || '').getIsotopesInfo();\n                    part.confidence = 0;\n                    let msInfo = (0, mf_utilities_1.getMsInfo)(part, {\n                        ionization,\n                    });\n                    part.ionization = msInfo.ionization;\n                    part.ms = msInfo.ms;\n                    this.parts.push(part);\n                }\n            }\n        }\n        this.cachedDistribution = undefined;\n        this.fwhm = options.fwhm === undefined ? 0.01 : options.fwhm;\n        // if fwhm is under 1e-8 there are some artifacts in the spectra\n        if (this.fwhm < MINIMAL_FWHM)\n            this.fwhm = MINIMAL_FWHM;\n        this.minY = options.minY === undefined ? MINIMAL_Y : options.minY;\n        this.maxLines = options.maxLines || 5000;\n        this.allowNeutral =\n            options.allowNeutral === undefined ? true : options.allowNeutral;\n    }\n    /**\n     * @returns {Array<IsotopicDistributionPart>}\n     */\n    getParts() {\n        return this.parts;\n    }\n    /**\n     * @return {Distribution} returns the total distribution (for all parts)\n     */\n    getDistribution() {\n        if (this.cachedDistribution)\n            return this.cachedDistribution;\n        let options = {\n            maxLines: this.maxLines,\n            minY: this.minY,\n            deltaX: this.fwhm,\n        };\n        let finalDistribution = new Distribution_1.Distribution();\n        this.confidence = 0;\n        // TODO need to cache each part without ionization\n        // in case of many ionization we don't need to recalculate everything !\n        for (let part of this.parts) {\n            let totalDistribution = new Distribution_1.Distribution([\n                {\n                    x: 0,\n                    y: 1,\n                    composition: this.fwhm === MINIMAL_FWHM ? {} : undefined, // should we calculate composition in isotopes of each peak\n                },\n            ]);\n            let partNaturalDeltaNeutrons = 0;\n            for (let isotope of part.isotopesInfo.isotopes) {\n                partNaturalDeltaNeutrons +=\n                    (isotope.naturalDeltaNeutrons ?? 0) * isotope.number;\n            }\n            let charge = part.ms?.charge || part.isotopesInfo.charge || 0;\n            let absoluteCharge = Math.abs(charge);\n            if (charge || this.allowNeutral) {\n                for (let isotope of part.isotopesInfo.isotopes) {\n                    if (isotope.number < 0)\n                        return { array: [] };\n                    if (isotope.number > 0) {\n                        const newDistribution = structuredClone(isotope.distribution);\n                        if (this.fwhm === MINIMAL_FWHM) {\n                            // add composition\n                            for (const entry of newDistribution) {\n                                entry.composition = { [Math.round(entry.x) + isotope.atom]: 1 };\n                            }\n                        }\n                        let distribution = new Distribution_1.Distribution(newDistribution);\n                        distribution.power(isotope.number, options);\n                        totalDistribution.multiply(distribution, options);\n                    }\n                }\n                this.confidence = 0;\n                for (const item of totalDistribution.array) {\n                    this.confidence += item.y;\n                }\n                // we finally deal with the charge\n                if (charge) {\n                    for (const e of totalDistribution.array) {\n                        e.x = (e.x - chemical_elements_1.ELECTRON_MASS * charge) / absoluteCharge;\n                    }\n                }\n                if (totalDistribution.array && totalDistribution.array.length > 0) {\n                    totalDistribution.sortX();\n                    part.fromX = totalDistribution.array[0].x;\n                    part.toX = totalDistribution.array.at(-1).x;\n                }\n                if (part.ms?.similarity?.factor) {\n                    totalDistribution.multiplyY(part.ms.similarity.factor);\n                }\n                else if (part.ms?.target?.intensity &&\n                    part.ms?.target?.intensity !== 1) {\n                    // intensity is the value of the monoisotopic mass !\n                    // need to find the intensity of the peak corresponding\n                    // to the monoisotopic mass\n                    if (part.ms.target.mass) {\n                        let target = totalDistribution.closestPointX(part.ms.target.mass);\n                        totalDistribution.multiplyY(part.ms.target.intensity / target.y);\n                    }\n                    else {\n                        totalDistribution.multiplyY(part.ms.target.intensity);\n                    }\n                }\n                else if (part?.intensity && part?.intensity !== 1) {\n                    totalDistribution.multiplyY(part.intensity);\n                }\n                part.isotopicDistribution = totalDistribution.array;\n                for (let entry of totalDistribution.array) {\n                    if (!entry.composition)\n                        continue;\n                    const info = (0, getDerivedCompositionInfo_1.getDerivedCompositionInfo)(entry.composition);\n                    info.deltaNeutrons -= partNaturalDeltaNeutrons;\n                    Object.assign(entry, info);\n                }\n                if (finalDistribution.array.length === 0) {\n                    finalDistribution = totalDistribution;\n                }\n                else {\n                    finalDistribution.append(totalDistribution);\n                }\n            }\n        }\n        if (finalDistribution)\n            finalDistribution.joinX(this.fwhm);\n        // if there is a threshold we will deal with it\n        // and we will correct the confidence\n        if (this.threshold || this.limit) {\n            const sumBefore = finalDistribution.sumY;\n            if (this.threshold)\n                finalDistribution.threshold(this.threshold);\n            if (this.limit) {\n                finalDistribution.topY(this.limit);\n                finalDistribution.sortX();\n            }\n            const sumAfter = finalDistribution.sumY;\n            this.confidence = (this.confidence * sumAfter) / sumBefore;\n        }\n        this.confidence /= this.parts.length;\n        this.cachedDistribution = finalDistribution;\n        return finalDistribution;\n    }\n    /**\n     *\n     * @param {object} options\n     * @param {string} [options.delimiter=', ']\n     * @param {number} [options.numberXDecimals=4]\n     * @param {number} [options.numberYDecimals=4]\n     * @returns\n     */\n    getCSV(options) {\n        return this.getText({ ...options, delimiter: ', ' });\n    }\n    /**\n     *\n     * @param {object} options\n     * @param {string} [options.delimiter='\\t']\n     * @param {number} [options.numberXDecimals=4]\n     * @param {number} [options.numberYDecimals=4]\n     * @returns\n     */\n    getTSV(options) {\n        return this.getText({ ...options, delimiter: '\\t' });\n    }\n    getTable(options = {}) {\n        const { maxValue, xLabel = 'x', yLabel = 'y' } = options;\n        let points = this.getDistribution().array;\n        if (points.length === 0)\n            return [];\n        let factor = 1;\n        if (maxValue) {\n            let maxY = this.getMaxY(points);\n            factor = maxValue / maxY;\n        }\n        return points.map((point) => {\n            let newPoint = { [xLabel]: point.x, [yLabel]: point.y * factor };\n            return newPoint;\n        });\n    }\n    /**\n     *\n     * @param {object} options\n     * @param {string} [options.delimiter='\\t']\n     * @param {number} [options.numberXDecimals=4]\n     * @param {number} [options.numberYDecimals=4]\n     * @returns\n     */\n    getText(options = {}) {\n        const { delimiter = '\\t', numberXDecimals = 5, numberYDecimals = 3, } = options;\n        let points = this.getDistribution().array;\n        let csv = [];\n        for (let point of points) {\n            csv.push(`${point.x.toFixed(numberXDecimals)}${delimiter}${(point.y * 100).toFixed(numberYDecimals)}`);\n        }\n        return csv.join('\\n');\n    }\n    getMaxY(points) {\n        let maxY = points[0].y;\n        for (let point of points) {\n            if (point.y > maxY)\n                maxY = point.y;\n        }\n        return maxY;\n    }\n    getSumY(points) {\n        let sumY = 0;\n        for (let point of points) {\n            sumY += point.y;\n        }\n        return sumY;\n    }\n    /**\n     * Returns the isotopic distribution as an array of peaks\n     * @param {object} [options={}]\n     * @param {number} [options.maxValue=100]\n     * @param {number} [options.sumValue] // if sumValue is defined, maxValue is ignored\n     * @return {Array<{x:number,y:number}|{x:number,y:number,label:string,shortComposition:string,shortLabel:string,deltaNeutrons:number}>}\n     */\n    getPeaks(options = {}) {\n        const { maxValue = 100, sumValue } = options;\n        let peaks = this.getDistribution().array;\n        if (peaks.length === 0)\n            return [];\n        let factor = 1;\n        if (sumValue) {\n            let sumY = this.getSumY(peaks);\n            factor = sumY / sumValue;\n            if (factor !== 1) {\n                peaks = structuredClone(peaks);\n                for (const peak of peaks) {\n                    peak.y = peak.y / factor;\n                }\n            }\n        }\n        else if (maxValue) {\n            let maxY = this.getMaxY(peaks);\n            if (maxValue !== maxY) {\n                // we need to copy the array because we prefer no side effects\n                peaks = structuredClone(peaks);\n                for (const peak of peaks) {\n                    // we rescale the Y values by first dividing by maxY and then multiplying by maxValue in order to avoid approximation errors\n                    peak.y = (peak.y / maxY) * maxValue;\n                }\n            }\n        }\n        return peaks;\n    }\n    /**\n     * Returns the isotopic distirubtion\n     * @param {object} [options={}]\n     * @param {number} [options.maxValue=100]\n     * @param {number} [options.sumValue] // if sumValue is defined, maxValue is ignored\n     * @return {{x:number[],y:number[]}|{x:number[],y:number[],label:string[],shortComposition:string[],shortLabel:string[],deltaNeutrons:[]}}\n     */\n    getXY(options = {}) {\n        let peaks = this.getPeaks(options);\n        if (peaks.length === 0) {\n            return { x: [], y: [] };\n        }\n        const result = {\n            x: peaks.map((a) => a.x),\n            y: peaks.map((a) => a.y),\n        };\n        for (let key of Object.keys(peaks[0]).filter((k) => k !== 'x' && k !== 'y')) {\n            result[key] = peaks.map((a) => a[key]);\n        }\n        return result;\n    }\n    /**\n     * Returns the isotopic distirubtion\n     * @param {object} [options={}]\n     * @param {number} [options.maxValue=100]\n     * @param {number} [options.sumValue] // if sumValue is defined, maxValue is ignored\n     * @return {import('cheminfo-types').MeasurementXYVariables} an object containing at least the 2 properties: x:[] and y:[]\n     */\n    getVariables(options = {}) {\n        const xy = this.getXY(options);\n        return {\n            x: { data: xy.x, label: 'm/z', units: 'u' },\n            y: { data: xy.y, label: 'Relative intensity', units: '%' },\n        };\n    }\n    /**\n     * Returns the isotopic distribution as the sum of gaussian\n     * @param {object} [options={}]\n     * @param {number} [options.gaussianWidth=10] // how good should look the gaussian ? By default we take 10 times the fwhm as number of points\n     * @param {number} [options.threshold=0.00001] // minimal height to return point\n     * @param {number} [options.maxLength=1e6] // maximal number of points; ignored when sparse is true\n     * @param {number} [options.maxValue] // rescale Y to reach maxValue\n     * @param {number} [options.from] // minimal x value, default to the first point - 2\n     * @param {number} [options.to] // maximal x value, default to the last point + 2\n     * @param {function} [options.peakWidthFct=(mz)=>(this.fwhm)]\n     * @param {boolean} [options.sparse=false] // use SparseSpectrumGenerator; only generates points in peak regions, avoids maxLength limit\n     * @return {XY} isotopic distribution as an object containing 2 properties: x:[] and y:[]\n     */\n    getGaussian(options = {}) {\n        const { peakWidthFct = () => this.fwhm, threshold = 0.00001, gaussianWidth = 10, maxValue, maxLength = 1e6, sparse = false, } = options;\n        let peaks = this.getTable({ maxValue });\n        if (peaks.length === 0)\n            return { x: [], y: [] };\n        const from = options.from || peaks[0].x - 2;\n        const to = options.to || peaks.at(-1).x + 2;\n        let spectrum;\n        const nbPoints = Math.round(((to - from) * gaussianWidth) / this.fwhm + 1);\n        const generatorOptions = { from, to, peakWidthFct, nbPoints };\n        if (sparse) {\n            const generator = new spectrum_generator_1.SparseSpectrumGenerator(generatorOptions);\n            spectrum = generator.generateSparseSpectrum(peaks, { threshold });\n        }\n        else {\n            if (nbPoints > maxLength) {\n                throw new Error(`Number of points is over the maxLength: ${nbPoints}>${maxLength}`);\n            }\n            const generator = new spectrum_generator_1.SpectrumGenerator(generatorOptions);\n            spectrum = generator.generateSpectrum(peaks, { threshold });\n        }\n        //TODO not clear why maxValue it can not be directly provided as a parameter in the generateSpectrum function but some tests would fail\n        if (maxValue) {\n            spectrum.y = (0, ml_spectra_processing_1.xNormed)(spectrum.y, {\n                algorithm: 'max',\n                value: maxValue,\n                output: spectrum.y,\n            });\n        }\n        return spectrum;\n    }\n}\nexports.IsotopicDistribution = IsotopicDistribution;\n//# sourceMappingURL=IsotopicDistribution.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.searchSimilarity = searchSimilarity;\nconst isotopic_distribution_1 = require(\"isotopic-distribution\");\nconst peaks_similarity_1 = require(\"peaks-similarity\");\n/**\nSearch for an experimental monoisotopic mass and calculate the similarity\n* @param {object}   [options={}]\n* @param {array}    [options.databases] - an array containing the name of the databases so search, by default all\n* @param {boolean}  [options.flatten] - should we return the array as a flat result\n* @param {function} [options.onStep] - Callback to do after each step\n* @param {string}   [options.ionizations=''] - Comma separated list of ionizations (to charge the molecule)\n* @param {object}   [options.minSimilarity=0.5] - min similarity value\n\n* @param {object}   [options.filter={}]\n* @param {boolean}  [options.filter.forceIonization=false] - If true ignore existing ionizations\n* @param {number}   [options.filter.msem] - Observed monoisotopic mass in mass spectrometer\n* @param {number}   [options.filter.precision=1000] - The precision on the experimental mass\n* @param {number}   [options.filter.minCharge=-Infinity] - Minimal charge\n* @param {number}   [options.filter.maxCharge=+Infinity] - Maximal charge\n* @param {boolean}  [options.filter.absoluteCharge=false] - If true, the charge is absolute (so between 0 and +Infinity by default)\n* @param {object}   [options.filter.unsaturation={}]\n* @param {number}   [options.filter.unsaturation.min=-Infinity] - Minimal unsaturation\n* @param {number}   [options.filter.unsaturation.max=+Infinity] - Maximal unsaturation\n* @param {boolean}  [options.filter.unsaturation.onlyInteger=false] - Integer unsaturation\n* @param {boolean}  [options.filter.unsaturation.onlyNonInteger=false] - Non integer unsaturation\n* @param {object}   [options.filter.atoms] - object of atom:{min, max}\n* @param {object}   [options.filter.callback] - a function to filter the MF\n* @param {object}   [options.similarity={}]\n* @param {number}   [options.similarity.widthBottom]\n* @param {number}   [options.similarity.widthTop]\n* @param {object}   [options.similarity.widthFunction] - function called with mass that should return an object width containing top and bottom\n* @param {object}   [options.similarity.zone={}]\n* @param {number}   [options.similarity.zone.low=-0.5] - window shift based on observed monoisotopic mass\n* @param {number}   [options.similarity.zone.high=2.5] - to value for the comparison window\n* @param {boolean}  [options.similarity.zone.auto=false] - if true, low / high is determined based on the isotopic distribution and the threshold\n* @param {string}   [options.similarity.common]\n* @param {number}   [options.similarity.threshold=0.001] - when calculating similarity we only use the isotopic distribution with peaks over this relative threshold\n* @param {number}   [options.similarity.limit] - We may define the maximum number of peaks to keep\n* @returns {Promise}\n*/\nasync function searchSimilarity(emdb, options = {}) {\n    const { similarity = {}, minSimilarity = 0.5, filter = {}, onStep, flatten, } = options;\n    let width = {\n        bottom: similarity.widthBottom,\n        top: similarity.widthTop,\n    };\n    if (!emdb.experimentalSpectrum ||\n        emdb.experimentalSpectrum.data.x.length === 0) {\n        throw new Error('You need to add an experimental spectrum first using setMassSpectrum');\n    }\n    const experimentalData = emdb.experimentalSpectrum.data;\n    let sumY = emdb.experimentalSpectrum.sumY();\n    // the result of emdb query will be stored in a property 'ms'\n    let results = emdb.searchMSEM(filter.msem, options);\n    let flatEntries = [];\n    if (!flatten) {\n        for (let database of Object.keys(results)) {\n            for (let entry of results[database]) {\n                flatEntries.push(entry);\n            }\n        }\n    }\n    else {\n        flatEntries = results;\n    }\n    let { widthFunction, zone = {}, threshold = 0.001, limit } = similarity;\n    if (widthFunction && typeof widthFunction === 'string') {\n        // eslint-disable-next-line no-new-func\n        widthFunction = new Function('mass', widthFunction);\n        let checkTopBottom = widthFunction(123);\n        if (!checkTopBottom.bottom || !checkTopBottom.top) {\n            throw new Error('widthFunction should return an object with bottom and top properties');\n        }\n    }\n    const { low = -0.5, high = 2.5, auto } = zone;\n    // we need to calculate the similarity of the isotopic distribution\n    let similarityProcessor = new peaks_similarity_1.Comparator(similarity);\n    similarityProcessor.setPeaks1([experimentalData.x, experimentalData.y]);\n    for (let i = 0; i < flatEntries.length; i++) {\n        const entry = flatEntries[i];\n        if (onStep)\n            await onStep(i);\n        if (widthFunction) {\n            width = widthFunction(entry.ms.em);\n        }\n        let isotopicDistribution = new isotopic_distribution_1.IsotopicDistribution(entry.mf, {\n            allowNeutral: false,\n            ionizations: [entry.ionization],\n            fwhm: width.top / 2,\n            threshold,\n            limit,\n        });\n        let distribution = isotopicDistribution.getDistribution();\n        // we need to define the comparison zone that depends of the charge\n        let from, to;\n        if (auto) {\n            from = distribution.minX - 0.5;\n            to = distribution.maxX + 0.5;\n            similarityProcessor.setFromTo(from, to);\n        }\n        else {\n            from = entry.ms.em + low / Math.abs(entry.ms.charge);\n            to = entry.ms.em + high / Math.abs(entry.ms.charge);\n            similarityProcessor.setFromTo(from, to);\n        }\n        if (widthFunction) {\n            similarityProcessor.setTrapezoid(width.bottom, width.top);\n        }\n        similarityProcessor.setPeaks2([distribution.xs, distribution.ys]);\n        let result = similarityProcessor.getSimilarity();\n        result.extractInfo1.from = from;\n        result.extractInfo1.to = to;\n        if (result.similarity > minSimilarity) {\n            entry.ms.similarity = {\n                value: result.similarity,\n                experimental: result.extract1,\n                theoretical: result.extract2,\n                difference: result.diff,\n                experimentalInfo: result.extractInfo1,\n                thereoticalInfo: result.extractInfo2,\n                quantity: result.extractInfo1.sum / sumY,\n                factor: result.extractInfo1.max / result.extractInfo2.max, // by how much we should mulitply the extrat2 to reach the spectrum\n                width,\n            };\n        }\n    }\n    if (!flatten) {\n        for (let database of Object.keys(results)) {\n            results[database] = results[database]\n                .filter((entry) => entry.ms.similarity)\n                .toSorted((a, b) => b.ms.similarity.value - a.ms.similarity.value);\n            for (let entry of results[database]) {\n                flatEntries.push(entry);\n            }\n        }\n    }\n    else {\n        results = results\n            .filter((entry) => entry.ms.similarity)\n            .toSorted((a, b) => b.ms.similarity.value - a.ms.similarity.value);\n    }\n    return results;\n}\n//# sourceMappingURL=searchSimilarity.js.map","// eslint-disable-next-line @typescript-eslint/unbound-method\nconst toString = Object.prototype.toString;\n/**\n * Checks if an object is an instance of an Array (array or typed array, except those that contain bigint values).\n *\n * @param value - Object to check.\n * @returns True if the object is an array or a typed array.\n */\nexport function isAnyArray(value) {\n    const tag = toString.call(value);\n    return tag.endsWith('Array]') && !tag.includes('Big');\n}\n//# sourceMappingURL=index.js.map","(function(){function a(d){for(var e=0,f=d.length-1,g=void 0,h=void 0,i=void 0,j=c(e,f);!0;){if(f<=e)return d[j];if(f==e+1)return d[e]>d[f]&&b(d,e,f),d[j];for(g=c(e,f),d[g]>d[f]&&b(d,g,f),d[e]>d[f]&&b(d,e,f),d[g]>d[e]&&b(d,g,e),b(d,g,e+1),h=e+1,i=f;!0;){do h++;while(d[e]>d[h]);do i--;while(d[i]>d[e]);if(i<h)break;b(d,h,i)}b(d,e,i),i<=j&&(e=h),i>=j&&(f=i-1)}}var b=function b(d,e,f){var _ref;return _ref=[d[f],d[e]],d[e]=_ref[0],d[f]=_ref[1],_ref},c=function c(d,e){return~~((d+e)/2)};'undefined'!=typeof module&&module.exports?module.exports=a:window.median=a})();\n","import { isAnyArray } from 'is-any-array';\nimport quickSelectMedian from 'median-quickselect';\n\nfunction median(input) {\n  if (!isAnyArray(input)) {\n    throw new TypeError('input must be an array');\n  }\n\n  if (input.length === 0) {\n    throw new TypeError('input must not be empty');\n  }\n\n  return quickSelectMedian(input.slice());\n}\n\nexport { median as default };\n","import median from 'ml-array-median';\nimport {\n  BaseRegression,\n  checkArrayLength,\n  maybeToPrecision,\n} from 'ml-regression-base';\n\nexport class TheilSenRegression extends BaseRegression {\n  /**\n   * Theil–Sen estimator\n   * https://en.wikipedia.org/wiki/Theil%E2%80%93Sen_estimator\n   * @param {Array<number>|boolean} x\n   * @param {Array<number>|object} y\n   * @constructor\n   */\n  constructor(x, y) {\n    super();\n    if (x === true) {\n      // loads the model\n      this.slope = y.slope;\n      this.intercept = y.intercept;\n      this.coefficients = y.coefficients;\n    } else {\n      // creates the model\n      checkArrayLength(x, y);\n      theilSen(this, x, y);\n    }\n  }\n\n  toJSON() {\n    return {\n      name: 'TheilSenRegression',\n      slope: this.slope,\n      intercept: this.intercept,\n    };\n  }\n\n  _predict(input) {\n    return this.slope * input + this.intercept;\n  }\n\n  computeX(input) {\n    return (input - this.intercept) / this.slope;\n  }\n\n  toString(precision) {\n    let result = 'f(x) = ';\n    if (this.slope) {\n      let xFactor = maybeToPrecision(this.slope, precision);\n      result += `${Math.abs(xFactor - 1) < 1e-5 ? '' : `${xFactor} * `}x`;\n      if (this.intercept) {\n        let absIntercept = Math.abs(this.intercept);\n        let operator = absIntercept === this.intercept ? '+' : '-';\n        result += ` ${operator} ${maybeToPrecision(absIntercept, precision)}`;\n      }\n    } else {\n      result += maybeToPrecision(this.intercept, precision);\n    }\n    return result;\n  }\n\n  toLaTeX(precision) {\n    return this.toString(precision);\n  }\n\n  static load(json) {\n    if (json.name !== 'TheilSenRegression') {\n      throw new TypeError('not a Theil-Sen model');\n    }\n    return new TheilSenRegression(true, json);\n  }\n}\n\nfunction theilSen(regression, x, y) {\n  let len = x.length;\n  let slopes = new Array(len * len);\n  let count = 0;\n  for (let i = 0; i < len; ++i) {\n    for (let j = i + 1; j < len; ++j) {\n      if (x[i] !== x[j]) {\n        slopes[count++] = (y[j] - y[i]) / (x[j] - x[i]);\n      }\n    }\n  }\n  slopes.length = count;\n  let medianSlope = median(slopes);\n\n  let cuts = new Array(len);\n  for (let i = 0; i < len; ++i) {\n    cuts[i] = y[i] - medianSlope * x[i];\n  }\n\n  regression.slope = medianSlope;\n  regression.intercept = median(cuts);\n  regression.coefficients = [regression.intercept, regression.slope];\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.massShifts = massShifts;\nconst ml_regression_theil_sen_1 = require(\"ml-regression-theil-sen\");\nconst ml_spectra_processing_1 = require(\"ml-spectra-processing\");\n/**\n * Calculates a function that allows post-calibration on mass spectra based on the error in assignment\n * @param {*} similarities\n * @param {object} [options={}]\n * @returns\n */\nfunction massShifts(similarities, options = {}) {\n    const { minSimilarity = 0.95, minLength = 10 } = options;\n    let results = [];\n    if (!Array.isArray(similarities)) {\n        for (let key of results) {\n            for (let entry of results[key]) {\n                results.push(entry);\n            }\n        }\n    }\n    else {\n        results = similarities;\n    }\n    results = results.filter((result) => result.ms &&\n        result.ms.similarity &&\n        result.ms.similarity.value > minSimilarity);\n    if (results.length < minLength) {\n        throw new Error(`X rescale can not be applied. We need at least ${minLength} peaks with over ${Math.round(minSimilarity * 100)}% similarity`);\n    }\n    const data = results\n        .map((result) => {\n        return {\n            em: result.ms.em,\n            delta: result.ms.delta,\n        };\n    })\n        .toSorted((a, b) => a.em - b.em);\n    let shifts = { x: [], y: [] };\n    for (const datum of data) {\n        shifts.x.push(Number(datum.em));\n        shifts.y.push(Number(datum.delta));\n    }\n    const regression = new ml_regression_theil_sen_1.TheilSenRegression(shifts.x, shifts.y);\n    let minX = (0, ml_spectra_processing_1.xMinValue)(shifts.x);\n    let maxX = (0, ml_spectra_processing_1.xMaxValue)(shifts.x);\n    let shiftsPPM = { x: shifts.x, y: [] };\n    for (const datum of data) {\n        shiftsPPM.y.push(Number((datum.delta / datum.em) * 1e6));\n    }\n    let regressionChart = { x: [], y: [] };\n    for (let i = minX; i < maxX; i += (maxX - minX) / 1000) {\n        regressionChart.x.push(i);\n        regressionChart.y.push(regression.predict(i));\n    }\n    return {\n        shifts,\n        shiftsPPM,\n        fit: regressionChart,\n        score: regression.score(shifts.x, shifts.y),\n        predictFct: regression.predict.bind(regression),\n        tex: regression.toLaTeX(3),\n        slope: regression.slope,\n        intercept: regression.intercept,\n        predictFctString: `${regression.slope} * mass + ${regression.intercept}`,\n    };\n}\n//# sourceMappingURL=massShifts.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fetchJSON = fetchJSON;\nasync function fetchJSON(url) {\n    const result = await fetch(url);\n    return result.json();\n}\n//# sourceMappingURL=fetchJSON.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.EMDB = void 0;\nconst ms_spectrum_1 = require(\"ms-spectrum\");\nconst appendFragmentsInfo_js_1 = require(\"./append/appendFragmentsInfo.js\");\nconst fromArray_js_1 = require(\"./from/fromArray.js\");\nconst fromMolecules_js_1 = require(\"./from/fromMolecules.js\");\nconst fromNucleicSequence_js_1 = require(\"./from/fromNucleicSequence.js\");\nconst fromPeptidicSequence_js_1 = require(\"./from/fromPeptidicSequence.js\");\nconst fromRange_js_1 = require(\"./from/fromRange.js\");\nconst loadCommercials_js_1 = require(\"./loadCommercials.js\");\nconst loadGoogleSheet_js_1 = require(\"./loadGoogleSheet.js\");\nconst loadKnapSack_js_1 = require(\"./loadKnapSack.js\");\nconst search_js_1 = require(\"./search.js\");\nconst searchMSEM_js_1 = require(\"./searchMSEM.js\");\nconst searchSimilarity_js_1 = require(\"./searchSimilarity.js\");\n__exportStar(require(\"./massShifts.js\"), exports);\n__exportStar(require(\"./util/fetchJSON.js\"), exports);\n/**\n * A class that deals with database of monoisotopic mass and molecular formula\n */\nclass EMDB {\n    constructor() {\n        this.databases = {};\n        this.experimentalSpectrum = undefined;\n    }\n    /**\n     *\n     * @param {*} data\n     * @param {object} [options={}]\n     * @param {boolean} [options.normed=true] Should we normed (sum Y to 1) the experimental spectrum ?\n     * @param {number} [options.threshold=0.00025] Threshold used for peak picking\n     */\n    setExperimentalSpectrum(data, options = {}) {\n        const { normed = true, threshold = 0.00025 } = options;\n        this.experimentalSpectrum = new ms_spectrum_1.Spectrum(data, { threshold });\n        if (normed) {\n            this.experimentalSpectrum.normedY();\n        }\n        return this.experimentalSpectrum;\n    }\n    /**\n     * Add a new database using the KnapSack content\n     * @param {*} options\n     */\n    async loadKnapSack(options = {}) {\n        const { databaseName = 'knapSack', forceReload = false } = options;\n        if (this.databases[databaseName] && !forceReload)\n            return;\n        this.databases[databaseName] = await (0, loadKnapSack_js_1.loadKnapSack)();\n    }\n    /**\n     * Add a new database of 12000 commercial products\n     * @param {*} options\n     */\n    async loadCommercials(options = {}) {\n        const { databaseName = 'commercials', forceReload = false } = options;\n        if (this.databases[databaseName] && !forceReload)\n            return;\n        this.databases[databaseName] = await (0, loadCommercials_js_1.loadCommercials)();\n    }\n    get(databaseName) {\n        return this.databases[databaseName];\n    }\n    /**\n     * Load the contaminants database from a google sheet document\n     * @param {object} [options={}]\n     * @param {string} [options.databaseName='contaminants']\n     * @param {string} [options.forceReload=false]\n     */\n    async loadContaminants(options = {}) {\n        const { databaseName = 'contaminants', forceReload = false } = options;\n        if (this.databases[databaseName] && !forceReload)\n            return;\n        this.databases[databaseName] = await (0, loadGoogleSheet_js_1.loadGoogleSheet)();\n    }\n    /**\n     * Load a google sheet containing MF information\n     * @param {object} [options={}]\n     * @param {string} [options.databaseName='sheet']\n     * @param {string} [options.forceReload=false]\n     */\n    async loadGoogleSheet(options = {}) {\n        const { databaseName = 'sheet', forceReload = false } = options;\n        if (this.databases[databaseName] && !forceReload)\n            return;\n        this.databases[databaseName] = await (0, loadGoogleSheet_js_1.loadGoogleSheet)();\n    }\n    async loadTest() {\n        await this.fromArray(['C1-100'], {\n            databaseName: 'test',\n            ionizations: '+',\n        });\n    }\n    async loadNeutralTest(options = {}) {\n        const { maxC = 100 } = options;\n        await this.fromArray([`C1-${maxC}`], { databaseName: 'test' });\n    }\n    async fromMonoisotopicMass(mass, options = {}) {\n        const { databaseName = 'monoisotopic', append = false } = options;\n        let result = await (0, ms_spectrum_1.fromMonoisotopicMass)(mass, options);\n        replaceOrAppend(this, databaseName, result.mfs, append);\n        return result;\n    }\n    async fromArray(sequence, options = {}) {\n        const { databaseName = 'generated', append = false, estimate } = options;\n        const results = await (0, fromArray_js_1.fromArray)(sequence, options);\n        if (estimate)\n            return results;\n        replaceOrAppend(this, databaseName, results, append);\n    }\n    async fromMolecules(entries, ocl, options = {}) {\n        const { databaseName = 'molecules', append = false } = options;\n        const results = await (0, fromMolecules_js_1.fromMolecules)(entries, ocl, options);\n        replaceOrAppend(this, databaseName, results, append);\n    }\n    async fromRange(sequence, options = {}) {\n        const { databaseName = 'generated', append = false, estimate } = options;\n        const results = await (0, fromRange_js_1.fromRange)(sequence, options);\n        if (estimate)\n            return results;\n        replaceOrAppend(this, databaseName, results, append);\n    }\n    async fromPeptidicSequence(sequence, options = {}) {\n        const { databaseName = 'peptidic', append = false, estimate } = options;\n        const results = await (0, fromPeptidicSequence_js_1.fromPeptidicSequence)(sequence, options);\n        if (estimate)\n            return results;\n        replaceOrAppend(this, databaseName, results, append);\n    }\n    /**\n     *\n     * @param {string} databaseName\n     * @param {object} [options={}]\n     * @param {number} [options.precision=100]\n     * @param {string} [options.ionizations='']\n     * @returns\n     */\n    async appendFragmentsInfo(databaseName, options = {}) {\n        const database = this.databases[databaseName];\n        await (0, appendFragmentsInfo_js_1.appendFragmentsInfo)(this.experimentalSpectrum, database, options);\n        return database;\n    }\n    async fromNucleicSequence(sequence, options = {}) {\n        const { databaseName = 'nucleic', append = false, estimate } = options;\n        const results = await (0, fromNucleicSequence_js_1.fromNucleicSequence)(sequence, options);\n        if (estimate)\n            return results;\n        replaceOrAppend(this, databaseName, results, append);\n    }\n    listDatabases() {\n        return Object.keys(this.databases).toSorted();\n    }\n    getInfo() {\n        return {\n            databases: Object.keys(this.databases)\n                .toSorted()\n                .map((key) => {\n                return { name: key, nbEntries: this.databases[key].length };\n            }),\n        };\n    }\n    search(filter, options = {}) {\n        return (0, search_js_1.search)(this, filter, options);\n    }\n    searchMSEM(filter, options = {}) {\n        return (0, searchMSEM_js_1.searchMSEM)(this, filter, options);\n    }\n    searchSimilarity(options = {}) {\n        return (0, searchSimilarity_js_1.searchSimilarity)(this, options);\n    }\n}\nexports.EMDB = EMDB;\nfunction replaceOrAppend(emdb, databaseName, results, append = false) {\n    if (!emdb.databases[databaseName] || !append) {\n        emdb.databases[databaseName] = results;\n        return;\n    }\n    emdb.databases[databaseName] = emdb.databases[databaseName].concat(results);\n}\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.preprocessEARanges = preprocessEARanges;\nconst mf_parser_1 = require(\"mf-parser\");\nfunction preprocessEARanges(ranges, targetEA) {\n    ranges = structuredClone(ranges);\n    if (typeof ranges === 'string') {\n        // need to convert to ranges\n        let parsed = (0, mf_parser_1.parse)(ranges.replaceAll(/[\\t\\n\\r ]/g, ''));\n        let newRanges = [];\n        let current = {\n            mf: '',\n            min: 1,\n            max: 1,\n        };\n        // example ClBr2(CH2)0-2NO\n        // the idea is that has long as we don't have a range we don't really care\n        // there is a limitation is that the range has to be first level of parenthesis\n        let parenthesisLevel = 0;\n        let currentMF = ''; // start at an atom first level or a parenthesis\n        for (let item of parsed) {\n            switch (item.kind) {\n                case mf_parser_1.Kind.ATOM:\n                    if (parenthesisLevel === 0 && currentMF) {\n                        current.mf += currentMF;\n                        currentMF = '';\n                    }\n                    currentMF += item.value;\n                    break;\n                case mf_parser_1.Kind.ISOTOPE:\n                    if (parenthesisLevel === 0 && currentMF) {\n                        current.mf += currentMF;\n                        currentMF = '';\n                    }\n                    currentMF += `[${item.value.isotope}${item.value.atom}]`;\n                    break;\n                case mf_parser_1.Kind.MULTIPLIER:\n                    if (parenthesisLevel === 0 && currentMF) {\n                        current.mf += currentMF + item.value;\n                        currentMF = '';\n                    }\n                    else {\n                        currentMF += item.value;\n                    }\n                    break;\n                case mf_parser_1.Kind.MULTIPLIER_RANGE:\n                    if (parenthesisLevel !== 0) {\n                        throw new Error('Range multiplier can only be at the first level');\n                    }\n                    newRanges.push({\n                        mf: currentMF,\n                        min: item.value.from,\n                        max: item.value.to,\n                    });\n                    currentMF = '';\n                    break;\n                case mf_parser_1.Kind.OPENING_PARENTHESIS:\n                    parenthesisLevel++;\n                    currentMF += '(';\n                    break;\n                case mf_parser_1.Kind.CLOSING_PARENTHESIS:\n                    parenthesisLevel--;\n                    currentMF += ')';\n                    break;\n                default:\n                    throw new Error(`can not preprocess ${ranges}`);\n            }\n        }\n        if (currentMF) {\n            current.mf += currentMF;\n        }\n        if (current.mf) {\n            newRanges.push(current);\n        }\n        ranges = newRanges;\n    }\n    let possibilities = [];\n    for (let i = 0; i < ranges.length; i++) {\n        let range = ranges[i];\n        let min = range.min === undefined ? 0 : range.min;\n        let max = range.max === undefined ? 1 : range.max;\n        let possibility = {\n            mf: range.mf,\n            minCount: min, // value defined by the user\n            maxCount: max, // value defined by the user\n            targetEA: targetEA[range.mf],\n            mw: 0, // mw till this level\n            aw: 0, // atomic weight (mass * currentCount)\n            maxRatio: 0, // maximum ratio possible if all next elements are 0\n            currentValue: 0,\n            currentCount: min - 1,\n            currentUnsaturation: 0,\n            initialOrder: i,\n        };\n        possibilities.push(possibility);\n        let info = new mf_parser_1.MF(range.mf).getInfo();\n        possibility.mass = info.mass;\n        possibility.unsaturation =\n            range.unsaturation === undefined\n                ? (info.unsaturation - 1) * 2\n                : range.unsaturation;\n        if (possibility.mf !== info.mf)\n            possibility.isGroup = true;\n    }\n    possibilities = possibilities.filter((r) => r.minCount !== 0 || r.maxCount !== 0);\n    possibilities.sort((a, b) => {\n        return b.targetEA - a.targetEA;\n    });\n    return possibilities;\n}\n//# sourceMappingURL=preprocessEARanges.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.mfFromEA = mfFromEA;\nconst atom_sorter_1 = require(\"atom-sorter\");\nconst preprocessEARanges_1 = require(\"./preprocessEARanges\");\n/**\n * Returns possible combinations\n * @param {object} [targetEA]\n * @param {object} [options={}]\n * @param {string} [options.ranges='C0-100 H0-100 O0-100 N0-100'] - range of mfs to search\n * @param {number} [options.maxElementError=0.003]\n * @param {number} [options.maxTotalError=0.01]\n * @param {number} [options.minMW=0] minimal molecular weight\n * @param {number} [options.maxMW=+Infinity] maximal molecular weight\n * @param {object} [options.unsaturation={}]\n * @param {number} [options.unsaturation.min=-Infinity] Minimal unsaturation\n * @param {number} [options.unsaturation.max=+Infinity] Maximal unsaturation\n * @param {boolean} [options.unsaturation.onlyInteger=false] Integer unsaturation\n * @param {boolean} [options.unsaturation.onlyNonInteger=false] Non integer unsaturation\n * @return {Array<object>}\n */\nfunction mfFromEA(targetEA, options = {}) {\n    const { unsaturation = {}, maxIterations = 1e8, minMW = 0, maxMW = +Infinity, ranges = [\n        { mf: 'C', min: 0, max: 100 },\n        { mf: 'H', min: 0, max: 100 },\n        { mf: 'O', min: 0, max: 100 },\n        { mf: 'N', min: 0, max: 100 },\n    ], maxElementError = 0.003, maxTotalError = 0.01, } = options;\n    let filterUnsaturation = !!unsaturation;\n    // we calculate not the real unsaturation but the one before dividing by 2 + 1\n    let fakeMinUnsaturation = unsaturation.min === undefined\n        ? Number.MIN_SAFE_INTEGER\n        : (unsaturation.min - 1) * 2;\n    let fakeMaxUnsaturation = unsaturation.max === undefined\n        ? Number.MAX_SAFE_INTEGER\n        : (unsaturation.max - 1) * 2;\n    let results = {\n        mfs: [],\n        info: {\n            numberMFEvaluated: 0,\n            numberResults: 0,\n        },\n    };\n    let orderMapping = []; // used to sort the atoms\n    let possibilities = (0, preprocessEARanges_1.preprocessEARanges)(ranges, targetEA, maxElementError);\n    orderMapping = getOrderMapping(possibilities);\n    if (possibilities.length === 0)\n        return { mfs: [] };\n    let currentPosition = 0;\n    let currentAtom;\n    //  if (DEBUG) console.log('possibilities', possibilities.map((a) => `${a.mf + a.originalMinCount}-${a.originalMaxCount}`));\n    mfWhile: while (true) {\n        while (currentPosition < possibilities.length && currentPosition >= 0) {\n            let previousAtom = currentPosition === 0 ? { mw: 0 } : possibilities[currentPosition - 1];\n            currentAtom = possibilities[currentPosition];\n            if (currentAtom.currentCount < currentAtom.maxCount) {\n                currentAtom.currentCount++;\n                currentAtom.aw = currentAtom.mass * currentAtom.currentCount;\n                currentAtom.mw = currentAtom.aw + previousAtom.mw;\n                currentAtom.maxRatio = currentAtom.aw / currentAtom.mw;\n                // we should check if we can reach the target\n                if (currentAtom.targetEA &&\n                    currentAtom.aw / currentAtom.mw - currentAtom.targetEA <\n                        -maxElementError) {\n                    // we already don't have enough quantity of this element and it can only become worse\n                    continue;\n                }\n                if (currentPosition < possibilities.length - 1) {\n                    currentPosition++;\n                }\n                else {\n                    break;\n                }\n            }\n            else {\n                currentAtom.currentCount = currentAtom.minCount - 1;\n                currentPosition--;\n            }\n        }\n        if (currentPosition < 0) {\n            break;\n        }\n        if (results.info.numberMFEvaluated++ > maxIterations) {\n            throw new Error(`Iteration number is over the current maximum of: ${maxIterations}`);\n        }\n        if (filterUnsaturation) {\n            let unsaturationValue = 0;\n            for (const possibility of possibilities) {\n                unsaturationValue +=\n                    possibility.unsaturation * possibility.currentCount;\n            }\n            let isOdd = Math.abs(unsaturationValue % 2);\n            if ((unsaturation.onlyInteger && isOdd === 1) ||\n                (unsaturation.onlyNonInteger && isOdd === 0) ||\n                fakeMinUnsaturation > unsaturationValue ||\n                fakeMaxUnsaturation < unsaturationValue) {\n                continue;\n            }\n        }\n        let mw = currentAtom.mw;\n        if (mw < minMW || mw > maxMW)\n            continue;\n        let totalError = 0;\n        for (let i = 0; i < possibilities.length; i++) {\n            const possibility = possibilities[i];\n            let ratio = (possibility.mass * possibility.currentCount) / mw;\n            if (possibility.targetEA !== undefined) {\n                let error = Math.abs(possibility.targetEA - ratio);\n                if (error > maxElementError) {\n                    continue mfWhile;\n                }\n                totalError += error;\n            }\n            possibility.currentValue = ratio;\n        }\n        if (Number.isNaN(totalError) || totalError > maxTotalError)\n            continue;\n        results.mfs.push(getResult(possibilities, totalError, orderMapping));\n        results.info.numberResults++;\n    }\n    results.mfs.sort((a, b) => Math.abs(a.totalError) - Math.abs(b.totalError));\n    return results;\n}\nfunction getResult(possibilities, totalError, orderMapping) {\n    const result = { mf: '', totalError };\n    // we check that the first time we meet the ionization group it does not end\n    // in the final result\n    for (let i = 0; i < possibilities.length; i++) {\n        let possibility = possibilities[orderMapping[i]];\n        if (possibility.currentCount !== 0) {\n            if (possibility.isGroup) {\n                result.mf += `(${possibility.mf})`;\n                if (possibility.currentCount !== 1) {\n                    result.mf += possibility.currentCount;\n                }\n            }\n            else {\n                result.mf += possibility.mf;\n                if (possibility.currentCount !== 1) {\n                    result.mf += possibility.currentCount;\n                }\n            }\n        }\n        result.ea = possibilities.map((current) => ({\n            mf: current.mf,\n            value: current.currentValue,\n            expected: current.targetEA,\n            error: current.targetEA === undefined\n                ? undefined\n                : Math.abs(current.targetEA - current.currentValue),\n        }));\n    }\n    return result;\n}\nfunction getOrderMapping(possibilities) {\n    let mapping = possibilities.map((p, i) => ({ atom: p.mf, index: i }));\n    mapping.sort((a, b) => {\n        return (0, atom_sorter_1.atomSorter)(a.atom, b.atom);\n    });\n    return mapping.map((a) => a.index);\n}\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.mfFromAtomicRatio = mfFromAtomicRatio;\nconst mf_generator_1 = require(\"mf-generator\");\nconst mf_parser_1 = require(\"mf-parser\");\n/**\n * @typedef {object} AtomicRatioMF\n * @property {number} em\n * @property {number} mw\n * @property {string} mf\n * @property {Array<MFAtomicComposition>} mfAtomicComposition\n * @property {Array<AtomicRatio>} atomicRatios\n * @property {number} totalError\n */\n/**\n * @typedef {object} MFAtomicComposition\n * @property {string} element\n * @property {number} count\n * @property {number} theoretical\n * @property {number} experimental\n * @property {number} error\n */\n/**\n * @typedef {object} AtomicRatio\n * @property {string} element\n * @property {number} count\n * @property {number} theoretical\n */\n/**\n * Returns possible combinations\n * @param {object} [ratios]\n * @param {object} [options={}]\n * @param {string} [options.ranges='C0-10 H0-10 O0-10 N0-10'] - range of mfs to search\n * @param {number} [options.maxElementError=0.05]\n * @param {number} [options.maxTotalError=0.1]\n * @param {number} [options.minMW=0] minimal molecular weight\n * @param {number} [options.maxMW=+Infinity] maximal molecular weight\n * @param {object} [options.unsaturation={}]\n * @param {number} [options.unsaturation.min=-Infinity] Minimal unsaturation\n * @param {number} [options.unsaturation.max=+Infinity] Maximal unsaturation\n * @param {boolean} [options.unsaturation.onlyInteger=false] Integer unsaturation\n * @param {boolean} [options.unsaturation.onlyNonInteger=false] Non integer unsaturation\n * @return {Promise<AtomicRatioMF[]>}\n */\nasync function mfFromAtomicRatio(ratios, options = {}) {\n    const { unsaturation = {}, minMW = 0, maxMW = +Infinity, ranges = 'C0-10 H0-10 O0-10 N0-10', maxElementError = 0.05, maxTotalError = 0.1, } = options;\n    const elements = Object.keys(ratios);\n    const mfs = await (0, mf_generator_1.generateMFs)([ranges], {\n        limit: 1e7,\n        filter: {\n            minMW,\n            maxMW,\n            unsaturation,\n        },\n    });\n    let sumComposition = 0;\n    for (const element of elements) {\n        sumComposition += ratios[element];\n    }\n    const relativeComposition = {};\n    for (const element of elements) {\n        relativeComposition[element] = ratios[element] / sumComposition;\n    }\n    for (const mf of mfs) {\n        appendInfo(mf, elements);\n    }\n    const filteredMFs = [];\n    mfFor: for (const mf of mfs) {\n        if (mf.nbCompositionAtoms === 0) {\n            continue;\n        }\n        mf.totalError = 0;\n        const atomicRatios = [];\n        for (const element of elements) {\n            const error = mf.atomicRatio[element] - relativeComposition[element];\n            let absError = Math.abs(error);\n            if (absError > maxElementError) {\n                continue mfFor;\n            }\n            mf.totalError += absError;\n            atomicRatios.push({\n                element,\n                experimental: mf.atomicRatio[element],\n                count: mf.atoms[element] || 0,\n                theoretical: relativeComposition[element],\n                error,\n            });\n        }\n        if (mf.totalError > maxTotalError) {\n            continue;\n        }\n        filteredMFs.push({\n            em: mf.em,\n            mw: mf.mw,\n            mf: mf.mf,\n            mfAtomicComposition: getMFAtomicComposition(mf.atoms),\n            atomicRatios,\n            totalError: mf.totalError,\n        });\n    }\n    filteredMFs.sort((a, b) => Math.abs(a.totalError) - Math.abs(b.totalError));\n    return filteredMFs;\n}\nfunction getMFAtomicComposition(atoms) {\n    const nbAtoms = Object.values(atoms).reduce((acc, val) => acc + val, 0);\n    const composition = [];\n    for (const [element, count] of Object.entries(atoms)) {\n        composition.push({\n            element,\n            count,\n            theoretical: count / nbAtoms,\n        });\n    }\n    return composition;\n}\nfunction appendInfo(mf, elements) {\n    const mfInfo = new mf_parser_1.MF(mf.mf).getInfo();\n    let nbCompositionAtoms = 0;\n    for (const element of elements) {\n        nbCompositionAtoms += mfInfo.atoms[element] || 0;\n    }\n    mf.nbCompositionAtoms = nbCompositionAtoms;\n    mf.atomicRatio = {};\n    for (const element of elements) {\n        mf.atomicRatio[element] = (mfInfo.atoms[element] || 0) / nbCompositionAtoms;\n    }\n}\n//# sourceMappingURL=mfFromAtomicRatio.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.appendAllDBRefs = appendAllDBRefs;\nfunction appendAllDBRefs(object, allDBRefs) {\n    if (Array.isArray(object)) {\n        for (let item of object) {\n            appendAllDBRefs(item, allDBRefs);\n        }\n    }\n    else if (typeof object === 'object' && object !== null) {\n        if (object.$ref && object.$id) {\n            allDBRefs.push(object);\n        }\n        for (let key of Object.keys(object)) {\n            appendAllDBRefs(object[key], allDBRefs);\n        }\n    }\n}\n//# sourceMappingURL=appendAllDBRefs.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.appendURLs = appendURLs;\nconst appendAllDBRefs_js_1 = require(\"./appendAllDBRefs.js\");\nasync function appendURLs(object, options = {}) {\n    const { collections, force = false } = options;\n    let allDBRefs = [];\n    (0, appendAllDBRefs_js_1.appendAllDBRefs)(object, allDBRefs);\n    if (collections) {\n        allDBRefs = allDBRefs.filter((dbRef) => collections.includes(dbRef.$ref));\n    }\n    if (!force) {\n        allDBRefs = allDBRefs.filter((dbRef) => !dbRef.url);\n    }\n    const unknowns = {};\n    for (const entry of allDBRefs) {\n        switch (entry.$ref) {\n            case 'compounds':\n                entry.url = `https://pubchem.ncbi.nlm.nih.gov/compound/${entry.$id}`;\n                break;\n            case 'pubmeds':\n                entry.url = `https://pubmed.ncbi.nlm.nih.gov/${entry.$id}`;\n                break;\n            case 'gnps':\n                entry.url = `https://gnps.ucsd.edu/ProteoSAFe/gnpslibraryspectrum.jsp?SpectrumID=${entry.$id}`;\n                break;\n            case 'patents':\n                entry.url = `https://pubchem.ncbi.nlm.nih.gov/patent/${entry.$id}`;\n                break;\n            case 'bioassays':\n                entry.url = `https://pubchem.ncbi.nlm.nih.gov/bioassay/${entry.$id.replace(/.*_/, '')}`;\n                break;\n            case 'npasses':\n                entry.url = `http://bidd.group/NPASS/compound.php?compoundID=${entry.$id}`;\n                break;\n            case 'cmaups':\n                entry.url = `http://bidd.group/CMAUP/ingredient.php?ingredient=${entry.$id}`;\n                break;\n            case 'coconuts':\n                entry.url = `https://coconut.naturalproducts.net/compound/coconut_id/${entry.$id}`;\n                break;\n            case 'lotuses':\n                entry.url = `https://lotus.naturalproducts.net/compound/lotus_id/${entry.$id}`;\n                break;\n            case 'npAtlases':\n                entry.url = `https://www.npatlas.org/explore/compounds/${entry.$id}`;\n                break;\n            case 'massBank':\n                entry.url = `https://massbank.eu/MassBank/RecordDisplay?id=${entry.$id}`;\n                break;\n            default:\n                unknowns[entry.$ref] = true;\n                break;\n        }\n    }\n    if (Object.keys(unknowns).length > 0) {\n        // eslint-disable-next-line no-console\n        console.error('Unknown url to original data for the following collections:', unknowns);\n    }\n}\n//# sourceMappingURL=appendURLs.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fetchJSON = fetchJSON;\nasync function fetchJSON(url, data) {\n    if (data) {\n        try {\n            const searchParams = new URLSearchParams(data);\n            const result = await fetch(`${url}?${searchParams.toString()}`);\n            return result.json();\n        }\n        catch {\n            const searchParams = new URLSearchParams(data);\n            const result = await fetch(`${url}?${searchParams.toString()}`);\n            return result.json();\n        }\n    }\n    else {\n        const result = await fetch(url);\n        return result.json();\n    }\n}\n//# sourceMappingURL=fetchJSON.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.postFetchJSON = postFetchJSON;\nasync function postFetchJSON(url, data = {}) {\n    const formData = new FormData();\n    for (const name in data) {\n        formData.append(name, data[name]);\n    }\n    const result = await fetch(url, {\n        method: 'POST',\n        body: formData,\n    });\n    return result.json();\n}\n//# sourceMappingURL=postFetchJSON.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.includeDBRefs = includeDBRefs;\nconst appendAllDBRefs_js_1 = require(\"./appendAllDBRefs.js\");\nconst postFetchJSON_js_1 = require(\"./postFetchJSON.js\");\n/**\n * Load the DBrefs and create a new property `data` for each DBRef\n * @param {any} object\n * @param {object} [options={}]\n * @param {string[]} [options.collections] - List of collections to include\n * @param {string[]} [options.excludedCollections] - List of collections to include\n * @param {boolean} [options.force=false] - Force the inclusion of the data even if it is already present\n * @param {string} [options.baseURL='https://octochemdb.cheminfo.org/'] - URL of the webservice\n */\nasync function includeDBRefs(object, options = {}) {\n    const { collections, excludedCollections, force = false, baseURL = 'https://octochemdb.cheminfo.org/', } = options;\n    let allDBRefs = [];\n    (0, appendAllDBRefs_js_1.appendAllDBRefs)(object, allDBRefs);\n    if (collections) {\n        allDBRefs = allDBRefs.filter((dbRef) => collections.includes(dbRef.$ref));\n    }\n    if (excludedCollections) {\n        allDBRefs = allDBRefs.filter((dbRef) => !excludedCollections.includes(dbRef.$ref));\n    }\n    if (!force) {\n        allDBRefs = allDBRefs.filter((dbRef) => !dbRef.data);\n    }\n    const groups = groupsByCollection(allDBRefs);\n    const promises = [];\n    for (const [collection, entries] of Object.entries(groups)) {\n        promises.push(addDataForOneCollection(collection, baseURL, entries));\n    }\n    await Promise.allSettled(promises);\n}\nasync function addDataForOneCollection(collection, baseURL, entries) {\n    const url = new URL(`${collection}/v1/ids`, baseURL).toString();\n    const searchParams = {\n        ids: entries.map((entry) => entry.$id).join(','),\n    };\n    const data = {};\n    const result = await (0, postFetchJSON_js_1.postFetchJSON)(url, searchParams);\n    if (!result.data) {\n        throw new Error(`No data for ${url}`);\n    }\n    for (const entry of result.data) {\n        data[entry._id] = entry.data;\n    }\n    for (let datum of entries) {\n        datum.data = data[datum.$id];\n    }\n}\nfunction groupsByCollection(allDBRefs) {\n    const groups = {};\n    for (let dbRef of allDBRefs) {\n        if (!groups[dbRef.$ref])\n            groups[dbRef.$ref] = [];\n        groups[dbRef.$ref].push(dbRef);\n    }\n    return groups;\n}\n//# sourceMappingURL=includeDBRefs.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.normalizeActivities = normalizeActivities;\n/**\n * @description This function normalizes the activities of an entry of ActivesOrNaturals collection.\n * @param {Object} activeOrNatural - an entry of ActivesOrNaturals collection\n * @returns - ActiveOrNatural entry with normalized activities\n */\nfunction normalizeActivities(activeOrNatural) {\n    activeOrNatural = { ...activeOrNatural };\n    let activities = [];\n    for (let activity of activeOrNatural.data.activities) {\n        if (activity?.data?.activities !== undefined) {\n            for (let activityEntry of activity.data.activities) {\n                let normalizedActivity = {\n                    $ref: activity.$ref,\n                    $id: activity.$id,\n                    data: {\n                        assay: activityEntry.assay,\n                        ocl: activity.data.ocl,\n                    },\n                    url: activity.url,\n                };\n                if (activityEntry?.targetTaxonomies !== undefined) {\n                    normalizedActivity.data.targetTaxonomies = [\n                        activityEntry.targetTaxonomies,\n                    ];\n                }\n                activities.push(normalizedActivity);\n            }\n        }\n        else {\n            activities.push(activity);\n        }\n    }\n    activeOrNatural.data.activities = activities;\n    return activeOrNatural;\n}\n//# sourceMappingURL=normalizeActivities.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.activeOrNaturalDetails = activeOrNaturalDetails;\nconst appendURLs_js_1 = require(\"./utils/appendURLs.js\");\nconst fetchJSON_js_1 = require(\"./utils/fetchJSON.js\");\nconst includeDBRefs_js_1 = require(\"./utils/includeDBRefs.js\");\nconst normalizeActivities_js_1 = require(\"./utils/normalizeActivities.js\");\n/**\n * Search for a specific natural or active compound using its ID\n * @param {object} [options={}]\n * @param {string} [options.fields='_id,data'] - List of fields to retrieve\n * @param {string} [options.route='activesOrNaturals/v1/id'] - URL of the webservice\n * @param {string} [options.baseURL='https://octochemdb.cheminfo.org/'] - URL of the webservice\n */\nasync function activeOrNaturalDetails(id, options = {}) {\n    const { route = 'activesOrNaturals/v1/id', baseURL = 'https://octochemdb.cheminfo.org/', fields = '_id,data', } = options;\n    const activeOrNatural = await fetchActiveOrNatural(id, {\n        url: new URL(route, baseURL).toString(),\n        fields,\n    });\n    await (0, includeDBRefs_js_1.includeDBRefs)(activeOrNatural, { baseURL });\n    ensureArray(activeOrNatural);\n    (0, appendURLs_js_1.appendURLs)(activeOrNatural);\n    (0, normalizeActivities_js_1.normalizeActivities)(activeOrNatural);\n    return activeOrNatural;\n}\nfunction ensureArray(activeOrNatural) {\n    if (!activeOrNatural.data.activities) {\n        activeOrNatural.data.activities = [];\n    }\n    if (!activeOrNatural.data.pubmeds) {\n        activeOrNatural.data.pubmeds = [];\n    }\n    if (!activeOrNatural.data.patents) {\n        activeOrNatural.data.patents = [];\n    }\n    if (!activeOrNatural.data.taxonomies) {\n        activeOrNatural.data.taxonomies = [];\n    }\n}\nasync function fetchActiveOrNatural(id, options) {\n    const { fields, url } = options;\n    const searchParams = { id };\n    if (fields) {\n        searchParams.fields = fields;\n    }\n    const results = await (0, fetchJSON_js_1.fetchJSON)(url, searchParams);\n    return results.data;\n}\n//# sourceMappingURL=activeOrNaturalDetails.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.parseMasses = parseMasses;\nfunction parseMasses(masses) {\n    if (!masses)\n        return [];\n    if (Array.isArray(masses))\n        return masses;\n    if (typeof masses === 'number') {\n        return [masses];\n    }\n    if (typeof masses === 'string') {\n        return masses\n            .split(/[\\t\\n\\r ,;]+/)\n            .filter(Boolean)\n            .map(Number);\n    }\n    throw new Error('Cannot parse masses');\n}\n//# sourceMappingURL=parseMasses.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getAllowedEMs = getAllowedEMs;\nconst mf_finder_1 = require(\"mf-finder\");\nasync function getAllowedEMs(options) {\n    const { ranges, masses, precision, ionizations } = options;\n    if (!ranges)\n        return;\n    const allowedEMs = [];\n    for (let mass of masses) {\n        const { mfs } = await (0, mf_finder_1.findMFs)(mass, {\n            ionizations,\n            precision,\n            ranges,\n            limit: 100000,\n        });\n        for (const mf of mfs) {\n            allowedEMs.push(mf.em);\n        }\n    }\n    return Float64Array.from(allowedEMs).toSorted();\n}\n//# sourceMappingURL=getAllowedEMs.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.searchWithIonizations = searchWithIonizations;\nconst chemical_elements_1 = require(\"chemical-elements\");\nconst mf_parser_1 = require(\"mf-parser\");\nconst mf_utilities_1 = require(\"mf-utilities\");\nconst fetchJSON_js_1 = require(\"./fetchJSON.js\");\nconst getAllowedEMs_js_1 = require(\"./getAllowedEMs.js\");\nconst parseMasses_js_1 = require(\"./parseMasses.js\");\nasync function searchWithIonizations(options) {\n    const { realURL, fields, precision = 100, limit = 1000, searchParams = {}, ranges, } = options;\n    searchParams.precision = String(precision);\n    searchParams.limit = String(limit);\n    if (fields)\n        searchParams.fields = fields;\n    let ionizations = (0, mf_utilities_1.preprocessIonizations)(options.ionizations);\n    const masses = (0, parseMasses_js_1.parseMasses)(options.masses || [0]);\n    // if we have ranges we need to filter the allowed EMs\n    const allowedEMs = await (0, getAllowedEMs_js_1.getAllowedEMs)({\n        ranges,\n        masses,\n        precision,\n        ionizations,\n    });\n    const promises = [];\n    for (let ionization of ionizations) {\n        for (let mass of masses) {\n            if (mass !== 0) {\n                const realMass = mass * Math.abs(ionization.charge || 1) -\n                    ionization.em +\n                    chemical_elements_1.ELECTRON_MASS * ionization.charge;\n                searchParams.em = String(realMass);\n            }\n            promises.push((0, fetchJSON_js_1.fetchJSON)(realURL, searchParams));\n        }\n    }\n    const results = await Promise.all(promises);\n    const entries = [];\n    let counter = 0;\n    for (const result of results) {\n        const ionization = ionizations[Math.floor(counter / masses.length)];\n        const targetMass = masses[counter % masses.length];\n        counter++;\n        for (const entry of result.data) {\n            if (allowedEMs &&\n                !allowedEMs.some((em) => Math.abs(em - entry.data.em) < 0.0000001)) {\n                continue;\n            }\n            try {\n                entry.mfInfo = new mf_parser_1.MF(entry.data?.mf || entry._id).getInfo({\n                    emFieldName: 'em',\n                    msemFieldName: 'msem',\n                });\n                entry.ionization = ionization;\n                entry.ms = (0, mf_utilities_1.getMsInfo)(entry.mfInfo, {\n                    targetMass,\n                    ionization,\n                }).ms;\n                entries.push(entry);\n            }\n            catch (error) {\n                // eslint-disable-next-line no-console\n                console.warn(`${error}`);\n            }\n        }\n    }\n    if (entries.length > limit) {\n        entries.length = limit;\n    }\n    return entries;\n}\n//# sourceMappingURL=searchWithIonizations.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.activesOrNaturals = activesOrNaturals;\nconst appendURLs_js_1 = require(\"./utils/appendURLs.js\");\nconst includeDBRefs_js_1 = require(\"./utils/includeDBRefs.js\");\nconst parseMasses_js_1 = require(\"./utils/parseMasses.js\");\nconst searchWithIonizations_js_1 = require(\"./utils/searchWithIonizations.js\");\n/**\n * Search for natural or active compounds using various criteria\n * @param {object} [options={}]\n * @param {number|string|number[]} [options.masses] - Observed monoisotopic mass\n * @param {string} [options.noStereoTautomerID=''] - ID of the compound to search from the results\n * @param {string} [options.ionizations=''] - string containing a comma separated list of modifications\n * @param {string} [options.ranges=''] - Allows to filter by a range of molecular formula\n * @param {string} [options.mf=''] - Search by molecular formula\n * @param {number} [options.precision=1000] - Precision of the monoisotopic mass in ppm\n * @param {string} [options.fields] - List of fields to retrieve\n * @param {string} [options.kwTaxonomies=''] - Comma separated list of taxonomies family, genus or species of the product source\n * @param {string} [options.kwActiveAgainst=''] - Comma separated list of taxonomies family, genus or species of the bioactivity target\n * @param {string} [options.kwBioassays=''] - Comma separated list of keyword from the description of the bioassay\n * @param {string} [options.kwMeshTerms=''] - Comma separated list of keyword from the medline MeshTerms\n * @param {string} [options.kwTitles=''] - Comma separated list of keyword from the compound title\n * @param {string} [options.minNbMassSpectra] - Minimal number of mass spectra\n * @param {number} [options.limit=1000] - Maximal number of entries to return\n * @param {string} [options.route='activesOrNaturals/v1/search'] - Route to this specific webservice\n * @param {string[]|undefined} [options.includes] - Array of DBref collections to include\n * @param {string} [options.baseURL='https://octochemdb.cheminfo.org/'] - Base URL of the webservice\n */\nasync function activesOrNaturals(options = {}) {\n    const { route = 'activesOrNaturals/v1/search', baseURL = 'https://octochemdb.cheminfo.org/', includes, } = options;\n    const realURL = new URL(route, baseURL).toString();\n    const searchParams = prepareSearchParams(options);\n    const masses = (0, parseMasses_js_1.parseMasses)(options.masses || [0]);\n    const entries = await (0, searchWithIonizations_js_1.searchWithIonizations)({\n        ...options,\n        masses,\n        realURL,\n        searchParams,\n    });\n    if (includes) {\n        await (0, includeDBRefs_js_1.includeDBRefs)(entries, { baseURL, collections: includes });\n    }\n    (0, appendURLs_js_1.appendURLs)(entries);\n    entries.sort((a, b) => {\n        if (a.data.nbMassSpectra > b.data.nbMassSpectra)\n            return -1;\n        if (a.data.nbMassSpectra < b.data.nbMassSpectra)\n            return 1;\n        if (a.data.nbPubmeds > b.data.nbPubmeds)\n            return -1;\n        if (a.data.nbPubmeds < b.data.nbPubmeds)\n            return 1;\n        if (a.data.nbPatents > b.data.nbPatents)\n            return -1;\n        if (a.data.nbPatents < b.data.nbPatents)\n            return 1;\n        return 0;\n    });\n    return entries;\n}\nfunction prepareSearchParams(options) {\n    const { noStereoTautomerID, kwTaxonomies, kwActiveAgainst, kwBioassays, kwMeshTerms, kwTitles, mf, minNbMassSpectra, } = options;\n    const searchParams = {};\n    if (noStereoTautomerID) {\n        searchParams.noStereoTautomerID = noStereoTautomerID;\n    }\n    if (kwTaxonomies) {\n        searchParams.kwTaxonomies = kwTaxonomies;\n    }\n    if (kwActiveAgainst) {\n        searchParams.kwActiveAgainst = kwActiveAgainst;\n    }\n    if (kwBioassays) {\n        searchParams.kwBioassays = kwBioassays;\n    }\n    if (kwMeshTerms) {\n        searchParams.kwMeshTerms = kwMeshTerms;\n    }\n    if (kwTitles) {\n        searchParams.kwTitles = kwTitles;\n    }\n    if (mf) {\n        searchParams.mf = mf;\n    }\n    if (minNbMassSpectra) {\n        searchParams.minNbMassSpectra = minNbMassSpectra;\n    }\n    return searchParams;\n}\n//# sourceMappingURL=activesOrNaturals.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.activesOrNaturalsByMF = activesOrNaturalsByMF;\nconst activesOrNaturals_js_1 = require(\"./activesOrNaturals.js\");\n/**\n * Search for natural or active compounds and group them by molecular formula\n * @param {object} [options={}]\n * @param {number|string|number[]} [options.masses] - Observed monoisotopic mass\n * @param {string} [options.ionizations=''] - string containing a comma separated list of modifications\n * @param {string} [options.ranges=''] - Allows to filter by a range of molecular formula\n * @param {number} [options.precision=1000] - Precision (accuracy) of the monoisotopic mass in ppm\n * @param {string} [options.fields='data.noStereoOcl,data.em,data.mf'] - List of fields to retrieve\n * @param {string} [options.kwTaxonomies=''] - Comma separated list of taxonomies family, genus or species of the product source\n * @param {string} [options.kwActiveAgainst=''] - Comma separated list of taxonomies family, genus or species of the bioactivity target\n * @param {string} [options.kwBioassays=''] - Comma separated list of keyword from the description of the bioassay\n * @param {string} [options.kwMeshTerms=''] - Comma separated list of keyword from the medline MeshTerms\n * @param {string} [options.kwTitles=''] - Comma separated list of keyword from compound title\n * @param {number} [options.limit=1000] - Maximal number of entries to return\n * @param {string} [options.route='activesOrNaturals/v1/search'] - URL of the webservice\n * @param {string} [options.baseURL='https://octochemdb.cheminfo.org/'] - URL of the webservice\n */\nasync function activesOrNaturalsByMF(options = {}) {\n    const fields = 'data.noStereoOcl,data.mf,data.em,data.nbPatents,data.nbPubmeds,data.nbActivities,data.bioactive,data.nbMassSpectra,data.naturalProduct'.split(',');\n    if (options.fields)\n        fields.push(...options.fields.split(/[ ,]+/));\n    const entries = await (0, activesOrNaturals_js_1.activesOrNaturals)({\n        ...options,\n        fields: fields.join(','),\n    });\n    // we will now group the data per mf\n    const grouped = {};\n    for (const entry of entries) {\n        if (!grouped[entry.data.mf]) {\n            grouped[entry.data.mf] = {\n                mfInfo: entry.mfInfo,\n                ms: entry.ms,\n                ionization: entry.ionization,\n                nbNaturals: 0,\n                nbBioactives: 0,\n                nbPatents: 0,\n                nbPubmeds: 0,\n                nbMassSpectra: 0,\n            };\n        }\n        const currentGroup = grouped[entry.data.mf];\n        if (entry.data.naturalProduct)\n            currentGroup.nbNaturals++;\n        if (entry.data.bioactive)\n            currentGroup.nbBioactives++;\n        if (entry.data.nbMassSpectra) {\n            currentGroup.nbMassSpectra += entry.data.nbMassSpectra;\n        }\n        if (entry.data.nbPubmeds)\n            currentGroup.nbPubmeds += entry.data.nbPubmeds;\n        if (entry.data.nbPatents)\n            currentGroup.nbPatents += entry.data.nbPatents;\n    }\n    const groupedArray = Object.keys(grouped).map((key) => grouped[key]);\n    // because we can combine many ionizations we should resort the data\n    groupedArray.sort((a, b) => Math.abs(a.ms.ppm) - Math.abs(b.ms.ppm));\n    return groupedArray;\n}\n//# sourceMappingURL=activesOrNaturalsByMF.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.compoundsFromMF = compoundsFromMF;\nconst fetchJSON_js_1 = require(\"./utils/fetchJSON.js\");\nconst postFetchJSON_js_1 = require(\"./utils/postFetchJSON.js\");\n/**\n * Retrieve a list of molecular formulas from one or many monoisotopic mass that are present in pubchem compound.\n * in the database and a monoisotopic mass.\n * @param {string} mf - Observed monoisotopic mass\n * @param {object} [options={}]\n * @param {string} [options.fields] - Fields to retrieve from the database\n * @param {string} [options.baseURL='https://octochemdb.cheminfo.org/'] - URL of the webservice\n * @param {string} [options.route='mfs/v1/fromMF'] - URL of the webservice\n * @param {string} [options.titleCompoundsURL='titleCompounds/v1/ids'] - URL of the webservice\n * @param {number} [options.limit=50000] - Maximal number of entries to return\n */\nasync function compoundsFromMF(mf, options = {}) {\n    const { route = 'compounds/v1/fromMF', baseURL = 'https://octochemdb.cheminfo.org/', limit = 50000, fields = 'data.ocl.idCode,data.ocl.index,data.iupac', } = options;\n    const searchParams = {\n        limit,\n        fields,\n        mf,\n    };\n    const realURL = new URL(route, baseURL).toString();\n    const { data } = await (0, fetchJSON_js_1.fetchJSON)(realURL, searchParams);\n    const ids = data.map((datum) => datum._id);\n    const titles = await getTitles(ids, options);\n    for (const datum of data) {\n        if (titles[datum._id])\n            datum.data.title = titles[datum._id];\n    }\n    data.sort((a, b) => (a.data.title?.length || Number.MAX_SAFE_INTEGER) -\n        (b.data.title?.length || Number.MAX_SAFE_INTEGER));\n    return data;\n}\nasync function getTitles(ids, options) {\n    let { titleCompoundsURL = 'titleCompounds/v1/ids', baseURL = 'https://octochemdb.cheminfo.org/', } = options;\n    if (process.env.NODE_ENV === 'test') {\n        baseURL = 'https://octochemdb.cheminfo.org/';\n    }\n    const titlesURL = new URL(titleCompoundsURL, baseURL).toString();\n    const { data: titlesArray } = await (0, postFetchJSON_js_1.postFetchJSON)(titlesURL, { ids });\n    const titles = {};\n    for (const entry of titlesArray) {\n        if (entry.data.title.match(/CID /))\n            continue;\n        titles[entry._id] = entry.data.title;\n    }\n    return titles;\n}\n//# sourceMappingURL=compoundsFromMF.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.searchMasses = searchMasses;\nconst mf_utilities_1 = require(\"mf-utilities\");\nconst fetchJSON_js_1 = require(\"./utils/fetchJSON.js\");\nconst parseMasses_js_1 = require(\"./utils/parseMasses.js\");\n/**\n *\n * @param {object} [options={}]\n * @param {string} [options.baseURL='https://octochemdb.cheminfo.org/'] - URL of the webservice\n * @param {number|string|number[]} [options.masses] - Observed fragment masses\n * @param {string} [options.mf] - Molecular formula of the non ionized molecule (not available for inSilicoFragments)\n * @param {number} [options.precision=100] - Precision (accuracy) of the monoisotopic mass in ppm\n * @param {number} [options.limit=1000] - Maximal number of entries to return\n * @param {string} [options.modifications=''] - Comma separated list of allowed modifications\n * @param {string} [options.route='massBank/v1/search'] - Route to use\n * @param {string} [options.link='https://massbank.eu/MassBank/RecordDisplay?id='] - Link to the database source\n */\nasync function searchMasses(options = {}) {\n    const { route = 'massBank/v1/search', baseURL = 'https://octochemdb.cheminfo.org/', precision = 100, limit = 1000, mf = '', link = '', } = options;\n    if (route === '') {\n        throw new Error('route is mandatory');\n    }\n    const realURL = new URL(route, baseURL).toString();\n    const masses = (0, parseMasses_js_1.parseMasses)(options.masses);\n    const modifications = (0, mf_utilities_1.preprocessIonizations)(options.modifications);\n    const allResults = [];\n    for (let modification of modifications) {\n        const massShift = modification.em;\n        const searchParams = {\n            masses: masses.map((mass) => mass + massShift).join(','),\n            precision,\n            limit,\n            mf,\n        };\n        const { data: results } = await (0, fetchJSON_js_1.fetchJSON)(realURL, searchParams);\n        for (const result of results) {\n            const modifiedResult = {\n                ...result,\n                modification,\n            };\n            if (link !== '') {\n                modifiedResult.url = link + result._id;\n            }\n            allResults.push(modifiedResult);\n        }\n    }\n    return allResults;\n}\n//# sourceMappingURL=searchMasses.js.map","\"use strict\";\n/**\n * This method will retrieve similar mass spectra\n * @param {object} [options={}]\n * @param {string} [options.baseURL='https://octochemdb.cheminfo.org/'] - URL of the webservice\n * @param {number|string|number[]} [options.masses] - Observed monoisotopic mass\n * @param {number} [options.precision=1000] - Precision (accuracy) of the monoisotopic mass in ppm\n * @param {number} [options.limit=1000] - Maximal number of entries to return\n * @param {string} [options.modifications=''] - Comma\n * @param {('massBank'|'gnps'|'inSilicoFragments')[]} [options.databases=['massBank','gnps']] - List of databases to search for mass spectra\n * @param {object} [options.routes] - Object that contains the routes to use for each database\n * @param {boolean} [options.uniqueMolecules=true] - If true, only one molecule per entry is returned\n * @param {object} [options.similarity={}]\n * @param {number} [options.similarity.nbPeaks=5] - Number of peaks to use for the similarity\n * @param {number} [options.similarity.massPower=1] - Power to use for the mass\n * @param {number} [options.similarity.minSimilarity=0.2] - Minimal similarity to return\n * @param {number} [options.similarity.intensityPower=0.6] - Power to use for the intensity\n * @param {number} [options.similarity.minNbCommonPeaks=0] - Minimal number of common peaks\n * @param {{x:number[],y:number[]}} [options.similarity.experimental=[]] - Experimental mass spectra to compare to\n *\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.massSpectra = massSpectra;\nconst ms_spectrum_1 = require(\"ms-spectrum\");\nconst searchMasses_js_1 = require(\"./searchMasses.js\");\nconst defaultRoutes = [\n    {\n        name: 'massBank',\n        url: 'https://octochemdb.cheminfo.org/massBank/v1/search',\n        link: 'https://massbank.eu/MassBank/RecordDisplay?id=',\n    },\n    {\n        name: 'gnps',\n        url: 'https://octochemdb.cheminfo.org/gnps/v1/search',\n        link: 'https://gnps.ucsd.edu/ProteoSAFe/gnpslibraryspectrum.jsp?SpectrumID=',\n    },\n    {\n        name: 'inSilicoFragments',\n        url: 'https://octochemdb.cheminfo.org/inSilicoFragments/v1/search',\n    },\n];\nasync function massSpectra(options = {}) {\n    const { uniqueMolecules = true, databases = ['massBank', 'gnps'], routes = defaultRoutes, } = options;\n    const promises = [];\n    for (const route of routes) {\n        if (databases && databases.includes(route.name)) {\n            promises.push((0, searchMasses_js_1.searchMasses)({\n                ...options,\n                route: route.url,\n                link: route.link,\n            }).then((entries) => entries.map((entry) => ({ ...entry, database: route.name }))));\n        }\n    }\n    const allResults = await Promise.all(promises);\n    let results = allResults.flat();\n    results = appendAndFilterSimilarity(results, options);\n    if (uniqueMolecules) {\n        results = uniqueMol(results);\n    }\n    return results;\n}\nfunction uniqueMol(results) {\n    const unique = {};\n    for (const result of results) {\n        if (!result.data?.ocl?.idCode)\n            continue;\n        if (!unique[result.data.ocl.idCode]) {\n            unique[result.data.ocl.idCode] = result;\n        }\n    }\n    return Object.values(unique);\n}\nfunction appendAndFilterSimilarity(results, options = {}) {\n    const { similarity } = options;\n    if (!similarity || !similarity.experimental)\n        return results;\n    const { experimental, nbPeaks = 5, massPower = 1, minSimilarity = 0.2, intensityPower = 0.6, minNbCommonPeaks = 0, } = similarity;\n    const precision = Number(options.precision) / 1e6;\n    const comparator = new ms_spectrum_1.MSComparator({\n        nbPeaks,\n        massPower,\n        intensityPower,\n        delta: (mass) => mass * precision,\n        minNbCommonPeaks,\n    });\n    for (const result of results) {\n        result.similarity = comparator.getSimilarity(experimental, structuredClone(result.data.spectrum.data));\n    }\n    results = results.filter((a) => a.similarity.cosine >= minSimilarity);\n    results.sort((a, b) => b.similarity.cosine - a.similarity.cosine);\n    return results;\n}\n//# sourceMappingURL=massSpectra.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.mfsFromEMs = mfsFromEMs;\nconst searchWithIonizations_js_1 = require(\"./utils/searchWithIonizations.js\");\n/**\n * Retrieve a list of molecular formulas from one or many monoisotopic mass that are present in pubchem compound.\n * in the database and a monoisotopic mass.\n * @param {number|string|number[]} masses - Observed monoisotopic mass\n * @param {object} [options={}]\n * @param {string} [options.ionizations=''] - string containing a comma separated list of modifications\n * @param {number} [options.precision=1000] - Precision (accuracy) of the monoisotopic mass in ppm\n * @param {string} [options.ranges=''] - Range of allowed molecular formula\n * @param {number} [options.limit=1000] - Maximal number of entries to return\n * @param {number} [options.minCount=5] - Minimal number of molecules having a specific MF\n * @param {number} [options.fields] - Fields to retrieve from the database\n * @param {string} [options.baseURL='https://octochemdb.cheminfo.org/'] - URL of the webservice\n * @param {string} [options.route='mfs/v1/fromEM'] - URL of the webservice\n * @param {string} [options.compoundsURL='mfs/v1/fromMF'] - URL to retrieve corresponding compounds\n */\nasync function mfsFromEMs(masses, options = {}) {\n    const { route = 'mfs/v1/fromEM', compoundsURL = 'compounds/v1/fromMF', baseURL = 'https://octochemdb.cheminfo.org/', minCount = 5, } = options;\n    const realURL = new URL(route, baseURL).toString();\n    const searchParams = {\n        minCount: String(minCount),\n    };\n    const entries = await (0, searchWithIonizations_js_1.searchWithIonizations)({\n        ...options,\n        masses,\n        realURL,\n        searchParams,\n    });\n    const realCompoundsURL = new URL(compoundsURL, baseURL).toString();\n    const searchParamsCompounds = new URLSearchParams();\n    for (const entry of entries) {\n        searchParamsCompounds.set('mf', String(entry._id));\n        entry.compoundsURL = `${realCompoundsURL}?${searchParamsCompounds.toString()}`;\n    }\n    // because we can combine many ionizations we should resort the data\n    entries.sort((a, b) => Math.abs(a.ms.ppm) - Math.abs(b.ms.ppm));\n    return entries;\n}\n//# sourceMappingURL=mfsFromEMs.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.pubmedCompounds = pubmedCompounds;\nconst fetchJSON_js_1 = require(\"./utils/fetchJSON.js\");\nconst includeDBRefs_js_1 = require(\"./utils/includeDBRefs.js\");\n/**\n * Retrieve the compounds from a pubmedID\n * @param {string} pubmedID\n * @param {object} [options={}]\n * @param {string} [options.route='pubmeds/v1/id'] - relative URL of the webservice\n * @param {string} [options.baseURL='https://octochemdb.cheminfo.org/'] - URL of the webservice\n * @param {number} [options.limit=1000] - Maximal number of entries to return\n * @returns\n */\nasync function pubmedCompounds(pubmedID, options = {}) {\n    const { route = 'pubmeds/v1/id', baseURL = 'https://octochemdb.cheminfo.org/', limit = 1000, } = options;\n    const realURL = new URL(route, baseURL).toString();\n    const searchParams = {\n        id: pubmedID,\n        fields: 'data.compounds',\n        limit,\n    };\n    const { data: results } = await (0, fetchJSON_js_1.fetchJSON)(realURL, searchParams);\n    await (0, includeDBRefs_js_1.includeDBRefs)(results, { baseURL });\n    return results.data.compounds;\n}\n//# sourceMappingURL=pubmedCompounds.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.searchInSilicoSpectraByMF = searchInSilicoSpectraByMF;\nconst ms_spectrum_1 = require(\"ms-spectrum\");\nconst fetchJSON_js_1 = require(\"./utils/fetchJSON.js\");\n/**\n * @param {object} spectrum - The experimental spectrum to compare to\n * @param {string} mf - Molecular formula of the non ionized molecule\n * @param {object} [options={}]\n * @param {string} [options.baseURL='https://octochemdb.cheminfo.org/'] - URL of the webservice\n * @param {string} [options.mf] - Molecular formula of the non ionized molecule (not available for inSilicoFragments)\n * @param {number} [options.precision=100] - Precision (accuracy) of the monoisotopic mass in ppm\n * @param {number} [options.limit=1000] - Maximal number of entries to return\n * @param {number} [options.massPower=1000] - Maximal number of entries to return\n * @param {number} [options.massPower=3] - High power will give more weight to the mass. If you would prefer to observe fragments you should use a number less than 1\n * @param {number} [options.intensityPower=0.6] - How important is the intensity. By default we don't give to much importance to it\n * @param {string} [options.route='inSilicoFragments/v1/search'] - Route to use\n */\nasync function searchInSilicoSpectraByMF(spectrum, mf, options = {}) {\n    const { route = 'inSilicoFragments/v1/search', baseURL = 'https://octochemdb.cheminfo.org/', precision = 100, limit = 1000, massPower = 3, intensityPower = 0.6, } = options;\n    if (!route) {\n        throw new Error('route is mandatory');\n    }\n    if (!mf) {\n        throw new Error('mf is mandatory');\n    }\n    const realURL = new URL(route, baseURL).toString();\n    const searchParams = {\n        limit,\n        mf,\n    };\n    const { data: results } = await (0, fetchJSON_js_1.fetchJSON)(realURL, searchParams);\n    const msComparator = new ms_spectrum_1.MSComparator({\n        delta: (mass) => mass * 1e-6 * precision,\n        massPower,\n        intensityPower,\n    });\n    const finals = [];\n    for (const result of results) {\n        const similarity = msComparator.getSimilarityToMasses(spectrum, result.data.spectrum.data.x);\n        if (similarity.cosine > 0) {\n            finals.push({\n                ...result,\n                similarity,\n            });\n        }\n    }\n    finals.sort((a, b) => b.similarity.cosine - a.similarity.cosine);\n    return finals;\n}\n//# sourceMappingURL=searchInSilicoSpectraByMF.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.searchInSilicoSpectraByMasses = searchInSilicoSpectraByMasses;\nconst ms_spectrum_1 = require(\"ms-spectrum\");\nconst searchWithIonizations_js_1 = require(\"./utils/searchWithIonizations.js\");\n/**\n * @param {object} spectrum - The experimental spectrum to compare to\n * @param {number|string|number[]} [masses] - List of experimental monoisotopic mass\n * @param {object} [options={}]\n * @param {string} [options.baseURL='https://octochemdb.cheminfo.org/'] - URL of the webservice\n * @param {string} [options.mf] - Molecular formula of the non ionized molecule (not available for inSilicoFragments)\n * @param {number} [options.precision=100] - Precision (accuracy) of the monoisotopic mass in ppm\n * @param {string} [options.ionizations=\"H+\"] - Comma separated list of allowed ionizations\n * @param {number} [options.limit=1000] - Maximal number of entries to return\n * @param {number} [options.massPower=1000] - Maximal number of entries to return\n * @param {number} [options.massPower=3] - High power will give more weight to the mass. If you would prefer to observe fragments you should use a number less than 1\n * @param {number} [options.intensityPower=0.6] - How important is the intensity. By default we don't give to much importance to it\n * @param {string} [options.route='inSilicoFragments/v1/search'] - Route to use\n * @param {object} [options.technique={}] - Technique used to generate the spectrum\n * @param {string} [options.technique.mode=\"positive\"] - Mode of the acquisition\n * @param {string} [options.technique.ionization=\"esi\"] - Ionization of the acquisition\n */\nasync function searchInSilicoSpectraByMasses(spectrum, masses, options = {}) {\n    const { route = 'inSilicoFragments/v1/search', baseURL = 'https://octochemdb.cheminfo.org/', precision = 100, limit = 10000, massPower = 3, intensityPower = 0.6, ionizations = 'H+', technique = {}, } = options;\n    const { mode = 'positive', ionization = 'esi' } = technique;\n    if (!route) {\n        throw new Error('route is mandatory');\n    }\n    if (!masses) {\n        throw new Error('masses is mandatory');\n    }\n    const realURL = new URL(route, baseURL).toString();\n    let results = await (0, searchWithIonizations_js_1.searchWithIonizations)({\n        precision,\n        realURL,\n        masses,\n        limit,\n        ionizations,\n        searchParams: {\n            mode,\n            ionization,\n        },\n    });\n    const msComparator = new ms_spectrum_1.MSComparator({\n        delta: (mass) => mass * 1e-6 * precision,\n        massPower,\n        intensityPower,\n    });\n    const finals = [];\n    // filter MDMA\n    // results = results.filter(result => result.data.ocl.idCode === 'dg~D@MBdie]v\\\\kahHBjh@@')\n    for (const result of results) {\n        const similarity = msComparator.getSimilarityToMasses(spectrum, result.data.spectrum.data.x);\n        if (similarity.cosine > 0) {\n            finals.push({\n                ...result,\n                similarity,\n            });\n        }\n    }\n    finals.sort((a, b) => b.similarity.cosine - a.similarity.cosine);\n    return finals;\n}\n//# sourceMappingURL=searchInSilicoSpectraByMasses.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.OctoChemDB = void 0;\nconst activeOrNaturalDetails_js_1 = require(\"./activeOrNaturalDetails.js\");\nconst activesOrNaturals_js_1 = require(\"./activesOrNaturals.js\");\nconst activesOrNaturalsByMF_js_1 = require(\"./activesOrNaturalsByMF.js\");\nconst compoundsFromMF_js_1 = require(\"./compoundsFromMF.js\");\nconst massSpectra_js_1 = require(\"./massSpectra.js\");\nconst mfsFromEMs_js_1 = require(\"./mfsFromEMs.js\");\nconst pubmedCompounds_js_1 = require(\"./pubmedCompounds.js\");\nconst searchInSilicoSpectraByMF_js_1 = require(\"./searchInSilicoSpectraByMF.js\");\nconst searchInSilicoSpectraByMasses_js_1 = require(\"./searchInSilicoSpectraByMasses.js\");\nconst searchMasses_js_1 = require(\"./searchMasses.js\");\nclass OctoChemDB {\n    /**\n     *\n     * @param {*} options\n     */\n    constructor(options = {}) {\n        this.baseURL = options.baseURL ?? 'https://octochemdb.cheminfo.org/';\n    }\n    async mfsFromEMs(masses, options = {}) {\n        return (0, mfsFromEMs_js_1.mfsFromEMs)(masses, { baseURL: this.baseURL, ...options });\n    }\n    async compoundsFromMF(mf, options = {}) {\n        return (0, compoundsFromMF_js_1.compoundsFromMF)(mf, { baseURL: this.baseURL, ...options });\n    }\n    async activesOrNaturals(options = {}) {\n        return (0, activesOrNaturals_js_1.activesOrNaturals)({ baseURL: this.baseURL, ...options });\n    }\n    async activesOrNaturalsByMF(options = {}) {\n        return (0, activesOrNaturalsByMF_js_1.activesOrNaturalsByMF)({ baseURL: this.baseURL, ...options });\n    }\n    async activeOrNaturalDetails(id, options = {}) {\n        return (0, activeOrNaturalDetails_js_1.activeOrNaturalDetails)(id, { baseURL: this.baseURL, ...options });\n    }\n    async searchMasses(options = {}) {\n        return (0, searchMasses_js_1.searchMasses)({ baseURL: this.baseURL, ...options });\n    }\n    async massSpectra(options = {}) {\n        return (0, massSpectra_js_1.massSpectra)({ baseURL: this.baseURL, ...options });\n    }\n    async searchInSilicoSpectraByMF(spectrum, mf, options = {}) {\n        return (0, searchInSilicoSpectraByMF_js_1.searchInSilicoSpectraByMF)(spectrum, mf, {\n            baseURL: this.baseURL,\n            ...options,\n        });\n    }\n    async searchInSilicoSpectraByMasses(spectrum, masses, options = {}) {\n        return (0, searchInSilicoSpectraByMasses_js_1.searchInSilicoSpectraByMasses)(spectrum, masses, {\n            baseURL: this.baseURL,\n            ...options,\n        });\n    }\n    async pubmedCompounds(pubmedID, options = {}) {\n        return (0, pubmedCompounds_js_1.pubmedCompounds)(pubmedID, { baseURL: this.baseURL, ...options });\n    }\n}\nexports.OctoChemDB = OctoChemDB;\n//# sourceMappingURL=OctoChemDB.js.map","export const STEMMERS = {\n    arabic: 'ar',\n    armenian: 'am',\n    bulgarian: 'bg',\n    czech: 'cz',\n    danish: 'dk',\n    dutch: 'nl',\n    english: 'en',\n    finnish: 'fi',\n    french: 'fr',\n    german: 'de',\n    greek: 'gr',\n    hungarian: 'hu',\n    indian: 'in',\n    indonesian: 'id',\n    irish: 'ie',\n    italian: 'it',\n    lithuanian: 'lt',\n    nepali: 'np',\n    norwegian: 'no',\n    portuguese: 'pt',\n    romanian: 'ro',\n    russian: 'ru',\n    serbian: 'rs',\n    slovenian: 'ru',\n    spanish: 'es',\n    swedish: 'se',\n    tamil: 'ta',\n    turkish: 'tr',\n    ukrainian: 'uk',\n    sanskrit: 'sk'\n};\nexport const SPLITTERS = {\n    dutch: /[^A-Za-zàèéìòóù0-9_'-]+/gim,\n    english: /[^A-Za-zàèéìòóù0-9_'-]+/gim,\n    french: /[^a-z0-9äâàéèëêïîöôùüûœç-]+/gim,\n    italian: /[^A-Za-zàèéìòóù0-9_'-]+/gim,\n    norwegian: /[^a-z0-9_æøåÆØÅäÄöÖüÜ]+/gim,\n    portuguese: /[^a-z0-9à-úÀ-Ú]/gim,\n    russian: /[^a-z0-9а-яА-ЯёЁ]+/gim,\n    spanish: /[^a-z0-9A-Zá-úÁ-ÚñÑüÜ]+/gim,\n    swedish: /[^a-z0-9_åÅäÄöÖüÜ-]+/gim,\n    german: /[^a-z0-9A-ZäöüÄÖÜß]+/gim,\n    finnish: /[^a-z0-9äöÄÖ]+/gim,\n    danish: /[^a-z0-9æøåÆØÅ]+/gim,\n    hungarian: /[^a-z0-9áéíóöőúüűÁÉÍÓÖŐÚÜŰ]+/gim,\n    romanian: /[^a-z0-9ăâîșțĂÂÎȘȚ]+/gim,\n    serbian: /[^a-z0-9čćžšđČĆŽŠĐ]+/gim,\n    turkish: /[^a-z0-9çÇğĞıİöÖşŞüÜ]+/gim,\n    lithuanian: /[^a-z0-9ąčęėįšųūžĄČĘĖĮŠŲŪŽ]+/gim,\n    arabic: /[^a-z0-9أ-ي]+/gim,\n    nepali: /[^a-z0-9अ-ह]+/gim,\n    irish: /[^a-z0-9áéíóúÁÉÍÓÚ]+/gim,\n    indian: /[^a-z0-9अ-ह]+/gim,\n    armenian: /[^a-z0-9ա-ֆ]+/gim,\n    greek: /[^a-z0-9α-ωά-ώ]+/gim,\n    indonesian: /[^a-z0-9]+/gim,\n    ukrainian: /[^a-z0-9а-яА-ЯіїєІЇЄ]+/gim,\n    slovenian: /[^a-z0-9čžšČŽŠ]+/gim,\n    bulgarian: /[^a-z0-9а-яА-Я]+/gim,\n    tamil: /[^a-z0-9அ-ஹ]+/gim,\n    sanskrit: /[^a-z0-9A-Zāīūṛḷṃṁḥśṣṭḍṇṅñḻḹṝ]+/gim,\n    czech: /[^A-Z0-9a-zěščřžýáíéúůóťďĚŠČŘŽÝÁÍÉÓÚŮŤĎ-]+/gim\n};\nexport const SUPPORTED_LANGUAGES = Object.keys(STEMMERS);\nexport function getLocale(language) {\n    return language !== undefined && SUPPORTED_LANGUAGES.includes(language) ? STEMMERS[language] : undefined;\n}\n//# sourceMappingURL=languages.js.map","import { createError } from './errors.js';\nconst baseId = Date.now().toString().slice(5);\nlet lastId = 0;\nconst k = 1024;\nconst nano = BigInt(1e3);\nconst milli = BigInt(1e6);\nconst second = BigInt(1e9);\nexport const isServer = typeof window === 'undefined';\n/**\n * This value can be increased up to 100_000\n * But i don't know if this value change from nodejs to nodejs\n * So I will keep a safer value here.\n */\nexport const MAX_ARGUMENT_FOR_STACK = 65535;\n/**\n * This method is needed to used because of issues like: https://github.com/oramasearch/orama/issues/301\n * that issue is caused because the array that is pushed is huge (>100k)\n *\n * @example\n * ```ts\n * safeArrayPush(myArray, [1, 2])\n * ```\n */\nexport function safeArrayPush(arr, newArr) {\n    if (newArr.length < MAX_ARGUMENT_FOR_STACK) {\n        Array.prototype.push.apply(arr, newArr);\n    }\n    else {\n        const newArrLength = newArr.length;\n        for (let i = 0; i < newArrLength; i += MAX_ARGUMENT_FOR_STACK) {\n            Array.prototype.push.apply(arr, newArr.slice(i, i + MAX_ARGUMENT_FOR_STACK));\n        }\n    }\n}\nexport function sprintf(template, ...args) {\n    return template.replace(/%(?:(?<position>\\d+)\\$)?(?<width>-?\\d*\\.?\\d*)(?<type>[dfs])/g, function (...replaceArgs) {\n        const groups = replaceArgs[replaceArgs.length - 1];\n        const { width: rawWidth, type, position } = groups;\n        const replacement = position ? args[Number.parseInt(position) - 1] : args.shift();\n        const width = rawWidth === '' ? 0 : Number.parseInt(rawWidth);\n        switch (type) {\n            case 'd':\n                return replacement.toString().padStart(width, '0');\n            case 'f': {\n                let value = replacement;\n                const [padding, precision] = rawWidth.split('.').map((w) => Number.parseFloat(w));\n                if (typeof precision === 'number' && precision >= 0) {\n                    value = value.toFixed(precision);\n                }\n                return typeof padding === 'number' && padding >= 0 ? value.toString().padStart(width, '0') : value.toString();\n            }\n            case 's':\n                return width < 0\n                    ? replacement.toString().padEnd(-width, ' ')\n                    : replacement.toString().padStart(width, ' ');\n            default:\n                return replacement;\n        }\n    });\n}\nexport function formatBytes(bytes, decimals = 2) {\n    if (bytes === 0) {\n        return '0 Bytes';\n    }\n    const dm = decimals < 0 ? 0 : decimals;\n    const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n    const i = Math.floor(Math.log(bytes) / Math.log(k));\n    return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} ${sizes[i]}`;\n}\nexport function isInsideWebWorker() {\n    // @ts-expect-error - WebWorker global scope\n    return typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope;\n}\nexport function isInsideNode() {\n    return typeof process !== 'undefined' && process.release && process.release.name === 'node';\n}\nexport function getNanosecondTimeViaPerformance() {\n    return BigInt(Math.floor(performance.now() * 1e6));\n}\nexport function formatNanoseconds(value) {\n    if (typeof value === 'number') {\n        value = BigInt(value);\n    }\n    if (value < nano) {\n        return `${value}ns`;\n    }\n    else if (value < milli) {\n        return `${value / nano}μs`;\n    }\n    else if (value < second) {\n        return `${value / milli}ms`;\n    }\n    return `${value / second}s`;\n}\nexport function getNanosecondsTime() {\n    if (isInsideWebWorker()) {\n        return getNanosecondTimeViaPerformance();\n    }\n    if (isInsideNode()) {\n        return process.hrtime.bigint();\n    }\n    if (typeof process !== 'undefined' && typeof process?.hrtime?.bigint === 'function') {\n        return process.hrtime.bigint();\n    }\n    if (typeof performance !== 'undefined') {\n        return getNanosecondTimeViaPerformance();\n    }\n    // @todo: fallback to V8 native method to get microtime\n    return BigInt(0);\n}\nexport function uniqueId() {\n    return `${baseId}-${lastId++}`;\n}\nexport function getOwnProperty(object, property) {\n    // Checks if `hasOwn` method is defined avoiding errors with older Node.js versions\n    if (Object.hasOwn === undefined) {\n        return Object.prototype.hasOwnProperty.call(object, property) ? object[property] : undefined;\n    }\n    return Object.hasOwn(object, property) ? object[property] : undefined;\n}\nexport function getTokenFrequency(token, tokens) {\n    let count = 0;\n    for (const t of tokens) {\n        if (t === token) {\n            count++;\n        }\n    }\n    return count;\n}\nexport function insertSortedValue(arr, el, compareFn = sortTokenScorePredicate) {\n    let low = 0;\n    let high = arr.length;\n    let mid;\n    while (low < high) {\n        mid = (low + high) >>> 1;\n        if (compareFn(el, arr[mid]) < 0) {\n            high = mid;\n        }\n        else {\n            low = mid + 1;\n        }\n    }\n    arr.splice(low, 0, el);\n    return arr;\n}\nexport function sortTokenScorePredicate(a, b) {\n    if (b[1] === a[1]) {\n        return a[0] - b[0];\n    }\n    return b[1] - a[1];\n}\n// Intersection function taken from https://github.com/lovasoa/fast_array_intersect.\n// MIT Licensed at the time of writing.\nexport function intersect(arrays) {\n    if (arrays.length === 0) {\n        return [];\n    }\n    else if (arrays.length === 1) {\n        return arrays[0];\n    }\n    for (let i = 1; i < arrays.length; i++) {\n        if (arrays[i].length < arrays[0].length) {\n            const tmp = arrays[0];\n            arrays[0] = arrays[i];\n            arrays[i] = tmp;\n        }\n    }\n    const set = new Map();\n    for (const elem of arrays[0]) {\n        set.set(elem, 1);\n    }\n    for (let i = 1; i < arrays.length; i++) {\n        let found = 0;\n        for (const elem of arrays[i]) {\n            const count = set.get(elem);\n            if (count === i) {\n                set.set(elem, count + 1);\n                found++;\n            }\n        }\n        if (found === 0)\n            return [];\n    }\n    return arrays[0].filter((e) => {\n        const count = set.get(e);\n        if (count !== undefined)\n            set.set(e, 0);\n        return count === arrays.length;\n    });\n}\nexport function getDocumentProperties(doc, paths) {\n    const properties = {};\n    const pathsLength = paths.length;\n    for (let i = 0; i < pathsLength; i++) {\n        const path = paths[i];\n        const pathTokens = path.split('.');\n        let current = doc;\n        const pathTokensLength = pathTokens.length;\n        for (let j = 0; j < pathTokensLength; j++) {\n            current = current[pathTokens[j]];\n            // We found an object but we were supposed to be done\n            if (typeof current === 'object') {\n                if (current !== null &&\n                    'lat' in current &&\n                    'lon' in current &&\n                    typeof current.lat === 'number' &&\n                    typeof current.lon === 'number') {\n                    current = properties[path] = current;\n                    break;\n                }\n                else if (!Array.isArray(current) && current !== null && j === pathTokensLength - 1) {\n                    current = undefined;\n                    break;\n                }\n            }\n            else if ((current === null || typeof current !== 'object') && j < pathTokensLength - 1) {\n                // We can't recurse anymore but we were supposed to\n                current = undefined;\n                break;\n            }\n        }\n        if (typeof current !== 'undefined') {\n            properties[path] = current;\n        }\n    }\n    return properties;\n}\nexport function getNested(obj, path) {\n    const props = getDocumentProperties(obj, [path]);\n    return props[path];\n}\nexport function flattenObject(obj, prefix = '') {\n    const result = {};\n    for (const key in obj) {\n        const prop = `${prefix}${key}`;\n        const objKey = obj[key];\n        if (typeof objKey === 'object' && objKey !== null) {\n            Object.assign(result, flattenObject(objKey, `${prop}.`));\n        }\n        else {\n            result[prop] = objKey;\n        }\n    }\n    return result;\n}\nconst mapDistanceToMeters = {\n    cm: 0.01,\n    m: 1,\n    km: 1000,\n    ft: 0.3048,\n    yd: 0.9144,\n    mi: 1609.344\n};\nexport function convertDistanceToMeters(distance, unit) {\n    const ratio = mapDistanceToMeters[unit];\n    if (ratio === undefined) {\n        throw new Error(createError('INVALID_DISTANCE_SUFFIX', distance).message);\n    }\n    return distance * ratio;\n}\nexport function removeVectorsFromHits(searchResult, vectorProperties) {\n    searchResult.hits = searchResult.hits.map((result) => ({\n        ...result,\n        document: {\n            ...result.document,\n            // Remove embeddings from the result\n            ...vectorProperties.reduce((acc, prop) => {\n                const path = prop.split('.');\n                const lastKey = path.pop();\n                let obj = acc;\n                for (const key of path) {\n                    obj[key] = obj[key] ?? {};\n                    obj = obj[key];\n                }\n                obj[lastKey] = null;\n                return acc;\n            }, result.document)\n        }\n    }));\n}\nexport function isPromise(obj) {\n    return !!obj && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function';\n}\n/**\n * Checks if the provided input is an async function or if the input is an array\n * containing at least one async function.\n *\n * @param func - A single function or an array of functions to check.\n *               Non-function values are ignored.\n * @returns `true` if the input is an async function or an array containing at least\n *          one async function, otherwise `false`.\n */\nexport function isAsyncFunction(func) {\n    if (Array.isArray(func)) {\n        return func.some((item) => isAsyncFunction(item));\n    }\n    return func?.constructor?.name === 'AsyncFunction';\n}\nconst withIntersection = 'intersection' in new Set();\nexport function setIntersection(...sets) {\n    // Fast path 1\n    if (sets.length === 0) {\n        return new Set();\n    }\n    // Fast path 2\n    if (sets.length === 1) {\n        return sets[0];\n    }\n    // Fast path 3\n    if (sets.length === 2) {\n        const set1 = sets[0];\n        const set2 = sets[1];\n        if (withIntersection) {\n            return set1.intersection(set2);\n        }\n        const result = new Set();\n        const base = set1.size < set2.size ? set1 : set2;\n        const other = base === set1 ? set2 : set1;\n        for (const value of base) {\n            if (other.has(value)) {\n                result.add(value);\n            }\n        }\n        return result;\n    }\n    // Slow path\n    // Find the smallest set\n    const min = {\n        index: 0,\n        size: sets[0].size\n    };\n    for (let i = 1; i < sets.length; i++) {\n        if (sets[i].size < min.size) {\n            min.index = i;\n            min.size = sets[i].size;\n        }\n    }\n    if (withIntersection) {\n        let base = sets[min.index];\n        for (let i = 0; i < sets.length; i++) {\n            if (i === min.index) {\n                continue;\n            }\n            base = base.intersection(sets[i]);\n        }\n        return base;\n    }\n    // manual implementation:\n    // intersect all sets with the smallest set\n    const base = sets[min.index];\n    for (let i = 0; i < sets.length; i++) {\n        if (i === min.index) {\n            continue;\n        }\n        const other = sets[i];\n        for (const value of base) {\n            if (!other.has(value)) {\n                base.delete(value);\n            }\n        }\n    }\n    return base;\n}\nconst withUnion = 'union' in new Set();\nexport function setUnion(set1, set2) {\n    if (withUnion) {\n        if (set1) {\n            return set1.union(set2);\n        }\n        return set2;\n    }\n    if (!set1) {\n        return new Set(set2);\n    }\n    return new Set([...set1, ...set2]);\n}\nexport function setDifference(set1, set2) {\n    const result = new Set();\n    for (const value of set1) {\n        if (!set2.has(value)) {\n            result.add(value);\n        }\n    }\n    return result;\n}\n// This code is taken from https://github.com/davidmarkclements/atomic-sleep, MIT licensed at the time of commit b8149d3ca276c84a54fa8fa1478f9cc79aabc15a.\n// All credits go to the original author (David Mark Clements, https://github.com/davidmarkclements).\nexport function sleep(ms) {\n    if (typeof SharedArrayBuffer !== 'undefined' && typeof Atomics !== 'undefined') {\n        const nil = new Int32Array(new SharedArrayBuffer(4));\n        const valid = ms > 0 && ms < Infinity;\n        if (valid === false) {\n            if (typeof ms !== 'number' && typeof ms !== 'bigint') {\n                throw TypeError('sleep: ms must be a number');\n            }\n            throw RangeError('sleep: ms must be a number that is greater than 0 but less than Infinity');\n        }\n        Atomics.wait(nil, 0, 0, Number(ms));\n    }\n    else {\n        const valid = ms > 0 && ms < Infinity;\n        if (valid === false) {\n            if (typeof ms !== 'number' && typeof ms !== 'bigint') {\n                throw TypeError('sleep: ms must be a number');\n            }\n            throw RangeError('sleep: ms must be a number that is greater than 0 but less than Infinity');\n        }\n        const target = Date.now() + Number(ms);\n        while (target > Date.now()) {\n            /* empty */\n        }\n    }\n}\n//# sourceMappingURL=utils.js.map","import { SUPPORTED_LANGUAGES } from './components/tokenizer/languages.js';\nimport { sprintf } from './utils.js';\nconst allLanguages = SUPPORTED_LANGUAGES.join('\\n - ');\nconst errors = {\n    NO_LANGUAGE_WITH_CUSTOM_TOKENIZER: 'Do not pass the language option to create when using a custom tokenizer.',\n    LANGUAGE_NOT_SUPPORTED: `Language \"%s\" is not supported.\\nSupported languages are:\\n - ${allLanguages}`,\n    INVALID_STEMMER_FUNCTION_TYPE: `config.stemmer property must be a function.`,\n    MISSING_STEMMER: `As of version 1.0.0 @orama/orama does not ship non English stemmers by default. To solve this, please explicitly import and specify the \"%s\" stemmer from the package @orama/stemmers. See https://docs.orama.com/docs/orama-js/text-analysis/stemming for more information.`,\n    CUSTOM_STOP_WORDS_MUST_BE_FUNCTION_OR_ARRAY: 'Custom stop words array must only contain strings.',\n    UNSUPPORTED_COMPONENT: `Unsupported component \"%s\".`,\n    COMPONENT_MUST_BE_FUNCTION: `The component \"%s\" must be a function.`,\n    COMPONENT_MUST_BE_FUNCTION_OR_ARRAY_FUNCTIONS: `The component \"%s\" must be a function or an array of functions.`,\n    INVALID_SCHEMA_TYPE: `Unsupported schema type \"%s\" at \"%s\". Expected \"string\", \"boolean\" or \"number\" or array of them.`,\n    DOCUMENT_ID_MUST_BE_STRING: `Document id must be of type \"string\". Got \"%s\" instead.`,\n    DOCUMENT_ALREADY_EXISTS: `A document with id \"%s\" already exists.`,\n    DOCUMENT_DOES_NOT_EXIST: `A document with id \"%s\" does not exists.`,\n    MISSING_DOCUMENT_PROPERTY: `Missing searchable property \"%s\".`,\n    INVALID_DOCUMENT_PROPERTY: `Invalid document property \"%s\": expected \"%s\", got \"%s\"`,\n    UNKNOWN_INDEX: `Invalid property name \"%s\". Expected a wildcard string (\"*\") or array containing one of the following properties: %s`,\n    INVALID_BOOST_VALUE: `Boost value must be a number greater than, or less than 0.`,\n    INVALID_FILTER_OPERATION: `You can only use one operation per filter, you requested %d.`,\n    SCHEMA_VALIDATION_FAILURE: `Cannot insert document due schema validation failure on \"%s\" property.`,\n    INVALID_SORT_SCHEMA_TYPE: `Unsupported sort schema type \"%s\" at \"%s\". Expected \"string\" or \"number\".`,\n    CANNOT_SORT_BY_ARRAY: `Cannot configure sort for \"%s\" because it is an array (%s).`,\n    UNABLE_TO_SORT_ON_UNKNOWN_FIELD: `Unable to sort on unknown field \"%s\". Allowed fields: %s`,\n    SORT_DISABLED: `Sort is disabled. Please read the documentation at https://docs.orama.com/docs/orama-js for more information.`,\n    UNKNOWN_GROUP_BY_PROPERTY: `Unknown groupBy property \"%s\".`,\n    INVALID_GROUP_BY_PROPERTY: `Invalid groupBy property \"%s\". Allowed types: \"%s\", but given \"%s\".`,\n    UNKNOWN_FILTER_PROPERTY: `Unknown filter property \"%s\".`,\n    UNKNOWN_VECTOR_PROPERTY: `Unknown vector property \"%s\". Make sure the property exists in the schema and is configured as a vector.`,\n    INVALID_VECTOR_SIZE: `Vector size must be a number greater than 0. Got \"%s\" instead.`,\n    INVALID_VECTOR_VALUE: `Vector value must be a number greater than 0. Got \"%s\" instead.`,\n    INVALID_INPUT_VECTOR: `Property \"%s\" was declared as a %s-dimensional vector, but got a %s-dimensional vector instead.\\nInput vectors must be of the size declared in the schema, as calculating similarity between vectors of different sizes can lead to unexpected results.`,\n    WRONG_SEARCH_PROPERTY_TYPE: `Property \"%s\" is not searchable. Only \"string\" properties are searchable.`,\n    FACET_NOT_SUPPORTED: `Facet doens't support the type \"%s\".`,\n    INVALID_DISTANCE_SUFFIX: `Invalid distance suffix \"%s\". Valid suffixes are: cm, m, km, mi, yd, ft.`,\n    INVALID_SEARCH_MODE: `Invalid search mode \"%s\". Valid modes are: \"fulltext\", \"vector\", \"hybrid\".`,\n    MISSING_VECTOR_AND_SECURE_PROXY: `No vector was provided and no secure proxy was configured. Please provide a vector or configure an Orama Secure Proxy to perform hybrid search.`,\n    MISSING_TERM: `\"term\" is a required parameter when performing hybrid search. Please provide a search term.`,\n    INVALID_VECTOR_INPUT: `Invalid \"vector\" property. Expected an object with \"value\" and \"property\" properties, but got \"%s\" instead.`,\n    PLUGIN_CRASHED: `A plugin crashed during initialization. Please check the error message for more information:`,\n    PLUGIN_SECURE_PROXY_NOT_FOUND: `Could not find '@orama/secure-proxy-plugin' installed in your Orama instance.\\nPlease install it before proceeding with creating an answer session.\\nRead more at https://docs.orama.com/docs/orama-js/plugins/plugin-secure-proxy#plugin-secure-proxy\\n`,\n    PLUGIN_SECURE_PROXY_MISSING_CHAT_MODEL: `Could not find a chat model defined in the secure proxy plugin configuration.\\nPlease provide a chat model before proceeding with creating an answer session.\\nRead more at https://docs.orama.com/docs/orama-js/plugins/plugin-secure-proxy#plugin-secure-proxy\\n`,\n    ANSWER_SESSION_LAST_MESSAGE_IS_NOT_ASSISTANT: `The last message in the session is not an assistant message. Cannot regenerate non-assistant messages.`,\n    PLUGIN_COMPONENT_CONFLICT: `The component \"%s\" is already defined. The plugin \"%s\" is trying to redefine it.`\n};\nexport function createError(code, ...args) {\n    const error = new Error(sprintf(errors[code] ?? `Unsupported Orama Error code: ${code}`, ...args));\n    error.code = code;\n    if ('captureStackTrace' in Error.prototype) {\n        Error.captureStackTrace(error);\n    }\n    return error;\n}\n//# sourceMappingURL=errors.js.map","import { createError } from '../errors.js';\nimport { formatNanoseconds, uniqueId } from '../utils.js';\nexport { getDocumentProperties } from '../utils.js';\nexport function formatElapsedTime(n) {\n    return {\n        raw: Number(n),\n        formatted: formatNanoseconds(n)\n    };\n}\nexport function getDocumentIndexId(doc) {\n    if (doc.id) {\n        if (typeof doc.id !== 'string') {\n            throw createError('DOCUMENT_ID_MUST_BE_STRING', typeof doc.id);\n        }\n        return doc.id;\n    }\n    return uniqueId();\n}\nexport function validateSchema(doc, schema) {\n    for (const [prop, type] of Object.entries(schema)) {\n        const value = doc[prop];\n        if (typeof value === 'undefined') {\n            continue;\n        }\n        if (type === 'geopoint' &&\n            typeof value === 'object' &&\n            typeof value.lon === 'number' &&\n            typeof value.lat === 'number') {\n            continue;\n        }\n        if (type === 'enum' && (typeof value === 'string' || typeof value === 'number')) {\n            continue;\n        }\n        if (type === 'enum[]' && Array.isArray(value)) {\n            const valueLength = value.length;\n            for (let i = 0; i < valueLength; i++) {\n                if (typeof value[i] !== 'string' && typeof value[i] !== 'number') {\n                    return prop + '.' + i;\n                }\n            }\n            continue;\n        }\n        if (isVectorType(type)) {\n            const vectorSize = getVectorSize(type);\n            if (!Array.isArray(value) || value.length !== vectorSize) {\n                throw createError('INVALID_INPUT_VECTOR', prop, vectorSize, value.length);\n            }\n            continue;\n        }\n        if (isArrayType(type)) {\n            if (!Array.isArray(value)) {\n                return prop;\n            }\n            const expectedType = getInnerType(type);\n            const valueLength = value.length;\n            for (let i = 0; i < valueLength; i++) {\n                if (typeof value[i] !== expectedType) {\n                    return prop + '.' + i;\n                }\n            }\n            continue;\n        }\n        if (typeof type === 'object') {\n            if (!value || typeof value !== 'object') {\n                return prop;\n            }\n            // using as ResultDocument is not exactly right but trying to be type-safe here is not useful\n            const subProp = validateSchema(value, type);\n            if (subProp) {\n                return prop + '.' + subProp;\n            }\n            continue;\n        }\n        if (typeof value !== type) {\n            return prop;\n        }\n    }\n    return undefined;\n}\nconst IS_ARRAY_TYPE = {\n    string: false,\n    number: false,\n    boolean: false,\n    enum: false,\n    geopoint: false,\n    'string[]': true,\n    'number[]': true,\n    'boolean[]': true,\n    'enum[]': true\n};\nconst INNER_TYPE = {\n    'string[]': 'string',\n    'number[]': 'number',\n    'boolean[]': 'boolean',\n    'enum[]': 'enum'\n};\nexport function isGeoPointType(type) {\n    return type === 'geopoint';\n}\nexport function isVectorType(type) {\n    return typeof type === 'string' && /^vector\\[\\d+\\]$/.test(type);\n}\nexport function isArrayType(type) {\n    return typeof type === 'string' && IS_ARRAY_TYPE[type];\n}\nexport function getInnerType(type) {\n    return INNER_TYPE[type];\n}\nexport function getVectorSize(type) {\n    const size = Number(type.slice(7, -1));\n    switch (true) {\n        case isNaN(size):\n            throw createError('INVALID_VECTOR_VALUE', type);\n        case size <= 0:\n            throw createError('INVALID_VECTOR_SIZE', type);\n        default:\n            return size;\n    }\n}\n//# sourceMappingURL=defaults.js.map","export function createInternalDocumentIDStore() {\n    return {\n        idToInternalId: new Map(),\n        internalIdToId: [],\n        save,\n        load\n    };\n}\nexport function save(store) {\n    return {\n        internalIdToId: store.internalIdToId\n    };\n}\nexport function load(orama, raw) {\n    const { internalIdToId } = raw;\n    orama.internalDocumentIDStore.idToInternalId.clear();\n    orama.internalDocumentIDStore.internalIdToId = [];\n    const internalIdToIdLength = internalIdToId.length;\n    for (let i = 0; i < internalIdToIdLength; i++) {\n        const internalIdItem = internalIdToId[i];\n        orama.internalDocumentIDStore.idToInternalId.set(internalIdItem, i + 1);\n        orama.internalDocumentIDStore.internalIdToId.push(internalIdItem);\n    }\n}\nexport function getInternalDocumentId(store, id) {\n    if (typeof id === 'string') {\n        const internalId = store.idToInternalId.get(id);\n        if (internalId) {\n            return internalId;\n        }\n        const currentId = store.idToInternalId.size + 1;\n        store.idToInternalId.set(id, currentId);\n        store.internalIdToId.push(id);\n        return currentId;\n    }\n    if (id > store.internalIdToId.length) {\n        return getInternalDocumentId(store, id.toString());\n    }\n    return id;\n}\nexport function getDocumentIdFromInternalId(store, internalId) {\n    if (store.internalIdToId.length < internalId) {\n        throw new Error(`Invalid internalId ${internalId}`);\n    }\n    return store.internalIdToId[internalId - 1];\n}\n//# sourceMappingURL=internal-document-id-store.js.map","import { getInternalDocumentId } from './internal-document-id-store.js';\nexport function create(_, sharedInternalDocumentStore) {\n    return {\n        sharedInternalDocumentStore,\n        docs: {},\n        count: 0\n    };\n}\nexport function get(store, id) {\n    const internalId = getInternalDocumentId(store.sharedInternalDocumentStore, id);\n    return store.docs[internalId];\n}\nexport function getMultiple(store, ids) {\n    const idsLength = ids.length;\n    const found = Array.from({ length: idsLength });\n    for (let i = 0; i < idsLength; i++) {\n        const internalId = getInternalDocumentId(store.sharedInternalDocumentStore, ids[i]);\n        found[i] = store.docs[internalId];\n    }\n    return found;\n}\nexport function getAll(store) {\n    return store.docs;\n}\nexport function store(store, id, internalId, doc) {\n    if (typeof store.docs[internalId] !== 'undefined') {\n        return false;\n    }\n    store.docs[internalId] = doc;\n    store.count++;\n    return true;\n}\nexport function remove(store, id) {\n    const internalId = getInternalDocumentId(store.sharedInternalDocumentStore, id);\n    if (typeof store.docs[internalId] === 'undefined') {\n        return false;\n    }\n    delete store.docs[internalId];\n    store.count--;\n    return true;\n}\nexport function count(store) {\n    return store.count;\n}\nexport function load(sharedInternalDocumentStore, raw) {\n    const rawDocument = raw;\n    return {\n        docs: rawDocument.docs,\n        count: rawDocument.count,\n        sharedInternalDocumentStore\n    };\n}\nexport function save(store) {\n    return {\n        docs: store.docs,\n        count: store.count\n    };\n}\nexport function createDocumentsStore() {\n    return {\n        create,\n        get,\n        getMultiple,\n        getAll,\n        store,\n        remove,\n        count,\n        load,\n        save\n    };\n}\n//# sourceMappingURL=documents-store.js.map","import { createError } from '../errors.js';\nexport const AVAILABLE_PLUGIN_HOOKS = [\n    'beforeInsert',\n    'afterInsert',\n    'beforeRemove',\n    'afterRemove',\n    'beforeUpdate',\n    'afterUpdate',\n    'beforeUpsert',\n    'afterUpsert',\n    'beforeSearch',\n    'afterSearch',\n    'beforeInsertMultiple',\n    'afterInsertMultiple',\n    'beforeRemoveMultiple',\n    'afterRemoveMultiple',\n    'beforeUpdateMultiple',\n    'afterUpdateMultiple',\n    'beforeUpsertMultiple',\n    'afterUpsertMultiple',\n    'beforeLoad',\n    'afterLoad',\n    'afterCreate'\n];\nexport function getAllPluginsByHook(orama, hook) {\n    const pluginsToRun = [];\n    const pluginsLength = orama.plugins?.length;\n    if (!pluginsLength) {\n        return pluginsToRun;\n    }\n    for (let i = 0; i < pluginsLength; i++) {\n        try {\n            const plugin = orama.plugins[i];\n            if (typeof plugin[hook] === 'function') {\n                pluginsToRun.push(plugin[hook]);\n            }\n        }\n        catch (error) {\n            console.error('Caught error in getAllPluginsByHook:', error);\n            throw createError('PLUGIN_CRASHED');\n        }\n    }\n    return pluginsToRun;\n}\n//# sourceMappingURL=plugins.js.map","import { isAsyncFunction } from '../utils.js';\nexport const OBJECT_COMPONENTS = ['tokenizer', 'index', 'documentsStore', 'sorter', 'pinning'];\nexport const FUNCTION_COMPONENTS = [\n    'validateSchema',\n    'getDocumentIndexId',\n    'getDocumentProperties',\n    'formatElapsedTime'\n];\nexport const SINGLE_OR_ARRAY_COMPONENTS = [\n/* deprecated with v2.0.0-beta.5 */\n];\nexport function runSingleHook(hooks, orama, id, doc) {\n    const needAsync = hooks.some(isAsyncFunction);\n    if (needAsync) {\n        return (async () => {\n            for (const hook of hooks) {\n                await hook(orama, id, doc);\n            }\n        })();\n    }\n    else {\n        for (const hook of hooks) {\n            hook(orama, id, doc);\n        }\n    }\n}\nexport function runMultipleHook(hooks, orama, docsOrIds) {\n    const needAsync = hooks.some(isAsyncFunction);\n    if (needAsync) {\n        return (async () => {\n            for (const hook of hooks) {\n                await hook(orama, docsOrIds);\n            }\n        })();\n    }\n    else {\n        for (const hook of hooks) {\n            hook(orama, docsOrIds);\n        }\n    }\n}\nexport function runAfterSearch(hooks, db, params, language, results) {\n    const needAsync = hooks.some(isAsyncFunction);\n    if (needAsync) {\n        return (async () => {\n            for (const hook of hooks) {\n                await hook(db, params, language, results);\n            }\n        })();\n    }\n    else {\n        for (const hook of hooks) {\n            hook(db, params, language, results);\n        }\n    }\n}\nexport function runBeforeSearch(hooks, db, params, language) {\n    const needAsync = hooks.some(isAsyncFunction);\n    if (needAsync) {\n        return (async () => {\n            for (const hook of hooks) {\n                await hook(db, params, language);\n            }\n        })();\n    }\n    else {\n        for (const hook of hooks) {\n            hook(db, params, language);\n        }\n    }\n}\nexport function runAfterCreate(hooks, db) {\n    const needAsync = hooks.some(isAsyncFunction);\n    if (needAsync) {\n        return (async () => {\n            for (const hook of hooks) {\n                await hook(db);\n            }\n        })();\n    }\n    else {\n        for (const hook of hooks) {\n            hook(db);\n        }\n    }\n}\n//# sourceMappingURL=hooks.js.map","export class AVLNode {\n    k;\n    v;\n    l = null;\n    r = null;\n    h = 1;\n    constructor(key, value) {\n        this.k = key;\n        this.v = new Set(value);\n    }\n    updateHeight() {\n        this.h = Math.max(AVLNode.getHeight(this.l), AVLNode.getHeight(this.r)) + 1;\n    }\n    static getHeight(node) {\n        return node ? node.h : 0;\n    }\n    getBalanceFactor() {\n        return AVLNode.getHeight(this.l) - AVLNode.getHeight(this.r);\n    }\n    rotateLeft() {\n        const newRoot = this.r;\n        this.r = newRoot.l;\n        newRoot.l = this;\n        this.updateHeight();\n        newRoot.updateHeight();\n        return newRoot;\n    }\n    rotateRight() {\n        const newRoot = this.l;\n        this.l = newRoot.r;\n        newRoot.r = this;\n        this.updateHeight();\n        newRoot.updateHeight();\n        return newRoot;\n    }\n    toJSON() {\n        return {\n            k: this.k,\n            v: Array.from(this.v),\n            l: this.l ? this.l.toJSON() : null,\n            r: this.r ? this.r.toJSON() : null,\n            h: this.h\n        };\n    }\n    static fromJSON(json) {\n        const node = new AVLNode(json.k, json.v);\n        node.l = json.l ? AVLNode.fromJSON(json.l) : null;\n        node.r = json.r ? AVLNode.fromJSON(json.r) : null;\n        node.h = json.h;\n        return node;\n    }\n}\nexport class AVLTree {\n    root = null;\n    insertCount = 0;\n    constructor(key, value) {\n        if (key !== undefined && value !== undefined) {\n            this.root = new AVLNode(key, value);\n        }\n    }\n    insert(key, value, rebalanceThreshold = 1000) {\n        this.root = this.insertNode(this.root, key, value, rebalanceThreshold);\n    }\n    insertMultiple(key, value, rebalanceThreshold = 1000) {\n        for (const v of value) {\n            this.insert(key, v, rebalanceThreshold);\n        }\n    }\n    // Rebalance the tree if the insert count reaches the threshold.\n    // This will improve insertion performance since we won't be rebalancing the tree on every insert.\n    // When inserting docs using `insertMultiple`, the threshold will be set to the number of docs being inserted.\n    // We can force rebalancing the tree by setting the threshold to 1 (default).\n    rebalance() {\n        if (this.root) {\n            this.root = this.rebalanceNode(this.root);\n        }\n    }\n    toJSON() {\n        return {\n            root: this.root ? this.root.toJSON() : null,\n            insertCount: this.insertCount\n        };\n    }\n    static fromJSON(json) {\n        const tree = new AVLTree();\n        tree.root = json.root ? AVLNode.fromJSON(json.root) : null;\n        tree.insertCount = json.insertCount || 0;\n        return tree;\n    }\n    insertNode(node, key, value, rebalanceThreshold) {\n        if (node === null) {\n            return new AVLNode(key, [value]);\n        }\n        const path = [];\n        let current = node;\n        let parent = null;\n        while (current !== null) {\n            path.push({ parent, node: current });\n            if (key < current.k) {\n                if (current.l === null) {\n                    current.l = new AVLNode(key, [value]);\n                    path.push({ parent: current, node: current.l });\n                    break;\n                }\n                else {\n                    parent = current;\n                    current = current.l;\n                }\n            }\n            else if (key > current.k) {\n                if (current.r === null) {\n                    current.r = new AVLNode(key, [value]);\n                    path.push({ parent: current, node: current.r });\n                    break;\n                }\n                else {\n                    parent = current;\n                    current = current.r;\n                }\n            }\n            else {\n                // Key already exists\n                current.v.add(value);\n                /*\n                if (Array.isArray(current.v)) {\n                  if (Array.isArray(value)) {\n                    ;(current.v as any[]).push(...(value as V[]))\n                  } else {\n                    ;(current.v as any[]).push(value)\n                  }\n                } else {\n                  current.v = new Set([value])\n                }\n                */\n                return node;\n            }\n        }\n        // Update heights and rebalance if necessary\n        let needRebalance = false;\n        if (this.insertCount++ % rebalanceThreshold === 0) {\n            needRebalance = true;\n        }\n        for (let i = path.length - 1; i >= 0; i--) {\n            const { parent, node: currentNode } = path[i];\n            currentNode.updateHeight();\n            if (needRebalance) {\n                const rebalancedNode = this.rebalanceNode(currentNode);\n                if (parent) {\n                    if (parent.l === currentNode) {\n                        parent.l = rebalancedNode;\n                    }\n                    else if (parent.r === currentNode) {\n                        parent.r = rebalancedNode;\n                    }\n                }\n                else {\n                    // This is the root node\n                    node = rebalancedNode;\n                }\n            }\n        }\n        return node;\n    }\n    rebalanceNode(node) {\n        const balanceFactor = node.getBalanceFactor();\n        if (balanceFactor > 1) {\n            // Left heavy\n            if (node.l && node.l.getBalanceFactor() >= 0) {\n                // Left Left Case\n                return node.rotateRight();\n            }\n            else if (node.l) {\n                // Left Right Case\n                node.l = node.l.rotateLeft();\n                return node.rotateRight();\n            }\n        }\n        if (balanceFactor < -1) {\n            // Right heavy\n            if (node.r && node.r.getBalanceFactor() <= 0) {\n                // Right Right Case\n                return node.rotateLeft();\n            }\n            else if (node.r) {\n                // Right Left Case\n                node.r = node.r.rotateRight();\n                return node.rotateLeft();\n            }\n        }\n        return node;\n    }\n    find(key) {\n        const node = this.findNodeByKey(key);\n        return node ? node.v : null;\n    }\n    contains(key) {\n        return this.find(key) !== null;\n    }\n    getSize() {\n        let count = 0;\n        const stack = [];\n        let current = this.root;\n        while (current || stack.length > 0) {\n            while (current) {\n                stack.push(current);\n                current = current.l;\n            }\n            current = stack.pop();\n            count++;\n            current = current.r;\n        }\n        return count;\n    }\n    isBalanced() {\n        if (!this.root)\n            return true;\n        const stack = [this.root];\n        while (stack.length > 0) {\n            const node = stack.pop();\n            const balanceFactor = node.getBalanceFactor();\n            if (Math.abs(balanceFactor) > 1) {\n                return false;\n            }\n            if (node.l)\n                stack.push(node.l);\n            if (node.r)\n                stack.push(node.r);\n        }\n        return true;\n    }\n    remove(key) {\n        this.root = this.removeNode(this.root, key);\n    }\n    removeDocument(key, id) {\n        const node = this.findNodeByKey(key);\n        if (!node) {\n            return;\n        }\n        if (node.v.size === 1) {\n            this.root = this.removeNode(this.root, key);\n        }\n        else {\n            node.v = new Set([...node.v.values()].filter((v) => v !== id));\n        }\n    }\n    findNodeByKey(key) {\n        let node = this.root;\n        while (node) {\n            if (key < node.k) {\n                node = node.l;\n            }\n            else if (key > node.k) {\n                node = node.r;\n            }\n            else {\n                return node;\n            }\n        }\n        return null;\n    }\n    removeNode(node, key) {\n        if (node === null)\n            return null;\n        const path = [];\n        let current = node;\n        while (current !== null && current.k !== key) {\n            path.push(current);\n            if (key < current.k) {\n                current = current.l;\n            }\n            else {\n                current = current.r;\n            }\n        }\n        if (current === null) {\n            // Key not found\n            return node;\n        }\n        // Node with only one child or no child\n        if (current.l === null || current.r === null) {\n            const child = current.l ? current.l : current.r;\n            if (path.length === 0) {\n                // Node to be deleted is root\n                node = child;\n            }\n            else {\n                const parent = path[path.length - 1];\n                if (parent.l === current) {\n                    parent.l = child;\n                }\n                else {\n                    parent.r = child;\n                }\n            }\n        }\n        else {\n            // Node with two children: Get the inorder successor\n            let successorParent = current;\n            let successor = current.r;\n            while (successor.l !== null) {\n                successorParent = successor;\n                successor = successor.l;\n            }\n            // Copy the successor's content to current node\n            current.k = successor.k;\n            current.v = successor.v;\n            // Delete the successor\n            if (successorParent.l === successor) {\n                successorParent.l = successor.r;\n            }\n            else {\n                successorParent.r = successor.r;\n            }\n            current = successorParent;\n        }\n        // Update heights and rebalance\n        path.push(current);\n        for (let i = path.length - 1; i >= 0; i--) {\n            const currentNode = path[i];\n            currentNode.updateHeight();\n            const rebalancedNode = this.rebalanceNode(currentNode);\n            if (i > 0) {\n                const parent = path[i - 1];\n                if (parent.l === currentNode) {\n                    parent.l = rebalancedNode;\n                }\n                else if (parent.r === currentNode) {\n                    parent.r = rebalancedNode;\n                }\n            }\n            else {\n                // Root node\n                node = rebalancedNode;\n            }\n        }\n        return node;\n    }\n    rangeSearch(min, max) {\n        const result = new Set();\n        const stack = [];\n        let current = this.root;\n        while (current || stack.length > 0) {\n            while (current) {\n                stack.push(current);\n                current = current.l;\n            }\n            current = stack.pop();\n            if (current.k >= min && current.k <= max) {\n                for (const value of current.v) {\n                    result.add(value);\n                }\n            }\n            if (current.k > max) {\n                break;\n            }\n            current = current.r;\n        }\n        return result;\n    }\n    greaterThan(key, inclusive = false) {\n        const result = new Set();\n        const stack = [];\n        let current = this.root;\n        while (current || stack.length > 0) {\n            while (current) {\n                stack.push(current);\n                current = current.r; // Traverse right subtree first\n            }\n            current = stack.pop();\n            if ((inclusive && current.k >= key) || (!inclusive && current.k > key)) {\n                for (const value of current.v) {\n                    result.add(value);\n                }\n            }\n            else if (current.k <= key) {\n                break; // Since we're traversing in descending order, we can break early\n            }\n            current = current.l;\n        }\n        return result;\n    }\n    lessThan(key, inclusive = false) {\n        const result = new Set();\n        const stack = [];\n        let current = this.root;\n        while (current || stack.length > 0) {\n            while (current) {\n                stack.push(current);\n                current = current.l;\n            }\n            current = stack.pop();\n            if ((inclusive && current.k <= key) || (!inclusive && current.k < key)) {\n                for (const value of current.v) {\n                    result.add(value);\n                }\n            }\n            else if (current.k > key) {\n                break; // Since we're traversing in ascending order, we can break early\n            }\n            current = current.r;\n        }\n        return result;\n    }\n}\n//# sourceMappingURL=avl.js.map","export class FlatTree {\n    numberToDocumentId;\n    constructor() {\n        this.numberToDocumentId = new Map();\n    }\n    insert(key, value) {\n        if (this.numberToDocumentId.has(key)) {\n            this.numberToDocumentId.get(key).add(value);\n        }\n        else {\n            this.numberToDocumentId.set(key, new Set([value]));\n        }\n    }\n    find(key) {\n        const idSet = this.numberToDocumentId.get(key);\n        return idSet ? Array.from(idSet) : null;\n    }\n    remove(key) {\n        this.numberToDocumentId.delete(key);\n    }\n    removeDocument(id, key) {\n        const idSet = this.numberToDocumentId.get(key);\n        if (idSet) {\n            idSet.delete(id);\n            if (idSet.size === 0) {\n                this.numberToDocumentId.delete(key);\n            }\n        }\n    }\n    contains(key) {\n        return this.numberToDocumentId.has(key);\n    }\n    getSize() {\n        let size = 0;\n        for (const idSet of this.numberToDocumentId.values()) {\n            size += idSet.size;\n        }\n        return size;\n    }\n    filter(operation) {\n        const operationKeys = Object.keys(operation);\n        if (operationKeys.length !== 1) {\n            throw new Error('Invalid operation');\n        }\n        const operationType = operationKeys[0];\n        switch (operationType) {\n            case 'eq': {\n                const value = operation[operationType];\n                const idSet = this.numberToDocumentId.get(value);\n                return idSet ? Array.from(idSet) : [];\n            }\n            case 'in': {\n                const values = operation[operationType];\n                const resultSet = new Set();\n                for (const value of values) {\n                    const idSet = this.numberToDocumentId.get(value);\n                    if (idSet) {\n                        for (const id of idSet) {\n                            resultSet.add(id);\n                        }\n                    }\n                }\n                return Array.from(resultSet);\n            }\n            case 'nin': {\n                const excludeValues = new Set(operation[operationType]);\n                const resultSet = new Set();\n                for (const [key, idSet] of this.numberToDocumentId.entries()) {\n                    if (!excludeValues.has(key)) {\n                        for (const id of idSet) {\n                            resultSet.add(id);\n                        }\n                    }\n                }\n                return Array.from(resultSet);\n            }\n            default:\n                throw new Error('Invalid operation');\n        }\n    }\n    filterArr(operation) {\n        const operationKeys = Object.keys(operation);\n        if (operationKeys.length !== 1) {\n            throw new Error('Invalid operation');\n        }\n        const operationType = operationKeys[0];\n        switch (operationType) {\n            case 'containsAll': {\n                const values = operation[operationType];\n                const idSets = values.map((value) => this.numberToDocumentId.get(value) ?? new Set());\n                if (idSets.length === 0)\n                    return [];\n                const intersection = idSets.reduce((prev, curr) => {\n                    return new Set([...prev].filter((id) => curr.has(id)));\n                });\n                return Array.from(intersection);\n            }\n            case 'containsAny': {\n                const values = operation[operationType];\n                const idSets = values.map((value) => this.numberToDocumentId.get(value) ?? new Set());\n                if (idSets.length === 0)\n                    return [];\n                const union = idSets.reduce((prev, curr) => {\n                    return new Set([...prev, ...curr]);\n                });\n                return Array.from(union);\n            }\n            default:\n                throw new Error('Invalid operation');\n        }\n    }\n    static fromJSON(json) {\n        if (!json.numberToDocumentId) {\n            throw new Error('Invalid Flat Tree JSON');\n        }\n        const tree = new FlatTree();\n        for (const [key, ids] of json.numberToDocumentId) {\n            tree.numberToDocumentId.set(key, new Set(ids));\n        }\n        return tree;\n    }\n    toJSON() {\n        return {\n            numberToDocumentId: Array.from(this.numberToDocumentId.entries()).map(([key, idSet]) => [key, Array.from(idSet)])\n        };\n    }\n}\n//# sourceMappingURL=flat.js.map","/**\n * Inspired by:\n * https://github.com/Yomguithereal/talisman/blob/86ae55cbd040ff021d05e282e0e6c71f2dde21f8/src/metrics/levenshtein.js#L218-L340\n */\nfunction _boundedLevenshtein(term, word, tolerance) {\n    // Handle base cases\n    if (tolerance < 0)\n        return -1;\n    if (term === word)\n        return 0;\n    const m = term.length;\n    const n = word.length;\n    // Special case for empty strings\n    if (m === 0)\n        return n <= tolerance ? n : -1;\n    if (n === 0)\n        return m <= tolerance ? m : -1;\n    // term = term.toLowerCase()\n    // word = word.toLowerCase()\n    const diff = Math.abs(m - n);\n    // Special case for prefixes\n    // If the searching word starts with the indexed word, return early.\n    if (term.startsWith(word)) {\n        // We just check if the remaining characters are within the tolerance\n        return diff <= tolerance ? diff : -1;\n    }\n    // If the indexed word starts with the searching word, return early.\n    if (word.startsWith(term)) {\n        // any prefixed word is within the tolerance\n        return 0;\n    }\n    // If the length difference is greater than the tolerance, return early\n    if (diff > tolerance)\n        return -1;\n    // Initialize the matrix\n    const matrix = [];\n    for (let i = 0; i <= m; i++) {\n        matrix[i] = [i];\n        for (let j = 1; j <= n; j++) {\n            matrix[i][j] = i === 0 ? j : 0;\n        }\n    }\n    // Fill the matrix\n    for (let i = 1; i <= m; i++) {\n        let rowMin = Infinity;\n        for (let j = 1; j <= n; j++) {\n            if (term[i - 1] === word[j - 1]) {\n                matrix[i][j] = matrix[i - 1][j - 1];\n            }\n            else {\n                matrix[i][j] = Math.min(matrix[i - 1][j] + 1, // deletion\n                matrix[i][j - 1] + 1, // insertion\n                matrix[i - 1][j - 1] + 1 // substitution\n                );\n            }\n            rowMin = Math.min(rowMin, matrix[i][j]);\n        }\n        // Early termination if all values in this row exceed tolerance\n        if (rowMin > tolerance) {\n            return -1;\n        }\n    }\n    return matrix[m][n] <= tolerance ? matrix[m][n] : -1;\n}\n/**\n * Computes the Levenshtein distance between two strings (a, b), returning early with -1 if the distance\n * is greater than the given tolerance.\n * It assumes that:\n * - tolerance >= ||a| - |b|| >= 0\n */\nexport function boundedLevenshtein(term, w, tolerance) {\n    const distance = _boundedLevenshtein(term, w, tolerance);\n    return {\n        distance,\n        isBounded: distance >= 0\n    };\n}\n// This is only used internally, keep in sync with the previous one\nexport function syncBoundedLevenshtein(term, w, tolerance) {\n    const distance = _boundedLevenshtein(term, w, tolerance);\n    return {\n        distance,\n        isBounded: distance >= 0\n    };\n}\nexport function levenshtein(a, b) {\n    /* c8 ignore next 3 */\n    if (!a.length) {\n        return b.length;\n    }\n    /* c8 ignore next 3 */\n    if (!b.length) {\n        return a.length;\n    }\n    const swap = a;\n    if (a.length > b.length) {\n        a = b;\n        b = swap;\n    }\n    const row = Array.from({ length: a.length + 1 }, (_, i) => i);\n    let val = 0;\n    for (let i = 1; i <= b.length; i++) {\n        let prev = i;\n        for (let j = 1; j <= a.length; j++) {\n            if (b[i - 1] === a[j - 1]) {\n                val = row[j - 1];\n            }\n            else {\n                val = Math.min(row[j - 1] + 1, Math.min(prev + 1, row[j] + 1));\n            }\n            row[j - 1] = prev;\n            prev = val;\n        }\n        row[a.length] = prev;\n    }\n    return row[a.length];\n}\n//# sourceMappingURL=levenshtein.js.map","/* eslint-disable @typescript-eslint/no-this-alias */\nimport { syncBoundedLevenshtein } from '../components/levenshtein.js';\nimport { getOwnProperty } from '../utils.js';\nexport class RadixNode {\n    // Node key\n    k;\n    // Node subword\n    s;\n    // Node children\n    c = new Map();\n    // Node documents\n    d = new Set();\n    // Node end\n    e;\n    // Node word\n    w = '';\n    constructor(key, subWord, end) {\n        this.k = key;\n        this.s = subWord;\n        this.e = end;\n    }\n    updateParent(parent) {\n        this.w = parent.w + this.s;\n    }\n    addDocument(docID) {\n        this.d.add(docID);\n    }\n    removeDocument(docID) {\n        return this.d.delete(docID);\n    }\n    findAllWords(output, term, exact, tolerance) {\n        const stack = [this];\n        while (stack.length > 0) {\n            const node = stack.pop();\n            if (node.e) {\n                const { w, d: docIDs } = node;\n                if (exact && w !== term) {\n                    continue;\n                }\n                // check if _output[w] exists and then add the doc to it\n                // always check in own property to prevent access to inherited properties\n                // fix https://github.com/oramasearch/orama/issues/137\n                if (getOwnProperty(output, w) !== null) {\n                    if (tolerance) {\n                        const difference = Math.abs(term.length - w.length);\n                        if (difference <= tolerance && syncBoundedLevenshtein(term, w, tolerance).isBounded) {\n                            output[w] = [];\n                        }\n                        else {\n                            continue;\n                        }\n                    }\n                    else {\n                        output[w] = [];\n                    }\n                }\n                // check if _output[w] exists and then add the doc to it\n                // always check in own property to prevent access to inherited properties\n                // fix https://github.com/oramasearch/orama/issues/137\n                if (getOwnProperty(output, w) != null && docIDs.size > 0) {\n                    const docs = output[w];\n                    for (const docID of docIDs) {\n                        if (!docs.includes(docID)) {\n                            docs.push(docID);\n                        }\n                    }\n                }\n            }\n            if (node.c.size > 0) {\n                stack.push(...node.c.values());\n            }\n        }\n        return output;\n    }\n    insert(word, docId) {\n        let node = this;\n        let i = 0;\n        const wordLength = word.length;\n        while (i < wordLength) {\n            const currentCharacter = word[i];\n            const childNode = node.c.get(currentCharacter);\n            if (childNode) {\n                const edgeLabel = childNode.s;\n                const edgeLabelLength = edgeLabel.length;\n                let j = 0;\n                // Find the common prefix length between edgeLabel and the remaining word\n                while (j < edgeLabelLength && i + j < wordLength && edgeLabel[j] === word[i + j]) {\n                    j++;\n                }\n                if (j === edgeLabelLength) {\n                    // Edge label fully matches; proceed to the child node\n                    node = childNode;\n                    i += j;\n                    if (i === wordLength) {\n                        // The word is a prefix of an existing word\n                        if (!childNode.e) {\n                            childNode.e = true;\n                        }\n                        childNode.addDocument(docId);\n                        return;\n                    }\n                    continue;\n                }\n                // Split the edgeLabel at the common prefix\n                const commonPrefix = edgeLabel.slice(0, j);\n                const newEdgeLabel = edgeLabel.slice(j);\n                const newWordLabel = word.slice(i + j);\n                // Create an intermediate node for the common prefix\n                const inbetweenNode = new RadixNode(commonPrefix[0], commonPrefix, false);\n                node.c.set(commonPrefix[0], inbetweenNode);\n                inbetweenNode.updateParent(node);\n                // Update the existing childNode\n                childNode.s = newEdgeLabel;\n                childNode.k = newEdgeLabel[0];\n                inbetweenNode.c.set(newEdgeLabel[0], childNode);\n                childNode.updateParent(inbetweenNode);\n                if (newWordLabel) {\n                    // Create a new node for the remaining part of the word\n                    const newNode = new RadixNode(newWordLabel[0], newWordLabel, true);\n                    newNode.addDocument(docId);\n                    inbetweenNode.c.set(newWordLabel[0], newNode);\n                    newNode.updateParent(inbetweenNode);\n                }\n                else {\n                    // The word ends at the inbetweenNode\n                    inbetweenNode.e = true;\n                    inbetweenNode.addDocument(docId);\n                }\n                return;\n            }\n            else {\n                // No matching child; create a new node\n                const newNode = new RadixNode(currentCharacter, word.slice(i), true);\n                newNode.addDocument(docId);\n                node.c.set(currentCharacter, newNode);\n                newNode.updateParent(node);\n                return;\n            }\n        }\n        // If we reach here, the word already exists in the tree\n        if (!node.e) {\n            node.e = true;\n        }\n        node.addDocument(docId);\n    }\n    _findLevenshtein(term, index, tolerance, originalTolerance, output) {\n        const stack = [{ node: this, index, tolerance }];\n        while (stack.length > 0) {\n            const { node, index, tolerance } = stack.pop();\n            if (node.w.startsWith(term)) {\n                node.findAllWords(output, term, false, 0);\n                continue;\n            }\n            if (tolerance < 0) {\n                continue;\n            }\n            if (node.e) {\n                const { w, d: docIDs } = node;\n                if (w) {\n                    if (syncBoundedLevenshtein(term, w, originalTolerance).isBounded) {\n                        output[w] = [];\n                    }\n                    if (getOwnProperty(output, w) !== undefined && docIDs.size > 0) {\n                        const docs = new Set(output[w]);\n                        for (const docID of docIDs) {\n                            docs.add(docID);\n                        }\n                        output[w] = Array.from(docs);\n                    }\n                }\n            }\n            if (index >= term.length) {\n                continue;\n            }\n            const currentChar = term[index];\n            // 1. If node has child matching term[index], push { node: childNode, index +1, tolerance }\n            if (node.c.has(currentChar)) {\n                const childNode = node.c.get(currentChar);\n                stack.push({ node: childNode, index: index + 1, tolerance });\n            }\n            // 2. Push { node, index +1, tolerance -1 } (Delete operation)\n            stack.push({ node: node, index: index + 1, tolerance: tolerance - 1 });\n            // 3. For each child:\n            for (const [character, childNode] of node.c) {\n                // a) Insert operation\n                stack.push({ node: childNode, index: index, tolerance: tolerance - 1 });\n                // b) Substitute operation\n                if (character !== currentChar) {\n                    stack.push({ node: childNode, index: index + 1, tolerance: tolerance - 1 });\n                }\n            }\n        }\n    }\n    find(params) {\n        const { term, exact, tolerance } = params;\n        if (tolerance && !exact) {\n            const output = {};\n            this._findLevenshtein(term, 0, tolerance, tolerance, output);\n            return output;\n        }\n        else {\n            let node = this;\n            let i = 0;\n            const termLength = term.length;\n            while (i < termLength) {\n                const character = term[i];\n                const childNode = node.c.get(character);\n                if (childNode) {\n                    const edgeLabel = childNode.s;\n                    const edgeLabelLength = edgeLabel.length;\n                    let j = 0;\n                    // Compare edge label with the term starting from position i\n                    while (j < edgeLabelLength && i + j < termLength && edgeLabel[j] === term[i + j]) {\n                        j++;\n                    }\n                    if (j === edgeLabelLength) {\n                        // Full match of edge label; proceed to the child node\n                        node = childNode;\n                        i += j;\n                    }\n                    else if (i + j === termLength) {\n                        // The term ends in the middle of the edge label - FIX: this handles prefix matches like 'p' matching 'phone'\n                        // Check if the term matches from the beginning of the edge label\n                        if (j === termLength - i) {\n                            // Term is a prefix of the edge label\n                            if (exact) {\n                                // Exact match required but term doesn't end at a node\n                                return {};\n                            }\n                            else {\n                                // Partial match; collect words starting from this node\n                                const output = {};\n                                // Just call findAllWords on the child node to collect all words in this subtree\n                                childNode.findAllWords(output, term, exact, tolerance);\n                                return output;\n                            }\n                        }\n                        else {\n                            // Mismatch found\n                            return {};\n                        }\n                    }\n                    else {\n                        // Mismatch found\n                        return {};\n                    }\n                }\n                else {\n                    // No matching child node\n                    return {};\n                }\n            }\n            // Term fully matched; collect words starting from this node\n            const output = {};\n            node.findAllWords(output, term, exact, tolerance);\n            return output;\n        }\n    }\n    contains(term) {\n        let node = this;\n        let i = 0;\n        const termLength = term.length;\n        while (i < termLength) {\n            const character = term[i];\n            const childNode = node.c.get(character);\n            if (childNode) {\n                const edgeLabel = childNode.s;\n                const edgeLabelLength = edgeLabel.length;\n                let j = 0;\n                while (j < edgeLabelLength && i + j < termLength && edgeLabel[j] === term[i + j]) {\n                    j++;\n                }\n                if (j < edgeLabelLength) {\n                    return false;\n                }\n                i += edgeLabelLength;\n                node = childNode;\n            }\n            else {\n                return false;\n            }\n        }\n        return true;\n    }\n    removeWord(term) {\n        if (!term) {\n            return false;\n        }\n        let node = this;\n        const termLength = term.length;\n        const stack = [];\n        for (let i = 0; i < termLength; i++) {\n            const character = term[i];\n            if (node.c.has(character)) {\n                const childNode = node.c.get(character);\n                stack.push({ parent: node, character });\n                i += childNode.s.length - 1;\n                node = childNode;\n            }\n            else {\n                return false;\n            }\n        }\n        // Remove documents from the node\n        node.d.clear();\n        node.e = false;\n        // Clean up any nodes that no longer lead to a word\n        while (stack.length > 0 && node.c.size === 0 && !node.e && node.d.size === 0) {\n            const { parent, character } = stack.pop();\n            parent.c.delete(character);\n            node = parent;\n        }\n        return true;\n    }\n    removeDocumentByWord(term, docID, exact = true) {\n        if (!term) {\n            return true;\n        }\n        let node = this;\n        const termLength = term.length;\n        for (let i = 0; i < termLength; i++) {\n            const character = term[i];\n            if (node.c.has(character)) {\n                const childNode = node.c.get(character);\n                i += childNode.s.length - 1;\n                node = childNode;\n                if (exact && node.w !== term) {\n                    // Do nothing if the exact condition is not met.\n                }\n                else {\n                    node.removeDocument(docID);\n                }\n            }\n            else {\n                return false;\n            }\n        }\n        return true;\n    }\n    static getCommonPrefix(a, b) {\n        const len = Math.min(a.length, b.length);\n        let i = 0;\n        while (i < len && a.charCodeAt(i) === b.charCodeAt(i)) {\n            i++;\n        }\n        return a.slice(0, i);\n    }\n    toJSON() {\n        return {\n            w: this.w,\n            s: this.s,\n            e: this.e,\n            k: this.k,\n            d: Array.from(this.d),\n            c: Array.from(this.c?.entries())?.map(([key, node]) => [key, node.toJSON()])\n        };\n    }\n    static fromJSON(json) {\n        const node = new RadixNode(json.k, json.s, json.e);\n        node.w = json.w;\n        node.d = new Set(json.d);\n        node.c = new Map(json?.c?.map(([key, nodeJson]) => [key, RadixNode.fromJSON(nodeJson)]) || []);\n        return node;\n    }\n}\nexport class RadixTree extends RadixNode {\n    constructor() {\n        super('', '', false);\n    }\n    static fromJSON(json) {\n        const tree = new RadixTree();\n        tree.w = json.w;\n        tree.s = json.s;\n        tree.e = json.e;\n        tree.k = json.k;\n        tree.d = new Set(json.d);\n        tree.c = new Map(json?.c?.map(([key, nodeJson]) => [key, RadixNode.fromJSON(nodeJson)]) || []);\n        return tree;\n    }\n    toJSON() {\n        return super.toJSON();\n    }\n}\n//# sourceMappingURL=radix.js.map","const K = 2; // 2D points\nconst EARTH_RADIUS = 6371e3; // Earth radius in meters\nclass BKDNode {\n    point;\n    docIDs;\n    left;\n    right;\n    parent;\n    constructor(point, docIDs) {\n        this.point = point;\n        this.docIDs = new Set(docIDs);\n        this.left = null;\n        this.right = null;\n        this.parent = null;\n    }\n    toJSON() {\n        return {\n            point: this.point,\n            docIDs: Array.from(this.docIDs),\n            left: this.left ? this.left.toJSON() : null,\n            right: this.right ? this.right.toJSON() : null\n        };\n    }\n    static fromJSON(json, parent = null) {\n        const node = new BKDNode(json.point, json.docIDs);\n        node.parent = parent;\n        if (json.left) {\n            node.left = BKDNode.fromJSON(json.left, node);\n        }\n        if (json.right) {\n            node.right = BKDNode.fromJSON(json.right, node);\n        }\n        return node;\n    }\n}\nexport class BKDTree {\n    root;\n    nodeMap;\n    constructor() {\n        this.root = null;\n        this.nodeMap = new Map();\n    }\n    getPointKey(point) {\n        return `${point.lon},${point.lat}`;\n    }\n    insert(point, docIDs) {\n        const pointKey = this.getPointKey(point);\n        const existingNode = this.nodeMap.get(pointKey);\n        if (existingNode) {\n            docIDs.forEach((id) => existingNode.docIDs.add(id));\n            return;\n        }\n        const newNode = new BKDNode(point, docIDs);\n        this.nodeMap.set(pointKey, newNode);\n        if (this.root == null) {\n            this.root = newNode;\n            return;\n        }\n        let node = this.root;\n        let depth = 0;\n        // eslint-disable-next-line no-constant-condition\n        while (true) {\n            const axis = depth % K;\n            if (axis === 0) {\n                if (point.lon < node.point.lon) {\n                    if (node.left == null) {\n                        node.left = newNode;\n                        newNode.parent = node;\n                        return;\n                    }\n                    node = node.left;\n                }\n                else {\n                    if (node.right == null) {\n                        node.right = newNode;\n                        newNode.parent = node;\n                        return;\n                    }\n                    node = node.right;\n                }\n            }\n            else {\n                if (point.lat < node.point.lat) {\n                    if (node.left == null) {\n                        node.left = newNode;\n                        newNode.parent = node;\n                        return;\n                    }\n                    node = node.left;\n                }\n                else {\n                    if (node.right == null) {\n                        node.right = newNode;\n                        newNode.parent = node;\n                        return;\n                    }\n                    node = node.right;\n                }\n            }\n            depth++;\n        }\n    }\n    contains(point) {\n        const pointKey = this.getPointKey(point);\n        return this.nodeMap.has(pointKey);\n    }\n    getDocIDsByCoordinates(point) {\n        const pointKey = this.getPointKey(point);\n        const node = this.nodeMap.get(pointKey);\n        if (node) {\n            return Array.from(node.docIDs);\n        }\n        return null;\n    }\n    removeDocByID(point, docID) {\n        const pointKey = this.getPointKey(point);\n        const node = this.nodeMap.get(pointKey);\n        if (node) {\n            node.docIDs.delete(docID);\n            if (node.docIDs.size === 0) {\n                this.nodeMap.delete(pointKey);\n                this.deleteNode(node);\n            }\n        }\n    }\n    deleteNode(node) {\n        const parent = node.parent;\n        const child = node.left ? node.left : node.right;\n        if (child) {\n            child.parent = parent;\n        }\n        if (parent) {\n            if (parent.left === node) {\n                parent.left = child;\n            }\n            else if (parent.right === node) {\n                parent.right = child;\n            }\n        }\n        else {\n            this.root = child;\n            if (this.root) {\n                this.root.parent = null;\n            }\n        }\n    }\n    searchByRadius(center, radius, inclusive = true, sort = 'asc', highPrecision = false) {\n        const distanceFn = highPrecision ? BKDTree.vincentyDistance : BKDTree.haversineDistance;\n        const stack = [{ node: this.root, depth: 0 }];\n        const result = [];\n        while (stack.length > 0) {\n            const { node, depth } = stack.pop();\n            if (node == null)\n                continue;\n            const dist = distanceFn(center, node.point);\n            if (inclusive ? dist <= radius : dist > radius) {\n                result.push({ point: node.point, docIDs: Array.from(node.docIDs) });\n            }\n            if (node.left != null) {\n                stack.push({ node: node.left, depth: depth + 1 });\n            }\n            if (node.right != null) {\n                stack.push({ node: node.right, depth: depth + 1 });\n            }\n        }\n        if (sort) {\n            result.sort((a, b) => {\n                const distA = distanceFn(center, a.point);\n                const distB = distanceFn(center, b.point);\n                return sort.toLowerCase() === 'asc' ? distA - distB : distB - distA;\n            });\n        }\n        return result;\n    }\n    searchByPolygon(polygon, inclusive = true, sort = null, highPrecision = false) {\n        const stack = [{ node: this.root, depth: 0 }];\n        const result = [];\n        while (stack.length > 0) {\n            const { node, depth } = stack.pop();\n            if (node == null)\n                continue;\n            if (node.left != null) {\n                stack.push({ node: node.left, depth: depth + 1 });\n            }\n            if (node.right != null) {\n                stack.push({ node: node.right, depth: depth + 1 });\n            }\n            const isInsidePolygon = BKDTree.isPointInPolygon(polygon, node.point);\n            if ((isInsidePolygon && inclusive) || (!isInsidePolygon && !inclusive)) {\n                result.push({ point: node.point, docIDs: Array.from(node.docIDs) });\n            }\n        }\n        const centroid = BKDTree.calculatePolygonCentroid(polygon);\n        if (sort) {\n            const distanceFn = highPrecision ? BKDTree.vincentyDistance : BKDTree.haversineDistance;\n            result.sort((a, b) => {\n                const distA = distanceFn(centroid, a.point);\n                const distB = distanceFn(centroid, b.point);\n                return sort.toLowerCase() === 'asc' ? distA - distB : distB - distA;\n            });\n        }\n        return result;\n    }\n    toJSON() {\n        return {\n            root: this.root ? this.root.toJSON() : null\n        };\n    }\n    static fromJSON(json) {\n        const tree = new BKDTree();\n        if (json.root) {\n            tree.root = BKDNode.fromJSON(json.root);\n            tree.buildNodeMap(tree.root);\n        }\n        return tree;\n    }\n    buildNodeMap(node) {\n        if (node == null)\n            return;\n        const pointKey = this.getPointKey(node.point);\n        this.nodeMap.set(pointKey, node);\n        if (node.left) {\n            this.buildNodeMap(node.left);\n        }\n        if (node.right) {\n            this.buildNodeMap(node.right);\n        }\n    }\n    static calculatePolygonCentroid(polygon) {\n        let totalArea = 0;\n        let centroidX = 0;\n        let centroidY = 0;\n        const polygonLength = polygon.length;\n        for (let i = 0, j = polygonLength - 1; i < polygonLength; j = i++) {\n            const xi = polygon[i].lon;\n            const yi = polygon[i].lat;\n            const xj = polygon[j].lon;\n            const yj = polygon[j].lat;\n            const areaSegment = xi * yj - xj * yi;\n            totalArea += areaSegment;\n            centroidX += (xi + xj) * areaSegment;\n            centroidY += (yi + yj) * areaSegment;\n        }\n        totalArea /= 2;\n        const centroidCoordinate = 6 * totalArea;\n        centroidX /= centroidCoordinate;\n        centroidY /= centroidCoordinate;\n        return { lon: centroidX, lat: centroidY };\n    }\n    static isPointInPolygon(polygon, point) {\n        let isInside = false;\n        const x = point.lon;\n        const y = point.lat;\n        const polygonLength = polygon.length;\n        for (let i = 0, j = polygonLength - 1; i < polygonLength; j = i++) {\n            const xi = polygon[i].lon;\n            const yi = polygon[i].lat;\n            const xj = polygon[j].lon;\n            const yj = polygon[j].lat;\n            const intersect = yi > y !== yj > y && x < ((xj - xi) * (y - yi)) / (yj - yi) + xi;\n            if (intersect)\n                isInside = !isInside;\n        }\n        return isInside;\n    }\n    static haversineDistance(coord1, coord2) {\n        const P = Math.PI / 180;\n        const lat1 = coord1.lat * P;\n        const lat2 = coord2.lat * P;\n        const deltaLat = (coord2.lat - coord1.lat) * P;\n        const deltaLon = (coord2.lon - coord1.lon) * P;\n        const a = Math.sin(deltaLat / 2) * Math.sin(deltaLat / 2) +\n            Math.cos(lat1) * Math.cos(lat2) * Math.sin(deltaLon / 2) * Math.sin(deltaLon / 2);\n        const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n        return EARTH_RADIUS * c;\n    }\n    static vincentyDistance(coord1, coord2) {\n        const a = 6378137;\n        const f = 1 / 298.257223563;\n        const b = (1 - f) * a;\n        const P = Math.PI / 180;\n        const lat1 = coord1.lat * P;\n        const lat2 = coord2.lat * P;\n        const deltaLon = (coord2.lon - coord1.lon) * P;\n        const U1 = Math.atan((1 - f) * Math.tan(lat1));\n        const U2 = Math.atan((1 - f) * Math.tan(lat2));\n        const sinU1 = Math.sin(U1);\n        const cosU1 = Math.cos(U1);\n        const sinU2 = Math.sin(U2);\n        const cosU2 = Math.cos(U2);\n        let lambda = deltaLon;\n        let prevLambda;\n        let iterationLimit = 1000;\n        let sinSigma;\n        let cosSigma;\n        let sigma;\n        let sinAlpha;\n        let cos2Alpha;\n        let cos2SigmaM;\n        do {\n            const sinLambda = Math.sin(lambda);\n            const cosLambda = Math.cos(lambda);\n            sinSigma = Math.sqrt(cosU2 * sinLambda * (cosU2 * sinLambda) +\n                (cosU1 * sinU2 - sinU1 * cosU2 * cosLambda) * (cosU1 * sinU2 - sinU1 * cosU2 * cosLambda));\n            if (sinSigma === 0)\n                return 0; // co-incident points\n            cosSigma = sinU1 * sinU2 + cosU1 * cosU2 * cosLambda;\n            sigma = Math.atan2(sinSigma, cosSigma);\n            sinAlpha = (cosU1 * cosU2 * sinLambda) / sinSigma;\n            cos2Alpha = 1 - sinAlpha * sinAlpha;\n            cos2SigmaM = cosSigma - (2 * sinU1 * sinU2) / cos2Alpha;\n            if (isNaN(cos2SigmaM))\n                cos2SigmaM = 0;\n            const C = (f / 16) * cos2Alpha * (4 + f * (4 - 3 * cos2Alpha));\n            prevLambda = lambda;\n            lambda =\n                deltaLon +\n                    (1 - C) *\n                        f *\n                        sinAlpha *\n                        (sigma + C * sinSigma * (cos2SigmaM + C * cosSigma * (-1 + 2 * cos2SigmaM * cos2SigmaM)));\n        } while (Math.abs(lambda - prevLambda) > 1e-12 && --iterationLimit > 0);\n        if (iterationLimit === 0) {\n            return NaN;\n        }\n        const uSquared = (cos2Alpha * (a * a - b * b)) / (b * b);\n        const A = 1 + (uSquared / 16384) * (4096 + uSquared * (-768 + uSquared * (320 - 175 * uSquared)));\n        const B = (uSquared / 1024) * (256 + uSquared * (-128 + uSquared * (74 - 47 * uSquared)));\n        const deltaSigma = B *\n            sinSigma *\n            (cos2SigmaM +\n                (B / 4) *\n                    (cosSigma * (-1 + 2 * cos2SigmaM * cos2SigmaM) -\n                        (B / 6) * cos2SigmaM * (-3 + 4 * sinSigma * sinSigma) * (-3 + 4 * cos2SigmaM * cos2SigmaM)));\n        const s = b * A * (sigma - deltaSigma);\n        return s;\n    }\n}\n//# sourceMappingURL=bkd.js.map","export class BoolNode {\n    true;\n    false;\n    constructor() {\n        this.true = new Set();\n        this.false = new Set();\n    }\n    insert(value, bool) {\n        if (bool) {\n            this.true.add(value);\n        }\n        else {\n            this.false.add(value);\n        }\n    }\n    delete(value, bool) {\n        if (bool) {\n            this.true.delete(value);\n        }\n        else {\n            this.false.delete(value);\n        }\n    }\n    getSize() {\n        return this.true.size + this.false.size;\n    }\n    toJSON() {\n        return {\n            true: Array.from(this.true),\n            false: Array.from(this.false)\n        };\n    }\n    static fromJSON(json) {\n        const node = new BoolNode();\n        node.true = new Set(json.true);\n        node.false = new Set(json.false);\n        return node;\n    }\n}\n//# sourceMappingURL=bool.js.map","import { createError } from '../errors.js';\nexport function prioritizeTokenScores(arrays, boost, threshold = 0, keywordsCount) {\n    if (boost === 0) {\n        throw createError('INVALID_BOOST_VALUE');\n    }\n    const tokenScoresMap = new Map();\n    const mapsLength = arrays.length;\n    for (let i = 0; i < mapsLength; i++) {\n        const arr = arrays[i];\n        const entriesLength = arr.length;\n        for (let j = 0; j < entriesLength; j++) {\n            const [token, score] = arr[j];\n            const boostScore = score * boost;\n            const oldScore = tokenScoresMap.get(token)?.[0];\n            if (oldScore !== undefined) {\n                tokenScoresMap.set(token, [oldScore * 1.5 + boostScore, (tokenScoresMap?.get(token)?.[1] || 0) + 1]);\n            }\n            else {\n                tokenScoresMap.set(token, [boostScore, 1]);\n            }\n        }\n    }\n    const tokenScores = [];\n    for (const tokenScoreEntry of tokenScoresMap.entries()) {\n        tokenScores.push([tokenScoreEntry[0], tokenScoreEntry[1][0]]);\n    }\n    const results = tokenScores.sort((a, b) => b[1] - a[1]);\n    // If threshold is 1, it means we will return all the results with at least one search term,\n    // prioritizing the ones that contains more search terms (fuzzy match)\n    if (threshold === 1) {\n        return results;\n    }\n    // For threshold = 0 when keywordsCount is 1 (single term search),\n    // we return all matches since they automatically contain 100% of keywords\n    if (threshold === 0 && keywordsCount === 1) {\n        return results;\n    }\n    // Prepare keywords count tracking for threshold handling\n    const allResults = results.length;\n    const tokenScoreWithKeywordsCount = [];\n    for (const tokenScoreEntry of tokenScoresMap.entries()) {\n        tokenScoreWithKeywordsCount.push([tokenScoreEntry[0], tokenScoreEntry[1][0], tokenScoreEntry[1][1]]);\n    }\n    // Find the index of the last result with all keywords.\n    // Order the documents by the number of keywords they contain, and then by the score.\n    const keywordsPerToken = tokenScoreWithKeywordsCount.sort((a, b) => {\n        // Compare by the third element, higher numbers first\n        if (a[2] > b[2])\n            return -1;\n        if (a[2] < b[2])\n            return 1;\n        // If the third elements are equal, compare by the second element, higher numbers first\n        if (a[1] > b[1])\n            return -1;\n        if (a[1] < b[1])\n            return 1;\n        // If both the second and third elements are equal, consider the elements equal\n        return 0;\n    });\n    let lastTokenWithAllKeywords = undefined;\n    for (let i = 0; i < allResults; i++) {\n        if (keywordsPerToken[i][2] === keywordsCount) {\n            lastTokenWithAllKeywords = i;\n        }\n        else {\n            break;\n        }\n    }\n    // If no results had all the keywords, either bail out earlier or normalize\n    if (typeof lastTokenWithAllKeywords === 'undefined') {\n        if (threshold === 0) {\n            return [];\n        }\n        lastTokenWithAllKeywords = 0;\n    }\n    const keywordsPerTokenLength = keywordsPerToken.length;\n    const resultsWithIdAndScore = new Array(keywordsPerTokenLength);\n    for (let i = 0; i < keywordsPerTokenLength; i++) {\n        resultsWithIdAndScore[i] = [keywordsPerToken[i][0], keywordsPerToken[i][1]];\n    }\n    // If threshold is 0, it means we will only return all the results that contains ALL the search terms (exact match)\n    if (threshold === 0) {\n        return resultsWithIdAndScore.slice(0, lastTokenWithAllKeywords + 1);\n    }\n    // If the threshold is between 0 and 1, we will return all the results that contains at least the threshold of search terms\n    // For example, if threshold is 0.5, we will return all the results that contains at least 50% of the search terms\n    // (fuzzy match with a minimum threshold)\n    const thresholdLength = lastTokenWithAllKeywords + Math.ceil((threshold * 100 * (allResults - lastTokenWithAllKeywords)) / 100);\n    return resultsWithIdAndScore.slice(0, Math.min(allResults, thresholdLength));\n}\nexport function BM25(tf, matchingCount, docsCount, fieldLength, averageFieldLength, { k, b, d }) {\n    const idf = Math.log(1 + (docsCount - matchingCount + 0.5) / (matchingCount + 0.5));\n    return (idf * (d + tf * (k + 1))) / (tf + k * (1 - b + (b * fieldLength) / averageFieldLength));\n}\n//# sourceMappingURL=algorithms.js.map","export const DEFAULT_SIMILARITY = 0.8;\nexport class VectorIndex {\n    size;\n    vectors = new Map();\n    constructor(size) {\n        this.size = size;\n    }\n    add(internalDocumentId, value) {\n        if (!(value instanceof Float32Array)) {\n            value = new Float32Array(value);\n        }\n        const magnitude = getMagnitude(value, this.size);\n        this.vectors.set(internalDocumentId, [magnitude, value]);\n    }\n    remove(internalDocumentId) {\n        this.vectors.delete(internalDocumentId);\n    }\n    find(vector, similarity, whereFiltersIDs) {\n        if (!(vector instanceof Float32Array)) {\n            vector = new Float32Array(vector);\n        }\n        const results = findSimilarVectors(vector, whereFiltersIDs, this.vectors, this.size, similarity);\n        return results;\n    }\n    toJSON() {\n        const vectors = [];\n        for (const [id, [magnitude, vector]] of this.vectors) {\n            vectors.push([id, [magnitude, Array.from(vector)]]);\n        }\n        return {\n            size: this.size,\n            vectors\n        };\n    }\n    static fromJSON(json) {\n        const raw = json;\n        const index = new VectorIndex(raw.size);\n        for (const [id, [magnitude, vector]] of raw.vectors) {\n            index.vectors.set(id, [magnitude, new Float32Array(vector)]);\n        }\n        return index;\n    }\n}\nexport function getMagnitude(vector, vectorLength) {\n    let magnitude = 0;\n    for (let i = 0; i < vectorLength; i++) {\n        magnitude += vector[i] * vector[i];\n    }\n    return Math.sqrt(magnitude);\n}\n// @todo: Write plugins for Node and Browsers to use parallel computation for this function\nexport function findSimilarVectors(targetVector, keys, vectors, length, threshold) {\n    const targetMagnitude = getMagnitude(targetVector, length);\n    const similarVectors = [];\n    const base = keys ? keys : vectors.keys();\n    for (const vectorId of base) {\n        const entry = vectors.get(vectorId);\n        if (!entry) {\n            continue;\n        }\n        const magnitude = entry[0];\n        const vector = entry[1];\n        let dotProduct = 0;\n        for (let i = 0; i < length; i++) {\n            dotProduct += targetVector[i] * vector[i];\n        }\n        const similarity = dotProduct / (targetMagnitude * magnitude);\n        if (similarity >= threshold) {\n            similarVectors.push([vectorId, similarity]);\n        }\n    }\n    return similarVectors;\n}\n//# sourceMappingURL=vector.js.map","import { createError } from '../errors.js';\nimport { AVLTree } from '../trees/avl.js';\nimport { FlatTree } from '../trees/flat.js';\nimport { RadixTree } from '../trees/radix.js';\nimport { BKDTree } from '../trees/bkd.js';\nimport { BoolNode } from '../trees/bool.js';\nimport { convertDistanceToMeters, setIntersection, setUnion, setDifference } from '../utils.js';\nimport { BM25 } from './algorithms.js';\nimport { getInnerType, getVectorSize, isArrayType, isVectorType } from './defaults.js';\nimport { getInternalDocumentId } from './internal-document-id-store.js';\nimport { VectorIndex } from '../trees/vector.js';\nexport function insertDocumentScoreParameters(index, prop, id, tokens, docsCount) {\n    const internalId = getInternalDocumentId(index.sharedInternalDocumentStore, id);\n    index.avgFieldLength[prop] = ((index.avgFieldLength[prop] ?? 0) * (docsCount - 1) + tokens.length) / docsCount;\n    index.fieldLengths[prop][internalId] = tokens.length;\n    index.frequencies[prop][internalId] = {};\n}\nexport function insertTokenScoreParameters(index, prop, id, tokens, token) {\n    let tokenFrequency = 0;\n    for (const t of tokens) {\n        if (t === token) {\n            tokenFrequency++;\n        }\n    }\n    const internalId = getInternalDocumentId(index.sharedInternalDocumentStore, id);\n    const tf = tokenFrequency / tokens.length;\n    index.frequencies[prop][internalId][token] = tf;\n    if (!(token in index.tokenOccurrences[prop])) {\n        index.tokenOccurrences[prop][token] = 0;\n    }\n    // increase a token counter that may not yet exist\n    index.tokenOccurrences[prop][token] = (index.tokenOccurrences[prop][token] ?? 0) + 1;\n}\nexport function removeDocumentScoreParameters(index, prop, id, docsCount) {\n    const internalId = getInternalDocumentId(index.sharedInternalDocumentStore, id);\n    if (docsCount > 1) {\n        index.avgFieldLength[prop] =\n            (index.avgFieldLength[prop] * docsCount - index.fieldLengths[prop][internalId]) / (docsCount - 1);\n    }\n    else {\n        index.avgFieldLength[prop] = undefined;\n    }\n    index.fieldLengths[prop][internalId] = undefined;\n    index.frequencies[prop][internalId] = undefined;\n}\nexport function removeTokenScoreParameters(index, prop, token) {\n    index.tokenOccurrences[prop][token]--;\n}\nexport function create(orama, sharedInternalDocumentStore, schema, index, prefix = '') {\n    if (!index) {\n        index = {\n            sharedInternalDocumentStore,\n            indexes: {},\n            vectorIndexes: {},\n            searchableProperties: [],\n            searchablePropertiesWithTypes: {},\n            frequencies: {},\n            tokenOccurrences: {},\n            avgFieldLength: {},\n            fieldLengths: {}\n        };\n    }\n    for (const [prop, type] of Object.entries(schema)) {\n        const path = `${prefix}${prefix ? '.' : ''}${prop}`;\n        if (typeof type === 'object' && !Array.isArray(type)) {\n            // Nested\n            create(orama, sharedInternalDocumentStore, type, index, path);\n            continue;\n        }\n        if (isVectorType(type)) {\n            index.searchableProperties.push(path);\n            index.searchablePropertiesWithTypes[path] = type;\n            index.vectorIndexes[path] = {\n                type: 'Vector',\n                node: new VectorIndex(getVectorSize(type)),\n                isArray: false\n            };\n        }\n        else {\n            const isArray = /\\[/.test(type);\n            switch (type) {\n                case 'boolean':\n                case 'boolean[]':\n                    index.indexes[path] = { type: 'Bool', node: new BoolNode(), isArray };\n                    break;\n                case 'number':\n                case 'number[]':\n                    index.indexes[path] = { type: 'AVL', node: new AVLTree(0, []), isArray };\n                    break;\n                case 'string':\n                case 'string[]':\n                    index.indexes[path] = { type: 'Radix', node: new RadixTree(), isArray };\n                    index.avgFieldLength[path] = 0;\n                    index.frequencies[path] = {};\n                    index.tokenOccurrences[path] = {};\n                    index.fieldLengths[path] = {};\n                    break;\n                case 'enum':\n                case 'enum[]':\n                    index.indexes[path] = { type: 'Flat', node: new FlatTree(), isArray };\n                    break;\n                case 'geopoint':\n                    index.indexes[path] = { type: 'BKD', node: new BKDTree(), isArray };\n                    break;\n                default:\n                    throw createError('INVALID_SCHEMA_TYPE', Array.isArray(type) ? 'array' : type, path);\n            }\n            index.searchableProperties.push(path);\n            index.searchablePropertiesWithTypes[path] = type;\n        }\n    }\n    return index;\n}\nfunction insertScalarBuilder(implementation, index, prop, internalId, language, tokenizer, docsCount, options) {\n    return (value) => {\n        const { type, node } = index.indexes[prop];\n        switch (type) {\n            case 'Bool': {\n                node[value ? 'true' : 'false'].add(internalId);\n                break;\n            }\n            case 'AVL': {\n                const avlRebalanceThreshold = options?.avlRebalanceThreshold ?? 1;\n                node.insert(value, internalId, avlRebalanceThreshold);\n                break;\n            }\n            case 'Radix': {\n                const tokens = tokenizer.tokenize(value, language, prop, false);\n                implementation.insertDocumentScoreParameters(index, prop, internalId, tokens, docsCount);\n                for (const token of tokens) {\n                    implementation.insertTokenScoreParameters(index, prop, internalId, tokens, token);\n                    node.insert(token, internalId);\n                }\n                break;\n            }\n            case 'Flat': {\n                node.insert(value, internalId);\n                break;\n            }\n            case 'BKD': {\n                node.insert(value, [internalId]);\n                break;\n            }\n        }\n    };\n}\nexport function insert(implementation, index, prop, id, internalId, value, schemaType, language, tokenizer, docsCount, options) {\n    if (isVectorType(schemaType)) {\n        return insertVector(index, prop, value, id, internalId);\n    }\n    const insertScalar = insertScalarBuilder(implementation, index, prop, internalId, language, tokenizer, docsCount, options);\n    if (!isArrayType(schemaType)) {\n        return insertScalar(value);\n    }\n    const elements = value;\n    const elementsLength = elements.length;\n    for (let i = 0; i < elementsLength; i++) {\n        insertScalar(elements[i]);\n    }\n}\nexport function insertVector(index, prop, value, id, internalDocumentId) {\n    index.vectorIndexes[prop].node.add(internalDocumentId, value);\n}\nfunction removeScalar(implementation, index, prop, id, internalId, value, schemaType, language, tokenizer, docsCount) {\n    if (isVectorType(schemaType)) {\n        index.vectorIndexes[prop].node.remove(internalId);\n        return true;\n    }\n    const { type, node } = index.indexes[prop];\n    switch (type) {\n        case 'AVL': {\n            node.removeDocument(value, internalId);\n            return true;\n        }\n        case 'Bool': {\n            node[value ? 'true' : 'false'].delete(internalId);\n            return true;\n        }\n        case 'Radix': {\n            const tokens = tokenizer.tokenize(value, language, prop);\n            implementation.removeDocumentScoreParameters(index, prop, id, docsCount);\n            for (const token of tokens) {\n                implementation.removeTokenScoreParameters(index, prop, token);\n                node.removeDocumentByWord(token, internalId);\n            }\n            return true;\n        }\n        case 'Flat': {\n            node.removeDocument(internalId, value);\n            return true;\n        }\n        case 'BKD': {\n            node.removeDocByID(value, internalId);\n            return false;\n        }\n    }\n}\nexport function remove(implementation, index, prop, id, internalId, value, schemaType, language, tokenizer, docsCount) {\n    if (!isArrayType(schemaType)) {\n        return removeScalar(implementation, index, prop, id, internalId, value, schemaType, language, tokenizer, docsCount);\n    }\n    const innerSchemaType = getInnerType(schemaType);\n    const elements = value;\n    const elementsLength = elements.length;\n    for (let i = 0; i < elementsLength; i++) {\n        removeScalar(implementation, index, prop, id, internalId, elements[i], innerSchemaType, language, tokenizer, docsCount);\n    }\n    return true;\n}\nexport function calculateResultScores(index, prop, term, ids, docsCount, bm25Relevance, resultsMap, boostPerProperty, whereFiltersIDs, keywordMatchesMap) {\n    const documentIDs = Array.from(ids);\n    const avgFieldLength = index.avgFieldLength[prop];\n    const fieldLengths = index.fieldLengths[prop];\n    const oramaOccurrences = index.tokenOccurrences[prop];\n    const oramaFrequencies = index.frequencies[prop];\n    // oramaOccurrences[term] can be undefined, 0, string, or { [k: string]: number }\n    const termOccurrences = typeof oramaOccurrences[term] === 'number' ? (oramaOccurrences[term] ?? 0) : 0;\n    // Calculate TF-IDF value for each term, in each document, for each index.\n    const documentIDsLength = documentIDs.length;\n    for (let k = 0; k < documentIDsLength; k++) {\n        const internalId = documentIDs[k];\n        if (whereFiltersIDs && !whereFiltersIDs.has(internalId)) {\n            continue;\n        }\n        // Track keyword matches per property\n        if (!keywordMatchesMap.has(internalId)) {\n            keywordMatchesMap.set(internalId, new Map());\n        }\n        const propertyMatches = keywordMatchesMap.get(internalId);\n        propertyMatches.set(prop, (propertyMatches.get(prop) || 0) + 1);\n        const tf = oramaFrequencies?.[internalId]?.[term] ?? 0;\n        const bm25 = BM25(tf, termOccurrences, docsCount, fieldLengths[internalId], avgFieldLength, bm25Relevance);\n        if (resultsMap.has(internalId)) {\n            resultsMap.set(internalId, resultsMap.get(internalId) + bm25 * boostPerProperty);\n        }\n        else {\n            resultsMap.set(internalId, bm25 * boostPerProperty);\n        }\n    }\n}\nexport function search(index, term, tokenizer, language, propertiesToSearch, exact, tolerance, boost, relevance, docsCount, whereFiltersIDs, threshold = 0) {\n    const tokens = tokenizer.tokenize(term, language);\n    const keywordsCount = tokens.length || 1;\n    // Track keyword matches per document and property\n    const keywordMatchesMap = new Map();\n    // Track which tokens were found in the search\n    const tokenFoundMap = new Map();\n    const resultsMap = new Map();\n    for (const prop of propertiesToSearch) {\n        if (!(prop in index.indexes)) {\n            continue;\n        }\n        const tree = index.indexes[prop];\n        const { type } = tree;\n        if (type !== 'Radix') {\n            throw createError('WRONG_SEARCH_PROPERTY_TYPE', prop);\n        }\n        const boostPerProperty = boost[prop] ?? 1;\n        if (boostPerProperty <= 0) {\n            throw createError('INVALID_BOOST_VALUE', boostPerProperty);\n        }\n        // if the tokenizer returns an empty array, we returns all the documents\n        if (tokens.length === 0 && !term) {\n            tokens.push('');\n        }\n        // Process each token in the search term\n        const tokenLength = tokens.length;\n        for (let i = 0; i < tokenLength; i++) {\n            const token = tokens[i];\n            const searchResult = tree.node.find({ term: token, exact, tolerance });\n            // See if this token was found (for threshold=0 filtering)\n            const termsFound = Object.keys(searchResult);\n            if (termsFound.length > 0) {\n                tokenFoundMap.set(token, true);\n            }\n            // Process each matching term\n            const termsFoundLength = termsFound.length;\n            for (let j = 0; j < termsFoundLength; j++) {\n                const word = termsFound[j];\n                const ids = searchResult[word];\n                calculateResultScores(index, prop, word, ids, docsCount, relevance, resultsMap, boostPerProperty, whereFiltersIDs, keywordMatchesMap);\n            }\n        }\n    }\n    // Convert to array and sort by score\n    const results = Array.from(resultsMap.entries())\n        .map(([id, score]) => [id, score])\n        .sort((a, b) => b[1] - a[1]);\n    if (results.length === 0) {\n        return [];\n    }\n    // If threshold is 1, return all results\n    if (threshold === 1) {\n        return results;\n    }\n    // For threshold=0, check if all tokens were found\n    if (threshold === 0) {\n        // Quick return for single tokens - already validated\n        if (keywordsCount === 1) {\n            return results;\n        }\n        // For multiple tokens, verify that ALL tokens were found\n        // If any token wasn't found, return an empty result\n        for (const token of tokens) {\n            if (!tokenFoundMap.get(token)) {\n                return [];\n            }\n        }\n        // Find documents that have all keywords in at least one property\n        const fullMatches = results.filter(([id]) => {\n            const propertyMatches = keywordMatchesMap.get(id);\n            if (!propertyMatches)\n                return false;\n            // Check if any property has all keywords\n            return Array.from(propertyMatches.values()).some((matches) => matches === keywordsCount);\n        });\n        return fullMatches;\n    }\n    // Find documents that have all keywords in at least one property\n    const fullMatches = results.filter(([id]) => {\n        const propertyMatches = keywordMatchesMap.get(id);\n        if (!propertyMatches)\n            return false;\n        // Check if any property has all keywords\n        return Array.from(propertyMatches.values()).some((matches) => matches === keywordsCount);\n    });\n    // If we have full matches and threshold < 1, return full matches plus a percentage of partial matches\n    if (fullMatches.length > 0) {\n        const remainingResults = results.filter(([id]) => !fullMatches.some(([fid]) => fid === id));\n        const additionalResults = Math.ceil(remainingResults.length * threshold);\n        return [...fullMatches, ...remainingResults.slice(0, additionalResults)];\n    }\n    // If no full matches, return all results\n    return results;\n}\nexport function searchByWhereClause(index, tokenizer, filters, language) {\n    // Handle logical operators\n    if ('and' in filters && filters.and && Array.isArray(filters.and)) {\n        const andFilters = filters.and;\n        if (andFilters.length === 0) {\n            return new Set();\n        }\n        const results = andFilters.map((filter) => searchByWhereClause(index, tokenizer, filter, language));\n        return setIntersection(...results);\n    }\n    if ('or' in filters && filters.or && Array.isArray(filters.or)) {\n        const orFilters = filters.or;\n        if (orFilters.length === 0) {\n            return new Set();\n        }\n        const results = orFilters.map((filter) => searchByWhereClause(index, tokenizer, filter, language));\n        // Use reduce to union all sets\n        return results.reduce((acc, set) => setUnion(acc, set), new Set());\n    }\n    if ('not' in filters && filters.not) {\n        const notFilter = filters.not;\n        // Get all document IDs from the internal document store\n        const allDocs = new Set();\n        // Get all document IDs from the internal document store\n        const docsStore = index.sharedInternalDocumentStore;\n        for (let i = 1; i <= docsStore.internalIdToId.length; i++) {\n            allDocs.add(i);\n        }\n        const notResult = searchByWhereClause(index, tokenizer, notFilter, language);\n        return setDifference(allDocs, notResult);\n    }\n    // Handle regular property filters (existing logic)\n    const filterKeys = Object.keys(filters);\n    const filtersMap = filterKeys.reduce((acc, key) => ({\n        [key]: new Set(),\n        ...acc\n    }), {});\n    for (const param of filterKeys) {\n        const operation = filters[param];\n        if (typeof index.indexes[param] === 'undefined') {\n            throw createError('UNKNOWN_FILTER_PROPERTY', param);\n        }\n        const { node, type, isArray } = index.indexes[param];\n        if (type === 'Bool') {\n            const idx = node;\n            const filteredIDs = operation ? idx.true : idx.false;\n            filtersMap[param] = setUnion(filtersMap[param], filteredIDs);\n            continue;\n        }\n        if (type === 'BKD') {\n            let reqOperation;\n            if ('radius' in operation) {\n                reqOperation = 'radius';\n            }\n            else if ('polygon' in operation) {\n                reqOperation = 'polygon';\n            }\n            else {\n                throw new Error(`Invalid operation ${operation}`);\n            }\n            if (reqOperation === 'radius') {\n                const { value, coordinates, unit = 'm', inside = true, highPrecision = false } = operation[reqOperation];\n                const distanceInMeters = convertDistanceToMeters(value, unit);\n                const ids = node.searchByRadius(coordinates, distanceInMeters, inside, undefined, highPrecision);\n                filtersMap[param] = addGeoResult(filtersMap[param], ids);\n            }\n            else {\n                const { coordinates, inside = true, highPrecision = false } = operation[reqOperation];\n                const ids = node.searchByPolygon(coordinates, inside, undefined, highPrecision);\n                filtersMap[param] = addGeoResult(filtersMap[param], ids);\n            }\n            continue;\n        }\n        if (type === 'Radix' && (typeof operation === 'string' || Array.isArray(operation))) {\n            for (const raw of [operation].flat()) {\n                const term = tokenizer.tokenize(raw, language, param);\n                for (const t of term) {\n                    const filteredIDsResults = node.find({ term: t, exact: true });\n                    filtersMap[param] = addFindResult(filtersMap[param], filteredIDsResults);\n                }\n            }\n            continue;\n        }\n        const operationKeys = Object.keys(operation);\n        if (operationKeys.length > 1) {\n            throw createError('INVALID_FILTER_OPERATION', operationKeys.length);\n        }\n        if (type === 'Flat') {\n            const results = new Set(isArray\n                ? node.filterArr(operation)\n                : node.filter(operation));\n            filtersMap[param] = setUnion(filtersMap[param], results);\n            continue;\n        }\n        if (type === 'AVL') {\n            const operationOpt = operationKeys[0];\n            const operationValue = operation[operationOpt];\n            let filteredIDs;\n            switch (operationOpt) {\n                case 'gt': {\n                    filteredIDs = node.greaterThan(operationValue, false);\n                    break;\n                }\n                case 'gte': {\n                    filteredIDs = node.greaterThan(operationValue, true);\n                    break;\n                }\n                case 'lt': {\n                    filteredIDs = node.lessThan(operationValue, false);\n                    break;\n                }\n                case 'lte': {\n                    filteredIDs = node.lessThan(operationValue, true);\n                    break;\n                }\n                case 'eq': {\n                    const ret = node.find(operationValue);\n                    filteredIDs = ret ?? new Set();\n                    break;\n                }\n                case 'between': {\n                    const [min, max] = operationValue;\n                    filteredIDs = node.rangeSearch(min, max);\n                    break;\n                }\n                default:\n                    throw createError('INVALID_FILTER_OPERATION', operationOpt);\n            }\n            filtersMap[param] = setUnion(filtersMap[param], filteredIDs);\n        }\n    }\n    // AND operation: calculate the intersection between all the IDs in filterMap\n    return setIntersection(...Object.values(filtersMap));\n}\nexport function getSearchableProperties(index) {\n    return index.searchableProperties;\n}\nexport function getSearchablePropertiesWithTypes(index) {\n    return index.searchablePropertiesWithTypes;\n}\nexport function load(sharedInternalDocumentStore, raw) {\n    const { indexes: rawIndexes, vectorIndexes: rawVectorIndexes, searchableProperties, searchablePropertiesWithTypes, frequencies, tokenOccurrences, avgFieldLength, fieldLengths } = raw;\n    const indexes = {};\n    const vectorIndexes = {};\n    for (const prop of Object.keys(rawIndexes)) {\n        const { node, type, isArray } = rawIndexes[prop];\n        switch (type) {\n            case 'Radix':\n                indexes[prop] = {\n                    type: 'Radix',\n                    node: RadixTree.fromJSON(node),\n                    isArray\n                };\n                break;\n            case 'Flat':\n                indexes[prop] = {\n                    type: 'Flat',\n                    node: FlatTree.fromJSON(node),\n                    isArray\n                };\n                break;\n            case 'AVL':\n                indexes[prop] = {\n                    type: 'AVL',\n                    node: AVLTree.fromJSON(node),\n                    isArray\n                };\n                break;\n            case 'BKD':\n                indexes[prop] = {\n                    type: 'BKD',\n                    node: BKDTree.fromJSON(node),\n                    isArray\n                };\n                break;\n            case 'Bool':\n                indexes[prop] = {\n                    type: 'Bool',\n                    node: BoolNode.fromJSON(node),\n                    isArray\n                };\n                break;\n            default:\n                indexes[prop] = rawIndexes[prop];\n        }\n    }\n    for (const idx of Object.keys(rawVectorIndexes)) {\n        vectorIndexes[idx] = {\n            type: 'Vector',\n            isArray: false,\n            node: VectorIndex.fromJSON(rawVectorIndexes[idx])\n        };\n    }\n    return {\n        sharedInternalDocumentStore,\n        indexes,\n        vectorIndexes,\n        searchableProperties,\n        searchablePropertiesWithTypes,\n        frequencies,\n        tokenOccurrences,\n        avgFieldLength,\n        fieldLengths\n    };\n}\nexport function save(index) {\n    const { indexes, vectorIndexes, searchableProperties, searchablePropertiesWithTypes, frequencies, tokenOccurrences, avgFieldLength, fieldLengths } = index;\n    const dumpVectorIndexes = {};\n    for (const idx of Object.keys(vectorIndexes)) {\n        dumpVectorIndexes[idx] = vectorIndexes[idx].node.toJSON();\n    }\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    const savedIndexes = {};\n    for (const name of Object.keys(indexes)) {\n        const { type, node, isArray } = indexes[name];\n        if (type === 'Flat' || type === 'Radix' || type === 'AVL' || type === 'BKD' || type === 'Bool') {\n            savedIndexes[name] = {\n                type,\n                node: node.toJSON(),\n                isArray\n            };\n        }\n        else {\n            savedIndexes[name] = indexes[name];\n            savedIndexes[name].node = savedIndexes[name].node.toJSON();\n        }\n    }\n    return {\n        indexes: savedIndexes,\n        vectorIndexes: dumpVectorIndexes,\n        searchableProperties,\n        searchablePropertiesWithTypes,\n        frequencies,\n        tokenOccurrences,\n        avgFieldLength,\n        fieldLengths\n    };\n}\nexport function createIndex() {\n    return {\n        create,\n        insert,\n        remove,\n        insertDocumentScoreParameters,\n        insertTokenScoreParameters,\n        removeDocumentScoreParameters,\n        removeTokenScoreParameters,\n        calculateResultScores,\n        search,\n        searchByWhereClause,\n        getSearchableProperties,\n        getSearchablePropertiesWithTypes,\n        load,\n        save\n    };\n}\nfunction addGeoResult(set, ids) {\n    if (!set) {\n        set = new Set();\n    }\n    const idsLength = ids.length;\n    for (let i = 0; i < idsLength; i++) {\n        const entry = ids[i].docIDs;\n        const idsLength = entry.length;\n        for (let j = 0; j < idsLength; j++) {\n            set.add(entry[j]);\n        }\n    }\n    return set;\n}\nfunction createGeoTokenScores(ids, centerPoint, highPrecision = false) {\n    const distanceFn = highPrecision ? BKDTree.vincentyDistance : BKDTree.haversineDistance;\n    const results = [];\n    // Calculate distances for all results to find the maximum\n    const distances = [];\n    for (const { point } of ids) {\n        distances.push(distanceFn(centerPoint, point));\n    }\n    const maxDistance = Math.max(...distances);\n    // Create results with inverse distance scores (higher score = closer)\n    let index = 0;\n    for (const { docIDs } of ids) {\n        const distance = distances[index];\n        // Use inverse score: closer points get higher scores\n        // Add 1 to avoid division by zero for points at exact center\n        const score = maxDistance - distance + 1;\n        for (const docID of docIDs) {\n            results.push([docID, score]);\n        }\n        index++;\n    }\n    // Sort by score (higher first - closer points)\n    results.sort((a, b) => b[1] - a[1]);\n    return results;\n}\nfunction isGeosearchOnlyQuery(filters, index) {\n    const filterKeys = Object.keys(filters);\n    if (filterKeys.length !== 1) {\n        return { isGeoOnly: false };\n    }\n    const param = filterKeys[0];\n    const operation = filters[param];\n    if (typeof index.indexes[param] === 'undefined') {\n        return { isGeoOnly: false };\n    }\n    const { type } = index.indexes[param];\n    if (type === 'BKD' && operation && ('radius' in operation || 'polygon' in operation)) {\n        return { isGeoOnly: true, geoProperty: param, geoOperation: operation };\n    }\n    return { isGeoOnly: false };\n}\nexport function searchByGeoWhereClause(index, filters) {\n    const indexTyped = index;\n    const geoInfo = isGeosearchOnlyQuery(filters, indexTyped);\n    if (!geoInfo.isGeoOnly || !geoInfo.geoProperty || !geoInfo.geoOperation) {\n        return null;\n    }\n    const { node } = indexTyped.indexes[geoInfo.geoProperty];\n    const operation = geoInfo.geoOperation;\n    // Cast node to BKDTree since we already verified it's type 'BKD'\n    const bkdNode = node;\n    let results;\n    if ('radius' in operation) {\n        const { value, coordinates, unit = 'm', inside = true, highPrecision = false } = operation.radius;\n        const centerPoint = coordinates;\n        const distanceInMeters = convertDistanceToMeters(value, unit);\n        results = bkdNode.searchByRadius(centerPoint, distanceInMeters, inside, 'asc', highPrecision);\n        return createGeoTokenScores(results, centerPoint, highPrecision);\n    }\n    else if ('polygon' in operation) {\n        const { coordinates, inside = true, highPrecision = false } = operation.polygon;\n        results = bkdNode.searchByPolygon(coordinates, inside, 'asc', highPrecision);\n        const centroid = BKDTree.calculatePolygonCentroid(coordinates);\n        return createGeoTokenScores(results, centroid, highPrecision);\n    }\n    return null;\n}\nfunction addFindResult(set, filteredIDsResults) {\n    if (!set) {\n        set = new Set();\n    }\n    const keys = Object.keys(filteredIDsResults);\n    const keysLength = keys.length;\n    for (let i = 0; i < keysLength; i++) {\n        const ids = filteredIDsResults[keys[i]];\n        const idsLength = ids.length;\n        for (let j = 0; j < idsLength; j++) {\n            set.add(ids[j]);\n        }\n    }\n    return set;\n}\n//# sourceMappingURL=index.js.map","import { createError } from '../errors.js';\nimport { isVectorType } from './defaults.js';\nimport { getInternalDocumentId } from './internal-document-id-store.js';\nimport { safeArrayPush } from '../utils.js';\nimport { getLocale } from './tokenizer/languages.js';\nfunction innerCreate(orama, sharedInternalDocumentStore, schema, sortableDeniedProperties, prefix) {\n    const sorter = {\n        language: orama.tokenizer.language,\n        sharedInternalDocumentStore,\n        enabled: true,\n        isSorted: true,\n        sortableProperties: [],\n        sortablePropertiesWithTypes: {},\n        sorts: {}\n    };\n    for (const [prop, type] of Object.entries(schema)) {\n        const path = `${prefix}${prefix ? '.' : ''}${prop}`;\n        if (sortableDeniedProperties.includes(path)) {\n            continue;\n        }\n        if (typeof type === 'object' && !Array.isArray(type)) {\n            // Nested\n            const ret = innerCreate(orama, sharedInternalDocumentStore, type, sortableDeniedProperties, path);\n            safeArrayPush(sorter.sortableProperties, ret.sortableProperties);\n            sorter.sorts = {\n                ...sorter.sorts,\n                ...ret.sorts\n            };\n            sorter.sortablePropertiesWithTypes = {\n                ...sorter.sortablePropertiesWithTypes,\n                ...ret.sortablePropertiesWithTypes\n            };\n            continue;\n        }\n        if (!isVectorType(type)) {\n            switch (type) {\n                case 'boolean':\n                case 'number':\n                case 'string':\n                    sorter.sortableProperties.push(path);\n                    sorter.sortablePropertiesWithTypes[path] = type;\n                    sorter.sorts[path] = {\n                        docs: new Map(),\n                        orderedDocsToRemove: new Map(),\n                        orderedDocs: [],\n                        type: type\n                    };\n                    break;\n                case 'geopoint':\n                case 'enum':\n                    // We don't allow to sort by enums or geopoints\n                    continue;\n                case 'enum[]':\n                case 'boolean[]':\n                case 'number[]':\n                case 'string[]':\n                    // We don't allow to sort by arrays\n                    continue;\n                default:\n                    throw createError('INVALID_SORT_SCHEMA_TYPE', Array.isArray(type) ? 'array' : type, path);\n            }\n        }\n    }\n    return sorter;\n}\nfunction create(orama, sharedInternalDocumentStore, schema, config) {\n    const isSortEnabled = config?.enabled !== false;\n    if (!isSortEnabled) {\n        return {\n            disabled: true\n        };\n    }\n    return innerCreate(orama, sharedInternalDocumentStore, schema, (config || {}).unsortableProperties || [], '');\n}\nfunction insert(sorter, prop, id, value) {\n    if (!sorter.enabled) {\n        return;\n    }\n    sorter.isSorted = false;\n    const internalId = getInternalDocumentId(sorter.sharedInternalDocumentStore, id);\n    const s = sorter.sorts[prop];\n    // This happen during a document updating\n    // Because we re-use the same internalId\n    // We need to clean-up the data structure before re-inserting\n    // to avoid duplicates in the orderedDocs array\n    // See: https://github.com/oramasearch/orama/issues/629\n    if (s.orderedDocsToRemove.has(internalId)) {\n        ensureOrderedDocsAreDeletedByProperty(sorter, prop);\n    }\n    s.docs.set(internalId, s.orderedDocs.length);\n    s.orderedDocs.push([internalId, value]);\n}\nfunction ensureIsSorted(sorter) {\n    if (sorter.isSorted || !sorter.enabled) {\n        return;\n    }\n    const properties = Object.keys(sorter.sorts);\n    for (const prop of properties) {\n        ensurePropertyIsSorted(sorter, prop);\n    }\n    sorter.isSorted = true;\n}\nfunction stringSort(language, value, d) {\n    return value[1].localeCompare(d[1], getLocale(language));\n}\nfunction numberSort(value, d) {\n    return value[1] - d[1];\n}\nfunction booleanSort(value, d) {\n    return d[1] ? -1 : 1;\n}\nfunction ensurePropertyIsSorted(sorter, prop) {\n    const s = sorter.sorts[prop];\n    let predicate;\n    switch (s.type) {\n        case 'string':\n            predicate = stringSort.bind(null, sorter.language);\n            break;\n        case 'number':\n            predicate = numberSort.bind(null);\n            break;\n        case 'boolean':\n            predicate = booleanSort.bind(null);\n            break;\n    }\n    s.orderedDocs.sort(predicate);\n    // Increment position for the greather documents\n    const orderedDocsLength = s.orderedDocs.length;\n    for (let i = 0; i < orderedDocsLength; i++) {\n        const docId = s.orderedDocs[i][0];\n        s.docs.set(docId, i);\n    }\n}\nfunction ensureOrderedDocsAreDeleted(sorter) {\n    const properties = Object.keys(sorter.sorts);\n    for (const prop of properties) {\n        ensureOrderedDocsAreDeletedByProperty(sorter, prop);\n    }\n}\nfunction ensureOrderedDocsAreDeletedByProperty(sorter, prop) {\n    const s = sorter.sorts[prop];\n    if (!s.orderedDocsToRemove.size)\n        return;\n    s.orderedDocs = s.orderedDocs.filter((doc) => !s.orderedDocsToRemove.has(doc[0]));\n    s.orderedDocsToRemove.clear();\n}\nfunction remove(sorter, prop, id) {\n    if (!sorter.enabled) {\n        return;\n    }\n    const s = sorter.sorts[prop];\n    const internalId = getInternalDocumentId(sorter.sharedInternalDocumentStore, id);\n    const index = s.docs.get(internalId);\n    if (!index)\n        return;\n    s.docs.delete(internalId);\n    s.orderedDocsToRemove.set(internalId, true);\n}\nfunction sortBy(sorter, docIds, by) {\n    if (!sorter.enabled) {\n        throw createError('SORT_DISABLED');\n    }\n    const property = by.property;\n    const isDesc = by.order === 'DESC';\n    const s = sorter.sorts[property];\n    if (!s) {\n        throw createError('UNABLE_TO_SORT_ON_UNKNOWN_FIELD', property, sorter.sortableProperties.join(', '));\n    }\n    ensureOrderedDocsAreDeletedByProperty(sorter, property);\n    ensureIsSorted(sorter);\n    docIds.sort((a, b) => {\n        // This sort algorithm works leveraging on\n        // that s.docs is a map of docId -> position\n        // If a document is not indexed, it will be not present in the map\n        const indexOfA = s.docs.get(getInternalDocumentId(sorter.sharedInternalDocumentStore, a[0]));\n        const indexOfB = s.docs.get(getInternalDocumentId(sorter.sharedInternalDocumentStore, b[0]));\n        const isAIndexed = typeof indexOfA !== 'undefined';\n        const isBIndexed = typeof indexOfB !== 'undefined';\n        if (!isAIndexed && !isBIndexed) {\n            return 0;\n        }\n        // unindexed documents are always at the end\n        if (!isAIndexed) {\n            return 1;\n        }\n        if (!isBIndexed) {\n            return -1;\n        }\n        return isDesc ? indexOfB - indexOfA : indexOfA - indexOfB;\n    });\n    return docIds;\n}\nfunction getSortableProperties(sorter) {\n    if (!sorter.enabled) {\n        return [];\n    }\n    return sorter.sortableProperties;\n}\nfunction getSortablePropertiesWithTypes(sorter) {\n    if (!sorter.enabled) {\n        return {};\n    }\n    return sorter.sortablePropertiesWithTypes;\n}\nexport function load(sharedInternalDocumentStore, raw) {\n    const rawDocument = raw;\n    if (!rawDocument.enabled) {\n        return {\n            enabled: false\n        };\n    }\n    const sorts = Object.keys(rawDocument.sorts).reduce((acc, prop) => {\n        const { docs, orderedDocs, type } = rawDocument.sorts[prop];\n        acc[prop] = {\n            docs: new Map(Object.entries(docs).map(([k, v]) => [+k, v])),\n            orderedDocsToRemove: new Map(),\n            orderedDocs,\n            type\n        };\n        return acc;\n    }, {});\n    return {\n        sharedInternalDocumentStore,\n        language: rawDocument.language,\n        sortableProperties: rawDocument.sortableProperties,\n        sortablePropertiesWithTypes: rawDocument.sortablePropertiesWithTypes,\n        sorts,\n        enabled: true,\n        isSorted: rawDocument.isSorted\n    };\n}\nexport function save(sorter) {\n    if (!sorter.enabled) {\n        return {\n            enabled: false\n        };\n    }\n    ensureOrderedDocsAreDeleted(sorter);\n    ensureIsSorted(sorter);\n    const sorts = Object.keys(sorter.sorts).reduce((acc, prop) => {\n        const { docs, orderedDocs, type } = sorter.sorts[prop];\n        acc[prop] = {\n            docs: Object.fromEntries(docs.entries()),\n            orderedDocs,\n            type\n        };\n        return acc;\n    }, {});\n    return {\n        language: sorter.language,\n        sortableProperties: sorter.sortableProperties,\n        sortablePropertiesWithTypes: sorter.sortablePropertiesWithTypes,\n        sorts,\n        enabled: sorter.enabled,\n        isSorted: sorter.isSorted\n    };\n}\nexport function createSorter() {\n    return {\n        create,\n        insert,\n        remove,\n        save,\n        load,\n        sortBy,\n        getSortableProperties,\n        getSortablePropertiesWithTypes\n    };\n}\n//# sourceMappingURL=sorter.js.map","const DIACRITICS_CHARCODE_START = 192;\nconst DIACRITICS_CHARCODE_END = 383;\nconst CHARCODE_REPLACE_MAPPING = [\n    65,\n    65,\n    65,\n    65,\n    65,\n    65,\n    65,\n    67,\n    69,\n    69,\n    69,\n    69,\n    73,\n    73,\n    73,\n    73,\n    69,\n    78,\n    79,\n    79,\n    79,\n    79,\n    79,\n    null,\n    79,\n    85,\n    85,\n    85,\n    85,\n    89,\n    80,\n    115,\n    97,\n    97,\n    97,\n    97,\n    97,\n    97,\n    97,\n    99,\n    101,\n    101,\n    101,\n    101,\n    105,\n    105,\n    105,\n    105,\n    101,\n    110,\n    111,\n    111,\n    111,\n    111,\n    111,\n    null,\n    111,\n    117,\n    117,\n    117,\n    117,\n    121,\n    112,\n    121,\n    65,\n    97,\n    65,\n    97,\n    65,\n    97,\n    67,\n    99,\n    67,\n    99,\n    67,\n    99,\n    67,\n    99,\n    68,\n    100,\n    68,\n    100,\n    69,\n    101,\n    69,\n    101,\n    69,\n    101,\n    69,\n    101,\n    69,\n    101,\n    71,\n    103,\n    71,\n    103,\n    71,\n    103,\n    71,\n    103,\n    72,\n    104,\n    72,\n    104,\n    73,\n    105,\n    73,\n    105,\n    73,\n    105,\n    73,\n    105,\n    73,\n    105,\n    73,\n    105,\n    74,\n    106,\n    75,\n    107,\n    107,\n    76,\n    108,\n    76,\n    108,\n    76,\n    108,\n    76,\n    108,\n    76,\n    108,\n    78,\n    110,\n    78,\n    110,\n    78,\n    110,\n    110,\n    78,\n    110,\n    79,\n    111,\n    79,\n    111,\n    79,\n    111,\n    79,\n    111,\n    82,\n    114,\n    82,\n    114,\n    82,\n    114,\n    83,\n    115,\n    83,\n    115,\n    83,\n    115,\n    83,\n    115,\n    84,\n    116,\n    84,\n    116,\n    84,\n    116,\n    85,\n    117,\n    85,\n    117,\n    85,\n    117,\n    85,\n    117,\n    85,\n    117,\n    85,\n    117,\n    87,\n    119,\n    89,\n    121,\n    89,\n    90,\n    122,\n    90,\n    122,\n    90,\n    122,\n    115\n];\nfunction replaceChar(charCode) {\n    if (charCode < DIACRITICS_CHARCODE_START || charCode > DIACRITICS_CHARCODE_END)\n        return charCode;\n    /* c8 ignore next  */\n    return CHARCODE_REPLACE_MAPPING[charCode - DIACRITICS_CHARCODE_START] || charCode;\n}\nexport function replaceDiacritics(str) {\n    const stringCharCode = [];\n    for (let idx = 0; idx < str.length; idx++) {\n        stringCharCode[idx] = replaceChar(str.charCodeAt(idx));\n    }\n    return String.fromCharCode(...stringCharCode);\n}\n//# sourceMappingURL=diacritics.js.map","// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\nconst step2List = {\n    ational: 'ate',\n    tional: 'tion',\n    enci: 'ence',\n    anci: 'ance',\n    izer: 'ize',\n    bli: 'ble',\n    alli: 'al',\n    entli: 'ent',\n    eli: 'e',\n    ousli: 'ous',\n    ization: 'ize',\n    ation: 'ate',\n    ator: 'ate',\n    alism: 'al',\n    iveness: 'ive',\n    fulness: 'ful',\n    ousness: 'ous',\n    aliti: 'al',\n    iviti: 'ive',\n    biliti: 'ble',\n    logi: 'log'\n};\nconst step3List = {\n    icate: 'ic',\n    ative: '',\n    alize: 'al',\n    iciti: 'ic',\n    ical: 'ic',\n    ful: '',\n    ness: ''\n};\n// Consonant\nconst c = '[^aeiou]';\n// Vowel\nconst v = '[aeiouy]';\n// Consonant sequence\nconst C = c + '[^aeiouy]*';\n// Vowel sequence\nconst V = v + '[aeiou]*';\n// [C]VC... is m>0\nconst mgr0 = '^(' + C + ')?' + V + C;\n// [C]VC[V] is m=1\nconst meq1 = '^(' + C + ')?' + V + C + '(' + V + ')?$';\n// [C]VCVC... is m>1\nconst mgr1 = '^(' + C + ')?' + V + C + V + C;\n// vowel in stem\nconst s_v = '^(' + C + ')?' + v;\nexport function stemmer(w) {\n    let stem;\n    let suffix;\n    let re;\n    let re2;\n    let re3;\n    let re4;\n    if (w.length < 3) {\n        return w;\n    }\n    const firstch = w.substring(0, 1);\n    if (firstch == 'y') {\n        w = firstch.toUpperCase() + w.substring(1);\n    }\n    re = /^(.+?)(ss|i)es$/;\n    re2 = /^(.+?)([^s])s$/;\n    if (re.test(w)) {\n        w = w.replace(re, '$1$2');\n    }\n    else if (re2.test(w)) {\n        w = w.replace(re2, '$1$2');\n    }\n    re = /^(.+?)eed$/;\n    re2 = /^(.+?)(ed|ing)$/;\n    if (re.test(w)) {\n        const fp = re.exec(w);\n        re = new RegExp(mgr0);\n        if (re.test(fp[1])) {\n            re = /.$/;\n            w = w.replace(re, '');\n        }\n    }\n    else if (re2.test(w)) {\n        const fp = re2.exec(w);\n        stem = fp[1];\n        re2 = new RegExp(s_v);\n        if (re2.test(stem)) {\n            w = stem;\n            re2 = /(at|bl|iz)$/;\n            re3 = new RegExp('([^aeiouylsz])\\\\1$');\n            re4 = new RegExp('^' + C + v + '[^aeiouwxy]$');\n            if (re2.test(w)) {\n                w = w + 'e';\n            }\n            else if (re3.test(w)) {\n                re = /.$/;\n                w = w.replace(re, '');\n            }\n            else if (re4.test(w)) {\n                w = w + 'e';\n            }\n        }\n    }\n    re = /^(.+?)y$/;\n    if (re.test(w)) {\n        const fp = re.exec(w);\n        stem = fp?.[1];\n        re = new RegExp(s_v);\n        if (stem && re.test(stem)) {\n            w = stem + 'i';\n        }\n    }\n    re =\n        /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;\n    if (re.test(w)) {\n        const fp = re.exec(w);\n        stem = fp?.[1];\n        suffix = fp?.[2];\n        re = new RegExp(mgr0);\n        if (stem && re.test(stem)) {\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            w = stem + step2List[suffix];\n        }\n    }\n    re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;\n    if (re.test(w)) {\n        const fp = re.exec(w);\n        stem = fp?.[1];\n        suffix = fp?.[2];\n        re = new RegExp(mgr0);\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        if (stem && re.test(stem)) {\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            w = stem + step3List[suffix];\n        }\n    }\n    re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;\n    re2 = /^(.+?)(s|t)(ion)$/;\n    if (re.test(w)) {\n        const fp = re.exec(w);\n        stem = fp?.[1];\n        re = new RegExp(mgr1);\n        if (stem && re.test(stem)) {\n            w = stem;\n        }\n    }\n    else if (re2.test(w)) {\n        const fp = re2.exec(w);\n        stem = fp?.[1] ?? '' + fp?.[2] ?? '';\n        re2 = new RegExp(mgr1);\n        if (re2.test(stem)) {\n            w = stem;\n        }\n    }\n    re = /^(.+?)e$/;\n    if (re.test(w)) {\n        const fp = re.exec(w);\n        stem = fp?.[1];\n        re = new RegExp(mgr1);\n        re2 = new RegExp(meq1);\n        re3 = new RegExp('^' + C + v + '[^aeiouwxy]$');\n        if (stem && (re.test(stem) || (re2.test(stem) && !re3.test(stem)))) {\n            w = stem;\n        }\n    }\n    re = /ll$/;\n    re2 = new RegExp(mgr1);\n    if (re.test(w) && re2.test(w)) {\n        re = /.$/;\n        w = w.replace(re, '');\n    }\n    if (firstch == 'y') {\n        w = firstch.toLowerCase() + w.substring(1);\n    }\n    return w;\n}\n//# sourceMappingURL=english-stemmer.js.map","import { createError } from '../../errors.js';\nimport { replaceDiacritics } from './diacritics.js';\nimport { SPLITTERS, SUPPORTED_LANGUAGES } from './languages.js';\nimport { stemmer as english } from './english-stemmer.js';\nexport function normalizeToken(prop, token, withCache = true) {\n    const key = `${this.language}:${prop}:${token}`;\n    if (withCache && this.normalizationCache.has(key)) {\n        return this.normalizationCache.get(key);\n    }\n    // Remove stopwords if enabled\n    if (this.stopWords?.includes(token)) {\n        if (withCache) {\n            this.normalizationCache.set(key, '');\n        }\n        return '';\n    }\n    // Apply stemming if enabled\n    if (this.stemmer && !this.stemmerSkipProperties.has(prop)) {\n        token = this.stemmer(token);\n    }\n    token = replaceDiacritics(token);\n    if (withCache) {\n        this.normalizationCache.set(key, token);\n    }\n    return token;\n}\n/* c8 ignore next 10 */\nfunction trim(text) {\n    while (text[text.length - 1] === '') {\n        text.pop();\n    }\n    while (text[0] === '') {\n        text.shift();\n    }\n    return text;\n}\nfunction tokenize(input, language, prop, withCache = true) {\n    if (language && language !== this.language) {\n        throw createError('LANGUAGE_NOT_SUPPORTED', language);\n    }\n    /* c8 ignore next 3 */\n    if (typeof input !== 'string') {\n        return [input];\n    }\n    const normalizeToken = this.normalizeToken.bind(this, prop ?? '');\n    let tokens;\n    if (prop && this.tokenizeSkipProperties.has(prop)) {\n        tokens = [normalizeToken(input, withCache)];\n    }\n    else {\n        const splitRule = SPLITTERS[this.language];\n        tokens = input\n            .toLowerCase()\n            .split(splitRule)\n            .map((t) => normalizeToken(t, withCache))\n            .filter(Boolean);\n    }\n    const trimTokens = trim(tokens);\n    if (!this.allowDuplicates) {\n        return Array.from(new Set(trimTokens));\n    }\n    return trimTokens;\n}\nexport function createTokenizer(config = {}) {\n    if (!config.language) {\n        config.language = 'english';\n    }\n    else if (!SUPPORTED_LANGUAGES.includes(config.language)) {\n        throw createError('LANGUAGE_NOT_SUPPORTED', config.language);\n    }\n    // Handle stemming - It is disabled by default\n    let stemmer;\n    if (config.stemming || (config.stemmer && !('stemming' in config))) {\n        if (config.stemmer) {\n            if (typeof config.stemmer !== 'function') {\n                throw createError('INVALID_STEMMER_FUNCTION_TYPE');\n            }\n            stemmer = config.stemmer;\n        }\n        else {\n            if (config.language === 'english') {\n                stemmer = english;\n            }\n            else {\n                throw createError('MISSING_STEMMER', config.language);\n            }\n        }\n    }\n    // Handle stopwords\n    let stopWords;\n    if (config.stopWords !== false) {\n        stopWords = [];\n        if (Array.isArray(config.stopWords)) {\n            stopWords = config.stopWords;\n        }\n        else if (typeof config.stopWords === 'function') {\n            stopWords = config.stopWords(stopWords);\n        }\n        else if (config.stopWords) {\n            throw createError('CUSTOM_STOP_WORDS_MUST_BE_FUNCTION_OR_ARRAY');\n        }\n        // Make sure stopWords is just an array of strings\n        if (!Array.isArray(stopWords)) {\n            throw createError('CUSTOM_STOP_WORDS_MUST_BE_FUNCTION_OR_ARRAY');\n        }\n        for (const s of stopWords) {\n            if (typeof s !== 'string') {\n                throw createError('CUSTOM_STOP_WORDS_MUST_BE_FUNCTION_OR_ARRAY');\n            }\n        }\n    }\n    // Create the tokenizer\n    const tokenizer = {\n        tokenize,\n        language: config.language,\n        stemmer,\n        stemmerSkipProperties: new Set(config.stemmerSkipProperties ? [config.stemmerSkipProperties].flat() : []),\n        tokenizeSkipProperties: new Set(config.tokenizeSkipProperties ? [config.tokenizeSkipProperties].flat() : []),\n        stopWords,\n        allowDuplicates: Boolean(config.allowDuplicates),\n        normalizeToken,\n        normalizationCache: new Map()\n    };\n    tokenizer.tokenize = tokenize.bind(tokenizer);\n    tokenizer.normalizeToken = normalizeToken;\n    return tokenizer;\n}\n//# sourceMappingURL=index.js.map","function create(sharedInternalDocumentStore) {\n    return {\n        sharedInternalDocumentStore,\n        rules: new Map()\n    };\n}\nfunction addRule(store, rule) {\n    if (store.rules.has(rule.id)) {\n        throw new Error(`PINNING_RULE_ALREADY_EXISTS: A pinning rule with id \"${rule.id}\" already exists. Use updateRule to modify it.`);\n    }\n    store.rules.set(rule.id, rule);\n}\nfunction updateRule(store, rule) {\n    if (!store.rules.has(rule.id)) {\n        throw new Error(`PINNING_RULE_NOT_FOUND: Cannot update pinning rule with id \"${rule.id}\" because it does not exist. Use addRule to create it.`);\n    }\n    store.rules.set(rule.id, rule);\n}\nfunction removeRule(store, ruleId) {\n    return store.rules.delete(ruleId);\n}\nfunction getRule(store, ruleId) {\n    return store.rules.get(ruleId);\n}\nfunction getAllRules(store) {\n    return Array.from(store.rules.values());\n}\nfunction matchesCondition(term, condition) {\n    const normalizedTerm = term.toLowerCase().trim();\n    const normalizedPattern = condition.pattern.toLowerCase().trim();\n    switch (condition.anchoring) {\n        case 'is':\n            return normalizedTerm === normalizedPattern;\n        case 'starts_with':\n            return normalizedTerm.startsWith(normalizedPattern);\n        case 'contains':\n            return normalizedTerm.includes(normalizedPattern);\n        default:\n            return false;\n    }\n}\nfunction matchesRule(term, rule) {\n    if (!term) {\n        return false;\n    }\n    // All conditions must match (AND logic)\n    return rule.conditions.every((condition) => matchesCondition(term, condition));\n}\nexport function getMatchingRules(store, term) {\n    if (!term) {\n        return [];\n    }\n    const matchingRules = [];\n    for (const rule of store.rules.values()) {\n        if (matchesRule(term, rule)) {\n            matchingRules.push(rule);\n        }\n    }\n    return matchingRules;\n}\nexport function load(sharedInternalDocumentStore, raw) {\n    const rawStore = raw;\n    return {\n        sharedInternalDocumentStore,\n        rules: new Map(rawStore?.rules ?? [])\n    };\n}\nexport function save(store) {\n    return {\n        rules: Array.from(store.rules.entries())\n    };\n}\nexport function createPinning() {\n    return {\n        create,\n        addRule,\n        updateRule,\n        removeRule,\n        getRule,\n        getAllRules,\n        getMatchingRules,\n        load,\n        save\n    };\n}\n//# sourceMappingURL=pinning.js.map","import { formatElapsedTime, getDocumentIndexId, getDocumentProperties, validateSchema } from '../components/defaults.js';\nimport { createDocumentsStore } from '../components/documents-store.js';\nimport { AVAILABLE_PLUGIN_HOOKS, getAllPluginsByHook } from '../components/plugins.js';\nimport { FUNCTION_COMPONENTS, OBJECT_COMPONENTS, runAfterCreate } from '../components/hooks.js';\nimport { createIndex } from '../components/index.js';\nimport { createInternalDocumentIDStore } from '../components/internal-document-id-store.js';\nimport { createSorter } from '../components/sorter.js';\nimport { createTokenizer } from '../components/tokenizer/index.js';\nimport { createPinning } from '../components/pinning.js';\nimport { createError } from '../errors.js';\nimport { uniqueId } from '../utils.js';\nfunction validateComponents(components) {\n    const defaultComponents = {\n        formatElapsedTime,\n        getDocumentIndexId,\n        getDocumentProperties,\n        validateSchema\n    };\n    for (const rawKey of FUNCTION_COMPONENTS) {\n        const key = rawKey;\n        if (components[key]) {\n            if (typeof components[key] !== 'function') {\n                throw createError('COMPONENT_MUST_BE_FUNCTION', key);\n            }\n        }\n        else {\n            components[key] = defaultComponents[key];\n        }\n    }\n    for (const rawKey of Object.keys(components)) {\n        if (!OBJECT_COMPONENTS.includes(rawKey) && !FUNCTION_COMPONENTS.includes(rawKey)) {\n            throw createError('UNSUPPORTED_COMPONENT', rawKey);\n        }\n    }\n}\nexport function create({ schema, sort, language, components, id, plugins }) {\n    if (!components) {\n        components = {};\n    }\n    for (const plugin of plugins ?? []) {\n        if (!('getComponents' in plugin)) {\n            continue;\n        }\n        if (typeof plugin.getComponents !== 'function') {\n            continue;\n        }\n        const pluginComponents = plugin.getComponents(schema);\n        const keys = Object.keys(pluginComponents);\n        for (const key of keys) {\n            if (components[key]) {\n                throw createError('PLUGIN_COMPONENT_CONFLICT', key, plugin.name);\n            }\n        }\n        components = {\n            ...components,\n            ...pluginComponents\n        };\n    }\n    if (!id) {\n        id = uniqueId();\n    }\n    let tokenizer = components.tokenizer;\n    let index = components.index;\n    let documentsStore = components.documentsStore;\n    let sorter = components.sorter;\n    let pinning = components.pinning;\n    if (!tokenizer) {\n        // Use the default tokenizer\n        tokenizer = createTokenizer({ language: language ?? 'english' });\n    }\n    else if (!tokenizer.tokenize) {\n        // If there is no tokenizer function, we assume this is a TokenizerConfig\n        tokenizer = createTokenizer(tokenizer);\n    }\n    else {\n        const customTokenizer = tokenizer;\n        tokenizer = customTokenizer;\n    }\n    if (components.tokenizer && language) {\n        // Accept language only if a tokenizer is not provided\n        throw createError('NO_LANGUAGE_WITH_CUSTOM_TOKENIZER');\n    }\n    const internalDocumentStore = createInternalDocumentIDStore();\n    index ||= createIndex();\n    sorter ||= createSorter();\n    documentsStore ||= createDocumentsStore();\n    pinning ||= createPinning();\n    // Validate all other components\n    validateComponents(components);\n    // Assign only recognized components and hooks\n    const { getDocumentProperties, getDocumentIndexId, validateSchema, formatElapsedTime } = components;\n    const orama = {\n        data: {},\n        caches: {},\n        schema,\n        tokenizer,\n        index,\n        sorter,\n        documentsStore,\n        pinning,\n        internalDocumentIDStore: internalDocumentStore,\n        getDocumentProperties,\n        getDocumentIndexId,\n        validateSchema,\n        beforeInsert: [],\n        afterInsert: [],\n        beforeRemove: [],\n        afterRemove: [],\n        beforeUpdate: [],\n        afterUpdate: [],\n        beforeUpsert: [],\n        afterUpsert: [],\n        beforeSearch: [],\n        afterSearch: [],\n        beforeInsertMultiple: [],\n        afterInsertMultiple: [],\n        beforeRemoveMultiple: [],\n        afterRemoveMultiple: [],\n        beforeUpdateMultiple: [],\n        afterUpdateMultiple: [],\n        beforeUpsertMultiple: [],\n        afterUpsertMultiple: [],\n        afterCreate: [],\n        formatElapsedTime,\n        id,\n        plugins,\n        version: getVersion()\n    };\n    orama.data = {\n        index: orama.index.create(orama, internalDocumentStore, schema),\n        docs: orama.documentsStore.create(orama, internalDocumentStore),\n        sorting: orama.sorter.create(orama, internalDocumentStore, schema, sort),\n        pinning: orama.pinning.create(internalDocumentStore)\n    };\n    for (const hook of AVAILABLE_PLUGIN_HOOKS) {\n        orama[hook] = (orama[hook] ?? []).concat(getAllPluginsByHook(orama, hook));\n    }\n    const afterCreate = orama['afterCreate'];\n    if (afterCreate) {\n        runAfterCreate(afterCreate, orama);\n    }\n    return orama;\n}\nfunction getVersion() {\n    return '{{VERSION}}';\n}\n//# sourceMappingURL=create.js.map","export function getByID(db, id) {\n    return db.documentsStore.get(db.data.docs, id);\n}\nexport function count(db) {\n    return db.documentsStore.count(db.data.docs);\n}\n//# sourceMappingURL=docs.js.map","import { isArrayType, isGeoPointType, isVectorType } from '../components.js';\nimport { isAsyncFunction, sleep } from '../utils.js';\nimport { runMultipleHook, runSingleHook } from '../components/hooks.js';\nimport { createError } from '../errors.js';\nimport { getInternalDocumentId } from '../components/internal-document-id-store.js';\nexport function insert(orama, doc, language, skipHooks, options) {\n    const errorProperty = orama.validateSchema(doc, orama.schema);\n    if (errorProperty) {\n        throw createError('SCHEMA_VALIDATION_FAILURE', errorProperty);\n    }\n    const asyncNeeded = isAsyncFunction(orama.beforeInsert) ||\n        isAsyncFunction(orama.afterInsert) ||\n        isAsyncFunction(orama.index.beforeInsert) ||\n        isAsyncFunction(orama.index.insert) ||\n        isAsyncFunction(orama.index.afterInsert);\n    if (asyncNeeded) {\n        return innerInsertAsync(orama, doc, language, skipHooks, options);\n    }\n    return innerInsertSync(orama, doc, language, skipHooks, options);\n}\nconst ENUM_TYPE = new Set(['enum', 'enum[]']);\nconst STRING_NUMBER_TYPE = new Set(['string', 'number']);\nasync function innerInsertAsync(orama, doc, language, skipHooks, options) {\n    const { index, docs } = orama.data;\n    const id = orama.getDocumentIndexId(doc);\n    if (typeof id !== 'string') {\n        throw createError('DOCUMENT_ID_MUST_BE_STRING', typeof id);\n    }\n    const internalId = getInternalDocumentId(orama.internalDocumentIDStore, id);\n    if (!skipHooks) {\n        await runSingleHook(orama.beforeInsert, orama, id, doc);\n    }\n    if (!orama.documentsStore.store(docs, id, internalId, doc)) {\n        throw createError('DOCUMENT_ALREADY_EXISTS', id);\n    }\n    const docsCount = orama.documentsStore.count(docs);\n    const indexableProperties = orama.index.getSearchableProperties(index);\n    const indexablePropertiesWithTypes = orama.index.getSearchablePropertiesWithTypes(index);\n    const indexableValues = orama.getDocumentProperties(doc, indexableProperties);\n    for (const [key, value] of Object.entries(indexableValues)) {\n        if (typeof value === 'undefined')\n            continue;\n        const actualType = typeof value;\n        const expectedType = indexablePropertiesWithTypes[key];\n        validateDocumentProperty(actualType, expectedType, key, value);\n    }\n    await indexAndSortDocument(orama, id, indexableProperties, indexableValues, docsCount, language, doc, options);\n    if (!skipHooks) {\n        await runSingleHook(orama.afterInsert, orama, id, doc);\n    }\n    return id;\n}\nfunction innerInsertSync(orama, doc, language, skipHooks, options) {\n    const { index, docs } = orama.data;\n    const id = orama.getDocumentIndexId(doc);\n    if (typeof id !== 'string') {\n        throw createError('DOCUMENT_ID_MUST_BE_STRING', typeof id);\n    }\n    const internalId = getInternalDocumentId(orama.internalDocumentIDStore, id);\n    if (!skipHooks) {\n        runSingleHook(orama.beforeInsert, orama, id, doc);\n    }\n    if (!orama.documentsStore.store(docs, id, internalId, doc)) {\n        throw createError('DOCUMENT_ALREADY_EXISTS', id);\n    }\n    const docsCount = orama.documentsStore.count(docs);\n    const indexableProperties = orama.index.getSearchableProperties(index);\n    const indexablePropertiesWithTypes = orama.index.getSearchablePropertiesWithTypes(index);\n    const indexableValues = orama.getDocumentProperties(doc, indexableProperties);\n    for (const [key, value] of Object.entries(indexableValues)) {\n        if (typeof value === 'undefined')\n            continue;\n        const actualType = typeof value;\n        const expectedType = indexablePropertiesWithTypes[key];\n        validateDocumentProperty(actualType, expectedType, key, value);\n    }\n    indexAndSortDocumentSync(orama, id, indexableProperties, indexableValues, docsCount, language, doc, options);\n    if (!skipHooks) {\n        runSingleHook(orama.afterInsert, orama, id, doc);\n    }\n    return id;\n}\nfunction validateDocumentProperty(actualType, expectedType, key, value) {\n    if (isGeoPointType(expectedType) &&\n        typeof value === 'object' &&\n        typeof value.lon === 'number' &&\n        typeof value.lat === 'number') {\n        return;\n    }\n    if (isVectorType(expectedType) && Array.isArray(value))\n        return;\n    if (isArrayType(expectedType) && Array.isArray(value))\n        return;\n    if (ENUM_TYPE.has(expectedType) && STRING_NUMBER_TYPE.has(actualType))\n        return;\n    if (actualType !== expectedType) {\n        throw createError('INVALID_DOCUMENT_PROPERTY', key, expectedType, actualType);\n    }\n}\nasync function indexAndSortDocument(orama, id, indexableProperties, indexableValues, docsCount, language, doc, options) {\n    for (const prop of indexableProperties) {\n        const value = indexableValues[prop];\n        if (typeof value === 'undefined')\n            continue;\n        const expectedType = orama.index.getSearchablePropertiesWithTypes(orama.data.index)[prop];\n        await orama.index.beforeInsert?.(orama.data.index, prop, id, value, expectedType, language, orama.tokenizer, docsCount);\n        const internalId = orama.internalDocumentIDStore.idToInternalId.get(id);\n        await orama.index.insert(orama.index, orama.data.index, prop, id, internalId, value, expectedType, language, orama.tokenizer, docsCount, options);\n        await orama.index.afterInsert?.(orama.data.index, prop, id, value, expectedType, language, orama.tokenizer, docsCount);\n    }\n    const sortableProperties = orama.sorter.getSortableProperties(orama.data.sorting);\n    const sortableValues = orama.getDocumentProperties(doc, sortableProperties);\n    for (const prop of sortableProperties) {\n        const value = sortableValues[prop];\n        if (typeof value === 'undefined')\n            continue;\n        const expectedType = orama.sorter.getSortablePropertiesWithTypes(orama.data.sorting)[prop];\n        orama.sorter.insert(orama.data.sorting, prop, id, value, expectedType, language);\n    }\n}\nfunction indexAndSortDocumentSync(orama, id, indexableProperties, indexableValues, docsCount, language, doc, options) {\n    for (const prop of indexableProperties) {\n        const value = indexableValues[prop];\n        if (typeof value === 'undefined')\n            continue;\n        const expectedType = orama.index.getSearchablePropertiesWithTypes(orama.data.index)[prop];\n        const internalDocumentId = getInternalDocumentId(orama.internalDocumentIDStore, id);\n        orama.index.beforeInsert?.(orama.data.index, prop, id, value, expectedType, language, orama.tokenizer, docsCount);\n        orama.index.insert(orama.index, orama.data.index, prop, id, internalDocumentId, value, expectedType, language, orama.tokenizer, docsCount, options);\n        orama.index.afterInsert?.(orama.data.index, prop, id, value, expectedType, language, orama.tokenizer, docsCount);\n    }\n    const sortableProperties = orama.sorter.getSortableProperties(orama.data.sorting);\n    const sortableValues = orama.getDocumentProperties(doc, sortableProperties);\n    for (const prop of sortableProperties) {\n        const value = sortableValues[prop];\n        if (typeof value === 'undefined')\n            continue;\n        const expectedType = orama.sorter.getSortablePropertiesWithTypes(orama.data.sorting)[prop];\n        orama.sorter.insert(orama.data.sorting, prop, id, value, expectedType, language);\n    }\n}\nexport function insertMultiple(orama, docs, batchSize, language, skipHooks, timeout) {\n    const asyncNeeded = isAsyncFunction(orama.afterInsertMultiple) ||\n        isAsyncFunction(orama.beforeInsertMultiple) ||\n        isAsyncFunction(orama.index.beforeInsert) ||\n        isAsyncFunction(orama.index.insert) ||\n        isAsyncFunction(orama.index.afterInsert);\n    if (asyncNeeded) {\n        return innerInsertMultipleAsync(orama, docs, batchSize, language, skipHooks, timeout);\n    }\n    return innerInsertMultipleSync(orama, docs, batchSize, language, skipHooks, timeout);\n}\nasync function innerInsertMultipleAsync(orama, docs, batchSize = 1000, language, skipHooks, timeout = 0) {\n    const ids = [];\n    const processNextBatch = async (startIndex) => {\n        const endIndex = Math.min(startIndex + batchSize, docs.length);\n        const batch = docs.slice(startIndex, endIndex);\n        for (const doc of batch) {\n            const options = { avlRebalanceThreshold: batch.length };\n            const id = await insert(orama, doc, language, skipHooks, options);\n            ids.push(id);\n        }\n        return endIndex;\n    };\n    const processAllBatches = async () => {\n        let currentIndex = 0;\n        while (currentIndex < docs.length) {\n            const startTime = Date.now();\n            currentIndex = await processNextBatch(currentIndex);\n            if (timeout > 0) {\n                const elapsedTime = Date.now() - startTime;\n                const waitTime = timeout - elapsedTime;\n                if (waitTime > 0) {\n                    sleep(waitTime);\n                }\n            }\n        }\n    };\n    await processAllBatches();\n    if (!skipHooks) {\n        await runMultipleHook(orama.afterInsertMultiple, orama, docs);\n    }\n    return ids;\n}\nfunction innerInsertMultipleSync(orama, docs, batchSize = 1000, language, skipHooks, timeout = 0) {\n    const ids = [];\n    let i = 0;\n    function processNextBatch() {\n        const batch = docs.slice(i * batchSize, (i + 1) * batchSize);\n        if (batch.length === 0)\n            return false;\n        for (const doc of batch) {\n            const options = { avlRebalanceThreshold: batch.length };\n            const id = insert(orama, doc, language, skipHooks, options);\n            ids.push(id);\n        }\n        i++;\n        return true;\n    }\n    function processAllBatches() {\n        const startTime = Date.now();\n        // eslint-disable-next-line no-constant-condition\n        while (true) {\n            const hasMoreBatches = processNextBatch();\n            if (!hasMoreBatches)\n                break;\n            if (timeout > 0) {\n                const elapsedTime = Date.now() - startTime;\n                if (elapsedTime >= timeout) {\n                    const remainingTime = timeout - (elapsedTime % timeout);\n                    if (remainingTime > 0) {\n                        sleep(remainingTime);\n                    }\n                }\n            }\n        }\n    }\n    processAllBatches();\n    if (!skipHooks) {\n        runMultipleHook(orama.afterInsertMultiple, orama, docs);\n    }\n    return ids;\n}\nexport function innerInsertMultiple(orama, docs, batchSize, language, skipHooks, timeout) {\n    const asyncNeeded = isAsyncFunction(orama.beforeInsert) ||\n        isAsyncFunction(orama.afterInsert) ||\n        isAsyncFunction(orama.index.beforeInsert) ||\n        isAsyncFunction(orama.index.insert) ||\n        isAsyncFunction(orama.index.afterInsert);\n    if (asyncNeeded) {\n        return innerInsertMultipleAsync(orama, docs, batchSize, language, skipHooks, timeout);\n    }\n    return innerInsertMultipleSync(orama, docs, batchSize, language, skipHooks, timeout);\n}\n//# sourceMappingURL=insert.js.map","import { runMultipleHook, runSingleHook } from '../components/hooks.js';\nimport { getDocumentIdFromInternalId, getInternalDocumentId } from '../components/internal-document-id-store.js';\nimport { isAsyncFunction } from '../utils.js';\nexport function remove(orama, id, language, skipHooks) {\n    const asyncNeeded = isAsyncFunction(orama.index.beforeRemove) ||\n        isAsyncFunction(orama.index.remove) ||\n        isAsyncFunction(orama.index.afterRemove);\n    if (asyncNeeded) {\n        return removeAsync(orama, id, language, skipHooks);\n    }\n    return removeSync(orama, id, language, skipHooks);\n}\nasync function removeAsync(orama, id, language, skipHooks) {\n    let result = true;\n    const { index, docs } = orama.data;\n    const doc = orama.documentsStore.get(docs, id);\n    if (!doc) {\n        return false;\n    }\n    const internalId = getInternalDocumentId(orama.internalDocumentIDStore, id);\n    const docId = getDocumentIdFromInternalId(orama.internalDocumentIDStore, internalId);\n    const docsCount = orama.documentsStore.count(docs);\n    if (!skipHooks) {\n        await runSingleHook(orama.beforeRemove, orama, docId);\n    }\n    const indexableProperties = orama.index.getSearchableProperties(index);\n    const indexablePropertiesWithTypes = orama.index.getSearchablePropertiesWithTypes(index);\n    const values = orama.getDocumentProperties(doc, indexableProperties);\n    for (const prop of indexableProperties) {\n        const value = values[prop];\n        if (typeof value === 'undefined') {\n            continue;\n        }\n        const schemaType = indexablePropertiesWithTypes[prop];\n        await orama.index.beforeRemove?.(orama.data.index, prop, docId, value, schemaType, language, orama.tokenizer, docsCount);\n        if (!(await orama.index.remove(orama.index, orama.data.index, prop, id, internalId, value, schemaType, language, orama.tokenizer, docsCount))) {\n            result = false;\n        }\n        await orama.index.afterRemove?.(orama.data.index, prop, docId, value, schemaType, language, orama.tokenizer, docsCount);\n    }\n    const sortableProperties = await orama.sorter.getSortableProperties(orama.data.sorting);\n    const sortableValues = await orama.getDocumentProperties(doc, sortableProperties);\n    for (const prop of sortableProperties) {\n        if (typeof sortableValues[prop] === 'undefined') {\n            continue;\n        }\n        orama.sorter.remove(orama.data.sorting, prop, id);\n    }\n    if (!skipHooks) {\n        await runSingleHook(orama.afterRemove, orama, docId);\n    }\n    orama.documentsStore.remove(orama.data.docs, id, internalId);\n    return result;\n}\nfunction removeSync(orama, id, language, skipHooks) {\n    let result = true;\n    const { index, docs } = orama.data;\n    const doc = orama.documentsStore.get(docs, id);\n    if (!doc) {\n        return false;\n    }\n    const internalId = getInternalDocumentId(orama.internalDocumentIDStore, id);\n    const docId = getDocumentIdFromInternalId(orama.internalDocumentIDStore, internalId);\n    const docsCount = orama.documentsStore.count(docs);\n    if (!skipHooks) {\n        runSingleHook(orama.beforeRemove, orama, docId);\n    }\n    const indexableProperties = orama.index.getSearchableProperties(index);\n    const indexablePropertiesWithTypes = orama.index.getSearchablePropertiesWithTypes(index);\n    const values = orama.getDocumentProperties(doc, indexableProperties);\n    for (const prop of indexableProperties) {\n        const value = values[prop];\n        if (typeof value === 'undefined') {\n            continue;\n        }\n        const schemaType = indexablePropertiesWithTypes[prop];\n        orama.index.beforeRemove?.(orama.data.index, prop, docId, value, schemaType, language, orama.tokenizer, docsCount);\n        if (!orama.index.remove(orama.index, orama.data.index, prop, id, internalId, value, schemaType, language, orama.tokenizer, docsCount)) {\n            result = false;\n        }\n        orama.index.afterRemove?.(orama.data.index, prop, docId, value, schemaType, language, orama.tokenizer, docsCount);\n    }\n    const sortableProperties = orama.sorter.getSortableProperties(orama.data.sorting);\n    const sortableValues = orama.getDocumentProperties(doc, sortableProperties);\n    for (const prop of sortableProperties) {\n        if (typeof sortableValues[prop] === 'undefined') {\n            continue;\n        }\n        orama.sorter.remove(orama.data.sorting, prop, id);\n    }\n    if (!skipHooks) {\n        runSingleHook(orama.afterRemove, orama, docId);\n    }\n    orama.documentsStore.remove(orama.data.docs, id, internalId);\n    return result;\n}\nexport function removeMultiple(orama, ids, batchSize, language, skipHooks) {\n    const asyncNeeded = isAsyncFunction(orama.index.beforeRemove) ||\n        isAsyncFunction(orama.index.remove) ||\n        isAsyncFunction(orama.index.afterRemove) ||\n        isAsyncFunction(orama.beforeRemoveMultiple) ||\n        isAsyncFunction(orama.afterRemoveMultiple);\n    if (asyncNeeded) {\n        return removeMultipleAsync(orama, ids, batchSize, language, skipHooks);\n    }\n    return removeMultipleSync(orama, ids, batchSize, language, skipHooks);\n}\nasync function removeMultipleAsync(orama, ids, batchSize, language, skipHooks) {\n    let result = 0;\n    if (!batchSize) {\n        batchSize = 1000;\n    }\n    const docIdsForHooks = skipHooks\n        ? []\n        : ids.map((id) => getDocumentIdFromInternalId(orama.internalDocumentIDStore, getInternalDocumentId(orama.internalDocumentIDStore, id)));\n    if (!skipHooks) {\n        await runMultipleHook(orama.beforeRemoveMultiple, orama, docIdsForHooks);\n    }\n    await new Promise((resolve, reject) => {\n        let i = 0;\n        async function _removeMultiple() {\n            const batch = ids.slice(i * batchSize, ++i * batchSize);\n            if (!batch.length) {\n                return resolve();\n            }\n            for (const doc of batch) {\n                try {\n                    if (await remove(orama, doc, language, skipHooks)) {\n                        result++;\n                    }\n                }\n                catch (err) {\n                    reject(err);\n                }\n            }\n            setTimeout(_removeMultiple, 0);\n        }\n        setTimeout(_removeMultiple, 0);\n    });\n    if (!skipHooks) {\n        await runMultipleHook(orama.afterRemoveMultiple, orama, docIdsForHooks);\n    }\n    return result;\n}\nfunction removeMultipleSync(orama, ids, batchSize, language, skipHooks) {\n    let result = 0;\n    if (!batchSize) {\n        batchSize = 1000;\n    }\n    const docIdsForHooks = skipHooks\n        ? []\n        : ids.map((id) => getDocumentIdFromInternalId(orama.internalDocumentIDStore, getInternalDocumentId(orama.internalDocumentIDStore, id)));\n    if (!skipHooks) {\n        runMultipleHook(orama.beforeRemoveMultiple, orama, docIdsForHooks);\n    }\n    let i = 0;\n    function _removeMultipleSync() {\n        const batch = ids.slice(i * batchSize, ++i * batchSize);\n        if (!batch.length)\n            return;\n        for (const doc of batch) {\n            if (remove(orama, doc, language, skipHooks)) {\n                result++;\n            }\n        }\n        setTimeout(_removeMultipleSync, 0);\n    }\n    _removeMultipleSync();\n    if (!skipHooks) {\n        runMultipleHook(orama.afterRemoveMultiple, orama, docIdsForHooks);\n    }\n    return result;\n}\n//# sourceMappingURL=remove.js.map","export const MODE_FULLTEXT_SEARCH = 'fulltext';\nexport const MODE_HYBRID_SEARCH = 'hybrid';\nexport const MODE_VECTOR_SEARCH = 'vector';\n//# sourceMappingURL=constants.js.map","import { createError } from '../errors.js';\nimport { getNested } from '../utils.js';\nfunction sortAsc(a, b) {\n    return a[1] - b[1];\n}\nfunction sortDesc(a, b) {\n    return b[1] - a[1];\n}\nfunction sortingPredicateBuilder(order = 'desc') {\n    return order.toLowerCase() === 'asc' ? sortAsc : sortDesc;\n}\nexport function getFacets(orama, results, facetsConfig) {\n    const facets = {};\n    const allIDs = results.map(([id]) => id);\n    const allDocs = orama.documentsStore.getMultiple(orama.data.docs, allIDs);\n    const facetKeys = Object.keys(facetsConfig);\n    const properties = orama.index.getSearchablePropertiesWithTypes(orama.data.index);\n    for (const facet of facetKeys) {\n        let values;\n        // Hack to guarantee the same order of ranges as specified by the user\n        // TODO: Revisit this once components land\n        if (properties[facet] === 'number') {\n            const { ranges } = facetsConfig[facet];\n            const rangesLength = ranges.length;\n            const tmp = Array.from({ length: rangesLength });\n            for (let i = 0; i < rangesLength; i++) {\n                const range = ranges[i];\n                tmp[i] = [`${range.from}-${range.to}`, 0];\n            }\n            values = Object.fromEntries(tmp);\n        }\n        facets[facet] = {\n            count: 0,\n            values: values ?? {}\n        };\n    }\n    const allDocsLength = allDocs.length;\n    for (let i = 0; i < allDocsLength; i++) {\n        const doc = allDocs[i];\n        for (const facet of facetKeys) {\n            const facetValue = facet.includes('.') ? getNested(doc, facet) : doc[facet];\n            const propertyType = properties[facet];\n            const facetValues = facets[facet].values;\n            switch (propertyType) {\n                case 'number': {\n                    const ranges = facetsConfig[facet].ranges;\n                    calculateNumberFacetBuilder(ranges, facetValues)(facetValue);\n                    break;\n                }\n                case 'number[]': {\n                    const alreadyInsertedValues = new Set();\n                    const ranges = facetsConfig[facet].ranges;\n                    const calculateNumberFacet = calculateNumberFacetBuilder(ranges, facetValues, alreadyInsertedValues);\n                    for (const v of facetValue) {\n                        calculateNumberFacet(v);\n                    }\n                    break;\n                }\n                case 'boolean':\n                case 'enum':\n                case 'string': {\n                    calculateBooleanStringOrEnumFacetBuilder(facetValues, propertyType)(facetValue);\n                    break;\n                }\n                case 'boolean[]':\n                case 'enum[]':\n                case 'string[]': {\n                    const alreadyInsertedValues = new Set();\n                    const innerType = propertyType === 'boolean[]' ? 'boolean' : 'string';\n                    const calculateBooleanStringOrEnumFacet = calculateBooleanStringOrEnumFacetBuilder(facetValues, innerType, alreadyInsertedValues);\n                    for (const v of facetValue) {\n                        calculateBooleanStringOrEnumFacet(v);\n                    }\n                    break;\n                }\n                default:\n                    throw createError('FACET_NOT_SUPPORTED', propertyType);\n            }\n        }\n    }\n    // TODO: We are looping again with the same previous keys, should we creat a single loop instead?\n    for (const facet of facetKeys) {\n        const currentFacet = facets[facet];\n        // Count the number of values for each facet\n        currentFacet.count = Object.keys(currentFacet.values).length;\n        // Sort only string-based facets\n        if (properties[facet] === 'string') {\n            const stringFacetDefinition = facetsConfig[facet];\n            const sortingPredicate = sortingPredicateBuilder(stringFacetDefinition.sort);\n            currentFacet.values = Object.fromEntries(Object.entries(currentFacet.values)\n                .sort(sortingPredicate)\n                .slice(stringFacetDefinition.offset ?? 0, stringFacetDefinition.limit ?? 10));\n        }\n    }\n    return facets;\n}\nfunction calculateNumberFacetBuilder(ranges, values, alreadyInsertedValues) {\n    return (facetValue) => {\n        for (const range of ranges) {\n            const value = `${range.from}-${range.to}`;\n            if (alreadyInsertedValues?.has(value)) {\n                continue;\n            }\n            if (facetValue >= range.from && facetValue <= range.to) {\n                if (values[value] === undefined) {\n                    values[value] = 1;\n                }\n                else {\n                    values[value]++;\n                    alreadyInsertedValues?.add(value);\n                }\n            }\n        }\n    };\n}\nfunction calculateBooleanStringOrEnumFacetBuilder(values, propertyType, alreadyInsertedValues) {\n    const defaultValue = propertyType === 'boolean' ? 'false' : '';\n    return (facetValue) => {\n        // String or boolean based facets\n        const value = facetValue?.toString() ?? defaultValue;\n        if (alreadyInsertedValues?.has(value)) {\n            return;\n        }\n        values[value] = (values[value] ?? 0) + 1;\n        alreadyInsertedValues?.add(value);\n    };\n}\n//# sourceMappingURL=facets.js.map","import { createError } from '../errors.js';\nimport { getNested, intersect, safeArrayPush } from '../utils.js';\nimport { getDocumentIdFromInternalId } from './internal-document-id-store.js';\nconst DEFAULT_REDUCE = {\n    reducer: (_, acc, res, index) => {\n        acc[index] = res;\n        return acc;\n    },\n    getInitialValue: (length) => Array.from({ length })\n};\nconst ALLOWED_TYPES = ['string', 'number', 'boolean'];\nexport function getGroups(orama, results, groupBy) {\n    const properties = groupBy.properties;\n    const propertiesLength = properties.length;\n    const schemaProperties = orama.index.getSearchablePropertiesWithTypes(orama.data.index);\n    for (let i = 0; i < propertiesLength; i++) {\n        const property = properties[i];\n        if (typeof schemaProperties[property] === 'undefined') {\n            throw createError('UNKNOWN_GROUP_BY_PROPERTY', property);\n        }\n        if (!ALLOWED_TYPES.includes(schemaProperties[property])) {\n            throw createError('INVALID_GROUP_BY_PROPERTY', property, ALLOWED_TYPES.join(', '), schemaProperties[property]);\n        }\n    }\n    const allIDs = results.map(([id]) => getDocumentIdFromInternalId(orama.internalDocumentIDStore, id));\n    // allDocs is already sorted by the sortBy algorithm\n    // We leverage on that to limit the number of documents returned\n    const allDocs = orama.documentsStore.getMultiple(orama.data.docs, allIDs);\n    const allDocsLength = allDocs.length;\n    const returnedCount = groupBy.maxResult || Number.MAX_SAFE_INTEGER;\n    const listOfValues = [];\n    // We want to understand which documents have which values\n    // and group them by the property and values\n    const g = {};\n    for (let i = 0; i < propertiesLength; i++) {\n        const groupByKey = properties[i];\n        const group = {\n            property: groupByKey,\n            perValue: {}\n        };\n        const values = new Set();\n        for (let j = 0; j < allDocsLength; j++) {\n            const doc = allDocs[j];\n            const value = getNested(doc, groupByKey);\n            // we don't want to consider undefined values\n            if (typeof value === 'undefined') {\n                continue;\n            }\n            const keyValue = typeof value !== 'boolean' ? value : '' + value;\n            const perValue = group.perValue[keyValue] ?? {\n                indexes: [],\n                count: 0\n            };\n            if (perValue.count >= returnedCount) {\n                // We stop early because for this value we react the limit\n                continue;\n            }\n            // We use the index to keep track of the original order\n            perValue.indexes.push(j);\n            perValue.count++;\n            group.perValue[keyValue] = perValue;\n            values.add(value);\n        }\n        listOfValues.push(Array.from(values));\n        g[groupByKey] = group;\n    }\n    const combinations = calculateCombination(listOfValues);\n    const combinationsLength = combinations.length;\n    const groups = [];\n    for (let i = 0; i < combinationsLength; i++) {\n        const combination = combinations[i];\n        const combinationLength = combination.length;\n        const group = {\n            values: [],\n            indexes: []\n        };\n        const indexes = [];\n        for (let j = 0; j < combinationLength; j++) {\n            const value = combination[j];\n            const property = properties[j];\n            indexes.push(g[property].perValue[(typeof value !== 'boolean' ? value : '' + value)].indexes);\n            group.values.push(value);\n        }\n        // We leverage on the index to sort the results by the original order\n        group.indexes = intersect(indexes).sort((a, b) => a - b);\n        // don't generate empty groups\n        if (group.indexes.length === 0) {\n            continue;\n        }\n        groups.push(group);\n    }\n    const groupsLength = groups.length;\n    const res = Array.from({ length: groupsLength });\n    for (let i = 0; i < groupsLength; i++) {\n        const group = groups[i];\n        const reduce = (groupBy.reduce || DEFAULT_REDUCE);\n        const docs = group.indexes.map((index) => {\n            return {\n                id: allIDs[index],\n                score: results[index][1],\n                document: allDocs[index]\n            };\n        });\n        const func = reduce.reducer.bind(null, group.values);\n        const initialValue = reduce.getInitialValue(group.indexes.length);\n        const aggregationValue = docs.reduce(func, initialValue);\n        res[i] = {\n            values: group.values,\n            result: aggregationValue\n        };\n    }\n    return res;\n}\nfunction calculateCombination(arrs, index = 0) {\n    if (index + 1 === arrs.length)\n        return arrs[index].map((item) => [item]);\n    const head = arrs[index];\n    const c = calculateCombination(arrs, index + 1);\n    const combinations = [];\n    for (const value of head) {\n        for (const combination of c) {\n            const result = [value];\n            safeArrayPush(result, combination);\n            combinations.push(result);\n        }\n    }\n    return combinations;\n}\n//# sourceMappingURL=groups.js.map","import { getInternalDocumentId } from './internal-document-id-store.js';\nimport { getMatchingRules } from './pinning.js';\n/**\n * Apply pinning rules to search results.\n * This function modifies the uniqueDocsArray by:\n * 1. Finding matching pin rules based on the search term\n * 2. Inserting pinned documents at their specified positions\n * 3. Assigning high scores to pinned documents to maintain their positions\n */\nexport function applyPinningRules(orama, pinningStore, uniqueDocsArray, searchTerm) {\n    // Get all matching rules for the current search term\n    const matchingRules = getMatchingRules(pinningStore, searchTerm);\n    if (matchingRules.length === 0) {\n        return uniqueDocsArray;\n    }\n    // Collect all promotions from matching rules\n    const allPromotions = matchingRules.flatMap((rule) => rule.consequence.promote);\n    // Sort promotions by position (lower position = higher priority)\n    allPromotions.sort((a, b) => a.position - b.position);\n    // Create a Set of pinned internal document IDs for fast lookup\n    const pinnedInternalIds = new Set();\n    const promotionsMap = new Map(); // Map internal ID to desired position\n    const positionsTaken = new Set(); // Track which positions are already claimed\n    for (const promotion of allPromotions) {\n        const internalId = getInternalDocumentId(orama.internalDocumentIDStore, promotion.doc_id);\n        // Skip if document doesn't exist in the database or if this position is already taken\n        if (internalId === undefined) {\n            continue;\n        }\n        // If this document is already pinned to a different position, keep the first one (lower position)\n        if (promotionsMap.has(internalId)) {\n            const existingPosition = promotionsMap.get(internalId);\n            if (promotion.position < existingPosition) {\n                promotionsMap.set(internalId, promotion.position);\n            }\n            continue;\n        }\n        // If this position is already taken, skip this promotion (first wins)\n        if (positionsTaken.has(promotion.position)) {\n            continue;\n        }\n        pinnedInternalIds.add(internalId);\n        promotionsMap.set(internalId, promotion.position);\n        positionsTaken.add(promotion.position);\n    }\n    // If no valid promotions were found, return original results\n    if (promotionsMap.size === 0) {\n        return uniqueDocsArray;\n    }\n    // Remove pinned documents from the original results\n    const unpinnedResults = uniqueDocsArray.filter(([id]) => !pinnedInternalIds.has(id));\n    // Create pinned results with their scores\n    // We assign a very high base score and subtract the position to maintain order\n    const BASE_PIN_SCORE = 1000000;\n    const pinnedResults = [];\n    for (const [internalId, position] of promotionsMap.entries()) {\n        // Check if the document exists in the original results\n        const existingResult = uniqueDocsArray.find(([id]) => id === internalId);\n        if (existingResult) {\n            // Document was in original results, use its score but mark it as pinned\n            pinnedResults.push([internalId, BASE_PIN_SCORE - position]);\n        }\n        else {\n            // Document was NOT in original results (promoted from outside the result set)\n            // Verify the document actually exists in the database before promoting it\n            const doc = orama.documentsStore.get(orama.data.docs, internalId);\n            if (doc) {\n                // Assign a score of 0 (as per PR #251 behavior)\n                pinnedResults.push([internalId, 0]);\n            }\n        }\n    }\n    // Sort pinned results by their assigned scores (which correspond to positions)\n    pinnedResults.sort((a, b) => {\n        const posA = promotionsMap.get(a[0]) ?? Infinity;\n        const posB = promotionsMap.get(b[0]) ?? Infinity;\n        return posA - posB;\n    });\n    // Insert pinned results at their specified positions\n    const finalResults = [];\n    const pinnedByPosition = new Map();\n    for (const pinnedResult of pinnedResults) {\n        const position = promotionsMap.get(pinnedResult[0]);\n        pinnedByPosition.set(position, pinnedResult);\n    }\n    let unpinnedIndex = 0;\n    let currentPosition = 0;\n    // Build the final results array by interleaving pinned and unpinned results\n    while (currentPosition < unpinnedResults.length + pinnedResults.length) {\n        if (pinnedByPosition.has(currentPosition)) {\n            // Insert pinned document at this position\n            finalResults.push(pinnedByPosition.get(currentPosition));\n            currentPosition++;\n        }\n        else if (unpinnedIndex < unpinnedResults.length) {\n            // Insert next unpinned document\n            finalResults.push(unpinnedResults[unpinnedIndex]);\n            unpinnedIndex++;\n            currentPosition++;\n        }\n        else {\n            // No more unpinned results, add remaining pinned results\n            break;\n        }\n    }\n    // Add any remaining pinned results that have positions beyond the unpinned results length\n    for (const [position, pinnedResult] of pinnedByPosition.entries()) {\n        if (position >= finalResults.length) {\n            finalResults.push(pinnedResult);\n        }\n    }\n    return finalResults;\n}\n//# sourceMappingURL=pinning-manager.js.map","import { getFacets } from '../components/facets.js';\nimport { getGroups } from '../components/groups.js';\nimport { runAfterSearch, runBeforeSearch } from '../components/hooks.js';\nimport { getInternalDocumentId } from '../components/internal-document-id-store.js';\nimport { searchByGeoWhereClause } from '../components/index.js';\nimport { applyPinningRules } from '../components/pinning-manager.js';\nimport { createError } from '../errors.js';\nimport { getNanosecondsTime, removeVectorsFromHits, sortTokenScorePredicate } from '../utils.js';\nimport { count } from './docs.js';\nimport { fetchDocuments, fetchDocumentsWithDistinct } from './search.js';\nexport function innerFullTextSearch(orama, params, language) {\n    const { term, properties } = params;\n    const index = orama.data.index;\n    // Get searchable string properties\n    let propertiesToSearch = orama.caches['propertiesToSearch'];\n    if (!propertiesToSearch) {\n        const propertiesToSearchWithTypes = orama.index.getSearchablePropertiesWithTypes(index);\n        propertiesToSearch = orama.index.getSearchableProperties(index);\n        propertiesToSearch = propertiesToSearch.filter((prop) => propertiesToSearchWithTypes[prop].startsWith('string'));\n        orama.caches['propertiesToSearch'] = propertiesToSearch;\n    }\n    if (properties && properties !== '*') {\n        for (const prop of properties) {\n            if (!propertiesToSearch.includes(prop)) {\n                throw createError('UNKNOWN_INDEX', prop, propertiesToSearch.join(', '));\n            }\n        }\n        propertiesToSearch = propertiesToSearch.filter((prop) => properties.includes(prop));\n    }\n    // If filters are enabled, we need to get the IDs of the documents that match the filters.\n    const hasFilters = Object.keys(params.where ?? {}).length > 0;\n    let whereFiltersIDs;\n    if (hasFilters) {\n        whereFiltersIDs = orama.index.searchByWhereClause(index, orama.tokenizer, params.where, language);\n    }\n    let uniqueDocsIDs;\n    // We need to perform the search if:\n    // - we have a search term\n    // - or we have properties to search\n    //   in this case, we need to return all the documents that contains at least one of the given properties\n    const threshold = params.threshold !== undefined && params.threshold !== null ? params.threshold : 1;\n    if (term || properties) {\n        const docsCount = count(orama);\n        uniqueDocsIDs = orama.index.search(index, term || '', orama.tokenizer, language, propertiesToSearch, params.exact || false, params.tolerance || 0, params.boost || {}, applyDefault(params.relevance), docsCount, whereFiltersIDs, threshold);\n        // When exact is true and we have a term, filter results to only include documents\n        // where the original text contains the exact search term (case-sensitive).\n        // This is a highly requested feature and although Orama is not case-sensitive by design,\n        // this is a reasonable compromise.\n        if (params.exact && term) {\n            const searchTerms = term.trim().split(/\\s+/);\n            uniqueDocsIDs = uniqueDocsIDs.filter(([docId]) => {\n                const doc = orama.documentsStore.get(orama.data.docs, docId);\n                if (!doc)\n                    return false;\n                // Check if any of the specified properties contain the exact search term\n                for (const prop of propertiesToSearch) {\n                    const propValue = getPropValue(doc, prop);\n                    if (typeof propValue === 'string') {\n                        // Check if all search terms appear as complete words in the property value\n                        const hasAllTerms = searchTerms.every((searchTerm) => {\n                            // Create a regex that matches the term as a complete word (case-sensitive)\n                            const regex = new RegExp(`\\\\b${escapeRegex(searchTerm)}\\\\b`);\n                            return regex.test(propValue);\n                        });\n                        if (hasAllTerms) {\n                            return true;\n                        }\n                    }\n                }\n                return false;\n            });\n        }\n    }\n    else {\n        // Check if this is a geosearch-only query first\n        if (hasFilters) {\n            const geoResults = searchByGeoWhereClause(index, params.where);\n            if (geoResults) {\n                // This is a geosearch-only query with distance scoring\n                uniqueDocsIDs = geoResults;\n            }\n            else {\n                // Regular filter query without search term\n                const docIds = whereFiltersIDs ? Array.from(whereFiltersIDs) : [];\n                uniqueDocsIDs = docIds.map((k) => [+k, 0]);\n            }\n        }\n        else {\n            // No search term and no filters - return all documents\n            const docIds = Object.keys(orama.documentsStore.getAll(orama.data.docs));\n            uniqueDocsIDs = docIds.map((k) => [+k, 0]);\n        }\n    }\n    return uniqueDocsIDs;\n}\n// Helper function to escape regex special characters\nfunction escapeRegex(str) {\n    return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n// Helper function to get nested property value\nfunction getPropValue(obj, path) {\n    const keys = path.split('.');\n    let value = obj;\n    for (const key of keys) {\n        if (value && typeof value === 'object' && key in value) {\n            value = value[key];\n        }\n        else {\n            return undefined;\n        }\n    }\n    return value;\n}\nexport function fullTextSearch(orama, params, language) {\n    const timeStart = getNanosecondsTime();\n    function performSearchLogic() {\n        const vectorProperties = Object.keys(orama.data.index.vectorIndexes);\n        const shouldCalculateFacets = params.facets && Object.keys(params.facets).length > 0;\n        const { limit = 10, offset = 0, distinctOn, includeVectors = false } = params;\n        const isPreflight = params.preflight === true;\n        let uniqueDocsArray = innerFullTextSearch(orama, params, language);\n        if (params.sortBy) {\n            if (typeof params.sortBy === 'function') {\n                const ids = uniqueDocsArray.map(([id]) => id);\n                const docs = orama.documentsStore.getMultiple(orama.data.docs, ids);\n                const docsWithIdAndScore = docs.map((d, i) => [\n                    uniqueDocsArray[i][0],\n                    uniqueDocsArray[i][1],\n                    d\n                ]);\n                docsWithIdAndScore.sort(params.sortBy);\n                uniqueDocsArray = docsWithIdAndScore.map(([id, score]) => [id, score]);\n            }\n            else {\n                uniqueDocsArray = orama.sorter\n                    .sortBy(orama.data.sorting, uniqueDocsArray, params.sortBy)\n                    .map(([id, score]) => [getInternalDocumentId(orama.internalDocumentIDStore, id), score]);\n            }\n        }\n        else {\n            uniqueDocsArray = uniqueDocsArray.sort(sortTokenScorePredicate);\n        }\n        // Apply pinning rules after sorting but before pagination\n        uniqueDocsArray = applyPinningRules(orama, orama.data.pinning, uniqueDocsArray, params.term);\n        let results;\n        if (!isPreflight) {\n            results = distinctOn\n                ? fetchDocumentsWithDistinct(orama, uniqueDocsArray, offset, limit, distinctOn)\n                : fetchDocuments(orama, uniqueDocsArray, offset, limit);\n        }\n        const searchResult = {\n            elapsed: {\n                formatted: '',\n                raw: 0\n            },\n            hits: [],\n            count: uniqueDocsArray.length\n        };\n        if (typeof results !== 'undefined') {\n            searchResult.hits = results.filter(Boolean);\n            if (!includeVectors) {\n                removeVectorsFromHits(searchResult, vectorProperties);\n            }\n        }\n        if (shouldCalculateFacets) {\n            const facets = getFacets(orama, uniqueDocsArray, params.facets);\n            searchResult.facets = facets;\n        }\n        if (params.groupBy) {\n            searchResult.groups = getGroups(orama, uniqueDocsArray, params.groupBy);\n        }\n        searchResult.elapsed = orama.formatElapsedTime(getNanosecondsTime() - timeStart);\n        return searchResult;\n    }\n    async function executeSearchAsync() {\n        if (orama.beforeSearch) {\n            await runBeforeSearch(orama.beforeSearch, orama, params, language);\n        }\n        const searchResult = performSearchLogic();\n        if (orama.afterSearch) {\n            await runAfterSearch(orama.afterSearch, orama, params, language, searchResult);\n        }\n        return searchResult;\n    }\n    const asyncNeeded = orama.beforeSearch?.length || orama.afterSearch?.length;\n    if (asyncNeeded) {\n        return executeSearchAsync();\n    }\n    return performSearchLogic();\n}\nexport const defaultBM25Params = {\n    k: 1.2,\n    b: 0.75,\n    d: 0.5\n};\nfunction applyDefault(bm25Relevance) {\n    const r = bm25Relevance ?? {};\n    r.k = r.k ?? defaultBM25Params.k;\n    r.b = r.b ?? defaultBM25Params.b;\n    r.d = r.d ?? defaultBM25Params.d;\n    return r;\n}\n//# sourceMappingURL=search-fulltext.js.map","import { getDocumentIdFromInternalId } from '../components/internal-document-id-store.js';\nimport { createError } from '../errors.js';\nimport { getNested } from '../utils.js';\nimport { MODE_FULLTEXT_SEARCH, MODE_HYBRID_SEARCH, MODE_VECTOR_SEARCH } from '../constants.js';\nimport { fullTextSearch } from './search-fulltext.js';\nimport { searchVector } from './search-vector.js';\nimport { hybridSearch } from './search-hybrid.js';\nexport function search(orama, params, language) {\n    const mode = params.mode ?? MODE_FULLTEXT_SEARCH;\n    if (mode === MODE_FULLTEXT_SEARCH) {\n        return fullTextSearch(orama, params, language);\n    }\n    if (mode === MODE_VECTOR_SEARCH) {\n        return searchVector(orama, params);\n    }\n    if (mode === MODE_HYBRID_SEARCH) {\n        return hybridSearch(orama, params);\n    }\n    throw createError('INVALID_SEARCH_MODE', mode);\n}\nexport function fetchDocumentsWithDistinct(orama, uniqueDocsArray, offset, limit, distinctOn) {\n    const docs = orama.data.docs;\n    // Keep track which values we already seen\n    const values = new Map();\n    // We cannot know how many results we will have in the end,\n    // so we need cannot pre-allocate the array.\n    const results = [];\n    const resultIDs = new Set();\n    const uniqueDocsArrayLength = uniqueDocsArray.length;\n    let count = 0;\n    for (let i = 0; i < uniqueDocsArrayLength; i++) {\n        const idAndScore = uniqueDocsArray[i];\n        // If there are no more results, just break the loop\n        if (typeof idAndScore === 'undefined') {\n            continue;\n        }\n        const [id, score] = idAndScore;\n        if (resultIDs.has(id)) {\n            continue;\n        }\n        const doc = orama.documentsStore.get(docs, id);\n        const value = getNested(doc, distinctOn);\n        if (typeof value === 'undefined' || values.has(value)) {\n            continue;\n        }\n        values.set(value, true);\n        count++;\n        // We shouldn't consider the document if it's not in the offset range\n        if (count <= offset) {\n            continue;\n        }\n        results.push({ id: getDocumentIdFromInternalId(orama.internalDocumentIDStore, id), score, document: doc });\n        resultIDs.add(id);\n        // reached the limit, break the loop\n        if (count >= offset + limit) {\n            break;\n        }\n    }\n    return results;\n}\nexport function fetchDocuments(orama, uniqueDocsArray, offset, limit) {\n    const docs = orama.data.docs;\n    const results = Array.from({\n        length: limit\n    });\n    const resultIDs = new Set();\n    // We already have the list of ALL the document IDs containing the search terms.\n    // We loop over them starting from a positional value \"offset\" and ending at \"offset + limit\"\n    // to provide pagination capabilities to the search.\n    for (let i = offset; i < limit + offset; i++) {\n        const idAndScore = uniqueDocsArray[i];\n        // If there are no more results, just break the loop\n        if (typeof idAndScore === 'undefined') {\n            break;\n        }\n        const [id, score] = idAndScore;\n        if (!resultIDs.has(id)) {\n            // We retrieve the full document only AFTER making sure that we really want it.\n            // We never retrieve the full document preventively.\n            const fullDoc = orama.documentsStore.get(docs, id);\n            results[i] = { id: getDocumentIdFromInternalId(orama.internalDocumentIDStore, id), score, document: fullDoc };\n            resultIDs.add(id);\n        }\n    }\n    return results;\n}\n//# sourceMappingURL=search.js.map","import { getNanosecondsTime, formatNanoseconds, sortTokenScorePredicate } from '../utils.js';\nimport { getFacets } from '../components/facets.js';\nimport { createError } from '../errors.js';\nimport { getGroups } from '../components/groups.js';\nimport { getDocumentIdFromInternalId } from '../components/internal-document-id-store.js';\nimport { runBeforeSearch, runAfterSearch } from '../components/hooks.js';\nimport { DEFAULT_SIMILARITY } from '../trees/vector.js';\nimport { applyPinningRules } from '../components/pinning-manager.js';\nexport function innerVectorSearch(orama, params, language) {\n    const vector = params.vector;\n    if (vector && (!('value' in vector) || !('property' in vector))) {\n        throw createError('INVALID_VECTOR_INPUT', Object.keys(vector).join(', '));\n    }\n    const vectorIndex = orama.data.index.vectorIndexes[vector.property];\n    if (!vectorIndex) {\n        throw createError('UNKNOWN_VECTOR_PROPERTY', vector.property);\n    }\n    const vectorSize = vectorIndex.node.size;\n    if (vector?.value.length !== vectorSize) {\n        if (vector?.property === undefined || vector?.value.length === undefined) {\n            throw createError('INVALID_INPUT_VECTOR', 'undefined', vectorSize, 'undefined');\n        }\n        throw createError('INVALID_INPUT_VECTOR', vector.property, vectorSize, vector.value.length);\n    }\n    const index = orama.data.index;\n    let whereFiltersIDs;\n    const hasFilters = Object.keys(params.where ?? {}).length > 0;\n    if (hasFilters) {\n        whereFiltersIDs = orama.index.searchByWhereClause(index, orama.tokenizer, params.where, language);\n    }\n    return vectorIndex.node.find(vector.value, params.similarity ?? DEFAULT_SIMILARITY, whereFiltersIDs);\n}\nexport function searchVector(orama, params, language = 'english') {\n    const timeStart = getNanosecondsTime();\n    function performSearchLogic() {\n        let results = innerVectorSearch(orama, params, language).sort(sortTokenScorePredicate);\n        // Apply pinning rules after sorting but before pagination\n        results = applyPinningRules(orama, orama.data.pinning, results, undefined);\n        let facetsResults = [];\n        const shouldCalculateFacets = params.facets && Object.keys(params.facets).length > 0;\n        if (shouldCalculateFacets) {\n            const facets = getFacets(orama, results, params.facets);\n            facetsResults = facets;\n        }\n        const vectorProperty = params.vector.property;\n        const includeVectors = params.includeVectors ?? false;\n        const limit = params.limit ?? 10;\n        const offset = params.offset ?? 0;\n        const docs = Array.from({ length: limit });\n        for (let i = 0; i < limit; i++) {\n            const result = results[i + offset];\n            if (!result) {\n                break;\n            }\n            const doc = orama.data.docs.docs[result[0]];\n            if (doc) {\n                if (!includeVectors) {\n                    doc[vectorProperty] = null;\n                }\n                const newDoc = {\n                    id: getDocumentIdFromInternalId(orama.internalDocumentIDStore, result[0]),\n                    score: result[1],\n                    document: doc\n                };\n                docs[i] = newDoc;\n            }\n        }\n        let groups = [];\n        if (params.groupBy) {\n            groups = getGroups(orama, results, params.groupBy);\n        }\n        const timeEnd = getNanosecondsTime();\n        const elapsedTime = timeEnd - timeStart;\n        return {\n            count: results.length,\n            hits: docs.filter(Boolean),\n            elapsed: {\n                raw: Number(elapsedTime),\n                formatted: formatNanoseconds(elapsedTime)\n            },\n            ...(facetsResults ? { facets: facetsResults } : {}),\n            ...(groups ? { groups } : {})\n        };\n    }\n    async function executeSearchAsync() {\n        if (orama.beforeSearch) {\n            await runBeforeSearch(orama.beforeSearch, orama, params, language);\n        }\n        const results = performSearchLogic();\n        if (orama.afterSearch) {\n            await runAfterSearch(orama.afterSearch, orama, params, language, results);\n        }\n        return results;\n    }\n    const asyncNeeded = orama.beforeSearch?.length || orama.afterSearch?.length;\n    if (asyncNeeded) {\n        return executeSearchAsync();\n    }\n    // Sync path\n    return performSearchLogic();\n}\n//# sourceMappingURL=search-vector.js.map","import { getNanosecondsTime, formatNanoseconds, removeVectorsFromHits } from '../utils.js';\nimport { getFacets } from '../components/facets.js';\nimport { getGroups } from '../components/groups.js';\nimport { fetchDocuments } from './search.js';\nimport { innerFullTextSearch } from './search-fulltext.js';\nimport { innerVectorSearch } from './search-vector.js';\nimport { runAfterSearch, runBeforeSearch } from '../components/hooks.js';\nimport { applyPinningRules } from '../components/pinning-manager.js';\nexport function innerHybridSearch(orama, params, language) {\n    const fullTextIDs = minMaxScoreNormalization(innerFullTextSearch(orama, params, language));\n    const vectorIDs = innerVectorSearch(orama, params, language);\n    const hybridWeights = params.hybridWeights;\n    return mergeAndRankResults(fullTextIDs, vectorIDs, params.term ?? '', hybridWeights);\n}\nexport function hybridSearch(orama, params, language) {\n    const timeStart = getNanosecondsTime();\n    function performSearchLogic() {\n        let uniqueTokenScores = innerHybridSearch(orama, params, language);\n        // Apply pinning rules after merging results but before pagination\n        uniqueTokenScores = applyPinningRules(orama, orama.data.pinning, uniqueTokenScores, params.term);\n        let facetsResults;\n        const shouldCalculateFacets = params.facets && Object.keys(params.facets).length > 0;\n        if (shouldCalculateFacets) {\n            facetsResults = getFacets(orama, uniqueTokenScores, params.facets);\n        }\n        let groups;\n        if (params.groupBy) {\n            groups = getGroups(orama, uniqueTokenScores, params.groupBy);\n        }\n        const offset = params.offset ?? 0;\n        const limit = params.limit ?? 10;\n        const results = fetchDocuments(orama, uniqueTokenScores, offset, limit).filter(Boolean);\n        const timeEnd = getNanosecondsTime();\n        const returningResults = {\n            count: uniqueTokenScores.length,\n            elapsed: {\n                raw: Number(timeEnd - timeStart),\n                formatted: formatNanoseconds(timeEnd - timeStart)\n            },\n            hits: results,\n            ...(facetsResults ? { facets: facetsResults } : {}),\n            ...(groups ? { groups } : {})\n        };\n        const includeVectors = params.includeVectors ?? false;\n        if (!includeVectors) {\n            const vectorProperties = Object.keys(orama.data.index.vectorIndexes);\n            removeVectorsFromHits(returningResults, vectorProperties);\n        }\n        return returningResults;\n    }\n    async function executeSearchAsync() {\n        if (orama.beforeSearch) {\n            await runBeforeSearch(orama.beforeSearch, orama, params, language);\n        }\n        const results = performSearchLogic();\n        if (orama.afterSearch) {\n            await runAfterSearch(orama.afterSearch, orama, params, language, results);\n        }\n        return results;\n    }\n    const asyncNeeded = orama.beforeSearch?.length || orama.afterSearch?.length;\n    if (asyncNeeded) {\n        return executeSearchAsync();\n    }\n    return performSearchLogic();\n}\nfunction extractScore(token) {\n    return token[1];\n}\nfunction minMaxScoreNormalization(results) {\n    // In this case I disabled the `prefer-spread` rule because spread seems to be slower\n    // eslint-disable-next-line prefer-spread\n    const maxScore = Math.max.apply(Math, results.map(extractScore));\n    return results.map(([id, score]) => [id, score / maxScore]);\n}\nfunction normalizeScore(score, maxScore) {\n    return score / maxScore;\n}\nfunction hybridScoreBuilder(textWeight, vectorWeight) {\n    return (textScore, vectorScore) => textScore * textWeight + vectorScore * vectorWeight;\n}\nfunction mergeAndRankResults(textResults, vectorResults, query, hybridWeights) {\n    // eslint-disable-next-line prefer-spread\n    const maxTextScore = Math.max.apply(Math, textResults.map(extractScore));\n    // eslint-disable-next-line prefer-spread\n    const maxVectorScore = Math.max.apply(Math, vectorResults.map(extractScore));\n    const hasHybridWeights = hybridWeights && hybridWeights.text && hybridWeights.vector;\n    const { text: textWeight, vector: vectorWeight } = hasHybridWeights ? hybridWeights : getQueryWeights(query);\n    const mergedResults = new Map();\n    const textResultsLength = textResults.length;\n    const hybridScore = hybridScoreBuilder(textWeight, vectorWeight);\n    for (let i = 0; i < textResultsLength; i++) {\n        const [id, score] = textResults[i];\n        const normalizedScore = normalizeScore(score, maxTextScore);\n        const hybridScoreValue = hybridScore(normalizedScore, 0);\n        mergedResults.set(id, hybridScoreValue);\n    }\n    const vectorResultsLength = vectorResults.length;\n    for (let i = 0; i < vectorResultsLength; i++) {\n        const [resultId, score] = vectorResults[i];\n        const normalizedScore = normalizeScore(score, maxVectorScore);\n        const existingRes = mergedResults.get(resultId) ?? 0;\n        mergedResults.set(resultId, existingRes + hybridScore(0, normalizedScore));\n    }\n    return [...mergedResults].sort((a, b) => b[1] - a[1]);\n}\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction getQueryWeights(query) {\n    // In the next versions of Orama, we will ship a plugin containing a ML model to adjust the weights\n    // based on whether the query is keyword-focused, conceptual, etc.\n    // For now, we just return a fixed value.\n    return {\n        text: 0.5,\n        vector: 0.5\n    };\n}\n//# sourceMappingURL=search-hybrid.js.map","import { runMultipleHook, runSingleHook } from '../components/hooks.js';\nimport { createError } from '../errors.js';\nimport { innerInsertMultiple, insert } from './insert.js';\nimport { remove, removeMultiple } from './remove.js';\nimport { isAsyncFunction } from '../utils.js';\nexport function update(orama, id, doc, language, skipHooks) {\n    const asyncNeeded = isAsyncFunction(orama.afterInsert) ||\n        isAsyncFunction(orama.beforeInsert) ||\n        isAsyncFunction(orama.afterRemove) ||\n        isAsyncFunction(orama.beforeRemove) ||\n        isAsyncFunction(orama.beforeUpdate) ||\n        isAsyncFunction(orama.afterUpdate);\n    if (asyncNeeded) {\n        return updateAsync(orama, id, doc, language, skipHooks);\n    }\n    return updateSync(orama, id, doc, language, skipHooks);\n}\nasync function updateAsync(orama, id, doc, language, skipHooks) {\n    if (!skipHooks && orama.beforeUpdate) {\n        await runSingleHook(orama.beforeUpdate, orama, id);\n    }\n    await remove(orama, id, language, skipHooks);\n    const newId = await insert(orama, doc, language, skipHooks);\n    if (!skipHooks && orama.afterUpdate) {\n        await runSingleHook(orama.afterUpdate, orama, newId);\n    }\n    return newId;\n}\nfunction updateSync(orama, id, doc, language, skipHooks) {\n    if (!skipHooks && orama.beforeUpdate) {\n        runSingleHook(orama.beforeUpdate, orama, id);\n    }\n    remove(orama, id, language, skipHooks);\n    const newId = insert(orama, doc, language, skipHooks);\n    if (!skipHooks && orama.afterUpdate) {\n        runSingleHook(orama.afterUpdate, orama, newId);\n    }\n    return newId;\n}\nexport function updateMultiple(orama, ids, docs, batchSize, language, skipHooks) {\n    const asyncNeeded = isAsyncFunction(orama.afterInsert) ||\n        isAsyncFunction(orama.beforeInsert) ||\n        isAsyncFunction(orama.afterRemove) ||\n        isAsyncFunction(orama.beforeRemove) ||\n        isAsyncFunction(orama.beforeUpdate) ||\n        isAsyncFunction(orama.afterUpdate) ||\n        isAsyncFunction(orama.beforeUpdateMultiple) ||\n        isAsyncFunction(orama.afterUpdateMultiple) ||\n        isAsyncFunction(orama.beforeRemoveMultiple) ||\n        isAsyncFunction(orama.afterRemoveMultiple) ||\n        isAsyncFunction(orama.beforeInsertMultiple) ||\n        isAsyncFunction(orama.afterInsertMultiple);\n    if (asyncNeeded) {\n        return updateMultipleAsync(orama, ids, docs, batchSize, language, skipHooks);\n    }\n    return updateMultipleSync(orama, ids, docs, batchSize, language, skipHooks);\n}\nasync function updateMultipleAsync(orama, ids, docs, batchSize, language, skipHooks) {\n    if (!skipHooks) {\n        await runMultipleHook(orama.beforeUpdateMultiple, orama, ids);\n    }\n    const docsLength = docs.length;\n    for (let i = 0; i < docsLength; i++) {\n        const errorProperty = orama.validateSchema(docs[i], orama.schema);\n        if (errorProperty) {\n            throw createError('SCHEMA_VALIDATION_FAILURE', errorProperty);\n        }\n    }\n    await removeMultiple(orama, ids, batchSize, language, skipHooks);\n    const newIds = await innerInsertMultiple(orama, docs, batchSize, language, skipHooks);\n    if (!skipHooks) {\n        await runMultipleHook(orama.afterUpdateMultiple, orama, newIds);\n    }\n    return newIds;\n}\nfunction updateMultipleSync(orama, ids, docs, batchSize, language, skipHooks) {\n    if (!skipHooks) {\n        runMultipleHook(orama.beforeUpdateMultiple, orama, ids);\n    }\n    const docsLength = docs.length;\n    for (let i = 0; i < docsLength; i++) {\n        const errorProperty = orama.validateSchema(docs[i], orama.schema);\n        if (errorProperty) {\n            throw createError('SCHEMA_VALIDATION_FAILURE', errorProperty);\n        }\n    }\n    removeMultiple(orama, ids, batchSize, language, skipHooks);\n    const newIds = innerInsertMultiple(orama, docs, batchSize, language, skipHooks);\n    if (!skipHooks) {\n        runMultipleHook(orama.afterUpdateMultiple, orama, newIds);\n    }\n    return newIds;\n}\n//# sourceMappingURL=update.js.map","export { MODE_FULLTEXT_SEARCH, MODE_HYBRID_SEARCH, MODE_VECTOR_SEARCH } from './constants.js';\nexport const kInsertions = Symbol('orama.insertions');\nexport const kRemovals = Symbol('orama.removals');\n//# sourceMappingURL=types.js.map","import { createError } from '../errors.js';\nimport { search } from './search.js';\nconst ORAMA_SECURE_PROXY_PLUGIN_NAME = 'orama-secure-proxy';\nexport class AnswerSession {\n    db;\n    proxy = null;\n    config;\n    abortController = null;\n    lastInteractionParams = null;\n    chatModel = null;\n    conversationID;\n    messages = [];\n    events;\n    initPromise;\n    state = [];\n    constructor(db, config) {\n        this.db = db;\n        this.config = config;\n        this.init();\n        this.messages = config.initialMessages || [];\n        this.events = config.events || {};\n        this.conversationID = config.conversationID || this.generateRandomID();\n    }\n    async ask(query) {\n        await this.initPromise;\n        let output = '';\n        for await (const msg of await this.askStream(query)) {\n            output += msg;\n        }\n        return output;\n    }\n    async askStream(query) {\n        await this.initPromise;\n        return this.fetchAnswer(query);\n    }\n    abortAnswer() {\n        this.abortController?.abort();\n        this.state[this.state.length - 1].aborted = true;\n        this.triggerStateChange();\n    }\n    getMessages() {\n        return this.messages;\n    }\n    clearSession() {\n        this.messages = [];\n        this.state = [];\n    }\n    regenerateLast({ stream = true }) {\n        if (this.state.length === 0 || this.messages.length === 0) {\n            throw new Error('No messages to regenerate');\n        }\n        const isLastMessageAssistant = this.messages.at(-1)?.role === 'assistant';\n        if (!isLastMessageAssistant) {\n            throw createError('ANSWER_SESSION_LAST_MESSAGE_IS_NOT_ASSISTANT');\n        }\n        this.messages.pop();\n        this.state.pop();\n        if (stream) {\n            return this.askStream(this.lastInteractionParams);\n        }\n        return this.ask(this.lastInteractionParams);\n    }\n    async *fetchAnswer(params) {\n        if (!this.chatModel) {\n            throw createError('PLUGIN_SECURE_PROXY_MISSING_CHAT_MODEL');\n        }\n        this.abortController = new AbortController();\n        this.lastInteractionParams = params;\n        const interactionId = this.generateRandomID();\n        this.messages.push({ role: 'user', content: params.term ?? '' });\n        this.state.push({\n            interactionId,\n            aborted: false,\n            loading: true,\n            query: params.term ?? '',\n            response: '',\n            sources: null,\n            translatedQuery: null,\n            error: false,\n            errorMessage: null\n        });\n        const stateIdx = this.state.length - 1;\n        this.addEmptyAssistantMessage();\n        this.triggerStateChange();\n        try {\n            const sources = await search(this.db, params);\n            this.state[stateIdx].sources = sources;\n            this.triggerStateChange();\n            for await (const msg of this.proxy.chatStream({ model: this.chatModel, messages: this.messages })) {\n                yield msg;\n                this.state[stateIdx].response += msg;\n                this.messages.findLast((msg) => msg.role === 'assistant').content += msg;\n                this.triggerStateChange();\n            }\n        }\n        catch (err) {\n            if (err.name === 'AbortError') {\n                this.state[stateIdx].aborted = true;\n            }\n            else {\n                this.state[stateIdx].error = true;\n                this.state[stateIdx].errorMessage = err.toString();\n            }\n            this.triggerStateChange();\n        }\n        this.state[stateIdx].loading = false;\n        this.triggerStateChange();\n        return this.state[stateIdx].response;\n    }\n    generateRandomID(length = 24) {\n        return Array.from({ length }, () => Math.floor(Math.random() * 36).toString(36)).join('');\n    }\n    triggerStateChange() {\n        if (this.events.onStateChange) {\n            this.events.onStateChange(this.state);\n        }\n    }\n    async init() {\n        // eslint-disable-next-line @typescript-eslint/no-this-alias\n        const self = this;\n        async function getPlugin() {\n            return await self.db.plugins.find((plugin) => plugin.name === ORAMA_SECURE_PROXY_PLUGIN_NAME);\n        }\n        const plugin = await getPlugin();\n        if (!plugin) {\n            throw createError('PLUGIN_SECURE_PROXY_NOT_FOUND');\n        }\n        const pluginExtras = plugin.extra;\n        this.proxy = pluginExtras.proxy;\n        if (this.config.systemPrompt) {\n            this.messages.push({ role: 'system', content: this.config.systemPrompt });\n        }\n        if (pluginExtras?.pluginParams?.chat?.model) {\n            this.chatModel = pluginExtras.pluginParams.chat.model;\n        }\n        else {\n            throw createError('PLUGIN_SECURE_PROXY_MISSING_CHAT_MODEL');\n        }\n    }\n    addEmptyAssistantMessage() {\n        this.messages.push({ role: 'assistant', content: '' });\n    }\n}\n//# sourceMappingURL=answer-session.js.map","/**\n * Insert a new pinning rule into the database.\n * Pinning rules allow you to promote specific documents to specific positions in search results\n * based on conditional matching of the search term.\n *\n * @example\n * ```typescript\n * import { create, insert, insertPin } from '@orama/orama'\n *\n * const db = await create({\n *   schema: {\n *     title: 'string',\n *     description: 'string'\n *   }\n * })\n *\n * await insert(db, { id: '1', title: 'Product A' })\n * await insert(db, { id: '2', title: 'Product B' })\n *\n * // When searching for \"featured\", pin Product B to position 0\n * insertPin(db, {\n *   id: 'featured-products',\n *   conditions: [\n *     { anchoring: 'contains', pattern: 'featured' }\n *   ],\n *   consequence: {\n *     promote: [\n *       { doc_id: '2', position: 0 }\n *     ]\n *   }\n * })\n * ```\n */\nexport function insertPin(orama, rule) {\n    ;\n    orama.pinning.addRule(orama.data.pinning, rule);\n}\n/**\n * Update an existing pinning rule in the database.\n * If the rule does not exist, an error will be thrown.\n *\n * @example\n * ```typescript\n * import { updatePin } from '@orama/orama'\n *\n * // Update the rule to pin to a different position\n * updatePin(db, {\n *   id: 'featured-products',\n *   conditions: [\n *     { anchoring: 'contains', pattern: 'featured' }\n *   ],\n *   consequence: {\n *     promote: [\n *       { doc_id: '3', position: 0 }  // Changed doc_id\n *     ]\n *   }\n * })\n * ```\n */\nexport function updatePin(orama, rule) {\n    ;\n    orama.pinning.updateRule(orama.data.pinning, rule);\n}\n/**\n * Remove a pinning rule from the database by its ID.\n *\n * @example\n * ```typescript\n * deletePin(db, 'featured-products')\n * ```\n */\nexport function deletePin(orama, ruleId) {\n    return orama.pinning.removeRule(orama.data.pinning, ruleId);\n}\n/**\n * Get a specific pinning rule by its ID.\n *\n * @example\n * ```typescript\n * const rule = getPin(db, 'featured-products')\n * console.log(rule)\n * ```\n */\nexport function getPin(orama, ruleId) {\n    return orama.pinning.getRule(orama.data.pinning, ruleId);\n}\n/**\n * Get all pinning rules in the database.\n *\n * @example\n * ```typescript\n * const allRules = getAllPins(db)\n * console.log(`Total rules: ${allRules.length}`)\n * ```\n */\nexport function getAllPins(orama) {\n    return orama.pinning.getAllRules(orama.data.pinning);\n}\n//# sourceMappingURL=pinning.js.map","export function load(orama, raw) {\n    orama.internalDocumentIDStore.load(orama, raw.internalDocumentIDStore);\n    orama.data.index = orama.index.load(orama.internalDocumentIDStore, raw.index);\n    orama.data.docs = orama.documentsStore.load(orama.internalDocumentIDStore, raw.docs);\n    orama.data.sorting = orama.sorter.load(orama.internalDocumentIDStore, raw.sorting);\n    orama.data.pinning = orama.pinning.load(orama.internalDocumentIDStore, raw.pinning);\n    orama.tokenizer.language = raw.language;\n}\nexport function save(orama) {\n    return {\n        internalDocumentIDStore: orama.internalDocumentIDStore.save(orama.internalDocumentIDStore),\n        index: orama.index.save(orama.data.index),\n        docs: orama.documentsStore.save(orama.data.docs),\n        sorting: orama.sorter.save(orama.data.sorting),\n        pinning: orama.pinning.save(orama.data.pinning),\n        language: orama.tokenizer.language\n    };\n}\n//# sourceMappingURL=serialization.js.map","import { runMultipleHook, runSingleHook } from '../components/hooks.js';\nimport { createError } from '../errors.js';\nimport { insert, innerInsertMultiple } from './insert.js';\nimport { update, updateMultiple } from './update.js';\nimport { isAsyncFunction } from '../utils.js';\nexport function upsert(orama, doc, language, skipHooks, options) {\n    const asyncNeeded = isAsyncFunction(orama.afterInsert) ||\n        isAsyncFunction(orama.beforeInsert) ||\n        isAsyncFunction(orama.afterRemove) ||\n        isAsyncFunction(orama.beforeRemove) ||\n        isAsyncFunction(orama.beforeUpdate) ||\n        isAsyncFunction(orama.afterUpdate) ||\n        isAsyncFunction(orama.beforeUpsert) ||\n        isAsyncFunction(orama.afterUpsert) ||\n        isAsyncFunction(orama.index.beforeInsert) ||\n        isAsyncFunction(orama.index.insert) ||\n        isAsyncFunction(orama.index.afterInsert);\n    if (asyncNeeded) {\n        return upsertAsync(orama, doc, language, skipHooks, options);\n    }\n    return upsertSync(orama, doc, language, skipHooks, options);\n}\nasync function upsertAsync(orama, doc, language, skipHooks, options) {\n    const id = orama.getDocumentIndexId(doc);\n    if (typeof id !== 'string') {\n        throw createError('DOCUMENT_ID_MUST_BE_STRING', typeof id);\n    }\n    if (!skipHooks && orama.beforeUpsert) {\n        await runSingleHook(orama.beforeUpsert, orama, id, doc);\n    }\n    // Check if document exists\n    const existingDoc = orama.documentsStore.get(orama.data.docs, id);\n    let resultId;\n    if (existingDoc) {\n        // Document exists, update it\n        resultId = await update(orama, id, doc, language, skipHooks);\n    }\n    else {\n        // Document doesn't exist, insert it\n        resultId = await insert(orama, doc, language, skipHooks, options);\n    }\n    if (!skipHooks && orama.afterUpsert) {\n        await runSingleHook(orama.afterUpsert, orama, resultId, doc);\n    }\n    return resultId;\n}\nfunction upsertSync(orama, doc, language, skipHooks, options) {\n    const id = orama.getDocumentIndexId(doc);\n    if (typeof id !== 'string') {\n        throw createError('DOCUMENT_ID_MUST_BE_STRING', typeof id);\n    }\n    if (!skipHooks && orama.beforeUpsert) {\n        runSingleHook(orama.beforeUpsert, orama, id, doc);\n    }\n    // Check if document exists\n    const existingDoc = orama.documentsStore.get(orama.data.docs, id);\n    let resultId;\n    if (existingDoc) {\n        // Document exists, update it\n        resultId = update(orama, id, doc, language, skipHooks);\n    }\n    else {\n        // Document doesn't exist, insert it\n        resultId = insert(orama, doc, language, skipHooks, options);\n    }\n    if (!skipHooks && orama.afterUpsert) {\n        runSingleHook(orama.afterUpsert, orama, resultId, doc);\n    }\n    return resultId;\n}\nexport function upsertMultiple(orama, docs, batchSize, language, skipHooks) {\n    const asyncNeeded = isAsyncFunction(orama.afterInsert) ||\n        isAsyncFunction(orama.beforeInsert) ||\n        isAsyncFunction(orama.afterRemove) ||\n        isAsyncFunction(orama.beforeRemove) ||\n        isAsyncFunction(orama.beforeUpdate) ||\n        isAsyncFunction(orama.afterUpdate) ||\n        isAsyncFunction(orama.beforeUpsert) ||\n        isAsyncFunction(orama.afterUpsert) ||\n        isAsyncFunction(orama.beforeUpsertMultiple) ||\n        isAsyncFunction(orama.afterUpsertMultiple) ||\n        isAsyncFunction(orama.beforeInsertMultiple) ||\n        isAsyncFunction(orama.afterInsertMultiple) ||\n        isAsyncFunction(orama.beforeUpdateMultiple) ||\n        isAsyncFunction(orama.afterUpdateMultiple) ||\n        isAsyncFunction(orama.beforeRemoveMultiple) ||\n        isAsyncFunction(orama.afterRemoveMultiple) ||\n        isAsyncFunction(orama.index.beforeInsert) ||\n        isAsyncFunction(orama.index.insert) ||\n        isAsyncFunction(orama.index.afterInsert);\n    if (asyncNeeded) {\n        return upsertMultipleAsync(orama, docs, batchSize, language, skipHooks);\n    }\n    return upsertMultipleSync(orama, docs, batchSize, language, skipHooks);\n}\nasync function upsertMultipleAsync(orama, docs, batchSize, language, skipHooks) {\n    if (!skipHooks && orama.beforeUpsertMultiple) {\n        await runMultipleHook(orama.beforeUpsertMultiple, orama, docs);\n    }\n    // Validate all documents first\n    const docsLength = docs.length;\n    for (let i = 0; i < docsLength; i++) {\n        const errorProperty = orama.validateSchema(docs[i], orama.schema);\n        if (errorProperty) {\n            throw createError('SCHEMA_VALIDATION_FAILURE', errorProperty);\n        }\n    }\n    // Separate documents into insert and update arrays\n    const docsToInsert = [];\n    const docsToUpdate = [];\n    const idsToUpdate = [];\n    for (const doc of docs) {\n        const id = orama.getDocumentIndexId(doc);\n        if (typeof id !== 'string') {\n            throw createError('DOCUMENT_ID_MUST_BE_STRING', typeof id);\n        }\n        const existingDoc = orama.documentsStore.get(orama.data.docs, id);\n        if (existingDoc) {\n            docsToUpdate.push(doc);\n            idsToUpdate.push(id);\n        }\n        else {\n            docsToInsert.push(doc);\n        }\n    }\n    // Perform bulk operations\n    const results = [];\n    if (docsToUpdate.length > 0) {\n        const updateResults = await updateMultiple(orama, idsToUpdate, docsToUpdate, batchSize, language, skipHooks);\n        results.push(...updateResults);\n    }\n    if (docsToInsert.length > 0) {\n        const insertResults = await innerInsertMultiple(orama, docsToInsert, batchSize, language, skipHooks);\n        results.push(...insertResults);\n    }\n    if (!skipHooks && orama.afterUpsertMultiple) {\n        await runMultipleHook(orama.afterUpsertMultiple, orama, results);\n    }\n    return results;\n}\nfunction upsertMultipleSync(orama, docs, batchSize, language, skipHooks) {\n    if (!skipHooks && orama.beforeUpsertMultiple) {\n        runMultipleHook(orama.beforeUpsertMultiple, orama, docs);\n    }\n    // Validate all documents first\n    const docsLength = docs.length;\n    for (let i = 0; i < docsLength; i++) {\n        const errorProperty = orama.validateSchema(docs[i], orama.schema);\n        if (errorProperty) {\n            throw createError('SCHEMA_VALIDATION_FAILURE', errorProperty);\n        }\n    }\n    // Separate documents into insert and update arrays\n    const docsToInsert = [];\n    const docsToUpdate = [];\n    const idsToUpdate = [];\n    for (const doc of docs) {\n        const id = orama.getDocumentIndexId(doc);\n        if (typeof id !== 'string') {\n            throw createError('DOCUMENT_ID_MUST_BE_STRING', typeof id);\n        }\n        const existingDoc = orama.documentsStore.get(orama.data.docs, id);\n        if (existingDoc) {\n            docsToUpdate.push(doc);\n            idsToUpdate.push(id);\n        }\n        else {\n            docsToInsert.push(doc);\n        }\n    }\n    // Perform bulk operations\n    const results = [];\n    if (docsToUpdate.length > 0) {\n        const updateResults = updateMultiple(orama, idsToUpdate, docsToUpdate, batchSize, language, skipHooks);\n        results.push(...updateResults);\n    }\n    if (docsToInsert.length > 0) {\n        const insertResults = innerInsertMultiple(orama, docsToInsert, batchSize, language, skipHooks);\n        results.push(...insertResults);\n    }\n    if (!skipHooks && orama.afterUpsertMultiple) {\n        runMultipleHook(orama.afterUpsertMultiple, orama, results);\n    }\n    return results;\n}\n//# sourceMappingURL=upsert.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getActivitiesDB = getActivitiesDB;\nconst orama_1 = require(\"@orama/orama\");\nasync function getActivitiesDB(activities, options = {}) {\n    const { queryFields = ['assay'] } = options;\n    const activitiesDB = await (0, orama_1.create)({\n        schema: {\n            $id: 'string',\n            ...(queryFields.includes('assay') ? { assay: 'string' } : null),\n        },\n    });\n    for (const activity of activities) {\n        let assay = {\n            $id: activity.$id,\n            assay: activity.data.assay,\n        };\n        await (0, orama_1.insert)(activitiesDB, assay);\n    }\n    return activitiesDB;\n}\n//# sourceMappingURL=getActivitiesDB.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getPatentsDB = getPatentsDB;\nconst orama_1 = require(\"@orama/orama\");\nasync function getPatentsDB(patents, options = {}) {\n    const { queryFields = ['title', 'abstract'], abstractsLimit = 1000, callback, } = options;\n    if (patents.length > abstractsLimit) {\n        queryFields.splice(queryFields.indexOf('abstract'), 1);\n    }\n    const patentsDB = await (0, orama_1.create)({\n        schema: {\n            $id: 'string',\n            ...(queryFields.includes('title') ? { title: 'string' } : null),\n            ...(queryFields.includes('abstract') ? { abstract: 'string' } : null),\n            nbCompounds: 'number',\n        },\n    });\n    let lastCallback = Date.now();\n    for (let i = 0; i < patents.length; i++) {\n        const patent = patents[i];\n        if (callback && Date.now() - lastCallback > 1000) {\n            lastCallback = Date.now();\n            await callback('Patent DB creation', i, patents.length);\n        }\n        let article = {\n            $id: patent.$id,\n            ...(queryFields.includes('title')\n                ? { title: patent?.data?.title }\n                : null),\n            ...(queryFields.includes('abstract')\n                ? { abstract: patent?.data?.abstract }\n                : null),\n            nbCompounds: patent.data?.nbCompounds ? patent.data.nbCompounds + 2 : 2,\n        };\n        await (0, orama_1.insert)(patentsDB, article);\n    }\n    return patentsDB;\n}\n//# sourceMappingURL=getPatentsDB.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getPubmedsDB = getPubmedsDB;\nconst orama_1 = require(\"@orama/orama\");\nasync function getPubmedsDB(pubmeds, options = {}) {\n    const { queryFields = ['title', 'abstract', 'meshHeadings'], abstractsLimit = 1000, callback, } = options;\n    if (pubmeds.length > abstractsLimit) {\n        queryFields.splice(queryFields.indexOf('abstract'), 1);\n    }\n    const pubmedsDB = await (0, orama_1.create)({\n        schema: {\n            $ref: 'string',\n            $id: 'string',\n            ...(queryFields.includes('title') ? { title: 'string' } : null),\n            ...(queryFields.includes('abstract') ? { abstract: 'string' } : null),\n            ...(queryFields.includes('meshHeadings')\n                ? { meshHeadings: 'string[]' }\n                : null),\n            nbCompounds: 'number',\n        },\n    });\n    let lastCallback = Date.now();\n    for (let i = 0; i < pubmeds.length; i++) {\n        const pubmed = pubmeds[i];\n        if (callback && Date.now() - lastCallback > 1000) {\n            lastCallback = Date.now();\n            await callback('Pubmed DB creation', i, pubmeds.length);\n        }\n        const meshHeadings = [];\n        for (const meshHeading of pubmed.data.meshHeadings) {\n            if (meshHeading.descriptorName !== undefined) {\n                meshHeadings.push(meshHeading.descriptorName);\n            }\n        }\n        let article = {\n            $id: pubmed.$id,\n            ...(queryFields.includes('title')\n                ? { title: pubmed?.data?.article?.title || '' }\n                : null),\n            ...(queryFields.includes('abstract')\n                ? { abstract: pubmed?.data?.article?.abstract || '' }\n                : null),\n            ...(queryFields.includes('meshHeadings')\n                ? { meshHeadings: meshHeadings || '' }\n                : null),\n            nbCompounds: pubmed.data.compounds.length + 2 || +2,\n        };\n        await (0, orama_1.insert)(pubmedsDB, article);\n    }\n    return pubmedsDB;\n}\n//# sourceMappingURL=getPubmedsDB.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getTaxonomiesDB = getTaxonomiesDB;\nconst orama_1 = require(\"@orama/orama\");\nasync function getTaxonomiesDB(taxonomies, options = {}) {\n    const { queryFields = [\n        'superkingdom',\n        'kingdom',\n        'phylum',\n        'class',\n        'order',\n        'family',\n        'genus',\n        'species',\n    ], } = options;\n    const taxonomiesDB = await (0, orama_1.create)({\n        schema: {\n            $id: 'string',\n            ...(queryFields.includes('superkingdom')\n                ? { superkingdom: 'string' }\n                : null),\n            ...(queryFields.includes('kingdom') ? { kingdom: 'string' } : null),\n            ...(queryFields.includes('phylum') ? { phylum: 'string' } : null),\n            ...(queryFields.includes('class') ? { class: 'string' } : null),\n            ...(queryFields.includes('order') ? { order: 'string' } : null),\n            ...(queryFields.includes('family') ? { family: 'string' } : null),\n            ...(queryFields.includes('genus') ? { genus: 'string' } : null),\n            ...(queryFields.includes('species') ? { species: 'string' } : null),\n        },\n    });\n    for (const taxonomy of taxonomies) {\n        let level = Object.keys(taxonomy);\n        let taxonomyEntry = {\n            $id: taxonomy.dbRef.$id,\n            ...(level.includes('superkingdom')\n                ? { superkingdom: taxonomy.superkingdom }\n                : null),\n            ...(level.includes('kingdom') ? { kingdom: taxonomy.kingdom } : null),\n            ...(level.includes('phylum') ? { phylum: taxonomy.phylum } : null),\n            ...(level.includes('class') ? { class: taxonomy.class } : null),\n            ...(level.includes('order') ? { order: taxonomy.order } : null),\n            ...(level.includes('family') ? { family: taxonomy.family } : null),\n            ...(level.includes('genus') ? { genus: taxonomy.genus } : null),\n            ...(level.includes('species') ? { species: taxonomy.species } : null),\n        };\n        await (0, orama_1.insert)(taxonomiesDB, taxonomyEntry);\n    }\n    return taxonomiesDB;\n}\n//# sourceMappingURL=getTaxonomiesDB.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.searchActivitiesDB = searchActivitiesDB;\nconst orama_1 = require(\"@orama/orama\");\nasync function searchActivitiesDB(activitiesDB, activities, terms = '', options = {}) {\n    const { maxNbEntries = 100, minScore = 0.5, relevance = { k: 1.2, b: 0.75, d: 0.5 }, tolerance = 1, queryFields = ['assay'], } = options;\n    if (terms === '') {\n        throw new Error('terms is empty');\n    }\n    let queryResult = await (0, orama_1.search)(activitiesDB, {\n        term: terms,\n        relevance,\n        properties: queryFields,\n        tolerance,\n        limit: maxNbEntries,\n    });\n    let results = [];\n    for (let result of queryResult.hits) {\n        let id = result.document.$id;\n        let assay = result.document.assay;\n        let activityDocument = activities.find((activity) => {\n            return activity.$id === id && activity.data.assay === assay;\n        });\n        results.push({ ...activityDocument, score: result.score });\n    }\n    results = results.filter((result) => result.score >= minScore);\n    if (results.length > maxNbEntries) {\n        results.length = maxNbEntries;\n    }\n    results.sort((a, b) => b.score - a.score);\n    return results;\n}\n//# sourceMappingURL=searchActivitiesDB.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.searchPatentsDB = searchPatentsDB;\nconst orama_1 = require(\"@orama/orama\");\nasync function searchPatentsDB(patentsDB, patents, terms = '', options = {}) {\n    const { maxNbEntries = 100, minScore = 0.5, relevance = { k: 1.2, b: 0.75, d: 0.5 }, tolerance = 1, queryFields = ['title', 'abstract'], boostFields = {\n        title: 2,\n        abstract: 1,\n    }, abstractsLimit = 1000, } = options;\n    if (patents.length > abstractsLimit) {\n        queryFields.splice(queryFields.indexOf('abstract'), 1);\n    }\n    if (terms === '') {\n        throw new Error('terms is empty');\n    }\n    let queryResult = await (0, orama_1.search)(patentsDB, {\n        term: terms,\n        properties: queryFields,\n        boost: boostFields,\n        relevance,\n        tolerance,\n        limit: maxNbEntries,\n    });\n    queryResult.hits.map((item) => {\n        let nbCompounds = 2;\n        if (item.document.nbCompounds) {\n            nbCompounds = +Number(item.document.nbCompounds);\n        }\n        item.score = item.score / Math.log2(nbCompounds);\n        return item;\n    });\n    let results = [];\n    for (let result of queryResult.hits) {\n        let id = result.document.$id;\n        // to do this could be maybe improved using Map\n        let patentsDocument = patents.find((patent) => patent.$id === id);\n        results.push({ ...patentsDocument, score: result.score });\n    }\n    results = results.filter((result) => result.score >= minScore);\n    if (results.length > maxNbEntries) {\n        results.length = maxNbEntries;\n    }\n    results.sort((a, b) => b.score - a.score);\n    return results;\n}\n//# sourceMappingURL=searchPatentsDB.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.searchPubmedsDB = searchPubmedsDB;\nconst orama_1 = require(\"@orama/orama\");\nasync function searchPubmedsDB(pubmedsDB, pubmeds, terms = '', options = {}) {\n    const { maxNbEntries = 100, minScore = 0.5, relevance = { k: 1.2, b: 0.75, d: 0.5 }, tolerance = 1, queryFields = ['title', 'abstract', 'meshHeadings'], boostFields = {\n        title: 2,\n        abstract: 1,\n        meshHeadings: 1,\n    }, abstractsLimit = 1000, } = options;\n    if (terms === '') {\n        throw new Error('terms is empty');\n    }\n    if (pubmeds.length > abstractsLimit) {\n        queryFields.splice(queryFields.indexOf('abstract'), 1);\n    }\n    let queryResult = await (0, orama_1.search)(pubmedsDB, {\n        term: terms,\n        properties: queryFields,\n        boost: boostFields,\n        relevance,\n        limit: maxNbEntries,\n        tolerance,\n    });\n    queryResult.hits.map((item) => {\n        let nbCompounds = 2;\n        if (item.document.nbCompounds) {\n            nbCompounds = +Number(item.document.nbCompounds);\n        }\n        item.score = item.score / Math.log2(nbCompounds);\n        return item;\n    });\n    let results = [];\n    for (let result of queryResult.hits) {\n        let id = result.document.$id;\n        let pubmedDocument = pubmeds.find((pubmed) => pubmed.$id === id);\n        results.push({ ...pubmedDocument, score: result.score });\n    }\n    results = results.filter((result) => result.score >= minScore);\n    if (results.length > maxNbEntries) {\n        results.length = maxNbEntries;\n    }\n    results.sort((a, b) => b.score - a.score);\n    return results;\n}\n//# sourceMappingURL=searchPubmedsDB.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.searchTaxonomiesDB = searchTaxonomiesDB;\nconst orama_1 = require(\"@orama/orama\");\nasync function searchTaxonomiesDB(taxonomiesDB, taxonomies, terms = '', options = {}) {\n    const { queryFields = [\n        'superkingdom',\n        'kingdom',\n        'phylum',\n        'class',\n        'order',\n        'family',\n        'genus',\n        'species',\n    ], maxNbEntries = 50, minScore = 0.5, tolerance = 1, } = options;\n    if (terms === '') {\n        throw new Error('terms is empty');\n    }\n    let queryResult = await (0, orama_1.search)(taxonomiesDB, {\n        term: terms,\n        properties: queryFields,\n        tolerance,\n        limit: maxNbEntries,\n    });\n    let results = [];\n    for (let result of queryResult.hits) {\n        let keys = Object.keys(result.document);\n        let currentTaxonomy = {};\n        for (let key of keys) {\n            if (key !== '$id') {\n                currentTaxonomy[key] = result.document[key];\n            }\n            else {\n                currentTaxonomy.dbRef = { $id: result.document.$id };\n            }\n        }\n        let taxonomiesDocument = taxonomies.filter((taxonomy) => Object.keys(currentTaxonomy).every((key) => {\n            if (key === 'dbRef') {\n                return currentTaxonomy[key].$id === taxonomy.dbRef.$id;\n            }\n            return currentTaxonomy[key] === taxonomy[key];\n        }));\n        for (let taxonomy of taxonomiesDocument) {\n            taxonomy.score = result.score;\n            results.push(taxonomy);\n        }\n    }\n    results = results.filter((result) => result.score >= minScore);\n    if (results.length > maxNbEntries) {\n        results.length = maxNbEntries;\n    }\n    results.sort((a, b) => b.score - a.score);\n    return results;\n}\n//# sourceMappingURL=searchTaxonomiesDB.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.summarizeEmptyTerms = summarizeEmptyTerms;\nfunction summarizeEmptyTerms(activities, patents, pubmeds, taxonomies, options) {\n    activities = activities.slice();\n    patents = patents.slice();\n    pubmeds = pubmeds.slice();\n    taxonomies = taxonomies.slice();\n    // PATENTS\n    const patentsMaxNbEntries = options?.patents?.maxNbEntries || 100;\n    patents.sort((a, b) => {\n        const nbCompoundsEntryA = a.data?.nbCompounds\n            ? a.data.nbCompounds + 2\n            : Number.MAX_VALUE;\n        const nbCompoundsEntryB = b.data?.nbCompounds\n            ? b.data.nbCompounds + 2\n            : Number.MAX_VALUE;\n        return 1 / Math.log2(nbCompoundsEntryB) - 1 / Math.log2(nbCompoundsEntryA);\n    });\n    if (patents.length > patentsMaxNbEntries) {\n        patents.length = patentsMaxNbEntries;\n    }\n    // PUBMEDS\n    const pubmedsMaxNbEntries = options?.pubmeds?.maxNbEntries || 100;\n    pubmeds.sort((a, b) => {\n        const nbCompoundsEntryA = a.data.compounds?.length\n            ? a.data.compounds.length + 2\n            : Number.MAX_VALUE;\n        const nbCompoundsEntryB = b.data.compounds?.length\n            ? b.data.compounds.length + 2\n            : Number.MAX_VALUE;\n        return 1 / Math.log2(nbCompoundsEntryB) - 1 / Math.log2(nbCompoundsEntryA);\n    });\n    if (pubmeds.length > pubmedsMaxNbEntries) {\n        pubmeds.length = pubmedsMaxNbEntries;\n    }\n    // ACTIVITIES\n    const activitiesMaxNbEntries = options?.activities?.maxNbEntries || 100;\n    if (activities.length > activitiesMaxNbEntries) {\n        activities.length = activitiesMaxNbEntries;\n    }\n    // TAXONOMIES\n    const taxonomiesMaxNbEntries = options?.taxonomies?.maxNbEntries || 50;\n    if (taxonomies.length > taxonomiesMaxNbEntries) {\n        taxonomies.length = activitiesMaxNbEntries;\n    }\n    return { activities, patents, pubmeds, taxonomies };\n}\n//# sourceMappingURL=summarizeEmptyTerms.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ActiveOrNaturalSummarizer = void 0;\nconst getActivitiesDB_1 = require(\"./utils/getActivitiesDB\");\nconst getPatentsDB_1 = require(\"./utils/getPatentsDB\");\nconst getPubmedsDB_1 = require(\"./utils/getPubmedsDB\");\nconst getTaxonomiesDB_1 = require(\"./utils/getTaxonomiesDB\");\nconst searchActivitiesDB_1 = require(\"./utils/searchActivitiesDB\");\nconst searchPatentsDB_1 = require(\"./utils/searchPatentsDB\");\nconst searchPubmedsDB_1 = require(\"./utils/searchPubmedsDB\");\nconst searchTaxonomiesDB_1 = require(\"./utils/searchTaxonomiesDB\");\nconst summarizeEmptyTerms_1 = require(\"./utils/summarizeEmptyTerms\");\nclass ActiveOrNaturalSummarizer {\n    /**\n     * @description Summarize the active or natural details with the given terms\n     * @param {Object} activeOrNaturalDetails The active or natural details to summarize\n     * @param {Object} [options={}] The options to use for the search\n     * @param {Object} [options.activities={}] The options to use for the activities search\n     * @param {number} [options.activities.minScore=0.5] - Minimum score for an entry to be returned\n     * @param {number} [options.activities.maxNbEntries=100] - Maximum number of entries to return\n     * @param {object} [options.activities.relevance={ k: 1.2, b: 0.75, d: 0.5 }] - BM25 algorithm {k: Term frequency saturation parameter, b: Length normalization parameter, d:Frequency normalization lower bound}\n     * @param {number} [options.activities.tolerance=1] -Typo Tolerance following the Levenshtein algorithm\n     * @param {string[]} [options.activities.queryFields=['assay']] - Fields to query\n     * @param {Object} [options.taxonomies={}] The options to use for the activities search\n     * @param {number} [options.taxonomies.minScore=0.5] - Minimum score for an entry to be returned\n     * @param {number} [options.taxonomies.maxNbEntries=50] - Maximum number of entries to return\n     * @param {number} [options.taxonomies.tolerance=1] -Typo Tolerance following the Levenshtein algorithm\n     * @param {object} [options.patents={}] - Options for patents\n     * @param {number} [options.patents.abstractsLimit=1000] - If more than this number of abstracts, the search will be done on the without abstracts\n     * @param {number} [options.patents.maxNbEntries=100] - Maximum number of entries to return\n     * @param {number} [options.patents.inScore=0.5] - Minimum score for an entry to be returned\n     * @param {object} [options.patents.relevance={ k: 1.2, b: 0.75, d: 0.5 }] - BM25 algorithm {k: Term frequency saturation parameter, b: Length normalization parameter, d:Frequency normalization lower bound}\n     * @param {number} [options.patents.tolerance=1] -Typo Tolerance following the Levenshtein algorithm\n     * @param {string[]} [options.patents.queryFields=['title', 'abstract']] - Fields to query\n     * @param {object} [options.patents.boostFields={ title: 2, abstract: 1 }] - Fields weights, higher weight means higher importance\n     * @param {object} [options.pubmeds={}] - Options for pubmeds\n     * @param {number} [options.pubmeds.abstractsLimit=1000] - If more than this number of abstracts, the search will be done on the without abstracts\n     * @param {number} [options.pubmeds.minScore=0.5] - Minimum score for an entry to be returned\n     * @param {number} [options.pubmeds.maxNbEntries=100] - Maximum number of entries to return\n     * @param {object} [options.pubmeds.relevance={ k: 1.2, b: 0.75, d: 0.5 }] - BM25 algorithm {k: Term frequency saturation parameter, b: Length normalization parameter, d:Frequency normalization lower bound}\n     * @param {number} [options.pubmeds.tolerance=1] -Typo Tolerance following the Levenshtein algorithm\n     * @param {object} [options.pubmeds.boostFields={ title: 2, abstract: 1, meshHeadings: 1 }]  - Fields weights, higher weight means higher importance\n     * @param {string[]} [options.pubmeds.queryFields=['title', 'abstract', 'meshHeadings']] - Fields to query\n     * @param {(action,current,last)=>{}} [options.callback] - Callback function to call during database creation\n     * @returns\n     */\n    constructor(activeOrNaturalDetails, options = {}) {\n        this.options = options;\n        this.activeOrNaturalDetails = activeOrNaturalDetails;\n        this.activities = activeOrNaturalDetails.data.activities;\n        this.patents = activeOrNaturalDetails.data.patents;\n        this.pubmeds = activeOrNaturalDetails.data.pubmeds;\n        this.taxonomies = activeOrNaturalDetails.data.taxonomies;\n        this.isInitialized = false;\n    }\n    /**\n     * @description Summarize the active or natural details with the given terms\n     * @param {string} terms The terms to search\n     * @returns {Promise<Object>} The summarized active or natural details\n     */\n    async summarize(terms) {\n        if (terms === '') {\n            const { patents, pubmeds, activities } = (0, summarizeEmptyTerms_1.summarizeEmptyTerms)(this.activities, this.patents, this.pubmeds, this.taxonomies, this.options);\n            return {\n                ...this.activeOrNaturalDetails,\n                data: {\n                    ...this.activeOrNaturalDetails.data,\n                    activities,\n                    patents,\n                    pubmeds,\n                },\n            };\n        }\n        if (!this.isInitialized) {\n            if (!this.creatingDB) {\n                this.creatingDB = this.createDB();\n            }\n            await this.creatingDB;\n            this.isInitialized = true;\n            this.creatingDB = undefined;\n        }\n        return {\n            ...this.activeOrNaturalDetails,\n            data: {\n                ...this.activeOrNaturalDetails.data,\n                activities: await (0, searchActivitiesDB_1.searchActivitiesDB)(this.activitiesDB, this.activities, terms, this.options?.activities),\n                patents: await (0, searchPatentsDB_1.searchPatentsDB)(this.patentsDB, this.patents, terms, this.options?.patents),\n                pubmeds: await (0, searchPubmedsDB_1.searchPubmedsDB)(this.pubmedsDB, this.pubmeds, terms, this.options?.pubmeds),\n                taxonomies: await (0, searchTaxonomiesDB_1.searchTaxonomiesDB)(this.taxonomiesDB, this.taxonomies, terms, this.options?.taxonomies),\n            },\n        };\n    }\n    async createDB() {\n        this.pubmedsDB = await (0, getPubmedsDB_1.getPubmedsDB)(this.pubmeds, {\n            callback: this.options.callback,\n            ...this.options.pubmeds,\n        });\n        this.activitiesDB = await (0, getActivitiesDB_1.getActivitiesDB)(this.activities, this.options.activities);\n        this.patentsDB = await (0, getPatentsDB_1.getPatentsDB)(this.patents, {\n            callback: this.options.callback,\n            ...this.options.patents,\n        });\n        this.taxonomiesDB = await (0, getTaxonomiesDB_1.getTaxonomiesDB)(this.taxonomies, this.options.taxonomies);\n    }\n}\nexports.ActiveOrNaturalSummarizer = ActiveOrNaturalSummarizer;\n//# sourceMappingURL=ActiveOrNaturalSummarizer.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.taxonomyRanks = void 0;\nexports.taxonomyRanks = [\n    'superkingdom',\n    'kingdom',\n    'phylum',\n    'class',\n    'order',\n    'family',\n    'genus',\n    'species',\n];\n//# sourceMappingURL=taxonomyRanks.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.taxonomyComparator = taxonomyComparator;\nconst taxonomyRanks_js_1 = require(\"./taxonomyRanks.js\");\n/**\n * @description sort taxonomies by superkingdom, kingdom, phylum, class, order, family, genus, species\n * @param {import('./Taxonomy.js').Taxonomy} a\n * @param {import('./Taxonomy.js').Taxonomy} b\n * @returns {number}\n */\nfunction taxonomyComparator(a, b) {\n    for (const field of taxonomyRanks_js_1.taxonomyRanks) {\n        if (a[field] !== b[field]) {\n            return (a[field] || '').localeCompare(b[field] || '');\n        }\n    }\n    return 0;\n}\n//# sourceMappingURL=taxonomyComparator.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createTaxonomyTree = createTaxonomyTree;\nconst taxonomyRanks_1 = require(\"./taxonomyRanks\");\n/**\n * @description Creates a tree structure from an array of taxonomies.\n *\n * @param {import('./Taxonomy.js').Taxonomy[]} taxonomies - The array of taxonomies to create a tree from.\n * @returns {Object[]} The tree structure.\n */\nfunction createTaxonomyTree(taxonomies, options = {}) {\n    let { rankLimit = '' } = options;\n    rankLimit = rankLimit.toLowerCase();\n    const tree = [];\n    for (let taxonomy of taxonomies) {\n        let reachedRankLimit = false;\n        let current = tree;\n        for (let rank of taxonomyRanks_1.taxonomyRanks) {\n            if (rank === rankLimit) {\n                reachedRankLimit = true;\n            }\n            if (reachedRankLimit && rank !== rankLimit) {\n                break;\n            }\n            const name = taxonomy[rank] || '';\n            let existing = current.find((node) => node.name === name && node.rank === rank);\n            if (!existing) {\n                existing = {\n                    name,\n                    rank,\n                    count: 1,\n                    children: [],\n                };\n                if (rank === 'species' && taxonomy?.dbRef) {\n                    existing.url = taxonomy.dbRef.url;\n                }\n                current.push(existing);\n            }\n            else {\n                existing.count++;\n            }\n            current = existing.children;\n        }\n    }\n    for (let branch of tree) {\n        cleanEmptyBranches(branch);\n        nbTaxonomies(branch);\n    }\n    return tree;\n}\nfunction cleanEmptyBranches(branch) {\n    for (const child of branch.children)\n        cleanEmptyBranches(child);\n    branch.children = branch.children.filter((child) => {\n        // This part is used empty nodes\n        if (child.children.length === 0 && child.name === '') {\n            return false;\n        }\n        // This part is used to remove the children in the lowest rank\n        if (child.children.length === 0 && child.name !== '') {\n            delete child.children;\n        }\n        return true;\n    });\n}\nfunction nbTaxonomies(branch) {\n    branch.nbTaxonomies = 0; // count the current node\n    if (branch.children) {\n        for (let child of branch.children) {\n            nbTaxonomies(child);\n            branch.nbTaxonomies += child.nbTaxonomies;\n        }\n    }\n    else {\n        branch.nbTaxonomies = 1;\n    }\n    return branch.nbTaxonomies;\n}\n//# sourceMappingURL=createTaxonomyTree.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.appendInternals = appendInternals;\nfunction appendInternals(data) {\n    // for each line (internal fragment) we calculate the vertical position\n    // where it should be drawn as well and the maximal number of lines\n    let maxNumberLines = 0;\n    for (let result of data.results) {\n        if (result.internal) {\n            result.slot = assignSlot(result.from, result.to, data.residues.residues);\n            if (result.slot > maxNumberLines)\n                maxNumberLines = result.slot;\n        }\n    }\n    for (let row of data.rows) {\n        row.info.internals = maxNumberLines;\n    }\n}\n// we need to define the height of the line.\n// we need to find a height that is not yet used.\nfunction assignSlot(from, to, residues) {\n    let used = {};\n    if (from > 0)\n        from--; // we ensure that we don't put on the same line to sequences that are consecutive\n    for (let i = from; i < to; i++) {\n        let residue = residues[i];\n        for (const index of residue.paper.usedSlots.keys()) {\n            used[index] = true;\n        }\n    }\n    let counter = 0;\n    while (true) {\n        if (!used[counter]) {\n            break;\n        }\n        counter++;\n    }\n    for (let i = from; i < to; i++) {\n        residues[i].paper.usedSlots[counter] = true;\n    }\n    return counter;\n}\n//# sourceMappingURL=appendInternals.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || (function () {\n    var ownKeys = function(o) {\n        ownKeys = Object.getOwnPropertyNames || function (o) {\n            var ar = [];\n            for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n            return ar;\n        };\n        return ownKeys(o);\n    };\n    return function (mod) {\n        if (mod && mod.__esModule) return mod;\n        var result = {};\n        if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n        __setModuleDefault(result, mod);\n        return result;\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.appendResidues = appendResidues;\nconst chemical_groups_1 = require(\"chemical-groups\");\nconst Nucleotide = __importStar(require(\"nucleotide\"));\nconst Peptide = __importStar(require(\"peptide\"));\nconst ALTERNATIVES = ['', '¹', '²', '³', '⁴', '⁵', '⁶', '⁷', '⁸', '⁹'];\nconst SYMBOLS = ['Θ', 'Δ', 'Λ', 'Φ', 'Ω', 'Γ', 'Χ'];\nlet currentSymbol = 0;\n/**\n * Code that allows to split a sequence of amino acids or nucleotides natural or non natural\n * @param {string} [sequence]\n * @param {object} [options={}]\n * @param {string} [options.kind] - peptide, rna, ds-dna or dna. Default if contains U: rna, otherwise ds-dna\n * @param {string} [options.fivePrime=monophosphate] - alcohol, monophosphate, diphosphate, triphosphate\n * @param {string} [options.circular=false]\n */\nfunction appendResidues(data, sequence, options = {}) {\n    const { kind = 'peptide' } = options;\n    currentSymbol = 0;\n    // we normalize the sequence to 3 letter codes\n    if (kind === 'peptide') {\n        sequence = Peptide.sequenceToMF(sequence);\n    }\n    else {\n        sequence = Nucleotide.sequenceToMF(sequence, options);\n    }\n    const result = {\n        begin: '',\n        end: '',\n        residues: [],\n    };\n    const STATE_BEGIN = 0;\n    const STATE_MIDDLE = 1;\n    const STATE_END = 2;\n    let parenthesisLevel = 0;\n    let state = STATE_BEGIN; // as long as we don't have an uppercase followed by 2 lowercases\n    for (let i = 0; i < sequence.length; i++) {\n        let currentChar = sequence.charAt(i);\n        let nextChar = i < sequence.length - 1 ? sequence.charAt(i + 1) : '';\n        let nextNextChar = i < sequence.length - 2 ? sequence.charAt(i + 2) : '';\n        if (state === STATE_BEGIN &&\n            currentChar.match(/[A-Z]/) &&\n            nextChar.match(/[a-z]/) &&\n            nextNextChar.match(/[a-z]/) &&\n            parenthesisLevel === 0) {\n            state = STATE_MIDDLE;\n        }\n        if (state === STATE_MIDDLE &&\n            !sequence.slice(i).match(/[A-Z][a-z]{2}/) &&\n            !currentChar.match(/[a-z]/) &&\n            parenthesisLevel === 0) {\n            state = STATE_END;\n        }\n        else if (currentChar.match(/[A-Z]/) &&\n            nextChar.match(/[a-z]/) &&\n            nextNextChar.match(/[a-z]/) &&\n            parenthesisLevel === 0) {\n            result.residues.push('');\n        }\n        switch (state) {\n            case STATE_BEGIN:\n                result.begin = result.begin + currentChar;\n                break;\n            case STATE_MIDDLE:\n                result.residues[result.residues.length - 1] =\n                    result.residues.at(-1) + currentChar;\n                break;\n            case STATE_END:\n                result.end = result.end + currentChar;\n                break;\n            default:\n        }\n        if (currentChar === '(') {\n            parenthesisLevel++;\n        }\n        else if (currentChar === ')') {\n            parenthesisLevel--;\n        }\n    }\n    // we process all the residues\n    let alternatives = {};\n    let replacements = {};\n    for (let i = 0; i < result.residues.length; i++) {\n        let label = result.residues[i];\n        let residue = {\n            value: label,\n            results: {\n                begin: [],\n                end: [],\n            },\n            fromBegin: i + 1,\n            fromEnd: result.residues.length - i,\n            kind: 'residue',\n        };\n        if (label.includes('(')) {\n            getModifiedReplacement(label, residue, alternatives, replacements);\n        }\n        else if (chemical_groups_1.groupsObject[label] && chemical_groups_1.groupsObject[label].oneLetter) {\n            residue.label = chemical_groups_1.groupsObject[label].oneLetter;\n        }\n        else {\n            getUnknownReplacement(label, residue, replacements);\n        }\n        result.residues[i] = residue;\n    }\n    result.begin = removeStartEndParenthesis(result.begin);\n    result.end = removeStartEndParenthesis(result.end);\n    if (result.begin.length > 2) {\n        let label = options.kind === 'peptide' ? 'Nter' : \"5'\";\n        replacements[result.begin] = {\n            label,\n        };\n        result.begin = label;\n    }\n    if (result.end.length > 2) {\n        let label = options.kind === 'peptide' ? 'Cter' : \"3'\";\n        replacements[result.end] = {\n            label,\n        };\n        result.end = label;\n    }\n    result.begin = { label: result.begin, kind: 'begin' };\n    result.end = { label: result.end, kind: 'end' };\n    result.alternatives = alternatives;\n    result.replacements = replacements;\n    result.all = [result.begin].concat(result.residues, [result.end]);\n    for (const entry of result.all) {\n        entry.info = {\n            nbOver: 0,\n            nbUnder: 0,\n        };\n    }\n    data.residues = result;\n}\nfunction getUnknownReplacement(unknownResidue, residue, replacements) {\n    if (!replacements[unknownResidue]) {\n        replacements[unknownResidue] = {\n            label: SYMBOLS[currentSymbol] || '?',\n            id: unknownResidue,\n        };\n    }\n    currentSymbol++;\n    residue.replaced = true;\n    residue.label = replacements[unknownResidue].label;\n}\nfunction getModifiedReplacement(modifiedResidue, residue, alternatives, replacements) {\n    if (!replacements[modifiedResidue]) {\n        let position = modifiedResidue.indexOf('(');\n        let residueCode = modifiedResidue.slice(0, position);\n        let modification = removeStartEndParenthesis(modifiedResidue.slice(position));\n        if (chemical_groups_1.groupsObject[residueCode] &&\n            chemical_groups_1.groupsObject[residueCode].alternativeOneLetter) {\n            let alternativeOneLetter = chemical_groups_1.groupsObject[residueCode].alternativeOneLetter;\n            if (!alternatives[alternativeOneLetter]) {\n                alternatives[alternativeOneLetter] = { count: 1 };\n            }\n            else {\n                alternatives[alternativeOneLetter].count++;\n            }\n            replacements[modifiedResidue] = {\n                label: ALTERNATIVES[alternatives[alternativeOneLetter].count - 1] +\n                    alternativeOneLetter,\n                residue: residueCode,\n                modification,\n            };\n        }\n        else {\n            getUnknownReplacement(modifiedResidue, residue, replacements);\n        }\n    }\n    residue.replaced = true;\n    residue.label = replacements[modifiedResidue].label;\n}\nfunction removeStartEndParenthesis(mf) {\n    if (mf[0] === '(' && mf.at(-1) === ')') {\n        return mf.slice(1, -1);\n    }\n    return mf;\n}\n//# sourceMappingURL=appendResidues.js.map","/*!\n* @svgdotjs/svg.js - A lightweight library for manipulating and animating SVG.\n* @version 3.2.5\n* https://svgjs.dev/\n*\n* @copyright Wout Fierens <wout@mick-wout.com>\n* @license MIT\n*\n* BUILT: Mon Sep 15 2025 18:20:57 GMT+0200 (Central European Summer Time)\n*/;\n'use strict';\n\nconst methods$1 = {};\nconst names = [];\nfunction registerMethods(name, m) {\n  if (Array.isArray(name)) {\n    for (const _name of name) {\n      registerMethods(_name, m);\n    }\n    return;\n  }\n  if (typeof name === 'object') {\n    for (const _name in name) {\n      registerMethods(_name, name[_name]);\n    }\n    return;\n  }\n  addMethodNames(Object.getOwnPropertyNames(m));\n  methods$1[name] = Object.assign(methods$1[name] || {}, m);\n}\nfunction getMethodsFor(name) {\n  return methods$1[name] || {};\n}\nfunction getMethodNames() {\n  return [...new Set(names)];\n}\nfunction addMethodNames(_names) {\n  names.push(..._names);\n}\n\n// Map function\nfunction map(array, block) {\n  let i;\n  const il = array.length;\n  const result = [];\n  for (i = 0; i < il; i++) {\n    result.push(block(array[i]));\n  }\n  return result;\n}\n\n// Filter function\nfunction filter(array, block) {\n  let i;\n  const il = array.length;\n  const result = [];\n  for (i = 0; i < il; i++) {\n    if (block(array[i])) {\n      result.push(array[i]);\n    }\n  }\n  return result;\n}\n\n// Degrees to radians\nfunction radians(d) {\n  return d % 360 * Math.PI / 180;\n}\n\n// Radians to degrees\nfunction degrees(r) {\n  return r * 180 / Math.PI % 360;\n}\n\n// Convert camel cased string to dash separated\nfunction unCamelCase(s) {\n  return s.replace(/([A-Z])/g, function (m, g) {\n    return '-' + g.toLowerCase();\n  });\n}\n\n// Capitalize first letter of a string\nfunction capitalize(s) {\n  return s.charAt(0).toUpperCase() + s.slice(1);\n}\n\n// Calculate proportional width and height values when necessary\nfunction proportionalSize(element, width, height, box) {\n  if (width == null || height == null) {\n    box = box || element.bbox();\n    if (width == null) {\n      width = box.width / box.height * height;\n    } else if (height == null) {\n      height = box.height / box.width * width;\n    }\n  }\n  return {\n    width: width,\n    height: height\n  };\n}\n\n/**\n * This function adds support for string origins.\n * It searches for an origin in o.origin o.ox and o.originX.\n * This way, origin: {x: 'center', y: 50} can be passed as well as ox: 'center', oy: 50\n **/\nfunction getOrigin(o, element) {\n  const origin = o.origin;\n  // First check if origin is in ox or originX\n  let ox = o.ox != null ? o.ox : o.originX != null ? o.originX : 'center';\n  let oy = o.oy != null ? o.oy : o.originY != null ? o.originY : 'center';\n\n  // Then check if origin was used and overwrite in that case\n  if (origin != null) {\n    [ox, oy] = Array.isArray(origin) ? origin : typeof origin === 'object' ? [origin.x, origin.y] : [origin, origin];\n  }\n\n  // Make sure to only call bbox when actually needed\n  const condX = typeof ox === 'string';\n  const condY = typeof oy === 'string';\n  if (condX || condY) {\n    const {\n      height,\n      width,\n      x,\n      y\n    } = element.bbox();\n\n    // And only overwrite if string was passed for this specific axis\n    if (condX) {\n      ox = ox.includes('left') ? x : ox.includes('right') ? x + width : x + width / 2;\n    }\n    if (condY) {\n      oy = oy.includes('top') ? y : oy.includes('bottom') ? y + height : y + height / 2;\n    }\n  }\n\n  // Return the origin as it is if it wasn't a string\n  return [ox, oy];\n}\nconst descriptiveElements = new Set(['desc', 'metadata', 'title']);\nconst isDescriptive = element => descriptiveElements.has(element.nodeName);\nconst writeDataToDom = (element, data, defaults = {}) => {\n  const cloned = {\n    ...data\n  };\n  for (const key in cloned) {\n    if (cloned[key].valueOf() === defaults[key]) {\n      delete cloned[key];\n    }\n  }\n  if (Object.keys(cloned).length) {\n    element.node.setAttribute('data-svgjs', JSON.stringify(cloned)); // see #428\n  } else {\n    element.node.removeAttribute('data-svgjs');\n    element.node.removeAttribute('svgjs:data');\n  }\n};\n\nvar utils = {\n  __proto__: null,\n  capitalize: capitalize,\n  degrees: degrees,\n  filter: filter,\n  getOrigin: getOrigin,\n  isDescriptive: isDescriptive,\n  map: map,\n  proportionalSize: proportionalSize,\n  radians: radians,\n  unCamelCase: unCamelCase,\n  writeDataToDom: writeDataToDom\n};\n\n// Default namespaces\nconst svg = 'http://www.w3.org/2000/svg';\nconst html = 'http://www.w3.org/1999/xhtml';\nconst xmlns = 'http://www.w3.org/2000/xmlns/';\nconst xlink = 'http://www.w3.org/1999/xlink';\n\nvar namespaces = {\n  __proto__: null,\n  html: html,\n  svg: svg,\n  xlink: xlink,\n  xmlns: xmlns\n};\n\nconst globals = {\n  window: typeof window === 'undefined' ? null : window,\n  document: typeof document === 'undefined' ? null : document\n};\nfunction registerWindow(win = null, doc = null) {\n  globals.window = win;\n  globals.document = doc;\n}\nconst save = {};\nfunction saveWindow() {\n  save.window = globals.window;\n  save.document = globals.document;\n}\nfunction restoreWindow() {\n  globals.window = save.window;\n  globals.document = save.document;\n}\nfunction withWindow(win, fn) {\n  saveWindow();\n  registerWindow(win, win.document);\n  fn(win, win.document);\n  restoreWindow();\n}\nfunction getWindow() {\n  return globals.window;\n}\n\nclass Base {\n  // constructor (node/*, {extensions = []} */) {\n  //   // this.tags = []\n  //   //\n  //   // for (let extension of extensions) {\n  //   //   extension.setup.call(this, node)\n  //   //   this.tags.push(extension.name)\n  //   // }\n  // }\n}\n\nconst elements = {};\nconst root = '___SYMBOL___ROOT___';\n\n// Method for element creation\nfunction create(name, ns = svg) {\n  // create element\n  return globals.document.createElementNS(ns, name);\n}\nfunction makeInstance(element, isHTML = false) {\n  if (element instanceof Base) return element;\n  if (typeof element === 'object') {\n    return adopter(element);\n  }\n  if (element == null) {\n    return new elements[root]();\n  }\n  if (typeof element === 'string' && element.trim().charAt(0) !== '<') {\n    return adopter(globals.document.querySelector(element));\n  }\n\n  // Make sure, that HTML elements are created with the correct namespace\n  const wrapper = isHTML ? globals.document.createElement('div') : create('svg');\n  wrapper.innerHTML = element.trim();\n\n  // We use firstElementChild here to skip potential comment nodes (#1339),\n  element = adopter(wrapper.firstElementChild);\n\n  // make sure, that element doesn't have its wrapper attached\n  wrapper.removeChild(wrapper.firstElementChild);\n  return element;\n}\nfunction nodeOrNew(name, node) {\n  return node && (node instanceof globals.window.Node || node.ownerDocument && node instanceof node.ownerDocument.defaultView.Node) ? node : create(name);\n}\n\n// Adopt existing svg elements\nfunction adopt(node) {\n  // check for presence of node\n  if (!node) return null;\n\n  // make sure a node isn't already adopted\n  if (node.instance instanceof Base) return node.instance;\n  if (node.nodeName === '#document-fragment') {\n    return new elements.Fragment(node);\n  }\n\n  // initialize variables\n  let className = capitalize(node.nodeName || 'Dom');\n\n  // Make sure that gradients are adopted correctly\n  if (className === 'LinearGradient' || className === 'RadialGradient') {\n    className = 'Gradient';\n\n    // Fallback to Dom if element is not known\n  } else if (!elements[className]) {\n    className = 'Dom';\n  }\n  return new elements[className](node);\n}\nlet adopter = adopt;\nfunction mockAdopt(mock = adopt) {\n  adopter = mock;\n}\nfunction register(element, name = element.name, asRoot = false) {\n  elements[name] = element;\n  if (asRoot) elements[root] = element;\n  addMethodNames(Object.getOwnPropertyNames(element.prototype));\n  return element;\n}\nfunction getClass(name) {\n  return elements[name];\n}\n\n// Element id sequence\nlet did = 1000;\n\n// Get next named element id\nfunction eid(name) {\n  return 'Svgjs' + capitalize(name) + did++;\n}\n\n// Deep new id assignment\nfunction assignNewId(node) {\n  // do the same for SVG child nodes as well\n  for (let i = node.children.length - 1; i >= 0; i--) {\n    assignNewId(node.children[i]);\n  }\n  if (node.id) {\n    node.id = eid(node.nodeName);\n    return node;\n  }\n  return node;\n}\n\n// Method for extending objects\nfunction extend(modules, methods) {\n  let key, i;\n  modules = Array.isArray(modules) ? modules : [modules];\n  for (i = modules.length - 1; i >= 0; i--) {\n    for (key in methods) {\n      modules[i].prototype[key] = methods[key];\n    }\n  }\n}\nfunction wrapWithAttrCheck(fn) {\n  return function (...args) {\n    const o = args[args.length - 1];\n    if (o && o.constructor === Object && !(o instanceof Array)) {\n      return fn.apply(this, args.slice(0, -1)).attr(o);\n    } else {\n      return fn.apply(this, args);\n    }\n  };\n}\n\n// Get all siblings, including myself\nfunction siblings() {\n  return this.parent().children();\n}\n\n// Get the current position siblings\nfunction position() {\n  return this.parent().index(this);\n}\n\n// Get the next element (will return null if there is none)\nfunction next() {\n  return this.siblings()[this.position() + 1];\n}\n\n// Get the next element (will return null if there is none)\nfunction prev() {\n  return this.siblings()[this.position() - 1];\n}\n\n// Send given element one step forward\nfunction forward() {\n  const i = this.position();\n  const p = this.parent();\n\n  // move node one step forward\n  p.add(this.remove(), i + 1);\n  return this;\n}\n\n// Send given element one step backward\nfunction backward() {\n  const i = this.position();\n  const p = this.parent();\n  p.add(this.remove(), i ? i - 1 : 0);\n  return this;\n}\n\n// Send given element all the way to the front\nfunction front() {\n  const p = this.parent();\n\n  // Move node forward\n  p.add(this.remove());\n  return this;\n}\n\n// Send given element all the way to the back\nfunction back() {\n  const p = this.parent();\n\n  // Move node back\n  p.add(this.remove(), 0);\n  return this;\n}\n\n// Inserts a given element before the targeted element\nfunction before(element) {\n  element = makeInstance(element);\n  element.remove();\n  const i = this.position();\n  this.parent().add(element, i);\n  return this;\n}\n\n// Inserts a given element after the targeted element\nfunction after(element) {\n  element = makeInstance(element);\n  element.remove();\n  const i = this.position();\n  this.parent().add(element, i + 1);\n  return this;\n}\nfunction insertBefore(element) {\n  element = makeInstance(element);\n  element.before(this);\n  return this;\n}\nfunction insertAfter(element) {\n  element = makeInstance(element);\n  element.after(this);\n  return this;\n}\nregisterMethods('Dom', {\n  siblings,\n  position,\n  next,\n  prev,\n  forward,\n  backward,\n  front,\n  back,\n  before,\n  after,\n  insertBefore,\n  insertAfter\n});\n\n// Parse unit value\nconst numberAndUnit = /^([+-]?(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?)([a-z%]*)$/i;\n\n// Parse hex value\nconst hex = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i;\n\n// Parse rgb value\nconst rgb = /rgb\\((\\d+),(\\d+),(\\d+)\\)/;\n\n// Parse reference id\nconst reference = /(#[a-z_][a-z0-9\\-_]*)/i;\n\n// splits a transformation chain\nconst transforms = /\\)\\s*,?\\s*/;\n\n// Whitespace\nconst whitespace = /\\s/g;\n\n// Test hex value\nconst isHex = /^#[a-f0-9]{3}$|^#[a-f0-9]{6}$/i;\n\n// Test rgb value\nconst isRgb = /^rgb\\(/;\n\n// Test for blank string\nconst isBlank = /^(\\s+)?$/;\n\n// Test for numeric string\nconst isNumber = /^[+-]?(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i;\n\n// Test for image url\nconst isImage = /\\.(jpg|jpeg|png|gif|svg)(\\?[^=]+.*)?/i;\n\n// split at whitespace and comma\nconst delimiter = /[\\s,]+/;\n\n// Test for path letter\nconst isPathLetter = /[MLHVCSQTAZ]/i;\n\nvar regex = {\n  __proto__: null,\n  delimiter: delimiter,\n  hex: hex,\n  isBlank: isBlank,\n  isHex: isHex,\n  isImage: isImage,\n  isNumber: isNumber,\n  isPathLetter: isPathLetter,\n  isRgb: isRgb,\n  numberAndUnit: numberAndUnit,\n  reference: reference,\n  rgb: rgb,\n  transforms: transforms,\n  whitespace: whitespace\n};\n\n// Return array of classes on the node\nfunction classes() {\n  const attr = this.attr('class');\n  return attr == null ? [] : attr.trim().split(delimiter);\n}\n\n// Return true if class exists on the node, false otherwise\nfunction hasClass(name) {\n  return this.classes().indexOf(name) !== -1;\n}\n\n// Add class to the node\nfunction addClass(name) {\n  if (!this.hasClass(name)) {\n    const array = this.classes();\n    array.push(name);\n    this.attr('class', array.join(' '));\n  }\n  return this;\n}\n\n// Remove class from the node\nfunction removeClass(name) {\n  if (this.hasClass(name)) {\n    this.attr('class', this.classes().filter(function (c) {\n      return c !== name;\n    }).join(' '));\n  }\n  return this;\n}\n\n// Toggle the presence of a class on the node\nfunction toggleClass(name) {\n  return this.hasClass(name) ? this.removeClass(name) : this.addClass(name);\n}\nregisterMethods('Dom', {\n  classes,\n  hasClass,\n  addClass,\n  removeClass,\n  toggleClass\n});\n\n// Dynamic style generator\nfunction css(style, val) {\n  const ret = {};\n  if (arguments.length === 0) {\n    // get full style as object\n    this.node.style.cssText.split(/\\s*;\\s*/).filter(function (el) {\n      return !!el.length;\n    }).forEach(function (el) {\n      const t = el.split(/\\s*:\\s*/);\n      ret[t[0]] = t[1];\n    });\n    return ret;\n  }\n  if (arguments.length < 2) {\n    // get style properties as array\n    if (Array.isArray(style)) {\n      for (const name of style) {\n        const cased = name;\n        ret[name] = this.node.style.getPropertyValue(cased);\n      }\n      return ret;\n    }\n\n    // get style for property\n    if (typeof style === 'string') {\n      return this.node.style.getPropertyValue(style);\n    }\n\n    // set styles in object\n    if (typeof style === 'object') {\n      for (const name in style) {\n        // set empty string if null/undefined/'' was given\n        this.node.style.setProperty(name, style[name] == null || isBlank.test(style[name]) ? '' : style[name]);\n      }\n    }\n  }\n\n  // set style for property\n  if (arguments.length === 2) {\n    this.node.style.setProperty(style, val == null || isBlank.test(val) ? '' : val);\n  }\n  return this;\n}\n\n// Show element\nfunction show() {\n  return this.css('display', '');\n}\n\n// Hide element\nfunction hide() {\n  return this.css('display', 'none');\n}\n\n// Is element visible?\nfunction visible() {\n  return this.css('display') !== 'none';\n}\nregisterMethods('Dom', {\n  css,\n  show,\n  hide,\n  visible\n});\n\n// Store data values on svg nodes\nfunction data(a, v, r) {\n  if (a == null) {\n    // get an object of attributes\n    return this.data(map(filter(this.node.attributes, el => el.nodeName.indexOf('data-') === 0), el => el.nodeName.slice(5)));\n  } else if (a instanceof Array) {\n    const data = {};\n    for (const key of a) {\n      data[key] = this.data(key);\n    }\n    return data;\n  } else if (typeof a === 'object') {\n    for (v in a) {\n      this.data(v, a[v]);\n    }\n  } else if (arguments.length < 2) {\n    try {\n      return JSON.parse(this.attr('data-' + a));\n    } catch (e) {\n      return this.attr('data-' + a);\n    }\n  } else {\n    this.attr('data-' + a, v === null ? null : r === true || typeof v === 'string' || typeof v === 'number' ? v : JSON.stringify(v));\n  }\n  return this;\n}\nregisterMethods('Dom', {\n  data\n});\n\n// Remember arbitrary data\nfunction remember(k, v) {\n  // remember every item in an object individually\n  if (typeof arguments[0] === 'object') {\n    for (const key in k) {\n      this.remember(key, k[key]);\n    }\n  } else if (arguments.length === 1) {\n    // retrieve memory\n    return this.memory()[k];\n  } else {\n    // store memory\n    this.memory()[k] = v;\n  }\n  return this;\n}\n\n// Erase a given memory\nfunction forget() {\n  if (arguments.length === 0) {\n    this._memory = {};\n  } else {\n    for (let i = arguments.length - 1; i >= 0; i--) {\n      delete this.memory()[arguments[i]];\n    }\n  }\n  return this;\n}\n\n// This triggers creation of a new hidden class which is not performant\n// However, this function is not rarely used so it will not happen frequently\n// Return local memory object\nfunction memory() {\n  return this._memory = this._memory || {};\n}\nregisterMethods('Dom', {\n  remember,\n  forget,\n  memory\n});\n\nfunction sixDigitHex(hex) {\n  return hex.length === 4 ? ['#', hex.substring(1, 2), hex.substring(1, 2), hex.substring(2, 3), hex.substring(2, 3), hex.substring(3, 4), hex.substring(3, 4)].join('') : hex;\n}\nfunction componentHex(component) {\n  const integer = Math.round(component);\n  const bounded = Math.max(0, Math.min(255, integer));\n  const hex = bounded.toString(16);\n  return hex.length === 1 ? '0' + hex : hex;\n}\nfunction is(object, space) {\n  for (let i = space.length; i--;) {\n    if (object[space[i]] == null) {\n      return false;\n    }\n  }\n  return true;\n}\nfunction getParameters(a, b) {\n  const params = is(a, 'rgb') ? {\n    _a: a.r,\n    _b: a.g,\n    _c: a.b,\n    _d: 0,\n    space: 'rgb'\n  } : is(a, 'xyz') ? {\n    _a: a.x,\n    _b: a.y,\n    _c: a.z,\n    _d: 0,\n    space: 'xyz'\n  } : is(a, 'hsl') ? {\n    _a: a.h,\n    _b: a.s,\n    _c: a.l,\n    _d: 0,\n    space: 'hsl'\n  } : is(a, 'lab') ? {\n    _a: a.l,\n    _b: a.a,\n    _c: a.b,\n    _d: 0,\n    space: 'lab'\n  } : is(a, 'lch') ? {\n    _a: a.l,\n    _b: a.c,\n    _c: a.h,\n    _d: 0,\n    space: 'lch'\n  } : is(a, 'cmyk') ? {\n    _a: a.c,\n    _b: a.m,\n    _c: a.y,\n    _d: a.k,\n    space: 'cmyk'\n  } : {\n    _a: 0,\n    _b: 0,\n    _c: 0,\n    space: 'rgb'\n  };\n  params.space = b || params.space;\n  return params;\n}\nfunction cieSpace(space) {\n  if (space === 'lab' || space === 'xyz' || space === 'lch') {\n    return true;\n  } else {\n    return false;\n  }\n}\nfunction hueToRgb(p, q, t) {\n  if (t < 0) t += 1;\n  if (t > 1) t -= 1;\n  if (t < 1 / 6) return p + (q - p) * 6 * t;\n  if (t < 1 / 2) return q;\n  if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n  return p;\n}\nclass Color {\n  constructor(...inputs) {\n    this.init(...inputs);\n  }\n\n  // Test if given value is a color\n  static isColor(color) {\n    return color && (color instanceof Color || this.isRgb(color) || this.test(color));\n  }\n\n  // Test if given value is an rgb object\n  static isRgb(color) {\n    return color && typeof color.r === 'number' && typeof color.g === 'number' && typeof color.b === 'number';\n  }\n\n  /*\n  Generating random colors\n  */\n  static random(mode = 'vibrant', t) {\n    // Get the math modules\n    const {\n      random,\n      round,\n      sin,\n      PI: pi\n    } = Math;\n\n    // Run the correct generator\n    if (mode === 'vibrant') {\n      const l = (81 - 57) * random() + 57;\n      const c = (83 - 45) * random() + 45;\n      const h = 360 * random();\n      const color = new Color(l, c, h, 'lch');\n      return color;\n    } else if (mode === 'sine') {\n      t = t == null ? random() : t;\n      const r = round(80 * sin(2 * pi * t / 0.5 + 0.01) + 150);\n      const g = round(50 * sin(2 * pi * t / 0.5 + 4.6) + 200);\n      const b = round(100 * sin(2 * pi * t / 0.5 + 2.3) + 150);\n      const color = new Color(r, g, b);\n      return color;\n    } else if (mode === 'pastel') {\n      const l = (94 - 86) * random() + 86;\n      const c = (26 - 9) * random() + 9;\n      const h = 360 * random();\n      const color = new Color(l, c, h, 'lch');\n      return color;\n    } else if (mode === 'dark') {\n      const l = 10 + 10 * random();\n      const c = (125 - 75) * random() + 86;\n      const h = 360 * random();\n      const color = new Color(l, c, h, 'lch');\n      return color;\n    } else if (mode === 'rgb') {\n      const r = 255 * random();\n      const g = 255 * random();\n      const b = 255 * random();\n      const color = new Color(r, g, b);\n      return color;\n    } else if (mode === 'lab') {\n      const l = 100 * random();\n      const a = 256 * random() - 128;\n      const b = 256 * random() - 128;\n      const color = new Color(l, a, b, 'lab');\n      return color;\n    } else if (mode === 'grey') {\n      const grey = 255 * random();\n      const color = new Color(grey, grey, grey);\n      return color;\n    } else {\n      throw new Error('Unsupported random color mode');\n    }\n  }\n\n  // Test if given value is a color string\n  static test(color) {\n    return typeof color === 'string' && (isHex.test(color) || isRgb.test(color));\n  }\n  cmyk() {\n    // Get the rgb values for the current color\n    const {\n      _a,\n      _b,\n      _c\n    } = this.rgb();\n    const [r, g, b] = [_a, _b, _c].map(v => v / 255);\n\n    // Get the cmyk values in an unbounded format\n    const k = Math.min(1 - r, 1 - g, 1 - b);\n    if (k === 1) {\n      // Catch the black case\n      return new Color(0, 0, 0, 1, 'cmyk');\n    }\n    const c = (1 - r - k) / (1 - k);\n    const m = (1 - g - k) / (1 - k);\n    const y = (1 - b - k) / (1 - k);\n\n    // Construct the new color\n    const color = new Color(c, m, y, k, 'cmyk');\n    return color;\n  }\n  hsl() {\n    // Get the rgb values\n    const {\n      _a,\n      _b,\n      _c\n    } = this.rgb();\n    const [r, g, b] = [_a, _b, _c].map(v => v / 255);\n\n    // Find the maximum and minimum values to get the lightness\n    const max = Math.max(r, g, b);\n    const min = Math.min(r, g, b);\n    const l = (max + min) / 2;\n\n    // If the r, g, v values are identical then we are grey\n    const isGrey = max === min;\n\n    // Calculate the hue and saturation\n    const delta = max - min;\n    const s = isGrey ? 0 : l > 0.5 ? delta / (2 - max - min) : delta / (max + min);\n    const h = isGrey ? 0 : max === r ? ((g - b) / delta + (g < b ? 6 : 0)) / 6 : max === g ? ((b - r) / delta + 2) / 6 : max === b ? ((r - g) / delta + 4) / 6 : 0;\n\n    // Construct and return the new color\n    const color = new Color(360 * h, 100 * s, 100 * l, 'hsl');\n    return color;\n  }\n  init(a = 0, b = 0, c = 0, d = 0, space = 'rgb') {\n    // This catches the case when a falsy value is passed like ''\n    a = !a ? 0 : a;\n\n    // Reset all values in case the init function is rerun with new color space\n    if (this.space) {\n      for (const component in this.space) {\n        delete this[this.space[component]];\n      }\n    }\n    if (typeof a === 'number') {\n      // Allow for the case that we don't need d...\n      space = typeof d === 'string' ? d : space;\n      d = typeof d === 'string' ? 0 : d;\n\n      // Assign the values straight to the color\n      Object.assign(this, {\n        _a: a,\n        _b: b,\n        _c: c,\n        _d: d,\n        space\n      });\n      // If the user gave us an array, make the color from it\n    } else if (a instanceof Array) {\n      this.space = b || (typeof a[3] === 'string' ? a[3] : a[4]) || 'rgb';\n      Object.assign(this, {\n        _a: a[0],\n        _b: a[1],\n        _c: a[2],\n        _d: a[3] || 0\n      });\n    } else if (a instanceof Object) {\n      // Set the object up and assign its values directly\n      const values = getParameters(a, b);\n      Object.assign(this, values);\n    } else if (typeof a === 'string') {\n      if (isRgb.test(a)) {\n        const noWhitespace = a.replace(whitespace, '');\n        const [_a, _b, _c] = rgb.exec(noWhitespace).slice(1, 4).map(v => parseInt(v));\n        Object.assign(this, {\n          _a,\n          _b,\n          _c,\n          _d: 0,\n          space: 'rgb'\n        });\n      } else if (isHex.test(a)) {\n        const hexParse = v => parseInt(v, 16);\n        const [, _a, _b, _c] = hex.exec(sixDigitHex(a)).map(hexParse);\n        Object.assign(this, {\n          _a,\n          _b,\n          _c,\n          _d: 0,\n          space: 'rgb'\n        });\n      } else throw Error(\"Unsupported string format, can't construct Color\");\n    }\n\n    // Now add the components as a convenience\n    const {\n      _a,\n      _b,\n      _c,\n      _d\n    } = this;\n    const components = this.space === 'rgb' ? {\n      r: _a,\n      g: _b,\n      b: _c\n    } : this.space === 'xyz' ? {\n      x: _a,\n      y: _b,\n      z: _c\n    } : this.space === 'hsl' ? {\n      h: _a,\n      s: _b,\n      l: _c\n    } : this.space === 'lab' ? {\n      l: _a,\n      a: _b,\n      b: _c\n    } : this.space === 'lch' ? {\n      l: _a,\n      c: _b,\n      h: _c\n    } : this.space === 'cmyk' ? {\n      c: _a,\n      m: _b,\n      y: _c,\n      k: _d\n    } : {};\n    Object.assign(this, components);\n  }\n  lab() {\n    // Get the xyz color\n    const {\n      x,\n      y,\n      z\n    } = this.xyz();\n\n    // Get the lab components\n    const l = 116 * y - 16;\n    const a = 500 * (x - y);\n    const b = 200 * (y - z);\n\n    // Construct and return a new color\n    const color = new Color(l, a, b, 'lab');\n    return color;\n  }\n  lch() {\n    // Get the lab color directly\n    const {\n      l,\n      a,\n      b\n    } = this.lab();\n\n    // Get the chromaticity and the hue using polar coordinates\n    const c = Math.sqrt(a ** 2 + b ** 2);\n    let h = 180 * Math.atan2(b, a) / Math.PI;\n    if (h < 0) {\n      h *= -1;\n      h = 360 - h;\n    }\n\n    // Make a new color and return it\n    const color = new Color(l, c, h, 'lch');\n    return color;\n  }\n  /*\n  Conversion Methods\n  */\n\n  rgb() {\n    if (this.space === 'rgb') {\n      return this;\n    } else if (cieSpace(this.space)) {\n      // Convert to the xyz color space\n      let {\n        x,\n        y,\n        z\n      } = this;\n      if (this.space === 'lab' || this.space === 'lch') {\n        // Get the values in the lab space\n        let {\n          l,\n          a,\n          b\n        } = this;\n        if (this.space === 'lch') {\n          const {\n            c,\n            h\n          } = this;\n          const dToR = Math.PI / 180;\n          a = c * Math.cos(dToR * h);\n          b = c * Math.sin(dToR * h);\n        }\n\n        // Undo the nonlinear function\n        const yL = (l + 16) / 116;\n        const xL = a / 500 + yL;\n        const zL = yL - b / 200;\n\n        // Get the xyz values\n        const ct = 16 / 116;\n        const mx = 0.008856;\n        const nm = 7.787;\n        x = 0.95047 * (xL ** 3 > mx ? xL ** 3 : (xL - ct) / nm);\n        y = 1.0 * (yL ** 3 > mx ? yL ** 3 : (yL - ct) / nm);\n        z = 1.08883 * (zL ** 3 > mx ? zL ** 3 : (zL - ct) / nm);\n      }\n\n      // Convert xyz to unbounded rgb values\n      const rU = x * 3.2406 + y * -1.5372 + z * -0.4986;\n      const gU = x * -0.9689 + y * 1.8758 + z * 0.0415;\n      const bU = x * 0.0557 + y * -0.204 + z * 1.057;\n\n      // Convert the values to true rgb values\n      const pow = Math.pow;\n      const bd = 0.0031308;\n      const r = rU > bd ? 1.055 * pow(rU, 1 / 2.4) - 0.055 : 12.92 * rU;\n      const g = gU > bd ? 1.055 * pow(gU, 1 / 2.4) - 0.055 : 12.92 * gU;\n      const b = bU > bd ? 1.055 * pow(bU, 1 / 2.4) - 0.055 : 12.92 * bU;\n\n      // Make and return the color\n      const color = new Color(255 * r, 255 * g, 255 * b);\n      return color;\n    } else if (this.space === 'hsl') {\n      // https://bgrins.github.io/TinyColor/docs/tinycolor.html\n      // Get the current hsl values\n      let {\n        h,\n        s,\n        l\n      } = this;\n      h /= 360;\n      s /= 100;\n      l /= 100;\n\n      // If we are grey, then just make the color directly\n      if (s === 0) {\n        l *= 255;\n        const color = new Color(l, l, l);\n        return color;\n      }\n\n      // TODO I have no idea what this does :D If you figure it out, tell me!\n      const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n      const p = 2 * l - q;\n\n      // Get the rgb values\n      const r = 255 * hueToRgb(p, q, h + 1 / 3);\n      const g = 255 * hueToRgb(p, q, h);\n      const b = 255 * hueToRgb(p, q, h - 1 / 3);\n\n      // Make a new color\n      const color = new Color(r, g, b);\n      return color;\n    } else if (this.space === 'cmyk') {\n      // https://gist.github.com/felipesabino/5066336\n      // Get the normalised cmyk values\n      const {\n        c,\n        m,\n        y,\n        k\n      } = this;\n\n      // Get the rgb values\n      const r = 255 * (1 - Math.min(1, c * (1 - k) + k));\n      const g = 255 * (1 - Math.min(1, m * (1 - k) + k));\n      const b = 255 * (1 - Math.min(1, y * (1 - k) + k));\n\n      // Form the color and return it\n      const color = new Color(r, g, b);\n      return color;\n    } else {\n      return this;\n    }\n  }\n  toArray() {\n    const {\n      _a,\n      _b,\n      _c,\n      _d,\n      space\n    } = this;\n    return [_a, _b, _c, _d, space];\n  }\n  toHex() {\n    const [r, g, b] = this._clamped().map(componentHex);\n    return `#${r}${g}${b}`;\n  }\n  toRgb() {\n    const [rV, gV, bV] = this._clamped();\n    const string = `rgb(${rV},${gV},${bV})`;\n    return string;\n  }\n  toString() {\n    return this.toHex();\n  }\n  xyz() {\n    // Normalise the red, green and blue values\n    const {\n      _a: r255,\n      _b: g255,\n      _c: b255\n    } = this.rgb();\n    const [r, g, b] = [r255, g255, b255].map(v => v / 255);\n\n    // Convert to the lab rgb space\n    const rL = r > 0.04045 ? Math.pow((r + 0.055) / 1.055, 2.4) : r / 12.92;\n    const gL = g > 0.04045 ? Math.pow((g + 0.055) / 1.055, 2.4) : g / 12.92;\n    const bL = b > 0.04045 ? Math.pow((b + 0.055) / 1.055, 2.4) : b / 12.92;\n\n    // Convert to the xyz color space without bounding the values\n    const xU = (rL * 0.4124 + gL * 0.3576 + bL * 0.1805) / 0.95047;\n    const yU = (rL * 0.2126 + gL * 0.7152 + bL * 0.0722) / 1.0;\n    const zU = (rL * 0.0193 + gL * 0.1192 + bL * 0.9505) / 1.08883;\n\n    // Get the proper xyz values by applying the bounding\n    const x = xU > 0.008856 ? Math.pow(xU, 1 / 3) : 7.787 * xU + 16 / 116;\n    const y = yU > 0.008856 ? Math.pow(yU, 1 / 3) : 7.787 * yU + 16 / 116;\n    const z = zU > 0.008856 ? Math.pow(zU, 1 / 3) : 7.787 * zU + 16 / 116;\n\n    // Make and return the color\n    const color = new Color(x, y, z, 'xyz');\n    return color;\n  }\n\n  /*\n  Input and Output methods\n  */\n\n  _clamped() {\n    const {\n      _a,\n      _b,\n      _c\n    } = this.rgb();\n    const {\n      max,\n      min,\n      round\n    } = Math;\n    const format = v => max(0, min(round(v), 255));\n    return [_a, _b, _c].map(format);\n  }\n\n  /*\n  Constructing colors\n  */\n}\n\nclass Point {\n  // Initialize\n  constructor(...args) {\n    this.init(...args);\n  }\n\n  // Clone point\n  clone() {\n    return new Point(this);\n  }\n  init(x, y) {\n    const base = {\n      x: 0,\n      y: 0\n    };\n\n    // ensure source as object\n    const source = Array.isArray(x) ? {\n      x: x[0],\n      y: x[1]\n    } : typeof x === 'object' ? {\n      x: x.x,\n      y: x.y\n    } : {\n      x: x,\n      y: y\n    };\n\n    // merge source\n    this.x = source.x == null ? base.x : source.x;\n    this.y = source.y == null ? base.y : source.y;\n    return this;\n  }\n  toArray() {\n    return [this.x, this.y];\n  }\n  transform(m) {\n    return this.clone().transformO(m);\n  }\n\n  // Transform point with matrix\n  transformO(m) {\n    if (!Matrix.isMatrixLike(m)) {\n      m = new Matrix(m);\n    }\n    const {\n      x,\n      y\n    } = this;\n\n    // Perform the matrix multiplication\n    this.x = m.a * x + m.c * y + m.e;\n    this.y = m.b * x + m.d * y + m.f;\n    return this;\n  }\n}\nfunction point(x, y) {\n  return new Point(x, y).transformO(this.screenCTM().inverseO());\n}\n\nfunction closeEnough(a, b, threshold) {\n  return Math.abs(b - a) < (1e-6);\n}\nclass Matrix {\n  constructor(...args) {\n    this.init(...args);\n  }\n  static formatTransforms(o) {\n    // Get all of the parameters required to form the matrix\n    const flipBoth = o.flip === 'both' || o.flip === true;\n    const flipX = o.flip && (flipBoth || o.flip === 'x') ? -1 : 1;\n    const flipY = o.flip && (flipBoth || o.flip === 'y') ? -1 : 1;\n    const skewX = o.skew && o.skew.length ? o.skew[0] : isFinite(o.skew) ? o.skew : isFinite(o.skewX) ? o.skewX : 0;\n    const skewY = o.skew && o.skew.length ? o.skew[1] : isFinite(o.skew) ? o.skew : isFinite(o.skewY) ? o.skewY : 0;\n    const scaleX = o.scale && o.scale.length ? o.scale[0] * flipX : isFinite(o.scale) ? o.scale * flipX : isFinite(o.scaleX) ? o.scaleX * flipX : flipX;\n    const scaleY = o.scale && o.scale.length ? o.scale[1] * flipY : isFinite(o.scale) ? o.scale * flipY : isFinite(o.scaleY) ? o.scaleY * flipY : flipY;\n    const shear = o.shear || 0;\n    const theta = o.rotate || o.theta || 0;\n    const origin = new Point(o.origin || o.around || o.ox || o.originX, o.oy || o.originY);\n    const ox = origin.x;\n    const oy = origin.y;\n    // We need Point to be invalid if nothing was passed because we cannot default to 0 here. That is why NaN\n    const position = new Point(o.position || o.px || o.positionX || NaN, o.py || o.positionY || NaN);\n    const px = position.x;\n    const py = position.y;\n    const translate = new Point(o.translate || o.tx || o.translateX, o.ty || o.translateY);\n    const tx = translate.x;\n    const ty = translate.y;\n    const relative = new Point(o.relative || o.rx || o.relativeX, o.ry || o.relativeY);\n    const rx = relative.x;\n    const ry = relative.y;\n\n    // Populate all of the values\n    return {\n      scaleX,\n      scaleY,\n      skewX,\n      skewY,\n      shear,\n      theta,\n      rx,\n      ry,\n      tx,\n      ty,\n      ox,\n      oy,\n      px,\n      py\n    };\n  }\n  static fromArray(a) {\n    return {\n      a: a[0],\n      b: a[1],\n      c: a[2],\n      d: a[3],\n      e: a[4],\n      f: a[5]\n    };\n  }\n  static isMatrixLike(o) {\n    return o.a != null || o.b != null || o.c != null || o.d != null || o.e != null || o.f != null;\n  }\n\n  // left matrix, right matrix, target matrix which is overwritten\n  static matrixMultiply(l, r, o) {\n    // Work out the product directly\n    const a = l.a * r.a + l.c * r.b;\n    const b = l.b * r.a + l.d * r.b;\n    const c = l.a * r.c + l.c * r.d;\n    const d = l.b * r.c + l.d * r.d;\n    const e = l.e + l.a * r.e + l.c * r.f;\n    const f = l.f + l.b * r.e + l.d * r.f;\n\n    // make sure to use local variables because l/r and o could be the same\n    o.a = a;\n    o.b = b;\n    o.c = c;\n    o.d = d;\n    o.e = e;\n    o.f = f;\n    return o;\n  }\n  around(cx, cy, matrix) {\n    return this.clone().aroundO(cx, cy, matrix);\n  }\n\n  // Transform around a center point\n  aroundO(cx, cy, matrix) {\n    const dx = cx || 0;\n    const dy = cy || 0;\n    return this.translateO(-dx, -dy).lmultiplyO(matrix).translateO(dx, dy);\n  }\n\n  // Clones this matrix\n  clone() {\n    return new Matrix(this);\n  }\n\n  // Decomposes this matrix into its affine parameters\n  decompose(cx = 0, cy = 0) {\n    // Get the parameters from the matrix\n    const a = this.a;\n    const b = this.b;\n    const c = this.c;\n    const d = this.d;\n    const e = this.e;\n    const f = this.f;\n\n    // Figure out if the winding direction is clockwise or counterclockwise\n    const determinant = a * d - b * c;\n    const ccw = determinant > 0 ? 1 : -1;\n\n    // Since we only shear in x, we can use the x basis to get the x scale\n    // and the rotation of the resulting matrix\n    const sx = ccw * Math.sqrt(a * a + b * b);\n    const thetaRad = Math.atan2(ccw * b, ccw * a);\n    const theta = 180 / Math.PI * thetaRad;\n    const ct = Math.cos(thetaRad);\n    const st = Math.sin(thetaRad);\n\n    // We can then solve the y basis vector simultaneously to get the other\n    // two affine parameters directly from these parameters\n    const lam = (a * c + b * d) / determinant;\n    const sy = c * sx / (lam * a - b) || d * sx / (lam * b + a);\n\n    // Use the translations\n    const tx = e - cx + cx * ct * sx + cy * (lam * ct * sx - st * sy);\n    const ty = f - cy + cx * st * sx + cy * (lam * st * sx + ct * sy);\n\n    // Construct the decomposition and return it\n    return {\n      // Return the affine parameters\n      scaleX: sx,\n      scaleY: sy,\n      shear: lam,\n      rotate: theta,\n      translateX: tx,\n      translateY: ty,\n      originX: cx,\n      originY: cy,\n      // Return the matrix parameters\n      a: this.a,\n      b: this.b,\n      c: this.c,\n      d: this.d,\n      e: this.e,\n      f: this.f\n    };\n  }\n\n  // Check if two matrices are equal\n  equals(other) {\n    if (other === this) return true;\n    const comp = new Matrix(other);\n    return closeEnough(this.a, comp.a) && closeEnough(this.b, comp.b) && closeEnough(this.c, comp.c) && closeEnough(this.d, comp.d) && closeEnough(this.e, comp.e) && closeEnough(this.f, comp.f);\n  }\n\n  // Flip matrix on x or y, at a given offset\n  flip(axis, around) {\n    return this.clone().flipO(axis, around);\n  }\n  flipO(axis, around) {\n    return axis === 'x' ? this.scaleO(-1, 1, around, 0) : axis === 'y' ? this.scaleO(1, -1, 0, around) : this.scaleO(-1, -1, axis, around || axis); // Define an x, y flip point\n  }\n\n  // Initialize\n  init(source) {\n    const base = Matrix.fromArray([1, 0, 0, 1, 0, 0]);\n\n    // ensure source as object\n    source = source instanceof Element ? source.matrixify() : typeof source === 'string' ? Matrix.fromArray(source.split(delimiter).map(parseFloat)) : Array.isArray(source) ? Matrix.fromArray(source) : typeof source === 'object' && Matrix.isMatrixLike(source) ? source : typeof source === 'object' ? new Matrix().transform(source) : arguments.length === 6 ? Matrix.fromArray([].slice.call(arguments)) : base;\n\n    // Merge the source matrix with the base matrix\n    this.a = source.a != null ? source.a : base.a;\n    this.b = source.b != null ? source.b : base.b;\n    this.c = source.c != null ? source.c : base.c;\n    this.d = source.d != null ? source.d : base.d;\n    this.e = source.e != null ? source.e : base.e;\n    this.f = source.f != null ? source.f : base.f;\n    return this;\n  }\n  inverse() {\n    return this.clone().inverseO();\n  }\n\n  // Inverses matrix\n  inverseO() {\n    // Get the current parameters out of the matrix\n    const a = this.a;\n    const b = this.b;\n    const c = this.c;\n    const d = this.d;\n    const e = this.e;\n    const f = this.f;\n\n    // Invert the 2x2 matrix in the top left\n    const det = a * d - b * c;\n    if (!det) throw new Error('Cannot invert ' + this);\n\n    // Calculate the top 2x2 matrix\n    const na = d / det;\n    const nb = -b / det;\n    const nc = -c / det;\n    const nd = a / det;\n\n    // Apply the inverted matrix to the top right\n    const ne = -(na * e + nc * f);\n    const nf = -(nb * e + nd * f);\n\n    // Construct the inverted matrix\n    this.a = na;\n    this.b = nb;\n    this.c = nc;\n    this.d = nd;\n    this.e = ne;\n    this.f = nf;\n    return this;\n  }\n  lmultiply(matrix) {\n    return this.clone().lmultiplyO(matrix);\n  }\n  lmultiplyO(matrix) {\n    const r = this;\n    const l = matrix instanceof Matrix ? matrix : new Matrix(matrix);\n    return Matrix.matrixMultiply(l, r, this);\n  }\n\n  // Left multiplies by the given matrix\n  multiply(matrix) {\n    return this.clone().multiplyO(matrix);\n  }\n  multiplyO(matrix) {\n    // Get the matrices\n    const l = this;\n    const r = matrix instanceof Matrix ? matrix : new Matrix(matrix);\n    return Matrix.matrixMultiply(l, r, this);\n  }\n\n  // Rotate matrix\n  rotate(r, cx, cy) {\n    return this.clone().rotateO(r, cx, cy);\n  }\n  rotateO(r, cx = 0, cy = 0) {\n    // Convert degrees to radians\n    r = radians(r);\n    const cos = Math.cos(r);\n    const sin = Math.sin(r);\n    const {\n      a,\n      b,\n      c,\n      d,\n      e,\n      f\n    } = this;\n    this.a = a * cos - b * sin;\n    this.b = b * cos + a * sin;\n    this.c = c * cos - d * sin;\n    this.d = d * cos + c * sin;\n    this.e = e * cos - f * sin + cy * sin - cx * cos + cx;\n    this.f = f * cos + e * sin - cx * sin - cy * cos + cy;\n    return this;\n  }\n\n  // Scale matrix\n  scale() {\n    return this.clone().scaleO(...arguments);\n  }\n  scaleO(x, y = x, cx = 0, cy = 0) {\n    // Support uniform scaling\n    if (arguments.length === 3) {\n      cy = cx;\n      cx = y;\n      y = x;\n    }\n    const {\n      a,\n      b,\n      c,\n      d,\n      e,\n      f\n    } = this;\n    this.a = a * x;\n    this.b = b * y;\n    this.c = c * x;\n    this.d = d * y;\n    this.e = e * x - cx * x + cx;\n    this.f = f * y - cy * y + cy;\n    return this;\n  }\n\n  // Shear matrix\n  shear(a, cx, cy) {\n    return this.clone().shearO(a, cx, cy);\n  }\n\n  // eslint-disable-next-line no-unused-vars\n  shearO(lx, cx = 0, cy = 0) {\n    const {\n      a,\n      b,\n      c,\n      d,\n      e,\n      f\n    } = this;\n    this.a = a + b * lx;\n    this.c = c + d * lx;\n    this.e = e + f * lx - cy * lx;\n    return this;\n  }\n\n  // Skew Matrix\n  skew() {\n    return this.clone().skewO(...arguments);\n  }\n  skewO(x, y = x, cx = 0, cy = 0) {\n    // support uniformal skew\n    if (arguments.length === 3) {\n      cy = cx;\n      cx = y;\n      y = x;\n    }\n\n    // Convert degrees to radians\n    x = radians(x);\n    y = radians(y);\n    const lx = Math.tan(x);\n    const ly = Math.tan(y);\n    const {\n      a,\n      b,\n      c,\n      d,\n      e,\n      f\n    } = this;\n    this.a = a + b * lx;\n    this.b = b + a * ly;\n    this.c = c + d * lx;\n    this.d = d + c * ly;\n    this.e = e + f * lx - cy * lx;\n    this.f = f + e * ly - cx * ly;\n    return this;\n  }\n\n  // SkewX\n  skewX(x, cx, cy) {\n    return this.skew(x, 0, cx, cy);\n  }\n\n  // SkewY\n  skewY(y, cx, cy) {\n    return this.skew(0, y, cx, cy);\n  }\n  toArray() {\n    return [this.a, this.b, this.c, this.d, this.e, this.f];\n  }\n\n  // Convert matrix to string\n  toString() {\n    return 'matrix(' + this.a + ',' + this.b + ',' + this.c + ',' + this.d + ',' + this.e + ',' + this.f + ')';\n  }\n\n  // Transform a matrix into another matrix by manipulating the space\n  transform(o) {\n    // Check if o is a matrix and then left multiply it directly\n    if (Matrix.isMatrixLike(o)) {\n      const matrix = new Matrix(o);\n      return matrix.multiplyO(this);\n    }\n\n    // Get the proposed transformations and the current transformations\n    const t = Matrix.formatTransforms(o);\n    const current = this;\n    const {\n      x: ox,\n      y: oy\n    } = new Point(t.ox, t.oy).transform(current);\n\n    // Construct the resulting matrix\n    const transformer = new Matrix().translateO(t.rx, t.ry).lmultiplyO(current).translateO(-ox, -oy).scaleO(t.scaleX, t.scaleY).skewO(t.skewX, t.skewY).shearO(t.shear).rotateO(t.theta).translateO(ox, oy);\n\n    // If we want the origin at a particular place, we force it there\n    if (isFinite(t.px) || isFinite(t.py)) {\n      const origin = new Point(ox, oy).transform(transformer);\n      // TODO: Replace t.px with isFinite(t.px)\n      // Doesn't work because t.px is also 0 if it wasn't passed\n      const dx = isFinite(t.px) ? t.px - origin.x : 0;\n      const dy = isFinite(t.py) ? t.py - origin.y : 0;\n      transformer.translateO(dx, dy);\n    }\n\n    // Translate now after positioning\n    transformer.translateO(t.tx, t.ty);\n    return transformer;\n  }\n\n  // Translate matrix\n  translate(x, y) {\n    return this.clone().translateO(x, y);\n  }\n  translateO(x, y) {\n    this.e += x || 0;\n    this.f += y || 0;\n    return this;\n  }\n  valueOf() {\n    return {\n      a: this.a,\n      b: this.b,\n      c: this.c,\n      d: this.d,\n      e: this.e,\n      f: this.f\n    };\n  }\n}\nfunction ctm() {\n  return new Matrix(this.node.getCTM());\n}\nfunction screenCTM() {\n  try {\n    /* https://bugzilla.mozilla.org/show_bug.cgi?id=1344537\n       This is needed because FF does not return the transformation matrix\n       for the inner coordinate system when getScreenCTM() is called on nested svgs.\n       However all other Browsers do that */\n    if (typeof this.isRoot === 'function' && !this.isRoot()) {\n      const rect = this.rect(1, 1);\n      const m = rect.node.getScreenCTM();\n      rect.remove();\n      return new Matrix(m);\n    }\n    return new Matrix(this.node.getScreenCTM());\n  } catch (e) {\n    console.warn(`Cannot get CTM from SVG node ${this.node.nodeName}. Is the element rendered?`);\n    return new Matrix();\n  }\n}\nregister(Matrix, 'Matrix');\n\nfunction parser() {\n  // Reuse cached element if possible\n  if (!parser.nodes) {\n    const svg = makeInstance().size(2, 0);\n    svg.node.style.cssText = ['opacity: 0', 'position: absolute', 'left: -100%', 'top: -100%', 'overflow: hidden'].join(';');\n    svg.attr('focusable', 'false');\n    svg.attr('aria-hidden', 'true');\n    const path = svg.path().node;\n    parser.nodes = {\n      svg,\n      path\n    };\n  }\n  if (!parser.nodes.svg.node.parentNode) {\n    const b = globals.document.body || globals.document.documentElement;\n    parser.nodes.svg.addTo(b);\n  }\n  return parser.nodes;\n}\n\nfunction isNulledBox(box) {\n  return !box.width && !box.height && !box.x && !box.y;\n}\nfunction domContains(node) {\n  return node === globals.document || (globals.document.documentElement.contains || function (node) {\n    // This is IE - it does not support contains() for top-level SVGs\n    while (node.parentNode) {\n      node = node.parentNode;\n    }\n    return node === globals.document;\n  }).call(globals.document.documentElement, node);\n}\nclass Box {\n  constructor(...args) {\n    this.init(...args);\n  }\n  addOffset() {\n    // offset by window scroll position, because getBoundingClientRect changes when window is scrolled\n    this.x += globals.window.pageXOffset;\n    this.y += globals.window.pageYOffset;\n    return new Box(this);\n  }\n  init(source) {\n    const base = [0, 0, 0, 0];\n    source = typeof source === 'string' ? source.split(delimiter).map(parseFloat) : Array.isArray(source) ? source : typeof source === 'object' ? [source.left != null ? source.left : source.x, source.top != null ? source.top : source.y, source.width, source.height] : arguments.length === 4 ? [].slice.call(arguments) : base;\n    this.x = source[0] || 0;\n    this.y = source[1] || 0;\n    this.width = this.w = source[2] || 0;\n    this.height = this.h = source[3] || 0;\n\n    // Add more bounding box properties\n    this.x2 = this.x + this.w;\n    this.y2 = this.y + this.h;\n    this.cx = this.x + this.w / 2;\n    this.cy = this.y + this.h / 2;\n    return this;\n  }\n  isNulled() {\n    return isNulledBox(this);\n  }\n\n  // Merge rect box with another, return a new instance\n  merge(box) {\n    const x = Math.min(this.x, box.x);\n    const y = Math.min(this.y, box.y);\n    const width = Math.max(this.x + this.width, box.x + box.width) - x;\n    const height = Math.max(this.y + this.height, box.y + box.height) - y;\n    return new Box(x, y, width, height);\n  }\n  toArray() {\n    return [this.x, this.y, this.width, this.height];\n  }\n  toString() {\n    return this.x + ' ' + this.y + ' ' + this.width + ' ' + this.height;\n  }\n  transform(m) {\n    if (!(m instanceof Matrix)) {\n      m = new Matrix(m);\n    }\n    let xMin = Infinity;\n    let xMax = -Infinity;\n    let yMin = Infinity;\n    let yMax = -Infinity;\n    const pts = [new Point(this.x, this.y), new Point(this.x2, this.y), new Point(this.x, this.y2), new Point(this.x2, this.y2)];\n    pts.forEach(function (p) {\n      p = p.transform(m);\n      xMin = Math.min(xMin, p.x);\n      xMax = Math.max(xMax, p.x);\n      yMin = Math.min(yMin, p.y);\n      yMax = Math.max(yMax, p.y);\n    });\n    return new Box(xMin, yMin, xMax - xMin, yMax - yMin);\n  }\n}\nfunction getBox(el, getBBoxFn, retry) {\n  let box;\n  try {\n    // Try to get the box with the provided function\n    box = getBBoxFn(el.node);\n\n    // If the box is worthless and not even in the dom, retry\n    // by throwing an error here...\n    if (isNulledBox(box) && !domContains(el.node)) {\n      throw new Error('Element not in the dom');\n    }\n  } catch (e) {\n    // ... and calling the retry handler here\n    box = retry(el);\n  }\n  return box;\n}\nfunction bbox() {\n  // Function to get bbox is getBBox()\n  const getBBox = node => node.getBBox();\n\n  // Take all measures so that a stupid browser renders the element\n  // so we can get the bbox from it when we try again\n  const retry = el => {\n    try {\n      const clone = el.clone().addTo(parser().svg).show();\n      const box = clone.node.getBBox();\n      clone.remove();\n      return box;\n    } catch (e) {\n      // We give up...\n      throw new Error(`Getting bbox of element \"${el.node.nodeName}\" is not possible: ${e.toString()}`);\n    }\n  };\n  const box = getBox(this, getBBox, retry);\n  const bbox = new Box(box);\n  return bbox;\n}\nfunction rbox(el) {\n  const getRBox = node => node.getBoundingClientRect();\n  const retry = el => {\n    // There is no point in trying tricks here because if we insert the element into the dom ourselves\n    // it obviously will be at the wrong position\n    throw new Error(`Getting rbox of element \"${el.node.nodeName}\" is not possible`);\n  };\n  const box = getBox(this, getRBox, retry);\n  const rbox = new Box(box);\n\n  // If an element was passed, we want the bbox in the coordinate system of that element\n  if (el) {\n    return rbox.transform(el.screenCTM().inverseO());\n  }\n\n  // Else we want it in absolute screen coordinates\n  // Therefore we need to add the scrollOffset\n  return rbox.addOffset();\n}\n\n// Checks whether the given point is inside the bounding box\nfunction inside(x, y) {\n  const box = this.bbox();\n  return x > box.x && y > box.y && x < box.x + box.width && y < box.y + box.height;\n}\nregisterMethods({\n  viewbox: {\n    viewbox(x, y, width, height) {\n      // act as getter\n      if (x == null) return new Box(this.attr('viewBox'));\n\n      // act as setter\n      return this.attr('viewBox', new Box(x, y, width, height));\n    },\n    zoom(level, point) {\n      // Its best to rely on the attributes here and here is why:\n      // clientXYZ: Doesn't work on non-root svgs because they dont have a CSSBox (silly!)\n      // getBoundingClientRect: Doesn't work because Chrome just ignores width and height of nested svgs completely\n      //                        that means, their clientRect is always as big as the content.\n      //                        Furthermore this size is incorrect if the element is further transformed by its parents\n      // computedStyle: Only returns meaningful values if css was used with px. We dont go this route here!\n      // getBBox: returns the bounding box of its content - that doesn't help!\n      let {\n        width,\n        height\n      } = this.attr(['width', 'height']);\n\n      // Width and height is a string when a number with a unit is present which we can't use\n      // So we try clientXYZ\n      if (!width && !height || typeof width === 'string' || typeof height === 'string') {\n        width = this.node.clientWidth;\n        height = this.node.clientHeight;\n      }\n\n      // Giving up...\n      if (!width || !height) {\n        throw new Error('Impossible to get absolute width and height. Please provide an absolute width and height attribute on the zooming element');\n      }\n      const v = this.viewbox();\n      const zoomX = width / v.width;\n      const zoomY = height / v.height;\n      const zoom = Math.min(zoomX, zoomY);\n      if (level == null) {\n        return zoom;\n      }\n      let zoomAmount = zoom / level;\n\n      // Set the zoomAmount to the highest value which is safe to process and recover from\n      // The * 100 is a bit of wiggle room for the matrix transformation\n      if (zoomAmount === Infinity) zoomAmount = Number.MAX_SAFE_INTEGER / 100;\n      point = point || new Point(width / 2 / zoomX + v.x, height / 2 / zoomY + v.y);\n      const box = new Box(v).transform(new Matrix({\n        scale: zoomAmount,\n        origin: point\n      }));\n      return this.viewbox(box);\n    }\n  }\n});\nregister(Box, 'Box');\n\n// import { subClassArray } from './ArrayPolyfill.js'\n\nclass List extends Array {\n  constructor(arr = [], ...args) {\n    super(arr, ...args);\n    if (typeof arr === 'number') return this;\n    this.length = 0;\n    this.push(...arr);\n  }\n}\nextend([List], {\n  each(fnOrMethodName, ...args) {\n    if (typeof fnOrMethodName === 'function') {\n      return this.map((el, i, arr) => {\n        return fnOrMethodName.call(el, el, i, arr);\n      });\n    } else {\n      return this.map(el => {\n        return el[fnOrMethodName](...args);\n      });\n    }\n  },\n  toArray() {\n    return Array.prototype.concat.apply([], this);\n  }\n});\nconst reserved = ['toArray', 'constructor', 'each'];\nList.extend = function (methods) {\n  methods = methods.reduce((obj, name) => {\n    // Don't overwrite own methods\n    if (reserved.includes(name)) return obj;\n\n    // Don't add private methods\n    if (name[0] === '_') return obj;\n\n    // Allow access to original Array methods through a prefix\n    if (name in Array.prototype) {\n      obj['$' + name] = Array.prototype[name];\n    }\n\n    // Relay every call to each()\n    obj[name] = function (...attrs) {\n      return this.each(name, ...attrs);\n    };\n    return obj;\n  }, {});\n  extend([List], methods);\n};\n\nfunction baseFind(query, parent) {\n  return new List(map((parent || globals.document).querySelectorAll(query), function (node) {\n    return adopt(node);\n  }));\n}\n\n// Scoped find method\nfunction find(query) {\n  return baseFind(query, this.node);\n}\nfunction findOne(query) {\n  return adopt(this.node.querySelector(query));\n}\n\nlet listenerId = 0;\nconst windowEvents = {};\nfunction getEvents(instance) {\n  let n = instance.getEventHolder();\n\n  // We dont want to save events in global space\n  if (n === globals.window) n = windowEvents;\n  if (!n.events) n.events = {};\n  return n.events;\n}\nfunction getEventTarget(instance) {\n  return instance.getEventTarget();\n}\nfunction clearEvents(instance) {\n  let n = instance.getEventHolder();\n  if (n === globals.window) n = windowEvents;\n  if (n.events) n.events = {};\n}\n\n// Add event binder in the SVG namespace\nfunction on(node, events, listener, binding, options) {\n  const l = listener.bind(binding || node);\n  const instance = makeInstance(node);\n  const bag = getEvents(instance);\n  const n = getEventTarget(instance);\n\n  // events can be an array of events or a string of events\n  events = Array.isArray(events) ? events : events.split(delimiter);\n\n  // add id to listener\n  if (!listener._svgjsListenerId) {\n    listener._svgjsListenerId = ++listenerId;\n  }\n  events.forEach(function (event) {\n    const ev = event.split('.')[0];\n    const ns = event.split('.')[1] || '*';\n\n    // ensure valid object\n    bag[ev] = bag[ev] || {};\n    bag[ev][ns] = bag[ev][ns] || {};\n\n    // reference listener\n    bag[ev][ns][listener._svgjsListenerId] = l;\n\n    // add listener\n    n.addEventListener(ev, l, options || false);\n  });\n}\n\n// Add event unbinder in the SVG namespace\nfunction off(node, events, listener, options) {\n  const instance = makeInstance(node);\n  const bag = getEvents(instance);\n  const n = getEventTarget(instance);\n\n  // listener can be a function or a number\n  if (typeof listener === 'function') {\n    listener = listener._svgjsListenerId;\n    if (!listener) return;\n  }\n\n  // events can be an array of events or a string or undefined\n  events = Array.isArray(events) ? events : (events || '').split(delimiter);\n  events.forEach(function (event) {\n    const ev = event && event.split('.')[0];\n    const ns = event && event.split('.')[1];\n    let namespace, l;\n    if (listener) {\n      // remove listener reference\n      if (bag[ev] && bag[ev][ns || '*']) {\n        // removeListener\n        n.removeEventListener(ev, bag[ev][ns || '*'][listener], options || false);\n        delete bag[ev][ns || '*'][listener];\n      }\n    } else if (ev && ns) {\n      // remove all listeners for a namespaced event\n      if (bag[ev] && bag[ev][ns]) {\n        for (l in bag[ev][ns]) {\n          off(n, [ev, ns].join('.'), l);\n        }\n        delete bag[ev][ns];\n      }\n    } else if (ns) {\n      // remove all listeners for a specific namespace\n      for (event in bag) {\n        for (namespace in bag[event]) {\n          if (ns === namespace) {\n            off(n, [event, ns].join('.'));\n          }\n        }\n      }\n    } else if (ev) {\n      // remove all listeners for the event\n      if (bag[ev]) {\n        for (namespace in bag[ev]) {\n          off(n, [ev, namespace].join('.'));\n        }\n        delete bag[ev];\n      }\n    } else {\n      // remove all listeners on a given node\n      for (event in bag) {\n        off(n, event);\n      }\n      clearEvents(instance);\n    }\n  });\n}\nfunction dispatch(node, event, data, options) {\n  const n = getEventTarget(node);\n\n  // Dispatch event\n  if (event instanceof globals.window.Event) {\n    n.dispatchEvent(event);\n  } else {\n    event = new globals.window.CustomEvent(event, {\n      detail: data,\n      cancelable: true,\n      ...options\n    });\n    n.dispatchEvent(event);\n  }\n  return event;\n}\n\nclass EventTarget extends Base {\n  addEventListener() {}\n  dispatch(event, data, options) {\n    return dispatch(this, event, data, options);\n  }\n  dispatchEvent(event) {\n    const bag = this.getEventHolder().events;\n    if (!bag) return true;\n    const events = bag[event.type];\n    for (const i in events) {\n      for (const j in events[i]) {\n        events[i][j](event);\n      }\n    }\n    return !event.defaultPrevented;\n  }\n\n  // Fire given event\n  fire(event, data, options) {\n    this.dispatch(event, data, options);\n    return this;\n  }\n  getEventHolder() {\n    return this;\n  }\n  getEventTarget() {\n    return this;\n  }\n\n  // Unbind event from listener\n  off(event, listener, options) {\n    off(this, event, listener, options);\n    return this;\n  }\n\n  // Bind given event to listener\n  on(event, listener, binding, options) {\n    on(this, event, listener, binding, options);\n    return this;\n  }\n  removeEventListener() {}\n}\nregister(EventTarget, 'EventTarget');\n\nfunction noop() {}\n\n// Default animation values\nconst timeline = {\n  duration: 400,\n  ease: '>',\n  delay: 0\n};\n\n// Default attribute values\nconst attrs = {\n  // fill and stroke\n  'fill-opacity': 1,\n  'stroke-opacity': 1,\n  'stroke-width': 0,\n  'stroke-linejoin': 'miter',\n  'stroke-linecap': 'butt',\n  fill: '#000000',\n  stroke: '#000000',\n  opacity: 1,\n  // position\n  x: 0,\n  y: 0,\n  cx: 0,\n  cy: 0,\n  // size\n  width: 0,\n  height: 0,\n  // radius\n  r: 0,\n  rx: 0,\n  ry: 0,\n  // gradient\n  offset: 0,\n  'stop-opacity': 1,\n  'stop-color': '#000000',\n  // text\n  'text-anchor': 'start'\n};\n\nvar defaults = {\n  __proto__: null,\n  attrs: attrs,\n  noop: noop,\n  timeline: timeline\n};\n\nclass SVGArray extends Array {\n  constructor(...args) {\n    super(...args);\n    this.init(...args);\n  }\n  clone() {\n    return new this.constructor(this);\n  }\n  init(arr) {\n    // This catches the case, that native map tries to create an array with new Array(1)\n    if (typeof arr === 'number') return this;\n    this.length = 0;\n    this.push(...this.parse(arr));\n    return this;\n  }\n\n  // Parse whitespace separated string\n  parse(array = []) {\n    // If already is an array, no need to parse it\n    if (array instanceof Array) return array;\n    return array.trim().split(delimiter).map(parseFloat);\n  }\n  toArray() {\n    return Array.prototype.concat.apply([], this);\n  }\n  toSet() {\n    return new Set(this);\n  }\n  toString() {\n    return this.join(' ');\n  }\n\n  // Flattens the array if needed\n  valueOf() {\n    const ret = [];\n    ret.push(...this);\n    return ret;\n  }\n}\n\n// Module for unit conversions\nclass SVGNumber {\n  // Initialize\n  constructor(...args) {\n    this.init(...args);\n  }\n  convert(unit) {\n    return new SVGNumber(this.value, unit);\n  }\n\n  // Divide number\n  divide(number) {\n    number = new SVGNumber(number);\n    return new SVGNumber(this / number, this.unit || number.unit);\n  }\n  init(value, unit) {\n    unit = Array.isArray(value) ? value[1] : unit;\n    value = Array.isArray(value) ? value[0] : value;\n\n    // initialize defaults\n    this.value = 0;\n    this.unit = unit || '';\n\n    // parse value\n    if (typeof value === 'number') {\n      // ensure a valid numeric value\n      this.value = isNaN(value) ? 0 : !isFinite(value) ? value < 0 ? -3.4e38 : +3.4e38 : value;\n    } else if (typeof value === 'string') {\n      unit = value.match(numberAndUnit);\n      if (unit) {\n        // make value numeric\n        this.value = parseFloat(unit[1]);\n\n        // normalize\n        if (unit[5] === '%') {\n          this.value /= 100;\n        } else if (unit[5] === 's') {\n          this.value *= 1000;\n        }\n\n        // store unit\n        this.unit = unit[5];\n      }\n    } else {\n      if (value instanceof SVGNumber) {\n        this.value = value.valueOf();\n        this.unit = value.unit;\n      }\n    }\n    return this;\n  }\n\n  // Subtract number\n  minus(number) {\n    number = new SVGNumber(number);\n    return new SVGNumber(this - number, this.unit || number.unit);\n  }\n\n  // Add number\n  plus(number) {\n    number = new SVGNumber(number);\n    return new SVGNumber(this + number, this.unit || number.unit);\n  }\n\n  // Multiply number\n  times(number) {\n    number = new SVGNumber(number);\n    return new SVGNumber(this * number, this.unit || number.unit);\n  }\n  toArray() {\n    return [this.value, this.unit];\n  }\n  toJSON() {\n    return this.toString();\n  }\n  toString() {\n    return (this.unit === '%' ? ~~(this.value * 1e8) / 1e6 : this.unit === 's' ? this.value / 1e3 : this.value) + this.unit;\n  }\n  valueOf() {\n    return this.value;\n  }\n}\n\nconst colorAttributes = new Set(['fill', 'stroke', 'color', 'bgcolor', 'stop-color', 'flood-color', 'lighting-color']);\nconst hooks = [];\nfunction registerAttrHook(fn) {\n  hooks.push(fn);\n}\n\n// Set svg element attribute\nfunction attr(attr, val, ns) {\n  // act as full getter\n  if (attr == null) {\n    // get an object of attributes\n    attr = {};\n    val = this.node.attributes;\n    for (const node of val) {\n      attr[node.nodeName] = isNumber.test(node.nodeValue) ? parseFloat(node.nodeValue) : node.nodeValue;\n    }\n    return attr;\n  } else if (attr instanceof Array) {\n    // loop through array and get all values\n    return attr.reduce((last, curr) => {\n      last[curr] = this.attr(curr);\n      return last;\n    }, {});\n  } else if (typeof attr === 'object' && attr.constructor === Object) {\n    // apply every attribute individually if an object is passed\n    for (val in attr) this.attr(val, attr[val]);\n  } else if (val === null) {\n    // remove value\n    this.node.removeAttribute(attr);\n  } else if (val == null) {\n    // act as a getter if the first and only argument is not an object\n    val = this.node.getAttribute(attr);\n    return val == null ? attrs[attr] : isNumber.test(val) ? parseFloat(val) : val;\n  } else {\n    // Loop through hooks and execute them to convert value\n    val = hooks.reduce((_val, hook) => {\n      return hook(attr, _val, this);\n    }, val);\n\n    // ensure correct numeric values (also accepts NaN and Infinity)\n    if (typeof val === 'number') {\n      val = new SVGNumber(val);\n    } else if (colorAttributes.has(attr) && Color.isColor(val)) {\n      // ensure full hex color\n      val = new Color(val);\n    } else if (val.constructor === Array) {\n      // Check for plain arrays and parse array values\n      val = new SVGArray(val);\n    }\n\n    // if the passed attribute is leading...\n    if (attr === 'leading') {\n      // ... call the leading method instead\n      if (this.leading) {\n        this.leading(val);\n      }\n    } else {\n      // set given attribute on node\n      typeof ns === 'string' ? this.node.setAttributeNS(ns, attr, val.toString()) : this.node.setAttribute(attr, val.toString());\n    }\n\n    // rebuild if required\n    if (this.rebuild && (attr === 'font-size' || attr === 'x')) {\n      this.rebuild();\n    }\n  }\n  return this;\n}\n\nclass Dom extends EventTarget {\n  constructor(node, attrs) {\n    super();\n    this.node = node;\n    this.type = node.nodeName;\n    if (attrs && node !== attrs) {\n      this.attr(attrs);\n    }\n  }\n\n  // Add given element at a position\n  add(element, i) {\n    element = makeInstance(element);\n\n    // If non-root svg nodes are added we have to remove their namespaces\n    if (element.removeNamespace && this.node instanceof globals.window.SVGElement) {\n      element.removeNamespace();\n    }\n    if (i == null) {\n      this.node.appendChild(element.node);\n    } else if (element.node !== this.node.childNodes[i]) {\n      this.node.insertBefore(element.node, this.node.childNodes[i]);\n    }\n    return this;\n  }\n\n  // Add element to given container and return self\n  addTo(parent, i) {\n    return makeInstance(parent).put(this, i);\n  }\n\n  // Returns all child elements\n  children() {\n    return new List(map(this.node.children, function (node) {\n      return adopt(node);\n    }));\n  }\n\n  // Remove all elements in this container\n  clear() {\n    // remove children\n    while (this.node.hasChildNodes()) {\n      this.node.removeChild(this.node.lastChild);\n    }\n    return this;\n  }\n\n  // Clone element\n  clone(deep = true, assignNewIds = true) {\n    // write dom data to the dom so the clone can pickup the data\n    this.writeDataToDom();\n\n    // clone element\n    let nodeClone = this.node.cloneNode(deep);\n    if (assignNewIds) {\n      // assign new id\n      nodeClone = assignNewId(nodeClone);\n    }\n    return new this.constructor(nodeClone);\n  }\n\n  // Iterates over all children and invokes a given block\n  each(block, deep) {\n    const children = this.children();\n    let i, il;\n    for (i = 0, il = children.length; i < il; i++) {\n      block.apply(children[i], [i, children]);\n      if (deep) {\n        children[i].each(block, deep);\n      }\n    }\n    return this;\n  }\n  element(nodeName, attrs) {\n    return this.put(new Dom(create(nodeName), attrs));\n  }\n\n  // Get first child\n  first() {\n    return adopt(this.node.firstChild);\n  }\n\n  // Get a element at the given index\n  get(i) {\n    return adopt(this.node.childNodes[i]);\n  }\n  getEventHolder() {\n    return this.node;\n  }\n  getEventTarget() {\n    return this.node;\n  }\n\n  // Checks if the given element is a child\n  has(element) {\n    return this.index(element) >= 0;\n  }\n  html(htmlOrFn, outerHTML) {\n    return this.xml(htmlOrFn, outerHTML, html);\n  }\n\n  // Get / set id\n  id(id) {\n    // generate new id if no id set\n    if (typeof id === 'undefined' && !this.node.id) {\n      this.node.id = eid(this.type);\n    }\n\n    // don't set directly with this.node.id to make `null` work correctly\n    return this.attr('id', id);\n  }\n\n  // Gets index of given element\n  index(element) {\n    return [].slice.call(this.node.childNodes).indexOf(element.node);\n  }\n\n  // Get the last child\n  last() {\n    return adopt(this.node.lastChild);\n  }\n\n  // matches the element vs a css selector\n  matches(selector) {\n    const el = this.node;\n    const matcher = el.matches || el.matchesSelector || el.msMatchesSelector || el.mozMatchesSelector || el.webkitMatchesSelector || el.oMatchesSelector || null;\n    return matcher && matcher.call(el, selector);\n  }\n\n  // Returns the parent element instance\n  parent(type) {\n    let parent = this;\n\n    // check for parent\n    if (!parent.node.parentNode) return null;\n\n    // get parent element\n    parent = adopt(parent.node.parentNode);\n    if (!type) return parent;\n\n    // loop through ancestors if type is given\n    do {\n      if (typeof type === 'string' ? parent.matches(type) : parent instanceof type) return parent;\n    } while (parent = adopt(parent.node.parentNode));\n    return parent;\n  }\n\n  // Basically does the same as `add()` but returns the added element instead\n  put(element, i) {\n    element = makeInstance(element);\n    this.add(element, i);\n    return element;\n  }\n\n  // Add element to given container and return container\n  putIn(parent, i) {\n    return makeInstance(parent).add(this, i);\n  }\n\n  // Remove element\n  remove() {\n    if (this.parent()) {\n      this.parent().removeElement(this);\n    }\n    return this;\n  }\n\n  // Remove a given child\n  removeElement(element) {\n    this.node.removeChild(element.node);\n    return this;\n  }\n\n  // Replace this with element\n  replace(element) {\n    element = makeInstance(element);\n    if (this.node.parentNode) {\n      this.node.parentNode.replaceChild(element.node, this.node);\n    }\n    return element;\n  }\n  round(precision = 2, map = null) {\n    const factor = 10 ** precision;\n    const attrs = this.attr(map);\n    for (const i in attrs) {\n      if (typeof attrs[i] === 'number') {\n        attrs[i] = Math.round(attrs[i] * factor) / factor;\n      }\n    }\n    this.attr(attrs);\n    return this;\n  }\n\n  // Import / Export raw svg\n  svg(svgOrFn, outerSVG) {\n    return this.xml(svgOrFn, outerSVG, svg);\n  }\n\n  // Return id on string conversion\n  toString() {\n    return this.id();\n  }\n  words(text) {\n    // This is faster than removing all children and adding a new one\n    this.node.textContent = text;\n    return this;\n  }\n  wrap(node) {\n    const parent = this.parent();\n    if (!parent) {\n      return this.addTo(node);\n    }\n    const position = parent.index(this);\n    return parent.put(node, position).put(this);\n  }\n\n  // write svgjs data to the dom\n  writeDataToDom() {\n    // dump variables recursively\n    this.each(function () {\n      this.writeDataToDom();\n    });\n    return this;\n  }\n\n  // Import / Export raw svg\n  xml(xmlOrFn, outerXML, ns) {\n    if (typeof xmlOrFn === 'boolean') {\n      ns = outerXML;\n      outerXML = xmlOrFn;\n      xmlOrFn = null;\n    }\n\n    // act as getter if no svg string is given\n    if (xmlOrFn == null || typeof xmlOrFn === 'function') {\n      // The default for exports is, that the outerNode is included\n      outerXML = outerXML == null ? true : outerXML;\n\n      // write svgjs data to the dom\n      this.writeDataToDom();\n      let current = this;\n\n      // An export modifier was passed\n      if (xmlOrFn != null) {\n        current = adopt(current.node.cloneNode(true));\n\n        // If the user wants outerHTML we need to process this node, too\n        if (outerXML) {\n          const result = xmlOrFn(current);\n          current = result || current;\n\n          // The user does not want this node? Well, then he gets nothing\n          if (result === false) return '';\n        }\n\n        // Deep loop through all children and apply modifier\n        current.each(function () {\n          const result = xmlOrFn(this);\n          const _this = result || this;\n\n          // If modifier returns false, discard node\n          if (result === false) {\n            this.remove();\n\n            // If modifier returns new node, use it\n          } else if (result && this !== _this) {\n            this.replace(_this);\n          }\n        }, true);\n      }\n\n      // Return outer or inner content\n      return outerXML ? current.node.outerHTML : current.node.innerHTML;\n    }\n\n    // Act as setter if we got a string\n\n    // The default for import is, that the current node is not replaced\n    outerXML = outerXML == null ? false : outerXML;\n\n    // Create temporary holder\n    const well = create('wrapper', ns);\n    const fragment = globals.document.createDocumentFragment();\n\n    // Dump raw svg\n    well.innerHTML = xmlOrFn;\n\n    // Transplant nodes into the fragment\n    for (let len = well.children.length; len--;) {\n      fragment.appendChild(well.firstElementChild);\n    }\n    const parent = this.parent();\n\n    // Add the whole fragment at once\n    return outerXML ? this.replace(fragment) && parent : this.add(fragment);\n  }\n}\nextend(Dom, {\n  attr,\n  find,\n  findOne\n});\nregister(Dom, 'Dom');\n\nclass Element extends Dom {\n  constructor(node, attrs) {\n    super(node, attrs);\n\n    // initialize data object\n    this.dom = {};\n\n    // create circular reference\n    this.node.instance = this;\n    if (node.hasAttribute('data-svgjs') || node.hasAttribute('svgjs:data')) {\n      // pull svgjs data from the dom (getAttributeNS doesn't work in html5)\n      this.setData(JSON.parse(node.getAttribute('data-svgjs')) ?? JSON.parse(node.getAttribute('svgjs:data')) ?? {});\n    }\n  }\n\n  // Move element by its center\n  center(x, y) {\n    return this.cx(x).cy(y);\n  }\n\n  // Move by center over x-axis\n  cx(x) {\n    return x == null ? this.x() + this.width() / 2 : this.x(x - this.width() / 2);\n  }\n\n  // Move by center over y-axis\n  cy(y) {\n    return y == null ? this.y() + this.height() / 2 : this.y(y - this.height() / 2);\n  }\n\n  // Get defs\n  defs() {\n    const root = this.root();\n    return root && root.defs();\n  }\n\n  // Relative move over x and y axes\n  dmove(x, y) {\n    return this.dx(x).dy(y);\n  }\n\n  // Relative move over x axis\n  dx(x = 0) {\n    return this.x(new SVGNumber(x).plus(this.x()));\n  }\n\n  // Relative move over y axis\n  dy(y = 0) {\n    return this.y(new SVGNumber(y).plus(this.y()));\n  }\n  getEventHolder() {\n    return this;\n  }\n\n  // Set height of element\n  height(height) {\n    return this.attr('height', height);\n  }\n\n  // Move element to given x and y values\n  move(x, y) {\n    return this.x(x).y(y);\n  }\n\n  // return array of all ancestors of given type up to the root svg\n  parents(until = this.root()) {\n    const isSelector = typeof until === 'string';\n    if (!isSelector) {\n      until = makeInstance(until);\n    }\n    const parents = new List();\n    let parent = this;\n    while ((parent = parent.parent()) && parent.node !== globals.document && parent.nodeName !== '#document-fragment') {\n      parents.push(parent);\n      if (!isSelector && parent.node === until.node) {\n        break;\n      }\n      if (isSelector && parent.matches(until)) {\n        break;\n      }\n      if (parent.node === this.root().node) {\n        // We worked our way to the root and didn't match `until`\n        return null;\n      }\n    }\n    return parents;\n  }\n\n  // Get referenced element form attribute value\n  reference(attr) {\n    attr = this.attr(attr);\n    if (!attr) return null;\n    const m = (attr + '').match(reference);\n    return m ? makeInstance(m[1]) : null;\n  }\n\n  // Get parent document\n  root() {\n    const p = this.parent(getClass(root));\n    return p && p.root();\n  }\n\n  // set given data to the elements data property\n  setData(o) {\n    this.dom = o;\n    return this;\n  }\n\n  // Set element size to given width and height\n  size(width, height) {\n    const p = proportionalSize(this, width, height);\n    return this.width(new SVGNumber(p.width)).height(new SVGNumber(p.height));\n  }\n\n  // Set width of element\n  width(width) {\n    return this.attr('width', width);\n  }\n\n  // write svgjs data to the dom\n  writeDataToDom() {\n    writeDataToDom(this, this.dom);\n    return super.writeDataToDom();\n  }\n\n  // Move over x-axis\n  x(x) {\n    return this.attr('x', x);\n  }\n\n  // Move over y-axis\n  y(y) {\n    return this.attr('y', y);\n  }\n}\nextend(Element, {\n  bbox,\n  rbox,\n  inside,\n  point,\n  ctm,\n  screenCTM\n});\nregister(Element, 'Element');\n\n// Define list of available attributes for stroke and fill\nconst sugar = {\n  stroke: ['color', 'width', 'opacity', 'linecap', 'linejoin', 'miterlimit', 'dasharray', 'dashoffset'],\n  fill: ['color', 'opacity', 'rule'],\n  prefix: function (t, a) {\n    return a === 'color' ? t : t + '-' + a;\n  }\n}\n\n// Add sugar for fill and stroke\n;\n['fill', 'stroke'].forEach(function (m) {\n  const extension = {};\n  let i;\n  extension[m] = function (o) {\n    if (typeof o === 'undefined') {\n      return this.attr(m);\n    }\n    if (typeof o === 'string' || o instanceof Color || Color.isRgb(o) || o instanceof Element) {\n      this.attr(m, o);\n    } else {\n      // set all attributes from sugar.fill and sugar.stroke list\n      for (i = sugar[m].length - 1; i >= 0; i--) {\n        if (o[sugar[m][i]] != null) {\n          this.attr(sugar.prefix(m, sugar[m][i]), o[sugar[m][i]]);\n        }\n      }\n    }\n    return this;\n  };\n  registerMethods(['Element', 'Runner'], extension);\n});\nregisterMethods(['Element', 'Runner'], {\n  // Let the user set the matrix directly\n  matrix: function (mat, b, c, d, e, f) {\n    // Act as a getter\n    if (mat == null) {\n      return new Matrix(this);\n    }\n\n    // Act as a setter, the user can pass a matrix or a set of numbers\n    return this.attr('transform', new Matrix(mat, b, c, d, e, f));\n  },\n  // Map rotation to transform\n  rotate: function (angle, cx, cy) {\n    return this.transform({\n      rotate: angle,\n      ox: cx,\n      oy: cy\n    }, true);\n  },\n  // Map skew to transform\n  skew: function (x, y, cx, cy) {\n    return arguments.length === 1 || arguments.length === 3 ? this.transform({\n      skew: x,\n      ox: y,\n      oy: cx\n    }, true) : this.transform({\n      skew: [x, y],\n      ox: cx,\n      oy: cy\n    }, true);\n  },\n  shear: function (lam, cx, cy) {\n    return this.transform({\n      shear: lam,\n      ox: cx,\n      oy: cy\n    }, true);\n  },\n  // Map scale to transform\n  scale: function (x, y, cx, cy) {\n    return arguments.length === 1 || arguments.length === 3 ? this.transform({\n      scale: x,\n      ox: y,\n      oy: cx\n    }, true) : this.transform({\n      scale: [x, y],\n      ox: cx,\n      oy: cy\n    }, true);\n  },\n  // Map translate to transform\n  translate: function (x, y) {\n    return this.transform({\n      translate: [x, y]\n    }, true);\n  },\n  // Map relative translations to transform\n  relative: function (x, y) {\n    return this.transform({\n      relative: [x, y]\n    }, true);\n  },\n  // Map flip to transform\n  flip: function (direction = 'both', origin = 'center') {\n    if ('xybothtrue'.indexOf(direction) === -1) {\n      origin = direction;\n      direction = 'both';\n    }\n    return this.transform({\n      flip: direction,\n      origin: origin\n    }, true);\n  },\n  // Opacity\n  opacity: function (value) {\n    return this.attr('opacity', value);\n  }\n});\nregisterMethods('radius', {\n  // Add x and y radius\n  radius: function (x, y = x) {\n    const type = (this._element || this).type;\n    return type === 'radialGradient' ? this.attr('r', new SVGNumber(x)) : this.rx(x).ry(y);\n  }\n});\nregisterMethods('Path', {\n  // Get path length\n  length: function () {\n    return this.node.getTotalLength();\n  },\n  // Get point at length\n  pointAt: function (length) {\n    return new Point(this.node.getPointAtLength(length));\n  }\n});\nregisterMethods(['Element', 'Runner'], {\n  // Set font\n  font: function (a, v) {\n    if (typeof a === 'object') {\n      for (v in a) this.font(v, a[v]);\n      return this;\n    }\n    return a === 'leading' ? this.leading(v) : a === 'anchor' ? this.attr('text-anchor', v) : a === 'size' || a === 'family' || a === 'weight' || a === 'stretch' || a === 'variant' || a === 'style' ? this.attr('font-' + a, v) : this.attr(a, v);\n  }\n});\n\n// Add events to elements\nconst methods = ['click', 'dblclick', 'mousedown', 'mouseup', 'mouseover', 'mouseout', 'mousemove', 'mouseenter', 'mouseleave', 'touchstart', 'touchmove', 'touchleave', 'touchend', 'touchcancel', 'contextmenu', 'wheel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel'].reduce(function (last, event) {\n  // add event to Element\n  const fn = function (f) {\n    if (f === null) {\n      this.off(event);\n    } else {\n      this.on(event, f);\n    }\n    return this;\n  };\n  last[event] = fn;\n  return last;\n}, {});\nregisterMethods('Element', methods);\n\n// Reset all transformations\nfunction untransform() {\n  return this.attr('transform', null);\n}\n\n// merge the whole transformation chain into one matrix and returns it\nfunction matrixify() {\n  const matrix = (this.attr('transform') || ''\n  // split transformations\n  ).split(transforms).slice(0, -1).map(function (str) {\n    // generate key => value pairs\n    const kv = str.trim().split('(');\n    return [kv[0], kv[1].split(delimiter).map(function (str) {\n      return parseFloat(str);\n    })];\n  }).reverse()\n  // merge every transformation into one matrix\n  .reduce(function (matrix, transform) {\n    if (transform[0] === 'matrix') {\n      return matrix.lmultiply(Matrix.fromArray(transform[1]));\n    }\n    return matrix[transform[0]].apply(matrix, transform[1]);\n  }, new Matrix());\n  return matrix;\n}\n\n// add an element to another parent without changing the visual representation on the screen\nfunction toParent(parent, i) {\n  if (this === parent) return this;\n  if (isDescriptive(this.node)) return this.addTo(parent, i);\n  const ctm = this.screenCTM();\n  const pCtm = parent.screenCTM().inverse();\n  this.addTo(parent, i).untransform().transform(pCtm.multiply(ctm));\n  return this;\n}\n\n// same as above with parent equals root-svg\nfunction toRoot(i) {\n  return this.toParent(this.root(), i);\n}\n\n// Add transformations\nfunction transform(o, relative) {\n  // Act as a getter if no object was passed\n  if (o == null || typeof o === 'string') {\n    const decomposed = new Matrix(this).decompose();\n    return o == null ? decomposed : decomposed[o];\n  }\n  if (!Matrix.isMatrixLike(o)) {\n    // Set the origin according to the defined transform\n    o = {\n      ...o,\n      origin: getOrigin(o, this)\n    };\n  }\n\n  // The user can pass a boolean, an Element or an Matrix or nothing\n  const cleanRelative = relative === true ? this : relative || false;\n  const result = new Matrix(cleanRelative).transform(o);\n  return this.attr('transform', result);\n}\nregisterMethods('Element', {\n  untransform,\n  matrixify,\n  toParent,\n  toRoot,\n  transform\n});\n\nclass Container extends Element {\n  flatten() {\n    this.each(function () {\n      if (this instanceof Container) {\n        return this.flatten().ungroup();\n      }\n    });\n    return this;\n  }\n  ungroup(parent = this.parent(), index = parent.index(this)) {\n    // when parent != this, we want append all elements to the end\n    index = index === -1 ? parent.children().length : index;\n    this.each(function (i, children) {\n      // reverse each\n      return children[children.length - i - 1].toParent(parent, index);\n    });\n    return this.remove();\n  }\n}\nregister(Container, 'Container');\n\nclass Defs extends Container {\n  constructor(node, attrs = node) {\n    super(nodeOrNew('defs', node), attrs);\n  }\n  flatten() {\n    return this;\n  }\n  ungroup() {\n    return this;\n  }\n}\nregister(Defs, 'Defs');\n\nclass Shape extends Element {}\nregister(Shape, 'Shape');\n\n// Radius x value\nfunction rx(rx) {\n  return this.attr('rx', rx);\n}\n\n// Radius y value\nfunction ry(ry) {\n  return this.attr('ry', ry);\n}\n\n// Move over x-axis\nfunction x$3(x) {\n  return x == null ? this.cx() - this.rx() : this.cx(x + this.rx());\n}\n\n// Move over y-axis\nfunction y$3(y) {\n  return y == null ? this.cy() - this.ry() : this.cy(y + this.ry());\n}\n\n// Move by center over x-axis\nfunction cx$1(x) {\n  return this.attr('cx', x);\n}\n\n// Move by center over y-axis\nfunction cy$1(y) {\n  return this.attr('cy', y);\n}\n\n// Set width of element\nfunction width$2(width) {\n  return width == null ? this.rx() * 2 : this.rx(new SVGNumber(width).divide(2));\n}\n\n// Set height of element\nfunction height$2(height) {\n  return height == null ? this.ry() * 2 : this.ry(new SVGNumber(height).divide(2));\n}\n\nvar circled = {\n  __proto__: null,\n  cx: cx$1,\n  cy: cy$1,\n  height: height$2,\n  rx: rx,\n  ry: ry,\n  width: width$2,\n  x: x$3,\n  y: y$3\n};\n\nclass Ellipse extends Shape {\n  constructor(node, attrs = node) {\n    super(nodeOrNew('ellipse', node), attrs);\n  }\n  size(width, height) {\n    const p = proportionalSize(this, width, height);\n    return this.rx(new SVGNumber(p.width).divide(2)).ry(new SVGNumber(p.height).divide(2));\n  }\n}\nextend(Ellipse, circled);\nregisterMethods('Container', {\n  // Create an ellipse\n  ellipse: wrapWithAttrCheck(function (width = 0, height = width) {\n    return this.put(new Ellipse()).size(width, height).move(0, 0);\n  })\n});\nregister(Ellipse, 'Ellipse');\n\nclass Fragment extends Dom {\n  constructor(node = globals.document.createDocumentFragment()) {\n    super(node);\n  }\n\n  // Import / Export raw xml\n  xml(xmlOrFn, outerXML, ns) {\n    if (typeof xmlOrFn === 'boolean') {\n      ns = outerXML;\n      outerXML = xmlOrFn;\n      xmlOrFn = null;\n    }\n\n    // because this is a fragment we have to put all elements into a wrapper first\n    // before we can get the innerXML from it\n    if (xmlOrFn == null || typeof xmlOrFn === 'function') {\n      const wrapper = new Dom(create('wrapper', ns));\n      wrapper.add(this.node.cloneNode(true));\n      return wrapper.xml(false, ns);\n    }\n\n    // Act as setter if we got a string\n    return super.xml(xmlOrFn, false, ns);\n  }\n}\nregister(Fragment, 'Fragment');\n\nfunction from(x, y) {\n  return (this._element || this).type === 'radialGradient' ? this.attr({\n    fx: new SVGNumber(x),\n    fy: new SVGNumber(y)\n  }) : this.attr({\n    x1: new SVGNumber(x),\n    y1: new SVGNumber(y)\n  });\n}\nfunction to(x, y) {\n  return (this._element || this).type === 'radialGradient' ? this.attr({\n    cx: new SVGNumber(x),\n    cy: new SVGNumber(y)\n  }) : this.attr({\n    x2: new SVGNumber(x),\n    y2: new SVGNumber(y)\n  });\n}\n\nvar gradiented = {\n  __proto__: null,\n  from: from,\n  to: to\n};\n\nclass Gradient extends Container {\n  constructor(type, attrs) {\n    super(nodeOrNew(type + 'Gradient', typeof type === 'string' ? null : type), attrs);\n  }\n\n  // custom attr to handle transform\n  attr(a, b, c) {\n    if (a === 'transform') a = 'gradientTransform';\n    return super.attr(a, b, c);\n  }\n  bbox() {\n    return new Box();\n  }\n  targets() {\n    return baseFind('svg [fill*=' + this.id() + ']');\n  }\n\n  // Alias string conversion to fill\n  toString() {\n    return this.url();\n  }\n\n  // Update gradient\n  update(block) {\n    // remove all stops\n    this.clear();\n\n    // invoke passed block\n    if (typeof block === 'function') {\n      block.call(this, this);\n    }\n    return this;\n  }\n\n  // Return the fill id\n  url() {\n    return 'url(#' + this.id() + ')';\n  }\n}\nextend(Gradient, gradiented);\nregisterMethods({\n  Container: {\n    // Create gradient element in defs\n    gradient(...args) {\n      return this.defs().gradient(...args);\n    }\n  },\n  // define gradient\n  Defs: {\n    gradient: wrapWithAttrCheck(function (type, block) {\n      return this.put(new Gradient(type)).update(block);\n    })\n  }\n});\nregister(Gradient, 'Gradient');\n\nclass Pattern extends Container {\n  // Initialize node\n  constructor(node, attrs = node) {\n    super(nodeOrNew('pattern', node), attrs);\n  }\n\n  // custom attr to handle transform\n  attr(a, b, c) {\n    if (a === 'transform') a = 'patternTransform';\n    return super.attr(a, b, c);\n  }\n  bbox() {\n    return new Box();\n  }\n  targets() {\n    return baseFind('svg [fill*=' + this.id() + ']');\n  }\n\n  // Alias string conversion to fill\n  toString() {\n    return this.url();\n  }\n\n  // Update pattern by rebuilding\n  update(block) {\n    // remove content\n    this.clear();\n\n    // invoke passed block\n    if (typeof block === 'function') {\n      block.call(this, this);\n    }\n    return this;\n  }\n\n  // Return the fill id\n  url() {\n    return 'url(#' + this.id() + ')';\n  }\n}\nregisterMethods({\n  Container: {\n    // Create pattern element in defs\n    pattern(...args) {\n      return this.defs().pattern(...args);\n    }\n  },\n  Defs: {\n    pattern: wrapWithAttrCheck(function (width, height, block) {\n      return this.put(new Pattern()).update(block).attr({\n        x: 0,\n        y: 0,\n        width: width,\n        height: height,\n        patternUnits: 'userSpaceOnUse'\n      });\n    })\n  }\n});\nregister(Pattern, 'Pattern');\n\nclass Image extends Shape {\n  constructor(node, attrs = node) {\n    super(nodeOrNew('image', node), attrs);\n  }\n\n  // (re)load image\n  load(url, callback) {\n    if (!url) return this;\n    const img = new globals.window.Image();\n    on(img, 'load', function (e) {\n      const p = this.parent(Pattern);\n\n      // ensure image size\n      if (this.width() === 0 && this.height() === 0) {\n        this.size(img.width, img.height);\n      }\n      if (p instanceof Pattern) {\n        // ensure pattern size if not set\n        if (p.width() === 0 && p.height() === 0) {\n          p.size(this.width(), this.height());\n        }\n      }\n      if (typeof callback === 'function') {\n        callback.call(this, e);\n      }\n    }, this);\n    on(img, 'load error', function () {\n      // dont forget to unbind memory leaking events\n      off(img);\n    });\n    return this.attr('href', img.src = url, xlink);\n  }\n}\nregisterAttrHook(function (attr, val, _this) {\n  // convert image fill and stroke to patterns\n  if (attr === 'fill' || attr === 'stroke') {\n    if (isImage.test(val)) {\n      val = _this.root().defs().image(val);\n    }\n  }\n  if (val instanceof Image) {\n    val = _this.root().defs().pattern(0, 0, pattern => {\n      pattern.add(val);\n    });\n  }\n  return val;\n});\nregisterMethods({\n  Container: {\n    // create image element, load image and set its size\n    image: wrapWithAttrCheck(function (source, callback) {\n      return this.put(new Image()).size(0, 0).load(source, callback);\n    })\n  }\n});\nregister(Image, 'Image');\n\nclass PointArray extends SVGArray {\n  // Get bounding box of points\n  bbox() {\n    let maxX = -Infinity;\n    let maxY = -Infinity;\n    let minX = Infinity;\n    let minY = Infinity;\n    this.forEach(function (el) {\n      maxX = Math.max(el[0], maxX);\n      maxY = Math.max(el[1], maxY);\n      minX = Math.min(el[0], minX);\n      minY = Math.min(el[1], minY);\n    });\n    return new Box(minX, minY, maxX - minX, maxY - minY);\n  }\n\n  // Move point string\n  move(x, y) {\n    const box = this.bbox();\n\n    // get relative offset\n    x -= box.x;\n    y -= box.y;\n\n    // move every point\n    if (!isNaN(x) && !isNaN(y)) {\n      for (let i = this.length - 1; i >= 0; i--) {\n        this[i] = [this[i][0] + x, this[i][1] + y];\n      }\n    }\n    return this;\n  }\n\n  // Parse point string and flat array\n  parse(array = [0, 0]) {\n    const points = [];\n\n    // if it is an array, we flatten it and therefore clone it to 1 depths\n    if (array instanceof Array) {\n      array = Array.prototype.concat.apply([], array);\n    } else {\n      // Else, it is considered as a string\n      // parse points\n      array = array.trim().split(delimiter).map(parseFloat);\n    }\n\n    // validate points - https://svgwg.org/svg2-draft/shapes.html#DataTypePoints\n    // Odd number of coordinates is an error. In such cases, drop the last odd coordinate.\n    if (array.length % 2 !== 0) array.pop();\n\n    // wrap points in two-tuples\n    for (let i = 0, len = array.length; i < len; i = i + 2) {\n      points.push([array[i], array[i + 1]]);\n    }\n    return points;\n  }\n\n  // Resize poly string\n  size(width, height) {\n    let i;\n    const box = this.bbox();\n\n    // recalculate position of all points according to new size\n    for (i = this.length - 1; i >= 0; i--) {\n      if (box.width) this[i][0] = (this[i][0] - box.x) * width / box.width + box.x;\n      if (box.height) this[i][1] = (this[i][1] - box.y) * height / box.height + box.y;\n    }\n    return this;\n  }\n\n  // Convert array to line object\n  toLine() {\n    return {\n      x1: this[0][0],\n      y1: this[0][1],\n      x2: this[1][0],\n      y2: this[1][1]\n    };\n  }\n\n  // Convert array to string\n  toString() {\n    const array = [];\n    // convert to a poly point string\n    for (let i = 0, il = this.length; i < il; i++) {\n      array.push(this[i].join(','));\n    }\n    return array.join(' ');\n  }\n  transform(m) {\n    return this.clone().transformO(m);\n  }\n\n  // transform points with matrix (similar to Point.transform)\n  transformO(m) {\n    if (!Matrix.isMatrixLike(m)) {\n      m = new Matrix(m);\n    }\n    for (let i = this.length; i--;) {\n      // Perform the matrix multiplication\n      const [x, y] = this[i];\n      this[i][0] = m.a * x + m.c * y + m.e;\n      this[i][1] = m.b * x + m.d * y + m.f;\n    }\n    return this;\n  }\n}\n\nconst MorphArray = PointArray;\n\n// Move by left top corner over x-axis\nfunction x$2(x) {\n  return x == null ? this.bbox().x : this.move(x, this.bbox().y);\n}\n\n// Move by left top corner over y-axis\nfunction y$2(y) {\n  return y == null ? this.bbox().y : this.move(this.bbox().x, y);\n}\n\n// Set width of element\nfunction width$1(width) {\n  const b = this.bbox();\n  return width == null ? b.width : this.size(width, b.height);\n}\n\n// Set height of element\nfunction height$1(height) {\n  const b = this.bbox();\n  return height == null ? b.height : this.size(b.width, height);\n}\n\nvar pointed = {\n  __proto__: null,\n  MorphArray: MorphArray,\n  height: height$1,\n  width: width$1,\n  x: x$2,\n  y: y$2\n};\n\nclass Line extends Shape {\n  // Initialize node\n  constructor(node, attrs = node) {\n    super(nodeOrNew('line', node), attrs);\n  }\n\n  // Get array\n  array() {\n    return new PointArray([[this.attr('x1'), this.attr('y1')], [this.attr('x2'), this.attr('y2')]]);\n  }\n\n  // Move by left top corner\n  move(x, y) {\n    return this.attr(this.array().move(x, y).toLine());\n  }\n\n  // Overwrite native plot() method\n  plot(x1, y1, x2, y2) {\n    if (x1 == null) {\n      return this.array();\n    } else if (typeof y1 !== 'undefined') {\n      x1 = {\n        x1,\n        y1,\n        x2,\n        y2\n      };\n    } else {\n      x1 = new PointArray(x1).toLine();\n    }\n    return this.attr(x1);\n  }\n\n  // Set element size to given width and height\n  size(width, height) {\n    const p = proportionalSize(this, width, height);\n    return this.attr(this.array().size(p.width, p.height).toLine());\n  }\n}\nextend(Line, pointed);\nregisterMethods({\n  Container: {\n    // Create a line element\n    line: wrapWithAttrCheck(function (...args) {\n      // make sure plot is called as a setter\n      // x1 is not necessarily a number, it can also be an array, a string and a PointArray\n      return Line.prototype.plot.apply(this.put(new Line()), args[0] != null ? args : [0, 0, 0, 0]);\n    })\n  }\n});\nregister(Line, 'Line');\n\nclass Marker extends Container {\n  // Initialize node\n  constructor(node, attrs = node) {\n    super(nodeOrNew('marker', node), attrs);\n  }\n\n  // Set height of element\n  height(height) {\n    return this.attr('markerHeight', height);\n  }\n  orient(orient) {\n    return this.attr('orient', orient);\n  }\n\n  // Set marker refX and refY\n  ref(x, y) {\n    return this.attr('refX', x).attr('refY', y);\n  }\n\n  // Return the fill id\n  toString() {\n    return 'url(#' + this.id() + ')';\n  }\n\n  // Update marker\n  update(block) {\n    // remove all content\n    this.clear();\n\n    // invoke passed block\n    if (typeof block === 'function') {\n      block.call(this, this);\n    }\n    return this;\n  }\n\n  // Set width of element\n  width(width) {\n    return this.attr('markerWidth', width);\n  }\n}\nregisterMethods({\n  Container: {\n    marker(...args) {\n      // Create marker element in defs\n      return this.defs().marker(...args);\n    }\n  },\n  Defs: {\n    // Create marker\n    marker: wrapWithAttrCheck(function (width, height, block) {\n      // Set default viewbox to match the width and height, set ref to cx and cy and set orient to auto\n      return this.put(new Marker()).size(width, height).ref(width / 2, height / 2).viewbox(0, 0, width, height).attr('orient', 'auto').update(block);\n    })\n  },\n  marker: {\n    // Create and attach markers\n    marker(marker, width, height, block) {\n      let attr = ['marker'];\n\n      // Build attribute name\n      if (marker !== 'all') attr.push(marker);\n      attr = attr.join('-');\n\n      // Set marker attribute\n      marker = arguments[1] instanceof Marker ? arguments[1] : this.defs().marker(width, height, block);\n      return this.attr(attr, marker);\n    }\n  }\n});\nregister(Marker, 'Marker');\n\n/***\nBase Class\n==========\nThe base stepper class that will be\n***/\n\nfunction makeSetterGetter(k, f) {\n  return function (v) {\n    if (v == null) return this[k];\n    this[k] = v;\n    if (f) f.call(this);\n    return this;\n  };\n}\nconst easing = {\n  '-': function (pos) {\n    return pos;\n  },\n  '<>': function (pos) {\n    return -Math.cos(pos * Math.PI) / 2 + 0.5;\n  },\n  '>': function (pos) {\n    return Math.sin(pos * Math.PI / 2);\n  },\n  '<': function (pos) {\n    return -Math.cos(pos * Math.PI / 2) + 1;\n  },\n  bezier: function (x1, y1, x2, y2) {\n    // see https://www.w3.org/TR/css-easing-1/#cubic-bezier-algo\n    return function (t) {\n      if (t < 0) {\n        if (x1 > 0) {\n          return y1 / x1 * t;\n        } else if (x2 > 0) {\n          return y2 / x2 * t;\n        } else {\n          return 0;\n        }\n      } else if (t > 1) {\n        if (x2 < 1) {\n          return (1 - y2) / (1 - x2) * t + (y2 - x2) / (1 - x2);\n        } else if (x1 < 1) {\n          return (1 - y1) / (1 - x1) * t + (y1 - x1) / (1 - x1);\n        } else {\n          return 1;\n        }\n      } else {\n        return 3 * t * (1 - t) ** 2 * y1 + 3 * t ** 2 * (1 - t) * y2 + t ** 3;\n      }\n    };\n  },\n  // see https://www.w3.org/TR/css-easing-1/#step-timing-function-algo\n  steps: function (steps, stepPosition = 'end') {\n    // deal with \"jump-\" prefix\n    stepPosition = stepPosition.split('-').reverse()[0];\n    let jumps = steps;\n    if (stepPosition === 'none') {\n      --jumps;\n    } else if (stepPosition === 'both') {\n      ++jumps;\n    }\n\n    // The beforeFlag is essentially useless\n    return (t, beforeFlag = false) => {\n      // Step is called currentStep in referenced url\n      let step = Math.floor(t * steps);\n      const jumping = t * step % 1 === 0;\n      if (stepPosition === 'start' || stepPosition === 'both') {\n        ++step;\n      }\n      if (beforeFlag && jumping) {\n        --step;\n      }\n      if (t >= 0 && step < 0) {\n        step = 0;\n      }\n      if (t <= 1 && step > jumps) {\n        step = jumps;\n      }\n      return step / jumps;\n    };\n  }\n};\nclass Stepper {\n  done() {\n    return false;\n  }\n}\n\n/***\nEasing Functions\n================\n***/\n\nclass Ease extends Stepper {\n  constructor(fn = timeline.ease) {\n    super();\n    this.ease = easing[fn] || fn;\n  }\n  step(from, to, pos) {\n    if (typeof from !== 'number') {\n      return pos < 1 ? from : to;\n    }\n    return from + (to - from) * this.ease(pos);\n  }\n}\n\n/***\nController Types\n================\n***/\n\nclass Controller extends Stepper {\n  constructor(fn) {\n    super();\n    this.stepper = fn;\n  }\n  done(c) {\n    return c.done;\n  }\n  step(current, target, dt, c) {\n    return this.stepper(current, target, dt, c);\n  }\n}\nfunction recalculate() {\n  // Apply the default parameters\n  const duration = (this._duration || 500) / 1000;\n  const overshoot = this._overshoot || 0;\n\n  // Calculate the PID natural response\n  const eps = 1e-10;\n  const pi = Math.PI;\n  const os = Math.log(overshoot / 100 + eps);\n  const zeta = -os / Math.sqrt(pi * pi + os * os);\n  const wn = 3.9 / (zeta * duration);\n\n  // Calculate the Spring values\n  this.d = 2 * zeta * wn;\n  this.k = wn * wn;\n}\nclass Spring extends Controller {\n  constructor(duration = 500, overshoot = 0) {\n    super();\n    this.duration(duration).overshoot(overshoot);\n  }\n  step(current, target, dt, c) {\n    if (typeof current === 'string') return current;\n    c.done = dt === Infinity;\n    if (dt === Infinity) return target;\n    if (dt === 0) return current;\n    if (dt > 100) dt = 16;\n    dt /= 1000;\n\n    // Get the previous velocity\n    const velocity = c.velocity || 0;\n\n    // Apply the control to get the new position and store it\n    const acceleration = -this.d * velocity - this.k * (current - target);\n    const newPosition = current + velocity * dt + acceleration * dt * dt / 2;\n\n    // Store the velocity\n    c.velocity = velocity + acceleration * dt;\n\n    // Figure out if we have converged, and if so, pass the value\n    c.done = Math.abs(target - newPosition) + Math.abs(velocity) < 0.002;\n    return c.done ? target : newPosition;\n  }\n}\nextend(Spring, {\n  duration: makeSetterGetter('_duration', recalculate),\n  overshoot: makeSetterGetter('_overshoot', recalculate)\n});\nclass PID extends Controller {\n  constructor(p = 0.1, i = 0.01, d = 0, windup = 1000) {\n    super();\n    this.p(p).i(i).d(d).windup(windup);\n  }\n  step(current, target, dt, c) {\n    if (typeof current === 'string') return current;\n    c.done = dt === Infinity;\n    if (dt === Infinity) return target;\n    if (dt === 0) return current;\n    const p = target - current;\n    let i = (c.integral || 0) + p * dt;\n    const d = (p - (c.error || 0)) / dt;\n    const windup = this._windup;\n\n    // antiwindup\n    if (windup !== false) {\n      i = Math.max(-windup, Math.min(i, windup));\n    }\n    c.error = p;\n    c.integral = i;\n    c.done = Math.abs(p) < 0.001;\n    return c.done ? target : current + (this.P * p + this.I * i + this.D * d);\n  }\n}\nextend(PID, {\n  windup: makeSetterGetter('_windup'),\n  p: makeSetterGetter('P'),\n  i: makeSetterGetter('I'),\n  d: makeSetterGetter('D')\n});\n\nconst segmentParameters = {\n  M: 2,\n  L: 2,\n  H: 1,\n  V: 1,\n  C: 6,\n  S: 4,\n  Q: 4,\n  T: 2,\n  A: 7,\n  Z: 0\n};\nconst pathHandlers = {\n  M: function (c, p, p0) {\n    p.x = p0.x = c[0];\n    p.y = p0.y = c[1];\n    return ['M', p.x, p.y];\n  },\n  L: function (c, p) {\n    p.x = c[0];\n    p.y = c[1];\n    return ['L', c[0], c[1]];\n  },\n  H: function (c, p) {\n    p.x = c[0];\n    return ['H', c[0]];\n  },\n  V: function (c, p) {\n    p.y = c[0];\n    return ['V', c[0]];\n  },\n  C: function (c, p) {\n    p.x = c[4];\n    p.y = c[5];\n    return ['C', c[0], c[1], c[2], c[3], c[4], c[5]];\n  },\n  S: function (c, p) {\n    p.x = c[2];\n    p.y = c[3];\n    return ['S', c[0], c[1], c[2], c[3]];\n  },\n  Q: function (c, p) {\n    p.x = c[2];\n    p.y = c[3];\n    return ['Q', c[0], c[1], c[2], c[3]];\n  },\n  T: function (c, p) {\n    p.x = c[0];\n    p.y = c[1];\n    return ['T', c[0], c[1]];\n  },\n  Z: function (c, p, p0) {\n    p.x = p0.x;\n    p.y = p0.y;\n    return ['Z'];\n  },\n  A: function (c, p) {\n    p.x = c[5];\n    p.y = c[6];\n    return ['A', c[0], c[1], c[2], c[3], c[4], c[5], c[6]];\n  }\n};\nconst mlhvqtcsaz = 'mlhvqtcsaz'.split('');\nfor (let i = 0, il = mlhvqtcsaz.length; i < il; ++i) {\n  pathHandlers[mlhvqtcsaz[i]] = function (i) {\n    return function (c, p, p0) {\n      if (i === 'H') c[0] = c[0] + p.x;else if (i === 'V') c[0] = c[0] + p.y;else if (i === 'A') {\n        c[5] = c[5] + p.x;\n        c[6] = c[6] + p.y;\n      } else {\n        for (let j = 0, jl = c.length; j < jl; ++j) {\n          c[j] = c[j] + (j % 2 ? p.y : p.x);\n        }\n      }\n      return pathHandlers[i](c, p, p0);\n    };\n  }(mlhvqtcsaz[i].toUpperCase());\n}\nfunction makeAbsolut(parser) {\n  const command = parser.segment[0];\n  return pathHandlers[command](parser.segment.slice(1), parser.p, parser.p0);\n}\nfunction segmentComplete(parser) {\n  return parser.segment.length && parser.segment.length - 1 === segmentParameters[parser.segment[0].toUpperCase()];\n}\nfunction startNewSegment(parser, token) {\n  parser.inNumber && finalizeNumber(parser, false);\n  const pathLetter = isPathLetter.test(token);\n  if (pathLetter) {\n    parser.segment = [token];\n  } else {\n    const lastCommand = parser.lastCommand;\n    const small = lastCommand.toLowerCase();\n    const isSmall = lastCommand === small;\n    parser.segment = [small === 'm' ? isSmall ? 'l' : 'L' : lastCommand];\n  }\n  parser.inSegment = true;\n  parser.lastCommand = parser.segment[0];\n  return pathLetter;\n}\nfunction finalizeNumber(parser, inNumber) {\n  if (!parser.inNumber) throw new Error('Parser Error');\n  parser.number && parser.segment.push(parseFloat(parser.number));\n  parser.inNumber = inNumber;\n  parser.number = '';\n  parser.pointSeen = false;\n  parser.hasExponent = false;\n  if (segmentComplete(parser)) {\n    finalizeSegment(parser);\n  }\n}\nfunction finalizeSegment(parser) {\n  parser.inSegment = false;\n  if (parser.absolute) {\n    parser.segment = makeAbsolut(parser);\n  }\n  parser.segments.push(parser.segment);\n}\nfunction isArcFlag(parser) {\n  if (!parser.segment.length) return false;\n  const isArc = parser.segment[0].toUpperCase() === 'A';\n  const length = parser.segment.length;\n  return isArc && (length === 4 || length === 5);\n}\nfunction isExponential(parser) {\n  return parser.lastToken.toUpperCase() === 'E';\n}\nconst pathDelimiters = new Set([' ', ',', '\\t', '\\n', '\\r', '\\f']);\nfunction pathParser(d, toAbsolute = true) {\n  let index = 0;\n  let token = '';\n  const parser = {\n    segment: [],\n    inNumber: false,\n    number: '',\n    lastToken: '',\n    inSegment: false,\n    segments: [],\n    pointSeen: false,\n    hasExponent: false,\n    absolute: toAbsolute,\n    p0: new Point(),\n    p: new Point()\n  };\n  while (parser.lastToken = token, token = d.charAt(index++)) {\n    if (!parser.inSegment) {\n      if (startNewSegment(parser, token)) {\n        continue;\n      }\n    }\n    if (token === '.') {\n      if (parser.pointSeen || parser.hasExponent) {\n        finalizeNumber(parser, false);\n        --index;\n        continue;\n      }\n      parser.inNumber = true;\n      parser.pointSeen = true;\n      parser.number += token;\n      continue;\n    }\n    if (!isNaN(parseInt(token))) {\n      if (parser.number === '0' || isArcFlag(parser)) {\n        parser.inNumber = true;\n        parser.number = token;\n        finalizeNumber(parser, true);\n        continue;\n      }\n      parser.inNumber = true;\n      parser.number += token;\n      continue;\n    }\n    if (pathDelimiters.has(token)) {\n      if (parser.inNumber) {\n        finalizeNumber(parser, false);\n      }\n      continue;\n    }\n    if (token === '-' || token === '+') {\n      if (parser.inNumber && !isExponential(parser)) {\n        finalizeNumber(parser, false);\n        --index;\n        continue;\n      }\n      parser.number += token;\n      parser.inNumber = true;\n      continue;\n    }\n    if (token.toUpperCase() === 'E') {\n      parser.number += token;\n      parser.hasExponent = true;\n      continue;\n    }\n    if (isPathLetter.test(token)) {\n      if (parser.inNumber) {\n        finalizeNumber(parser, false);\n      } else if (!segmentComplete(parser)) {\n        throw new Error('parser Error');\n      } else {\n        finalizeSegment(parser);\n      }\n      --index;\n    }\n  }\n  if (parser.inNumber) {\n    finalizeNumber(parser, false);\n  }\n  if (parser.inSegment && segmentComplete(parser)) {\n    finalizeSegment(parser);\n  }\n  return parser.segments;\n}\n\nfunction arrayToString(a) {\n  let s = '';\n  for (let i = 0, il = a.length; i < il; i++) {\n    s += a[i][0];\n    if (a[i][1] != null) {\n      s += a[i][1];\n      if (a[i][2] != null) {\n        s += ' ';\n        s += a[i][2];\n        if (a[i][3] != null) {\n          s += ' ';\n          s += a[i][3];\n          s += ' ';\n          s += a[i][4];\n          if (a[i][5] != null) {\n            s += ' ';\n            s += a[i][5];\n            s += ' ';\n            s += a[i][6];\n            if (a[i][7] != null) {\n              s += ' ';\n              s += a[i][7];\n            }\n          }\n        }\n      }\n    }\n  }\n  return s + ' ';\n}\nclass PathArray extends SVGArray {\n  // Get bounding box of path\n  bbox() {\n    parser().path.setAttribute('d', this.toString());\n    return new Box(parser.nodes.path.getBBox());\n  }\n\n  // Move path string\n  move(x, y) {\n    // get bounding box of current situation\n    const box = this.bbox();\n\n    // get relative offset\n    x -= box.x;\n    y -= box.y;\n    if (!isNaN(x) && !isNaN(y)) {\n      // move every point\n      for (let l, i = this.length - 1; i >= 0; i--) {\n        l = this[i][0];\n        if (l === 'M' || l === 'L' || l === 'T') {\n          this[i][1] += x;\n          this[i][2] += y;\n        } else if (l === 'H') {\n          this[i][1] += x;\n        } else if (l === 'V') {\n          this[i][1] += y;\n        } else if (l === 'C' || l === 'S' || l === 'Q') {\n          this[i][1] += x;\n          this[i][2] += y;\n          this[i][3] += x;\n          this[i][4] += y;\n          if (l === 'C') {\n            this[i][5] += x;\n            this[i][6] += y;\n          }\n        } else if (l === 'A') {\n          this[i][6] += x;\n          this[i][7] += y;\n        }\n      }\n    }\n    return this;\n  }\n\n  // Absolutize and parse path to array\n  parse(d = 'M0 0') {\n    if (Array.isArray(d)) {\n      d = Array.prototype.concat.apply([], d).toString();\n    }\n    return pathParser(d);\n  }\n\n  // Resize path string\n  size(width, height) {\n    // get bounding box of current situation\n    const box = this.bbox();\n    let i, l;\n\n    // If the box width or height is 0 then we ignore\n    // transformations on the respective axis\n    box.width = box.width === 0 ? 1 : box.width;\n    box.height = box.height === 0 ? 1 : box.height;\n\n    // recalculate position of all points according to new size\n    for (i = this.length - 1; i >= 0; i--) {\n      l = this[i][0];\n      if (l === 'M' || l === 'L' || l === 'T') {\n        this[i][1] = (this[i][1] - box.x) * width / box.width + box.x;\n        this[i][2] = (this[i][2] - box.y) * height / box.height + box.y;\n      } else if (l === 'H') {\n        this[i][1] = (this[i][1] - box.x) * width / box.width + box.x;\n      } else if (l === 'V') {\n        this[i][1] = (this[i][1] - box.y) * height / box.height + box.y;\n      } else if (l === 'C' || l === 'S' || l === 'Q') {\n        this[i][1] = (this[i][1] - box.x) * width / box.width + box.x;\n        this[i][2] = (this[i][2] - box.y) * height / box.height + box.y;\n        this[i][3] = (this[i][3] - box.x) * width / box.width + box.x;\n        this[i][4] = (this[i][4] - box.y) * height / box.height + box.y;\n        if (l === 'C') {\n          this[i][5] = (this[i][5] - box.x) * width / box.width + box.x;\n          this[i][6] = (this[i][6] - box.y) * height / box.height + box.y;\n        }\n      } else if (l === 'A') {\n        // resize radii\n        this[i][1] = this[i][1] * width / box.width;\n        this[i][2] = this[i][2] * height / box.height;\n\n        // move position values\n        this[i][6] = (this[i][6] - box.x) * width / box.width + box.x;\n        this[i][7] = (this[i][7] - box.y) * height / box.height + box.y;\n      }\n    }\n    return this;\n  }\n\n  // Convert array to string\n  toString() {\n    return arrayToString(this);\n  }\n}\n\nconst getClassForType = value => {\n  const type = typeof value;\n  if (type === 'number') {\n    return SVGNumber;\n  } else if (type === 'string') {\n    if (Color.isColor(value)) {\n      return Color;\n    } else if (delimiter.test(value)) {\n      return isPathLetter.test(value) ? PathArray : SVGArray;\n    } else if (numberAndUnit.test(value)) {\n      return SVGNumber;\n    } else {\n      return NonMorphable;\n    }\n  } else if (morphableTypes.indexOf(value.constructor) > -1) {\n    return value.constructor;\n  } else if (Array.isArray(value)) {\n    return SVGArray;\n  } else if (type === 'object') {\n    return ObjectBag;\n  } else {\n    return NonMorphable;\n  }\n};\nclass Morphable {\n  constructor(stepper) {\n    this._stepper = stepper || new Ease('-');\n    this._from = null;\n    this._to = null;\n    this._type = null;\n    this._context = null;\n    this._morphObj = null;\n  }\n  at(pos) {\n    return this._morphObj.morph(this._from, this._to, pos, this._stepper, this._context);\n  }\n  done() {\n    const complete = this._context.map(this._stepper.done).reduce(function (last, curr) {\n      return last && curr;\n    }, true);\n    return complete;\n  }\n  from(val) {\n    if (val == null) {\n      return this._from;\n    }\n    this._from = this._set(val);\n    return this;\n  }\n  stepper(stepper) {\n    if (stepper == null) return this._stepper;\n    this._stepper = stepper;\n    return this;\n  }\n  to(val) {\n    if (val == null) {\n      return this._to;\n    }\n    this._to = this._set(val);\n    return this;\n  }\n  type(type) {\n    // getter\n    if (type == null) {\n      return this._type;\n    }\n\n    // setter\n    this._type = type;\n    return this;\n  }\n  _set(value) {\n    if (!this._type) {\n      this.type(getClassForType(value));\n    }\n    let result = new this._type(value);\n    if (this._type === Color) {\n      result = this._to ? result[this._to[4]]() : this._from ? result[this._from[4]]() : result;\n    }\n    if (this._type === ObjectBag) {\n      result = this._to ? result.align(this._to) : this._from ? result.align(this._from) : result;\n    }\n    result = result.toConsumable();\n    this._morphObj = this._morphObj || new this._type();\n    this._context = this._context || Array.apply(null, Array(result.length)).map(Object).map(function (o) {\n      o.done = true;\n      return o;\n    });\n    return result;\n  }\n}\nclass NonMorphable {\n  constructor(...args) {\n    this.init(...args);\n  }\n  init(val) {\n    val = Array.isArray(val) ? val[0] : val;\n    this.value = val;\n    return this;\n  }\n  toArray() {\n    return [this.value];\n  }\n  valueOf() {\n    return this.value;\n  }\n}\nclass TransformBag {\n  constructor(...args) {\n    this.init(...args);\n  }\n  init(obj) {\n    if (Array.isArray(obj)) {\n      obj = {\n        scaleX: obj[0],\n        scaleY: obj[1],\n        shear: obj[2],\n        rotate: obj[3],\n        translateX: obj[4],\n        translateY: obj[5],\n        originX: obj[6],\n        originY: obj[7]\n      };\n    }\n    Object.assign(this, TransformBag.defaults, obj);\n    return this;\n  }\n  toArray() {\n    const v = this;\n    return [v.scaleX, v.scaleY, v.shear, v.rotate, v.translateX, v.translateY, v.originX, v.originY];\n  }\n}\nTransformBag.defaults = {\n  scaleX: 1,\n  scaleY: 1,\n  shear: 0,\n  rotate: 0,\n  translateX: 0,\n  translateY: 0,\n  originX: 0,\n  originY: 0\n};\nconst sortByKey = (a, b) => {\n  return a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0;\n};\nclass ObjectBag {\n  constructor(...args) {\n    this.init(...args);\n  }\n  align(other) {\n    const values = this.values;\n    for (let i = 0, il = values.length; i < il; ++i) {\n      // If the type is the same we only need to check if the color is in the correct format\n      if (values[i + 1] === other[i + 1]) {\n        if (values[i + 1] === Color && other[i + 7] !== values[i + 7]) {\n          const space = other[i + 7];\n          const color = new Color(this.values.splice(i + 3, 5))[space]().toArray();\n          this.values.splice(i + 3, 0, ...color);\n        }\n        i += values[i + 2] + 2;\n        continue;\n      }\n      if (!other[i + 1]) {\n        return this;\n      }\n\n      // The types differ, so we overwrite the new type with the old one\n      // And initialize it with the types default (e.g. black for color or 0 for number)\n      const defaultObject = new other[i + 1]().toArray();\n\n      // Than we fix the values array\n      const toDelete = values[i + 2] + 3;\n      values.splice(i, toDelete, other[i], other[i + 1], other[i + 2], ...defaultObject);\n      i += values[i + 2] + 2;\n    }\n    return this;\n  }\n  init(objOrArr) {\n    this.values = [];\n    if (Array.isArray(objOrArr)) {\n      this.values = objOrArr.slice();\n      return;\n    }\n    objOrArr = objOrArr || {};\n    const entries = [];\n    for (const i in objOrArr) {\n      const Type = getClassForType(objOrArr[i]);\n      const val = new Type(objOrArr[i]).toArray();\n      entries.push([i, Type, val.length, ...val]);\n    }\n    entries.sort(sortByKey);\n    this.values = entries.reduce((last, curr) => last.concat(curr), []);\n    return this;\n  }\n  toArray() {\n    return this.values;\n  }\n  valueOf() {\n    const obj = {};\n    const arr = this.values;\n\n    // for (var i = 0, len = arr.length; i < len; i += 2) {\n    while (arr.length) {\n      const key = arr.shift();\n      const Type = arr.shift();\n      const num = arr.shift();\n      const values = arr.splice(0, num);\n      obj[key] = new Type(values); // .valueOf()\n    }\n    return obj;\n  }\n}\nconst morphableTypes = [NonMorphable, TransformBag, ObjectBag];\nfunction registerMorphableType(type = []) {\n  morphableTypes.push(...[].concat(type));\n}\nfunction makeMorphable() {\n  extend(morphableTypes, {\n    to(val) {\n      return new Morphable().type(this.constructor).from(this.toArray()) // this.valueOf())\n      .to(val);\n    },\n    fromArray(arr) {\n      this.init(arr);\n      return this;\n    },\n    toConsumable() {\n      return this.toArray();\n    },\n    morph(from, to, pos, stepper, context) {\n      const mapper = function (i, index) {\n        return stepper.step(i, to[index], pos, context[index], context);\n      };\n      return this.fromArray(from.map(mapper));\n    }\n  });\n}\n\nclass Path extends Shape {\n  // Initialize node\n  constructor(node, attrs = node) {\n    super(nodeOrNew('path', node), attrs);\n  }\n\n  // Get array\n  array() {\n    return this._array || (this._array = new PathArray(this.attr('d')));\n  }\n\n  // Clear array cache\n  clear() {\n    delete this._array;\n    return this;\n  }\n\n  // Set height of element\n  height(height) {\n    return height == null ? this.bbox().height : this.size(this.bbox().width, height);\n  }\n\n  // Move by left top corner\n  move(x, y) {\n    return this.attr('d', this.array().move(x, y));\n  }\n\n  // Plot new path\n  plot(d) {\n    return d == null ? this.array() : this.clear().attr('d', typeof d === 'string' ? d : this._array = new PathArray(d));\n  }\n\n  // Set element size to given width and height\n  size(width, height) {\n    const p = proportionalSize(this, width, height);\n    return this.attr('d', this.array().size(p.width, p.height));\n  }\n\n  // Set width of element\n  width(width) {\n    return width == null ? this.bbox().width : this.size(width, this.bbox().height);\n  }\n\n  // Move by left top corner over x-axis\n  x(x) {\n    return x == null ? this.bbox().x : this.move(x, this.bbox().y);\n  }\n\n  // Move by left top corner over y-axis\n  y(y) {\n    return y == null ? this.bbox().y : this.move(this.bbox().x, y);\n  }\n}\n\n// Define morphable array\nPath.prototype.MorphArray = PathArray;\n\n// Add parent method\nregisterMethods({\n  Container: {\n    // Create a wrapped path element\n    path: wrapWithAttrCheck(function (d) {\n      // make sure plot is called as a setter\n      return this.put(new Path()).plot(d || new PathArray());\n    })\n  }\n});\nregister(Path, 'Path');\n\n// Get array\nfunction array() {\n  return this._array || (this._array = new PointArray(this.attr('points')));\n}\n\n// Clear array cache\nfunction clear() {\n  delete this._array;\n  return this;\n}\n\n// Move by left top corner\nfunction move$2(x, y) {\n  return this.attr('points', this.array().move(x, y));\n}\n\n// Plot new path\nfunction plot(p) {\n  return p == null ? this.array() : this.clear().attr('points', typeof p === 'string' ? p : this._array = new PointArray(p));\n}\n\n// Set element size to given width and height\nfunction size$1(width, height) {\n  const p = proportionalSize(this, width, height);\n  return this.attr('points', this.array().size(p.width, p.height));\n}\n\nvar poly = {\n  __proto__: null,\n  array: array,\n  clear: clear,\n  move: move$2,\n  plot: plot,\n  size: size$1\n};\n\nclass Polygon extends Shape {\n  // Initialize node\n  constructor(node, attrs = node) {\n    super(nodeOrNew('polygon', node), attrs);\n  }\n}\nregisterMethods({\n  Container: {\n    // Create a wrapped polygon element\n    polygon: wrapWithAttrCheck(function (p) {\n      // make sure plot is called as a setter\n      return this.put(new Polygon()).plot(p || new PointArray());\n    })\n  }\n});\nextend(Polygon, pointed);\nextend(Polygon, poly);\nregister(Polygon, 'Polygon');\n\nclass Polyline extends Shape {\n  // Initialize node\n  constructor(node, attrs = node) {\n    super(nodeOrNew('polyline', node), attrs);\n  }\n}\nregisterMethods({\n  Container: {\n    // Create a wrapped polygon element\n    polyline: wrapWithAttrCheck(function (p) {\n      // make sure plot is called as a setter\n      return this.put(new Polyline()).plot(p || new PointArray());\n    })\n  }\n});\nextend(Polyline, pointed);\nextend(Polyline, poly);\nregister(Polyline, 'Polyline');\n\nclass Rect extends Shape {\n  // Initialize node\n  constructor(node, attrs = node) {\n    super(nodeOrNew('rect', node), attrs);\n  }\n}\nextend(Rect, {\n  rx,\n  ry\n});\nregisterMethods({\n  Container: {\n    // Create a rect element\n    rect: wrapWithAttrCheck(function (width, height) {\n      return this.put(new Rect()).size(width, height);\n    })\n  }\n});\nregister(Rect, 'Rect');\n\nclass Queue {\n  constructor() {\n    this._first = null;\n    this._last = null;\n  }\n\n  // Shows us the first item in the list\n  first() {\n    return this._first && this._first.value;\n  }\n\n  // Shows us the last item in the list\n  last() {\n    return this._last && this._last.value;\n  }\n  push(value) {\n    // An item stores an id and the provided value\n    const item = typeof value.next !== 'undefined' ? value : {\n      value: value,\n      next: null,\n      prev: null\n    };\n\n    // Deal with the queue being empty or populated\n    if (this._last) {\n      item.prev = this._last;\n      this._last.next = item;\n      this._last = item;\n    } else {\n      this._last = item;\n      this._first = item;\n    }\n\n    // Return the current item\n    return item;\n  }\n\n  // Removes the item that was returned from the push\n  remove(item) {\n    // Relink the previous item\n    if (item.prev) item.prev.next = item.next;\n    if (item.next) item.next.prev = item.prev;\n    if (item === this._last) this._last = item.prev;\n    if (item === this._first) this._first = item.next;\n\n    // Invalidate item\n    item.prev = null;\n    item.next = null;\n  }\n  shift() {\n    // Check if we have a value\n    const remove = this._first;\n    if (!remove) return null;\n\n    // If we do, remove it and relink things\n    this._first = remove.next;\n    if (this._first) this._first.prev = null;\n    this._last = this._first ? this._last : null;\n    return remove.value;\n  }\n}\n\nconst Animator = {\n  nextDraw: null,\n  frames: new Queue(),\n  timeouts: new Queue(),\n  immediates: new Queue(),\n  timer: () => globals.window.performance || globals.window.Date,\n  transforms: [],\n  frame(fn) {\n    // Store the node\n    const node = Animator.frames.push({\n      run: fn\n    });\n\n    // Request an animation frame if we don't have one\n    if (Animator.nextDraw === null) {\n      Animator.nextDraw = globals.window.requestAnimationFrame(Animator._draw);\n    }\n\n    // Return the node so we can remove it easily\n    return node;\n  },\n  timeout(fn, delay) {\n    delay = delay || 0;\n\n    // Work out when the event should fire\n    const time = Animator.timer().now() + delay;\n\n    // Add the timeout to the end of the queue\n    const node = Animator.timeouts.push({\n      run: fn,\n      time: time\n    });\n\n    // Request another animation frame if we need one\n    if (Animator.nextDraw === null) {\n      Animator.nextDraw = globals.window.requestAnimationFrame(Animator._draw);\n    }\n    return node;\n  },\n  immediate(fn) {\n    // Add the immediate fn to the end of the queue\n    const node = Animator.immediates.push(fn);\n    // Request another animation frame if we need one\n    if (Animator.nextDraw === null) {\n      Animator.nextDraw = globals.window.requestAnimationFrame(Animator._draw);\n    }\n    return node;\n  },\n  cancelFrame(node) {\n    node != null && Animator.frames.remove(node);\n  },\n  clearTimeout(node) {\n    node != null && Animator.timeouts.remove(node);\n  },\n  cancelImmediate(node) {\n    node != null && Animator.immediates.remove(node);\n  },\n  _draw(now) {\n    // Run all the timeouts we can run, if they are not ready yet, add them\n    // to the end of the queue immediately! (bad timeouts!!! [sarcasm])\n    let nextTimeout = null;\n    const lastTimeout = Animator.timeouts.last();\n    while (nextTimeout = Animator.timeouts.shift()) {\n      // Run the timeout if its time, or push it to the end\n      if (now >= nextTimeout.time) {\n        nextTimeout.run();\n      } else {\n        Animator.timeouts.push(nextTimeout);\n      }\n\n      // If we hit the last item, we should stop shifting out more items\n      if (nextTimeout === lastTimeout) break;\n    }\n\n    // Run all of the animation frames\n    let nextFrame = null;\n    const lastFrame = Animator.frames.last();\n    while (nextFrame !== lastFrame && (nextFrame = Animator.frames.shift())) {\n      nextFrame.run(now);\n    }\n    let nextImmediate = null;\n    while (nextImmediate = Animator.immediates.shift()) {\n      nextImmediate();\n    }\n\n    // If we have remaining timeouts or frames, draw until we don't anymore\n    Animator.nextDraw = Animator.timeouts.first() || Animator.frames.first() ? globals.window.requestAnimationFrame(Animator._draw) : null;\n  }\n};\n\nconst makeSchedule = function (runnerInfo) {\n  const start = runnerInfo.start;\n  const duration = runnerInfo.runner.duration();\n  const end = start + duration;\n  return {\n    start: start,\n    duration: duration,\n    end: end,\n    runner: runnerInfo.runner\n  };\n};\nconst defaultSource = function () {\n  const w = globals.window;\n  return (w.performance || w.Date).now();\n};\nclass Timeline extends EventTarget {\n  // Construct a new timeline on the given element\n  constructor(timeSource = defaultSource) {\n    super();\n    this._timeSource = timeSource;\n\n    // terminate resets all variables to their initial state\n    this.terminate();\n  }\n  active() {\n    return !!this._nextFrame;\n  }\n  finish() {\n    // Go to end and pause\n    this.time(this.getEndTimeOfTimeline() + 1);\n    return this.pause();\n  }\n\n  // Calculates the end of the timeline\n  getEndTime() {\n    const lastRunnerInfo = this.getLastRunnerInfo();\n    const lastDuration = lastRunnerInfo ? lastRunnerInfo.runner.duration() : 0;\n    const lastStartTime = lastRunnerInfo ? lastRunnerInfo.start : this._time;\n    return lastStartTime + lastDuration;\n  }\n  getEndTimeOfTimeline() {\n    const endTimes = this._runners.map(i => i.start + i.runner.duration());\n    return Math.max(0, ...endTimes);\n  }\n  getLastRunnerInfo() {\n    return this.getRunnerInfoById(this._lastRunnerId);\n  }\n  getRunnerInfoById(id) {\n    return this._runners[this._runnerIds.indexOf(id)] || null;\n  }\n  pause() {\n    this._paused = true;\n    return this._continue();\n  }\n  persist(dtOrForever) {\n    if (dtOrForever == null) return this._persist;\n    this._persist = dtOrForever;\n    return this;\n  }\n  play() {\n    // Now make sure we are not paused and continue the animation\n    this._paused = false;\n    return this.updateTime()._continue();\n  }\n  reverse(yes) {\n    const currentSpeed = this.speed();\n    if (yes == null) return this.speed(-currentSpeed);\n    const positive = Math.abs(currentSpeed);\n    return this.speed(yes ? -positive : positive);\n  }\n\n  // schedules a runner on the timeline\n  schedule(runner, delay, when) {\n    if (runner == null) {\n      return this._runners.map(makeSchedule);\n    }\n\n    // The start time for the next animation can either be given explicitly,\n    // derived from the current timeline time or it can be relative to the\n    // last start time to chain animations directly\n\n    let absoluteStartTime = 0;\n    const endTime = this.getEndTime();\n    delay = delay || 0;\n\n    // Work out when to start the animation\n    if (when == null || when === 'last' || when === 'after') {\n      // Take the last time and increment\n      absoluteStartTime = endTime;\n    } else if (when === 'absolute' || when === 'start') {\n      absoluteStartTime = delay;\n      delay = 0;\n    } else if (when === 'now') {\n      absoluteStartTime = this._time;\n    } else if (when === 'relative') {\n      const runnerInfo = this.getRunnerInfoById(runner.id);\n      if (runnerInfo) {\n        absoluteStartTime = runnerInfo.start + delay;\n        delay = 0;\n      }\n    } else if (when === 'with-last') {\n      const lastRunnerInfo = this.getLastRunnerInfo();\n      const lastStartTime = lastRunnerInfo ? lastRunnerInfo.start : this._time;\n      absoluteStartTime = lastStartTime;\n    } else {\n      throw new Error('Invalid value for the \"when\" parameter');\n    }\n\n    // Manage runner\n    runner.unschedule();\n    runner.timeline(this);\n    const persist = runner.persist();\n    const runnerInfo = {\n      persist: persist === null ? this._persist : persist,\n      start: absoluteStartTime + delay,\n      runner\n    };\n    this._lastRunnerId = runner.id;\n    this._runners.push(runnerInfo);\n    this._runners.sort((a, b) => a.start - b.start);\n    this._runnerIds = this._runners.map(info => info.runner.id);\n    this.updateTime()._continue();\n    return this;\n  }\n  seek(dt) {\n    return this.time(this._time + dt);\n  }\n  source(fn) {\n    if (fn == null) return this._timeSource;\n    this._timeSource = fn;\n    return this;\n  }\n  speed(speed) {\n    if (speed == null) return this._speed;\n    this._speed = speed;\n    return this;\n  }\n  stop() {\n    // Go to start and pause\n    this.time(0);\n    return this.pause();\n  }\n  time(time) {\n    if (time == null) return this._time;\n    this._time = time;\n    return this._continue(true);\n  }\n\n  // Remove the runner from this timeline\n  unschedule(runner) {\n    const index = this._runnerIds.indexOf(runner.id);\n    if (index < 0) return this;\n    this._runners.splice(index, 1);\n    this._runnerIds.splice(index, 1);\n    runner.timeline(null);\n    return this;\n  }\n\n  // Makes sure, that after pausing the time doesn't jump\n  updateTime() {\n    if (!this.active()) {\n      this._lastSourceTime = this._timeSource();\n    }\n    return this;\n  }\n\n  // Checks if we are running and continues the animation\n  _continue(immediateStep = false) {\n    Animator.cancelFrame(this._nextFrame);\n    this._nextFrame = null;\n    if (immediateStep) return this._stepImmediate();\n    if (this._paused) return this;\n    this._nextFrame = Animator.frame(this._step);\n    return this;\n  }\n  _stepFn(immediateStep = false) {\n    // Get the time delta from the last time and update the time\n    const time = this._timeSource();\n    let dtSource = time - this._lastSourceTime;\n    if (immediateStep) dtSource = 0;\n    const dtTime = this._speed * dtSource + (this._time - this._lastStepTime);\n    this._lastSourceTime = time;\n\n    // Only update the time if we use the timeSource.\n    // Otherwise use the current time\n    if (!immediateStep) {\n      // Update the time\n      this._time += dtTime;\n      this._time = this._time < 0 ? 0 : this._time;\n    }\n    this._lastStepTime = this._time;\n    this.fire('time', this._time);\n\n    // This is for the case that the timeline was seeked so that the time\n    // is now before the startTime of the runner. That is why we need to set\n    // the runner to position 0\n\n    // FIXME:\n    // However, resetting in insertion order leads to bugs. Considering the case,\n    // where 2 runners change the same attribute but in different times,\n    // resetting both of them will lead to the case where the later defined\n    // runner always wins the reset even if the other runner started earlier\n    // and therefore should win the attribute battle\n    // this can be solved by resetting them backwards\n    for (let k = this._runners.length; k--;) {\n      // Get and run the current runner and ignore it if its inactive\n      const runnerInfo = this._runners[k];\n      const runner = runnerInfo.runner;\n\n      // Make sure that we give the actual difference\n      // between runner start time and now\n      const dtToStart = this._time - runnerInfo.start;\n\n      // Dont run runner if not started yet\n      // and try to reset it\n      if (dtToStart <= 0) {\n        runner.reset();\n      }\n    }\n\n    // Run all of the runners directly\n    let runnersLeft = false;\n    for (let i = 0, len = this._runners.length; i < len; i++) {\n      // Get and run the current runner and ignore it if its inactive\n      const runnerInfo = this._runners[i];\n      const runner = runnerInfo.runner;\n      let dt = dtTime;\n\n      // Make sure that we give the actual difference\n      // between runner start time and now\n      const dtToStart = this._time - runnerInfo.start;\n\n      // Dont run runner if not started yet\n      if (dtToStart <= 0) {\n        runnersLeft = true;\n        continue;\n      } else if (dtToStart < dt) {\n        // Adjust dt to make sure that animation is on point\n        dt = dtToStart;\n      }\n      if (!runner.active()) continue;\n\n      // If this runner is still going, signal that we need another animation\n      // frame, otherwise, remove the completed runner\n      const finished = runner.step(dt).done;\n      if (!finished) {\n        runnersLeft = true;\n        // continue\n      } else if (runnerInfo.persist !== true) {\n        // runner is finished. And runner might get removed\n        const endTime = runner.duration() - runner.time() + this._time;\n        if (endTime + runnerInfo.persist < this._time) {\n          // Delete runner and correct index\n          runner.unschedule();\n          --i;\n          --len;\n        }\n      }\n    }\n\n    // Basically: we continue when there are runners right from us in time\n    // when -->, and when runners are left from us when <--\n    if (runnersLeft && !(this._speed < 0 && this._time === 0) || this._runnerIds.length && this._speed < 0 && this._time > 0) {\n      this._continue();\n    } else {\n      this.pause();\n      this.fire('finished');\n    }\n    return this;\n  }\n  terminate() {\n    // cleanup memory\n\n    // Store the timing variables\n    this._startTime = 0;\n    this._speed = 1.0;\n\n    // Determines how long a runner is hold in memory. Can be a dt or true/false\n    this._persist = 0;\n\n    // Keep track of the running animations and their starting parameters\n    this._nextFrame = null;\n    this._paused = true;\n    this._runners = [];\n    this._runnerIds = [];\n    this._lastRunnerId = -1;\n    this._time = 0;\n    this._lastSourceTime = 0;\n    this._lastStepTime = 0;\n\n    // Make sure that step is always called in class context\n    this._step = this._stepFn.bind(this, false);\n    this._stepImmediate = this._stepFn.bind(this, true);\n  }\n}\nregisterMethods({\n  Element: {\n    timeline: function (timeline) {\n      if (timeline == null) {\n        this._timeline = this._timeline || new Timeline();\n        return this._timeline;\n      } else {\n        this._timeline = timeline;\n        return this;\n      }\n    }\n  }\n});\n\nclass Runner extends EventTarget {\n  constructor(options) {\n    super();\n\n    // Store a unique id on the runner, so that we can identify it later\n    this.id = Runner.id++;\n\n    // Ensure a default value\n    options = options == null ? timeline.duration : options;\n\n    // Ensure that we get a controller\n    options = typeof options === 'function' ? new Controller(options) : options;\n\n    // Declare all of the variables\n    this._element = null;\n    this._timeline = null;\n    this.done = false;\n    this._queue = [];\n\n    // Work out the stepper and the duration\n    this._duration = typeof options === 'number' && options;\n    this._isDeclarative = options instanceof Controller;\n    this._stepper = this._isDeclarative ? options : new Ease();\n\n    // We copy the current values from the timeline because they can change\n    this._history = {};\n\n    // Store the state of the runner\n    this.enabled = true;\n    this._time = 0;\n    this._lastTime = 0;\n\n    // At creation, the runner is in reset state\n    this._reseted = true;\n\n    // Save transforms applied to this runner\n    this.transforms = new Matrix();\n    this.transformId = 1;\n\n    // Looping variables\n    this._haveReversed = false;\n    this._reverse = false;\n    this._loopsDone = 0;\n    this._swing = false;\n    this._wait = 0;\n    this._times = 1;\n    this._frameId = null;\n\n    // Stores how long a runner is stored after being done\n    this._persist = this._isDeclarative ? true : null;\n  }\n  static sanitise(duration, delay, when) {\n    // Initialise the default parameters\n    let times = 1;\n    let swing = false;\n    let wait = 0;\n    duration = duration ?? timeline.duration;\n    delay = delay ?? timeline.delay;\n    when = when || 'last';\n\n    // If we have an object, unpack the values\n    if (typeof duration === 'object' && !(duration instanceof Stepper)) {\n      delay = duration.delay ?? delay;\n      when = duration.when ?? when;\n      swing = duration.swing || swing;\n      times = duration.times ?? times;\n      wait = duration.wait ?? wait;\n      duration = duration.duration ?? timeline.duration;\n    }\n    return {\n      duration: duration,\n      delay: delay,\n      swing: swing,\n      times: times,\n      wait: wait,\n      when: when\n    };\n  }\n  active(enabled) {\n    if (enabled == null) return this.enabled;\n    this.enabled = enabled;\n    return this;\n  }\n\n  /*\n  Private Methods\n  ===============\n  Methods that shouldn't be used externally\n  */\n  addTransform(transform) {\n    this.transforms.lmultiplyO(transform);\n    return this;\n  }\n  after(fn) {\n    return this.on('finished', fn);\n  }\n  animate(duration, delay, when) {\n    const o = Runner.sanitise(duration, delay, when);\n    const runner = new Runner(o.duration);\n    if (this._timeline) runner.timeline(this._timeline);\n    if (this._element) runner.element(this._element);\n    return runner.loop(o).schedule(o.delay, o.when);\n  }\n  clearTransform() {\n    this.transforms = new Matrix();\n    return this;\n  }\n\n  // TODO: Keep track of all transformations so that deletion is faster\n  clearTransformsFromQueue() {\n    if (!this.done || !this._timeline || !this._timeline._runnerIds.includes(this.id)) {\n      this._queue = this._queue.filter(item => {\n        return !item.isTransform;\n      });\n    }\n  }\n  delay(delay) {\n    return this.animate(0, delay);\n  }\n  duration() {\n    return this._times * (this._wait + this._duration) - this._wait;\n  }\n  during(fn) {\n    return this.queue(null, fn);\n  }\n  ease(fn) {\n    this._stepper = new Ease(fn);\n    return this;\n  }\n  /*\n  Runner Definitions\n  ==================\n  These methods help us define the runtime behaviour of the Runner or they\n  help us make new runners from the current runner\n  */\n\n  element(element) {\n    if (element == null) return this._element;\n    this._element = element;\n    element._prepareRunner();\n    return this;\n  }\n  finish() {\n    return this.step(Infinity);\n  }\n  loop(times, swing, wait) {\n    // Deal with the user passing in an object\n    if (typeof times === 'object') {\n      swing = times.swing;\n      wait = times.wait;\n      times = times.times;\n    }\n\n    // Sanitise the values and store them\n    this._times = times || Infinity;\n    this._swing = swing || false;\n    this._wait = wait || 0;\n\n    // Allow true to be passed\n    if (this._times === true) {\n      this._times = Infinity;\n    }\n    return this;\n  }\n  loops(p) {\n    const loopDuration = this._duration + this._wait;\n    if (p == null) {\n      const loopsDone = Math.floor(this._time / loopDuration);\n      const relativeTime = this._time - loopsDone * loopDuration;\n      const position = relativeTime / this._duration;\n      return Math.min(loopsDone + position, this._times);\n    }\n    const whole = Math.floor(p);\n    const partial = p % 1;\n    const time = loopDuration * whole + this._duration * partial;\n    return this.time(time);\n  }\n  persist(dtOrForever) {\n    if (dtOrForever == null) return this._persist;\n    this._persist = dtOrForever;\n    return this;\n  }\n  position(p) {\n    // Get all of the variables we need\n    const x = this._time;\n    const d = this._duration;\n    const w = this._wait;\n    const t = this._times;\n    const s = this._swing;\n    const r = this._reverse;\n    let position;\n    if (p == null) {\n      /*\n      This function converts a time to a position in the range [0, 1]\n      The full explanation can be found in this desmos demonstration\n        https://www.desmos.com/calculator/u4fbavgche\n      The logic is slightly simplified here because we can use booleans\n      */\n\n      // Figure out the value without thinking about the start or end time\n      const f = function (x) {\n        const swinging = s * Math.floor(x % (2 * (w + d)) / (w + d));\n        const backwards = swinging && !r || !swinging && r;\n        const uncliped = Math.pow(-1, backwards) * (x % (w + d)) / d + backwards;\n        const clipped = Math.max(Math.min(uncliped, 1), 0);\n        return clipped;\n      };\n\n      // Figure out the value by incorporating the start time\n      const endTime = t * (w + d) - w;\n      position = x <= 0 ? Math.round(f(1e-5)) : x < endTime ? f(x) : Math.round(f(endTime - 1e-5));\n      return position;\n    }\n\n    // Work out the loops done and add the position to the loops done\n    const loopsDone = Math.floor(this.loops());\n    const swingForward = s && loopsDone % 2 === 0;\n    const forwards = swingForward && !r || r && swingForward;\n    position = loopsDone + (forwards ? p : 1 - p);\n    return this.loops(position);\n  }\n  progress(p) {\n    if (p == null) {\n      return Math.min(1, this._time / this.duration());\n    }\n    return this.time(p * this.duration());\n  }\n\n  /*\n  Basic Functionality\n  ===================\n  These methods allow us to attach basic functions to the runner directly\n  */\n  queue(initFn, runFn, retargetFn, isTransform) {\n    this._queue.push({\n      initialiser: initFn || noop,\n      runner: runFn || noop,\n      retarget: retargetFn,\n      isTransform: isTransform,\n      initialised: false,\n      finished: false\n    });\n    const timeline = this.timeline();\n    timeline && this.timeline()._continue();\n    return this;\n  }\n  reset() {\n    if (this._reseted) return this;\n    this.time(0);\n    this._reseted = true;\n    return this;\n  }\n  reverse(reverse) {\n    this._reverse = reverse == null ? !this._reverse : reverse;\n    return this;\n  }\n  schedule(timeline, delay, when) {\n    // The user doesn't need to pass a timeline if we already have one\n    if (!(timeline instanceof Timeline)) {\n      when = delay;\n      delay = timeline;\n      timeline = this.timeline();\n    }\n\n    // If there is no timeline, yell at the user...\n    if (!timeline) {\n      throw Error('Runner cannot be scheduled without timeline');\n    }\n\n    // Schedule the runner on the timeline provided\n    timeline.schedule(this, delay, when);\n    return this;\n  }\n  step(dt) {\n    // If we are inactive, this stepper just gets skipped\n    if (!this.enabled) return this;\n\n    // Update the time and get the new position\n    dt = dt == null ? 16 : dt;\n    this._time += dt;\n    const position = this.position();\n\n    // Figure out if we need to run the stepper in this frame\n    const running = this._lastPosition !== position && this._time >= 0;\n    this._lastPosition = position;\n\n    // Figure out if we just started\n    const duration = this.duration();\n    const justStarted = this._lastTime <= 0 && this._time > 0;\n    const justFinished = this._lastTime < duration && this._time >= duration;\n    this._lastTime = this._time;\n    if (justStarted) {\n      this.fire('start', this);\n    }\n\n    // Work out if the runner is finished set the done flag here so animations\n    // know, that they are running in the last step (this is good for\n    // transformations which can be merged)\n    const declarative = this._isDeclarative;\n    this.done = !declarative && !justFinished && this._time >= duration;\n\n    // Runner is running. So its not in reset state anymore\n    this._reseted = false;\n    let converged = false;\n    // Call initialise and the run function\n    if (running || declarative) {\n      this._initialise(running);\n\n      // clear the transforms on this runner so they dont get added again and again\n      this.transforms = new Matrix();\n      converged = this._run(declarative ? dt : position);\n      this.fire('step', this);\n    }\n    // correct the done flag here\n    // declarative animations itself know when they converged\n    this.done = this.done || converged && declarative;\n    if (justFinished) {\n      this.fire('finished', this);\n    }\n    return this;\n  }\n\n  /*\n  Runner animation methods\n  ========================\n  Control how the animation plays\n  */\n  time(time) {\n    if (time == null) {\n      return this._time;\n    }\n    const dt = time - this._time;\n    this.step(dt);\n    return this;\n  }\n  timeline(timeline) {\n    // check explicitly for undefined so we can set the timeline to null\n    if (typeof timeline === 'undefined') return this._timeline;\n    this._timeline = timeline;\n    return this;\n  }\n  unschedule() {\n    const timeline = this.timeline();\n    timeline && timeline.unschedule(this);\n    return this;\n  }\n\n  // Run each initialise function in the runner if required\n  _initialise(running) {\n    // If we aren't running, we shouldn't initialise when not declarative\n    if (!running && !this._isDeclarative) return;\n\n    // Loop through all of the initialisers\n    for (let i = 0, len = this._queue.length; i < len; ++i) {\n      // Get the current initialiser\n      const current = this._queue[i];\n\n      // Determine whether we need to initialise\n      const needsIt = this._isDeclarative || !current.initialised && running;\n      running = !current.finished;\n\n      // Call the initialiser if we need to\n      if (needsIt && running) {\n        current.initialiser.call(this);\n        current.initialised = true;\n      }\n    }\n  }\n\n  // Save a morpher to the morpher list so that we can retarget it later\n  _rememberMorpher(method, morpher) {\n    this._history[method] = {\n      morpher: morpher,\n      caller: this._queue[this._queue.length - 1]\n    };\n\n    // We have to resume the timeline in case a controller\n    // is already done without being ever run\n    // This can happen when e.g. this is done:\n    //    anim = el.animate(new SVG.Spring)\n    // and later\n    //    anim.move(...)\n    if (this._isDeclarative) {\n      const timeline = this.timeline();\n      timeline && timeline.play();\n    }\n  }\n\n  // Try to set the target for a morpher if the morpher exists, otherwise\n  // Run each run function for the position or dt given\n  _run(positionOrDt) {\n    // Run all of the _queue directly\n    let allfinished = true;\n    for (let i = 0, len = this._queue.length; i < len; ++i) {\n      // Get the current function to run\n      const current = this._queue[i];\n\n      // Run the function if its not finished, we keep track of the finished\n      // flag for the sake of declarative _queue\n      const converged = current.runner.call(this, positionOrDt);\n      current.finished = current.finished || converged === true;\n      allfinished = allfinished && current.finished;\n    }\n\n    // We report when all of the constructors are finished\n    return allfinished;\n  }\n\n  // do nothing and return false\n  _tryRetarget(method, target, extra) {\n    if (this._history[method]) {\n      // if the last method wasn't even initialised, throw it away\n      if (!this._history[method].caller.initialised) {\n        const index = this._queue.indexOf(this._history[method].caller);\n        this._queue.splice(index, 1);\n        return false;\n      }\n\n      // for the case of transformations, we use the special retarget function\n      // which has access to the outer scope\n      if (this._history[method].caller.retarget) {\n        this._history[method].caller.retarget.call(this, target, extra);\n        // for everything else a simple morpher change is sufficient\n      } else {\n        this._history[method].morpher.to(target);\n      }\n      this._history[method].caller.finished = false;\n      const timeline = this.timeline();\n      timeline && timeline.play();\n      return true;\n    }\n    return false;\n  }\n}\nRunner.id = 0;\nclass FakeRunner {\n  constructor(transforms = new Matrix(), id = -1, done = true) {\n    this.transforms = transforms;\n    this.id = id;\n    this.done = done;\n  }\n  clearTransformsFromQueue() {}\n}\nextend([Runner, FakeRunner], {\n  mergeWith(runner) {\n    return new FakeRunner(runner.transforms.lmultiply(this.transforms), runner.id);\n  }\n});\n\n// FakeRunner.emptyRunner = new FakeRunner()\n\nconst lmultiply = (last, curr) => last.lmultiplyO(curr);\nconst getRunnerTransform = runner => runner.transforms;\nfunction mergeTransforms() {\n  // Find the matrix to apply to the element and apply it\n  const runners = this._transformationRunners.runners;\n  const netTransform = runners.map(getRunnerTransform).reduce(lmultiply, new Matrix());\n  this.transform(netTransform);\n  this._transformationRunners.merge();\n  if (this._transformationRunners.length() === 1) {\n    this._frameId = null;\n  }\n}\nclass RunnerArray {\n  constructor() {\n    this.runners = [];\n    this.ids = [];\n  }\n  add(runner) {\n    if (this.runners.includes(runner)) return;\n    const id = runner.id + 1;\n    this.runners.push(runner);\n    this.ids.push(id);\n    return this;\n  }\n  clearBefore(id) {\n    const deleteCnt = this.ids.indexOf(id + 1) || 1;\n    this.ids.splice(0, deleteCnt, 0);\n    this.runners.splice(0, deleteCnt, new FakeRunner()).forEach(r => r.clearTransformsFromQueue());\n    return this;\n  }\n  edit(id, newRunner) {\n    const index = this.ids.indexOf(id + 1);\n    this.ids.splice(index, 1, id + 1);\n    this.runners.splice(index, 1, newRunner);\n    return this;\n  }\n  getByID(id) {\n    return this.runners[this.ids.indexOf(id + 1)];\n  }\n  length() {\n    return this.ids.length;\n  }\n  merge() {\n    let lastRunner = null;\n    for (let i = 0; i < this.runners.length; ++i) {\n      const runner = this.runners[i];\n      const condition = lastRunner && runner.done && lastRunner.done && (\n      // don't merge runner when persisted on timeline\n      !runner._timeline || !runner._timeline._runnerIds.includes(runner.id)) && (!lastRunner._timeline || !lastRunner._timeline._runnerIds.includes(lastRunner.id));\n      if (condition) {\n        // the +1 happens in the function\n        this.remove(runner.id);\n        const newRunner = runner.mergeWith(lastRunner);\n        this.edit(lastRunner.id, newRunner);\n        lastRunner = newRunner;\n        --i;\n      } else {\n        lastRunner = runner;\n      }\n    }\n    return this;\n  }\n  remove(id) {\n    const index = this.ids.indexOf(id + 1);\n    this.ids.splice(index, 1);\n    this.runners.splice(index, 1);\n    return this;\n  }\n}\nregisterMethods({\n  Element: {\n    animate(duration, delay, when) {\n      const o = Runner.sanitise(duration, delay, when);\n      const timeline = this.timeline();\n      return new Runner(o.duration).loop(o).element(this).timeline(timeline.play()).schedule(o.delay, o.when);\n    },\n    delay(by, when) {\n      return this.animate(0, by, when);\n    },\n    // this function searches for all runners on the element and deletes the ones\n    // which run before the current one. This is because absolute transformations\n    // overwrite anything anyway so there is no need to waste time computing\n    // other runners\n    _clearTransformRunnersBefore(currentRunner) {\n      this._transformationRunners.clearBefore(currentRunner.id);\n    },\n    _currentTransform(current) {\n      return this._transformationRunners.runners\n      // we need the equal sign here to make sure, that also transformations\n      // on the same runner which execute before the current transformation are\n      // taken into account\n      .filter(runner => runner.id <= current.id).map(getRunnerTransform).reduce(lmultiply, new Matrix());\n    },\n    _addRunner(runner) {\n      this._transformationRunners.add(runner);\n\n      // Make sure that the runner merge is executed at the very end of\n      // all Animator functions. That is why we use immediate here to execute\n      // the merge right after all frames are run\n      Animator.cancelImmediate(this._frameId);\n      this._frameId = Animator.immediate(mergeTransforms.bind(this));\n    },\n    _prepareRunner() {\n      if (this._frameId == null) {\n        this._transformationRunners = new RunnerArray().add(new FakeRunner(new Matrix(this)));\n      }\n    }\n  }\n});\n\n// Will output the elements from array A that are not in the array B\nconst difference = (a, b) => a.filter(x => !b.includes(x));\nextend(Runner, {\n  attr(a, v) {\n    return this.styleAttr('attr', a, v);\n  },\n  // Add animatable styles\n  css(s, v) {\n    return this.styleAttr('css', s, v);\n  },\n  styleAttr(type, nameOrAttrs, val) {\n    if (typeof nameOrAttrs === 'string') {\n      return this.styleAttr(type, {\n        [nameOrAttrs]: val\n      });\n    }\n    let attrs = nameOrAttrs;\n    if (this._tryRetarget(type, attrs)) return this;\n    let morpher = new Morphable(this._stepper).to(attrs);\n    let keys = Object.keys(attrs);\n    this.queue(function () {\n      morpher = morpher.from(this.element()[type](keys));\n    }, function (pos) {\n      this.element()[type](morpher.at(pos).valueOf());\n      return morpher.done();\n    }, function (newToAttrs) {\n      // Check if any new keys were added\n      const newKeys = Object.keys(newToAttrs);\n      const differences = difference(newKeys, keys);\n\n      // If their are new keys, initialize them and add them to morpher\n      if (differences.length) {\n        // Get the values\n        const addedFromAttrs = this.element()[type](differences);\n\n        // Get the already initialized values\n        const oldFromAttrs = new ObjectBag(morpher.from()).valueOf();\n\n        // Merge old and new\n        Object.assign(oldFromAttrs, addedFromAttrs);\n        morpher.from(oldFromAttrs);\n      }\n\n      // Get the object from the morpher\n      const oldToAttrs = new ObjectBag(morpher.to()).valueOf();\n\n      // Merge in new attributes\n      Object.assign(oldToAttrs, newToAttrs);\n\n      // Change morpher target\n      morpher.to(oldToAttrs);\n\n      // Make sure that we save the work we did so we don't need it to do again\n      keys = newKeys;\n      attrs = newToAttrs;\n    });\n    this._rememberMorpher(type, morpher);\n    return this;\n  },\n  zoom(level, point) {\n    if (this._tryRetarget('zoom', level, point)) return this;\n    let morpher = new Morphable(this._stepper).to(new SVGNumber(level));\n    this.queue(function () {\n      morpher = morpher.from(this.element().zoom());\n    }, function (pos) {\n      this.element().zoom(morpher.at(pos), point);\n      return morpher.done();\n    }, function (newLevel, newPoint) {\n      point = newPoint;\n      morpher.to(newLevel);\n    });\n    this._rememberMorpher('zoom', morpher);\n    return this;\n  },\n  /**\n   ** absolute transformations\n   **/\n\n  //\n  // M v -----|-----(D M v = F v)------|----->  T v\n  //\n  // 1. define the final state (T) and decompose it (once)\n  //    t = [tx, ty, the, lam, sy, sx]\n  // 2. on every frame: pull the current state of all previous transforms\n  //    (M - m can change)\n  //   and then write this as m = [tx0, ty0, the0, lam0, sy0, sx0]\n  // 3. Find the interpolated matrix F(pos) = m + pos * (t - m)\n  //   - Note F(0) = M\n  //   - Note F(1) = T\n  // 4. Now you get the delta matrix as a result: D = F * inv(M)\n\n  transform(transforms, relative, affine) {\n    // If we have a declarative function, we should retarget it if possible\n    relative = transforms.relative || relative;\n    if (this._isDeclarative && !relative && this._tryRetarget('transform', transforms)) {\n      return this;\n    }\n\n    // Parse the parameters\n    const isMatrix = Matrix.isMatrixLike(transforms);\n    affine = transforms.affine != null ? transforms.affine : affine != null ? affine : !isMatrix;\n\n    // Create a morpher and set its type\n    const morpher = new Morphable(this._stepper).type(affine ? TransformBag : Matrix);\n    let origin;\n    let element;\n    let current;\n    let currentAngle;\n    let startTransform;\n    function setup() {\n      // make sure element and origin is defined\n      element = element || this.element();\n      origin = origin || getOrigin(transforms, element);\n      startTransform = new Matrix(relative ? undefined : element);\n\n      // add the runner to the element so it can merge transformations\n      element._addRunner(this);\n\n      // Deactivate all transforms that have run so far if we are absolute\n      if (!relative) {\n        element._clearTransformRunnersBefore(this);\n      }\n    }\n    function run(pos) {\n      // clear all other transforms before this in case something is saved\n      // on this runner. We are absolute. We dont need these!\n      if (!relative) this.clearTransform();\n      const {\n        x,\n        y\n      } = new Point(origin).transform(element._currentTransform(this));\n      let target = new Matrix({\n        ...transforms,\n        origin: [x, y]\n      });\n      let start = this._isDeclarative && current ? current : startTransform;\n      if (affine) {\n        target = target.decompose(x, y);\n        start = start.decompose(x, y);\n\n        // Get the current and target angle as it was set\n        const rTarget = target.rotate;\n        const rCurrent = start.rotate;\n\n        // Figure out the shortest path to rotate directly\n        const possibilities = [rTarget - 360, rTarget, rTarget + 360];\n        const distances = possibilities.map(a => Math.abs(a - rCurrent));\n        const shortest = Math.min(...distances);\n        const index = distances.indexOf(shortest);\n        target.rotate = possibilities[index];\n      }\n      if (relative) {\n        // we have to be careful here not to overwrite the rotation\n        // with the rotate method of Matrix\n        if (!isMatrix) {\n          target.rotate = transforms.rotate || 0;\n        }\n        if (this._isDeclarative && currentAngle) {\n          start.rotate = currentAngle;\n        }\n      }\n      morpher.from(start);\n      morpher.to(target);\n      const affineParameters = morpher.at(pos);\n      currentAngle = affineParameters.rotate;\n      current = new Matrix(affineParameters);\n      this.addTransform(current);\n      element._addRunner(this);\n      return morpher.done();\n    }\n    function retarget(newTransforms) {\n      // only get a new origin if it changed since the last call\n      if ((newTransforms.origin || 'center').toString() !== (transforms.origin || 'center').toString()) {\n        origin = getOrigin(newTransforms, element);\n      }\n\n      // overwrite the old transformations with the new ones\n      transforms = {\n        ...newTransforms,\n        origin\n      };\n    }\n    this.queue(setup, run, retarget, true);\n    this._isDeclarative && this._rememberMorpher('transform', morpher);\n    return this;\n  },\n  // Animatable x-axis\n  x(x) {\n    return this._queueNumber('x', x);\n  },\n  // Animatable y-axis\n  y(y) {\n    return this._queueNumber('y', y);\n  },\n  ax(x) {\n    return this._queueNumber('ax', x);\n  },\n  ay(y) {\n    return this._queueNumber('ay', y);\n  },\n  dx(x = 0) {\n    return this._queueNumberDelta('x', x);\n  },\n  dy(y = 0) {\n    return this._queueNumberDelta('y', y);\n  },\n  dmove(x, y) {\n    return this.dx(x).dy(y);\n  },\n  _queueNumberDelta(method, to) {\n    to = new SVGNumber(to);\n\n    // Try to change the target if we have this method already registered\n    if (this._tryRetarget(method, to)) return this;\n\n    // Make a morpher and queue the animation\n    const morpher = new Morphable(this._stepper).to(to);\n    let from = null;\n    this.queue(function () {\n      from = this.element()[method]();\n      morpher.from(from);\n      morpher.to(from + to);\n    }, function (pos) {\n      this.element()[method](morpher.at(pos));\n      return morpher.done();\n    }, function (newTo) {\n      morpher.to(from + new SVGNumber(newTo));\n    });\n\n    // Register the morpher so that if it is changed again, we can retarget it\n    this._rememberMorpher(method, morpher);\n    return this;\n  },\n  _queueObject(method, to) {\n    // Try to change the target if we have this method already registered\n    if (this._tryRetarget(method, to)) return this;\n\n    // Make a morpher and queue the animation\n    const morpher = new Morphable(this._stepper).to(to);\n    this.queue(function () {\n      morpher.from(this.element()[method]());\n    }, function (pos) {\n      this.element()[method](morpher.at(pos));\n      return morpher.done();\n    });\n\n    // Register the morpher so that if it is changed again, we can retarget it\n    this._rememberMorpher(method, morpher);\n    return this;\n  },\n  _queueNumber(method, value) {\n    return this._queueObject(method, new SVGNumber(value));\n  },\n  // Animatable center x-axis\n  cx(x) {\n    return this._queueNumber('cx', x);\n  },\n  // Animatable center y-axis\n  cy(y) {\n    return this._queueNumber('cy', y);\n  },\n  // Add animatable move\n  move(x, y) {\n    return this.x(x).y(y);\n  },\n  amove(x, y) {\n    return this.ax(x).ay(y);\n  },\n  // Add animatable center\n  center(x, y) {\n    return this.cx(x).cy(y);\n  },\n  // Add animatable size\n  size(width, height) {\n    // animate bbox based size for all other elements\n    let box;\n    if (!width || !height) {\n      box = this._element.bbox();\n    }\n    if (!width) {\n      width = box.width / box.height * height;\n    }\n    if (!height) {\n      height = box.height / box.width * width;\n    }\n    return this.width(width).height(height);\n  },\n  // Add animatable width\n  width(width) {\n    return this._queueNumber('width', width);\n  },\n  // Add animatable height\n  height(height) {\n    return this._queueNumber('height', height);\n  },\n  // Add animatable plot\n  plot(a, b, c, d) {\n    // Lines can be plotted with 4 arguments\n    if (arguments.length === 4) {\n      return this.plot([a, b, c, d]);\n    }\n    if (this._tryRetarget('plot', a)) return this;\n    const morpher = new Morphable(this._stepper).type(this._element.MorphArray).to(a);\n    this.queue(function () {\n      morpher.from(this._element.array());\n    }, function (pos) {\n      this._element.plot(morpher.at(pos));\n      return morpher.done();\n    });\n    this._rememberMorpher('plot', morpher);\n    return this;\n  },\n  // Add leading method\n  leading(value) {\n    return this._queueNumber('leading', value);\n  },\n  // Add animatable viewbox\n  viewbox(x, y, width, height) {\n    return this._queueObject('viewbox', new Box(x, y, width, height));\n  },\n  update(o) {\n    if (typeof o !== 'object') {\n      return this.update({\n        offset: arguments[0],\n        color: arguments[1],\n        opacity: arguments[2]\n      });\n    }\n    if (o.opacity != null) this.attr('stop-opacity', o.opacity);\n    if (o.color != null) this.attr('stop-color', o.color);\n    if (o.offset != null) this.attr('offset', o.offset);\n    return this;\n  }\n});\nextend(Runner, {\n  rx,\n  ry,\n  from,\n  to\n});\nregister(Runner, 'Runner');\n\nclass Svg extends Container {\n  constructor(node, attrs = node) {\n    super(nodeOrNew('svg', node), attrs);\n    this.namespace();\n  }\n\n  // Creates and returns defs element\n  defs() {\n    if (!this.isRoot()) return this.root().defs();\n    return adopt(this.node.querySelector('defs')) || this.put(new Defs());\n  }\n  isRoot() {\n    return !this.node.parentNode || !(this.node.parentNode instanceof globals.window.SVGElement) && this.node.parentNode.nodeName !== '#document-fragment';\n  }\n\n  // Add namespaces\n  namespace() {\n    if (!this.isRoot()) return this.root().namespace();\n    return this.attr({\n      xmlns: svg,\n      version: '1.1'\n    }).attr('xmlns:xlink', xlink, xmlns);\n  }\n  removeNamespace() {\n    return this.attr({\n      xmlns: null,\n      version: null\n    }).attr('xmlns:xlink', null, xmlns).attr('xmlns:svgjs', null, xmlns);\n  }\n\n  // Check if this is a root svg\n  // If not, call root() from this element\n  root() {\n    if (this.isRoot()) return this;\n    return super.root();\n  }\n}\nregisterMethods({\n  Container: {\n    // Create nested svg document\n    nested: wrapWithAttrCheck(function () {\n      return this.put(new Svg());\n    })\n  }\n});\nregister(Svg, 'Svg', true);\n\nclass Symbol extends Container {\n  // Initialize node\n  constructor(node, attrs = node) {\n    super(nodeOrNew('symbol', node), attrs);\n  }\n}\nregisterMethods({\n  Container: {\n    symbol: wrapWithAttrCheck(function () {\n      return this.put(new Symbol());\n    })\n  }\n});\nregister(Symbol, 'Symbol');\n\n// Create plain text node\nfunction plain(text) {\n  // clear if build mode is disabled\n  if (this._build === false) {\n    this.clear();\n  }\n\n  // create text node\n  this.node.appendChild(globals.document.createTextNode(text));\n  return this;\n}\n\n// Get length of text element\nfunction length() {\n  return this.node.getComputedTextLength();\n}\n\n// Move over x-axis\n// Text is moved by its bounding box\n// text-anchor does NOT matter\nfunction x$1(x, box = this.bbox()) {\n  if (x == null) {\n    return box.x;\n  }\n  return this.attr('x', this.attr('x') + x - box.x);\n}\n\n// Move over y-axis\nfunction y$1(y, box = this.bbox()) {\n  if (y == null) {\n    return box.y;\n  }\n  return this.attr('y', this.attr('y') + y - box.y);\n}\nfunction move$1(x, y, box = this.bbox()) {\n  return this.x(x, box).y(y, box);\n}\n\n// Move center over x-axis\nfunction cx(x, box = this.bbox()) {\n  if (x == null) {\n    return box.cx;\n  }\n  return this.attr('x', this.attr('x') + x - box.cx);\n}\n\n// Move center over y-axis\nfunction cy(y, box = this.bbox()) {\n  if (y == null) {\n    return box.cy;\n  }\n  return this.attr('y', this.attr('y') + y - box.cy);\n}\nfunction center(x, y, box = this.bbox()) {\n  return this.cx(x, box).cy(y, box);\n}\nfunction ax(x) {\n  return this.attr('x', x);\n}\nfunction ay(y) {\n  return this.attr('y', y);\n}\nfunction amove(x, y) {\n  return this.ax(x).ay(y);\n}\n\n// Enable / disable build mode\nfunction build(build) {\n  this._build = !!build;\n  return this;\n}\n\nvar textable = {\n  __proto__: null,\n  amove: amove,\n  ax: ax,\n  ay: ay,\n  build: build,\n  center: center,\n  cx: cx,\n  cy: cy,\n  length: length,\n  move: move$1,\n  plain: plain,\n  x: x$1,\n  y: y$1\n};\n\nclass Text extends Shape {\n  // Initialize node\n  constructor(node, attrs = node) {\n    super(nodeOrNew('text', node), attrs);\n    this.dom.leading = this.dom.leading ?? new SVGNumber(1.3); // store leading value for rebuilding\n    this._rebuild = true; // enable automatic updating of dy values\n    this._build = false; // disable build mode for adding multiple lines\n  }\n\n  // Set / get leading\n  leading(value) {\n    // act as getter\n    if (value == null) {\n      return this.dom.leading;\n    }\n\n    // act as setter\n    this.dom.leading = new SVGNumber(value);\n    return this.rebuild();\n  }\n\n  // Rebuild appearance type\n  rebuild(rebuild) {\n    // store new rebuild flag if given\n    if (typeof rebuild === 'boolean') {\n      this._rebuild = rebuild;\n    }\n\n    // define position of all lines\n    if (this._rebuild) {\n      const self = this;\n      let blankLineOffset = 0;\n      const leading = this.dom.leading;\n      this.each(function (i) {\n        if (isDescriptive(this.node)) return;\n        const fontSize = globals.window.getComputedStyle(this.node).getPropertyValue('font-size');\n        const dy = leading * new SVGNumber(fontSize);\n        if (this.dom.newLined) {\n          this.attr('x', self.attr('x'));\n          if (this.text() === '\\n') {\n            blankLineOffset += dy;\n          } else {\n            this.attr('dy', i ? dy + blankLineOffset : 0);\n            blankLineOffset = 0;\n          }\n        }\n      });\n      this.fire('rebuild');\n    }\n    return this;\n  }\n\n  // overwrite method from parent to set data properly\n  setData(o) {\n    this.dom = o;\n    this.dom.leading = new SVGNumber(o.leading || 1.3);\n    return this;\n  }\n  writeDataToDom() {\n    writeDataToDom(this, this.dom, {\n      leading: 1.3\n    });\n    return this;\n  }\n\n  // Set the text content\n  text(text) {\n    // act as getter\n    if (text === undefined) {\n      const children = this.node.childNodes;\n      let firstLine = 0;\n      text = '';\n      for (let i = 0, len = children.length; i < len; ++i) {\n        // skip textPaths - they are no lines\n        if (children[i].nodeName === 'textPath' || isDescriptive(children[i])) {\n          if (i === 0) firstLine = i + 1;\n          continue;\n        }\n\n        // add newline if its not the first child and newLined is set to true\n        if (i !== firstLine && children[i].nodeType !== 3 && adopt(children[i]).dom.newLined === true) {\n          text += '\\n';\n        }\n\n        // add content of this node\n        text += children[i].textContent;\n      }\n      return text;\n    }\n\n    // remove existing content\n    this.clear().build(true);\n    if (typeof text === 'function') {\n      // call block\n      text.call(this, this);\n    } else {\n      // store text and make sure text is not blank\n      text = (text + '').split('\\n');\n\n      // build new lines\n      for (let j = 0, jl = text.length; j < jl; j++) {\n        this.newLine(text[j]);\n      }\n    }\n\n    // disable build mode and rebuild lines\n    return this.build(false).rebuild();\n  }\n}\nextend(Text, textable);\nregisterMethods({\n  Container: {\n    // Create text element\n    text: wrapWithAttrCheck(function (text = '') {\n      return this.put(new Text()).text(text);\n    }),\n    // Create plain text element\n    plain: wrapWithAttrCheck(function (text = '') {\n      return this.put(new Text()).plain(text);\n    })\n  }\n});\nregister(Text, 'Text');\n\nclass Tspan extends Shape {\n  // Initialize node\n  constructor(node, attrs = node) {\n    super(nodeOrNew('tspan', node), attrs);\n    this._build = false; // disable build mode for adding multiple lines\n  }\n\n  // Shortcut dx\n  dx(dx) {\n    return this.attr('dx', dx);\n  }\n\n  // Shortcut dy\n  dy(dy) {\n    return this.attr('dy', dy);\n  }\n\n  // Create new line\n  newLine() {\n    // mark new line\n    this.dom.newLined = true;\n\n    // fetch parent\n    const text = this.parent();\n\n    // early return in case we are not in a text element\n    if (!(text instanceof Text)) {\n      return this;\n    }\n    const i = text.index(this);\n    const fontSize = globals.window.getComputedStyle(this.node).getPropertyValue('font-size');\n    const dy = text.dom.leading * new SVGNumber(fontSize);\n\n    // apply new position\n    return this.dy(i ? dy : 0).attr('x', text.x());\n  }\n\n  // Set text content\n  text(text) {\n    if (text == null) return this.node.textContent + (this.dom.newLined ? '\\n' : '');\n    if (typeof text === 'function') {\n      this.clear().build(true);\n      text.call(this, this);\n      this.build(false);\n    } else {\n      this.plain(text);\n    }\n    return this;\n  }\n}\nextend(Tspan, textable);\nregisterMethods({\n  Tspan: {\n    tspan: wrapWithAttrCheck(function (text = '') {\n      const tspan = new Tspan();\n\n      // clear if build mode is disabled\n      if (!this._build) {\n        this.clear();\n      }\n\n      // add new tspan\n      return this.put(tspan).text(text);\n    })\n  },\n  Text: {\n    newLine: function (text = '') {\n      return this.tspan(text).newLine();\n    }\n  }\n});\nregister(Tspan, 'Tspan');\n\nclass Circle extends Shape {\n  constructor(node, attrs = node) {\n    super(nodeOrNew('circle', node), attrs);\n  }\n  radius(r) {\n    return this.attr('r', r);\n  }\n\n  // Radius x value\n  rx(rx) {\n    return this.attr('r', rx);\n  }\n\n  // Alias radius x value\n  ry(ry) {\n    return this.rx(ry);\n  }\n  size(size) {\n    return this.radius(new SVGNumber(size).divide(2));\n  }\n}\nextend(Circle, {\n  x: x$3,\n  y: y$3,\n  cx: cx$1,\n  cy: cy$1,\n  width: width$2,\n  height: height$2\n});\nregisterMethods({\n  Container: {\n    // Create circle element\n    circle: wrapWithAttrCheck(function (size = 0) {\n      return this.put(new Circle()).size(size).move(0, 0);\n    })\n  }\n});\nregister(Circle, 'Circle');\n\nclass ClipPath extends Container {\n  constructor(node, attrs = node) {\n    super(nodeOrNew('clipPath', node), attrs);\n  }\n\n  // Unclip all clipped elements and remove itself\n  remove() {\n    // unclip all targets\n    this.targets().forEach(function (el) {\n      el.unclip();\n    });\n\n    // remove clipPath from parent\n    return super.remove();\n  }\n  targets() {\n    return baseFind('svg [clip-path*=' + this.id() + ']');\n  }\n}\nregisterMethods({\n  Container: {\n    // Create clipping element\n    clip: wrapWithAttrCheck(function () {\n      return this.defs().put(new ClipPath());\n    })\n  },\n  Element: {\n    // Distribute clipPath to svg element\n    clipper() {\n      return this.reference('clip-path');\n    },\n    clipWith(element) {\n      // use given clip or create a new one\n      const clipper = element instanceof ClipPath ? element : this.parent().clip().add(element);\n\n      // apply mask\n      return this.attr('clip-path', 'url(#' + clipper.id() + ')');\n    },\n    // Unclip element\n    unclip() {\n      return this.attr('clip-path', null);\n    }\n  }\n});\nregister(ClipPath, 'ClipPath');\n\nclass ForeignObject extends Element {\n  constructor(node, attrs = node) {\n    super(nodeOrNew('foreignObject', node), attrs);\n  }\n}\nregisterMethods({\n  Container: {\n    foreignObject: wrapWithAttrCheck(function (width, height) {\n      return this.put(new ForeignObject()).size(width, height);\n    })\n  }\n});\nregister(ForeignObject, 'ForeignObject');\n\nfunction dmove(dx, dy) {\n  this.children().forEach(child => {\n    let bbox;\n\n    // We have to wrap this for elements that dont have a bbox\n    // e.g. title and other descriptive elements\n    try {\n      // Get the childs bbox\n      // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1905039\n      // Because bbox for nested svgs returns the contents bbox in the coordinate space of the svg itself (weird!), we cant use bbox for svgs\n      // Therefore we have to use getBoundingClientRect. But THAT is broken (as explained in the bug).\n      // Funnily enough the broken behavior would work for us but that breaks it in chrome\n      // So we have to replicate the broken behavior of FF by just reading the attributes of the svg itself\n      bbox = child.node instanceof getWindow().SVGSVGElement ? new Box(child.attr(['x', 'y', 'width', 'height'])) : child.bbox();\n    } catch (e) {\n      return;\n    }\n\n    // Get childs matrix\n    const m = new Matrix(child);\n    // Translate childs matrix by amount and\n    // transform it back into parents space\n    const matrix = m.translate(dx, dy).transform(m.inverse());\n    // Calculate new x and y from old box\n    const p = new Point(bbox.x, bbox.y).transform(matrix);\n    // Move element\n    child.move(p.x, p.y);\n  });\n  return this;\n}\nfunction dx(dx) {\n  return this.dmove(dx, 0);\n}\nfunction dy(dy) {\n  return this.dmove(0, dy);\n}\nfunction height(height, box = this.bbox()) {\n  if (height == null) return box.height;\n  return this.size(box.width, height, box);\n}\nfunction move(x = 0, y = 0, box = this.bbox()) {\n  const dx = x - box.x;\n  const dy = y - box.y;\n  return this.dmove(dx, dy);\n}\nfunction size(width, height, box = this.bbox()) {\n  const p = proportionalSize(this, width, height, box);\n  const scaleX = p.width / box.width;\n  const scaleY = p.height / box.height;\n  this.children().forEach(child => {\n    const o = new Point(box).transform(new Matrix(child).inverse());\n    child.scale(scaleX, scaleY, o.x, o.y);\n  });\n  return this;\n}\nfunction width(width, box = this.bbox()) {\n  if (width == null) return box.width;\n  return this.size(width, box.height, box);\n}\nfunction x(x, box = this.bbox()) {\n  if (x == null) return box.x;\n  return this.move(x, box.y, box);\n}\nfunction y(y, box = this.bbox()) {\n  if (y == null) return box.y;\n  return this.move(box.x, y, box);\n}\n\nvar containerGeometry = {\n  __proto__: null,\n  dmove: dmove,\n  dx: dx,\n  dy: dy,\n  height: height,\n  move: move,\n  size: size,\n  width: width,\n  x: x,\n  y: y\n};\n\nclass G extends Container {\n  constructor(node, attrs = node) {\n    super(nodeOrNew('g', node), attrs);\n  }\n}\nextend(G, containerGeometry);\nregisterMethods({\n  Container: {\n    // Create a group element\n    group: wrapWithAttrCheck(function () {\n      return this.put(new G());\n    })\n  }\n});\nregister(G, 'G');\n\nclass A extends Container {\n  constructor(node, attrs = node) {\n    super(nodeOrNew('a', node), attrs);\n  }\n\n  // Link target attribute\n  target(target) {\n    return this.attr('target', target);\n  }\n\n  // Link url\n  to(url) {\n    return this.attr('href', url, xlink);\n  }\n}\nextend(A, containerGeometry);\nregisterMethods({\n  Container: {\n    // Create a hyperlink element\n    link: wrapWithAttrCheck(function (url) {\n      return this.put(new A()).to(url);\n    })\n  },\n  Element: {\n    unlink() {\n      const link = this.linker();\n      if (!link) return this;\n      const parent = link.parent();\n      if (!parent) {\n        return this.remove();\n      }\n      const index = parent.index(link);\n      parent.add(this, index);\n      link.remove();\n      return this;\n    },\n    linkTo(url) {\n      // reuse old link if possible\n      let link = this.linker();\n      if (!link) {\n        link = new A();\n        this.wrap(link);\n      }\n      if (typeof url === 'function') {\n        url.call(link, link);\n      } else {\n        link.to(url);\n      }\n      return this;\n    },\n    linker() {\n      const link = this.parent();\n      if (link && link.node.nodeName.toLowerCase() === 'a') {\n        return link;\n      }\n      return null;\n    }\n  }\n});\nregister(A, 'A');\n\nclass Mask extends Container {\n  // Initialize node\n  constructor(node, attrs = node) {\n    super(nodeOrNew('mask', node), attrs);\n  }\n\n  // Unmask all masked elements and remove itself\n  remove() {\n    // unmask all targets\n    this.targets().forEach(function (el) {\n      el.unmask();\n    });\n\n    // remove mask from parent\n    return super.remove();\n  }\n  targets() {\n    return baseFind('svg [mask*=' + this.id() + ']');\n  }\n}\nregisterMethods({\n  Container: {\n    mask: wrapWithAttrCheck(function () {\n      return this.defs().put(new Mask());\n    })\n  },\n  Element: {\n    // Distribute mask to svg element\n    masker() {\n      return this.reference('mask');\n    },\n    maskWith(element) {\n      // use given mask or create a new one\n      const masker = element instanceof Mask ? element : this.parent().mask().add(element);\n\n      // apply mask\n      return this.attr('mask', 'url(#' + masker.id() + ')');\n    },\n    // Unmask element\n    unmask() {\n      return this.attr('mask', null);\n    }\n  }\n});\nregister(Mask, 'Mask');\n\nclass Stop extends Element {\n  constructor(node, attrs = node) {\n    super(nodeOrNew('stop', node), attrs);\n  }\n\n  // add color stops\n  update(o) {\n    if (typeof o === 'number' || o instanceof SVGNumber) {\n      o = {\n        offset: arguments[0],\n        color: arguments[1],\n        opacity: arguments[2]\n      };\n    }\n\n    // set attributes\n    if (o.opacity != null) this.attr('stop-opacity', o.opacity);\n    if (o.color != null) this.attr('stop-color', o.color);\n    if (o.offset != null) this.attr('offset', new SVGNumber(o.offset));\n    return this;\n  }\n}\nregisterMethods({\n  Gradient: {\n    // Add a color stop\n    stop: function (offset, color, opacity) {\n      return this.put(new Stop()).update(offset, color, opacity);\n    }\n  }\n});\nregister(Stop, 'Stop');\n\nfunction cssRule(selector, rule) {\n  if (!selector) return '';\n  if (!rule) return selector;\n  let ret = selector + '{';\n  for (const i in rule) {\n    ret += unCamelCase(i) + ':' + rule[i] + ';';\n  }\n  ret += '}';\n  return ret;\n}\nclass Style extends Element {\n  constructor(node, attrs = node) {\n    super(nodeOrNew('style', node), attrs);\n  }\n  addText(w = '') {\n    this.node.textContent += w;\n    return this;\n  }\n  font(name, src, params = {}) {\n    return this.rule('@font-face', {\n      fontFamily: name,\n      src: src,\n      ...params\n    });\n  }\n  rule(selector, obj) {\n    return this.addText(cssRule(selector, obj));\n  }\n}\nregisterMethods('Dom', {\n  style(selector, obj) {\n    return this.put(new Style()).rule(selector, obj);\n  },\n  fontface(name, src, params) {\n    return this.put(new Style()).font(name, src, params);\n  }\n});\nregister(Style, 'Style');\n\nclass TextPath extends Text {\n  // Initialize node\n  constructor(node, attrs = node) {\n    super(nodeOrNew('textPath', node), attrs);\n  }\n\n  // return the array of the path track element\n  array() {\n    const track = this.track();\n    return track ? track.array() : null;\n  }\n\n  // Plot path if any\n  plot(d) {\n    const track = this.track();\n    let pathArray = null;\n    if (track) {\n      pathArray = track.plot(d);\n    }\n    return d == null ? pathArray : this;\n  }\n\n  // Get the path element\n  track() {\n    return this.reference('href');\n  }\n}\nregisterMethods({\n  Container: {\n    textPath: wrapWithAttrCheck(function (text, path) {\n      // Convert text to instance if needed\n      if (!(text instanceof Text)) {\n        text = this.text(text);\n      }\n      return text.path(path);\n    })\n  },\n  Text: {\n    // Create path for text to run on\n    path: wrapWithAttrCheck(function (track, importNodes = true) {\n      const textPath = new TextPath();\n\n      // if track is a path, reuse it\n      if (!(track instanceof Path)) {\n        // create path element\n        track = this.defs().path(track);\n      }\n\n      // link textPath to path and add content\n      textPath.attr('href', '#' + track, xlink);\n\n      // Transplant all nodes from text to textPath\n      let node;\n      if (importNodes) {\n        while (node = this.node.firstChild) {\n          textPath.node.appendChild(node);\n        }\n      }\n\n      // add textPath element as child node and return textPath\n      return this.put(textPath);\n    }),\n    // Get the textPath children\n    textPath() {\n      return this.findOne('textPath');\n    }\n  },\n  Path: {\n    // creates a textPath from this path\n    text: wrapWithAttrCheck(function (text) {\n      // Convert text to instance if needed\n      if (!(text instanceof Text)) {\n        text = new Text().addTo(this.parent()).text(text);\n      }\n\n      // Create textPath from text and path and return\n      return text.path(this);\n    }),\n    targets() {\n      return baseFind('svg textPath').filter(node => {\n        return (node.attr('href') || '').includes(this.id());\n      });\n\n      // Does not work in IE11. Use when IE support is dropped\n      // return baseFind('svg textPath[*|href*=' + this.id() + ']')\n    }\n  }\n});\nTextPath.prototype.MorphArray = PathArray;\nregister(TextPath, 'TextPath');\n\nclass Use extends Shape {\n  constructor(node, attrs = node) {\n    super(nodeOrNew('use', node), attrs);\n  }\n\n  // Use element as a reference\n  use(element, file) {\n    // Set lined element\n    return this.attr('href', (file || '') + '#' + element, xlink);\n  }\n}\nregisterMethods({\n  Container: {\n    // Create a use element\n    use: wrapWithAttrCheck(function (element, file) {\n      return this.put(new Use()).use(element, file);\n    })\n  }\n});\nregister(Use, 'Use');\n\n/* Optional Modules */\nconst SVG = makeInstance;\nextend([Svg, Symbol, Image, Pattern, Marker], getMethodsFor('viewbox'));\nextend([Line, Polyline, Polygon, Path], getMethodsFor('marker'));\nextend(Text, getMethodsFor('Text'));\nextend(Path, getMethodsFor('Path'));\nextend(Defs, getMethodsFor('Defs'));\nextend([Text, Tspan], getMethodsFor('Tspan'));\nextend([Rect, Ellipse, Gradient, Runner], getMethodsFor('radius'));\nextend(EventTarget, getMethodsFor('EventTarget'));\nextend(Dom, getMethodsFor('Dom'));\nextend(Element, getMethodsFor('Element'));\nextend(Shape, getMethodsFor('Shape'));\nextend([Container, Fragment], getMethodsFor('Container'));\nextend(Gradient, getMethodsFor('Gradient'));\nextend(Runner, getMethodsFor('Runner'));\nList.extend(getMethodNames());\nregisterMorphableType([SVGNumber, Color, Box, Matrix, SVGArray, PointArray, PathArray, Point]);\nmakeMorphable();\n\nexports.A = A;\nexports.Animator = Animator;\nexports.Array = SVGArray;\nexports.Box = Box;\nexports.Circle = Circle;\nexports.ClipPath = ClipPath;\nexports.Color = Color;\nexports.Container = Container;\nexports.Controller = Controller;\nexports.Defs = Defs;\nexports.Dom = Dom;\nexports.Ease = Ease;\nexports.Element = Element;\nexports.Ellipse = Ellipse;\nexports.EventTarget = EventTarget;\nexports.ForeignObject = ForeignObject;\nexports.Fragment = Fragment;\nexports.G = G;\nexports.Gradient = Gradient;\nexports.Image = Image;\nexports.Line = Line;\nexports.List = List;\nexports.Marker = Marker;\nexports.Mask = Mask;\nexports.Matrix = Matrix;\nexports.Morphable = Morphable;\nexports.NonMorphable = NonMorphable;\nexports.Number = SVGNumber;\nexports.ObjectBag = ObjectBag;\nexports.PID = PID;\nexports.Path = Path;\nexports.PathArray = PathArray;\nexports.Pattern = Pattern;\nexports.Point = Point;\nexports.PointArray = PointArray;\nexports.Polygon = Polygon;\nexports.Polyline = Polyline;\nexports.Queue = Queue;\nexports.Rect = Rect;\nexports.Runner = Runner;\nexports.SVG = SVG;\nexports.Shape = Shape;\nexports.Spring = Spring;\nexports.Stop = Stop;\nexports.Style = Style;\nexports.Svg = Svg;\nexports.Symbol = Symbol;\nexports.Text = Text;\nexports.TextPath = TextPath;\nexports.Timeline = Timeline;\nexports.TransformBag = TransformBag;\nexports.Tspan = Tspan;\nexports.Use = Use;\nexports.adopt = adopt;\nexports.assignNewId = assignNewId;\nexports.clearEvents = clearEvents;\nexports.create = create;\nexports.defaults = defaults;\nexports.dispatch = dispatch;\nexports.easing = easing;\nexports.eid = eid;\nexports.extend = extend;\nexports.find = baseFind;\nexports.getClass = getClass;\nexports.getEventTarget = getEventTarget;\nexports.getEvents = getEvents;\nexports.getWindow = getWindow;\nexports.makeInstance = makeInstance;\nexports.makeMorphable = makeMorphable;\nexports.mockAdopt = mockAdopt;\nexports.namespaces = namespaces;\nexports.nodeOrNew = nodeOrNew;\nexports.off = off;\nexports.on = on;\nexports.parser = parser;\nexports.regex = regex;\nexports.register = register;\nexports.registerMorphableType = registerMorphableType;\nexports.registerWindow = registerWindow;\nexports.restoreWindow = restoreWindow;\nexports.root = root;\nexports.saveWindow = saveWindow;\nexports.utils = utils;\nexports.windowEvents = windowEvents;\nexports.withWindow = withWindow;\nexports.wrapWithAttrCheck = wrapWithAttrCheck;\n//# sourceMappingURL=svg.node.cjs.map\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getPaper = getPaper;\nconst svg_js_1 = require(\"@svgdotjs/svg.js\");\nfunction getPaper() {\n    // eslint-disable-next-line new-cap\n    return (0, svg_js_1.SVG)();\n}\n//# sourceMappingURL=getPaper.browser.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.appendResiduesPosition = appendResiduesPosition;\nconst getPaper_1 = require(\"./getPaper\");\nfunction appendResiduesPosition(data, options = {}) {\n    const residues = data.residues;\n    const { leftRightBorders = 20, spaceBetweenResidues = 20, width = 600, } = options;\n    let xPos = leftRightBorders;\n    let xOld = xPos;\n    let line = 0;\n    // we create a temporary paper in order to get the width of the text blocs\n    const paper = (0, getPaper_1.getPaper)();\n    for (let i = 0; i < residues.all.length; i++) {\n        let residue = residues.all[i];\n        let textWidth = getTextWidth(paper, residue.label, options);\n        xPos += textWidth;\n        if (xPos > width - leftRightBorders) {\n            xOld = leftRightBorders;\n            xPos = leftRightBorders + textWidth;\n            line++;\n        }\n        setPaper(residue, xOld, xPos, line);\n        xPos += spaceBetweenResidues;\n        xOld = xPos;\n    }\n    residues.nbLines = line;\n}\nfunction setPaper(residue, xFrom, xTo, line) {\n    residue.paper = {\n        xFrom,\n        xTo,\n        line,\n        usedSlots: [],\n        topPosition: 0,\n        bottomPosition: 0,\n    };\n}\nfunction getTextWidth(paper, label, options = {}) {\n    const { labelFontFamily = 'Verdana', labelSize = 12 } = options;\n    let text = paper.text(label);\n    text.font({\n        family: labelFontFamily,\n        size: labelSize,\n        weight: 'bold',\n        fill: '#888',\n    });\n    let textWidth = text.length() || text.bbox().width;\n    text.remove();\n    return textWidth;\n}\n//# sourceMappingURL=appendResiduesPosition.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.appendResults = appendResults;\nfunction appendResults(data, analysisResult, options = {}) {\n    const numberResidues = data.residues.residues.length;\n    const { merge = {}, filter = {} } = options;\n    let results = structuredClone(analysisResult);\n    results = results.filter((result) => !result.type.match(/^-B\\d$/));\n    // we calculate all the lines based on the results\n    for (let result of results) {\n        let parts = result.type.split(/:|(?=[a-z])/); // we may have ':' but not mandatory\n        if (parts.length === 2) {\n            result.internal = true;\n            if (parts[1].match(/^[a-d][1-9]/)) {\n                [parts[0], parts[1]] = [parts[1], parts[0]];\n            }\n            result.to = getNumber(parts[0]) - 1;\n            result.from = numberResidues - getNumber(parts[1]);\n        }\n        else {\n            if (parts[0].match(/^[a-d][1-9]/)) {\n                result.fromBegin = true;\n                result.position = getNumber(parts[0]) - 1;\n            }\n            if (parts[0].match(/^[w-z][1-9]/)) {\n                result.fromEnd = true;\n                result.position = numberResidues - 1 - getNumber(parts[0]);\n            }\n        }\n        if (result.fromEnd)\n            result.color = 'red';\n        if (result.fromBegin)\n            result.color = 'blue';\n        if (result.internal) {\n            switch (result.type.slice(0, 1)) {\n                case 'a':\n                    result.color = 'green';\n                    break;\n                case 'b':\n                    result.color = 'orange';\n                    break;\n                case 'c':\n                    result.color = 'cyan';\n                    break;\n                default:\n                    result.color = 'green';\n            }\n        }\n    }\n    if (merge.charge) {\n        const unique = {};\n        for (let result of results) {\n            if (!unique[result.type]) {\n                unique[result.type] = [];\n            }\n            unique[result.type].push(result);\n        }\n        results = [];\n        for (let key in unique) {\n            let current = unique[key][0];\n            current.similarity = unique[key].reduce((previous, item) => previous + item.similarity, 0);\n            current.similarity = current.similarity / unique[key].length;\n            results.push(current);\n            current.charge = '';\n        }\n    }\n    for (let result of results) {\n        if (result.similarity > 0.95) {\n            result.textColor = 'black';\n        }\n        else if (result.similarity > 0.9) {\n            result.textColor = '#333';\n        }\n        else if (result.similariy > 0.8) {\n            result.textColor = '#666';\n        }\n        else {\n            result.textColor = '#999';\n        }\n    }\n    results = filterResults(results, filter);\n    // sort by residue length\n    results.sort((a, b) => a.length - b.length);\n    data.results = results;\n}\nfunction getNumber(text) {\n    return Number(text.replace(/^.(\\d+).*$/, '$1'));\n}\nfunction filterResults(results, filter) {\n    if (!filter)\n        return;\n    let { minRelativeQuantity = 0, minSimilarity = 0, minQuantity = 0, showInternals = true, } = filter;\n    if (minRelativeQuantity) {\n        minQuantity =\n            Math.max(...results.map((entry) => entry.quantity)) * minRelativeQuantity;\n    }\n    if (minSimilarity) {\n        results = results.filter((result) => !result.similarity || result.similarity >= minSimilarity);\n    }\n    if (minQuantity) {\n        results = results.filter((result) => !result.quantity || result.quantity >= minQuantity);\n    }\n    if (!showInternals) {\n        results = results.filter((result) => !result.internal);\n    }\n    return results;\n}\n//# sourceMappingURL=appendResults.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.appendRows = appendRows;\nfunction appendRows(data) {\n    let allResidues = data.residues.all.toSorted((a, b) => a.line - b.line);\n    data.rows = [];\n    for (let residue of allResidues) {\n        let line = residue.paper.line;\n        if (!data.rows[line]) {\n            data.rows[line] = {\n                residues: [],\n            };\n        }\n        data.rows[line].residues.push(residue);\n    }\n    for (let row of data.rows) {\n        row.info = {};\n    }\n}\n//# sourceMappingURL=appendRows.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.appendRowsInformation = appendRowsInformation;\n/**\n * For each row we calculate internals, label over and label under\n * @param {*} data\n */\nfunction appendRowsInformation(data) {\n    for (let row of data.rows) {\n        let filtered = row.residues.filter((entry) => entry.fromBegin !== undefined);\n        if (filtered.length > 0) {\n            row.info.firstResidue = filtered[0].fromBegin;\n            row.info.lastResidue = filtered.at(-1).fromBegin;\n        }\n        row.internals = [];\n    }\n    for (let result of data.results) {\n        if (result.internal) {\n            let fromResidue = data.residues.residues[result.from];\n            let from = fromResidue.fromBegin;\n            let toResidue = data.residues.residues[result.to];\n            let to = toResidue.fromBegin;\n            for (let row of data.rows) {\n                if (from <= row.info.lastResidue && to >= row.info.firstResidue) {\n                    result = structuredClone(result);\n                    result.fromResidue = fromResidue;\n                    if (from < row.info.firstResidue) {\n                        result.firstIndex = true;\n                    }\n                    else {\n                        for (const [index, residue] of row.residues.entries()) {\n                            if (residue.fromBegin === from) {\n                                result.firstIndex = index;\n                            }\n                        }\n                    }\n                    result.toResidue = toResidue;\n                    if (to > row.info.lastResidue) {\n                        result.lastIndex = true;\n                    }\n                    else {\n                        for (const [index, residue] of row.residues.entries()) {\n                            if (residue.fromBegin === to) {\n                                result.lastIndex = index;\n                            }\n                        }\n                    }\n                    row.internals.push(result);\n                }\n            }\n        }\n        else if (result.position !== undefined &&\n            data.residues.residues[result.position]) {\n            let residue = data.residues.residues[result.position];\n            if (result.fromEnd) {\n                residue.info.nbOver++;\n                residue.results.end.push(result);\n            }\n            if (result.fromBegin) {\n                residue.info.nbUnder++;\n                residue.results.begin.push(result);\n            }\n        }\n    }\n    for (let row of data.rows) {\n        let maxNbOver = 0;\n        let maxNbUnder = 0;\n        for (let residue of row.residues) {\n            if (residue.info.nbOver > maxNbOver)\n                maxNbOver = residue.info.nbOver;\n            if (residue.info.nbUnder > maxNbUnder)\n                maxNbUnder = residue.info.nbUnder;\n        }\n        row.info.nbOver = maxNbOver;\n        row.info.nbUnder = maxNbUnder;\n    }\n}\n//# sourceMappingURL=appendRowsInformation.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.addScript = addScript;\nfunction addScript(paper) {\n    let scriptCode = ` // <![CDATA[\n        function mouseOver(evt) {\n           \n            let targetRange=evt.target.id.replace(/^line/,'');\n            let from=targetRange.replace(/-.*/,'')*1;\n            let to=targetRange.replace(/.*-/,'')*1;\n            let children=evt.target.parentNode.children;\n            for (let child of children) {\n                if (child.id === evt.target.id) {\n                    child.setAttribute('class','highlight');\n                }\n                if (child.nodeName === 'text' && child.id.startsWith(\"residue\")) {\n                    let residueNumber=child.id.replace(/residue-/,'')*1;\n                    if (residueNumber>=from && residueNumber<=to) {\n                        child.setAttribute('class','highlightText');\n                    }\n                }\n            }\n        }\n        function mouseOut(evt) {\n            let children=evt.target.parentNode.children;\n            for (let child of children) {\n                if (child.id === evt.target.id) {\n                    child.setAttribute('class','');\n                }\n                if (child.nodeName === 'text' && child.id.startsWith(\"residue\")) {\n                    child.setAttribute('class','');\n                }\n            }\n        }\n     // ]]>\n    `;\n    let script = paper.element('script');\n    script.attr({\n        type: 'application/ecmascript',\n    });\n    script.words(scriptCode);\n}\n//# sourceMappingURL=addScript.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.drawLabel = drawLabel;\nfunction drawLabel(paper, result, x, y, options) {\n    let label = result.type;\n    let similarity = String(Math.round(result.similarity * 100));\n    let charge = result.charge > 0 ? `+${result.charge}` : result.charge;\n    let text = paper.plain(label);\n    text.font({\n        fill: result.textColor,\n        family: options.labelFontFamily,\n        weight: 'bold',\n        size: options.labelSize,\n        anchor: 'end',\n    });\n    text.attr({\n        x,\n        y,\n    });\n    let textWidth = 0;\n    text = paper.plain(charge);\n    text.font({\n        fill: result.textColor,\n        family: options.labelFontFamily,\n        size: options.labelSize / 2,\n    });\n    text.attr({ x: x + textWidth, y: y - options.labelSize / 2 });\n    text = paper.plain(similarity);\n    text.font({\n        fill: result.textColor,\n        family: options.labelFontFamily,\n        size: options.labelSize / 2,\n    });\n    text.attr({ x: x + textWidth, y });\n}\n//# sourceMappingURL=drawLabel.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.drawInternals = drawInternals;\nconst drawLabel_1 = require(\"./drawLabel\");\nfunction drawInternals(paper, row, options) {\n    let fromX = 0;\n    let toX = 0;\n    for (const internal of row.internals) {\n        options.verticalPosition += options.spaceBetweenInternalLines;\n        if (internal.firstIndex === true) {\n            fromX = 0;\n        }\n        else {\n            fromX =\n                internal.fromResidue.paper.xFrom - options.spaceBetweenResidues / 2;\n        }\n        if (internal.lastIndex === true) {\n            toX = options.width - 1;\n        }\n        else {\n            toX = internal.toResidue.paper.xTo + options.spaceBetweenResidues / 2;\n        }\n        let y = options.verticalPosition;\n        let drawLine = paper.line(fromX, y, toX, y);\n        drawLine.attr({\n            onmouseover: 'mouseOver(evt)',\n            onmouseout: 'mouseOut(evt)',\n            id: `line${internal.fromResidue.fromBegin}-${internal.toResidue.fromBegin}`,\n        });\n        drawLine.stroke({\n            color: internal.color,\n            width: options.strokeWidth,\n        });\n        let center = (fromX + toX + (internal.type.length * options.labelSize * 2) / 3) / 2;\n        (0, drawLabel_1.drawLabel)(paper, internal, center, y - 2, options);\n    }\n    options.verticalPosition += options.spaceBetweenInternalLines * 2;\n}\n//# sourceMappingURL=drawInternals.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.drawReplacements = drawReplacements;\nfunction drawReplacements(paper, data, options) {\n    let replacements = data.residues.replacements;\n    replacements = Object.keys(replacements).map((key) => {\n        return { key, ...replacements[key] };\n    });\n    for (let replacement of replacements) {\n        options.verticalPosition += options.spaceBetweenInternalLines;\n        let text = paper.plain(`${replacement.label} = ${replacement.key}`);\n        text.font({\n            fill: 'darkviolet',\n            family: options.labelFontFamily,\n            weight: 'bold',\n            size: 10,\n        });\n        text.attr({\n            x: options.leftRightBorders,\n            y: options.verticalPosition,\n        });\n    }\n    options.verticalPosition += options.spaceBetweenInternalLines;\n}\n//# sourceMappingURL=drawReplacements.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.drawTerminals = drawTerminals;\nconst drawLabel_1 = require(\"./drawLabel\");\nfunction drawTerminals(paper, row, options) {\n    for (let residue of row.residues) {\n        if (!residue.results)\n            continue;\n        for (let result of residue.results.begin) {\n            let line = paper.line(residue.paper.xTo + options.spaceBetweenResidues / 2, residue.paper.y, residue.paper.xTo + options.spaceBetweenResidues / 2, residue.paper.y - 8);\n            line.stroke({\n                color: result.color,\n                width: options.strokeWidth,\n                linecap: 'round',\n            });\n            line = paper.line(residue.paper.xTo + options.spaceBetweenResidues / 2, residue.paper.y, residue.paper.xTo + options.spaceBetweenResidues / 2 - 5, residue.paper.y + 5);\n            line.stroke({\n                color: result.color,\n                width: options.strokeWidth,\n                linecap: 'round',\n            });\n            (0, drawLabel_1.drawLabel)(paper, result, residue.paper.xTo + options.spaceBetweenResidues / 2, residue.paper.y +\n                options.labelSize +\n                6 +\n                residue.paper.bottomPosition * options.labelSize, options);\n            residue.paper.bottomPosition++;\n        }\n        for (let result of residue.results.end) {\n            let line = paper.line(residue.paper.xTo +\n                options.spaceBetweenResidues / 2 +\n                options.strokeWidth, residue.paper.y, residue.paper.xTo +\n                options.spaceBetweenResidues / 2 +\n                options.strokeWidth, residue.paper.y - 8);\n            line.stroke({\n                color: result.color,\n                width: options.strokeWidth,\n                linecap: 'round',\n            });\n            line = paper.line(residue.paper.xTo +\n                options.spaceBetweenResidues / 2 +\n                options.strokeWidth, residue.paper.y - 8, residue.paper.xTo +\n                options.spaceBetweenResidues / 2 +\n                5 +\n                options.strokeWidth, residue.paper.y - 13);\n            line.stroke({\n                color: result.color,\n                width: options.strokeWidth,\n                linecap: 'round',\n            });\n            (0, drawLabel_1.drawLabel)(paper, result, residue.paper.xTo + options.spaceBetweenResidues, residue.paper.y - 17 - residue.paper.topPosition * options.labelSize, options);\n            residue.paper.topPosition++;\n        }\n    }\n}\n//# sourceMappingURL=drawTerminals.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.drawSequence = drawSequence;\nconst drawTerminals_1 = require(\"./drawTerminals\");\nfunction drawSequence(paper, row, options) {\n    // need to plan some space for the OVER\n    options.verticalPosition += row.info.nbOver * (options.labelSize + 1);\n    for (const residue of row.residues) {\n        residue.paper.y = options.verticalPosition;\n        let text = paper.plain(residue.label);\n        let textColor = residue.replaced\n            ? 'darkviolet'\n            : residue.kind === 'residue'\n                ? '#555'\n                : '#CCC';\n        text.font({\n            family: options.labelFontFamily,\n            size: 12,\n            weight: 'bold',\n            fill: textColor,\n        });\n        text.attr({\n            x: residue.paper.xFrom,\n            y: residue.paper.y,\n        });\n        text.attr({ id: `residue-${residue.fromBegin}` });\n    }\n    (0, drawTerminals_1.drawTerminals)(paper, row, options);\n    // need to plan some space for the UNDER\n    options.verticalPosition += row.info.nbUnder * (options.labelSize + 1);\n    options.verticalPosition += options.spaceBetweenInternalLines * 2;\n}\n//# sourceMappingURL=drawSequence.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.sequenceSVG = sequenceSVG;\nconst appendInternals_1 = require(\"./appendInternals\");\nconst appendResidues_1 = require(\"./appendResidues\");\nconst appendResiduesPosition_1 = require(\"./appendResiduesPosition\");\nconst appendResults_1 = require(\"./appendResults\");\nconst appendRows_1 = require(\"./appendRows\");\nconst appendRowsInformation_1 = require(\"./appendRowsInformation\");\nconst addCSS_1 = require(\"./draw/addCSS\");\nconst addScript_1 = require(\"./draw/addScript\");\nconst drawInternals_1 = require(\"./draw/drawInternals\");\nconst drawReplacements_1 = require(\"./draw/drawReplacements\");\nconst drawSequence_1 = require(\"./draw/drawSequence\");\nconst getPaper_1 = require(\"./getPaper\");\n/**\n *\n * @param {string} sequence\n * @param {array} analysisResults\n * @param {object} [options={}]\n * @param {number} [options.leftRightBorders=50]\n * @param {number} [options.width=600]\n * @param {number} [options.spaceBetweenResidues=30]\n * @param {number} [options.spaceBetweenInternalLines=12]\n * @param {number} [options.strokeWidth=2]\n * @param {string} [options.labelFontFamily='Verdana']\n * @param {number} [options.labelSize=8]\n * @param {number} [options.parsing] Sequence parsing options\n * @param {object} [options.merge={}]\n * @param {boolean} [options.merge.charge] Merge results if only differs by charge\n * @param {object} [options.filter={}] define some filters\n * @param {number} [options.filter.minSimilarity=0]  minimal similarity\n * @param {number} [options.filter.minQuantity=0]  minimal quantity\n * @param {number} [options.filter.minRelativeQuantity=0]  minimal relative quantity. This value should be between 0 and 1 and supersede minQuantity.\n * @param {boolean} [options.filter.showInternals=true] show the internal fragments\n *\n */\nfunction sequenceSVG(sequence, analysisResults, options = {}) {\n    const { width = 600, leftRightBorders = 50, spaceBetweenResidues = 30, spaceBetweenInternalLines = 12, strokeWidth = 2, labelFontFamily = 'Verdana', labelSize = 8, parsing, merge, filter, } = options;\n    const drawOptions = {\n        spaceBetweenResidues,\n        leftRightBorders,\n        spaceBetweenInternalLines,\n        strokeWidth,\n        labelSize,\n        labelFontFamily,\n        verticalPosition: spaceBetweenInternalLines,\n        width,\n    };\n    let data = {};\n    (0, appendResidues_1.appendResidues)(data, sequence, parsing);\n    (0, appendResults_1.appendResults)(data, analysisResults, {\n        merge,\n        filter,\n    });\n    (0, appendResiduesPosition_1.appendResiduesPosition)(data, {\n        leftRightBorders,\n        spaceBetweenResidues,\n        labelFontFamily,\n        labelSize,\n        width,\n    });\n    (0, appendRows_1.appendRows)(data);\n    (0, appendInternals_1.appendInternals)(data);\n    (0, appendRowsInformation_1.appendRowsInformation)(data);\n    // We start to create the SVG and create the paper\n    const paper = (0, getPaper_1.getPaper)();\n    (0, addCSS_1.addCSS)(paper);\n    (0, addScript_1.addScript)(paper);\n    for (let row of data.rows) {\n        (0, drawInternals_1.drawInternals)(paper, row, drawOptions);\n        (0, drawSequence_1.drawSequence)(paper, row, drawOptions);\n    }\n    (0, drawReplacements_1.drawReplacements)(paper, data, drawOptions);\n    paper.size(width, drawOptions.verticalPosition);\n    let svg = paper.svg();\n    paper.clear();\n    return svg;\n}\n//# sourceMappingURL=sequenceSVG.js.map","var IDX=256, HEX=[], BUFFER;\nwhile (IDX--) HEX[IDX] = (IDX + 256).toString(16).substring(1);\n\nfunction v4() {\n\tvar i=0, num, out='';\n\n\tif (!BUFFER || ((IDX + 16) > 256)) {\n\t\tBUFFER = Array(i=256);\n\t\twhile (i--) BUFFER[i] = 256 * Math.random() | 0;\n\t\ti = IDX = 0;\n\t}\n\n\tfor (; i < 16; i++) {\n\t\tnum = BUFFER[IDX + i];\n\t\tif (i==6) out += HEX[num & 15 | 64];\n\t\telse if (i==8) out += HEX[num & 63 | 128];\n\t\telse out += HEX[num];\n\n\t\tif (i & 1 && i > 1 && i < 11) out += '-';\n\t}\n\n\tIDX++;\n\treturn out;\n}\n\nexports.v4 = v4;","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getPeakWidthFct = getPeakWidthFct;\n/**\n *\n * @param {object} [options ={}]\n * @param {object}        [options.mass={}]\n * @param {number}        [options.mass.precision=0] -  Precision (accuracy) of the monoisotopic mass in ppm\n * @param {string|Function} [options.mass.peakWidthFct=()=>0.01]\n * @param {import('cheminfo-types').Logger} [options.logger]\n * @returns\n */\nfunction getPeakWidthFct(options = {}) {\n    const { logger, mass: massOptions = {} } = options;\n    const { precision = 0, peakWidthFct } = massOptions;\n    if (typeof peakWidthFct === 'function') {\n        return peakWidthFct;\n    }\n    if (!peakWidthFct) {\n        return () => 0.01;\n    }\n    try {\n        // eslint-disable-next-line no-new-func\n        return new Function('mass', `return ${peakWidthFct} + ${precision} * mass / 1e6`);\n    }\n    catch (error) {\n        logger?.warn(`error in peakWidthFct: ${error.toString()}`);\n        return fixedWidthFct;\n    }\n}\nfunction fixedWidthFct() {\n    return 0.01;\n}\n//# sourceMappingURL=getPeakWidthFct.js.map","/**\n * From an array of arrays it constructs a unique key for each array,\n * given by its values, such that same arrays have same keys.\n *\n * @param collection - Array of arrays\n * @returns - Array of objects with the original array, its index and its key\n */\nfunction addUniqueKeyToColumns(collection) {\n    return collection.map((positiveRows, columnIndexInK) => {\n        //indices of positive values within the column. (Pset)\n        let key = BigInt(0);\n        // items will be the indexes of Pset, so it's always an integer.\n        positiveRows.forEach((item) => (key |= BigInt(1) << BigInt(item)));\n        return { positiveRows, columnIndexInK, key };\n    });\n}\n/**\n * From an array of arrays it constructs a unique key for each subarray,\n * given by its values, such that same arrays have same keys.\n * @param collection - Array of arrays\n * @returns Array of objects with the original array, its index and its key\n */\nexport default function groupColumnsBySign(collection) {\n    const mapped = addUniqueKeyToColumns(collection);\n    mapped.sort((a, b) => {\n        if (a.key - b.key < 0)\n            return -1;\n        return 1;\n    });\n    const sorted = [];\n    const indices = [];\n    let key;\n    for (const set of mapped) {\n        if (set.key !== key) {\n            key = set.key;\n            indices.push([]);\n            sorted.push(set.positiveRows);\n        }\n        indices[indices.length - 1].push(set.columnIndexInK);\n    }\n    const result = {\n        values: sorted,\n        indices,\n    };\n    return result;\n}\n//# sourceMappingURL=sortCollectionSet.js.map","import { Matrix, LuDecomposition, solve, CholeskyDecomposition, } from 'ml-matrix';\nimport sortCollectionSet from './util/sortCollectionSet';\n/**\n * Combinatorial Subspace Least Squares - subfunction for the FC-NNLS\n * Solves XtX*K = XtY for the variables in Pset\n * if XtX (or XtX(vars,vars)) is singular, performs the svd and find pseudo-inverse, otherwise (even if ill-conditioned) finds inverse with LU decomposition and solves the set of equation\n * it is consistent with matlab results for ill-conditioned matrices (at least consistent with test 'ill-conditioned square X rank 2, Y 3x1' in cssls.test)\n * @param XtX - Gram matrix\n * @param XtY\n * @param Pset - Subset of matrix K with positive values (indices)\n * @param l - number of rows of X\n * @param p - number of columns of Y\n */\nexport function cssls(XtX, XtY, Pset, l, p) {\n    let K = Matrix.zeros(l, p);\n    if (Pset === null) {\n        // used for initialisation where OLS is solved.\n        const choXtX = new CholeskyDecomposition(XtX);\n        if (choXtX.isPositiveDefinite()) {\n            K = choXtX.solve(XtY);\n        }\n        else {\n            const luXtX = new LuDecomposition(XtX);\n            if (!luXtX.isSingular()) {\n                K = luXtX.solve(Matrix.eye(l)).mmul(XtY);\n            }\n            else {\n                K = solve(XtX, XtY, true);\n            }\n        }\n    }\n    else {\n        const { values: sortedPset, indices: sortedEset } = sortCollectionSet(Pset);\n        if (sortedPset.length === 1 &&\n            sortedPset[0].length === 0 &&\n            sortedEset[0].length === p) {\n            return K;\n        }\n        else if (sortedPset.length === 1 &&\n            sortedPset[0].length === l &&\n            sortedEset[0].length === p) {\n            const choXtX = new CholeskyDecomposition(XtX);\n            if (choXtX.isPositiveDefinite()) {\n                K = choXtX.solve(XtY);\n            }\n            else {\n                const luXtX = new LuDecomposition(XtX);\n                if (!luXtX.isSingular()) {\n                    K = luXtX.solve(Matrix.eye(l)).mmul(XtY);\n                }\n                else {\n                    K = solve(XtX, XtY, true);\n                }\n            }\n        }\n        else {\n            for (let k = 0; k < sortedPset.length; k++) {\n                const cols2Solve = sortedEset[k];\n                const vars = sortedPset[k];\n                let L;\n                const choXtX = new CholeskyDecomposition(XtX.selection(vars, vars));\n                if (choXtX.isPositiveDefinite()) {\n                    L = choXtX.solve(XtY.selection(vars, cols2Solve));\n                }\n                else {\n                    const luXtX = new LuDecomposition(XtX.selection(vars, vars));\n                    if (!luXtX.isSingular()) {\n                        L = luXtX\n                            .solve(Matrix.eye(vars.length))\n                            .mmul(XtY.selection(vars, cols2Solve));\n                    }\n                    else {\n                        L = solve(XtX.selection(vars, vars), XtY.selection(vars, cols2Solve), true);\n                    }\n                }\n                for (let i = 0; i < L.rows; i++) {\n                    for (let j = 0; j < L.columns; j++) {\n                        K.set(vars[i], cols2Solve[j], L.get(i, j));\n                    }\n                }\n            }\n        }\n    }\n    return K;\n}\n//# sourceMappingURL=cssls.js.map","/**\n * Computes the set difference A\\B\n * @param set A as an array\n * @param set B as an array\n * @returns Elements of A that are not in B\n */\nexport default function setDifference(A, B) {\n    const C = [];\n    for (const i of A) {\n        if (!B.includes(i))\n            C.push(i);\n    }\n    return C;\n}\n//# sourceMappingURL=setDifference.js.map","import setDifference from './util/setDifference';\n/**\n * Checks whether the solution has converged\n * @param iter - current iteration\n * @param maxIter - maximum number of iterations, @default 3 times the number of columns of X\n * @param XtX - Gram matrix\n * @param XtY\n * @param Fset - Columns to be optimized (active), it stores indices of columns with negative values\n * @param Pset - Subset of matrix K with positive values (indices)\n * @param W - Gradient Matrix\n * @param K - Coefficients Matrix\n * @param l - Number of rows of X\n * @param p - Number of columns of X\n * @param D - K clone\n * @param gradientTolerance - Control over the optimality of the solution; applied over the largest gradient value of all. @default 1e-5.\n * @returns - {Pset, Fset, W}\n */\nexport function optimality(iter, maxIter, XtX, XtY, Fset, Pset, W, K, l, p, D, gradientTolerance) {\n    if (iter === maxIter) {\n        throw new Error('Maximum number of iterations exceeded');\n    }\n    // Check solution for optimality\n    const V = XtY.subMatrixColumn(Fset).subtract(XtX.mmul(K.subMatrixColumn(Fset)));\n    for (let j = 0; j < Fset.length; j++) {\n        // for the \"negative\" columns, we set the new gradient.\n        W.setColumn(Fset[j], V.subMatrixColumn([j]));\n    }\n    const Jset = [];\n    const fullSet = [];\n    for (let i = 0; i < l; i++) {\n        fullSet.push(i);\n    }\n    for (const colIndex of Fset) {\n        const notPset = setDifference(fullSet, Pset[colIndex]);\n        if (notPset.length === 0) {\n            Jset.push(colIndex);\n        }\n        else if (W.selection(notPset, [colIndex]).max() <= gradientTolerance) {\n            Jset.push(colIndex);\n        }\n    }\n    Fset = setDifference(Fset, Jset);\n    // For non-optimal solutions, add the appropriate variables to Pset\n    if (Fset.length !== 0) {\n        for (let j = 0; j < Fset.length; j++) {\n            for (let i = 0; i < l; i++) {\n                if (Pset[Fset[j]].includes(i))\n                    W.set(i, Fset[j], -Infinity);\n            }\n            Pset[Fset[j]].push(W.subMatrixColumn(Fset).maxColumnIndex(j)[0]);\n        }\n        for (const colIndex of Fset) {\n            D.setColumn(colIndex, K.getColumn(colIndex));\n        }\n    }\n    for (let j = 0; j < p; j++) {\n        Pset[j].sort((a, b) => a - b);\n    }\n    return { Pset, Fset, W };\n}\n//# sourceMappingURL=optimality.js.map","/**\n * Returns a new array based on extraction of specific indices of an array\n * @param collection or array\n * @param indices\n */\nexport default function selection(vector, indices) {\n    const u = []; //new Float64Array(indices.length);\n    for (let i = 0; i < indices.length; i++) {\n        u[i] = vector[indices[i]];\n    }\n    return u;\n}\n//# sourceMappingURL=selection.js.map","import { Matrix } from 'ml-matrix';\nimport { cssls } from './cssls';\nimport { initialisation } from './initialisation';\nimport { optimality } from './optimality';\nimport selection from './util/selection';\n/**\n * Fast Combinatorial Non-negative Least Squares with multiple Right Hand Side\n * @param X\n * @param Y\n * @param options\n * @returns Solution Matrix.\n */\nexport default function fcnnls(X, Y, options = {}) {\n    X = Matrix.checkMatrix(X);\n    Y = Matrix.checkMatrix(Y);\n    const init = initialisation(X, Y);\n    const { l, p, XtX, XtY, K, D } = init;\n    let { iter, W, Pset, Fset } = init;\n    const { maxIterations = X.columns * 3, gradientTolerance = 1e-5 } = options;\n    // Active set algorithm for NNLS main loop\n    while (Fset.length > 0) {\n        // Solves for the passive variables (uses subroutine below)\n        let L = cssls(XtX, XtY.subMatrixColumn(Fset), selection(Pset, Fset), l, Fset.length);\n        for (let i = 0; i < l; i++) {\n            for (let j = 0; j < Fset.length; j++) {\n                K.set(i, Fset[j], L.get(i, j));\n            }\n        }\n        // Finds any infeasible solutions\n        const infeasIndex = [];\n        for (let j = 0; j < Fset.length; j++) {\n            for (let i = 0; i < l; i++) {\n                if (L.get(i, j) < 0) {\n                    infeasIndex.push(j);\n                    break;\n                }\n            }\n        }\n        let Hset = selection(Fset, infeasIndex);\n        // Makes infeasible solutions feasible (standard NNLS inner loop)\n        if (Hset.length > 0) {\n            let m = Hset.length;\n            const alpha = Matrix.ones(l, m);\n            while (m > 0 && iter < maxIterations) {\n                iter++;\n                alpha.mul(Infinity);\n                // Finds indices of negative variables in passive set\n                const hRowColIdx = [[], []]; // Indexes work in pairs, each pair reprensents a single element, first array is row index, second array is column index\n                const negRowColIdx = [[], []]; // Same as before\n                for (let j = 0; j < m; j++) {\n                    for (const item of Pset[Hset[j]]) {\n                        if (K.get(item, Hset[j]) < 0) {\n                            hRowColIdx[0].push(item); // i\n                            hRowColIdx[1].push(j);\n                            negRowColIdx[0].push(item); // i\n                            negRowColIdx[1].push(Hset[j]);\n                        } // Compared to matlab, here we keep the row/column indexing (we are not taking the linear indexing)\n                    }\n                }\n                for (let k = 0; k < hRowColIdx[0].length; k++) {\n                    // could be hRowColIdx[1].length as well\n                    alpha.set(hRowColIdx[0][k], hRowColIdx[1][k], D.get(negRowColIdx[0][k], negRowColIdx[1][k]) /\n                        (D.get(negRowColIdx[0][k], negRowColIdx[1][k]) -\n                            K.get(negRowColIdx[0][k], negRowColIdx[1][k])));\n                }\n                let alphaMin = [];\n                const minIdx = [];\n                for (let j = 0; j < m; j++) {\n                    alphaMin[j] = alpha.minColumn(j);\n                    minIdx[j] = alpha.minColumnIndex(j)[0];\n                }\n                alphaMin = Matrix.rowVector(alphaMin);\n                for (let i = 0; i < l; i++) {\n                    alpha.setSubMatrix(alphaMin, i, 0);\n                }\n                let E = new Matrix(l, m);\n                E = D.subMatrixColumn(Hset).subtract(alpha\n                    .subMatrix(0, l - 1, 0, m - 1)\n                    .mul(D.subMatrixColumn(Hset).subtract(K.subMatrixColumn(Hset))));\n                for (let j = 0; j < m; j++) {\n                    D.setColumn(Hset[j], E.subMatrixColumn([j]));\n                }\n                const idx2zero = [minIdx, Hset];\n                for (let k = 0; k < m; k++) {\n                    D.set(idx2zero[0][k], idx2zero[1][k], 0);\n                }\n                for (let j = 0; j < m; j++) {\n                    Pset[Hset[j]].splice(Pset[Hset[j]].findIndex((item) => item === minIdx[j]), 1);\n                }\n                L = cssls(XtX, XtY.subMatrixColumn(Hset), selection(Pset, Hset), l, m);\n                for (let j = 0; j < m; j++) {\n                    K.setColumn(Hset[j], L.subMatrixColumn([j]));\n                }\n                Hset = [];\n                for (let j = 0; j < K.columns; j++) {\n                    for (let i = 0; i < l; i++) {\n                        if (K.get(i, j) < 0) {\n                            Hset.push(j);\n                            break;\n                        }\n                    }\n                }\n                m = Hset.length;\n            }\n        }\n        const newParam = optimality(iter, maxIterations, XtX, XtY, Fset, Pset, W, K, l, p, D, gradientTolerance);\n        Pset = newParam.Pset;\n        Fset = newParam.Fset;\n        W = newParam.W;\n    }\n    return K;\n}\n//# sourceMappingURL=fcnnls.js.map","import { Matrix } from 'ml-matrix';\nimport { cssls } from './cssls';\n/**\n * Solves as std linear squares,\n * and overwrites the negative values of K with 0 as an initial guess for K,\n * It also precomputes part of the pseudoinverse used to solve Least Squares.\n * @param - X input data matrix\n * @param - Y output data matrix\n * @returns - initial values for the algorithm (including the solution K to least squares, overwriting of negative values with 0)\n */\nexport function initialisation(X, Y) {\n    // X = n x l\n    // W = l x p, same as K\n    // Y = n x p\n    const n = X.rows;\n    const l = X.columns;\n    const p = Y.columns;\n    const iter = 0;\n    if (Y.rows !== n)\n        throw new Error('ERROR: matrix size not compatible');\n    const W = Matrix.zeros(l, p);\n    // precomputes part of pseudoinverse\n    const XtX = X.transpose().mmul(X);\n    const XtY = X.transpose().mmul(Y);\n    const K = cssls(XtX, XtY, null, l, p); // K is lxp\n    /* Each subarray corresponds to col of K\n     * And stores indices of positive values of that column\n     */\n    const Pset = [];\n    for (let j = 0; j < p; j++) {\n        Pset[j] = [];\n        for (let i = 0; i < l; i++) {\n            if (K.get(i, j) > 0) {\n                Pset[j].push(i); // [[1,2,3...,l],[1,2,4,7,..,l],[],..] p arrays, each length l or less\n            }\n            else {\n                K.set(i, j, 0);\n            } // This is our initial solution, it's the solution found by overwriting the unconstrained least square solution in K.\n        }\n    }\n    const Fset = [];\n    for (let j = 0; j < p; j++) {\n        if (Pset[j].length !== l) {\n            Fset.push(j); // If column j of K was not all positive, add it to the Fset. So Fset are the indices of columns with negative values\n        }\n    }\n    const D = K.clone();\n    return { n, l, p, iter, W, XtX, XtY, K, Pset, Fset, D };\n}\n//# sourceMappingURL=initialisation.js.map","import { Matrix } from 'ml-matrix';\nimport fcnnls from './fcnnls';\n/**\n * Fast Combinatorial Non-negative Least Squares with single Right Hand Side\n * @param X - input data matrix\n * @param y - output data vector\n * @param options - for maxIterations\n * @returns Solution vector.\n */\nexport default function fcnnlsVector(X, y, options = {}) {\n    if (!Array.isArray(y)) {\n        throw new TypeError('y must be a 1D Array');\n    }\n    const Y = Matrix.columnVector(y);\n    const K = fcnnls(X, Y, options);\n    const k = K.to1DArray();\n    return k;\n}\n//# sourceMappingURL=fcnnlsVector.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.splitMatrix = splitMatrix;\nfunction splitMatrix(matrix) {\n    const nbRows = matrix.length;\n    const nbColumns = matrix[0].length;\n    const { nonZeroColumns, nonZeroRows } = createMatrixIndexes(matrix);\n    const rowsMapping = new Int32Array(nbRows).fill(-1);\n    const columnsMapping = new Int32Array(nbColumns).fill(-1);\n    const matrices = [];\n    let currentMappingID = 0;\n    for (let row = 0; row < matrix.length; row++) {\n        for (let column of nonZeroColumns[row]) {\n            if (matrix[row][column] === 0) {\n                continue;\n            }\n            if (rowsMapping[row] !== -1) {\n                continue;\n            }\n            if (columnsMapping[column] !== -1) {\n                continue;\n            }\n            currentMappingID++;\n            const result = { rows: [], columns: [] };\n            matrices.push(result);\n            processFromACell(row, rowsMapping, columnsMapping, currentMappingID, nonZeroColumns, nonZeroRows, result);\n        }\n    }\n    appendSubMatrix(matrices, matrix);\n    return matrices;\n}\nfunction appendSubMatrix(matrices, matrix) {\n    for (const entry of matrices) {\n        const submatrix = new Array(entry.rows.length)\n            .fill(0)\n            .map(() => new Float64Array(entry.columns.length));\n        for (let i = 0; i < entry.rows.length; i++) {\n            for (let j = 0; j < entry.columns.length; j++) {\n                submatrix[i][j] = matrix[entry.rows[i]][entry.columns[j]];\n            }\n        }\n        entry.submatrix = submatrix;\n    }\n}\nfunction processFromACell(row, rowsMapping, columnsMapping, currentMappingID, nonZeroColumns, nonZeroRows, result) {\n    const rowsTodo = [row];\n    let nextRow;\n    while ((nextRow = rowsTodo.pop()) !== undefined) {\n        result.rows.push(nextRow);\n        for (let column of nonZeroColumns[nextRow]) {\n            if (columnsMapping[column] !== -1) {\n                continue;\n            }\n            rowsMapping[nextRow] = currentMappingID;\n            columnsMapping[column] = currentMappingID;\n            result.columns.push(column);\n            for (let internalRow of nonZeroRows[column]) {\n                if (rowsMapping[internalRow] === -1) {\n                    if (!rowsTodo.includes(internalRow)) {\n                        rowsTodo.push(internalRow);\n                    }\n                    continue;\n                }\n                if (rowsMapping[internalRow] !== currentMappingID) {\n                    throw new Error('This should not happen');\n                }\n            }\n        }\n    }\n}\nfunction createMatrixIndexes(matrix) {\n    const nbRows = matrix.length;\n    const nbColumns = matrix[0].length;\n    const nonZeroColumns = new Array(nbRows).fill(0).map(() => []);\n    const nonZeroRows = new Array(nbColumns).fill(0).map(() => []);\n    for (let row = 0; row < nbRows; row++) {\n        for (let column = 0; column < nbColumns; column++) {\n            if (matrix[row][column] === 0) {\n                continue;\n            }\n            nonZeroColumns[row].push(column);\n            nonZeroRows[column].push(row);\n        }\n    }\n    return { nonZeroColumns, nonZeroRows };\n}\n//# sourceMappingURL=splitMatrix.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.blockFcnnls = blockFcnnls;\nconst ml_fcnnls_1 = require(\"ml-fcnnls\");\nconst ml_matrix_1 = require(\"ml-matrix\");\nconst splitMatrix_js_1 = require(\"./splitMatrix.js\");\nfunction blockFcnnls(fullMatrix) {\n    const target = fullMatrix[0];\n    const originalMatrix = fullMatrix.slice(1);\n    const matrix = [];\n    const emptyRow = new Float64Array(originalMatrix[0].length);\n    row: for (const row of originalMatrix) {\n        for (let i = 0; i < row.length; i++) {\n            if (row[i] !== 0 && target[i] !== 0) {\n                matrix.push(row);\n                continue row;\n            }\n        }\n        matrix.push(emptyRow);\n    }\n    // if there is no match with first spectrum we just ignore this entry\n    const matrices = (0, splitMatrix_js_1.splitMatrix)(matrix);\n    appendTarget(matrices, target);\n    const weights = new Float64Array(matrix.length);\n    const reconstructed = new Float64Array(target.length);\n    for (const entry of matrices) {\n        const A = new ml_matrix_1.Matrix(entry.submatrix);\n        const At = A.transpose();\n        const b = Array.from(entry.target); // target\n        const w = (0, ml_fcnnls_1.fcnnlsVector)(At, b);\n        const W = new ml_matrix_1.Matrix([w]); // weights\n        const partialReconstructed = W.mmul(A).getRow(0);\n        for (let i = 0; i < entry.columns.length; i++) {\n            reconstructed[entry.columns[i]] = partialReconstructed[i];\n        }\n        for (let i = 0; i < entry.rows.length; i++) {\n            weights[entry.rows[i]] = w[i];\n        }\n    }\n    return {\n        reconstructed,\n        weights,\n    };\n}\nfunction appendTarget(matrices, target) {\n    for (const entry of matrices) {\n        entry.target = [];\n        for (let column of entry.columns) {\n            entry.target.push(target[column]);\n        }\n    }\n}\n//# sourceMappingURL=blockFcnnls.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.mfsDeconvolution = mfsDeconvolution;\nconst uuid_1 = require(\"@lukeed/uuid\");\nconst isotopic_distribution_1 = require(\"isotopic-distribution\");\nconst mf_generator_1 = require(\"mf-generator\");\nconst ml_matrix_1 = require(\"ml-matrix\");\nconst ml_spectra_processing_1 = require(\"ml-spectra-processing\");\nconst getPeakWidthFct_1 = require(\"./getPeakWidthFct\");\nconst blockFcnnls_js_1 = require(\"./utils/blockFcnnls.js\");\n/**\n *\n * @param {import('ms-spectrum').Spectrum} spectrum\n * @param {Array}         ranges\n * @param {object}        [options={}]\n * @param {string}        [options.ionizations=''] - Comma separated list of ionizations (to charge the molecule)\n * @param {string[]}      [options.customMFs={}] - An array of MFs to add to the list generated by ranges\n * @param {object}        [options.mass={}]\n * @param {number}        [options.mass.threshold=0.001]\n * @param {number}        [options.mass.precision=0] -  Precision (accuracy) of the monoisotopic mass in ppm\n * @param {string|Function} [options.mass.peakWidthFct=()=>0.01]\n * @param {import('cheminfo-types').Logger} [options.logger]\n * @param {object}        [options.filter={}]\n * @param {number}        [options.filter.minMass=0] - Minimal monoisotopic mass\n * @param {number}        [options.filter.maxMass=+Infinity] - Maximal monoisotopic mass\n * @param {number}        [options.filter.minCharge=-Infinity] - Minimal charge\n * @param {number}        [options.filter.maxCharge=+Infinity] - Maximal charge\n * @param {boolean}       [options.filter.absoluteCharge=false] - If true, the charge is absolute (so between 0 and +Infinity by default)\n * @param {boolean}       [options.filter.allowNegativeAtoms=false] - Allow to have negative number of atoms\n * @param {object}        [options.filter.unsaturation={}]\n * @param {number}        [options.filter.unsaturation.min=-Infinity] - Minimal unsaturation\n * @param {number}        [options.filter.unsaturation.max=+Infinity] - Maximal unsaturation\n * @param {boolean}       [options.filter.unsaturation.onlyInteger=false] - Integer unsaturation\n * @param {boolean}       [options.filter.unsaturation.onlyNonInteger=false] - Non integer unsaturation\n * @param {object}        [options.filter.atoms] - object of atom:{min, max}\n * @param {function}      [options.filter.callback] - a function to filter the MF\n * @param {string}        [options.filterFct]\n */\nasync function mfsDeconvolution(spectrum, ranges, options = {}) {\n    if (!spectrum || !spectrum.getPeaks || !spectrum.getPeaks()) {\n        throw new Error('spectrum must be an instance of Spectrum');\n    }\n    const { customMFs = [], mass: massOptions = {}, filter, ionizations, logger, } = options;\n    const { threshold = 0.001 } = massOptions;\n    if (!ionizations) {\n        logger?.warn('No ionizations provided this could be an error if the molecule is not naturally charged.');\n    }\n    const peakWidthFct = (0, getPeakWidthFct_1.getPeakWidthFct)(options);\n    const centroids = getCentroids(spectrum, { threshold });\n    let mfs = await (0, mf_generator_1.generateMFs)(ranges, { filter, ionizations });\n    if (customMFs.length > 0) {\n        const newMFs = await (0, mf_generator_1.generateMFs)([customMFs], { filter, ionizations });\n        mfs = mfs.concat(newMFs);\n    }\n    for (const mf of mfs) {\n        mf.id = (0, uuid_1.v4)();\n    }\n    mfs = addIsotopicDistributionAndCheckMF(mfs, { logger, peakWidthFct });\n    mfs.sort((mf1, mf2) => mf1.ms.em - mf2.ms.em);\n    const combined = buildCombined(centroids, mfs, { peakWidthFct });\n    if (!hasOverlap(combined.ys)) {\n        throw new Error('Could not find any overlaping peaks between experimental and theoretical spectra.');\n    }\n    const { weights, reconstructed } = (0, blockFcnnls_js_1.blockFcnnls)(combined.ys);\n    const relativeIntensity = (0, ml_spectra_processing_1.xNormed)(weights);\n    for (let i = 0; i < mfs.length; i++) {\n        mfs[i].absoluteQuantity = weights[i];\n        mfs[i].relativeQuantity = relativeIntensity[i];\n        mfs[i].distribution.y = mfs[i].distribution.y.map((y) => y * weights[i]);\n    }\n    let matchingScore = 0;\n    const difference = [];\n    for (let i = 0; i < combined.ys[0].length; i++) {\n        matchingScore += Math.min(combined.ys[0][i], reconstructed[i]);\n        difference.push(combined.ys[0][i] - reconstructed[i]);\n    }\n    matchingScore = matchingScore / (0, ml_spectra_processing_1.xSum)(combined.ys[0]);\n    let A;\n    let W;\n    return {\n        reconstructed: {\n            x: combined.x,\n            y: reconstructed,\n        },\n        difference: {\n            x: combined.x,\n            y: difference,\n        },\n        mfs: mfs\n            .slice()\n            .toSorted((mf1, mf2) => mf2.absoluteQuantity - mf1.absoluteQuantity),\n        matchingScore,\n        getFilteredReconstructed,\n    };\n    function getFilteredReconstructed(ids = mfs.map((mf) => mf.id)) {\n        if (!A)\n            A = new ml_matrix_1.Matrix(combined.ys.slice(1));\n        if (!W)\n            W = new ml_matrix_1.Matrix([weights]);\n        let wClone = W;\n        if (ids.length !== W.length) {\n            wClone = W.clone();\n            for (let i = 0; i < mfs.length; i++) {\n                if (ids.includes(mfs[i].id))\n                    continue;\n                wClone.set(0, i, 0);\n            }\n        }\n        const filteredReconstructed = wClone.mmul(A).getRow(0);\n        return {\n            x: combined.x,\n            y: filteredReconstructed,\n        };\n    }\n}\n/**\n *\n * @param {object} spectrum\n * @param {object} [options={}]\n * @param {number} [options.threshold=0.001]\n */\nfunction getCentroids(spectrum, options = {}) {\n    const { threshold = 0.001 } = options;\n    const peaks = spectrum.getPeaks({\n        threshold,\n    });\n    return {\n        x: peaks.map((peak) => peak.x),\n        y: peaks.map((peak) => peak.y),\n    };\n}\nfunction addIsotopicDistributionAndCheckMF(mfs, options) {\n    const { logger, peakWidthFct } = options;\n    for (let mf of mfs) {\n        const isotopicDistribution = new isotopic_distribution_1.IsotopicDistribution(mf.mf, {\n            fwhm: peakWidthFct(mf.ms.em), // when should we join peaks\n            ionizations: mf.ms.ionization,\n        });\n        mf.distribution = isotopicDistribution.getXY({ sumValue: 1 });\n        if (mf.distribution.y.length === 0) {\n            logger?.warn(`Problem with isotopic distribution calculation. Negative number of atoms ? ${mf.mf} ${mf.ms.ionization}`);\n        }\n    }\n    mfs = mfs.filter((mf) => mf.distribution.x.length > 0);\n    if (mfs.length === 0) {\n        throw new Error('No MF found. Did you forget ionization ?');\n    }\n    return mfs;\n}\nfunction buildCombined(centroids, mfs, options = {}) {\n    const { peakWidthFct } = options;\n    if (!peakWidthFct) {\n        throw new Error('peakWidthFct is mandatory');\n    }\n    const data = [centroids];\n    for (const mf of mfs) {\n        data.push(mf.distribution);\n    }\n    // We align all the spectra to the first one, but if some values (X) are missing, we will add them.\n    return (0, ml_spectra_processing_1.xyArrayAlignToFirst)(data, {\n        delta: peakWidthFct,\n    });\n}\n/**\n * We will check if there is any overlap between the theoretical and experimental spectra\n * @param {number[][]} ys\n */\nfunction hasOverlap(ys) {\n    for (let i = 0; i < ys[0].length; i++) {\n        for (let j = 1; j < ys.length; j++) {\n            if (ys[0][i] > 0 && ys[j][i] > 0) {\n                return true;\n            }\n        }\n    }\n    return false;\n}\n//# sourceMappingURL=mfsDeconvolution.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.reconstruct = reconstruct;\nconst ml_spectra_processing_1 = require(\"ml-spectra-processing\");\n/**\n * Reconstruct a mass spectrum from a set of molecular formulas\n * that has the  distribution property\n * @param {object[]} mfs\n * @param {object} [options={}]\n * @param {import('cheminfo-types').Logger} [options.logger]\n * @param {object}        [options.mass={}]\n * @param {number}        [options.mass.precision=0] -  Precision (accuracy) of the monoisotopic mass in ppm\n * @param {string|Function} [options.mass.peakWidthFct=()=>0.01]\n */\nconst getPeakWidthFct_js_1 = require(\"./getPeakWidthFct.js\");\nfunction reconstruct(mfs, options = {}) {\n    const delta = (0, getPeakWidthFct_js_1.getPeakWidthFct)(options);\n    const data = mfs.map((mf) => mf.distribution);\n    const reconstructed = (0, ml_spectra_processing_1.xyArrayWeightedMerge)(data, { delta });\n    return reconstructed;\n}\n//# sourceMappingURL=reconstruct.js.map","import * as EMDBPkg from 'emdb';\nimport * as SpectrumPkg from 'ms-spectrum';\n\nexport { groups, groupsObject } from 'chemical-groups';\nexport { elements, elementsObject } from 'chemical-elements';\nexport { IsotopicDistribution } from 'isotopic-distribution';\n\nEMDBPkg.EMDB.massShifts = EMDBPkg.massShifts;\nEMDBPkg.EMDB.prototype.massShifts = EMDBPkg.massShifts;\nexport const EMDB = EMDBPkg.EMDB;\n\nSpectrumPkg.Spectrum.JsGraph = SpectrumPkg.JsGraph;\nSpectrumPkg.Spectrum.prototype.JsGraph = SpectrumPkg.JsGraph;\nexport const Spectrum = SpectrumPkg.Spectrum;\nexport const MSComparator = SpectrumPkg.MSComparator;\nexport const getBestPeaks = SpectrumPkg.getBestPeaks;\n\nexport { MF, ensureCase } from 'mf-parser';\nexport {\n  MFRange,\n  getRangesForFragment,\n  preprocessIonizations,\n  preprocessRanges,\n} from 'mf-utilities';\nexport { generateMFs } from 'mf-generator';\n\nexport { atomSorter } from 'atom-sorter';\nexport { mfFromEA } from 'mf-from-ea';\nexport { mfFromAtomicRatio } from 'mf-from-atomic-ratio';\nexport {\n  ActiveOrNaturalSummarizer,\n  OctoChemDB,\n  createTaxonomyTree,\n} from 'octochemdb';\nexport * as MassFragmentation from 'mass-fragmentation';\nexport * as Report from 'ms-report';\nexport * as MFSDeconvolution from 'mfs-deconvolution';\nexport * as Nucleotide from 'nucleotide';\nexport * as Peptide from 'peptide';\n"],"names":["toString","Object","prototype","isAnyArray","value","tag","call","endsWith","includes","reimAbsolute","data","options","length","re","output","Float64Array","im","i","Math","hypot","getOutputArray","undefined","TypeError","xAbsolute","array","tmpArray","slice","xMedian","input","exact","middleIndex","calcMiddle","median","quickSelect","low","high","middle","currentLow","currentHigh","swap","j","temp","floor","xCheck","minLength","Error","xFindClosestIndex","target","sorted","abs","index","diff","Number","POSITIVE_INFINITY","currentDiff","xGetFromToIndex","x","fromIndex","toIndex","from","to","xAdd","array1","array2","isConstant","constant","array3","xMultiply","xDotProduct","A","B","g","result","xCrossCorrelation","tau","lag","n","q","k","w","l","xBoxPlot","sort","at","EPSILON","shortTestNumber","String","min","q1","q3","max","posQ1","posQ3","medianPos","q1MinProportion","q3MinProportion","medianMinProportion","xBoxPlotWithOutliers","boxPlot","lowerWhisker","upperWhisker","minWhisker","maxWhisker","iqr","outliers","push","xCheckLengths","xCorrelation","sumA","sumA2","sumB","sumB2","sumAB","a","b","sqrt","CholeskyDecomposition","matrix","LuDecomposition","Matrix","inverse","solve","absDiff","xCumulative","newArray","xMean","sumValue","xVariance","values","unbiased","mean","sqrError","xStandardDeviation","xEnsureFloat64","xGetTargetIndex","targetIndex","FFT","size","this","_csize","table","Array","angle","PI","cos","sin","power","t","_width","_bitrev","shift","revShift","_out","_data","_inv","fft","fromComplexArray","complex","storage","res","createComplexArray","toComplexArray","completeSpectrum","spectrum","half","transform","out","_transform4","realTransform","_realTransform4","inverseTransform","outOff","step","len","bitrev","off","_singleTransform2","_singleTransform4","inv","quarterLen","limit","C","D","Ar","Ai","Br","Bi","Cr","Ci","Dr","Di","MAr","MAi","tableBr","tableBi","MBr","MBi","tableCr","tableCi","MCr","MCi","tableDr","tableDi","MDr","MDi","T0r","T0i","T1r","T1i","T2r","T2i","T3r","T3i","FAr","FAi","FCr","FCi","FBr","FBi","FDr","FDi","evenR","evenI","oddR","oddI","leftR","leftI","rightR","rightI","step2","step3","_singleRealTransform2","_singleRealTransform4","halfLen","hquarterLen","SFAr","SFAi","SFBr","SFBi","SA","SB","createNumberArray","ArrayConstructor","fill","createDoubleArray","createFromToArray","includeFrom","includeTo","distribution","div","delta","base","firstExponent","log","FLOAT_MUL","multiplyUint32","m","nlo","XSadd","random","state","constructor","seed","Date","now","Uint32Array","init","getFloat","bind","getUint32","nextState","isInteger","periodCertification","createRandomArray","standardDeviation","range","generator","returnArray","gaussianGenerator","GaussianGenerator","generateGaussian","spare","hasSpare","val","u","v","s","isPowerOfTwo","nextPowerOfTwo","appendPromises","object","promises","key","then","modifier","ArrayBuffer","isView","xSubtract","calculateAdaptiveWeights","yData","baseline","weights","controlPoints","factorStd","learningRate","absResiduals","mad","threshold","rawWeights","exp","oneMinusLearningRate","weight","cleanCyclicObject","removeProperty","visitedObjects","WeakMap","recursiveClean","parent","parentKey","isObject","has","set","Reflect","ownKeys","isEmpty","deleteProperty","isArray","arrayElement","removeEmptyArrayAndObject","splice","test","repr","arg","isUndefined","isNull","isString","keys","hilbertTransformWithFFT","hilbertSignal","resampling","oldLength","ratio","currentIndex","ceil","xMaxValue","maxValue","xMinValue","minValue","xHistogram","histogram","centerX","nbSlots","logBaseX","logBaseY","absolute","logOfBase","log10","slotSize","y","element","xIsEquallySpaced","tolerance","maxDx","minDx","MAX_SAFE_INTEGER","absoluteDifference","xIsMonotonic","shiftSubTree","depth","level","slot","currentLevel","levelSlotShift","levelShift","levelSlotSize","slotIndex","getDepth","log2","xMedianAbsoluteDeviation","averageDeviations","xMinMaxValues","P1","Q1","P2","Q2","P3","Q3","P4","Q4","P5","Q5","polyval","c","p","coef","calc","P","Q","Y","erfcinv","r","sign","isNaN","NaN","RangeError","NEGATIVE_INFINITY","simpleNormInvNumber","magnitudeMode","SQRT2","simpleNormInv","xNoiseSanPlot","mask","cutOff","refine","scaleFactor","fixOffset","filter","_e","reverse","prepareData","medianIndex","firstNegativeValueIndex","findIndex","e","lastPositiveValueIndex","signPositive","signNegative","cutOffDist","considerList","indexMax","round","minKi","whereToCutStat","top","elementsOfCutOff","averageValue","kiSqrt","determineCutOff","initialNoiseLevelPositive","skyPoint","initialNoiseLevelNegative","noiseLevelPositive","noiseLevelNegative","cloneSignPositive","cloneSignNegative","cutOffSignalsIndexPlus","cutOffSignalsIndexNeg","cutOffSignals","correctionFactor","effectiveCutOffDist","refinedCorrectionFactor","positive","negative","snr","sanplot","generateSanPlot","fromTo","scale","xNoiseStandardDeviation","sd","xNorm","xSum","xNormed","algorithm","absoluteSumValue","absoluteSum","currentMaxValue","factor","sumFactor","xPadding","fromEnd","toEnd","xRolling","fct","window","padding","padded","subarray","xRollingAverage","xRotate","xSequentialFillFromStep","parameters","xSortDescending","matrixCreateEmpty","nbRows","nbColumns","newMatrix","row","matrixCheck","firstLength","matrixCholeskySolver","nonZerosArray","dimension","permutationEncoded","pinv","Int32Array","mt","ar","ac","nnz","ap","ai","ax","lnz","idx","colOffset","col","adr","d","lp","lnzArray","flag","pattern","bp1","apLoc","aiLoc","parentLoc","lnzLoc","flagLoc","kk","p2","ldlSymbolic","nz","lx","li","axLoc","lpLoc","liLoc","lxLoc","dLoc","yLoc","patternLoc","yi","lKi","p2col","ldlNumeric","perm","xLoc","bLoc","ldlPerm","ldlLsolve","ldlDsolve","ldlLTsolve","ldlPermt","matrixClone","map","matrixCuthillMckee","list","adj","visited","toVisit","eol","ptr","nbhd","matrixCheckRanges","boundaries","startRow","endRow","startColumn","endColumn","matrixMinMaxAbsoluteZ","column","matrixMinMaxZ","matrixMaxAbsoluteZ","matrixToArray","flatten","currentRow","addWeights","leftHandSide","rightHandSide","nbPoints","newLeftHandSide","newRightHandSide","diag","next","xWhittakerSmoother","restOptions","lambda","maxIterations","getWeightsAndControlPoints","prevBaseline","baseDiag","lower","upper","main","rhs","solution","workC","workD","iteration","Infinity","solveTridiagonalFloat64","calculateDelta","whittakerByThomas","upperTriangularNonZeros","permutationEncodedArray","last","createSystemMatrix","cho","newBaseline","whittakerByCholesky","xWhitakerSmoother","sum","cp","dp","cprime","dprime","denom","reimPhaseCorrection","phi0","phi1","inPlace","isFinite","outRe","outIm","firstAngle","alpha","beta","cosTheta","sinTheta","ii","newSinTheta","determiningGlobalValues","ph0Values","ph0","ph1","sxtw","swx","sw","sxtwy","swy","detMx","inMx","weightedLinearRegression","maxDiff","MIN_SAFE_INTEGER","predictedPh0","autoPhaseRegion","x0","start","stop","maxSteps","bestAng","minArea","dAng","negArea","getNegArea","toRadians","phased","area","sumX","robustBaseLineRegionsDetection","maxDistanceToJoin","factorNoise","Uint8Array","change","count","prev","degree","zeroShift","reimZeroFilling","totalLength","newRE","newIM","xyCheck","xyMaxYPoint","current","STEPS","zonesNormalize","zones","exclusions","zone","currentZone","beforeExclusionsZones","normalizedExclusions","currentExclusionIndex","results","zoneIndex","zonesWithPoints","numberOfPoints","normalizedZones","zonesWithNumberOfPoints","unitsPerPoint","reduce","previous","currentTotal","tempZone","tempZoneNumberOfPoints","integral","x1","slope","intercept","getSlope","y0","y1","processZone","variant","xLength","halfStep","lastStep","previousX","MAX_VALUE","previousY","nextX","nextY","frontOutsideSpectra","backOutsideSpectra","currentValue","currentPoints","equallySpacedSlot","initialOriginalStep","lastOriginalStep","sumAtMin","sumAtMax","add","equallySpacedSmooth","xyJoinX","deltaIsFunction","position","notEnoughPoints","internalZones","totalPoints","newX","newY","getInternalZones","xySortX","floatX","floatY","xyObject","response","xyUniqueX","isSorted","cumulativeY","divider","average","getSlots","possibleXs","flatMap","currentSlot","number","slots","currentDelta","xyArrayWeightedMerge","deltaNumber","positions","point","nextValue","maxX","sumY","sumXY","minIndex","minX","currentX","xyObjectCheck","points","xyObjectMaxXPoint","xyObjectMinXPoint","backtrack","pop","targetMin","targetMax","clamp","algorithmOptions","originalMin","originalMax","convert","kind","getDataConverter","originalRange","targetRange","checkRange","matrixInitial","dictionary","arrayOfValues","targetArray","sourceArray","info","columnArray","q1max","q3min","middleOver","transpose","rows","correlation","getRow","duplicate","subMatrix","fftResult","minMax","xHistogramOptions","finalHistogram","invertedDictionary","ret","nRows","nColumns","dictCategoricalToNumerical","matrixB","normalizationFactor","getRowVector","norm","setRow","referenceSpectrum","columns","currentVariable","getColumn","medianOfQuotients","quotients","getColumnVector","mulRow","to2DArray","currentMax","currentMin","propertiesToRemove","otherOptions","async","Promise","all","applyZeroShift","csize","complexArray","source","minRegSize","finalPeaks","magnitudeData","peaksDs","dk","holoborodko","peaksSp","sp","detectBaselineRegions","indexMask","counter","reTmp","imTmp","newRe","newIm","numRows","resultRe","resultIm","reRow","imRow","numColumns","colRe","colIm","direction","replacer","space","JSON","stringify","internalReplacer","variableLabel","fctString","Function","replaceAll","toReturn","binSize","keepFirstAndLast","innerLength","innerBins","end","binByNumberOfPoints","effectiveBinSize","innerBinCount","outputLength","rowsArray","columnsArray","nb","forceFFT","inClockwise","aSum","cSum","hilbertTransform","recenter","similarityFct","depth1","depth2","similarity","maxSimilarity","value1","value2","maxIndex","sumWeights","minDelta","maxDelta","maxCount","counts","sqrtSD","higherWhisker","filteredArray","downSampling","unique","Set","toReversed","deltaX","xy2","xyValue","data1","data2","common","y2","length1","length2","difference","weightedX","requiredY","ys","newYs","every","filterRequiredY","firstXs","otherXs","currentPosition","getSlotsToFirst","meanX","meanY","error","cumulativeSum","maxY","x25","x50","x75","x100","xMode","currentStep","breakPoint","prevX","zonesWithPointsRes","xResult","yResult","zoneResult","concat","loop","minRelativeYValue","nbPeaks","descending","nbThreshold","currentZoneIndex","numberMaxPoints","xyIntegration","currentxyIntegral","currentxyIntegration","xTarget","sparseIndex","targetX","leftIdx","rightIdx","sumYs","sumProducts","weightedIntegral","firstIntegration","totalIntegration","totalWeightedIntegral","currentIntegration","lastIntegration","getWeightedIntegral","endIndexes","beginIndexes","currentBeginIndex","currentEndIndex","nextIndex","previousIndex","xyMaxY","groupWidth","merged","maxAbscissa","currentxyMaxY","maxima","startEqualIndex","cumSumY","windowSize","halfWindow","xValues","centerIndex","centroids","mergedPoints","originalIndex","mergedIndex","minY","numberCloseSlots","numberSlots","closeSlot","selected","peakLoop","item","close","existing","newPeak","xError","structuredClone","normalizedYs","slotWidth","halfSlot","entry","multiplier","newDiff","after","before","inflectionBefore","inflectionAfter","extrema","inflectionMiddle","width","gamma","optimize","appendFromTo","zoneNbPoints","first","maxApproximateNbPoints","internalZone","maxNbPoints","currentY","lastX","radius","shifted","yCenters","fromX","toX","yShift","currentMinYShift","objectArray","weightedAbscissa","zoneXValues","ensureString","blob","encoding","TextDecoder","decode","uint8","buffer","byteOffset","byteLength","fatal","decodeText","parse","text","rescale","uniqueX","bestGuess","keepInfo","xColumn","yColumn","numberColumns","maxNumberColumns","minNumberColumns","lines","split","line","trim","fields","parseFloat","replace","skipFirstColumn","currentFirst","nextFirst","xs","yValues","peaks","searchMonoisotopicRatio","ml_spectra_processing_1","peak","monoisotopic","toSorted","nextItem","defineProperty","elementsAndIsotopes","nominal","mass","abundance","symbol","name","monoisotopicMass","elements","elementsAndIsotopes_js_1","require$$0","exports","elementsAndIsotopesObject","elementsAndStableIsotopes","elementsAndStableIsotopesObject","elementsObject","isotopesObject","elementsAndIsotopesObject_js_1","entries","isotope","isotopes","stableIsotopesObject","mostAbundant","unsaturationsObject","O","N","H","Na","K","Li","Ca","F","Si","Cl","I","groupsObject","groups_1","groups","forEach","mf","part","parts","match","groupsObject_js_1","oneLetter","usefulParts","Kind","BEGIN","ATOM","MULTIPLIER_RANGE","ISOTOPE","ISOTOPE_RATIO","CHARGE","SALT","OPENING_PARENTHESIS","CLOSING_PARENTHESIS","PRE_MULTIPLIER","MULTIPLIER","TEXT","parseCharge_1","parseCharge","charge","chargeNumber","charAt","Kind_1","require$$3","require$$4","expandGroups","simplify","lastKind","char","ascii","charCodeAt","nextAscii","getNumber","MFError","ANCHOR","getAtom","getParenthesisCharge","getIsotope","isotopeRatio","getCurlyBracketIsotopeRatio","lastResult","atom","getNonParenthesisCharge","COMMENT","checkParenthesis","parsed","multipliers","newParsed","realMultiplier","currentMultiplier","distinctParsedObject","atomA","atomB","fromCharCode","indexOfDash","indexOf","parseNumberWithDivision","chemical_elements_1","expandedGroups","chemical_groups_1","substring","begin","SyntaxError","super","message","repeat","string","subSuperscript","superscript","Format","SUBSCRIPT","SUPERSCRIPT","improveLinesForDisplay","Kind_js_1","beginCounter","endCounter","minCounter","nbParenthesisToSuppress","toSuppress","specialCases","Format_1","nbElectrons","improveLinesForDisplay_js_1","special","SUPERIMPOSE","over","formatCharge_js_1","formatCharge","under","join","require$$1","require$$2","isMF_1","isMF","Style","toHtml_1","toHtml","html","Style_1","SUPERIMPOSE_SUP_SUB","ensureCase_1","ensureCase","toUpperCase","newPart","two","one","getMF","currents","comment","groupIdentical","currentPart","parenthesisLevel","comments","optimizeRanges","newParts","mfsObject","hasRange","createMFs","mfs","getIsotopeRatioInfo_1","getIsotopeRatioInfo","isotopesArray","ratios","normalize","getEA_1","getEA","addMass","isotopeRatioInfo","eas","getElements_1","getElements","addElement","find","newElement","getNumberOfIsotopologues","atoms","nbIsotopes","getNbCombinationsPerAtom","nbAtoms","partToAtoms_1","partToMF_1","partToMF","neutral","getInfoInternal_1","getInfoInternal","customUnsaturations","emFieldName","msemFieldName","oneResult","getProcessedPart","nbIsotopologues","getNumberOfIsotopologues_1","unsaturation","require$$5","require$$6","partToAtoms","validUnsaturation","currentElement","getIsotopesInfo","isotopeKey","naturalDeltaNeutrons","deltaNeutrons","getDistribution","mostAbundantKey","partsToDisplay","partLine","toDisplay_js_1","partsToMF_1","partsToMF","expand","shouldExpandGroupsObject","createNewPart","previousKind","openingParenthesis","closingParenthesis","preMultiplier","postMultiplier","globalPartMultiplier","expandGroupsObject","group","expanded","Boolean","combineAtomsIsotopesCharges","calculateAndSortKeys","currentKey","atom_sorter_1","getKey","stringComparator","prop","toText_1","toText","subSuperscript_1","subscript","MFInternal_1","MFInternal","parse_1","flatten_1","getInfo_1","getIsotopesInfo_1","require$$7","partsToDisplay_1","require$$8","require$$9","toDisplay_1","require$$10","require$$11","toParts_1","require$$12","require$$13","flattenLimit","some","flattened","cache","displayed","toDisplay","toParts","getInfo","ea","isotopesInfo","toMF","MF_1","MF","internal","toCanonicText","parse_js_1","toHtml_js_1","unsaturationMatcher_1","unsaturationMatcher","onlyInteger","onlyNonInteger","minMW","maxMW","minEM","maxEM","minCharge","maxCharge","absoluteCharge","mw","em","unsaturationMatcher_js_1","ensureUppercaseSequence_1","ensureUppercaseSequence","sequence","currentSymbol","startsWith","getEutrophicationPotential_1","getEutrophicationPotential","mfString","mf_parser_1","nC","nO","nN","nP","thOD","nH","ep","getMsem_1","getMsem","ELECTRON_MASS","allowNeutralMolecules","ionization","forceIonization","targetMass","realIonization","ms","ppm","getRangesForFragment_1","getRangesForFragment","ranges","newRanges","currentMF","possibilities","MFRange_1","MFRange","getRange","currentRange","isInRange","rangeIndex","rangeElement","targetElement","mfDiff_1","mfDiff","mfString1","mfString2","mf1","mf2","preprocessIonizations_1","preprocessIonizations","ionizationsString","ionizations","preprocessRanges_1","preprocessRanges","possibility","originalMinCount","originalMaxCount","currentMinCount","currentMaxCount","currentCount","currentMonoisotopicMass","currentCharge","currentUnsaturation","initialOrder","minInnerMass","maxInnerMass","minInnerCharge","maxInnerCharge","minMass","maxMass","innerCharge","isGroup","innerPossibility","precision","targetMasses","targetIntensities","minMSEM","maxMSEM","allowNegativeAtoms","callback","msInfo","mf_utilities_1","getMsInfo","ionizationAtoms","atomKeys","TargetMassCache_1","TargetMassCache","allowNeutral","firstPossibility","currentMinCharge","currentMaxCharge","uniqueMFs","targetMassCache","advancedFilter","filterUnsaturation","fakeMinUnsaturation","fakeMaxUnsaturation","numberMFEvaluated","numberResults","orderMapping","currentIonization","getOrderMapping","currentAtom","previousAtom","theEnd","maxPosition","lastPosition","lastPossibility","initializePossibilities","isValid","unsaturationValue","isOdd","filterCharge","getMinMass","getMaxMass","getResult","mf_matcher_1","msemMatcher","newResult","ensureUniqueMF","updateCurrentAtom","setCurrentMinMax","bestCounts","previousEM","currentCounts","findMFs_1","findMFs","mfIncluded","targetEM","findMFsSync_js_1","findMFsSync","masses","mf_finder_1","getFragmentPeaks","mfInfo","getPeaks_js_1","getPeaks","fromMonoisotopicMass_1","fromMonoisotopicMass","getMassRemainder","calculateOverlapFromDiff","diffs","sumPos","checkPeaks","extract","getCommonArray","pos2","array1Length","array2Length","compareNumbers","arithmeticMean","geometricMean","mul","pow","logMean","lnsum","grandMean","means","samples","truncatedMean","percent","alreadySorted","harmonicMean","contraHarmonicMean","r1","r2","variance","theMean","theVariance","standardError","robustMeanAndStdev","stdev","quartiles","quart","q2","pooledStandardDeviation","pooledVariance","vari","mode","itemCount","itemArray","covariance","vector1","vector2","mean1","mean2","cov","skewness","s2","s3","dev","m2","kurtosis","s4","entropy","eps","weightedMean","weightedStandardDeviation","weightedVariance","z","center","standardize","standardDev","arrayStat","l1","l2","cols","theSum","product","theProduct","sum1","sum2","medians","modes","skew","kurt","m4","standardDeviations","standardErrors","sqrtN","scatter","divisor","scores","zScores","cor","jj","resultRow","sourceRow","weightSum","weightedCovariance","s1","weightedScatter","StatArray","commonExtractAndNormalize","extract1","extract2","common1","common2","info1","info2","COMMON_SECOND","COMMON_FIRST","extractAndNormalize","getIntersection","segment1","segment2","p0X","p0Y","p1X","p1Y","p2X","p2Y","s1X","s1Y","s2X","s2Y","setOptions","toLowerCase","trapezoid","commonFactor","widthBottom","widthTop","setTrapezoid","setFromTo","setPeaks1","extracts","array1Extract","array1ExtractInfo","array2Extract","array2ExtractInfo","setPeaks2","getExtract1","getExtract2","getExtractInfo1","getExtractInfo2","newWidthBottom","newWidthTop","widthSlope","newFrom","newTo","getOverlap","x2","getOverlapTrapezoid","console","small","big","targets","segment","intersection","calculateDiff","newFirst","newSecond","pos1","previous2","overlap","getSimilarity","newPeaks1","newPeaks2","extractInfo1","extractInfo2","fastSimilarity","getPeakChargeBySimilarity","widthFunction","bottom","experimentalData","similarityProcessor","peaks_similarity_1","checkTopBottom","fromCharge","toCharge","fromIsotope","toIsotope","isotopeHeight","NEUTRON_MASS","getPeaksWithCharge_1","getPeaksWithCharge","selectedPeaks","allPeaks","numberIsotopes","isotopeIntensity","localFromIndex","localToIndex","peaksWithCharge","bestCharge","theoreticalPositions","massRange","isotopePosition","fromMass","toMass","localHeightSum","currentTheoreticalPosition","theoreticalMaxValue","maxDeltaRatio","relativeHeightThreshold","minHeight","minRadio","maxRatio","continuous","previousDelta","success","failed","sgg","derivative","polynomial","warn","np","ans","fullWeights","hs","constantH","wg1","wg2","d1","d2","getHs","wg","h","gramPoly","Grampoly","genFact","gf","getMinMaxIntervalsDy","dY","dX","lastMax","lastMin","intervalL","intervalR","tryMatchOneIntervalWithMinData","lastK","minData","yThreshold","intervalWidth","intervalCenter","minDistance","possible","newLastIndex","currentDistance","lastIndex","getPeakFromIntervals","ddY","id","crypto","randomUUID","inflectionPoints","isLessAndGreaterThanZero","back","firstDerivative","crossDy","xGetCrossZeroPoints","GAUSSIAN_EXP_FACTOR","LN2","ROOT_PI_OVER_LN2","ROOT_THREE","ROOT_2LN2","ROOT_2LN2_MINUS_ONE","Gaussian","fwhm","gaussianWidthToFWHM","fwhmToWidth","gaussianFwhmToWidth","widthToFWHM","gaussianFct","getArea","height","calculateGaussianHeight","getGaussianArea","getFactor","getGaussianFactor","getData","shape","getGaussianData","calculateHeight","getParameters","ln1MinusXSqrd","lnEtcBy2Plus2","firstSqrt","erfinv","Lorentzian","lorentzianFwhmToWidth","lorentzianWidthToFWHM","lorentzianFct","getLorentzianArea","getLorentzianFactor","getLorentzianData","calculateLorentzianHeight","halfResidual","quantileFunction","tan","LorentzianDispersive","lorentzianDispersiveFct","_height","getLorentzianDispersiveData","PseudoVoigt","mu","pseudoVoigtFwhmToWidth","pseudoVoigtWidthToFWHM","pseudoVoigtFct","getPseudoVoigtArea","getPseudoVoigtFactor","calculatePseudoVoigtHeight","getPseudoVoigtData","GeneralizedLorentzian","generalizedLorentzianFwhmToWidth","generalizedLorentzianWidthToFWHM","generalizedLorentzianFct","getGeneralizedLorentzianArea","getGeneralizedLorentzianFactor","getGeneralizedLorentzianData","calculateGeneralizedLorentzianHeight","Gaussian2D","ensureFWHM2D","fwhmX","fwhmY","gaussian2DFct","getGaussian2DData","volume","getVolume","calculateGaussian2DHeight","getGaussian2DVolume","ensureXYNumber","xFWHM","yFWHM","axis","xCenter","yCenter","sdObject","getShape1D","getShape2D","assert","DefaultParameters","peakShape","gradientDifference","properties","getNormalizedValue","parameter","property","minMaxY","checkOptions","timeout","initialValues","damping","dampingStepUp","dampingStepDown","errorTolerance","centralDifference","improvementThreshold","minValues","maxValues","parLen","gradientDifferenceArray","getGradientDifferenceArray","filler","dataLength","getFiller","checkTimeout","endTime","getCheckTimeout","weightSquare","_","errorCalculation","parameterizedFunction","func","params","identity","eye","evaluatedData","gradientFunc","paramFunction","nbParams","zeros","rowIndex","param","auxParams","funcParam","funcParam2","gradientFunction","residualError","matrixFunction","inverseMatrix","mmul","jacobianWeightResidualError","perturbations","levenbergMarquardt","checkedOptions","optimalError","optimalParameters","converged","previousError","get","parameterValues","parameterError","iterations","antiLowerConvexHull","currentPoint","moveOn","moveBack","vector","getMinIndex","functionValues","diagonalDistances","choiceLimit","bestCurrentValue","directOptimization","sumOfShapes","epsilon","tolerance2","initialState","objectiveFunction","getObjectiveFunction","lowerBoundaries","upperBoundaries","diffBorders","numberOfRectangles","totalIterations","unitaryCoordinates","middlePoint","fCalls","smallerDistance","edgeSizes","differentDistances","smallerValuesByDistance","originalCoordinates","optimumValuesIndex","S3","S1","f","a1","b1","a2","S2","xHull","yHull","lowerIndexHull","largerSide","largeSidesIndex","bestFunctionValues","firstMiddleCenter","secondMiddleCenter","firstMiddleValue","secondMiddleValue","firstMinValue","secondMinValue","ix1","ix2","minFunctionValue","pair","finalState","minimizer","optima","direct","internalPeaks","shiftValue","normalizedPeaks","shapeFct","propertiesValues","propertyValue","generalParameterValue","defaultParameterValues","getInternalPeaks","normalizedY","gradientDifferences","optimizationOptions","selectMethod","optimization","totalY","peakX","shapeFctKey","getSumOfShapes","fitted","fittedValues","newPeaks","addMissingShape","defaultShapeInstance","hasShape","optimizePeaksWithLogs","peakList","groupingFactor","factorLimits","sortedPeaks","previousPeak","currentGroup","groupPeaks","logs","peakGroup","firstPeak","lastPeak","groupSize","time","optimizedPeaks","addMissingIDs","pushBackPeaks","broadLines","indexes","getGSDPeakOptimizedStructure","xFrom","xTo","mapPeaks","nextPeak","noiseLevel","sgOptions","smoothY","maxCriteria","minMaxRatio","realTopDetection","peakDetectionAlgorithm","isEquallySpaced","noiseInfo","xValue","peakData","minddY","secondDerivative","lastJ","yIndex","autoAlgorithm","xCurrent","xPrevious","optimizeTop","broadWidth","broadRatio","maxI","maxDdy","absDdy","candidates","initialWidth","shapeInstance","peakPicking","isContinuous","xyEnsureGrowingX","gsdPeaks","ml_gsd_1","gsd","gsdPeak","checkArrayLength","BaseRegression","predict","_predict","xVal","train","toLaTeX","score","ySum","chi2","rmsd","xSquared","ySquared","xY","maybeToPrecision","figures","toPrecision","SimpleLinearRegression","yObj","coefficients","numerator","regress","toJSON","computeX","xFactor","absIntercept","load","json","PowerRegression","pr","xl","yl","linear","newInputs","latex","peaksWidth_1","peaksWidth","widths","regression","ml_regression_power_1","regressionChart","fit","predictFct","tex","Spectrum_1","Spectrum","fromPeaks","is_any_array_1","xy_parser_1","getPeaksWithCharge_js_1","isContinuous_js_1","peaksWidth_js_1","defaultData","scaleY","intensity","rescaleX","ensureOriginalX","xOriginal","normedY","total","getBestPeaks","peakPicking_js_1","getBestPeaks_js_1","getFragmentPeaksFct","MSComparator_1","normalizeAndCacheData","dataXY","minIntensity","xyFilterMinYValue","xyFilterTopYValues","returnSimilarity","aligned","massPower","intensityPower","minNbCommonPeaks","nbCommonPeaks","nbPeaks2","nbPeaks1","tanimoto","cosine","selectedMasses","xyArrayAlign","dataXY1","dataXY2","bestPeaks","numberDigits","showMF","numberMFs","mfPrefs","displayCharge","displayProperties","mfColors","color","annotations","annotation","type","_highlight","dy","props","rx","ry","fillOpacity","toFixed","textLine","dx","labels","currentMfPrefs","numberOfMFS","getColor","jsgraph","JsGraph","appendFragmentsInfo","experimentalSpectrum","database","onStep","fragments","nbFound","intensityFound","assignments","possibleMFs","bestMF","lib","arguments","toSum","estimate","filterFct","canonizeMF","rawIonizations","filterFctVariables","variables","sizes","evolution","appendResult","uniqueMFsObject","ems","getMonoisotopicMass","getEMFromParts","sum_object_keys_1","default","links","sharps","anchors","xAtomicNumber","getXAtomicNumber","molecule","OCL","getOCL","Molecule","getAtomicNoFromLabel","cPseudoAtomX","isCsp3","atomID","getAtomicNo","getAtomCharge","getImplicitHydrogens","getConnAtoms","makeRacemic","ensureHelperArrays","cHelperCIP","getAllAtoms","getAtomParity","cAtomParityNone","setAtomESR","cESRTypeAnd","tagAtom","iAtom","customLabel","getAtomLabel","setAtomCustomLabel","setAtomicNo","setAtomMass","getAtomMass","FULL_HOSE_CODE","getHoseCodesForAtomsAsFragments","allowedCustomLabels","minSphereSize","maxSphereSize","tagAtoms","tagAtomFct","rootAtoms","getCompactCopy","setAtomMapNo","cHelperNeighbours","mapping","getAtomMapNo","internalTagAtoms","getAtomCustomLabel","mappings","atomMask","atomList","sphere","rootAtom","newMax","getAllConnAtoms","connAtom","getConnAtom","fragment","copyMoleculeByAtoms","removeExplicitHydrogens","addQueryFeaturesAndRemoveMapNo","isAromaticAtom","setAtomQueryFeature","cAtomQFAromatic","cAtomQFNotAromatic","getAtomRingSize","cAtomQFRingSize3","cAtomQFRingSize4","cAtomQFRingSize5","cAtomQFRingSize6","cAtomQFRingSize7","cAtomQFRingSizeLarge","nbHydrogens","getAllHydrogens","cAtomQFNot0Hydrogen","cAtomQFNot1Hydrogen","cAtomQFNot2Hydrogen","cAtomQFNot3Hydrogen","ensureMapNo","existingMapNo","mapNo","nextMapNo","getConnectivityMatrix","pathLength","atomicNo","negativeAtomicNo","cRoundedMass","sdt","getConnBondOrder","sdta","bondNumber","getConnBond","isAromaticBond","adjMatrix","isMatrix","numVertices","distMatrix","apply","is","dist","floydWarshall","getCompactCopyWithoutCustomLabels","tempMolecule","getHoseCodesForAtomsAsStrings","hoses","getCanonizedIDCode","CANONIZER_ENCODE_ATOM_CUSTOM_LABELS","getChiralOrHeterotopicCarbons","internalMolecule","addImplicitHydrogens","cHelperSymmetryStereoHeterotopicity","getAtoms","getStereoBond","getNeighbourSymmetries","stereoBond","getAtomPreferredStereoBond","setBondType","cBondTypeUp","getBondAtom","setBondAtom","addPossibleChiralBonds","neighbourSymmetries","symmetryRank","getSymmetryRank","ensureHeterotopicChiralBonds","esrType","atLeastThreeAtoms","cHelperBitNeighbours","heterotopicCarbons","TopicMolecule","originalMolecule","idCode","maxPathLength","maxNbAtoms","logger","getIDCode","setAtomNoInMapNo","molecules","moleculeWithH","getHoseCodesForPath","topicMolecule","minPathLength","toAtomicNo","fromAtomicNo","atomsPaths","fromAtom","fromDiaID","diaIDs","paths","pathOfSpecificLength","path","toAtom","toDiaID","getCanonizedHoseCodesForPath","getHoseFragment","sphereSize","getAtomPathsFrom","atomPaths","atomPathValue","atomPath","getAtomPaths","atom1","atom2","maxDistance","allAtomsPaths","oneAtomPaths","nextIndexes","nextAtoms","currentIndexes","currentAtoms","previousPath","conn","connectedAtom","getAllAtomsPaths","toMolfile","version","toMolfileV3","getMolecule","fromMolecule","canonizedDiaIDs","canonizedHoseCodes","getMoleculeWithH","xMolecule","xAtomNumber","getXMolecule","finalRanks","getDiaIDsObject","groupDiastereotopicAtomIDsAsObject","hoseCodes","diaMol","heterotopicSymmetryRanks","rank","diaID","getCanonizedDiaIDs","getCanonizedHoseCodes","distanceMatrix","diaIDsAndInfo","newDiaIDs","newDiaID","attachedHydrogensIDCodes","attachedHydrogens","nbAttachedHydrogens","atomLabel","nbEquivalentAtoms","heavyAtom","atomMapNo","hydrogenDiaID","getDiaIDsAndInfo","symmetryRanks","getHeterotopicSymmetryRanks","getFinalRanks","toMolfileWithH","toMolfileWithoutH","atomsToDelete","getExplicitHydrogens","deleteAtoms","getGroupedDiastereotopicAtomIDs","groupDiastereotopicAtomIDs","getDiaIDsMapping","originalDiaIDs","destinationDiaIDs","destinationDiaID","originalDiaID","newIDCode","oldIDCode","oldHydrogenIDCode","newHydrogenIDCode","diaIDsObject","oclID","existingAtoms","heavyAtoms","customLabels","attachedHydrogensCustomLabels","heavyAtomsCustomLabels","connected","heavyAtomCustomLabel","attachedHydrogenCustomLabel","diaIDObject","getSymmetryRanks","getDiastereotopicAtomIDs","numberAtoms","ids","getDiastereotopicAtomIDsAndH","hydrogenOCLIDs","getHoseCodesForAtoms","maxLength","originalFrom","originalTo","originalAtoms","torsion","getPath","calculateTorsion","tag1","tag2","atomMap","getUnit","unit","markMonomer","addBond","firstAtomicNo","secondAtomicNo","checkEntity","nbR1","nbR2","r1AtomicNo","r2AtomicNo","getR1R2AtomicNo","r1Count","r2Count","cPseudoAtomsRGroups","pl","copyMolecule","Z","Bt","getIDCodeAndCoordinates","navigator","clipboard","writeText","coordinates","pasteMolecule","US","zo","padStart","Oc","T9","globalThis","devicePixelRatio","O2","ctx","textAlign","textBaseline","currentFontSize","currentFont","font","currentColor","currentLineWidth","canvasCache","Map","clearRect","ot","Ft","getBackgroundRGB","getForegroundRGB","getSelectionBackgroundRGB","getLineWidth","setRGB","fillStyle","strokeStyle","setFont","getFontSize","getBounds","measureText","actualBoundingBoxLeft","actualBoundingBoxAscent","actualBoundingBoxRight","drawString","fillText","drawCenteredString","setLineWidth","lineWidth","fillRectangle","fillRect","fillCircle","beginPath","arc","drawLine","moveTo","lineTo","stroke","drawPolygon","getX","getY","getSize","drawRectangle","strokeRect","fillPolygon","drawImage","p1","Rt","i1","o1","document","createElement","n0","imageData","N0","getContext","globalAlpha","putImageData","isDarkBackground","Hl","canvasElement","changeListener","drawContext","getCanvasWidth","getCanvasHeight","getDrawContext","onChange","what","isUserEvent","getClipboardHandler","sS","CSSStyleSheet","replaceSync","Gc","button","fireMouseEvent","offsetX","offsetY","shiftKey","ctrlKey","altKey","pointerId","MOUSE_EVENT_RELEASED","addEventListener","MOUSE_EVENT_PRESSED","MOUSE_EVENT_CLICKED","detail","MOUSE_EVENT_ENTERED","MOUSE_EVENT_EXITED","MOUSE_EVENT_DRAGGED","MOUSE_EVENT_MOVED","removeEventListener","Ml","setDimensions","style","lS","Jc","create","Vl","HOTSPOT_32","IMAGE_NAME_32","cPointerCursor","cTextCursor","getCursor","buildCursor","El","title","rootElement","dialogElement","setLayout","hLayout","TS","vLayout","component","createTextField","Yc","createLabel","zc","createComboBox","Kc","createCheckBox","Xc","setEventConsumer","consumer","showMessage","alert","showDialog","getBoundingClientRect","assign","marginBlock","left","right","body","parentElement","clientWidth","offsetTop","getRootNode","append","display","gridTemplateColumns","gridTemplateRows","preventDefault","fireOk","M0","gridColumn","gridRow","getElement","flexDirection","gap","textContent","fireCancel","showModal","disposeDialog","remove","G2","setEventHandler","eventHandler","fireEvent","setText","getText","selectedIndex","setEnabled","disabled","addItem","getSelectedIndex","setSelectedIndex","setSelectedItem","getSelectedItem","removeAllItems","innerHTML","setEditable","checked","checkBox","isSelected","setSelected","Yo","dataView","DataView","getWidth","getHeight","getRGB","getInt32","setInt32","toDataURL","Sl","dialogRoot","JavaEditorArea","register","javaUiHelper","cursorManager","grabFocus","focus","preventScroll","setCursor","cursor","showHelpDialog","createImage","ImageData","createImageFromBase64","LS","Uint8ClampedArray","createDialog","runLater","requestAnimationFrame","setImmediate","setTimeout","cS","readOnly","initialMode","initialFragment","dataset","openchemlibCanvasEditor","alignItems","backgroundColor","touchAction","userSelect","webkitUserSelect","attachShadow","adoptedStyleSheets","Se","Xe","tabIndex","outline","dA","JP","MODE_REACTION","MODE_MULTIPLE_FRAGMENTS","YPt","pA","setFragment","setMolecule","setReaction","setEditorArea","J2","z2","repaint","Y2","ResizeObserver","contentRect","observe","K2","X2","Z2","platform","metaKey","KEY_CTRL","KEY_ALT","KEY_SHIFT","KEY_DELETE","KEY_HELP","KEY_ESCAPE","KEY_ENTER","codePointAt","zPt","fireKeyEvent","KEY_EVENT_PRESSED","KEY_EVENT_RELEASED","clipboardData","fromText","addPastedOrDropped","yS","editorArea","toolbar","uiHelper","destroy","disconnect","KPt","parseInt","fromCodePoint","j8","XPt","mS","programName","keepIdCode","af","compatMode","clearTimeout","setInterval","clearInterval","RegExp","_Pt","Ko","Xo","cr","tD","Wc","_c","$c","eD","Il","AD","tw","ew","Aw","gi","D0","nw","Pw","rw","iw","Zo","fw","Dw","uw","Qw","ow","Uw","Lw","Nl","yw","lw","hw","Tw","cw","ww","gw","dw","Bw","vw","Fw","CS","G","ES","Ol","W2","kw","Wo","c9","bw","Rw","JA","jw","pw","Cw","Hw","Mw","Vw","Ew","Sw","qw","_2","_o","Iw","nD","$2","xw","Nw","Gl","di","Jl","zl","Yl","PD","Kl","Xl","Zl","rD","iD","wr","gr","Wl","$o","Ow","Zt","Gw","Jw","_l","zw","Yw","Kw","Xw","Zw","Ww","_w","YS","ao","$w","$l","aS","eb","e1","BO","tq","vO","al","zP","tU","LA","nq","nc","FG","_q","rq","tu","fU","f1","Tu","LP","ju","t3","smartsMode","skipCoordinateTemplates","makeHydrogenExplicit","noCactvs","singleDotSeparator","createSmartsWarnings","yc","fX","aw","BU","fD","t7","eu","e7","m9","e3","dr","eU","A7","n7","A3","n3","I0","sP","u0","Uq","rA","Mi","P7","br","r7","i7","BA","r3","f7","D7","LQ","c0","Ou","vi","xL","u7","Fp","Et","i3","yD","Q7","lP","f3","DD","Au","exec","Az","Tq","fi","w9","C1","o7","cq","AU","nU","PU","gq","X","uD","U7","J","ye","Ae","Ht","$1","o","D3","QD","nu","J0","Pu","L7","s7","kq","fN","Gi","X8","yB","IJ","y7","ba","l7","OU","h7","T7","c7","w7","g9","g7","d7","GL","oD","L1","Fi","UD","T","B7","Ki","mi","p8","YP","rU","v7","LD","u3","Cu","iU","F7","KP","m7","o3","MB","k7","Su","jb","kt","pt","vA","d0","qe","Bn","sD","mD","b7","U3","FA","R7","lD","zA","J1","X3","vr","Fr","mr","j7","_4","L3","$4","ki","Dl","kr","wo","p7","XP","DU","C7","H7","MU","M7","gB","y3","C8","l3","V7","ru","V0","E7","bi","j3","S7","Jq","KS","od","jI","vI","BI","iu","bv","uU","K1","X1","h3","q7","T3","db","Rq","R0","HU","c3","d9","mA","fu","Du","cb","x5","I7","Nn","ut","uu","CU","Xq","w3","E0","w0","x7","N7","Zq","Ho","Mo","g3","ZT","hE","bo","QU","Ni","O7","Rr","iA","c1","yP","Qu","ou","Ri","X0","oU","Ia","hD","AX","UU","xO","TD","Uu","G7","ZP","J7","Ze","z7","Y7","K7","LU","cD","X7","Z7","sU","d3","ji","W7","un","yn","We","wD","Pn","_7","jD","$7","a7","Al","B3","At","tg","eg","Pf","xt","CA","v3","Ag","ng","ln","Pg","rg","$a","ig","Co","gL","Mj","z1","Ti","yU","Bl","lU","H4","qA","fg","Gf","$A","Dg","v8","hU","Vr","jr","Lu","ug","hP","Qg","TU","og","Ug","Lg","sg","cU","wU","qU","E1","pi","su","Bg","yg","B9","tv","lg","n9","yu","h2","H8","O1","F3","lu","t0","hg","gt","QI","i6","Be","Ie","TP","m3","k3","Hi","gU","De","b3","dU","Tg","cg","gg","R3","i8","hu","$5","wB","DP","A0","dg","S0","WP","fd","o0","vg","Mm","Ff","qi","V2","Ur","U9","s9","Zi","Lz","Fg","cu","Xi","p3","fA","wu","mg","M8","wP","gn","kg","j0","bg","_P","vU","Rg","gD","jg","eP","pg","Cg","he","Hg","ke","vG","Mg","Vg","Eg","Sg","iG","xo","ud","C3","qg","uZ","rn","Ig","v9","no","V8","Tn","H3","y8","gu","l8","F9","M3","z0","P0","Vi","cn","$P","r0","Re","E8","V3","T8","cP","FU","a8","E3","mU","n6","FI","Xt","MV","HV","CV","Rz","YA","Rv","HA","_A","tL","du","xe","xg","wL","Ng","S8","an","Og","R","ZU","dt","JY","kU","UL","vn","ne","F1","kI","Gg","I3","bI","backingJsObject","x3","ld","Jg","CI","Nb","PG","N3","KB","CL","ue","I1","O3","mE","T0","zg","bU","OA","te","Yg","RU","Kg","Xg","createSymmetryRank","considerStereoheterotopicity","encodeAtomCustomLabels","encodeAtomSelection","assignParitiesToTetrahedralN","coordsAre3d","createPseudoStereoGroups","distinguishRacemicOrGroups","tieBreakFreeValenceAtoms","encodeAtomCustomLabelsWithoutRanking","neglectAnyStereoInformation","N1","e_","Zg","wj","Wg","_g","Vh","jc","Fn","dD","$H","VV","G3","Ei","le","q8","BD","Bu","WA","jU","II","EY","Qp","k9","pU","Ve","I8","$g","ag","Pt","ft","td","vu","vD","ed","NI","ze","Dd","FD","vF","Uc","Tc","Vc","Ps","wX","Ad","nd","Sb","Pd","OI","Mk","pR","rd","JI","Fu","sT","J3","On","Qd","kD","y5","Y8","WN","Ud","jv","$e","yx","Eq","KI","ub","V","Ld","yd","fn","z3","BB","ED","hd","Td","cd","Y3","K3","gP","wd","gd","dd","VU","x8","BG","Xh","M","RR","R1","Z3","MA","Bd","It","b9","d8","Qe","a0","EU","KF","ch","aI","k0","vd","e0","SU","Hu","Iu","Hd","Px","L","S","tt","W","$","st","fb","CD","E9","Dh","QB","ae","Rh","U","GD","mh","Em","uR","gT","VB","$d","PF","lY","HS","VS","Yy","Ky","Xy","Zy","s5","Qo","W9","qn","vt","rP","_O","MS","Jn","cl","A9","z8","of","NF","ab","eV","rT","R5","QA","_$","eh","QY","BJ","hj","p5","AL","bh","g_","SD","zy","BF","X6","KU","x9","IK","Mb","nX","Z5","nK","$t","Ib","yG","k4","L8","OZ","lJ","nJ","fy","oA","sh","IP","KL","HD","hb","kb","ib","lb","Ce","OD","YU","A5","wV","gV","Nx","Os","ott","nB","bD","Ii","Fd","R9","md","W3","Gr","xi","Fc","j9","RD","kd","oL","kv","bd","Rd","IU","jd","n5","pd","pF","Gn","pn","tn","qx","pe","LT","_3","vs","Cd","ox","p9","Hr","C9","ve","$3","tF","IL","ku","k1","f0","EA","Vk","Nv","kh","mk","UG","cW","Fe","R$","et","ht","wt","u1","Pi","uQ","wn","iT","Ka","Ha","SW","xU","Lc","NU","Md","Cc","Vd","Ec","IN","Ed","Sd","Y5","Ey","aP","KA","Nt","GU","JU","N8","pk","qd","Ne","Id","wy","dP","je","Wb","a3","Tj","xd","UF","JD","er","dl","Nd","Pc","EPt","Ye","Od","VPt","Gd","Ac","MPt","zn","Zc","bu","th","Mr","wx","K8","m1","gx","QL","$q","uv","BP","mQ","bL","Jd","zd","H9","mx","Yd","TA","Kd","Jt","Xd","G8","Ot","HL","HZ","pD","sL","t8","Zd","$8","sm","zU","j1","$k","q0","D5","DA","yK","Ah","Ru","nh","M9","Wd","vP","_d","oR","Ph","Fs","oe","ad","_5","He","To","M1","ci","l0","Hn","Yr","p0","EQ","J9","gm","nT","BW","ni","mR","kP","rs","hm","RQ","we","FP","I5","So","H_","tB","rt","ct","Kt","St","t1","Qt","bt","yt","Yt","V1","D1","Lt","jt","Q0","H1","s0","tR","aa","pu","O8","eB","Q8","Ix","AB","uA","PB","Bc","Gt","substr","e8","DL","Yn","A8","q9","Oi","rh","V9","ih","VL","rB","matchAtomCharge","matchAtomMass","matchDBondToDelocalized","matchAromDBondToDelocalized","tX","iB","fB","Oe","Kn","ff","J8","DB","XU","gy","fh","Yx","uB","WU","B0","Kx","uh","Mu","S9","qu","Zx","_U","oB","UB","qt","Ji","LB","cX","Qh","y4","$U","ko","bk","oh","VP","Db","sB","$O","aU","Wx","G1","lB","Uh","$x","qtt","CT","bY","Fq","Vu","hB","eL","O0","_0","TB","R4","Bp","Xn","Wt","Lh","Cn","AN","Ap","Sj","xQ","ZD","TR","bX","Ws","RK","ts","cB","xb","cL","dB","mn","VA","I9","n8","Eu","vB","Er","MD","Ic","Hc","oz","Ct","nL","FB","yh","lh","gh","v0","zi","hh","rR","vT","Ua","UN","Xr","Th","cy","mB","kB","PL","bB","rL","kn","P8","W0","Wr","RB","ZA","QT","jB","Fk","wh","Cj","iL","pB","Bs","Aj","CB","DE","ks","o4","uE","BV","QE","UW","VD","r8","RP","Ut","Tt","bn","wN","HB","P9","XD","Sc","mP","dN","mN","fL","zt","_t","cm","EB","Jk","U6","L6","dh","Bh","A6","wE","Kf","TE","AE","cE","nE","gE","PE","qB","ck","IB","xB","NB","pN","Y0","bA","N9","OB","GB","JB","HN","kx","bx","O9","Rx","zB","YB","uL","JG","zI","nF","Wz","Yi","XB","wm","i0","ZB","Zu","vh","WB","Sr","T1","_B","xA","Fh","HK","$B","G9","qD","removeAtIndex","Rn","RT","K9","ec","iP","fP","SI","Z9","bO","aB","SN","ip","v$","ID","LL","NN","dE","Wk","VO","lz","XI","EO","rI","YN","getAtIndex","jh","kA","ph","XE","ev","Sv","Av","xu","nv","Dc","Ue","UA","Pv","U1","F0","k6","qr","Nu","ZS","_8","Vz","bP","yr","Pr","Ms","Ch","Hh","rv","iv","$N","uc","Un","Qs","UZ","fv","Dv","zk","tE","eN","eE","Tl","Ju","Te","z_","Mh","Qv","ov","ET","tl","RI","ui","z9","Dn","Uv","vp","Zn","Tm","NW","yL","Rp","Lv","bb","us","AO","lL","IQ","L2","zY","qQ","fT","F_","Eh","HG","Tb","hx","iI","QG","pc","sv","Ax","$m","hL","TL","yv","Ir","Ym","$b","Sh","lv","Y9","hv","Tv","cv","vc","AG","WR","dL","BL","r5","VF","wv","vL","OY","FL","sA","gv","Gx","xD","dv","Ge","qh","SQ","w_","AZ","mL","JW","yk","kL","Bv","uO","on","YQ","o6","pp","vv","sc","ce","oO","D6","x$","Fv","mv","ND","xr","RL","UO","Me","Gu","Jv","$L","__elementTypeId$","Ih","xh","jL","IPt","Rm","pv","Cv","Hv","Mv","Vv","lO","fl","f8","Nh","Ev","_b","pL","TO","Sx","qv","WT","Z8","Mn","Iv","Je","Oh","mc","BT","Ln","Gh","xv","Qb","Ns","FO","p6","xp","i9","f9","D9","u9","Q9","s8","Rf","Yb","H$","Kj","E_","e5","fa","cY","Ov","mO","kO","Jh","_h","zh","mp","RO","Gv","Wi","hn","Yh","__elementTypeCategory$","MO","Kh","zv","XN","Ob","SO","Bb","ML","IE","xE","NE","a4","BE","h8","tc","K4","op","Yv","NO","zu","Kv","Xv","tA","X9","Nr","Zv","Wv","Kb","EL","Zh","Yu","jA","Wn","Ku","L9","qV","IV","_v","iy","SL","$v","qL","av","co","hN","KO","Rk","LK","uT","ZO","eF","AF","$G","aG","Dz","Xu","h1","U2","_r","sI","LI","wk","e$","rF","iF","NL","Wh","ca","Uf","RA","m6","wa","m5","mF","Lb","fF","ex","Om","DF","jN","NA","bf","Do","qf","XL","F8","oF","dn","FQ","F$","Xm","_n","configurable","defineProperties","uF","Kz","QF","OL","W8","Wu","_u","sn","_i","se","jn","Rs","LF","de","yb","me","E","ta","Fj","v1","tP","hA","C0","ly","PP","ei","ge","Qi","oi","fr","wT","ir","qP","o9","c8","Ao","J_","w8","r9","F6","Hf","ZQ","Mf","wtt","sF","JL","$i","zL","tf","yF","lF","hF","VT","YL","os","TF","cF","ZL","NZ","wF","PT","$h","Or","ah","TG","$u","gF","tT","dF","j2","WL","ZX","Qn","lr","kT","FF","Is","pE","jE","$J","lW","kF","eT","AT","SP","kG","bG","bF","RG","RF","jF","Ds","$r","__java$exception","au","CF","Dm","MG","HF","NP","ttt","delete","IG","EF","SF","yA","ej","w2","c2","Cf","IA","HR","BR","OV","ytt","YG","qF","tQ","NG","js","OG","IF","Z1","GG","_F","X4","sY","fE","jP","toArray","zG","xF","PR","OF","GF","JF","tJ","Oz","In","eQ","DT","AQ","contains","zD","Rb","zF","bp","Pl","YF","tN","TJ","rJ","nQ","XF","PQ","rQ","iJ","Am","ZF","DJ","WF","_L","dtt","D8","Fl","it","Dt","Jr","hi","Ee","PA","vtt","Btt","EV","iQ","e9","YD","$F","UJ","aF","LJ","tm","nx","bm","Ok","sJ","B1","d$","gp","bj","H2","F2","fQ","hJ","nm","Nc","aL","Pm","es","Cb","rm","DQ","OE","Io","jp","fm","um","Qm","Bj","Le","Ip","om","oT","Um","oY","As","mJ","SR","rX","UT","kp","Jf","XV","UQ","pP","gz","Lm","WI","hT","ef","ym","AW","zX","$n","Utt","lm","XG","QQ","VJ","stack","UY","xj","jY","Us","yT","ZN","VG","A$","KD","GE","vN","oQ","dm","D2","Bm","lT","Af","nf","vm","yQ","NJ","Hb","Fm","Tf","ns","K0","OJ","tI","eI","gN","zr","mm","km","Vj","LY","cT","hV","KV","jm","iE","qPt","RV","h4","JJ","hk","D$","zJ","nA","gK","Ttt","N$","lG","pm","Cm","kz","Hm","aJ","dT","ul","hR","YJ","CN","Lj","eR","KJ","XJ","py","Vm","dQ","yZ","oo","s$","nr","HPt","_K","bQ","o_","fj","WJ","Sm","_J","atan","eo","qm","Im","d6","B6","RE","TT","xm","Ks","yp","l$","Nm","K5","A4","B8","_V","Oy","Gy","n4","LV","Jy","r4","sV","i4","yV","lV","zT","_Q","$Q","Ui","Dy","uy","Qy","oy","l6","h6","aQ","g2","Uy","Ly","T6","c6","w6","WQ","pf","jf","Sn","KQ","XQ","lo","Dtt","htt","aV","WD","Gm","Jm","nt","zm","AP","ST","Km","uP","e2","Y1","sy","ee","Zr","pa","Ja","EJ","cQ","O5","Zm","vx","qq","rz","FN","Wm","fz","Kr","Ls","uz","Ay","Y4","KY","_m","G4","z4","J4","si","UV","gb","L$","Za","T2","fc","Oa","am","rf","tk","cc","sz","yz","ek","SX","_9","Ak","fs","CP","nk","Pk","Bz","vz","Fz","rk","HP","mz","_X","ik","g6","AA","B2","fk","vo","sQ","IR","wQ","fR","T_","wb","Es","dW","YY","ds","jz","AK","$R","Yz","FY","Dk","mtt","Ftt","ktt","pz","Cz","ob","hashCode","Mz","_D","Gb","XA","uk","Qk","ok","FT","Uk","acos","mT","Ez","xI","Lk","qz","az","sk","hQ","xZ","YC","Uo","da","itt","lk","Gz","bT","l5","C4","Bo","j4","p4","xV","k_","EI","lQ","Tk","m0","MP","vb","tb","$z","$D","$9","a9","eY","EP","or","Jx","W$","ss","gk","io","u8","GT","nY","En","Bk","fY","lA","Pe","vk","Df","yY","tr","sl","Ll","Ul","Ro","ll","containsKey","jT","mb","equals","hp","JV","wK","TQ","hl","Ett","jo","wz","bK","zZ","kX","Dj","vK","oV","t9","VZ","Ba","gY","BY","uf","jk","lR","vf","pT","qb","cA","lK","gQ","Ck","Hk","u2","JZ","BQ","JR","Qf","Ek","Sk","qk","yR","Zs","T5","Ik","HT","MT","zR","QR","xk","SV","Qc","oc","Nk","SY","kK","WY","qY","xf","ls","aD","NY","g0","qT","Gk","E2","t2","h$","IT","Yk","Ts","cs","$Y","Jb","Lo","Kk","ws","tK","Xk","Zk","il","Mc","_k","xT","vQ","NT","fo","w4","OT","gs","ak","FE","wA","vE","wY","A2","JQ","QW","ty","W_","kQ","ti","JT","ey","Yj","oK","Ab","YX","YT","Pb","wf","XT","rb","TK","cK","zS","FR","hG","KT","CQ","FK","mK","RJ","Ub","WV","sb","G_","CJ","gJ","cause","hc","suppressed","gc","jK","yf","_T","$T","U0","aT","b2","NV","lc","xK","tx","$$","Htt","SE","HE","CE","ME","VE","EE","t5","KG","oG","PY","g8","rY","KK","Vn","rE","XK","L0","execScript","n2","L4","iW","qo","tz","IY","o8","Fb","_R","_S","JS","KE","v2","E5","MW","GW","mZ","XX","Lf","eX","qE","i5","iX","W1","f5","pb","jO","Po","nj","sf","jR","GQ","G5","Vb","Eb","TX","u5","bs","jQ","dc","sG","o5","pQ","U5","cj","BX","Xa","r_","D_","yo","vX","L5","i2","f2","$W","xW","iR","jX","Bx","Vq","JO","oJ","VX","EX","ps","HQ","dK","IX","Cs","JX","dj","kR","Hs","M4","q4","E4","t4","x4","Fo","mo","V4","I4","S4","b6","N4","zC","WX","MQ","O4","TZ","Ma","$X","a$","Ga","tZ","eZ","zb","lf","rZ","Xb","Zb","iZ","e4","ZV","dJ","DZ","my","Sz","HX","QZ","$0","oZ","LZ","sZ","Q6","f4","dV","AR","nR","cZ","iz","eA","gl","uK","Eo","hO","b$","h5","wZ","dZ","hf","FZ","_j","uY","xz","DR","jZ","pZ","CZ","Rtt","c5","Vs","UR","SZ","LR","w5","IZ","sR","g5","vZ","hX","RZ","Js","n$","wG","d5","B5","cR","$j","Ny","wR","YE","JE","zE","v5","jy","_6","G6","pC","F5","gR","dR","kc","ez","k5","qs","HW","Gj","X5","PN","SJ","R_","aZ","eW","w$","o2","MX","U_","Wa","c$","nW","PW","fW","DW","VQ","b5","jW","zQ","oN","uW","kj","DK","xa","e6","oW","vR","cf","sW","wi","mV","ER","_W","Oj","Y_","ZW","bR","yy","hW","j5","TW","vW","CR","MR","VR","FW","mW","zO","DG","C5","y9","Xf","Ry","qR","kW","up","pW","$K","H5","CW","jJ","bq","Iq","Ss","La","VW","iK","xR","NR","OW","OR","M5","Py","GR","Sy","pX","atan2","XR","WE","pV","KW","XW","MZ","XO","d4","aX","Ptt","qZ","WW","Hz","Lp","x_","d_","q_","X_","cG","la","m$","aW","t_","Cp","TY","rr","Tz","btt","YR","V5","KR","HI","n_","P_","i_","S5","u_","ZR","aR","LX","s_","rj","tj","xS","f6","q5","y_","PX","Bf","df","c_","YW","V6","E6","Mp","S6","B_","v_","Pj","m_","j_","ij","f_","Hj","Ex","r6","Qj","Mx","tp","Vx","O_","bW","zW","p_","U8","M_","V_","as","Iy","lj","Ra","Uj","Ys","uj","zV","Sq","q$","vj","ZE","Q$","N_","VY","ltt","Xs","Sa","fK","L_","E$","Jj","__","Qa","oj","DH","Ep","CX","oH","LH","K_","BK","_1","zK","be","ga","a5","Vo","t$","p$","tY","IW","Ej","qa","SG","sa","B$","f$","Z_","Gs","sj","yj","GZ","Rj","XZ","xy","YK","ia","va","ie","Qr","Nf","i$","lN","cI","N5","u$","hY","hz","zs","I$","r$","stt","mj","RW","aj","k$","wW","A_","Fa","Nz","uo","KN","Pp","rN","dC","iN","ri","s6","y6","gj","GJ","qX","gW","NQ","utt","_a","OQ","Of","x6","J5","z5","jtt","g$","qj","T4","GV","pj","ZZ","_Y","ZC","WC","_C","$C","MY","aC","cO","tH","eH","hK","AH","BZ","_Z","PH","MK","ol","Yf","Ctt","Lr","B4","sr","_s","$s","rl","ZY","Ij","Ta","M$","cz","V$","GX","cN","$V","Vp","jV","lastIndexOf","jx","Nj","gG","G$","WZ","EK","qW","UK","Dp","nl","kV","z$","xG","PZ","rp","K$","oa","ZG","Z$","ny","Wj","zj","na","$I","_z","po","aK","TV","cV","Da","Xj","W5","kE","bE","rc","ic","Zj","H0","ya","ky","OO","KC","YZ","dG","XS","fZ","NPt","Qtt","vY","OPt","EW","asin","P$","kZ","ja","k2","q6","_p","OS","fp","go","g4","FX","Att","DN","cJ","dq","C$","QK","Va","AY","Tp","kY","Up","a_","U$","ma","ha","mY","sX","v6","NK","ntt","xJ","j6","QX","Kq","Stt","rK","t6","rV","M2","F4","ett","xX","Xp","N6","Cy","O6","iC","fC","DC","Hy","J6","uC","z6","Y6","QC","oC","UC","LC","sC","yC","lC","K6","hC","TC","cC","wC","gC","BC","Z6","vC","FC","mC","kC","W6","bC","RC","jC","My","$6","CC","HC","MC","VC","EC","SC","Vy","qC","IC","a6","xC","NC","OC","GC","JC","D4","u4","R2","Wy","_y","ur","If","rtt","yN","ra","ctt","za","Ya","I_","uq","ftt","rW","yW","tW","c4","By","vy","Fy","g1","h0","G0","GA","b0","w1","fe","Ke","gA","cx","wp","mI","UI","Ltt","bZ","ro","J$","$Z","v4","Q_","$p","tC","I6","eC","AC","PC","rC","b4","ptt","hr","m8","QP","oP","en","Tr","xn","An","P6","eK","Gp","Jp","zp","Yp","Kp","M6","Sp","qp","R6","nZ","T$","uV","QV","lE","UE","yE","LE","sE","oE","KZ","fJ","_G","UX","l9","Zf","lt","A1","k8","Wf","_f","$f","u6","Ql","sH","yH","lH","hH","TH","cH","wH","gH","dH","BH","vH","FH","mH","kH","bH","RH","jH","pH","CH","HH","MH","VH","EH","SH","qH","IH","xH","NH","OH","GH","JH","zH","YH","KH","XH","ZH","WH","_H","aH","tM","eM","AM","nM","PM","rM","iM","fM","DM","uM","QM","oM","UM","LM","sM","yM","lM","hM","TM","cM","wM","gM","dM","BM","vM","FM","mM","kM","bM","RM","jM","pM","CM","HM","MM","VM","EM","SM","qM","IM","xM","NM","OM","GM","JM","zM","YM","KM","XM","zf","$M","iV","fV","AV","DV","tV","wc","ml","kl","bc","nn","Rc","qc","OP","xc","b8","I2","aE","bl","tS","eS","AS","nS","n1","PS","rS","iS","h9","fS","GP","N2","Rl","No","DS","UP","jl","uS","Oo","QS","Go","oS","Jo","DO","R8","gZ","ZM","WM","qy","_M","aM","Mt","Vt","__moduleStartupDone","aA","kf","hy","Hp","Ty","C6","H6","by","Np","Op","Zp","Wp","Vf","Ef","XC","so","xP","rH","iH","fH","uH","QH","UH","nV","PV","Sf","ho","U4","vV","FV","$y","l4","ay","bV","el","C2","goog","global","GN","HJ","addAll","clear","containsAll","removeAll","retainAll","addAtIndex","addAllAtIndex","pG","setAtIndex","subList","iY","mX","rO","iO","compareTo","ordinal","Mtt","eJ","YV","aO","Vtt","AJ","NX","RX","rG","qJ","VK","drawDottedLine","xN","getCanMolecule","y$","getEncodedCoordinates","getEncodedMapping","getFinalRank","getGraphAtoms","getGraphIndexes","hasCIPParityDistinctionProblem","invalidateCoordinates","normalizeEnantiomer","setParities","getConformerCount","getNextConformerAsMolecule","Xx","getOneConformerAsMolecule","getPotentialConformerCount","hZ","initializeConformers","strategy","maxTorsionSets","use60degreeSteps","assessDruglikeness","S_","getDetail","aN","getDruglikenessString","DX","_minimise","getTotalEnergy","Ztt","Wtt","_tt","addAtom","addFragment","EN","addMissingChirality","addMolecule","addOrChangeAtom","addOrChangeBond","addRing","addRingToAtom","addRingToBond","addSubstituent","canonizeCharge","changeAtom","changeAtomCharge","changeBond","convertStereoBondsToSingleBonds","copyAtom","copyBond","copyMoleculeByBonds","copyMoleculeProperties","deleteAtom","deleteAtomOrBond","kJ","deleteBond","pI","deleteBondAndSurrounding","deleteMarkedAtomsAndBonds","deleteMolecule","deleteSelectedAtoms","findAlleneCenterAtom","findAlleneEndAtom","findAtom","findBINAPChiralityBond","findBond","findRingSystem","getAbsoluteAtomParity","getAbsoluteBondParity","wq","zq","getAllBonds","getAllConnAtomsPlusMetalBonds","getAromaticRingCount","YO","getAtomAbnormalValence","getAtomCIPParity","getAtomColor","getAtomESRGroup","getAtomESRType","getAtomList","getAtomListString","getAtomPi","getAtomQueryFeaturesObject","aromatic","notAromatic","notChain","not2RingBonds","not3RingBonds","not4RingBonds","noMoreNeighbours","moreNeighbours","matchStereo","not0PiElectrons","not1PiElectron","not2PiElectrons","not0Hydrogen","not1Hydrogen","not2Hydrogen","not3Hydrogen","not0Neighbours","not1Neighbour","not2Neighbours","not3Neighbours","not4Neighbours","notChargeNeg","notCharge0","noChargePos","ringSize0","ringSize3","ringSize4","ringSize5","ringSize6","ringSize7","ringSizeLarge","Ea","getAtomRadical","getAtomRingBondCount","getAtomRingCount","getAtomX","getAtomY","getAtomZ","getAverageBondLength","getAverageTopologicalAtomDistance","KX","getBond","getBondAngle","getBondBridgeMaxSize","getBondBridgeMinSize","getBondCIPParity","getBondESRGroup","getBondESRType","getBondLength","getBondOrder","getBondParity","getBondPreferredStereoBond","HY","getBondQueryFeatures","getBondQueryFeaturesObject","single","double","triple","delocalized","metalLigand","quadruple","quintuple","notRing","ring","nonAromatic","ringSize","brigdeMin","brigdeSpan","b_","getBondRingSize","getBondType","getBondTypeSimple","getBonds","zx","getChiralText","getChirality","getDefaultMaxValenceUncharged","WO","PK","getElectronValenceCorrection","getExcludedNeighbourCount","getFisherProjectionParity","getFragmentAtoms","getFragmentNumbers","getFragments","GO","Z4","getFreeValence","getHandleHydrogenMap","getHelperArrayStatus","getHoseCodes","pJ","getIDCoordinates","getImplicitHigherValence","getIndex","W4","getLowestFreeValence","getMaxAtoms","getMaxBonds","getMaxValence","getMaxValenceUncharged","getMetalBondedConnAtoms","getMolecularFormula","getMoleculeColor","getMolweight","CY","getName","getNonHydrogenNeighbourCount","getNumberOfHydrogens","PJ","getOccupiedValence","getPathBonds","getPathLength","getRingSet","getRotatableBondCount","getStereoCenterCount","getStereoProblem","getSubstituent","getSubstituentSize","getZNeighbour","invalidateHelperArrays","WS","inventCoordinates","skipDefaultTemplates","keepHydrogens","keepMarkedAtomCoordinates","preferMarkedAtomCoordinates","is3D","isAlkaliMetal","sO","isAllylicAtom","hI","isAmideTypeBond","OK","isAtomConfigurationUnknown","isAtomMarkedForDeletion","Wq","isAtomParityPseudo","isAtomStereoCenter","isAutoMappedAtom","isBINAPChiralityBond","isBondBackgroundHilited","isBondBridge","isBondForegroundHilited","isBondMarkedForDeletion","AI","isBondParityPseudo","isBondParityUnknownOrNone","isChalcogene","isDelocalizedBond","isEarthAlkaliMetal","yO","isElectronegative","isElectropositive","XY","isFlatNitrogen","isFragment","isHalogene","_N","isMarkedAtom","isMetalAtom","isNaturalAbundance","isNitrogenFamily","isOrganicAtom","isPseudoRotatableBond","isPurelyOrganic","pK","isRingAtom","isRingBond","isSelectedAtom","isSelectedBond","isSimpleHydrogen","mG","isSmallRingAtom","isSmallRingBond","isStabilizedAtom","TI","isStereoBond","markAtomForDeletion","markBondForDeletion","Pq","normalizeAmbiguousBonds","removeAtomColors","removeAtomCustomLabels","removeAtomMarkers","removeAtomSelection","Fx","removeBondHiliting","removeQueryFeatures","renumberESRGroups","scaleCoords","setAllAtoms","Qq","setAllBonds","oq","setAssignParitiesToNitrogen","xq","setAtomAbnormalValence","setAtomCIPParity","setAtomCharge","setAtomColor","setAtomConfigurationUnknown","setAtomList","setAtomMarker","setAtomParity","setAtomRadical","setAtomSelection","setAtomX","setAtomY","setAtomZ","setBondBackgroundHiliting","px","setBondCIPParity","setBondESR","setBondForegroundHiliting","Cx","setBondOrder","setBondParity","setBondParityUnknownOrNone","setBondQueryFeature","setChirality","setHelperValidity","SS","setHydrogenProtection","qS","setMaxAtoms","setMaxBonds","setMoleculeColor","IS","setName","setParitiesValid","setStereoBondFromAtomParity","setStereoBondFromBondParity","setStereoBondsFromParity","setToRacemate","setUnknownParitiesToExplicitlyUnknown","shareSameFragment","stripIsotopInfo","ZJ","stripSmallFragments","stripStereoInformation","suggestBondType","Qx","supportsImplicitHydrogen","swapAtoms","swapBonds","toIsomericSmiles","createSmarts","includeMapping","kekulizedOutput","toSVG","maxAVBL","inflateToMaxAVBL","inflateToHighResAVBL","chiralTextBelowMolecule","chiralTextAboveMolecule","chiralTextOnFrameTop","chiralTextOnFrameBottom","h_","noTabus","showAtomNumber","showBondNumber","highlightQueryFeatures","showMapping","suppressChiralText","suppressCIPParity","suppressESR","noCarbonLabelWithCustomLabel","noAtomCustomLabels","showSymmetryAny","showSymmetrySimple","showSymmetryStereoHeterotopicity","noImplicitAtomLabelColors","noStereoProblem","noColorOnESRAndCIP","noImplicitHydrogen","drawBondsInGray","o$","toSmarts","toSmiles","translateCoords","validate","zoomAndRotate","zoomAndRotateInit","f1t","u1t","o1t","L1t","s1t","y1t","l1t","V1t","I1t","z1t","Y1t","K1t","X1t","Z1t","$1t","a1t","t0t","e0t","r0t","i0t","u0t","o0t","L0t","s0t","y0t","h0t","T0t","c0t","g0t","d0t","v0t","F0t","m0t","b0t","R0t","H0t","M0t","q0t","I0t","x0t","N0t","O0t","G0t","J0t","z0t","W0t","_0t","$0t","a0t","eet","Aet","Bet","vet","ket","pet","qet","Jet","zet","Zet","nAt","kAt","bAt","RAt","jAt","pAt","CAt","acceptorCount","tG","donorCount","qG","logP","logPString","Pa","logS","SK","logSString","$_","polarSurfaceArea","HO","polarSurfaceAreaString","rotatableBondCount","stereoCenterCount","addCatalyst","addCatalystAt","mq","addProduct","addProductAt","yI","addReactant","addReactantAt","lI","clone","getCatalyst","Yq","getCatalysts","getHighestMapNo","getMergedCopy","uX","getMolecules","getProduct","getProducts","getReactant","getReactants","getReactionCenterMapNos","ka","yX","isPerfectlyMapped","X$","isReactionLayoutRequired","C_","removeCatalysts","bz","GS","toRxn","toRxnV3","lZ","validateMapping","S$","setReactant","l_","determineAromaticity","getAtomIndex","getBondIndex","uG","getHeteroPosition","Bq","getRingAtoms","getRingBonds","getRingSize","getSharedRing","isAromatic","isAtomMember","isBondMember","isDelocalized","vq","qualifiesAsAmideTypeBond","validateMemberIndex","getField","getFieldData","getFieldNames","aY","getNextFieldData","getNextMolFile","Y$","findFragmentInMolecule","countMode","gX","getMatchList","vJ","isFragmentInMolecule","setMol","createIndex","GK","kN","bN","getSmartsWarning","ux","parseMolecule","noCoordinates","noStereo","parseReaction","qN","setRandomSeed","NS","assessRisk","EZ","j$","applyTransformation","WG","lX","absoluteWeight","pO","formula","bJ","relativeWeight","CO","clearAll","getGenericEditorArea","getMode","getReaction","moleculeChanged","MJ","toolChanged","Ox","build16x16CursorImage","ZK","createNativeDialog","createPopupMenu","openChemistryFile","wO","xx","yJ","SPt","LN","getOrDefault","putIfAbsent","put","containsValue","keySet","putAll","QO","TN","eG","aq","QN","done","xPt","vl","dI","GY","uN","JK","Aa","Hx","DY","BACKBONE","NORMAL","NOSTEREO","NOSTEREO_TAUTOMER","TAUTOMER","STRATEGY_ADAPTIVE_RANDOM","STRATEGY_LIKELY_RANDOM","STRATEGY_LIKELY_SYSTEMATIC","STRATEGY_PURE_RANDOM","calculate","OX","DRUGLIKENESS_UNKNOWN","MMFF94","MMFF94S","MMFF94SPLUS","EDITOR_EVENT_HIGHLIGHT_ATOM_CHANGED","EDITOR_EVENT_HIGHLIGHT_BOND_CHANGED","EDITOR_EVENT_MOLECULE_CHANGED","EDITOR_EVENT_SELECTION_CHANGED","HOTSPOT_16","IMAGE_DATA_16","KEY_BACK_SPACE","MODE_DRAWING_OBJECTS","MODE_MARKUSH_STRUCTURE","TableLayoutFill","TableLayoutPreferred","cChainCursor","cDeleteCursor","cFistCursor","cHandCursor","cHandPlusCursor","cInvisibleCursor","cLassoCursor","cLassoPlusCursor","cPointedHandCursor","cSelectRectCursor","cSelectRectPlusCursor","cZoomCursor","CANONIZER_ASSIGN_PARITIES_TO_TETRAHEDRAL_N","CANONIZER_CONSIDER_DIASTEREOTOPICITY","CANONIZER_CONSIDER_ENANTIOTOPICITY","CANONIZER_CONSIDER_STEREOHETEROTOPICITY","CANONIZER_COORDS_ARE_3D","CANONIZER_CREATE_PSEUDO_STEREO_GROUPS","CANONIZER_CREATE_SYMMETRY_RANK","CANONIZER_DISTINGUISH_RACEMIC_OR_GROUPS","CANONIZER_ENCODE_ATOM_CUSTOM_LABELS_WITHOUT_RANKING","CANONIZER_ENCODE_ATOM_SELECTION","CANONIZER_NEGLECT_ANY_STEREO_INFORMATION","CANONIZER_TIE_BREAK_FREE_VALENCE_ATOMS","FISCHER_PROJECTION_LIMIT","FISCHER_PROJECTION_RING_LIMIT","STEREO_ANGLE_LIMIT","VALIDATION_ERRORS_STEREO","VALIDATION_ERROR_AMBIGUOUS_CONFIGURATION","VALIDATION_ERROR_ESR_CENTER_UNKNOWN","VALIDATION_ERROR_OVER_UNDER_SPECIFIED","cAtomCIPParityNone","cAtomCIPParityProblem","cAtomCIPParityRorM","cAtomCIPParitySorP","cAtomColorBlue","cAtomColorDarkGreen","cAtomColorDarkRed","cAtomColorGreen","cAtomColorMagenta","cAtomColorNone","cAtomColorOrange","cAtomColorRed","cAtomLabel","cAtomParity1","cAtomParity2","cAtomParityIsPseudo","cAtomParityUnknown","cAtomQFAny","cAtomQFAromState","cAtomQFAromStateBits","cAtomQFAromStateShift","cAtomQFCharge","cAtomQFChargeBits","cAtomQFChargeShift","cAtomQFDepictedFeatures","cAtomQFENeighbourBits","cAtomQFENeighbourShift","cAtomQFENeighbours","cAtomQFExcludeGroup","cAtomQFFlatNitrogen","cAtomQFHeteroAromatic","cAtomQFHydrogen","cAtomQFHydrogenBits","cAtomQFHydrogenShift","cAtomQFIsNotStereo","cAtomQFIsStereo","cAtomQFMatchStereo","cAtomQFMoreNeighbours","cAtomQFNarrowing","cAtomQFNeighbourBits","cAtomQFNeighbourShift","cAtomQFNeighbours","cAtomQFNewRingSize","cAtomQFNewRingSizeBits","cAtomQFNewRingSizeShift","cAtomQFNoMoreNeighbours","cAtomQFNoOfBits","cAtomQFNot0ENeighbours","cAtomQFNot0Neighbours","cAtomQFNot0PiElectrons","cAtomQFNot1ENeighbour","cAtomQFNot1Neighbour","cAtomQFNot1PiElectron","cAtomQFNot2ENeighbours","cAtomQFNot2Neighbours","cAtomQFNot2PiElectrons","cAtomQFNot2RingBonds","cAtomQFNot3ENeighbours","cAtomQFNot3Neighbours","cAtomQFNot3RingBonds","cAtomQFNot4ENeighbours","cAtomQFNot4Neighbours","cAtomQFNot4RingBonds","cAtomQFNotChain","cAtomQFNotCharge0","cAtomQFNotChargeNeg","cAtomQFNotChargePos","cAtomQFPiElectronBits","cAtomQFPiElectronShift","cAtomQFPiElectrons","cAtomQFRingSize0","cAtomQFRingState","cAtomQFRingStateBits","cAtomQFRingStateShift","cAtomQFRxnParityBits","cAtomQFRxnParityHint","cAtomQFRxnParityInvert","cAtomQFRxnParityRacemize","cAtomQFRxnParityRetain","cAtomQFRxnParityShift","cAtomQFSimpleFeatures","cAtomQFSmallRingSize","cAtomQFSmallRingSizeBits","cAtomQFSmallRingSizeShift","cAtomQFStereoState","cAtomQFStereoStateBits","cAtomQFStereoStateShift","cAtomRadicalState","cAtomRadicalStateD","cAtomRadicalStateNone","cAtomRadicalStateS","cAtomRadicalStateShift","cAtomRadicalStateT","cAtomValence","cBondCIPParityEorP","cBondCIPParityNone","cBondCIPParityProblem","cBondCIPParityZorM","cBondParityEor1","cBondParityNone","cBondParityUnknown","cBondParityZor2","cBondQFAllFeatures","cBondQFAromState","cBondQFAromStateBits","cBondQFAromStateShift","cBondQFAromatic","cBondQFBondTypes","cBondQFBondTypesBits","cBondQFBondTypesShift","cBondQFBridge","cBondQFBridgeBits","cBondQFBridgeMin","cBondQFBridgeMinBits","cBondQFBridgeMinShift","cBondQFBridgeShift","cBondQFBridgeSpan","cBondQFBridgeSpanBits","cBondQFBridgeSpanShift","cBondQFDelocalized","cBondQFDepictedFeatures","cBondQFDouble","cBondQFMatchFormalOrder","cBondQFMatchStereo","cBondQFMetalLigand","cBondQFNarrowing","cBondQFNoOfBits","cBondQFNotAromatic","cBondQFNotRing","cBondQFQuadruple","cBondQFQuintuple","cBondQFRareBondTypes","cBondQFRareBondTypesBits","cBondQFRareBondTypesShift","cBondQFRing","cBondQFRingSize","cBondQFRingSizeBits","cBondQFRingSizeShift","cBondQFRingState","cBondQFRingStateBits","cBondQFRingStateShift","cBondQFSimpleFeatures","cBondQFSingle","cBondQFTriple","cBondTypeCross","cBondTypeDeleted","cBondTypeDelocalized","cBondTypeDouble","cBondTypeDown","cBondTypeIncreaseOrder","cBondTypeMaskSimple","cBondTypeMaskStereo","cBondTypeMetalLigand","cBondTypeQuadruple","cBondTypeQuintuple","cBondTypeSingle","cBondTypeTriple","cChiralityDiastereomers","cChiralityEpimers","cChiralityIsomerCountMask","cChiralityKnownEnantiomer","cChiralityMeso","cChiralityNotChiral","cChiralityRacemic","cChiralityUnknown","cChiralityUnknownEnantiomer","cCommonOxidationState","cDefaultAVBL","cDefaultAllowedPseudoAtoms","cDefaultAtomValence","cESRGroupBits","cESRMaxGroups","cESRTypeAbs","cESRTypeOr","cHelperAll","cHelperBitCIP","cHelperBitIncludeNitrogenParities","cHelperBitParities","cHelperBitRings","cHelperBitRingsSimple","cHelperBitSymmetrySimple","cHelperBitSymmetryStereoHeterotopicity","cHelperBitsStereo","cHelperNone","cHelperParities","cHelperRings","cHelperRingsSimple","cHelperSymmetrySimple","cMaxAtomicNo","cMaxConnAtoms","cMoleculeColorDefault","cMoleculeColorNeutral","cPseudoAtomA","cPseudoAtomAttachmentPoint","cPseudoAtomPolymer","cPseudoAtomR","cPseudoAtomsAGroups","cPseudoAtomsAll","cPseudoAtomsAminoAcids","cPseudoAtomsHydrogenIsotops","fromIDCode","EG","fromMolfile","fromMolfileWithAtomMap","qI","fromSmiles","getAngle","getAngleDif","getDefaultAverageBondLength","isAtomicNoElectronegative","isAtomicNoElectropositive","setDefaultAverageBondLength","fromMolecules","fromRxn","O$","ua","pY","CATALYST_DELIMITER","INCLUDE_ALL","INCLUDE_CATALYSTS","INCLUDE_COORDS","INCLUDE_DEFAULT","INCLUDE_DRAWING_OBJECTS","INCLUDE_MAPPING","INCLUDE_RXN_CODE_ONLY","MOLECULE_DELIMITER","OBJECT_DELIMITER","PRODUCT_IDENTIFIER","RETAIN_REACTANT_AND_PRODUCT_ORDER","ensureCoordinates","eO","trunc","encode","keepAbsoluteCoordinates","sortByIDCode","oI","_register","MAX_SMALL_RING_SIZE","MODE_SMALL_AND_LARGE_RINGS","MODE_SMALL_AND_LARGE_RINGS_AND_AROMATICITY","MODE_SMALL_RINGS_AND_AROMATICITY","MODE_SMALL_RINGS_ONLY","bitCount","getHexStringFromIndex","CK","getIndexFromHexString","qK","getKeyIDCode","getSimilarityAngleCosine","dz","getSimilarityTanimoto","uJ","RISK_HIGH","RISK_LOW","RISK_NAMES","RISK_NO","RISK_UNKNOWN","TYPE_IRRITANT","TYPE_MUTAGENIC","TYPE_REPRODUCTIVE_EFFECTIVE","TYPE_TUMORIGENIC","getHoseCodesFromDiastereotopicID","WK","$isInstance","$implements__java_io_Serializable","$implements__java_lang_CharSequence","$implements__java_lang_Cloneable","$implements__java_lang_Comparable","java","lang","Number$impl","copyOf","LG","dO","qO","getIdentityHashCode","getNextHash","getObjectIdentityHashCode","toDoubleFromUnsignedInt","_E","GPt","nG","$gwt","fG","__errFn","__moduleName","__moduleBase","__softPermutationId","__computePropValue","permProps","$E","ZPt","Z0","GenericEditorArea","GenericEditorToolbar","GenericUIHelper","Reaction","ReactionEncoder","setOnChangeListener","removeOnChangeListener","isDestroyed","wS","CanvasEditor","registerCustomElement","customElements","HTMLElement","static","freeze","MOLECULE","REACTION","idcode","MODE_MOLECULE","readonly","setAttribute","removeAttribute","requestIdleCallback","MODE","CustomEvent","bubbles","dispatchEvent","connectedCallback","getAttribute","hasAttribute","disconnectedCallback","adoptedCallback","attributeChangedCallback","gS","define","head","prepend","ConformerGenerator","ForceFieldMMFF94","maxIts","gradTol","funcTol","minimise","changeCustomLabelPosition","dS","getNextCustomAtomLabel","BS","customLabelPosition","vS","includeCustomAtomLabelsAsALines","includeCustomAtomLabelsAsVLines","removeCustomAtomLabels","FS","kS","factorTextSize","autoCrop","autoCropMargin","fontWeight","strokeWidth","bS","RS","Resources","TextEncoder","registerFromUrl","URL","href","$Pt","fetch","fromEntries","process","getBuiltinModule","import","registerFromNodejs","readFileSync","jS","xut","Nut","Out","Gut","Canonizer","Jut","CanonizerUtil","zut","Yut","DrugScoreCalculator","Kut","DruglikenessPredictor","Xut","Zut","Wut","MoleculeProperties","_ut","$ut","aut","Reactor","tQt","eQt","RingCollection","AQt","SDFileParser","nQt","SSSearcher","PQt","SSSearcherWithIndex","rQt","SmilesParser","iQt","ToxicityPredictor","fQt","Transformer","DQt","Util","uQt","applyFragmentLabels","prefix","suffix","sssearcher","found","matches","fragmentAtomIndex","moleculeAtomIndex","label","autoLabelDatabase","raw","appendMolecule","core","rGroups","newSmiles","smiles","currentMol","combinedSmiles","molfile","nbHAcceptor","nbHDonor","PSA","nbRottable","nbStereoCenter","updateRPosition","rGroup","currentChar","currentSubstring","getCamelCase","parseColumnbProperties","columnProperties","currentColumnName","columnPropery","related","specialType","valueEhnhancer","header","rawEntry","atomMapping","idcoordinates2D","parseDefault","getAtomsInfo","extra","singleBonds","doubleBonds","tripleBonds","aromaticBonds","cnoHybridation","abnormalValence","cipParity","radical","ringBondCount","allHydrogens","connAtoms","allConnAtoms","implicitHydrogens","isAllylic","isStereoCenter","isRing","isSmallRing","isStabilized","bond","bondOrder","totalBonds","hydrogenOnAtomicNo","labileHydrogen","allAtoms","getFragmentMF","sortedKeys","toMFString","atomSorter","getUnsaturation","elementObject","defaultPossibleHints","anyMatches","remarks","getNMRHints","correct","proposed","hints","checkMF","checkUnsaturation","checkStereoAndTautomer","possibleHints","searcherCorrect","searcherAnswer","possibleHint","anyMatch","matchFragment","isMFCorrect","answer","nbCorrectRanks","nbAnswerRanks","checkSymmetry","hint","hash","getHash","mfCorrect","mfAnswer","unsaturationCorrect","unsaturationAnswer","getNoStereoIDCode","getTautomerIDCode","str","imul","toxicityPredictor","druglikenessPredictor","appendAtomPart","getPathAndTorsion","module","self","postMessage","IS_PAPA_WORKER","_handle","_finished","_completed","_halted","_input","_baseIndex","_partialLine","_rowCount","_start","_nextChunk","isFirstChunk","_completeResults","errors","meta","chunkSize","chunk","streamer","_config","parseChunk","skipFirstNLines","newline","quoteChar","guessLineEndings","beforeFirstChunk","paused","aborted","preview","workerId","WORKER_ID","finished","complete","_sendError","RemoteChunkSize","_readChunk","_chunkLoaded","stream","XMLHttpRequest","withCredentials","onload","onerror","_chunkError","open","downloadRequestBody","downloadRequestHeaders","setRequestHeader","send","status","readyState","responseText","getResponseHeader","statusText","LocalChunkSize","FileReader","webkitSlice","mozSlice","FileReaderSync","readAsText","pause","resume","_streamData","_streamEnd","_streamError","_checkIsFinished","_streamCleanUp","removeListener","skipEmptyLines","DefaultDelimiter","transformHeader","dynamicTypingFunction","dynamicTyping","code","abort","delimiter","RECORD_SEP","UNIT_SEP","successful","bestDelimiter","delimitersToGuess","getCharIndex","fastMode","escapeChar","BAD_DELIMITERS","linebreak","truncated","renamedHeaders","userError","file","userStep","userChunk","userComplete","terminate","worker","WORKERS_SUPPORTED","NODE_STREAM_INPUT","download","readable","read","File","webkitURL","BLOB_URL","createObjectURL","Blob","Worker","onmessage","config","unparse","quotes","escapeFormulae","BYTE_ORDER_MARK","Parser","ParserHandle","NetworkStreamer","FileStreamer","StringStreamer","ReadableStreamStreamer","jQuery","each","attr","files","inputElem","instanceConfig","extend","action","reason","getMoleculeCreators","smarts","defaultCSVOptions","__defProp","__name","segs","joinChar","splitChar","isValidObject","getValue","pathIsArray","pathIsString","separator","hasProp","index_default","sdfPart","currentLabels","include","exclude","modifiers","isNumeric","keep","modifiedValue","appendSDF","moleculesDB","sdf","mixedEOL","sdfString","workingSdf","forEachMap","entriesBoundaries","nextMatch","getEntriesBoundaries","boundary","currentLabel","always","statistics","pushEntry","updateStatistics","stat","noWait","resolve","AbortError","getQuery","query","format","moleculeCreators","search","exactSearch","exactSearchNoStereo","queryMW","getMW","searchResult","substructureSearchBegin","queryIndex","searcher","substructureSearchEnd","substructureSearch","substructureSearchOR","similaritySearch","processResult","searchAsync","interval","controller","shouldAbort","abortEventListener","signal","performance","subStructureSearchAsync","queryIDCode","candidateMolecule","queries","queryIdCode","copy","flattenResult","keepMolecule","rAtomicNumber","getRAtomicNumber","checkIfExistsOrAddInfo","processedMolecules","moleculeInfoCallback","asReagent","asProduct","exists","applyOneReactantReactions","tree","reactions","currentDepth","maxDepth","maxCurrentDepth","reactants","reactant","todoNextDepth","reaction","stats","limitReactions","reactor","oclReaction","oneReactionProducts","oneReactionProduct","reactionProduct","needToBeCharged","reactionWithoutOCL","oneReaction","children","getFilteredTrees","nodesToKeep","getNodes","parentMap","getParentMap","currentNode","getValidChildren","trees","nodes","validNodes","node","validChildren","child","appendLeavesSS","leaves","currentBranch","getNodesSS","Reactions","skipProcessed","moleculeInfo","appendHead","moleculesOrIDCodes","getLeaves","getValidNodes","getFilteredReactions","filteredReactions","clearAsFromProcessedMolecules","newReactions","rxnCode","appendOCLReaction","todoCurrentLevel","nexts","todo","flat","newNodes","computeProperties","keepEmptyMolecules","dataStatistics","calculatedStatistics","nbMolecules","nbData","calculated","statistic","isNumber","appendEntries","idCodePath","indexPath","coordinatesPath","mwPath","smilesPath","molfilePath","appendCSV","csv","Papa","firstElement","moleculeCreator","moleculeField","lowerField","appendSmilesList","smilesArray","oneSmiles","moleculeIDCode","getMoleculeIDCode","molecularFormula","pushMoleculeInfo","getDB","appendColor","dataLabel","propertyLabel","minHue","maxHue","saturation","lightness","colorLabel","datum","definedValues","coreSmiles","complexity","originalSmiles","getCore","getRGroups","getComplexity","mols","generate","getAlphaGamma","polymer","bonds","order","brokenMolecule","fragmentMap","nbFragments","includeAtom","currentSphere","diaIDsArray","destination","atomLabels","atomicNumbers","calculateDiastereotopicIDs","newMolfile","newMolfileWithH","hose","molfileWithH","moleculeWithHydrogens","fromF","toF","fromMoleculeF","toMoleculeF","toMolecule","fromFinalRanks","toFinalRanks","toFrom","fromRank","toRank","providedHints","providedHint","fromLabel","toLabel","withHOSES","fromAtomicNumber","toAtomicNumber","atomsInfo","pathLengthMatrix","includeToxicities","includeDruglikeness","moleculeFormula","mutagenic","tumorigenic","irritant","reproductiveEffective","drugLikeness","drugScore","tumurogenic","allShortestPaths","carbonyl","carbonOrHydrogen","neighbour","neighbourAtom","neighbourBond","hydroxyl","amine","getParts","headers","rawEntries","parseData","rawData","improveParts","heavyAtomHydrogen","svg","hydrogenInfo","groupedDiaIDs","diastereotopic","customAtomLabel","collapseHydrogens","copyH","labelMolecule","atomIndices","atomIndex","totalAtoms","isHydrogen","indexRemap","newIdx","highlight","_atoms","fragmentAcyclicBonds","calculateHoseCodes","parentIDCode","openchemlib_utils_1","cleavedBonds","getRingsInfo_1","getRingsInfo","ringSet","ringBonds","nbRingForBonds","bondIndex","ringIndex","nbRings","getFragmentableRings","ringsInfo","getRingsInfo_js_1","fragmentableRingBonds","second","getFragmentableRings_js_1","fragmentationResults","rLinks","acyclic","full","fragmentType","acyclicBonds","defaultDatabase","doi","section","description","web","isbn","software","dwar","parseDwar","defaultDatabase_js_1","minDepth","oclMolecule","minIonizations","maxIonizations","minReactions","maxReactions","openchemlib_1","observedMonoisotopicMass","getDatabase_1","getDatabase","reactionDb","REACT_ELEMENT_TYPE","Symbol","for","REACT_FRAGMENT_TYPE","jsxProd","maybeKey","propName","ref","$$typeof","reactJsxRuntime_production","Fragment","jsx","jsxs","jsxRuntimeModule","REACT_PORTAL_TYPE","REACT_STRICT_MODE_TYPE","REACT_PROFILER_TYPE","REACT_CONSUMER_TYPE","REACT_CONTEXT_TYPE","REACT_FORWARD_REF_TYPE","REACT_SUSPENSE_TYPE","REACT_MEMO_TYPE","REACT_LAZY_TYPE","REACT_ACTIVITY_TYPE","MAYBE_ITERATOR_SYMBOL","iterator","ReactNoopUpdateQueue","isMounted","enqueueForceUpdate","enqueueReplaceState","enqueueSetState","emptyObject","Component","context","updater","refs","ComponentDummy","PureComponent","isReactComponent","setState","partialState","forceUpdate","pureComponentPrototype","isPureReactComponent","isArrayImpl","noop","ReactSharedInternals","hasOwnProperty","ReactElement","refProp","isValidElement","userProvidedKeyEscapeRegex","getElementKey","escaperLookup","mapIntoArray","escapedPrefix","nameSoFar","oldElement","newKey","invokeCallback","_init","_payload","maybeIterable","nextNamePrefix","thenable","fulfilledValue","resolveThenable","mapChildren","lazyInitializer","payload","_status","ctor","_result","moduleObject","reportGlobalError","reportError","ErrorEvent","event","cancelable","emit","Children","forEachFunc","forEachContext","only","react_production","Activity","Profiler","StrictMode","Suspense","__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE","__COMPILER_RUNTIME","__proto__","useMemoCache","cacheSignal","cloneElement","childArray","createContext","defaultValue","_currentValue","_currentValue2","_threadCount","Provider","Consumer","_context","childrenLength","defaultProps","createRef","forwardRef","render","lazy","memo","compare","startTransition","scope","prevTransition","currentTransition","returnValue","onStartTransitionFinish","types","unstable_useCacheRefresh","useCacheRefresh","use","usable","useActionState","permalink","useCallback","deps","useContext","Context","useDebugValue","useDeferredValue","initialValue","useEffect","useEffectEvent","useId","useImperativeHandle","useInsertionEffect","useLayoutEffect","useMemo","useOptimistic","passthrough","reducer","useReducer","initialArg","useRef","useState","useSyncExternalStore","subscribe","getSnapshot","getServerSnapshot","useTransition","reactModule","React","formatProdErrorMessage","url","encodeURIComponent","Internals","findDOMNode","getCrossOriginStringAs","reactDom_production","__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE","createPortal","container","nodeType","containerInfo","implementation","createPortal$1","flushSync","previousTransition","previousUpdatePriority","preconnect","crossOrigin","prefetchDNS","preinit","integrity","fetchPriority","precedence","nonce","preinitModule","preload","referrerPolicy","imageSrcSet","imageSizes","media","preloadModule","requestFormReset","form","unstable_batchedUpdates","useFormState","useFormStatus","useHostTransitionStatus","checkDCE","__REACT_DEVTOOLS_GLOBAL_HOOK__","err","reactDomModule","heap","parentIndex","peek","halfLength","leftIndex","rightIndex","sortIndex","unstable_now","localPerformance","localDate","initialTime","taskQueue","timerQueue","taskIdCounter","currentTask","currentPriorityLevel","isPerformingWork","isHostCallbackScheduled","isHostTimeoutScheduled","needsPaint","localSetTimeout","localClearTimeout","localSetImmediate","advanceTimers","currentTime","timer","startTime","expirationTime","handleTimeout","isMessageLoopRunning","schedulePerformWorkUntilDeadline","firstTimer","requestHostTimeout","taskTimeoutID","frameInterval","shouldYieldToHost","performWorkUntilDeadline","hasMoreWork","previousPriorityLevel","priorityLevel","continuationCallback","MessageChannel","channel","port","port2","port1","unstable_IdlePriority","unstable_ImmediatePriority","unstable_LowPriority","unstable_NormalPriority","unstable_Profiling","unstable_UserBlockingPriority","unstable_cancelCallback","task","unstable_forceFrameRate","fps","unstable_getCurrentPriorityLevel","unstable_next","unstable_requestPaint","unstable_runWithPriority","unstable_scheduleCallback","delay","unstable_shouldYield","unstable_wrapCallback","parentPriorityLevel","schedulerModule","Scheduler","ReactDOM","isValidContainer","getNearestMountedFiber","fiber","nearestMounted","alternate","return","flags","getSuspenseInstanceFromFiber","suspenseState","memoizedState","dehydrated","getActivityInstanceFromFiber","activityState","assertIsMounted","findCurrentHostFiberImpl","sibling","REACT_LEGACY_ELEMENT_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_MEMO_CACHE_SENTINEL","getIteratorFn","REACT_CLIENT_REFERENCE","getComponentNameFromType","displayName","innerType","ReactDOMSharedInternals","sharedNotPendingObject","pending","method","valueStack","createCursor","contextStackCursor","contextFiberStackCursor","rootInstanceStackCursor","hostTransitionProviderCursor","pushHostContainer","nextRootInstance","documentElement","namespaceURI","getOwnHostContext","tagName","getChildHostContextProd","popHostContainer","pushHostContext","JSCompiler_inline_result","popHostContext","HostTransitionContext","describeBuiltInComponentFrame","reentry","describeNativeComponentFrame","construct","previousPrepareStackTrace","prepareStackTrace","RunInRootFrame","DetermineComponentFrameRoot","Fake","control","x$1","x$2","catch","sample","namePropDescriptor","getOwnPropertyDescriptor","_RunInRootFrame$Deter","sampleStack","controlStack","sampleLines","controlLines","frame","describeFiber","childFiber","getStackByFiberInDevAndProd","workInProgress","scheduleCallback$3","cancelCallback$1","shouldYield","requestPaint","getCurrentPriorityLevel","ImmediatePriority","UserBlockingPriority","NormalPriority$1","LowPriority","IdlePriority","log$1","unstable_setDisableYieldValue","rendererID","injectedHook","setIsStrictModeForDevtools","newIsStrictMode","setStrictMode","clz32","nextTransitionUpdateLane","nextTransitionDeferredLane","nextRetryLane","getHighestPriorityLanes","lanes","pendingSyncLanes","getNextLanes","root","wipLanes","rootHasPendingCommit","pendingLanes","nextLanes","suspendedLanes","pingedLanes","warmLanes","nonIdlePendingLanes","checkIfRootIsPrerendering","renderLanes","computeExpirationTime","lane","claimNextRetryLane","createLaneMap","initial","laneMap","markRootUpdated$1","updateLane","markSpawnedDeferredLane","spawnedLane","entangledLanes","spawnedLaneIndex","entanglements","markRootEntangled","rootEntangledLanes","index$8","getBumpedLaneForHydration","renderLane","getBumpedLaneForHydrationByLane","lanesToEventPriority","resolveUpdatePriority","updatePriority","getEventPriority","runWithPriority","priority","previousPriority","randomKey","internalInstanceKey","internalPropsKey","internalContainerInstanceKey","internalEventHandlersKey","internalEventHandlerListenersKey","internalEventHandlesSetKey","internalRootNodeResourcesKey","internalHoistableMarker","detachDeletedInstance","getClosestInstanceFromNode","targetNode","targetInst","parentNode","getParentHydrationBoundary","getInstanceFromNode","getNodeFromInstance","inst","stateNode","getResourcesFromRoot","resources","hoistableStyles","hoistableScripts","markNodeAsHoistable","allNativeEvents","registrationNameDependencies","registerTwoPhaseEvent","registrationName","dependencies","registerDirectEvent","VALID_ATTRIBUTE_NAME_REGEX","illegalAttributeNameCache","validatedAttributeNameCache","setValueForAttribute","attributeName","prefix$10","setValueForKnownAttribute","setValueForNamespacedAttribute","namespace","setAttributeNS","getToStringValue","isCheckable","elem","nodeName","track","_valueTracker","valueField","descriptor","enumerable","setValue","stopTracking","trackValueOnNode","updateValueIfChanged","tracker","lastValue","getActiveElement","doc","activeElement","escapeSelectorAttributeValueInsideDoubleQuotesRegex","escapeSelectorAttributeValueInsideDoubleQuotes","updateInput","lastDefaultValue","defaultChecked","setDefaultValue","initInput","isHydrating","ownerDocument","updateOptions","multiple","propValue","setDefaultSelected","defaultSelected","updateTextarea","initTextarea","setTextContent","firstChild","lastChild","nodeValue","unitlessNumbers","setValueForStyle","styleName","isCustomProperty","setProperty","cssFloat","setValueForStyles","styles","prevStyles","styleName$16","styleName$17","isCustomElement","aliases","isJavaScriptProtocol","sanitizeURL","noop$1","currentReplayingEvent","getEventTarget","nativeEvent","srcElement","correspondingUseElement","restoreTarget","restoreQueue","restoreStateOfTarget","internalInstance","querySelectorAll","otherNode","otherProps","isInsideEventHandler","batchedUpdates$1","flushSyncWork$1","getListener","canUseDOM","passiveBrowserEventsSupported","startText","fallbackText","startValue","startLength","endValue","endLength","minEnd","getEventCharCode","keyCode","charCode","functionThatReturnsTrue","functionThatReturnsFalse","createSyntheticEvent","Interface","SyntheticBaseEvent","reactName","reactEventType","nativeEventTarget","_reactName","_targetInst","currentTarget","isDefaultPrevented","defaultPrevented","isPropagationStopped","stopPropagation","cancelBubble","persist","isPersistent","lastMovementX","lastMovementY","lastMouseEvent","EventInterface","eventPhase","timeStamp","isTrusted","SyntheticEvent","UIEventInterface","view","SyntheticUIEvent","MouseEventInterface","screenX","screenY","clientX","clientY","pageX","pageY","getModifierState","getEventModifierState","buttons","relatedTarget","fromElement","toElement","movementX","movementY","SyntheticMouseEvent","SyntheticDragEvent","dataTransfer","SyntheticFocusEvent","SyntheticAnimationEvent","animationName","elapsedTime","pseudoElement","SyntheticClipboardEvent","SyntheticCompositionEvent","normalizeKey","Esc","Spacebar","Left","Right","Down","Del","Win","Menu","Apps","Scroll","MozPrintableKey","translateToKey","modifierKeyToProp","Alt","Control","Meta","Shift","modifierStateGetter","keyArg","SyntheticKeyboardEvent","location","locale","which","SyntheticPointerEvent","pressure","tangentialPressure","tiltX","tiltY","twist","pointerType","isPrimary","SyntheticTouchEvent","touches","targetTouches","changedTouches","SyntheticTransitionEvent","propertyName","SyntheticWheelEvent","wheelDeltaX","deltaY","wheelDeltaY","wheelDelta","deltaZ","deltaMode","SyntheticToggleEvent","newState","oldState","END_KEYCODES","canUseCompositionEvent","documentMode","canUseTextInputEvent","useFallbackCompositionData","SPACEBAR_CHAR","hasSpaceKeypress","isFallbackCompositionEnd","domEventName","getDataFromCustomEvent","isComposing","supportedInputTypes","date","datetime","email","month","password","tel","week","isTextInputElement","createAndAccumulateChangeEvent","dispatchQueue","accumulateTwoPhaseListeners","listeners","activeElement$1","activeElementInst$1","runEventInBatch","processDispatchQueue","getInstIfValueChanged","getTargetInstForChangeEvent","isInputEventSupported","JSCompiler_inline_result$jscomp$286","isSupported$jscomp$inline_427","element$jscomp$inline_428","oninput","stopWatchingForValueChange","detachEvent","handlePropertyChange","handleEventsForInputEventPolyfill","attachEvent","getTargetInstForInputEventPolyfill","getTargetInstForClickEvent","getTargetInstForInputOrChangeEvent","objectIs","shallowEqual","objA","objB","keysA","keysB","getLeafNode","getNodeForCharacterOffset","offset","nodeEnd","nextSibling","containsNode","outerNode","innerNode","compareDocumentPosition","getActiveElementDeep","defaultView","HTMLIFrameElement","contentWindow","hasSelectionCapabilities","contentEditable","skipSelectionChangeEvent","activeElementInst","lastSelection","mouseDown","constructSelectEvent","selectionStart","selectionEnd","anchorNode","getSelection","anchorOffset","focusNode","focusOffset","makePrefixMap","styleProp","eventName","prefixes","vendorPrefixes","animationend","animationiteration","animationstart","transitionrun","transitionstart","transitioncancel","transitionend","prefixedEventNames","getVendorPrefixedEventName","prefixMap","animation","transition","ANIMATION_END","ANIMATION_ITERATION","ANIMATION_START","TRANSITION_RUN","TRANSITION_START","TRANSITION_CANCEL","TRANSITION_END","topLevelEventsToReactNames","simpleEventPluginEvents","registerSimpleEvent","concurrentQueues","concurrentQueuesIndex","concurrentlyUpdatedLanes","finishQueueingConcurrentUpdates","endIndex","queue","update","markUpdateLaneFromFiberToRoot","enqueueUpdate$1","enqueueConcurrentHookUpdate","getRootForUpdatedFiber","enqueueConcurrentRenderForLane","sourceFiber","isHidden","childLanes","_visibility","hiddenUpdates","nestedUpdateCount","rootWithNestedUpdates","emptyContextObject","FiberNode","pendingProps","elementType","refCleanup","updateQueue","memoizedProps","subtreeFlags","deletions","createFiberImplClass","shouldConstruct","createWorkInProgress","firstContext","resetWorkInProgress","createFiberFromTypeAndProps","owner","fiberTag","hostContext","itemProp","rel","onLoad","onError","src","isHostHoistableType","createFiberFromFragment","createFiberFromText","content","createFiberFromDehydratedFragment","dehydratedNode","createFiberFromPortal","portal","pendingChildren","CapturedStacks","createCapturedValueAtFiber","forkStack","forkStackIndex","treeForkProvider","treeForkCount","idStack","idStackIndex","treeContextProvider","treeContextId","treeContextOverflow","pushTreeFork","totalChildren","pushTreeId","baseIdWithLeadingBit","baseLength","numberOfOverflowBits","pushMaterializedTreeId","popTreeContext","restoreSuspendedTreeContext","suspendedContext","overflow","hydrationParentFiber","nextHydratableInstance","hydrationErrors","rootOrSingletonContext","HydrationMismatchException","throwOnHydrationMismatch","queueHydrationError","prepareToHydrateHostInstance","instance","listenToNonDelegatedEvent","mediaEventTypes","suppressHydrationWarning","checkForUnmatchedText","popover","onScroll","onScrollEnd","onClick","onclick","popToNextHostParent","popHydrationState","JSCompiler_temp","shouldSetTextContent","getNextHydratableInstanceAfterHydrationBoundary","isSingletonScope","previousHydratableOnEnteringScopedSingleton","getNextHydratable","resetHydrationState","upgradeHydrationErrorsToRecoverable","queuedErrors","workInProgressRootRecoverableErrors","valueCursor","currentlyRenderingFiber$1","lastContextDependency","pushProvider","providerFiber","popProvider","scheduleContextWorkOnParentPath","propagationRoot","propagateContextChanges","contexts","forcePropagateEntireTree","nextFiber","dependency","propagateParentContextChanges","isInsidePropagationBailout","currentParent","checkIfContextChanged","currentDependencies","memoizedValue","prepareToReadContext","readContext","readContextForConsumer","readContextDuringReconciliation","AbortControllerLocal","AbortController","listener","scheduleCallback$2","NormalPriority","CacheContext","createCache","refCount","releaseCache","currentEntangledListeners","currentEntangledPendingCount","currentEntangledLane","currentEntangledActionThenable","pingEngtangledActionScope","prevOnStartTransitionFinish","globalMostRecentTransitionTime","entangledListeners","requestTransitionLane","entangleAsyncAction","resumedCache","peekCacheFromPool","cacheResumedFromPreviousRender","workInProgressRoot","pooledCache","pushTransition","offscreenWorkInProgress","prevCachePool","pool","getSuspendedCache","cacheFromPool","SuspenseException","SuspenseyCommitException","SuspenseActionException","noopSuspenseyCommitThenable","isThenableResolved","trackUsedThenable","thenableState","checkIfUseWrappedInAsyncCatch","shellSuspendCounter","fulfilledThenable","rejectedThenable","suspendedThenable","resolveLazy","lazyType","getSuspendedThenable","rejectedReason","thenableState$1","thenableIndexCounter$1","unwrapThenable","coerceRef","throwOnInvalidObjectTypeImpl","returnFiber","newChild","createChildReconciler","shouldTrackSideEffects","deleteChild","childToDelete","deleteRemainingChildren","currentFirstChild","mapRemainingChildren","existingChildren","useFiber","placeChild","newFiber","lastPlacedIndex","newIndex","placeSingleChild","updateTextNode","updateElement","updateFragment","updatePortal","createChild","updateSlot","oldFiber","updateFromMap","reconcileChildFibersImpl","newChildren","resultingFirstChild","previousNewFiber","nextOldFiber","reconcileChildrenArray","reconcileChildrenIterator","firstChildFiber","reconcileChildFibers","mountChildFibers","hasForceUpdate","initializeUpdateQueue","baseState","firstBaseUpdate","lastBaseUpdate","shared","hiddenCallbacks","callbacks","cloneUpdateQueue","createUpdate","enqueueUpdate","executionContext","entangleTransitions","queueLanes","enqueueCapturedUpdate","capturedUpdate","newLast","didReadFromEntangledAsyncAction","suspendIfUpdateReadFromEntangledAsyncAction","processUpdateQueue","workInProgress$jscomp$0","instance$jscomp$0","pendingQueue","lastPendingUpdate","firstPendingUpdate","isHiddenUpdate","workInProgressRootRenderLanes","workInProgressRootSkippedLanes","callCallback","commitCallbacks","currentTreeHiddenStackCursor","prevEntangledRenderLanesCursor","pushHiddenContext","entangledRenderLanes","baseLanes","reuseHiddenContextOnStack","popHiddenContext","suspenseHandlerStackCursor","shellBoundary","pushPrimaryTreeSuspenseHandler","handler","suspenseStackCursor","pushDehydratedActivitySuspenseHandler","pushOffscreenSuspenseHandler","reuseSuspenseHandlerOnStack","popSuspenseHandler","findFirstSuspended","isSuspenseInstancePending","isSuspenseInstanceFallback","revealOrder","currentlyRenderingFiber","currentHook","workInProgressHook","didScheduleRenderPhaseUpdate","didScheduleRenderPhaseUpdateDuringThisPass","shouldDoubleInvokeUserFnsInHooksDEV","localIdCounter","thenableIndexCounter","globalClientIdCounter","throwInvalidHookError","areHookInputsEqual","nextDeps","prevDeps","renderWithHooks","secondArg","nextRenderLanes","HooksDispatcherOnMount","HooksDispatcherOnUpdate","renderWithHooksAgain","finishRenderingHooks","ContextOnlyDispatcher","didRenderTooFewHooks","didReceiveUpdate","numberOfReRenders","lastEffect","events","stores","memoCache","HooksDispatcherOnRerender","TransitionAwareHostComponent","dispatcher","maybeThenable","useThenable","checkDidRenderIdHook","didRenderIdHook","bailoutHooks","resetHooksOnUnwind","mountWorkInProgressHook","hook","baseQueue","updateWorkInProgressHook","nextCurrentHook","nextWorkInProgressHook","basicStateReducer","updateReducer","updateReducerImpl","lastRenderedReducer","baseFirst","newBaseQueueFirst","newBaseQueueLast","didReadFromEntangledAsyncAction$60","revertLane","gesture","hasEagerState","eagerState","lastRenderedState","dispatch","rerenderReducer","lastRenderPhaseUpdate","updateSyncExternalStore","isHydrating$jscomp$0","snapshotChanged","updateEffect","subscribeToStore","pushSimpleEffect","updateStoreInstance","pushStoreConsistencyCheck","renderedSnapshot","nextSnapshot","checkIfSnapshotChanged","forceStoreRerender","latestGetSnapshot","scheduleUpdateOnFiber","mountStateImpl","initialStateInitializer","updateOptimisticImpl","dispatchActionState","actionQueue","setPendingState","isRenderPhaseUpdate","actionNode","isTransition","runActionStateAction","prevState","handleActionReturnValue","onActionError","error$66","onActionSuccess","notifyActionListeners","actionStateReducer","mountActionState","initialStateProp","ssrFormState","formState","JSCompiler_inline_result$jscomp$0","inRootOrSingleton","dispatchSetState","dispatchOptimisticSetState","updateActionState","updateActionStateImpl","stateHook","currentStateHook","actionStateActionEffect","rerenderActionState","updateRef","mountEffectImpl","fiberFlags","hookFlags","updateEffectImpl","mountEffect","updateEvent","componentUpdateQueue","useEffectEventImpl","nextImpl","impl","updateInsertionEffect","updateLayoutEffect","imperativeHandleEffect","updateImperativeHandle","mountDebugValue","updateCallback","updateMemo","nextCreate","mountDeferredValueImpl","requestDeferredLane","updateDeferredValueImpl","prevValue","pendingState","finishedState","thenableWithOverride","dispatchSetStateInternal","requestUpdateLane","startHostTransition","formFiber","formData","ensureFormComponentIsStateful","requestFormReset$1","existingStateHook","initialResetState","updateId","updateRefresh","refreshCache","provider","root$69","dispatchReducerAction","enqueueRenderPhaseUpdate","entangleTransitionUpdate","currentState","throwIfDuringRender","identifierPrefix","booleanOrThenable","applyDerivedStateFromProps","getDerivedStateFromProps","nextProps","classComponentUpdater","_reactInternals","checkShouldComponentUpdate","oldProps","newProps","nextContext","shouldComponentUpdate","callComponentWillReceiveProps","componentWillReceiveProps","UNSAFE_componentWillReceiveProps","resolveClassComponentProps","baseProps","propName$73","defaultOnUncaughtError","defaultOnCaughtError","defaultOnRecoverableError","logUncaughtError","errorInfo","onUncaughtError","componentStack","e$74","logCaughtError","onCaughtError","errorBoundary","e$75","createRootErrorUpdate","createClassErrorUpdate","initializeClassErrorUpdate","getDerivedStateFromError","componentDidCatch","legacyErrorBoundariesThatAlreadyFailed","SelectiveHydrationException","reconcileChildren","nextChildren","updateForwardRef","propsWithoutRef","bailoutOnAlreadyFinishedWork","updateMemoComponent","updateSimpleMemoComponent","checkScheduledUpdateOrContext","prevProps","updateFunctionComponent","updateOffscreenComponent","_pendingMarkers","_retryCache","_transitions","deferHiddenOffscreenComponent","cachePool","bailoutOffscreenComponent","nextBaseLanes","remainingChildLanes","mountActivityChildren","mountWorkInProgressOffscreenFiber","retryActivityComponentWithoutHydrating","markRef","replayFunctionComponent","updateClassComponent","contextType","getSnapshotBeforeUpdate","UNSAFE_componentWillMount","componentWillMount","componentDidMount","unresolvedOldProps","oldContext","contextType$jscomp$0","UNSAFE_componentWillUpdate","componentWillUpdate","componentDidUpdate","mountHostRootWithoutHydrating","SUSPENDED_MARKER","treeContext","retryLane","mountSuspenseOffscreenState","getRemainingWorkInPrimaryTree","primaryTreeDidDefer","workInProgressDeferredLane","updateSuspenseComponent","showFallback","didSuspend","canHydrateHydrationBoundary","nextPrimaryChildren","fallback","mountSuspensePrimaryChildren","retrySuspenseComponentWithoutHydrating","digest","dgst","renderDidSuspendDelayIfPossible","primaryChildren","offscreenProps","scheduleSuspenseWorkOnFiber","initSuspenseListRenderState","isBackwards","tail","lastContentRow","tailMode","renderState","rendering","renderingStartTime","updateSuspenseListComponent","suspenseContext","shouldForceFallback","beginWork","state$102","didSuspendBefore","attemptEarlyBailoutIfNoScheduledUpdate","isDehydrated","getResource","getOwnerDocumentFromRootContainer","setInitialProperties","resolveSingletonInstance","anyProps","canHydrateInstance","canHydrateTextInstance","updateActivityComponent","pooledCacheLanes","markUpdate","preloadInstanceAndSuspendIfNeeded","shouldRemainOnPreviousScreen","preloadResourceAndSuspendIfNeeded","resource","loading","preloadResource","scheduleRetryEffect","retryQueue","workInProgressSuspendedRetryLanes","cutOffTailIfNeeded","hasRenderedATailFallback","lastTailNode","lastTailNode$106","bubbleProperties","completedWork","didBailout","newChildLanes","child$107","completeWork","pendingContext","nextResource","createElementNS","removeChild","appendChild","autoFocus","createTextNode","listenToAllSupportedEvents","workInProgressRootExitStatus","workInProgressRootRenderTargetTime","unwindWork","unwindInterruptedWork","interruptedWork","commitHookEffectListMount","finishedWork","firstEffect","captureCommitPhaseError","commitHookEffectListUnmount","nearestMountedAncestor$jscomp$0","nearestMountedAncestor","destroy_","commitClassCallbacks","safelyCallComponentWillUnmount","componentWillUnmount","safelyAttachRef","instanceToUse","safelyDetachRef","error$140","commitHostMount","srcSet","srcset","commitHostUpdate","domElement","lastProps","propKey","lastProp","setProp","propKey$201","propKey$217","propKey$222","propKey$227","setPropOnCustomElement","propKey$232","updateProperties","isHostParent","getHostSibling","insertOrAppendPlacementNodeIntoContainer","insertBefore","_reactRootContainer","insertOrAppendPlacementNode","commitHostSingletonAcquisition","singleton","attributes","removeAttributeNode","offscreenSubtreeIsHidden","offscreenSubtreeWasHidden","needsFormReset","PossiblyWeakSet","WeakSet","nextEffect","commitLayoutEffectOnFiber","finishedRoot","recursivelyTraverseLayoutEffects","__reactInternalSnapshotBeforeUpdate","error$139","commitActivityHydrationCallbacks","commitSuspenseHydrationCallbacks","_reactRetry","registerSuspenseInstanceRetry","retryDehydratedSuspenseBoundary","prevOffscreenSubtreeWasHidden","recursivelyTraverseReappearLayoutEffects","detachFiberAfterEffects","hostParent","hostParentIsContainer","recursivelyTraverseDeletionEffects","commitDeletionEffectsOnFiber","deletedFiber","onCommitFiberUnmount","prevHostParent","prevHostParentIsContainer","releaseSingletonInstance","clearHydrationBoundary","retryIfBlockedOn","attachSuspenseRetryListeners","wakeables","retryCache","getRetryCache","wakeable","retry","resolveRetryWakeable","recursivelyTraverseMutationEffects","root$jscomp$0","parentFiber","commitMutationEffectsOnFiber","currentHoistableRoot","commitReconciliationEffects","hoistableRoot","currentResource","getElementsByTagName","querySelector","maybeNodes","getHydratableHoistableCache","httpEquiv","charSet","mountHoistable","acquireResource","tagCaches","getHoistableRoot","recursivelyResetForms","globalMostRecentFallbackTime","wasHidden","prevOffscreenSubtreeIsHidden","recursivelyTraverseDisappearLayoutEffects","hideOrUnhideDehydratedBoundary","hostParentFiber","parent$141","parent$143","reset","finishedRoot$jscomp$0","includeWorkInProgressEffects","commitOffscreenPassiveMountEffects","previousCache","commitCachePassiveMountEffect","recursivelyTraversePassiveMountEffects","committedLanes","committedTransitions","commitPassiveMountOnFiber","_finishedWork$memoize2","onPostCommit","passiveEffectDuration","recursivelyTraverseAtomicPassiveEffects","recursivelyTraverseReconnectPassiveEffects","committedLanes$jscomp$0","committedTransitions$jscomp$0","suspenseyCommitFlag","recursivelyAccumulateSuspenseyCommit","suspendedState","accumulateSuspenseyCommitOnFiber","matchMedia","getStyleKey","getStylesheetSelectorFromKey","onUnsuspend","stylesheetPropsFromRawProps","preloadPropsMap","adoptPreloadPropsForStylesheet","linkInstance","reject","stylesheets","suspendResource","previousHoistableRoot","detachAlternateSiblings","previousFiber","recursivelyTraversePassiveUnmountEffects","commitPassiveUnmountEffectsInsideOfDeletedTree_begin","commitPassiveUnmountOnFiber","recursivelyTraverseDisconnectPassiveEffects","deletedSubtreeRoot","DefaultAsyncDispatcher","getCacheForType","resourceType","cacheForType","PossiblyWeakMap","workInProgressSuspendedReason","workInProgressThrownValue","workInProgressRootDidSkipSuspendedSiblings","workInProgressRootIsPrerendering","workInProgressRootDidAttachPingListener","workInProgressRootInterleavedUpdatedLanes","workInProgressRootPingedLanes","workInProgressRootConcurrentErrors","workInProgressRootDidIncludeRecursiveRenderUpdate","workInProgressTransitions","pendingEffectsStatus","pendingEffectsRoot","pendingFinishedWork","pendingEffectsLanes","pendingEffectsRemainingLanes","pendingPassiveTransitions","pendingRecoverableErrors","cancelPendingCommit","prepareFreshStack","markRootSuspended","ensureRootIsScheduled","performWorkOnRoot","forceSync","shouldTimeSlice","expiredLanes","exitStatus","prevExecutionContext","prevDispatcher","pushDispatcher","prevAsyncDispatcher","pushAsyncDispatcher","thrownValue","throwAndUnwindWorkLoop","replaySuspendedUnitOfWork","hostFiber","completeUnitOfWork","resetWorkInProgressStack","workLoopConcurrentByScheduler","thrownValue$167","handleThrow","renderRootConcurrent","renderRootSync","renderWasConcurrent","isRenderConsistentWithExternalStores","errorRecoveryDisabledLanes","wasRootDehydrated","timeoutHandle","scheduleTimeout","commitRootWhenReady","recoverableErrors","transitions","didIncludeRenderPhaseUpdate","updatedLanes","suspendedRetryLanes","didSkipSuspendedSiblings","suspendedCommitReason","completedRenderStartTime","completedRenderEndTime","imgCount","imgBytes","suspenseyImages","waitingForImages","waitingForViewTransition","unsuspend","timeoutOffset","insertSuspendedStylesheets","commit","stylesheetTimer","estimatedBytesWithinLimit","getEntriesByType","bits","resourceEntries","transferSize","initiatorType","duration","isLikelyStaticResource","responseEnd","overlapEntry","overlapStartTime","overlapTransferSize","overlapInitiatorType","connection","downlink","estimateBandwidth","imgTimer","waitForCommitToBeReady","commitRoot","check","didAttemptEntireTree","expirationTimes","index$6","flushSyncWorkAcrossRoots_impl","cancelTimeout","allEntangledLanes","index$4","shouldYieldForPrerendering","unitOfWork","workLoopSync","thrownValue$165","performUnitOfWork","suspendedReason","rootRenderLanes","attachPingListener","markerInstances","wrapperError","throwException","unwindUnitOfWork","skipSiblings","flushPendingEffects","finishedLanes","remainingLanes","previouslyPendingLanes","index$7","hiddenUpdatesForLane","markRootFinished","callbackNode","callbackPriority","flushPassiveEffects","eventsEnabled","_enabled","selection","rangeCount","e$20","indexWithinAnchor","indexWithinFocus","selectionInformation","focusedElem","selectionRange","resolvedPrevProps","clearContainerSparingly","commitBeforeMutationEffects","flushMutationEffects","flushLayoutEffects","flushSpawnedWork","rootMutationHasEffect","priorSelectionInformation","curFocusedElem","priorFocusedElem","priorSelectionRange","win","start$jscomp$0","end$jscomp$0","startMarker","endMarker","createRange","setStart","removeAllRanges","addRange","setEnd","scrollLeft","scrollTop","rootHasLayoutEffect","releaseRootPooledCache","onCommitFiberRoot","onRecoverableError","recoverableError","renderPriority","onPostCommitFiberRoot","captureCommitPhaseErrorOnRoot","rootFiber","pingCache","threadIDs","pingSuspendedRoot","retryTimedOutBoundary","boundaryFiber","firstScheduledRoot","lastScheduledRoot","didScheduleMicrotask","mightHavePendingSyncWork","isFlushingWork","currentEventTransitionLane","scheduleMicrotask","processRootScheduleInImmediateTask","processRootScheduleInMicrotask","syncTransitionLanes","onlyLegacy","didPerformSomeWork","root$170","performSyncWorkOnRoot","currentPopstateTransitionEvent","shouldAttemptEagerTransition","scheduleTaskForRootDuringMicrotask","index$5","performWorkOnRootViaSchedulerTask","didTimeout","originalCallbackNode","workInProgressRootRenderLanes$jscomp$0","actionScopeLane","coerceFormActionProp","actionProp","createFormDataWithSubmitter","submitter","FormData","i$jscomp$inline_1577","eventName$jscomp$inline_1578","nonDelegatedEvents","eventSystemFlags","_dispatchQueue$i","previousInstance","i$jscomp$0","_dispatchListeners$i","listenerSetKey","addTrappedEventListener","listenToNativeEvent","isCapturePhaseListener","listeningMarker","rootContainerElement","targetContainer","listenerWrapper","dispatchDiscreteEvent","dispatchContinuousEvent","capture","passive","dispatchEventForPluginEventSystem","targetInst$jscomp$0","ancestorInst","nodeTag","grandTag","SyntheticEventCtor","inCapturePhase","accumulateTargetOnly","reactEventName","lastHostComponent","_instance","createDispatchListener","parentWindow","getParent","tempB","accumulateEnterLeaveListenersForEvent","getTargetInstFunc","handleEventFunc","fallbackData","eventType","getNativeBeforeInputChars","getFallbackBeforeInputChars","maybeTargetInst","formAction","extractEvents$1","targetFiber","captureName","_instance2","unshift","_instance3","NORMALIZE_NEWLINES_REGEX","NORMALIZE_NULL_AND_REPLACEMENT_REGEX","normalizeMarkupForTextOrAttribute","markup","serverText","clientText","formEncType","formMethod","formTarget","encType","__html","muted","hasSrc","hasSrcSet","propValue$184","parentNamespace","dangerouslySetInnerHTML","localPromise","queueMicrotask","handleErrorInNextTick","parentInstance","hydrationInstance","nextNode","node$jscomp$0","nextNode$jscomp$0","suspenseInstance","_stashedDisplay","_stashedText","targetInstance","previousSibling","rootContainerInstance","preconnectsSet","previousDispatcher","previousWasRendering","wasRendering","formInst","preconnectAs","globalDocument","preloadSelector","getScriptKey","getScriptSelectorFromKey","scripts","adoptPreloadPropsForScript","link","insertStylesheet","limitedEscapedHref","currentProps","preloadProps","styles$243","resource$244","hrefLang","rawProps","styleProps","instance$249","prior","stylesheetProps","scriptProps","keyAttribute","caches","nodeKey","precedencesByRoot","insertStylesheetIntoRoot","precedences","FiberRootNode","hydrate","onDefaultTransitionIndicator","incompleteTransitions","createFiberRoot","initialChildren","hydrationCallbacks","isStrictMode","getContextForSubtree","parentComponent","updateContainerImpl","markRetryLaneImpl","markRetryLaneIfNotHydrated","attemptContinuousHydration","attemptHydrationAtCurrentPriority","blockedOn","findInstanceBlockingEvent","return_targetInst","clearIfContinuousEvent","queuedFocus","accumulateOrCreateContinuousQueuedReplayableEvent","queuedDrag","queuedMouse","queuedPointers","queuedPointerCaptures","queueIfContinuousEvent","discreteReplayableEvents","findInstanceBlockingTarget","hasScheduledReplayAttempt","queuedExplicitHydrationTargets","existingQueuedEvent","targetContainers","attemptExplicitHydrationTarget","queuedTarget","attemptReplayContinuousQueuedEvent","queuedEvent","nextBlockedOn","nativeEventClone","attemptReplayContinuousQueuedEventInMap","replayUnblockedEvents","scheduleCallbackIfUnblocked","unblocked","lastScheduledReplayQueue","scheduleReplayQueueIfNeeded","formReplayingQueue","submitterOrAction","unblock","$$reactFormReplay","formProps","defaultOnDefaultTransitionIndicator","handleNavigate","canIntercept","pendingResolve","focusReset","scroll","handleNavigateComplete","isCancelled","startFakeNavigation","navigation","currentEntry","navigate","getState","history","ReactDOMRoot","internalRoot","_internalRoot","ReactDOMHydrationRoot","unmount","unstable_scheduleHydration","isomorphicReactPackageVersion$jscomp$inline_1840","componentOrElement","parentA","parentB","didFindChild","child$0","findCurrentFiberUsingSlowPath","internals$jscomp$inline_2347","bundleType","rendererPackageName","currentDispatcherRef","reconcilerVersion","hook$jscomp$inline_2348","isDisabled","supportsFiber","inject","reactDomClient_production","createRoot","unstable_strictMode","hydrateRoot","clientModule","calculatePosition","spacingVertical","spacingHorizontal","calculateInnerBoxSize","calculatePositionSS","childrenBoxSize","anchor","MultilineText","verticalPosition","firstDX","_jsx","_Fragment","Text","horizontalPosition","textAnchor","_jsxs","fontSize","Arrow","headInflectionPoint","refX","markerEnd","getArrows","arrows","getArrowsSS","getLabel","getID","getBoxes","boxes","appendBoxes","prepareTree","prepareTreeSS","nodeRenderer","nodeRendererOptions","shouldSkipBranch","elementAndSize","parents","MarkerDef","markerWidth","markerHeight","refY","orient","SVGBoxesTree","arrowRendererOptions","positionOptions","svgSize","xmlns","viewBox","Rectangle","SVG","getPlus","getSVGViewBox","maxWidth","maxHeight","getMoleculeStyle","svgs","svgTag","styleString","styleArray","hasOwn","kebabCaseProperty","styleObjectToString","styleRectange","addStyleToSVG","currentWidth","shiftX","shiftY","shiftedSVG","joinSVGs","topLabel","getTopLabel","getBoxStyle","minSize","taxonomy","tempElement","visibility","getStringSize","textWith","positionX","dominantBaseline","fontFamily","getTaxonomy","fontStyle","nbTaxonomies","getNbTaxonomies","accuracy","maxIntensity","react_tree_svg_1","moleculeRenderer","getPeakInRange","rendererOptions","massAccuracy","fragmentation","cyclic","groupResults","allFragments","mass_fragmentation_1","oneFragment","appendResults","groupFragmentationResults","sortedResults","currentResult","lastFragment","groupedResults","ocl","fivePrimeTerminal","threePrimeTerminal","circular","fivePrime","parenthesisCounter","nucleotideType","desoxyNucleotides","oxyNucleotides","complementary","alcohol","monophosphate","diphosphate","triphosphate","furanThreeTerm","nucleotide","addFiveTerm","fiveTerm","furanThreeTerm_js_1","baseLoss_1","baseLoss","mfLosses","addFiveTermBaseLoss","abcdBaseLoss","loss","baseLoss_js_1","addInternalTerm_1","addInternalTerm","ter3","ter5","abw","aby","threeTerm","addThreeTermBaseLoss","wxyzBaseLoss","generateFragments_1","generateFragments","dh2o","zch2","mfparts","addFiveTermBaseLoss_1","addThreeTerm","addThreeTermBaseLoss_1","addFiveTerm_1","addThreeTerm_1","sequencesString","mfsArray","sequences","nucleotide_1","fragmentsArray","combined","aminoAcids","aa1","pKaC","pKaN","pKa","aa3","isoElectricPoint","aas","calculateForPh","calculateIEP","combine","calculateChart","yAbs","iep","white","aminoAcids_1","aaObject","acid","basic","currentAA","allowOneNeutralLoss","allowNeutralLoss","getAA_1","getAA","chargePeptide_1","chargePeptide","chargeOnePeptide","firstAA","lastAA","sequenceToMF_1","sequenceToMF","newMF","tmpmf","isOneLetterCode","nTerminal","cTerminal","convertAA1To3","newmf","aa1To3","nTerm","isDefaultCall","maxInternal","minInternal","cTerm","addCTerm","iTerm","addITerm","enzyme","minMissed","maxMissed","minResidue","maxResidue","minDigestions","maxDigestions","regexp","getRegexp","numCleavages","effectiveMaxDigestions","effectiveMinDigestions","useCombinatorial","startDigestions","nbResidue","fragmentStart","allResults","numDigestions","combinations","getCombinationsIterator","cleavageSites","createFragmentsFromCleavages","cleavageSet","currentFragment","fragmentStartIndex","mod","__esModule","__createBinding","splitPeptide_js_1","splitPeptide","IEP","getColorForIEP","calculateCharge","__importStar","__exportStar","fragmentPeptide_1","digestion","protonation","protonationPH","digests","peptide_1","digestPeptide","originalMFsArray","hasLinked","unlinked","fragmentPeptide","mfsArrayLinked","mf_generator_1","generateMFs","mfsArrayUnlinked","rangesString","require","getTypeOf","uint8array","compressedSize","uncompressedSize","crc32","compression","compressedContent","getContentWorker","pipe","uncompressWorker","streamInfo","data_length","getCompressedWorker","withStreamInfo","createWorkerFrom","compressWorker","STORE","magic","DEFLATE","base64","binary","dir","createFolders","compressionOptions","unixPermissions","dosPermissions","lie","Uint16Array","_pako","_pakoAction","_pakoOptions","inherits","processChunk","_createPako","transformTo","flush","cleanUp","onData","pako","utf8encode","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCFullYear","getUTCMonth","getUTCDate","fileRecord","LOCAL_FILE_HEADER","dirRecord","CENTRAL_FILE_HEADER","bytesWritten","zipComment","zipPlatform","encodeFileName","streamFiles","accumulate","contentBuffer","dirRecords","currentSourceOffset","entriesCount","currentFile","_sources","openedSource","closedSource","DATA_DESCRIPTOR","CENTRAL_DIRECTORY_END","prepareNextSource","isPaused","registerPrevious","generatedError","lock","generateWorker","_compressWorker","loadAsync","support","defaults","external","decompressed","checkCRC32","optimizedBinaryString","decodeFileName","utf8decode","isNode","isStream","prepareContent","fileNameStr","fileCommentStr","unsafeOriginalName","_upstreamEnded","_bindStream","_stream","Readable","_helper","_read","Buffer","newBufferFrom","allocBuffer","alloc","isBuffer","folder","generateInternalStream","mimeType","checkSupport","generateAsync","generateNodeStream","toNodejsStream","byteAt","zero","lastIndexOfSignature","readAndCheckSignature","readData","checkOffset","checkIndex","setIndex","skip","readInt","readString","readDate","UTC","ZIP64_CENTRAL_DIRECTORY_LOCATOR","ZIP64_CENTRAL_DIRECTORY_END","destType","dataIsReady","_tickScheduled","_tickAndRepeat","isFinished","_tick","extraStreamInfo","isLocked","_listeners","mergeStreamInfo","nodestream","_internalType","_outputType","_mimeType","newBlob","_worker","objectMode","arraybuffer","nodebuffer","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","MSBlobBuilder","getBlob","leftOver","applyFromCharCode","Utf8DecodeWorker","Utf8EncodeWorker","stringifyByChunk","stringifyByChar","applyCanBeUsed","MAX_VALUE_16BITS","MAX_VALUE_32BITS","pretty","readAsArrayBuffer","setimmediate","loadOptions","checkSignature","reader","isSignature","readBlockEndOfCentral","diskNumber","diskWithCentralDirStart","centralDirRecordsOnThisDisk","centralDirRecords","centralDirSize","centralDirOffset","zipCommentLength","readBlockZip64EndOfCentral","zip64EndOfCentralSize","zip64ExtensibleData","readBlockZip64EndOfCentralLocator","diskWithZip64CentralDirStart","relativeOffsetEndOfZip64CentralDir","disksCount","readLocalFiles","localHeaderOffset","readLocalPart","handleUTF8","processAttributes","readCentralDir","zip64","readCentralPart","readEndOfCentral","prepareReader","isEncrypted","bitFlag","useUTF8","fileNameLength","fileName","compressionMethod","versionMadeBy","extraFieldsLength","fileCommentLength","diskNumberStart","internalFileAttributes","externalFileAttributes","readExtraFields","parseZIP64ExtraField","fileComment","extraFields","findExtraFieldUnicodePath","findExtraFieldUnicodeComment","_dataBinary","internalStream","_decompressWorker","nodeStream","MutationObserver","WebKitMutationObserver","characterData","onreadystatechange","outcome","promise","onFulfilled","callFulfilled","otherCallFulfilled","onRejected","callRejected","otherCallRejected","finally","race","immediate","windowBits","memLevel","gzip","msg","ended","chunks","strm","avail_out","deflateInit2","deflateSetHeader","string2buf","deflateSetDictionary","_dict_set","next_in","avail_in","Buf8","next_out","deflate","onEnd","buf2binstring","shrinkBuf","deflateEnd","flattenChunks","Deflate","deflateRaw","inflateInit2","Z_OK","inflateGetHeader","Z_FINISH","Z_NO_FLUSH","binstring2buf","inflate","Z_NEED_DICT","inflateSetDictionary","Z_BUF_ERROR","Z_STREAM_END","Z_SYNC_FLUSH","utf8border","buf2string","arraySet","inflateEnd","Inflate","inflateRaw","ungzip","setTyped","Buf16","Buf32","Z_PARTIAL_FLUSH","Z_FULL_FLUSH","Z_BLOCK","Z_TREES","Z_ERRNO","Z_STREAM_ERROR","Z_DATA_ERROR","Z_NO_COMPRESSION","Z_BEST_SPEED","Z_BEST_COMPRESSION","Z_DEFAULT_COMPRESSION","Z_FILTERED","Z_HUFFMAN_ONLY","Z_RLE","Z_FIXED","Z_DEFAULT_STRATEGY","Z_BINARY","Z_TEXT","Z_UNKNOWN","Z_DEFLATED","pending_buf","pending_out","total_out","_tr_flush_block","block_start","strstart","max_chain_length","prev_length","nice_match","w_size","w_mask","good_match","lookahead","match_start","window_size","hash_size","wrap","adler","total_in","insert","ins_h","hash_shift","hash_mask","match_length","_tr_tally","max_lazy_match","last_lit","prev_match","match_available","good_length","max_lazy","nice_length","max_chain","pending_buf_size","gzhead","gzindex","last_flush","w_bits","hash_bits","dyn_ltree","dyn_dtree","bl_tree","l_desc","d_desc","bl_desc","bl_count","heap_len","heap_max","l_buf","lit_bufsize","d_buf","opt_len","static_len","bi_buf","bi_valid","data_type","_tr_init","deflateInit","deflateReset","deflateResetKeep","hcrc","_tr_align","_tr_stored_block","deflateInfo","xflags","extra_len","dmax","wsize","whave","wnext","hold","lencode","distcode","lenbits","distbits","sane","havedict","wbits","ncode","nlen","ndist","have","lens","work","lendyn","distdyn","was","inflateReset","inflateReset2","inflateResetKeep","inflateInit","inflateInfo","static_tree","extra_bits","extra_base","elems","max_length","has_stree","dyn_tree","max_code","stat_desc","getPrototypeOf","nextTick","importScripts","args","clearImmediate","loadCommercials_1","loadCommercials","loadingPromises","fetchArrayBuffer_1","fetchArrayBuffer","jsZip","jszip_1","zip","__importDefault","mfFromGoogleSheet","urlReferences","fetchText_js_1","fetchText","papaparse_1","tsv","tsvReferences","formulas","references","referencesArray","modif","infoField","infoFields","ESI","MALDI","loadGoogleSheet_1","loadGoogleSheet","refUUID","uuid","refURL","mf_from_google_sheet_1","loadKnapSack_1","loadKnapSack","fileData","emdb","databases","generalMatcher","flattenResults","searchMSEM","msem","BaseSpectrumGenerator","peakWidthFct","assertNumber","assertInteger","resolvePeak","peakFWHM","peakWidth","peakShapeOptions","shapeOptions","cloneShape","widthLeft","widthRight","shapeLeft","shapeRight","SpectrumGenerator","maxPeakHeight","generateSpectrum","noise","peakOptions","addPeaks","addBaseline","addNoise","getSpectrum","addPeak","firstValue","firstPoint","lastPoint","baselineFct","minPeakHeight","axis2D","peakCoordinates","convertWidthToFWHM","widthData","Spectrum2DGenerator","calculeIntervals","shapeGenerator","xPosition","yPosition","xIndex","minMaxZ","minZ","maxZ","SparseSpectrumGenerator","generateSparseSpectrum","peakArray","resolvedPeaks","computeHalfWidth","mergedIntervals","lastWrittenIndex","firstIndex","guardBefore","guardAfter","mid","rest","generatorOptions","addPeaksOptions","joinX_1","joinX","sortX","entryA","entryB","composition","multiply","maxLines","sortY","calculateComposition","topY","move","power_1","square","Distribution_1","Distribution","closestPointX_js_1","joinX_js_1","multiply_js_1","power_js_1","getEmptyCache","emptyCache","multiplyY","setArray","other","ySorted","xSorted","relativeValue","distCopy","maxToOne","closestPointX","getDerivedCompositionInfo","shortComposition","shortLabel","isotopeLabel","IsotopicDistribution_1","IsotopicDistribution","spectrum_generator_1","getDerivedCompositionInfo_1","MINIMAL_FWHM","confidence","partOriginal","cachedDistribution","partNaturalDeltaNeutrons","newDistribution","totalDistribution","isotopicDistribution","finalDistribution","sumBefore","getCSV","xLabel","yLabel","numberXDecimals","numberYDecimals","getMaxY","getSumY","getXY","minSimilarity","flatEntries","auto","Comparator","isotopic_distribution_1","experimental","theoretical","experimentalInfo","quantity","_ref","quickSelectMedian","TheilSenRegression","slopes","medianSlope","cuts","theilSen","massShifts","similarities","shifts","ml_regression_theil_sen_1","shiftsPPM","EMDB","ms_spectrum_1","fromArray_js_1","fromMolecules_js_1","fromNucleicSequence_js_1","search_js_1","searchMSEM_js_1","searchSimilarity_js_1","require$$14","normed","databaseName","forceReload","loadContaminants","loadGoogleSheet_js_1","loadTest","fromArray","loadNeutralTest","maxC","replaceOrAppend","fromRange_js_1","fromRange","fromPeptidicSequence","fromPeptidicSequence_js_1","appendFragmentsInfo_js_1","fromNucleicSequence","nbEntries","preprocessEARanges_1","preprocessEARanges","targetEA","minCount","mfFromEA","maxElementError","maxTotalError","mfWhile","totalError","sumComposition","relativeComposition","filteredMFs","mfFor","nbCompositionAtoms","atomicRatio","absError","mfAtomicComposition","getMFAtomicComposition","atomicRatios","acc","allDBRefs","appendAllDBRefs","$ref","$id","appendURLs_1","appendURLs","collections","force","appendAllDBRefs_js_1","dbRef","unknowns","searchParams","URLSearchParams","postFetchJSON","includeDBRefs","excludedCollections","baseURL","groupsByCollection","collection","allSettled","addDataForOneCollection","postFetchJSON_js_1","_id","activeOrNatural","activity","activities","activityEntry","assay","targetTaxonomies","normalizedActivity","route","fetchActiveOrNatural","includeDBRefs_js_1","ensureArray","pubmeds","patents","taxonomies","appendURLs_js_1","normalizeActivities_js_1","normalizeActivities","getAllowedEMs_1","getAllowedEMs","allowedEMs","searchWithIonizations_1","searchWithIonizations","realURL","parseMasses_js_1","parseMasses","getAllowedEMs_js_1","realMass","fetchJSON_js_1","fetchJSON","activesOrNaturals","prepareSearchParams","noStereoTautomerID","kwTaxonomies","kwActiveAgainst","kwBioassays","kwMeshTerms","kwTitles","minNbMassSpectra","searchWithIonizations_js_1","nbMassSpectra","nbPubmeds","nbPatents","activesOrNaturalsByMF","activesOrNaturals_js_1","grouped","nbNaturals","nbBioactives","naturalProduct","bioactive","groupedArray","titles","getTitles","searchMasses","modifications","modification","massShift","massSpectra_1","massSpectra","uniqueMolecules","routes","defaultRoutes","appendAndFilterSimilarity","uniqueMol","searchMasses_js_1","compoundsURL","realCompoundsURL","searchParamsCompounds","pubmedID","searchInSilicoSpectraByMF","msComparator","MSComparator","searchInSilicoSpectraByMasses","technique","activesOrNaturalsByMF_js_1","compoundsFromMF_js_1","massSpectra_js_1","mfsFromEMs_js_1","pubmedCompounds_js_1","searchInSilicoSpectraByMF_js_1","searchInSilicoSpectraByMasses_js_1","mfsFromEMs","compoundsFromMF","activeOrNaturalDetails_js_1","activeOrNaturalDetails","STEMMERS","arabic","armenian","bulgarian","czech","danish","dutch","english","finnish","french","german","greek","hungarian","indian","indonesian","irish","italian","lithuanian","nepali","norwegian","portuguese","romanian","russian","serbian","slovenian","spanish","swedish","tamil","turkish","ukrainian","sanskrit","SPLITTERS","SUPPORTED_LANGUAGES","baseId","lastId","nano","BigInt","milli","MAX_ARGUMENT_FOR_STACK","safeArrayPush","arr","newArr","newArrLength","getNanosecondTimeViaPerformance","formatNanoseconds","getNanosecondsTime","WorkerGlobalScope","release","hrtime","bigint","uniqueId","getOwnProperty","sortTokenScorePredicate","intersect","arrays","tmp","getDocumentProperties","pathsLength","pathTokens","pathTokensLength","lat","lon","getNested","obj","mapDistanceToMeters","convertDistanceToMeters","distance","createError","removeVectorsFromHits","vectorProperties","hits","lastKey","isAsyncFunction","withIntersection","setIntersection","sets","set1","set2","withUnion","setUnion","union","setDifference","sleep","SharedArrayBuffer","Atomics","nil","wait","NO_LANGUAGE_WITH_CUSTOM_TOKENIZER","LANGUAGE_NOT_SUPPORTED","INVALID_STEMMER_FUNCTION_TYPE","MISSING_STEMMER","CUSTOM_STOP_WORDS_MUST_BE_FUNCTION_OR_ARRAY","UNSUPPORTED_COMPONENT","COMPONENT_MUST_BE_FUNCTION","COMPONENT_MUST_BE_FUNCTION_OR_ARRAY_FUNCTIONS","INVALID_SCHEMA_TYPE","DOCUMENT_ID_MUST_BE_STRING","DOCUMENT_ALREADY_EXISTS","DOCUMENT_DOES_NOT_EXIST","MISSING_DOCUMENT_PROPERTY","INVALID_DOCUMENT_PROPERTY","UNKNOWN_INDEX","INVALID_BOOST_VALUE","INVALID_FILTER_OPERATION","SCHEMA_VALIDATION_FAILURE","INVALID_SORT_SCHEMA_TYPE","CANNOT_SORT_BY_ARRAY","UNABLE_TO_SORT_ON_UNKNOWN_FIELD","SORT_DISABLED","UNKNOWN_GROUP_BY_PROPERTY","INVALID_GROUP_BY_PROPERTY","UNKNOWN_FILTER_PROPERTY","UNKNOWN_VECTOR_PROPERTY","INVALID_VECTOR_SIZE","INVALID_VECTOR_VALUE","INVALID_INPUT_VECTOR","WRONG_SEARCH_PROPERTY_TYPE","FACET_NOT_SUPPORTED","INVALID_DISTANCE_SUFFIX","INVALID_SEARCH_MODE","MISSING_VECTOR_AND_SECURE_PROXY","MISSING_TERM","INVALID_VECTOR_INPUT","PLUGIN_CRASHED","PLUGIN_SECURE_PROXY_NOT_FOUND","PLUGIN_SECURE_PROXY_MISSING_CHAT_MODEL","ANSWER_SESSION_LAST_MESSAGE_IS_NOT_ASSISTANT","PLUGIN_COMPONENT_CONFLICT","template","replaceArgs","rawWidth","replacement","padEnd","sprintf","captureStackTrace","formatElapsedTime","formatted","getDocumentIndexId","validateSchema","schema","valueLength","isVectorType","vectorSize","getVectorSize","isArrayType","expectedType","getInnerType","subProp","IS_ARRAY_TYPE","boolean","enum","geopoint","INNER_TYPE","isGeoPointType","createInternalDocumentIDStore","idToInternalId","internalIdToId","save","store","orama","internalDocumentIDStore","internalIdToIdLength","internalIdItem","getInternalDocumentId","internalId","currentId","getDocumentIdFromInternalId","sharedInternalDocumentStore","docs","getMultiple","idsLength","getAll","rawDocument","createDocumentsStore","AVAILABLE_PLUGIN_HOOKS","getAllPluginsByHook","pluginsToRun","pluginsLength","plugins","plugin","OBJECT_COMPONENTS","FUNCTION_COMPONENTS","runSingleHook","hooks","runMultipleHook","docsOrIds","runAfterSearch","language","runBeforeSearch","AVLNode","updateHeight","getBalanceFactor","rotateLeft","newRoot","rotateRight","fromJSON","AVLTree","insertCount","rebalanceThreshold","insertNode","insertMultiple","rebalance","rebalanceNode","needRebalance","rebalancedNode","balanceFactor","findNodeByKey","isBalanced","removeNode","removeDocument","successorParent","successor","rangeSearch","greaterThan","inclusive","lessThan","FlatTree","numberToDocumentId","idSet","operation","operationKeys","operationType","resultSet","excludeValues","filterArr","idSets","curr","_boundedLevenshtein","term","word","rowMin","syncBoundedLevenshtein","isBounded","RadixNode","subWord","updateParent","addDocument","docID","findAllWords","docIDs","docId","wordLength","currentCharacter","childNode","edgeLabel","edgeLabelLength","commonPrefix","newEdgeLabel","newWordLabel","inbetweenNode","newNode","_findLevenshtein","originalTolerance","character","termLength","removeWord","removeDocumentByWord","getCommonPrefix","nodeJson","RadixTree","BKDNode","BKDTree","nodeMap","getPointKey","pointKey","existingNode","getDocIDsByCoordinates","removeDocByID","deleteNode","searchByRadius","highPrecision","distanceFn","vincentyDistance","haversineDistance","distA","distB","searchByPolygon","polygon","isInsidePolygon","isPointInPolygon","centroid","calculatePolygonCentroid","buildNodeMap","totalArea","centroidX","centroidY","polygonLength","areaSegment","centroidCoordinate","isInside","coord1","coord2","lat1","lat2","deltaLat","deltaLon","sinU1","cosU1","sinU2","cosU2","prevLambda","sinSigma","cosSigma","sigma","sinAlpha","cos2Alpha","cos2SigmaM","iterationLimit","sinLambda","cosLambda","uSquared","BoolNode","true","false","bool","BM25","matchingCount","docsCount","fieldLength","averageFieldLength","VectorIndex","vectors","internalDocumentId","Float32Array","magnitude","getMagnitude","whereFiltersIDs","targetVector","targetMagnitude","similarVectors","vectorId","dotProduct","findSimilarVectors","vectorLength","insertDocumentScoreParameters","tokens","avgFieldLength","fieldLengths","frequencies","insertTokenScoreParameters","token","tokenFrequency","tokenOccurrences","removeDocumentScoreParameters","removeTokenScoreParameters","vectorIndexes","searchableProperties","searchablePropertiesWithTypes","schemaType","tokenizer","insertVector","insertScalar","avlRebalanceThreshold","tokenize","insertScalarBuilder","elementsLength","removeScalar","innerSchemaType","calculateResultScores","bm25Relevance","resultsMap","boostPerProperty","keywordMatchesMap","documentIDs","oramaOccurrences","oramaFrequencies","termOccurrences","documentIDsLength","propertyMatches","bm25","propertiesToSearch","boost","relevance","keywordsCount","tokenFoundMap","tokenLength","termsFound","termsFoundLength","fullMatches","remainingResults","fid","additionalResults","searchByWhereClause","filters","and","andFilters","orFilters","not","notFilter","allDocs","docsStore","filterKeys","filtersMap","filteredIDs","reqOperation","inside","distanceInMeters","addGeoResult","filteredIDsResults","addFindResult","operationOpt","operationValue","getSearchableProperties","getSearchablePropertiesWithTypes","rawIndexes","rawVectorIndexes","dumpVectorIndexes","savedIndexes","createGeoTokenScores","centerPoint","distances","searchByGeoWhereClause","indexTyped","geoInfo","isGeoOnly","geoProperty","geoOperation","isGeosearchOnlyQuery","bkdNode","keysLength","innerCreate","sortableDeniedProperties","sorter","enabled","sortableProperties","sortablePropertiesWithTypes","sorts","orderedDocsToRemove","orderedDocs","unsortableProperties","ensureOrderedDocsAreDeletedByProperty","ensureIsSorted","ensurePropertyIsSorted","stringSort","localeCompare","getLocale","numberSort","booleanSort","predicate","orderedDocsLength","sortBy","docIds","isDesc","indexOfA","indexOfB","isAIndexed","isBIndexed","getSortableProperties","getSortablePropertiesWithTypes","ensureOrderedDocsAreDeleted","createSorter","CHARCODE_REPLACE_MAPPING","replaceChar","step2List","ational","tional","enci","anci","izer","bli","alli","entli","eli","ousli","ization","ation","ator","alism","iveness","fulness","ousness","aliti","iviti","biliti","logi","step3List","icate","ative","alize","iciti","ical","ful","ness","mgr0","meq1","mgr1","s_v","stemmer","stem","re2","re3","re4","firstch","normalizeToken","withCache","normalizationCache","stopWords","stemmerSkipProperties","stringCharCode","replaceDiacritics","tokenizeSkipProperties","splitRule","trimTokens","allowDuplicates","createTokenizer","stemming","rules","addRule","rule","updateRule","removeRule","ruleId","getRule","getAllRules","matchesRule","conditions","condition","normalizedTerm","normalizedPattern","anchoring","matchesCondition","getMatchingRules","matchingRules","rawStore","validateComponents","components","defaultComponents","rawKey","documentsStore","skipHooks","errorProperty","beforeInsert","afterInsert","indexableProperties","indexablePropertiesWithTypes","indexableValues","validateDocumentProperty","sorting","sortableValues","indexAndSortDocument","innerInsertAsync","indexAndSortDocumentSync","innerInsertSync","ENUM_TYPE","STRING_NUMBER_TYPE","actualType","innerInsertMultipleAsync","batchSize","processNextBatch","startIndex","batch","waitTime","processAllBatches","afterInsertMultiple","innerInsertMultipleSync","remainingTime","innerInsertMultiple","beforeRemove","afterRemove","removeAsync","removeSync","removeMultiple","beforeRemoveMultiple","afterRemoveMultiple","docIdsForHooks","_removeMultiple","removeMultipleAsync","_removeMultipleSync","removeMultipleSync","MODE_FULLTEXT_SEARCH","MODE_HYBRID_SEARCH","MODE_VECTOR_SEARCH","sortAsc","sortDesc","sortingPredicateBuilder","getFacets","facetsConfig","facets","allIDs","facetKeys","facet","rangesLength","allDocsLength","facetValue","propertyType","facetValues","calculateNumberFacetBuilder","alreadyInsertedValues","calculateNumberFacet","calculateBooleanStringOrEnumFacetBuilder","calculateBooleanStringOrEnumFacet","currentFacet","stringFacetDefinition","sortingPredicate","DEFAULT_REDUCE","getInitialValue","ALLOWED_TYPES","getGroups","groupBy","propertiesLength","schemaProperties","returnedCount","maxResult","listOfValues","groupByKey","perValue","keyValue","calculateCombination","combinationsLength","combination","combinationLength","groupsLength","aggregationValue","arrs","applyPinningRules","pinningStore","uniqueDocsArray","searchTerm","allPromotions","consequence","promote","pinnedInternalIds","promotionsMap","positionsTaken","promotion","doc_id","existingPosition","unpinnedResults","pinnedResults","finalResults","pinnedByPosition","pinnedResult","unpinnedIndex","innerFullTextSearch","propertiesToSearchWithTypes","hasFilters","where","uniqueDocsIDs","defaultBM25Params","applyDefault","searchTerms","getPropValue","geoResults","fullTextSearch","timeStart","performSearchLogic","shouldCalculateFacets","distinctOn","includeVectors","isPreflight","preflight","docsWithIdAndScore","pinning","resultIDs","uniqueDocsArrayLength","idAndScore","fetchDocumentsWithDistinct","fetchDocuments","elapsed","beforeSearch","afterSearch","executeSearchAsync","innerVectorSearch","vectorIndex","searchVector","facetsResults","vectorProperty","newDoc","innerHybridSearch","fullTextIDs","maxScore","extractScore","minMaxScoreNormalization","vectorIDs","hybridWeights","textResults","vectorResults","maxTextScore","maxVectorScore","hasHybridWeights","textWeight","vectorWeight","mergedResults","textResultsLength","hybridScore","textScore","vectorScore","hybridScoreBuilder","hybridScoreValue","normalizeScore","vectorResultsLength","resultId","normalizedScore","existingRes","mergeAndRankResults","uniqueTokenScores","timeEnd","returningResults","hybridSearch","fullDoc","beforeUpdate","afterUpdate","newId","updateAsync","updateSync","updateMultiple","beforeUpdateMultiple","afterUpdateMultiple","beforeInsertMultiple","docsLength","newIds","updateMultipleAsync","updateMultipleSync","kInsertions","kRemovals","bytes","decimals","proxy","abortController","lastInteractionParams","chatModel","conversationID","messages","initPromise","initialMessages","generateRandomID","ask","askStream","fetchAnswer","abortAnswer","triggerStateChange","getMessages","clearSession","regenerateLast","role","interactionId","sources","translatedQuery","errorMessage","stateIdx","addEmptyAssistantMessage","chatStream","model","findLast","onStateChange","getPlugin","pluginExtras","systemPrompt","pluginParams","chat","getComponents","pluginComponents","internalDocumentStore","beforeUpsert","afterUpsert","beforeUpsertMultiple","afterUpsertMultiple","afterCreate","runAfterCreate","existingDoc","upsertAsync","upsertSync","docsToInsert","docsToUpdate","idsToUpdate","updateResults","insertResults","upsertMultipleAsync","upsertMultipleSync","getActivitiesDB_1","getActivitiesDB","queryFields","activitiesDB","orama_1","getPatentsDB_1","abstractsLimit","patentsDB","abstract","nbCompounds","patent","lastCallback","getPubmedsDB_1","pubmedsDB","meshHeadings","pubmed","meshHeading","descriptorName","article","compounds","getTaxonomiesDB_1","getTaxonomiesDB","superkingdom","kingdom","phylum","class","family","genus","species","searchActivitiesDB_1","searchActivitiesDB","terms","maxNbEntries","minScore","queryResult","activityDocument","searchPatentsDB_1","searchPatentsDB","boostFields","searchPubmedsDB_1","searchPubmedsDB","searchTaxonomiesDB_1","searchTaxonomiesDB","taxonomiesDB","currentTaxonomy","taxonomiesDocument","summarizeEmptyTerms_1","summarizeEmptyTerms","patentsMaxNbEntries","nbCompoundsEntryB","nbCompoundsEntryA","pubmedsMaxNbEntries","activitiesMaxNbEntries","taxonomiesMaxNbEntries","isInitialized","summarize","creatingDB","createDB","taxonomyRanks","field","taxonomyRanks_js_1","rankLimit","taxonomyRanks_1","reachedRankLimit","branch","cleanEmptyBranches","assignSlot","residues","used","residue","paper","usedSlots","appendInternals","maxNumberLines","internals","appendResidues_1","appendResidues","Peptide","Nucleotide","nextChar","nextNextChar","replacements","fromBegin","getModifiedReplacement","alternatives","getUnknownReplacement","removeStartEndParenthesis","nbOver","nbUnder","unknownResidue","SYMBOLS","replaced","modifiedResidue","residueCode","alternativeOneLetter","ALTERNATIVES","addMethodNames","getOwnPropertyNames","methods$1","_name","registerMethods","getMethodsFor","names","getPaper_browser","getPaper","svg_js_1","appendResiduesPosition_1","appendResiduesPosition","leftRightBorders","spaceBetweenResidues","xPos","xOld","getPaper_1","textWidth","getTextWidth","setPaper","nbLines","topPosition","bottomPosition","labelFontFamily","labelSize","analysisResult","numberResidues","merge","textColor","similariy","minQuantity","showInternals","minRelativeQuantity","appendRows","allResidues","appendRowsInformation","filtered","firstResidue","lastResidue","fromResidue","toResidue","maxNbOver","maxNbUnder","script","plain","drawInternals_1","drawInternals","spaceBetweenInternalLines","onmouseover","onmouseout","drawLabel_1","drawReplacements","drawTerminals_1","drawTerminals","linecap","drawLabel","drawSequence_1","drawSequence","sequenceSVG","analysisResults","parsing","drawOptions","appendResults_1","appendRows_1","appendInternals_1","BUFFER","IDX","HEX","num","getPeakWidthFct","massOptions","groupColumnsBySign","mapped","positiveRows","columnIndexInK","addUniqueKeyToColumns","indices","cssls","XtX","XtY","Pset","choXtX","isPositiveDefinite","luXtX","isSingular","sortedPset","sortedEset","sortCollectionSet","cols2Solve","vars","optimality","iter","maxIter","Fset","gradientTolerance","subMatrixColumn","subtract","setColumn","Jset","fullSet","colIndex","notPset","maxColumnIndex","fcnnls","initialisation","checkMatrix","infeasIndex","Hset","ones","hRowColIdx","negRowColIdx","alphaMin","minIdx","minColumn","minColumnIndex","rowVector","setSubMatrix","idx2zero","newParam","columnVector","to1DArray","processFromACell","rowsMapping","columnsMapping","currentMappingID","nonZeroColumns","nonZeroRows","rowsTodo","nextRow","internalRow","createMatrixIndexes","matrices","submatrix","appendSubMatrix","blockFcnnls_1","blockFcnnls","fullMatrix","emptyRow","originalMatrix","splitMatrix_js_1","reconstructed","ml_matrix_1","ml_fcnnls_1","fcnnlsVector","partialReconstructed","mfsDeconvolution","customMFs","getPeakWidthFct_1","getCentroids","newMFs","uuid_1","addIsotopicDistributionAndCheckMF","buildCombined","blockFcnnls_js_1","relativeIntensity","absoluteQuantity","relativeQuantity","matchingScore","wClone","filteredReconstructed","getPeakWidthFct_js_1","EMDBPkg","SpectrumPkg"],"mappings":"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