{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///./node_modules/ml-array-utils/src/getEquallySpaced.js","webpack:///./node_modules/ml-fft/src/fftlib.js","webpack:///./node_modules/ml-optimize-lorentzian/node_modules/ml-curve-fitting/src/algebra.js","webpack:///./node_modules/jcampconverter/src/index.js","webpack:///./node_modules/ml-stat/array.js","webpack:///./node_modules/ml-optimize-lorentzian/node_modules/ml-matrix/src/dc/util.js","webpack:///./node_modules/spectra-data/src/SD.js","webpack:///./node_modules/ml-optimize-lorentzian/node_modules/ml-matrix/src/matrix.js","webpack:///./node_modules/ml-matrix/src/matrix.js","webpack:///./node_modules/jszip/lib/utils.js","webpack:///webpack/bootstrap 3b729be728ed5a5b4d68","webpack:///./node_modules/pako/lib/utils/common.js","webpack:///./node_modules/ml-matrix/src/views/base.js","webpack:///./node_modules/jszip/lib/support.js","webpack:///./node_modules/ml-stat/index.js","webpack:///./node_modules/ml-optimize-lorentzian/node_modules/ml-matrix/src/index.js","webpack:///./node_modules/ml-matrix/src/util.js","webpack:///./node_modules/ml-array-min/src/index.js","webpack:///./node_modules/ml-array-max/src/index.js","webpack:///./node_modules/jszip/lib/base64.js","webpack:///./node_modules/jszip/lib/object.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/jszip/lib/compressions.js","webpack:///./node_modules/pako/lib/zlib/messages.js","webpack:///./node_modules/jszip/lib/nodeBuffer.js","webpack:///./node_modules/ml-matrix/src/index.js","webpack:///./node_modules/ml-matrix/src/dc/util.js","webpack:///./node_modules/ml-hclust/src/Cluster.js","webpack:///./node_modules/spectra-data/src/index.js","webpack:///./node_modules/ml-array-utils/src/index.js","webpack:///./node_modules/extend/index.js","webpack:///./node_modules/ml-savitzky-golay-generalized/node_modules/ml-stat/array.js","webpack:///./node_modules/spectra-data/src/filters/Filters.js","webpack:///./node_modules/ml-fft/src/index.js","webpack:///./node_modules/brukerconverter/src/brukerconverter.js","webpack:///./node_modules/buffer/index.js","webpack:///./node_modules/pako/lib/zlib/adler32.js","webpack:///./node_modules/pako/lib/zlib/crc32.js","webpack:///./node_modules/pako/lib/utils/strings.js","webpack:///./node_modules/pako/lib/zlib/zstream.js","webpack:///./node_modules/pako/lib/zlib/constants.js","webpack:///./node_modules/jszip/lib/signature.js","webpack:///./node_modules/jszip/lib/defaults.js","webpack:///./node_modules/jszip/lib/compressedObject.js","webpack:///./node_modules/jszip/lib/utf8.js","webpack:///./node_modules/jszip/lib/stringReader.js","webpack:///./node_modules/jszip/lib/dataReader.js","webpack:///./node_modules/jszip/lib/uint8ArrayReader.js","webpack:///./node_modules/jszip/lib/arrayReader.js","webpack:///./node_modules/spectra-data/src/peakPicking/impurities.js","webpack:///./node_modules/spectra-data-ranges/src/index.js","webpack:///./node_modules/spectra-data-ranges/src/acs/acs.js","webpack:///./node_modules/spectra-nmr-utilities/src/index.js","webpack:///./node_modules/lodash.round/index.js","webpack:///./node_modules/nmr-simulation/src/index.js","webpack:///./node_modules/ml-matrix/src/abstractMatrix.js","webpack:///./node_modules/ml-matrix/src/dc/lu.js","webpack:///./node_modules/ml-matrix/src/dc/svd.js","webpack:///./node_modules/new-array/index.js","webpack:///./node_modules/ml-simple-clustering/src/index.js","webpack:///./node_modules/ml-distance-euclidean/euclidean.js","webpack:///./node_modules/ml-hclust/src/ClusterLeaf.js","webpack:///./node_modules/ml-sparse-matrix/src/SparseMatrix.js","webpack:///./node_modules/binary-search/index.js","webpack:///./node_modules/num-sort/index.js","webpack:///./node_modules/spectra-data/src/peakPicking/peakOptimizer.js","webpack:///./node_modules/ml-matrix-convolution/node_modules/ml-fft/src/fftlib.js","webpack:///./index.js","webpack:///./node_modules/ml-array-utils/src/ArrayUtils.js","webpack:///./node_modules/ml-stat/matrix.js","webpack:///./node_modules/ml-array-utils/src/snv.js","webpack:///./node_modules/ml-array-median/src/index.js","webpack:///./node_modules/median-quickselect/lib/median-quickselect.min.js","webpack:///./node_modules/ml-array-rescale/src/index.js","webpack:///./node_modules/spectra-data/src/jcampEncoder/JcampCreator.js","webpack:///./node_modules/spectra-data/src/jcampEncoder/VectorEncoder.js","webpack:///./node_modules/spectra-data/package.json","webpack:///./node_modules/spectra-data/src/peakPicking/peakPicking.js","webpack:///./node_modules/ml-gsd/src/index.js","webpack:///./node_modules/ml-gsd/src/optimize.js","webpack:///./node_modules/ml-optimize-lorentzian/src/index.js","webpack:///./node_modules/ml-optimize-lorentzian/node_modules/ml-curve-fitting/src/index.js","webpack:///./node_modules/ml-optimize-lorentzian/node_modules/ml-curve-fitting/src/LM.js","webpack:///./node_modules/ml-optimize-lorentzian/node_modules/ml-matrix/src/decompositions.js","webpack:///./node_modules/ml-optimize-lorentzian/node_modules/ml-matrix/src/dc/svd.js","webpack:///./node_modules/ml-optimize-lorentzian/node_modules/ml-matrix/src/dc/evd.js","webpack:///./node_modules/ml-optimize-lorentzian/node_modules/ml-matrix/src/dc/lu.js","webpack:///./node_modules/ml-optimize-lorentzian/node_modules/ml-matrix/src/dc/qr.js","webpack:///./node_modules/ml-optimize-lorentzian/node_modules/ml-matrix/src/dc/cholesky.js","webpack:///./node_modules/ml-gsd/src/gsd.js","webpack:///./node_modules/ml-savitzky-golay-generalized/src/index.js","webpack:///./node_modules/ml-savitzky-golay-generalized/node_modules/ml-stat/index.js","webpack:///./node_modules/ml-savitzky-golay-generalized/node_modules/ml-stat/matrix.js","webpack:///./node_modules/spectra-data/src/NMR.js","webpack:///./node_modules/spectra-data/src/filters/fourierTransform.js","webpack:///./node_modules/ml-fft/src/FFTUtils.js","webpack:///./node_modules/spectra-data/src/filters/zeroFilling.js","webpack:///./node_modules/spectra-data/src/filters/phaseCorrection.js","webpack:///./node_modules/spectra-data/src/filters/digitalFilter.js","webpack:///./node_modules/spectra-data/src/filters/rotate.js","webpack:///./node_modules/spectra-data/src/filters/absoluteValue.js","webpack:///./node_modules/iobuffer/IOBuffer.js","webpack:///./node_modules/jszip/lib/index.js","webpack:///./node_modules/base64-js/index.js","webpack:///./node_modules/ieee754/index.js","webpack:///./node_modules/isarray/index.js","webpack:///./node_modules/jszip/lib/flate.js","webpack:///./node_modules/pako/index.js","webpack:///./node_modules/pako/lib/deflate.js","webpack:///./node_modules/pako/lib/zlib/deflate.js","webpack:///./node_modules/pako/lib/zlib/trees.js","webpack:///./node_modules/pako/lib/inflate.js","webpack:///./node_modules/pako/lib/zlib/inflate.js","webpack:///./node_modules/pako/lib/zlib/inffast.js","webpack:///./node_modules/pako/lib/zlib/inftrees.js","webpack:///./node_modules/pako/lib/zlib/gzheader.js","webpack:///./node_modules/jszip/lib/crc32.js","webpack:///./node_modules/jszip/lib/stringWriter.js","webpack:///./node_modules/jszip/lib/uint8ArrayWriter.js","webpack:///./node_modules/jszip/lib/load.js","webpack:///./node_modules/jszip/lib/zipEntries.js","webpack:///./node_modules/jszip/lib/nodeBufferReader.js","webpack:///./node_modules/jszip/lib/zipEntry.js","webpack:///./node_modules/jszip/lib/deprecatedPublicUtils.js","webpack:///./node_modules/spectra-data/src/peakPicking/peaks2Ranges.js","webpack:///./node_modules/spectra-data/src/peakPicking/jAnalyzer.js","webpack:///./node_modules/spectra-data/src/peakPicking/ImpurityRemover.js","webpack:///./node_modules/spectra-data-ranges/src/range/Ranges.js","webpack:///./node_modules/spectra-data-ranges/src/range/peak2Vector.js","webpack:///./node_modules/nmr-simulation/src/SpinSystem.js","webpack:///./node_modules/ml-matrix/src/symbol-species.js","webpack:///./node_modules/ml-matrix/src/views/transpose.js","webpack:///./node_modules/ml-matrix/src/views/row.js","webpack:///./node_modules/ml-matrix/src/views/sub.js","webpack:///./node_modules/ml-matrix/src/views/selection.js","webpack:///./node_modules/ml-matrix/src/views/column.js","webpack:///./node_modules/ml-matrix/src/views/flipRow.js","webpack:///./node_modules/ml-matrix/src/views/flipColumn.js","webpack:///./node_modules/ml-matrix/src/decompositions.js","webpack:///./node_modules/ml-matrix/src/dc/evd.js","webpack:///./node_modules/ml-matrix/src/dc/qr.js","webpack:///./node_modules/ml-matrix/src/dc/cholesky.js","webpack:///./node_modules/ml-hclust/src/index.js","webpack:///./node_modules/ml-hclust/src/agnes.js","webpack:///./node_modules/heap/index.js","webpack:///./node_modules/heap/lib/heap.js","webpack:///./node_modules/util/util.js","webpack:///./node_modules/process/browser.js","webpack:///./node_modules/util/support/isBufferBrowser.js","webpack:///./node_modules/util/node_modules/inherits/inherits_browser.js","webpack:///./node_modules/ml-distance-matrix/src/index.js","webpack:///./node_modules/ml-hclust/src/diana.js","webpack:///./node_modules/nmr-simulation/src/simulate1D.js","webpack:///./node_modules/ml-hash-table/src/HashTable.js","webpack:///./node_modules/ml-hash-table/src/primeFinder.js","webpack:///./node_modules/number-is-nan/index.js","webpack:///./node_modules/nmr-simulation/src/pauli.js","webpack:///./node_modules/nmr-simulation/src/simulate2D.js","webpack:///./node_modules/spectra-data/src/NMR2D.js","webpack:///./node_modules/spectra-data/src/peakPicking/peakPicking2D.js","webpack:///./node_modules/ml-matrix-peaks-finder/src/index.js","webpack:///./node_modules/ml-matrix-convolution/src/index.js","webpack:///./node_modules/ml-matrix-convolution/node_modules/ml-fft/src/index.js","webpack:///./node_modules/ml-matrix-convolution/node_modules/ml-fft/src/FFTUtils.js","webpack:///./node_modules/ml-matrix-peaks-finder/src/ccLabeling.js","webpack:///./node_modules/ml-disjoint-set/src/DisjointSet.js"],"names":[],"mappings":"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,yBAAmB,CAEX,QACA,cACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAGR,0BAAoB,CAEZ,QACA,eACA,eACA,UAGR,eAAS,CAED,QACA,eACA,eACA,UAGR,eAAS,CAED,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAAO,MAGP,QACA,cACA,eACA,YAGR,qBAAe,CAEP,QACA,iBACA,eACA,UAAO,MAGP,QACA,kBACA,eACA,UAAO,MAGP,QACA,kBACA,eACA,UAGR,2BAAqB,CAEb,QACA,iBACA,eACA,UAAO,MAGP,QACA,kBACA,eACA,UAAO,MAGP,QACA,kBACA,eACA,UAGR,uBAAiB,CAET,QACA,cACA,eACA,UAGR,kBAAY,CAEJ,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,aAGR,kBAAY,CAEJ,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAGR,aAAO,CAEC,QACA,eACA,iBACA,UAGR,gBAAU,CAEF,QACA,eACA,eACA,UAAO,MAGP,QACA,cACA,eACA,UAGR,oBAAc,CAEN,QACA,eACA,eACA,UAGR,mBAAa,CAEL,QACA,eACA,eACA,UAAO,GAGP,QACA,eACA,eACA,UAGR,oBAAc,CAEN,QACA,eACA,eACA,UAAO,MAGP,QACA,cACA,eACA,YAGR,gBAAU,CAEF,QACA,iBACA,eACA,UAAO,MAGP,QACA,iBACA,eACA,UAAO,MAGP,QACA,iBACA,eACA,UAGR,wBAAkB,CAEV,QACA,eACA,eACA,UAGR,uBAAiB,CAET,QACA,eACA,eACA,UAAO,MAGP,QACA,gBACA,eACA,UAGR,eAAS,CAED,QACA,eACA,eACA,UAAO,MAGP,QACA,mBACA,eACA,UAAO,MAGP,QACA,iBACA,eACA,UAGR,qBAAe,CAEP,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAIZ,mBACI,KAAK,CAEG,QACA,aACA,eACA,SAGR,0BAAuB,CAEf,QACA,aACA,eACA,SAGR,WAAK,CAEG,QACA,eACA,eACA,UAGR,mBAAa,CAEL,QACA,eACA,eACA,UAGR,eAAS,CAED,QACA,eACA,eACA,UAGR,oBAAc,CAEN,QACA,eACA,eACA,UAGR,eAAS,CAED,QACA,cACA,eACA,UAGR,4BAAsB,CAEd,QACA,eACA,eACA,UAGR,iCAA2B,CAEnB,QACA,gBACA,eACA,UAAO,MAGP,QACA,gBACA,eACA,UAGR,YAAM,CAEE,QACA,eACA,eACA,UAAO,MAGP,QACA,iBACA,eACA,UAAO,MAGP,QACA,qBACA,eACA,UAGR,kBAAY,CAEJ,QACA,cACA,eACA,UAGR,mBAAa,CAEL,QACA,eACA,eACA,UAGR,4BAAsB,CAEd,QACA,eACA,eACA,UAGR,uBAAiB,CAET,QACA,eACA,eACA,UAGR,qBAAe,CAEP,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAGR,eAAS,CAED,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAAO,MAGP,QACA,gBACA,eACA,UAGR,6BAAuB,CAEf,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAGR,yBAAmB,CAEX,QACA,iBACA,eACA,UAAO,MAGP,QACA,gBACA,eACA,UAAO,GAGP,QACA,gBACA,eACA,UAGR,yBAAmB,CAEX,QACA,cACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAGR,0BAAoB,CAEZ,QACA,eACA,eACA,UAGR,eAAS,CAED,QACA,eACA,eACA,UAGR,eAAS,CAED,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAAO,MAGP,QACA,cACA,eACA,YAGR,qBAAe,CAEP,QACA,iBACA,eACA,UAAO,MAGP,QACA,kBACA,eACA,UAAO,MAGP,QACA,kBACA,eACA,UAGR,0BAAqB,CAEb,QACA,iBACA,eACA,UAAO,MAGP,QACA,kBACA,eACA,UAAO,MAGP,QACA,kBACA,eACA,UAGR,uBAAiB,CAET,QACA,cACA,eACA,UAGR,kBAAY,CAEJ,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,aAGR,kBAAY,CAEJ,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAGR,aAAO,CAEC,QACA,eACA,iBACA,UAGR,gBAAU,CAEF,QACA,eACA,eACA,UAAO,MAGP,QACA,cACA,eACA,UAGR,oBAAc,CAEN,QACA,eACA,eACA,UAGR,mBAAa,CAEL,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAGR,oBAAc,CAEN,QACA,eACA,eACA,UAAO,KAGP,QACA,cACA,eACA,YAGR,eAAU,CAEF,QACA,iBACA,eACA,UAAO,MAGP,QACA,iBACA,eACA,UAAO,MAGP,QACA,iBACA,eACA,UAGR,wBAAkB,CAEV,QACA,eACA,eACA,UAGR,uBAAiB,CAET,QACA,eACA,eACA,UAAO,MAGP,QACA,gBACA,eACA,UAGR,eAAS,CAED,QACA,eACA,eACA,UAAO,MAGP,QACA,mBACA,eACA,UAAO,KAGP,QACA,iBACA,eACA,UAGR,oBAAe,CAEP,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAIZ,aACI,KAAK,CAEG,QACA,aACA,eACA,SAGR,0BAAuB,CAEf,QACA,aACA,eACA,cAGR,UAAK,CAEG,QACA,eACA,eACA,UAGR,mBAAa,CAEL,QACA,eACA,eACA,UAGR,eAAS,CAED,QACA,eACA,eACA,UAGR,oBAAc,CAEN,QACA,eACA,eACA,UAGR,eAAS,CAED,QACA,cACA,eACA,UAGR,4BAAsB,CAEd,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAGR,iCAA2B,CAEnB,QACA,gBACA,eACA,UAAO,MAGP,QACA,gBACA,eACA,UAGR,YAAM,CAEE,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAAO,MAGP,QACA,iBACA,eACA,UAAO,MAGP,QACA,qBACA,eACA,UAGR,kBAAY,CAEJ,QACA,cACA,eACA,UAGR,mBAAa,CAEL,QACA,eACA,eACA,UAGR,2BAAsB,CAEd,QACA,eACA,eACA,UAGR,sBAAiB,CAET,QACA,eACA,eACA,UAGR,qBAAe,CAEP,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAGR,eAAS,CAED,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAAO,MAGP,QACA,gBACA,eACA,UAGR,6BAAuB,CAEf,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAGR,yBAAmB,CAEX,QACA,iBACA,eACA,UAAO,MAGP,QACA,gBACA,eACA,UAAO,MAGP,QACA,gBACA,eACA,UAGR,yBAAmB,CAEX,QACA,cACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAGR,0BAAoB,CAEZ,QACA,eACA,eACA,UAGR,eAAS,CAED,QACA,eACA,eACA,UAGR,eAAS,CAED,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAAO,MAGP,QACA,cACA,eACA,YAGR,qBAAe,CAEP,QACA,iBACA,eACA,UAAO,MAGP,QACA,kBACA,eACA,UAAO,MAGP,QACA,kBACA,eACA,UAGR,2BAAqB,CAEb,QACA,iBACA,eACA,UAAO,MAGP,QACA,kBACA,eACA,UAAO,MAGP,QACA,kBACA,eACA,UAGR,uBAAiB,CAET,QACA,cACA,eACA,UAGR,OACA,yBAAY,CAEJ,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAGR,aAAO,CAEC,QACA,eACA,iBACA,UAGR,gBAAU,CAEF,QACA,eACA,eACA,UAAO,MAGP,QACA,cACA,eACA,UAGR,oBAAc,CAEN,QACA,eACA,eACA,UAGR,mBAAa,CAEL,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAGR,oBAAc,CAEN,QACA,eACA,eACA,UAAO,MAGP,QACA,cACA,eACA,YAGR,gBAAU,CAEF,QACA,iBACA,eACA,UAAO,MAGP,QACA,iBACA,eACA,UAAO,MAGP,QACA,iBACA,eACA,UAGR,OACA,oCAAiB,CAET,QACA,eACA,eACA,UAAO,MAGP,QACA,gBACA,eACA,UAGR,cAAS,CAED,QACA,eACA,eACA,UAAO,KAGP,QACA,mBACA,eACA,UAAO,MAGP,QACA,iBACA,eACA,UAGR,qBAAe,CAEP,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAIZ,aACI,KAAK,CAEG,QACA,aACA,eACA,SAGR,0BAAuB,CAEf,QACA,aACA,eACA,SAGR,WAAK,CAEG,QACA,eACA,eACA,UAGR,kBAAa,CAEL,QACA,eACA,eACA,UAGR,eAAS,CAED,QACA,eACA,eACA,UAGR,oBAAc,CAEN,QACA,eACA,eACA,UAGR,eAAS,CAED,QACA,cACA,eACA,UAGR,4BAAsB,CAEd,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAGR,iCAA2B,CAEnB,QACA,gBACA,eACA,UAAO,MAGP,QACA,gBACA,eACA,UAGR,YAAM,CAEE,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAAO,MAGP,QACA,iBACA,eACA,UAAO,MAGP,QACA,qBACA,eACA,UAGR,kBAAY,CAEJ,QACA,cACA,eACA,UAGR,mBAAa,CAEL,QACA,eACA,eACA,UAGR,2BAAsB,CAEd,QACA,eACA,eACA,UAGR,sBAAiB,CAET,QACA,eACA,eACA,UAGR,qBAAe,CAEP,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAGR,eAAS,CAED,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAAO,MAGP,QACA,gBACA,eACA,UAGR,6BAAuB,CAEf,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAGR,yBAAmB,CAEX,QACA,iBACA,eACA,UAAO,KAGP,QACA,gBACA,eACA,UAAO,MAGP,QACA,gBACA,eACA,UAGR,yBAAmB,CAEX,QACA,cACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAGR,0BAAoB,CAEZ,QACA,eACA,eACA,UAGR,eAAS,CAED,QACA,eACA,eACA,UAGR,eAAS,CAED,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAGR,qBAAe,CAEP,QACA,iBACA,eACA,UAAO,MAGP,QACA,kBACA,eACA,UAAO,MAGP,QACA,kBACA,eACA,UAGR,2BAAqB,CAEb,QACA,iBACA,eACA,UAAO,MAGP,QACA,kBACA,eACA,UAAO,MAGP,QACA,kBACA,eACA,UAGR,uBAAiB,CAET,QACA,cACA,eACA,UAGR,kBAAY,CAEJ,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,aAGR,kBAAY,CAEJ,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAGR,aAAO,CAEC,QACA,eACA,iBACA,UAGR,eAAU,CAEF,QACA,eACA,eACA,UAGR,oBAAc,CAEN,QACA,eACA,eACA,UAGR,mBAAa,CAEL,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAGR,oBAAc,CAEN,QACA,eACA,eACA,UAAO,MAGP,QACA,cACA,eACA,YAGR,gBAAU,CAEF,QACA,iBACA,eACA,UAAO,MAGP,QACA,iBACA,eACA,UAAO,MAGP,QACA,iBACA,eACA,UAGR,wBAAkB,CAEV,QACA,eACA,eACA,UAGR,uBAAiB,CAET,QACA,eACA,eACA,UAAO,KAGP,QACA,gBACA,eACA,UAGR,eAAS,CAED,QACA,eACA,eACA,UAAO,MAGP,QACA,mBACA,eACA,UAAO,MAGP,QACA,iBACA,eACA,UAGR,qBAAe,CAEP,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAIZ,aACI,KAAK,CAEG,QACA,aACA,eACA,SAGR,0BAAuB,CAEf,QACA,aACA,eACA,SAGR,WAAK,CAEG,QACA,eACA,eACA,UAGR,mBAAa,CAEL,QACA,eACA,eACA,UAGR,eAAS,CAED,QACA,eACA,eACA,UAGR,oBAAc,CAEN,QACA,eACA,eACA,UAGR,eAAS,CAED,QACA,cACA,eACA,UAGR,4BAAsB,CAEd,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAGR,iCAA2B,CAEnB,QACA,gBACA,eACA,UAAO,MAGP,QACA,gBACA,eACA,UAGR,YAAM,CAEE,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAAO,KAGP,QACA,iBACA,eACA,UAAO,MAGP,QACA,qBACA,eACA,UAGR,kBAAY,CAEJ,QACA,cACA,eACA,UAGR,mBAAa,CAEL,QACA,eACA,eACA,UAGR,4BAAsB,CAEd,QACA,eACA,eACA,UAGR,uBAAiB,CAET,QACA,eACA,eACA,UAGR,qBAAe,CAEP,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAGR,eAAS,CAED,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAAO,MAGP,QACA,gBACA,eACA,UAGR,6BAAuB,CAEf,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAGR,yBAAmB,CAEX,QACA,iBACA,eACA,UAAO,MAGP,QACA,gBACA,eACA,UAAO,MAGP,QACA,gBACA,eACA,UAGR,yBAAmB,CAEX,QACA,cACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAGR,0BAAoB,CAEZ,QACA,eACA,eACA,UAGR,cAAS,CAED,QACA,eACA,eACA,UAGR,cAAS,CAED,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAAO,MAGP,QACA,cACA,eACA,YAGR,qBAAe,CAEP,QACA,iBACA,eACA,UAAO,MAGP,QACA,kBACA,eACA,UAAO,MAGP,QACA,kBACA,eACA,UAGR,0BAAqB,CAEb,QACA,iBACA,eACA,UAAO,MAGP,QACA,kBACA,eACA,UAAO,MAGP,QACA,kBACA,eACA,UAGR,uBAAiB,CAET,QACA,cACA,eACA,UAGR,kBAAY,CAEJ,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,aAGR,kBAAY,CAEJ,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAGR,aAAO,CAEC,QACA,eACA,iBACA,UAGR,gBAAU,CAEF,QACA,eACA,eACA,UAAO,MAGP,QACA,cACA,eACA,UAGR,oBAAc,CAEN,QACA,eACA,eACA,UAGR,mBAAa,CAEL,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAGR,oBAAc,CAEN,QACA,eACA,eACA,UAAO,MAGP,QACA,cACA,eACA,YAGR,gBAAU,CAEF,QACA,iBACA,eACA,UAAO,MAGP,QACA,iBACA,eACA,UAAO,MAGP,QACA,iBACA,eACA,UAGR,wBAAkB,CAEV,QACA,eACA,eACA,UAGR,uBAAiB,CAET,QACA,eACA,eACA,UAAO,KAGP,QACA,gBACA,eACA,UAGR,eAAS,CAED,QACA,eACA,eACA,UAAO,MAGP,QACA,mBACA,eACA,UAAO,KAGP,QACA,iBACA,eACA,UAGR,oBAAe,CAEP,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAIZ,cACI,KAAK,CAEG,QACA,aACA,eACA,SAGR,0BAAuB,CAEf,QACA,aACA,eACA,SAGR,WAAK,CAEG,QACA,eACA,eACA,UAGR,mBAAa,CAEL,QACA,eACA,eACA,UAGR,eAAS,CAED,QACA,eACA,eACA,UAGR,oBAAc,CAEN,QACA,eACA,eACA,UAGR,eAAS,CAED,QACA,cACA,eACA,UAGR,4BAAsB,CAEd,QACA,eACA,eACA,UAGR,gCAA2B,CAEnB,QACA,gBACA,eACA,UAAO,MAGP,QACA,gBACA,eACA,UAGR,WAAM,CAEE,QACA,eACA,eACA,UAAO,MAGP,QACA,iBACA,eACA,UAAO,MAGP,QACA,qBACA,eACA,UAGR,iBAAY,CAEJ,QACA,cACA,eACA,UAGR,kBAAa,CAEL,QACA,eACA,eACA,UAGR,4BAAsB,CAEd,QACA,eACA,eACA,UAGR,uBAAiB,CAET,QACA,eACA,eACA,UAGR,qBAAe,CAEP,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAGR,eAAS,CAED,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAAO,MAGP,QACA,gBACA,eACA,UAGR,6BAAuB,CAEf,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAGR,yBAAmB,CAEX,QACA,iBACA,eACA,UAAO,MAGP,QACA,gBACA,eACA,UAAO,MAGP,QACA,gBACA,eACA,UAGR,yBAAmB,CAEX,QACA,cACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAGR,0BAAoB,CAEZ,QACA,eACA,eACA,UAGR,eAAS,CAED,QACA,eACA,eACA,UAGR,eAAS,CAED,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAGR,oBAAe,CAEP,QACA,iBACA,eACA,UAAO,MAGP,QACA,kBACA,eACA,UAAO,MAGP,QACA,kBACA,eACA,UAGR,2BAAqB,CAEb,QACA,iBACA,eACA,UAAO,MAGP,QACA,kBACA,eACA,UAAO,KAGP,QACA,kBACA,eACA,UAGR,uBAAiB,CAET,QACA,cACA,eACA,UAGR,kBAAY,CAEJ,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,aAGR,kBAAY,CAEJ,QACA,eACA,eACA,UAAO,KAGP,QACA,eACA,eACA,UAGR,aAAO,CAEC,QACA,eACA,iBACA,UAGR,gBAAU,CAEF,QACA,eACA,eACA,UAGR,oBAAc,CAEN,QACA,eACA,eACA,UAGR,mBAAa,CAEL,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAGR,oBAAc,CAEN,QACA,eACA,eACA,UAAO,KAGP,QACA,cACA,eACA,YAGR,gBAAU,CAEF,QACA,iBACA,eACA,UAAO,MAGP,QACA,iBACA,eACA,UAAO,MAGP,QACA,iBACA,eACA,UAGR,wBAAkB,CAEV,QACA,eACA,eACA,UAGR,sBAAiB,CAET,QACA,eACA,eACA,UAAO,MAGP,QACA,gBACA,eACA,UAGR,eAAS,CAED,QACA,eACA,eACA,UAAO,MAGP,QACA,mBACA,eACA,UAAO,MAGP,QACA,iBACA,eACA,UAGR,qBAAe,CAEP,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAIZ,YACI,KAAK,CAEG,QACA,aACA,eACA,SAGR,0BAAuB,CAEf,QACA,aACA,eACA,SAGR,OACA,mBAAa,CAEL,QACA,eACA,eACA,UAGR,eAAS,CAED,QACA,eACA,eACA,UAGR,oBAAc,CAEN,QACA,eACA,eACA,UAGR,OACA,gCAAsB,CAEd,QACA,eACA,eACA,UAGR,iCAA2B,CAEnB,QACA,gBACA,eACA,UAAO,MAGP,QACA,gBACA,eACA,UAGR,OACA,QACA,cACA,eACA,wBACA,iCAAe,CAEP,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAGR,eAAS,CAED,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAAO,MAGP,QACA,gBACA,eACA,UAGR,6BAAuB,CAEf,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAGR,wBAAmB,CAEX,QACA,iBACA,eACA,UAAO,MAGP,QACA,gBACA,eACA,UAAO,MAGP,QACA,gBACA,eACA,UAGR,wBAAmB,CAEX,QACA,cACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAGR,0BAAoB,CAEZ,QACA,eACA,eACA,UAGR,eAAS,CAED,QACA,eACA,eACA,UAGR,eAAS,CAED,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAGR,qBAAe,CAEP,QACA,iBACA,eACA,UAAO,MAGP,QACA,kBACA,eACA,UAAO,MAGP,QACA,kBACA,eACA,UAGR,2BAAqB,CAEb,QACA,iBACA,eACA,UAAO,MAGP,QACA,kBACA,eACA,UAAO,MAGP,QACA,kBACA,eACA,UAGR,uBAAiB,CAET,QACA,cACA,eACA,UAGR,OACA,cACA,oBAAO,CAEC,QACA,eACA,iBACA,UAGR,gBAAU,CAEF,QACA,eACA,eACA,UAGR,oBAAc,CAEN,QACA,eACA,eACA,UAGR,kBAAa,CAEL,QACA,eACA,eACA,UAGR,mBAAc,CAEN,QACA,eACA,eACA,UAAO,MAGP,QACA,cACA,eACA,YAGR,gBAAU,CAEF,QACA,iBACA,eACA,UAAO,MAGP,QACA,iBACA,eACA,UAAO,MAGP,QACA,iBACA,eACA,UAGR,OACA,oCAAiB,CAET,QACA,eACA,eACA,UAAO,MAGP,QACA,gBACA,eACA,UAGR,OACA,yBAAe,CAEP,QACA,eACA,eACA,UAAO,MAGP,QACA,eACA,eACA,UAAO,mOCvjGf,kGACA,yCCoDmB,eACvB,IAAI,GACJ,KAAmB,CAAf,KAAI,SAAc,EACtB,cAAgB,MAHgB,eAIhC,WAAkB,gDAAQ,SACtB,MACH,iBAN+B,oEAOhC,OACI,EADA,GAAU,OACH,EAAM,EAAU,KAEvB,MAEP,GAE2B,aACxB,IACA,MAAI,EAAU,EAAc,EAAQ,S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","file":"spectra-data.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"spectraData\"] = factory();\n\telse\n\t\troot[\"spectraData\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","'use strict';\n\n/**\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 the new 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 the new array.\n *\n * @param x - sorted increasing x values\n * @param y\n * @param options\n * @returns {Array} new array with the equally spaced data.\n *\n */\nfunction getEquallySpacedData(x, y, options) {\n    if (x.length>1 && x[0]>x[1]) {\n        x=x.slice().reverse();\n        y=y.slice().reverse();\n    }\n\n    var xLength = x.length;\n    if(xLength !== y.length)\n        throw new RangeError(\"the x and y vector doesn't have the same size.\");\n\n    if (options === undefined) options = {};\n\n    var from = options.from === undefined ? x[0] : options.from\n    if (isNaN(from) || !isFinite(from)) {\n        throw new RangeError(\"'From' value must be a number\");\n    }\n    var to = options.to === undefined ? x[x.length - 1] : options.to;\n    if (isNaN(to) || !isFinite(to)) {\n        throw new RangeError(\"'To' value must be a number\");\n    }\n\n    var reverse = from > to;\n    if(reverse) {\n        var temp = from;\n        from = to;\n        to = temp;\n    }\n\n    var numberOfPoints = options.numberOfPoints === undefined ? 100 : options.numberOfPoints;\n    if (isNaN(numberOfPoints) || !isFinite(numberOfPoints)) {\n        throw new RangeError(\"'Number of points' value must be a number\");\n    }\n    if(numberOfPoints < 1)\n        throw new RangeError(\"the number of point must be higher than 1\");\n\n    var algorithm = options.variant === \"slot\" ? \"slot\" : \"smooth\"; // default value: smooth\n\n    var output = algorithm === \"slot\" ? getEquallySpacedSlot(x, y, from, to, numberOfPoints) : getEquallySpacedSmooth(x, y, from, to, numberOfPoints);\n\n    return reverse ? output.reverse() : output;\n}\n\n/**\n * function that retrieves the getEquallySpacedData with the variant \"smooth\"\n *\n * @param x\n * @param y\n * @param from - Initial point\n * @param to - Final point\n * @param numberOfPoints\n * @returns {Array} - Array of y's equally spaced with the variant \"smooth\"\n */\nfunction getEquallySpacedSmooth(x, y, from, to, numberOfPoints) {\n    var xLength = x.length;\n\n    var step = (to - from) / (numberOfPoints - 1);\n    var halfStep = step / 2;\n\n    var start = from - halfStep;\n    var output = new Array(numberOfPoints);\n\n    var initialOriginalStep = x[1] - x[0];\n    var lastOriginalStep = x[x.length - 1] - x[x.length - 2];\n\n    // Init main variables\n    var min = start;\n    var max = start + step;\n\n    var previousX = Number.MIN_VALUE;\n    var previousY = 0;\n    var nextX = x[0] - initialOriginalStep;\n    var nextY = 0;\n\n    var currentValue = 0;\n    var slope = 0;\n    var intercept = 0;\n    var sumAtMin = 0;\n    var sumAtMax = 0;\n\n    var i = 0; // index of input\n    var j = 0; // index of output\n\n    function getSlope(x0, y0, x1, y1) {\n        return (y1 - y0) / (x1 - x0);\n    }\n\n    main: while(true) {\n        while (nextX - max >= 0) {\n            // no overlap with original point, just consume current value\n            var add = integral(0, max - previousX, slope, previousY);\n            sumAtMax = currentValue + add;\n\n            output[j] = (sumAtMax - sumAtMin) / step;\n            j++;\n\n            if (j === numberOfPoints)\n                break main;\n\n            min = max;\n            max += step;\n            sumAtMin = sumAtMax;\n        }\n\n        if(previousX <= min && min <= nextX) {\n            add = integral(0, min - previousX, slope, previousY);\n            sumAtMin = currentValue + add;\n        }\n\n        currentValue += integral(previousX, nextX, slope, intercept);\n\n        previousX = nextX;\n        previousY = nextY;\n\n        if (i < xLength) {\n            nextX = x[i];\n            nextY = y[i];\n            i++;\n        } else if (i === xLength) {\n            nextX += lastOriginalStep;\n            nextY = 0;\n        }\n        // updating parameters\n        slope = getSlope(previousX, previousY, nextX, nextY);\n        intercept = -slope*previousX + previousY;\n    }\n\n    return output;\n}\n\n/**\n * function that retrieves the getEquallySpacedData with the variant \"slot\"\n *\n * @param x\n * @param y\n * @param from - Initial point\n * @param to - Final point\n * @param numberOfPoints\n * @returns {Array} - Array of y's equally spaced with the variant \"slot\"\n */\nfunction getEquallySpacedSlot(x, y, from, to, numberOfPoints) {\n    var xLength = x.length;\n\n    var step = (to - from) / (numberOfPoints - 1);\n    var halfStep = step / 2;\n    var lastStep = x[x.length - 1] - x[x.length - 2];\n\n    var start = from - halfStep;\n    var output = new Array(numberOfPoints);\n\n    // Init main variables\n    var min = start;\n    var max = start + step;\n\n    var previousX = -Number.MAX_VALUE;\n    var previousY = 0;\n    var nextX = x[0];\n    var nextY = y[0];\n    var frontOutsideSpectra = 0;\n    var backOutsideSpectra = true;\n\n    var currentValue = 0;\n\n    // for slot algorithm\n    var currentPoints = 0;\n\n    var i = 1; // index of input\n    var j = 0; // index of output\n\n    main: while(true) {\n        if (previousX>=nextX) throw (new Error('x must be an increasing serie'));\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\n            output[j] = currentPoints <= 0 ? 0 : currentValue / currentPoints;\n            j++;\n\n            if (j === numberOfPoints)\n                break main;\n\n            min = max;\n            max += step;\n            currentValue = 0;\n            currentPoints = 0;\n        }\n\n        if(previousX > min) {\n            currentValue += previousY;\n            currentPoints++;\n        }\n\n        if(previousX === -Number.MAX_VALUE || frontOutsideSpectra > 1)\n            currentPoints--;\n\n        previousX = nextX;\n        previousY = nextY;\n\n        if (i < xLength) {\n            nextX = x[i];\n            nextY = y[i];\n            i++;\n        } else {\n            nextX += lastStep;\n            nextY = 0;\n            frontOutsideSpectra++;\n        }\n    }\n\n    return output;\n}\n/**\n * Function that calculates the integral of the line between two\n * x-coordinates, given the slope and intercept of the line.\n *\n * @param x0\n * @param x1\n * @param slope\n * @param intercept\n * @returns {number} integral value.\n */\nfunction integral(x0, x1, slope, intercept) {\n    return (0.5 * slope * x1 * x1 + intercept * x1) - (0.5 * slope * x0 * x0 + intercept * x0);\n}\n\nexports.getEquallySpacedData = getEquallySpacedData;\nexports.integral = integral;\n\n\n// WEBPACK FOOTER //\n// ./node_modules/ml-array-utils/src/getEquallySpaced.js","/**\n * Fast Fourier Transform module\n * 1D-FFT/IFFT, 2D-FFT/IFFT (radix-2)\n */\nvar FFT = (function(){\n  var FFT;  \n  \n  if(typeof exports !== 'undefined') {\n    FFT = exports;   // for CommonJS\n  } else {\n    FFT = {};\n  }\n  \n  var version = {\n    release: '0.3.0',\n    date: '2013-03'\n  };\n  FFT.toString = function() {\n    return \"version \" + version.release + \", released \" + version.date;\n  };\n\n  // core operations\n  var _n = 0,          // order\n      _bitrev = null,  // bit reversal table\n      _cstb = null;    // sin/cos table\n\n  var core = {\n    init : function(n) {\n      if(n !== 0 && (n & (n - 1)) === 0) {\n        _n = n;\n        core._initArray();\n        core._makeBitReversalTable();\n        core._makeCosSinTable();\n      } else {\n        throw new Error(\"init: radix-2 required\");\n      }\n    },\n    // 1D-FFT\n    fft1d : function(re, im) {\n      core.fft(re, im, 1);\n    },\n    // 1D-IFFT\n    ifft1d : function(re, im) {\n      var n = 1/_n;\n      core.fft(re, im, -1);\n      for(var i=0; i<_n; i++) {\n        re[i] *= n;\n        im[i] *= n;\n      }\n    },\n     // 1D-IFFT\n    bt1d : function(re, im) {\n      core.fft(re, im, -1);\n    },\n    // 2D-FFT Not very useful if the number of rows have to be equal to cols\n    fft2d : function(re, im) {\n      var tre = [],\n          tim = [],\n          i = 0;\n      // x-axis\n      for(var y=0; y<_n; y++) {\n        i = y*_n;\n        for(var x1=0; x1<_n; x1++) {\n          tre[x1] = re[x1 + i];\n          tim[x1] = im[x1 + i];\n        }\n        core.fft1d(tre, tim);\n        for(var x2=0; x2<_n; x2++) {\n          re[x2 + i] = tre[x2];\n          im[x2 + i] = tim[x2];\n        }\n      }\n      // y-axis\n      for(var x=0; x<_n; x++) {\n        for(var y1=0; y1<_n; y1++) {\n          i = x + y1*_n;\n          tre[y1] = re[i];\n          tim[y1] = im[i];\n        }\n        core.fft1d(tre, tim);\n        for(var y2=0; y2<_n; y2++) {\n          i = x + y2*_n;\n          re[i] = tre[y2];\n          im[i] = tim[y2];\n        }\n      }\n    },\n    // 2D-IFFT\n    ifft2d : function(re, im) {\n      var tre = [],\n          tim = [],\n          i = 0;\n      // x-axis\n      for(var y=0; y<_n; y++) {\n        i = y*_n;\n        for(var x1=0; x1<_n; x1++) {\n          tre[x1] = re[x1 + i];\n          tim[x1] = im[x1 + i];\n        }\n        core.ifft1d(tre, tim);\n        for(var x2=0; x2<_n; x2++) {\n          re[x2 + i] = tre[x2];\n          im[x2 + i] = tim[x2];\n        }\n      }\n      // y-axis\n      for(var x=0; x<_n; x++) {\n        for(var y1=0; y1<_n; y1++) {\n          i = x + y1*_n;\n          tre[y1] = re[i];\n          tim[y1] = im[i];\n        }\n        core.ifft1d(tre, tim);\n        for(var y2=0; y2<_n; y2++) {\n          i = x + y2*_n;\n          re[i] = tre[y2];\n          im[i] = tim[y2];\n        }\n      }\n    },\n    // core operation of FFT\n    fft : function(re, im, inv) {\n      var d, h, ik, m, tmp, wr, wi, xr, xi,\n          n4 = _n >> 2;\n      // bit reversal\n      for(var l=0; l<_n; l++) {\n        m = _bitrev[l];\n        if(l < m) {\n          tmp = re[l];\n          re[l] = re[m];\n          re[m] = tmp;\n          tmp = im[l];\n          im[l] = im[m];\n          im[m] = tmp;\n        }\n      }\n      // butterfly operation\n      for(var k=1; k<_n; k<<=1) {\n        h = 0;\n        d = _n/(k << 1);\n        for(var j=0; j<k; j++) {\n          wr = _cstb[h + n4];\n          wi = inv*_cstb[h];\n          for(var i=j; i<_n; i+=(k<<1)) {\n            ik = i + k;\n            xr = wr*re[ik] + wi*im[ik];\n            xi = wr*im[ik] - wi*re[ik];\n            re[ik] = re[i] - xr;\n            re[i] += xr;\n            im[ik] = im[i] - xi;\n            im[i] += xi;\n          }\n          h += d;\n        }\n      }\n    },\n    // initialize the array (supports TypedArray)\n    _initArray : function() {\n      if(typeof Uint32Array !== 'undefined') {\n        _bitrev = new Uint32Array(_n);\n      } else {\n        _bitrev = [];\n      }\n      if(typeof Float64Array !== 'undefined') {\n        _cstb = new Float64Array(_n*1.25);\n      } else {\n        _cstb = [];\n      }\n    },\n    // zero padding\n    _paddingZero : function() {\n      // TODO\n    },\n    // makes bit reversal table\n    _makeBitReversalTable : function() {\n      var i = 0,\n          j = 0,\n          k = 0;\n      _bitrev[0] = 0;\n      while(++i < _n) {\n        k = _n >> 1;\n        while(k <= j) {\n          j -= k;\n          k >>= 1;\n        }\n        j += k;\n        _bitrev[i] = j;\n      }\n    },\n    // makes trigonometiric function table\n    _makeCosSinTable : function() {\n      var n2 = _n >> 1,\n          n4 = _n >> 2,\n          n8 = _n >> 3,\n          n2p4 = n2 + n4,\n          t = Math.sin(Math.PI/_n),\n          dc = 2*t*t,\n          ds = Math.sqrt(dc*(2 - dc)),\n          c = _cstb[n4] = 1,\n          s = _cstb[0] = 0;\n      t = 2*dc;\n      for(var i=1; i<n8; i++) {\n        c -= dc;\n        dc += t*c;\n        s += ds;\n        ds -= t*s;\n        _cstb[i] = s;\n        _cstb[n4 - i] = c;\n      }\n      if(n8 !== 0) {\n        _cstb[n8] = Math.sqrt(0.5);\n      }\n      for(var j=0; j<n4; j++) {\n        _cstb[n2 - j]  = _cstb[j];\n      }\n      for(var k=0; k<n2p4; k++) {\n        _cstb[k + n2] = -_cstb[k];\n      }\n    }\n  };\n  // aliases (public APIs)\n  var apis = ['init', 'fft1d', 'ifft1d', 'fft2d', 'ifft2d'];\n  for(var i=0; i<apis.length; i++) {\n    FFT[apis[i]] = core[apis[i]];\n  }\n  FFT.bt = core.bt1d;\n  FFT.fft = core.fft1d;\n  FFT.ifft = core.ifft1d;\n  \n  return FFT;\n}).call(this);\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/ml-fft/src/fftlib.js","/**\n * Created by acastillo on 8/24/15.\n */\n/**\n * Non in-place function definitions, compatible with mathjs code *\n */\n\n'use strict';\n\nvar Matrix = require('ml-matrix');\n\nfunction matrix(A,B){\n    return new Matrix(A,B);\n}\n\nfunction ones(rows, cols){\n    return Matrix.ones(rows,cols);\n}\n\nfunction eye(rows, cols){\n    return Matrix.eye(rows, cols);\n}\n\nfunction zeros(rows, cols){\n    return Matrix.zeros(rows, cols);\n}\n\nfunction random(rows, cols){\n    return Matrix.rand(rows,cols);\n}\n\nfunction transpose(A){\n    if(typeof A == 'number')\n        return A;\n    var result = A.clone();\n    return result.transpose();\n}\n\nfunction add(A, B){\n    if(typeof A == 'number'&&typeof B === 'number')\n        return A+B;\n    if(typeof A == 'number')\n        return this.add(B,A);\n\n    var result = A.clone();\n    return result.add(B);\n\n}\n\nfunction subtract(A, B){\n    if(typeof A == 'number'&&typeof B === 'number')\n        return A-B;\n    if(typeof A == 'number')\n        return this.subtract(B,A);\n    var result = A.clone();\n    return result.sub(B);\n}\n\nfunction multiply(A, B){\n    if(typeof A == 'number'&&typeof B === 'number')\n        return A*B;\n    if(typeof A == 'number')\n        return this.multiply(B,A);\n\n    var result = A.clone();\n\n    if(typeof B === 'number')\n        result.mul(B);\n    else\n        result = result.mmul(B);\n\n    if(result.rows==1&&result.columns==1)\n        return result[0][0];\n    else\n        return result;\n\n}\n\nfunction dotMultiply(A, B){\n    var result = A.clone();\n    return result.mul(B);\n}\n\nfunction dotDivide(A, B){\n    var result = A.clone();\n    return result.div(B);\n}\n\nfunction diag(A){\n    var diag = null;\n    var rows = A.rows, cols = A.columns, j, r;\n    //It is an array\n    if(typeof cols === \"undefined\" && (typeof A)=='object'){\n        if(A[0]&&A[0].length){\n            rows = A.length;\n            cols = A[0].length;\n            r = Math.min(rows,cols);\n            diag = Matrix.zeros(cols, cols);\n            for (j = 0; j < cols; j++) {\n                diag[j][j]=A[j][j];\n            }\n        }\n        else{\n            cols = A.length;\n            diag = Matrix.zeros(cols, cols);\n            for (j = 0; j < cols; j++) {\n                diag[j][j]=A[j];\n            }\n        }\n\n    }\n    if(rows == 1){\n        diag = Matrix.zeros(cols, cols);\n        for (j = 0; j < cols; j++) {\n            diag[j][j]=A[0][j];\n        }\n    }\n    else{\n        if(rows>0 && cols > 0){\n            r = Math.min(rows,cols);\n            diag = new Array(r);\n            for (j = 0; j < r; j++) {\n                diag[j] = A[j][j];\n            }\n        }\n    }\n    return diag;\n}\n\nfunction min(A, B){\n    if(typeof A==='number' && typeof B ==='number')\n        return Math.min(A,B);\n    var ii = A.rows, jj = A.columns;\n    var result = new Matrix(ii,jj);\n    for (var i = 0; i < ii; i++) {\n        for (var j = 0; j < jj; j++) {\n            if (A[i][j] < B[i][j]) {\n                result[i][j] = A[i][j];\n            }\n            else{\n                result[i][j] = B[i][j];\n            }\n        }\n    }\n    return result;\n}\n\nfunction max(A, B){\n    if(typeof A==='number' && typeof B ==='number')\n        return Math.max(A,B);\n    var ii = A.rows, jj = A.columns;\n    var result = new Matrix(ii,jj);\n    for (var i = 0; i < ii; i++) {\n        for (var j = 0; j < jj; j++) {\n            if (A[i][j] > B[i][j]) {\n                result[i][j] = A[i][j];\n            }\n            else{\n                result[i][j] = B[i][j];\n            }\n        }\n    }\n    return result;\n}\n\nfunction sqrt(A){\n    if(typeof A==='number' )\n        return Math.sqrt(A);\n    var ii = A.rows, jj = A.columns;\n    var result = new Matrix(ii,jj);\n    for (var i = 0; i < ii; i++) {\n        for (var j = 0; j < jj; j++) {\n            result[i][j] = Math.sqrt(A[i][j]);\n\n        }\n    }\n    return result;\n}\n\nfunction abs(A){\n    if(typeof A==='number' )\n        return Math.abs(A);\n    var ii = A.rows, jj = A.columns;\n    var result = new Matrix(ii,jj);\n    for (var i = 0; i < ii; i++) {\n        for (var j = 0; j < jj; j++) {\n            result[i][j] = Math.abs(A[i][j]);\n\n        }\n    }\n    return result;\n}\n\nfunction exp(A){\n    if(typeof A==='number' )\n        return Math.sqrt(A);\n    var ii = A.rows, jj = A.columns;\n    var result = new Matrix(ii,jj);\n    for (var i = 0; i < ii; i++) {\n        for (var j = 0; j < jj; j++) {\n            result[i][j] = Math.exp(A[i][j]);\n        }\n    }\n    return result;\n}\n\nfunction dotPow(A, b){\n    if(typeof A==='number' )\n        return Math.pow(A,b);\n    //console.log(A);\n    var ii = A.rows, jj = A.columns;\n    var result = new Matrix(ii,jj);\n    for (var i = 0; i < ii; i++) {\n        for (var j = 0; j < jj; j++) {\n            result[i][j] = Math.pow(A[i][j],b);\n        }\n    }\n    return result;\n}\n\nfunction solve(A, B){\n    return A.solve(B);\n}\n\nfunction inv(A){\n    if(typeof A ===\"number\")\n        return 1/A;\n    return A.inverse();\n}\n\nmodule.exports = {\n    transpose:transpose,\n    add:add,\n    subtract:subtract,\n    multiply:multiply,\n    dotMultiply:dotMultiply,\n    dotDivide:dotDivide,\n    diag:diag,\n    min:min,\n    max:max,\n    solve:solve,\n    inv:inv,\n    sqrt:sqrt,\n    exp:exp,\n    dotPow:dotPow,\n    abs:abs,\n    matrix:matrix,\n    ones:ones,\n    zeros:zeros,\n    random:random,\n    eye:eye\n};\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/ml-optimize-lorentzian/node_modules/ml-curve-fitting/src/algebra.js","'use strict';\n\nfunction getConverter() {\n    // the following RegExp can only be used for XYdata, some peakTables have values with a \"E-5\" ...\n    const ntuplesSeparator = /[, \\t]+/;\n    const GC_MS_FIELDS = ['TIC', '.RIC', 'SCANNUMBER'];\n\n    function convertToFloatArray(stringArray) {\n        var l = stringArray.length;\n        var floatArray = new Array(l);\n        for (var i = 0; i < l; i++) {\n            floatArray[i] = parseFloat(stringArray[i]);\n        }\n        return floatArray;\n    }\n\n    class Spectrum {}\n\n    const defaultOptions = {\n        keepRecordsRegExp: /^$/,\n        xy: false,\n        withoutXY: false,\n        chromatogram: false,\n        keepSpectra: false,\n        noContour: false,\n        nbContourLevels: 7,\n        noiseMultiplier: 5\n    };\n\n    function convert(jcamp, options) {\n        options = Object.assign({}, defaultOptions, options);\n\n        var wantXY = !options.withoutXY;\n\n        var start = Date.now();\n\n        var ntuples = {};\n        var ldr, dataLabel, dataValue, ldrs;\n        var i, ii, j, position, endLine, infos;\n\n        var result = {};\n        result.profiling = [];\n        result.logs = [];\n        var spectra = [];\n        result.spectra = spectra;\n        result.info = {};\n        var spectrum = new Spectrum();\n\n        if (!(typeof jcamp === 'string')) {\n            throw new TypeError('the JCAMP should be a string');\n        }\n\n        if (result.profiling) {\n            result.profiling.push({\n                action: 'Before split to LDRS',\n                time: Date.now() - start\n            });\n        }\n\n        ldrs = jcamp.split(/[\\r\\n]+##/);\n\n        if (result.profiling) {\n            result.profiling.push({\n                action: 'Split to LDRS',\n                time: Date.now() - start\n            });\n        }\n\n        if (ldrs[0]) ldrs[0] = ldrs[0].replace(/^[\\r\\n ]*##/, '');\n\n        for (i = 0, ii = ldrs.length; i < ii; i++) {\n            ldr = ldrs[i];\n            // This is a new LDR\n            position = ldr.indexOf('=');\n            if (position > 0) {\n                dataLabel = ldr.substring(0, position);\n                dataValue = ldr.substring(position + 1).trim();\n            } else {\n                dataLabel = ldr;\n                dataValue = '';\n            }\n            dataLabel = dataLabel.replace(/[_ -]/g, '').toUpperCase();\n\n            if (dataLabel === 'DATATABLE') {\n                endLine = dataValue.indexOf('\\n');\n                if (endLine === -1) endLine = dataValue.indexOf('\\r');\n                if (endLine > 0) {\n                    var xIndex = -1;\n                    var yIndex = -1;\n                    // ##DATA TABLE= (X++(I..I)), XYDATA\n                    // We need to find the variables\n\n                    infos = dataValue.substring(0, endLine).split(/[ ,;\\t]+/);\n                    if (infos[0].indexOf('++') > 0) {\n                        var firstVariable = infos[0].replace(/.*\\(([a-zA-Z0-9]+)\\+\\+.*/, '$1');\n                        var secondVariable = infos[0].replace(/.*\\.\\.([a-zA-Z0-9]+).*/, '$1');\n                        xIndex = ntuples.symbol.indexOf(firstVariable);\n                        yIndex = ntuples.symbol.indexOf(secondVariable);\n                    }\n\n                    if (xIndex === -1) xIndex = 0;\n                    if (yIndex === -1) yIndex = 0;\n\n                    if (ntuples.first) {\n                        if (ntuples.first.length > xIndex) spectrum.firstX = ntuples.first[xIndex];\n                        if (ntuples.first.length > yIndex) spectrum.firstY = ntuples.first[yIndex];\n                    }\n                    if (ntuples.last) {\n                        if (ntuples.last.length > xIndex) spectrum.lastX = ntuples.last[xIndex];\n                        if (ntuples.last.length > yIndex) spectrum.lastY = ntuples.last[yIndex];\n                    }\n                    if (ntuples.vardim && ntuples.vardim.length > xIndex) {\n                        spectrum.nbPoints = ntuples.vardim[xIndex];\n                    }\n                    if (ntuples.factor) {\n                        if (ntuples.factor.length > xIndex) spectrum.xFactor = ntuples.factor[xIndex];\n                        if (ntuples.factor.length > yIndex) spectrum.yFactor = ntuples.factor[yIndex];\n                    }\n                    if (ntuples.units) {\n                        if (ntuples.units.length > xIndex) spectrum.xUnit = ntuples.units[xIndex];\n                        if (ntuples.units.length > yIndex) spectrum.yUnit = ntuples.units[yIndex];\n                    }\n                    spectrum.datatable = infos[0];\n                    if (infos[1] && infos[1].indexOf('PEAKS') > -1) {\n                        dataLabel = 'PEAKTABLE';\n                    } else if (infos[1] && (infos[1].indexOf('XYDATA') || infos[0].indexOf('++') > 0)) {\n                        dataLabel = 'XYDATA';\n                        spectrum.deltaX = (spectrum.lastX - spectrum.firstX) / (spectrum.nbPoints - 1);\n                    }\n                }\n            }\n\n            if (dataLabel === 'XYDATA') {\n                if (wantXY) {\n                    prepareSpectrum(result, spectrum);\n                    // well apparently we should still consider it is a PEAK TABLE if there are no '++' after\n                    if (dataValue.match(/.*\\+\\+.*/)) {\n                        if (!spectrum.deltaX) {\n                            spectrum.deltaX = (spectrum.lastX - spectrum.firstX) / (spectrum.nbPoints - 1);\n                        }\n                        fastParseXYData(spectrum, dataValue, result);\n                    } else {\n                        parsePeakTable(spectrum, dataValue, result);\n                    }\n                    spectra.push(spectrum);\n                    spectrum = new Spectrum();\n                }\n                continue;\n            } else if (dataLabel === 'PEAKTABLE') {\n                if (wantXY) {\n                    prepareSpectrum(result, spectrum);\n                    parsePeakTable(spectrum, dataValue, result);\n                    spectra.push(spectrum);\n                    spectrum = new Spectrum();\n                }\n                continue;\n            }\n\n\n            if (dataLabel === 'TITLE') {\n                spectrum.title = dataValue;\n            } else if (dataLabel === 'DATATYPE') {\n                spectrum.dataType = dataValue;\n                if (dataValue.indexOf('nD') > -1) {\n                    result.twoD = true;\n                }\n            } else if (dataLabel === 'NTUPLES') {\n                if (dataValue.indexOf('nD') > -1) {\n                    result.twoD = true;\n                }\n            } else if (dataLabel === 'XUNITS') {\n                spectrum.xUnit = dataValue;\n            } else if (dataLabel === 'YUNITS') {\n                spectrum.yUnit = dataValue;\n            } else if (dataLabel === 'FIRSTX') {\n                spectrum.firstX = parseFloat(dataValue);\n            } else if (dataLabel === 'LASTX') {\n                spectrum.lastX = parseFloat(dataValue);\n            } else if (dataLabel === 'FIRSTY') {\n                spectrum.firstY = parseFloat(dataValue);\n            } else if (dataLabel === 'LASTY') {\n                spectrum.lastY = parseFloat(dataValue);\n            } else if (dataLabel === 'NPOINTS') {\n                spectrum.nbPoints = parseFloat(dataValue);\n            } else if (dataLabel === 'XFACTOR') {\n                spectrum.xFactor = parseFloat(dataValue);\n            } else if (dataLabel === 'YFACTOR') {\n                spectrum.yFactor = parseFloat(dataValue);\n            } else if (dataLabel === 'DELTAX') {\n                spectrum.deltaX = parseFloat(dataValue);\n            } else if (dataLabel === '.OBSERVEFREQUENCY' || dataLabel === '$SFO1') {\n                if (!spectrum.observeFrequency) spectrum.observeFrequency = parseFloat(dataValue);\n            } else if (dataLabel === '.OBSERVENUCLEUS') {\n                if (!spectrum.xType) result.xType = dataValue.replace(/[^a-zA-Z0-9]/g, '');\n            } else if (dataLabel === '$SFO2') {\n                if (!result.indirectFrequency) result.indirectFrequency = parseFloat(dataValue);\n\n            } else if (dataLabel === '$OFFSET') { // OFFSET for Bruker spectra\n                result.shiftOffsetNum = 0;\n                if (!result.shiftOffsetVal) result.shiftOffsetVal = parseFloat(dataValue);\n            } else if (dataLabel === '$REFERENCEPOINT') { // OFFSET for Varian spectra\n\n\n                // if we activate this part it does not work for ACD specmanager\n                //         } else if (dataLabel=='.SHIFTREFERENCE') {   // OFFSET FOR Bruker Spectra\n                //                 var parts = dataValue.split(/ *, */);\n                //                 result.shiftOffsetNum = parseInt(parts[2].trim());\n                //                 result.shiftOffsetVal = parseFloat(parts[3].trim());\n            } else if (dataLabel === 'VARNAME') {\n                ntuples.varname = dataValue.split(ntuplesSeparator);\n            } else if (dataLabel === 'SYMBOL') {\n                ntuples.symbol = dataValue.split(ntuplesSeparator);\n            } else if (dataLabel === 'VARTYPE') {\n                ntuples.vartype = dataValue.split(ntuplesSeparator);\n            } else if (dataLabel === 'VARFORM') {\n                ntuples.varform = dataValue.split(ntuplesSeparator);\n            } else if (dataLabel === 'VARDIM') {\n                ntuples.vardim = convertToFloatArray(dataValue.split(ntuplesSeparator));\n            } else if (dataLabel === 'UNITS') {\n                ntuples.units = dataValue.split(ntuplesSeparator);\n            } else if (dataLabel === 'FACTOR') {\n                ntuples.factor = convertToFloatArray(dataValue.split(ntuplesSeparator));\n            } else if (dataLabel === 'FIRST') {\n                ntuples.first = convertToFloatArray(dataValue.split(ntuplesSeparator));\n            } else if (dataLabel === 'LAST') {\n                ntuples.last = convertToFloatArray(dataValue.split(ntuplesSeparator));\n            } else if (dataLabel === 'MIN') {\n                ntuples.min = convertToFloatArray(dataValue.split(ntuplesSeparator));\n            } else if (dataLabel === 'MAX') {\n                ntuples.max = convertToFloatArray(dataValue.split(ntuplesSeparator));\n            } else if (dataLabel === '.NUCLEUS') {\n                if (result.twoD) {\n                    result.yType = dataValue.split(ntuplesSeparator)[0];\n                }\n            } else if (dataLabel === 'PAGE') {\n                spectrum.page = dataValue.trim();\n                spectrum.pageValue = parseFloat(dataValue.replace(/^.*=/, ''));\n                spectrum.pageSymbol = spectrum.page.replace(/[=].*/, '');\n                var pageSymbolIndex = ntuples.symbol.indexOf(spectrum.pageSymbol);\n                var unit = '';\n                if (ntuples.units && ntuples.units[pageSymbolIndex]) {\n                    unit = ntuples.units[pageSymbolIndex];\n                }\n                if (result.indirectFrequency && unit !== 'PPM') {\n                    spectrum.pageValue /= result.indirectFrequency;\n                }\n            } else if (dataLabel === 'RETENTIONTIME') {\n                spectrum.pageValue = parseFloat(dataValue);\n            } else if (isMSField(dataLabel)) {\n                spectrum[convertMSFieldToLabel(dataLabel)] = dataValue;\n            }\n            if (dataLabel.match(options.keepRecordsRegExp)) {\n                result.info[dataLabel] = dataValue.trim();\n            }\n        }\n\n        if (result.profiling) {\n            result.profiling.push({\n                action: 'Finished parsing',\n                time: Date.now() - start\n            });\n        }\n\n        if (Object.keys(ntuples).length > 0) {\n            var newNtuples = [];\n            var keys = Object.keys(ntuples);\n            for (i = 0; i < keys.length; i++) {\n                var key = keys[i];\n                var values = ntuples[key];\n                for (j = 0; j < values.length; j++) {\n                    if (!newNtuples[j]) newNtuples[j] = {};\n                    newNtuples[j][key] = values[j];\n                }\n            }\n            result.ntuples = newNtuples;\n        }\n\n        if (result.twoD && wantXY) {\n            add2D(result, options);\n            if (result.profiling) {\n                result.profiling.push({\n                    action: 'Finished countour plot calculation',\n                    time: Date.now() - start\n                });\n            }\n            if (!options.keepSpectra) {\n                delete result.spectra;\n            }\n        }\n\n        if (options.chromatogram) {\n            options.xy = true;\n        }\n\n        if (options.xy && wantXY) { // the spectraData should not be a oneD array but an object with x and y\n            if (spectra.length > 0) {\n                for (i = 0; i < spectra.length; i++) {\n                    spectrum = spectra[i];\n                    if (spectrum.data.length > 0) {\n                        for (j = 0; j < spectrum.data.length; j++) {\n                            var data = spectrum.data[j];\n                            var newData = {\n                                x: new Array(data.length / 2),\n                                y: new Array(data.length / 2)\n                            };\n                            for (var k = 0; k < data.length; k = k + 2) {\n                                newData.x[k / 2] = data[k];\n                                newData.y[k / 2] = data[k + 1];\n                            }\n                            spectrum.data[j] = newData;\n                        }\n\n                    }\n\n                }\n            }\n        }\n\n        // maybe it is a GC (HPLC) / MS. In this case we add a new format\n        if (options.chromatogram) {\n            if (result.spectra.length > 1) {\n                complexChromatogram(result);\n            } else {\n                simpleChromatogram(result);\n            }\n            if (result.profiling) {\n                result.profiling.push({\n                    action: 'Finished chromatogram calculation',\n                    time: Date.now() - start\n                });\n            }\n        }\n\n        if (result.profiling) {\n            result.profiling.push({\n                action: 'Total time',\n                time: Date.now() - start\n            });\n        }\n\n        return result;\n    }\n\n\n    function convertMSFieldToLabel(value) {\n        return value.toLowerCase().replace(/[^a-z0-9]/g, '');\n    }\n\n    function isMSField(dataLabel) {\n        return GC_MS_FIELDS.indexOf(dataLabel) !== -1;\n    }\n\n    function complexChromatogram(result) {\n        var spectra = result.spectra;\n        var length = spectra.length;\n        var chromatogram = {\n            times: new Array(length),\n            series: {\n                ms: {\n                    dimension: 2,\n                    data: new Array(length)\n                }\n            }\n        };\n\n        var i;\n        var existingGCMSFields = [];\n        for (i = 0; i < GC_MS_FIELDS.length; i++) {\n            var label = convertMSFieldToLabel(GC_MS_FIELDS[i]);\n            if (spectra[0][label]) {\n                existingGCMSFields.push(label);\n                chromatogram.series[label] = {\n                    dimension: 1,\n                    data: new Array(length)\n                };\n            }\n        }\n\n        for (i = 0; i < length; i++) {\n            var spectrum = spectra[i];\n            chromatogram.times[i] = spectrum.pageValue;\n            for (var j = 0; j < existingGCMSFields.length; j++) {\n                chromatogram.series[existingGCMSFields[j]].data[i] = parseFloat(spectrum[existingGCMSFields[j]]);\n            }\n            if (spectrum.data) {\n                chromatogram.series.ms.data[i] = [spectrum.data[0].x, spectrum.data[0].y];\n            }\n\n        }\n        result.chromatogram = chromatogram;\n    }\n\n    function simpleChromatogram(result) {\n        var data = result.spectra[0].data[0];\n        result.chromatogram = {\n            times: data.x.slice(),\n            series: {\n                intensity: {\n                    dimension: 1,\n                    data: data.y.slice()\n                }\n            }\n        };\n    }\n\n    function prepareSpectrum(result, spectrum) {\n        if (!spectrum.xFactor) spectrum.xFactor = 1;\n        if (!spectrum.yFactor) spectrum.yFactor = 1;\n        if (spectrum.observeFrequency) {\n            if (spectrum.xUnit && spectrum.xUnit.toUpperCase() === 'HZ') {\n                spectrum.xUnit = 'PPM';\n                spectrum.xFactor = spectrum.xFactor / spectrum.observeFrequency;\n                spectrum.firstX = spectrum.firstX / spectrum.observeFrequency;\n                spectrum.lastX = spectrum.lastX / spectrum.observeFrequency;\n                spectrum.deltaX = spectrum.deltaX / spectrum.observeFrequency;\n            }\n        }\n        if (result.shiftOffsetVal) {\n            var shift = spectrum.firstX - result.shiftOffsetVal;\n            spectrum.firstX = spectrum.firstX - shift;\n            spectrum.lastX = spectrum.lastX - shift;\n        }\n    }\n\n    function getMedian(data) {\n        data = data.sort(compareNumbers);\n        var l = data.length;\n        return data[Math.floor(l / 2)];\n    }\n\n    function compareNumbers(a, b) {\n        return a - b;\n    }\n\n    function convertTo3DZ(spectra) {\n        var minZ = spectra[0].data[0][0];\n        var maxZ = minZ;\n        var ySize = spectra.length;\n        var xSize = spectra[0].data[0].length / 2;\n        var z = new Array(ySize);\n        for (var i = 0; i < ySize; i++) {\n            z[i] = new Array(xSize);\n            var xVector = spectra[i].data[0];\n            for (var j = 0; j < xSize; j++) {\n                var value = xVector[j * 2 + 1];\n                z[i][j] = value;\n                if (value < minZ) minZ = value;\n                if (value > maxZ) maxZ = value;\n            }\n        }\n        return {\n            z: z,\n            minX: spectra[0].data[0][0],\n            maxX: spectra[0].data[0][spectra[0].data[0].length - 2], // has to be -2 because it is a 1D array [x,y,x,y,...]\n            minY: spectra[0].pageValue,\n            maxY: spectra[ySize - 1].pageValue,\n            minZ: minZ,\n            maxZ: maxZ,\n            noise: getMedian(z[0].map(Math.abs))\n        };\n\n    }\n\n    function add2D(result, options) {\n        var zData = convertTo3DZ(result.spectra);\n        if (!options.noContour) {\n            result.contourLines = generateContourLines(zData, options);\n            delete zData.z;\n        }\n        result.minMax = zData;\n    }\n\n\n    function generateContourLines(zData, options) {\n        var noise = zData.noise;\n        var z = zData.z;\n        var povarHeight0, povarHeight1, povarHeight2, povarHeight3;\n        var isOver0, isOver1, isOver2, isOver3;\n        var nbSubSpectra = z.length;\n        var nbPovars = z[0].length;\n        var pAx, pAy, pBx, pBy;\n\n        var x0 = zData.minX;\n        var xN = zData.maxX;\n        var dx = (xN - x0) / (nbPovars - 1);\n        var y0 = zData.minY;\n        var yN = zData.maxY;\n        var dy = (yN - y0) / (nbSubSpectra - 1);\n        var minZ = zData.minZ;\n        var maxZ = zData.maxZ;\n\n        //System.out.prvarln('y0 '+y0+' yN '+yN);\n        // -------------------------\n        // Povars attribution\n        //\n        // 0----1\n        // |  / |\n        // | /  |\n        // 2----3\n        //\n        // ---------------------d------\n\n        var iter = options.nbContourLevels * 2;\n        var contourLevels = new Array(iter);\n        var lineZValue;\n        for (var level = 0; level < iter; level++) { // multiply by 2 for positif and negatif\n            var contourLevel = {};\n            contourLevels[level] = contourLevel;\n            var side = level % 2;\n            var factor = (maxZ - options.noiseMultiplier * noise) * Math.exp((level >> 1) - options.nbContourLevels);\n            if (side === 0) {\n                lineZValue = factor + options.noiseMultiplier * noise;\n            } else {\n                lineZValue = (0 - factor) - options.noiseMultiplier * noise;\n            }\n            var lines = [];\n            contourLevel.zValue = lineZValue;\n            contourLevel.lines = lines;\n\n            if (lineZValue <= minZ || lineZValue >= maxZ) continue;\n\n            for (var iSubSpectra = 0; iSubSpectra < nbSubSpectra - 1; iSubSpectra++) {\n                var subSpectra = z[iSubSpectra];\n                var subSpectraAfter = z[iSubSpectra + 1];\n                for (var povar = 0; povar < nbPovars - 1; povar++) {\n                    povarHeight0 = subSpectra[povar];\n                    povarHeight1 = subSpectra[povar + 1];\n                    povarHeight2 = subSpectraAfter[povar];\n                    povarHeight3 = subSpectraAfter[povar + 1];\n\n                    isOver0 = (povarHeight0 > lineZValue);\n                    isOver1 = (povarHeight1 > lineZValue);\n                    isOver2 = (povarHeight2 > lineZValue);\n                    isOver3 = (povarHeight3 > lineZValue);\n\n                    // Example povar0 is over the plane and povar1 and\n                    // povar2 are below, we find the varersections and add\n                    // the segment\n                    if (isOver0 !== isOver1 && isOver0 !== isOver2) {\n                        pAx = povar + (lineZValue - povarHeight0) / (povarHeight1 - povarHeight0);\n                        pAy = iSubSpectra;\n                        pBx = povar;\n                        pBy = iSubSpectra + (lineZValue - povarHeight0) / (povarHeight2 - povarHeight0);\n                        lines.push(pAx * dx + x0);\n                        lines.push(pAy * dy + y0);\n                        lines.push(pBx * dx + x0);\n                        lines.push(pBy * dy + y0);\n                    }\n                    // remove push does not help !!!!\n                    if (isOver3 !== isOver1 && isOver3 !== isOver2) {\n                        pAx = povar + 1;\n                        pAy = iSubSpectra + 1 - (lineZValue - povarHeight3) / (povarHeight1 - povarHeight3);\n                        pBx = povar + 1 - (lineZValue - povarHeight3) / (povarHeight2 - povarHeight3);\n                        pBy = iSubSpectra + 1;\n                        lines.push(pAx * dx + x0);\n                        lines.push(pAy * dy + y0);\n                        lines.push(pBx * dx + x0);\n                        lines.push(pBy * dy + y0);\n                    }\n                    // test around the diagonal\n                    if (isOver1 !== isOver2) {\n                        pAx = (povar + 1 - (lineZValue - povarHeight1) / (povarHeight2 - povarHeight1)) * dx + x0;\n                        pAy = (iSubSpectra + (lineZValue - povarHeight1) / (povarHeight2 - povarHeight1)) * dy + y0;\n                        if (isOver1 !== isOver0) {\n                            pBx = povar + 1 - (lineZValue - povarHeight1) / (povarHeight0 - povarHeight1);\n                            pBy = iSubSpectra;\n                            lines.push(pAx);\n                            lines.push(pAy);\n                            lines.push(pBx * dx + x0);\n                            lines.push(pBy * dy + y0);\n                        }\n                        if (isOver2 !== isOver0) {\n                            pBx = povar;\n                            pBy = iSubSpectra + 1 - (lineZValue - povarHeight2) / (povarHeight0 - povarHeight2);\n                            lines.push(pAx);\n                            lines.push(pAy);\n                            lines.push(pBx * dx + x0);\n                            lines.push(pBy * dy + y0);\n                        }\n                        if (isOver1 !== isOver3) {\n                            pBx = povar + 1;\n                            pBy = iSubSpectra + (lineZValue - povarHeight1) / (povarHeight3 - povarHeight1);\n                            lines.push(pAx);\n                            lines.push(pAy);\n                            lines.push(pBx * dx + x0);\n                            lines.push(pBy * dy + y0);\n                        }\n                        if (isOver2 !== isOver3) {\n                            pBx = povar + (lineZValue - povarHeight2) / (povarHeight3 - povarHeight2);\n                            pBy = iSubSpectra + 1;\n                            lines.push(pAx);\n                            lines.push(pAy);\n                            lines.push(pBx * dx + x0);\n                            lines.push(pBy * dy + y0);\n                        }\n                    }\n                }\n            }\n        }\n\n        return {\n            minX: zData.minX,\n            maxX: zData.maxX,\n            minY: zData.minY,\n            maxY: zData.maxY,\n            segments: contourLevels\n        };\n    }\n\n    function fastParseXYData(spectrum, value) {\n        // TODO need to deal with result\n        //  console.log(value);\n        // we check if deltaX is defined otherwise we calculate it\n\n        var yFactor = spectrum.yFactor;\n        var deltaX = spectrum.deltaX;\n\n\n        spectrum.isXYdata = true;\n        // TODO to be improved using 2 array {x:[], y:[]}\n        var currentData = [];\n        spectrum.data = [currentData];\n\n\n        var currentX = spectrum.firstX;\n        var currentY = spectrum.firstY;\n\n        // we skip the first line\n        //\n        var endLine = false;\n        var ascii;\n        for (var i = 0; i < value.length; i++) {\n            ascii = value.charCodeAt(i);\n            if (ascii === 13 || ascii === 10) {\n                endLine = true;\n            } else {\n                if (endLine) break;\n            }\n        }\n\n        // we proceed taking the i after the first line\n        var newLine = true;\n        var isDifference = false;\n        var isLastDifference = false;\n        var lastDifference = 0;\n        var isDuplicate = false;\n        var inComment = false;\n        var currentValue = 0;\n        var isNegative = false;\n        var inValue = false;\n        var skipFirstValue = false;\n        var decimalPosition = 0;\n        for (; i <= value.length; i++) {\n            if (i === value.length) ascii = 13;\n            else ascii = value.charCodeAt(i);\n            if (inComment) {\n                // we should ignore the text if we are after $$\n                if (ascii === 13 || ascii === 10) {\n                    newLine = true;\n                    inComment = false;\n                }\n            } else {\n                // when is it a new value ?\n                // when it is not a digit, . or comma\n                // it is a number that is either new or we continue\n                if (ascii <= 57 && ascii >= 48) { // a number\n                    inValue = true;\n                    if (decimalPosition > 0) {\n                        currentValue += (ascii - 48) / Math.pow(10, decimalPosition++);\n                    } else {\n                        currentValue *= 10;\n                        currentValue += ascii - 48;\n                    }\n                } else if (ascii === 44 || ascii === 46) { // a \",\" or \".\"\n                    inValue = true;\n                    decimalPosition++;\n                } else {\n                    if (inValue) {\n                        // need to process the previous value\n                        if (newLine) {\n                            newLine = false; // we don't check the X value\n                            // console.log(\"NEW LINE\",isDifference, lastDifference);\n                            // if new line and lastDifference, the first value is just a check !\n                            // that we don't check ...\n                            if (isLastDifference) skipFirstValue = true;\n                        } else {\n                            // need to deal with duplicate and differences\n                            if (skipFirstValue) {\n                                skipFirstValue = false;\n                            } else {\n                                if (isDifference) {\n                                    lastDifference = isNegative ? (0 - currentValue) : currentValue;\n                                    isLastDifference = true;\n                                    isDifference = false;\n                                }\n                                var duplicate = isDuplicate ? currentValue - 1 : 1;\n                                for (var j = 0; j < duplicate; j++) {\n                                    if (isLastDifference) {\n                                        currentY += lastDifference;\n                                    } else {\n                                        currentY = isNegative ? (0 - currentValue) : currentValue;\n                                    }\n                                    currentData.push(currentX);\n                                    currentData.push(currentY * yFactor);\n                                    currentX += deltaX;\n                                }\n                            }\n                        }\n                        isNegative = false;\n                        currentValue = 0;\n                        decimalPosition = 0;\n                        inValue = false;\n                        isDuplicate = false;\n                    }\n\n                    // positive SQZ digits @ A B C D E F G H I (ascii 64-73)\n                    if ((ascii < 74) && (ascii > 63)) {\n                        inValue = true;\n                        isLastDifference = false;\n                        currentValue = ascii - 64;\n                    } else\n                    // negative SQZ digits a b c d e f g h i (ascii 97-105)\n                    if ((ascii > 96) && (ascii < 106)) {\n                        inValue = true;\n                        isLastDifference = false;\n                        currentValue = ascii - 96;\n                        isNegative = true;\n                    } else\n                    // DUP digits S T U V W X Y Z s (ascii 83-90, 115)\n                    if (ascii === 115) {\n                        inValue = true;\n                        isDuplicate = true;\n                        currentValue = 9;\n                    } else if ((ascii > 82) && (ascii < 91)) {\n                        inValue = true;\n                        isDuplicate = true;\n                        currentValue = ascii - 82;\n                    } else\n                    // positive DIF digits % J K L M N O P Q R (ascii 37, 74-82)\n                    if ((ascii > 73) && (ascii < 83)) {\n                        inValue = true;\n                        isDifference = true;\n                        currentValue = ascii - 73;\n                    } else\n                    // negative DIF digits j k l m n o p q r (ascii 106-114)\n                    if ((ascii > 105) && (ascii < 115)) {\n                        inValue = true;\n                        isDifference = true;\n                        currentValue = ascii - 105;\n                        isNegative = true;\n                    } else\n                    // $ sign, we need to check the next one\n                    if (ascii === 36 && value.charCodeAt(i + 1) === 36) {\n                        inValue = true;\n                        inComment = true;\n                    } else\n                    // positive DIF digits % J K L M N O P Q R (ascii 37, 74-82)\n                    if (ascii === 37) {\n                        inValue = true;\n                        isDifference = true;\n                        currentValue = 0;\n                        isNegative = false;\n                    } else if (ascii === 45) { // a \"-\"\n                        // check if after there is a number, decimal or comma\n                        var ascii2 = value.charCodeAt(i + 1);\n                        if ((ascii2 >= 48 && ascii2 <= 57) || ascii2 === 44 || ascii2 === 46) {\n                            inValue = true;\n                            isLastDifference = false;\n                            isNegative = true;\n                        }\n                    } else if (ascii === 13 || ascii === 10) {\n                        newLine = true;\n                        inComment = false;\n                    }\n                    // and now analyse the details ... space or tabulation\n                    // if \"+\" we just don't care\n                }\n            }\n        }\n    }\n\n    function parsePeakTable(spectrum, value, result) {\n        var removeCommentRegExp = /\\$\\$.*/;\n        var peakTableSplitRegExp = /[,\\t ]+/;\n\n        spectrum.isPeaktable = true;\n        var i, ii, j, jj, values;\n        var currentData = [];\n        spectrum.data = [currentData];\n\n        // counts for around 20% of the time\n        var lines = value.split(/,? *,?[;\\r\\n]+ */);\n\n        for (i = 1, ii = lines.length; i < ii; i++) {\n            values = lines[i].trim().replace(removeCommentRegExp, '').split(peakTableSplitRegExp);\n            if (values.length % 2 === 0) {\n                for (j = 0, jj = values.length; j < jj; j = j + 2) {\n                    // takes around 40% of the time to add and parse the 2 values nearly exclusively because of parseFloat\n                    currentData.push(parseFloat(values[j]) * spectrum.xFactor);\n                    currentData.push(parseFloat(values[j + 1]) * spectrum.yFactor);\n                }\n            } else {\n                result.logs.push('Format error: ' + values);\n            }\n        }\n    }\n\n\n    return convert;\n\n}\n\nvar convert = getConverter();\n\nfunction JcampConverter(input, options, useWorker) {\n    if (typeof options === 'boolean') {\n        useWorker = options;\n        options = {};\n    }\n    if (useWorker) {\n        return postToWorker(input, options);\n    } else {\n        return convert(input, options);\n    }\n}\n\nvar stamps = {};\nvar worker;\n\nfunction postToWorker(input, options) {\n    if (!worker) {\n        createWorker();\n    }\n    return new Promise(function (resolve) {\n        var stamp = Date.now() + '' + Math.random();\n        stamps[stamp] = resolve;\n        worker.postMessage(JSON.stringify({\n            stamp: stamp,\n            input: input,\n            options: options\n        }));\n    });\n}\n\nfunction createWorker() {\n    var workerURL = URL.createObjectURL(new Blob([\n        'var getConverter =' + getConverter.toString() + ';var convert = getConverter(); onmessage = function (event) { var data = JSON.parse(event.data); postMessage(JSON.stringify({stamp: data.stamp, output: convert(data.input, data.options)})); };'\n    ], {type: 'application/javascript'}));\n    worker = new Worker(workerURL);\n    URL.revokeObjectURL(workerURL);\n    worker.addEventListener('message', function (event) {\n        var data = JSON.parse(event.data);\n        var stamp = data.stamp;\n        if (stamps[stamp]) {\n            stamps[stamp](data.output);\n        }\n    });\n}\n\nfunction createTree(jcamp) {\n    if (typeof jcamp !== 'string') {\n        throw new TypeError('the JCAMP should be a string');\n    }\n\n    var lines = jcamp.split(/[\\r\\n]+/);\n\n    var stack = [];\n    var result = [];\n    var current;\n    var ntupleLevel = 0;\n    for (var i = 0; i < lines.length; i++) {\n        var line = lines[i];\n\n        if (line.substring(0, 9) === '##NTUPLES') {\n            ntupleLevel++;\n        }\n\n        if (line.substring(0, 7) === '##TITLE') {\n            stack.push({\n                title: line.substring(8).trim(),\n                jcamp: line + '\\n',\n                children: []\n            });\n            current = stack[stack.length - 1];\n        } else if (line.substring(0, 5) === '##END' && ntupleLevel === 0) {\n            current.jcamp += line + '\\n';\n            var finished = stack.pop();\n            if (stack.length !== 0) {\n                current = stack[stack.length - 1];\n                current.children.push(finished);\n            } else {\n                current = undefined;\n                result.push(finished);\n            }\n        } else if (current && current.jcamp) {\n            current.jcamp += line + '\\n';\n            if (line.substring(0, 10) === '##DATATYPE') {\n                current.dataType = line.substring(11).trim();\n            }\n        }\n\n        if (line.substring(0, 5) === '##END' && ntupleLevel > 0) {\n            ntupleLevel--;\n        }\n\n    }\n    return result;\n}\n\nmodule.exports = {\n    convert: JcampConverter,\n    createTree: createTree\n};\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/jcampconverter/src/index.js","'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\n\n\n// WEBPACK FOOTER //\n// ./node_modules/ml-stat/array.js","'use strict';\n\nexports.hypotenuse = function hypotenuse(a, b) {\n    var r;\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\n\n\n// WEBPACK FOOTER //\n// ./node_modules/ml-optimize-lorentzian/node_modules/ml-matrix/src/dc/util.js","\n// small note on the best way to define array\n// http://jsperf.com/lp-array-and-loops/2\n\nimport ArrayUtils from 'ml-array-utils';\nimport min from 'ml-array-min';\nimport max from 'ml-array-max';\nimport getMedian from 'ml-array-median';\nimport rescale from 'ml-array-rescale';\nimport JcampConverter from 'jcampconverter';\nimport JcampCreator from './jcampEncoder/JcampCreator';\nimport peakPicking from './peakPicking/peakPicking';\n\nconst DATACLASS_XY = 1;\nconst DATACLASS_PEAK = 2;\n\n/**\n * Construct the object from the given sd object(output of the jcampconverter or brukerconverter filter)\n * @class SD\n * @param {SD} sd\n * @constructor\n */\nexport default class SD {\n    constructor(sd) {\n        this.sd = sd;\n        this.activeElement = 0;\n    }\n\n    /**\n     * Creates a SD instance from the given jcamp.\n     * @param {string} jcamp - The jcamp string to parse from\n     * @param {object} options - Jcamp parsing options\n     * @param {boolean} [options.keepSpectra=true] - If set to false the spectra data points will not be stored in the instance\n     * @param {RegExp} [options.keepRecordsRegExp=/^.+$/] A regular expression for metadata fields to extract from the jcamp\n     * @return {SD} Return the constructed SD instance\n     */\n    static fromJcamp(jcamp, options = {}) {\n        options = Object.assign({}, {keepSpectra: true, keepRecordsRegExp: /^.+$/}, options, {xy: true});\n        var spectrum = JcampConverter.convert(jcamp, options);\n        return new this(spectrum);\n    }\n\n    /**\n     * This function create a SD instance from xy data\n     * @param {Array} x - X data.\n     * @param {Array} y - Y data.\n     * @param {object} options - Optional parameters\n     * @return {SD} SD instance from x and y data\n     */\n    static fromXY(x, y, options = {}) {\n        const result = {};\n        result.profiling = [];\n        result.logs = [];\n        result.info = {};\n        const spectrum = {};\n        spectrum.isXYdata = true;\n        spectrum.nbPoints = x.length;\n        spectrum.firstX = x[0];\n        spectrum.firstY = y[0];\n        spectrum.lastX = x[spectrum.nbPoints - 1];\n        spectrum.lastY = y[spectrum.nbPoints - 1];\n        spectrum.xFactor = 1;\n        spectrum.yFactor = 1;\n        spectrum.xUnit = options.xUnit;\n        spectrum.yUnit = options.yUnit;\n        spectrum.deltaX = (spectrum.lastX - spectrum.firstX) / (spectrum.nbPoints - 1);\n        spectrum.title = options.title || 'spectra-data from xy';\n        spectrum.dataType = options.dataType;\n        spectrum.data = [{x: x, y: y}];\n        result.twoD = false;\n        result.spectra = [spectrum];\n        return new this(result);\n    }\n\n    /**\n     * This function sets the nactiveSpectrum sub-spectrum as active\n     * @param {number} nactiveSpectrum index of the sub-spectrum to set as active\n     */\n    setActiveElement(nactiveSpectrum) {\n        this.activeElement = nactiveSpectrum;\n    }\n\n    /**\n     * This function returns the index of the active sub-spectrum.\n     * @return {number|*}\n     */\n    getActiveElement() {\n        return this.activeElement;\n    }\n\n    /**\n     * This function returns the units of the independent dimension.\n     * @return {xUnit|*|M.xUnit}\n     */\n    getXUnits() {\n        return this.getSpectrum().xUnit;\n    }\n\n    /**\n     * This function set the units of the independent dimension.\n     * @param {string} units of the independent dimension.\n     */\n    setXUnits(units) {\n        this.getSpectrum().xUnit = units;\n    }\n    /**\n     * * This function returns the units of the dependent variable.\n     * @return {yUnit|*|M.yUnit}\n     */\n    getYUnits() {\n        return this.getSpectrum().yUnit;\n    }\n\n    /**\n     * This function returns the information about the dimensions\n     * @param {number} index of the tuple\n     * @return {number|*}\n     */\n    getSpectraVariable(index) {\n        return this.sd.ntuples[index];\n    }\n\n    /**\n     * Return the current page\n     * @param {number} index - index of spectrum\n     * @return {number}\n     */\n    getPage(index) {\n        return this.sd.spectra[index].page;\n    }\n\n    /**\n     * Return the number of points in the current spectrum\n     * @param {number} i of sub-spectrum\n     * @return {number | *}\n     */\n    getNbPoints(i) {\n        return this.getSpectrumData(i).y.length;\n    }\n\n    /**\n     * Return the first value of the independent dimension\n     * @param {i} i of sub-spectrum\n     * @return {number | *}\n     */\n    getFirstX(i = this.activeElement) {\n        return this.sd.spectra[i].firstX;\n    }\n\n    /**\n     * Set the firstX for this spectrum. You have to force and update of the xAxis after!!!\n     * @param {number} x - The value for firstX\n     * @param {number} i sub-spectrum Default:activeSpectrum\n     */\n    setFirstX(x, i = this.activeElement) {\n        this.sd.spectra[i].firstX = x;\n    }\n\n    /**\n     * Return the last value of the direct dimension\n     * @param {number} i - sub-spectrum Default:activeSpectrum\n     * @return {number}\n     */\n    getLastX(i = this.activeElement) {\n        return this.sd.spectra[i].lastX;\n    }\n\n\n    /**\n     * Set the last value of the direct dimension. You have to force and update of the xAxis after!!!\n     * @param {number} x - The value for lastX\n     * @param {number} i - sub-spectrum Default:activeSpectrum\n     */\n    setLastX(x, i = this.activeElement) {\n        this.sd.spectra[i].lastX = x;\n    }\n\n    /**\n     */\n    /**\n     * Return the first value of the direct dimension\n     * @param {number} i - sub-spectrum Default:activeSpectrum\n     * @return {number}\n     */\n    getFirstY(i = this.activeElement) {\n        return this.sd.spectra[i].firstY;\n    }\n\n    /**\n     * Set the first value of the indirect dimension. Only valid for 2D spectra.\n     * @param {number} y - the value of firstY\n     * @param {number} i - sub-spectrum Default: activeSpectrum\n     */\n    setFirstY(y, i = this.activeElement) {\n        this.sd.spectra[i].firstY = y;\n    }\n\n    /**\n     * Return the first value of the indirect dimension. Only valid for 2D spectra.\n     * @param {number} i - sub-spectrum Default: activeSpectrum\n     * @return {number}\n     */\n    getLastY(i = this.activeElement) {\n        return this.sd.spectra[i].lastY;\n    }\n\n    /**\n     * Return the first value of the indirect dimension\n     * @param {number} y - the value of firstY\n     * @param {number} i - sub-spectrum Default:activeSpectrum\n     */\n    setLastY(y, i = this.activeElement) {\n        this.sd.spectra[i].lastY = y;\n    }\n\n    /**\n     * Set the spectrum data_class. It could be DATACLASS_PEAK=1 or DATACLASS_XY=2\n     * @param {string} dataClass - data_class of the current spectra data\n     */\n    setDataClass(dataClass) {\n        if (dataClass === DATACLASS_PEAK) {\n            this.getSpectrum().isPeaktable = true;\n            this.getSpectrum().isXYdata = false;\n        }\n        if (dataClass === DATACLASS_XY) {\n            this.getSpectrum().isXYdata = true;\n            this.getSpectrum().isPeaktable = false;\n        }\n    }\n\n    /**\n     * Is this a PEAKTABLE spectrum?\n     * @return {boolean}\n     */\n    isDataClassPeak() {\n        if (this.getSpectrum().isPeaktable) {\n            return this.getSpectrum().isPeaktable;\n        }\n        return false;\n    }\n\n    /**\n     * Is this a XY spectrum?\n     * @return {*}\n     */\n    isDataClassXY() {\n        if (this.getSpectrum().isXYdata) {\n            return this.getSpectrum().isXYdata;\n        }\n        return false;\n    }\n\n    /**\n     * Set the data type for this spectrum. It could be one of the following:\n     [\"INFRARED\"||\"IR\",\"IV\",\"NDNMRSPEC\",\"NDNMRFID\",\"NMRSPEC\",\"NMRFID\",\"HPLC\",\"MASS\"\n     * \"UV\", \"RAMAN\" \"GC\"|| \"GASCHROMATOGRAPH\",\"CD\"|| \"DICHRO\",\"XY\",\"DEC\"]\n     * @param {string} dataType\n     */\n    setDataType(dataType) {\n        this.getSpectrum().dataType = dataType;\n    }\n\n    /**\n     * Return the dataType(see: setDataType )\n     * @return {string|string|*|string}\n     */\n    getDataType() {\n        return this.getSpectrum().dataType;\n    }\n\n    /**\n     * Return the i-th sub-spectrum data in the current spectrum\n     * @param {number} i - sub-spectrum Default:activeSpectrum\n     * @return {object}\n     */\n    getSpectrumData(i = this.activeElement) {\n        return this.sd.spectra[i].data[0];\n    }\n\n    /**\n     * Return the i-th sub-spectra in the current spectrum\n     * @param {number} i - sub-spectrum Default:activeSpectrum\n     * @return {object}\n     */\n    getSpectrum(i = this.activeElement) {\n        return this.sd.spectra[i];\n    }\n\n    /**\n     * Return the amount of sub-spectra in this object\n     * @return {*}\n     */\n    getNbSubSpectra() {\n        return this.sd.spectra.length;\n    }\n\n    /**\n     *  Returns an array containing the x values of the spectrum\n     * @param {number} i sub-spectrum Default:activeSpectrum\n     * @return {Array}\n     */\n    getXData(i) {\n        return this.getSpectrumData(i).x;\n    }\n\n    /**\n     * This function returns a double array containing the values with the intensities for the current sub-spectrum.\n     * @param {number} i sub-spectrum Default:activeSpectrum\n     * @return {Array}\n     */\n    getYData(i) {\n        return this.getSpectrumData(i).y;\n    }\n\n    /**\n     * Returns the x value at the specified index for the active sub-spectrum.\n     * @param {number} i array index between 0 and spectrum.getNbPoints()-1\n     * @return {number}\n     */\n    getX(i) {\n        return this.getXData()[i];\n    }\n\n    /**\n     * Returns the y value at the specified index for the active sub-spectrum.\n     * @param {number} i array index between 0 and spectrum.getNbPoints()-1\n     * @return {number}\n     */\n    getY(i) {\n        return this.getYData()[i];\n    }\n\n    /**\n     * Returns a double[2][nbPoints] where the first row contains the x values and the second row the y values.\n     * @param {number} i sub-spectrum Default:activeSpectrum\n     * @return {*[]}\n     */\n    getXYData(i) {\n        return [this.getXData(i), this.getYData(i)];\n    }\n\n    /**\n     * Return the title of the current spectrum.\n     * @param {number} i sub-spectrum Default:activeSpectrum\n     * @return {*}\n     */\n    getTitle(i) {\n        return this.getSpectrum(i).title;\n    }\n\n    /**\n     * Set the title of this spectrum.\n     * @param {string} newTitle The new title\n     * @param {number} i sub-spectrum Default:activeSpectrum\n     */\n    setTitle(newTitle, i) {\n        this.getSpectrum(i).title = newTitle;\n    }\n\n    /**\n     * This function returns the minimal value of Y\n     * @param {number} i sub-spectrum Default:activeSpectrum\n     * @return {number}\n     */\n    getMinY(i) {\n        return min(this.getYData(i));\n    }\n\n    /**\n     * This function returns the maximal value of Y\n     * @param {number} i sub-spectrum Default:activeSpectrum\n     * @return {number}\n     */\n    getMaxY(i) {\n        return max(this.getYData(i));\n    }\n\n    /**\n     * Return the min and max value of Y\n     * @param {number} i sub-spectrum Default:activeSpectrum\n     * @return {{min, max}|*}\n     */\n    getMinMaxY(i) {\n        return {min: this.getMinY(i), max: this.getMaxY(i)};\n    }\n\n\n    /**\n     * Get the noise threshold level of the current spectrum. It uses median instead of the mean\n     * @param {object} options\n     * @param {number} options.from - lower limit in ppm to compute noise level\n     * @param {number} options.to - upper limit in ppm to compute noise level\n     * @return {number}\n     */\n    getNoiseLevel(options = {}) {\n        let data;\n        if (options.from && options.to) {\n            data = this.getVector(options.from, options.to);\n        } else {\n            data = this.getYData();\n        }\n        var median = getMedian(data);\n        return median * this.getNMRPeakThreshold(this.getNucleus(1));\n    }\n\n    /**\n     * Return the xValue for the given index.\n     * @param {number} doublePoint\n     * @return {number}\n     */\n    arrayPointToUnits(doublePoint) {\n        return (this.getFirstX() - (doublePoint * (this.getFirstX() - this.getLastX()) / (this.getNbPoints() - 1)));\n    }\n\n    /**\n     * Returns the index-value for the data array corresponding to a X-value in\n     * units for the element of spectraData to which it is linked (spectraNb).\n     * This method makes use of spectraData.getFirstX(), spectraData.getLastX()\n     * and spectraData.getNbPoints() to derive the return value if it of data class XY\n     * It performs a binary search if the spectrum is a peak table\n     * @param {number} inValue - value in Units to be converted\n     * @return {number} An integer representing the index value of the inValue\n     */\n    unitsToArrayPoint(inValue) {\n        if (this.isDataClassXY()) {\n            return Math.round((this.getFirstX() - inValue) * (-1.0 / this.getDeltaX()));\n        } else if (this.isDataClassPeak()) {\n            var currentArrayPoint = 0;\n            var upperLimit = this.getNbPoints() - 1;\n            var lowerLimit = 0;\n            var midPoint;\n\n            if (this.getFirstX() > this.getLastX()) {\n                upperLimit = 0;\n                lowerLimit = this.getNbPoints() - 1;\n\n                if (inValue > this.getFirstX()) {\n                    return this.getNbPoints();\n                }\n                if (inValue < this.getLastX()) {\n                    return -1;\n                }\n            } else {\n                if (inValue < this.getFirstX()) {\n                    return -1;\n                }\n                if (inValue > this.getLastX()) {\n                    return this.getNbPoints();\n                }\n            }\n\n            while (Math.abs(upperLimit - lowerLimit) > 1) {\n                midPoint = Math.round(Math.floor((upperLimit + lowerLimit) / 2));\n                if (this.getX(midPoint) === inValue) {\n                    return midPoint;\n                }\n                if (this.getX(midPoint) > inValue) {\n                    upperLimit = midPoint;\n                } else {\n                    lowerLimit = midPoint;\n                }\n            }\n            currentArrayPoint = lowerLimit;\n            if (Math.abs(this.getX(lowerLimit) - inValue) > Math.abs(this.getX(upperLimit) - inValue)) {\n                currentArrayPoint = upperLimit;\n            }\n            return currentArrayPoint;\n        } else {\n            return 0;\n        }\n    }\n\n    /**\n     * Returns the separation between 2 consecutive points in the frequency domain\n     * @return {number}\n     */\n    getDeltaX() {\n        return (this.getLastX() - this.getFirstX()) / (this.getNbPoints() - 1);\n    }\n\n    /**\n     * This function scales the values of Y between the min and max parameters\n     * @param {number} min - Minimum desired value for Y\n     * @param {number} max - Maximum desired value for Y\n     */\n    setMinMax(min, max) {\n        let y = this.getYData();\n        rescale(y, {min: min, max: max, output: y});\n        this.updateFirstLastY();\n    }\n\n    /**\n     * This function scales the values of Y to fit the min parameter\n     * @param {number} min - Minimum desired value for Y\n     */\n    setMin(min) {\n        let y = this.getYData();\n        rescale(y, {min: min, output: y, autoMinMax: true});\n        this.updateFirstLastY();\n    }\n\n    /**\n     * This function scales the values of Y to fit the max parameter\n     * @param {number} max - Maximum desired value for Y\n     */\n    setMax(max) {\n        let y = this.getYData();\n        rescale(y, {max: max, output: y, autoMinMax: true});\n        this.updateFirstLastY();\n    }\n\n    /**\n     * This function shifts the values of Y\n     * @param {number} value - Distance of the shift\n     */\n    yShift(value) {\n        var y = this.getYData();\n        for (var i = 0; i < y.length; i++) {\n            y[i] += value;\n        }\n        this.updateFirstLastY(y);\n    }\n\n    /**\n     * This function shift the given spectraData. After this function is applied, all the peaks in the\n     * spectraData will be found at xi+globalShift\n     * @param {number} globalShift - Distance of the shift for direct dimension.\n     */\n    shift(globalShift) {\n        for (let i = 0; i < this.getNbSubSpectra(); i++) {\n            this.setActiveElement(i);\n            var x = this.getSpectrumData().x;\n            var length = this.getNbPoints();\n            for (var j = 0; j < length; j++) {\n                x[j] += globalShift;\n            }\n            this.updateFirstLastX(x);\n        }\n    }\n\n    /**\n     * Update first and last values of Y data.\n     * @param {Array} y - array of Y spectra data.\n     */\n    updateFirstLastY(y) {\n        if (!Array.isArray(y)) {\n            y = this.getYData();\n        }\n        this.setFirstY(y[0]);\n        this.setLastY(y[y.length - 1]);\n    }\n\n    /**\n     * Update first and last values of X data.\n     * @param {Array} x - array of X spectra data.\n     */\n    updateFirstLastX(x) {\n        if (!Array.isArray(x)) {\n            x = this.getXData();\n        }\n        this.setFirstX(x[0]);\n        this.setLastX(x[x.length - 1]);\n    }\n    /**\n     * Fills a zone of the spectrum with the given value.\n     * If value is undefined it will suppress the elements\n     * @param {number} from - one limit the spectrum to fill\n     * @param {number} to - one limit the spectrum to fill\n     * @param {number} value - value with which to fill\n     */\n    fill(from, to, value) {\n        var start, end, x, y;\n        for (var i = 0; i < this.getNbSubSpectra(); i++) {\n            this.setActiveElement(i);\n\n            x = this.getXData();\n            y = this.getYData();\n\n            start = this.unitsToArrayPoint(from);\n            end = this.unitsToArrayPoint(to);\n\n            if (start > end) {\n                [start, end] = [end, start];\n            }\n\n            if (typeof value !== 'number') {\n                y.splice(start, end - start);\n                x.splice(start, end - start);\n            } else {\n                for (i = start; i <= end; i++) {\n                    y[i] = value;\n                }\n            }\n        }\n    }\n\n    /**\n     * This function suppress a zone from the given spectraData within the given x range.\n     * Returns a spectraData of type PEAKDATA without peaks in the given region\n     * @param {number} from - one limit the spectrum to suppress\n     * @param {number} to - one limit the spectrum to suppress\n     */\n    suppressZone(from, to) {\n        this.fill(from, to);\n        this.setDataClass(DATACLASS_PEAK);\n    }\n\n    /**\n     * This function suppress a zones of the given spectraData within the given x range.\n     * Returns a spectraData of type PEAKDATA without peaks in the given region\n     * @param {Array} zones - Array with from-to limits of the spectrum to suppress.\n     */\n    suppressZones(zones = []) {\n        for (var i = 0; i < zones.length; i++) {\n            this.suppressZone(zones[i].from, zones[i].to);\n        }\n    }\n\n\n    /**\n     * This function performs a simple peak detection in a spectraData. The parameters that can be specified are:\n     * Returns a two dimensional array of double specifying [x,y] of the detected peaks.\n     * @option from:    Lower limit.\n     * @option to:      Upper limit.\n     * @option threshold: The minimum intensity to consider a peak as a signal, expressed as a percentage of the highest peak.\n     * @option stdev: Number of standard deviation of the noise for the threshold calculation if a threshold is not specified.\n     * @option resolution: The maximum resolution of the spectrum for considering peaks.\n     * @option yInverted: Is it a Y inverted spectrum?(like an IR spectrum)\n     * @option smooth: A function for smoothing the spectraData before the detection. If your are dealing with\n     * experimental spectra, smoothing will make the algorithm less prune to false positives.\n     */\n    /*\n    simplePeakPicking(parameters) {\n        //@TODO implements this filter\n    }\n    */\n\n    /**\n     * Get the maximum peak the spectrum\n     * @return {[x, y]}\n     */\n    getMaxPeak() {\n        var y = this.getSpectraDataY();\n        var max = y[0];\n        var index = 0;\n        for (var i = 0; i < y.length; i++) {\n            if (max < y[i]) {\n                max = y[i];\n                index = i;\n            }\n        }\n        return [this.getX(index), max];\n    }\n\n    /** TODO: should be modifed, this is same that getParamInt and getParam\n     * Get the value of the parameter. If it is null, will set up a default value\n     * @param {string} name - The parameter name\n     * @param {*} defvalue - The default value\n     * @return {number}\n     */\n\n    getParamDouble(name, defvalue) {\n        var value = this.sd.info[name];\n        if (!value) {\n            value = defvalue;\n        }\n        return value;\n    }\n\n    /**\n     * Get the string of the value of the parameter. If it is null, will set up a default value\n     * @param {string} name - The parameter name\n     * @param {*} defvalue - The default value\n     * @return {string}\n     */\n    getParamString(name, defvalue) {\n        var value = this.sd.info[name];\n        if (!value) {\n            value = defvalue;\n        }\n        return value + '';\n    }\n\n    /**\n     * Get the value of the parameter\n     * @param {string} name - The parameter name\n     * @param {*} defvalue - The default value\n     * @return {number}\n     */\n    getParamInt(name, defvalue) {\n        var value = this.sd.info[name];\n        if (!value) {\n            value = defvalue;\n        }\n        return value;\n    }\n\n    /**\n     * Get the value of the parameter\n     * @param {string} name - The parameter name\n     * @param {*} defvalue - The default value\n     * @return {*}\n     */\n    getParam(name, defvalue) {\n        var value = this.sd.info[name];\n        if (!value) {\n            value = defvalue;\n        }\n        return value;\n    }\n\n    /**\n     * True if the spectrum.info contains the given parameter\n     * @param {string} name - The parameter name\n     * @return {boolean}\n     */\n    containsParam(name) {\n        if (this.sd.info[name]) {\n            return true;\n        }\n        return false;\n    }\n\n    /**\n     * Return the y elements of the current spectrum. Same as getYData. Kept for backward compatibility.\n     * @return {Array}\n     */\n    getSpectraDataY() {\n        return this.getYData();\n    }\n\n    /**\n     * Return the x elements of the current spectrum. Same as getXData. Kept for backward compatibility.\n     * @return {Array}\n     */\n    getSpectraDataX() {\n        return this.getXData();\n    }\n\n    /**\n     * Update min max values of X and Y axis.\n     */\n    resetMinMax() {\n        //TODO: Implement this function\n    }\n\n    /**\n     * Set a new parameter to this spectrum\n     * @param {string} name - the parameter name\n     * @param {number | *} value - the parameter value\n     */\n    putParam(name, value) {\n        this.sd.info[name] = value;\n    }\n\n    /**\n     * This function returns the area under the spectrum in the given window (spectrum units)\n     * @param {number} from - one limit in spectrum units\n     * @param {number} to - one limit in spectrum units\n     * @return {number}\n     */\n    getArea(from, to) {\n        var i0 = this.unitsToArrayPoint(from);\n        var ie = this.unitsToArrayPoint(to);\n        var area = 0;\n\n        if (i0 > ie) {\n            [i0, ie] = [ie, i0];\n        }\n\n        for (var i = i0; i < ie; i++) {\n            area += this.getY(i);\n        }\n        return area * Math.abs(this.getDeltaX());\n    }\n\n    /**\n     * This function return the integral values for certains ranges at specific SD instance .\n     * @param {Array} ranges - array of objects ranges\n     * @param {object} options - option such as nH for normalization, if it is nH is zero the integral value returned is absolute value\n     */\n    updateIntegrals(ranges, options = {}) {\n        ranges.forEach(range => range.integral = this.getArea(range.from, range.to));\n        ranges.updateIntegrals({sum: options.nH});\n    }\n\n    /**\n     * Returns a equally spaced vector within the given window.\n     * @param {number} from - one limit in spectrum units\n     * @param {number} to - one limit in spectrum units\n     * @param {number} nPoints - number of points to return(!!!sometimes it is not possible to return exactly the required nbPoints)\n     * @return {Array}\n     */\n    getVector(from, to, nPoints) {\n        if (nPoints) {\n            return ArrayUtils.getEquallySpacedData(this.getSpectraDataX(), this.getSpectraDataY(),\n                {from: from, to: to, numberOfPoints: nPoints});\n        } else {\n            return this.getPointsInWindow(from, to);\n        }\n    }\n\n    /**\n     * In place modification of the data to usually reduce the size\n     * This will convert the data in equally spaces X.\n     * @param {number} from - one limit in spectrum units\n     * @param {number} to - one limit in spectrum units\n     * @param {object} options\n     * @param {number} options.nbPoints - number of points to return(!!!sometimes it is not possible to return exactly the required nbPoints)\n     * @return {this}\n     */\n    reduceData(from, to, options = {}) {\n        if (!this.isDataClassXY()) {\n            throw Error('reduceData can only apply on equidistant data');\n        }\n\n        for (let i = 0; i < this.getNbSubSpectra(); i++) {\n            this.setActiveElement(i);\n            if (this.getXUnits().toLowerCase() !== 'hz') {\n                if (options.nbPoints) {\n                    let x = this.getSpectraDataX();\n                    let y = this.getSpectraDataY();\n\n                    if (x[0] > x[1] && from < to) {\n                        [from, to] = [to, from];\n                    } else if (from > to) {\n                        [from, to] = [to, from];\n                    }\n                    y = ArrayUtils.getEquallySpacedData(x, y, {from: from, to: to, numberOfPoints: options.nbPoints});\n\n                    let step = (to - from) / (y.length - 1);\n                    x = new Array(y.length).fill(from);\n                    for (let j = 0; j < y.length; j++) {\n                        x[j] += step * j;\n                    }\n\n                    this.sd.spectra[i].data[0].x = x;\n                    this.sd.spectra[i].data[0].y = y;\n                    this.setFirstX(x[0]); this.setLastX(x[x.length - 1]);\n                    this.sd.spectra[i].nbPoints = y.length;\n                } else {\n                    var xyData = this.getPointsInWindow(from, to);\n                    this.sd.spectra[i].data[0].x = xyData[0];\n                    this.sd.spectra[i].data[0].y = xyData[1];\n                    this.setFirstX(xyData[0][0]); this.setLastX(xyData[0][xyData[0].length - 1]);\n                    this.sd.spectra[i].nbPoints = xyData[1].length;\n                }\n            }\n        }\n        this.setActiveElement(0);\n        return this;\n    }\n\n    /**\n     * Returns all the point in a given window.\n     * Not tested, you have to know what you are doing\n     * @param {number} from - index of a limit of the desired window.\n     * @param {number} to - index of a limit of the desired window\n     * @param {object} options\n     * @param {boolean} options.withoutX\n     * @return {Array} XYarray/Yarray data of the desired window.\n     */\n    getPointsInWindow(from, to, options = {}) {\n        if (!this.isDataClassXY()) {\n            throw Error('getPointsInWindow can only apply on equidistant data');\n        }\n\n        var indexOfFrom = this.unitsToArrayPoint(from);\n        var indexOfTo = this.unitsToArrayPoint(to);\n\n        if (indexOfFrom > indexOfTo) {\n            [indexOfFrom, indexOfTo] = [indexOfTo, indexOfFrom];\n        }\n        if (indexOfFrom >= 0 && indexOfTo <= this.getNbPoints() - 2) {\n            var data = this.getSpectraDataY().slice(indexOfFrom, indexOfTo + 1);\n            if (!options.withoutX) {\n                var x = this.getSpectraDataX().slice(indexOfFrom, indexOfTo + 1);\n                data = [x, data];\n            }\n            return data;\n        } else {\n            throw Error('values outside this in range');\n        }\n    }\n\n    /**\n     * Is it a 2D spectrum?\n     * @return {boolean}\n     */\n    is2D() {\n        if (typeof this.sd.twoD === 'undefined') {\n            return false;\n        }\n        return this.sd.twoD;\n    }\n\n    /**\n     * Set the normalization value for this spectrum\n     * @param {number} value - integral value to set up\n     */\n    setTotalIntegral(value) {\n        this.totalIntegralValue = value;\n    }\n\n    /**\n     * Return the normalization value. It is not set check the molfile and guess it from the number of atoms.\n     * @return {number}\n     */\n    get totalIntegral() {\n        if (this.totalIntegralValue) {\n            return this.totalIntegralValue;\n        } else if (this.molecule) {\n            if (this.getNucleus(0).indexOf('H')) {\n                return this.mf.replace(/.*H([0-9]+).*/, '$1') * 1;\n            }\n            if (this.getNucleus(0).indexOf('C')) {\n                return this.mf.replace(/.*C([0-9]+).*/, '$1') * 1;\n            }\n        } else {\n            return 100;\n        }\n        return 1;\n    }\n\n    /**\n     * this function set a molfile, molecule and molecular formula.\n     * @param {string} molfile - The molfile that correspond to current spectra data\n     */\n    setMolfile(molfile) {\n        this.molfile = molfile;\n    }\n\n    setMF(mf) {\n        this.mf = mf;\n    }\n\n    /**\n     * this function create a new peakPicking\n     * @param {object} options - parameters to calculation of peakPicking\n     * @return {*}\n     */\n    createPeaks(options = {}) {\n        this.peaks = peakPicking(this, options);\n        return this.peaks;\n    }\n\n    /**\n     * this function return the peak table or extract the peak of the spectrum.\n     * @param {object} options - parameters to calculation of peakPicking\n     * @return {*}\n     */\n    getPeaks(options) {\n        let peaks;\n        if (this.peaks) {\n            peaks = this.peaks;\n        } else {\n            peaks = peakPicking(this, options);\n        }\n        return peaks;\n    }\n\n    /*autoAssignment(options) {\n\n    }*/\n\n    /**\n     * This function creates a String that represents the given spectraData in the format JCAMP-DX 5.0\n     * The X,Y data can be compressed using one of the methods described in:\n     * \"JCAMP-DX. A STANDARD FORMAT FOR THE EXCHANGE OF ION MOBILITY SPECTROMETRY DATA\",\n     *  http://www.iupac.org/publications/pac/pdf/2001/pdf/7311x1765.pdf\n     * @param {object} options - some options are availables:\n     * @option {string} encode  - ['FIX','SQZ','DIF','DIFDUP','CVS','PAC'] (Default: 'DIFDUP')\n     * @option {number} yfactor - The YFACTOR. It allows to compress the data by removing digits from the ordinate. (Default: 1)\n     * @option {string} type - [\"NTUPLES\", \"SIMPLE\"] (Default: \"SIMPLE\")\n     * @option {object} keep - A set of user defined parameters of the given SpectraData to be stored in the jcamp.\n     * @example SD.toJcamp(spectraData,{encode:'DIFDUP',yfactor:0.01,type:\"SIMPLE\",keep:['#batchID','#url']});\n     * @return {*} a string containing the jcamp-DX file\n     */\n    toJcamp(options = {}) {\n        var creator = new JcampCreator();\n        return creator.convert(this, Object.assign({}, {yFactor: 1, encode: 'DIFDUP', type: 'SIMPLE'}, options));\n    }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/spectra-data/src/SD.js","'use strict';\n\nvar Asplice = Array.prototype.splice,\n    Aconcat = Array.prototype.concat;\n\n// For performance : http://jsperf.com/clone-array-slice-vs-while-vs-for\nfunction slice(arr) {\n    var i = 0,\n        ii = arr.length,\n        result = new Array(ii);\n    for (; i < ii; i++) {\n        result[i] = arr[i];\n    }\n    return result;\n}\n\n/**\n * Real matrix.\n * @constructor\n * @param {number|Array} nRows - Number of rows of the new matrix or a 2D array containing the data.\n * @param {number|boolean} [nColumns] - Number of columns of the new matrix or a boolean specifying if the input array should be cloned\n */\nfunction Matrix(nRows, nColumns) {\n    var i = 0, rows, columns, matrix, newInstance;\n    if (Array.isArray(nRows)) {\n        newInstance = nColumns;\n        matrix = newInstance ? slice(nRows) : nRows;\n        nRows = matrix.length;\n        nColumns = matrix[0].length;\n        if (typeof nColumns === 'undefined') {\n            throw new TypeError('Data must be a 2D array');\n        }\n        if (nRows > 0 && nColumns > 0) {\n            for (; i < nRows; i++) {\n                if (matrix[i].length !== nColumns) {\n                    throw new RangeError('Inconsistent array dimensions');\n                } else if (newInstance) {\n                    matrix[i] = slice(matrix[i]);\n                }\n            }\n        } else {\n            throw new RangeError('Invalid dimensions: ' + nRows + 'x' + nColumns);\n        }\n    } else if (typeof nRows === 'number') { // Create empty matrix\n        if (nRows > 0 && nColumns > 0) {\n            matrix = new Array(nRows);\n            for (; i < nRows; i++) {\n                matrix[i] = new Array(nColumns);\n            }\n        } else {\n            throw new RangeError('Invalid dimensions: ' + nRows + 'x' + nColumns);\n        }\n    } else {\n        throw new TypeError('Invalid arguments');\n    }\n\n    Object.defineProperty(matrix, 'rows', {writable: true, value: nRows});\n    Object.defineProperty(matrix, 'columns', {writable: true, value: nColumns});\n\n    matrix.__proto__ = Matrix.prototype;\n\n    return matrix;\n}\n\n/**\n * Constructs a Matrix with the chosen dimensions from a 1D array.\n * @param {number} newRows - Number of rows\n * @param {number} newColumns - Number of columns\n * @param {Array} newData - A 1D array containing data for the matrix\n * @returns {Matrix} - The new matrix\n */\nMatrix.from1DArray = function from1DArray(newRows, newColumns, newData) {\n    var length, data, i = 0;\n\n    length = newRows * newColumns;\n    if (length !== newData.length)\n        throw new RangeError('Data length does not match given dimensions');\n\n    data = new Array(newRows);\n    for (; i < newRows; i++) {\n        data[i] = newData.slice(i * newColumns, (i + 1) * newColumns);\n    }\n    return new Matrix(data);\n};\n\n/**\n * Creates a row vector, a matrix with only one row.\n * @param {Array} newData - A 1D array containing data for the vector\n * @returns {Matrix} - The new matrix\n */\nMatrix.rowVector = function rowVector(newData) {\n    return new Matrix([newData]);\n};\n\n/**\n * Creates a column vector, a matrix with only one column.\n * @param {Array} newData - A 1D array containing data for the vector\n * @returns {Matrix} - The new matrix\n */\nMatrix.columnVector = function columnVector(newData) {\n    var l = newData.length, vector = new Array(l);\n    for (var i = 0; i < l; i++)\n        vector[i] = [newData[i]];\n    return new Matrix(vector);\n};\n\n/**\n * Creates an empty matrix with the given dimensions. Values will be undefined. Same as using new Matrix(rows, columns).\n * @param {number} rows - Number of rows\n * @param {number} columns - Number of columns\n * @returns {Matrix} - The new matrix\n */\nMatrix.empty = function empty(rows, columns) {\n    return new Matrix(rows, columns);\n};\n\n/**\n * Creates a matrix with the given dimensions. Values will be set to zero.\n * @param {number} rows - Number of rows\n * @param {number} columns - Number of columns\n * @returns {Matrix} - The new matrix\n */\nMatrix.zeros = function zeros(rows, columns) {\n    return Matrix.empty(rows, columns).fill(0);\n};\n\n/**\n * Creates a matrix with the given dimensions. Values will be set to one.\n * @param {number} rows - Number of rows\n * @param {number} columns - Number of columns\n * @returns {Matrix} - The new matrix\n */\nMatrix.ones = function ones(rows, columns) {\n    return Matrix.empty(rows, columns).fill(1);\n};\n\n/**\n * Creates a matrix with the given dimensions. Values will be randomly set using Math.random().\n * @param {number} rows - Number of rows\n * @param {number} columns - Number of columns\n * @returns {Matrix} The new matrix\n */\nMatrix.rand = function rand(rows, columns) {\n    var matrix = Matrix.empty(rows, columns);\n    for (var i = 0, ii = matrix.rows; i < ii; i++) {\n        for (var j = 0, jj = matrix.columns; j < jj; j++) {\n            matrix[i][j] = Math.random();\n        }\n    }\n    return matrix;\n};\n\n/**\n * Creates an identity matrix with the given dimension. Values of the diagonal will be 1 and other will be 0.\n * @param {number} n - Number of rows and columns\n * @returns {Matrix} - The new matrix\n */\nMatrix.eye = function eye(n) {\n    var matrix = Matrix.zeros(n, n), l = matrix.rows;\n    for (var i = 0; i < l; i++) {\n        matrix[i][i] = 1;\n    }\n    return matrix;\n};\n\n/**\n * Creates a diagonal matrix based on the given array.\n * @param {Array} data - Array containing the data for the diagonal\n * @returns {Matrix} - The new matrix\n */\nMatrix.diag = function diag(data) {\n    var l = data.length, matrix = Matrix.zeros(l, l);\n    for (var i = 0; i < l; i++) {\n        matrix[i][i] = data[i];\n    }\n    return matrix;\n};\n\n/**\n * Creates an array of indices between two values\n * @param {number} from\n * @param {number} to\n * @returns {Array}\n */\nMatrix.indices = function indices(from, to) {\n    var vector = new Array(to - from);\n    for (var i = 0; i < vector.length; i++)\n        vector[i] = from++;\n    return vector;\n};\n\n// TODO DOC\nMatrix.stack = function stack(arg1) {\n    var i, j, k;\n    if (Matrix.isMatrix(arg1)) {\n        var rows = 0,\n            cols = 0;\n        for (i = 0; i < arguments.length; i++) {\n            rows += arguments[i].rows;\n            if (arguments[i].columns > cols)\n                cols = arguments[i].columns;\n        }\n\n        var r = Matrix.zeros(rows, cols);\n        var c = 0;\n        for (i = 0; i < arguments.length; i++) {\n            var current = arguments[i];\n            for (j = 0; j < current.rows; j++) {\n                for (k = 0; k < current.columns; k++)\n                    r[c][k] = current[j][k];\n                c++;\n            }\n        }\n        return r;\n    }\n    else if (Array.isArray(arg1)) {\n        var matrix = Matrix.empty(arguments.length, arg1.length);\n        for (i = 0; i < arguments.length; i++)\n            matrix.setRow(i, arguments[i]);\n        return matrix;\n    }\n};\n\n// TODO DOC\nMatrix.expand = function expand(base, count) {\n    var expansion = [];\n    for (var i = 0; i < count.length; i++)\n        for (var j = 0; j < count[i]; j++)\n            expansion.push(base[i]);\n    return new Matrix(expansion);\n};\n\n/**\n * Check that the provided value is a Matrix and tries to instantiate one if not\n * @param value - The value to check\n * @returns {Matrix}\n * @throws {TypeError}\n */\nMatrix.checkMatrix = function checkMatrix(value) {\n    if (!value) {\n        throw new TypeError('Argument has to be a matrix');\n    }\n    if (value.klass !== 'Matrix') {\n        value = new Matrix(value);\n    }\n    return value;\n};\n\n/**\n * Returns true if the argument is a Matrix, false otherwise\n * @param value - The value to check\n * @returns {boolean}\n */\nMatrix.isMatrix = function isMatrix(value) {\n    return value ? value.klass === 'Matrix' : false;\n};\n\n/**\n * @property {string} - The name of this class.\n */\nObject.defineProperty(Matrix.prototype, 'klass', {\n    get: function klass() {\n        return 'Matrix';\n    }\n});\n\n/**\n * @property {number} - The number of elements in the matrix.\n */\nObject.defineProperty(Matrix.prototype, 'size', {\n    get: function size() {\n        return this.rows * this.columns;\n    }\n});\n\n/**\n * @private\n * Internal check that a row index is not out of bounds\n * @param {number} index\n */\nMatrix.prototype.checkRowIndex = function checkRowIndex(index) {\n    if (index < 0 || index > this.rows - 1)\n        throw new RangeError('Row index out of range.');\n};\n\n/**\n * @private\n * Internal check that a column index is not out of bounds\n * @param {number} index\n */\nMatrix.prototype.checkColumnIndex = function checkColumnIndex(index) {\n    if (index < 0 || index > this.columns - 1)\n        throw new RangeError('Column index out of range.');\n};\n\n/**\n * @private\n * Internal check that two matrices have the same dimensions\n * @param {Matrix} otherMatrix\n */\nMatrix.prototype.checkDimensions = function checkDimensions(otherMatrix) {\n    if ((this.rows !== otherMatrix.rows) || (this.columns !== otherMatrix.columns))\n        throw new RangeError('Matrices dimensions must be equal.');\n};\n\n/**\n * Applies a callback for each element of the matrix. The function is called in the matrix (this) context.\n * @param {function} callback - Function that will be called with two parameters : i (row) and j (column)\n * @returns {Matrix} this\n */\nMatrix.prototype.apply = function apply(callback) {\n    var ii = this.rows, jj = this.columns;\n    for (var i = 0; i < ii; i++) {\n        for (var j = 0; j < jj; j++) {\n            callback.call(this, i, j);\n        }\n    }\n    return this;\n};\n\n/**\n * Creates an exact and independent copy of the matrix\n * @returns {Matrix}\n */\nMatrix.prototype.clone = function clone() {\n    return new Matrix(this.to2DArray());\n};\n\n/**\n * Returns a new 1D array filled row by row with the matrix values\n * @returns {Array}\n */\nMatrix.prototype.to1DArray = function to1DArray() {\n    return Aconcat.apply([], this);\n};\n\n/**\n * Returns a 2D array containing a copy of the data\n * @returns {Array}\n */\nMatrix.prototype.to2DArray = function to2DArray() {\n    var l = this.rows, copy = new Array(l);\n    for (var i = 0; i < l; i++) {\n        copy[i] = slice(this[i]);\n    }\n    return copy;\n};\n\n/**\n * @returns {boolean} true if the matrix has one row\n */\nMatrix.prototype.isRowVector = function isRowVector() {\n    return this.rows === 1;\n};\n\n/**\n * @returns {boolean} true if the matrix has one column\n */\nMatrix.prototype.isColumnVector = function isColumnVector() {\n    return this.columns === 1;\n};\n\n/**\n * @returns {boolean} true if the matrix has one row or one column\n */\nMatrix.prototype.isVector = function isVector() {\n    return (this.rows === 1) || (this.columns === 1);\n};\n\n/**\n * @returns {boolean} true if the matrix has the same number of rows and columns\n */\nMatrix.prototype.isSquare = function isSquare() {\n    return this.rows === this.columns;\n};\n\n/**\n * @returns {boolean} true if the matrix is square and has the same values on both sides of the diagonal\n */\nMatrix.prototype.isSymmetric = function isSymmetric() {\n    if (this.isSquare()) {\n        var l = this.rows;\n        for (var i = 0; i < l; i++) {\n            for (var j = 0; j <= i; j++) {\n                if (this[i][j] !== this[j][i]) {\n                    return false;\n                }\n            }\n        }\n        return true;\n    }\n    return false;\n};\n\n/**\n * Sets a given element of the matrix. mat.set(3,4,1) is equivalent to mat[3][4]=1\n * @param {number} rowIndex - Index of the row\n * @param {number} columnIndex - Index of the column\n * @param {number} value - The new value for the element\n * @returns {Matrix} this\n */\nMatrix.prototype.set = function set(rowIndex, columnIndex, value) {\n    this[rowIndex][columnIndex] = value;\n    return this;\n};\n\n/**\n * Returns the given element of the matrix. mat.get(3,4) is equivalent to matrix[3][4]\n * @param {number} rowIndex - Index of the row\n * @param {number} columnIndex - Index of the column\n * @returns {number}\n */\nMatrix.prototype.get = function get(rowIndex, columnIndex) {\n    return this[rowIndex][columnIndex];\n};\n\n/**\n * Fills the matrix with a given value. All elements will be set to this value.\n * @param {number} value - New value\n * @returns {Matrix} this\n */\nMatrix.prototype.fill = function fill(value) {\n    var ii = this.rows, jj = this.columns;\n    for (var i = 0; i < ii; i++) {\n        for (var j = 0; j < jj; j++) {\n            this[i][j] = value;\n        }\n    }\n    return this;\n};\n\n/**\n * Negates the matrix. All elements will be multiplied by (-1)\n * @returns {Matrix} this\n */\nMatrix.prototype.neg = function neg() {\n    return this.mulS(-1);\n};\n\n/**\n * Adds a scalar or values from another matrix (in place)\n * @param {number|Matrix} value\n * @returns {Matrix} this\n */\nMatrix.prototype.add = function add(value) {\n    if (typeof value === 'number')\n        return this.addS(value);\n    value = Matrix.checkMatrix(value);\n        return this.addM(value);\n};\n\n/**\n * Adds a scalar to each element of the matrix\n * @param {number} value\n * @returns {Matrix} this\n */\nMatrix.prototype.addS = function addS(value) {\n    var ii = this.rows, jj = this.columns;\n    for (var i = 0; i < ii; i++) {\n        for (var j = 0; j < jj; j++) {\n            this[i][j] += value;\n        }\n    }\n    return this;\n};\n\n/**\n * Adds the value of each element of matrix to the corresponding element of this\n * @param {Matrix} matrix\n * @returns {Matrix} this\n */\nMatrix.prototype.addM = function addM(matrix) {\n    this.checkDimensions(matrix);\n    var ii = this.rows, jj = this.columns;\n    for (var i = 0; i < ii; i++) {\n        for (var j = 0; j < jj; j++) {\n            this[i][j] += matrix[i][j];\n        }\n    }\n    return this;\n};\n\n/**\n * Subtracts a scalar or values from another matrix (in place)\n * @param {number|Matrix} value\n * @returns {Matrix} this\n */\nMatrix.prototype.sub = function sub(value) {\n    if (typeof value === 'number')\n        return this.subS(value);\n    value = Matrix.checkMatrix(value);\n        return this.subM(value);\n};\n\n/**\n * Subtracts a scalar from each element of the matrix\n * @param {number} value\n * @returns {Matrix} this\n */\nMatrix.prototype.subS = function subS(value) {\n    var ii = this.rows, jj = this.columns;\n    for (var i = 0; i < ii; i++) {\n        for (var j = 0; j < jj; j++) {\n            this[i][j] -= value;\n        }\n    }\n    return this;\n};\n\n/**\n * Subtracts the value of each element of matrix from the corresponding element of this\n * @param {Matrix} matrix\n * @returns {Matrix} this\n */\nMatrix.prototype.subM = function subM(matrix) {\n    this.checkDimensions(matrix);\n    var ii = this.rows, jj = this.columns;\n    for (var i = 0; i < ii; i++) {\n        for (var j = 0; j < jj; j++) {\n            this[i][j] -= matrix[i][j];\n        }\n    }\n    return this;\n};\n\n/**\n * Multiplies a scalar or values from another matrix (in place)\n * @param {number|Matrix} value\n * @returns {Matrix} this\n */\nMatrix.prototype.mul = function mul(value) {\n    if (typeof value === 'number')\n        return this.mulS(value);\n    value = Matrix.checkMatrix(value);\n        return this.mulM(value);\n};\n\n/**\n * Multiplies a scalar with each element of the matrix\n * @param {number} value\n * @returns {Matrix} this\n */\nMatrix.prototype.mulS = function mulS(value) {\n    var ii = this.rows, jj = this.columns;\n    for (var i = 0; i < ii; i++) {\n        for (var j = 0; j < jj; j++) {\n            this[i][j] *= value;\n        }\n    }\n    return this;\n};\n\n/**\n * Multiplies the value of each element of matrix with the corresponding element of this\n * @param {Matrix} matrix\n * @returns {Matrix} this\n */\nMatrix.prototype.mulM = function mulM(matrix) {\n    this.checkDimensions(matrix);\n    var ii = this.rows, jj = this.columns;\n    for (var i = 0; i < ii; i++) {\n        for (var j = 0; j < jj; j++) {\n            this[i][j] *= matrix[i][j];\n        }\n    }\n    return this;\n};\n\n/**\n * Divides by a scalar or values from another matrix (in place)\n * @param {number|Matrix} value\n * @returns {Matrix} this\n */\nMatrix.prototype.div = function div(value) {\n    if (typeof value === 'number')\n        return this.divS(value);\n    value = Matrix.checkMatrix(value);\n        return this.divM(value);\n};\n\n/**\n * Divides each element of the matrix by a scalar\n * @param {number} value\n * @returns {Matrix} this\n */\nMatrix.prototype.divS = function divS(value) {\n    var ii = this.rows, jj = this.columns;\n    for (var i = 0; i < ii; i++) {\n        for (var j = 0; j < jj; j++) {\n            this[i][j] /= value;\n        }\n    }\n    return this;\n};\n\n/**\n * Divides each element of this by the corresponding element of matrix\n * @param {Matrix} matrix\n * @returns {Matrix} this\n */\nMatrix.prototype.divM = function divM(matrix) {\n    this.checkDimensions(matrix);\n    var ii = this.rows, jj = this.columns;\n    for (var i = 0; i < ii; i++) {\n        for (var j = 0; j < jj; j++) {\n            this[i][j] /= matrix[i][j];\n        }\n    }\n    return this;\n};\n\n/**\n * Returns a new array from the given row index\n * @param {number} index - Row index\n * @returns {Array}\n */\nMatrix.prototype.getRow = function getRow(index) {\n    this.checkRowIndex(index);\n    return slice(this[index]);\n};\n\n/**\n * Returns a new row vector from the given row index\n * @param {number} index - Row index\n * @returns {Matrix}\n */\nMatrix.prototype.getRowVector = function getRowVector(index) {\n    return Matrix.rowVector(this.getRow(index));\n};\n\n/**\n * Sets a row at the given index\n * @param {number} index - Row index\n * @param {Array|Matrix} array - Array or vector\n * @returns {Matrix} this\n */\nMatrix.prototype.setRow = function setRow(index, array) {\n    this.checkRowIndex(index);\n    if (Matrix.isMatrix(array)) array = array.to1DArray();\n    if (array.length !== this.columns)\n        throw new RangeError('Invalid row size');\n    this[index] = slice(array);\n    return this;\n};\n\n/**\n * Removes a row from the given index\n * @param {number} index - Row index\n * @returns {Matrix} this\n */\nMatrix.prototype.removeRow = function removeRow(index) {\n    this.checkRowIndex(index);\n    if (this.rows === 1)\n        throw new RangeError('A matrix cannot have less than one row');\n    Asplice.call(this, index, 1);\n    this.rows -= 1;\n    return this;\n};\n\n/**\n * Adds a row at the given index\n * @param {number} [index = this.rows] - Row index\n * @param {Array|Matrix} array - Array or vector\n * @returns {Matrix} this\n */\nMatrix.prototype.addRow = function addRow(index, array) {\n    if (typeof array === 'undefined') {\n        array = index;\n        index = this.rows;\n    }\n    if (index < 0 || index > this.rows)\n        throw new RangeError('Row index out of range.');\n    if (Matrix.isMatrix(array)) array = array.to1DArray();\n    if (array.length !== this.columns)\n        throw new RangeError('Invalid row size');\n    Asplice.call(this, index, 0, slice(array));\n    this.rows += 1;\n    return this;\n};\n\n/**\n * Swaps two rows\n * @param {number} row1 - First row index\n * @param {number} row2 - Second row index\n * @returns {Matrix} this\n */\nMatrix.prototype.swapRows = function swapRows(row1, row2) {\n    this.checkRowIndex(row1);\n    this.checkRowIndex(row2);\n    var temp = this[row1];\n    this[row1] = this[row2];\n    this[row2] = temp;\n    return this;\n};\n\n/**\n * Returns a new array from the given column index\n * @param {number} index - Column index\n * @returns {Array}\n */\nMatrix.prototype.getColumn = function getColumn(index) {\n    this.checkColumnIndex(index);\n    var l = this.rows, column = new Array(l);\n    for (var i = 0; i < l; i++) {\n        column[i] = this[i][index];\n    }\n    return column;\n};\n\n/**\n * Returns a new column vector from the given column index\n * @param {number} index - Column index\n * @returns {Matrix}\n */\nMatrix.prototype.getColumnVector = function getColumnVector(index) {\n    return Matrix.columnVector(this.getColumn(index));\n};\n\n/**\n * Sets a column at the given index\n * @param {number} index - Column index\n * @param {Array|Matrix} array - Array or vector\n * @returns {Matrix} this\n */\nMatrix.prototype.setColumn = function setColumn(index, array) {\n    this.checkColumnIndex(index);\n    if (Matrix.isMatrix(array)) array = array.to1DArray();\n    var l = this.rows;\n    if (array.length !== l)\n        throw new RangeError('Invalid column size');\n    for (var i = 0; i < l; i++) {\n        this[i][index] = array[i];\n    }\n    return this;\n};\n\n/**\n * Removes a column from the given index\n * @param {number} index - Column index\n * @returns {Matrix} this\n */\nMatrix.prototype.removeColumn = function removeColumn(index) {\n    this.checkColumnIndex(index);\n    if (this.columns === 1)\n        throw new RangeError('A matrix cannot have less than one column');\n    for (var i = 0, ii = this.rows; i < ii; i++) {\n        this[i].splice(index, 1);\n    }\n    this.columns -= 1;\n    return this;\n};\n\n/**\n * Adds a column at the given index\n * @param {number} [index = this.columns] - Column index\n * @param {Array|Matrix} array - Array or vector\n * @returns {Matrix} this\n */\nMatrix.prototype.addColumn = function addColumn(index, array) {\n    if (typeof array === 'undefined') {\n        array = index;\n        index = this.columns;\n    }\n    if (index < 0 || index > this.columns)\n        throw new RangeError('Column index out of range.');\n    if (Matrix.isMatrix(array)) array = array.to1DArray();\n    var l = this.rows;\n    if (array.length !== l)\n        throw new RangeError('Invalid column size');\n    for (var i = 0; i < l; i++) {\n        this[i].splice(index, 0, array[i]);\n    }\n    this.columns += 1;\n    return this;\n};\n\n/**\n * Swaps two columns\n * @param {number} column1 - First column index\n * @param {number} column2 - Second column index\n * @returns {Matrix} this\n */\nMatrix.prototype.swapColumns = function swapColumns(column1, column2) {\n    this.checkRowIndex(column1);\n    this.checkRowIndex(column2);\n    var l = this.rows, temp, row;\n    for (var i = 0; i < l; i++) {\n        row = this[i];\n        temp = row[column1];\n        row[column1] = row[column2];\n        row[column2] = temp;\n    }\n    return this;\n};\n\n/**\n * @private\n * Internal check that the provided vector is an array with the right length\n * @param {Array|Matrix} vector\n * @returns {Array}\n * @throws {RangeError}\n */\nMatrix.prototype.checkRowVector = function checkRowVector(vector) {\n    if (Matrix.isMatrix(vector))\n        vector = vector.to1DArray();\n    if (vector.length !== this.columns)\n        throw new RangeError('vector size must be the same as the number of columns');\n    return vector;\n};\n\n/**\n * @private\n * Internal check that the provided vector is an array with the right length\n * @param {Array|Matrix} vector\n * @returns {Array}\n * @throws {RangeError}\n */\nMatrix.prototype.checkColumnVector = function checkColumnVector(vector) {\n    if (Matrix.isMatrix(vector))\n        vector = vector.to1DArray();\n    if (vector.length !== this.rows)\n        throw new RangeError('vector size must be the same as the number of rows');\n    return vector;\n};\n\n/**\n * Adds the values of a vector to each row\n * @param {Array|Matrix} vector - Array or vector\n * @returns {Matrix} this\n */\nMatrix.prototype.addRowVector = function addRowVector(vector) {\n    vector = this.checkRowVector(vector);\n    var ii = this.rows, jj = this.columns;\n    for (var i = 0; i < ii; i++) {\n        for (var j = 0; j < jj; j++) {\n            this[i][j] += vector[j];\n        }\n    }\n    return this;\n};\n\n/**\n * Subtracts the values of a vector from each row\n * @param {Array|Matrix} vector - Array or vector\n * @returns {Matrix} this\n */\nMatrix.prototype.subRowVector = function subRowVector(vector) {\n    vector = this.checkRowVector(vector);\n    var ii = this.rows, jj = this.columns;\n    for (var i = 0; i < ii; i++) {\n        for (var j = 0; j < jj; j++) {\n            this[i][j] -= vector[j];\n        }\n    }\n    return this;\n};\n\n/**\n * Multiplies the values of a vector with each row\n * @param {Array|Matrix} vector - Array or vector\n * @returns {Matrix} this\n */\nMatrix.prototype.mulRowVector = function mulRowVector(vector) {\n    vector = this.checkRowVector(vector);\n    var ii = this.rows, jj = this.columns;\n    for (var i = 0; i < ii; i++) {\n        for (var j = 0; j < jj; j++) {\n            this[i][j] *= vector[j];\n        }\n    }\n    return this;\n};\n\n/**\n * Divides the values of each row by those of a vector\n * @param {Array|Matrix} vector - Array or vector\n * @returns {Matrix} this\n */\nMatrix.prototype.divRowVector = function divRowVector(vector) {\n    vector = this.checkRowVector(vector);\n    var ii = this.rows, jj = this.columns;\n    for (var i = 0; i < ii; i++) {\n        for (var j = 0; j < jj; j++) {\n            this[i][j] /= vector[j];\n        }\n    }\n    return this;\n};\n\n/**\n * Adds the values of a vector to each column\n * @param {Array|Matrix} vector - Array or vector\n * @returns {Matrix} this\n */\nMatrix.prototype.addColumnVector = function addColumnVector(vector) {\n    vector = this.checkColumnVector(vector);\n    var ii = this.rows, jj = this.columns;\n    for (var i = 0; i < ii; i++) {\n        for (var j = 0; j < jj; j++) {\n            this[i][j] += vector[i];\n        }\n    }\n    return this;\n};\n\n/**\n * Subtracts the values of a vector from each column\n * @param {Array|Matrix} vector - Array or vector\n * @returns {Matrix} this\n */\nMatrix.prototype.subColumnVector = function subColumnVector(vector) {\n    vector = this.checkColumnVector(vector);\n    var ii = this.rows, jj = this.columns;\n    for (var i = 0; i < ii; i++) {\n        for (var j = 0; j < jj; j++) {\n            this[i][j] -= vector[i];\n        }\n    }\n    return this;\n};\n\n/**\n * Multiplies the values of a vector with each column\n * @param {Array|Matrix} vector - Array or vector\n * @returns {Matrix} this\n */\nMatrix.prototype.mulColumnVector = function mulColumnVector(vector) {\n    vector = this.checkColumnVector(vector);\n    var ii = this.rows, jj = this.columns;\n    for (var i = 0; i < ii; i++) {\n        for (var j = 0; j < jj; j++) {\n            this[i][j] *= vector[i];\n        }\n    }\n    return this;\n};\n\n/**\n * Divides the values of each column by those of a vector\n * @param {Array|Matrix} vector - Array or vector\n * @returns {Matrix} this\n */\nMatrix.prototype.divColumnVector = function divColumnVector(vector) {\n    vector = this.checkColumnVector(vector);\n    var ii = this.rows, jj = this.columns;\n    for (var i = 0; i < ii; i++) {\n        for (var j = 0; j < jj; j++) {\n            this[i][j] /= vector[i];\n        }\n    }\n    return this;\n};\n\n/**\n * Multiplies the values of a row with a scalar\n * @param {number} index - Row index\n * @param {number} value\n * @returns {Matrix} this\n */\nMatrix.prototype.mulRow = function mulRow(index, value) {\n    this.checkRowIndex(index);\n    var i = 0, l = this.columns;\n    for (; i < l; i++) {\n        this[index][i] *= value;\n    }\n    return this;\n};\n\n/**\n * Multiplies the values of a column with a scalar\n * @param {number} index - Column index\n * @param {number} value\n * @returns {Matrix} this\n */\nMatrix.prototype.mulColumn = function mulColumn(index, value) {\n    this.checkColumnIndex(index);\n    var i = 0, l = this.rows;\n    for (; i < l; i++) {\n        this[i][index] *= value;\n    }\n};\n\n/**\n * A matrix index\n * @typedef {Object} MatrixIndex\n * @property {number} row\n * @property {number} column\n */\n\n/**\n * Returns the maximum value of the matrix\n * @returns {number}\n */\nMatrix.prototype.max = function max() {\n    var v = -Infinity;\n    var ii = this.rows, jj = this.columns;\n    for (var i = 0; i < ii; i++) {\n        for (var j = 0; j < jj; j++) {\n            if (this[i][j] > v) {\n                v = this[i][j];\n            }\n        }\n    }\n    return v;\n};\n\n/**\n * Returns the index of the maximum value\n * @returns {MatrixIndex}\n */\nMatrix.prototype.maxIndex = function maxIndex() {\n    var v = -Infinity;\n    var idx = {};\n    var ii = this.rows, jj = this.columns;\n    for (var i = 0; i < ii; i++) {\n        for (var j = 0; j < jj; j++) {\n            if (this[i][j] > v) {\n                v = this[i][j];\n                idx.row = i;\n                idx.column = j;\n            }\n        }\n    }\n    return idx;\n};\n\n/**\n * Returns the minimum value of the matrix\n * @returns {number}\n */\nMatrix.prototype.min = function min() {\n    var v = Infinity;\n    var ii = this.rows, jj = this.columns;\n    for (var i = 0; i < ii; i++) {\n        for (var j = 0; j < jj; j++) {\n            if (this[i][j] < v) {\n                v = this[i][j];\n            }\n        }\n    }\n    return v;\n};\n\n/**\n * Returns the index of the minimum value\n * @returns {MatrixIndex}\n */\nMatrix.prototype.minIndex = function minIndex() {\n    var v = Infinity;\n    var idx = {};\n    var ii = this.rows, jj = this.columns;\n    for (var i = 0; i < ii; i++) {\n        for (var j = 0; j < jj; j++) {\n            if (this[i][j] < v) {\n                v = this[i][j];\n                idx.row = i;\n                idx.column = j;\n            }\n        }\n    }\n    return idx;\n};\n\n/**\n * Returns the maximum value of one row\n * @param {number} index - Row index\n * @returns {number}\n */\nMatrix.prototype.maxRow = function maxRow(index) {\n    this.checkRowIndex(index);\n    var v = -Infinity;\n    for (var i = 0, ii = this.columns; i < ii; i++) {\n        if (this[index][i] > v) {\n            v = this[index][i];\n        }\n    }\n    return v;\n};\n\n/**\n * Returns the index of the maximum value of one row\n * @param {number} index - Row index\n * @returns {MatrixIndex}\n */\nMatrix.prototype.maxRowIndex = function maxRowIndex(index) {\n    this.checkRowIndex(index);\n    var v = -Infinity;\n    var idx = {\n            row: index\n        };\n    for (var i = 0, ii = this.columns; i < ii; i++) {\n        if (this[index][i] > v) {\n            v = this[index][i];\n            idx.column = i;\n        }\n    }\n    return idx;\n};\n\n/**\n * Returns the minimum value of one row\n * @param {number} index - Row index\n * @returns {number}\n */\nMatrix.prototype.minRow = function minRow(index) {\n    this.checkRowIndex(index);\n    var v = Infinity;\n    for (var i = 0, ii = this.columns; i < ii; i++) {\n        if (this[index][i] < v) {\n            v = this[index][i];\n        }\n    }\n    return v;\n};\n\n/**\n * Returns the index of the maximum value of one row\n * @param {number} index - Row index\n * @returns {MatrixIndex}\n */\nMatrix.prototype.minRowIndex = function minRowIndex(index) {\n    this.checkRowIndex(index);\n    var v = Infinity;\n    var idx = {\n        row: index,\n        column: 0\n    };\n    for (var i = 0, ii = this.columns; i < ii; i++) {\n        if (this[index][i] < v) {\n            v = this[index][i];\n            idx.column = i;\n        }\n    }\n    return idx;\n};\n\n/**\n * Returns the maximum value of one column\n * @param {number} index - Column index\n * @returns {number}\n */\nMatrix.prototype.maxColumn = function maxColumn(index) {\n    this.checkColumnIndex(index);\n    var v = -Infinity;\n    for (var i = 0, ii = this.rows; i < ii; i++) {\n        if (this[i][index] > v) {\n            v = this[i][index];\n        }\n    }\n    return v;\n};\n\n/**\n * Returns the index of the maximum value of one column\n * @param {number} index - Column index\n * @returns {MatrixIndex}\n */\nMatrix.prototype.maxColumnIndex = function maxColumnIndex(index) {\n    this.checkColumnIndex(index);\n    var v = -Infinity;\n    var idx = {\n        row: 0,\n        column: index\n    };\n    for (var i = 0, ii = this.rows; i < ii; i++) {\n        if (this[i][index] > v) {\n            v = this[i][index];\n            idx.row = i;\n        }\n    }\n    return idx;\n};\n\n/**\n * Returns the minimum value of one column\n * @param {number} index - Column index\n * @returns {number}\n */\nMatrix.prototype.minColumn = function minColumn(index) {\n    this.checkColumnIndex(index);\n    var v = Infinity;\n    for (var i = 0, ii = this.rows; i < ii; i++) {\n        if (this[i][index] < v) {\n            v = this[i][index];\n        }\n    }\n    return v;\n};\n\n/**\n * Returns the index of the minimum value of one column\n * @param {number} index - Column index\n * @returns {MatrixIndex}\n */\nMatrix.prototype.minColumnIndex = function minColumnIndex(index) {\n    this.checkColumnIndex(index);\n    var v = Infinity;\n    var idx = {\n        row: 0,\n        column: index\n    };\n    for (var i = 0, ii = this.rows; i < ii; i++) {\n        if (this[i][index] < v) {\n            v = this[i][index];\n            idx.row = i;\n        }\n    }\n    return idx;\n};\n\n/**\n * Returns an array containing the diagonal values of the matrix\n * @returns {Array}\n */\nMatrix.prototype.diag = function diag() {\n    if (!this.isSquare())\n        throw new TypeError('Only square matrices have a diagonal.');\n    var diag = new Array(this.rows);\n    for (var i = 0, ii = this.rows; i < ii; i++) {\n        diag[i] = this[i][i];\n    }\n    return diag;\n};\n\n/**\n * Returns the sum of all elements of the matrix\n * @returns {number}\n */\nMatrix.prototype.sum = function sum() {\n    var v = 0;\n    var ii = this.rows, jj = this.columns;\n    for (var i = 0; i < ii; i++) {\n        for (var j = 0; j < jj; j++) {\n            v += this[i][j];\n        }\n    }\n    return v;\n};\n\n/**\n * Returns the mean of all elements of the matrix\n * @returns {number}\n */\nMatrix.prototype.mean = function mean() {\n    return this.sum() / this.size;\n};\n\n/**\n * Returns the product of all elements of the matrix\n * @returns {number}\n */\nMatrix.prototype.prod = function prod() {\n    var prod = 1;\n    var ii = this.rows, jj = this.columns;\n    for (var i = 0; i < ii; i++) {\n        for (var j = 0; j < jj; j++) {\n            prod *= this[i][j];\n        }\n    }\n    return prod;\n};\n\n/**\n * Computes the cumulative sum of the matrix elements (in place, row by row)\n * @returns {Matrix} this\n */\nMatrix.prototype.cumulativeSum = function cumulativeSum() {\n    var sum = 0;\n    var ii = this.rows, jj = this.columns;\n    for (var i = 0; i < ii; i++) {\n        for (var j = 0; j < jj; j++) {\n            sum += this[i][j];\n            this[i][j] = sum;\n        }\n    }\n    return this;\n};\n\n/**\n * Computes the dot (scalar) product between the matrix and another\n * @param {Matrix} other vector\n * @returns {number}\n */\nMatrix.prototype.dot = function dot(other) {\n    if (this.size !== other.size)\n        throw new RangeError('vectors do not have the same size');\n    var vector1 = this.to1DArray();\n    var vector2 = other.to1DArray();\n    var dot = 0, l = vector1.length;\n    for (var i = 0; i < l; i++) {\n        dot += vector1[i] * vector2[i];\n    }\n    return dot;\n};\n\n/**\n * Returns the matrix product between this and other\n * @returns {Matrix}\n */\nMatrix.prototype.mmul = function mmul(other) {\n    if (!Matrix.isMatrix(other))\n        throw new TypeError('parameter \"other\" must be a matrix');\n    if (this.columns !== other.rows)\n        console.warn('Number of columns of left matrix are not equal to number of rows of right matrix.');\n\n    var m = this.rows, n = this.columns, p = other.columns;\n    var result = new Matrix(m, p);\n\n    var Bcolj = new Array(n);\n    var i, j, k;\n    for (j = 0; j < p; j++) {\n        for (k = 0; k < n; k++)\n            Bcolj[k] = other[k][j];\n\n        for (i = 0; i < m; i++) {\n            var Arowi = this[i];\n\n            var s = 0;\n            for (k = 0; k < n; k++)\n                s += Arowi[k] * Bcolj[k];\n\n            result[i][j] = s;\n        }\n    }\n    return result;\n};\n\n/**\n * Sorts the rows (in place)\n * @param {function} compareFunction - usual Array.prototype.sort comparison function\n * @returns {Matrix} this\n */\nMatrix.prototype.sortRows = function sortRows(compareFunction) {\n    for (var i = 0, ii = this.rows; i < ii; i++) {\n        this[i].sort(compareFunction);\n    }\n    return this;\n};\n\n/**\n * Sorts the columns (in place)\n * @param {function} compareFunction - usual Array.prototype.sort comparison function\n * @returns {Matrix} this\n */\nMatrix.prototype.sortColumns = function sortColumns(compareFunction) {\n    for (var i = 0, ii = this.columns; i < ii; i++) {\n        this.setColumn(i, this.getColumn(i).sort(compareFunction));\n    }\n    return this;\n};\n\n/**\n * Transposes the matrix and returns a new one containing the result\n * @returns {Matrix}\n */\nMatrix.prototype.transpose = function transpose() {\n    var result = new Matrix(this.columns, this.rows);\n    var ii = this.rows, jj = this.columns;\n    for (var i = 0; i < ii; i++) {\n        for (var j = 0; j < jj; j++) {\n            result[j][i] = this[i][j];\n        }\n    }\n    return result;\n};\n\n/**\n * Returns a subset of the matrix\n * @param {number} startRow - First row index\n * @param {number} endRow - Last row index\n * @param {number} startColumn - First column index\n * @param {number} endColumn - Last column index\n * @returns {Matrix}\n */\nMatrix.prototype.subMatrix = function subMatrix(startRow, endRow, startColumn, endColumn) {\n    if ((startRow > endRow) || (startColumn > endColumn) || (startRow < 0) || (startRow >= this.rows) || (endRow < 0) || (endRow >= this.rows) || (startColumn < 0) || (startColumn >= this.columns) || (endColumn < 0) || (endColumn >= this.columns))\n        throw new RangeError('Argument out of range');\n    var newMatrix = new Matrix(endRow - startRow + 1, endColumn - startColumn + 1);\n    for (var i = startRow; i <= endRow; i++) {\n        for (var j = startColumn; j <= endColumn; j++) {\n            newMatrix[i - startRow][j - startColumn] = this[i][j];\n        }\n    }\n    return newMatrix;\n};\n\n/**\n * Returns a subset of the matrix based on an array of row indices\n * @param {Array} indices - Array containing the row indices\n * @param {number} [startColumn = 0] - First column index\n * @param {number} [endColumn = this.columns-1] - Last column index\n * @returns {Matrix}\n */\nMatrix.prototype.subMatrixRow = function subMatrixRow(indices, startColumn, endColumn) {\n    if (typeof startColumn === 'undefined') {\n        startColumn = 0;\n        endColumn = this.columns - 1;\n    } else if (typeof endColumn === 'undefined') {\n        endColumn = this.columns - 1;\n    }\n    if ((startColumn > endColumn) || (startColumn < 0) || (startColumn >= this.columns) || (endColumn < 0) || (endColumn >= this.columns))\n        throw new RangeError('Argument out of range.');\n    var l = indices.length, rows = this.rows,\n        X = new Matrix(l, endColumn - startColumn + 1);\n    for (var i = 0; i < l; i++) {\n        for (var j = startColumn; j <= endColumn; j++) {\n            if ((indices[i] < 0) || (indices[i] >= rows))\n                throw new RangeError('Argument out of range.');\n            X[i][j - startColumn] = this[indices[i]][j];\n        }\n    }\n    return X;\n};\n\n/**\n * Returns a subset of the matrix based on an array of column indices\n * @param {Array} indices - Array containing the column indices\n * @param {number} [startRow = 0] - First row index\n * @param {number} [endRow = this.rows-1] - Last row index\n * @returns {Matrix}\n */\nMatrix.prototype.subMatrixColumn = function subMatrixColumn(indices, startRow, endRow) {\n    if (typeof startRow === 'undefined') {\n        startRow = 0;\n        endRow = this.rows - 1;\n    } else if (typeof endRow === 'undefined') {\n        endRow = this.rows - 1;\n    }\n    if ((startRow > endRow) || (startRow < 0) || (startRow >= this.rows) || (endRow < 0) || (endRow >= this.rows))\n        throw new RangeError('Argument out of range.');\n    var l = indices.length, columns = this.columns,\n        X = new Matrix(endRow - startRow + 1, l);\n    for (var i = 0; i < l; i++) {\n        for (var j = startRow; j <= endRow; j++) {\n            if ((indices[i] < 0) || (indices[i] >= columns))\n                throw new RangeError('Argument out of range.');\n            X[j - startRow][i] = this[j][indices[i]];\n        }\n    }\n    return X;\n};\n\n/**\n * Returns the trace of the matrix (sum of the diagonal elements)\n * @returns {number}\n */\nMatrix.prototype.trace = function trace() {\n    if (!this.isSquare())\n        throw new TypeError('The matrix is not square');\n    var trace = 0, i = 0, l = this.rows;\n    for (; i < l; i++) {\n        trace += this[i][i];\n    }\n    return trace;\n};\n\n/**\n * Sets each element of the matrix to its absolute value\n * @returns {Matrix} this\n */\nMatrix.prototype.abs = function abs() {\n    var ii = this.rows, jj = this.columns;\n    for (var i = 0; i < ii; i++) {\n        for (var j = 0; j < jj; j++) {\n            this[i][j] = Math.abs(this[i][j]);\n        }\n    }\n};\n\nmodule.exports = Matrix;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/ml-optimize-lorentzian/node_modules/ml-matrix/src/matrix.js","'use strict';\n\nrequire('./symbol-species');\nvar abstractMatrix = require('./abstractMatrix');\nvar util = require('./util');\n\nclass Matrix extends abstractMatrix(Array) {\n    constructor(nRows, nColumns) {\n        var i;\n        if (arguments.length === 1 && typeof nRows === 'number') {\n            return new Array(nRows);\n        }\n        if (Matrix.isMatrix(nRows)) {\n            return nRows.clone();\n        } else if (Number.isInteger(nRows) && nRows > 0) { // Create an empty matrix\n            super(nRows);\n            if (Number.isInteger(nColumns) && nColumns > 0) {\n                for (i = 0; i < nRows; i++) {\n                    this[i] = new Array(nColumns);\n                }\n            } else {\n                throw new TypeError('nColumns must be a positive integer');\n            }\n        } else if (Array.isArray(nRows)) { // Copy the values from the 2D array\n            const matrix = nRows;\n            nRows = matrix.length;\n            nColumns = matrix[0].length;\n            if (typeof nColumns !== 'number' || nColumns === 0) {\n                throw new TypeError('Data must be a 2D array with at least one element');\n            }\n            super(nRows);\n            for (i = 0; i < nRows; i++) {\n                if (matrix[i].length !== nColumns) {\n                    throw new RangeError('Inconsistent array dimensions');\n                }\n                this[i] = [].concat(matrix[i]);\n            }\n        } else {\n            throw new TypeError('First argument must be a positive number or an array');\n        }\n        this.rows = nRows;\n        this.columns = nColumns;\n        return this;\n    }\n\n    set(rowIndex, columnIndex, value) {\n        this[rowIndex][columnIndex] = value;\n        return this;\n    }\n\n    get(rowIndex, columnIndex) {\n        return this[rowIndex][columnIndex];\n    }\n\n    /**\n     * Creates an exact and independent copy of the matrix\n     * @return {Matrix}\n     */\n    clone() {\n        var newMatrix = new this.constructor[Symbol.species](this.rows, this.columns);\n        for (var row = 0; row < this.rows; row++) {\n            for (var column = 0; column < this.columns; column++) {\n                newMatrix.set(row, column, this.get(row, column));\n            }\n        }\n        return newMatrix;\n    }\n\n    /**\n     * Removes a row from the given index\n     * @param {number} index - Row index\n     * @return {Matrix} this\n     */\n    removeRow(index) {\n        util.checkRowIndex(this, index);\n        if (this.rows === 1) {\n            throw new RangeError('A matrix cannot have less than one row');\n        }\n        this.splice(index, 1);\n        this.rows -= 1;\n        return this;\n    }\n\n    /**\n     * Adds a row at the given index\n     * @param {number} [index = this.rows] - Row index\n     * @param {Array|Matrix} array - Array or vector\n     * @return {Matrix} this\n     */\n    addRow(index, array) {\n        if (array === undefined) {\n            array = index;\n            index = this.rows;\n        }\n        util.checkRowIndex(this, index, true);\n        array = util.checkRowVector(this, array, true);\n        this.splice(index, 0, array);\n        this.rows += 1;\n        return this;\n    }\n\n    /**\n     * Removes a column from the given index\n     * @param {number} index - Column index\n     * @return {Matrix} this\n     */\n    removeColumn(index) {\n        util.checkColumnIndex(this, index);\n        if (this.columns === 1) {\n            throw new RangeError('A matrix cannot have less than one column');\n        }\n        for (var i = 0; i < this.rows; i++) {\n            this[i].splice(index, 1);\n        }\n        this.columns -= 1;\n        return this;\n    }\n\n    /**\n     * Adds a column at the given index\n     * @param {number} [index = this.columns] - Column index\n     * @param {Array|Matrix} array - Array or vector\n     * @return {Matrix} this\n     */\n    addColumn(index, array) {\n        if (typeof array === 'undefined') {\n            array = index;\n            index = this.columns;\n        }\n        util.checkColumnIndex(this, index, true);\n        array = util.checkColumnVector(this, array);\n        for (var i = 0; i < this.rows; i++) {\n            this[i].splice(index, 0, array[i]);\n        }\n        this.columns += 1;\n        return this;\n    }\n}\n\nexports.Matrix = Matrix;\nMatrix.abstractMatrix = abstractMatrix;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/ml-matrix/src/matrix.js","'use strict';\nvar support = require('./support');\nvar compressions = require('./compressions');\nvar nodeBuffer = require('./nodeBuffer');\n/**\n * Convert a string to a \"binary string\" : a string containing only char codes between 0 and 255.\n * @param {string} str the string to transform.\n * @return {String} the binary string.\n */\nexports.string2binary = function(str) {\n    var result = \"\";\n    for (var i = 0; i < str.length; i++) {\n        result += String.fromCharCode(str.charCodeAt(i) & 0xff);\n    }\n    return result;\n};\nexports.arrayBuffer2Blob = function(buffer, mimeType) {\n    exports.checkSupport(\"blob\");\n\tmimeType = mimeType || 'application/zip';\n\n    try {\n        // Blob constructor\n        return new Blob([buffer], {\n            type: mimeType\n        });\n    }\n    catch (e) {\n\n        try {\n            // deprecated, browser only, old way\n            var Builder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder || window.MSBlobBuilder;\n            var builder = new Builder();\n            builder.append(buffer);\n            return builder.getBlob(mimeType);\n        }\n        catch (e) {\n\n            // well, fuck ?!\n            throw new Error(\"Bug : can't construct the Blob.\");\n        }\n    }\n\n\n};\n/**\n * The identity function.\n * @param {Object} input the input.\n * @return {Object} the same input.\n */\nfunction identity(input) {\n    return input;\n}\n\n/**\n * Fill in an array with a string.\n * @param {String} str the string to use.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to fill in (will be mutated).\n * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated array.\n */\nfunction stringToArrayLike(str, array) {\n    for (var i = 0; i < str.length; ++i) {\n        array[i] = str.charCodeAt(i) & 0xFF;\n    }\n    return array;\n}\n\n/**\n * Transform an array-like object to a string.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform.\n * @return {String} the result.\n */\nfunction arrayLikeToString(array) {\n    // Performances notes :\n    // --------------------\n    // String.fromCharCode.apply(null, array) is the fastest, see\n    // see http://jsperf.com/converting-a-uint8array-to-a-string/2\n    // but the stack is limited (and we can get huge arrays !).\n    //\n    // result += String.fromCharCode(array[i]); generate too many strings !\n    //\n    // This code is inspired by http://jsperf.com/arraybuffer-to-string-apply-performance/2\n    var chunk = 65536;\n    var result = [],\n        len = array.length,\n        type = exports.getTypeOf(array),\n        k = 0,\n        canUseApply = true;\n      try {\n         switch(type) {\n            case \"uint8array\":\n               String.fromCharCode.apply(null, new Uint8Array(0));\n               break;\n            case \"nodebuffer\":\n               String.fromCharCode.apply(null, nodeBuffer(0));\n               break;\n         }\n      } catch(e) {\n         canUseApply = false;\n      }\n\n      // no apply : slow and painful algorithm\n      // default browser on android 4.*\n      if (!canUseApply) {\n         var resultStr = \"\";\n         for(var i = 0; i < array.length;i++) {\n            resultStr += String.fromCharCode(array[i]);\n         }\n    return resultStr;\n    }\n    while (k < len && chunk > 1) {\n        try {\n            if (type === \"array\" || type === \"nodebuffer\") {\n                result.push(String.fromCharCode.apply(null, array.slice(k, Math.min(k + chunk, len))));\n            }\n            else {\n                result.push(String.fromCharCode.apply(null, array.subarray(k, Math.min(k + chunk, len))));\n            }\n            k += chunk;\n        }\n        catch (e) {\n            chunk = Math.floor(chunk / 2);\n        }\n    }\n    return result.join(\"\");\n}\n\nexports.applyFromCharCode = arrayLikeToString;\n\n\n/**\n * Copy the data from an array-like to an other array-like.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayFrom the origin array.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayTo the destination array which will be mutated.\n * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated destination array.\n */\nfunction arrayLikeToArrayLike(arrayFrom, arrayTo) {\n    for (var i = 0; i < arrayFrom.length; i++) {\n        arrayTo[i] = arrayFrom[i];\n    }\n    return arrayTo;\n}\n\n// a matrix containing functions to transform everything into everything.\nvar transform = {};\n\n// string to ?\ntransform[\"string\"] = {\n    \"string\": identity,\n    \"array\": function(input) {\n        return stringToArrayLike(input, new Array(input.length));\n    },\n    \"arraybuffer\": function(input) {\n        return transform[\"string\"][\"uint8array\"](input).buffer;\n    },\n    \"uint8array\": function(input) {\n        return stringToArrayLike(input, new Uint8Array(input.length));\n    },\n    \"nodebuffer\": function(input) {\n        return stringToArrayLike(input, nodeBuffer(input.length));\n    }\n};\n\n// array to ?\ntransform[\"array\"] = {\n    \"string\": arrayLikeToString,\n    \"array\": identity,\n    \"arraybuffer\": function(input) {\n        return (new Uint8Array(input)).buffer;\n    },\n    \"uint8array\": function(input) {\n        return new Uint8Array(input);\n    },\n    \"nodebuffer\": function(input) {\n        return nodeBuffer(input);\n    }\n};\n\n// arraybuffer to ?\ntransform[\"arraybuffer\"] = {\n    \"string\": function(input) {\n        return arrayLikeToString(new Uint8Array(input));\n    },\n    \"array\": function(input) {\n        return arrayLikeToArrayLike(new Uint8Array(input), new Array(input.byteLength));\n    },\n    \"arraybuffer\": identity,\n    \"uint8array\": function(input) {\n        return new Uint8Array(input);\n    },\n    \"nodebuffer\": function(input) {\n        return nodeBuffer(new Uint8Array(input));\n    }\n};\n\n// uint8array to ?\ntransform[\"uint8array\"] = {\n    \"string\": arrayLikeToString,\n    \"array\": function(input) {\n        return arrayLikeToArrayLike(input, new Array(input.length));\n    },\n    \"arraybuffer\": function(input) {\n        return input.buffer;\n    },\n    \"uint8array\": identity,\n    \"nodebuffer\": function(input) {\n        return nodeBuffer(input);\n    }\n};\n\n// nodebuffer to ?\ntransform[\"nodebuffer\"] = {\n    \"string\": arrayLikeToString,\n    \"array\": function(input) {\n        return arrayLikeToArrayLike(input, new Array(input.length));\n    },\n    \"arraybuffer\": function(input) {\n        return transform[\"nodebuffer\"][\"uint8array\"](input).buffer;\n    },\n    \"uint8array\": function(input) {\n        return arrayLikeToArrayLike(input, new Uint8Array(input.length));\n    },\n    \"nodebuffer\": identity\n};\n\n/**\n * Transform an input into any type.\n * The supported output type are : string, array, uint8array, arraybuffer, nodebuffer.\n * If no output type is specified, the unmodified input will be returned.\n * @param {String} outputType the output type.\n * @param {String|Array|ArrayBuffer|Uint8Array|Buffer} input the input to convert.\n * @throws {Error} an Error if the browser doesn't support the requested output type.\n */\nexports.transformTo = function(outputType, input) {\n    if (!input) {\n        // undefined, null, etc\n        // an empty string won't harm.\n        input = \"\";\n    }\n    if (!outputType) {\n        return input;\n    }\n    exports.checkSupport(outputType);\n    var inputType = exports.getTypeOf(input);\n    var result = transform[inputType][outputType](input);\n    return result;\n};\n\n/**\n * Return the type of the input.\n * The type will be in a format valid for JSZip.utils.transformTo : string, array, uint8array, arraybuffer.\n * @param {Object} input the input to identify.\n * @return {String} the (lowercase) type of the input.\n */\nexports.getTypeOf = function(input) {\n    if (typeof input === \"string\") {\n        return \"string\";\n    }\n    if (Object.prototype.toString.call(input) === \"[object Array]\") {\n        return \"array\";\n    }\n    if (support.nodebuffer && nodeBuffer.test(input)) {\n        return \"nodebuffer\";\n    }\n    if (support.uint8array && input instanceof Uint8Array) {\n        return \"uint8array\";\n    }\n    if (support.arraybuffer && input instanceof ArrayBuffer) {\n        return \"arraybuffer\";\n    }\n};\n\n/**\n * Throw an exception if the type is not supported.\n * @param {String} type the type to check.\n * @throws {Error} an Error if the browser doesn't support the requested type.\n */\nexports.checkSupport = function(type) {\n    var supported = support[type.toLowerCase()];\n    if (!supported) {\n        throw new Error(type + \" is not supported by this browser\");\n    }\n};\nexports.MAX_VALUE_16BITS = 65535;\nexports.MAX_VALUE_32BITS = -1; // well, \"\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\" is parsed as -1\n\n/**\n * Prettify a string read as binary.\n * @param {string} str the string to prettify.\n * @return {string} a pretty string.\n */\nexports.pretty = function(str) {\n    var res = '',\n        code, i;\n    for (i = 0; i < (str || \"\").length; i++) {\n        code = str.charCodeAt(i);\n        res += '\\\\x' + (code < 16 ? \"0\" : \"\") + code.toString(16).toUpperCase();\n    }\n    return res;\n};\n\n/**\n * Find a compression registered in JSZip.\n * @param {string} compressionMethod the method magic to find.\n * @return {Object|null} the JSZip compression object, null if none found.\n */\nexports.findCompression = function(compressionMethod) {\n    for (var method in compressions) {\n        if (!compressions.hasOwnProperty(method)) {\n            continue;\n        }\n        if (compressions[method].magic === compressionMethod) {\n            return compressions[method];\n        }\n    }\n    return null;\n};\n/**\n* Cross-window, cross-Node-context regular expression detection\n* @param  {Object}  object Anything\n* @return {Boolean}        true if the object is a regular expression,\n* false otherwise\n*/\nexports.isRegExp = function (object) {\n    return Object.prototype.toString.call(object) === \"[object RegExp]\";\n};\n\n/**\n * Merge the objects passed as parameters into a new one.\n * @private\n * @param {...Object} var_args All objects to merge.\n * @return {Object} a new object with the data of the others.\n */\nexports.extend = function() {\n    var result = {}, i, attr;\n    for (i = 0; i < arguments.length; i++) { // arguments is not enumerable in some browsers\n        for (attr in arguments[i]) {\n            if (arguments[i].hasOwnProperty(attr) && typeof result[attr] === \"undefined\") {\n                result[attr] = arguments[i][attr];\n            }\n        }\n    }\n    return result;\n};\n\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/jszip/lib/utils.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 65);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 3b729be728ed5a5b4d68","'use strict';\n\n\nvar TYPED_OK =  (typeof Uint8Array !== 'undefined') &&\n                (typeof Uint16Array !== 'undefined') &&\n                (typeof Int32Array !== 'undefined');\n\nfunction _has(obj, key) {\n  return Object.prototype.hasOwnProperty.call(obj, key);\n}\n\nexports.assign = function (obj /*from1, from2, from3, ...*/) {\n  var sources = Array.prototype.slice.call(arguments, 1);\n  while (sources.length) {\n    var source = sources.shift();\n    if (!source) { continue; }\n\n    if (typeof source !== 'object') {\n      throw new TypeError(source + 'must be non-object');\n    }\n\n    for (var p in source) {\n      if (_has(source, p)) {\n        obj[p] = source[p];\n      }\n    }\n  }\n\n  return obj;\n};\n\n\n// reduce buffer size, avoiding mem copy\nexports.shrinkBuf = function (buf, size) {\n  if (buf.length === size) { return buf; }\n  if (buf.subarray) { return buf.subarray(0, size); }\n  buf.length = size;\n  return buf;\n};\n\n\nvar fnTyped = {\n  arraySet: function (dest, src, src_offs, len, dest_offs) {\n    if (src.subarray && dest.subarray) {\n      dest.set(src.subarray(src_offs, src_offs + len), dest_offs);\n      return;\n    }\n    // Fallback to ordinary array\n    for (var i = 0; i < len; i++) {\n      dest[dest_offs + i] = src[src_offs + i];\n    }\n  },\n  // Join array of chunks to single array.\n  flattenChunks: function (chunks) {\n    var i, l, len, pos, chunk, result;\n\n    // calculate data length\n    len = 0;\n    for (i = 0, l = chunks.length; i < l; i++) {\n      len += chunks[i].length;\n    }\n\n    // join chunks\n    result = new Uint8Array(len);\n    pos = 0;\n    for (i = 0, l = chunks.length; i < l; i++) {\n      chunk = chunks[i];\n      result.set(chunk, pos);\n      pos += chunk.length;\n    }\n\n    return result;\n  }\n};\n\nvar fnUntyped = {\n  arraySet: function (dest, src, src_offs, len, dest_offs) {\n    for (var i = 0; i < len; i++) {\n      dest[dest_offs + i] = src[src_offs + i];\n    }\n  },\n  // Join array of chunks to single array.\n  flattenChunks: function (chunks) {\n    return [].concat.apply([], chunks);\n  }\n};\n\n\n// Enable/Disable typed arrays use, for testing\n//\nexports.setTyped = function (on) {\n  if (on) {\n    exports.Buf8  = Uint8Array;\n    exports.Buf16 = Uint16Array;\n    exports.Buf32 = Int32Array;\n    exports.assign(exports, fnTyped);\n  } else {\n    exports.Buf8  = Array;\n    exports.Buf16 = Array;\n    exports.Buf32 = Array;\n    exports.assign(exports, fnUntyped);\n  }\n};\n\nexports.setTyped(TYPED_OK);\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/pako/lib/utils/common.js","'use strict';\n\nvar abstractMatrix = require('../abstractMatrix');\nvar Matrix = require('../matrix');\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    static get [Symbol.species]() {\n        return Matrix.Matrix;\n    }\n}\n\nmodule.exports = BaseView;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/ml-matrix/src/views/base.js","'use strict';\nexports.base64 = true;\nexports.array = true;\nexports.string = true;\nexports.arraybuffer = typeof ArrayBuffer !== \"undefined\" && typeof Uint8Array !== \"undefined\";\n// contains true if JSZip can read/generate nodejs Buffer, false otherwise.\n// Browserify will provide a Buffer implementation for browsers, which is\n// an augmented Uint8Array (i.e., can be used as either Buffer or U8).\nexports.nodebuffer = typeof Buffer !== \"undefined\";\n// contains true if JSZip can read/generate Uint8Array, false otherwise.\nexports.uint8array = typeof Uint8Array !== \"undefined\";\n\nif (typeof ArrayBuffer === \"undefined\") {\n    exports.blob = false;\n}\nelse {\n    var buffer = new ArrayBuffer(0);\n    try {\n        exports.blob = new Blob([buffer], {\n            type: \"application/zip\"\n        }).size === 0;\n    }\n    catch (e) {\n        try {\n            var Builder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder || window.MSBlobBuilder;\n            var builder = new Builder();\n            builder.append(buffer);\n            exports.blob = builder.getBlob('application/zip').size === 0;\n        }\n        catch (e) {\n            exports.blob = false;\n        }\n    }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/jszip/lib/support.js","'use strict';\n\nexports.array = require('./array');\nexports.matrix = require('./matrix');\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/ml-stat/index.js","'use strict';\n\nmodule.exports = require('./matrix');\nmodule.exports.Decompositions = module.exports.DC = require('./decompositions');\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/ml-optimize-lorentzian/node_modules/ml-matrix/src/index.js","'use strict';\n\nvar Matrix = require('./matrix');\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 */\nexports.checkRowIndex = function checkRowIndex(matrix, index, outer) {\n    var 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 */\nexports.checkColumnIndex = function checkColumnIndex(matrix, index, outer) {\n    var 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 */\nexports.checkRowVector = function checkRowVector(matrix, vector) {\n    if (vector.to1DArray) {\n        vector = vector.to1DArray();\n    }\n    if (vector.length !== matrix.columns) {\n        throw new RangeError('vector size must be the same as the number of columns');\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 */\nexports.checkColumnVector = function 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\nexports.checkIndices = function checkIndices(matrix, rowIndices, columnIndices) {\n    var rowOut = rowIndices.some(r => {\n        return r < 0 || r >= matrix.rows;\n\n    });\n\n    var columnOut = columnIndices.some(c => {\n        return c < 0 || c >= matrix.columns;\n    });\n\n    if (rowOut || columnOut) {\n        throw new RangeError('Indices are out of range');\n    }\n\n    if (typeof rowIndices !== 'object' || typeof columnIndices !== 'object') {\n        throw new TypeError('Unexpected type for row/column indices');\n    }\n    if (!Array.isArray(rowIndices)) rowIndices = Array.from(rowIndices);\n    if (!Array.isArray(columnIndices)) rowIndices = Array.from(columnIndices);\n\n    return {\n        row: rowIndices,\n        column: columnIndices\n    };\n};\n\nexports.checkRange = function checkRange(matrix, startRow, endRow, startColumn, endColumn) {\n    if (arguments.length !== 5) throw new TypeError('Invalid argument type');\n    var notAllNumbers = Array.from(arguments).slice(1).some(function (arg) {\n        return typeof arg !== 'number';\n    });\n    if (notAllNumbers) throw new TypeError('Invalid argument type');\n    if (startRow > endRow || startColumn > endColumn || startRow < 0 || startRow >= matrix.rows || endRow < 0 || endRow >= matrix.rows || startColumn < 0 || startColumn >= matrix.columns || endColumn < 0 || endColumn >= matrix.columns) {\n        throw new RangeError('Submatrix indices are out of range');\n    }\n};\n\nexports.getRange = function getRange(from, to) {\n    var arr = new Array(to - from + 1);\n    for (var i = 0; i < arr.length; i++) {\n        arr[i] = from + i;\n    }\n    return arr;\n};\n\nexports.sumByRow = function sumByRow(matrix) {\n    var sum = Matrix.Matrix.zeros(matrix.rows, 1);\n    for (var i = 0; i < matrix.rows; ++i) {\n        for (var j = 0; j < matrix.columns; ++j) {\n            sum.set(i, 0, sum.get(i, 0) + matrix.get(i, j));\n        }\n    }\n    return sum;\n};\n\nexports.sumByColumn = function sumByColumn(matrix) {\n    var sum = Matrix.Matrix.zeros(1, matrix.columns);\n    for (var i = 0; i < matrix.rows; ++i) {\n        for (var j = 0; j < matrix.columns; ++j) {\n            sum.set(0, j, sum.get(0, j) + matrix.get(i, j));\n        }\n    }\n    return sum;\n};\n\nexports.sumAll = function sumAll(matrix) {\n    var v = 0;\n    for (var i = 0; i < matrix.rows; i++) {\n        for (var j = 0; j < matrix.columns; j++) {\n            v += matrix.get(i, j);\n        }\n    }\n    return v;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/ml-matrix/src/util.js","/**\n * Computes the minimum of the given values\n * @param {Array<number>} input\n * @return {number}\n */\nexport default function min(input) {\n    if (!Array.isArray(input)) {\n        throw new Error('input must be an array');\n    }\n\n    if (input.length === 0) {\n        throw new Error('input must not be empty');\n    }\n\n    var min = input[0];\n    for (var i = 1; i < input.length; i++) {\n        if (input[i] < min) min = input[i];\n    }\n    return min;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/ml-array-min/src/index.js","/**\n * Computes the maximum of the given values\n * @param {Array<number>} input\n * @return {number}\n */\nexport default function max(input) {\n    if (!Array.isArray(input)) {\n        throw new Error('input must be an array');\n    }\n\n    if (input.length === 0) {\n        throw new Error('input must not be empty');\n    }\n\n    var max = input[0];\n    for (var i = 1; i < input.length; i++) {\n        if (input[i] > max) max = input[i];\n    }\n    return max;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/ml-array-max/src/index.js","'use strict';\n// private property\nvar _keyStr = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n\n\n// public method for encoding\nexports.encode = function(input, utf8) {\n    var output = \"\";\n    var chr1, chr2, chr3, enc1, enc2, enc3, enc4;\n    var i = 0;\n\n    while (i < input.length) {\n\n        chr1 = input.charCodeAt(i++);\n        chr2 = input.charCodeAt(i++);\n        chr3 = input.charCodeAt(i++);\n\n        enc1 = chr1 >> 2;\n        enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\n        enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);\n        enc4 = chr3 & 63;\n\n        if (isNaN(chr2)) {\n            enc3 = enc4 = 64;\n        }\n        else if (isNaN(chr3)) {\n            enc4 = 64;\n        }\n\n        output = output + _keyStr.charAt(enc1) + _keyStr.charAt(enc2) + _keyStr.charAt(enc3) + _keyStr.charAt(enc4);\n\n    }\n\n    return output;\n};\n\n// public method for decoding\nexports.decode = function(input, utf8) {\n    var output = \"\";\n    var chr1, chr2, chr3;\n    var enc1, enc2, enc3, enc4;\n    var i = 0;\n\n    input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, \"\");\n\n    while (i < input.length) {\n\n        enc1 = _keyStr.indexOf(input.charAt(i++));\n        enc2 = _keyStr.indexOf(input.charAt(i++));\n        enc3 = _keyStr.indexOf(input.charAt(i++));\n        enc4 = _keyStr.indexOf(input.charAt(i++));\n\n        chr1 = (enc1 << 2) | (enc2 >> 4);\n        chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\n        chr3 = ((enc3 & 3) << 6) | enc4;\n\n        output = output + String.fromCharCode(chr1);\n\n        if (enc3 != 64) {\n            output = output + String.fromCharCode(chr2);\n        }\n        if (enc4 != 64) {\n            output = output + String.fromCharCode(chr3);\n        }\n\n    }\n\n    return output;\n\n};\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/jszip/lib/base64.js","'use strict';\nvar support = require('./support');\nvar utils = require('./utils');\nvar crc32 = require('./crc32');\nvar signature = require('./signature');\nvar defaults = require('./defaults');\nvar base64 = require('./base64');\nvar compressions = require('./compressions');\nvar CompressedObject = require('./compressedObject');\nvar nodeBuffer = require('./nodeBuffer');\nvar utf8 = require('./utf8');\nvar StringWriter = require('./stringWriter');\nvar Uint8ArrayWriter = require('./uint8ArrayWriter');\n\n/**\n * Returns the raw data of a ZipObject, decompress the content if necessary.\n * @param {ZipObject} file the file to use.\n * @return {String|ArrayBuffer|Uint8Array|Buffer} the data.\n */\nvar getRawData = function(file) {\n    if (file._data instanceof CompressedObject) {\n        file._data = file._data.getContent();\n        file.options.binary = true;\n        file.options.base64 = false;\n\n        if (utils.getTypeOf(file._data) === \"uint8array\") {\n            var copy = file._data;\n            // when reading an arraybuffer, the CompressedObject mechanism will keep it and subarray() a Uint8Array.\n            // if we request a file in the same format, we might get the same Uint8Array or its ArrayBuffer (the original zip file).\n            file._data = new Uint8Array(copy.length);\n            // with an empty Uint8Array, Opera fails with a \"Offset larger than array size\"\n            if (copy.length !== 0) {\n                file._data.set(copy, 0);\n            }\n        }\n    }\n    return file._data;\n};\n\n/**\n * Returns the data of a ZipObject in a binary form. If the content is an unicode string, encode it.\n * @param {ZipObject} file the file to use.\n * @return {String|ArrayBuffer|Uint8Array|Buffer} the data.\n */\nvar getBinaryData = function(file) {\n    var result = getRawData(file),\n        type = utils.getTypeOf(result);\n    if (type === \"string\") {\n        if (!file.options.binary) {\n            // unicode text !\n            // unicode string => binary string is a painful process, check if we can avoid it.\n            if (support.nodebuffer) {\n                return nodeBuffer(result, \"utf-8\");\n            }\n        }\n        return file.asBinary();\n    }\n    return result;\n};\n\n/**\n * Transform this._data into a string.\n * @param {function} filter a function String -> String, applied if not null on the result.\n * @return {String} the string representing this._data.\n */\nvar dataToString = function(asUTF8) {\n    var result = getRawData(this);\n    if (result === null || typeof result === \"undefined\") {\n        return \"\";\n    }\n    // if the data is a base64 string, we decode it before checking the encoding !\n    if (this.options.base64) {\n        result = base64.decode(result);\n    }\n    if (asUTF8 && this.options.binary) {\n        // JSZip.prototype.utf8decode supports arrays as input\n        // skip to array => string step, utf8decode will do it.\n        result = out.utf8decode(result);\n    }\n    else {\n        // no utf8 transformation, do the array => string step.\n        result = utils.transformTo(\"string\", result);\n    }\n\n    if (!asUTF8 && !this.options.binary) {\n        result = utils.transformTo(\"string\", out.utf8encode(result));\n    }\n    return result;\n};\n/**\n * A simple object representing a file in the zip file.\n * @constructor\n * @param {string} name the name of the file\n * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data\n * @param {Object} options the options of the file\n */\nvar ZipObject = function(name, data, options) {\n    this.name = name;\n    this.dir = options.dir;\n    this.date = options.date;\n    this.comment = options.comment;\n    this.unixPermissions = options.unixPermissions;\n    this.dosPermissions = options.dosPermissions;\n\n    this._data = data;\n    this.options = options;\n\n    /*\n     * This object contains initial values for dir and date.\n     * With them, we can check if the user changed the deprecated metadata in\n     * `ZipObject#options` or not.\n     */\n    this._initialMetadata = {\n      dir : options.dir,\n      date : options.date\n    };\n};\n\nZipObject.prototype = {\n    /**\n     * Return the content as UTF8 string.\n     * @return {string} the UTF8 string.\n     */\n    asText: function() {\n        return dataToString.call(this, true);\n    },\n    /**\n     * Returns the binary content.\n     * @return {string} the content as binary.\n     */\n    asBinary: function() {\n        return dataToString.call(this, false);\n    },\n    /**\n     * Returns the content as a nodejs Buffer.\n     * @return {Buffer} the content as a Buffer.\n     */\n    asNodeBuffer: function() {\n        var result = getBinaryData(this);\n        return utils.transformTo(\"nodebuffer\", result);\n    },\n    /**\n     * Returns the content as an Uint8Array.\n     * @return {Uint8Array} the content as an Uint8Array.\n     */\n    asUint8Array: function() {\n        var result = getBinaryData(this);\n        return utils.transformTo(\"uint8array\", result);\n    },\n    /**\n     * Returns the content as an ArrayBuffer.\n     * @return {ArrayBuffer} the content as an ArrayBufer.\n     */\n    asArrayBuffer: function() {\n        return this.asUint8Array().buffer;\n    }\n};\n\n/**\n * Transform an integer into a string in hexadecimal.\n * @private\n * @param {number} dec the number to convert.\n * @param {number} bytes the number of bytes to generate.\n * @returns {string} the result.\n */\nvar decToHex = function(dec, bytes) {\n    var hex = \"\",\n        i;\n    for (i = 0; i < bytes; i++) {\n        hex += String.fromCharCode(dec & 0xff);\n        dec = dec >>> 8;\n    }\n    return hex;\n};\n\n/**\n * Transforms the (incomplete) options from the user into the complete\n * set of options to create a file.\n * @private\n * @param {Object} o the options from the user.\n * @return {Object} the complete set of options.\n */\nvar prepareFileAttrs = function(o) {\n    o = o || {};\n    if (o.base64 === true && (o.binary === null || o.binary === undefined)) {\n        o.binary = true;\n    }\n    o = utils.extend(o, defaults);\n    o.date = o.date || new Date();\n    if (o.compression !== null) o.compression = o.compression.toUpperCase();\n\n    return o;\n};\n\n/**\n * Add a file in the current folder.\n * @private\n * @param {string} name the name of the file\n * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data of the file\n * @param {Object} o the options of the file\n * @return {Object} the new file.\n */\nvar fileAdd = function(name, data, o) {\n    // be sure sub folders exist\n    var dataType = utils.getTypeOf(data),\n        parent;\n\n    o = prepareFileAttrs(o);\n\n    if (typeof o.unixPermissions === \"string\") {\n        o.unixPermissions = parseInt(o.unixPermissions, 8);\n    }\n\n    // UNX_IFDIR  0040000 see zipinfo.c\n    if (o.unixPermissions && (o.unixPermissions & 0x4000)) {\n        o.dir = true;\n    }\n    // Bit 4    Directory\n    if (o.dosPermissions && (o.dosPermissions & 0x0010)) {\n        o.dir = true;\n    }\n\n    if (o.dir) {\n        name = forceTrailingSlash(name);\n    }\n\n    if (o.createFolders && (parent = parentFolder(name))) {\n        folderAdd.call(this, parent, true);\n    }\n\n    if (o.dir || data === null || typeof data === \"undefined\") {\n        o.base64 = false;\n        o.binary = false;\n        data = null;\n        dataType = null;\n    }\n    else if (dataType === \"string\") {\n        if (o.binary && !o.base64) {\n            // optimizedBinaryString == true means that the file has already been filtered with a 0xFF mask\n            if (o.optimizedBinaryString !== true) {\n                // this is a string, not in a base64 format.\n                // Be sure that this is a correct \"binary string\"\n                data = utils.string2binary(data);\n            }\n        }\n    }\n    else { // arraybuffer, uint8array, ...\n        o.base64 = false;\n        o.binary = true;\n\n        if (!dataType && !(data instanceof CompressedObject)) {\n            throw new Error(\"The data of '\" + name + \"' is in an unsupported format !\");\n        }\n\n        // special case : it's way easier to work with Uint8Array than with ArrayBuffer\n        if (dataType === \"arraybuffer\") {\n            data = utils.transformTo(\"uint8array\", data);\n        }\n    }\n\n    var object = new ZipObject(name, data, o);\n    this.files[name] = object;\n    return object;\n};\n\n/**\n * Find the parent folder of the path.\n * @private\n * @param {string} path the path to use\n * @return {string} the parent folder, or \"\"\n */\nvar parentFolder = function (path) {\n    if (path.slice(-1) == '/') {\n        path = path.substring(0, path.length - 1);\n    }\n    var lastSlash = path.lastIndexOf('/');\n    return (lastSlash > 0) ? path.substring(0, lastSlash) : \"\";\n};\n\n\n/**\n * Returns the path with a slash at the end.\n * @private\n * @param {String} path the path to check.\n * @return {String} the path with a trailing slash.\n */\nvar forceTrailingSlash = function(path) {\n    // Check the name ends with a /\n    if (path.slice(-1) != \"/\") {\n        path += \"/\"; // IE doesn't like substr(-1)\n    }\n    return path;\n};\n/**\n * Add a (sub) folder in the current folder.\n * @private\n * @param {string} name the folder's name\n * @param {boolean=} [createFolders] If true, automatically create sub\n *  folders. Defaults to false.\n * @return {Object} the new folder.\n */\nvar folderAdd = function(name, createFolders) {\n    createFolders = (typeof createFolders !== 'undefined') ? createFolders : false;\n\n    name = forceTrailingSlash(name);\n\n    // Does this folder already exist?\n    if (!this.files[name]) {\n        fileAdd.call(this, name, null, {\n            dir: true,\n            createFolders: createFolders\n        });\n    }\n    return this.files[name];\n};\n\n/**\n * Generate a JSZip.CompressedObject for a given zipOject.\n * @param {ZipObject} file the object to read.\n * @param {JSZip.compression} compression the compression to use.\n * @param {Object} compressionOptions the options to use when compressing.\n * @return {JSZip.CompressedObject} the compressed result.\n */\nvar generateCompressedObjectFrom = function(file, compression, compressionOptions) {\n    var result = new CompressedObject(),\n        content;\n\n    // the data has not been decompressed, we might reuse things !\n    if (file._data instanceof CompressedObject) {\n        result.uncompressedSize = file._data.uncompressedSize;\n        result.crc32 = file._data.crc32;\n\n        if (result.uncompressedSize === 0 || file.dir) {\n            compression = compressions['STORE'];\n            result.compressedContent = \"\";\n            result.crc32 = 0;\n        }\n        else if (file._data.compressionMethod === compression.magic) {\n            result.compressedContent = file._data.getCompressedContent();\n        }\n        else {\n            content = file._data.getContent();\n            // need to decompress / recompress\n            result.compressedContent = compression.compress(utils.transformTo(compression.compressInputType, content), compressionOptions);\n        }\n    }\n    else {\n        // have uncompressed data\n        content = getBinaryData(file);\n        if (!content || content.length === 0 || file.dir) {\n            compression = compressions['STORE'];\n            content = \"\";\n        }\n        result.uncompressedSize = content.length;\n        result.crc32 = crc32(content);\n        result.compressedContent = compression.compress(utils.transformTo(compression.compressInputType, content), compressionOptions);\n    }\n\n    result.compressedSize = result.compressedContent.length;\n    result.compressionMethod = compression.magic;\n\n    return result;\n};\n\n\n\n\n/**\n * Generate the UNIX part of the external file attributes.\n * @param {Object} unixPermissions the unix permissions or null.\n * @param {Boolean} isDir true if the entry is a directory, false otherwise.\n * @return {Number} a 32 bit integer.\n *\n * adapted from http://unix.stackexchange.com/questions/14705/the-zip-formats-external-file-attribute :\n *\n * TTTTsstrwxrwxrwx0000000000ADVSHR\n * ^^^^____________________________ file type, see zipinfo.c (UNX_*)\n *     ^^^_________________________ setuid, setgid, sticky\n *        ^^^^^^^^^________________ permissions\n *                 ^^^^^^^^^^______ not used ?\n *                           ^^^^^^ DOS attribute bits : Archive, Directory, Volume label, System file, Hidden, Read only\n */\nvar generateUnixExternalFileAttr = function (unixPermissions, isDir) {\n\n    var result = unixPermissions;\n    if (!unixPermissions) {\n        // I can't use octal values in strict mode, hence the hexa.\n        //  040775 => 0x41fd\n        // 0100664 => 0x81b4\n        result = isDir ? 0x41fd : 0x81b4;\n    }\n\n    return (result & 0xFFFF) << 16;\n};\n\n/**\n * Generate the DOS part of the external file attributes.\n * @param {Object} dosPermissions the dos permissions or null.\n * @param {Boolean} isDir true if the entry is a directory, false otherwise.\n * @return {Number} a 32 bit integer.\n *\n * Bit 0     Read-Only\n * Bit 1     Hidden\n * Bit 2     System\n * Bit 3     Volume Label\n * Bit 4     Directory\n * Bit 5     Archive\n */\nvar generateDosExternalFileAttr = function (dosPermissions, isDir) {\n\n    // the dir flag is already set for compatibility\n\n    return (dosPermissions || 0)  & 0x3F;\n};\n\n/**\n * Generate the various parts used in the construction of the final zip file.\n * @param {string} name the file name.\n * @param {ZipObject} file the file content.\n * @param {JSZip.CompressedObject} compressedObject the compressed object.\n * @param {number} offset the current offset from the start of the zip file.\n * @param {String} platform let's pretend we are this platform (change platform dependents fields)\n * @param {Function} encodeFileName the function to encode the file name / comment.\n * @return {object} the zip parts.\n */\nvar generateZipParts = function(name, file, compressedObject, offset, platform, encodeFileName) {\n    var data = compressedObject.compressedContent,\n        useCustomEncoding = encodeFileName !== utf8.utf8encode,\n        encodedFileName = utils.transformTo(\"string\", encodeFileName(file.name)),\n        utfEncodedFileName = utils.transformTo(\"string\", utf8.utf8encode(file.name)),\n        comment = file.comment || \"\",\n        encodedComment = utils.transformTo(\"string\", encodeFileName(comment)),\n        utfEncodedComment = utils.transformTo(\"string\", utf8.utf8encode(comment)),\n        useUTF8ForFileName = utfEncodedFileName.length !== file.name.length,\n        useUTF8ForComment = utfEncodedComment.length !== comment.length,\n        o = file.options,\n        dosTime,\n        dosDate,\n        extraFields = \"\",\n        unicodePathExtraField = \"\",\n        unicodeCommentExtraField = \"\",\n        dir, date;\n\n\n    // handle the deprecated options.dir\n    if (file._initialMetadata.dir !== file.dir) {\n        dir = file.dir;\n    } else {\n        dir = o.dir;\n    }\n\n    // handle the deprecated options.date\n    if(file._initialMetadata.date !== file.date) {\n        date = file.date;\n    } else {\n        date = o.date;\n    }\n\n    var extFileAttr = 0;\n    var versionMadeBy = 0;\n    if (dir) {\n        // dos or unix, we set the dos dir flag\n        extFileAttr |= 0x00010;\n    }\n    if(platform === \"UNIX\") {\n        versionMadeBy = 0x031E; // UNIX, version 3.0\n        extFileAttr |= generateUnixExternalFileAttr(file.unixPermissions, dir);\n    } else { // DOS or other, fallback to DOS\n        versionMadeBy = 0x0014; // DOS, version 2.0\n        extFileAttr |= generateDosExternalFileAttr(file.dosPermissions, dir);\n    }\n\n    // date\n    // @see http://www.delorie.com/djgpp/doc/rbinter/it/52/13.html\n    // @see http://www.delorie.com/djgpp/doc/rbinter/it/65/16.html\n    // @see http://www.delorie.com/djgpp/doc/rbinter/it/66/16.html\n\n    dosTime = date.getHours();\n    dosTime = dosTime << 6;\n    dosTime = dosTime | date.getMinutes();\n    dosTime = dosTime << 5;\n    dosTime = dosTime | date.getSeconds() / 2;\n\n    dosDate = date.getFullYear() - 1980;\n    dosDate = dosDate << 4;\n    dosDate = dosDate | (date.getMonth() + 1);\n    dosDate = dosDate << 5;\n    dosDate = dosDate | date.getDate();\n\n    if (useUTF8ForFileName) {\n        // set the unicode path extra field. unzip needs at least one extra\n        // field to correctly handle unicode path, so using the path is as good\n        // as any other information. This could improve the situation with\n        // other archive managers too.\n        // This field is usually used without the utf8 flag, with a non\n        // unicode path in the header (winrar, winzip). This helps (a bit)\n        // with the messy Windows' default compressed folders feature but\n        // breaks on p7zip which doesn't seek the unicode path extra field.\n        // So for now, UTF-8 everywhere !\n        unicodePathExtraField =\n            // Version\n            decToHex(1, 1) +\n            // NameCRC32\n            decToHex(crc32(encodedFileName), 4) +\n            // UnicodeName\n            utfEncodedFileName;\n\n        extraFields +=\n            // Info-ZIP Unicode Path Extra Field\n            \"\\x75\\x70\" +\n            // size\n            decToHex(unicodePathExtraField.length, 2) +\n            // content\n            unicodePathExtraField;\n    }\n\n    if(useUTF8ForComment) {\n\n        unicodeCommentExtraField =\n            // Version\n            decToHex(1, 1) +\n            // CommentCRC32\n            decToHex(this.crc32(encodedComment), 4) +\n            // UnicodeName\n            utfEncodedComment;\n\n        extraFields +=\n            // Info-ZIP Unicode Path Extra Field\n            \"\\x75\\x63\" +\n            // size\n            decToHex(unicodeCommentExtraField.length, 2) +\n            // content\n            unicodeCommentExtraField;\n    }\n\n    var header = \"\";\n\n    // version needed to extract\n    header += \"\\x0A\\x00\";\n    // general purpose bit flag\n    // set bit 11 if utf8\n    header += !useCustomEncoding && (useUTF8ForFileName || useUTF8ForComment) ? \"\\x00\\x08\" : \"\\x00\\x00\";\n    // compression method\n    header += compressedObject.compressionMethod;\n    // last mod file time\n    header += decToHex(dosTime, 2);\n    // last mod file date\n    header += decToHex(dosDate, 2);\n    // crc-32\n    header += decToHex(compressedObject.crc32, 4);\n    // compressed size\n    header += decToHex(compressedObject.compressedSize, 4);\n    // uncompressed size\n    header += decToHex(compressedObject.uncompressedSize, 4);\n    // file name length\n    header += decToHex(encodedFileName.length, 2);\n    // extra field length\n    header += decToHex(extraFields.length, 2);\n\n\n    var fileRecord = signature.LOCAL_FILE_HEADER + header + encodedFileName + extraFields;\n\n    var dirRecord = signature.CENTRAL_FILE_HEADER +\n    // version made by (00: DOS)\n    decToHex(versionMadeBy, 2) +\n    // file header (common to file and central directory)\n    header +\n    // file comment length\n    decToHex(encodedComment.length, 2) +\n    // disk number start\n    \"\\x00\\x00\" +\n    // internal file attributes TODO\n    \"\\x00\\x00\" +\n    // external file attributes\n    decToHex(extFileAttr, 4) +\n    // relative offset of local header\n    decToHex(offset, 4) +\n    // file name\n    encodedFileName +\n    // extra field\n    extraFields +\n    // file comment\n    encodedComment;\n\n    return {\n        fileRecord: fileRecord,\n        dirRecord: dirRecord,\n        compressedObject: compressedObject\n    };\n};\n\n\n// return the actual prototype of JSZip\nvar out = {\n    /**\n     * Read an existing zip and merge the data in the current JSZip object.\n     * The implementation is in jszip-load.js, don't forget to include it.\n     * @param {String|ArrayBuffer|Uint8Array|Buffer} stream  The stream to load\n     * @param {Object} options Options for loading the stream.\n     *  options.base64 : is the stream in base64 ? default : false\n     * @return {JSZip} the current JSZip object\n     */\n    load: function(stream, options) {\n        throw new Error(\"Load method is not defined. Is the file jszip-load.js included ?\");\n    },\n\n    /**\n     * Filter nested files/folders with the specified function.\n     * @param {Function} search the predicate to use :\n     * function (relativePath, file) {...}\n     * It takes 2 arguments : the relative path and the file.\n     * @return {Array} An array of matching elements.\n     */\n    filter: function(search) {\n        var result = [],\n            filename, relativePath, file, fileClone;\n        for (filename in this.files) {\n            if (!this.files.hasOwnProperty(filename)) {\n                continue;\n            }\n            file = this.files[filename];\n            // return a new object, don't let the user mess with our internal objects :)\n            fileClone = new ZipObject(file.name, file._data, utils.extend(file.options));\n            relativePath = filename.slice(this.root.length, filename.length);\n            if (filename.slice(0, this.root.length) === this.root && // the file is in the current root\n            search(relativePath, fileClone)) { // and the file matches the function\n                result.push(fileClone);\n            }\n        }\n        return result;\n    },\n\n    /**\n     * Add a file to the zip file, or search a file.\n     * @param   {string|RegExp} name The name of the file to add (if data is defined),\n     * the name of the file to find (if no data) or a regex to match files.\n     * @param   {String|ArrayBuffer|Uint8Array|Buffer} data  The file data, either raw or base64 encoded\n     * @param   {Object} o     File options\n     * @return  {JSZip|Object|Array} this JSZip object (when adding a file),\n     * a file (when searching by string) or an array of files (when searching by regex).\n     */\n    file: function(name, data, o) {\n        if (arguments.length === 1) {\n            if (utils.isRegExp(name)) {\n                var regexp = name;\n                return this.filter(function(relativePath, file) {\n                    return !file.dir && regexp.test(relativePath);\n                });\n            }\n            else { // text\n                return this.filter(function(relativePath, file) {\n                    return !file.dir && relativePath === name;\n                })[0] || null;\n            }\n        }\n        else { // more than one argument : we have data !\n            name = this.root + name;\n            fileAdd.call(this, name, data, o);\n        }\n        return this;\n    },\n\n    /**\n     * Add a directory to the zip file, or search.\n     * @param   {String|RegExp} arg The name of the directory to add, or a regex to search folders.\n     * @return  {JSZip} an object with the new directory as the root, or an array containing matching folders.\n     */\n    folder: function(arg) {\n        if (!arg) {\n            return this;\n        }\n\n        if (utils.isRegExp(arg)) {\n            return this.filter(function(relativePath, file) {\n                return file.dir && arg.test(relativePath);\n            });\n        }\n\n        // else, name is a new folder\n        var name = this.root + arg;\n        var newFolder = folderAdd.call(this, name);\n\n        // Allow chaining by returning a new object with this folder as the root\n        var ret = this.clone();\n        ret.root = newFolder.name;\n        return ret;\n    },\n\n    /**\n     * Delete a file, or a directory and all sub-files, from the zip\n     * @param {string} name the name of the file to delete\n     * @return {JSZip} this JSZip object\n     */\n    remove: function(name) {\n        name = this.root + name;\n        var file = this.files[name];\n        if (!file) {\n            // Look for any folders\n            if (name.slice(-1) != \"/\") {\n                name += \"/\";\n            }\n            file = this.files[name];\n        }\n\n        if (file && !file.dir) {\n            // file\n            delete this.files[name];\n        } else {\n            // maybe a folder, delete recursively\n            var kids = this.filter(function(relativePath, file) {\n                return file.name.slice(0, name.length) === name;\n            });\n            for (var i = 0; i < kids.length; i++) {\n                delete this.files[kids[i].name];\n            }\n        }\n\n        return this;\n    },\n\n    /**\n     * Generate the complete zip file\n     * @param {Object} options the options to generate the zip file :\n     * - base64, (deprecated, use type instead) true to generate base64.\n     * - compression, \"STORE\" by default.\n     * - type, \"base64\" by default. Values are : string, base64, uint8array, arraybuffer, blob.\n     * @return {String|Uint8Array|ArrayBuffer|Buffer|Blob} the zip file\n     */\n    generate: function(options) {\n        options = utils.extend(options || {}, {\n            base64: true,\n            compression: \"STORE\",\n            compressionOptions : null,\n            type: \"base64\",\n            platform: \"DOS\",\n            comment: null,\n            mimeType: 'application/zip',\n            encodeFileName: utf8.utf8encode\n        });\n\n        utils.checkSupport(options.type);\n\n        // accept nodejs `process.platform`\n        if(\n          options.platform === 'darwin' ||\n          options.platform === 'freebsd' ||\n          options.platform === 'linux' ||\n          options.platform === 'sunos'\n        ) {\n          options.platform = \"UNIX\";\n        }\n        if (options.platform === 'win32') {\n          options.platform = \"DOS\";\n        }\n\n        var zipData = [],\n            localDirLength = 0,\n            centralDirLength = 0,\n            writer, i,\n            encodedComment = utils.transformTo(\"string\", options.encodeFileName(options.comment || this.comment || \"\"));\n\n        // first, generate all the zip parts.\n        for (var name in this.files) {\n            if (!this.files.hasOwnProperty(name)) {\n                continue;\n            }\n            var file = this.files[name];\n\n            var compressionName = file.options.compression || options.compression.toUpperCase();\n            var compression = compressions[compressionName];\n            if (!compression) {\n                throw new Error(compressionName + \" is not a valid compression method !\");\n            }\n            var compressionOptions = file.options.compressionOptions || options.compressionOptions || {};\n\n            var compressedObject = generateCompressedObjectFrom.call(this, file, compression, compressionOptions);\n\n            var zipPart = generateZipParts.call(this, name, file, compressedObject, localDirLength, options.platform, options.encodeFileName);\n            localDirLength += zipPart.fileRecord.length + compressedObject.compressedSize;\n            centralDirLength += zipPart.dirRecord.length;\n            zipData.push(zipPart);\n        }\n\n        var dirEnd = \"\";\n\n        // end of central dir signature\n        dirEnd = signature.CENTRAL_DIRECTORY_END +\n        // number of this disk\n        \"\\x00\\x00\" +\n        // number of the disk with the start of the central directory\n        \"\\x00\\x00\" +\n        // total number of entries in the central directory on this disk\n        decToHex(zipData.length, 2) +\n        // total number of entries in the central directory\n        decToHex(zipData.length, 2) +\n        // size of the central directory   4 bytes\n        decToHex(centralDirLength, 4) +\n        // offset of start of central directory with respect to the starting disk number\n        decToHex(localDirLength, 4) +\n        // .ZIP file comment length\n        decToHex(encodedComment.length, 2) +\n        // .ZIP file comment\n        encodedComment;\n\n\n        // we have all the parts (and the total length)\n        // time to create a writer !\n        var typeName = options.type.toLowerCase();\n        if(typeName===\"uint8array\"||typeName===\"arraybuffer\"||typeName===\"blob\"||typeName===\"nodebuffer\") {\n            writer = new Uint8ArrayWriter(localDirLength + centralDirLength + dirEnd.length);\n        }else{\n            writer = new StringWriter(localDirLength + centralDirLength + dirEnd.length);\n        }\n\n        for (i = 0; i < zipData.length; i++) {\n            writer.append(zipData[i].fileRecord);\n            writer.append(zipData[i].compressedObject.compressedContent);\n        }\n        for (i = 0; i < zipData.length; i++) {\n            writer.append(zipData[i].dirRecord);\n        }\n\n        writer.append(dirEnd);\n\n        var zip = writer.finalize();\n\n\n\n        switch(options.type.toLowerCase()) {\n            // case \"zip is an Uint8Array\"\n            case \"uint8array\" :\n            case \"arraybuffer\" :\n            case \"nodebuffer\" :\n               return utils.transformTo(options.type.toLowerCase(), zip);\n            case \"blob\" :\n               return utils.arrayBuffer2Blob(utils.transformTo(\"arraybuffer\", zip), options.mimeType);\n            // case \"zip is a string\"\n            case \"base64\" :\n               return (options.base64) ? base64.encode(zip) : zip;\n            default : // case \"string\" :\n               return zip;\n         }\n\n    },\n\n    /**\n     * @deprecated\n     * This method will be removed in a future version without replacement.\n     */\n    crc32: function (input, crc) {\n        return crc32(input, crc);\n    },\n\n    /**\n     * @deprecated\n     * This method will be removed in a future version without replacement.\n     */\n    utf8encode: function (string) {\n        return utils.transformTo(\"string\", utf8.utf8encode(string));\n    },\n\n    /**\n     * @deprecated\n     * This method will be removed in a future version without replacement.\n     */\n    utf8decode: function (input) {\n        return utf8.utf8decode(input);\n    }\n};\nmodule.exports = out;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/jszip/lib/object.js","var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n\n// WEBPACK FOOTER //\n// (webpack)/buildin/global.js","'use strict';\nexports.STORE = {\n    magic: \"\\x00\\x00\",\n    compress: function(content, compressionOptions) {\n        return content; // no compression\n    },\n    uncompress: function(content) {\n        return content; // no compression\n    },\n    compressInputType: null,\n    uncompressInputType: null\n};\nexports.DEFLATE = require('./flate');\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/jszip/lib/compressions.js","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n  2:      'need dictionary',     /* Z_NEED_DICT       2  */\n  1:      'stream end',          /* Z_STREAM_END      1  */\n  0:      '',                    /* Z_OK              0  */\n  '-1':   'file error',          /* Z_ERRNO         (-1) */\n  '-2':   'stream error',        /* Z_STREAM_ERROR  (-2) */\n  '-3':   'data error',          /* Z_DATA_ERROR    (-3) */\n  '-4':   'insufficient memory', /* Z_MEM_ERROR     (-4) */\n  '-5':   'buffer error',        /* Z_BUF_ERROR     (-5) */\n  '-6':   'incompatible version' /* Z_VERSION_ERROR (-6) */\n};\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/pako/lib/zlib/messages.js","'use strict';\nmodule.exports = function(data, encoding){\n    return new Buffer(data, encoding);\n};\nmodule.exports.test = function(b){\n    return Buffer.isBuffer(b);\n};\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/jszip/lib/nodeBuffer.js","'use strict';\n\nmodule.exports = require('./matrix').Matrix;\nmodule.exports.Decompositions = module.exports.DC = require('./decompositions');\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/ml-matrix/src/index.js","'use strict';\n\nexports.hypotenuse = function hypotenuse(a, b) {\n    var r;\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\n// For use in the decomposition algorithms. With big matrices, access time is\n// too long on elements from array subclass\n// todo check when it is fixed in v8\n// http://jsperf.com/access-and-write-array-subclass\nexports.getEmpty2DArray = function (rows, columns) {\n    var array = new Array(rows);\n    for (var i = 0; i < rows; i++) {\n        array[i] = new Array(columns);\n    }\n    return array;\n};\n\nexports.getFilled2DArray = function (rows, columns, value) {\n    var array = new Array(rows);\n    for (var i = 0; i < rows; i++) {\n        array[i] = new Array(columns);\n        for (var j = 0; j < columns; j++) {\n            array[i][j] = value;\n        }\n    }\n    return array;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/ml-matrix/src/dc/util.js","'use strict';\n\nconst Heap = require('heap');\n\nfunction Cluster() {\n    this.children = [];\n    this.distance = -1;\n    this.index = [];\n}\n\n/**\n * Creates an array of values where maximum distance smaller than the threshold\n * @param {number} threshold\n * @return {Array <Cluster>}\n */\nCluster.prototype.cut = function (threshold) {\n    if (threshold < 0) throw new RangeError('Threshold too small');\n    var root = new Cluster();\n    root.children = this.children;\n    root.distance = this.distance;\n    root.index = this.index;\n    var list = [root];\n    var ans = [];\n    while (list.length > 0) {\n        var aux = list.shift();\n        if (threshold >= aux.distance) {\n            ans.push(aux);\n        } else {\n            list = list.concat(aux.children);\n        }\n    }\n    return ans;\n};\n\n/**\n * Merge the leaves in the minimum way to have 'minGroups' number of clusters\n * @param {number} minGroups - Them minimum number of children the first level of the tree should have\n * @return {Cluster}\n */\nCluster.prototype.group = function (minGroups) {\n    if (!Number.isInteger(minGroups) || minGroups < 1) throw new RangeError('Number of groups must be a positive integer');\n\n    const heap = new Heap(function (a, b) {\n        return b.distance - a.distance;\n    });\n\n    heap.push(this);\n\n    while (heap.size() < minGroups) {\n        var first = heap.pop();\n        if (first.children.length === 0) {\n            break;\n        }\n        first.children.forEach(child => heap.push(child));\n    }\n\n    var root = new Cluster();\n    root.children = heap.toArray();\n    root.distance = this.distance;\n\n    return root;\n};\n\n/**\n * Traverses the tree depth-first and provide callback to be called on each individual node\n * @param {function} cb - The callback to be called on each node encounter\n * @type {Cluster}\n */\nCluster.prototype.traverse = function (cb) {\n    function visit(root, callback) {\n        callback(root);\n        if (root.children) {\n            for (var i = root.children.length - 1; i >= 0; i--) {\n                visit(root.children[i], callback);\n            }\n        }\n    }\n    visit(this, cb);\n};\n\nmodule.exports = Cluster;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/ml-hclust/src/Cluster.js","export {default as SD} from './SD';\nexport {default as NMR} from './NMR';\nexport {default as NMR2D} from './NMR2D';\nexport {Ranges, getACS} from 'spectra-data-ranges';\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/spectra-data/src/index.js","module.exports = exports = require('./ArrayUtils');\n\n\nexports.getEquallySpacedData = require('./getEquallySpaced').getEquallySpacedData;\nexports.SNV = require('./snv').SNV;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/ml-array-utils/src/index.js","'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\n\nvar isArray = function isArray(arr) {\n\tif (typeof Array.isArray === 'function') {\n\t\treturn Array.isArray(arr);\n\t}\n\n\treturn toStr.call(arr) === '[object Array]';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) {/**/}\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\nmodule.exports = function extend() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[0],\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif (typeof target === 'boolean') {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t} else if ((typeof target !== 'object' && typeof target !== 'function') || target == null) {\n\t\ttarget = {};\n\t}\n\n\tfor (; i < length; ++i) {\n\t\toptions = arguments[i];\n\t\t// Only deal with non-null/undefined values\n\t\tif (options != null) {\n\t\t\t// Extend the base object\n\t\t\tfor (name in options) {\n\t\t\t\tsrc = target[name];\n\t\t\t\tcopy = options[name];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif (target !== copy) {\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\ttarget[name] = extend(deep, clone, copy);\n\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\ttarget[name] = copy;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/extend/index.js","'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 = -Infinity;\n    var l = values.length;\n    for (var i = 0; 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 = Infinity;\n    var l = values.length;\n    for (var i = 0; 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 = Infinity;\n    var max = -Infinity;\n    var l = values.length;\n    for (var i = 0; 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 = values.slice().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 = values.slice().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\nexports.quartiles = function quartiles(values, alreadySorted) {\n    if (typeof(alreadySorted) === 'undefined') alreadySorted = false;\n    if (!alreadySorted) {\n        values = values.slice();\n        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    }\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    }\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 = values.slice();\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\n\n\n// WEBPACK FOOTER //\n// ./node_modules/ml-savitzky-golay-generalized/node_modules/ml-stat/array.js","export {default as fourierTransform} from './fourierTransform';\nexport {default as zeroFilling} from './zeroFilling';\nexport {default as phaseCorrection} from './phaseCorrection';\nexport {default as digitalFilter} from './digitalFilter';\nexport {default as absoluteValue} from './absoluteValue';\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/spectra-data/src/filters/Filters.js","'use strict';\n\nexports.FFTUtils = require(\"./FFTUtils\");\nexports.FFT = require('./fftlib');\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/ml-fft/src/index.js","\"use strict\";\n\nconst Converter = require(\"jcampconverter\");\nconst IOBuffer = require('iobuffer');\nconst JSZip = require(\"jszip\");\n\n// constants\nvar BINARY = 1;\nvar TEXT = 2;\n\n\nfunction readZIP(zipFile, options) {\n    options = options || {};\n\n    var zip = new JSZip();\n    zip.load(zipFile, options);\n\n    var files = {\n        'ser': BINARY,\n        'fid': BINARY,\n        'acqus': TEXT,\n        'acqu2s': TEXT,\n        'procs': TEXT,\n        'proc2s': TEXT,\n        '1r': BINARY,\n        '1i': BINARY,\n        '2rr': BINARY\n    };\n    var folders = zip.filter(function (relativePath, file) {\n        if(relativePath.indexOf(\"ser\")>=0||relativePath.indexOf(\"fid\")>=0\n            ||relativePath.indexOf(\"1r\")>=0||relativePath.indexOf(\"2rr\")>=0){\n            return true;\n        }\n\n        return false;\n\n    });\n\n    var spectra = new Array(folders.length);\n\n    for(var i = 0; i < folders.length; ++i) {\n        var len = folders[i].name.length;\n        var name = folders[i].name;\n        name = name.substr(0,name.lastIndexOf(\"/\")+1);\n        var currFolder = zip.folder(name);\n        var currFiles = currFolder.filter(function (relativePath, file) {\n            return files[relativePath] ? true : false;\n        });\n        var brukerFiles = {};\n        if(name.indexOf(\"pdata\")>=0){\n            brukerFiles['acqus'] = zip.file(name.replace(/pdata\\/[0-9]\\//,\"acqus\")).asText();\n        }\n        for(var j = 0; j < currFiles.length; ++j) {\n            var idx = currFiles[j].name.lastIndexOf('/');\n            var name = currFiles[j].name.substr(idx + 1);\n            if(files[name] === BINARY) {\n                brukerFiles[name] = new IOBuffer(currFiles[j].asArrayBuffer());\n            } else {\n                brukerFiles[name] = currFiles[j].asText();\n            }\n        }\n        //console.log(folders[i].name);\n        spectra[i] = {\"filename\":folders[i].name,value:convert(brukerFiles,options)};\n    }\n\n    return spectra;\n}\n\nfunction convert(brukerFiles, options) {\n    options = options || {};\n    var start = new Date();\n    var result;\n    if(brukerFiles['ser'] || brukerFiles['2rr']) {\n        result =  convert2D(brukerFiles, options);\n    } else if(brukerFiles['1r'] || brukerFiles['1i'] || brukerFiles['fid']) {\n        result =   convert1D(brukerFiles, options);\n    } else {\n        throw new RangeError('The current files are invalid');\n    }\n\n    if (result.twoD && !options.noContours) {\n        //console.log(\"Countours\");\n        add2D(result);\n        if (result.profiling) result.profiling.push({\n            action: 'Finished countour plot calculation',\n            time: new Date() - start\n        });\n        if (!options.keepSpectra) {\n            delete result.spectra;\n        }\n    }\n\n    var spectra = result.spectra;\n    if (options.xy) { // the spectraData should not be a oneD array but an object with x and y\n        if (spectra.length > 0) {\n            for (var i=0; i<spectra.length; i++) {\n                var spectrum=spectra[i];\n                if (spectrum.data.length>0) {\n                    for (var j=0; j<spectrum.data.length; j++) {\n                        var data=spectrum.data[j];\n                        var newData={x: new Array(data.length/2), y:new Array(data.length/2)};\n                        for (var k=0; k<data.length; k=k+2) {\n                            newData.x[k/2]=data[k];\n                            newData.y[k/2]=data[k+1];\n                        }\n                        spectrum.data[j]=newData;\n                    }\n\n                }\n            }\n        }\n    }\n\n    return result;\n}\n\nfunction convert1D(files, options) {\n    var result = parseData(files[\"procs\"], options);\n    var temp = parseData(files['acqus'], options);\n\n    var keys = Object.keys(temp.info);\n    for (var i = 0; i < keys.length; i++) {\n        var currKey = keys[i];\n        if(result.info[currKey] === undefined) {\n            result.info[currKey] = temp.info[currKey];\n        }\n    }\n\n    if(files['1r'] || files['1i']) {\n        if(files['1r']) {\n            setXYSpectrumData(files['1r'], result, '1r', true);\n        }\n        if(files['1i']) {\n            setXYSpectrumData(files['1i'], result, '1i', false);\n        }\n    } else if(files['fid']) {\n        setFIDSpectrumData(files['fid'], result)\n    }\n    \n    return result;\n}\n\nfunction convert2D(files, options) {\n    var SF,SW_p,SW,offset;\n    if(files['2rr']) {\n        var result = parseData(files['procs'], options);\n        var temp = parseData(files['acqus'], options);\n\n        var keys = Object.keys(temp.info);\n        for (var i = 0; i < keys.length; i++) {\n            var currKey = keys[i];\n            if(result.info[currKey] === undefined) {\n                result.info[currKey] = temp.info[currKey];\n            }\n        }\n        \n        temp = parseData(files['proc2s'], options);\n        result.info.nbSubSpectra = temp.info['$SI'] = parseInt(temp.info['$SI']);\n        SF = temp.info['$SF'] = parseFloat(temp.info['$SF']);\n        SW_p = temp.info['$SWP'] = parseFloat(temp.info['$SWP']);\n        offset = temp.info['$OFFSET'] = parseFloat(temp.info['$OFFSET']);\n\n    } else if(files['ser']) {\n        result = parseData(files['acqus'], options);\n        temp = parseData(files['acqu2s'], options);\n        result.info.nbSubSpectra = temp.info['$SI'] = parseInt(temp.info['$TD']);\n        result.info['$SI'] = parseInt(result.info['$TD']);\n        //SW_p = temp.info['$SWH'] = parseFloat(temp.info['$SWH']);\n\n        SW_p = temp.info[\"$SW\"];\n\n        result.info[\"$SWP\"]=result.info[\"$SWH\"];\n        result.info[\"$SF\"]=parseFloat(temp.info['$SFO1']);\n        result.info['$OFFSET']=0;\n        SF = temp.info['$SFO1'] = parseFloat(temp.info['$SFO1']);\n        SF = 1;\n        offset=0;\n        result.info['$AXNUC']=result.info['$NUC1'];\n        temp.info['$AXNUC']=temp.info['$NUC1'];\n    }\n\n    result.info.firstY = offset;\n    result.info.lastY = offset - SW_p / SF;\n    result.info['$BF2'] = SF;\n    result.info['$SFO1'] = SF;\n\n    var nbSubSpectra = result.info.nbSubSpectra;\n    var pageValue = result.info.firstY;\n    var deltaY = (result.info.lastY-result.info.firstY)/(nbSubSpectra-1);\n\n    if(files['2rr']) {\n        setXYSpectrumData(files['2rr'], result, '2rr', true);\n    } else if(files['ser']) {\n        setFIDSpectrumData(files['ser'], result, 'ser', true);\n    }\n\n    for(var i = 0; i < nbSubSpectra; i++) {\n        pageValue+=deltaY;\n        result.spectra[i].pageValue=pageValue;\n    }\n\n    var dataType = files['ser'] ? 'TYPE_2DNMR_FID' : 'TYPE_2DNMR_SPECTRUM';\n\n    result.info['2D_Y_NUCLEUS'] = temp.info['$AXNUC'];\n    result.info['2D_X_NUCLEUS'] = result.info['$AXNUC'];\n    result.info['2D_Y_FRECUENCY'] = SF;\n    result.info['2D_Y_OFFSET'] = offset;\n    result.info['2D_X_FRECUENCY'] = result.info['$SF'];\n    result.info['2D_X_OFFSET'] = result.info['$OFFSET'];\n\n    result.twoD = true;\n\n    return result;\n}\n\nfunction setXYSpectrumData(file, spectra, store, real) {\n    var td = spectra.info['$SI'] = parseInt(spectra.info['$SI']);\n\n    var SW_p = parseFloat(spectra.info[\"$SWP\"]);\n    var SF = parseFloat(spectra.info[\"$SF\"]);\n    var BF = SF;\n    //var BF = parseFloat(spectra.info[\"$BF1\"]);\n    var offset = spectra.shiftOffsetVal;//parseFloat(spectra.info[\"$OFFSET\"]);\n\n    spectra.info[\"observeFrequency\"] = SF;\n    spectra.info[\"$BF1\"] = BF;\n    spectra.info[\"$SFO1\"] = SF;\n    spectra.info.brukerReference = BF;\n\n    var endian = parseInt(spectra.info[\"$BYTORDP\"]);\n    endian = endian ? 0 : 1;\n\n    // number of spectras\n    var nbSubSpectra = spectra.info.nbSubSpectra ? spectra.info.nbSubSpectra : 1;\n\n    if(endian)\n        file.setLittleEndian();\n    else\n        file.setBigEndian();\n\n    for(var i = 0; i < nbSubSpectra; i++) {\n        var toSave = {\n            dataType : \"NMR Spectrum\",\n            dataTable : \"(X++(R..R))\",\n            nbPoints : td,\n            firstX : offset,\n            lastX : offset - SW_p / SF,\n            xUnit : \"PPM\",\n            yUnit : \"Arbitrary\",\n            data:[new Array(td*2)],//[{x:new Array(td),y:new Array(td)}],\n            isXYdata:true,\n            observeFrequency:SF,\n            title:spectra.info['TITLE'],\n            deltaX:-(SW_p / SF)/(td-1)\n\n        };\n\n        var x = offset;\n        var deltaX = toSave.deltaX;\n        if(real) {\n            for(var k = 0; k < td; ++k) {\n                toSave.data[0][2*k] = x;\n                toSave.data[0][2*k+1] = file.readInt32();\n                if(toSave.data[0][2*k+1]===null||isNaN(toSave.data[0][2*k+1])){\n                    toSave.data[0][2*k+1] = 0;\n                }\n                x += deltaX;\n            }\n        } else {\n            for(k = td - 1; k >= 0; --k) {\n                toSave.data[0][2*k] = x;\n                toSave.data[0][2*k+1] = file.readInt32();\n                if(toSave.data[0][2*k+1]===null||isNaN(toSave.data[0][2*k+1])) {\n                    toSave.data[0][2*k+1] = 0;\n                }\n                x += deltaX;\n            }\n        }\n\n        spectra.spectra.push(toSave);\n    }\n}\n\nfunction parseData(file, options) {\n    var keepRecordsRegExp=/.*/;\n    if (options.keepRecordsRegExp) keepRecordsRegExp=options.keepRecordsRegExp;\n    return Converter.convert(file, {\n        keepRecordsRegExp:keepRecordsRegExp\n    });\n}\n\nfunction setFIDSpectrumData(file, spectra) {\n    var td = spectra.info['$TD'] = parseInt(spectra.info['$TD']);\n\n    var SW_h = spectra.info['$SWH'] = parseFloat(spectra.info['$SWH']);\n    var SW = spectra.info['$SW'] = parseFloat(spectra.info['$SW']);\n\n    var SF = spectra.info['$SFO1'] = parseFloat(spectra.info['$SFO1']);\n    var BF =  parseFloat(spectra.info['$BF1']);\n    spectra.info['$BF1'] = BF;\n\n    //var DW = 1 / (2 * SW_h);\n    //var AQ = td * DW;\n    var AQ = SW;\n    var DW = AQ/(td-1);\n\n    //console.log(DW+\" \"+SW+\" \"+td);\n    var endian = parseInt(spectra.info[\"$BYTORDP\"]);\n    endian = endian ? 0 : 1;\n\n    if(endian)\n        file.setLittleEndian();\n    else\n        file.setBigEndian();\n\n    var nbSubSpectra = spectra.info.nbSubSpectra ? spectra.info.nbSubSpectra : 1;\n    spectra.spectra = new Array(nbSubSpectra);\n    \n    for(var j = 0; j < nbSubSpectra/2; j++) {\n        var toSave = {\n            dataType : \"NMR FID\",\n            dataTable : \"(X++(R..R))\",\n            nbPoints : td,\n            firstX : 0,\n            lastX : AQ,\n            nucleus : spectra.info[\"$NUC1\"] ? spectra.info[\"$NUC1\"] : undefined,\n            xUnit : \"Sec\",\n            yUnit : \"Arbitrary\",\n            data:[new Array(2*td)],//[{x:new Array(td),y:new Array(td)}],\n            isXYdata:true,\n            observeFrequency:SF,\n            title:spectra.info['TITLE'],\n            deltaX:DW\n        };\n        spectra.spectra[j*2] = toSave;\n\n        toSave = {\n            dataType : \"NMR FID\",\n            dataTable : \"(X++(I..I))\",\n            nbPoints : td,\n            firstX : 0,\n            lastX : AQ,\n            nucleus : spectra.info[\"$NUC1\"] ? spectra.info[\"$NUC1\"] : undefined,\n            xUnit : \"Sec\",\n            yUnit : \"Arbitrary\",\n            data:[new Array(2*td)],//[{x:new Array(td),y:new Array(td)}],\n            isXYdata:true,\n            observeFrequency:SF,\n            title:spectra.info['TITLE'],\n            deltaX:DW\n        };\n        spectra.spectra[j*2+1] = toSave;\n        \n        var x = 0;\n        var y;\n        for(var i = 0; file.available(8)&&i<td; i++, x = i*DW) {\n            y = file.readInt32();\n            if(y===null || isNaN(y)){\n                y=0;\n            }\n            spectra.spectra[j*2].data[0][2*i+1] = y;\n            spectra.spectra[j*2].data[0][2*i] = x;\n            y = file.readInt32();\n            if(y===null || isNaN(y)){\n                y=0;\n            }\n            spectra.spectra[j*2+1].data[0][2*i+1] = y;\n            spectra.spectra[j*2+1].data[0][2*i] = x;\n\n        }\n\n        for(; i < td; i++, x = i*DW) {\n            spectra.spectra[j*2].data[0][2*i+1] = 0;\n            spectra.spectra[j*2].data[0][2*i] = x;\n            spectra.spectra[j*2+1].data[0][2*i+1] = 0;\n            spectra.spectra[j*2+1].data[0][2*i] = x;\n        }\n    }\n}\n\n/**\n * Those functions should disappear if add2D becomes accessible in jcampconvert\n * @param spectra\n * @returns {{z: Array, minX: *, maxX: *, minY: *, maxY: *, minZ: *, maxZ: *, noise: number}}\n */\n\nfunction convertTo3DZ(spectra) {\n    var noise = 0;\n    var minZ = spectra[0].data[0][0];\n    var maxZ = minZ;\n    var ySize = spectra.length;\n    var xSize = spectra[0].data[0].length / 2;\n    var z = new Array(ySize);\n    for (var i = 0; i < ySize; i++) {\n        z[i] = new Array(xSize);\n        for (var j = 0; j < xSize; j++) {\n            z[i][j] = spectra[i].data[0][j * 2 + 1];\n            if (z[i][j] < minZ) minZ = spectra[i].data[0][j * 2 + 1];\n            if (z[i][j] > maxZ) maxZ = spectra[i].data[0][j * 2 + 1];\n            if (i !== 0 && j !== 0) {\n                noise += Math.abs(z[i][j] - z[i][j - 1]) + Math.abs(z[i][j] - z[i - 1][j]);\n            }\n        }\n    }\n    return {\n        z: z,\n        minX: spectra[0].data[0][0],\n        maxX: spectra[0].data[0][spectra[0].data[0].length - 2],\n        minY: spectra[0].pageValue,\n        maxY: spectra[ySize - 1].pageValue,\n        minZ: minZ,\n        maxZ: maxZ,\n        noise: noise / ((ySize - 1) * (xSize - 1) * 2)\n    };\n\n}\n\nfunction add2D(result) {\n    var zData = convertTo3DZ(result.spectra);\n    result.contourLines = generateContourLines(zData);\n    delete zData.z;\n    result.minMax = zData;\n}\n\n\nfunction generateContourLines(zData, options) {\n    //console.time('generateContourLines');\n    var noise = zData.noise;\n    var z = zData.z;\n    var contourLevels = [];\n    var nbLevels = 7;\n    var povarHeight = new Float32Array(4);\n    var isOver = [];\n    var nbSubSpectra = z.length;\n    var nbPovars = z[0].length;\n    var pAx, pAy, pBx, pBy;\n\n    var x0 = zData.minX;\n    var xN = zData.maxX;\n    var dx = (xN - x0) / (nbPovars - 1);\n    var y0 = zData.minY;\n    var yN = zData.maxY;\n    var dy = (yN - y0) / (nbSubSpectra - 1);\n    var minZ = zData.minZ;\n    var maxZ = zData.maxZ;\n\n    //System.out.prvarln('y0 '+y0+' yN '+yN);\n    // -------------------------\n    // Povars attribution\n    //\n    // 0----1\n    // |  / |\n    // | /  |\n    // 2----3\n    //\n    // ---------------------d------\n\n    var lineZValue;\n    for (var level = 0; level < nbLevels * 2; level++) { // multiply by 2 for positif and negatif\n        var contourLevel = {};\n        contourLevels.push(contourLevel);\n        var side = level % 2;\n        if (side === 0) {\n            lineZValue = (maxZ - 5 * noise) * Math.exp(level / 2 - nbLevels) + 5 * noise;\n        } else {\n            lineZValue = -(maxZ - 5 * noise) * Math.exp(level / 2 - nbLevels) - 5 * noise;\n        }\n        var lines = [];\n        contourLevel.zValue = lineZValue;\n        contourLevel.lines = lines;\n\n        if (lineZValue <= minZ || lineZValue >= maxZ) continue;\n\n        for (var iSubSpectra = 0; iSubSpectra < nbSubSpectra - 1; iSubSpectra++) {\n            for (var povar = 0; povar < nbPovars - 1; povar++) {\n                povarHeight[0] = z[iSubSpectra][povar];\n                povarHeight[1] = z[iSubSpectra][povar + 1];\n                povarHeight[2] = z[(iSubSpectra + 1)][povar];\n                povarHeight[3] = z[(iSubSpectra + 1)][(povar + 1)];\n\n                for (var i = 0; i < 4; i++) {\n                    isOver[i] = (povarHeight[i] > lineZValue);\n                }\n\n                // Example povar0 is over the plane and povar1 and\n                // povar2 are below, we find the varersections and add\n                // the segment\n                if (isOver[0] !== isOver[1] && isOver[0] !== isOver[2]) {\n                    pAx = povar + (lineZValue - povarHeight[0]) / (povarHeight[1] - povarHeight[0]);\n                    pAy = iSubSpectra;\n                    pBx = povar;\n                    pBy = iSubSpectra + (lineZValue - povarHeight[0]) / (povarHeight[2] - povarHeight[0]);\n                    lines.push(pAx * dx + x0, pAy * dy + y0, pBx * dx + x0, pBy * dy + y0);\n                }\n                if (isOver[3] !== isOver[1] && isOver[3] !== isOver[2]) {\n                    pAx = povar + 1;\n                    pAy = iSubSpectra + 1 - (lineZValue - povarHeight[3]) / (povarHeight[1] - povarHeight[3]);\n                    pBx = povar + 1 - (lineZValue - povarHeight[3]) / (povarHeight[2] - povarHeight[3]);\n                    pBy = iSubSpectra + 1;\n                    lines.push(pAx * dx + x0, pAy * dy + y0, pBx * dx + x0, pBy * dy + y0);\n                }\n                // test around the diagonal\n                if (isOver[1] !== isOver[2]) {\n                    pAx = povar + 1 - (lineZValue - povarHeight[1]) / (povarHeight[2] - povarHeight[1]);\n                    pAy = iSubSpectra + (lineZValue - povarHeight[1]) / (povarHeight[2] - povarHeight[1]);\n                    if (isOver[1] !== isOver[0]) {\n                        pBx = povar + 1 - (lineZValue - povarHeight[1]) / (povarHeight[0] - povarHeight[1]);\n                        pBy = iSubSpectra;\n                        lines.push(pAx * dx + x0, pAy * dy + y0, pBx * dx + x0, pBy * dy + y0);\n                    }\n                    if (isOver[2] !== isOver[0]) {\n                        pBx = povar;\n                        pBy = iSubSpectra + 1 - (lineZValue - povarHeight[2]) / (povarHeight[0] - povarHeight[2]);\n                        lines.push(pAx * dx + x0, pAy * dy + y0, pBx * dx + x0, pBy * dy + y0);\n                    }\n                    if (isOver[1] !== isOver[3]) {\n                        pBx = povar + 1;\n                        pBy = iSubSpectra + (lineZValue - povarHeight[1]) / (povarHeight[3] - povarHeight[1]);\n                        lines.push(pAx * dx + x0, pAy * dy + y0, pBx * dx + x0, pBy * dy + y0);\n                    }\n                    if (isOver[2] !== isOver[3]) {\n                        pBx = povar + (lineZValue - povarHeight[2]) / (povarHeight[3] - povarHeight[2]);\n                        pBy = iSubSpectra + 1;\n                        lines.push(pAx * dx + x0, pAy * dy + y0, pBx * dx + x0, pBy * dy + y0);\n                    }\n                }\n            }\n        }\n    }\n    // console.timeEnd('generateContourLines');\n    return {\n        minX: zData.minX,\n        maxX: zData.maxX,\n        minY: zData.minY,\n        maxY: zData.maxY,\n        segments: contourLevels\n    };\n    //return contourLevels;\n}\n\n\nmodule.exports =  {\n    convertZip: readZIP,\n    converFolder: convert\n};\n\n\n// WEBPACK FOOTER //\n// ./node_modules/brukerconverter/src/brukerconverter.js","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\n * @license  MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n *   === true    Use Uint8Array implementation (fastest)\n *   === false   Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n *   - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n *     See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n *   - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n *   - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n *     incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n  ? global.TYPED_ARRAY_SUPPORT\n  : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n  try {\n    var arr = new Uint8Array(1)\n    arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n    return arr.foo() === 42 && // typed array instances can be augmented\n        typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n        arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n  } catch (e) {\n    return false\n  }\n}\n\nfunction kMaxLength () {\n  return Buffer.TYPED_ARRAY_SUPPORT\n    ? 0x7fffffff\n    : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n  if (kMaxLength() < length) {\n    throw new RangeError('Invalid typed array length')\n  }\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = new Uint8Array(length)\n    that.__proto__ = Buffer.prototype\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    if (that === null) {\n      that = new Buffer(length)\n    }\n    that.length = length\n  }\n\n  return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n  if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n    return new Buffer(arg, encodingOrOffset, length)\n  }\n\n  // Common case.\n  if (typeof arg === 'number') {\n    if (typeof encodingOrOffset === 'string') {\n      throw new Error(\n        'If encoding is specified then the first argument must be a string'\n      )\n    }\n    return allocUnsafe(this, arg)\n  }\n  return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n  arr.__proto__ = Buffer.prototype\n  return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n  if (typeof value === 'number') {\n    throw new TypeError('\"value\" argument must not be a number')\n  }\n\n  if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n    return fromArrayBuffer(that, value, encodingOrOffset, length)\n  }\n\n  if (typeof value === 'string') {\n    return fromString(that, value, encodingOrOffset)\n  }\n\n  return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n  return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n  Buffer.prototype.__proto__ = Uint8Array.prototype\n  Buffer.__proto__ = Uint8Array\n  if (typeof Symbol !== 'undefined' && Symbol.species &&\n      Buffer[Symbol.species] === Buffer) {\n    // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n    Object.defineProperty(Buffer, Symbol.species, {\n      value: null,\n      configurable: true\n    })\n  }\n}\n\nfunction assertSize (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('\"size\" argument must be a number')\n  } else if (size < 0) {\n    throw new RangeError('\"size\" argument must not be negative')\n  }\n}\n\nfunction alloc (that, size, fill, encoding) {\n  assertSize(size)\n  if (size <= 0) {\n    return createBuffer(that, size)\n  }\n  if (fill !== undefined) {\n    // Only pay attention to encoding if it's a string. This\n    // prevents accidentally sending in a number that would\n    // be interpretted as a start offset.\n    return typeof encoding === 'string'\n      ? createBuffer(that, size).fill(fill, encoding)\n      : createBuffer(that, size).fill(fill)\n  }\n  return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n  return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n  assertSize(size)\n  that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) {\n    for (var i = 0; i < size; ++i) {\n      that[i] = 0\n    }\n  }\n  return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n  return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n  return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') {\n    encoding = 'utf8'\n  }\n\n  if (!Buffer.isEncoding(encoding)) {\n    throw new TypeError('\"encoding\" must be a valid string encoding')\n  }\n\n  var length = byteLength(string, encoding) | 0\n  that = createBuffer(that, length)\n\n  var actual = that.write(string, encoding)\n\n  if (actual !== length) {\n    // Writing a hex string, for example, that contains invalid characters will\n    // cause everything after the first invalid character to be ignored. (e.g.\n    // 'abxxcd' will be treated as 'ab')\n    that = that.slice(0, actual)\n  }\n\n  return that\n}\n\nfunction fromArrayLike (that, array) {\n  var length = array.length < 0 ? 0 : checked(array.length) | 0\n  that = createBuffer(that, length)\n  for (var i = 0; i < length; i += 1) {\n    that[i] = array[i] & 255\n  }\n  return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n  array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n  if (byteOffset < 0 || array.byteLength < byteOffset) {\n    throw new RangeError('\\'offset\\' is out of bounds')\n  }\n\n  if (array.byteLength < byteOffset + (length || 0)) {\n    throw new RangeError('\\'length\\' is out of bounds')\n  }\n\n  if (byteOffset === undefined && length === undefined) {\n    array = new Uint8Array(array)\n  } else if (length === undefined) {\n    array = new Uint8Array(array, byteOffset)\n  } else {\n    array = new Uint8Array(array, byteOffset, length)\n  }\n\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = array\n    that.__proto__ = Buffer.prototype\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    that = fromArrayLike(that, array)\n  }\n  return that\n}\n\nfunction fromObject (that, obj) {\n  if (Buffer.isBuffer(obj)) {\n    var len = checked(obj.length) | 0\n    that = createBuffer(that, len)\n\n    if (that.length === 0) {\n      return that\n    }\n\n    obj.copy(that, 0, 0, len)\n    return that\n  }\n\n  if (obj) {\n    if ((typeof ArrayBuffer !== 'undefined' &&\n        obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n      if (typeof obj.length !== 'number' || isnan(obj.length)) {\n        return createBuffer(that, 0)\n      }\n      return fromArrayLike(that, obj)\n    }\n\n    if (obj.type === 'Buffer' && isArray(obj.data)) {\n      return fromArrayLike(that, obj.data)\n    }\n  }\n\n  throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n  // Note: cannot use `length < kMaxLength()` here because that fails when\n  // length is NaN (which is otherwise coerced to zero.)\n  if (length >= kMaxLength()) {\n    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n                         'size: 0x' + kMaxLength().toString(16) + ' bytes')\n  }\n  return length | 0\n}\n\nfunction SlowBuffer (length) {\n  if (+length != length) { // eslint-disable-line eqeqeq\n    length = 0\n  }\n  return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n  return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n    throw new TypeError('Arguments must be Buffers')\n  }\n\n  if (a === b) return 0\n\n  var x = a.length\n  var y = b.length\n\n  for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n    if (a[i] !== b[i]) {\n      x = a[i]\n      y = b[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n  switch (String(encoding).toLowerCase()) {\n    case 'hex':\n    case 'utf8':\n    case 'utf-8':\n    case 'ascii':\n    case 'latin1':\n    case 'binary':\n    case 'base64':\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n      return true\n    default:\n      return false\n  }\n}\n\nBuffer.concat = function concat (list, length) {\n  if (!isArray(list)) {\n    throw new TypeError('\"list\" argument must be an Array of Buffers')\n  }\n\n  if (list.length === 0) {\n    return Buffer.alloc(0)\n  }\n\n  var i\n  if (length === undefined) {\n    length = 0\n    for (i = 0; i < list.length; ++i) {\n      length += list[i].length\n    }\n  }\n\n  var buffer = Buffer.allocUnsafe(length)\n  var pos = 0\n  for (i = 0; i < list.length; ++i) {\n    var buf = list[i]\n    if (!Buffer.isBuffer(buf)) {\n      throw new TypeError('\"list\" argument must be an Array of Buffers')\n    }\n    buf.copy(buffer, pos)\n    pos += buf.length\n  }\n  return buffer\n}\n\nfunction byteLength (string, encoding) {\n  if (Buffer.isBuffer(string)) {\n    return string.length\n  }\n  if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n      (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n    return string.byteLength\n  }\n  if (typeof string !== 'string') {\n    string = '' + string\n  }\n\n  var len = string.length\n  if (len === 0) return 0\n\n  // Use a for loop to avoid recursion\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return len\n      case 'utf8':\n      case 'utf-8':\n      case undefined:\n        return utf8ToBytes(string).length\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return len * 2\n      case 'hex':\n        return len >>> 1\n      case 'base64':\n        return base64ToBytes(string).length\n      default:\n        if (loweredCase) return utf8ToBytes(string).length // assume utf8\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n  var loweredCase = false\n\n  // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n  // property of a typed array.\n\n  // This behaves neither like String nor Uint8Array in that we set start/end\n  // to their upper/lower bounds if the value passed is out of range.\n  // undefined is handled specially as per ECMA-262 6th Edition,\n  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n  if (start === undefined || start < 0) {\n    start = 0\n  }\n  // Return early if start > this.length. Done here to prevent potential uint32\n  // coercion fail below.\n  if (start > this.length) {\n    return ''\n  }\n\n  if (end === undefined || end > this.length) {\n    end = this.length\n  }\n\n  if (end <= 0) {\n    return ''\n  }\n\n  // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n  end >>>= 0\n  start >>>= 0\n\n  if (end <= start) {\n    return ''\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  while (true) {\n    switch (encoding) {\n      case 'hex':\n        return hexSlice(this, start, end)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Slice(this, start, end)\n\n      case 'ascii':\n        return asciiSlice(this, start, end)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Slice(this, start, end)\n\n      case 'base64':\n        return base64Slice(this, start, end)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return utf16leSlice(this, start, end)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = (encoding + '').toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n  var i = b[n]\n  b[n] = b[m]\n  b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n  var len = this.length\n  if (len % 2 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 16-bits')\n  }\n  for (var i = 0; i < len; i += 2) {\n    swap(this, i, i + 1)\n  }\n  return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n  var len = this.length\n  if (len % 4 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 32-bits')\n  }\n  for (var i = 0; i < len; i += 4) {\n    swap(this, i, i + 3)\n    swap(this, i + 1, i + 2)\n  }\n  return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n  var len = this.length\n  if (len % 8 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 64-bits')\n  }\n  for (var i = 0; i < len; i += 8) {\n    swap(this, i, i + 7)\n    swap(this, i + 1, i + 6)\n    swap(this, i + 2, i + 5)\n    swap(this, i + 3, i + 4)\n  }\n  return this\n}\n\nBuffer.prototype.toString = function toString () {\n  var length = this.length | 0\n  if (length === 0) return ''\n  if (arguments.length === 0) return utf8Slice(this, 0, length)\n  return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n  if (this === b) return true\n  return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n  var str = ''\n  var max = exports.INSPECT_MAX_BYTES\n  if (this.length > 0) {\n    str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n    if (this.length > max) str += ' ... '\n  }\n  return '<Buffer ' + str + '>'\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n  if (!Buffer.isBuffer(target)) {\n    throw new TypeError('Argument must be a Buffer')\n  }\n\n  if (start === undefined) {\n    start = 0\n  }\n  if (end === undefined) {\n    end = target ? target.length : 0\n  }\n  if (thisStart === undefined) {\n    thisStart = 0\n  }\n  if (thisEnd === undefined) {\n    thisEnd = this.length\n  }\n\n  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n    throw new RangeError('out of range index')\n  }\n\n  if (thisStart >= thisEnd && start >= end) {\n    return 0\n  }\n  if (thisStart >= thisEnd) {\n    return -1\n  }\n  if (start >= end) {\n    return 1\n  }\n\n  start >>>= 0\n  end >>>= 0\n  thisStart >>>= 0\n  thisEnd >>>= 0\n\n  if (this === target) return 0\n\n  var x = thisEnd - thisStart\n  var y = end - start\n  var len = Math.min(x, y)\n\n  var thisCopy = this.slice(thisStart, thisEnd)\n  var targetCopy = target.slice(start, end)\n\n  for (var i = 0; i < len; ++i) {\n    if (thisCopy[i] !== targetCopy[i]) {\n      x = thisCopy[i]\n      y = targetCopy[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n  // Empty buffer means no match\n  if (buffer.length === 0) return -1\n\n  // Normalize byteOffset\n  if (typeof byteOffset === 'string') {\n    encoding = byteOffset\n    byteOffset = 0\n  } else if (byteOffset > 0x7fffffff) {\n    byteOffset = 0x7fffffff\n  } else if (byteOffset < -0x80000000) {\n    byteOffset = -0x80000000\n  }\n  byteOffset = +byteOffset  // Coerce to Number.\n  if (isNaN(byteOffset)) {\n    // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n    byteOffset = dir ? 0 : (buffer.length - 1)\n  }\n\n  // Normalize byteOffset: negative offsets start from the end of the buffer\n  if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n  if (byteOffset >= buffer.length) {\n    if (dir) return -1\n    else byteOffset = buffer.length - 1\n  } else if (byteOffset < 0) {\n    if (dir) byteOffset = 0\n    else return -1\n  }\n\n  // Normalize val\n  if (typeof val === 'string') {\n    val = Buffer.from(val, encoding)\n  }\n\n  // Finally, search either indexOf (if dir is true) or lastIndexOf\n  if (Buffer.isBuffer(val)) {\n    // Special case: looking for empty string/buffer always fails\n    if (val.length === 0) {\n      return -1\n    }\n    return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n  } else if (typeof val === 'number') {\n    val = val & 0xFF // Search for a byte value [0-255]\n    if (Buffer.TYPED_ARRAY_SUPPORT &&\n        typeof Uint8Array.prototype.indexOf === 'function') {\n      if (dir) {\n        return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n      } else {\n        return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n      }\n    }\n    return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n  }\n\n  throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n  var indexSize = 1\n  var arrLength = arr.length\n  var valLength = val.length\n\n  if (encoding !== undefined) {\n    encoding = String(encoding).toLowerCase()\n    if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n        encoding === 'utf16le' || encoding === 'utf-16le') {\n      if (arr.length < 2 || val.length < 2) {\n        return -1\n      }\n      indexSize = 2\n      arrLength /= 2\n      valLength /= 2\n      byteOffset /= 2\n    }\n  }\n\n  function read (buf, i) {\n    if (indexSize === 1) {\n      return buf[i]\n    } else {\n      return buf.readUInt16BE(i * indexSize)\n    }\n  }\n\n  var i\n  if (dir) {\n    var foundIndex = -1\n    for (i = byteOffset; i < arrLength; i++) {\n      if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n        if (foundIndex === -1) foundIndex = i\n        if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n      } else {\n        if (foundIndex !== -1) i -= i - foundIndex\n        foundIndex = -1\n      }\n    }\n  } else {\n    if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n    for (i = byteOffset; i >= 0; i--) {\n      var found = true\n      for (var j = 0; j < valLength; j++) {\n        if (read(arr, i + j) !== read(val, j)) {\n          found = false\n          break\n        }\n      }\n      if (found) return i\n    }\n  }\n\n  return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n  return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n  offset = Number(offset) || 0\n  var remaining = buf.length - offset\n  if (!length) {\n    length = remaining\n  } else {\n    length = Number(length)\n    if (length > remaining) {\n      length = remaining\n    }\n  }\n\n  // must be an even number of digits\n  var strLen = string.length\n  if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n  if (length > strLen / 2) {\n    length = strLen / 2\n  }\n  for (var i = 0; i < length; ++i) {\n    var parsed = parseInt(string.substr(i * 2, 2), 16)\n    if (isNaN(parsed)) return i\n    buf[offset + i] = parsed\n  }\n  return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n  return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n  return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n  return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n  // Buffer#write(string)\n  if (offset === undefined) {\n    encoding = 'utf8'\n    length = this.length\n    offset = 0\n  // Buffer#write(string, encoding)\n  } else if (length === undefined && typeof offset === 'string') {\n    encoding = offset\n    length = this.length\n    offset = 0\n  // Buffer#write(string, offset[, length][, encoding])\n  } else if (isFinite(offset)) {\n    offset = offset | 0\n    if (isFinite(length)) {\n      length = length | 0\n      if (encoding === undefined) encoding = 'utf8'\n    } else {\n      encoding = length\n      length = undefined\n    }\n  // legacy write(string, encoding, offset, length) - remove in v0.13\n  } else {\n    throw new Error(\n      'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n    )\n  }\n\n  var remaining = this.length - offset\n  if (length === undefined || length > remaining) length = remaining\n\n  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n    throw new RangeError('Attempt to write outside buffer bounds')\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'hex':\n        return hexWrite(this, string, offset, length)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Write(this, string, offset, length)\n\n      case 'ascii':\n        return asciiWrite(this, string, offset, length)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Write(this, string, offset, length)\n\n      case 'base64':\n        // Warning: maxLength not taken into account in base64Write\n        return base64Write(this, string, offset, length)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return ucs2Write(this, string, offset, length)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n  return {\n    type: 'Buffer',\n    data: Array.prototype.slice.call(this._arr || this, 0)\n  }\n}\n\nfunction base64Slice (buf, start, end) {\n  if (start === 0 && end === buf.length) {\n    return base64.fromByteArray(buf)\n  } else {\n    return base64.fromByteArray(buf.slice(start, end))\n  }\n}\n\nfunction utf8Slice (buf, start, end) {\n  end = Math.min(buf.length, end)\n  var res = []\n\n  var i = start\n  while (i < end) {\n    var firstByte = buf[i]\n    var codePoint = null\n    var bytesPerSequence = (firstByte > 0xEF) ? 4\n      : (firstByte > 0xDF) ? 3\n      : (firstByte > 0xBF) ? 2\n      : 1\n\n    if (i + bytesPerSequence <= end) {\n      var secondByte, thirdByte, fourthByte, tempCodePoint\n\n      switch (bytesPerSequence) {\n        case 1:\n          if (firstByte < 0x80) {\n            codePoint = firstByte\n          }\n          break\n        case 2:\n          secondByte = buf[i + 1]\n          if ((secondByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n            if (tempCodePoint > 0x7F) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 3:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 4:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          fourthByte = buf[i + 3]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n              codePoint = tempCodePoint\n            }\n          }\n      }\n    }\n\n    if (codePoint === null) {\n      // we did not generate a valid codePoint so insert a\n      // replacement char (U+FFFD) and advance only 1 byte\n      codePoint = 0xFFFD\n      bytesPerSequence = 1\n    } else if (codePoint > 0xFFFF) {\n      // encode to utf16 (surrogate pair dance)\n      codePoint -= 0x10000\n      res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n      codePoint = 0xDC00 | codePoint & 0x3FF\n    }\n\n    res.push(codePoint)\n    i += bytesPerSequence\n  }\n\n  return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n  var len = codePoints.length\n  if (len <= MAX_ARGUMENTS_LENGTH) {\n    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n  }\n\n  // Decode in chunks to avoid \"call stack size exceeded\".\n  var res = ''\n  var i = 0\n  while (i < len) {\n    res += String.fromCharCode.apply(\n      String,\n      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n    )\n  }\n  return res\n}\n\nfunction asciiSlice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i] & 0x7F)\n  }\n  return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i])\n  }\n  return ret\n}\n\nfunction hexSlice (buf, start, end) {\n  var len = buf.length\n\n  if (!start || start < 0) start = 0\n  if (!end || end < 0 || end > len) end = len\n\n  var out = ''\n  for (var i = start; i < end; ++i) {\n    out += toHex(buf[i])\n  }\n  return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n  var bytes = buf.slice(start, end)\n  var res = ''\n  for (var i = 0; i < bytes.length; i += 2) {\n    res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n  }\n  return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n  var len = this.length\n  start = ~~start\n  end = end === undefined ? len : ~~end\n\n  if (start < 0) {\n    start += len\n    if (start < 0) start = 0\n  } else if (start > len) {\n    start = len\n  }\n\n  if (end < 0) {\n    end += len\n    if (end < 0) end = 0\n  } else if (end > len) {\n    end = len\n  }\n\n  if (end < start) end = start\n\n  var newBuf\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    newBuf = this.subarray(start, end)\n    newBuf.__proto__ = Buffer.prototype\n  } else {\n    var sliceLen = end - start\n    newBuf = new Buffer(sliceLen, undefined)\n    for (var i = 0; i < sliceLen; ++i) {\n      newBuf[i] = this[i + start]\n    }\n  }\n\n  return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    checkOffset(offset, byteLength, this.length)\n  }\n\n  var val = this[offset + --byteLength]\n  var mul = 1\n  while (byteLength > 0 && (mul *= 0x100)) {\n    val += this[offset + --byteLength] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return ((this[offset]) |\n      (this[offset + 1] << 8) |\n      (this[offset + 2] << 16)) +\n      (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] * 0x1000000) +\n    ((this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var i = byteLength\n  var mul = 1\n  var val = this[offset + --i]\n  while (i > 0 && (mul *= 0x100)) {\n    val += this[offset + --i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  if (!(this[offset] & 0x80)) return (this[offset])\n  return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset] | (this[offset + 1] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset + 1] | (this[offset] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset]) |\n    (this[offset + 1] << 8) |\n    (this[offset + 2] << 16) |\n    (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] << 24) |\n    (this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n  if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n  if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var mul = 1\n  var i = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffff + value + 1\n  for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n    buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n      (littleEndian ? i : 1 - i) * 8\n  }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n  } else {\n    objectWriteUInt16(this, value, offset, true)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 8)\n    this[offset + 1] = (value & 0xff)\n  } else {\n    objectWriteUInt16(this, value, offset, false)\n  }\n  return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffffffff + value + 1\n  for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n    buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n  }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset + 3] = (value >>> 24)\n    this[offset + 2] = (value >>> 16)\n    this[offset + 1] = (value >>> 8)\n    this[offset] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, true)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 24)\n    this[offset + 1] = (value >>> 16)\n    this[offset + 2] = (value >>> 8)\n    this[offset + 3] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, false)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = 0\n  var mul = 1\n  var sub = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  var sub = 0\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n  if (value < 0) value = 0xff + value + 1\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n  } else {\n    objectWriteUInt16(this, value, offset, true)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 8)\n    this[offset + 1] = (value & 0xff)\n  } else {\n    objectWriteUInt16(this, value, offset, false)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n    this[offset + 2] = (value >>> 16)\n    this[offset + 3] = (value >>> 24)\n  } else {\n    objectWriteUInt32(this, value, offset, true)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (value < 0) value = 0xffffffff + value + 1\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 24)\n    this[offset + 1] = (value >>> 16)\n    this[offset + 2] = (value >>> 8)\n    this[offset + 3] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, false)\n  }\n  return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n  if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 23, 4)\n  return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 52, 8)\n  return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n  if (!start) start = 0\n  if (!end && end !== 0) end = this.length\n  if (targetStart >= target.length) targetStart = target.length\n  if (!targetStart) targetStart = 0\n  if (end > 0 && end < start) end = start\n\n  // Copy 0 bytes; we're done\n  if (end === start) return 0\n  if (target.length === 0 || this.length === 0) return 0\n\n  // Fatal error conditions\n  if (targetStart < 0) {\n    throw new RangeError('targetStart out of bounds')\n  }\n  if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n  if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n  // Are we oob?\n  if (end > this.length) end = this.length\n  if (target.length - targetStart < end - start) {\n    end = target.length - targetStart + start\n  }\n\n  var len = end - start\n  var i\n\n  if (this === target && start < targetStart && targetStart < end) {\n    // descending copy from end\n    for (i = len - 1; i >= 0; --i) {\n      target[i + targetStart] = this[i + start]\n    }\n  } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n    // ascending copy from start\n    for (i = 0; i < len; ++i) {\n      target[i + targetStart] = this[i + start]\n    }\n  } else {\n    Uint8Array.prototype.set.call(\n      target,\n      this.subarray(start, start + len),\n      targetStart\n    )\n  }\n\n  return len\n}\n\n// Usage:\n//    buffer.fill(number[, offset[, end]])\n//    buffer.fill(buffer[, offset[, end]])\n//    buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n  // Handle string cases:\n  if (typeof val === 'string') {\n    if (typeof start === 'string') {\n      encoding = start\n      start = 0\n      end = this.length\n    } else if (typeof end === 'string') {\n      encoding = end\n      end = this.length\n    }\n    if (val.length === 1) {\n      var code = val.charCodeAt(0)\n      if (code < 256) {\n        val = code\n      }\n    }\n    if (encoding !== undefined && typeof encoding !== 'string') {\n      throw new TypeError('encoding must be a string')\n    }\n    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n      throw new TypeError('Unknown encoding: ' + encoding)\n    }\n  } else if (typeof val === 'number') {\n    val = val & 255\n  }\n\n  // Invalid ranges are not set to a default, so can range check early.\n  if (start < 0 || this.length < start || this.length < end) {\n    throw new RangeError('Out of range index')\n  }\n\n  if (end <= start) {\n    return this\n  }\n\n  start = start >>> 0\n  end = end === undefined ? this.length : end >>> 0\n\n  if (!val) val = 0\n\n  var i\n  if (typeof val === 'number') {\n    for (i = start; i < end; ++i) {\n      this[i] = val\n    }\n  } else {\n    var bytes = Buffer.isBuffer(val)\n      ? val\n      : utf8ToBytes(new Buffer(val, encoding).toString())\n    var len = bytes.length\n    for (i = 0; i < end - start; ++i) {\n      this[i + start] = bytes[i % len]\n    }\n  }\n\n  return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n  // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n  str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n  // Node converts strings with length < 2 to ''\n  if (str.length < 2) return ''\n  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n  while (str.length % 4 !== 0) {\n    str = str + '='\n  }\n  return str\n}\n\nfunction stringtrim (str) {\n  if (str.trim) return str.trim()\n  return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n  if (n < 16) return '0' + n.toString(16)\n  return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n  units = units || Infinity\n  var codePoint\n  var length = string.length\n  var leadSurrogate = null\n  var bytes = []\n\n  for (var i = 0; i < length; ++i) {\n    codePoint = string.charCodeAt(i)\n\n    // is surrogate component\n    if (codePoint > 0xD7FF && codePoint < 0xE000) {\n      // last char was a lead\n      if (!leadSurrogate) {\n        // no lead yet\n        if (codePoint > 0xDBFF) {\n          // unexpected trail\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        } else if (i + 1 === length) {\n          // unpaired lead\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        }\n\n        // valid lead\n        leadSurrogate = codePoint\n\n        continue\n      }\n\n      // 2 leads in a row\n      if (codePoint < 0xDC00) {\n        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n        leadSurrogate = codePoint\n        continue\n      }\n\n      // valid surrogate pair\n      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n    } else if (leadSurrogate) {\n      // valid bmp char, but last char was a lead\n      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n    }\n\n    leadSurrogate = null\n\n    // encode utf8\n    if (codePoint < 0x80) {\n      if ((units -= 1) < 0) break\n      bytes.push(codePoint)\n    } else if (codePoint < 0x800) {\n      if ((units -= 2) < 0) break\n      bytes.push(\n        codePoint >> 0x6 | 0xC0,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x10000) {\n      if ((units -= 3) < 0) break\n      bytes.push(\n        codePoint >> 0xC | 0xE0,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x110000) {\n      if ((units -= 4) < 0) break\n      bytes.push(\n        codePoint >> 0x12 | 0xF0,\n        codePoint >> 0xC & 0x3F | 0x80,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else {\n      throw new Error('Invalid code point')\n    }\n  }\n\n  return bytes\n}\n\nfunction asciiToBytes (str) {\n  var byteArray = []\n  for (var i = 0; i < str.length; ++i) {\n    // Node's code seems to be doing this and not & 0x7F..\n    byteArray.push(str.charCodeAt(i) & 0xFF)\n  }\n  return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n  var c, hi, lo\n  var byteArray = []\n  for (var i = 0; i < str.length; ++i) {\n    if ((units -= 2) < 0) break\n\n    c = str.charCodeAt(i)\n    hi = c >> 8\n    lo = c % 256\n    byteArray.push(lo)\n    byteArray.push(hi)\n  }\n\n  return byteArray\n}\n\nfunction base64ToBytes (str) {\n  return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n  for (var i = 0; i < length; ++i) {\n    if ((i + offset >= dst.length) || (i >= src.length)) break\n    dst[i + offset] = src[i]\n  }\n  return i\n}\n\nfunction isnan (val) {\n  return val !== val // eslint-disable-line no-self-compare\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/buffer/index.js","'use strict';\n\n// Note: adler32 takes 12% for level 0 and 2% for level 6.\n// It isn't worth it to make additional optimizations as in original.\n// Small size is preferable.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction adler32(adler, buf, len, pos) {\n  var s1 = (adler & 0xffff) |0,\n      s2 = ((adler >>> 16) & 0xffff) |0,\n      n = 0;\n\n  while (len !== 0) {\n    // Set limit ~ twice less than 5552, to keep\n    // s2 in 31-bits, because we force signed ints.\n    // in other case %= will fail.\n    n = len > 2000 ? 2000 : len;\n    len -= n;\n\n    do {\n      s1 = (s1 + buf[pos++]) |0;\n      s2 = (s2 + s1) |0;\n    } while (--n);\n\n    s1 %= 65521;\n    s2 %= 65521;\n  }\n\n  return (s1 | (s2 << 16)) |0;\n}\n\n\nmodule.exports = adler32;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/pako/lib/zlib/adler32.js","'use strict';\n\n// Note: we can't get significant speed boost here.\n// So write code to minimize size - no pregenerated tables\n// and array tools dependencies.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// Use ordinary array, since untyped makes no boost here\nfunction makeTable() {\n  var c, table = [];\n\n  for (var n = 0; n < 256; n++) {\n    c = n;\n    for (var k = 0; k < 8; k++) {\n      c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n    }\n    table[n] = c;\n  }\n\n  return table;\n}\n\n// Create table on load. Just 255 signed longs. Not a problem.\nvar crcTable = makeTable();\n\n\nfunction crc32(crc, buf, len, pos) {\n  var t = crcTable,\n      end = pos + len;\n\n  crc ^= -1;\n\n  for (var i = pos; i < end; i++) {\n    crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];\n  }\n\n  return (crc ^ (-1)); // >>> 0;\n}\n\n\nmodule.exports = crc32;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/pako/lib/zlib/crc32.js","// String encode/decode helpers\n'use strict';\n\n\nvar utils = require('./common');\n\n\n// Quick check if we can use fast array to bin string conversion\n//\n// - apply(Array) can fail on Android 2.2\n// - apply(Uint8Array) can fail on iOS 5.1 Safari\n//\nvar STR_APPLY_OK = true;\nvar STR_APPLY_UIA_OK = true;\n\ntry { String.fromCharCode.apply(null, [ 0 ]); } catch (__) { STR_APPLY_OK = false; }\ntry { String.fromCharCode.apply(null, new Uint8Array(1)); } catch (__) { STR_APPLY_UIA_OK = false; }\n\n\n// Table with utf8 lengths (calculated by first byte of sequence)\n// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,\n// because max possible codepoint is 0x10ffff\nvar _utf8len = new utils.Buf8(256);\nfor (var q = 0; q < 256; q++) {\n  _utf8len[q] = (q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1);\n}\n_utf8len[254] = _utf8len[254] = 1; // Invalid sequence start\n\n\n// convert string to array (typed, when possible)\nexports.string2buf = function (str) {\n  var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;\n\n  // count binary size\n  for (m_pos = 0; m_pos < str_len; m_pos++) {\n    c = str.charCodeAt(m_pos);\n    if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n      c2 = str.charCodeAt(m_pos + 1);\n      if ((c2 & 0xfc00) === 0xdc00) {\n        c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n        m_pos++;\n      }\n    }\n    buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;\n  }\n\n  // allocate buffer\n  buf = new utils.Buf8(buf_len);\n\n  // convert\n  for (i = 0, m_pos = 0; i < buf_len; m_pos++) {\n    c = str.charCodeAt(m_pos);\n    if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n      c2 = str.charCodeAt(m_pos + 1);\n      if ((c2 & 0xfc00) === 0xdc00) {\n        c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n        m_pos++;\n      }\n    }\n    if (c < 0x80) {\n      /* one byte */\n      buf[i++] = c;\n    } else if (c < 0x800) {\n      /* two bytes */\n      buf[i++] = 0xC0 | (c >>> 6);\n      buf[i++] = 0x80 | (c & 0x3f);\n    } else if (c < 0x10000) {\n      /* three bytes */\n      buf[i++] = 0xE0 | (c >>> 12);\n      buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n      buf[i++] = 0x80 | (c & 0x3f);\n    } else {\n      /* four bytes */\n      buf[i++] = 0xf0 | (c >>> 18);\n      buf[i++] = 0x80 | (c >>> 12 & 0x3f);\n      buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n      buf[i++] = 0x80 | (c & 0x3f);\n    }\n  }\n\n  return buf;\n};\n\n// Helper (used in 2 places)\nfunction buf2binstring(buf, len) {\n  // use fallback for big arrays to avoid stack overflow\n  if (len < 65537) {\n    if ((buf.subarray && STR_APPLY_UIA_OK) || (!buf.subarray && STR_APPLY_OK)) {\n      return String.fromCharCode.apply(null, utils.shrinkBuf(buf, len));\n    }\n  }\n\n  var result = '';\n  for (var i = 0; i < len; i++) {\n    result += String.fromCharCode(buf[i]);\n  }\n  return result;\n}\n\n\n// Convert byte array to binary string\nexports.buf2binstring = function (buf) {\n  return buf2binstring(buf, buf.length);\n};\n\n\n// Convert binary string (typed, when possible)\nexports.binstring2buf = function (str) {\n  var buf = new utils.Buf8(str.length);\n  for (var i = 0, len = buf.length; i < len; i++) {\n    buf[i] = str.charCodeAt(i);\n  }\n  return buf;\n};\n\n\n// convert array to string\nexports.buf2string = function (buf, max) {\n  var i, out, c, c_len;\n  var len = max || buf.length;\n\n  // Reserve max possible length (2 words per char)\n  // NB: by unknown reasons, Array is significantly faster for\n  //     String.fromCharCode.apply than Uint16Array.\n  var utf16buf = new Array(len * 2);\n\n  for (out = 0, i = 0; i < len;) {\n    c = buf[i++];\n    // quick process ascii\n    if (c < 0x80) { utf16buf[out++] = c; continue; }\n\n    c_len = _utf8len[c];\n    // skip 5 & 6 byte codes\n    if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len - 1; continue; }\n\n    // apply mask on first byte\n    c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;\n    // join the rest\n    while (c_len > 1 && i < len) {\n      c = (c << 6) | (buf[i++] & 0x3f);\n      c_len--;\n    }\n\n    // terminated by end of string?\n    if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }\n\n    if (c < 0x10000) {\n      utf16buf[out++] = c;\n    } else {\n      c -= 0x10000;\n      utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);\n      utf16buf[out++] = 0xdc00 | (c & 0x3ff);\n    }\n  }\n\n  return buf2binstring(utf16buf, out);\n};\n\n\n// Calculate max possible position in utf8 buffer,\n// that will not break sequence. If that's not possible\n// - (very small limits) return max size as is.\n//\n// buf[] - utf8 bytes array\n// max   - length limit (mandatory);\nexports.utf8border = function (buf, max) {\n  var pos;\n\n  max = max || buf.length;\n  if (max > buf.length) { max = buf.length; }\n\n  // go back from last position, until start of sequence found\n  pos = max - 1;\n  while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }\n\n  // Very small and broken sequence,\n  // return max, because we should return something anyway.\n  if (pos < 0) { return max; }\n\n  // If we came to start of buffer - that means buffer is too small,\n  // return max too.\n  if (pos === 0) { return max; }\n\n  return (pos + _utf8len[buf[pos]] > max) ? pos : max;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/pako/lib/utils/strings.js","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction ZStream() {\n  /* next input byte */\n  this.input = null; // JS specific, because we have no pointers\n  this.next_in = 0;\n  /* number of bytes available at input */\n  this.avail_in = 0;\n  /* total number of input bytes read so far */\n  this.total_in = 0;\n  /* next output byte should be put there */\n  this.output = null; // JS specific, because we have no pointers\n  this.next_out = 0;\n  /* remaining free space at output */\n  this.avail_out = 0;\n  /* total number of bytes output so far */\n  this.total_out = 0;\n  /* last error message, NULL if no error */\n  this.msg = ''/*Z_NULL*/;\n  /* not visible by applications */\n  this.state = null;\n  /* best guess about the data type: binary or text */\n  this.data_type = 2/*Z_UNKNOWN*/;\n  /* adler32 value of the uncompressed data */\n  this.adler = 0;\n}\n\nmodule.exports = ZStream;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/pako/lib/zlib/zstream.js","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n\n  /* Allowed flush values; see deflate() and inflate() below for details */\n  Z_NO_FLUSH:         0,\n  Z_PARTIAL_FLUSH:    1,\n  Z_SYNC_FLUSH:       2,\n  Z_FULL_FLUSH:       3,\n  Z_FINISH:           4,\n  Z_BLOCK:            5,\n  Z_TREES:            6,\n\n  /* Return codes for the compression/decompression functions. Negative values\n  * are errors, positive values are used for special but normal events.\n  */\n  Z_OK:               0,\n  Z_STREAM_END:       1,\n  Z_NEED_DICT:        2,\n  Z_ERRNO:           -1,\n  Z_STREAM_ERROR:    -2,\n  Z_DATA_ERROR:      -3,\n  //Z_MEM_ERROR:     -4,\n  Z_BUF_ERROR:       -5,\n  //Z_VERSION_ERROR: -6,\n\n  /* compression levels */\n  Z_NO_COMPRESSION:         0,\n  Z_BEST_SPEED:             1,\n  Z_BEST_COMPRESSION:       9,\n  Z_DEFAULT_COMPRESSION:   -1,\n\n\n  Z_FILTERED:               1,\n  Z_HUFFMAN_ONLY:           2,\n  Z_RLE:                    3,\n  Z_FIXED:                  4,\n  Z_DEFAULT_STRATEGY:       0,\n\n  /* Possible values of the data_type field (though see inflate()) */\n  Z_BINARY:                 0,\n  Z_TEXT:                   1,\n  //Z_ASCII:                1, // = Z_TEXT (deprecated)\n  Z_UNKNOWN:                2,\n\n  /* The deflate compression method */\n  Z_DEFLATED:               8\n  //Z_NULL:                 null // Use -1 or null inline, depending on var type\n};\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/pako/lib/zlib/constants.js","'use strict';\nexports.LOCAL_FILE_HEADER = \"PK\\x03\\x04\";\nexports.CENTRAL_FILE_HEADER = \"PK\\x01\\x02\";\nexports.CENTRAL_DIRECTORY_END = \"PK\\x05\\x06\";\nexports.ZIP64_CENTRAL_DIRECTORY_LOCATOR = \"PK\\x06\\x07\";\nexports.ZIP64_CENTRAL_DIRECTORY_END = \"PK\\x06\\x06\";\nexports.DATA_DESCRIPTOR = \"PK\\x07\\x08\";\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/jszip/lib/signature.js","'use strict';\nexports.base64 = false;\nexports.binary = false;\nexports.dir = false;\nexports.createFolders = false;\nexports.date = null;\nexports.compression = null;\nexports.compressionOptions = null;\nexports.comment = null;\nexports.unixPermissions = null;\nexports.dosPermissions = null;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/jszip/lib/defaults.js","'use strict';\nfunction CompressedObject() {\n    this.compressedSize = 0;\n    this.uncompressedSize = 0;\n    this.crc32 = 0;\n    this.compressionMethod = null;\n    this.compressedContent = null;\n}\n\nCompressedObject.prototype = {\n    /**\n     * Return the decompressed content in an unspecified format.\n     * The format will depend on the decompressor.\n     * @return {Object} the decompressed content.\n     */\n    getContent: function() {\n        return null; // see implementation\n    },\n    /**\n     * Return the compressed content in an unspecified format.\n     * The format will depend on the compressed conten source.\n     * @return {Object} the compressed content.\n     */\n    getCompressedContent: function() {\n        return null; // see implementation\n    }\n};\nmodule.exports = CompressedObject;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/jszip/lib/compressedObject.js","'use strict';\n\nvar utils = require('./utils');\nvar support = require('./support');\nvar nodeBuffer = require('./nodeBuffer');\n\n/**\n * The following functions come from pako, from pako/lib/utils/strings\n * released under the MIT license, see pako https://github.com/nodeca/pako/\n */\n\n// Table with utf8 lengths (calculated by first byte of sequence)\n// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,\n// because max possible codepoint is 0x10ffff\nvar _utf8len = new Array(256);\nfor (var i=0; i<256; i++) {\n  _utf8len[i] = (i >= 252 ? 6 : i >= 248 ? 5 : i >= 240 ? 4 : i >= 224 ? 3 : i >= 192 ? 2 : 1);\n}\n_utf8len[254]=_utf8len[254]=1; // Invalid sequence start\n\n// convert string to array (typed, when possible)\nvar string2buf = function (str) {\n    var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;\n\n    // count binary size\n    for (m_pos = 0; m_pos < str_len; m_pos++) {\n        c = str.charCodeAt(m_pos);\n        if ((c & 0xfc00) === 0xd800 && (m_pos+1 < str_len)) {\n            c2 = str.charCodeAt(m_pos+1);\n            if ((c2 & 0xfc00) === 0xdc00) {\n                c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n                m_pos++;\n            }\n        }\n        buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;\n    }\n\n    // allocate buffer\n    if (support.uint8array) {\n        buf = new Uint8Array(buf_len);\n    } else {\n        buf = new Array(buf_len);\n    }\n\n    // convert\n    for (i=0, m_pos = 0; i < buf_len; m_pos++) {\n        c = str.charCodeAt(m_pos);\n        if ((c & 0xfc00) === 0xd800 && (m_pos+1 < str_len)) {\n            c2 = str.charCodeAt(m_pos+1);\n            if ((c2 & 0xfc00) === 0xdc00) {\n                c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n                m_pos++;\n            }\n        }\n        if (c < 0x80) {\n            /* one byte */\n            buf[i++] = c;\n        } else if (c < 0x800) {\n            /* two bytes */\n            buf[i++] = 0xC0 | (c >>> 6);\n            buf[i++] = 0x80 | (c & 0x3f);\n        } else if (c < 0x10000) {\n            /* three bytes */\n            buf[i++] = 0xE0 | (c >>> 12);\n            buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n            buf[i++] = 0x80 | (c & 0x3f);\n        } else {\n            /* four bytes */\n            buf[i++] = 0xf0 | (c >>> 18);\n            buf[i++] = 0x80 | (c >>> 12 & 0x3f);\n            buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n            buf[i++] = 0x80 | (c & 0x3f);\n        }\n    }\n\n    return buf;\n};\n\n// Calculate max possible position in utf8 buffer,\n// that will not break sequence. If that's not possible\n// - (very small limits) return max size as is.\n//\n// buf[] - utf8 bytes array\n// max   - length limit (mandatory);\nvar utf8border = function(buf, max) {\n    var pos;\n\n    max = max || buf.length;\n    if (max > buf.length) { max = buf.length; }\n\n    // go back from last position, until start of sequence found\n    pos = max-1;\n    while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }\n\n    // Fuckup - very small and broken sequence,\n    // return max, because we should return something anyway.\n    if (pos < 0) { return max; }\n\n    // If we came to start of buffer - that means vuffer is too small,\n    // return max too.\n    if (pos === 0) { return max; }\n\n    return (pos + _utf8len[buf[pos]] > max) ? pos : max;\n};\n\n// convert array to string\nvar buf2string = function (buf) {\n    var str, i, out, c, c_len;\n    var len = buf.length;\n\n    // Reserve max possible length (2 words per char)\n    // NB: by unknown reasons, Array is significantly faster for\n    //     String.fromCharCode.apply than Uint16Array.\n    var utf16buf = new Array(len*2);\n\n    for (out=0, i=0; i<len;) {\n        c = buf[i++];\n        // quick process ascii\n        if (c < 0x80) { utf16buf[out++] = c; continue; }\n\n        c_len = _utf8len[c];\n        // skip 5 & 6 byte codes\n        if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len-1; continue; }\n\n        // apply mask on first byte\n        c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;\n        // join the rest\n        while (c_len > 1 && i < len) {\n            c = (c << 6) | (buf[i++] & 0x3f);\n            c_len--;\n        }\n\n        // terminated by end of string?\n        if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }\n\n        if (c < 0x10000) {\n            utf16buf[out++] = c;\n        } else {\n            c -= 0x10000;\n            utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);\n            utf16buf[out++] = 0xdc00 | (c & 0x3ff);\n        }\n    }\n\n    // shrinkBuf(utf16buf, out)\n    if (utf16buf.length !== out) {\n        if(utf16buf.subarray) {\n            utf16buf = utf16buf.subarray(0, out);\n        } else {\n            utf16buf.length = out;\n        }\n    }\n\n    // return String.fromCharCode.apply(null, utf16buf);\n    return utils.applyFromCharCode(utf16buf);\n};\n\n\n// That's all for the pako functions.\n\n\n/**\n * Transform a javascript string into an array (typed if possible) of bytes,\n * UTF-8 encoded.\n * @param {String} str the string to encode\n * @return {Array|Uint8Array|Buffer} the UTF-8 encoded string.\n */\nexports.utf8encode = function utf8encode(str) {\n    if (support.nodebuffer) {\n        return nodeBuffer(str, \"utf-8\");\n    }\n\n    return string2buf(str);\n};\n\n\n/**\n * Transform a bytes array (or a representation) representing an UTF-8 encoded\n * string into a javascript string.\n * @param {Array|Uint8Array|Buffer} buf the data de decode\n * @return {String} the decoded string.\n */\nexports.utf8decode = function utf8decode(buf) {\n    if (support.nodebuffer) {\n        return utils.transformTo(\"nodebuffer\", buf).toString(\"utf-8\");\n    }\n\n    buf = utils.transformTo(support.uint8array ? \"uint8array\" : \"array\", buf);\n\n    // return buf2string(buf);\n    // Chrome prefers to work with \"small\" chunks of data\n    // for the method buf2string.\n    // Firefox and Chrome has their own shortcut, IE doesn't seem to really care.\n    var result = [], k = 0, len = buf.length, chunk = 65536;\n    while (k < len) {\n        var nextBoundary = utf8border(buf, Math.min(k + chunk, len));\n        if (support.uint8array) {\n            result.push(buf2string(buf.subarray(k, nextBoundary)));\n        } else {\n            result.push(buf2string(buf.slice(k, nextBoundary)));\n        }\n        k = nextBoundary;\n    }\n    return result.join(\"\");\n\n};\n// vim: set shiftwidth=4 softtabstop=4:\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/jszip/lib/utf8.js","'use strict';\nvar DataReader = require('./dataReader');\nvar utils = require('./utils');\n\nfunction StringReader(data, optimizedBinaryString) {\n    this.data = data;\n    if (!optimizedBinaryString) {\n        this.data = utils.string2binary(this.data);\n    }\n    this.length = this.data.length;\n    this.index = 0;\n    this.zero = 0;\n}\nStringReader.prototype = new DataReader();\n/**\n * @see DataReader.byteAt\n */\nStringReader.prototype.byteAt = function(i) {\n    return this.data.charCodeAt(this.zero + i);\n};\n/**\n * @see DataReader.lastIndexOfSignature\n */\nStringReader.prototype.lastIndexOfSignature = function(sig) {\n    return this.data.lastIndexOf(sig) - this.zero;\n};\n/**\n * @see DataReader.readData\n */\nStringReader.prototype.readData = function(size) {\n    this.checkOffset(size);\n    // this will work because the constructor applied the \"& 0xff\" mask.\n    var result = this.data.slice(this.zero + this.index, this.zero + this.index + size);\n    this.index += size;\n    return result;\n};\nmodule.exports = StringReader;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/jszip/lib/stringReader.js","'use strict';\nvar utils = require('./utils');\n\nfunction DataReader(data) {\n    this.data = null; // type : see implementation\n    this.length = 0;\n    this.index = 0;\n    this.zero = 0;\n}\nDataReader.prototype = {\n    /**\n     * Check that the offset will not go too far.\n     * @param {string} offset the additional offset to check.\n     * @throws {Error} an Error if the offset is out of bounds.\n     */\n    checkOffset: function(offset) {\n        this.checkIndex(this.index + offset);\n    },\n    /**\n     * Check that the specifed index will not be too far.\n     * @param {string} newIndex the index to check.\n     * @throws {Error} an Error if the index is out of bounds.\n     */\n    checkIndex: function(newIndex) {\n        if (this.length < this.zero + newIndex || newIndex < 0) {\n            throw new Error(\"End of data reached (data length = \" + this.length + \", asked index = \" + (newIndex) + \"). Corrupted zip ?\");\n        }\n    },\n    /**\n     * Change the index.\n     * @param {number} newIndex The new index.\n     * @throws {Error} if the new index is out of the data.\n     */\n    setIndex: function(newIndex) {\n        this.checkIndex(newIndex);\n        this.index = newIndex;\n    },\n    /**\n     * Skip the next n bytes.\n     * @param {number} n the number of bytes to skip.\n     * @throws {Error} if the new index is out of the data.\n     */\n    skip: function(n) {\n        this.setIndex(this.index + n);\n    },\n    /**\n     * Get the byte at the specified index.\n     * @param {number} i the index to use.\n     * @return {number} a byte.\n     */\n    byteAt: function(i) {\n        // see implementations\n    },\n    /**\n     * Get the next number with a given byte size.\n     * @param {number} size the number of bytes to read.\n     * @return {number} the corresponding number.\n     */\n    readInt: function(size) {\n        var result = 0,\n            i;\n        this.checkOffset(size);\n        for (i = this.index + size - 1; i >= this.index; i--) {\n            result = (result << 8) + this.byteAt(i);\n        }\n        this.index += size;\n        return result;\n    },\n    /**\n     * Get the next string with a given byte size.\n     * @param {number} size the number of bytes to read.\n     * @return {string} the corresponding string.\n     */\n    readString: function(size) {\n        return utils.transformTo(\"string\", this.readData(size));\n    },\n    /**\n     * Get raw data without conversion, <size> bytes.\n     * @param {number} size the number of bytes to read.\n     * @return {Object} the raw data, implementation specific.\n     */\n    readData: function(size) {\n        // see implementations\n    },\n    /**\n     * Find the last occurence of a zip signature (4 bytes).\n     * @param {string} sig the signature to find.\n     * @return {number} the index of the last occurence, -1 if not found.\n     */\n    lastIndexOfSignature: function(sig) {\n        // see implementations\n    },\n    /**\n     * Get the next date.\n     * @return {Date} the date.\n     */\n    readDate: function() {\n        var dostime = this.readInt(4);\n        return new Date(\n        ((dostime >> 25) & 0x7f) + 1980, // year\n        ((dostime >> 21) & 0x0f) - 1, // month\n        (dostime >> 16) & 0x1f, // day\n        (dostime >> 11) & 0x1f, // hour\n        (dostime >> 5) & 0x3f, // minute\n        (dostime & 0x1f) << 1); // second\n    }\n};\nmodule.exports = DataReader;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/jszip/lib/dataReader.js","'use strict';\nvar ArrayReader = require('./arrayReader');\n\nfunction Uint8ArrayReader(data) {\n    if (data) {\n        this.data = data;\n        this.length = this.data.length;\n        this.index = 0;\n        this.zero = 0;\n    }\n}\nUint8ArrayReader.prototype = new ArrayReader();\n/**\n * @see DataReader.readData\n */\nUint8ArrayReader.prototype.readData = function(size) {\n    this.checkOffset(size);\n    if(size === 0) {\n        // in IE10, when using subarray(idx, idx), we get the array [0x00] instead of [].\n        return new Uint8Array(0);\n    }\n    var result = this.data.subarray(this.zero + this.index, this.zero + this.index + size);\n    this.index += size;\n    return result;\n};\nmodule.exports = Uint8ArrayReader;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/jszip/lib/uint8ArrayReader.js","'use strict';\nvar DataReader = require('./dataReader');\n\nfunction ArrayReader(data) {\n    if (data) {\n        this.data = data;\n        this.length = this.data.length;\n        this.index = 0;\n        this.zero = 0;\n\n        for(var i = 0; i < this.data.length; i++) {\n            data[i] = data[i] & 0xFF;\n        }\n    }\n}\nArrayReader.prototype = new DataReader();\n/**\n * @see DataReader.byteAt\n */\nArrayReader.prototype.byteAt = function(i) {\n    return this.data[this.zero + i];\n};\n/**\n * @see DataReader.lastIndexOfSignature\n */\nArrayReader.prototype.lastIndexOfSignature = function(sig) {\n    var sig0 = sig.charCodeAt(0),\n        sig1 = sig.charCodeAt(1),\n        sig2 = sig.charCodeAt(2),\n        sig3 = sig.charCodeAt(3);\n    for (var i = this.length - 4; i >= 0; --i) {\n        if (this.data[i] === sig0 && this.data[i + 1] === sig1 && this.data[i + 2] === sig2 && this.data[i + 3] === sig3) {\n            return i - this.zero;\n        }\n    }\n\n    return -1;\n};\n/**\n * @see DataReader.readData\n */\nArrayReader.prototype.readData = function(size) {\n    this.checkOffset(size);\n    if(size === 0) {\n        return [];\n    }\n    var result = this.data.slice(this.zero + this.index, this.zero + this.index + size);\n    this.index += size;\n    return result;\n};\nmodule.exports = ArrayReader;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/jszip/lib/arrayReader.js","/* eslint-disable camelcase */\nexport default {\n    cdcl3: {\n        tms: [\n            {\n                proton: 'X',\n                coupling: 0,\n                multiplicity: '',\n                shift: 0\n            }\n        ],\n        solvent_residual_peak: [\n            {\n                proton: 'X',\n                coupling: 0,\n                multiplicity: 'ds',\n                shift: 7.26\n            }\n        ],\n        h2o: [\n            {\n                proton: 'H2O',\n                coupling: 0,\n                multiplicity: 'bs',\n                shift: 1.56\n            }\n        ],\n        acetic_acid: [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.1\n            }\n        ],\n        acetone: [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.17\n            }\n        ],\n        acetonitrile: [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.1\n            }\n        ],\n        benzene: [\n            {\n                proton: 'CH',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 7.36\n            }\n        ],\n        'tert-butyl_alcohol': [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 1.28\n            }\n        ],\n        'tert-butyl_methyl_ether': [\n            {\n                proton: 'CCH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 1.19\n            },\n            {\n                proton: 'OCH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.22\n            }\n        ],\n        bhtb: [\n            {\n                proton: 'ArH',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 6.98\n            },\n            {\n                proton: 'OHc',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 5.01\n            },\n            {\n                proton: 'ArCH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.27\n            },\n            {\n                proton: 'ArC(CH3)3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 1.43\n            }\n        ],\n        chloroform: [\n            {\n                proton: 'CH',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 7.26\n            }\n        ],\n        cyclohexane: [\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 1.43\n            }\n        ],\n        '1,2-dichloroethane': [\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.73\n            }\n        ],\n        dichloromethane: [\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 5.3\n            }\n        ],\n        diethyl_ether: [\n            {\n                proton: 'CH3',\n                coupling: 7,\n                multiplicity: 't',\n                shift: 1.21\n            },\n            {\n                proton: 'CH2',\n                coupling: 7,\n                multiplicity: 'q',\n                shift: 3.48\n            }\n        ],\n        diglyme: [\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 3.65\n            },\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 3.57\n            },\n            {\n                proton: 'OCH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.39\n            }\n        ],\n        '1,2-dimethoxyethane': [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.4\n            },\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.55\n            }\n        ],\n        dimethylacetamide: [\n            {\n                proton: 'CH3CO',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.09\n            },\n            {\n                proton: 'NCH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.02\n            },\n            {\n                proton: 'NCH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.94\n            }\n        ],\n        dimethylformamide: [\n            {\n                proton: 'CH',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 8.02\n            },\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.96\n            },\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.88\n            }\n        ],\n        dimethyl_sulfoxide: [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.62\n            }\n        ],\n        dioxane: [\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.71\n            }\n        ],\n        ethanol: [\n            {\n                proton: 'CH3',\n                coupling: 7,\n                multiplicity: 't',\n                shift: 1.25\n            },\n            {\n                proton: 'CH2',\n                coupling: 7,\n                multiplicity: 'q',\n                shift: 3.72\n            },\n            {\n                proton: 'OH',\n                coupling: 5,\n                multiplicity: 's,t',\n                shift: 1.32\n            }\n        ],\n        ethyl_acetate: [\n            {\n                proton: 'CH3CO',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.05\n            },\n            {\n                proton: 'CH2CH3',\n                coupling: 7,\n                multiplicity: 'q',\n                shift: 4.12\n            },\n            {\n                proton: 'CH2CH3',\n                coupling: 7,\n                multiplicity: 't',\n                shift: 1.26\n            }\n        ],\n        ethyl_methyl_ketone: [\n            {\n                proton: 'CH3CO',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.14\n            },\n            {\n                proton: 'CH2CH3',\n                coupling: 7,\n                multiplicity: 'q',\n                shift: 2.46\n            },\n            {\n                proton: 'CH2CH3',\n                coupling: 7,\n                multiplicity: 't',\n                shift: 1.06\n            }\n        ],\n        ethylene_glycol: [\n            {\n                proton: 'CH',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.76\n            }\n        ],\n        'grease^f': [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 0.86\n            },\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 'br_s',\n                shift: 1.26\n            }\n        ],\n        'n-hexane': [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 't',\n                shift: 0.88\n            },\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 1.26\n            }\n        ],\n        hmpag: [\n            {\n                proton: 'CH3',\n                coupling: 9.5,\n                multiplicity: 'd',\n                shift: 2.65\n            }\n        ],\n        methanol: [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.49\n            },\n            {\n                proton: 'OH',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 1.09\n            }\n        ],\n        nitromethane: [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 4.33\n            }\n        ],\n        'n-pentane': [\n            {\n                proton: 'CH3',\n                coupling: 7,\n                multiplicity: 't',\n                shift: 7\n            },\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 1.27\n            }\n        ],\n        '2-propanol': [\n            {\n                proton: 'CH3',\n                coupling: 6,\n                multiplicity: 'd',\n                shift: 1.22\n            },\n            {\n                proton: 'CH',\n                coupling: 6,\n                multiplicity: 'sep',\n                shift: 4.04\n            }\n        ],\n        pyridine: [\n            {\n                proton: 'CH(2)',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 8.62\n            },\n            {\n                proton: 'CH(3)',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 7.29\n            },\n            {\n                proton: 'CH(4)',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 7.68\n            }\n        ],\n        silicone_greasei: [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 0.07\n            }\n        ],\n        tetrahydrofuran: [\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 1.85\n            },\n            {\n                proton: 'CH2O',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 3.76\n            }\n        ],\n        toluene: [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.36\n            },\n            {\n                proton: 'CH(o/p)',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 7.17\n            },\n            {\n                proton: 'CH(m)',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 7.25\n            }\n        ],\n        triethylamine: [\n            {\n                proton: 'CH3',\n                coupling: 7,\n                multiplicity: 't',\n                shift: 1.03\n            },\n            {\n                proton: 'CH2',\n                coupling: 7,\n                multiplicity: 'q',\n                shift: 2.53\n            }\n        ]\n    },\n    '(cd3)2co': {\n        tms: [\n            {\n                proton: 'X',\n                coupling: 0,\n                multiplicity: '',\n                shift: 0\n            }\n        ],\n        solvent_residual_peak: [\n            {\n                proton: 'X',\n                coupling: 0,\n                multiplicity: '',\n                shift: 2.05\n            }\n        ],\n        h2o: [\n            {\n                proton: 'H2O',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.84\n            }\n        ],\n        acetic_acid: [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 1.96\n            }\n        ],\n        acetone: [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.09\n            }\n        ],\n        acetonitrile: [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.05\n            }\n        ],\n        benzene: [\n            {\n                proton: 'CH',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 7.36\n            }\n        ],\n        'tert-butyl_alcohol': [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 1.18\n            }\n        ],\n        'tert-butyl_methyl_ether': [\n            {\n                proton: 'CCH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 1.13\n            },\n            {\n                proton: 'OCH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.13\n            }\n        ],\n        bhtb: [\n            {\n                proton: 'ArH',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 6.96\n            },\n            {\n                proton: 'ArCH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.22\n            },\n            {\n                proton: 'ArC(CH3)3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 1.41\n            }\n        ],\n        chloroform: [\n            {\n                proton: 'CH',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 8.02\n            }\n        ],\n        cyclohexane: [\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 1.43\n            }\n        ],\n        '1,2-dichloroethane': [\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.87\n            }\n        ],\n        dichloromethane: [\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 5.63\n            }\n        ],\n        diethyl_ether: [\n            {\n                proton: 'CH3',\n                coupling: 7,\n                multiplicity: 't',\n                shift: 1.11\n            },\n            {\n                proton: 'CH2',\n                coupling: 7,\n                multiplicity: 'q',\n                shift: 3.41\n            }\n        ],\n        diglyme: [\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 3.56\n            },\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 3.47\n            },\n            {\n                proton: 'OCH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.28\n            }\n        ],\n        '1,2-dimethoxyethane': [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.28\n            },\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.46\n            }\n        ],\n        dimethylacetamide: [\n            {\n                proton: 'CH3CO',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 1.97\n            },\n            {\n                proton: 'NCH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3\n            },\n            {\n                proton: 'NCH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.83\n            }\n        ],\n        dimethylformamide: [\n            {\n                proton: 'CH',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 7.96\n            },\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.94\n            },\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.78\n            }\n        ],\n        dimethyl_sulfoxide: [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.52\n            }\n        ],\n        dioxane: [\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.59\n            }\n        ],\n        ethanol: [\n            {\n                proton: 'CH3',\n                coupling: 7,\n                multiplicity: 't',\n                shift: 1.12\n            },\n            {\n                proton: 'CH2',\n                coupling: 7,\n                multiplicity: 'q',\n                shift: 3.57\n            },\n            {\n                proton: 'OH',\n                coupling: 5,\n                multiplicity: 's,t',\n                shift: 3.39\n            }\n        ],\n        ethyl_acetate: [\n            {\n                proton: 'CH3CO',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 1.97\n            },\n            {\n                proton: 'CH2CH3',\n                coupling: 7,\n                multiplicity: 'q',\n                shift: 4.05\n            },\n            {\n                proton: 'CH2CH3',\n                coupling: 7,\n                multiplicity: 't',\n                shift: 1.2\n            }\n        ],\n        ethyl_methyl_ketone: [\n            {\n                proton: 'CH3CO',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.07\n            },\n            {\n                proton: 'CH2CH3',\n                coupling: 7,\n                multiplicity: 'q',\n                shift: 2.45\n            },\n            {\n                proton: 'CH2CH3',\n                coupling: 7,\n                multiplicity: 't',\n                shift: 0.96\n            }\n        ],\n        ethylene_glycol: [\n            {\n                proton: 'CH',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.28\n            }\n        ],\n        'grease^f': [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 0.87\n            },\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 'br_s',\n                shift: 1.29\n            }\n        ],\n        'n-hexane': [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 't',\n                shift: 0.88\n            },\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 1.28\n            }\n        ],\n        hmpag: [\n            {\n                proton: 'CH3',\n                coupling: 9.5,\n                multiplicity: 'd',\n                shift: 2.59\n            }\n        ],\n        methanol: [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.31\n            },\n            {\n                proton: 'OH',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.12\n            }\n        ],\n        nitromethane: [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 4.43\n            }\n        ],\n        'n-pentane': [\n            {\n                proton: 'CH3',\n                coupling: 7,\n                multiplicity: 't',\n                shift: 0.88\n            },\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 1.27\n            }\n        ],\n        '2-propanol': [\n            {\n                proton: 'CH3',\n                coupling: 6,\n                multiplicity: 'd',\n                shift: 1.1\n            },\n            {\n                proton: 'CH',\n                coupling: 6,\n                multiplicity: 'sep',\n                shift: 3.9\n            }\n        ],\n        pyridine: [\n            {\n                proton: 'CH(2)',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 8.58\n            },\n            {\n                proton: 'CH(3)',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 7.35\n            },\n            {\n                proton: 'CH(4)',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 7.76\n            }\n        ],\n        silicone_greasei: [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 0.13\n            }\n        ],\n        tetrahydrofuran: [\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 1.79\n            },\n            {\n                proton: 'CH2O',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 3.63\n            }\n        ],\n        toluene: [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.32\n            },\n            {\n                proton: 'CH(o/p)',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 7.5\n            },\n            {\n                proton: 'CH(m)',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 7.5\n            }\n        ],\n        triethylamine: [\n            {\n                proton: 'CH3',\n                coupling: 7,\n                multiplicity: 't',\n                shift: 0.96\n            },\n            {\n                proton: 'CH2',\n                coupling: 7,\n                multiplicity: 'q',\n                shift: 2.45\n            }\n        ]\n    },\n    dmso: {\n        tms: [\n            {\n                proton: 'X',\n                coupling: 0,\n                multiplicity: '',\n                shift: 0\n            }\n        ],\n        solvent_residual_peak: [\n            {\n                proton: 'X',\n                coupling: 0,\n                multiplicity: 'quint',\n                shift: 2.5\n            }\n        ],\n        h2o: [\n            {\n                proton: 'H2O',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.33\n            }\n        ],\n        acetic_acid: [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 1.91\n            }\n        ],\n        acetone: [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.09\n            }\n        ],\n        acetonitrile: [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.07\n            }\n        ],\n        benzene: [\n            {\n                proton: 'CH',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 7.37\n            }\n        ],\n        'tert-butyl_alcohol': [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 1.11\n            },\n            {\n                proton: 'OHc',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 4.19\n            }\n        ],\n        'tert-butyl_methyl_ether': [\n            {\n                proton: 'CCH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 1.11\n            },\n            {\n                proton: 'OCH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.08\n            }\n        ],\n        bhtb: [\n            {\n                proton: 'ArH',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 6.87\n            },\n            {\n                proton: 'OHc',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 6.65\n            },\n            {\n                proton: 'ArCH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.18\n            },\n            {\n                proton: 'ArC(CH3)3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 1.36\n            }\n        ],\n        chloroform: [\n            {\n                proton: 'CH',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 8.32\n            }\n        ],\n        cyclohexane: [\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 1.4\n            }\n        ],\n        '1,2-dichloroethane': [\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.9\n            }\n        ],\n        dichloromethane: [\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 5.76\n            }\n        ],\n        diethyl_ether: [\n            {\n                proton: 'CH3',\n                coupling: 7,\n                multiplicity: 't',\n                shift: 1.09\n            },\n            {\n                proton: 'CH2',\n                coupling: 7,\n                multiplicity: 'q',\n                shift: 3.38\n            }\n        ],\n        diglyme: [\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 3.51\n            },\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 3.38\n            },\n            {\n                proton: 'OCH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.24\n            }\n        ],\n        '1,2-dimethoxyethane': [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.24\n            },\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.43\n            }\n        ],\n        dimethylacetamide: [\n            {\n                proton: 'CH3CO',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 1.96\n            },\n            {\n                proton: 'NCH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.94\n            },\n            {\n                proton: 'NCH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.78\n            }\n        ],\n        dimethylformamide: [\n            {\n                proton: 'CH',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 7.95\n            },\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.89\n            },\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.73\n            }\n        ],\n        dimethyl_sulfoxide: [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.54\n            }\n        ],\n        dioxane: [\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.57\n            }\n        ],\n        ethanol: [\n            {\n                proton: 'CH3',\n                coupling: 7,\n                multiplicity: 't',\n                shift: 1.06\n            },\n            {\n                proton: 'CH2',\n                coupling: 7,\n                multiplicity: 'q',\n                shift: 3.44\n            },\n            {\n                proton: 'OH',\n                coupling: 5,\n                multiplicity: 's,t',\n                shift: 4.63\n            }\n        ],\n        ethyl_acetate: [\n            {\n                proton: 'CH3CO',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 1.99\n            },\n            {\n                proton: 'CH2CH3',\n                coupling: 7,\n                multiplicity: 'q',\n                shift: 4.03\n            },\n            {\n                proton: 'CH2CH3',\n                coupling: 7,\n                multiplicity: 't',\n                shift: 1.17\n            }\n        ],\n        ethyl_methyl_ketone: [\n            {\n                proton: 'CH3CO',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.07\n            },\n            {\n                proton: 'CH2CH3',\n                coupling: 7,\n                multiplicity: 'q',\n                shift: 2.43\n            },\n            {\n                proton: 'CH2CH3',\n                coupling: 7,\n                multiplicity: 't',\n                shift: 0.91\n            }\n        ],\n        ethylene_glycol: [\n            {\n                proton: 'CH',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.34\n            }\n        ],\n        'grease^f': [],\n        'n-hexane': [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 't',\n                shift: 0.86\n            },\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 1.25\n            }\n        ],\n        hmpag: [\n            {\n                proton: 'CH3',\n                coupling: 9.5,\n                multiplicity: 'd',\n                shift: 2.53\n            }\n        ],\n        methanol: [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.16\n            },\n            {\n                proton: 'OH',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 4.01\n            }\n        ],\n        nitromethane: [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 4.42\n            }\n        ],\n        'n-pentane': [\n            {\n                proton: 'CH3',\n                coupling: 7,\n                multiplicity: 't',\n                shift: 0.88\n            },\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 1.27\n            }\n        ],\n        '2-propanol': [\n            {\n                proton: 'CH3',\n                coupling: 6,\n                multiplicity: 'd',\n                shift: 1.04\n            },\n            {\n                proton: 'CH',\n                coupling: 6,\n                multiplicity: 'sep',\n                shift: 3.78\n            }\n        ],\n        pyridine: [\n            {\n                proton: 'CH(2)',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 8.58\n            },\n            {\n                proton: 'CH(3)',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 7.39\n            },\n            {\n                proton: 'CH(4)',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 7.79\n            }\n        ],\n        silicone_greasei: [],\n        tetrahydrofuran: [\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 1.76\n            },\n            {\n                proton: 'CH2O',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 3.6\n            }\n        ],\n        toluene: [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.3\n            },\n            {\n                proton: 'CH(o/p)',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 7.18\n            },\n            {\n                proton: 'CH(m)',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 7.25\n            }\n        ],\n        triethylamine: [\n            {\n                proton: 'CH3',\n                coupling: 7,\n                multiplicity: 't',\n                shift: 0.93\n            },\n            {\n                proton: 'CH2',\n                coupling: 7,\n                multiplicity: 'q',\n                shift: 2.43\n            }\n        ]\n    },\n    c6d6: {\n        tms: [\n            {\n                proton: 'X',\n                coupling: 0,\n                multiplicity: '',\n                shift: 0\n            }\n        ],\n        solvent_residual_peak: [\n            {\n                proton: 'X',\n                coupling: 0,\n                multiplicity: '',\n                shift: 7.16\n            }\n        ],\n        h2o: [\n            {\n                proton: 'H2O',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 0.4\n            }\n        ],\n        acetic_acid: [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 1.55\n            }\n        ],\n        acetone: [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 1.55\n            }\n        ],\n        acetonitrile: [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 1.55\n            }\n        ],\n        benzene: [\n            {\n                proton: 'CH',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 7.15\n            }\n        ],\n        'tert-butyl_alcohol': [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 1.05\n            },\n            {\n                proton: 'OHc',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 1.55\n            }\n        ],\n        'tert-butyl_methyl_ether': [\n            {\n                proton: 'CCH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 1.07\n            },\n            {\n                proton: 'OCH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.04\n            }\n        ],\n        bhtb: [\n            {\n                proton: 'ArH',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 7.05\n            },\n            {\n                proton: 'OHc',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 4.79\n            },\n            {\n                proton: 'ArCH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.24\n            },\n            {\n                proton: 'ArC(CH3)3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 1.38\n            }\n        ],\n        chloroform: [\n            {\n                proton: 'CH',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 6.15\n            }\n        ],\n        cyclohexane: [\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 1.4\n            }\n        ],\n        '1,2-dichloroethane': [\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.9\n            }\n        ],\n        dichloromethane: [\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 4.27\n            }\n        ],\n        diethyl_ether: [\n            {\n                proton: 'CH3',\n                coupling: 7,\n                multiplicity: 't',\n                shift: 1.11\n            },\n            {\n                proton: 'CH2',\n                coupling: 7,\n                multiplicity: 'q',\n                shift: 3.26\n            }\n        ],\n        diglyme: [\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 3.46\n            },\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 3.34\n            },\n            {\n                proton: 'OCH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.11\n            }\n        ],\n        '1,2-dimethoxyethane': [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.12\n            },\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.33\n            }\n        ],\n        dimethylacetamide: [\n            {\n                proton: 'CH3CO',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 1.6\n            },\n            {\n                proton: 'NCH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.57\n            },\n            {\n                proton: 'NCH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.05\n            }\n        ],\n        dimethylformamide: [\n            {\n                proton: 'CH',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 7.63\n            },\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.36\n            },\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 1.86\n            }\n        ],\n        dimethyl_sulfoxide: [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 1.68\n            }\n        ],\n        dioxane: [\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.35\n            }\n        ],\n        ethanol: [\n            {\n                proton: 'CH3',\n                coupling: 7,\n                multiplicity: 't',\n                shift: 0.96\n            },\n            {\n                proton: 'CH2',\n                coupling: 7,\n                multiplicity: 'q',\n                shift: 3.34\n            }\n        ],\n        ethyl_acetate: [\n            {\n                proton: 'CH3CO',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 1.65\n            },\n            {\n                proton: 'CH2CH3',\n                coupling: 7,\n                multiplicity: 'q',\n                shift: 3.89\n            },\n            {\n                proton: 'CH2CH3',\n                coupling: 7,\n                multiplicity: 't',\n                shift: 0.92\n            }\n        ],\n        ethyl_methyl_ketone: [\n            {\n                proton: 'CH3CO',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 1.58\n            },\n            {\n                proton: 'CH2CH3',\n                coupling: 7,\n                multiplicity: 'q',\n                shift: 1.81\n            },\n            {\n                proton: 'CH2CH3',\n                coupling: 7,\n                multiplicity: 't',\n                shift: 0.85\n            }\n        ],\n        ethylene_glycol: [\n            {\n                proton: 'CH',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.41\n            }\n        ],\n        'grease^f': [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 0.92\n            },\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 'br_s',\n                shift: 1.36\n            }\n        ],\n        'n-hexane': [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 't',\n                shift: 0.89\n            },\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 1.24\n            }\n        ],\n        hmpag: [\n            {\n                proton: 'CH3',\n                coupling: 9.5,\n                multiplicity: 'd',\n                shift: 2.4\n            }\n        ],\n        methanol: [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.07\n            }\n        ],\n        nitromethane: [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.94\n            }\n        ],\n        'n-pentane': [\n            {\n                proton: 'CH3',\n                coupling: 7,\n                multiplicity: 't',\n                shift: 0.86\n            },\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 1.23\n            }\n        ],\n        '2-propanol': [\n            {\n                proton: 'CH3',\n                coupling: 6,\n                multiplicity: 'd',\n                shift: 0.95\n            },\n            {\n                proton: 'CH',\n                coupling: 6,\n                multiplicity: 'sep',\n                shift: 3.67\n            }\n        ],\n        pyridine: [\n            {\n                proton: 'CH(2)',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 8.53\n            },\n            {\n                proton: 'CH(3)',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 6.66\n            },\n            {\n                proton: 'CH(4)',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 6.98\n            }\n        ],\n        silicone_greasei: [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 0.29\n            }\n        ],\n        tetrahydrofuran: [\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 1.4\n            },\n            {\n                proton: 'CH2O',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 3.57\n            }\n        ],\n        toluene: [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.11\n            },\n            {\n                proton: 'CH(o/p)',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 7.02\n            },\n            {\n                proton: 'CH(m)',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 7.13\n            }\n        ],\n        triethylamine: [\n            {\n                proton: 'CH3',\n                coupling: 7,\n                multiplicity: 't',\n                shift: 0.96\n            },\n            {\n                proton: 'CH2',\n                coupling: 7,\n                multiplicity: 'q',\n                shift: 2.4\n            }\n        ]\n    },\n    cd3cn: {\n        tms: [\n            {\n                proton: 'X',\n                coupling: 0,\n                multiplicity: '',\n                shift: 0\n            }\n        ],\n        solvent_residual_peak: [\n            {\n                proton: 'X',\n                coupling: 0,\n                multiplicity: '',\n                shift: 1.94\n            }\n        ],\n        h2o: [\n            {\n                proton: 'H2O',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.13\n            }\n        ],\n        acetic_acid: [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 1.96\n            }\n        ],\n        acetone: [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.08\n            }\n        ],\n        acetonitrile: [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 1.96\n            }\n        ],\n        benzene: [\n            {\n                proton: 'CH',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 7.37\n            }\n        ],\n        'tert-butyl_alcohol': [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 1.16\n            },\n            {\n                proton: 'OHc',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.18\n            }\n        ],\n        'tert-butyl_methyl_ether': [\n            {\n                proton: 'CCH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 1.14\n            },\n            {\n                proton: 'OCH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.13\n            }\n        ],\n        bhtb: [\n            {\n                proton: 'ArH',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 6.97\n            },\n            {\n                proton: 'OHc',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 5.2\n            },\n            {\n                proton: 'ArCH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.22\n            },\n            {\n                proton: 'ArC(CH3)3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 1.39\n            }\n        ],\n        chloroform: [\n            {\n                proton: 'CH',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 7.58\n            }\n        ],\n        cyclohexane: [\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 1.44\n            }\n        ],\n        '1,2-dichloroethane': [\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.81\n            }\n        ],\n        dichloromethane: [\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 5.44\n            }\n        ],\n        diethyl_ether: [\n            {\n                proton: 'CH3',\n                coupling: 7,\n                multiplicity: 't',\n                shift: 1.12\n            },\n            {\n                proton: 'CH2',\n                coupling: 7,\n                multiplicity: 'q',\n                shift: 3.42\n            }\n        ],\n        diglyme: [\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 3.53\n            },\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 3.45\n            },\n            {\n                proton: 'OCH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.29\n            }\n        ],\n        '1,2-dimethoxyethane': [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.28\n            },\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.45\n            }\n        ],\n        dimethylacetamide: [\n            {\n                proton: 'CH3CO',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 1.97\n            },\n            {\n                proton: 'NCH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.96\n            },\n            {\n                proton: 'NCH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.83\n            }\n        ],\n        dimethylformamide: [\n            {\n                proton: 'CH',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 7.92\n            },\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.89\n            },\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.77\n            }\n        ],\n        dimethyl_sulfoxide: [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.5\n            }\n        ],\n        dioxane: [\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.6\n            }\n        ],\n        ethanol: [\n            {\n                proton: 'CH3',\n                coupling: 7,\n                multiplicity: 't',\n                shift: 1.12\n            },\n            {\n                proton: 'CH2',\n                coupling: 7,\n                multiplicity: 'q',\n                shift: 3.54\n            },\n            {\n                proton: 'OH',\n                coupling: 5,\n                multiplicity: 's,t',\n                shift: 2.47\n            }\n        ],\n        ethyl_acetate: [\n            {\n                proton: 'CH3CO',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 1.97\n            },\n            {\n                proton: 'CH2CH3',\n                coupling: 7,\n                multiplicity: 'q',\n                shift: 4.06\n            },\n            {\n                proton: 'CH2CH3',\n                coupling: 7,\n                multiplicity: 't',\n                shift: 1.2\n            }\n        ],\n        ethyl_methyl_ketone: [\n            {\n                proton: 'CH3CO',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.06\n            },\n            {\n                proton: 'CH2CH3',\n                coupling: 7,\n                multiplicity: 'q',\n                shift: 2.43\n            },\n            {\n                proton: 'CH2CH3',\n                coupling: 7,\n                multiplicity: 't',\n                shift: 0.96\n            }\n        ],\n        ethylene_glycol: [\n            {\n                proton: 'CH',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.51\n            }\n        ],\n        'grease^f': [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 0.86\n            },\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 'br_s',\n                shift: 1.27\n            }\n        ],\n        'n-hexane': [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 't',\n                shift: 0.89\n            },\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 1.28\n            }\n        ],\n        hmpag: [\n            {\n                proton: 'CH3',\n                coupling: 9.5,\n                multiplicity: 'd',\n                shift: 2.57\n            }\n        ],\n        methanol: [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.28\n            },\n            {\n                proton: 'OH',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.16\n            }\n        ],\n        nitromethane: [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 4.31\n            }\n        ],\n        'n-pentane': [\n            {\n                proton: 'CH3',\n                coupling: 7,\n                multiplicity: 't',\n                shift: 0.87\n            },\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 1.29\n            }\n        ],\n        '2-propanol': [\n            {\n                proton: 'CH3',\n                coupling: 6,\n                multiplicity: 'd',\n                shift: 1.09\n            },\n            {\n                proton: 'CH',\n                coupling: 6,\n                multiplicity: 'sep',\n                shift: 3.87\n            }\n        ],\n        pyridine: [\n            {\n                proton: 'CH(2)',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 8.57\n            },\n            {\n                proton: 'CH(3)',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 7.33\n            },\n            {\n                proton: 'CH(4)',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 7.73\n            }\n        ],\n        silicone_greasei: [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 0.08\n            }\n        ],\n        tetrahydrofuran: [\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 1.8\n            },\n            {\n                proton: 'CH2O',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 3.64\n            }\n        ],\n        toluene: [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.33\n            },\n            {\n                proton: 'CH(o/p)',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 7.2\n            },\n            {\n                proton: 'CH(m)',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 7.2\n            }\n        ],\n        triethylamine: [\n            {\n                proton: 'CH3',\n                coupling: 7,\n                multiplicity: 't',\n                shift: 0.96\n            },\n            {\n                proton: 'CH2',\n                coupling: 7,\n                multiplicity: 'q',\n                shift: 2.45\n            }\n        ]\n    },\n    cd3od: {\n        tms: [\n            {\n                proton: 'X',\n                coupling: 0,\n                multiplicity: '',\n                shift: 0\n            }\n        ],\n        solvent_residual_peak: [\n            {\n                proton: 'X',\n                coupling: 0,\n                multiplicity: '',\n                shift: 3.31\n            }\n        ],\n        h2o: [\n            {\n                proton: 'H2O',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 4.87\n            }\n        ],\n        acetic_acid: [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 1.99\n            }\n        ],\n        acetone: [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.15\n            }\n        ],\n        acetonitrile: [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.03\n            }\n        ],\n        benzene: [\n            {\n                proton: 'CH',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 7.33\n            }\n        ],\n        'tert-butyl_alcohol': [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 1.4\n            }\n        ],\n        'tert-butyl_methyl_ether': [\n            {\n                proton: 'CCH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 1.15\n            },\n            {\n                proton: 'OCH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.2\n            }\n        ],\n        bhtb: [\n            {\n                proton: 'ArH',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 6.92\n            },\n            {\n                proton: 'ArCH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.21\n            },\n            {\n                proton: 'ArC(CH3)3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 1.4\n            }\n        ],\n        chloroform: [\n            {\n                proton: 'CH',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 7.9\n            }\n        ],\n        cyclohexane: [\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 1.45\n            }\n        ],\n        '1,2-dichloroethane': [\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.78\n            }\n        ],\n        dichloromethane: [\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 5.49\n            }\n        ],\n        diethyl_ether: [\n            {\n                proton: 'CH3',\n                coupling: 7,\n                multiplicity: 't',\n                shift: 1.18\n            },\n            {\n                proton: 'CH2',\n                coupling: 7,\n                multiplicity: 'q',\n                shift: 3.49\n            }\n        ],\n        diglyme: [\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 3.61\n            },\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 3.58\n            },\n            {\n                proton: 'OCH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.35\n            }\n        ],\n        '1,2-dimethoxyethane': [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.35\n            },\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.52\n            }\n        ],\n        dimethylacetamide: [\n            {\n                proton: 'CH3CO',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.07\n            },\n            {\n                proton: 'NCH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.31\n            },\n            {\n                proton: 'NCH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.92\n            }\n        ],\n        dimethylformamide: [\n            {\n                proton: 'CH',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 7.97\n            },\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.99\n            },\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.86\n            }\n        ],\n        dimethyl_sulfoxide: [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.65\n            }\n        ],\n        dioxane: [\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.66\n            }\n        ],\n        ethanol: [\n            {\n                proton: 'CH3',\n                coupling: 7,\n                multiplicity: 't',\n                shift: 1.19\n            },\n            {\n                proton: 'CH2',\n                coupling: 7,\n                multiplicity: 'q',\n                shift: 3.6\n            }\n        ],\n        ethyl_acetate: [\n            {\n                proton: 'CH3CO',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.01\n            },\n            {\n                proton: 'CH2CH3',\n                coupling: 7,\n                multiplicity: 'q',\n                shift: 4.09\n            },\n            {\n                proton: 'CH2CH3',\n                coupling: 7,\n                multiplicity: 't',\n                shift: 1.24\n            }\n        ],\n        ethyl_methyl_ketone: [\n            {\n                proton: 'CH3CO',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.12\n            },\n            {\n                proton: 'CH2CH3',\n                coupling: 7,\n                multiplicity: 'q',\n                shift: 2.5\n            },\n            {\n                proton: 'CH2CH3',\n                coupling: 7,\n                multiplicity: 't',\n                shift: 1.01\n            }\n        ],\n        ethylene_glycol: [\n            {\n                proton: 'CH',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.59\n            }\n        ],\n        'grease^f': [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 0.88\n            },\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 'br_s',\n                shift: 1.29\n            }\n        ],\n        'n-hexane': [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 't',\n                shift: 0.9\n            },\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 1.29\n            }\n        ],\n        hmpag: [\n            {\n                proton: 'CH3',\n                coupling: 9.5,\n                multiplicity: 'd',\n                shift: 2.64\n            }\n        ],\n        methanol: [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.34\n            }\n        ],\n        nitromethane: [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 4.34\n            }\n        ],\n        'n-pentane': [\n            {\n                proton: 'CH3',\n                coupling: 7,\n                multiplicity: 't',\n                shift: 0.89\n            },\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 1.29\n            }\n        ],\n        '2-propanol': [\n            {\n                proton: 'CH3',\n                coupling: 6,\n                multiplicity: 'd',\n                shift: 1.5\n            },\n            {\n                proton: 'CH',\n                coupling: 6,\n                multiplicity: 'sep',\n                shift: 3.92\n            }\n        ],\n        pyridine: [\n            {\n                proton: 'CH(2)',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 8.53\n            },\n            {\n                proton: 'CH(3)',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 7.44\n            },\n            {\n                proton: 'CH(4)',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 7.85\n            }\n        ],\n        silicone_greasei: [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 0.1\n            }\n        ],\n        tetrahydrofuran: [\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 1.87\n            },\n            {\n                proton: 'CH2O',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 3.71\n            }\n        ],\n        toluene: [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.32\n            },\n            {\n                proton: 'CH(o/p)',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 7.16\n            },\n            {\n                proton: 'CH(m)',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 7.16\n            }\n        ],\n        triethylamine: [\n            {\n                proton: 'CH3',\n                coupling: 7,\n                multiplicity: 't',\n                shift: 1.05\n            },\n            {\n                proton: 'CH2',\n                coupling: 7,\n                multiplicity: 'q',\n                shift: 2.58\n            }\n        ]\n    },\n    d2o: {\n        tms: [\n            {\n                proton: 'X',\n                coupling: 0,\n                multiplicity: '',\n                shift: 0\n            }\n        ],\n        solvent_residual_peak: [\n            {\n                proton: 'X',\n                coupling: 0,\n                multiplicity: '',\n                shift: 4.79\n            }\n        ],\n        h2o: [],\n        acetic_acid: [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.08\n            }\n        ],\n        acetone: [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.22\n            }\n        ],\n        acetonitrile: [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.06\n            }\n        ],\n        benzene: [],\n        'tert-butyl_alcohol': [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 1.24\n            }\n        ],\n        'tert-butyl_methyl_ether': [\n            {\n                proton: 'CCH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 1.21\n            },\n            {\n                proton: 'OCH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.22\n            }\n        ],\n        bhtb: [],\n        chloroform: [],\n        cyclohexane: [],\n        '1,2-dichloroethane': [],\n        dichloromethane: [],\n        diethyl_ether: [\n            {\n                proton: 'CH3',\n                coupling: 7,\n                multiplicity: 't',\n                shift: 1.17\n            },\n            {\n                proton: 'CH2',\n                coupling: 7,\n                multiplicity: 'q',\n                shift: 3.56\n            }\n        ],\n        diglyme: [\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 3.67\n            },\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 3.61\n            },\n            {\n                proton: 'OCH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.37\n            }\n        ],\n        '1,2-dimethoxyethane': [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.37\n            },\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.6\n            }\n        ],\n        dimethylacetamide: [\n            {\n                proton: 'CH3CO',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.08\n            },\n            {\n                proton: 'NCH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.06\n            },\n            {\n                proton: 'NCH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.9\n            }\n        ],\n        dimethylformamide: [\n            {\n                proton: 'CH',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 7.92\n            },\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.01\n            },\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.85\n            }\n        ],\n        dimethyl_sulfoxide: [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.71\n            }\n        ],\n        dioxane: [\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.75\n            }\n        ],\n        ethanol: [\n            {\n                proton: 'CH3',\n                coupling: 7,\n                multiplicity: 't',\n                shift: 1.17\n            },\n            {\n                proton: 'CH2',\n                coupling: 7,\n                multiplicity: 'q',\n                shift: 3.65\n            }\n        ],\n        ethyl_acetate: [\n            {\n                proton: 'CH3CO',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.07\n            },\n            {\n                proton: 'CH2CH3',\n                coupling: 7,\n                multiplicity: 'q',\n                shift: 4.14\n            },\n            {\n                proton: 'CH2CH3',\n                coupling: 7,\n                multiplicity: 't',\n                shift: 1.24\n            }\n        ],\n        ethyl_methyl_ketone: [\n            {\n                proton: 'CH3CO',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 2.19\n            },\n            {\n                proton: 'CH2CH3',\n                coupling: 7,\n                multiplicity: 'q',\n                shift: 3.18\n            },\n            {\n                proton: 'CH2CH3',\n                coupling: 7,\n                multiplicity: 't',\n                shift: 1.26\n            }\n        ],\n        ethylene_glycol: [\n            {\n                proton: 'CH',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.65\n            }\n        ],\n        'grease^f': [],\n        'n-hexane': [],\n        hmpag: [\n            {\n                proton: 'CH3',\n                coupling: 9.5,\n                multiplicity: 'd',\n                shift: 2.61\n            }\n        ],\n        methanol: [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 3.34\n            }\n        ],\n        nitromethane: [\n            {\n                proton: 'CH3',\n                coupling: 0,\n                multiplicity: 's',\n                shift: 4.4\n            }\n        ],\n        'n-pentane': [\n            {\n                proton: 'CH3',\n                coupling: 7,\n                multiplicity: 't',\n                shift: 0.9\n            }\n        ],\n        '2-propanol': [\n            {\n                proton: 'CH3',\n                coupling: 6,\n                multiplicity: 'd',\n                shift: 1.17\n            },\n            {\n                proton: 'CH',\n                coupling: 6,\n                multiplicity: 'sep',\n                shift: 4.02\n            }\n        ],\n        pyridine: [\n            {\n                proton: 'CH(2)',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 8.52\n            },\n            {\n                proton: 'CH(3)',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 7.45\n            },\n            {\n                proton: 'CH(4)',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 7.87\n            }\n        ],\n        silicone_greasei: [],\n        tetrahydrofuran: [\n            {\n                proton: 'CH2',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 1.88\n            },\n            {\n                proton: 'CH2O',\n                coupling: 0,\n                multiplicity: 'm',\n                shift: 3.74\n            }\n        ],\n        toluene: [],\n        triethylamine: [\n            {\n                proton: 'CH3',\n                coupling: 7,\n                multiplicity: 't',\n                shift: 0.99\n            },\n            {\n                proton: 'CH2',\n                coupling: 7,\n                multiplicity: 'q',\n                shift: 2.57\n            }\n        ]\n    }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/spectra-data/src/peakPicking/impurities.js","export {default as Ranges} from './range/Ranges';\nexport {default as getACS} from './acs/acs.js';\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/spectra-data-ranges/src/index.js","/**\n * nbDecimalsDelta : default depends nucleus H, F: 2 otherwise 1\n * nbDecimalsJ : default depends nucleus H, F: 1, otherwise 0\n * ascending : true / false\n * format : default \"AIMJ\" or when 2D data is collected the default format may be \"IMJA\"\n * deltaSeparator : ', '\n * detailSeparator : ', '\n */\n\nimport {joinCoupling} from 'spectra-nmr-utilities';\nconst globalOptions = {\n    h: {\n        nucleus: '1H',\n        nbDecimalDelta: 2,\n        nbDecimalJ: 1,\n        observedFrequency: 400\n    },\n    c: {\n        nucleus: '13C',\n        nbDecimalDelta: 1,\n        nbDecimalJ: 1,\n        observedFrequency: 100\n    },\n    f: {\n        nucleus: '19F',\n        nbDecimalDelta: 2,\n        nbDecimalJ: 1,\n        observedFrequency: 400\n    }\n};\n\nexport default function toAcs(ranges, options = {}) {\n    options = Object.assign({}, options);\n    if (!options.nucleus) options.nucleus = '1H';\n    var nucleus = options.nucleus.toLowerCase().replace(/[0-9]/g, '');\n    var defaultOptions = globalOptions[nucleus];\n    options = Object.assign({}, defaultOptions, {ascending: false, format: 'IMJA'}, options);\n\n    ranges = JSON.parse(JSON.stringify(ranges));\n    if (options.ascending === true) {\n        ranges.sort((a, b) => {\n            let fromA = Math.min(a.from, a.to);\n            let fromB = Math.min(b.from, b.to);\n            return fromA - fromB;\n        });\n    }\n    var acsString = formatAcs(ranges, options);\n\n    if (acsString.length > 0) acsString += '.';\n\n    return acsString;\n}\n\nfunction formatAcs(ranges, options) {\n    var acs = spectroInformation(options);\n    if (acs.length === 0) acs = 'δ ';\n    var acsRanges = [];\n    for (let range of ranges) {\n        pushDelta(range, acsRanges, options);\n    }\n    if (acsRanges.length > 0) {\n        return acs + acsRanges.join(', ');\n    } else {\n        return '';\n    }\n}\n\nfunction spectroInformation(options) {\n    let parenthesis = [];\n    let strings = formatNucleus(options.nucleus) + ' NMR';\n    if (options.solvent) {\n        parenthesis.push(formatMF(options.solvent));\n    }\n    if (options.frequencyObserved) {\n        parenthesis.push((options.frequencyObserved * 1).toFixed(0) + ' MHz');\n    }\n    if (parenthesis.length > 0) {\n        strings += ' (' + parenthesis.join(', ') + '): δ ';\n    } else {\n        strings += ': δ ';\n    }\n    return strings;\n}\n\nfunction pushDelta(range, acsRanges, options) {\n    var strings = '';\n    var parenthesis = [];\n    let fromTo = [range.from, range.to];\n    if (Array.isArray(range.signal) && range.signal.length > 0) {\n        var signals = range.signal;\n        if (signals.length > 1) {\n            if (options.ascending === true) {\n                signals.sort((a, b) => {\n                    return a.delta - b.delta;\n                });\n            }\n            strings += Math.min(...fromTo).toFixed(options.nbDecimalDelta) + '-'\n                     + Math.max(...fromTo).toFixed(options.nbDecimalDelta);\n            strings += ' (' + getIntegral(range, options);\n            for (let signal of signals) {\n                parenthesis = [];\n                if (signal.delta !== undefined) {\n                    strings = appendSeparator(strings);\n                    strings += signal.delta.toFixed(options.nbDecimalDelta);\n                }\n                switchFormat({}, signal, parenthesis, options);\n                if (parenthesis.length > 0) strings += ' (' + parenthesis.join(', ') + ')';\n            }\n            strings += ')';\n        } else {\n            parenthesis = [];\n            if (signals[0].delta !== undefined) {\n                strings += signals[0].delta.toFixed(options.nbDecimalDelta);\n                switchFormat(range, signals[0], parenthesis, options);\n                if (parenthesis.length > 0) strings += ' (' + parenthesis.join(', ') + ')';\n            } else {\n                strings += Math.min(...fromTo).toFixed(options.nbDecimalDelta) + '-' + Math.max(...fromTo).toFixed(options.nbDecimalDelta);\n                switchFormat(range, signals[0], parenthesis, options);\n                if (parenthesis.length > 0) strings += ' (' + parenthesis + ')';\n            }\n        }\n    } else {\n        strings += Math.min(...fromTo).toFixed(options.nbDecimalDelta) + '-' + Math.max(...fromTo).toFixed(options.nbDecimalDelta);\n        switchFormat(range, [], parenthesis, options);\n        if (parenthesis.length > 0) strings += ' (' + parenthesis.join(', ') + ')';\n    }\n    acsRanges.push(strings);\n}\n\nfunction getIntegral(range, options) {\n    let integral = '';\n    if (range.pubIntegral) {\n        integral = range.pubIntegral;\n    } else if (range.integral) {\n        integral = range.integral.toFixed(0) + options.nucleus[options.nucleus.length - 1];\n    }\n    return integral;\n}\n\nfunction pushIntegral(range, parenthesis, options) {\n    let integral = getIntegral(range, options);\n    if (integral.length > 0) parenthesis.push(integral);\n}\n\nfunction pushMultiplicityFromSignal(signal, parenthesis) {\n    let multiplicity = signal.multiplicity || joinCoupling(signal, 0.05);\n    if (multiplicity.length > 0) parenthesis.push(multiplicity);\n}\n\nfunction switchFormat(range, signal, parenthesis, options) {\n    for (const char of options.format) {\n        switch (char.toUpperCase()) {\n            case 'I':\n                pushIntegral(range, parenthesis, options);\n                break;\n            case 'M':\n                pushMultiplicityFromSignal(signal, parenthesis);\n                break;\n            case 'A':\n                pushAssignment(signal, parenthesis);\n                break;\n            case 'J':\n                pushCoupling(signal, parenthesis, options);\n                break;\n            default:\n                throw new Error('Unknow format letter: ' + char);\n        }\n    }\n}\n\nfunction formatMF(mf) {\n    return mf.replace(/([0-9]+)/g, '<sub>$1</sub>');\n}\n\nfunction formatNucleus(nucleus) {\n    return nucleus.replace(/([0-9]+)/g, '<sup>$1</sup>');\n}\n\nfunction appendSeparator(strings) {\n    if ((strings.length > 0) && (!strings.match(/ $/)) && (!strings.match(/\\($/))) {\n        strings += ', ';\n    }\n    return strings;\n}\n\nfunction formatAssignment(assignment) {\n    assignment = assignment.replace(/([0-9]+)/g, '<sub>$1</sub>');\n    assignment = assignment.replace(/\"([^\"]*)\"/g, '<i>$1</i>');\n    return assignment;\n}\n\nfunction pushCoupling(signal, parenthesis, options) {\n    if (Array.isArray(signal.j) && signal.j.length > 0) {\n        signal.j.sort(function (a, b) {\n            return b.coupling - a.coupling;\n        });\n\n        var values = [];\n        for (let j of signal.j) {\n            if (j.coupling !== undefined) {\n                values.push(j.coupling.toFixed(options.nbDecimalJ));\n            }\n        }\n        if (values.length > 0) parenthesis.push('<i>J</i> = ' + values.join(', ') + ' Hz');\n    }\n}\n\nfunction pushAssignment(signal, parenthesis) {\n    if (signal.pubAssignment) {\n        parenthesis.push(formatAssignment(signal.pubAssignment));\n    } else if (signal.assignment) {\n        parenthesis.push(formatAssignment(signal.assignment));\n    }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/spectra-data-ranges/src/acs/acs.js","\nconst patterns = ['s', 'd', 't', 'q', 'quint', 'h', 'sept', 'o', 'n'];\n\nexport function nmrJ(Js, options = {}) {\n    var jString = '';\n    options = Object.assign({}, {separator: ', ', nbDecimal: 2}, options);\n    let j, i;\n    for (i = 0; i < Js.length; i++) {\n        j = Js[i];\n        if (j.length > 11) {\n            j += options.separator;\n        }\n        jString += j.multiplicity + ' ' + j.coupling.toFixed(options.nbDecimal);\n    }\n    return jString;\n}\n\nexport function joinCoupling(signal, tolerance = 0.05) {\n    var jc = signal.j;\n    if (jc && jc.length > 0) {\n        var cont = jc[0].assignment ? jc[0].assignment.length : 1;\n        var pattern = '';\n        var newNmrJs = [];\n        var diaIDs = [];\n        var atoms = [];\n        jc.sort(function (a, b) {\n            return b.coupling - a.coupling;\n        });\n        if (jc[0].diaID) {\n            diaIDs = [jc[0].diaID];\n        }\n        if (jc[0].assignment) {\n            atoms = jc[0].assignment;\n        }\n        for (var i = 0; i < jc.length - 1; i++) {\n            if (Math.abs(jc[i].coupling - jc[i + 1].coupling) < tolerance) {\n                cont += jc[i + 1].assignment ? jc[i + 1].assignment.length : 1;\n                diaIDs.push(jc[i].diaID);\n                atoms = atoms.concat(jc[i + 1].assignment);\n            } else {\n                let jTemp = {\n                    coupling: Math.abs(jc[i].coupling),\n                    multiplicity: patterns[cont]\n                };\n                if (diaIDs.length > 0) {\n                    jTemp.diaID = diaIDs;\n                }\n                if (atoms.length > 0) {\n                    jTemp.assignment = atoms;\n                }\n                newNmrJs.push(jTemp);\n                if (jc[0].diaID) {\n                    diaIDs = [jc[i].diaID];\n                }\n                if (jc[0].assignment) {\n                    atoms = jc[i].assignment;\n                }\n                pattern += patterns[cont];\n                cont = jc[i + 1].assignment ? jc[i + 1].assignment.length : 1;\n            }\n        }\n        let jTemp = {\n            coupling: Math.abs(jc[i].coupling),\n            multiplicity: patterns[cont]\n        };\n        if (diaIDs.length > 0) {\n            jTemp.diaID = diaIDs;\n        }\n        if (atoms.length > 0) {\n            jTemp.assignment = atoms;\n        }\n        newNmrJs.push(jTemp);\n\n        pattern += patterns[cont];\n        signal.j = newNmrJs;\n\n    } else if (signal.delta) {\n        pattern = 's';\n    } else {\n        pattern = 'm';\n    }\n    return pattern;\n}\n\nexport function group(signals, options = {}) {\n    var i, k;\n    for (i = 0; i < signals.length; i++) {\n        var j = signals[i].j;\n        if (j && j.lengthpublish > 0) {\n            for (k = j.length - 2; k >= 0; k--) {\n                for (var m = j.length - 1; m > k; m--) {\n                    if (j[k].diaID === j[m].diaID &&\n                        j[k].coupling === j[m].coupling &&\n                        j[k].distance === j[m].distance) {\n                        j[k].assignment = j[k].assignment.concat(j[m].assignment);\n                        j.splice(m, 1);\n                    }\n                }\n            }\n        }\n    }\n    signals.sort((a, b) => {\n        if (a.diaIDs[0] < b.diaIDs[0]) return -1;\n        if (a.diaIDs[0] > b.diaIDs[0]) return 1;\n        return 0;\n    });\n\n    for (i = signals.length - 2; i >= 0; i--) {\n        if (signals[i].diaIDs[0] === signals[i + 1].diaIDs[0]) {\n            signals[i].nbAtoms += signals[i + 1].nbAtoms;\n            signals[i].atomIDs = signals[i].atomIDs.concat(signals[i + 1].atomIDs);\n            signals.splice(i + 1, 1);\n        }\n    }\n    for (i = 0; i < signals.length; i++) {\n        j = signals[i].j;\n        for (k = 0; k < j.length; k++) {\n            j[k].multiplicity = patterns[j[k].assignment.length];\n        }\n        signals[i].multiplicity = module.exports.compilePattern(signals[i], options.tolerance);\n    }\n    return signals;\n}\n\n\nexport function compilePattern(signal, tolerance = 0.05) {\n    var jc = signal.j;\n    var pattern = '';\n    if (jc && jc.length > 0) {\n        var cont = jc[0].assignment ? jc[0].assignment.length : 0;\n        jc.sort(function (a, b) {\n            return b.coupling - a.coupling;\n        });\n        for (var i = 0; i < jc.length - 1; i++) {\n            if (Math.abs(jc[i].coupling - jc[i + 1].coupling) < tolerance) {\n                cont += jc[i + 1].assignment ? jc[i + 1].assignment.length : 1;\n            } else {\n                pattern += patterns[cont];\n                cont = jc[i + 1].assignment ? jc[i + 1].assignment.length : 1;\n            }\n        }\n        pattern += patterns[cont];\n    } else if (signal.delta) {\n        pattern = 's';\n    } else {\n        pattern = 'm';\n    }\n    return pattern;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/spectra-nmr-utilities/src/index.js","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n    MAX_INTEGER = 1.7976931348623157e+308,\n    NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMin = Math.min;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n  // Exit early for strings to avoid a performance hit in some environments.\n  if (typeof value == 'string') {\n    return value;\n  }\n  if (isSymbol(value)) {\n    return symbolToString ? symbolToString.call(value) : '';\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Creates a function like `_.round`.\n *\n * @private\n * @param {string} methodName The name of the `Math` method to use when rounding.\n * @returns {Function} Returns the new round function.\n */\nfunction createRound(methodName) {\n  var func = Math[methodName];\n  return function(number, precision) {\n    number = toNumber(number);\n    precision = nativeMin(toInteger(precision), 292);\n    if (precision) {\n      // Shift with exponential notation to avoid floating-point issues.\n      // See [MDN](https://mdn.io/round#Examples) for more details.\n      var pair = (toString(number) + 'e').split('e'),\n          value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n      pair = (toString(value) + 'e').split('e');\n      return +(pair[0] + 'e' + (+pair[1] - precision));\n    }\n    return func(number);\n  };\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n  if (!value) {\n    return value === 0 ? value : 0;\n  }\n  value = toNumber(value);\n  if (value === INFINITY || value === -INFINITY) {\n    var sign = (value < 0 ? -1 : 1);\n    return sign * MAX_INTEGER;\n  }\n  return value === value ? value : 0;\n}\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n  var result = toFinite(value),\n      remainder = result % 1;\n\n  return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n  if (typeof value == 'number') {\n    return value;\n  }\n  if (isSymbol(value)) {\n    return NAN;\n  }\n  if (isObject(value)) {\n    var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n    value = isObject(other) ? (other + '') : other;\n  }\n  if (typeof value != 'string') {\n    return value === 0 ? value : +value;\n  }\n  value = value.replace(reTrim, '');\n  var isBinary = reIsBinary.test(value);\n  return (isBinary || reIsOctal.test(value))\n    ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n    : (reIsBadHex.test(value) ? NAN : +value);\n}\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n  return value == null ? '' : baseToString(value);\n}\n\n/**\n * Computes `number` rounded to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round.\n * @param {number} [precision=0] The precision to round to.\n * @returns {number} Returns the rounded number.\n * @example\n *\n * _.round(4.006);\n * // => 4\n *\n * _.round(4.006, 2);\n * // => 4.01\n *\n * _.round(4060, -2);\n * // => 4100\n */\nvar round = createRound('round');\n\nmodule.exports = round;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/lodash.round/index.js","export {default as SpinSystem} from './SpinSystem';\nexport {default as simulate1D} from './simulate1D';\nexport {default as simulate2D} from './simulate2D';\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/nmr-simulation/src/index.js","'use strict';\n\nmodule.exports = abstractMatrix;\n\nvar LuDecomposition = require('./dc/lu');\nvar SvDecomposition = require('./dc/svd');\nvar arrayUtils = require('ml-array-utils');\nvar util = require('./util');\nvar MatrixTransposeView = require('./views/transpose');\nvar MatrixRowView = require('./views/row');\nvar MatrixSubView = require('./views/sub');\nvar MatrixSelectionView = require('./views/selection');\nvar MatrixColumnView = require('./views/column');\nvar MatrixFlipRowView = require('./views/flipRow');\nvar MatrixFlipColumnView = require('./views/flipColumn');\n\nfunction abstractMatrix(superCtor) {\n    if (superCtor === undefined) superCtor = Object;\n\n    /**\n     * Real matrix\n     * @class Matrix\n     * @param {number|Array|Matrix} nRows - Number of rows of the new matrix,\n     * 2D array containing the data or Matrix instance to clone\n     * @param {number} [nColumns] - Number of columns of the new matrix\n     */\n    class Matrix extends superCtor {\n        static get [Symbol.species]() {\n            return this;\n        }\n\n        /**\n         * Constructs a Matrix with the chosen dimensions from a 1D array\n         * @param {number} newRows - Number of rows\n         * @param {number} newColumns - Number of columns\n         * @param {Array} newData - A 1D array containing data for the matrix\n         * @return {Matrix} - The new matrix\n         */\n        static from1DArray(newRows, newColumns, newData) {\n            var length = newRows * newColumns;\n            if (length !== newData.length) {\n                throw new RangeError('Data length does not match given dimensions');\n            }\n            var newMatrix = new this(newRows, newColumns);\n            for (var row = 0; row < newRows; row++) {\n                for (var column = 0; column < newColumns; column++) {\n                    newMatrix.set(row, column, newData[row * newColumns + column]);\n                }\n            }\n            return newMatrix;\n        }\n\n        /**\n         * Creates a row vector, a matrix with only one row.\n         * @param {Array} newData - A 1D array containing data for the vector\n         * @return {Matrix} - The new matrix\n         */\n        static rowVector(newData) {\n            var vector = new this(1, newData.length);\n            for (var i = 0; i < newData.length; i++) {\n                vector.set(0, i, newData[i]);\n            }\n            return vector;\n        }\n\n        /**\n         * Creates a column vector, a matrix with only one column.\n         * @param {Array} newData - A 1D array containing data for the vector\n         * @return {Matrix} - The new matrix\n         */\n        static columnVector(newData) {\n            var vector = new this(newData.length, 1);\n            for (var i = 0; i < newData.length; i++) {\n                vector.set(i, 0, newData[i]);\n            }\n            return vector;\n        }\n\n        /**\n         * Creates an empty matrix with the given dimensions. Values will be undefined. Same as using new Matrix(rows, columns).\n         * @param {number} rows - Number of rows\n         * @param {number} columns - Number of columns\n         * @return {Matrix} - The new matrix\n         */\n        static empty(rows, columns) {\n            return new this(rows, columns);\n        }\n\n        /**\n         * Creates a matrix with the given dimensions. Values will be set to zero.\n         * @param {number} rows - Number of rows\n         * @param {number} columns - Number of columns\n         * @return {Matrix} - The new matrix\n         */\n        static zeros(rows, columns) {\n            return this.empty(rows, columns).fill(0);\n        }\n\n        /**\n         * Creates a matrix with the given dimensions. Values will be set to one.\n         * @param {number} rows - Number of rows\n         * @param {number} columns - Number of columns\n         * @return {Matrix} - The new matrix\n         */\n        static ones(rows, columns) {\n            return this.empty(rows, columns).fill(1);\n        }\n\n        /**\n         * Creates a matrix with the given dimensions. Values will be randomly set.\n         * @param {number} rows - Number of rows\n         * @param {number} columns - Number of columns\n         * @param {function} [rng=Math.random] - Random number generator\n         * @return {Matrix} The new matrix\n         */\n        static rand(rows, columns, rng) {\n            if (rng === undefined) rng = Math.random;\n            var matrix = this.empty(rows, columns);\n            for (var i = 0; i < rows; i++) {\n                for (var j = 0; j < columns; j++) {\n                    matrix.set(i, j, rng());\n                }\n            }\n            return matrix;\n        }\n\n        /**\n         * Creates a matrix with the given dimensions. Values will be random integers.\n         * @param {number} rows - Number of rows\n         * @param {number} columns - Number of columns\n         * @param {number} [maxValue=1000] - Maximum value\n         * @param {function} [rng=Math.random] - Random number generator\n         * @return {Matrix} The new matrix\n         */\n        static randInt(rows, columns, maxValue, rng) {\n            if (maxValue === undefined) maxValue = 1000;\n            if (rng === undefined) rng = Math.random;\n            var matrix = this.empty(rows, columns);\n            for (var i = 0; i < rows; i++) {\n                for (var j = 0; j < columns; j++) {\n                    var value = Math.floor(rng() * maxValue);\n                    matrix.set(i, j, value);\n                }\n            }\n            return matrix;\n        }\n\n        /**\n         * Creates an identity matrix with the given dimension. Values of the diagonal will be 1 and others will be 0.\n         * @param {number} rows - Number of rows\n         * @param {number} [columns=rows] - Number of columns\n         * @param {number} [value=1] - Value to fill the diagonal with\n         * @return {Matrix} - The new identity matrix\n         */\n        static eye(rows, columns, value) {\n            if (columns === undefined) columns = rows;\n            if (value === undefined) value = 1;\n            var min = Math.min(rows, columns);\n            var matrix = this.zeros(rows, columns);\n            for (var i = 0; i < min; i++) {\n                matrix.set(i, i, value);\n            }\n            return matrix;\n        }\n\n        /**\n         * Creates a diagonal matrix based on the given array.\n         * @param {Array} data - Array containing the data for the diagonal\n         * @param {number} [rows] - Number of rows (Default: data.length)\n         * @param {number} [columns] - Number of columns (Default: rows)\n         * @return {Matrix} - The new diagonal matrix\n         */\n        static diag(data, rows, columns) {\n            var l = data.length;\n            if (rows === undefined) rows = l;\n            if (columns === undefined) columns = rows;\n            var min = Math.min(l, rows, columns);\n            var matrix = this.zeros(rows, columns);\n            for (var i = 0; i < min; i++) {\n                matrix.set(i, i, data[i]);\n            }\n            return matrix;\n        }\n\n        /**\n         * Returns a matrix whose elements are the minimum between matrix1 and matrix2\n         * @param {Matrix} matrix1\n         * @param {Matrix} matrix2\n         * @return {Matrix}\n         */\n        static min(matrix1, matrix2) {\n            matrix1 = this.checkMatrix(matrix1);\n            matrix2 = this.checkMatrix(matrix2);\n            var rows = matrix1.rows;\n            var columns = matrix1.columns;\n            var result = new this(rows, columns);\n            for (var i = 0; i < rows; i++) {\n                for (var 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        /**\n         * Returns a matrix whose elements are the maximum between matrix1 and matrix2\n         * @param {Matrix} matrix1\n         * @param {Matrix} matrix2\n         * @return {Matrix}\n         */\n        static max(matrix1, matrix2) {\n            matrix1 = this.checkMatrix(matrix1);\n            matrix2 = this.checkMatrix(matrix2);\n            var rows = matrix1.rows;\n            var columns = matrix1.columns;\n            var result = new this(rows, columns);\n            for (var i = 0; i < rows; i++) {\n                for (var 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        /**\n         * Check that the provided value is a Matrix and tries to instantiate one if not\n         * @param {*} value - The value to check\n         * @return {Matrix}\n         */\n        static checkMatrix(value) {\n            return Matrix.isMatrix(value) ? value : new this(value);\n        }\n\n        /**\n         * Returns true if the argument is a Matrix, false otherwise\n         * @param {*} value - The value to check\n         * @return {boolean}\n         */\n        static isMatrix(value) {\n            return (value != null) && (value.klass === 'Matrix');\n        }\n\n        /**\n         * @prop {number} size - The number of elements in the matrix.\n         */\n        get size() {\n            return this.rows * this.columns;\n        }\n\n        /**\n         * Applies a callback for each element of the matrix. The function is called in the matrix (this) context.\n         * @param {function} callback - Function that will be called with two parameters : i (row) and j (column)\n         * @return {Matrix} this\n         */\n        apply(callback) {\n            if (typeof callback !== 'function') {\n                throw new TypeError('callback must be a function');\n            }\n            var ii = this.rows;\n            var jj = this.columns;\n            for (var i = 0; i < ii; i++) {\n                for (var j = 0; j < jj; j++) {\n                    callback.call(this, i, j);\n                }\n            }\n            return this;\n        }\n\n        /**\n         * Returns a new 1D array filled row by row with the matrix values\n         * @return {Array}\n         */\n        to1DArray() {\n            var array = new Array(this.size);\n            for (var i = 0; i < this.rows; i++) {\n                for (var j = 0; j < this.columns; j++) {\n                    array[i * this.columns + j] = this.get(i, j);\n                }\n            }\n            return array;\n        }\n\n        /**\n         * Returns a 2D array containing a copy of the data\n         * @return {Array}\n         */\n        to2DArray() {\n            var copy = new Array(this.rows);\n            for (var i = 0; i < this.rows; i++) {\n                copy[i] = new Array(this.columns);\n                for (var j = 0; j < this.columns; j++) {\n                    copy[i][j] = this.get(i, j);\n                }\n            }\n            return copy;\n        }\n\n        /**\n         * @return {boolean} true if the matrix has one row\n         */\n        isRowVector() {\n            return this.rows === 1;\n        }\n\n        /**\n         * @return {boolean} true if the matrix has one column\n         */\n        isColumnVector() {\n            return this.columns === 1;\n        }\n\n        /**\n         * @return {boolean} true if the matrix has one row or one column\n         */\n        isVector() {\n            return (this.rows === 1) || (this.columns === 1);\n        }\n\n        /**\n         * @return {boolean} true if the matrix has the same number of rows and columns\n         */\n        isSquare() {\n            return this.rows === this.columns;\n        }\n\n        /**\n         * @return {boolean} true if the matrix is square and has the same values on both sides of the diagonal\n         */\n        isSymmetric() {\n            if (this.isSquare()) {\n                for (var i = 0; i < this.rows; i++) {\n                    for (var 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        /**\n         * Sets a given element of the matrix. mat.set(3,4,1) is equivalent to mat[3][4]=1\n         * @abstract\n         * @param {number} rowIndex - Index of the row\n         * @param {number} columnIndex - Index of the column\n         * @param {number} value - The new value for the element\n         * @return {Matrix} this\n         */\n        set(rowIndex, columnIndex, value) { // eslint-disable-line no-unused-vars\n            throw new Error('set method is unimplemented');\n        }\n\n        /**\n         * Returns the given element of the matrix. mat.get(3,4) is equivalent to matrix[3][4]\n         * @abstract\n         * @param {number} rowIndex - Index of the row\n         * @param {number} columnIndex - Index of the column\n         * @return {number}\n         */\n        get(rowIndex, columnIndex) { // eslint-disable-line no-unused-vars\n            throw new Error('get method is unimplemented');\n        }\n\n        /**\n         * Creates a new matrix that is a repetition of the current matrix. New matrix has rowRep times the number of\n         * rows of the matrix, and colRep times the number of columns of the matrix\n         * @param {number} rowRep - Number of times the rows should be repeated\n         * @param {number} colRep - Number of times the columns should be re\n         * @return {Matrix}\n         * @example\n         * var matrix = new Matrix([[1,2]]);\n         * matrix.repeat(2); // [[1,2],[1,2]]\n         */\n        repeat(rowRep, colRep) {\n            rowRep = rowRep || 1;\n            colRep = colRep || 1;\n            var matrix = new this.constructor[Symbol.species](this.rows * rowRep, this.columns * colRep);\n            for (var i = 0; i < rowRep; i++) {\n                for (var j = 0; j < colRep; j++) {\n                    matrix.setSubMatrix(this, this.rows * i, this.columns * j);\n                }\n            }\n            return matrix;\n        }\n\n        /**\n         * Fills the matrix with a given value. All elements will be set to this value.\n         * @param {number} value - New value\n         * @return {Matrix} this\n         */\n        fill(value) {\n            for (var i = 0; i < this.rows; i++) {\n                for (var j = 0; j < this.columns; j++) {\n                    this.set(i, j, value);\n                }\n            }\n            return this;\n        }\n\n        /**\n         * Negates the matrix. All elements will be multiplied by (-1)\n         * @return {Matrix} this\n         */\n        neg() {\n            return this.mulS(-1);\n        }\n\n        /**\n         * Returns a new array from the given row index\n         * @param {number} index - Row index\n         * @return {Array}\n         */\n        getRow(index) {\n            util.checkRowIndex(this, index);\n            var row = new Array(this.columns);\n            for (var i = 0; i < this.columns; i++) {\n                row[i] = this.get(index, i);\n            }\n            return row;\n        }\n\n        /**\n         * Returns a new row vector from the given row index\n         * @param {number} index - Row index\n         * @return {Matrix}\n         */\n        getRowVector(index) {\n            return this.constructor.rowVector(this.getRow(index));\n        }\n\n        /**\n         * Sets a row at the given index\n         * @param {number} index - Row index\n         * @param {Array|Matrix} array - Array or vector\n         * @return {Matrix} this\n         */\n        setRow(index, array) {\n            util.checkRowIndex(this, index);\n            array = util.checkRowVector(this, array);\n            for (var i = 0; i < this.columns; i++) {\n                this.set(index, i, array[i]);\n            }\n            return this;\n        }\n\n        /**\n         * Swaps two rows\n         * @param {number} row1 - First row index\n         * @param {number} row2 - Second row index\n         * @return {Matrix} this\n         */\n        swapRows(row1, row2) {\n            util.checkRowIndex(this, row1);\n            util.checkRowIndex(this, row2);\n            for (var i = 0; i < this.columns; i++) {\n                var 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        /**\n         * Returns a new array from the given column index\n         * @param {number} index - Column index\n         * @return {Array}\n         */\n        getColumn(index) {\n            util.checkColumnIndex(this, index);\n            var column = new Array(this.rows);\n            for (var i = 0; i < this.rows; i++) {\n                column[i] = this.get(i, index);\n            }\n            return column;\n        }\n\n        /**\n         * Returns a new column vector from the given column index\n         * @param {number} index - Column index\n         * @return {Matrix}\n         */\n        getColumnVector(index) {\n            return this.constructor.columnVector(this.getColumn(index));\n        }\n\n        /**\n         * Sets a column at the given index\n         * @param {number} index - Column index\n         * @param {Array|Matrix} array - Array or vector\n         * @return {Matrix} this\n         */\n        setColumn(index, array) {\n            util.checkColumnIndex(this, index);\n            array = util.checkColumnVector(this, array);\n            for (var i = 0; i < this.rows; i++) {\n                this.set(i, index, array[i]);\n            }\n            return this;\n        }\n\n        /**\n         * Swaps two columns\n         * @param {number} column1 - First column index\n         * @param {number} column2 - Second column index\n         * @return {Matrix} this\n         */\n        swapColumns(column1, column2) {\n            util.checkColumnIndex(this, column1);\n            util.checkColumnIndex(this, column2);\n            for (var i = 0; i < this.rows; i++) {\n                var 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        /**\n         * Adds the values of a vector to each row\n         * @param {Array|Matrix} vector - Array or vector\n         * @return {Matrix} this\n         */\n        addRowVector(vector) {\n            vector = util.checkRowVector(this, vector);\n            for (var i = 0; i < this.rows; i++) {\n                for (var 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        /**\n         * Subtracts the values of a vector from each row\n         * @param {Array|Matrix} vector - Array or vector\n         * @return {Matrix} this\n         */\n        subRowVector(vector) {\n            vector = util.checkRowVector(this, vector);\n            for (var i = 0; i < this.rows; i++) {\n                for (var 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        /**\n         * Multiplies the values of a vector with each row\n         * @param {Array|Matrix} vector - Array or vector\n         * @return {Matrix} this\n         */\n        mulRowVector(vector) {\n            vector = util.checkRowVector(this, vector);\n            for (var i = 0; i < this.rows; i++) {\n                for (var 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        /**\n         * Divides the values of each row by those of a vector\n         * @param {Array|Matrix} vector - Array or vector\n         * @return {Matrix} this\n         */\n        divRowVector(vector) {\n            vector = util.checkRowVector(this, vector);\n            for (var i = 0; i < this.rows; i++) {\n                for (var 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        /**\n         * Adds the values of a vector to each column\n         * @param {Array|Matrix} vector - Array or vector\n         * @return {Matrix} this\n         */\n        addColumnVector(vector) {\n            vector = util.checkColumnVector(this, vector);\n            for (var i = 0; i < this.rows; i++) {\n                for (var 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        /**\n         * Subtracts the values of a vector from each column\n         * @param {Array|Matrix} vector - Array or vector\n         * @return {Matrix} this\n         */\n        subColumnVector(vector) {\n            vector = util.checkColumnVector(this, vector);\n            for (var i = 0; i < this.rows; i++) {\n                for (var 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        /**\n         * Multiplies the values of a vector with each column\n         * @param {Array|Matrix} vector - Array or vector\n         * @return {Matrix} this\n         */\n        mulColumnVector(vector) {\n            vector = util.checkColumnVector(this, vector);\n            for (var i = 0; i < this.rows; i++) {\n                for (var 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        /**\n         * Divides the values of each column by those of a vector\n         * @param {Array|Matrix} vector - Array or vector\n         * @return {Matrix} this\n         */\n        divColumnVector(vector) {\n            vector = util.checkColumnVector(this, vector);\n            for (var i = 0; i < this.rows; i++) {\n                for (var 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        /**\n         * Multiplies the values of a row with a scalar\n         * @param {number} index - Row index\n         * @param {number} value\n         * @return {Matrix} this\n         */\n        mulRow(index, value) {\n            util.checkRowIndex(this, index);\n            for (var i = 0; i < this.columns; i++) {\n                this.set(index, i, this.get(index, i) * value);\n            }\n            return this;\n        }\n\n        /**\n         * Multiplies the values of a column with a scalar\n         * @param {number} index - Column index\n         * @param {number} value\n         * @return {Matrix} this\n         */\n        mulColumn(index, value) {\n            util.checkColumnIndex(this, index);\n            for (var i = 0; i < this.rows; i++) {\n                this.set(i, index, this.get(i, index) * value);\n            }\n            return this;\n        }\n\n        /**\n         * Returns the maximum value of the matrix\n         * @return {number}\n         */\n        max() {\n            var v = this.get(0, 0);\n            for (var i = 0; i < this.rows; i++) {\n                for (var j = 0; j < this.columns; j++) {\n                    if (this.get(i, j) > v) {\n                        v = this.get(i, j);\n                    }\n                }\n            }\n            return v;\n        }\n\n        /**\n         * Returns the index of the maximum value\n         * @return {Array}\n         */\n        maxIndex() {\n            var v = this.get(0, 0);\n            var idx = [0, 0];\n            for (var i = 0; i < this.rows; i++) {\n                for (var 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        /**\n         * Returns the minimum value of the matrix\n         * @return {number}\n         */\n        min() {\n            var v = this.get(0, 0);\n            for (var i = 0; i < this.rows; i++) {\n                for (var j = 0; j < this.columns; j++) {\n                    if (this.get(i, j) < v) {\n                        v = this.get(i, j);\n                    }\n                }\n            }\n            return v;\n        }\n\n        /**\n         * Returns the index of the minimum value\n         * @return {Array}\n         */\n        minIndex() {\n            var v = this.get(0, 0);\n            var idx = [0, 0];\n            for (var i = 0; i < this.rows; i++) {\n                for (var 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        /**\n         * Returns the maximum value of one row\n         * @param {number} row - Row index\n         * @return {number}\n         */\n        maxRow(row) {\n            util.checkRowIndex(this, row);\n            var v = this.get(row, 0);\n            for (var 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        /**\n         * Returns the index of the maximum value of one row\n         * @param {number} row - Row index\n         * @return {Array}\n         */\n        maxRowIndex(row) {\n            util.checkRowIndex(this, row);\n            var v = this.get(row, 0);\n            var idx = [row, 0];\n            for (var 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        /**\n         * Returns the minimum value of one row\n         * @param {number} row - Row index\n         * @return {number}\n         */\n        minRow(row) {\n            util.checkRowIndex(this, row);\n            var v = this.get(row, 0);\n            for (var 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        /**\n         * Returns the index of the maximum value of one row\n         * @param {number} row - Row index\n         * @return {Array}\n         */\n        minRowIndex(row) {\n            util.checkRowIndex(this, row);\n            var v = this.get(row, 0);\n            var idx = [row, 0];\n            for (var 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        /**\n         * Returns the maximum value of one column\n         * @param {number} column - Column index\n         * @return {number}\n         */\n        maxColumn(column) {\n            util.checkColumnIndex(this, column);\n            var v = this.get(0, column);\n            for (var 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        /**\n         * Returns the index of the maximum value of one column\n         * @param {number} column - Column index\n         * @return {Array}\n         */\n        maxColumnIndex(column) {\n            util.checkColumnIndex(this, column);\n            var v = this.get(0, column);\n            var idx = [0, column];\n            for (var 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        /**\n         * Returns the minimum value of one column\n         * @param {number} column - Column index\n         * @return {number}\n         */\n        minColumn(column) {\n            util.checkColumnIndex(this, column);\n            var v = this.get(0, column);\n            for (var 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        /**\n         * Returns the index of the minimum value of one column\n         * @param {number} column - Column index\n         * @return {Array}\n         */\n        minColumnIndex(column) {\n            util.checkColumnIndex(this, column);\n            var v = this.get(0, column);\n            var idx = [0, column];\n            for (var 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        /**\n         * Returns an array containing the diagonal values of the matrix\n         * @return {Array}\n         */\n        diag() {\n            var min = Math.min(this.rows, this.columns);\n            var diag = new Array(min);\n            for (var i = 0; i < min; i++) {\n                diag[i] = this.get(i, i);\n            }\n            return diag;\n        }\n\n        /**\n         * Returns the sum by the argument given, if no argument given,\n         * it returns the sum of all elements of the matrix.\n         * @param {string} by - sum by 'row' or 'column'.\n         * @return {Matrix|number}\n         */\n        sum(by) {\n            switch (by) {\n                case 'row':\n                    return util.sumByRow(this);\n                case 'column':\n                    return util.sumByColumn(this);\n                default:\n                    return util.sumAll(this);\n            }\n        }\n\n        /**\n         * Returns the mean of all elements of the matrix\n         * @return {number}\n         */\n        mean() {\n            return this.sum() / this.size;\n        }\n\n        /**\n         * Returns the product of all elements of the matrix\n         * @return {number}\n         */\n        prod() {\n            var prod = 1;\n            for (var i = 0; i < this.rows; i++) {\n                for (var j = 0; j < this.columns; j++) {\n                    prod *= this.get(i, j);\n                }\n            }\n            return prod;\n        }\n\n        /**\n         * Computes the cumulative sum of the matrix elements (in place, row by row)\n         * @return {Matrix} this\n         */\n        cumulativeSum() {\n            var sum = 0;\n            for (var i = 0; i < this.rows; i++) {\n                for (var 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        /**\n         * Computes the dot (scalar) product between the matrix and another\n         * @param {Matrix} vector2 vector\n         * @return {number}\n         */\n        dot(vector2) {\n            if (Matrix.isMatrix(vector2)) vector2 = vector2.to1DArray();\n            var vector1 = this.to1DArray();\n            if (vector1.length !== vector2.length) {\n                throw new RangeError('vectors do not have the same size');\n            }\n            var dot = 0;\n            for (var i = 0; i < vector1.length; i++) {\n                dot += vector1[i] * vector2[i];\n            }\n            return dot;\n        }\n\n        /**\n         * Returns the matrix product between this and other\n         * @param {Matrix} other\n         * @return {Matrix}\n         */\n        mmul(other) {\n            other = this.constructor.checkMatrix(other);\n            if (this.columns !== other.rows) {\n                // eslint-disable-next-line no-console\n                console.warn('Number of columns of left matrix are not equal to number of rows of right matrix.');\n            }\n\n            var m = this.rows;\n            var n = this.columns;\n            var p = other.columns;\n\n            var result = new this.constructor[Symbol.species](m, p);\n\n            var Bcolj = new Array(n);\n            for (var j = 0; j < p; j++) {\n                for (var k = 0; k < n; k++) {\n                    Bcolj[k] = other.get(k, j);\n                }\n\n                for (var i = 0; i < m; i++) {\n                    var s = 0;\n                    for (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        strassen2x2(other) {\n            var result = new this.constructor[Symbol.species](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            var result = new this.constructor[Symbol.species](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        /**\n         * Returns the matrix product between x and y. More efficient than mmul(other) only when we multiply squared matrix and when the size of the matrix is > 1000.\n         * @param {Matrix} y\n         * @return {Matrix}\n         */\n        mmulStrassen(y) {\n            var x = this.clone();\n            var r1 = x.rows;\n            var c1 = x.columns;\n            var r2 = y.rows;\n            var c2 = y.columns;\n            if (c1 !== r2) {\n                // eslint-disable-next-line no-console\n                console.warn(`Multiplying ${r1} x ${c1} and ${r2} x ${c2} matrix: dimensions do not match.`);\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                var r = mat.rows;\n                var c = mat.columns;\n                if ((r === rows) && (c === cols)) {\n                    return mat;\n                } else {\n                    var resultat = Matrix.zeros(rows, cols);\n                    resultat = resultat.setSubMatrix(mat, 0, 0);\n                    return resultat;\n                }\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            var r = Math.max(r1, r2);\n            var 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                var halfRows = parseInt(a.rows / 2);\n                var halfCols = parseInt(a.columns / 2);\n                // Subdivide input matrices.\n                var a11 = a.subMatrix(0, halfRows - 1, 0, halfCols - 1);\n                var b11 = b.subMatrix(0, halfRows - 1, 0, halfCols - 1);\n\n                var a12 = a.subMatrix(0, halfRows - 1, halfCols, a.columns - 1);\n                var b12 = b.subMatrix(0, halfRows - 1, halfCols, b.columns - 1);\n\n                var a21 = a.subMatrix(halfRows, a.rows - 1, 0, halfCols - 1);\n                var b21 = b.subMatrix(halfRows, b.rows - 1, 0, halfCols - 1);\n\n                var a22 = a.subMatrix(halfRows, a.rows - 1, halfCols, a.columns - 1);\n                var b22 = b.subMatrix(halfRows, b.rows - 1, halfCols, b.columns - 1);\n\n                // Compute intermediate values.\n                var m1 = blockMult(Matrix.add(a11, a22), Matrix.add(b11, b22), halfRows, halfCols);\n                var m2 = blockMult(Matrix.add(a21, a22), b11, halfRows, halfCols);\n                var m3 = blockMult(a11, Matrix.sub(b12, b22), halfRows, halfCols);\n                var m4 = blockMult(a22, Matrix.sub(b21, b11), halfRows, halfCols);\n                var m5 = blockMult(Matrix.add(a11, a12), b22, halfRows, halfCols);\n                var m6 = blockMult(Matrix.sub(a21, a11), Matrix.add(b11, b12), halfRows, halfCols);\n                var m7 = blockMult(Matrix.sub(a12, a22), Matrix.add(b21, b22), halfRows, halfCols);\n\n                // Combine intermediate values into the output.\n                var c11 = Matrix.add(m1, m4);\n                c11.sub(m5);\n                c11.add(m7);\n                var c12 = Matrix.add(m3, m5);\n                var c21 = Matrix.add(m2, m4);\n                var c22 = Matrix.sub(m1, m2);\n                c22.add(m3);\n                c22.add(m6);\n\n                //Crop output to the desired size (undo dynamic padding).\n                var resultat = Matrix.zeros(2 * c11.rows, 2 * c11.columns);\n                resultat = resultat.setSubMatrix(c11, 0, 0);\n                resultat = resultat.setSubMatrix(c12, c11.rows, 0);\n                resultat = resultat.setSubMatrix(c21, 0, c11.columns);\n                resultat = resultat.setSubMatrix(c22, c11.rows, c11.columns);\n                return resultat.subMatrix(0, rows - 1, 0, cols - 1);\n            }\n            return blockMult(x, y, r, c);\n        }\n\n        /**\n         * Returns a row-by-row scaled matrix\n         * @param {number} [min=0] - Minimum scaled value\n         * @param {number} [max=1] - Maximum scaled value\n         * @return {Matrix} - The scaled matrix\n         */\n        scaleRows(min, max) {\n            min = min === undefined ? 0 : min;\n            max = max === undefined ? 1 : max;\n            if (min >= max) {\n                throw new RangeError('min should be strictly smaller than max');\n            }\n            var newMatrix = this.constructor.empty(this.rows, this.columns);\n            for (var i = 0; i < this.rows; i++) {\n                var scaled = arrayUtils.scale(this.getRow(i), {min, max});\n                newMatrix.setRow(i, scaled);\n            }\n            return newMatrix;\n        }\n\n        /**\n         * Returns a new column-by-column scaled matrix\n         * @param {number} [min=0] - Minimum scaled value\n         * @param {number} [max=1] - Maximum scaled value\n         * @return {Matrix} - The new scaled matrix\n         * @example\n         * var matrix = new Matrix([[1,2],[-1,0]]);\n         * var scaledMatrix = matrix.scaleColumns(); // [[1,1],[0,0]]\n         */\n        scaleColumns(min, max) {\n            min = min === undefined ? 0 : min;\n            max = max === undefined ? 1 : max;\n            if (min >= max) {\n                throw new RangeError('min should be strictly smaller than max');\n            }\n            var newMatrix = this.constructor.empty(this.rows, this.columns);\n            for (var i = 0; i < this.columns; i++) {\n                var scaled = arrayUtils.scale(this.getColumn(i), {\n                    min: min,\n                    max: max\n                });\n                newMatrix.setColumn(i, scaled);\n            }\n            return newMatrix;\n        }\n\n\n        /**\n         * Returns the Kronecker product (also known as tensor product) between this and other\n         * See https://en.wikipedia.org/wiki/Kronecker_product\n         * @param {Matrix} other\n         * @return {Matrix}\n         */\n        kroneckerProduct(other) {\n            other = this.constructor.checkMatrix(other);\n\n            var m = this.rows;\n            var n = this.columns;\n            var p = other.rows;\n            var q = other.columns;\n\n            var result = new this.constructor[Symbol.species](m * p, n * q);\n            for (var i = 0; i < m; i++) {\n                for (var j = 0; j < n; j++) {\n                    for (var k = 0; k < p; k++) {\n                        for (var l = 0; l < q; l++) {\n                            result[p * i + k][q * j + l] = this.get(i, j) * other.get(k, l);\n                        }\n                    }\n                }\n            }\n            return result;\n        }\n\n        /**\n         * Transposes the matrix and returns a new one containing the result\n         * @return {Matrix}\n         */\n        transpose() {\n            var result = new this.constructor[Symbol.species](this.columns, this.rows);\n            for (var i = 0; i < this.rows; i++) {\n                for (var j = 0; j < this.columns; j++) {\n                    result.set(j, i, this.get(i, j));\n                }\n            }\n            return result;\n        }\n\n        /**\n         * Sorts the rows (in place)\n         * @param {function} compareFunction - usual Array.prototype.sort comparison function\n         * @return {Matrix} this\n         */\n        sortRows(compareFunction) {\n            if (compareFunction === undefined) compareFunction = compareNumbers;\n            for (var i = 0; i < this.rows; i++) {\n                this.setRow(i, this.getRow(i).sort(compareFunction));\n            }\n            return this;\n        }\n\n        /**\n         * Sorts the columns (in place)\n         * @param {function} compareFunction - usual Array.prototype.sort comparison function\n         * @return {Matrix} this\n         */\n        sortColumns(compareFunction) {\n            if (compareFunction === undefined) compareFunction = compareNumbers;\n            for (var i = 0; i < this.columns; i++) {\n                this.setColumn(i, this.getColumn(i).sort(compareFunction));\n            }\n            return this;\n        }\n\n        /**\n         * Returns a subset of the matrix\n         * @param {number} startRow - First row index\n         * @param {number} endRow - Last row index\n         * @param {number} startColumn - First column index\n         * @param {number} endColumn - Last column index\n         * @return {Matrix}\n         */\n        subMatrix(startRow, endRow, startColumn, endColumn) {\n            util.checkRange(this, startRow, endRow, startColumn, endColumn);\n            var newMatrix = new this.constructor[Symbol.species](endRow - startRow + 1, endColumn - startColumn + 1);\n            for (var i = startRow; i <= endRow; i++) {\n                for (var j = startColumn; j <= endColumn; j++) {\n                    newMatrix[i - startRow][j - startColumn] = this.get(i, j);\n                }\n            }\n            return newMatrix;\n        }\n\n        /**\n         * Returns a subset of the matrix based on an array of row indices\n         * @param {Array} indices - Array containing the row indices\n         * @param {number} [startColumn = 0] - First column index\n         * @param {number} [endColumn = this.columns-1] - Last column index\n         * @return {Matrix}\n         */\n        subMatrixRow(indices, startColumn, endColumn) {\n            if (startColumn === undefined) startColumn = 0;\n            if (endColumn === undefined) endColumn = this.columns - 1;\n            if ((startColumn > endColumn) || (startColumn < 0) || (startColumn >= this.columns) || (endColumn < 0) || (endColumn >= this.columns)) {\n                throw new RangeError('Argument out of range');\n            }\n\n            var newMatrix = new this.constructor[Symbol.species](indices.length, endColumn - startColumn + 1);\n            for (var i = 0; i < indices.length; i++) {\n                for (var 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        /**\n         * Returns a subset of the matrix based on an array of column indices\n         * @param {Array} indices - Array containing the column indices\n         * @param {number} [startRow = 0] - First row index\n         * @param {number} [endRow = this.rows-1] - Last row index\n         * @return {Matrix}\n         */\n        subMatrixColumn(indices, startRow, endRow) {\n            if (startRow === undefined) startRow = 0;\n            if (endRow === undefined) endRow = this.rows - 1;\n            if ((startRow > endRow) || (startRow < 0) || (startRow >= this.rows) || (endRow < 0) || (endRow >= this.rows)) {\n                throw new RangeError('Argument out of range');\n            }\n\n            var newMatrix = new this.constructor[Symbol.species](endRow - startRow + 1, indices.length);\n            for (var i = 0; i < indices.length; i++) {\n                for (var 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        /**\n         * Set a part of the matrix to the given sub-matrix\n         * @param {Matrix|Array< Array >} matrix - The source matrix from which to extract values.\n         * @param {number} startRow - The index of the first row to set\n         * @param {number} startColumn - The index of the first column to set\n         * @return {Matrix}\n         */\n        setSubMatrix(matrix, startRow, startColumn) {\n            matrix = this.constructor.checkMatrix(matrix);\n            var endRow = startRow + matrix.rows - 1;\n            var endColumn = startColumn + matrix.columns - 1;\n            util.checkRange(this, startRow, endRow, startColumn, endColumn);\n            for (var i = 0; i < matrix.rows; i++) {\n                for (var j = 0; j < matrix.columns; j++) {\n                    this[startRow + i][startColumn + j] = matrix.get(i, j);\n                }\n            }\n            return this;\n        }\n\n        /**\n         * Return a new matrix based on a selection of rows and columns\n         * @param {Array<number>} rowIndices - The row indices to select. Order matters and an index can be more than once.\n         * @param {Array<number>} columnIndices - The column indices to select. Order matters and an index can be use more than once.\n         * @return {Matrix} The new matrix\n         */\n        selection(rowIndices, columnIndices) {\n            var indices = util.checkIndices(this, rowIndices, columnIndices);\n            var newMatrix = new this.constructor[Symbol.species](rowIndices.length, columnIndices.length);\n            for (var i = 0; i < indices.row.length; i++) {\n                var rowIndex = indices.row[i];\n                for (var j = 0; j < indices.column.length; j++) {\n                    var columnIndex = indices.column[j];\n                    newMatrix[i][j] = this.get(rowIndex, columnIndex);\n                }\n            }\n            return newMatrix;\n        }\n\n        /**\n         * Returns the trace of the matrix (sum of the diagonal elements)\n         * @return {number}\n         */\n        trace() {\n            var min = Math.min(this.rows, this.columns);\n            var trace = 0;\n            for (var i = 0; i < min; i++) {\n                trace += this.get(i, i);\n            }\n            return trace;\n        }\n\n        /*\n         Matrix views\n         */\n\n        /**\n         * Returns a view of the transposition of the matrix\n         * @return {MatrixTransposeView}\n         */\n        transposeView() {\n            return new MatrixTransposeView(this);\n        }\n\n        /**\n         * Returns a view of the row vector with the given index\n         * @param {number} row - row index of the vector\n         * @return {MatrixRowView}\n         */\n        rowView(row) {\n            util.checkRowIndex(this, row);\n            return new MatrixRowView(this, row);\n        }\n\n        /**\n         * Returns a view of the column vector with the given index\n         * @param {number} column - column index of the vector\n         * @return {MatrixColumnView}\n         */\n        columnView(column) {\n            util.checkColumnIndex(this, column);\n            return new MatrixColumnView(this, column);\n        }\n\n        /**\n         * Returns a view of the matrix flipped in the row axis\n         * @return {MatrixFlipRowView}\n         */\n        flipRowView() {\n            return new MatrixFlipRowView(this);\n        }\n\n        /**\n         * Returns a view of the matrix flipped in the column axis\n         * @return {MatrixFlipColumnView}\n         */\n        flipColumnView() {\n            return new MatrixFlipColumnView(this);\n        }\n\n        /**\n         * Returns a view of a submatrix giving the index boundaries\n         * @param {number} startRow - first row index of the submatrix\n         * @param {number} endRow - last row index of the submatrix\n         * @param {number} startColumn - first column index of the submatrix\n         * @param {number} endColumn - last column index of the submatrix\n         * @return {MatrixSubView}\n         */\n        subMatrixView(startRow, endRow, startColumn, endColumn) {\n            return new MatrixSubView(this, startRow, endRow, startColumn, endColumn);\n        }\n\n        /**\n         * Returns a view of the cross of the row indices and the column indices\n         * @example\n         * // resulting vector is [[2], [2]]\n         * var matrix = new Matrix([[1,2,3], [4,5,6]]).selectionView([0, 0], [1])\n         * @param {Array<number>} rowIndices\n         * @param {Array<number>} columnIndices\n         * @return {MatrixSelectionView}\n         */\n        selectionView(rowIndices, columnIndices) {\n            return new MatrixSelectionView(this, rowIndices, columnIndices);\n        }\n\n\n        /**\n        * Calculates and returns the determinant of a matrix as a Number\n        * @example\n        *   new Matrix([[1,2,3], [4,5,6]]).det()\n        * @return {number}\n        */\n        det() {\n            if (this.isSquare()) {\n                var a, b, c, d;\n                if (this.columns === 2) {\n                    // 2 x 2 matrix\n                    a = this.get(0, 0);\n                    b = this.get(0, 1);\n                    c = this.get(1, 0);\n                    d = this.get(1, 1);\n\n                    return a * d - (b * c);\n                } else if (this.columns === 3) {\n                    // 3 x 3 matrix\n                    var subMatrix0, subMatrix1, subMatrix2;\n                    subMatrix0 = this.selectionView([1, 2], [1, 2]);\n                    subMatrix1 = this.selectionView([1, 2], [0, 2]);\n                    subMatrix2 = this.selectionView([1, 2], [0, 1]);\n                    a = this.get(0, 0);\n                    b = this.get(0, 1);\n                    c = this.get(0, 2);\n\n                    return a * subMatrix0.det() - b * subMatrix1.det() + c * subMatrix2.det();\n                } else {\n                    // general purpose determinant using the LU decomposition\n                    return new LuDecomposition(this).determinant;\n                }\n\n            } else {\n                throw Error('Determinant can only be calculated for a square matrix.');\n            }\n        }\n\n        /**\n         * Returns inverse of a matrix if it exists or the pseudoinverse\n         * @param {number} threshold - threshold for taking inverse of singular values (default = 1e-15)\n         * @return {Matrix} the (pseudo)inverted matrix.\n         */\n        pseudoInverse(threshold) {\n            if (threshold === undefined) threshold = Number.EPSILON;\n            var svdSolution = new SvDecomposition(this, {autoTranspose: true});\n\n            var U = svdSolution.leftSingularVectors;\n            var V = svdSolution.rightSingularVectors;\n            var s = svdSolution.diagonal;\n\n            for (var 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            // convert list to diagonal\n            s = this.constructor[Symbol.species].diag(s);\n            return V.mmul(s.mmul(U.transposeView()));\n        }\n    }\n\n    Matrix.prototype.klass = 'Matrix';\n\n    /**\n     * @private\n     * Check that two matrices have the same dimensions\n     * @param {Matrix} matrix\n     * @param {Matrix} otherMatrix\n     */\n    function checkDimensions(matrix, otherMatrix) { // eslint-disable-line no-unused-vars\n        if (matrix.rows !== otherMatrix.rows ||\n            matrix.columns !== otherMatrix.columns) {\n            throw new RangeError('Matrices dimensions must be equal');\n        }\n    }\n\n    function compareNumbers(a, b) {\n        return a - b;\n    }\n\n    /*\n     Synonyms\n     */\n\n    Matrix.random = Matrix.rand;\n    Matrix.diagonal = Matrix.diag;\n    Matrix.prototype.diagonal = Matrix.prototype.diag;\n    Matrix.identity = Matrix.eye;\n    Matrix.prototype.negate = Matrix.prototype.neg;\n    Matrix.prototype.tensorProduct = Matrix.prototype.kroneckerProduct;\n    Matrix.prototype.determinant = Matrix.prototype.det;\n\n    /*\n     Add dynamically instance and static methods for mathematical operations\n     */\n\n    var inplaceOperator = `\n(function %name%(value) {\n    if (typeof value === 'number') return this.%name%S(value);\n    return this.%name%M(value);\n})\n`;\n\n    var inplaceOperatorScalar = `\n(function %name%S(value) {\n    for (var i = 0; i < this.rows; i++) {\n        for (var j = 0; j < this.columns; j++) {\n            this.set(i, j, this.get(i, j) %op% value);\n        }\n    }\n    return this;\n})\n`;\n\n    var inplaceOperatorMatrix = `\n(function %name%M(matrix) {\n    matrix = this.constructor.checkMatrix(matrix);\n    checkDimensions(this, matrix);\n    for (var i = 0; i < this.rows; i++) {\n        for (var j = 0; j < this.columns; j++) {\n            this.set(i, j, this.get(i, j) %op% matrix.get(i, j));\n        }\n    }\n    return this;\n})\n`;\n\n    var staticOperator = `\n(function %name%(matrix, value) {\n    var newMatrix = new this[Symbol.species](matrix);\n    return newMatrix.%name%(value);\n})\n`;\n\n    var inplaceMethod = `\n(function %name%() {\n    for (var i = 0; i < this.rows; i++) {\n        for (var j = 0; j < this.columns; j++) {\n            this.set(i, j, %method%(this.get(i, j)));\n        }\n    }\n    return this;\n})\n`;\n\n    var staticMethod = `\n(function %name%(matrix) {\n    var newMatrix = new this[Symbol.species](matrix);\n    return newMatrix.%name%();\n})\n`;\n\n    var inplaceMethodWithArgs = `\n(function %name%(%args%) {\n    for (var i = 0; i < this.rows; i++) {\n        for (var j = 0; j < this.columns; j++) {\n            this.set(i, j, %method%(this.get(i, j), %args%));\n        }\n    }\n    return this;\n})\n`;\n\n    var staticMethodWithArgs = `\n(function %name%(matrix, %args%) {\n    var newMatrix = new this[Symbol.species](matrix);\n    return newMatrix.%name%(%args%);\n})\n`;\n\n\n    var inplaceMethodWithOneArgScalar = `\n(function %name%S(value) {\n    for (var i = 0; i < this.rows; i++) {\n        for (var j = 0; j < this.columns; j++) {\n            this.set(i, j, %method%(this.get(i, j), value));\n        }\n    }\n    return this;\n})\n`;\n    var inplaceMethodWithOneArgMatrix = `\n(function %name%M(matrix) {\n    matrix = this.constructor.checkMatrix(matrix);\n    checkDimensions(this, matrix);\n    for (var i = 0; i < this.rows; i++) {\n        for (var j = 0; j < this.columns; j++) {\n            this.set(i, j, %method%(this.get(i, j), matrix.get(i, j)));\n        }\n    }\n    return this;\n})\n`;\n\n    var inplaceMethodWithOneArg = `\n(function %name%(value) {\n    if (typeof value === 'number') return this.%name%S(value);\n    return this.%name%M(value);\n})\n`;\n\n    var staticMethodWithOneArg = staticMethodWithArgs;\n\n    var operators = [\n        // Arithmetic operators\n        ['+', 'add'],\n        ['-', 'sub', 'subtract'],\n        ['*', 'mul', 'multiply'],\n        ['/', 'div', 'divide'],\n        ['%', 'mod', 'modulus'],\n        // Bitwise operators\n        ['&', 'and'],\n        ['|', 'or'],\n        ['^', 'xor'],\n        ['<<', 'leftShift'],\n        ['>>', 'signPropagatingRightShift'],\n        ['>>>', 'rightShift', 'zeroFillRightShift']\n    ];\n\n    var i;\n\n    for (var operator of operators) {\n        var inplaceOp = eval(fillTemplateFunction(inplaceOperator, {name: operator[1], op: operator[0]}));\n        var inplaceOpS = eval(fillTemplateFunction(inplaceOperatorScalar, {name: operator[1] + 'S', op: operator[0]}));\n        var inplaceOpM = eval(fillTemplateFunction(inplaceOperatorMatrix, {name: operator[1] + 'M', op: operator[0]}));\n        var staticOp = eval(fillTemplateFunction(staticOperator, {name: operator[1]}));\n        for (i = 1; i < operator.length; i++) {\n            Matrix.prototype[operator[i]] = inplaceOp;\n            Matrix.prototype[operator[i] + 'S'] = inplaceOpS;\n            Matrix.prototype[operator[i] + 'M'] = inplaceOpM;\n            Matrix[operator[i]] = staticOp;\n        }\n    }\n\n    var methods = [\n        ['~', 'not']\n    ];\n\n    [\n        'abs', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atanh', 'cbrt', 'ceil',\n        'clz32', 'cos', 'cosh', 'exp', 'expm1', 'floor', 'fround', 'log', 'log1p',\n        'log10', 'log2', 'round', 'sign', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc'\n    ].forEach(function (mathMethod) {\n        methods.push(['Math.' + mathMethod, mathMethod]);\n    });\n\n    for (var method of methods) {\n        var inplaceMeth = eval(fillTemplateFunction(inplaceMethod, {name: method[1], method: method[0]}));\n        var staticMeth = eval(fillTemplateFunction(staticMethod, {name: method[1]}));\n        for (i = 1; i < method.length; i++) {\n            Matrix.prototype[method[i]] = inplaceMeth;\n            Matrix[method[i]] = staticMeth;\n        }\n    }\n\n    var methodsWithArgs = [\n        ['Math.pow', 1, 'pow']\n    ];\n\n    for (var methodWithArg of methodsWithArgs) {\n        var args = 'arg0';\n        for (i = 1; i < methodWithArg[1]; i++) {\n            args += `, arg${i}`;\n        }\n        if (methodWithArg[1] !== 1) {\n            var inplaceMethWithArgs = eval(fillTemplateFunction(inplaceMethodWithArgs, {\n                name: methodWithArg[2],\n                method: methodWithArg[0],\n                args: args\n            }));\n            var staticMethWithArgs = eval(fillTemplateFunction(staticMethodWithArgs, {name: methodWithArg[2], args: args}));\n            for (i = 2; i < methodWithArg.length; i++) {\n                Matrix.prototype[methodWithArg[i]] = inplaceMethWithArgs;\n                Matrix[methodWithArg[i]] = staticMethWithArgs;\n            }\n        } else {\n            var tmplVar = {\n                name: methodWithArg[2],\n                args: args,\n                method: methodWithArg[0]\n            };\n            var inplaceMethod2 = eval(fillTemplateFunction(inplaceMethodWithOneArg, tmplVar));\n            var inplaceMethodS = eval(fillTemplateFunction(inplaceMethodWithOneArgScalar, tmplVar));\n            var inplaceMethodM = eval(fillTemplateFunction(inplaceMethodWithOneArgMatrix, tmplVar));\n            var staticMethod2 = eval(fillTemplateFunction(staticMethodWithOneArg, tmplVar));\n            for (i = 2; i < methodWithArg.length; i++) {\n                Matrix.prototype[methodWithArg[i]] = inplaceMethod2;\n                Matrix.prototype[methodWithArg[i] + 'M'] = inplaceMethodM;\n                Matrix.prototype[methodWithArg[i] + 'S'] = inplaceMethodS;\n                Matrix[methodWithArg[i]] = staticMethod2;\n            }\n        }\n    }\n\n    function fillTemplateFunction(template, values) {\n        for (var value in values) {\n            template = template.replace(new RegExp('%' + value + '%', 'g'), values[value]);\n        }\n        return template;\n    }\n\n    return Matrix;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/ml-matrix/src/abstractMatrix.js","'use strict';\n\nvar Matrix = require('../matrix');\n\n// https://github.com/lutzroeder/Mapack/blob/master/Source/LuDecomposition.cs\nfunction LuDecomposition(matrix) {\n    if (!(this instanceof LuDecomposition)) {\n        return new LuDecomposition(matrix);\n    }\n\n    matrix = Matrix.Matrix.checkMatrix(matrix);\n\n    var lu = matrix.clone(),\n        rows = lu.rows,\n        columns = lu.columns,\n        pivotVector = new Array(rows),\n        pivotSign = 1,\n        i, j, k, p, s, t, v,\n        LUrowi, LUcolj, kmax;\n\n    for (i = 0; i < rows; i++) {\n        pivotVector[i] = i;\n    }\n\n    LUcolj = new Array(rows);\n\n    for (j = 0; j < columns; j++) {\n\n        for (i = 0; i < rows; i++) {\n            LUcolj[i] = lu[i][j];\n        }\n\n        for (i = 0; i < rows; i++) {\n            LUrowi = lu[i];\n            kmax = Math.min(i, j);\n            s = 0;\n            for (k = 0; k < kmax; k++) {\n                s += LUrowi[k] * LUcolj[k];\n            }\n            LUrowi[j] = LUcolj[i] -= s;\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[p][k];\n                lu[p][k] = lu[j][k];\n                lu[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[j][j] !== 0) {\n            for (i = j + 1; i < rows; i++) {\n                lu[i][j] /= lu[j][j];\n            }\n        }\n    }\n\n    this.LU = lu;\n    this.pivotVector = pivotVector;\n    this.pivotSign = pivotSign;\n}\n\nLuDecomposition.prototype = {\n    isSingular: function () {\n        var data = this.LU,\n            col = data.columns;\n        for (var j = 0; j < col; j++) {\n            if (data[j][j] === 0) {\n                return true;\n            }\n        }\n        return false;\n    },\n    get determinant() {\n        var data = this.LU;\n        if (!data.isSquare()) {\n            throw new Error('Matrix must be square');\n        }\n        var determinant = this.pivotSign, col = data.columns;\n        for (var j = 0; j < col; j++) {\n            determinant *= data[j][j];\n        }\n        return determinant;\n    },\n    get lowerTriangularMatrix() {\n        var data = this.LU,\n            rows = data.rows,\n            columns = data.columns,\n            X = new Matrix.Matrix(rows, columns);\n        for (var i = 0; i < rows; i++) {\n            for (var j = 0; j < columns; j++) {\n                if (i > j) {\n                    X[i][j] = data[i][j];\n                } else if (i === j) {\n                    X[i][j] = 1;\n                } else {\n                    X[i][j] = 0;\n                }\n            }\n        }\n        return X;\n    },\n    get upperTriangularMatrix() {\n        var data = this.LU,\n            rows = data.rows,\n            columns = data.columns,\n            X = new Matrix.Matrix(rows, columns);\n        for (var i = 0; i < rows; i++) {\n            for (var j = 0; j < columns; j++) {\n                if (i <= j) {\n                    X[i][j] = data[i][j];\n                } else {\n                    X[i][j] = 0;\n                }\n            }\n        }\n        return X;\n    },\n    get pivotPermutationVector() {\n        return this.pivotVector.slice();\n    },\n    solve: function (value) {\n        value = Matrix.Matrix.checkMatrix(value);\n\n        var lu = this.LU,\n            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        var count = value.columns;\n        var X = value.subMatrixRow(this.pivotVector, 0, count - 1);\n        var columns = lu.columns;\n        var 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[i][j] -= X[k][j] * lu[i][k];\n                }\n            }\n        }\n        for (k = columns - 1; k >= 0; k--) {\n            for (j = 0; j < count; j++) {\n                X[k][j] /= lu[k][k];\n            }\n            for (i = 0; i < k; i++) {\n                for (j = 0; j < count; j++) {\n                    X[i][j] -= X[k][j] * lu[i][k];\n                }\n            }\n        }\n        return X;\n    }\n};\n\nmodule.exports = LuDecomposition;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/ml-matrix/src/dc/lu.js","'use strict';\n\nvar Matrix = require('../matrix');\nvar util = require('./util');\nvar hypotenuse = util.hypotenuse;\nvar getFilled2DArray = util.getFilled2DArray;\n\n// https://github.com/lutzroeder/Mapack/blob/master/Source/SingularValueDecomposition.cs\nfunction SingularValueDecomposition(value, options) {\n    if (!(this instanceof SingularValueDecomposition)) {\n        return new SingularValueDecomposition(value, options);\n    }\n    value = Matrix.Matrix.checkMatrix(value);\n\n    options = options || {};\n\n    var m = value.rows,\n        n = value.columns,\n        nu = Math.min(m, n);\n\n    var wantu = true, wantv = true;\n    if (options.computeLeftSingularVectors === false) wantu = false;\n    if (options.computeRightSingularVectors === false) wantv = false;\n    var autoTranspose = options.autoTranspose === true;\n\n    var swapped = false;\n    var a;\n    if (m < n) {\n        if (!autoTranspose) {\n            a = value.clone();\n            // eslint-disable-next-line no-console\n            console.warn('Computing SVD on a matrix with more columns than rows. Consider enabling autoTranspose');\n        } else {\n            a = value.transpose();\n            m = a.rows;\n            n = a.columns;\n            swapped = true;\n            var aux = wantu;\n            wantu = wantv;\n            wantv = aux;\n        }\n    } else {\n        a = value.clone();\n    }\n\n    var s = new Array(Math.min(m + 1, n)),\n        U = getFilled2DArray(m, nu, 0),\n        V = getFilled2DArray(n, n, 0),\n        e = new Array(n),\n        work = new Array(m);\n\n    var nct = Math.min(m - 1, n);\n    var nrt = Math.max(0, Math.min(n - 2, m));\n\n    var i, j, k, p, t, ks, f, cs, sn, max, kase,\n        scale, sp, spm1, epm1, sk, ek, b, c, shift, g;\n\n    for (k = 0, max = Math.max(nct, nrt); k < max; k++) {\n        if (k < nct) {\n            s[k] = 0;\n            for (i = k; i < m; i++) {\n                s[k] = hypotenuse(s[k], a[i][k]);\n            }\n            if (s[k] !== 0) {\n                if (a[k][k] < 0) {\n                    s[k] = -s[k];\n                }\n                for (i = k; i < m; i++) {\n                    a[i][k] /= s[k];\n                }\n                a[k][k] += 1;\n            }\n            s[k] = -s[k];\n        }\n\n        for (j = k + 1; j < n; j++) {\n            if ((k < nct) && (s[k] !== 0)) {\n                t = 0;\n                for (i = k; i < m; i++) {\n                    t += a[i][k] * a[i][j];\n                }\n                t = -t / a[k][k];\n                for (i = k; i < m; i++) {\n                    a[i][j] += t * a[i][k];\n                }\n            }\n            e[j] = a[k][j];\n        }\n\n        if (wantu && (k < nct)) {\n            for (i = k; i < m; i++) {\n                U[i][k] = a[i][k];\n            }\n        }\n\n        if (k < nrt) {\n            e[k] = 0;\n            for (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 (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 (i = k + 1; i < m; i++) {\n                    work[i] = 0;\n                }\n                for (j = k + 1; j < n; j++) {\n                    for (i = k + 1; i < m; i++) {\n                        work[i] += e[j] * a[i][j];\n                    }\n                }\n                for (j = k + 1; j < n; j++) {\n                    t = -e[j] / e[k + 1];\n                    for (i = k + 1; i < m; i++) {\n                        a[i][j] += t * work[i];\n                    }\n                }\n            }\n            if (wantv) {\n                for (i = k + 1; i < n; i++) {\n                    V[i][k] = e[i];\n                }\n            }\n        }\n    }\n\n    p = Math.min(n, m + 1);\n    if (nct < n) {\n        s[nct] = a[nct][nct];\n    }\n    if (m < p) {\n        s[p - 1] = 0;\n    }\n    if (nrt + 1 < p) {\n        e[nrt] = a[nrt][p - 1];\n    }\n    e[p - 1] = 0;\n\n    if (wantu) {\n        for (j = nct; j < nu; j++) {\n            for (i = 0; i < m; i++) {\n                U[i][j] = 0;\n            }\n            U[j][j] = 1;\n        }\n        for (k = nct - 1; k >= 0; k--) {\n            if (s[k] !== 0) {\n                for (j = k + 1; j < nu; j++) {\n                    t = 0;\n                    for (i = k; i < m; i++) {\n                        t += U[i][k] * U[i][j];\n                    }\n                    t = -t / U[k][k];\n                    for (i = k; i < m; i++) {\n                        U[i][j] += t * U[i][k];\n                    }\n                }\n                for (i = k; i < m; i++) {\n                    U[i][k] = -U[i][k];\n                }\n                U[k][k] = 1 + U[k][k];\n                for (i = 0; i < k - 1; i++) {\n                    U[i][k] = 0;\n                }\n            } else {\n                for (i = 0; i < m; i++) {\n                    U[i][k] = 0;\n                }\n                U[k][k] = 1;\n            }\n        }\n    }\n\n    if (wantv) {\n        for (k = n - 1; k >= 0; k--) {\n            if ((k < nrt) && (e[k] !== 0)) {\n                for (j = k + 1; j < n; j++) {\n                    t = 0;\n                    for (i = k + 1; i < n; i++) {\n                        t += V[i][k] * V[i][j];\n                    }\n                    t = -t / V[k + 1][k];\n                    for (i = k + 1; i < n; i++) {\n                        V[i][j] += t * V[i][k];\n                    }\n                }\n            }\n            for (i = 0; i < n; i++) {\n                V[i][k] = 0;\n            }\n            V[k][k] = 1;\n        }\n    }\n\n    var pp = p - 1,\n        iter = 0,\n        eps = Math.pow(2, -52);\n    while (p > 0) {\n        for (k = p - 2; k >= -1; k--) {\n            if (k === -1) {\n                break;\n            }\n            if (Math.abs(e[k]) <= eps * (Math.abs(s[k]) + Math.abs(s[k + 1]))) {\n                e[k] = 0;\n                break;\n            }\n        }\n        if (k === p - 2) {\n            kase = 4;\n        } else {\n            for (ks = p - 1; ks >= k; ks--) {\n                if (ks === k) {\n                    break;\n                }\n                t = (ks !== p ? Math.abs(e[ks]) : 0) + (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                f = e[p - 2];\n                e[p - 2] = 0;\n                for (j = p - 2; j >= k; j--) {\n                    t = hypotenuse(s[j], f);\n                    cs = s[j] / t;\n                    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 (i = 0; i < n; i++) {\n                            t = cs * V[i][j] + sn * V[i][p - 1];\n                            V[i][p - 1] = -sn * V[i][j] + cs * V[i][p - 1];\n                            V[i][j] = t;\n                        }\n                    }\n                }\n                break;\n            }\n            case 2 : {\n                f = e[k - 1];\n                e[k - 1] = 0;\n                for (j = k; j < p; j++) {\n                    t = hypotenuse(s[j], f);\n                    cs = s[j] / t;\n                    sn = f / t;\n                    s[j] = t;\n                    f = -sn * e[j];\n                    e[j] = cs * e[j];\n                    if (wantu) {\n                        for (i = 0; i < m; i++) {\n                            t = cs * U[i][j] + sn * U[i][k - 1];\n                            U[i][k - 1] = -sn * U[i][j] + cs * U[i][k - 1];\n                            U[i][j] = t;\n                        }\n                    }\n                }\n                break;\n            }\n            case 3 : {\n                scale = Math.max(Math.max(Math.max(Math.max(Math.abs(s[p - 1]), Math.abs(s[p - 2])), Math.abs(e[p - 2])), Math.abs(s[k])), Math.abs(e[k]));\n                sp = s[p - 1] / scale;\n                spm1 = s[p - 2] / scale;\n                epm1 = e[p - 2] / scale;\n                sk = s[k] / scale;\n                ek = e[k] / scale;\n                b = ((spm1 + sp) * (spm1 - sp) + epm1 * epm1) / 2;\n                c = (sp * epm1) * (sp * epm1);\n                shift = 0;\n                if ((b !== 0) || (c !== 0)) {\n                    shift = Math.sqrt(b * b + c);\n                    if (b < 0) {\n                        shift = -shift;\n                    }\n                    shift = c / (b + shift);\n                }\n                f = (sk + sp) * (sk - sp) + shift;\n                g = sk * ek;\n                for (j = k; j < p - 1; j++) {\n                    t = hypotenuse(f, g);\n                    cs = f / t;\n                    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 (i = 0; i < n; i++) {\n                            t = cs * V[i][j] + sn * V[i][j + 1];\n                            V[i][j + 1] = -sn * V[i][j] + cs * V[i][j + 1];\n                            V[i][j] = t;\n                        }\n                    }\n                    t = hypotenuse(f, g);\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 (i = 0; i < m; i++) {\n                            t = cs * U[i][j] + sn * U[i][j + 1];\n                            U[i][j + 1] = -sn * U[i][j] + cs * U[i][j + 1];\n                            U[i][j] = t;\n                        }\n                    }\n                }\n                e[p - 2] = f;\n                iter = iter + 1;\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 (i = 0; i <= pp; i++) {\n                            V[i][k] = -V[i][k];\n                        }\n                    }\n                }\n                while (k < pp) {\n                    if (s[k] >= s[k + 1]) {\n                        break;\n                    }\n                    t = s[k];\n                    s[k] = s[k + 1];\n                    s[k + 1] = t;\n                    if (wantv && (k < n - 1)) {\n                        for (i = 0; i < n; i++) {\n                            t = V[i][k + 1];\n                            V[i][k + 1] = V[i][k];\n                            V[i][k] = t;\n                        }\n                    }\n                    if (wantu && (k < m - 1)) {\n                        for (i = 0; i < m; i++) {\n                            t = U[i][k + 1];\n                            U[i][k + 1] = U[i][k];\n                            U[i][k] = t;\n                        }\n                    }\n                    k++;\n                }\n                iter = 0;\n                p--;\n                break;\n            }\n            // no default\n        }\n    }\n\n    if (swapped) {\n        var 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\nSingularValueDecomposition.prototype = {\n    get condition() {\n        return this.s[0] / this.s[Math.min(this.m, this.n) - 1];\n    },\n    get norm2() {\n        return this.s[0];\n    },\n    get rank() {\n        var eps = Math.pow(2, -52),\n            tol = Math.max(this.m, this.n) * this.s[0] * eps,\n            r = 0,\n            s = this.s;\n        for (var i = 0, ii = s.length; i < ii; i++) {\n            if (s[i] > tol) {\n                r++;\n            }\n        }\n        return r;\n    },\n    get diagonal() {\n        return this.s;\n    },\n    // https://github.com/accord-net/framework/blob/development/Sources/Accord.Math/Decompositions/SingularValueDecomposition.cs\n    get threshold() {\n        return (Math.pow(2, -52) / 2) * Math.max(this.m, this.n) * this.s[0];\n    },\n    get leftSingularVectors() {\n        if (!Matrix.Matrix.isMatrix(this.U)) {\n            this.U = new Matrix.Matrix(this.U);\n        }\n        return this.U;\n    },\n    get rightSingularVectors() {\n        if (!Matrix.Matrix.isMatrix(this.V)) {\n            this.V = new Matrix.Matrix(this.V);\n        }\n        return this.V;\n    },\n    get diagonalMatrix() {\n        return Matrix.Matrix.diag(this.s);\n    },\n    solve: function (value) {\n\n        var Y = value,\n            e = this.threshold,\n            scols = this.s.length,\n            Ls = Matrix.Matrix.zeros(scols, scols),\n            i;\n\n        for (i = 0; i < scols; i++) {\n            if (Math.abs(this.s[i]) <= e) {\n                Ls[i][i] = 0;\n            } else {\n                Ls[i][i] = 1 / this.s[i];\n            }\n        }\n\n        var U = this.U;\n        var V = this.rightSingularVectors;\n\n        var VL = V.mmul(Ls),\n            vrows = V.rows,\n            urows = U.length,\n            VLU = Matrix.Matrix.zeros(vrows, urows),\n            j, k, sum;\n\n        for (i = 0; i < vrows; i++) {\n            for (j = 0; j < urows; j++) {\n                sum = 0;\n                for (k = 0; k < scols; k++) {\n                    sum += VL[i][k] * U[j][k];\n                }\n                VLU[i][j] = sum;\n            }\n        }\n\n        return VLU.mmul(Y);\n    },\n    solveForDiagonal: function (value) {\n        return this.solve(Matrix.Matrix.diag(value));\n    },\n    inverse: function () {\n        var V = this.V;\n        var e = this.threshold,\n            vrows = V.length,\n            vcols = V[0].length,\n            X = new Matrix.Matrix(vrows, this.s.length),\n            i, j;\n\n        for (i = 0; i < vrows; i++) {\n            for (j = 0; j < vcols; j++) {\n                if (Math.abs(this.s[j]) > e) {\n                    X[i][j] = V[i][j] / this.s[j];\n                } else {\n                    X[i][j] = 0;\n                }\n            }\n        }\n\n        var U = this.U;\n\n        var urows = U.length,\n            ucols = U[0].length,\n            Y = new Matrix.Matrix(vrows, urows),\n            k, sum;\n\n        for (i = 0; i < vrows; i++) {\n            for (j = 0; j < urows; j++) {\n                sum = 0;\n                for (k = 0; k < ucols; k++) {\n                    sum += X[i][k] * U[j][k];\n                }\n                Y[i][j] = sum;\n            }\n        }\n\n        return Y;\n    }\n};\n\nmodule.exports = SingularValueDecomposition;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/ml-matrix/src/dc/svd.js","module.exports = newArray\n\nfunction newArray (n, value) {\n  n = n || 0\n  var array = new Array(n)\n  for (var i = 0; i < n; i++) {\n    array[i] = value\n  }\n  return array\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/new-array/index.js","/**\n * Created by acastillo on 8/8/16.\n */\n'use strict';\n\nconst defOptions = {\n    threshold:0,\n    out:\"assignment\"\n};\n//TODO Consider a matrix of distances too\nmodule.exports = function fullClusterGenerator(conMat, opt) {\n    const options = Object.assign({}, defOptions, opt);\n    var clList, i, j, k;\n    if(typeof conMat[0] === \"number\"){\n        clList = fullClusterGeneratorVector(conMat);\n    }\n    else{\n        if(typeof conMat[0] === \"object\"){\n            var nRows = conMat.length;\n            var conn = new Array(nRows*(nRows+1)/2);\n            var index = 0;\n            for(var i=0;i<nRows;i++){\n                for(var j=i;j<nRows;j++){\n                    if(conMat[i][j]>options.threshold)\n                        conn[index++]= 1;\n                    else\n                        conn[index++]= 0;\n                }\n            }\n            clList = fullClusterGeneratorVector(conn);\n        }\n    }\n    if (options.out === \"indexes\" || options.out === \"values\") {\n        var result = new Array(clList.length);\n        for(i=0;i<clList.length;i++){\n            result[i] = [];\n            for(j=0;j<clList[i].length;j++){\n                if(clList[i][j] != 0){\n                    result[i].push(j);\n                }\n            }\n        }\n        if (options.out === \"values\") {\n            var resultAsMatrix = new Array(result.length);\n            for (i = 0; i<result.length;i++){\n                resultAsMatrix[i]=new Array(result[i].length);\n                for(j = 0; j < result[i].length; j++){\n                    resultAsMatrix[i][j]=new Array(result[i].length);\n                    for(k = 0; k < result[i].length; k++){\n                        resultAsMatrix[i][j][k]=conMat[result[i][j]][result[i][k]];\n                    }\n                }\n            }\n            return resultAsMatrix;\n        }\n        else{\n            return result;\n        }\n    }\n\n    return clList;\n\n}\n\nfunction fullClusterGeneratorVector(conn){\n    var nRows = Math.sqrt(conn.length*2+0.25)-0.5;\n    var clusterList = [];\n    var available = new Array(nRows);\n    var remaining = nRows, i=0;\n    var cluster = [];\n    //Mark all the elements as available\n    for(i=nRows-1;i>=0;i--){\n        available[i]=1;\n    }\n    var nextAv=-1;\n    var toInclude = [];\n    while(remaining>0){\n        if(toInclude.length===0){\n            //If there is no more elements to include. Start a new cluster\n            cluster = new Array(nRows);\n            for(i = 0;i < nRows ;i++)\n                cluster[i]=0;\n            clusterList.push(cluster);\n            for(nextAv = 0;available[nextAv]==0;nextAv++){};\n        }\n        else{\n            nextAv=toInclude.splice(0,1);\n        }\n        cluster[nextAv]=1;\n        available[nextAv]=0;\n        remaining--;\n        //Copy the next available row\n        var row = new Array(nRows);\n        for( i = 0;i < nRows;i++){\n            var c=Math.max(nextAv,i);\n            var r=Math.min(nextAv,i);\n            //The element in the conn matrix\n            //console.log(\"index: \"+r*(2*nRows-r-1)/2+c)\n            row[i]=conn[r*(2*nRows-r-1)/2+c];\n            //There is new elements to include in this row?\n            //Then, include it to the current cluster\n            if(row[i]==1&&available[i]==1&&cluster[i]==0){\n                toInclude.push(i);\n                cluster[i]=1;\n            }\n        }\n    }\n    return clusterList;\n}\n\n\n// WEBPACK FOOTER //\n// ./node_modules/ml-simple-clustering/src/index.js","'use strict';\n\nfunction squaredEuclidean(p, q) {\n    var d = 0;\n    for (var i = 0; i < p.length; i++) {\n        d += (p[i] - q[i]) * (p[i] - q[i]);\n    }\n    return d;\n}\n\nfunction euclidean(p, q) {\n    return Math.sqrt(squaredEuclidean(p, q));\n}\n\nmodule.exports = euclidean;\neuclidean.squared = squaredEuclidean;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/ml-distance-euclidean/euclidean.js","'use strict';\n\nconst Cluster = require('./Cluster');\nconst util = require('util');\n\nfunction ClusterLeaf(index) {\n    Cluster.call(this);\n    this.index = index;\n    this.distance = 0;\n    this.children = [];\n}\n\nutil.inherits(ClusterLeaf, Cluster);\n\nmodule.exports = ClusterLeaf;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/ml-hclust/src/ClusterLeaf.js","const HashTable = require('ml-hash-table');\n\nclass SparseMatrix {\n    constructor(rows, columns, options = {}) {\n        if (rows instanceof SparseMatrix) { // clone\n            const other = rows;\n            this._init(other.rows, other.columns, other.elements.clone(), other.threshold);\n            return;\n        }\n\n        if (Array.isArray(rows)) {\n            const matrix = rows;\n            rows = matrix.length;\n            options = columns || {};\n            columns = matrix[0].length;\n            this._init(rows, columns, new HashTable(options), options.threshold);\n            for (var i = 0; i < rows; i++) {\n                for (var j = 0; j < columns; j++) {\n                    var value = matrix[i][j];\n                    if (this.threshold && Math.abs(value) < this.threshold) value = 0;\n                    if (value !== 0) {\n                        this.elements.set(i * columns + j, matrix[i][j]);\n                    }\n                }\n            }\n        } else {\n            this._init(rows, columns, new HashTable(options), options.threshold);\n        }\n    }\n\n    _init(rows, columns, elements, threshold) {\n        this.rows = rows;\n        this.columns = columns;\n        this.elements = elements;\n        this.threshold = threshold || 0;\n    }\n    \n    static eye(rows = 1, columns = rows) {\n        const min = Math.min(rows, columns);\n        const matrix = new SparseMatrix(rows, columns, {initialCapacity: min});\n        for (var i = 0; i < min; i++) {\n            matrix.set(i, i, 1);\n        }\n        return matrix;\n    }\n\n    clone() {\n        return new SparseMatrix(this);\n    }\n    \n    to2DArray() {\n        const copy = new Array(this.rows);\n        for (var i = 0; i < this.rows; i++) {\n            copy[i] = new Array(this.columns);\n            for (var j = 0; j < this.columns; j++) {\n                copy[i][j] = this.get(i, j);\n            }\n        }\n        return copy;\n    }\n\n    isSquare() {\n        return this.rows === this.columns;\n    }\n\n    isSymmetric() {\n        if (!this.isSquare()) return false;\n\n        var symmetric = true;\n        this.forEachNonZero((i, j, v) => {\n            if (this.get(j, i) !== v) {\n                symmetric = false;\n                return false;\n            }\n            return v;\n        });\n        return symmetric;\n    }\n\n    get cardinality() {\n        return this.elements.size;\n    }\n\n    get size() {\n        return this.rows * this.columns;\n    }\n\n    get(row, column) {\n        return this.elements.get(row * this.columns + column);\n    }\n\n    set(row, column, value) {\n        if (this.threshold && Math.abs(value) < this.threshold) value = 0;\n        if (value === 0) {\n            this.elements.remove(row * this.columns + column);\n        } else {\n            this.elements.set(row * this.columns + column, value);\n        }\n        return this;\n    }\n    \n    mmul(other) {\n        if (this.columns !== other.rows)\n            console.warn('Number of columns of left matrix are not equal to number of rows of right matrix.');\n        \n        const m = this.rows;\n        const p = other.columns;\n        \n        const result = new SparseMatrix(m, p);\n        this.forEachNonZero((i, j, v1) => {\n            other.forEachNonZero((k, l, v2) => {\n                if (j === k) {\n                    result.set(i, l, result.get(i, l) + v1 * v2);\n                }\n                return v2;\n            });\n            return v1;\n        });\n        return result;\n    }\n\n    kroneckerProduct(other) {\n        const m = this.rows;\n        const n = this.columns;\n        const p = other.rows;\n        const q = other.columns;\n\n        const result = new SparseMatrix(m * p, n * q, {\n            initialCapacity: this.cardinality * other.cardinality\n        });\n        this.forEachNonZero((i, j, v1) => {\n            other.forEachNonZero((k, l, v2) => {\n                result.set(p * i + k, q * j + l, v1 * v2);\n                return v2;\n            });\n            return v1;\n        });\n        return result;\n    }\n\n    forEachNonZero(callback) {\n        this.elements.forEachPair((key, value) => {\n            const i = (key / this.columns) | 0;\n            const j = key % this.columns;\n            let r = callback(i, j, value);\n            if (r === false) return false; // stop iteration\n            if (this.threshold && Math.abs(r) < this.threshold) r = 0;\n            if (r !== value) {\n                if (r === 0) {\n                    this.elements.remove(key, true);\n                } else {\n                    this.elements.set(key, r);\n                }\n            }\n            return true;\n        });\n        this.elements.maybeShrinkCapacity();\n        return this;\n    }\n\n    getNonZeros() {\n        const cardinality = this.cardinality;\n        const rows = new Array(cardinality);\n        const columns = new Array(cardinality);\n        const values = new Array(cardinality);\n        var idx = 0;\n        this.forEachNonZero((i, j, value) => {\n            rows[idx] = i;\n            columns[idx] = j;\n            values[idx] = value;\n            idx++;\n            return value;\n        });\n        return {rows, columns, values};\n    }\n\n    setThreshold(newThreshold) {\n        if (newThreshold !== 0 && newThreshold !== this.threshold) {\n            this.threshold = newThreshold;\n            this.forEachNonZero((i, j, v) => v);\n        }\n        return this;\n    }\n}\n\nSparseMatrix.prototype.klass = 'Matrix';\n\nSparseMatrix.identity = SparseMatrix.eye;\nSparseMatrix.prototype.tensorProduct = SparseMatrix.prototype.kroneckerProduct;\n\nmodule.exports = SparseMatrix;\n\n/*\n Add dynamically instance and static methods for mathematical operations\n */\n\nvar inplaceOperator = `\n(function %name%(value) {\n    if (typeof value === 'number') return this.%name%S(value);\n    return this.%name%M(value);\n})\n`;\n\nvar inplaceOperatorScalar = `\n(function %name%S(value) {\n    this.forEachNonZero((i, j, v) => v %op% value);\n    return this;\n})\n`;\n\nvar inplaceOperatorMatrix = `\n(function %name%M(matrix) {\n    matrix.forEachNonZero((i, j, v) => {\n        this.set(i, j, this.get(i, j) %op% v);\n        return v;\n    });\n    return this;\n})\n`;\n\nvar staticOperator = `\n(function %name%(matrix, value) {\n    var newMatrix = new SparseMatrix(matrix);\n    return newMatrix.%name%(value);\n})\n`;\n\nvar inplaceMethod = `\n(function %name%() {\n    this.forEachNonZero((i, j, v) => %method%(v));\n    return this;\n})\n`;\n\nvar staticMethod = `\n(function %name%(matrix) {\n    var newMatrix = new SparseMatrix(matrix);\n    return newMatrix.%name%();\n})\n`;\n\nvar operators = [\n    // Arithmetic operators\n    ['+', 'add'],\n    ['-', 'sub', 'subtract'],\n    ['*', 'mul', 'multiply'],\n    ['/', 'div', 'divide'],\n    ['%', 'mod', 'modulus'],\n    // Bitwise operators\n    ['&', 'and'],\n    ['|', 'or'],\n    ['^', 'xor'],\n    ['<<', 'leftShift'],\n    ['>>', 'signPropagatingRightShift'],\n    ['>>>', 'rightShift', 'zeroFillRightShift']\n];\n\nfor (var operator of operators) {\n    for (var i = 1; i < operator.length; i++) {\n        SparseMatrix.prototype[operator[i]] = eval(fillTemplateFunction(inplaceOperator, {name: operator[i], op: operator[0]}));\n        SparseMatrix.prototype[operator[i] + 'S'] = eval(fillTemplateFunction(inplaceOperatorScalar, {name: operator[i] + 'S', op: operator[0]}));\n        SparseMatrix.prototype[operator[i] + 'M'] = eval(fillTemplateFunction(inplaceOperatorMatrix, {name: operator[i] + 'M', op: operator[0]}));\n\n        SparseMatrix[operator[i]] = eval(fillTemplateFunction(staticOperator, {name: operator[i]}));\n    }\n}\n\nvar methods = [\n    ['~', 'not']\n];\n\n[\n    'abs', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atanh', 'cbrt', 'ceil',\n    'clz32', 'cos', 'cosh', 'exp', 'expm1', 'floor', 'fround', 'log', 'log1p',\n    'log10', 'log2', 'round', 'sign', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc'\n].forEach(function (mathMethod) {\n    methods.push(['Math.' + mathMethod, mathMethod]);\n});\n\nfor (var method of methods) {\n    for (var i = 1; i < method.length; i++) {\n        SparseMatrix.prototype[method[i]] = eval(fillTemplateFunction(inplaceMethod, {name: method[i], method: method[0]}));\n        SparseMatrix[method[i]] = eval(fillTemplateFunction(staticMethod, {name: method[i]}));\n    }\n}\n\nfunction fillTemplateFunction(template, values) {\n    for (var i in values) {\n        template = template.replace(new RegExp('%' + i + '%', 'g'), values[i]);\n    }\n    return template;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/ml-sparse-matrix/src/SparseMatrix.js","module.exports = function(haystack, needle, comparator, low, high) {\n  var mid, cmp;\n\n  if(low === undefined)\n    low = 0;\n\n  else {\n    low = low|0;\n    if(low < 0 || low >= haystack.length)\n      throw new RangeError(\"invalid lower bound\");\n  }\n\n  if(high === undefined)\n    high = haystack.length - 1;\n\n  else {\n    high = high|0;\n    if(high < low || high >= haystack.length)\n      throw new RangeError(\"invalid upper bound\");\n  }\n\n  while(low <= high) {\n    /* Note that \"(low + high) >>> 1\" may overflow, and results in a typecast\n     * to double (which gives the wrong results). */\n    mid = low + (high - low >> 1);\n    cmp = +comparator(haystack[mid], needle, mid, haystack);\n\n    /* Too low. */\n    if(cmp < 0.0)\n      low  = mid + 1;\n\n    /* Too high. */\n    else if(cmp > 0.0)\n      high = mid - 1;\n\n    /* Key found. */\n    else\n      return mid;\n  }\n\n  /* Key not found. */\n  return ~low;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/binary-search/index.js","'use strict';\nvar numberIsNan = require('number-is-nan');\n\nfunction assertNum(x) {\n\tif (typeof x !== 'number' || numberIsNan(x)) {\n\t\tthrow new TypeError('Expected a number');\n\t}\n}\n\nexports.asc = function (a, b) {\n\tassertNum(a);\n\tassertNum(b);\n\treturn a - b;\n};\n\nexports.desc = function (a, b) {\n\tassertNum(a);\n\tassertNum(b);\n\treturn b - a;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/num-sort/index.js","var diagonalError = 0.05;\nvar\ttolerance = 0.05;\n\nexport default {\n\n    clean: function (peaks, threshold) {\n        var max = Number.NEGATIVE_INFINITY;\n        var i;\n        //double min = Double.MAX_VALUE;\n        for (i = peaks.length - 1; i >= 0; i--) {\n            if (Math.abs(peaks[i].z) > max) {\n                max = Math.abs(peaks[i].z);\n            }\n        }\n        max *= threshold;\n        for (i = peaks.length - 1; i >= 0; i--) {\n            if (Math.abs(peaks[i].z) < max) {\n                peaks.splice(i, 1);\n            }\n        }\n        return peaks;\n    },\n\n    enhanceSymmetry: function (signals) {\n\n        var properties = initializeProperties(signals);\n        var output = signals;\n\n        //First step of the optimization: Symmetry validation\n        var i, hits, index;\n        var signal;\n        for (i = output.length - 1; i >= 0; i--) {\n            signal = output[i];\n            if (signal.peaks.length > 1)\t\t\t\t{\n                properties[i][1]++;\n            }\n            if (properties[i][0] === 1) {\n                index = exist(output, properties, signal, -1, true);\n                if (index >= 0) {\n                    properties[i][1] += 2;\n                    properties[index][1] += 2;\n                }\n            }\n        }\n        //Second step of the optimization: Diagonal image existence\n        for (i = output.length - 1; i >= 0; i--) {\n            signal = output[i];\n            if (properties[i][0] === 0) {\n                hits = checkCrossPeaks(output, properties, signal, true);\n                properties[i][1] += hits;\n                //checkCrossPeaks(output, properties, signal, false);\n            }\n        }\n\n        //Now, each peak have a score between 0 and 4, we can complete the patterns which\n        //contains peaks with high scores, and finally, we can remove peaks with scores 0 and 1\n        var count = 0;\n        for (i = output.length - 1; i >= 0; i--) {\n            if (properties[i][0] !== 0 && properties[i][1] > 2) {\n                count++;\n                count += completeMissingIfNeeded(output, properties, output[i], properties[i]);\n            }\n            if (properties[i][1] >= 2 && properties[i][0] === 0)\t\t\t\t{\n                count++;\n            }\n        }\n\n        var toReturn = new Array(count);\n        count--;\n        for (i = output.length - 1; i >= 0; i--) {\n            if (properties[i][0] !== 0 && properties[i][1] > 2\n     || properties[i][0] === 0 && properties[i][1] > 1) {\n                toReturn[count--] = output[i];\n            }\n        }\n        return toReturn;\n    },\n\n    /**\n     * This function maps the corresponding 2D signals to the given set of 1D signals\n     * @param {Array} signals2D\n     * @param {Array} references\n     */\n    alignDimensions: function (signals2D, references) {\n        //For each reference dimension\n        for (var i = 0; i < references.length; i++) {\n            var ref = references[i];\n            if (ref)\t\t\t\t{\n                alignSingleDimension(signals2D, ref);\n            }\n        }\n    }\n};\n\nfunction completeMissingIfNeeded(output, properties, thisSignal, thisProp) {\n    //Check for symmetry\n    var index = exist(output, properties, thisSignal, -thisProp[0], true);\n    var addedPeaks = 0;\n    var newSignal = null;\n    var tmpProp = null;\n    if (index < 0) {//If this signal have no a symmetry image, we have to include it\n        newSignal = {nucleusX: thisSignal.nucleusX, nucleusY: thisSignal.nucleusY};\n        newSignal.resolutionX = thisSignal.resolutionX;\n        newSignal.resolutionY = thisSignal.resolutionY;\n        newSignal.shiftX = thisSignal.shiftY;\n        newSignal.shiftY = thisSignal.shiftX;\n        newSignal.peaks = [{x: thisSignal.shiftY, y: thisSignal.shiftX, z: 1}];\n        output.push(newSignal);\n        tmpProp = [-thisProp[0], thisProp[1]];\n        properties.push(tmpProp);\n        addedPeaks++;\n    }\n    //Check for diagonal peaks\n    var j, signal;\n    var diagX = false;\n    var diagY = false;\n    for (j = output.length - 1; j >= 0; j--) {\n        signal = output[j];\n        if (properties[j][0] === 0) {\n            if (Math.abs(signal.shiftX - thisSignal.shiftX) < diagonalError)\t\t\t\t{\n                diagX = true;\n            }\n            if (Math.abs(signal.shiftY - thisSignal.shiftY) < diagonalError)\t\t\t\t{\n                diagY = true;\n            }\n        }\n    }\n    if (diagX === false) {\n        newSignal = {nucleusX: thisSignal.nucleusX, nucleusY: thisSignal.nucleusY};\n        newSignal.resolutionX = thisSignal.resolutionX;\n        newSignal.resolutionY = thisSignal.resolutionY;\n        newSignal.shiftX = thisSignal.shiftX;\n        newSignal.shiftY = thisSignal.shiftX;\n        newSignal.peaks = [{x: thisSignal.shiftX, y: thisSignal.shiftX, z: 1}];\n        output.push(newSignal);\n        tmpProp = [0, thisProp[1]];\n        properties.push(tmpProp);\n        addedPeaks++;\n    }\n    if (diagY === false) {\n        newSignal = {nucleusX: thisSignal.nucleusX, nucleusY: thisSignal.nucleusY};\n        newSignal.resolutionX = thisSignal.resolutionX;\n        newSignal.resolutionY = thisSignal.resolutionY;\n        newSignal.shiftX = thisSignal.shiftY;\n        newSignal.shiftY = thisSignal.shiftY;\n        newSignal.peaks = [{x: thisSignal.shiftY, y: thisSignal.shiftY, z: 1}];\n        output.push(newSignal);\n        tmpProp = [0, thisProp[1]];\n        properties.push(tmpProp);\n        addedPeaks++;\n    }\n    return addedPeaks;\n\n}\n\n//Check for any diagonal peak that match this cross peak\nfunction checkCrossPeaks(output, properties, signal, updateProperties) {\n    var hits = 0;\n    var shift = signal.shiftX * 4;\n    var crossPeaksX = [];\n    var crossPeaksY = [];\n    var cross;\n    for (var i = output.length - 1; i >= 0; i--) {\n        cross = output[i];\n        if (properties[i][0] !== 0) {\n            if (Math.abs(cross.shiftX - signal.shiftX) < diagonalError) {\n                hits++;\n                if (updateProperties)\t\t\t\t\t{\n                    properties[i][1]++;\n                }\n                crossPeaksX.push(i);\n                shift += cross.shiftX;\n            } else {\n                if (Math.abs(cross.shiftY - signal.shiftY) < diagonalError) {\n                    hits++;\n                    if (updateProperties)\t\t\t\t\t\t{\n                        properties[i][1]++;\n                    }\n                    crossPeaksY.push(i);\n                    shift += cross.shiftY;\n                }\n            }\n        }\n    }\n    //Update found crossPeaks and diagonal peak\n    shift /= (crossPeaksX.length + crossPeaksY.length + 4);\n    if (crossPeaksX.length > 0) {\n        for (i = crossPeaksX.length - 1; i >= 0; i--) {\n            output[crossPeaksX[i]].shiftX = shift;\n        }\n    }\n    if (crossPeaksY.length > 0) {\n        for (i = crossPeaksY.length - 1; i >= 0; i--) {\n            output[crossPeaksY[i]].shiftY = shift;\n        }\n    }\n    signal.shiftX = shift;\n    signal.shiftY = shift;\n    return hits;\n}\n\nfunction exist(output, properties, signal, type, symmetricSearch) {\n    for (var i = output.length - 1; i >= 0; i--) {\n        if (properties[i][0] === type) {\n            if (distanceTo(signal, output[i], symmetricSearch) < tolerance) {\n                if (!symmetricSearch) {\n                    let shiftX = (output[i].shiftX + signal.shiftX) / 2.0;\n                    let shiftY = (output[i].shiftY + signal.shiftY) / 2.0;\n                    output[i].shiftX = shiftX;\n                    output[i].shiftY = shiftY;\n                    signal.shiftX = shiftX;\n                    signal.shiftY = shiftY;\n                } else {\n                    let shiftX = signal.shiftX;\n                    let shiftY = output[i].shiftX;\n                    output[i].shiftY = shiftX;\n                    signal.shiftY = shiftY;\n                }\n                return i;\n            }\n        }\n    }\n    return -1;\n}\n/**\n * Try to determine the position of each signal within the spectrum matrix.\n * Peaks could be of 3 types: upper diagonal, diagonal or under diagonal 1,0,-1\n * respectively.\n * @param {Array} signals\n * @return {*} A matrix containing the properties of each signal\n * @private\n */\nfunction initializeProperties(signals) {\n    var signalsProperties = new Array(signals.length);\n    for (var i = signals.length - 1; i >= 0; i--) {\n        signalsProperties[i] = [0, 0];\n        //We check if it is a diagonal peak\n        if (Math.abs(signals[i].shiftX - signals[i].shiftY) <= diagonalError) {\n            signalsProperties[i][1] = 1;\n            var shift = (signals[i].shiftX * 2 + signals[i].shiftY) / 3.0;\n            signals[i].shiftX = shift;\n            signals[i].shiftY = shift;\n        } else {\n            if (signals[i].shiftX - signals[i].shiftY > 0)\t\t\t\t{\n                signalsProperties[i][0] = 1;\n            } else\t\t\t\t{\n                signalsProperties[i][0] = -1;\n            }\n        }\n    }\n    return signalsProperties;\n}\n\n/**\n * This function calculates the distance between 2 nmr signals . If toImage is true,\n * it will interchange x by y in the distance calculation for the second signal.\n * @param {object} a\n * @param {object} b\n * @param {boolean} toImage\n * @return {number}\n * @private\n */\nfunction distanceTo(a, b, toImage) {\n    if (!toImage) {\n        return Math.sqrt(Math.pow(a.shiftX - b.shiftX, 2)\n   + Math.pow(a.shiftY - b.shiftY, 2));\n    } else {\n        return Math.sqrt(Math.pow(a.shiftX - b.shiftY, 2)\n   + Math.pow(a.shiftY - b.shiftX, 2));\n    }\n}\n\nfunction alignSingleDimension(signals2D, references) {\n    //For each 2D signal\n    var center = 0;\n    var width = 0;\n    var i, j;\n    for (i = 0; i < signals2D.length; i++) {\n        var signal2D = signals2D[i];\n        for (j = 0; j < references.length; j++) {\n            center = (references[j].startX + references[j].stopX) / 2;\n            width = Math.abs(references[j].startX - references[j].stopX) / 2;\n            if (signal2D.nucleusX === references[j].nucleus) {\n                //The 2D peak overlaps with the 1D signal\n                if (Math.abs(signal2D.shiftX - center) <= width) {\n                    signal2D._highlight.push(references[j]._highlight[0]);\n                }\n\n            }\n            if (signal2D.nucleusY === references[j].nucleus) {\n                if (Math.abs(signal2D.shiftY - center) <= width) {\n                    signal2D._highlight.push(references[j]._highlight[0]);\n                }\n            }\n        }\n\n    }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/spectra-data/src/peakPicking/peakOptimizer.js","/**\n * Fast Fourier Transform module\n * 1D-FFT/IFFT, 2D-FFT/IFFT (radix-2)\n */\nvar FFT = (function(){\n  var FFT;  \n  \n  if(typeof exports !== 'undefined') {\n    FFT = exports;   // for CommonJS\n  } else {\n    FFT = {};\n  }\n  \n  var version = {\n    release: '0.3.0',\n    date: '2013-03'\n  };\n  FFT.toString = function() {\n    return \"version \" + version.release + \", released \" + version.date;\n  };\n\n  // core operations\n  var _n = 0,          // order\n      _bitrev = null,  // bit reversal table\n      _cstb = null;    // sin/cos table\n\n  var core = {\n    init : function(n) {\n      if(n !== 0 && (n & (n - 1)) === 0) {\n        _n = n;\n        core._initArray();\n        core._makeBitReversalTable();\n        core._makeCosSinTable();\n      } else {\n        throw new Error(\"init: radix-2 required\");\n      }\n    },\n    // 1D-FFT\n    fft1d : function(re, im) {\n      core.fft(re, im, 1);\n    },\n    // 1D-IFFT\n    ifft1d : function(re, im) {\n      var n = 1/_n;\n      core.fft(re, im, -1);\n      for(var i=0; i<_n; i++) {\n        re[i] *= n;\n        im[i] *= n;\n      }\n    },\n     // 1D-IFFT\n    bt1d : function(re, im) {\n      core.fft(re, im, -1);\n    },\n    // 2D-FFT Not very useful if the number of rows have to be equal to cols\n    fft2d : function(re, im) {\n      var tre = [],\n          tim = [],\n          i = 0;\n      // x-axis\n      for(var y=0; y<_n; y++) {\n        i = y*_n;\n        for(var x1=0; x1<_n; x1++) {\n          tre[x1] = re[x1 + i];\n          tim[x1] = im[x1 + i];\n        }\n        core.fft1d(tre, tim);\n        for(var x2=0; x2<_n; x2++) {\n          re[x2 + i] = tre[x2];\n          im[x2 + i] = tim[x2];\n        }\n      }\n      // y-axis\n      for(var x=0; x<_n; x++) {\n        for(var y1=0; y1<_n; y1++) {\n          i = x + y1*_n;\n          tre[y1] = re[i];\n          tim[y1] = im[i];\n        }\n        core.fft1d(tre, tim);\n        for(var y2=0; y2<_n; y2++) {\n          i = x + y2*_n;\n          re[i] = tre[y2];\n          im[i] = tim[y2];\n        }\n      }\n    },\n    // 2D-IFFT\n    ifft2d : function(re, im) {\n      var tre = [],\n          tim = [],\n          i = 0;\n      // x-axis\n      for(var y=0; y<_n; y++) {\n        i = y*_n;\n        for(var x1=0; x1<_n; x1++) {\n          tre[x1] = re[x1 + i];\n          tim[x1] = im[x1 + i];\n        }\n        core.ifft1d(tre, tim);\n        for(var x2=0; x2<_n; x2++) {\n          re[x2 + i] = tre[x2];\n          im[x2 + i] = tim[x2];\n        }\n      }\n      // y-axis\n      for(var x=0; x<_n; x++) {\n        for(var y1=0; y1<_n; y1++) {\n          i = x + y1*_n;\n          tre[y1] = re[i];\n          tim[y1] = im[i];\n        }\n        core.ifft1d(tre, tim);\n        for(var y2=0; y2<_n; y2++) {\n          i = x + y2*_n;\n          re[i] = tre[y2];\n          im[i] = tim[y2];\n        }\n      }\n    },\n    // core operation of FFT\n    fft : function(re, im, inv) {\n      var d, h, ik, m, tmp, wr, wi, xr, xi,\n          n4 = _n >> 2;\n      // bit reversal\n      for(var l=0; l<_n; l++) {\n        m = _bitrev[l];\n        if(l < m) {\n          tmp = re[l];\n          re[l] = re[m];\n          re[m] = tmp;\n          tmp = im[l];\n          im[l] = im[m];\n          im[m] = tmp;\n        }\n      }\n      // butterfly operation\n      for(var k=1; k<_n; k<<=1) {\n        h = 0;\n        d = _n/(k << 1);\n        for(var j=0; j<k; j++) {\n          wr = _cstb[h + n4];\n          wi = inv*_cstb[h];\n          for(var i=j; i<_n; i+=(k<<1)) {\n            ik = i + k;\n            xr = wr*re[ik] + wi*im[ik];\n            xi = wr*im[ik] - wi*re[ik];\n            re[ik] = re[i] - xr;\n            re[i] += xr;\n            im[ik] = im[i] - xi;\n            im[i] += xi;\n          }\n          h += d;\n        }\n      }\n    },\n    // initialize the array (supports TypedArray)\n    _initArray : function() {\n      if(typeof Uint32Array !== 'undefined') {\n        _bitrev = new Uint32Array(_n);\n      } else {\n        _bitrev = [];\n      }\n      if(typeof Float64Array !== 'undefined') {\n        _cstb = new Float64Array(_n*1.25);\n      } else {\n        _cstb = [];\n      }\n    },\n    // zero padding\n    _paddingZero : function() {\n      // TODO\n    },\n    // makes bit reversal table\n    _makeBitReversalTable : function() {\n      var i = 0,\n          j = 0,\n          k = 0;\n      _bitrev[0] = 0;\n      while(++i < _n) {\n        k = _n >> 1;\n        while(k <= j) {\n          j -= k;\n          k >>= 1;\n        }\n        j += k;\n        _bitrev[i] = j;\n      }\n    },\n    // makes trigonometiric function table\n    _makeCosSinTable : function() {\n      var n2 = _n >> 1,\n          n4 = _n >> 2,\n          n8 = _n >> 3,\n          n2p4 = n2 + n4,\n          t = Math.sin(Math.PI/_n),\n          dc = 2*t*t,\n          ds = Math.sqrt(dc*(2 - dc)),\n          c = _cstb[n4] = 1,\n          s = _cstb[0] = 0;\n      t = 2*dc;\n      for(var i=1; i<n8; i++) {\n        c -= dc;\n        dc += t*c;\n        s += ds;\n        ds -= t*s;\n        _cstb[i] = s;\n        _cstb[n4 - i] = c;\n      }\n      if(n8 !== 0) {\n        _cstb[n8] = Math.sqrt(0.5);\n      }\n      for(var j=0; j<n4; j++) {\n        _cstb[n2 - j]  = _cstb[j];\n      }\n      for(var k=0; k<n2p4; k++) {\n        _cstb[k + n2] = -_cstb[k];\n      }\n    }\n  };\n  // aliases (public APIs)\n  var apis = ['init', 'fft1d', 'ifft1d', 'fft2d', 'ifft2d'];\n  for(var i=0; i<apis.length; i++) {\n    FFT[apis[i]] = core[apis[i]];\n  }\n  FFT.bt = core.bt1d;\n  FFT.fft = core.fft1d;\n  FFT.ifft = core.ifft1d;\n  \n  return FFT;\n}).call(this);\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/ml-matrix-convolution/node_modules/ml-fft/src/fftlib.js","'use strict';\n\nmodule.exports = require('spectra-data');\n\n\n\n// WEBPACK FOOTER //\n// ./index.js","'use strict';\n\nconst Stat = require('ml-stat').array;\n/**\n * Function that returns an array of points given 1D array as follows:\n *\n * [x1, y1, .. , x2, y2, ..]\n *\n * And receive the number of dimensions of each point.\n * @param array\n * @param dimensions\n * @returns {Array} - Array of points.\n */\nfunction coordArrayToPoints(array, dimensions) {\n    if(array.length % dimensions !== 0) {\n        throw new RangeError('Dimensions number must be accordance with the size of the array.');\n    }\n\n    var length = array.length / dimensions;\n    var pointsArr = new Array(length);\n\n    var k = 0;\n    for(var i = 0; i < array.length; i += dimensions) {\n        var point = new Array(dimensions);\n        for(var j = 0; j < dimensions; ++j) {\n            point[j] = array[i + j];\n        }\n\n        pointsArr[k] = point;\n        k++;\n    }\n\n    return pointsArr;\n}\n\n\n/**\n * Function that given an array as follows:\n * [x1, y1, .. , x2, y2, ..]\n *\n * Returns an array as follows:\n * [[x1, x2, ..], [y1, y2, ..], [ .. ]]\n *\n * And receives the number of dimensions of each coordinate.\n * @param array\n * @param dimensions\n * @returns {Array} - Matrix of coordinates\n */\nfunction coordArrayToCoordMatrix(array, dimensions) {\n    if(array.length % dimensions !== 0) {\n        throw new RangeError('Dimensions number must be accordance with the size of the array.');\n    }\n\n    var coordinatesArray = new Array(dimensions);\n    var points = array.length / dimensions;\n    for (var i = 0; i < coordinatesArray.length; i++) {\n        coordinatesArray[i] = new Array(points);\n    }\n\n    for(i = 0; i < array.length; i += dimensions) {\n        for(var j = 0; j < dimensions; ++j) {\n            var currentPoint = Math.floor(i / dimensions);\n            coordinatesArray[j][currentPoint] = array[i + j];\n        }\n    }\n\n    return coordinatesArray;\n}\n\n/**\n * Function that receives a coordinate matrix as follows:\n * [[x1, x2, ..], [y1, y2, ..], [ .. ]]\n *\n * Returns an array of coordinates as follows:\n * [x1, y1, .. , x2, y2, ..]\n *\n * @param coordMatrix\n * @returns {Array}\n */\nfunction coordMatrixToCoordArray(coordMatrix) {\n    var coodinatesArray = new Array(coordMatrix.length * coordMatrix[0].length);\n    var k = 0;\n    for(var i = 0; i < coordMatrix[0].length; ++i) {\n        for(var j = 0; j < coordMatrix.length; ++j) {\n            coodinatesArray[k] = coordMatrix[j][i];\n            ++k;\n        }\n    }\n\n    return coodinatesArray;\n}\n\n/**\n * Tranpose a matrix, this method is for coordMatrixToPoints and\n * pointsToCoordMatrix, that because only transposing the matrix\n * you can change your representation.\n *\n * @param matrix\n * @returns {Array}\n */\nfunction transpose(matrix) {\n    var resultMatrix = new Array(matrix[0].length);\n    for(var i = 0; i < resultMatrix.length; ++i) {\n        resultMatrix[i] = new Array(matrix.length);\n    }\n\n    for (i = 0; i < matrix.length; ++i) {\n        for(var j = 0; j < matrix[0].length; ++j) {\n            resultMatrix[j][i] = matrix[i][j];\n        }\n    }\n\n    return resultMatrix;\n}\n\n/**\n * Function that transform an array of points into a coordinates array\n * as follows:\n * [x1, y1, .. , x2, y2, ..]\n *\n * @param points\n * @returns {Array}\n */\nfunction pointsToCoordArray(points) {\n    var coodinatesArray = new Array(points.length * points[0].length);\n    var k = 0;\n    for(var i = 0; i < points.length; ++i) {\n        for(var j = 0; j < points[0].length; ++j) {\n            coodinatesArray[k] = points[i][j];\n            ++k;\n        }\n    }\n\n    return coodinatesArray;\n}\n\n/**\n * Apply the dot product between the smaller vector and a subsets of the\n * largest one.\n *\n * @param firstVector\n * @param secondVector\n * @returns {Array} each dot product of size of the difference between the\n *                  larger and the smallest one.\n */\nfunction applyDotProduct(firstVector, secondVector) {\n    var largestVector, smallestVector;\n    if(firstVector.length <= secondVector.length) {\n        smallestVector = firstVector;\n        largestVector = secondVector;\n    } else {\n        smallestVector = secondVector;\n        largestVector = firstVector;\n    }\n\n    var difference = largestVector.length - smallestVector.length + 1;\n    var dotProductApplied = new Array(difference);\n\n    for (var i = 0; i < difference; ++i) {\n        var sum = 0;\n        for (var j = 0; j < smallestVector.length; ++j) {\n            sum += smallestVector[j] * largestVector[i + j];\n        }\n        dotProductApplied[i] = sum;\n    }\n\n    return dotProductApplied;\n}\n/**\n * To scale the input array between the specified min and max values. The operation is performed inplace\n * if the options.inplace is specified. If only one of the min or max parameters is specified, then the scaling\n * will multiply the input array by min/min(input) or max/max(input)\n * @param input\n * @param options\n * @returns {*}\n */\nfunction scale(input, options){\n    var y;\n    if(options.inPlace){\n        y = input;\n    }\n    else{\n        y = new Array(input.length);\n    }\n    const max = options.max;\n    const min = options.min;\n    if(typeof max === \"number\"){\n        if(typeof min === \"number\"){\n            var minMax = Stat.minMax(input);\n            var factor = (max - min)/(minMax.max-minMax.min);\n            for(var i=0;i< y.length;i++){\n                y[i]=(input[i]-minMax.min)*factor+min;\n            }\n        }\n        else{\n            var currentMin = Stat.max(input);\n            var factor = max/currentMin;\n            for(var i=0;i< y.length;i++){\n                y[i] = input[i]*factor;\n            }\n        }\n    }\n    else{\n        if(typeof min === \"number\"){\n            var currentMin = Stat.min(input);\n            var factor = min/currentMin;\n            for(var i=0;i< y.length;i++){\n                y[i] = input[i]*factor;\n            }\n        }\n    }\n    return y;\n}\n\nmodule.exports = {\n    coordArrayToPoints: coordArrayToPoints,\n    coordArrayToCoordMatrix: coordArrayToCoordMatrix,\n    coordMatrixToCoordArray: coordMatrixToCoordArray,\n    coordMatrixToPoints: transpose,\n    pointsToCoordArray: pointsToCoordArray,\n    pointsToCoordMatrix: transpose,\n    applyDotProduct: applyDotProduct,\n    scale:scale\n};\n\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/ml-array-utils/src/ArrayUtils.js","'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\n\n\n// WEBPACK FOOTER //\n// ./node_modules/ml-stat/matrix.js","'use strict';\n\nexports.SNV = SNV;\nvar Stat = require('ml-stat').array;\n\n/**\n * Function that applies the standard normal variate (SNV) to an array of values.\n *\n * @param data - Array of values.\n * @returns {Array} - applied the SNV.\n */\nfunction SNV(data) {\n    var mean = Stat.mean(data);\n    var std = Stat.standardDeviation(data);\n    var result = data.slice();\n    for (var i = 0; i < data.length; i++) {\n        result[i] = (result[i] - mean) / std;\n    }\n    return result;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/ml-array-utils/src/snv.js","import quickSelectMedian from 'median-quickselect';\n\n/**\n * Computes the median of the given values\n * @param {Array<number>} input\n * @return {number}\n */\nexport default function median(input) {\n    if (!Array.isArray(input)) {\n        throw new Error('input must be an array');\n    }\n\n    if (input.length === 0) {\n        throw new Error('input must not be empty');\n    }\n\n    return quickSelectMedian(input.slice());\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/ml-array-median/src/index.js","(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\n\n\n// WEBPACK FOOTER //\n// ./node_modules/median-quickselect/lib/median-quickselect.min.js","import max from 'ml-array-max';\nimport min from 'ml-array-min';\n\nexport default function rescale(input, options = {}) {\n    if (!Array.isArray(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    let output;\n    if (options.output !== undefined) {\n        if (!Array.isArray(options.output)) {\n            throw new TypeError('output option must be an array if specified');\n        }\n        output = options.output;\n    } else {\n        output = new Array(input.length);\n    }\n\n    const currentMin = min(input);\n    const 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    const {\n        min: minValue = options.autoMinMax ? currentMin : 0,\n        max: maxValue = options.autoMinMax ? currentMax : 1\n    } = options;\n\n    if (minValue >= maxValue) {\n        throw new RangeError('min option must be smaller than max option');\n    }\n\n    const factor = (maxValue - minValue) / (currentMax - currentMin);\n    for (var i = 0; i < input.length; i++) {\n        output[i] = (input[i] - currentMin) * factor + minValue;\n    }\n\n    return output;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/ml-array-rescale/src/index.js","import Encoder from './VectorEncoder';\n\nconst CRLF = '\\r\\n';\nconst version = 'Cheminfo tools ' + require('../../package.json').version;\nconst defaultParameters = {encode: 'DIFDUP', yFactor: 1, type: 'SIMPLE', keep: []};\n/**\n * This class converts a SpectraData object into a String that can be stored as a jcamp file.\n * The string reflects the current state of the object and not the raw data from where this\n * spectrum was initially loaded.\n * @author acastillo\n *\n */\nexport default class JcampCreator {\n\n    /**\n     * This function creates a String that represents the given spectraData, in the format JCAM-DX 5.0\n     * The X,Y data can be compressed using one of the methods described in:\n     * \"JCAMP-DX. A STANDARD FORMAT FOR THE EXCHANGE OF ION MOBILITY SPECTROMETRY DATA\",\n     *  http://www.iupac.org/publications/pac/pdf/2001/pdf/7311x1765.pdf\n     * @param {SD} spectraData\n     * @param {object} options - Optional paramteres\n     * @param {string} [options.encode = 'DIFDUP']\n     * @param {number} [options.yFactor = 1]\n     * @param {string} [options.type = 'SIMPLE']\n     * @param {Array} [options.keep = [] ]\n     * @return {string}\n     */\n    convert(spectraData, options) {\n        options = Object.assign({}, defaultParameters, options);\n        const encodeFormat = options.encode.toUpperCase().trim();\n        const factorY = options.yFactor || 1;\n        const limitIntensity = Math.pow(2, 31);\n        let type = options.type;\n        const userDefinedParams = options.keep;\n\n        if (type === null || type.length === 0) {\n            type = 'SIMPLE';\n        }\n\n        var outString = '';\n        spectraData.setActiveElement(0);\n\n        var scale = factorY / spectraData.getParamDouble('YFACTOR', 1);\n        let minMax = {};\n\n        if (!spectraData.is2D()) {\n            minMax = spectraData.getMinMaxY();\n        } else {\n            minMax = {min: spectraData.getMinZ(), max: spectraData.getMaxZ()};\n        }\n\n        if (minMax.max * scale >= limitIntensity) {\n            scale = limitIntensity / minMax.max;\n        }\n\n        var scaleX = Math.abs(1.0 / spectraData.getDeltaX());\n\n        outString += '##TITLE= ' + spectraData.getTitle() + CRLF;\n        outString += '##JCAMP-DX= 5.00\\t$$' + version + CRLF;\n        outString += '##OWNER= ' + spectraData.getParamString('##OWNER=', '') + CRLF;\n        outString += '##DATA TYPE= ' + spectraData.getDataType() + CRLF;\n\n        if (type === 'NTUPLES') {\n            outString += ntuplesHead(spectraData, scale, scaleX, encodeFormat, userDefinedParams);\n        }\n\n        if (type === 'SIMPLE') {\n            outString += simpleHead(spectraData, scale, scaleX, encodeFormat, userDefinedParams);\n        }\n\n        return outString;\n    }\n}\n\nfunction ntuplesHead(spectraData, scale, scaleX, encodeFormat, userDefinedParams) {\n    var outString = '';\n    var variableX = spectraData.getSpectraVariable(0);\n    var variableY = spectraData.getSpectraVariable(1);\n    var variableZ = spectraData.getSpectraVariable(2);\n\n    outString += '##DATA CLASS= NTUPLES' + CRLF;\n    outString += '##NUM DIM= 2' + CRLF;\n    var nTuplesName = spectraData.getDataType().trim();\n    // we set the VarName parameter to the most common ones.\n    // These tables contain the number of occurences of each one\n    var abscVar = {};\n    var sub;\n    for (sub = 0; sub < spectraData.getNbSubSpectra(); sub++) {\n        spectraData.setActiveElement(sub);\n        if (abscVar[spectraData.getXUnits()]) {\n            abscVar[spectraData.getXUnits()].value++;\n        } else {\n            abscVar[spectraData.getXUnits()] = {value: 1, index: sub};\n        }\n    }\n\n    var keys = Object.keys(abscVar);\n    var mostCommon = keys[0];\n    var defaultSub = 0;\n\n    for (sub = 1; sub < keys.length; sub++) {\n        if (abscVar[keys[sub]].value > abscVar[mostCommon].value) {\n            mostCommon = keys[sub];\n            defaultSub = abscVar[keys[sub]].index;\n        }\n    }\n    var isComplex = false;\n    spectraData.setActiveElement(defaultSub);\n    var isNMR = spectraData.getDataType().indexOf('NMR') >= 0;\n\n    if (isNMR) {\n        outString += '##.OBSERVE FREQUENCY= ' + spectraData.getParamDouble('observefrequency', 0) + CRLF;\n        outString += '##.OBSERVE NUCLEUS= ^' + spectraData.getNucleus() + CRLF;\n        outString += '##$DECIM= ' + spectraData.getParamDouble('$DECIM', 0) + CRLF;\n        outString += '##$DSPFVS= ' + spectraData.getParamDouble('$DSPFVS', 0) + CRLF;\n        outString += '##$FCOR= ' + (Math.floor(spectraData.getParamDouble('$FCOR', 0))) + CRLF;\n        if (spectraData.containsParam('$SW_h')) {\n            outString += '##$SW_h= ' + spectraData.getParamDouble('$SW_h', 0) + CRLF;\n        } else if (spectraData.containsParam('$SW_p')) {\n            outString += '##$SW_p= ' + spectraData.getParamDouble('$SW_p', 0) + CRLF;\n        }\n        outString += '##$SW= ' + spectraData.getParamDouble('$SW', 0) + CRLF;\n        outString += '##$TD= ' + (Math.floor(spectraData.getParamDouble('$TD', 0))) + CRLF;\n        outString += '##$BF1= ' + spectraData.getParamDouble('$BF1', 0) + CRLF;\n        outString += '##$GRPDLY= ' + spectraData.getParamDouble('$GRPDLY', 0) + CRLF;\n        outString += '##.DIGITISER RES= ' + spectraData.getParamInt('.DIGITISER RES', 0) + CRLF;\n        outString += '##.PULSE SEQUENCE= ' + spectraData.getParamString('.PULSE SEQUENCE', '') + CRLF;\n        outString += '##.SOLVENT NAME= ' + spectraData.getSolventName() + CRLF;\n        outString += '##$NUC1= <' + spectraData.getNucleus() + '>' + CRLF;\n        if (spectraData.containsParam('2D_X_FREQUENCY')) {\n            outString += '##$SFO1= ' + spectraData.getParamDouble('2D_X_FREQUENCY', 0) + CRLF;\n        } else {\n            outString += '##$SFO1= ' + spectraData.getParamDouble('$SFO1', 0) + CRLF;\n        }\n\n        if (spectraData.containsParam('2D_X_OFFSET')) {\n            outString += '##$OFFSET= ' + spectraData.getParamDouble('2D_X_OFFSET', 0) + CRLF;\n        }\n\n        if (spectraData.is2D()) {\n            outString += '$$Parameters for 2D NMR Spectrum' + CRLF;\n            outString += '##$NUC1= <' + spectraData.getNucleus(2) + '>' + CRLF;\n            if (spectraData.containsParam('2D_Y_FREQUENCY')) {\n                outString += '##$SFO1= ' + spectraData.getParamDouble('2D_Y_FREQUENCY', 0) + CRLF;\n                outString += '##$SFO2= ' + spectraData.getParamDouble('2D_Y_FREQUENCY', 0) + CRLF;\n                outString += '##$BF2= ' + spectraData.getParamDouble('2D_Y_FREQUENCY', 0) + CRLF;\n            }\n            if (spectraData.containsParam('2D_Y_OFFSET')) {\n                outString += '##$OFFSET= ' + spectraData.getParamDouble('2D_Y_OFFSET', 0) + CRLF;\n            }\n\n            outString += '$$End of Parameters for 2D NMR Spectrum' + CRLF;\n        }\n    }\n    outString += '##NTUPLES=\\t' + nTuplesName + CRLF;\n    var freq1 = 1;\n    var freq2 = 1;\n    if (!spectraData.is2D() && spectraData.getNbSubSpectra() > 1 && isNMR) {\n        isComplex = true;\n    }\n    if (isComplex) {\n        outString += '##VAR_NAME=\\t' + spectraData.getXUnits() + ',\\t' + nTuplesName.substring(4) + '/REAL,\\t' + nTuplesName.substring(4) + '/IMAG' + CRLF;\n        outString += '##SYMBOL=\\tX,\\tR,\\tI' + CRLF;\n        outString += '##VAR_TYPE=\\tINDEPENDENT,\\tDEPENDENT,\\tDEPENDENT' + CRLF;\n        if (encodeFormat !== 'CSV' || encodeFormat !== 'PAC') {\n            outString += '##VAR_FORM=\\tAFFN,\\tASDF,\\tASDF' + CRLF;\n        } else {\n            outString += '##VAR_FORM=\\tAFFN,\\tAFFN,\\tAFFN' + CRLF;\n        }\n        outString += '##VAR_DIM=\\t' + spectraData.getNbPoints() + ',\\t' + spectraData.getNbPoints() + ',\\t' + spectraData.getNbPoints() + CRLF;\n        outString += '##UNITS=\\tHZ' + ',\\t' + spectraData.getYUnits() + ',\\t' + variableZ.units + CRLF;\n        outString += '##FACTOR=\\t' + 1.0 / scaleX + ',\\t' + 1.0 / scale + ',\\t' + 1.0 / scale + CRLF;\n\n        if (spectraData.getXUnits() === 'PPM') {\n            freq1 = spectraData.observeFrequencyX();\n        }\n\n        outString += '##FIRST=\\t' + spectraData.getFirstX() * freq1 + ',\\t' + spectraData.getY(0) + ',\\t0' + CRLF;\n        outString += '##LAST=\\t' + spectraData.getLastX() * freq1 + ',\\t' + spectraData.getLastY() + ',\\t0' + CRLF;\n    } else {\n        freq1 = 1;\n        if (spectraData.is2D()) {\n            outString += '##VAR_NAME=\\tFREQUENCY1,\\tFREQUENCY2,\\tSPECTRUM' + CRLF;\n            outString += '##SYMBOL=\\tF1,\\tF2,\\tY' + CRLF;\n            outString += '##.NUCLEUS=\\t' + spectraData.getNucleus(2) + ',\\t' + spectraData.getNucleus(1) + CRLF;\n            outString += '##VAR_TYPE=\\tINDEPENDENT,\\tINDEPENDENT,\\tDEPENDENT' + CRLF;\n            if (encodeFormat !== 'CSV' || encodeFormat !== 'PAC') {\n                outString += '##VAR_FORM=\\tAFFN,\\tAFFN,\\tASDF' + CRLF;\n            } else {\n                outString += '##VAR_FORM=\\tAFFN,\\tAFFN,\\tASDF' + CRLF;\n            }\n            outString += '##VAR_DIM=\\t' + spectraData.getNbSubSpectra() + ',\\t' + spectraData.getNbPoints() + ',\\t' + spectraData.getNbPoints() + CRLF;\n            //We had to change this, for Mestre compatibility\n            //outString+=(\"##UNITS=\\tHZ,\\t\"+ spectraData.getXUnits() + \",\\t\" + spectraData.getYUnits()+CRLF);\n            outString += '##UNITS=\\tHZ,\\tHZ,\\t' + spectraData.getZUnits() + CRLF;\n            if (spectraData.getXUnits() === 'PPM') {\n                freq1 = spectraData.getParamDouble('2D_Y_FREQUENCY', 1);\n            }\n            if (spectraData.getYUnits() === 'PPM') {\n                freq2 = spectraData.getParamDouble('2D_X_FREQUENCY', 1);\n            }\n            outString += '##FACTOR=\\t1,\\t' + freq2 / scaleX + ',\\t' + 1.0 / scale + CRLF;\n            outString += '##FIRST=\\t' + spectraData.getParamDouble('firstY', 0) * freq1 + ',\\t' + spectraData.getFirstX() * freq2 + ',\\t' + spectraData.getY(0) + CRLF;\n            outString += '##LAST=\\t' + spectraData.getParamDouble('lastY', 0) * freq1 + ',\\t' + spectraData.getLastX() * freq2\n            + ',\\t' + spectraData.getY(spectraData.getNbPoints() - 1) + CRLF;\n        } else {\n            outString += '##VAR_NAME=\\t' + variableX.varname + ',\\t' + variableY.varname + ',\\t' + variableX.varname + CRLF;\n            outString += '##SYMBOL=\\t' + variableX.symbol + ',\\t' + variableY.symbol + ',\\t' + variableZ.symbol + CRLF;\n            outString += '##VAR_TYPE=\\t' + variableX.vartype + ',\\t' + variableY.vartype + ',\\t' + variableZ.vartype + CRLF;\n            if (encodeFormat !== 'CSV' || encodeFormat !== 'PAC') {\n                outString += '##VAR_FORM=\\tAFFN,\\tASDF,\\tASDF' + CRLF;\n            } else {\n                outString += '##VAR_FORM=\\tAFFN,\\tAFFN,\\tAFFN' + CRLF;\n            }\n            outString += '##VAR_DIM=\\t' + variableX.vardim + ',\\t' + variableY.vardim + ',\\t' + variableZ.vardim + CRLF;\n            outString += '##UNITS=\\tHZ' + ',\\t' + spectraData.getYUnits() + ',\\t' + variableZ.units + CRLF;\n            if (spectraData.getXUnits() === 'PPM') {\n                freq1 = spectraData.observeFrequencyX();\n            }\n            outString += '##FACTOR=\\t' + 1.0 / scaleX + ',\\t' + 1.0 / scale + CRLF;\n            outString += '##FIRST=\\t' + variableX.first * freq1 + ',\\t' + variableY.first + ',\\t' + variableZ.first + CRLF;\n            outString += '##LAST=\\t' + variableX.last * freq1 + ',\\t' + variableY.last + ',\\t' + variableZ.last + CRLF;\n\n        }\n    }\n\n    //Set the user defined parameters\n    if (userDefinedParams !== null) {\n        for (var i = userDefinedParams.length - 1; i >= 0; i--) {\n            if (spectraData.containsParam(userDefinedParams[i])) {\n                outString += '##' + userDefinedParams[i] + '= '\n                + spectraData.getParam(userDefinedParams[i], '') + CRLF;\n            }\n        }\n    }\n    //Ordinate of the second dimension in case of 2D NMR spectra\n    var yUnits = 0;\n    var lastY = 0;\n    var dy = 1;\n\n    if (spectraData.is2D() && isNMR) {\n        yUnits = spectraData.getParamDouble('firstY', 0) * freq1;\n        lastY = spectraData.getParamDouble('lastY', 0) * freq1;\n        dy = (lastY - yUnits) / (spectraData.getNbSubSpectra() - 1);\n    }\n\n    for (sub = 0; sub < spectraData.getNbSubSpectra(); sub++) {\n        spectraData.setActiveElement(sub);\n        yUnits = spectraData.getParamDouble('firstY', 0) * freq1 + dy * sub;\n        outString += '##PAGE= ' + yUnits + CRLF;\n\n        if (spectraData.is2D() && isNMR) {\n            outString += '##FIRST=\\t' + spectraData.getParamDouble('firstY', 0) * freq1 + ',\\t'\n            + spectraData.getFirstX() * freq2 + ',\\t' + spectraData.getY(0) + CRLF;\n        }\n\n        outString += '##DATA TABLE= ';\n        if (spectraData.isDataClassPeak()) {\n            outString += '(XY..XY), PEAKS' + CRLF;\n            for (let point = 0; point < spectraData.getNbPoints(); point++) {\n                outString += spectraData.getX(point) + ', ' + spectraData.getY(point) + CRLF;\n            }\n\n        } else if (spectraData.isDataClassXY()) {\n            if (isNMR) {\n                if (spectraData.is2D()) {\n                    outString += '(F2++(Y..Y)), PROFILE' + CRLF;\n                } else {\n                    if (sub % 2 === 0) {\n                        outString += '(X++(R..R)), XYDATA' + CRLF;\n                    } else {\n                        outString += '(X++(I..I)), XYDATA' + CRLF;\n                    }\n                }\n            } else {\n                outString += '(X++(Y..Y)), XYDATA' + CRLF;\n            }\n\n            var tempString = '';\n            var data = new Array(spectraData.getNbPoints());\n            for (let point = data.length - 1; point >= 0; point--) {\n                data[point] = Math.round((spectraData.getY(point) * scale));\n            }\n\n            tempString += Encoder.encode(data,\n                spectraData.getFirstX() * scaleX, spectraData.getDeltaX() * scaleX, encodeFormat);\n            outString += tempString + CRLF;\n        }\n    }\n    outString += '##END NTUPLES= ' + nTuplesName + CRLF;\n    outString += '##END= ';\n\n    spectraData.setActiveElement(0);\n\n    return outString;\n}\n\nfunction simpleHead(spectraData, scale, scaleX, encodeFormat, userDefinedParams) {\n    //var variableX = spectraData.getSpectraVariable(0);\n    //var variableY = spectraData.getSpectraVariable(1);\n    var outString = '';\n    if (spectraData.isDataClassPeak()) {\n        outString += '##DATA CLASS= PEAK TABLE' + CRLF;\n    }\n    if (spectraData.isDataClassXY()) {\n        outString += '##DATA CLASS= XYDATA' + CRLF;\n    }\n\n    spectraData.setActiveElement(0);\n    //If it is a NMR spectrum\n    if (spectraData.getDataType().indexOf('NMR') >= 0) {\n        outString += '##.OBSERVE FREQUENCY= ' + spectraData.getParamDouble('observefrequency', 0) + CRLF;\n        outString += '##.OBSERVE NUCLEUS= ^' + spectraData.getNucleus() + CRLF;\n        outString += '##$DECIM= ' + (Math.round(spectraData.getParamDouble('$DECIM', 0))) + CRLF;\n        outString += '##$DSPFVS= ' + (Math.round(spectraData.getParamDouble('$DSPFVS', 0))) + CRLF;\n        outString += '##$FCOR= ' + (Math.round(spectraData.getParamDouble('$FCOR', 0))) + CRLF;\n        outString += '##$SW_h= ' + spectraData.getParamDouble('$SW_h', 0) + CRLF;\n        outString += '##$SW= ' + spectraData.getParamDouble('$SW', 0) + CRLF;\n        outString += '##$TD= ' + (Math.round(spectraData.getParamDouble('$TD', 0))) + CRLF;\n        outString += '##$GRPDLY= ' + spectraData.getParamDouble('$GRPDLY', 0) + CRLF;\n        outString += '##$BF1= ' + spectraData.getParamDouble('$BF1', 0) + CRLF;\n        outString += '##$SFO1= ' + spectraData.getParamDouble('$SFO1', 0) + CRLF;\n        outString += '##$NUC1= <' + spectraData.getNucleus() + '>' + CRLF;\n        outString += '##.SOLVENT NAME= ' + spectraData.getSolventName() + CRLF;\n    }\n    outString += '##XUNITS=\\t' + spectraData.getXUnits() + CRLF;\n    outString += '##YUNITS=\\t' + spectraData.getYUnits() + CRLF;\n    outString += '##NPOINTS=\\t' + spectraData.getNbPoints() + CRLF;\n    outString += '##FIRSTX=\\t' + spectraData.getFirstX() + CRLF;\n    outString += '##LASTX=\\t' + spectraData.getLastX() + CRLF;\n    outString += '##FIRSTY=\\t' + spectraData.getFirstY() + CRLF;\n    outString += '##LASTY=\\t' + spectraData.getLastY() + CRLF;\n    if (spectraData.isDataClassPeak()) {\n        outString += '##XFACTOR=1' + CRLF;\n        outString += '##YFACTOR=1' + CRLF;\n    } else if (spectraData.isDataClassXY()) {\n        outString += '##XFACTOR= ' + 1.0 / scaleX + CRLF;\n        outString += '##YFACTOR= ' + 1.0 / scale + CRLF;\n    }\n    outString += '##MAXY= ' + spectraData.getMaxY() + CRLF;\n    outString += '##MINY= ' + spectraData.getMinY() + CRLF;\n\n    //Set the user defined parameters\n    if (userDefinedParams !== null) {\n        for (var i = userDefinedParams.length - 1; i >= 0; i--) {\n            if (spectraData.containsParam(userDefinedParams[i])) {\n                outString += '##' + userDefinedParams[i] + '= '\n                + spectraData.getParam(userDefinedParams[i], '') + CRLF;\n            }\n        }\n    }\n\n\n    if (spectraData.isDataClassPeak()) {\n        outString += '##PEAK TABLE= (XY..XY)' + CRLF;\n        for (var point = 0; point < spectraData.getNbPoints(); point++) {\n            outString += spectraData.getX(point) + ', ' + spectraData.getY(point) + CRLF;\n        }\n        outString += '##END ';\n\n    } else if (spectraData.isDataClassXY()) {\n        outString += '##DELTAX= ' + spectraData.getDeltaX() + CRLF;\n        outString += '##XYDATA=(X++(Y..Y))' + CRLF;\n        var tempString = '';\n        var data = new Array(spectraData.getNbPoints());\n        for (let point = data.length - 1; point >= 0; point--) {\n            data[point] = Math.round(spectraData.getY(point) * scale);\n        }\n\n        tempString += Encoder.encode(data, spectraData.getFirstX() * scaleX, spectraData.getDeltaX() * scaleX, encodeFormat);\n\n        outString += tempString + CRLF;\n        outString += '##END= ';\n    }\n\n    spectraData.setActiveElement(0);\n    return outString;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/spectra-data/src/jcampEncoder/JcampCreator.js","\n/**\n * class encodes a integer vector as a String in order to store it in a text file.\n * The algorithms used to encode the data are describe in:\n *            http://www.iupac.org/publications/pac/pdf/2001/pdf/7311x1765.pdf\n * Created by acastillo on 3/2/16.\n */\nconst newLine = '\\r\\n';\n\nconst pseudoDigits = [\n    ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],\n    ['@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I'],\n    ['@', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'],\n    ['%', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R'],\n    ['%', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r'],\n    [' ', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 's']\n];\n\nconst SQZ_P = 1;\nconst SQZ_N = 2;\nconst DIF_P = 3;\nconst DIF_N = 4;\nconst DUP = 5;\nconst MaxLinelength = 100;\n\n/**\n * This function encodes the given vector. The encoding format is specified by the\n * encoding option\n * @param {Array} data\n * @param {number} firstX\n * @param {number} intervalX\n * @param {string} encoding: ('FIX','SQZ','DIF','DIFDUP','CVS','PAC') Default 'DIFDUP'\n * @return {string}\n */\nfunction encode(data, firstX, intervalX, encoding) {\n    switch (encoding) {\n        case 'FIX':\n            return fixEncoding(data, firstX, intervalX);\n        case 'SQZ':\n            return squeezedEncoding(data, firstX, intervalX);\n        case 'DIF':\n            return differenceEncoding(data, firstX, intervalX);\n        case 'DIFDUP':\n            return differenceDuplicateEncoding(data, firstX, intervalX);\n        case 'CSV':\n            return commaSeparatedValuesEncoding(data, firstX, intervalX);\n        case 'PAC':\n            return packedEncoding(data, firstX, intervalX);\n        default:\n            return differenceEncoding(data, firstX, intervalX);\n    }\n}\n\n/**\n * @private\n * No data compression used. The data is separated by a comma(',').\n * @param {Array} data\n * @param {number} firstX\n * @param {number} intervalX\n * @return {string}\n */\nfunction commaSeparatedValuesEncoding(data, firstX, intervalX) {\n    return fixEncoding(data, firstX, intervalX, ',');\n}\n\n/**\n * @private\n * No data compression used. The data is separated by the specified separator.\n * @param {Array} data\n * @param {number} firstX\n * @param {number} intervalX\n * @param {string} separator, The separator character\n * @return {string}\n */\nfunction fixEncoding(data, firstX, intervalX, separator) {\n    if (!separator) {\n        separator = ' ';\n    }\n    var outputData = '';\n    var j = 0;\n    var TD = data.length;\n    var i;\n    while (j < TD - 7) {\n        outputData += Math.ceil(firstX + j * intervalX);\n        for (i = 0; i < 8; i++) {\n            outputData += separator + data[j++];\n        }\n        outputData += newLine;\n    }\n    if (j < TD) {\n        //We add last numbers\n        outputData += Math.ceil(firstX + j * intervalX);\n        for (i = j; i < TD; i++) {\n            outputData += separator + data[i];\n        }\n    }\n    return outputData;\n}\n\n/**\n * @private\n * No data compression used. The data is separated by the sign of the number.\n * @param {Array} data\n * @param {number} firstX\n * @param {number} intervalX\n * @return {string}\n */\nfunction packedEncoding(data, firstX, intervalX) {\n    var outputData = '';\n    var j = 0;\n    var TD = data.length;\n    var i;\n\n    while (j < TD - 7) {\n        outputData += Math.ceil(firstX + j * intervalX);\n        for (i = 0; i < 8; i++) {\n            if (data[j] < 0) {\n                outputData += '-' + data[j++];\n            } else {\n                outputData += '+' + data[j++];\n            }\n        }\n        outputData += newLine;\n    }\n    if (j < TD) {\n        //We add last numbers\n        outputData += Math.ceil(firstX + j * intervalX);\n        for (i = j; i < TD; i++) {\n            if (data[i] < 0) {\n                outputData += '-' + data[i];\n            } else {\n                outputData += '+' + data[i];\n            }\n        }\n    }\n    return outputData;\n}\n\n/**\n * @private\n * Data compression is possible using the squeezed form (SQZ) in which the delimiter, the leading digit,\n * and sign are replaced by a pseudo-digit from Table 1. For example, the Y-values 30, 32 would be\n * represented as C0C2.\n * @param {Array} data\n * @param {number} firstX\n * @param {number} intervalX\n * @return {string}\n */\nfunction squeezedEncoding(data, firstX, intervalX) {\n    var outputData = '';\n    //String outputData = new String();\n    var j = 0;\n    var TD = data.length;\n    var i;\n\n    while (j < TD - 10) {\n        outputData += Math.ceil(firstX + j * intervalX);\n        for (i = 0; i < 10; i++) {\n            outputData += squeezedDigit(data[j++].toString());\n        }\n        outputData += newLine;\n    }\n    if (j < TD) {\n        //We add last numbers\n        outputData += Math.ceil(firstX + j * intervalX);\n        for (i = j; i < TD; i++) {\n            outputData += squeezedDigit(data[i].toString());\n        }\n    }\n\n    return outputData;\n}\n\n/**\n * @private\n * Duplicate suppression encoding\n * @param {Array} data\n * @param {number} firstX\n * @param {number} intervalX\n * @return {string}\n */\nfunction differenceDuplicateEncoding(data, firstX, intervalX) {\n    var mult = 0;\n    var index = 0;\n    var charCount = 0;\n    var i;\n    //We built a string where we store the encoded data.\n    var encodData = '';\n    var encodNumber = '';\n    var temp = '';\n\n    //We calculate the differences vector\n    var diffData = new Array(data.length - 1);\n    for (i = 0; i < diffData.length; i++) {\n        diffData[i] = data[i + 1] - data[i];\n    }\n\n    //We simulate a line carry\n    var numDiff = diffData.length;\n    while (index < numDiff) {\n        if (charCount === 0) {//Start line\n            encodNumber = Math.ceil(firstX + index * intervalX) + squeezedDigit(data[index].toString()) + differenceDigit(diffData[index].toString());\n            encodData += encodNumber;\n            charCount += encodNumber.length;\n        } else {\n            //Try to insert next difference\n            if (diffData[index - 1] === diffData[index]) {\n                mult++;\n            } else {\n                if (mult > 0) {//Now we know that it can be in line\n                    mult++;\n                    encodNumber = duplicateDigit(mult.toString());\n                    encodData += encodNumber;\n                    charCount += encodNumber.length;\n                    mult = 0;\n                    index--;\n                } else {\n                    //Mirar si cabe, en caso contrario iniciar una nueva linea\n                    encodNumber = differenceDigit(diffData[index].toString());\n                    if (encodNumber.length + charCount < MaxLinelength) {\n                        encodData += encodNumber;\n                        charCount += encodNumber.length;\n                    } else {//Iniciar nueva linea\n                        encodData += newLine;\n                        temp = Math.ceil(firstX + index * intervalX) + squeezedDigit(data[index].toString()) + encodNumber;\n                        encodData += temp;//Each line start with first index number.\n                        charCount = temp.length;\n                    }\n                }\n            }\n        }\n        index++;\n    }\n    if (mult > 0) {\n        encodData += duplicateDigit((mult + 1).toString());\n    }\n    //We insert the last data from fid. It is done to control of data\n    //The last line start with the number of datas in the fid.\n    encodData += newLine + Math.ceil(firstX + index * intervalX) + squeezedDigit(data[index].toString());\n\n    return encodData;\n}\n\n/**\n * @private\n * Differential encoding\n * @param {Array} data\n * @param {number} firstX\n * @param {number} intervalX\n * @return {string}\n */\nfunction differenceEncoding(data, firstX, intervalX) {\n    var index = 0;\n    var charCount = 0;\n    var i;\n\n    var encodData = '';\n    var encodNumber = '';\n    var temp = '';\n\n    //We calculate the differences vector\n    var diffData = new Array(data.length - 1);\n    for (i = 0; i < diffData.length; i++) {\n        diffData[i] = data[i + 1] - data[i];\n    }\n\n    var numDiff = diffData.length;\n    while (index < numDiff) {\n        if (charCount === 0) {\n            //We convert the first number.\n            encodNumber = Math.ceil(firstX + index * intervalX) + squeezedDigit(data[index].toString()) + differenceDigit(diffData[index].toString());\n            encodData += encodNumber;\n            charCount += encodNumber.length;\n        } else {\n            encodNumber = differenceDigit(diffData[index].toString());\n            if (encodNumber.length + charCount < MaxLinelength) {\n                encodData += encodNumber;\n                charCount += encodNumber.length;\n            } else {\n                encodData += newLine;\n                temp = Math.ceil(firstX + index * intervalX) + squeezedDigit(data[index].toString()) + encodNumber;\n                encodData += temp;//Each line start with first index number.\n                charCount = temp.length;\n            }\n        }\n        index++;\n    }\n    //We insert the last number from data. It is done to control of data\n    encodData += newLine + Math.ceil(firstX + index * intervalX) + squeezedDigit(data[index].toString());\n\n    return encodData;\n}\n\n/**\n * @private\n * Convert number to the ZQZ format, using pseudo digits.\n * @param {number} num\n * @return {string}\n */\nfunction squeezedDigit(num) {\n    var SQZdigit = '';\n    if (num.charAt(0) === '-') {\n        SQZdigit += pseudoDigits[SQZ_N][num.charAt(1)];\n        if (num.length > 2) {\n            SQZdigit += num.substring(2);\n        }\n    } else {\n        SQZdigit += pseudoDigits[SQZ_P][num.charAt(0)];\n        if (num.length > 1) {\n            SQZdigit += num.substring(1);\n        }\n    }\n\n    return SQZdigit;\n}\n\n/**\n * @private\n * Convert number to the DIF format, using pseudo digits.\n * @param {number} num\n * @return {string}\n */\nfunction differenceDigit(num) {\n    var DIFFdigit = '';\n\n    if (num.charAt(0) === '-') {\n        DIFFdigit += pseudoDigits[DIF_N][num.charAt(1)];\n        if (num.length > 2) {\n            DIFFdigit += num.substring(2);\n        }\n\n    } else {\n        DIFFdigit += pseudoDigits[DIF_P][num.charAt(0)];\n        if (num.length > 1) {\n            DIFFdigit += num.substring(1);\n        }\n\n    }\n\n    return DIFFdigit;\n}\n\n/**\n * @private\n * Convert number to the DUP format, using pseudo digits.\n * @param {number} num\n * @return {string}\n */\nfunction duplicateDigit(num) {\n    var DUPdigit = '';\n    DUPdigit += pseudoDigits[DUP][num.charAt(0)];\n    if (num.length > 1) {\n        DUPdigit += num.substring(1);\n    }\n\n    return DUPdigit;\n}\n\nmodule.exports = {\n    encode,\n    fixEncoding,\n    commaSeparatedValuesEncoding,\n    packedEncoding,\n    squeezedEncoding,\n    differenceDuplicateEncoding,\n    differenceEncoding\n};\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/spectra-data/src/jcampEncoder/VectorEncoder.js","module.exports = {\"_from\":\"spectra-data@3.2.0\",\"_id\":\"spectra-data@3.2.0\",\"_inBundle\":false,\"_integrity\":\"sha512-D1e1JThbnNS2zKW+SObJBpbbmnwUHvKA3LbAUscTtcorT9yfgOTIf5kuMvz2PfnPI9/VhA+hNP0ldfDvyUFc0w==\",\"_location\":\"/spectra-data\",\"_phantomChildren\":{},\"_requested\":{\"type\":\"version\",\"registry\":true,\"raw\":\"spectra-data@3.2.0\",\"name\":\"spectra-data\",\"escapedName\":\"spectra-data\",\"rawSpec\":\"3.2.0\",\"saveSpec\":null,\"fetchSpec\":\"3.2.0\"},\"_requiredBy\":[\"/\"],\"_resolved\":\"https://registry.npmjs.org/spectra-data/-/spectra-data-3.2.0.tgz\",\"_shasum\":\"2f42033c530abb28c3ed3cf6219657356cedf3da\",\"_spec\":\"spectra-data@3.2.0\",\"_where\":\"/usr/local/www/sites/www.lactame.com/node/grm-data/git/cheminfo-js/spectra-data\",\"author\":{\"name\":\"Andres Castillo\"},\"bugs\":{\"url\":\"https://github.com/cheminfo-js/spectra/issues\"},\"bundleDependencies\":false,\"contributors\":[{\"name\":\"Michaël Zasso\"},{\"name\":\"Luc Patiny\"}],\"dependencies\":{\"brukerconverter\":\"^1.0.1\",\"jcampconverter\":\"^2.4.5\",\"lodash.round\":\"^4.0.4\",\"ml-array-max\":\"^1.0.1\",\"ml-array-median\":\"^1.0.0\",\"ml-array-min\":\"^1.0.1\",\"ml-array-rescale\":\"^1.1.0\",\"ml-array-utils\":\"^0.3.0\",\"ml-curve-fitting\":\"^0.0.7\",\"ml-fft\":\"^1.3.5\",\"ml-gsd\":\"^2.0.1\",\"ml-matrix-peaks-finder\":\"^0.2.1\",\"ml-simple-clustering\":\"^0.1.0\",\"nmr-simulation\":\"^1.0.11\",\"spectra-data-ranges\":\"^1.0.5\",\"spectra-nmr-utilities\":\"^1.0.1\"},\"deprecated\":false,\"description\":\"spectra-data project - manipulate spectra\",\"devDependencies\":{\"nmr-predictor\":\"^1.1.4\"},\"files\":[\"lib\",\"src\"],\"homepage\":\"https://github.com/cheminfo-js/spectra/packages/spectra-data\",\"jest\":{\"testEnvironment\":\"node\"},\"keywords\":[\"spectra-data\",\"project\"],\"license\":\"MIT\",\"main\":\"./lib/index.js\",\"module\":\"./src/index.js\",\"name\":\"spectra-data\",\"repository\":{\"type\":\"git\",\"url\":\"git+https://github.com/cheminfo-js/spectra.git\"},\"version\":\"3.2.0\"}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/spectra-data/package.json\n// module id = 75\n// module chunks = 0","import GSD from 'ml-gsd';\n\n/**\n * Implementation of the peak picking method described by Cobas in:\n * A new approach to improving automated analysis of proton NMR spectra\n * through Global Spectral Deconvolution (GSD)\n * http://www.spectroscopyeurope.com/images/stories/ColumnPDFs/TD_23_1.pdf\n * @param {SD} spectrum - SD instance.\n * @param {Object} peakList - nmr signals.\n * @param {Object} options - options object with some parameter for GSD.\n * @param {boolean} [options.compile = true] - If true, the Janalyzer function is run over signals to compile the patterns.\n * @param {number} [options.minMaxRatio = 0.01] - Threshold to determine if a given peak should be considered as a noise, bases on its relative height compared to the highest peak.\n * @param {number} [options.broadRatio = 0.00025] - If broadRatio is higher than 0, then all the peaks which second derivative smaller than broadRatio * maxAbsSecondDerivative will be marked with the soft mask equal to true.\n * @param {boolean} [options.smoothY = true] - Select the peak intensities from a smoothed version of the independent variables?\n * @param {number} [options.nL = 4] - factor to determine the width at the moment to group the peaks in signals in 'GSD.optimizePeaks' function.\n * @param {boolean} [options.optimize = true] - if it's true adjust an train of gaussian or lorentzian shapes to spectrum.\n * @param {string} [options.functionType = 'gaussian'] - This option allows us choose between 'gaussian' or 'lorentzian' function when options.optimize is true.\n * @param {number} [options.broadWidth = 0.25] - Threshold to determine if some peak is candidate to clustering into range.\n * @return {Array}\n */\n\nconst defaultOptions = {\n    thresholdFactor: 1,\n    optimize: false,\n    minMaxRatio: 0.01,\n    broadRatio: 0.00025,\n    smoothY: true,\n    widthFactor: 4,\n    realTop: true,\n    functionName: 'gaussian',\n    broadWidth: 0.25,\n    sgOptions: {windowSize: 9, polynomial: 3}\n};\n\n\nexport default function extractPeaks(spectrum, options = {}) {\n    options = Object.assign({}, defaultOptions, options, {optimize: false, broadWidth: false});\n\n    if (!options.noiseLevel) {\n        options.noiseLevel = Math.abs(spectrum.getNoiseLevel()) * (options.thresholdFactor);\n    }\n\n    var data = spectrum.getXYData();\n\n    if (options.from && options.to) {\n        data = spectrum.getVector(options.from, options.to);\n    }\n    var peakList = GSD.gsd(data[0], data[1], options);\n\n    if (options.broadWidth) {\n        peakList = GSD.post.joinBroadPeaks(peakList, {width: options.broadWidth});\n    }\n    if (options.optimize) {\n        peakList = GSD.post.optimizePeaks(peakList, data[0], data[1], options);\n    }\n\n    return clearList(peakList, options.noiseLevel);\n}\n\n/**\n * this function remove the peaks with an intensity lower to threshold\n * @param {object} peakList - peaks\n * @param {number} threshold\n * @return {object} the clean peakList\n * @private\n */\nfunction clearList(peakList, threshold) {\n    for (var i = 0, l = peakList.length; i < l; i++) {\n        if (Math.abs(peakList[i].y) < threshold) {\n            peakList.splice(i, 1);\n        }\n    }\n    return peakList;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/spectra-data/src/peakPicking/peakPicking.js","'use strict';\n\nmodule.exports.post = require('../src/optimize');\nmodule.exports.gsd = require('../src/gsd');\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/ml-gsd/src/index.js","/**\n * Created by acastillo on 9/6/15.\n */\n'use strict';\n\nvar Opt = require('ml-optimize-lorentzian');\n\nfunction sampleFunction(from, to, x, y, lastIndex) {\n    var nbPoints = x.length;\n    var sampleX = [];\n    var sampleY = [];\n    var direction = Math.sign(x[1] - x[0]);//Direction of the derivative\n    if (direction === -1) {\n        lastIndex[0] = x.length - 1;\n    }\n\n    var delta = Math.abs(to - from) / 2;\n    var mid = (from + to) / 2;\n    var stop = false;\n    var index = lastIndex[0];\n    while (!stop && index < nbPoints && index >= 0) {\n        if (Math.abs(x[index] - mid) <= delta) {\n            sampleX.push(x[index]);\n            sampleY.push(y[index]);\n            index += direction;\n        } else {\n            //It is outside the range.\n            if (Math.sign(mid - x[index]) === 1) {\n                //We'll reach the mid going in the current direction\n                index += direction;\n            } else {\n                //There is not more peaks in the current range\n                stop = true;\n            }\n        }\n        //console.log(sampleX);\n    }\n    lastIndex[0] = index;\n    return [sampleX, sampleY];\n}\n\nfunction optimizePeaks(peakList, x, y, n, fnType) {\n    var i, j, lastIndex = [0];\n    var groups = groupPeaks(peakList, n);\n    var result = [];\n    var factor = 1;\n    if (fnType === 'gaussian')\n        factor = 1.17741;//From https://en.wikipedia.org/wiki/Gaussian_function#Properties\n    var sampling, error, opts;\n    for (i = 0; i < groups.length; i++) {\n        var peaks = groups[i].group;\n        if (peaks.length > 1) {\n            //Multiple peaks\n            //console.log(\"Pending group of overlaped peaks \"+peaks.length);\n            //console.log(\"here1\");\n            //console.log(groups[i].limits);\n            sampling = sampleFunction(groups[i].limits[0] - groups[i].limits[1], groups[i].limits[0] + groups[i].limits[1], x, y, lastIndex);\n            //console.log(sampling);\n            if (sampling[0].length > 5) {\n                error = peaks[0].width / 1000;\n                opts = [  3,    100, error, error, error, error * 10, error * 10,    11,    9,        1 ];\n                //var gauss = Opt.optimizeSingleGaussian(sampling[0], sampling[1], opts, peaks);\n                var optPeaks = [];\n                if (fnType === 'gaussian')\n                    optPeaks = Opt.optimizeGaussianSum(sampling, peaks, opts);\n                else {\n                    if (fnType === 'lorentzian') {\n                        optPeaks = Opt.optimizeLorentzianSum(sampling, peaks, opts);\n                    }\n                }\n                //console.log(optPeak);\n                for (j = 0; j < optPeaks.length; j++) {\n                    result.push({x: optPeaks[j][0][0], y: optPeaks[j][1][0], width: optPeaks[j][2][0] * factor});\n                }\n            }\n        } else {\n            //Single peak\n            peaks = peaks[0];\n            sampling = sampleFunction(peaks.x - n * peaks.width,\n                peaks.x + n * peaks.width, x, y, lastIndex);\n            //console.log(\"here2\");\n            //console.log(groups[i].limits);\n            if (sampling[0].length > 5) {\n                error = peaks.width / 1000;\n                opts = [3, 100, error, error, error, error * 10, error * 10, 11, 9, 1];\n                //var gauss = Opt.optimizeSingleGaussian(sampling[0], sampling[1], opts, peaks);\n                //var gauss = Opt.optimizeSingleGaussian([sampling[0],sampling[1]], peaks, opts);\n                var optPeak = [];\n                if (fnType === 'gaussian')\n                    optPeak = Opt.optimizeSingleGaussian([sampling[0], sampling[1]], peaks,  opts);\n                else {\n                    if (fnType === 'lorentzian') {\n                        optPeak = Opt.optimizeSingleLorentzian([sampling[0], sampling[1]], peaks,  opts);\n                    }\n                }\n                //console.log(optPeak);\n                result.push({x: optPeak[0][0], y: optPeak[1][0], width: optPeak[2][0] * factor}); // From https://en.wikipedia.org/wiki/Gaussian_function#Properties}\n            }\n        }\n\n    }\n    return result;\n}\n\nfunction groupPeaks(peakList, nL) {\n    var group = [];\n    var groups = [];\n    var i, j;\n    var limits = [peakList[0].x, nL * peakList[0].width];\n    var upperLimit, lowerLimit;\n    //Merge forward\n    for (i = 0; i < peakList.length; i++) {\n        //If the 2 things overlaps\n        if (Math.abs(peakList[i].x - limits[0]) < (nL * peakList[i].width + limits[1])) {\n            //Add the peak to the group\n            group.push(peakList[i]);\n            //Update the group limits\n            upperLimit = limits[0] + limits[1];\n            if (peakList[i].x + nL * peakList[i].width > upperLimit) {\n                upperLimit = peakList[i].x + nL * peakList[i].width;\n            }\n            lowerLimit = limits[0] - limits[1];\n            if (peakList[i].x - nL * peakList[i].width < lowerLimit) {\n                lowerLimit = peakList[i].x - nL * peakList[i].width;\n            }\n            limits = [(upperLimit + lowerLimit) / 2, Math.abs(upperLimit - lowerLimit) / 2];\n\n        } else {\n            groups.push({limits: limits, group: group});\n            //var optmimalPeak = fitSpectrum(group,limits,spectrum);\n            group = [peakList[i]];\n            limits = [peakList[i].x, nL * peakList[i].width];\n        }\n    }\n    groups.push({limits: limits, group: group});\n    //Merge backward\n    for (i = groups.length - 2; i >= 0; i--) {\n        //The groups overlaps\n        if (Math.abs(groups[i].limits[0] - groups[i + 1].limits[0]) <\n            (groups[i].limits[1] + groups[i + 1].limits[1]) / 2) {\n            for (j = 0; j < groups[i + 1].group.length; j++) {\n                groups[i].group.push(groups[i + 1].group[j]);\n            }\n            upperLimit = groups[i].limits[0] + groups[i].limits[1];\n            if (groups[i + 1].limits[0] + groups[i + 1].limits[1] > upperLimit) {\n                upperLimit = groups[i + 1].limits[0] + groups[i + 1].limits[1];\n            }\n            lowerLimit = groups[i].limits[0] - groups[i].limits[1];\n            if (groups[i + 1].limits[0] - groups[i + 1].limits[1] < lowerLimit) {\n                lowerLimit = groups[i + 1].limits[0] - groups[i + 1].limits[1];\n            }\n            //console.log(limits);\n            groups[i].limits = [(upperLimit + lowerLimit) / 2, Math.abs(upperLimit - lowerLimit) / 2];\n\n            groups.splice(i + 1, 1);\n        }\n    }\n    return groups;\n}\n/**\n * This function try to join the peaks that seems to belong to a broad signal in a single broad peak.\n * @param peakList\n * @param options\n */\nfunction joinBroadPeaks(peakList, options) {\n    var width = options.width;\n    var broadLines = [];\n    //Optimize the possible broad lines\n    var max = 0, maxI = 0, count = 1;\n    for (let i = peakList.length - 1; i >= 0; i--) {\n        if (peakList[i].soft) {\n            broadLines.push(peakList.splice(i, 1)[0]);\n        }\n    }\n    //Push a feak peak\n    broadLines.push({x: Number.MAX_VALUE});\n\n    var candidates = [[broadLines[0].x,\n                        broadLines[0].y]];\n    var indexes = [0];\n\n    for (let i = 1; i < broadLines.length; i++) {\n        //console.log(broadLines[i-1].x+\" \"+broadLines[i].x);\n        if (Math.abs(broadLines[i - 1].x - broadLines[i].x) < width) {\n            candidates.push([broadLines[i].x, 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        } else {\n            if (count > 2) {\n                var fitted = Opt.optimizeSingleLorentzian(candidates,\n                    {x: broadLines[maxI].x, y: max, width: Math.abs(candidates[0][0] - candidates[candidates.length - 1][0])});\n                peakList.push({x: fitted[0][0], y: fitted[1][0], width: fitted[2][0], soft: false});\n\n            } else {\n                //Put back the candidates to the signals list\n                indexes.map(function (index) {\n                    peakList.push(broadLines[index]);\n                });\n            }\n            candidates = [[broadLines[i].x, broadLines[i].y]];\n            indexes = [i];\n            max = broadLines[i].y;\n            maxI = i;\n            count = 1;\n        }\n    }\n\n    peakList.sort(function (a, b) {\n        return a.x - b.x;\n    });\n\n    return peakList;\n\n}\n\n/*\n var isPartOf = true\nif(options.broadRatio>0){\n var broadLines=[[Number.MAX_VALUE,0,0]];\n //Optimize the possible broad lines\n var max=0, maxI=0,count=0;\n var candidates = [],broadLinesS=[];\n var isPartOf = false;\n\n for(var i=broadLines.length-1;i>0;i--){\n //console.log(broadLines[i][0]+\" \"+rangeX+\" \"+Math.abs(broadLines[i-1][0]-broadLines[i][0]));\n if(Math.abs(broadLines[i-1][0]-broadLines[i][0])<rangeX){\n\n candidates.push(broadLines[i]);\n if(broadLines[i][1]>max){\n max = broadLines[i][1];\n maxI = i;\n }\n count++;\n }\n else{\n isPartOf = true;\n if(count>30){ // TODO, an options ?\n isPartOf = false;\n //for(var j=0;j<signals.length;j++){\n //    if(Math.abs(broadLines[maxI][0]-signals[j][0])<rangeX)\n //       isPartOf = true;\n //    }\n //console.log(\"Was part of \"+isPartOf);\n }\n if(isPartOf){\n for(var j=0;j<candidates.length;j++){\n signals.push([candidates[j][0], candidates[j][1], dx]);\n }\n }\n else{\n var fitted =  Opt.optimizeSingleLorentzian(candidates,{x:candidates[maxI][0],\n width:Math.abs(candidates[0][0]-candidates[candidates.length-1][0])},\n []);\n //console.log(fitted);\n signals.push([fitted[0][0],fitted[0][1],fitted[0][2]]);\n }\n candidates = [];\n max = 0;\n maxI = 0;\n count = 0;\n }\n }\n }*/\n\nmodule.exports = {optimizePeaks: optimizePeaks, joinBroadPeaks: joinBroadPeaks};\n\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/ml-gsd/src/optimize.js","'use strict';\n\nvar LM = require('ml-curve-fitting');\nvar math = LM.Matrix.algebra;\nvar Matrix = require('ml-matrix');\n\n/**\n * This function calculates the spectrum as a sum of lorentzian functions. The Lorentzian\n * parameters are divided in 3 batches. 1st: centers; 2nd: heights; 3th: widths;\n * @param t Ordinate values\n * @param p Lorentzian parameters\n * @param c Constant parameters(Not used)\n * @returns {*}\n */\nfunction sumOfLorentzians(t,p,c){\n    var nL = p.length/3,factor,i, j,p2, cols = t.rows;\n    var result = Matrix.zeros(t.length,1);\n\n    for(i=0;i<nL;i++){\n        p2 = Math.pow(p[i+nL*2][0]/2,2);\n        factor = p[i+nL][0]*p2;\n        for(j=0;j<cols;j++){\n            result[j][0]+=factor/(Math.pow(t[j][0]-p[i][0],2)+p2);\n        }\n    }\n    return result;\n}\n\n/**\n * This function calculates the spectrum as a sum of gaussian functions. The Gaussian\n * parameters are divided in 3 batches. 1st: centers; 2nd: height; 3th: std's;\n * @param t Ordinate values\n * @param p Gaussian parameters\n * @param c Constant parameters(Not used)\n * @returns {*}\n */\nfunction sumOfGaussians(t,p,c){\n    var nL = p.length/3,factor,i, j, cols = t.rows;\n    var result = Matrix.zeros(t.length,1);\n\n    for(i=0;i<nL;i++){\n        factor = p[i+nL*2][0]*p[i+nL*2][0]/2;\n        for(j=0;j<cols;j++){\n            result[j][0]+=p[i+nL][0]*Math.exp(-(t[i][0]-p[i][0])*(t[i][0]-p[i][0])/factor);\n        }\n    }\n    return result;\n}\n/**\n * Single 4 parameter lorentzian function\n * @param t Ordinate values\n * @param p Lorentzian parameters\n * @param c Constant parameters(Not used)\n * @returns {*}\n */\nfunction singleLorentzian(t,p,c){\n    var factor = p[1][0]*Math.pow(p[2][0]/2,2);\n    var rows = t.rows;\n    var result = new Matrix(t.rows, t.columns);\n    for(var i=0;i<rows;i++){\n        result[i][0]=factor/(Math.pow(t[i][0]-p[0][0],2)+Math.pow(p[2][0]/2,2));\n    }\n    return result;\n}\n\n/**\n * Single 3 parameter gaussian function\n * @param t Ordinate values\n * @param p Gaussian parameters [mean, height, std]\n * @param c Constant parameters(Not used)\n * @returns {*}\n */\nfunction singleGaussian(t,p,c){\n    var factor2 = p[2][0]*p[2][0]/2;\n    var rows = t.rows;\n    var result = new Matrix(t.rows, t.columns);\n    for(var i=0;i<rows;i++){\n        result[i][0]=p[1][0]*Math.exp(-(t[i][0]-p[0][0])*(t[i][0]-p[0][0])/factor2);\n    }\n    return result;\n}\n\n/**\n * * Fits a set of points to a Lorentzian function. Returns the center of the peak, the width at half height, and the height of the signal.\n * @param data,[y]\n * @returns {*[]}\n */\nfunction optimizeSingleLorentzian(xy, peak, opts) {\n    opts = opts || {};\n    var xy2 = parseData(xy, opts.percentage||0);\n\n    if(xy2===null||xy2[0].rows<3){\n        return null; //Cannot run an optimization with less than 3 points\n    }\n\n    var t = xy2[0];\n    var y_data = xy2[1];\n    var maxY = xy2[2];\n    var nbPoints = t.rows, i;\n\n    var weight = [nbPoints / Math.sqrt(y_data.dot(y_data))];\n\n    var opts=Object.create(opts.LMOptions || [  3,    100, 1e-3, 1e-3, 1e-3, 1e-2, 1e-2,    11,    9,        1 ]);\n    //var opts = [  3,    100, 1e-3, 1e-3, 1e-3, 1e-2, 1e-2,    11,    9,        1 ];\n    var consts = [ ];\n    var dt = Math.abs(t[0][0]-t[1][0]);// optional vector of constants\n    var dx = new Matrix([[-dt/10000],[-1e-3],[-dt/10000]]);//-Math.abs(t[0][0]-t[1][0])/100;\n    var p_init = new Matrix([[peak.x],[1],[peak.width]]);\n    var p_min = new Matrix([[peak.x-dt],[0.75],[peak.width/4]]);\n    var p_max = new Matrix([[peak.x+dt],[1.25],[peak.width*4]]);\n\n    var p_fit = LM.optimize(singleLorentzian,p_init,t,y_data,weight,dx,p_min,p_max,consts,opts);\n\n\n    p_fit = p_fit.p;\n    return [p_fit[0],[p_fit[1][0]*maxY],p_fit[2]];\n\n}\n\n/**\n * Fits a set of points to a gaussian bell. Returns the mean of the peak, the std and the height of the signal.\n * @param data,[y]\n * @returns {*[]}\n */\nfunction optimizeSingleGaussian(xy, peak, opts) {\n    opts = opts || {};\n    var xy2 = parseData(xy, opts.percentage||0);\n\n    if(xy2===null||xy2[0].rows<3){\n        return null; //Cannot run an optimization with less than 3 points\n    }\n\n    var t = xy2[0];\n    var y_data = xy2[1];\n    var maxY = xy2[2];\n\n    var nbPoints = t.rows, i;\n\n\n\n    var weight = [nbPoints / Math.sqrt(y_data.dot(y_data))];\n\n    var opts=Object.create(opts.LMOptions || [  3,    100, 1e-3, 1e-3, 1e-3, 1e-2, 1e-2,    11,    9,        1 ]);\n    //var opts = [  3,    100, 1e-3, 1e-3, 1e-3, 1e-2, 1e-2,    11,    9,        1 ];\n    var consts = [ ];                         // optional vector of constants\n    var dt = Math.abs(t[0][0]-t[1][0]);\n    var dx = new Matrix([[-dt/10000],[-1e-3],[-dt/10000]]);//-Math.abs(t[0][0]-t[1][0])/100;\n\n    var dx = new Matrix([[-Math.abs(t[0][0]-t[1][0])/1000],[-1e-3],[-peak.width/1000]]);\n    var p_init = new Matrix([[peak.x],[1],[peak.width]]);\n    var p_min = new Matrix([[peak.x-dt],[0.75],[peak.width/4]]);\n    var p_max = new Matrix([[peak.x+dt],[1.25],[peak.width*4]]);\n    //var p_min = new Matrix([[peak.x-peak.width/4],[0.75],[peak.width/3]]);\n    //var p_max = new Matrix([[peak.x+peak.width/4],[1.25],[peak.width*3]]);\n\n    var p_fit = LM.optimize(singleGaussian,p_init,t,y_data,weight,dx,p_min,p_max,consts,opts);\n    p_fit = p_fit.p;\n    return [p_fit[0],[p_fit[1][0]*maxY],p_fit[2]];\n}\n\n/*\n peaks on group should sorted\n */\nfunction optimizeLorentzianTrain(xy, group, opts){\n    var xy2 = parseData(xy);\n    //console.log(xy2[0].rows);\n    if(xy2===null||xy2[0].rows<3){\n        return null; //Cannot run an optimization with less than 3 points\n    }\n\n    var t = xy2[0];\n    var y_data = xy2[1];\n    var maxY = xy2[2];\n    var currentIndex = 0;\n    var nbPoints = t.length;\n    var nextX;\n    var tI, yI, maxY;\n    var result=[], current;\n    for(var i=0; i<group.length;i++){\n        nextX = group[i].x-group[i].width*4;\n        //console.log(group[i]);\n        while(t[currentIndex++]<nextX&&currentIndex<nbPoints);\n        nextX = group[i].x+group[i].width*4;\n        tI = [];\n        yI = [];\n        while(t[currentIndex]<=nextX&&currentIndex<nbPoints){\n            tI.push(t[currentIndex][0]);\n            yI.push(y_data[currentIndex][0]*maxY);\n            currentIndex++;\n        }\n\n        current=optimizeSingleLorentzian([tI, yI], group[i], opts);\n        if(current){\n            result.push({\"x\":current[0][0],\"y\":current[1][0],\"width\":current[2][0],\"opt\":true});\n        }\n        else{\n            result.push({\"x\":group[i].x,\"y\":group[i].y,\"width\":group[i].width,\"opt\":false});\n        }\n    }\n\n    return result;\n\n}\n\nfunction optimizeGaussianTrain(xy, group, opts){\n    var xy2 = parseData(xy);\n    //console.log(xy2[0].rows);\n    if(xy2===null||xy2[0].rows<3){\n        return null; //Cannot run an optimization with less than 3 points\n    }\n\n    var t = xy2[0];\n    var y_data = xy2[1];\n    var maxY = xy2[2];\n    var currentIndex = 0;\n    var nbPoints = t.length;\n    var nextX;\n    var tI, yI, maxY;\n    var result=[], current;\n    for(var i=0; i<group.length;i++){\n        nextX = group[i].x-group[i].width*4;\n        //console.log(group[i]);\n        while(t[currentIndex++]<nextX&&currentIndex<nbPoints);\n        nextX = group[i].x+group[i].width*4;\n        tI = [];\n        yI = [];\n        while(t[currentIndex]<=nextX&&currentIndex<nbPoints){\n            tI.push(t[currentIndex][0]);\n            yI.push(y_data[currentIndex][0]*maxY);\n            currentIndex++;\n        }\n\n        current=optimizeSingleGaussian([tI, yI], group[i], opts);\n        if(current){\n            result.push({\"x\":current[0][0],\"y\":current[1][0],\"width\":current[2][0],\"opt\":true});\n        }\n        else{\n            result.push({\"x\":group[i].x,\"y\":group[i].y,\"width\":group[i].width,\"opt\":false});\n        }\n    }\n\n    return result;\n}\n\n\n\n/**\n *\n * @param xy A two column matrix containing the x and y data to be fitted\n * @param group A set of initial lorentzian parameters to be optimized [center, heigth, half_width_at_half_height]\n * @returns {Array} A set of final lorentzian parameters [center, heigth, hwhh*2]\n */\nfunction optimizeLorentzianSum(xy, group, opts){\n    var xy2 = parseData(xy);\n\n    if(xy2===null||xy2[0].rows<3){\n        return null; //Cannot run an optimization with less than 3 points\n    }\n\n    var t = xy2[0];\n    var y_data = xy2[1];\n    var maxY = xy2[2];\n    var nbPoints = t.rows, i;\n\n    var weight = [nbPoints / math.sqrt(y_data.dot(y_data))];\n    var opts=Object.create(opts || [  3,    100, 1e-3, 1e-3, 1e-3, 1e-2, 1e-2, 11, 9, 1 ]);\n    var consts = [ ];// optional vector of constants\n\n    var nL = group.length;\n    var p_init = new Matrix(nL*3,1);\n    var p_min =  new Matrix(nL*3,1);\n    var p_max =  new Matrix(nL*3,1);\n    var dx = new Matrix(nL*3,1);\n    var dt = Math.abs(t[0][0]-t[1][0]);\n    for( i=0;i<nL;i++){\n        p_init[i][0] = group[i].x;\n        p_init[i+nL][0] = 1;\n        p_init[i+2*nL][0] = group[i].width;\n\n        p_min[i][0] = group[i].x-dt;//-group[i].width/4;\n        p_min[i+nL][0] = 0;\n        p_min[i+2*nL][0] = group[i].width/4;\n\n        p_max[i][0] = group[i].x+dt;//+group[i].width/4;\n        p_max[i+nL][0] = 1.5;\n        p_max[i+2*nL][0] = group[i].width*4;\n\n        dx[i][0] = -dt/1000;\n        dx[i+nL][0] = -1e-3;\n        dx[i+2*nL][0] = -dt/1000;\n    }\n\n    var dx = -Math.abs(t[0][0]-t[1][0])/10000;\n    var p_fit = LM.optimize(sumOfLorentzians, p_init, t, y_data, weight, dx, p_min, p_max, consts, opts);\n    p_fit=p_fit.p;\n    //Put back the result in the correct format\n    var result = new Array(nL);\n    for( i=0;i<nL;i++){\n        result[i]=[p_fit[i],[p_fit[i+nL][0]*maxY],p_fit[i+2*nL]];\n    }\n\n    return result;\n\n}\n\n/**\n *\n * @param xy A two column matrix containing the x and y data to be fitted\n * @param group A set of initial lorentzian parameters to be optimized [center, heigth, half_width_at_half_height]\n * @returns {Array} A set of final lorentzian parameters [center, heigth, hwhh*2]\n */\nfunction optimizeGaussianSum(xy, group, opts){\n    var xy2 = parseData(xy);\n\n    if(xy2===null||xy2[0].rows<3){\n        return null; //Cannot run an optimization with less than 3 points\n    }\n\n    var t = xy2[0];\n    var y_data = xy2[1];\n    var maxY = xy2[2];\n    var nbPoints = t.rows,i;\n\n    var weight = new Matrix(nbPoints,1);//[nbPoints / math.sqrt(y_data.dot(y_data))];\n    var k = nbPoints / math.sqrt(y_data.dot(y_data));\n    for(i=0;i<nbPoints;i++){\n        weight[i][0]=k;///(y_data[i][0]);\n        //weight[i][0]=k*(2-y_data[i][0]);\n    }\n\n    var opts=Object.create(opts || [  3,    100, 1e-3, 1e-3, 1e-3, 1e-2, 1e-2,    11,    9,        2 ]);\n    //var opts=[  3,    100, 1e-5, 1e-6, 1e-6, 1e-6, 1e-6,    11,    9,        1 ];\n    var consts = [ ];// optional vector of constants\n\n    var nL = group.length;\n    var p_init = new Matrix(nL*3,1);\n    var p_min =  new Matrix(nL*3,1);\n    var p_max =  new Matrix(nL*3,1);\n    var dx = new Matrix(nL*3,1);\n    var dt = Math.abs(t[0][0]-t[1][0]);\n    for( i=0;i<nL;i++){\n        p_init[i][0] = group[i].x;\n        p_init[i+nL][0] = group[i].y/maxY;\n        p_init[i+2*nL][0] = group[i].width;\n\n        p_min[i][0] = group[i].x-dt;\n        p_min[i+nL][0] = group[i].y*0.8/maxY;\n        p_min[i+2*nL][0] = group[i].width/2;\n\n        p_max[i][0] = group[i].x+dt;\n        p_max[i+nL][0] = group[i].y*1.2/maxY;\n        p_max[i+2*nL][0] = group[i].width*2;\n\n        dx[i][0] = -dt/1000;\n        dx[i+nL][0] = -1e-3;\n        dx[i+2*nL][0] = -dt/1000;\n    }\n    //console.log(t);\n    var p_fit = LM.optimize(sumOfLorentzians,p_init,t,y_data,weight,dx,p_min,p_max,consts,opts);\n    p_fit = p_fit.p;\n    //Put back the result in the correct format\n    var result = new Array(nL);\n    for( i=0;i<nL;i++){\n        result[i]=[p_fit[i],[p_fit[i+nL][0]*maxY],p_fit[i+2*nL]];\n    }\n\n    return result;\n\n}\n/**\n *\n * Converts the given input to the required x, y column matrices. y data is normalized to max(y)=1\n * @param xy\n * @returns {*[]}\n */\nfunction parseData(xy, threshold){\n    var nbSeries = xy.length;\n    var t = null;\n    var y_data = null, x,y;\n    var maxY = 0, i,j;\n\n    if(nbSeries==2){\n        //Looks like row wise matrix [x,y]\n        var nbPoints = xy[0].length;\n        //if(nbPoints<3)\n        //    throw new Exception(nbPoints);\n        //else{\n        t = new Array(nbPoints);//new Matrix(nbPoints,1);\n        y_data = new Array(nbPoints);//new Matrix(nbPoints,1);\n        x = xy[0];\n        y = xy[1];\n        if(typeof x[0] === \"number\"){\n            for(i=0;i<nbPoints;i++){\n                t[i]=x[i];\n                y_data[i]=y[i];\n                if(y[i]>maxY)\n                    maxY = y[i];\n            }\n        }\n        else{\n            //It is a colum matrix\n            if(typeof x[0] === \"object\"){\n                for(i=0;i<nbPoints;i++){\n                    t[i]=x[i][0];\n                    y_data[i]=y[i][0];\n                    if(y[i][0]>maxY)\n                        maxY = y[i][0];\n                }\n            }\n\n        }\n\n        //}\n    }\n    else{\n        //Looks like a column wise matrix [[x],[y]]\n        var nbPoints = nbSeries;\n        //if(nbPoints<3)\n        //    throw new SizeException(nbPoints);\n        //else {\n        t = new Array(nbPoints);//new Matrix(nbPoints, 1);\n        y_data = new Array(nbPoints);//new Matrix(nbPoints, 1);\n        for (i = 0; i < nbPoints; i++) {\n            t[i] = xy[i][0];\n            y_data[i] = xy[i][1];\n            if(y_data[i]>maxY)\n                maxY = y_data[i];\n        }\n        //}\n    }\n    for (i = 0; i < nbPoints; i++) {\n        y_data[i]/=maxY;\n    }\n    if(threshold){\n        for (i = nbPoints-1; i >=0; i--) {\n            if(y_data[i]<threshold) {\n                y_data.splice(i,1);\n                t.splice(i,1);\n            }\n        }\n    }\n    if(t.length>0)\n        return [(new Matrix([t])).transpose(),(new Matrix([y_data])).transpose(),maxY];\n    return null;\n}\n\nfunction sizeException(nbPoints) {\n    return new RangeError(\"Not enough points to perform the optimization: \"+nbPoints +\"< 3\");\n}\n\nmodule.exports.optimizeSingleLorentzian = optimizeSingleLorentzian;\nmodule.exports.optimizeLorentzianSum = optimizeLorentzianSum;\nmodule.exports.optimizeSingleGaussian = optimizeSingleGaussian;\nmodule.exports.optimizeGaussianSum = optimizeGaussianSum;\nmodule.exports.singleGaussian = singleGaussian;\nmodule.exports.singleLorentzian = singleLorentzian;\nmodule.exports.optimizeGaussianTrain = optimizeGaussianTrain;\nmodule.exports.optimizeLorentzianTrain = optimizeLorentzianTrain;\n\n\n// WEBPACK FOOTER //\n// ./node_modules/ml-optimize-lorentzian/src/index.js","'use strict';\n\nmodule.exports = require('./LM');\nmodule.exports.Matrix = require('ml-matrix');\nmodule.exports.Matrix.algebra = require('./algebra');\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/ml-optimize-lorentzian/node_modules/ml-curve-fitting/src/index.js","/**\n * Created by acastillo on 8/5/15.\n */\nvar Matrix = require(\"ml-matrix\");\nvar math = require(\"./algebra\");\n\nvar DEBUG = false;\n/** Levenberg Marquardt curve-fitting: minimize sum of weighted squared residuals\n ----------  INPUT  VARIABLES  -----------\n func   = function of n independent variables, 't', and m parameters, 'p',\n returning the simulated model: y_hat = func(t,p,c)\n p      = n-vector of initial guess of parameter values\n t      = m-vectors or matrix of independent variables (used as arg to func)\n y_dat  = m-vectors or matrix of data to be fit by func(t,p)\n weight = weighting vector for least squares fit ( weight >= 0 ) ...\n inverse of the standard measurement errors\n Default:  sqrt(d.o.f. / ( y_dat' * y_dat ))\n dp     = fractional increment of 'p' for numerical derivatives\n dp(j)>0 central differences calculated\n dp(j)<0 one sided 'backwards' differences calculated\n dp(j)=0 sets corresponding partials to zero; i.e. holds p(j) fixed\n Default:  0.001;\n p_min  = n-vector of lower bounds for parameter values\n p_max  = n-vector of upper bounds for parameter values\n c      = an optional matrix of values passed to func(t,p,c)\n opts   = vector of algorithmic parameters\n parameter    defaults    meaning\n opts(1)  =  prnt            3        >1 intermediate results; >2 plots\n opts(2)  =  MaxIter      10*Npar     maximum number of iterations\n opts(3)  =  epsilon_1       1e-3     convergence tolerance for gradient\n opts(4)  =  epsilon_2       1e-3     convergence tolerance for parameters\n opts(5)  =  epsilon_3       1e-3     convergence tolerance for Chi-square\n opts(6)  =  epsilon_4       1e-2     determines acceptance of a L-M step\n opts(7)  =  lambda_0        1e-2     initial value of L-M paramter\n opts(8)  =  lambda_UP_fac   11       factor for increasing lambda\n opts(9)  =  lambda_DN_fac    9       factor for decreasing lambda\n opts(10) =  Update_Type      1       1: Levenberg-Marquardt lambda update\n 2: Quadratic update\n 3: Nielsen's lambda update equations\n\n ----------  OUTPUT  VARIABLES  -----------\n p       = least-squares optimal estimate of the parameter values\n X2      = Chi squared criteria\n sigma_p = asymptotic standard error of the parameters\n sigma_y = asymptotic standard error of the curve-fit\n corr    = correlation matrix of the parameters\n R_sq    = R-squared cofficient of multiple determination\n cvg_hst = convergence history\n\n Henri Gavin, Dept. Civil & Environ. Engineering, Duke Univ. 22 Sep 2013\n modified from: http://octave.sourceforge.net/optim/function/leasqr.html\n using references by\n Press, et al., Numerical Recipes, Cambridge Univ. Press, 1992, Chapter 15.\n Sam Roweis       http://www.cs.toronto.edu/~roweis/notes/lm.pdf\n Manolis Lourakis http://www.ics.forth.gr/~lourakis/levmar/levmar.pdf\n Hans Nielson     http://www2.imm.dtu.dk/~hbn/publ/TR9905.ps\n Mathworks        optimization toolbox reference manual\n K. Madsen, H.B., Nielsen, and O. Tingleff\n http://www2.imm.dtu.dk/pubdb/views/edoc_download.php/3215/pdf/imm3215.pdf\n */\nvar LM = {\n\n    optimize: function(func,p,t,y_dat,weight,dp,p_min,p_max,c,opts){\n\n        var tensor_parameter = 0;\t\t\t// set to 1 of parameter is a tensor\n\n        var iteration  = 0;\t\t\t// iteration counter\n        //func_calls = 0;\t\t\t// running count of function evaluations\n\n        if((typeof p[0])!=\"object\"){\n            for(var i=0;i< p.length;i++){\n                p[i]=[p[i]];\n            }\n\n        }\n        //p = p(:); y_dat = y_dat(:);\t\t// make column vectors\n        var i,k;\n        var eps = 2^-52;\n        var Npar   = p.length;//length(p); \t\t\t// number of parameters\n        var Npnt   = y_dat.length;//length(y_dat);\t\t// number of data points\n        var p_old  = Matrix.zeros(Npar,1);\t\t// previous set of parameters\n        var y_old  = Matrix.zeros(Npnt,1);\t\t// previous model, y_old = y_hat(t;p_old)\n        var X2     = 1e-2/eps;\t\t\t// a really big initial Chi-sq value\n        var X2_old = 1e-2/eps;\t\t\t// a really big initial Chi-sq value\n        var J =  Matrix.zeros(Npnt,Npar);\n\n\n        if (t.length != y_dat.length) {\n            console.log('lm.m error: the length of t must equal the length of y_dat');\n\n            length_t = t.length;\n            length_y_dat = y_dat.length;\n            var X2 = 0, corr = 0, sigma_p = 0, sigma_y = 0, R_sq = 0, cvg_hist = 0;\n            if (!tensor_parameter) {\n                return;\n            }\n        }\n\n        weight = weight||Math.sqrt((Npnt-Npar+1)/(math.multiply(math.transpose(y_dat),y_dat)));\n        dp = dp || 0.001;\n        p_min   = p_min || math.multiply(Math.abs(p),-100);\n        p_max   = p_max || math.multiply(Math.abs(p),100);\n        c = c || 1;\n        // Algorithmic Paramters\n        //prnt MaxIter  eps1  eps2  epx3  eps4  lam0  lamUP lamDN UpdateType\n        opts = opts ||[  3,10*Npar, 1e-3, 1e-3, 1e-3, 1e-2, 1e-2, 11, 9, 1 ];\n\n        var prnt          = opts[0];\t// >1 intermediate results; >2 plots\n        var MaxIter       = opts[1];\t// maximum number of iterations\n        var epsilon_1     = opts[2];\t// convergence tolerance for gradient\n        var epsilon_2     = opts[3];\t// convergence tolerance for parameter\n        var epsilon_3     = opts[4];\t// convergence tolerance for Chi-square\n        var epsilon_4     = opts[5];\t// determines acceptance of a L-M step\n        var lambda_0      = opts[6];\t// initial value of damping paramter, lambda\n        var lambda_UP_fac = opts[7];\t// factor for increasing lambda\n        var lambda_DN_fac = opts[8];\t// factor for decreasing lambda\n        var Update_Type   = opts[9];\t// 1: Levenberg-Marquardt lambda update\n        // 2: Quadratic update\n        // 3: Nielsen's lambda update equations\n\n        if ( tensor_parameter && prnt == 3 ) prnt = 2;\n\n\n        if(!dp.length || dp.length == 1){\n            var dp_array = new Array(Npar);\n            for(var i=0;i<Npar;i++)\n                dp_array[i]=[dp];\n            dp=dp_array;\n        }\n\n        // indices of the parameters to be fit\n        var idx   = [];\n        for(i=0;i<dp.length;i++){\n            if(dp[i][0]!=0){\n                idx.push(i);\n            }\n        }\n\n        var Nfit = idx.length;\t\t\t// number of parameters to fit\n        var stop = false;\t\t\t\t// termination flag\n\n        var weight_sq = null;\n        //console.log(weight);\n        if ( !weight.length || weight.length < Npnt )\t{\n            // squared weighting vector\n            //weight_sq = ( weight(1)*ones(Npnt,1) ).^2;\n            //console.log(\"weight[0] \"+typeof weight[0]);\n            var tmp = math.multiply(Matrix.ones(Npnt,1),weight[0]);\n            weight_sq = math.dotMultiply(tmp,tmp);\n        }\n        else{\n            //weight_sq = (weight(:)).^2;\n            weight_sq = math.dotMultiply(weight,weight);\n        }\n\n\n        // initialize Jacobian with finite difference calculation\n        //console.log(\"J \"+weight_sq);\n        var result = this.lm_matx(func,t,p_old,y_old,1,J,p,y_dat,weight_sq,dp,c);\n        var JtWJ = result.JtWJ,JtWdy=result.JtWdy,X2=result.Chi_sq,y_hat=result.y_hat,J=result.J;\n        //[JtWJ,JtWdy,X2,y_hat,J] = this.lm_matx(func,t,p_old,y_old,1,J,p,y_dat,weight_sq,dp,c);\n        //console.log(JtWJ);\n\n        if ( Math.max(Math.abs(JtWdy)) < epsilon_1 ){\n            console.log(' *** Your Initial Guess is Extremely Close to Optimal ***')\n            console.log(' *** epsilon_1 = ', epsilon_1);\n            stop = true;\n        }\n\n\n        switch(Update_Type){\n            case 1: // Marquardt: init'l lambda\n                lambda  = lambda_0;\n                break;\n            default:    // Quadratic and Nielsen\n                lambda  = lambda_0 * Math.max(math.diag(JtWJ));\n                nu=2;\n        }\n        //console.log(X2);\n        X2_old = X2; // previous value of X2\n        //console.log(MaxIter+\" \"+Npar);\n        //var cvg_hst = Matrix.ones(MaxIter,Npar+3);\t\t// initialize convergence history\n        var h = null;\n        while ( !stop && iteration <= MaxIter ) {\t\t// --- Main Loop\n            iteration = iteration + 1;\n            // incremental change in parameters\n            switch(Update_Type){\n                case 1:\t\t\t\t\t// Marquardt\n                    //h = ( JtWJ + lambda * math.diag(math.diag(JtWJ)) ) \\ JtWdy;\n                    //h = math.multiply(math.inv(JtWdy),math.add(JtWJ,math.multiply(lambda,math.diag(math.diag(Npar)))));\n                    h = math.solve(math.add(JtWJ,math.multiply(math.diag(math.diag(JtWJ)),lambda)),JtWdy);\n                    break;\n                default:\t\t\t\t\t// Quadratic and Nielsen\n                    //h = ( JtWJ + lambda * math.eye(Npar) ) \\ JtWdy;\n\n                    h = math.solve(math.add(JtWJ,math.multiply( Matrix.eye(Npar),lambda)),JtWdy);\n            }\n\n            /*for(var k=0;k< h.length;k++){\n             h[k]=[h[k]];\n             }*/\n            //console.log(\"h \"+h);\n            //h=math.matrix(h);\n            //  big = max(abs(h./p)) > 2;\n            //this is a big step\n            // --- Are parameters [p+h] much better than [p] ?\n            var hidx = new Array(idx.length);\n            for(k=0;k<idx.length;k++){\n                hidx[k]=h[idx[k]];\n            }\n            var p_try = math.add(p, hidx);// update the [idx] elements\n\n            for(k=0;k<p_try.length;k++){\n                p_try[k][0]=Math.min(Math.max(p_min[k][0],p_try[k][0]),p_max[k][0]);\n            }\n            // p_try = Math.min(Math.max(p_min,p_try),p_max);           // apply constraints\n\n            var delta_y = math.subtract(y_dat, func(t,p_try,c));       // residual error using p_try\n            //func_calls = func_calls + 1;\n            //X2_try = delta_y' * ( delta_y .* weight_sq );  // Chi-squared error criteria\n\n            var X2_try = math.multiply(math.transpose(delta_y),math.dotMultiply(delta_y,weight_sq));\n\n            if ( Update_Type == 2 ){  \t\t\t  // Quadratic\n                //    One step of quadratic line update in the h direction for minimum X2\n                //var alpha =  JtWdy'*h / ( (X2_try - X2)/2 + 2*JtWdy'*h ) ;\n                var JtWdy_th = math.multiply(math.transpose(JtWdy),h);\n                var alpha =  math.multiply(JtWdy_th,math.inv(math.add(math.multiply(math.subtract(X2_try - X2),1/2)),math.multiply(JtWdy_th,2)));//JtWdy'*h / ( (X2_try - X2)/2 + 2*JtWdy'*h ) ;\n\n                h = math.multiply(alpha, h);\n                for(var k=0;k<idx.length;k++){\n                    hidx[k]=h[idx[k]];\n                }\n\n                p_try = math.add(p ,hidx);                     // update only [idx] elements\n                p_try = math.min(math.max(p_min,p_try),p_max);          // apply constraints\n\n                delta_y = math.subtract(y_dat, func(t,p_try,c));      // residual error using p_try\n                // func_calls = func_calls + 1;\n                //X2_try = delta_y' * ( delta_y .* weight_sq ); // Chi-squared error criteria\n                X2_try = math.multiply(math.transpose(delta_y), mat.dotMultiply(delta_y, weight_sq));\n            }\n\n            //rho = (X2 - X2_try) / ( 2*h' * (lambda * h + JtWdy) ); // Nielsen\n            var rho = (X2-X2_try)/math.multiply(math.multiply(math.transpose(h),2),math.add(math.multiply(lambda, h),JtWdy));\n            //console.log(\"rho \"+rho);\n            if ( rho > epsilon_4 ) {\t\t// it IS significantly better\n                //console.log(\"Here\");\n                dX2 = X2 - X2_old;\n                X2_old = X2;\n                p_old = p;\n                y_old = y_hat;\n                p = p_try;\t\t\t// accept p_try\n\n                result = this.lm_matx(func, t, p_old, y_old, dX2, J, p, y_dat, weight_sq, dp, c);\n                JtWJ = result.JtWJ,JtWdy=result.JtWdy,X2=result.Chi_sq,y_hat=result.y_hat,J=result.J;\n                // decrease lambda ==> Gauss-Newton method\n\n                switch (Update_Type) {\n                    case 1:\t\t\t\t\t\t\t// Levenberg\n                        lambda = Math.max(lambda / lambda_DN_fac, 1.e-7);\n                        break;\n                    case 2:\t\t\t\t\t\t\t// Quadratic\n                        lambda = Math.max(lambda / (1 + alpha), 1.e-7);\n                        break;\n                    case 3:\t\t\t\t\t\t\t// Nielsen\n                        lambda = math.multiply(Math.max(1 / 3, 1 - (2 * rho - 1) ^ 3),lambda);\n                        nu = 2;\n                        break;\n                }\n            }\n            else {\t\t\t\t\t// it IS NOT better\n                X2 = X2_old;\t\t\t// do not accept p_try\n                if (iteration%(2 * Npar)==0) {\t// rank-1 update of Jacobian\n                    result = this.lm_matx(func, t, p_old, y_old, -1, J, p, y_dat, weight_sq, dp, c);\n                    JtWJ = result.JtWJ,JtWdy=result.JtWdy,dX2=result.Chi_sq,y_hat=result.y_hat,J=result.J;\n                }\n\n                // increase lambda  ==> gradient descent method\n                switch (Update_Type) {\n                    case 1:\t\t\t\t\t\t\t// Levenberg\n                        lambda = Math.min(lambda * lambda_UP_fac, 1.e7);\n                        break;\n                    case 2:\t\t\t\t\t\t\t// Quadratic\n                        lambda = lambda + Math.abs((X2_try - X2) / 2 / alpha);\n                        break;\n                    case 3:\t\t\t\t\t\t// Nielsen\n                        lambda = lambda * nu;\n                        nu = 2 * nu;\n                        break;\n                }\n            }\n        }// --- End of Main Loop\n\n        // --- convergence achieved, find covariance and confidence intervals\n\n        // equal weights for paramter error analysis\n        weight_sq = math.multiply(math.multiply(math.transpose(delta_y),delta_y), Matrix.ones(Npnt,1));\n\n        weight_sq.apply(function(i,j){\n            weight_sq[i][j] = (Npnt-Nfit+1)/weight_sq[i][j];\n        });\n        //console.log(weight_sq);\n        result = this.lm_matx(func,t,p_old,y_old,-1,J,p,y_dat,weight_sq,dp,c);\n        JtWJ = result.JtWJ,JtWdy=result.JtWdy,X2=result.Chi_sq,y_hat=result.y_hat,J=result.J;\n\n        /*if nargout > 2\t\t\t\t// standard error of parameters\n         covar = inv(JtWJ);\n         sigma_p = sqrt(diag(covar));\n         end\n\n         if nargout > 3\t\t\t\t// standard error of the fit\n         //  sigma_y = sqrt(diag(J * covar * J'));\t// slower version of below\n         sigma_y = zeros(Npnt,1);\n         for i=1:Npnt\n         sigma_y(i) = J(i,:) * covar * J(i,:)';\n         end\n         sigma_y = sqrt(sigma_y);\n         end\n\n         if nargout > 4\t\t\t\t// parameter correlation matrix\n         corr = covar ./ [sigma_p*sigma_p'];\n         end\n\n         if nargout > 5\t\t\t\t// coefficient of multiple determination\n         R_sq = corrcoef([y_dat y_hat]);\n         R_sq = R_sq(1,2).^2;\n         end\n\n         if nargout > 6\t\t\t\t// convergence history\n         cvg_hst = cvg_hst(1:iteration,:);\n         end*/\n\n        // endfunction  # ---------------------------------------------------------- LM\n\n        return { p:p, X2:X2};\n    },\n\n    lm_FD_J:function(func,t,p,y,dp,c) {\n        // J = lm_FD_J(func,t,p,y,{dp},{c})\n        //\n        // partial derivatives (Jacobian) dy/dp for use with lm.m\n        // computed via Finite Differences\n        // Requires n or 2n function evaluations, n = number of nonzero values of dp\n        // -------- INPUT VARIABLES ---------\n        // func = function of independent variables, 't', and parameters, 'p',\n        //        returning the simulated model: y_hat = func(t,p,c)\n        // t  = m-vector of independent variables (used as arg to func)\n        // p  = n-vector of current parameter values\n        // y  = func(t,p,c) n-vector initialised by user before each call to lm_FD_J\n        // dp = fractional increment of p for numerical derivatives\n        //      dp(j)>0 central differences calculated\n        //      dp(j)<0 one sided differences calculated\n        //      dp(j)=0 sets corresponding partials to zero; i.e. holds p(j) fixed\n        //      Default:  0.001;\n        // c  = optional vector of constants passed to y_hat = func(t,p,c)\n        //---------- OUTPUT VARIABLES -------\n        // J  = Jacobian Matrix J(i,j)=dy(i)/dp(j)\ti=1:n; j=1:m\n\n        //   Henri Gavin, Dept. Civil & Environ. Engineering, Duke Univ. November 2005\n        //   modified from: ftp://fly.cnuce.cnr.it/pub/software/octave/leasqr/\n        //   Press, et al., Numerical Recipes, Cambridge Univ. Press, 1992, Chapter 15.\n\n        var m = y.length;\t\t\t// number of data points\n        var n = p.length;\t\t\t// number of parameters\n\n        dp = dp || math.multiply( Matrix.ones(n, 1), 0.001);\n\n        var ps = p.clone();//JSON.parse(JSON.stringify(p));\n        //var ps = $.extend(true, [], p);\n        var J = new Matrix(m,n), del =new Array(n);         // initialize Jacobian to Zero\n\n        for (var j = 0;j < n; j++) {\n            //console.log(j+\" \"+dp[j]+\" \"+p[j]+\" \"+ps[j]+\" \"+del[j]);\n            del[j] = dp[j]*(1+Math.abs(p[j][0]));  // parameter perturbation\n            p[j] = [ps[j][0]+del[j]];\t      // perturb parameter p(j)\n            //console.log(j+\" \"+dp[j]+\" \"+p[j]+\" \"+ps[j]+\" \"+del[j]);\n\n            if (del[j] != 0){\n                y1 = func(t, p, c);\n                //func_calls = func_calls + 1;\n                if (dp[j][0] < 0) {\t\t// backwards difference\n                    //J(:,j) = math.dotDivide(math.subtract(y1, y),del[j]);//. / del[j];\n                    //console.log(del[j]);\n                    //console.log(y);\n                    var column = math.dotDivide(math.subtract(y1, y),del[j]);\n                    for(var k=0;k< m;k++){\n                        J[k][j]=column[k][0];\n                    }\n                    //console.log(column);\n                }\n                else{\n                    p[j][0] = ps[j][0] - del[j];\n                    //J(:,j) = (y1 - feval(func, t, p, c)). / (2. * del[j]);\n                    var column = math.dotDivide(math.subtract(y1,func(t,p,c)),2*del[j]);\n                    for(var k=0;k< m;k++){\n                        J[k][j]=column[k][0];\n                    }\n\n                }\t\t\t// central difference, additional func call\n            }\n\n            p[j] = ps[j];\t\t// restore p(j)\n\n        }\n        //console.log(\"lm_FD_J: \"+ JSON.stringify(J));\n        return J;\n\n    },\n\n    // endfunction # -------------------------------------------------- LM_FD_J\n    lm_Broyden_J: function(p_old,y_old,J,p,y){\n        // J = lm_Broyden_J(p_old,y_old,J,p,y)\n        // carry out a rank-1 update to the Jacobian matrix using Broyden's equation\n        //---------- INPUT VARIABLES -------\n        // p_old = previous set of parameters\n        // y_old = model evaluation at previous set of parameters, y_hat(t;p_old)\n        // J  = current version of the Jacobian matrix\n        // p     = current  set of parameters\n        // y     = model evaluation at current  set of parameters, y_hat(t;p)\n        //---------- OUTPUT VARIABLES -------\n        // J = rank-1 update to Jacobian Matrix J(i,j)=dy(i)/dp(j)\ti=1:n; j=1:m\n        //console.log(p+\" X \"+ p_old)\n        var h  = math.subtract(p, p_old);\n\n        //console.log(\"hhh \"+h);\n        var h_t = math.transpose(h);\n        h_t.div(math.multiply(h_t,h));\n\n        //console.log(h_t);\n        //J = J + ( y - y_old - J*h )*h' / (h'*h);\t// Broyden rank-1 update eq'n\n        J = math.add(J, math.multiply(math.subtract(y, math.add(y_old,math.multiply(J,h))),h_t));\n        return J;\n        // endfunction # ---------------------------------------------- LM_Broyden_J\n    },\n\n    lm_matx : function (func,t,p_old,y_old,dX2,J,p,y_dat,weight_sq,dp,c,iteration){\n        // [JtWJ,JtWdy,Chi_sq,y_hat,J] = this.lm_matx(func,t,p_old,y_old,dX2,J,p,y_dat,weight_sq,{da},{c})\n        //\n        // Evaluate the linearized fitting matrix, JtWJ, and vector JtWdy,\n        // and calculate the Chi-squared error function, Chi_sq\n        // Used by Levenberg-Marquard algorithm, lm.m\n        // -------- INPUT VARIABLES ---------\n        // func   = function ofpn independent variables, p, and m parameters, p,\n        //         returning the simulated model: y_hat = func(t,p,c)\n        // t      = m-vectors or matrix of independent variables (used as arg to func)\n        // p_old  = n-vector of previous parameter values\n        // y_old  = m-vector of previous model ... y_old = y_hat(t;p_old);\n        // dX2    = previous change in Chi-squared criteria\n        // J   = m-by-n Jacobian of model, y_hat, with respect to parameters, p\n        // p      = n-vector of current  parameter values\n        // y_dat  = n-vector of data to be fit by func(t,p,c)\n        // weight_sq = square of the weighting vector for least squares fit ...\n        //\t    inverse of the standard measurement errors\n        // dp     = fractional increment of 'p' for numerical derivatives\n        //          dp(j)>0 central differences calculated\n        //          dp(j)<0 one sided differences calculated\n        //          dp(j)=0 sets corresponding partials to zero; i.e. holds p(j) fixed\n        //          Default:  0.001;\n        // c      = optional vector of constants passed to y_hat = func(t,p,c)\n        //---------- OUTPUT VARIABLES -------\n        // JtWJ\t = linearized Hessian matrix (inverse of covariance matrix)\n        // JtWdy   = linearized fitting vector\n        // Chi_sq = Chi-squared criteria: weighted sum of the squared residuals WSSR\n        // y_hat  = model evaluated with parameters 'p'\n        // J   = m-by-n Jacobian of model, y_hat, with respect to parameters, p\n\n        //   Henri Gavin, Dept. Civil & Environ. Engineering, Duke Univ. November 2005\n        //   modified from: ftp://fly.cnuce.cnr.it/pub/software/octave/leasqr/\n        //   Press, et al., Numerical Recipes, Cambridge Univ. Press, 1992, Chapter 15.\n\n\n        var Npnt = y_dat.length;\t\t// number of data points\n        var Npar = p.length;\t\t// number of parameters\n\n        dp = dp || 0.001;\n\n\n        //var JtWJ = new Matrix.zeros(Npar);\n        //var JtWdy  = new Matrix.zeros(Npar,1);\n\n        var y_hat = func(t,p,c);\t// evaluate model using parameters 'p'\n        //func_calls = func_calls + 1;\n        //console.log(J);\n        if ( (iteration%(2*Npar))==0 || dX2 > 0 ) {\n            //console.log(\"Par\");\n            J = this.lm_FD_J(func, t, p, y_hat, dp, c);\t\t// finite difference\n        }\n        else{\n            //console.log(\"ImPar\");\n            J = this.lm_Broyden_J(p_old, y_old, J, p, y_hat); // rank-1 update\n        }\n        var delta_y = math.subtract(y_dat, y_hat);\t// residual error between model and data\n        //console.log(delta_y[0][0]);\n        //console.log(delta_y.rows+\" \"+delta_y.columns+\" \"+JSON.stringify(weight_sq));\n        //var Chi_sq = delta_y' * ( delta_y .* weight_sq ); \t// Chi-squared error criteria\n        var Chi_sq = math.multiply(math.transpose(delta_y),math.dotMultiply(delta_y,weight_sq));\n        //JtWJ  = J' * ( J .* ( weight_sq * ones(1,Npar) ) );\n        var Jt = math.transpose(J);\n\n        //console.log(weight_sq);\n\n        var JtWJ = math.multiply(Jt, math.dotMultiply(J,math.multiply(weight_sq, Matrix.ones(1,Npar))));\n\n        //JtWdy = J' * ( weight_sq .* delta_y );\n        var JtWdy = math.multiply(Jt, math.dotMultiply(weight_sq,delta_y));\n\n\n        return {JtWJ:JtWJ,JtWdy:JtWdy,Chi_sq:Chi_sq,y_hat:y_hat,J:J};\n        // endfunction  # ------------------------------------------------------ LM_MATX\n    }\n\n\n\n};\n\nmodule.exports = LM;\n\n\n// WEBPACK FOOTER //\n// ./node_modules/ml-optimize-lorentzian/node_modules/ml-curve-fitting/src/LM.js","'use strict';\n\nvar Matrix = require('./matrix');\n\nvar SingularValueDecomposition = require('./dc/svd');\nvar EigenvalueDecomposition = require('./dc/evd');\nvar LuDecomposition = require('./dc/lu');\nvar QrDecomposition = require('./dc/qr');\nvar CholeskyDecomposition = require('./dc/cholesky');\n\nfunction inverse(matrix) {\n    return solve(matrix, Matrix.eye(matrix.rows));\n}\n\nMatrix.prototype.inverse = function () {\n    return inverse(this);\n};\n\nfunction solve(leftHandSide, rightHandSide) {\n    return leftHandSide.isSquare() ? new LuDecomposition(leftHandSide).solve(rightHandSide) : new QrDecomposition(leftHandSide).solve(rightHandSide);\n}\n\nMatrix.prototype.solve = function (other) {\n    return solve(this, other);\n};\n\nmodule.exports = {\n    SingularValueDecomposition: SingularValueDecomposition,\n    SVD: SingularValueDecomposition,\n    EigenvalueDecomposition: EigenvalueDecomposition,\n    EVD: EigenvalueDecomposition,\n    LuDecomposition: LuDecomposition,\n    LU: LuDecomposition,\n    QrDecomposition: QrDecomposition,\n    QR: QrDecomposition,\n    CholeskyDecomposition: CholeskyDecomposition,\n    CHO: CholeskyDecomposition,\n    inverse: inverse,\n    solve: solve\n};\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/ml-optimize-lorentzian/node_modules/ml-matrix/src/decompositions.js","'use strict';\n\nvar Matrix = require('../matrix');\nvar hypotenuse = require('./util').hypotenuse;\n\n// https://github.com/lutzroeder/Mapack/blob/master/Source/SingularValueDecomposition.cs\nfunction SingularValueDecomposition(value, options) {\n    if (!(this instanceof SingularValueDecomposition)) {\n        return new SingularValueDecomposition(value, options);\n    }\n    value = Matrix.checkMatrix(value);\n\n    options = options || {};\n\n    var a = value.clone(),\n        m = value.rows,\n        n = value.columns,\n        nu = Math.min(m, n);\n\n    var wantu = true, wantv = true;\n    if (options.computeLeftSingularVectors === false)\n        wantu = false;\n    if (options.computeRightSingularVectors === false)\n        wantv = false;\n    var autoTranspose = options.autoTranspose === true;\n\n    var swapped = false;\n    if (m < n) {\n        if (!autoTranspose) {\n            console.warn('Computing SVD on a matrix with more columns than rows. Consider enabling autoTranspose');\n        } else {\n            a = a.transpose();\n            m = a.rows;\n            n = a.columns;\n            swapped = true;\n            var aux = wantu;\n            wantu = wantv;\n            wantv = aux;\n        }\n    }\n\n    var s = new Array(Math.min(m + 1, n)),\n        U = Matrix.zeros(m, nu),\n        V = Matrix.zeros(n, n),\n        e = new Array(n),\n        work = new Array(m);\n\n    var nct = Math.min(m - 1, n);\n    var nrt = Math.max(0, Math.min(n - 2, m));\n\n    var i, j, k, p, t, ks, f, cs, sn, max, kase,\n        scale, sp, spm1, epm1, sk, ek, b, c, shift, g;\n\n    for (k = 0, max = Math.max(nct, nrt); k < max; k++) {\n        if (k < nct) {\n            s[k] = 0;\n            for (i = k; i < m; i++) {\n                s[k] = hypotenuse(s[k], a[i][k]);\n            }\n            if (s[k] !== 0) {\n                if (a[k][k] < 0) {\n                    s[k] = -s[k];\n                }\n                for (i = k; i < m; i++) {\n                    a[i][k] /= s[k];\n                }\n                a[k][k] += 1;\n            }\n            s[k] = -s[k];\n        }\n\n        for (j = k + 1; j < n; j++) {\n            if ((k < nct) && (s[k] !== 0)) {\n                t = 0;\n                for (i = k; i < m; i++) {\n                    t += a[i][k] * a[i][j];\n                }\n                t = -t / a[k][k];\n                for (i = k; i < m; i++) {\n                    a[i][j] += t * a[i][k];\n                }\n            }\n            e[j] = a[k][j];\n        }\n\n        if (wantu && (k < nct)) {\n            for (i = k; i < m; i++) {\n                U[i][k] = a[i][k];\n            }\n        }\n\n        if (k < nrt) {\n            e[k] = 0;\n            for (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] = -e[k];\n                for (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 (i = k + 1; i < m; i++) {\n                    work[i] = 0;\n                }\n                for (j = k + 1; j < n; j++) {\n                    for (i = k + 1; i < m; i++) {\n                        work[i] += e[j] * a[i][j];\n                    }\n                }\n                for (j = k + 1; j < n; j++) {\n                    t = -e[j] / e[k + 1];\n                    for (i = k + 1; i < m; i++) {\n                        a[i][j] += t * work[i];\n                    }\n                }\n            }\n            if (wantv) {\n                for (i = k + 1; i < n; i++) {\n                    V[i][k] = e[i];\n                }\n            }\n        }\n    }\n\n    p = Math.min(n, m + 1);\n    if (nct < n) {\n        s[nct] = a[nct][nct];\n    }\n    if (m < p) {\n        s[p - 1] = 0;\n    }\n    if (nrt + 1 < p) {\n        e[nrt] = a[nrt][p - 1];\n    }\n    e[p - 1] = 0;\n\n    if (wantu) {\n        for (j = nct; j < nu; j++) {\n            for (i = 0; i < m; i++) {\n                U[i][j] = 0;\n            }\n            U[j][j] = 1;\n        }\n        for (k = nct - 1; k >= 0; k--) {\n            if (s[k] !== 0) {\n                for (j = k + 1; j < nu; j++) {\n                    t = 0;\n                    for (i = k; i < m; i++) {\n                        t += U[i][k] * U[i][j];\n                    }\n                    t = -t / U[k][k];\n                    for (i = k; i < m; i++) {\n                        U[i][j] += t * U[i][k];\n                    }\n                }\n                for (i = k; i < m; i++) {\n                    U[i][k] = -U[i][k];\n                }\n                U[k][k] = 1 + U[k][k];\n                for (i = 0; i < k - 1; i++) {\n                    U[i][k] = 0;\n                }\n            } else {\n                for (i = 0; i < m; i++) {\n                    U[i][k] = 0;\n                }\n                U[k][k] = 1;\n            }\n        }\n    }\n\n    if (wantv) {\n        for (k = n - 1; k >= 0; k--) {\n            if ((k < nrt) && (e[k] !== 0)) {\n                for (j = k + 1; j < n; j++) {\n                    t = 0;\n                    for (i = k + 1; i < n; i++) {\n                        t += V[i][k] * V[i][j];\n                    }\n                    t = -t / V[k + 1][k];\n                    for (i = k + 1; i < n; i++) {\n                        V[i][j] += t * V[i][k];\n                    }\n                }\n            }\n            for (i = 0; i < n; i++) {\n                V[i][k] = 0;\n            }\n            V[k][k] = 1;\n        }\n    }\n\n    var pp = p - 1,\n        iter = 0,\n        eps = Math.pow(2, -52);\n    while (p > 0) {\n        for (k = p - 2; k >= -1; k--) {\n            if (k === -1) {\n                break;\n            }\n            if (Math.abs(e[k]) <= eps * (Math.abs(s[k]) + Math.abs(s[k + 1]))) {\n                e[k] = 0;\n                break;\n            }\n        }\n        if (k === p - 2) {\n            kase = 4;\n        } else {\n            for (ks = p - 1; ks >= k; ks--) {\n                if (ks === k) {\n                    break;\n                }\n                t = (ks !== p ? Math.abs(e[ks]) : 0) + (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                f = e[p - 2];\n                e[p - 2] = 0;\n                for (j = p - 2; j >= k; j--) {\n                    t = hypotenuse(s[j], f);\n                    cs = s[j] / t;\n                    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 (i = 0; i < n; i++) {\n                            t = cs * V[i][j] + sn * V[i][p - 1];\n                            V[i][p - 1] = -sn * V[i][j] + cs * V[i][p - 1];\n                            V[i][j] = t;\n                        }\n                    }\n                }\n                break;\n            }\n            case 2 : {\n                f = e[k - 1];\n                e[k - 1] = 0;\n                for (j = k; j < p; j++) {\n                    t = hypotenuse(s[j], f);\n                    cs = s[j] / t;\n                    sn = f / t;\n                    s[j] = t;\n                    f = -sn * e[j];\n                    e[j] = cs * e[j];\n                    if (wantu) {\n                        for (i = 0; i < m; i++) {\n                            t = cs * U[i][j] + sn * U[i][k - 1];\n                            U[i][k - 1] = -sn * U[i][j] + cs * U[i][k - 1];\n                            U[i][j] = t;\n                        }\n                    }\n                }\n                break;\n            }\n            case 3 : {\n                scale = Math.max(Math.max(Math.max(Math.max(Math.abs(s[p - 1]), Math.abs(s[p - 2])), Math.abs(e[p - 2])), Math.abs(s[k])), Math.abs(e[k]));\n                sp = s[p - 1] / scale;\n                spm1 = s[p - 2] / scale;\n                epm1 = e[p - 2] / scale;\n                sk = s[k] / scale;\n                ek = e[k] / scale;\n                b = ((spm1 + sp) * (spm1 - sp) + epm1 * epm1) / 2;\n                c = (sp * epm1) * (sp * epm1);\n                shift = 0;\n                if ((b !== 0) || (c !== 0)) {\n                    shift = Math.sqrt(b * b + c);\n                    if (b < 0) {\n                        shift = -shift;\n                    }\n                    shift = c / (b + shift);\n                }\n                f = (sk + sp) * (sk - sp) + shift;\n                g = sk * ek;\n                for (j = k; j < p - 1; j++) {\n                    t = hypotenuse(f, g);\n                    cs = f / t;\n                    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 (i = 0; i < n; i++) {\n                            t = cs * V[i][j] + sn * V[i][j + 1];\n                            V[i][j + 1] = -sn * V[i][j] + cs * V[i][j + 1];\n                            V[i][j] = t;\n                        }\n                    }\n                    t = hypotenuse(f, g);\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 (i = 0; i < m; i++) {\n                            t = cs * U[i][j] + sn * U[i][j + 1];\n                            U[i][j + 1] = -sn * U[i][j] + cs * U[i][j + 1];\n                            U[i][j] = t;\n                        }\n                    }\n                }\n                e[p - 2] = f;\n                iter = iter + 1;\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 (i = 0; i <= pp; i++) {\n                            V[i][k] = -V[i][k];\n                        }\n                    }\n                }\n                while (k < pp) {\n                    if (s[k] >= s[k + 1]) {\n                        break;\n                    }\n                    t = s[k];\n                    s[k] = s[k + 1];\n                    s[k + 1] = t;\n                    if (wantv && (k < n - 1)) {\n                        for (i = 0; i < n; i++) {\n                            t = V[i][k + 1];\n                            V[i][k + 1] = V[i][k];\n                            V[i][k] = t;\n                        }\n                    }\n                    if (wantu && (k < m - 1)) {\n                        for (i = 0; i < m; i++) {\n                            t = U[i][k + 1];\n                            U[i][k + 1] = U[i][k];\n                            U[i][k] = t;\n                        }\n                    }\n                    k++;\n                }\n                iter = 0;\n                p--;\n                break;\n            }\n        }\n    }\n\n    if (swapped) {\n        var 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\nSingularValueDecomposition.prototype = {\n    get condition() {\n        return this.s[0] / this.s[Math.min(this.m, this.n) - 1];\n    },\n    get norm2() {\n        return this.s[0];\n    },\n    get rank() {\n        var eps = Math.pow(2, -52),\n            tol = Math.max(this.m, this.n) * this.s[0] * eps,\n            r = 0,\n            s = this.s;\n        for (var i = 0, ii = s.length; i < ii; i++) {\n            if (s[i] > tol) {\n                r++;\n            }\n        }\n        return r;\n    },\n    get diagonal() {\n        return this.s;\n    },\n    // https://github.com/accord-net/framework/blob/development/Sources/Accord.Math/Decompositions/SingularValueDecomposition.cs\n    get threshold() {\n        return (Math.pow(2, -52) / 2) * Math.max(this.m, this.n) * this.s[0];\n    },\n    get leftSingularVectors() {\n        return this.U;\n    },\n    get rightSingularVectors() {\n        return this.V;\n    },\n    get diagonalMatrix() {\n        return Matrix.diag(this.s);\n    },\n    solve: function (value) {\n\n        var Y = value,\n            e = this.threshold,\n            scols = this.s.length,\n            Ls = Matrix.zeros(scols, scols),\n            i;\n\n        for (i = 0; i < scols; i++) {\n            if (Math.abs(this.s[i]) <= e) {\n                Ls[i][i] = 0;\n            } else {\n                Ls[i][i] = 1 / this.s[i];\n            }\n        }\n\n\n        var VL = this.V.mmul(Ls),\n            vrows = this.V.rows,\n            urows = this.U.rows,\n            VLU = Matrix.zeros(vrows, urows),\n            j, k, sum;\n\n        for (i = 0; i < vrows; i++) {\n            for (j = 0; j < urows; j++) {\n                sum = 0;\n                for (k = 0; k < scols; k++) {\n                    sum += VL[i][k] * this.U[j][k];\n                }\n                VLU[i][j] = sum;\n            }\n        }\n\n        return VLU.mmul(Y);\n    },\n    solveForDiagonal: function (value) {\n        return this.solve(Matrix.diag(value));\n    },\n    inverse: function () {\n        var e = this.threshold,\n            vrows = this.V.rows,\n            vcols = this.V.columns,\n            X = new Matrix(vrows, this.s.length),\n            i, j;\n\n        for (i = 0; i < vrows; i++) {\n            for (j = 0; j < vcols; j++) {\n                if (Math.abs(this.s[j]) > e) {\n                    X[i][j] = this.V[i][j] / this.s[j];\n                } else {\n                    X[i][j] = 0;\n                }\n            }\n        }\n\n        var urows = this.U.rows,\n            ucols = this.U.columns,\n            Y = new Matrix(vrows, urows),\n            k, sum;\n\n        for (i = 0; i < vrows; i++) {\n            for (j = 0; j < urows; j++) {\n                sum = 0;\n                for (k = 0; k < ucols; k++) {\n                    sum += X[i][k] * this.U[j][k];\n                }\n                Y[i][j] = sum;\n            }\n        }\n\n        return Y;\n    }\n};\n\nmodule.exports = SingularValueDecomposition;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/ml-optimize-lorentzian/node_modules/ml-matrix/src/dc/svd.js","'use strict';\n\nvar Matrix = require('../matrix');\nvar hypotenuse = require('./util').hypotenuse;\n\n// https://github.com/lutzroeder/Mapack/blob/master/Source/EigenvalueDecomposition.cs\nfunction EigenvalueDecomposition(matrix) {\n    if (!(this instanceof EigenvalueDecomposition)) {\n        return new EigenvalueDecomposition(matrix);\n    }\n    matrix = Matrix.checkMatrix(matrix);\n    if (!matrix.isSquare()) {\n        throw new Error('Matrix is not a square matrix');\n    }\n\n    var n = matrix.columns,\n        V = Matrix.zeros(n, n),\n        d = new Array(n),\n        e = new Array(n),\n        value = matrix,\n        i, j;\n\n    if (matrix.isSymmetric()) {\n        for (i = 0; i < n; i++) {\n            for (j = 0; j < n; j++) {\n                V[i][j] = value[i][j];\n            }\n        }\n        tred2(n, e, d, V);\n        tql2(n, e, d, V);\n    }\n    else {\n        var H = Matrix.zeros(n, n),\n            ort = new Array(n);\n        for (j = 0; j < n; j++) {\n            for (i = 0; i < n; i++) {\n                H[i][j] = value[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\nEigenvalueDecomposition.prototype = {\n    get realEigenvalues() {\n        return this.d;\n    },\n    get imaginaryEigenvalues() {\n        return this.e;\n    },\n    get eigenvectorMatrix() {\n        return this.V;\n    },\n    get diagonalMatrix() {\n        var n = this.n,\n            e = this.e,\n            d = this.d,\n            X = new Matrix(n, n),\n            i, j;\n        for (i = 0; i < n; i++) {\n            for (j = 0; j < n; j++) {\n                X[i][j] = 0;\n            }\n            X[i][i] = d[i];\n            if (e[i] > 0) {\n                X[i][i + 1] = e[i];\n            }\n            else if (e[i] < 0) {\n                X[i][i - 1] = e[i];\n            }\n        }\n        return X;\n    }\n};\n\nfunction tred2(n, e, d, V) {\n\n    var f, g, h, i, j, k,\n        hh, scale;\n\n    for (j = 0; j < n; j++) {\n        d[j] = V[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[i - 1][j];\n                V[i][j] = 0;\n                V[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[j][i] = f;\n                g = e[j] + V[j][j] * f;\n                for (k = j + 1; k <= i - 1; k++) {\n                    g += V[k][j] * d[k];\n                    e[k] += V[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[k][j] -= (f * e[k] + g * d[k]);\n                }\n                d[j] = V[i - 1][j];\n                V[i][j] = 0;\n            }\n        }\n        d[i] = h;\n    }\n\n    for (i = 0; i < n - 1; i++) {\n        V[n - 1][i] = V[i][i];\n        V[i][i] = 1;\n        h = d[i + 1];\n        if (h !== 0) {\n            for (k = 0; k <= i; k++) {\n                d[k] = V[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[k][i + 1] * V[k][j];\n                }\n                for (k = 0; k <= i; k++) {\n                    V[k][j] -= g * d[k];\n                }\n            }\n        }\n\n        for (k = 0; k <= i; k++) {\n            V[k][i + 1] = 0;\n        }\n    }\n\n    for (j = 0; j < n; j++) {\n        d[j] = V[n - 1][j];\n        V[n - 1][j] = 0;\n    }\n\n    V[n - 1][n - 1] = 1;\n    e[0] = 0;\n}\n\nfunction tql2(n, e, d, V) {\n\n    var g, h, i, j, k, l, m, p, r,\n        dl1, c, c2, c3, el1, s, s2,\n        iter;\n\n    for (i = 1; i < n; i++) {\n        e[i - 1] = e[i];\n    }\n\n    e[n - 1] = 0;\n\n    var f = 0,\n        tst1 = 0,\n        eps = Math.pow(2, -52);\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            iter = 0;\n            do {\n                iter = iter + 1;\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[k][i + 1];\n                        V[k][i + 1] = s * V[k][i] + c * h;\n                        V[k][i] = c * V[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\n            }\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[j][i];\n                V[j][i] = V[j][k];\n                V[j][k] = p;\n            }\n        }\n    }\n}\n\nfunction orthes(n, H, ort, V) {\n\n    var low = 0,\n        high = n - 1,\n        f, g, h, i, j, m,\n        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[i][m - 1]);\n        }\n\n        if (scale !== 0) {\n            h = 0;\n            for (i = high; i >= m; i--) {\n                ort[i] = H[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[i][j];\n                }\n\n                f = f / h;\n                for (i = m; i <= high; i++) {\n                    H[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[i][j];\n                }\n\n                f = f / h;\n                for (j = m; j <= high; j++) {\n                    H[i][j] -= f * ort[j];\n                }\n            }\n\n            ort[m] = scale * ort[m];\n            H[m][m - 1] = scale * g;\n        }\n    }\n\n    for (i = 0; i < n; i++) {\n        for (j = 0; j < n; j++) {\n            V[i][j] = (i === j ? 1 : 0);\n        }\n    }\n\n    for (m = high - 1; m >= low + 1; m--) {\n        if (H[m][m - 1] !== 0) {\n            for (i = m + 1; i <= high; i++) {\n                ort[i] = H[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[i][j];\n                }\n\n                g = (g / ort[m]) / H[m][m - 1];\n                for (i = m; i <= high; i++) {\n                    V[i][j] += g * ort[i];\n                }\n            }\n        }\n    }\n}\n\nfunction hqr2(nn, e, d, V, H) {\n    var n = nn - 1,\n        low = 0,\n        high = nn - 1,\n        eps = Math.pow(2, -52),\n        exshift = 0,\n        norm = 0,\n        p = 0,\n        q = 0,\n        r = 0,\n        s = 0,\n        z = 0,\n        iter = 0,\n        i, j, k, l, m, t, w, x, y,\n        ra, sa, vr, vi,\n        notlast, cdivres;\n\n    for (i = 0; i < nn; i++) {\n        if (i < low || i > high) {\n            d[i] = H[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[i][j]);\n        }\n    }\n\n    while (n >= low) {\n        l = n;\n        while (l > low) {\n            s = Math.abs(H[l - 1][l - 1]) + Math.abs(H[l][l]);\n            if (s === 0) {\n                s = norm;\n            }\n            if (Math.abs(H[l][l - 1]) < eps * s) {\n                break;\n            }\n            l--;\n        }\n\n        if (l === n) {\n            H[n][n] = H[n][n] + exshift;\n            d[n] = H[n][n];\n            e[n] = 0;\n            n--;\n            iter = 0;\n        } else if (l === n - 1) {\n            w = H[n][n - 1] * H[n - 1][n];\n            p = (H[n - 1][n - 1] - H[n][n]) / 2;\n            q = p * p + w;\n            z = Math.sqrt(Math.abs(q));\n            H[n][n] = H[n][n] + exshift;\n            H[n - 1][n - 1] = H[n - 1][n - 1] + exshift;\n            x = H[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[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[n - 1][j];\n                    H[n - 1][j] = q * z + p * H[n][j];\n                    H[n][j] = q * H[n][j] - p * z;\n                }\n\n                for (i = 0; i <= n; i++) {\n                    z = H[i][n - 1];\n                    H[i][n - 1] = q * z + p * H[i][n];\n                    H[i][n] = q * H[i][n] - p * z;\n                }\n\n                for (i = low; i <= high; i++) {\n                    z = V[i][n - 1];\n                    V[i][n - 1] = q * z + p * V[i][n];\n                    V[i][n] = q * V[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[n][n];\n            y = 0;\n            w = 0;\n            if (l < n) {\n                y = H[n - 1][n - 1];\n                w = H[n][n - 1] * H[n - 1][n];\n            }\n\n            if (iter === 10) {\n                exshift += x;\n                for (i = low; i <= n; i++) {\n                    H[i][i] -= x;\n                }\n                s = Math.abs(H[n][n - 1]) + Math.abs(H[n - 1][n - 2]);\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[i][i] -= s;\n                    }\n                    exshift += s;\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[m][m];\n                r = x - z;\n                s = y - z;\n                p = (r * s - w) / H[m + 1][m] + H[m][m + 1];\n                q = H[m + 1][m + 1] - z - r - s;\n                r = H[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 (Math.abs(H[m][m - 1]) * (Math.abs(q) + Math.abs(r)) < eps * (Math.abs(p) * (Math.abs(H[m - 1][m - 1]) + Math.abs(z) + Math.abs(H[m + 1][m + 1])))) {\n                    break;\n                }\n                m--;\n            }\n\n            for (i = m + 2; i <= n; i++) {\n                H[i][i - 2] = 0;\n                if (i > m + 2) {\n                    H[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[k][k - 1];\n                    q = H[k + 1][k - 1];\n                    r = (notlast ? H[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[k][k - 1] = -s * x;\n                    } else if (l !== m) {\n                        H[k][k - 1] = -H[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[k][j] + q * H[k + 1][j];\n                        if (notlast) {\n                            p = p + r * H[k + 2][j];\n                            H[k + 2][j] = H[k + 2][j] - p * z;\n                        }\n\n                        H[k][j] = H[k][j] - p * x;\n                        H[k + 1][j] = H[k + 1][j] - p * y;\n                    }\n\n                    for (i = 0; i <= Math.min(n, k + 3); i++) {\n                        p = x * H[i][k] + y * H[i][k + 1];\n                        if (notlast) {\n                            p = p + z * H[i][k + 2];\n                            H[i][k + 2] = H[i][k + 2] - p * r;\n                        }\n\n                        H[i][k] = H[i][k] - p;\n                        H[i][k + 1] = H[i][k + 1] - p * q;\n                    }\n\n                    for (i = low; i <= high; i++) {\n                        p = x * V[i][k] + y * V[i][k + 1];\n                        if (notlast) {\n                            p = p + z * V[i][k + 2];\n                            V[i][k + 2] = V[i][k + 2] - p * r;\n                        }\n\n                        V[i][k] = V[i][k] - p;\n                        V[i][k + 1] = V[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[n][n] = 1;\n            for (i = n - 1; i >= 0; i--) {\n                w = H[i][i] - p;\n                r = 0;\n                for (j = l; j <= n; j++) {\n                    r = r + H[i][j] * H[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[i][n] = (w !== 0) ? (-r / w) : (-r / (eps * norm));\n                    } else {\n                        x = H[i][i + 1];\n                        y = H[i + 1][i];\n                        q = (d[i] - p) * (d[i] - p) + e[i] * e[i];\n                        t = (x * s - z * r) / q;\n                        H[i][n] = t;\n                        H[i + 1][n] = (Math.abs(x) > Math.abs(z)) ? ((-r - w * t) / x) : ((-s - y * t) / z);\n                    }\n\n                    t = Math.abs(H[i][n]);\n                    if ((eps * t) * t > 1) {\n                        for (j = i; j <= n; j++) {\n                            H[j][n] = H[j][n] / t;\n                        }\n                    }\n                }\n            }\n        } else if (q < 0) {\n            l = n - 1;\n\n            if (Math.abs(H[n][n - 1]) > Math.abs(H[n - 1][n])) {\n                H[n - 1][n - 1] = q / H[n][n - 1];\n                H[n - 1][n] = -(H[n][n] - p) / H[n][n - 1];\n            } else {\n                cdivres = cdiv(0, -H[n - 1][n], H[n - 1][n - 1] - p, q);\n                H[n - 1][n - 1] = cdivres[0];\n                H[n - 1][n] = cdivres[1];\n            }\n\n            H[n][n - 1] = 0;\n            H[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[i][j] * H[j][n - 1];\n                    sa = sa + H[i][j] * H[j][n];\n                }\n\n                w = H[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[i][n - 1] = cdivres[0];\n                        H[i][n] = cdivres[1];\n                    } else {\n                        x = H[i][i + 1];\n                        y = H[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 = eps * norm * (Math.abs(w) + Math.abs(q) + Math.abs(x) + Math.abs(y) + Math.abs(z));\n                        }\n                        cdivres = cdiv(x * r - z * ra + q * sa, x * s - z * sa - q * ra, vr, vi);\n                        H[i][n - 1] = cdivres[0];\n                        H[i][n] = cdivres[1];\n                        if (Math.abs(x) > (Math.abs(z) + Math.abs(q))) {\n                            H[i + 1][n - 1] = (-ra - w * H[i][n - 1] + q * H[i][n]) / x;\n                            H[i + 1][n] = (-sa - w * H[i][n] - q * H[i][n - 1]) / x;\n                        } else {\n                            cdivres = cdiv(-r - y * H[i][n - 1], -s - y * H[i][n], z, q);\n                            H[i + 1][n - 1] = cdivres[0];\n                            H[i + 1][n] = cdivres[1];\n                        }\n                    }\n\n                    t = Math.max(Math.abs(H[i][n - 1]), Math.abs(H[i][n]));\n                    if ((eps * t) * t > 1) {\n                        for (j = i; j <= n; j++) {\n                            H[j][n - 1] = H[j][n - 1] / t;\n                            H[j][n] = H[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[i][j] = H[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[i][k] * H[k][j];\n            }\n            V[i][j] = z;\n        }\n    }\n}\n\nfunction cdiv(xr, xi, yr, yi) {\n    var 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    }\n    else {\n        r = yr / yi;\n        d = yi + r * yr;\n        return [(r * xr + xi) / d, (r * xi - xr) / d];\n    }\n}\n\nmodule.exports = EigenvalueDecomposition;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/ml-optimize-lorentzian/node_modules/ml-matrix/src/dc/evd.js","'use strict';\n\nvar Matrix = require('../matrix');\n\n// https://github.com/lutzroeder/Mapack/blob/master/Source/LuDecomposition.cs\nfunction LuDecomposition(matrix) {\n    if (!(this instanceof LuDecomposition)) {\n        return new LuDecomposition(matrix);\n    }\n    matrix = Matrix.checkMatrix(matrix);\n\n    var lu = matrix.clone(),\n        rows = lu.rows,\n        columns = lu.columns,\n        pivotVector = new Array(rows),\n        pivotSign = 1,\n        i, j, k, p, s, t, v,\n        LUrowi, LUcolj, kmax;\n\n    for (i = 0; i < rows; i++) {\n        pivotVector[i] = i;\n    }\n\n    LUcolj = new Array(rows);\n\n    for (j = 0; j < columns; j++) {\n\n        for (i = 0; i < rows; i++) {\n            LUcolj[i] = lu[i][j];\n        }\n\n        for (i = 0; i < rows; i++) {\n            LUrowi = lu[i];\n            kmax = Math.min(i, j);\n            s = 0;\n            for (k = 0; k < kmax; k++) {\n                s += LUrowi[k] * LUcolj[k];\n            }\n            LUrowi[j] = LUcolj[i] -= s;\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[p][k];\n                lu[p][k] = lu[j][k];\n                lu[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[j][j] !== 0) {\n            for (i = j + 1; i < rows; i++) {\n                lu[i][j] /= lu[j][j];\n            }\n        }\n    }\n\n    this.LU = lu;\n    this.pivotVector = pivotVector;\n    this.pivotSign = pivotSign;\n}\n\nLuDecomposition.prototype = {\n    isSingular: function () {\n        var data = this.LU,\n            col = data.columns;\n        for (var j = 0; j < col; j++) {\n            if (data[j][j] === 0) {\n                return true;\n            }\n        }\n        return false;\n    },\n    get determinant() {\n        var data = this.LU;\n        if (!data.isSquare())\n            throw new Error('Matrix must be square');\n        var determinant = this.pivotSign, col = data.columns;\n        for (var j = 0; j < col; j++)\n            determinant *= data[j][j];\n        return determinant;\n    },\n    get lowerTriangularFactor() {\n        var data = this.LU,\n            rows = data.rows,\n            columns = data.columns,\n            X = new Matrix(rows, columns);\n        for (var i = 0; i < rows; i++) {\n            for (var j = 0; j < columns; j++) {\n                if (i > j) {\n                    X[i][j] = data[i][j];\n                } else if (i === j) {\n                    X[i][j] = 1;\n                } else {\n                    X[i][j] = 0;\n                }\n            }\n        }\n        return X;\n    },\n    get upperTriangularFactor() {\n        var data = this.LU,\n            rows = data.rows,\n            columns = data.columns,\n            X = new Matrix(rows, columns);\n        for (var i = 0; i < rows; i++) {\n            for (var j = 0; j < columns; j++) {\n                if (i <= j) {\n                    X[i][j] = data[i][j];\n                } else {\n                    X[i][j] = 0;\n                }\n            }\n        }\n        return X;\n    },\n    get pivotPermutationVector() {\n        return this.pivotVector.slice();\n    },\n    solve: function (value) {\n        value = Matrix.checkMatrix(value);\n\n        var lu = this.LU,\n            rows = lu.rows;\n\n        if (rows !== value.rows)\n            throw new Error('Invalid matrix dimensions');\n        if (this.isSingular())\n            throw new Error('LU matrix is singular');\n\n        var count = value.columns,\n            X = value.subMatrixRow(this.pivotVector, 0, count - 1),\n            columns = lu.columns,\n            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[i][j] -= X[k][j] * lu[i][k];\n                }\n            }\n        }\n        for (k = columns - 1; k >= 0; k--) {\n            for (j = 0; j < count; j++) {\n                X[k][j] /= lu[k][k];\n            }\n            for (i = 0; i < k; i++) {\n                for (j = 0; j < count; j++) {\n                    X[i][j] -= X[k][j] * lu[i][k];\n                }\n            }\n        }\n        return X;\n    }\n};\n\nmodule.exports = LuDecomposition;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/ml-optimize-lorentzian/node_modules/ml-matrix/src/dc/lu.js","'use strict';\n\nvar Matrix = require('../matrix');\nvar hypotenuse = require('./util').hypotenuse;\n\n//https://github.com/lutzroeder/Mapack/blob/master/Source/QrDecomposition.cs\nfunction QrDecomposition(value) {\n    if (!(this instanceof QrDecomposition)) {\n        return new QrDecomposition(value);\n    }\n    value = Matrix.checkMatrix(value);\n\n    var qr = value.clone(),\n        m = value.rows,\n        n = value.columns,\n        rdiag = new Array(n),\n        i, j, k, s;\n\n    for (k = 0; k < n; k++) {\n        var nrm = 0;\n        for (i = k; i < m; i++) {\n            nrm = hypotenuse(nrm, qr[i][k]);\n        }\n        if (nrm !== 0) {\n            if (qr[k][k] < 0) {\n                nrm = -nrm;\n            }\n            for (i = k; i < m; i++) {\n                qr[i][k] /= nrm;\n            }\n            qr[k][k] += 1;\n            for (j = k + 1; j < n; j++) {\n                s = 0;\n                for (i = k; i < m; i++) {\n                    s += qr[i][k] * qr[i][j];\n                }\n                s = -s / qr[k][k];\n                for (i = k; i < m; i++) {\n                    qr[i][j] += s * qr[i][k];\n                }\n            }\n        }\n        rdiag[k] = -nrm;\n    }\n\n    this.QR = qr;\n    this.Rdiag = rdiag;\n}\n\nQrDecomposition.prototype = {\n    solve: function (value) {\n        value = Matrix.checkMatrix(value);\n\n        var qr = this.QR,\n            m = qr.rows;\n\n        if (value.rows !== m)\n            throw new Error('Matrix row dimensions must agree');\n        if (!this.isFullRank())\n            throw new Error('Matrix is rank deficient');\n\n        var count = value.columns,\n            X = value.clone(),\n            n = qr.columns,\n            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[i][k] * X[i][j];\n                }\n                s = -s / qr[k][k];\n                for (i = k; i < m; i++) {\n                    X[i][j] += s * qr[i][k];\n                }\n            }\n        }\n        for (k = n - 1; k >= 0; k--) {\n            for (j = 0; j < count; j++) {\n                X[k][j] /= this.Rdiag[k];\n            }\n            for (i = 0; i < k; i++) {\n                for (j = 0; j < count; j++) {\n                    X[i][j] -= X[k][j] * qr[i][k];\n                }\n            }\n        }\n\n        return X.subMatrix(0, n - 1, 0, count - 1);\n    },\n    isFullRank: function () {\n        var columns = this.QR.columns;\n        for (var i = 0; i < columns; i++) {\n            if (this.Rdiag[i] === 0) {\n                return false;\n            }\n        }\n        return true;\n    },\n    get upperTriangularFactor() {\n        var qr = this.QR,\n            n = qr.columns,\n            X = new Matrix(n, n),\n            i, j;\n        for (i = 0; i < n; i++) {\n            for (j = 0; j < n; j++) {\n                if (i < j) {\n                    X[i][j] = qr[i][j];\n                } else if (i === j) {\n                    X[i][j] = this.Rdiag[i];\n                } else {\n                    X[i][j] = 0;\n                }\n            }\n        }\n        return X;\n    },\n    get orthogonalFactor() {\n        var qr = this.QR,\n            rows = qr.rows,\n            columns = qr.columns,\n            X = new Matrix(rows, columns),\n            i, j, k, s;\n\n        for (k = columns - 1; k >= 0; k--) {\n            for (i = 0; i < rows; i++) {\n                X[i][k] = 0;\n            }\n            X[k][k] = 1;\n            for (j = k; j < columns; j++) {\n                if (qr[k][k] !== 0) {\n                    s = 0;\n                    for (i = k; i < rows; i++) {\n                        s += qr[i][k] * X[i][j];\n                    }\n\n                    s = -s / qr[k][k];\n\n                    for (i = k; i < rows; i++) {\n                        X[i][j] += s * qr[i][k];\n                    }\n                }\n            }\n        }\n        return X;\n    }\n};\n\nmodule.exports = QrDecomposition;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/ml-optimize-lorentzian/node_modules/ml-matrix/src/dc/qr.js","'use strict';\n\nvar Matrix = require('../matrix');\n\n// https://github.com/lutzroeder/Mapack/blob/master/Source/CholeskyDecomposition.cs\nfunction CholeskyDecomposition(value) {\n    if (!(this instanceof CholeskyDecomposition)) {\n        return new CholeskyDecomposition(value);\n    }\n    value = Matrix.checkMatrix(value);\n    if (!value.isSymmetric())\n        throw new Error('Matrix is not symmetric');\n\n    var a = value,\n        dimension = a.rows,\n        l = new Matrix(dimension, dimension),\n        positiveDefinite = true,\n        i, j, k;\n\n    for (j = 0; j < dimension; j++) {\n        var Lrowj = l[j];\n        var d = 0;\n        for (k = 0; k < j; k++) {\n            var Lrowk = l[k];\n            var s = 0;\n            for (i = 0; i < k; i++) {\n                s += Lrowk[i] * Lrowj[i];\n            }\n            Lrowj[k] = s = (a[j][k] - s) / l[k][k];\n            d = d + s * s;\n        }\n\n        d = a[j][j] - d;\n\n        positiveDefinite &= (d > 0);\n        l[j][j] = Math.sqrt(Math.max(d, 0));\n        for (k = j + 1; k < dimension; k++) {\n            l[j][k] = 0;\n        }\n    }\n\n    if (!positiveDefinite) {\n        throw new Error('Matrix is not positive definite');\n    }\n\n    this.L = l;\n}\n\nCholeskyDecomposition.prototype = {\n    get leftTriangularFactor() {\n        return this.L;\n    },\n    solve: function (value) {\n        value = Matrix.checkMatrix(value);\n\n        var l = this.L,\n            dimension = l.rows;\n\n        if (value.rows !== dimension) {\n            throw new Error('Matrix dimensions do not match');\n        }\n\n        var count = value.columns,\n            B = value.clone(),\n            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[k][j] -= B[i][j] * l[k][i];\n                }\n                B[k][j] /= l[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[k][j] -= B[i][j] * l[i][k];\n                }\n                B[k][j] /= l[k][k];\n            }\n        }\n\n        return B;\n    }\n};\n\nmodule.exports = CholeskyDecomposition;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/ml-optimize-lorentzian/node_modules/ml-matrix/src/dc/cholesky.js","'use strict';\n\nconst extend = require('extend');\nconst SG = require('ml-savitzky-golay-generalized');\n\nconst defaultOptions = {\n    sgOptions: {\n        windowSize: 9,\n        polynomial: 3\n    },\n    minMaxRatio: 0.00025,\n    broadRatio: 0.00,\n    maxCriteria: true,\n    smoothY: true,\n    realTopDetection: false,\n    heightFactor: 0,\n    boundaries: false,\n    derivativeThreshold: -1\n};\n\n/**\n * Global spectra deconvolution\n * @param {Array<Number>} x - Independent variable\n * @param {Array<Number>} yIn - Dependent variable\n * @param {Object} [options] - Options object\n * @param {Object} [options.sgOptions] - Options object for Savitzky-Golay filter. See https://github.com/mljs/savitzky-golay-generalized#options\n * @param {Number} [options.sgOptions.windowSize = 9] - points to use in the approximations\n * @param {Number} [options.sgOptions.polynomial = 3] - degree of the polynomial to use in the approximations\n * @param {Number} [options.minMaxRatio = 0.00025] - Threshold to determine if a given peak should be considered as a noise\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 * @param {Number} [options.noiseLevel = 0] - Noise threshold in spectrum units\n * @param {Boolean} [options.maxCriteria = true] - Peaks are local maximum(true) or minimum(false)\n * @param {Boolean} [options.smoothY = true] - Select the peak intensities from a smoothed version of the independent variables\n * @param {Boolean} [options.realTopDetection = false] - Use a quadratic optimizations with the peak and its 3 closest neighbors\n * to determine the true x,y values of the peak?\n * @param {Number} [options.heightFactor = 0] - Factor to multiply the calculated height (usually 2)\n * @param {Boolean} [options.boundaries = false] - Return also the inflection points of the peaks\n * @param {Number} [options.derivativeThreshold = -1] - Filters based on the amplitude of the first derivative\n * @return {Array<Object>}\n */\nfunction gsd(x, yIn, options) {\n    options = extend({}, defaultOptions, options);\n    let sgOptions = options.sgOptions;\n    const y = [].concat(yIn);\n\n    if (!('noiseLevel' in options)) {\n        // We have to know if x is equally spaced\n        var maxDx = 0,\n            minDx = Number.MAX_VALUE,\n            tmp;\n        for (let i = 0; i < x.length - 1; ++i) {\n            tmp = Math.abs(x[i + 1] - x[i]);\n            if (tmp < minDx) {\n                minDx = tmp;\n            }\n            if (tmp > maxDx) {\n                maxDx = tmp;\n            }\n        }\n\n        if ((maxDx - minDx) / maxDx < 0.05) {\n            options.noiseLevel = getNoiseLevel(y);\n        } else {\n            options.noiseLevel = 0;\n        }\n    }\n    const yCorrection = {m: 1, b: options.noiseLevel};\n    if (!options.maxCriteria) {\n        yCorrection.m = -1;\n        yCorrection.b *= -1;\n    }\n\n    for (let i = 0; i < y.length; i++) {\n        y[i] = yCorrection.m * y[i] - yCorrection.b;\n    }\n\n    for (let i = 0; i < y.length; i++) {\n        if (y[i] < 0) {\n            y[i] = 0;\n        }\n    }\n    // If the max difference between delta x is less than 5%, then, we can assume it to be equally spaced variable\n    let Y = y;\n    let dY, ddY;\n    if ((maxDx - minDx) / maxDx < 0.05) {\n        if (options.smoothY)\n            Y = SG(y, x[1] - x[0], {windowSize: sgOptions.windowSize, polynomial: sgOptions.polynomial, derivative: 0});\n        dY = SG(y, x[1] - x[0], {windowSize: sgOptions.windowSize, polynomial: sgOptions.polynomial, derivative: 1});\n        ddY = SG(y, x[1] - x[0], {windowSize: sgOptions.windowSize, polynomial: sgOptions.polynomial, derivative: 2});\n    } else {\n        if (options.smoothY)\n            Y = SG(y, x, {windowSize: sgOptions.windowSize, polynomial: sgOptions.polynomial, derivative: 0});\n        dY = SG(y, x, {windowSize: sgOptions.windowSize, polynomial: sgOptions.polynomial, derivative: 1});\n        ddY = SG(y, x, {windowSize: sgOptions.windowSize, polynomial: sgOptions.polynomial, derivative: 2});\n    }\n\n    const X = x;\n    const dx = x[1] - x[0];\n    var maxDdy = 0;\n    var maxY = 0;\n    for (let i = 0; i < Y.length; i++) {\n        if (Math.abs(ddY[i]) > maxDdy) {\n            maxDdy = Math.abs(ddY[i]);\n        }\n        if (Math.abs(Y[i]) > maxY) {\n            maxY = Math.abs(Y[i]);\n        }\n    }\n\n    var lastMax = null;\n    var lastMin = null;\n    var minddY = new Array(Y.length - 2);\n    var intervalL = new Array(Y.length);\n    var intervalR = new Array(Y.length);\n    var broadMask = new Array(Y.length - 2);\n    var minddYLen = 0;\n    var intervalLLen = 0;\n    var intervalRLen = 0;\n    var broadMaskLen = 0;\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\n        // filter based on derivativeThreshold\n        if (Math.abs(dY[i]) > options.derivativeThreshold) {\n\n            // Minimum 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                lastMin = {\n                    x: X[i],\n                    index: i\n                };\n                if (dx > 0 && lastMax !== null) {\n                    intervalL[intervalLLen++] = lastMax;\n                    intervalR[intervalRLen++] = lastMin;\n                }\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[intervalLLen++] = lastMax;\n                    intervalR[intervalRLen++] = lastMin;\n                }\n            }\n        }\n\n        // Minimum in second derivative\n        if ((ddY[i] < ddY[i - 1]) && (ddY[i] < ddY[i + 1])) {\n            // TODO should we change this to have 3 arrays ? Huge overhead creating arrays\n            minddY[minddYLen++] = i; //( [X[i], Y[i], i] );\n            broadMask[broadMaskLen++] = Math.abs(ddY[i]) <= options.broadRatio * maxDdy;\n        }\n    }\n    minddY.length = minddYLen;\n    intervalL.length = intervalLLen;\n    intervalR.length = intervalRLen;\n    broadMask.length = broadMaskLen;\n\n    let signals = new Array(minddY.length);\n    let signalsLen = 0;\n    let lastK = -1;\n    let possible, frequency, distanceJ, minDistance, gettingCloser;\n    for (let j = 0; j < minddY.length; ++j) {\n        frequency = X[minddY[j]];\n        possible = -1;\n        let k = lastK + 1;\n        minDistance = Number.MAX_VALUE;\n        distanceJ = 0;\n        gettingCloser = true;\n        while (possible === -1 && (k < intervalL.length) && gettingCloser) {\n            distanceJ = Math.abs(frequency - (intervalL[k].x + intervalR[k].x) / 2);\n\n            //Still getting closer?\n            if (distanceJ < minDistance) {\n                minDistance = distanceJ;\n            } else {\n                gettingCloser = false;\n            }\n            if (distanceJ < Math.abs(intervalL[k].x - intervalR[k].x) / 2) {\n                possible = k;\n                lastK = k;\n            }\n            ++k;\n        }\n\n        if (possible !== -1) {\n            if (Math.abs(Y[minddY[j]]) > options.minMaxRatio * maxY) {\n                signals[signalsLen++] = {\n                    index: minddY[j],\n                    x: frequency,\n                    y: (Y[minddY[j]] + yCorrection.b) / yCorrection.m,\n                    width: Math.abs(intervalR[possible].x - intervalL[possible].x), //widthCorrection\n                    soft: broadMask[j]\n                };\n                if (options.boundaries) {\n                    signals[signalsLen - 1].left = intervalL[possible];\n                    signals[signalsLen - 1].right = intervalR[possible];\n                }\n                if (options.heightFactor) {\n                    let yLeft = Y[intervalL[possible].index];\n                    let yRight = Y[intervalR[possible].index];\n                    signals[signalsLen - 1].height = options.heightFactor * (signals[signalsLen - 1].y - ((yLeft + yRight) / 2));\n                }\n            }\n        }\n    }\n    signals.length = signalsLen;\n\n    if (options.realTopDetection)\n        realTopDetection(signals, X, Y);\n\n    //Correct the values to fit the original spectra data\n    for (let j = 0; j < signals.length; j++) {\n        signals[j].base = options.noiseLevel;\n    }\n\n    signals.sort(function (a, b) {\n        return a.x - b.x;\n    });\n\n    return signals;\n\n}\n\nfunction getNoiseLevel(y) {\n    var mean = 0, stddev = 0;\n    var length = y.length;\n    for (let i = 0; i < length; ++i) {\n        mean += y[i];\n    }\n    mean /= length;\n    var averageDeviations = new Array(length);\n    for (let i = 0; i < length; ++i)\n        averageDeviations[i] = Math.abs(y[i] - mean);\n    averageDeviations.sort();\n    if (length % 2 === 1) {\n        stddev = averageDeviations[(length - 1) / 2] / 0.6745;\n    } else {\n        stddev = 0.5 * (averageDeviations[length / 2] + averageDeviations[length / 2 - 1]) / 0.6745;\n    }\n\n    return stddev;\n}\n\nfunction realTopDetection(peakList, x, y) {\n    var alpha, beta, gamma, p, currentPoint;\n    for (var j = 0; j < peakList.length; j++) {\n        currentPoint = peakList[j].i;//peakList[j][2];\n        //The detected peak could be moved 1 or 2 unit to left or right.\n        if (y[currentPoint - 1] >= y[currentPoint - 2]\n            && y[currentPoint - 1] >= y[currentPoint]) {\n            currentPoint--;\n        } else {\n            if (y[currentPoint + 1] >= y[currentPoint]\n                && y[currentPoint + 1] >= y[currentPoint + 2]) {\n                currentPoint++;\n            } else {\n                if (y[currentPoint - 2] >= y[currentPoint - 3]\n                    && y[currentPoint - 2] >= y[currentPoint - 1]) {\n                    currentPoint -= 2;\n                } else {\n                    if (y[currentPoint + 2] >= y[currentPoint + 1]\n                        && y[currentPoint + 2] >= y[currentPoint + 3]) {\n                        currentPoint += 2;\n                    }\n                }\n            }\n        }\n        if (y[currentPoint - 1] > 0 && y[currentPoint + 1] > 0\n            && y[currentPoint] >= y[currentPoint - 1]\n            && y[currentPoint] >= y[currentPoint + 1]) {\n            alpha = 20 * Math.log10(y[currentPoint - 1]);\n            beta = 20 * Math.log10(y[currentPoint]);\n            gamma = 20 * Math.log10(y[currentPoint + 1]);\n            p = 0.5 * (alpha - gamma) / (alpha - 2 * beta + gamma);\n            //console.log(\"p: \"+p);\n            //console.log(x[currentPoint]+\" \"+tmp+\" \"+currentPoint);\n            peakList[j].x = x[currentPoint] + (x[currentPoint] - x[currentPoint - 1]) * p;\n            peakList[j].y = y[currentPoint] - 0.25 * (y[currentPoint - 1] - y[currentPoint + 1]) * p;\n        }\n    }\n}\n\nmodule.exports = gsd;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/ml-gsd/src/gsd.js","//Code translate from Pascal source in http://pubs.acs.org/doi/pdf/10.1021/ac00205a007\nvar extend = require('extend');\nvar stat = require('ml-stat');\n\nvar defaultOptions = {\n    windowSize: 9,\n    derivative: 0,\n    polynomial: 3,\n};\n\n\nfunction SavitzkyGolay(data, h, options) {\n    options = extend({}, defaultOptions, options);\n\n    if ((options.windowSize % 2 === 0) || (options.windowSize < 5) || !(Number.isInteger(options.windowSize)))\n            throw new RangeError('Invalid window size (should be odd and at least 5 integer number)')\n\n\n    if (options.windowSize>data.length)\n        throw new RangeError('Window size is higher than the data length '+options.windowSize+\">\"+data.length);\n    if ((options.derivative < 0) || !(Number.isInteger(options.derivative)))\n        throw new RangeError('Derivative should be a positive integer');\n    if ((options.polynomial < 1) || !(Number.isInteger(options.polynomial)))\n        throw new RangeError('Polynomial should be a positive integer');\n    if (options.polynomial >= 6)\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    var windowSize = options.windowSize;\n\n    var half = Math.floor(windowSize/2);\n    var np = data.length;\n    var ans = new Array(np);\n    var weights = fullWeights(windowSize,options.polynomial,options.derivative);\n    var hs = 0;\n    var constantH = true;\n    if( Object.prototype.toString.call( h ) === '[object Array]' ) {\n        constantH = false;\n    }\n    else{\n        hs = Math.pow(h, options.derivative);\n    }\n    //console.log(\"Constant h: \"+constantH);\n    //For the borders\n    for(var i=0;i<half;i++){\n        var wg1=weights[half-i-1];\n        var wg2=weights[half+i+1];\n        var d1 = 0,d2=0;\n        for (var l = 0; l < windowSize; l++){\n            d1 += wg1[l] * data[l];\n            d2 += wg2[l] * data[np-windowSize+l-1];\n        }\n        if(constantH){\n            ans[half-i-1] = d1/hs;\n            ans[np-half+i] = d2/hs;\n        }\n        else{\n            hs = getHs(h,half-i-1,half, options.derivative);\n            ans[half-i-1] = d1/hs;\n            hs = getHs(h,np-half+i,half, options.derivative);\n            ans[np-half+i] = d2/hs;\n        }\n    }\n    //For the internal points\n    var wg = weights[half];\n    for(var i=windowSize;i<np+1;i++){\n        var d = 0;\n        for (var l = 0; l < windowSize; l++)\n            d += wg[l] * data[l+i-windowSize];\n        if(!constantH)\n            hs = getHs(h,i-half-1,half, options.derivative);\n        ans[i-half-1] = d/hs;\n    }\n    return ans;\n}\n\nfunction getHs(h,center,half,derivative){\n    var hs = 0;\n    var count = 0;\n    for(var 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 Math.pow(hs/count,derivative);\n}\n\nfunction GramPoly(i,m,k,s){\n    var Grampoly = 0;\n    if(k>0){\n        Grampoly = (4*k-2)/(k*(2*m-k+1))*(i*GramPoly(i,m,k-1,s) +\n            s*GramPoly(i,m,k-1,s-1)) - ((k-1)*(2*m+k))/(k*(2*m-k+1))*GramPoly(i,m,k-2,s);\n    }\n    else{\n        if(k==0&&s==0){\n            Grampoly=1;\n        }\n        else{\n            Grampoly=0;\n        }\n    }\n    //console.log(Grampoly);\n    return Grampoly;\n}\n\nfunction GenFact(a,b){\n    var gf=1;\n    if(a>=b){\n        for(var j=a-b+1;j<=a;j++){\n            gf*=j;\n        }\n    }\n    return gf;\n}\n\nfunction Weight(i,t,m,n,s){\n    var sum=0;\n    for(var k=0;k<=n;k++){\n        //console.log(k);\n        sum+=(2*k+1)*(GenFact(2*m,k)/GenFact(2*m+k+1,k+1))*GramPoly(i,m,k,0)*GramPoly(t,m,k,s)\n    }\n    return sum;\n}\n\n/**\n *\n * @param m  Number of points\n * @param n  Polynomial grade\n * @param s  Derivative\n */\nfunction fullWeights(m,n,s){\n    var weights = new Array(m);\n    var np = Math.floor(m/2);\n    for(var t=-np;t<=np;t++){\n        weights[t+np] = new Array(m);\n        for(var j=-np;j<=np;j++){\n            weights[t+np][j+np]=Weight(j,t,np,n,s);\n        }\n    }\n    return weights;\n}\n\n/*function entropy(data,h,options){\n    var trend = SavitzkyGolay(data,h,trendOptions);\n    var copy = new Array(data.length);\n    var sum = 0;\n    var max = 0;\n    for(var i=0;i<data.length;i++){\n        copy[i] = data[i]-trend[i];\n    }\n\n    sum/=data.length;\n    console.log(sum+\" \"+max);\n    console.log(stat.array.standardDeviation(copy));\n    console.log(Math.abs(stat.array.mean(copy))/stat.array.standardDeviation(copy));\n    return sum;\n\n}\n\n\n\nfunction guessWindowSize(data, h){\n    console.log(\"entropy \"+entropy(data,h,trendOptions));\n    return 5;\n}\n*/\nmodule.exports = SavitzkyGolay;\n \n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/ml-savitzky-golay-generalized/src/index.js","'use strict';\n\nexports.array = require('./array');\nexports.matrix = require('./matrix');\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/ml-savitzky-golay-generalized/node_modules/ml-stat/index.js","'use strict';\nvar arrayStat = require('./array');\n\n// https://github.com/accord-net/framework/blob/development/Sources/Accord.Statistics/Tools.cs\n\nfunction 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\nfunction 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\nfunction standardDeviation(matrix, means, unbiased) {\n    var vari = 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\nfunction variance(matrix, means, unbiased) {\n    if (typeof(unbiased) === 'undefined') {\n        unbiased = true;\n    }\n    means = means || 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\nfunction median(matrix) {\n    var rows = matrix.length, cols = matrix[0].length;\n    var medians = new Array