{"version":3,"file":"mass-tools.esm.min.js","sources":["../packages/ms-spectrum/node_modules/is-any-array/lib/index.js","../node_modules/ml-spectra-processing/lib/reim/reimAbsolute.js","../node_modules/is-any-array/lib-esm/index.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-array-rescale/lib-es6/index.js","../node_modules/ml-array-min/lib-es6/index.js","../node_modules/ml-array-max/lib-es6/index.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/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/xyEquallySpaced.js","../node_modules/ml-spectra-processing/lib/xy/utils/equallySpacedSlot.js","../node_modules/ml-spectra-processing/lib/xy/utils/equallySpacedSmooth.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/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/matrixCuthillMckee.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/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/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/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/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/xy-parser/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-esm/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/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/utils/setShape.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","../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","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/getXAtomicNumber.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/isCsp3.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/makeRacemic.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/tagAtom.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/hose/getHoseCodesForAtomsAsFragments.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/getConnectivityMatrix.js","../node_modules/ml-floyd-warshall/lib-esm/index.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/getCompactCopyWithoutCustomLabels.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/hose/getHoseCodesForAtomsAsStrings.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/diastereotopic/getChiralOrHeterotopicCarbons.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/diastereotopic/ensureHeterotopicChiralBonds.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/topic/TopicMolecule.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/topic/getCanonizedHoseCodesForPaths.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/path/getAllAtomsPaths.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/topic/getMoleculeWithH.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/topic/getXMolecule.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/topic/getCanonizedDiaIDs.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/topic/getCanonizedHoseCodes.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/topic/getDiaIDsAndInfo.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/topic/getHeterotopicSymmetryRanks.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/getSymmetryRanks.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/diastereotopic/getDiastereotopicAtomIDs.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/diastereotopic/getDiastereotopicAtomIDsAndH.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/diastereotopic/getGroupedDiastereotopicAtomIDs.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/diastereotopic/groupDiastereotopicAtomIDs.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/hose/getHoseCodesForAtoms.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/hose/getHoseCodesForPath.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/polymer/createPolymer.js","../packages/mass-fragmentation/node_modules/openchemlib/dist/openchemlib.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/applyFragmentLabels.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/autoLabelDatabase.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/combineSmiles.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/node_modules/ensure-string/lib/index.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/dwar/utils/parseColumnbProperties.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/dwar/utils/parseData.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/dwar/parseDwar.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/getAtomsInfo.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/getMF.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/getUnsaturation.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/getNMRHints.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/getProperties.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/path/getPathsInfo.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/getAtoms.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/path/getPathAndTorsion.js","../node_modules/papaparse/papaparse.min.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/db/utils/getMoleculeCreators.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/db/utils/appendCSV.js","../packages/mass-fragmentation/node_modules/get-value/dist/index.mjs","../node_modules/ensure-string/lib-esm/index.js","../node_modules/isutf8/dist/index.esm.js","../packages/mass-fragmentation/node_modules/sdf-parser/src/util/getMolecule.js","../packages/mass-fragmentation/node_modules/sdf-parser/src/parse.js","../packages/mass-fragmentation/node_modules/sdf-parser/src/getEntriesBoundaries.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/db/utils/pushEntry.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/noWait.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/db/utils/search.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/getRAtomicNumber.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/reaction/utils/checkIfExistsOrAddInfo.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/reaction/utils/applyOneReactantReactions.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/reaction/utils/getFilteredTrees.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/reaction/utils/getLeaves.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/reaction/utils/getNodes.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/reaction/Reactions.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/reaction/utils/appendOCLReaction.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/db/MoleculesDB.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/db/utils/appendEntries.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/db/utils/appendSDF.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/db/utils/appendSmilesList.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/db/utils/pushMoleculeInfo.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/db/utils/appendColor.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/autoLabel.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/fragment/fragmentAcyclicSingleBonds.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/features/getAtomFeatures.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/getCharge.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/diastereotopic/getDiastereotopicAtomIDsFromMolfile.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/hose/getHoseCodes.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/hose/getHoseCodesAndInfo.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/hose/getHoseCodesForAtom.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/hose/getHoseCodesFromDiastereotopicID.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/getImplicitHydrogensCount.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/getMolfilesMapping.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/getNextNMRHint.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/path/getShortestPaths.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/nbCHO.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/nbCN.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/nbCOOH.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/nbLabileH.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/nbNH2.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/nbOH.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/dwar/utils/getParts.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/dwar/utils/getCamelCase.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/diastereotopic/toDiastereotopicSVG.js","../packages/mass-fragmentation/node_modules/openchemlib-utils/lib/util/toVisualizerMolfile.js","../packages/mass-fragmentation/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/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","../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/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/methods/create.js","../node_modules/@orama/orama/dist/browser/methods/docs.js","../node_modules/@orama/orama/dist/browser/constants.js","../node_modules/@orama/orama/dist/browser/types.js","../node_modules/@orama/orama/dist/browser/components/sync-blocking-checker.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/components/facets.js","../node_modules/@orama/orama/dist/browser/components/groups.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/answer-session.js","../node_modules/@orama/orama/dist/browser/methods/serialization.js","../node_modules/@orama/orama/dist/browser/methods/update.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 * @returns - reimAbsolute value\n */\nexport function reimAbsolute(data) {\n    const length = data.re.length;\n    const re = data.re;\n    const im = data.im;\n    const newArray = new Float64Array(length);\n    for (let i = 0; i < length; i++) {\n        newArray[i] = Math.hypot(re[i], im[i]);\n    }\n    return newArray;\n}\n//# sourceMappingURL=reimAbsolute.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","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","import { isAnyArray } from 'is-any-array';\nimport max from 'ml-array-max';\nimport min from 'ml-array-min';\n\nfunction rescale(input) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (!isAnyArray(input)) {\n    throw new TypeError('input must be an array');\n  } else if (input.length === 0) {\n    throw new TypeError('input must not be empty');\n  }\n\n  var output;\n\n  if (options.output !== undefined) {\n    if (!isAnyArray(options.output)) {\n      throw new TypeError('output option must be an array if specified');\n    }\n\n    output = options.output;\n  } else {\n    output = new Array(input.length);\n  }\n\n  var currentMin = min(input);\n  var currentMax = max(input);\n\n  if (currentMin === currentMax) {\n    throw new RangeError('minimum and maximum input values are equal. Cannot rescale a constant array');\n  }\n\n  var _options$min = options.min,\n      minValue = _options$min === void 0 ? options.autoMinMax ? currentMin : 0 : _options$min,\n      _options$max = options.max,\n      maxValue = _options$max === void 0 ? options.autoMinMax ? currentMax : 1 : _options$max;\n\n  if (minValue >= maxValue) {\n    throw new RangeError('min option must be smaller than max option');\n  }\n\n  var factor = (maxValue - minValue) / (currentMax - currentMin);\n\n  for (var i = 0; i < input.length; i++) {\n    output[i] = (input[i] - currentMin) * factor + minValue;\n  }\n\n  return output;\n}\n\nexport { rescale as default };\n","import { isAnyArray } from 'is-any-array';\n\nfunction min(input) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\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  var _options$fromIndex = options.fromIndex,\n      fromIndex = _options$fromIndex === void 0 ? 0 : _options$fromIndex,\n      _options$toIndex = options.toIndex,\n      toIndex = _options$toIndex === void 0 ? input.length : _options$toIndex;\n\n  if (fromIndex < 0 || fromIndex >= input.length || !Number.isInteger(fromIndex)) {\n    throw new Error('fromIndex must be a positive integer smaller than length');\n  }\n\n  if (toIndex <= fromIndex || toIndex > input.length || !Number.isInteger(toIndex)) {\n    throw new Error('toIndex must be an integer greater than fromIndex and at most equal to length');\n  }\n\n  var minValue = input[fromIndex];\n\n  for (var i = fromIndex + 1; i < toIndex; i++) {\n    if (input[i] < minValue) minValue = input[i];\n  }\n\n  return minValue;\n}\n\nexport { min as default };\n","import { isAnyArray } from 'is-any-array';\n\nfunction max(input) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\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  var _options$fromIndex = options.fromIndex,\n      fromIndex = _options$fromIndex === void 0 ? 0 : _options$fromIndex,\n      _options$toIndex = options.toIndex,\n      toIndex = _options$toIndex === void 0 ? input.length : _options$toIndex;\n\n  if (fromIndex < 0 || fromIndex >= input.length || !Number.isInteger(fromIndex)) {\n    throw new Error('fromIndex must be a positive integer smaller than length');\n  }\n\n  if (toIndex <= fromIndex || toIndex > input.length || !Number.isInteger(toIndex)) {\n    throw new Error('toIndex must be an integer greater than fromIndex and at most equal to length');\n  }\n\n  var maxValue = input[fromIndex];\n\n  for (var i = fromIndex + 1; i < toIndex; i++) {\n    if (input[i] > maxValue) maxValue = input[i];\n  }\n\n  return maxValue;\n}\n\nexport { max as default };\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar isAnyArray = require('is-any-array');\nvar rescale = require('ml-array-rescale');\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.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.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.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.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.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.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.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.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.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.isAnyArray(array)) {\n    if (array[0] && isAnyArray.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.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.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.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","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, minWeight = 0.01, } = options;\n    const absResiduals = xAbsolute(xSubtract(yData, baseline));\n    const medAbsRes = xMedian(absResiduals);\n    const mad = 1.4826 * medAbsRes;\n    const threshold = factorStd * mad;\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    let maxWeight = Number.MIN_SAFE_INTEGER;\n    const newWeights = Float64Array.from(weights);\n    const oneMinusLearningRate = 1 - learningRate;\n    for (let i = 0; i < newWeights.length; i++) {\n        if (controlPoints && controlPoints[i] > 0)\n            continue;\n        const weight = Math.max(minWeight, oneMinusLearningRate * weights[i] + learningRate * rawWeights[i]);\n        newWeights[i] = weight;\n        maxWeight = Math.max(maxWeight, weight);\n    }\n    newWeights[0] = maxWeight;\n    newWeights[weights.length - 1] = maxWeight;\n    return newWeights;\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 Array(dimension);\n        for (let k = 0; k < dimension; k++) {\n            pinv[permutationEncoded[k]] = k;\n        }\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, ac] = [pinv[r], pinv[c]];\n            mt[a] = ac < ar ? [ac, ar, value] : [ar, ac, value];\n        }\n        nonZerosArray = mt;\n    }\n    else {\n        permutationEncoded = [];\n        for (let i = 0; i < dimension; ++i) {\n            permutationEncoded[i] = i;\n        }\n    }\n    const ap = new Array(dimension + 1);\n    const ai = new Array(nonZerosArray.length);\n    const ax = new Array(nonZerosArray.length);\n    const lnz = [];\n    for (let i = 0; i < dimension; ++i) {\n        lnz[i] = 0;\n    }\n    for (const a of nonZerosArray) {\n        lnz[a[1]]++;\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 = [];\n    for (let a = 0; a < dimension; ++a) {\n        colOffset[a] = 0;\n    }\n    for (const e of nonZerosArray) {\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 Array(dimension);\n    const y = new Array(dimension);\n    const lp = new Array(dimension + 1);\n    const parent = new Array(dimension);\n    const lnzArray = new Array(dimension);\n    const flag = new Array(dimension);\n    const pattern = new Array(dimension);\n    const bp1 = new Array(dimension);\n    const x = new Array(dimension);\n    ldlSymbolic(dimension, ap, ai, lp, parent, lnzArray, flag);\n    const lx = new Array(lp[dimension]);\n    const li = new Array(lp[dimension]);\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    for (let k = 0; k < dimension; k++) {\n        parent[k] = -1;\n        flag[k] = k;\n        lnz[k] = 0;\n        const kk = k;\n        const p2 = ap[kk + 1];\n        for (let permutationEncoded = ap[kk]; permutationEncoded < p2; permutationEncoded++) {\n            let i = ai[permutationEncoded];\n            if (i < k) {\n                for (; flag[i] !== k; i = parent[i]) {\n                    if (parent[i] === -1)\n                        parent[i] = k;\n                    lnz[i]++;\n                    flag[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    let yi, lKi;\n    let i, k, permutationEncoded, kk, p2, len, top;\n    for (k = 0; k < dimension; k++) {\n        y[k] = 0;\n        top = dimension;\n        flag[k] = k;\n        lnz[k] = 0;\n        kk = k;\n        p2 = ap[kk + 1];\n        for (permutationEncoded = ap[kk]; permutationEncoded < p2; permutationEncoded++) {\n            i = ai[permutationEncoded];\n            if (i <= k) {\n                y[i] += ax[permutationEncoded];\n                for (len = 0; flag[i] !== k; i = parent[i]) {\n                    pattern[len++] = i;\n                    flag[i] = k;\n                }\n                while (len > 0)\n                    pattern[--top] = pattern[--len];\n            }\n        }\n        d[k] = y[k];\n        y[k] = 0;\n        for (; top < dimension; top++) {\n            i = pattern[top];\n            yi = y[i];\n            y[i] = 0;\n            p2 = lp[i] + lnz[i];\n            for (permutationEncoded = lp[i]; permutationEncoded < p2; permutationEncoded++) {\n                y[li[permutationEncoded]] -= lx[permutationEncoded] * yi;\n            }\n            lKi = yi / d[i];\n            d[k] -= lKi * yi;\n            li[permutationEncoded] = k;\n            lx[permutationEncoded] = lKi;\n            lnz[i]++;\n        }\n        if (d[k] === 0)\n            return k;\n    }\n    return dimension;\n}\nfunction ldlLsolve(dimension, x, lp, li, lx) {\n    let j, permutationEncoded, p2;\n    for (j = 0; j < dimension; j++) {\n        p2 = lp[j + 1];\n        for (permutationEncoded = lp[j]; permutationEncoded < p2; permutationEncoded++) {\n            x[li[permutationEncoded]] -= lx[permutationEncoded] * x[j];\n        }\n    }\n}\nfunction ldlDsolve(dimension, x, d) {\n    for (let j = 0; j < dimension; j++) {\n        x[j] /= d[j];\n    }\n}\nfunction ldlLTsolve(dimension, x, lp, li, lx) {\n    let j, permutationEncoded, p2;\n    for (j = dimension - 1; j >= 0; j--) {\n        p2 = lp[j + 1];\n        for (permutationEncoded = lp[j]; permutationEncoded < p2; permutationEncoded++) {\n            x[j] -= lx[permutationEncoded] * x[li[permutationEncoded]];\n        }\n    }\n}\nfunction ldlPerm(dimension, x, b, permutationEncoded) {\n    let j;\n    for (j = 0; j < dimension; j++) {\n        x[j] = b[permutationEncoded[j]];\n    }\n}\nfunction ldlPermt(dimension, x, b, permutationEncoded) {\n    let j;\n    for (j = 0; j < dimension; j++) {\n        x[permutationEncoded[j]] = b[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 * 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\";\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 */\nexport function xWhittakerSmoother(yData, options = {}) {\n    const { lambda = 100, maxIterations = 100, tolerance = 1e-6, factorStd = 3, learningRate = 0.5, minWeight = 0.01, } = options;\n    const size = yData.length;\n    // eslint-disable-next-line prefer-const\n    let { 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 = createSystemMatrix(size, lambda);\n    while (iteration < maxIterations && delta > tolerance) {\n        const { leftHandSide, rightHandSide } = addWeights(upperTriangularNonZeros, yData, weights);\n        const cho = matrixCholeskySolver(leftHandSide, size);\n        if (!cho) {\n            return baseline;\n        }\n        const newBaseline = cho(rightHandSide);\n        weights = calculateAdaptiveWeights(yData, newBaseline, weights, {\n            controlPoints,\n            minWeight,\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}\n/**\n * @deprecated Use xWhittakerSmoother instead.\n * TODO: Remove in next major version.\n */\nexport const xWhitakerSmoother = xWhittakerSmoother;\n//# sourceMappingURL=xWhittakerSmoother.js.map","/**\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    return upperTriangularNonZeros;\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:[]}\n */\nexport function reimPhaseCorrection(data, phi0 = 0, phi1 = 0, options = {}) {\n    const { reverse = false } = options;\n    phi0 = Number.isFinite(phi0) ? phi0 : 0;\n    phi1 = Number.isFinite(phi1) ? phi1 : 0;\n    const re = data.re;\n    const im = data.im;\n    const length = data.re.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    const newRe = new Float64Array(length);\n    const newIm = new Float64Array(length);\n    for (let i = 0; i < length; i++) {\n        newRe[i] = re[i] * cosTheta - im[i] * sinTheta;\n        newIm[i] = im[i] * cosTheta + re[i] * sinTheta;\n        // calculate angles i+1 from i\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: newRe, im: newIm };\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, } = 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 });\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 { 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 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 { 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","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","/**\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","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","/* 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 { 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 { 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 * Finds the median x value for an object with properties x and y (arrays of the same length)\n * @param data - x should be sorted in increasing order\n * @returns - the median of x values\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","/**\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","/**\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        };\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                {\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                }\n                break;\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 isotope = chemical_elements_1.isotopesObject[line.value.isotope + line.value.atom];\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                });\n                break;\n            }\n            case Kind_1.Kind.ISOTOPE_RATIO:\n                {\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                    result.isotopes.push({\n                        atom: line.value.atom,\n                        number: line.multiplier,\n                        distribution,\n                    });\n                }\n                break;\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                });\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                {\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                }\n                break;\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 = {}, } = 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 (filter.atoms || filter.callback) {\n        advancedFilter = {\n            atoms: filter.atoms,\n            callback: filter.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 } = 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: similarity.widthBottom,\n        top: similarity.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 * @return  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 (typeof 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 * @private\n * @param m  Number of points\n * @param n  Polynomial grade\n * @param s  Derivative\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","export 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","export 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\";\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 = -1, 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 *\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\";\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 { 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 { 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 '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 missing property if it does not exist in the peak,\n * if shape exists but fwhm doesn't, it will be calculated from peak.width\n */\nexport function addMissingShape(peaks, options = {}) {\n    const { shape = { kind: 'gaussian' }, output = structuredClone(peaks) } = options;\n    const shapeInstance = getShape1D(shape);\n    return output.map((peak) => {\n        if (hasShape(peak)) {\n            if (!('fwhm' in peak.shape)) {\n                const shapeInstance = getShape1D(peak.shape);\n                peak.shape.fwhm = shapeInstance.widthToFWHM(peak.width);\n            }\n            return peak;\n        }\n        return {\n            ...peak,\n            shape: { fwhm: shapeInstance.widthToFWHM(peak.width), ...shape },\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. It currently supports three kind of shapes: gaussian, lorentzian and pseudovoigt\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 */\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    /*\n    The optimization algorithm will take some group of peaks.\n    We can not simply optimize everything because there would be too many variables to optimize\n    and it would be too time consuming.\n  */\n    const groups = groupPeaks(peakList, { factor: groupingFactor });\n    const logs = [];\n    const results = [];\n    groups.forEach((peakGroup) => {\n        const start = Date.now();\n        // In order to make optimization we will add fwhm and shape on all the peaks\n        const peaks = addMissingShape(peakGroup, { shape });\n        const firstPeak = peaks[0];\n        const lastPeak = peaks[peaks.length - 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 factor\n * In order to group peaks we only need the x and width value. This means that\n * in the current implementation we don't take into account the asymmetry of peaks\n */\nexport function groupPeaks(peaks, options = {}) {\n    if (peaks?.length === 0)\n        return [];\n    const { factor = 1 } = options;\n    peaks = JSON.parse(JSON.stringify(peaks));\n    peaks.sort((a, b) => a.x - b.x);\n    let previousPeak = peaks[0];\n    let currentGroup = [previousPeak];\n    const groups = [currentGroup];\n    for (let i = 1; i < peaks.length; i++) {\n        const peak = peaks[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","export 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\";\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 = peakList[0].ddY;\n    for (let i = 1; i < peakList.length; i++) {\n        if (Math.abs(peakList[i].ddY) > maxDdy)\n            maxDdy = Math.abs(peakList[i].ddY);\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    //@ts-expect-error Push a feke peak\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[candidates.x.length - 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, maxI] = [0, 0];\n                const log = logs.find((l) => l.message === 'optimization successful');\n                if (log) {\n                    const { error } = log;\n                    if (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            }\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) => {\n        return a.x - b.x;\n    });\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';\nconst { parse, stringify } = JSON;\n/**\n * Append 2 properties to the peaks, shape and fwhm\n */\nexport function setShape(peaks, options = {}) {\n    const { shape = { kind: 'gaussian' }, output = parse(stringify(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","import { getShape1D } from 'ml-peak-shape-generator';\n/**\n * This method will allow to enlarge peaks while preventing overlap between peaks\n * A typical application in chromatography peak picking.\n * We should not make the hypothesis that x is equidistant\n * Because peaks may not be symmetric after we add 2 properties, from and to.\n * @return {Array} peakList\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                peak.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 } = peak;\n        const xFrom = peak.x - (peak.x - peak.inflectionPoints.from.x) * factor;\n        const xTo = peak.x + (peak.inflectionPoints.to.x - peak.x) * factor;\n        let result = {\n            x: peak.x,\n            y: peak.y,\n            index: peak.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 data with x and y arrays. Values in x has to be growing\n * @param options\n * @param {number} [options.broadRatio = 0.00] - If `broadRatio` is higher than 0, then all the peaks which second derivative\n * smaller than `broadRatio * maxAbsSecondDerivative` will be marked with the soft mask equal to true.\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    //rescale;\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    peaks.forEach((peak) => {\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\";\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\";\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, lastJ] = [-1, -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 * Correction of the x and y coordinates using a quadratic optimizations with the peak and its 3 closest neighbors to determine the true x,y values of the peak.\n * This process is done in place and is very fast.\n * @param data\n * @param peaks\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        // interpolation to a sin() function\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 = 20 * Math.log10(y[currentIndex - 1]);\n            const beta = 20 * Math.log10(y[currentIndex]);\n            const gamma = 20 * 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. It currently supports three kind of shapes: gaussian, lorentzian and pseudovoigt\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 */\nexport function optimizePeaks(data, peakList, options = {}) {\n    return optimizePeaksWithLogs(data, peakList, options).optimizedPeaks;\n}\n//# sourceMappingURL=optimizePeaks.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 } = options;\n    options.filterFctVariables = {};\n    for (let i = 0; i < ranges.length; i++) {\n        const range = ranges[i];\n        if (typeof range === 'object' && range.name) {\n            options.filterFctVariables[range.name] = i;\n            ranges[i] = range.value;\n        }\n    }\n    if (options.filterFct) {\n        // we create a real javascript function\n        let variables = Object.keys(options.filterFctVariables);\n        variables.push('mm', 'mz', 'charge', 'unsaturation', 'atoms');\n        // eslint-disable-next-line no-new-func\n        options.filterFct = new Function(...variables, `return ${options.filterFct}`);\n    }\n    if (uniqueMFs === true)\n        options.canonizeMF = true;\n    if (options.canonizeMF === undefined)\n        options.canonizeMF = true;\n    options.ionizations = (0, mf_utilities_1.preprocessIonizations)(options.ionizations);\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 * options.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, 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 (options.filterFct) {\n            let variables = [];\n            for (let key in options.filterFctVariables) {\n                variables.push(currents[options.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 (!options.filterFct.apply(null, 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","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 { 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        const existingMapNo = {};\n        for (let i = 0; i < this.molecule.getAllAtoms(); i++) {\n            const mapNo = this.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 < this.molecule.getAllAtoms(); i++) {\n            const mapNo = this.molecule.getAtomMapNo(i);\n            if (!mapNo) {\n                while (existingMapNo[nextMapNo]) {\n                    nextMapNo++;\n                }\n                existingMapNo[nextMapNo] = true;\n                this.molecule.setAtomMapNo(i, nextMapNo, false);\n            }\n        }\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 { 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';\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 Cl=class{copyMolecule(Z){let Bt=Z.getIDCodeAndCoordinates();navigator.clipboard.writeText(`${Bt.idCode} ${Bt.coordinates}`)}pasteMolecule(){return null}};var DS=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",JU=new Uint8Array(256);for(let w=0;w<DS.length;w++)JU[DS.charCodeAt(w)]=w;function uS(w){let Z=w.length*.75,Bt=w.length,ot,Ft=0,H1,bt,y1,i1;w.at(-1)===\"=\"&&(Z--,w.at(-2)===\"=\"&&Z--);let L1=new ArrayBuffer(Z),u1=new Uint8Array(L1);for(ot=0;ot<Bt;ot+=4)H1=JU[w.charCodeAt(ot)],bt=JU[w.charCodeAt(ot+1)],y1=JU[w.charCodeAt(ot+2)],i1=JU[w.charCodeAt(ot+3)],u1[Ft++]=H1<<2|bt>>4,u1[Ft++]=(bt&15)<<4|y1>>2,u1[Ft++]=(y1&3)<<6|i1&63;return L1}function Ml(w){return w.toString(16).padStart(2,\"0\")}var hr=globalThis.devicePixelRatio||1;var z2=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=`#${Ml(Bt)}${Ml(ot)}${Ml(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,H1,bt,y1,i1,L1){if(arguments.length!==9)throw new Error(`drawImage call with ${arguments.length} arguments unimplemented`);let u1=this.canvasCache.get(Z);if(!u1){u1=document.createElement(\"canvas\");let n0=Z.imageData;u1.width=n0.width,u1.height=n0.height;let N0=u1.getContext(\"2d\");N0.globalAlpha=0,N0.putImageData(n0,0,0),this.canvasCache.set(Z,u1)}this.ctx.drawImage(u1,Bt,ot,Ft,H1,bt,y1,i1,L1)}isDarkBackground(){return!1}};var Hl=class{constructor(Z,Bt){this.canvasElement=Z,this.changeListener=Bt,this.drawContext=new z2(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 Cl}};var BPt=`\n/* We can customize editor styles here. */\n`,Gc;function QS(){if(Gc)return Gc;let w=new CSSStyleSheet;return w.replaceSync(BPt),Gc=w,w}function Jc(w,Z,Bt){let ot=-1;function Ft(bt,y1,i1=0){y1.button>0||Z.fireMouseEvent(bt,y1.button+1,i1,Math.round(y1.offsetX*hr),Math.round(y1.offsetY*hr),y1.shiftKey,y1.ctrlKey,y1.altKey,y1.button===2)}w.addEventListener(\"pointerdown\",bt=>{ot===-1&&(ot=bt.pointerId,Ft(Bt.MOUSE_EVENT_PRESSED,bt))});function H1(bt){ot===bt.pointerId&&(ot=-1,Ft(Bt.MOUSE_EVENT_RELEASED,bt))}return document.addEventListener(\"pointerup\",H1),w.addEventListener(\"click\",bt=>{Ft(Bt.MOUSE_EVENT_CLICKED,bt,bt.detail)}),w.addEventListener(\"pointerenter\",bt=>{Ft(Bt.MOUSE_EVENT_ENTERED,bt)}),w.addEventListener(\"pointerleave\",bt=>{Ft(Bt.MOUSE_EVENT_EXITED,bt)}),w.addEventListener(\"pointermove\",bt=>{ot!==-1?ot===bt.pointerId&&Ft(Bt.MOUSE_EVENT_DRAGGED,bt):Ft(Bt.MOUSE_EVENT_MOVED,bt)}),()=>{document.removeEventListener(\"pointerup\",H1)}}function US(w,Z,Bt,ot,Ft){let H1=typeof navigator<\"u\"&&navigator.platform===\"MacIntel\",bt=i1=>H1&&i1.metaKey||!H1&&i1.ctrlKey;function y1(i1,L1){let u1=vPt(L1,ot);u1!==null&&Bt.fireKeyEvent(i1,u1,L1.altKey,L1.ctrlKey,L1.shiftKey,bt(L1))}Z.addEventListener(\"keydown\",i1=>{bt(i1)&&i1.key===\"c\"||bt(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 L1=i1.clipboardData.getData(\"text\"),u1=Ft.fromText(L1);u1&&u1.getAllAtoms()>0&&Bt.addPastedOrDropped(u1)})}function vPt(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 Vl=class{constructor(Z){this.canvasElement=Z,this.drawContext=new z2(this.canvasElement.getContext(\"2d\"))}setDimensions(Z,Bt){this.canvasElement.width=Z,this.canvasElement.style.width=`${Z/hr}px`,this.canvasElement.height=Bt,this.canvasElement.style.height=`${Bt/hr}px`}getDrawContext(){return this.drawContext}getBackgroundRGB(){return 16777215}getForegroundRGB(){return 0}};var oS={\"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 zc=Object.create(null),LS=3/4,El=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(zc[Z])return zc[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=`${oS[Bt]} ${this.HOTSPOT_32[Z*2]*LS} ${this.HOTSPOT_32[Z*2+1]*LS}, default`;return zc[Z]=Ft,Ft}};var Sl=class{constructor(Z,Bt){this.title=Z,this.rootElement=Bt,this.elements=[],this.dialogElement=null}setLayout(Z,Bt){this.hLayout=sS(Z),this.vLayout=`${sS(Bt)} auto`}add(Z,Bt,ot,Ft,H1){this.elements.push({component:Z,x:Bt,y:ot,x2:Ft,y2:H1})}createTextField(Z,Bt){return new Kc(Z,Bt)}createLabel(Z){return new Yc(Z)}createComboBox(){return new Xc}createCheckBox(Z){return new Zc(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:L1,y:u1,x2:n0,y2:N0}of this.elements){let H0=document.createElement(\"div\");n0===void 0?(H0.style.gridColumn=`${L1+1} / ${L1+2}`,H0.style.gridRow=`${u1+1} / ${u1+2}`):(H0.style.gridColumn=`${L1+1} / ${n0+2}`,H0.style.gridRow=`${u1+1} / ${N0+2}`),H0.append(i1.getElement()),Ft.append(H0)}let H1=document.createElement(\"div\");Object.assign(H1.style,{display:\"flex\",flexDirection:\"row-reverse\",gap:\"15px\",gridColumn:\"1 / -1\",gridRow:\"-1\"}),Ft.append(H1);let bt=document.createElement(\"button\");bt.type=\"submit\",bt.textContent=\"OK\",H1.append(bt);let y1=document.createElement(\"button\");y1.type=\"button\",y1.textContent=\"Cancel\",y1.addEventListener(\"click\",()=>{this.consumer.fireCancel(),Z()}),H1.append(y1),Bt.showModal(),Bt.addEventListener(\"cancel\",()=>{this.consumer.fireCancel(),Z()})}disposeDialog(){this.dialogElement!==null&&(this.dialogElement.remove(),this.dialogElement=null)}},Y2=class{setEventHandler(Z){this.eventHandler=Z}fireEvent(Z,Bt){this.eventHandler(Z,Bt)}},Yc=class extends Y2{constructor(Z){super(),this.element=document.createElement(\"label\"),this.setText(Z)}setText(Z){this.element.textContent=Z}getElement(){return this.element}},Kc=class extends Y2{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}},Xc=class extends Y2{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}},Zc=class extends Y2{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 sS(w){return w.map(Z=>Z>0?`${Z}px`:\"auto\").join(\" \")}var zU=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,H1=ot<<8|Ft;this.dataView.setInt32((Bt*this.imageData.width+Z)*4,H1,!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 ql=class{constructor(Z,Bt,ot){this.canvasElement=Z,this.dialogRoot=Bt,this.JavaEditorArea=ot}register(Z){this.javaUiHelper=Z,this.cursorManager=new El(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 zU(ot)}createImageFromBase64(Z,Bt,ot){ot=ot.replaceAll(/%\\d+%/g,y1=>\"A\".repeat(Number(y1.slice(1,-1))));let Ft=uS(ot),H1=new Uint8ClampedArray(Ft),bt=new ImageData(H1,Z,Bt);return new zU(bt)}createDialog(Z){return new Sl(Z,this.dialogRoot)}runLater(Z){typeof requestAnimationFrame==\"function\"?requestAnimationFrame(Z):typeof setImmediate==\"function\"?setImmediate(Z):setTimeout(Z,0)}};function yS(w,Z,Bt,ot,Ft,H1,bt,y1){let{readOnly:i1=!1,initialMode:L1=\"molecule\",initialFragment:u1=!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=[QS()];let H0=null;i1||(H0=document.createElement(\"canvas\"),N0.append(H0));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 j8=new H1(new ql(Xe,Se,ot)),GP=new ot(FPt(L1,ot),new Hl(Xe,Bt),j8);if(u1)if(L1===\"molecule\"){let jA=new bt(0,0);jA.setFragment(!0),GP.setMolecule(jA)}else{let jA=y1.create();jA.setFragment(!0),GP.setReaction(jA)}j8.setEditorArea(GP);let Nn=i1?null:new Ft(GP,new Vl(H0),j8);function K2(jA){Xe.style.width=`${jA.width}px`,Xe.width=Math.floor(jA.width*hr),Xe.style.height=`${jA.height}px`,Xe.height=Math.floor(jA.height*hr),jA.width>0&&jA.height>0&&GP.repaint()}let YU=Se.getBoundingClientRect();K2(YU);let X2=new ResizeObserver(([jA])=>{K2(jA.contentRect)});X2.observe(Se);let Z2=null,W2=null,_2=null;i1||(Z2=Jc(Xe,GP,ot),W2=US(Se,Xe,GP,ot,bt),_2=Jc(H0,Nn,ot));function KU(){n0.remove(),X2.disconnect(),Z2?.(),W2?.(),_2?.()}return{editorArea:GP,toolbar:Nn,uiHelper:j8,destroy:KU}}function FPt(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 lS(w,Z,Bt,ot,Ft){class H1{#t;#e;#P;#n;#f;#r;constructor(y1,i1={}){let{editorArea:L1,toolbar:u1,uiHelper:n0,destroy:N0}=yS(y1,i1,H0=>this.#i(H0),w,Z,Bt,ot,Ft);this.#t=L1,this.#e=u1,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:L1}=y1;this.#n({type:this.#f[i1],isUserEvent:L1})}}return H1}function TS(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(bt){this.#t.idcode=String(bt),this.setAttribute(\"idcode\",this.#t.idcode)}get fragment(){return this.#t.fragment}set fragment(bt){this.#t.fragment=!!bt,this.#t.fragment?this.setAttribute(\"fragment\",\"\"):this.removeAttribute(\"fragment\")}get mode(){return this.#t.mode}set mode(bt){this.#t.mode=String(bt),this.setAttribute(\"mode\",this.#t.mode)}get readonly(){return this.#t.readonly}set readonly(bt){this.#t.readonly=!!bt,this.#t.readonly?this.setAttribute(\"readonly\",\"\"):this.removeAttribute(\"readonly\")}setMolecule(bt){this.fragment=bt.isFragment(),this.idcode=`${bt.getIDCode()} ${bt.getIDCoordinates()}`,this.#e.setMolecule(bt)}getMolecule(){return this.#e.getMolecule()}setReaction(bt){this.fragment=bt.isFragment(),this.idcode=ot.encode(bt,{keepAbsoluteCoordinates:!0,mode:ot.INCLUDE_MAPPING|ot.INCLUDE_COORDS|ot.RETAIN_REACTANT_AND_PRODUCT_ORDER})??\"\",this.#e.setReaction(bt)}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.#U),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(bt){let y1=bt.indexOf(\" \");if(y1===-1)return Z.fromIDCode(bt);let i1=bt.slice(0,y1),L1=bt.slice(y1+1);return Z.fromIDCode(i1,L1)}#r(){let bt=this.#f(this.idcode);bt.setFragment(this.fragment),this.#e.setMolecule(bt)}#A(){let bt=ot.decode(this.idcode,{ensureCoordinates:!0})??Bt.create();bt.setFragment(this.fragment),this.#e.setReaction(bt)}#i=!1;#Q(bt){this.#i=!0;try{bt()}finally{this.#i=!1}}#U=bt=>{let y1=this.idcode,i1=this.fragment;this.#Q(()=>{if(bt.type===\"molecule\")switch(this.mode){case Ft.MODE.MOLECULE:{let u1=this.getMolecule();this.idcode=`${u1.getIDCode()} ${u1.getIDCoordinates()}`,this.fragment=u1.isFragment();break}case Ft.MODE.REACTION:{let u1=this.getReaction();this.idcode=ot.encode(u1,{keepAbsoluteCoordinates:!0,mode:ot.INCLUDE_MAPPING|ot.INCLUDE_COORDS|ot.RETAIN_REACTANT_AND_PRODUCT_ORDER}),this.fragment=u1.isFragment();break}default:throw new Error(`Unsupported mode ${this.mode}`)}});let L1=new CustomEvent(\"change\",{detail:bt,bubbles:!0});if(this.dispatchEvent(L1),bt.mode===\"molecule\"){if(this.idcode!==y1){let u1=new CustomEvent(\"idcode-changed\",{detail:this.idcode,bubbles:!0});this.dispatchEvent(u1)}if(this.fragment!==i1){let u1=new CustomEvent(\"fragment-changed\",{detail:this.fragment,bubbles:!0});this.dispatchEvent(u1)}}};#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(bt,y1,i1){if(!this.#e||this.#i)return;(()=>{switch(bt){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 Wc(w){let{GenericEditorArea:Z,GenericEditorToolbar:Bt,GenericUIHelper:ot,Molecule:Ft,Reaction:H1,ReactionEncoder:bt}=w,y1=lS(Z,Bt,ot,Ft,H1);function i1(){let L1=customElements.get(\"openchemlib-editor\");if(L1)return L1;let u1=TS(y1,Ft,H1,bt);customElements.define(\"openchemlib-editor\",u1);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),u1}w.CanvasEditor=y1,w.registerCustomElement=i1,delete w.GenericEditorArea,delete w.GenericEditorToolbar,delete w.GenericUIHelper}function hS(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 cS(w){w.prototype.getNextCustomAtomLabel=function(Bt){let ot=Bt||\"1\",Ft=new Set;for(let bt=0;bt<this.getAllAtoms();bt++){let y1=this.getAtomCustomLabel(bt);y1&&Ft.add(y1)}let H1=0;for(;Ft.has(ot)&&H1++<100;)ot=mPt(ot);return ot}}function mPt(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 wS(w){let Z=w.fromMolfile;w.fromMolfile=function(ot,Ft={}){let{customLabelPosition:H1}=Ft,bt=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 bt;let L1=i1.slice(4+bt.getAllAtoms()+bt.getAllBonds());for(let u1=0;u1<L1.length;u1++){let n0=L1[u1];if(n0.startsWith(\"A  \")){let N0=Number(n0.slice(3)),H0=L1[u1+1]?.trim();u1++,!Number.isNaN(N0)&&N0<=bt.getAllAtoms()&&H0&&!bt.getAtomCustomLabel(N0-1)&&bt.setAtomCustomLabel(N0-1,H0)}if(n0.startsWith(\"V  \")){let N0=n0.split(\" \").filter(Boolean);if(N0.length>=3){let H0=Number(N0[1]),Se=N0.slice(2).join(\" \");!Number.isNaN(H0)&&H0<=bt.getAllAtoms()&&!bt.getAtomCustomLabel(H0-1)&&bt.setAtomCustomLabel(H0-1,Se)}}if(n0.startsWith(\"M  ZZC\")){let N0=Number(n0.slice(7,10).trim()),H0=n0.slice(10).trim();N0&&H0&&bt.setAtomCustomLabel(N0-1,H0)}}return bt.changeCustomLabelPosition(H1),bt}}var kPt=[\"M  STY\",\"M  SLB\",\"M  SAL\",\"M  SDT\",\"M  SDD\",\"M  SED\"];function gS(w){let Z=w.prototype.toMolfile;w.prototype.toMolfile=function(ot={}){let Ft=this.getCompactCopy(),{includeCustomAtomLabelsAsALines:H1=!1,includeCustomAtomLabelsAsVLines:bt=!1,customLabelPosition:y1,removeCustomAtomLabels:i1=!1}=ot;Ft.changeCustomLabelPosition(y1);let L1=Z.call(Ft);if(!H1&&!bt&&!i1)return L1;let u1=L1.includes(`\\r\n`)?`\\r\n`:`\n`,n0=L1.split(u1);if(i1&&(n0=n0.filter(Se=>!kPt.some(Xe=>Se.startsWith(Xe)))),n0.length<4||!n0[3].includes(\"V2000\"))return L1;let N0=[];for(let Se=0;Se<Ft.getAllAtoms();Se++){let Xe=Ft.getAtomCustomLabel(Se);if(Xe){let j8=String(Se+1).padStart(3,\" \");H1&&N0.push(`A  ${j8}`,Xe),bt&&N0.push(`V  ${j8} ${Xe}`)}}let H0=n0.findIndex(Se=>Se.startsWith(\"M  END\"));return H0===-1?L1:(n0.splice(H0,0,...N0),n0.join(u1))}}function BS(w){let Z=w.prototype.toRxn,Bt=w.prototype.toRxnV3;w.prototype.toRxn=function(Ft={}){return dS(this,Z,Ft)},w.prototype.toRxnV3=function(Ft={}){return dS(this,Bt,Ft)}}function dS(w,Z,Bt){let{programName:ot=\"\",keepIdCode:Ft=!1}=Bt,H1=Z.call(w,ot);return Ft?H1:H1.replace(/^OCL_RXN_V1.0:.*$/m,\"\")}function vS(w){let Z=w.prototype.toSVG;w.prototype.toSVG=function(ot,Ft,H1,bt){if(typeof ot!=\"number\"||typeof Ft!=\"number\")throw new Error(\"Molecule#toSVG requires width and height to be specified\");bt=bt||{};let y1=bt.factorTextSize||1,i1=bt.autoCrop===!0,L1=bt.autoCropMargin===void 0?5:bt.autoCropMargin,u1=Z.call(this,ot,Ft,y1,i1,L1,H1,bt),n0=/svg id=\"(.*)\" xmlns/.exec(u1)[1];return u1=u1.replace(\"<style>\",`<style> #${n0} text {font-family: sans-serif;}`),u1=u1.replace(\"line {\",`#${n0} line {`),u1=u1.replace(\"polygon {\",`#${n0} polygon {`),bt.fontWeight&&(u1=u1.replaceAll(\"font-size=\",`font-weight=\"${bt.fontWeight}\" font-size=`)),bt.strokeWidth&&(u1=u1.replaceAll(/stroke-width=\"[^\"]+\"/g,`stroke-width=\"${bt.strokeWidth}\"`)),u1}}function FS(w){let{ConformerGenerator:Z,ForceFieldMMFF94:Bt,Molecule:ot,Reaction:Ft}=w;Z.prototype.molecules=function*(){let L1;for(;(L1=this.getNextConformerAsMolecule())!==null;)yield L1};let H1={maxIts:4e3,gradTol:1e-4,funcTol:1e-6},bt=Bt.prototype._minimise;delete Bt.prototype._minimise,Bt.prototype.minimise=function(L1){return L1={...H1,...L1},bt.call(this,L1.maxIts,L1.gradTol,L1.funcTol)},hS(ot),cS(ot),wS(ot),gS(ot),BS(Ft,ot),vS(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(L1){let u1=y1(L1);return u1&&u1.getAllAtoms()>0?u1:null},ot.prototype.getOCL=function(){return w}}function eD(){}function bPt(w){let Z=w.document,Bt={},ot={userAgent:\"webkit\"},Ft=eD;Ft.__moduleStartupDone=eD;let H1=eD,bt,y1;function i1(){}function L1(){}function u1(){}function n0(){}function N0(){}function H0(){}function Se(){}function Xe(){}function j8(){}function GP(){}function Nn(){}function K2(){}function YU(){}function X2(){}function Z2(){}function W2(){}function _2(){}function KU(){}function jA(){}function _c(){}function Il(){}function xl(){}function AD(){}function $c(){}function c9(){}function nD(){}function ac(){}function tw(){}function CPt(t){}function ew(){}function Aw(){}function Nl(){}function vi(){}function PD(){}function B1(){}function kS(){}function nw(){}function Pw(){}function rw(){}function u0(){}function iw(){}function fw(){}function XU(){}function Dw(){}function uw(){}function Qw(){}function Uw(){}function ow(){}function Lw(){}function sw(){}function Ol(){}function yw(){}function lw(){}function Tw(){}function hw(){}function cw(){}function ww(){}function gw(){}function dw(){}function Bw(){}function vw(){}function Fw(){}function mw(){}function kw(){}function bS(t,e){t.S=e}function Gl(t,e){t.I=e}function RS(t,e){t.T=e}function jS(t,e){t.O=e}function $2(t,e){t.P=e}function pS(t,e){t.G=e}function CS(t,e){t.d=e}function MS(t,e){t.f=e}function HS(t,e){t.i=e}function VS(t,e){t.i=e}function ES(t,e){t.f=e}function SS(t,e){t.n=e}function bw(t,e){t.p=e}function qS(t,e){t.b=e}function IS(t,e){t.e=e}function xS(t,e){t.r=e}function NS(t){t.a=t.b}function ZU(t){this.a=t}function cr(t){this.j=t}function GA(t){this.b=t}function Rw(t){this.e=t}function jw(t){this.e=t}function pw(t){this.a=t}function Cw(t){this.a=t}function Mw(t){this.a=t}function Hw(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 Iw(t){this.a=t}function a2(t){this.a=t}function WU(t){this.a=t}function rD(t){this.a=t}function xw(t){this.b=t}function tu(){this.i=0}function Nw(){this.i=1}function Ow(){this.a=-1}function Jl(){this.b=-1}function Fi(t){this.a=t}function eu(t){this.a=t}function zl(t){this.a=t}function Yl(t){this.a=t}function Kl(t){this.a=t}function iD(t){this.a=t}function Xl(t){this.a=t}function Zl(t){this.a=t}function fD(t){this.a=t}function DD(t){this.a=t}function Wl(t){this.c=t}function _l(t){this.b=t}function w9(t){this.a=t}function g9(t){this.a=t}function Wt(t){this.c=t}function _U(t){this.b=t}function Gw(t){this.a=t}function Jw(t){this.a=t}function $l(t){this.a=t}function zw(t){this.c=t}function Yw(t){this.c=t}function Kw(t){this.a=t}function Xw(t){this.a=t}function OS(t,e){t.a=e}function GS(t,e){t.a=e}function JS(t,e){t.d=e}function zS(t,e){t.e=e}function $U(t,e){t.n=e}function YS(t,e){t.T&=~e}function Zw(t,e){t.C[e]=-1}function al(t,e){mt(t.a,e)}function KS(t,e){mt(t.S,e)}function XS(t,e){DO(t.a,e)}function ZS(t,e){fO(t.a,e)}function WS(t,e){au(t.a,e)}function t3(t,e){mt(t.a,e)}function JP(t,e){mt(t.a,e)}function aU(t,e){LA(t.d,e)}function _S(t,e){XS(e,t.B)}function $S(t,e){ZS(e,t.v)}function aS(t,e){Wq(e,t.f)}function tq(t,e){t.H[e]=512}function eq(t,e,A){t.k[e]=A}function Au(){fo(this)}function f1(){cu(this)}function LP(){Cu(this)}function Ww(t){XK(this,t)}function to(){f1.call(this)}function _w(){f1.call(this)}function $w(){mr.call(this)}function aw(){e7.call(this)}function e3(){e7.call(this)}function A3(){mr.call(this)}function d9(){mr.call(this)}function Aq(){return++pV}function nq(t){return t>>>0}function Pq(t){return cK(t)}function rq(t){return FK(t)}function iq(t){t.a>0&&--t.a}function sP(t,e){t.u[e]|=Q0}function n3(t,e){t.F[e]|=I0}function fq(t,e){t.q=e,t.T=0}function Dq(t,e){t.r=e,t.T=0}function mi(t,e){t.length=e}function uq(t,e){mt(t.c,e)}function rA(t,e){Si(t.a,e)}function Qq(t){IE=t,pU=!0}function Uq(t){return $r(t)}function oq(){return kf(),sr}function t7(){this.a=new vo}function uD(){this.a=new f1}function e7(){this.a=new f1}function A7(){this.a=new f1}function nu(){this.c=new f1}function n7(){this.b=new k9}function c0(){c0=B1,JD()}function P3(){mr.call(this)}function P7(){mr.call(this)}function dA(){mr.call(this)}function r3(){mr.call(this)}function r7(){mr.call(this)}function i3(){LQ.call(this,0)}function i7(){Y8.call(this,2)}function f7(){A3.call(this)}function f3(){this.a=new TD}function QD(){this.a=new LP}function D3(){this.a=new lP}function D7(){this.a=new lP}function Pu(t){this.a=GJ(t)}function Lq(t){this.a=t,Qi(t)}function sq(t,e){rA(e,t.a.a)}function eo(t,e,A){t.k[e].a=A}function Ao(t,e,A){t.k[e].b=A}function no(t,e,A){t.k[e].c=A}function yq(t){_A(),Y1(),wn=t}function ki(t){SL(t),t.d=null}function u7(){wp(),this.b=It}function wr(t){V1.call(this,t)}function p1(t,e){return t.s[e]}function Q7(t,e){return t.J[e]}function UD(t,e){return t.e[e]}function Mt(t,e){return t.e[e]}function a1(t,e){return t.o[e]}function lq(t,e){return t.o[e]}function Tq(t,e){return t.X[e]}function hq(t,e){return t.Y[e]}function ye(t,e){return t.A[e]}function o0(t,e){return t.B[e]}function K(t,e){return t.C[e]}function ee(t,e){return t.G[e]}function l1(t,e){return t.H[e]}function O(t,e){return t.j[e]}function cq(t,e){return t.d[e]}function u3(t,e){return t.e[e]}function wq(t,e){return t.f[e]}function B9(t,e){return t.a[e]}function ru(t,e){return t.a[e]}function iu(t,e){return t.b[e]}function oD(t,e){return t.e[e]}function J0(t,e){return t.k[e]}function gq(t,e){return t.a[e]}function U7(t,e){return t.b[e]}function o7(t,e){return t.c[e]}function dq(t,e,A){t8(t.a,A,e)}function Bq(t){bJ(t.a,t.c,t.b)}function L7(t){wr.call(this,t)}function s7(t){fa.call(this,t)}function y7(t){No.call(this,t)}function l7(t){No.call(this,t)}function T7(t){No.call(this,t)}function h7(t){No.call(this,t)}function gr(t){wr.call(this,t)}function c7(t){wr.call(this,t)}function w7(t){zL.call(this,t)}function bi(t){t.b=null,t.c=0}function Ri(t){return U1(t),t}function LD(t){return U1(t),t}function vq(t){return nP*t*t}function Fq(t){return is(t,t.i)}function mq(t,e){return oz(t,e)}function kq(t,e){return tJ(t,e)}function bq(t,e){return t.db[e]}function Rq(t){return Ui(t),t.B}function jq(t){return Ui(t),t.H}function ji(){ji=B1,ul=new LP}function g7(){g7=B1,$4=new i1}function Q3(){Q3=B1,a4=new tw}function pq(t,e){t.g=new zr(e)}function sD(t,e){t.T|=248&(8|e)}function yD(t,e,A){bD(t.k[e],A)}function Cq(t){lx(t,t.length)}function Mq(t){ux(t,t.length)}function Hq(t){Qx(t,t.length)}function Vq(t){Tx(t,t.length)}function U3(t){Hu(t,t.length)}function Po(t){U1(t),this.a=t}function o3(t){new f1,this.a=t}function p8(t){wr.call(this,t)}function C8(t){wr.call(this,t)}function ro(t){wr.call(this,t)}function d7(t){wr.call(this,t)}function lD(t){wr.call(this,t)}function L3(t){gr.call(this,t)}function BA(t){EA.call(this,t,0)}function B7(t){return Iu(t,t.jb)}function zP(t){return!!t&&t.b}function v7(t){return t.b==t.c}function vA(t,e){return t.J[e].c}function kt(t,e){return t.J[e].a}function jt(t,e){return t.J[e].b}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 s3(t,e){return t.a[e]}function v9(t,e){return t.k[e].a}function F9(t,e){return t.k[e].b}function m9(t,e){return t.k[e].c}function d(t,e){return RB(t,e)}function F7(t){return 4e3*t*t}function Eq(t){return 8e3*t*t}function Sq(t){return t.c||cQ(t)}function qq(t){return _A(),ar(t)}function Iq(t){return _A(),ei(t)}function JA(){Y1(),$3.call(this)}function m7(t){gr.call(this,t)}function YP(t){C8.call(this,t)}function TD(){eu.call(this,\"\")}function fu(){eu.call(this,\"\")}function V0(){eu.call(this,\"\")}function k9(){eu.call(this,\"\")}function y3(t){Pu.call(this,t)}function io(t){_U.call(this,t)}function k7(t){Co.call(this,t)}function b7(t){io.call(this,t)}function R7(t){yB.call(this,t)}function l3(t){M8.call(this,t)}function j7(t){hD.call(this,t,0)}function p7(t){Lq.call(this,t.a)}function T3(t){Xw.call(this,t)}function C7(t){C9.call(this,t)}function pi(){M3.call(this,null)}function M7(){this.a=0,this.b=0}function H7(t){this.b=t,this.a=1}function fo(t){t.a=0,t.b=0,t.c=1}function xq(t,e){t.c=e,t.T&=-144}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 Du(t,e){return t.A[e]==0}function FA(t,e){return t.u[e]&48}function Do(t,e){return t<e?t:t-e}function X1(t,e){return e*t.c+t.b}function Z1(t,e){return e*t.c+t.a}function h3(t,e){return N(t.j,e)}function V7(t,e){return N(t.k,e)}function c3(t,e){return bq(t.d,e)}function Nq(t,e){return lq(t.d,e)}function R0(t,e){return Ho(t.d,e)}function Oq(t,e){return N(t.a,e)}function w3(t,e){return N(t.f,e)}function dr(t,e){return N(t.g,e)}function uu(t,e){return pv(t,e)}function Gq(t,e){return ff(t.d,e)}function Qu(t){return yb(t,N5(t))}function E7(t){return t.l|t.m<<22}function Jq(t,e){cI(t.b,t.a,e)}function S7(t,e){mt(t.f,e),t.d=-1}function q7(t,e){mt(t.g,e),t.d=-1}function zq(t,e){return t.a+=e,t}function g3(t,e){return t.a+=e,t}function Uu(t){return Mo(t),t.n}function On(t){return ut(t,7),t.p}function I7(t){this.a=new s7(t.a)}function uo(t){this.a=new Ji(t)}function M8(t){this.a=(U1(t),t)}function b9(t){this.b=t,this.a=0}function R9(){R9=B1,wU=!1}function d3(){d3=B1,LE=(Wh(),kU)}function Yq(){CU!=0&&(CU=0),MU=-1}function x7(){nl==null&&(nl=[])}function Kq(){throw At(new dA)}function B3(){throw At(new dA)}function hD(t,e){this.k=t,this.j=e}function u(t,e){this.b=t,this.a=e}function Qo(t,e){ha.call(this,t,e)}function cD(t){GK.call(this,t,t.o)}function Uo(){gO.call(this,new c9)}function oo(){oo=B1,H4=SA(\"X\",32)}function N7(t,e,A){Dn(t,A),Ln(t,e)}function Ci(t,e){return X0[t.C[e]]}function ou(t,e){return t.u[e]&448}function Lu(t,e){return t.H[e]&127}function iA(t,e){return t.a[e]&w1}function yP(t,e){return t.c[e]&w1}function Xq(t,e){return t.C[e]==-1}function Ze(t,e,A,n){t.w[e]=n?-A:A}function wD(t,e){su.call(this,t,e)}function Mi(t,e){su.call(this,t,e)}function Lo(t,e){this.b=t,this.a=e}function gD(t,e){this.b=t,this.a=e}function O7(t,e){this.b=t,this.a=e}function KP(t,e){this.a=t,this.b=e}function su(t,e){this.a=t,this.b=e}function G7(t,e){this.a=t,this.b=e}function J7(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 We(t,e){this.a=t,this.b=e}function K7(t,e){this.a=t,this.b=e}function X7(t,e){this.a=t,this.b=e}function v3(t,e){this.a=t,this.b=e}function so(t,e){this.k=e,this.j=t}function nn(t){this.b=t,this.a=-2}function Z7(t){pD.call(this,t,0)}function W7(){yB.call(this,null)}function lP(){Ji.call(this,null)}function _7(){C9.call(this,null)}function $7(){d3(),pU||gL(),new Rj}function x1(){x1=B1,gi=new rw}function yo(){yo=B1,vl=new Aw}function Zq(t,e){UL(t.c,new Hw(e))}function Wq(t,e){uG(t.a,t.b,t.c,e)}function _q(t,e){ox(t),t.b._c(e)}function a7(t,e){return mt(t.a,e)}function tg(t,e){return ff(t.a,e)}function F3(t,e){return N(t.a,e).a}function eg(t,e){return N(t.a,e).b}function z(t,e,A){return t.D[e][A]}function _(t,e,A){return t.i[e][A]}function Ot(t,e,A){return t.k[e][A]}function pA(t,e,A){return t.n[e][A]}function $q(t,e){return t.H[e]==512}function dD(t){return t.a.c+t.c.c}function Ag(t){return sn(t,1,t.c)>0}function S1(t,e){return G(t,e)>0}function Hi(t,e){return G(t,e)<0}function yu(t,e){return wg(e,t.a)}function ng(t,e){return wg(e,t.a)}function j9(t,e){su.call(this,t,e)}function Pg(t){sp(),pa.call(this,t)}function Br(t){return t.b=WB(t.a)}function rg(t,e){return t.a.get(e)}function lo(t,e){return So(t.a,e)}function lu(t,e){su.call(this,t,e)}function To(t,e){su.call(this,t,e)}function TP(t,e){this.a=t,this.b=e}function ig(t,e){this.a=t,this.b=e}function fg(t,e){this.a=t,this.b=e}function Dg(t,e){this.b=t,this.a=e}function ug(t,e){this.b=t,this.a=e}function ho(t,e){this.c=t,this.d=e}function Qg(t,e){this.a=t,this.c=e}function co(t,e){V9(t,t.length,e)}function aq(t){return t.B?t.B.u:1}function tI(t){return Array.from(t)}function eI(){return new _P(new P8)}function Tu(t){return typeof t===w2}function Vi(t){return typeof t===nr}function H8(t){return typeof t===bf}function J1(t){return t??null}function m3(t,e){return t==e-1?0:t+1}function AI(t,e){return _A(),Je(t,e)}function nI(t,e){return _A(),SA(t,e)}function P0(t,e){return G(t,e)==0}function hu(t,e){return G(t,e)>=0}function Ug(t,e){return G(t,e)<=0}function gt(t,e){return G(t,e)!=0}function PI(t,e){i6.call(this,t,0,e)}function rI(t){w.clearTimeout(t)}function og(t){this.b=t,this.c=!1}function Lg(){pU||gL(),this.a=new Fm}function sg(){sg=B1,zf=(x1(),$A)}function yg(){yg=B1,B8=(x1(),$A)}function lg(t,e){return J1(t)===J1(e)}function k3(t,e,A){return t.e[e][A]}function b3(t,e,A){return t.f[e][A]}function Ei(t,e){return(t.u[e]&4)!=0}function wo(t,e){return(t.F[e]&4)!=0}function De(t,e){return t.i[e].length}function R3(t,e){return t.e[e]-t.j[e]}function go(t,e){return(t.u[e]&8)!=0}function Tg(t){return parseInt(t)||-1}function cu(t){t.a=h(uP,A0,1,0,5,1)}function Si(t,e){return t.a+=\"\"+e,t}function hg(t,e){return t.a+=\"\"+e,t}function J(t,e){return t.a+=\"\"+e,t}function Ie(t,e,A){t.J[e].b=A,t.T&=7}function Be(t,e,A){t.J[e].a=A,t.T&=7}function hP(t,e,A){t.J[e].c=A,t.T&=7}function iI(t,e,A){t8(t.f,A,e),t.d=-1}function fI(t,e,A){t8(t.g,A,e),t.d=-1}function DI(t,e,A){return M5(t.a,e,A)}function cg(t){return S0(t.l,t.m,t.h)}function XP(t){return t?t.ed():null}function wg(t,e){return t.toFixed(e)}function p9(t){return t.a<t.c.size()}function U0(t){return typeof t===nr}function gg(t,e){return e==0?t.i:t.j}function wu(t,e){Wi(t,0,t.length,e)}function j3(t,e){yx(t.a,t.a.length,e)}function Bo(t,e,A,n){t.a=e,t.b=A,t.c=n}function BD(t,e,A,n){t.D[e][A]=n,t.T=0}function uI(t,e){return t.j[e]-EL(t,e)}function fA(t,e){return(t.F[e]&64)!=0}function gu(t,e){return(t.F[e]&48)>>4}function V8(t){return wP(t,t.q,t.r,wn)}function du(t){a5(),sB.call(this,t,0)}function p3(t){PI.call(this,t,new k9)}function dg(t){WX.call(this,t,new k9)}function C3(t){P8.call(this),this.e=t}function M3(t){this.d=new f1,this.c=t}function Bg(){this.c=new lP,this.b=0}function vg(t,e){this.b=AP(e),this.a=t}function Fg(t,e){this.b=AP(e),this.a=t}function C9(t){this.f=t,this.g=!0}function mg(){Xw.call(this,\"UTF-8\")}function vo(){kf(),this.g=new Ni,_J()}function ZP(t,e,A){mt(t.a,new We(e,A))}function kg(t,e,A,n){t.e=e,t.c=A,t.d=n}function QI(t,e){return j0(t.a[e][3])}function UI(t,e){return j0(t.a[e][2])}function bg(t,e){return j0(t.a[e][2])}function Rg(t,e){return j0(t.a[e][1])}function oI(t){return t.e==null?\"\":t.e}function Fo(t){return t!=null?a8(t):0}function jg(t){ke(),QG.call(this,t)}function pg(t){XO.call(this,t,hN())}function Cg(){lu.call(this,\"Head\",1)}function Mg(){lu.call(this,\"Tail\",3)}function Hg(t){Wi(t,0,t.length,null)}function H3(t){ut(t,31),t.d&&CY(t.d)}function LI(){return _A(),Y1(),Y1(),wn}function Pn(t,e){return wP(t,t.q,t.r,e)}function Vg(t,e){return(t.u[e]&Q0)!=0}function vr(t,e){return(t.F[e]&Q0)!=0}function V3(t,e){return(t.F[e]&s8)!=0}function E3(t,e){return(t.F[e]&I0)!=0}function z0(t,e){return(t.u[e]&I0)!=0}function Fr(t,e){return(t.u[e]&nU)!=0}function E8(t,e){return(t.u[e]&Tn)!=0}function qi(t,e){return(t.u[e]&hn)!=0}function sI(t,e){return(t.u[e]&C0)!=0}function yI(t,e){return(t.u[e]&ge)!=0}function i0(t,e){return(t.a[e]&Q0)!=0}function Re(t,e){return(t.c[e]&Q0)!=0}function S8(t,e){return(t.c[e]&I0)!=0}function lI(t,e){return(t.a[e]&I0)!=0}function S3(t,e){return(t.a[e]&T8)!=0}function Bu(t,e){return(t.G[e]&y8)!=0}function r0(t,e){return(t.u[e]&512)!=0}function WP(t,e){return(t.F[e]&128)!=0}function cP(t,e){return(t.F[e]&768)>>8}function q3(t,e){return t<e?-1:t>e?1:0}function S0(t,e,A){return{l:t,m:e,h:A}}function mo(t,e,A){return t.j=e,f6(t,A)}function Eg(t,e){return t.a+=Te(e),t}function TI(t,e){t.H[e]=512,mf(t),t.T=0}function ko(t,e){LL(t,e),t.d&&(e.T=0)}function zA(t,e){Y1(),Fv.call(this,t,e)}function CA(t){_A(),AL.call(this,0,0,t)}function vu(t){xe.call(this,t.a,t.b,t.c)}function Sg(){dL.call(this,\"#\",\"\",\"\")}function qg(){lu.call(this,\"Range\",2)}function q8(t){return tP(t,0,t.length)}function hI(t,e,A){return FI(t.a,e,A)}function cI(t,e,A){GS(t,hI(e,t.a,A))}function wI(t,e){e.Nb(t.c),WO(e,t.a,t.b)}function I3(t,e){GB(e,t.c),CL(e,t.a,t.b)}function vn(t,e){return e<t.f&&i0(t.p,e)}function gI(t,e){return e<t.f&&S3(t.p,e)}function _e(t,e){return e<t.g&&Re(t.p,e)}function Zt(t,e){return t!=null&&Tz(t,e)}function Ae(t,e){return(t.u[e]&m1)>>18}function x3(t,e){return(t.G[e]&7680)>>9}function dI(t,e){return j0(t.b[e-1][2])}function Ig(t,e,A){return j0(t.a[e][A])}function N3(t,e){return N(t.k,e).length}function BI(t,e){return{type:e,value:t}}function O3(t,e,A){return e.kd(t.kd(A))}function vI(t,e,A,n){t.a.nd(A,e.kd(n))}function FI(t,e,A){return t.a.nd(e,A),e}function mt(t,e){return t.a.push(e),!0}function xg(t,e,A){t.i[0].a=e,t.i[0].b=A}function mI(t,e,A){t.a=e^1502,t.b=A^el}function kI(t,e){t.q=Eh(new kB(t.o,e),t)}function ue(t,e){t.d[t.c]=O1(t.d[t.c],e)}function G3(t){t.g=h(dE,h0,115,0,0,1)}function Ng(){this.a=h(uP,A0,1,8,5,1)}function bo(t){this.d=h(NA,a0,6,t,14,1)}function Og(t){this.c=t,this.b=t.length}function Ro(){this.a=0,this.b=0,this.c=0}function Gg(){this.b=new Jl,this.a=this.b}function Jg(t,e){this.a=new EA(t.a,VW(e))}function zg(t,e,A){this.a=new sj(t.a,e.a)}function Yg(t){pU||gL(),this.a=new pg(t)}function Kg(){pi.call(this),this.b=new f1}function mr(){G3(this),qT(this),this.jc()}function At(t){return t.backingJsObject}function vD(t){return t.$H||(t.$H=++pV)}function bI(t){return A1(nr,typeof t)}function RI(t){return A1(bf,typeof t)}function J3(t){return t.p==null?t.o.P:t.p}function jI(t){return t.l+t.m*fP+t.h*DP}function pI(t){return t>=56320&&t<=57343}function Ii(t,e){return le(t.a,J3(e.c))}function I8(t,e,A,n){t.a+=e,t.b+=A,t.c+=n}function FD(t,e,A){t.u[e]&=-449,t.u[e]|=A}function mD(t,e,A){return lF(t,e,e,A),t}function Fu(t,e,A){return WA(t,e,A,t.C[e])}function jo(t,e){return(t.u[e]&49152)>>14}function CI(t,e){return{molecule:t,map:e}}function MI(t,e,A){return vY(rp(t.a,e,A))}function kr(t,e){return e<0?null:N(t.d,e)}function po(t){t.e=Ve,t.a=null,t.d=null}function x8(t){this.a=t,_l.call(this,t)}function Xg(t){this.a=h(rt,ft,6,t,16,1)}function Zg(){this.a=h(F,k,6,0,15,1)}function Co(t){_U.call(this,t),this.a=t}function mu(t){ZF.call(this,t),this.e=NaN}function Fn(t){eu.call(this,(U1(t),t))}function Wg(t){if(!t)throw At(new P3)}function HI(t){if(!t)throw At(new P3)}function kD(t){if(!t)throw At(new r7)}function ku(t){if(!t)throw At(new P7)}function _g(t){if(!t)throw At(new r3)}function VI(t,e){ze(t.a,J3(e.c),new nd)}function bD(t,e){return Bo(t,e.a,e.b,e.c),t}function Mo(t){t.n==null&&fX(t)}function $g(t,e){t.t=w.Math.min(e,t.u)}function ag(t,e,A){t.Q=-6,t.F=e,t.D=A,Mb(t)}function td(t,e,A){t.F[e]&=-49,t.F[e]|=A<<4}function EI(t,e,A,n,P){jk(e,A,t.i[n][P])}function SI(t,e,A,n,P){return RX(t,e,A,n,P)}function wP(t,e,A,n){return kR(t,e,A,n,t.J)}function Ho(t,e){return t.g==null?-1:t.g[e]}function ed(t,e){return t.j==null?-1:t.j[e]}function Ad(t,e){return t&&e&&t instanceof e}function qI(t,e){return uu(new Array(e),t)}function II(t){return t<0?t+36:t>=36?t-36:t}function xI(t,e){return R9(),t==e?0:t?1:-1}function z3(t,e){this.c=1,this.a=t,this.b=e}function Gn(t,e){this.a=0,this.b=t,this.c=e}function nd(){this.b=new V0,this.c=new f1}function Pd(){this.e=new LP,this.c=5e5}function Y3(){_A(),AL.call(this,32,32,null)}function rd(t){cD.call(this,t),lh(this,t)}function K3(t,e){ji(),hB(ul,t)||SD(ul,t,e)}function NI(t,e){t.backingJsObject=e,Ub(t,e)}function $e(t,e){t.a=e,t.c=0,t.b=63,Mq(t.d)}function OI(t,e,A){t.ub(e-t.V/2,A-t.V/2,t.V)}function GI(t,e,A){return t.apply(e,A);var n}function RD(t,e){return l5(t,e,e.q,e.r,!0)}function id(t,e){return xN(t,e,t.a.length-1)}function xi(t,e){return t.i[e].length-t.e[e]}function fd(t,e){return U1(e),new TP(t,e)}function Dd(t,e){return U1(e),new TP(t,e)}function JI(t){return zt(DA(t,32))^zt(t)}function rn(t){return q8(h2(t,0,t.length))}function ud(t){return t.d.length-t.c.length}function Qd(t){return t.c==1&&t.a==0&&t.b==0}function A1(t,e){return U1(t),J1(t)===J1(e)}function br(t,e){return((t.u[e]&g8)>>>27)-1}function X3(t,e){return t.t==null?null:t.t[e]}function MA(t,e){return t.v==null?null:t.v[e]}function C1(t,e){return w.Math.abs(t.w[e])}function Ud(t){this.a=new w.Map,this.b=t}function od(t){this.a=new w.Map,this.b=t}function xe(t,e,A){this.a=t,this.b=e,this.c=A}function bu(t,e,A){this.b=t,this.c=e,this.a=A}function Z3(t,e,A){this.c=t,this.a=e,this.b=A}function W3(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 Ld(t,e,A){this.a=t,this.b=e,this.c=A}function sd(t,e,A){this.a=t,this.c=e,this.b=A}function yd(t,e,A){this.a=t,this.c=e,this.b=A}function Vo(t,e,A){so.call(this,e,t),this.a=A}function q1(t,e,A){so.call(this,e,t),this.a=A}function N8(t){sG.call(this,t,(JT(),Lc))}function Ni(){this.c=8,this.O=new uo(new AD)}function ld(t,e){this.a=new mv(new b9(t),e)}function Td(t,e){return t.e[e]-t.j[e]+xt(t,e)}function Eo(t,e){return OF(e,KN(t,dT(e)))}function zI(t,e,A){return t.indexOf(k0(e),A)}function YI(t,e,A,n){return _A(),kA(t,e,A,n)}function So(t,e){var A;return A=e,!!G9(t,A)}function hd(t,e){var A;return A=t.d,t.d=e,A}function cd(t,e){return t.a*=e,t.b*=e,t.c*=e,t}function _3(t,e){t.u=new V0,t.t=6,t.v=0,t.r=e}function qo(t,e){Eu(e,t.R),Nu(e,t.v),pd(e,t.w)}function KI(t,e){z1(t),ER(t,OQ(e,!0,null))}function XI(t,e){zi(t.e,e)&&uL(t.d,e)}function Qe(t,e){return gt(V(t.B[e],Pe),0)}function wd(t,e){return t.e[e]-e0(t,e)+xt(t,e)}function j0(t){return Vi(t)?(U1(t),t):t.Xc()}function Rr(t){var e=t.Ic();e.disposeDialog()}function ZI(t,e){t.B=!1,UL(t.v,new J7(t,e))}function WI(t,e){t.v=!1,UL(t.s,new z7(t,e))}function _I(t,e){t.f=!1,UL(t.c,new G7(t,e))}function $I(t){t.b=!1,Ja(t.a,new a2(ad(t)))}function jD(t){this.c=t,this.O=new uo(new AD)}function gd(t,e,A){this.a=t,this.b=e,this.c=A}function Oi(t,e){this.a=t>e?t:e,this.b=t>e?e:t}function jr(t,e,A){t.A[e]=A,t.T&=t.C[e]==1?0:7}function aI(t,e){return t.d==null&&Rb(t,e),t.d}function tx(){var t;return t=qL(null),t.f=2,t}function dd(t){QL(t.a),vv(t.c,t.b),t.b=null}function Io(t,e){if(!t)throw At(new C8(e))}function Bd(t,e){if(t!=e)throw At(new r3)}function vd(t){ji(),K5.call(this,t,Sy,new LP)}function $3(){Y1(),this.M=this.N=256,FR(this)}function Fd(t){this.a=t.a,this.b=t.b,this.c=t.c}function ex(t){return t.g.a.length+t.f.a.length}function md(t,e,A){P5(A,0,t,e,A.length,!1)}function kd(t,e,A,n,P){D6(t,e,A,0,A.length,n,P)}function Ax(t,e,A){return _0(t,e)||_0(t,A)?16:1}function Ne(t,e,A){t.u[e]&=-49,t.u[e]|=A,t.T&=7}function bd(t,e,A){t.u[e]&=-49153,t.u[e]|=A<<14}function pD(t,e){this.e=e,yh(this,(U1(t),t))}function Rd(t,e){this.a=t,this.c=e,this.b=!0}function a3(t){this.f=t,this.e=2,this.a=vs(t)}function tT(t){var e;return e=t.slice(),pv(e,t)}function H(t){var e;return e=qL(t),Kv(t,e),e}function Gi(t){var e=t.Ec();return e.getText()}function xo(t){var e=t.Kc();return e.getWidth()}function CD(t,e){var A=t.Ic();A.showMessage(e)}function jd(t,e){return mF(e,t.c)||mF(e,t.a)}function Jn(t){return pn(px(U0(t)?pe(t):t))}function nx(t){return R9(),A1(w2,typeof t)}function Px(t){return _A(),new CA(KB(new tu,t))}function rx(t){return!_4&&(_4=new vo),Ts(_4,t)}function N(t,e){return ve(e,t.a.length),t.a[e]}function pd(t,e){e.a=e.a*t.c+t.a,e.b=e.b*t.c+t.b}function ix(t,e){return e==1?t.a+t.f++:t.i+t.g++}function M9(t,e){return t.p&&e<t.f?iA(t.p,e):0}function pr(t,e){return t.p&&e<t.g?yP(t.p,e):0}function Cr(t,e){return t.H[e]==257||t.H[e]==129}function zn(t,e,A){A?t.u[e]|=I0:t.u[e]&=gy}function Cd(t,e){e?this.a=e:this.a=new C3(t)}function No(t){this.b=t,this.a=new f1,CN(this,t)}function Ru(t){return t.p==null&&(t.p=hW(t)),t.p}function fx(t){return t.d==null&&Rb(t,10240),t.d}function Dx(t){return dD(new iD(t.e).a)<t.c}function ju(t,e){return U1(t),t+(\"\"+(U1(e),e))}function le(t,e){var A;return A=e,XP(G9(t,A))}function ae(t,e){var A=t.Jc();return A.setRGB(e)}function Oo(t){var e=t.Kc();return e.getHeight()}function Md(t){var e=t.Bc();return e.grabFocus()}function YA(t){var e=t.Ec();return e.isSelected()}function Gt(t,e){var A=t.Ec();return A.addItem(e)}function Go(t,e){var A=t.Ec();return A.setText(e)}function O8(t,e){var A=t.Ec();return A.setText(e)}function Jo(t,e,A,n){var P=t.Kc();P.setRGB(e,A,n)}function ux(t,e){var A;for(A=0;A<e;++A)t[A]=0}function Qx(t,e){var A;for(A=0;A<e;++A)t[A]=2}function je(t,e){t.K!=e&&(t.K=e,e||Yb(t),t.T=0)}function Hd(t,e){this.c=t,this.a=e,this.b=!1}function eT(t){oj(),this.a=\"Helvetica\",this.b=t}function _P(t){t?this.a=t:this.a=new C3(null)}function Vd(){fF(),XD.call(this,4,(e9(),Bl))}function Ed(){Ed=B1,rc=h(yPt,Ye,143,256,0,1)}function Sd(){Sd=B1,Pc=h(sPt,Ye,142,256,0,1)}function qd(){qd=B1,nc=h(LPt,Ye,141,128,0,1)}function R1(t,e,A,n,P,r){return kk(t,e,A,n,P,0,r)}function Id(t,e,A,n){return(n[t]&n[e]&~n[A])!=0}function dP(t,e,A){A?t.u[e]|=512:t.u[e]&=-513}function Ux(t,e){!t.b&&(t.b=new pi),X8(t.b,k1(e))}function ox(t){t.b||(t.b=t.a.Tb(),t.a.size())}function Yn(t){return Vi(t)?vt((U1(t),t)):t.Yc()}function AT(t){return Array.isArray(t)&&t.ud===PD}function H9(t){return t.length==0?0:c1(t,o1,It)}function Lx(){return B(d(NV,1),k,6,15,[0,1,2])}function sx(t,e,A){Zq(new iv(t._,e),new sd(t,e,A))}function yx(t,e,A){rm(0,e,t.length),Wi(t,0,e,A)}function BP(t,e,A){mQ(),jL.call(this,t,e,A,255)}function V9(t,e,A){var n;for(n=0;n<e;++n)t[n]=A}function lx(t,e){var A;for(A=0;A<e;++A)t[A]=-1}function Tx(t,e){var A;for(A=0;A<e;++A)t[A]=-1}function nT(t){var e;for(e=0;e<t.q;e++)t.u[e]&=gy}function xd(t){var e;for(e=0;e<t.q;e++)t.u[e]&=-449}function hx(t){var e;for(e=0;e<t.q;e++)t.u[e]&=-513}function Nd(t){var e;return e=t.a[0],t.e>0?e:-e|0}function Mr(t){var e;return e=qL(t),e.k=t,e.f=1,e}function cx(t,e){return!t&&(t=[]),t[t.length]=e,t}function Od(t,e){return hA(0,t,0,e.a.length,!0,e)}function Gd(t,e,A,n){return hA(1,e,0,A,n,new ZU(t))}function zt(t){return U0(t)?t|0:E7(t)}function Jd(t){return t.N==null&&(Ui(t),lZ(t)),t.N}function n1(t){t.b||(t.b=!0,sL(t.f,new Ew(t)))}function MD(t){t.a||(t.a=!0,sL(t.e,new qw(t)))}function V1(t){G3(this),this.f=t,qT(this),this.jc()}function PT(t){return!Array.isArray(t)&&t.ud===PD}function $P(t,e){return t.a.get(e)!==void 0}function M1(t,e){return pn(Xk(U0(t)?pe(t):t,e))}function q0(t,e){return pn(u5(U0(t)?pe(t):t,e))}function DA(t,e){return pn(nK(U0(t)?pe(t):t,e))}function zd(t,e,A){return t.c?$8(e.b,A.b):Qm(e,A)}function wx(t,e){return S0(t.l&e.l,t.m&e.m,t.h&e.h)}function gx(t,e){return S0(t.l|e.l,t.m|e.m,t.h|e.h)}function dx(t,e){return S0(t.l^e.l,t.m^e.m,t.h^e.h)}function zo(t,e){return t==null?e:e==null?t:t+\",\"+e}function Bx(t,e,A){return A<0?-1:t.lastIndexOf(e,A)}function vx(t,e,A){A?t.F[e]|=s8:t.F[e]&=-32769}function Fx(t,e,A){A?t.F[e]|=Q0:t.F[e]&=-65537}function pu(t,e){if(t<0||t>=e)throw At(new f7)}function rT(t,e){if(t==null)throw At(new c7(e))}function Cu(t){t.a=new Ud(t),t.c=new od(t),++t.b}function Hr(t,e){return t.a+=e.a,t.b+=e.b,t.c+=e.c,t}function mx(t,e){return t.a-=e.a,t.b-=e.b,t.c-=e.c,t}function Yd(t,e){var A=t.Bc();return A.setCursor(e)}function vP(t,e){var A=t.Ec();return A.setEnabled(e)}function Kd(t,e,A){var n=t.Kc();return n.getRGB(e,A)}function kx(t){var e;return e=ri(gn,t),e?Os(e):null}function bx(t){var e;return e=ri(gn,t),e?Zj(e):null}function Rx(t){var e;return e=ri(gn,t),e?bj(e):null}function Te(t){return U0(t)?\"\"+t:fR(t)}function Ji(t){this.b=null,this.a=(yo(),t||vl)}function iT(t){this.c=0,this.d=0,this.b=t,this.a=0}function Xd(t,e){this.k=t,this.c=0,this.g=e,Fs(this)}function Ue(t,e,A){ke(),this.e=t,this.d=e,this.a=A}function Zd(t,e){$5(),Me.call(this,t),o_(this,e)}function Wd(t,e,A){C9.call(this,e),Ca(this,t,e,A)}function jx(t,e,A,n,P){for(;e<A;)n[P++]=Yi(t,e++)}function Mu(t,e){return H8(e)?hB(t,e):!!Eo(t.a,e)}function G8(t,e){return e<t.g&&(S8(t.p,e)||t.H[e]==8)}function px(t){return S0(~t.l&x0,~t.m&x0,~t.h&aA)}function _d(t,e,A){return D8(t,e,e.D[0][A],e.D[1][A])}function Cx(t,e,A){t.u[e]&=-67108865,A&&(t.u[e]|=Tn)}function $d(t){var e;for(e=0;e<t.r;e++)t.F[e]&=-98305}function Hu(t,e){var A;for(A=0;A<e;++A)t[A]=!1}function Mx(t,e){return G(t,e)<0?-1:G(t,e)>0?1:0}function FP(t){return t.e==0?t:new Ue(-t.e,t.d,t.a)}function Kn(t,e){for(U1(e);t.ad();)Jq(e,t.bd())}function aP(t,e){var A;return A=Sr(t.a,e,t),A==null}function zi(t,e){return ze(t.a,e,(R9(),wU))==null}function fT(t,e){VL.call(this,t,!0,e),this.a=!0}function HD(t,e){return Xt(e,t.length+1),t.substr(e)}function uA(t,e){var A=t.Ec();return A.setSelected(e)}function Hx(t,e){var A=t.Jc();return A.drawPolygon(e)}function Yo(t,e){var A=t.Jc();return A.fillPolygon(e)}function ad(t){var e=t.zc();return e.getDrawContext()}function tB(t){var e=t.Ac();return e.getDrawContext()}function VD(t){var e=t.zc();return e.getCanvasWidth()}function Vx(t,e,A){var n=t.zc();return n.onChange(e,A)}function Vr(t){var e=t.zc();return e.getCanvasHeight()}function eB(t,e){var A=t.Bc();return A.createDialog(e)}function Ko(t,e){var A=t.Jc();return A.setLineWidth(e)}function AB(t){var e;e=NK(t),this.a=e,this.b=new jD(e)}function J8(t){var e;for(e=0;t>0;)t>>=1,++e;return e}function nB(t,e){return t.a+=String.fromCharCode(e),t}function Oe(t,e){return t.a+=String.fromCharCode(e),t}function U1(t){if(t==null)throw At(new d9);return t}function Er(t,e){J(t.c,\"  \"),J(t.c,e),J(t.c,$A)}function z8(t,e){return new xe(t.a-e.a,t.b-e.b,t.c-e.c)}function DT(t,e){return t.f[e]&&(t.o[e]==1||t.o[e]==2)}function Ex(t,e){var A;A=e+1,A>t.length&&(t.length=A)}function t8(t,e,A){DL(e,t.a.length),t.a.splice(e,0,A)}function Sx(t,e,A,n,P,r){t.F=e,t.B=A,t.D=n,t.C=P,t.A=r}function Xo(t,e,A){A?t.u[e]|=nU:t.u[e]&=dy,t.T&=7}function uT(t,e,A){t.H[e]=A==1?1:A==2?2:A==3?4:16,t.T=0}function Zo(t,e){return t.j[e]==2&&t.o[e]==2&&t.C[e]<=7}function PB(t,e){return new gP(e.a-t.a,e.b-t.b,e.c-t.c)}function Xn(t){var e;return e=new zA(t.q,t.r),uf(t,e),e}function rB(t){z1(t),t.eb=w.Math.max(t.eb,3),n1(t.k)}function QT(){QT=B1,lE=(n6(),Zf),sE=$V,yE=aV,TE=tE}function qx(t){w.setTimeout(function(){throw t},0)}function iB(t,e){return t.c==null?null:t.c[e]}function Wo(t){if(t==null)throw At(new d9);return t}function fB(){nu.call(this),this.b=new f1,this.a=new f1}function Y8(t){this.e=t,(t&1)==0&&!mU&&!mU&&(mU=new yk)}function B0(t){var e=t.Ec();return e.getSelectedIndex()}function DB(t){var e=t.Jc();return e.getForegroundRGB()}function UT(t){var e=t.Jc();return e.getBackgroundRGB()}function _o(t,e,A){var n=t.Ic();return n.setLayout(e,A)}function Ix(t,e){var A;return A=Cj(t),A?es(A,e):null}function xx(t){var e;return e=t-10,(e<0?48+t:97+e)&w1}function Yi(t,e){return Xt(e,t.length),t.charCodeAt(e)}function Nx(t,e){t.c=e,t.e*w.Math.pow(10,-t.b/1.36)}function $o(t,e,A){t.d=6,t.e=A,t.c=e,t.f=(e[t.e]&63)<<11}function uB(t,e,A){this.i=t,this.d=e,this.f=iX(A,t,e)}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 Ki(t,e,A,n){this.b=t,this.a=e,this.c=A,this.d=n}function oT(t,e){this.a=l4,this.d=t,this.b=e,this.c=-1}function ao(t){this.d=t,this.a=this.d.b,this.b=this.d.c}function QB(t,e,A,n){so.call(this,t,n),this.b=e,this.a=A}function UB(t,e,A){KO.call(this,t,e,e.D[0][A],e.D[1][A])}function Ox(t,e,A,n){return{x:t,y:e,width:A,height:n}}function Sr(t,e,A){return H8(e)?SD(t,e,A):Pb(t.a,e,A)}function qr(t,e){return H8(e)?xu(t,e):XP(Eo(t.a,e))}function LT(t,e){return new Su(t.d,t.a,t.b,t.c.jd(e))}function Zn(t){return/\\d/.test(String.fromCharCode(t))}function Gx(t){return String.fromCharCode.apply(null,t)}function sT(t,e){return J1(t)===J1(e)||t!=null&&VP(t,e)}function K8(t,e){return J1(t)===J1(e)||t!=null&&VP(t,e)}function tL(t,e,A){return O0(t,e,A,_0(t,e)||_0(t,A)?16:1)}function Vu(t,e,A,n){return A<n?t.a[e][n][A]:t.a[e][A][n]}function Jx(t,e,A,n){for(var P=0;P<=n;P++)t[P]=e[A+P]}function eL(t,e,A,n){var P=t.Jc();return P.setFont(e,A,n)}function zx(t,e){var A=t.Ec();return A.setSelectedItem(e)}function yT(t,e){var A;return A=t.C[e],A==7||A==15||A==33}function Yx(t,e){var A;return A=TK(t,e),A?es(A,e):null}function Kx(t,e){var A;return A=lY(t.a,e),t.a=gq(t.a,A),A}function oB(t,e){return t.c!=e.c?t.c>e.c?1:-1:0}function Xx(t){return t.a==t.b?-1:t.c[t.a++]}function lT(t,e){var A;return A=Cn(t,e),A+WA(t,e,A,t.C[e])}function Zx(t,e){var A;for(A=0;A<e.q;A++)bD(t.k[A],e.J[A])}function Wx(t,e){t.H=e,t.eb=w.Math.max(t.eb,1),n1(t.k)}function Eu(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,A){e<A?t.u[A][e]=!0:t.u[e][A]=!0}function AL(t,e,A){_A(),A?this.a=A:this.a=new zA(t,e)}function Su(t,e,A,n){this.d=t,this.a=e,this.b=A,this.c=n}function sB(t,e){this.v=new nD,this.L=t,this.G=e,this.xb()}function yB(t){this.b=new wL(11),this.a=(yo(),t||vl)}function lB(t,e){return new Su(e.d,new fg(e,t),e.b,e.c)}function TB(t){return qr((!j4&&(j4=new hp),j4).b,k1(t))}function _x(t){return String.fromCodePoint(t).trim()===\"\"}function mn(t,e){return t.a[hA(0,e,0,t.a.length,!0,t)][2]}function HA(t,e){return t.a[hA(0,e,0,t.a.length,!0,t)][5]}function Ir(t,e){return t.a[hA(0,e,0,t.a.length,!0,t)][4]}function e8(t,e){return t.a[hA(0,e,0,t.a.length,!0,t)][3]}function hB(t,e){return e==null?!!Eo(t.a,null):$P(t.c,e)}function TT(t,e){Wl.call(this,t),DL(e,t.size()),this.a=e}function E9(t,e){var A;return A=qL(t),Kv(t,A),A.f=e?8:0,A}function ED(t,e,A){var n;return n=new xw(eB(t,e)),aJ(n,A),n}function $x(t,e){return t.b!=e.b?t.b<e.b?-1:1:0}function UA(t,e,A){return pt(e,A,t.length),t.substr(e,A-e)}function cB(t,e,A){var n=t.Ac();return n.setDimensions(e,A)}function _t(t,e){var A=t.Ec();return A.setSelectedIndex(e)}function wB(t,e){var A;return A=Uu(t.sd),e==null?A:A+\": \"+e}function hT(t,e,A){var n=t.Bc();return n.showHelpDialog(e,A)}function cT(t,e,A,n){var P=t.Jc();return P.drawString(e,A,n)}function nL(t,e,A,n){var P=t.Jc();return P.fillCircle(e,A,n)}function wT(t,e,A){Fd.call(this,PB(new FT(t,e),new FT(t,A)))}function v0(t,e,A){Fd.call(this,PB(new Xi(t,e),new Xi(t,A)))}function ax(t){var e;for(e=aj(t);e;)aT(t,e,fU),e=aj(t)}function tN(t){var e;for(e=Cv(t);e;)aT(t,e,TC),e=Cv(t)}function eN(t){var e;for(e=0;e<t.R.f;e++)Cx(t.R,e,t.M[e])}function AN(t,e){var A;for(A=0;A<e;++A)t[A]=new $l(t[A])}function gB(t){var e;this.a=t,e=this.Bc(),e.register(this)}function qu(t){var e;e=t.a,t.a=t.b,t.b=e,e=t.c,t.c=t.d,t.d=e}function nN(t,e){return Nr(t,e.c,e.d)&&Nr(t,e.c+e.b,e.d+e.a)}function PN(t,e){return Kr(t.toLowerCase(),e.toLowerCase())}function dB(t){return/[A-Z]/i.test(String.fromCharCode(t))}function BB(t){return/[A-Z]/i.test(String.fromCharCode(t))}function rN(t){return ET(t.$c().Vb(),oO(new iw,new fw))}function iN(t,e){return qr(t.a,e)!=null?qr(t.a,e):(X9(),x2)}function gT(t,e){return((t.G[e]&7680)>>9)+((t.G[e]&wy)>>13)}function fN(t,e){return Cr(t.V,e)&&(bs(t,e)!=-1||XL(t,e)!=-1)}function vt(t){return Math.max(Math.min(t,It),-2147483648)|0}function kn(t){return w.Math.sqrt(t.a*t.a+t.b*t.b+t.c*t.c)}function DN(t){return t>=5&&t<=9||t>=15&&t<=17||t==35||t==53}function uN(t){return t==2||t==10||t==18||t==36||t==54||t==86}function PL(t,e){return t.a[hA(0,e,0,t.a.length,!0,t)][5].a}function rL(t,e){return t.a[hA(0,e,0,t.a.length,!0,t)][6]>0}function vB(t,e){return t.a[hA(0,e,0,t.a.length,!0,t)][8]>0}function A8(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=W9(t,6),Bo(t.J[P],e,A,n),P}function FB(t,e,A,n){var P;return P=ZA(t,e,A),P!=-1&&oh(t,P,n)}function dT(t){var e;return t==null?0:(e=a8(t),e|0)}function QN(t){if(t.Wc())return null;var e=t.k;return cU[e]}function mB(t,e){return Zt(e,84)?dk(t.a,e):!1}function Iu(t,e){return t.s==null&&(Ui(t),z$(t,e,t.R.J)),t.s}function BT(t,e){var A,n;return A=e,n=new XU,kj(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 kB(t,e){Bs(),this.b=t,ut(this.b,63),this.d=e,$R(this)}function Xi(t,e){this.a=t[3*e],this.b=t[3*e+1],this.c=t[3*e+2]}function bB(t,e,A){pU||gL(),XZ(e),this.a=new K5(t.a,e,new LP)}function xr(t,e,A,n,P){var r=t.Jc();return r.drawLine(e,A,n,P)}function UN(t,e){return bF(t,e)?(eF(t),!0):!1}function RB(t,e){var A=t.a=t.a||[];return A[e]||(A[e]=t.Rc(e))}function mP(t,e){return(t.u[t.D[0][e]]&t.u[t.D[1][e]]&512)!=0}function xu(t,e){return e==null?XP(Eo(t.a,null)):rg(t.c,e)}function jB(t,e){return e===t?\"(this Map)\":e==null?Pr:$D(e)}function oN(t,e){t.b.a.length!=0&&J(t.b,\"<NL>\"),J(t.b,e)}function LN(t,e,A){t.b=null,t.a=e,A==null?t.c=Ts(t,e):t.c=A}function sN(t,e,A){t.e=null,t.d=e,A==null?t.f=Ts(t,e):t.f=A}function pB(t,e,A){this.k=t,this.c=2,this.g=A,this.j=e,Fs(this)}function yN(t,e,A,n,P){var r=t.Jc();return r.clearRect(e,A,n,P)}function SD(t,e,A){return e==null?Pb(t.a,null,A):sm(t.c,e,A)}function lN(t){var e;return q8(h2(t,0,(e=t.length,JD(),e)))}function TN(t,e){return n8(e),RP(t,h(q,I,6,e,15,1),0,e)}function qD(t,e){return n8(e),RP(t,h(yt,wt,6,e,15,1),0,e)}function bn(t,e){return n8(e),RP(t,h(F,k,6,e,15,1),0,e)}function fL(t,e){return n8(e),RP(t,h(Yt,at,6,e,15,1),0,e)}function hN(){return IU||(!IU&&(IU=new Pd),IU)}function vT(t){if(t<0)throw At(new gr(\"bitIndex < 0: \"+t))}function DL(t,e){if(t<0||t>e)throw At(new gr(L6+t+s6+e))}function ve(t,e){if(t<0||t>=e)throw At(new gr(L6+t+s6+e))}function Xt(t,e){if(t<0||t>=e)throw At(new L3(L6+t+s6+e))}function FT(t,e){this.a=t.J[e].a,this.b=t.J[e].b,this.c=t.J[e].c}function CB(t){Bs(),this.b=t,ut(this.b,63),this.d=xk(t),$R(this)}function cN(t){return/[A-Z\\d]/i.test(String.fromCharCode(t))}function wN(t){return t.r?\"Unresolved SMARTS features:\"+t.r:\"\"}function gN(t){throw new Error(\"missing static resource: \"+t)}function MB(t){var e,A;for(e=0,A=t-1;A>0;)A>>=1,++e;return e}function ID(t){var e=t.Jc();return e.getSelectionBackgroundRGB()}function HB(){this.a=lk(\"/resources/forcefield/mmff94/def.csv\")}function VB(){this.a=AP(\"/resources/forcefield/mmff94/dfsb.csv\")}function EB(){this.a=AP(\"/resources/forcefield/mmff94/bndk.csv\")}function SB(){this.a=lk(\"/resources/forcefield/mmff94/atom.csv\")}function qB(t){g7(),zL.call(this,t),this.a=\"\",this.b=t,this.a=\"\"}function IB(t,e){Ue.call(this,1,2,B(d(F,1),k,6,15,[t,e]))}function dN(){return iQ(),B(d(Fl,1),Ye,95,0,[qE,qU,sc])}function BN(){return X9(),B(d(Ltt,1),Ye,107,0,[J4,Y4,z4,Ti,x2])}function xB(t,e){return j0(t.a[hA(0,e,0,t.a.length,!0,t)][1])}function NB(t,e){return j0(t.a[hA(0,e,0,t.a.length,!0,t)][4])}function OB(t,e){return j0(t.a[hA(0,e,0,t.a.length,!0,t)][2])}function vN(t,e){return r0(t.u,z(t.u,0,e))&&r0(t.u,z(t.u,1,e))}function Nr(t,e,A){return e>=t.c&&e<=t.c+t.b&&A>=t.d&&A<=t.d+t.a}function Y0(t,e,A){return kA(t.J[e].a,t.J[e].b,t.J[A].a,t.J[A].b)}function FN(t,e,A){return gt(V(e.c[t.d[A]],M1(1,t.b[A])),0)}function V(t,e){return pn(wx(U0(t)?pe(t):t,U0(e)?pe(e):e))}function Y(t,e){return pn(gx(U0(t)?pe(t):t,U0(e)?pe(e):e))}function Or(t,e){return pn(dx(U0(t)?pe(t):t,U0(e)?pe(e):e))}function kP(t){return ke(),G(t,0)>=0?we(t):FP(we(p0(t)))}function Zi(t,e){var A;return A=Cn(t,e),A+WA(t,e,A,t.C[e])-G1(t,e)}function mN(t,e){return e<t.g&&(S8(t.p,e)||t.H[e]==8)?1.5:dt(t,e)}function Gr(t,e,A){return(t.H[e]==257||t.H[e]==129)&&t.D[0][e]==A}function GB(t,e){var A;for(A=0;A<t.q;A++)t.J[A].a*=e,t.J[A].b*=e}function mT(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 uL(t,e){U1(e),t.a[t.c]=e,t.c=t.c+1&t.a.length-1,qz(t)}function t1(t){return kD(t.a<t.c.a.length),t.b=t.a++,t.c.a[t.b]}function Nu(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 QL(t){ku(t.b!=-1),t.c.removeAtIndex(t.b),t.a=t.b,t.b=-1}function xD(t,e,A){lm(e,A,t.size()),this.c=t,this.a=e,this.b=A-e}function JB(t,e,A){var n;lm(e,A,t.a.length),n=A-e,t.a.splice(e,n)}function f0(t,e,A,n){var P=t.Ic(),r=e.Ec();return P.add(r,A,n)}function zB(t,e){var A;return A=1-e,t.a[A]=_u(t.a[A],A),_u(t,e)}function S9(t,e){var A,n;return n=V(t,h1),A=M1(e,32),Y(A,n)}function kT(t,e){if(e==null)throw At(new d9);return Mu(t.e,e)}function YB(t,e){if(e==null)throw At(new d9);return qr(t.e,e)}function KB(t,e){return t.j=null,f6(t,new nn(new b9(e)))?t.j:null}function bT(t,e,A){return A=wK(A),t.replace(new RegExp(e,\"g\"),A)}function kN(t,e){var A;return e==null?null:_5(t,KA((A=e,c0(),A)))}function XB(t,e){var A;return A=e.C[t],A<(c2(),IA).length?IA[A]:2}function bN(t,e){var A;return A=n$(t,e),A?new _P(A):null}function RT(t,e,A,n,P){var r=t.Jc();return r.fillRectangle(e,A,n,P)}function UL(t,e){var A=t.Ic();function n(){e.nc()}A.showDialog(n)}function RN(t,e,A){var n;n=nz();try{return GI(t,e,A)}finally{$N(n)}}function Jr(t){var e;return U0(t)?(e=t,e==-0?0:e):cO(t)}function ZB(t,e){var A;return A=YB(t,e),++t.a,A&&(++A.b,++t.b),A}function ND(t,e){var A;return A=t.b?le(t.b,k1(e)):null,A?A.a:e-1}function oL(t,e){var A;return A=t.c?le(t.c,k1(e)):null,A?A.a:e-1}function jN(t){var e,A;for(A=Fj(t);A;)e=UY(A),aT(t,e,uU),A=Fj(t)}function pN(t){Ms();var e,A;for(ut(t,1),A=t.f,e=0;e<A;e++)yp(t,e)}function CN(t,e){var A=t;e.setEventHandler(function(n,P){A.Dc(n,P)})}function jT(t,e,A,n){var P=t.Jc();return P.drawCenteredString(e,A,n)}function MN(t,e,A,n,P){var r=t.Jc();return r.drawDottedLine(e,A,n,P)}function pT(t,e,A,n,P){this.a=t,this.b=e,this.g=A,this.f=n,this.e=P}function LL(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 Rn(t){for(;t.d>0&&t.a[--t.d]==0;);t.a[t.d++]==0&&(t.e=0)}function WB(t){return kD(t.a<t.c.size()),t.c.getAtIndex(t.b=t.a++)}function HN(t){return function(){return RN(t,this,arguments);var e}}function VN(t){if(!(\"stack\"in t))try{throw t}catch{}return t}function EN(){return t9(),B(d(stt,1),Ye,97,0,[yl,sl,Ll,ll,bU,Tl])}function SN(){return JT(),B(d(cPt,1),Ye,80,0,[Lc,VE,EE,SE])}function CT(){CT=B1,JE=B(d(F,1),k,6,15,[40,20,20,100,20])}function mA(t,e){ke(),Ue.call(this,t,1,B(d(F,1),k,6,15,[e]))}function MT(t){this.a=h(F,k,6,t,15,1),this.b=h(F,k,6,t,15,1)}function _B(){this.a=AP(\"/resources/forcefield/mmff94/covrad.csv\")}function qN(){throw new Error(\"drug likeness must be assessed first\")}function oA(t){var e=t.Ic(),A=e.createComboBox();return new l7(A)}function oe(t,e){var A=t.Ic(),n=A.createLabel(e);return new T7(n)}function sL(t,e){var A=t,n=t.Bc();n.runLater(function(){A.Cc(e)})}function bP(t,e){return e.e==0||t.e==0?y9:(P9(),Hs(t,e))}function Ou(t,e){t.e&&(!t.r&&(t.r=new V0),J(t.r,\" \"),J(t.r,e))}function n8(t){if(t<0)throw At(new d7(\"Negative array size: \"+t))}function $B(t,e,A){return dD(new iD(t.e).a)<t.c?Hv(t,e,A):null}function OD(t,e,A){var n;return n=new uB(e,A,t.D),zS(n,Bz(t,n)),n}function aB(t,e){var A;return A=t-e,A>=Q1?A-=F0:A<b6&&(A+=F0),A}function X8(t,e){var A;return A=a9(t,e),A<0&&(A=-(A+1),t8(t.d,A,e)),A}function IN(t,e){var A;for(A=t.d-1;A>=0&&t.a[A]==e[A];A--);return A<0}function q9(t,e,A){var n;return n=(ve(e,t.a.length),t.a[e]),t.a[e]=A,n}function xN(t,e,A){for(;A>=0;--A)if(K8(e,t.a[A]))return A;return-1}function NN(t,e){var A=t.Fc(),n=new CA(e);return A.copyMolecule(n)}function HT(t,e){var A;return A=t.u[e]&hn,A==0?0:A==re?2:A==I1?3:4}function VT(t,e){var A;return A=t.C[e],A==8||A==16||A==34||A==52||A==84}function ON(t,e){var A;return A=t.C[e],A==9||A==17||A==35||A==53||A==85}function tv(t,e,A){var n;for(n=0;n<t.e.length;n++)t.a[n]+=e,t.b[n]+=A}function ev(t,e,A,n){var P=t.Bc();return P.createImageFromBase64(e,A,n)}function Av(t,e,A){t.b=e,t.a=A,t.c&&t.e*w.Math.pow(10,-e/1.36)}function nv(t){mi(t.g.a,0),mi(t.f.a,0),mi(t.a.a,0),t.b=null,t.d=-1}function Pv(t,e){return e<t.g.a.length?N(t.g,e):N(t.f,e-t.g.a.length)}function GN(t,e){return P9(),e<Qc.length?aX(t,Qc[e]):bP(t,ii(e))}function ET(t,e){var A;return e.c.kd(aO(t,e.d.pc(),(A=new Kw(e),A)))}function JN(t){var e,A;return A=_5(new i3,KA((e=t,JD(),e))),new _P(A)}function yL(t){var e;for(e=t.length-1;e>=0&&(t[e]|0)==0;--e);return e}function Wn(t){var e,A;e=Um(t);do A=e,dW(t),e=Um(t);while(A!=e);return e}function rv(t,e){var A;return A=new n7,A.c=e,ut(t,15),cp(A,t,!0),A.b.a}function iv(t,e){Nk(),this.c=ED(t,\"Edit Text\",this),this.e=e,v_(this)}function ST(t){this.d=t,this.b=this.d.a.entries(),this.a=this.b.next()}function fv(){this.a=AP(\"/resources/forcefield/mmff94/vanderwaals.csv\")}function zr(t){Sh(),mI(this,zt(V(q0(t,24),oi)),zt(V(t,oi)))}function Yr(t){Y1(),Fv.call(this,t?t.M:256,t?t.N:256),t&&uf(t,this)}function Dv(t){t.cb&&(uf(t.cb,t.V),t.I=t.bb?new us(t.bb):null)}function qT(t){return t.j&&(t.backingJsObject!==vp&&t.jc(),t.g=null),t}function zN(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 lL(t,e){return e[0]!=-1&&e[3]!=-1?IQ(t,e):P_(t.o,t,e)}function YN(t,e){var A;return A=OQ(t,e,null),A?new _P(A):null}function fn(t,e){var A=t.Ic(),n=A.createCheckBox(e);return new y7(n)}function KN(t,e){var A;return A=t.a.get(e),A??h(uP,A0,1,0,5,1)}function Dn(t,e){if(!e||e.q==0){t.H=null;return}t.H=e,t.L=!1,ut(t.H,1)}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 uv(t,e,A){return t.f.k.D[0][e]==A?t.f.k.D[1][e]:t.f.k.D[0][e]}function XN(t,e){return w.Math.pow(10,w.Math.log10(2e3)*t/(e-1)-1)}function ZN(t){t.eb=w.Math.max(t.eb,4),n1(t.k),N1(t,new q1(t,1,!1))}function Qv(t,e){var A;t.b&&(z1(t),A=new Xm(t._,t.V,e),WI(A,new Cw(t)))}function N1(t,e){var A;A=e.j,(A&t.J)==0&&(sL(t._,new yd(t,A,e)),t.J|=A)}function TL(t,e,A){var n,P;n=e>>4,P=2*(e&15),t.a[n]&=~(3<<P),t.a[n]|=A<<P}function hL(t,e,A,n){var P;return P=h(F,k,6,e,15,1),jY(P,t,e,A,n),P}function Uv(t,e,A){var n=t.Bc(),P=n.createImage(e,A);return new WU(P)}function ov(t,e){var A,n;return A=e.dd(),n=G9(t,A),!!n&&K8(n.d,e.ed())}function Kr(t,e){var A,n;return A=(U1(t),t),n=(U1(e),e),A==n?0:A<n?-1:1}function WN(t){var e,A;return e=t.c.e.length,A=t.c.e.length,A<e?-1:A>e?1:0}function _N(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){var e,A,n;return e=t&x0,A=t>>22&x0,n=t<0?aA:0,S0(e,A,n)}function Lv(t){var e;return!!(t.r&&(e=AG(t.r),YR(t,e)))}function $N(t){t&&mO((Q3(),a4)),--CU,t&&MU!=-1&&(rI(MU),MU=-1)}function sv(t){return t==5||t==6||t==7||t==8||t==15||t==16||t==33||t==34}function wL(t){cu(this),Io(t>=0,\"Initial capacity must not be negative\")}function gL(){throw new Error(\"static resources must be registered first\")}function yv(t){this.b=AP(\"/resources/forcefield/mmff94/stbn.csv\"),this.a=t}function lv(t){this.b=AP(\"/resources/forcefield/mmff94/bond.csv\"),this.a=t}function dL(t,e,A){this.b=t,this.d=e,this.e=A,this.c=this.d+(\"\"+this.e)}function I9(t,e){return e==0||t.e==0?t:e>0?Im(t,e):Xb(t,-e)}function IT(t,e){return e==0||t.e==0?t:e>0?Xb(t,e):Im(t,-e)}function BL(t,e){return H8(e)?e==null?i5(t.a,null):pF(t.c,e):i5(t.a,e)}function Tv(t,e){return t.a?J(t.a,t.b):t.a=new Fn(t.d),hg(t.a,e),t}function vL(t,e){var A;return A=h(F,k,6,e,15,1),sA(t,0,A,0,t.length),A}function FL(t,e){var A;for(A=t-e;A<b6;)A+=F0;for(;A>Q1;)A-=F0;return A}function hv(t,e){var A;vT(e),A=e/31|0,Ex(t.a,A),t.a[A]=t.a[A]|0|1<<e%31}function GD(t){var e;return e=(c2(),IA)[t<IA.length?t:6],e*(t==1,.9)}function cv(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 he(t,e,A,n,P,r){var i=t.Ic(),f=e.Ec();return i.add(f,A,n,P,r)}function xT(t,e,A,n,P){C9.call(this,e),this.c=GX(this,t,n,e,A),this.b=P}function mL(t,e,A,n){var P;return P=h(F,k,6,e+1,15,1),vW(P,t,e,A,n),P}function h(t,e,A,n,P,r){var i;return i=Uk(P,n),P!=10&&B(d(t,r),e,A,P,i),i}function kL(t,e){t.eb=w.Math.max(t.eb,e),n1(t.k),N1(t,new q1(t,1,!0))}function LA(t,e){var A;return A=(ve(e,t.a.length),t.a[e]),t.a.splice(e,1),A}function wv(){return x1(),\"\"+null.vd(),null}function gv(){gv=B1,yc=B(d(NA,1),a0,6,14,[0,1,3,7,15,31,63,127])}function JD(){JD=B1,new mg,new T3(\"ISO-LATIN-1\"),new T3(\"ISO-8859-1\")}function aN(t){if(!t)throw At(new ro(\"Unable to add element to queue\"))}function pt(t,e,A){if(t<0||e>A||e<t)throw At(new L3(YQ+t+o6+e+mp+A))}function tO(t,e){return t.a[e]>-1?t.a[e]:t.C[e]==1?c$(t,e):u6(t,e)}function ce(t,e,A,n){t.u[e]&=-8,A!=3&&(t.u[e]&=dy),t.u[e]|=A,n&&(t.u[e]|=4)}function dv(t,e){return e<t.g&&(S8(t.p,e)||t.H[e]==8)?0:t.H[e]&127}function Bv(t,e){return e<t.g&&(S8(t.p,e)||t.H[e]==8)?0:t.H[e]&127}function vv(t,e){var A;return A=new XU,A.c=!0,A.d=e.ed(),kj(t,e.dd(),A)}function Z8(t,e){var A;return A=x9(t,e,0),A==-1?!1:(LA(t,A),!0)}function bL(t){var e;return e=-1,t.a!=-2?(e=t.a,t.a=-2):e=t.b.Oc(),e}function eO(t){var e;for(ut(t,15),e=0;e<t.q;e++)(t.u[e]&3)!=0&&He(t,e,1,0)}function zD(t,e){var A;return A=hA(0,e,0,t.a.length,!0,t),A>=0&&t.a[A][7]>0}function YD(t){this.b=h(yt,wt,6,t,15,1),this.c=h(yt,wt,6,t,15,1),this.a=0}function NT(t){this.e=t,this.d=h(F,k,6,0,15,1),this.c=h(F,k,6,0,15,1)}function OT(t){this.e=t,this.b=this.e.a.entries(),this.a=h(uP,A0,1,0,5,1)}function RL(t,e){ho.call(this,t,e),this.a=h(hPt,A0,123,2,0,1),this.b=!0}function Fv(t,e){this.M=w.Math.max(1,t),this.N=w.Math.max(1,e),FR(this)}function AO(t){return A1(nr,typeof t)||Ad(t,w.java.lang.Number$impl)}function nO(t,e){try{t.c=Qn(e)}catch(A){if(A=t0(A),!Zt(A,40))throw At(A)}}function Gu(t,e,A){var n=t.Ic(),P=n.createTextField(e,A);return new h7(P)}function Ju(t,e){var A;for(A=e;A<t.length;A++)if(t[A]==62)return A;return-1}function GT(t){var e;for(e=0;e<t.q;e++)if(t.J[e].c!=0)return!0;return!1}function z1(t){!t.cb&&(t.cb=new $3),uf(t.V,t.cb),t.bb=t.I?new us(t.I):null}function W8(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,Hn(t,i,A,n)}function jL(t,e,A,n){mQ(),this.a=(n&255)<<24|(t&255)<<16|(e&255)<<8|A&255}function mv(t,e){mm(),this.d=e,this.i=new nn(t),this.g=new k9,this.b=new k9}function P8(){this.g=new f1,this.f=new f1,this.a=new f1,this.d=-1,this.c=!1}function kv(t,e,A){this.b=w.Math.max(t,e),this.c=w.Math.min(t,e),this.a=A}function bv(){this.b=h(yt,wt,6,64,15,1),this.c=h(yt,wt,6,64,15,1),this.a=0}function Rv(t){this.b=AP(\"/resources/forcefield/mmff94/angle.csv\"),this.a=t}function jv(){this.a=AP(\"/resources/forcefield/mmff94/herschbachlaurie.csv\")}function pv(t,e){return Sv(e)!=10&&B(_L(e),e.td,e.__elementTypeId$,Sv(e),t),t}function PO(t,e){var A;for(A=Dl[e]/2;t<-A;)t+=F0;for(;t>=A;)t-=Dl[e];return t}function r8(t,e){var A;for(A=0;A<t.e.length;A++)if(e==t.e[A])return A;return-1}function x9(t,e,A){for(;A<t.a.length;++A)if(K8(e,t.a[A]))return A;return-1}function pL(t){return t.a.d!=t.c?rg(t.a,t.b.value[0]):t.b.value[1]}function rO(t){return G(t,0)==0&&2<VU.length?VU[2]:new nf(t,2)}function Cv(t){return t.d.a.length<2?null:new Kb(N(t.d,0),N(t.d,1))}function Mv(t,e,A,n){return U1(t),U1(e),U1(A),U1(n),new Su(t,e,A,new Dw)}function Wi(t,e,A,n){var P;n=(yo(),n||vl),P=t.slice(e,A),_h(P,t,e,A,-e,n)}function iO(t,e,A,n,P){pt(e,A,t.length),pt(P,P+(A-e),n.length),jx(t,e,A,n,P)}function Hv(t,e,A){if(e==null||A==null)throw At(new d9);return Sr(t.e,e,A)}function JT(){JT=B1,Lc=new lu(\"All\",0),VE=new Cg,EE=new qg,SE=new Mg}function zT(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 _i(t,e){var A;return e==null||e.length==0?null:vh(t,KA((A=e,c0(),A)))}function Vv(t,e){return ut(t,7),t.o[e]==2&&t.j[e]==2?ib(t,e,!1):Ns(t,e,!1)}function fO(t,e){e&&(t.eb=w.Math.max(t.eb,1),n1(t.k),N1(t,new q1(t,1,!0)))}function DO(t,e){e&&(t.eb=w.Math.max(t.eb,1),n1(t.k),N1(t,new q1(t,1,!0)))}function uO(t,e){var A,n;for(n=new f1,A=0;A<e.r;A++)mt(n,new UB(t,e,A));return n}function YT(t,e){var A,n;for(n=new Wt(t.a);n.a<n.c.a.length;)A=t1(n),A.mc(e)}function QO(t,e){var A,n;for(n=new Wt(t.a);n.a<n.c.a.length;)A=t1(n),A.mc(e)}function UO(t){var e,A;return new _P((e=new P8,A=new nn(new b9(t)),cY(e,A),e))}function oO(t,e){return LT(nG(fd(t,new Ol),Dd(e,new Ol),new Lw),new sw)}function p0(t){var e;return U0(t)&&(e=0-t,!isNaN(e))?e:pn(Wr(t))}function KT(t,e,A,n){if(A==null||A.length==0){SL(e),e.d=null;return}gp(t,e,A,n,0)}function Ev(t,e){var A;for(A=0;A<e.length;A++)if(e[A]==t)return!0;return!1}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 Je(t,e){Y1();var A;for(A=t-e;A<b6;)A+=F0;for(;A>Q1;)A-=F0;return A}function LO(t,e){var A;return A=t.C[e],A==3||A==11||A==19||A==37||A==55||A==87}function sO(t,e){var A;return A=t.C[e],A==4||A==12||A==20||A==38||A==56||A==88}function yO(t){return t==1||t>=5&&t<=9||t>=14&&t<=17||t>=32&&t<=35||t>=52&&t<=53}function Sv(t){return t.__elementTypeCategory$==null?10:t.__elementTypeCategory$}function ML(t){return t.v<<=t.t,(!t.r||t.v!=63)&&(t.v+=64),Oe(t.u,t.v&w1),t.u.a}function XT(t){var e;return e=t.b.a.length==0?null:N(t.b,0),e!=null&&$T(t,0),e}function lO(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 TO(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 qv(t,e){this.a=j0(t.b[e][5]),this.b=j0(t.b[e][6]),this.c=j0(t.b[e][7])}function $i(t,e){return(t.F[e]&768)>>8!=1&&(t.F[e]&768)>>8!=2?-1:(t.F[e]&ln)>>10}function Iv(t,e,A){t8(t.g,A,e),t.b[e.a]=!0,e.g!=-1&&(t.c[D1(t.k,e.a,e.g)]=!0)}function hO(t,e){t.L||(o$(t,e),t.L=!0),t.r||(y_(t,e),x$(t),fY(t),t.r=!0)}function xv(t,e){return t.V.q!=0&&t.r?NN(t.r,e?qb(t.V):Xn(t.V)):!1}function cO(t){return jh(t,(Xr(),Ac))<0?-jI(Wr(t)):t.l+t.m*fP+t.h*DP}function wO(t,e,A,n,P){return U1(t),U1(e),U1(A),U1(n),U1(P),new Su(t,e,A,n)}function Nv(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 gO(t){this.e=\"\",this.c=9,this.d=0,this.i=h(X4,A0,56,1,0,1),this.i[0]=t}function KD(){this.i=h(X4,A0,56,2,0,1),this.i[0]=new c9,this.i[1]=new c9,this.a=0}function Xr(){Xr=B1,tc=S0(x0,x0,524287),cE=S0(0,0,l8),ec=cL(1),cL(2),Ac=cL(0)}function dO(){return e9(),B(d(lPt,1),Ye,72,0,[ME,RE,bE,jE,Bl,pE,se,CE])}function ZT(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 BO(t){var e,A;for(A=t.a,e=0;e<t.b.length;e++)A+=t.b[e]*m4[t.c[e]];return A}function vO(t){var e,A;for(A=t.d,e=0;e<t.b.length;e++)A+=t.b[e]*k4[t.c[e]];return A}function FO(t){var e,A,n;for(e=jF(t),n=0,A=0;A<xP.length;A++)n+=e[A]*xP[A];return n}function WT(t,e,A){var n;for(n=N(t.k,e).length;A>=n;)A-=n;for(;A<0;)A+=n;return A}function zu(t,e){var A,n;for(n=yu(t.b,e),A=n.length;A<10;A++)Oe(t.a,32);J(t.a,n)}function Ov(t,e){var A,n;for(n=yu(t.a,e),A=n.length;A<10;A++)Oe(t.b,32);J(t.b,n)}function mO(t){var e,A;if(t.b){A=null;do e=t.b,t.b=null,A=Yk(e,A);while(t.b);t.b=A}}function kO(t){var e,A;if(t.a){A=null;do e=t.a,t.a=null,A=Yk(e,A);while(t.a);t.a=A}}function HL(t,e){return e?(ut(t,1),wP(t,t.f,t.g,wn)):wP(t,t.q,t.r,wn)}function bO(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 RO(t,e){try{t.i[0].a=Qn(e)}catch(A){if(A=t0(A),!Zt(A,40))throw At(A)}}function jO(t,e){try{t.i[0].b=Qn(e)}catch(A){if(A=t0(A),!Zt(A,40))throw At(A)}}function pO(t,e){try{t.d=c1(e,o1,It)}catch(A){if(A=t0(A),!Zt(A,40))throw At(A)}}function VL(t,e,A){fp.call(this,t),this.b=e,this.c=G(A,0)==0?new aD:new zr(A)}function Gv(t,e,A,n){var P;return P=0,e&&(P|=1),A&&(P|=2),n&&(P|=4),Ru(new hD(t.a,P))}function N9(t,e){var A;for(A=0;A<t.e.length;A++)if(e==t.e[A])return!0;return!1}function Zr(t,e,A){var n,P;for(n=0,P=0;P<t.j[e];P++)K(t,t.i[e][P])==A&&++n;return n}function Jv(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 CO(t,e){var A;return vT(e),A=e/31|0,A<t.a.length&&((t.a[A]|0)>>>e%31&1)==1}function zv(t,e,A,n,P){var r;return r=Sb(t,e,A,n,P),r<0?Gb(t,e,A,n,P):j0(t.b[r][5])}function MO(t){var e,A;return e=h(F,k,6,t.q,15,1),A=n9(t,e,!1,!1),Aj(t,e,A)}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 _T(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 _n(t,e){var A;return t.t==null||t.t[e]==null?null:rn((A=t.t[e],c0(),A))}function VA(t,e){return(t.u[e]&m1)>>18!=1&&(t.u[e]&m1)>>18!=2?-1:(t.u[e]&RA)>>20}function Yv(t){return t!=null&&(typeof t===fy||typeof t==\"function\")&&t.ud!==PD}function Yu(t){return Y1(),t>=0&&t<Lr.length&&Lr[t]!=null?Lr[t]:t>=171&&t<=190?HV:VV}function SL(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 qL(t){var e;return e=new Uh,e.n=\"Class$\"+(t?\"S\"+t:\"\"+e.i),e.b=e.n,e.j=e.n,e}function HO(t){var e,A;for(ut(t,7),e=0,A=0;A<t.p.j.a.length;A++)u3(t.p,A)&&++e;return e}function IL(t,e,A){var n,P;for(n=0,P=0;P<Mt(t.f,A);P++)N9(e,_(t.f,A,P))&&++n;return n}function VO(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 EO(t,e,A){var n;return n=eK(t,e,A),n&&A==386&&(ut(t,7),n=n&(t.F[e]&128)==0),n}function Fe(t,e,A){var n=function(){return t.apply(n,arguments)};return e.apply(n,A),n}function Kv(t,e){var A;if(t){e.k=t;var n=QN(e);if(!n){cU[t]=[e];return}n.sd=e}}function Xv(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 SO(){x7();for(var t=nl,e=0;e<arguments.length;e++)t.push(arguments[e])}function XD(t,e){Io(t>=0,\"Digits < 0\"),rT(e,\"null RoundingMode\"),this.a=t,this.b=e}function xL(t,e,A,n,P,r){C9.call(this,n),this.e=t,this.b=e,this.c=A,this.a=P,this.d=r}function Zv(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 Wv(t,e){t&&(this.k=h(o9,or,26,1,0,1),this.k[0]=t),this.c=0,this.g=e,Fs(this)}function qO(t,e,A){t.a==null&&(t.a=h(q,I,6,t.R.f,15,1),Cq(t.a)),t.a[e]=A<<24>>24}function Ku(t,e,A){if(!t.c){if(t.e.a.length==4){t.c=!0;return}mt(t.e,new Z3(t,e,A))}}function IO(t,e){var A;return A=t.C[e]<Lr.length?Lr[t.C[e]]:null,A==null?6:A[A.length-1]}function xO(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 _v(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 $v(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 NO(t){var e,A;if(t.K)return 0;for(ut(t,1),A=0,e=0;e<t.f;e++)A+=xt(t,e);return A}function NL(t){var e;return e=t.e[t.d++]-48,Zn(t.e[t.d]&w1)&&(e=10*e+(t.e[t.d++]-48)),e}function OO(t){var e,A;return e=yL(t.a),e==-1?0:(A=t.a[e]|0,e*31+(32-$9(A)))}function av(t,e){var A;for(A=0;A<t.j[e];A++)if(p1(t,t.i[e][A])<0)return!0;return!1}function GO(t){var e,A;for(A=0,e=0;e<t.a.q;e++)(K(t.a,e)==7||K(t.a,e)==8)&&++A;return A}function JO(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 $n(t,e){for(var A in e)e[A].configurable=!0;Object.defineProperties(t,e)}function zO(t,e){typeof window===fy&&typeof window.$gwt===fy&&(window.$gwt[t]=e)}function tF(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 YO(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 $T(t,e){var A;A=LA(t.b,t.b.a.length-1),e<t.b.a.length&&(q9(t.b,e,A),ub(t,e))}function eF(t){ku(t.c>=0),ZJ(t.d,t.c)<0&&(t.a=t.a-1&t.d.a.length-1,t.b=t.d.c),t.c=-1}function me(t){return t.J==null&&(Ui(t),(t.Q&I1)==0&&(M$(t),cj(t,1),cj(t,2)),aa(t)),t.J}function OL(t){var e,A;if(t==0)return 32;for(A=0,e=1;(e&t)==0;e<<=1)++A;return A}function AF(t){var e;return e=h(yt,wt,6,2,15,1),e[0]=dn*(t/17|0)+v8,e[1]=dn*(t%17)+v8,e}function aT(t,e,A){var n;a$(e,A,(t.e&12)!=0),n=k5(t,e.b[0],e.b[1],0),dF(t,e.b[0],e.b[1],n)}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 T1(t,e,A,n){n?t.B[e]=Y(t.B[e],A):t.B[e]=V(t.B[e],Jn(A)),t.T=0,t.K=!0}function KO(t,e,A,n){this.d=e,this.a=A,this.b=n,this.e=y2(t.d,e,A,n),this.c=H_(t.d,e,A,n)}function XO(t,e){Nm(),this.o=t,this.n=G(t,0)==0?new aD:new zr(t),this.r=new Hd(t,e)}function nF(t,e){var A,n;t.b&&(z1(t),n=(t.U&4)!=0,A=new jm(t._,t.V,e,n),ZI(A,new pw(t)))}function PF(t){var e;t.a=!1,e=new a2(tB(t)),yN(e,0,0,t.b.o,t.b.e),P$(t.b,new a2(tB(t)))}function ZO(t,e,A){var n,P;for(t.J&=~e,P=new Wt(t.S);P.a<P.c.a.length;)n=t1(P),n.mc(A)}function WO(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 rF(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 _O(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 iF(t,e){var A;for(Vz(t),A=0;A<t.b.length;A++)if(e[t.b[A]])return!0;return!1}function $O(t,e){var A;for(A=0;A<t.j[e];A++)if(K(t,t.i[e][A])!=6)return!0;return!1}function Zu(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 Wu(t,e,A,n){var P,r;this.a=on(t,e,A,n),P=A-t,r=n-e,this.b=w.Math.sqrt(P*P+r*r)}function _u(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 aO(t,e,A){var n;return wG(t),t.b=!0,n=new Bw,n.a=e,_q(t.a,new Dg(n,A)),n.a}function _8(t,e){var A;return A=h(F,k,6,e,15,1),sA(t,0,A,0,w.Math.min(t.length,e)),A}function ai(t,e){var A;return A=h(F,k,6,e,15,1),sA(t,0,A,0,w.Math.min(t.length,e)),A}function tG(t,e){var A;return A=h(NA,a0,6,e,14,1),sA(t,0,A,0,w.Math.min(t.length,e)),A}function eG(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 AG(t){var e=t.Fc(),A=e.pasteMolecule();return A?A.vc():null}function GL(t,e){var A=t.Jc(),n=A.getBounds(e);return new QA(n.x,n.y,n.width,n.height)}function JL(t,e){var A;return A=h(rt,ft,6,e,16,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,P5(t,A,e,0,P,!0),e}function nG(t,e,A){return Mv(A,new Rd(t,e),new ww,B(d(Fl,1),Ye,95,0,[(iQ(),qU)]))}function fF(){fF=B1,new XD(34,(e9(),se)),new XD(7,se),new XD(16,se),new XD(0,Bl)}function jn(t){return Rs(t,26)*14901161193847656e-24+Rs(t,27)*11102230246251565e-32}function PG(t){return t>=21&&t<=30||t>=39&&t<=48||t==57||t>=72&&t<=80||t==89||t>=104&&t<=112}function DF(t){return vt(w.Math.round((de==-1&&(de=globalThis.devicePixelRatio||1),de*t)))}function zL(t){G3(this),qT(this),this.backingJsObject=t,Ub(this,t),this.f=t==null?Pr:$D(t)}function YL(t,e,A,n,P,r){this.f=e,this.d=A,this.a=n,this.b=P,this.c=r,this.e=vZ(t.k,e,A,n,P,r)}function uF(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 QF(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 D1(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 KL(t,e,A){var n;for(n=0;n<t.k.a.length;n++)if(Af(t,n,e)&&Af(t,n,A))return n;return-1}function tf(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 XL(t,e){var A;return A=Us(t.V,z(t.V,0,e)),A!=-1&&qe(t.V,A)!=1&&qe(t.V,A)!=2&&(A=-1),A}function O9(t,e){var A;return A=h(F,k,6,2,15,1),t>e?(A[0]=t,A[1]=e):(A[0]=e,A[1]=t),A}function UF(t,e){var A,n,P;for(U1(e),A=!1,P=e.Tb();P.ad();)n=P.bd(),A=A|t.add(n);return A}function oF(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 rG(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 LF(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 iG(t){var e={};return t!=null&&(e=t&&t.prototype,!e&&(e=cU[t])),Object.create(e)}function sF(t,e){var A;(!t.q||!e.q)&&(A=new CB(t.o),!t.q&&(t.q=Eh(A,t)),!e.q&&(e.q=Eh(A,e)))}function fG(t,e){var A,n;if(t.g)for(n=new Wt(t.g);n.a<n.c.a.length;)A=t1(n),A.Ib(e,t.p)}function DG(t,e,A){var n;return n=N(t.I,0),bQ(n,kt(t.V,e),jt(t.V,e))==bQ(n,kt(t.V,A),jt(t.V,A))}function yF(t,e,A){var n,P,r;n=vt(Z6*V8(t.V)),P=vt(kt(t.V,A)),r=vt(jt(t.V,A)),nL(e,P-n,r-n,2*n)}function lF(t,e,A,n){var P;P=t.a.length,A>P?A=P:Xt(e,A+1),t.a=UA(t.a,0,e)+(\"\"+n)+HD(t.a,A)}function uG(t,e,A,n){n&&e!=-1&&(t.eb=w.Math.max(t.eb,1),n1(t.k),N1(t,new q1(t,1,!0))),A.nc()}function th(t,e,A,n){C9.call(this,t),this.a=h(yt,wt,6,1,15,1),this.a[0]=A,this.b=e,this.c=n}function TF(t,e){C9.call(this,t),this.a=h(yt,wt,6,2,15,1),this.a[0]=e,this.a[1]=Ve,this.c=-1}function hF(t){this.f=t,this.e=new ST(this.f.c),this.a=this.e,this.b=ih(this),this.d=this.f.b}function QG(t){if(U1(t),t.length==0)throw At(new YP(\"Zero length BigInteger\"));_Z(this,t)}function cF(t){return t.a<54?t.f<0?-1:t.f>0?1:0:(!t.c&&(t.c=kP(E1(t.f))),t.c).e}function pn(t){var e;return e=t.h,e==0?t.l+t.m*fP:e==aA?t.l+t.m*fP-DP:t}function UG(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 eh(t,e){var A,n;for(A=0,n=0;n<t.j[e];n++)tA(t,t.i[e][n])&&!Bu(t,t.k[e][n])&&++A;return A}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 oG(t){var e;for(e=0;e<t.g;e++)if(t.H[e]==8)return Ff(new cr(t),null,!1);return!1}function LG(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 wF(t,e){var A,n;for(A=0,n=t.size();A<n;++A)if(K8(e,t.getAtIndex(A)))return A;return-1}function gF(t){var e,A,n;for(n=0,A=t.Tb();A.ad();)e=A.bd(),n=n+(e!=null?a8(e):0),n=n|0;return n}function Ah(t,e){var A,n;for(n=t.o.Ec(),n.removeAllItems(),A=0;A<16;A++)Gt(t.o,\"\"+(e+A));return 16}function un(t,e){var A;A=t.a.length,e<A?t.a=UA(t.a,0,e):e>A&&(t.a+=q8(h(l9,a0,6,e-A,15,1)))}function sG(t,e){var A;this.c=t,A=new f1,bh(t,A,e,t.b,null,!1,null,!1),this.a=new TT(A,0)}function yG(t,e,A){var n,P;return e==null?null:Ls(t,KA((P=e,c0(),P)),A==null?null:KA((n=A,n)),0)}function dF(t,e,A,n){var P;P=w.Math.min(x9(t.d,e,0),x9(t.d,A,0)),t8(t.d,P,n),Z8(t.d,e),Z8(t.d,A)}function BF(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 nh(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 lG(t,e){return t.C[e]==1&&t.A[e]==0&&t.s[e]==0&&(t.u[e]&g8)==0&&(t.t==null||t.t[e]==null)}function Ph(t,e){return!!(a1(t.b,e)==1&&K(t.b,e)<10||vn(t.b,e)||EP(t.b,e,!0))}function TG(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 hG(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 vF(t,e){return e>=t.f?0:e<t.f&&i0(t.p,e)&&t.C[e]==6&&t.s[e]!=0?1:t.o[e]}function E1(t){return M2<t&&t<DP?t<0?w.Math.ceil(t):w.Math.floor(t):pn(EX(t))}function cG(t){return t==null?!1:t.$implements__java_lang_Cloneable||Array.isArray(t)}function wG(t){if(t.b)throw At(new ro(\"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),n1(t.k)):t.w=e)}function FF(t){return ut(t,15),!t.d&&(t.f<2||!Ds(t.J[0],t.J[1]))&&(t.d=new BA(t)),t.d?me(t.d):null}function gG(t){return ut(t,15),!t.d&&(t.f<2||!Ds(t.J[0],t.J[1]))&&(t.d=new BA(t)),t.d?B7(t.d):null}function mF(t,e){var A,n;for(n=e.Tb();n.ad();)if(A=n.bd(),sT(t,A.ed()))return!0;return!1}function dG(t){var e,A,n;for(n=1,A=t.Tb();A.ad();)e=A.bd(),n=31*n+(e!=null?a8(e):0),n=n|0;return n}function BG(t,e){var A,n,P;for(P=(ut(t,7),t.p),n=0,A=0;A<P.j.a.length;A++)rF(P,A,e)>=0&&++n;return n}function pe(t){var e,A,n,P;return P=t,n=0,P<0&&(P+=DP,n=aA),A=vt(P/fP),e=vt(P-A*fP),S0(e,A,n)}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&aA)}function kF(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&aA)}function rh(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 FG(t){var e;return t<128?(e=(qd(),nc)[t],!e&&(e=nc[t]=new zl(t)),e):new zl(t)}function t0(t){var e;return Zt(t,27)?t:(e=t&&t.__java$exception,e||(e=new qB(t),void 0),e)}function ih(t){return t.a.ad()?!0:t.a!=t.e?!1:(t.a=new OT(t.f.a),t.a.ad())}function bF(t,e){if(e==null)return!1;for(;t.a!=t.b;)if(VP(e,nm(t)))return!0;return!1}function RF(t){return t.n==null&&(t.n=bn(t.e,t.e.length),t.n.sort(Fe(u0.prototype.gd,u0,[]))),t.n}function mG(t){return t.includes(\"ATOMS=(\")?R2:t.includes(\"BONDS=(\")?\"BONDS\":null}function fh(t){var e;return G(t,0)<0&&(t=Jn(t)),e=zt(DA(t,32)),64-(e!=0?$9(e):$9(zt(t))+32)}function kG(t){var e,A;for(A=0,e=0;e<t.a.q;e++)(K(t.a,e)==7||K(t.a,e)==8)&&wd(t.a,e)>0&&++A;return A}function jF(t){var e,A;for(A=h(F,k,6,xP.length+2,15,1),ut(t,7),e=0;e<t.f;e++)++A[Ma(t,e)];return A}function pF(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 bG(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 CF(t,e){var A;return e>0?(t[e]+t[e-1])/2:(A=Q1+(t[0]+t[t.length-1])/2,A>Q1?A-F0:A)}function RG(t,e){var A;for(A=0;A<t.j.g;A++)t.e[A]&&ps(e,A)&&(Pf(t,z(t.j,0,A)),Pf(t,z(t.j,1,A)))}function MF(t){var e,A;for(A=new Wt(t.U);A.a<A.c.a.length;)e=t1(A),W1(t,e.a),OI(t,e.b,e.c);W1(t,t.Q)}function ZL(t,e,A,n,P,r,i,f,D,Q){var U=t.Jc(),L=e.pc();return U.drawImage(L,A,n,P,r,i,f,D,Q)}function sA(t,e,A,n,P){x1(),rT(t,\"src\"),rT(A,\"dest\"),qG(t,e,A,n,P),P5(t,e,A,n,P,!0)}function B(t,e,A,n,P){return P.sd=t,P.td=e,P.ud=PD,P.__elementTypeId$=A,P.__elementTypeCategory$=n,P}function HF(t,e,A,n){return Xa(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 jG(t,e){var A,n;return A=js(t,e),A==-1?-1:(n=t.b.a.length,mt(t.b,e),t8(t.a,A,k1(n)),n)}function pG(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 Wr(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)&aA,S0(e,A,n)}function CG(t){var e;if(t<0)return o1;if(t==0)return 0;for(e=cn;(e&t)==0;e>>=1);return e}function MG(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 tQ(t,e){var A;for(A=0;A<t.j[e];A++)if(t.n[e][A]==2&&K(t,t.i[e][A])>6)return!0;return!1}function jP(t,e){var A,n;return A=e.toArray(),n=A.length,n==0?!1:(md(t.a,t.a.length,A),!0)}function VF(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 Dh(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&cn)!=0^A?2:1}function HG(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 bu(e,A,UQ(t,n)?-3:t.p[n]))}function Ce(t,e,A){t.a==t.b.length&&(t.b=qD(t.b,2*t.a),t.c=qD(t.c,2*t.a)),t.b[t.a]=e,t.c[t.a]=A,++t.a}function eQ(t,e){t.D[0]=_8(t.D[0],e),t.D[1]=_8(t.D[1],e),t.H=_8(t.H,e),t.F=_8(t.F,e),t.G=_8(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)&aA,t.l=e,t.m=A,t.h=n}function EF(t){var e,A;return A=$9(t.h),A==32?(e=$9(t.m),e==32?$9(t.l)+32:e+20-10):A-12}function ze(t,e,A){var n,P;return n=new RL(e,A),P=new XU,t.b=tR(t,t.b,n,P),P.b||++t.c,t.b.b=!1,P.d}function SF(t,e,A,n){var P;return L2(t,e,A,n),Qd(t.R)?null:(P=t.R,I3(t.R,t.L),t.R=new Au,P)}function VG(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 EG(t,e){var A,n;for(A=h(E2,b2,29,e,0,1),n=0;n<t.length;n++)t[n]&&(A[n]=new vu(t[n]));return A}function SG(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=kr(t.d,n),sZ(r,e,P);Pi(e)}function qG(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 A3)}function IG(t){JF();var e;e=Ky,(e.startsWith(Xy)||e.startsWith(Zy)||e.startsWith(Wy))&&AY(t,nE)}function qF(t,e,A){var n;for(n=0;n<t.j[e];n++)if(K(t,t.i[e][n])!=6&&t.i[e][n]!=A)return!0;return!1}function xG(t,e,A,n,P){var r;return r=u5(t,e),A&&WL(r),P&&(t=jz(t,e),n?In=Wr(t):In=S0(t.l,t.m,t.h)),r}function NG(t,e){return SA(e,t.c)!=0?1:(t.j=FZ(e),t.j==null?rJ(e)?3:4:t.j.length==0?3:2)}function OG(t,e){return r9(t)==-1||r9(e)==-1||((r9(t)|r9(e))&1)!=0?3:r9(t)==r9(e)?1:2}function uh(t){var e,A;return A=(t[1]+t[0])/2,e=w.Math.abs(t[1]-t[0]),e>Q1?A:A<0?A+Q1:A-Q1}function IF(t,e,A){var n;return t.B.d.a.length!=0&&(n=kr(t.B,0),n.a<e)?(aU(t.B,0),n.b):t.od(A)}function GG(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 JG(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 Qh(t){var e,A;for(e=0,A=0;A<t.length;A++)e=(e<<5)-e+(Xt(A,t.length),t.charCodeAt(A))|0;return e}function AQ(t,e){var A,n;for(U1(e),n=e.Tb();n.ad();)if(A=n.bd(),!t.contains(A))return!1;return!0}function zG(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 YG(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 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 G9(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 xF(t,e){Bp();var A,n;for(n=e-t,A=0;A<rl[t].length;A++)if(rl[t][A].b==n)return rl[t][A].a;return NaN}function KG(t){Ms();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]+xt(t,e);return A}function NF(t,e,A,n){var P,r,i;for(P=h(q,I,6,n,15,1),i=DJ(t.a,P),r=0;r<i;r++)e[A+r]=P[r]&w1;return i}function OF(t,e){var A,n,P,r;for(n=e,P=0,r=n.length;P<r;++P)if(A=n[P],sT(t,A.dd()))return A;return null}function XG(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&&Pi(t)!=null}function ef(t,e){var A;return A=bT(e,\"([/\\\\\\\\\\\\.\\\\*\\\\+\\\\?\\\\|\\\\(\\\\)\\\\[\\\\]\\\\{\\\\}$^])\",\"\\\\\\\\$1\"),bT(t,A,\"\")}function GF(t,e){var A;return A=hA(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),ub(t,e))}function ZG(t){return A1(typeof t,bf)?!0:t!=null&&t.$implements__java_lang_CharSequence}function i8(){i8=B1,ml=B(d(it,1),Dt,2,6,[\"distance\",\"plane\",\"line\",\"torsion\",\"stereo\",\"binap\"])}function J9(){J9=B1,wi=B(d(it,1),Dt,2,6,[\"\",\"0\",\"00\",\"000\",\"0000\",\"00000\",\"000000\",\"0000000\",\"00000000\"])}function _r(){_r=B1,xA=B(d(Ee,1),PA,6,15,[.29899999499320984,.5870000123977661,.11400000005960464])}function JF(){JF=B1,Z4=B(d(F,1),k,6,15,[5258420,0]),nE=B(d(F,1),k,6,15,[11837695,14737632])}function WG(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:Vi(t)?ntt:Tu(t)?Att:PT(t)||AT(t)?t.sd:t.sd||Array.isArray(t)&&d(CV,1)||CV}function _G(t,e){var A;if(O(t.L,e)!=2)return!1;for(A=0;A<2;A++)if(pA(t.L,e,A)!=2)return!1;return!0}function $G(t,e){var A;for(A=0;A<O(t.R,e);A++)if(t.o[Ot(t.R,e,A)]==3&&pA(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 Af(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 aG(t,e){var A,n,P;for(P=0,n=new Wt(e);n.a<n.c.a.length;)A=t1(n),P+=$F(t,A.c,A.b)?t.b:0;return P}function tJ(t,e){kf();var A,n,P;for(P=0,A=0,n=0;n<t.length;n++)P+=$r(t[n]&e[n]),A+=$r(t[n]|e[n]);return P/A}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 YF(t,e){var A;for(A=0;A<t.f.length;A++)if(gt(t.f[A],e.f[A]))return Hi(t.f[A],e.f[A])?-1:1;return 0}function KF(t,e){var A,n;for(n=h(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 eJ(t,e,A){var n,P;for(++t.b,n=new cD(t),n.p=A,P=t.g.length-1;P>=0;P--)EI(t,n,t.g[P],P,e[P]);return n}function rQ(t,e,A){var n;for(n=A-1;n>=0&&t[n]==e[n];n--);return n<0?0:Hi(V(t[n],h1),V(e[n],h1))?-1:1}function AJ(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 WD(t,e){var A;for(A=0;A<e.k.length;A++)bD(t.k[A],e.k[A]);e.j==null?t.j=null:t.j=fL(e.j,e.j.length)}function XF(t,e,A){var n;z1(t),n=e==-1?new bm(t._,t,t.F,t.B,t.D,t.C,t.A):new qk(t._,t,t.V,e),_I(n,new Ld(t,e,A))}function nJ(t){var e,A;if(A=e$(t),r0(t.A,t.a))for(e=0;e<t.A.q;e++)r0(t.A,e)&&lp(t,e,A);else lp(t,t.a,A);Bj(t.A)}function ZF(t){var e;for(this.o=t,this.k=h(E2,b2,29,t.q,0,1),e=0;e<t.q;e++)this.k[e]=new vu(t.J[e]);this.n=NaN}function $L(t,e,A,n,P){C9.call(this,t),this.a=h(yt,wt,6,2,15,1),this.a[0]=A,this.a[1]=n,this.b=e,this.c=P}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 Uh(){this.i=ett++,this.n=null,this.j=null,this.g=null,this.d=null,this.b=null,this.k=null,this.a=null}function _F(t){t.J=1,t.R=new Au,t.$=new f1,t.U=new f1,t.s=h(rt,ft,6,t.L.q,16,1),t.w=new c9,t.Q=0,t.C=-1,Mb(t)}function iQ(){iQ=B1,qE=new To(\"CONCURRENT\",0),qU=new To(\"IDENTITY_FINISH\",1),sc=new To(\"UNORDERED\",2)}function PJ(t){var e;return t!=null&&(e=t.__java$exception,e)?e:Ad(t,TypeError)?new w7(t):new zL(t)}function rJ(t){var e;if(t.length<3){for(e=1;e<(Y1(),X0).length;e++)if(X0[e].startsWith(t))return!0}return!1}function iJ(t,e){var A;for(A=0;A<O(t.i,e);A++)if(pA(t.i,e,A)==2&&K(t.i,_(t.i,e,A))==8)return!0;return!1}function $F(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 fJ(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 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 DJ(t,e){var A;return t.a==t.b?-1:(A=w.Math.min(e.length,t.b-t.a),Jx(e,t.c,t.a,A),t.a+=A,A)}function aF(t,e){var A;return t===e?!0:Zt(e,160)?(A=e,t.Mc()==A.Mc()&&t.Nc()==A.Nc()):t===e}function aL(t,e){return(t.u[e]&g8)!=0?!0:t.C[e]<=1?!1:bb(t,e)||t.C[e]==13||t.C[e]>=171}function tm(t,e){return!(t.C[e]!=6||t.s[e]!=0||xt(t,e)+t.j[e]!=4)}function ts(t,e){var A,n,P;for(U1(e),A=!1,n=t.Tb();n.ad();)P=n.bd(),e.contains(P)&&(n.cd(),A=!0);return A}function uJ(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 QJ(t){var e,A,n;for(n=t.a.length,e=new Array(n),A=0;A<n;A++)e[A]=tI((ve(A,t.a.length),t.a[A]));return e}function es(t,e){var A;for(!e&&(e=Xn(t.o)),e.T&=-249,A=0;A<e.q;A++)bD(e.J[A],t.k[A]);return t.p!=null&&$2(e,t.p),e}function em(t){var e;for(t.q=h(rt,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 UJ(t,e){var A,n,P;for(n=0,A=0;A<t.V.q;A++)r0(t.V,A)&&++n;P=n!=0&&n!=t.V.q,(t.U&1)!=0?j$(t,e,P):$z(t,e,P)}function oJ(t,e){var A,n;for(A=jF(t),n=0;n<xP.length;n++)A[n]!=0&&ZP(e,\"\"+A[n]+\" * \"+xP[n]+\"   AtomType: \"+zV[n],2)}function Am(t,e){var A,n,P;for(U1(e),A=!1,n=t.Tb();n.ad();)P=n.bd(),e.contains(P)||(n.cd(),A=!0);return A}function nm(t){var e;return kD(t.a!=t.b),e=t.d.a[t.a],_g(t.b==t.d.c&&e!=null),t.c=t.a,t.a=t.a+1&t.d.a.length-1,e}function Pm(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 z9(t,e){var A;return A=le(t.b,e),A||(A=new Tj(t.k,t.q,t.s,e,t.n),ze(t.b,bn(e,e.length),A),A)}function G(t,e){var A;return U0(t)&&U0(e)&&(A=t-e,!isNaN(A))?A:jh(U0(t)?pe(t):t,U0(e)?pe(e):e)}function rm(t,e,A){if(t>e)throw At(new C8(YQ+t+Fp+e));if(t<0||e>A)throw At(new m7(YQ+t+o6+e+mp+A))}function oh(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 im(t,e,A){var n,P;return DL(e,t.a.length),n=A.toArray(),P=n.length,P==0?!1:(md(t.a,e,n),!0)}function LJ(t,e){var A,n;for(n=h(o9,or,26,t.length,0,1),A=0;A<t.length;A++)n[A]=t[A].a;return new _P(new Bh(n,e))}function Lh(){dp();var t,e,A,n;if(!Yf&&!Yf)for(Yf=new pi,e=JV,A=0,n=e.length;A<n;++A)t=oQ(e[A]),X8(Yf,t)}function sJ(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 Pi(t)}function yJ(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]):YK(t,A,P,e,n))}function DQ(t,e,A,n,P,r,i){return er(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 lJ(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 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 fm(t,e,A,n){this.c=h(NA,a0,6,n.c,14,1),this.b=h(NA,a0,6,n.c,14,1),az(n,t,e,this.c,this.b),this.a=A}function Dm(t,e,A,n){this.a=(n8(e),RP(t,h(F,k,6,e,15,1),0,e)),this.b=(n8(n),RP(A,h(F,k,6,n,15,1),0,n))}function sh(t,e,A){t.v==null&&(t.v=h(F,D0,7,t.M,0,2)),A.sort(Fe(u0.prototype.gd,u0,[])),t.v[e]=A,t.T=0,t.K=!0}function TJ(t,e,A){var n,P;for(n=R1(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 hJ(t,e,A){var n,P,r;return r=1.02*XB(t.f[1],e)+XB(t.f[0],e),n=A/r,P=w.Math.pow(n,-6),n>=1?0:2*(P*P-P)}function cJ(t,e,A){var n,P;if(t.I){for(P=new Wt(t.I);P.a<P.c.a.length;)if(n=t1(P),n.Hb(e,A))return n}return null}function pP(t,e){var A,n;for(n=new Wt(t);n.a<n.c.a.length;)if(A=t1(n),uz(A,e))return!1;return t.a.push(e),!0}function wJ(t){var e,A;for(e=new TD,A=0;A<t.b.length;A++)Si(e,(Y1(),X0)[t.c[A]]),t.b[A]>1&&zq(e,t.b[A]);return e.a}function k1(t){var e,A;return t>-129&&t<128?(Sd(),e=t+128,A=Pc[e],!A&&(A=Pc[e]=new Yl(t)),A):new Yl(t)}function Qn(t){var e;return e=Le(t),e>Hp?1/0:e<-34028234663852886e22?-1/0:e}function uQ(t,e){return t.e[e]-e0(t,e)+xt(t,e)<=0?!1:tA(t,e)?!0:t.o[e]==0}function um(t,e,A){var n;for(n=0;n<t.j[e];n++)if(t.n[e][n]==2&&K(t,t.i[e][n])>6&&t.i[e][n]!=A)return!0;return!1}function gJ(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 yh(t,e){var A;t.c=e,t.a=wh(e),t.a<54&&(t.f=(A=e.d>1?S9(e.a[0],e.a[1]):S9(e.a[0],0),Jr(e.e>0?A:p0(A))))}function nf(t,e){this.e=e,this.a=fh(t),this.a<54?this.f=Jr(t):this.c=(ke(),G(t,0)>=0?we(t):FP(we(p0(t))))}function Qm(t,e){return R9(),H8(t)?Kr(t,e):Vi(t)?$8((U1(t),t),(U1(e),e)):Tu(t)?xI((U1(t),t),(U1(e),e)):t.Sb(e)}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 dJ(t,e){t.V!=e&&(z1(t),t.V=e,t.U=0,t.I=null,t.eb=w.Math.max(t.eb,4),n1(t.k),N1(t,new q1(t,1,!1)))}function lh(t,e){t.e=e.e,t.c=e.c,t.b=e.b,t.a=e.a==null?null:qD(e.a,e.a.length),t.d=e.d==null?null:qD(e.d,e.d.length)}function QQ(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:VG(P,e))}function BJ(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 Th(t,e){var A;return J1(t)===J1(e)?!0:Zt(e,23)?(A=e,t.e==A.e&&t.d==A.d&&IN(t,A.a)):!1}function Um(t){var e,A;for(e=0,Hg(t.e),A=0;A<t.e.length;A++)(A==0||os(t.e[A],t.e[A-1])!=0)&&++e,t.f[t.e[A].a]=e;return e}function vJ(t){var e,A;if(t.$!=null)for(e=0;e<t.R.f;e++)bd(t.R,e,t.$[e]);if(t.i!=null)for(A=0;A<t.R.g;A++)td(t.R,A,t.i[A])}function FJ(t){var e,A,n,P;for(t.a=15,P=(A=new fD(t.c).a.$c().Tb(),new DD(A));P.a.ad();)n=(e=P.a.bd(),e.ed()),Ba(n)}function mJ(t){var e,A,n,P;for(e=(t.g==null&&(t.g=(P=hY(t),QY(P))),t.g),A=0,n=e.length;A<n;++A);}function om(t){var e,A,n,P;return t.e==0?t:(e=t.d,A=e+1,n=h(F,k,6,A,15,1),uF(n,t.a,e),P=new Ue(t.e,A,n),Rn(P),P)}function hh(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 Lm(t,e,A,n,P,r){var i;this.a=A,this.b=n,this.c=P,this.d=r,i=za(t.o,e,A,n,P,r),this.e=i.a,this.f=i.b,this.g=i.c}function sm(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 $r(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 ym(t){if(t<o1)throw At(new p8(\"Overflow\"));if(t>It)throw At(new p8(\"Underflow\"));return vt(t)}function lm(t,e,A){if(t<0||e>A)throw At(new gr(YQ+t+o6+e+\", size: \"+A));if(t>e)throw At(new C8(YQ+t+Fp+e))}function O1(t,e){var A;return U0(t)&&U0(e)&&(A=t+e,M2<A&&A<DP)?A:pn(vG(U0(t)?pe(t):t,U0(e)?pe(e):e))}function Un(t,e){var A;return U0(t)&&U0(e)&&(A=t*e,M2<A&&A<DP)?A:pn(V_(U0(t)?pe(t):t,U0(e)?pe(e):e))}function l0(t,e){var A;return U0(t)&&U0(e)&&(A=t-e,M2<A&&A<DP)?A:pn(kF(U0(t)?pe(t):t,U0(e)?pe(e):e))}function kJ(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 Tm(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 bJ(t,e,A){var n,P;for(P=!1,n=0;n<e.e.length;n++)if(!_x(Yi(e.e,n))){P=!0;break}P||Z8(t.I,e),n1(t.k),rB(A.a)}function Pf(t,e){var A,n;for(t.d[e]&&(t.d[e]=!1,--t.b),n=0;n<O(t.j,e);n++)A=Ot(t.j,e,n),t.e[A]&&(t.e[A]=!1,--t.c)}function UQ(t,e){var A;if(Mt(t.L,e)==0)return!1;for(A=0;A<Mt(t.L,e);A++)if(!vr(t.L,Ot(t.L,e,A)))return!1;return!0}function rf(t,e){var A,n;for(n=h(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 RJ(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 _D(t){var e,A;return t.includes(\"/csd/\")?null:(e=(A=IE[t],typeof A===fy?A:null),!e&&gN(t),new Og(e))}function hm(t){var e,A;return t.A.d.a.length==0?null:(e=Zt(t,117)?yQ(t.c,t.A.d.a.length):0,A=kr(t.A,e),aU(t.A,e),A)}function jJ(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 $D(t){var e;return Array.isArray(t)&&t.ud===PD?Uu(_L(t))+\"@\"+(e=a8(t)>>>0,e.toString(16)):t.toString()}function pJ(t,e){return t.h==l8&&t.m==0&&t.l==0?(e&&(In=S0(0,0,0)),cg((Xr(),ec))):(e&&(In=S0(t.l,t.m,t.h)),S0(0,0,0))}function cm(){this.b=AP(\"/resources/forcefield/mmff94/pbci.csv\"),this.a=AP(\"/resources/forcefield/mmff94/bci.csv\")}function wm(t,e,A,n,P){this.f=e,this.a=A,this.b=n,this.c=P,this.d=zD(t.b,e.a[n]),this.g=zv(t.a,e,A,n,P),this.e=eY(t.a,e,A,n,P)}function gm(t,e,A,n,P){var r,i,f;for(wf(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&&wf(t,r,t.k[A],n,P)}function dm(t,e,A,n,P){var r,i;return r=D8(t,e,A,n)+D8(t,e,n,P),i=r,U2(e,A,n,P,3)?i+=r>0?4:3:U2(e,A,n,P,4)&&(i+=r>0?6:4),i}function CJ(t,e,A,n,P){var r;return r=e.a[n],!(zD(t.b,r)||A==P||D1(e,A,n)==-1||D1(e,n,P)==-1)}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 MJ(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 HJ(t,e){var A,n,P;for(A=0,Hg(t.b),n=0;n<e.length;n++)(n==0||os(t.b[n],t.b[n-1])!=0)&&++A,P=t.b[n].a,e[P]=A;return A}function KA(t){var e,A,n,P;for(P=t.length,e=h(q,I,6,0,15,1),n=0;n<P;)A=Lk(t,n,t.length),n+=A>=Q0?2:1,N_(e,A);return e}function VJ(t){var e,A,n;for(w$(t),n=h(o9,nA,74,rG(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 Bm(t){var e,A;ut(t.V,15),e=h(F,k,6,t.V.q,15,1),A=n9(t.V,e,!1,!0),A=K_(t,e,A),JW(t,e,A),t.M=e,t.L=Aj(t.V,e,A)}function EJ(t){var e;if(vN(t,t.a))for(e=0;e<t.u.r;e++)r0(t.u,z(t.u,0,e))&&r0(t.u,z(t.u,1,e))&&fj(t,e);else fj(t,t.a);_b(t.u)}function vm(t,e){var A;return A=e?NJ(t):dh(t),A&&t.r?(x1(),\"\"+null.vd(),!0):!1}function Fm(){if(!Ql)try{hi=new LR,Ql=!0}catch(t){if(t=t0(t),Zt(t,19))x1();else throw At(t)}}function mm(){mm=B1,GV=B(d(it,1),Dt,2,6,[\"Idorsia No\",\"Actelion No\",\"ID\",\"IDNUMBER\",\"COMPOUND_ID\",\"NAME\",\"COMPND\"])}function km(){km=B1,AE=B(d(it,1),Dt,2,6,[\"none\",\"pressed\",\"released\",\"clicked\",\"entered\",\"exited\",\"moved\",\"dragged\"])}function aD(){Sh();var t,e,A;A=TPt+++Date.now(),t=vt(w.Math.floor(A*vV))&oi,e=vt(A-t*h4),this.a=t^1502,this.b=e^el}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 bm(t,e,A,n,P,r,i){gh(),this.c=ED(t,oV,this),this.d=e,this.a=-1,this.k=A,this.g=n,this.j=P,this.i=r,this.n=i,$j(this)}function ch(t,e,A,n,P,r,i,f,D,Q){km(),so.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 Rm(t,e,A){this.b=new Zb(this,t.a),this.c=e,this.e=A,this.d=new e3,t3(this.d,this.b),cB(this,this.b.o,this.b.e),PF(this)}function jm(t,e,A,n){X5(),this.v=ED(t,(e.u[A]&512)!=0?\"Atom Query Features (Multiple)\":\"Atom Query Features\",this),Wa(this,e,A,n)}function an(t){return t<3?0:t<11?1:t<19?2:t<37?3:t<55?4:0}function wh(t){var e,A,n;return t.e==0?0:(e=t.d<<5,A=t.a[t.d-1],t.e<0&&(n=LF(t),n==t.d-1&&(--A,A=A|0)),e-=$9(A),e)}function SJ(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 pm(t,e){var A,n;return n=t.d.a.length,A=X8(t,e),t.d.a.length!=n?(mt(t.b,e),t.a=null,n):(t.a==null&&sz(t),t.a[A])}function qJ(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>Cy&&A<t.a[n]-Cy)return!1;return!0}function Cm(t,e){var A,n;for(n=0;n<t.$.a.length;n++)t.v=dQ(t.v,N(t.$,n));eZ(t,e),A=.1*e,t.v.c-=A,t.v.d-=A,t.v.b+=2*A,t.v.a+=2*A}function IJ(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 Mm(t,e,A){var n,P;for(P=t.Tb();P.ad();)if(n=P.bd(),J1(e)===J1(n)||e!=null&&VP(e,n))return A&&P.cd(),!0;return!1}function xJ(t,e,A){var n,P;for(n=V(A,h1),P=0;G(n,0)!=0&&P<e;P++)n=O1(n,V(t[P],h1)),t[P]=zt(n),n=q0(n,32);return zt(n)}function Hm(t,e){var A,n;for(n=0,Wi(t,0,t.length,null),A=0;A<t.length;A++)(A==0||os(t[A],t[A-1])!=0)&&++n,e[t[A].a]=n;return n}function Vm(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 on(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-=Q1:P+=Q1)):P=r>0?bA:eU,P}function tP(t,e,A){var n,P,r,i;for(r=e+A,pt(e,r,t.length),i=\"\",P=e;P<r;)n=w.Math.min(P+nP,r),i+=Gx(t.slice(P,n)),P=n;return i}function NJ(t){var e,A,n;for(A=new P8,e=0;e<t.L.length;e++)n=qb(t.L[e]),n&&(e<t.Y?(mt(A.g,n),A.d=-1):(mt(A.f,n),A.d=-1));return A}function Em(t){var e,A;for(A=0,e=0;e<t.length;e++)A<(Xt(e,t.length),t.charCodeAt(e))&&(A=(Xt(e,t.length),t.charCodeAt(e)));return A}function Sm(t){var e,A,n;for(n=new V0,A=new Wt(t);A.a<A.c.a.length;)e=t1(A),J(J(n,B6+e.Lb()+'\"'+e.Kb()+v6),$A);return n.a}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|=(Q0&t.f)>>16-A+e,t.f<<=1,--e,--t.d;return n}function Cn(t,e){var A,n;return A=((t.u[e]&g8)>>>27)-1,A==-1&&(A=(n=t.C[e]<Lr.length?Lr[t.C[e]]:null,n==null?6:n[n.length-1])),A}function t2(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 qm(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 OJ(t){var e,A,n;return t<SU.length?SU[t]:(A=t>>5,e=t&31,n=h(F,k,6,A+1,15,1),n[A]=1<<e,new Ue(1,A+1,n))}function Im(t,e){var A,n,P,r;return A=e>>5,e&=31,P=t.d+A+(e==0?0:1),n=h(F,k,6,P,15,1),qh(n,t.a,A,e),r=new Ue(t.e,P,n),Rn(r),r}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 we(t){ke();var e,A;return A=zt(t),e=zt(DA(t,32)),e!=0?new IB(A,e):A>10||A<0?new mA(1,A):FE[A]}function Y9(t,e){var A;return U0(t)&&U0(e)&&(A=t%e,M2<A&&A<DP)?A:pn((G5(U0(t)?pe(t):t,U0(e)?pe(e):e,!0),In))}function gh(){gh=B1,ZV=B(d(it,1),Dt,2,6,[\"None\",\"One electron (duplet)\",\"Two electrons (triplet)\",\"Two electrons (singulet)\"])}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,Z_(this)}function GJ(t){var e=/^#?0\\.(0+)$/.exec(t);if(!e)throw new Error(\"unimplemented DecimalFormat with pattern \"+t);return e[1].length}function Nm(){var t;!gn&&(gn=new Bg),(gn.b&1)!=0&&gn.a!=15&&x1(),t=1&~gn.b,t!=0&&(Qa(gn,t),t==1&&FJ(gn))}function JJ(t){_A();var e,A,n;return n=new Nw,A=(n.j=null,f6(n,new nn(new b9(t)))?n.j:null),e=n.f==null?Qu(n.j):n.f,CI(new CA(A),e)}function Om(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 Gm(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 ff(t,e){var A,n;for(n=t.a.length,e.length<n&&(e=uu(new Array(n),e)),A=0;A<n;++A)e[A]=t.a[A];return e.length>n&&(e[n]=null),e}function zJ(t,e,A){var n,P,r;for(r=0,n=h(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 Jm(t,e,A){var n,P,r;for(r=0,n=h(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 dh(t){var e,A;if((t.U&4)==0||t.L==null)return null;for(A=new P8,e=0;e<t.L.length;e++)e<t.Y?q7(A,t.L[e]):S7(A,t.L[e]);return A}function oQ(t){var e,A;return G(t,-129)>0&&G(t,128)<0?(Ed(),e=zt(t)+128,A=rc[e],!A&&(A=rc[e]=new Kl(t)),A):new Kl(t)}function zm(t,e,A){for(t.j==null&&(t.j=h(Yt,at,6,t.o.r,15,1),Vq(t.j));A<0;)A=A+360<<16>>16;for(;A>=360;)A=A-360<<16>>16;t.j[e]=A}function kA(t,e,A,n){Y1();var P,r,i;return r=A-t,i=n-e,i!=0?(P=w.Math.atan(r/i),i<0&&(r<0?P-=Q1:P+=Q1)):P=r>0?bA:eU,P}function YJ(t){var e;try{return VY((new Lh,t.a))}catch(A){if(A=t0(A),Zt(A,19))return e=A,Z9(e,(x1(),gi),\"\"),-999;throw At(A)}}function Bh(t,e){P8.call(this),t!=null&&(jP(this.g,new xD(new Po(t),0,e)),jP(this.f,new xD(new Po(t),e,t.length))),this.c=cQ(this)}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 KJ(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 XJ(t,e){var A,n;for(A=e;A<t.length;A++){if(n=(Xt(A,t.length),t.charCodeAt(A)),n==32||n==9)return-1;if(n==61)return A}return-1}function ZJ(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,_g(A<P),A>=r?(JG(t,e),-1):(GG(t,e),1)}function Ym(t,e){var A,n;for(n=t.a.length,e.length<n&&(e=uu(new Array(n),e)),A=0;A<n;++A)e[A]=t.a[A];return e.length>n&&(e[n]=null),e}function vh(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 WJ(t){var e;return e=typeof t,A1(e,w2)||A1(e,nr)||A1(e,bf)?!0:t!=null&&t.$implements__java_lang_Comparable}function K9(t,e){return U1(t),e==null?!1:A1(t,e)?!0:t.length==e.length&&A1(t.toLowerCase(),e.toLowerCase())}function _J(){var t,e;if(q2==null)for(e=new GA(!1),q2=h(o9,or,26,sr.length,0,1),t=0;t<sr.length;t++)q2[t]=_i(e,sr[t]),ut(q2[t],1)}function Km(){Km=B1,qV=B(d(F,2),D0,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 X9(){X9=B1,J4=new wD(\"ONE_ONE\",0),Y4=new wD(\"ONE_TWO\",1),z4=new wD(\"ONE_THREE\",2),Ti=new wD(\"ONE_FOUR\",3),x2=new wD(\"ONE_X\",4)}function Xm(t,e,A){this.s=ED(t,r0(e,e.D[0][A])&&r0(e,e.D[1][A])?\"Bond Query Features (Multiple)\":\"Bond Query Features\",this),ba(this,e,A)}function $J(t,e){e=e||{};var A=(typeof e.maxSphereSize===TU?5:e.maxSphereSize)|0,n=(typeof e.type===TU?0:e.type)|0;return SK(t,A,n)}function aJ(t,e){t.a=e;var A=t.Ic(),n=t;function P(){n.Hc()}function r(){n.Gc()}var i={fireOk:P,fireCancel:r};A.setEventConsumer(i)}function Me(t){$5();var e;if(!isNaN(t)&&!isFinite(t)||isNaN(t))throw At(new YP(\"Infinite or NaN\"));ga(this,(e=t,e.toPrecision(20)))}function tz(t){var e;return ET(t.Vb(),(e=lB(new Uw,Mv(new Qw,new uw,new cw,B(d(Fl,1),Ye,95,0,[(iQ(),qU)]))),LT(e,new ow)))}function Zm(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 Df(t,e){var A,n;for(A=0,n=0;n<t.j[e];n++)t.n[e][n]==2&&(K(t,t.i[e][n])==7||K(t,t.i[e][n])==8||K(t,t.i[e][n])==16)&&++A;return A}function Wm(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 Wt(t.a);r.a<r.c.a.length;)P=t1(r),A=P.cc(e,null,\"\"+n,!1),A!=0&&(i+=A,++n);return i}function ez(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 Az(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 _m(t,e,A){var n,P,r,i;for(i=i=h(rt,ft,6,t.q,16,1),r=vX(t,e,A,i),P=h(F,k,6,r,15,1),r=0,n=0;n<t.q;n++)i[n]&&(P[r++]=n);return P}function nz(){var t;return CU!=0&&(t=Date.now(),t-hE>2e3&&(hE=t,MU=w.setTimeout(Yq,10))),CU++==0?(kO((Q3(),a4)),!0):!1}function ar(t){switch(Y1(),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 Pz(t,e){var A,n,P;if(n=r9(t),P=r9(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 rz(t,e){var A,n,P;if(n=r9(t),P=r9(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 iz(t,e,A){A!=null&&A.length==0&&(A=null),A==null?t.t!=null&&(t.t[e]=null):(t.t==null&&(t.t=h(q,w8,10,t.M,0,2)),t.t[e]=A)}function $m(t,e,A,n){var P;P=new fs(t,e),TL(P,A,dt(e,A)==1?2:3),TL(P,n,dt(e,n)==2?1:2),t.g[A]=!0,t.g[n]=!0,zi(t.e,P)&&uL(t.d,P)}function fz(){var t,e;if(hl==null&&hl==null){for(t=h(ytt,A0,199,RU.length,0,1),e=0;e<RU.length;e++)t[e]=new Up(RU[e][0],RU[e][1]);hl=t}}function Dz(t,e){var A,n,P;_A(),e=e||{};var r=!e.noCoordinates,i=!e.noStereo;return A=new i3,n=new Y3,kd(A,n.a,KA((P=t,JD(),P)),r,i),n}function CP(t){var e;if(t<wi.length)return wi[t];for(e=new V0;t>=wi.length;)J(e,wi[wi.length-1]),t-=wi.length-1;return J(e,wi[t]),e.a}function uz(t,e){var A,n,P;if(e.e.length!=t.e.length)return!1;for(n=RF(t),P=RF(e),A=0;A<n.length;A++)if(n[A]!=P[A])return!1;return!0}function am(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 Qz(t,e){var A,n;for(n=!0,A=0;A<t.c.length;A++)(gt(V(Jn(e.c[A]),t.c[A]),0)||gt(V(e.b[A],t.c[A]),t.b[A]))&&(n=!1);return n}function Uz(t,e){var A,n;for(n=!0,A=0;A<t.c.length;A++)(gt(V(Jn(t.c[A]),e.c[A]),0)||gt(V(t.b[A],e.c[A]),e.b[A]))&&(n=!1);return n}function oz(t,e){kf();var A,n,P,r;for(r=0,n=0,P=0,A=0;A<t.length;A++)r+=$r(t[A]&e[A]),n+=$r(t[A]),P+=$r(e[A]);return r/w.Math.sqrt(n*P)}function tk(t,e){var A,n,P,r;for(n=0,P=0,r=0,A=0;A<t.V.q;A++)(!e||r0(t.V,A))&&(P+=kt(t.V,A),r+=jt(t.V,A),++n);return n>1?new ig(P/n,r/n):null}function fs(t,e){var A;for(this.b=t,this.a=h(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 MP(t,e,A){this.j=t,this.i=A,this.e=h(F,k,6,e,15,1),this.k=h(F,k,6,e,15,1),this.a=h(yt,wt,6,e,15,1),this.b=h(yt,wt,6,e,15,1)}function Lz(t){var e,A,n,P,r;for(A=qX(new BP(238,238,238)),n=oi&A.a,P=0;P<xo(t);P++)for(r=0;r<Oo(t);r++)e=Kd(t,P,r),Jo(t,P,r,(qn&e)+n)}function sz(t){var e,A,n,P;for(t.a=h(F,k,6,t.d.a.length,15,1),e=0,P=new Wt(t.b);P.a<P.c.a.length;)n=t1(P),t.a[A=a9(t,n),A<0?-1:A]=e++}function yz(t,e){var A,n,P;for(t.c=e,P=new Wt(t.g);P.a<P.c.a.length;)A=t1(P),je(A,e);for(n=new Wt(t.f);n.a<n.c.a.length;)A=t1(n),je(A,e)}function ek(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)):ek(t,e+1,A,n),A[P]=!1)}function lz(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 Fh(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,zt(E1(w.Math.round(t*A/(t+r))))),P?A+n:n}function Ak(t,e,A){var n;return n=e==0?F0+t[0]-t[t.length-1]:t[e]-t[e-1],A>d6&&A<AA?n-=2*w.Math.cos(A+m2):n-=.5*w.Math.cos(A+m2),n}function Ds(t,e){var A;return e==null||!Zt(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 nk(){nk=B1,BU=B(d(rt,1),ft,6,16,[!1,!1,!1,!1,!1,!0,!0,!0,!0,!1,!1,!1,!1,!1,!1,!0,!0])}function Tz(t,e){return H8(t)?!!jV[e]:t.td?!!t.td[e]:Vi(t)?!!RV[e]:Tu(t)?!!bV[e]:!1}function sQ(t,e){switch(e){case 0:return HY(t,!1);case 1:return hz(t);case 2:return JY(t);case 3:return Hz(t);case 4:return LY(t)}return null}function Pk(t){var e;e=t.R.c*(t.r!=0?t.r:V8(t.L)),t.Y=e*rtt,t.T=e*Ptt,t.S=e*.38,t.W=e*.47,t.X=vt(e*t.J*itt+.5),t.V=e*.12,t.Z=e*.4,t.A=e*.5+.5}function hz(t){try{return t=Xn(t),ds(t),me(new BA(t))}catch(e){if(e=t0(e),Zt(e,27))return x1(),null;throw At(e)}}function cz(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]&&!WP(t.b.i,n)?386:2:A==3?4:16))}function wz(t,e,A){var n,P;for(n=new BA(es(A,null)),me(n),Iu(n,n.jb),t.d=h(F,k,6,e.g.length,15,1),P=0;P<t.d.length;P++)t.d[P]=ed(A,e.g[P].a)}function a8(t){return H8(t)?Qh(t):Vi(t)?vt((U1(t),t)):Tu(t)?(U1(t),t?1231:1237):PT(t)?t.ob():AT(t)?vD(t):t&&t.hashCode?t.hashCode():vD(t)}function gz(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 dz(t,e){var A,n;if((t.u[e]&hn)!=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 e2(t,e){var A,n;if(t.C[e]==7&&t.e[e]+xt(t,e)>=3){for(A=0;A<t.e[e];A++)if(n=t.i[e][A],t.C[n]==8&&t.e[n]+xt(t,n)==1)return!0}return!1}function yQ(t,e){var A,n;if(Wg(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;cu(this);try{if(t)for(A=new Wt(t);A.a<A.c.a.length;)e=t1(A),mt(this,e.Gb())}catch(n){if(n=t0(n),!Zt(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 rk(t,e,A,n){var P,r,i,f;for(r=-1,i=-1,f=0;f<Mt(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 ik(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=(pA(t.k,e,r)<<24)+t.a[P],!t.b[P]&&(A==-1||n<i)&&(A=r,n=i);return A}function Bz(t,e){var A,n,P,r;for(n=1,r=0;r<t.v.length;r++)n*=s3(t.v[r],e.d[r]);for(A=z9(t.i,e.d),P=0;P<t.w.length;P++)n*=k3(A,P,e.i[P]);return n}function fk(t,e){var A,n,P,r;for(r=t.size(),e.length<r&&(e=uu(new Array(r),e)),P=e,n=t.Tb(),A=0;A<r;++A)P[A]=n.bd();return e.length>r&&(e[r]=null),e}function Dk(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){P9();var P,r;for(P=0,r=0;r<A;r++)P=O1(Un(V(e[r],h1),V(n,h1)),V(zt(P),h1)),t[r]=zt(P),P=DA(P,32);return zt(P)}function eP(t,e){var A;for(A=0;A<t.w;A++)e-=16;for(e<0&&x1();e>15;)Jt(t,1,1),Jt(t,15,4),e-=16,++t.w;Jt(t,1,1),Jt(t,e,4)}function mh(){Km(),this.c=new zA(24,29),this.i=h(F,k,6,24,15,1),this.b=h(F,k,6,2,15,1),this.e=h(F,k,6,2,15,1),this.f=h(F,k,6,2,15,1)}function vz(t,e,A){return HI(t>=0&&t<=1114111),t>=Q0?(e[A++]=55296+(t-Q0>>10&1023)&w1,e[A]=56320+(t-Q0&1023)&w1,2):(e[A]=t&w1,1)}function Fz(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 mz(t,e,A){var n,P;for(P=0;P<O(t.j,e);P++)if(n=_(t.j,e,P),K(t.j,n)==8&&O(t.j,n)==1)return A&&p1(t.j,n)==0&&E0(t.j,n,-1),!0;return!1}function uk(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>Cy&&A<t.a[n]-Cy)return A<t.a[n]/2^t.b[n]<e.b[n]?1:-1;return 0}function kh(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 kz(t){var e;return ET(t.Vb(),(e=lB(new Tw,wO(new yw,new lw,new gw,new dw,B(d(Fl,1),Ye,95,0,[(iQ(),sc),qU]))),LT(e,new hw)))}function Us(t,e){var A;if(t.j[e]==3&&e<t.f&&i0(t.p,e)&&(t.p&&e<t.f?iA(t.p,e):0)>=5){for(A=0;A<t.j[e];A++)if(fi(t,t.k[e][A]))return t.k[e][A]}return-1}function bz(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 Rz(t){var e,A;for(e=0;e<t.f.q;e++)!t.b[e]&&Mt(t.f,e)==0&&(A=new MP(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 jz(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 bh(t,e,A,n,P,r,i,f){var D,Q;n&&(D=n.a[0],D&&bh(t,e,A,D,P,r,i,f),Nz(t,A,n.c,P,r,i,f)&&e.add(n),Q=n.a[1],Q&&bh(t,e,A,Q,P,r,i,f))}function os(t,e){var A;for(A=0;A<t.c;A++)if(gt(t.d[A],e.d[A]))return Hi(t.d[A],e.d[A])?-1:1;return P0(t.d[t.c],e.d[t.c])?0:Hi(t.d[t.c],e.d[t.c])?-1:1}function Qk(t,e,A){var n,P,r;for(r=e.length,n=new MP(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?TQ(n):xa(t,n,e,A),pP(t.d,n)}function Uk(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 ok(t){var e;return e=new nD,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 Jt(t,e,A){for(;A!=0;)t.t==0&&((!t.r||t.v!=63)&&(t.v+=64),Oe(t.u,t.v&w1),t.t=6,t.v=0),t.v<<=1,t.v=zt(Y(t.v,V(e,1))),e=q0(e,1),--A,--t.t}function pz(t,e,A,n,P,r,i,f,D,Q){var U;return U=Rh(T5(t,e,A,n,P,r,i,f,D)),!Q&&U==-1&&(U=Rh(T5(t,e,A,n,P,r,i,7,7)),U==-1&&(U=Rh(T5(t,e,A,n,P,3,3,7,7)))),U}function Rh(t){var e,A,n,P;for(M4||i_(),P=C0,n=I1,A=0;A<13;A++){if(e=P>=dU.length||t<dU[P]?-1:t==dU[P]?0:1,e==0)return P;P=e<0?P-n:P+n,n=n/2|0}return-1}function Cz(t,e){_A();var A;return typeof e===TU&&(e=!0),typeof e===w2?A=new CA(_i(new GA(e),t)):typeof e===bf&&(A=new CA(yG(new GA(!1),t,e))),A}function Lk(t,e,A){var n,P;return n=Yi(t,e++),n>=55296&&n<=56319&&e<A&&pI(P=(Xt(e,t.length),t.charCodeAt(e)))?Q0+((n&1023)<<10)+(P&1023):n}function Mz(t){var e;return t==null?!1:(e=typeof t,A1(e,w2)||A1(e,nr)||A1(e,bf)||t.$implements__java_io_Serializable||Array.isArray(t))}function Hz(t){var e;try{return e=XR(new r5(t)),me(new EA(e,8))}catch(A){if(A=t0(A),Zt(A,27))return x1(),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:($o(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 zA(r,i),gp(t,D,e,A,n),D)}function sk(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 Vz(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=h(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),MD(t.n))}function Ez(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 Sz(t){switch(typeof t){case bf:return Qh(t);case nr:return vt((U1(t),t));case w2:return U1(t),t?1231:1237;default:return t==null?0:vD(t)}}function qz(t){var e,A,n;t.b==t.c&&(n=t.a.length,A=CG(w.Math.max(8,n))<<1,t.b!=0?(e=qI(t.a,A),tF(t,e,n),t.a=e,t.b=0):mi(t.a,A),t.c=n)}function HP(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 yk(){op();var t,e,A,n,P,r,i;for(cu(this),r=new vo,A=xV,n=0,P=A.length;n<P;++n)e=A[n],t=_i(new Z2,e),DK(r,t),i=new og(t),i.a=V8(i.b),this.a.push(i)}function Iz(t){var e,A;for(A=!1,e=0;e<t.V.f;e++)C1(t.V,e)!=0&&Bn(t.V,e)&&(A||(z1(t),A=!0),Ze(t.V,e,C1(t.V,e),!1));A&&kL(t,w.Math.max(t.eb,1))}function xz(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&aA,!0)}function Nz(t,e,A,n,P,r,i){var f,D;return!(e.ld()&&(D=t.a.Rb(A,n),D<0||!P&&D==0)||e.md()&&(f=t.a.Rb(A,r),f>0||!i&&f==0))}function A2(t,e,A,n){var P;return P=h(yt,wt,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 Oz(t,e){var A;for(A=0;A<t.j.f;A++)t.d[A]&&gQ(t.j,A)==0&&(!e||K(t.j,A)==5&&p1(t.j,A)<0||K(t.j,A)==6||K(t.j,A)==14||tA(t.j,A)&&p1(t.j,A)>0)&&Pf(t,A)}function ti(t){var e;return e=w.Math.sqrt(t.a*t.a+t.b*t.b+t.c*t.c),e==0?(x1(),t.a=1,t.b=0,t.c=0,t):(t.a/=e,t.b/=e,t.c/=e,t)}function ei(t){return Y1(),!(t==1||t==6||ar(t)||t==2||t==10||t==18||t==36||t==54||t==86||t>103)}function lk(t){var e,A,n,P,r,i;for(i=AP(t),r=i.length,e=i[0].length,P=R1(F,[D0,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 Tk(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 Gz(t,e){e.j==1?(t.a!=-1&&(K0(t.e,t.a,t.k),jr(t.e,t.a,t.g),XA(t.e,t.a,t.j),Ne(t.e,t.a,t.i),u8(t.e,t.a,t.n)),Rr(t.c)):e.j==0&&(R$(t),Rr(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)),S9(e[0]|0,e[1]|0))}function hk(t){var e,A;if(t.K){for(e=0;e<t.q;e++)if(gt(V(t.B[e],Pe),0)){for(t=new Yr(t),A=e;A<t.q;A++)gt(V(t.B[A],Pe),0)&&(t.C[A]=-1);Pi(t)}}return t}function ck(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&&Ku(this,n,A-1),n!=-1&&P==1&&Ku(this,iU,A+1))}function f8(t,e){z1(t),Jh(t.V,t.hb,t.kb,e,0,-1,0,null)&&(t.t!=-1&&(t.t=-1,N1(t,new q1(t,4,!0))),t.eb=w.Math.max(t.eb,3),n1(t.k),N1(t,new q1(t,1,!0)))}function Jz(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-jt(t.V,e),A=w.Math.sqrt(n*n+P*P),A<24&&i>A&&(i=A,r=t.M[e]);return r}function zz(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&&Df(t,t.i[A][P])!=0)return!0}return!1}function uf(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++)er(t,e,n,0,0,t.D[0][n],t.D[1][n],!1);t.Yb(e)}function Yz(t,e){var A,n;for(A=h(F,D0,7,e,0,2),n=0;n<t.length;n++)t[n]!=null&&(A[n]=h(F,k,6,t[n].length,15,1),sA(t[n],0,A[n],0,t[n].length));return A}function Kz(t,e){var A,n;for(A=h(q,w8,10,e,0,2),n=0;n<t.length;n++)t[n]!=null&&(A[n]=h(q,I,6,t[n].length,15,1),sA(t[n],0,A[n],0,t[n].length));return A}function wk(t,e,A){var n,P,r,i,f;if(r=G1(t,e),n=WA(t,e,r,A),i=((t.u[e]&g8)>>>27)-1,i==-1){for(f=Yu(t.C[e]),P=0;P<f.length-1&&r>f[P]+n;)++P;i=f[P]}return i+n-r}function Xz(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 Zz(t,e){var A,n,P;t.j||e.startsWith(\"COUNTS\")&&(A=lA(e,ne(e,7)),n=c1(UA(e,7,ne(e,7)),o1,It),P=c1(UA(e,A,ne(e,A)),o1,It),t.j=new zA(n,P))}function Wz(t,e){var A,n,P,r,i,f;for(i=new Nn,f=t.c.length==2?t.c:t.b,n=f,P=0,r=n.length;P<r;++P)A=n[P],Hr(i,e.k[A]);return cd(i,.5),ti(mx(i,J0(e,t.f[4]))),i}function _z(t,e){var A,n;if(n=!1,t.f.t==null)for(t.f.t=h(F,k,6,e.length,15,1),A=t.f.t.length;--A>=0;)t.f.t[e[A]]=A;return n=Yj(t,e,0,n),n=Yj(t,e,1,n),n}function $z(t,e,A){var n;if(t.eb==6){if(A)for(n=0;n<t.V.q;n++)zn(t.V,n,!r0(t.V,n));Ar(new Y8(A?4:0),t.V),A&&nT(t.V)}j5(t.G,e,new QA(0,0,VD(t.k),Vr(t.k)),Q0|t.T)}function gk(t,e){var A,n,P;if(vT(e),A=e/31|0,n=t.a.length,A>=n)return-1;for(P=(t.a[A]|0)&It<<e%31;P==0;){if(++A>=n)return-1;P=t.a[A]|0}return A*31+OL(P)}function jh(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 Qf(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+=Q1),n.a=-(t.T*w.Math.sin(P)),n.b=t.T*w.Math.cos(P)}function az(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]]=O1(P[t.d[r]],e[r]<<t.b[r]),n[t.d[r]]=O1(n[t.d[r]],M1(yc[t.a[r]],t.b[r]))}function tY(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 TQ(t){var e,A;for(e=Q1-Q1*(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 eY(t,e,A,n,P){var r;return r=Sb(t,e,A,n,P),r<0?jj(t,e,A,n,P,Gb(t,e,A,n,P)):w.Math.abs(j0(t.b[r][4]))<.001?jj(t,e,A,n,P,j0(t.b[r][5])):j0(t.b[r][4])}function AY(t,e){var A,n,P,r,i;for(r=0;r<xo(t);r++)for(i=0;i<Oo(t);i++)for(A=Kd(t,r,i),P=A&oi,n=0;n<Z4.length;n++)if(P==Z4[n]){Jo(t,r,i,(qn&A)+e[n]);break}}function nY(t,e,A){var n,P;if(t.k=e,t.n=A,t.i!=null)for(P=t.i.length,t.o=h(yt,wt,6,P,15,1),t.p=h(yt,wt,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(a1(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=Ot(t.R,e,P),_e(t.R,n)&&(A+=dt(t.R,n)-1);return A>1}function t9(){t9=B1,yl=new Mi(\"CREATE\",0),sl=new Mi(\"CHANGE_DIF\",1),Ll=new Mi(\"CHANGE_ABS\",2),ll=new Mi(\"REMOVE\",3),bU=new Mi(\"NO_CHANGE\",4),Tl=new Mi(\"UNKNOWN\",5)}function dk(t,e){var A,n,P;return A=e.dd(),P=e.ed(),n=t.get(A),!(!(J1(P)===J1(n)||P!=null&&VP(P,n))||n==null&&!t.containsKey(A))}function PY(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],ag(n,e,A);if(t.b!=null)for(P=t.b,i=0,D=P.length;i<D;++i)n=P[i],ag(n,e,A)}function Bk(t,e,A){var n,P,r,i,f;for(r=!0,f=N(t.g,e).a,i=ik(t,f);i!=-1;)n=_(t.k,f,i),P=Ot(t.k,f,i),i=ik(t,n),Iv(t,new pT(n,P,f,A&&r,A&&i==-1),++e),f=n,r=!1}function vk(t,e){var A,n;if(e!=null)for(ut(t.j,1),A=0;A<t.j.f;A++)e[A]!=0&&(n=Fu(t.j,A,G1(t.j,A)),e[A]==15?n>=0&&XA(t.j,A,0):e[A]!=lT(t.j,A)&&XA(t.j,A,e[A]-n))}function ph(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,UA(t.e,n,e)),n=e+1,e=zI(t.e,10,n);mt(A,HD(t.e,n))}return A}function VP(t,e){return H8(t)?A1(t,e):Vi(t)||Tu(t)?(U1(t),J1(t)===J1(e)):PT(t)?t.mb(e):AT(t)?lg(t,e):t&&t.equals?t.equals(e):J1(t)===J1(e)}function rY(t,e,A){var n,P;return n=h(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)>kp?3:P<0?2:1}function iY(t,e,A){var n,P;return n=h(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)>kp?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(Xt(A,t.length),t.charCodeAt(A)!=32&&(Xt(A,t.length),t.charCodeAt(A)!=9))return A;return-1}function fY(t){var e,A;for(t.b=null,e=0;e<t.g.g;e++)Bu(t.g,e)&&(!t.b&&(t.b=new f1),A=new KU,A.a=z(t.g,0,e),A.b=z(t.g,1,e),A.d=x3(t.g,e),A.c=gT(t.g,e),mt(t.b,A))}function hQ(t){var e,A,n;for(Bm(t),Aa(new u7,dh(t)),n=h(F,k,6,t.L.length,15,1),e=0;e<t.V.q;e++)A=t.M[e],Ze(t.V,e,C1(t.L[A],n[A]),C1(t.V,e)==0||Bn(t.V,e)),++n[A]}function DY(t,r){var A=wE;A||(A=Z.createElement(\"canvas\"),wE=A);var n=\"\"+t.b+\"px \"+t.a,P=A.getContext(\"2d\");P.font=n;var r=P.measureText(r);return r.width}function Fk(t,e){var A,n,P,r,i;for(r=Vb(t,t.D[0][e])||Vb(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]))-G1(t,A),r>P&&(r=P);return r}function uY(t,e,A){var n,P,r,i,f;if(n=Ot(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 QY(t){var e,A,n,P;for(e=\"o3\",A=\"YA\",P=w.Math.min(t.length,5),n=P-1;n>=0;n--)if(A1(t[n].d,e)||A1(t[n].d,A)){t.length>=n+1&&t.splice(0,n+1);break}return t}function UY(t){var e,A,n,P;for(P=0,n=null,A=new Wt(t);A.a<A.c.a.length;)e=t1(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 Wt(t.g);n.a<n.c.a.length;)if(e=t1(n),e.K)return!0;for(A=new Wt(t.f);A.a<A.c.a.length;)if(e=t1(A),e.K)return!0;return!1}function Mn(t,e){var A;return U0(t)&&U0(e)&&(A=t/e,M2<A&&A<DP)?A<0?w.Math.ceil(A):w.Math.floor(A):pn(G5(U0(t)?pe(t):t,U0(e)?pe(e):e,!1))}function oY(t,e){var A,n,P;for(t.g=h(F,k,6,t.k.q,15,1),A=Wb(t.k,t.g,e,!0),t.q=h(wPt,A0,177,A,0,1),P=!0,n=0;n<A;n++)P=P&!!(t.q[n]=Ga(t.r,t.k,t.g,n));return P}function LY(t){var e;try{return t=Xn(t),ds(t),e=XR(new r5(t)),me(new EA(e,8))}catch(A){if(A=t0(A),Zt(A,27))return x1(),null;throw At(A)}}function Uf(t,e,A){var n,P,r;if(P=G1(t,e),P-=WA(t,e,P,t.C[e]),A&&(P-=t.e[e]-t.j[e]),r=Yu(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 mk(t,e,A,n,P){this.f=e,this.a=A,this.b=n,this.c=P,this.j=zv(t.a,e,A,n,P),this.g=y2(t.d,e,A,n),this.i=y2(t.d,e,P,n),this.d=oR(t.n,e,A,n,P),this.e=oR(t.n,e,P,n,A)}function kk(t,e,A,n,P,r,i){var f,D,Q,U,L;if(U=P[r],Q=r==i-1,f=Q?n:0,L=Uk(f,U),n!=10&&B(d(t,i-r),e[r],A[r],f,L),!Q)for(++r,D=0;D<U;++D)L[D]=kk(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);Zu(t,t.w[e]),t.C[e]=-1,t.v!=null&&(t.v[e]=null),t.t!=null&&(t.t[e]=null),mf(t),t.T=0}function sY(t,e){var A,n,P,r;for(A=t.e[e],r=h(F,k,6,A,15,1),P=0;P<A;P++)r[P]=(t.i[e][P]<<16)+P;for(r.sort(Fe(u0.prototype.gd,u0,[])),n=0;n<A;n++)r[n]&=w1;return r}function yY(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 BA(N(t.a,n)),J(P,me(A)),e&&(P.a+=\" \",J(P,Iu(A,!0)));return P.a}function lY(t,e){if(t.b==-1)t.a=h(Ttt,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]&&Mh(t.a[t.c]));return!t.a[t.c]&&(t.a[t.c]=new Jl),t.c}function Ch(t,e,A){var n,P,r;for(P=t.$c().Tb();P.ad();)if(n=P.bd(),r=n.dd(),J1(e)===J1(r)||e!=null&&VP(e,r))return A&&(n=new ho(n.dd(),n.ed()),P.cd()),n;return null}function Hn(t,e,A,n){vr(t.L,D1(t.L,A,n))?(W1(t,-3),t.qb(e),W1(t,t.Q)):t.p[A]!=t.p[n]?PK(t,e,A,n):t.p[A]!=0?(W1(t,t.p[A]),t.qb(e),W1(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 wk(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,wk(t,e,A));return i}function bk(){bk=B1,v8=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 TY(t,e,A,n){x7();var P=nl;bt=e,y1=A,ttt=n;function r(){for(var i=0;i<P.length;i++)P[i]()}if(t)try{KE(r)()}catch(i){t(e,i)}else KE(r)()}function Rk(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 Mh(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(!Mh(e))return!1;t.d=!r}return t.d}function hY(t){var e,A,n,P,r,i;if(P=tY(t),r=h(dE,h0,115,0,0,1),e=0,n=P.length,n==0)return r;for(i=Vj(P[0]),A1(i.d,y4)||(r[e++]=i),A=1;A<n;A++)r[e++]=Vj(P[A]);return r}function jk(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]),kZ(t,e,Q1*P/180),zm(t,n,A))}function BQ(t){var e,A,n;if(!t.a)return null;for(t.e||xR(t,1),e=null,n=new Wt(t.a);n.a<n.c.a.length;)A=t1(n),!A.b&&(!e||e.e>A.e)&&(e=A);return e?e.b=!0:t.a=null,e}function pk(t){var e,A,n,P;for(n=-1,P=It,e=0;e<t.k.f;e++)t.b[e]||(A=t.a[e],Qe(t.k,e)&&(A+=cn),O(t.k,e)==0?A+=1056964608:A+=O(t.k,e)<<24,P>A&&(P=A,n=e));return n}function of(t,e,A){var n,P;if(e<t.f&&i0(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 cY(t,e){var A,n;if(n=K1(e),A=!1,n==null||!n.startsWith(\"$RXN\"))throw At(new V1(\"'$RXN' tag not found\"));return A1(n,nM)?A=g$(t,e,!1):A=O$(t,e,!1),A}function Ck(t,e,A){if(t.f[e])return 0;if(t.a){if(Mt(t.j,e)!=3)return 0}else if(Mt(t.j,e)>3)return 0;return K(t.j,e)==6?(A&&E0(t.j,e,1),2):K(t.j,e)==5?4:0}function ZA(t,e,A){var n,P,r,i,f,D,Q,U;for(i=-1,P=wP(t,t.q,t.r,wn),f=Ve,D=P*P/12,n=0;n<t.q;n++)Q=t.J[n].a,U=t.J[n].b,r=(e-Q)*(e-Q)+(A-U)*(A-U),r<D&&r<f&&(f=r,i=n);return i}function Mk(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=p1(e,t[0]),f=1;f<t.length;f++)if(p1(e,t[f])!=i)return!1;return!0}function Hk(t,e,A){var n,P;return t.L.q==0?null:(t.v=UR(t),n=t.R.c*V8(t.L),P=new Ws(t.v,e,n,A),P.c==1&&P.a==0&&P.b==0?P=null:(Eu(P,t.R),Nu(P,t.v)),c5(t,e,n,A),P)}function wY(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]:U9[t.C[e]],P+=n+xt(t,e)*U9[1],t.C[e]>=171&&t.C[e]<=190&&(A=t.e[e],A>2&&(P-=(A-2)*U9[1]));return P}function Vk(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 gY(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 dY(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 wm(t,e,i,n,f));return A}function BY(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 TF(O9(A,n),(r=e.C[A],(r<(c2(),IA).length?IA[r]:2)+(P=e.C[n],P<IA.length?IA[P]:2))))}function vY(t){var e,A,n,P,r;for(r=new Sg,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),hg(r.a,e);return r.a?r.e.length==0?r.a.a:r.a.a+(\"\"+r.e):r.c}function Hh(t,e){var A,n,P;return P=-1,n=-1,(t.G&128)!=0||(E8(t.L,e)&&(P=Ae(t.L,e),n=VA(t.L,e)),A=Us(t.L,e),A!=-1&&(P=cP(t.L,A),n=$i(t.L,A)),P!=-1&&P!=0&&(P|=n<<8)),P}function Vh(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(NR(t,e,A,n,P,i,Q),A[1]!=A[2])return!0;Q>1&&iR(A,n,i,Q)}return!1}function Ek(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&&Zn(t[e+1]&w1)&&(n=t[e+1]-48,++A[0]),P==43?n:-n}return 0}function Z9(t,e,A){var n,P,r,i,f;for(mJ(t),P=(t.i==null&&(t.i=h(MV,h0,27,0,0,1)),t.i),r=0,i=P.length;r<i;++r)n=P[r],Z9(n,e,\"\t\"+A);f=t.e,f&&Z9(f,e,A)}function Eh(t,e){var A,n,P;for(P=h(Ee,PA,6,t.d.length,15,1),n=h(Ee,PA,6,t.d.length,15,1),A=0;A<t.d.length;A++)P[A]=PO(lL(e,t.a[A]),t.e[A]),n[A]=Dl[t.e[A]];return new O7(P,n)}function Sh(){Sh=B1;var t,e,A,n;for(Uc=h(yt,wt,6,25,15,1),oc=h(yt,wt,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--)Uc[t]=A,A*=.5}function Sk(t,e){var A,n,P,r,i;for(P=-1,r=Ve,n=0;n<t.e.length;n++)i=Q1*t.e[n]/180,A=w.Math.abs(e-i),A>Q1&&(A=F0-A),A/=10+w.Math.sqrt(t.b[n]),r>A&&(r=A,P=n);return P}function FY(t,e,A){var n,P,r;if(n=A[e],n!=-1&&d0(t.a,n)!=0&&yK(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||qY(t,e,A)==(r==P))return 5}return 0}function mY(t){var e,A,n;return G(t,0)>=0?(A=Mn(t,Of),n=Y9(t,Of)):(e=DA(t,1),A=Mn(e,5e8),n=Y9(e,5e8),n=O1(M1(n,1),V(t,1))),Y(M1(n,32),V(A,h1))}function kY(t,e){P9();var A,n;for(n=(ke(),N2),A=t;e>1;e>>=1)(e&1)!=0&&(n=bP(n,A)),A.d==1?A=bP(A,A):A=new Zm(MR(A.a,A.d,h(F,k,6,A.d<<1,15,1)));return n=bP(n,A),n}function ls(t,e){var A,n;for(U1(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 q9(t.b,A,e),!0;q9(t.b,A,N(t.b,n))}return q9(t.b,n,e),!0}function n2(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=Ot(t.j,A,r),t.e[n]&&(t.e[n]=!1,--t.c)}function bY(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),K(t.j,e)<=8){for(r=0;r<O(t.j,e);r++)if(n=Ot(t.j,e,r),t.e[n]){Pf(t,e);break}}}}function RY(t,e){var A,n,P,r,i,f;if(!(e.length<=0||e[0]<64))for($o(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),Ze(t.g,A,i,n)}function jY(t,e,A,n,P){var r,i;for(r=0,i=0;i<P;i++)r=O1(r,l0(V(e[i],h1),V(n[i],h1))),t[i]=zt(r),r=q0(r,32);for(;i<A;i++)r=O1(r,V(e[i],h1)),t[i]=zt(r),r=q0(r,32)}function pY(t,e,A,n,P){var r,i;if(r=O3(t.a,t.b,P),i=Wo(O3(e.a,e.b,P)),n.containsKey(r)){if(A)throw At(new ro(\"Duplicate key \"+r));n.put(r,null.vd(n.get(r)))}else n.put(r,i)}function CY(t){var e,A,n;for(e=0;e<t.R.f;e++)!Fr(t.R,e)&&t.db[e]==3&&Xo(t.R,e,!0);for(A=0;A<t.R.g;A++)t.o[A]==3&&(n=dt(t.R,A),n==1?Xo(t.R,z(t.R,0,A),!0):n==2&&w0(t.R,A,386))}function qh(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&w1),A=!0),e=10*(e%100)}function qk(t,e,A,n){gh(),this.c=ED(t,oV,this),this.d=e,this.e=A,this.a=n,this.k=K(this.e,n),this.g=ye(this.e,n),this.j=br(this.e,n),this.i=FA(this.e,n),this.n=_n(this.e,n),$j(this)}function Ih(t,e,A,n,P){var r,i,f,D;for(r=-1,i=-1,D=0;D<Mt(t.e,e);D++)if(f=Ot(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 MY(t,e){var A,n,P;return P=h(F,k,6,2,15,1),D1(t,e[1],e[2])!=-1?(P[0]=e[2],P[1]=e[1]):(A=h(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 HY(t,e){try{return e?(t=Xn(t),VR(t,!0),wa(t),me(new BA(t))):me(new BA(t))}catch(A){if(A=t0(A),Zt(A,27))return x1(),null;throw At(A)}}function Ik(t,e,A){a5(),sB.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 eT(12),this.g=A,++I2}function VY(t){var e,A,n,P,r;for(A=0,Qi(t),ut(t,7),e=0;e<t.f;e++)try{r=ny(t,e,6241),P=(n=a9(Yf,oQ(r)),n<0?-1:n),P!=-1&&(A+=K4[P])}catch(i){if(i=t0(i),!Zt(i,19))throw At(i)}return A}function k0(t){var e,A;return t>=Q0?(e=55296+(t-Q0>>10&1023)&w1,A=56320+(t-Q0&1023)&w1,String.fromCharCode(e)+(\"\"+String.fromCharCode(A))):String.fromCharCode(t&w1)}function P2(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],!ar(A))return!1}}return ar(t.C[e])}function EY(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],!ei(A))return!1}}return ei(t.C[e])}function SY(){iy();var t,e,A,n,P,r,i,f,D;for(il=new lP,i=b4,f=0,D=i.length;f<D;++f)for(r=i[f],P=o8(r[0],\";\"),e=P,A=0,n=e.length;A<n;++A)t=e[A],ze(il,ef(t.toLowerCase(),\"-\"),r[1])}function xk(t){Bs();var e,A,n,P,r;for(ut(t,7),P=h(rt,ft,6,t.g,16,1),n=0,A=0;A<t.g;A++)W_(t,A)&&(P[A]=!0,++n);for(r=h(F,k,6,n,15,1),n=0,e=0;e<t.g;e++)P[e]&&(r[n++]=e);return r}function qY(t,e,A){var n,P,r,i,f,D,Q;if(D=!1,a1(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 xh(t,e,A){var n,P;for(P=!1,n=0;n<t.V.f;n++)C1(t.V,n)!=0&&(A&&!Bn(t.V,n)||e&&Bn(t.V,n))&&(P||(z1(t),P=!0),Ze(t.V,n,0,!1));P&&(e||hQ(t),kL(t,w.Math.max(t.eb,1)))}function Nk(){Nk=B1,cl=B(d(F,1),k,6,15,[0,2,1,3]),_V=B(d(it,1),Dt,2,6,[\"plain\",\"italic\",\"bold\",\"italics & bold\"]),WV=B(d(it,1),Dt,2,6,[\"8\",\"9\",\"10\",\"12\",\"14\",\"18\",\"24\",\"32\"])}function Ts(t,e){var A,n;if(!e)return null;for(n=h(F,k,6,(sr.length+31)/32|0,15,1),e=hk(e),Dn(t.g,e),A=0;A<sr.length;A++)Ln(t.g,q2[A]),sn(t.g,1,4)>0&&(n[A/32|0]|=1<<31-A%32);return n}function Ok(t,e){var A,n,P,r;for(A=h(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],Pe),0)||(A[r++]=t.C[n]);return A.sort(Fe(u0.prototype.gd,u0,[])),A}function hs(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 IY(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 xY(t){var e,A;try{return A=new vd(t),xb(A,4e3,LU),is(A,A.i)}catch(n){if(n=t0(n),Zt(n,185))return NaN;if(Zt(n,19))return e=n,Z9(e,(x1(),gi),\"\"),NaN;throw At(n)}}function Gk(t,e){var A,n,P,r,i;for(r=e.length,i=h(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]=Ot(t.i,e[n],P);break}return i}function ws(t,e,A){var n,P;if((t.u[e]&hn)==0||(t.u[A]&hn)==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 NY(t){var e,A;return t.f||(A=new tu,t.a&&(A.a=!0),t.f=KB(A,(e=t.g.a,e)),t.f&&(t.f.P==null||t.f.P.length==0)&&$2(t.f,t.e!=-1&&t.c!=null?t.c[t.e]:t.f?t.f.P:null)),t.f}function OY(t,e,A){var n,P,r,i,f,D,Q;if(D=!1,a1(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=C1(t.g,n),i=C1(t.g,P),A[r]>A[i]^n>P&&(D=!D);return D}function GY(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 V1(\"SmilesParser: No matching closing bracket found.\"));return e+1}function Jk(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 gD(e,A)):null}function zk(t){var e,A,n;for(n=new dL(\", \",\"[\",\"]\"),A=t.Tb();A.ad();)e=A.bd(),Tv(n,J1(e)===J1(t)?\"(this Collection)\":e==null?Pr:$D(e));return n.a?n.e.length==0?n.a.a:n.a.a+(\"\"+n.e):n.c}function r2(t){var e,A,n;if(fl==null){if(e=_D(\"/resources/csd/\"+t),e)return fl=\"csd/\",new nn(new Fi((n=e,c0(),n)));fl=\"cod/\"}return new nn(new Fi((A=_D(\"/resources/\"+fl+t),c0(),A)))}function JY(t){var e,A;try{for(t=Xn(t),ds(t),e=t.r,A=0;A<e;A++)t.H[A]=1,t.T=0;return me(new BA(t))}catch(n){if(n=t0(n),Zt(n,27))return x1(),null;throw At(n)}}function Yk(t,e){var A,n,P,r;for(n=0,P=t.length;n<P;n++){r=t[n];try{r[1]?r[0].vd()&&(e=cx(e,r)):r[0].vd()}catch(i){if(i=t0(i),Zt(i,27))A=i,qx(Zt(A,163)?A.Lc():A);else throw At(i)}}return e}function Kk(t){var e,A,n,P,r,i,f,D;for(f=h(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 Nh(t){var e,A,n,P;if(A=zt(DA(t,32)),A==0)return n=zt(t)>>>0,n.toString(16);e=h(l9,a0,6,17,15,1),P=17;do e[--P]=xx(zt(t)&15),t=DA(t,4);while(G(t,0)!=0);return tP(e,P,17-P)}function G1(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)&&(zn(t.k,A,!1),--t.b),r=0;r<O(t.k,A);r++)n=Ot(t.k,A,r),t.g[n]&&(t.g[n]=!1,--t.c)}function Oh(t,e,A){var n,P,r,i,f;for(P=0,i=new Wt(A);i.a<i.c.a.length;)r=t1(i),r.length!=0&&(f=GL(e,r).b,P<f&&(P=f));return n=t.c*fU*(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(g4==null&&(g4=new RegExp(\"^\\\\s*[+-]?(NaN|Infinity|((\\\\d+\\\\.?\\\\d*)|(\\\\.\\\\d+))([eE][+-]?\\\\d+)?[dDfF]?)\\\\s*$\")),!g4.test(t))throw At(new YP(g2+t+'\"'));return parseFloat(t)}function Gh(t){var e,A;for(A=R1(F,[nA,D0],[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]]=rf(A[0][t.ab[e]],e):t.bb[e]==2&&(A[1][t.ab[e]]=rf(A[0][t.ab[e]],e)));return A}function gs(t){var e,A,n,P;for(P=new nn(new Fi((A=_D(t),c0(),A))),n=new nu;;)try{if(e=K1(P),e!=null)js(n,e);else break}catch(r){if(r=t0(r),Zt(r,75))break;throw At(r)}return n}function Xk(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&aA)}function Zk(t,e){var A,n,P,r,i;if(A1(t.a,\"Helvetica\")){for(r=0,n=0,P=e.length;n<P;n++)A=(Xt(n,e.length),e.charCodeAt(n)),r+=(A<128?i=gE[A]:i=wA,i*t.b/20);return r}else return DY(t,e)}function Wk(t,e,A){var n,P,r,i;return P=t.c[A][0]*Q1/180,r=t.c[A][1]*Q1/180,i=t.e[A]*Q1/180,e<i-Q1?e+=F0:e>i+Q1&&(e-=F0),n=(i-e)/(i-(e<i?P:r)),n<1?0:n<2?(n-=1,n*n):1}function zY(t,e){var A,n,P,r,i;if(t.e!=null)for(A=C5(t)/t.p.c,P=t.e,r=0,i=P.length;r<i;++r)n=P[r],pS(n,t.f),n.r=A/n.R.c,W5(n,e);if(t.b!=null)for(P=t.b,r=0,i=P.length;r<i;++r)n=P[r],W5(n,e)}function ne(t,e){var A,n,P,r;for(A=!1,P=!1,n=e;n<t.length;n++)if(r=(Xt(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 YY(t){oo();var e,A,n,P;for(h5(t,1),n=t.q,A=h(it,Dt,2,n,6,1),e=0;e<n;e++)P=Xn(t),u8(P,e,(Y1(),X0)[P.C[e]]+\"*\"),P.C[e]==1?K0(P,e,H4):jr(P,e,P.A[e]+5),eO(P),A[e]=me(new EA(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]&=By,(t.u[e]&3)!=0?t.u[e]|=nU:t.u[e]&=dy;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|=o1,r=AF(A),n!=-1&&(ae(e,n),RT(e,r[0],r[1],dn,dn)),A==20?ZL(e,t.c,0,t.d*84,84,84,r[0],r[1],dn,dn):ZL(e,P?t.g:t.i,(r[0]-v8)*t.j,(r[1]-v8)*t.j,84,84,r[0],r[1],dn,dn)}function i2(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&&YZ(t,n),P=!0);for(r=!1,A=0;A<t.R.f;A++)ey(t,A,1)&&(t.ib[A]=t.L,e&&R_(t,A),r=!0);return r&&(t.L=!t.L),P||r}function W9(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,Bo(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 KY(t){var e,A,n,P,r;for(r=new Lo(t.g,t.f),P=h(F,k,6,t.g.q,15,1),A=0;A<t.g.q;A++)P[A]=C1(t.g,A);for(n=h(F,k,6,t.f.q,15,1),e=0;e<t.f.q;e++)n[e]=C1(t.f,e);return-Ks(r,ah(r,P,n))*.25}function Ai(t){var e,A,n,P;for(P=new nn(new Fi((n=_D(t),c0(),n))),e=new f1;;)try{if(A=K1(P),A!=null)e.a.push(A);else break}catch(r){if(r=t0(r),Zt(r,75))break;throw At(r)}return e}function XY(t,e){var A,n,P;for(A=h(F,k,6,t.e.length,15,1),P=0;P<t.e.length;P++)n=M1(yc[t.a[P]],t.b[P]),gt(V(e.c[t.d[P]],n),0)?A[P]=zt(q0(V(e.b[t.d[P]],n),t.b[P])):A[P]=-1;return A}function ZY(t,e){i8();var A,n,P,r;for(n=h(rt,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=NZ(A,e),r=0;r<P.length;r++)n[P[r]]=!0;P[0]!=P[P.length-1]&&mt(t,new C7(P))}}function Jh(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=W9(t,n),Bo(t.J[D],e,A,0),t.A[D]=P,XA(t,D,r),Ne(t,D,i),u8(t,D,f),!0):(Q=Bf(t,D,n,P,r,i),Q=Q|u8(t,D,f),Q)}function _k(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]!=Mt(e,n[r])&&(P=Uf(t,r,!1),P!=-1&&(f=Uf(e,n[r],!1),P!=f&&(i=br(e,n[r]),(i==-1||i<P)&&XA(e,n[r],P))))}function WY(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-on(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 _Y(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 a3(r)}function zh(t,e){var A,n,P;for(C9.call(this,t),A=0,P=0;P<t.length;P++)e.j[t[P]]!=1&&++A;if(A>2)for(this.a=h(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 ni(t,e,A,n,P,r){var i,f,D,Q;for(D=0,f=0;f<t.R.g;f++)(ee(t.R,t.C[f])&n)!=0&&++D;if(D!=0)for(eP(t,e),Jt(t,D,A),i=0;i<t.R.g;i++)Q=ee(t.R,t.C[i])&n,Q!=0&&(Jt(t,i,A),P!=1&&Jt(t,Q>>r,P))}function Yh(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=(U1(P),P+(U1(\",\"),\",\"))),A=t.v[e][n],P=ju(P,X0[A]);return P}function Lf(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++)Ay(t,e);for(P=0;P<t.g;P++)Nj(t,P);for(A=0;A<t.g;A++)t.H[A]==2&&(t.F[A]&3)==3&&(t.H[A]=386)}function $Y(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=Ot(t.k,e.a,r),e.d[P]||Gj(t,n,e.a,A),t.e[n]>9&&(A.a+=\"%\"),g3(A,t.e[n]))}function aY(t,e){var A,n,P,r,i;if(t.i.K){if(gt(V(o0(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],!ar(n))return!1;return!0}}return ar(K(t.i,e))}function $k(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 tK(t){var e,A;(t.G&32)==0&&(A=vR(t.L),A!=null&&(t.w.a==0&&t.w.b==0&&(e=t.R.c*V8(t.L),t.v=UR(t),Cm(t,e),c5(t,null,e,0)),t.Cb(vt(t.A)),t.L.O!=1&&W1(t,448),t.tb(A,t.w.a,t.w.b+jf*t.A)))}function ak(t){var e,A,n;if(cu(this),!(t==null||t.length==0))for(e=0,A=t.indexOf(k0(10));A!=-1;)n=MX((pt(e,A,t.length),t.substr(e,A-e))),n&&this.a.push(n),e=A+1,A=t.indexOf(k0(10),e)}function eK(t,e,A){var n,P;switch(P=A&127,n=Fk(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 sf(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=on(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 Kh(t,e){var A,n,P;return n=e.g-v8,P=e.i-v8,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 AK(t){var e;t.c==null&&(e=J1(t.b)===J1($4)?null:t.b,t.d=e==null?Pr:Yv(e)?e==null?null:e.name:H8(e)?\"String\":Uu(_L(e)),t.a=t.a+\": \"+(Yv(e)?e==null?null:e.message:e+\"\"),t.c=\"(\"+t.d+\") \"+t.a)}function nK(t,e){var A,n,P,r;return e&=63,A=t.h&aA,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&aA)}function PK(t,e,A,n){var P,r;P=new L1,r=new L1,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)&&(W1(t,t.p[A]),t.qb(P)),cA(t,r)&&(W1(t,t.p[n]),t.qb(r)),W1(t,t.Q)}function tb(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=df(t,e,A),P!=-1?((t.u[t.D[0][P]]&t.u[t.D[1][P]]&512)!=0?nQ(t):Zh(t,P),t.T=0,!0):!1)}function eb(t,e,A){var n,P,r;for(t.U=e,t.V=A,t.Q=h(yt,wt,6,t.q,15,1),t.R=h(yt,wt,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]=kA(e,A,t.J[n].a,t.J[n].b)}function Ab(t,e){var A,n,P,r;for(r=h(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],Pe),0)||(r[P++]=w.Math.abs(t.w[A]));return r.sort(Fe(u0.prototype.gd,u0,[])),r}function nb(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 rK(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 YL(t,e,r,A,n,P)),mt(i,new YL(t,e,r,A,P,n)),mt(i,new YL(t,e,r,n,P,A)));return i}function K1(t){var e,A,n;if(A=bL(t),A==-1)return null;for(n=new V0,e=!1;!e;)if(A==10?e=!0:A==13&&(e=!0,A=bL(t),A!=10&&(t.a=A)),!e){if(A==-1)break;Oe(n,A&w1),A=bL(t)}return n.a}function iK(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 fK(t){return t.K++==64?!1:t.i?Mh(t.i.b)?!1:(co(t.I,0),co(t.B,0),U3(t.H),U3(t.A),rb(t),NS(t.i),t.q=gR(t),t.g=7,t.c=0,t.d=0,t.e=0,t.f=0,!0):(t.i=new Gg,!0)}function Pb(t,e,A){var n,P,r,i;if(i=dT(e),P=(n=t.a.get(i),n??h(uP,A0,1,0,5,1)),P.length==0)t.a.set(i,P);else if(r=OF(e,P),r)return r.fd(A);return P[P.length]=new ho(e,A),++t.c,++t.b.b,null}function M(t,e,A){var n=cU,P=n[t],r=P instanceof Array?P[0]:null;P&&!r?o=P:(o=iG(e),o.td=A,!e&&(o.ud=PD),n[t]=o);for(var i=3;i<arguments.length;++i)arguments[i].prototype=o;r&&(o.sd=r)}function Xh(t,e){var A,n;if((t.G&4224)!=0||(n=Hh(t,e),n==-1&&(A=nb(t.L,e),A!=-1&&(e=A,n=Hh(t,e))),n==-1))return t.p[e];switch(n&255){case 1:return 384;case 2:return 64;default:return 448}}function Zh(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&&(Zu(t,t.w[t.D[n][e]]),t.C[t.D[n][e]]=-1)}t.H[e]=512,mf(t),t.T=0}function DK(t,e){var A,n;if(!e)return null;for(n=h(NA,a0,6,(sr.length+63)/64|0,14,1),e=hk(e),Dn(t.g,e),A=0;A<sr.length;A++)Ln(t.g,q2[A]),sn(t.g,1,4)>0&&(n[A/64|0]=Y(n[A/64|0],M1(1,63-A%64)));return n}function uK(t,e,A,n){var P,r,i,f;for(f=h(F,k,6,t.o[e].f,15,1),V9(f,f.length,-1),r=dr(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 rb(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 QK(t,e){var A,n,P,r,i,f,D,Q,U;if(t==null)return e;for(U=h(F,k,6,t.length+e.length,15,1),Q=0,P=t,i=0,D=P.length;i<D;++i)A=P[i],U[Q++]=A;for(n=e,r=0,f=n.length;r<f;++r)A=n[r],U[Q++]=A;return U}function UK(t,e){switch(e){case 0:sb(t);return;case 1:z1(t),t.eb=w.Math.max(t.eb,6),n1(t.k),N1(t,new q1(t,1,!0));return;case 17:Dv(t),t.eb=w.Math.max(t.eb,2),n1(t.k),N1(t,new q1(t,1,!0));return}}function ib(t,e,A){var n,P,r,i,f,D,Q,U;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],U=CQ(t,i,r),P<U&&(!A||!(t.H[i]==257||t.H[i]==129))&&(P=U,Q=i));return Q}function fb(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,(Y1(),wn))*P.r);return A==0?(Y1(),Y1(),wn):e/A}function oK(t,e,A,n){var P,r,i,f,D;for(i=h(rt,ft,6,t.length+1,16,1),D=h(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 LK(t,e,A){var n,P,r,i,f,D,Q,U,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(U=kt(t.V,D),s=jt(t.V,D),P=U-Q,r=s-L,P*P+r*r<A){i=!0;break}i&&++n}return n==e.q}function mQ(){mQ=B1,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 sK(t,e,A){var n;return tb(t.V,e,A)?(t.eb=w.Math.max(t.eb,1),n1(t.k),N1(t,new q1(t,1,!0)),!0):(n=cJ(t,e,A),n?(Z8(t.I,n),t.v=null,t.eb=w.Math.max(t.eb,1),n1(t.k),!0):!1)}function yK(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 Db(t,e){var A,n,P,r,i,f,D,Q,U;for(U=0,P=t,i=0,D=P.length;i<D;++i)A=P[i],e[A]==0&&++U;if(U==0)return null;for(Q=h(F,k,6,U,15,1),U=0,n=t,r=0,f=n.length;r<f;++r)A=n[r],e[A]==0&&(Q[U++]=A);return Q}function lK(t,e){var A,n,P,r;for(t.j=new JA,n=0;n<e.g.a.length;n++)r=N(e.g,n),ut(r,1),l5(t.j,r,r.f,r.g,!r.K);for(t.d=new JA,A=0;A<e.f.a.length;A++)P=N(e.f,A),ut(P,1),l5(t.d,P,P.f,P.g,!P.K);Qi(t.j),Qi(t.d)}function TK(t,e){var A,n;return _j(t,e,!1)?t.s!=null?(t.B=new fT(t,t.o),$g(t.B,400),t.b=new Ji(new AD),Cj(t)):(n=new NQ(e),$U(n,t.v),A=yX(n,t.o),_s(t,A),A.p=\"SO#1\",A):null}function ub(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));)q9(t.b,e,N(t.b,n)),e=n;q9(t.b,e,P)}function v1(t){var e,A,n;for(A=t.length,n=0;n<A&&(Xt(n,t.length),t.charCodeAt(n)<=32);)++n;for(e=A;e>n&&(Xt(e-1,t.length),t.charCodeAt(e-1)<=32);)--e;return n>0||e<A?(pt(n,e,t.length),t.substr(n,e-n)):t}function Wh(){Wh=B1,YV=B(d(it,1),Dt,2,6,[\"mutagenic\",\"tumorigenic\",\"irritant\",\"reproductive effective\"]),kU=B(d(it,1),Dt,2,6,[\"Mutagenicity\",\"Tumorigenicity\",\"Irritating effects\",\"Reproductive effects\"])}function Qb(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,d_(t,e,A),P=HJ(t,A);while(D!=P);return P}function _h(t,e,A,n,P,r){var i,f,D,Q;if(i=n-A,i<7){gJ(e,A,n,r);return}if(D=A+P,f=n+P,Q=D+(f-D>>1),_h(e,t,D,Q,-P,r),_h(e,t,Q,f,-P,r),r.Rb(t[Q-1],t[Q])<=0){for(;A<n;)e[A++]=t[D++];return}lJ(t,D,Q,f,e,A,n,r)}function Ub(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 ob(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?Q1:w.Math.acos(A)}function $h(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=Kr(e,N(t.c,P)),A==0)return P;if(n==0)break;A<0?P-=n:P+=n}return-1}function ah(t,e,A){var n,P,r,i;for(r=h(F,k,6,t.b.f+1,15,1),V9(r,r.length,-1),P=0;P<A.length;P++)A[P]!=0&&(r[A[P]]=P);for(i=h(F,k,6,t.b.f,15,1),V9(i,i.length,-1),n=0;n<e.length;n++)i[n]=r[e[n]];return i}function Lb(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)*hU,x5((!t.c&&(t.c=kP(E1(t.f))),t.c),ii(e)).e!=0&&++e),t.d=vt(e)),t.d}function hK(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){kf();var e,A,n,P,r,i;if(t==null)return null;for(e=h(q,I,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 rn((r=e,c0(),r))}function L0(t,e,A,n,P){var r,i,f,D,Q,U;for(r=Mt(t.e,e),D=O(t.e,e),Q=1;Q<r;Q++)for(i=Q<D?t.f[Ot(t.e,e,Q)]:0,U=0;U<Q;U++)t.a[e][Q][U]==0&&(f=U<D?t.f[Ot(t.e,e,U)]:0,(i==A&&f==n||i==n&&f==A)&&(t.a[e][Q][U]=P))}function wK(t){var e;for(e=0;0<=(e=t.indexOf(\"\\\\\",e));)Xt(e+1,t.length),t.charCodeAt(e+1)==36?t=(pt(0,e,t.length),t.substr(0,e)+\"$\"+HD(t,++e)):t=(pt(0,e,t.length),t.substr(0,e)+(\"\"+HD(t,++e)));return t}function gK(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 Oi(r,i),f=qr(A.a,P)!=null?qr(A.a,P):(X9(),x2),(f==(X9(),Ti)||f==x2)&&kn(new wT(e,r,i))<n&&mt(D,new Dj(t,e,r,i));return D}function t5(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 dK(t,e){var A,n,P;if(e.j==0){try{A=c1((P=t.b.Ec(),P.getSelectedItem()),o1,It)}catch(r){if(r=t0(r),Zt(r,40)){CD(t.c,\"Illegal text size.\");return}else throw At(r)}n=cl[B0(t.a)],kg(t.e,Gi(t.d),A,n)}Rr(t.c)}function BK(t){var e,A,n,P;for(t.Ab(2*t.S),P=new L1,n=0;n<t.L.r;n++)e=z(t.L,0,n),A=z(t.L,1,n),V3(t.L,n)&&(P.a=Z1(t.R,kt(t.L,e)),P.c=X1(t.R,jt(t.L,e)),P.b=Z1(t.R,kt(t.L,A)),P.d=X1(t.R,jt(t.L,A)),W1(t,-2),t.qb(P))}function Bs(){Bs=B1,Dl=B(d(yt,1),wt,6,15,[F0,Q1,p2,AA]),SV=B(d(F,2),D0,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 vK(t){var e,A,n,P;for(n=-.5299999713897705,Qi(t),ut(t,7),e=0;e<t.f;e++){P=-1;try{P=ny(t,e,2144)}catch(r){if(r=t0(r),!Zt(r,19))throw At(r)}for(A=0;A<Kf.length;A++)if(P0(Ul[A],P)){n+=Kf[A];break}}return n}function sb(t){var e;t.I&&(t.I.a.length=0,t.eb=w.Math.max(t.eb,1),n1(t.k)),z1(t),e=t.V.K,ki(t.V),je(t.V,e),t.cb.q!=0?(t.eb=w.Math.max(t.eb,1),n1(t.k),N1(t,new q1(t,1,!0))):(t.eb=w.Math.max(t.eb,1),n1(t.k))}function yb(t,e){var A,n,P,r,i,f;for(r=h(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 FK(t){kf();var e,A,n,P;if(t.length==0||(t.length&7)!=0)return null;for(n=h(F,k,6,t.length/8|0,15,1),A=0;A<t.length;A++)P=A/8|0,e=(Xt(A,t.length),t.charCodeAt(A)-48),e>16&&(e-=7),n[P]<<=4,n[P]+=e;return n}function _9(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=hA(t[P],e[P],r,n+1,!0,A),n=hA(t[P],e[P],r,n+1,!1,A),r==-1||n==-1)return-1;return hA(t[P],e[P],r,n+1,!0,A)}function mK(t,e,A){var n,P,r,i,f,D,Q;P=vt(Z6*V8(t.V)),r=vt(kt(t.V,z(t.V,0,A))),f=vt(jt(t.V,z(t.V,0,A))),i=vt(kt(t.V,z(t.V,1,A))),D=vt(jt(t.V,z(t.V,1,A))),n=(Q=e.Jc(),Q.getLineWidth()),Ko(e,P),xr(e,r,f,i,D),Ko(e,n)}function lb(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 kK(t){var e;for(t.e=new D3,t.d=new Ng,XI(t,new fs(t,t.i)),e=Xn(t.i);!v7(t.d);)if(cz(bG(t.d),e),p$(t,e),t.e.a.c>=ott){x1(),\"\"+me(new BA(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):fh(E1(t))}function bK(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 RK(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 jK(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=vh(new GA(!1),t.e)),!t.a&&(t.a=vh(new GA(!1),t.b)),Dn(t.g,t.d),Ln(t.g,t.a),Ag(t.g)}function Tb(t){var e;e=YA(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 e9(){e9=B1,ME=new j9(\"UP\",0),RE=new j9(\"DOWN\",1),bE=new j9(\"CEILING\",2),jE=new j9(\"FLOOR\",3),Bl=new j9(\"HALF_UP\",4),pE=new j9(\"HALF_DOWN\",5),se=new j9(\"HALF_EVEN\",6),CE=new j9(\"UNNECESSARY\",7)}function e5(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&&i0(t.p,P))&&(t.C[P]==6&&Df(t,P)==1||t.C[P]==16&&Df(t,P)==2))){if(n||!A)return!0;n=!0}return!1}function pK(t,e){var A,n,P,r,i;for(A=h(yt,wt,6,t.w.length+t.v.length,15,1),n=z9(t.i,e.d).c,r=new Wt(n);r.a<r.c.a.length;)if(P=t1(r),($F(e,P.c,P.b)?e.b:0)!=0)for(i=0;i<A.length;i++)FN(t.D,P,i)&&(A[i]+=P.a);return A}function TA(t,e,A,n,P,r){var i,f,D,Q;for(D=0,f=0;f<t.R.f;f++)gt(V(o0(t.R,t.B[f]),n),0)&&++D;if(D!=0)for(eP(t,e),Jt(t,D,A),i=0;i<t.R.f;i++)Q=V(o0(t.R,t.B[i]),n),G(Q,0)!=0&&(Jt(t,i,A),P!=1&&Jt(t,q0(Q,r),P))}function CK(t,e){var A,n,P,r,i,f,D;for(i=Mt(t.R,e),f=h(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++)A6(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 MK(t){var e,A,n,P,r,i,f;for(i=h(q,Ny,58,8,0,3),f=0;f<=7;f++)for(i[f]=h(q,w8,10,t[f].c,0,2),n=0,r=(A=new N8(new x8(new w9(t[f]).a).b),new g9(A));p9(r.a.a);)P=(e=Br(r.a),e.dd()),i[f][n++]=P;return i}function kQ(t,e){var A,n;for(t.C=_8(t.C,e),t.s=_8(t.s,e),t.w=_8(t.w,e),n=t.J.length,t.J=EG(t.J,e),A=n;A<e;A++)t.J[A]=new Nn;t.A=_8(t.A,e),t.u=_8(t.u,e),t.B=tG(t.B,e),t.v!=null&&(t.v=Yz(t.v,e)),t.t!=null&&(t.t=Kz(t.t,e)),t.M=e}function hb(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=h(yt,wt,6,i,15,1),t.p=h(yt,wt,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]=kA(e,A,t.i[r].a,t.i[r].b)}function HK(t,e){var A,n,P,r,i,f,D;for(n=h(rt,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=Ot(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 Au,t.k!=null)for(t.e=h(eE,A0,104,t.k.length,0,1),e=0;e<t.k.length;e++)t.e[e]=new du(t.k[e]);if(t.a!=null)for(t.b=h(eE,A0,104,t.a.length,0,1),e=0;e<t.a.length;e++)t.b[e]=new du(t.a[e]);t.d=24}function VK(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 EK(t,e){n6();var A,n,P,r;if(Zf[e]!=null){for(n=0;n<Zf[e].length;n++)for(r=Zf[e][n],P=15;P>=0;P--)(r&3)==0&&Jo(t,P,n,-1),r>>=2;for(A=0;A<Zf[e].length;A++)for(r=Zf[e][A],P=15;P>=0;P--)(r&3)==1&&Jo(t,P,A,qn),r>>=2}}function $9(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 s0(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.sd;P.e=e}for(var r;n.length&&(r=n.shift());)A=A[r]=A[r]||!n.length&&e||{};return A}function A5(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=Ot(t.g,t.s[e],n),!r[D]&&!Bu(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 f2(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?bA:eU:(r=w.Math.atan(i/A),A<0&&(r+=Q1)),P=w.Math.sqrt(i*i+A*A)/e,new KP(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 n5(t,e){_r();var A;return A=h(Ee,PA,6,4,15,1),A[0]=s4*((t&iP)>>16),A[1]=s4*((t&PP)>>8),A[2]=s4*(t&255),GZ(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 P5(t,e,A,n,P,r){var i,f,D,Q,U;if(P!=0)for(J1(t)===J1(A)&&(t=t.slice(e,e+P),e=0),D=A,f=e,Q=e+P;f<Q;)i=w.Math.min(f+nP,Q),P=i-f,U=t.slice(f,i),U.splice(0,0,n,r?P:0),Array.prototype.splice.apply(D,U),f=i,n+=P}function SK(t,e,A){var n,P,r,i,f;for(f=_i(new GA(!0),t),P=-1,r=0;r<f.q;r++)if(n=f.t==null||f.t[r]==null?null:rn((i=f.t[r],c0(),i)),n!=null&&n.endsWith(\"*\")){P=r;break}return P>=0?zR(f,P,e,A):h(it,Dt,2,0,6,1)}function D2(t,e){var A;if(e<0)throw At(new p8(\"Negative exponent\"));if(e==0)return N2;if(e==1||Th(t,N2)||Th(t,y9))return t;if(!RQ(t,0)){for(A=1;!RQ(t,A);)++A;return bP(OJ(A*e),D2(IT(t,A),e))}return kY(t,e)}function cb(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 I1}function wb(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 Q8(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 gb(t,e,A){var n,P,r,i,f,D,Q,U,L,s;for(s=e.length,P=e,r=0,i=P.length;r<i;++r)n=P[r],L=t.a[n]&w1,(L==0||L>s)&&(t.a[n]&=qP,t.a[n]|=s);for(D=A,Q=0,U=D.length;Q<U;++Q)f=D[Q],L=t.c[f]&w1,(L==0||L>s)&&(t.c[f]&=qP,t.c[f]|=s)}function ks(t,e){this.a=new Rv(this),this.e=new cm,this.b=new SB,this.c=new EB,this.d=new lv(this),this.f=new _B,this.i=new VB,this.g=new HB,this.j=new jv,this.k=new vg(this,t),this.n=new yv(this),this.o=new Fg(this,e),this.p=new fv}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 qK(t,e,A){var n,P,r,i,f;for(f=h(oPt,h0,159,A,0,1),i=h(F,k,6,A,15,1),r=0;r<A;r++)f[r]=new Pw;for(n=0;n<t.V.q;n++)f[e[n]].a+=kt(t.V,n),f[e[n]].b+=jt(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 Pi(t){var e,A,n;for(n=!1,e=0;e<t.q;e++)t.C[e]==-1&&(n=!0,Zu(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,mf(t)):null}function IK(t,e,A){var n,P,r,i,f,D;for(f=h(rt,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||fi(t,P))&&(n=t.i[A[r]][i],f[n]||(A[D++]=n,f[n]=!0));return D}function xK(t){var e,A,n,P;for(P=!1,A=0;A<t.V.q;A++)if(r0(t.V,A)){P=!0;break}if(n=tk(t,P),n){for(z1(t),e=0;e<t.V.q;e++)(!P||r0(t.V,e))&&(Be(t.V,e,2*n.a-kt(t.V,e)),Ie(t.V,e,2*n.b-jt(t.V,e)));t.eb=w.Math.max(t.eb,1),n1(t.k)}}function db(t,e,A){var n;QT();var P;this.a=new KR(new JA,t,A,this),KS(this.a,new Vw(this)),this.c=e,this.f=A,this.e=new e3,t3(this.e,this.a),this.d=new aw,t3(this.d,this.a),P=(n=this.zc(),n.getClipboardHandler()),xS(this.a,new Iw(P))}function Bb(t){fp.call(this,t),this.d=h(F,k,6,this.w.length,15,1),this.c=h(F,k,6,this.v.length,15,1),this.a=h(GE,k2,165,1,0,1),this.a[0]=OD(this,h(F,k,6,this.w.length,15,1),h(F,k,6,this.v.length,15,1)),this.b=-1}function r5(t){var e,A;for(this.i=Xn(t),yW(this),ut(this.i,7),this.g=h(rt,ft,6,this.i.g,16,1),this.f=h(rt,ft,6,this.i.f,16,1),e=0;e<this.i.f;e++)A=Yu(K(this.i,e))[0],this.f[e]=e0(this.i,e)<A;kK(this),BW(this),QZ(this),VX(this)}function NK(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 vb(t,e){var A,n,P,r,i,f,D;for(D=On(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(fi(t.R,Ot(t.R,n,f)))return!0}return!1}return!1}function yf(t,e,A){var n,P,r;if(n=K(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=p1(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 OK(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&&TG(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 GK(t,e){var A;for(this.o=e,this.k=h(E2,b2,29,t.k.length,0,1),A=0;A<this.k.length;A++)this.k[A]=new vu(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:ju(t.p,\" (copy)\"),this.n=NaN}function Fb(t,e){var A,n,P,r,i;for(r=h(HE,h0,44,8,0,1),i=0;i<=7;i++)for(r[i]=new Ji(new Il),A=0;A<t.f;A++)P=e[A][i],P!=null&&(n=le(r[i],P),n=n==null?h(F,k,6,1,15,1):bn(n,n.length+1),n[n.length-1]=A,ze(r[i],P,n));return r}function JK(t,e){var A,n,P;if(t.t!=-1&&(ae(e,(P=ID(e),P!=0?P:Yy)),yF(t,e,t.t),t.w==19&&(n=C1(t.V,t.t),n!=0)))for(A=0;A<t.V.f;A++)A!=t.t&&C1(t.V,A)==n&&yF(t,e,A);t.u!=-1&&(ae(e,(P=ID(e),P!=0?P:Yy)),mK(t,e,t.u)),t.v&&t.v.Mb(e)}function i5(t,e){var A,n,P,r,i;for(r=dT(e),n=(A=t.a.get(r),A??h(uP,A0,1,0,5,1)),i=0;i<n.length;i++)if(P=n[i],sT(e,P.dd()))return n.length==1?(n.length=0,t.a.delete(r)):n.splice(i,1),--t.c,++t.b.b,P.ed();return null}function zK(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=D1(t,A,P),t.H[r]==2))return!0}return!1}function f5(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]&qP)!=(e[n]&qP))return(t[n]&qP)<(e[n]&qP)?-1:1;return t.length==e.length?0:t.length<e.length?-1:1}function YK(t,e,A,n,P){var r,i,f,D;if(J1(t)===J1(e)&&n==P){MR(t,n,A);return}for(f=0;f<n;f++){for(i=0,r=t[f],D=0;D<P;D++)i=O1(O1(Un(V(r,h1),V(e[D],h1)),V(A[f+D],h1)),V(zt(i),h1)),A[f+D]=zt(i),i=DA(i,32);A[f+P]=zt(i)}}function KK(t){var e,A,n,P,r;for(A=0;A<t.R.f;A++)$e(t.e[A],A),_1(t.e[A],t.c+1,Un(2,t.f[A]));for(r=h(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=Wn(t)}function D5(t,e){var A,n,P;if(t.a==null){for(t.a=h(yt,wt,6,t.o.q,15,1),t.d=h(yt,wt,6,(i8(),ml).length,15,1),P=new Wt(e);P.a<P.c.a.length;)n=t1(P),n.g&&(t.d[n.rd()]+=n.pd(t,t.a));for(t.e=0,A=0;A<t.o.q;A++)t.e+=t.a[A];t.c=-1}}function XK(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.xc(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=LF(t),P<n)return!1;n==P?A=-A:A=~A}return(A&e)!=0}function mb(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,Jt(t,vt((n+f)/P),r),Jt(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,Jt(t,vt((n+Q)/P),r))}function kb(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 bb(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 yO(t.C[e])}function ZK(t){var e,A,n,P,r,i;if(!Ql)return aH;for(r=0,n=0,i=new jD(1),A=new JA,P=0;P<hi.a.a.length;P++)u2(new GA(!1),A,F3(hi,P)),Dn(i,t),Ln(i,A),sn(i,1,i.c)>0&&(r+=eg(hi,P),++n);return e=n==0?-1:r/w.Math.sqrt(n),e+\"\t\"+n+\"\t\"+t.f}function Rb(t,e){var A,n,P,r;for(r=0,n=new fB;r<e;){try{P=K1(t.i)}catch(i){if(i=t0(i),Zt(i,75))break;throw At(i)}if(P==null)break;P.startsWith(PU)&&++r,P.startsWith(\">\")&&(A=aR(P),A!=null&&jG(n,A))}t.d=ff(n.b,h(it,Dt,2,0,6,1))}function u5(t,e){var A,n,P,r,i;return e&=63,A=t.h,n=(A&l8)!=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?aA:0,r=A>>e-22,P=t.m>>e-22|A<<44-e):(i=n?aA:0,r=n?x0:0,P=A>>e-44),S0(P&x0,r&x0,i&aA)}function lf(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?mR(t,i,n,P,r):(f=df(t,e,A),f!=-1?GQ(t,f,n,P,r):(i=W0(t,e,A,0),D=Q1*(n-2)/n,J5(t,i,n,i,P,0,Q1-D,r),t.T=0,!0))}function jb(t){var e,A,n,P,r,i,f,D,Q,U;for(D=0,n=t,r=0,f=n.length;r<f;++r)e=n[r],e==-1&&++D;if(D!=0)for(U=t,t=h(F,k,6,U.length-D,15,1),Q=0,A=U,P=0,i=A.length;P<i;++P)e=A[P],e!=-1&&(t[Q++]=e);return t.sort(Fe(u0.prototype.gd,u0,[])),t}function WK(t){var e,A,n,P;if(A=new P8,t.g.a.length!=0){for(P=new Yr(N(t.g,0)),e=1;e<t.g.a.length;e++)RD(P,N(t.g,e));mt(A.g,P),A.d=-1}if(t.f.a.length!=0){for(n=new Yr(N(t.f,0)),e=1;e<t.f.a.length;e++)RD(n,N(t.f,e));mt(A.f,n),A.d=-1}return A}function _K(t,e){var A,n,P,r,i;for(t.i=h(F,k,6,t.g.f,15,1),n=0;n<t.f.f;n++)C1(t.f,n)!=0&&(t.i[e[C1(t.f,n)]]=R0(t.f,n));if(i=h(F,k,6,t.g.q,15,1),r=n9(t.g,i,!1,!1),r>1)for(P=h(F,k,6,r,15,1),A=0;A<t.g.f;A++)t.i[A]|=P[i[A]]++<<5}function $K(t,e){return!e&&(e={mode:3}),e=Object.assign({},e),\"ensureCoordinates\"in e?(e.ensureCoordinates=!!e.ensureCoordinates,YN(t,e.ensureCoordinates)):(typeof e.mode!==nr&&(e.mode=3),e.mode=Math.trunc(e.mode),bN(t,e.mode))}function Tf(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&&Bf(t,e,P,0,-1,0),t.v!=null&&(t.v[e]=null);return}t.v==null&&(t.v=h(F,D0,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 aK(t,e){var A,n,P,r,i,f,D;for(A=h(yt,wt,6,Mt(t.L,e),15,1),P=0;P<Mt(t.L,e);P++)A[P]=Y0(t.L,e,_(t.L,e,P));for(A.sort(Fe(vi.prototype.gd,vi,[])),r=CF(A,0),i=Ak(A,0,r),n=1;n<A.length;n++)f=CF(A,n),D=Ak(A,n,f),i<D&&(i=D,r=f);return r}function tX(t,e,A){var n,P,r,i,f,D,Q,U,L,s;for(s=new uo(new AD),Q=e,U=0,L=Q.length;U<L;++U)for(D=Q[U],P=A,r=0,i=P.length;r<i;++r)n=P[r],f=h(F,k,6,2,15,1),f[0]=t.J[D],f[1]=t.C[n],ze(s.a,f,(R9(),wU))==null;return fk(s,h(F,D0,7,0,0,2))}function a9(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 eX(t,e,A,n){var P,r,i,f,D,Q;if(P=t.e[e],f=h(F,k,6,P,15,1),Q=R5(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 AX(t){var e,A,n,P;for(n=new Wt(t.g);n.a<n.c.a.length;)if(e=t1(n),e.q!=0)return!1;for(P=new Wt(t.f);P.a<P.c.a.length;)if(e=t1(P),e.q!=0)return!1;for(A=new Wt(t.a);A.a<A.c.a.length;)if(e=t1(A),e.q!=0)return!1;return!0}function nX(t,e){var A,n,P;if(t.f=e,N7(t.e,t.c,t.f),sn(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]>Zi(t.f,P[n])){LA(t.a,A);break}return t.a.a.length}function pb(t,e,A){var n,P,r,i,f;for(this.a=h(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&&P0(V(t.B[n],Pe),0)&&!A[n]&&(this.a[++i]=n,A[n]=!0);++r}}function PX(t,e,A,n,P){var r,i,f,D,Q,U,L,s;return r=an(e.C[A]),i=an(e.C[P]),f=r>i?4:3,D=(Q=an(e.C[A]),U=an(e.C[n]),L=an(e.C[P]),Q>L&&(Q=(s=k1(L),k1(L=Q),s).a),_9(B(d(F,1),k,6,15,[1,0,2]),B(d(F,1),k,6,15,[U,Q,L]),t)),D>=0?j0(t.a[D][f]):0}function Cb(t,e,A){var n,P,r;if(t.o[e]==2||(t.o[e]==1||EP(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=Ho(t.d,n);else if(r!=Ho(t.d,n))return 1}return t.j[e]-1}function rX(t,e){var A,n,P,r,i;if(t.i.K){if(gt(V(o0(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 sv(K(t.i,e))}function iX(t,e,A){var n,P,r,i,f,D,Q,U,L;for(L=h(NA,a0,6,1+t.d[t.d.length-1],14,1),n=0,i=e,D=0,U=i.length;D<U;++D)P=i[D],L[t.d[n]]=O1(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]]=O1(L[t.d[n]],P<<t.b[n]),++n;return L}function Q5(t,e){var A,n,P;this.a=t.D[0][e],this.b=t.D[1][e],n=C1(t,this.a),P=C1(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=(t9(),Tl)}function bs(t,e){var A,n,P;if(A=z(t.V,0,e),d0(t.V,A)!=0)return Ei(t.V,A)||d0(t.V,A)!=1&&d0(t.V,A)!=2?-1:A;if(a1(t.V,A)==1){for(P=0;P<O(t.V,A);P++)if(pA(t.V,A,P)==2&&(n=_(t.V,A,P),a1(t.V,n)==2&&(d0(t.V,n)==1||d0(t.V,n)==2)))return n}return-1}function fX(t){if(t.Vc()){var e=t.c;e.Wc()?t.n=\"[\"+e.k:e.Vc()?t.n=\"[\"+e.Tc():t.n=\"[L\"+e.Tc()+\";\",t.b=e.Sc()+\"[]\",t.j=e.Uc()+\"[]\";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 Mb(t){var e,A,n,P;e=t.M!=0?t.M:t.D!=0?t.D:-1,t.t=(_r(),A=(e&iP)>>16,n=(e&PP)>>8,P=e&255,(A+vt(w.Math.round(jf*(92-A)))<<16)+(n+vt(w.Math.round(jf*(160-n)))<<8)+P+vt(w.Math.round(jf*(255-P)))),t.u=Gs(yy,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!=Ot(t.j,n,i)&&t.e[Ot(t.j,n,i)]){e=!0;break}if(!e){r=!0;break}}r&&(f=!0,n2(t,A))}while(f)}function U5(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!=Ot(t.k,n,i)&&t.g[Ot(t.k,n,i)]){e=!0;break}if(!e){r=!0;break}}r&&(f=!0,vQ(t,A))}while(f)}function Hb(t){var e,A,n,P,r,i;for(t.e=h(yt,wt,6,t.d,15,1),A=new Wt(t.a);A.a<A.c.a.length;)e=t1(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 DX(t){t=t||{};var e=t.countMode||wV;switch(e){case wV: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*el+t.b*1502,f=t.b*el+11,A=w.Math.floor(f*vV),r+=A,f-=A*h4,r%=h4,t.a=r,t.b=f,e<=24?w.Math.floor(t.a*Uc[e]):(P=t.a*(1<<e-24),i=w.Math.floor(t.b*oc[e]),n=P+i,n>=lU&&(n-=L8),n)}function Vb(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 PG(t.C[e])}function uX(t,e,A,n,P,r){var i,f,D,Q,U,L,s;for(I8(t.k[A],n,P,r),s=t.o,L=h(rt,ft,6,s.q,16,1),D=h(F,k,6,s.q,15,1),D[0]=A,L[e]=!0,L[A]=!0,f=0,Q=0;f<=Q;){for(U=0;U<s.e[D[f]];U++)i=s.i[D[f]][U],L[i]||(L[i]=!0,D[++Q]=i,I8(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=h(F,k,6,t.q,15,1),r=h(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(Gr(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(Gr(t,t.k[e][A],e))return t.k[e][A];return-1}function L5(t,e,A){var n,P,r,i,f,D;for(ut(t,1),r=h(F,k,6,t.f,15,1),D=h(rt,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 ri(t,e){var A;return e==null?null:(A=le(t.c,e),A||((e.endsWith(\"<\")||e.endsWith(\"-\"))&&(A=le(t.c,e.endsWith(\"<\")?UA(e,0,e.length-1)+\">\":e.endsWith(\"-\")?UA(e,0,e.length-1)+\"+\":e),A)?(A=new Lj(A),ze(t.c,e,A),A):null))}function QX(t,e,A,n,P,r){var i,f,D,Q,U;for(f=new f1,i=NW(t,e),D=0;D<e.q;D++)for(Q=0;Q<D+1;Q++)U=iN(A,new Oi(D,Q)),(U==(X9(),Ti)||U==x2)&&w.Math.abs(i[D])>yU&&w.Math.abs(i[Q])>yU&&kn(new wT(e,D,Q))<n&&mt(f,new Zv(e,D,Q,U,i[D],i[Q],P,r));return f}function UX(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 oX(t,e,A,n){var P,r,i,f,D,Q,U;for(U=n.a.length,0<U?n.a=UA(n.a,0,0):0>U&&(n.a+=q8(h(l9,a0,6,-U,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=(Y1(),X0)[P],J(n,D?Q.toLowerCase():Q);return n.a}function LX(t){var e,A;for(A=new TD,e=0;e<t.length;e++)switch(Xt(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:nB(A,(Xt(e,t.length),t.charCodeAt(e)))}return A.a}function sX(t,e,A,n,P){var r,i,f,D;if(t.j.length==0||t.n.a.length==0)return null;for(D=h(rt,h0,12,e,0,2),f=h(rt,ft,6,n,16,1),i=0;i<P.length;i++)P[i]!=-1&&C1(t.f,i)==0&&(f[P[i]]=!0);for(r=0;r<A.length;r++)A[r]!=-1&&C1(t.g,r)==0&&(D[A[r]]=f);return D}function s5(t,e,A,n,P,r){var i,f,D,Q,U;for(I8(t.k[e],n,P,r),U=t.o,D=0;D<U.e[e];D++){if(i=U.i[e][D],f=!1,A!=null){for(Q=0;Q<A.length;Q++)if(i==A[Q]){f=!0;break}}f||(U.e[i]==1?I8(t.k[i],n,P,r):fA(U,U.k[e][D])?I8(t.k[i],n/3,P/3,r/3):uX(t,e,i,n,P,r))}}function u2(t,e,A){var n,P,r,i;if(A==null||A.length==0){KT(t,e,null,null);return}n=A.indexOf(k0(32)),n>0&&n<A.length-1?KT(t,e,KA((r=(pt(0,n,A.length),A.substr(0,n)),c0(),r)),KA((i=(Xt(n+1,A.length+1),A.substr(n+1)),i))):KT(t,e,KA((P=A,c0(),P)),null)}function yX(t,e){var A,n,P,r;for(t.f=G(e,0)==0?new aD:new zr(e),n=new mu(t.d),A=null,P=0;P<12&&!(gt(t.n,0)&&(x1(),S1(E1(Date.now()),t.n)));P++){if(sR(t,n)||G(e,0)!=0)return n;A?A.e>n.e&&(r=A,A=n,n=r):(A=n,n=new mu(t.d))}return A}function Q2(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=CW(t,i.b,i.c,i.d,e):i.a==1&&(n=gW(t,i.b,e)),n){for(Z8(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?s8:0)+((t.u[A]&3)==0?C0:0)+(t.C[A]==1?I1:0)+(t.e[A]==1?re:0)+((t.F[e]&64)!=0?0:512)+(t.C[A]!=6?256:0)}function Eb(t,e,A,n){var P,r,i,f,D,Q,U;for(P=h(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]]&&Xs(t,e,P[f])&&++f;if(f==0)return-1;if(f==1)return P[0];for(D=-1,Q=It,r=0;r<f;r++)U=AR(t.i,e,P[r],It,n),U<Q&&(Q=U,D=P[r]);return D}function lX(t,e){var A,n,P;e.j==1?Rr(t.s):e.j==0?(EJ(t),t.v=!0,Rr(t.s)):J1(e.k)===J1(t.d)||J1(e.k)===J1(t.q)?Tb(t):J1(e.k)===J1(t.p)&&(P=B0(t.p),t.t!=P&&(n=t.t+B0(t.o),A=Ah(t,P),n<P?_t(t.o,0):n<P+A?_t(t.o,n-P):_t(t.o,A-1),t.t=P))}function TX(t,e){var A,n,P,r;return A=br(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>=G1(t.R,e))&&(r=A<<24>>24):!aL(t.R,e)&&R3(t.R,e)!=0&&(r=G1(t.R,e),r-=Fu(t.R,e,r)),qO(t,e,r),r}function hX(t){var e,A,n;for(e=0,A=0,n=0;n<t.g.a.length+t.f.a.length;n++)e+=V8(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+=V8(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 WG(t.C[e])}function js(t,e){var A,n,P,r;if(r=t.c.a.length,r==0)return t8(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=Kr(e,N(t.c,P)),A==0)return-1;if(n==0)break;A<0?P-=n:P+=n}return P<r&&Kr(e,N(t.c,P))>0&&++P,t8(t.c,P,e),P}function wX(t){var e,A,n,P,r,i,f,D,Q;if(Q=1,n=wP(t,t.q,t.r,(Y1(),wn)),n!=0)(n<1||n>3)&&(Q=1.5/n);else{for(D=Hp,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 gX(t){var e,A,n,P;for(A=0;A<t.R.f;A++)$e(t.e[A],A),_1(t.e[A],2*t.c+4,M1(t.f[A],t.c+4));for(P=!1,e=0;e<t.R.f;e++)P=P|ey(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=a_(t),!!P);)s2(t),t.P&&Q2(t.P,t.f);return!0}function Sb(t,e,A,n,P){var r,i,f,D,Q,U,L,s,y;for(r=e.a[A],f=e.a[n],D=e.a[P],U=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=k1(Q),k1(Q=i),y).a),s=_9(B(d(F,1),k,6,15,[2,1,3,0]),B(d(F,1),k,6,15,[f,i,Q,U]),t);return s}function dX(t,e,A,n,P){var r,i,f;for(r=0,i=0,f=0;f<n;f++)r=(P9(),O1(Un(V(A[f],h1),V(P,h1)),V(zt(r),h1))),i=O1(l0(V(t[e+f],h1),V(r,h1)),i),t[e+f]=zt(i),i=q0(i,32),r=DA(r,32);return i=O1(l0(V(t[e+n],h1),r),i),t[e+n]=zt(i),zt(q0(i,32))}function BX(t,e,A,n){var P,r,i,f,D,Q;for(i=h(F,k,6,t.f.q,15,1),f=h(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&&qi(t.f,P)&&(i[++D]=P,f[P]=f[i[r]]+1)}++r}return 0}function vX(t,e,A,n){var P,r,i,f,D,Q,U;for(ut(t,1),n==null&&(n=h(rt,ft,6,t.q,16,1)),D=h(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]],U=0;U<r;U++)P=t.i[D[i]][U],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),K(t.i,A)==7&&O(t.i,A)==2&&(n=z(t.i,1-i,e),K(t.i,n)==6)){for(f=0;f<O(t.i,n);f++)if(P=_(t.i,n,f),r=Ot(t.i,n,f),(K(t.i,P)==8||K(t.i,P)==16)&&dt(t.i,r)==2&&O(t.i,P)==1)return!0}return!1}function FX(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?OL(A):e==0&&n!=0&&A==0?OL(n)+22:e!=0&&n==0&&A==0?OL(e)+44:-1}function MQ(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 th(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=QK(t[e[0]][e[1]].b,A)):t[e[0]][e[1]]=new th(e,A,n,P)}function mX(t,e,A){var n,P,r,i,f,D,Q;if(Mt(t.d,A)==1&&(r=_(t.d,A,0),go(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),qi(t.d,f)&&(Q=z8(P,e.k[f]),ob(D,Q)>bA))return!1;return Hr(Hr(n,D),D),!0}return!1}function kX(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!=Ot(t.k,A,i)&&t.g[Ot(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)&&(zn(t.k,A,!1),--t.b)}}function bX(t,e){e.j==0?(nJ(t),t.B=!0,Rr(t.v)):e.j==1?Rr(t.v):J1(e.k)===J1(t.b)?e.a==1?(O8(t.D,\"\"),Go(t.w,n4)):(O8(t.D,Ci(t.A,t.a)),Go(t.w,UV)):J1(e.k)===J1(t.c)?(uA(t.f,!1),_t(t.n,0),_t(t.j,0)):J1(e.k)===J1(t.f)&&uA(t.c,!1)}function RX(t,e,A,n,P){var r,i,f,D,Q,U;for(r=1/(1+w.Math.exp(t-5)),U=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+U/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 qb(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=h(rt,ft,6,t.q,16,1),e=0;e<t.q;e++)f[e]=(t.u[e]&512)!=0;return i=new zA(n,r),ui(t,i,f,!1,null),i}function jX(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=h(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(u0.prototype.gd,u0,[])),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 pX(t,e){var A,n;t.c==e.c?t.i=(t9(),bU):$r(e.c)==1?(t.g=e.c==1?1:e.c==2?386:e.c==4?4:e.c==16?16:8,t.i=(t9(),Ll)):(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=(t9(),bU):(t.f=n-A,t.i=(t9(),sl)))}function CX(t,e,A,n,P,r){var i,f,D,Q,U,L;return Q=D1(e,n,P),i=D8(t,e,A,n),f=D8(t,e,n,P),D=D8(t,e,P,r),L=f,f==0&&dt(e,Q)==1&&(i==1||D==1)&&(L=2),U=IZ(e,A,n,P,r),U==4&&D1(e,A,P)==-1&&D1(e,n,r)==-1?40+L:U==5&&(e.a[A]==1||e.a[n]==1||e.a[P]==1||e.a[r]==1)?50+L:L}function MX(t){var e,A,n;return!t.startsWith(B6)||!t.endsWith(v6)||(A=t.indexOf(k0(34),21),A==-1)?null:(n=(pt(21,A,t.length),t.substr(21,A-21)),e=UA(t,21+n.length+1,t.length-17),A1(n,\"arrow\")?new lj(e):A1(n,\"text\")?new BR(e):null)}function HX(t){var e,A,n,P,r,i,f,D;for(ut(t,1),f=h(Ee,PA,6,t.f,15,1),n=h(F,k,6,t.f,15,1),D=0;D<t.f;D++){for(n[0]=D,P=h(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 VX(t){var e,A,n;for(t.n=h(F,k,6,t.j,15,1),t.k=h(F,k,6,t.j,15,1),t.o=h(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 Ms(){Ms=B1,V4=w.Math.cos(m2),I4=w.Math.sin(m2),S4=w.Math.cos(e4),N4=w.Math.sin(e4),vU=w.Math.cos(AA),FU=w.Math.sin(AA),E4=w.Math.cos(oU),x4=w.Math.sin(oU),q4=w.Math.cos(R6),O4=w.Math.sin(R6),w.Math.cos(xC),w.Math.sin(xC)}function EX(t){var e,A,n,P,r;return isNaN(t)?(Xr(),Ac):t<-9223372036854776e3?(Xr(),cE):t>=9223372036854776e3?(Xr(),tc):(P=!1,t<0&&(P=!0,t=-t),n=0,t>=DP&&(n=vt(t/DP),t-=n*DP),A=0,t>=fP&&(A=vt(t/fP),t-=A*fP),e=vt(t),r=S0(e,A,n),P&&WL(r),r)}function y5(t,e){_r();var A,n,P,r,i;return A=t&qn,i=(t&iP)>>16,P=(t&PP)>>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 SX(t,e){var A,n,P,r,i,f,D,Q,U;for(D=On(t.e),Q=N(D.k,e).length,f=N(D.k,e),U=!1,P=0;P<Q;P++)if(t.f[f[P]]==0){U=!0;break}if(U){for(A=(180*Q-360)/Q*.01745329238474369,i=N(D.j,e),r=0;r<Q;r++)Ih(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 HQ(t,e,A,n){this.b=h(G4,A0,48,2,0,1),this.b[0]=t,this.b[1]=e,this.c=h(yt,wt,6,2,15,1),this.d=h(yt,wt,6,2,15,1),this.c[0]=ru(this.b[0],A),this.d[0]=iu(this.b[0],A),this.c[1]=ru(this.b[1],n),this.d[1]=iu(this.b[1],n),this.a=h(F,k,6,2,15,1),this.a[0]=1,this.a[1]=1}function qX(t){_r();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 jL(5,5,5,e):(P>0&&P<5&&(P=5),n>0&&n<5&&(n=5),A>0&&A<5&&(A=5),new jL(w.Math.min(vt(P/xf),255),w.Math.min(vt(n/xf),255),w.Math.min(vt(A/xf),255),e))}function Hs(t,e){P9();var A,n,P,r,i,f,D,Q,U;return e.d>t.d&&(f=t,t=e,e=f),e.d<63?tZ(t,e):(i=(t.d&-2)<<4,Q=IT(t,i),U=IT(e,i),n=xs(t,I9(Q,i)),P=xs(e,I9(U,i)),D=Hs(Q,U),A=Hs(n,P),r=Hs(xs(Q,n),xs(P,U)),r=T2(T2(r,D),A),r=I9(r,i),D=I9(D,i<<1),T2(T2(D,r),A))}function D8(t,e,A,n){var P,r,i,f,D,Q,U,L,s,y;for(P=e.a[A],r=e.a[n],U=D1(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==U&&e.b[s]==0){L=!1;break}return dt(e,U)==1&&L&&(rL(t.b,P)&&rL(t.b,r)||vB(t.b,P)&&vB(t.b,r))?1:0}function tr(t,e){J9();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 La(E1(t+(t<0?-.5:.5)),A,e,!0)}function IX(t){var e,A,n,P,r,i;for(n=0,r=0;r<t.e.length;r++)for(e=t.e[r],A=Mt(t.j,e),i=0;i<A;i++)_(t.j,e,i)>e&&++n;for(t.f=h(F,k,6,n,15,1),t.g=h(F,k,6,t.j.q,15,1),n=0,P=0;P<t.e.length;P++)for(e=t.e[P],A=Mt(t.j,e),t.g[e]=P,i=0;i<A;i++)_(t.j,e,i)>e&&(t.f[n++]=Ot(t.j,e,i))}function xX(t){for(var e,A,n,P,r,i;;){for(r=h(rt,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),_1(t.e[e],t.c,t.f[e]),_1(t.e[e],8,i);t.U=Wn(t)}}function Ib(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 xb(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]=jt(t.g,P),t.i[3*P+2]=vA(t.g,P);if(i=da(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]),hP(t.g,n,t.i[3*n+2]);for(r=new Wt(t.c);r.a<r.c.a.length;)t1(r),null.vd();return i}function NX(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y;for(r=!1,P=0;P<2;P++)if(A=z(t.g,P,e),U=t.G[A],O(t.H,U)>2){for(s=z(t.g,1-P,e),D=It,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=It,i=0;i<O(t.H,U);i++)L=_(t.H,U,i),L!=y&&Q>L&&(Q=L);t.G[D]!=Q&&(r=!r)}return r}function OX(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y;for(Q=new Wt(e);Q.a<Q.c.a.length;)if(D=t1(Q),D.rd()==1){for(f=D.f,L=t,s=0,y=L.length;s<y;++s){if(U=L[s],U==-1)return!1;for(A=!1,P=f,r=0,i=P.length;r<i;++r)if(n=P[r],U==n){A=!0;break}if(!A)return!1}return!0}return!1}function GX(t,e,A,n,P){var r,i,f,D,Q,U,L;if(A)return aW(e,n[1],n[2]);for(Q=R1(rt,[h0,ft],[12,6],16,[2,e.q],2),i=h(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,U=h(F,k,6,i[L],15,1),D=0,r=0;r<e.q;r++)Q[L][r]&&(U[D++]=r);return t.a=L==1,U}function Nb(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=ix(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],DT(t.j,A)&&t.j.j[A]==f&&(t.j.j[A]=i<<24>>24)}}function hf(t){var e,A,n,P,r;for(r=new V0,P=t.length,n=0;n<P;n++)switch(e=Lk(t,n,t.length),A=e&w1,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 JX(t){var e,A,n,P;for(e=0;e<t.k.f;e++)if(K(t.k,e)==7&&p1(t.k,e)==0&&G1(t.k,e)>3&&a1(t.k,e)>0){for(P=0;P<O(t.k,e);P++)if(A=_(t.k,e,P),n=Ot(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,p1(t.k,e)+1),E0(t.k,A,p1(t.k,A)-1),XA(t.k,e,-1);break}}}function zX(t,e){var A,n,P,r,i,f;for(r=t.indexOf(e+\"=(\")+e.length+2,i=t.indexOf(k0(41),r),P=ne(t,r),A=c1((pt(r,P,t.length),t.substr(r,P-r)),o1,It),f=h(F,k,6,A,15,1),n=0;n<A;n++)r=lA(t,P),P=ne(t,r),(P==-1||P>i)&&(P=i),f[n]=c1((pt(r,P,t.length),t.substr(r,P-r)),o1,It);return f}function Ob(t,e){var A;if(A=0,e<t.g&&(S8(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|=qA:t.K||(A|=fP),A}function Gb(t,e,A,n,P){var r;if(U2(e,A,n,P,3))return 60;if(U2(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(zD(t.a.b,r))return 180;break;case 3:if(e8(t.a.b,r)==3&&HA(t.a.b,r)==0)return e.C[n]==7?107:92;break;case 4:return 109.45}return 120}function YX(t,e,A){var n,P,r,i,f,D,Q,U;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),U=N(e.k,D),r=0;r<6;r++)if(!yf(t,Q[r],!1)||!t.e[U[r]]){f=!1;break}if(f){if(A)for(i=0;i<6;i++)yf(t,Q[i],!0);for(P=0;P<6;P+=2)n2(t,U[P]);n=!0;break}}return n}function _1(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]=M1(t.d[t.c],e),t.d[t.c]=Y(t.d[t.c],A),t.b-=e):(t.d[t.c]=M1(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 Jb(t,e,A,n){var P,r,i,f;if(n==1&&!Ph(t,e)){if(O(t.b,e)==3)return-1;if(O(t.b,e)==3)return P=Jm(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=h(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 KX(t){var e;return e=new uD,mt(e.a,new We(\"The polar surface area prediction is based on an atom-type based\",2)),mt(e.a,new We(\"increment system, published by P. Ertl, B. Rohde, P. Selzer\",2)),mt(e.a,new We(\"in J. Med. Chem. 2000, 43, 3714-3717\",2)),mt(e.a,new We(A4,2)),oJ(t,e),e}function XX(t){var e,A,n,P,r,i,f;for(f=t.T&248,ut(t,1),i=h(F,k,6,t.f,15,1),A=0;A<t.f;A++)i[A]=xt(t,A);for(n=0;n<i.length;n++)if(i[n]!=0)for(r=0;r<i[n];r++)O0(t,n,W9(t,1),1);for(ut(t,1),P=.8*wP(t,t.q,t.r,(Y1(),wn)),e=0;e<i.length;e++)i[e]!=0&&t$(t,e,i[e],P);(f&8)!=0&&(t.T|=248&(8|f))}function Yb(t){var e,A,n,P;for(P=!1,A=0;A<t.q;A++)gt(V(t.B[A],Pe),0)&&(t.C[A]=-1,P=!0);for(P&&Pi(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 ZX(t,e,A,n,P){var r,i,f,D,Q,U,L,s;for(i=h(F,k,6,P,15,1),r=0;r<t.f.q;r++){for(D=0;D<Mt(t.f,r);D++){for(s=A[_(t.f,r,D)],Q=0;Q<D&&!(s<i[Q]);Q++);for(U=D;U>Q;U--)i[U]=i[U-1];i[Q]=s}for(L=Mt(t.f,r),$e(e[r],r),_1(e[r],n,A[r]),_1(e[r],(P-L)*(n+1),0),f=0;f<L;f++)_1(e[r],n+1,i[f])}}function Kb(t,e){var A,n;for(this.b=h(G4,A0,48,2,0,1),this.b[0]=t,this.b[1]=e,this.c=h(yt,wt,6,2,15,1),this.d=h(yt,wt,6,2,15,1),this.a=h(F,k,6,2,15,1),A=0;A<2;A++){for(n=0;n<this.b[A].e.length;n++)this.c[A]+=ru(this.b[A],n),this.d[A]+=iu(this.b[A],n);this.a[A]=this.b[A].e.length}}function WX(t,e){var A,n,P,r;this.a=new y3((n=ky,n)),ut(t,15),r=(x1(),$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=Fz(t),A&&(this.c=wX(t)),cp(this,t,A),J(this.b,D9+r)}function _X(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=Us(t.R,A),n!=-1)return t.o[n]==1||t.o[n]==2;for(P=0;P<O(t.R,A);P++)if(pA(t.R,A,P)==2&&(t.db[_(t.R,A,P)]==1||t.db[_(t.R,A,P)]==2))return!0;return!1}function l5(t,e,A,n,P){var r,i,f,D,Q;for(t.K=t.K|e.K,i=h(F,k,6,e.q,15,1),D=$0(t,1),Q=$0(t,2),r=0;r<A;r++)(P||P0(V(e.B[r],Pe),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]))&&er(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 $X(t,e,A){var n,P;if(e<3||(n=e-1,(t[n]==43||t[n]==45)&&--n,!Zn(t[n]&w1))||(--n,t[n]!=68&&t[n]!=82&&t[n]!=88&&t[n]!=122))return!1;for(A[0]=0;n>0&&dB(t[n-1]);)--n,++A[0];for(P=e+1;dB(t[n]);){if(t.length<=P||t[n]!==t[P])return!1;++n,++P}return!0}function aX(t,e){var A,n,P,r,i,f,D,Q,U;return Q=t.e,Q==0?(ke(),y9):(n=t.d,A=t.a,n==1?(P=Un(V(A[0],h1),V(e,h1)),D=zt(P),i=zt(DA(P,32)),i==0?new mA(Q,D):new Ue(Q,2,B(d(F,1),k,6,15,[D,i]))):(f=n+1,r=h(F,k,6,f,15,1),r[n]=Qs(r,A,n,e),U=new Ue(Q,f,r),Rn(U),U))}function tZ(t,e){var A,n,P,r,i,f,D,Q,U,L,s;return n=t.d,r=e.d,f=n+r,D=t.e!=e.e?-1:1,f==2?(U=Un(V(t.a[0],h1),V(e.a[0],h1)),s=zt(U),L=zt(DA(U,32)),L==0?new mA(D,s):new Ue(D,2,B(d(F,1),k,6,15,[s,L]))):(A=t.a,P=e.a,i=h(F,k,6,f,15,1),yJ(A,n,P,r,i),Q=new Ue(D,f,i),Rn(Q),Q)}function Xb(t,e){var A,n,P,r,i;if(n=e>>5,e&=31,n>=t.d)return t.e<0?(ke(),uc):(ke(),y9);if(r=t.d-n,P=h(F,k,6,r+1,15,1),$k(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 Ue(t.e,r,P),Rn(i),i}function eZ(t,e){var A,n,P,r,i,f,D;for(P=h(rt,ft,6,t.L.q,16,1),n=0;n<t.L.r;n++)V3(t.L,n)&&(P[z(t.L,0,n)]=!0,P[z(t.L,1,n)]=!0);for(i=new nD,A=0;A<t.L.q;A++)r=Qe(t.L,A)?e*.47:P[A]?e*.38:0,r!=0&&(f=Z1(t.R,kt(t.L,A)),D=X1(t.R,jt(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 AZ(t){var e,A,n,P;for(P=new V0,A=0;A<t.g.a.length;A++)A!=0&&(P.a+=\".\"),J(P,Ru(new hD(N(t.g,A),2)));for(P.a+=\">\",n=0;n<t.a.a.length;n++)n!=0&&(P.a+=\".\"),J(P,Ru(new j7(N(t.a,n))));for(P.a+=\">\",e=0;e<t.f.a.length;e++)e!=0&&(P.a+=\".\"),J(P,Ru(new hD(N(t.f,e),2)));return P.a}function Zb(t,e){bk(),this.n=t,this.a=e,this.i=U6(this.a._,D4),IG(this.i),this.g=U6(this.a._,D4),Lz(this.g),this.o=2*v8+DF(xo(this.i)/4|0),this.e=2*v8+DF(Oo(this.i)/4|0),this.c=U6(this.a._,TV),this.j=(de==-1&&(de=globalThis.devicePixelRatio||1),4/de),this.b=5,this.k=-1,this.f=-1,this.a.db=this}function nZ(t,e,A,n,P){if(!_j(t,e,P))return!1;if(t.s==null)t.t=new NQ(e),$U(t.t,t.v),d5(t.t,t.o,-1);else{switch(t.b=new Ji(new AD),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 fT(t,t.o);break;case 1:t.B=new Bb(t)}$g(t.B,n)}return!0}function U2(t,e,A,n,P){var r,i,f,D,Q,U,L,s;if(s=(ut(t,7),t.p),Q=new QD,aP(Q,k1(e)),aP(Q,k1(A)),aP(Q,k1(n)),D1(t,e,A)>=0&&D1(t,A,n)>=0){for(U=0;U<s.j.a.length;U++)if(N(s.k,U).length==P){for(L=new QD,i=N(s.j,U),f=0,D=i.length;f<D;++f)r=i[f],aP(L,k1(r));if(AQ(L,Q))return!0}}return!1}function Wb(t,e,A,n){var P,r,i,f,D,Q,U,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,U=h(F,k,6,t.q,15,1),U[0]=P,D=0,L=0;D<=L;){for(f=n?t.i[U[D]].length:t.e[U[D]],s=0;s<f;s++)i=t.i[U[D]][s],e[i]==-1&&!A[t.k[U[D]][s]]&&(U[++L]=i,e[i]=Q);++D}++Q}return Q}function _b(t){var e,A,n;if(t.K)for(ut(t,7),e=0;e<t.g;e++)n=$r(t.G[e]&127),(e<t.g&&(S8(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 T5(t,e,A,n,P,r,i,f,D){var Q,U,L,s,y;return s=n<BU.length&&BU[n]?w.Math.min(3,r):0,y=P<BU.length&&BU[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),U=D+(y<<3)+(w.Math.min(127,P)<<5),L=A?8:e?8+t:t,(L<<24)+(Q<U?(Q<<12)+U:(U<<12)+Q)}function $b(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 ab(t,e,A,n,P){var r,i,f,D,Q,U,L,s,y;for(y=h(rt,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,U=i.length;D<U;++D)if(r=i[D],e[r]==0){if(s==-1)s=P[r];else if(P[r]!=s)return!1}return!0}function tR(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]=tR(t,e.a[r],A,n),zP(e.a[r])&&(zP(e.a[1-r])?(e.b=!0,e.a[0].b=!1,e.a[1].b=!1):zP(e.a[r].a[r])?e=_u(e,1-r):zP(e.a[r].a[1-r])&&(e=zB(e,1-r)))}else return A;return e}function eR(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 AR(t,e,A,n,P){var r,i,f,D,Q,U;if(e==A)return 0;for(t.$b(1),D=h(F,k,6,t.q,15,1),f=h(F,k,6,t.q,15,1),f[0]=e,D[e]=1,i=0,Q=0;i<=Q&&D[f[i]]<=n;){for(U=0;U<t.e[f[i]];U++){if(r=t.i[f[i]][U],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 PZ(t,e,A){var n,P,r,i,f;return r=XJ(e,A),r==-1?-1:(P=(n=ne(e,r+1),n==-1?e.length:n),i=(pt(A,r,e.length),e.substr(A,r-A)),f=(pt(r+1,P,e.length),e.substr(r+1,P-(r+1))),(f.startsWith(\"(\")&&f.endsWith(\")\")||f.startsWith('\"')&&f.endsWith('\"'))&&(f=UA(f,1,f.length-1)),ze(t,i,f),lA(e,P))}function eA(t,e){var A;return U1(e),A=2-t.e,A==0?t:A>0?A<di.length&&t.a+dl[vt(A)]<54?new a3(t.f*di[vt(A)]):new pD(GN((!t.c&&(t.c=kP(E1(t.f))),t.c),vt(A)),2):t.a<54&&-A<di.length?_Y(t.f,di[vt(-A)],e):f$((!t.c&&(t.c=kP(E1(t.f))),t.c),ii(-A),e)}function h5(t,e){oo();var A,n,P,r,i;for(P=0;P<t.q;P++)for(i=Xn(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?ib(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),He(t,n,e,0)))}function rZ(t,e,A,n,P,r){i8();var i,f,D,Q,U,L,s,y,l,T,c;for(s=t.o,i=h(rt,ft,6,s.q,16,1),Q=h(F,k,6,s.q,15,1),Q[0]=e,i[e]=!0,l=A,T=0,c=l.length;T<c;++T)y=l[T],i[y]=!0;for(wf(t,e,n,P,r),D=0,U=0;D<=U;){for(L=0;L<s.e[Q[D]];L++)f=s.i[Q[D]][L],i[f]||(i[f]=!0,Q[++U]=f,wf(t,f,n,P,r));++D}}function iZ(t){var e,A,n,P;if(t.g.K)for(e=0;e<t.g.r;e++)n=ee(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 nR(t,e,A,n,P){var r,i,f,D,Q,U;if(ut(t,7),!((t.u[e]&hn)==0||A&&!(e<t.f&&i0(t.p,e))))for(D=h(F,k,6,t.f,15,1),D[0]=e,n[e]=!0,f=0,Q=0;f<=Q;){for(U=0;U<t.j[D[f]];U++)i=t.k[D[f]][U],!P[i]&&(t.F[i]&64)!=0&&(!A||i<t.g&&Re(t.p,i))&&(P[i]=!0,r=t.i[D[f]][U],n[r]||(n[r]=!0,D[++Q]=r));++f}}function cf(t,e,A,n,P,r){var i,f,D,Q,U,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=h(Yt,at,6,L,15,1),Q=h(Yt,at,6,L,15,1),U=h(Yt,te,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],U[f]=t.d[i],++f);t.a=D,t.c=Q,t.d=U}function A9(t){var e;switch(e=-1,t.w){case 18:e=9;break;case 2:t.t!=-1&&r0(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&&!Zt(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,Yd(t._,e))}function wf(t,e,A,n,P){var r,i,f,D,Q,U,L,s,y;L=n.a,s=n.b,y=n.c,r=w.Math.cos(P),Q=w.Math.sin(P),U=1-r,i=t.k[e].a-A.a,f=t.k[e].b-A.b,D=t.k[e].c-A.c,eo(t,e,A.a+(U*L*L+r)*i+(U*L*s+Q*y)*f+(U*L*y-Q*s)*D),Ao(t,e,A.b+(U*L*s-Q*y)*i+(U*s*s+r)*f+(U*s*y+Q*L)*D),no(t,e,A.c+(U*L*y+Q*s)*i+(U*y*s-Q*L)*f+(U*y*y+r)*D)}function fZ(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&&zD(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)&&CJ(t,e,f,A,D)&&(P=new mk(t,e,f,A,D),(w.Math.abs(P.d)>LU||w.Math.abs(P.e)>LU)&&Q.a.push(P));return Q}function DZ(t,e,A,n,P){var r,i,f,D,Q,U,L;switch(r=e.a[A],i=e.a[P],Q=D8(t,e,A,n),L=D8(t,e,n,P),D=r<=i?Q:L,U=r<i?L:Q,f=dm(t,e,A,n,P),f){case 1:return D>0||D==U?1:2;case 2:return 3;case 3:return 5;case 4:return 4;case 5:return D>0||D==U?6:7;case 6:return 8;case 7:return D>0||D==U?9:10;case 8:return 11}return 0}function uZ(t,e){var A,n,P;if(t.c)return 3;for(P=new Wt(t.e);P.a<P.c.a.length;)n=t1(P),n.a!=iU&&n.a!=It&&(n.a=e[n.a]);switch(A=!1,t.e.a.length){case 2:if(N(t.e,0).a>=iU||N(t.e,1).a>=iU)return 3;A=_z(t,e);break;case 3:mt(t.e,new Z3(t,It,t.b));case 4:A=bz(t);break;default:return 3}return t.d^A?1:2}function PR(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 QZ(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),K(t.i,e)==1&&ye(t.i,e)>1&&K(t.i,A)>1&&t.b[A]!=0&&(ye(t.i,e)==2?(t.a==null&&(t.a=h(F,k,6,t.i.q,15,1)),++t.a[A]):(t.c==null&&(t.c=h(F,k,6,t.i.q,15,1)),++t.c[A]),Zw(t.i,e));(t.a!=null||t.c!=null)&&Pi(t.i)}function UZ(t){var e,A,n,P,r,i,f,D,Q;if(t.b){for(e=h(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]+=Q0);for(e.sort(Fe(u0.prototype.gd,u0,[])),Q=new f1,D=new f1,A=0;A<e.length;A++)mt(Q,N(t.F,e[A]&w1)),mt(D,N(t.a,e[A]&w1));t.F=Q,t.a=D}}function oZ(t){return t.t!=-1?(wQ(t.V,t.t),t.t=-1,t.eb=w.Math.max(t.eb,1),n1(t.k),N1(t,new q1(t,1,!0)),!0):t.u!=-1?(Zh(t.V,t.u),t.u=-1,t.eb=w.Math.max(t.eb,1),n1(t.k),N1(t,new q1(t,1,!0)),!0):t.v&&!t.v.j?(Z8(t.I,t.v),t.v=null,t.eb=w.Math.max(t.eb,1),n1(t.k),!0):!1}function LZ(t,e){var A,n,P,r;for(P=2+2*w.Math.sqrt(t.d.q),n=0;n<t.d.q;n++)Mt(t.d,n)!=1&&(eo(e,n,P*jn(t.f)-P/2),Ao(e,n,P*jn(t.f)-P/2),no(e,n,P*jn(t.f)-P/2));for(A=0;A<t.d.q;A++)Mt(t.d,A)==1&&(r=_(t.d,A,0),eo(e,A,e.k[r].a+4*jn(t.f)-2),Ao(e,A,e.k[r].b+4*jn(t.f)-2),no(e,A,e.k[r].c+4*jn(t.f)-2));po(e)}function sZ(t,e,A){var n,P,r,i;if(n=A[t.a],P=A[t.b],t.i==(t9(),yl))return O0(e,n,P,t.g),!0;if(r=D1(e,n,P),t.i==Ll)return w0(e,r,t.g),!0;if(t.i==sl){if(i=dt(e,r)+t.f,i>=0&&i<=3)return w0(e,r,(Y1(),i==0?16:i==1?1:i==2?386:i==3?4:i==4?32:64)),!0}else if(t.i==ll)return e.H[r]=512,!0;return!1}function c5(t,e,A,n){var P;switch(P=A/2,n&m1){case m1: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 l8: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 rR(t,e){var A,n;for(this.k=h(o9,or,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=h(o9,or,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 yZ(t,e){var A,n,P,r,i,f,D,Q;for(Q=On(t.H),f=0;f<Q.j.a.length;f++)if(Af(Q,f,e)){for(D=h(F,k,6,2,15,1),P=0;P<2;P++)for(D[P]=It,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 iR(t,e,A,n){var P,r,i,f,D,Q,U,L,s;for(L=A[n],i=A[n+1]-L,s=h(Dtt,A0,175,i,0,1),D=0;D<i;D++)s[D]=new H0,s[D].c=t[D+L],s[D].b=e[D+L],s[D].a=D+L;for(P=new N0,U=n;U>1;U--){for(Q=0;Q<i;Q++)s[Q].c+=t[s[Q].b]<<16,s[Q].b=e[s[Q].b];for(Wi(s,0,s.length,P),r=1,f=0;f<i;f++)t[s[f].a]=r,f!=i-1&&oB(s[f],s[f+1])!=0&&++r}}function lZ(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<C1(t.R,A)&&(r=C1(t.R,A)),Bn(t.R,A)?n=!0:P=!0;if(r==0){t.N=\"\";return}for(i=J8(r),_3(t,!0),Jt(t,i,4),Jt(t,n?1:0,1),Jt(t,P?1:0,1),e=0;e<t.R.f;e++)Jt(t,C1(t.R,t.B[e]),i),n&&P&&Jt(t,Bn(t.R,t.B[e])?1:0,1);t.N=ML(t)}function w5(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?w5(t,e,A,n):!0);return!1}function TZ(t){var e;for(t.S=h(rt,ft,6,t.R.f,16,1),e=0;e<t.R.f;e++)if(K(t.R,e)==7){if(O(t.R,e)==4){t.S[e]=!0;continue}if(O(t.R,e)==3){if(M9(t.R,e)==3){t.S[e]=!0;continue}if(p1(t.R,e)==1){t.S[e]=!0;continue}if(EP(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(P8.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 Yr(N(t.g,n)));for(P=0;P<r;P++)mt(this.f,new Yr(N(t.f,P)));for(A=0;A<e;A++)mt(this.a,new Yr(N(t.a,A)));this.b=new us(t.b),t.e!=null&&(this.e=t.e),this.c=t.c||cQ(t)}function hZ(t,e,A,n,P){var r,i,f,D,Q,U,L,s;for(s=0,L=-1,i=0;i<t.j.f;i++){U=N(e.g,s),ut(U,1);do++L==U.f&&(L=0,U=dr(e,++s));while(U.K&&gt(V(U.B[L],Pe),0));Ze(U,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=w3(e,++Q));while(f.K&&gt(V(f.B[D],Pe),0));Ze(f,D,n[r],n[r]<=P)}}function fR(t){var e,A,n,P,r;if(t.l==0&&t.m==0&&t.h==0)return\"0\";if(t.h==l8&&t.m==0&&t.l==0)return\"-9223372036854775808\";if(t.h>>19!=0)return\"-\"+fR(Wr(t));for(A=t,n=\"\";!(A.l==0&&A.m==0&&A.h==0);){if(P=cL(Of),A=G5(A,P,!0),e=\"\"+E7(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 cZ(t,e){var A,n,P,r;if(!ol)return 0;if(Xf[e].bc(me(new BA(t)))!=-1)return 3;for(r=new jD(1),A=new JA,P=0;P<L9[e].a.length;P++)if(u2(new GA(!1),A,N(L9[e],P)),Dn(r,t),Ln(r,A),sn(r,1,r.c)>0)return 3;for(n=0;n<s9[e].a.length;n++)if(u2(new GA(!1),A,N(s9[e],n)),Dn(r,t),Ln(r,A),sn(r,1,r.c)>0)return 2;return 1}function o2(t,e){var A,n,P,r;return r=w.Math.sin(e),A=w.Math.cos(e),n=1-A,P=R1(yt,[h0,wt],[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 DR(t,e,A){var n;if(O(t.b,e)==2)return 1;if(n=Jm(t,e,A),O(t.b,e)==3)return R0(t.b,n[0])==R0(t.b,n[1])?Ph(t,e)?2:1:Ph(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 wZ(t,e){var A,n,P,r,i;return n=V(e,h1),G(t,0)>=0?(r=Mn(t,n),i=Y9(t,n)):(A=DA(t,1),P=e>>>1,r=Mn(A,P),i=Y9(A,P),i=O1(M1(i,1),V(t,1)),(e&1)!=0&&(G(r,i)<=0?i=l0(i,r):Ug(l0(r,i),n)?(i=O1(i,l0(n,r)),r=l0(r,1)):(i=O1(i,l0(M1(n,1),r)),r=l0(r,2)))),Y(M1(i,32),V(r,h1))}function uR(t,e){var A,n,P;for(A=R1(yt,[h0,wt],[15,6],15,[2,3],2),n=0;n<2;n++)A[n][0]=v9(e,t.f[n])-v9(e,t.f[4]),A[n][1]=F9(e,t.f[n])-F9(e,t.f[4]),A[n][2]=m9(e,t.f[n])-m9(e,t.f[4]);return P=h(yt,wt,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 gZ(t){var e,A,n,P;for(t.L=!0,t.$=h(q,I,6,t.R.f,15,1),t.i=h(q,I,6,t.R.g,15,1),P=i2(t,!0);t.U<t.R.f&&P;){for(e=0;e<t.R.f;e++)$e(t.e[e],e),_1(t.e[e],t.c+4,Y(M1(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=Wn(t),t.U==n)break;t.U=n,P=i2(t,!0)}}function g5(t,e){var A,n,P,r,i,f;for(ut(t,e?15:1),t.q=t.f,t.r=t.g,f=h(rt,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&&Cr(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]&g8)>>>27)-1,(r==-1||r<A)&&XA(t,P,A))));if(e)for(n=0;n<t.f;n++)f[n]&&Ay(t,n);t.T=0}function dZ(t,e){var A,n;return!sv(K(t.k,e))||K(t.k,e)==6&&(!z0(t.k,e)||p1(t.k,e)>0)||(A=_n(t.k,e)==null||X3(t.k,e)[0]==9?0:X3(t.k,e)[0],n=Zi(t.k,e)-A,n<1)?!1:K(t.k,e)==16||K(t.k,e)==34||K(t.k,e)==52?O(t.k,e)==2&&p1(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 n9(t,e,A,n){var P,r,i,f,D,Q,U,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,U=h(F,k,6,t.q,15,1),U[0]=P,D=0,L=0;D<=L;){for(f=n?t.i[U[D]].length:t.e[U[D]],s=0;s<f;s++)i=t.i[U[D]][s],e[i]==-1&&(!A||(t.u[i]&I0)!=0)&&(U[++L]=i,e[i]=Q);++D}++Q}return Q}function QR(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 d5(t,e,A){var n,P,r;for(t.f=G(e,0)==0?new aD:new zr(e),t.a=new f1,new f1,t.c=h(yt,wt,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&&Mt(t.d,z(t.d,0,n))>1&&Mt(t.d,z(t.d,1,n))>1&&(fA(t.d,n)?pr(t.d,n)>4&&++r:++P);t.b=A==-1?1<<1+P+(r/2|0):A,xR(t,w.Math.min(8,t.b))}function UR(t){var e,A,n,P,r;for(P=Z1(t.R,kt(t.L,0)),A=Z1(t.R,kt(t.L,0)),r=X1(t.R,jt(t.L,0)),n=X1(t.R,jt(t.L,0)),e=0;e<t.L.q;e++)P>Z1(t.R,kt(t.L,e))&&(P=Z1(t.R,kt(t.L,e))),A<Z1(t.R,kt(t.L,e))&&(A=Z1(t.R,kt(t.L,e))),r>X1(t.R,jt(t.L,e))&&(r=X1(t.R,jt(t.L,e))),n<X1(t.R,jt(t.L,e))&&(n=X1(t.R,jt(t.L,e)));return new QA(P,r,A-P,n-r)}function oR(t,e,A,n,P){var r,i,f,D,Q,U,L,s,y,l,T;return r=e.a[A],i=e.a[P],D=D8(t.a,e,A,n),Q=D8(t.a,e,n,P),U=(L=e.a[A],s=e.a[n],y=e.a[P],l=DZ(t.a,e,A,n,P),L>y&&(L=(T=k1(y),k1(y=L),T).a),_9(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,U>=0?j0(t.b[U][4+f]):PX(t.a.i,e,A,n,P)}function LR(){var t,e,A,n,P,r;for(r=new nn(new Fi((A=_D(\"/resources/druglikenessNoIndex.txt\"),c0(),A))),this.a=new f1;P=K1(r),P!=null;){if(n=P.indexOf(k0(9)),n==-1)throw At(new V1(\"line without TAB\"));t=(pt(0,n,P.length),P.substr(0,n)),e=LD(Le((Xt(n+1,P.length+1),P.substr(n+1)))),mt(this.a,new Y7(t,e))}}function sR(t,e){var A,n,P,r,i;if(t.d.q<2)return!0;for(i=new Wt(t.j);i.a<i.c.a.length;)r=t1(i),r.g=!0;for(P=0;P<t.k.length;P++)t.k[P]=!1;for(LZ(t,e),A=new rd(e),zs(t,e,A,0),n=0;MJ(e)&&n<3&&!(gt(t.n,0)&&(x1(),S1(E1(Date.now()),t.n)))&&E_(t,e)!=0;n++)zs(t,e,A,2);return zs(t,e,A,3),zs(t,e,A,4),LG(e)}function BZ(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)?(VF(t,e[f],e[n],e[r])^VF(t,e[i],e[r],e[n])&&(P=P==1?2:1),P):WP(t.f,A[n])?(D=KL(On(t.f),A[f],A[n]),Q=KL(On(t.f),A[r],A[n]),D!=-1||Q!=-1?D==Q?2:1:2):0}function vZ(t,e,A,n,P,r){var i,f,D,Q,U,L;for(i=e.a[A],U=B(d(F,1),k,6,15,[e.a[n],e.a[P],e.a[r]]),f=0;f<4;f++){for(L=h(F,k,6,3,15,1),Q=0;Q<3;Q++)L[Q]=t.a.g.a[U[Q]-1][f+1];if(L.sort(Fe(u0.prototype.gd,u0,[])),D=_9(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 FZ(t){iy();var e,A,n,P,r,i,f,D,Q,U;if(t==null||t.length==0)return null;for(i=null,t=ef(t.toLowerCase(),\"-\"),D=b4,Q=0,U=D.length;Q<U;++Q)for(f=D[Q],r=o8(f[0],\";\"),A=r,n=0,P=A.length;n<P;++n){if(e=A[n],A1(ef(e.toLowerCase(),\"-\"),t))return e;if(ef(e.toLowerCase(),\"-\").startsWith(t))if(i==null)i=e;else return\"\"}return i}function B5(t,e){var A,n,P,r,i,f,D,Q;if(i=!1,a1(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=h(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 mZ(t){var e,A,n,P,r;for(r=w.Math.max(t.D.f,t.u.f),t.a=J8(r),t.s=2,A=0;A<t.D.f;A++)t.s=w.Math.max(t.s,O(t.D,A)+xi(t.D,A));for(n=0;n<t.u.f;n++)t.s=w.Math.max(t.s,O(t.u,n)+xi(t.u,n));for(P=w.Math.max(2,(62+t.a+t.s*(t.a+5))/63|0),t.b=h(B4,k2,100,r,0,1),e=0;e<r;e++)t.b[e]=new bo(P);t.F=new EA(t.D,1),t.v=new EA(t.u,1)}function v5(t,e){var A,n,P,r,i;for(i=!1,n=0;n<t.V.q;n++)if(r0(t.V,n)){i=!0;break}if(r=tk(t,i),r){for(z1(t),A=0;A<t.V.q;A++)(!i||r0(t.V,A))&&(e?Be(t.V,A,2*r.a-kt(t.V,A)):Ie(t.V,A,2*r.b-jt(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),n1(t.k)}}function yR(t){var e,A,n,P,r;for(n=Kj(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]=Oy,t.B[n.a]=Oy,n=Kj(t)}if(!n){for(A=0;A<t.I.length;A++)t.I[A]==Oy&&(t.I[A]=0);for(e=0;e<t.B.length;e++)t.B[e]==Oy&&(t.B[e]=0)}return n}function kZ(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l;for(U=e.p,D=e.n,Q=J0(t,U[2]),L=ti(z8(Q,J0(t,U[1]))),f=o2(L,D==U[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,eo(t,n,s*f[0][0]+y*f[0][1]+l*f[0][2]+Q.a),Ao(t,n,s*f[1][0]+y*f[1][1]+l*f[1][2]+Q.b),no(t,n,s*f[2][0]+y*f[2][1]+l*f[2][2]+Q.c))}function u8(t,e,A){var n,P,r;if(A!=null&&(A.length==0?A=null:(n=SA(A,321),(n!=0&&n==t.C[e]||A1(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=h(q,w8,10,t.M,0,2)),t.t[e]==null||!A1(rn((r=t.t[e],c0(),r)),A))return t.t[e]=KA((P=A,c0(),P)),!0;return!1}function bZ(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c;for(ut(e,1),l=t.k,T=0,c=l.length;T<c;++T)y=l[T],Q=A[y.a],U=A[y.b],L=D1(e,Q,U),L==-1?O0(e,Q,U,y.e):y.e==-1?e.H[L]=512:y.e!=-2&&w0(e,L,y.e);if(f=Pi(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),Ay(e,D);return f}function RZ(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(o0(t.V,e),1),0),f=gt(V(o0(t.V,A),1),0),i!=f)return!1}return K(t.V,e)==K(t.V,A)}function lR(){lR=B1,OE=B(d(Yt,1),at,6,15,[0,60,120,180,240,300]),xE=B(d(Yt,1),at,6,15,[17,17,17,17,17,17]),NE=B(d(Yt,2),te,16,0,[B(d(Yt,1),at,6,15,[-20,20]),B(d(Yt,1),at,6,15,[40,80]),B(d(Yt,1),at,6,15,[100,140]),B(d(Yt,1),at,6,15,[160,200]),B(d(Yt,1),at,6,15,[220,260]),B(d(Yt,1),at,6,15,[280,320])])}function F5(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)?mC:J6+dt(t,e)/10:P&&r||P&&_0(t,n)||r&&_0(t,A)?UU:P&&um(t,n,A)||r&&um(t,A,n)?py:P&&qF(t,n,A)||r&&qF(t,A,n)?$6:P&&n<t.f&&i0(t.p,n)||r&&A<t.f&&i0(t.p,A)?1.9500000476837158:J6}function jZ(t){var e,A;for(t=V(t,rr),A=0;A<(X5(),ci).length;A++)if(P0(t,ci[A]))return XV[A];return e=new Fn(\"R\"),gt(V(t,L8),0)&&(e.a+=\"0\"),gt(V(t,ir),0)&&(e.a+=\"3\"),gt(V(t,fr),0)&&(e.a+=\"4\"),gt(V(t,Dr),0)&&(e.a+=\"5\"),gt(V(t,ur),0)&&(e.a+=\"6\"),gt(V(t,Qr),0)&&(e.a+=\"7\"),gt(V(t,pf),0)&&(e.a+=\"8\"),e.a}function pZ(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y;for(L=vj(t.D),f=vj(t.u),i=h(HE,h0,44,8,0,1),y=Fb(t.D,L),Q=Fb(t.u,f),U=0;U<=7;U++)for(i[U]=new Ji(new Il),r=(n=new N8(new x8(new w9(y[U]).a).b),new g9(n));p9(r.a.a);)P=(A=Br(r.a),A.dd()),s=le(y[U],P),D=le(Q[U],P),D!=null&&(e=h(F,D0,7,2,0,2),e[0]=s,e[1]=D,ze(i[U],P,e));return i}function CZ(t,e){var A,n,P,r,i,f,D,Q,U,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(U=t.f[i][f],L=new fm(s,U,A[i][f],t.D),D=!1,Q=null,n=z9(t.i,e.d).c,r=new Wt(n);r.a<r.c.a.length;){if(P=t1(r),Qz(P,L)){D=!0;break}Uz(P,L)&&(!Q&&(Q=new f1),Q.a.push(P))}D||(Q&&ts(n,Q),n.a.push(L))}}}function m5(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=Tm(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 TR(t,e,A){var n,P,r,i,f;if(t.b){for(t.C=h(rt,ft,6,e.length,16,1),P=new Wt(t.b);P.a<P.c.a.length;)if(n=t1(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=h(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 MZ(t){var e,A,n,P,r,i;if(t.L.K){for(i=t.W,W1(t,-7),e=0;e<t.L.f;e++)Qe(t.L,e)&&t.ub(Z1(t.R,kt(t.L,e))-i,X1(t.R,jt(t.L,e))-i,2*i);for(t.Ab(2*t.W),r=new L1,P=0;P<t.L.r;P++)A=z(t.L,0,P),n=z(t.L,1,P),gt(V(V(o0(t.L,A),o0(t.L,n)),Pe),0)&&(r.a=Z1(t.R,kt(t.L,A)),r.c=X1(t.R,jt(t.L,A)),r.b=Z1(t.R,kt(t.L,n)),r.d=X1(t.R,jt(t.L,n)),t.qb(r))}}function HZ(t,e){var A,n,P,r,i,f,D,Q,U;for(U=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 Lm(t,e,A,n,P,r),(w.Math.abs(Q.e)>.001||w.Math.abs(Q.f)>.001||w.Math.abs(Q.g)>.001)&&U.a.push(Q));return U}function hR(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&&i0(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&&i0(t.p,P))&&tA(t,P)){f=!1;break}}}f&&!$b(t,n)&&++Q}return Q}function hA(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 cR(t,e,A){var n,P,r,i;if(O(t.c,e)==2)return 1;if(n=zJ(t,e,A),O(t.c,e)==3)return R0(t.c,n[0])==R0(t.c,n[1])?a1(t.c,e)==1&&K(t.c,e)<10||vn(t.c,e)||EP(t.c,e,!0)?2:1:a1(t.c,e)==1&&K(t.c,e)<10||vn(t.c,e)||EP(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 k5(t,e,A,n){var P,r,i,f,D;for(r=new MP(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=r8(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 b5(t,e,A,n){var P,r,i,f;if(f=new L1,!(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=ok(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),b5(t,f,A,n);return}if(ZD(t,f.b,f.d,P)){qs(t,f,1,P),b5(t,f,A,n);return}}sW(t,f,A,n)}}function VZ(t){var e,A,n,P,r,i,f,D,Q;for(D=h(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]>lT(t.j,e))){w0(t.j,A,16);continue}}}function ut(t,e){var A,n,P,r;if(qj(t,e),(e&~t.T)!=0){for((t.T&15)!=0&&t.q>1&&Ds(t.J[0],t.J[1])&&Ar(new Y8(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 EA(t,r),Z5(t.d),eN(t.d),vJ(t.d),D_(t)&&(t.d=new EA(t,r)),t.T|=24|P}}function EZ(t,e,A){var n,P,r,i,f,D,Q;for(U3(t.q),t.p[0]=e,t.q[e]=!0,r=0,i=0;r<=i;){for(f=0;f<t.j[t.p[r]].length;f++){if(P=t.j[t.p[r]][f],P==A){for(n=1,D=r;D!=0;)++n,D=t.r[D];for(Q=h(F,k,6,n,15,1),Q[0]=t.k[t.p[r]][f],n=1;r!=0;)Q[n++]=t.o[r],r=t.r[r];return Q}t.q[P]||(t.q[P]=!0,++i,t.p[i]=P,t.o[i]=t.k[t.p[r]][f],t.r[i]=r)}++r}return null}function SZ(t,e,A,n){var P,r,i,f,D,Q,U,L,s,y,l,T;for(L=e.b-e.a,l=e.d-e.c,D=w.Math.sqrt(L*L+l*l),Q=2*zt(E1(w.Math.round(D/(4*t.Y)))),s=L/(Q-1),T=l/(Q-1),vr(t.L,D1(t.L,A,n))?(P=-3,r=-3):(P=t.p[A],r=t.p[n]),U=e.a-t.Y/2,y=e.c-t.Y/2,W1(t,P),f=0;f<(Q/2|0);f++)t.ub(U,y,t.Y),U+=s,y+=T;for(W1(t,r),i=0;i<(Q/2|0);i++)t.ub(U,y,t.Y),U+=s,y+=T;W1(t,t.Q)}function qZ(t){for((t.Q&1)!=0&&(t.Q&2)==0&&(t.g=bn(t.f,t.R.f)),(t.Q&I1)==0&&(t.W=h(rt,ft,6,t.R.f,16,1),t.V=h(rt,ft,6,t.R.g,16,1),t.U<t.R.f&&(gX(t),(t.Q&I1)==0&&(s2(t),t.P&&Q2(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;)KK(t),(t.Q&I1)==0&&(s2(t),t.P&&Q2(t.P,t.f));(t.Q&I1)==0&&(s2(t),Ra(t),$_(t))}function IZ(t,e,A,n,P){var r,i,f,D,Q,U,L,s;if(D1(t,e,A)==-1||D1(t,A,n)==-1||D1(t,n,P)==-1)return 0;if(D1(t,P,e)>=0)return 4;for(L=(ut(t,7),t.p),s=new QD,aP(s,k1(e)),aP(s,k1(A)),aP(s,k1(n)),aP(s,k1(P)),Q=0;Q<L.j.a.length;Q++)if(N(L.k,Q).length==5){for(U=new QD,i=N(L.j,Q),f=0,D=i.length;f<D;++f)r=i[f],aP(U,k1(r));if(AQ(U,s))return 5}return 0}function xZ(t,e,A){var n,P,r,i,f,D,Q,U,L;for(U=h(rt,ft,6,A.q,16,1),U[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]&&(U[n]||(t[++f]=n,U[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],!U[r]&&A.n[t[D]][L]!=0&&(t[++f]=r,U[r]=!0);return f+1}function NZ(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=h(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 OZ(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;x1()}return 0}function GZ(t,e){var A,n,P,r,i,f,D,Q;if(i=xA[0]*t[0]+xA[1]*t[1]+xA[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+=xA[P]:(Q+=(t[P]-1)*xA[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)*xA[r],t[r]=1));if(f!=0)for(n=0;n<3;n++)t[n]<1&&(t[n]+=f/xA[n],t[n]>1&&(t[n]=1))}}function Es(t,e,A,n){var P,r,i,f,D,Q,U,L;for(P=0;P<t.f;P++)if(t.C[P]==A&&t.s[P]==0&&xt(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,U=0;U<t.j[r];U++){if(i=t.i[r][U],t.s[i]<0){D=!0;break}i!=P&&t.C[i]==8&&t.n[r][U]==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 JZ(t,e,A,n,P){var r,i,f,D;if((e.u[A]&3)!=0&&(e.u[A]&4)==0&&P0(V(e.B[A],c8),0)&&(f=w.Math.abs(e.w[A]),f!=0)){for(i=0;i<t.c.g.a.length;i++)for(r=dr(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]&m1)>>18!=(e.u[A]&m1)>>18)}return!1}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 L1,vr(t.L,D1(t.L,A,n))?(r=-3,i=-3):(r=t.p[A],i=t.p[n]),W1(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),W1(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),W1(t,t.Q)}function R5(t,e,A,n,P){var r,i,f,D,Q,U,L,s;if((t.p&&e<t.f?iA(t.p,e):0)>24||(r=t.e[e],P==null&&(P=h(F,k,6,r,15,1)),!UW(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 U=w.Math.abs(P[0]-P[1])==2?1:0,f=P[U]-P[U+1],s=w.Math.abs(f)==3^P[U]<P[U+1],L=r==3||(P[3]&1)==1,s^L^D==129?1:2}function L2(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),em(t),t.U.a.length=0,t.$.a.length=0,t.B=e,Pk(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*V8(t.L),Cm(t,P),c5(t,A,P,n),!A||nN(A,t.v)?i:(f=new Ws(t.v,A,P,n),Eu(f,t.R),Nu(f,t.v),pd(f,t.w),i?(Eu(f,i),i):f)}function zZ(t,e,A,n){var P,r,i,f,D,Q,U,L,s,y;for(P=h(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=r8(e,P[0]),U=r8(A,P[0]),tv(A,e.a[Q]-A.a[U],e.b[Q]-A.b[U]),L=dj(t,e,P[0]),s=dj(t,A,P[0]),y=0,IL(t,e,P[0])==1&&IL(t,A,P[0])==1&&(y=AA),sf(A,A.a[U],A.b[U],L-s+y+Q1),k5(t,e,A,1)):ca(t,e,A,P,n),dF(t,e,A,D)}function YZ(t,e){var A,n,P,r,i,f;if((t.o[e]==1||t.o[e]==2)&&!WP(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=h(F,k,6,2,15,1),P=0,f=0;f<O(t.R,A);f++)Ot(t.R,A,f)!=e&&(n[P++]=_(t.R,A,f));t.f[n[0]]>t.f[n[1]]^A6(t,A,n[0],n[1])&&(i=!i)}}catch(D){if(D=t0(D),Zt(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 KZ(t){var e,A,n;for(this.c=new f1,n=0,e=0;e<t.f;e++)n+=xt(t,e);if(n>0)throw At(new C8(\"molecule needs explicit hydrogen atoms for force field calculations\"));for(this.g=t,this.d=3*t.q,this.e=h(yt,wt,6,this.d,15,1),this.i=h(yt,wt,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 wR(t){var e,A,n,P,r,i,f,D,Q,U;for(this.a=new LP,e=0;e<t.q;e++)for(Sr(this.a,new Oi(e,e),(X9(),J4)),A=0;A<t.e[e];A++)for(D=t.i[e][A],f=new Oi(e,D),Sr(this.a,f,Y4),n=0;n<t.e[D];n++)for(Q=t.i[D][n],i=new Oi(e,Q),(!Mu(this.a,i)||J1(qr(this.a,i))===J1(Ti))&&Sr(this.a,i,z4),P=0;P<t.e[Q];P++)U=t.i[Q][P],r=new Oi(e,U),Mu(this.a,r)||Sr(this.a,r,Ti)}function XZ(t){A1(t,U4)&&!PE?(ji(),K3(U4,new ks(\"/resources/forcefield/mmff94/outofplane.csv\",\"/resources/forcefield/mmff94/torsion.csv\")),PE=!0):A1(t,o4)&&!rE?(ji(),K3(o4,new ks(hV,\"/resources/forcefield/mmff94/94s/torsion.csv\")),rE=!0):A1(t,Sy)&&!iE&&(ji(),K3(Sy,new ks(hV,\"/resources/forcefield/mmff94/94s/torsionPlus.csv\")),iE=!0)}function ZZ(t,e){return!e&&(e={keepAbsoluteCoordinates:!1,mode:3}),e=Object.assign({},e),e.keepAbsoluteCoordinates=!!e.keepAbsoluteCoordinates,\"sortByIDCode\"in e?(e.sortByIDCode=!!e.sortByIDCode,MI(t,e.keepAbsoluteCoordinates,e.sortByIDCode)):(typeof e.mode!==nr&&(e.mode=3),e.mode=Math.trunc(e.mode),DI(t,e.keepAbsoluteCoordinates,e.mode))}function gf(t,e,A,n){var P,r,i,f;for(this.e=t,this.g=A,this.a=n,i=-1,f=0;f<Mt(this.e,this.a);f++){if(P=_(this.e,this.a,f),r=Ot(this.e,this.a,f),P==this.g){l1(this.e,r)==386&&(this.j=-1);continue}Gr(this.e,r,this.a)&&(this.i&&(t.u[n]|=Q0),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 gR(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++)C1(t.u,A)!=0&&!Bn(t.u,A)&&(r=w.Math.max(r,C1(t.u,A)));if(r!=0){for(P=h(F,k,6,r+1,15,1),e=0;e<t.u.f;e++)C1(t.u,e)!=0&&!Bn(t.u,e)&&(P[C1(t.u,e)]=e+1);for(f=0;f<t.D.f;f++)D=C1(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 gD(f,i)))}return t.t.a.length}function ke(){ke=B1;var t;for(N2=new mA(1,1),EU=new mA(1,10),new mA(1,2),y9=new mA(0,0),uc=new mA(-1,1),FE=B(d(Bi,1),Ye,23,0,[y9,N2,new mA(1,2),new mA(1,3),new mA(1,4),new mA(1,5),new mA(1,6),new mA(1,7),new mA(1,8),new mA(1,9),EU]),SU=h(Bi,Ye,23,32,0,1),t=0;t<SU.length;t++)SU[t]=hu(M1(1,t),0)?we(M1(1,t)):FP(we(p0(M1(1,t))))}function dR(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T;if(r=e.e,r==0)throw At(new p8(gV));return P=e.d,n=e.a,P==1?pW(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(Bi,1),Ye,23,0,[y9,t]):(T=t.e,f=l-P+1,U=P,D=T==r?1:-1,i=h(F,k,6,f,15,1),Q=Sj(i,f,y,l,n,P),L=new Ue(D,f,i),s=new Ue(T,U,Q),Rn(L),Rn(s),B(d(Bi,1),Ye,23,0,[L,s])))}function j5(t,e,A,n){var P,r,i,f,D,Q,U,L,s,y,l,T,c,g;if(Uj(t,e,A,n),Qd(t.p))return null;if(t.k!=null)for(s=t.k,y=0,l=s.length;y<l;++y)L=s[y],I3(t.p,L);if(t.g)for(c=new Wt(t.g);c.a<c.c.a.length;)T=t1(c),wI(t.p,T);if(t.e!=null)for(i=t.e,D=0,U=i.length;D<U;++D)P=i[D],fo(P.R);if(t.b!=null)for(r=t.b,f=0,Q=r.length;f<Q;++f)P=r[f],fo(P.R);return g=t.p,t.p=new Au,g}function Q8(t,e,A){var n,P,r,i,f;return r=!1,i=t.H[e],A==511?r=F_(t,e):EO(t,e,A)&&(A==257||A==129?(n=PR(t,e,t.D[0][e]),P=PR(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 WZ(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=h(F,k,6,16,15,1),D=(pt(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=(pt(0,A,D.length),D.substr(0,A)),D=(Xt(A+1,D.length+1),D.substr(A+1))),e[P++]=SA(r,1);f=h(F,k,6,P,15,1),sA(e,0,f,0,P)}return f}function BR(t){var e,A,n,P;for(Uo.call(this),e=0;e!=-1&&(A=t.indexOf('=\"',e),A!=-1);)n=(pt(e+1,A,t.length),t.substr(e+1,A-(e+1))),e=t.indexOf('\"',A+2),P=e==-1?(Xt(A+1,t.length+1),t.substr(A+1)):(pt(A+1,e,t.length),t.substr(A+1,e-(A+1))),A1(n,\"text\")?this.e=RW(P):A1(n,\"x\")?RO(this,P):A1(n,\"y\")?jO(this,P):A1(n,\"size\")?nO(this,P):A1(n,\"style\")&&pO(this,P)}function _Z(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c;for(y=e.length,D=y,Xt(0,e.length),e.charCodeAt(0)==45?(L=-1,s=1,--y):(L=1,s=0),r=(Is(),kE)[10],P=y/r|0,c=y%r,c!=0&&++P,f=h(F,k,6,P,15,1),A=mE[8],i=0,l=s+(c==0?r:c),T=s;T<D;T=l,l=T+r)n=c1((pt(T,l,e.length),e.substr(T,l-T)),o1,It),Q=(P9(),Qs(f,f,i,A)),Q+=xJ(f,i,n),f[i++]=Q;U=i,t.e=L,t.d=U,t.a=f,Rn(t)}function vR(t){var e;switch(ut(t,31),e=t.I&w1,t.I&qP){case Q0:return null;case I0:return e==1?\"meso\":\"\"+e+\" meso diastereomers\";case 0:return\"unknown chirality\";case ly:return\"both enantiomers\";case T8:return\"this enantiomer\";case 327680:return\"this or other enantiomer\";case yi:return\"two epimers\";default:return e==1?\"one stereo isomer\":\"\"+e+\" stereo isomers\"}}function FR(t){var e;for(t.T=0,t.C=h(F,k,6,t.M,15,1),t.s=h(F,k,6,t.M,15,1),t.w=h(F,k,6,t.M,15,1),t.J=h(E2,b2,29,t.M,0,1),e=0;e<t.M;e++)t.J[e]=new Nn;t.A=h(F,k,6,t.M,15,1),t.u=h(F,k,6,t.M,15,1),t.B=h(NA,a0,6,t.M,14,1),t.v=null,t.t=null,t.D=R1(F,[D0,k],[7,6],15,[2,t.N],2),t.H=h(F,k,6,t.N,15,1),t.F=h(F,k,6,t.N,15,1),t.G=h(F,k,6,t.N,15,1)}function $Z(t,e,A,n,P,r,i){var f,D,Q,U,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(U=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)&&(U=!U);break}return L==U==(d0(t.j,A)==d0(t.d,r))}return!0}function p5(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(r0(t.V,n))if(f){if(r!=bQ(A,kt(t.V,n),jt(t.V,n))){P=!0;break}}else{if(f=!0,!i)break;A=N(t.I,0),r=bQ(A,kt(t.V,n),jt(t.V,n))}return e?i?P?(vm(t,!0),!0):f?(xv(t,!0),!1):(vm(t,!1),!0):(xv(t,f),!1):i&&(P||!f)}function aZ(t,e,A,n){var P,r,i,f,D,Q,U,L,s,y,l,T,c;for(f=0,s=0;s<A.c.length;s++)for(P=A.e[A.c[s]],c=GD(K(t.k,P)),y=0;y<n.c.length;y++)r=n.e[n.c[y]],l=c+GD(K(t.k,r)),Q=w.Math.abs(e.k[P].a-e.k[r].a),Q<l&&(U=w.Math.abs(e.k[P].b-e.k[r].b),U<l&&(L=w.Math.abs(e.k[P].c-e.k[r].c),L<l&&(D=w.Math.sqrt(Q*Q+U*U+L*L),D<l&&(T=(l-D)/l,i=T*T,f+=i))));return 20*f}function tW(t){var e,A,n,P,r;for(t.a=t.d.f,t.b=h(rt,ft,6,t.k.f,16,1),t.c=h(rt,ft,6,t.k.g,16,1),t.g=new f1,e=pk(t);e!=-1;){if(A=t.g.a.length,Iv(t,new pT(e,-1,-1,!1,!1),A),O(t.k,e)!=0)for(Bk(t,A,!1);A<t.g.a.length-1;){for(;eG(t,N(t.g,A).a);)Bk(t,A,!0);++A}e=pk(t)}for(t.q=h(F,k,6,t.k.f,15,1),n=0,r=new Wt(t.g);r.a<r.c.a.length;)P=t1(r),t.q[P.a]=n++}function mR(t,e,A,n,P){var r,i,f,D,Q,U;if(n&&G1(t,e)>1||!n&&G1(t,e)>2)return!1;for(i=0,r=h(yt,wt,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:(U=i==1?r[0]+Q1:w.Math.abs(r[0]-r[1])>Q1?(r[0]+r[1])/2:(r[0]+r[1])/2+Q1,f=Q1*(A-2)/A,J5(t,e,A,e,n,U-f/2,Q1-f,P),t.T=0,!0)}function C5(t){var e,A,n,P,r;if(P=new R7(new K2),r=new W7,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*hh(t.k[n],e)),ls(r,XT(P)),P.b.a.length<r.b.a.length&&ls(P,XT(r));return A=P.b.a.length+r.b.a.length,A==0?rW(t):t.p.c*(A%2==0?(LD(P.b.a.length==0?null:N(P.b,0))+LD(r.b.a.length==0?null:N(r.b,0)))/2:LD(P.b.a.length==0?null:N(P.b,0)))}function kR(t,e,A,n,P){var r,i,f,D,Q,U,L,s,y,l;for(L=!1,s=0,Q=0;Q<A;Q++)t.H[Q]!=16&&(t.G[Q]&y8)==0&&++s;if(s==0){for(U=0;U<A;U++)(t.G[U]&y8)==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=nh(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]&y8)==0&&(f+=nh(P[t.D[1][D]],P[t.D[0][D]]));return f/s}function bR(t,e){var A,n,P,r,i,f,D,Q;for(t.p=new Qo(t,e),n=h(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]|=I1:n[A]>3&&(t.u[A]|=hn);for(Q=0;Q<t.p.j.a.length;Q++)for(i=h3(t.p,Q),D=V7(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 RR(t,e,A){var n,P,r,i,f,D,Q,U,L,s;for(U=-1,L=-1,s=-1,r=h(rt,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,U=P)}return U==-1&&(a1(t.c,e)==1&&K(t.c,e)<10||vn(t.c,e)||EP(t.c,e,!0))?s:U}function eW(t){var e,A,n,P,r,i,f,D,Q,U,L;for(n=J8(t.f.f),D=2,A=0;A<t.f.f;A++)D=w.Math.max(D,Mt(t.f,A));for(r=(62+2*n+D*(n+1))/63|0,P=h(B4,k2,100,t.f.q,0,1),e=0;e<t.f.q;e++)P[e]=new bo(r),$e(P[e],e);for(L=h(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=Hm(P,L);do U=Q,ZX(t,P,L,n,D),Q=Hm(P,L);while(U!=Q);return L}function jR(t,e,A,n){mQ();var P,r,i,f,D,Q;if(i=0,Q=0,P=0,n==null&&(n=h(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 AW(t,e,A,n,P,r){var i,f,D,Q,U,L,s;for(Q=EF(e)-EF(t),i=Xk(e,Q),D=S0(0,0,0);Q>=0&&(f=xz(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)));)U=i.m,L=i.h,s=i.l,i.h=L>>>1,i.m=U>>>1|(L&1)<<21,i.l=s>>>1|(U&1)<<21,--Q;return A&&WL(D),r&&(n?(In=Wr(t),P&&(In=kF(In,(Xr(),ec)))):In=S0(t.l,t.m,t.h)),D}function c1(t,e,A){var n,P,r,i,f;if(t==null)throw At(new YP(Pr));for(r=t.length,i=r>0&&(Xt(0,t.length),t.charCodeAt(0)==45||(Xt(0,t.length),t.charCodeAt(0)==43))?1:0,n=i;n<r;n++)if(KJ((Xt(n,t.length),t.charCodeAt(n)))==-1)throw At(new YP(g2+t+'\"'));if(f=parseInt(t,10),P=f<e,isNaN(f))throw At(new YP(g2+t+'\"'));if(P||f>A)throw At(new YP(g2+t+'\"'));return f}function nW(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)&&xt(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 pR(t,e){var A,n,P,r,i,f,D,Q;for(P=0;P<t.g.g;P++)if((ee(t.g,P)&h8)!=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=D1(t.H,i,f),Q=qe(t.H,D),Q==0&&(WP(t.H,D)&&(Q=yZ(t,D)),Q==0)||r==3||Q==3)continue;if(NX(t,P)==(r==Q))return!1}}return!0}function PW(t,e,A){var n,P,r,i,f,D;f=E1(di[A]),i=l0(E1(t.e),A),D=E1(t.f),r=Mn(D,f),P=Y9(D,f),G(P,0)!=0&&(n=Hi(M1(G(P,0)<0?p0(P):P,1),f)?-1:S1(M1(G(P,0)<0?p0(P):P,1),f)?1:0,r=O1(r,EQ(zt(r)&1,(G(P,0)==0?0:G(P,0)<0?-1:1)*(5+n),e.b)),w.Math.log10(Jr(G(r,0)<0?p0(r):r))>=e.a&&(r=Mn(r,10),i=l0(i,1))),t.e=ym(Jr(i)),t.d=e.a,t.f=Jr(r),t.a=fh(r),t.c=null}function CR(t,e,A,n){var P,r,i,f,D,Q,U;for(Q=0,r=V(n,h1),f=A-1;f>=0;f--)U=Y(M1(Q,32),V(e[f],h1)),G(U,0)>=0?(D=Mn(U,r),Q=Y9(U,r)):(P=DA(U,1),i=n>>>1,D=Mn(P,i),Q=Y9(P,i),Q=O1(M1(Q,1),V(U,1)),(n&1)!=0&&(G(D,Q)<=0?Q=l0(Q,D):Ug(l0(D,Q),r)?(Q=O1(Q,l0(r,D)),D=l0(D,1)):(Q=O1(Q,l0(M1(r,1),D)),D=l0(D,2)))),t[f]=zt(V(D,h1));return zt(Q)}function rW(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l,T;if(L=Ve,s=k6,l=Ve,T=k6,P=0,t.k!=null)for(f=0;f<t.k.length;f++)for(A=0;A<t.k[f].q;A++)U=Z1(t.e[f].R,Q7(t.k[f],A).a),y=X1(t.e[f].R,Q7(t.k[f],A).b),L=w.Math.min(L,U),s=w.Math.max(s,U),l=w.Math.min(l,y),T=w.Math.max(T,y),++P;return P<=1?t.d:(r=s-L,i=T-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 iW(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T;for(Q=t.i.M,U=0,r=0;r<A;r++)Q>e[r]&&(Q=e[r],U=r);for(T=h(F,k,6,A,15,1),D=U>0?U-1:A-1,L=U<A-1?U+1:0,i=e[D]<e[L],P=0;P<A;P++)T[P]=e[U],i?--U<0&&(U=A-1):++U==A&&(U=0);for(l=new Wt(t.j);l.a<l.c.a.length;)if(y=t1(l),y.length==A){for(n=!0,f=0;f<A;f++)if(y[f]!=T[f]){n=!1;break}if(n)return}mt(t.j,T),s=Gk(t,T),mt(t.k,s),gb(t,T,s)}function fW(t,e,A,n,P,r,i){return!(K(t.j,A)==8&&a1(t.j,A)==0&&tQ(t.j,e)&&tQ(t.d,n)&&r!=I1||K(t.j,A)==8&&O(t.j,A)==2&&tQ(t.j,VO(t.j,e,A))&&r<768||K(t.j,e)==8&&(tQ(t.j,A)||tQ(t.d,P))&&r<512||!i&&(K(t.j,A)!=6||!$O(t.j,e))||K(t.j,A)==8&&K(t.j,e)!=6&&r!=I1||K(t.j,e)==5&&K(t.j,A)==6&&r<768)}function M5(t,e,A){var n,P;return P=rp(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 P9(){P9=B1;var t,e;for(yr=h(Bi,Ye,23,32,0,1),Wf=h(Bi,Ye,23,32,0,1),Qc=B(d(F,1),k,6,15,[1,10,100,1e3,nP,jy,1e6,1e7,1e8,Of]),t=1,e=0;e<=18;e++)yr[e]=(ke(),G(t,0)>=0?we(t):FP(we(p0(t)))),Wf[e]=hu(M1(t,e),0)?we(M1(t,e)):FP(we(p0(M1(t,e)))),t=Un(t,5);for(;e<Wf.length;e++)yr[e]=bP(yr[e-1],yr[1]),Wf[e]=bP(Wf[e-1],(ke(),EU))}function MR(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=O1(O1(Un(V(t[r],h1),V(t[f],h1)),V(A[r+f],h1)),V(zt(n),h1)),A[r+f]=zt(n),n=DA(n,32);A[r+e]=zt(n)}for(uF(A,A,e<<1),n=0,P=0,i=0;P<e;++P,i++)n=O1(O1(Un(V(t[P],h1),V(t[P],h1)),V(A[i],h1)),V(zt(n),h1)),A[i]=zt(n),n=DA(n,32),++i,n=O1(n,V(A[i],h1)),A[i]=zt(n),n=DA(n,32);return A}function HR(t){var e,A,n,P,r,i,f,D,Q,U;i=N5(t),D=t.q;do--D;while(D>=0&&i[D]);for(e=0;e<D;e++)if(i[e]){S5(t,e,D),U=i[e],i[e]=i[D],i[D]=U;do--D;while(i[D])}if(t.f=D+1,t.q==t.f){t.g=t.r;return}for(f=h(rt,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]){t5(t,P,Q),f[P]=!1;do--Q;while(f[Q])}t.g=Q+1}function DW(t,e,A){var n,P,r,i,f,D,Q;for(D=h(F,k,6,t.g,15,1),i=h(F,k,6,t.g,15,1),Q=h(rt,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(iW(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 uW(t,e){var A,n,P,r,i,f,D,Q,U,L;if(U=ud(t.f)!=1?1:Cb(e,t.p[1],t.k[0]),L=ud(t.g)!=1?1:Cb(e,t.p[2],t.k[1]),!(U==1&&L==1)){for(i=360/w.Math.max(U,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=h(Yt,at,6,A,15,1),f=h(Yt,at,6,A,15,1),D=h(Yt,te,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 VR(t,e){var A,n,P,r,i,f,D,Q,U,L;if(f=h(F,k,6,t.q,15,1),i=n9(t,f,!1,e),i<=1)return null;for(D=h(F,k,6,i,15,1),n=0;n<t.f;n++)++D[f[n]];for(U=0,L=D[0],Q=1;Q<i;Q++)L<D[Q]&&(L=D[Q],U=Q);for(A=0;A<t.q;A++)f[A]!=U&&(t.C[A]=-1);for(r=0;r<t.r;r++)(!e&&t.H[r]==16||f[t.D[0][r]]!=U)&&(t.H[r]=512);P=mf(t),t.T=0;try{Pp(t,!0,!0)}catch(s){if(s=t0(s),!Zt(s,19))throw At(s)}return P}function QW(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<Mt(t.f,e);P++)t.c[Ot(t.f,e,P)]||++f;f==1&&(i=SW(t,e),(!r||i.a.length>r.a.length)&&(r=i))}if(!r)break;for(A=new MP(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(m2)*n,A.b[n]=(n&1)==1?0:.5,A.k[n]=128+r.a.length;pP(t.d,A)}}function UW(t,e,A,n,P){var r,i,f,D;if(i=t.e[e],t.o[e]!=0||e<t.f&&i0(t.p,e)||t.j[e]<3||i>4)return!1;for(D=h(rt,ft,6,4,16,1),f=0;f<i;f++){if(r=3.9269908169872414-n[f],w.Math.abs(R6-r%bA)>.0872664675116539||(P[f]=3&vt(r/bA),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(!Gr(t,t.k[e][A[f]],e))return!1}return D[0]&&D[2]}function oW(t,e,A,n){var P,r,i,f,D,Q,U,L,s,y;for(s=h(F,k,6,t.f,15,1),y=IK(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=h(F,k,6,2,15,1),D[0]=s[P],D[1]=Q,L.a.push(D));if(!i||!r)for(U=new Wt(L);U.a<U.c.a.length;)Q=t1(U),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 LW(t,e){var A,n;if(A=nh(J0(e,t.f[1]),J0(e,t.f[0])),t.a.length==2){if(A<1.02*t.a[0])return hJ(t,e.o,A);if(A>t.a[1])return F7((A-t.a[1])/A)}else if(n=t.c==10?vq(w.Math.abs(t.a[0]-A)/w.Math.max(t.a[0],A)):t.c==5?Eq(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&&i0(t.p,e)||t.o[e]!=0||gt(V(t.B[e],Ur),0)||(n=t.u[e]&hn,(n==0?0:n==re?2:n==I1?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&&!(N3(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],!Af(t.p,r,A)&&Y$(t,e,r,t.i[e][P],A))return!0;return!1}function sW(t,e,A,n){var P,r,i,f,D,Q,U,L,s,y,l,T,c,g;D=(e.c-e.d)/9,y=(e.b-e.a)/9,Q=e.b+D,l=e.d+y,U=e.b-D,T=e.d-y,L=(e.a+Q)/2,c=(e.c+l)/2,s=(e.a+U)/2,g=(e.c+T)/2,i=new YD(3),f=new YD(4),Ce(i,e.a,e.c),Ce(i,L,c),Ce(i,s,g),Ce(f,s,g),Ce(f,L,c),Ce(f,Q,l),Ce(f,U,T),vr(t.L,D1(t.L,A,n))?(P=-3,r=-3):(P=t.p[A],r=t.p[n],t.L.O!=1&&(r=Xh(t,A),P==ou(t.L,A)&&(P=r))),W1(t,P),t.sb(i),W1(t,r),t.sb(f),W1(t,t.Q)}function yW(t){var e,A,n,P,r,i,f,D;ut(t.i,1),f=t.i.f;do--f;while(f>=0&&K(t.i,f)==1);for(e=0;e<f;e++)if(K(t.i,e)==1){S5(t.i,e,f);do--f;while(K(t.i,f)==1)}if(f!=t.i.f-1){for(i=h(rt,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),(K(t.i,A)==1||K(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]){t5(t.i,P,D),i[P]=!1;do--D;while(i[D])}}}function lW(t,e,A){var n,P,r,i,f,D;for(f=new V0,n=XY(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+=\",\"),g3(f,A.i[P][n[P]]));return J(f,(J9(),\") \"+tr(e.a,3))),f.a}function qs(t,e,A,n){var P,r,i,f,D,Q,U,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),U=N(t.$,n),D=s>L?U.c+U.b:U.c,Q=l>y?U.d+U.a:U.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,U,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],U=0,Q=h(F,k,6,3,15,1),D=0;D<t.j[n];D++)Q[U]=t.i[n][D],Q[U]!=e&&++U;U==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 TW(t){var e,A,n,P,r,i,f,D,Q,U,L,s;for(t.u=h(rt,h0,12,t.k.q,0,2),A=1;A<t.k.q;A++)t.u[A]=h(rt,ft,6,A,16,1);for(U=t.q,L=0,s=U.length;L<s;++L)for(Q=U[L],i=1;i<Q.d.length;i++)for(D=0;D<i;D++)LB(t,Q.e[Q.d[i]],Q.e[Q.d[D]]);for(e=0;e<t.k.f;e++)for(r=1;r<Mt(t.k,e);r++)for(f=0;f<r;f++)LB(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 hW(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 EA(t.k,129),P=t.d.T,t.o=h(rt,ft,6,P+1,16,1),t.n=h(rt,ft,6,P+1,16,1),t.i=R1(F,[D0,k],[7,6],15,[2,32],2),e=0;e<t.k.f;e++)D=Ae(t.k,e)-1,D!=-1&&++t.i[D][VA(t.k,e)];for(tW(t),D$(t),ma(t),n=new V0,A=new V0,r=!0,f=new Wt(t.g);f.a<f.c.a.length;)i=t1(f),i.g==-1&&(r?r=!1:n.a+=\".\"),oa(t,i,n,A);return n.a}function ER(t,e){var A,n,P,r;for(ki(t.V),t.L=h(o9,or,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),RD(t.V,t.L[P]);for(je(t.V,e.c||cQ(e)),z1(t),t.M=h(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 to,t.U=5,t.eb=w.Math.max(t.eb,5),n1(t.k),N1(t,new q1(t,1,!1))}function cW(t){var e,A,n,P,r,i;if(t.L.K){for(W1(t,320),e=0;e<t.L.f;e++)P=o0(t.L,e),G(P,0)!=0&&((t.G&8)!=0||gt(V(P,{l:ge,m:896,h:1048448}),0))&&t.ub(Z1(t.R,kt(t.L,e))-t.Z/2,X1(t.R,jt(t.L,e))-t.Z/2,t.Z);for(r=0;r<t.L.g;r++)i=ee(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((Z1(t.R,kt(t.L,A))+Z1(t.R,kt(t.L,n))-t.Z)/2,(X1(t.R,jt(t.L,A))+X1(t.R,jt(t.L,n))-t.Z)/2,t.Z))}}function SR(t){t.r&&(p5(t,!1),null.vd(),null.vd(),(t.U&4)!=0&&(null.vd(),null.vd()),(t.U&4)!=0&&null.vd()),(t.U&4)!=0&&t.w==19&&(null.vd(),null.vd(),null.vd(),null.vd(),null.vd(),null.vd()),t.w==18&&(null.vd(),null.vd(),null.vd()),t.g&&t.t!=-1&&(ou(t.V,t.t),null.vd(),null.vd(),null.vd(),null.vd(),null.vd(),null.vd(),null.vd(),null.vd(),null.vd(),null.vd()),null.vd()}function SQ(t,e,A,n,P,r){var i,f,D,Q,U;for(ut(t,1),P&&(SL(P),P.d=null,P.K=!1),D=h(F,k,6,t.q,15,1),n==null?n=h(rt,ft,6,t.q,16,1):Hu(n,n.length),D[0]=e,D[1]=A,n[e]=!0,n[A]=!0,f=1,Q=1;f<=Q;){for(U=0;U<t.e[D[f]];U++){if(i=t.i[D[f]][U],i==e&&f!=1)return-1;n[i]||(n[i]=!0,D[++Q]=i)}++f}return P&&(r==null&&(r=h(F,k,6,n.length,15,1)),ui(t,P,n,!1,r),Bf(P,r[e],0,0,-1,0)),n[e]=!1,Q}function wW(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!=Ot(t.j,f,i)&&t.e[Ot(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[Ot(t.j,f,r)])if(D==-1)D=Ot(t.j,f,r),n=_(t.j,f,r);else{f=-1,D=-1;break}f!=-1&&(t.d[n]=!1);break}}}function gW(t,e,A){var n,P,r,i,f,D,Q,U;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=h(F,D0,7,32,0,2),Q=0;Q<r.length;Q++)n=r[Q],t.f[n]&&t.k[n]==P&&(i[t.j[n]]=rf(i[t.j[n]],(A[n]<<16)+n));for(U=0;U<32;U++)i[U]!=null&&i[U].sort(Fe(u0.prototype.gd,u0,[]));if(wu(i,new GP),f5(i[0],i[1])==0)return!1;for(f=0;f<i[0].length;f++)n=i[0][f]&w1,t.k[n]=0,t.j[n]=-1;return!0}function dW(t){var e,A,n,P,r,i,f,D,Q,U,L;for(n=h(F,k,6,t.O,15,1),e=0;e<t.R.f;e++){for(U=O(t.R,e)+xi(t.R,e),Q=0,r=0;r<De(t.R,e);r++)if(r<O(t.R,e)||r>=Mt(t.R,e)){for(L=2*t.f[_(t.R,e,r)],A=Ot(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),_1(t.e[e],t.c,t.f[e]),i=U;i<t.O;i++)_1(t.e[e],t.c+1,0);for(P=0;P<U;P++)_1(t.e[e],t.c+1,n[P])}}function qR(t,e){var A,n,P,r,i,f;return P=cF(t),f=cF(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)*hU)+1)-(e.d>0?e.d:w.Math.floor((e.a-1)*hU)+1),A>n+1?P:A<n-1?-P:(r=(!t.c&&(t.c=kP(E1(t.f))),t.c),i=(!e.c&&(e.c=kP(E1(e.f))),e.c),n<0?r=bP(r,ii(-n)):n>0&&(i=bP(i,ii(n))),rs(r,i))):P<f?-1:1}function BW(t){var e,A,n,P,r,i,f,D,Q,U,L;for(t.b=h(F,k,6,t.i.f,15,1),f=h(F,k,6,t.i.f,15,1),n=h(rt,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(U=0;U<O(t.i,f[i]);U++)r=Ot(t.i,f[i],U),!n[r]&&t.g[r]&&(n[r]=!0,P=_(t.i,f[i],U),t.b[P]==0&&(t.b[P]=L,f[++D]=P));++i}t.j=L}function vW(t,e,A,n,P){var r,i;if(r=O1(V(e[0],h1),V(n[0],h1)),t[0]=zt(r),r=q0(r,32),A>=P){for(i=1;i<P;i++)r=O1(r,O1(V(e[i],h1),V(n[i],h1))),t[i]=zt(r),r=q0(r,32);for(;i<A;i++)r=O1(r,V(e[i],h1)),t[i]=zt(r),r=q0(r,32)}else{for(i=1;i<A;i++)r=O1(r,O1(V(e[i],h1),V(n[i],h1))),t[i]=zt(r),r=q0(r,32);for(;i<P;i++)r=O1(r,V(n[i],h1)),t[i]=zt(r),r=q0(r,32)}G(r,0)!=0&&(t[i]=zt(r))}function V5(t,e,A,n,P){i8();var r,i,f,D,Q,U,L,s,y,l,T;for(D=0;D<e.length;D++)Hr(A,t.k[e[D]]);for(cd(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=R1(yt,[h0,wt],[15,6],15,[3,3],2),U=0;U<e.length;U++)for(L=0;L<3;L++)for(s=0;s<3;s++)l[L][s]+=P[U][L]*P[U][s];for(T=new ry(l),r=T.e,y=0,f=1;f<3;f++)r[f]<r[y]&&(y=f);i=T.a,n.a=i[0][y],n.b=i[1][y],n.c=i[2][y]}function FW(t,e,A,n){var P,r,i,f,D,Q,U,L,s,y,l;if(U=h(rt,ft,6,e.q,16,1),s=SQ(e,t.k[0],t.p[1],U,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(U[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=h(F,k,6,s,15,1),r=0;r<e.q;r++)A[r]==D&&U[r]^Q&&(t.o[y++]=r);t.n=t.p[Q?2:1]}function IR(t,e){sg();var A,n,P,r;n=new Vs(t);try{for(r=new f3,rA(r,\"$RXN\"+zf),Si(r.a,e??\"\"),rA(r,zf+(\"\"+zf)),rA(r,qy+M5(t,!0,27)),rA(r,zf),rA(r,\"  \"+n.g.a.length+\"  \"+n.f.a.length+zf),P=hX(n),A=0;A<n.g.a.length+n.f.a.length;A++)rA(r,\"$MOL\"+zf),sq(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=t0(i),Zt(i,19))x1();else throw At(i)}}function mW(t){var e,A,n,P,r,i,f,D,Q,U;for(r=wP(t,t.q,t.r,wn),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,U=t.J[P].c-t.J[n].c,D*D+Q*Q+U*U<i)throw At(new V1(\"The distance between two atoms is too close.\"));for(ut(t,1),e=0,A=0;A<t.f;A++){if(G1(t,A)>(f=Cn(t,A),f+WA(t,A,f,t.C[A])))throw At(new V1(\"atom valence exceeded\"));e+=t.s[A]}if(e!=0)throw At(new V1(\"unbalanced atom charge\"))}function qQ(t,e){var A,n,P,r,i,f,D,Q,U;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),U=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*U.c-Q.c*U.b,-(Q.a*U.c-Q.c*U.a),Q.a*U.b-Q.b*U.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,U;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),U=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*U.c-Q.c*U.b,-(Q.a*U.c-Q.c*U.a),Q.a*U.b-Q.b*U.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 xR(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)&&(x1(),S1(E1(Date.now()),t.n)));i++)!P&&(P=new mu(t.d)),sR(t,P)?JR(t,P,t.a,0)&&(P=null):JR(t,P,n,1)&&(P=null);t.a.a.length==0&&n.a.length!=0&&(A=ff(n,h(YE,mV,96,0,0,1)),wu(A,new kw),jP(t.a,new xD(new Po(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 df(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m;for(s=-1,l=wP(t,t.q,t.r,wn),y=Ve,n=0;n<t.r;n++)T=t.J[t.D[0][n]].a,g=t.J[t.D[0][n]].b,c=t.J[t.D[1][n]].a,m=t.J[t.D[1][n]].b,U=c-T,L=m-g,P=w.Math.sqrt(U*U+L*L),r=(T+c)/2,i=(g+m)/2,U=e-r,L=A-i,!(w.Math.sqrt(U*U+L*L)>P/2)&&(c==T?Q=w.Math.abs(T-e):(f=(m-g)/(T-c),D=-f*T-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,U,L,s,y,l;for(P=z(t.i,0,e),r=z(t.i,1,e),D=h(F,k,6,t.i.f,15,1),Q=h(F,k,6,t.i.f,15,1),U=h(F,k,6,t.i.f,15,1),D[0]=P,D[1]=r,Q[P]=1,Q[r]=2,U[P]=-1,U[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=h(F,k,6,Q[D[f]],15,1),n=D[f],y=0;y<l.length;y++)l[y]=n,n=U[n];return l}Q[i]==0&&!A[i]&&(D[++L]=i,Q[i]=Q[D[f]]+1,U[i]=D[f])}++f}return null}function bW(t,e){var A,n,P,r,i,f,D,Q,U,L;for(U=It,D=-1,L=-1,Q=-1,n=0;n<t.j.i.f;n++)if(DT(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&&U>t.j.a[n]+(r==1?Q0:0)&&(U=t.j.a[n]+(r==1?Q0:0),D=P,L=r,Q=e[f]);for(A=0;A<t.j.i.f;A++)DT(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 RW(t){var e,A,n,P,r;if(A=t.indexOf(k0(38)),A==-1)return t;for(P=0,r=new TD;A!=-1;)Si(r,(pt(P,A,t.length),t.substr(P,A-P))),Xt(A+1,t.length),t.charCodeAt(A+1)==38?(r.a+=\"&\",P=A+2):(e=(Xt(A+1,t.length),t.charCodeAt(A+1)),e=e-(e<65?48:e<97?65:97),n=(Xt(A+2,t.length),t.charCodeAt(A+2)),n=n-(n<65?48:n<97?65:97),nB(r,16*e+n&w1),P=A+3),A=t.indexOf(k0(38),P);return Si(r,(Xt(P,t.length+1),t.substr(P))),r.a}function jW(t){var e,A,n,P,r,i;for(t.L=!0,r=i2(t,!1);t.U<t.R.f&&r;){for(e=0;e<t.R.f;e++)$e(t.e[e],e),_1(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]),_1(t.e[e],18,M1(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=Wn(t),t.U==P)break;t.U=P,r=i2(t,!1)}}function Bf(t,e,A,n,P,r){var i;return(A==1||A==151||A==152)&&G1(t,e)>1?!1:(i=t.K&&gt(V(t.B[e],-2),0),t.B[e]=V(t.B[e],-2),t.v!=null&&t.v[e]!=null&&(t.v[e]=null,i=!0),t.t!=null&&t.t[e]!=null&&(t.t[e]=null,i=!0),A==t.C[e]&&n==t.A[e]&&P==((t.u[e]&g8)>>>27)-1&&r==(t.u[e]&48)?i:((A==151||A==152)&&(n=A-149,A=1),t.u[e]&=960,t.C[e]=A,t.A[e]=n,t.s[e]=0,t.B[e]=0,XA(t,e,P),Ne(t,e,r),Zu(t,t.w[e]),t.T=0,!0))}function pW(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T;return y=t.a,l=t.d,T=t.e,l==1?(n=V(y[0],h1),P=V(e,h1),r=Mn(n,P),Q=Y9(n,P),T!=A&&(r=p0(r)),T<0&&(Q=p0(Q)),B(d(Bi,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=T==A?1:-1,i=h(F,k,6,f,15,1),U=B(d(F,1),k,6,15,[CR(i,y,l,e)]),L=new Ue(D,f,i),s=new Ue(T,1,U),Rn(L),Rn(s),B(d(Bi,1),Ye,23,0,[L,s]))}function EA(t,e){this.R=t,this.Q=e,ut(this.R,7),this.c=J8(this.R.f),(this.Q&I1)==0&&TZ(this),this.jb=(e&64)!=0||GT(this.R),this.b=NO(this.R)==0,(this.Q&I1)==0&&(this.db=h(q,I,6,this.R.f,15,1),this.fb=h(rt,ft,6,this.R.f,16,1),this.ib=h(rt,ft,6,this.R.f,16,1),this.o=h(q,I,6,this.R.g,15,1),this.q=h(rt,ft,6,this.R.g,16,1),this.p=h(rt,ft,6,this.R.g,16,1)),this.d=!1,qa(this),(this.Q&I1)==0&&r$(this),qZ(this)}function CW(t,e,A,n,P){var r,i,f,D,Q,U;for(D=null,r=null,U=0;U<t.g[e].length;U++)i=t.g[e][U],t.f[i]&&(t.o[i]==1||t.o[i]==2)&&(t.k[i]==0?r=rf(r,(P[i]<<16)+i):t.k[i]==n&&t.j[i]==A&&(D=rf(D,(P[i]<<16)+i)));if(f=f5(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 MW(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l;for(f=h(F,k,6,t.f.q,15,1),D=h(F,k,6,t.f.q,15,1),Q=h(F,k,6,t.f.q,15,1),U=h(F,k,6,t.f.q,15,1),f[0]=A,Q[A]=1,U[0]=-1,i=0,L=0;i<=L;){for(s=0;s<Mt(t.f,f[i]);s++){if(P=_(t.f,f[i],s),l=Ot(t.f,f[i],s),P==e){for(r=Q[f[i]],n=h(F,k,6,r,15,1),n[0]=l,y=1;y<r;y++)n[y]=D[i],i=U[i];return n}Q[P]==0&&(f[++L]=P,D[L]=l,Q[P]=Q[f[i]]+1,U[L]=i)}if(i==L)return null;++i}return null}function HW(t,e,A){var n,P,r,i,f;return!fi(t.R,e)||(n=z(t.R,0,e),P=z(t.R,1,e),i=new gf(t.R,t.f,n,P),i.f&&A==1)||(f=new gf(t.R,t.f,P,n),f.f&&A==1)||i.f&&f.f?!1:(A==3&&(i.f&&(t.V[e]=vb(t,P)),f.f&&(t.V[e]=vb(t,n))),r=t.jb?iY(t,i,f):rz(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 VW(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|=I1),e}function NR(t,e,A,n,P,r,i){var f,D,Q,U,L,s,y,l,T,c,g;for(L=i;L>1;L--){for(T=r[L]-r[L-1],g=h(ftt,A0,174,T,0,1),f=r[L],l=0;l<T;l++){for(c=r[L-1]+l,s=f;s<r[L+1]&&n[s]==c;)++s;for(g[l]=new n0,g[l].c=c,g[l].d=A[c],g[l].b=e[c]?0:Td(t.R,P[c]),g[l].a=h(F,k,6,s-f,15,1),U=f;U<s;U++)g[l].a[U-f]=A[U];g[l].a.sort(Fe(u0.prototype.gd,u0,[])),f=s}for(D=new u1,Wi(g,0,g.length,D),Q=1,y=0;y<T;y++)A[g[y].c]=Q,y!=T-1&&kb(g[y],g[y+1])!=0&&++Q}}function EW(t,e,A){var n,P,r,i,f,D,Q,U,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||Mt(t.f,n)==1||Mt(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),Mt(t.f,i)>2){for(s=!0,D=-1,U=0;U<Mt(t.f,i);U++)f=_(t.f,i,U),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 s2(t){var e,A,n,P,r,i,f,D,Q,U,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(U=!0,s=0;s<i.length;s++)if(s!=L&&t.f[A]==t.f[i[s]]){U=!1;break}U&&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;Z8(t.hb,i),f=!0,--D}}return f}function OR(t,e,A,n){var P,r,i,f,D,Q,U,L,s;for(ut(e,1),n==null&&(n=h(F,k,6,e.q,15,1)),f=$0(t,1),D=$0(t,2),s=h(rt,ft,6,e.q,16,1),Q=h(F,k,6,e.q,15,1),Q[0]=A,s[A]=!0,n[A]=En(e,t,A,f,D),i=0,U=0;i<=U;){for(L=0;L<e.e[Q[i]];L++)r=e.i[Q[i]][L],s[r]||(Q[++U]=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]]&&er(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 E5(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l;for(ut(t,7),r=h(rt,ft,6,t.g,16,1),L=h(rt,ft,6,t.g,16,1),l=h(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=h(F,k,6,y,15,1),Vm(t,l,s,y),U=0;U<y;U++)r[s[U]]||(r[s[U]]=!0,D=!0);D&&++i}}return i}function GR(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&&He(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 y2(t,e,A,n){var P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m;return U=_d(t.a,e,D1(e,A,n)),i=e.a[A],Q=e.a[n],i>Q&&(i=(c=k1(Q),k1(Q=i),c).a),l=_9(B(d(F,1),k,6,15,[1,2,0]),B(d(F,1),k,6,15,[i,Q,U]),t),l>=0?j0(t.b[l][4]):(r=e.C[A],D=e.C[n],r>D&&(r=(T=k1(D),k1(D=r),T).a),P=Od(r,t.a.f),f=Od(D,t.a.f),g=Rg(t.a.f,P),m=Rg(t.a.f,f),s=bg(t.a.f,P),y=bg(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 xt(t,e){var A,n,P,r,i,f,D;if(t.K&&P0(V(t.B[e],I1),0)||!aL(t,e))return 0;if(t.C[e]==0||A1(\"*\",t.t==null||t.t[e]==null?null:rn((r=t.t[e],c0(),r))))return t.e[e]==0?1:0;for(ut(t,1),f=0,P=0;P<t.e[e];P++)f+=t.n[e][P];if(t.K){for(A=1,n=0;n<t.j[e];n++)t.H[t.k[e][n]]==8&&++A;f+=A>>1}if(f-=WA(t,e,f,t.C[e]),i=((t.u[e]&g8)>>>27)-1,i==-1)for(D=Yu(t.C[e]),i=D[0],n=1;i<f&&n<D.length;n++)i=D[n];return w.Math.max(0,i-f)}function JR(t,e,A,n){var P,r,i,f;if(t.g==null&&(t.g=xk(t.d)),i=w.Math.max(t.c[n]+2.72,t.c[n]*2),e.e>i)return!1;for(kI(e,t.g),r=A.a.length-1;r>=0;r--)if(f=(ve(r,A.a.length),A.a[r]),sF(e,f),qJ(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&&(P0(V(t.B[e],i9),Mf)&&(P=-1),P0(V(t.B[e],i9),Cf)&&(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 SW(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y;for(P=h(F,k,6,t.f.q,15,1),r=h(F,k,6,t.f.q,15,1),i=h(F,k,6,t.f.q,15,1),f=h(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<Mt(t.f,P[n]);Q++)A=_(t.f,P[n],Q),s=Ot(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 MT(i[P[n]]),U=n,L=0;L<y.a.length;L++)y.a[L]=P[U],y.b[L]=r[U],U=f[U];return y}++n}return null}function qW(t,e,A,n){var P,r,i,f,D,Q,U;return U=A>n?1:-1,Q=A>n?n:A,D=A>n?A:n,r=Gd(t,Q,t.a.length,!0),P=Gd(t,Q,t.a.length,!1),r==-1||P==-1||(f=hA(2,D,r,P+1,!0,new ZU(t)),i=hA(2,D,r,P+1,!1,new ZU(t)),f==-1||i==-1)?j0(t.b[A-1][1])-j0(t.b[n-1][1]):e==0&&Yn(t.a[f][0])==0?U*j0(t.a[f][3]):e==1&&Yn(t.a[i][0])==1?U*j0(t.a[i][3]):j0(t.b[A-1][1])-j0(t.b[n-1][1])}function IW(t,e,A,n,P){var r,i,f,D,Q,U,L,s;for(r=h(F,k,6,n,15,1),s=h(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=h(Yt,at,6,3,15,1),f=h(Yt,at,6,3,15,1),U=R1(Yt,[te,at],[16,6],15,[3,2],2),L[0]=60,L[1]=180,L[2]=300,f[0]=33,f[1]=33,f[2]=33,U[0][0]=45,U[0][1]=75,U[1][0]=165,U[1][1]=195,U[2][0]=285,U[2][1]=315,mt(P,new xL(L,f,U,s,r,1))}function S5(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,U,L,s,y,l,T;if(A==n)return e[0]=A,0;for(t.$b(1),U=h(F,k,6,t.q,15,1),Q=h(F,k,6,t.q,15,1),T=h(F,k,6,t.q,15,1),Q[0]=A,U[A]=1,D=0,L=0;D<=L&&U[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=U[l],e[y]=f,e[--y]=l;y>0;)e[y-1]=T[e[y]],--y;return U[l]}U[f]==0&&(r==null||r.length<=f||!r[f])&&(Q[++L]=f,U[f]=U[l]+1,T[f]=l)}++D}return-1}function xW(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(a1(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(a1(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 NW(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g;for(f=ka(e),i=h(yt,wt,6,f.length,15,1),n=0;n<f.length;n++){if(c=e.a[n],y=f[n],g=dI(t.e,c),A=mn(t.b,c),l=0,T=0,w.Math.abs(g)<LU)for(Q=0;Q<e.e[n];Q++)L=e.i[n][Q],f[L]<0&&(y+=f[L]/(2*e.e[L]));if(c==62)for(U=0;U<e.e[n];U++)L=e.i[n][U],f[L]>0&&(y-=f[L]/2);for(D=0;D<e.e[n];D++)L=e.i[n][D],P=D1(e,n,L),s=e.a[L],r=D8(t,e,e.D[0][P],e.D[1][P]),T+=qW(t.e,r,c,s),l+=f[L];i[n]=(1-A*g)*y+g*l+T}return i}function q5(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,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=GD(K(t.o,A)),l=0;l<s.c.length;l++)n=s.e[s.c[l]],n!=r&&n!=i&&(T=m+GD(K(t.o,n)),D=w.Math.abs(t.k[A].a-t.k[n].a),D<T&&(Q=w.Math.abs(t.k[A].b-t.k[n].b),Q<T&&(U=w.Math.abs(t.k[A].c-t.k[n].c),U<T&&(f=w.Math.sqrt(D*D+Q*Q+U*U),f<T&&(c=(T-f)/T,g+=c*c)))));return g}function OW(t,e,A,n){var P,r,i,f,D,Q,U,L,s,y,l,T,c;if(L=e[n==0?4:n-1],c=e[n==4?0:n+1],O(t.j,L)==3&&O(t.j,c)==3){for(y=h(F,k,6,t.j.f,15,1),s=h(rt,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,c,14,null,s),l==14){for(T=!0,U=2;U<=12;U++)if((U&3)!=1^M9(t.j,y[U])==5){T=!1;break}if(T)for(Pf(t,y[7]),Q=1;Q<=5;Q+=2)n2(t,D1(t.j,y[Q],y[Q+1])),n2(t,D1(t.j,y[Q+7],y[Q+8]))}}}function zR(t,e,A,n){var P,r,i,f,D,Q,U,L,s,y,l,T;for(D=new zA(t.f,t.g),U=new A7,y=0,s=0,i=h(rt,ft,6,t.f,16,1),r=h(F,k,6,t.f,15,1),T=0;T<A&&s<t.f;T++){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:tm(t,P)&&tm(t,f)||(i[f]=!0,r[l++]=f)}y=s,s=l}ui(t,D,i,!0,null),a7(U,me(new EA(D,8)))}return tg(U,h(it,Dt,2,U.a.a.length,6,1))}function YR(t,e){var A,n,P,r;if(!e||e.q==0)return!1;if(e.r!=0)for(n=Pn(t.V,24*t.ab),SF(new du(e),new a2(ad(t.k)),new QA(0,0,VD(t.k),Vr(t.k)),Q0+vt(n));LK(t,e,.2*n);)CL(e,.5*n,.5*n);if(z1(t),xd(e),$d(e),P=t.V.K,t.V.q==0)uf(e,t.V),t.a||je(t.V,P),t.eb=w.Math.max(t.eb,4),n1(t.k),N1(t,new q1(t,1,!0));else{for(r=t.V.q,RD(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),n1(t.k),N1(t,new q1(t,1,!0))}return!0}function KR(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 to),this.eb=4}function XR(t){var e,A,n,P,r,i,f,D,Q,U;if(t.e.a.c==1)return t.i;for(Q=Xn(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&&(m5(Q,A),Q.u[A]&=dy,Q.T&=7,He(Q,A,0,-1));for(f=h(F,k,6,t.j,15,1),D=h(F,k,6,t.j,15,1),n=new BA(Q).f,e=0;e<Q.f;e++)t.b[e]!=0&&(U=t.b[e]-1,D[U]<n[e]&&(D[U]=n[e],f[U]=e));for(r=0;r<t.j;r++)i=\"\"+t.n[r]+\"|\"+t.k[r]+\"|\"+t.o[r],u8(Q,f[r],i);return Q}function GW(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y;for(i=h(F,k,6,t.j.q,15,1),A=0;A<t.j.q;A++)i[A]=-p1(t.j,A);for(Ff(new cr(t.j),null,!0),n=0;n<t.j.q;n++)i[n]+=p1(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)&&(U=(s=K(t.j,L),y=s<(Y1(),F4).length?F4[s]:null,y==null?0:y[y.length-1]),r=p1(t.j,L),r<U&&(D=w.Math.min(f,U-r),E0(t.j,L,r+D),f-=D)))}function ZR(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T;if(T=Db(e,t.I),T==null||(l=Db(A,t.B),l==null))return null;if(T.length==1&&l.length==1)return new gD(T[0],l[0]);if(y=tX(t,T,l),y.length==1)return new gD(T[0],l[0]);for(U=Kx(t.i,y.length),s=-1,r=T,f=0,Q=r.length;f<Q;++f)if(n=r[f],t.J[n]==y[U][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[U][1]){L=n;break}return t.o=Qb(t,t.D,t.J,s,t.o),t.n=Qb(t,t.u,t.C,L,t.n),new gD(s,L)}function er(t,e,A,n,P,r,i,f){var D,Q,U,L;return Q=e.r,Q>=e.N&&eQ(e,e.N*2),L=(t.F[A]&768)>>8,U=-1,L==1&&(n==-1?U=$0(e,L):U=w.Math.min(32,n+((t.F[A]&768)>>8!=1&&(t.F[A]&768)>>8!=2?-1:(t.F[A]&ln)>>10))),L==2&&(P==-1?U=$0(e,L):U=w.Math.min(32,P+((t.F[A]&768)>>8!=1&&(t.F[A]&768)>>8!=2?-1:(t.F[A]&ln)>>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,U!=-1&&(e.F[Q]&=-31745,e.F[Q]|=U<<10),++e.r,e.T=0,Q}function ii(t){P9();var e,A,n,P;if(e=vt(t),t<Wf.length)return Wf[e];if(t<=50)return D2((ke(),EU),e);if(t<=1e3)return I9(D2(yr[1],e),e);if(t>1e6)throw At(new p8(\"power of ten too big\"));if(t<=It)return I9(D2(yr[1],e),e);for(n=D2(yr[1],It),P=n,A=E1(t-It),e=vt(t%It);G(A,It)>0;)P=bP(P,n),A=l0(A,It);for(P=bP(P,D2(yr[1],e)),P=I9(P,It),A=E1(t-It);G(A,It)>0;)P=I9(P,It),A=l0(A,It);return P=I9(P,e),P}function r9(t){var e,A,n,P,r,i;if(t.j!=0)return t.j;if(t.i&&K(t.e,t.a)!=15&&K(t.e,t.a)!=16){for(i=0;i<Mt(t.e,t.a);i++)if(r=Ot(t.e,t.a,i),Gr(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),Mt(t.e,t.a)==2?(A=n-e,A>3.0915926535897933&&A<3.191592653589793?(t.j=-1,t.j):(t.j=A<Q1?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 JW(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y;for(L=R1(F,[D0,k],[7,6],15,[A,(t.U&6)!=0?2:1],2),D=0;D<A;D++)L[D][0]=D;if(U=qK(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,U[Q].a,U[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++)K(t.V,P)==0&&L[e[P]][1]==0&&(L[e[P]][1]=1,--t.Y);for(i=U,wu(L,new K7(t,i)),s=h(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 zW(t){var e,A,n,P,r,i,f,D,Q,U,L,s;if(!t.A){for(t.A=new f1,U=0,L=h(F,k,6,t.R.f,15,1),i=h(F,k,6,t.R.f,15,1),D=h(F,k,6,t.R.g,15,1),e=0;e<t.R.f;e++)if(L[e]==0&&(qi(t.R,e)||a1(t.R,e)==1)){for(i[0]=e,f=1,Q=0,L[e]=++U,A=h(rt,ft,6,t.R.g,16,1),r=0;r<f;r++)for(s=0;s<O(t.R,i[r]);s++)P=Ot(t.R,i[r],s),(fA(t.R,P)||dt(t.R,P)==2||fi(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]=U));mt(t.A,new Dm(i,f,D,Q))}}}function YW(t,e){i8();var A,n,P,r,i,f,D,Q,U,L;for(A=0;A<e.f;A++)if(e.e[A]>=3&&(U=e.u[A]&3,(U==1||U==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=h(F,k,6,5,15,1),P=h(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,U==1&&(L=n[1],n[1]=n[0],n[0]=L,L=P[1],P[1]=P[0],P[0]=L),mt(t,new Wd(e,n,P))}}function KW(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c;for(l=0;l<e.j.a.length;l++)if(N(e.k,l).length!=6&&t.i[l]){for(L=!0,c=N(e.k,l),U=0;U<c.length;U++)if(!t.e[c[U]]){L=!1;break}if(L){for(f=-1,D=0,T=N(e.j,l),Q=0;Q<T.length;Q++)n=T[Q],y=t.g[n]?ej(t,n,!1):Ck(t,n,!1),D<y&&(D=y,f=Q);if(f!=-1){if(s=T[f],A){for(P=T,r=0,i=P.length;r<i;++r)n=P[r],n!=s&&yf(t,n,!0);t.g[s]?ej(t,s,!0):Ck(t,s,!0)}return Pf(t,s),t.g[s]&&OW(t,T,c,f),!0}}}return!1}function WR(t,e,A,n){var P,r,i,f,D;if(e[A+1]!=40)throw At(new V1(\"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 V1(\"SmilesParser: Missing closing ')' for recursive SMARTS. '('-position:\"+(A+1)));if(i=new zA(16,16),D=new LQ(t.k),ES(D,t.n.f),D6(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++)T1(i,P,Pe,!0);return r-A}function I5(t){var e,A;for(this.j=t.j,this.i=t.i,this.e=h(F,k,6,t.e.length,15,1),this.k=h(F,k,6,t.e.length,15,1),this.a=h(yt,wt,6,t.e.length,15,1),this.b=h(yt,wt,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=h(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=h(F,k,6,t.g.length,15,1),e=0;e<t.g.length;e++)this.g[e]=t.g[e]}function xQ(t){var e,A,n,P,r,i,f,D,Q,U,L;if(t.F.d.a.length==t.u)return null;U=h(F,k,6,t.w.length,15,1),A=h(F,k,6,t.v.length,15,1),n=0;do{if(n++==64)return null;if(t.b){for(f=n/64,Q=0;Q<t.v.length;Q++)A[Q]=IJ(t.v[Q],jn(t.c),f);for(e=z9(t.i,A),D=0;D<t.w.length;D++)U[D]=lz(e,D,jn(t.c),f)}else{for(i=0;i<t.v.length;i++)A[i]=yQ(t.c,t.v[i].b.length);for(r=0;r<t.w.length;r++)U[r]=yQ(t.c,t.w[r].d.length)}L=OD(t,U,A)}while(P=a9(t.F,L),(P<0?-1:P)!=-1);return L}function cA(t,e){var A,n,P,r,i,f;if(e.a==e.b&&e.c==e.d){for(i=new Wt(t.$);i.a<i.c.a.length;)if(r=t1(i),Nr(r,e.a,e.c))return!1;return!0}for(f=ok(e),A=!1,e.a>e.b&&(qu(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&&qu(e),!1):(qs(t,e,0,n),P=cA(t,e),A&&qu(e),P);if(ZD(t,e.b,e.d,n))return qs(t,e,1,n),P=cA(t,e),A&&qu(e),P}return A&&qu(e),!0}function XW(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=D1(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=D1(t,A,P),t.H[r]==2&&++D);if(D==2)return!0}else if(zK(t,e))return!0;return!1}function ZW(t,e,A){var n,P,r,i,f,D,Q,U;if(t.o[e]=A,t.n=null,P=dr(t.c,e),N7(t.s,P,t.o[e]),D=8+(t.a?0:1),sn(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&&p1(t.o[e],Q[f])!=0&&(U=Cn(t.o[e],Q[f]),n=Fu(t.o[e],Q[f],U)),t.k[e][f]>0&&t.k[e][f]>Zi(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 WW(t){t=t||{};var e=0;if(t.maxAVBL){if(!Number.isInteger(t.maxAVBL)||t.maxAVBL<0||t.maxAVBL>w1)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|=Q0),t.inflateToHighResAVBL&&(e|=I0),t.chiralTextBelowMolecule!==!1&&(e|=0),t.chiralTextAboveMolecule&&(e|=T8),t.chiralTextOnFrameTop&&(e|=l8),t.chiralTextOnFrameBottom&&(e|=m1),e}function _W(t,e,A,n){var P,r,i,f,D,Q,U,L;for(L=h(F,k,6,t.g,15,1),D=h(rt,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(U=0;U<t.j[P];U++)f=t.k[P][U],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(Ff(new cr(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 vf(t,e,A){var n,P,r,i,f;if(t.a=!1,t.d=e,Zn(t.e[e]&w1)){for(f=NL(t),t.c=t.b=f,n=e-1;n>1&&cN(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=NL(t),t.c>f?t.c=f:t.b<f&&(t.b=f)}return t.d-e}return t.e[e]==123&&Zn(t.e[e+1]&w1)?(++t.d,t.c=NL(t),t.e[t.d++]!=45||!Zn(t.e[t.d]&w1)||(t.b=NL(t),t.e[t.d++]!=125)?0:t.d-e):(t.c=1,t.b=A,t.a=!0,0)}function _R(t,e,A){var n,P,r,i,f,D,Q,U,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,U=0;U<t.j[n];U++)r=t.i[n][U],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 x5(t,e){var A,n,P,r,i,f,D,Q,U,L;if(e.e==0)throw At(new p8(gV));return P=e.e,e.d==1&&e.a[0]==1?e.e>0||t.e==0?t:new Ue(-t.e,t.d,t.a):(U=t.e,Q=t.d,n=e.d,Q+n==2?(L=Mn(V(t.a[0],h1),V(e.a[0],h1)),U!=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?U==P?N2:uc:A==-1?y9:(i=Q-n+1,r=h(F,k,6,i,15,1),f=U==P?1:-1,n==1?CR(r,t.a,Q,e.a[0]):Sj(r,i,t.a,Q,e.a,n),D=new Ue(f,i,r),Rn(D),D)))}function $R(t){var e,A,n,P,r;for(t.a=R1(F,[D0,k],[7,6],15,[t.d.length,4],2),t.c=R1(F,[D0,k],[7,6],15,[t.d.length,2],2),t.e=h(F,k,6,t.d.length,15,1),e=h(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]),Zo(t.b,e[1])&&w5(t.b,e[0],e,null),t.a[P][1+r]=e[1],t.c[P][r]=e[0];A=DR(t,t.a[P][1],t.c[P][0]),n=DR(t,t.a[P][2],t.c[P][1]),t.e[P]=SV[A][n],t.a[P][0]=Jb(t,t.a[P][1],t.c[P][0],A),t.a[P][3]=Jb(t,t.a[P][2],t.c[P][1],n)}}function $W(t){var e,A,n,P,r,i;for(mW(t),ut(t,31),n=0;n<t.f;n++){if(((t.u[n]&m1)>>18==1||(t.u[n]&m1)>>18==2)&&((t.u[n]&Tn)==0||(t.u[n]&3)==3))throw At(new V1(E6));if((t.u[n]&Q0)!=0)throw At(new V1(S6));if(((t.u[n]&3)==1||(t.u[n]&3)==2)&&t.o[n]==0){for(e=h(yt,wt,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(!Gr(t,t.k[n][P],n)){for(i=0;i<P;i++)if(!Gr(t,t.k[n][i],n)&&(A=w.Math.abs(Je(e[P],e[i])),A<.08||A>Rp))throw At(new V1(q6))}}}}function aW(t,e,A){var n,P,r,i,f,D,Q,U,L,s;for(n=h(F,k,6,t.f,15,1),L=h(rt,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(U=0;U<=f;U++)for(s=0;s<t.j[n[U]];s++)r=t.i[n[U]][s],!L[r]&&!fA(t,t.k[n[U]][s])&&SQ(t,n[U],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 n8(f+1),RP(n,h(F,k,6,f+1,15,1),0,f+1)}function Is(){Is=B1,mE=B(d(F,1),k,6,15,[o1,1162261467,cn,1220703125,362797056,1977326743,cn,387420489,Of,214358881,429981696,815730721,1475789056,170859375,Ur,410338673,612220032,893871739,128e7,1801088541,113379904,148035889,191102976,244140625,308915776,387420489,481890304,594823321,729e6,887503681,cn,1291467969,1544804416,1838265625,60466176]),kE=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 t_(t,e){var A,n,P,r,i;if(t.i!=0&&t.k!=null){for(n=C5(t)/t.p.c,ae(e,t.i),eL(e,vt(1.6*n),!0,!1),r=0;r<t.k.length;r++)if(t.k[r].q!=0){for(P=new M7,A=0;A<t.k[r].q;A++)P.a=vt(P.a+kt(t.k[r],A)),P.b=vt(P.b+jt(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(Z1(t.e[r].R,P.a)),P.b=vt(X1(t.e[r].R,P.b)),i=t.c==0?\"\"+(r+1):t.c==2?r<t.j?\"\"+String.fromCharCode(65+r&w1):\"R\"+(r+1-t.j):t.c==1?r<t.n?\"\"+String.fromCharCode(65+r&w1):\"P\"+(r+1-t.n):\"?\"+(r+1),jT(e,P.a,P.b,i)}}}function e_(t){var e,A,n,P,r,i,f,D,Q,U;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(U=h(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)&&(U[r]=t.bb[n]<<29|t.ab[n]<<24|t.f[n]<<12|n,++r);for(U.sort(Fe(u0.prototype.gd,u0,[])),i=0,Q=0,f=U[0]&qn;;)if(++Q,Q==U.length||f!=(U[Q]&qn)){for(P=h(F,k,6,Q-i,15,1),D=i;D<Q;D++)e=U[D]&4095,P[D-i]=e,t.gb[e]=!0;if(mt(t.hb,P),Q==U.length)break;f=U[Q]&qn,i=Q}}}function aR(t){var e,A,n,P;if(t.length==0||(Xt(0,t.length),t.charCodeAt(0)!=62))return null;for(n=1,P=0,e=0;n<t.length;){if(Xt(n,t.length),t.charCodeAt(n)==60){if(P!=0)return null;P=n}else if(Xt(n,t.length),t.charCodeAt(n)==62){if(e!=0)return null;e=n}++n}if(P!=0&&P<e)return pt(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&&Zn((Xt(A,t.length),t.charCodeAt(A)));)++A;return A==n+2?null:(pt(n,A,t.length),t.substr(n,A-n))}function A_(t,e,A,n,P,r,i,f,D,Q){var U,L,s,y,l,T,c,g,m,v;t!=e&&(U=O9(t,e),!(D[U[0]][U[1]]&&D[U[0]][U[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,c=w.Math.sqrt(s*s+l*l),T=w.Math.sqrt(s*s+y*y),g=h(F,k,6,2,15,1),g[0]=Q.D[0][i],g[1]=Q.D[1][i],L=D[U[0]][U[1]],L?(L.a[0]=w.Math.min(L.a[0],c),L.a[1]=w.Math.min(L.a[1],T)):D[U[0]][U[1]]=new $L(U,g,c,T,3)))}function n_(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 P_(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c;for(n=h(yt,wt,6,2,15,1),y=MY(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,uh(n)}for(P=h(yt,wt,6,2,15,1),U=0,f=0;f<3;f++)if(T=t.i[A[1]][f],T!=y[0]&&t.C[T]!=1){for(A[0]=T,L=0,s=0;s<3;s++)c=t.i[A[2]][s],c!=y[1]&&t.C[c]!=1&&(A[3]=c,e?P[L++]=IQ(e,A):P[L++]=qQ(t,A));n[U++]=uh(P)}return A[0]=-1,A[3]=-1,uh(n)}function tj(t,e){gv();var A,n,P,r,i,f,D,Q,U,L,s,y;for(this.e=e,this.a=h(F,k,6,e.length+t.length,15,1),this.b=h(F,k,6,e.length+t.length,15,1),this.d=h(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=MB(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)U=L[s],n=MB(U.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 r_(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l;for(Q=h(F,k,6,t.k.f,15,1),f=h(F,k,6,t.k.f,15,1),D=h(F,k,6,t.k.f,15,1),U=h(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,U[A]=-1,U[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!=U[l]){if(r=Ot(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,U[P]=l)}++i}}function xs(t,e){var A,n,P,r,i,f,D,Q,U,L;if(i=t.e,D=e.e,D==0)return t;if(i==0)return e.e==0?e:new Ue(-e.e,e.d,e.a);if(r=t.d,f=e.d,r+f==2)return A=V(t.a[0],h1),n=V(e.a[0],h1),i<0&&(A=p0(A)),D<0&&(n=p0(n)),ke(),hu(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,U=i==D?hL(e.a,f,t.a,r):mL(e.a,f,t.a,r);else if(L=i,i==D){if(P==0)return ke(),y9;U=hL(t.a,r,e.a,f)}else U=mL(t.a,r,e.a,f);return Q=new Ue(L,U.length,U),Rn(Q),Q}function i_(){var t,e,A,n,P,r,i;if(!M4)try{for(t=r2(\"bondLengthData.txt\"),A=K1(t),e=A==null?0:c1(A,o1,It),dU=h(F,k,6,e,15,1),p4=h(Ee,PA,6,e,15,1),C4=h(Ee,PA,6,e,15,1),EV=h(F,k,6,e,15,1),P=0;P<e;P++)if(i=K1(t),i!=null&&(r=o8(i,\"\\\\t\"),r.length==4))try{dU[P]=c1(r[0],o1,It),p4[P]=Qn(r[1]),C4[P]=Qn(r[2]),EV[P]=c1(r[3],o1,It)}catch(f){if(f=t0(f),Zt(f,40))break;throw At(f)}M4=!0}catch(f){if(f=t0(f),Zt(f,75))n=f,Z9(n,(x1(),gi),\"\");else throw At(f)}}function f_(t,e){var A,n;return n={},A=t.G[e],n.single=S1(V(A,1),0),n.double=S1(V(A,2),0),n.triple=S1(V(A,4),0),n.delocalized=S1(V(A,8),0),n.metalLigand=S1(V(A,16),0),n.quadruple=S1(V(A,32),0),n.quintuple=S1(V(A,64),0),n.notRing=S1(V(A,128),0),n.ring=S1(V(A,256),0),n.aromatic=S1(V(A,qA),0),n.nonAromatic=S1(V(A,fP),0),n.ringSize=zt(V(A,SP))>>17,n.brigdeMin=zt(V(A,7680))>>9,n.brigdeSpan=zt(V(A,wy))>>13,n}function ej(t,e,A){if(t.f[e])return 0;if(K(t.j,e)==7){if(Mt(t.j,e)==3)return 6;if(O(t.j,e)==2)return t.a?0:4}else{if(K(t.j,e)==8)return 10;if(K(t.j,e)==15||K(t.j,e)==33){if(O(t.j,e)==3)return 8}else if(K(t.j,e)==16||K(t.j,e)==34||K(t.j,e)==52){if(O(t.j,e)==2)return 11;if(O(t.j,e)==3)return p1(t.j,e)==1?12:(A&&E0(t.j,e,1),5)}else if(K(t.j,e)==6)return p1(t.j,e)==-1?Mt(t.j,e)==3?16:De(t.j,e)==3?15:14:(A&&E0(t.j,e,-1),Mt(t.j,e)!=De(t.j,e)?2:3)}return 0}function D_(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]&=By);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&qP)!=I0){for(i=h(rt,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]&m1)>>18==1&&(i[n]=!0);for(P=0;P<t.f;P++)(t.u[P]&Tn)!=0&&(t.u[P]&3)!=3&&(He(t,P,1,0),f=!0);for(e=0;e<t.f;e++)i[e]&&(ce(t,e,1,!1),He(t,e,1,-1),f=!0)}t.L=!1}return $0(t,1),$0(t,2),f}function u_(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(Mk(t.d,t.e.e)||Mk(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 Q_(t,e,A,n){var P,r,i,f,D,Q,U,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=h(F,k,6,2,15,1),i[0]=A,i[1]=e,i;for(l=h(F,k,6,t.b,15,1),U=h(F,k,6,t.b,15,1),Q=h(F,k,6,t.b,15,1),r=0,L=0,Q[0]=e,U[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=U[Q[r]]+1,i=h(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}U[P]==0&&t.c[P]!=-3&&(U[P]=U[Q[r]]+1,Q[++L]=P,l[P]=Q[r])}++r}return null}function U_(t){var e,A,n,P;if(t.g.a.length+t.f.a.length<=1)return!1;for(e=fb(t),P=h(wl,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]=Ib(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 He(t,e,A,n){var P,r,i;if(A==0)t.u[e]&=By,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]&m1)>>18&&i<((t.u[r]&m1)>>18!=1&&(t.u[r]&m1)>>18!=2?-1:(t.u[r]&RA)>>20)&&(i=(t.u[r]&m1)>>18!=1&&(t.u[r]&m1)>>18!=2?-1:(t.u[r]&RA)>>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]&ln)>>10)&&(i=(t.F[P]&768)>>8!=1&&(t.F[P]&768)>>8!=2?-1:(t.F[P]&ln)>>10);if(n=i+1,n>=32)return}t.u[e]&=By,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]&m1)>>18&&i<((t.u[r]&m1)>>18!=1&&(t.u[r]&m1)>>18!=2?-1:(t.u[r]&RA)>>20)&&(i=(t.u[r]&m1)>>18!=1&&(t.u[r]&m1)>>18!=2?-1:(t.u[r]&RA)>>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]&ln)>>10)&&(i=(t.F[P]&768)>>8!=1&&(t.F[P]&768)>>8!=2?-1:(t.F[P]&ln)>>10);if(n=i+1,n>=32)return}t.F[e]&=-32513,t.F[e]|=A<<8|n<<10}t.T&=7}function o_(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)*hU)+1)-r<0||r==0)&&(n=Lb(t)-r,!(n<=0))){if(t.a<54){PW(t,e,n);return}f=ii(n),P=dR((!t.c&&(t.c=kP(E1(t.f))),t.c),f),i=t.e-n,P[1].e!=0&&(A=rs(om(P[1].e<0?P[1].e==0?P[1]:new Ue(-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]=T2(P[0],(ke(),G(A,0)>=0?we(A):FP(we(p0(A)))))),D=new Z7(P[0]),Lb(D)>r&&(P[0]=x5(P[0],(ke(),EU)),--i)),t.e=ym(i),t.d=r,yh(t,P[0])}}function Aj(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g;for(c=h(o9,or,26,A,0,1),i=h(F,k,6,A,15,1),Q=h(F,k,6,A,15,1),r=h(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]],T=e[t.D[1][D]],l==T&&l!=-1&&++Q[l];for(g=0;g<A;g++)c[g]=new zA(i[g],Q[g]),ko(t,c[g]);for(n=0;n<t.q;n++)e[n]!=-1&&En(t,c[e[n]],n,0,0);for(f=0;f<t.r;f++)l=e[t.D[0][f]],T=e[t.D[1][f]],l==T&&l!=-1&&DQ(t,c[l],f,0,0,r,!1);for(L=c,s=0,y=L.length;s<y;++s)U=L[s],$0(U,1),$0(U,2);return c}function L_(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l;for(A=z(t.f,0,e),n=z(t.f,1,e),i=h(F,k,6,t.f.q,15,1),f=h(F,k,6,t.f.q,15,1),D=h(F,k,6,t.f.q,15,1),Q=h(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,U=1;r<=U;){for(L=0;L<O(t.f,i[r]);L++){if(P=_(t.f,i[r],L),r>1&&P==A){for(l=new MT(D[i[r]]),f[0]=Ot(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&&qi(t.f,P)&&(i[++U]=P,f[U]=Ot(t.f,i[r],L),D[P]=D[i[r]]+1,Q[U]=r)}++r}return null}function s_(t,e){var A,n,P,r,i,f,D,Q,U,L,s;for(A=0;A<t.k.f;A++)if(z0(t.k,A))for(D=h(F,k,6,t.k.f,15,1),f=h(F,k,6,t.k.f,15,1),Q=h(F,k,6,t.k.f,15,1),f[0]=A,D[A]=1,Q[A]=-1,i=0,U=0;i<=U;){for(P=(D[f[i]]&1)==1?1:2,L=0;L<O(t.k,f[i]);L++)if(n=Ot(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,D1(t.k,r,s),P==1?2:1),P=3-P,r=s,s=Q[s];return zn(t.k,A,!1),zn(t.k,r,!1),t.b-=2,!0}f[++U]=r,Q[r]=f[i],D[r]=D[f[i]]+1}++i}return!1}function nj(t,e,A,n,P,r){var i,f,D,Q,U,L;for(t.j=e,t.d=A,t.n=h(F,k,6,n.length,15,1),t.f=h(F,k,6,P.length,15,1),t.k=ty(t.j,!1),t.p=ty(t.j,!0),t.e=ty(t.d,!1),t.i=ty(t.d,!0),t.o=Kk(t.j),t.g=Kk(t.d),t.q=xy,Q=new Qj(e,A,t.n,t.f,r),t.a=0;fK(Q);){for(++t.a,t.c=Q.q,f=Q.r,D=yR(Q);D;)Ua(t,D),D=yR(Q);t.b=t.c,t.c<f?(i=new ij(t.j,t.d,t.n,t.f,t.c,r),U=Da(i),t.c+=i.b-i.g):(L=new Lo(t.j,t.d),U=Ks(L,ah(L,t.n,t.f))),t.q<U&&(t.q=U,sA(t.n,0,n,0,n.length),sA(t.f,0,P,0,P.length))}return t.q!=xy}function y_(t,e){var A,n,P,r,i,f,D,Q,U,L;for(r=null,D=null,i=null,ut(t.g,t.N),t.o=h(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 zA(t.g.q,t.g.r),L=h(rt,ft,6,t.g.q,16,1),P=0;P<t.g.q;P++)L[P]=!t.D[P];for(ui(t.g,Q,L,!0,null),ut(Q,t.N),Oj(t,Q,e),r=t.j,D=t.n,i=t.k,U=0,A=0;A<t.g.f;A++)t.D[A]||(t.o[A]=O(Q,U++))}if(Oj(t,t.g,e),t.p!=0){for(U=0,A=0;A<t.g.q;A++)t.D[A]||(t.j[A]=r[U],t.k[A]=i[U++]);for(U=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[U++])}}function l_(t,e){var A,n,P,r,i,f,D,Q,U;if(A=new uD,!Ql)return mt(A.a,new We(aH,2)),-999;for(mt(A.a,new We(\"Found sub-structure fragments and their contributions:\",2)),mt(A.a,new We(\"(yellow atoms carry at least one more substituent)\",2)),Q=0,D=0,r=0,U=new jD(1),P=new JA,i=0;i<hi.a.a.length;i++)u2(new GA(!1),P,F3(hi,i)),Dn(U,e),Ln(U,P),sn(U,1,U.c)>0&&(f=eg(hi,i),f<-1?Q+=f:(D+=f,++r),ZP(A,F3(hi,i),1),mt(A.a,new We(\"\"+f,3)));return r==0?-1:(n=Q+D/w.Math.sqrt(r),n=n+.0625*(r-40),t.a=A,n)}function Pj(t){Y1();var e,A,n,P,r;for(Yr.call(this,t),yb(this,N5(this)),r=(ut(this,7),this.p),this.b=h(NV,k,6,r.j.a.length,15,1),Hq(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]=T$(this,P),this.b[P]!=2&&(A=!0)),this.b[P]==2&&(e=!1);if(!e)throw At(new $w);for(this.a=h(F,k,6,this.q,15,1),n=0;n<this.a.length;n++)if(this.a[n]=-1,this.a[n]=tO(this,n),this.a[n]==0)throw At(new L7(\"Couldn't assign an atom type to atom \"+n+\" (\"+X0[this.C[n]]+\")\"))}function T_(t,e){var A,n,P,r,i,f,D,Q,U,L,s;for(r=R1(F,[D0,k],[7,6],15,[2,32],2),i=0;i<2;i++){for(A=h(F,D0,7,32,0,2),s=0,P=0;P<32;P++)if(e[i][P]!=null){for(U=e[i][P].length,A[P]=h(F,k,6,U,15,1),f=0;f<U;f++)A[P][f]=t.f[e[i][P][f]];A[P].sort(Fe(u0.prototype.gd,u0,[])),++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 h_(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l;for(r=0,A=0;A<t.V.q;A++)r0(t.V,A)&&++r;for(y=t.V.q,l=t.V.r,t.gb=qD(t.gb,t.gb.length+r),t.jb=qD(t.jb,t.jb.length+r),i=h(F,k,6,t.V.q,15,1),D=$0(t.V,1),Q=$0(t.V,2),n=0;n<y;n++)r0(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)&&DQ(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++)Ze(t.V,e,0,!1);if(t.I)for(U=t.I.a.length-1;U>=0;U--)s=N(t.I,U),s.g&&!Zt(s,62)&&mt(t.I,s.Gb())}function c_(t){var e,A,n,P,r,i,f,D;if(t.g!=null)for(i=new Dp(t),t.b=new f1,P=0;P<t.g.length;P++)n=lO(i,P),n==0?(Nb(i,P),f=Wm(t,P,2),e=Wm(t,P,1),A=Gm(t,P),f==1&&e==1&&!A&&(XG(t,P,i.a+i.f++),mt(t.b,new Ki(P,1,-1,-1))),f>0?(A&&(kh(t,P,i.i+i.g++,2),++f),mt(t.b,new Ki(P,1,-1,-1))):e>0?(A&&kh(t,P,i.a+i.f++,1),mt(t.b,new Ki(P,1,-1,-1))):A&&(kh(t,P,i.a+i.f++,1),mt(t.b,new Ki(P,1,-1,-1)))):n==1&&(Gm(t,P)?(r=MG(i,P),D=hG(i,P),mt(t.b,new Ki(P,2,r,D))):(Nb(i,P),mt(t.b,new Ki(P,1,-1,-1))))}function NQ(t){CT(),this.d=t,ut(this.d,15),this.j=new f1,this.k=h(rt,ft,6,(i8(),ml).length,16,1),this.i=h(F,k,6,ml.length,15,1),Za(this.j,t),this.i[0]=this.j.a.length,this.i[1]=-this.j.a.length,la(this.j,t),this.i[1]+=this.j.a.length,this.i[2]=-this.j.a.length,ZY(this.j,t),this.i[2]+=this.j.a.length,this.i[4]=-this.j.a.length,YW(this.j,t),this.i[4]+=this.j.a.length,this.i[5]=-this.j.a.length,y$(this.j,t),this.i[5]+=this.j.a.length,this.i[3]=-this.j.a.length,G$(this.j,t),this.i[3]+=this.j.a.length}function w_(t,e,A,n){var P,r,i,f,D,Q,U,L,s,y,l;for(i=h(F,k,6,A.q,15,1),U=h(F,k,6,A.q,15,1),Q=h(yt,wt,6,A.q,15,1),U[0]=e,D=0,L=0;D<=L;){for(l=U[D],s=0;s<A.e[l];s++)f=A.i[l][s],i[f]==0&&f!=e&&(U[++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]+B9(n,A.k[l][s]),f<e&&!t[e][f]&&(i[f]==3?t[e][f]=new _7:(y=h(F,k,6,2,15,1),y[0]=U[1],y[1]=l,t[e][f]=new $L(O9(e,f),y,(r=A.C[e],(r<(c2(),IA).length?IA[r]:2)+(P=A.C[f],P<IA.length?IA[P]:2)),Q[f],0)))));++D}}function o8(t,e){var A,n,P,r,i,f,D,Q;for(A=new RegExp(e,\"g\"),D=h(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=UA(Q,i+f[0].length,Q.length),A.lastIndex=0,r=Q;continue}D[n]=(pt(0,i,Q.length),Q.substr(0,i)),Q=UA(Q,i+f[0].length,Q.length),A.lastIndex=0,r==Q&&(D[n]=(pt(0,1,Q.length),Q.substr(0,1)),Q=(Xt(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,U,L,s,y,l,T,c,g,m;for(n=t.e[e],P=h(yt,wt,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(T=0;T<l;T++)if(r=w.Math.abs(Je(P[l],P[T])),r<.08||r>Rp){for(i=0,f=0,c=0;c<n;c++)c!=l&&c!=T&&(i+=w.Math.abs(aB(P[l],P[c])),f+=w.Math.abs(aB(P[T],P[c])));if(Q=i<f?t.k[e][l]:t.k[e][T],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++)U=t.i[e][s],L=t.k[e][s],m=CQ(t,L,U),D<m&&(!A||!(t.H[L]==257||t.H[L]==129))&&(D=m,g=L);return g}function g_(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T;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],T=t.p[2-f],U=0;U<e.j[A];U++)if(l=e.i[A][U],l!=T&&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=h(Yt,at,6,P,15,1),L=h(Yt,at,6,P,15,1),s=h(Yt,te,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 d_(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l;for(i=h(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),U=0;U<s&&!(l<i[U]);U++);for(L=s;L>U;L--)i[L]=i[L-1];i[U]=l,++s}for($e(t.b[P],P),_1(t.b[P],t.a,A[P]),Q=y;Q<t.s;Q++)_1(t.b[P],t.a+1,0);for(f=0;f<y;f++)_1(t.b[P],t.a+1,i[f])}for(n=e.f;n<t.b.length;n++)for($e(t.b[n],n),_1(t.b[n],t.a,e.f+1),f=0;f<t.s;f++)_1(t.b[n],t.a+1,0)}function Os(t){var e,A,n,P,r,i,f,D,Q,U;switch(e=null,U=t.c.length,t.e){case 1:for(e=h(Yt,at,6,2*U,15,1),n=0;n<U;n++)e[n]=t.c[n],e[U+n]=t.c[n];return e;case 2:for(P=t.a[0]==0?1:0,r=t.a[U-1]==180?U-1:U,Q=r-P,e=h(Yt,at,6,U+Q,15,1),i=0;i<U;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[U-1]==90?U-1:U,Q=r-P,e=h(Yt,at,6,2*U+2*Q,15,1),D=0;D<U;D++)e[D]=t.c[D],e[U+Q+D]=t.c[D];for(A=P;A<r;A++)e[U+Q-1-A+P]=t.c[A],e[e.length-1-A+P]=t.c[A];return e;default:return t.c}}function Ln(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(o0(t.g,n),{l:ge,m:0,h:3}),0)&&(t.N=15);for(i=0;i<t.g.g;i++)(ee(t.g,i)&h8)!=0&&(t.N=15);for(t.L&&t.N!=7&&ut(t.H,t.N),t.p=0,t.q=0,t.D=h(rt,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++)zn(t.g,A,t.D[A]);t.f=h(F,k,6,t.g.q,15,1),t.d=n9(t.g,t.f,!0,!1)}}function rj(t,e){yg();var A,n,P,r,i,f;r=new Vs(t);try{if(f=new f3,rA(f,nM+B8),Si(f.a,e??\"\"),rA(f,B8+(\"\"+B8)),rA(f,qy+M5(t,!0,11)),rA(f,B8),P=r.g.a.length,n=r.f.a.length,rA(f,pp+P+\" \"+n+B8),i=cX(r),P>0){for(rA(f,iM+B8),A=0;A<r.g.a.length;A++)rA(f,rv(N(r.g,A),i));rA(f,\"M  V30 END REACTANT\"+B8)}if(n>0){for(rA(f,DM+B8),A=0;A<r.f.a.length;A++)rA(f,rv(N(r.f,A),i));rA(f,\"M  V30 END PRODUCT\"+B8)}rA(f,D9+B8),this.a=f.a}catch(D){if(D=t0(D),Zt(D,19))x1();else throw At(D)}}function B_(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l;for(D=null,l=On(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=h(rt,ft,6,t.R.g,16,1)),r==s.length){for(Q=-1,U=It,i=0;i<s.length;i++)U>t.B[y[i]]&&(U=t.B[y[i]],Q=i);for(;r>0;)D[y[Q]]=!0,Q=Do(Q+2,s.length),r-=2}else{for(f=0;ys(t,s[f]);)++f;for(;!ys(t,s[f]);)f=Do(f+1,s.length);for(;r>0;)for(D[y[f]]=!0,f=Do(f+2,s.length),r-=2;!ys(t,s[f]);)f=Do(f+1,s.length)}}return D}function v_(t){var e,A,n,P,r,i,f,D,Q,U,L,s;for(t.b=oA(t.c),r=WV,f=0,Q=r.length;f<Q;++f)n=r[f],Gt(t.b,n);for(s=t.b.Ec(),s.setEditable(!0),zx(t.b,\"\"+vt(t.e.c)),t.a=oA(t.c),P=_V,i=0,D=P.length;i<D;++i)n=P[i],Gt(t.a,n);for(U=0,A=0;A<cl.length;A++)if(t.e.d==cl[A]){U=A;break}_t(t.a,U),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]),_o(t.c,e,L),f0(t.c,oe(t.c,\"Text size:\"),1,1),f0(t.c,t.b,3,1),f0(t.c,oe(t.c,\"Text style:\"),1,3),f0(t.c,t.a,3,3),t.d=Gu(t.c,20,3),O8(t.d,t.e.e),he(t.c,t.d,1,5,3,5)}function F_(t,e){var A,n,P;return n=Fk(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 m_(t,e){var A,n;if(e.j==1){if(A=Kh(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,MD(t.n)}else if(e.j==2){if(t.k==-1)return;if(n=Kh(t,e),n!=t.k||t.k==19&&(t.a.U&4)==0||t.k==21&&(t.a.U&8)==0){t.k=-1,MD(t.n);return}if(t.k=-1,n==0||n==1||n==17){MD(t.n),UK(t.a,n);return}t.b=n,MD(t.n),t.b==20?au(t.a,t.d==0?101:t.d==1?103:102):t.b==33?XF(t.a,-1,new X7(t,n)):au(t.a,n)}else(e.j==6||e.j==5)&&(A=Kh(t,e),A==t.k&&(A=-1),A!=t.f&&(t.f=A,MD(t.n)))}function fi(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&&i0(t.p,A))||(t.p&&A<t.f?iA(t.p,A):0)<5)||(n=t.D[1][e],!(n<t.f&&i0(t.p,n))||(t.p&&n<t.f?iA(t.p,n):0)<5)?!1:(P=QF(t,A,n),r=QF(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=Vk(t,A,n),f=Vk(t,n,A),P==2&&f>=1||r==2&&i>=1||i==2&&(r>=1||f>=1)||f==2&&(P>=1||i>=1)))}function k_(t){var e,A,n,P,r,i,f;for(t.L=!0,n=Gh(t),t.P&&Q2(t.P,t.f)&&(n=Gh(t)),i2(t,!1)&&s2(t),i=!0;t.U<t.R.f&&i;){for(P=T_(t,n),e=0;e<t.R.f;e++)$e(t.e[e],e),_1(t.e[e],t.c,t.f[e]),_1(t.e[e],20,0),!t.cb[e]&&t.bb[e]!=0&&ue(t.e[e],O1(t.bb[e]<<18,M1(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=Wn(t),t.U==r)break;t.U=r,i=!1,t.P&&Q2(t.P,t.f)&&(i=!0,n=Gh(t)),i2(t,!1)&&(i=!0,s2(t))}}function b_(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l;for(e=0;e<t.j.f;e++)if(t.d[e])for(i=!1,f=h(F,k,6,t.j.f,15,1),l=h(F,k,6,t.j.f,15,1),D=h(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],U=0;U<O(t.j,r)&&!i;U++)if(L=(D[r]&1)==1^dt(t.j,Ot(t.j,r,U))>1,n=_(t.j,r,U),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=D1(t.j,n,y),t.e[A]&&(t.e[A]=!1,--t.c),uT(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 SA(t,e){Y1();var A,n,P,r,i;if((e&256)!=0&&A1(t,\"?\"))return 0;for(n=1;n<=128;n++)if(!A1(t,$1)&&K9(t,X0[n]))return n;if((e&2)!=0){for(P=129;P<=144;P++)if(K9(t,X0[P]))return P}if((e&4)!=0){for(r=146;r<=148;r++)if(K9(t,X0[r]))return r}if((e&1)!=0){for(i=151;i<=152;i++)if(K9(t,X0[i]))return i}if((e&32)!=0&&K9(t,X0[153]))return 153;if((e&8)!=0&&K9(t,X0[154]))return 154;if((e&16)!=0&&K9(t,X0[145]))return 145;if((e&128)!=0&&K9(t,X0[159]))return 159;if((e&64)!=0){for(A=171;A<=190;A++)if(K9(t,X0[A]))return A}return 0}function R_(t,e){var A,n,P,r,i,f,D;if(t.db[e]==1||t.db[e]==2){if(f=!1,a1(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=h(F,k,6,2,15,1),r=0,D=0;D<O(t.R,A);D++)pA(t.R,A,D)==1&&(P[r++]=_(t.R,A,D));t.f[P[0]]>t.f[P[1]]^A6(t,A,P[0],P[1])&&(f=!f)}}catch(Q){if(Q=t0(Q),Zt(Q,19)){t.$[e]=3;return}else throw At(Q)}else{try{n=CK(t,e)}catch(Q){if(Q=t0(Q),Zt(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 j_(t,e,A,n,P){var r,i,f,D,Q,U,L,s,y,l,T;for(L=-1,U=0;U<t.j[A];U++)t.n[A][U]==2&&(L=t.i[A][U]);for(r=h(F,k,6,n,15,1),T=h(F,k,6,4,15,1),T[0]=L,T[1]=A,T[2]=e,D=0,Q=0;Q<t.e[e];Q++)i=t.i[e][Q],t.C[i]==1&&(D==0&&(T[3]=i),r[D++]=i);y=!(A<t.f&&i0(t.p,A))&&n==1?1:2,l=h(Yt,at,6,y,15,1),f=h(Yt,at,6,y,15,1),s=R1(Yt,[te,at],[16,6],15,[y,2],2),!(A<t.f&&i0(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 xL(l,f,s,T,r,1))}function be(t){var e,A,n,P,r;return t.g!=null?t.g:t.a<32?(t.g=ta(E1(t.f),vt(t.e)),t.g):(P=t6((!t.c&&(t.c=kP(E1(t.f))),t.c),0),t.e==0?P:(e=(!t.c&&(t.c=kP(E1(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?mD(r,A-vt(t.e),\".\"):(lF(r,e-1,e-1,\"0.\"),mD(r,e+1,tP(HU,0,-vt(n)-1))):(A-e>=1&&(mD(r,e,\".\"),++A),mD(r,A,\"E\"),n>0&&mD(r,++A,\"+\"),mD(r,++A,\"\"+Te(E1(n)))),t.g=r.a,t.g))}function p_(t){var e,A,n,P,r,i,f;if(n=new uD,mt(n.a,new We(\"Solubility values are estimated applying an atom-type based increment system.\",2)),mt(n.a,new We($H,2)),mt(n.a,new We(A4,2)),mt(n.a,new We(\"Base value = -0.530\",2)),A=h(F,k,6,Kf.length,15,1),t)for(Qi(t),ut(t,7),e=0;e<t.f;e++){f=-1;try{f=ny(t,e,2144)}catch(D){if(D=t0(D),!Zt(D,19))throw At(D)}for(i=0;i<Kf.length;i++)if(P0(Ul[i],f)){++A[i];break}}for(P=new Pu(\"#0.000\"),r=0;r<Kf.length;r++)A[r]!=0&&ZP(n,\"\"+A[r]+\" * \"+ng(P,Kf[r])+\"   AtomType: 0x\"+Nh(Ul[r]),2);return n}function N5(t){var e,A,n,P,r,i,f,D;for(f=h(rt,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]&g8)==0&&(t.t==null||t.t[A]==null);for(D=h(rt,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 C_(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g;for(g=0;g<t.e.length;g++)if(t.e[g]){for(c=!1,n=N(t.j,g),r=0,f=n.length;r<f;++r)e=n[r],t.a[e]|=Q0,aY(t,e)&&(c=!0);for(U=N(t.k,g),s=0,T=U.length;s<T;++s)D=U[s],t.c[D]|=Q0;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(c){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 Wt(t.b);y.a<y.c.a.length;)D=t1(y).a,t.c[D]=0}function AP(t){var e,A,n,P,r,i,f,D,Q;e=null;try{for(e=new nn(new Fi((P=_D(t),c0(),P))),D=c1(v1(K1(e)),o1,It),n=o8(v1(K1(e)),\",\"),Q=R1(uP,[nA,A0],[8,1],5,[D,n.length],2),i=0;(r=K1(e))!=null&&i<D;i++)for(f=o8(v1(r),\",\"),A=0;A<n.length;A++)switch(Yi(n[A],0)){case 105:Q[i][A]=k1(c1(v1(f[A]),o1,It));break;case 102:Q[i][A]=Le(v1(f[A]));break;case 99:Q[i][A]=FG(Yi(ef(ef(v1(f[A]),\"'\"),'\"'),0))}return Q}catch(U){if(U=t0(U),Zt(U,75))x1();else throw At(U)}return R1(uP,[nA,A0],[8,1],5,[1,1],2)}function M_(t,e,A,n,P){var r,i;return!(K(t.j,A)==6&&w.Math.abs(O(t.j,A)-O(t.d,P))>1||K(t.j,A)==8&&O(t.j,A)==2&&Zr(t.j,e,8)>Zr(t.d,n,8)||K(t.d,P)==8&&O(t.d,P)==2&&Zr(t.j,e,8)<Zr(t.d,n,8)||K(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)||K(t.j,A)==7&&Zr(t.j,e,7)<Zr(t.d,n,7)||K(t.d,P)==7&&Zr(t.j,e,7)>Zr(t.d,n,7)||pr(t.j,D1(t.j,e,A))==3^pr(t.d,D1(t.d,n,P))==3)}function Gs(t,e){_r();var A,n,P,r,i,f,D,Q,U,L,s;return A=(xA[0]*((e&iP)>>16)+xA[1]*((e&PP)>>8)+xA[2]*(e&255))/255,i=(xA[0]*((t&iP)>>16)+xA[1]*((t&PP)>>8)+xA[2]*(t&255))/255,P=w.Math.abs(A-i),P>jf||(f=(mQ(),jR(((e&iP)>>16)/255,((e&PP)>>8)/255,(e&255)/255,null)),D=jR(((t&iP)>>16)/255,((t&PP)>>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),U=w.Math.cos(Q1*Q*3),L=jf*w.Math.max(s,w.Math.max(n,U)),P>L)?t:(r=i>A?i+L>1:i-L>0,n5(t,r?A-L:A+L))}function Ff(t,e,A){var n,P,r,i;if(ut(t.j,1),i=new Qo(t.j,1),Q$(t,e,i),t.c==0)return!0;if(A)for(P=0;P<t.j.f;P++)t.d[P]&&K(t.j,P)==7&&(t.f[P]||O(t.j,P)==3&&!t.g[P])&&E0(t.j,P,1);for(t.a=!1,Oz(t,A),t.j.K&&wW(t),Ta(t,i),RG(t,i),bY(t),A&&K$(t),jQ(t);A$(t,i,A);)jQ(t);for(;YX(t,i,A);)jQ(t);for(;KW(t,i,A);)jQ(t);for(;t.c!=0;)for(r=0;r<t.j.g;r++)t.e[r]&&(n2(t,r),jQ(t));for(A&&x_(t,A),t.b-t.k>=2&&b_(t),n=0;n<t.j.f;n++)t.d[n]&&xt(t.j,n)!=0&&(A&&(p1(t.j,n)==1&&tA(t.j,n)||p1(t.j,n)==-1&&K(t.j,n)==5)?E0(t.j,n,0):Ne(t.j,n,32),++t.k);return t.b==t.k}function ij(t,e,A,n,P,r){var i,f,D,Q,U,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,k1(D)),s||(s=new NT(this),ze(Q,k1(D),s)),s.d=KF(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,k1(D)),s||(s=new NT(this),ze(Q,k1(D),s)),s.c=KF(i,s.c),s.c.length<=s.d.length&&(s.a=s.c.length));for(this.a=new f1,y=(L=new fD(Q).a.$c().Tb(),new DD(L));y.a.ad();)s=(U=y.a.bd(),U.ed()),u_(s)||mt(this.a,s)}function fj(t,e){var A,n,P,r,i;r=0,YA(t.d)?(P=B0(t.p),A=B0(t.o),r|=P<<9,r|=A<<13,r&=-128,w0(t.u,e,1)):(YA(t.k)&&(r|=1),YA(t.c)&&(r|=2),YA(t.n)&&(r|=4),YA(t.i)&&(r|=32),YA(t.j)&&(r|=64),YA(t.b)&&(r|=8),YA(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|=qA):B0(t.q)==5&&(_e(t.u,e)||(r|=fP))),B0(t.r)!=0&&(i=B0(t.r)+2,i>7&&(i-=7),n=pr(t.u,e),(i<=2||i!=n)&&(r|=i<<17)),YA(t.e)&&(r|=Ef),YA(t.f)&&(r|=h8)),Ge(t.u,e,oi,!1),Ge(t.u,e,r,!0),Cs(t.u,e)}function Js(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T;for(P=h(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:rn((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(U=0;U<2;U++)if(e.D[U][f]==n){if(l=e.D[1-U][f],T=e.u[l]&3,L=!1,T==1||T==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,T==1?2:1,(e.u[l]&4)!=0)}}for(i=0;i<e.r;i++)er(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 Dj(t,e,A,n){var P,r,i,f,D,Q,U,L,s,y,l,T,c,g;this.g=e,this.b=e.a[A],this.d=e.a[n],this.a=A,this.c=n,P=(i=GF(t.p,this.b),f=GF(t.p,this.d),D=PL(t.p,this.b),Q=PL(t.p,this.d),U=(i-f)/(i+f),.5*(i+f)*(1+(D==68||Q==68?0:.2*(1-w.Math.exp(-12*U*U))))),r=(L=NB(t.p,this.b),s=NB(t.p,this.d),y=xB(t.p,this.b),l=xB(t.p,this.d),T=OB(t.p,this.b),c=OB(t.p,this.d),g=P*P,181.16*L*s*y*l/((w.Math.sqrt(y/T)+w.Math.sqrt(l/c))*g*g*g)),this.e=PL(t.p,this.b),this.f=PL(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 H_(t,e,A,n){var P,r,i,f,D,Q,U,L,s,y,l,T;return U=_d(t.a,e,D1(e,A,n)),r=e.a[A],f=e.a[n],r>f&&(r=(l=k1(f),k1(f=r),l).a),s=_9(B(d(F,1),k,6,15,[1,2,0]),B(d(F,1),k,6,15,[r,f,U]),t),s>=0?j0(t.b[s][3]):(P=e.C[A],i=e.C[n],P>i&&(P=(y=k1(i),k1(i=P),y).a),T=y2(t,e,A,n),Q=_9(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(UI(t.a.c,Q)/T,6),QI(t.a.c,Q)*L):(D=_9(B(d(F,1),k,6,15,[0,1]),B(d(F,1),k,6,15,[Tk(P),Tk(i)]),t.a.j),w.Math.pow(10,-(T-Ig(t.a.j,D,2))/Ig(t.a.j,D,3))))}function V_(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E;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,U=e.m>>17|(e.h&255)<<5,L=(e.h&1048320)>>8,S=A*f,p=n*f,x=P*f,a=r*f,E=i*f,D!=0&&(p+=A*D,x+=n*D,a+=P*D,E+=r*D),Q!=0&&(x+=A*Q,a+=n*Q,E+=P*Q),U!=0&&(a+=A*U,E+=n*U),L!=0&&(E+=A*L),y=S&x0,l=(p&511)<<13,s=y+l,c=S>>22,g=p>>9,m=(x&262143)<<4,v=(a&31)<<17,T=c+g+m+v,b=x>>18,j=a>>5,C=(E&4095)<<8,R=b+j+C,T+=s>>22,s&=x0,R+=T>>22,T&=x0,R&=aA,S0(s,T,R)}function E_(t,e){var A,n,P,r,i,f,D,Q,U,L,s;for(D5(e,t.j),r=0,n=0;n<t.d.q;n++)i=e.a==null?NaN:e.a[n],i>1e3&&mX(t,e,n)&&++r;if(r==0){for(s=16,P=0;P<t.d.q;P++)s>Mt(t.d,P)&&(e.a==null?NaN:e.a[P])>(U=w.Math.min(4,Mt(t.d,P)),400+U*2e3/5)&&(s=Mt(t.d,P));if(s!=16)for(A=0;A<t.d.q;A++)s==Mt(t.d,A)&&(e.a==null?NaN:e.a[A])>(Q=w.Math.min(4,Mt(t.d,A)),400+Q*2e3/5)&&(f=e.k[A],Mt(t.d,A)==1?(D=J0(e,_(t.d,A,0)),I8(f,2*(D.a-f.a),2*(D.b-f.b),2*(D.c-f.c))):(L=Mt(t.d,A)==0?16:8,I8(f,L*jn(t.f)-L/2,L*jn(t.f)-L/2,L*jn(t.f)-L/2)),++r)}return r!=0&&po(e),r}function uj(t){var e,A,n,P,r,i,f;for(i=h(F,k,6,t.U+1,15,1),A=0;A<t.R.f;A++)Ae(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++)Ae(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 S_(t,e){var A,n,P,r,i,f,D,Q,U,L;for(t.j=0,P=0;P<e.g.a.length+e.f.a.length;P++)for(D=Pv(t.c,P),A=0;A<D.f;A++)gt(V(D.B[A],Pe),0)?D.w[A]=0:t.j<w.Math.abs(D.w[A])&&(t.j=w.Math.abs(D.w[A]));for(L=h(rt,ft,6,t.j+1,16,1),r=0;r<e.g.a.length;r++)for(U=N(e.g,r),A=0;A<U.f;A++)f=w.Math.abs(U.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(U=N(e.g,n),A=0;A<U.f;A++)f=w.Math.abs(U.w[A]),f!=0&&L[f]&&(U.w[A]=0)}function q_(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m;for(l=null,l=new Ni,Dn(l,t.f),i=h(rt,ft,6,t.f.f,16,1),c=e.Tb();c.ad();)if(T=c.bd(),y=null,m=T.b,Ln(l,m),sn(l,4,8)!=0&&(y=l.F),y)for(s=new Wt(y);s.a<s.c.a.length;){for(L=t1(s),g=0,n=L,P=0,r=n.length;P<r;++P)A=n[P],i[A]&&++g;if(g<=1){for(D=T.c,t.a?D=!1:t.a=!0,Q=new MP(t.f,L.length,D),U=0;U<L.length;U++)A=L[U],D&&zn(t.f,A,!0),Q.k[U]=256,Q.e[U]=A,Q.a[U]=kt(T.b,U)/T.a,Q.b[U]=jt(T.b,U)/T.a,i[A]=!0,t.b[A]=!0;for(f=0;f<m.g;f++)t.c[D1(t.f,L[m.D[0][f]],L[m.D[1][f]])]=!0;pP(t.d,Q)}}return i}function Qj(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,mZ(this),rb(this),this.k=pZ(this),this.j=MK(this.k),this.r=0,Q=(f=new N8(new x8(new w9(this.k[0]).a).b),new g9(f));p9(Q.a.a);)D=(i=Br(Q.a),i.dd()),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=h(F,k,6,this.D.f,15,1),this.w=h(F,k,6,this.u.f,15,1),this.H=h(rt,ft,6,n9(this.D,this.G,!1,!1),16,1),this.A=h(rt,ft,6,n9(this.u,this.w,!1,!1),16,1),this.q=gR(this),this.g=7,this.K=0}function Uj(t,e,A,n){var P,r,i,f,D,Q,U,L,s,y,l,T,c;if(t.o&&I$(t,e),r=null,t.e!=null)for(f=t.e,Q=0,L=f.length;Q<L;++Q)i=f[Q],L2(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],L2(i,e,null,0),r=r?dQ(r,i.v):i.v;if(t.g)for(l=new Wt(t.g);l.a<l.c.a.length;)y=t1(l),T=y.Jb(e),Nu(t.p,T),r=r?dQ(r,T):T;if(!r)return null;if(P=C5(t),c=new Ws(r,A,P,n),!(c.c==1&&c.a==0&&c.b==0)){if(Eu(c,t.p),t.e!=null)for(D=t.e,U=0,s=D.length;U<s;++U)i=D[U],qo(i,c);if(t.b!=null)for(f=t.b,Q=0,L=f.length;Q<L;++Q)i=f[Q],qo(i,c);return c}return null}function zs(t,e,A,n){var P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m;for(D=JE[n],f=1,y=n==4?w.Math.exp(w.Math.log(.01)/D):1,P=t.d.q*t.d.q,s=h(yt,wt,6,10,15,1),L=0,U=0;U<D&&!(gt(t.n,0)&&(x1(),S1(E1(Date.now()),t.n)));U++){for(n!=0&&U%10==0&&na(t,e),Q=0;Q<P&&!(gt(t.n,0)&&(x1(),S1(E1(Date.now()),t.n)));Q++)l=null,l=N(t.j,vt(jn(t.f)*t.j.a.length)),l.g&&!t.k[l.rd()]&&(i=l.qd(e,f),i&&po(e));if(D5(e,t.j),s[L++]=e.e,L==10&&(L=0),U>10){for(r=0,c=s,g=0,m=c.length;g<m;++g)T=c[g],r+=T;if(r/=10,e.e>r)break}A.e>e.e&&(WD(A,e),lh(A,e)),f*=y}e.e>A.e&&(WD(e,A),lh(e,A))}function oj(){oj=B1,gE=B(d(yt,1),wt,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,Q9,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,Q9,Q9,Gf,Gf,Q9,12.22,15.56,Gf,wA,10,Q9,ie,16.66,Gf,15.56,Q9,15.56,Gf,Q9,12.22,Gf,Q9,18.88,Q9,Q9,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,Gf,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,U,L;if(uN(t.C[e]))return 0;if(t.C[e]==1)return t.j[e]==0?0:ei(t.C[t.i[e][0]])?-1:1;if(L=t.s[e],D=t.e[e]-e0(t,e)+xt(t,e),t.C[e]!=1&&t.C[e]!=15&&(ei(t.C[e])?L+=D:L-=D),t.j[e]==0)return L;for(U=0;U<t.j[e];U++)r=t.i[e][U],A=G8(t,t.k[e][U])?1:t.n[e][U],ei(t.C[e])?ei(t.C[r])||(L+=A):ei(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&&lI(t.p,e)){for(n=0,P=0,f=0,Q=0;Q<t.j[e];Q++)G8(t,t.k[e][Q])&&(i=t.C[t.i[e][Q]],i==6?++P:ar(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 O5(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l;for(l=h(F,k,6,16,15,1),A=h(yt,wt,6,16,15,1),r=h(yt,wt,6,2,15,1),n=0,U=0;U<2;U++)for(P=t.D[U][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]&hn)!=0?1:4),(t.F[e]&64)!=0&&(t.F[D]&64)!=0&&(s=KL(t.p,e,D),s!=-1&&(l[n]+=u3(t.p,s)?64:6)),A[n++]=kA(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]+Q1,i=!1):(r[1]=r[0],r[0]=r[1]-Q1,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 Lj(t){var e;if(this.e=t.e,t.a!=null)for(this.a=h(Yt,at,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=R1(Yt,[te,at],[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=h(Yt,at,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=h(q,I,6,t.b.length,15,1),e=0;e<this.b.length;e++)this.b[e]=t.b[this.b.length-e-1]}function x_(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T;for(A=0;A<t.j.f;A++)if(ut(t.j,1),K(t.j,A)==7&&p1(t.j,A)==1&&a1(t.j,A)==1&&!mz(t,A,e))for(f=!1,D=h(F,k,6,t.j.f,15,1),T=h(F,k,6,t.j.f,15,1),Q=h(F,k,6,t.j.f,15,1),D[0]=A,T[A]=-1,Q[A]=1,r=0,U=0;r<=U&&!f;){for(i=D[r],L=0;L<O(t.j,i)&&!f;L++)if(s=(Q[i]&1)==0^dt(t.j,Ot(t.j,i,L))>1,P=_(t.j,i,L),Q[P]==0&&s)if(K(t.j,P)==7&&a1(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=D1(t.j,P,l),uT(t.j,n,dt(t.j,n)==1?2:dt(t.j,n)-1),P=l,l=T[P];f=!0}}else D[++U]=P,T[P]=i,Q[P]=Q[i]+1;++r}}function N_(t,e){if(e<128)t.push((e&127)<<24>>24);else if(e<I1)t.push((e>>6&31|192)<<24>>24),t.push((e&63|128)<<24>>24);else if(e<Q0)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<qA)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 C8(\"Character out of range: \"+e))}function O_(t,e,A){var n,P,r,i,f;return K(t.R,e)!=6&&K(t.R,e)!=7||(P=_(t.R,e,0),r=_(t.R,e,1),a1(t.R,P)!=1||a1(t.R,r)!=1)||O(t.R,P)==1||O(t.R,r)==1||Mt(t.R,P)>3||Mt(t.R,r)>3||(i=new gf(t.R,t.f,e,P),i.f&&A==1)||(f=new gf(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?rY(t,i,f):Pz(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 Ys(t,e,A){var n,P,r,i,f,D,Q,U,L,s;if(Q=t.K[e],i=t.n[A],(ee(t.g,A)&Ef)!=0){if(D=Lu(t.H,e),P=Lu(t.g,A),r=ee(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=(ee(t.g,A)&SP)>>17,s!=0){if(t.H.K&&s==(ee(t.H,A)&SP)>>17)return!0;if(s<=2)return U=pr(t.H,e),s==1?U>=8&&U<=12:U>=12;for(n=!1,L=On(t.H),f=0;f<L.j.a.length;f++)if(N(L.k,f).length==s&&Af(L,f,e)){n=!0;break}if(!n)return!1}return!0}function G_(t,e,A,n,P,r,i,f,D,Q){var U,L,s,y,l,T,c,g,m,v,R,b,j,C;t!=e&&(U=O9(t,e),!(D[U[0]][U[1]]&&D[U[0]][U[1]].a.length==1)&&(C=.866,L=.5,(Q.F[i]&64)!=0&&(R=Q.p&&i<Q.g?yP(Q.p,i):0,R<6&&(C=0,L=1)),y=f.a[i]-f.a[A]*w.Math.cos(P)-f.a[n]*w.Math.cos(r),b=f.a[A]*w.Math.sin(P),j=f.a[n]*w.Math.sin(r),l=b+j,T=b-j*L,c=j*C,m=w.Math.sqrt(y*y+T*T+c*c),g=w.Math.sqrt(y*y+l*l),v=h(F,k,6,2,15,1),v[0]=Q.D[0][i],v[1]=Q.D[1][i],s=D[U[0]][U[1]],s?(s.a[0]=w.Math.min(s.a[0],m),s.a[1]=w.Math.min(s.a[1],g)):D[U[0]][U[1]]=new $L(U,v,m,g,3)))}function Ar(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 aD),(t.e&2)!=0&&g5(e,!1),t.f=e,ut(t.f,7),t.d=new _w,t.b=h(rt,ft,6,t.f.q,16,1),t.c=h(rt,ft,6,t.f.r,16,1),t.i=h(F,k,6,t.f.q,15,1),A=0;A<t.f.q;A++)t.i[A]=p1(t.f,A);for((t.e&12)!=0&&h$(t),(t.e&1)==0&&mU&&q_(t,mU),Ka(t),wj(t),QW(t),wj(t),r=new Wt(t.d);r.a<r.c.a.length;)n=t1(r),IX(n);for(i$(t),H$(t),Rz(t),jN(t),ax(t),tN(t),P=new Wt(t.d);P.a<P.c.a.length;)for(n=t1(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]),hP(t.f,n.e[i],0);f&&(sD(t.f,D),Lf(t.f)),t.a&&nT(t.f)}function Ks(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c;for(L=0,i=h(rt,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=h(rt,ft,6,t.a.g,16,1),c=0;c<t.b.g;c++)if(l=z(t.b,0,c),T=z(t.b,1,c),!(t.b.K&&(Qe(t.b,l)||Qe(t.b,T)))){if(f=e[l],D=e[T],mN(t.b,c),f==-1||D==-1){(f!=-1||D!=-1)&&(L+=F5(t.b,c));continue}if(U=D1(t.a,f,D),U==-1){L+=F5(t.b,c);continue}s[U]=!0,L+=dv(t.b,c)==dv(t.a,U)?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+=F5(t.a,Q));for(y=0;y<t.b.f;y++)d0(t.b,y)!=0&&(L+=FY(t,y,e));return-L}function J_(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|=s8),t.noAtomCustomLabels&&(e|=Q0),t.showSymmetryAny&&(e|=768),t.showSymmetrySimple&&(e|=256),t.showSymmetryStereoHeterotopicity&&(e|=512),t.noImplicitAtomLabelColors&&(e|=re),t.noStereoProblem&&(e|=I1),t.noColorOnESRAndCIP&&(e|=C0),t.noImplicitHydrogen&&(e|=ge),t.drawBondsInGray&&(e|=Sn),e}function Di(t,e,A,n,P){var r,i,f,D,Q,U,L,s,y,l;for(s=!1,P.a=0,P.b=0,n>0?r=y6:r=l6,l=Y0(t.L,e,A),U=0;U<O(t.L,e);U++)i=Ot(t.L,e,U),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<Q1&&(s=!0),D>y6&&(D=y6),D<.523598776&&(D=.523598776),D<=r&&(r=D,Q=t.T*w.Math.tan(r-bA)/2,P.a=-(Q*w.Math.sin(f)),P.b=-(Q*w.Math.cos(f)))):(D>=Q1&&(s=!0),D<l6&&(D=l6),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 z_(t,e,A){var n,P,r,i,f,D;for(n=h(F,k,6,4,15,1),f=0;f<Mt(t.R,e);f++)n[f]=_(t.R,e,A[f]);for(Mt(t.R,e)==3&&(n[3]=e),P=R1(yt,[h0,wt],[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]=jt(t.R,n[i+1])-jt(t.R,n[0]),P[i][2]=vA(t.R,n[i+1])-vA(t.R,n[0]);return D=h(yt,wt,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 sj(t,e){var A,n,P,r,i,f,D,Q,U,L,s;for(ut(t,7),ut(e,7),this.c=t,this.d=new pi,n=0;n<t.g;n++)X8(this.d,new Q5(t,n));for(A=0;A<e.g;A++)U=new Q5(e,A),D=(f=a9(this.d,U),f<0?-1:f),D==-1?(U.i=(t9(),yl),X8(this.d,U)):pX(kr(this.d,D),U);for(i=this.d.d.a.length-1;i>=0;i--)U=kr(this.d,i),U.i!=(t9(),Tl)?kr(this.d,i).i==bU&&aU(this.d,i):U.i=ll;for(this.b=h(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])-G1(t,r)-(L=Cn(e,Q),L+WA(e,Q,L,e.C[Q])-G1(e,Q))),this.b[r]=P>0?P:0;break}this.e=new Ni}function yj(t,e,A,n,P){var r,i,f,D,Q,U,L,s,y,l,T;for(f=0;f<A;f++)if(n[f]!=-1&&t.e[f]>3&&(t.u[f]&Tn)!=0){for(T=0,s=-1,L=-1,U=0;U<t.e[f];U++)P[t.k[f][U]]!=-1?++T:t.n[f][U]==1&&Cr(t,t.k[f][U])&&t.D[0][t.k[f][U]]==f&&(s=t.k[f][U],L=t.i[f][U]);if(s!=-1&&T>=3){for(r=kA(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&&(!Cr(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&&(BD(e,1,D,n[t.D[0][l]]),BD(e,0,D,n[f])))}}}function lj(t){var e,A,n,P;for(KD.call(this),e=0;e!=-1&&(A=t.indexOf('=\"',e),A!=-1);)if(n=(pt(e+1,A,t.length),t.substr(e+1,A-(e+1))),e=t.indexOf('\"',A+2),P=e==-1?(Xt(A+1,t.length+1),t.substr(A+1)):(pt(A+1,e,t.length),t.substr(A+1,e-(A+1))),A1(n,\"x1\"))try{this.i[0].a=Qn(P)}catch(r){if(r=t0(r),!Zt(r,40))throw At(r)}else if(A1(n,\"y1\"))try{this.i[0].b=Qn(P)}catch(r){if(r=t0(r),!Zt(r,40))throw At(r)}else if(A1(n,\"x2\"))try{this.i[1].a=Qn(P)}catch(r){if(r=t0(r),!Zt(r,40))throw At(r)}else if(A1(n,\"y2\"))try{this.i[1].b=Qn(P)}catch(r){if(r=t0(r),!Zt(r,40))throw At(r)}}function G5(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==l8&&e.m==0&&e.l==0)return pJ(t,A);if(D=!1,e.h>>19!=0&&(e=Wr(e),D=!D),i=FX(e),r=!1,P=!1,n=!1,t.h==l8&&t.m==0&&t.l==0)if(P=!0,r=!0,i==-1)t=cg((Xr(),tc)),n=!0,D=!D;else return f=u5(t,i),D&&WL(f),A&&(In=S0(0,0,0)),f;else t.h>>19!=0&&(r=!0,t=Wr(t),n=!0,D=!D);return i!=-1?xG(t,i,D,r,A):jh(t,e)<0?(A&&(r?In=Wr(t):In=S0(t.l,t.m,t.h)),S0(0,0,0)):AW(n?t:S0(t.l,t.m,t.h),e,D,r,P,A)}function T2(t,e){var A,n,P,r,i,f,D,Q,U,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],h1),n=V(e.a[0],h1),i==D?(U=O1(A,n),l=zt(U),y=zt(DA(U,32)),y==0?new mA(i,l):new Ue(i,2,B(d(F,1),k,6,15,[l,y]))):(ke(),hu(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(),y9;P==1?(s=i,L=hL(t.a,r,e.a,f)):(s=D,L=hL(e.a,f,t.a,r))}return Q=new Ue(s,L.length,L),Rn(Q),Q}function Xs(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=D1(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(a1(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&&pA(t.i,e,f)==2){P=Ot(t.i,e,f);break}for(r=-1,i=0;i<O(t.i,A);i++)if(_(t.i,A,i)!=e&&pA(t.i,A,i)==2){r=Ot(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 Y_(t){var e,A,n,P,r,i,f;r=ee(t.u,t.a),n=l1(t.u,t.a)==8||G8(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&Ef)!=0&&uA(t.e,!0),(r&h8)!=0&&uA(t.f,!0),f=r&384,e=r&AU,f==128?_t(t.q,1):e==qA?_t(t.q,4):f==256?_t(t.q,e==0?2:3):_t(t.q,e==0?0:5),i=(r&SP)>>17,_t(t.r,i==0?0:i<=2?i+5:i-2),(r&y8)!=0?(uA(t.d,!0),P=(r&7680)>>9,A=(r&wy)>>13,_t(t.p,P),Ah(t,P),_t(t.o,A)):_t(t.o,0),Tb(t)}function Tj(t,e,A,n,P){var r,i,f,D,Q,U,L,s;for(ZF.call(this,t),this.f=P,this.g=A,this.i=h(Yt,te,16,A.length,0,2),this.d=h(Yt,te,16,A.length,0,2),this.e=h(yt,h0,15,A.length,0,2),f=h(Yt,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]=h(yt,wt,6,this.i[i].length,15,1),f[i]=A[i].e;for(this.a=h(F,k,6,A.length,15,1),U=h(rt,ft,6,e.length,16,1),r=0;r<A.length;r++)Oa(this,A[r],r,U,n,f[r]);for(Q=0;Q<e.length;Q++)if(!U[Q])for(L=0;L<e[Q].c.length;L++)yD(this,e[Q].e[e[Q].c[L]],J0(e[Q].b[n[Q]],e[Q].c[L]));this.c=new f1}function Zs(t,e,A,n,P){var r,i,f,D,Q,U,L,s,y,l,T,c;for(r=h(F,D0,7,t.j.a.length,0,2),Q=0;Q<t.j.a.length;Q++)for(r[Q]=h(F,k,6,N(t.j,Q).length,15,1),U=0;U<N(t.j,Q).length;U++)r[Q][U]=-1;for(T=h(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&&(T[f]>0?(r[T[f]>>>16][T[f]&32767]=y,r[y][D]=T[f]>>>16):T[f]=(y<<16)+s8+D);for(i=h(rt,ft,6,t.j.a.length,16,1),c=0,L=-1;c>L;)for(L=c,s=0;s<t.j.a.length;s++)i[s]||ja(t,s,r,i,e,A,n,P)&&(i[s]=!0,++c)}function K_(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C;if(A<2)return A;for(b=h(rt,h0,12,A,0,2),l=1;l<A;l++)b[l]=h(rt,ft,6,l,16,1);for(i=Pn(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=jt(t.V,r)-jt(t.V,P),f=w.Math.sqrt(D*D+Q*Q),f<UU*i&&(L=e[P],s=e[r],L!=s&&(L>s?b[L][s]=!0:b[s][L]=!0));for(C=h(F,k,6,A,15,1),U=0;U<A;U++)C[U]=U;for(R=0,y=1;y<A;y++)for(g=0;g<y;g++)if(b[y][g]&&(T=C[y],c=C[g],T!=c))for(++R,j=w.Math.min(T,c),v=w.Math.max(T,c),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-R}function OQ(t,e,A){var n,P,r,i,f,D,Q,U,L;return t==null?null:(D=t,U=null,Q=null,L=null,f=null,n=t.indexOf(k0(35)),n==-1?D=t:(D=(pt(0,n,t.length),t.substr(0,n)),P=t.indexOf(k0(35),n+1),P==-1?U=(Xt(n+1,t.length+1),t.substr(n+1)):(U=(pt(n+1,P,t.length),t.substr(n+1,P-(n+1))),r=t.indexOf(k0(35),P+1),r==-1?Q=(Xt(P+1,t.length+1),t.substr(P+1)):(Q=(pt(P+1,r,t.length),t.substr(P+1,r-(P+1))),i=t.indexOf(k0(35),r+1),i==-1?L=(Xt(r+1,t.length+1),t.substr(r+1)):(L=(pt(r+1,i,t.length),t.substr(r+1,i-(r+1))),f=(Xt(i+1,t.length+1),t.substr(i+1)))))),ep(D,U,Q,L,f,e,A))}function J5(t,e,A,n,P,r,i,f){var D,Q,U,L,s,y,l,T,c,g;for(e!=n&&(c=t.J[e].a-t.J[n].a,g=t.J[e].b-t.J[n].b,f=w.Math.sqrt(c*c+g*g)),D=e,U=$u(t,e)!=3,T=1;T<A;T++){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=Om(t,D,l),Q==-1&&(Q=O0(t,D,l,_0(t,D)||_0(t,l)?16:1),P&&(U&&$u(t,t.D[0][Q])<4&&$u(t,t.D[1][Q])<3&&(t.H[Q]=2),U=!U)),D=l,r+=i}Q=Om(t,D,n),Q==-1&&(Q=O0(t,D,n,_0(t,D)||_0(t,n)?16:1)),P&&U&&$u(t,t.D[0][Q])<4&&$u(t,t.D[1][Q])<4&&(t.H[Q]=2)}function hj(t){var e,A,n,P,r,i,f,D,Q,U;nk();var L,s;for(ut(t,7),this.a=h(Ee,PA,6,t.r,15,1),this.b=h(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],pz(dt(t,L),L<t.g&&Re(t.p,L),L<t.g&&(S8(t.p,L)||t.H[L]==8),n,P,vF(t,e),vF(t,A),r,i,!1)),s==-1?(this.a[L]=(f=K(t,t.D[0][L]),D=K(t,t.D[1][L]),(f<(c2(),Jf).length?Jf[f]:f<IA.length?DU*IA[f]:py)+(D<Jf.length?Jf[D]:D<IA.length?DU*IA[D]:py)),this.b[L]=(Q=K(t,t.D[0][L]),U=K(t,t.D[1][L]),(Q<Jf.length?N6:.125)+(U<Jf.length?N6:.125))):(this.a[L]=s==-1?2.000499963760376:p4[s],this.b[L]=s==-1?1:C4[s])}function Ws(t,e,A,n){var P,r,i,f;fo(this),e?(n&ly)==0?Nr(e,t.c,t.d)&&Nr(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&w1,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&Q0)!=0&&(i=(n&w1)!=0?n&w1:24,this.c=i/A)}function z5(t,e){var A,n,P,r,i,f,D,Q,U,L,s;if(L=p2,e!=-1){for(A=h(yt,wt,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]<eU?L=p2:A[0]<e4?L=AA:A[0]<0?L=p2:A[0]<m2?L=d6:A[0]<bA?L=oU:A[0]<2.6179938779914944?L=d6:L=oU;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,U=0,Q=0,r=0;r<De(t.V,e);r++)n=A[r+1]-A[r],Q<n&&(Q=n,U=r);L=(A[U]+A[U+1])/2}}P=Pn(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:jt(t.V,e))+P*w.Math.cos(L)}function X_(t,e){var A,n,P,r,i,f,D,Q,U;for(Ui(t),Q=new zA(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),He(Q,i,t.bb[t.B[i]],t.ab[t.B[i]]);for(f=0;f<t.R.g;f++)DQ(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]&&(U=Q.D[0][f],BD(Q,0,f,Q.D[1][f]),Q.D[1][f]=U,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<Mt(t.R,A);D++)P=En(t.R,Q,_(t.R,A,D),0,0),er(t.R,Q,Ot(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 ko(t.R,Q),Q.T&=-9,Q}function GQ(t,e,A,n,P){var r,i,f,D,Q,U,L,s,y,l,T;if(Q=h(F,k,6,2,15,1),D=h(yt,wt,6,2,15,1),Q[0]=t.D[0][e],Q[1]=t.D[1][e],G1(t,Q[0])>3||G1(t,Q[1])>3)return!1;for(i=0,r=h(yt,wt,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]+Q1,f=0):(D[1]=D[0],D[0]=D[1]-Q1,f=1),T=0,L=0;L<i;L++)r[L]>D[0]&&r[L]<D[1]?--T:++T;return f=T>0?1-f:f,U=Q1*(A-2)/A,J5(t,Q[f],A-1,Q[1-f],n,D[T>0?0:1]+Q1-U,Q1-U,P),t.T=0,!0}function Y5(t,e){var A;Zt(e,137)?m_(t,e):Zt(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 W1(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(qP);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(Dy);break;default:t.Bb(qn)}}function Z_(t){var e,A,n,P,r,i,f,D,Q,U,L,s;for(U=new D3,L=0;L<t.i.f;L++)if(a1(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),Xs(t,e,A)&&(D=Qp(t,e,A),D&&iF(D,t.f)&&ze(U.a,D,(R9(),wU))==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),Xs(t,e,A)&&(D=Qp(t,e,A),D&&iF(D,t.f)&&ze(U.a,D,(R9(),wU))==null));for(t.g=h(F,D0,7,U.a.c,0,2),t.e=h(rt,ft,6,t.i.f,16,1),r=0,Q=(P=new N8(new x8(new w9(U.a).a).b),new g9(P));p9(Q.a.a);)for(D=(n=Br(Q.a),n.dd()),t.g[r++]=D.b,i=0;i<D.b.length;i++)t.e[D.b[i]]=!0}function W_(t,e){var A,n,P,r,i,f,D,Q,U,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=h(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(Zo(t,A[0])||Zo(t,A[1])){for(L=h(F,k,6,1,15,1),L[0]=e,n=h(F,D0,7,2,0,2),D=0;D<2;D++)if(Zo(t,A[D])&&(n[D]=h(F,k,6,2,15,1),n[D][0]=A[1-D],n[D][1]=A[D],!w5(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,U=0;U<r;U++)P=t.i[A[i]][U],(t.u[P]&I0)!=0||++s;if(s<2)return!1}return!0}function cj(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l;for(D=h(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=h(q,I,6,32,15,1),U=0;U<Q;U++){for(s=-1,y=0,L=0;L<32;L++)y<D[L]&&(y=D[L],s=L);D[s]=0,i[s]=U<<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){var e,A,n,P,r,i,f,D,Q,U,L,s,y;for(ut(t.k,7),L=!1,s=h(F,k,6,2,15,1),y=h(F,k,6,2,15,1),U=h(F,k,6,2,15,1),n=0;n<t.k.g;n++)if(!WP(t.k,n)&&l1(t.k,n)==2){for(i=0;i<2;i++){for(s[i]=-1,U[i]=-1,e=z(t.k,i,n),Q=0;Q<O(t.k,e);Q++)P=Ot(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):U[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++)U[r]!=-1&&U[r]<s[r]&&(D=!D);A8(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 wj(t){for(var e,A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m;;){for(m=0,y=0,c=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,T=0,U=0;U<n.e.length;U++)for(s=0;s<P.e.length;s++)n.e[U]==P.e[s]&&(++A,e=n.e[U],l<n.k[U]&&(l=n.k[U]),T<P.k[s]&&(T=P.k[s]));if(A>0&&(r=A==1&&IL(t,n,e)==1&&IL(t,P,e)==1?0:1,l>T?D=(r<<24)+(l<<16)+(T<<8)+A:D=(r<<24)+(T<<16)+(l<<8)+A,m<D)){for(m=D,y=A,l=0,T=0,L=0;L<n.e.length;L++)l<n.k[L]&&(l=n.k[L]);for(Q=0;Q<P.e.length;Q++)T<P.k[Q]&&(T=P.k[Q]);l>T?(c=n,g=P):(c=P,g=n)}}if(m==0)break;y==c.e.length?Z8(t.d,c):y==g.e.length?Z8(t.d,g):zZ(t,c,g,y)}}function _s(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l;if(t.d>1){for(Q=h(yt,wt,6,t.d,15,1),U=h(yt,wt,6,t.d,15,1),L=h(yt,wt,6,t.d,15,1),D=h(yt,wt,6,t.d,15,1),i=0;i<t.d;i++)L[i]=Of,D[i]=-1e9;for(n=0;n<e.k.length;n++)Q[t.e[n]]+=e.k[n].a,U[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],U[f]/=t.f[f];for(s=h(yt,wt,6,t.d,15,1),y=h(yt,wt,6,t.d,15,1),l=h(yt,wt,6,t.d,15,1),r=1;r<t.d;r++)s[r]=Q[0]-Q[r],y[r]=U[0]-U[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 mf(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=h(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],bD(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 gj(t,e,A,n,P,r,i){lR();var f,D,Q,U;(U=ri(gn,kV),U?Os(U):null)[0]==-1&&x1(),this.a=e,this.p=h(F,k,6,4,15,1),this.k=h(F,k,6,2,15,1),f=new mh,HF(t,e,this.p,f)!=null?(this.k[0]=f.e[0],this.k[1]=f.e[1]):xW(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,(Q=ri(gn,kV),Q?Os(Q):null)[0]==-1&&x1(),i?(this.d=OE,this.c=xE,this.e=NE):(this.d=Rx(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=kx(f.d),this.e=bx(f.d))),g_(this,t),uW(this,t),FW(this,t,n,P)}function dj(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v;for(P=h(yt,wt,6,Mt(t.f,A)+1,15,1),i=h(F,k,6,Mt(t.f,A)+1,15,1),f=h(F,k,6,Mt(t.f,A)+1,15,1),c=r8(e,A),r=0,Q=0;Q<Mt(t.f,A);Q++)i[r]=_(t.f,A,Q),f[r]=Ot(t.f,A,Q),L=r8(e,i[r]),L!=-1&&(P[r++]=on(e.a[c],e.b[c],e.a[L],e.b[L]));if(r==1)return P[0]+Q1;for(U=r-1;U>0;U--)for(s=0;s<U;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])&&(T=BX(t,i[D],A,i[D+1]),T!=0&&(n-=100-T)),y<n&&(y=n,l=D);return(P[l]+P[l+1])/2}function $_(t){var e,A,n;for(e=0;e<t.R.f;e++)t.db[e]==3&&!Fr(t.R,e)&&sP(t.R,e),(Ae(t.R,e)==1||Ae(t.R,e)==2)&&t.db[e]==3&&sP(t.R,e),Fr(t.R,e)&&t.db[e]!=3&&!$G(t,e)&&sP(t.R,e);for(n=0;n<t.R.r;n++)Cr(t.R,n)&&!_X(t,n)&&sP(t.R,z(t.R,0,n));for(A=0;A<t.R.g;A++)dt(t.R,A)==2&&(E3(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&&!Fr(t.R,z(t.R,0,A))&&!Fr(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 a_(t){var e,A,n,P,r,i,f,D,Q;for(A=0;A<t.R.f;A++)$e(t.e[A],A),_1(t.e[A],2*t.c+4,M1(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|ey(t,n,2));if(P){if(f=t.U,t.U=Wn(t),t.U!=f)return!0;for(e=0;e<t.R.f;e++)$e(t.e[e],e),_1(t.e[e],2*t.c+4,M1(t.f[e],t.c+4))}}for(Q=h(utt,k2,173,t.R.g,0,1),i=0;i<Q.length;i++)Q[i]=new kv(t.f[z(t.R,0,i)],t.f[z(t.R,1,i)],i);for(Wi(Q,0,Q.length,null),r=0;r<Q.length;r++)if(JQ(t,Q[r].a,2)){for(;r+1<Q.length&&$v(Q[r],Q[r+1])==0;)JQ(t,Q[++r].a,2);if(f=t.U,t.U=Wn(t),t.U!=f)return!0;for(e=0;e<t.R.f;e++)$e(t.e[e],e),_1(t.e[e],2*t.c+4,M1(t.f[e],t.c+4))}return!1}function t$(t,e,A,n){var P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R;for(L=t.e[e]-A,R=-1,m=NaN,l=0;l<L;l++)if(Gr(t,t.k[e][l],e)){R=l,m=Y0(t,e,t.i[e][l]);break}if(v=R==-1?0:1,i=null,v<L){for(i=h(yt,wt,6,L-v,15,1),Q=0,T=0;T<L;T++)T!=R&&(i[Q++]=Y0(t,e,t.i[e][T]));i.sort(Fe(vi.prototype.gd,vi,[]))}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,T=0;T<i.length;T++)P=T==0?i[i.length-1]-F0:i[T-1],r=i[T],D<r-P&&(D=r-P,g=P);f=D/(A+1)}for(y=0;y<A;y++)g+=f,s=g,v!=0&&(U=Je(s,m),w.Math.abs(U)<f/2&&(U<0?s=m-f/2:s=m+f/2)),c=t.i[e][L+y],Be(t,c,t.J[e].a+n*w.Math.sin(s)),Ie(t,c,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]&hn)!=0&&(P0(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&&i0(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],f9),0)||gt(V(t.B[e],rr),0)&&P0(V(t.B[e],L8),0))&&P0(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)),G1(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],Pe),0)&&t.w[e]!=0&&Zu(t,t.w[e])}function vj(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c;for(ut(t,7),D=new zA(t.f,t.g),f=R1(q,[Ny,w8],[58,10],0,[t.f,8],2),n=h(F,k,6,t.f,15,1),P=h(rt,ft,6,t.f,16,1),r=h(rt,ft,6,t.g,16,1),T=0;T<t.f;T++){for(T!=0&&(Hu(P,P.length),Hu(r,r.length)),f[T][0]=h(q,I,6,2,15,1),f[T][0][0]=t.C[T]<<24>>24,f[T][0][1]=t.A[T]<<24>>24,n[0]=T,P[T]=!0,y=0,s=1,t.u[T]|=512,c=1;c<=7&&s<t.f;c++){for(l=s,Q=y;Q<s;Q++)for(A=n[Q],U=0;U<t.j[A];U++)i=t.i[A][U],P[i]||(P[i]=!0,n[l++]=i),r[t.k[A][U]]=!0;if(l==s)break;for(y=s,s=l,Mj(t,D,r,!0,null),e=0;e<D.q;e++)D.s[e]=0,D.T=0,Ne(D,e,0);f[T][c]=KA((L=me(new EA(D,16)),c0(),L))}t.u[T]&=-513}return f}function e$(t){var e,A,n,P,r,i,f,D,Q;for(f=null,D=v1(Gi(t.D));D.length!=0;){if(A=D.indexOf(k0(44)),A==-1?(i=v1(D),D=\"\"):(i=v1((pt(0,A,D.length),D.substr(0,A))),D=v1((Xt(A+1,D.length+1),D.substr(A+1)))),A1(i,\"X\")){D.length!=0&&(D=\",\"),D=(U1(D),D+(U1(\"F,Cl,Br,I\"),\"F,Cl,Br,I\"));continue}if(e=(Y1(),SA(i,321)),e!=0)if(e==1)CD(t.v,\"'H' cannot be part of an atom list and is removed.\");else if(f==null)f=h(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=h(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(u0.prototype.gd,u0,[])),f}function h2(t,e,A){var n,P,r,i,f,D,Q,U,L;for(r=0,Q=0;Q<A;){if(++r,P=t[e+Q],(P&192)==128)throw At(new C8(c4));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 C8(c4));if(Q>A)throw At(new gr(c4))}for(i=h(l9,a0,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 C8(\"Invalid UTF8 sequence at \"+(e+D-1)+\", byte=\"+(U=n>>>0,U.toString(16))));P=P<<6|n&63}L+=vz(P,i,L)}return i}function Fj(t){var e,A,n,P,r,i,f,D,Q,U;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=r8(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=r8(N(t.d,D),n),r==-1);D++);f!=D&&(f>D&&(U=f,f=D,D=U,U=P,P=r,r=U),Q==null&&(Q=h(IV,nA,457,t.d.a.length,0,2)),Q[D]==null&&(Q[D]=h(IV,{457:1,4:1,5:1,8:1},105,D,0,1)),Q[D][f]?(Q[D][f].c[0]+=ru(Q[D][f].b[0],P),Q[D][f].d[0]+=iu(Q[D][f].b[0],P),Q[D][f].c[1]+=ru(Q[D][f].b[1],r),Q[D][f].d[1]+=iu(Q[D][f].b[1],r),++Q[D][f].a[0],++Q[D][f].a[1]):(Q[D][f]=new HQ(N(t.d,f),N(t.d,D),P,r),!e&&(e=new f1),e.a.push(Q[D][f])))}return e}function A$(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m;for(m=h(F,k,6,t.j.g,15,1),T=0;T<e.j.a.length;T++){for(g=N(e.k,T),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,c=N(e.j,l),g=N(e.k,l),f=0;f<g.length&&!i;f++)if(m[g[f]]>1&&(r=m3(f,g.length),m[g[r]]==1)){for(Q=!1,y=m3(r,g.length);m[g[y]]==1;)(!yf(t,c[y],!1)||g.length!=6&&K(t.j,c[y])!=6)&&(Q=!0),y=m3(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)U=r+s<g.length?r+s:r+s-g.length,A&&(yf(t,c[U],!0),yf(t,c[U==c.length-1?0:U+1],!0)),n2(t,g[U]);i=!0}}return P!=t.c}function n$(t,e){var A,n,P,r,i,f,D,Q,U;return t==null?null:(f=t,Q=null,D=null,U=null,i=null,A=t.indexOf(k0(35)),A==-1?f=t:(f=(pt(0,A,t.length),t.substr(0,A)),n=t.indexOf(k0(35),A+1),n==-1?Q=(Xt(A+1,t.length+1),t.substr(A+1)):(Q=(pt(A+1,n,t.length),t.substr(A+1,n-(A+1))),P=t.indexOf(k0(35),n+1),P==-1?D=(Xt(n+1,t.length+1),t.substr(n+1)):(D=(pt(n+1,P,t.length),t.substr(n+1,P-(n+1))),r=t.indexOf(k0(35),P+1),r==-1?U=(Xt(P+1,t.length+1),t.substr(P+1)):(U=(pt(P+1,r,t.length),t.substr(P+1,r-(P+1))),i=(Xt(r+1,t.length+1),t.substr(r+1)))))),ep(f,(e&1)!=0?Q:null,(e&2)!=0?D:null,(e&4)!=0?U:null,(e&8)!=0?i:null,!1,null))}function mj(t,e,A){var n,P,r,i,f,D,Q;if(e&&e.g&&++t.C,e&&t.s>e.b&&(t.s=e.b),t.G)return hm(t);if(t.F.d.a.length==t.t)return null;if(e&&e.b>3){if(n=A?z9(t.i,e.d):null,i=A?n.c:null,r=A?i.a.length:0,CZ(t,e),A)for(f=r;f<i.a.length;f++)uq(le(A.a,J3(e.c)),lW(t.D,(ve(f,i.a.length),i.a[f]),n));e.g||(e.b<6?X8(t.A,e):(!t.e||t.e.b>e.b)&&(t.e=e)),++t.g}for(D=t.s+3,Q=IF(t,D,e);Q&&(P=aG(Q,z9(t.i,Q.d).c),!(P<D));){if(P<6&&X8(t.B,new ug(Q,P)),++t.g,pm(t.F,Q),t.F.d.a.length==t.t)return null;D=t.s+3,Q=IF(t,D,Q)}if(!Q){if(t.A.d.a.length!=0){for(t.G=!0;t.A.d.a.length!=0&&kr(t.A,t.A.d.a.length-1).b>t.s+3;)aU(t.A,t.A.d.a.length-1);Q=hm(t)}return Q}return pm(t.F,Q),Q}function P$(t,e){var A,n,P,r,i,f,D,Q;A=(Q=t.n.Ac(),Q.getBackgroundRGB()),P=(_r(),(xA[0]*((A&iP)>>16)+xA[1]*((A&PP)>>8)+xA[2]*(A&255))/255<.5),n=P?y5(A,jf):A&qn|vt(w.Math.round(DU*((A&iP)>>16)))<<16|vt(w.Math.round(DU*((A&PP)>>8)))<<8|vt(w.Math.round(DU*(A&255))),i=P?y5(A,.5):A&qn|vt(w.Math.round(xf*((A&iP)>>16)))<<16|vt(w.Math.round(xf*((A&PP)>>8)))<<8|vt(w.Math.round(xf*(A&255))),D=xo(t.i),f=Oo(t.i),ZL(e,t.i,0,0,D,f,v8,v8,D/t.j,f/t.j),r=AF(20),ZL(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 kj(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y;if(!t.b)return!1;for(i=null,s=null,D=new RL(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||K8(L.d,A.d))&&(i=L),!(L&&L.b)&&!zP(L.a[P])&&(zP(L.a[1-P])?s=s.a[Q]=_u(L,P):zP(L.a[1-P])||(y=s.a[1-Q],y&&(!zP(y.a[1-Q])&&!zP(y.a[Q])?(s.b=!1,y.b=!0,L.b=!0):(r=f.a[1]==s?1:0,zP(y.a[Q])?f.a[r]=zB(s,Q):zP(y.a[1-Q])&&(f.a[r]=_u(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&&(U=new RL(L.c,L.d),IY(t,D,i,U),s==i&&(s=U)),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 K5(t,e,A){ji();var n,P,r,i,f;KZ.call(this,t),this.a=new f1,this.b=new Pj(t),ut(this.g,7),f=xu(ul,e),r=$P(A.c,JC)?LD(A.c.a.get(JC)):100,n=$P(A.c,zC)?LD(A.c.a.get(zC)):1,P=$P(A.c,YC)&&VP(A.c.a.get(YC),\"distance\"),i=new wR(this.b),(!$P(A.c,KC)||Ri(A.c.a.get(KC)))&&jP(this.a,dY(f,this.b)),(!$P(A.c,XC)||Ri(A.c.a.get(XC)))&&jP(this.a,uO(f,this.b)),(!$P(A.c,ZC)||Ri(A.c.a.get(ZC)))&&jP(this.a,QX(f,this.b,i,r,P,n)),(!$P(A.c,WC)||Ri(A.c.a.get(WC)))&&jP(this.a,rK(f,this.b)),(!$P(A.c,_C)||Ri(A.c.a.get(_C)))&&jP(this.a,fZ(f,this.b)),(!$P(A.c,$C)||Ri(A.c.a.get($C)))&&jP(this.a,HZ(f,this.b)),(!$P(A.c,aC)||Ri(A.c.a.get(aC)))&&jP(this.a,gK(f,this.b,i,r))}function r$(t){var e,A,n,P,r;for(r=t.U,P=bn(t.f,t.R.f),t.R.K||(gZ(t),qm(t,r,P)),t.bb=h(q,I,6,t.R.f,15,1),t.ab=h(q,I,6,t.R.f,15,1),A=0;A<t.R.f;A++)t.bb[A]=Ae(t.R,A)<<24>>24,t.ab[A]=VA(t.R,A)<<24>>24;for(t.n=h(q,I,6,t.R.g,15,1),t.k=h(q,I,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]=$i(t.R,n)<<24>>24;for(jW(t),t.Z=!1,t.M=h(rt,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);gz(t),t.P=null,t.cb=h(rt,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),c_(t.P)),t.eb=h(rt,ft,6,t.R.f,16,1),t.gb=h(rt,ft,6,t.R.f,16,1),t.hb=new f1,t.P&&Q2(t.P,t.f),e_(t),qm(t,r,P),k_(t),t.P&&(t.K=UG(t.P)),Z$(t)}function i$(t){var e,A,n,P,r,i,f,D,Q,U,L,s;for(D=new Wt(t.d);D.a<D.c.a.length;)for(f=t1(D),Q=0;Q<f.f.length;Q++)if(n=f.f[Q],dt(t.f,n)==2&&(!WP(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=h(F,k,6,2,15,1),P=h(F,k,6,2,15,1),U=0;U<2;U++)for(s[U]=t.f.M,P[U]=z(t.f,U,n),L=0;L<Mt(t.f,P[U]);L++)r=_(t.f,P[U],L),r!=z(t.f,1-U,n)&&s[U]>r&&(s[U]=r);i=on(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=on(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=on(f.a[f.g[P[1]]],f.b[f.g[P[1]]],f.a[f.g[s[1]]],f.b[f.g[s[1]]]),FL(i,e)<0^FL(i,A)<0^qe(t.f,n)==2&&Xj(f,n)}}function f$(t,e,A){var n,P,r,i,f,D,Q,U,L;return r=dR(t,e),i=r[0],D=r[1],D.e==0?new pD(i,2):(Q=t.e*e.e,wh(e)<54?(f=(L=D.d>1?S9(D.a[0],D.a[1]):S9(D.a[0],0),D.e>0?L:p0(L)),P=(U=e.d>1?S9(e.a[0],e.a[1]):S9(e.a[0],0),e.e>0?U:p0(U)),n=Hi(M1(G(f,0)<0?p0(f):f,1),G(P,0)<0?p0(P):P)?-1:S1(M1(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(om(D.e<0?D.e==0?D:new Ue(-D.e,D.d,D.a):D),e.e<0?e.e==0?e:new Ue(-e.e,e.d,e.a):e),n=EQ(RQ(i,0)?1:0,Q*(5+n),A)),n!=0?wh(i)<54?rO((U=i.d>1?S9(i.a[0],i.a[1]):S9(i.a[0],0),O1(i.e>0?U:p0(U),n))):(i=T2(i,(ke(),G(n,0)>=0?we(n):FP(we(p0(n))))),new pD(i,2)):new pD(i,2))}function bj(t){var e,A,n,P,r,i,f,D,Q;switch(e=null,t.e){case 1:for(e=h(Yt,at,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=h(Yt,at,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=h(Yt,at,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 D$(t){var e,A,n,P,r,i,f,D,Q,U,L;for(L=new Wt(t.g);L.a<L.c.a.length;){for(Q=t1(L),A=0,r=0;r<O(t.k,Q.a);r++)t.c[Ot(t.k,Q.a,r)]||++A;if(A!=0){for(Q.c=h(F,k,6,A,15,1),A=0,i=0;i<O(t.k,Q.a);i++)t.c[Ot(t.k,Q.a,i)]||(D=_(t.k,Q.a,i),Q.c[A++]=t.q[D]<<16|D);for(Q.c.sort(Fe(u0.prototype.gd,u0,[])),P=0;P<Q.c.length;P++)Q.c[P]=w1&Q.c[P]}}for(n=h(rt,ft,6,t.k.g,16,1),t.e=h(F,k,6,t.k.g,15,1),U=new Wt(t.g);U.a<U.c.a.length;)if(Q=t1(U),Q.c!=null){for(Q.d=h(rt,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=Ot(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 Rj(){if(Wh(),!ol)try{Xf=h(Utt,h0,101,4,0,1),L9=h(v4,h0,20,4,0,1),s9=h(v4,h0,20,4,0,1),L9[0]=Ai(\"/resources/toxpredictor/m1.txt\"),L9[1]=Ai(\"/resources/toxpredictor/t1.txt\"),L9[2]=Ai(\"/resources/toxpredictor/i1.txt\"),L9[3]=Ai(\"/resources/toxpredictor/r1.txt\"),s9[0]=Ai(\"/resources/toxpredictor/m2.txt\"),s9[1]=Ai(\"/resources/toxpredictor/t2.txt\"),s9[2]=Ai(\"/resources/toxpredictor/i2.txt\"),s9[3]=Ai(\"/resources/toxpredictor/r2.txt\"),Xf[0]=gs(\"/resources/toxpredictor/m3.txt\"),Xf[1]=gs(\"/resources/toxpredictor/t3.txt\"),Xf[2]=gs(\"/resources/toxpredictor/i3.txt\"),Xf[3]=gs(\"/resources/toxpredictor/r3.txt\"),ol=!0}catch(t){if(t=t0(t),Zt(t,19))x1();else throw At(t)}}function u$(t,e){var A,n,P,r,i,f,D;if(D=new uD,!ol)return mt(D.a,new We(\"Toxicity predictor not properly initialized.\",2)),D;if(i=me(new BA(t)),Xf[e].bc(i)!=-1)return ZP(D,\"This molecule is known to be \"+YV[e]+\":\",2),mt(D.a,new We(i,1)),D;for(f=new jD(1),A=!1,n=new JA,r=0;r<L9[e].a.length;r++)u2(new GA(!1),n,N(L9[e],r)),Dn(f,t),Ln(f,n),sn(f,1,f.c)>0&&(A||ZP(D,\"High-risk fragments indicating \"+kU[e]+\":\",2),A=!0,ZP(D,N(L9[e],r),1));for(A=!1,P=0;P<s9[e].a.length;P++)u2(new GA(!1),n,N(s9[e],P)),Dn(f,t),Ln(f,n),sn(f,1,f.c)>0&&(A||ZP(D,\"Medium-risk fragments indicating \"+kU[e]+\":\",2),A=!0,ZP(D,N(s9[e],P),1));return D.a.a.length==0&&ZP(D,\"No indication for \"+kU[e]+\" found.\",2),D}function jj(t,e,A,n,P,r){var i,f,D,Q,U,L,s,y,l;for(l=B(d(yt,1),wt,6,15,[0,0,0]),Q=B(d(yt,1),wt,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,U=0;U<3;U++)switch(f[U]){case 1:l[U]=1.395;break;case 6:l[U]=2.494,Q[U]=1.016;break;case 7:l[U]=2.711,Q[U]=1.113;break;case 8:l[U]=3.045,Q[U]=1.337;break;case 9:l[U]=2.847;break;case 14:l[U]=2.35,Q[U]=.811;break;case 15:l[U]=2.35,Q[U]=1.068;break;case 16:l[U]=2.98,Q[U]=1.249;break;case 17:l[U]=2.909,Q[U]=1.078;break;case 35:l[U]=3.017;break;case 53:l[U]=3.086}return L=y2(t.a.d,e,A,n),s=y2(t.a.d,e,n,P),i=(L-s)*(L-s)/((L+s)*(L+s)),y=NC*r,U2(e,A,n,P,4)?D*=.85:U2(e,A,n,P,3)&&(D*=.05),D*l[0]*Q[1]*l[2]/((L+s)*y*y*w.Math.exp(2*i))}function Q$(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g;if(e!=null)t.e=e;else for(t.e=h(rt,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=h(rt,ft,6,t.j.f,16,1),t.f=h(rt,ft,6,t.j.f,16,1),f=0;f<t.j.f;f++){for(l=0,T=0;T<O(t.j,f);T++)t.e[Ot(t.j,f,T)]&&++l;l>0&&(t.d[f]=!0,++t.b,l==3&&(t.f[f]=!0))}for(t.i=h(rt,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),U=0,L=Q.length;U<L;++U)if(D=Q[U],!t.e[D]){t.i[g]=!1;break}for(t.g=h(rt,ft,6,t.j.f,16,1),c=0;c<A.j.a.length;c++)if(t.i[c]&&N(A.k,c).length!=6)for(P=N(A.j,c),r=0,i=P.length;r<i;++r)n=P[r],N(A.k,c).length==5&&(t.g[n]=!0);t.k=0}function $s(t,e,A,n,P,r,i){var f,D,Q,U,L,s,y,l,T,c,g,m;for(y=0;y<e.j[A];y++)if(f=e.i[A][y],!r[f]&&(U=e.k[A][y],g=dt(e,U),n&&g>=2||!n&&g<=2)){for(r[f]=!0,i.add(k1(U)),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(k1(L)),t.f[D]&&(K(t.i,D)==5||K(t.i,D)==6||K(t.i,D)==7||K(t.i,D)==8||K(t.i,D)==16||K(t.i,D)==34||K(t.i,D)==52)&&(!n||uQ(e,D))){for(s=new fs(t,e),T=0;T<i.a.length;T++)Q=(ve(T,i.a.length),i.a[T]).a,c=T<2?n^(T&1)==0:P^(T&1)==0,c?TL(s,Q,dt(e,Q)==1?2:3):TL(s,Q,dt(e,Q)==2?1:2),t.g[Q]=!0;zi(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,U;if(e==0)return 0;for(f=null,n=0;n<t.q;n++)(t.u[n]&m1)>>18==e&&(f==null&&(f=h(rt,ft,6,32,16,1)),f[(t.u[n]&m1)>>18!=1&&(t.u[n]&m1)>>18!=2?-1:(t.u[n]&RA)>>20]=!0);for(r=0;r<t.r;r++)(t.F[r]&768)>>8==e&&(f==null&&(f=h(rt,ft,6,32,16,1)),f[(t.F[r]&768)>>8!=1&&(t.F[r]&768)>>8!=2?-1:(t.F[r]&ln)>>10]=!0);if(U=0,f!=null){for(Q=h(F,k,6,32,15,1),D=0;D<32;D++)f[D]&&(Q[D]=U++);for(A=0;A<t.q;A++)(t.u[A]&m1)>>18==e&&(i=Q[(t.u[A]&m1)>>18!=1&&(t.u[A]&m1)>>18!=2?-1:(t.u[A]&RA)>>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]&ln)>>10],t.F[P]&=-31745,t.F[P]|=i<<10)}return U}function ui(t,e,A,n,P){var r,i,f,D,Q,U,L,s;for(ut(t,n?7:1),e.v=null,t.K&&je(e,!0),D=A.length,P==null&&(P=h(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=G1(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(U=h(F,k,6,t.r,15,1),V9(U,U.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]?U[Q]=er(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)));LL(t,e),t.d&&(e.T=0),e.T=0,$0(e,1),$0(e,2),e.q!=D&&je(e,!0),yj(t,e,D,P,U),_k(t,e,D,P),n&&Ff(new cr(e),null,!1)}function U$(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l;if(D=!1,a1(t.k,e)!=0&&O(t.k,e)==2&&pA(t.k,e,0)==2&&pA(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=h(F,k,6,3,15,1),U=0;U<O(t.k,n);U++)y[l]=_(t.k,n,U),y[l]!=e&&++l;l==2&&t.q[y[0]]<t.q[y[1]]^y[0]<y[1]&&(D=!D)}}else{for(L=h(F,k,6,4,15,1),s=h(F,k,6,4,15,1),f=0,A!=-1&&(L[f]=A,s[f++]=8*t.q[A]),(xt(t.k,e)!=0||O(t.k,e)==3)&&(L[f]=It,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++]=uY(t,e,r));D=uJ(L,s)}return Q=d0(t.k,e)==1^D,Ei(t.k,e)&&(P=hq(t.d,e),t.n[P]||(t.n[P]=!0,t.o[P]=Q),t.o[P]&&(Q=!Q)),Q?\"@@\":\"@\"}function o$(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y;for(ut(t.H,t.N),U=t.H.f,t.J=h(F,k,6,U,15,1),t.I=h(NA,a0,6,U,14,1),i=0;i<U;i++)t.I[i]=Or(V(Y(up(t.H,i),o0(t.H,i)),C6),Vp),t.J[i]=K(t.H,i),(e&1)!=0&&(t.J[i]+=p1(t.H,i)+16<<8),(e&2)!=0&&(t.J[i]+=ye(t.H,i)<<16);for(t.M=h(NA,a0,6,U,14,1),s=On(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],ir):y==4?t.M[f]=Y(t.M[f],fr):y==5?t.M[f]=Y(t.M[f],Dr):y==6?t.M[f]=Y(t.M[f],ur):y==7&&(t.M[f]=Y(t.M[f],Qr));for(A=0;A<U;A++)y=M9(t.H,A),y==0?t.M[A]=Y(t.M[A],L8):y>7&&(t.M[A]=Y(t.M[A],pf));for(L=t.H.g,t.K=h(F,k,6,L,15,1),D=0;D<L;D++)t.K[D]=(Ob(t.H,D)|ee(t.H,D))&6422527^6291840}function as(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l;if(un(t.i,0),n=SA(e,t.c),n!=0){if(z1(t),L=n==1^K(t.V,t.t)==1,Bf(t.V,t.t,n,0,-1,0)){L&&(t.t=-1,N1(t,new q1(t,4,!0))),t.eb=w.Math.max(t.eb,3),n1(t.k),N1(t,new q1(t,1,!0));return}t.eb=w.Math.max(t.eb,0),n1(t.k)}if(t.j!=null&&t.j.length!=0&&(e=t.j),y=(iy(),U=(!il&&SY(),le(il,ef(e.toLowerCase(),\"-\"))),U==null?null:_i(new GA(!1),U)),y){for(z1(t),D=new JA,OR(D,t.V,t.t,null),s=Pn(D,t.ab*24),i=D.q,A=0;A<D.q;A++)D.u[A]|=I0;for(Js(D,y,0),Ar(new Y8(4),D),P=kt(t.V,t.t)-s*D.J[0].a,r=jt(t.V,t.t)-s*D.J[0].b,f=t.V.q,Js(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);Lf(t.V),t.eb=w.Math.max(t.eb,3),n1(t.k),N1(t,new q1(t,1,!0))}}function pj(t,e,A){if(p1(t.j,e)!=0)return 0;if(t.a){if(K(t.j,e)==5)return G1(t.j,e)!=2?0:(A&&E0(t.j,e,1),1);if(K(t.j,e)==7)return G1(t.j,e)!=2?0:(A&&E0(t.j,e,-1),tf(t,e)?6:3);if(K(t.j,e)==8)return G1(t.j,e)!=1?0:(A&&E0(t.j,e,-1),tf(t,e)?7:4);if(K(t.j,e)==16)return G1(t.j,e)!=1?0:(A&&E0(t.j,e,-1),tf(t,e)?5:2);if(K(t.j,e)==34)return G1(t.j,e)!=1?0:(A&&E0(t.j,e,-1),tf(t,e)?4:1)}else{if(K(t.j,e)==5)return G1(t.j,e)>2?0:(A&&E0(t.j,e,1),1);if(K(t.j,e)==7)return G1(t.j,e)>2?0:(A&&E0(t.j,e,-1),tf(t,e)?5:3);if(K(t.j,e)==8)return G1(t.j,e)>1?0:(A&&E0(t.j,e,-1),tf(t,e)?7:4);if(K(t.j,e)==16)return G1(t.j,e)>1?0:(A&&E0(t.j,e,-1),tf(t,e)?5:2)}return 0}function Cj(t){var e,A;if(t.s==null&&!t.t)return null;if(t.t)return A=BQ(t.t),A?(_s(t,A),++t.p,bw(A,\"SO#\"+ ++t.a),A):null;if(t.j)return null;for(t.b.c==0&&z9(t,h(F,k,6,t.q.length,15,1)),t.A=mj(t.B,t.A,t.c);t.A&&!(gt(t.v,0)&&(x1(),S1(E1(Date.now()),t.v)));){if(e=z9(t,t.A.d),t.A.c||(Nx(t.A,eJ(e,t.A.i,\"#\"+ ++t.a)),t.i&&VI(t.c,t.A)),t.A.b==0&&(Hj(t,t.A,t.A.c),t.A.b!=0&&_$(t,t.A),t.i&&(wz(Ii(t.c,t.A),e,t.A.c),Ii(t.c,t.A))),t.A.b>t.B.s+3){if(t.A=mj(t.B,t.A,t.c),t.A||t.p!=0)continue;if(t.C&&(t.t=new NQ(t.k),$U(t.t,t.v),d5(t.t,t.o,-1),A=BQ(t.t),A))return _s(t,A),++t.p,bw(A,\"SO#\"+ ++t.a),A;t.A=t.B.e,t.j=!0}if(t.A)return _s(t,t.A.c),t.A.g=!0,++t.p,t.i&&Ii(t.c,t.A),t.A.c}return null}function L$(t,e,A,n){var P,r,i,f,D,Q;if(P=W9(e,t.d),E0(e,P,t.e),Ze(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]&=gy,T1(e,P,t.c,!0)),t.b){for(Q=h(F,k,6,t.b.d.a.length,15,1),D=0;D<t.b.d.a.length;D++)Q[D]=kr(t.b,D).a;sh(e,P,Q),t.b.d.a.length=0}else if(String.fromCharCode(A).toLowerCase().charCodeAt(0)==A&&BB(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 V1(\"SmilesParser: atomicNo \"+t.d+\" must not be aromatic. Position:\"+(n-1)));e.u[P]|=I0}else e.u[P]&=gy;if(t.f)for(f=new Wt(t.f);f.a<f.c.a.length;)i=t1(f),t.r=!0,K0(i,0,0),je(e,!0),Js(e,i,P);return t.g!=-1&&t.d!=1&&(r=h(q,I,6,1,15,1),r[0]=t.g<<24>>24,iz(e,P,r)),P}function s$(t,e){var A,n,P,r,i,f,D,Q,U,L,s;if(e==2||e==5)mt(t.F,ai(t.G,t.G.length)),t.b&&mt(t.a,JL(t.C,t.C.length));else if(e==4)s=jb(ai(t.G,t.G.length)),lo(t.O,s)||(zi(t.O,s),mt(t.F,ai(t.G,t.G.length)),t.b&&mt(t.a,JL(t.C,t.C.length)));else if(e==3){if(s=jb(ai(t.G,t.G.length)),!lo(t.O,s)){for(L=!1,Q=(f=new N8(new x8(new w9(t.O.a).a).b),new g9(f));p9(Q.a.a);){for(D=(i=Br(Q.a),i.dd()),U=0,n=s,P=0,r=n.length;P<r;++P){for(A=n[P];U<D.length&&D[U]<A;)++U;if(U<D.length&&A==D[U]){L=!0;break}}if(L)break}L||(zi(t.O,s),mt(t.F,ai(t.G,t.G.length)),t.b&&mt(t.a,JL(t.C,t.C.length)))}}else e==6&&(s=jX(t,ai(t.G,t.G.length)),lo(t.O,s)||(zi(t.O,s),mt(t.F,ai(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]&m1)>>18,i=-1,f==1?n==-1?i=$0(e,f):i=w.Math.min(31,n+((t.u[A]&m1)>>18!=1&&(t.u[A]&m1)>>18!=2?-1:(t.u[A]&RA)>>20)):f==2&&(P==-1?i=$0(e,f):i=w.Math.min(31,P+((t.u[A]&m1)>>18!=1&&(t.u[A]&m1)>>18!=2?-1:(t.u[A]&RA)>>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,bD(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=h(F,D0,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=h(q,w8,10,e.C.length,0,2)),e.t[r]=TN(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 X5(){X5=B1,XV=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\"]),KV=B(d(it,1),Dt,2,6,[d8,fV,\"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\"]),ci=B(d(NA,1),a0,6,14,[0,L8,jp,ir,25769803776,60129542144,128849018880,266287972352,fr,51539607552,120259084288,257698037760,532575944704,Dr,103079215104,240518168576,515396075520,ur,206158430208,481036337152,Qr,412316860416,pf])}function y$(t,e){i8();var A,n,P,r,i,f,D,Q,U,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&&(U=e.u[r]&3,U==1||U==2)){for(n=h(F,k,6,4,15,1),s=h(F,k,6,2,15,1),f=0;f<e.j[r];f++){for(A=e.i[r][f],Q=It,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]==It||n[3]==It){x1(),\"\"+me(new BA(e));break}mt(t,new xT(e,n,s,(e.u[r]&hn)!=0,U==1))}for(P=0;P<e.g;P++)if(U=e.F[P]&3,(U==1||U==2)&&dt(e,P)!=2){for(n=h(F,k,6,4,15,1),s=h(F,k,6,2,15,1),f=0;f<2;f++){for(A=e.D[f][P],L=e.D[1-f][P],Q=It,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 xT(e,n,s,(e.F[P]&64)!=0,U==2))}}function l$(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l;for(f=ms(t),i=h(rt,ft,6,f+1,16,1),l=new Wt(t.g);l.a<l.c.a.length;)for(s=t1(l),A=0;A<s.q;A++)if(P=w.Math.abs(s.w[A]),P!=0){if(i[P])throw At(new V1(\"Duplicate mapping no in reactants: \"+P));i[P]=!0}for(r=h(rt,ft,6,f+1,16,1),L=new Wt(t.f);L.a<L.c.a.length;)for(Q=t1(L),A=0;A<Q.q;A++)if(P=w.Math.abs(Q.w[A]),P!=0){if(r[P])throw At(new V1(\"Duplicate mapping no in products: \"+P));r[P]=!0}for(D=h(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 Wt(t.g);y.a<y.c.a.length;)for(s=t1(y),A=0;A<s.q;A++)Ze(s,A,D[w.Math.abs(s.w[A])],s.w[A]<0);for(U=new Wt(t.f);U.a<U.c.a.length;)for(Q=t1(U),A=0;A<Q.q;A++)Ze(Q,A,D[w.Math.abs(Q.w[A])],Q.w[A]<0)}}function T$(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,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],G1(t,A)+xt(t,A)!=t.e[A]+xt(t,A)+1)return 1;for(D=N(g.k,e),Q=0,U=D.length;Q<U;++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,D1(t,i,l))==2){L[y]=l;break}if(L[0]>-1&&L[1]>-1)for(c=0;c<g.j.a.length;c++){if(yA(g,c,L[0])&&yA(g,c,L[1])&&t.b[c]==2)return 2;if(yA(g,c,L[0])&&yA(g,c,L[1])&&t.b[c]!=0)return 1}}}if(N(g.k,e).length==5)for(T=1,n=N(g.j,e),P=0,r=n.length;P<r;++P){if(A=n[P],G1(t,A)+xt(t,A)==t.e[A]+xt(t,A)&&T>0){--T;continue}if(G1(t,A)+xt(t,A)!=t.e[A]+xt(t,A)+1)return 1}return 0}function Z5(t){var e,A,n,P,r,i,f,D,Q,U,L;for(e=0;e<t.R.f;e++)if(t.db[e]==1||t.db[e]==2){if(D=!1,ZT(t.R,e))for(f=0;f<O(t.R,e);f++){for(P=_(t.R,e,f),L=0,U=h(F,k,6,3,15,1),Q=0;Q<O(t.R,P);Q++)U[L]=_(t.R,P,Q),U[L]!=e&&++L;L==2&&t.f[U[0]]>t.f[U[1]]^U[0]<U[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(U=h(F,k,6,2,15,1),L=0,Q=0;Q<3;Q++)_(t.R,n,Q)!=z(t.R,1-f,A)&&(U[L++]=_(t.R,n,Q));t.f[U[0]]>t.f[U[1]]&&(D=!D),U[0]<U[1]&&(D=!D)}A8(t.R,A,t.o[A]==1^D?1:2,t.p[A])}else A8(t.R,A,t.o[A],t.p[A])}function Mj(t,e,A,n,P){var r,i,f,D,Q,U,L,s;for(ut(t,n?7:1),e.v=null,t.K&&je(e,!0),P==null&&(P=h(F,k,6,t.q,15,1)),e.q=0,r=0;r<t.q;r++)for(P[r]=-1,U=0;U<t.j[r];U++)if(A[t.k[r][U]]){if(P[r]=En(t,e,r,0,0),t.C[r]==1&&(s=G1(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=h(F,k,6,t.r,15,1),e.r=0,D=0;D<t.r;D++)A[D]?Q[D]=er(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 LL(t,e),t.d&&(e.T=0),e.T=0,$0(e,1),$0(e,2),e.q!=t.q&&je(e,!0),yj(t,e,t.q,P,Q),_k(t,e,t.q,P),n&&Ff(new cr(e),null,!1),P}function h$(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b;for(f=0,A=0;A<t.f.q;A++)z0(t.f,A)&&++f;if(!(f<2)){for(L=0,Q=0,U=0;U<t.f.r;U++)n=z(t.f,0,U),P=z(t.f,1,U),z0(t.f,n)&&z0(t.f,P)&&(t.c[U]=!0,t.b[n]=!0,t.b[P]=!0,Q+=hh(t.f,U),++L);for(L!=0&&Q!=0?Q/=L:Q=V8(t.f),r=0;r<t.f.q;r++)z0(t.f,r)&&!t.b[r]&&--f;if(!(f<2)){for(v=h(F,k,6,t.f.q,15,1),s=n9(t.f,v,!0,!0),m=h(F,k,6,s,15,1),i=0;i<t.f.q;i++)v[i]!=-1&&++m[v[i]];for(g=h(G4,A0,48,s,0,1),l=0;l<s;l++)g[l]=new MP(t.f,m[l],!0);for(D=h(F,k,6,s,15,1),e=0;e<t.f.q;e++)T=v[e],T!=-1&&(g[T].k[D[T]]=re,g[T].e[D[T]]=e,g[T].a[D[T]]=kt(t.f,e)/Q,g[T].b[D[T]]=jt(t.f,e)/Q,++D[T]);for(R=-1,b=0,c=0;c<s;c++)b<m[c]&&(b=m[c],R=c);for(pP(t.d,g[R]),y=0;y<s;y++)y!=R&&pP(t.d,g[y])}}}function c$(t,e){var A,n,P,r,i,f,D,Q,U,L,s;for(n=0;n<t.e[e];n++)switch(U=t.i[e][n],t.C[U]){case 6:return 5;case 7:switch(u6(t,U)){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(u6(t,U)){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[U];D++){if(L=t.i[U][D],t.C[L]==6)for(Q=0;Q<t.e[L];Q++)s=t.i[L][Q],s!=U&&(A=D1(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 w$(t){var e,A,n,P,r,i,f,D,Q,U,L;if(t.n==null){if(t.b)for(n=t.j+1,t.p=h(F,nA,28,t.o.length,0,3),r=0;r<t.o.length;r++){for(t.p[r]=h(F,D0,7,t.g[r].a.length,0,2),f=0;f<t.g[r].a.length;f++)t.p[r][f]=uK(t,r,N(t.g[r],f),n);for(n+=t.o[r].f,P=dr(t.c,r),e=0;e<P.f;e++)gt(V(P.B[e],Pe),0)||--n}if(t.n=R1(o9,[nA,or],[74,26],0,[t.q,t.c.f.a.length],2),t.d=R1(it,[nA,Dt],[13,2],6,[t.q,t.c.f.a.length],2),t.e=h(rt,ft,6,t.q,16,1),L=new nu,U=new V0,i=0,A=0,t.q!=0){D=h(F,k,6,t.o.length,15,1);do{for(Q=U.a.length,0<Q?U.a=UA(U.a,0,0):0>Q&&(U.a+=q8(h(l9,a0,6,-Q,15,1))),r=0;r<t.c.f.a.length;r++)t.n[i][r]=_a(t,t.g,D,r),t.d[i][r]=me(new BA(t.n[i][r])),J(U,t.d[i][r]);t.e[i]=js(L,U.a)==-1,(!t.t||!t.e[i])&&++A,++i}while(AJ(t,D)&&A<t.i)}}}function Hj(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m;for(t.i&&(Ii(t.c,e).a=null),D=0,f=null,c=A.o,n=1;n<c.q;n++)for(m=GD(c.C[n]),P=0;P<n;P++)t.u[n][P]||(T=m+GD(c.C[P]),U=w.Math.abs(A.k[n].a-A.k[P].a),U<T&&(L=w.Math.abs(A.k[n].b-A.k[P].b),L<T&&(s=w.Math.abs(A.k[n].c-A.k[P].c),s<T&&(Q=w.Math.sqrt(U*U+L*L+s*s),Q<T&&(g=(T-Q)/T,i=20*g*g,D+=i,t.i&&(oN(Ii(t.c,e),\"a1:\"+n+\" f1:\"+t.g[n]+\" a2:\"+P+\" f2:\"+t.g[P]+FV+(J9(),tr(Q,5))+\" min:\"+tr(T,5)),Ii(t.c,e).a==null&&(r=h(F,k,6,2,15,1),r[0]=n,r[1]=P,OS(Ii(t.c,e),r))),f==null&&(f=h(yt,h0,15,t.q.length,0,2)),y=t.g[n],l=t.g[P],y<l?(f[l]==null&&(f[l]=h(yt,wt,6,l,15,1)),f[l][y]+=i):(f[y]==null&&(f[y]=h(yt,wt,6,y,15,1)),f[y][l]+=i))))));return Av(e,D,f),D!=0}function g$(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l;if(Q=v1(K1(e)),Q.length==0||(t.e=Q),K1(e),n=K1(e),!A&&n.startsWith(qy)&&(P=(Xt(13,n.length+1),n.substr(13)),OQ(P,!0,t)))return!0;if(l=K1(e),i=new tu,l!=null&&l.startsWith(\"M  V30 COUNTS\")){if(y=v1((Xt(13,l.length+1),l.substr(13))),U=o8(y,\" \"),s=c1(U[0],o1,It),L=c1(U[1],o1,It),s>0){if(l=K1(e),A1(iM,l))for(r=0;r<s;r++){f=new JA,D=new fu,D.a+=fM;do l=K1(e),D.a+=\"\"+l,D.a+=$A;while(l!=null&&!l.startsWith(j6));mo(i,f,new nn(new b9(D.a))),mt(t.g,f),t.d=-1}l=K1(e)}if(L>0&&(l=K1(e),A1(DM,l))){for(r=0;r<L;r++){f=new JA,D=new fu,D.a+=fM;do l=K1(e),D.a+=\"\"+l,D.a+=$A;while(l!=null&&!l.startsWith(j6));mo(i,f,new nn(new b9(D.a))),mt(t.f,f),t.d=-1}l=K1(e)}return!0}return!1}function Vj(t){var e,A,n,P,r,i,f;return i=\"\",t.length==0?new oT(y4,l4):(f=v1(t),f.startsWith(\"at \")&&(f=(Xt(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=v1((Xt(P+1,f.length+1),f.substr(P+1))),f=v1((pt(0,P,f.length),f.substr(0,P))))):(e=f.indexOf(\")\",P),i=(pt(P+1,e,f.length),f.substr(P+1,e-(P+1))),f=v1((pt(0,P,f.length),f.substr(0,P)))),P=f.indexOf(k0(46)),P!=-1&&(f=(Xt(P+1,f.length+1),f.substr(P+1))),(f.length==0||A1(f,\"Anonymous function\"))&&(f=y4),r=i.lastIndexOf(k0(58)),A=Bx(i,k0(58),r-1),n=l4,r!=-1&&A!=-1&&(n=(pt(0,A,i.length),i.substr(0,A)),Tg((pt(A+1,r,i.length),i.substr(A+1,r-(A+1)))),Tg((Xt(r+1,i.length+1),i.substr(r+1)))),new oT(f,n))}function Ej(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c;for(l=!1,n=0;n<t.L.g;n++)Q=null,Bu(t.L,n)?(L=x3(t.L,n),U=gT(t.L,n),Q=L==U?\"[\"+L+\"]\":\"[\"+L+\":\"+U+\"]\"):(ee(t.L,n)&AU)!=0?Q=(ee(t.L,n)&AU)==qA?\"a\":(ee(t.L,n)&384)==256?\"!ar\":\"!a\":(ee(t.L,n)&384)!=0&&(Q=(ee(t.L,n)&384)==256?\"r\":\"!r\"),s=(ee(t.L,n)&SP)>>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),T=(Z1(t.R,kt(t.L,e))+Z1(t.R,kt(t.L,A)))/2,c=(X1(t.R,jt(t.L,e))+X1(t.R,jt(t.L,A)))/2,r=Z1(t.R,kt(t.L,A))-Z1(t.R,kt(t.L,e)),i=X1(t.R,jt(t.L,A))-X1(t.R,jt(t.L,e)),P=w.Math.sqrt(r*r+i*i),D=.6*t.vb(Q),f=.55*t.wb(),P!=0&&(r>0?HP(t,T+D*i/P,c-f*r/P,Q,!0):HP(t,T-D*i/P,c+f*r/P,Q,!0)));l&&t.Cb(t.X)}function Qi(t){var e,A,n,P,r,i,f,D,Q,U,L;for(ut(t,1),oG(t),Q=!1,A=0;A<t.f;A++)if(t.C[A]==7&&t.s[A]==0){if(L=G1(t,A),L==4){for(U=0;U<t.j[A];U++)if(f=t.i[A][U],t.n[A][U]==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(U=0;U<t.j[A];U++){if(f=t.i[A][U],D=t.k[A][U],t.n[A][U]==2&&t.C[f]==8){Q=!0,++t.s[A],--t.s[f],t.H[D]=1;break}if(t.n[A][U]==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(U=0;U<2;U++)if(tA(t,t.D[U][r])){e=t.D[1-U][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[U][r]],t.H[r]=512,i=!0):t.H[r]==16&&(t.H[r]=512,i=!0));break}return i&&(mf(t),Q=!0),Q&&(t.T=0),Q}function W5(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,Pk(t),P=d$(t.L),r=!1,t.p=h(F,k,6,t.L.q,15,1),A=0;A<t.L.q;A++)t.p[A]=ou(t.L,A),t.p[A]!=0&&(r=!0),r0(t.L,A)&&(t.p[A]=128),Vg(t.L,A)&&(t.G&I1)==0&&(t.p[A]=256);for(W1(t,-10),MZ(t),BK(t),cW(t),tK(t),t.Cb(t.X),t.Ab(t.Y),W1(t,t.Q),em(t),t.U.a.length=0,t.$.a.length=0,(t.G&1)!=0&&(np(t,P),MF(t),Ej(t)),i=0;i<t.L.q;i++)UQ(t,i)?(W1(t,-3),zQ(t,i,P),W1(t,t.Q)):t.p[i]!=0?(W1(t,t.p[i]),zQ(t,i,P),W1(t,t.Q)):!r&&t.L.O!=1&&K(t.L,i)!=1&&K(t.L,i)!=6&&(t.G&re)==0&&MA(t.L,i)==null&&K(t.L,i)<Pl.length&&Pl[K(t.L,i)]!=0?(f=Pl[K(t.L,i)],bO(t,(n=t.M!=0?t.M:t.D!=0?t.D:-1,Gs(f,n))),zQ(t,i,P),W1(t,t.Q)):zQ(t,i,P);(t.G&1)==0&&(MF(t),Ej(t),np(t,P))}}function Sj(t,e,A,n,P,r){var i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C;for(c=h(F,k,6,n+1,15,1),g=h(F,k,6,r+1,15,1),m=r,D=$9(P[r-1]),D!=0?(qh(g,P,0,D),qh(c,A,0,D)):(sA(A,0,c,0,n),sA(P,0,g,0,r)),Q=g[m-1],L=e-1,s=n;L>=0;){if(U=0,c[s]==Q)U=-1;else if(v=O1(M1(V(c[s],h1),32),V(c[s-1],h1)),j=wZ(v,Q),U=zt(j),b=zt(q0(j,32)),U!=0){l=0,C=0,R=!1,++U;do{if(--U,R)break;l=Un(V(U,h1),V(g[m-2],h1)),C=O1(M1(b,32),V(c[s-2],h1)),T=O1(V(b,h1),V(Q,h1)),$9(zt(DA(T,32)))<32?R=!0:b=zt(T)}while(S1(Or(l,dV),Or(C,dV)))}if(U!=0&&(i=dX(c,s-m,g,m,U),i!=0))for(--U,f=0,y=0;y<m;y++)f=O1(f,O1(V(c[s-m+y],h1),V(g[y],h1))),c[s-m+y]=zt(f),f=DA(f,32);t[L]=U,--s,--L}return D!=0?($k(g,m,c,0,D),g):(sA(c,0,g,0,r),c)}function d$(t){var e,A,n,P,r,i,f;for(ut(t,15),i=h(F,k,6,3,15,1),A=0;A<t.f;A++)(t.u[A]&Tn)!=0&&(f=(t.u[A]&m1)>>18,f!=0&&(i[f]=w.Math.max(i[f],(t.u[A]&m1)>>18!=1&&(t.u[A]&m1)>>18!=2?-1:(t.u[A]&RA)>>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]&ln)>>10)));for(r=h(F,D0,7,3,0,2),r[1]=h(F,k,6,1+i[1],15,1),r[2]=h(F,k,6,1+i[2],15,1),e=0;e<t.f;e++)(t.u[e]&Tn)!=0&&(f=(t.u[e]&m1)>>18,f!=0&&++r[f][(t.u[e]&m1)>>18!=1&&(t.u[e]&m1)>>18!=2?-1:(t.u[e]&RA)>>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]&ln)>>10]);return r}function B$(t,e){var A,n,P,r;for(t.b&&bi(t.b),t.c&&bi(t.c),P=0,n=K1(e);n!=null&&n.startsWith(rU);){for(n=v1((Xt(7,n.length+1),n.substr(7)));n.endsWith(\"-\");){if(A=K1(e),!A.startsWith(rU))return!1;n=v1(ju(UA(n,0,n.length-1),(Xt(7,A.length+1),A.substr(7))))}if(n.startsWith(\"BEGIN\"))if(r=v1((Xt(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)Zz(t,n);else if(P==2)Ha(t,n);else if(P==3)N$(t,n);else if(P==4)X$(t,n);else if(P==5)v$(t,n);else return!1;n=K1(e)}for(;n!=null&&!(n.startsWith(D9)||A1(n,PU));)n=K1(e);return!0}function v$(t,e){var A,n,P,r,i,f;if(f=mG(e),f!=null){if(i=zX(e,f),e.startsWith(\"MDLV30/STEABS\"))if(A1(f,R2))for(r=0;r<i.length;r++)He(t.j,ND(t,i[r]),0,-1);else for(P=0;P<i.length;P++)U8(t.j,oL(t,i[P]),0,-1);else if(e.startsWith(\"MDLV30/STERAC\"))if(n=c1(UA(e,13,ne(e,13)),o1,It),A1(f,R2))for(r=0;r<i.length;r++)He(t.j,ND(t,i[r]),1,n-1);else for(P=0;P<i.length;P++)U8(t.j,oL(t,i[P]),1,n-1);else if(e.startsWith(\"MDLV30/STEREL\"))if(n=c1(UA(e,13,ne(e,13)),o1,It),A1(f,R2))for(r=0;r<i.length;r++)He(t.j,ND(t,i[r]),2,n-1);else for(P=0;P<i.length;P++)U8(t.j,oL(t,i[P]),2,n-1);else if(e.startsWith(\"MDLV30/HILITE\"))if(A1(f,R2))for(P=0;P<i.length;P++)FD(t.j,ND(t,i[P]),448);else for(P=0;P<i.length;P++)A=oL(t,i[P]),FD(t.j,z(t.j,0,A),448),FD(t.j,z(t.j,1,A),448)}}function F$(t){var e,A,n,P,r,i,f,D,Q;if(!t.i)return!1;un(t.g,0),un(t.b,0),t.f=null,Q=!1,A=-1,n=null,t.c=t.d==null?null:h(it,Dt,2,t.d.length,6,1),t.e=-1;do{try{if(D=K1(t.i),D==null)return un(t.g,0),!1}catch(U){if(U=t0(U),Zt(U,75))return un(t.g,0),!1;throw At(U)}if(Q)J(t.b,D),Oe(t.b,10);else if(D.startsWith(\">\"))Q=!0,J(t.g,D9),Oe(t.g,10),J(t.b,D),Oe(t.b,10);else{J(t.g,D),Oe(t.g,10),D.startsWith(D9)&&(Q=!0);continue}if(t.d!=null)if(D.length==0)A=-1;else if(A==-1){if(n=aR(D),n!=null){for(A=-1,e=0;e<t.d.length;e++)if(A1(n,t.d[e])){A=e;break}if(t.e==-1){for(r=GV,i=0,f=r.length;i<f;++i)if(P=r[i],A1(n,P)){t.e=A;break}}}}else t.c[A]==null?t.c[A]=D:t.c[A]=ju(ju(t.c[A],$A),D)}while(!D.startsWith(PU));return!0}function m$(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y;for(A=0;A<t.q;A++)y=Cn(t,A),y+WA(t,A,y,t.C[A])-G1(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(P0(V(t.B[e],I1),0)&&(U=P0(V(t.B[e],rP),896)?3:P0(V(t.B[e],rP),384)?2:P0(V(t.B[e],128),128)?1:0,D=(y=Cn(t,e),y+WA(t,e,y,t.C[e])-G1(t,e)),t.s[e]==0&&P0(V(t.B[e],i9),0)&&t.C[e]!=6&&++D,L=f,L>3-U&&(L=3-U),L>D+f-U&&(L=D+f-U),L>0&&(s=U==0?0:M1(V(t.B[e],rP),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(rP,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&&mf(t),i}function qj(t,e){var A,n,P,r,i,f,D,Q,U,L;if((e&~t.T)!=0&&((t.T&1)==0&&(HR(t),tp(t),t.T|=1,t.K&&!GT(t)&&m$(t)&&(HR(t),tp(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){bR(t,1),t.T|=2;return}for(bR(t,7),P=0;P<t.f;P++)for(U=0;U<t.j[P];U++)if(D=t.k[P][U],!(D<t.g&&Re(t.p,D)))for(f=t.i[P][U],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&&!i0(t.p,A)){for(U=0;U<t.j[A];U++)if(t.n[A][U]>1)for(f=t.i[A][U],D=t.k[A][U],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 Ij(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,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=h(F,k,6,2,15,1),y=h(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],T=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]==T){A=0;break}}A!=0&&(e[n]=!1,--Q,e0(t,i[0])>1&&e0(t,i[1])>1&&(c=L5(t,y[0],i[0]),g=L5(t,y[1],i[1]),U=c<g?0:1,l=D1(t,y[U],i[U]),r==null&&(r=h(rt,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,U;if(t.o[e]!=0)return!1;if(t.R.K){for(Q=0;Q<2;Q++)for(n=z(t.R,Q,e),U=0;U<Mt(t.R,n);U++)if(Qe(t.R,_(t.R,n,U)))return!1}return dt(t.R,e)==1?HW(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||a1(t.R,r)==2||a1(t.R,i)==2||(f=new gf(t.R,t.f,i,r),f.f&&A==1)||(D=new gf(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=E3(t.R,e)?3:t.jb?J$(t,f,D):OG(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 k$(t){var e,A,n,P,r,i,f,D,Q,U,L;for(A=0,L=new Wt(t.g);L.a<L.c.a.length;)if(Q=t1(L),ut(Q,1),Q.K)for(e=0;e<Q.f;e++)if(gt(V(Q.B[e],Pe),0)){if(w.Math.abs(Q.w[e])!=0)return!1}else++A;else A+=Q.f;for(D=new Wt(t.f);D.a<D.c.a.length;)if(i=t1(D),ut(i,1),i.K)for(e=0;e<i.f;e++)if(gt(V(i.B[e],Pe),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=h(rt,ft,6,r+1,16,1),U=new Wt(t.g);U.a<U.c.a.length;)for(Q=t1(U),e=0;e<Q.f;e++)if(!Q.K||P0(V(Q.B[e],Pe),0)){if(P=w.Math.abs(Q.w[e]),n[P])return!1;n[P]=!0}for(f=new Wt(t.f);f.a<f.c.a.length;)for(i=t1(f),ut(i,1),e=0;e<i.f;e++)if(!i.K||P0(V(i.B[e],Pe),0)){if(P=w.Math.abs(i.w[e]),P>=r||!n[P])return!1;n[P]=!1}return!0}function b$(t,e,A,n){var P,r,i,f,D,Q,U,L;for(f=t.e[n],D=f+1;D<t.A&&t.f[t.s[D]]==n;)++D;for(U=f;U<D;U++)A[U]=-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]]||Py(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]]&&Ys(t,Ot(t.H,t.G[t.u[i]],A[i]),t.v[i])&&++i:e[r]||Py(t,r,t.s[i])&&Ys(t,Ot(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(zj(t,n)&&pR(t,n)&&TR(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 R$(t){var e,A,n,P,r,i,f;if(i=Gi(t.o),A=null,i.length!=0&&(n=i.indexOf(k0(64)),n!=-1&&(A=(pt(0,n,i.length),i.substr(0,n)),i=(Xt(n+1,i.length+1),i.substr(n+1)))),i.length!=0&&(e=SA(i,t.d.c),e!=0||A1(i,\"?\"))){if(P=0,Gi(t.p).length!=0)try{if(P=c1(Gi(t.p),o1,It),P<(Y1(),U9)[e]-18||P>U9[e]+12){CD(t.c,\"Your mass is out of range!\");return}}catch(D){if(D=t0(D),Zt(D,40)){CD(t.c,\"Your mass is not a number!\");return}else throw At(D)}if(f=-1,Gi(t.q).length!=0)try{if(f=c1(Gi(t.q),o1,It),f<0||f>15){CD(t.c,\"Your valence is out of range!\");return}}catch(D){if(D=t0(D),Zt(D,40)){CD(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,Sx(t.d,e,P,f,r,A),t.a!=-1&&(Bf(t.e,t.a,e,P,f,r),u8(t.e,t.a,A)),t.f=!0,Rr(t.c)}}function j$(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m;if(A&&t.eb==6)for(c=h(F,k,6,t.L.length,15,1),r=0;r<t.V.q;r++)s=t.M[r],zn(t.L[s],c[s],!r0(t.V,r)),++c[s];for(f=h(wl,A0,35,t.L.length,0,1),y=0;y<t.L.length;y++)t.eb==6&&(Ar(new Y8(A?4:0),t.L[y]),Lf(t.L[y])),D=new du(t.L[y]),SF(D,e,null,Q0|t.T),f[y]=D.v;for(m=1.8000000715255737*t.T,i=Pn(t.V,24*t.ab),n=(t.U&4)==0?0:t.eb==5?WH*VD(t.k):rh(N(t.I,0))*t.T/i,g=.5*m,l=0;l<=t.L.length&&((t.U&4)!=0&&l==t.Y&&(mT(N(t.I,0),g-m/2,Vr(t.k)/2,g-m/2+n,Vr(t.k)/2),g+=n),l!=t.L.length);l++)Q=g-f[l].c,U=.5*(Vr(t.k)-f[l].a)-f[l].d,CL(t.L[l],Q,U),g+=m+f[l].b;for(j5(t.G,e,new QA(0,0,VD(t.k),Vr(t.k)),Q0|t.T),T=h(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],T[L])),Ie(t.V,P,jt(t.L[L],T[L])),++T[L];Lf(t.V)}function p$(t,e){var A,n,P,r,i,f,D,Q,U,L,s;for(f=new f1,ut(e,1),Q=h(rt,ft,6,e.f,16,1),A=0;A<e.f;A++)if(t.f[A]&&(K(t.i,A)==7||K(t.i,A)==8||K(t.i,A)==16||K(t.i,A)==34||K(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,k1(r)),U=0;U<e.j[n];U++)P=e.i[n][U],Q[P]||(Q[P]=!0,i=e.k[n][U],s=e.n[n][U],e.o[n]+2==L+s&&(mt(f,k1(i)),L>=s&&(e.o[P]<s?uQ(e,P)&&$s(t,e,P,!0,!1,Q,f):$s(t,e,P,!0,!0,Q,f)),s>=L&&uQ(e,A)&&$s(t,e,P,!1,!1,Q,f),t.f[P]&&(K(t.i,P)==5||K(t.i,P)==6||K(t.i,P)==7||K(t.i,P)==8||K(t.i,P)==16||K(t.i,P)==34||K(t.i,P)==52)&&e.o[P]<s&&(L<=2&&s>=2&&uQ(e,A)&&$m(t,e,r,i),L>=2&&s<=2&&uQ(e,P)&&$m(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 C$(t,e,A,n,P,r){var i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a;for(v=-1,C=0,j=0,p=0,c=0,g=0,m=0,x=0,a=0,C=0,U=0;U<t.d;U++)C+=n[U]*n[U];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(p=0,y=0;y<t.d;y++)S=w.Math.abs(n[y])/w.Math.max(w.Math.abs(e[y]),1),S>p&&(p=S);for(m=1e-7/p,c=1,T=0;T<1e3;){if(c<m){v=1;break}for(l=0;l<t.d;l++)P[l]=e[l]+c*n[l];if(t.k=is(t,P),t.k-A<=LU*c*j)return 0;T==0?x=-j/(2*(t.k-A-j)):(R=t.k-A-c*j,b=a-A-g*j,i=(R/(c*c)-b/(g*g))/(c-g),f=(-g*R/(c*c)+c*b/(g*g))/(c-g),i==0?x=-j/(2*f):(D=f*f-3*i*j,D<0?x=.5*c:f<=0?x=(-f+w.Math.sqrt(D))/(3*i):x=-j/(f+w.Math.sqrt(D))),x>.5*c&&(x=.5*c)),g=c,a=t.k,c=w.Math.max(x,.1*c),++T}for(Q=0;Q<t.d;Q++)P[Q]=e[Q];return v}function M$(t){var e,A,n,P,r,i,f,D,Q,U,L;for(t._=h(q,I,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],ZT(t.R,e))for(f=0;f<O(t.R,e);f++){for(P=_(t.R,e,f),L=0,U=h(F,k,6,3,15,1),Q=0;Q<O(t.R,P);Q++)U[L]=_(t.R,P,Q),U[L]!=e&&++L;L==2&&t.f[U[0]]>t.f[U[1]]^t.H[U[0]]<t.H[U[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=h(q,I,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(U=h(F,k,6,2,15,1),L=0,Q=0;Q<3;Q++)_(t.R,n,Q)!=z(t.R,1-f,A)&&(U[L++]=_(t.R,n,Q));t.f[U[0]]>t.f[U[1]]&&(D=!D),t.H[U[0]]<t.H[U[1]]&&(D=!D)}t.j[A]=t.o[A]==1^D?1:2}else t.j[A]=t.o[A]}function H$(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R;for(e=eW(t),r=h(q,I,6,t.f.r,15,1),EW(t,r,e),P=0;P<t.f.r;P++)r[P]==2&&(qi(t.f,z(t.f,0,P))||qi(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,c=new I5(L),T=-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=MW(t,f[0],f[1]),A=h(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==T);v!=T&&(T=v,Xj(L,v),D=zb(L),g>L.c&&(g=L.c,c=new I5(L)))}}q9(t.d,y,c),L=c,U=1;do{for(m=9999,l=0;l<L.e.length;l++)R=e[L.e[l]],R==U?Pa(L,l):R>U&&R<m&&(m=R);U=m}while(m!=9999)}}function xj(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&&Zn(e[A]&w1);)P.a=10*P.a+e[A]-48,++P.b,++A;if(P.a==0||P.a>=(Y1(),X0).length)throw At(new V1(\"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=(Y1(),SA(q8(h2(e,A,(i=P.b,c0(),i))),321)),P.b==2&&P.a==0&&(P.b=1,P.a=SA(q8(h2(e,A,(r=P.b,r))),321)),P.d=!1,P.a==0)throw At(new V1(\"SmilesParser: Unknown atom label. position:\"+(A-1)));return!0}return e[A]==65&&e[A+1]==115||e[A]==83&&e[A+1]==101?(P.b=2,P.a=(Y1(),SA(q8(h2(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=(Y1(),SA(q8(h2(e,A,(r=P.b,c0(),r))),321)),P.c=!1,!0):!1}function V$(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m;for(A=-1,Q=!1,y=Ve,e=z9(t.i,t.c),T=0;T<t.d.length;T++)t.d[T]<t.w[T].d.length-1&&(s=k3(e,T,t.d[T])/k3(e,T,t.d[T]+1),y>s&&(y=s,A=T));for(c=0;c<t.c.length;c++)t.c[c]<t.v[c].b.length-1&&(s=s3(t.v[c],t.c[c])/s3(t.v[c],t.c[c]+1),y>s&&(y=s,A=c,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=h(GE,k2,165,r,0,1),Q?++t.c[A]:++t.d[A],i=0;i<r;i++){for(l=i,m=h(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=h(F,k,6,t.c.length,15,1),U=0;U<t.c.length;U++)(!Q||U!=A)&&(n=t.c[U]+1,n!=1&&(P[U]=l%n,l=l/n|0));Q?P[A]=t.c[A]:m[A]=t.d[A],t.a[i]=OD(t,m,P)}wu(t.a,new vw),t.b=-1}function Nj(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C;if(!((t.F[e]&3)==0||(t.F[e]&3)==3||!fi(t,e))){for(b=-1,v=-1,R=-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,b=f,R=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][b]!=v&&(t.D[0][b]=t.D[1][b],t.D[1][b]=v),D=It,y=0;y<t.j[R];y++)i=t.i[R][y],t.k[R][y]!=e&&D>i&&(D=i);for(c=h(F,k,6,2,15,1),g=0,U=0;U<t.j[m];U++)t.k[m][U]!=e&&(c[g++]=t.i[m][U]);r=kA(t.J[R].a,t.J[R].b,t.J[m].a,t.J[m].b),A=0,g==2?(c[0]>c[1]&&(C=c[0],c[0]=c[1],c[1]=C),Q=Je(r,Y0(t,m,c[0])),T=Je(r,Y0(t,m,c[1])),A=Q-T):A=Je(r,Y0(t,m,c[0])),A<0^(t.F[e]&3)==2^D==v?t.H[b]=257:t.H[b]=129}}}function E$(t){var e,A,n;if(null.vd()||null.vd())p5(t,!0);else if(null.vd())t.r&&wv();else if(null.vd())KI(t,null.vd());else if(null.vd())Lv(t);else if(!null.vd())if(null.vd())hQ(t),kL(t,w.Math.max(t.eb,1));else if(null.vd())xh(t,!0,!0);else if(null.vd())xh(t,!1,!0);else if(null.vd())xh(t,!0,!1);else if(null.vd())Iz(t);else if(null.vd())jU=!jU,jU&&hQ(t);else if(null.vd())v5(t,!0);else if(null.vd())v5(t,!1);else if(null.vd())xK(t);else if(null.vd())hT(t._,LV,sV);else if(null.vd())if(null.vd(),e=c1(null.vd(),o1,It),A=c1(null.vd(),o1,It),r0(t.V,e))for(n=0;n<t.V.f;n++)r0(t.V,n)&&FD(t.V,n,A);else FD(t.V,e,A);else null.vd()?(t.H=6,t.eb=w.Math.max(t.eb,1),n1(t.k)):null.vd()?(t.H=256,t.eb=w.Math.max(t.eb,1),n1(t.k)):null.vd()&&Wx(t,t.w==19?16:0)}function S$(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l,T;if(P=new uD,mt(P.a,new We(\"cLogP Values are estimated applying an atom-type based increment system.\",2)),mt(P.a,new We($H,2)),mt(P.a,new We(A4,2)),t){for(Qi(t),ut(t,7),f=0,n=new lP,D=new Pu(\"#0.000\"),e=0;e<t.f;e++)try{A=ny(t,e,6241),T=le(n,oQ(A)),T?ze(n,oQ(A),k1(T.a+1)):ze(n,oQ(A),k1(1))}catch(c){if(c=t0(c),Zt(c,19))++f;else throw At(c)}for(f!=0&&mt(P.a,new We(\"Warning: \"+f+\" atom type(s) could not be determined.\",2)),l=(i=new N8(new x8(new w9(n).a).b),new g9(i));p9(l.a.a);)y=(r=Br(l.a),r.dd()),U=a9(Yf,y),(U<0?-1:U)!=-1?ZP(P,(s=y,XP(G9(n,s))+\" * \"+ng(D,K4[Q=a9(Yf,y),Q<0?-1:Q])+\" AtomType: 0x\"+Nh(y.a)),2):ZP(P,\"Warning: For atom type 0x\"+Nh(y.a)+\" (\"+(L=y,XP(G9(n,L)))+\" times found) is no increment available.\",2)}return P}function Oj(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m;for(T=e.f,t.j=h(NA,a0,6,e.f,14,1),t.k=h(F,k,6,e.f,15,1),f=0;f<T;f++)t.j[f]=Or(V(Y(up(e,f),e.B[f]),C6),Vp),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=h(NA,a0,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),U=0,L=Q.length;U<L;++U)if(s=Q[U],(e.G[s]&y8)!=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],ir):m==4?t.B[n]=Y(t.B[n],fr):m==5?t.B[n]=Y(t.B[n],Dr):m==6?t.B[n]=Y(t.B[n],ur):m==7&&(t.B[n]=Y(t.B[n],Qr))}for(c=e.g,t.n=h(F,k,6,e.g,15,1),D=0;D<c;D++)t.n[D]=(Ob(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 q$(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l;if(f=-1,P=bs(t,e),i=P==-1?XL(t,e):-1,A!=0){for(y=-1,U=0;U<t.V.f;U++)U!=P&&Ae(t.V,U)==A&&(!mP(t.V,e)||!r0(t.V,U))&&(D=VA(t.V,U),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=$i(t.V,L),y<D&&(y=D));if((P==-1?cP(t.V,i):Ae(t.V,P))!=A)f=w.Math.min(y+1,31);else if(f=P==-1?$i(t.V,i):VA(t.V,P),mP(t.V,e)){for(l=!0,s=0;s<t.V.f;s++)if(s!=P&&r0(t.V,s)&&Ae(t.V,s)==A&&VA(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&&$i(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)&&Cr(t.V,Q)&&(n=bs(t,Q),r=XL(t,Q),n!=-1?He(t.V,n,A,f):r!=-1&&U8(t.V,r,A,f));else P!=-1?He(t.V,P,A,f):i!=-1&&U8(t.V,i,A,f)}function I$(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b;for(P=h(wl,A0,35,t.k.length,0,1),b=0,R=0,y=0;y<t.k.length;y++)L2(t.e[y],e,null,Q0),P[y]=t.e[y].v,b+=P[y].b,R=w.Math.max(R,P[y].a);for(f=h(wl,A0,35,t.a.length,0,1),v=0,m=0,l=0;l<t.a.length;l++)L2(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),R=w.Math.max(R,24+2*m),A=-1,!t.g)t.g=new to,mt(t.g,new KD),A=0;else{for(T=0;T<t.g.a.length;T++)if(Zt(N(t.g,T),62)){A=T;break}A==-1&&(A=t.g.a.length,mt(t.g,new KD))}for(g=18,s=0;s<t.k.length;s++){if(s==t.n){for(mT(N(t.g,A),g-18,R/2,g-18+n,R/2),r=g+-6,i=.5*(R-12)-m,c=0;c<t.a.length;c++)Q=r+.5*(v-f[c].b)-f[c].c,L=i-f[c].d,qo(t.b[c],new z3(Q,L)),i+=12+f[c].a;g+=n}D=g-P[s].c,U=.5*(R-P[s].a)-P[s].d,qo(t.e[s],new z3(D,U)),g+=36+P[s].b}t.o=!1}function x$(t){var e,A,n,P,r,i,f,D,Q,U,L,s;for(ut(t.g,t.N),D=w.Math.max(t.g.f,t.g.g)+16,t.s=h(F,k,6,D,15,1),t.u=h(F,k,6,D,15,1),t.v=h(F,k,6,D,15,1),t.t=h(rt,ft,6,D+1,16,1),i=h(rt,ft,6,t.g.f,16,1),f=h(rt,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(U=0;U<De(t.g,t.s[n]);U++)Q=A5(t,n,Q,U,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=A5(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=A5(t,n,Q,L,i,f,t.f[e]));for(;t.t[++n];);}for(t.e=h(F,k,6,t.d,15,1),s=0;s<t.d;s++)t.e[s]=-1;for(U=t.w;U<n;U++)P=t.f[t.s[U]],t.e[P]==-1&&(t.e[P]=U)}t.A=n}function N$(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v;for(l=0,T=(D=ne(e,l),D==-1?e.length:D),r=c1((pt(l,T,e.length),e.substr(l,T-l)),o1,It),l=lA(e,T),T=(Q=ne(e,l),Q==-1?e.length:Q),i=c1((pt(l,T,e.length),e.substr(l,T-l)),o1,It),l=lA(e,T),T=(U=ne(e,l),U==-1?e.length:U),A=ND(t,c1((pt(l,T,e.length),e.substr(l,T-l)),o1,It)),l=lA(e,T),T=(L=ne(e,l),L==-1?e.length:L),n=ND(t,c1((pt(l,T,e.length),e.substr(l,T-l)),o1,It)),g=0,m=0;(l=lA(e,T))!=-1;)if(T=(f=ne(e,l),f==-1?e.length:f),c=(pt(l,T,e.length),e.substr(l,T-l)),y=c.indexOf(k0(61)),s=(pt(0,y,c.length),c.substr(0,y)),v=c1((Xt(y+1,c.length+1),c.substr(y+1)),o1,It),A1(s,\"CFG\"))switch(v){case 1:g=1;break;case 2:g=i==2?3:4;break;case 3:g=6}else A1(s,\"TOPO\")&&(m=v);P=GR(t,A,n,i,g,m),P+1!=r&&(!t.c&&(t.c=new lP),ze(t.c,k1(r),k1(P)))}function O$(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l;if(Q=v1(K1(e)),Q.length==0||(t.e=Q),K1(e),n=K1(e),!A&&n.startsWith(qy)&&(P=(Xt(13,n.length+1),n.substr(13)),OQ(P,!0,t)))return!0;for(l=K1(e),y=c1(v1((pt(0,3,l.length),l.substr(0,3))),o1,It),L=c1(v1((pt(3,6,l.length),l.substr(3,3))),o1,It),f=new tu,i=0;i<y;i++){if(l=K1(e),l==null||!l.startsWith(\"$MOL\"))throw At(new V1(PM));s=new JA,D=new fu;do l=K1(e),D.a+=\"\"+l,D.a+=$A;while(l!=null&&!l.startsWith(D9));if(l==null)throw At(new V1(rM));mo(f,s,new nn(new b9(D.a))),mt(t.g,s),t.d=-1}for(r=0;r<L;r++){if(l=K1(e),l==null||!l.startsWith(\"$MOL\"))throw At(new V1(PM));U=new JA,D=new fu;do l=K1(e),D.a+=\"\"+l,D.a+=$A;while(l!=null&&!l.startsWith(D9));if(l==null)throw At(new V1(rM));mo(f,U,new nn(new b9(D.a))),mt(t.f,U),t.d=-1}return!0}function G$(t,e){i8();var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x;for(Nm(),l=h(rt,ft,6,e.r,16,1),Ij(e,l),i=0;i<e.g;i++)if(l[i]&&(S=h(F,k,6,4,15,1),p=new mh,x=HF(e,i,S,p),x!=null&&!OX(S,t)&&(C=(b=ri(gn,x),b?bj(b):null),Q=(j=ri(gn,x),j?Os(j):null),g=(R=ri(gn,x),R?Zj(R):null),C==null&&(c=new r6(e,S),C=c.b,Q=c.a,g=c.c),C!=null))){if(n=null,v=0,(e.F[i]&64)==0){for(y=R1(rt,[h0,ft],[12,6],16,[2,e.q],2),D=h(F,k,6,2,15,1),L=0;L<2;L++)D[L]=SQ(e,p.e[L],p.b[L],y[L],null,null);for(v=D[0]<D[1]?0:1,n=h(F,k,6,D[v],15,1),s=0,A=0;A<e.q;A++)y[v][A]&&(n[s++]=A)}mt(t,new xL(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],T=e0(e,f),U=e.e[f]-T,T==1&&U!=0){m=e.D[1-L][r],P=e.C[f],P>6&&e.o[m]==1?j_(e,f,m,U,t):e.o[m]!=2&&e.e[m]>1&&IW(e,f,m,U,t);break}}}function J$(t,e,A){var n,P,r,i,f,D,Q;return r=h(yt,wt,6,3,15,1),r[0]=kt(t.R,A.a)-kt(t.R,e.a),r[1]=jt(t.R,A.a)-jt(t.R,e.a),r[2]=vA(t.R,A.a)-vA(t.R,e.a),D=h(yt,wt,6,3,15,1),D[0]=kt(t.R,e.b)-kt(t.R,e.a),D[1]=jt(t.R,e.b)-jt(t.R,e.a),D[2]=vA(t.R,e.b)-vA(t.R,e.a),Q=h(yt,wt,6,3,15,1),Q[0]=kt(t.R,A.b)-kt(t.R,A.a),Q[1]=jt(t.R,A.b)-jt(t.R,A.a),Q[2]=vA(t.R,A.b)-vA(t.R,A.a),i=h(yt,wt,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=h(yt,wt,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 Gj(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=ee(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=ee(t.k,e)&384,f==256?n.a+=i+\"@\":f==128&&(n.a+=i+\"!@\"))}function z$(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c;if(t.R.f==0){t.s=\"\";return}for(L=t.jb&t.b,c=t.jb?16:8,_3(t,!0),Oe(t.u,L?35:33),Jt(t,t.jb?1:0,1),Jt(t,e?1:0,1),Jt(t,c>>1,4),l=0,D=1;D<t.R.f;D++)l=eR(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<Mt(t.R,n);y++)l=eR(t,_(t.R,n,y),n,l,A);if(t.R.f>1&&l==0){t.s=\"\";return}for(i=1<<c,s=l/((i>>1)-1),T=l+.5*s,U=1;U<t.R.f;U++)mb(t,t.B[U],t.F[U]==-1?-1:t.B[t.F[U]],T,s,c,A);if(L)for(f=0;f<t.R.f;f++)for(n=t.B[f],y=O(t.R,n);y<Mt(t.R,n);y++)mb(t,_(t.R,n,y),n,T,s,c,A);e&&(r=t.jb?1.5:(Y1(),Y1(),wn),P=kR(t.R,L?t.R.q:t.R.f,L?t.R.r:t.R.g,r,A),Jt(t,w.Math.min(i-1,w.Math.max(0,vt(.5+w.Math.log10(P/.1)/w.Math.log10(2e3)*(i-1)))),c),Jt(t,Fh(A[t.B[0]].a/P,i),c),Jt(t,Fh(A[t.B[0]].b/P,i),c),t.jb&&Jt(t,Fh(A[t.B[0]].c/P,i),c)),t.s=ML(t)}function _5(t,e){var A,n,P,r,i,f,D,Q,U,L;for(P=Ju(e,0);P>0&&e[P-1]==45;)P=Ju(e,P+1);for(r=P==-1?-1:Ju(e,P+1);r>0&&e[r-1]==45;)r=Ju(e,r+1);if(r==-1)throw At(new V1(\"Missing one or both separators ('>').\"));if(Ju(e,r+1)!=-1)throw At(new V1(\"Found more than 2 separators ('>').\"));for(L=new P8,U=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 V1(\"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 JA,D6(t,f,e,Q,D,!0,!0),t.q==1&&t.p)return _5(new LQ(t.j|2),e);U==0?(mt(L.g,f),L.d=-1):U==1?mt(L.a,f):(mt(L.f,f),L.d=-1)}for(n=D;n<e.length&&e[n]==62;)++n,++U}return L}function $5(){$5=B1;var t,e,A;for(new nf(1,0),new nf(10,0),new nf(0,0),BE=h(vE,Ye,31,11,0,1),HU=h(l9,a0,6,100,15,1),ic=B(d(yt,1),wt,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]),fc=h(F,k,6,ic.length,15,1),di=B(d(yt,1),wt,6,15,[1,10,100,1e3,nP,jy,1e6,1e7,1e8,Of,1e10,1e11,1e12,1e13,1e14,1e15,1e16]),dl=h(F,k,6,di.length,15,1),VU=h(vE,Ye,31,11,0,1),t=0;t<VU.length;t++)BE[t]=new nf(t,0),VU[t]=new nf(0,t),HU[t]=48;for(;t<HU.length;t++)HU[t]=48;for(A=0;A<fc.length;A++)fc[A]=vs(ic[A]);for(e=0;e<dl.length;e++)dl[e]=vs(di[e]);P9()}function Jj(t){var e,A,n,P,r,i;if(r='<svg id=\"'+hf(t.g!=null?t.g:\"mol\"+I2)+M0+'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> #\"+hf(t.g!=null?t.g:\"mol\"+I2)+\" { pointer-events:none; } #\"+hf(t.g!=null?t.g:\"mol\"+I2)+` .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 Wt(t.b);P.a<P.c.a.length;)n=t1(P),Er(t,n);for(A=new Wt(t.a);A.a<A.c.a.length;)e=t1(A),Er(t,e)}return t.i||Er(t,\"</g>\"),r+t.c.a+\"</svg>\"}function Y$(t,e,A,n,P){var r,i,f,D,Q,U,L,s,y,l,T,c,g,m;if(s=h(rt,ft,6,t.g,16,1),s[P]=!0,y=h(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=N3(t.p,A),m==6&&r==2&&i==3&&HT(t,y[1])>=3){for(g=h3(t.p,A),L=0;L<6;L++)if(e==g[L]){if(c=WT(t.p,A,f==g[WT(t.p,A,L+2)]?L-2:L+2),T=g[c],U=t.u[T]&hn,(U==0?0:U==re?2:U==I1?3:4)>=3&&AR(t,y[1],T,2,null)==2)return!0;break}}if(D=t.o[f]==1||f<t.f&&i0(t.p,f)||EP(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 K$(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,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=Ot(t.j,e,s),t.e[P]){for(++i,n=_(t.j,e,s),tA(t.j,n)&&(Q=!0),T=0;T<O(t.j,n);T++)if(c=_(t.j,n,T),g=Ot(t.j,n,T),c!=e&&t.e[g]){f=!0;break}}if(i>=2&&!f){for(r=h(F,k,6,i,15,1),U=gQ(t.j,e),U==0&&(U=2),l=0,y=0;y<O(t.j,e);y++)P=Ot(t.j,e,y),t.e[P]&&(n=_(t.j,e,y),r[l++]=(A=K(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(u0.prototype.gd,u0,[])),t.b-=1+i,t.d[e]=!1,D=w.Math.min(i-1,U),L=0;L<r.length;L++)n=_(t.j,e,r[L]&w1),P=Ot(t.j,e,r[L]&w1),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 zj(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T;for(i=0,D=0;D<t.g.f;D++)if((t.f==null||t.f[D]==e)&&gt(V(o0(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(Ae(t.g,D)==1){++i;continue}if(Ae(t.H,s)==1)return!1;if(Ae(t.g,D)==2){++i;continue}if(Ae(t.H,s)==2||B5(t,D)==(L==l))return!1}if(i!=0){for(P=h(F,k,6,i,15,1),r=0,Q=0;Q<t.g.f;Q++)(t.f==null||t.f[Q]==e)&&gt(V(o0(t.g,Q),ge),0)&&(L=d0(t.g,Q),L!=0&&L!=3&&(P[r++]=VA(t.g,Q)<<24|Ae(t.g,Q)<<22|Q));for(P.sort(Fe(u0.prototype.gd,u0,[])),r=0;r<P.length;)for(U=P[r]&x0,y=t.G[U],A=P[r]&-4194304,n=B5(t,U)^d0(t.g,U)==d0(t.H,y),++r;r<P.length&&(P[r]&-4194304)==A;r++)if(f=P[r]&x0,s=t.G[f],Ae(t.H,s)!=Ae(t.H,y)||VA(t.H,s)!=VA(t.H,y)||(T=B5(t,f)^d0(t.g,f)==d0(t.H,s),T!=n))return!1}return!0}function X$(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v;if(s=0,y=(r=ne(e,s),r==-1?e.length:r),v=(pt(s,y,e.length),e.substr(s,y-s)),A1(\"DEFAULT\",v)&&(s=lA(e,y),y=(i=ne(e,s),i==-1?e.length:i),v=(pt(s,y,e.length),e.substr(s,y-s)),v.startsWith(\"CLASS\")&&(s=lA(e,y),y=(f=ne(e,s),f==-1?e.length:f),v=(pt(s,y,e.length),e.substr(s,y-s)),A1(\"-\",v)&&(s=lA(e,y),y=(D=ne(e,s),D==-1?e.length:D),v=(pt(s,y,e.length),e.substr(s,y-s))))),c1(v,o1,It),s=lA(e,y),y=(Q=ne(e,s),Q==-1?e.length:Q),m=(pt(s,y,e.length),e.substr(s,y-s)),!!A1(\"DAT\",m)){for(s=lA(e,y),y=(P=ne(e,s),P==-1?e.length:P),c1((pt(s,y,e.length),e.substr(s,y-s)),o1,It),g=new lP,s=lA(e,y);s!=-1;)s=PZ(g,e,s);n=(T=R2,XP(G9(g,T))),L=(c=\"FIELDNAME\",XP(G9(g,c))),U=(l=\"FIELDDATA\",XP(G9(g,l))),!(!A1(by,L)||n==null||U==null)&&(A=o8(n,\" \"),A.length==2&&u8(t.j,c1(A[1],o1,It)-1,U))}}function Yj(t,e,A,n){var P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E,X;if(v=t.f.k,P=N(t.e,A),X=P.a,L=e[t.a],c=xt(v,X)>0&&v.j[X]==v.e[X],T=CO(t.f.a,t.f.t[X]),!c&&!T)return i=v.i[X][2],v.C[i]==1&&(i=t.f.t[i],(A==0?i>X:t.f.t[v.i[X][1]]>i)&&(n=!n)),n;if(c&&(r=v.i[X][A],i=t.f.t[r],i>X&&(n=!n,v.C[r]==1&&(n=!n))),T){for(R=v.e[X],y=h(F,k,6,R-1,15,1),l=h(F,k,6,R-1,15,1),b=0,g=0,C=0;g<R;g++)i=v.i[X][g],i!=L&&(y[C]=i,Q=D1(v,X,i),x=xu(t.f.s,t.f.t[X]+\"_\"+t.f.t[i]),l[C++]=x==null?-1:Q,x!=null&&++b);if(c)y[0]<X&&(n=!n);else switch(b){case 1:if(xt(v,X)>0)break;m=l[0]>=0,s=y[m?0:1],j=y[m?1:0],j>X?s>X&&v.C[j]!=1&&(n=!n):s<X&&(n=!n);break;case 2:f=uv(t,l[0],X),D=uv(t,l[1],X),a=xu(t.f.s,X+\"_\"+t.f.t[f]),E=xu(t.f.s,X+\"_\"+t.f.t[D]),U=t.b,A==0?(S=a[1]<U?a[1]:a[0],p=E[1]<U?E[1]:E[0]):(S=a[0]<U?a[1]:a[0],p=E[0]<U?E[1]:E[0]),S<p!=f<D&&(n=!n)}}return n}function Z$(t){var e,A,n,P,r,i,f,D,Q,U,L,s;for(r=0,U=0,i=0,f=0,D=0,Q=0,L=0,s=!1,e=h(rt,ft,6,32,16,1),A=0;A<t.R.f;A++)t.db[A]!=0&&(++r,t.db[A]==3?++U: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?++U: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=Q0;return}if(U!=0){t.R.I=0;return}if(t.K){Gl(t.R,I0+(1<<L));return}D+f==r&&!s?t.R.I=ly:i==r?t.R.I=T8:Q==r?t.R.I=327680:i==r-1&&D==1?t.R.I=yi:Gl(t.R,458752+(1<<L))}function W$(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,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(b=-1,R=-1,v=-1,c=-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,R=i,b=f,v=n,c=t.i[e][1-L]));if(R!=-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][b]!=R&&(t.D[0][b]=t.D[1][b],t.D[1][b]=R),D=It,y=0;y<t.j[v];y++)i=t.i[v][y],i!=e&&D>i&&(D=i);for(g=h(F,k,6,2,15,1),m=0,U=0;U<t.j[c];U++)i=t.i[c][U],i!=e&&(g[m++]=i);A=kA(t.J[e].a,t.J[e].b,t.J[c].a,t.J[c].b),P=0,m==2?(g[0]>g[1]&&(C=g[0],g[0]=g[1],g[1]=C),Q=Je(A,Y0(t,c,g[0])),T=Je(A,Y0(t,c,g[1])),P=Q-T):P=Je(A,Y0(t,c,g[0])),P<0^(t.u[e]&3)==1^D==R?t.H[b]=257:t.H[b]=129}}function _$(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C;if(gt(t.v,0)&&(x1(),S1(E1(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&&b3(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&&b3(t.B,r,f).length==2){for(g=b3(t.B,r,f),R=h(F,k,6,2,15,1),L=0;L<2;L++)v=t.s[g[L]],R[L]=ed(e.c,v.a);for(C=h(F,k,6,2,15,1),T=-1;T<=1;T+=2)for(C[0]=T*8,c=-1;c<=1;c+=2){for(C[1]=c*8,n=y[r][f],b=1;b<=3;b++){for(P?WD(P,e.c):P=new cD(e.c),U=0;U<2;U++)jk(P,t.s[g[U]],R[U]+b*C[U]<<16>>16);if(j=aZ(t,P,t.q[r],t.q[f]),j<n-1){if(n=j,s?WD(s,P):s=new cD(P),n<1)break}else break}n<y[r][f]&&n<A&&(A=n,Q?WD(Q,s):Q=new cD(s))}}}return Q?(Hj(t,e,Q),e.b>=l?(Av(e,l,y),!1):(WD(e.c,Q),!0)):!1}function $$(t,e,A,n,P){var r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E;if(t.e.length==1)return 0;for(p=P+w.Math.sqrt(n),U=h(yt,wt,6,36,15,1),l=0;l<t.e.length;l++)r=on(e,A,t.a[l],t.b[l]),f=II(zt(E1(w.Math.round(r*36/F0)))),L=e-t.a[l],s=A-t.b[l],a=L*L+s*s,U[f]<a&&(U[f]=a);for(b=-1,R=-1,T=0;T<36;T++)U[T]=w.Math.sqrt(U[T]),b<U[T]&&(b=U[T],R=T);for(x=R-18<0?R-18+36:R-18>=36?R-18-36:R-18,c=0;c<=18;c++)U[x+c<0?x+c+36:x+c>=36?x+c-36:x+c]+=.01*c,U[x-c<0?x-c+36:x-c>=36?x-c-36:x-c]+=.01*c;for(E=h(yt,wt,6,9,15,1),D=h(yt,wt,6,9,15,1),g=1;g<9;g++)E[g]=w.Math.sin(g*OC),D[g]=w.Math.cos(g*OC);for(C=Ve,j=-1,i=0;i<36;i++)if(!(U[i]>=C)){for(v=U[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,!(!(U[S]*D[y]<=v)&&(Q=D[y]*w.Math.min(U[S],p/E[y]),v<Q&&(v=Q,C<=v))));m+=2);if(C<=v)break}C>v&&(C=v,j=i)}return F0*j/36}function Kj(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),K(t.D,e[0][0])==6&&(n=ZR(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),K(t.D,e[0][0])!=6&&(n=ZR(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=Jk(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&&ab(e[0],t.I,t.G,t.H,t.J)||e[1].length>=e[0].length&&ab(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=Jk(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 EP(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T;if(t.C[e]!=7||t.j[e]==4)return!1;if(e<t.f&&i0(t.p,e)||t.o[e]!=0||gt(V(t.B[e],Ur),0))return!0;if(t.s[e]==1)return!1;for(D=0;D<t.j[e];D++)if(pr(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&&i0(t.p,P)){if((t.p&&P<t.f?iA(t.p,P):0)>=5){for(T=0,s=0;s<t.j[P];s++)l=t.i[P][s],l!=e&&e0(t,l)>=3&&++T;if(y=e0(t,e),T==2&&y>=2||T==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],U=!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)&&(U=!0),t.n[P][L]==1&&t.C[t.i[P][L]]==7&&(r=!0));if(U&&(!r||i==0))return!A||!Ss(t,e)}return!1}function a$(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j;for(n=h(yt,wt,6,2,15,1),Q=0;Q<2;Q++)t.c[Q]/=t.a[Q],t.d[Q]/=t.a[Q],n[Q]=$$(t.b[Q],t.c[Q],t.d[Q],t.b[1-Q].e.length,e);for(sf(t.b[0],t.c[0],t.d[0],bA-n[0]),sf(t.b[1],t.c[1],t.d[1],4.71238898038469-n[1]),j=Ve,b=k6,i=t.d[0]-t.d[1],U=0;U<t.b[1].b.length;U++)t.b[1].b[U]+=i,j>t.b[1].b[U]&&(j=t.b[1].b[U]),b<t.b[1].b[U]&&(b=t.b[1].b[U]);for(v=b-j+2*e,P=vt(w.Math.ceil(v)),j+=(v-P)/2-e,g=h(yt,wt,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(R=t.b[1].b[s]-j,m=vt(R-e),f=w.Math.min(vt(R+e),P-1),c=m;c<=f;c++)g[c]>t.b[1].a[s]&&(g[c]=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++)T=vt(t.b[0].b[l]-j),T>=0&&T<g.length&&r<t.b[0].a[l]-g[T]&&(r=t.b[0].a[l]-g[T]);for(D=0;D<t.b[1].a.length;D++)t.b[1].a[D]+=r;A&&(sf(t.b[0],t.c[0],t.d[0],n[0]-bA),sf(t.b[1],t.c[0],t.d[0],n[0]-bA))}function Xj(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j;if(t.d==null&&(t.d=h(F,D0,7,t.j.r,0,2)),t.d[e]==null){for(y=h(F,k,6,t.e.length,15,1),v=h(rt,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,U=0,l=0;U<=l;){for(c=0;c<Mt(t.j,y[U]);c++)i=_(t.j,y[U],c),!v[i]&&i!=r&&(y[++l]=i,v[i]=!0);if(U==l)break;++U}if(s=l+1>(t.e.length/2|0),t.i){for(D=!1,f=!1,c=0;c<t.e.length;c++)n=t.e[c],z0(t.j,n)&&n!=P&&n!=r&&(v[t.e[c]]?D=!0:f=!0);D!=f&&(s=D)}for(Q=2,t.d[e]=h(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(b=t.a[t.d[e][0]],j=t.b[t.d[e][0]],R=on(b,j,t.a[t.d[e][1]],t.b[t.d[e][1]]),T=2;T<t.d[e].length;T++)m=t.d[e][T],L=w.Math.sqrt((t.a[m]-b)*(t.a[m]-b)+(t.b[m]-j)*(t.b[m]-j)),A=2*R-on(b,j,t.a[m],t.b[m]),t.a[m]=b+L*w.Math.sin(A),t.b[m]=j+L*w.Math.cos(A)}function Zj(t){var e,A,n,P,r,i,f,D,Q,U;switch(e=null,U=t.d.length,t.e){case 1:for(e=R1(Yt,[te,at],[16,6],15,[2*U,2],2),n=0;n<U;n++)e[n][0]=t.d[n][0],e[n][1]=t.d[n][1],e[U+n][0]=180+t.d[n][0]<<16>>16,e[U+n][1]=180+t.d[n][1]<<16>>16;return e;case 2:for(P=t.a[0]==0?1:0,r=t.a[U-1]==180?U-1:U,Q=r-P,e=R1(Yt,[te,at],[16,6],15,[U+Q,2],2),i=0;i<U;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[U-1]==90?U-1:U,Q=r-P,e=R1(Yt,[te,at],[16,6],15,[2*U+2*Q,2],2),D=0;D<U;D++)e[D][0]=t.d[D][0],e[D][1]=t.d[D][1],e[U+Q+D][0]=180+t.d[D][0]<<16>>16,e[U+Q+D][1]=180+t.d[D][1]<<16>>16;for(A=P;A<r;A++)e[U+Q-1-A+P][0]=180-t.d[A][1]<<16>>16,e[U+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 Wj(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&&(!RZ(t,t.e,i)||C1(t.V,t.e)!=0&&C1(t.V,t.e)==C1(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=df(t.V,e,A)),f!=-1&&(t.w==101||t.w==103||t.w==102)&&!(Cr(t.V,f)&&(bs(t,f)!=-1||XL(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 Wt(t.I);Q.a<Q.c.a.length;)if(D=t1(Q),(t.w==2||t.w==4&&!Zt(D,62)||t.w==21&&Zt(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?as(t,t.i.a):(t.t=i,un(t.i,0),N1(t,new q1(t,4,!0)))),t.u!=f&&(t.u=f,N1(t,new q1(t,8,!0))),t.v=P,r}function ty(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R;for(ut(t,7),U=new zA(t.f,t.g),Q=R1(q,[nA,Ny],[204,58],0,[t.f,8],2),n=h(F,k,6,t.f,15,1),P=h(F,k,6,t.f,15,1),r=h(rt,ft,6,t.f,16,1),v=0;v<t.f;v++)if(Q[v]=R1(q,[Ny,w8],[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],Hu(r,r.length),g=1,c=2,t.u[L]|=512,R=0;R<8&&c<t.f;R++){if(R==0)n[0]=L,r[L]=!0,n[1]=v,r[v]=!0;else{for(m=c,y=g;y<c;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==c){if(!e)for(s=R;s<8;s++)Q[v][D][s]=Q[v][D][s-1];break}g=c,c=m}if(R==0)Q[v][D][R]=h(q,I,6,2,15,1),Q[v][D][R][0]=t.C[v]<<24>>24,Q[v][D][R][1]=t.A[v]<<24>>24;else{for(ui(t,U,r,!0,P),E0(U,P[L],0),Ne(U,P[L],0),A=0;A<t.f;A++)P[A]!=-1&&t.j[A]>U.j[P[A]]&&T1(U,P[A],C0,!0);if(e)for(i=0;i<U.g;i++)U.H[i]=1,U.T=0;Q[v][D][R]=KA((T=me(new EA(U,16)),c0(),T))}}t.u[L]&=-513}return Q}function ta(t,e){Is();var A,n,P,r,i,f,D,Q,U,L,s,y,l,T;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 ky;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==o1?\"2147483648\":\"\"+-e,y.a}U=18,L=h(l9,a0,6,U+1,15,1),A=U,T=t;do Q=T,T=Mn(T,10),L[--A]=zt(O1(48,l0(Q,Un(T,10))))&w1;while(G(T,0)!=0);if(P=l0(l0(l0(U,A),e),1),e==0)return D&&(L[--A]=45),tP(L,A,U-A);if(e>0&&G(P,-6)>=0){if(G(P,0)>=0){for(r=A+zt(P),f=U-1;f>=r;f--)L[f+1]=L[f];return L[++r]=46,D&&(L[--A]=45),tP(L,A,U-A+1)}for(i=2;Hi(i,O1(p0(P),1));i++)L[--A]=48;return L[--A]=46,L[--A]=48,D&&(L[--A]=45),tP(L,A,U-A)}return l=A+1,n=U,s=new k9,D&&(s.a+=\"-\"),n-l>=1?(Oe(s,L[A]),s.a+=\".\",s.a+=tP(L,A+1,U-A-1)):s.a+=tP(L,A,U-A),s.a+=\"E\",G(P,0)>0&&(s.a+=\"+\"),s.a+=\"\"+Te(P),s.a}function ea(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g;if(e==0||(e&A)!=0){TQ(t);return}for(c=-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,c=Q)),r=P,P=f,f=i,i=1<<(Q+2<t.e.length?Q+2:Q+2-t.e.length);if(c==-1){TQ(t);return}for(s=0,s|=1<<c,y=2;y<t.e.length-1;){if(L=c+y<t.e.length?c+y:c+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){TQ(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){TQ(t);return}for(n=Q1-Q1*(t.e.length-2)/t.e.length,U=1;U<t.e.length;U++)t.a[U]=t.a[U-1]+w.Math.sin(n*(U-1)),t.b[U]=t.b[U-1]+w.Math.cos(n*(U-1));for(f=1,T=2*w.Math.sin(n/2),D=0;D<t.e.length;D++)(s&f)!=0&&(t.a[D]+=T*w.Math.cos(n*(D-.5)),t.b[D]-=T*w.Math.sin(n*(D-.5))),f<<=1}function _j(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T;for(t.v=P0(t.w,0)?0:(x1(),O1(E1(Date.now()),t.w)),JS(t.r,t.v),t.t=null,ut(e,1),P=0;P<e.f;P++)if(G1(e,P)>(T=Cn(e,P),T+WA(e,P,T,e.C[P])))return!1;if(XX(e),e.S=!0,i=null,U=null,f=null,L=null,(e.T&8)!=0){for(i=h(F,k,6,e.f,15,1),f=h(rt,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(U=h(F,k,6,e.g,15,1),L=h(rt,ft,6,e.g,16,1),Q=0;Q<e.g;Q++)U[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++)A8(e,Q,U[Q],L[Q])}for(t.k=e,t.a=0,t.p=0,t.A=null,t.s=null,t.e=h(F,k,6,e.q,15,1),t.d=n9(e,t.e,!1,!0),t.f=h(F,k,6,t.d,15,1),n=0;n<e.q;n++)++t.f[t.e[n]];if(y=h(rt,ft,6,e.r,16,1),s=Ij(e,y),s==0)return!0;if(!oY(t,y))return!1;for(t.s=h(gPt,A0,176,s,0,1),l=0,D=0;D<e.g;D++)y[D]&&(t.s[l++]=new gj(e,D,t.g,t.e,t.f[t.e[e.D[0][D]]],t.q,A));return wu(t.s,new mw),t.i&&(t.c=new D7),TW(t),!0}function Aa(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a;for(fz(),D=new jA,lK(D,e),c=D.j,L=D.d,ut(c,1),ut(L,1),R=new Ni,T=new Ni,Dn(R,c),Dn(T,L),t.c=o1,i=null,r=null,P=0,p=0,t.a=new V0,A=new JA,j=hl,C=0,S=j.length;C<S&&(b=j[C],p++!=t.b);++C)if(Ln(R,b.g),VS(R,b.i),sn(R,6,8)!=0&&(Ln(T,b.f),sn(T,2,8)!=0&&R.F.a.length<=512)){for(f=-1e4,l=N(T.F,0),v=new Wt(R.F);v.a<v.c.a.length&&(m=t1(v),!(p++>=t.b));)uf(c,A),Q=bZ(b,A,m),a=sX(b,c.f,m,L.f,l),ut(A,1),n=h(F,k,6,A.f,15,1),y=h(F,k,6,L.f,15,1),nj(D,A,L,n,y,a)&&(x=D.q-b.e,f<x&&(f=x),t.c<x&&(t.c=x,i=oK(n,y,Q,c.f),r=y,P=D.b));U=D.a<=1?\"\":iV+D.a+\")\",J(t.a,b.d+(b.b?\"_S\":b.j.length==0?\"_L\":b.n.a.length==0?\"_I\":\"_U\")+(J9(),tr(f,5))+U+$A)}return g=h(F,k,6,c.f,15,1),s=h(F,k,6,L.f,15,1),nj(D,c,L,g,s,null)&&(x=D.q,t.c<=x&&(t.c=x,i=g,r=s,P=D.b),U=D.a<=1?\"\":iV+D.a+\")\",J(t.a,(J9(),\"no rule:\"+tr(x,5)+U+$A))),t.c==o1?!1:(hZ(D,e,i,r,P),!0)}function na(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x;for(r=!1,S=On(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,R=N(S.k,m),b=0,j=R.length;b<j;++b)if(v=R[b],dt(t.d,v)!=1||G8(t.d,v)){y=!1;break}if(y){for(i=new Nn,T=new Nn,D=R1(yt,[h0,wt],[15,6],15,[6,3],2),V5(e,C,i,T,D),Q=h(yt,wt,6,C.length,15,1),p=0,L=0;L<C.length;L++)Q[L]=-(T.a*D[L][0]+T.b*D[L][1]+T.c*D[L][2]),Q[L]<0^(L&1)==1&&++p;if(p!=0&&p!=6){for(U=0;U<C.length;U++)if(Q[U]<0^(U&1)==1^p>=3){if(c=h(F,k,6,2,15,1),c[0]=C[U==0?5:U-1],c[1]=C[U==5?0:U+1],g=e.k[C[U]],n=ti(TO(z8(e.k[C[U]],i),T)),A=.6+w.Math.asin(w.Math.abs(Q[U])/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[U]<0?A:-A,P=zN(new vu(g),i),s=!1,O(t.d,C[U])>2){for(l=0;l<O(t.d,C[U]);l++)if(f=_(t.d,C[U],l),f!=c[0]&&f!=c[1]&&fA(t.d,Ot(t.d,C[U],l))){s=!0;break}}s||rZ(e,C[U],c,P,n,x)}r=!0}}}return r&&(po(e),D5(e,t.j)),r}function Pa(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b;for(l=t.a[e],m=t.b[e],r=h(li,A0,41,4,0,1),U=0,L=0;L<t.f.length&&!(U>=4);L++)if(!(e==t.g[z(t.j,0,t.f[L])]||e==t.g[z(t.j,1,t.f[L])])){if(T=t.a[t.g[z(t.j,0,t.f[L])]],v=t.b[t.g[z(t.j,0,t.f[L])]],c=t.a[t.g[z(t.j,1,t.f[L])]],R=t.b[t.g[z(t.j,1,t.f[L])]],f=w.Math.sqrt((T-l)*(T-l)+(v-m)*(v-m)),D=w.Math.sqrt((c-l)*(c-l)+(R-m)*(R-m)),P=w.Math.sqrt((c-T)*(c-T)+(R-v)*(R-v)),f<P&&D<P){T==c?(i=w.Math.abs(l-T),i<.5&&(r[U++]=new KP(on(T,m,l,m),(.5-i)/2))):v==R?(i=w.Math.abs(m-v),i<.5&&(r[U++]=new KP(on(l,v,l,m),(.5-i)/2))):(s=(R-v)/(c-T),y=-1/s,A=v-s*T,n=m-y*l,g=(n-A)/(s-y),b=s*g+A,i=w.Math.sqrt((g-l)*(g-l)+(b-m)*(b-m)),i<.5&&(r[U++]=new KP(on(g,b,l,m),(.5-i)/2)));continue}if(f<.5){r[U++]=new KP(on(T,v,l,m),(.5-f)/2);continue}if(D<.5){r[U++]=new KP(on(c,R,l,m),(.5-D)/2);continue}}U>0&&(Q=f2(r,U),t.a[e]+=Q.b*w.Math.sin(Q.a),t.b[e]+=Q.b*w.Math.cos(Q.a))}function $j(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]),_o(t.c,A,Q),t.o=Gu(t.c,1,1),JP(t.o,t),f0(t.c,oe(t.c,\"Atom Label:\"),1,1),f0(t.c,t.o,3,1),he(t.c,oe(t.c,\"(examples: 'D', 'Li', 'Cys', 'R12', 'R3@C')\"),1,3,3,3),t.p=Gu(t.c,1,1),JP(t.p,t),f0(t.c,oe(t.c,\"Atom Mass:\"),1,5),f0(t.c,t.p,3,5),he(t.c,oe(t.c,\"(empty for natural abundance)\"),1,7,3,7),t.q=Gu(t.c,1,1),JP(t.q,t),f0(t.c,oe(t.c,\"Abnormal Valence:\"),1,9),f0(t.c,t.q,3,9),he(t.c,oe(t.c,\"(empty for default valence)\"),1,11,3,11),t.a==-1?(n=(Y1(),X0)[t.k],O8(t.o,t.n==null?n:t.n+\"@\"+n),t.g!=0&&O8(t.p,\"\"+t.g),t.j!=-1&&O8(t.q,\"\"+t.j)):(n=Ci(t.e,t.a),e=_n(t.e,t.a),O8(t.o,e==null?n:e+\"@\"+n),ye(t.e,t.a)!=0&&O8(t.p,\"\"+ye(t.e,t.a)),br(t.e,t.a)!=-1&&O8(t.q,\"\"+br(t.e,t.a))),t.b=oA(t.c),r=ZV,i=0,f=r.length;i<f;++i)P=r[i],Gt(t.b,P);D=t.a==-1?t.i:FA(t.e,t.a),_t(t.b,D==32?1:D==48?2:D==16?3:0),f0(t.c,oe(t.c,\"Radical State:\"),1,13),f0(t.c,t.b,3,13)}function ra(t,e,A){var n,P,r,i,f,D,Q,U,L,s;for(s=B(d(F,2),D0,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=h(yt,wt,6,Mt(t.R,e),15,1),i=0;i<Mt(t.R,e);i++)n[i]=Y0(t.R,_(t.R,e,A[i]),e);if(Q=R5(t.R,e,A,n,null)<<24>>24,Q!=3)return Q;for(U=0,L=0,f=0;f<Mt(t.R,e);f++)P=Ot(t.R,e,A[f]),z(t.R,0,P)==e&&(l1(t.R,P)==129&&(L!=0&&sP(t.R,e),U=f,L=1),l1(t.R,P)==257&&(L!=0&&sP(t.R,e),U=f,L=2));if(L==0)return 3;for(r=1;r<Mt(t.R,e);r++)n[r]<n[0]&&(n[r]+=F0);if(Mt(t.R,e)==3){switch(U){case 0:(n[1]<n[2]&&n[2]-n[1]<Q1||n[1]>n[2]&&n[1]-n[2]>Q1)&&(L=3-L);break;case 1:n[2]-n[0]>Q1&&(L=3-L);break;case 2:n[1]-n[0]<Q1&&(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][U]==L?2:1}function ia(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v;if(t.g.a.length==0||t.f.a.length==0||(s=ms(t),s==0))return null;for(L=h(F,D0,7,t.f.a.length,0,2),r=0;r<t.f.a.length;r++)for(T=N(t.f,r),ut(T,15),L[r]=h(F,k,6,s+1,15,1),co(L[r],-1),e=0;e<T.q;e++){if(U=w.Math.abs(T.w[e]),U!=0&&L[r][U]!=-1)return null;L[r][U]=e}for(i=h(rt,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(U=w.Math.abs(v.w[g]),U!=0&&!i[U]){for(f=0;f<t.f.a.length;f++)if(y=L[f][U],y!=-1){if(T=N(t.f,f),v.j[g]!=T.j[y]){i[U]=!0;break}if((v.u[g]&3)!=(T.u[y]&3)){i[U]=!0;break}for(D=0;D<v.j[g];D++)if(A=C1(v,v.i[g][D]),A==0)i[U]=!0;else{for(m=v.k[g][D],n=!1,Q=0;Q<T.j[y];Q++){if(c=C1(T,T.i[y][Q]),c==0){i[U]=!0;break}if(c==A){if(n=!0,l=T.k[y][Q],(m<v.g&&(S8(v.p,m)||v.H[m]==8))^(l<T.g&&(S8(T.p,l)||T.H[l]==8))||!(m<v.g&&(S8(v.p,m)||v.H[m]==8))&&(dt(v,m)!=dt(T,l)||(v.F[m]&3)!=(T.F[l]&3))){i[U]=!0,i[A]=!0;break}break}}n||(i[U]=!0)}}}return i}function fa(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y;for(this.r=!0,this.b=!1,this.t=!0,this.a=!1,this.i=It,this.c=t,this.o=h(o9,or,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(S_(this,t),this.k=h(F,D0,7,t.g.a.length,0,2),r=0;r<t.g.a.length;r++)for(L=N(t.g,r),this.k[r]=h(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(U=N(t.f,f),D=0;D<U.f;D++)w.Math.abs(U.w[D])==Q&&(e=(y=Cn(L,i),y+WA(L,i,y,L.C[i])-G1(L,i)-(s=Cn(U,D),s+WA(U,D,s,U.C[D])-G1(U,D))),this.k[r][i]=w.Math.max(e,0));for(this.f=h(rt,h0,12,t.f.a.length,0,2),A=0;A<t.f.a.length;A++)for(U=N(t.f,A),this.f[A]=h(rt,ft,6,U.f,16,1),i=0;i<U.f;i++)if(Q=w.Math.abs(U.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&&(hs(Ab(U,i),Ab(L,D))!=0||hs(Ok(U,i),Ok(L,D))!=0)&&(this.f[A][i]=!0);this.s=new Ni,this.g=h(v4,h0,20,this.o.length,0,1)}function Da(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C;if(g=new Lo(t.e,t.c),T=ah(g,t.f,t.d),t.a.a.length==0)return Ks(g,T);for(m=1,R=new Wt(t.a);R.a<R.c.a.length;)v=t1(R),m*=pG(v);if(m>4e6)return x1(),-m;for(e=0,i=h(F,k,6,t.a.a.length,15,1),y=h(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=h(F,k,6,v.a,15,1),C=h(rt,ft,6,w.Math.max(v.d.length,v.c.length),16,1),ek(v,0,C,j),v.b.a.length),i[D]=e,e+=v.a;for(r=xy,P=null,n=null,l=h(F,k,6,t.a.a.length,15,1),s=t.a.a.length!=0;s;){if(b=!1,t.i!=null){for(Q=0;Q<t.a.a.length;Q++)if(VK(N(t.a,Q),l[Q],t.i)){b=!0;break}}if(!b){for(Q=0;Q<t.a.a.length;Q++)iK(N(t.a,Q),l[Q],T);if(c=Ks(g,T),r<c)for(r=c,P=h(F,k,6,e,15,1),n=h(F,k,6,e,15,1),A=0,U=0;U<t.a.a.length;U++)v=N(t.a,U),Az(v,l[U],P,A),ez(v,l[U],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!=xy)for(L=t.b,f=0;f<e;f++)++L,t.f[P[f]]=L,t.d[n[f]]=L;return r}function aj(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g;for(s=new f1,g=new f1,n=new f1,r=new Wt(t.d);r.a<r.c.a.length;){for(P=t1(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 W3(P,f,A)),i+=A);if(i!=0)for(j3(n,new j8),Q=new Wt(n);Q.a<Q.c.a.length&&(D=t1(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 W3(P,D.a,A)),i==0))););}if(s.a.length==0||g.a.length==0)return null;for(j3(g,new Xe),j3(s,new Se),T=new Wt(g);T.a<T.c.a.length;)for(y=t1(T),L=new Wt(s);L.a<L.c.a.length;)if(U=t1(L),y.b==-U.b)return t.i[oD(y.c,y.a)]-=y.b,t.i[oD(U.c,U.a)]-=U.b,new HQ(y.c,U.c,y.a,U.a);for(c=new Wt(g);c.a<c.c.a.length;)for(y=t1(c),L=new Wt(s);L.a<L.c.a.length;)if(U=t1(L),y.b>-U.b)return t.i[oD(y.c,y.a)]+=U.b,t.i[oD(U.c,U.a)]-=U.b,new HQ(y.c,U.c,y.a,U.a);for(l=new Wt(g);l.a<l.c.a.length;)for(y=t1(l),L=new Wt(s);L.a<L.c.a.length;)if(U=t1(L),y.b<-U.b)return t.i[oD(y.c,y.a)]-=y.b,t.i[oD(U.c,U.a)]+=y.b,new HQ(y.c,U.c,y.a,U.a);return null}function sn(t,e,A){var n,P,r,i,f,D,Q;if(t.P=!1,t.F=new f1,t.a=new f1,bi(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),hO(t,A),n=h(rt,ft,6,t.H.f,16,1),t.G=h(F,k,6,t.g.f,15,1),co(t.G,-1),f=h(F,k,6,t.A,15,1),V9(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]]||Py(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]]&&Ys(t,Ot(t.H,t.G[t.u[r]],f[r]),t.v[r])&&++r:n[P]||Py(t,P,t.s[r])&&Ys(t,Ot(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(zj(t,-1)&&pR(t,-1)&&TR(t,n,-1)){for(D=!1,i=0;i<t.d;i++)if(b$(t,n,f,i)){D=!0;break}if(e==1&&!D||!D&&(s$(t,e),e==2))return 1}if(r==0)break;--r,t.t[r]||(n[t.G[t.s[r]]]=!1)}}return UZ(t),t.F.a.length}function ua(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E,X,tt,W,$,et,lt,st;for($=On(t.e),et=N($.k,e).length,tt=N($.j,e),W=N($.k,e),p=!0,g=1;g<et;g++)if(B9(t.b,W[g])!=B9(t.b,W[0])){p=!1;break}if(p){for(r=(et-2)*j2/et,m=0;m<et;m++)Ih(t,tt[m],W[m],W[m==0?et-1:m-1],r);return}for(E=h(Ee,PA,6,et,15,1),P=0,v=0;v<et;v++)E[v]=a1(t.e,tt[v])==0?1.9106119386631804:a1(t.e,tt[v])==1?2.094499897810209:j2,P+=E[v];for(n=((et-2)*j2-P)/et,R=0;R<et;R++)E[R]+=n;for(U=h(Ee,PA,6,et,15,1),b=1;b<et;b++)U[b]=U[b-1]+j2-E[b];for(f=h(Ee,PA,6,et,15,1),i=0;i<100;i++){for(lt=0,st=0,m=0;m<et;m++)lt+=B9(t.b,W[m])*w.Math.sin(U[m]),st+=B9(t.b,W[m])*w.Math.cos(U[m]);for(y=kA(0,0,lt,st),T=w.Math.sqrt(lt*lt+st*st),a=-1,x=0,j=0;j<et;j++)C=j==0?et-1:j-1,S=j+1==et?0:j+1,D=Je(U[j],U[C]),Q=Je(U[S],U[j]),X=Je(E[j],E[S]),f[j]=2*D-2*Q+2*X,l=w.Math.cos(U[j]-I6-y),s=T*l-Yp*f[j],w.Math.abs(s)>w.Math.abs(x)&&(x=s,a=j);L=w.Math.exp(-5*i/100),U[a]+=L*x}for(c=0;c<et;c++)C=c==0?et-1:c-1,A=U[C]+j2-U[c],A>F0&&(A-=F0),Ih(t,tt[c],W[C],W[c],A)}function tp(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y;for(t.j=h(F,k,6,t.q,15,1),t.e=h(F,k,6,t.q,15,1),t.i=h(F,D0,7,t.q,0,2),t.k=h(F,D0,7,t.q,0,2),t.n=h(F,D0,7,t.q,0,2),t.o=h(F,k,6,t.f,15,1),U=h(F,k,6,t.q,15,1),i=0;i<t.r;i++)++U[t.D[0][i]],++U[t.D[1][i]];for(n=0;n<t.q;n++)t.i[n]=h(F,k,6,U[n],15,1),t.k[n]=h(F,k,6,U[n],15,1),t.n[n]=h(F,k,6,U[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=h(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 Qa(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T;t.b|=e;try{for(l=r2(\"torsionID.txt\"),n=(e&1)==0?null:r2(\"torsionAngle.txt\"),s=(e&1)==0?null:r2(\"torsionRange.txt\"),f=(e&1)==0?null:r2(\"torsionFrequency.txt\"),r=(e&2)==0?null:r2(\"torsionBins.txt\"),T=K1(l);T!=null;){if(y=le(t.c,T),y||(y=new jw(T.endsWith(\"<\")||T.endsWith(\">\")?0:T.endsWith(\"-\")||T.endsWith(\"+\")?1:T.endsWith(\"=\")?3:2),ze(t.c,T,y)),n)for(A=o8(K1(n),\",\"),y.a=h(Yt,at,6,A.length,15,1),Q=0;Q<A.length;Q++)y.a[Q]=c1(A[Q],yy,32767)<<16>>16;if(s)for(L=o8(K1(s),\",\"),y.d=R1(Yt,[te,at],[16,6],15,[L.length,2],2),Q=0;Q<L.length;Q++)U=L[Q].indexOf(k0(45),1),y.d[Q][0]=c1(UA(L[Q],0,U),yy,32767)<<16>>16,y.d[Q][1]=c1(HD(L[Q],U+1),yy,32767)<<16>>16;if(f)for(D=o8(K1(f),\",\"),y.c=h(Yt,at,6,D.length,15,1),Q=0;Q<D.length;Q++)y.c[Q]=c1(D[Q],-128,127)<<24>>24;if(r)for(P=o8(K1(r),\",\"),y.b=h(q,I,6,P.length,15,1),Q=0;Q<P.length;Q++)y.b[Q]=c1(P[Q],-128,127)<<24>>24;T=K1(l)}}catch(c){if(c=t0(c),Zt(c,75))i=c,Z9(i,(x1(),gi),\"\");else throw At(c)}}function Ui(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b;if(t.R.f!=0&&!t.G){for(t.I=0,b=0,A=1;A<t.R.f;A++)t.f[A]>t.f[b]&&(b=A);for(n=h(rt,ft,6,t.R.f,16,1),i=h(rt,ft,6,t.R.g,16,1),t.H=h(F,k,6,t.R.f,15,1),t.B=h(F,k,6,t.R.f,15,1),t.F=h(F,k,6,t.R.f,15,1),t.C=h(F,k,6,t.R.g,15,1),t.B[0]=b,t.H[b]=0,n[b]=!0,P=1,D=0,Q=1,U=0;D<t.R.f;)if(D<Q){for(;;){for(l=0,T=0,s=-1,e=t.B[D],c=0;c<De(t.R,e);c++)(c<O(t.R,e)||c>=Mt(t.R,e))&&(f=_(t.R,e,c),!n[f]&&t.f[f]>s&&(l=f,T=Ot(t.R,e,c),s=t.f[f]));if(s==-1)break;t.H[l]=Q,t.F[Q]=D,t.B[Q++]=l,t.C[U++]=T,n[l]=!0,i[T]=!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=h(F,k,6,2*(t.R.g-U),15,1);;){for(m=t.R.M,v=t.R.M,R=-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,R=r));if(R==-1)break;i[R]=!0,t.C[U++]=R,t.D[2*t.I]=m,t.D[2*t.I+1]=v,++t.I}t.G=!0}}function ep(t,e,A,n,P,r,i){var f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,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 P8;L!=-1;)L>j&&(l=!0),Q=t.indexOf(k0(32),L),j>L&&(Q>j||Q==-1)&&(Q=j),U=Q==-1?(Xt(L,t.length+1),t.substr(L)):(pt(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=(Xt(v,e.length+1),e.substr(v)):(m=(pt(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=(Xt(D,A.length+1),A.substr(D)):(f=(pt(D,Q,A.length),A.substr(D,Q-D)),D=Q+1)),b=new GA(r),R=U==null?null:Ls(b,KA((c=U,c0(),c)),f==null?null:KA((g=f,g)),0),m!=null&&RY(b,KA((T=m,c0(),T))),l?(mt(i.f,R),i.d=-1):(mt(i.g,R),i.d=-1);if(n!=null&&n.length!=0&&qS(i,new ak(n)),P!=null&&P.length!=0){for(b=new GA(r),s=0,y=P.indexOf(k0(43));y!=-1;)al(i,_i(b,(pt(s,y,P.length),P.substr(s,y-s)))),s=y+1,y=P.indexOf(k0(43),s);al(i,_i(b,(Xt(s,P.length+1),P.substr(s))))}return i}function Ua(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S;for(Q=h(F,k,6,t.j.f,15,1),g=h(F,k,6,t.d.f,15,1),U=h(F,k,6,t.j.f,15,1),v=h(F,k,6,t.d.f,15,1),Q[0]=e.b,U[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],R=g[f],c=R1(F,[D0,k],[7,6],15,[O(t.j,j),O(t.d,R)],2),y=0;y<O(t.j,j);y++)if(b=_(t.j,j,y),t.n[b]==0)for(r=Bv(t.j,Ot(t.j,j,y)),T=0;T<O(t.d,R);T++)m=_(t.d,R,T),t.f[m]==0&&K(t.j,b)==K(t.d,m)&&(i=Ot(t.d,R,T),S=UX(t,j,b,R,m),r==Bv(t.d,i)||S!=0?M_(t,j,b,R,m)&&(D=cb(t,j,b,R,m),C=w.Math.max(S,D),C!=0&&(l=$Z(t,U[j],j,b,v[R],R,m),fW(t,j,b,R,m,C,l)&&(c[y][T]=C,l&&(c[y][T]+=64),Id(U[j],j,b,t.o)==Id(v[R],R,m,t.g)&&(c[y][T]+=128),Jv(t.j,b)==Jv(t.d,m)&&(c[y][T]+=1)))):cb(t,j,b,R,m)==I1&&(c[y][T]=768));for(;;){for(A=0,P=-1,n=-1,s=0;s<c.length;s++)if(b=_(t.j,j,s),t.n[b]==0)for(T=0;T<c[s].length;T++)m=_(t.d,R,T),t.f[m]==0&&A<c[s][T]&&(A=c[s][T],P=b,n=m);if(A==0)break;++L,Q[L]=P,U[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 Ap(){Ap=B1,gU=B(d(Yt,1),at,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]),d4=B(d(Yt,1),at,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 oa(t,e,A,n){var P,r,i,f,D,Q,U,L,s,y,l,T,c,g;P=e.a,y=e.g,Q=gt(V(o0(t.k,P),1),0),r=MA(t.k,P),L=r!=null?oX(t,P,r,n):Q?\"*\":Ci(t.k,P),!Q&&r==null&&vn(t.k,P)&&(t.j&4)==0&&(a1(t.k,P)!=0||br(t.k,P)==-1&&FA(t.k,P)==0)&&(L=L.toLowerCase()),e.f&&(A.a+=\"(\"),y!=-1&&Gj(t,D1(t.k,e.a,e.g),e.g,A),i=p1(t.k,P),i==0&&(t.j&1)!=0&&(f=V(o0(t.k,P),i9),G(f,Mf)==0?i=-1:G(f,Cf)==0&&(i=1)),U=ye(t.k,P),s=(t.j&2)!=0?C1(t.k,P):0,l=(t.j&1)!=0?Ea(t,P,n):null,g=!Q&&!DN(K(t.k,P))||r!=null||(d0(t.k,P)==1||d0(t.k,P)==2)&&(c=Ae(t.k,P)-1,!(c!=-1&&t.i[c][VA(t.k,P)]<=1))&&(K(t.k,P)!=7||p1(t.k,P)>0)||vn(t.k,P)&&a1(t.k,P)==0&&(t.j&4)==0||i!=0||U!=0||s!=0||br(t.k,P)!=-1||FA(t.k,P)!=0||l!=null,g&&(A.a+=\"[\"),U!=0&&(A.a+=U),A.a+=\"\"+L,(d0(t.k,P)==1||d0(t.k,P)==2)&&(T=Ae(t.k,P)-1,!(T!=-1&&t.i[T][VA(t.k,P)]<=1))&&(K(t.k,P)!=7||p1(t.k,P)>0)&&J(A,U$(t,P,y)),(t.j&1)==0&&g&&(D=Td(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&&g3(A,w.Math.abs(i))),l!=null&&(A.a+=\"\"+l),s!=0&&(A.a+=\":\",A.a+=s),g&&(A.a+=\"]\"),$Y(t,e,A),e.e&&(A.a+=\")\")}function La(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(;P0(Y9(t,10),0);)t=Mn(t,10),++e;for(i=0,f=t;G(f,0)!=0;f=Mn(f,10))++i}return r=new V0,G(t,0)<0&&(r.a+=\"-\"),D=w.Math.max(0,A-i),P=\"\"+Te(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,(pt(0,1,P.length),P.substr(0,1))),r.a+=\".\",J(r,(Xt(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,(pt(0,i+e,P.length),P.substr(0,i+e))),r.a+=\".\",J(r,(Xt(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,(Xt(0,P.length),P.charCodeAt(0))),r.a+=\".\",J(r,(Xt(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 sa(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g;if(r=ZA(t.V,e,A),i=df(t.V,e,A),t.w==2){if(t.V.K){if(r!=-1)nF(t,r);else if(i!=-1)Qv(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 Wt(t.I);P.a<P.c.a.length;)n=t1(P),n.g=!1}t.v.g=!0,t.eb=w.Math.max(t.eb,1),n1(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 Wt(t.I);Q.a<Q.c.a.length;)D=t1(Q),D.g=!1}if(g!=-1)if((t.U&1)!=0)for(U=t.M[g],s=0;s<t.V.q;s++)t.M[s]==U&&dP(t.V,s,!0);else for(L=_m(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),n1(t.k)}}else if(t.w==18&&(U=-2,(t.U&1)!=0&&(U=Jz(t)),U!=-1)){for(c=It,T=o1,y=0;y<t.V.q;y++)(U==-2||t.M[y]==U)&&(c>kt(t.V,y)&&(c=kt(t.V,y)),T<kt(t.V,y)&&(T=kt(t.V,y)));if(T>c){for(f=(T+c)/2,l=0;l<t.V.q;l++)(U==-2||t.M[l]==U)&&Be(t.V,l,2*f-kt(t.V,l));for(s=0;s<t.V.r;s++)if(U==-2||t.M[z(t.V,0,s)]==U)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),n1(t.k),N1(t,new q1(t,1,!0))}}function np(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l;for(U=t.Q,L=t.F,(t.G&Sn)!=0&&(t.Q=-6,t.F=Dy,W1(t,1)),t.o=h(X4,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)&&Lp(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&&Lp(t,Q);if((t.G&64)==0)for(f=0;f<t.L.r;f++)gu(t.L,f)!=0&&(P=null,gu(t.L,f)==1||gu(t.L,f)==2?(dt(t.L,f)==2||cP(t.L,f)==0||e[cP(t.L,f)][$i(t.L,f)]>1)&&(gu(t.L,f)==1?P=dt(t.L,f)==2?\"E\":wo(t.L,f)?\"p\":\"P\":P=dt(t.L,f)==2?\"Z\":wo(t.L,f)?\"m\":\"M\"):P=\"?\",P!=null&&(t.Cb((t.X*2+1)/3|0),W1(t,vr(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=(Z1(t.R,kt(t.L,A))+Z1(t.R,kt(t.L,n)))/2,l=(X1(t.R,jt(t.L,A))+X1(t.R,jt(t.L,n)))/2,r=(Z1(t.R,kt(t.L,A))-Z1(t.R,kt(t.L,n)))/3,i=(X1(t.R,jt(t.L,A))-X1(t.R,jt(t.L,n)))/3,HP(t,y+i,l-r,P,!0),W1(t,t.Q),t.Cb(t.X)));if((t.G&4)!=0){for(t.Cb((t.X*2+1)/3|0),W1(t,384),f=0;f<t.L.r;f++)A=z(t.L,0,f),n=z(t.L,1,f),s=G8(t.L,f)?\"d\":_e(t.L,f)?\"a\":\"\",y=(Z1(t.R,kt(t.L,A))+Z1(t.R,kt(t.L,n)))/2,l=(X1(t.R,jt(t.L,A))+X1(t.R,jt(t.L,n)))/2,HP(t,y,l,s+(\"\"+f),!0);W1(t,t.Q),t.Cb(t.X)}(t.G&Sn)!=0&&(t.Q=U,t.F=L)}function Pp(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,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&&G1(t,r)>3||t.C[i]<9&&G1(t,i)>3)continue;L=xt(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,T=0,y=0,P=0;P<t.q;P++)v+=t.s[P],t.s[P]<0&&!_v(t,P)&&(++T,tA(t,P)&&(y-=t.s[P]));if(!e&&v!=0)throw At(new V1(\"molecule's overall charges are not balanced\"));for(ut(t,1),R=0,b=A?v+y:y,f=0;f<t.q;f++)t.s[f]>0&&!xO(t,f)&&tA(t,f)&&(U=w.Math.min(xt(t,f),t.s[f]),U!=0&&b>=U&&(v-=U,R-=U,b-=U,t.s[f]-=U,t.T&=1));if(c=A?v:R,c<0){for(l=h(F,k,6,T,15,1),T=0,r=0;r<t.q;r++)t.s[r]<0&&!_v(t,r)&&(l[T++]=(t.C[r]<<22)+r);for(l.sort(Fe(u0.prototype.gd,u0,[])),s=l.length-1;c<0&&s>=l.length-T;s--)n=l[s]&x0,tA(t,n)&&(U=w.Math.min(-c,-t.s[n]),v+=U,c+=U,t.s[n]+=U,t.T&=1)}return v}function rp(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m;for(U=h(it,Dt,2,t.g.a.length+t.f.a.length,6,1),l=h(it,Dt,2,t.g.a.length+t.f.a.length,6,1),r=h(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++)T1(g,n,c8,!1);if(P=new BA(g),U[D]=me(P),U[D]==null)return null;l[D]=Jd(P),r[D]=Iu(P,e)}for(L=new V0,i=new V0,T=new V0,Q=0;Q<t.g.a.length;Q++){if(s=Q,A)for(c=\"\",s=-1,y=0;y<t.g.a.length;y++)Kr(c,U[y])<0&&(c=U[y],s=y);Q>0&&(L.a+=\" \",T.a+=\" \",i.a+=\" \"),L.a+=\"\"+U[s],T.a+=\"\"+l[s],i.a+=\"\"+r[s],U[s]=\"\"}for(L.a+=\"!\",t.f.a.length!=0&&t.g.a.length!=0&&(T.a+=\" \",i.a+=\" \"),f=t.g.a.length;f<t.g.a.length+t.f.a.length;f++){if(s=f,A)for(c=\"\",s=-1,y=t.g.a.length;y<t.g.a.length+t.f.a.length;y++)Kr(c,U[y])<0&&(c=U[y],s=y);f>t.g.a.length&&(L.a+=\" \",T.a+=\" \",i.a+=\" \"),L.a+=\"\"+U[s],T.a+=\"\"+l[s],i.a+=\"\"+r[s],U[s]=\"\"}return m=h(it,Dt,2,5,6,1),m[0]=L.a,T.a.length>t.g.a.length+t.f.a.length-1&&(m[1]=T.a),i.a.length>t.g.a.length+t.f.a.length-1&&(m[2]=i.a),t.b&&(m[3]=Sm(t.b)),t.a.a.length!=0&&(m[4]=yY(t,e)),m}function ya(t,e){var A,n;return n={},A=t.B[e],n.aromatic=S1(V(A,2),0),n.notAromatic=S1(V(A,4),0),n.notChain=S1(V(A,8),0),n.not2RingBonds=S1(V(A,16),0),n.not3RingBonds=S1(V(A,32),0),n.not4RingBonds=S1(V(A,64),0),n.noMoreNeighbours=S1(V(A,I1),0),n.moreNeighbours=S1(V(A,C0),0),n.matchStereo=S1(V(A,ge),0),n.not0PiElectrons=S1(V(A,Sn),0),n.not1PiElectron=S1(V(A,s8),0),n.not2PiElectrons=S1(V(A,Q0),0),n.not0Hydrogen=S1(V(A,128),0),n.not1Hydrogen=S1(V(A,256),0),n.not2Hydrogen=S1(V(A,512),0),n.not3Hydrogen=S1(V(A,re),0),n.not0Neighbours=S1(V(A,I0),0),n.not1Neighbour=S1(V(A,T8),0),n.not2Neighbours=S1(V(A,l8),0),n.not3Neighbours=S1(V(A,h8),0),n.not4Neighbours=S1(V(A,qA),0),n.notChargeNeg=S1(V(A,nU),0),n.notCharge0=S1(V(A,Tn),0),n.noChargePos=S1(V(A,134217728),0),n.ringSize0=S1(V(A,L8),0),n.ringSize3=S1(V(A,ir),0),n.ringSize4=S1(V(A,fr),0),n.ringSize5=S1(V(A,Dr),0),n.ringSize6=S1(V(A,ur),0),n.ringSize7=S1(V(A,Qr),0),n.ringSizeLarge=S1(V(A,pf),0),n}function la(t,e){i8();var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b;for(g=h(rt,ft,6,e.g,16,1),b=(ut(e,7),e.p),c=h(rt,ft,6,b.j.a.length,16,1),Zs(b,c,h(rt,ft,6,b.j.a.length,16,1),h(F,k,6,b.j.a.length,15,1),!0),R=0;R<b.j.a.length;R++)if(c[R])for(T=0;T<N(b.k,R).length;T++)g[N(b.k,R)[T]]=!0;for(P=h(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(U=e.D[1-l][i],v=0;v<e.j[U];v++)if(e.n[U][v]==2&&(L=e.i[U][v],e.C[L]==7||e.C[L]==8||e.C[L]==16)){g[i]=!0;break}}}for(m=h(rt,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=h(F,k,6,e.q,15,1),r=0;r<e.g;r++)if(g[r]){for(y[0]=e.D[0][r],s=xZ(y,g,e),n=h(F,k,6,s,15,1),l=0;l<s;l++)n[l]=y[l];mt(t,new zh(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||EP(e,A,!0)&&e.o[A]!=2&&e.e[A]>1)){for(n=h(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 zh(n,e))}}function Ta(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E;for(v=h(rt,ft,6,t.j.f,16,1),p=0;p<e.j.a.length;p++)if(x=N(e.k,p).length,(x==3||x==5||x==6||x==7)&&t.i[p])for(n=N(e.j,p),P=0,r=n.length;P<r;++P)A=n[P],v[A]=!0;for(s=h(F,k,6,t.j.f,15,1),l=h(rt,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=h(F,k,6,t.j.f,15,1),y=h(F,k,6,t.j.f,15,1),E=0;E<t.j.f;E++)if(s[E]==1)for(y[0]=E,L=0,T=0;L<=T;){for(c=0;c<O(t.j,y[L]);c++)if(t.e[Ot(t.j,y[L],c)]&&(U=_(t.j,y[L],c),(L==0||U!=y[L-1])&&s[U]!=0)){if(y[++T]=U,(s[U]&1)!=0){for(b=1;b<T;b+=2)S[y[b]]=-1;T=0}break}++L}for(D=h(rt,ft,6,t.j.f,16,1),a=0;a<t.j.f;a++)if(!D[a]&&s[a]!=0){for(y[0]=a,D[a]=!0,L=0,T=0;L<=T;){for(c=0;c<O(t.j,y[L]);c++)t.e[Ot(t.j,y[L],c)]&&(U=_(t.j,y[L],c),D[U]||(y[++T]=U,D[U]=!0));++L}if((T&1)==0){for(g=0;g<=T;g++)S[y[g]]==0&&(S[y[g]]=pj(t,y[g],!1));for(R=!0,m=0;m<=T;m++)if(S[y[m]]<=0&&!yf(t,y[m],!1)){R=!1;break}if(R){for(C=0,j=-1,c=0;c<=T;c++)C<S[y[c]]&&(C=S[y[c]],j=y[c]);C>0&&(pj(t,j,!0),Pf(t,j))}}}}function ip(t,e,A,n){var P,r,i,f,D,Q,U,L,s,y,l,T;P=new L1,D=new L1,U=new c9,Q=new c9,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?-O5(t.L,A):O5(t.L,A),L==0&&(L=1),Qf(t,e.b-e.a,e.d-e.c,U),L>0?(D.a=e.a+U.a,D.c=e.c+U.b,D.b=e.b+U.a,D.d=e.d+U.b,(Di(t,i,f,1,Q)||O(t.L,i)>1)&&(D.a+=Q.a+U.b,D.c+=Q.b-U.a)):(D.a=e.a-U.a,D.c=e.c-U.b,D.b=e.b-U.a,D.d=e.d-U.b,(Di(t,i,f,-1,Q)||O(t.L,i)>1)&&(D.a+=Q.a+U.b,D.c+=Q.b-U.a)),l1(t.L,A)==386&&iL(P,D),cA(t,P)&&Hn(t,P,i,f),l1(t.L,A)==8?cA(t,D)&&VQ(t,D,i,f):cA(t,D)&&Hn(t,D,i,f)):(Qf(t,e.b-e.a,e.d-e.c,U),l=U.a/2,T=U.b/2,r=!1,P.a=e.a+l,P.c=e.c+T,P.b=e.b+l,P.d=e.d+T,O(t.L,i)>1&&(Di(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+=U.b,P.c-=U.a)):t.o[i]=new v3(P.a,P.c)),D.a=e.a-l,D.c=e.c-T,D.b=e.b-l,D.d=e.d-T,O(t.L,i)>1&&(Di(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+=U.b,D.c-=U.a)):(t.o[i]=new v3(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),Hn(t,D,i,f)):(Hn(t,P,i,f),VQ(t,D,i,f)):(Hn(t,P,i,f),Hn(t,D,i,f))))}function ha(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m;this.i=t,this.g=7,this.j=new f1,this.k=new f1,this.b=new f1,this.a=h(F,k,6,this.i.f,15,1),this.c=h(F,k,6,this.i.g,15,1),this.i.$b(1),s=h(rt,ft,6,this.i.f,16,1),y=h(rt,ft,6,this.i.g,16,1);do for(i=!1,A=0;A<this.i.f;A++)if(!s[A]){for(c=0,L=0;L<O(this.i,A);L++)s[_(this.i,A,L)]||++c;if(c<2){for(s[A]=!0,U=0;U<O(this.i,A);U++)y[Ot(this.i,A,U)]=!0;i=!0}}while(i);for(m=0;m<this.i.f&&s[m];)++m;if(m!=this.i.f){for(D=h(F,k,6,this.i.f,15,1),D[0]=m,T=h(F,k,6,this.i.f,15,1),T[0]=-1,f=h(F,k,6,this.i.f,15,1),f[m]=1,r=0,Q=0,l=1;r<=Q;){for(U=0;U<O(this.i,D[r]);U++)if(P=_(this.i,D[r],U),P!=T[D[r]]){if(f[P]!=0){DW(this,Ot(this.i,D[r],U),s);continue}s[P]||(f[P]=l,T[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,T[A]=-1;break}}}if((e&4)!=0&&(this.e=h(rt,ft,6,this.j.a.length,16,1),this.f=h(rt,ft,6,this.j.a.length,16,1),this.d=h(F,k,6,this.j.a.length,15,1),Zs(this,this.e,this.f,this.d,(e&8)!=0),C_(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&&gb(this,g,Gk(this,g)))}}function ca(t,e,A,n,P){var r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E,X,tt,W,$,et;for(v=h(F,k,6,P,15,1),R=h(F,k,6,P,15,1),T=0;T<P;T++)v[T]=r8(e,n[T]),R[T]=r8(A,n[T]);for(a=0,X=0,E=0,tt=0,c=0;c<P;c++)a+=e.a[v[c]],X+=e.b[v[c]],E+=A.a[R[c]],tt+=A.b[R[c]];for(a/=P,X/=P,E/=P,tt/=P,tv(A,a-E,X-tt),Q=h(li,A0,41,P,0,1),L=h(li,A0,41,P,0,1),r=h(li,A0,41,P,0,1),i=h(li,A0,41,P,0,1),g=0;g<P;g++)Q[g]=new Wu(a,X,e.a[v[g]],e.b[v[g]]),L[g]=new Wu(a,X,A.a[R[g]],A.b[R[g]]),r[g]=new KP(Q[g].a-L[g].a,Q[g].b*L[g].b),i[g]=new KP(Q[g].a+L[g].a,Q[g].b*L[g].b);for(j=f2(r,P),C=f2(i,P),$=0,et=0,m=0;m<P;m++)for(b=0;b<Mt(t.f,n[m]);b++)f=_(t.f,n[m],b),N9(e,f)&&!N9(A,f)&&++$,!N9(e,f)&&N9(A,f)&&++et;for(U=h(li,A0,41,$,0,1),s=h(li,A0,41,et,0,1),y=h(li,A0,41,et,0,1),$=0,et=0,l=0;l<P;l++)for(b=0;b<Mt(t.f,n[l]);b++)f=_(t.f,n[l],b),N9(e,f)&&!N9(A,f)&&(D=r8(e,f),U[$]=new Wu(e.a[v[l]],e.b[v[l]],e.a[D],e.b[D]),++$),!N9(e,f)&&N9(A,f)&&(D=r8(A,f),W=new Wu(A.a[R[l]],A.b[R[l]],A.a[D],A.b[D]),s[et]=new KP(j.a+W.a,W.b),y[et]=new KP(C.a-W.a,W.b),++et);return S=f2(U,$),p=f2(s,et),x=f2(y,et),w.Math.abs(FL(S.a,p.a))>w.Math.abs(FL(S.a,x.a))?sf(A,a,X,j.a):(WY(A,a,X),sf(A,a,X,C.a)),k5(t,e,A,P)}function fp(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R;for(this.i=t,this.w=t.s,this.v=t.q,this.D=new tj(this.v,this.w),this.n=0,Q=this.w,s=0,T=Q.length;s<T;++s)f=Q[s],this.n=w.Math.max(this.n,w.Math.max(1+f.i,1+f.j));for(e=h(F,k,6,this.n,15,1),U=this.w,y=0,c=U.length;y<c;++y)f=U[y],++e[f.i],++e[f.j];for(this.j=h(F,D0,7,e.length,0,2),this.k=h(F,D0,7,e.length,0,2),i=0;i<e.length;i++)this.j[i]=h(F,k,6,e[i],15,1),this.k[i]=h(F,k,6,e[i],15,1);for(V9(e,e.length,0),r=0;r<this.w.length;r++)n=gg(this.w[r],0),P=gg(this.w[r],1),this.j[n][e[n]]=P,this.j[P][e[P]]=n,this.k[n][e[n]]=r,this.k[P][e[P]]=r,++e[n],++e[P];for(this.p=h(F,k,6,this.n,15,1),this.o=h(F,k,6,this.n,15,1),this.r=h(F,k,6,this.n,15,1),this.q=h(rt,ft,6,this.n,16,1),this.f=h(F,nA,28,this.n,0,3),A=1;A<this.n;A++)for(this.f[A]=h(F,D0,7,A,0,2),P=0;P<A;P++)this.f[A][P]=EZ(this,A,P);for(this.u=1,D=this.w,L=0,l=D.length;L<l;++L)f=D[L],this.u*=f.d.length;for(m=this.v,v=0,R=m.length;v<R;++v)g=m[v],this.u*=g.b.length;this.u<=0&&(this.u=It),this.F=new Kg,this.A=new M3((U1(new Fw),new ew)),this.B=new pi,this.g=0,this.C=0,this.s=3,this.G=!1,this.t=w.Math.min(nP,this.u)}function wa(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p;for(ut(t,7),S=0,y=h(rt,ft,6,t.f,16,1),p=h(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),p[A]+=dt(t,r),p[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(p[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&&i0(t.p,D)){for(g=h(rt,ft,6,t.f,16,1),m=h(rt,ft,6,t.g,16,1),nR(t,D,!0,g,m),U=0;U<t.f;U++)if(g[U]&&t.C[U]==7&&t.s[U]==0&&p[U]==2&&_W(t,m,D,U)){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(b=h(F,k,6,16,15,1),b[0]=D,C=1,j=0;j<C;){for(P=0;P<t.r;P++)if(e=-1,t.D[0][P]==b[j]?e=t.D[1][P]:t.D[1][P]==b[j]&&(e=t.D[0][P]),e!=-1&&t.s[e]!=0){for(L=!1,T=0;T<C;T++)if(e==b[T]){L=!0;break}L||(C==b.length&&(Q=h(F,k,6,2*b.length,15,1),sA(b,0,Q,0,b.length),b=Q),b[C++]=e)}++j}for(s=0,c=0;c<C;c++)s+=t.s[b[c]];if(s<0){for(v=-1,R=99,l=0;l<C;l++)t.s[b[l]]<0&&R>lb(t.C[b[l]])&&(R=lb(t.C[b[l]]),v=b[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=nW(t,S)),S}function a5(){a5=B1,Pl=B(d(F,1),k,6,15,[0,oi,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,PP,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 ey(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T;if(t.db[e]!=0||K(t.R,e)!=5&&K(t.R,e)!=6&&K(t.R,e)!=7&&K(t.R,e)!=14&&K(t.R,e)!=15&&K(t.R,e)!=16||(t.Q&C0)!=0&&K(t.R,e)>=14)return!1;if(a1(t.R,e)!=0){if(ZT(t.R,e))return O_(t,e,A);if(K(t.R,e)!=15&&K(t.R,e)!=16)return!1}if(O(t.R,e)<3||Mt(t.R,e)>4||p1(t.R,e)>0&&K(t.R,e)==6||K(t.R,e)==5&&Mt(t.R,e)!=4)return!1;if(t.R.K){if(Qe(t.R,e))return!1;for(f=0;f<Mt(t.R,e);f++)if(Qe(t.R,_(t.R,e,f)))return!1}if(K(t.R,e)==7&&!t.S[e])return!1;for(l=h(F,k,6,4,15,1),T=h(F,k,6,4,15,1),U=h(rt,ft,6,4,16,1),D=0;D<Mt(t.R,e);D++){for(r=-1,P=0,Q=0;Q<Mt(t.R,e);Q++)U[Q]||r<t.f[_(t.R,e,Q)]&&(r=t.f[_(t.R,e,Q)],P=Q);l[D]=P,T[D]=r,U[P]=!0}if(Mt(t.R,e)==4&&T[0]==T[1]&&T[2]==T[3]||Mt(t.R,e)==4&&(T[0]==T[2]||T[1]==T[3])||Mt(t.R,e)==3&&T[0]==T[2])return!1;for(L=0,s=0,y=!1,i=1;i<Mt(t.R,e);i++)if(T[i-1]==T[i]){if(A==1||T[i]==0)return!1;L=_(t.R,e,l[i-1]),s=_(t.R,e,l[i]),A==3&&fA(t.R,Ot(t.R,e,l[i]))&&(t.W[e]=!0),y=!0}return A!=1&&!y?!1:(n=t.jb?z_(t,e,l):ra(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 Ay(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c;if(m5(t,e),!((t.u[e]&3)==0||(t.u[e]&3)==3)){if(t.o[e]==2&&t.j[e]==2){W$(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(T=sY(t,e),n=h(yt,wt,6,A,15,1),f=0;f<A;f++)n[f]=Y0(t,t.i[e][T[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&&eX(t,e,T,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][T[Q]]){y=Q;break}for(c=B(d(F,2),D0,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(U=!1,y){case 0:U=n[1]<n[2]&&n[2]-n[1]<Q1||n[1]>n[2]&&n[1]-n[2]>Q1;break;case 1:U=n[2]-n[0]>Q1;break;case 2:U=n[1]-n[0]<Q1}P=(t.u[e]&3)==1^U?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^c[L][y]==1?129:257;t.H[s]=P}}}}function ny(t,e,A){Ap();var n,P,r,i,f,D,Q,U,L,s,y,l,T,c;for(ut(t,7),y=h(NA,a0,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&&G8(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,M1(r,4))),(A&128)!=0){if(gU[t.C[P]]==-1)throw At(new V1(F6+t.C[P]));i=O1(i,gU[t.C[P]])}else if((A&64)!=0){if(d4[t.C[P]]==-1)throw At(new V1(F6+t.C[P]));i=O1(i,d4[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&I1)!=0&&P<t.f&&i0(t.p,P)&&(i=Y(i,512)),(A&Sn)!=0&&(t.u[P]&ge)!=0&&(i=Y(i,re)),U=0;G(i,y[U])<0;)++U;for(L=D;L>U;L--)y[L]=y[L-1];y[U]=i,++s}for(s>4&&(s=4),n=0,Q=0;Q<s;Q++)n=M1(n,11),n=Y(n,y[Q]);if(n=M1(n,15),gU[t.C[e]]==-1)throw At(new V1(F6+t.C[e]));if(n=Y(n,gU[t.C[e]]),(A&2)!=0?(c=t.p&&e<t.f?iA(t.p,e):0,c>9&&(c=9),c>2&&(c-=2),n=Y(n,c<<4)):(A&1)!=0&&(t.u[e]&8)!=0&&(n=Y(n,64)),(A&4)!=0&&e<t.f&&i0(t.p,e)&&(n=Y(n,re)),(A&8)!=0&&(t.u[e]&C0)!=0&&(n=Y(n,I1)),(A&16)!=0&&(t.u[e]&ge)!=0&&(n=Y(n,C0)),(A&C0)!=0&&(bK(t,e)&&(n=Y(n,ge)),Sa(t,e))){for(f=0;f<t.f;f++)if(XW(t,f)){n=Y(n,Sn);break}}return(A&ge)!=0&&(T=E5(t,e,10),n=Y(n,M1(T,7))),n}function t6(t,e){Is();var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E,X;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 ky;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,R=h(l9,a0,6,v+1,15,1),A=v,l==1)if(f=P[0],f<0){X=V(f,h1);do T=X,X=Mn(X,10),R[--A]=48+zt(l0(T,Un(X,10)))&w1;while(G(X,0)!=0)}else{X=f;do T=X,X=X/10|0,R[--A]=48+(T-X*10)&w1;while(X!=0)}else{x=h(F,k,6,l,15,1),E=l,sA(P,0,x,0,E);t:for(;;){for(C=0,Q=E-1;Q>=0;Q--)a=O1(M1(C,32),V(x[Q],h1)),g=mY(a),x[Q]=zt(g),C=zt(q0(g,32));m=zt(C),c=A;do R[--A]=48+m%10&w1;while((m=m/10|0)!=0&&A!=0);for(n=9-c+A,D=0;D<n&&A>0;D++)R[--A]=48;for(L=E-1;x[L]==0;L--)if(L==0)break t;E=L+1}for(;R[A]==48;)++A}if(y=S<0,i=v-A-e-1,e==0)return y&&(R[--A]=45),tP(R,A,v-A);if(e>0&&i>=-6){if(i>=0){for(U=A+i,s=v-1;s>=U;s--)R[s+1]=R[s];return R[++U]=46,y&&(R[--A]=45),tP(R,A,v-A+1)}for(L=2;L<-i+1;L++)R[--A]=48;return R[--A]=46,R[--A]=48,y&&(R[--A]=45),tP(R,A,v-A)}return p=A+1,r=v,b=new k9,y&&(b.a+=\"-\"),r-p>=1?(Oe(b,R[A]),b.a+=\".\",b.a+=tP(R,A+1,v-A-1)):b.a+=tP(R,A,v-A),b.a+=\"E\",i>0&&(b.a+=\"+\"),b.a+=\"\"+i,b.a}function Py(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y;if(f=O(t.H,e),n=t.o[A],n>f)return!1;if(Q=o0(t.H,e),r=o0(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||!am(P,D))return!1}else if(D!=null){if(RJ(D,P))return!1}else if(Ev(K(t.H,e),P))return!1}}else{if(gt(V(Q,1),0))return!1;if(P!=null){if(D!=null){if(!am(D,P))return!1}else if(!Ev(K(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,I1),0)){if(t.H.K&&P0(V(Q,I1),0))return!1;if(n!=f)return!1}if(gt(V(r,C0),0)&&n>=f&&P0(V(Q,C0),0))return!1}if(gt(V(t.I[e],Jn(t.j[A])),0)||gt(V(t.B[A],Jn(t.M[e])),0))return!1;if(i=V(r,rr),t.H.K){if(U=V(r,rr),G(U,0)!=0&&(G(i,0)==0||gt(V(i,Jn(U)),0)))return!1}else if(G(i,0)!=0&&P0(V(i,t.M[e]),0))return!1;return p1(t.g,A)!=0&&p1(t.g,A)!=p1(t.H,e)||ye(t.g,A)!=0&&ye(t.g,A)!=ye(t.H,e)||FA(t.g,A)!=0&&FA(t.g,A)!=FA(t.H,e)||(L=V(r,F2),G(L,0)!=0&&I_(t.H,e)!=zt(q0(L,47))-7)?!1:(s=V(r,f9),G(s,0)!=0?(s=q0(s,22),t.H.K?(y=zt(q0(V(o0(t.H,e),f9),22)),zt(s)==y):M9(t.H,e)==zt(s)):!0)}function ga(t,e){var A,n,P,r,i,f,D,Q;if(A=0,i=0,r=e.length,f=null,Q=new k9,i<r&&(Xt(i,e.length),e.charCodeAt(i)==43)&&(++i,++A,i<r&&(Xt(i,e.length),e.charCodeAt(i)==43||(Xt(i,e.length),e.charCodeAt(i)==45))))throw At(new YP(g2+e+'\"'));for(;i<r&&(Xt(i,e.length),e.charCodeAt(i)!=46)&&(Xt(i,e.length),e.charCodeAt(i)!=101)&&(Xt(i,e.length),e.charCodeAt(i)!=69);)++i;if(Q.a+=\"\"+(pt(A,i,(e??Pr).length),(e??Pr).substr(A,i-A)),i<r&&(Xt(i,e.length),e.charCodeAt(i)==46)){for(++i,A=i;i<r&&(Xt(i,e.length),e.charCodeAt(i)!=101)&&(Xt(i,e.length),e.charCodeAt(i)!=69);)++i;t.e=i-A,Q.a+=\"\"+(pt(A,i,(e??Pr).length),(e??Pr).substr(A,i-A))}else t.e=0;if(i<r&&(Xt(i,e.length),e.charCodeAt(i)==101||(Xt(i,e.length),e.charCodeAt(i)==69))&&(++i,A=i,i<r&&(Xt(i,e.length),e.charCodeAt(i)==43)&&(++i,i<r&&(Xt(i,e.length),e.charCodeAt(i)!=45)&&++A),f=(pt(A,r,e.length),e.substr(A,r-A)),t.e=t.e-c1(f,o1,It),t.e!=vt(t.e)))throw At(new YP(\"Scale out of range.\"));if(D=Q.a,D.length<16){if(t.f=(Dc==null&&(Dc=new RegExp(\"^[+-]?\\\\d*$\",\"i\")),Dc.test(D)?parseInt(D,10):NaN),isNaN(t.f))throw At(new YP(g2+e+'\"'));t.a=vs(t.f)}else yh(t,new jg(D));for(t.d=Q.a.length,P=0;P<Q.a.length&&(n=Yi(Q.a,P),!(n!=45&&n!=48));++P)--t.d;t.d==0&&(t.d=1)}function Dp(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c;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=R1(rt,[h0,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[cv(this,P)][t.g.length]=!0);for(D=0;D<t.g.length;D++)for(c=0;c<t.g[D].length;c++)A=t.g[D][c],t.f[A]&&(t.o[A]==1||t.o[A]==2)&&(this.e[cv(this,A)][D]=!0);for(this.d=h(F,D0,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]=rf(this.d[y],l),this.d[l]=rf(this.d[l],y));for(this.c=h(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(U=0;U<t.g.length;U++)if(this.e[this.b][U])for(L=0;L<this.b;L++)this.e[L][U]&&this.c[L]!=U&&(this.c[L]==-2?this.c[L]=U:this.c[L]=-3);for(e=0;e<this.b;e++)if(this.c[e]>=-1&&(r=h(F,k,6,this.b,15,1),OK(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=Q_(this,y,l,f),i!=null)){for(T=0;T<i.length;T++)this.c[i[T]]=-3;bW(this,i);break}}}function da(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E,X,tt,W,$,et,lt,st,ct;for(t.e=h(yt,wt,6,t.d,15,1),n=h(yt,wt,6,t.d,15,1),Q=h(yt,wt,6,t.d,15,1),S=h(yt,wt,6,t.d,15,1),ct=h(yt,wt,6,t.d,15,1),m=h(yt,wt,6,t.d*t.d,15,1),L=0;L<t.d;L++)S[L]=t.i[L];for(f=is(t,t.i),Hb(t),x=0,s=0;s<t.d;s++)m[s*t.d+s]=1,ct[s]=-t.e[s],x+=t.i[s]*t.i[s];for(C=100*w.Math.max(w.Math.sqrt(x),t.d),X=(x1(),E1(Date.now())),R=1;R<=e&&!t.f;R++){if(p=C$(t,t.i,f,ct,S,C),p<0)return 2;for(f=t.k,et=0,y=0;y<t.d;y++)ct[y]=S[y]-t.i[y],t.i[y]=S[y],W=w.Math.abs(ct[y])/w.Math.max(w.Math.abs(t.i[y]),1),W>et&&(et=W),n[y]=t.e[y];if(et<12e-8)return 0;for(D=Hb(t),et=0,$=w.Math.max(t.k*D,1),l=0;l<t.d;l++)st=w.Math.abs(t.e[l])*w.Math.max(w.Math.abs(t.i[l]),1),et=w.Math.max(et,st),n[l]=t.e[l]-n[l];if(et/=$,et<A)return 0;for(P=0,i=0,a=0,E=0,T=0;T<t.d;T++){for(v=T*t.d,Q[T]=0,b=0;b<t.d;b++)Q[T]+=m[v+b]*n[b];P+=n[T]*ct[T],i+=n[T]*Q[T],a+=n[T]*n[T],E+=ct[T]*ct[T]}if(P>w.Math.sqrt(3e-8*a*E)){for(P=1/P,r=1/i,c=0;c<t.d;c++)n[c]=P*ct[c]-r*Q[c];for(g=0;g<t.d;g++)for(v=g*t.d,b=g;b<t.d;b++)m[v+b]+=P*ct[g]*ct[b]-r*Q[g]*Q[b]+i*n[g]*n[b],m[b*t.d+g]=m[v+b]}for(U=0;U<t.d;U++)for(v=U*t.d,ct[U]=0,b=0;b<t.d;b++)ct[U]-=m[v+b]*t.e[b];if(tt=E1(Date.now()),lt=l0(tt,X),hu(lt,t.j)){for(j=new Wt(t.c);j.a<j.c.a.length;)t1(j),null.vd();X=tt}}return 1}function Ba(t){var e,A,n,P,r,i,f,D,Q,U,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,U=It,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,U>n-A&&(U=n-A,L=i);if(U>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]),cf(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?cf(t,Q,r,f,t.d[r][0],t.d[f][1]+180):cf(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):(x1(),Q=Xu(t,r,f,t.a[f]),cf(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):(x1(),Q=Xu(t,r,f,t.a[f]),cf(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?cf(t,Q,r,f,t.d[r][0],t.d[f][1]+360):cf(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 up(t,e){var A,n,P,r,i,f,D,Q;if(D=0,t.K){switch(e<t.f&&S3(t.p,e)?D=Y(D,p6):e<t.f&&i0(t.p,e)&&(D=Y(D,2)),Q=(P=t.u[e]&hn,P==0?0:P==re?2:P==I1?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,Mf):A>0&&(D=Y(D,Cf)),i=t.j[e],i){case 0:break;case 1:D=Y(D,I0);break;case 2:D=Y(D,yi);break;case 3:D=Y(D,SP);break;default:D=Y(D,Hf)}switch(n=eh(t,e),n){case 0:break;case 1:D=Y(D,v2);break;case 2:D=Y(D,Ly);break;case 3:D=Y(D,sy);break;default:D=Y(D,tU)}f=t.o[e],f>0&&(D=Y(D,Sn)),f>1&&(D=Y(D,s8))}else{switch(e<t.f&&S3(t.p,e)?D=Y(D,p6):e<t.f&&i0(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]&hn,P==0?0:P==re?2:P==I1?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,Mf):D=Y(D,Cf),r=t.e[e]-e0(t,e)+xt(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,d2);break;case 3:D=Y(D,B2);break;default:D=Y(D,Hf)}switch(n=eh(t,e),n){case 0:D=Y(D,uy);break;case 1:D=Y(D,Qy);break;case 2:D=Y(D,Uy);break;case 3:D=Y(D,oy);break;default:D=Y(D,tU)}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 Qp(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b;for(D=h(F,k,6,t.i.f,15,1),g=h(F,k,6,t.i.f,15,1),l=h(rt,ft,6,t.i.f,16,1),Q=h(rt,ft,6,t.i.f,16,1),m=new Xg(t.i.f),D[0]=e,g[e]=A,g[A]=-2,m.a[e]=!0,m.a[A]=!0,r=0,U=0;r<=U;){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(pA(t.i,i,L)==2&&K(t.i,n)<10)D[++U]=n,g[n]=n,Q[n]=Q[i]||a1(t.i,n)==2,l[n]=Q[i]&&!l[i],m.a[n]=!0;else if(Q[i]&&l[i]){if(v=Eb(t,n,g[i],m.a),v==-1)return null;D[++U]=n,g[n]=v,g[v]=-2,Q[n]=!1,m.a[n]=!0,m.a[v]=!0}else if(fA(t.i,Ot(t.i,i,L))&&(D[++U]=n,g[n]=n,Q[n]=!1,m.a[n]=!0,(K(t.i,n)==6&&a1(t.i,n)==0||K(t.i,n)==7&&p1(t.i,n)==1||K(t.i,n)==14||K(t.i,n)==15&&O(t.i,n)>2||K(t.i,n)==16&&O(t.i,n)>2)&&O(t.i,n)>2)){for(f=!1,T=1;T<O(t.i,n);T++)if(R=_(t.i,n,T),!m.a[R])for(c=0;c<T;c++)b=_(t.i,n,c),m.a[b]||Xs(t,R,b)&&(D[++U]=R,g[R]=b,g[b]=-2,Q[R]=!1,m.a[R]=!0,m.a[b]=!0,f=!0);if(!f)return null}}}else{for(P=h(rt,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(T=0;T<O(t.i,n);T++)if(_(t.i,n,T)==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(D1(t.i,n,g[i])==-1)return null}else D[++U]=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=Eb(t,n,g[i],m.a),v==-1)return null;D[++U]=n,g[n]=v,g[v]=-2,Q[n]=!1,m.a[n]=!0,m.a[v]=!0}}++r}return m}function va(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l,T;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;z1(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),wb(t.V,t.e,l,P)),t.eb=w.Math.max(t.eb,3),n1(t.k),N1(t,new q1(t,1,!0));break;case 2:if(z1(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&&tL(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&&tL(t.V,t.n[f-1],t.n[f]);t.eb=w.Math.max(t.eb,3),n1(t.k),N1(t,new q1(t,1,!0));break;case 3:case 4:case 7:t.eb=w.Math.max(t.eb,3),n1(t.k),N1(t,new q1(t,1,!0));break;case 10:t.eb=w.Math.max(t.eb,3),n1(t.k);break;case 5:case 6:for(y=!1,i=0;i<t.V.q;i++)if(t.P[i]!=r0(t.V,i)){y=!0;break}n1(t.k),y&&N1(t,new q1(t,2,!0));break;case 8:if(L=!1,n=t.t,n!=-1&&t.V.K&&Qe(t.V,n)&&(n=-1),Q=C1(t.V,t.e),n==-1){if(z1(t),Q!=0){for(L=!0,T=!1,e=0;e<t.V.f;e++)C1(t.V,e)==Q&&(T=T|Bn(t.V,e),Ze(t.V,e,0,!1));jU&&!T&&hQ(t)}}else{if(z1(t),L=!0,T=!1,t.e==n)for(D=C1(t.V,t.e),e=0;e<t.V.f;e++)C1(t.V,e)==D&&(T=T|Bn(t.V,e),Ze(t.V,e,0,!1));else{for(U=C1(t.V,n),A=0;A<t.V.f;A++)(C1(t.V,A)==Q||C1(t.V,A)==U)&&Ze(t.V,A,0,!1);for(r=1,e=0;e<t.V.f;e++)C1(t.V,e)==r&&(++r,e=-1);Ze(t.V,t.e,r,!1),Ze(t.V,n,r,!1)}jU&&!T&&hQ(t)}L&&kL(t,w.Math.max(t.eb,1)),n1(t.k)}}function Fa(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R;if(v=kA(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,T=0,L>0&&(s=zt(E1(w.Math.round(t.o[0]))),l=zt(E1(w.Math.round(t.p[0])))),L>1&&(y=zt(E1(w.Math.round(t.o[1]))),T=zt(E1(w.Math.round(t.p[1])))),D=0,t.e==-1||De(t.V,t.e)==0)D=AA*Jr(E1(w.Math.round(v*3/Q1)));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=h(yt,wt,6,De(t.V,t.e),15,1),U=0;U<De(t.V,t.e);U++)r[U]=Y0(t.V,t.e,_(t.V,t.e,U));for(r.sort(Fe(vi.prototype.gd,vi,[])),Q=0;Q<r.length;Q++){if(c=Q==0?r[r.length-1]-F0:r[Q-1],c<v&&v<r[Q]){D=(r[Q]+c)/2;break}if(c<v-F0&&v-F0<r[Q]){D=(r[Q]+c)/2;break}}}if(e=Pn(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=h(yt,wt,6,t.q,15,1),t.p=h(yt,wt,6,t.q,15,1)),i=h(yt,wt,6,2,15,1),f=h(yt,wt,6,2,15,1),R=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(R),f[1]=e*w.Math.cos(R),U=0;U<t.q;U++)t.o[U]=(U==0?t.hb:t.o[U-1])+i[U&1],t.p[U]=(U==0?t.kb:t.p[U-1])+f[U&1];for(t.n=h(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]=jt(t.V,t.n[Q]))}return L!=t.q||t.q!=0&&(s!=zt(E1(w.Math.round(t.o[0])))||l!=zt(E1(w.Math.round(t.p[0]))))||t.q>1&&(y!=zt(E1(w.Math.round(t.o[1])))||T!=zt(E1(w.Math.round(t.p[1]))))}function ma(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E,X,tt,W,$,et,lt,st,ct;for(lt=new f1,g=new Wt(t.g);g.a<g.c.a.length;)if(c=t1(g),c.g!=-1&&(v=D1(t.k,c.a,c.g),!fi(t.k,v)&&!WP(t.k,v)&&(qe(t.k,v)==1||qe(t.k,v)==2))){if($=N(t.g,t.q[c.g]),A=h(F,k,6,O(t.k,c.a)+O(t.k,$.a)-2,15,1),S=0,et=!1,$.g!=-1)A[S++]=$.b;else{for(R=-1,st=-1,b=It,x=0;x<O(t.k,$.a);x++)L=_(t.k,$.a,x),L!=c.a&&(R==-1?(R=x,b=t.q[L]):b<t.q[L]?st=x:(st=R,R=x));st==-1?(X=_(t.k,$.a,R),tt=Ot(t.k,$.a,R),A[S++]=tt|(QQ(t,$.a,X)?cn:0)):(s=_(t.k,$.a,R),l=Ot(t.k,$.a,R),y=_(t.k,$.a,st),T=Ot(t.k,$.a,st),A[S++]=l|(QQ(t,$.a,s)?cn:0),A[S++]=T|(QQ(t,$.a,y)?0:cn))}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!=c.a){n=Ot(t.k,$.a,x),A[S++]=n|(QQ(t,$.a,L)?cn:0),L<$.g&&(et=!et);break}}for(qe(t.k,v)==2&&(et=!et),p=0;p<O(t.k,c.a);p++)if(D=_(t.k,c.a,p),D!=c.g){if(C=et,O(t.k,c.a)==3){for(E=0;E<O(t.k,c.a);E++)if(L=_(t.k,c.a,E),L!=c.g&&L!=D){L<D&&(C=!C);break}}wo(t.k,v)&&(j=Tq(t.d,v),t.n[j]||(t.n[j]=!0,t.o[j]=C),t.o[j]&&(C=!C)),Q=D1(t.k,c.a,D),A[S++]=Q|(C^QQ(t,c.a,D)?0:cn)}lt.a.push(A)}for(t.f=h(F,k,6,t.k.g,15,1),lt.a.length!=0&&Dh(t,LA(lt,0),!1);lt.a.length!=0;){for(ct=lt.a.length,p=lt.a.length-1;p>=0;p--){for(A=(ve(p,lt.a.length),lt.a[p]),W=0,a=!1,U=!1,r=A,i=0,f=r.length;i<f;++i)P=r[i],e=P&1073741823,t.f[e]!=0&&(m=(P&cn)!=0^t.f[e]==2,W==0?a=m:a!=m&&(U=!0),++W);W!=0&&(A=LA(lt,p),U||Dh(t,A,a))}ct==lt.a.length&&Dh(t,LA(lt,0),!1)}}function Up(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p;for(this.d=t,p=OQ(e,!1,null),(p.g.a.length!=1||p.f.a.length!=1)&&x1(),p.c||cQ(p)||x1(),this.g=N(p.g,0),this.f=N(p.f,0),ut(this.g,1),ut(this.f,63),Q=new pi,this.c=h(F,k,6,this.g.f+1,15,1),this.c[0]=-1,n=0;n<this.g.f;n++)C1(this.g,n)!=0&&(this.c[C1(this.g,n)]=n);for(_K(this,this.c),j=h(rt,ft,6,this.g.g,16,1),g=0;g<this.f.g;g++)T=z(this.f,0,g),c=z(this.f,1,g),s=C1(this.f,T),y=C1(this.f,c),s!=0&&y!=0&&(P=this.c[s],r=this.c[y],m=Lu(this.f,g),b=D1(this.g,P,r),b==-1?X8(Q,new As(P,r,s,y,m)):((ee(this.g,b)&31)==0&&(C=Lu(this.g,b),C!=m&&X8(Q,new As(P,r,s,y,m))),j[b]=!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=C1(this.g,P),y=C1(this.g,r),(s!=0||y!=0)&&X8(Q,new As(P,r,s,y,-1))));for(this.k=Gq(Q,h(ltt,{471:1,4:1,5:1,11:1,8:1},148,0,0,1)),U=0,i=0;i<this.g.f;i++)C1(this.g,i)==0&&!Qe(this.g,i)&&++U;for(this.j=h(F,k,6,U,15,1),U=0,f=0;f<this.g.f;f++)C1(this.g,f)==0&&!Qe(this.g,f)&&(this.j[U++]=f);for(this.n=new f1,L=h(rt,ft,6,this.f.f,16,1),A=0;A<this.f.f;A++)C1(this.f,A)==0&&!Qe(this.f,A)&&!L[A]&&mt(this.n,new pb(this.f,A,L));for(this.b=this.j.length==0&&this.n.a.length==0,this.a=h(F,k,6,0,15,1),l=0;l<this.f.f;l++)v=d0(this.f,l),(v==1||v==2)&&(R=this.c[C1(this.f,l)],R!=-1&&(S=d0(this.g,R),OY(this,l,this.c)==(S==v)&&(this.a=bn(this.a,this.a.length+1),this.a[this.a.length-1]=R)));this.e=KY(this)}function e6(){e6=B1,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](-*)(-*)=*\"]),xP=B(d(Ee,1),PA,6,15,[3.240000009536743,12.359999656677246,23.790000915527344,11.680000305175781,13.600000381469727,tV,12.029999732971191,21.940000534057617,23.850000381469727,26.020000457763672,0,tV,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 ka(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p;i=h(yt,wt,6,t.q,15,1);t:for(r=0;r<i.length;r++){switch(p=t.a[r],i[r]=0,p){case 32:case 72:for(Q=0;Q<t.e[r];Q++){for(g=t.i[r][Q],R=t.a[g],T=0,c=0,L=0;L<t.e[g];L++)m=t.i[g][L],t.C[m]==7&&t.e[m]+xt(t,m)==2&&!(m<t.f&&i0(t.p,m))&&++T,(t.C[m]==8||t.C[m]==16)&&t.e[m]+xt(t,m)==1&&++c;if(t.C[g]==16&&c==2&&T==1&&(T=0),t.C[g]==6&&c>0){i[r]=c==1?-1:-(c-1)/c;continue t}if(R==45&&c==3){i[r]=-.3333333333333333;continue t}if(R==25&&c>0){i[r]=c==1?0:-(c-1)/c;continue t}if(R==18&&c>0){i[r]=T+c==2?0:-(T+c-2)/c;continue t}if(R==73&&c>0){i[r]=c==1?0:-(c-1)/c;continue t}if(R==77&&c>0){i[r]=-1/c;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,b=0,f=h(rt,ft,6,t.q,16,1),f[r]=!0;y>b;)for(b=y,U=0;U<t.q;U++)if(f[U]){for(L=0;L<t.e[U];L++)if(g=t.i[U][L],R=t.a[g],!(R!=57&&R!=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 ba(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]),_o(t.s,P,i),he(t.s,oe(t.s,\"Desired Bond type(s):\"),1,1,3,1),t.k=fn(t.s,\"Single\"),he(t.s,t.k,1,3,3,3),t.c=fn(t.s,\"Double\"),he(t.s,t.c,1,4,3,4),t.n=fn(t.s,\"Triple\"),he(t.s,t.n,1,5,3,5),t.i=fn(t.s,\"Quadruple\"),he(t.s,t.i,1,6,3,6),t.j=fn(t.s,\"Quintuple\"),he(t.s,t.j,1,7,3,7),t.b=fn(t.s,\"Delocalized\"),he(t.s,t.b,1,8,3,8),t.g=fn(t.s,\"Coordinate (0-order)\"),he(t.s,t.g,1,9,3,9),t.q=oA(t.s),Gt(t.q,\"any ring state\"),Gt(t.q,fV),Gt(t.q,\"is any ring bond\"),Gt(t.q,\"is non-aromatic ring bond\"),Gt(t.q,\"is aromatic bond\"),Gt(t.q,\"is any non-aromatic bond\"),JP(t.q,t),he(t.s,t.q,1,11,3,11),t.r=oA(t.s),Gt(t.r,\"any ring size\"),Gt(t.r,\"is in 3-membered ring\"),Gt(t.r,\"is in 4-membered ring\"),Gt(t.r,\"is in 5-membered ring\"),Gt(t.r,\"is in 6-membered ring\"),Gt(t.r,\"is in 7-membered ring\"),Gt(t.r,\"smallest ring 8 to 11\"),Gt(t.r,\"smallest ring >= 12\"),he(t.s,t.r,1,13,3,13),t.e=fn(t.s,\"Match formal bond order\"),uA(t.e,(e.G[A]&Ef)!=0),JP(t.e,t),he(t.s,t.e,1,15,3,15),t.f=fn(t.s,\"Match Stereo Configuration\"),uA(t.f,(e.G[A]&h8)!=0),JP(t.f,t),he(t.s,t.f,1,17,3,17),t.d=fn(t.s,\"Is atom bridge between\"),JP(t.d,t),he(t.s,t.d,1,19,3,19),t.p=oA(t.s),r=0;r<16;r++)Gt(t.p,\"\"+r);f0(t.s,t.p,2,21),f0(t.s,oe(t.s,\" and\"),3,21),JP(t.p,t),t.o=oA(t.s),Ah(t,0),f0(t.s,t.o,2,23),f0(t.s,oe(t.s,\" atoms\"),3,23),ut(t.u,7),Y_(t)}function op(){op=B1,xV=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\\x7FUVfgOmFXsQe_gXPyXis_wF|vUUX_XbxpzU]HUFgYViwFo~@uemc@}~T\\x7FIEPioYVwr]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\\x7FwLl\",\"deL@@DjUYkfEijjjj@MeBDpj[ad !B\\x7FaA\\x7FMVr[AvkKzm_jKvVbD{sk\",\"dil@@LddTQRl[NX^Fjjjj@MiBDpj[a@ !BPfL@\\x7Fox@M~T@\\x7Fox@\\x7F`C~@@\",\"daL@@DjYtKJqjynjjjj@MaBDpj[` !B`bL@_gx@@Gy~@Gx@_`@\"])}function Ra(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S;for(m=h(rt,ft,6,t.R.f,16,1),v=h(rt,ft,6,t.R.g,16,1),e=0,b=!1,(t.Q&128)!=0&&(t.Y=h(F,k,6,t.R.f,15,1),t.X=h(F,k,6,t.R.g,15,1)),n=0;n<t.R.f;n++)t.W[n]&&(t.fb[n]||ey(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(zW(t),t.T=0,f=new Wt(t.A);f.a<f.c.a.length;){for(i=t1(f),R=0,j=0,U=0,Q=0,L=-1,D=-1,l=0;l<i.a.length;l++)m[i.a[l]]&&(++R,(t.db[i.a[l]]==1||t.db[i.a[l]]==2)&&(++j,b=!0,L<t.f[i.a[l]]&&(L=t.f[i.a[l]],U=i.a[l])));for(T=0;T<i.b.length;T++)v[i.b[T]]&&(++R,C=t.f[z(t.R,0,i.b[T])],S=t.f[z(t.R,1,i.b[T])],s=C>S?(C<<16)+S:(S<<16)+C,(t.o[i.b[T]]==1||t.o[i.b[T]]==2)&&(++j,b=!0,D<s&&(D=s,Q=i.b[T])));if(R!=0)if(R==1){for(c=0;c<i.a.length;c++)m[i.a[c]]&&(t.db[i.a[c]]=0);for(y=0;y<i.b.length;y++)v[i.b[y]]&&(t.o[i.b[y]]=0)}else if(j==1){for(c=0;c<i.a.length;c++)m[i.a[c]]&&(t.db[i.a[c]]=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,c=0;c<i.a.length;c++)m[i.a[c]]&&(t.Y[i.a[c]]=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[U]==2&&(g=!0):t.o[Q]==2&&(g=!0),g){for(c=0;c<i.a.length;c++)if(m[i.a[c]])switch(t.db[i.a[c]]){case 1:t.db[i.a[c]]=2;break;case 2:t.db[i.a[c]]=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 b}function ja(t,e,A,n,P,r,i,f){var D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E,X,tt,W,$,et,lt,st,ct,Pt;for(tt=N(t.j,e),L=tt,s=0,y=L.length;s<y;++s)if(U=L[s],!rX(t,U))return!0;for(W=N(t.k,e),$=W.length,T=0,Q=0,Pt=!1,C=0;C<$;C++)T<<=1,Q<<=1,dt(t.i,W[C])>1||l1(t.i,W[C])==8?T|=1:f&&ps(t,W[C])?(T|=1,Q|=1):(D=A[e][C],D!=-1&&(n[D]?P[D]&&(T|=1,r[D]||(Q|=1)):Pt=!0));switch(b=!1,$){case 3:for(c=B(d(F,1),k,6,15,[2,1,4]),b=!0,R=0;R<3;R++)(T&c[R])==c[R]&&(K(t.i,tt[R])==6&&p1(t.i,tt[R])==1||K(t.i,tt[R])==5&&p1(t.i,tt[R])==0)&&(P[e]=!0,i[e]=R,(Q&c[R])==0&&(b=!1));break;case 5:for(g=B(d(F,1),k,6,15,[10,5,18,9,20]),b=!0,X=0;X<5;X++)if((T&g[X])==g[X])switch(K(t.i,tt[X])){case 6:p1(t.i,tt[X])==-1&&(P[e]=!0,i[e]=X,(Q&g[X])==0&&(b=!1));break;case 7:p1(t.i,tt[X])<=0&&(P[e]=!0,i[e]=X);break;case 8:P[e]=!0,i[e]=X;break;case 16:case 34:case 52:O(t.i,tt[X])==2&&(P[e]=!0,i[e]=X)}break;case 6:b=!0,(T&21)==21&&(P[e]=!0,(Q&21)==0&&(b=!1)),(T&42)==42&&(P[e]=!0,(Q&42)==0&&(b=!1));break;case 7:for(m=B(d(F,1),k,6,15,[42,21,74,37,82,41,84]),b=!0,v=0;v<7;v++)if((T&m[v])==m[v]){if(K(t.i,tt[v])==6&&(p1(t.i,tt[v])==1||f&&iJ(t,tt[v]))||K(t.i,tt[v])==5&&p1(t.i,tt[v])==0)P[e]=!0,i[e]=v,(Q&m[v])==0&&(b=!1);else for(j=0;j<2;j++)if(lt=(v+6+j)%7,et=W[lt],st=A[e][lt],st!=-1&&!P[st]&&N(t.k,st).length==5){for(ct=N(t.k,st),S=0;ct[S]!=et;)++S;for(p=!1,E=0,x=1;x<=4;x++){if(l=ct[(S+x)%5],a=dt(t.i,l)>1||l1(t.i,l)==8||f&&ps(t,l),a&&p){E=0;break}p=a,p&&++E}if(E==2){P[e]=!0,P[st]=!0,r[e]=!0,r[st]=!0,mt(t.b,k1(et));break}}}}return P[e]&&!b&&(r[e]=!0),P[e]?!0:!Pt}function pa(t){var e,A,n,P,r,i,f,D,Q,U,L;for(ut(t,1),P=h(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-G1(t,n):P[1]+=xt(t,n);for(f=0,Q=1;Q<=190;Q++)P[Q]!=0&&++f;for(this.b=h(F,k,6,f,15,1),this.c=h(F,k,6,f,15,1),f=0,D=0;D<S2.length;D++)P[S2[D]]!=0&&(this.b[f]=P[S2[D]],this.c[f]=S2[D],++f,P[S2[D]]=0);for(;;){for(L=\"zzz\",U=-1,i=1;i<=190;i++)P[i]>0&&Kr(L,(Y1(),X0)[i])>0&&(L=(Y1(),X0)[i],U=i);if(U==-1)break;this.b[f]=P[U],this.c[f]=U,++f,P[U]=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+=xF(i,r)-m4[i],this.d+=xF(i,r)-k4[i])}function Ca(t,e,A,n){var P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E,X,tt,W,$,et,lt,st,ct,Pt,Tt,Kt,Ct,$t,Ut,Ht,Qt,Nt,b1,e1,Rt,Lt,j1,St,g1,y0;for(y0=A[4],Nt=A[3]==-1?3:4,l=h(F,k,6,e.q,15,1),Ct=h(rt,ft,6,e.r,16,1),g=0;g<Nt;g++)Ct[n[g]]=!0;for(y=Wb(e,l,Ct,!1),T=h(F,k,6,y,15,1),Q=l,U=0,L=Q.length;U<L;++U)s=Q[U],++T[s];for(Ut=0,C=h(rt,ft,6,y,16,1),m=0;m<Nt;m++)s=l[A[m]],C[s]||(C[s]=!0,++Ut);for(Ht=h(F,k,6,Ut,15,1),Qt=h(F,k,6,Ut,15,1),$t=h(F,k,6,Ut,15,1),j=0,D=0;D<y;D++)if(C[D]){for(Ht[j]=D,Qt[j]=T[D],v=0;v<Nt;v++)D==l[A[v]]&&++$t[j];++j}if(S=h(rt,ft,6,e.q,16,1),e1=0,g1=2,Ut==Nt)for(Kt=-1,v=0;v<Nt-2;v++){for(Lt=-1,j1=It,x=0;x<Ut;x++)x!=Kt&&Qt[x]<j1&&(Lt=x,j1=Qt[x]);for(P=0;P<e.q;P++)l[P]==Ht[Lt]&&(S[P]=!0,++e1);Kt=Lt}else for(v=0;v<Ht.length;v++){if($t[v]==1&&Nt==3){for(p=2*Qt[v]<e.q,p||(g1=1),P=0;P<e.q;P++)P!=y0&&l[P]==Ht[v]==p&&(S[P]=!0,++e1);break}if($t[v]==2&&Nt==4){for(p=2*Qt[v]<e.q,P=0;P<e.q;P++)P!=y0&&l[P]==Ht[v]==p&&(S[P]=!0,++e1);break}}if(e1==0){for(v=0;v<Ht.length;v++)if($t[v]==1){for(P=0;P<e.q;P++)l[P]==Ht[v]&&(S[P]=!0,++e1);break}for(b1=Nt-2-(e1==0?0:1),R=0;R<b1;R++)for(x=0;x<Nt;x++)if(!S[A[x]]){S[A[x]]=!0,++e1;break}}for(j=0,t.a=h(F,k,6,e1,15,1),b=0;b<S.length;b++)S[b]&&(t.a[j++]=b);for(St=0,Rt=0,t.c=h(F,k,6,g1,15,1),t.b=h(F,k,6,Nt-g1,15,1),c=0;c<Nt;c++)if(S[A[c]]){if(Rt>=t.b.length){for(x1(),\"\"+new p3(e).a.a,E=A,$=0,ct=E.length;$<ct;++$);for(X=n,et=0,Pt=X.length;et<Pt;++et);for(tt=l,lt=0,Tt=tt.length;lt<Tt;++lt);for(a=C,W=0,st=a.length;W<st;++W);for(r=S,i=0,f=r.length;i<f;++i);}t.b[Rt++]=A[c]}else t.c[St++]=A[c]}function Ma(t,e){var A;switch(t.C[e]){case 7:if(e<t.f&&i0(t.p,e)){if(t.s[e]==0)if(t.e[e]-e0(t,e)+xt(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)+xt(t,e)==0){for(A=0;A<e0(t,e);A++)if(!_e(t,t.k[e][A]))return p1(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)+xt(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)+xt(t,e)){case 0:switch(t.o[e]){case 0:return 10;case 1:return av(t,e)?3:11;case 2:return t.n[e][0]==2?av(t,e)?4:xP.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 xP.length+1;case 8:if(e<t.f&&i0(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&&p1(t,t.i[e][0])>0?28:30}return xP.length+1;case 15:if(t.s[e]==0){if(t.e[e]-e0(t,e)+xt(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)+xt(t,e)==1&&e0(t,e)==3&&t.o[e]==1)return 42}return xP.length+1;case 16:if(t.s[e]==0){if(e<t.f&&i0(t.p,e))return e0(t,e)==2?37:38;if(t.e[e]-e0(t,e)+xt(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)+xt(t,e)==1&&e0(t,e)==1)return 36}return xP.length+1}return xP.length}function Ha(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a;for(T=0,c=(f=ne(e,T),f==-1?e.length:f),n=c1((pt(T,c,e.length),e.substr(T,c-T)),o1,It),T=lA(e,c),c=(D=ne(e,T),D==-1?e.length:D),m=(pt(T,c,e.length),e.substr(T,c-T)),C=null,P=!1,g=OZ(e),g!=0&&(C=WZ(e),g<0&&(P=!0),c=w.Math.abs(g)),T=lA(e,c),c=(Q=ne(e,T),Q==-1?e.length:Q),p=Qn((pt(T,c,e.length),e.substr(T,c-T))),T=lA(e,c),c=(U=ne(e,T),U==-1?e.length:U),x=Qn((pt(T,c,e.length),e.substr(T,c-T))),T=lA(e,c),c=(L=ne(e,T),L==-1?e.length:L),a=Qn((pt(T,c,e.length),e.substr(T,c-T))),T=lA(e,c),c=(s=ne(e,T),s==-1?e.length:s),R=c1((pt(T,c,e.length),e.substr(T,c-T)),o1,It),A=W0(t.j,p,-x,-a),A+1!=n&&(!t.b&&(t.b=new lP),ze(t.b,k1(n),k1(A))),C!=null&&(K0(t.j,A,6),Tf(t.j,A,C,P)),R!=0&&Ze(t.j,A,R,!1),A1(m,\"A\")||A1(m,\"*\")?T1(t.j,A,1,!0):A1(m,\"Q\")?(v=h(F,k,6,1,15,1),v[0]=6,Tf(t.j,A,v,!0)):K0(t.j,A,SA(m,67));(T=lA(e,c))!=-1;)if(c=(i=ne(e,T),i==-1?e.length:i),b=(pt(T,c,e.length),e.substr(T,c-T)),l=b.indexOf(k0(61)),y=(pt(0,l,b.length),b.substr(0,l)),S=c1((Xt(l+1,b.length+1),b.substr(l+1)),o1,It),A1(y,\"CHG\"))E0(t.j,A,S);else if(A1(y,\"RAD\"))switch(S){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(!A1(y,\"CFG\")){if(A1(y,\"MASS\"))jr(t.j,A,S);else if(A1(y,\"VAL\"))XA(t.j,A,S==-1?0:S==0?-1:S);else if(A1(y,\"HCOUNT\"))switch(S){case 0:break;case-1:T1(t.j,A,1792,!0);break;case 1:T1(t.j,A,128,!0);break;case 2:T1(t.j,A,384,!0);break;default:T1(t.j,A,896,!0)}else if(A1(y,\"SUBST\")){if(S==-1)T1(t.j,A,I1,!0);else if(S>0){for(j=0,r=0;r<t.j.r;r++)(z(t.j,0,r)==A||z(t.j,1,r)==A)&&++j;S>j&&T1(t.j,A,C0,!0)}}else if(A1(y,\"RBCNT\"))switch(S){case 3:case-1:T1(t.j,A,112,!0);break;case 1:T1(t.j,A,8,!0);break;case 2:T1(t.j,A,104,!0);break;case 4:T1(t.j,A,56,!0)}}}function Va(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E,X,tt,W,$,et,lt,st,ct,Pt,Tt,Kt,Ct,$t,Ut;for(ut(t.k,1),t.g=h(rt,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=h(rt,ft,6,t.k.f,16,1),Ut=new Qo(t.k,3),m=h(rt,ft,6,Ut.j.a.length,16,1),Tt=0;Tt<Ut.j.a.length;Tt++){for(Ct=N(Ut.j,Tt),m[Tt]=!0,C=Ct,x=0,X=C.length;x<X;++x)if(b=C[x],!z0(t.k,b)){m[Tt]=!1;break}if(m[Tt]){for(S=Ct,a=0,tt=S.length;a<tt;++a)b=S[a],v[b]=!0;for($t=N(Ut.k,Tt),j=$t,p=0,E=j.length;p<E;++p)b=j[p],t.g[b]||(t.g[b]=!0,++t.c)}}for(s=0;s<t.k.g;s++)!t.g[s]&&(Ut.c[s]&w1)!=0&&z0(t.k,z(t.k,0,s))&&z0(t.k,z(t.k,1,s))&&r_(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)&&kX(t),g=h(rt,ft,6,t.k.g,16,1),t.k.g>=0&&sA(t.g,0,g,0,t.k.g),Kt=0;Kt<Ut.j.a.length;Kt++)if(m[Kt]){for(Ct=N(Ut.j,Kt),$=Ct,et=0,lt=$.length;et<lt;++et)if(W=$[et],!dZ(t,W))for(z0(t.k,W)&&(zn(t.k,W,!1),--t.b),b=0;b<O(t.k,W);b++)T=Ot(t.k,W,b),t.g[T]&&(t.g[T]=!1,--t.c)}for(U5(t),Pt=0;Pt<Ut.j.a.length;Pt++)if(m[Pt]&&N(Ut.k,Pt).length==6){for($t=N(Ut.k,Pt),R=!0,D=$t,Q=0,U=D.length;Q<U;++Q)if(f=D[Q],!t.g[f]){R=!1;break}R&&(vQ(t,$t[0]),vQ(t,$t[2]),vQ(t,$t[4]),U5(t))}for(ct=5;ct>=4;ct--)do for(st=!1,f=0;f<t.k.g;f++)if(t.g[f]){for(n=0,c=0;c<2;c++)for(l=z(t.k,c,f),b=0;b<O(t.k,l);b++)t.g[Ot(t.k,l,b)]&&++n;if(n==ct){vQ(t,f),U5(t),st=!0;break}}while(st);for(;t.b>=2&&s_(t,g););if(e){if(t.b!=0)for(P=0;P<t.k.f;P++)z0(t.k,P)&&(zn(t.k,P,!1),T1(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)&&xt(t.k,P)!=0&&(zn(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 V1(Gp));if(t.c!=0)throw At(new V1(Gp))}}function c2(){c2=B1,IA=B(d(Ee,1),PA,6,15,[1,uU,O6,2.119999885559082,1.9800000190734863,1.909999966621399,1.7699999809265137,My,1.5,G6,1.5800000429153442,2.5,2.509999990463257,2.25,2.190000057220459,J6,1.8899999856948853,eC,1.8300000429153442,2.7300000190734863,2.619999885559082,2.5799999237060547,AC,nC,Hy,Hy,z6,PC,PC,2.380000114440918,2.390000104904175,Y6,K6,1.8799999952316284,eC,rC,2.25,3.2100000381469727,2.8399999141693115,2.75,2.5199999809265137,2.559999942779541,Hy,z6,AC,z6,2.1500000953674316,iC,fC,2.430000066757202,nC,DC,1.9900000095367432,2.0399999618530273,2.059999942779541,3.4800000190734863,3.0299999713897705,2.9800000190734863,uC,QC,2.950000047683716,QC,2.9000000953674316,UC,X6,oC,UC,LC,X6,oC,sC,2.740000009536743,2.630000114440918,iC,2.569999933242798,fC,2.4800000190734863,2.4100000858306885,K6,Y6,Hy,DC,2.5999999046325684,2.5399999618530273,2.5,2.5,2.5,2.5,2.5,sC,2.930000066757202,uC,2.7100000381469727,2.819999933242798,LC,X6,yC,3.4000000953674316,yC,2.700000047683716]),Jf=B(d(Ee,1),PA,6,15,[.25,Z6,.46000000834465027,lC,1.0199999809265137,QU,.75,.7099999785423279,.6299999952316284,.6399999856948853,.9599999785423279,TC,hC,1.2599999904632568,W6,cC,1.0299999713897705,.9900000095367432,wC,gC,dC,1.4800000190734863,_6,BC,vC,1.190000057220459,W6,cC,1.100000023841858,uU,uU,FC,Vy,Vy,W6,1.1399999856948853,Vy,mC,$6,a6,1.5399999618530273,kC,1.3799999952316284,bC,1.25,1.25,uU,hC,RC,G6,fU,fU,_6,lC,1.350000023841858,Y6,gC,py,a6,jC,1.7400000095367432,pC,CC,Ey,MC,Ey,HC,My,t4,1.6399999856948853,UU,VC,1.5199999809265137,G6,EC,1.309999942779541,SC,vC,1.2300000190734863,FC,1.4199999570846558,1.5,RC,1.5099999904632568,qC,kC,qC,2.2300000190734863,2.009999990463257,rC,1.75,MC,UU,dC,CC,My,My,Ey,Ey,t4,HC,pC,jC,1.6100000143051147,IC,1.4900000095367432,O6,1.409999966621399,BC,SC,bC,Vy,EC,_6,O6,VC,1.75,t4,IC])}function Ea(t,e,A){var n,P,r,i,f,D,Q,U;switch(f=A.a.length,0<f?A.a=UA(A.a,0,0):0>f&&(A.a+=q8(h(l9,a0,6,-f,15,1))),D=o0(t.k,e),P=zt(q0(V(D,i9),3)),P){case 20971520:A.a+=\"+0\";break;case 25165824:p1(t.k,e)==0&&(A.a+=\"-\");break;case 12582912:p1(t.k,e)==0&&(A.a+=\"+\")}return n=V(D,Ty),G(n,2)==0?A.a+=\";a\":G(n,4)==0&&(A.a+=\";A\"),r=V(D,rP),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\")),U=V(D,120),G(U,8)==0?A.a+=\";!R0\":G(U,16)==0?A.a+=\";!R1\":G(U,32)==0?A.a+=\";!R2\":G(U,64)==0?A.a+=\";!R3\":G(U,112)==0?A.a+=\";R0\":G(U,104)==0?A.a+=\";R1\":G(U,88)==0?A.a+=\";R2\":G(U,56)==0&&(A.a+=\";R3\"),Q=V(D,rr),G(Q,L8)==0?A.a+=\";!r\"+Te(Q):G(Q,jp)==0?A.a+=\";r\"+Te(Q):G(Q,0)!=0&&(gt(V(Q,pf),0)?(P0(V(Q,L8),0)&&(A.a+=\";!r0\"+Te(Q)),P0(V(Q,ir),0)&&(A.a+=\";!r3\"+Te(Q)),P0(V(Q,fr),0)&&(A.a+=\";!r4\"+Te(Q)),P0(V(Q,Dr),0)&&(A.a+=\";!r5\"+Te(Q)),P0(V(Q,ur),0)&&(A.a+=\";!r6\"+Te(Q)),P0(V(Q,Qr),0)&&(A.a+=\";!r7\"+Te(Q))):(A.a+=\";\",gt(V(Q,L8),0)&&(A.a+=\"r0,\"+Te(Q)),gt(V(Q,ir),0)&&(A.a+=\"r3,\"+Te(Q)),gt(V(Q,fr),0)&&(A.a+=\"r4,\"+Te(Q)),gt(V(Q,Dr),0)&&(A.a+=\"r5,\"+Te(Q)),gt(V(Q,ur),0)&&(A.a+=\"r6,\"+Te(Q)),gt(V(Q,Qr),0)&&(A.a+=\"r7,\"+Te(Q)),un(A,A.a.length-1))),G(Q,0)==0&&(Q=q0(V(D,f9),22),G(Q,0)!=0&&(A.a+=\";r\"+Te(Q))),i=V(D,si),G(i,_Q)==0&&(A.a+=\";D1\"),G(i,d2)==0&&(A.a+=\";D2\"),G(i,B2)==0&&(A.a+=\";D3\"),G(i,$Q)==0&&(A.a+=\";!D3;!D4\"),G(i,qA)==0&&(A.a+=\";!D4\"),G(i,yi)==0&&(A.a+=\";!D0;!D1\"),G(i,SP)==0&&(A.a+=\";!D0;!D1;!D2\"),G(i,Hf)==0&&(A.a+=\";!D0;!D1;!D2;!D3\"),gt(V(D,I1),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 Sa(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C;if(t.C[e]!=7||t.s[e]!=0||t.j[e]+t.o[e]>3)return!1;if(e<t.f&&i0(t.p,e)){if(t.o[e]!=1||E5(t,e,7)!=1)return!1;for(R=(ut(t,7),t.p),m=0;m<R.j.a.length;m++)if(yA(R,m,e)){if(N(R.k,m).length==5||N(R.k,m).length==6){for(b=N(R.j,m),c=-1,D=0;D<b.length;D++)if(b[D]==e){c=D;break}for(P=0,g=null,T=null,b.length==5&&(g=h(F,k,6,2,15,1),g[0]=b[c-1<0?c+4:c-1],g[1]=b[c-4<0?c+1:c-4],T=h(F,k,6,2,15,1),T[0]=b[c-2<0?c+3:c-2],T[1]=b[c-3<0?c+2:c-3]),b.length==6&&(g=h(F,k,6,3,15,1),g[0]=b[c-1<0?c+5:c-1],g[1]=b[c-3<0?c+3:c-3],g[2]=b[c-5<0?c+1:c-5],T=h(F,k,6,2,15,1),T[0]=b[c-2<0?c+4:c-2],T[1]=b[c-4<0?c+2:c-4]),Q=0;Q<b.length;Q++)e!=b[Q]&&t.C[b[Q]]==7&&t.o[b[Q]]==1&&--P;for(U=0;U<g.length;U++){for(r=-1,i=-1,l=0;l<t.j[g[U]];l++)if(!_e(t,t.k[g[U]][l])){r=t.i[g[U]][l],i=t.k[g[U]][l];break}if(r!=-1){if(t.C[r]==7&&t.o[r]==0&&t.j[r]+t.o[r]<=3&&!e5(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<R.j.a.length;j++)if(R.e[j]&&yA(R,j,r)){for(v=N(R.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<T.length;L++){for(r=-1,y=0;y<t.j[T[L]];y++)_e(t,t.k[T[L]][y])||(r=t.i[T[L]][y]);t.C[T[L]]==6?r!=-1&&Df(t,r)!=0&&--P:t.C[T[L]]==7&&t.o[T[L]]==0&&(r==-1||!(r<t.f&&i0(t.p,r))&&Df(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,e5(t,n,!1)&&--C;continue}n<t.f&&i0(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],Df(t,n)!=0)return!1;n<t.f&&i0(t.p,n)&&++A,t.C[n]==7&&!e5(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&&i0(t.p,n)||t.C[n]!=6||Df(t,n)!=0||t.o[n]!=0&&zz(t,n))return!1;return!0}function A6(t,e,A,n){var P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E,X,tt,W,$,et,lt;if(K(t.R,A)!=K(t.R,n))return K(t.R,A)>K(t.R,n);if(ye(t.R,A)!=ye(t.R,n))return X=Du(t.R,A)?(Y1(),U9)[K(t.R,A)]:ye(t.R,A),tt=Du(t.R,n)?(Y1(),U9)[K(t.R,n)]:ye(t.R,n),X>tt;for(j=t.R.f,m=h(F,k,6,j,15,1),R=h(F,k,6,j,15,1),b=h(F,k,6,j,15,1),v=h(rt,ft,6,j,16,1),D=h(rt,ft,6,t.R.q,16,1),m[0]=e,m[1]=A,m[2]=n,R[0]=-1,R[1]=0,R[2]=0,D[e]=!0,D[A]=!0,D[n]=!0,s=1,C=2,E=h(F,k,6,64,15,1),E[1]=1,E[2]=3,l=2;s<=C;){for(;s<E[l];){if(y=m[s],!v[s]){for(T=0,c=0,p=0;p<O(t.R,y);p++){if(U=_(t.R,y,p),C+pA(t.R,y,p)+1>=j&&(j+=t.R.f,m=vL(m,j),R=vL(R,j),b=vL(b,j),v=(lt=h(rt,ft,6,j,16,1),sA(v,0,lt,0,v.length),lt)),G8(t.R,Ot(t.R,y,p)))++T,c+=K(t.R,U);else if(U!=e)for(a=1;a<pA(t.R,y,p);a++)++C,m[C]=U,R[C]=s,v[C]=!0;if($=R[s],U!=m[$]){if(f=!1,D[U])for(W=R[$];W!=-1;){if(U==m[W]){f=!0;break}W=R[W]}f?(++C,m[C]=U,R[C]=s,v[C]=!0):(++C,m[C]=U,R[C]=s,D[U]=!0)}}T!=0&&(++C,b[C]=(c<<2)/T|0,R[C]=s,v[C]=!0)}if(++s,s==nP)throw At(new V1(\"Emergency break in while loop.\"))}for(E.length==l+1&&(E=vL(E,E.length+64)),E[l+1]=C+1,S=E[l];S<E[l+1];S++)b[S]==0&&(b[S]=(K(t.R,m[S])==151||K(t.R,m[S])==152?1:K(t.R,m[S]))<<2),b[S]+=b[R[S]]<<16;if(NR(t,v,b,R,m,E,l),b[1]!=b[2])return b[1]>b[2];l>1&&iR(b,R,E,l),++l}for(L=h(F,k,6,t.R.f,15,1),x=!1,r=0;r<t.R.f;r++)if(D[r]&&!Du(t.R,r)){x=!0;break}if(x){for(i=0;i<t.R.f;i++)L[i]=Du(t.R,i)?(Y1(),U9)[K(t.R,i)]:ye(t.R,i);if(Vh(t,v,b,R,m,L,E,l))return b[1]>b[2]}for(V9(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&&Vh(t,v,b,R,m,L,E,l))return b[1]>b[2];for(V9(L,L.length,0),et=!1,P=0;P<t.R.f;P++)D[P]&&(t.$[P]==2?(L[P]=1,et=!0):t.$[P]==1&&(L[P]=2,et=!0));if(et&&Vh(t,v,b,R,m,L,E,l))return b[1]>b[2];throw t.d=!0,At(new V1(\"no distinction applying CIP rules\"))}function n6(){n6=B1,Zf=B(d(F,2),D0,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,u4,1094713345,1077936134,-1879048186,-1543503866,-1543503846,-1459617766,Q4,C2,C2]),B(d(F,1),k,6,15,[-1431737686,-1453057622,-1542187926,-1542188954,-1459351471,-1459351487,u4,1094713345,1077952518,-1879031802,-1543154682,-1543487462,-1459601382,Q4,C2,C2]),B(d(F,1),k,6,15,[_y,_y,-1431741782,-1437330070,-1459351462,-1459351482,u4,-1858076671,-1874853882,-1879048186,-1543503866,-1543503846,-1459617766,Q4,C2,C2]),B(d(F,1),k,6,15,[_y,-1432005270,-1454374890,-1543503871,-1879048191,1073741825,1073741846,1073743210,-1795073366,1079421610,1147841194,-1783977302,$y,$y,-1498764630]),B(d(F,1),k,6,15,[_y,-1432005270,-1454374890,-1543438335,-1878982655,1075138561,1073807382,1073808746,-1795073366,1079421610,1147841194,-1783977302,$y,$y,-1498764630]),B(d(F,1),k,6,15,[1431655786,u9,Nf,u9,Nf,u9,Nf,u9,Nf,u9,Nf,u9,1145324650]),B(d(F,1),k,6,15,[1431655786,u9,Nf,u9,Nf,u9,1073758314,1073758250,1074091114,1073758250,1073758314,u9,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]),$V=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]),aV=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]),tE=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 qa(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v;if(L=!1,t.R.K){for(Q=0;Q<t.R.g;Q++)if(ee(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)+xi(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=h(F,k,6,t.R.q,15,1),t.e=h(B4,k2,100,t.R.f,0,1),n=0;n<t.R.f;n++)t.e[n]=new bo(D);for(f=!1,P=0;P<t.R.f;P++)$e(t.e[P],P),gt(V(o0(t.R,P),1),0)||MA(t.R,P)!=null?_1(t.e[P],8,6):_1(t.e[P],8,K(t.R,P)),_1(t.e[P],8,ye(t.R,P)),_1(t.e[P],2,a1(t.R,P)),_1(t.e[P],4,O(t.R,P)+xi(t.R,P)),gt(V(o0(t.R,P),1),0)?_1(t.e[P],4,8):_1(t.e[P],4,8+p1(t.R,P)),_1(t.e[P],5,w.Math.min(31,M9(t.R,P))),_1(t.e[P],4,TX(t,P)+1),_1(t.e[P],2,FA(t.R,P)>>4),t.R.K&&(_1(t.e[P],51,o0(t.R,P)),MA(t.R,P)!=null&&(f=!0));if(t.U=Wn(t),t.U<t.R.f){for(e=0;e<t.R.f;e++){for($e(t.e[e],e),_1(t.e[e],t.c,t.f[e]),s=h(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,pr(t.R,Ot(t.R,e,l)));for(s.sort(Fe(u0.prototype.gd,u0,[])),T=t.O;T>s.length;T--)_1(t.e[e],t.c+5,0);for(y=s.length-1;y>=0;y--)_1(t.e[e],t.c+5,s[y])}t.U=Wn(t)}if(f&&t.U<t.R.f){for(e=0;e<t.R.f;e++){for($e(t.e[e],e),_1(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--)_1(t.e[e],8,0);for(y=m-1;y>=0;y--)_1(t.e[e],8,i[y])}t.U=Wn(t)}if(L&&t.U<t.R.f){for(e=0;e<t.R.f;e++){for($e(t.e[e],e),_1(t.e[e],t.c,t.f[e]),U=h(NA,a0,6,O(t.R,e)+xi(t.R,e),14,1),c=0,l=0;l<De(t.R,e);l++)(l<O(t.R,e)||l>=Mt(t.R,e))&&(U[c]=t.f[_(t.R,e,l)],U[c]=M1(U[c],23),U[c]=Y(U[c],ee(t.R,Ot(t.R,e,l))),++c);for(U.sort(Fe(Nl.prototype.hd,Nl,[])),T=t.O;T>U.length;T--)_1(t.e[e],t.c+23,0);for(y=U.length-1;y>=0;y--)_1(t.e[e],t.c+23,U[y])}t.U=Wn(t)}if((t.Q&8)!=0&&t.U<t.R.f){for(g=new nu,r=0;r<t.R.f;r++)_n(t.R,r)!=null&&js(g,_n(t.R,r));for(e=0;e<t.R.f;e++)v=_n(t.R,e)==null?0:1+$h(g,_n(t.R,e)),$e(t.e[e],e),_1(t.e[e],t.c,t.f[e]),_1(t.e[e],t.c,v);t.U=Wn(t)}if((t.Q&16)!=0&&t.U<t.R.f){for(e=0;e<t.R.f;e++)$e(t.e[e],e),_1(t.e[e],t.c,t.f[e]),_1(t.e[e],1,r0(t.R,e)?1:0);t.U=Wn(t)}(t.Q&512)!=0&&t.R.K&&xX(t)}function Ia(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m;if(e.j==1){if(t.t!=-1&&t.i.a.length!=0&&as(t,t.i.a),un(t.i,0),e.e){SR(t);return}if(e.b==1){if(e.c==2)return;t.W=!0,A9(t),$a(t,e)}}if(e.j==2){if(e.e){SR(t);return}e.b==1&&(t.W=!1,A9(t),va(t))}if(e.j==3&&e.b==1&&e.c==2){sa(t,e.g,e.i);return}if(e.j==4&&(Md(t._),A9(t)),e.j==6&&(t.W=!1,g=e.g,m=e.i,Wj(t,g,m,!1)&&n1(t.k),A9(t)),e.j==7){switch(t.W=!0,t.ib=e.g,t.lb=e.i,s=Wj(t,t.ib,t.lb,!0),t.X){case 2:Fa(t)&&(s=!0);break;case 1:(t.ib-t.hb)*(t.ib-t.hb)+(t.lb-t.kb)*(t.lb-t.kb)<100&&z5(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),n1(t.k);break;case 9:h_(t),t.X=4;case 4:if(t.I)for(r=new Wt(t.I);r.a<r.c.a.length;)P=t1(r),P.g&&P.Ob(t.ib,t.lb);for(f=0;f<t.V.q;f++)r0(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),n1(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),n1(t.k);break;case 7:for(y=!1,n=0;n<t.V.q&&!y;n++)y=r0(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(U=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,T=y||l,t.I&&(!T||l)){for(D=0;D<t.I.a.length;D++)(!T||N(t.I,D).g)&&N(t.I,D).Pb(U,A);t.eb=w.Math.max(t.eb,2),n1(t.k)}(!T||y)&&(Rk(t.V,U,A,T),t.eb=w.Math.max(t.eb,2),n1(t.k));break;case 5:case 6:if(c=null,t.X==5){if(w.Math.abs(t.ib-U7(t.R,t.R.a-1))<3&&w.Math.abs(t.lb-o7(t.R,t.R.a-1))<3)break;iq(t.R),Ce(t.R,t.ib,t.lb),Ce(t.R,t.hb,t.kb),c=t.R}else c=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=jJ(L,c),(!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=c.Hb(vt(kt(t.V,i)),vt(jt(t.V,i))),(!t.O||!t.P[i])&&Q!=r0(t.V,i)&&(dP(t.V,i,Q),t.eb=w.Math.max(t.eb,1));s=!0;break;case 8:s=!0}s&&n1(t.k)}}function xa(t,e,A,n){var P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p;if(U=B(d(yt,2),h0,15,0,[B(d(yt,1),wt,6,15,[20]),null,null,B(d(yt,1),wt,6,15,[0,10]),null,null,B(d(yt,1),wt,6,15,[-4,12]),B(d(yt,1),wt,6,15,[0,0,-7.5]),null,null,null,null,B(d(yt,1),wt,6,15,[8.571428571428571,-8.571428571428571]),null,null,null,B(d(yt,1),wt,6,15,[-2.4])]),L=B(d(F,2),D0,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=BZ(t,A,n,y),f==1?i+=m:f==2&&(D+=m),i>>>=1,D>>>=1;if(b=e.e.length-9,e.e.length>=9&&e.e.length<=25&&L[b]!=null)for(p=0;p<L[b].length;p++)for(g=(o1&L[b][p])==0,Q=It&L[b][p],T=!1;!T;T=!T){if(T){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=NC*(U[b]==null?0:U[b][p]),R=0,C=Q,c=!0,l=0;l<e.e.length;l++)c&&++R,(C&1)==0&&(c=!c),C>>>=1;for(S=R>(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:oU),Q>>>=1;return}(Q&1)!=0&&(Q|=m),Q>>>=1}}ea(e,i,D)}function Na(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c;for(U=o0(t.A,t.a),gt(V(U,1),0)?(uA(t.b,!0),Go(t.w,n4)):Go(t.w,UV),O8(t.D,MA(t.A,t.a)==null?\"\":Yh(t.A,t.a)),e=V(U,Ty),gt(V(e,ZQ),0)?_t(t.g,2):G(e,2)==0?_t(t.g,1):G(e,4)==0?_t(t.g,3):_t(t.g,0),y=V(U,120),G(y,112)==0?_t(t.s,1):G(y,96)==0?_t(t.s,2):G(y,8)==0?_t(t.s,3):G(y,104)==0?_t(t.s,4):G(y,88)==0?_t(t.s,5):G(y,56)==0?_t(t.s,6):_t(t.s,0),T=zt(q0(V(U,f9),22)),_t(t.t,T==0?0:T-2),s=V(U,rr),f=-1,i=0;i<ci.length;i++)if(P0(s,ci[i])){f=i;break}f!=-1?_t(t.r,f):(n=new Fn(\"Custom:\"),gt(V(s,L8),0)&&(n.a+=\" 0\"),gt(V(s,ir),0)&&(n.a+=\" 3\"),gt(V(s,fr),0)&&(n.a+=\" 4\"),gt(V(s,Dr),0)&&(n.a+=\" 5\"),gt(V(s,ur),0)&&(n.a+=\" 6\"),gt(V(s,Qr),0)&&(n.a+=\" 7\"),gt(V(s,pf),0)&&(n.a+=\" >=8\"),t.C=s,Gt(t.r,n.a),_t(t.r,ci.length)),D=V(U,si),G(D,_Q)==0?_t(t.n,1):G(D,d2)==0?_t(t.n,2):G(D,B2)==0?_t(t.n,3):G(D,$Q)==0?_t(t.n,4):G(D,qA)==0?_t(t.n,5):G(D,I0)==0?_t(t.n,6):G(D,yi)==0?_t(t.n,7):G(D,SP)==0?_t(t.n,8):G(D,Hf)==0?_t(t.n,9):G(D,3276800)==0?_t(t.n,10):G(D,2228224)==0?_t(t.n,11):G(D,2490368)==0?_t(t.n,12):_t(t.n,0),P=V(U,Vf),G(P,uy)==0?_t(t.j,1):G(P,Qy)==0?_t(t.j,2):G(P,Uy)==0?_t(t.j,3):G(P,oy)==0?_t(t.j,4):G(P,T6)==0?_t(t.j,5):G(P,h6)==0?_t(t.j,6):G(P,aQ)==0?_t(t.j,7):G(P,v2)==0?_t(t.j,8):G(P,Ly)==0?_t(t.j,9):G(P,sy)==0?_t(t.j,10):G(P,tU)==0?_t(t.j,11):G(P,c6)==0?_t(t.j,12):G(P,w6)==0?_t(t.j,13):G(P,g6)==0?_t(t.j,14):_t(t.j,0),A=V(U,i9),G(A,WQ)==0?_t(t.i,1):G(A,Mf)==0?_t(t.i,2):G(A,Cf)==0?_t(t.i,3):_t(t.i,0),r=V(U,rP),G(r,1792)==0?_t(t.k,1):G(r,1664)==0?_t(t.k,2):G(r,1408)==0?_t(t.k,3):G(r,128)==0?_t(t.k,4):G(r,384)==0?_t(t.k,5):G(r,896)==0?_t(t.k,6):G(r,1536)==0?_t(t.k,7):G(r,re)==0?_t(t.k,8):G(r,1152)==0?_t(t.k,9):_t(t.k,0),Q=V(U,Li),G(Q,98304)==0?_t(t.p,1):G(Q,81920)==0?_t(t.p,2):G(Q,49152)==0?_t(t.p,3):G(Q,Sn)==0?_t(t.p,4):_t(t.p,0),L=q0(V(U,F2),47),_t(t.o,zt(L)),gt(V(U,I1),0)&&uA(t.c,!0),gt(V(U,C0),0)&&uA(t.f,!0),c=V(U,m6),P0(c,KQ)?_t(t.u,1):P0(c,XQ)?_t(t.u,2):_t(t.u,0),gt(V(U,ge),0)&&uA(t.e,!0),gt(V(U,Pe),0)&&uA(t.d,!0),t.q&&(l=V(U,c8),G(l,cn)==0?_t(t.q,1):G(l,lU)==0?_t(t.q,2):G(l,c8)==0?_t(t.q,3):_t(t.q,0))}function Lp(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b;if(v=new L1,A=new L1,i=new L1,c=new c9,T=new c9,P=z(t.L,0,e),r=z(t.L,1,e),t.zb(e,Z1(t.R,kt(t.L,P)),X1(t.R,jt(t.L,P)),Z1(t.R,kt(t.L,r)),X1(t.R,jt(t.L,r))),!r0(t.L,P)&&!r0(t.L,r)&&gt(V(Y(o0(t.L,P),o0(t.L,r)),Pe),0)&&W1(t,-8),t.o[P]?(v.a=t.o[P].a,v.c=t.o[P].b):(v.a=Z1(t.R,kt(t.L,P)),v.c=X1(t.R,jt(t.L,P))),t.o[r]?(v.b=t.o[r].a,v.d=t.o[r].b):(v.b=Z1(t.R,kt(t.L,r)),v.d=X1(t.R,jt(t.L,r))),(ee(t.L,e)&y8)!=0){cA(t,v)&&t.rb(v),W1(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=Ae(t.L,m),y!=0)){for(s=VA(t.L,m),L=0,n=0;n<t.L.f;n++)Ae(t.L,n)==y&&VA(t.L,n)==s&&++L;L==1&&(D=1)}switch(D){case 1:cA(t,v)&&Hn(t,v,P,r);break;case 257:b5(t,v,P,r);break;case 129:for(R=v.b-v.a,b=v.d-v.c,vr(t.L,D1(t.L,P,r))?(Q=-3,U=-3):(Q=t.p[P],U=Xh(t,P),Q==ou(t.L,P)&&(Q=U)),l=2;l<17;l+=2)A.a=v.a+l*R/17-l*b/128,A.c=v.c+l*b/17+l*R/128,A.b=v.a+l*R/17+l*b/128,A.d=v.c+l*b/17-l*R/128,cA(t,A)&&(W1(t,l<9?Q:U),t.qb(A),W1(t,t.Q));break;case 16:cA(t,v)&&SZ(t,v,P,r)}break;case 0:case 2:if((t.s[P]||a1(t.L,P)==2)&&(t.s[r]||a1(t.L,r)==2)&&!fA(t.L,e)&&f==2){if(!cA(t,v))break;Qf(t,v.b-v.a,v.d-v.c,c),R=c.a/2,b=c.b/2,A.a=v.a+R,A.c=v.c+b,A.b=v.b+R,A.d=v.d+b,i.a=v.a-R,i.c=v.c-b,i.b=v.b-R,i.d=v.d-b,l1(t.L,e)==386&&iL(A,i),Hn(t,A,P,r),f==2?Hn(t,i,P,r):VQ(t,i,P,r)}else(t.s[r]||a1(t.L,r)==2)&&f==2?ip(t,v,e,!1):(t.s[P]||a1(t.L,P)==2)&&f==2?ip(t,v,e,!0):(g=O5(t.L,e),g==0&&(g=1),A.a=v.a,A.c=v.c,A.b=v.b,A.d=v.d,Qf(t,v.b-v.a,v.d-v.c,c),g>0?(i.a=v.a+c.a,i.c=v.c+c.b,i.b=v.b+c.a,i.d=v.d+c.b,(Di(t,P,r,1,T)||O(t.L,P)>1)&&(i.a+=T.a+c.b,i.c+=T.b-c.a),(Di(t,r,P,-1,T)||O(t.L,r)>1)&&(i.b+=T.a-c.b,i.d+=T.b+c.a)):(i.a=v.a-c.a,i.c=v.c-c.b,i.b=v.b-c.a,i.d=v.d-c.b,(Di(t,P,r,-1,T)||O(t.L,P)>1)&&(i.a+=T.a+c.b,i.c+=T.b-c.a),(Di(t,r,P,1,T)||O(t.L,r)>1)&&(i.b+=T.a-c.b,i.d+=T.b+c.a)),l1(t.L,e)==386&&iL(A,i),cA(t,A)&&Hn(t,A,P,r),f==2?cA(t,i)&&Hn(t,i,P,r):cA(t,i)&&VQ(t,i,P,r));break;case 3:cA(t,v)&&(Hn(t,v,P,r),Qf(t,v.b-v.a,v.d-v.c,c),W8(t,v,P,r,c.a,c.b,A),W8(t,v,P,r,-c.a,-c.b,A));break;case 4:cA(t,v)&&(Qf(t,v.b-v.a,v.d-v.c,c),W8(t,v,P,r,1.5*c.a,1.5*c.b,A),W8(t,v,P,r,.5*c.a,.5*c.b,A),W8(t,v,P,r,-.5*c.a,-.5*c.b,A),W8(t,v,P,r,-1.5*c.a,-1.5*c.b,A));break;case 5:cA(t,v)&&(Hn(t,v,P,r),Qf(t,v.b-v.a,v.d-v.c,c),W8(t,v,P,r,2*c.a,2*c.b,A),W8(t,v,P,r,c.a,c.b,A),W8(t,v,P,r,-c.a,-c.b,A),W8(t,v,P,r,-2*c.a,-2*c.b,A))}t.C==-8&&W1(t,-9)}function Oa(t,e,A,n,P,r){var i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E,X,tt,W,$,et,lt,st,ct,Pt,Tt,Kt,Ct,$t,Ut,Ht,Qt,Nt,b1,e1,Rt,Lt,j1,St,g1,y0,F1;if(E=e.i,X=e.j,C=e.f,S=e.g,!n[E]&&!n[X])for(st=C.c.length>S.c.length?C:S,ct=C.c.length>S.c.length?E:X,n[ct]=!0,x=P==null?0:P[ct],et=0;et<st.d.length;et++)D=st.e[st.d[et]],yD(t,D,J0(st.b[x],st.d[et]));if(n[E]?(a=X,j=S,s=e.b?1:0):(a=E,j=C,s=e.b?0:1),L=e.a,Ht=z(t.o,s,L),Ct=z(t.o,1-s,L),p=P==null?0:P[a],R=j.f[Ht],v=j.f[Ct],tt=J0(j.b[p],j.d[R]),Ut=t.k[Ht],W=ti(z8(tt,J0(j.b[p],j.d[v]))),F1=ti(z8(Ut,t.k[Ct])),i=ob(W,F1),b=h(E2,b2,29,j.d.length,0,1),i<.0010000000474974513)for(et=0;et<j.d.length;et++)D=j.e[j.d[et]],D!=Ht&&D!=Ct&&(b[et]=i>bA?z8(tt,J0(j.b[p],j.d[et])):z8(J0(j.b[p],j.d[et]),tt));else for(i<3.1405926535422957?Qt=new xe(F1.b*W.c-F1.c*W.b,-(F1.a*W.c-F1.c*W.a),F1.a*W.b-F1.b*W.a):w.Math.abs(F1.a)>=w.Math.abs(F1.b)&&w.Math.abs(F1.a)>=w.Math.abs(F1.c)?Qt=new xe(-(F1.b+F1.c)/F1.a,1,1):w.Math.abs(F1.b)>=w.Math.abs(F1.a)&&w.Math.abs(F1.b)>=w.Math.abs(F1.c)?Qt=new xe(1,-(F1.a+F1.c)/F1.b,1):Qt=new xe(1,1,-(F1.a+F1.b)/F1.c),Pt=o2(ti(Qt),i),et=0;et<j.d.length;et++)D=j.e[j.d[et]],D!=Ht&&D!=Ct&&(b[et]=lQ(z8(J0(j.b[p],j.d[et]),tt),Pt));for(n[a]=!0,lt=0;lt<O(t.o,Ht);lt++)T=_(t.o,Ht,lt),T!=Ct&&(m=j.f[T],eq(t,T,new xe(b[m].a+Ut.a,b[m].b+Ut.b,b[m].c+Ut.c)));for(Nt=lL(t,e.p),c=-1,Q=0,U=0,Rt=0;Rt<t.i[A].length;Rt++){for(c=t.i[A][Rt],Pt=o2(F1,Q1*c/180-Nt),et=0;et<j.d.length;et++)D=j.e[j.d[et]],D!=Ht&&D!=Ct&&(yD(t,D,b[et]),Hr(lQ(t.k[D],Pt),Ut));if(y=q5(t,e),y0=y,j1=0,y<N6)$t=y/w4,t.e[A][Rt]=t.d[A][Rt]*(1-$t*$t);else{for(l=t.i[A][Rt],g1=Ve,Tt=0;Tt<2;Tt++)if(c=r[Rt][Tt],c!=l){for(Pt=o2(F1,Q1*c/180-Nt),$=0;$<j.d.length;$++)D=j.e[j.d[$]],D!=Ht&&D!=Ct&&(yD(t,D,b[$]),Hr(lQ(t.k[D],Pt),Ut));Kt=q5(t,e),Kt<y*xf&&Kt<g1&&(t.i[A][Rt]=r[Rt][Tt],$t=Kt/.16000000476837162,t.e[A][Rt]=t.d[A][Rt]*(1-$t*$t),y0=Kt,j1=Tt+1,g1=Kt)}g1==Ve&&y<w4&&($t=y/w4,t.e[A][Rt]=t.d[A][Rt]*(1-$t*$t))}t.e[A][t.a[A]]<t.e[A][Rt]&&(t.a[A]=Rt,Q=j1,U=y0)}for(St=0,Lt=0;Lt<t.i[A].length;Lt++)t.e[A][Lt]>0&&(St+=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,b1=1;b1<=4;b1++){for(c=t.i[A][t.a[A]]+f*b1<<16>>16,Pt=o2(F1,Q1*c/180-Nt),$=0;$<j.d.length;$++)D=j.e[j.d[$]],D!=Ht&&D!=Ct&&(yD(t,D,b[$]),Hr(lQ(t.k[D],Pt),Ut));if(g=q5(t,e),U-g<.05)break;t.i[A][t.a[A]]=c}else for(e1=0;e1<t.i[A].length;e1++)t.e[A][e1]/=St;if(c!=t.i[A][t.a[A]])for(Pt=o2(F1,Q1*t.i[A][t.a[A]]/180-Nt),$=0;$<j.d.length;$++)D=j.e[j.d[$]],D!=Ht&&D!=Ct&&(yD(t,D,b[$]),Hr(lQ(t.k[D],Pt),Ut));zm(t,L,t.i[A][t.a[A]])}function sp(){sp=B1,k4=B(d(yt,1),wt,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,vy,vy,283.17,285.18,Fy,Fy,293.2,my,my,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]),m4=B(d(yt,1),wt,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,vy,vy,283.17,285.18,Fy,Fy,291.2,my,my,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]),S2=B(d(F,1),k,6,15,[6,1,7,8])}function Ga(t,e,A,n){var P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E,X,tt,W,$,et,lt,st,ct,Pt,Tt,Kt,Ct,$t,Ut,Ht,Qt,Nt,b1,e1,Rt,Lt,j1,St,g1,y0,F1,s1,T0,G0,OA,b0,d1,fe,Ke,gA;for(X=0,Q=0,lt=0,Nt=h(rt,ft,6,e.q,16,1),Lt=h(rt,ft,6,e.q,16,1),Rt=h(rt,ft,6,e.q,16,1),r=0;r<e.q;r++)A[r]==n&&(Rt[r]=!0,Nt[r]=!0,++Q,++X);for(i=0;i<e.q;i++)if(Rt[i])for(Ct=0;Ct<e.j[i];Ct++)C=e.i[i][Ct],Nt[C]||(Nt[C]=!0,++Q,++lt);for(f=0;f<e.q;f++)if(Nt[f]&&!Rt[f]&&!Lt[f])for(Ct=0;Ct<e.e[f];Ct++)C=e.i[f][Ct],Nt[C]||(Lt[C]=!0,Nt[C]=!0,++Q);for(y=0,s=0;s<e.r;s++)Nt[e.D[0][s]]&&Nt[e.D[1][s]]&&++y;for(ct=new zA(Q,y),ui(e,ct,Nt,!1,null),je(ct,!0),tt=h(F,k,6,X,15,1),Tt=h(F,k,6,Q,15,1),st=h(F,k,6,X+lt,15,1),T0=h(F,k,6,e.q,15,1),E=0,Pt=0,et=0,D=0;D<e.q;D++)Nt[D]&&(EP(e,D,!0)&&T1(ct,Pt,Ur,!0),Rt[D]||(ct.u[Pt]|=I0),(Rt[D]||!Lt[D])&&(st[et]=Pt,T0[D]=et,++et),Rt[D]&&(tt[E]=Pt,++E),Tt[Pt]=D,ct.C[Pt]==1&&(ct.A[Pt]=2,ct.T&=ct.C[Pt]==1?0:7),++Pt);if(j=null,g1=null,c=null,St=null,e1=!1,fe=!!t.a&&Dx(t.a)&&Q<=32,fe){for(c=new EA(ct,512),P=0;P<ct.f;P++)if(c.db[P]==3){fe=!1;break}for(L=0;L<ct.g;L++)if(c.o[L]==3){fe=!1;break}fe&&Z5(c)}if(t.a&&!fe&&++t.a.d,ct.T|=8,fe&&(e1=uj(c),St=me(c),T=ZB(t.a,St),T)){for(Kt=(Ui(c),c.H),j=new f1,p=T.a,x=0,a=p.length;x<a;++x){for(S=p[x],j1=0;j1<ct.q;j1++)l=S[Kt[j1]],Be(ct,j1,l.a),Ie(ct,j1,l.b),hP(ct,j1,e1?-l.c:l.c);mt(j,new mu(ct))}g1=T.c}if(!j){for(b0=new NQ(ct),$U(b0,t.d),d5(b0,t.c,16),j=new f1,U=BQ(b0),j.a.push(U),b=BQ(b0);b;)j.a.push(b),b=BQ(b0);for(s1=Ve,v=new Wt(j);v.a<v.c.a.length;)g=t1(v),s1=w.Math.min(s1,g.e);for(d1=2*s1,$t=j.a.length-1;$t>=0;$t--)(ve($t,j.a.length),j.a[$t]).e>d1&&LA(j,$t);for(g1=h(yt,wt,6,j.a.length,15,1),y0=0,b1=0,Ut=0;Ut<j.a.length;Ut++)g=(ve(Ut,j.a.length),j.a[Ut]),g1[Ut]=w.Math.pow(10,(s1-g.e)/13.600000000000001),y0+=g1[Ut];for(Ht=0;Ht<j.a.length;Ht++)g1[Ht]/=y0;if(t.b){for(Ke=0,F1=Ve,R=new Wt(j);R.a<R.c.a.length;)g=t1(R),W=xY(es(g,g.o)),g.n=W,isNaN(W)||(F1=w.Math.min(F1,W),++Ke),Zx(g,ct);for($=F1+2.72,m=new Wt(j);m.a<m.c.a.length;)g=t1(m),!isNaN(g.n)&&g.n>$&&(g.n=NaN,--Ke);if(Ke!=0){for(G0=h(yt,wt,6,Ke,15,1),OA=0,b1=0,Qt=j.a.length-1;Qt>=0;Qt--)g=(ve(Qt,j.a.length),j.a[Qt]),isNaN(g.n)?LA(j,Qt):(G0[b1]=w.Math.pow(10,(F1-g.n)/1.36),OA+=G0[b1],++b1);for(g1=h(yt,wt,6,Ke,15,1),Ct=0;Ct<Ke;Ct++)g1[Ct]=G0[Ct]/OA}}if(fe){for(Kt=(Ui(c),c.H),S=R1(E2,[nA,b2],[128,29],0,[j.a.length,Kt.length],2),Ct=0;Ct<S.length;Ct++)for(j1=0;j1<Kt.length;j1++)gA=J0((ve(Ct,j.a.length),j.a[Ct]),j1),S[Ct][Kt[j1]]=new xe(gA.a,gA.b,e1?-gA.c:gA.c);$B(t.a,St,new Qg(S,g1))}}return new Nv(tt,Tt,st,T0,ff(j,h(YE,mV,96,0,0,1)),g1)}function yp(t,e){Ms();var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E,X,tt,W;switch(C=xt(t,e),tt=t.J[e].a,W=t.J[e].b,C){case 1:{if(p=t.j[e],p==0?(U=HL(t,!0),y=0):(U=tt-kt(t,t.i[e][0]),y=W-jt(t,t.i[e][0])),p==1)v=W0(t,tt+q4*U+O4*y,W-O4*U+q4*y,0);else if(p==2)U=tt-.5*(kt(t,t.i[e][0])+kt(t,t.i[e][1])),y=W-.5*(jt(t,t.i[e][0])+jt(t,t.i[e][1])),v=W0(t,tt+U,W+y,0);else if(p==3){for(a=t.i[e][0],g=1;g<3;g++)f=t.k[e][g],(t.H[f]==129||t.H[f]==257)&&(a=t.i[e][g]);if(A=w.Math.abs(Je(kA(t.J[e].a,t.J[e].b,kt(t,t.i[e][0]),jt(t,t.i[e][0])),kA(t.J[e].a,t.J[e].b,kt(t,t.i[e][1]),jt(t,t.i[e][1])))),n=w.Math.abs(Je(kA(t.J[e].a,t.J[e].b,kt(t,t.i[e][0]),jt(t,t.i[e][0])),kA(t.J[e].a,t.J[e].b,kt(t,t.i[e][2]),jt(t,t.i[e][2])))),P=w.Math.abs(Je(kA(t.J[e].a,t.J[e].b,kt(t,t.i[e][1]),jt(t,t.i[e][1])),kA(t.J[e].a,t.J[e].b,kt(t,t.i[e][2]),jt(t,t.i[e][2])))),x=!0,A>n&&A>P?n+P<Q1&&(x=!1,U=tt-.5*(kt(t,t.i[e][0])+kt(t,t.i[e][1])),y=W-.5*(jt(t,t.i[e][0])+jt(t,t.i[e][1]))):n>A&&n>P?A+P<Q1&&(x=!1,U=tt-.5*(kt(t,t.i[e][0])+kt(t,t.i[e][2])),y=W-.5*(jt(t,t.i[e][0])+jt(t,t.i[e][2]))):A+n<Q1&&(x=!1,U=tt-.5*(kt(t,t.i[e][1])+kt(t,t.i[e][2])),y=W-.5*(jt(t,t.i[e][1])+jt(t,t.i[e][2]))),x){for(E=t.i[e][0],Q=Ve,c=0;c<3;c++)r=t.i[e][c],r!=a&&(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&&(E=r,Q=D,x1()));v=W0(t,(t.J[a].a+t.J[E].a)/2,(t.J[a].b+t.J[E].b)/2,0)}else v=W0(t,tt+U,W+y,0)}else v=W0(t,tt+U,W+y,0);K0(t,v,1),O0(t,e,v,1)}break;case 2:if(S=t.j[e],S==1)U=tt-kt(t,t.i[e][0]),y=W-jt(t,t.i[e][0]),v=W0(t,tt+(vU*U-FU*y)*.7,W+(FU*U+vU*y)*.7,0),K0(t,v,1),O0(t,e,v,1),v=W0(t,tt+(E4*U-x4*y)*.7,W+(x4*U+E4*y)*.7,0),K0(t,v,1),O0(t,e,v,1);else if(S==2)L=tt-kt(t,t.i[e][0]),l=W-jt(t,t.i[e][0]),s=tt-kt(t,t.i[e][1]),T=W-jt(t,t.i[e][1]),b=w.Math.sqrt(L*L+l*l)*.7,j=w.Math.sqrt(s*s+T*T)*.7,U=L+s,y=l+T,R=w.Math.sqrt(U*U+y*y),i=(b+j)/2,U=U/R*i,y=y/R*i,X=pQ(t,e),v=W0(t,tt+V4*U-I4*y,W+I4*U+V4*y,0),K0(t,v,1),X>-1?O0(t,e,v,1):O0(t,e,v,257),v=W0(t,tt+S4*U-N4*y,W+N4*U+S4*y,0),K0(t,v,1),O0(t,e,v,1);else for(m=0;m<C;m++)v=W0(t,tt,W,0),K0(t,v,1),O0(t,e,v,1);break;case 3:t.i[e][0]>0?(U=(tt-kt(t,t.i[e][0]))*.7,y=(W-jt(t,t.i[e][0]))*.7,v=W0(t,tt+U,W+y,0),K0(t,v,1),O0(t,e,v,1),v=W0(t,tt-y,W+U,0),K0(t,v,1),O0(t,e,v,1),v=W0(t,tt+y,W-U,0),K0(t,v,1),O0(t,e,v,1)):(U=HL(t,!0),y=HL(t,!0),v=W0(t,tt+U,W+y,0),K0(t,v,1),O0(t,e,v,1),v=W0(t,tt-y*vU,W+U*FU,0),K0(t,v,1),O0(t,e,v,1),v=W0(t,tt-y*vU,W-U*FU,0),K0(t,v,1),O0(t,e,v,1));break;default:{for(m=0;m<C;m++)v=W0(t,tt,W,0),K0(t,v,1),O0(t,e,v,1);break}}}function Ja(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E,X,tt,W,$,et,lt,st,ct,Pt,Tt;if((t.fb!=VD(t.k)||t.N!=Vr(t.k))&&(t.fb=VD(t.k),t.N=Vr(t.k),t.eb<3&&(t.eb=3)),P=UT(e),f=DB(e),ae(e,P),RT(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 KD,mT(A,y-r,l,y+r,l),A.j=!0,mt(t.I,A)),U=!1,t.eb!=0){switch((t.U&1)!=0&&t.eb!=5&&Bm(t),t.G=(t.U&4)!=0?new rR(new Bh(t.L,t.Y),t.I):(t.U&2)!=0?new pB(t.L,t.Y,t.I):(t.U&1)!=0?new Xd(t.L,t.I):new Wv(t.V,t.I),PY(t.G,f,P),CS(t.G,t.T),HS(t.G,(t.U&1)==0?0:(L=Ky,L.startsWith(Xy)||L.startsWith(Zy)||L.startsWith(Wy)?y5(P,QU):(_r(),P&qn|vt(w.Math.round(QU*((P&iP)>>16)))<<16|vt(w.Math.round(QU*((P&PP)>>8)))<<8|vt(w.Math.round(QU*(P&255)))))),YO(t.G,t.$),MS(t.G,t.H|8|(t.w==19?80:0)),t.eb){case 6:case 4:case 5:UJ(t,e);break;case 3:b=j5(t.G,e,new QA(0,0,t.fb,t.N),0),b&&(t.U&1)!=0&&I3(b,t.V);break;case 2:j=Uj(t.G,e,new QA(0,0,t.fb,t.N),0),U=!!j&&!(j.c==1&&j.a==0&&j.b==0)}t.eb=0}switch(t.G&&t_(t.G,e),U||JK(t,e),t.G&&(zY(t.G,e),fG(t.G,e)),t.t!=-1&&t.i.a.length!=0&&(p=vt(kt(t.V,t.t)),W=vt(jt(t.V,t.t)),c=t.i.a,C=NG(t,c),ae(e,C==1?f:C==2?-16776961:Dy),C==1?c=(Y1(),X0)[SA(c,t.c)]:C==2&&(c=UA(t.j,0,c.length)),i=3*(Pt=e.Jc(),Pt.getFontSize())/2|0,eL(e,i,!1,!1),cT(e,p,W,c),C==4&&(ae(e,qP),jT(e,p+GL(e,c).b/2,W+i,\"<unknown>\")),C==2&&(ae(e,Dy),cT(e,p+GL(e,c).b,W,HD(t.j,c.length)))),ae(e,f),t.X){case 1:switch(x=vt(t.hb),$=vt(t.kb),t.t==-1||t.t==t.e?(a=vt(t.ib),et=vt(t.lb)):(a=vt(kt(t.V,t.t)),et=vt(jt(t.V,t.t))),t.w){case 5:xr(e,x,$,a,et);break;case 6:E=($-et)/9|0,lt=(a-x)/9|0,T=new YD(3),Ce(T,x,$),Ce(T,a+E,et+lt),Ce(T,a-E,et-lt),Yo(e,new rD(T));break;case 23:for(E=a-x,lt=et-$,Q=2;Q<17;Q+=2)X=x+(Q*E/17|0)-(Q*lt/128|0),st=$+(Q*lt/17|0)+(Q*E/128|0),tt=x+(Q*E/17|0)+(Q*lt/128|0),ct=$+(Q*lt/17|0)-(Q*E/128|0),xr(e,X,st,tt,ct)}break;case 2:if(t.q>0&&xr(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++)xr(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=ID(e),v!=0?v:Yy),n5(m,(s=Ky,s.startsWith(Xy)||s.startsWith(Zy)||s.startsWith(Wy)?yV:lV)))),Hx(e,new rD(t.R)),ae(e,f);break;case 6:p=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,(R=(g=ID(e),g!=0?g:Yy),n5(R,(L=Ky,L.startsWith(Xy)||L.startsWith(Zy)||L.startsWith(Wy)?yV:lV)))),Tt=e.Jc(),Tt.drawRectangle(p,W,S,D),ae(e,f);break;case 8:x=vt(t.hb),$=vt(t.kb),t.t==-1||t.t==t.e?(a=vt(t.ib),et=vt(t.lb)):(a=vt(kt(t.V,t.t)),et=vt(jt(t.V,t.t))),ae(e,(n=UT(e),Gs(-8388608,n))),xr(e,x,$,a,et),ae(e,f)}}function lp(t,e,A){var n,P,r,i,f,D;for(r=0,YA(t.b)?(r=Y(r,1),Tf(t.A,e,A,!0)):Tf(t.A,e,A,!1),B0(t.g)==2?gI(t.A,e)||(r=Y(r,p6)):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(o0(t.A,_(t.A,e,P)),Pe),0)&&fA(t.A,Ot(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,M1(B0(t.t)+2,22))),D=B0(t.r),D==ci.length?r=Y(r,t.C):D!=0&&(r=Y(r,ci[D])),B0(t.i)){case 1:r=Y(r,WQ);break;case 2:r=Y(r,Mf);break;case 3:r=Y(r,Cf)}switch(i=uI(t.A,e),B0(t.n)){case 1:i==1?r=Y(r,I1):i<1&&(r=Y(r,_Q));break;case 2:i==2?r=Y(r,I1):i<2&&(r=Y(r,d2));break;case 3:i==3?r=Y(r,I1):i<3&&(r=Y(r,B2));break;case 4:i==2?r=Y(r,I1):i<2&&(r=Y(r,$Q));break;case 5:i==3?r=Y(r,I1):i<3&&(r=Y(r,qA));break;case 6:i==0&&(r=Y(r,C0));break;case 7:i==1?r=Y(r,C0):i<1&&(r=Y(r,yi));break;case 8:i==2?r=Y(r,C0):i<2&&(r=Y(r,SP));break;case 9:i==3?r=Y(r,C0):i<3&&(r=Y(r,Hf));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,qA);break;case 12:i<=1?r=Y(r,1099513856e3):i<=3&&(r=Y(r,qA))}switch(n=eh(t.A,e),B0(t.j)){case 1:n==0&&(r=Y(r,uy));break;case 2:n<=1&&(r=Y(r,Qy));break;case 3:n<=2&&(r=Y(r,Uy));break;case 4:n<=3&&(r=Y(r,oy));break;case 5:n<2&&(r=Y(r,T6));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,v2));break;case 9:n<2&&(r=Y(r,Ly));break;case 10:n<3&&(r=Y(r,sy));break;case 11:n<4&&(r=Y(r,tU));break;case 12:n<2&&(r=Y(r,c6));break;case 13:n<3&&(r=Y(r,w6));break;case 14:n<3&&(r=Y(r,g6))}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,M1(B0(t.o),47))),YA(t.c)&&(Zi(t.A,e)>0||p1(t.A,e)==0&&(K(t.A,e)==5||yT(t.A,e)||VT(t.A,e)))&&(r=Y(r,I1)),YA(t.f)&&(Zi(t.A,e)>0||p1(t.A,e)==0&&(K(t.A,e)==5||yT(t.A,e)||VT(t.A,e)))&&(r=Y(r,C0)),B0(t.u)){case 1:r=Y(r,KQ);break;case 2:r=Y(r,XQ)}if(YA(t.e)&&(r=Y(r,ge)),YA(t.d)&&(r=Y(r,Pe)),t.q)switch(B0(t.q)){case 1:r=Y(r,cn);break;case 2:r=Y(r,lU);break;case 3:r=Y(r,c8)}T1(t.A,e,-1,!1),T1(t.A,e,r,!0)}function za(t,e,A,n,P,r){var i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E,X,tt,W,$,et;for(U=e.a[A],L=e.a[n],s=e.a[P],y=e.a[r],W=CX(t.a,e,A,n,P,r),$=W>10?W/10|0:W,et=W>10?W-$*10:0,S=-1,p=0,C=0,x=0,b=$,X=5;(p<X&&(S==-1||X==4)||p==4&&$==5&&et>0)&&(X==5&&p==4&&(X=4,p=0,b=et),p==1?(C=1,x=3):p==2?(C=3,x=1):(C=p,x=p),g=t.a.g.a[U-1][w.Math.min(C+1,4)],m=L,v=s,R=t.a.g.a[y-1][w.Math.min(x+1,4)],m>v?(v=(E=k1(m),k1(m=v),E).a,R=(a=k1(g),k1(g=R),a).a):m==v&&g>R&&(R=(a=k1(g),k1(g=R),a).a),S=_9(B(d(F,1),k,6,15,[2,3,1,4,0]),B(d(F,1),k,6,15,[m,v,g,R,b]),t),!(S!=-1&&X==4));)++p;if(S>=0)return new qv(t,S);for(c=D1(e,n,P),f=B(d(yt,1),wt,6,15,[0,0]),D=B(d(yt,1),wt,6,15,[0,0]),Q=B(d(yt,1),wt,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 zD(t.a.b,L)||zD(t.a.b,s)?new Gn(0,0):rL(t.a.b,L)&&rL(t.a.b,s)&&c<e.g&&Re(e.p,c)?(T=e8(t.a.b,L)==3&&e8(t.a.b,s)==4||e8(t.a.b,L)==4&&e8(t.a.b,s)==3?3:6,tt=Ir(t.a.b,L)==0&&Ir(t.a.b,s)==0?.5:.3,new Gn(T*tt*w.Math.sqrt(f[0]*f[1]),0)):dt(e,c)==2?(tt=HA(t.a.b,L)==2&&HA(t.a.b,s)==2?1:.4,new Gn(6*tt*w.Math.sqrt(f[0]*f[1]),0)):mn(t.a.b,L)==4&&mn(t.a.b,s)==4?new Gn(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&&(e8(t.a.b,s)==4||e8(t.a.b,s)==34||HA(t.a.b,s)>0)||mn(t.a.b,s)==2&&(e8(t.a.b,s)==3||HA(t.a.b,s)>0)?new Ro:new Gn(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&&(e8(t.a.b,L)==4||e8(t.a.b,L)==34||HA(t.a.b,L)>0)||mn(t.a.b,L)==2&&(e8(t.a.b,L)==3||HA(t.a.b,L)>0)?new Ro:new Gn(0,w.Math.sqrt(D[0]*D[1])/i):dt(e,c)==1&&HA(t.a.b,L)>0&&HA(t.a.b,s)>0||HA(t.a.b,L)>0&&Ir(t.a.b,s)>0||Ir(t.a.b,L)>0&&HA(t.a.b,s)>0?Ir(t.a.b,L)>0&&Ir(t.a.b,s)>0?new Ro:Ir(t.a.b,L)>0&&HA(t.a.b,s)>0?(tt=0,HA(t.a.b,L)==1?tt=.5:an(l[0])==2&&an(l[1])==2?tt=.3:(an(l[0])!=2||an(l[1])!=2)&&(tt=.15),new Gn(6*tt*w.Math.sqrt(f[0]*f[1]),0)):Ir(t.a.b,s)>0&&HA(t.a.b,L)>0?(tt=0,HA(t.a.b,s)==1?tt=.5:an(l[0])==2&&an(l[1])==2?tt=.3:(an(l[0])!=2||an(l[1])!=2)&&(tt=.15),new Gn(6*tt*w.Math.sqrt(f[0]*f[1]),0)):(HA(t.a.b,L)==1||HA(t.a.b,s)==1)&&(l[0]!=6||l[1]!=6)?new Gn(2.4000000000000004*w.Math.sqrt(f[0]*f[1]),0):new Gn(.8999999999999999*w.Math.sqrt(f[0]*f[1]),0):(l[0]==8||l[0]==16)&&(l[1]==8||l[1]==16)?new Gn(-w.Math.sqrt(Q[0]*Q[1]),0):new Gn(0,w.Math.sqrt(D[0]*D[1])/i)}function Ya(t,e){var A,n,P,r,i,f,D,Q,U,L;if(!t.W){if(Q=e.b,e.j==1)if(Q==-3)t.Z=!0,A9(t);else if(Q==-2)t.d=!0,A9(t);else if(Q==-1)A9(t);else if(e.a)Q==122?(Dv(t),t.eb=w.Math.max(t.eb,2),n1(t.k),N1(t,new q1(t,1,!0))):Q==99?p5(t,!0):Q==118&&((t.U&4)!=0&&t.r&&wv(),Lv(t));else if(Q==-4)t.w!=19&&(z1(t),oZ(t)||nQ(t.V)&&(t.eb=w.Math.max(t.eb,1),n1(t.k),N1(t,new q1(t,1,!0))));else if(Q==-6||t.t==-1&&Q==63){hT(t._,LV,sV);return}else if(Q==-8)t.i.a.length!=0&&(as(t,t.i.a),un(t.i,0));else if(t.u!=-1)Q==113&&t.V.K?Qv(t,t.u):Q==118?GQ(t.V,t.u,3,!1,Pn(t.V,24*t.ab))&&(t.eb=w.Math.max(t.eb,3),n1(t.k),N1(t,new q1(t,1,!0))):Q>=52&&Q<=55?GQ(t.V,t.u,Q-48,!1,Pn(t.V,24*t.ab))&&(t.eb=w.Math.max(t.eb,3),n1(t.k),N1(t,new q1(t,1,!0))):Q==97||Q==98?GQ(t.V,t.u,6,!0,Pn(t.V,24*t.ab))&&(t.eb=w.Math.max(t.eb,3),n1(t.k),N1(t,new q1(t,1,!0))):(P=Q==48?(z1(t),Q8(t.V,t.u,16)):Q==49?(z1(t),Q8(t.V,t.u,1)):Q==50?(z1(t),Q8(t.V,t.u,2)):Q==51?(z1(t),Q8(t.V,t.u,4)):Q==117?(z1(t),Q8(t.V,t.u,257)):Q==100?(z1(t),Q8(t.V,t.u,129)):Q==99?(z1(t),Q8(t.V,t.u,386)):Q==109&&(z1(t),Q8(t.V,t.u,16)),P&&(t.eb=w.Math.max(t.eb,1),n1(t.k),N1(t,new q1(t,1,!0))));else if(t.t!=-1)if(D=t.i.a.length==0,D?t.K=Q:(t.K==108&&(un(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),n1(t.k);else if(D&&(Q==43||Q==45))z1(t),oh(t.V,t.t,Q==43)&&(t.eb=w.Math.max(t.eb,3),n1(t.k),N1(t,new q1(t,1,!0)));else if(D&&Q==46)z1(t),L=FA(t.V,t.t)==32?0:32,Ne(t.V,t.t,L),t.eb=w.Math.max(t.eb,3),n1(t.k),N1(t,new q1(t,1,!0));else if(D&&Q==58)z1(t),L=FA(t.V,t.t)==48?16:FA(t.V,t.t)==16?0:48,Ne(t.V,t.t,L),t.eb=w.Math.max(t.eb,3),n1(t.k),N1(t,new q1(t,1,!0));else if(D&&Q==113&&t.V.K)nF(t,t.t);else if(D&&t.V.K&&(Q==120||Q==88))U=B(d(F,1),k,6,15,[9,17,35,53]),sh(t.V,t.t,U),t.eb=w.Math.max(t.eb,3),n1(t.k),N1(t,new q1(t,1,!0));else if(D&&Q==63)z1(t),Bf(t.V,t.t,0,0,-1,0)&&(t.eb=w.Math.max(t.eb,3),n1(t.k),N1(t,new q1(t,1,!0)));else if(D&&Q>48&&Q<=57){if(Zi(t.V,t.t)>0){for(z1(t),r=Q-47,A=t.t,i=t.V.q-t.V.f,f=1;f<r&&(z5(t,A),n=W0(t.V,t.ib,t.lb,0),n!=-1);f++)tL(t.V,A,n),A=n-i,ut(t.V,1);t.eb=w.Math.max(t.eb,3),n1(t.k),N1(t,new q1(t,1,!0))}}else!D&&Q==-7?(un(t.i,0),t.eb=w.Math.max(t.eb,1),n1(t.k)):!D&&Q==-5?(un(t.i,t.i.a.length-1),t.eb=w.Math.max(t.eb,1),n1(t.k)):Q>=65&&Q<=90||Q>=97&&Q<=122||Q>=48&&Q<=57||Q==45?(Oe(t.i,Q&w1),t.eb=w.Math.max(t.eb,1),n1(t.k)):(Q==10||Q==13)&&as(t,t.i.a);else Q==104||Q==118?(t.U&7)==0&&v5(t,Q==104):t.db&&Y5(t.db,e);e.j==2&&(Q==-3?(t.Z=!1,A9(t)):Q==-2?(t.d=!1,A9(t)):Q==-1?A9(t):t.db&&Y5(t.db,e))}}function Ka(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E,X,tt,W,$,et,lt;for(n=0;n<t.f.f;n++)if(Mt(t.f,n)>4){for(s=new MP(t.f,1+Mt(t.f,n),!1),s.a[Mt(t.f,n)]=0,s.b[Mt(t.f,n)]=0,s.k[Mt(t.f,n)]=32,s.e[Mt(t.f,n)]=n,t.b[n]=!0,l=0;l<Mt(t.f,n);l++)Q=_(t.f,n,l),s.a[l]=w.Math.sin(AA*l-p2),s.b[l]=w.Math.cos(AA*l-p2),s.k[l]=32,s.e[l]=Q,t.b[Q]=!0,t.c[Ot(t.f,n,l)]=!0;pP(t.d,s)}for(tt=On(t.f),X=0;X<tt.j.a.length;X++){if(W=N(tt.k,X).length,a=N(tt.j,X),$=!1,(t.e&12)!=0){for($=!0,l=0;l<W;l++)if(!z0(t.f,a[l])){$=!1;break}}if(!$){for(g=!1,T=0;T<W;T++)if(M9(t.f,a[T])==W){g=!0;break}if(g)for(E=N(tt.k,X),Qk(t,a,E),l=0;l<W;l++)t.b[a[l]]=!0,t.c[E[l]]=!0}}for(f=0;f<t.f.g;f++)if(fA(t.f,f)&&!t.c[f])for(lt=L_(t,f),a=lt.a,E=lt.b,Qk(t,a,E),l=0;l<lt.a.length;l++)t.b[a[l]]=!0,t.c[E[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=Mt(t.f,P)+Mt(t.f,r),j>2)){for(s=new MP(t.f,j,!1),U=0,T=0;T<Mt(t.f,P);T++)Q=_(t.f,P,T),Q!=r&&(s.e[U++]=Q,t.b[Q]=!0,t.c[Ot(t.f,P,T)]=!0);for(s.e[U++]=P,s.e[U++]=r,c=0;c<Mt(t.f,r);c++)Q=_(t.f,r,c),Q!=P&&(s.e[U++]=Q,t.b[Q]=!0,t.c[Ot(t.f,r,c)]=!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=h(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),a1(t.f,e[0])==1&&a1(t.f,e[1])==2&&Mt(t.f,e[1])==2){t.b[e[0]]=!0,t.b[e[1]]=!0,t.c[i]=!0,b=1;do{if(C=_(t.f,e[b],0)==e[b-1]?1:0,e[b+1]=_(t.f,e[b],C),a1(t.f,e[b+1])==2&&Mt(t.f,e[b+1])>2)break;t.b[e[b+1]]=!0,t.c[Ot(t.f,e[b],C)]=!0,++b}while(a1(t.f,e[b])==2&&Mt(t.f,e[b])==2);for(j=Mt(t.f,e[0])+Mt(t.f,e[b])+b-1,s=new MP(t.f,j,!1),v=0;v<=b;v++)s.a[v]=v,s.b[v]=0,s.k[v]=64,s.e[v]=e[v];for(L=b+1,y=!1,R=0;R<Mt(t.f,e[0]);R++)Q=_(t.f,e[0],R),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<Mt(t.f,e[b]);m++)Q=_(t.f,e[b],m),Q!=e[b-1]&&(s.a[L]=b+.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(Mt(t.f,A)==4){for(S=h(F,k,6,4,15,1),p=h(F,k,6,4,15,1),x=0,T=0;T<4;T++)S[x]=_(t.f,A,T),p[x]=Ot(t.f,A,T),Mt(t.f,S[x])==1&&!t.c[p[x]]&&++x;if(x==2){for(s=new MP(t.f,3,!1),l=0;l<2;l++)t.b[S[l]]=!0,t.c[p[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(c=0;c<2;c++)dt(t.f,p[c])==1&&(et=S[c],S[c]=S[2],S[2]=et,et=p[c],p[c]=p[2],p[2]=et);for(s=new MP(t.f,4,!1),l=0;l<3;l++)t.b[S[l]]=!0,t.c[p[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 Xa(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E,X,tt,W,$,et,lt,st,ct,Pt,Tt,Kt,Ct,$t,Ut,Ht;if(ki(t.c),t.d=null,ut(e,63),dt(e,A)!=1||A<e.g&&Re(e.p,A)||K(e,e.D[0][A])==1||K(e,e.D[1][A])==1||(tt=(e.F[A]&128)!=0,tt&&(e.p&&A<e.g?yP(e.p,A):0)<6))return!1;for(P=h(rt,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];a1(e,t.b[C])==2&&e0(e,t.b[C])==2&&K(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=h(F,k,6,e.f,15,1),ui(e,t.c,P,!0,t.g),p=0;p<t.g.length;p++)t.g[p]!=-1&&(t.i[t.g[p]]=p);if(je(t.c,!0),tt&&(r=D1(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),Tt=0;Tt<Kt.j.a.length;Tt++)if(Af(Kt,Tt,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,Tt,i)&&e.C[i]!=1){Ge(t.c,D1(t.c,t.g[t.b[x]],t.g[i]),256,!0);break}}}for(a=0;a<2;a++){for(EP(e,t.b[a],!0)&&T1(t.c,t.g[t.b[a]],Ur,!0),D=!1,W=0;W<O(e,t.b[a]);W++)i=_(e,t.b[a],W),i!=t.e[a]&&e.C[i]!=1&&(g=D1(t.c,t.g[t.b[a]],t.g[i]),l1(t.c,g)==8?D=!0:e.C[i]==6&&!vn(e,t.b[a])&&(c=i<e.f&&i0(e.p,i)?2:4,T1(t.c,t.g[i],c,!0)),f=Ot(e,t.b[a],W),Ct=e.p&&f<e.g?yP(e.p,f):0,(Ct==3||Ct==4)&&Ge(t.c,g,Ct<<17,!0),(f<e.g&&Re(e.p,f)||pA(e,t.b[a],W)==2)&&($=e0(e,i),b=$==3,!b&&$==2&&(e.u[i]&hn)==0&&(b=_R(e,t.b[1-a],f)!=-1),b?T1(t.c,t.g[i],B2,!0):f<e.g&&Re(e.p,f)&&T1(t.c,t.g[i],d2,!0)),pA(e,t.b[a],W)==1&&(e0(e,i)==4?T1(t.c,t.g[i],Hf,!0):e.C[i]==6&&T1(t.c,t.g[i],qA,!0)));D||(vn(e,t.b[a])?T1(t.c,t.g[t.b[a]],2,!0):T1(t.c,t.g[t.b[a]],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;et=Vv(t.c,m),w0(t.c,et,257),z(t.c,0,et)!=m&&(BD(t.c,1,et,z(t.c,0,et)),BD(t.c,0,et,m)),ut(t.c,191)}if(s=t.g[t.b[0]],y=t.g[t.b[1]],ct=t.g[t.e[0]],Pt=t.g[t.e[1]],Q=Ae(t.c,s),U=Ae(t.c,y),E8(t.c,s)&&E8(t.c,y)&&(Q!=0||U!=0)&&(Q!=U||VA(t.c,s)!=VA(t.c,y)))return!1;if(L=!1,E8(t.c,s)&&Q!=0&&(He(t.c,s,0,-1),L=!0),E8(t.c,y)&&U!=0&&(He(t.c,y,0,-1),L=!0),L&&ut(t.c,191),lt=R0(t.c,s),st=R0(t.c,y),lt<st&&(Ht=t.b[0],t.b[0]=t.b[1],t.b[1]=Ht,Ht=t.e[0],t.e[0]=t.e[1],t.e[1]=Ht,Ht=s,s=y,y=Ht,Ht=ct,ct=Pt,Pt=Ht),X=!1,(E8(t.c,s)||E8(t.c,y))&&(E8(t.c,s)?X=c3(t.c,s)==1:E8(t.c,y)&&(X=c3(t.c,y)==1),X)){for(n=0;n<t.c.q;n++)Be(t.c,n,-kt(t.c,n));ut(t.c,191)}return l=RR(t,s,ct),T=RR(t,y,Pt),t.f[0]=l==-1?-1:t.i[l],t.f[1]=T==-1?-1:t.i[T],E=FF(t.c),E==null?!1:(v=cR(t,s,ct),R=cR(t,y,Pt),v==0&&R==0&&(t.c.I&qP)==I0?Ut=2:Ut=qV[v][R],$t=Ut==0?X?\"<\":\">\":Ut==1?X?\"-\":\"+\":Ut==3?\"=\":\"\",t.d=E+$t,!0)}function Za(t,e){var A,n,P;i8();var r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E,X,tt,W,$,et,lt,st,ct,Pt,Tt,Kt,Ct,$t,Ut,Ht,Qt,Nt,b1,e1;for(v=new hj(e),c=new Tp(e,v),e1=h(zE,nA,461,e.q,0,2),ct=1;ct<e.q;ct++)e1[ct]=h(zE,{4:1,5:1,8:1,462:1,461:1},81,ct,0,1);for(T=0;T<e.r;T++)Q=O9(e.D[0][T],e.D[1][T]),MQ(e1,Q,Q,v.a[T],10);for(s=0;s<e.f;s++)for(Pt=1;Pt<e.e[s];Pt++)for(S=e.i[s][Pt],a=e.k[s][Pt],g=v.a[a],Ut=0;Ut<Pt;Ut++)p=e.i[s][Ut],E=e.k[s][Ut],r=Pt<Ut?c.a[s][Ut][Pt]:c.a[s][Pt][Ut],m=v.a[E],tt=w.Math.sqrt(g*g+m*m-2*g*m*w.Math.cos(r)),Qt=h(F,k,6,1,15,1),Qt[0]=s,MQ(e1,O9(S,p),Qt,tt,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=h(F,k,6,2,15,1),Pt=0;Pt<2;Pt++)Q[Pt]=e.D[Pt][l];if(e.e[Q[0]]>1&&e.e[Q[1]]>1){if(dt(e,l)==3){for(tt=v.a[l],b1=h(F,k,6,2,15,1),Tt=0;Tt<2;Tt++)for(Ut=0;Ut<e.e[Q[Tt]];Ut++)if(x=e.k[Q[Tt]][Ut],x!=l){tt+=v.a[x],b1[Tt]=e.i[Q[Tt]][Ut];break}Qt=h(F,k,6,2,15,1),Qt[0]=Q[0],Qt[1]=Q[1],MQ(e1,O9(b1[0],b1[1]),Qt,tt,3)}else if(dt(e,l)==2&&e.o[Q[0]]==1&&e.o[Q[1]]==1&&(e.F[l]&3)!=3){for(C=h(F,D0,7,2,0,2),x=h(F,D0,7,2,0,2),j=h(yt,h0,15,2,0,2),Tt=0;Tt<2;Tt++){for(C[Tt]=h(F,k,6,e.e[Q[Tt]]-1,15,1),x[Tt]=h(F,k,6,e.e[Q[Tt]]-1,15,1),j[Tt]=h(yt,wt,6,e.e[Q[Tt]]-1,15,1),W=-1,Ut=0;Ut<e.e[Q[Tt]];Ut++)if(e.i[Q[Tt]][Ut]==Q[1-Tt]){W=Ut;break}for(X=0,Ht=0;Ht<e.e[Q[Tt]];Ht++)Ht!=W&&(C[Tt][X]=e.i[Q[Tt]][Ht],x[Tt][X]=e.k[Q[Tt]][Ht],j[Tt][X]=Vu(c,Q[Tt],W,Ht),++X)}for(Kt=0;Kt<C[0].length;Kt++)for(Ut=0;Ut<C[1].length;Ut++)Ct=(e.F[l]&3)==1,C[0].length==2&&C[0][Kt]>C[0][1-Kt]&&(Ct=!Ct),C[1].length==2&&C[1][Ut]>C[1][1-Ut]&&(Ct=!Ct),A=v.a[l]-v.a[x[0][Kt]]*w.Math.cos(j[0][Kt])-v.a[x[1][Ut]]*w.Math.cos(j[1][Ut]),n=v.a[x[0][Kt]]*w.Math.sin(j[0][Kt]),Ct?n+=v.a[x[1][Ut]]*w.Math.sin(j[1][Ut]):n-=v.a[x[1][Ut]]*w.Math.sin(j[1][Ut]),P=h(F,k,6,2,15,1),P[0]=e.D[0][l],P[1]=e.D[1][l],MQ(e1,O9(C[0][Kt],C[1][Ut]),P,w.Math.sqrt(A*A+n*n),3)}else if(dt(e,l)!=0){for(Nt=h(F,k,6,2,15,1),Tt=0;Tt<2;Tt++)for(Ut=0;Ut<e.e[Q[Tt]];Ut++)if(e.i[Q[Tt]][Ut]==Q[1-Tt]){Nt[Tt]=Ut;break}for(Kt=0;Kt<e.e[Q[0]];Kt++)if(Kt!=Nt[0])for(Ut=0;Ut<e.e[Q[1]];Ut++)Ut!=Nt[1]&&(e.o[Q[0]]==0&&e.o[Q[1]]==0?G_(e.i[Q[0]][Kt],e.i[Q[1]][Ut],e.k[Q[0]][Kt],e.k[Q[1]][Ut],Vu(c,Q[0],Nt[0],Kt),Vu(c,Q[1],Nt[1],Ut),l,v,e1,e):A_(e.i[Q[0]][Kt],e.i[Q[1]][Ut],e.k[Q[0]][Kt],e.k[Q[1]][Ut],Vu(c,Q[0],Nt[0],Kt),Vu(c,Q[1],Nt[1],Ut),l,v,e1,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(U=e.i[y][0],L=e.i[y][1],Pt=0;Pt<e.e[U];Pt++)if(R=e.i[U][Pt],R!=y)for(Ut=0;Ut<e.e[L];Ut++)b=e.i[L][Ut],b!=y&&(i=rk(c,U,y,R),f=rk(c,L,y,b),g=B9(v,e.k[U][Pt]),m=B9(v,e.k[L][Ut]),$=B9(v,e.k[y][0])+B9(v,e.k[y][1])-g*w.Math.cos(i)-m*w.Math.cos(f),et=g*w.Math.sin(i),lt=m*w.Math.sin(f),Qt=h(F,k,6,2,15,1),Qt[0]=U,Qt[1]=L,MQ(e1,O9(R,b),Qt,w.Math.sqrt($*$+et*et+lt*lt),3))}for(D=0;D<e.q;D++)w_(e1,D,e,v);for(BY(e1,e),st=1;st<e.q;st++)for($t=0;$t<st;$t++)e1[st][$t].a!=null&&t.a.push(e1[st][$t])}function Tp(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C;for(this.b=e,this.e=t,this.a=h(Ee,nA,464,this.e.f,0,3),P=0;P<this.e.f;P++)for(this.a[P]=h(Ee,{464:1,4:1,9:1,5:1,8:1},46,Mt(this.e,P),0,2),D=1;D<Mt(this.e,P);D++)this.a[P][D]=h(Ee,PA,6,D,15,1);for(this.c=h(F,k,6,this.e.f,15,1),this.d=h(Ee,PA,6,this.e.f,15,1),this.f=h(F,k,6,this.e.g,15,1),j=On(this.e),s=h(rt,ft,6,j.j.a.length,16,1),Zs(j,s,h(rt,ft,6,j.j.a.length,16,1),h(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]?ua(this,g):C<=4&&SX(this,g));for(L=h(rt,ft,6,this.e.f,16,1),c=0;c<j.j.a.length;c++)if(s[c])for(v=N(j.j,c),R=0,b=v.length;R<b;++R)m=v[R],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=Mt(this.e,n),i>4){for(D=1;D<i;D++)for(l=0;l<D;l++)this.a[n][D][l]=I6;this.c[n]=r[i];continue}if(this.c[n]!=r[i])if(go(this.e,n)&&(L[n]||M9(this.e,n)<=4&&a1(this.e,n)>0)){if(i>2){if(this.c[n]==1)K(this.e,n)<=14?A=(Kp-this.d[n])/2:A=Xp+(Xp-this.d[n])*.18000000715255737;else if(A=Kp-this.d[n],i>3){if(this.c[n]==2){for(y=h(rt,ft,6,Mt(this.e,n),16,1),Q=1;Q<i;Q++)for(T=0;T<Q;T++)this.a[n][Q][T]!=0&&(y[Q]=!y[Q],y[T]=!y[T]);for(U=0;U<i;U++)if(y[U]){for(T=U+1;T<i;T++)if(y[T]){this.a[n][T][U]=A;break}break}}A=I6}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(go(this.e,n)&&M9(this.e,n)<=4)switch(HK(this,n)){case 771:L0(this,n,0,3,2.0653998851776123),L0(this,n,0,0,1.9814722631346626);break;case 1028:L0(this,n,0,4,1.9797999858856201),L0(this,n,0,0,1.94691481878138);break;case 393987:L0(this,n,0,3,Zp),L0(this,n,0,6,Zp),L0(this,n,3,3,1.7229016938441077);break;case 459779:L0(this,n,0,3,x6),L0(this,n,0,4,x6),L0(this,n,0,7,x6),L0(this,n,3,4,1.9322539839360076);break;case 525316:L0(this,n,0,4,Wp),L0(this,n,0,8,Wp),L0(this,n,4,4,1.99944913298566);case 394758:L0(this,n,0,6,2.526099920272827);break;case 460550:L0(this,n,0,6,_p),L0(this,n,0,7,_p);break;case 526087:L0(this,n,0,7,$p),L0(this,n,0,8,$p);break;case 526344:L0(this,n,0,8,2.186300039291382);break;case 50529027:L0(this,n,3,3,2.4189000129699707);break;case 67371779:L0(this,n,3,4,2.2298998832702637);break;case 67372036:L0(this,n,4,4,2.094399929046631);break;case 101057283:L0(this,n,3,6,1.839926051241747),L0(this,n,3,3,2.9061476191098734);break;case 117834755:L0(this,n,3,4,2.812249087174905),L0(this,n,3,7,1.7910569124592968),L0(this,n,4,6,2.1224948975613245);break;case 134677507:L0(this,n,3,4,2.642428360523752),L0(this,n,3,8,2.027723514585844),L0(this,n,4,7,2.251474717631936);break;case 117900035:L0(this,n,3,7,2.109753935530918),L0(this,n,3,3,3.1052897491356646);break;case 117900292:L0(this,n,4,7,2.090729910747413),L0(this,n,4,4,2.551671293386306);break;case 134743044:L0(this,n,4,8,2.139250042271712),L0(this,n,4,4,2.3520055858942612)}else for(A=K(this.e,n)>10?ap:a1(this.e,n)==2?j2:EP(this.e,n,!0)?tC:a1(this.e,n)==0?ap:tC,D=1;D<i;D++)for(l=0;l<D;l++)this.a[n][D][l]=A}}function Wa(t,e,A,n){var P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b;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]),b=h(F,k,6,1+2*s.length+(n?2*y.length:0),15,1),c=0,i=s,D=0,U=i.length;D<U;++D)P=i[D],b[c++]=P,b[c++]=-2;if(n)for(r=y,f=0,Q=r.length;f<Q;++f)P=r[f],b[c++]=P,b[c++]=-2;for(b[c++]=L,_o(t.v,l,b),t.b=fn(t.v,\"Any atomic number\"),JP(t.b,t),he(t.v,t.b,1,1,3,1),t.w=oe(t.v,n4),t.D=Gu(t.v,16,1),f0(t.v,t.w,1,3),f0(t.v,t.D,3,3),t.g=oA(t.v),Gt(t.g,d8),Gt(t.g,\"is aromatic\"),Gt(t.g,\"is hetero-aromatic\"),Gt(t.g,\"is not aromatic\"),f0(t.v,oe(t.v,\"Aromaticity:\"),1,5),f0(t.v,t.g,3,5),t.s=oA(t.v),Gt(t.s,d8),Gt(t.s,\"0 (not in a ring)\"),Gt(t.s,\"0 or 2 (0 or 1 ring)\"),Gt(t.s,\">=2 (any ring count)\"),Gt(t.s,\"2 (in 1 ring)\"),Gt(t.s,\"3 (bridge head; 2 rings)\"),Gt(t.s,\">3 (in more than 2 rings)\"),f0(t.v,oe(t.v,\"Ring bonds:\"),1,7),f0(t.v,t.s,3,7),t.t=oA(t.v),Gt(t.t,d8),Gt(t.t,\"3 members\"),Gt(t.t,\"4 members\"),Gt(t.t,\"5 members\"),Gt(t.t,\"6 members\"),Gt(t.t,\"7 members\"),f0(t.v,oe(t.v,\"Smallest ring size:\"),1,9),f0(t.v,t.t,3,9),t.r=oA(t.v),m=KV,v=0,R=m.length;v<R;++v)g=m[v],Gt(t.r,g);for(f0(t.v,oe(t.v,\"Any ring size:\"),1,11),f0(t.v,t.r,3,11),t.i=oA(t.v),Gt(t.i,d8),Gt(t.i,\"not charged\"),Gt(t.i,\"has negative charge\"),Gt(t.i,\"has positive charge\"),f0(t.v,oe(t.v,\"Charge:\"),1,13),f0(t.v,t.i,3,13),t.n=oA(t.v),Gt(t.n,d8),Gt(t.n,Gy),Gt(t.n,Jy),Gt(t.n,\"exactly 3\"),Gt(t.n,P4),Gt(t.n,DV),Gt(t.n,zy),Gt(t.n,r4),Gt(t.n,i4),Gt(t.n,uV),Gt(t.n,f4),Gt(t.n,\"1,2, or 3\"),Gt(t.n,\"2 or 3\"),f0(t.v,oe(t.v,\"Non-H neighbours:\"),1,15),f0(t.v,t.n,3,15),t.j=oA(t.v),Gt(t.j,d8),Gt(t.j,\"exactly 0\"),Gt(t.j,Gy),Gt(t.j,Jy),Gt(t.j,\"exactly 3\"),Gt(t.j,QV),Gt(t.j,P4),Gt(t.j,DV),Gt(t.j,zy),Gt(t.j,r4),Gt(t.j,i4),Gt(t.j,uV),Gt(t.j,f4),Gt(t.j,\"1,2, or 3\"),Gt(t.j,\"2 or 3\"),f0(t.v,oe(t.v,\"Electroneg. neighbours:\"),1,17),f0(t.v,t.j,3,17),t.k=oA(t.v),Gt(t.k,d8),Gt(t.k,\"none\"),Gt(t.k,Gy),Gt(t.k,Jy),Gt(t.k,zy),Gt(t.k,r4),Gt(t.k,i4),Gt(t.k,QV),Gt(t.k,P4),Gt(t.k,f4),f0(t.v,oe(t.v,\"Hydrogen count:\"),1,19),f0(t.v,t.k,3,19),t.p=oA(t.v),Gt(t.p,d8),Gt(t.p,\"none\"),Gt(t.p,Gy),Gt(t.p,Jy),Gt(t.p,zy),f0(t.v,oe(t.v,\"Pi-electron count:\"),1,21),f0(t.v,t.p,3,21),t.o=oA(t.v),Gt(t.o,d8),T=1;T<15;T++)Gt(t.o,\"\"+(T-7));f0(t.v,oe(t.v,\"Oxidation state:\"),1,23),f0(t.v,t.o,3,23),t.c=fn(t.v,\"prohibit further substitution\"),JP(t.c,t),he(t.v,t.c,1,25,3,25),t.f=fn(t.v,\"require further substitution\"),JP(t.f,t),he(t.v,t.f,1,27,3,27),t.u=oA(t.v),Gt(t.u,d8),Gt(t.u,\"is a stereo center\"),Gt(t.u,\"is not a stereo center\"),f0(t.v,oe(t.v,\"Stereo center:\"),1,29),f0(t.v,t.u,3,29),t.e=fn(t.v,\"match stereo center\"),he(t.v,t.e,1,31,3,31),t.d=fn(t.v,\"is part of exclude group\"),he(t.v,t.d,1,33,3,33),n&&(he(t.v,oe(t.v,\"Stereo center hint for product:\"),1,35,3,35),t.q=oA(t.v),Gt(t.q,\"Copy from generic product\"),Gt(t.q,\"Keep reactant configuration\"),Gt(t.q,\"Invert reactant configuration\"),Gt(t.q,\"Racemise configuration\"),he(t.v,t.q,1,37,3,37)),ut(t.A,31),Na(t)}function hp(){var t,e,A,n;for(this.b=new LP,this.c=new LP,this.d=new LP,R4=B(d(Qtt,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=R4,A=0,n=e.length;A<n;++A)t=e[A],Sr(this.b,k1(t.c),t),SD(this.c,t.b,t),SD(this.d,t.d.toLowerCase(),t);this.a=h(rt,ft,6,R4.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 _a(t,e,A,n){var P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E,X,tt,W,$,et,lt,st,ct,Pt,Tt,Kt,Ct,$t,Ut,Ht,Qt,Nt,b1,e1,Rt,Lt,j1,St,g1,y0,F1,s1,T0,G0,OA,b0,d1,fe,Ke,gA,T9,F8,QP,UP,tn,h9,xn,en;for(S=w3(t.c,n),d1=new JA,T=0,c=0,xn=null,st=0;st<t.o.length;st++){for(p=dr(t.c,st),ut(t.o[st],1),F1=N(e[st],A[st]),y0=h(F,k,6,t.o[st].f,15,1),v=h(rt,ft,6,t.o[st].f,16,1),R=h(rt,ft,6,t.o[st].g,16,1),Ut=0;Ut<p.f;Ut++)if(F1[Ut]!=-1)if(w.Math.abs(p.w[Ut])==0){for(b=F1[Ut],v[b]=!0,j1=0;j1<O(t.o[st],b);j1++)R[Ot(t.o[st],b,j1)]=!0;for(Lt=Mt(t.o[st],b);Lt<De(t.o[st],b);Lt++)R[Ot(t.o[st],b,Lt)]=!0}else y0[F1[Ut]]=w.Math.abs(p.w[Ut]);for(Ht=0;Ht<p.g;Ht++)if(L=p.D[0][Ht],s=p.D[1][Ht],w.Math.abs(p.w[L])!=0&&w.Math.abs(p.w[s])!=0&&(f=F1[L],D=F1[s],f!=-1&&D!=-1)){for(Lt=0;Lt<t.o[st].g;Lt++)if(z(t.o[st],0,Lt)==f&&z(t.o[st],1,Lt)==D||z(t.o[st],0,Lt)==D&&z(t.o[st],1,Lt)==f){R[Lt]=!0;break}}for(G0=h(F,k,6,t.o[st].f,15,1),Qt=0;Qt<t.o[st].f;Qt++)if(!v[Qt]&&(G0[Qt]=En(t.o[st],d1,Qt,T,c),t.b&&Ze(d1,G0[Qt],t.p[st][A[st]][Qt],!1),y0[Qt]!=0)){for(Ze(d1,G0[Qt],y0[Qt],!1),Lt=0;Lt<S.f;Lt++)if(w.Math.abs(S.w[Lt])==y0[Qt]){if(E0(d1,G0[Qt],S.s[Lt]),Ne(d1,G0[Qt],S.u[Lt]&48),t.f[n][Lt])if(b0=d0(t.o[st],Qt),Ke=V(S.B[Lt],c8),G(Ke,0)==0)ce(d1,G0[Qt],3,!1);else if(G(Ke,c8)==0)!xn&&(xn=new f1),mt(xn,k1(G0[Qt]));else if(b0==1||b0==2){for(Pt=G(Ke,lU)==0,St=0;St<O(t.o[st],Qt);St++)if(y=_(t.o[st],Qt,St),v[y])for(g1=0;g1<O(t.o[st],Qt);g1++)OA=_(t.o[st],Qt,g1),!v[OA]&&OA>y&&(Pt=!Pt);Pt&&(b0=b0==1?2:1),ce(d1,G0[Qt],b0,!1)}else ce(d1,G0[Qt],0,!1);break}}for(Nt=0;Nt<t.o[st].g;Nt++)R[Nt]||DQ(t.o[st],d1,Nt,T,c,G0,!0);T=$0(d1,1),c=$0(d1,2)}for(T0=h(F,k,6,S.f,15,1),b1=0;b1<S.f;b1++)if(y0=w.Math.abs(S.w[b1]),y0==0)T0[b1]=En(S,d1,b1,T,c);else for(Lt=0;Lt<d1.q;Lt++)if(w.Math.abs(d1.w[Lt])==y0){T0[b1]=Lt;break}if(t.r)for(Ut=0;Ut<S.f;Ut++)zn(d1,T0[Ut],!0),Be(d1,T0[Ut],S.J[Ut].a),Ie(d1,T0[Ut],S.J[Ut].b);for(x=0;x<S.g;x++)if((S.G[x]&y8)==0&&(fe=er(S,d1,x,T,c,T0[S.D[0][x]],T0[S.D[1][x]],!1),gA=S.G[x]&31,gA!=0))for(C=!1,Ge(d1,fe,31,!1),a=C1(S,S.D[0][x]),E=C1(S,S.D[1][x]),lt=0;!C&&lt<t.c.g.a.length;lt++)for(p=dr(t.c,lt),W=0;!C&&W<p.g;W++)X=p.D[0][W],tt=p.D[1][W],$=w.Math.abs(p.w[X]),et=w.Math.abs(p.w[tt]),$!=0&&et!=0&&($==a&&et==E||$==E&&et==a)&&(C=!0,en=p.G[W]&31,en!=0&&(F1=N(e[lt],A[lt]),F8=F1[X],QP=F1[tt],UP=D1(t.o[lt],F8,QP),h9=l1(t.o[lt],UP),tn=dt(t.o[lt],UP),en&=7,gA&=7,en==3&&gA==6?(d1.H[fe]=tn<=1?2:4,d1.T=0):en==6&&gA==3?(d1.H[fe]=tn==3?2:1,d1.T=0):(d1.H[fe]=h9,d1.T=0)));for(ut(d1,1),g=!1,e1=0;e1<S.f;e1++)w.Math.abs(S.w[e1])==0?(b0=H5(S,e1,T0),ce(d1,T0[e1],b0,!1)):t.f[n][e1]&&JZ(t,S,e1,d1,T0[e1])&&(b0=H5(S,e1,T0),ce(d1,T0[e1],b0,!1),(b0==1||b0==2)&&(m=(S.u[e1]&m1)>>18,l=(S.u[e1]&m1)>>18!=1&&(S.u[e1]&m1)>>18!=2?-1:(S.u[e1]&RA)>>20,m==1?l+=T:m==2&&(l+=c),He(d1,T0[e1],m,l),g=!0));for(g&&(T=$0(d1,1),c=$0(d1,2)),T9=h(rt,ft,6,S.q,16,1),Rt=0;Rt<S.f;Rt++)t.f[n][Rt]&&!T9[Rt]&&(S.u[Rt]&4)!=0&&P0(V(S.B[Rt],c8),0)&&S.j[Rt]==d1.j[T0[Rt]]&&oW(S,Rt,d1,T0);for(ct=h(rt,ft,6,d1.q,16,1),Kt=T0,Ct=0,$t=Kt.length;Ct<$t;++Ct)Tt=Kt[Ct],ct[Tt]=!0;for(j=!0;j;)for(j=!1,U=0;U<d1.r;U++)f=d1.D[0][U],D=d1.D[1][U],ct[f]&&!ct[D]?(ct[D]=!0,j=!0):ct[D]&&!ct[f]&&(ct[f]=!0,j=!0);for(i=0;i<d1.q;i++)dP(d1,i,!ct[i]);if(nQ(d1),!t.b)for(Q=0;Q<d1.q;Q++)d1.w[Q]=0;if(Ff(new cr(d1),null,!1),d1.T|=8,s1=2|(t.r?8:0),Ar(new Y8(s1),d1),xn)for(ut(d1,15),r=new Wt(xn);r.a<r.c.a.length;)P=t1(r).a,(d1.u[P]&Tn)!=0&&(ce(d1,P,1,!1),He(d1,P,1,T++));return d1}function $a(t,e){var A,n,P,r,i,f,D,Q,U,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=jt(t.V,t.e)),eb(t.V,y,l),t.I)for(f=new Wt(t.I);f.a<f.c.a.length;)i=t1(f),i.Qb(y,l);z1(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=jt(t.V,t.e),r0(t.V,t.e)?t.X=t.Z?9:4:t.X=3),t.X==0&&(P=df(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&&!Zt(t.v,62)?11:10),t.X!=0){for(t.gb=h(yt,wt,6,t.V.q,15,1),t.jb=h(yt,wt,6,t.V.q,15,1),D=0;D<t.V.q;D++)t.gb[D]=kt(t.V,D),t.jb[D]=jt(t.V,D);if(t.I)for(f=new Wt(t.I);f.a<f.c.a.length;)i=t1(f),nY(i,t.hb,t.kb);z1(t);break}if(e.a?t.X=6:(t.R=new bv,Ce(t.R,t.hb,t.kb),Ce(t.R,t.hb,t.kb),t.X=5),t.P=h(rt,ft,6,t.V.q,16,1),t.I&&(t.Q=h(rt,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]=r0(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++)r0(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,n1(t.k))}break;case 4:z1(t),sK(t,t.hb,t.kb);break;case 3:s=ZA(t.V,t.hb,t.kb),s!=-1&&(z1(t),Xo(t.V,s,!Fr(t.V,s)),t.eb=w.Math.max(t.eb,1),n1(t.k),N1(t,new q1(t,1,!0)));break;case 101:case 103:case 102:t.u!=-1&&fN(t,t.u)&&(z1(t),q$(t,t.u,t.w==101?0:t.w==103?1:2),t.eb=w.Math.max(t.eb,1),n1(t.k),N1(t,new q1(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=df(t.V,t.hb,t.kb),n!=-1){z1(t),r=511,t.w==6?r=257:t.w==23&&(r=129),Q8(t.V,n,r)&&(t.eb=w.Math.max(t.eb,1),n1(t.k),N1(t,new q1(t,1,!0)));break}}else{if(De(t.V,t.e)==8)return;t.hb=kt(t.V,t.e),t.kb=jt(t.V,t.e)}t.X=1,z5(t,t.e),n1(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=jt(t.V,t.e)}t.X=2,t.q=0;break;case 7:z1(t),lf(t.V,t.hb,t.kb,3,!1,Pn(t.V,24*t.ab))&&(t.eb=w.Math.max(t.eb,3),n1(t.k),N1(t,new q1(t,1,!0)));break;case 24:z1(t),lf(t.V,t.hb,t.kb,4,!1,Pn(t.V,24*t.ab))&&(t.eb=w.Math.max(t.eb,3),n1(t.k),N1(t,new q1(t,1,!0)));break;case 8:z1(t),lf(t.V,t.hb,t.kb,5,!1,Pn(t.V,24*t.ab))&&(t.eb=w.Math.max(t.eb,3),n1(t.k),N1(t,new q1(t,1,!0)));break;case 25:z1(t),lf(t.V,t.hb,t.kb,6,!1,Pn(t.V,24*t.ab))&&(t.eb=w.Math.max(t.eb,3),n1(t.k),N1(t,new q1(t,1,!0)));break;case 9:z1(t),lf(t.V,t.hb,t.kb,7,!1,Pn(t.V,24*t.ab))&&(t.eb=w.Math.max(t.eb,3),n1(t.k),N1(t,new q1(t,1,!0)));break;case 26:z1(t),lf(t.V,t.hb,t.kb,6,!0,Pn(t.V,24*t.ab))&&(t.eb=w.Math.max(t.eb,3),n1(t.k),N1(t,new q1(t,1,!0)));break;case 10:z1(t),FB(t.V,t.hb,t.kb,!0)&&(t.eb=w.Math.max(t.eb,3),n1(t.k),N1(t,new q1(t,1,!0)));break;case 27:z1(t),FB(t.V,t.hb,t.kb,!1)&&(t.eb=w.Math.max(t.eb,3),n1(t.k),N1(t,new q1(t,1,!0)));break;case 16:f8(t,1);break;case 11:f8(t,6);break;case 12:f8(t,7);break;case 13:f8(t,8);break;case 28:f8(t,14);break;case 29:f8(t,15);break;case 30:f8(t,16);break;case 14:f8(t,9);break;case 31:f8(t,17);break;case 15:f8(t,35);break;case 32:f8(t,53);break;case 33:e.d||e.a?(A=ZA(t.V,t.hb,t.kb),A!=-1&&XF(t,A,new _c)):(z1(t),Jh(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),n1(t.k),N1(t,new q1(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=jt(t.V,t.e),t.X=8);break;case 21:U=null,t.v?Zt(t.v,93)&&(U=t.v):(U=new Uo,xg(U,t.hb,t.kb),mt(t.I,U)),sx(t,U,new Mw(t))}}function ry(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E,X,tt,W,$,et,lt,st,ct,Pt,Tt;for(this.c=t.length,this.d=t[0].length,E=w.Math.min(this.c,this.d),this.e=h(yt,wt,6,w.Math.min(this.c+1,this.d),15,1),this.a=R1(yt,[h0,wt],[15,6],15,[this.c,E],2),this.b=R1(yt,[h0,wt],[15,6],15,[this.d,this.d],2),P=h(yt,wt,6,this.d,15,1),Tt=h(yt,wt,6,this.c,15,1),x=w.Math.min(this.c-1,this.d),a=w.Math.max(0,w.Math.min(this.d-2,this.c)),b=0;b<w.Math.max(x,a);b++){if(b<x){for(this.e[b]=0,L=b;L<this.c;L++)this.e[b]=P2(this.e[b],t[L][b]);if(this.e[b]!=0){for(t[b][b]<0&&(this.e[b]=-this.e[b]),U=b;U<this.c;U++)t[U][b]/=this.e[b];t[b][b]+=1}this.e[b]=-this.e[b]}for(c=b+1;c<this.d;c++){if(b<x&this.e[b]!=0){for(Pt=0,L=b;L<this.c;L++)Pt+=t[L][b]*t[L][c];for(Pt=-Pt/t[b][b],U=b;U<this.c;U++)t[U][c]+=Pt*t[U][b]}P[c]=t[b][c]}if(!0&b<x)for(U=b;U<this.c;U++)this.a[U][b]=t[U][b];if(b<a){for(P[b]=0,L=b+1;L<this.d;L++)P[b]=P2(P[b],P[L]);if(P[b]!=0){for(P[b+1]<0&&(P[b]=-P[b]),s=b+1;s<this.d;s++)P[s]/=P[b];P[b+1]+=1}if(P[b]=-P[b],b+1<this.c&P[b]!=0){for(s=b+1;s<this.c;s++)Tt[s]=0;for(g=b+1;g<this.d;g++)for(y=b+1;y<this.c;y++)Tt[y]+=P[g]*t[y][g];for(m=b+1;m<this.d;m++)for(Pt=-P[m]/P[b+1],y=b+1;y<this.c;y++)t[y][m]+=Pt*Tt[y]}for(U=b+1;U<this.d;U++)this.b[U][b]=P[U]}}for(X=w.Math.min(this.d,this.c+1),x<this.d&&(this.e[x]=t[x][x]),this.c<X&&(this.e[X-1]=0),a+1<X&&(P[a]=t[a][X-1]),P[X-1]=0,v=x;v<E;v++){for(U=0;U<this.c;U++)this.a[U][v]=0;this.a[v][v]=1}for(j=x-1;j>=0;j--)if(this.e[j]!=0){for(T=j+1;T<E;T++){for(Pt=0,L=j;L<this.c;L++)Pt+=this.a[L][j]*this.a[L][T];for(Pt=-Pt/this.a[j][j],s=j;s<this.c;s++)this.a[s][T]+=Pt*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],U=0;U<j-1;U++)this.a[U][j]=0}else{for(U=0;U<this.c;U++)this.a[U][j]=0;this.a[j][j]=1}for(C=this.d-1;C>=0;C--){if(C<a&P[C]!=0)for(T=C+1;T<E;T++){for(Pt=0,L=C+1;L<this.d;L++)Pt+=this.b[L][C]*this.b[L][T];for(Pt=-Pt/this.b[C+1][C],s=C+1;s<this.d;s++)this.b[s][T]+=Pt*this.b[s][C]}for(U=0;U<this.d;U++)this.b[U][C]=0;this.b[C][C]=1}for(tt=X-1,l=0,f=w.Math.pow(2,-52);X>0;){for(R=X-2;R>=-1&&R!=-1;R--)if(w.Math.abs(P[R])<=f*(w.Math.abs(this.e[R])+w.Math.abs(this.e[R+1]))){P[R]=0;break}if(R==X-2)S=4;else{for(p=X-1;p>=R&&p!=R;p--)if(Pt=(p!=X?w.Math.abs(P[p]):0)+(p!=R+1?w.Math.abs(P[p-1]):0),w.Math.abs(this.e[p])<=f*Pt){this.e[p]=0;break}p==R?S=3:p==X-1?S=1:(S=2,R=p)}switch(++R,S){case 1:for(D=P[X-2],P[X-2]=0,T=X-2;T>=R;T--)for(Pt=P2(this.e[T],D),n=this.e[T]/Pt,lt=D/Pt,this.e[T]=Pt,T!=R&&(D=-lt*P[T-1],P[T-1]=n*P[T-1]),U=0;U<this.d;U++)Pt=n*this.b[U][T]+lt*this.b[U][X-1],this.b[U][X-1]=-lt*this.b[U][T]+n*this.b[U][X-1],this.b[U][T]=Pt;break;case 2:for(D=P[R-1],P[R-1]=0,T=R;T<X;T++)for(Pt=P2(this.e[T],D),n=this.e[T]/Pt,lt=D/Pt,this.e[T]=Pt,D=-lt*P[T],P[T]=n*P[T],U=0;U<this.c;U++)Pt=n*this.a[U][T]+lt*this.a[U][R-1],this.a[U][R-1]=-lt*this.a[U][T]+n*this.a[U][R-1],this.a[U][T]=Pt;break;case 3:{for(W=w.Math.max(w.Math.max(w.Math.max(w.Math.max(w.Math.abs(this.e[X-1]),w.Math.abs(this.e[X-2])),w.Math.abs(P[X-2])),w.Math.abs(this.e[R])),w.Math.abs(P[R])),st=this.e[X-1]/W,ct=this.e[X-2]/W,i=P[X-2]/W,et=this.e[R]/W,r=P[R]/W,e=((ct+st)*(ct-st)+i*i)/2,A=st*i*(st*i),$=0,e!=0|A!=0&&($=w.Math.sqrt(e*e+A),e<0&&($=-$),$=A/(e+$)),D=(et+st)*(et-st)+$,Q=et*r,T=R;T<X-1;T++){for(Pt=P2(D,Q),n=D/Pt,lt=Q/Pt,T!=R&&(P[T-1]=Pt),D=n*this.e[T]+lt*P[T],P[T]=n*P[T]-lt*this.e[T],Q=lt*this.e[T+1],this.e[T+1]=n*this.e[T+1],L=0;L<this.d;L++)Pt=n*this.b[L][T]+lt*this.b[L][T+1],this.b[L][T+1]=-lt*this.b[L][T]+n*this.b[L][T+1],this.b[L][T]=Pt;if(Pt=P2(D,Q),n=D/Pt,lt=Q/Pt,this.e[T]=Pt,D=n*P[T]+lt*this.e[T+1],this.e[T+1]=-lt*P[T]+n*this.e[T+1],Q=lt*P[T+1],P[T+1]=n*P[T+1],T<this.c-1)for(U=0;U<this.c;U++)Pt=n*this.a[U][T]+lt*this.a[U][T+1],this.a[U][T+1]=-lt*this.a[U][T]+n*this.a[U][T+1],this.a[U][T]=Pt}P[X-2]=D,l=l+1}break;case 4:{if(this.e[R]<=0)for(this.e[R]=this.e[R]<0?-this.e[R]:0,U=0;U<=tt;U++)this.b[U][R]=-this.b[U][R];for(;R<tt&&!(this.e[R]>=this.e[R+1]);){if(Pt=this.e[R],this.e[R]=this.e[R+1],this.e[R+1]=Pt,R<this.d-1)for(U=0;U<this.d;U++)Pt=this.b[U][R+1],this.b[U][R+1]=this.b[U][R],this.b[U][R]=Pt;if(R<this.c-1)for(U=0;U<this.c;U++)Pt=this.a[U][R+1],this.a[U][R+1]=this.a[U][R],this.a[U][R]=Pt;++R}l=0,--X}}}}function iy(){iy=B1,b4=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,U,L,s,y,l,T,c,g,m,v,R,b,j;if(e[A-1]==36){if(t.r=!0,t.q=new f1,A+=WR(t,e,A-1,t.q)-1,e[A++]!=93){if(!r)throw At(new V1(\"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=GY(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&&(Zn(e[A]&w1)||t.j&&e[A]==123))t.d=6,t.c=Y(t.c,1),--A,Q&&--A;else{if(U=new Ow,!xj(t,e,A-1,n,U))throw At(new V1(\"SmilesParser: Unexpected character in atom definition:'\"+String.fromCharCode(e[A-1]&w1)+qp+(A-1)));if(t.d=U.a,A+=U.b-1,(t.k&3)!=2&&(t.g=9),P&&(e[A]==44||Q)){for(y=U.d,s=U.c,v=A-U.b;v<n;){if(!xj(t,e,v,n,U)){if(!Q)throw At(new V1(\"SmilesParser: Unexpected character in atom list:'\"+String.fromCharCode(e[v]&w1)+Ip+v));break}if(U.a==1){if(!Q)throw At(new V1(\"SmilesParser: Hydrogen is not supported in positive atom lists:'\"+lN((Io(v<=n,v+\" > \"+n),j=e.length,rm(v,v,j),RP(e,h(q,I,6,n-v,15,1),v,n)))+Ip+v))}else Ux(t,U.a),y=y|U.d,s=s|U.c;if(v+=U.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(T=new Rw(e),g=h(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;Zn(e[A]&w1);)t.o=10*t.o+e[A]-48,++A;continue}if(e[A]==91)throw At(new V1(\"SmilesParser: nested square brackets found. Position:\"+A));if(e[A]==93){++A,m=!1;continue}if(t.e=Ek(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+=vf(T,A,1),i=0,T.c<=0&&T.b>=0&&(i=Y(i,128)),T.c<=1&&T.b>=1&&(i=Y(i,256)),T.c<=2&&T.b>=2&&(i=Y(i,512)),T.c<=3&&T.b>=3&&(i=Y(i,re)),D?(t.c=Y(t.c,i),t.g=-1):T.b==T.c?t.g=T.c:(t.c=Y(t.c,V(rP,Jn(i))),t.g=-1);continue}if(e[A]==68||e[A]==100){++A,A+=vf(T,A,1),i=0,T.c<=0&&T.b>=0&&(i=Y(i,I0)),T.c<=1&&T.b>=1&&(i=Y(i,T8)),T.c<=2&&T.b>=2&&(i=Y(i,l8)),T.c<=3&&T.b>=3&&(i=Y(i,h8)),T.c<=4&&T.b>=4&&(i=Y(i,qA)),G(i,0)!=0&&(D?t.c=Y(t.c,i):gt(V(t.c,si),0)?t.c=V(t.c,Jn(i)):(i=Or(i,si),t.c=Y(t.c,i)));continue}if(e[A]==122&&t.j){++A,A+=vf(T,A,4),i=0,T.c<=0&&T.b>=0&&(i=Y(i,v2)),T.c<=1&&T.b>=1&&(i=Y(i,xp)),T.c<=2&&T.b>=2&&(i=Y(i,Np)),T.c<=3&&T.b>=3&&(i=Y(i,Op)),T.c<=4&&T.b>=4&&(i=Y(i,aQ)),G(i,0)!=0&&(D?t.c=Y(t.c,i):gt(V(t.c,Vf),0)?t.c=V(t.c,Jn(i)):(i=Or(i,Vf),t.c=Y(t.c,i)));continue}if(e[A]==88){if(++A,A+=vf(T,A,1),b=(Y1(),Lr)[t.d],b==null)continue;R=b[0],L=Ek(e,A,g),g[0]!=0&&(ar(t.d)?R+=L:t.d==6?R-=w.Math.abs(L):R-=L),i=0,R-T.c<=0&&R-T.b>=0&&(i=Y(i,Sn)),R-T.c<=1&&R-T.b>=1&&(i=Y(i,s8)),R-T.c<=2&&R-T.b>=2&&(i=Y(i,Q0)),G(i,0)!=0&&(D?t.c=Y(t.c,i):gt(V(t.c,Li),0)?t.c=V(t.c,Jn(i)):(i=Or(i,Li),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+=vf(T,A,3),i=0,T.c<=0&&T.b>=0&&(i=Y(i,8)),T.c<=1&&T.b>=1&&(i=Y(i,16)),T.c<=2&&T.b>=2&&(i=Y(i,32)),T.c<=3&&T.b>=3&&(i=Y(i,64)),T.b>3&&Ou(t.n,(D?\"!R\":\"R\")+T.b),G(i,0)!=0&&(D?t.c=Y(t.c,i):gt(V(t.c,120),0)?t.c=V(t.c,Jn(i)):(i=Or(i,120),t.c=Y(t.c,i)));continue}if(e[A]==114){if(++A,A+=vf(T,A,1),T.a){D?t.c=Y(t.c,384):t.c=Y(t.c,8);continue}c=T.c,T.b>T.c&&Ou(t.n,(D?\"!r\":\"r\")+(\"{\"+T.c+\"-\"+T.b+\"}\")),!D&&c>=3&&c<=7?t.c=Y(t.c,c<<22):T.b>T.c||Ou(t.n,(D?\"!r\":\"r\")+c);continue}if(e[A]==118){++A,A+=vf(T,A,1),R=T.c,T.b>T.c&&Ou(t.n,(D?\"!v\":\"v\")+(\"{\"+T.c+\"-\"+T.b+\"}\")),!D&&R<=14?t.a=R:T.b>T.c||Ou(t.n,(D?\"!v\":\"v\")+R);continue}if(e[A]==94){if(++A,f=e[A++]-48,f<1||f>3)throw At(new V1(\"SmilesParser: Unsupported hybridization. Position:\"+A));l=f==1?Q0:f==2?s8:Sn,D||(l=V(Li,Jn(l))),t.c=Y(t.c,l);continue}if(e[A]==36){if(!D)throw At(new V1(\"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+=WR(t,e,A,t.f);continue}if(P&&(e[A]==59||e[A]==38)){t.r=!0,++A;continue}if(P&&e[A]==44&&$X(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 V1(\"SmilesParser: alternative atom definitions not supported. (Tip: enumerate SMARTS): '\"+String.fromCharCode(e[A]&w1)+V6+A)):At(new V1(\"SmilesParser: unexpected character inside brackets: '\"+String.fromCharCode(e[A]&w1)+V6+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=h(Yt,at,6,4,15,1),this.b[0]=45,this.b[1]=135,this.b[2]=225,this.b[2]=315,this.c=R1(Yt,[te,at],[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=h(Yt,at,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=h(Yt,at,6,3,15,1),this.b[0]=60,this.b[1]=180,this.b[2]=300,this.c=R1(Yt,[te,at],[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=h(Yt,at,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=h(Yt,at,6,3,15,1),this.b[0]=60,this.b[1]=180,this.b[2]=300,this.c=R1(Yt,[te,at],[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=h(Yt,at,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=h(Yt,at,6,3,15,1),this.b[0]=60,this.b[1]=180,this.b[2]=300,this.c=R1(Yt,[te,at],[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=h(Yt,at,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=h(Yt,at,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=R1(Yt,[te,at],[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=h(Yt,at,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=h(Yt,at,6,2,15,1),this.b[0]=120,this.b[1]=240,this.c=R1(Yt,[te,at],[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=h(Yt,at,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=h(Yt,at,6,2,15,1),this.b[0]=90,this.b[1]=270,this.c=R1(Yt,[te,at],[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=h(Yt,at,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=h(Yt,at,6,3,15,1),this.b[0]=0,this.b[1]=120,this.b[2]=240,this.c=R1(Yt,[te,at],[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=h(Yt,at,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=h(Yt,at,6,3,15,1),this.b[0]=0,this.b[1]=120,this.b[2]=240,this.c=R1(Yt,[te,at],[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=h(Yt,at,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=h(Yt,at,6,2,15,1),this.b[0]=0,this.b[1]=180,this.c=R1(Yt,[te,at],[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=h(Yt,at,6,2,15,1),this.a[0]=50,this.a[1]=50):(this.b=h(Yt,at,6,2,15,1),this.b[0]=90,this.b[1]=270,this.c=R1(Yt,[te,at],[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=h(Yt,at,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=h(Yt,at,6,2,15,1),this.b[0]=0,this.b[1]=180,this.c=R1(Yt,[te,at],[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=h(Yt,at,6,2,15,1),this.a[0]=10,this.a[1]=90):(this.b=h(Yt,at,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=R1(Yt,[te,at],[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=h(Yt,at,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=h(Yt,at,6,1,15,1),this.b[0]=180,this.c=R1(Yt,[te,at],[16,6],15,[1,2],2),this.c[0][0]=165,this.c[0][1]=195,this.a=h(Yt,at,6,1,15,1),this.a[0]=100)}function cp(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E,X,tt,W,$,et,lt,st,ct,Pt,Tt;for(x=(x1(),$A),J(t.b,\"M  V30 BEGIN CTAB\"+x),J(t.b,pp+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,rU+(D+1)),(e.v==null?null:e.v[D])!=null){for(s=e.v==null?null:e.v[D],a=gt(V(e.B[D],1),0),J(t.b,a?\" NOT[\":\" [\"),j=0;j<s.length;j++)switch(j>0&&J(t.b,\",\"),C=(Y1(),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,\" \"+(Y1(),X0)[e.C[D]]);if(A?(J(t.b,\" \"+vt(nP*t.c*e.J[D].a)/nP),J(t.b,\" \"+vt(nP*t.c*-e.J[D].b)/nP),J(t.b,\" \"+vt(nP*t.c*-e.J[D].c)/nP)):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]),Tt=((e.u[D]&g8)>>>27)-1,Tt!=-1&&J(t.b,\" VAL=\"+(Tt==0?\"-1\":k1(Tt))),y=e.C[D],(y>=129&&y<=144||y==154)&&J(t.b,\" RGROUPS=(1 \"+(y==154?0:y>=142?y-141:y-125)+\")\"),b=V(rP,e.B[D]),G(b,384)==0?J(t.b,\" HCOUNT=2\"):G(b,128)==0?J(t.b,\" HCOUNT=1\"):G(b,1792)==0?J(t.b,\" HCOUNT=-1\"):G(b,1664)==0&&J(t.b,\" HCOUNT=1\"),st=V(e.B[D],6144),G(st,0)!=0&&(gt(V(st,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),T=0;T<e.r;T++){switch(J(t.b,rU+(T+1)),e.H[T]){case 1:tt=1,lt=0;break;case 2:tt=2,lt=0;break;case 4:tt=3,lt=0;break;case 129:tt=1,lt=3;break;case 257:tt=1,lt=1;break;case 386:tt=2,lt=2;break;case 8:tt=4,lt=0;break;case 16:tt=9,lt=0;break;default:tt=1,lt=0}g=e.G[T]&31,g!=0&&(g==8?tt=4:g==3?tt=5:g==9?tt=6:g==10?tt=7:tt=8),J(t.b,\" \"+tt+\" \"+(e.D[0][T]+1)+\" \"+(e.D[1][T]+1)),lt!=0&&J(t.b,\" CFG=\"+lt),et=e.G[T]&384,ct=et==0?0:et==256?1:2,ct!=0&&J(t.b,\" TOPO=\"+ct),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:rn((S=e.t[Q],c0(),S)))!=null){v=!0;break}if(v){for(J(t.b,\"M  V30 BEGIN SGROUP\"+x),m=0,U=0;U<e.q;U++)(e.t==null||e.t[U]==null?null:rn((p=e.t[U],c0(),p)))!=null&&(++m,J(t.b,rU+m+\" DAT \"+m+\" ATOMS=(1 \"+(U+1)+') FIELDNAME=\"'+by+'\" -'+x),J(t.b,'M  V30 FIELDDISP=\"'),Ov(t,A?t.c*e.J[U].a:0),Ov(t,A?t.c*e.J[U].b:0),J(t.b,'    DA    ALL  1       5\" FIELDDATA=\"'+(e.t==null||e.t[U]==null?null:rn((S=e.t[U],c0(),S)))+'\"'+x));J(t.b,\"M  V30 END SGROUP\"+x)}for(W=!1,n=0,E=h(F,k,6,32,15,1),r=h(F,k,6,32,15,1),L=0;L<e.f;L++)((e.u[L]&3)==1||(e.u[L]&3)==2)&&(W=!0,Pt=(e.u[L]&m1)>>18,Pt==1?++r[(e.u[L]&m1)>>18!=1&&(e.u[L]&m1)>>18!=2?-1:(e.u[L]&RA)>>20]:Pt==2?++E[(e.u[L]&m1)>>18!=1&&(e.u[L]&m1)>>18!=2?-1:(e.u[L]&RA)>>20]:++n);for(P=0,X=h(F,k,6,32,15,1),i=h(F,k,6,32,15,1),c=0;c<e.g;c++)dt(e,c)!=2&&((e.F[c]&3)==1||(e.F[c]&3)==2)&&(W=!0,Pt=(e.F[c]&768)>>8,Pt==1?++i[(e.F[c]&768)>>8!=1&&(e.F[c]&768)>>8!=2?-1:(e.F[c]&ln)>>10]:Pt==2?++X[(e.F[c]&768)>>8!=1&&(e.F[c]&768)>>8!=2?-1:(e.F[c]&ln)>>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]&m1)>>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(R=0;R<32;R++){if(E[R]!=0){for(J(t.b,Cp+(R+1)+\" ATOMS=(\"+E[R]),f=0;f<e.f;f++)((e.u[f]&3)==1||(e.u[f]&3)==2)&&(e.u[f]&m1)>>18==2&&((e.u[f]&m1)>>18!=1&&(e.u[f]&m1)>>18!=2?-1:(e.u[f]&RA)>>20)==R&&J(t.b,\" \"+(f+1));J(t.b,\")\"+x)}if(r[R]!=0){for(J(t.b,Mp+(R+1)+\" ATOMS=(\"+r[R]),f=0;f<e.f;f++)((e.u[f]&3)==1||(e.u[f]&3)==2)&&(e.u[f]&m1)>>18==1&&((e.u[f]&m1)>>18!=1&&(e.u[f]&m1)>>18!=2?-1:(e.u[f]&RA)>>20)==R&&J(t.b,\" \"+(f+1));J(t.b,\")\"+x)}if(X[R]!=0){for(J(t.b,Cp+(R+1)+\" BONDS=(\"+X[R]),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]&ln)>>10)==R&&J(t.b,\" \"+(l+1));J(t.b,\")\"+x)}if(i[R]!=0){for(J(t.b,Mp+(R+1)+\" BONDS=(\"+i[R]),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]&ln)>>10)==R&&J(t.b,\" \"+(l+1));J(t.b,\")\"+x)}}J(t.b,\"M  V30 END COLLECTION\"+x)}J(t.b,j6+x)}function aa(t){var e,A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E,X,tt,W,$,et,lt,st,ct,Pt,Tt,Kt,Ct,$t,Ut,Ht,Qt,Nt,b1,e1,Rt,Lt,j1,St,g1,y0,F1,s1;if(_3(t,!1),Jt(t,9,4),St=w.Math.max(J8(t.R.f),J8(t.R.g)),Jt(t,St,4),St==0){Jt(t,t.R.K?1:0,1),Jt(t,0,1),t.J=ML(t);return}for(g1=F1=y0=X=0,D=0;D<t.R.f;D++)if(P0(V(o0(t.R,D),1),0)){switch(K(t.R,D)){case 6:break;case 7:++g1;break;case 8:++F1;break;default:++y0}p1(t.R,D)!=0&&++X}for(Jt(t,t.R.f,St),Jt(t,t.R.g,St),Jt(t,g1,St),Jt(t,F1,St),Jt(t,y0,St),Jt(t,X,St),Q=0;Q<t.R.f;Q++)K(t.R,t.B[Q])==7&&P0(V(o0(t.R,t.B[Q]),1),0)&&Jt(t,Q,St);for(s=0;s<t.R.f;s++)K(t.R,t.B[s])==8&&P0(V(o0(t.R,t.B[s]),1),0)&&Jt(t,s,St);for(y=0;y<t.R.f;y++)K(t.R,t.B[y])!=6&&K(t.R,t.B[y])!=7&&K(t.R,t.B[y])!=8&&P0(V(o0(t.R,t.B[y]),1),0)&&(Jt(t,y,St),Jt(t,K(t.R,t.B[y]),8));for(l=0;l<t.R.f;l++)p1(t.R,t.B[l])!=0&&P0(V(o0(t.R,t.B[l]),1),0)&&(Jt(t,l,St),Jt(t,8+p1(t.R,t.B[l]),4));for(Lt=0,b=0,T=1;T<t.R.f;T++)t.F[T]==-1?st=0:(st=1+t.F[T]-b,b=t.F[T]),Lt<st&&(Lt=st);for(lt=J8(Lt),Jt(t,lt,4),b=0,c=1;c<t.R.f;c++)t.F[c]==-1?st=0:(st=1+t.F[c]-b,b=t.F[c]),Jt(t,st,lt);for($t=0;$t<2*t.I;$t++)Jt(t,t.D[$t],St);for(C=0;C<t.R.g;C++)E=(ee(t.R,t.C[C])&y8)!=0||l1(t.R,t.C[C])==16?1:G8(t.R,t.C[C])?0:w.Math.min(3,dt(t.R,t.C[C])),Jt(t,E,2);if(A=0,(t.Q&I1)==0)for(g=0;g<t.R.f;g++)t._[t.B[g]]!=0&&t._[t.B[g]]!=3&&++A;if(Jt(t,A,St),(t.Q&I1)==0)for(g=0;g<t.R.f;g++)t._[t.B[g]]!=0&&t._[t.B[g]]!=3&&(Jt(t,g,St),t.bb[t.B[g]]==0?Jt(t,t._[t.B[g]],3):(s1=t._[t.B[g]]==1?t.bb[t.B[g]]==1?4:6:t.bb[t.B[g]]==1?5:7,Jt(t,s1,3),Jt(t,t.ab[t.B[g]],3)));if(e=0,(t.Q&I1)==0)for(S=0;S<t.R.g;S++)t.j[t.C[S]]!=0&&t.j[t.C[S]]!=3&&(!WP(t.R,t.C[S])||l1(t.R,t.C[S])==1)&&++e;if(Jt(t,e,St),(t.Q&I1)==0)for(S=0;S<t.R.g;S++)t.j[t.C[S]]!=0&&t.j[t.C[S]]!=3&&(!WP(t.R,t.C[S])||l1(t.R,t.C[S])==1)&&(Jt(t,S,St),l1(t.R,t.C[S])==1?t.n[t.C[S]]==0?Jt(t,t.j[t.C[S]],3):(s1=t.j[t.C[S]]==1?t.n[t.C[S]]==1?4:6:t.n[t.C[S]]==1?5:7,Jt(t,s1,3),Jt(t,t.k[t.C[S]],3)):Jt(t,t.j[t.C[S]],2));for(Jt(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(eP(t,1),Jt(t,$,St),g=0;g<t.R.f;g++)ye(t.R,t.B[g])!=0&&(Jt(t,g,St),Jt(t,ye(t.R,t.B[g]),8));if(t.w=0,t.R.K){for(TA(t,0,St,I1,1,-1),TA(t,3,St,C0,1,-1),TA(t,4,St,120,4,3),TA(t,5,St,Ty,2,1),TA(t,6,St,1,1,-1),TA(t,7,St,rP,4,7),$=0,g=0;g<t.R.f;g++)MA(t.R,t.B[g])!=null&&++$;if($>0){for(eP(t,8),Jt(t,$,St),v=0;v<t.R.f;v++)if(R=MA(t.R,t.B[v]),R!=null)for(Jt(t,v,St),Jt(t,R.length,4),P=R,r=0,i=P.length;r<i;++r)n=P[r],Jt(t,n,8)}ni(t,9,St,384,2,7),ni(t,10,St,31,5,0),TA(t,11,St,ge,1,-1),ni(t,12,St,y8,8,9),TA(t,13,St,Li,3,14),TA(t,14,St,si,5,17),TA(t,16,St,f9,3,22)}for($=0,U=0;U<t.R.f;U++)t.a!=null&&t.a[t.B[U]]!=-1&&++$;if($!=0)for(eP(t,17),Jt(t,$,St),g=0;g<t.R.f;g++)t.a!=null&&t.a[t.B[g]]!=-1&&(Jt(t,g,St),Jt(t,t.a[t.B[g]],4));if(Tt=0,Pt=0,ct=0,(t.Q&8)!=0||(t.Q&re)!=0){for($=0,Rt=0,g=0;g<t.R.f;g++)if(Qt=_n(t.R,t.B[g]),Qt!=null){if(e1=Em(Qt),Qt.length>15||e1>127){Tt<Qt.length&&(Tt=w.Math.min(63,Qt.length)),Pt<e1&&(Pt=e1),++ct;continue}++$,Rt=w.Math.max(Rt,Qt.length)}if($!=0){for(Nt=J8(Rt),eP(t,18),Jt(t,$,St),Jt(t,Nt,4),v=0;v<t.R.f;v++)if(Qt=_n(t.R,t.B[v]),Qt!=null&&Qt.length<=15&&Em(Qt)<=127)for(Jt(t,v,St),Jt(t,Qt.length,Nt),Ct=0;Ct<Qt.length;Ct++)Jt(t,(Xt(Ct,Qt.length),Qt.charCodeAt(Ct)),7)}}for(t.R.K&&(TA(t,19,St,i9,3,25),ni(t,20,St,SP,3,17)),$=0,L=0;L<t.R.f;L++)FA(t.R,t.B[L])!=0&&++$;if($!=0)for(eP(t,21),Jt(t,$,St),f=0;f<t.R.f;f++)FA(t.R,t.B[f])!=0&&(Jt(t,f,St),Jt(t,FA(t.R,t.B[f])>>4,2));if(t.R.K&&(TA(t,22,St,Ur,1,-1),ni(t,23,St,h8,1,-1),ni(t,24,St,AU,2,21)),(t.Q&16)!=0){for(f=0;f<t.R.f;f++)if(r0(t.R,t.B[f])){for(eP(t,25),n=0;n<t.R.f;n++)Jt(t,r0(t.R,t.B[n])?1:0,1);break}}if(Ut=B_(t),Ut!=null){for($=0,S=0;S<t.R.g;S++)Ut[t.C[S]]&&++$;for(eP(t,26),Jt(t,$,St),p=0;p<t.R.g;p++)Ut[t.C[p]]&&Jt(t,p,St)}for(t.R.K&&TA(t,27,St,Pe,1,-1),$=0,x=0;x<t.R.g;x++)l1(t.R,t.C[x])==16&&++$;if($!=0)for(eP(t,28),Jt(t,$,St),S=0;S<t.R.g;S++)l1(t.R,t.C[S])==16&&Jt(t,S,St);for(t.R.K&&(TA(t,29,St,c8,2,30),TA(t,30,St,rr,7,32),TA(t,32,St,m6,2,44),TA(t,33,St,Vf,5,39),TA(t,34,St,ZQ,1,-1),ni(t,35,St,Ef,1,-1),ni(t,36,St,96,2,5)),$=0,a=0;a<t.R.g;a++)(l1(t.R,t.C[a])==32||l1(t.R,t.C[a])==64)&&++$;if($!=0)for(eP(t,37),Jt(t,$,St),j=0;j<t.R.g;j++)(l1(t.R,t.C[j])==32||l1(t.R,t.C[j])==64)&&(Jt(t,j,St),Jt(t,l1(t.R,t.C[j])==32?0:1,1));if(t.b&&(t.Q&16)!=0){for($=0,tt=0,g=0;g<t.R.f;g++){for(W=0,Ht=O(t.R,t.B[g]);Ht<Mt(t.R,t.B[g]);Ht++)r0(t.R,_(t.R,t.B[g],Ht))&&(Kt=Ht-O(t.R,t.B[g]),W|=1<<Kt,tt=w.Math.max(tt,Kt+1));W!=0&&++$}if($!=0)for(eP(t,38),Jt(t,$,St),Jt(t,tt,3),f=0;f<t.R.f;f++){for(W=0,Ht=O(t.R,t.B[f]);Ht<Mt(t.R,t.B[f]);Ht++)r0(t.R,_(t.R,t.B[f],Ht))&&(Kt=Ht-O(t.R,t.B[f]),W|=1<<Kt);W!=0&&(Jt(t,f,St),Jt(t,W,tt))}}if(t.R.K&&TA(t,39,St,F2,4,47),ct!=0){for(Nt=J8(Tt),j1=J8(Pt),eP(t,40),Jt(t,ct,St),Jt(t,Nt,6),Jt(t,j1,16),f=0;f<t.R.f;f++)if(et=_n(t.R,t.B[f]),et!=null)for(Jt(t,f,St),b1=w.Math.min(63,et.length),Jt(t,b1,Nt),Ct=0;Ct<b1;Ct++)Jt(t,(Xt(Ct,et.length),et.charCodeAt(Ct)),j1)}Jt(t,0,1),t.J=ML(t)}function i6(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E,X,tt,W,$,et,lt,st,ct,Pt,Tt,Kt,Ct,$t,Ut,Ht,Qt,Nt,b1,e1,Rt,Lt,j1,St,g1;for(this.b=new y3((Pt=ky,Pt)),Ht=(x1(),$A),ut(t,15),lt=!0,P=0;P<t.f;P++)if((t.u[P]&3)!=0&&(t.u[P]&3)!=3&&(t.u[P]&m1)>>18!=1){lt=!1;break}if(Kt=-1,lt){for(E=h(F,k,6,32,15,1),Ct=0,r=0;r<t.f;r++)if((t.u[r]&3)!=0&&(t.u[r]&3)!=3&&(t.u[r]&m1)>>18==1){tt=(t.u[r]&m1)>>18!=1&&(t.u[r]&m1)>>18!=2?-1:(t.u[r]&RA)>>20,++E[tt],Ct<E[tt]&&(Ct=E[tt],Kt=tt);break}}for(this.a=A||new V0,Ut=t.P!=null?t.P:\"\",J(this.a,Ut+Ht),J(this.a,\"Actelion Java MolfileCreator 1.0\"+Ht+Ht),g0(this,t.q),g0(this,t.r),J(this.a,\"  0  0\"),g0(this,lt?0:1),J(this.a,\"  0  0  0  0  0999 V2000\"+Ht),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(X=1,W)if(e!=0)X=e;else if(v=wP(t,t.q,t.r,(Y1(),wn)),v!=0)(v<1||v>3)&&(X=1.5/v);else{for($t=Ve,r=1;r<t.q;r++)for(D=0;D<r;D++)p=t.J[D].a-t.J[r].a,x=t.J[D].b-t.J[r].b,a=t.J[D].c-t.J[r].c,S=p*p+x*x+a*a,$t>S&&($t=S);X=3/$t}for(U=0;U<t.q;U++)W?(zu(this,X*t.J[U].a),zu(this,X*-t.J[U].b),zu(this,X*-t.J[U].c)):J(this.a,\"    0.0000    0.0000    0.0000\"),(t.v==null?null:t.v[U])!=null?J(this.a,\" L  \"):gt(V(t.B[U],1),0)?J(this.a,\" A  \"):t.C[U]>=129&&t.C[U]<=144||t.C[U]==154?J(this.a,\" R# \"):(c=(Y1(),X0)[t.C[U]],J(this.a,\" \"+c),c.length==1?J(this.a,\"  \"):c.length==2&&J(this.a,\" \")),J(this.a,\" 0  0  0\"),$=V(rP,t.B[U]),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[U],ge),0)?\"  1\":\"  0\"),g1=((t.u[U]&g8)>>>27)-1,g1==-1?J(this.a,\"  0\"):g1==0?J(this.a,\" 15\"):g0(this,g1),J(this.a,\"  0  0  0\"),g0(this,w.Math.abs(t.w[U])),J(this.a,\"  0  0\"+Ht);for(R=0;R<t.r;R++){switch(t.H[R]){case 1:Nt=1,Lt=0;break;case 2:Nt=2,Lt=0;break;case 4:Nt=3,Lt=0;break;case 129:Nt=1,Lt=6;break;case 257:Nt=1,Lt=1;break;case 386:Nt=2,Lt=3;break;case 8:Nt=4,Lt=0;break;case 16:Nt=8,Lt=0;break;default:Nt=1,Lt=0}lt&&(Lt==1||Lt==6)&&(r=t.D[0][R],(t.u[r]&m1)>>18==2?Lt=0:(t.u[r]&m1)>>18==1&&((t.u[r]&m1)>>18!=1&&(t.u[r]&m1)>>18!=2?-1:(t.u[r]&RA)>>20)!=Kt&&(Lt=4)),b=t.G[R]&31,b!=0&&(b==8?Nt=4:b==3?Nt=5:b==9?Nt=6:b==10?Nt=7:Nt=8),e1=t.G[R]&384,St=e1==0?0:e1==256?1:2,g0(this,1+t.D[0][R]),g0(this,1+t.D[1][R]),g0(this,Nt),g0(this,Lt),J(this.a,\"  0\"),g0(this,St),J(this.a,\"  0\"+Ht)}for(Qt=0,L=0;L<t.q;L++)t.s[L]!=0&&++Qt;if(Qt!=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,Qt))),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&w1),--Qt,(++C==8||Qt==0)&&(C=0,J(this.a,Ht)));for(Qt=0,s=0;s<t.q;s++)t.A[s]==0||++Qt;if(Qt!=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,Qt))),J(this.a,\" \"),g0(this,r+1),J(this.a,\" \"),g0(this,t.A[r]),--Qt,(++C==8||Qt==0)&&(C=0,J(this.a,Ht)));for(Qt=0,y=0;y<t.q;y++)(t.u[y]&48)!=0&&++Qt;if(Qt!=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,Qt))),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\")}--Qt,(++C==8||Qt==0)&&(C=0,J(this.a,Ht))}}for(Qt=0,l=0;l<t.q;l++)(t.C[l]>=129&&t.C[l]<=144||t.C[l]==154)&&++Qt;if(Qt!=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,Qt))),J(this.a,\" \"),g0(this,r+1),J(this.a,\" \"),g0(this,m==154?0:m>=142?m-141:m-125),--Qt,(++C==8||Qt==0)&&(C=0,J(this.a,Ht)));if(t.K){for(Qt=0,r=0;r<t.q;r++)gt(V(t.B[r],120),0)&&++Qt;if(Qt!=0)for(C=0,D=0;D<t.q;D++)b1=V(t.B[D],120),G(b1,0)!=0&&(C==0&&(J(this.a,\"M  RBC\"),g0(this,w.Math.min(8,Qt))),J(this.a,\" \"),g0(this,D+1),G(b1,112)==0?J(this.a,\"  -1\"):G(b1,8)==0?J(this.a,\"   1\"):G(b1,104)==0?J(this.a,\"   2\"):G(b1,88)==0?J(this.a,\"   3\"):G(b1,56)==0&&J(this.a,\"   4\"),--Qt,(++C==8||Qt==0)&&(C=0,J(this.a,Ht)));for(T=0;T<t.q;T++)if(g=t.v==null?null:t.v[T],g!=null){for(J(this.a,\"M  ALS \"),g0(this,T+1),g0(this,g.length),J(this.a,gt(V(t.B[T],1),0)?\" T \":\" F \"),et=0;et<g.length;et++)switch(st=(Y1(),X0)[g[et]],st.length){case 1:J(this.a,st+\"   \");break;case 2:J(this.a,st+\"  \");break;case 3:J(this.a,st+\" \");break;default:J(this.a,\"   ?\")}J(this.a,Ht)}for(Qt=0,i=0;i<t.q;i++)gt(V(t.B[i],6144),0)&&++Qt;if(Qt!=0)for(C=0,D=0;D<t.q;D++)j1=V(t.B[D],6144),G(j1,0)!=0&&(C==0&&(J(this.a,\"M  SUB\"),g0(this,w.Math.min(8,Qt))),J(this.a,\" \"),g0(this,D+1),gt(V(j1,C0),0)?J(this.a,\"   \"+(t.e[D]+1)):J(this.a,\"  -2\"),--Qt,(++C==8||Qt==0)&&(C=0,J(this.a,Ht)))}for(Qt=0,f=0;f<t.q;f++)(t.t==null||t.t[f]==null?null:rn((Tt=t.t[f],c0(),Tt)))!=null&&++Qt;if(Qt!=0)for(Rt=0,n=0;n<t.q;n++)st=t.t==null||t.t[n]==null?null:rn((ct=t.t[n],c0(),ct)),st!=null&&(++Rt,J(this.a,\"M  STY  1 \"),g0(this,Rt),J(this.a,\" DAT\"),J(this.a,Ht),J(this.a,\"M  SLB  1 \"),g0(this,Rt),J(this.a,\" \"),g0(this,Rt),J(this.a,Ht),J(this.a,\"M  SAL \"),g0(this,Rt),J(this.a,\"  1 \"),g0(this,n+1),J(this.a,Ht),J(this.a,\"M  SDT \"),g0(this,Rt),J(this.a,\" \"),J(this.a,by),J(this.a,Ht),J(this.a,\"M  SDD \"),g0(this,Rt),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,Ht),J(this.a,\"M  SED \"),g0(this,Rt),J(this.a,\" \"),J(this.a,st),J(this.a,Ht));J(this.a,D9+Ht)}function f6(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E,X,tt,W,$,et,lt,st,ct,Pt,Tt,Kt,Ct,$t,Ut,Ht,Qt,Nt,b1,e1,Rt,Lt,j1,St;e1=null,l=null;try{if(t.f=null,t.j&&(ki(t.j),je(t.j,!1)),tt=p=K1(e),tt==null||(p=K1(e))==null||(p=K1(e))==null||(t.k=p.includes(\"From CSD data. Using bond type 'Any'\"),t.e=p.includes(\"From CSD data.\"),(p=K1(e))==null))return!1;t.g=!1,t.d=t.a;try{W=c1(v1((pt(0,3,p.length),p.substr(0,3))),o1,It),$=c1(v1((pt(3,6,p.length),p.substr(3,3))),o1,It),et=H9(v1((pt(6,9,p.length),p.substr(6,3)))),t.d=t.d|H9(v1((pt(12,15,p.length),p.substr(12,3))))==1,t.g=p.length>=39&&p.startsWith(\"V3000\",34)}catch(g1){if(g1=t0(g1),Zt(g1,19))return!1;throw At(g1)}if(t.g)return Pt=B$(t,e),$2(t.j,tt),Pt;if(!t.j&&(t.j=new zA(W,$)),$2(t.j,tt),t.d||(t.j.L=!0),W==0){for(;p!=null&&!(A1(p,D9)||A1(p,PU)||A1((Xt(1,p.length+1),p.substr(1)),\"$\"));)p=K1(e);return!0}for(v=0;v<W;v++){if((p=K1(e))==null)return!1;switch(Lt=Qn(v1((pt(0,10,p.length),p.substr(0,10)))),j1=Qn(v1((pt(10,20,p.length),p.substr(10,10)))),St=Qn(v1((pt(20,30,p.length),p.substr(20,10)))),n=W0(t.j,Lt,-j1,-St),S=v1((pt(31,34,p.length),p.substr(31,3))),A1(S,\"A\")||A1(S,\"*\")?T1(t.j,n,1,!0):A1(S,\"Q\")?(x=h(F,k,6,1,15,1),x[0]=6,Tf(t.j,n,x,!0)):(i=SA(S,67),K0(t.j,n,i)),X=H9(v1((pt(34,36,p.length),p.substr(34,2)))),X!=0&&jr(t.j,n,(Y1(),U9)[K(t.j,n)]+X),L=H9(v1((pt(36,39,p.length),p.substr(36,3)))),L!=0&&(L==4?Ne(t.j,n,32):E0(t.j,n,4-L)),a=p.length<63?0:H9(v1((pt(60,63,p.length),p.substr(60,3)))),Ze(t.j,n,a,!1),g=p.length<45?0:H9(v1((pt(42,45,p.length),p.substr(42,3)))),g){case 0:break;case 1:T1(t.j,n,768,!0);break;case 2:T1(t.j,n,128,!0);break;case 3:T1(t.j,n,384,!0);break;default:T1(t.j,n,896,!0)}p.length>=48&&(Xt(47,p.length),p.charCodeAt(47)==49)&&T1(t.j,n,ge,!0),b1=p.length<51?0:H9(v1((pt(48,51,p.length),p.substr(48,3)))),b1!=0&&(e1==null&&(e1=h(F,k,6,W,15,1)),e1[n]=b1)}for(R=0;R<$;R++){if((p=K1(e))==null)return!1;P=c1(v1((pt(0,3,p.length),p.substr(0,3))),o1,It)-1,r=c1(v1((pt(3,6,p.length),p.substr(3,3))),o1,It)-1,Q=c1(v1((pt(6,9,p.length),p.substr(6,3))),o1,It),$t=p.length<12?0:H9(v1((pt(9,12,p.length),p.substr(9,3)))),Nt=p.length<18?0:H9(v1((pt(15,18,p.length),p.substr(15,3)))),Q==8&&(t.k||_0(t.j,P)||_0(t.j,r))&&(Q=9),GR(t,P,r,Q,$t,Nt)}for(m=0;m<et;m++)if((p=K1(e))==null)return!1;if((p=K1(e))==null)return(t.i&1)!=0&&(t.f=Qu(t.j)),vk(t,e1),t.d||ut(t.j,15),!0;for(;p!=null&&!(A1(p,D9)||A1(p,PU));){if(p.startsWith(\"M  CHG\")&&(b=c1(v1((pt(6,9,p.length),p.substr(6,3))),o1,It),b>0))for(A=10,Rt=14,j=1;j<=b;++j,A+=8,Rt+=8)n=c1(v1((pt(A,A+3,p.length),p.substr(A,A+3-A))),o1,It)-1,U=c1(v1((pt(Rt,Rt+3,p.length),p.substr(Rt,Rt+3-Rt))),o1,It),E0(t.j,n,U);if(p.startsWith(\"M  ISO\")&&(b=c1(v1((pt(6,9,p.length),p.substr(6,3))),o1,It),b>0))for(A=10,Rt=14,j=1;j<=b;++j,A+=8,Rt+=8)n=c1(v1((pt(A,A+3,p.length),p.substr(A,A+3-A))),o1,It)-1,E=c1(v1((pt(Rt,Rt+3,p.length),p.substr(Rt,Rt+3-Rt))),o1,It),jr(t.j,n,E);if(p.startsWith(\"M  RAD\")&&(b=c1(v1((pt(6,9,p.length),p.substr(6,3))),o1,It),b>0))for(A=10,Rt=14,j=1;j<=b;++j,A+=8,Rt+=8)switch(n=c1(v1((pt(A,A+3,p.length),p.substr(A,A+3-A))),o1,It)-1,ct=c1(v1((pt(Rt,Rt+3,p.length),p.substr(Rt,Rt+3-Rt))),o1,It),ct){case 1:Ne(t.j,n,16);break;case 2:Ne(t.j,n,32);break;case 3:Ne(t.j,n,48)}if((p.startsWith(\"M  RBC\")||p.startsWith(\"M  RBD\"))&&(b=c1(v1((pt(6,9,p.length),p.substr(6,3))),o1,It),b>0))for(A=10,Rt=14,j=1;j<=b;++j,A+=8,Rt+=8)switch(n=c1(v1((pt(A,A+3,p.length),p.substr(A,A+3-A))),o1,It)-1,Tt=c1(v1((pt(Rt,Rt+3,p.length),p.substr(Rt,Rt+3-Rt))),o1,It),Tt){case 3:case-1:T1(t.j,n,112,!0);break;case 1:T1(t.j,n,8,!0);break;case 2:T1(t.j,n,104,!0);break;case 4:T1(t.j,n,56,!0)}if(p.startsWith(\"M  ALS\")&&(n=c1(v1((pt(7,10,p.length),p.substr(7,3))),o1,It)-1,n>=0)){for(lt=c1(v1((pt(10,13,p.length),p.substr(10,3))),o1,It),f=(Xt(14,p.length),p.charCodeAt(14)==84),b1=h(F,k,6,lt,15,1),A=16,j=0;j<lt;++j,A+=4)Qt=v1((pt(A,A+4,p.length),p.substr(A,A+4-A))),b1[j]=SA(Qt,1);K0(t.j,n,6),Tf(t.j,n,b1,f)}if(p.startsWith(\"M  SUB\")&&(b=c1(v1((pt(6,9,p.length),p.substr(6,3))),o1,It),b>0)){for(A=10,Rt=14,j=1;j<=b;++j,A+=8,Rt+=8)if(n=c1(v1((pt(A,A+3,p.length),p.substr(A,A+3-A))),o1,It)-1,Ut=c1(v1((pt(Rt,Rt+3,p.length),p.substr(Rt,Rt+3-Rt))),o1,It),Ut==-2)T1(t.j,n,I1,!0);else if(Ut>0){for(Ht=0,D=0;D<t.j.r;D++)(z(t.j,0,D)==n||z(t.j,1,D)==n)&&++Ht;Ut>Ht&&T1(t.j,n,C0,!0)}}if(p.startsWith(\"M  RGP\")&&(b=c1(v1((pt(6,9,p.length),p.substr(6,3))),o1,It),b>0))for(A=10,Rt=14,j=1;j<=b;++j,A+=8,Rt+=8)n=c1(v1((pt(A,A+3,p.length),p.substr(A,A+3-A))),o1,It)-1,Kt=c1(v1((pt(Rt,Rt+3,p.length),p.substr(Rt,Rt+3-Rt))),o1,It),Kt>=1&&Kt<=20&&K0(t.j,n,SA(\"R\"+Kt,2));(p.startsWith(\"M  SAL\")&&p.length>=17||p.startsWith(\"M  SDT\")&&p.length>=12||p.startsWith(\"M  SED\")&&p.length>=12)&&(!l&&(l=new lP),Ct=(pt(7,10,p.length),p.substr(7,3)),s=(C=Ct,XP(G9(l,C))),s||(s=new W2,ze(l,Ct,s)),p.startsWith(\"M  SAL\")&&p.startsWith(\"  1\",10)?s.a=c1(v1((pt(13,17,p.length),p.substr(13,4))),o1,It):p.startsWith(\"M  SDT\")?s.b=(Xt(11,p.length+1),p.substr(11)).startsWith(by):p.startsWith(\"M  SED\")&&(s.c=v1((Xt(11,p.length+1),p.substr(11))))),p=K1(e)}}catch(g1){if(g1=t0(g1),Zt(g1,19))return T=g1,Z9(T,(x1(),gi),\"\"),!1;throw At(g1)}if(l)for(y=(st=new fD(l).a.$c().Tb(),new DD(st));y.a.ad();)s=(c=y.a.bd(),c.ed()),s.b&&s.a!=0&&s.c!=null&&u8(t.j,s.a-1,s.c);return t.e&&(VZ(t),GW(t)),(t.i&1)!=0&&(t.f=Qu(t.j)),vk(t,e1),ut(t.j,15),!0}function D6(t,e,A,n,P,r,i){var f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E,X,tt,W,$,et,lt,st,ct,Pt,Tt,Kt,Ct,$t,Ut,Ht,Qt,Nt,b1,e1,Rt,Lt,j1,St,g1,y0,F1,s1,T0;for(t.k=e,ki(t.k),t.s=new LP,t.a=new Zg,t.r&&un(t.r,0),t.b=0,t.p=!1,Q=t.q!=0,Ht=null,l=h(F,k,6,32,15,1),l[0]=-1,Qt=h(F,k,6,16,15,1),e1=h(F,k,6,16,15,1),b1=h(F,k,6,16,15,1),Nt=h(F,k,6,16,15,1),W=0;W<16;W++)Qt[W]=-1;for(s=0,p=-1,Rt=!1,st=!1,E=!1,v=0,g=1,c=0;A[n]<=32;)++n;for(;n<P;){if(Lt=A[n++]&w1,BB(Lt)||Lt==42||Lt==63||Lt==33&&Q&&Rt||Lt==35&&Q&&Rt||Lt==36&&Q&&Rt){if(y=new WF(t,t.j|t.q),Rt)if((t.j&128)!=0){if(j=new H7(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=n_(y,A,n,P,Q);if(Rt=!1,y.q&&N(y.q,0)){p=l[v],l[v]=e.q,RD(e,y.q?N(y.q,0):null),p!=-1&&g!=512&&(T=O0(t.k,p,p,g),c!=0&&(t.p=!0,Ge(t.k,T,c,!0),Cs(t.k,T))),g=1,c=0;continue}if(y.d==-1&&Lt!=63)throw At(new V1(\"SmilesParser: unknown element label found. Position:\"+(n-1)));y.r&&(t.p=!0),L=L$(y,t.k,Lt,n),z0(t.k,L)&&++t.b,p=l[v],p!=-1&&g!=512&&(T=O0(t.k,p,L,g),c!=0&&(t.p=!0,Ge(t.k,T,c,!0),Cs(t.k,T))),g=1,c=0,l[v]=L,s!=0&&(jr(t.k,L,s),s=0),i&&($t=Ht?le(Ht,k1(p)):null,$t&&Ku($t,L,(ct=n,y.d==1&&ye(t.k,L)==0,ct)),y.p&&(!Ht&&(Ht=new lP),X=y.g==9?0:y.g,ze(Ht,k1(L),new ck(t,L,n-2,p,X,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(Rt)throw At(new V1(\"SmilesParser: unexpected bond symbol inside square brackets: '\"+String.fromCharCode(Lt)+V6+(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++]&w1,Lt==64)c|=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 V1(\"SmilesParser: bond symbol '\"+String.fromCharCode(Lt)+\"' not allowed after '!'. Position:\"+(n-1)));else if(Lt==64?c|=256:Lt==61?g=2:Lt==35?g=4:Lt==36?g=32:Lt==58?g=8:Lt==126?c|=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(c|=(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?(c|=16,n+=3):(c|=(A[n+1]&w1)==61?2:(A[n+1]&w1)==35?4:(A[n+1]&w1)==36?32:(A[n+1]&w1)==58?8:(A[n+1]&w1)==62?16:(A[n+1]&w1)==126?127:1,n+=2);if(A[n]==59){++n,Lt=A[n++]&w1;continue}C!=0&&(c|=127&~C);break}continue}if(Lt<=32){n=P;continue}if(Zn(Lt)){if(Tt=Lt-48,Rt){for(;n<P&&Zn(A[n]&w1);)Tt=10*Tt+A[n]-48,++n;s=Tt}else{if(m=st?n-3:n-2,a=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,st&&n<P&&Zn(A[n]&w1)&&(Tt=10*Tt+A[n]-48,st=!1,++n),Tt>=Qt.length){if(Tt>=100)throw At(new V1(\"SmilesParser: ringClosureAtom number out of range: \"+Tt));for(Kt=Qt.length,Pt=Qt.length;Pt<=Tt;)Pt=w.Math.min(100,Pt+16);for(Qt=(n8(Pt),RP(Qt,h(F,k,6,Pt,15,1),0,Pt)),e1=(n8(Pt),RP(e1,h(F,k,6,Pt,15,1),0,Pt)),b1=(n8(Pt),RP(b1,h(F,k,6,Pt,15,1),0,Pt)),Nt=(n8(Pt),RP(Nt,h(F,k,6,Pt,15,1),0,Pt)),$=Kt;$<Pt;$++)Qt[$]=-1}if(Qt[Tt]==-1)Qt[Tt]=l[v],e1[Tt]=n-1,b1[Tt]=a?g:-1,Nt[Tt]=a?c:0;else{if(Qt[Tt]==l[v])throw At(new V1(\"SmilesParser: ring closure to same atom\"));i&&Ht&&($t=le(Ht,k1(Qt[Tt])),$t&&Ku($t,l[v],e1[Tt]),$t=le(Ht,k1(l[v])),$t&&Ku($t,Qt[Tt],n-1)),b1[Tt]!=-1?g=b1[Tt]:g==257?g=129:g==129&&(g=257),f=Qt[Tt],D=l[v],T=(T0=O0(t.k,f,D,g),SD(t.s,f+\"_\"+D,B(d(F,1),k,6,15,[e1[Tt],n-1])),SD(t.s,D+\"_\"+f,B(d(F,1),k,6,15,[e1[Tt],n-1])),hv(t.a,f),hv(t.a,D),T0),Nt[Tt]!=0&&(c=Nt[Tt]),c!=0&&(t.p=!0,Ge(t.k,T,Nt[Tt],!0),Cs(t.k,T)),Qt[Tt]=-1}g=1,c=0}continue}if(Lt==43)throw At(new V1(\"SmilesParser: '+' found outside brackets. Position:\"+(n-1)));if(Lt==40){if(l[v]==-1){E=!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(!E)throw At(new V1(\"SmilesParser: Closing ')' without opening counterpart. Position:\"+(n-1)));l[0]=-1,E=!1;continue}--v;continue}if(Lt==91){Rt=!0;continue}if(Lt==93)throw At(new V1(\"SmilesParser: closing bracket at unexpected position:\"+(n-1)));if(Lt==37){st=!0;continue}throw At(new V1(\"SmilesParser: unexpected character outside brackets: '\"+String.fromCharCode(Lt)+qp+(n-1)))}if(g!=1)throw At(new V1(\"SmilesParser: dangling open bond; position:\"+n));for(et=0;et<Qt.length;et++)if(Qt[et]!=-1)throw At(new V1(\"SmilesParser: dangling ring closure: \"+et+\"; position:\"+n));for(x=Qu(t.k),t.k.S=!0,ut(t.k,1),U=0;U<t.k.q;U++)if(_n(t.k,U)!=null)if(S=X3(t.k,U)[0],t.p||t.q==2){if(S!=9)if(t.i)for(tt=0;tt<S;tt++)O0(t.k,U,W9(t.k,1),1);else S==0&&T1(t.k,U,1792,!0),S==1&&T1(t.k,U,1664,!0),S==2&&T1(t.k,U,1408,!0),S==3&&T1(t.k,U,896,!0)}else{if(S==9&&(S=0),!_0(t.k,U)&&(!z0(t.k,U)||K(t.k,U)==6&&p1(t.k,U)==0)){for(s1=Yu(K(t.k,U)),R=!1,j1=G1(t.k,U),j1-=Fu(t.k,U,j1),j1+=S,z0(t.k,U)&&++j1,g1=s1,y0=0,F1=g1.length;y0<F1;++y0)if(St=g1[y0],j1<=St){R=!0,St==j1+2?Ne(t.k,U,48):St==j1+1?Ne(t.k,U,32):(St!=j1||St!=s1[0])&&XA(t.k,U,j1);break}R||XA(t.k,U,j1)}if(t.i||!aL(t.k,U))for(tt=0;tt<S;tt++)O0(t.k,U,W9(t.k,1),1)}else!t.i&&(t.p||t.q==2)&&(S=R3(t.k,U),S>=1&&T1(t.k,U,128,!0),S>=2&&T1(t.k,U,256,!0),S>=3&&T1(t.k,U,512,!0),S>=4&&T1(t.k,U,re,!0));if(!t.i&&(t.p||t.q==2)&&g5(t.k,!1),ut(t.k,1),JX(t),Va(t,Q,t.p),t.k.t=null,t.k.S=!1,i&&(__(t),Ht)){for(Ut=(Ct=new fD(Ht).a.$c().Tb(),new DD(Ct));Ut.a.ad();)$t=(b=Ut.a.bd(),b.ed()),ce(t.k,x[$t.a],uZ($t,x),!1);sD(t.k,0)}sD(t.k,0),r&&(lt=new Y8(t.d),gt(t.n,0)&&pq(lt,t.n),Ar(lt,t.k),i&&H3(t.k)),(t.p||t.q==2)&&(je(t.k,!0),Bj(t.k),_b(t.k))}function wp(){wp=B1,RU=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,[PV,\"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,[PV,\"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,[rV,\"gGa@@dYs@XHFJIBDQbUeHPbLRl@!gFQ@@eNUPFJIBDQbUeHPbLRls@`#qbq] qfQk#!B@AOIDW}l@tD@Dp !B_qL@Dw}l_qNcDP##\"]),B(d(it,1),Dt,2,6,[rV,\"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=B1,oE=new nD,DE=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\"]),UE=B(d(Yt,1),at,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]),uE=B(d(q,2),w8,10,0,[null,B(d(q,1),I,6,15,[1]),B(d(q,1),I,6,15,[0]),B(d(q,1),I,6,15,[1]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[4]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[1]),B(d(q,1),I,6,15,[0]),B(d(q,1),I,6,15,[1]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[4]),B(d(q,1),I,6,15,[3,5]),B(d(q,1),I,6,15,[2,4,6]),B(d(q,1),I,6,15,[1,3,5,7]),B(d(q,1),I,6,15,[0]),B(d(q,1),I,6,15,[1]),B(d(q,1),I,6,15,[2]),null,null,null,null,null,null,null,null,null,null,B(d(q,1),I,6,15,[2,3]),B(d(q,1),I,6,15,[2,4]),B(d(q,1),I,6,15,[3,5]),B(d(q,1),I,6,15,[2,4,6]),B(d(q,1),I,6,15,[1,3,5,7]),B(d(q,1),I,6,15,[0,2]),B(d(q,1),I,6,15,[1]),B(d(q,1),I,6,15,[2]),null,null,null,null,null,null,null,null,null,null,B(d(q,1),I,6,15,[1,2,3]),B(d(q,1),I,6,15,[2,4]),B(d(q,1),I,6,15,[3,5]),B(d(q,1),I,6,15,[2,4,6]),B(d(q,1),I,6,15,[1,3,5,7]),B(d(q,1),I,6,15,[0,2,4,6]),B(d(q,1),I,6,15,[1]),B(d(q,1),I,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(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2])]),QE=B(d(q,2),w8,10,0,[null,B(d(q,1),I,6,15,[1]),null,B(d(q,1),I,6,15,[1]),B(d(q,1),I,6,15,[2]),null,null,B(d(q,1),I,6,15,[-3]),B(d(q,1),I,6,15,[-2]),B(d(q,1),I,6,15,[-1]),null,B(d(q,1),I,6,15,[1]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[3]),null,B(d(q,1),I,6,15,[-3]),B(d(q,1),I,6,15,[-2]),B(d(q,1),I,6,15,[-1]),null,B(d(q,1),I,6,15,[1]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[2,3,4]),B(d(q,1),I,6,15,[2,3,4,5]),B(d(q,1),I,6,15,[2,3,6]),B(d(q,1),I,6,15,[2,3,4,7]),B(d(q,1),I,6,15,[2,3]),B(d(q,1),I,6,15,[2,3]),B(d(q,1),I,6,15,[2,3]),B(d(q,1),I,6,15,[1,2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[2,4]),B(d(q,1),I,6,15,[-3,3,5]),B(d(q,1),I,6,15,[-2]),B(d(q,1),I,6,15,[-1]),null,B(d(q,1),I,6,15,[1]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[4]),B(d(q,1),I,6,15,[3,5]),B(d(q,1),I,6,15,[6]),B(d(q,1),I,6,15,[4,6,7]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[2,4]),B(d(q,1),I,6,15,[1]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[2,4]),B(d(q,1),I,6,15,[-3,3,5]),B(d(q,1),I,6,15,[-2,4,6]),B(d(q,1),I,6,15,[-1]),null,B(d(q,1),I,6,15,[1]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[3,4]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[2,3]),B(d(q,1),I,6,15,[2,3]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[2,3]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[4]),B(d(q,1),I,6,15,[5]),B(d(q,1),I,6,15,[6]),B(d(q,1),I,6,15,[4,6,7]),B(d(q,1),I,6,15,[3,4]),B(d(q,1),I,6,15,[3,4]),B(d(q,1),I,6,15,[2,4]),B(d(q,1),I,6,15,[1,3]),B(d(q,1),I,6,15,[1,2]),B(d(q,1),I,6,15,[1,3]),B(d(q,1),I,6,15,[2,4]),B(d(q,1),I,6,15,[3,5]),B(d(q,1),I,6,15,[-2,2,4]),B(d(q,1),I,6,15,[-1,1]),null,B(d(q,1),I,6,15,[1]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[4]),B(d(q,1),I,6,15,[4,5]),B(d(q,1),I,6,15,[3,4,5,6]),B(d(q,1),I,6,15,[3,4,5,6]),B(d(q,1),I,6,15,[3,4,5,6]),B(d(q,1),I,6,15,[3,4,5,6]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[3,4]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[2,3]),B(d(q,1),I,6,15,[2,3]),B(d(q,1),I,6,15,[3])]),fE=B(d(it,1),Dt,2,6,[E6,S6,q6])}function Y1(){Y1=B1,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\"]),U9=B(d(Yt,1),at,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]),VV=B(d(q,1),I,6,15,[6]),HV=B(d(q,1),I,6,15,[2]),Lr=B(d(q,2),w8,10,0,[null,B(d(q,1),I,6,15,[1]),B(d(q,1),I,6,15,[0]),B(d(q,1),I,6,15,[1]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[4]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[1]),B(d(q,1),I,6,15,[0]),B(d(q,1),I,6,15,[1]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[4]),B(d(q,1),I,6,15,[3,5]),B(d(q,1),I,6,15,[2,4,6]),B(d(q,1),I,6,15,[1,3,5,7]),B(d(q,1),I,6,15,[0]),B(d(q,1),I,6,15,[1]),B(d(q,1),I,6,15,[2]),null,null,null,null,null,null,null,null,null,null,B(d(q,1),I,6,15,[2,3]),B(d(q,1),I,6,15,[2,4]),B(d(q,1),I,6,15,[3,5]),B(d(q,1),I,6,15,[2,4,6]),B(d(q,1),I,6,15,[1,3,5,7]),B(d(q,1),I,6,15,[0,2]),B(d(q,1),I,6,15,[1]),B(d(q,1),I,6,15,[2]),null,null,null,null,null,null,null,null,null,null,B(d(q,1),I,6,15,[1,2,3]),B(d(q,1),I,6,15,[2,4]),B(d(q,1),I,6,15,[3,5]),B(d(q,1),I,6,15,[2,4,6]),B(d(q,1),I,6,15,[1,3,5,7]),B(d(q,1),I,6,15,[0,2,4,6]),B(d(q,1),I,6,15,[1]),B(d(q,1),I,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(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[2])]),F4=B(d(q,2),w8,10,0,[null,B(d(q,1),I,6,15,[1]),null,B(d(q,1),I,6,15,[1]),B(d(q,1),I,6,15,[2]),null,null,B(d(q,1),I,6,15,[-3]),B(d(q,1),I,6,15,[-2]),B(d(q,1),I,6,15,[-1]),null,B(d(q,1),I,6,15,[1]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[3]),null,B(d(q,1),I,6,15,[-3]),B(d(q,1),I,6,15,[-2]),B(d(q,1),I,6,15,[-1]),null,B(d(q,1),I,6,15,[1]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[2,3,4]),B(d(q,1),I,6,15,[2,3,4,5]),B(d(q,1),I,6,15,[2,3,6]),B(d(q,1),I,6,15,[2,3,4,7]),B(d(q,1),I,6,15,[2,3]),B(d(q,1),I,6,15,[2,3]),B(d(q,1),I,6,15,[2,3]),B(d(q,1),I,6,15,[1,2]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[2,4]),B(d(q,1),I,6,15,[-3,3,5]),B(d(q,1),I,6,15,[-2]),B(d(q,1),I,6,15,[-1]),null,B(d(q,1),I,6,15,[1]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[4]),B(d(q,1),I,6,15,[3,5]),B(d(q,1),I,6,15,[6]),B(d(q,1),I,6,15,[4,6,7]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[2,4]),B(d(q,1),I,6,15,[1]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[2,4]),B(d(q,1),I,6,15,[-3,3,5]),B(d(q,1),I,6,15,[-2,4,6]),B(d(q,1),I,6,15,[-1]),null,B(d(q,1),I,6,15,[1]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[3,4]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[2,3]),B(d(q,1),I,6,15,[2,3]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[2,3]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[4]),B(d(q,1),I,6,15,[5]),B(d(q,1),I,6,15,[6]),B(d(q,1),I,6,15,[4,6,7]),B(d(q,1),I,6,15,[3,4]),B(d(q,1),I,6,15,[3,4]),B(d(q,1),I,6,15,[2,4]),B(d(q,1),I,6,15,[1,3]),B(d(q,1),I,6,15,[1,2]),B(d(q,1),I,6,15,[1,3]),B(d(q,1),I,6,15,[2,4]),B(d(q,1),I,6,15,[3,5]),B(d(q,1),I,6,15,[-2,2,4]),B(d(q,1),I,6,15,[-1,1]),null,B(d(q,1),I,6,15,[1]),B(d(q,1),I,6,15,[2]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[4]),B(d(q,1),I,6,15,[4,5]),B(d(q,1),I,6,15,[3,4,5,6]),B(d(q,1),I,6,15,[3,4,5,6]),B(d(q,1),I,6,15,[3,4,5,6]),B(d(q,1),I,6,15,[3,4,5,6]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[3,4]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[3]),B(d(q,1),I,6,15,[2,3]),B(d(q,1),I,6,15,[2,3]),B(d(q,1),I,6,15,[3])])}function zQ(t,e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E,X,tt,W,$,et,lt,st,ct,Pt,Tt,Kt,Ct,$t,Ut,Ht,Qt,Nt;if(t.K||t.yb(e,Ci(t.L,e),Z1(t.R,kt(t.L,e)),X1(t.R,jt(t.L,e))),st=null,p1(t.L,e)!=0&&($t=w.Math.abs(p1(t.L,e))==1?\"\":\"\"+w.Math.abs(p1(t.L,e)),st=p1(t.L,e)<0?$t+\"-\":$t+\"+\"),E=null,ct=o0(t.L,e),G(ct,0)!=0&&(gt(V(ct,KQ),0)&&(E=E==null?\"*\":E+\",*\"),gt(V(ct,XQ),0)&&(E=E==null?\"!*\":E+\",!*\"),gt(V(ct,ZQ),0)?E=E==null?\"ha\":E+\",ha\":gt(V(ct,2),0)?E=E==null?\"a\":E+\",a\":gt(V(ct,4),0)&&(E=E==null?\"!a\":E+\",!a\"),gt(V(ct,C0),0)&&(E=E==null?\"s\":E+\",s\"),gt(V(ct,rP),0)&&(j=V(ct,rP),G(j,1792)==0?E=E==null?\"h0\":E+\",h0\":G(j,1664)==0?E=E==null?\"h1\":E+\",h1\":G(j,1408)==0?E=E==null?\"h2\":E+\",h2\":G(j,128)==0?E=E==null?\"h>0\":E+\",h>0\":G(j,384)==0?E=E==null?\"h>1\":E+\",h>1\":G(j,896)==0?E=E==null?\"h>2\":E+\",h>2\":G(j,re)==0?E=E==null?\"h<3\":E+\",h<3\":G(j,1536)==0?E=E==null?\"h<2\":E+\",h<2\":G(j,1152)==0&&(E=E==null?\"h1-2\":E+\",h1-2\")),gt(V(ct,i9),0)&&(D=V(ct,i9),G(D,WQ)==0?E=E==null?\"c0\":E+\",c0\":G(D,Cf)==0?E=E==null?\"c+\":E+\",c+\":G(D,Mf)==0&&(E=E==null?\"c-\":E+\",c-\")),gt(V(ct,Li),0)&&(lt=V(ct,Li),G(lt,98304)==0?E=E==null?\"pi0\":E+\",pi0\":G(lt,81920)==0?E=E==null?\"pi1\":E+\",pi1\":G(lt,49152)==0?E=E==null?\"pi2\":E+\",pi2\":G(lt,Sn)==0&&(E=E==null?\"pi>0\":E+\",pi>0\")),gt(V(ct,si),0)&&(et=V(ct,si),G(et,_Q)==0?E=E==null?\"n1\":E+\",n1\":G(et,d2)==0?E=E==null?\"n2\":E+\",n2\":G(et,B2)==0?E=E==null?\"n3\":E+\",n3\":G(et,$Q)==0?E=E==null?\"n<3\":E+\",n<3\":G(et,qA)==0?E=E==null?\"n<4\":E+\",n<4\":G(et,yi)==0?E=E==null?\"n>1\":E+\",n>1\":G(et,SP)==0?E=E==null?\"n>2\":E+\",n>2\":G(et,Hf)==0?E=E==null?\"n>3\":E+\",n>3\":G(et,3276800)==0?E=E==null?\"n1-2\":E+\",n1-2\":G(et,2228224)==0?E=E==null?\"n1-3\":E+\",n1-3\":G(et,2490368)==0&&(E=E==null?\"n2-3\":E+\",n2-3\")),gt(V(ct,Vf),0)&&(l=V(ct,Vf),G(l,uy)==0?E=E==null?\"e0\":E+\",e0\":G(l,Qy)==0?E=E==null?\"e1\":E+\",e1\":G(l,Uy)==0?E=E==null?\"e2\":E+\",e2\":G(l,oy)==0?E=E==null?\"e3\":E+\",e3\":G(l,T6)==0?E=E==null?\"e<2\":E+\",e<2\":G(l,h6)==0?E=E==null?\"e<3\":E+\",e<3\":G(l,aQ)==0?E=E==null?\"e<4\":E+\",e<4\":G(l,v2)==0?E=E==null?\"e>0\":E+\",e>0\":G(l,Ly)==0?E=E==null?\"e>1\":E+\",e>1\":G(l,sy)==0?E=E==null?\"e>2\":E+\",e>2\":G(l,tU)==0?E=E==null?\"e>3\":E+\",e>3\":G(l,c6)==0?E=E==null?\"e1-2\":E+\",e1-2\":G(l,w6)==0?E=E==null?\"e1-3\":E+\",e1-3\":G(l,g6)==0&&(E=E==null?\"e2-3\":E+\",e2-3\")),gt(V(ct,120),0)&&(Pt=V(ct,120),G(Pt,112)==0?E=E==null?\"!r\":E+\",!r\":G(Pt,8)==0?E=E==null?\"r\":E+\",r\":G(Pt,96)==0?E=E==null?\"rb<3\":E+\",rb<3\":G(Pt,104)==0?E=E==null?\"rb2\":E+\",rb2\":G(Pt,88)==0?E=E==null?\"rb3\":E+\",rb3\":G(Pt,56)==0&&(E=E==null?\"rb4\":E+\",rb4\")),gt(V(ct,f9),0)&&(E=E==null?\"r\"+Te(q0(V(ct,f9),22)):E+\",\"+(\"r\"+Te(q0(V(ct,f9),22)))),gt(V(ct,rr),0)&&(E=zo(E,jZ(ct))),gt(V(ct,F2),0)&&(E=E==null?\"ox\"+Te(l0(q0(V(ct,F2),47),7)):E+\",\"+(\"ox\"+Te(l0(q0(V(ct,F2),47),7)))),gt(V(ct,Ur),0)&&(E=E==null?\"f\":E+\",f\")),ye(t.L,e)!=0&&(E=zo(E,\"\"+ye(t.L,e))),Ct=0,FA(t.L,e)!=0)switch(FA(t.L,e)){case 16:st=st==null?\"|\":st+\",|\";break;case 32:Ct=1;break;case 48:Ct=2}if(L=null,(t.G&64)==0){if(Fr(t.L,e))L=\"?\";else if(jo(t.L,e)!=0&&(Ae(t.L,e)==0||A==null||A[Ae(t.L,e)][VA(t.L,e)]>1))if(O(t.L,e)==2)switch(jo(t.L,e)){case 2:L=Ei(t.L,e)?\"p\":\"P\";break;case 1:L=Ei(t.L,e)?\"m\":\"M\";break;default:L=\"*\"}else switch(jo(t.L,e)){case 1:L=Ei(t.L,e)?\"r\":\"R\";break;case 2:L=Ei(t.L,e)?\"s\":\"S\";break;default:L=\"*\"}}if((t.G&768)!=0&&(L=zo(L,\"\"+R0(t.L,e))),W=null,(t.G&16)!=0&&C1(t.L,e)!=0&&(W=\"\"+C1(t.L,e)),c=null,pQ(t.L,e)!=-1&&(T=Hh(t,e),T!=-1&&(c=T==0?\"abs\":((T&255)==1?\"&\":\"or\")+(1+(T>>8)))),C=0,(t.G&ge)==0&&(t.L.K?gt(V(o0(t.L,e),I1),0)&&(C=xt(t.L,e)):(K(t.L,e)!=6||ye(t.L,e)!=0||!t.q[e]||FA(t.L,e)!=0)&&(C=xt(t.L,e))),a=!1,x=!1,r=(t.G&Q0)!=0?null:_n(t.L,e),r!=null&&r.startsWith(\"]\")&&(a=E==null,x=!0,E=zo((Xt(1,r.length+1),r.substr(1)),E),r=null),r!=null?C=0:MA(t.L,e)!=null?(P=gt(V(o0(t.L,e),1),0)?\"[!\":\"[\",r=P+Yh(t.L,e)+\"]\",r.length>5&&(r=P+MA(t.L,e).length+\"]\"),gt(V(o0(t.L,e),I1),0)&&(C=-1)):gt(V(o0(t.L,e),1),0)?(r=\"?\",gt(V(o0(t.L,e),I1),0)&&(C=-1)):(K(t.L,e)!=6||st!=null||E!=null&&(!a||(t.G&s8)==0)||C>0||!t.q[e])&&(r=Ci(t.L,e)),tt=0,!r0(t.L,e)&Qe(t.L,e)&&W1(t,-8),r!=null?(tt=t.vb(r),HP(t,Z1(t.R,kt(t.L,e)),X1(t.R,jt(t.L,e)),r,!0),t.s[e]=!0):_G(t,e)&&HG(t,Z1(t.R,kt(t.L,e)),X1(t.R,jt(t.L,e)),e),st!=null&&(t.Cb((t.X*2+1)/3|0),Ut=Z1(t.R,kt(t.L,e))+((tt+t.vb(st))/2+1),Qt=X1(t.R,jt(t.L,e))-((t.wb()*4-4)/8|0),HP(t,Ut,Qt,st,!0),t.Cb(t.X)),(t.G&2)!=0&&(E=\"\"+e),E!=null&&(x?t.Cb((t.X*5+1)/6|0):t.Cb((t.X*2+1)/3|0),Ut=Z1(t.R,kt(t.L,e))-(tt+t.vb(E))/2,Qt=X1(t.R,jt(t.L,e))-((t.wb()*4-4)/8|0),HP(t,Ut,Qt,E,!0),t.Cb(t.X)),L!=null&&(t.Cb((t.X*2+1)/3|0),Ut=Z1(t.R,kt(t.L,e))-(tt+t.vb(L))/2,Qt=X1(t.R,jt(t.L,e))+((t.wb()*4+4)/8|0),Kt=t.C,t.L.O!=1&&(t.G&C0)==0&&W1(t,448),HP(t,Ut,Qt,L,!1),W1(t,Kt),t.Cb(t.X)),W!=null&&(t.Cb((t.X*2+1)/3|0),Ut=Z1(t.R,kt(t.L,e))+((tt+t.vb(W))/2+1),Qt=X1(t.R,jt(t.L,e))+((t.wb()*4+4)/8|0),Kt=t.C,W1(t,Bn(t.L,e)?384:448),HP(t,Ut,Qt,W,!0),W1(t,Kt),t.Cb(t.X)),c!=null&&(n=aK(t,e),t.Cb((t.X*2+1)/3|0),Ut=Z1(t.R,kt(t.L,e))+.7*t.wb()*w.Math.sin(n),Qt=X1(t.R,jt(t.L,e))+.7*t.wb()*w.Math.cos(n),Kt=t.C,!t.K&&t.L.O!=1&&W1(t,Xh(t,e)),HP(t,Ut,Qt,c,!1),W1(t,Kt),t.Cb(t.X)),C==0&&Ct==0){t.C==-8&&W1(t,-9);return}for(R=h(yt,wt,6,4,15,1),p=0;p<De(t.L,e);p++)for(f=Ot(t.L,e,p),X=0;X<2;X++)z(t.L,X,f)==e&&(Tt=Y0(t.L,z(t.L,X,f),z(t.L,1-X,f)),Tt<eU?(R[0]-=Tt+bA,R[3]+=Tt+Q1):Tt<0?(R[2]+=Tt+bA,R[3]-=Tt):Tt<bA?(R[1]+=Tt,R[2]+=bA-Tt):(R[0]+=Tt-bA,R[1]+=Q1-Tt));if(O(t.L,e)==0?tA(t.L,e)?R[3]-=.2:R[1]-=.2:R[1]-=.1,(st!=null||W!=null)&&(R[1]+=10),(E!=null||L!=null)&&(R[3]+=10),m=\"\",C!=0&&(b=t.vb(\"H\"),v=0,g=t.wb(),C==-1?(m=\"n\",t.Cb((t.X*2+1)/3|0),v=t.vb(m)):C>1&&(m=\"\"+C,t.Cb((t.X*2+1)/3|0),v=t.vb(m)),R[1]<.6||R[3]<.6?(U=X1(t.R,jt(t.L,e)),R[1]<=R[3]?(R[1]+=10,Q=Z1(t.R,kt(t.L,e))+(tt+b)/2):(R[3]+=10,Q=Z1(t.R,kt(t.L,e))-(tt+b)/2-v)):(Q=Z1(t.R,kt(t.L,e)),R[0]<R[2]?(R[0]+=10,U=X1(t.R,jt(t.L,e))-g):(R[2]+=10,U=X1(t.R,jt(t.L,e))+g)),v>0&&(Ut=Q+(b+v)/2,Qt=U+((t.wb()*4+4)/8|0),HP(t,Ut,Qt,m,!0),t.Cb(t.X)),HP(t,Q,U,\"H\",!0)),i=0,Ct!=0){for($=50,s=0,S=0;S<4;S++)y=S>1?S-2:S+2,R[S]<$?(i=S,$=R[S],s=R[y]):R[S]==$&&R[y]>s&&(i=S,s=R[y]);switch(i){case 0:Q=Z1(t.R,kt(t.L,e)),U=X1(t.R,jt(t.L,e))-t.V-tt/2;break;case 1:Q=Z1(t.R,kt(t.L,e))+t.V+tt/2,U=X1(t.R,jt(t.L,e));break;case 2:Q=Z1(t.R,kt(t.L,e)),U=X1(t.R,jt(t.L,e))+t.V+tt/2;break;default:Q=Z1(t.R,kt(t.L,e))-t.V-tt/2,U=X1(t.R,jt(t.L,e))}if(Ct==1)mt(t.$,new QA(Q-t.V,U-t.V,2*t.V,2*t.V)),t.K||mt(t.U,new bu(Q,U,UQ(t,e)?-3:t.p[e]));else{switch(i){case 2:case 0:Ht=2*t.V,Nt=0,Q-=t.V;break;case 1:Ht=0,Nt=2*t.V,U-=t.V;break;default:Ht=0,Nt=2*t.V,U-=t.V}mt(t.$,new QA(Q-t.V,U-t.V,2*t.V,2*t.V)),t.K||mt(t.U,new bu(Q,U,UQ(t,e)?-3:t.p[e])),mt(t.$,new QA(Q+Ht-t.V,U+Nt-t.V,2*t.V,2*t.V)),t.K||mt(t.U,new bu(Q+Ht,U+Nt,UQ(t,e)?-3:t.p[e]))}}t.C==-8&&W1(t,-9)}function u6(t,e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E,X,tt,W,$,et,lt,st,ct,Pt,Tt,Kt,Ct,$t,Ut,Ht,Qt,Nt,b1,e1,Rt,Lt,j1,St,g1,y0,F1,s1,T0,G0,OA,b0,d1,fe,Ke,gA,T9,F8,QP,UP,tn,h9,xn,en,lr,_f,ht,P1,m8,$f,af,tD;if(e<t.f&&i0(t.p,e)){if(of(t,e,5)){if(T=new wL(t.q),m=new wL(t.q),l=!1,x=!1,a=!1,t.C[e]==6||t.C[e]==7){for(C=0;C<t.e[e];C++)if(ht=t.i[e][C],!!of(t,ht,5))for(ws(t,e,ht)&&(t.C[ht]==8||t.C[ht]==16||t.C[ht]==7&&t.e[ht]+xt(t,ht)==3&&!e2(t,ht))&&mt(T,k1(ht)),T0=0;T0<t.e[ht];T0++)P1=t.i[ht][T0],P1!=e&&of(t,P1,5)&&ws(t,e,P1)&&(t.C[P1]==8||t.C[P1]==16||t.C[P1]==7&&t.e[P1]+xt(t,P1)==3&&!e2(t,P1))&&mt(m,k1(P1));for(y=new Wt(T);y.a<y.c.a.length;)if(s=t1(y).a,t.C[s]==8||t.C[s]==16){x=!0;break}for(g=new Wt(m);g.a<g.c.a.length;)if(c=t1(g).a,t.C[c]==8||t.C[c]==16){a=!0;break}for(j=0;j<T.a.length;j++)for(s1=j;s1<m.a.length;s1++)if(ws(t,(ve(j,T.a.length),T.a[j]).a,(ve(s1,m.a.length),m.a[s1]).a)){l=!0;break}}switch(t.C[e]){case 6:if(m.a.length==0){for(Ke=0,OA=0,d1=0,fe=0,j=0;j<t.e[e];j++)ht=t.i[e][j],t.C[ht]==7&&t.e[ht]+xt(t,ht)==3&&(++Ke,t.s[ht]>0&&!e2(t,ht)&&++OA,of(t,ht,5)&&++d1,of(t,ht,6)&&++fe);if((Ke==2&&d1>0||Ke==3&&d1==2)&&OA>0&&fe==0)return 80}if(!(T.a.length==0^m.a.length==0)){for(tD=!0,af=!0,j=0;j<t.e[e];j++)ht=t.i[e][j],(t.C[ht]!=6||!dz(t,ht))&&(tD=!1),ws(t,e,ht)&&!(ht<t.f&&i0(t.p,ht))&&(af=!1);if(T.a.length==0&&m.a.length==0&&!tD&&af||T.a.length!=0&&T.a.length!=0&&(!l||!x&&!a))return 78}if(T.a.length!=0&&(m.a.length==0||x))return 63;if(m.a.length!=0&&(T.a.length==0||a))return 64;break;case 7:if(e2(t,e))return 82;if(T.a.length==0&&m.a.length==0)return t.e[e]+xt(t,e)==3?39:76;if(t.e[e]+xt(t,e)==3&&T.a.length==0^m.a.length==0)return 81;if(T.a.length!=0&&(m.a.length==0||x))return 65;if(m.a.length!=0&&(T.a.length==0||a))return 66;if(T.a.length!=0&&m.a.length!=0)return 79;break;case 8:return 59;case 16:return 44}}if(of(t,e,6))switch(t.C[e]){case 6:return 37;case 7:return e2(t,e)?69:t.e[e]+xt(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]+xt(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]+xt(t,e)==3){for(gA=0,T9=0,QP=0,xn=0,R=0,C=0;C<t.e[e];C++)ht=t.i[e][C],dt(t,D1(t,e,ht))==2&&(R=t.C[ht]),t.e[ht]+xt(t,ht)==1?(t.C[ht]==8&&++QP,t.C[ht]==16&&++xn):t.C[ht]==7&&(t.e[ht]+xt(t,ht)==3?++T9:t.e[ht]+xt(t,ht)==2&&dt(t,D1(t,e,ht))==2&&++gA);return T9>=2&&gA==0&&R==7?57:QP==2||xn==2?41:(t.p&&e<t.f?iA(t.p,e):0)==4&&R==6?30:R==7||R==8||R==15||R==16?3:2}if(t.e[e]+xt(t,e)==2)return 4;if(t.e[e]+xt(t,e)==1)return 60;break;case 7:for(lr=0,g1=!1,S=0;S<t.e[e];S++)if(ht=t.i[e][S],t.C[ht]==8&&t.e[ht]+xt(t,ht)==1&&++lr,G1(t,e)+xt(t,e)>=3&&(t.C[ht]==15||t.C[ht]==16)){for(h9=0,s1=0;s1<t.e[ht];s1++)P1=t.i[ht][s1],t.C[P1]==8&&t.e[P1]+xt(t,P1)==1&&++h9;g1||(g1=h9>=2)}if(t.e[e]+xt(t,e)==4)return e2(t,e)?68:34;if(t.e[e]+xt(t,e)==3){if(G1(t,e)+xt(t,e)>=4){for(b=!1,j=0;j<t.e[e];j++)if(ht=t.i[e][j],dt(t,D1(t,e,ht))==2&&(b=t.C[ht]==7||t.C[ht]==6,t.C[ht]==6))for(s1=0;b&&s1<t.e[ht];s1++)P1=t.i[ht][s1],P1!=e&&(b=!(t.C[P1]==7&&t.e[P1]+xt(t,P1)==3));if(lr==1)return 67;if(lr>=2)return 45;if(b)return 54}if(G1(t,e)+xt(t,e)>=3){for(st=!1,lt=!1,ct=!1,Pt=!1,Ut=!1,$t=!1,A=0,n=0,P=0,r=0,f=0,U=0,j=0;j<t.e[e];j++)if(ht=t.i[e][j],t.C[ht]==6){for(Ut=!0,ht<t.f&&i0(t.p,ht)&&(t.p&&ht<t.f?iA(t.p,ht):0)==6&&($t=!0),P=0,r=0,f=0,U=0,OA=0,p=0,s1=0;s1<t.e[ht];s1++){if(P1=t.i[ht][s1],v=D1(t,ht,P1),dt(t,v)==2&&(t.C[P1]==8||t.C[P1]==16)&&(st=!0),(dt(t,v)==2||v<t.g&&Re(t.p,v)&&(t.C[P1]==6||t.C[P1]==7&&BG(t,P1)==1))&&(A=t.C[P1]),dt(t,v)==3&&(n=t.C[P1]),t.C[P1]==7&&t.e[P1]+xt(t,P1)==3){for(t.s[P1]==1&&++OA,of(t,ht,6)&&++p,Q=0,G0=0;G0<t.e[P1];G0++)m8=t.i[P1][G0],t.C[m8]==8&&++Q;Q<2&&++r}t.C[P1]==7&&t.e[P1]+xt(t,P1)==2&&(dt(t,v)==2||v<t.g&&Re(t.p,v))&&++P,P1<t.f&&i0(t.p,P1)&&(t.C[P1]==8&&++f,t.C[P1]==16&&++U)}A==7&&(r==2&&P==0&&OA>0&&p==0&&t.e[ht]+xt(t,ht)<4&&(lt=!0),r==3&&(ct=!0))}else if(t.C[ht]==7){for(i=0,D=0,L=0,s1=0;s1<t.e[ht];s1++)if(P1=t.i[ht][s1],v=D1(t,ht,P1),dt(t,v)==2){if(t.C[P1]==6){for(G0=0;G0<t.e[P1];G0++)m8=t.i[P1][G0],m8!=e&&(t.C[m8]==7?++i:t.C[m8]==8?++D:t.C[m8]==16&&++L);i==0&&D==0&&L==0&&!$t&&(Pt=!0)}t.C[P1]==7&&!$t&&(Pt=!0)}}if(Ut){if(n==7&&(g1=!0),lt)return 55;if(ct)return 56;if(!st&&!g1&&(f==0&&U==0&&$t||A==6||A==7||A==15||n==6))return 40}if(!g1&&(st||Pt))return 10}}if(t.e[e]+xt(t,e)==2){if(G1(t,e)+xt(t,e)==4){for($=!1,j=0;!$&&j<t.e[e];j++)ht=t.i[e][j],$=dt(t,D1(t,e,ht))==3;return $?61:53}if(G1(t,e)+xt(t,e)==3){for(Qt=!1,W=!1,j=0;j<t.e[e];j++)ht=t.i[e][j],dt(t,D1(t,e,ht))==2&&(Qt=t.C[ht]==8&&lr==1,W=t.C[ht]==6||t.C[ht]==7);if(Qt&&!W)return 46;if(W)return 9}if(G1(t,e)+xt(t,e)>=2){for(Kt=!1,j=0;j<t.e[e];j++)if(ht=t.i[e][j],t.C[ht]==16){for(_f=0,s1=0;s1<t.e[ht];s1++)P1=t.i[ht][s1],t.C[P1]==8&&t.e[P1]+xt(t,P1)==1&&++_f;Kt=_f==1}if(Kt)return 48;if(!g1)return 62}}if(g1)return 43;if(t.e[e]+xt(t,e)==1){for(Ct=!1,et=!1,j=0;!Ct&&!et&&j<t.e[e];j++)if(ht=t.i[e][j],Ct=dt(t,D1(t,e,ht))==3,t.C[ht]==7&&t.e[ht]+xt(t,ht)==2)for(s1=0;!et&&s1<t.e[ht];s1++)P1=t.i[ht][s1],et=t.C[P1]==7&&t.e[P1]+xt(t,P1)==2||t.C[P1]==6&&t.e[P1]+xt(t,P1)==3;if(Ct)return 42;if(et)return 47}return 8;case 8:if(t.e[e]+xt(t,e)==3)return 49;if(t.e[e]+xt(t,e)==2){if(G1(t,e)+xt(t,e)==3)return 51;for(b0=0,j=0;j<t.e[e];j++)ht=t.i[e][j],t.C[ht]==1&&++b0;return b0+xt(t,e)==2?70:6}if(t.j[e]<=1){for(F8=0,tn=0,en=0,Rt=t.e[e]-t.j[e]+xt(t,e)>0,X=!1,E=!1,e1=!1,Nt=!1,Lt=!1,Tt=!1,Ht=!1,F1=!1,St=!1,y0=!1,j1=!1,j=0;j<t.e[e]&&!(Rt||X||E||e1||Nt||Lt||Tt||Ht||F1||St||y0||j1);j++){if(ht=t.i[e][j],t.C[ht]==6||t.C[ht]==7||t.C[ht]==16)for(s1=0;s1<t.e[ht];s1++)P1=t.i[ht][s1],t.C[P1]==7&&t.e[P1]+xt(t,P1)==2&&++F8,t.C[P1]==8&&t.e[P1]+xt(t,P1)==1&&++tn,t.C[P1]==16&&t.e[P1]+xt(t,P1)==1&&++en;Rt=t.C[ht]==1,t.C[ht]==6&&(X=tn==2,E=dt(t,D1(t,e,ht))==2,e1=dt(t,D1(t,e,ht))==1&&tn==1),t.C[ht]==7&&(Nt=dt(t,D1(t,e,ht))==2,dt(t,D1(t,e,ht))==1&&tn==1&&(Lt=t.e[ht]+xt(t,ht)==2||G1(t,ht)+xt(t,ht)==3,Tt=G1(t,ht)+xt(t,ht)==4),Ht=tn>=2),t.C[ht]==16&&(F1=en==1,St=dt(t,D1(t,e,ht))==1||dt(t,D1(t,e,ht))==2&&tn+F8>1,y0=dt(t,D1(t,e,ht))==2&&tn+F8==1),j1=t.C[ht]==15||t.C[ht]==17}if(e1||Lt||Rt)return 35;if(X||Ht||Tt||F1||St||j1)return 32;if(E||Nt||y0)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]+xt(t,e)==4)return 25;if(t.e[e]+xt(t,e)==3)return 26;if(t.e[e]+xt(t,e)==2)return 75;break;case 16:if(t.e[e]+xt(t,e)==3||t.e[e]+xt(t,e)==4){for(UP=0,en=0,tt=!1,j=0;j<t.e[e];j++)ht=t.i[e][j],t.C[ht]==6&&dt(t,D1(t,e,ht))==2&&(tt=!0),(t.j[ht]==1&&t.C[ht]==8||t.e[ht]+xt(t,ht)==2&&t.C[ht]==7)&&++UP,t.j[ht]==1&&t.C[ht]==16&&++en;return t.e[e]+xt(t,e)==3&&UP==2&&tt||t.e[e]+xt(t,e)==4?18:UP>0&&en>0||UP==2&&!tt?73:17}if(t.e[e]+xt(t,e)==2){for(b1=!1,j=0;j<t.e[e];j++)ht=t.i[e][j],t.C[ht]==8&&dt(t,D1(t,e,ht))==2&&(b1=!0);return b1?74:15}if(t.e[e]+xt(t,e)==1){for($f=0,tt=!1,j=0;j<t.e[e];j++){for(ht=t.i[e][j],s1=0;s1<t.e[ht];s1++)P1=t.i[ht][s1],t.C[P1]==16&&t.e[P1]+xt(t,P1)==1&&++$f;t.C[ht]==6&&dt(t,D1(t,e,ht))==2&&(tt=!0)}return tt&&$f!=2?16:72}break;case 17:if(t.j[e]==4){for(QP=0,j=0;j<t.e[e];j++)ht=t.i[e][j],t.C[ht]==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 Q6(){Q6=B1,Ul=B(d(NA,1),a0,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,uM,QM,UM,oM,LM,sM,yM,lM,TM,hM,cM,wM,gM,3437652377603,dM,BM,4674334294019,vM,FM,4674602827778,mM,kM,bM,RM,5086651154435,jM,5086651252739,pM,5086651252744,CM,5086919589896,MM,5086919819266,HM,VM,EM,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},SM,qM,IM,xM,NM,OM,GM,{l:688130,m:590224,h:4},{l:819202,m:590224,h:4},JM,zM,YM,KM,XM,ZM,WM,_M,{l:688135,m:590416,h:4},$M,{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},aM,tH,eH,{l:688131,m:598304,h:4},AH,nH,PH,rH,iH,{l:589826,m:688672,h:4},fH,DH,uH,QH,{l:589827,m:590112,h:336},UH,oH,LH,sH,yH,lH,TH,hH,cH,{l:688130,m:819536,h:400},wH,gH,dH,{l:589831,m:590112,h:592},BH,vH,FH,mH,kH,bH,{l:819207,m:819600,h:592},RH,jH,pH,{l:589832,m:1212816,h:592},{l:688136,m:1212816,h:592},CH,MH,HH,VH,EH,{l:589826,m:819488,h:8480},SH,qH,IH,xH,{l:819208,m:1213008,h:8480},NH,OH,{l:688130,m:590160,h:8484},{l:589826,m:598304,h:8484},GH,{l:819202,m:598304,h:8484}]),Kf=B(d(Ee,1),PA,6,15,[-.1899999976158142,1.2699999809265137,-.7009999752044678,2.690999984741211,-.22699999809265137,Yp,.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,KH,-.6850000023841858,-.3149999976158142,-.4129999876022339,-.5950000286102295,.2199999988079071,-1.4320000410079956,-2.253999948501587,.4399999976158142,-.27000001072883606,-.13300000131130219,-.26899999380111694,.2669999897480011,.5720000267028809,-.5680000185966492,.17399999499320984,-.1850000023841858,-.23499999940395355,eV,AV,-.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,_H,-.44999998807907104,-.5559999942779541,AV,2.384000062942505,1.75,-1.6660000085830688,-1.065999984741211,1.3270000219345093,.8029999732971191,-1.5049999952316284,-2.5369999408721924,eV,.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,nV,-.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,ZH,-.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,nV,-.6809999942779541,-1.2580000162124634,wC,-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,a6,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,K6,3.121000051498413,3.931999921798706,2.75])}function gp(t,e,A,n,P){var r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x,a,E,X,tt,W,$,et,lt,st,ct,Pt,Tt,Kt,Ct,$t,Ut,Ht,Qt,Nt,b1,e1,Rt,Lt,j1,St,g1,y0,F1,s1,T0,G0,OA,b0,d1,fe,Ke,gA,T9,F8,QP,UP,tn,h9,xn,en,lr,_f,ht,P1,m8,$f,af,tD,lc,Tc,hc,cc,wc,gc,dc,Bc,kl,bl,vc,Fc,mc,kc,bc,Rc,An,jc,pc,Cc,Mc,Hc,Vc,Ec,Sc,qc,Ic,xc,NP,Nc,k8,O2,G2,ZE,Rl,WE,_E,$E,aE,r1,Oc,tS,eS,AS,Tr,nS,OP,J2,jl,xU,PS,oP,pl,rS,NU,iS,OU,fS,GU;if(SL(e),e.d=null,!(A==null||0>=A.length)){if(t.g=e,pl=8,n!=null&&(P<0||P>=n.length)&&(n=null),$o(t,A,0),f=nt(t,4),C=nt(t,4),f>8&&(pl=f,f=C),f==0){je(t.g,nt(t,1)==1);return}for(D=nt(t,f),Q=nt(t,C),aE=nt(t,f),AS=nt(t,f),tS=nt(t,f),st=nt(t,f),y=0;y<D;y++)W9(t.g,6);for(Ke=0;Ke<aE;Ke++)K0(t.g,nt(t,f),7);for(gA=0;gA<AS;gA++)K0(t.g,nt(t,f),8);for(ht=0;ht<tS;ht++)K0(t.g,nt(t,f),nt(t,8));for(gc=0;gc<st;gc++)E0(t.g,nt(t,f),nt(t,4)-8);for(ct=1+Q-D,Qt=nt(t,4),j=0,Be(t.g,0,0),Ie(t.g,0,0),hP(t.g,0,0),Nt=n!=null&&n[P]>=39,oP=0,NU=0,OU=0,GU=0,Ct=!1,$t=!1,Nt&&(n.length>2*D-2&&n[2*D-2]==39||n.length>3*D-3&&n[3*D-3]==39?($t=!0,Ct=n.length==3*D-3+9,NP=Ct?3*D-3:2*D-2,b=86*(n[NP+1]-40)+n[NP+2]-40,oP=w.Math.pow(10,b/2e3-1),NP+=2,rS=86*(n[NP+1]-40)+n[NP+2]-40,NU=w.Math.pow(10,rS/1500-1),NP+=2,iS=86*(n[NP+1]-40)+n[NP+2]-40,OU=w.Math.pow(10,iS/1500-1),Ct&&(NP+=2,fS=86*(n[NP+1]-40)+n[NP+2]-40,GU=w.Math.pow(10,fS/1500-1))):Ct=n.length==3*D-3),t._b()&&Ct&&(n=null,Nt=!1),An=1;An<D;An++){if(Rt=nt(t,Qt),Rt==0){Nt&&(Be(t.g,An,t.g.J[0].a+8*(n[An*2-2]-83)),Ie(t.g,An,t.g.J[0].b+8*(n[An*2-1]-83)),Ct&&hP(t.g,An,t.g.J[0].c+8*(n[2*D-3+An]-83))),++ct;continue}j+=Rt-1,Nt&&(Be(t.g,An,kt(t.g,j)+n[An*2-2]-83),Ie(t.g,An,jt(t.g,j)+n[An*2-1]-83),Ct&&hP(t.g,An,vA(t.g,j)+(n[2*D-3+An]-83))),O0(t.g,j,An,1)}for(Ec=0;Ec<ct;Ec++)O0(t.g,nt(t,f),nt(t,f),1);for(Nc=h(rt,ft,6,Q,16,1),X=0;X<Q;X++)switch(tt=nt(t,2),tt){case 0:Nc[X]=!0;break;case 2:w0(t.g,X,2);break;case 3:w0(t.g,X,4)}for(i=nt(t,f),Sc=0;Sc<i;Sc++)if(s=nt(t,f),pl==8)Tr=nt(t,2),Tr==3?(He(t.g,s,1,0),ce(t.g,s,1,!1)):ce(t.g,s,Tr,!1);else switch(Tr=nt(t,3),Tr){case 4:ce(t.g,s,1,!1),He(t.g,s,1,nt(t,3));break;case 5:ce(t.g,s,2,!1),He(t.g,s,1,nt(t,3));break;case 6:ce(t.g,s,1,!1),He(t.g,s,2,nt(t,3));break;case 7:ce(t.g,s,2,!1),He(t.g,s,2,nt(t,3));break;default:ce(t.g,s,Tr,!1)}for(pl==8&&nt(t,1)==0&&(t.g.L=!0),r=nt(t,C),qc=0;qc<r;qc++)if(p=nt(t,C),l1(t.g,p)==1)switch(Tr=nt(t,3),Tr){case 4:A8(t.g,p,1,!1),U8(t.g,p,1,nt(t,3));break;case 5:A8(t.g,p,2,!1),U8(t.g,p,1,nt(t,3));break;case 6:A8(t.g,p,1,!1),U8(t.g,p,2,nt(t,3));break;case 7:A8(t.g,p,2,!1),U8(t.g,p,2,nt(t,3));break;default:A8(t.g,p,Tr,!1)}else A8(t.g,p,nt(t,2),!1);for(je(t.g,nt(t,1)==1),L=null,xU=null,Oc=0;nt(t,1)==1;)switch(Ht=Oc+nt(t,4),Ht){case 0:for(r1=nt(t,f),Ic=0;Ic<r1;Ic++)s=nt(t,f),T1(t.g,s,I1,!0);break;case 1:for(r1=nt(t,f),xc=0;xc<r1;xc++)s=nt(t,f),WE=nt(t,8),jr(t.g,s,WE);break;case 2:for(r1=nt(t,C),T9=0;T9<r1;T9++)nt(t,C);break;case 3:for(r1=nt(t,f),F8=0;F8<r1;F8++)s=nt(t,f),T1(t.g,s,C0,!0);break;case 4:for(r1=nt(t,f),QP=0;QP<r1;QP++)s=nt(t,f),jl=M1(nt(t,4),3),T1(t.g,s,jl,!0);break;case 5:for(r1=nt(t,f),UP=0;UP<r1;UP++)s=nt(t,f),U=M1(nt(t,2),1),T1(t.g,s,U,!0);break;case 6:for(r1=nt(t,f),tn=0;tn<r1;tn++)s=nt(t,f),T1(t.g,s,1,!0);break;case 7:for(r1=nt(t,f),h9=0;h9<r1;h9++)s=nt(t,f),b0=M1(nt(t,4),7),T1(t.g,s,b0,!0);break;case 8:for(r1=nt(t,f),xn=0;xn<r1;xn++){for(s=nt(t,f),m=nt(t,4),c=h(F,k,6,m,15,1),k8=0;k8<m;k8++)g=nt(t,8),c[k8]=g;sh(t.g,s,c)}break;case 9:for(r1=nt(t,C),en=0;en<r1;en++)p=nt(t,C),jl=nt(t,2)<<7,Ge(t.g,p,jl,!0);break;case 10:for(r1=nt(t,C),lr=0;lr<r1;lr++)p=nt(t,C),$=nt(t,5),Ge(t.g,p,$,!0);break;case 11:for(r1=nt(t,f),_f=0;_f<r1;_f++)s=nt(t,f),T1(t.g,s,ge,!0);break;case 12:for(r1=nt(t,C),P1=0;P1<r1;P1++)p=nt(t,C),et=nt(t,8)<<9,Ge(t.g,p,et,!0);break;case 13:for(r1=nt(t,f),m8=0;m8<r1;m8++)s=nt(t,f),nS=M1(nt(t,3),14),T1(t.g,s,nS,!0);break;case 14:for(r1=nt(t,f),$f=0;$f<r1;$f++)s=nt(t,f),$E=M1(nt(t,5),17),T1(t.g,s,$E,!0);break;case 15:case 31:Oc+=16;break;case 16:for(r1=nt(t,f),af=0;af<r1;af++)s=nt(t,f),J2=M1(nt(t,3),22),T1(t.g,s,J2,!0);break;case 17:for(r1=nt(t,f),tD=0;tD<r1;tD++)s=nt(t,f),XA(t.g,s,nt(t,4));break;case 18:for(r1=nt(t,f),Rl=nt(t,4),lc=0;lc<r1;lc++){for(s=nt(t,f),Ut=nt(t,Rl),O2=h(q,I,6,Ut,15,1),k8=0;k8<Ut;k8++)O2[k8]=nt(t,7)<<24>>24;u8(t.g,s,rn((G2=O2,c0(),G2)))}break;case 19:for(r1=nt(t,f),Tc=0;Tc<r1;Tc++)s=nt(t,f),lt=M1(nt(t,3),25),T1(t.g,s,lt,!0);break;case 20:for(r1=nt(t,C),hc=0;hc<r1;hc++)p=nt(t,C),J2=nt(t,3)<<17,Ge(t.g,p,J2,!0);break;case 21:for(r1=nt(t,f),cc=0;cc<r1;cc++)s=nt(t,f),Ne(t.g,s,nt(t,2)<<4);break;case 22:for(r1=nt(t,f),wc=0;wc<r1;wc++)s=nt(t,f),T1(t.g,s,Ur,!0);break;case 23:for(r1=nt(t,C),dc=0;dc<r1;dc++)p=nt(t,C),Ge(t.g,p,h8,!0);break;case 24:for(r1=nt(t,C),Bc=0;Bc<r1;Bc++)p=nt(t,C),U=nt(t,2)<<21,Ge(t.g,p,U,!0);break;case 25:for(kl=0;kl<D;kl++)nt(t,1)==1&&dP(t.g,kl,!0);break;case 26:for(r1=nt(t,C),L=h(F,k,6,r1,15,1),bl=0;bl<r1;bl++)L[bl]=nt(t,C);break;case 27:for(r1=nt(t,f),vc=0;vc<r1;vc++)s=nt(t,f),T1(t.g,s,Pe,!0);break;case 28:for(r1=nt(t,C),Fc=0;Fc<r1;Fc++)w0(t.g,nt(t,C),16);break;case 29:for(r1=nt(t,f),mc=0;mc<r1;mc++)s=nt(t,f),OA=M1(nt(t,2),30),T1(t.g,s,OA,!0);break;case 30:for(r1=nt(t,f),kc=0;kc<r1;kc++)s=nt(t,f),J2=M1(nt(t,7),32),T1(t.g,s,J2,!0);break;case 32:for(r1=nt(t,f),bc=0;bc<r1;bc++)s=nt(t,f),PS=M1(nt(t,2),44),T1(t.g,s,PS,!0);break;case 33:for(r1=nt(t,f),Rc=0;Rc<r1;Rc++)s=nt(t,f),y0=M1(nt(t,5),39),T1(t.g,s,y0,!0);break;case 34:for(r1=nt(t,f),jc=0;jc<r1;jc++)s=nt(t,f),T1(t.g,s,ZQ,!0);break;case 35:for(r1=nt(t,C),pc=0;pc<r1;pc++)p=nt(t,C),Ge(t.g,p,Ef,!0);break;case 36:for(r1=nt(t,C),Cc=0;Cc<r1;Cc++)p=nt(t,C),W=nt(t,2)<<5,Ge(t.g,p,W,!0);break;case 37:for(r1=nt(t,C),Mc=0;Mc<r1;Mc++)p=nt(t,C),W=nt(t,1)==0?32:64,w0(t.g,p,W);break;case 38:for(r1=nt(t,f),Pt=nt(t,3),xU=h(F,k,6,D,15,1),Hc=0;Hc<r1;Hc++)s=nt(t,f),Tt=nt(t,Pt),xU[s]=Tt;break;case 39:for(r1=nt(t,f),Vc=0;Vc<r1;Vc++)s=nt(t,f),eS=M1(nt(t,4),47),T1(t.g,s,eS,!0);break;case 40:for(r1=nt(t,f),Rl=nt(t,6),_E=nt(t,16),fe=0;fe<r1;fe++){for(s=nt(t,f),Ut=nt(t,Rl),O2=new V0,k8=0;k8<Ut;k8++)Oe(O2,nt(t,_E)&w1);u8(t.g,s,O2.a)}}if(Ff(new cr(t.g),Nc,!1),L!=null)for(x=L,a=0,E=x.length;a<E;++a)p=x[a],w0(t.g,p,l1(t.g,p)==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($o(t,n,P+1),Ct=nt(t,1)==1,$t=nt(t,1)==1,OP=2*nt(t,4),S=1<<OP,T0=0,p=0,l=1;l<D;l++)p<Q&&z(t.g,1,p)==l?(T0=z(t.g,0,p++),s1=1):(T0=0,s1=8),b1=s1*(nt(t,OP)+1-(S>>1)),e1=s1*(nt(t,OP)+1-(S>>1)),Be(t.g,l,kt(t.g,T0)+b1),Ie(t.g,l,jt(t.g,T0)+e1),Ct&&hP(t.g,l,vA(t.g,T0)+s1*(nt(t,OP)+1-(S>>1)));if(n[P]==35){for(d1=0,G0=h(F,k,6,D,15,1),T=0;T<D;T++)d1+=G0[T]=xt(t.g,T);for(s=0;s<D;s++)for(fe=0;fe<G0[s];fe++)b0=W9(t.g,1),O0(t.g,s,b0,1),Be(t.g,b0,kt(t.g,s)+(nt(t,OP)+1-(S>>1))),Ie(t.g,b0,jt(t.g,s)+(nt(t,OP)+1-(S>>1))),Ct&&hP(t.g,b0,vA(t.g,s)+(nt(t,OP)+1-(S>>1))),xU!=null&&(xU[s]&1<<fe)!=0&&dP(t.g,b0,!0);D+=d1,Q+=d1}if(R=Ct?1.5:(Y1(),Y1(),wn),v=wP(t.g,D,Q,R),$t)for(oP=XN(nt(t,OP),S),NU=oP*_T(nt(t,OP),S),OU=oP*_T(nt(t,OP),S),Ct&&(GU=oP*_T(nt(t,OP),S)),s1=oP/v,s=0;s<D;s++)Be(t.g,s,NU+s1*kt(t.g,s)),Ie(t.g,s,OU+s1*jt(t.g,s)),Ct&&hP(t.g,s,GU+s1*vA(t.g,s));else for(oP=1.5,s1=oP/v,s=0;s<D;s++)Be(t.g,s,s1*kt(t.g,s)),Ie(t.g,s,s1*jt(t.g,s)),Ct&&hP(t.g,s,s1*vA(t.g,s))}else if(Ct&&!$t&&oP==0&&(oP=1.5),oP!=0&&t.g.r!=0){for(v=0,p=0;p<t.g.r;p++)Lt=kt(t.g,z(t.g,0,p))-kt(t.g,z(t.g,1,p)),j1=jt(t.g,z(t.g,0,p))-jt(t.g,z(t.g,1,p)),St=Ct?vA(t.g,z(t.g,0,p))-vA(t.g,z(t.g,1,p)):0,v+=w.Math.sqrt(Lt*Lt+j1*j1+St*St);for(v/=t.g.r,F1=oP/v,s=0;s<t.g.q;s++)Be(t.g,s,kt(t.g,s)*F1+NU),Ie(t.g,s,jt(t.g,s)*F1+OU),Ct&&hP(t.g,s,vA(t.g,s)*F1+GU)}}catch(b8){if(b8=t0(b8),Zt(b8,19))g1=b8,Z9(g1,(x1(),gi),\"\"),\"\"+g1+rn((ZE=A,c0(),ZE))+rn((G2=n,G2)),n=null,Ct=!1;else throw At(b8)}if(Kt=n!=null&&!Ct,iZ(t),Kt||t._b())for(ut(t.g,7),p=0;p<t.g.g;p++)dt(t.g,p)==2&&!WP(t.g,p)&&qe(t.g,p)==0&&n3(t.g,p);if(sD(t.g,0),!Kt&&t._b())try{t.ac(t.g),Kt=!0}catch(b8){if(b8=t0(b8),Zt(b8,19))g1=b8,Z9(g1,(x1(),gi),\"\"),\"\"+g1+rn((G2=A,c0(),G2));else throw At(b8)}Kt?(Lf(t.g),H3(t.g)):Ct||sD(t.g,0)}}function kf(){kf=B1,sr=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 dp(){dp=B1,JV=B(d(NA,1),a0,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,uM,QM,2475109711938,2475109711939,2475109720067,2475109720131,2475109728259,2475109728323,UM,oM,2887426572354,2887426572355,LM,sM,2887627898946,yM,2887627997250,lM,TM,3437182386242,3437182386243,hM,3437383712771,3437383712834,cM,wM,gM,dM,4674132967490,4674132967491,4674132975619,BM,4674334294082,4674334294083,4674334302211,4674334302275,vM,4674334392386,FM,4674602729538,4674602827842,mM,4674602958914,kM,bM,5086449827906,5086449827907,5086449827912,RM,5086651154498,5086651162627,jM,pM,5086651252802,5086651252808,5086651260931,CM,5086919589954,MM,5086919688258,5086919819330,5636205641794,HM,5636406968386,VM,5636407066690,5636675403842,EM,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},SM,qM,{l:589890,m:590112,h:4},{l:589891,m:590112,h:4},IM,xM,{l:589890,m:590160,h:4},{l:589891,m:590160,h:4},NM,{l:688194,m:590160,h:4},OM,GM,{l:589890,m:590224,h:4},{l:589891,m:590224,h:4},{l:688131,m:590224,h:4},{l:688194,m:590224,h:4},JM,zM,{l:589890,m:590368,h:4},YM,{l:688194,m:590368,h:4},{l:696323,m:590368,h:4},KM,XM,{l:819266,m:590368,h:4},ZM,WM,{l:589890,m:590416,h:4},{l:589891,m:590416,h:4},{l:589896,m:590416,h:4},_M,{l:688136,m:590416,h:4},{l:688194,m:590416,h:4},{l:696323,m:590416,h:4},$M,{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},aM,tH,{l:589890,m:598304,h:4},{l:589891,m:598304,h:4},eH,{l:688194,m:598304,h:4},AH,{l:1114178,m:598304,h:4},nH,{l:1212424,m:598304,h:4},{l:1212482,m:598304,h:4},PH,rH,{l:589890,m:688416,h:4},iH,{l:589890,m:688464,h:4},{l:589890,m:688528,h:4},fH,DH,{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},uH,{l:589890,m:590112,h:288},{l:598019,m:590112,h:288},{l:598083,m:590112,h:288},QH,{l:589890,m:590112,h:336},{l:598019,m:590112,h:336},{l:598083,m:590112,h:336},UH,{l:589890,m:688416,h:336},oH,{l:589890,m:688464,h:336},LH,sH,{l:589827,m:590112,h:400},{l:589890,m:590112,h:400},{l:589891,m:590112,h:400},yH,lH,TH,hH,{l:589890,m:819488,h:400},cH,wH,gH,dH,{l:589827,m:819488,h:544},BH,vH,FH,{l:688199,m:688464,h:592},mH,kH,bH,{l:688202,m:819600,h:592},RH,{l:589896,m:1212704,h:592},jH,pH,{l:688200,m:1212752,h:592},CH,{l:688135,m:688464,h:656},{l:688135,m:819536,h:656},{l:589891,m:65936,h:8228},MH,{l:589890,m:590112,h:8480},{l:598019,m:590112,h:8480},HH,{l:589890,m:688416,h:8480},VH,{l:589890,m:688464,h:8480},EH,SH,qH,IH,{l:589896,m:1213008,h:8480},xH,{l:688200,m:1213008,h:8480},{l:688135,m:1343824,h:8480},NH,{l:589890,m:590112,h:8484},OH,{l:589890,m:590160,h:8484},{l:1212424,m:590416,h:8484},{l:1212488,m:590416,h:8484},GH,{l:688194,m:598304,h:8484},{l:589826,m:590112,h:8528},{l:589890,m:590112,h:8528}]),K4=B(d(Ee,1),PA,6,15,[.6966999769210815,0,.4885999858379364,-.47269999980926514,-.07490000128746033,JH,.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,zH,-2.5383999347686768,Iy,.4291999936103821,-.5824000239372253,-.1834000051021576,.1306000053882599,-.5015000104904175,JH,-.5257999897003174,.4244000017642975,-.16099999845027924,-.2777999937534332,.5110999941825867,-.435699999332428,-.10409999638795853,.3424000144004822,-.061500001698732376,.6035000085830688,.7226999998092651,.43459999561309814,-1.6821000576019287,-.3310000002384186,-.49799999594688416,YH,-.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,KH,.219200000166893,.15649999678134918,.6934999823570251,.3617999851703644,.6735000014305115,.5777999758720398,-.5636000037193298,.5569000244140625,.30379998683929443,-.32760000228881836,-.6991999745368958,.010300000198185444,-.4659000039100647,XH,Iy,.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,ZH,WH,-.2596000134944916,.8381999731063843,-.4415999948978424,-.37040001153945923,-.7487000226974487,-.10790000110864639,-.29919999837875366,-.3276999890804291,.025100000202655792,-.9187999963760376,.10939999669790268,.8230999708175659,-3.233299970626831,.03500000014901161,XH,_H,.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,zH,.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,Iy,.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,Iy,-.07069999724626541,.4805999994277954,.38280001282691956,.22290000319480896,.6159999966621399,.33709999918937683,.188400000333786,.13809999823570251,YH,.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=B1,rl=B(d(Vt,2),nA,17,0,[null,B(d(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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(Vt,1),Et,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 U6(t,e){return A1(e,D4)?new WU(ev(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%\")):A1(e,TV)?new WU(ev(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 fy=\"object\",$A=`\n`,w2=\"boolean\",nr=\"number\",bf=\"string\",It=2147483647,g2='For input string: \"',Pr=\"null\",h0={4:1,9:1,5:1,8:1},vp=\"__noinit__\",A0={4:1,5:1,8:1},yn={4:1,19:1,33:1,27:1},Dt={4:1,9:1,14:1,5:1,11:1,8:1,13:1},Q0=65536,w1=65535,nP=1e4,YQ=\"fromIndex: \",Fp=\" > toIndex: \",o6=\", toIndex: \",mp=\", length: \",L6=\"Index: \",s6=\", Size: \",wt={15:1,4:1,5:1},Rf={4:1},k={7:1,4:1,5:1},oi=16777215,PP=65280,jf=.30000001192092896,rr=545460846592,L8=4294967296,ir=8589934592,fr=17179869184,Dr=34359738368,ur=68719476736,Qr=137438953472,pf=274877906944,ft={12:1,4:1,5:1},Pe=536870912,ge=8192,y6=2.617993878,l6=3.665191429,F0=6.283185307179586,Q1=3.141592653589793,bA=1.5707963267948966,Sn=16384,Dy=-8355712,C0=4096,KQ={l:0,m:0,h:1},XQ={l:0,m:0,h:2},ZQ={l:0,m:0,h:4},rP=1920,re=1024,i9=234881024,WQ=167772160,Cf=100663296,Mf=201326592,Li=114688,si=4063232,_Q=3801088,d2=3538944,B2=3014656,$Q=3145728,qA=2097152,yi=393216,SP=917504,Hf=1966080,Vf=0xf8000000000,uy=0xf0000000000,Qy=0xe8000000000,Uy=0xd8000000000,oy=0xb8000000000,T6=0xe0000000000,h6=0xc0000000000,aQ=8796093022208,v2=549755813888,Ly=1649267441664,sy=3848290697216,tU=8246337208320,c6=0xc8000000000,w6=9345848836096,g6=0x98000000000,f9=29360128,F2={l:0,m:0,h:120},Ur=268435456,I1=2048,s8=32768,eU=-1.5707963267948966,y8=130560,AU=6291456,d6=-2.0943951023931953,AA=1.0471975511965976,m2=.5235987755982988,m1=786432,l8=524288,T8=262144,qn=-16777216,qP=-65536,iP=16711680,yy=-32768,B6='<DrawingObject type=\"',v6=\"></DrawingObject>\",at={4:1,5:1,16:1},a0={4:1,5:1},F6=\"unsupported atomicNo:\",kp=2.8415926535897933,D0={28:1,4:1,9:1,5:1,8:1},k2={4:1,5:1,11:1,8:1},I={10:1,4:1,5:1},nA={4:1,9:1,5:1,8:1,30:1},I0=131072,ly=196608,Ty={l:6,m:0,h:4},h8=1048576,c8=3221225472,m6={l:0,m:0,h:3},Ef=8388608,hy={36:1,43:1,38:1},Ye={4:1,9:1,5:1,11:1,8:1},bp={36:1,43:1,94:1,38:1,83:1},cy={4:1,5:1,36:1,43:1,94:1,20:1,38:1,83:1,126:1},Ve=17976931348623157e292,k6=-17976931348623157e292,or={87:1,73:1,74:1,4:1,9:1,5:1,8:1},$1=\"??\",w8={58:1,4:1,9:1,5:1,8:1},g8=2013265920,RA=32505856,ln=31744,wy=122880,b2={128:1,4:1,9:1,5:1,11:1,8:1},nU=33554432,Tn=67108864,gy=-131073,dy=-33554433,By=-33292289,b6=-3.141592653589793,x0=4194303,hn=3072,PA={46:1,4:1,5:1},R6=.7853981633974483,Rp=3.061592653589793,cn=1073741824,jp=541165879296,Et={17:1,4:1,5:1,8:1},vy=281.17,Fy=289.19,my=294.21,ky=\"0.0000\",by=\"NOSEARCH_OCL_CUSTOM_LABEL\",D9=\"M  END\",R2=\"ATOMS\",o1=-2147483648,PU=\"$$$$\",rU=\"M  V30 \",pp=\"M  V30 COUNTS \",Cp=\"M  V30 MDLV30/STEREL\",Mp=\"M  V30 MDLV30/STERAC\",j6=\"M  V30 END CTAB\",Hp=34028234663852886e22,p6={l:2,m:0,h:4},fP=4194304,C6={l:4179966,m:4063288,h:7},Vp={l:4194302,m:4193343,h:127},M0='\" ',M6='stroke=\"',H6='stroke-width=\"',Ry='\" />',Ep='class=\"event\" ',Sp='opacity=\"0\" />',qp=\"' position:\",Ip=\"'. Position:\",xp=1099511627776,Np=2199023255552,Op=4398046511104,V6=\"', position:\",Gp=\"Assignment of aromatic double bonds failed\",iU=2147483646,Jp={101:1,4:1},E6=\"Members of ESR groups must only be stereo centers with known configuration.\",S6=\"Over- or under-specified stereo feature or more than one racemic type bond\",q6=\"Ambiguous configuration at stereo center because of 2 parallel bonds\",zp={113:1,88:1,26:1,4:1},jy=1e5,fU=1.399999976158142,j2=3.1415927410125732,I6=1.5707963705062866,Yp=.029999999329447746,Kp=6.2831854820251465,Xp=1.9106119871139526,Zp=2.2639999389648438,x6=2.16759991645813,Wp=2.0662999153137207,_p=2.3561999797821045,$p=2.2844998836517334,ap=1.9106120066311025,tC=2.094395160675049,DU=.6000000238418579,py=1.7999999523162842,N6=.05000000074505806,te={4:1,9:1,5:1,8:1,37:1},Cy=.2617993950843811,p2=2.0943951023931953,uU=1.2000000476837158,O6=1.4299999475479126,My=1.659999966621399,G6=1.4600000381469727,J6=1.899999976158142,eC=1.8200000524520874,AC=2.4600000381469727,nC=2.4200000762939453,Hy=2.450000047683716,z6=2.440000057220459,PC=2.4000000953674316,Y6=2.319999933242798,K6=2.2899999618530273,rC=1.8600000143051147,iC=2.5299999713897705,fC=2.490000009536743,DC=2.4700000286102295,uC=2.880000114440918,QC=2.9200000762939453,UC=2.869999885559082,X6=2.8299999237060547,oC=2.7899999618530273,LC=2.809999942779541,sC=2.799999952316284,yC=3.049999952316284,Z6=.3199999928474426,lC=1.3300000429153442,QU=.8500000238418579,TC=1.600000023841858,hC=1.3899999856948853,W6=1.159999966621399,cC=1.1100000143051147,wC=1.0700000524520874,gC=1.9600000381469727,dC=1.7100000381469727,_6=1.3600000143051147,BC=1.340000033378601,vC=1.2200000286102295,FC=1.2400000095367432,Vy=1.2100000381469727,mC=2.0999999046325684,$6=1.850000023841858,a6=1.6299999952316284,kC=1.4700000286102295,bC=1.2799999713897705,RC=1.440000057220459,jC=1.7599999904632568,pC=1.7300000190734863,CC=1.7200000286102295,Ey=1.6799999475479126,MC=1.690000057220459,HC=1.6699999570846558,t4=1.649999976158142,UU=1.7000000476837158,VC=1.6200000047683716,EC=1.3700000047683716,SC=1.2899999618530273,qC=1.4500000476837158,IC=1.5700000524520874,e4=-.5235987755982988,oU=-1.0471975511965976,xC=-.7853981633974483,NC=.017453292519943295,OC=.17453292519943295,LU=1e-4,Sf={149:1},qf=57.29577951308232,GC=.021922173386725217,sU=1e-8,IP=2.5120960256267386,yU=1e-5,Sy=\"MMFF94s+\",JC=\"nonbonded cutoff\",zC=\"dielectric constant\",YC=\"dielectric model\",KC=\"angle bend\",XC=\"bond stretch\",ZC=\"electrostatic\",WC=\"out of plane\",_C=\"stretch bend\",$C=\"torsion angle\",aC=\"van der waals\",tM=.07000000000000006,eM=.1200000000000001,AM=-7.840000000000001,qy=\"OCL_RXN_V1.0:\",nM=\"$RXN V3000\",PM=\"'$MOL' tag not found\",rM=\"'M  END' not found\",iM=\"M  V30 BEGIN REACTANT\",fM=`\nActelion Java MolfileCreator 2.0\n\n  0  0  0  0  0  0              0 V3000\n`,DM=\"M  V30 BEGIN PRODUCT\",uM=2475109711874,QM=2475109711875,UM=2887426572290,oM=2887426572291,LM=2887627898882,sM=2887627898883,yM=2887627997186,lM=3437182386178,TM=3437182386179,hM=3437383712770,cM=3437383811074,wM=3437652148226,gM=3437652377602,dM=4674132967426,BM=4674334294018,vM=4674334392322,FM=4674602729474,mM=4674602958850,kM=5086449827842,bM=5086449827848,RM=5086651154434,jM=5086651252738,pM=5086651252743,CM=5086919589890,MM=5086919688194,HM=5636406968322,VM=5636407066626,EM=5636675502082,SM={l:589826,m:590112,h:4},qM={l:589827,m:590112,h:4},IM={l:589826,m:590160,h:4},xM={l:589827,m:590160,h:4},NM={l:688130,m:590160,h:4},OM={l:589826,m:590224,h:4},GM={l:589827,m:590224,h:4},JM={l:819203,m:590224,h:4},zM={l:589826,m:590368,h:4},YM={l:688130,m:590368,h:4},KM={l:819202,m:590368,h:4},XM={l:819208,m:590368,h:4},ZM={l:589826,m:590416,h:4},WM={l:589832,m:590416,h:4},_M={l:688130,m:590416,h:4},$M={l:819202,m:590416,h:4},aM={l:589826,m:598304,h:4},tH={l:589827,m:598304,h:4},eH={l:688130,m:598304,h:4},AH={l:1114114,m:598304,h:4},nH={l:1212418,m:598304,h:4},PH={l:589826,m:598308,h:4},rH={l:589826,m:688416,h:4},iH={l:589826,m:688464,h:4},fH={l:589826,m:688720,h:4},DH={l:688130,m:688720,h:4},uH={l:589826,m:590112,h:288},QH={l:589826,m:590112,h:336},UH={l:589826,m:688416,h:336},oH={l:589826,m:688464,h:336},LH={l:688130,m:688464,h:336},sH={l:589826,m:590112,h:400},yH={l:589826,m:688416,h:400},lH={l:589826,m:688464,h:400},TH={l:688130,m:688464,h:400},hH={l:589826,m:819488,h:400},cH={l:589826,m:819536,h:400},wH={l:589826,m:819600,h:400},gH={l:688130,m:819600,h:400},dH={l:819202,m:819600,h:400},BH={l:589831,m:688416,h:592},vH={l:589831,m:688464,h:592},FH={l:688135,m:688464,h:592},mH={l:589831,m:819536,h:592},kH={l:688135,m:819536,h:592},bH={l:688135,m:819600,h:592},RH={l:589832,m:1212704,h:592},jH={l:589832,m:1212752,h:592},pH={l:688136,m:1212752,h:592},CH={l:589831,m:688464,h:656},MH={l:589826,m:590112,h:8480},HH={l:589826,m:688416,h:8480},VH={l:589826,m:688464,h:8480},EH={l:688130,m:688464,h:8480},SH={l:819202,m:819600,h:8480},qH={l:688135,m:1212752,h:8480},IH={l:589832,m:1213008,h:8480},xH={l:688136,m:1213008,h:8480},NH={l:589826,m:590112,h:8484},OH={l:589826,m:590160,h:8484},GH={l:688130,m:598304,h:8484},JH=.6262000203132629,zH=-1.3825000524520874,Iy=.33169999718666077,YH=-1.4915000200271606,KH=.3540000021457672,XH=.38179999589920044,ZH=-.6019999980926514,WH=.07999999821186066,_H=-.7379999756813049,$H=\"Atom-types are 64-bit numbers describing atoms and their near surrounding.\",A4=\"Recognized atom types and their contributions are:\",aH=\"Druglikeness predictor not properly initialized.\",tV=3.009999990463257,eV=-.17000000178813934,AV=-.1809999942779541,nV=-.2029999941587448,lU=2147483648,PV=\"ene-Metathesis\",rV=\"Halogenation ring closure\",iV=\" (rootPairSets:\",xy=-1e10,Ny={204:1,4:1,9:1,5:1,8:1,30:1},Oy=-99999,d8=\"any\",fV=\"is not in a ring\",n4=\"Excluded atoms:\",Gy=\"exactly 1\",Jy=\"exactly 2\",P4=\"less than 3\",DV=\"less than 4\",zy=\"at least 1\",r4=\"at least 2\",i4=\"at least 3\",uV=\"at least 4\",f4=\"1 or 2\",QV=\"less than 2\",UV=\"Allowed atoms:\",If={138:1},oV=\"Atom Properties\",Yy=-8346432,LV=\"/html/editor/editor.html\",sV=\"Structure Editor Help\",Ky=\"Dummy look and feel\",Xy=\"Substance Graphite\",Zy=\"Radiance Graphite\",Wy=\"Radiance Night\",yV=.6499999761581421,lV=.3499999940395355,xf=.800000011920929,D4=\"editorButtons.png\",TV=\"esrButtons.png\",u4=-1774190527,Q4=-1438646166,C2=-1433403286,_y=-1431655766,$y=-1448432982,u9=1073741866,Nf=1073741930,U4=\"MMFF94\",o4=\"MMFF94s\",hV=\"/resources/forcefield/mmff94/94s/outofplane.csv\",TU=\"undefined\",L4={172:1,4:1,5:1,8:1},cV=.08726646502812703,wV=\"overlapping\",s4=.003921568859368563,y4=\"anonymous\",l4=\"Unknown\",aA=1048575,DP=17592186044416,Of=1e9,M2=-17592186044416,wA=5.56,ie=11.12,Q9=13.34,Gf=14.44,hU=.3010299956639812,gV=\"BigInteger divide by zero\",h1=4294967295,dV={l:0,m:0,h:524288},ay={32:1,114:1},T4={106:1,109:1},H2={36:1,43:1,38:1,85:1},tl=16777619,BV={36:1,38:1,85:1},el=15525485,vV=5960464477539063e-23,h4=16777216,Al={4:1,32:1,55:1,80:1},c4=\"Invalid UTF8 sequence\",w4=.20000000298023224,FV=\" distance:\",mV={4:1,5:1,11:1,8:1,459:1},kV=\"gGP`@dfyjidNcGI[WQCP`<\",V2={50:1},o,cU,nl,ttt=-1;w.goog=w.goog||{},w.goog.global=w.goog.global||w,cU={},M(1,null,{},i1),o.mb=function(e){return lg(this,e)},o.nb=function(){return this.sd},o.ob=function(){return vD(this)},o.pb=function(){var e;return Uu(_L(this))+\"@\"+(e=a8(this)>>>0,e.toString(16))},o.equals=function(t){return this.mb(t)},o.hashCode=function(){return this.ob()},o.toString=function(){return this.pb()};var bV,RV,jV;bV={4:1,308:1,32:1};var wU;M(207,1,{},Uh),o.Rc=function(e){var A;return A=new Uh,A.f=4,e>1?A.c=RB(this,e-1):A.c=this,A},o.Sc=function(){return Mo(this),this.b},o.Tc=function(){return Uu(this)},o.Uc=function(){return Mo(this),this.j},o.Vc=function(){return(this.f&4)!=0},o.Wc=function(){return(this.f&1)!=0},o.pb=function(){return((this.f&2)!=0?\"interface \":(this.f&1)!=0?\"\":\"class \")+(Mo(this),this.n)},o.f=0,o.i=0;var ett=1;M(120,1,{4:1,120:1});var g4;RV={4:1,32:1,309:1,120:1},M(27,1,{4:1,27:1}),o.ec=function(e){return new Error(e)},o.fc=function(){return this.backingJsObject},o.gc=function(){var e,A,n;for(n=(this.i==null&&(this.i=h(MV,h0,27,0,0,1)),this.i),A=h(uP,A0,1,n.length,5,1),e=0;e<n.length;e++)A[e]=n[e].backingJsObject;return A},o.hc=function(){return this.e},o.ic=function(){return this.f},o.jc=function(){NI(this,VN(this.ec(wB(this,this.f))))},o.pb=function(){return wB(this,this.ic())},o.backingJsObject=vp,o.j=!0,M(19,27,{4:1,19:1,27:1},V1),M(33,19,yn),M(79,33,yn,A3,gr),M(129,33,yn,zL),M(70,129,yn,d9,w7,c7),o.ec=function(e){return new TypeError(e)},jV={4:1,206:1,32:1,2:1},M(231,79,yn,L3),M(511,1,{}),M(443,1,{},nw);var pV=0;M(444,1,{});var uP=H(1),CV=H(0),Att=H(308),MPt=H(207),HPt=H(120),ntt=H(309),MV=H(27),VPt=H(19),EPt=H(33),SPt=H(79),qPt=H(129),IPt=H(70),it=H(2),xPt=H(231),NPt=H(443),OPt=H(444);M(200,1,Rf,ry),o.c=0,o.d=0;var GPt=H(200);M(121,1,{121:1}),o.xb=function(){_F(this)},o.yb=function(e,A,n,P){},o.zb=function(e,A,n,P,r){},o.Db=function(e,A){return Hk(this,e,A)},o.r=0,o.t=0,o.u=0,o.A=0,o.C=0,o.D=0,o.F=0,o.G=0,o.H=0,o.I=0,o.J=0,o.K=!1,o.M=0,o.N=0,o.O=0,o.P=0,o.Q=0,o.S=0,o.T=0,o.V=0,o.W=0,o.X=0,o.Y=0,o.Z=0;var Pl,Ptt=.15,rtt=.06,itt=.6,JPt=H(121);M(144,1,{144:1},bu),o.a=0,o.b=0,o.c=0;var zPt=H(144);M(68,1,{},L1),o.a=0,o.b=0,o.c=0,o.d=0;var YPt=H(68);M(193,1,{193:1}),o.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},o.Nb=function(e){Xv(this,e)},o.pb=function(){var e;return e=new TD,Si(e,B6+this.Lb()+'\"'+this.Kb()+v6),e.a},o.Ob=function(e,A){zF(this,e,A)},o.Pb=function(e,A){sk(this,e,A)},o.Qb=function(e,A){hb(this,e,A)},o.g=!1,o.j=!1,o.k=0,o.n=0;var KPt=H(193);M(89,1,{},cr),o.a=!1,o.b=0,o.c=0,o.k=0;var XPt=H(89),gU,d4;M(34,1,{},BA,EA),o.b=!1,o.c=0,o.d=!1,o.r=!1,o.t=0,o.v=0,o.w=0,o.G=!1,o.I=0,o.K=!1,o.L=!1,o.O=0,o.Q=0,o.T=0,o.U=0,o.Z=!1,o.jb=!1;var ZPt=H(34);M(267,1,{},u1),o.Rb=function(e,A){return kb(e,A)},o.mb=function(e){return this===e};var WPt=H(267);M(174,1,{174:1},n0),o.b=0,o.c=0,o.d=0;var ftt=H(174);M(268,1,{},N0),o.Rb=function(e,A){return oB(e,A)},o.mb=function(e){return this===e};var _Pt=H(268);M(175,1,{175:1},H0),o.a=0,o.b=0,o.c=0;var Dtt=H(175);M(100,1,{100:1,32:1},bo),o.Sb=function(e){return os(this,e)},o.a=0,o.b=0,o.c=0;var B4=H(100);M(173,1,{173:1,32:1},kv),o.Sb=function(e){return $v(this,e)},o.a=0,o.b=0,o.c=0;var utt=H(173);M(208,1,{208:1},Dm);var $Pt=H(208);M(266,1,{},xm);var aPt=H(266);M(365,1,{},Dp),o.a=0,o.b=0,o.f=0,o.g=0,o.i=0;var t8t=H(365);M(366,1,{},GP),o.Rb=function(e,A){return f5(e,A)},o.mb=function(e){return this===e};var e8t=H(366);M(29,1,{29:1,4:1,32:1},Nn,xe,vu),o.Sb=function(e){return BJ(this,e)},o.mb=function(e){return Ds(this,e)},o.pb=function(){var e;return e=new Pu(\"0.00\"),\"[\"+yu(e,this.a)+\", \"+yu(e,this.b)+\", \"+yu(e,this.c)+\"]\"},o.a=0,o.b=0,o.c=0;var E2=H(29);M(78,1,{},Au,z3,Ws),o.pb=function(){return\"DepictorTransformation Offset: \"+this.a+\",\"+this.b+\" Scaling: \"+this.c},o.a=0,o.b=0,o.c=0;var A8t=H(78);M(43,1,hy),o.Ub=function(){return new M8(this)},o.Vb=function(){return new o3(this.Ub())},o.add=function(e){throw At(new lD(\"Add not supported on this collection\"))},o.addAll=function(e){return UF(this,e)},o.clear=function(){var e;for(e=this.Tb();e.ad();)e.bd(),e.cd()},o.contains=function(e){return Mm(this,e,!1)},o.containsAll=function(e){return AQ(this,e)},o.isEmpty=function(){return this.size()==0},o.remove=function(e){return Mm(this,e,!0)},o.removeAll=function(e){return ts(this,e)},o.retainAll=function(e){return Am(this,e)},o.toArray=function(){return this.Wb(h(uP,A0,1,this.size(),5,1))},o.Wb=function(e){return fk(this,e)},o.pb=function(){return zk(this)};var n8t=H(43);M(94,43,bp),o.Ub=function(){return new M8(this)},o.addAtIndex=function(e,A){throw At(new lD(\"Add not supported on this list\"))},o.add=function(e){return this.addAtIndex(this.size(),e),!0},o.addAllAtIndex=function(e,A){var n,P,r;for(U1(A),n=!1,r=A.Tb();r.ad();)P=r.bd(),this.addAtIndex(e++,P),n=!0;return n},o.clear=function(){this.Xb(0,this.size())},o.mb=function(e){var A,n,P,r,i;if(e===this)return!0;if(!Zt(e,83)||(i=e,this.size()!=i.size()))return!1;for(r=i.Tb(),n=this.Tb();n.ad();)if(A=n.bd(),P=r.bd(),!(J1(A)===J1(P)||A!=null&&VP(A,P)))return!1;return!0},o.ob=function(){return dG(this)},o.indexOf=function(e){return wF(this,e)},o.Tb=function(){return new Wl(this)},o.lastIndexOf=function(e){var A;for(A=this.size()-1;A>-1;--A)if(K8(e,this.getAtIndex(A)))return A;return-1},o.removeAtIndex=function(e){throw At(new lD(\"Remove not supported on this list\"))},o.Xb=function(e,A){var n,P;for(P=new TT(this,e),n=e;n<A;++n)kD(P.a<P.c.size()),P.c.getAtIndex(P.b=P.a++),QL(P)},o.setAtIndex=function(e,A){throw At(new lD(\"Set not supported on this list\"))},o.subList=function(e,A){return new xD(this,e,A)};var P8t=H(94);M(20,94,cy,f1,wL),o.addAtIndex=function(e,A){t8(this,e,A)},o.add=function(e){return mt(this,e)},o.addAllAtIndex=function(e,A){return im(this,e,A)},o.addAll=function(e){return jP(this,e)},o.clear=function(){this.a.length=0},o.contains=function(e){return x9(this,e,0)!=-1},o.getAtIndex=function(e){return N(this,e)},o.indexOf=function(e){return x9(this,e,0)},o.isEmpty=function(){return this.a.length==0},o.Tb=function(){return new Wt(this)},o.lastIndexOf=function(e){return id(this,e)},o.removeAtIndex=function(e){return LA(this,e)},o.remove=function(e){return Z8(this,e)},o.Xb=function(e,A){JB(this,e,A)},o.setAtIndex=function(e,A){return q9(this,e,A)},o.size=function(){return this.a.length},o.toArray=function(){return tT(this.a)},o.Wb=function(e){return ff(this,e)};var v4=H(20);M(102,20,cy,to,us,ak),o.pb=function(){return Sm(this)};var r8t=H(102);M(108,1,{108:1},Ki),o.a=0,o.b=0,o.c=0,o.d=0;var i8t=H(108);M(116,1,{},gf),o.a=0,o.b=0,o.c=!1,o.d=0,o.f=!1,o.g=0,o.i=!1,o.j=0;var f8t=H(116);M(18,1,{18:1},qt),o.pb=function(){return this.d},o.a=0,o.c=0;var Qtt=H(18);M(158,1,{},Wv,rR,pB,Xd),o.c=0,o.d=0,o.f=0,o.i=0,o.j=0,o.n=0,o.o=!1;var D8t=H(158);M(363,1,{},K2),o.Rb=function(e,A){return U1(e),e>(U1(A),A)?-1:(U1(e),e<(U1(A),A)?1:0)},o.mb=function(e){return this===e};var u8t=H(363);M(88,1,{88:1,4:1},$3),o.Yb=function(e){LL(this,e)},o.Zb=function(e){return this.H[e]==8},o.q=0,o.r=0,o.I=0,o.K=!1,o.L=!1,o.M=0,o.N=0,o.O=0,o.S=!1,o.T=0,o.U=0,o.V=0;var HV,X0,Lr,F4,VV,U9,wn=24,Q8t=H(88);M(113,88,{113:1,88:1,4:1}),o.$b=function(e){qj(this,e)},o.Zb=function(e){return G8(this,e)},o.f=0,o.g=0;var U8t=H(113);M(333,1,{},Z2),o._b=function(){return!1},o.ac=function(e){throw At(new V1(\"Unexpected request to invent coordinates. Check source code logic!\"))},o.d=0,o.e=0,o.f=0,o.i=!1;var o8t=H(333);M(52,333,{},GA),o._b=function(){return this.b},o.ac=function(e){var A;A=new Y8(this.a),A.g=new zr(78187493520),Ar(A,e)},o.a=2,o.b=!1;var L8t=H(52);M(110,1,{},j7,hD),o.j=0;var s8t=H(110);M(3,1,{3:1},u),o.a=0,o.b=0;var Vt=H(3),rl;M(240,1,{240:1,32:1},Xg),o.Sb=function(e){return Xz(this,e)};var y8t=H(240);M(153,1,{153:1}),o.mb=function(e){var A;if(e===this)return!0;if(!Zt(e,153))return!1;for(A=0;A<this.b.length;A++)if(this.b[A]!=e.b[A])return!1;return!0},o.a=0,o.d=0;var m4,S2,k4,l8t=H(153);M(111,1,{},p3,i6);var T8t=H(111);M(127,1,{},tu,Nw),o.a=!1,o.d=!1,o.e=!1,o.g=!1,o.i=0,o.k=!1;var h8t=H(127);M(225,1,{225:1},W2),o.a=0,o.b=!1;var c8t=H(225);M(150,1,{},n7,dg),o.c=1;var w8t=H(150),b4,il=null;M(399,1,{},hp),o.pb=function(){return\"\"};var R4,j4,g8t=H(399);M(151,1,{},Qo),o.g=0;var d8t=H(151);M(64,1,{},Ni,jD),o.c=0,o.d=0,o.p=0,o.q=0,o.r=!1,o.w=0,o.A=0,o.L=!1,o.N=0,o.P=!1;var B8t=H(64);M(215,1,{215:1},KU),o.a=0,o.b=0,o.c=0,o.d=0;var v8t=H(215);M(180,1,{},vo);var sr,q2,F8t=H(180);M(259,121,{121:1},Ik),o.qb=function(e){var A;A='<line x1=\"'+Le(be(eA(new Me(e.a),(e9(),se))))+M0+'y1=\"'+Le(be(eA(new Me(e.c),se)))+M0+'x2=\"'+Le(be(eA(new Me(e.b),se)))+M0+'y2=\"'+Le(be(eA(new Me(e.d),se)))+M0+M6+this.d+M0+H6+this.j+Ry,Er(this,A)},o.rb=function(e){var A,n;A=Le(be(eA(new Me(3*this.j),(e9(),se)))),n='<line stroke-dasharray=\"'+A+\",\"+A+M0+'x1=\"'+Le(be(eA(new Me(e.a),se)))+M0+'y1=\"'+Le(be(eA(new Me(e.c),se)))+M0+'x2=\"'+Le(be(eA(new Me(e.b),se)))+M0+'y2=\"'+Le(be(eA(new Me(e.d),se)))+M0+M6+this.d+M0+\"stroke-width:\"+this.j+Ry,Er(this,n)},o.sb=function(e){var A,n;for(n=new Fn('<polygon points=\"'),A=0;A<e.a;A++)Eg(n,E1(w.Math.round(e.b[A]))),n.a+=\",\",Eg(n,E1(w.Math.round(e.c[A]))),n.a+=\" \";J(n,'\" fill=\"'+this.d+M0+M6+this.d+M0+H6+this.j+Ry),Er(this,n.a)},o.tb=function(e,A,n){var P,r,i,f;i=(P=(f=Zk(this.e,e),new iT(f)).b,P),r='<text x=\"'+Le(be(eA(new Me(A-i/2),(e9(),se))))+M0+'y=\"'+Le(be(eA(new Me(n+this.k/3),se)))+M0+'stroke=\"none\" font-size=\"'+this.e.b+M0+'fill=\"'+hf(this.d)+'\">'+hf(e)+\"</text>\",Er(this,r)},o.ub=function(e,A,n){var P;P='<circle cx=\"'+Le(be(eA(new Me(e+n/2),(e9(),se))))+M0+'cy=\"'+Le(be(eA(new Me(A+n/2),se)))+M0+'r=\"'+Le(be(eA(new Me(n/2),se)))+M0+'fill=\"'+this.d+Ry,Er(this,P)},o.vb=function(e){var A;return(A=Zk(this.e,e),new iT(A)).b},o.wb=function(){return this.k},o.yb=function(e,A,n,P){var r,i;r=C1(this.L,e),i='<circle id=\"'+hf(this.g!=null?this.g:\"mol\"+I2)+\":Atom:\"+e+M0+Ep+(r==0?\"\":'data-atom-map-no=\"'+r+M0)+'cx=\"'+Le(be(eA(new Me(n),(e9(),se))))+M0+'cy=\"'+Le(be(eA(new Me(P),se)))+M0+'r=\"8'+M0+Sp,mt(this.a,i)},o.zb=function(e,A,n,P,r){var i;i='<line id=\"'+hf(this.g!=null?this.g:\"mol\"+I2)+\":Bond:\"+e+M0+Ep+'x1=\"'+Le(be(eA(new Me(A),(e9(),se))))+M0+'y1=\"'+Le(be(eA(new Me(n),se)))+M0+'x2=\"'+Le(be(eA(new Me(P),se)))+M0+'y2=\"'+Le(be(eA(new Me(r),se)))+M0+H6+8+M0+Sp,mt(this.b,i)},o.Ab=function(e){this.j=Jr(E1(w.Math.round(100*w.Math.max(e,1))))/100},o.Bb=function(e){this.d=\"rgb(\"+((e&iP)>>16)+\",\"+((e&PP)>>8)+\",\"+(e&255)+\")\"},o.Cb=function(e){this.k!=e&&(this.k=e,this.e=new eT(e))},o.Db=function(e,A){return this.n=zt(E1(w.Math.round(e.b))),this.f=zt(E1(w.Math.round(e.a))),Hk(this,e,A)},o.pb=function(){return Jj(this)},o.f=0,o.i=!1,o.j=0,o.k=0,o.n=0;var I2=0,m8t=H(259);M(184,1,{184:1},pT),o.a=0,o.b=0,o.e=!1,o.f=!1,o.g=0;var k8t=H(184);M(284,1,{},WF),o.a=0,o.c=0,o.d=0,o.e=0,o.g=0,o.i=!1,o.j=!1,o.k=0,o.o=0,o.p=!1,o.r=!1;var b8t=H(284);M(368,1,{},Ow),o.a=0,o.b=0,o.c=!1,o.d=!1;var R8t=H(368);M(369,1,{},Rw),o.pb=function(){return\"{\"+this.c+\"-\"+this.b+\"}\"},o.a=!1,o.b=0,o.c=0,o.d=0;var j8t=H(369);M(112,1,{},i3,LQ),o.b=0,o.c=0,o.d=0,o.e=!1,o.i=!1,o.j=0,o.n=0,o.o=!1,o.p=!1,o.q=0;var p8t=H(112);M(216,1,{216:1,32:1},H7),o.Sb=function(e){return q3(e.b,this.b)},o.a=0,o.b=0;var C8t=H(216);M(217,1,{217:1},ck),o.a=0,o.b=0,o.c=!1,o.d=!1;var M8t=H(217);M(182,1,{182:1},Z3),o.pb=function(){return\"[\"+(this.a==iU?\"h\":this.a==It?\"lp\":Ci(this.c.f.k,this.a))+this.b+\"]\"},o.a=0,o.b=0;var H8t=H(182);M(101,1,Jp,nu),o.bc=function(e){return $h(this,e)};var Utt=H(101);M(26,113,zp,JA,zA,Yr),o.Yb=function(e){ko(this,e)},o.$b=function(e){ut(this,e)},o.c=!1;var o9=H(26);M(241,1,{},r5),o.j=0;var ott=jy,V8t=H(241);M(167,1,{167:1,32:1},fs),o.Sb=function(e){return hs(this.a,e.a)};var E8t=H(167);M(93,193,{193:1,93:1},Uo,BR),o.Eb=function(e,A){return this.a=!!this.b&&Nr(this.b,e,A),this.a},o.Fb=function(){this.a=!1},o.Gb=function(){var e;return e=new Uo,kg(e,this.e,this.c,this.d),xg(e,this.i[0].a,this.i[0].b),e.g=this.g,e},o.Hb=function(e,A){return!!this.b&&Nr(this.b,e,A)},o.Ib=function(e,A){var n,P,r,i;for(P=A?A.c*this.c:this.c,eL(e,vt(w.Math.round(P)),(this.d&1)!=0,(this.d&2)!=0),ae(e,this.g?qP:(i=e.Jc(),i.isDarkBackground()?-1:qn)),r=ph(this),this.b=Oh(this,e,r),A&&Nu(A,this.b),n=0;n<r.a.length;n++)cT(e,this.b.c,this.b.d+1+P*5/6+P*fU*n,(ve(n,r.a.length),r.a[n]))},o.Jb=function(e){var A;return A=ph(this),Oh(this,e,A)},o.Kb=function(){var e;return e=new V0,J(e,' text=\"'+LX(this.e)+'\"'),J(e,' x=\"'+this.i[0].a+'\"'),J(e,' y=\"'+this.i[0].b+'\"'),this.c!=9&&J(e,' size=\"'+be(new Zd(this.c,new Vd))+'\"'),this.d!=0&&J(e,' style=\"'+this.d+'\"'),e.a},o.Lb=function(){return\"text\"},o.Mb=function(e){var A,n;A=(n=ph(this),Oh(this,e,n)),ae(e,ID(e)),RT(e,A.c,A.d,A.b,A.a)},o.Nb=function(e){Xv(this,e),this.c*=e},o.Pb=function(e,A){sk(this,e,A),this.c=this.f*e},o.Qb=function(e,A){hb(this,e,A),this.f=this.c},o.a=!1,o.c=0,o.d=0,o.f=0;var S8t=H(93);M(283,101,Jp,fB),o.bc=function(e){var A;return A=$h(this,e),A==-1?-1:N(this.a,A).a};var q8t=H(283);M(380,1,{},Tp);var I8t=H(380);M(379,1,{},hj);var EV,dU,p4,C4,BU,M4=!1,x8t=H(379);M(63,1,{63:1,32:1},cD),o.Sb=function(e){return sF(this,e),uk(this.q,e.q)},o.n=0;var N8t=H(63);M(370,1,{},Bg),o.a=0,o.b=0;var fl,gn,O8t=H(370);M(256,1,{256:1,32:1},O7),o.Sb=function(e){return uk(this,e)},o.pb=function(){var e,A;for(A=new V0,e=0;e<this.b.length;e++)A.a+=e==0?\"Torsions: \":\", \",J(A,(J9(),tr(this.b[e],3)+\"(\"+vt(w.Math.round(this.a[e]+.5))+\")\"));return A.a};var G8t=H(256);M(254,1,{},CB,kB);var SV,Dl,J8t=H(254);M(250,1,{},mh),o.a=0;var qV,z8t=H(250);M(194,1,{194:1},jw,Lj),o.e=0;var Y8t=H(194);M(251,1,{},r6);var K8t=H(251),Jf,IA,H4=0,V4=0,E4=0,S4=0,q4=0,vU=0,I4=0,x4=0,N4=0,O4=0,FU=0;M(69,1,{},i7,Y8),o.a=!1,o.e=0;var mU,X8t=H(69);M(329,20,cy,_w),o.add=function(e){return pP(this,e)};var Z8t=H(329);M(331,1,{},Xe),o.Rb=function(e,A){var n;return WN((n=e,n))},o.mb=function(e){return this===e};var W8t=H(331);M(332,1,{},Se),o.Rb=function(e,A){var n;return _N((n=e,n))},o.mb=function(e){return this===e};var _8t=H(332);M(330,1,{},j8),o.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},o.mb=function(e){return this===e};var $8t=H(330);M(105,1,{105:1},Kb,HQ);var IV=H(105);M(41,1,{41:1},KP,Wu),o.a=0,o.b=0;var li=H(41);M(247,1,{},MT);var a8t=H(247);M(197,1,{197:1},W3),o.a=0,o.b=0;var t9t=H(197);M(364,20,cy,yk);var xV,e9t=H(364);M(48,1,{48:1},MP,I5),o.c=0,o.i=!1;var G4=H(48);M(246,1,{246:1},og),o.a=0,o.c=!1;var A9t=H(246);M(276,1,{}),o.d=0,o.f=!1,o.j=0,o.k=0;var n9t=H(276);M(358,1,Sf,wm),o.cc=function(e,A,n,P){var r,i,f;return P&&(K(this.f,this.a)==1||K(this.f,this.c)==1)?0:(f=Dk(new v0(e,this.b,this.a),new v0(e,this.b,this.c)),r=f*qf-this.g,i=this.d?143.9325*this.e*(1+w.Math.cos(f)):GC*this.e*r*r*(1+-.006981317*r),i)},o.dc=function(e,A){var n,P,r,i,f,D,Q,U,L,s;Q=Vn(new v0(e,this.b,this.a)),U=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*U.a+Q.b*U.b+Q.c*U.c)/(w.Math.sqrt(Q.a*Q.a+Q.b*Q.b+Q.c*Q.c)*w.Math.sqrt(U.a*U.a+U.b*U.b+U.c*U.c)),s=1-P*P,L=sU,s>0&&(L=w.Math.sqrt(s)),n=qf*w.Math.acos(P)-this.g,i=IP*this.e*n*(1+-.0104719755*n),this.d&&(i=-143.9325*this.e*L),r=B(d(yt,1),wt,6,15,[1/f*(U.a-P*Q.a),1/f*(U.b-P*Q.b),1/f*(U.c-P*Q.c),1/D*(Q.a-P*U.a),1/D*(Q.b-P*U.b),1/D*(Q.c-P*U.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},o.a=0,o.b=0,o.c=0,o.d=!1,o.e=0,o.g=0;var P9t=H(358);M(185,33,{185:1,4:1,19:1,33:1,27:1},L7);var r9t=H(185);M(336,33,yn,$w);var i9t=H(336);M(237,1,Sf,UB),o.cc=function(e,A,n,P){var r,i,f;return P&&(K(this.d,this.a)==1||K(this.d,this.b)==1)?0:(i=BF(new Xi(e,this.a),new Xi(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)},o.dc=function(e,A){var n,P,r,i;if(P=BF(new Xi(e,this.a),new Xi(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},o.a=0,o.b=0,o.c=0,o.e=0;var f9t=H(237);M(359,1,Sf,Zv),o.cc=function(e,A,n,P){var r,i,f;return P&&(K(this.e,this.a)==1||K(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==(X9(),Ti)?.75:1),f)},o.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==(X9(),Ti)?.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},o.a=0,o.b=0,o.c=0,o.d=!1;var D9t=H(359);M(178,276,{},vd,K5);var ul,u9t=H(178);M(277,26,zp,Pj);var Q9t=H(277);M(192,1,Sf,YL),o.cc=function(e,A,n,P){var r,i,f,D,Q,U;return P&&(K(this.f,this.a)==1||K(this.f,this.b)==1||K(this.f,this.c)==1)?0:(D=Vn(new v0(e,this.d,this.a)),Q=Vn(new v0(e,this.d,this.b)),U=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=qf*w.Math.asin(f.a*U.a+f.b*U.b+f.c*U.c),i=GC*this.e*r*r,i)},o.dc=function(e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p,x;for(y=new v0(e,this.d,this.a),l=new v0(e,this.d,this.b),T=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),U=w.Math.sqrt(T.a*T.a+T.b*T.b+T.c*T.c),y=Vn(y),l=Vn(l),T=Vn(T),s=Vn(zT(new gP(-y.a,-y.b,-y.c),l)),c=T.a*s.a+T.b*s.b+T.c*s.c,r=1-c*c,P=w.Math.max(r>0?w.Math.sqrt(r):0,sU),n=qf*w.Math.asin(c),i=y.a*l.a+y.b*l.b+y.c*l.c,m=w.Math.max(1-i*i,sU),g=w.Math.max(m>0?w.Math.sqrt(m):0,sU),f=IP*this.e*n,v=new gP(T.b*l.c-T.c*l.b,T.c*l.a-T.a*l.c,T.a*l.b-T.b*l.a),R=new gP(y.b*T.c-y.c*T.b,y.c*T.a-y.a*T.c,y.a*T.b-y.b*T.a),b=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=c/(P*m),S=B(d(yt,1),wt,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]),p=B(d(yt,1),wt,6,15,[(R.a/j-(l.a-y.a*i)*C)/Q,(R.b/j-(l.b-y.b*i)*C)/Q,(R.c/j-(l.c-y.c*i)*C)/Q]),x=B(d(yt,1),wt,6,15,[(b.a/j-T.a*c/P)/U,(b.b/j-T.b*c/P)/U,(b.c/j-T.c*c/P)/U]),L=0;L<3;L++)A[3*this.a+L]+=f*S[L],A[3*this.d+L]+=-f*(S[L]+p[L]+x[L]),A[3*this.b+L]+=f*p[L],A[3*this.c+L]+=f*x[L]},o.a=0,o.b=0,o.c=0,o.d=0,o.e=0;var U9t=H(192);M(55,1,{4:1,32:1,55:1}),o.Sb=function(e){return this.b-e.b},o.compareTo=function(e){return this.b-e.b},o.equals=function(e){return this===e},o.mb=function(t){return this.equals(t)},o.hashCode=function(){return vD(this)},o.ob=function(){return this.hashCode()},o.name=function(){return this.a!=null?this.a:\"\"+this.b},o.ordinal=function(){return this.b},o.toString=function(){return this.a!=null?this.a:\"\"+this.b},o.pb=function(){return this.toString()},o.b=0;var o9t=H(55),NV=E9(null,Lx);M(278,1,{},wR);var L9t=H(278);M(107,55,{107:1,4:1,32:1,55:1},wD);var Ti,J4,z4,Y4,x2,Ltt=E9(107,BN);M(98,1,{98:1,32:1},Oi),o.Sb=function(e){return zG(this,e)},o.mb=function(e){var A;return e===this?!0:Zt(e,98)?(A=e,this.a==A.a&&this.b==A.b):!1},o.ob=function(){return this.a^this.b},o.pb=function(){return this.a+\",\"+this.b},o.a=0,o.b=0;var s9t=H(98);M(360,1,Sf,mk),o.cc=function(e,A,n,P){var r,i,f,D,Q;return P&&(K(this.f,this.a)==1||K(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=Dk(new v0(e,this.b,this.a),new v0(e,this.b,this.c)),D=IP*(Q*qf-this.j),f=D*(r-this.g)*this.d+D*(i-this.i)*this.e,f)},o.dc=function(e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c,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)),T=Vn(new v0(e,this.b,this.c)),P=l.a*T.a+l.b*T.b+l.c*T.c,g=1-P*P,c=w.Math.max(g>0?w.Math.sqrt(g):0,sU),n=qf*w.Math.acos(P)-this.j,y=qf*(this.d*(L-this.g)+this.e*(s-this.i)),r=1/L*(T.a-P*l.a),i=1/L*(T.b-P*l.b),f=1/L*(T.c-P*l.c),D=1/s*(l.a-P*T.a),Q=1/s*(l.b-P*T.b),U=1/s*(l.c-P*T.c),A[3*this.a]+=IP*(l.a*this.d*n+r/-c*y),A[3*this.a+1]+=IP*(l.b*this.d*n+i/-c*y),A[3*this.a+2]+=IP*(l.c*this.d*n+f/-c*y),A[3*this.b]+=IP*((-l.a*this.d-T.a*this.e)*n+(-r-D)/-c*y),A[3*this.b+1]+=IP*((-l.b*this.d-T.b*this.e)*n+(-i-Q)/-c*y),A[3*this.b+2]+=IP*((-l.c*this.d-T.c*this.e)*n+(-f-U)/-c*y),A[3*this.c]+=IP*(T.a*this.e*n+D/-c*y),A[3*this.c+1]+=IP*(T.b*this.e*n+Q/-c*y),A[3*this.c+2]+=IP*(T.c*this.e*n+U/-c*y)},o.a=0,o.b=0,o.c=0,o.d=0,o.e=0,o.g=0,o.i=0,o.j=0;var y9t=H(360);M(155,1,{155:1},ks);var l9t=H(155);M(361,1,Sf,Lm),o.cc=function(e,A,n,P){var r,i,f,D,Q,U,L,s,y,l;return Q=new v0(e,this.a,this.b),U=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*U.c-Q.c*U.b,Q.c*U.a-Q.a*U.c,Q.a*U.b-Q.b*U.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},o.dc=function(e,A){var n,P,r,i,f,D,Q,U,L,s,y;f=B(d(OV,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(OV,1),A0,22,0,[zT(f[0],f[1]),zT(f[2],f[3])]),P=B(d(yt,1),wt,6,15,[kn(y[0]),kn(y[1])]),!(w.Math.abs(P[0])<yU||w.Math.abs(P[1])<yU)&&(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,U=L>0?w.Math.sqrt(L):0,D=2*U*n,Q=3*U-4*U*L,i=.5*(-this.e*U+2*this.f*D-3*this.g*Q),s=-i*(w.Math.abs(U)<yU?1/n:1/U),r=B(d(yt,1),wt,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))},o.a=0,o.b=0,o.c=0,o.d=0,o.e=0,o.f=0,o.g=0;var T9t=H(361);M(362,1,Sf,Dj),o.cc=function(e,A,n,P){var r,i,f,D,Q,U,L,s,y,l;return P&&(K(this.g,this.a)==1||K(this.g,this.c)==1)?0:(Q=kn(new v0(e,this.a,this.c)),U=Q*Q,L=U*U*U*Q,r=1.07*this.i/(Q+tM*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+eM*l)-2,s=f*D*this.j,s)},o.dc=function(e,A){var n,P,r,i,f,D,Q,U,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,U=Q*f,L=U+eM,s=1.07/(f+1.07-1),y=s*s,l=y*y*y*s,n=this.j/this.i*l*(AM*Q/(L*L)+(AM/L+14)/(f+tM)),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},o.a=0,o.b=0,o.c=0,o.d=0,o.e=0,o.f=0,o.i=0,o.j=0;var h9t=H(362);M(22,1,{22:1},gP,FT,wT,Xi,v0),o.mb=function(e){var A;return e===this?!0:Zt(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},o.ob=function(){return vt(this.a)+vt(this.b)+vt(this.c)},o.a=0,o.b=0,o.c=0;var OV=H(22);M(383,1,{},Rv),o.kc=function(e,A){return Yn(this.b[e][A])},o.lc=function(){return this.b.length};var c9t=H(383);M(377,1,{},SB),o.kc=function(e,A){return this.a[e][A]},o.lc=function(){return this.a.length};var w9t=H(377);M(390,1,{},EB),o.kc=function(e,A){return Yn(this.a[e][A])},o.lc=function(){return this.a.length};var g9t=H(390);M(386,1,{},lv),o.kc=function(e,A){return Yn(this.b[e][A])},o.lc=function(){return this.b.length};var d9t=H(386);M(384,1,{},cm);var B9t=H(384);M(196,1,{},ZU),o.kc=function(e,A){return Yn(this.a.a[e][A])},o.lc=function(){return this.a.a.length};var v9t=H(196);M(391,1,{},_B),o.kc=function(e,A){return Yn(this.a[e][A])},o.lc=function(){return this.a.length};var F9t=H(391);M(393,1,{},HB);var m9t=H(393);M(392,1,{},VB),o.kc=function(e,A){return Yn(this.a[e][A])},o.lc=function(){return this.a.length};var k9t=H(392);M(394,1,{},jv),o.kc=function(e,A){return Yn(this.a[e][A])},o.lc=function(){return this.a.length};var b9t=H(394);M(385,1,{},vg),o.kc=function(e,A){return Yn(this.b[e][A])},o.lc=function(){return this.b.length};var R9t=H(385);M(387,1,{},yv),o.kc=function(e,A){return Yn(this.b[e][A])},o.lc=function(){return this.b.length};var j9t=H(387);M(388,1,{},Fg),o.kc=function(e,A){return Yn(this.b[e][A])},o.lc=function(){return this.b.length};var p9t=H(388);M(51,1,{},Ro,Gn,qv),o.pb=function(){return this.a+\",\"+this.b+\",\"+this.c},o.a=0,o.b=0,o.c=0;var C9t=H(51);M(389,1,{},fv),o.kc=function(e,A){return Yn(this.a[e][A])},o.lc=function(){return this.a.length};var M9t=H(389);M(424,1,{});var H9t=H(424);M(280,1,{},IR),o.a=null;var zf,V9t=H(280);M(281,1,{},rj),o.a=null;var B8,E9t=H(281);M(282,424,{},mv),o.a=!1,o.e=0;var GV,S9t=H(282);M(213,1,{},Lh);var JV,K4,Yf,q9t=H(213);M(274,1,{},Fm);var hi,Ql=!1,I9t=H(274);M(275,1,{},LR);var x9t=H(275);M(236,1,{236:1},Y7),o.b=0;var N9t=H(236);M(45,1,{45:1},We),o.b=0;var O9t=H(45);M(132,1,{},uD);var G9t=H(132),zV,xP;M(279,1,{});var J9t=H(279),Ul,Kf;M(285,1,{},Rj);var YV,kU,L9,ol=!1,s9,Xf,z9t=H(285);M(49,1,Rf,P8,Vs,C3,Bh),o.c=!1,o.d=0;var Y9t=H(49);M(62,193,{193:1,62:1,4:1},KD,lj),o.Eb=function(e,A){return this.a=QR(this,e,A),this.a!=0},o.Fb=function(){this.a=0},o.Gb=function(){var e;return e=new KD,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},o.Hb=function(e,A){return QR(this,e,A)!=0},o.Ib=function(e,A){var n,P,r,i,f,D,Q;ae(e,this.g?Gs(iP,UT(e)):DB(e)),i=A?Z1(A,this.i[0].a):this.i[0].a,D=A?X1(A,this.i[0].b):this.i[0].b,f=A?Z1(A,this.i[1].a):this.i[1].a,Q=A?X1(A,this.i[1].b):this.i[1].b,n=f-i,P=Q-D,Ko(e,w.Math.max(1,.019999999552965164*w.Math.sqrt(n*n+P*P))),xr(e,i,D,f,Q),r=new YD(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),Yo(e,new rD(r))},o.Jb=function(e){var A,n,P,r,i,f;return f=rh(this),i=w.Math.max(f/8,3),A=kA(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 nD,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},o.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},o.Lb=function(){return\"arrow\"},o.Mb=function(e){var A,n,P,r,i,f;switch(ae(e,ID(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=rh(this),r=w.Math.max(i/8,3),A=kA(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 YD(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),Yo(e,new rD(f))}},o.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)}},o.a=0;var K9t=H(62);M(214,1,{},s7),o.a=!1,o.b=!1,o.i=0,o.j=0,o.q=0,o.r=!1,o.t=!1;var X9t=H(214);M(286,1,{},sj);var Z9t=H(286);M(183,1,{183:1,32:1},Q5),o.Sb=function(e){return JO(this,e)},o.mb=function(e){return this.d==e.d&&this.e==e.e},o.a=0,o.b=0,o.c=0,o.d=0,o.e=0,o.f=0,o.g=0;var W9t=H(183);M(97,55,{97:1,4:1,32:1,55:1},Mi);var Ll,sl,yl,bU,ll,Tl,stt=E9(97,EN);M(199,1,{199:1},Up),o.b=!1,o.e=0;var ytt=H(199);M(148,1,{148:1,32:1},As),o.Sb=function(e){return YG(this,e)},o.a=0,o.b=0,o.c=0,o.d=0,o.e=0;var ltt=H(148);M(300,1,{},u7),o.b=0,o.c=0;var RU,hl,_9t=H(300);M(202,1,{},Lo);var $9t=H(202);M(408,1,{},ij),o.b=0,o.g=0;var a9t=H(408);M(201,1,{201:1},NT),o.a=0;var trt=H(201);M(125,1,{125:1,32:1},gD),o.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},o.a=0,o.b=0;var ert=H(125);M(407,1,{},Gg);var Art=H(407);M(170,1,{170:1},Jl),o.b=0,o.c=0,o.d=!1;var Ttt=H(170);M(406,1,{},Qj),o.a=0,o.c=0,o.d=0,o.e=0,o.f=0,o.g=0,o.n=0,o.o=0,o.p=!1,o.q=0,o.r=0,o.s=0,o.K=0;var nrt=H(406);M(403,1,{},pb);var Prt=H(403);M(402,1,{},jA),o.a=0,o.b=0,o.c=0,o.q=0;var rrt=H(402);M(293,1,If,jm),o.mc=function(e){bX(this,e)},o.a=0,o.B=!1,o.C=0;var KV,XV,ci,irt=H(293);M(378,1,{},J7),o.nc=function(){_S(this.a,this.b)};var frt=H(378);M(295,1,If,Xm),o.mc=function(e){lX(this,e)},o.a=0,o.t=0,o.v=!1;var Drt=H(295);M(400,1,{},z7),o.nc=function(){$S(this.a,this.b)};var urt=H(400);M(220,1,If,bm,qk),o.mc=function(e){Gz(this,e)},o.a=0,o.f=!1,o.g=0,o.i=0,o.j=0,o.k=0;var ZV,Qrt=H(220);M(401,1,{},G7),o.nc=function(){aS(this.a,this.b)};var Urt=H(401);M(338,1,{});var ort=H(338);M(162,338,{}),o.j=0;var Lrt=H(162);M(24,162,{24:1},q1),o.a=!1;var srt=H(24);M(287,1,If,KR),o.mc=function(e){var A;Zt(e,140)?E$((A=this,A)):Zt(e,156)?Ya(this,e):Zt(e,137)&&Ia(this,e)},o.a=!1,o.b=!1,o.c=0,o.d=!1,o.e=0,o.f=0,o.g=!1,o.q=0,o.s=0,o.t=0,o.u=0,o.w=0,o.B=0,o.C=0,o.D=0,o.F=0,o.H=0,o.J=0,o.K=0,o.N=0,o.O=!1,o.T=0,o.U=0,o.W=!1,o.X=0,o.Y=0,o.Z=!1,o.$=0,o.ab=0,o.eb=0,o.fb=0,o.hb=0,o.ib=0,o.kb=0,o.lb=0;var jU=!0,yrt=H(287);M(294,1,{},pw);var lrt=H(294);M(296,1,{},Cw);var Trt=H(296);M(297,1,{},Ld),o.b=0;var hrt=H(297);M(298,1,{},_c),o.nc=function(){};var crt=H(298);M(299,1,{},Mw),o.nc=function(){rB(this.a)};var wrt=H(299);M(302,1,{},sd);var grt=H(302);M(303,1,{262:1},yd),o.oc=function(){ZO(this.a,this.c,this.b)},o.c=0;var drt=H(303);M(304,1,{},K7),o.Rb=function(e,A){return kJ(this.a,this.b,e,A)},o.mb=function(e){return this===e};var Brt=H(304);M(305,1,If,Zb),o.mc=function(e){Y5(this,e)},o.b=0,o.d=0,o.e=0,o.f=0,o.j=0,o.k=0,o.o=0;var v8=0,dn=0,vrt=H(305);M(307,1,{},X7),o.nc=function(){WS(this.a,this.b)},o.b=0;var Frt=H(307);M(301,1,If,iv),o.mc=function(e){dK(this,e)};var WV,cl,_V,mrt=H(301);M(404,1,{},Hw),o.nc=function(){Bq(this.a)};var krt=H(404);M(140,162,{140:1},Vo),o.a=0;var brt=H(140),$V,aV,Zf,tE;M(104,121,{121:1,104:1},du),o.qb=function(e){xr(this.B,e.a,e.c,e.b,e.d)},o.rb=function(e){MN(this.B,e.a,e.c,e.b,e.d)},o.sb=function(e){Yo(this.B,new rD(e))},o.tb=function(e,A,n){jT(this.B,A,n,e)},o.ub=function(e,A,n){nL(this.B,e,A,n)},o.vb=function(e){return GL(this.B,e).b},o.wb=function(){return this.b},o.xb=function(){_F(this),this.a=1},o.Ab=function(e){this.a=e,Ko(this.B,this.a)},o.Bb=function(e){ae(this.B,e)},o.Cb=function(e){this.b=e,this.B&&eL(this.B,e,!1,!1)},o.a=0,o.b=0;var eE=H(104);M(221,1,{});var Rrt=H(221);M(156,162,{156:1},QB),o.a=!1,o.b=0;var jrt=H(156);M(137,162,{137:1},ch),o.pb=function(){return AE[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\")},o.a=!1,o.b=0,o.c=0,o.d=!1,o.e=!1,o.f=!1,o.g=0,o.i=0;var AE,prt=H(137);M(56,1,{56:1},c9,v3),o.pb=function(){return\"x:\"+this.a+\" y:\"+this.b},o.a=0,o.b=0;var X4=H(56);M(118,1,{413:1},bv,YD),o.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},o.a=0;var Crt=H(118);M(35,1,{35:1,413:1},nD,QA),o.Hb=function(e,A){return Nr(this,e,A)},o.pb=function(){return\"x:\"+this.c+\" y:\"+this.d+\" w:\"+this.b+\" h:\"+this.a},o.a=0,o.b=0,o.c=0,o.d=0;var wl=H(35),de=-1,nE,Z4;M(410,1,{},Jg),o.getCanMolecule=function(e){var A;return A=X_(this.a,e),new CA(A)},o.getEncodedCoordinates=function(e){return Iu(this.a,e)},o.getEncodedMapping=function(){return Jd(this.a)},o.getFinalRank=function(){return this.a.f},o.getGraphAtoms=function(){return Rq(this.a)},o.getGraphIndexes=function(){return jq(this.a)},o.getIDCode=function(){return me(this.a)},o.getSymmetryRank=function(e){return Ho(this.a,e)},o.getSymmetryRanks=function(){return this.a.g},o.hasCIPParityDistinctionProblem=function(){return this.a.d},o.invalidateCoordinates=function(){this.a.s=null},o.normalizeEnantiomer=function(){return uj(this.a)},o.setParities=function(){Z5(this.a)};var Mrt=H(410);M(414,1,{},YU);var htt=2,ctt=0,wtt=1,gtt=4,dtt=3,Hrt=H(414);M(415,1,{},Yg),o.getConformerCount=function(){return this.a.p},o.getNextConformerAsMolecule=function(e){var A,n;return A=e?e.a:null,n=Ix(this.a,A),n?n==A?e:new CA(n):null},o.getOneConformerAsMolecule=function(e){var A;return A=Yx(this.a,e.a),A?e:null},o.getPotentialConformerCount=function(){return aq(this.a)},o.qc=function(e,A,n,P){return nZ(this.a,e.a,A,n,P)},o.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=jy);var r=A.use60degreeSteps;return r===void 0&&(r=!1),this.qc(e,n,P,r)};var Btt=4,vtt=3,Ftt=1,mtt=2,Vrt=H(415);M(416,1,{},X2);var Ert=H(416);M(417,1,{},Lg),o.assessDruglikeness=function(e){var A;return l_(this.a,(A=e.a,!gl&&(gl=new xl),A))},o.getDetail=function(){var e;return e=this.a.a,!e&&qN(),fQ(e)},o.getDruglikenessString=function(e){return ZK(e.a)};var ktt=-999,Srt=H(417);M(418,1,{},bB),o._minimise=function(e,A,n){return xb(this.a,e,A)},o.getTotalEnergy=function(){return Fq(this.a)},o.size=function(){return this.a.b.q};var btt=U4,Rtt=o4,jtt=Sy,PE=!1,rE=!1,iE=!1,qrt=H(418);M(42,1,{42:1},Y3,AL,CA),o.addAtom=function(e){return W9(this.a,e)},o.addBond=function(e,A){return tL(this.a,e,A)},o.addFragment=function(e,A,n){OR(this.a,e.a,A,n)},o.rc=function(){pN(this.a)},o.sc=function(e){yp(this.a,e)},o.addImplicitHydrogens=function(e){e===void 0?this.rc():this.sc(e)},o.tc=function(){oo(),h5(this.a,1)},o.uc=function(e){h5(this.a,e)},o.addMissingChirality=function(e){e===void 0?this.tc():this.uc(e)},o.addMolecule=function(e){return RD(this.a,e.a)},o.addOrChangeAtom=function(e,A,n,P,r,i,f){return Jh(this.a,e,A,n,P,r,i,f)},o.addOrChangeBond=function(e,A,n){return wb(this.a,e,A,n)},o.addRing=function(e,A,n,P,r){return lf(this.a,e,A,n,P,r)},o.addRingToAtom=function(e,A,n,P){return mR(this.a,e,A,n,P)},o.addRingToBond=function(e,A,n,P){return GQ(this.a,e,A,n,P)},o.addSubstituent=function(e,A){return Js(this.a,e.a,A)},o.calculateTorsion=function(e){return qQ(this.a,e)},o.canonizeCharge=function(e){return Pp(this.a,e,!1)},o.changeAtom=function(e,A,n,P,r){return Bf(this.a,e,A,n,P,r)},o.changeAtomCharge=function(e,A){return oh(this.a,e,A)},o.changeBond=function(e,A){return Q8(this.a,e,A)},o.clear=function(){ki(this.a)},o.convertStereoBondsToSingleBonds=function(e){m5(this.a,e)},o.copyAtom=function(e,A,n,P){return En(this.a,e.a,A,n,P)},o.copyBond=function(e,A,n,P,r,i){return DQ(this.a,e.a,A,n,P,r,i)},o.copyMolecule=function(e){uf(this.a,e.a)},o.copyMoleculeByAtoms=function(e,A,n,P){ui(this.a,e.a,A,n,P)},o.copyMoleculeByBonds=function(e,A,n,P){return Mj(this.a,e.a,A,n,P)},o.copyMoleculeProperties=function(e){ko(this.a,e.a)},o.deleteAtom=function(e){wQ(this.a,e)},o.deleteAtomOrBond=function(e,A){return tb(this.a,e,A)},o.deleteAtoms=function(e){return sJ(this.a,e)},o.deleteBond=function(e){TI(this.a,e)},o.deleteBondAndSurrounding=function(e){Zh(this.a,e)},o.deleteMarkedAtomsAndBonds=function(){return Pi(this.a)},o.deleteMolecule=function(){ki(this.a)},o.deleteSelectedAtoms=function(){return nQ(this.a)},o.ensureHelperArrays=function(e){ut(this.a,e)},o.findAlleneCenterAtom=function(e){return nb(this.a,e)},o.findAlleneEndAtom=function(e,A){return Tm(this.a,e,A)},o.findAtom=function(e,A){return ZA(this.a,e,A)},o.findBINAPChiralityBond=function(e){return Us(this.a,e)},o.findBond=function(e,A){return df(this.a,e,A)},o.findRingSystem=function(e,A,n,P){nR(this.a,e,A,n,P)},o.getAbsoluteAtomParity=function(e){return c3(this.a,e)},o.getAbsoluteBondParity=function(e){return Nq(this.a,e)},o.getAllAtoms=function(){return this.a.q},o.getAllBonds=function(){return this.a.r},o.getAllConnAtoms=function(e){return Mt(this.a,e)},o.getAllConnAtomsPlusMetalBonds=function(e){return De(this.a,e)},o.getAllHydrogens=function(e){return wd(this.a,e)},o.getAromaticRingCount=function(){return HO(this.a)},o.getAtomAbnormalValence=function(e){return br(this.a,e)},o.getAtomCIPParity=function(e){return jo(this.a,e)},o.getAtomCharge=function(e){return p1(this.a,e)},o.getAtomColor=function(e){return ou(this.a,e)},o.getAtomCustomLabel=function(e){return _n(this.a,e)},o.getAtomESRGroup=function(e){return VA(this.a,e)},o.getAtomESRType=function(e){return Ae(this.a,e)},o.getAtomLabel=function(e){return Ci(this.a,e)},o.getAtomList=function(e){return MA(this.a,e)},o.getAtomListString=function(e){return Yh(this.a,e)},o.getAtomMapNo=function(e){return C1(this.a,e)},o.getAtomMass=function(e){return ye(this.a,e)},o.getAtomParity=function(e){return d0(this.a,e)},o.getAtomPi=function(e){return a1(this.a,e)},o.getAtomPreferredStereoBond=function(e){return Vv(this.a,e)},o.getAtomQueryFeaturesObject=function(e){return ya(this.a,e)},o.getAtomRadical=function(e){return FA(this.a,e)},o.getAtomRingBondCount=function(e){return HT(this.a,e)},o.getAtomRingCount=function(e,A){return E5(this.a,e,A)},o.getAtomRingSize=function(e){return M9(this.a,e)},o.getAtomX=function(e){return kt(this.a,e)},o.getAtomY=function(e){return jt(this.a,e)},o.getAtomZ=function(e){return vA(this.a,e)},o.getAtomicNo=function(e){return K(this.a,e)},o.getAtoms=function(){return this.a.f},o.getAverageBondLength=function(e){return HL(this.a,e)},o.getAverageTopologicalAtomDistance=function(){return HX(this.a)},o.getBond=function(e,A){return D1(this.a,e,A)},o.getBondAngle=function(e,A){return Y0(this.a,e,A)},o.getBondAtom=function(e,A){return z(this.a,e,A)},o.getBondBridgeMaxSize=function(e){return gT(this.a,e)},o.getBondBridgeMinSize=function(e){return x3(this.a,e)},o.getBondCIPParity=function(e){return gu(this.a,e)},o.getBondESRGroup=function(e){return $i(this.a,e)},o.getBondESRType=function(e){return cP(this.a,e)},o.getBondLength=function(e){return hh(this.a,e)},o.getBondOrder=function(e){return dt(this.a,e)},o.getBondParity=function(e){return qe(this.a,e)},o.getBondPreferredStereoBond=function(e){return gY(this.a,e)},o.getBondQueryFeatures=function(e){return ee(this.a,e)},o.getBondQueryFeaturesObject=function(e){return f_(this.a,e)},o.getBondRingSize=function(e){return pr(this.a,e)},o.getBondType=function(e){return l1(this.a,e)},o.getBondTypeSimple=function(e){return Lu(this.a,e)},o.getBonds=function(){return this.a.g},o.getBounds=function(){var e;return e=Ib(this.a,oE),e?Ox(e.c,e.d,e.b,e.a):null},o.getCanonizedIDCode=function(e){var A;return A=new EA(this.a,e),me(A)},o.getChiralText=function(){return vR(this.a)},o.getChirality=function(){return this.a.I},o.getCompactCopy=function(){return new CA(Xn(this.a))},o.getConnAtom=function(e,A){return _(this.a,e,A)},o.getConnAtoms=function(e){return O(this.a,e)},o.getConnBond=function(e,A){return Ot(this.a,e,A)},o.getConnBondOrder=function(e,A){return pA(this.a,e,A)},o.getDefaultMaxValenceUncharged=function(e){return IO(this.a,e)},o.getDiastereotopicAtomIDs=function(){return YY(this.a)},o.getElectronValenceCorrection=function(e,A){return Fu(this.a,e,A)},o.getExcludedNeighbourCount=function(e){return EL(this.a,e)},o.getExplicitHydrogens=function(e){return R3(this.a,e)},o.getFinalRanks=function(e){var A;return A=new EA(this.a,e),A.f},o.getFisherProjectionParity=function(e,A,n,P){return R5(this.a,e,A,n,P)},o.getFragmentAtoms=function(e,A){return _m(this.a,e,A)},o.getFragmentNumbers=function(e,A,n){return n9(this.a,e,A,n)},o.getFragments=function(){var e,A,n;for(e=MO(this.a),n=h(W4,L4,42,e.length,0,1),A=0;A<e.length;A++)n[A]=new CA(e[A]);return n},o.getFreeValence=function(e){return Zi(this.a,e)},o.getHandleHydrogenMap=function(){return Qu(this.a)},o.getHelperArrayStatus=function(){return this.a.T},o.getHoseCodes=function(e){e=e||{};var A=(typeof e.maxSphereSize===TU?5:e.maxSphereSize)|0,n=(typeof e.type===TU?0:e.type)|0;return TJ(this.a,A,n)},o.getIDCode=function(){var e;return e=FF(this.a),e==null&&(e=me(new BA(this.a))),e},o.getIDCodeAndCoordinates=function(){return{idCode:this.getIDCode(),coordinates:this.getIDCoordinates()}},o.getIDCoordinates=function(){var e;return e=gG(this.a),e==null&&(e=B7(new BA(this.a))),e},o.getImplicitHigherValence=function(e,A){return Uf(this.a,e,A)},o.getImplicitHydrogens=function(e){return xt(this.a,e)},o.getIndex=function(){return rx(this.a)},o.getLowestFreeValence=function(e){return gQ(this.a,e)},o.getMaxAtoms=function(){return this.a.M},o.getMaxBonds=function(){return this.a.N},o.getMaxValence=function(e){return lT(this.a,e)},o.getMaxValenceUncharged=function(e){return Cn(this.a,e)},o.getMetalBondedConnAtoms=function(e){return xi(this.a,e)},o.getMolecularFormula=function(){return new Pg(this.a)},o.getMoleculeColor=function(){return this.a.O},o.getMolweight=function(){return wY(this.a)},o.getName=function(){return this.a.P},o.getNonHydrogenNeighbourCount=function(e){return e0(this.a,e)},o.getNumberOfHydrogens=function(){return KG(this.a)},o.getOccupiedValence=function(e){return G1(this.a,e)},o.getPath=function(e,A,n,P,r){return l2(this.a,e,A,n,P,null,r)},o.getPathBonds=function(e,A,n){Vm(this.a,e,A,n)},o.getPathLength=function(e,A){return o5(this.a,e,A)},o.getRingSet=function(){return new Sw(On(this.a))},o.getRotatableBondCount=function(){return hR(this.a)},o.getStereoBond=function(e){return pQ(this.a,e)},o.getStereoCenterCount=function(){return oF(this.a)},o.vc=function(){return this.a},o.getStereoProblem=function(e){return Vg(this.a,e)},o.getSubstituent=function(e,A,n,P,r){return SQ(this.a,e,A,n,P.a,r)},o.getSubstituentSize=function(e,A){return L5(this.a,e,A)},o.getSymmetryRank=function(e){return R0(this.a,e)},o.getZNeighbour=function(e,A){return _R(this.a,e,A)},o.invalidateHelperArrays=function(e){YS(this.a,e)},o.inventCoordinates=function(){var e;e=new i7,e.g=new zr(0),Ar(e,this.a),Lf(this.a)},o.is3D=function(){return GT(this.a)},o.isAlkaliMetal=function(e){return LO(this.a,e)},o.isAllylicAtom=function(e){return sI(this.a,e)},o.isAmideTypeBond=function(e){return RK(this.a,e)},o.isAromaticAtom=function(e){return vn(this.a,e)},o.isAromaticBond=function(e){return _e(this.a,e)},o.isAtomConfigurationUnknown=function(e){return Fr(this.a,e)},o.isAtomMarkedForDeletion=function(e){return Xq(this.a,e)},o.isAtomParityPseudo=function(e){return Ei(this.a,e)},o.isAtomStereoCenter=function(e){return E8(this.a,e)},o.isAutoMappedAtom=function(e){return Bn(this.a,e)},o.isBINAPChiralityBond=function(e){return fi(this.a,e)},o.isBondBackgroundHilited=function(e){return V3(this.a,e)},o.isBondBridge=function(e){return Bu(this.a,e)},o.isBondForegroundHilited=function(e){return vr(this.a,e)},o.isBondMarkedForDeletion=function(e){return $q(this.a,e)},o.isBondParityPseudo=function(e){return wo(this.a,e)},o.isBondParityUnknownOrNone=function(e){return E3(this.a,e)},o.isChalcogene=function(e){return VT(this.a,e)},o.isDelocalizedBond=function(e){return G8(this.a,e)},o.isEarthAlkaliMetal=function(e){return sO(this.a,e)},o.isElectronegative=function(e){return tA(this.a,e)},o.isElectropositive=function(e){return EY(this.a,e)},o.isFlatNitrogen=function(e){return EP(this.a,e,!0)},o.isFragment=function(){return this.a.K},o.isHalogene=function(e){return ON(this.a,e)},o.isMarkedAtom=function(e){return z0(this.a,e)},o.isMetalAtom=function(e){return _0(this.a,e)},o.isNaturalAbundance=function(e){return Du(this.a,e)},o.isNitrogenFamily=function(e){return yT(this.a,e)},o.isOrganicAtom=function(e){return bb(this.a,e)},o.isPseudoRotatableBond=function(e){return $b(this.a,e)},o.isPurelyOrganic=function(){return hK(this.a)},o.isRingAtom=function(e){return qi(this.a,e)},o.isRingBond=function(e){return fA(this.a,e)},o.isSelectedAtom=function(e){return r0(this.a,e)},o.isSelectedBond=function(e){return mP(this.a,e)},o.isSimpleHydrogen=function(e){return lG(this.a,e)},o.isSmallRingAtom=function(e){return go(this.a,e)},o.isSmallRingBond=function(e){return WP(this.a,e)},o.isStabilizedAtom=function(e){return yI(this.a,e)},o.isStereoBond=function(e){return Cr(this.a,e)},o.markAtomForDeletion=function(e){Zw(this.a,e)},o.markBondForDeletion=function(e){tq(this.a,e)},o.normalizeAmbiguousBonds=function(){return Qi(this.a)},o.removeAtomColors=function(){xd(this.a)},o.removeAtomCustomLabels=function(){this.a.t=null},o.removeAtomMarkers=function(){nT(this.a)},o.removeAtomSelection=function(){hx(this.a)},o.removeBondHiliting=function(){$d(this.a)},o.removeExplicitHydrogens=function(){g5(this.a,!0)},o.removeQueryFeatures=function(){return Yb(this.a)},o.renumberESRGroups=function(e){return $0(this.a,e)},o.scaleCoords=function(e){GB(this.a,e)},o.setAllAtoms=function(e){fq(this.a,e)},o.setAllBonds=function(e){Dq(this.a,e)},o.setAssignParitiesToNitrogen=function(e){xq(this.a,e)},o.setAtomAbnormalValence=function(e,A){XA(this.a,e,A)},o.setAtomCIPParity=function(e,A){bd(this.a,e,A)},o.setAtomCharge=function(e,A){E0(this.a,e,A)},o.setAtomColor=function(e,A){FD(this.a,e,A)},o.setAtomConfigurationUnknown=function(e,A){Xo(this.a,e,A)},o.setAtomCustomLabel=function(e,A){u8(this.a,e,A)},o.setAtomESR=function(e,A,n){He(this.a,e,A,n)},o.setAtomList=function(e,A,n){Tf(this.a,e,A,n)},o.setAtomMapNo=function(e,A,n){Ze(this.a,e,A,n)},o.setAtomMarker=function(e,A){zn(this.a,e,A)},o.setAtomMass=function(e,A){jr(this.a,e,A)},o.setAtomParity=function(e,A,n){ce(this.a,e,A,n)},o.setAtomQueryFeature=function(e,A,n){T1(this.a,e,A,n)},o.setAtomRadical=function(e,A){Ne(this.a,e,A)},o.setAtomSelection=function(e,A){dP(this.a,e,A)},o.setAtomX=function(e,A){Be(this.a,e,A)},o.setAtomY=function(e,A){Ie(this.a,e,A)},o.setAtomZ=function(e,A){hP(this.a,e,A)},o.setAtomicNo=function(e,A){K0(this.a,e,A)},o.setBondAtom=function(e,A,n){BD(this.a,e,A,n)},o.setBondBackgroundHiliting=function(e,A){vx(this.a,e,A)},o.setBondCIPParity=function(e,A){td(this.a,e,A)},o.setBondESR=function(e,A,n){U8(this.a,e,A,n)},o.setBondForegroundHiliting=function(e,A){Fx(this.a,e,A)},o.setBondOrder=function(e,A){uT(this.a,e,A)},o.setBondParity=function(e,A,n){A8(this.a,e,A,n)},o.setBondParityUnknownOrNone=function(e){n3(this.a,e)},o.setBondQueryFeature=function(e,A,n){Ge(this.a,e,A,n)},o.setBondType=function(e,A){w0(this.a,e,A)},o.setChirality=function(e){Gl(this.a,e)},o.setFragment=function(e){je(this.a,e)},o.setHelperValidity=function(e){RS(this.a,e)},o.setHydrogenProtection=function(e){bS(this.a,e)},o.setMaxAtoms=function(e){kQ(this.a,e)},o.setMaxBonds=function(e){eQ(this.a,e)},o.setMoleculeColor=function(e){jS(this.a,e)},o.setName=function(e){$2(this.a,e)},o.setParitiesValid=function(e){sD(this.a,e)},o.setStereoBondFromAtomParity=function(e){Ay(this.a,e)},o.setStereoBondFromBondParity=function(e){Nj(this.a,e)},o.setStereoBondsFromParity=function(){Lf(this.a)},o.setToRacemate=function(){this.a.L=!0},o.setUnknownParitiesToExplicitlyUnknown=function(){H3(this.a)},o.shareSameFragment=function(e,A){return o5(this.a,e,A)!=-1},o.stripIsotopInfo=function(){return SJ(this.a)},o.stripSmallFragments=function(e){return VR(this.a,e)},o.stripStereoInformation=function(){ds(this.a)},o.suggestBondType=function(e,A){return Ax(this.a,e,A)},o.supportsImplicitHydrogen=function(e){return aL(this.a,e)},o.swapAtoms=function(e,A){S5(this.a,e,A)},o.swapBonds=function(e,A){t5(this.a,e,A)},o.toIsomericSmiles=function(e){e=e||{};var A=e.createSmarts===!0,n=e.includeMapping===!0,P=e.kekulizedOutput===!0;return this.wc(A,n,P)},o.wc=function(e,A,n){return Gv(this,e,A,n)},o.toMolfile=function(){var e;return e=new p3(this.a),e.a.a},o.toMolfileV3=function(){var e;return e=new dg(this.a),e.b.a},o.toSVG=function(e,A,n,P,r,i,f){var D,Q,U,L,s,y,l,T,c,g,m,v;for(U=!0,s=0;s<this.a.q-1;s++)if(kt(this.a,s)!=kt(this.a,s+1)||jt(this.a,s)!=jt(this.a,s+1)){U=!1;break}return y=U?Xn(this.a):this.a,U&&Ar(new Y8(0),y),ut(y,95),v=WW(f),L=J_(f),Q=new Ik(y,L,i),Q.J=n,L2(Q,null,new QA(0,0,e,A),v),D=Q.v,W5(Q,null),m=Jj(Q),P?(T=zt(E1(w.Math.round(D.b+r*2))),l=zt(E1(w.Math.round(D.a+r*2))),c=zt(E1(w.Math.round(D.c-r))),g=zt(E1(w.Math.round(D.d-r))),bT(m,'width=\"\\\\d+px\" height=\"\\\\d+px\" viewBox=\"0 0 \\\\d+ \\\\d+\"','width=\"'+T+'px\" height=\"'+l+'px\" viewBox=\"'+c+\" \"+g+\" \"+T+\" \"+l+'\"')):m},o.toSmarts=function(){return Ru(new hD(this.a,1))},o.toSmiles=function(){return Gv(this,!1,!1,!0)},o.translateCoords=function(e,A){CL(this.a,e,A)},o.validate=function(){$W(this.a)},o.zoomAndRotate=function(e,A,n){Rk(this.a,e,A,n)},o.zoomAndRotateInit=function(e,A){eb(this.a,e,A)};var ptt=32,Ctt=2,Mtt=4,Htt=6,Vtt=64,Ett=128,Stt=1,qtt=256,Itt=8,xtt=re,Ntt=16,Ott=I1,Gtt=512,Jtt=cV,ztt=24,Ytt=cV,fE,Ktt=q6,Xtt=E6,Ztt=S6,Wtt=0,_tt=3,$tt=1,att=2,t1t=64,e1t=384,A1t=448,n1t=192,P1t=256,r1t=0,i1t=320,f1t=128,DE,D1t=1,u1t=2,Q1t=4,U1t=0,o1t=3,L1t=1,s1t=Ty,y1t=2,l1t=1,T1t=2,h1t=i9,c1t=3,w1t=25,g1t={l:4186111,m:4193407,h:127},d1t=5,B1t=39,v1t=Vf,F1t=Pe,m1t=Ur,k1t=ZQ,b1t=rP,R1t=4,j1t=7,p1t=XQ,C1t=KQ,M1t=ge,H1t=C0,V1t={l:4194302,m:4193343,h:7},E1t=5,S1t=17,q1t=si,I1t=rr,x1t=7,N1t=32,O1t=I1,G1t=46,J1t=v2,z1t=128,Y1t=I0,K1t=Sn,X1t=xp,Z1t=256,W1t=T8,_1t=s8,$1t=Np,a1t=512,t0t=l8,e0t=Q0,A0t=16,n0t=Op,P0t=re,r0t=h8,i0t=32,f0t=aQ,D0t=qA,u0t=64,Q0t=4,U0t=8,o0t=Tn,L0t=nU,s0t=134217728,y0t=3,l0t=14,T0t=Li,h0t=L8,c0t=ir,w0t=fr,g0t=Dr,d0t=ur,B0t=Qr,v0t=pf,F0t=120,m0t=4,k0t=3,b0t=2,R0t=c8,j0t=lU,p0t=c8,C0t=cn,M0t=30,H0t=C6,V0t=f9,E0t=3,S0t=22,q0t=m6,I0t=2,x0t=44,N0t=48,O0t=32,G0t=0,J0t=16,z0t=4,Y0t=48,uE,K0t=1,X0t=0,Z0t=3,W0t=2,_0t=1,$0t=0,a0t=3,tet=2,eet=oi,Aet=AU,net=2,Pet=21,ret=qA,iet=31,fet=5,Det=0,uet=y8,Qet=8,Uet=7680,oet=4,Let=9,set=9,yet=wy,Tet=4,het=13,cet=8,wet=8388480,get=2,det=Ef,Bet=h8,vet=16,Fet=6291840,met=23,ket=fP,bet=128,Ret=32,jet=64,pet=96,Cet=2,Met=5,Het=256,Vet=SP,Eet=3,qet=17,Iet=384,xet=2,Net=7,Oet=6291967,Get=1,Jet=4,zet=386,Yet=512,Ket=8,Xet=2,Zet=129,Wet=511,_et=127,$et=384,aet=16,tAt=32,eAt=64,AAt=1,nAt=4,PAt=257,rAt=458752,iAt=yi,fAt=w1,DAt=T8,uAt=I0,QAt=Q0,UAt=ly,oAt=0,LAt=327680,QE,sAt=24,yAt=321,lAt=6,TAt=5,hAt=32,cAt=0,wAt=1,gAt=2,dAt=255,BAt=16,vAt=128,FAt=1,mAt=8,kAt=4,bAt=2,RAt=32,jAt=64,pAt=248,CAt=31,MAt=1,HAt=0,VAt=15,EAt=7,SAt=3,qAt=63,IAt=95,xAt=190,NAt=16,OAt=0,GAt=1,JAt=16,zAt=256,YAt=128,KAt=8,XAt=32,ZAt=4,WAt=511,_At=64,$At=1,aAt=2,UE,oE,W4=H(42);M(419,279,{},p7),$n(o,{acceptorCount:{get:function(){return GO(this)}}}),$n(o,{donorCount:{get:function(){return kG(this)}}}),$n(o,{logP:{get:function(){return YJ(this)}}}),$n(o,{logPString:{get:function(){return fQ(S$((new Lh,this.a)))}}}),$n(o,{logS:{get:function(){return vK((Q6(),this.a))}}}),$n(o,{logSString:{get:function(){return fQ(p_((Q6(),this.a)))}}}),$n(o,{polarSurfaceArea:{get:function(){return FO((e6(),this.a))}}}),$n(o,{polarSurfaceAreaString:{get:function(){return fQ(KX((e6(),this.a)))}}}),$n(o,{rotatableBondCount:{get:function(){return hR(this.a)}}}),$n(o,{stereoCenterCount:{get:function(){return oF(this.a)}}});var Irt=H(419);M(67,1,{},_P,Cd),o.addCatalyst=function(e){al(this.a,e.a)},o.addCatalystAt=function(e,A){dq(this.a,e.a,A)},o.addProduct=function(e){S7(this.a,e.a)},o.addProductAt=function(e,A){iI(this.a,e.a,A)},o.addReactant=function(e){q7(this.a,e.a)},o.addReactantAt=function(e,A){fI(this.a,e.a,A)},o.clear=function(){nv(this.a)},o.clone=function(){return new _P(new Vs(this.a))},o.getAverageBondLength=function(){return fb(this.a)},o.getCatalyst=function(e){return new CA(Oq(this.a,e))},o.getCatalysts=function(){return this.a.a.a.length},o.getHighestMapNo=function(){return ms(this.a)},o.getMergedCopy=function(){return new _P(WK(this.a))},o.getMolecule=function(e){return new CA(Pv(this.a,e))},o.getMolecules=function(){return ex(this.a)},o.getName=function(){return oI(this.a)},o.getProduct=function(e){return new CA(w3(this.a,e))},o.getProducts=function(){return this.a.f.a.length},o.getReactant=function(e){return new CA(dr(this.a,e))},o.getReactants=function(){return this.a.g.a.length},o.getReactionCenterMapNos=function(){return ia(this.a)},o.isEmpty=function(){return AX(this.a)},o.isFragment=function(){return Sq(this.a)},o.isPerfectlyMapped=function(){return k$(this.a)},o.isReactionLayoutRequired=function(){return U_(this.a)},o.removeCatalysts=function(){mi(this.a.a.a,0)},o.setFragment=function(e){yz(this.a,e)},o.setName=function(e){IS(this.a,e)},o.toRxn=function(e){var A;return A=new IR(this.a,e),A.a?A.a.a:null},o.toRxnV3=function(e){var A;return A=new rj(this.a,e),A.a?A.a.a:null},o.toSmiles=function(){return AZ(this.a)},o.validateMapping=function(){l$(this.a)};var xrt=H(67);M(420,1,{},ac);var tnt=\"+\",ent=15,Ant=8,nnt=2,Pnt=3,rnt=4,int=1,fnt=0,Dnt=\" \",unt=\"#\",Qnt=\"!\",Unt=16,Nrt=H(420);M(421,1,{},I7),o.getProducts=function(){var e,A,n,P;if(P=VJ(this.a),P.length==0)return R1(W4,[nA,L4],[172,42],0,[0,0],2);for(n=R1(W4,[nA,L4],[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 CA(P[e][A]);return n},o.setReactant=function(e,A){return ZW(this.a,e,A.a)};var Ort=H(421);M(422,1,{},_2);var pU=!1,Grt=H(422);M(261,1,{},Sw),o.determineAromaticity=function(e,A,n,P){Zs(this.a,e,A,n,P)},o.getAtomIndex=function(e,A){return rF(this.a,e,A)},o.getAtomRingSize=function(e){return iA(this.a,e)},o.getBondIndex=function(e,A){return _O(this.a,e,A)},o.getBondRingSize=function(e){return yP(this.a,e)},o.getHeteroPosition=function(e){return cq(this.a,e)},o.getRingAtoms=function(e){return h3(this.a,e)},o.getRingBonds=function(e){return V7(this.a,e)},o.getRingSize=function(e){return N3(this.a,e)},o.getSharedRing=function(e,A){return KL(this.a,e,A)},o.getSize=function(){return this.a.j.a.length},o.isAromatic=function(e){return u3(this.a,e)},o.isAtomMember=function(e,A){return yA(this.a,e,A)},o.isBondMember=function(e,A){return Af(this.a,e,A)},o.isDelocalized=function(e){return wq(this.a,e)},o.qualifiesAsAmideTypeBond=function(e){return ps(this.a,e)},o.validateMemberIndex=function(e,A){return WT(this.a,e,A)};var ont=7,Lnt=3,snt=7,ynt=5,lnt=1,Jrt=H(261);M(423,1,{},ld),o.getField=function(e){var A,n;for(n=fx(this.a),A=0;A<n.length;A++)if(A1(n[A],e))return iB(this.a,A);return null},o.getFieldData=function(e){return iB(this.a,e)},o.getFieldNames=function(e){return aI(this.a,e)},o.getMolecule=function(){return new CA(NY(this.a))},o.getNextFieldData=function(){var e;return e=this.a.b.a,e},o.getNextMolFile=function(){var e;return e=this.a.g.a,e},o.next=function(){return F$(this.a)};var zrt=H(423);M(425,1,{},AB),o.findFragmentInMolecule=function(e){var A;return A=DX(e),sn(this.b,A,this.a)},o.getMatchList=function(){return QJ(this.b.F)},o.isFragmentInMolecule=function(){return Ag(this.b)},o.setFragment=function(e){Ln(this.b,e.a)},o.setMol=function(e,A){Dn(this.b,A.a),Ln(this.b,e.a)},o.setMolecule=function(e){Dn(this.b,e.a)},o.a=0;var Yrt=H(425);M(426,1,{},t7),o.createIndex=function(e){return Ts(this.a,e.a)},o.isFragmentInMolecule=function(){return jK(this.a)},o.setFragment=function(e,A){LN(this.a,e.a,A)},o.setMolecule=function(e,A){sN(this.a,e.a,A)};var Krt=H(426);M(427,1,{},Ww),o.getSmartsWarning=function(){return wN(this.a)},o.xc=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)},o.yc=function(e,A,n,P){var r;return kd(this.a,e.a,KA((r=A,JD(),r)),n,P),e},o.parseMolecule=function(e,A){A=A||{};var n=A.molecule||new Y3,P=!A.noCoordinates,r=!A.noStereo;return this.yc(n,e,P,r)},o.parseReaction=function(e){return new _P(kN(this.a,e))},o.setRandomSeed=function(e){SS(this.a,e)};var Xrt=H(427);M(428,1,{},$7),o.assessRisk=function(e,A){var n;return cZ(e.a,(n=A,!gl&&(gl=new xl),n))},o.getDetail=function(e,A){return fQ(u$(e.a,A))};var Tnt=3,hnt=2,LE,cnt=1,wnt=0,gnt=2,dnt=0,Bnt=3,vnt=1,Zrt=H(428);M(429,1,{},zg),o.applyTransformation=function(e,A){SG(this.a,e.a,A)},o.setMolecule=function(e,A){return nX(this.a,e.a)};var Wrt=H(429);M(430,1,{},$c);var _rt=H(430);M(260,153,{153:1},Pg),$n(o,{absoluteWeight:{get:function(){return BO(this)}}}),$n(o,{formula:{get:function(){return wJ(this)}}}),$n(o,{relativeWeight:{get:function(){return vO(this)}}});var $rt=H(260);M(431,1,{},db),o.addPastedOrDropped=function(e,A,n){YR(this.a,e.a)},o.clearAll=function(){sb(this.a)},o.fireKeyEvent=function(e,A,n,P,r,i){var f;f=new QB(e,A,i,this.a),YT(this.d,f)},o.fireMouseEvent=function(e,A,n,P,r,i,f,D,Q){var U;U=new ch(e,A,n,P,r,i,f,D,Q,this.a),YT(this.e,U)},o.getGenericEditorArea=function(){return this.a},o.zc=function(){return this.c},o.getMode=function(){return this.a.U},o.getMolecule=function(){return new CA(this.a.V)},o.getReaction=function(){return new _P(dh(this.a))},o.moleculeChanged=function(){ZN(this.a)},o.repaint=function(){n1(this)},o.setMolecule=function(e){dJ(this.a,e.a)},o.setReaction=function(e){ER(this.a,e.a)},o.toolChanged=function(e){au(this.a,e)},o.b=!1;var Fnt=4,mnt=8,knt=1,bnt=2,sE,yE,lE,TE,Rnt=-2,jnt=-5,pnt=-1,Cnt=-4,Mnt=-8,Hnt=-7,Vnt=1,Ent=2,Snt=-6,qnt=-3,Int=8,xnt=2,Nnt=1,Ont=4,Gnt=3,Jnt=7,znt=4,Ynt=5,Knt=6,Xnt=1,Znt=2,Wnt=-1,_nt=-2,$nt=0,ant=1,tPt=4,ePt=2,APt=3,nPt=10,PPt=5,rPt=6,iPt=13,fPt=11,DPt=7,uPt=8,QPt=12,UPt=9,art=H(431);M(288,1,If,Vw),o.mc=function(e){Vx(this.a,e.j,e.a)};var tit=H(288);M(291,1,{262:1},Ew),o.oc=function(){$I(this.a)};var eit=H(291);M(433,1,{},Rm),o.fireMouseEvent=function(e,A,n,P,r,i,f,D,Q){var U;U=new ch(e,A,n,P,r,i,f,D,Q,this.b),YT(this.d,U)},o.getHeight=function(){return this.b.e},o.Ac=function(){return this.c},o.getWidth=function(){return this.b.o},o.setDimensions=function(e,A){cB(this,e,A)},o.a=!1;var Ait=H(433);M(306,1,{262:1},qw),o.oc=function(){PF(this.a)};var nit=H(306);M(432,1,{},gB),o.build16x16CursorImage=function(e){var A;return A=Uv(this,16,16),EK(A,e),A.a},o.createDialog=function(e,A){return ED(this,e,A)},o.createImage=function(e,A){return Uv(this,e,A)},o.createNativeDialog=function(e){return eB(this,e)},o.createPopupMenu=function(e){return null},o.Bc=function(){return this.a},o.grabFocus=function(){Md(this)},o.openChemistryFile=function(e){return null},o.runLater=function(e){sL(this,e)},o.Cc=function(e){e.oc()},o.setCursor=function(e){Yd(this,e)},o.setEditorArea=function(e){},o.showHelpDialog=function(e,A){hT(this,e,A)},o.showMessage=function(e){};var Pit=H(432);M(171,1,{}),o.Dc=function(e,A){QO(this,new Vo(this,e,A))},o.Ec=function(){return this.b};var rit=H(171);M(454,171,{},y7);var iit=H(454);M(290,1,{},Iw),o.Fc=function(){return this.a};var fit=H(290);M(455,171,{},l7);var Dit=H(455);M(292,1,{},xw),o.Gc=function(){this.a&&this.a.mc(new Vo(this,1,0))},o.Hc=function(){this.a&&this.a.mc(new Vo(this,0,0))},o.Ic=function(){return this.b};var uit=H(292);M(157,1,{},a2),o.Jc=function(){return this.a};var Qit=H(157);M(219,1,{},WU),o.pc=function(){var e=this.Kc();return e},o.Kc=function(){return this.a};var Uit=H(219);M(289,221,{},aw);var oit=H(289);M(453,171,{},T7);var Lit=H(453);M(218,221,{},e3);var sit=H(218);M(139,1,{},rD),o.getSize=function(){return this.a.a},o.getX=function(e){return U7(this.a,e)},o.getY=function(e){return o7(this.a,e)};var yit=H(139);M(456,171,{},h7);var lit=H(456);M(212,1,{},xl);var gl=null,Tit=H(212),_4=null;M(257,1,Rf,Il),o.Rb=function(e,A){return cs(e,A)},o.mb=function(e){return this===e};var hit=H(257),xA,wi;M(131,1,Rf,AD),o.Rb=function(e,A){return hs(e,A)},o.mb=function(e){return this===e};var cit=H(131);M(92,1,{},pi,M3);var wit=H(92);M(382,92,Rf,Kg);var git=H(382);M(344,129,yn);var dit=H(344);M(163,344,{163:1,4:1,19:1,33:1,27:1},qB),o.ic=function(){return AK(this),this.c},o.Lc=function(){return J1(this.b)===J1($4)?null:this.b};var $4,Bit=H(163);M(409,1,{});var vit=H(409),CU=0,hE=0,MU=-1;M(396,409,{},tw);var a4,Fit=H(396),In,tc,cE,ec,Ac;M(57,1,{},BP,jL),o.a=0;var mit=H(57);M(239,1,{},eT),o.b=0;var wE=null,gE,kit=H(239);M(160,1,{160:1}),o.mb=function(e){return aF(this,e)},o.ob=function(){var e;return e=this.Mc()+this.Nc(),vt(e)*37};var bit=H(160);M(168,160,{168:1,160:1},M7),o.mb=function(e){var A;return Zt(e,168)?(A=e,this.a==A.a&&this.b==A.b):aF(this,e)},o.Mc=function(){return this.a},o.Nc=function(){return this.b},o.a=0,o.b=0;var Rit=H(168);M(159,160,{160:1,159:1,4:1},Pw,ig),o.Mc=function(){return this.a},o.Nc=function(){return this.b},o.a=0,o.b=0;var oPt=H(159);M(451,1,{});var jit=H(451);M(248,451,{248:1}),o.mb=function(e){var A;return e===this?!0:Zt(e,169)?(A=e,this.c==A.c&&this.d==A.d&&this.b==A.b&&this.a==A.a):!1},o.ob=function(){var e;return e=ss(this.c),e=O1(e,Un(ss(this.d),37)),e=O1(e,Un(ss(this.b),43)),e=O1(e,Un(ss(this.a),47)),zt(e)^zt(q0(e,32))};var pit=H(248);M(169,248,{248:1,169:1},iT),o.a=0,o.b=0,o.c=0,o.d=0;var Cit=H(169);M(447,1,{}),o.Oc=function(){var e;return e=h(l9,a0,6,1,15,1),this.Pc(e)==-1?-1:e[0]},o.Pc=function(e){return this.Qc(e,0,e.length)};var Mit=H(447);M(53,447,{},nn),o.Oc=function(){return bL(this)},o.Qc=function(e,A,n){return this.b.Qc(e,A,n)},o.a=0;var Hit=H(53);M(412,1,{});var Vit=H(412);M(411,412,{});var Eit=H(411);M(446,1,{});var Sit=H(446);M(103,447,{},Fi),o.Oc=function(){return Xx(this.a)},o.Pc=function(e){return NF(this,e,0,e.length)},o.Qc=function(e,A,n){return NF(this,e,A,n)};var qit=H(103);M(265,411,{},rw);var Iit=H(265);M(86,447,{},b9),o.Oc=function(){return this.a==this.b.length?-1:Yi(this.b,this.a++)},o.Qc=function(e,A,n){var P;return this.a>=this.b.length?-1:(P=w.Math.min(this.b.length-this.a,n),iO(this.b,this.a,this.a+P,e,A),this.a+=P,P)},o.a=0;var xit=H(86);M(448,1,{});var Nit=H(448);M(238,448,{},f3),o.pb=function(){return this.a.a};var Oit=H(238);M(130,1,{206:1}),o.pb=function(){return this.a};var Git=H(130);M(82,33,yn,p8);var Jit=H(82);M(255,79,yn,f7,m7);var zit=H(255);M(141,1,{4:1,141:1,32:1},zl),o.Sb=function(e){return this.a-e.a},o.mb=function(e){return Zt(e,141)&&e.a==this.a},o.ob=function(){return this.a},o.pb=function(){return String.fromCharCode(this.a)},o.a=0;var LPt=H(141),nc;M(66,33,yn,P3,C8);var Yit=H(66);M(164,33,yn,P7,ro);var Kit=H(164);M(142,120,{4:1,32:1,142:1,120:1},Yl),o.Sb=function(e){return q3(this.a,e.a)},o.Xc=function(){return this.a},o.mb=function(e){return Zt(e,142)&&e.a==this.a},o.ob=function(){return this.a},o.Yc=function(){return this.a},o.pb=function(){return\"\"+this.a},o.a=0;var sPt=H(142),Pc;M(143,120,{4:1,32:1,143:1,120:1},Kl),o.Sb=function(e){return Mx(this.a,e.a)},o.Xc=function(){return Jr(this.a)},o.mb=function(e){return Zt(e,143)&&P0(e.a,this.a)},o.ob=function(){return JI(this.a)},o.Yc=function(){return zt(this.a)},o.pb=function(){return\"\"+Te(this.a)},o.a=0;var yPt=H(143),rc;M(514,1,{}),M(397,33,yn,d7);var Xit=H(397);M(40,66,{4:1,19:1,40:1,33:1,27:1},YP);var Zit=H(40);M(115,1,{4:1,115:1},oT),o.mb=function(e){var A;return Zt(e,115)?(A=e,this.c==A.c&&this.d==A.d&&this.a==A.a&&this.b==A.b):!1},o.ob=function(){return fJ(B(d(uP,1),A0,1,5,[k1(this.c),this.a,this.d,this.b]))},o.pb=function(){return this.a+\".\"+this.d+\"(\"+(this.b!=null?this.b:\"Unknown Source\")+(this.c>=0?\":\"+this.c:\"\")+\")\"},o.c=0;var dE=H(115);M(76,130,{206:1},TD,fu);var Wit=H(76);M(25,130,{206:1},V0,k9,Fn);var _it=H(25);M(516,1,{});var gi;M(39,33,yn,dA,lD);var $it=H(39);M(31,120,{4:1,32:1,120:1,31:1},Me,a3,Zd,nf,Z7,pD),o.Sb=function(e){return qR(this,e)},o.Xc=function(){return Le(be(this))},o.mb=function(e){var A;return this===e?!0:Zt(e,31)?(A=e,this.e==A.e&&qR(this,A)==0):!1},o.ob=function(){var e;return this.b!=0?this.b:this.a<54?(e=E1(this.f),this.b=zt(V(e,-1)),this.b=33*this.b+zt(V(q0(e,32),-1)),this.b=17*this.b+vt(this.e),this.b):(this.b=17*Pm(this.c)+vt(this.e),this.b)},o.Yc=function(){return this.e<=-32||this.e>(this.d>0?this.d:w.Math.floor((this.a-1)*hU)+1)?0:Nd(this.e==0||this.a==0&&this.f!=-1?(!this.c&&(this.c=kP(E1(this.f))),this.c):this.e<0?bP((!this.c&&(this.c=kP(E1(this.f))),this.c),ii(-this.e)):x5((!this.c&&(this.c=kP(E1(this.f))),this.c),ii(this.e)))},o.pb=function(){return be(this)},o.a=0,o.b=0,o.d=0,o.e=0,o.f=0;var BE,HU,ic,fc,di,dl,VU,Dc,vE=H(31);M(23,120,{4:1,32:1,120:1,23:1},mA,IB,Ue,Zm,jg),o.Sb=function(e){return rs(this,e)},o.Xc=function(){return Le(t6(this,0))},o.mb=function(e){return Th(this,e)},o.ob=function(){return Pm(this)},o.Yc=function(){return Nd(this)},o.pb=function(){return t6(this,0)},o.b=-2,o.c=0,o.d=0,o.e=0;var uc,N2,FE,EU,SU,y9,Bi=H(23),mE,kE;M(99,1,{4:1,99:1},Vd,XD),o.mb=function(e){return Zt(e,99)&&e.a==this.a&&e.b==this.b},o.ob=function(){return this.a<<3|this.b.b},o.pb=function(){return\"precision=\"+this.a+\" roundingMode=\"+this.b},o.a=0;var ait=H(99),yr,Wf,Qc;M(72,55,{4:1,32:1,55:1,72:1},j9);var bE,RE,jE,pE,se,Bl,CE,ME,lPt=E9(72,dO);M(114,1,ay),o.Sb=function(e){return PN(this.a,e.a)},o.mb=function(e){var A;return e===this?!0:Zt(e,114)?(A=e,A1(this.a,A.a)):!1},o.ob=function(){return Qh(this.a)},o.pb=function(){return this.a};var tft=H(114);M(450,1,{});var eft=H(450);M(124,450,{},Pu,y3),o.a=0;var Aft=H(124);M(106,1,T4),o.getOrDefault=function(e,A){var n;return n=this.get(e),n==null&&!this.containsKey(e)?A:n},o.putIfAbsent=function(e,A){var n;return n=this.get(e),n??this.put(e,A)},o.replace=function(e,A){return this.containsKey(e)?this.put(e,A):null},o.clear=function(){this.$c().clear()},o.Zc=function(e){return dk(this,e)},o.containsKey=function(e){return!!Ch(this,e,!1)},o.containsValue=function(e){var A,n,P;for(n=this.$c().Tb();n.ad();)if(A=n.bd(),P=A.ed(),J1(e)===J1(P)||e!=null&&VP(e,P))return!0;return!1},o.mb=function(e){var A,n,P;if(e===this)return!0;if(!Zt(e,109)||(P=e,this.size()!=P.size()))return!1;for(n=P.$c().Tb();n.ad();)if(A=n.bd(),!this.Zc(A))return!1;return!0},o.get=function(e){return XP(Ch(this,e,!1))},o.ob=function(){return gF(this.$c())},o.isEmpty=function(){return this.size()==0},o.keySet=function(){return new Xl(this)},o.put=function(e,A){throw At(new lD(\"Put not supported on this map\"))},o.putAll=function(e){var A,n;for(U1(e),n=e.$c().Tb();n.ad();)A=n.bd(),this.put(A.dd(),A.ed())},o.remove=function(e){return XP(Ch(this,e,!0))},o.size=function(){return this.$c().size()},o.pb=function(){var e,A,n;for(n=new dL(\", \",\"{\",\"}\"),A=this.$c().Tb();A.ad();)e=A.bd(),Tv(n,jB(this,e.dd())+\"=\"+jB(this,e.ed()));return n.a?n.e.length==0?n.a.a:n.a.a+(\"\"+n.e):n.c},o.values=function(){return new fD(this)};var nft=H(106);M(334,106,T4),o.clear=function(){Cu(this)},o.containsKey=function(e){return Mu(this,e)},o.containsValue=function(e){return jd(this,e)},o.$c=function(){return new iD(this)},o.get=function(e){return qr(this,e)},o.put=function(e,A){return Sr(this,e,A)},o.remove=function(e){return BL(this,e)},o.size=function(){return dD(this)},o.b=0;var Pft=H(334);M(445,43,H2),o.Ub=function(){return new M8(this)},o.mb=function(e){var A;return e===this?!0:!Zt(e,85)||(A=e,A.size()!=this.size())?!1:AQ(this,A)},o.ob=function(){return gF(this)},o.removeAll=function(e){var A,n,P,r;if(U1(e),r=this.size(),r<e.size())for(A=this.Tb();A.ad();)n=A.bd(),e.contains(n)&&A.cd();else for(P=e.Tb();P.ad();)n=P.bd(),this.remove(n);return r!=this.size()};var rft=H(445);M(145,445,H2,iD),o.clear=function(){Cu(this.a)},o.contains=function(e){return mB(this,e)},o.Tb=function(){return new hF(this.a)},o.remove=function(e){var A;return mB(this,e)?(A=e.dd(),BL(this.a,A),!0):!1},o.size=function(){return dD(this.a)};var ift=H(145);M(335,1,{},hF),o._c=function(e){Kn(this,e)},o.bd=function(){var e;return Bd(this.f.b,this.d),kD(this.b),this.c=this.a,e=this.a.bd(),this.b=ih(this),e},o.ad=function(){return this.b},o.cd=function(){ku(!!this.c),Bd(this.f.b,this.d),this.c.cd(),this.c=null,this.b=ih(this),this.d=this.f.b},o.b=!1,o.d=0;var fft=H(335);M(226,1,{},Wl),o._c=function(e){Kn(this,e)},o.ad=function(){return p9(this)},o.bd=function(){return WB(this)},o.cd=function(){QL(this)},o.a=0,o.b=-1;var Dft=H(226);M(227,226,{},TT),o.cd=function(){QL(this)};var uft=H(227);M(133,94,bp,xD),o.addAtIndex=function(e,A){DL(e,this.b),this.c.addAtIndex(this.a+e,A),++this.b},o.getAtIndex=function(e){return ve(e,this.b),this.c.getAtIndex(this.a+e)},o.removeAtIndex=function(e){var A;return ve(e,this.b),A=this.c.removeAtIndex(this.a+e),--this.b,A},o.setAtIndex=function(e,A){return ve(e,this.b),this.c.setAtIndex(this.a+e,A)},o.size=function(){return this.b},o.a=0,o.b=0;var Qft=H(133);M(228,445,H2,Xl),o.clear=function(){this.a.clear()},o.contains=function(e){return this.a.containsKey(e)},o.Tb=function(){var e;return e=this.a.$c().Tb(),new Zl(e)},o.remove=function(e){return this.a.containsKey(e)?(this.a.remove(e),!0):!1},o.size=function(){return this.a.size()};var Uft=H(228);M(229,1,{},Zl),o._c=function(e){Kn(this,e)},o.ad=function(){return this.a.ad()},o.bd=function(){var e;return e=this.a.bd(),e.dd()},o.cd=function(){this.a.cd()};var oft=H(229);M(135,43,hy,fD),o.clear=function(){this.a.clear()},o.contains=function(e){return this.a.containsValue(e)},o.Tb=function(){var e;return e=this.a.$c().Tb(),new DD(e)},o.size=function(){return this.a.size()};var Lft=H(135);M(136,1,{},DD),o._c=function(e){Kn(this,e)},o.ad=function(){return this.a.ad()},o.bd=function(){var e;return e=this.a.bd(),e.ed()},o.cd=function(){this.a.cd()};var sft=H(136),yft=tx();M(161,1,{161:1,84:1}),o.mb=function(e){var A;return Zt(e,84)?(A=e,K8(this.c,A.dd())&&K8(this.d,A.ed())):!1},o.dd=function(){return this.c},o.ed=function(){return this.d},o.ob=function(){return Fo(this.c)^Fo(this.d)},o.fd=function(e){return hd(this,e)},o.pb=function(){return this.c+\"=\"+this.d};var lft=H(161);M(146,161,{161:1,146:1,84:1},ho);var Tft=H(146);M(449,1,{84:1}),o.mb=function(e){var A;return Zt(e,84)?(A=e,K8(this.b.value[0],A.dd())&&K8(pL(this),A.ed())):!1},o.ob=function(){return Fo(this.b.value[0])^Fo(pL(this))},o.pb=function(){return this.b.value[0]+\"=\"+pL(this)};var hft=H(449);M(233,106,{106:1,233:1,109:1,460:1,458:1}),o.Zc=function(e){return ov(this,e)},o.containsKey=function(e){return So(this,e)},o.$c=function(){return new _l(this)},o.get=function(e){return le(this,e)},o.keySet=function(){return new w9(this)};var cft=H(233);M(234,445,H2,_l),o.contains=function(e){return Zt(e,84)&&ov(this.b,e)},o.Tb=function(){return new N8(this.b)},o.remove=function(e){var A;return Zt(e,84)?(A=e,vv(this.b,A)):!1},o.size=function(){return this.b.c};var wft=H(234);M(90,445,H2,w9),o.Ub=function(){return new l3(this)},o.clear=function(){bi(this.a)},o.contains=function(e){return So(this.a,e)},o.Tb=function(){var e;return e=new N8(new x8(this.a).b),new g9(e)},o.remove=function(e){return So(this.a,e)?(BT(this.a,e),!0):!1},o.size=function(){return this.a.c};var gft=H(90);M(91,1,{},g9),o._c=function(e){Kn(this,e)},o.ad=function(){return p9(this.a.a)},o.bd=function(){var e;return e=Br(this.a),e.dd()},o.cd=function(){dd(this.a)};var dft=H(91);M(452,43,hy),o.add=function(e){return aN(ls(this,e)),!0},o.addAll=function(e){return U1(e),Io(e!=this,\"Can't add a queue to itself\"),UF(this,e)},o.clear=function(){for(;XT(this)!=null;);};var Bft=H(452);M(398,43,{5:1,36:1,43:1,38:1},Ng),o.add=function(e){return uL(this,e),!0},o.clear=function(){this.b!=this.c&&(this.a=h(uP,A0,1,8,5,1),this.b=0,this.c=0)},o.contains=function(e){return bF(new ao(this),e)},o.isEmpty=function(){return v7(this)},o.Tb=function(){return new ao(this)},o.remove=function(e){return UN(new ao(this),e)},o.size=function(){return this.c-this.b&this.a.length-1},o.Ub=function(){return new M8(this)},o.Wb=function(e){var A;return A=this.c-this.b&this.a.length-1,e.length<A&&(e=uu(new Array(A),e)),tF(this,e,A),e.length>A&&(e[A]=null),e},o.b=0,o.c=0;var vft=H(398);M(198,1,{},ao),o._c=function(e){Kn(this,e)},o.ad=function(){return this.a!=this.b},o.bd=function(){return nm(this)},o.cd=function(){eF(this)},o.a=0,o.b=0,o.c=-1;var Fft=H(198);M(21,1,{},Wt),o._c=function(e){Kn(this,e)},o.ad=function(){return this.a<this.c.a.length},o.bd=function(){return t1(this)},o.cd=function(){ku(this.b!=-1),LA(this.c,this.a=this.b),this.b=-1},o.a=0,o.b=-1;var mft=H(21);M(269,w.Function,{},vi),o.gd=function(e,A){return $8(e,A)},M(466,w.Function,{},Nl),o.hd=function(e,A){return G(e,A)<0?-1:G(e,A)>0?1:0},M(179,94,{4:1,36:1,43:1,94:1,38:1,83:1,126:1},Po),o.contains=function(e){return wF(this,e)!=-1},o.getAtIndex=function(e){return ve(e,this.a.length),this.a[e]},o.setAtIndex=function(e,A){var n;return n=(ve(e,this.a.length),this.a[e]),this.a[e]=A,n},o.size=function(){return this.a.length},o.toArray=function(){return Ym(this,h(uP,A0,1,this.a.length,5,1))},o.Wb=function(e){return Ym(this,e)};var kft=H(179);M(47,w.Function,{},u0),o.gd=function(e,A){return e-A},M(181,1,{181:1},Zg),o.mb=function(e){var A,n,P;if(this===e)return!0;if(!Zt(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},o.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*tl&-1^P&255,e=e*tl&-1^P>>>8&255,e=e*tl&-1^P>>>16&255,e=e*tl&-1^P>>>24;return e},o.pb=function(){var e,A;if(OO(this)==0)return\"{}\";for(A=new Fn(\"{\"),e=gk(this,0),A.a+=e;(e=gk(this,e+1))!=-1;)A.a+=\", \",A.a+=e;return A.a+=\"}\",A.a};var bft=H(181);M(186,1,{36:1,38:1},_U),o.Ub=function(){return new M8(this)},o.Vb=function(){return new o3(this.Ub())},o.add=function(e){throw At(new dA)},o.addAll=function(e){throw At(new dA)},o.clear=function(){throw At(new dA)},o.contains=function(e){return this.b.contains(e)},o.containsAll=function(e){return this.b.containsAll(e)},o.isEmpty=function(){return this.b.isEmpty()},o.Tb=function(){return new Gw(this.b.Tb())},o.remove=function(e){throw At(new dA)},o.removeAll=function(e){throw At(new dA)},o.retainAll=function(e){throw At(new dA)},o.size=function(){return this.b.size()},o.toArray=function(){return this.b.toArray()},o.pb=function(){return $D(this.b)};var Rft=H(186);M(342,1,{},Gw),o._c=function(e){Kn(this,e)},o.ad=function(){return this.a.ad()},o.bd=function(){return this.a.bd()},o.cd=function(){Kq()};var jft=H(342);M(187,186,{36:1,38:1,83:1},Co),o.Ub=function(){return new M8(this)},o.addAtIndex=function(e,A){throw At(new dA)},o.addAllAtIndex=function(e,A){throw At(new dA)},o.mb=function(e){return VP(this.a,e)},o.getAtIndex=function(e){return this.a.getAtIndex(e)},o.ob=function(){return a8(this.a)},o.indexOf=function(e){return this.a.indexOf(e)},o.isEmpty=function(){return this.a.isEmpty()},o.lastIndexOf=function(e){return this.a.lastIndexOf(e)},o.removeAtIndex=function(e){throw At(new dA)},o.setAtIndex=function(e,A){throw At(new dA)},o.subList=function(e,A){return new Co(this.a.subList(e,A))};var pft=H(187);M(339,1,{109:1},zw),o.getOrDefault=function(e,A){var n;return n=this.c.get(e),n==null&&!this.c.containsKey(e)?A:n},o.putIfAbsent=function(e,A){var n;return n=this.c.get(e),n??B3()},o.replace=function(e,A){return this.c.containsKey(e)?B3():null},o.clear=function(){throw At(new dA)},o.containsKey=function(e){return this.c.containsKey(e)},o.containsValue=function(e){return this.c.containsValue(e)},o.$c=function(){return!this.a&&(this.a=new b7(this.c.$c())),this.a},o.mb=function(e){return VP(this.c,e)},o.get=function(e){return this.c.get(e)},o.ob=function(){return a8(this.c)},o.isEmpty=function(){return this.c.isEmpty()},o.keySet=function(){return!this.b&&(this.b=new io(this.c.keySet())),this.b},o.put=function(e,A){return B3()},o.putAll=function(e){throw At(new dA)},o.remove=function(e){throw At(new dA)},o.size=function(){return this.c.size()},o.pb=function(){return $D(this.c)},o.values=function(){return!this.d&&(this.d=new _U(this.c.values())),this.d};var Cft=H(339);M(188,186,BV,io),o.Ub=function(){return new M8(this)},o.mb=function(e){return VP(this.b,e)},o.ob=function(){return a8(this.b)};var Mft=H(188);M(340,188,BV,b7),o.contains=function(e){return this.b.contains(e)},o.containsAll=function(e){return this.b.containsAll(e)},o.Tb=function(){var e;return e=this.b.Tb(),new Jw(e)},o.toArray=function(){var e;return e=this.b.toArray(),AN(e,e.length),e};var Hft=H(340);M(343,1,{},Jw),o._c=function(e){Kn(this,e)},o.bd=function(){return new $l(this.a.bd())},o.ad=function(){return this.a.ad()},o.cd=function(){throw At(new dA)};var Vft=H(343);M(230,1,{84:1},$l),o.mb=function(e){return this.a.mb(e)},o.dd=function(){return this.a.dd()},o.ed=function(){return this.a.ed()},o.ob=function(){return this.a.ob()},o.fd=function(e){throw At(new dA)},o.pb=function(){return $D(this.a)};var Eft=H(230);M(341,187,{36:1,38:1,83:1,126:1},k7);var Sft=H(341);M(263,1,Rf,ew),o.Rb=function(e,A){return $8(e.b,A.b)},o.mb=function(e){return this===e};var qft=H(263),vl;M(373,1,Rf,Aw),o.Rb=function(e,A){return U1(e),Qm(e,(U1(A),A))},o.mb=function(e){return this===e};var Ift=H(373);M(258,33,yn,r3);var xft=H(258);M(65,334,{4:1,5:1,106:1,109:1},LP);var Nft=H(65);M(122,445,{4:1,5:1,36:1,43:1,38:1,122:1,85:1},QD),o.add=function(e){return aP(this,e)},o.clear=function(){Cu(this.a)},o.contains=function(e){return Mu(this.a,e)},o.isEmpty=function(){return dD(this.a)==0},o.Tb=function(){var e;return e=new Xl(this.a).a.$c().Tb(),new Zl(e)},o.remove=function(e){return BL(this.a,e)!=null},o.size=function(){return dD(this.a)};var Oft=H(122);M(376,1,{36:1},Ud),o.Tb=function(){return new OT(this)},o.c=0;var Gft=H(376);M(245,1,{},OT),o._c=function(e){Kn(this,e)},o.bd=function(){return this.d=this.a[this.c++],this.d},o.ad=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))},o.cd=function(){i5(this.e,this.d.dd()),this.c!=0&&--this.c},o.c=0,o.d=null;var Jft=H(245);M(374,1,{36:1},od),o.Tb=function(){return new ST(this)},o.c=0,o.d=0;var zft=H(374);M(244,1,{},ST),o._c=function(e){Kn(this,e)},o.bd=function(){return this.c=this.a,this.a=this.b.next(),new gd(this.d,this.c,this.d.d)},o.ad=function(){return!this.a.done},o.cd=function(){pF(this.d,this.c.value[0])};var Yft=H(244);M(375,449,{84:1},gd),o.dd=function(){return this.b.value[0]},o.ed=function(){return pL(this)},o.fd=function(e){return sm(this.a,this.b.value[0],e)},o.c=0;var Kft=H(375);M(310,1,{},iw),o.jd=function(e){return fd(this,e)},o.kd=function(e){return e.dd()};var Xft=H(310);M(311,1,{},fw),o.jd=function(e){return Dd(this,e)},o.kd=function(e){return e.ed()};var Zft=H(311);M(405,33,yn,r7);var Wft=H(405);M(147,452,hy,W7,R7),o.addAll=function(e){var A,n,P;for(U1(e),Wg(e!=this),P=this.b.a.length,n=e.Tb();n.ad();)A=n.bd(),mt(this.b,U1(A));return P!=this.b.a.length?(PQ(this,0),!0):!1},o.clear=function(){mi(this.b.a,0)},o.contains=function(e){return(e==null?-1:x9(this.b,e,0))!=-1},o.Tb=function(){return new Yw(this)},o.remove=function(e){var A;return A=e==null?-1:x9(this.b,e,0),A<0?!1:($T(this,A),!0)},o.removeAll=function(e){return ts(this.b,e)?(PQ(this,0),!0):!1},o.retainAll=function(e){return Am(this.b,e)?(PQ(this,0),!0):!1},o.size=function(){return this.b.a.length},o.Ub=function(){return new M8(this)},o.toArray=function(){return tT(this.b.a)},o.Wb=function(e){return ff(this.b,e)};var _ft=H(147);M(395,1,{},Yw),o._c=function(e){Kn(this,e)},o.ad=function(){return this.a<this.c.b.a.length},o.bd=function(){return kD(this.a<this.c.b.a.length),this.b=this.a++,N(this.c.b,this.b)},o.cd=function(){ku(this.b!=-1),$T(this.c,this.a=this.b),this.b=-1},o.a=0,o.b=-1;var $ft=H(395);M(59,1,{},aD,zr),o.a=0,o.b=0;var Uc,oc,TPt=0,aft=H(59);M(60,1,{},M8);var tDt=H(60);M(189,60,{},l3);var eDt=H(189);M(152,1,{},Sg,dL),o.pb=function(){return this.a?this.e.length==0?this.a.a:this.a.a+(\"\"+this.e):this.c};var ADt=H(152);M(44,233,{4:1,5:1,106:1,233:1,109:1,460:1,458:1,44:1},lP,Ji),o.clear=function(){bi(this)},o.$c=function(){return new x8(this)},o.put=function(e,A){return ze(this,e,A)},o.remove=function(e){return BT(this,e)},o.size=function(){return this.c},o.c=0;var HE=H(44);M(71,1,{},N8),o._c=function(e){Kn(this,e)},o.bd=function(){return Br(this)},o.ad=function(){return p9(this.a)},o.cd=function(){dd(this)};var nDt=H(71);M(77,234,H2,x8),o.clear=function(){bi(this.a)};var PDt=H(77);M(123,146,{161:1,146:1,84:1,123:1},RL),o.b=!1;var hPt=H(123);M(191,1,{},XU),o.pb=function(){return\"State: mv=\"+this.c+\" value=\"+this.d+\" done=\"+this.a+\" found=\"+this.b},o.a=!1,o.b=!1,o.c=!1;var rDt=H(191);M(80,55,Al,lu),o.ld=function(){return!1},o.md=function(){return!1};var Lc,VE,EE,SE,cPt=E9(80,SN);M(354,80,Al,Cg),o.md=function(){return!0};var iDt=E9(354,null);M(355,80,Al,qg),o.ld=function(){return!0},o.md=function(){return!0};var fDt=E9(355,null);M(356,80,Al,Mg),o.ld=function(){return!0};var DDt=E9(356,null);M(134,445,{4:1,5:1,36:1,43:1,38:1,85:1},D3,uo),o.Ub=function(){return new l3(this)},o.add=function(e){return zi(this,e)},o.clear=function(){bi(this.a)},o.contains=function(e){return lo(this,e)},o.Tb=function(){var e;return e=new N8(new x8(new w9(this.a).a).b),new g9(e)},o.remove=function(e){return BT(this.a,e)!=null},o.size=function(){return this.a.c};var uDt=H(134);M(367,94,{4:1,5:1,36:1,43:1,94:1,38:1,83:1,126:1},A7),o.addAtIndex=function(e,A){pu(e,this.a.a.length+1),t8(this.a,e,A)},o.add=function(e){return a7(this,e)},o.addAllAtIndex=function(e,A){return pu(e,this.a.a.length+1),im(this.a,e,A)},o.addAll=function(e){return jP(this.a,e)},o.clear=function(){mi(this.a.a,0)},o.contains=function(e){return x9(this.a,e,0)!=-1},o.containsAll=function(e){return AQ(this.a,e)},o.getAtIndex=function(e){return pu(e,this.a.a.length),N(this.a,e)},o.indexOf=function(e){return x9(this.a,e,0)},o.isEmpty=function(){return this.a.a.length==0},o.Tb=function(){return new Wt(this.a)},o.lastIndexOf=function(e){return id(this.a,e)},o.removeAtIndex=function(e){return pu(e,this.a.a.length),LA(this.a,e)},o.removeAll=function(e){return ts(this.a,e)},o.Xb=function(e,A){JB(this.a,e,A)},o.setAtIndex=function(e,A){return pu(e,this.a.a.length),q9(this.a,e,A)},o.size=function(){return this.a.a.length},o.subList=function(e,A){return new xD(this.a,e,A)},o.toArray=function(){return tT(this.a.a)},o.Wb=function(e){return tg(this,e)},o.pb=function(){return zk(this.a)};var QDt=H(367);M(350,106,T4),o.containsKey=function(e){return kT(this,e)},o.containsValue=function(e){if(e==null)throw At(new d9);return jd(this.e,e)},o.$c=function(){return new iD(this.e)},o.get=function(e){return YB(this,e)},o.put=function(e,A){return Hv(this,e,A)},o.putIfAbsent=function(e,A){return kT(this,e)?this.get(e):this.put(e,A)},o.remove=function(e){if(e==null)throw At(new d9);return BL(this.e,e)},o.replace=function(e,A){if(A==null)throw At(new d9);return kT(this,e)?this.put(e,A):null};var UDt=H(350);M(264,1,{},Dw),o.jd=function(e){return U1(e),new TP(this,e)},o.kd=function(e){return e};var oDt=H(264);M(61,1,{},TP),o.jd=function(e){return U1(e),new TP(this,e)},o.kd=function(e){return O3(this.a,this.b,e)};var LDt=H(61);M(95,55,{4:1,32:1,55:1,95:1},To);var qE,qU,sc,Fl=E9(95,dN);M(166,1,{},Su);var sDt=H(166);M(314,1,{},uw),o.nd=function(e,A){e.add(A)};var yDt=H(314);M(316,1,{},Qw),o.pc=function(){return new f1};var lDt=H(316);M(317,1,{},Uw),o.jd=function(e){return U1(e),new TP(this,e)},o.kd=function(e){return Wo(e)};var TDt=H(317);M(318,1,{},ow),o.jd=function(e){return U1(e),new TP(this,e)},o.kd=function(e){return Zt(e,126)?new k7(e):new Co(e)};var hDt=H(318);M(319,1,{},Lw),o.pc=function(){return new LP};var cDt=H(319);M(320,1,{},sw),o.jd=function(e){return U1(e),new TP(this,e)},o.kd=function(e){return new zw(e)};var wDt=H(320);M(224,1,{},Ol),o.jd=function(e){return U1(e),new TP(this,e)},o.kd=function(e){return Wo(e)};var gDt=H(224);M(323,1,{},yw),o.pc=function(){return new QD};var dDt=H(323);M(324,1,{},lw),o.nd=function(e,A){aP(e,A)};var BDt=H(324);M(327,1,{},Tw),o.jd=function(e){return U1(e),new TP(this,e)},o.kd=function(e){return Wo(e)};var vDt=H(327);M(328,1,{},hw),o.jd=function(e){return U1(e),new TP(this,e)},o.kd=function(e){return new io(e)};var FDt=H(328);M(313,1,{},fg),o.nd=function(e,A){vI(this.a,this.b,e,A)};var mDt=H(313);M(315,1,{},cw);var kDt=H(315);M(321,1,{},Rd),o.nd=function(e,A){pY(this.a,this.c,this.b,e,A)},o.b=!1;var bDt=H(321);M(322,1,{},ww);var RDt=H(322);M(325,1,{},gw);var jDt=H(325);M(326,1,{},dw),o.jd=function(e){return U1(e),new TP(this,e)},o.kd=function(e){return e};var pDt=H(326);M(345,1,{}),o.b=!1;var CDt=H(345);M(190,345,{},o3);var MDt=H(190);M(346,1,{},Bw);var HDt=H(346);M(347,1,{},Kw);var VDt=H(347);M(348,1,{},Dg);var EDt=H(348);M(222,114,ay);var SDt=H(222);M(223,222,ay,T3);var qDt=H(223);M(312,222,ay,mg);var IDt=H(312);M(337,446,{},Og),o.a=0,o.b=0;var IE=null,xDt=H(337);M(211,63,{63:1,32:1,211:1},Tj),o.b=0;var NDt=H(211);M(249,1,{249:1},nd);var ODt=H(249);M(209,1,{},pg),o.a=0,o.d=0,o.i=!1,o.j=!1,o.o=0,o.p=0,o.v=0,o.w=0,o.C=!1;var GDt=H(209);M(271,1,{},mw),o.Rb=function(e,A){return q3(A.o.length,e.o.length)},o.mb=function(e){return this===e};var JDt=H(271);M(272,1,{},D7);var zDt=H(272);M(177,1,{177:1},Nv);var wPt=H(177);M(351,350,{4:1,106:1,109:1},Pd),o.get=function(e){return ZB(this,e)},o.put=function(e,A){return $B(this,e,A)},o.clear=function(){Cu(new iD(this.e).a)},o.a=0,o.b=0,o.c=0,o.d=0;var IU,YDt=H(351);M(232,1,{32:1,232:1},Qg),o.Sb=function(e){return $x(this,e)},o.b=0;var KDt=H(232);M(270,1,{},Hd),o.b=!1,o.c=0,o.d=0;var XDt=H(270);M(176,1,{176:1},gj),o.a=0,o.b=!1,o.i=0,o.j=0,o.n=0;var xE,NE,OE,gPt=H(176);M(165,1,{32:1,165:1},uB),o.Sb=function(e){return YF(this,e)},o.mb=function(e){return YF(this,e)==0},o.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&&un(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&&un(D,D.a.length-1),D.a},o.b=0,o.e=0,o.g=!1;var GE=H(165);M(252,1,{252:1},fm),o.a=0;var ZDt=H(252);M(381,1,{},tj),o.c=0;var yc,WDt=H(381);M(235,1,{}),o.g=0,o.n=0,o.s=0,o.t=0,o.u=0,o.C=0,o.G=!1;var _Dt=H(235);M(352,1,{},Fw);var $Dt=H(352);M(117,235,{117:1},VL),o.od=function(e){return xQ(this)},o.b=!1;var aDt=H(117);M(210,117,{117:1},fT),o.od=function(e){var A,n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v;if(!e)return this.a?OD(this,h(F,k,6,this.w.length,15,1),h(F,k,6,this.v.length,15,1)):xQ(this);if(e.b==0)return xQ(this);for(P=pK(this,e),n=e.i,A=e.d,L=h(rt,ft,6,P.length,16,1),i=0;i<64;i++){for((L[0]||this.w[0].d.length==1)&&(P[0]=0),U=1,D=1;D<this.w.length;D++)L[U]||this.w[D].d.length==1?P[U]=P[U-1]:P[U]+=P[U-1],++U;for(T=this.v,c=0,g=T.length;c<g;++c)l=T[c],L[U]||l.b.length==1?P[U]=P[U-1]:P[U]+=P[U-1],++U;if(P[P.length-1]==0)return xQ(this);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.w.length){for(s=1;s<this.w[f].d.length;s++)if(++m[f],m[f]==this.w[f].d.length&&(m[f]=0),v=OD(this,m,r),Q=a9(this.F,v),(Q<0?-1:Q)==-1)return v}else for(f-=this.w.length,s=1;s<this.v[f].b.length;s++)if(++r[f],r[f]==this.v[f].b.length&&(r[f]=0),v=OD(this,m,r),Q=a9(this.F,v),(Q<0?-1:Q)==-1)return v;L[f]=!0;break}}return xQ(this)},o.a=!1;var t2t=H(210);M(273,235,{},Bb),o.od=function(e){return this.a==null||(this.b+1==this.a.length&&V$(this),this.a==null)?null:(++this.b,this.a[this.b])},o.b=0;var e2t=H(273);M(357,1,{},vw),o.Rb=function(e,A){return $8(A.e,e.e)},o.mb=function(e){return this===e};var A2t=H(357);M(253,1,{32:1,253:1},ug),o.Sb=function(e){return this.a<e.a?-1:this.a>e.a?1:0},o.a=0;var n2t=H(253);M(50,1,V2),o.g=!1;var ml,P2t=H(50);M(243,50,V2,xT),o.pd=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},o.qd=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=z8(J0(e,this.f[2]),J0(e,this.f[1])),ti(Q),f=w.Math.abs(D)<bA?-2*D:2*(Q1-D),this.a&&(f=-f),P=this.c,r=0,i=P.length;r<i;++r)n=P[r],wf(e,n,J0(e,this.f[1]),Q,f);return!0},o.rd=function(){return 5},o.pb=function(){var e;return e=new Fn(\"binap rule (\"+(this.b?\"positive\":\"negative\")+\" torsion):\"),t2(this,e),e.a},o.a=!1,o.b=!1;var r2t=H(243);M(154,1,{},NQ),o.b=0,o.e=!1,o.n=0;var JE,i2t=H(154);M(353,1,{},kw),o.Rb=function(e,A){return CT(),$8(e.e,A.e)},o.mb=function(e){return this===e};var f2t=H(353);M(81,50,{50:1,81:1},_7,TF,$L,th),o.pd=function(e,A){var n;return n=LW(this,e),A!=null&&n>0&&(A[this.f[0]]+=n/2,A[this.f[1]]+=n/2),n},o.qd=function(e,A){var n,P,r,i,f,D,Q;if(r=v9(e,this.f[1])-v9(e,this.f[0]),i=F9(e,this.f[1])-F9(e,this.f[0]),f=m9(e,this.f[1])-m9(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(Mt(Q,this.f[0])==1&&Mt(Q,this.f[1])!=1)return I8(J0(e,this.f[0]),r*D,i*D,f*D),!0;if(Mt(Q,this.f[0])!=1&&Mt(Q,this.f[1])==1)return I8(J0(e,this.f[1]),-r*D,-i*D,-f*D),!0}return D/=2,s5(e,this.f[0],this.b,r*D,i*D,f*D),s5(e,this.f[1],this.b,-r*D,-i*D,-f*D),!0},o.rd=function(){return 0},o.pb=function(){var e,A;if(A=new Fn(\"distance rule:\"),t2(this,A),this.a.length==1?J(A,(J9(),FV+tr(this.a[0],5))):J(A,(J9(),\" min:\"+tr(this.a[0],5)+\" max:\"+tr(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},o.c=0;var zE=H(81);M(242,50,V2,zh),o.pd=function(e,A){var n,P,r,i,f,D,Q;for(n=new Nn,f=new Nn,P=R1(yt,[h0,wt],[15,6],15,[this.f.length,3],2),V5(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},o.qd=function(e,A){var n,P,r,i,f;for(n=new Nn,f=new Nn,P=R1(yt,[h0,wt],[15,6],15,[this.a.length,3],2),V5(e,this.a,n,f,P),i=0;i<this.f.length;i++)r=-(f.a*(v9(e,this.f[i])-n.a)+f.b*(F9(e,this.f[i])-n.b)+f.c*(m9(e,this.f[i])-n.c)),s5(e,this.f[i],this.f,.5*r*A*f.a,.5*r*A*f.b,.5*r*A*f.c);return!0},o.rd=function(){return 1},o.pb=function(){var e;return e=new Fn(\"plane rule:\"),t2(this,e),e.a};var D2t=H(242);M(96,63,{63:1,32:1,96:1},mu,rd),o.b=!1,o.c=0,o.e=0;var YE=H(96);M(371,50,V2,C7),o.pd=function(e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S,p;for(i=h(yt,wt,6,3,15,1),L=0;L<this.f.length;L++)i[0]+=v9(e,this.f[L]),i[1]+=F9(e,this.f[L]),i[2]+=m9(e,this.f[L]);for(g=0;g<3;g++)i[g]/=this.f.length;for(n=R1(yt,[h0,wt],[15,6],15,[this.f.length,3],2),s=0;s<this.f.length;s++)n[s][0]=v9(e,this.f[s])-i[0],n[s][1]=F9(e,this.f[s])-i[1],n[s][2]=m9(e,this.f[s])-i[2];for(j=R1(yt,[h0,wt],[15,6],15,[3,3],2),y=0;y<this.f.length;y++)for(c=0;c<3;c++)for(m=0;m<3;m++)j[c][m]+=n[y][c]*n[y][m];for(S=new ry(j),P=S.e,R=0,l=1;l<3;l++)P[l]>P[R]&&(R=l);for(r=S.a,b=h(yt,wt,6,3,15,1),T=0;T<3;T++)b[T]=r[T][R];for(p=0,U=0;U<this.f.length;U++)v=b[0]*n[U][0]+b[1]*n[U][1]+b[2]*n[U][2],f=v*b[0]-n[U][0],D=v*b[1]-n[U][1],Q=v*b[2]-n[U][2],C=10*f*f+D*D+Q*Q,A!=null&&(A[this.f[U]]+=C),p+=C;return p},o.qd=function(e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b,j,C,S;for(i=h(yt,wt,6,3,15,1),D=0;D<this.f.length;D++)i[0]+=v9(e,this.f[D]),i[1]+=F9(e,this.f[D]),i[2]+=m9(e,this.f[D]);for(m=0;m<3;m++)i[m]/=this.f.length;for(n=R1(yt,[h0,wt],[15,6],15,[this.f.length,3],2),Q=0;Q<this.f.length;Q++)n[Q][0]=v9(e,this.f[Q])-i[0],n[Q][1]=F9(e,this.f[Q])-i[1],n[Q][2]=m9(e,this.f[Q])-i[2];for(C=R1(yt,[h0,wt],[15,6],15,[3,3],2),U=0;U<this.f.length;U++)for(g=0;g<3;g++)for(v=0;v<3;v++)C[g][v]+=n[U][g]*n[U][v];for(S=new ry(C),P=S.e,b=0,L=1;L<3;L++)P[L]>P[b]&&(b=L);for(r=S.a,j=h(yt,wt,6,3,15,1),s=0;s<3;s++)j[s]=r[s][b];for(R=h(yt,wt,6,this.f.length,15,1),y=0;y<this.f.length;y++)R[y]=j[0]*n[y][0]+j[1]*n[y][1]+j[2]*n[y][2];if(A==1){for(T=!1,c=R[0]<R[1],l=2;l<this.f.length;l++)if(c!=R[l-1]<R[l]){T=!0;break}if(T)return!1}for(f=0;f<this.f.length;f++)I8(J0(e,this.f[f]),A*(R[f]*j[0]-n[f][0]),A*(R[f]*j[1]-n[f][1]),A*(R[f]*j[2]-n[f][2]));return!0},o.rd=function(){return 2},o.pb=function(){var e;return e=new Fn(\"line rule:\"),t2(this,e),e.a};var u2t=H(371);M(372,50,V2,Wd),o.pd=function(e,A){var n,P,r,i,f;if(i=0,P=uR(this,e),f=0,this.f[3]==-1?A2(e,P,this.f[4],this.f[2])||++f:(A2(e,P,this.f[4],this.f[2])||++f,A2(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},o.qd=function(e,A){var n,P,r,i,f,D,Q;if(D=uR(this,e),f=this.f[3]==-1&&!A2(e,D,this.f[4],this.f[2])||this.f[3]!=-1&&!A2(e,D,this.f[4],this.f[2])&&A2(e,D,this.f[4],this.f[3]),!f)return!1;for(Q=Wz(this,e),P=this.a,r=0,i=P.length;r<i;++r)n=P[r],wf(e,n,J0(e,this.f[4]),Q,Q1);return!0},o.rd=function(){return 4},o.pb=function(){var e,A,n,P,r;for(r=new Fn(\"stereo rule:\"),t2(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 Q2t=H(372);M(195,50,V2,xL),o.pd=function(e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T;if(n=lL(e,this.f),isNaN(n))return 0;if(n<0&&(n+=F0),l=180*n/Q1,f=Sk(this,n),f==-1)for(x1(),L=this.e,s=0,y=L.length;s<y;++s);if(Q=Wk(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,U=3*Q*P*P/3600,T=0,i=0;i<Mt(D,this.f[1]);i++)_(D,this.f[1],i)!=this.f[2]&&(A!=null&&(A[_(D,this.f[1],i)]+=U),T+=U);for(r=0;r<Mt(D,this.f[2]);r++)_(D,this.f[2],r)!=this.f[1]&&(A!=null&&(A[_(D,this.f[2],r)]+=U),T+=U);return T},o.qd=function(e,A){var n,P,r,i,f,D,Q,U,L,s,y,l,T,c,g,m,v,R,b;if(Q=lL(e,this.f),isNaN(Q)||(Q<0&&(Q+=F0),y=Sk(this,Q),R=Wk(this,Q,y),R==0)||(f=Q1*this.e[y]/180-Q,w.Math.abs(f)>Q1&&(f=f<0?F0+f:f-F0),w.Math.abs(f)<.0031415926535897933))return!1;if(b=z8(J0(e,this.f[2]),J0(e,this.f[1])),ti(b),f*=A*R,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],wf(e,n,J0(e,this.f[1]),b,m);else for(D=D1(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(U=(s==1?-2:2)*HT(g,this.f[s]),T=0;T<Mt(g,this.f[s]);T++)if(L=_(g,this.f[s],T),L!=this.f[3-s]&&(gm(e,L,this.f[s],b,f/U),!l))for(c=0;c<g.j[L];c++)v=g.i[L][c],v!=L&&g.e[v]!=1&&gm(e,v,this.f[s],b,f/(4*U));return!0},o.rd=function(){return 3},o.pb=function(){var e,A;for(A=new Fn(\"torsion rule:\"),t2(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},o.d=0;var U2t=H(195),Yt=Mr(\"S\"),q=Mr(\"B\"),F=Mr(\"I\"),rt=Mr(\"Z\"),yt=Mr(\"D\"),Ee=Mr(\"F\"),NA=Mr(\"J\"),l9=Mr(\"C\");o=s0(\"OCL.Canonizer\",Jg),o=s0(\"OCL.CanonizerUtil\",YU),o.BACKBONE=htt,o.NORMAL=ctt,o.NOSTEREO=wtt,o.NOSTEREO_TAUTOMER=gtt,o.TAUTOMER=dtt,o.getIDCode=Ez,o=s0(\"OCL.ConformerGenerator\",Yg),o.STRATEGY_ADAPTIVE_RANDOM=Btt,o.STRATEGY_LIKELY_RANDOM=vtt,o.STRATEGY_LIKELY_SYSTEMATIC=Ftt,o.STRATEGY_PURE_RANDOM=mtt,o=s0(\"OCL.DrugScoreCalculator\",X2),o.calculate=SI,o=s0(\"OCL.DruglikenessPredictor\",Lg),o.DRUGLIKENESS_UNKNOWN=ktt,o=s0(\"OCL.ForceFieldMMFF94\",bB),o.MMFF94=btt,o.MMFF94S=Rtt,o.MMFF94SPLUS=jtt,QT(),o=s0(\"OCL.GenericEditorArea\",db),o.EDITOR_EVENT_HIGHLIGHT_ATOM_CHANGED=Fnt,o.EDITOR_EVENT_HIGHLIGHT_BOND_CHANGED=mnt,o.EDITOR_EVENT_MOLECULE_CHANGED=knt,o.EDITOR_EVENT_SELECTION_CHANGED=bnt,o.HOTSPOT_16=sE,o.HOTSPOT_32=yE,o.IMAGE_DATA_16=lE,o.IMAGE_NAME_32=TE,o.KEY_ALT=Rnt,o.KEY_BACK_SPACE=jnt,o.KEY_CTRL=pnt,o.KEY_DELETE=Cnt,o.KEY_ENTER=Mnt,o.KEY_ESCAPE=Hnt,o.KEY_EVENT_PRESSED=Vnt,o.KEY_EVENT_RELEASED=Ent,o.KEY_HELP=Snt,o.KEY_SHIFT=qnt,o.MODE_DRAWING_OBJECTS=Int,o.MODE_MARKUSH_STRUCTURE=xnt,o.MODE_MULTIPLE_FRAGMENTS=Nnt,o.MODE_REACTION=Ont,o.MOUSE_EVENT_CLICKED=Gnt,o.MOUSE_EVENT_DRAGGED=Jnt,o.MOUSE_EVENT_ENTERED=znt,o.MOUSE_EVENT_EXITED=Ynt,o.MOUSE_EVENT_MOVED=Knt,o.MOUSE_EVENT_PRESSED=Xnt,o.MOUSE_EVENT_RELEASED=Znt,o.TableLayoutFill=Wnt,o.TableLayoutPreferred=_nt,o.cChainCursor=$nt,o.cDeleteCursor=ant,o.cFistCursor=tPt,o.cHandCursor=ePt,o.cHandPlusCursor=APt,o.cInvisibleCursor=nPt,o.cLassoCursor=PPt,o.cLassoPlusCursor=rPt,o.cPointedHandCursor=iPt,o.cPointerCursor=fPt,o.cSelectRectCursor=DPt,o.cSelectRectPlusCursor=uPt,o.cTextCursor=QPt,o.cZoomCursor=UPt,o=s0(\"OCL.GenericEditorToolbar\",Rm),o=s0(\"OCL.GenericUIHelper\",gB),_A(),o=s0(\"OCL.Molecule\",AL),o.CANONIZER_ASSIGN_PARITIES_TO_TETRAHEDRAL_N=ptt,o.CANONIZER_CONSIDER_DIASTEREOTOPICITY=Ctt,o.CANONIZER_CONSIDER_ENANTIOTOPICITY=Mtt,o.CANONIZER_CONSIDER_STEREOHETEROTOPICITY=Htt,o.CANONIZER_COORDS_ARE_3D=Vtt,o.CANONIZER_CREATE_PSEUDO_STEREO_GROUPS=Ett,o.CANONIZER_CREATE_SYMMETRY_RANK=Stt,o.CANONIZER_DISTINGUISH_RACEMIC_OR_GROUPS=qtt,o.CANONIZER_ENCODE_ATOM_CUSTOM_LABELS=Itt,o.CANONIZER_ENCODE_ATOM_CUSTOM_LABELS_WITHOUT_RANKING=xtt,o.CANONIZER_ENCODE_ATOM_SELECTION=Ntt,o.CANONIZER_NEGLECT_ANY_STEREO_INFORMATION=Ott,o.CANONIZER_TIE_BREAK_FREE_VALENCE_ATOMS=Gtt,o.FISCHER_PROJECTION_LIMIT=Jtt,o.FISCHER_PROJECTION_RING_LIMIT=ztt,o.STEREO_ANGLE_LIMIT=Ytt,o.VALIDATION_ERRORS_STEREO=fE,o.VALIDATION_ERROR_AMBIGUOUS_CONFIGURATION=Ktt,o.VALIDATION_ERROR_ESR_CENTER_UNKNOWN=Xtt,o.VALIDATION_ERROR_OVER_UNDER_SPECIFIED=Ztt,o.cAtomCIPParityNone=Wtt,o.cAtomCIPParityProblem=_tt,o.cAtomCIPParityRorM=$tt,o.cAtomCIPParitySorP=att,o.cAtomColorBlue=t1t,o.cAtomColorDarkGreen=e1t,o.cAtomColorDarkRed=A1t,o.cAtomColorGreen=n1t,o.cAtomColorMagenta=P1t,o.cAtomColorNone=r1t,o.cAtomColorOrange=i1t,o.cAtomColorRed=f1t,o.cAtomLabel=DE,o.cAtomParity1=D1t,o.cAtomParity2=u1t,o.cAtomParityIsPseudo=Q1t,o.cAtomParityNone=U1t,o.cAtomParityUnknown=o1t,o.cAtomQFAny=L1t,o.cAtomQFAromState=s1t,o.cAtomQFAromStateBits=y1t,o.cAtomQFAromStateShift=l1t,o.cAtomQFAromatic=T1t,o.cAtomQFCharge=h1t,o.cAtomQFChargeBits=c1t,o.cAtomQFChargeShift=w1t,o.cAtomQFDepictedFeatures=g1t,o.cAtomQFENeighbourBits=d1t,o.cAtomQFENeighbourShift=B1t,o.cAtomQFENeighbours=v1t,o.cAtomQFExcludeGroup=F1t,o.cAtomQFFlatNitrogen=m1t,o.cAtomQFHeteroAromatic=k1t,o.cAtomQFHydrogen=b1t,o.cAtomQFHydrogenBits=R1t,o.cAtomQFHydrogenShift=j1t,o.cAtomQFIsNotStereo=p1t,o.cAtomQFIsStereo=C1t,o.cAtomQFMatchStereo=M1t,o.cAtomQFMoreNeighbours=H1t,o.cAtomQFNarrowing=V1t,o.cAtomQFNeighbourBits=E1t,o.cAtomQFNeighbourShift=S1t,o.cAtomQFNeighbours=q1t,o.cAtomQFNewRingSize=I1t,o.cAtomQFNewRingSizeBits=x1t,o.cAtomQFNewRingSizeShift=N1t,o.cAtomQFNoMoreNeighbours=O1t,o.cAtomQFNoOfBits=G1t,o.cAtomQFNot0ENeighbours=J1t,o.cAtomQFNot0Hydrogen=z1t,o.cAtomQFNot0Neighbours=Y1t,o.cAtomQFNot0PiElectrons=K1t,o.cAtomQFNot1ENeighbour=X1t,o.cAtomQFNot1Hydrogen=Z1t,o.cAtomQFNot1Neighbour=W1t,o.cAtomQFNot1PiElectron=_1t,o.cAtomQFNot2ENeighbours=$1t,o.cAtomQFNot2Hydrogen=a1t,o.cAtomQFNot2Neighbours=t0t,o.cAtomQFNot2PiElectrons=e0t,o.cAtomQFNot2RingBonds=A0t,o.cAtomQFNot3ENeighbours=n0t,o.cAtomQFNot3Hydrogen=P0t,o.cAtomQFNot3Neighbours=r0t,o.cAtomQFNot3RingBonds=i0t,o.cAtomQFNot4ENeighbours=f0t,o.cAtomQFNot4Neighbours=D0t,o.cAtomQFNot4RingBonds=u0t,o.cAtomQFNotAromatic=Q0t,o.cAtomQFNotChain=U0t,o.cAtomQFNotCharge0=o0t,o.cAtomQFNotChargeNeg=L0t,o.cAtomQFNotChargePos=s0t,o.cAtomQFPiElectronBits=y0t,o.cAtomQFPiElectronShift=l0t,o.cAtomQFPiElectrons=T0t,o.cAtomQFRingSize0=h0t,o.cAtomQFRingSize3=c0t,o.cAtomQFRingSize4=w0t,o.cAtomQFRingSize5=g0t,o.cAtomQFRingSize6=d0t,o.cAtomQFRingSize7=B0t,o.cAtomQFRingSizeLarge=v0t,o.cAtomQFRingState=F0t,o.cAtomQFRingStateBits=m0t,o.cAtomQFRingStateShift=k0t,o.cAtomQFRxnParityBits=b0t,o.cAtomQFRxnParityHint=R0t,o.cAtomQFRxnParityInvert=j0t,o.cAtomQFRxnParityRacemize=p0t,o.cAtomQFRxnParityRetain=C0t,o.cAtomQFRxnParityShift=M0t,o.cAtomQFSimpleFeatures=H0t,o.cAtomQFSmallRingSize=V0t,o.cAtomQFSmallRingSizeBits=E0t,o.cAtomQFSmallRingSizeShift=S0t,o.cAtomQFStereoState=q0t,o.cAtomQFStereoStateBits=I0t,o.cAtomQFStereoStateShift=x0t,o.cAtomRadicalState=N0t,o.cAtomRadicalStateD=O0t,o.cAtomRadicalStateNone=G0t,o.cAtomRadicalStateS=J0t,o.cAtomRadicalStateShift=z0t,o.cAtomRadicalStateT=Y0t,o.cAtomValence=uE,o.cBondCIPParityEorP=K0t,o.cBondCIPParityNone=X0t,o.cBondCIPParityProblem=Z0t,o.cBondCIPParityZorM=W0t,o.cBondParityEor1=_0t,o.cBondParityNone=$0t,o.cBondParityUnknown=a0t,o.cBondParityZor2=tet,o.cBondQFAllFeatures=eet,o.cBondQFAromState=Aet,o.cBondQFAromStateBits=net,o.cBondQFAromStateShift=Pet,o.cBondQFAromatic=ret,o.cBondQFBondTypes=iet,o.cBondQFBondTypesBits=fet,o.cBondQFBondTypesShift=Det,o.cBondQFBridge=uet,o.cBondQFBridgeBits=Qet,o.cBondQFBridgeMin=Uet,o.cBondQFBridgeMinBits=oet,o.cBondQFBridgeMinShift=Let,o.cBondQFBridgeShift=set,o.cBondQFBridgeSpan=yet,o.cBondQFBridgeSpanBits=Tet,o.cBondQFBridgeSpanShift=het,o.cBondQFDelocalized=cet,o.cBondQFDepictedFeatures=wet,o.cBondQFDouble=get,o.cBondQFMatchFormalOrder=det,o.cBondQFMatchStereo=Bet,o.cBondQFMetalLigand=vet,o.cBondQFNarrowing=Fet,o.cBondQFNoOfBits=met,o.cBondQFNotAromatic=ket,o.cBondQFNotRing=bet,o.cBondQFQuadruple=Ret,o.cBondQFQuintuple=jet,o.cBondQFRareBondTypes=pet,o.cBondQFRareBondTypesBits=Cet,o.cBondQFRareBondTypesShift=Met,o.cBondQFRing=Het,o.cBondQFRingSize=Vet,o.cBondQFRingSizeBits=Eet,o.cBondQFRingSizeShift=qet,o.cBondQFRingState=Iet,o.cBondQFRingStateBits=xet,o.cBondQFRingStateShift=Net,o.cBondQFSimpleFeatures=Oet,o.cBondQFSingle=Get,o.cBondQFTriple=Jet,o.cBondTypeCross=zet,o.cBondTypeDeleted=Yet,o.cBondTypeDelocalized=Ket,o.cBondTypeDouble=Xet,o.cBondTypeDown=Zet,o.cBondTypeIncreaseOrder=Wet,o.cBondTypeMaskSimple=_et,o.cBondTypeMaskStereo=$et,o.cBondTypeMetalLigand=aet,o.cBondTypeQuadruple=tAt,o.cBondTypeQuintuple=eAt,o.cBondTypeSingle=AAt,o.cBondTypeTriple=nAt,o.cBondTypeUp=PAt,o.cChiralityDiastereomers=rAt,o.cChiralityEpimers=iAt,o.cChiralityIsomerCountMask=fAt,o.cChiralityKnownEnantiomer=DAt,o.cChiralityMeso=uAt,o.cChiralityNotChiral=QAt,o.cChiralityRacemic=UAt,o.cChiralityUnknown=oAt,o.cChiralityUnknownEnantiomer=LAt,o.cCommonOxidationState=QE,o.cDefaultAVBL=sAt,o.cDefaultAllowedPseudoAtoms=yAt,o.cDefaultAtomValence=lAt,o.cESRGroupBits=TAt,o.cESRMaxGroups=hAt,o.cESRTypeAbs=cAt,o.cESRTypeAnd=wAt,o.cESRTypeOr=gAt,o.cHelperAll=dAt,o.cHelperBitCIP=BAt,o.cHelperBitIncludeNitrogenParities=vAt,o.cHelperBitNeighbours=FAt,o.cHelperBitParities=mAt,o.cHelperBitRings=kAt,o.cHelperBitRingsSimple=bAt,o.cHelperBitSymmetrySimple=RAt,o.cHelperBitSymmetryStereoHeterotopicity=jAt,o.cHelperBitsStereo=pAt,o.cHelperCIP=CAt,o.cHelperNeighbours=MAt,o.cHelperNone=HAt,o.cHelperParities=VAt,o.cHelperRings=EAt,o.cHelperRingsSimple=SAt,o.cHelperSymmetrySimple=qAt,o.cHelperSymmetryStereoHeterotopicity=IAt,o.cMaxAtomicNo=xAt,o.cMaxConnAtoms=NAt,o.cMoleculeColorDefault=OAt,o.cMoleculeColorNeutral=GAt,o.cPseudoAtomA=JAt,o.cPseudoAtomAttachmentPoint=zAt,o.cPseudoAtomPolymer=YAt,o.cPseudoAtomR=KAt,o.cPseudoAtomX=XAt,o.cPseudoAtomsAGroups=ZAt,o.cPseudoAtomsAll=WAt,o.cPseudoAtomsAminoAcids=_At,o.cPseudoAtomsHydrogenIsotops=$At,o.cPseudoAtomsRGroups=aAt,o.cRoundedMass=UE,o.fromIDCode=Cz,o.fromMolfile=Px,o.fromMolfileWithAtomMap=JJ,o.fromSmiles=Dz,o.getAngle=YI,o.getAngleDif=AI,o.getAtomicNoFromLabel=nI,o.getDefaultAverageBondLength=LI,o.isAtomicNoElectronegative=qq,o.isAtomicNoElectropositive=Iq,o.setDefaultAverageBondLength=yq,o=s0(\"OCL.MoleculeProperties\",p7),o=s0(\"OCL.Reaction\",Cd),o.create=eI,o.fromMolecules=LJ,o.fromRxn=UO,o.fromSmiles=JN,o=s0(\"OCL.ReactionEncoder\",ac),o.CATALYST_DELIMITER=tnt,o.INCLUDE_ALL=ent,o.INCLUDE_CATALYSTS=Ant,o.INCLUDE_COORDS=nnt,o.INCLUDE_DEFAULT=Pnt,o.INCLUDE_DRAWING_OBJECTS=rnt,o.INCLUDE_MAPPING=int,o.INCLUDE_RXN_CODE_ONLY=fnt,o.MOLECULE_DELIMITER=Dnt,o.OBJECT_DELIMITER=unt,o.PRODUCT_IDENTIFIER=Qnt,o.RETAIN_REACTANT_AND_PRODUCT_ORDER=Unt,o.decode=$K,o.encode=ZZ,o=s0(\"OCL.Reactor\",I7),o=s0(\"OCL.Resources\",_2),o._register=Qq,o=s0(\"OCL.RingCollection\"),o.MAX_SMALL_RING_SIZE=ont,o.MODE_SMALL_AND_LARGE_RINGS=Lnt,o.MODE_SMALL_AND_LARGE_RINGS_AND_AROMATICITY=snt,o.MODE_SMALL_RINGS_AND_AROMATICITY=ynt,o.MODE_SMALL_RINGS_ONLY=lnt,o=s0(\"OCL.SDFileParser\",ld),o=s0(\"OCL.SSSearcher\",AB),o=s0(\"OCL.SSSearcherWithIndex\",t7),o.bitCount=Uq,o.getHexStringFromIndex=Pq,o.getIndexFromHexString=rq,o.getKeyIDCode=oq,o.getSimilarityAngleCosine=mq,o.getSimilarityTanimoto=kq,o=s0(\"OCL.SmilesParser\",Ww),d3(),o=s0(\"OCL.ToxicityPredictor\",$7),o.RISK_HIGH=Tnt,o.RISK_LOW=hnt,o.RISK_NAMES=LE,o.RISK_NO=cnt,o.RISK_UNKNOWN=wnt,o.TYPE_IRRITANT=gnt,o.TYPE_MUTAGENIC=dnt,o.TYPE_REPRODUCTIVE_EFFECTIVE=Bnt,o.TYPE_TUMORIGENIC=vnt,o=s0(\"OCL.Transformer\",zg),o=s0(\"OCL.Util\",$c),o.getHoseCodesFromDiastereotopicID=$J,o=s0(\"java.io.Serializable\"),o.$isInstance=Mz,R9(),o=s0(\"java.lang.Boolean\"),o.$isInstance=nx,o=s0(\"java.lang.CharSequence\"),o.$isInstance=ZG,o=s0(\"java.lang.Cloneable\"),o.$isInstance=cG,o=s0(\"java.lang.Comparable\"),o.$isInstance=WJ,o=s0(\"java.lang.Double\"),o.$isInstance=bI,o=s0(\"java.lang.Number\"),o.$isInstance=AO,o=s0(\"java.lang.String\"),o.$isInstance=RI,o=s0(\"java.lang.Throwable\"),o.of=PJ,o=s0(\"java.util.List\"),o.copyOf=tz,o=s0(\"java.util.Map\"),o.copyOf=rN,o=s0(\"java.util.Set\"),o.copyOf=kz,o=s0(\"javaemul.internal.HashCodes\",nw),o.getIdentityHashCode=Sz,o.getNextHash=Aq,o.getObjectIdentityHashCode=vD,o=s0(\"javaemul.internal.JsUtils\"),o.toDoubleFromUnsignedInt=nq;var KE=HN,dPt=TY;SO(kS),zO(\"permProps\",[[]]),H1(\"moduleStartup\",\"moduleEvalEnd\"),dPt(Ft.__errFn,Ft.__moduleName,Ft.__moduleBase,Ft.__softPermutationId,Ft.__computePropValue),H1(\"moduleStartup\",\"end\"),Bt&&Bt.permProps&&Ft.__moduleStartupDone(Bt.permProps);let XE=w.OCL;return XE.version=\"9.20.0\",XE}var RPt=typeof window<\"u\"&&typeof window.document<\"u\",R8;R8={document:{compatMode:\"CSS1Compat\"}},R8.setTimeout=globalThis.setTimeout?globalThis.setTimeout.bind(globalThis):eD,R8.clearTimeout=globalThis.clearTimeout?globalThis.clearTimeout.bind(globalThis):eD,R8.setInterval=globalThis.setInterval?globalThis.setInterval.bind(globalThis):eD,R8.clearInterval=globalThis.clearInterval?globalThis.clearInterval.bind(globalThis):eD,R8.Error=globalThis.Error,R8.Map=globalThis.Map,R8.Math=globalThis.Math,R8.RegExp=globalThis.RegExp,R8.TypeError=globalThis.TypeError;var jPt=bPt(R8),Z0=jPt;function mS(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 H1=new TextEncoder;if(typeof Ft!=\"object\"||Ft===null)throw new TypeError(\"resources must be an object\");let bt={};for(let[y1,i1]of Object.entries(Ft)){if(typeof i1!=\"string\")throw new TypeError(`resource ${y1} must be a string`);bt[y1]=H1.encode(i1)}Z(bt)},w.Resources.registerFromUrl=async function(Ft=pPt()){let bt=await(await fetch(Ft)).json(),y1=new TextEncoder,i1=Object.fromEntries(Object.entries(bt).map(([L1,u1])=>[L1,y1.encode(u1)]));Z(i1)},typeof process<\"u\"){let ot=function(){let Ft=process.getBuiltinModule(\"node:path\"),H1=Ft.join(import.meta.dirname,\"resources.json\");return import.meta.filename.endsWith(\"register_resources.js\")&&(H1=Ft.join(import.meta.dirname,\"../dist/resources.json\")),H1};var Bt=ot;w.Resources.registerFromNodejs=function(H1=ot()){let y1=process.getBuiltinModule(\"node:fs\").readFileSync(H1,\"ascii\");w.Resources.register(y1)}}else w.Resources.registerFromNodejs=function(){throw new Error(\"Resources.registerFromNodejs can only be called from Node.js\")}}function pPt(){return new URL(\"resources.json\",import.meta.url).href}Wc(Z0);FS(Z0);mS(Z0);var Lut=Z0,sut=Z0.CanvasEditor,yut=Z0.registerCustomElement,lut=Z0.Canonizer,Tut=Z0.CanonizerUtil,hut=Z0.ConformerGenerator,cut=Z0.DrugScoreCalculator,wut=Z0.DruglikenessPredictor,gut=Z0.ForceFieldMMFF94,dut=Z0.Molecule,But=Z0.MoleculeProperties,vut=Z0.Reaction,Fut=Z0.ReactionEncoder,mut=Z0.Reactor,kut=Z0.Resources,but=Z0.RingCollection,Rut=Z0.SDFileParser,jut=Z0.SSSearcher,put=Z0.SSSearcherWithIndex,Cut=Z0.SmilesParser,Mut=Z0.ToxicityPredictor,Hut=Z0.Transformer,Vut=Z0.Util,Eut=Z0.version;export{lut as Canonizer,Tut as CanonizerUtil,sut as CanvasEditor,hut as ConformerGenerator,cut as DrugScoreCalculator,wut as DruglikenessPredictor,gut as ForceFieldMMFF94,dut as Molecule,But as MoleculeProperties,vut as Reaction,Fut as ReactionEncoder,mut as Reactor,kut as Resources,but as RingCollection,Rut as SDFileParser,jut as SSSearcher,put as SSSearcherWithIndex,Cut as SmilesParser,Mut as ToxicityPredictor,Hut as Transformer,Vut as Util,Lut as default,yut as registerCustomElement,Eut as version};\n/**\n * openchemlib - Manipulate molecules\n * @version v9.20.0\n * @date 2026-02-13T13:13:04.163Z\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PW@M]gIhM]GIdC]cAdvAnqirXcW^rZ`wXtYLqkkYMp[lYLfDuvlfdMvMfSJFzBKImC]cCdqanqbrZpwTpYLx[hKLf|MvMVSAFzBSIhm]cUdc]AQdvVnqbqQnqnrZhwXsYLukl[MuklYLMkjXMMklZLmklXMlklxyWQuvnqisrn}oe][@j{VaUtlcklX]bknXeWTuJnqf]]c]n]]cM`',\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]_tEpCWVrZCWZrYCW^r[CWXrXcWRrZ`wXpyLqkhyMqkjYLH[l[lfdMvLvSJZ{fSZZ{NSFF{FCIkC]cSdsanqhr[pwXrYLD[l[LfbMvLVSIFzfCIlc]cUdqVnqjuVnqbsVnqlwVnqdpvni`tvnqhrvnq`vrnsce]GWZ{FgOJ{v~UulBkmZEWXrJnel]]cCbU]STz{F{Lz{F[\\\\j{f@',\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@@_tNrCWYrY@wYrZM`[hyMFHMtlfcTZ{FSLV{FCIhwFncdpfnedtanq`rYSWTr[SWZrXsW^rZsW\\\\rYsWXp[sWVrXKWRtZHwXpZLeklzMdkiXkWQtZiWZsRnsne]cCJ{ffUt\\\\lkkXyWTurn}`',\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}@hAnqh]t]FPwTvNzVcD[hzg]cIfMwMqnuaMtmIn}e]ulfuwTrYs][Q{mYLgnydv^zVS@',\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~`T`wRrNzVcX[nXg]GQjMvmqniaMvMIncmMul[nqduf{v]wVr[w]SIh}vlfSw\\\\r[O]KI`',\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: String.raw `fj}@p@@DEiI\\bbbfbTtQRQXHwhyZdJH@BJ@@OzARC]KH[n[G]KQjMuLsnchwF{VDwXtn{FSJ[hxs][V{kYL{nidwf{vCwZrZO]sIl}tlf@`,\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_hE@MvMCnchrFzfqwRtXc]GT{lYLqnynMvlIneiMwlknmdvnzfSN[kXO]kIh}wLfSwRrX',\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@~`rOtBdFzVQwRt[C]sD{hzMQnufMuMqnqaMt\\\\inmm]vLfLw^unzvSN{jYLGnudt^{fSI{iYL',\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@@_tB`F{F`wTrNzNcX[nXg]cIj]tmFXwQpfzVewVrYW]SImMvlYn}k]vlf]w\\\\rXK][I{iYL',\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~`T`wRrNzVcX[nXg]GQjMvlqninMvLInceMumknqdqf{vmwVrYw]SI`}vlfcw\\\\rYO]KI`',\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@@heHMv]ancb]v\\\\fiwQrYc]{\\\\{oYLInqi]vLfTwVvfzfMwVrZw]SIgMvmyny`}vlfcw\\\\rYK]KY{iYL',\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@@_tRdF{vQwYr[C]cD[hzg]GIfMumqniaMv]Kn}drf{Vtw\\\\un{FSN[i[w][I`}uLfcwZrYO]sIl}tlf@',\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@@heHMv]ancb]v\\\\fhw^sNzNS\\\\{kYLInqi]wlfUwXr[W]kIcMumYnig]uLf}wRrXK]kQ[nYO]sIlmtl',\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_t|dF{NQwXr[C]GD{jYMSnmdsF{vEw\\\\rZW]kIeMvMknedqfzvlwTwf{VBw\\\\tVzV@',\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}DiCn}drF{vqwXrXg]GIjMvLqncn]ulfEwTrZW]gIeMuminicMv][nudsn{fS^[mXK]sQ{iYLene`',\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}DiAn}d]v\\\\fpwXqFzNiwQrYc][\\\\[jXS]gR{oYLinumMwL[nqdufzV]wVr[w]SI`}vlfcw\\\\rYO]KI`',\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}DiCnsdrF{NqwQrXc]GT{oYLqn}n]vLfDwXtnzvSJ{jYMinmcMuM[nudsn{fS^[mXK]sQ{iYLene`',\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: String.raw `fdy@@@DjU^{yVg@qBBJj@@@@he@]vLfawVrYG]SIl]wlfIwZrZg]sIf]t\\fywRrXS]GR{lyLin}mMv\\YnqkMulynioMvlEnyhmtl`,\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: String.raw `fde@@@LdbbTRtVRKIBTFHQEDE@D@AQJ@{kYMCnqdrN{VSX[oXg]SIj]wlfYwRr[c]cB[hzW]sIe]t\\ftwVqfzflwYsn{NS^[mXK]sQ[iX`,\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: String.raw `fde@@@LdbbbTRVQpcZ][t@DDDUA@AQJ@[kZG]SIdMvManub]vLfiw\\rYc]S\\[oXS]KR{kYLkn}dvnzVSF[nZs]GN{mYM{ncdpV{NcwYrX`,\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~`T`wRrNzVcX[nXg]GQjMvlsnqdwFzfDwXtfzNTwVvnzvSF{jYMYn}g]vlf}w\\\\rXO]KI`',\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@@hEHMtlanyl]tmFIwXrZc]SL{hzMqnua]ulfewTrYS]cZ[hxs][V{mYL{nydwf{vCwRrX',\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@@OzNrBnsdZ{NcXut]FIkiZMQWXsC]cAhwE]GBuvLFdkiYRnimJ{VLkoYrnyoJzv@',\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~cl`klyFnshvM]GQbZzVcTUvLpwXpZMqWQpm]cAiJzVTkj[RnucJ{vlknYrnm`',\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: 'foQA@@@YEEEEDdbrRkF\\\\t@D@D@@_t]dE]gHuv]FqkhzLSWRtZbnqfF{FCQnJzNDkiZVnq`re]SZUvlYW^ue]sNUul',\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@@BJozN`]vLfcnmdr]uLfsnilq]vlfknyds]vMf{nedpmvMK][JwTvmvl[]sVwRp',\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`@@@@@@OzNpFnshtM]KQdJ{NpklXfnq`uE]KLut]FxkjXQnq`tZRnyeJzNtkmXrn}kJzv@',\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@OzJdMtlg]KQl[nXnzNcTwZsMuMs]cBwQtmumk]{@',\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QTAnqh{hzLc]SYwRtXfzNinyf[i[f{VEn}i[kX',\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 * 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","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","import isutf8 from 'isutf8';\n/**\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        const { encoding = guessEncoding(blob) } = options;\n        const decoder = new TextDecoder(encoding);\n        return decoder.decode(blob);\n    }\n    throw new TypeError(`blob must be a string, ArrayBuffer or ArrayBufferView`);\n}\nfunction guessEncoding(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 'utf-16be';\n        }\n        if (uint8[0] === 0xff && uint8[1] === 0xfe) {\n            return 'utf-16le';\n        }\n    }\n    //@ts-expect-error an ArrayBuffer is also ok\n    if (!isutf8(blob))\n        return 'latin1';\n    return 'utf-8';\n}\n//# sourceMappingURL=index.js.map","/*\n    https://tools.ietf.org/html/rfc3629\n\n    UTF8-char = UTF8-1 / UTF8-2 / UTF8-3 / UTF8-4\n\n    UTF8-1    = %x00-7F\n\n    UTF8-2    = %xC2-DF UTF8-tail\n\n    UTF8-3    = %xE0 %xA0-BF UTF8-tail\n                %xE1-EC 2( UTF8-tail )\n                %xED %x80-9F UTF8-tail\n                %xEE-EF 2( UTF8-tail )\n\n    UTF8-4    = %xF0 %x90-BF 2( UTF8-tail )\n                %xF1-F3 3( UTF8-tail )\n                %xF4 %x80-8F 2( UTF8-tail )\n\n    UTF8-tail = %x80-BF\n*/\n/**\n * Check if a Node.js Buffer or Uint8Array is UTF-8.\n */\nfunction isUtf8(buf) {\n    if (!buf) {\n        return false;\n    }\n    var i = 0;\n    var len = buf.length;\n    while (i < len) {\n        // UTF8-1 = %x00-7F\n        if (buf[i] <= 0x7F) {\n            i++;\n            continue;\n        }\n        // UTF8-2 = %xC2-DF UTF8-tail\n        if (buf[i] >= 0xC2 && buf[i] <= 0xDF) {\n            // if(buf[i + 1] >= 0x80 && buf[i + 1] <= 0xBF) {\n            if (buf[i + 1] >> 6 === 2) {\n                i += 2;\n                continue;\n            }\n            else {\n                return false;\n            }\n        }\n        // UTF8-3 = %xE0 %xA0-BF UTF8-tail\n        // UTF8-3 = %xED %x80-9F UTF8-tail\n        if (((buf[i] === 0xE0 && buf[i + 1] >= 0xA0 && buf[i + 1] <= 0xBF) ||\n            (buf[i] === 0xED && buf[i + 1] >= 0x80 && buf[i + 1] <= 0x9F)) && buf[i + 2] >> 6 === 2) {\n            i += 3;\n            continue;\n        }\n        // UTF8-3 = %xE1-EC 2( UTF8-tail )\n        // UTF8-3 = %xEE-EF 2( UTF8-tail )\n        if (((buf[i] >= 0xE1 && buf[i] <= 0xEC) ||\n            (buf[i] >= 0xEE && buf[i] <= 0xEF)) &&\n            buf[i + 1] >> 6 === 2 &&\n            buf[i + 2] >> 6 === 2) {\n            i += 3;\n            continue;\n        }\n        // UTF8-4 = %xF0 %x90-BF 2( UTF8-tail )\n        //          %xF1-F3 3( UTF8-tail )\n        //          %xF4 %x80-8F 2( UTF8-tail )\n        if (((buf[i] === 0xF0 && buf[i + 1] >= 0x90 && buf[i + 1] <= 0xBF) ||\n            (buf[i] >= 0xF1 && buf[i] <= 0xF3 && buf[i + 1] >> 6 === 2) ||\n            (buf[i] === 0xF4 && buf[i + 1] >= 0x80 && buf[i + 1] <= 0x8F)) &&\n            buf[i + 2] >> 6 === 2 &&\n            buf[i + 3] >> 6 === 2) {\n            i += 4;\n            continue;\n        }\n        return false;\n    }\n    return true;\n}\n\nexport { isUtf8 as default };\n","/**\n * Parse the molfile and the properties with > < labels >\n * @param {string} sdfPart\n * @param {*} labels\n * @param {*} currentLabels\n * @param {object} options\n * @returns\n */\nexport function getMolecule(sdfPart, labels, currentLabels, options) {\n  let parts = sdfPart.split(`${options.eol}>`);\n  if (parts.length === 0 || parts[0].length <= 5) return;\n  let molecule = {};\n  molecule.molfile = parts[0] + options.eol;\n  for (let j = 1; j < parts.length; j++) {\n    let lines = parts[j].split(options.eol);\n    let from = lines[0].indexOf('<');\n    let to = lines[0].indexOf('>');\n    let label = lines[0].slice(from + 1, to);\n    currentLabels.push(label);\n    if (!labels[label]) {\n      labels[label] = {\n        counter: 0,\n        isNumeric: options.dynamicTyping,\n        keep: false,\n      };\n      if (\n        (!options.exclude || !options.exclude.includes(label)) &&\n        (!options.include || options.include.includes(label))\n      ) {\n        labels[label].keep = true;\n        if (options.modifiers[label]) {\n          labels[label].modifier = options.modifiers[label];\n        }\n        if (options.forEach[label]) {\n          labels[label].forEach = options.forEach[label];\n        }\n      }\n    }\n    if (labels[label].keep) {\n      for (let k = 1; k < lines.length - 1; k++) {\n        if (molecule[label]) {\n          molecule[label] += options.eol + lines[k];\n        } else {\n          molecule[label] = lines[k];\n        }\n      }\n      if (labels[label].modifier) {\n        let modifiedValue = labels[label].modifier(molecule[label]);\n        if (modifiedValue === undefined || modifiedValue === null) {\n          delete molecule[label];\n        } else {\n          molecule[label] = modifiedValue;\n        }\n      }\n      if (\n        labels[label].isNumeric &&\n        (!Number.isFinite(+molecule[label]) || molecule[label].match(/^0[0-9]/))\n      ) {\n        labels[label].isNumeric = false;\n      }\n    }\n  }\n  return molecule;\n}\n","import { ensureString } from 'ensure-string';\n\nimport { getEntriesBoundaries } from './getEntriesBoundaries';\nimport { getMolecule } from './util/getMolecule';\n/**\n *  Parse a SDF file\n * @param {string|ArrayBuffer|Uint8Array} sdf - SDF file to parse\n * @param {object} [options={}]\n * @param {string[]} [options.include] - List of fields to include\n * @param {string[]} [options.exclude] - List of fields to exclude\n * @param {Function} [options.filter] - Callback allowing to filter the molecules\n * @param {boolean} [options.dynamicTyping] - Dynamically type the data\n * @param {object} [options.modifiers] - Object containing callbacks to apply on some specific fields\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 {object} - Object containing the molecules, the labels and the statistics\n */\nexport function parse(sdf, options = {}) {\n  options = { ...options };\n  if (options.modifiers === undefined) options.modifiers = {};\n  if (options.forEach === undefined) options.forEach = {};\n  if (options.dynamicTyping === undefined) options.dynamicTyping = true;\n\n  sdf = ensureString(sdf);\n  if (typeof sdf !== 'string') {\n    throw new TypeError('Parameter \"sdf\" must be a string');\n  }\n\n  if (options.eol === undefined) {\n    options.eol = '\\n';\n    if (options.mixedEOL) {\n      sdf = sdf.replaceAll('\\r\\n', '\\n');\n      sdf = sdf.replaceAll('\\r', '\\n');\n    } else {\n      // we will find the delimiter in order to be much faster and not use regular expression\n      let header = new Set(sdf.slice(0, 1000));\n      if (header.has('\\r\\n')) {\n        options.eol = '\\r\\n';\n      } else if (header.has('\\r')) {\n        options.eol = '\\r';\n      }\n    }\n  }\n\n  let entriesBoundaries = getEntriesBoundaries(\n    sdf,\n    `${options.eol}$$$$`,\n    options.eol,\n  );\n  let molecules = [];\n  let labels = {};\n\n  let start = Date.now();\n\n  for (let i = 0; i < entriesBoundaries.length; i++) {\n    let sdfPart = sdf.slice(...entriesBoundaries[i]);\n    if (sdfPart.length < 40) continue;\n    let currentLabels = [];\n    const molecule = getMolecule(sdfPart, labels, currentLabels, options);\n    if (!molecule) continue;\n    if (!options.filter || options.filter(molecule)) {\n      molecules.push(molecule);\n      // only now we can increase the counter\n      for (let j = 0; j < currentLabels.length; j++) {\n        labels[currentLabels[j]].counter++;\n      }\n    }\n  }\n  // all numeric fields should be converted to numbers\n  for (let label in labels) {\n    let currentLabel = labels[label];\n    if (currentLabel.isNumeric) {\n      currentLabel.minValue = Infinity;\n      currentLabel.maxValue = -Infinity;\n      for (let j = 0; j < molecules.length; j++) {\n        if (molecules[j][label]) {\n          let value = Number.parseFloat(molecules[j][label]);\n          molecules[j][label] = value;\n          if (value > currentLabel.maxValue) {\n            currentLabel.maxValue = value;\n          }\n          if (value < currentLabel.minValue) {\n            currentLabel.minValue = value;\n          }\n        }\n      }\n    }\n  }\n\n  // we check that a label is in all the records\n  for (let key in labels) {\n    if (labels[key].counter === molecules.length) {\n      labels[key].always = true;\n    } else {\n      labels[key].always = false;\n    }\n  }\n\n  let statistics = [];\n  for (let key in labels) {\n    let statistic = labels[key];\n    statistic.label = key;\n    statistics.push(statistic);\n  }\n\n  return {\n    time: Date.now() - start,\n    molecules,\n    labels: Object.keys(labels),\n    statistics,\n  };\n}\n","/**\n *\n * @param {*} string\n * @param {*} substring\n * @param {*} eol\n * @returns\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      } else {\n        previous = nextMatch + eol.length;\n        next = previous;\n      }\n    } else {\n      res.push([previous, string.length]);\n    }\n  }\n  return res;\n}\n","/**\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';\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';\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 { 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","/**\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","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 { getDiastereotopicAtomIDsAndH } from '../diastereotopic/getDiastereotopicAtomIDsAndH.js';\nimport { getGroupedDiastereotopicAtomIDs } from '../diastereotopic/getGroupedDiastereotopicAtomIDs.js';\nexport function toVisualizerMolfile(molecule, options = {}) {\n    const { diastereotopic, heavyAtomHydrogen } = options;\n    let highlight = [];\n    let atoms = {};\n    if (diastereotopic) {\n        const hydrogenInfo = {};\n        const extendedIDs = getDiastereotopicAtomIDsAndH(molecule);\n        for (const line of extendedIDs) {\n            hydrogenInfo[line.oclID] = line;\n        }\n        const diaIDs = getGroupedDiastereotopicAtomIDs(molecule);\n        for (const diaID of diaIDs) {\n            atoms[diaID.oclID] = diaID.atoms;\n            highlight.push(diaID.oclID);\n            if (heavyAtomHydrogen &&\n                hydrogenInfo[diaID.oclID] &&\n                hydrogenInfo[diaID.oclID].nbHydrogens > 0) {\n                for (const id of hydrogenInfo[diaID.oclID].hydrogenOCLIDs) {\n                    highlight.push(id);\n                    atoms[id] = diaID.atoms;\n                }\n            }\n        }\n    }\n    else {\n        const size = molecule.getAllAtoms();\n        highlight = new Array(size).fill(0).map((a, index) => index);\n        atoms = highlight.map((a) => [a]);\n    }\n    const molfile = {\n        type: 'mol2d',\n        value: molecule.toMolfile(),\n        _highlight: highlight,\n        _atoms: atoms,\n    };\n    return molfile;\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  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,\n  ReactSharedInternals = { H: null, A: null, T: null, S: null },\n  hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction ReactElement(type, key, self, source, owner, props) {\n  self = props.ref;\n  return {\n    $$typeof: REACT_ELEMENT_TYPE,\n    type: type,\n    key: key,\n    ref: void 0 !== self ? self : null,\n    props: props\n  };\n}\nfunction cloneAndReplaceKey(oldElement, newKey) {\n  return ReactElement(\n    oldElement.type,\n    newKey,\n    void 0,\n    void 0,\n    void 0,\n    oldElement.props\n  );\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 noop$1() {}\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$1, noop$1)\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      };\nfunction noop() {}\nexports.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.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.act = function () {\n  throw Error(\"act(...) is not supported in production builds of React.\");\n};\nexports.cache = function (fn) {\n  return function () {\n    return fn.apply(null, arguments);\n  };\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    owner = void 0;\n  if (null != config)\n    for (propName in (void 0 !== config.ref && (owner = void 0),\n    void 0 !== config.key && (key = \"\" + config.key),\n    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, void 0, void 0, owner, 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, void 0, void 0, null, 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    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.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.0.0\";\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.0.0\";\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  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), requestHostCallback();\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 exports.unstable_now() - startTime < frameInterval ? !1 : !0;\n}\nfunction performWorkUntilDeadline() {\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 requestHostCallback() {\n  isMessageLoopRunning ||\n    ((isMessageLoopRunning = !0), schedulePerformWorkUntilDeadline());\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_continueExecution = function () {\n  isHostCallbackScheduled ||\n    isPerformingWork ||\n    ((isHostCallbackScheduled = !0), requestHostCallback());\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_getFirstCallbackNode = function () {\n  return peek(taskQueue);\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_pauseExecution = function () {};\nexports.unstable_requestPaint = function () {};\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), requestHostCallback()));\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}\nvar 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_PROVIDER_TYPE = Symbol.for(\"react.provider\"),\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\");\nSymbol.for(\"react.debug_trace_mode\");\nvar REACT_OFFSCREEN_TYPE = Symbol.for(\"react.offscreen\");\nSymbol.for(\"react.legacy_hidden\");\nSymbol.for(\"react.tracing_marker\");\nvar REACT_MEMO_CACHE_SENTINEL = Symbol.for(\"react.memo_cache_sentinel\"),\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 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_PORTAL_TYPE:\n      return \"Portal\";\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  }\n  if (\"object\" === typeof type)\n    switch (type.$$typeof) {\n      case REACT_CONTEXT_TYPE:\n        return (type.displayName || \"Context\") + \".Provider\";\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 ReactSharedInternals =\n    React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n  assign = Object.assign,\n  prefix,\n  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$0) {\n                control = x$0;\n              }\n              fn.call(Fake.prototype);\n            }\n          } else {\n            try {\n              throw Error();\n            } catch (x$1) {\n              control = x$1;\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) {\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 describeBuiltInComponentFrame(\"Suspense\");\n    case 19:\n      return describeBuiltInComponentFrame(\"SuspenseList\");\n    case 0:\n    case 15:\n      return (fiber = describeNativeComponentFrame(fiber.type, !1)), fiber;\n    case 11:\n      return (\n        (fiber = describeNativeComponentFrame(fiber.type.render, !1)), fiber\n      );\n    case 1:\n      return (fiber = describeNativeComponentFrame(fiber.type, !0)), fiber;\n    default:\n      return \"\";\n  }\n}\nfunction getStackByFiberInDevAndProd(workInProgress) {\n  try {\n    var info = \"\";\n    do\n      (info += describeFiber(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}\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 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$2 = parentA.child; child$2; ) {\n        if (child$2 === a) {\n          didFindChild = !0;\n          a = parentA;\n          b = parentB;\n          break;\n        }\n        if (child$2 === b) {\n          didFindChild = !0;\n          b = parentA;\n          a = parentB;\n          break;\n        }\n        child$2 = child$2.sibling;\n      }\n      if (!didFindChild) {\n        for (child$2 = parentB.child; child$2; ) {\n          if (child$2 === a) {\n            didFindChild = !0;\n            a = parentB;\n            b = parentA;\n            break;\n          }\n          if (child$2 === b) {\n            didFindChild = !0;\n            b = parentB;\n            a = parentA;\n            break;\n          }\n          child$2 = child$2.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 isArrayImpl = Array.isArray,\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  fiber = nextRootInstance.nodeType;\n  switch (fiber) {\n    case 9:\n    case 11:\n      nextRootInstance = (nextRootInstance = nextRootInstance.documentElement)\n        ? (nextRootInstance = nextRootInstance.namespaceURI)\n          ? getOwnHostContext(nextRootInstance)\n          : 0\n        : 0;\n      break;\n    default:\n      if (\n        ((fiber = 8 === fiber ? nextRootInstance.parentNode : nextRootInstance),\n        (nextRootInstance = fiber.tagName),\n        (fiber = fiber.namespaceURI))\n      )\n        (fiber = getOwnHostContext(fiber)),\n          (nextRootInstance = getChildHostContextProd(fiber, nextRootInstance));\n      else\n        switch (nextRootInstance) {\n          case \"svg\":\n            nextRootInstance = 1;\n            break;\n          case \"math\":\n            nextRootInstance = 2;\n            break;\n          default:\n            nextRootInstance = 0;\n        }\n  }\n  pop(contextStackCursor);\n  push(contextStackCursor, nextRootInstance);\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 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 onCommitRoot(root) {\n  if (injectedHook && \"function\" === typeof injectedHook.onCommitFiberRoot)\n    try {\n      injectedHook.onCommitFiberRoot(\n        rendererID,\n        root,\n        void 0,\n        128 === (root.current.flags & 128)\n      );\n    } catch (err) {}\n}\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 nextTransitionLane = 128,\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    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 lanes & 4194176;\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) {\n  var pendingLanes = root.pendingLanes;\n  if (0 === pendingLanes) return 0;\n  var nextLanes = 0,\n    suspendedLanes = root.suspendedLanes,\n    pingedLanes = root.pingedLanes,\n    warmLanes = root.warmLanes;\n  root = 0 !== root.finishedLanes;\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            : root ||\n              ((warmLanes = nonIdlePendingLanes & ~warmLanes),\n              0 !== warmLanes &&\n                (nextLanes = getHighestPriorityLanes(warmLanes)))))\n    : ((nonIdlePendingLanes = pendingLanes & ~suspendedLanes),\n      0 !== nonIdlePendingLanes\n        ? (nextLanes = getHighestPriorityLanes(nonIdlePendingLanes))\n        : 0 !== pingedLanes\n          ? (nextLanes = getHighestPriorityLanes(pingedLanes))\n          : root ||\n            ((warmLanes = pendingLanes & ~warmLanes),\n            0 !== warmLanes &&\n              (nextLanes = getHighestPriorityLanes(warmLanes))));\n  return 0 === nextLanes\n    ? 0\n    : 0 !== wipLanes &&\n        wipLanes !== nextLanes &&\n        0 === (wipLanes & suspendedLanes) &&\n        ((suspendedLanes = nextLanes & -nextLanes),\n        (warmLanes = wipLanes & -wipLanes),\n        suspendedLanes >= warmLanes ||\n          (32 === suspendedLanes && 0 !== (warmLanes & 4194176)))\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      return currentTime + 250;\n    case 16:\n    case 32:\n    case 64:\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 claimNextTransitionLane() {\n  var lane = nextTransitionLane;\n  nextTransitionLane <<= 1;\n  0 === (nextTransitionLane & 4194176) && (nextTransitionLane = 128);\n  return lane;\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 & 4194218);\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 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 = getParentSuspenseInstance(targetNode);\n          null !== targetNode;\n\n        ) {\n          if ((parentNode = targetNode[internalInstanceKey])) return parentNode;\n          targetNode = getParentSuspenseInstance(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      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 canUseDOM = !(\n    \"undefined\" === typeof window ||\n    \"undefined\" === typeof window.document ||\n    \"undefined\" === typeof window.document.createElement\n  ),\n  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) {\n  var valueField = isCheckable(node) ? \"checked\" : \"value\",\n    descriptor = Object.getOwnPropertyDescriptor(\n      node.constructor.prototype,\n      valueField\n    ),\n    currentValue = \"\" + node[valueField];\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  node._valueTracker || (node._valueTracker = trackValueOnNode(node));\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      return;\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}\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}\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}\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 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$283;\n  if (canUseDOM) {\n    var isSupported$jscomp$inline_418 = \"oninput\" in document;\n    if (!isSupported$jscomp$inline_418) {\n      var element$jscomp$inline_419 = document.createElement(\"div\");\n      element$jscomp$inline_419.setAttribute(\"oninput\", \"return;\");\n      isSupported$jscomp$inline_418 =\n        \"function\" === typeof element$jscomp$inline_419.oninput;\n    }\n    JSCompiler_inline_result$jscomp$283 = isSupported$jscomp$inline_418;\n  } else JSCompiler_inline_result$jscomp$283 = !1;\n  isInputEventSupported =\n    JSCompiler_inline_result$jscomp$283 &&\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}\nfunction restoreSelection(priorSelectionInformation, containerInfo) {\n  var curFocusedElem = getActiveElementDeep(containerInfo);\n  containerInfo = priorSelectionInformation.focusedElem;\n  var priorSelectionRange = priorSelectionInformation.selectionRange;\n  if (\n    curFocusedElem !== containerInfo &&\n    containerInfo &&\n    containerInfo.ownerDocument &&\n    containsNode(containerInfo.ownerDocument.documentElement, containerInfo)\n  ) {\n    if (null !== priorSelectionRange && hasSelectionCapabilities(containerInfo))\n      if (\n        ((priorSelectionInformation = priorSelectionRange.start),\n        (curFocusedElem = priorSelectionRange.end),\n        void 0 === curFocusedElem &&\n          (curFocusedElem = priorSelectionInformation),\n        \"selectionStart\" in containerInfo)\n      )\n        (containerInfo.selectionStart = priorSelectionInformation),\n          (containerInfo.selectionEnd = Math.min(\n            curFocusedElem,\n            containerInfo.value.length\n          ));\n      else if (\n        ((curFocusedElem =\n          ((priorSelectionInformation =\n            containerInfo.ownerDocument || document) &&\n            priorSelectionInformation.defaultView) ||\n          window),\n        curFocusedElem.getSelection)\n      ) {\n        curFocusedElem = curFocusedElem.getSelection();\n        var length = containerInfo.textContent.length,\n          start = Math.min(priorSelectionRange.start, length);\n        priorSelectionRange =\n          void 0 === priorSelectionRange.end\n            ? start\n            : Math.min(priorSelectionRange.end, length);\n        !curFocusedElem.extend &&\n          start > priorSelectionRange &&\n          ((length = priorSelectionRange),\n          (priorSelectionRange = start),\n          (start = length));\n        length = getNodeForCharacterOffset(containerInfo, start);\n        var endMarker = getNodeForCharacterOffset(\n          containerInfo,\n          priorSelectionRange\n        );\n        length &&\n          endMarker &&\n          (1 !== curFocusedElem.rangeCount ||\n            curFocusedElem.anchorNode !== length.node ||\n            curFocusedElem.anchorOffset !== length.offset ||\n            curFocusedElem.focusNode !== endMarker.node ||\n            curFocusedElem.focusOffset !== endMarker.offset) &&\n          ((priorSelectionInformation =\n            priorSelectionInformation.createRange()),\n          priorSelectionInformation.setStart(length.node, length.offset),\n          curFocusedElem.removeAllRanges(),\n          start > priorSelectionRange\n            ? (curFocusedElem.addRange(priorSelectionInformation),\n              curFocusedElem.extend(endMarker.node, endMarker.offset))\n            : (priorSelectionInformation.setEnd(\n                endMarker.node,\n                endMarker.offset\n              ),\n              curFocusedElem.addRange(priorSelectionInformation)));\n      }\n    priorSelectionInformation = [];\n    for (\n      curFocusedElem = containerInfo;\n      (curFocusedElem = curFocusedElem.parentNode);\n\n    )\n      1 === curFocusedElem.nodeType &&\n        priorSelectionInformation.push({\n          element: curFocusedElem,\n          left: curFocusedElem.scrollLeft,\n          top: curFocusedElem.scrollTop\n        });\n    \"function\" === typeof containerInfo.focus && containerInfo.focus();\n    for (\n      containerInfo = 0;\n      containerInfo < priorSelectionInformation.length;\n      containerInfo++\n    )\n      (curFocusedElem = priorSelectionInformation[containerInfo]),\n        (curFocusedElem.element.scrollLeft = curFocusedElem.left),\n        (curFocusedElem.element.scrollTop = curFocusedElem.top);\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 scrollEnd toggle touchMove waiting wheel\".split(\n      \" \"\n    );\nfunction registerSimpleEvent(domEventName, reactName) {\n  topLevelEventsToReactNames.set(domEventName, reactName);\n  registerTwoPhaseEvent(reactName, [domEventName]);\n}\nvar 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  isHidden &&\n    null !== update &&\n    3 === sourceFiber.tag &&\n    ((parent = sourceFiber.stateNode),\n    (isHidden = 31 - clz32(lane)),\n    (parent = parent.hiddenUpdates),\n    (sourceFiber = parent[isHidden]),\n    null === sourceFiber\n      ? (parent[isHidden] = [update])\n      : sourceFiber.push(update),\n    (update.lane = lane | 536870912));\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 = {},\n  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}\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(formatProdErrorMessage(418, \"\"));\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      track(instance);\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        track(instance);\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);\n}\nfunction popToNextHostParent(fiber) {\n  for (hydrationParentFiber = fiber.return; hydrationParentFiber; )\n    switch (hydrationParentFiber.tag) {\n      case 3:\n      case 27:\n        rootOrSingletonContext = !0;\n        return;\n      case 5:\n      case 13:\n        rootOrSingletonContext = !1;\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 shouldClear = !1,\n    JSCompiler_temp;\n  if ((JSCompiler_temp = 3 !== fiber.tag && 27 !== fiber.tag)) {\n    if ((JSCompiler_temp = 5 === fiber.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 && (shouldClear = !0);\n  shouldClear && nextHydratableInstance && throwOnHydrationMismatch(fiber);\n  popToNextHostParent(fiber);\n  if (13 === fiber.tag) {\n    fiber = fiber.memoizedState;\n    fiber = null !== fiber ? fiber.dehydrated : null;\n    if (!fiber) throw Error(formatProdErrorMessage(317));\n    a: {\n      fiber = fiber.nextSibling;\n      for (shouldClear = 0; fiber; ) {\n        if (8 === fiber.nodeType)\n          if (((JSCompiler_temp = fiber.data), \"/$\" === JSCompiler_temp)) {\n            if (0 === shouldClear) {\n              nextHydratableInstance = getNextHydratable(fiber.nextSibling);\n              break a;\n            }\n            shouldClear--;\n          } else\n            (\"$\" !== JSCompiler_temp &&\n              \"$!\" !== JSCompiler_temp &&\n              \"$?\" !== JSCompiler_temp) ||\n              shouldClear++;\n        fiber = fiber.nextSibling;\n      }\n      nextHydratableInstance = null;\n    }\n  } else\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 queueHydrationError(error) {\n  null === hydrationErrors\n    ? (hydrationErrors = [error])\n    : hydrationErrors.push(error);\n}\nvar SuspenseException = Error(formatProdErrorMessage(460)),\n  SuspenseyCommitException = Error(formatProdErrorMessage(474)),\n  noopSuspenseyCommitThenable = { then: function () {} };\nfunction isThenableResolved(thenable) {\n  thenable = thenable.status;\n  return \"fulfilled\" === thenable || \"rejected\" === thenable;\n}\nfunction noop$3() {}\nfunction trackUsedThenable(thenableState, thenable, index) {\n  index = thenableState[index];\n  void 0 === index\n    ? thenableState.push(thenable)\n    : index !== thenable && (thenable.then(noop$3, noop$3), (thenable = index));\n  switch (thenable.status) {\n    case \"fulfilled\":\n      return thenable.value;\n    case \"rejected\":\n      thenableState = thenable.reason;\n      if (thenableState === SuspenseException)\n        throw Error(formatProdErrorMessage(483));\n      throw thenableState;\n    default:\n      if (\"string\" === typeof thenable.status) thenable.then(noop$3, noop$3);\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          thenableState = thenable.reason;\n          if (thenableState === SuspenseException)\n            throw Error(formatProdErrorMessage(483));\n          throw thenableState;\n      }\n      suspendedThenable = thenable;\n      throw SuspenseException;\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}\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 throwOnInvalidObjectType(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 resolveLazy(lazyType) {\n  var init = lazyType._init;\n  return init(lazyType._payload);\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 |= 33554434), lastPlacedIndex)\n          : newIndex\n      );\n    newFiber.flags |= 33554434;\n    return lastPlacedIndex;\n  }\n  function placeSingleChild(newFiber) {\n    shouldTrackSideEffects &&\n      null === newFiber.alternate &&\n      (newFiber.flags |= 33554434);\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          var init = newChild._init;\n          newChild = init(newChild._payload);\n          return createChild(returnFiber, newChild, lanes);\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      throwOnInvalidObjectType(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            (key = newChild._init),\n            (newChild = key(newChild._payload)),\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      throwOnInvalidObjectType(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          var init = newChild._init;\n          newChild = init(newChild._payload);\n          return updateFromMap(\n            existingChildren,\n            returnFiber,\n            newIdx,\n            newChild,\n            lanes\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      throwOnInvalidObjectType(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            (key = newChild._init),\n            (newChild = key(newChild._payload)),\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      throwOnInvalidObjectType(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) 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  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 pushOffscreenSuspenseHandler(fiber) {\n  if (22 === fiber.tag) {\n    if (\n      (push(suspenseStackCursor, suspenseStackCursor.current),\n      push(suspenseHandlerStackCursor, fiber),\n      null === shellBoundary)\n    ) {\n      var current = fiber.alternate;\n      null !== current &&\n        null !== current.memoizedState &&\n        (shellBoundary = fiber);\n    }\n  } else 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 || \"$?\" === state.data || \"$!\" === state.data)\n      )\n        return node;\n    } else if (19 === node.tag && void 0 !== node.memoizedProps.revealOrder) {\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 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  \"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 renderLanes = 0,\n  currentlyRenderingFiber$1 = 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$1 = 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$1 = 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$1 = 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$1.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$1 = 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$1.memoizedState = workInProgressHook = hook)\n    : (workInProgressHook = workInProgressHook.next = hook);\n  return workInProgressHook;\n}\nfunction updateWorkInProgressHook() {\n  if (null === currentHook) {\n    var nextCurrentHook = currentlyRenderingFiber$1.alternate;\n    nextCurrentHook =\n      null !== nextCurrentHook ? nextCurrentHook.memoizedState : null;\n  } else nextCurrentHook = currentHook.next;\n  var nextWorkInProgressHook =\n    null === workInProgressHook\n      ? currentlyRenderingFiber$1.memoizedState\n      : workInProgressHook.next;\n  if (null !== nextWorkInProgressHook)\n    (workInProgressHook = nextWorkInProgressHook),\n      (currentHook = nextCurrentHook);\n  else {\n    if (null === nextCurrentHook) {\n      if (null === currentlyRenderingFiber$1.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$1.memoizedState = workInProgressHook =\n          nextCurrentHook)\n      : (workInProgressHook = workInProgressHook.next = nextCurrentHook);\n  }\n  return workInProgressHook;\n}\nvar createFunctionComponentUpdateQueue;\ncreateFunctionComponentUpdateQueue = function () {\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$1;\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$1.updateQueue;\n  null !== updateQueue && (memoCache = updateQueue.memoCache);\n  if (null == memoCache) {\n    var current = currentlyRenderingFiber$1.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$1.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$54 = !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                action: update.action,\n                hasEagerState: update.hasEagerState,\n                eagerState: update.eagerState,\n                next: null\n              }),\n            updateLane === currentEntangledLane &&\n              (didReadFromEntangledAsyncAction$54 = !0);\n        else if ((renderLanes & revertLane) === revertLane) {\n          update = update.next;\n          revertLane === currentEntangledLane &&\n            (didReadFromEntangledAsyncAction$54 = !0);\n          continue;\n        } else\n          (updateLane = {\n            lane: 0,\n            revertLane: update.revertLane,\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$1.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          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$1.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$54 &&\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$1,\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    pushEffect(\n      9,\n      updateStoreInstance.bind(\n        null,\n        fiber,\n        hook,\n        getServerSnapshot,\n        getSnapshot\n      ),\n      { destroy: void 0 },\n      null\n    );\n    if (null === workInProgressRoot) throw Error(formatProdErrorMessage(349));\n    isHydrating$jscomp$0 ||\n      0 !== (renderLanes & 60) ||\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$1.updateQueue;\n  null === getSnapshot\n    ? ((getSnapshot = createFunctionComponentUpdateQueue()),\n      (currentlyRenderingFiber$1.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      ReactSharedInternals.T = prevTransition;\n    }\n  } else\n    try {\n      (prevTransition = action(prevState, payload)),\n        handleActionReturnValue(actionQueue, node, prevTransition);\n    } catch (error$60) {\n      onActionError(actionQueue, node, error$60);\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$1;\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$1,\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$1,\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$1,\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  currentStateHook =\n    \"object\" === typeof currentStateHook &&\n    null !== currentStateHook &&\n    \"function\" === typeof currentStateHook.then\n      ? useThenable(currentStateHook)\n      : currentStateHook;\n  var actionQueueHook = updateWorkInProgressHook(),\n    actionQueue = actionQueueHook.queue,\n    dispatch = actionQueue.dispatch;\n  action !== actionQueueHook.memoizedState &&\n    ((currentlyRenderingFiber$1.flags |= 2048),\n    pushEffect(\n      9,\n      actionStateActionEffect.bind(null, actionQueue, action),\n      { destroy: void 0 },\n      null\n    ));\n  return [currentStateHook, 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 pushEffect(tag, create, inst, deps) {\n  tag = { tag: tag, create: create, inst: inst, deps: deps, next: null };\n  create = currentlyRenderingFiber$1.updateQueue;\n  null === create &&\n    ((create = createFunctionComponentUpdateQueue()),\n    (currentlyRenderingFiber$1.updateQueue = create));\n  inst = create.lastEffect;\n  null === inst\n    ? (create.lastEffect = tag.next = tag)\n    : ((deps = inst.next),\n      (inst.next = tag),\n      (tag.next = deps),\n      (create.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$1.flags |= fiberFlags;\n  hook.memoizedState = pushEffect(\n    1 | hookFlags,\n    create,\n    { destroy: void 0 },\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 = pushEffect(hookFlags, create, inst, deps))\n    : ((currentlyRenderingFiber$1.flags |= fiberFlags),\n      (hook.memoizedState = pushEffect(1 | hookFlags, create, inst, deps)));\n}\nfunction mountEffect(create, deps) {\n  mountEffectImpl(8390656, 8, create, deps);\n}\nfunction updateEffect(create, deps) {\n  updateEffectImpl(2048, 8, create, deps);\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 (void 0 === initialValue || 0 !== (renderLanes & 1073741824))\n    return (hook.memoizedState = value);\n  hook.memoizedState = initialValue;\n  hook = requestDeferredLane();\n  currentlyRenderingFiber$1.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 (0 === (renderLanes & 42))\n    return (didReceiveUpdate = !0), (hook.memoizedState = value);\n  hook = requestDeferredLane();\n  currentlyRenderingFiber$1.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      (ReactSharedInternals.T = prevTransition);\n  }\n}\nfunction noop$2() {}\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$2\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 resetStateQueue = ensureFormComponentIsStateful(formFiber).next.queue;\n  dispatchSetStateInternal(formFiber, resetStateQueue, {}, requestUpdateLane());\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$63 = enqueueUpdate(provider, fiber, lane);\n        null !== root$63 &&\n          (scheduleUpdateOnFiber(root$63, provider, lane),\n          entangleTransitions(root$63, 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    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    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    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$1 ||\n    (null !== alternate && alternate === currentlyRenderingFiber$1)\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 & 4194176)) {\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};\nContextOnlyDispatcher.useCacheRefresh = throwInvalidHookError;\nContextOnlyDispatcher.useMemoCache = throwInvalidHookError;\nContextOnlyDispatcher.useHostTransitionStatus = throwInvalidHookError;\nContextOnlyDispatcher.useFormState = throwInvalidHookError;\nContextOnlyDispatcher.useActionState = throwInvalidHookError;\nContextOnlyDispatcher.useOptimistic = 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$1,\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$1, 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$1,\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$1,\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) throw Error(formatProdErrorMessage(349));\n      0 !== (workInProgressRootRenderLanes & 60) ||\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    pushEffect(\n      9,\n      updateStoreInstance.bind(\n        null,\n        fiber,\n        inst,\n        getServerSnapshot,\n        getSnapshot\n      ),\n      { destroy: void 0 },\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  useCacheRefresh: function () {\n    return (mountWorkInProgressHook().memoizedState = refreshCache.bind(\n      null,\n      currentlyRenderingFiber$1\n    ));\n  }\n};\nHooksDispatcherOnMount.useMemoCache = useMemoCache;\nHooksDispatcherOnMount.useHostTransitionStatus = useHostTransitionStatus;\nHooksDispatcherOnMount.useFormState = mountActionState;\nHooksDispatcherOnMount.useActionState = mountActionState;\nHooksDispatcherOnMount.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$1,\n    !0,\n    queue\n  );\n  queue.dispatch = hook;\n  return [passthrough, hook];\n};\nvar 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};\nHooksDispatcherOnUpdate.useCacheRefresh = updateRefresh;\nHooksDispatcherOnUpdate.useMemoCache = useMemoCache;\nHooksDispatcherOnUpdate.useHostTransitionStatus = useHostTransitionStatus;\nHooksDispatcherOnUpdate.useFormState = updateActionState;\nHooksDispatcherOnUpdate.useActionState = updateActionState;\nHooksDispatcherOnUpdate.useOptimistic = function (passthrough, reducer) {\n  var hook = updateWorkInProgressHook();\n  return updateOptimisticImpl(hook, currentHook, passthrough, reducer);\n};\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};\nHooksDispatcherOnRerender.useCacheRefresh = updateRefresh;\nHooksDispatcherOnRerender.useMemoCache = useMemoCache;\nHooksDispatcherOnRerender.useHostTransitionStatus = useHostTransitionStatus;\nHooksDispatcherOnRerender.useFormState = rerenderActionState;\nHooksDispatcherOnRerender.useActionState = rerenderActionState;\nHooksDispatcherOnRerender.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};\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  isMounted: function (component) {\n    return (component = component._reactInternals)\n      ? getNearestMountedFiber(component) === component\n      : !1;\n  },\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$67 in Component)\n      void 0 === newProps[propName$67] &&\n        (newProps[propName$67] = Component[propName$67]);\n  }\n  return newProps;\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      };\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$68) {\n    setTimeout(function () {\n      throw e$68;\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$69) {\n    setTimeout(function () {\n      throw e$69;\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 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(current, workInProgress, renderLanes) {\n  var nextProps = workInProgress.pendingProps,\n    nextChildren = nextProps.children,\n    nextIsDetached = 0 !== (workInProgress.stateNode._pendingVisibility & 2),\n    prevState = null !== current ? current.memoizedState : null;\n  markRef(current, workInProgress);\n  if (\"hidden\" === nextProps.mode || nextIsDetached) {\n    if (0 !== (workInProgress.flags & 128)) {\n      nextProps =\n        null !== prevState ? prevState.baseLanes | renderLanes : renderLanes;\n      if (null !== current) {\n        nextChildren = workInProgress.child = current.child;\n        for (nextIsDetached = 0; null !== nextChildren; )\n          (nextIsDetached =\n            nextIsDetached | nextChildren.lanes | nextChildren.childLanes),\n            (nextChildren = nextChildren.sibling);\n        workInProgress.childLanes = nextIsDetached & ~nextProps;\n      } else (workInProgress.childLanes = 0), (workInProgress.child = null);\n      return deferHiddenOffscreenComponent(\n        current,\n        workInProgress,\n        nextProps,\n        renderLanes\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        (workInProgress.lanes = workInProgress.childLanes = 536870912),\n        deferHiddenOffscreenComponent(\n          current,\n          workInProgress,\n          null !== prevState ? prevState.baseLanes | renderLanes : renderLanes,\n          renderLanes\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 deferHiddenOffscreenComponent(\n  current,\n  workInProgress,\n  nextBaseLanes,\n  renderLanes\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  return null;\n}\nfunction markRef(current, workInProgress) {\n  var ref = workInProgress.ref;\n  if (null === ref)\n    null !== current &&\n      null !== current.ref &&\n      (workInProgress.flags |= 2097664);\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 |= 2097664;\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 = { dehydrated: null, treeContext: null, retryLane: 0 };\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      if (isHydrating) {\n        var nextInstance = nextHydratableInstance,\n          JSCompiler_temp$jscomp$0;\n        if ((JSCompiler_temp$jscomp$0 = nextInstance)) {\n          c: {\n            JSCompiler_temp$jscomp$0 = nextInstance;\n            for (\n              nextInstance = rootOrSingletonContext;\n              8 !== JSCompiler_temp$jscomp$0.nodeType;\n\n            ) {\n              if (!nextInstance) {\n                nextInstance = null;\n                break c;\n              }\n              JSCompiler_temp$jscomp$0 = getNextHydratable(\n                JSCompiler_temp$jscomp$0.nextSibling\n              );\n              if (null === JSCompiler_temp$jscomp$0) {\n                nextInstance = null;\n                break c;\n              }\n            }\n            nextInstance = JSCompiler_temp$jscomp$0;\n          }\n          null !== nextInstance\n            ? ((workInProgress.memoizedState = {\n                dehydrated: nextInstance,\n                treeContext:\n                  null !== treeContextProvider\n                    ? { id: treeContextId, overflow: treeContextOverflow }\n                    : null,\n                retryLane: 536870912\n              }),\n              (JSCompiler_temp$jscomp$0 = createFiberImplClass(\n                18,\n                null,\n                null,\n                0\n              )),\n              (JSCompiler_temp$jscomp$0.stateNode = nextInstance),\n              (JSCompiler_temp$jscomp$0.return = workInProgress),\n              (workInProgress.child = JSCompiler_temp$jscomp$0),\n              (hydrationParentFiber = workInProgress),\n              (nextHydratableInstance = null),\n              (JSCompiler_temp$jscomp$0 = !0))\n            : (JSCompiler_temp$jscomp$0 = !1);\n        }\n        JSCompiler_temp$jscomp$0 || throwOnHydrationMismatch(workInProgress);\n      }\n      nextInstance = workInProgress.memoizedState;\n      if (\n        null !== nextInstance &&\n        ((nextInstance = nextInstance.dehydrated), null !== nextInstance)\n      )\n        return (\n          \"$!\" === nextInstance.data\n            ? (workInProgress.lanes = 16)\n            : (workInProgress.lanes = 536870912),\n          null\n        );\n      popSuspenseHandler(workInProgress);\n    }\n    nextInstance = nextProps.children;\n    nextProps = nextProps.fallback;\n    if (showFallback)\n      return (\n        reuseSuspenseHandlerOnStack(workInProgress),\n        (showFallback = workInProgress.mode),\n        (nextInstance = mountWorkInProgressOffscreenFiber(\n          { mode: \"hidden\", children: nextInstance },\n          showFallback\n        )),\n        (nextProps = createFiberFromFragment(\n          nextProps,\n          showFallback,\n          renderLanes,\n          null\n        )),\n        (nextInstance.return = workInProgress),\n        (nextProps.return = workInProgress),\n        (nextInstance.sibling = nextProps),\n        (workInProgress.child = nextInstance),\n        (showFallback = workInProgress.child),\n        (showFallback.memoizedState = mountSuspenseOffscreenState(renderLanes)),\n        (showFallback.childLanes = getRemainingWorkInPrimaryTree(\n          current,\n          JSCompiler_temp,\n          renderLanes\n        )),\n        (workInProgress.memoizedState = SUSPENDED_MARKER),\n        nextProps\n      );\n    pushPrimaryTreeSuspenseHandler(workInProgress);\n    return mountSuspensePrimaryChildren(workInProgress, nextInstance);\n  }\n  JSCompiler_temp$jscomp$0 = current.memoizedState;\n  if (\n    null !== JSCompiler_temp$jscomp$0 &&\n    ((nextInstance = JSCompiler_temp$jscomp$0.dehydrated),\n    null !== nextInstance)\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            (showFallback = nextProps.fallback),\n            (nextInstance = workInProgress.mode),\n            (nextProps = mountWorkInProgressOffscreenFiber(\n              { mode: \"visible\", children: nextProps.children },\n              nextInstance\n            )),\n            (showFallback = createFiberFromFragment(\n              showFallback,\n              nextInstance,\n              renderLanes,\n              null\n            )),\n            (showFallback.flags |= 2),\n            (nextProps.return = workInProgress),\n            (showFallback.return = workInProgress),\n            (nextProps.sibling = showFallback),\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 = showFallback));\n    else if (\n      (pushPrimaryTreeSuspenseHandler(workInProgress),\n      \"$!\" === nextInstance.data)\n    ) {\n      JSCompiler_temp =\n        nextInstance.nextSibling && nextInstance.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 (null !== JSCompiler_temp) {\n        nextProps = renderLanes & -renderLanes;\n        if (0 !== (nextProps & 42)) nextProps = 1;\n        else\n          switch (nextProps) {\n            case 2:\n              nextProps = 1;\n              break;\n            case 8:\n              nextProps = 4;\n              break;\n            case 32:\n              nextProps = 16;\n              break;\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            case 4194304:\n            case 8388608:\n            case 16777216:\n            case 33554432:\n              nextProps = 64;\n              break;\n            case 268435456:\n              nextProps = 134217728;\n              break;\n            default:\n              nextProps = 0;\n          }\n        nextProps =\n          0 !== (nextProps & (JSCompiler_temp.suspendedLanes | renderLanes))\n            ? 0\n            : nextProps;\n        if (0 !== nextProps && nextProps !== JSCompiler_temp$jscomp$0.retryLane)\n          throw (\n            ((JSCompiler_temp$jscomp$0.retryLane = nextProps),\n            enqueueConcurrentRenderForLane(current, nextProps),\n            scheduleUpdateOnFiber(JSCompiler_temp, current, nextProps),\n            SelectiveHydrationException)\n          );\n      }\n      \"$?\" === nextInstance.data || renderDidSuspendDelayIfPossible();\n      workInProgress = retrySuspenseComponentWithoutHydrating(\n        current,\n        workInProgress,\n        renderLanes\n      );\n    } else\n      \"$?\" === nextInstance.data\n        ? ((workInProgress.flags |= 128),\n          (workInProgress.child = current.child),\n          (workInProgress = retryDehydratedSuspenseBoundary.bind(\n            null,\n            current\n          )),\n          (nextInstance._reactRetry = workInProgress),\n          (workInProgress = null))\n        : ((current = JSCompiler_temp$jscomp$0.treeContext),\n          (nextHydratableInstance = getNextHydratable(\n            nextInstance.nextSibling\n          )),\n          (hydrationParentFiber = workInProgress),\n          (isHydrating = !0),\n          (hydrationErrors = null),\n          (rootOrSingletonContext = !1),\n          null !== current &&\n            ((idStack[idStackIndex++] = treeContextId),\n            (idStack[idStackIndex++] = treeContextOverflow),\n            (idStack[idStackIndex++] = treeContextProvider),\n            (treeContextId = current.id),\n            (treeContextOverflow = current.overflow),\n            (treeContextProvider = workInProgress)),\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      (showFallback = nextProps.fallback),\n      (nextInstance = workInProgress.mode),\n      (JSCompiler_temp$jscomp$0 = current.child),\n      (digest = JSCompiler_temp$jscomp$0.sibling),\n      (nextProps = createWorkInProgress(JSCompiler_temp$jscomp$0, {\n        mode: \"hidden\",\n        children: nextProps.children\n      })),\n      (nextProps.subtreeFlags =\n        JSCompiler_temp$jscomp$0.subtreeFlags & 31457280),\n      null !== digest\n        ? (showFallback = createWorkInProgress(digest, showFallback))\n        : ((showFallback = createFiberFromFragment(\n            showFallback,\n            nextInstance,\n            renderLanes,\n            null\n          )),\n          (showFallback.flags |= 2)),\n      (showFallback.return = workInProgress),\n      (nextProps.return = workInProgress),\n      (nextProps.sibling = showFallback),\n      (workInProgress.child = nextProps),\n      (nextProps = showFallback),\n      (showFallback = workInProgress.child),\n      (nextInstance = current.child.memoizedState),\n      null === nextInstance\n        ? (nextInstance = mountSuspenseOffscreenState(renderLanes))\n        : ((JSCompiler_temp$jscomp$0 = nextInstance.cachePool),\n          null !== JSCompiler_temp$jscomp$0\n            ? ((digest = CacheContext._currentValue),\n              (JSCompiler_temp$jscomp$0 =\n                JSCompiler_temp$jscomp$0.parent !== digest\n                  ? { parent: digest, pool: digest }\n                  : JSCompiler_temp$jscomp$0))\n            : (JSCompiler_temp$jscomp$0 = getSuspendedCache()),\n          (nextInstance = {\n            baseLanes: nextInstance.baseLanes | renderLanes,\n            cachePool: JSCompiler_temp$jscomp$0\n          })),\n      (showFallback.memoizedState = nextInstance),\n      (showFallback.childLanes = getRemainingWorkInPrimaryTree(\n        current,\n        JSCompiler_temp,\n        renderLanes\n      )),\n      (workInProgress.memoizedState = SUSPENDED_MARKER),\n      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  return createFiberFromOffscreen(offscreenProps, mode, 0, null);\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) {\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      })\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}\nfunction updateSuspenseListComponent(current, workInProgress, renderLanes) {\n  var nextProps = workInProgress.pendingProps,\n    revealOrder = nextProps.revealOrder,\n    tailMode = nextProps.tail;\n  reconcileChildren(current, workInProgress, nextProps.children, renderLanes);\n  nextProps = suspenseStackCursor.current;\n  if (0 !== (nextProps & 2))\n    (nextProps = (nextProps & 1) | 2), (workInProgress.flags |= 128);\n  else {\n    if (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    nextProps &= 1;\n  }\n  push(suspenseStackCursor, nextProps);\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      );\n      break;\n    case \"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      );\n      break;\n    case \"together\":\n      initSuspenseListRenderState(workInProgress, !1, null, null, void 0);\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 13:\n      var state = workInProgress.memoizedState;\n      if (null !== state) {\n        if (null !== state.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 = 0 !== (renderLanes & workInProgress.childLanes);\n      state ||\n        (propagateParentContextChanges(\n          current,\n          workInProgress,\n          renderLanes,\n          !1\n        ),\n        (state = 0 !== (renderLanes & workInProgress.childLanes)));\n      if (didSuspendBefore) {\n        if (state)\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) break;\n      else return null;\n    case 22:\n    case 23:\n      return (\n        (workInProgress.lanes = 0),\n        updateOffscreenComponent(current, workInProgress, renderLanes)\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        current = workInProgress.pendingProps;\n        var lazyComponent = workInProgress.elementType,\n          init = lazyComponent._init;\n        lazyComponent = init(lazyComponent._payload);\n        workInProgress.type = lazyComponent;\n        if (\"function\" === typeof lazyComponent)\n          shouldConstruct(lazyComponent)\n            ? ((current = resolveClassComponentProps(lazyComponent, current)),\n              (workInProgress.tag = 1),\n              (workInProgress = updateClassComponent(\n                null,\n                workInProgress,\n                lazyComponent,\n                current,\n                renderLanes\n              )))\n            : ((workInProgress.tag = 0),\n              (workInProgress = updateFunctionComponent(\n                null,\n                workInProgress,\n                lazyComponent,\n                current,\n                renderLanes\n              )));\n        else {\n          if (void 0 !== lazyComponent && null !== lazyComponent)\n            if (\n              ((init = lazyComponent.$$typeof), init === REACT_FORWARD_REF_TYPE)\n            ) {\n              workInProgress.tag = 11;\n              workInProgress = updateForwardRef(\n                null,\n                workInProgress,\n                lazyComponent,\n                current,\n                renderLanes\n              );\n              break a;\n            } else if (init === REACT_MEMO_TYPE) {\n              workInProgress.tag = 14;\n              workInProgress = updateMemoComponent(\n                null,\n                workInProgress,\n                lazyComponent,\n                current,\n                renderLanes\n              );\n              break a;\n            }\n          workInProgress =\n            getComponentNameFromType(lazyComponent) || lazyComponent;\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        (lazyComponent = workInProgress.type),\n        (init = resolveClassComponentProps(\n          lazyComponent,\n          workInProgress.pendingProps\n        )),\n        updateClassComponent(\n          current,\n          workInProgress,\n          lazyComponent,\n          init,\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        var nextProps = workInProgress.pendingProps;\n        init = workInProgress.memoizedState;\n        lazyComponent = init.element;\n        cloneUpdateQueue(current, workInProgress);\n        processUpdateQueue(workInProgress, nextProps, null, renderLanes);\n        var nextState = workInProgress.memoizedState;\n        nextProps = nextState.cache;\n        pushProvider(workInProgress, CacheContext, nextProps);\n        nextProps !== init.cache &&\n          propagateContextChanges(\n            workInProgress,\n            [CacheContext],\n            renderLanes,\n            !0\n          );\n        suspendIfUpdateReadFromEntangledAsyncAction();\n        nextProps = nextState.element;\n        if (init.isDehydrated)\n          if (\n            ((init = {\n              element: nextProps,\n              isDehydrated: !1,\n              cache: nextState.cache\n            }),\n            (workInProgress.updateQueue.baseState = init),\n            (workInProgress.memoizedState = init),\n            workInProgress.flags & 256)\n          ) {\n            workInProgress = mountHostRootWithoutHydrating(\n              current,\n              workInProgress,\n              nextProps,\n              renderLanes\n            );\n            break a;\n          } else if (nextProps !== lazyComponent) {\n            lazyComponent = createCapturedValueAtFiber(\n              Error(formatProdErrorMessage(424)),\n              workInProgress\n            );\n            queueHydrationError(lazyComponent);\n            workInProgress = mountHostRootWithoutHydrating(\n              current,\n              workInProgress,\n              nextProps,\n              renderLanes\n            );\n            break a;\n          } else\n            for (\n              nextHydratableInstance = getNextHydratable(\n                workInProgress.stateNode.containerInfo.firstChild\n              ),\n                hydrationParentFiber = workInProgress,\n                isHydrating = !0,\n                hydrationErrors = null,\n                rootOrSingletonContext = !0,\n                renderLanes = mountChildFibers(\n                  workInProgress,\n                  null,\n                  nextProps,\n                  renderLanes\n                ),\n                workInProgress.child = renderLanes;\n              renderLanes;\n\n            )\n              (renderLanes.flags = (renderLanes.flags & -3) | 4096),\n                (renderLanes = renderLanes.sibling);\n        else {\n          resetHydrationState();\n          if (nextProps === lazyComponent) {\n            workInProgress = bailoutOnAlreadyFinishedWork(\n              current,\n              workInProgress,\n              renderLanes\n            );\n            break a;\n          }\n          reconcileChildren(current, workInProgress, nextProps, 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              (lazyComponent = getOwnerDocumentFromRootContainer(\n                rootInstanceStackCursor.current\n              ).createElement(renderLanes)),\n              (lazyComponent[internalInstanceKey] = workInProgress),\n              (lazyComponent[internalPropsKey] = current),\n              setInitialProperties(lazyComponent, renderLanes, current),\n              markNodeAsHoistable(lazyComponent),\n              (workInProgress.stateNode = lazyComponent))\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          ((lazyComponent = workInProgress.stateNode =\n            resolveSingletonInstance(\n              workInProgress.type,\n              workInProgress.pendingProps,\n              rootInstanceStackCursor.current\n            )),\n          (hydrationParentFiber = workInProgress),\n          (rootOrSingletonContext = !0),\n          (nextHydratableInstance = getNextHydratable(\n            lazyComponent.firstChild\n          ))),\n        (lazyComponent = workInProgress.pendingProps.children),\n        null !== current || isHydrating\n          ? reconcileChildren(\n              current,\n              workInProgress,\n              lazyComponent,\n              renderLanes\n            )\n          : (workInProgress.child = reconcileChildFibers(\n              workInProgress,\n              null,\n              lazyComponent,\n              renderLanes\n            )),\n        markRef(current, workInProgress),\n        workInProgress.child\n      );\n    case 5:\n      if (null === current && isHydrating) {\n        if ((init = lazyComponent = nextHydratableInstance))\n          (lazyComponent = canHydrateInstance(\n            lazyComponent,\n            workInProgress.type,\n            workInProgress.pendingProps,\n            rootOrSingletonContext\n          )),\n            null !== lazyComponent\n              ? ((workInProgress.stateNode = lazyComponent),\n                (hydrationParentFiber = workInProgress),\n                (nextHydratableInstance = getNextHydratable(\n                  lazyComponent.firstChild\n                )),\n                (rootOrSingletonContext = !1),\n                (init = !0))\n              : (init = !1);\n        init || throwOnHydrationMismatch(workInProgress);\n      }\n      pushHostContext(workInProgress);\n      init = workInProgress.type;\n      nextProps = workInProgress.pendingProps;\n      nextState = null !== current ? current.memoizedProps : null;\n      lazyComponent = nextProps.children;\n      shouldSetTextContent(init, nextProps)\n        ? (lazyComponent = null)\n        : null !== nextState &&\n          shouldSetTextContent(init, nextState) &&\n          (workInProgress.flags |= 32);\n      null !== workInProgress.memoizedState &&\n        ((init = renderWithHooks(\n          current,\n          workInProgress,\n          TransitionAwareHostComponent,\n          null,\n          null,\n          renderLanes\n        )),\n        (HostTransitionContext._currentValue = init));\n      markRef(current, workInProgress);\n      reconcileChildren(current, workInProgress, lazyComponent, 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        (lazyComponent = workInProgress.pendingProps),\n        null === current\n          ? (workInProgress.child = reconcileChildFibers(\n              workInProgress,\n              null,\n              lazyComponent,\n              renderLanes\n            ))\n          : reconcileChildren(\n              current,\n              workInProgress,\n              lazyComponent,\n              renderLanes\n            ),\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        (lazyComponent = workInProgress.pendingProps),\n        pushProvider(workInProgress, workInProgress.type, lazyComponent.value),\n        reconcileChildren(\n          current,\n          workInProgress,\n          lazyComponent.children,\n          renderLanes\n        ),\n        workInProgress.child\n      );\n    case 9:\n      return (\n        (init = workInProgress.type._context),\n        (lazyComponent = workInProgress.pendingProps.children),\n        prepareToReadContext(workInProgress),\n        (init = readContext(init)),\n        (lazyComponent = lazyComponent(init)),\n        (workInProgress.flags |= 1),\n        reconcileChildren(current, workInProgress, lazyComponent, 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 22:\n      return updateOffscreenComponent(current, workInProgress, renderLanes);\n    case 24:\n      return (\n        prepareToReadContext(workInProgress),\n        (lazyComponent = readContext(CacheContext)),\n        null === current\n          ? ((init = peekCacheFromPool()),\n            null === init &&\n              ((init = workInProgressRoot),\n              (nextProps = createCache()),\n              (init.pooledCache = nextProps),\n              nextProps.refCount++,\n              null !== nextProps && (init.pooledCacheLanes |= renderLanes),\n              (init = nextProps)),\n            (workInProgress.memoizedState = {\n              parent: lazyComponent,\n              cache: init\n            }),\n            initializeUpdateQueue(workInProgress),\n            pushProvider(workInProgress, CacheContext, init))\n          : (0 !== (current.lanes & renderLanes) &&\n              (cloneUpdateQueue(current, workInProgress),\n              processUpdateQueue(workInProgress, null, null, renderLanes),\n              suspendIfUpdateReadFromEntangledAsyncAction()),\n            (init = current.memoizedState),\n            (nextProps = workInProgress.memoizedState),\n            init.parent !== lazyComponent\n              ? ((init = { parent: lazyComponent, cache: lazyComponent }),\n                (workInProgress.memoizedState = init),\n                0 === workInProgress.lanes &&\n                  (workInProgress.memoizedState =\n                    workInProgress.updateQueue.baseState =\n                      init),\n                pushProvider(workInProgress, CacheContext, lazyComponent))\n              : ((lazyComponent = nextProps.cache),\n                pushProvider(workInProgress, CacheContext, lazyComponent),\n                lazyComponent !== init.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}\nvar valueCursor = createCursor(null),\n  currentlyRenderingFiber = 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 = workInProgress;\n  lastContextDependency = null;\n  workInProgress = workInProgress.dependencies;\n  null !== workInProgress && (workInProgress.firstContext = null);\n}\nfunction readContext(context) {\n  return readContextForConsumer(currentlyRenderingFiber, context);\n}\nfunction readContextDuringReconciliation(consumer, context) {\n  null === currentlyRenderingFiber && 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 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 & 4194176))) {\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}\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            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      var instance = current.stateNode;\n      switch (current.tag) {\n        case 26:\n        case 27:\n        case 5:\n          var instanceToUse = instance;\n          break;\n        default:\n          instanceToUse = instance;\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$112) {\n        captureCommitPhaseError(current, nearestMountedAncestor, error$112);\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 ||\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 &&\n      6 !== fiber.tag &&\n      27 !== fiber.tag &&\n      18 !== fiber.tag;\n\n    ) {\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        ? 8 === parent.nodeType\n          ? parent.parentNode.insertBefore(node, before)\n          : parent.insertBefore(node, before)\n        : (8 === parent.nodeType\n            ? ((before = parent.parentNode), before.insertBefore(node, parent))\n            : ((before = parent), 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 (4 !== tag && 27 !== tag && ((node = node.child), null !== node))\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 (4 !== tag && 27 !== tag && ((node = node.child), null !== node))\n    for (\n      insertOrAppendPlacementNode(node, before, parent), node = node.sibling;\n      null !== node;\n\n    )\n      insertOrAppendPlacementNode(node, before, parent), (node = node.sibling);\n}\nvar offscreenSubtreeIsHidden = !1,\n  offscreenSubtreeWasHidden = !1,\n  needsFormReset = !1,\n  PossiblyWeakSet = \"function\" === typeof WeakSet ? WeakSet : Set,\n  nextEffect = null,\n  shouldFireAfterActiveInstanceBlur = !1;\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            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                  JSCompiler_temp.elementType === JSCompiler_temp.type\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  resolvedPrevProps = shouldFireAfterActiveInstanceBlur;\n  shouldFireAfterActiveInstanceBlur = !1;\n  return resolvedPrevProps;\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$111) {\n            captureCommitPhaseError(\n              finishedWork,\n              finishedWork.return,\n              error$111\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 (flags & 64 && ((flags = finishedWork.updateQueue), null !== flags)) {\n        finishedRoot = null;\n        if (null !== finishedWork.child)\n          switch (finishedWork.child.tag) {\n            case 27:\n            case 5:\n              finishedRoot = finishedWork.child.stateNode;\n              break;\n            case 1:\n              finishedRoot = finishedWork.child.stateNode;\n          }\n        try {\n          commitCallbacks(flags, finishedRoot);\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      }\n      break;\n    case 26:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      flags & 512 && safelyAttachRef(finishedWork, finishedWork.return);\n      break;\n    case 27:\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 13:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      flags & 4 && commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);\n      break;\n    case 22:\n      prevProps =\n        null !== finishedWork.memoizedState || offscreenSubtreeIsHidden;\n      if (!prevProps) {\n        current =\n          (null !== current && null !== current.memoizedState) ||\n          offscreenSubtreeWasHidden;\n        var prevOffscreenSubtreeIsHidden = offscreenSubtreeIsHidden,\n          prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;\n        offscreenSubtreeIsHidden = prevProps;\n        (offscreenSubtreeWasHidden = current) && !prevOffscreenSubtreeWasHidden\n          ? recursivelyTraverseReappearLayoutEffects(\n              finishedRoot,\n              finishedWork,\n              0 !== (finishedWork.subtreeFlags & 8772)\n            )\n          : recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n        offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden;\n        offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;\n      }\n      flags & 512 &&\n        (\"manual\" === finishedWork.memoizedProps.mode\n          ? safelyAttachRef(finishedWork, finishedWork.return)\n          : safelyDetachRef(finishedWork, finishedWork.return));\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      hostParent = deletedFiber.stateNode;\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      deletedFiber = deletedFiber.stateNode;\n      for (\n        nearestMountedAncestor = deletedFiber.attributes;\n        nearestMountedAncestor.length;\n\n      )\n        deletedFiber.removeAttributeNode(nearestMountedAncestor[0]);\n      detachDeletedInstance(deletedFiber);\n      hostParent = prevHostParent;\n      hostParentIsContainer = prevHostParentIsContainer;\n      break;\n    case 5:\n      offscreenSubtreeWasHidden ||\n        safelyDetachRef(deletedFiber, nearestMountedAncestor);\n    case 6:\n      prevHostParentIsContainer = hostParent;\n      var prevHostParentIsContainer$119 = hostParentIsContainer;\n      hostParent = null;\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      hostParent = prevHostParentIsContainer;\n      hostParentIsContainer = prevHostParentIsContainer$119;\n      if (null !== hostParent)\n        if (hostParentIsContainer)\n          try {\n            (finishedRoot = hostParent),\n              (prevHostParent = deletedFiber.stateNode),\n              8 === finishedRoot.nodeType\n                ? finishedRoot.parentNode.removeChild(prevHostParent)\n                : finishedRoot.removeChild(prevHostParent);\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          ? ((nearestMountedAncestor = hostParent),\n            (deletedFiber = deletedFiber.stateNode),\n            8 === nearestMountedAncestor.nodeType\n              ? clearSuspenseBoundary(\n                  nearestMountedAncestor.parentNode,\n                  deletedFiber\n                )\n              : 1 === nearestMountedAncestor.nodeType &&\n                clearSuspenseBoundary(nearestMountedAncestor, deletedFiber),\n            retryIfBlockedOn(nearestMountedAncestor))\n          : clearSuspenseBoundary(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      offscreenSubtreeWasHidden ||\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        safelyDetachRef(deletedFiber, nearestMountedAncestor);\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 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 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    var retry = resolveRetryWakeable.bind(null, finishedWork, wakeable);\n    retryCache.has(wakeable) ||\n      (retryCache.add(wakeable), wakeable.then(retry, retry));\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          case 5:\n            hostParent = parent.stateNode;\n            hostParentIsContainer = !1;\n            break a;\n          case 3:\n            hostParent = parent.stateNode.containerInfo;\n            hostParentIsContainer = !0;\n            break a;\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 & 13878)\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 ? null : 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      if (flags & 4 && null === finishedWork.alternate) {\n        hoistableRoot = finishedWork.stateNode;\n        currentResource = finishedWork.memoizedProps;\n        try {\n          for (var node = hoistableRoot.firstChild; node; ) {\n            var nextNode = node.nextSibling,\n              nodeName = node.nodeName;\n            node[internalHoistableMarker] ||\n              \"HEAD\" === nodeName ||\n              \"BODY\" === nodeName ||\n              \"SCRIPT\" === nodeName ||\n              \"STYLE\" === nodeName ||\n              (\"LINK\" === nodeName &&\n                \"stylesheet\" === node.rel.toLowerCase()) ||\n              hoistableRoot.removeChild(node);\n            node = nextNode;\n          }\n          for (\n            var type = finishedWork.type, attributes = hoistableRoot.attributes;\n            attributes.length;\n\n          )\n            hoistableRoot.removeAttributeNode(attributes[0]);\n          setInitialProperties(hoistableRoot, type, currentResource);\n          hoistableRoot[internalInstanceKey] = finishedWork;\n          hoistableRoot[internalPropsKey] = currentResource;\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      }\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 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      flags & 512 &&\n        (offscreenSubtreeWasHidden ||\n          null === current ||\n          safelyDetachRef(current, current.return));\n      node = null !== finishedWork.memoizedState;\n      nextNode = null !== current && null !== current.memoizedState;\n      nodeName = offscreenSubtreeIsHidden;\n      type = offscreenSubtreeWasHidden;\n      offscreenSubtreeIsHidden = nodeName || node;\n      offscreenSubtreeWasHidden = type || nextNode;\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      offscreenSubtreeWasHidden = type;\n      offscreenSubtreeIsHidden = nodeName;\n      commitReconciliationEffects(finishedWork);\n      root = finishedWork.stateNode;\n      root._current = finishedWork;\n      root._visibility &= -3;\n      root._visibility |= root._pendingVisibility & 2;\n      if (\n        flags & 8192 &&\n        ((root._visibility = node\n          ? root._visibility & -2\n          : root._visibility | 1),\n        node &&\n          ((root = offscreenSubtreeIsHidden || offscreenSubtreeWasHidden),\n          null === current ||\n            nextNode ||\n            root ||\n            recursivelyTraverseDisappearLayoutEffects(finishedWork)),\n        null === finishedWork.memoizedProps ||\n          \"manual\" !== finishedWork.memoizedProps.mode)\n      )\n        a: for (current = null, root = finishedWork; ; ) {\n          if (5 === root.tag || 26 === root.tag || 27 === root.tag) {\n            if (null === current) {\n              nextNode = current = root;\n              try {\n                if (((hoistableRoot = nextNode.stateNode), node))\n                  (currentResource = hoistableRoot.style),\n                    \"function\" === typeof currentResource.setProperty\n                      ? currentResource.setProperty(\n                          \"display\",\n                          \"none\",\n                          \"important\"\n                        )\n                      : (currentResource.display = \"none\");\n                else {\n                  maybeNodes = nextNode.stateNode;\n                  i = nextNode.memoizedProps.style;\n                  var display =\n                    void 0 !== i && null !== i && i.hasOwnProperty(\"display\")\n                      ? i.display\n                      : null;\n                  maybeNodes.style.display =\n                    null == display || \"boolean\" === typeof display\n                      ? \"\"\n                      : (\"\" + display).trim();\n                }\n              } catch (error) {\n                captureCommitPhaseError(nextNode, nextNode.return, error);\n              }\n            }\n          } else if (6 === root.tag) {\n            if (null === current) {\n              nextNode = root;\n              try {\n                nextNode.stateNode.nodeValue = node\n                  ? \"\"\n                  : nextNode.memoizedProps;\n              } catch (error) {\n                captureCommitPhaseError(nextNode, nextNode.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 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      if (27 !== finishedWork.tag) {\n        a: {\n          for (var parent = finishedWork.return; null !== parent; ) {\n            if (isHostParent(parent)) {\n              var JSCompiler_inline_result = parent;\n              break a;\n            }\n            parent = parent.return;\n          }\n          throw Error(formatProdErrorMessage(160));\n        }\n        switch (JSCompiler_inline_result.tag) {\n          case 27:\n            var parent$jscomp$0 = JSCompiler_inline_result.stateNode,\n              before = getHostSibling(finishedWork);\n            insertOrAppendPlacementNode(finishedWork, before, parent$jscomp$0);\n            break;\n          case 5:\n            var parent$113 = JSCompiler_inline_result.stateNode;\n            JSCompiler_inline_result.flags & 32 &&\n              (setTextContent(parent$113, \"\"),\n              (JSCompiler_inline_result.flags &= -33));\n            var before$114 = getHostSibling(finishedWork);\n            insertOrAppendPlacementNode(finishedWork, before$114, parent$113);\n            break;\n          case 3:\n          case 4:\n            var parent$115 = JSCompiler_inline_result.stateNode.containerInfo,\n              before$116 = getHostSibling(finishedWork);\n            insertOrAppendPlacementNodeIntoContainer(\n              finishedWork,\n              before$116,\n              parent$115\n            );\n            break;\n          default:\n            throw Error(formatProdErrorMessage(161));\n        }\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 26:\n      case 27:\n      case 5:\n        safelyDetachRef(finishedWork, finishedWork.return);\n        recursivelyTraverseDisappearLayoutEffects(finishedWork);\n        break;\n      case 22:\n        safelyDetachRef(finishedWork, finishedWork.return);\n        null === finishedWork.memoizedState &&\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 26:\n      case 27:\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 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      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 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 23:\n      break;\n    case 22:\n      _finishedWork$memoize2 = finishedWork.stateNode;\n      null !== finishedWork.memoizedState\n        ? _finishedWork$memoize2._visibility & 4\n          ? recursivelyTraversePassiveMountEffects(\n              finishedRoot,\n              finishedWork,\n              committedLanes,\n              committedTransitions\n            )\n          : recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork)\n        : _finishedWork$memoize2._visibility & 4\n          ? recursivelyTraversePassiveMountEffects(\n              finishedRoot,\n              finishedWork,\n              committedLanes,\n              committedTransitions\n            )\n          : ((_finishedWork$memoize2._visibility |= 4),\n            recursivelyTraverseReconnectPassiveEffects(\n              finishedRoot,\n              finishedWork,\n              committedLanes,\n              committedTransitions,\n              0 !== (finishedWork.subtreeFlags & 10256)\n            ));\n      flags & 2048 &&\n        commitOffscreenPassiveMountEffects(\n          finishedWork.alternate,\n          finishedWork\n        );\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 && 0 !== (parentFiber.subtreeFlags & 10256);\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 & 4\n            ? recursivelyTraverseReconnectPassiveEffects(\n                finishedRoot,\n                finishedWork,\n                committedLanes,\n                committedTransitions,\n                includeWorkInProgressEffects\n              )\n            : recursivelyTraverseAtomicPassiveEffects(\n                finishedRoot,\n                finishedWork\n              )\n          : ((instance._visibility |= 4),\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(parentFiber) {\n  if (parentFiber.subtreeFlags & suspenseyCommitFlag)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      accumulateSuspenseyCommitOnFiber(parentFiber),\n        (parentFiber = parentFiber.sibling);\n}\nfunction accumulateSuspenseyCommitOnFiber(fiber) {\n  switch (fiber.tag) {\n    case 26:\n      recursivelyAccumulateSuspenseyCommit(fiber);\n      fiber.flags & suspenseyCommitFlag &&\n        null !== fiber.memoizedState &&\n        suspendResource(\n          currentHoistableRoot,\n          fiber.memoizedState,\n          fiber.memoizedProps\n        );\n      break;\n    case 5:\n      recursivelyAccumulateSuspenseyCommit(fiber);\n      break;\n    case 3:\n    case 4:\n      var previousHoistableRoot = currentHoistableRoot;\n      currentHoistableRoot = getHoistableRoot(fiber.stateNode.containerInfo);\n      recursivelyAccumulateSuspenseyCommit(fiber);\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(fiber),\n            (suspenseyCommitFlag = previousHoistableRoot))\n          : recursivelyAccumulateSuspenseyCommit(fiber));\n      break;\n    default:\n      recursivelyAccumulateSuspenseyCommit(fiber);\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 & 4 &&\n      (null === finishedWork.return || 13 !== finishedWork.return.tag)\n        ? ((instance._visibility &= -5),\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 & 4 &&\n          ((i._visibility &= -5),\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}\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 & 31457280;\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 &= 31457282;\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_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      case REACT_OFFSCREEN_TYPE:\n        return createFiberFromOffscreen(pendingProps, mode, lanes, key);\n      default:\n        if (\"object\" === typeof type && null !== type)\n          switch (type.$$typeof) {\n            case REACT_PROVIDER_TYPE:\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 createFiberFromOffscreen(pendingProps, mode, lanes, key) {\n  pendingProps = createFiberImplClass(22, pendingProps, key, mode);\n  pendingProps.elementType = REACT_OFFSCREEN_TYPE;\n  pendingProps.lanes = lanes;\n  var primaryChildInstance = {\n    _visibility: 1,\n    _pendingVisibility: 1,\n    _pendingMarkers: null,\n    _retryCache: null,\n    _transitions: null,\n    _current: null,\n    detach: function () {\n      var fiber = primaryChildInstance._current;\n      if (null === fiber) throw Error(formatProdErrorMessage(456));\n      if (0 === (primaryChildInstance._pendingVisibility & 2)) {\n        var root = enqueueConcurrentRenderForLane(fiber, 2);\n        null !== root &&\n          ((primaryChildInstance._pendingVisibility |= 2),\n          scheduleUpdateOnFiber(root, fiber, 2));\n      }\n    },\n    attach: function () {\n      var fiber = primaryChildInstance._current;\n      if (null === fiber) throw Error(formatProdErrorMessage(456));\n      if (0 !== (primaryChildInstance._pendingVisibility & 2)) {\n        var root = enqueueConcurrentRenderForLane(fiber, 2);\n        null !== root &&\n          ((primaryChildInstance._pendingVisibility &= -3),\n          scheduleUpdateOnFiber(root, fiber, 2));\n      }\n    }\n  };\n  pendingProps.stateNode = primaryChildInstance;\n  return pendingProps;\n}\nfunction createFiberFromText(content, mode, lanes) {\n  content = createFiberImplClass(6, content, null, mode);\n  content.lanes = lanes;\n  return content;\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}\nfunction markUpdate(workInProgress) {\n  workInProgress.flags |= 4;\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    resource = suspenseHandlerStackCursor.current;\n    if (\n      null !== resource &&\n      ((workInProgressRootRenderLanes & 4194176) ===\n      workInProgressRootRenderLanes\n        ? null !== shellBoundary\n        : ((workInProgressRootRenderLanes & 62914560) !==\n            workInProgressRootRenderLanes &&\n            0 === (workInProgressRootRenderLanes & 536870912)) ||\n          resource !== shellBoundary)\n    )\n      throw (\n        ((suspendedThenable = noopSuspenseyCommitThenable),\n        SuspenseyCommitException)\n      );\n    workInProgress.flags |= 8192;\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$131 = null; null !== lastTailNode; )\n          null !== lastTailNode.alternate && (lastTailNode$131 = lastTailNode),\n            (lastTailNode = lastTailNode.sibling);\n        null === lastTailNode$131\n          ? hasRenderedATailFallback || null === renderState.tail\n            ? (renderState.tail = null)\n            : (renderState.tail.sibling = null)\n          : (lastTailNode$131.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$132 = completedWork.child; null !== child$132; )\n      (newChildLanes |= child$132.lanes | child$132.childLanes),\n        (subtreeFlags |= child$132.subtreeFlags & 31457280),\n        (subtreeFlags |= child$132.flags & 31457280),\n        (child$132.return = completedWork),\n        (child$132 = child$132.sibling);\n  else\n    for (child$132 = completedWork.child; null !== child$132; )\n      (newChildLanes |= child$132.lanes | child$132.childLanes),\n        (subtreeFlags |= child$132.subtreeFlags),\n        (subtreeFlags |= child$132.flags),\n        (child$132.return = completedWork),\n        (child$132 = child$132.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            null !== hydrationErrors &&\n              (queueRecoverableErrors(hydrationErrors),\n              (hydrationErrors = null)));\n      bubbleProperties(workInProgress);\n      return null;\n    case 26:\n      return (\n        (renderLanes = workInProgress.memoizedState),\n        null === current\n          ? (markUpdate(workInProgress),\n            null !== renderLanes\n              ? (bubbleProperties(workInProgress),\n                preloadResourceAndSuspendIfNeeded(workInProgress, renderLanes))\n              : (bubbleProperties(workInProgress),\n                (workInProgress.flags &= -16777217)))\n          : renderLanes\n            ? renderLanes !== current.memoizedState\n              ? (markUpdate(workInProgress),\n                bubbleProperties(workInProgress),\n                preloadResourceAndSuspendIfNeeded(workInProgress, renderLanes))\n              : (bubbleProperties(workInProgress),\n                (workInProgress.flags &= -16777217))\n            : (current.memoizedProps !== newProps && markUpdate(workInProgress),\n              bubbleProperties(workInProgress),\n              (workInProgress.flags &= -16777217)),\n        null\n      );\n    case 27:\n      popHostContext(workInProgress);\n      renderLanes = rootInstanceStackCursor.current;\n      var 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      renderLanes = 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        if (popHydrationState(workInProgress))\n          prepareToHydrateHostInstance(workInProgress, current);\n        else {\n          type = getOwnerDocumentFromRootContainer(\n            rootInstanceStackCursor.current\n          );\n          switch (current) {\n            case 1:\n              current = type.createElementNS(\n                \"http://www.w3.org/2000/svg\",\n                renderLanes\n              );\n              break;\n            case 2:\n              current = type.createElementNS(\n                \"http://www.w3.org/1998/Math/MathML\",\n                renderLanes\n              );\n              break;\n            default:\n              switch (renderLanes) {\n                case \"svg\":\n                  current = type.createElementNS(\n                    \"http://www.w3.org/2000/svg\",\n                    renderLanes\n                  );\n                  break;\n                case \"math\":\n                  current = type.createElementNS(\n                    \"http://www.w3.org/1998/Math/MathML\",\n                    renderLanes\n                  );\n                  break;\n                case \"script\":\n                  current = type.createElement(\"div\");\n                  current.innerHTML = \"<script>\\x3c/script>\";\n                  current = current.removeChild(current.firstChild);\n                  break;\n                case \"select\":\n                  current =\n                    \"string\" === typeof newProps.is\n                      ? type.createElement(\"select\", { is: newProps.is })\n                      : type.createElement(\"select\");\n                  newProps.multiple\n                    ? (current.multiple = !0)\n                    : newProps.size && (current.size = newProps.size);\n                  break;\n                default:\n                  current =\n                    \"string\" === typeof newProps.is\n                      ? type.createElement(renderLanes, { is: newProps.is })\n                      : type.createElement(renderLanes);\n              }\n          }\n          current[internalInstanceKey] = workInProgress;\n          current[internalPropsKey] = newProps;\n          a: for (type = workInProgress.child; null !== type; ) {\n            if (5 === type.tag || 6 === type.tag)\n              current.appendChild(type.stateNode);\n            else if (4 !== type.tag && 27 !== type.tag && null !== type.child) {\n              type.child.return = type;\n              type = type.child;\n              continue;\n            }\n            if (type === workInProgress) break a;\n            for (; null === type.sibling; ) {\n              if (null === type.return || type.return === workInProgress)\n                break a;\n              type = type.return;\n            }\n            type.sibling.return = type.return;\n            type = type.sibling;\n          }\n          workInProgress.stateNode = current;\n          a: switch (\n            (setInitialProperties(current, renderLanes, newProps), renderLanes)\n          ) {\n            case \"button\":\n            case \"input\":\n            case \"select\":\n            case \"textarea\":\n              current = !!newProps.autoFocus;\n              break a;\n            case \"img\":\n              current = !0;\n              break a;\n            default:\n              current = !1;\n          }\n          current && markUpdate(workInProgress);\n        }\n      }\n      bubbleProperties(workInProgress);\n      workInProgress.flags &= -16777217;\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);\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 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          null !== hydrationErrors &&\n            (queueRecoverableErrors(hydrationErrors), (hydrationErrors = null)),\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      if (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        var cache$144 = null;\n        null !== newProps.memoizedState &&\n          null !== newProps.memoizedState.cachePool &&\n          (cache$144 = newProps.memoizedState.cachePool.pool);\n        cache$144 !== type && (newProps.flags |= 2048);\n      }\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      type = workInProgress.memoizedState;\n      if (null === type) return bubbleProperties(workInProgress), null;\n      newProps = 0 !== (workInProgress.flags & 128);\n      cache$144 = type.rendering;\n      if (null === cache$144)\n        if (newProps) cutOffTailIfNeeded(type, !1);\n        else {\n          if (\n            0 !== workInProgressRootExitStatus ||\n            (null !== current && 0 !== (current.flags & 128))\n          )\n            for (current = workInProgress.child; null !== current; ) {\n              cache$144 = findFirstSuspended(current);\n              if (null !== cache$144) {\n                workInProgress.flags |= 128;\n                cutOffTailIfNeeded(type, !1);\n                current = cache$144.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                return workInProgress.child;\n              }\n              current = current.sibling;\n            }\n          null !== type.tail &&\n            now() > workInProgressRootRenderTargetTime &&\n            ((workInProgress.flags |= 128),\n            (newProps = !0),\n            cutOffTailIfNeeded(type, !1),\n            (workInProgress.lanes = 4194304));\n        }\n      else {\n        if (!newProps)\n          if (((current = findFirstSuspended(cache$144)), null !== current)) {\n            if (\n              ((workInProgress.flags |= 128),\n              (newProps = !0),\n              (current = current.updateQueue),\n              (workInProgress.updateQueue = current),\n              scheduleRetryEffect(workInProgress, current),\n              cutOffTailIfNeeded(type, !0),\n              null === type.tail &&\n                \"hidden\" === type.tailMode &&\n                !cache$144.alternate &&\n                !isHydrating)\n            )\n              return bubbleProperties(workInProgress), null;\n          } else\n            2 * now() - type.renderingStartTime >\n              workInProgressRootRenderTargetTime &&\n              536870912 !== renderLanes &&\n              ((workInProgress.flags |= 128),\n              (newProps = !0),\n              cutOffTailIfNeeded(type, !1),\n              (workInProgress.lanes = 4194304));\n        type.isBackwards\n          ? ((cache$144.sibling = workInProgress.child),\n            (workInProgress.child = cache$144))\n          : ((current = type.last),\n            null !== current\n              ? (current.sibling = cache$144)\n              : (workInProgress.child = cache$144),\n            (type.last = cache$144));\n      }\n      if (null !== type.tail)\n        return (\n          (workInProgress = type.tail),\n          (type.rendering = workInProgress),\n          (type.tail = workInProgress.sibling),\n          (type.renderingStartTime = now()),\n          (workInProgress.sibling = null),\n          (current = suspenseStackCursor.current),\n          push(suspenseStackCursor, newProps ? (current & 1) | 2 : current & 1),\n          workInProgress\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  }\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 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 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}\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  },\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  workInProgressRootRenderTargetTime = Infinity,\n  workInProgressTransitions = null,\n  legacyErrorBoundariesThatAlreadyFailed = null,\n  rootDoesHavePassiveEffects = !1,\n  rootWithPendingPassiveEffects = null,\n  pendingPassiveEffectsLanes = 0,\n  pendingPassiveEffectsRemainingLanes = 0,\n  pendingPassiveTransitions = null,\n  nestedUpdateCount = 0,\n  rootWithNestedUpdates = null;\nfunction requestUpdateLane() {\n  if (0 !== (executionContext & 2) && 0 !== workInProgressRootRenderLanes)\n    return workInProgressRootRenderLanes & -workInProgressRootRenderLanes;\n  if (null !== ReactSharedInternals.T) {\n    var actionScopeLane = currentEntangledLane;\n    return 0 !== actionScopeLane ? actionScopeLane : requestTransitionLane();\n  }\n  return resolveUpdatePriority();\n}\nfunction requestDeferredLane() {\n  0 === workInProgressDeferredLane &&\n    (workInProgressDeferredLane =\n      0 === (workInProgressRootRenderLanes & 536870912) || isHydrating\n        ? claimNextTransitionLane()\n        : 536870912);\n  var suspenseHandler = suspenseHandlerStackCursor.current;\n  null !== suspenseHandler && (suspenseHandler.flags |= 32);\n  return workInProgressDeferredLane;\n}\nfunction scheduleUpdateOnFiber(root, fiber, lane) {\n  if (\n    (root === workInProgressRoot && 2 === 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 & 60) &&\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 if (6 === exitStatus)\n      markRootSuspended(\n        root$jscomp$0,\n        lanes,\n        0,\n        !workInProgressRootDidSkipSuspendedSiblings\n      );\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                queueRecoverableErrors(renderWasConcurrent);\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        switch (exitStatus) {\n          case 0:\n          case 1:\n            throw Error(formatProdErrorMessage(345));\n          case 4:\n            if ((lanes & 4194176) === lanes) {\n              markRootSuspended(\n                shouldTimeSlice,\n                lanes,\n                workInProgressDeferredLane,\n                !workInProgressRootDidSkipSuspendedSiblings\n              );\n              break a;\n            }\n            break;\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        shouldTimeSlice.finishedWork = forceSync;\n        shouldTimeSlice.finishedLanes = lanes;\n        if (\n          (lanes & 62914560) === lanes &&\n          ((renderWasConcurrent = globalMostRecentFallbackTime + 300 - now()),\n          10 < renderWasConcurrent)\n        ) {\n          markRootSuspended(\n            shouldTimeSlice,\n            lanes,\n            workInProgressDeferredLane,\n            !workInProgressRootDidSkipSuspendedSiblings\n          );\n          if (0 !== getNextLanes(shouldTimeSlice, 0)) break a;\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              2,\n              -0,\n              0\n            ),\n            renderWasConcurrent\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          0,\n          -0,\n          0\n        );\n      }\n    }\n    break;\n  } while (1);\n  ensureRootIsScheduled(root$jscomp$0);\n}\nfunction queueRecoverableErrors(errors) {\n  null === workInProgressRootRecoverableErrors\n    ? (workInProgressRootRecoverableErrors = errors)\n    : workInProgressRootRecoverableErrors.push.apply(\n        workInProgressRootRecoverableErrors,\n        errors\n      );\n}\nfunction commitRootWhenReady(\n  root,\n  finishedWork,\n  recoverableErrors,\n  transitions,\n  didIncludeRenderPhaseUpdate,\n  lanes,\n  spawnedLane,\n  updatedLanes,\n  suspendedRetryLanes,\n  didSkipSuspendedSiblings,\n  suspendedCommitReason,\n  completedRenderStartTime,\n  completedRenderEndTime\n) {\n  var subtreeFlags = finishedWork.subtreeFlags;\n  if (subtreeFlags & 8192 || 16785408 === (subtreeFlags & 16785408))\n    if (\n      ((suspendedState = { stylesheets: null, count: 0, unsuspend: noop }),\n      accumulateSuspenseyCommitOnFiber(finishedWork),\n      (finishedWork = waitForCommitToBeReady()),\n      null !== finishedWork)\n    ) {\n      root.cancelPendingCommit = finishedWork(\n        commitRoot.bind(\n          null,\n          root,\n          recoverableErrors,\n          transitions,\n          didIncludeRenderPhaseUpdate,\n          spawnedLane,\n          updatedLanes,\n          suspendedRetryLanes,\n          1,\n          completedRenderStartTime,\n          completedRenderEndTime\n        )\n      );\n      markRootSuspended(root, lanes, spawnedLane, !didSkipSuspendedSiblings);\n      return;\n    }\n  commitRoot(\n    root,\n    recoverableErrors,\n    transitions,\n    didIncludeRenderPhaseUpdate,\n    spawnedLane,\n    updatedLanes,\n    suspendedRetryLanes,\n    suspendedCommitReason,\n    completedRenderStartTime,\n    completedRenderEndTime\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 = 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  root.finishedWork = null;\n  root.finishedLanes = 0;\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  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$1 = null;\n  ReactSharedInternals.H = ContextOnlyDispatcher;\n  thrownValue === SuspenseException\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 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 & 4194176) !==\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 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$164) {\n      handleThrow(root, thrownValue$164);\n    }\n  while (1);\n  lanes && root.shellSuspendCounter++;\n  lastContextDependency = currentlyRenderingFiber = 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            if (isThenableResolved(thrownValue)) {\n              workInProgressSuspendedReason = 0;\n              workInProgressThrownValue = null;\n              replaySuspendedUnitOfWork(lanes);\n              break;\n            }\n            lanes = function () {\n              2 === 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 (resource ? preloadResource(resource) : 1) {\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      workLoopConcurrent();\n      break;\n    } catch (thrownValue$166) {\n      handleThrow(root, thrownValue$166);\n    }\n  while (1);\n  lastContextDependency = currentlyRenderingFiber = 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 workLoopConcurrent() {\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 = 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 || 3 === suspendedReason || 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  recoverableErrors,\n  transitions,\n  didIncludeRenderPhaseUpdate,\n  spawnedLane,\n  updatedLanes,\n  suspendedRetryLanes,\n  suspendedCommitReason,\n  completedRenderStartTime,\n  completedRenderEndTime\n) {\n  var prevTransition = ReactSharedInternals.T,\n    previousUpdateLanePriority = ReactDOMSharedInternals.p;\n  try {\n    (ReactDOMSharedInternals.p = 2),\n      (ReactSharedInternals.T = null),\n      commitRootImpl(\n        root,\n        recoverableErrors,\n        transitions,\n        didIncludeRenderPhaseUpdate,\n        previousUpdateLanePriority,\n        spawnedLane,\n        updatedLanes,\n        suspendedRetryLanes,\n        suspendedCommitReason,\n        completedRenderStartTime,\n        completedRenderEndTime\n      );\n  } finally {\n    (ReactSharedInternals.T = prevTransition),\n      (ReactDOMSharedInternals.p = previousUpdateLanePriority);\n  }\n}\nfunction commitRootImpl(\n  root,\n  recoverableErrors,\n  transitions,\n  didIncludeRenderPhaseUpdate,\n  renderPriorityLevel,\n  spawnedLane,\n  updatedLanes,\n  suspendedRetryLanes\n) {\n  do flushPassiveEffects();\n  while (null !== rootWithPendingPassiveEffects);\n  if (0 !== (executionContext & 6)) throw Error(formatProdErrorMessage(327));\n  var finishedWork = root.finishedWork;\n  didIncludeRenderPhaseUpdate = root.finishedLanes;\n  if (null === finishedWork) return null;\n  root.finishedWork = null;\n  root.finishedLanes = 0;\n  if (finishedWork === root.current) throw Error(formatProdErrorMessage(177));\n  root.callbackNode = null;\n  root.callbackPriority = 0;\n  root.cancelPendingCommit = null;\n  var remainingLanes = finishedWork.lanes | finishedWork.childLanes;\n  remainingLanes |= concurrentlyUpdatedLanes;\n  markRootFinished(\n    root,\n    didIncludeRenderPhaseUpdate,\n    remainingLanes,\n    spawnedLane,\n    updatedLanes,\n    suspendedRetryLanes\n  );\n  root === workInProgressRoot &&\n    ((workInProgress = workInProgressRoot = null),\n    (workInProgressRootRenderLanes = 0));\n  (0 === (finishedWork.subtreeFlags & 10256) &&\n    0 === (finishedWork.flags & 10256)) ||\n    rootDoesHavePassiveEffects ||\n    ((rootDoesHavePassiveEffects = !0),\n    (pendingPassiveEffectsRemainingLanes = remainingLanes),\n    (pendingPassiveTransitions = transitions),\n    scheduleCallback$1(NormalPriority$1, function () {\n      flushPassiveEffects(!0);\n      return null;\n    }));\n  transitions = 0 !== (finishedWork.flags & 15990);\n  0 !== (finishedWork.subtreeFlags & 15990) || transitions\n    ? ((transitions = ReactSharedInternals.T),\n      (ReactSharedInternals.T = null),\n      (spawnedLane = ReactDOMSharedInternals.p),\n      (ReactDOMSharedInternals.p = 2),\n      (updatedLanes = executionContext),\n      (executionContext |= 4),\n      commitBeforeMutationEffects(root, finishedWork),\n      commitMutationEffectsOnFiber(finishedWork, root),\n      restoreSelection(selectionInformation, root.containerInfo),\n      (_enabled = !!eventsEnabled),\n      (selectionInformation = eventsEnabled = null),\n      (root.current = finishedWork),\n      commitLayoutEffectOnFiber(root, finishedWork.alternate, finishedWork),\n      requestPaint(),\n      (executionContext = updatedLanes),\n      (ReactDOMSharedInternals.p = spawnedLane),\n      (ReactSharedInternals.T = transitions))\n    : (root.current = finishedWork);\n  rootDoesHavePassiveEffects\n    ? ((rootDoesHavePassiveEffects = !1),\n      (rootWithPendingPassiveEffects = root),\n      (pendingPassiveEffectsLanes = didIncludeRenderPhaseUpdate))\n    : releaseRootPooledCache(root, remainingLanes);\n  remainingLanes = root.pendingLanes;\n  0 === remainingLanes && (legacyErrorBoundariesThatAlreadyFailed = null);\n  onCommitRoot(finishedWork.stateNode, renderPriorityLevel);\n  ensureRootIsScheduled(root);\n  if (null !== recoverableErrors)\n    for (\n      renderPriorityLevel = root.onRecoverableError, finishedWork = 0;\n      finishedWork < recoverableErrors.length;\n      finishedWork++\n    )\n      (remainingLanes = recoverableErrors[finishedWork]),\n        renderPriorityLevel(remainingLanes.value, {\n          componentStack: remainingLanes.stack\n        });\n  0 !== (pendingPassiveEffectsLanes & 3) && flushPassiveEffects();\n  remainingLanes = root.pendingLanes;\n  0 !== (didIncludeRenderPhaseUpdate & 4194218) && 0 !== (remainingLanes & 42)\n    ? root === rootWithNestedUpdates\n      ? nestedUpdateCount++\n      : ((nestedUpdateCount = 0), (rootWithNestedUpdates = root))\n    : (nestedUpdateCount = 0);\n  flushSyncWorkAcrossRoots_impl(0, !1);\n  return null;\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 flushPassiveEffects() {\n  if (null !== rootWithPendingPassiveEffects) {\n    var root$170 = rootWithPendingPassiveEffects,\n      remainingLanes = pendingPassiveEffectsRemainingLanes;\n    pendingPassiveEffectsRemainingLanes = 0;\n    var renderPriority = lanesToEventPriority(pendingPassiveEffectsLanes),\n      prevTransition = ReactSharedInternals.T,\n      previousPriority = ReactDOMSharedInternals.p;\n    try {\n      ReactDOMSharedInternals.p = 32 > renderPriority ? 32 : renderPriority;\n      ReactSharedInternals.T = null;\n      if (null === rootWithPendingPassiveEffects)\n        var JSCompiler_inline_result = !1;\n      else {\n        renderPriority = pendingPassiveTransitions;\n        pendingPassiveTransitions = null;\n        var root = rootWithPendingPassiveEffects,\n          lanes = pendingPassiveEffectsLanes;\n        rootWithPendingPassiveEffects = null;\n        pendingPassiveEffectsLanes = 0;\n        if (0 !== (executionContext & 6))\n          throw Error(formatProdErrorMessage(331));\n        var prevExecutionContext = executionContext;\n        executionContext |= 4;\n        commitPassiveUnmountOnFiber(root.current);\n        commitPassiveMountOnFiber(root, root.current, lanes, renderPriority);\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);\n          } catch (err) {}\n        JSCompiler_inline_result = !0;\n      }\n      return JSCompiler_inline_result;\n    } finally {\n      (ReactDOMSharedInternals.p = previousPriority),\n        (ReactSharedInternals.T = prevTransition),\n        releaseRootPooledCache(root$170, remainingLanes);\n    }\n  }\n  return !1;\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 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),\n    scheduleImmediateTask(processRootScheduleInMicrotask));\n}\nfunction flushSyncWorkAcrossRoots_impl(syncTransitionLanes, onlyLegacy) {\n  if (!isFlushingWork && mightHavePendingSyncWork) {\n    isFlushingWork = !0;\n    do {\n      var didPerformSomeWork = !1;\n      for (var root$172 = firstScheduledRoot; null !== root$172; ) {\n        if (!onlyLegacy)\n          if (0 !== syncTransitionLanes) {\n            var pendingLanes = root$172.pendingLanes;\n            if (0 === pendingLanes) var JSCompiler_inline_result = 0;\n            else {\n              var suspendedLanes = root$172.suspendedLanes,\n                pingedLanes = root$172.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 & 201326677\n                  ? (JSCompiler_inline_result & 201326677) | 1\n                  : JSCompiler_inline_result\n                    ? JSCompiler_inline_result | 2\n                    : 0;\n            }\n            0 !== JSCompiler_inline_result &&\n              ((didPerformSomeWork = !0),\n              performSyncWorkOnRoot(root$172, JSCompiler_inline_result));\n          } else\n            (JSCompiler_inline_result = workInProgressRootRenderLanes),\n              (JSCompiler_inline_result = getNextLanes(\n                root$172,\n                root$172 === workInProgressRoot ? JSCompiler_inline_result : 0\n              )),\n              0 === (JSCompiler_inline_result & 3) ||\n                checkIfRootIsPrerendering(root$172, JSCompiler_inline_result) ||\n                ((didPerformSomeWork = !0),\n                performSyncWorkOnRoot(root$172, JSCompiler_inline_result));\n        root$172 = root$172.next;\n      }\n    } while (didPerformSomeWork);\n    isFlushingWork = !1;\n  }\n}\nfunction processRootScheduleInMicrotask() {\n  mightHavePendingSyncWork = didScheduleMicrotask = !1;\n  var syncTransitionLanes = 0;\n  0 !== currentEventTransitionLane &&\n    (shouldAttemptEagerTransition() &&\n      (syncTransitionLanes = currentEventTransitionLane),\n    (currentEventTransitionLane = 0));\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  flushSyncWorkAcrossRoots_impl(syncTransitionLanes, !1);\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  );\n  pingedLanes = root.callbackNode;\n  if (\n    0 === suspendedLanes ||\n    (root === currentTime && 2 === 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  var originalCallbackNode = root.callbackNode;\n  if (flushPassiveEffects() && 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  );\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 (flushPassiveEffects()) return null;\n  performWorkOnRoot(root, lanes, !0);\n}\nfunction scheduleImmediateTask(cb) {\n  scheduleMicrotask(function () {\n    0 !== (executionContext & 6)\n      ? scheduleCallback$3(ImmediatePriority, cb)\n      : cb();\n  });\n}\nfunction requestTransitionLane() {\n  0 === currentEventTransitionLane &&\n    (currentEventTransitionLane = claimNextTransitionLane());\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_1439 = 0;\n  i$jscomp$inline_1439 < simpleEventPluginEvents.length;\n  i$jscomp$inline_1439++\n) {\n  var eventName$jscomp$inline_1440 =\n      simpleEventPluginEvents[i$jscomp$inline_1439],\n    domEventName$jscomp$inline_1441 =\n      eventName$jscomp$inline_1440.toLowerCase(),\n    capitalizedEvent$jscomp$inline_1442 =\n      eventName$jscomp$inline_1440[0].toUpperCase() +\n      eventName$jscomp$inline_1440.slice(1);\n  registerSimpleEvent(\n    domEventName$jscomp$inline_1441,\n    \"on\" + capitalizedEvent$jscomp$inline_1442\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 (\n          container === targetContainer ||\n          (8 === container.nodeType && container.parentNode === targetContainer)\n        )\n          break;\n        if (4 === nodeTag)\n          for (nodeTag = targetInst$jscomp$0.return; null !== nodeTag; ) {\n            var grandTag = nodeTag.tag;\n            if (3 === grandTag || 4 === grandTag)\n              if (\n                ((grandTag = nodeTag.stateNode.containerInfo),\n                grandTag === targetContainer ||\n                  (8 === grandTag.nodeType &&\n                    grandTag.parentNode === 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 = SyntheticEventCtor;\n                reactEventName = reactEventType;\n                instance = 0;\n                for (\n                  lastHostComponent = inCapturePhase;\n                  lastHostComponent;\n                  lastHostComponent = getParent(lastHostComponent)\n                )\n                  instance++;\n                lastHostComponent = 0;\n                for (\n                  _instance = reactEventName;\n                  _instance;\n                  _instance = getParent(_instance)\n                )\n                  lastHostComponent++;\n                for (; 0 < instance - lastHostComponent; )\n                  (inCapturePhase = getParent(inCapturePhase)), instance--;\n                for (; 0 < lastHostComponent - instance; )\n                  (reactEventName = getParent(reactEventName)),\n                    lastHostComponent--;\n                for (; instance--; ) {\n                  if (\n                    inCapturePhase === reactEventName ||\n                    (null !== reactEventName &&\n                      inCapturePhase === reactEventName.alternate)\n                  )\n                    break b;\n                  inCapturePhase = getParent(inCapturePhase);\n                  reactEventName = getParent(reactEventName);\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    targetFiber = targetFiber.return;\n  }\n  return listeners;\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 noop$1() {}\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$186 = props[hasSrc];\n          if (null != propValue$186)\n            switch (hasSrc) {\n              case \"name\":\n                hasSrcSet = propValue$186;\n                break;\n              case \"type\":\n                propValue = propValue$186;\n                break;\n              case \"checked\":\n                checked = propValue$186;\n                break;\n              case \"defaultChecked\":\n                defaultChecked = propValue$186;\n                break;\n              case \"value\":\n                propKey = propValue$186;\n                break;\n              case \"defaultValue\":\n                defaultValue = propValue$186;\n                break;\n              case \"children\":\n              case \"dangerouslySetInnerHTML\":\n                if (null != propValue$186)\n                  throw Error(formatProdErrorMessage(137, tag));\n                break;\n              default:\n                setProp(domElement, tag, hasSrc, propValue$186, props, null);\n            }\n        }\n      initInput(\n        domElement,\n        propKey,\n        defaultValue,\n        checked,\n        defaultChecked,\n        propValue,\n        hasSrcSet,\n        !1\n      );\n      track(domElement);\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      track(domElement);\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(\"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$186 in props)\n          props.hasOwnProperty(propValue$186) &&\n            ((hasSrc = props[propValue$186]),\n            void 0 !== hasSrc &&\n              setPropOnCustomElement(\n                domElement,\n                tag,\n                propValue$186,\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$203 in nextProps) {\n        var propKey = nextProps[propKey$203];\n        lastProp = lastProps[propKey$203];\n        if (\n          nextProps.hasOwnProperty(propKey$203) &&\n          (null != propKey || null != lastProp)\n        )\n          switch (propKey$203) {\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$203,\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$203 = 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$203 = 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$203\n        ? updateOptions(domElement, !!lastProps, propKey$203, !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$203 = 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$203 = 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$203, propKey);\n      return;\n    case \"option\":\n      for (var propKey$219 in lastProps)\n        if (\n          ((propKey$203 = lastProps[propKey$219]),\n          lastProps.hasOwnProperty(propKey$219) &&\n            null != propKey$203 &&\n            !nextProps.hasOwnProperty(propKey$219))\n        )\n          switch (propKey$219) {\n            case \"selected\":\n              domElement.selected = !1;\n              break;\n            default:\n              setProp(\n                domElement,\n                tag,\n                propKey$219,\n                null,\n                nextProps,\n                propKey$203\n              );\n          }\n      for (lastDefaultValue in nextProps)\n        if (\n          ((propKey$203 = nextProps[lastDefaultValue]),\n          (propKey = lastProps[lastDefaultValue]),\n          nextProps.hasOwnProperty(lastDefaultValue) &&\n            propKey$203 !== propKey &&\n            (null != propKey$203 || null != propKey))\n        )\n          switch (lastDefaultValue) {\n            case \"selected\":\n              domElement.selected =\n                propKey$203 &&\n                \"function\" !== typeof propKey$203 &&\n                \"symbol\" !== typeof propKey$203;\n              break;\n            default:\n              setProp(\n                domElement,\n                tag,\n                lastDefaultValue,\n                propKey$203,\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$224 in lastProps)\n        (propKey$203 = lastProps[propKey$224]),\n          lastProps.hasOwnProperty(propKey$224) &&\n            null != propKey$203 &&\n            !nextProps.hasOwnProperty(propKey$224) &&\n            setProp(domElement, tag, propKey$224, null, nextProps, propKey$203);\n      for (checked in nextProps)\n        if (\n          ((propKey$203 = nextProps[checked]),\n          (propKey = lastProps[checked]),\n          nextProps.hasOwnProperty(checked) &&\n            propKey$203 !== propKey &&\n            (null != propKey$203 || null != propKey))\n        )\n          switch (checked) {\n            case \"children\":\n            case \"dangerouslySetInnerHTML\":\n              if (null != propKey$203)\n                throw Error(formatProdErrorMessage(137, tag));\n              break;\n            default:\n              setProp(\n                domElement,\n                tag,\n                checked,\n                propKey$203,\n                nextProps,\n                propKey\n              );\n          }\n      return;\n    default:\n      if (isCustomElement(tag)) {\n        for (var propKey$229 in lastProps)\n          (propKey$203 = lastProps[propKey$229]),\n            lastProps.hasOwnProperty(propKey$229) &&\n              void 0 !== propKey$203 &&\n              !nextProps.hasOwnProperty(propKey$229) &&\n              setPropOnCustomElement(\n                domElement,\n                tag,\n                propKey$229,\n                void 0,\n                nextProps,\n                propKey$203\n              );\n        for (defaultChecked in nextProps)\n          (propKey$203 = nextProps[defaultChecked]),\n            (propKey = lastProps[defaultChecked]),\n            !nextProps.hasOwnProperty(defaultChecked) ||\n              propKey$203 === propKey ||\n              (void 0 === propKey$203 && void 0 === propKey) ||\n              setPropOnCustomElement(\n                domElement,\n                tag,\n                defaultChecked,\n                propKey$203,\n                nextProps,\n                propKey\n              );\n        return;\n      }\n  }\n  for (var propKey$234 in lastProps)\n    (propKey$203 = lastProps[propKey$234]),\n      lastProps.hasOwnProperty(propKey$234) &&\n        null != propKey$203 &&\n        !nextProps.hasOwnProperty(propKey$234) &&\n        setProp(domElement, tag, propKey$234, null, nextProps, propKey$203);\n  for (lastProp in nextProps)\n    (propKey$203 = nextProps[lastProp]),\n      (propKey = lastProps[lastProp]),\n      !nextProps.hasOwnProperty(lastProp) ||\n        propKey$203 === propKey ||\n        (null == propKey$203 && null == propKey) ||\n        setProp(domElement, tag, lastProp, propKey$203, nextProps, propKey);\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 clearSuspenseBoundary(parentInstance, suspenseInstance) {\n  var node = suspenseInstance,\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)) {\n        if (0 === depth) {\n          parentInstance.removeChild(nextNode);\n          retryIfBlockedOn(suspenseInstance);\n          return;\n        }\n        depth--;\n      } else (\"$\" !== node && \"$?\" !== node && \"$!\" !== node) || depth++;\n    node = nextNode;\n  } while (node);\n  retryIfBlockedOn(suspenseInstance);\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 ? null : 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 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        \"F!\" === nodeType ||\n        \"F\" === nodeType\n      )\n        break;\n      if (\"/$\" === nodeType) return null;\n    }\n  }\n  return node;\n}\nfunction getParentSuspenseInstance(targetInstance) {\n  targetInstance = targetInstance.previousSibling;\n  for (var depth = 0; targetInstance; ) {\n    if (8 === targetInstance.nodeType) {\n      var data = targetInstance.data;\n      if (\"$\" === data || \"$!\" === data || \"$?\" === data) {\n        if (0 === depth) return targetInstance;\n        depth--;\n      } else \"/$\" === 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}\nvar preloadPropsMap = new Map(),\n  preconnectsSet = new Set();\nfunction getHoistableRoot(container) {\n  return \"function\" === typeof container.getRootNode\n    ? container.getRootNode()\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$242 = getResourcesFromRoot(\n            JSCompiler_inline_result\n          ).hoistableStyles,\n          resource$243 = styles$242.get(type);\n        resource$243 ||\n          ((JSCompiler_inline_result =\n            JSCompiler_inline_result.ownerDocument || JSCompiler_inline_result),\n          (resource$243 = {\n            type: \"stylesheet\",\n            instance: null,\n            count: 0,\n            state: { loading: 0, preload: null }\n          }),\n          styles$242.set(type, resource$243),\n          (styles$242 = JSCompiler_inline_result.querySelector(\n            getStylesheetSelectorFromKey(type)\n          )) &&\n            !styles$242._p &&\n            ((resource$243.instance = styles$242),\n            (resource$243.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$242 ||\n              preloadStylesheet(\n                JSCompiler_inline_result,\n                type,\n                pendingProps,\n                resource$243.state\n              )));\n        if (currentProps && null === currentResource)\n          throw Error(formatProdErrorMessage(528, \"\"));\n        return resource$243;\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$248 = hoistableRoot.querySelector(\n          getStylesheetSelectorFromKey(styleProps)\n        );\n        if (instance$248)\n          return (\n            (resource.state.loading |= 4),\n            (resource.instance = instance$248),\n            markNodeAsHoistable(instance$248),\n            instance$248\n          );\n        instance = stylesheetPropsFromRawProps(props);\n        (styleProps = preloadPropsMap.get(styleProps)) &&\n          adoptPreloadPropsForStylesheet(instance, styleProps);\n        instance$248 = (\n          hoistableRoot.ownerDocument || hoistableRoot\n        ).createElement(\"link\");\n        markNodeAsHoistable(instance$248);\n        var linkInstance = instance$248;\n        linkInstance._p = new Promise(function (resolve, reject) {\n          linkInstance.onload = resolve;\n          linkInstance.onerror = reject;\n        });\n        setInitialProperties(instance$248, \"link\", instance);\n        resource.state.loading |= 4;\n        insertStylesheet(instance$248, props.precedence, hoistableRoot);\n        return (resource.instance = instance$248);\n      case \"script\":\n        instance$248 = getScriptKey(props.src);\n        if (\n          (styleProps = hoistableRoot.querySelector(\n            getScriptSelectorFromKey(instance$248)\n          ))\n        )\n          return (\n            (resource.instance = styleProps),\n            markNodeAsHoistable(styleProps),\n            styleProps\n          );\n        instance = props;\n        if ((styleProps = preloadPropsMap.get(instance$248)))\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}\nvar suspendedState = null;\nfunction noop() {}\nfunction suspendResource(hoistableRoot, resource, props) {\n  if (null === suspendedState) throw Error(formatProdErrorMessage(475));\n  var state = suspendedState;\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}\nfunction waitForCommitToBeReady() {\n  if (null === suspendedState) throw Error(formatProdErrorMessage(475));\n  var state = suspendedState;\n  state.stylesheets &&\n    0 === state.count &&\n    insertSuspendedStylesheets(state, state.stylesheets);\n  return 0 < state.count\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);\n        state.unsuspend = commit;\n        return function () {\n          state.unsuspend = null;\n          clearTimeout(stylesheetTimer);\n        };\n      }\n    : null;\n}\nfunction onUnsuspend() {\n  this.count--;\n  if (0 === this.count)\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  formState\n) {\n  this.tag = 1;\n  this.containerInfo = containerInfo;\n  this.finishedWork =\n    this.pingCache =\n    this.current =\n    this.pendingChildren =\n      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.finishedLanes =\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  onUncaughtError,\n  onCaughtError,\n  onRecoverableError,\n  transitionCallbacks,\n  formState\n) {\n  containerInfo = new FiberRootNode(\n    containerInfo,\n    tag,\n    hydrate,\n    identifierPrefix,\n    onUncaughtError,\n    onCaughtError,\n    onRecoverableError,\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) {\n    var root = enqueueConcurrentRenderForLane(fiber, 67108864);\n    null !== root && scheduleUpdateOnFiber(root, fiber, 67108864);\n    markRetryLaneIfNotHydrated(fiber, 67108864);\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 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 (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            if (13 === nearestMounted.tag) {\n              var lane = requestUpdateLane(),\n                root = enqueueConcurrentRenderForLane(nearestMounted, lane);\n              null !== root &&\n                scheduleUpdateOnFiber(root, nearestMounted, lane);\n              markRetryLaneIfNotHydrated(nearestMounted, lane);\n            }\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 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      0 === root.tag && flushPassiveEffects();\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_1686 = React.version;\nif (\n  \"19.0.0\" !==\n  isomorphicReactPackageVersion$jscomp$inline_1686\n)\n  throw Error(\n    formatProdErrorMessage(\n      527,\n      isomorphicReactPackageVersion$jscomp$inline_1686,\n      \"19.0.0\"\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_2165 = {\n  bundleType: 0,\n  version: \"19.0.0\",\n  rendererPackageName: \"react-dom\",\n  currentDispatcherRef: ReactSharedInternals,\n  findFiberByHostInstance: getClosestInstanceFromNode,\n  reconcilerVersion: \"19.0.0\"\n};\nif (\"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) {\n  var hook$jscomp$inline_2166 = __REACT_DEVTOOLS_GLOBAL_HOOK__;\n  if (\n    !hook$jscomp$inline_2166.isDisabled &&\n    hook$jscomp$inline_2166.supportsFiber\n  )\n    try {\n      (rendererID = hook$jscomp$inline_2166.inject(\n        internals$jscomp$inline_2165\n      )),\n        (injectedHook = hook$jscomp$inline_2166);\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    transitionCallbacks = 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.unstable_transitionCallbacks &&\n      (transitionCallbacks = options.unstable_transitionCallbacks));\n  options = createFiberRoot(\n    container,\n    1,\n    !1,\n    null,\n    null,\n    isStrictMode,\n    identifierPrefix,\n    onUncaughtError,\n    onCaughtError,\n    onRecoverableError,\n    transitionCallbacks,\n    null\n  );\n  container[internalContainerInstanceKey] = options.current;\n  listenToAllSupportedEvents(\n    8 === container.nodeType ? container.parentNode : container\n  );\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    transitionCallbacks = null,\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.unstable_transitionCallbacks &&\n      (transitionCallbacks = options.unstable_transitionCallbacks),\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    onUncaughtError,\n    onCaughtError,\n    onRecoverableError,\n    transitionCallbacks,\n    formState\n  );\n  initialChildren.context = getContextForSubtree(null);\n  options = initialChildren.current;\n  isStrictMode = requestUpdateLane();\n  identifierPrefix = createUpdate(isStrictMode);\n  identifierPrefix.callback = null;\n  enqueueUpdate(options, identifierPrefix, isStrictMode);\n  initialChildren.current.lanes = isStrictMode;\n  markRootUpdated$1(initialChildren, isStrictMode);\n  ensureRootIsScheduled(initialChildren);\n  container[internalContainerInstanceKey] = initialChildren.current;\n  listenToAllSupportedEvents(container);\n  return new ReactDOMHydrationRoot(initialChildren);\n};\nexports.version = \"19.0.0\";\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;\nfunction generatePeptideFragments(mf, options) {\n    if (options === undefined) {\n        options = {\n            a: false,\n            b: true,\n            c: false,\n            x: false,\n            y: true,\n            z: false,\n            i: false,\n            ya: false,\n            yb: false,\n            yc: false,\n            zc: false,\n        };\n    }\n    options.maxInternal = options.maxInternal || Number.MAX_VALUE;\n    options.minInternal = options.minInternal || 0;\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, options);\n        addCTerm(mfs, cTerm, i, options);\n        if (options.i)\n            mfs.push(`${mfparts[i]}HC-1O-1(+1)$i:${mfparts[i]}`);\n        if (options.ya || options.yb || options.yc || options.zc) {\n            // we have double fragmentations\n            for (let j = i + 1; j < Math.min(mfparts.length, options.maxInternal + i + 1); j++) {\n                let iTerm = '';\n                if (j - i >= options.minInternal) {\n                    for (let k = i; k < j; k++) {\n                        iTerm += mfparts[k];\n                    }\n                    addITerm(mfs, iTerm, mfparts.length - i, j, options);\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, options) {\n    if (options.a)\n        mfs.push(`${nTerm}C-1O-1(+1)$a${i}`);\n    if (options.b)\n        mfs.push(`${nTerm}(+1)$b${i}`);\n    if (options.c)\n        mfs.push(`${nTerm}NH3(+1)$c${i}`);\n}\nfunction addITerm(mfs, iTerm, i, j, options) {\n    if (options.ya)\n        mfs.push(`H${iTerm}C-1O-1(+1)$a${j}y${i}`);\n    if (options.yb)\n        mfs.push(`H${iTerm}(+1)$b${j}y${i}`);\n    if (options.yc)\n        mfs.push(`H${iTerm}NH3(+1)$c${j}y${i}`);\n    if (options.zc)\n        mfs.push(`N-1${iTerm}NH3(+1)$c${j}z${i}`);\n}\nfunction addCTerm(mfs, cTerm, i, options) {\n    if (options.x)\n        mfs.push(`CO(+1)${cTerm}$x${i}`);\n    if (options.y)\n        mfs.push(`H2(+1)${cTerm}$y${i}`);\n    if (options.z)\n        mfs.push(`N-1H-1(+1)${cTerm}$z${i}`);\n}\n//# sourceMappingURL=generatePeptideFragments.js.map","\"use strict\";\n/*\nIotuibs:\n* minMissed (default: 0)\n* maxMissed (default: 0)\n* minResidue: 0;\n* maxResidue: infinity\n* enzyme: chymotrypsin, trypsin, glucph4, glucph8, thermolysin, cyanogenbromide : Mandatory, no default value !\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.digestPeptide = digestPeptide;\nfunction digestPeptide(sequence, options = {}) {\n    sequence = sequence.replace(/^H([^a-z])/, '$1').replace(/OH$/, '');\n    options.enzyme = options.enzyme || 'trypsin';\n    if (options.minMissed === undefined)\n        options.minMissed = 0;\n    if (options.maxMissed === undefined)\n        options.maxMissed = 0;\n    if (options.minResidue === undefined)\n        options.minResidue = 0;\n    if (options.maxResidue === undefined)\n        options.maxResidue = Number.MAX_VALUE;\n    let regexp = getRegexp(options.enzyme);\n    let fragments = sequence.replace(regexp, '$1 ').split(/ /).filter(Boolean);\n    {\n        let from = 0;\n        for (let i = 0; i < fragments.length; i++) {\n            let nbResidue = fragments[i]\n                .replaceAll(/([A-Z][a-z]{2})/g, ' $1')\n                .split(/ /)\n                .filter(Boolean).length;\n            fragments[i] = {\n                sequence: fragments[i],\n                nbResidue,\n                from,\n                to: from + nbResidue - 1,\n            };\n            from += nbResidue;\n        }\n    }\n    let results = [];\n    for (let i = 0; i < fragments.length - options.minMissed; i++) {\n        for (let j = options.minMissed; j <= Math.min(options.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 &&\n                nbResidue >= options.minResidue &&\n                nbResidue <= options.maxResidue) {\n                results.push(`H${fragment}OH$D${from}>${to}`);\n            }\n        }\n    }\n    return results;\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 (options.protonation) {\n            digests = (0, peptide_1.chargePeptide)(digests, {\n                pH: options.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';\nimport addBaseline from \"./util/addBaseline.js\";\nimport addNoise from \"./util/addNoise.js\";\nexport class SpectrumGenerator {\n    from;\n    to;\n    nbPoints;\n    interval;\n    peakWidthFct;\n    maxPeakHeight;\n    shape;\n    data;\n    constructor(options = {}) {\n        const { from = 0, to = 1000, nbPoints = 10001, peakWidthFct, shape = { kind: 'gaussian', fwhm: 5 }, } = options;\n        this.from = from;\n        this.to = to;\n        this.nbPoints = nbPoints;\n        this.interval = (this.to - this.from) / (this.nbPoints - 1);\n        this.peakWidthFct = peakWidthFct;\n        this.maxPeakHeight = Number.MIN_SAFE_INTEGER;\n        this.data = {\n            x: new Float64Array(this.nbPoints),\n            y: new Float64Array(this.nbPoints),\n        };\n        const shapeGenerator = getShape1D(shape);\n        this.shape = shapeGenerator;\n        assertNumber(this.from, 'from');\n        assertNumber(this.to, 'to');\n        assertInteger(this.nbPoints, 'nbPoints');\n        if (this.to <= this.from) {\n            throw new RangeError('to option must be larger than from');\n        }\n        if (this.peakWidthFct && typeof this.peakWidthFct !== 'function') {\n            throw new TypeError('peakWidthFct option must be a function');\n        }\n        this.reset();\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        let xPosition;\n        let intensity;\n        let peakFWHM;\n        let peakWidth;\n        let peakShapeOptions;\n        if (Array.isArray(peak)) {\n            [xPosition, intensity, peakFWHM, peakShapeOptions] = peak;\n        }\n        else {\n            xPosition = peak.x;\n            intensity = peak.y;\n            peakWidth = peak.width;\n            peakShapeOptions = peak.shape;\n        }\n        if (intensity > this.maxPeakHeight)\n            this.maxPeakHeight = intensity;\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            : Object.assign(Object.create(Object.getPrototypeOf(this.shape)), this.shape);\n        const { width } = options;\n        let { widthLeft, widthRight } = options;\n        /*\n         if we don't force the fwhm we just take the one from the shape\n         however we have many way to force it:\n         - use [x,y,fwhm]\n         - define `width` that will be converted to fwhm\n         - define `widthLeft` and `widthRight` to define asymmetric peaks\n         - have a callback `peakWidthFct`\n         This should evolve in the future because we will not always have `fwhm`\n         */\n        const fwhm = peakFWHM !== undefined\n            ? peakFWHM\n            : peakWidth\n                ? shape.widthToFWHM(peakWidth)\n                : this.peakWidthFct\n                    ? this.peakWidthFct(xPosition)\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 firstValue = xPosition - (widthLeft / 2) * factor;\n        const lastValue = xPosition + (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((xPosition - this.from) / this.interval);\n        // PEAK SHAPE MAY BE ASYMMETRC (widthLeft and widthRight) !\n        // we calculate the left part of the shape\n        shape.fwhm = widthLeft;\n        for (let index = firstPoint; index < Math.max(middlePoint, 0); index++) {\n            this.data.y[index] +=\n                intensity * shape.fct(this.data.x[index] - xPosition);\n        }\n        // we calculate the right part of the gaussian\n        shape.fwhm = widthRight;\n        for (let index = Math.min(middlePoint, lastPoint); index <= lastPoint; index++) {\n            this.data.y[index] +=\n                intensity * shape.fct(this.data.x[index] - xPosition);\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}\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/**\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: generatorOptions, noise, baseline, threshold, peakOptions, } = options;\n    const generator = new SpectrumGenerator(generatorOptions);\n    generator.addPeaks(peaks, peakOptions);\n    if (baseline)\n        generator.addBaseline(baseline);\n    if (noise) {\n        generator.addNoise(noise);\n    }\n    return generator.getSpectrum({\n        threshold,\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","\"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    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        if (chemical_elements_1.stableIsotopesObject[key].mostAbundant)\n            continue;\n        shortLabel += isotopeLabel;\n        shortComposition[key] = composition[key];\n    }\n    return { label, shortComposition, shortLabel };\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.mf}(${part.ionization.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(`${part.mf}(${ionization.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 charge = part.ms.charge;\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                const absoluteChargeOrOne = absoluteCharge || 1;\n                for (let entry of totalDistribution.array) {\n                    if (!entry.composition)\n                        continue;\n                    const deltaNeutrons = Math.round(entry.x * absoluteChargeOrOne - part.monoisotopicMass) +\n                        0; // +0 to avoid -0\n                    Object.assign(entry, {\n                        ...(0, getDerivedCompositionInfo_1.getDerivedCompositionInfo)(entry.composition),\n                        deltaNeutrons,\n                    });\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] // minimal height to return point\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     * @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, } = options;\n        let points = this.getTable({ maxValue });\n        if (points.length === 0)\n            return { x: [], y: [] };\n        const from = options.from || points[0].x - 2;\n        const to = options.to || points.at(-1).x + 2;\n        const nbPoints = Math.round(((to - from) * gaussianWidth) / this.fwhm + 1);\n        if (nbPoints > maxLength) {\n            throw new Error(`Number of points is over the maxLength: ${nbPoints}>${maxLength}`);\n        }\n        let gaussianOptions = {\n            from,\n            to,\n            nbPoints,\n            peakWidthFct,\n        };\n        let spectrumGenerator = new spectrum_generator_1.SpectrumGenerator(gaussianOptions);\n        for (let point of points) {\n            spectrumGenerator.addPeak([point.x, point.y]);\n        }\n        let spectrum = spectrumGenerator.getSpectrum({ threshold });\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 } = 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    let 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 (!options.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 (!options.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","(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 (options.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}\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()) { /* empty */ }\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/open-source/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.oramasearch 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    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/open-source/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/open-source/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    'beforeSearch',\n    'afterSearch',\n    'beforeInsertMultiple',\n    'afterInsertMultiple',\n    'beforeRemoveMultiple',\n    'afterRemoveMultiple',\n    'beforeUpdateMultiple',\n    'afterUpdateMultiple',\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'];\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","import { setUnion } from '../utils.js';\nexport 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        let 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                result = setUnion(result, current.v);\n            }\n            if (current.k > max) {\n                break;\n            }\n            current = current.r;\n        }\n        return result;\n    }\n    greaterThan(key, inclusive = false) {\n        let 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                result = setUnion(result, current.v);\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        let 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                result = setUnion(result, current.v);\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\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                            childNode.findAllWords(output, term, exact, tolerance);\n                            return output;\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    // prioritizig the ones that contains more search terms (fuzzy match)\n    if (threshold === 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, 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 } 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}\nfunction searchInProperty(index, tree, prop, tokens, exact, tolerance, resultsMap, boostPerProperty, bm25Relevance, docsCount, whereFiltersIDs, keywordMatchesMap) {\n    const tokenLength = tokens.length;\n    for (let i = 0; i < tokenLength; i++) {\n        const term = tokens[i];\n        const searchResult = tree.find({ term, exact, tolerance });\n        const termsFound = Object.keys(searchResult);\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, bm25Relevance, resultsMap, boostPerProperty, whereFiltersIDs, keywordMatchesMap);\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    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        searchInProperty(index, tree.node, prop, tokens, exact, tolerance, resultsMap, boostPerProperty, relevance, docsCount, whereFiltersIDs, keywordMatchesMap);\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    // 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 threshold is 0, return only full matches\n    if (threshold === 0) {\n        return fullMatches;\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    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'\n            || type === 'Radix'\n            || type === 'AVL'\n            || type === 'BKD'\n            || 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 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","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 { 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            // @ts-expect-error TSC is unable to resolve this\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    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    // 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        internalDocumentIDStore: internalDocumentStore,\n        getDocumentProperties,\n        getDocumentIndexId,\n        validateSchema,\n        beforeInsert: [],\n        afterInsert: [],\n        beforeRemove: [],\n        afterRemove: [],\n        beforeUpdate: [],\n        afterUpdate: [],\n        beforeSearch: [],\n        afterSearch: [],\n        beforeInsertMultiple: [],\n        afterInsertMultiple: [],\n        beforeRemoveMultiple: [],\n        afterRemoveMultiple: [],\n        afterUpdateMultiple: [],\n        beforeUpdateMultiple: [],\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    };\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","export const MODE_FULLTEXT_SEARCH = 'fulltext';\nexport const MODE_HYBRID_SEARCH = 'hybrid';\nexport const MODE_VECTOR_SEARCH = 'vector';\n//# sourceMappingURL=constants.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 { kInsertions, kRemovals } from '../types.js';\n// Web platforms don't have process. React-Native doesn't have process.emitWarning.\nconst warn = globalThis.process?.emitWarning ??\n    function emitWarning(message, options) {\n        console.warn(`[WARNING] [${options.code}] ${message}`);\n    };\nexport function trackInsertion(orama) {\n    if (typeof orama[kInsertions] !== 'number') {\n        queueMicrotask(() => {\n            orama[kInsertions] = undefined;\n        });\n        orama[kInsertions] = 0;\n    }\n    if (orama[kInsertions] > 1000) {\n        warn(\"Orama's insert operation is synchronous. Please avoid inserting a large number of document in a single operation in order not to block the main thread or, in alternative, please use insertMultiple.\", { code: 'ORAMA0001' });\n        orama[kInsertions] = -1;\n    }\n    else if (orama[kInsertions] >= 0) {\n        orama[kInsertions]++;\n    }\n}\nexport function trackRemoval(orama) {\n    if (typeof orama[kRemovals] !== 'number') {\n        queueMicrotask(() => {\n            orama[kRemovals] = undefined;\n        });\n        orama[kRemovals] = 0;\n    }\n    if (orama[kRemovals] > 1000) {\n        warn(\"Orama's remove operation is synchronous. Please avoid removing a large number of document in a single operation in order not to block the main thread, in alternative, please use updateMultiple.\", { code: 'ORAMA0002' });\n        orama[kRemovals] = -1;\n    }\n    else if (orama[kRemovals] >= 0) {\n        orama[kRemovals]++;\n    }\n}\n//# sourceMappingURL=sync-blocking-checker.js.map","import { isArrayType, isGeoPointType, isVectorType } from '../components.js';\nimport { isAsyncFunction, sleep } from '../utils.js';\nimport { runMultipleHook, runSingleHook } from '../components/hooks.js';\nimport { trackInsertion } from '../components/sync-blocking-checker.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 (!orama.documentsStore.store(docs, id, internalId, doc)) {\n        throw createError('DOCUMENT_ALREADY_EXISTS', id);\n    }\n    const docsCount = orama.documentsStore.count(docs);\n    if (!skipHooks) {\n        await runSingleHook(orama.beforeInsert, orama, id, doc);\n    }\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    trackInsertion(orama);\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 (!orama.documentsStore.store(docs, id, internalId, doc)) {\n        throw createError('DOCUMENT_ALREADY_EXISTS', id);\n    }\n    const docsCount = orama.documentsStore.count(docs);\n    if (!skipHooks) {\n        runSingleHook(orama.beforeInsert, orama, id, doc);\n    }\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    trackInsertion(orama);\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 { trackRemoval } from '../components/sync-blocking-checker.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    trackRemoval(orama);\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    trackRemoval(orama);\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","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 { 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 { 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    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, params.threshold !== undefined && params.threshold !== null ? params.threshold : 1);\n    }\n    else {\n        // Tokenizer returns empty array and the search term is empty as well.\n        // We return all the documents.\n        const docIds = whereFiltersIDs ? Array.from(whereFiltersIDs) : Object.keys(orama.documentsStore.getAll(orama.data.docs));\n        uniqueDocsIDs = docIds.map((k) => [+k, 0]);\n    }\n    return uniqueDocsIDs;\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        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';\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    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        const results = innerVectorSearch(orama, params, language)\n            .sort(sortTokenScorePredicate);\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';\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        const uniqueTokenScores = innerHybridSearch(orama, params, language);\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 { 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","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.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        language: orama.tokenizer.language\n    };\n}\n//# sourceMappingURL=serialization.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","\"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 ? a.data.nbCompounds + 2 : 2;\n        const nbCompoundsEntryB = b.data?.nbCompounds ? b.data.nbCompounds + 2 : 2;\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 + 2 || 2;\n        const nbCompoundsEntryB = b.data.compounds?.length + 2 || 2;\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","value","tag","call","endsWith","includes","reimAbsolute","data","length","re","im","newArray","Float64Array","i","Math","hypot","isAnyArray","getOutputArray","output","undefined","TypeError","xAbsolute","array","tmpArray","slice","xMedian","input","options","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","arguments","Array","currentMin","_options$fromIndex","_options$toIndex","isInteger","minValue","currentMax","maxValue","RangeError","_options$min","autoMinMax","_options$max","factor","defineProperty","matrix","require$$0","rescale","require$$1","indent","repeat","indentData","inspectMatrixWithOptions","maxRows","maxColumns","maxNumSize","padMinus","constructor","name","rows","columns","maxI","maxJ","loop","get","line","formatNumber","join","inspectData","num","formatNumber2","padEnd","len","str","fix","toFixed","startsWith","exp","toExponential","checkRowIndex","outer","checkColumnIndex","checkRowVector","vector","to1DArray","checkColumnVector","checkRowIndices","rowIndices","checkColumnIndices","columnIndices","checkRange","startRow","endRow","startColumn","endColumn","checkNumber","checkNonEmpty","isEmpty","AbstractMatrix","from1DArray","newRows","newColumns","newData","newMatrix","Matrix","row","column","set","rowVector","columnVector","zeros","ones","fill","rand","random","randInt","interval","round","eye","this","diag","matrix1","matrix2","checkMatrix","isMatrix","klass","size","apply","callback","to2DArray","copy","toJSON","isRowVector","isColumnVector","isVector","isSquare","isSymmetric","isDistance","isEchelonForm","previousColumn","checked","isReducedEchelonForm","echelonForm","clone","h","iMax","swapRows","tmp","reducedEchelonForm","m","maxRow","p","pivot","setSubMatrix","neg","mulS","getRow","getRowVector","setRow","row1","row2","getColumn","getColumnVector","setColumn","swapColumns","column1","column2","addRowVector","subRowVector","mulRowVector","divRowVector","addColumnVector","subColumnVector","mulColumnVector","divColumnVector","mulRow","mulColumn","by","NaN","NEGATIVE_INFINITY","maxIndex","v","idx","minIndex","maxRowIndex","minRow","minRowIndex","maxColumn","maxColumnIndex","minColumn","minColumnIndex","norm","type","dot","cumulativeSum","sum","vector2","vector1","mmul","other","Bcolj","s","mpow","scalar","bb","e","strassen2x2","a11","b11","a12","b12","a21","b21","a22","b22","m1","m2","m3","m4","m5","c00","c01","c10","c11","strassen3x3","a00","a01","a02","a10","a20","b00","b01","b02","b10","b20","m6","m7","m8","m9","m12","m13","m14","m15","m16","m17","m18","c02","c12","c20","c21","c22","mmulStrassen","y","r1","c1","r2","c2","embed","mat","cols","r","c","resultat","console","warn","blockMult","halfRows","parseInt","halfCols","subMatrix","add","sub","scaleRows","isFinite","scaleColumns","flipRows","ceil","first","last","flipColumns","kroneckerProduct","kroneckerSum","AxI","IxB","transpose","sortRows","compareFunction","compareNumbers","sortColumns","subMatrixRow","indices","subMatrixColumn","selection","rowIndex","columnIndex","trace","entries","sumByRow","sumByColumn","sumAll","product","productByRow","productByColumn","productAll","mean","variance","unbiased","sum1","sum2","varianceByRow","varianceByColumn","varianceAll","standardDeviation","center","centerByRow","centerByColumn","centerAll","scale","getScaleByRow","scaleByRow","getScaleByColumn","scaleByColumn","divider","getScaleAll","scaleAll","Symbol","iterator","col","values","isArrayOfNumbers","every","element","for","randomInt","diagonal","identity","negate","tensorProduct","initData","nRows","nColumns","super","arrayData","removeRow","splice","addRow","removeColumn","newRow","addColumn","addS","addM","subS","subM","subtract","subtractS","subtractM","mul","mulM","multiply","multiplyS","multiplyM","div","divS","divM","divide","divideS","divideM","mod","modS","modM","modulus","modulusS","modulusM","and","andS","andM","or","orS","orM","xor","xorS","xorM","leftShift","leftShiftS","leftShiftM","signPropagatingRightShift","signPropagatingRightShiftS","signPropagatingRightShiftM","rightShift","rightShiftS","rightShiftM","zeroFillRightShift","zeroFillRightShiftS","zeroFillRightShiftM","not","acos","acosh","asin","asinh","atan","atanh","cbrt","clz32","cos","cosh","expm1","fround","log","log1p","log10","log2","sign","sin","sinh","tan","tanh","trunc","pow","arg0","powS","powM","installMathOperations","SymmetricMatrix","diagonalSize","isSymmetricMatrix","klassType","upperRightEntries","toMatrix","removeCross","addCross","applyMask","mask","sidesToRemove","passthroughs","reverse","sideIndex","toCompact","compact","fromCompact","compactSize","JSON","stringify","upperRightValues","DistanceMatrix","isDistanceMatrix","klassSubType","sideSize","toSymmetricMatrix","BaseView","MatrixSelectionView","WrapperMatrix1D","_calculateIndex","WrapperMatrix2D","LuDecomposition$1","t","LUcolj","kmax","lu","pivotVector","pivotSign","LU","isSingular","solve","count","X","determinant","lowerTriangularMatrix","upperTriangularMatrix","pivotPermutationVector","hypotenuse","QrDecomposition","qr","rdiag","nrm","QR","Rdiag","isFullRank","orthogonalMatrix","SingularValueDecomposition","computeLeftSingularVectors","computeRightSingularVectors","autoTranspose","wantu","Boolean","wantv","swapped","aux","nu","ni","U","V","work","si","nct","nrt","mrc","pp","eps","kase","alpha","MIN_VALUE","isNaN","ks","f","cs","sn","sp","spm1","epm1","sk","ek","shift","Y","threshold","scols","Ls","rightSingularVectors","VL","vrows","urows","VLU","solveForDiagonal","inverse","vcols","ucols","condition","norm2","rank","tol","ii","leftSingularVectors","diagonalMatrix","leftHandSide","rightHandSide","useSVD","LuDecomposition","xrange","exception","range","dependenciesOneRow","error","thresholdValue","thresholdError","returnArray","EigenvalueDecomposition","assumeSymmetric","d","hh","tred2","dl1","c3","el1","s2","tst1","tql2","H","ort","orthes","nn","ra","sa","vr","vi","notlast","cdivres","exshift","z","iter","cdiv","hqr2","realEigenvalues","imaginaryEigenvalues","eigenvectorMatrix","xr","xi","yr","yi","CholeskyDecomposition$1","dimension","positiveDefinite","L","isPositiveDefinite","nipals","scaleScores","maxIterations","terminationCriteria","u","tOld","counter","xResidual","residual","yResidual","betas","CHO","CholeskyDecomposition","CholeskyDecomposition_1","EVD","LuDecomposition_1","Matrix_1","MatrixColumnSelectionView","MatrixColumnView","MatrixFlipColumnView","MatrixFlipRowView","MatrixRowSelectionView","MatrixRowView","MatrixSubView","MatrixTransposeView","NIPALS","Nipals","SVD","correlation","xMatrix","yMatrix","yIsSame","sdx","sdy","corr","covariance","cov","_default","default","subMatrix0","subMatrix1","subMatrix2","inverse_1","linearDependencies","results","Abis","pseudoInverse","svdSolution","solve_1","wrap","absDiff","xCumulative","xMean","sumValue","xVariance","sqrError","xStandardDeviation","xEnsureFloat64","xGetTargetIndex","targetIndex","FFT","_csize","table","angle","PI","power","_width","_bitrev","revShift","_out","_data","_inv","fft","fromComplexArray","complex","storage","res","createComplexArray","toComplexArray","completeSpectrum","spectrum","half","transform","out","_transform4","realTransform","_realTransform4","inverseTransform","outOff","step","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","createDoubleArray","createFromToArray","includeFrom","includeTo","distribution","delta","base","firstExponent","FLOAT_MUL","multiplyUint32","nlo","XSadd","state","seed","Date","now","Uint32Array","init","getFloat","bind","getUint32","nextState","periodCertification","createRandomArray","generator","gaussianGenerator","GaussianGenerator","generateGaussian","spare","hasSpare","val","isPowerOfTwo","nextPowerOfTwo","appendPromises","object","promises","key","then","modifier","ArrayBuffer","isView","xSubtract","calculateAdaptiveWeights","yData","baseline","weights","controlPoints","factorStd","learningRate","minWeight","absResiduals","rawWeights","maxWeight","MIN_SAFE_INTEGER","newWeights","oneMinusLearningRate","weight","cleanCyclicObject","removeProperty","visitedObjects","WeakMap","recursiveClean","parent","parentKey","isObject","has","Reflect","ownKeys","deleteProperty","isArray","arrayElement","removeEmptyArrayAndObject","test","repr","arg","isUndefined","isNull","isString","keys","hilbertTransformWithFFT","hilbertSignal","resampling","oldLength","ratio","currentIndex","xMaxValue","xMinValue","xHistogram","histogram","centerX","nbSlots","logBaseX","logBaseY","absolute","logOfBase","slotSize","xIsEquallySpaced","tolerance","maxDx","minDx","MAX_SAFE_INTEGER","absoluteDifference","xIsMonotonic","shiftSubTree","depth","level","slot","currentLevel","levelSlotShift","levelShift","levelSlotSize","slotIndex","getDepth","xMedianAbsoluteDeviation","averageDeviations","mad","xMinMaxValues","P1","Q1","P2","Q2","P3","Q3","P4","Q4","P5","Q5","polyval","coef","calc","P","Q","erfcinv","simpleNormInvNumber","magnitudeMode","SQRT2","simpleNormInv","xNoiseSanPlot","cutOff","refine","scaleFactor","fixOffset","filter","_e","prepareData","medianIndex","firstNegativeValueIndex","findIndex","lastPositiveValueIndex","signPositive","signNegative","cutOffDist","considerList","indexMax","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","xNoiseStandardDeviation","sd","xNorm","xSum","xNormed","algorithm","absoluteSumValue","absoluteSum","currentMaxValue","sumFactor","xPadding","fromEnd","toEnd","xRolling","fct","window","padding","padded","subarray","xRollingAverage","xRotate","xSequentialFillFromStep","parameters","xSortDescending","matrixCreateEmpty","nbRows","nbColumns","matrixCheck","firstLength","matrixCholeskySolver","nonZerosArray","permutationEncoded","pinv","mt","ar","ac","ap","ai","ax","lnz","colOffset","adr","lp","lnzArray","flag","pattern","bp1","kk","p2","ldlSymbolic","lx","li","lKi","ldlNumeric","ldlPerm","ldlLsolve","ldlDsolve","ldlLTsolve","ldlPermt","matrixClone","map","matrixCheckRanges","boundaries","matrixMinMaxAbsoluteZ","matrixMinMaxZ","matrixMaxAbsoluteZ","matrixToArray","flatten","currentRow","addWeights","nbPoints","newLeftHandSide","newRightHandSide","next","xWhittakerSmoother","lambda","getWeightsAndControlPoints","prevBaseline","iteration","Infinity","upperTriangularNonZeros","createSystemMatrix","cho","newBaseline","calculateDelta","xWhitakerSmoother","reimPhaseCorrection","phi0","phi1","firstAngle","beta","cosTheta","sinTheta","newRe","newIm","newSinTheta","determiningGlobalValues","ph0Values","ph0","ph1","sxtw","swx","sw","sxtwy","swy","detMx","inMx","weightedLinearRegression","maxDiff","predictedPh0","autoPhaseRegion","x0","start","stop","maxSteps","bestAng","minArea","dAng","negArea","getNegArea","toRadians","phased","area","sumX","robustBaseLineRegionsDetection","maxDistanceToJoin","factorNoise","Uint8Array","change","prev","degree","zeroShift","reimZeroFilling","totalLength","newRE","newIM","xyCheck","xyMaxYPoint","current","STEPS","zonesNormalize","zones","exclusions","zone","currentZone","beforeExclusionsZones","normalizedExclusions","currentExclusionIndex","zoneIndex","zonesWithPoints","numberOfPoints","normalizedZones","zonesWithNumberOfPoints","unitsPerPoint","reduce","previous","currentTotal","tempZone","tempZoneNumberOfPoints","integral","x1","slope","intercept","processZone","variant","xLength","halfStep","lastStep","previousX","MAX_VALUE","previousY","nextX","nextY","frontOutsideSpectra","backOutsideSpectra","currentValue","currentPoints","main","equallySpacedSlot","initialOriginalStep","lastOriginalStep","sumAtMin","sumAtMax","equallySpacedSmooth","xyJoinX","deltaIsFunction","position","notEnoughPoints","internalZones","totalPoints","newX","newY","getInternalZones","xySortX","floatX","floatY","xyObject","response","xyUniqueX","isSorted","cumulativeY","average","getSlots","possibleXs","flatMap","currentSlot","number","slots","currentDelta","xyArrayWeightedMerge","deltaNumber","positions","point","nextValue","maxX","sumY","sumXY","minX","currentX","xyObjectCheck","points","xyObjectMaxXPoint","xyObjectMinXPoint","targetMin","targetMax","clamp","algorithmOptions","originalMin","originalMax","convert","kind","getDataConverter","originalRange","targetRange","matrixInitial","dictionary","arrayOfValues","targetArray","sourceArray","info","columnArray","q1max","q3min","middleOver","list","adj","visited","toVisit","eol","ptr","nbhd","duplicate","fftResult","minMax","xHistogramOptions","finalHistogram","invertedDictionary","ret","dictCategoricalToNumerical","matrixB","normalizationFactor","referenceSpectrum","currentVariable","medianOfQuotients","quotients","propertiesToRemove","otherOptions","async","Promise","all","applyZeroShift","inPlace","csize","complexArray","outRe","outIm","source","minRegSize","finalPeaks","magnitudeData","peaksDs","dk","holoborodko","peaksSp","detectBaselineRegions","indexMask","reTmp","imTmp","numRows","resultRe","resultIm","reRow","imRow","replacer","space","internalReplacer","variableLabel","fctString","Function","replaceAll","toReturn","rowsArray","columnsArray","nb","forceFFT","inClockwise","aSum","cSum","hilbertTransform","recenter","similarityFct","depth1","depth2","similarity","maxSimilarity","value1","value2","sumWeights","minDelta","maxDelta","maxCount","counts","sqrtSD","higherWhisker","filteredArray","downSampling","unique","Set","toReversed","deltaX","xy2","xyValue","data1","data2","common","y1","y2","length1","length2","difference","weightedX","requiredY","ys","newYs","filterRequiredY","firstXs","otherXs","currentPosition","getSlotsToFirst","meanX","meanY","maxY","x25","x50","x75","x100","xMode","currentStep","breakPoint","prevX","zonesWithPointsRes","xResult","yResult","zoneResult","concat","minRelativeYValue","nbPeaks","descending","nbThreshold","currentZoneIndex","numberMaxPoints","xyIntegration","currentxyIntegral","currentxyIntegration","sumYs","sumProducts","weightedIntegral","firstIntegration","totalIntegration","totalWeightedIntegral","currentIntegration","lastIntegration","getWeightedIntegral","endIndexes","Int32Array","beginIndexes","currentBeginIndex","currentEndIndex","nextIndex","previousIndex","xyMaxY","groupWidth","merged","maxAbscissa","currentxyMaxY","maxima","startEqualIndex","cumSumY","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","maxApproximateNbPoints","internalZone","maxNbPoints","currentY","lastX","radius","shifted","yCenters","fromX","toX","yShift","currentMinYShift","objectArray","weightedAbscissa","ensureString","blob","encoding","TextDecoder","decode","uint8","buffer","byteOffset","byteLength","fatal","decodeText","parse","text","uniqueX","bestGuess","keepInfo","xColumn","yColumn","numberColumns","maxNumberColumns","minNumberColumns","lines","split","trim","fields","parseFloat","replace","skipFirstColumn","currentFirst","nextFirst","xs","yValues","peaks","searchMonoisotopicRatio","ml_spectra_processing_1","peak","monoisotopic","toSorted","nextItem","elementsAndIsotopes","nominal","mass","abundance","symbol","monoisotopicMass","elements","elementsAndIsotopes_js_1","exports","elementsAndIsotopesObject","elementsAndStableIsotopes","elementsAndStableIsotopesObject","elementsObject","isotopesObject","elementsAndIsotopesObject_js_1","isotope","isotopes","stableIsotopesObject","mostAbundant","unsaturationsObject","O","N","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","currentMultiplier","newParsed","realMultiplier","distinctParsedObject","atomA","atomB","fromCharCode","indexOfDash","indexOf","parseNumberWithDivision","chemical_elements_1","expandedGroups","chemical_groups_1","substring","begin","SyntaxError","message","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","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","getDistribution","partsToDisplay","partLine","toDisplay_js_1","partsToMF_1","partsToMF","expand","shouldExpandgroupsObject","createNewPart","previousKind","openingParenthesis","closingParenthesis","preMultiplier","postMultiplier","globalPartMultiplier","expandgroupsObject","group","expanded","combineAtomsIsotopesCharges","calculateAndSortKeys","currentKey","atom_sorter_1","pop","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","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","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","getResult","mf_matcher_1","msemMatcher","newResult","updateCurrentAtom","setCurrentMinMax","ensureUniqueMF","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","arithmeticMean","geometricMean","logMean","lnsum","grandMean","means","samples","truncatedMean","percent","alreadySorted","harmonicMean","contraHarmonicMean","theMean","theVariance","standardError","robustMeanAndStdev","stdev","quartiles","quart","q2","pooledStandardDeviation","pooledVariance","vari","mode","itemCount","itemArray","mean1","mean2","skewness","s3","dev","kurtosis","s4","entropy","weightedMean","weightedStandardDeviation","weightedVariance","standardize","standardDev","arrayStat","l1","l2","theSum","theProduct","medians","modes","skew","kurt","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","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","windowSize","derivative","polynomial","np","ans","fullWeights","hs","constantH","wg1","wg2","d1","d2","getHs","wg","gramPoly","Grampoly","genFact","gf","getMinMaxIntervalsDy","dY","dX","lastMax","lastMin","intervalL","intervalR","tryMatchOneIntervalWithMinData","lastK","minData","yThreshold","intervalWidth","intervalCenter","minDistance","possible","newLastIndex","centerIndex","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","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","evaluatedData","gradientFunc","paramFunction","nbParams","param","auxParams","funcParam","funcParam2","gradientFunction","residualError","matrixFunction","inverseMatrix","jacobianWeightResidualError","perturbations","levenbergMarquardt","checkedOptions","optimalError","optimalParameters","converged","previousError","parameterValues","parameterError","iterations","antiLowerConvexHull","currentPoint","moveOn","moveBack","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","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","shapeInstance","hasShape","optimizePeaksWithLogs","peakList","groupingFactor","factorLimits","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","maxDdy","candidates","initialWidth","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","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","_highlight","dy","props","rx","ry","fillOpacity","textLine","dx","labels","currentMfPrefs","numberOfMFS","getColor","jsgraph","JsGraph","appendFragmentsInfo","experimentalSpectrum","database","onStep","fragments","nbFound","intensityFound","assignments","possibleMFs","bestMF","lib","toSum","estimate","filterFctVariables","variables","filterFct","canonizeMF","sizes","evolution","appendResult","uniqueMFsObject","ems","getMonoisotopicMass","getEMFromParts","sum_object_keys_1","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","getConnectivityMatrix","pathLength","atomicNo","negativeAtomicNo","cRoundedMass","sdt","getConnBondOrder","sdta","bondNumber","getConnBond","isAromaticBond","adjMatrix","numVertices","distMatrix","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","ensureMapNo","existingMapNo","mapNo","nextMapNo","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","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","copyMolecule","Z","Bt","getIDCodeAndCoordinates","navigator","clipboard","writeText","coordinates","pasteMolecule","DS","JU","Ml","padStart","Gc","hr","globalThis","devicePixelRatio","z2","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","H1","bt","i1","L1","u1","document","createElement","n0","imageData","N0","getContext","globalAlpha","putImageData","isDarkBackground","Hl","canvasElement","changeListener","drawContext","getCanvasWidth","getCanvasHeight","getDrawContext","onChange","what","isUserEvent","getClipboardHandler","QS","CSSStyleSheet","replaceSync","Jc","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","Vl","setDimensions","style","oS","zc","create","El","HOTSPOT_32","IMAGE_NAME_32","cPointerCursor","cTextCursor","getCursor","buildCursor","Sl","title","rootElement","dialogElement","setLayout","hLayout","sS","vLayout","component","createTextField","Kc","createLabel","Yc","createComboBox","Xc","createCheckBox","Zc","setEventConsumer","consumer","showMessage","alert","showDialog","getBoundingClientRect","assign","marginBlock","left","right","body","parentElement","clientWidth","offsetTop","getRootNode","append","display","gridTemplateColumns","gridTemplateRows","preventDefault","fireOk","H0","gridColumn","gridRow","getElement","flexDirection","gap","textContent","fireCancel","showModal","disposeDialog","remove","Y2","setEventHandler","eventHandler","fireEvent","setText","getText","selectedIndex","setEnabled","disabled","addItem","getSelectedIndex","setSelectedIndex","setSelectedItem","getSelectedItem","removeAllItems","innerHTML","setEditable","checkBox","isSelected","setSelected","zU","dataView","DataView","getWidth","getHeight","getRGB","getInt32","setInt32","toDataURL","ql","dialogRoot","JavaEditorArea","register","javaUiHelper","cursorManager","grabFocus","focus","preventScroll","setCursor","cursor","showHelpDialog","createImage","ImageData","createImageFromBase64","uS","Uint8ClampedArray","createDialog","runLater","requestAnimationFrame","setImmediate","setTimeout","yS","readOnly","initialMode","initialFragment","dataset","openchemlibCanvasEditor","alignItems","backgroundColor","touchAction","userSelect","webkitUserSelect","attachShadow","adoptedStyleSheets","Se","Xe","tabIndex","outline","j8","GP","MODE_REACTION","MODE_MULTIPLE_FRAGMENTS","FPt","jA","setFragment","setMolecule","setReaction","setEditorArea","Nn","K2","repaint","X2","ResizeObserver","contentRect","observe","Z2","W2","_2","platform","metaKey","KEY_CTRL","KEY_ALT","KEY_SHIFT","KEY_DELETE","KEY_HELP","KEY_ESCAPE","KEY_ENTER","codePointAt","vPt","fireKeyEvent","KEY_EVENT_PRESSED","KEY_EVENT_RELEASED","clipboardData","fromText","addPastedOrDropped","US","editorArea","toolbar","uiHelper","destroy","disconnect","mPt","fromCodePoint","R8","kPt","dS","programName","keepIdCode","eD","compatMode","clearTimeout","setInterval","clearInterval","RegExp","jPt","YU","KU","_c","Il","AD","$c","c9","nD","tw","ew","Aw","Nl","PD","B1","nw","Pw","rw","u0","iw","fw","XU","Dw","uw","Qw","Uw","ow","Lw","Ol","yw","lw","Tw","hw","cw","ww","gw","dw","Bw","vw","Fw","kw","Gl","$2","pS","G","VS","bw","ZU","cr","GA","Rw","jw","pw","Cw","Mw","Hw","Vw","Ew","Sw","qw","Iw","WU","rD","xw","tu","Nw","Ow","Jl","Fi","eu","zl","Yl","Kl","iD","Xl","Zl","fD","DD","Wl","_l","w9","g9","Wt","_U","Gw","Jw","$l","zw","Yw","Kw","Xw","OS","$U","Zw","al","XS","eb","n1","N1","DO","ZS","fO","t3","JP","aU","LA","aS","nc","uG","Wq","eq","Au","fo","f1","cu","LP","Cu","Ww","smartsMode","skipCoordinateTemplates","makeHydrogenExplicit","noCactvs","singleDotSeparator","createSmartsWarnings","xc","XK","_w","$w","mr","aw","e7","e3","A3","d9","sP","Q0","n3","I0","mi","uq","rA","t7","vo","uD","A7","n7","k9","c0","JD","P7","dA","r3","r7","i3","LQ","i7","Y8","f7","f3","TD","QD","D3","lP","D7","Pu","exec","GJ","Lq","Qi","sq","eo","Ao","no","ki","SL","u7","wp","It","wr","V1","p1","Q7","J","UD","Mt","o","Tq","ye","o0","ee","u3","B9","ru","iu","oD","J0","U7","o7","Bq","_x","Yi","Z8","rB","bJ","L7","s7","fa","y7","No","l7","T7","h7","gr","c7","w7","zL","bi","Ri","U1","LD","ji","ul","g7","$4","a4","sD","T","yD","bD","U3","Hu","Po","o3","p8","C8","ro","d7","lD","L3","BA","EA","B7","Iu","jb","zP","v7","vA","kt","jt","d0","qe","Bn","v9","F9","RB","F7","JA","Y1","$3","YP","fu","V0","y3","io","k7","Co","b7","R7","yB","l3","M8","j7","hD","p7","T3","C7","C9","pi","M3","M7","H7","E0","w0","Du","FA","Do","X1","Z1","h3","V7","db","bq","R0","Ho","w3","dr","uu","pv","Qu","yb","N5","E7","Jq","GS","nd","FI","hI","cI","S7","q7","zq","g3","Uu","Mo","On","ut","I7","uo","Ji","b9","R9","wU","d3","Wh","LE","kU","Yq","CU","MU","x7","nl","B3","At","Qo","ha","cD","GK","Uo","gO","oo","H4","N7","Dn","Ln","X0","ou","Lu","iA","w1","yP","Ze","wD","su","Mi","Lo","gD","O7","KP","G7","J7","z7","Y7","We","K7","X7","v3","so","Z7","pD","W7","_7","$7","pU","gL","Rj","gi","yo","vl","a7","tg","ff","F3","eg","Ot","pA","dD","Ag","Hi","yu","ng","j9","Pg","pa","WB","rg","lo","So","To","TP","ig","fg","Dg","ug","ho","Qg","co","V9","tI","Tu","w2","Vi","nr","H8","bf","J1","P0","hu","Ug","gt","i6","og","Lg","Fm","sg","zf","$A","yg","B8","lg","k3","b3","Ei","wo","De","R3","go","Tg","uP","A0","hg","Ie","Be","hP","cg","S0","XP","ed","p9","U0","gg","wu","Wi","j3","rm","yx","Bo","BD","fA","gu","V8","wP","wn","du","a5","sB","p3","dg","WX","C3","P8","Bg","vg","AP","Fg","mg","kf","Ni","o9","sr","_i","_J","ZP","kg","bg","j0","Rg","Fo","a8","jg","ke","QG","pg","XO","IU","Pd","Cg","Mg","Hg","H3","R","Fr","Xo","dt","CY","Pn","Vg","V3","s8","E3","z0","nU","E8","Tn","qi","hn","i0","Re","S8","T8","Bu","y8","r0","WP","cP","mo","f6","Eg","Te","ko","LL","zA","Fv","CA","_A","AL","vu","xe","Sg","dL","qg","q8","tP","wI","Nb","WO","I3","GB","CL","vn","Zt","jV","td","RV","bV","Tz","Ae","x3","dI","Ig","N3","BI","O3","kd","xg","ue","O1","G3","dE","h0","Ng","bo","NA","a0","Og","Ro","Gg","Jg","createSymmetryRank","considerStereoheterotopicity","encodeAtomCustomLabels","encodeAtomSelection","assignParitiesToTetrahedralN","coordsAre3d","createPseudoStereoGroups","distinguishRacemicOrGroups","tieBreakFreeValenceAtoms","encodeAtomCustomLabelsWithoutRanking","neglectAnyStereoInformation","I1","VW","zg","sj","Yg","Kg","qT","jc","backingJsObject","vD","$H","pV","J3","Ii","le","I8","FD","mD","lF","Fu","WA","jo","MI","Fn","vY","rp","kr","po","Ve","x8","Xg","rt","ft","Zg","ZF","Wg","kD","ku","_g","VI","ze","Vc","Wc","Tc","Sc","Uc","Ps","fX","$g","ag","Mb","EI","jk","kR","Ad","II","z3","Gn","Y3","rd","lh","K3","hB","SD","$e","ux","Mq","OI","ub","RD","l5","K8","xN","fd","Dd","rn","h2","ud","Qd","A1","br","g8","X3","MA","C1","Ud","od","bu","Z3","W3","gP","Ld","yd","Vo","N8","sG","JT","Lc","ld","mv","Td","xt","Eo","OF","KN","dT","zI","k0","G9","hd","cd","_3","qo","Eu","Nu","pd","Qe","Pe","wd","e0","Rr","Ic","$I","S","E","W","$","et","lt","fb","VD","Vr","UT","DB","ae","RT","KD","mT","Bm","rR","Bh","pB","Xd","Wv","PY","CS","HS","Ky","Xy","Zy","Wy","y5","QU","_r","qn","vt","iP","PP","YO","MS","M","zn","wl","Lf","SF","ab","WH","rh","j5","QA","j$","nT","$z","UJ","Uj","C5","eL","jT","t_","ID","Yy","yF","Z6","Ko","mK","JK","W5","zY","t1","Ib","fG","iy","ef","b4","o8","FZ","rJ","NG","Dy","UA","cT","qP","GL","HD","hb","kb","ib","lb","Ce","YD","Yo","n5","yV","lV","Hx","Gs","Ja","ad","jD","gd","Oi","jr","dd","QL","vv","Io","Bd","vd","K5","Sy","FR","Fd","md","D6","Ne","bd","yh","Rd","a3","vs","tT","Kv","qL","Gi","Ec","xo","CD","jd","mF","Jn","pn","aA","px","pe","ve","ix","M9","gy","Cd","Dc","CN","Ru","R1","D0","VA","pk","Iv","pT","Bk","eG","tW","Fe","D$","tt","st","ct","D1","fi","QQ","cn","Dh","ma","oa","hW","ju","Oo","Md","Bc","YA","Gt","Go","O8","Jo","je","Yb","Hd","eT","oj","_P","Vd","fF","XD","e9","Bl","Ed","rc","yPt","Ye","Sd","Pc","sPt","qd","LPt","Id","dP","Ux","X8","k1","Yn","AT","H9","o1","sx","UL","Zq","iv","BP","mQ","jL","xd","Nd","Mr","cx","Od","hA","Gd","zt","Jd","Ui","J8","Jt","ML","lZ","sL","MD","PT","$P","M1","Xk","q0","u5","DA","nK","zd","$8","Qm","zo","pu","rT","Hr","Yd","vP","Kd","fR","iT","Fs","Ue","Zd","$5","Me","hU","Lb","E1","di","l0","Mn","Y9","p0","EQ","Jr","ym","fh","PW","dR","kP","rs","om","RQ","T2","we","FP","x5","EU","o_","Wd","Pt","Tt","Kt","Ct","$t","Ut","Ht","Qt","Nt","e1","Rt","Lt","j1","St","g1","y0","Wb","Mu","G8","_d","D8","Cx","$d","Kn","aP","Sr","zi","fT","Xt","substr","uA","tB","Ac","eB","AB","matchAtomCharge","matchAtomMass","matchDBondToDelocalized","matchAromDBondToDelocalized","NK","nB","Oe","Er","z8","DT","t8","DL","uT","Zo","PB","Xn","uf","z1","QT","n6","lE","Zf","sE","$V","yE","aV","TE","tE","qx","iB","Wo","fB","mU","yk","B0","_o","xx","Nx","$o","uB","iX","qt","Ki","oT","l4","ao","QB","UB","KO","Pb","xu","LT","Su","Zn","Gx","sT","VP","tL","O0","_0","Vu","yT","Yx","_j","Cj","NQ","aD","zr","sR","yX","_s","TK","es","Kx","Ttt","Mh","lY","gq","oB","lT","Cn","Zx","LB","xb","wL","lB","TB","j4","hp","mn","HA","Ir","e8","TT","E9","ED","Hc","aJ","pt","cB","_t","wB","hT","nL","wT","FT","v0","Xi","gB","qu","dB","BB","iN","X9","gT","wy","kn","PL","rL","vB","A8","W0","W9","FB","ZA","oh","mB","eR","mb","Fh","z$","BT","kj","iL","kB","Bs","$R","bB","U4","PE","o4","rE","hV","iE","XZ","Rc","mP","jB","Pr","$D","oN","sm","lN","qD","n8","RP","yt","wt","bn","fL","Yt","vT","L6","s6","CB","xk","cN","MB","HB","lk","VB","EB","qB","IB","xB","NB","OB","Nr","Y0","kA","FN","wx","gx","Or","Zi","G1","mN","Gr","uL","CG","qI","tF","qz","removeAtIndex","xD","lm","JB","f0","zB","_u","S9","h1","kT","YB","KB","bT","wK","XB","IA","bN","n$","RN","hE","Yk","kO","nz","GI","mO","rI","$N","jh","Xr","fP","DP","jI","Wr","cO","ZB","ND","oL","Rn","getAtIndex","CT","JE","mA","MT","_B","oA","oe","Cc","bP","y9","P9","Hs","Ou","$B","Hv","OD","zS","z9","Bz","aB","F0","b6","a9","q9","HT","VT","tv","ev","Av","nv","Pv","GN","Qc","Un","Qs","aX","ET","wG","Tb","ox","_q","aO","pc","yL","Wn","Um","dW","rv","cp","Nk","WV","zx","_V","cl","Gu","he","v_","ST","fv","Sh","el","mI","oi","Yr","Dv","cb","us","vp","zN","lL","IQ","MY","qQ","uh","P_","fn","Ge","uv","Qv","WI","Xm","TL","hL","jY","Uv","ov","Kr","cL","Lv","Fc","vc","AG","YR","sv","yv","lv","I9","Im","Xb","IT","BL","i5","pF","Tv","vL","sA","FL","hv","Ex","GD","cv","xT","SQ","aW","GX","mL","vW","Uk","kL","wv","gv","yc","YQ","o6","mp","tO","u6","c$","ce","dv","Bv","x9","bL","Oc","eO","He","zD","NT","OT","RL","hPt","Qn","t0","Ju","GT","W8","Hn","mm","kv","bv","Rv","jv","Sv","_L","__elementTypeId$","PO","Dl","r8","pL","Cv","Kb","Mv","_h","iO","jx","VE","EE","SE","zT","vh","KA","Vv","Ns","YT","mc","KT","gp","Ev","Je","__elementTypeCategory$","XT","$T","lO","TO","qv","$i","ln","hO","up","C6","Vp","ir","fr","ur","Qr","L8","pf","Ob","o$","ui","Oj","y_","A5","x$","fY","xv","NN","qb","Nv","X4","tc","cE","l8","ec","ZT","WT","zu","Ov","HL","bO","Bb","RO","jO","pO","fp","Gv","N9","Zr","Jv","tA","zv","Sb","Gb","EL","_T","_n","RA","Yv","fy","Yu","Lr","HV","VV","Uh","IL","EO","Fk","eK","cU","QN","Xv","xL","Zv","Ku","xO","_v","$v","NL","av","$n","configurable","defineProperties","eF","JG","GG","ZJ","me","M$","cj","F1","eP","TA","C0","Ty","rP","ge","f9","Em","i9","SP","Ur","h8","AU","B_","c8","rr","Vf","ZQ","Ef","F2","aa","OL","AF","dn","v8","aT","$$","sf","bA","k6","a$","k5","dF","Xu","T1","_9","UI","QI","Tk","H_","Nm","nF","ZI","jm","PF","yN","xA","jf","DU","xf","ZL","FQ","P$","rF","iF","Vz","Zu","Wu","on","_8","JL","se","jn","Rs","DF","de","Ub","YL","vZ","uF","QF","KL","Af","tf","XL","Us","O9","UF","oF","LF","sF","Eh","th","TF","hF","ih","Is","kE","mE","xJ","_Z","cF","eh","$u","wF","gF","Ah","un","l9","bh","BF","nh","Ph","EP","TG","hG","vF","M2","WL","EX","au","FF","Ds","BG","kF","FG","__java$exception","bF","nm","RF","$9","jF","xP","Ma","delete","bG","CF","W1","qG","HF","yA","_R","B2","Hf","qA","RR","cR","qV","Xa","jG","js","pG","MG","tQ","jP","toArray","VF","eQ","EF","tR","L2","IG","JF","Z4","AY","nE","qF","xG","jz","In","IF","Qh","AQ","contains","ZD","Rb","xF","Bp","rl","NF","Jx","DJ","XG","nQ","Pi","GF","PQ","i8","ml","it","Dt","J9","wi","Ee","PA","ntt","Att","CV","$G","aG","$F","zF","YF","KF","eJ","rQ","AJ","WD","XF","_I","bm","qk","nJ","v1","e$","Bj","E2","b2","$L","WF","ett","_F","iQ","qE","qU","sc","iJ","fQ","aF","Mc","Nc","aL","tm","ts","Am","Pm","Tj","Fp","Lh","dp","Yf","JV","oQ","yJ","MR","YK","DQ","er","As","fm","az","Dm","sh","pP","uz","Le","Hp","uQ","um","wh","nf","xI","VG","Th","IN","os","mJ","stack","tY","Vj","y4","hY","QY","Lm","IZ","CX","an","za","$r","vG","V_","Tm","Pf","UQ","rf","_D","IE","gN","hm","yQ","jJ","Hb","cm","wm","eY","gm","wf","dm","U2","CJ","ns","MJ","HJ","Lk","N_","VJ","nA","uK","_a","w$","rG","UU","K_","n9","oPt","qK","bQ","JW","Aj","EJ","vN","fj","_b","vm","NJ","dh","Ql","hi","LR","GV","km","AE","TPt","vV","h4","K0","gh","oV","$j","ch","Rm","Zb","X5","n4","d8","KV","Gy","Jy","DV","zy","r4","i4","uV","f4","QV","UV","Yh","ci","_Q","$Q","uy","Qy","Uy","oy","T6","h6","aQ","v2","Ly","sy","tU","c6","w6","g6","WQ","Mf","Cf","Sn","KQ","XQ","lU","Wa","pm","sz","qJ","Cy","Cm","dQ","eZ","IJ","Mm","Hm","Vm","eU","Sm","B6","v6","nt","t2","qm","qh","FE","G5","ZV","xm","Xs","Qp","Z_","gn","K1","yy","te","Z9","Qa","Ba","FJ","Om","Gm","Jm","zm","Tx","Vq","YJ","ny","K4","VY","cQ","KJ","Ym","K9","Km","J4","Y4","z4","Ti","fV","Y_","ba","g2","ga","Zm","Df","Wm","cc","ez","Az","_m","vX","$m","fs","CP","am","Qz","Uz","tk","MP","Lz","qX","lz","Ak","d6","AA","nk","BU","sQ","VR","wQ","nR","_W","Es","nW","wa","HY","ds","hz","JY","XR","r5","Hz","LY","Pk","rtt","Ptt","itt","cz","wz","ob","hashCode","dz","e2","XA","rk","ik","fk","Dk","mh","vz","HI","mz","uk","kh","Nz","Qk","TQ","BZ","NC","oU","xa","ok","pz","Rh","T5","M4","dU","p4","C4","EV","i_","pI","lQ","m0","HP","vb","wb","tb","op","xV","DK","xz","A2","ti","ei","Gz","u8","U9","Sx","Bf","R$","ss","hk","ck","iU","f8","Jh","zz","En","wk","Zz","lA","ne","gk","Qf","nY","t9","sl","Ll","ll","bU","Tl","containsKey","vk","ph","equals","hQ","hl","ytt","RU","Up","fz","lK","bZ","sX","nj","oK","iV","tr","hZ","Aa","Vb","uY","UY","Uf","mk","oR","Ch","cA","PK","gQ","bk","Rk","o2","kZ","BQ","xR","of","Ck","Mk","Hk","UR","Ws","c5","Vk","Hh","Vh","NR","iR","Ek","MV","oc","Sk","FY","yK","qY","mY","Of","ls","n2","RY","g0","Ih","Ik","I2","W_","xh","Ts","Ok","Gk","ws","OY","Jk","zk","fl","Kk","Nh","$b","vQ","Oh","fU","g4","Gh","gs","Zk","gE","wA","wE","DY","Wk","By","i2","JQ","YZ","ey","R_","kQ","_k","zh","Ay","Nj","aY","$k","ak","MX","Kh","df","Zh","Ab","iK","fK","rb","NS","gR","iG","Xh","CQ","LK","sK","cJ","Db","YV","Qb","d_","gJ","lJ","cause","hc","fc","suppressed","gc","$h","ah","L0","t5","SV","sb","lc","kK","XI","p$","ott","ME","RE","bE","jE","pE","CE","e5","EG","tG","Yz","w8","Kz","HK","Vn","eE","VK","s0","execScript","f2","GZ","D2","N2","SU","OJ","kY","Q8","gb","KR","KS","xS","GE","k2","S5","yW","BW","QZ","VX","yf","OK","Fb","HE","f5","KK","_1","D5","yO","PU","aR","lf","mR","GQ","J5","Tf","pb","Cb","rX","bs","jQ","U5","dc","PG","uX","o5","pQ","L5","ri","Lj","QX","ka","qW","NW","yU","UX","s5","u2","CW","gW","Eb","AR","TX","Cq","qO","WG","BX","ps","MQ","QK","mX","Cs","pX","lj","BR","Ms","V4","I4","S4","e4","N4","vU","FU","E4","x4","q4","R6","O4","xC","SX","HQ","G4","tZ","La","IX","C$","da","NX","OX","hf","YX","Jb","zb","KX","A4","zV","oJ","ZX","ky","Fz","wX","D9","_X","$0","$X","uc","U6","D4","TV","PZ","XJ","eA","dl","_Y","VU","rO","f$","h5","rZ","cf","A9","uZ","Yj","_z","bz","PR","sZ","yZ","Dtt","w5","Vs","DR","wZ","uR","g5","dZ","d5","DZ","PX","LZ","zs","E_","LG","B5","v5","yR","Kj","Oy","lR","OE","xE","NE","F5","py","$6","J6","mC","TR","hR","kc","zJ","b5","qs","sW","qj","Z5","eN","vJ","D_","EZ","qZ","a_","gX","zW","Ra","$_","xZ","NZ","JZ","VQ","R5","UW","zQ","zZ","dj","WY","ca","A6","KZ","wR","gV","CR","pW","Sj","F_","RW","vR","ly","$Z","p5","aZ","rW","bR","jR","pR","iW","fW","VO","$O","M5","Wf","jy","HR","DW","Pp","oW","IK","H5","LW","hJ","vq","Eq","Ss","Y$","lW","XY","ER","SR","qR","V5","IR","qy","hX","atan2","JR","YE","mV","kW","bW","TZ","NO","B4","xX","qa","gZ","jW","gz","Dp","c_","e_","T_","k_","UG","Z$","r$","MW","HW","kp","iY","r9","rz","ftt","OR","E5","GR","kI","SW","IW","q5","OW","zR","ZR","tX","KW","ej","WR","ES","I5","xQ","XW","zK","Ff","vf","$W","mW","E6","S6","Rp","q6","A_","n_","tj","r_","u_","Q_","U8","L_","s_","ty","xy","Qj","Ua","Da","ij","Ks","Pj","NV","Qx","Hq","T$","hj","Tp","zE","G_","w_","BY","Za","Zs","la","ZY","YW","y$","Ij","bj","Os","Zj","r6","j_","G$","rj","nM","cX","iM","DM","m_","UK","$1","CK","be","ta","t6","HU","M_","Q$","Oz","wW","pj","Ta","RG","bY","K$","A$","x_","b_","Js","Dj","uj","mZ","vj","pZ","Ny","MK","I$","na","ie","Q9","Gf","I_","uN","lI","O5","O_","rY","Pz","Ys","h$","q_","Ka","wj","QW","Xj","i$","eW","EW","Pa","H$","Rz","Fj","uU","jN","aj","TC","tN","y6","l6","yj","pJ","FX","AW","Oa","ja","OQ","Jf","N6","z5","Y5","gj","kV","xW","Rx","kx","bx","g_","uW","FW","utt","t$","Mj","c4","IV","mj","CZ","IY","JC","zC","YC","KC","XC","uO","ZC","WC","rK","_C","fZ","$C","HZ","aC","gK","ol","Xf","Utt","L9","v4","s9","$s","as","il","SY","Hj","_$","L$","iz","s$","jX","TN","XV","jp","FV","lastIndexOf","Bx","Ej","oG","d$","MZ","BK","cW","tK","Pl","dV","v$","R2","mG","zX","tp","m$","J$","OG","b$","Py","zj","xj","E$","KI","Iz","jU","xK","LV","sV","Wx","N$","Gj","_5","BE","vE","ic","Jj","M0","X$","CO","OC","Wj","RZ","DG","JS","XX","wPt","Ga","oY","gPt","TW","S_","UZ","ua","j2","I6","Yp","qS","Ap","gU","d4","oX","Ea","DN","uJ","hq","U$","$Y","Jz","Lp","yY","ip","C_","z_","W$","sY","eX","F6","bK","Sa","RJ","p6","_K","Gq","ltt","KY","e6","tV","k4","Ha","OZ","WZ","Va","kX","Gp","O6","My","G6","eC","AC","Hy","z6","PC","Y6","K6","rC","iC","fC","DC","uC","QC","UC","X6","oC","LC","sC","yC","lC","hC","W6","cC","wC","gC","dC","_6","BC","vC","FC","Vy","a6","kC","bC","RC","jC","pC","CC","Ey","MC","HC","t4","VC","EC","SC","qC","IC","u4","C2","_y","$y","u9","Nf","Ia","fN","q$","$a","va","Fa","h_","iq","SZ","w4","vy","Fy","my","T0","G0","OA","b0","fe","Ke","gA","Dx","yp","gI","uI","Ya","oZ","Kp","Xp","Zp","x6","Wp","_p","$p","tC","R4","Qtt","T9","F8","QP","UP","tn","h9","xn","en","P6","GY","qp","Ip","xp","Np","Op","V6","rU","Cp","Mp","j6","B$","VZ","F4","GW","JX","__","pq","PV","rV","oE","DE","UE","uE","QE","fE","jZ","_G","HG","aK","lr","_f","ht","$f","af","tD","Q6","Ul","uM","QM","UM","oM","LM","sM","yM","lM","TM","hM","cM","wM","gM","dM","BM","vM","FM","mM","kM","bM","RM","jM","pM","CM","MM","HM","VM","EM","SM","qM","IM","xM","NM","OM","GM","JM","zM","YM","KM","XM","ZM","WM","_M","$M","aM","tH","eH","AH","PH","rH","iH","fH","DH","uH","QH","UH","oH","LH","sH","yH","lH","TH","hH","cH","wH","gH","dH","BH","vH","FH","mH","kH","bH","RH","jH","pH","CH","MH","HH","VH","EH","SH","qH","IH","xH","NH","OH","GH","Kf","KH","eV","AV","_H","nV","ZH","wc","kl","bl","bc","An","qc","NP","k8","O2","G2","ZE","Rl","WE","_E","$E","aE","tS","eS","AS","Tr","nS","OP","J2","jl","xU","PS","oP","pl","rS","NU","iS","OU","fS","GU","XN","b8","iZ","JH","zH","Iy","YH","XH","Vt","Et","__moduleStartupDone","yn","Rf","hy","bp","cy","M6","H6","Ry","Ep","Sp","Jp","zp","Sf","qf","GC","sU","IP","tM","eM","AM","PM","rM","fM","aH","If","TU","L4","cV","wV","ay","T4","H2","tl","BV","Al","V2","goog","global","VN","BJ","addAll","clear","containsAll","removeAll","retainAll","addAtIndex","addAllAtIndex","dG","setAtIndex","subList","Xz","LX","WN","_N","compareTo","ordinal","Ltt","zG","OV","JO","stt","YG","bX","lX","ZO","kJ","dK","drawDottedLine","MN","getCanMolecule","X_","getEncodedCoordinates","getEncodedMapping","getFinalRank","getGraphAtoms","getGraphIndexes","hasCIPParityDistinctionProblem","invalidateCoordinates","normalizeEnantiomer","setParities","getConformerCount","getNextConformerAsMolecule","Ix","getOneConformerAsMolecule","getPotentialConformerCount","nZ","initializeConformers","strategy","maxTorsionSets","use60degreeSteps","assessDruglikeness","l_","getDetail","qN","getDruglikenessString","ZK","_minimise","getTotalEnergy","btt","Rtt","jtt","addAtom","addFragment","pN","addMissingChirality","addMolecule","addOrChangeAtom","addOrChangeBond","addRing","addRingToAtom","addRingToBond","addSubstituent","canonizeCharge","changeAtom","changeAtomCharge","changeBond","convertStereoBondsToSingleBonds","copyAtom","copyBond","copyMoleculeByBonds","copyMoleculeProperties","deleteAtom","deleteAtomOrBond","sJ","deleteBond","TI","deleteBondAndSurrounding","deleteMarkedAtomsAndBonds","deleteMolecule","deleteSelectedAtoms","findAlleneCenterAtom","findAlleneEndAtom","findAtom","findBINAPChiralityBond","findBond","findRingSystem","getAbsoluteAtomParity","getAbsoluteBondParity","lq","Nq","getAllBonds","getAllConnAtomsPlusMetalBonds","getAromaticRingCount","HO","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","ya","getAtomRadical","getAtomRingBondCount","getAtomRingCount","getAtomX","getAtomY","getAtomZ","getAverageBondLength","getAverageTopologicalAtomDistance","HX","getBond","getBondAngle","getBondBridgeMaxSize","getBondBridgeMinSize","getBondCIPParity","getBondESRGroup","getBondESRType","getBondLength","getBondOrder","getBondParity","getBondPreferredStereoBond","gY","getBondQueryFeatures","getBondQueryFeaturesObject","single","double","triple","delocalized","metalLigand","quadruple","quintuple","notRing","ring","nonAromatic","ringSize","brigdeMin","brigdeSpan","f_","getBondRingSize","getBondType","getBondTypeSimple","getBonds","Ox","getChiralText","getChirality","getDefaultMaxValenceUncharged","IO","YY","getElectronValenceCorrection","getExcludedNeighbourCount","getFisherProjectionParity","getFragmentAtoms","getFragmentNumbers","getFragments","MO","W4","getFreeValence","getHandleHydrogenMap","getHelperArrayStatus","getHoseCodes","TJ","getIDCoordinates","getImplicitHigherValence","getIndex","_4","getLowestFreeValence","getMaxAtoms","getMaxBonds","getMaxValence","getMaxValenceUncharged","getMetalBondedConnAtoms","getMolecularFormula","getMoleculeColor","getMolweight","wY","getName","getNonHydrogenNeighbourCount","getNumberOfHydrogens","KG","getOccupiedValence","getPathBonds","getPathLength","getRingSet","getRotatableBondCount","getStereoCenterCount","getStereoProblem","getSubstituent","getSubstituentSize","getZNeighbour","invalidateHelperArrays","YS","inventCoordinates","is3D","isAlkaliMetal","LO","isAllylicAtom","sI","isAmideTypeBond","RK","isAtomConfigurationUnknown","isAtomMarkedForDeletion","Xq","isAtomParityPseudo","isAtomStereoCenter","isAutoMappedAtom","isBINAPChiralityBond","isBondBackgroundHilited","isBondBridge","isBondForegroundHilited","isBondMarkedForDeletion","$q","isBondParityPseudo","isBondParityUnknownOrNone","isChalcogene","isDelocalizedBond","isEarthAlkaliMetal","sO","isElectronegative","isElectropositive","EY","isFlatNitrogen","isFragment","isHalogene","ON","isMarkedAtom","isMetalAtom","isNaturalAbundance","isNitrogenFamily","isOrganicAtom","isPseudoRotatableBond","isPurelyOrganic","hK","isRingAtom","isRingBond","isSelectedAtom","isSelectedBond","isSimpleHydrogen","lG","isSmallRingAtom","isSmallRingBond","isStabilizedAtom","yI","isStereoBond","markAtomForDeletion","markBondForDeletion","tq","normalizeAmbiguousBonds","removeAtomColors","removeAtomCustomLabels","removeAtomMarkers","removeAtomSelection","hx","removeBondHiliting","removeQueryFeatures","renumberESRGroups","scaleCoords","setAllAtoms","fq","setAllBonds","Dq","setAssignParitiesToNitrogen","xq","setAtomAbnormalValence","setAtomCIPParity","setAtomCharge","setAtomColor","setAtomConfigurationUnknown","setAtomList","setAtomMarker","setAtomParity","setAtomRadical","setAtomSelection","setAtomX","setAtomY","setAtomZ","setBondBackgroundHiliting","vx","setBondCIPParity","setBondESR","setBondForegroundHiliting","Fx","setBondOrder","setBondParity","setBondParityUnknownOrNone","setBondQueryFeature","setChirality","setHelperValidity","RS","setHydrogenProtection","bS","setMaxAtoms","setMaxBonds","setMoleculeColor","jS","setName","setParitiesValid","setStereoBondFromAtomParity","setStereoBondFromBondParity","setStereoBondsFromParity","setToRacemate","setUnknownParitiesToExplicitlyUnknown","shareSameFragment","stripIsotopInfo","SJ","stripSmallFragments","stripStereoInformation","suggestBondType","Ax","supportsImplicitHydrogen","swapAtoms","swapBonds","toIsomericSmiles","createSmarts","includeMapping","kekulizedOutput","toSVG","maxAVBL","inflateToMaxAVBL","inflateToHighResAVBL","chiralTextBelowMolecule","chiralTextAboveMolecule","chiralTextOnFrameTop","chiralTextOnFrameBottom","WW","noTabus","showAtomNumber","showBondNumber","highlightQueryFeatures","showMapping","suppressChiralText","suppressCIPParity","suppressESR","noCarbonLabelWithCustomLabel","noAtomCustomLabels","showSymmetryAny","showSymmetrySimple","showSymmetryStereoHeterotopicity","noImplicitAtomLabelColors","noStereoProblem","noColorOnESRAndCIP","noImplicitHydrogen","drawBondsInGray","J_","toSmarts","toSmiles","translateCoords","validate","zoomAndRotate","zoomAndRotateInit","xtt","Ott","Jtt","Ytt","Ktt","Xtt","Ztt","s1t","h1t","v1t","F1t","m1t","k1t","b1t","p1t","C1t","M1t","H1t","q1t","I1t","O1t","J1t","Y1t","K1t","X1t","W1t","_1t","$1t","t0t","e0t","n0t","P0t","r0t","f0t","D0t","o0t","L0t","T0t","h0t","c0t","w0t","g0t","d0t","B0t","v0t","R0t","j0t","p0t","C0t","H0t","V0t","q0t","eet","Aet","uet","yet","det","Bet","ket","Vet","iAt","fAt","DAt","uAt","QAt","UAt","acceptorCount","GO","donorCount","kG","logP","logPString","S$","logS","vK","logSString","p_","polarSurfaceArea","FO","polarSurfaceAreaString","rotatableBondCount","stereoCenterCount","addCatalyst","addCatalystAt","dq","addProduct","addProductAt","iI","addReactant","addReactantAt","fI","getCatalyst","Oq","getCatalysts","getHighestMapNo","getMergedCopy","WK","getMolecules","getProduct","getProducts","getReactant","getReactants","getReactionCenterMapNos","ia","AX","isPerfectlyMapped","k$","isReactionLayoutRequired","U_","removeCatalysts","yz","IS","toRxn","toRxnV3","AZ","validateMapping","l$","setReactant","ZW","determineAromaticity","getAtomIndex","getBondIndex","_O","getHeteroPosition","cq","getRingAtoms","getRingBonds","getRingSize","getSharedRing","isAromatic","isAtomMember","isBondMember","isDelocalized","wq","qualifiesAsAmideTypeBond","validateMemberIndex","getField","getFieldData","getFieldNames","aI","NY","getNextFieldData","getNextMolFile","F$","findFragmentInMolecule","countMode","DX","getMatchList","QJ","isFragmentInMolecule","setMol","createIndex","jK","LN","sN","getSmartsWarning","parseMolecule","noCoordinates","noStereo","parseReaction","kN","setRandomSeed","SS","assessRisk","cZ","u$","applyTransformation","SG","nX","absoluteWeight","BO","formula","wJ","relativeWeight","vO","clearAll","getGenericEditorArea","getMode","getReaction","moleculeChanged","dJ","toolChanged","Vx","build16x16CursorImage","EK","createNativeDialog","createPopupMenu","openChemistryFile","QO","Mx","fJ","lPt","PN","getOrDefault","putIfAbsent","put","containsValue","keySet","putAll","aN","UN","OO","Kq","AN","done","cPt","Fl","vI","pY","$x","pK","V$","mx","Wz","BACKBONE","NORMAL","NOSTEREO","NOSTEREO_TAUTOMER","TAUTOMER","STRATEGY_ADAPTIVE_RANDOM","STRATEGY_LIKELY_RANDOM","STRATEGY_LIKELY_SYSTEMATIC","STRATEGY_PURE_RANDOM","calculate","RX","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","yG","fromMolfile","fromMolfileWithAtomMap","CI","fromSmiles","getAngle","getAngleDif","getDefaultAverageBondLength","isAtomicNoElectronegative","isAtomicNoElectropositive","setDefaultAverageBondLength","fromMolecules","fromRxn","g$","O$","cY","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","YN","encode","keepAbsoluteCoordinates","sortByIDCode","DI","_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","FK","getKeyIDCode","getSimilarityAngleCosine","oz","getSimilarityTanimoto","tJ","RISK_HIGH","RISK_LOW","RISK_NAMES","RISK_NO","RISK_UNKNOWN","TYPE_IRRITANT","TYPE_MUTAGENIC","TYPE_REPRODUCTIVE_EFFECTIVE","TYPE_TUMORIGENIC","getHoseCodesFromDiastereotopicID","SK","$isInstance","$implements__java_io_Serializable","$implements__java_lang_CharSequence","$implements__java_lang_Cloneable","$implements__java_lang_Comparable","java","lang","Number$impl","copyOf","nG","oO","wO","getIdentityHashCode","getNextHash","getObjectIdentityHashCode","toDoubleFromUnsignedInt","KE","dPt","SO","$gwt","zO","__errFn","__moduleName","__moduleBase","__softPermutationId","__computePropValue","permProps","XE","bPt","Z0","GenericEditorArea","GenericEditorToolbar","GenericUIHelper","Reaction","ReactionEncoder","setOnChangeListener","removeOnChangeListener","isDestroyed","lS","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","TS","define","head","prepend","ConformerGenerator","ForceFieldMMFF94","maxIts","gradTol","funcTol","minimise","changeCustomLabelPosition","hS","getNextCustomAtomLabel","cS","customLabelPosition","wS","includeCustomAtomLabelsAsALines","includeCustomAtomLabelsAsVLines","removeCustomAtomLabels","gS","BS","factorTextSize","autoCrop","autoCropMargin","fontWeight","strokeWidth","vS","FS","Resources","TextEncoder","registerFromUrl","URL","url","href","pPt","fetch","fromEntries","process","getBuiltinModule","dirname","filename","registerFromNodejs","readFileSync","mS","Lut","sut","yut","lut","Canonizer","Tut","CanonizerUtil","hut","cut","DrugScoreCalculator","wut","DruglikenessPredictor","gut","dut","But","MoleculeProperties","vut","Fut","mut","Reactor","kut","but","RingCollection","Rut","SDFileParser","jut","SSSearcher","SSSearcherWithIndex","Cut","SmilesParser","Mut","ToxicityPredictor","Hut","Transformer","Vut","Util","Eut","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","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","imul","toxicityPredictor","druglikenessPredictor","appendAtomPart","getPathAndTorsion","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","guessEncoding","buf","isutf8","sdfPart","currentLabels","isNumeric","keep","exclude","include","modifiers","modifiedValue","sdf","mixedEOL","entriesBoundaries","nextMatch","getEntriesBoundaries","currentLabel","always","statistics","statistic","updateStatistics","stat","noWait","resolve","AbortError","getQuery","moleculesDB","query","format","moleculeCreators","search","exactSearch","exactSearchNoStereo","queryMW","getMW","searchResult","substructureSearchBegin","queryIndex","searcher","substructureSearchEnd","substructureSearch","substructureSearchOR","similaritySearch","processResult","searchAsync","controller","shouldAbort","abortEventListener","signal","performance","subStructureSearchAsync","queryIDCode","candidateMolecule","queries","queryIdCode","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","isNumber","appendEntries","idCodePath","indexPath","coordinatesPath","mwPath","smilesPath","molfilePath","pushEntry","appendCSV","csv","Papa","firstElement","moleculeCreator","moleculeField","lowerField","appendSDF","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","highlight","extendedIDs","_atoms","fragmentAcyclicBonds","calculateHoseCodes","parentIDCode","openchemlib_utils_1","cleavedBonds","getRingsInfo_1","getRingsInfo","ringSet","ringBonds","nbRingForBonds","bondIndex","ringIndex","nbRings","getFragmentableRings","ringsInfo","getRingsInfo_js_1","fragmentableRingBonds","second","end","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","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","MAYBE_ITERATOR_SYMBOL","ReactNoopUpdateQueue","isMounted","enqueueForceUpdate","enqueueReplaceState","enqueueSetState","emptyObject","Component","context","updater","refs","ComponentDummy","PureComponent","isReactComponent","setState","partialState","forceUpdate","pureComponentPrototype","isPureReactComponent","isArrayImpl","ReactSharedInternals","hasOwnProperty","ReactElement","owner","isValidElement","userProvidedKeyEscapeRegex","getElementKey","escaperLookup","noop$1","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","noop","react_production","Children","forEachFunc","forEachContext","only","Profiler","StrictMode","Suspense","__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE","act","cloneElement","childArray","createContext","defaultValue","_currentValue","_currentValue2","_threadCount","Provider","Consumer","_context","childrenLength","defaultProps","createRef","forwardRef","render","lazy","memo","compare","startTransition","scope","prevTransition","currentTransition","returnValue","onStartTransitionFinish","unstable_useCacheRefresh","useCacheRefresh","use","usable","useActionState","permalink","useCallback","deps","useContext","Context","useDebugValue","useDeferredValue","initialValue","useEffect","useId","useImperativeHandle","useInsertionEffect","useLayoutEffect","useMemo","useOptimistic","passthrough","reducer","useReducer","initialArg","useRef","useState","useSyncExternalStore","subscribe","getSnapshot","getServerSnapshot","useTransition","reactModule","React","formatProdErrorMessage","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","localSetTimeout","localClearTimeout","localSetImmediate","advanceTimers","currentTime","timer","startTime","expirationTime","handleTimeout","requestHostCallback","firstTimer","requestHostTimeout","schedulePerformWorkUntilDeadline","isMessageLoopRunning","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_continueExecution","unstable_forceFrameRate","fps","unstable_getCurrentPriorityLevel","unstable_getFirstCallbackNode","unstable_next","unstable_pauseExecution","unstable_requestPaint","unstable_runWithPriority","unstable_scheduleCallback","delay","unstable_shouldYield","unstable_wrapCallback","parentPriorityLevel","schedulerModule","Scheduler","ReactDOM","isValidContainer","REACT_LEGACY_ELEMENT_TYPE","REACT_PROVIDER_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_OFFSCREEN_TYPE","REACT_MEMO_CACHE_SENTINEL","getIteratorFn","REACT_CLIENT_REFERENCE","getComponentNameFromType","displayName","innerType","describeBuiltInComponentFrame","reentry","describeNativeComponentFrame","construct","previousPrepareStackTrace","prepareStackTrace","RunInRootFrame","DetermineComponentFrameRoot","Fake","control","x$0","x$1","catch","sample","namePropDescriptor","getOwnPropertyDescriptor","_RunInRootFrame$Deter","sampleStack","controlStack","sampleLines","controlLines","frame","describeFiber","fiber","getStackByFiberInDevAndProd","workInProgress","return","getNearestMountedFiber","nearestMounted","alternate","flags","getSuspenseInstanceFromFiber","suspenseState","memoizedState","dehydrated","assertIsMounted","findCurrentHostFiberImpl","sibling","ReactDOMSharedInternals","sharedNotPendingObject","pending","method","valueStack","createCursor","contextStackCursor","contextFiberStackCursor","rootInstanceStackCursor","hostTransitionProviderCursor","pushHostContainer","nextRootInstance","documentElement","namespaceURI","getOwnHostContext","parentNode","tagName","getChildHostContextProd","popHostContainer","pushHostContext","JSCompiler_inline_result","popHostContext","HostTransitionContext","scheduleCallback$3","cancelCallback$1","shouldYield","requestPaint","getCurrentPriorityLevel","ImmediatePriority","UserBlockingPriority","NormalPriority$1","LowPriority","IdlePriority","log$1","unstable_setDisableYieldValue","rendererID","injectedHook","setIsStrictModeForDevtools","newIsStrictMode","setStrictMode","nextTransitionLane","nextRetryLane","getHighestPriorityLanes","lanes","pendingSyncLanes","getNextLanes","root","wipLanes","pendingLanes","nextLanes","suspendedLanes","pingedLanes","warmLanes","finishedLanes","nonIdlePendingLanes","checkIfRootIsPrerendering","renderLanes","computeExpirationTime","lane","claimNextTransitionLane","claimNextRetryLane","createLaneMap","initial","laneMap","markRootUpdated$1","updateLane","markSpawnedDeferredLane","spawnedLane","entangledLanes","spawnedLaneIndex","entanglements","markRootEntangled","rootEntangledLanes","index$8","lanesToEventPriority","resolveUpdatePriority","updatePriority","getEventPriority","randomKey","internalInstanceKey","internalPropsKey","internalContainerInstanceKey","internalEventHandlersKey","internalEventHandlerListenersKey","internalEventHandlesSetKey","internalRootNodeResourcesKey","internalHoistableMarker","detachDeletedInstance","getClosestInstanceFromNode","targetNode","targetInst","getParentSuspenseInstance","getInstanceFromNode","getNodeFromInstance","inst","stateNode","getResourcesFromRoot","resources","hoistableStyles","hoistableScripts","markNodeAsHoistable","allNativeEvents","registrationNameDependencies","registerTwoPhaseEvent","registrationName","dependencies","registerDirectEvent","canUseDOM","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","currentReplayingEvent","getEventTarget","nativeEvent","srcElement","correspondingUseElement","restoreTarget","restoreQueue","restoreStateOfTarget","internalInstance","querySelectorAll","otherNode","otherProps","isInsideEventHandler","batchedUpdates$1","flushSyncWork$1","getListener","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$283","isSupported$jscomp$inline_418","element$jscomp$inline_419","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","restoreSelection","priorSelectionInformation","curFocusedElem","focusedElem","priorSelectionRange","selectionRange","selectionStart","selectionEnd","getSelection","endMarker","rangeCount","anchorNode","anchorOffset","focusNode","focusOffset","createRange","setStart","removeAllRanges","addRange","setEnd","scrollLeft","scrollTop","skipSelectionChangeEvent","activeElementInst","lastSelection","mouseDown","constructSelectEvent","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","CapturedStacks","createCapturedValueAtFiber","forkStack","forkStackIndex","treeForkProvider","treeForkCount","idStack","idStackIndex","treeContextProvider","treeContextId","treeContextOverflow","pushTreeFork","totalChildren","pushTreeId","baseIdWithLeadingBit","baseLength","numberOfOverflowBits","pushMaterializedTreeId","popTreeContext","hydrationParentFiber","nextHydratableInstance","hydrationErrors","rootOrSingletonContext","HydrationMismatchException","throwOnHydrationMismatch","queueHydrationError","prepareToHydrateHostInstance","instance","memoizedProps","listenToNonDelegatedEvent","mediaEventTypes","suppressHydrationWarning","checkForUnmatchedText","popover","onScroll","onScrollEnd","onClick","onclick","popToNextHostParent","popHydrationState","JSCompiler_temp","shouldClear","shouldSetTextContent","getNextHydratable","resetHydrationState","SuspenseException","SuspenseyCommitException","noopSuspenseyCommitThenable","isThenableResolved","noop$3","trackUsedThenable","thenableState","workInProgressRoot","shellSuspendCounter","fulfilledThenable","rejectedThenable","suspendedThenable","getSuspendedThenable","thenableState$1","thenableIndexCounter$1","unwrapThenable","coerceRef","throwOnInvalidObjectType","returnFiber","newChild","resolveLazy","lazyType","createChildReconciler","shouldTrackSideEffects","deleteChild","childToDelete","deletions","deleteRemainingChildren","currentFirstChild","mapRemainingChildren","existingChildren","useFiber","pendingProps","createWorkInProgress","placeChild","newFiber","lastPlacedIndex","newIndex","placeSingleChild","updateTextNode","createFiberFromText","updateElement","elementType","updateFragment","createFiberFromTypeAndProps","updatePortal","portal","createFiberFromPortal","createFiberFromFragment","createChild","readContextDuringReconciliation","updateSlot","oldFiber","updateFromMap","newIdx","reconcileChildFibersImpl","newChildren","resultingFirstChild","previousNewFiber","nextOldFiber","reconcileChildrenArray","reconcileChildrenIterator","firstChildFiber","createFiberImplClass","reconcileChildFibers","mountChildFibers","currentTreeHiddenStackCursor","prevEntangledRenderLanesCursor","pushHiddenContext","entangledRenderLanes","baseLanes","reuseHiddenContextOnStack","popHiddenContext","suspenseHandlerStackCursor","shellBoundary","pushPrimaryTreeSuspenseHandler","handler","suspenseStackCursor","pushOffscreenSuspenseHandler","reuseSuspenseHandlerOnStack","popSuspenseHandler","findFirstSuspended","revealOrder","AbortControllerLocal","AbortController","listener","scheduleCallback$2","NormalPriority","CacheContext","createCache","refCount","releaseCache","currentEntangledListeners","currentEntangledPendingCount","currentEntangledLane","currentEntangledActionThenable","pingEngtangledActionScope","prevOnStartTransitionFinish","entangledListeners","requestTransitionLane","entangleAsyncAction","resumedCache","peekCacheFromPool","cacheResumedFromPreviousRender","pooledCache","pushTransition","offscreenWorkInProgress","prevCachePool","pool","getSuspendedCache","cacheFromPool","currentlyRenderingFiber$1","currentHook","workInProgressHook","didScheduleRenderPhaseUpdate","didScheduleRenderPhaseUpdateDuringThisPass","shouldDoubleInvokeUserFnsInHooksDEV","localIdCounter","thenableIndexCounter","globalClientIdCounter","throwInvalidHookError","areHookInputsEqual","nextDeps","prevDeps","renderWithHooks","secondArg","nextRenderLanes","updateQueue","HooksDispatcherOnMount","HooksDispatcherOnUpdate","renderWithHooksAgain","finishRenderingHooks","ContextOnlyDispatcher","didRenderTooFewHooks","didReceiveUpdate","checkIfContextChanged","numberOfReRenders","lastEffect","events","stores","memoCache","HooksDispatcherOnRerender","TransitionAwareHostComponent","dispatcher","maybeThenable","useThenable","checkDidRenderIdHook","didRenderIdHook","bailoutHooks","resetHooksOnUnwind","mountWorkInProgressHook","hook","baseState","baseQueue","updateWorkInProgressHook","nextCurrentHook","nextWorkInProgressHook","readContext","useMemoCache","basicStateReducer","updateReducer","updateReducerImpl","lastRenderedReducer","pendingQueue","baseFirst","newBaseQueueFirst","newBaseQueueLast","didReadFromEntangledAsyncAction$54","workInProgressRootRenderLanes","revertLane","hasEagerState","eagerState","workInProgressRootSkippedLanes","lastRenderedState","dispatch","rerenderReducer","lastRenderPhaseUpdate","updateSyncExternalStore","isHydrating$jscomp$0","snapshotChanged","updateEffect","subscribeToStore","pushEffect","updateStoreInstance","pushStoreConsistencyCheck","renderedSnapshot","nextSnapshot","checkIfSnapshotChanged","forceStoreRerender","latestGetSnapshot","scheduleUpdateOnFiber","mountStateImpl","initialStateInitializer","updateOptimisticImpl","dispatchActionState","actionQueue","setPendingState","isRenderPhaseUpdate","actionNode","isTransition","runActionStateAction","prevState","handleActionReturnValue","onActionError","error$60","onActionSuccess","notifyActionListeners","actionStateReducer","mountActionState","initialStateProp","ssrFormState","formState","JSCompiler_inline_result$jscomp$0","inRootOrSingleton","dispatchSetState","dispatchOptimisticSetState","updateActionState","updateActionStateImpl","stateHook","currentStateHook","actionQueueHook","actionStateActionEffect","rerenderActionState","updateRef","mountEffectImpl","fiberFlags","hookFlags","updateEffectImpl","mountEffect","updateInsertionEffect","updateLayoutEffect","imperativeHandleEffect","refCleanup","updateImperativeHandle","mountDebugValue","updateCallback","updateMemo","nextCreate","mountDeferredValueImpl","requestDeferredLane","updateDeferredValueImpl","prevValue","pendingState","finishedState","previousPriority","thenableWithOverride","dispatchSetStateInternal","requestUpdateLane","noop$2","startHostTransition","formFiber","formData","ensureFormComponentIsStateful","requestFormReset$1","existingStateHook","initialResetState","updateId","updateRefresh","refreshCache","provider","root$63","enqueueUpdate","createUpdate","entangleTransitions","dispatchReducerAction","enqueueRenderPhaseUpdate","entangleTransitionUpdate","currentState","throwIfDuringRender","queueLanes","identifierPrefix","booleanOrThenable","applyDerivedStateFromProps","getDerivedStateFromProps","nextProps","classComponentUpdater","_reactInternals","checkShouldComponentUpdate","oldProps","newProps","nextContext","shouldComponentUpdate","callComponentWillReceiveProps","componentWillReceiveProps","UNSAFE_componentWillReceiveProps","resolveClassComponentProps","baseProps","propName$67","defaultOnUncaughtError","defaultOnCaughtError","defaultOnRecoverableError","logUncaughtError","errorInfo","onUncaughtError","componentStack","e$68","logCaughtError","boundary","onCaughtError","errorBoundary","e$69","createRootErrorUpdate","createClassErrorUpdate","initializeClassErrorUpdate","getDerivedStateFromError","componentDidCatch","legacyErrorBoundariesThatAlreadyFailed","SelectiveHydrationException","reconcileChildren","nextChildren","updateForwardRef","propsWithoutRef","prepareToReadContext","bailoutOnAlreadyFinishedWork","updateMemoComponent","shouldConstruct","updateSimpleMemoComponent","checkScheduledUpdateOrContext","prevProps","updateFunctionComponent","updateOffscreenComponent","nextIsDetached","_pendingVisibility","markRef","deferHiddenOffscreenComponent","cachePool","nextBaseLanes","propagateParentContextChanges","replayFunctionComponent","updateClassComponent","contextType","initializeUpdateQueue","getSnapshotBeforeUpdate","UNSAFE_componentWillMount","componentWillMount","processUpdateQueue","suspendIfUpdateReadFromEntangledAsyncAction","componentDidMount","unresolvedOldProps","oldContext","contextType$jscomp$0","hasForceUpdate","cloneUpdateQueue","UNSAFE_componentWillUpdate","componentWillUpdate","componentDidUpdate","mountHostRootWithoutHydrating","SUSPENDED_MARKER","treeContext","retryLane","mountSuspenseOffscreenState","getRemainingWorkInPrimaryTree","primaryTreeDidDefer","workInProgressDeferredLane","updateSuspenseComponent","showFallback","didSuspend","JSCompiler_temp$jscomp$0","nextInstance","overflow","fallback","mountWorkInProgressOffscreenFiber","mountSuspensePrimaryChildren","retrySuspenseComponentWithoutHydrating","digest","dgst","renderDidSuspendDelayIfPossible","retryDehydratedSuspenseBoundary","_reactRetry","subtreeFlags","primaryChildren","offscreenProps","createFiberFromOffscreen","scheduleSuspenseWorkOnFiber","propagationRoot","scheduleContextWorkOnParentPath","initSuspenseListRenderState","isBackwards","tail","lastContentRow","tailMode","renderState","rendering","renderingStartTime","updateSuspenseListComponent","beginWork","pushProvider","didSuspendBefore","attemptEarlyBailoutIfNoScheduledUpdate","lazyComponent","propagateContextChanges","isDehydrated","getResource","getOwnerDocumentFromRootContainer","setInitialProperties","resolveSingletonInstance","anyProps","rel","src","canHydrateInstance","canHydrateTextInstance","pooledCacheLanes","valueCursor","currentlyRenderingFiber","lastContextDependency","providerFiber","popProvider","contexts","forcePropagateEntireTree","nextFiber","firstContext","dependency","isInsidePropagationBailout","currentParent","currentDependencies","memoizedValue","readContextForConsumer","firstBaseUpdate","lastBaseUpdate","shared","hiddenCallbacks","callbacks","executionContext","enqueueCapturedUpdate","capturedUpdate","newLast","didReadFromEntangledAsyncAction","workInProgress$jscomp$0","instance$jscomp$0","lastPendingUpdate","firstPendingUpdate","isHiddenUpdate","callCallback","commitCallbacks","commitHookEffectListMount","finishedWork","firstEffect","captureCommitPhaseError","commitHookEffectListUnmount","nearestMountedAncestor$jscomp$0","nearestMountedAncestor","commitClassCallbacks","safelyCallComponentWillUnmount","componentWillUnmount","safelyAttachRef","instanceToUse","safelyDetachRef","error$112","commitHostMount","autoFocus","srcSet","srcset","commitHostUpdate","domElement","lastProps","propKey","lastProp","setProp","propKey$203","propKey$219","propKey$224","propKey$229","setPropOnCustomElement","propKey$234","updateProperties","isHostParent","getHostSibling","insertOrAppendPlacementNodeIntoContainer","insertBefore","appendChild","_reactRootContainer","insertOrAppendPlacementNode","offscreenSubtreeIsHidden","offscreenSubtreeWasHidden","needsFormReset","PossiblyWeakSet","WeakSet","nextEffect","shouldFireAfterActiveInstanceBlur","commitLayoutEffectOnFiber","finishedRoot","recursivelyTraverseLayoutEffects","__reactInternalSnapshotBeforeUpdate","error$111","commitSuspenseHydrationCallbacks","prevOffscreenSubtreeIsHidden","prevOffscreenSubtreeWasHidden","recursivelyTraverseReappearLayoutEffects","detachFiberAfterEffects","hostParent","hostParentIsContainer","recursivelyTraverseDeletionEffects","commitDeletionEffectsOnFiber","deletedFiber","onCommitFiberUnmount","removeChild","prevHostParent","prevHostParentIsContainer","attributes","removeAttributeNode","prevHostParentIsContainer$119","clearSuspenseBoundary","retryIfBlockedOn","attachSuspenseRetryListeners","wakeables","retryCache","_retryCache","getRetryCache","wakeable","retry","resolveRetryWakeable","recursivelyTraverseMutationEffects","root$jscomp$0","parentFiber","commitMutationEffectsOnFiber","currentHoistableRoot","commitReconciliationEffects","hoistableRoot","currentResource","getElementsByTagName","querySelector","maybeNodes","getHydratableHoistableCache","content","httpEquiv","charSet","mountHoistable","acquireResource","nextNode","tagCaches","getHoistableRoot","recursivelyResetForms","globalMostRecentFallbackTime","_current","recursivelyTraverseDisappearLayoutEffects","retryQueue","parent$jscomp$0","parent$113","parent$115","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","accumulateSuspenseyCommitOnFiber","resource","suspendedState","matchMedia","loading","getStyleKey","getStylesheetSelectorFromKey","onUnsuspend","stylesheetPropsFromRawProps","preloadPropsMap","adoptPreloadPropsForStylesheet","linkInstance","reject","stylesheets","suspendResource","previousHoistableRoot","detachAlternateSiblings","previousFiber","recursivelyTraversePassiveUnmountEffects","commitPassiveUnmountEffectsInsideOfDeletedTree_begin","commitPassiveUnmountOnFiber","recursivelyTraverseDisconnectPassiveEffects","deletedSubtreeRoot","FiberNode","resetWorkInProgress","fiberTag","hostContext","itemProp","onLoad","onError","isHostHoistableType","primaryChildInstance","_pendingMarkers","_transitions","detach","attach","pendingChildren","markUpdate","preloadResourceAndSuspendIfNeeded","preloadResource","scheduleRetryEffect","workInProgressSuspendedRetryLanes","cutOffTailIfNeeded","hasRenderedATailFallback","lastTailNode","lastTailNode$131","bubbleProperties","completedWork","didBailout","newChildLanes","child$132","completeWork","pendingContext","queueRecoverableErrors","createElementNS","createTextNode","cache$144","listenToAllSupportedEvents","workInProgressRootExitStatus","workInProgressRootRenderTargetTime","unwindWork","unwindInterruptedWork","interruptedWork","DefaultAsyncDispatcher","getCacheForType","resourceType","cacheForType","PossiblyWeakMap","workInProgressSuspendedReason","workInProgressThrownValue","workInProgressRootDidSkipSuspendedSiblings","workInProgressRootIsPrerendering","workInProgressRootDidAttachPingListener","workInProgressRootInterleavedUpdatedLanes","workInProgressRootPingedLanes","workInProgressRootConcurrentErrors","workInProgressRootRecoverableErrors","workInProgressRootDidIncludeRecursiveRenderUpdate","workInProgressTransitions","rootDoesHavePassiveEffects","rootWithPendingPassiveEffects","pendingPassiveEffectsLanes","pendingPassiveEffectsRemainingLanes","pendingPassiveTransitions","suspenseHandler","cancelPendingCommit","prepareFreshStack","markRootSuspended","ensureRootIsScheduled","performWorkOnRoot","forceSync","shouldTimeSlice","expiredLanes","exitStatus","prevExecutionContext","prevDispatcher","pushDispatcher","prevAsyncDispatcher","pushAsyncDispatcher","thrownValue","throwAndUnwindWorkLoop","replaySuspendedUnitOfWork","hostFiber","completeUnitOfWork","resetWorkInProgressStack","workLoopConcurrent","thrownValue$166","handleThrow","renderRootConcurrent","renderRootSync","renderWasConcurrent","isRenderConsistentWithExternalStores","errorRecoveryDisabledLanes","wasRootDehydrated","timeoutHandle","scheduleTimeout","commitRootWhenReady","recoverableErrors","transitions","didIncludeRenderPhaseUpdate","updatedLanes","suspendedRetryLanes","didSkipSuspendedSiblings","suspendedCommitReason","completedRenderStartTime","completedRenderEndTime","unsuspend","insertSuspendedStylesheets","commit","stylesheetTimer","waitForCommitToBeReady","commitRoot","check","didAttemptEntireTree","expirationTimes","index$6","flushSyncWorkAcrossRoots_impl","cancelTimeout","allEntangledLanes","index$4","shouldYieldForPrerendering","unitOfWork","workLoopSync","thrownValue$164","performUnitOfWork","suspendedReason","rootRenderLanes","attachPingListener","markerInstances","wrapperError","throwException","unwindUnitOfWork","skipSiblings","previousUpdateLanePriority","renderPriorityLevel","flushPassiveEffects","callbackNode","callbackPriority","remainingLanes","previouslyPendingLanes","index$7","hiddenUpdatesForLane","markRootFinished","scheduleCallback$1","eventsEnabled","_enabled","e$20","indexWithinAnchor","indexWithinFocus","selectionInformation","resolvedPrevProps","clearContainerSparingly","commitBeforeMutationEffects","releaseRootPooledCache","onCommitFiberRoot","onCommitRoot","onRecoverableError","commitRootImpl","root$170","renderPriority","onPostCommitFiberRoot","captureCommitPhaseErrorOnRoot","rootFiber","pingCache","threadIDs","pingSuspendedRoot","retryTimedOutBoundary","boundaryFiber","firstScheduledRoot","lastScheduledRoot","didScheduleMicrotask","mightHavePendingSyncWork","isFlushingWork","currentEventTransitionLane","processRootScheduleInMicrotask","scheduleMicrotask","syncTransitionLanes","onlyLegacy","didPerformSomeWork","root$172","performSyncWorkOnRoot","currentPopstateTransitionEvent","shouldAttemptEagerTransition","scheduleTaskForRootDuringMicrotask","index$5","performWorkOnRootViaSchedulerTask","didTimeout","originalCallbackNode","workInProgressRootRenderLanes$jscomp$0","coerceFormActionProp","actionProp","createFormDataWithSubmitter","submitter","FormData","i$jscomp$inline_1439","eventName$jscomp$inline_1440","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","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$186","parentNamespace","dangerouslySetInnerHTML","localPromise","queueMicrotask","handleErrorInNextTick","parentInstance","suspenseInstance","targetInstance","previousSibling","rootContainerInstance","preconnectsSet","previousDispatcher","previousWasRendering","wasRendering","formInst","preconnectAs","globalDocument","preloadSelector","getScriptKey","getScriptSelectorFromKey","scripts","adoptPreloadPropsForScript","link","insertStylesheet","limitedEscapedHref","currentProps","preloadProps","styles$242","resource$243","hrefLang","rawProps","styleProps","instance$248","prior","stylesheetProps","scriptProps","keyAttribute","caches","nodeKey","precedencesByRoot","insertStylesheetIntoRoot","precedences","FiberRootNode","hydrate","incompleteTransitions","createFiberRoot","initialChildren","hydrationCallbacks","isStrictMode","transitionCallbacks","getContextForSubtree","parentComponent","updateContainerImpl","markRetryLaneImpl","markRetryLaneIfNotHydrated","attemptContinuousHydration","blockedOn","findInstanceBlockingEvent","return_targetInst","clearIfContinuousEvent","queuedFocus","accumulateOrCreateContinuousQueuedReplayableEvent","queuedDrag","queuedMouse","queuedPointers","queuedPointerCaptures","queueIfContinuousEvent","discreteReplayableEvents","findInstanceBlockingTarget","hasScheduledReplayAttempt","queuedExplicitHydrationTargets","existingQueuedEvent","targetContainers","attemptExplicitHydrationTarget","queuedTarget","priority","runWithPriority","attemptReplayContinuousQueuedEvent","queuedEvent","nextBlockedOn","nativeEventClone","attemptReplayContinuousQueuedEventInMap","replayUnblockedEvents","scheduleCallbackIfUnblocked","unblocked","lastScheduledReplayQueue","scheduleReplayQueueIfNeeded","formReplayingQueue","submitterOrAction","unblock","$$reactFormReplay","formProps","ReactDOMRoot","internalRoot","_internalRoot","ReactDOMHydrationRoot","unmount","unstable_scheduleHydration","isomorphicReactPackageVersion$jscomp$inline_1686","componentOrElement","parentA","parentB","didFindChild","child$2","findCurrentFiberUsingSlowPath","internals$jscomp$inline_2165","bundleType","rendererPackageName","currentDispatcherRef","findFiberByHostInstance","reconcilerVersion","hook$jscomp$inline_2166","isDisabled","supportsFiber","inject","reactDomClient_production","createRoot","unstable_strictMode","unstable_transitionCallbacks","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","addNTerm","nTerm","addITerm","iTerm","addCTerm","cTerm","maxInternal","minInternal","digestPeptide_1","digestPeptide","enzyme","minMissed","maxMissed","minResidue","maxResidue","regexp","getRegexp","nbResidue","__esModule","__createBinding","splitPeptide_js_1","splitPeptide","IEP","getColorForIEP","calculateCharge","__importStar","__exportStar","fragmentPeptide_1","digestion","protonation","protonationPH","peptide_1","digests","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","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","bits","lencode","distcode","lenbits","distbits","sane","havedict","wbits","ncode","nlen","ndist","have","lens","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","SpectrumGenerator","peakWidthFct","maxPeakHeight","shapeGenerator","assertNumber","assertInteger","addPeaks","addPeak","xPosition","peakFWHM","peakWidth","peakShapeOptions","shapeOptions","widthLeft","widthRight","firstValue","firstPoint","lastPoint","addBaseline","baselineFct","addNoise","noise","getSpectrum","minPeakHeight","axis2D","peakCoordinates","convertWidthToFWHM","widthData","Spectrum2DGenerator","calculeIntervals","yPosition","xIndex","minMaxZ","minZ","maxZ","generatorOptions","peakOptions","addPeaksOptions","joinX_1","joinX","sortX","entryA","entryB","composition","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","ySorted","xSorted","relativeValue","distCopy","maxToOne","closestPointX","getDerivedCompositionInfo","shortComposition","shortLabel","isotopeLabel","IsotopicDistribution_1","IsotopicDistribution","spectrum_generator_1","getDerivedCompositionInfo_1","MINIMAL_FWHM","confidence","partOriginal","cachedDistribution","totalDistribution","newDistribution","isotopicDistribution","absoluteChargeOrOne","deltaNeutrons","finalDistribution","sumBefore","getCSV","xLabel","yLabel","numberXDecimals","numberYDecimals","getMaxY","getSumY","getXY","flatEntries","auto","Comparator","isotopic_distribution_1","minSimilarity","experimental","theoretical","experimentalInfo","thereoticalInfo","quantity","_ref","module","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","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","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","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","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","searchInProperty","tokenLength","termsFound","termsFoundLength","propertiesToSearch","boost","relevance","keywordsCount","fullMatches","remainingResults","fid","additionalResults","searchByWhereClause","filters","filterKeys","filtersMap","filteredIDs","reqOperation","inside","distanceInMeters","addGeoResult","filteredIDsResults","addFindResult","operationOpt","operationValue","getSearchableProperties","getSearchablePropertiesWithTypes","rawIndexes","rawVectorIndexes","dumpVectorIndexes","savedIndexes","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","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","validateComponents","components","defaultComponents","rawKey","documentsStore","MODE_FULLTEXT_SEARCH","MODE_HYBRID_SEARCH","MODE_VECTOR_SEARCH","kInsertions","kRemovals","emitWarning","trackInsertion","trackRemoval","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","sortAsc","sortDesc","sortingPredicateBuilder","getFacets","facetsConfig","facets","allIDs","allDocs","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","combinations","calculateCombination","combinationsLength","combination","combinationLength","groupsLength","aggregationValue","arrs","innerFullTextSearch","propertiesToSearchWithTypes","uniqueDocsIDs","where","defaultBM25Params","applyDefault","fullTextSearch","timeStart","performSearchLogic","shouldCalculateFacets","distinctOn","includeVectors","isPreflight","preflight","uniqueDocsArray","docsWithIdAndScore","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","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","beforeUpdate","afterUpdate","beforeInsertMultiple","afterUpdateMultiple","beforeUpdateMultiple","afterCreate","runAfterCreate","newId","updateAsync","updateSync","docsLength","newIds","updateMultipleAsync","updateMultipleSync","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","nbCompoundsEntryA","nbCompoundsEntryB","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","firstIndex","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","getPeakWidthFct","massOptions","groupColumnsBySign","mapped","positiveRows","columnIndexInK","addUniqueKeyToColumns","cssls","XtX","XtY","Pset","choXtX","luXtX","sortedPset","sortedEset","sortCollectionSet","cols2Solve","vars","setDifference","optimality","maxIter","Fset","gradientTolerance","Jset","fullSet","colIndex","notPset","fcnnls","initialisation","infeasIndex","Hset","hRowColIdx","negRowColIdx","alphaMin","minIdx","idx2zero","newParam","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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