{"version":3,"file":"xps-analysis.min.js","sources":["../node_modules/is-any-array/src/index.js","../node_modules/ml-array-max/node_modules/is-any-array/src/index.js","../node_modules/ml-array-max/lib-es6/index.js","../node_modules/ml-array-min/node_modules/is-any-array/src/index.js","../node_modules/ml-array-min/lib-es6/index.js","../node_modules/ml-array-median/node_modules/is-any-array/src/index.js","../node_modules/median-quickselect/lib/median-quickselect.min.js","../node_modules/ml-array-median/lib-es6/index.js","../node_modules/ml-spectra-processing/src/x/xAdd.js","../node_modules/ml-spectra-processing/src/x/xMultiply.js","../node_modules/ml-spectra-processing/src/x/xDivide.js","../node_modules/ml-spectra-processing/src/x/xIsMonotone.js","../node_modules/d3-array/build/d3-array.js","../node_modules/ml-spectra-processing/src/x/xSubtract.js","../node_modules/ml-array-sum/node_modules/is-any-array/src/index.js","../node_modules/ml-array-sum/lib-es6/index.js","../node_modules/ml-array-normed/lib-es6/index.js","../node_modules/ml-array-rescale/node_modules/is-any-array/src/index.js","../node_modules/ml-array-rescale/lib-es6/index.js","../node_modules/ml-array-sequential-fill/node_modules/is-any-array/src/index.js","../node_modules/ml-array-sequential-fill/lib-es6/index.js","../node_modules/ml-zones/src/normalize.js","../node_modules/ml-array-xy-equally-spaced/src/integral.js","../node_modules/ml-array-xy-equally-spaced/src/index.js","../node_modules/ml-zones/src/invert.js","../node_modules/ml-zones/src/zonesWithPoints.js","../node_modules/ml-array-xy-equally-spaced/src/equallySpacedSlot.js","../node_modules/ml-array-xy-equally-spaced/src/equallySpacedSmooth.js","../node_modules/ml-array-xy-filter-x/src/index.js","../node_modules/ml-array-xy-filter-x/src/getZones.js","../node_modules/ml-matrix/src/inspect.js","../node_modules/ml-matrix/src/util.js","../node_modules/ml-matrix/src/matrix.js","../node_modules/ml-matrix/src/stat.js","../node_modules/ml-matrix/src/mathOperations.js","../node_modules/ml-matrix/src/views/base.js","../node_modules/ml-matrix/src/views/transpose.js","../node_modules/ml-matrix/src/wrap/WrapperMatrix2D.js","../node_modules/ml-matrix/src/dc/lu.js","../node_modules/ml-matrix/src/dc/util.js","../node_modules/ml-matrix/src/dc/qr.js","../node_modules/ml-matrix/src/dc/svd.js","../node_modules/ml-matrix/src/decompositions.js","../node_modules/ml-pad-array/src/index.js","../node_modules/ml-savitzky-golay/src/index.js","../node_modules/ml-regression-base/node_modules/is-any-array/src/index.js","../node_modules/ml-regression-base/src/maybeToPrecision.js","../node_modules/ml-regression-base/src/index.js","../node_modules/ml-regression-polynomial/src/index.js","../node_modules/ml-regression-base/src/checkArrayLength.js","../node_modules/ml-baseline-correction-regression/src/index.js","../node_modules/ml-stat/array.js","../node_modules/js-quantities/build/quantities.js","../node_modules/common-spectrum/src/util/convertUnit.js","../node_modules/common-spectrum/src/util/getConvertedVariable.js","../node_modules/common-spectrum/src/Analysis.js","../node_modules/common-spectrum/src/util/getXYSpectrum.js","../node_modules/common-spectrum/src/util/getNormalizedSpectrum.js","../node_modules/jcampconverter/src/complexChromatogram.js","../node_modules/jcampconverter/src/convertToFloatArray.js","../node_modules/jcampconverter/src/parse/fastParseXYData.js","../node_modules/jcampconverter/src/parse/parsePeakTable.js","../node_modules/jcampconverter/src/parse/parseXYA.js","../node_modules/jcampconverter/src/2d/add2D.js","../node_modules/jcampconverter/src/2d/convertTo3DZ.js","../node_modules/jcampconverter/src/2d/generateContourLines.js","../node_modules/ml-fft/src/fftlib.js","../node_modules/nmr-processing/src/constants/gyromagneticRatio.js","../node_modules/jcampconverter/src/profiling.js","../node_modules/jcampconverter/src/simpleChromatogram.js","../node_modules/jcampconverter/src/postProcessing.js","../node_modules/jcampconverter/src/postProcessingNMR.js","../node_modules/jcampconverter/src/prepareNtuplesDatatable.js","../node_modules/jcampconverter/src/prepareSpectrum.js","../node_modules/jcampconverter/src/convert.js","../node_modules/common-spectrum/src/jsgraph/addStyle.js","../node_modules/common-spectrum/src/jsgraph/colors.js","../node_modules/convert-to-jcamp/src/fromVariables.js","../node_modules/convert-to-jcamp/src/fromJSON.js","../node_modules/convert-to-jcamp/src/creatorNtuples.js","../node_modules/common-spectrum/src/to/toJcamps.js","../node_modules/vamas/src/parser/parse.js","../node_modules/common-spectrum/src/AnalysesManager.js","../node_modules/common-spectrum/src/from/fromJcamp.js","../src/from/fromVamas.js","../node_modules/common-spectrum/src/jsgraph/getJSGraph.js","../node_modules/common-spectrum/src/jsgraph/getNormalizationAnnotations.js","../src/references.js","../node_modules/common-spectrum/src/to/toJcamp.js"],"sourcesContent":["const toString = Object.prototype.toString;\n\nexport default function isAnyArray(object) {\n  return toString.call(object).endsWith('Array]');\n}\n","'use strict';\n\nconst toString = Object.prototype.toString;\n\nfunction isAnyArray(object) {\n  return toString.call(object).endsWith('Array]');\n}\n\nmodule.exports = isAnyArray;\n","import isArray from 'is-any-array';\n\n/**\n * Computes the maximum of the given values\n * @param {Array<number>} input\n * @return {number}\n */\n\nfunction max(input) {\n  if (!isArray(input)) {\n    throw new TypeError('input must be an array');\n  }\n\n  if (input.length === 0) {\n    throw new TypeError('input must not be empty');\n  }\n\n  var maxValue = input[0];\n\n  for (var i = 1; i < input.length; i++) {\n    if (input[i] > maxValue) maxValue = input[i];\n  }\n\n  return maxValue;\n}\n\nexport default max;\n","'use strict';\n\nconst toString = Object.prototype.toString;\n\nfunction isAnyArray(object) {\n  return toString.call(object).endsWith('Array]');\n}\n\nmodule.exports = isAnyArray;\n","import isArray from 'is-any-array';\n\n/**\n * Computes the minimum of the given values\n * @param {Array<number>} input\n * @return {number}\n */\n\nfunction min(input) {\n  if (!isArray(input)) {\n    throw new TypeError('input must be an array');\n  }\n\n  if (input.length === 0) {\n    throw new TypeError('input must not be empty');\n  }\n\n  var minValue = input[0];\n\n  for (var i = 1; i < input.length; i++) {\n    if (input[i] < minValue) minValue = input[i];\n  }\n\n  return minValue;\n}\n\nexport default min;\n","'use strict';\n\nconst toString = Object.prototype.toString;\n\nfunction isAnyArray(object) {\n  return toString.call(object).endsWith('Array]');\n}\n\nmodule.exports = isAnyArray;\n","(function(){function a(d){for(var e=0,f=d.length-1,g=void 0,h=void 0,i=void 0,j=c(e,f);!0;){if(f<=e)return d[j];if(f==e+1)return d[e]>d[f]&&b(d,e,f),d[j];for(g=c(e,f),d[g]>d[f]&&b(d,g,f),d[e]>d[f]&&b(d,e,f),d[g]>d[e]&&b(d,g,e),b(d,g,e+1),h=e+1,i=f;!0;){do h++;while(d[e]>d[h]);do i--;while(d[i]>d[e]);if(i<h)break;b(d,h,i)}b(d,e,i),i<=j&&(e=h),i>=j&&(f=i-1)}}var b=function b(d,e,f){var _ref;return _ref=[d[f],d[e]],d[e]=_ref[0],d[f]=_ref[1],_ref},c=function c(d,e){return~~((d+e)/2)};'undefined'!=typeof module&&module.exports?module.exports=a:window.median=a})();\n","import isArray from 'is-any-array';\nimport quickSelectMedian from 'median-quickselect';\n\n/**\n * Computes the median of the given values\n * @param {Array<number>} input\n * @return {number}\n */\n\nfunction median(input) {\n  if (!isArray(input)) {\n    throw new TypeError('input must be an array');\n  }\n\n  if (input.length === 0) {\n    throw new TypeError('input must not be empty');\n  }\n\n  return quickSelectMedian(input.slice());\n}\n\nexport default median;\n","/**\r\n\r\n/**\r\n * This function xAdd the first array by the second array or a constant value to each element of the first array\r\n * @param {Array<Number>} array1 - the array that will be rotated\r\n * @param {Array|Number} array2\r\n * @return {Array}\r\n */\r\nexport function xAdd(array1, array2) {\r\n  let isConstant = false;\r\n  let constant;\r\n  if (Array.isArray(array2)) {\r\n    if (array1.length !== array2.length) {\r\n      throw new Error('sub: size of array1 and array2 must be identical');\r\n    }\r\n  } else {\r\n    isConstant = true;\r\n    constant = Number(array2);\r\n  }\r\n\r\n  let array3 = new Array(array1.length);\r\n  if (isConstant) {\r\n    for (let i = 0; i < array1.length; i++) {\r\n      array3[i] = array1[i] + constant;\r\n    }\r\n  } else {\r\n    for (let i = 0; i < array1.length; i++) {\r\n      array3[i] = array1[i] + array2[i];\r\n    }\r\n  }\r\n\r\n  return array3;\r\n}\r\n","/**\r\n\r\n/**\r\n * This function xMultiply the first array by the second array or a constant value to each element of the first array\r\n * @param {Array} array1 - the array that will be rotated\r\n * @param {Array|Number} array2\r\n * @return {Float64Array}\r\n */\r\nexport function xMultiply(array1, array2) {\r\n  let isConstant = false;\r\n  let constant;\r\n  if (Array.isArray(array2)) {\r\n    if (array1.length !== array2.length) {\r\n      throw new Error('sub: size of array1 and array2 must be identical');\r\n    }\r\n  } else {\r\n    isConstant = true;\r\n    constant = Number(array2);\r\n  }\r\n\r\n  let array3 = new Float64Array(array1.length);\r\n  if (isConstant) {\r\n    for (let i = 0; i < array1.length; i++) {\r\n      array3[i] = array1[i] * constant;\r\n    }\r\n  } else {\r\n    for (let i = 0; i < array1.length; i++) {\r\n      array3[i] = array1[i] * array2[i];\r\n    }\r\n  }\r\n\r\n  return array3;\r\n}\r\n","/**\r\n\r\n/**\r\n * This function divide the first array by the second array or a constant value to each element of the first array\r\n * @param {Array<Number>} array1 - the array that will be rotated\r\n * @param {Array<Number>|Number} array2\r\n * @return {Array}\r\n */\r\nexport function xDivide(array1, array2) {\r\n  let isConstant = false;\r\n  let constant;\r\n  if (Array.isArray(array2)) {\r\n    if (array1.length !== array2.length) {\r\n      throw new Error('sub: size of array1 and array2 must be identical');\r\n    }\r\n  } else {\r\n    isConstant = true;\r\n    constant = Number(array2);\r\n  }\r\n\r\n  let array3 = new Array(array1.length);\r\n  if (isConstant) {\r\n    for (let i = 0; i < array1.length; i++) {\r\n      array3[i] = array1[i] / constant;\r\n    }\r\n  } else {\r\n    for (let i = 0; i < array1.length; i++) {\r\n      array3[i] = array1[i] / array2[i];\r\n    }\r\n  }\r\n\r\n  return array3;\r\n}\r\n","/**\r\n * Returns true if x is monotone\r\n * @param {Array} array\r\n * @return {boolean}\r\n */\r\nexport function xIsMonotone(array) {\r\n  if (array.length < 3) return true;\r\n  if (array[0] < array[1]) {\r\n    for (let i = 0; i < array.length - 1; i++) {\r\n      if (array[i] >= array[i + 1]) return false;\r\n    }\r\n  } else {\r\n    for (let i = 0; i < array.length - 1; i++) {\r\n      if (array[i] <= array[i + 1]) return false;\r\n    }\r\n  }\r\n  return true;\r\n}\r\n","(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n  typeof define === 'function' && define.amd ? define(['exports'], factory) :\n  (factory((global.d3_array = {})));\n}(this, function (exports) { 'use strict';\n\n  function ascending(a, b) {\n    return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n  }\n\n  function bisector(compare) {\n    if (compare.length === 1) compare = ascendingComparator(compare);\n    return {\n      left: function(a, x, lo, hi) {\n        if (lo == null) lo = 0;\n        if (hi == null) hi = a.length;\n        while (lo < hi) {\n          var mid = lo + hi >>> 1;\n          if (compare(a[mid], x) < 0) lo = mid + 1;\n          else hi = mid;\n        }\n        return lo;\n      },\n      right: function(a, x, lo, hi) {\n        if (lo == null) lo = 0;\n        if (hi == null) hi = a.length;\n        while (lo < hi) {\n          var mid = lo + hi >>> 1;\n          if (compare(a[mid], x) > 0) hi = mid;\n          else lo = mid + 1;\n        }\n        return lo;\n      }\n    };\n  }\n\n  function ascendingComparator(f) {\n    return function(d, x) {\n      return ascending(f(d), x);\n    };\n  }\n\n  var ascendingBisect = bisector(ascending);\n  var bisectRight = ascendingBisect.right;\n  var bisectLeft = ascendingBisect.left;\n\n  function descending(a, b) {\n    return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n  }\n\n  function number$1(x) {\n    return x === null ? NaN : +x;\n  }\n\n  function variance(array, f) {\n    var n = array.length,\n        m = 0,\n        a,\n        d,\n        s = 0,\n        i = -1,\n        j = 0;\n\n    if (f == null) {\n      while (++i < n) {\n        if (!isNaN(a = number$1(array[i]))) {\n          d = a - m;\n          m += d / ++j;\n          s += d * (a - m);\n        }\n      }\n    }\n\n    else {\n      while (++i < n) {\n        if (!isNaN(a = number$1(f(array[i], i, array)))) {\n          d = a - m;\n          m += d / ++j;\n          s += d * (a - m);\n        }\n      }\n    }\n\n    if (j > 1) return s / (j - 1);\n  }\n\n  function deviation(array, f) {\n    var v = variance(array, f);\n    return v ? Math.sqrt(v) : v;\n  }\n\n  function extent(array, f) {\n    var i = -1,\n        n = array.length,\n        a,\n        b,\n        c;\n\n    if (f == null) {\n      while (++i < n) if ((b = array[i]) != null && b >= b) { a = c = b; break; }\n      while (++i < n) if ((b = array[i]) != null) {\n        if (a > b) a = b;\n        if (c < b) c = b;\n      }\n    }\n\n    else {\n      while (++i < n) if ((b = f(array[i], i, array)) != null && b >= b) { a = c = b; break; }\n      while (++i < n) if ((b = f(array[i], i, array)) != null) {\n        if (a > b) a = b;\n        if (c < b) c = b;\n      }\n    }\n\n    return [a, c];\n  }\n\n  function constant(x) {\n    return function() {\n      return x;\n    };\n  }\n\n  function identity(x) {\n    return x;\n  }\n\n  function range(start, stop, step) {\n    start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n    var i = -1,\n        n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n        range = new Array(n);\n\n    while (++i < n) {\n      range[i] = start + i * step;\n    }\n\n    return range;\n  }\n\n  var e10 = Math.sqrt(50);\n  var e5 = Math.sqrt(10);\n  var e2 = Math.sqrt(2);\n  function ticks(start, stop, count) {\n    var step = tickStep(start, stop, count);\n    return range(\n      Math.ceil(start / step) * step,\n      Math.floor(stop / step) * step + step / 2, // inclusive\n      step\n    );\n  }\n\n  function tickStep(start, stop, count) {\n    var step0 = Math.abs(stop - start) / Math.max(0, count),\n        step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n        error = step0 / step1;\n    if (error >= e10) step1 *= 10;\n    else if (error >= e5) step1 *= 5;\n    else if (error >= e2) step1 *= 2;\n    return stop < start ? -step1 : step1;\n  }\n\n  function sturges(values) {\n    return Math.ceil(Math.log(values.length) / Math.LN2) + 1;\n  }\n\n  function number(x) {\n    return +x;\n  }\n\n  function histogram() {\n    var value = identity,\n        domain = extent,\n        threshold = sturges;\n\n    function histogram(data) {\n      var i,\n          n = data.length,\n          x,\n          values = new Array(n);\n\n      // Coerce values to numbers.\n      for (i = 0; i < n; ++i) {\n        values[i] = +value(data[i], i, data);\n      }\n\n      var xz = domain(values),\n          x0 = +xz[0],\n          x1 = +xz[1],\n          tz = threshold(values, x0, x1);\n\n      // Convert number of thresholds into uniform thresholds.\n      if (!Array.isArray(tz)) tz = ticks(x0, x1, +tz);\n\n      // Coerce thresholds to numbers, ignoring any outside the domain.\n      var m = tz.length;\n      for (i = 0; i < m; ++i) tz[i] = +tz[i];\n      while (tz[0] <= x0) tz.shift(), --m;\n      while (tz[m - 1] >= x1) tz.pop(), --m;\n\n      var bins = new Array(m + 1),\n          bin;\n\n      // Initialize bins.\n      for (i = 0; i <= m; ++i) {\n        bin = bins[i] = [];\n        bin.x0 = i > 0 ? tz[i - 1] : x0;\n        bin.x1 = i < m ? tz[i] : x1;\n      }\n\n      // Assign data to bins by value, ignoring any outside the domain.\n      for (i = 0; i < n; ++i) {\n        x = values[i];\n        if (x0 <= x && x <= x1) {\n          bins[bisectRight(tz, x, 0, m)].push(data[i]);\n        }\n      }\n\n      return bins;\n    }\n\n    histogram.value = function(_) {\n      return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), histogram) : value;\n    };\n\n    histogram.domain = function(_) {\n      return arguments.length ? (domain = typeof _ === \"function\" ? _ : constant([+_[0], +_[1]]), histogram) : domain;\n    };\n\n    histogram.thresholds = function(_) {\n      if (!arguments.length) return threshold;\n      threshold = typeof _ === \"function\" ? _\n          : Array.isArray(_) ? constant(Array.prototype.map.call(_, number))\n          : constant(+_);\n      return histogram;\n    };\n\n    return histogram;\n  }\n\n  function quantile(array, p, f) {\n    if (f == null) f = number$1;\n    if (!(n = array.length)) return;\n    if ((p = +p) <= 0 || n < 2) return +f(array[0], 0, array);\n    if (p >= 1) return +f(array[n - 1], n - 1, array);\n    var n,\n        h = (n - 1) * p,\n        i = Math.floor(h),\n        a = +f(array[i], i, array),\n        b = +f(array[i + 1], i + 1, array);\n    return a + (b - a) * (h - i);\n  }\n\n  function freedmanDiaconis(values, min, max) {\n    values.sort(ascending);\n    return Math.ceil((max - min) / (2 * (quantile(values, 0.75) - quantile(values, 0.25)) * Math.pow(values.length, -1 / 3)));\n  }\n\n  function scott(values, min, max) {\n    return Math.ceil((max - min) / (3.5 * deviation(values) * Math.pow(values.length, -1 / 3)));\n  }\n\n  function max(array, f) {\n    var i = -1,\n        n = array.length,\n        a,\n        b;\n\n    if (f == null) {\n      while (++i < n) if ((b = array[i]) != null && b >= b) { a = b; break; }\n      while (++i < n) if ((b = array[i]) != null && b > a) a = b;\n    }\n\n    else {\n      while (++i < n) if ((b = f(array[i], i, array)) != null && b >= b) { a = b; break; }\n      while (++i < n) if ((b = f(array[i], i, array)) != null && b > a) a = b;\n    }\n\n    return a;\n  }\n\n  function mean(array, f) {\n    var s = 0,\n        n = array.length,\n        a,\n        i = -1,\n        j = n;\n\n    if (f == null) {\n      while (++i < n) if (!isNaN(a = number$1(array[i]))) s += a; else --j;\n    }\n\n    else {\n      while (++i < n) if (!isNaN(a = number$1(f(array[i], i, array)))) s += a; else --j;\n    }\n\n    if (j) return s / j;\n  }\n\n  function median(array, f) {\n    var numbers = [],\n        n = array.length,\n        a,\n        i = -1;\n\n    if (f == null) {\n      while (++i < n) if (!isNaN(a = number$1(array[i]))) numbers.push(a);\n    }\n\n    else {\n      while (++i < n) if (!isNaN(a = number$1(f(array[i], i, array)))) numbers.push(a);\n    }\n\n    return quantile(numbers.sort(ascending), 0.5);\n  }\n\n  function merge(arrays) {\n    var n = arrays.length,\n        m,\n        i = -1,\n        j = 0,\n        merged,\n        array;\n\n    while (++i < n) j += arrays[i].length;\n    merged = new Array(j);\n\n    while (--n >= 0) {\n      array = arrays[n];\n      m = array.length;\n      while (--m >= 0) {\n        merged[--j] = array[m];\n      }\n    }\n\n    return merged;\n  }\n\n  function min(array, f) {\n    var i = -1,\n        n = array.length,\n        a,\n        b;\n\n    if (f == null) {\n      while (++i < n) if ((b = array[i]) != null && b >= b) { a = b; break; }\n      while (++i < n) if ((b = array[i]) != null && a > b) a = b;\n    }\n\n    else {\n      while (++i < n) if ((b = f(array[i], i, array)) != null && b >= b) { a = b; break; }\n      while (++i < n) if ((b = f(array[i], i, array)) != null && a > b) a = b;\n    }\n\n    return a;\n  }\n\n  function pairs(array) {\n    var i = 0, n = array.length - 1, p = array[0], pairs = new Array(n < 0 ? 0 : n);\n    while (i < n) pairs[i] = [p, p = array[++i]];\n    return pairs;\n  }\n\n  function permute(array, indexes) {\n    var i = indexes.length, permutes = new Array(i);\n    while (i--) permutes[i] = array[indexes[i]];\n    return permutes;\n  }\n\n  function scan(array, compare) {\n    if (!(n = array.length)) return;\n    var i = 0,\n        n,\n        j = 0,\n        xi,\n        xj = array[j];\n\n    if (!compare) compare = ascending;\n\n    while (++i < n) if (compare(xi = array[i], xj) < 0 || compare(xj, xj) !== 0) xj = xi, j = i;\n\n    if (compare(xj, xj) === 0) return j;\n  }\n\n  function shuffle(array, i0, i1) {\n    var m = (i1 == null ? array.length : i1) - (i0 = i0 == null ? 0 : +i0),\n        t,\n        i;\n\n    while (m) {\n      i = Math.random() * m-- | 0;\n      t = array[m + i0];\n      array[m + i0] = array[i + i0];\n      array[i + i0] = t;\n    }\n\n    return array;\n  }\n\n  function sum(array, f) {\n    var s = 0,\n        n = array.length,\n        a,\n        i = -1;\n\n    if (f == null) {\n      while (++i < n) if (a = +array[i]) s += a; // Note: zero and null are equivalent.\n    }\n\n    else {\n      while (++i < n) if (a = +f(array[i], i, array)) s += a;\n    }\n\n    return s;\n  }\n\n  function transpose(matrix) {\n    if (!(n = matrix.length)) return [];\n    for (var i = -1, m = min(matrix, length), transpose = new Array(m); ++i < m;) {\n      for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n;) {\n        row[j] = matrix[j][i];\n      }\n    }\n    return transpose;\n  }\n\n  function length(d) {\n    return d.length;\n  }\n\n  function zip() {\n    return transpose(arguments);\n  }\n\n  var version = \"0.7.1\";\n\n  exports.version = version;\n  exports.bisect = bisectRight;\n  exports.bisectRight = bisectRight;\n  exports.bisectLeft = bisectLeft;\n  exports.ascending = ascending;\n  exports.bisector = bisector;\n  exports.descending = descending;\n  exports.deviation = deviation;\n  exports.extent = extent;\n  exports.histogram = histogram;\n  exports.thresholdFreedmanDiaconis = freedmanDiaconis;\n  exports.thresholdScott = scott;\n  exports.thresholdSturges = sturges;\n  exports.max = max;\n  exports.mean = mean;\n  exports.median = median;\n  exports.merge = merge;\n  exports.min = min;\n  exports.pairs = pairs;\n  exports.permute = permute;\n  exports.quantile = quantile;\n  exports.range = range;\n  exports.scan = scan;\n  exports.shuffle = shuffle;\n  exports.sum = sum;\n  exports.ticks = ticks;\n  exports.tickStep = tickStep;\n  exports.transpose = transpose;\n  exports.variance = variance;\n  exports.zip = zip;\n\n}));","/**\r\n * This function xSubtract the first array by the second array or a constant value from each element of the first array\r\n * @param {Array} array1 - the array that will be rotated\r\n * @param {Array|Number} array2\r\n * @return {Array}\r\n */\r\nexport function xSubtract(array1, array2) {\r\n  let isConstant = false;\r\n  let constant;\r\n  if (Array.isArray(array2)) {\r\n    if (array1.length !== array2.length) {\r\n      throw new Error('sub: size of array1 and array2 must be identical');\r\n    }\r\n  } else {\r\n    isConstant = true;\r\n    constant = Number(array2);\r\n  }\r\n\r\n  let array3 = new Array(array1.length);\r\n  if (isConstant) {\r\n    for (let i = 0; i < array1.length; i++) {\r\n      array3[i] = array1[i] - constant;\r\n    }\r\n  } else {\r\n    for (let i = 0; i < array1.length; i++) {\r\n      array3[i] = array1[i] - array2[i];\r\n    }\r\n  }\r\n\r\n  return array3;\r\n}\r\n","'use strict';\n\nconst toString = Object.prototype.toString;\n\nfunction isAnyArray(object) {\n  return toString.call(object).endsWith('Array]');\n}\n\nmodule.exports = isAnyArray;\n","import isArray from 'is-any-array';\n\n/**\n * Computes the mean of the given values\n * @param {Array<number>} input\n * @return {number}\n */\n\nfunction sum(input) {\n  if (!isArray(input)) {\n    throw new TypeError('input must be an array');\n  }\n\n  if (input.length === 0) {\n    throw new TypeError('input must not be empty');\n  }\n\n  var sumValue = 0;\n\n  for (var i = 0; i < input.length; i++) {\n    sumValue += input[i];\n  }\n\n  return sumValue;\n}\n\nexport default sum;\n","import isArray from 'is-any-array';\nimport max from 'ml-array-max';\nimport sum from 'ml-array-sum';\n\n/**\n * Computes the norm of the given values\n * @param {Array<number>} input\n * @param {object} [options={}]\n * @param {string} [options.algorithm='absolute'] absolute, sum or max\n * @param {number} [options.maxValue=1] new max value for algo max\n * @param {number} [options.sumValue=1] new max value for algo absolute and sum\n * @param {Array} [options.output=[]] specify the output array, can be the input array for in place modification\n * @return {number}\n */\n\nfunction norm(input) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  var _options$algorithm = options.algorithm,\n      algorithm = _options$algorithm === void 0 ? 'absolute' : _options$algorithm,\n      _options$sumValue = options.sumValue,\n      sumValue = _options$sumValue === void 0 ? 1 : _options$sumValue,\n      _options$maxValue = options.maxValue,\n      maxValue = _options$maxValue === void 0 ? 1 : _options$maxValue;\n\n  if (!isArray(input)) {\n    throw new Error('input must be an array');\n  }\n\n  var output;\n\n  if (options.output !== undefined) {\n    if (!isArray(options.output)) {\n      throw new TypeError('output option must be an array if specified');\n    }\n\n    output = options.output;\n  } else {\n    output = new Array(input.length);\n  }\n\n  if (input.length === 0) {\n    throw new Error('input must not be empty');\n  }\n\n  switch (algorithm.toLowerCase()) {\n    case 'absolute':\n      {\n        var absoluteSumValue = absoluteSum(input) / sumValue;\n        if (absoluteSumValue === 0) return input.slice(0);\n\n        for (var i = 0; i < input.length; i++) {\n          output[i] = input[i] / absoluteSumValue;\n        }\n\n        return output;\n      }\n\n    case 'max':\n      {\n        var currentMaxValue = max(input);\n        if (currentMaxValue === 0) return input.slice(0);\n        var factor = maxValue / currentMaxValue;\n\n        for (var _i = 0; _i < input.length; _i++) {\n          output[_i] = input[_i] * factor;\n        }\n\n        return output;\n      }\n\n    case 'sum':\n      {\n        var sumFactor = sum(input) / sumValue;\n        if (sumFactor === 0) return input.slice(0);\n\n        for (var _i2 = 0; _i2 < input.length; _i2++) {\n          output[_i2] = input[_i2] / sumFactor;\n        }\n\n        return output;\n      }\n\n    default:\n      throw new Error(\"norm: unknown algorithm: \".concat(algorithm));\n  }\n}\n\nfunction absoluteSum(input) {\n  var sumValue = 0;\n\n  for (var i = 0; i < input.length; i++) {\n    sumValue += Math.abs(input[i]);\n  }\n\n  return sumValue;\n}\n\nexport default norm;\n","'use strict';\n\nconst toString = Object.prototype.toString;\n\nfunction isAnyArray(object) {\n  return toString.call(object).endsWith('Array]');\n}\n\nmodule.exports = isAnyArray;\n","import isArray from 'is-any-array';\nimport max from 'ml-array-max';\nimport min from 'ml-array-min';\n\n/**\n *\n * @param {Array} input\n * @param {object} [options={}]\n * @param {Array} [options.output=[]] specify the output array, can be the input array for in place modification\n */\n\nfunction rescale(input) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (!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  var output;\n\n  if (options.output !== undefined) {\n    if (!isArray(options.output)) {\n      throw new TypeError('output option must be an array if specified');\n    }\n\n    output = options.output;\n  } else {\n    output = new Array(input.length);\n  }\n\n  var currentMin = min(input);\n  var currentMax = max(input);\n\n  if (currentMin === currentMax) {\n    throw new RangeError('minimum and maximum input values are equal. Cannot rescale a constant array');\n  }\n\n  var _options$min = options.min,\n      minValue = _options$min === void 0 ? options.autoMinMax ? currentMin : 0 : _options$min,\n      _options$max = options.max,\n      maxValue = _options$max === void 0 ? options.autoMinMax ? currentMax : 1 : _options$max;\n\n  if (minValue >= maxValue) {\n    throw new RangeError('min option must be smaller than max option');\n  }\n\n  var factor = (maxValue - minValue) / (currentMax - currentMin);\n\n  for (var i = 0; i < input.length; i++) {\n    output[i] = (input[i] - currentMin) * factor + minValue;\n  }\n\n  return output;\n}\n\nexport default rescale;\n","'use strict';\n\nconst toString = Object.prototype.toString;\n\nfunction isAnyArray(object) {\n  return toString.call(object).endsWith('Array]');\n}\n\nmodule.exports = isAnyArray;\n","import isArray from 'is-any-array';\n\nfunction _typeof(obj) {\n  if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n    _typeof = function (obj) {\n      return typeof obj;\n    };\n  } else {\n    _typeof = function (obj) {\n      return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    };\n  }\n\n  return _typeof(obj);\n}\n\n/**\n * Fill an array with sequential numbers\n * @param {Array<number>} [input] - optional destination array (if not provided a new array will be created)\n * @param {object} [options={}]\n * @param {number} [options.from=0] - first value in the array\n * @param {number} [options.to=10] - last value in the array\n * @param {number} [options.size=input.length] - size of the array (if not provided calculated from step)\n * @param {number} [options.step] - if not provided calculated from size\n * @return {Array<number>}\n */\n\nfunction sequentialFill() {\n  var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (_typeof(input) === 'object' && !isArray(input)) {\n    options = input;\n    input = [];\n  }\n\n  if (!isArray(input)) {\n    throw new TypeError('input must be an array');\n  }\n\n  var _options = options,\n      _options$from = _options.from,\n      from = _options$from === void 0 ? 0 : _options$from,\n      _options$to = _options.to,\n      to = _options$to === void 0 ? 10 : _options$to,\n      _options$size = _options.size,\n      size = _options$size === void 0 ? input.length : _options$size,\n      step = _options.step;\n\n  if (size && step) {\n    throw new Error('step is defined by the array size');\n  }\n\n  if (!size) {\n    if (step) {\n      size = Math.floor((to - from) / step) + 1;\n    } else {\n      size = to - from + 1;\n    }\n  }\n\n  if (!step && size) {\n    step = (to - from) / (size - 1);\n  }\n\n  if (Array.isArray(input)) {\n    input.length = 0; // only works with normal array\n\n    for (var i = 0; i < size; i++) {\n      input.push(from);\n      from += step;\n    }\n  } else {\n    if (input.length !== size) {\n      throw new Error('sequentialFill typed array must have the correct length');\n    }\n\n    for (var _i = 0; _i < size; _i++) {\n      input[_i] = from;\n      from += step;\n    }\n  }\n\n  return input;\n}\n\nexport default sequentialFill;\n","/**\n * Normalize an array of zones:\n * - ensure than from < to\n * - merge overlapping zones\n *\n * The method will always check if from if lower than to and will swap if required.\n * @param {Array} [zones=[]]\n * @param {object} [options={}]\n * @param {number} [options.from=Number.NEGATIVE_INFINITY] Specify min value of a zone\n * @param {number} [options.to=Number.POSITIVE_INFINITY] Specify max value of a zone\n */\n\nexport function normalize(zones = [], options = {}) {\n  if (zones.length === 0) return [];\n  let {\n    from = Number.NEGATIVE_INFINITY,\n    to = Number.POSITIVE_INFINITY,\n  } = options;\n  if (from > to) [from, to] = [to, from];\n\n  zones = JSON.parse(JSON.stringify(zones)).map((zone) =>\n    zone.from > zone.to ? { from: zone.to, to: zone.from } : zone,\n  );\n  zones = zones.sort((a, b) => {\n    if (a.from !== b.from) return a.from - b.from;\n    return a.to - b.to;\n  });\n\n  zones.forEach((zone) => {\n    if (from > zone.from) zone.from = from;\n    if (to < zone.to) zone.to = to;\n  });\n\n  zones = zones.filter((zone) => zone.from <= zone.to);\n  if (zones.length === 0) return [];\n\n  let currentZone = zones[0];\n  let result = [currentZone];\n  for (let i = 1; i < zones.length; i++) {\n    let zone = zones[i];\n    if (zone.from <= currentZone.to) {\n      currentZone.to = zone.to;\n    } else {\n      currentZone = zone;\n      result.push(currentZone);\n    }\n  }\n  return result;\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 * @param {number} x0\n * @param {number} x1\n * @param {number} slope\n * @param {number} intercept\n * @return {number} integral value.\n */\nexport default function integral(x0, x1, slope, intercept) {\n  return (\n    0.5 * slope * x1 * x1 +\n    intercept * x1 -\n    (0.5 * slope * x0 * x0 + intercept * x0)\n  );\n}\n","import sequentialFill from 'ml-array-sequential-fill';\nimport { zonesWithPoints, invert } from 'ml-zones';\n\nimport equallySpacedSmooth from './equallySpacedSmooth';\nimport equallySpacedSlot from './equallySpacedSlot';\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 * If exclusions zone are present, zones are ignored !\n * @param {object} [arrayXY={}] - object containing 2 properties x and y (both an array)\n * @param {object} [options={}]\n * @param {number} [options.from=x[0]]\n * @param {number} [options.to=x[x.length-1]]\n * @param {string} [options.variant='smooth']\n * @param {number} [options.numberOfPoints=100]\n * @param {Array} [options.exclusions=[]] array of from / to that should be skipped for the generation of the points\n * @param {Array} [options.zones=[]] array of from / to that should be kept\n * @return {object<x: Array, y:Array>} new object with x / y array with the equally spaced data.\n */\n\nexport default function equallySpaced(arrayXY = {}, options = {}) {\n  let { x, y } = arrayXY;\n  let xLength = x.length;\n  let reverse = false;\n  if (x.length > 1 && x[0] > x[1]) {\n    x = x.slice().reverse();\n    y = y.slice().reverse();\n    reverse = true;\n  }\n\n  let {\n    from = x[0],\n    to = x[xLength - 1],\n    variant = 'smooth',\n    numberOfPoints = 100,\n    exclusions = [],\n    zones = [],\n  } = options;\n\n  if (xLength !== y.length) {\n    throw new RangeError(\"the x and y vector doesn't have the same size.\");\n  }\n\n  if (typeof from !== 'number' || isNaN(from)) {\n    throw new RangeError(\"'from' option must be a number\");\n  }\n\n  if (typeof to !== 'number' || isNaN(to)) {\n    throw new RangeError(\"'to' option must be a number\");\n  }\n\n  if (typeof numberOfPoints !== 'number' || isNaN(numberOfPoints)) {\n    throw new RangeError(\"'numberOfPoints' option must be a number\");\n  }\n\n  if (numberOfPoints < 2) {\n    throw new RangeError(\"'numberOfPoints' option must be greater than 1\");\n  }\n\n  if (zones.length === 0) {\n    zones = invert(exclusions, { from, to });\n  }\n\n  zones = zonesWithPoints(zones, numberOfPoints, { from, to });\n\n  let xResult = [];\n  let yResult = [];\n  for (let zone of zones) {\n    let zoneResult = processZone(\n      x,\n      y,\n      zone.from,\n      zone.to,\n      zone.numberOfPoints,\n      variant,\n      reverse,\n    );\n\n    xResult = xResult.concat(zoneResult.x);\n    yResult = yResult.concat(zoneResult.y);\n  }\n  if (reverse) {\n    if (from < to) {\n      return { x: xResult.reverse(), y: yResult.reverse() };\n    } else {\n      return { x: xResult, y: yResult };\n    }\n  } else {\n    if (from < to) {\n      return { x: xResult, y: yResult };\n    } else {\n      return { x: xResult.reverse(), y: yResult.reverse() };\n    }\n  }\n}\n\nfunction processZone(x, y, from, to, numberOfPoints, variant) {\n  if (numberOfPoints < 1) {\n    throw new RangeError('the number of points must be at least 1');\n  }\n\n  let output =\n    variant === 'slot'\n      ? equallySpacedSlot(x, y, from, to, numberOfPoints)\n      : equallySpacedSmooth(x, y, from, to, numberOfPoints);\n\n  return {\n    x: sequentialFill({\n      from,\n      to,\n      size: numberOfPoints,\n    }),\n    y: output,\n  };\n}\n","import { normalize } from './normalize';\n\n/**\n * Convert an array of exclusions and keep only from / to\n *\n * The method will always check if from if lower than to and will swap if required.\n * @param {Array} [exclusions=[]]\n * @param {object} [options={}]\n * @param {number} [options.from=Number.NEGATIVE_INFINITY] Specify min value of zones (after inversion)\n * @param {number} [options.to=Number.POSITIVE_INFINITY] Specify max value of zones (after inversion)\n */\n\nexport function invert(exclusions = [], options = {}) {\n  let {\n    from = Number.NEGATIVE_INFINITY,\n    to = Number.POSITIVE_INFINITY,\n  } = options;\n  if (from > to) [from, to] = [to, from];\n\n  exclusions = normalize(exclusions, { from, to });\n  if (exclusions.length === 0) return [{ from, to }];\n\n  let zones = [];\n  for (let i = 0; i < exclusions.length; i++) {\n    let exclusion = exclusions[i];\n    let nextExclusion = exclusions[i + 1];\n    if (i === 0) {\n      if (exclusion.from > from) {\n        zones.push({ from, to: exclusion.from });\n      }\n    }\n    if (i === exclusions.length - 1) {\n      if (exclusion.to < to) {\n        zones.push({ from: exclusion.to, to });\n      }\n    } else {\n      zones.push({ from: exclusion.to, to: nextExclusion.from });\n    }\n  }\n\n  return zones;\n}\n","import { normalize } from './normalize';\n\n/**\n * Add the number of points per zone to reach a specified total\n * @param {Array} [zones=[]]\n * @param {number} [numberOfPoints] Total number of points to distribute between zones\n * @param {object} [options={}]\n * @param {number} [options.from=Number.NEGATIVE_INFINITY] Specify min value of a zone\n * @param {number} [options.to=Number.POSITIVE_INFINITY] Specify max value of a zone\n */\n\nexport function zonesWithPoints(zones, numberOfPoints, options = {}) {\n  if (zones.length === 0) return zones;\n  zones = normalize(zones, options);\n\n  const totalSize = zones.reduce((previous, current) => {\n    return previous + (current.to - current.from);\n  }, 0);\n\n  let unitsPerPoint = totalSize / numberOfPoints;\n  let currentTotal = 0;\n  for (let i = 0; i < zones.length - 1; i++) {\n    let zone = zones[i];\n    zone.numberOfPoints = Math.min(\n      Math.round((zone.to - zone.from) / unitsPerPoint),\n      numberOfPoints - currentTotal,\n    );\n    currentTotal += zone.numberOfPoints;\n  }\n\n  zones[zones.length - 1].numberOfPoints = numberOfPoints - currentTotal;\n\n  return zones;\n}\n","/**\n * function that retrieves the getEquallySpacedData with the variant \"slot\"\n *\n * @param {Array<number>} x\n * @param {Array<number>} y\n * @param {number} from - Initial point\n * @param {number} to - Final point\n * @param {number} numberOfPoints\n * @return {Array} - Array of y's equally spaced with the variant \"slot\"\n */\nexport default function equallySpacedSlot(x, y, from, to, numberOfPoints) {\n  let xLength = x.length;\n\n  let step = (to - from) / (numberOfPoints - 1);\n  let halfStep = step / 2;\n  let lastStep = x[x.length - 1] - x[x.length - 2];\n\n  let start = from - halfStep;\n  let output = new Array(numberOfPoints);\n\n  // Init main variables\n  let min = start;\n  let max = start + step;\n\n  let previousX = -Number.MAX_VALUE;\n  let previousY = 0;\n  let nextX = x[0];\n  let nextY = y[0];\n  let frontOutsideSpectra = 0;\n  let backOutsideSpectra = true;\n\n  let currentValue = 0;\n\n  // for slot algorithm\n  let currentPoints = 0;\n\n  let i = 1; // index of input\n  let 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\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\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","import integral from './integral';\n\n/**\n * function that retrieves the getEquallySpacedData with the variant \"smooth\"\n *\n * @param {Array<number>} x\n * @param {Array<number>} y\n * @param {number} from - Initial point\n * @param {number} to - Final point\n * @param {number} numberOfPoints\n * @return {Array} - Array of y's equally spaced with the variant \"smooth\"\n */\nexport default function equallySpacedSmooth(x, y, from, to, numberOfPoints) {\n  let xLength = x.length;\n\n  let step = (to - from) / (numberOfPoints - 1);\n  let halfStep = step / 2;\n\n  let output = new Array(numberOfPoints);\n\n  let initialOriginalStep = x[1] - x[0];\n  let lastOriginalStep = x[xLength - 1] - x[xLength - 2];\n\n  // Init main variables\n  let min = from - halfStep;\n  let max = from + halfStep;\n\n  let previousX = Number.MIN_VALUE;\n  let previousY = 0;\n  let nextX = x[0] - initialOriginalStep;\n  let nextY = 0;\n\n  let currentValue = 0;\n  let slope = 0;\n  let intercept = 0;\n  let sumAtMin = 0;\n  let sumAtMax = 0;\n\n  let i = 0; // index of input\n  let j = 0; // index of output\n\n  function getSlope(x0, y0, x1, y1) {\n    return (y1 - y0) / (x1 - x0);\n  }\n\n  let add = 0;\n  main: while (true) {\n    if (previousX <= min && min <= nextX) {\n      add = integral(0, min - previousX, slope, previousY);\n      sumAtMin = currentValue + add;\n    }\n\n    while (nextX - max >= 0) {\n      // no overlap with original point, just consume current value\n      add = integral(0, max - previousX, slope, previousY);\n      sumAtMax = currentValue + add;\n\n      output[j++] = (sumAtMax - sumAtMin) / step;\n\n      if (j === numberOfPoints) {\n        break main;\n      }\n\n      min = max;\n      max += step;\n      sumAtMin = sumAtMax;\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\n    slope = getSlope(previousX, previousY, nextX, nextY);\n    intercept = -slope * previousX + previousY;\n  }\n\n  return output;\n}\n","import getZones from './getZones';\n\n/**\n * Filter an array x/y based on various criteria\n * x points are expected to be sorted\n *\n * @param {object} points\n * @param {object} [options={}]\n * @param {array} [options.from]\n * @param {array} [options.to]\n * @param {array} [options.exclusions=[]]\n * @return {{x: Array<number>, y: Array<number>}}\n */\n\nexport default function filterX(points, options = {}) {\n  const { x, y } = points;\n  const { from = x[0], to = x[x.length - 1], exclusions = [] } = options;\n\n  let zones = getZones(from, to, exclusions);\n\n\n  let currentZoneIndex = 0;\n  let newX = [];\n  let newY = [];\n  let position = 0;\n  while (position < x.length) {\n    if (\n      x[position] <= zones[currentZoneIndex].to &&\n      x[position] >= zones[currentZoneIndex].from\n    ) {\n      newX.push(x[position]);\n      newY.push(y[position]);\n    } else {\n      if (x[position] > zones[currentZoneIndex].to) {\n        currentZoneIndex++;\n        if (!zones[currentZoneIndex]) break;\n      }\n    }\n    position++;\n  }\n\n  return {\n    x: newX,\n    y: newY\n  };\n}\n","export default function getZones(from, to, exclusions = []) {\n  if (from > to) {\n    [from, to] = [to, from];\n  }\n\n  // in exclusions from and to have to be defined\n  exclusions = exclusions.filter(\n    (exclusion) => exclusion.from !== undefined && exclusion.to !== undefined\n  );\n\n  exclusions = JSON.parse(JSON.stringify(exclusions));\n  // we ensure that from before to\n  exclusions.forEach((exclusion) => {\n    if (exclusion.from > exclusion.to) {\n      [exclusion.to, exclusion.from] = [exclusion.from, exclusion.to];\n    }\n  });\n\n  exclusions.sort((a, b) => a.from - b.from);\n\n  // we will rework the exclusions in order to remove overlap and outside range (from / to)\n  exclusions.forEach((exclusion) => {\n    if (exclusion.from < from) exclusion.from = from;\n    if (exclusion.to > to) exclusion.to = to;\n  });\n  for (let i = 0; i < exclusions.length - 1; i++) {\n    if (exclusions[i].to > exclusions[i + 1].from) {\n      exclusions[i].to = exclusions[i + 1].from;\n    }\n  }\n  exclusions = exclusions.filter((exclusion) => exclusion.from < exclusion.to);\n\n  if (!exclusions || exclusions.length === 0) {\n    return [{ from, to }];\n  }\n\n  let zones = [];\n  let currentFrom = from;\n  for (let exclusion of exclusions) {\n    if (currentFrom < exclusion.from) {\n      zones.push({\n        from: currentFrom,\n        to: exclusion.from\n      });\n    }\n\n    currentFrom = exclusion.to;\n  }\n  if (currentFrom < to) {\n    zones.push({\n      from: currentFrom,\n      to: to\n    });\n  }\n\n  return zones;\n}\n","const indent = ' '.repeat(2);\nconst indentData = ' '.repeat(4);\n\nexport function inspectMatrix() {\n  return inspectMatrixWithOptions(this);\n}\n\nexport function inspectMatrixWithOptions(matrix, options = {}) {\n  const { maxRows = 15, maxColumns = 10, maxNumSize = 8 } = options;\n  return `${matrix.constructor.name} {\n${indent}[\n${indentData}${inspectData(matrix, maxRows, maxColumns, maxNumSize)}\n${indent}]\n${indent}rows: ${matrix.rows}\n${indent}columns: ${matrix.columns}\n}`;\n}\n\nfunction inspectData(matrix, maxRows, maxColumns, maxNumSize) {\n  const { rows, columns } = matrix;\n  const maxI = Math.min(rows, maxRows);\n  const maxJ = Math.min(columns, maxColumns);\n  const result = [];\n  for (let i = 0; i < maxI; i++) {\n    let line = [];\n    for (let j = 0; j < maxJ; j++) {\n      line.push(formatNumber(matrix.get(i, j), maxNumSize));\n    }\n    result.push(`${line.join(' ')}`);\n  }\n  if (maxJ !== columns) {\n    result[result.length - 1] += ` ... ${columns - maxColumns} more columns`;\n  }\n  if (maxI !== rows) {\n    result.push(`... ${rows - maxRows} more rows`);\n  }\n  return result.join(`\\n${indentData}`);\n}\n\nfunction formatNumber(num, maxNumSize) {\n  const numStr = String(num);\n  if (numStr.length <= maxNumSize) {\n    return numStr.padEnd(maxNumSize, ' ');\n  }\n  const precise = num.toPrecision(maxNumSize - 2);\n  if (precise.length <= maxNumSize) {\n    return precise;\n  }\n  const exponential = num.toExponential(maxNumSize - 2);\n  const eIndex = exponential.indexOf('e');\n  const e = exponential.slice(eIndex);\n  return exponential.slice(0, maxNumSize - e.length) + e;\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 */\nexport function checkRowIndex(matrix, index, outer) {\n  let max = outer ? matrix.rows : matrix.rows - 1;\n  if (index < 0 || index > max) {\n    throw new RangeError('Row index out of range');\n  }\n}\n\n/**\n * @private\n * Check that a column index is not out of bounds\n * @param {Matrix} matrix\n * @param {number} index\n * @param {boolean} [outer]\n */\nexport function checkColumnIndex(matrix, index, outer) {\n  let max = outer ? matrix.columns : matrix.columns - 1;\n  if (index < 0 || index > max) {\n    throw new RangeError('Column index out of range');\n  }\n}\n\n/**\n * @private\n * Check that the provided vector is an array with the right length\n * @param {Matrix} matrix\n * @param {Array|Matrix} vector\n * @return {Array}\n * @throws {RangeError}\n */\nexport function checkRowVector(matrix, vector) {\n  if (vector.to1DArray) {\n    vector = vector.to1DArray();\n  }\n  if (vector.length !== matrix.columns) {\n    throw new RangeError(\n      'vector size must be the same as the number of columns',\n    );\n  }\n  return vector;\n}\n\n/**\n * @private\n * Check that the provided vector is an array with the right length\n * @param {Matrix} matrix\n * @param {Array|Matrix} vector\n * @return {Array}\n * @throws {RangeError}\n */\nexport 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\nexport function checkIndices(matrix, rowIndices, columnIndices) {\n  return {\n    row: checkRowIndices(matrix, rowIndices),\n    column: checkColumnIndices(matrix, columnIndices),\n  };\n}\n\nexport function checkRowIndices(matrix, rowIndices) {\n  if (typeof rowIndices !== 'object') {\n    throw new TypeError('unexpected type for row indices');\n  }\n\n  let rowOut = rowIndices.some((r) => {\n    return r < 0 || r >= matrix.rows;\n  });\n\n  if (rowOut) {\n    throw new RangeError('row indices are out of range');\n  }\n\n  if (!Array.isArray(rowIndices)) rowIndices = Array.from(rowIndices);\n\n  return rowIndices;\n}\n\nexport function checkColumnIndices(matrix, columnIndices) {\n  if (typeof columnIndices !== 'object') {\n    throw new TypeError('unexpected type for column indices');\n  }\n\n  let columnOut = columnIndices.some((c) => {\n    return c < 0 || c >= matrix.columns;\n  });\n\n  if (columnOut) {\n    throw new RangeError('column indices are out of range');\n  }\n  if (!Array.isArray(columnIndices)) columnIndices = Array.from(columnIndices);\n\n  return columnIndices;\n}\n\nexport function checkRange(matrix, startRow, endRow, startColumn, endColumn) {\n  if (arguments.length !== 5) {\n    throw new RangeError('expected 4 arguments');\n  }\n  checkNumber('startRow', startRow);\n  checkNumber('endRow', endRow);\n  checkNumber('startColumn', startColumn);\n  checkNumber('endColumn', endColumn);\n  if (\n    startRow > endRow ||\n    startColumn > endColumn ||\n    startRow < 0 ||\n    startRow >= matrix.rows ||\n    endRow < 0 ||\n    endRow >= matrix.rows ||\n    startColumn < 0 ||\n    startColumn >= matrix.columns ||\n    endColumn < 0 ||\n    endColumn >= matrix.columns\n  ) {\n    throw new RangeError('Submatrix indices are out of range');\n  }\n}\n\nexport function newArray(length, value = 0) {\n  let array = [];\n  for (let i = 0; i < length; i++) {\n    array.push(value);\n  }\n  return array;\n}\n\nfunction checkNumber(name, value) {\n  if (typeof value !== 'number') {\n    throw new TypeError(`${name} must be a number`);\n  }\n}\n","import rescale from 'ml-array-rescale';\n\nimport { inspectMatrix, inspectMatrixWithOptions } from './inspect';\nimport { installMathOperations } from './mathOperations';\nimport {\n  sumByRow,\n  sumByColumn,\n  sumAll,\n  productByRow,\n  productByColumn,\n  productAll,\n  varianceByRow,\n  varianceByColumn,\n  varianceAll,\n  centerByRow,\n  centerByColumn,\n  centerAll,\n  scaleByRow,\n  scaleByColumn,\n  scaleAll,\n  getScaleByRow,\n  getScaleByColumn,\n  getScaleAll,\n} from './stat';\nimport {\n  checkRowVector,\n  checkRowIndex,\n  checkColumnIndex,\n  checkColumnVector,\n  checkRange,\n  checkIndices,\n} from './util';\n\nexport class AbstractMatrix {\n  static from1DArray(newRows, newColumns, newData) {\n    let length = newRows * newColumns;\n    if (length !== newData.length) {\n      throw new RangeError('data length does not match given dimensions');\n    }\n    let newMatrix = new Matrix(newRows, newColumns);\n    for (let row = 0; row < newRows; row++) {\n      for (let column = 0; column < newColumns; column++) {\n        newMatrix.set(row, column, newData[row * newColumns + column]);\n      }\n    }\n    return newMatrix;\n  }\n\n  static rowVector(newData) {\n    let vector = new Matrix(1, newData.length);\n    for (let i = 0; i < newData.length; i++) {\n      vector.set(0, i, newData[i]);\n    }\n    return vector;\n  }\n\n  static columnVector(newData) {\n    let vector = new Matrix(newData.length, 1);\n    for (let i = 0; i < newData.length; i++) {\n      vector.set(i, 0, newData[i]);\n    }\n    return vector;\n  }\n\n  static zeros(rows, columns) {\n    return new Matrix(rows, columns);\n  }\n\n  static ones(rows, columns) {\n    return new Matrix(rows, columns).fill(1);\n  }\n\n  static rand(rows, columns, options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { random = Math.random } = options;\n    let matrix = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        matrix.set(i, j, random());\n      }\n    }\n    return matrix;\n  }\n\n  static randInt(rows, columns, options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { min = 0, max = 1000, random = Math.random } = options;\n    if (!Number.isInteger(min)) throw new TypeError('min must be an integer');\n    if (!Number.isInteger(max)) throw new TypeError('max must be an integer');\n    if (min >= max) throw new RangeError('min must be smaller than max');\n    let interval = max - min;\n    let matrix = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        let value = min + Math.round(random() * interval);\n        matrix.set(i, j, value);\n      }\n    }\n    return matrix;\n  }\n\n  static eye(rows, columns, value) {\n    if (columns === undefined) columns = rows;\n    if (value === undefined) value = 1;\n    let min = Math.min(rows, columns);\n    let matrix = this.zeros(rows, columns);\n    for (let i = 0; i < min; i++) {\n      matrix.set(i, i, value);\n    }\n    return matrix;\n  }\n\n  static diag(data, rows, columns) {\n    let l = data.length;\n    if (rows === undefined) rows = l;\n    if (columns === undefined) columns = rows;\n    let min = Math.min(l, rows, columns);\n    let matrix = this.zeros(rows, columns);\n    for (let i = 0; i < min; i++) {\n      matrix.set(i, i, data[i]);\n    }\n    return matrix;\n  }\n\n  static min(matrix1, matrix2) {\n    matrix1 = this.checkMatrix(matrix1);\n    matrix2 = this.checkMatrix(matrix2);\n    let rows = matrix1.rows;\n    let columns = matrix1.columns;\n    let result = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        result.set(i, j, Math.min(matrix1.get(i, j), matrix2.get(i, j)));\n      }\n    }\n    return result;\n  }\n\n  static max(matrix1, matrix2) {\n    matrix1 = this.checkMatrix(matrix1);\n    matrix2 = this.checkMatrix(matrix2);\n    let rows = matrix1.rows;\n    let columns = matrix1.columns;\n    let result = new this(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        result.set(i, j, Math.max(matrix1.get(i, j), matrix2.get(i, j)));\n      }\n    }\n    return result;\n  }\n\n  static checkMatrix(value) {\n    return AbstractMatrix.isMatrix(value) ? value : new Matrix(value);\n  }\n\n  static isMatrix(value) {\n    return value != null && value.klass === 'Matrix';\n  }\n\n  get size() {\n    return this.rows * this.columns;\n  }\n\n  apply(callback) {\n    if (typeof callback !== 'function') {\n      throw new TypeError('callback must be a function');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        callback.call(this, i, j);\n      }\n    }\n    return this;\n  }\n\n  to1DArray() {\n    let array = [];\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        array.push(this.get(i, j));\n      }\n    }\n    return array;\n  }\n\n  to2DArray() {\n    let copy = [];\n    for (let i = 0; i < this.rows; i++) {\n      copy.push([]);\n      for (let j = 0; j < this.columns; j++) {\n        copy[i].push(this.get(i, j));\n      }\n    }\n    return copy;\n  }\n\n  toJSON() {\n    return this.to2DArray();\n  }\n\n  isRowVector() {\n    return this.rows === 1;\n  }\n\n  isColumnVector() {\n    return this.columns === 1;\n  }\n\n  isVector() {\n    return this.rows === 1 || this.columns === 1;\n  }\n\n  isSquare() {\n    return this.rows === this.columns;\n  }\n\n  isSymmetric() {\n    if (this.isSquare()) {\n      for (let i = 0; i < this.rows; i++) {\n        for (let j = 0; j <= i; j++) {\n          if (this.get(i, j) !== this.get(j, i)) {\n            return false;\n          }\n        }\n      }\n      return true;\n    }\n    return false;\n  }\n\n  isEchelonForm() {\n    let i = 0;\n    let j = 0;\n    let previousColumn = -1;\n    let isEchelonForm = true;\n    let checked = false;\n    while (i < this.rows && isEchelonForm) {\n      j = 0;\n      checked = false;\n      while (j < this.columns && checked === false) {\n        if (this.get(i, j) === 0) {\n          j++;\n        } else if (this.get(i, j) === 1 && j > previousColumn) {\n          checked = true;\n          previousColumn = j;\n        } else {\n          isEchelonForm = false;\n          checked = true;\n        }\n      }\n      i++;\n    }\n    return isEchelonForm;\n  }\n\n  isReducedEchelonForm() {\n    let i = 0;\n    let j = 0;\n    let previousColumn = -1;\n    let isReducedEchelonForm = true;\n    let checked = false;\n    while (i < this.rows && isReducedEchelonForm) {\n      j = 0;\n      checked = false;\n      while (j < this.columns && checked === false) {\n        if (this.get(i, j) === 0) {\n          j++;\n        } else if (this.get(i, j) === 1 && j > previousColumn) {\n          checked = true;\n          previousColumn = j;\n        } else {\n          isReducedEchelonForm = false;\n          checked = true;\n        }\n      }\n      for (let k = j + 1; k < this.rows; k++) {\n        if (this.get(i, k) !== 0) {\n          isReducedEchelonForm = false;\n        }\n      }\n      i++;\n    }\n    return isReducedEchelonForm;\n  }\n\n  echelonForm() {\n    let result = this.clone();\n    let h = 0;\n    let k = 0;\n    while (h < result.rows && k < result.columns) {\n      let iMax = h;\n      for (let i = h; i < result.rows; i++) {\n        if (result.get(i, k) > result.get(iMax, k)) {\n          iMax = i;\n        }\n      }\n      if (result.get(iMax, k) === 0) {\n        k++;\n      } else {\n        result.swapRows(h, iMax);\n        let tmp = result.get(h, k);\n        for (let j = k; j < result.columns; j++) {\n          result.set(h, j, result.get(h, j) / tmp);\n        }\n        for (let i = h + 1; i < result.rows; i++) {\n          let factor = result.get(i, k) / result.get(h, k);\n          result.set(i, k, 0);\n          for (let j = k + 1; j < result.columns; j++) {\n            result.set(i, j, result.get(i, j) - result.get(h, j) * factor);\n          }\n        }\n        h++;\n        k++;\n      }\n    }\n    return result;\n  }\n\n  reducedEchelonForm() {\n    let result = this.echelonForm();\n    let m = result.columns;\n    let n = result.rows;\n    let h = n - 1;\n    while (h >= 0) {\n      if (result.maxRow(h) === 0) {\n        h--;\n      } else {\n        let p = 0;\n        let pivot = false;\n        while (p < n && pivot === false) {\n          if (result.get(h, p) === 1) {\n            pivot = true;\n          } else {\n            p++;\n          }\n        }\n        for (let i = 0; i < h; i++) {\n          let factor = result.get(i, p);\n          for (let j = p; j < m; j++) {\n            let tmp = result.get(i, j) - factor * result.get(h, j);\n            result.set(i, j, tmp);\n          }\n        }\n        h--;\n      }\n    }\n    return result;\n  }\n\n  set() {\n    throw new Error('set method is unimplemented');\n  }\n\n  get() {\n    throw new Error('get method is unimplemented');\n  }\n\n  repeat(options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { rows = 1, columns = 1 } = options;\n    if (!Number.isInteger(rows) || rows <= 0) {\n      throw new TypeError('rows must be a positive integer');\n    }\n    if (!Number.isInteger(columns) || columns <= 0) {\n      throw new TypeError('columns must be a positive integer');\n    }\n    let matrix = new Matrix(this.rows * rows, this.columns * columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        matrix.setSubMatrix(this, this.rows * i, this.columns * j);\n      }\n    }\n    return matrix;\n  }\n\n  fill(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, value);\n      }\n    }\n    return this;\n  }\n\n  neg() {\n    return this.mulS(-1);\n  }\n\n  getRow(index) {\n    checkRowIndex(this, index);\n    let row = [];\n    for (let i = 0; i < this.columns; i++) {\n      row.push(this.get(index, i));\n    }\n    return row;\n  }\n\n  getRowVector(index) {\n    return Matrix.rowVector(this.getRow(index));\n  }\n\n  setRow(index, array) {\n    checkRowIndex(this, index);\n    array = checkRowVector(this, array);\n    for (let i = 0; i < this.columns; i++) {\n      this.set(index, i, array[i]);\n    }\n    return this;\n  }\n\n  swapRows(row1, row2) {\n    checkRowIndex(this, row1);\n    checkRowIndex(this, row2);\n    for (let i = 0; i < this.columns; i++) {\n      let temp = this.get(row1, i);\n      this.set(row1, i, this.get(row2, i));\n      this.set(row2, i, temp);\n    }\n    return this;\n  }\n\n  getColumn(index) {\n    checkColumnIndex(this, index);\n    let column = [];\n    for (let i = 0; i < this.rows; i++) {\n      column.push(this.get(i, index));\n    }\n    return column;\n  }\n\n  getColumnVector(index) {\n    return Matrix.columnVector(this.getColumn(index));\n  }\n\n  setColumn(index, array) {\n    checkColumnIndex(this, index);\n    array = checkColumnVector(this, array);\n    for (let i = 0; i < this.rows; i++) {\n      this.set(i, index, array[i]);\n    }\n    return this;\n  }\n\n  swapColumns(column1, column2) {\n    checkColumnIndex(this, column1);\n    checkColumnIndex(this, column2);\n    for (let i = 0; i < this.rows; i++) {\n      let temp = this.get(i, column1);\n      this.set(i, column1, this.get(i, column2));\n      this.set(i, column2, temp);\n    }\n    return this;\n  }\n\n  addRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + vector[j]);\n      }\n    }\n    return this;\n  }\n\n  subRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - vector[j]);\n      }\n    }\n    return this;\n  }\n\n  mulRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * vector[j]);\n      }\n    }\n    return this;\n  }\n\n  divRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / vector[j]);\n      }\n    }\n    return this;\n  }\n\n  addColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + vector[i]);\n      }\n    }\n    return this;\n  }\n\n  subColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - vector[i]);\n      }\n    }\n    return this;\n  }\n\n  mulColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * vector[i]);\n      }\n    }\n    return this;\n  }\n\n  divColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / vector[i]);\n      }\n    }\n    return this;\n  }\n\n  mulRow(index, value) {\n    checkRowIndex(this, index);\n    for (let i = 0; i < this.columns; i++) {\n      this.set(index, i, this.get(index, i) * value);\n    }\n    return this;\n  }\n\n  mulColumn(index, value) {\n    checkColumnIndex(this, index);\n    for (let i = 0; i < this.rows; i++) {\n      this.set(i, index, this.get(i, index) * value);\n    }\n    return this;\n  }\n\n  max() {\n    let v = this.get(0, 0);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        if (this.get(i, j) > v) {\n          v = this.get(i, j);\n        }\n      }\n    }\n    return v;\n  }\n\n  maxIndex() {\n    let v = this.get(0, 0);\n    let idx = [0, 0];\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        if (this.get(i, j) > v) {\n          v = this.get(i, j);\n          idx[0] = i;\n          idx[1] = j;\n        }\n      }\n    }\n    return idx;\n  }\n\n  min() {\n    let v = this.get(0, 0);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        if (this.get(i, j) < v) {\n          v = this.get(i, j);\n        }\n      }\n    }\n    return v;\n  }\n\n  minIndex() {\n    let v = this.get(0, 0);\n    let idx = [0, 0];\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        if (this.get(i, j) < v) {\n          v = this.get(i, j);\n          idx[0] = i;\n          idx[1] = j;\n        }\n      }\n    }\n    return idx;\n  }\n\n  maxRow(row) {\n    checkRowIndex(this, row);\n    let v = this.get(row, 0);\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) > v) {\n        v = this.get(row, i);\n      }\n    }\n    return v;\n  }\n\n  maxRowIndex(row) {\n    checkRowIndex(this, row);\n    let v = this.get(row, 0);\n    let idx = [row, 0];\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) > v) {\n        v = this.get(row, i);\n        idx[1] = i;\n      }\n    }\n    return idx;\n  }\n\n  minRow(row) {\n    checkRowIndex(this, row);\n    let v = this.get(row, 0);\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) < v) {\n        v = this.get(row, i);\n      }\n    }\n    return v;\n  }\n\n  minRowIndex(row) {\n    checkRowIndex(this, row);\n    let v = this.get(row, 0);\n    let idx = [row, 0];\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) < v) {\n        v = this.get(row, i);\n        idx[1] = i;\n      }\n    }\n    return idx;\n  }\n\n  maxColumn(column) {\n    checkColumnIndex(this, column);\n    let v = this.get(0, column);\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) > v) {\n        v = this.get(i, column);\n      }\n    }\n    return v;\n  }\n\n  maxColumnIndex(column) {\n    checkColumnIndex(this, column);\n    let v = this.get(0, column);\n    let idx = [0, column];\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) > v) {\n        v = this.get(i, column);\n        idx[0] = i;\n      }\n    }\n    return idx;\n  }\n\n  minColumn(column) {\n    checkColumnIndex(this, column);\n    let v = this.get(0, column);\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) < v) {\n        v = this.get(i, column);\n      }\n    }\n    return v;\n  }\n\n  minColumnIndex(column) {\n    checkColumnIndex(this, column);\n    let v = this.get(0, column);\n    let idx = [0, column];\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) < v) {\n        v = this.get(i, column);\n        idx[0] = i;\n      }\n    }\n    return idx;\n  }\n\n  diag() {\n    let min = Math.min(this.rows, this.columns);\n    let diag = [];\n    for (let i = 0; i < min; i++) {\n      diag.push(this.get(i, i));\n    }\n    return diag;\n  }\n\n  norm(type = 'frobenius') {\n    let result = 0;\n    if (type === 'max') {\n      return this.max();\n    } else if (type === 'frobenius') {\n      for (let i = 0; i < this.rows; i++) {\n        for (let j = 0; j < this.columns; j++) {\n          result = result + this.get(i, j) * this.get(i, j);\n        }\n      }\n      return Math.sqrt(result);\n    } else {\n      throw new RangeError(`unknown norm type: ${type}`);\n    }\n  }\n\n  cumulativeSum() {\n    let sum = 0;\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        sum += this.get(i, j);\n        this.set(i, j, sum);\n      }\n    }\n    return this;\n  }\n\n  dot(vector2) {\n    if (AbstractMatrix.isMatrix(vector2)) vector2 = vector2.to1DArray();\n    let vector1 = this.to1DArray();\n    if (vector1.length !== vector2.length) {\n      throw new RangeError('vectors do not have the same size');\n    }\n    let dot = 0;\n    for (let i = 0; i < vector1.length; i++) {\n      dot += vector1[i] * vector2[i];\n    }\n    return dot;\n  }\n\n  mmul(other) {\n    other = Matrix.checkMatrix(other);\n\n    let m = this.rows;\n    let n = this.columns;\n    let p = other.columns;\n\n    let result = new Matrix(m, p);\n\n    let Bcolj = new Float64Array(n);\n    for (let j = 0; j < p; j++) {\n      for (let k = 0; k < n; k++) {\n        Bcolj[k] = other.get(k, j);\n      }\n\n      for (let i = 0; i < m; i++) {\n        let s = 0;\n        for (let k = 0; k < n; k++) {\n          s += this.get(i, k) * Bcolj[k];\n        }\n\n        result.set(i, j, s);\n      }\n    }\n    return result;\n  }\n\n  strassen2x2(other) {\n    other = Matrix.checkMatrix(other);\n    let result = new Matrix(2, 2);\n    const a11 = this.get(0, 0);\n    const b11 = other.get(0, 0);\n    const a12 = this.get(0, 1);\n    const b12 = other.get(0, 1);\n    const a21 = this.get(1, 0);\n    const b21 = other.get(1, 0);\n    const a22 = this.get(1, 1);\n    const b22 = other.get(1, 1);\n\n    // Compute intermediate values.\n    const m1 = (a11 + a22) * (b11 + b22);\n    const m2 = (a21 + a22) * b11;\n    const m3 = a11 * (b12 - b22);\n    const m4 = a22 * (b21 - b11);\n    const m5 = (a11 + a12) * b22;\n    const m6 = (a21 - a11) * (b11 + b12);\n    const m7 = (a12 - a22) * (b21 + b22);\n\n    // Combine intermediate values into the output.\n    const c00 = m1 + m4 - m5 + m7;\n    const c01 = m3 + m5;\n    const c10 = m2 + m4;\n    const c11 = m1 - m2 + m3 + m6;\n\n    result.set(0, 0, c00);\n    result.set(0, 1, c01);\n    result.set(1, 0, c10);\n    result.set(1, 1, c11);\n    return result;\n  }\n\n  strassen3x3(other) {\n    other = Matrix.checkMatrix(other);\n    let result = new Matrix(3, 3);\n\n    const a00 = this.get(0, 0);\n    const a01 = this.get(0, 1);\n    const a02 = this.get(0, 2);\n    const a10 = this.get(1, 0);\n    const a11 = this.get(1, 1);\n    const a12 = this.get(1, 2);\n    const a20 = this.get(2, 0);\n    const a21 = this.get(2, 1);\n    const a22 = this.get(2, 2);\n\n    const b00 = other.get(0, 0);\n    const b01 = other.get(0, 1);\n    const b02 = other.get(0, 2);\n    const b10 = other.get(1, 0);\n    const b11 = other.get(1, 1);\n    const b12 = other.get(1, 2);\n    const b20 = other.get(2, 0);\n    const b21 = other.get(2, 1);\n    const b22 = other.get(2, 2);\n\n    const m1 = (a00 + a01 + a02 - a10 - a11 - a21 - a22) * b11;\n    const m2 = (a00 - a10) * (-b01 + b11);\n    const m3 = a11 * (-b00 + b01 + b10 - b11 - b12 - b20 + b22);\n    const m4 = (-a00 + a10 + a11) * (b00 - b01 + b11);\n    const m5 = (a10 + a11) * (-b00 + b01);\n    const m6 = a00 * b00;\n    const m7 = (-a00 + a20 + a21) * (b00 - b02 + b12);\n    const m8 = (-a00 + a20) * (b02 - b12);\n    const m9 = (a20 + a21) * (-b00 + b02);\n    const m10 = (a00 + a01 + a02 - a11 - a12 - a20 - a21) * b12;\n    const m11 = a21 * (-b00 + b02 + b10 - b11 - b12 - b20 + b21);\n    const m12 = (-a02 + a21 + a22) * (b11 + b20 - b21);\n    const m13 = (a02 - a22) * (b11 - b21);\n    const m14 = a02 * b20;\n    const m15 = (a21 + a22) * (-b20 + b21);\n    const m16 = (-a02 + a11 + a12) * (b12 + b20 - b22);\n    const m17 = (a02 - a12) * (b12 - b22);\n    const m18 = (a11 + a12) * (-b20 + b22);\n    const m19 = a01 * b10;\n    const m20 = a12 * b21;\n    const m21 = a10 * b02;\n    const m22 = a20 * b01;\n    const m23 = a22 * b22;\n\n    const c00 = m6 + m14 + m19;\n    const c01 = m1 + m4 + m5 + m6 + m12 + m14 + m15;\n    const c02 = m6 + m7 + m9 + m10 + m14 + m16 + m18;\n    const c10 = m2 + m3 + m4 + m6 + m14 + m16 + m17;\n    const c11 = m2 + m4 + m5 + m6 + m20;\n    const c12 = m14 + m16 + m17 + m18 + m21;\n    const c20 = m6 + m7 + m8 + m11 + m12 + m13 + m14;\n    const c21 = m12 + m13 + m14 + m15 + m22;\n    const c22 = m6 + m7 + m8 + m9 + m23;\n\n    result.set(0, 0, c00);\n    result.set(0, 1, c01);\n    result.set(0, 2, c02);\n    result.set(1, 0, c10);\n    result.set(1, 1, c11);\n    result.set(1, 2, c12);\n    result.set(2, 0, c20);\n    result.set(2, 1, c21);\n    result.set(2, 2, c22);\n    return result;\n  }\n\n  mmulStrassen(y) {\n    y = Matrix.checkMatrix(y);\n    let x = this.clone();\n    let r1 = x.rows;\n    let c1 = x.columns;\n    let r2 = y.rows;\n    let c2 = y.columns;\n    if (c1 !== r2) {\n      // eslint-disable-next-line no-console\n      console.warn(\n        `Multiplying ${r1} x ${c1} and ${r2} x ${c2} matrix: dimensions do not match.`,\n      );\n    }\n\n    // Put a matrix into the top left of a matrix of zeros.\n    // `rows` and `cols` are the dimensions of the output matrix.\n    function embed(mat, rows, cols) {\n      let r = mat.rows;\n      let c = mat.columns;\n      if (r === rows && c === cols) {\n        return mat;\n      } else {\n        let resultat = AbstractMatrix.zeros(rows, cols);\n        resultat = resultat.setSubMatrix(mat, 0, 0);\n        return resultat;\n      }\n    }\n\n    // Make sure both matrices are the same size.\n    // This is exclusively for simplicity:\n    // this algorithm can be implemented with matrices of different sizes.\n\n    let r = Math.max(r1, r2);\n    let c = Math.max(c1, c2);\n    x = embed(x, r, c);\n    y = embed(y, r, c);\n\n    // Our recursive multiplication function.\n    function blockMult(a, b, rows, cols) {\n      // For small matrices, resort to naive multiplication.\n      if (rows <= 512 || cols <= 512) {\n        return a.mmul(b); // a is equivalent to this\n      }\n\n      // Apply dynamic padding.\n      if (rows % 2 === 1 && cols % 2 === 1) {\n        a = embed(a, rows + 1, cols + 1);\n        b = embed(b, rows + 1, cols + 1);\n      } else if (rows % 2 === 1) {\n        a = embed(a, rows + 1, cols);\n        b = embed(b, rows + 1, cols);\n      } else if (cols % 2 === 1) {\n        a = embed(a, rows, cols + 1);\n        b = embed(b, rows, cols + 1);\n      }\n\n      let halfRows = parseInt(a.rows / 2, 10);\n      let halfCols = parseInt(a.columns / 2, 10);\n      // Subdivide input matrices.\n      let a11 = a.subMatrix(0, halfRows - 1, 0, halfCols - 1);\n      let b11 = b.subMatrix(0, halfRows - 1, 0, halfCols - 1);\n\n      let a12 = a.subMatrix(0, halfRows - 1, halfCols, a.columns - 1);\n      let b12 = b.subMatrix(0, halfRows - 1, halfCols, b.columns - 1);\n\n      let a21 = a.subMatrix(halfRows, a.rows - 1, 0, halfCols - 1);\n      let b21 = b.subMatrix(halfRows, b.rows - 1, 0, halfCols - 1);\n\n      let a22 = a.subMatrix(halfRows, a.rows - 1, halfCols, a.columns - 1);\n      let b22 = b.subMatrix(halfRows, b.rows - 1, halfCols, b.columns - 1);\n\n      // Compute intermediate values.\n      let m1 = blockMult(\n        AbstractMatrix.add(a11, a22),\n        AbstractMatrix.add(b11, b22),\n        halfRows,\n        halfCols,\n      );\n      let m2 = blockMult(AbstractMatrix.add(a21, a22), b11, halfRows, halfCols);\n      let m3 = blockMult(a11, AbstractMatrix.sub(b12, b22), halfRows, halfCols);\n      let m4 = blockMult(a22, AbstractMatrix.sub(b21, b11), halfRows, halfCols);\n      let m5 = blockMult(AbstractMatrix.add(a11, a12), b22, halfRows, halfCols);\n      let m6 = blockMult(\n        AbstractMatrix.sub(a21, a11),\n        AbstractMatrix.add(b11, b12),\n        halfRows,\n        halfCols,\n      );\n      let m7 = blockMult(\n        AbstractMatrix.sub(a12, a22),\n        AbstractMatrix.add(b21, b22),\n        halfRows,\n        halfCols,\n      );\n\n      // Combine intermediate values into the output.\n      let c11 = AbstractMatrix.add(m1, m4);\n      c11.sub(m5);\n      c11.add(m7);\n      let c12 = AbstractMatrix.add(m3, m5);\n      let c21 = AbstractMatrix.add(m2, m4);\n      let c22 = AbstractMatrix.sub(m1, m2);\n      c22.add(m3);\n      c22.add(m6);\n\n      // Crop output to the desired size (undo dynamic padding).\n      let resultat = AbstractMatrix.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  scaleRows(options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { min = 0, max = 1 } = options;\n    if (!Number.isFinite(min)) throw new TypeError('min must be a number');\n    if (!Number.isFinite(max)) throw new TypeError('max must be a number');\n    if (min >= max) throw new RangeError('min must be smaller than max');\n    let newMatrix = new Matrix(this.rows, this.columns);\n    for (let i = 0; i < this.rows; i++) {\n      const row = this.getRow(i);\n      rescale(row, { min, max, output: row });\n      newMatrix.setRow(i, row);\n    }\n    return newMatrix;\n  }\n\n  scaleColumns(options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { min = 0, max = 1 } = options;\n    if (!Number.isFinite(min)) throw new TypeError('min must be a number');\n    if (!Number.isFinite(max)) throw new TypeError('max must be a number');\n    if (min >= max) throw new RangeError('min must be smaller than max');\n    let newMatrix = new Matrix(this.rows, this.columns);\n    for (let i = 0; i < this.columns; i++) {\n      const column = this.getColumn(i);\n      rescale(column, {\n        min: min,\n        max: max,\n        output: column,\n      });\n      newMatrix.setColumn(i, column);\n    }\n    return newMatrix;\n  }\n\n  flipRows() {\n    const middle = Math.ceil(this.columns / 2);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < middle; j++) {\n        let first = this.get(i, j);\n        let last = this.get(i, this.columns - 1 - j);\n        this.set(i, j, last);\n        this.set(i, this.columns - 1 - j, first);\n      }\n    }\n    return this;\n  }\n\n  flipColumns() {\n    const middle = Math.ceil(this.rows / 2);\n    for (let j = 0; j < this.columns; j++) {\n      for (let i = 0; i < middle; i++) {\n        let first = this.get(i, j);\n        let last = this.get(this.rows - 1 - i, j);\n        this.set(i, j, last);\n        this.set(this.rows - 1 - i, j, first);\n      }\n    }\n    return this;\n  }\n\n  kroneckerProduct(other) {\n    other = Matrix.checkMatrix(other);\n\n    let m = this.rows;\n    let n = this.columns;\n    let p = other.rows;\n    let q = other.columns;\n\n    let result = new Matrix(m * p, n * q);\n    for (let i = 0; i < m; i++) {\n      for (let j = 0; j < n; j++) {\n        for (let k = 0; k < p; k++) {\n          for (let l = 0; l < q; l++) {\n            result.set(p * i + k, q * j + l, this.get(i, j) * other.get(k, l));\n          }\n        }\n      }\n    }\n    return result;\n  }\n\n  transpose() {\n    let result = new Matrix(this.columns, this.rows);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        result.set(j, i, this.get(i, j));\n      }\n    }\n    return result;\n  }\n\n  sortRows(compareFunction = compareNumbers) {\n    for (let i = 0; i < this.rows; i++) {\n      this.setRow(i, this.getRow(i).sort(compareFunction));\n    }\n    return this;\n  }\n\n  sortColumns(compareFunction = compareNumbers) {\n    for (let i = 0; i < this.columns; i++) {\n      this.setColumn(i, this.getColumn(i).sort(compareFunction));\n    }\n    return this;\n  }\n\n  subMatrix(startRow, endRow, startColumn, endColumn) {\n    checkRange(this, startRow, endRow, startColumn, endColumn);\n    let newMatrix = new Matrix(\n      endRow - startRow + 1,\n      endColumn - startColumn + 1,\n    );\n    for (let i = startRow; i <= endRow; i++) {\n      for (let j = startColumn; j <= endColumn; j++) {\n        newMatrix.set(i - startRow, j - startColumn, this.get(i, j));\n      }\n    }\n    return newMatrix;\n  }\n\n  subMatrixRow(indices, startColumn, endColumn) {\n    if (startColumn === undefined) startColumn = 0;\n    if (endColumn === undefined) endColumn = this.columns - 1;\n    if (\n      startColumn > endColumn ||\n      startColumn < 0 ||\n      startColumn >= this.columns ||\n      endColumn < 0 ||\n      endColumn >= this.columns\n    ) {\n      throw new RangeError('Argument out of range');\n    }\n\n    let newMatrix = new Matrix(indices.length, endColumn - startColumn + 1);\n    for (let i = 0; i < indices.length; i++) {\n      for (let j = startColumn; j <= endColumn; j++) {\n        if (indices[i] < 0 || indices[i] >= this.rows) {\n          throw new RangeError(`Row index out of range: ${indices[i]}`);\n        }\n        newMatrix.set(i, j - startColumn, this.get(indices[i], j));\n      }\n    }\n    return newMatrix;\n  }\n\n  subMatrixColumn(indices, startRow, endRow) {\n    if (startRow === undefined) startRow = 0;\n    if (endRow === undefined) endRow = this.rows - 1;\n    if (\n      startRow > endRow ||\n      startRow < 0 ||\n      startRow >= this.rows ||\n      endRow < 0 ||\n      endRow >= this.rows\n    ) {\n      throw new RangeError('Argument out of range');\n    }\n\n    let newMatrix = new Matrix(endRow - startRow + 1, indices.length);\n    for (let i = 0; i < indices.length; i++) {\n      for (let j = startRow; j <= endRow; j++) {\n        if (indices[i] < 0 || indices[i] >= this.columns) {\n          throw new RangeError(`Column index out of range: ${indices[i]}`);\n        }\n        newMatrix.set(j - startRow, i, this.get(j, indices[i]));\n      }\n    }\n    return newMatrix;\n  }\n\n  setSubMatrix(matrix, startRow, startColumn) {\n    matrix = Matrix.checkMatrix(matrix);\n    let endRow = startRow + matrix.rows - 1;\n    let endColumn = startColumn + matrix.columns - 1;\n    checkRange(this, startRow, endRow, startColumn, endColumn);\n    for (let i = 0; i < matrix.rows; i++) {\n      for (let j = 0; j < matrix.columns; j++) {\n        this.set(startRow + i, startColumn + j, matrix.get(i, j));\n      }\n    }\n    return this;\n  }\n\n  selection(rowIndices, columnIndices) {\n    let indices = checkIndices(this, rowIndices, columnIndices);\n    let newMatrix = new Matrix(rowIndices.length, columnIndices.length);\n    for (let i = 0; i < indices.row.length; i++) {\n      let rowIndex = indices.row[i];\n      for (let j = 0; j < indices.column.length; j++) {\n        let columnIndex = indices.column[j];\n        newMatrix.set(i, j, this.get(rowIndex, columnIndex));\n      }\n    }\n    return newMatrix;\n  }\n\n  trace() {\n    let min = Math.min(this.rows, this.columns);\n    let trace = 0;\n    for (let i = 0; i < min; i++) {\n      trace += this.get(i, i);\n    }\n    return trace;\n  }\n\n  clone() {\n    let newMatrix = new Matrix(this.rows, this.columns);\n    for (let row = 0; row < this.rows; row++) {\n      for (let column = 0; column < this.columns; column++) {\n        newMatrix.set(row, column, this.get(row, column));\n      }\n    }\n    return newMatrix;\n  }\n\n  sum(by) {\n    switch (by) {\n      case 'row':\n        return sumByRow(this);\n      case 'column':\n        return sumByColumn(this);\n      case undefined:\n        return sumAll(this);\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  product(by) {\n    switch (by) {\n      case 'row':\n        return productByRow(this);\n      case 'column':\n        return productByColumn(this);\n      case undefined:\n        return productAll(this);\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  mean(by) {\n    const sum = this.sum(by);\n    switch (by) {\n      case 'row': {\n        for (let i = 0; i < this.rows; i++) {\n          sum[i] /= this.columns;\n        }\n        return sum;\n      }\n      case 'column': {\n        for (let i = 0; i < this.columns; i++) {\n          sum[i] /= this.rows;\n        }\n        return sum;\n      }\n      case undefined:\n        return sum / this.size;\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  variance(by, options = {}) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { unbiased = true, mean = this.mean(by) } = options;\n    if (typeof unbiased !== 'boolean') {\n      throw new TypeError('unbiased must be a boolean');\n    }\n    switch (by) {\n      case 'row': {\n        if (!Array.isArray(mean)) {\n          throw new TypeError('mean must be an array');\n        }\n        return varianceByRow(this, unbiased, mean);\n      }\n      case 'column': {\n        if (!Array.isArray(mean)) {\n          throw new TypeError('mean must be an array');\n        }\n        return varianceByColumn(this, unbiased, mean);\n      }\n      case undefined: {\n        if (typeof mean !== 'number') {\n          throw new TypeError('mean must be a number');\n        }\n        return varianceAll(this, unbiased, mean);\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  standardDeviation(by, options) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    const variance = this.variance(by, options);\n    if (by === undefined) {\n      return Math.sqrt(variance);\n    } else {\n      for (let i = 0; i < variance.length; i++) {\n        variance[i] = Math.sqrt(variance[i]);\n      }\n      return variance;\n    }\n  }\n\n  center(by, options = {}) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { center = this.mean(by) } = options;\n    switch (by) {\n      case 'row': {\n        if (!Array.isArray(center)) {\n          throw new TypeError('center must be an array');\n        }\n        centerByRow(this, center);\n        return this;\n      }\n      case 'column': {\n        if (!Array.isArray(center)) {\n          throw new TypeError('center must be an array');\n        }\n        centerByColumn(this, center);\n        return this;\n      }\n      case undefined: {\n        if (typeof center !== 'number') {\n          throw new TypeError('center must be a number');\n        }\n        centerAll(this, center);\n        return this;\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  scale(by, options = {}) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    let scale = options.scale;\n    switch (by) {\n      case 'row': {\n        if (scale === undefined) {\n          scale = getScaleByRow(this);\n        } else if (!Array.isArray(scale)) {\n          throw new TypeError('scale must be an array');\n        }\n        scaleByRow(this, scale);\n        return this;\n      }\n      case 'column': {\n        if (scale === undefined) {\n          scale = getScaleByColumn(this);\n        } else if (!Array.isArray(scale)) {\n          throw new TypeError('scale must be an array');\n        }\n        scaleByColumn(this, scale);\n        return this;\n      }\n      case undefined: {\n        if (scale === undefined) {\n          scale = getScaleAll(this);\n        } else if (typeof scale !== 'number') {\n          throw new TypeError('scale must be a number');\n        }\n        scaleAll(this, scale);\n        return this;\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  toString(options) {\n    return inspectMatrixWithOptions(this, options);\n  }\n}\n\nAbstractMatrix.prototype.klass = 'Matrix';\nif (typeof Symbol !== 'undefined') {\n  AbstractMatrix.prototype[\n    Symbol.for('nodejs.util.inspect.custom')\n  ] = inspectMatrix;\n}\n\nfunction compareNumbers(a, b) {\n  return a - b;\n}\n\n// Synonyms\nAbstractMatrix.random = AbstractMatrix.rand;\nAbstractMatrix.randomInt = AbstractMatrix.randInt;\nAbstractMatrix.diagonal = AbstractMatrix.diag;\nAbstractMatrix.prototype.diagonal = AbstractMatrix.prototype.diag;\nAbstractMatrix.identity = AbstractMatrix.eye;\nAbstractMatrix.prototype.negate = AbstractMatrix.prototype.neg;\nAbstractMatrix.prototype.tensorProduct =\n  AbstractMatrix.prototype.kroneckerProduct;\n\nexport default class Matrix extends AbstractMatrix {\n  constructor(nRows, nColumns) {\n    super();\n    if (Matrix.isMatrix(nRows)) {\n      return nRows.clone();\n    } else if (Number.isInteger(nRows) && nRows > 0) {\n      // Create an empty matrix\n      this.data = [];\n      if (Number.isInteger(nColumns) && nColumns > 0) {\n        for (let i = 0; i < nRows; i++) {\n          this.data.push(new Float64Array(nColumns));\n        }\n      } else {\n        throw new TypeError('nColumns must be a positive integer');\n      }\n    } else if (Array.isArray(nRows)) {\n      // Copy the values from the 2D array\n      const arrayData = nRows;\n      nRows = arrayData.length;\n      nColumns = arrayData[0].length;\n      if (typeof nColumns !== 'number' || nColumns === 0) {\n        throw new TypeError(\n          'Data must be a 2D array with at least one element',\n        );\n      }\n      this.data = [];\n      for (let i = 0; i < nRows; i++) {\n        if (arrayData[i].length !== nColumns) {\n          throw new RangeError('Inconsistent array dimensions');\n        }\n        this.data.push(Float64Array.from(arrayData[i]));\n      }\n    } else {\n      throw new TypeError(\n        'First argument must be a positive number or an array',\n      );\n    }\n    this.rows = nRows;\n    this.columns = nColumns;\n    return this;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.data[rowIndex][columnIndex] = value;\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.data[rowIndex][columnIndex];\n  }\n\n  removeRow(index) {\n    checkRowIndex(this, index);\n    if (this.rows === 1) {\n      throw new RangeError('A matrix cannot have less than one row');\n    }\n    this.data.splice(index, 1);\n    this.rows -= 1;\n    return this;\n  }\n\n  addRow(index, array) {\n    if (array === undefined) {\n      array = index;\n      index = this.rows;\n    }\n    checkRowIndex(this, index, true);\n    array = Float64Array.from(checkRowVector(this, array, true));\n    this.data.splice(index, 0, array);\n    this.rows += 1;\n    return this;\n  }\n\n  removeColumn(index) {\n    checkColumnIndex(this, index);\n    if (this.columns === 1) {\n      throw new RangeError('A matrix cannot have less than one column');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      const newRow = new Float64Array(this.columns - 1);\n      for (let j = 0; j < index; j++) {\n        newRow[j] = this.data[i][j];\n      }\n      for (let j = index + 1; j < this.columns; j++) {\n        newRow[j - 1] = this.data[i][j];\n      }\n      this.data[i] = newRow;\n    }\n    this.columns -= 1;\n    return this;\n  }\n\n  addColumn(index, array) {\n    if (typeof array === 'undefined') {\n      array = index;\n      index = this.columns;\n    }\n    checkColumnIndex(this, index, true);\n    array = checkColumnVector(this, array);\n    for (let i = 0; i < this.rows; i++) {\n      const newRow = new Float64Array(this.columns + 1);\n      let j = 0;\n      for (; j < index; j++) {\n        newRow[j] = this.data[i][j];\n      }\n      newRow[j++] = array[i];\n      for (; j < this.columns + 1; j++) {\n        newRow[j] = this.data[i][j - 1];\n      }\n      this.data[i] = newRow;\n    }\n    this.columns += 1;\n    return this;\n  }\n}\n\ninstallMathOperations(AbstractMatrix, Matrix);\n","import { newArray } from './util';\n\nexport function sumByRow(matrix) {\n  let sum = newArray(matrix.rows);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[i] += matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nexport function sumByColumn(matrix) {\n  let sum = newArray(matrix.columns);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[j] += matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nexport function sumAll(matrix) {\n  let v = 0;\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      v += matrix.get(i, j);\n    }\n  }\n  return v;\n}\n\nexport function productByRow(matrix) {\n  let sum = newArray(matrix.rows, 1);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[i] *= matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nexport function productByColumn(matrix) {\n  let sum = newArray(matrix.columns, 1);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[j] *= matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nexport function productAll(matrix) {\n  let v = 1;\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      v *= matrix.get(i, j);\n    }\n  }\n  return v;\n}\n\nexport function varianceByRow(matrix, unbiased, mean) {\n  const rows = matrix.rows;\n  const cols = matrix.columns;\n  const variance = [];\n\n  for (let i = 0; i < rows; i++) {\n    let sum1 = 0;\n    let sum2 = 0;\n    let x = 0;\n    for (let j = 0; j < cols; j++) {\n      x = matrix.get(i, j) - mean[i];\n      sum1 += x;\n      sum2 += x * x;\n    }\n    if (unbiased) {\n      variance.push((sum2 - (sum1 * sum1) / cols) / (cols - 1));\n    } else {\n      variance.push((sum2 - (sum1 * sum1) / cols) / cols);\n    }\n  }\n  return variance;\n}\n\nexport function varianceByColumn(matrix, unbiased, mean) {\n  const rows = matrix.rows;\n  const cols = matrix.columns;\n  const variance = [];\n\n  for (let j = 0; j < cols; j++) {\n    let sum1 = 0;\n    let sum2 = 0;\n    let x = 0;\n    for (let i = 0; i < rows; i++) {\n      x = matrix.get(i, j) - mean[j];\n      sum1 += x;\n      sum2 += x * x;\n    }\n    if (unbiased) {\n      variance.push((sum2 - (sum1 * sum1) / rows) / (rows - 1));\n    } else {\n      variance.push((sum2 - (sum1 * sum1) / rows) / rows);\n    }\n  }\n  return variance;\n}\n\nexport function varianceAll(matrix, unbiased, mean) {\n  const rows = matrix.rows;\n  const cols = matrix.columns;\n  const size = rows * cols;\n\n  let sum1 = 0;\n  let sum2 = 0;\n  let x = 0;\n  for (let i = 0; i < rows; i++) {\n    for (let j = 0; j < cols; j++) {\n      x = matrix.get(i, j) - mean;\n      sum1 += x;\n      sum2 += x * x;\n    }\n  }\n  if (unbiased) {\n    return (sum2 - (sum1 * sum1) / size) / (size - 1);\n  } else {\n    return (sum2 - (sum1 * sum1) / size) / size;\n  }\n}\n\nexport function centerByRow(matrix, mean) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) - mean[i]);\n    }\n  }\n}\n\nexport function centerByColumn(matrix, mean) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) - mean[j]);\n    }\n  }\n}\n\nexport function centerAll(matrix, mean) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) - mean);\n    }\n  }\n}\n\nexport function getScaleByRow(matrix) {\n  const scale = [];\n  for (let i = 0; i < matrix.rows; i++) {\n    let sum = 0;\n    for (let j = 0; j < matrix.columns; j++) {\n      sum += Math.pow(matrix.get(i, j), 2) / (matrix.columns - 1);\n    }\n    scale.push(Math.sqrt(sum));\n  }\n  return scale;\n}\n\nexport function scaleByRow(matrix, scale) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) / scale[i]);\n    }\n  }\n}\n\nexport function getScaleByColumn(matrix) {\n  const scale = [];\n  for (let j = 0; j < matrix.columns; j++) {\n    let sum = 0;\n    for (let i = 0; i < matrix.rows; i++) {\n      sum += Math.pow(matrix.get(i, j), 2) / (matrix.rows - 1);\n    }\n    scale.push(Math.sqrt(sum));\n  }\n  return scale;\n}\n\nexport function scaleByColumn(matrix, scale) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) / scale[j]);\n    }\n  }\n}\n\nexport function getScaleAll(matrix) {\n  const divider = matrix.size - 1;\n  let sum = 0;\n  for (let j = 0; j < matrix.columns; j++) {\n    for (let i = 0; i < matrix.rows; i++) {\n      sum += Math.pow(matrix.get(i, j), 2) / divider;\n    }\n  }\n  return Math.sqrt(sum);\n}\n\nexport function scaleAll(matrix, scale) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) / scale);\n    }\n  }\n}\n","export function installMathOperations(AbstractMatrix, Matrix) {\r\n  AbstractMatrix.prototype.add = function add(value) {\r\n    if (typeof value === 'number') return this.addS(value);\r\n    return this.addM(value);\r\n  };\r\n\r\n  AbstractMatrix.prototype.addS = function addS(value) {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, this.get(i, j) + value);\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.prototype.addM = function addM(matrix) {\r\n    matrix = Matrix.checkMatrix(matrix);\r\n    if (this.rows !== matrix.rows ||\r\n      this.columns !== matrix.columns) {\r\n      throw new RangeError('Matrices dimensions must be equal');\r\n    }\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, this.get(i, j) + matrix.get(i, j));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.add = function add(matrix, value) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.add(value);\r\n  };\r\n\r\n  AbstractMatrix.prototype.sub = function sub(value) {\r\n    if (typeof value === 'number') return this.subS(value);\r\n    return this.subM(value);\r\n  };\r\n\r\n  AbstractMatrix.prototype.subS = function subS(value) {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, this.get(i, j) - value);\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.prototype.subM = function subM(matrix) {\r\n    matrix = Matrix.checkMatrix(matrix);\r\n    if (this.rows !== matrix.rows ||\r\n      this.columns !== matrix.columns) {\r\n      throw new RangeError('Matrices dimensions must be equal');\r\n    }\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, this.get(i, j) - matrix.get(i, j));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.sub = function sub(matrix, value) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.sub(value);\r\n  };\r\n  AbstractMatrix.prototype.subtract = AbstractMatrix.prototype.sub;\r\n  AbstractMatrix.prototype.subtractS = AbstractMatrix.prototype.subS;\r\n  AbstractMatrix.prototype.subtractM = AbstractMatrix.prototype.subM;\r\n  AbstractMatrix.subtract = AbstractMatrix.sub;\r\n\r\n  AbstractMatrix.prototype.mul = function mul(value) {\r\n    if (typeof value === 'number') return this.mulS(value);\r\n    return this.mulM(value);\r\n  };\r\n\r\n  AbstractMatrix.prototype.mulS = function mulS(value) {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, this.get(i, j) * value);\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.prototype.mulM = function mulM(matrix) {\r\n    matrix = Matrix.checkMatrix(matrix);\r\n    if (this.rows !== matrix.rows ||\r\n      this.columns !== matrix.columns) {\r\n      throw new RangeError('Matrices dimensions must be equal');\r\n    }\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, this.get(i, j) * matrix.get(i, j));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.mul = function mul(matrix, value) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.mul(value);\r\n  };\r\n  AbstractMatrix.prototype.multiply = AbstractMatrix.prototype.mul;\r\n  AbstractMatrix.prototype.multiplyS = AbstractMatrix.prototype.mulS;\r\n  AbstractMatrix.prototype.multiplyM = AbstractMatrix.prototype.mulM;\r\n  AbstractMatrix.multiply = AbstractMatrix.mul;\r\n\r\n  AbstractMatrix.prototype.div = function div(value) {\r\n    if (typeof value === 'number') return this.divS(value);\r\n    return this.divM(value);\r\n  };\r\n\r\n  AbstractMatrix.prototype.divS = function divS(value) {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, this.get(i, j) / value);\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.prototype.divM = function divM(matrix) {\r\n    matrix = Matrix.checkMatrix(matrix);\r\n    if (this.rows !== matrix.rows ||\r\n      this.columns !== matrix.columns) {\r\n      throw new RangeError('Matrices dimensions must be equal');\r\n    }\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, this.get(i, j) / matrix.get(i, j));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.div = function div(matrix, value) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.div(value);\r\n  };\r\n  AbstractMatrix.prototype.divide = AbstractMatrix.prototype.div;\r\n  AbstractMatrix.prototype.divideS = AbstractMatrix.prototype.divS;\r\n  AbstractMatrix.prototype.divideM = AbstractMatrix.prototype.divM;\r\n  AbstractMatrix.divide = AbstractMatrix.div;\r\n\r\n  AbstractMatrix.prototype.mod = function mod(value) {\r\n    if (typeof value === 'number') return this.modS(value);\r\n    return this.modM(value);\r\n  };\r\n\r\n  AbstractMatrix.prototype.modS = function modS(value) {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, this.get(i, j) % value);\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.prototype.modM = function modM(matrix) {\r\n    matrix = Matrix.checkMatrix(matrix);\r\n    if (this.rows !== matrix.rows ||\r\n      this.columns !== matrix.columns) {\r\n      throw new RangeError('Matrices dimensions must be equal');\r\n    }\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, this.get(i, j) % matrix.get(i, j));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.mod = function mod(matrix, value) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.mod(value);\r\n  };\r\n  AbstractMatrix.prototype.modulus = AbstractMatrix.prototype.mod;\r\n  AbstractMatrix.prototype.modulusS = AbstractMatrix.prototype.modS;\r\n  AbstractMatrix.prototype.modulusM = AbstractMatrix.prototype.modM;\r\n  AbstractMatrix.modulus = AbstractMatrix.mod;\r\n\r\n  AbstractMatrix.prototype.and = function and(value) {\r\n    if (typeof value === 'number') return this.andS(value);\r\n    return this.andM(value);\r\n  };\r\n\r\n  AbstractMatrix.prototype.andS = function andS(value) {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, this.get(i, j) & value);\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.prototype.andM = function andM(matrix) {\r\n    matrix = Matrix.checkMatrix(matrix);\r\n    if (this.rows !== matrix.rows ||\r\n      this.columns !== matrix.columns) {\r\n      throw new RangeError('Matrices dimensions must be equal');\r\n    }\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, this.get(i, j) & matrix.get(i, j));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.and = function and(matrix, value) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.and(value);\r\n  };\r\n\r\n  AbstractMatrix.prototype.or = function or(value) {\r\n    if (typeof value === 'number') return this.orS(value);\r\n    return this.orM(value);\r\n  };\r\n\r\n  AbstractMatrix.prototype.orS = function orS(value) {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, this.get(i, j) | value);\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.prototype.orM = function orM(matrix) {\r\n    matrix = Matrix.checkMatrix(matrix);\r\n    if (this.rows !== matrix.rows ||\r\n      this.columns !== matrix.columns) {\r\n      throw new RangeError('Matrices dimensions must be equal');\r\n    }\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, this.get(i, j) | matrix.get(i, j));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.or = function or(matrix, value) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.or(value);\r\n  };\r\n\r\n  AbstractMatrix.prototype.xor = function xor(value) {\r\n    if (typeof value === 'number') return this.xorS(value);\r\n    return this.xorM(value);\r\n  };\r\n\r\n  AbstractMatrix.prototype.xorS = function xorS(value) {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, this.get(i, j) ^ value);\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.prototype.xorM = function xorM(matrix) {\r\n    matrix = Matrix.checkMatrix(matrix);\r\n    if (this.rows !== matrix.rows ||\r\n      this.columns !== matrix.columns) {\r\n      throw new RangeError('Matrices dimensions must be equal');\r\n    }\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, this.get(i, j) ^ matrix.get(i, j));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.xor = function xor(matrix, value) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.xor(value);\r\n  };\r\n\r\n  AbstractMatrix.prototype.leftShift = function leftShift(value) {\r\n    if (typeof value === 'number') return this.leftShiftS(value);\r\n    return this.leftShiftM(value);\r\n  };\r\n\r\n  AbstractMatrix.prototype.leftShiftS = function leftShiftS(value) {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, this.get(i, j) << value);\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.prototype.leftShiftM = function leftShiftM(matrix) {\r\n    matrix = Matrix.checkMatrix(matrix);\r\n    if (this.rows !== matrix.rows ||\r\n      this.columns !== matrix.columns) {\r\n      throw new RangeError('Matrices dimensions must be equal');\r\n    }\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, this.get(i, j) << matrix.get(i, j));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.leftShift = function leftShift(matrix, value) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.leftShift(value);\r\n  };\r\n\r\n  AbstractMatrix.prototype.signPropagatingRightShift = function signPropagatingRightShift(value) {\r\n    if (typeof value === 'number') return this.signPropagatingRightShiftS(value);\r\n    return this.signPropagatingRightShiftM(value);\r\n  };\r\n\r\n  AbstractMatrix.prototype.signPropagatingRightShiftS = function signPropagatingRightShiftS(value) {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, this.get(i, j) >> value);\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.prototype.signPropagatingRightShiftM = function signPropagatingRightShiftM(matrix) {\r\n    matrix = Matrix.checkMatrix(matrix);\r\n    if (this.rows !== matrix.rows ||\r\n      this.columns !== matrix.columns) {\r\n      throw new RangeError('Matrices dimensions must be equal');\r\n    }\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, this.get(i, j) >> matrix.get(i, j));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.signPropagatingRightShift = function signPropagatingRightShift(matrix, value) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.signPropagatingRightShift(value);\r\n  };\r\n\r\n  AbstractMatrix.prototype.rightShift = function rightShift(value) {\r\n    if (typeof value === 'number') return this.rightShiftS(value);\r\n    return this.rightShiftM(value);\r\n  };\r\n\r\n  AbstractMatrix.prototype.rightShiftS = function rightShiftS(value) {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, this.get(i, j) >>> value);\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.prototype.rightShiftM = function rightShiftM(matrix) {\r\n    matrix = Matrix.checkMatrix(matrix);\r\n    if (this.rows !== matrix.rows ||\r\n      this.columns !== matrix.columns) {\r\n      throw new RangeError('Matrices dimensions must be equal');\r\n    }\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, this.get(i, j) >>> matrix.get(i, j));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.rightShift = function rightShift(matrix, value) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.rightShift(value);\r\n  };\r\n  AbstractMatrix.prototype.zeroFillRightShift = AbstractMatrix.prototype.rightShift;\r\n  AbstractMatrix.prototype.zeroFillRightShiftS = AbstractMatrix.prototype.rightShiftS;\r\n  AbstractMatrix.prototype.zeroFillRightShiftM = AbstractMatrix.prototype.rightShiftM;\r\n  AbstractMatrix.zeroFillRightShift = AbstractMatrix.rightShift;\r\n\r\n  AbstractMatrix.prototype.not = function not() {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, ~(this.get(i, j)));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.not = function not(matrix) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.not();\r\n  };\r\n\r\n  AbstractMatrix.prototype.abs = function abs() {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, Math.abs(this.get(i, j)));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.abs = function abs(matrix) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.abs();\r\n  };\r\n\r\n  AbstractMatrix.prototype.acos = function acos() {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, Math.acos(this.get(i, j)));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.acos = function acos(matrix) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.acos();\r\n  };\r\n\r\n  AbstractMatrix.prototype.acosh = function acosh() {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, Math.acosh(this.get(i, j)));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.acosh = function acosh(matrix) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.acosh();\r\n  };\r\n\r\n  AbstractMatrix.prototype.asin = function asin() {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, Math.asin(this.get(i, j)));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.asin = function asin(matrix) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.asin();\r\n  };\r\n\r\n  AbstractMatrix.prototype.asinh = function asinh() {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, Math.asinh(this.get(i, j)));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.asinh = function asinh(matrix) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.asinh();\r\n  };\r\n\r\n  AbstractMatrix.prototype.atan = function atan() {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, Math.atan(this.get(i, j)));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.atan = function atan(matrix) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.atan();\r\n  };\r\n\r\n  AbstractMatrix.prototype.atanh = function atanh() {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, Math.atanh(this.get(i, j)));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.atanh = function atanh(matrix) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.atanh();\r\n  };\r\n\r\n  AbstractMatrix.prototype.cbrt = function cbrt() {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, Math.cbrt(this.get(i, j)));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.cbrt = function cbrt(matrix) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.cbrt();\r\n  };\r\n\r\n  AbstractMatrix.prototype.ceil = function ceil() {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, Math.ceil(this.get(i, j)));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.ceil = function ceil(matrix) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.ceil();\r\n  };\r\n\r\n  AbstractMatrix.prototype.clz32 = function clz32() {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, Math.clz32(this.get(i, j)));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.clz32 = function clz32(matrix) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.clz32();\r\n  };\r\n\r\n  AbstractMatrix.prototype.cos = function cos() {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, Math.cos(this.get(i, j)));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.cos = function cos(matrix) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.cos();\r\n  };\r\n\r\n  AbstractMatrix.prototype.cosh = function cosh() {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, Math.cosh(this.get(i, j)));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.cosh = function cosh(matrix) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.cosh();\r\n  };\r\n\r\n  AbstractMatrix.prototype.exp = function exp() {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, Math.exp(this.get(i, j)));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.exp = function exp(matrix) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.exp();\r\n  };\r\n\r\n  AbstractMatrix.prototype.expm1 = function expm1() {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, Math.expm1(this.get(i, j)));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.expm1 = function expm1(matrix) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.expm1();\r\n  };\r\n\r\n  AbstractMatrix.prototype.floor = function floor() {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, Math.floor(this.get(i, j)));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.floor = function floor(matrix) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.floor();\r\n  };\r\n\r\n  AbstractMatrix.prototype.fround = function fround() {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, Math.fround(this.get(i, j)));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.fround = function fround(matrix) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.fround();\r\n  };\r\n\r\n  AbstractMatrix.prototype.log = function log() {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, Math.log(this.get(i, j)));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.log = function log(matrix) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.log();\r\n  };\r\n\r\n  AbstractMatrix.prototype.log1p = function log1p() {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, Math.log1p(this.get(i, j)));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.log1p = function log1p(matrix) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.log1p();\r\n  };\r\n\r\n  AbstractMatrix.prototype.log10 = function log10() {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, Math.log10(this.get(i, j)));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.log10 = function log10(matrix) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.log10();\r\n  };\r\n\r\n  AbstractMatrix.prototype.log2 = function log2() {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, Math.log2(this.get(i, j)));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.log2 = function log2(matrix) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.log2();\r\n  };\r\n\r\n  AbstractMatrix.prototype.round = function round() {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, Math.round(this.get(i, j)));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.round = function round(matrix) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.round();\r\n  };\r\n\r\n  AbstractMatrix.prototype.sign = function sign() {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, Math.sign(this.get(i, j)));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.sign = function sign(matrix) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.sign();\r\n  };\r\n\r\n  AbstractMatrix.prototype.sin = function sin() {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, Math.sin(this.get(i, j)));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.sin = function sin(matrix) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.sin();\r\n  };\r\n\r\n  AbstractMatrix.prototype.sinh = function sinh() {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, Math.sinh(this.get(i, j)));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.sinh = function sinh(matrix) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.sinh();\r\n  };\r\n\r\n  AbstractMatrix.prototype.sqrt = function sqrt() {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, Math.sqrt(this.get(i, j)));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.sqrt = function sqrt(matrix) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.sqrt();\r\n  };\r\n\r\n  AbstractMatrix.prototype.tan = function tan() {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, Math.tan(this.get(i, j)));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.tan = function tan(matrix) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.tan();\r\n  };\r\n\r\n  AbstractMatrix.prototype.tanh = function tanh() {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, Math.tanh(this.get(i, j)));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.tanh = function tanh(matrix) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.tanh();\r\n  };\r\n\r\n  AbstractMatrix.prototype.trunc = function trunc() {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, Math.trunc(this.get(i, j)));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.trunc = function trunc(matrix) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.trunc();\r\n  };\r\n\r\n  AbstractMatrix.pow = function pow(matrix, arg0) {\r\n    const newMatrix = new Matrix(matrix);\r\n    return newMatrix.pow(arg0);\r\n  };\r\n\r\n  AbstractMatrix.prototype.pow = function pow(value) {\r\n    if (typeof value === 'number') return this.powS(value);\r\n    return this.powM(value);\r\n  };\r\n\r\n  AbstractMatrix.prototype.powS = function powS(value) {\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, Math.pow(this.get(i, j), value));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n\r\n  AbstractMatrix.prototype.powM = function powM(matrix) {\r\n    matrix = Matrix.checkMatrix(matrix);\r\n    if (this.rows !== matrix.rows ||\r\n      this.columns !== matrix.columns) {\r\n      throw new RangeError('Matrices dimensions must be equal');\r\n    }\r\n    for (let i = 0; i < this.rows; i++) {\r\n      for (let j = 0; j < this.columns; j++) {\r\n        this.set(i, j, Math.pow(this.get(i, j), matrix.get(i, j)));\r\n      }\r\n    }\r\n    return this;\r\n  };\r\n}\r\n","import { AbstractMatrix } from '../matrix';\n\nexport default class 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","import BaseView from './base';\n\nexport default class MatrixTransposeView extends BaseView {\n  constructor(matrix) {\n    super(matrix, matrix.columns, matrix.rows);\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(columnIndex, rowIndex, value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(columnIndex, rowIndex);\n  }\n}\n","import { AbstractMatrix } from '../matrix';\n\nexport default class WrapperMatrix2D extends AbstractMatrix {\n  constructor(data) {\n    super();\n    this.data = data;\n    this.rows = data.length;\n    this.columns = data[0].length;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.data[rowIndex][columnIndex] = value;\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.data[rowIndex][columnIndex];\n  }\n}\n","import Matrix from '../matrix';\nimport WrapperMatrix2D from '../wrap/WrapperMatrix2D';\n\nexport default class LuDecomposition {\n  constructor(matrix) {\n    matrix = WrapperMatrix2D.checkMatrix(matrix);\n\n    let lu = matrix.clone();\n    let rows = lu.rows;\n    let columns = lu.columns;\n    let pivotVector = new Float64Array(rows);\n    let pivotSign = 1;\n    let i, j, k, p, s, t, v;\n    let LUcolj, kmax;\n\n    for (i = 0; i < rows; i++) {\n      pivotVector[i] = i;\n    }\n\n    LUcolj = new Float64Array(rows);\n\n    for (j = 0; j < columns; j++) {\n      for (i = 0; i < rows; i++) {\n        LUcolj[i] = lu.get(i, j);\n      }\n\n      for (i = 0; i < rows; i++) {\n        kmax = Math.min(i, j);\n        s = 0;\n        for (k = 0; k < kmax; k++) {\n          s += lu.get(i, k) * LUcolj[k];\n        }\n        LUcolj[i] -= s;\n        lu.set(i, j, LUcolj[i]);\n      }\n\n      p = j;\n      for (i = j + 1; i < rows; i++) {\n        if (Math.abs(LUcolj[i]) > Math.abs(LUcolj[p])) {\n          p = i;\n        }\n      }\n\n      if (p !== j) {\n        for (k = 0; k < columns; k++) {\n          t = lu.get(p, k);\n          lu.set(p, k, lu.get(j, k));\n          lu.set(j, k, t);\n        }\n\n        v = pivotVector[p];\n        pivotVector[p] = pivotVector[j];\n        pivotVector[j] = v;\n\n        pivotSign = -pivotSign;\n      }\n\n      if (j < rows && lu.get(j, j) !== 0) {\n        for (i = j + 1; i < rows; i++) {\n          lu.set(i, j, lu.get(i, j) / lu.get(j, j));\n        }\n      }\n    }\n\n    this.LU = lu;\n    this.pivotVector = pivotVector;\n    this.pivotSign = pivotSign;\n  }\n\n  isSingular() {\n    let data = this.LU;\n    let col = data.columns;\n    for (let j = 0; j < col; j++) {\n      if (data.get(j, j) === 0) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  solve(value) {\n    value = Matrix.checkMatrix(value);\n\n    let lu = this.LU;\n    let rows = lu.rows;\n\n    if (rows !== value.rows) {\n      throw new Error('Invalid matrix dimensions');\n    }\n    if (this.isSingular()) {\n      throw new Error('LU matrix is singular');\n    }\n\n    let count = value.columns;\n    let X = value.subMatrixRow(this.pivotVector, 0, count - 1);\n    let columns = lu.columns;\n    let i, j, k;\n\n    for (k = 0; k < columns; k++) {\n      for (i = k + 1; i < columns; i++) {\n        for (j = 0; j < count; j++) {\n          X.set(i, j, X.get(i, j) - X.get(k, j) * lu.get(i, k));\n        }\n      }\n    }\n    for (k = columns - 1; k >= 0; k--) {\n      for (j = 0; j < count; j++) {\n        X.set(k, j, X.get(k, j) / lu.get(k, k));\n      }\n      for (i = 0; i < k; i++) {\n        for (j = 0; j < count; j++) {\n          X.set(i, j, X.get(i, j) - X.get(k, j) * lu.get(i, k));\n        }\n      }\n    }\n    return X;\n  }\n\n  get determinant() {\n    let data = this.LU;\n    if (!data.isSquare()) {\n      throw new Error('Matrix must be square');\n    }\n    let determinant = this.pivotSign;\n    let col = data.columns;\n    for (let j = 0; j < col; j++) {\n      determinant *= data.get(j, j);\n    }\n    return determinant;\n  }\n\n  get lowerTriangularMatrix() {\n    let data = this.LU;\n    let rows = data.rows;\n    let columns = data.columns;\n    let X = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        if (i > j) {\n          X.set(i, j, data.get(i, j));\n        } else if (i === j) {\n          X.set(i, j, 1);\n        } else {\n          X.set(i, j, 0);\n        }\n      }\n    }\n    return X;\n  }\n\n  get upperTriangularMatrix() {\n    let data = this.LU;\n    let rows = data.rows;\n    let columns = data.columns;\n    let X = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        if (i <= j) {\n          X.set(i, j, data.get(i, j));\n        } else {\n          X.set(i, j, 0);\n        }\n      }\n    }\n    return X;\n  }\n\n  get pivotPermutationVector() {\n    return Array.from(this.pivotVector);\n  }\n}\n","export function hypotenuse(a, b) {\n  let r = 0;\n  if (Math.abs(a) > Math.abs(b)) {\n    r = b / a;\n    return Math.abs(a) * Math.sqrt(1 + r * r);\n  }\n  if (b !== 0) {\n    r = a / b;\n    return Math.abs(b) * Math.sqrt(1 + r * r);\n  }\n  return 0;\n}\n","import Matrix from '../matrix';\nimport WrapperMatrix2D from '../wrap/WrapperMatrix2D';\n\nimport { hypotenuse } from './util';\n\nexport default class QrDecomposition {\n  constructor(value) {\n    value = WrapperMatrix2D.checkMatrix(value);\n\n    let qr = value.clone();\n    let m = value.rows;\n    let n = value.columns;\n    let rdiag = new Float64Array(n);\n    let i, j, k, s;\n\n    for (k = 0; k < n; k++) {\n      let nrm = 0;\n      for (i = k; i < m; i++) {\n        nrm = hypotenuse(nrm, qr.get(i, k));\n      }\n      if (nrm !== 0) {\n        if (qr.get(k, k) < 0) {\n          nrm = -nrm;\n        }\n        for (i = k; i < m; i++) {\n          qr.set(i, k, qr.get(i, k) / nrm);\n        }\n        qr.set(k, k, qr.get(k, k) + 1);\n        for (j = k + 1; j < n; j++) {\n          s = 0;\n          for (i = k; i < m; i++) {\n            s += qr.get(i, k) * qr.get(i, j);\n          }\n          s = -s / qr.get(k, k);\n          for (i = k; i < m; i++) {\n            qr.set(i, j, qr.get(i, j) + s * qr.get(i, k));\n          }\n        }\n      }\n      rdiag[k] = -nrm;\n    }\n\n    this.QR = qr;\n    this.Rdiag = rdiag;\n  }\n\n  solve(value) {\n    value = Matrix.checkMatrix(value);\n\n    let qr = this.QR;\n    let m = qr.rows;\n\n    if (value.rows !== m) {\n      throw new Error('Matrix row dimensions must agree');\n    }\n    if (!this.isFullRank()) {\n      throw new Error('Matrix is rank deficient');\n    }\n\n    let count = value.columns;\n    let X = value.clone();\n    let n = qr.columns;\n    let i, j, k, s;\n\n    for (k = 0; k < n; k++) {\n      for (j = 0; j < count; j++) {\n        s = 0;\n        for (i = k; i < m; i++) {\n          s += qr.get(i, k) * X.get(i, j);\n        }\n        s = -s / qr.get(k, k);\n        for (i = k; i < m; i++) {\n          X.set(i, j, X.get(i, j) + s * qr.get(i, k));\n        }\n      }\n    }\n    for (k = n - 1; k >= 0; k--) {\n      for (j = 0; j < count; j++) {\n        X.set(k, j, X.get(k, j) / this.Rdiag[k]);\n      }\n      for (i = 0; i < k; i++) {\n        for (j = 0; j < count; j++) {\n          X.set(i, j, X.get(i, j) - X.get(k, j) * qr.get(i, k));\n        }\n      }\n    }\n\n    return X.subMatrix(0, n - 1, 0, count - 1);\n  }\n\n  isFullRank() {\n    let columns = this.QR.columns;\n    for (let i = 0; i < columns; i++) {\n      if (this.Rdiag[i] === 0) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  get upperTriangularMatrix() {\n    let qr = this.QR;\n    let n = qr.columns;\n    let X = new Matrix(n, n);\n    let i, j;\n    for (i = 0; i < n; i++) {\n      for (j = 0; j < n; j++) {\n        if (i < j) {\n          X.set(i, j, qr.get(i, j));\n        } else if (i === j) {\n          X.set(i, j, this.Rdiag[i]);\n        } else {\n          X.set(i, j, 0);\n        }\n      }\n    }\n    return X;\n  }\n\n  get orthogonalMatrix() {\n    let qr = this.QR;\n    let rows = qr.rows;\n    let columns = qr.columns;\n    let X = new Matrix(rows, columns);\n    let i, j, k, s;\n\n    for (k = columns - 1; k >= 0; k--) {\n      for (i = 0; i < rows; i++) {\n        X.set(i, k, 0);\n      }\n      X.set(k, k, 1);\n      for (j = k; j < columns; j++) {\n        if (qr.get(k, k) !== 0) {\n          s = 0;\n          for (i = k; i < rows; i++) {\n            s += qr.get(i, k) * X.get(i, j);\n          }\n\n          s = -s / qr.get(k, k);\n\n          for (i = k; i < rows; i++) {\n            X.set(i, j, X.get(i, j) + s * qr.get(i, k));\n          }\n        }\n      }\n    }\n    return X;\n  }\n}\n","import Matrix from '../matrix';\nimport WrapperMatrix2D from '../wrap/WrapperMatrix2D';\n\nimport { hypotenuse } from './util';\n\nexport default class SingularValueDecomposition {\n  constructor(value, options = {}) {\n    value = WrapperMatrix2D.checkMatrix(value);\n\n    let m = value.rows;\n    let n = value.columns;\n\n    const {\n      computeLeftSingularVectors = true,\n      computeRightSingularVectors = true,\n      autoTranspose = false,\n    } = options;\n\n    let wantu = Boolean(computeLeftSingularVectors);\n    let wantv = Boolean(computeRightSingularVectors);\n\n    let swapped = false;\n    let a;\n    if (m < n) {\n      if (!autoTranspose) {\n        a = value.clone();\n        // eslint-disable-next-line no-console\n        console.warn(\n          'Computing SVD on a matrix with more columns than rows. Consider enabling autoTranspose',\n        );\n      } else {\n        a = value.transpose();\n        m = a.rows;\n        n = a.columns;\n        swapped = true;\n        let aux = wantu;\n        wantu = wantv;\n        wantv = aux;\n      }\n    } else {\n      a = value.clone();\n    }\n\n    let nu = Math.min(m, n);\n    let ni = Math.min(m + 1, n);\n    let s = new Float64Array(ni);\n    let U = new Matrix(m, nu);\n    let V = new Matrix(n, n);\n\n    let e = new Float64Array(n);\n    let work = new Float64Array(m);\n\n    let si = new Float64Array(ni);\n    for (let i = 0; i < ni; i++) si[i] = i;\n\n    let nct = Math.min(m - 1, n);\n    let nrt = Math.max(0, Math.min(n - 2, m));\n    let mrc = Math.max(nct, nrt);\n\n    for (let k = 0; k < mrc; k++) {\n      if (k < nct) {\n        s[k] = 0;\n        for (let i = k; i < m; i++) {\n          s[k] = hypotenuse(s[k], a.get(i, k));\n        }\n        if (s[k] !== 0) {\n          if (a.get(k, k) < 0) {\n            s[k] = -s[k];\n          }\n          for (let i = k; i < m; i++) {\n            a.set(i, k, a.get(i, k) / s[k]);\n          }\n          a.set(k, k, a.get(k, k) + 1);\n        }\n        s[k] = -s[k];\n      }\n\n      for (let j = k + 1; j < n; j++) {\n        if (k < nct && s[k] !== 0) {\n          let t = 0;\n          for (let i = k; i < m; i++) {\n            t += a.get(i, k) * a.get(i, j);\n          }\n          t = -t / a.get(k, k);\n          for (let i = k; i < m; i++) {\n            a.set(i, j, a.get(i, j) + t * a.get(i, k));\n          }\n        }\n        e[j] = a.get(k, j);\n      }\n\n      if (wantu && k < nct) {\n        for (let i = k; i < m; i++) {\n          U.set(i, k, a.get(i, k));\n        }\n      }\n\n      if (k < nrt) {\n        e[k] = 0;\n        for (let i = k + 1; i < n; i++) {\n          e[k] = hypotenuse(e[k], e[i]);\n        }\n        if (e[k] !== 0) {\n          if (e[k + 1] < 0) {\n            e[k] = 0 - e[k];\n          }\n          for (let i = k + 1; i < n; i++) {\n            e[i] /= e[k];\n          }\n          e[k + 1] += 1;\n        }\n        e[k] = -e[k];\n        if (k + 1 < m && e[k] !== 0) {\n          for (let i = k + 1; i < m; i++) {\n            work[i] = 0;\n          }\n          for (let i = k + 1; i < m; i++) {\n            for (let j = k + 1; j < n; j++) {\n              work[i] += e[j] * a.get(i, j);\n            }\n          }\n          for (let j = k + 1; j < n; j++) {\n            let t = -e[j] / e[k + 1];\n            for (let i = k + 1; i < m; i++) {\n              a.set(i, j, a.get(i, j) + t * work[i]);\n            }\n          }\n        }\n        if (wantv) {\n          for (let i = k + 1; i < n; i++) {\n            V.set(i, k, e[i]);\n          }\n        }\n      }\n    }\n\n    let p = Math.min(n, m + 1);\n    if (nct < n) {\n      s[nct] = a.get(nct, nct);\n    }\n    if (m < p) {\n      s[p - 1] = 0;\n    }\n    if (nrt + 1 < p) {\n      e[nrt] = a.get(nrt, p - 1);\n    }\n    e[p - 1] = 0;\n\n    if (wantu) {\n      for (let j = nct; j < nu; j++) {\n        for (let i = 0; i < m; i++) {\n          U.set(i, j, 0);\n        }\n        U.set(j, j, 1);\n      }\n      for (let k = nct - 1; k >= 0; k--) {\n        if (s[k] !== 0) {\n          for (let j = k + 1; j < nu; j++) {\n            let t = 0;\n            for (let i = k; i < m; i++) {\n              t += U.get(i, k) * U.get(i, j);\n            }\n            t = -t / U.get(k, k);\n            for (let i = k; i < m; i++) {\n              U.set(i, j, U.get(i, j) + t * U.get(i, k));\n            }\n          }\n          for (let i = k; i < m; i++) {\n            U.set(i, k, -U.get(i, k));\n          }\n          U.set(k, k, 1 + U.get(k, k));\n          for (let i = 0; i < k - 1; i++) {\n            U.set(i, k, 0);\n          }\n        } else {\n          for (let i = 0; i < m; i++) {\n            U.set(i, k, 0);\n          }\n          U.set(k, k, 1);\n        }\n      }\n    }\n\n    if (wantv) {\n      for (let k = n - 1; k >= 0; k--) {\n        if (k < nrt && e[k] !== 0) {\n          for (let j = k + 1; j < n; j++) {\n            let t = 0;\n            for (let i = k + 1; i < n; i++) {\n              t += V.get(i, k) * V.get(i, j);\n            }\n            t = -t / V.get(k + 1, k);\n            for (let i = k + 1; i < n; i++) {\n              V.set(i, j, V.get(i, j) + t * V.get(i, k));\n            }\n          }\n        }\n        for (let i = 0; i < n; i++) {\n          V.set(i, k, 0);\n        }\n        V.set(k, k, 1);\n      }\n    }\n\n    let pp = p - 1;\n    let iter = 0;\n    let eps = Number.EPSILON;\n    while (p > 0) {\n      let k, kase;\n      for (k = p - 2; k >= -1; k--) {\n        if (k === -1) {\n          break;\n        }\n        const alpha =\n          Number.MIN_VALUE + eps * Math.abs(s[k] + Math.abs(s[k + 1]));\n        if (Math.abs(e[k]) <= alpha || Number.isNaN(e[k])) {\n          e[k] = 0;\n          break;\n        }\n      }\n      if (k === p - 2) {\n        kase = 4;\n      } else {\n        let ks;\n        for (ks = p - 1; ks >= k; ks--) {\n          if (ks === k) {\n            break;\n          }\n          let t =\n            (ks !== p ? Math.abs(e[ks]) : 0) +\n            (ks !== k + 1 ? Math.abs(e[ks - 1]) : 0);\n          if (Math.abs(s[ks]) <= eps * t) {\n            s[ks] = 0;\n            break;\n          }\n        }\n        if (ks === k) {\n          kase = 3;\n        } else if (ks === p - 1) {\n          kase = 1;\n        } else {\n          kase = 2;\n          k = ks;\n        }\n      }\n\n      k++;\n\n      switch (kase) {\n        case 1: {\n          let f = e[p - 2];\n          e[p - 2] = 0;\n          for (let j = p - 2; j >= k; j--) {\n            let t = hypotenuse(s[j], f);\n            let cs = s[j] / t;\n            let sn = f / t;\n            s[j] = t;\n            if (j !== k) {\n              f = -sn * e[j - 1];\n              e[j - 1] = cs * e[j - 1];\n            }\n            if (wantv) {\n              for (let i = 0; i < n; i++) {\n                t = cs * V.get(i, j) + sn * V.get(i, p - 1);\n                V.set(i, p - 1, -sn * V.get(i, j) + cs * V.get(i, p - 1));\n                V.set(i, j, t);\n              }\n            }\n          }\n          break;\n        }\n        case 2: {\n          let f = e[k - 1];\n          e[k - 1] = 0;\n          for (let j = k; j < p; j++) {\n            let t = hypotenuse(s[j], f);\n            let cs = s[j] / t;\n            let sn = f / t;\n            s[j] = t;\n            f = -sn * e[j];\n            e[j] = cs * e[j];\n            if (wantu) {\n              for (let i = 0; i < m; i++) {\n                t = cs * U.get(i, j) + sn * U.get(i, k - 1);\n                U.set(i, k - 1, -sn * U.get(i, j) + cs * U.get(i, k - 1));\n                U.set(i, j, t);\n              }\n            }\n          }\n          break;\n        }\n        case 3: {\n          const scale = Math.max(\n            Math.abs(s[p - 1]),\n            Math.abs(s[p - 2]),\n            Math.abs(e[p - 2]),\n            Math.abs(s[k]),\n            Math.abs(e[k]),\n          );\n          const sp = s[p - 1] / scale;\n          const spm1 = s[p - 2] / scale;\n          const epm1 = e[p - 2] / scale;\n          const sk = s[k] / scale;\n          const ek = e[k] / scale;\n          const b = ((spm1 + sp) * (spm1 - sp) + epm1 * epm1) / 2;\n          const c = sp * epm1 * (sp * epm1);\n          let shift = 0;\n          if (b !== 0 || c !== 0) {\n            if (b < 0) {\n              shift = 0 - Math.sqrt(b * b + c);\n            } else {\n              shift = Math.sqrt(b * b + c);\n            }\n            shift = c / (b + shift);\n          }\n          let f = (sk + sp) * (sk - sp) + shift;\n          let g = sk * ek;\n          for (let j = k; j < p - 1; j++) {\n            let t = hypotenuse(f, g);\n            if (t === 0) t = Number.MIN_VALUE;\n            let cs = f / t;\n            let sn = g / t;\n            if (j !== k) {\n              e[j - 1] = t;\n            }\n            f = cs * s[j] + sn * e[j];\n            e[j] = cs * e[j] - sn * s[j];\n            g = sn * s[j + 1];\n            s[j + 1] = cs * s[j + 1];\n            if (wantv) {\n              for (let i = 0; i < n; i++) {\n                t = cs * V.get(i, j) + sn * V.get(i, j + 1);\n                V.set(i, j + 1, -sn * V.get(i, j) + cs * V.get(i, j + 1));\n                V.set(i, j, t);\n              }\n            }\n            t = hypotenuse(f, g);\n            if (t === 0) t = Number.MIN_VALUE;\n            cs = f / t;\n            sn = g / t;\n            s[j] = t;\n            f = cs * e[j] + sn * s[j + 1];\n            s[j + 1] = -sn * e[j] + cs * s[j + 1];\n            g = sn * e[j + 1];\n            e[j + 1] = cs * e[j + 1];\n            if (wantu && j < m - 1) {\n              for (let i = 0; i < m; i++) {\n                t = cs * U.get(i, j) + sn * U.get(i, j + 1);\n                U.set(i, j + 1, -sn * U.get(i, j) + cs * U.get(i, j + 1));\n                U.set(i, j, t);\n              }\n            }\n          }\n          e[p - 2] = f;\n          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 (let i = 0; i <= pp; i++) {\n                V.set(i, k, -V.get(i, k));\n              }\n            }\n          }\n          while (k < pp) {\n            if (s[k] >= s[k + 1]) {\n              break;\n            }\n            let t = s[k];\n            s[k] = s[k + 1];\n            s[k + 1] = t;\n            if (wantv && k < n - 1) {\n              for (let i = 0; i < n; i++) {\n                t = V.get(i, k + 1);\n                V.set(i, k + 1, V.get(i, k));\n                V.set(i, k, t);\n              }\n            }\n            if (wantu && k < m - 1) {\n              for (let i = 0; i < m; i++) {\n                t = U.get(i, k + 1);\n                U.set(i, k + 1, U.get(i, k));\n                U.set(i, k, t);\n              }\n            }\n            k++;\n          }\n          iter = 0;\n          p--;\n          break;\n        }\n        // no default\n      }\n    }\n\n    if (swapped) {\n      let tmp = V;\n      V = U;\n      U = tmp;\n    }\n\n    this.m = m;\n    this.n = n;\n    this.s = s;\n    this.U = U;\n    this.V = V;\n  }\n\n  solve(value) {\n    let Y = value;\n    let e = this.threshold;\n    let scols = this.s.length;\n    let Ls = Matrix.zeros(scols, scols);\n\n    for (let i = 0; i < scols; i++) {\n      if (Math.abs(this.s[i]) <= e) {\n        Ls.set(i, i, 0);\n      } else {\n        Ls.set(i, i, 1 / this.s[i]);\n      }\n    }\n\n    let U = this.U;\n    let V = this.rightSingularVectors;\n\n    let VL = V.mmul(Ls);\n    let vrows = V.rows;\n    let urows = U.rows;\n    let VLU = Matrix.zeros(vrows, urows);\n\n    for (let i = 0; i < vrows; i++) {\n      for (let j = 0; j < urows; j++) {\n        let sum = 0;\n        for (let k = 0; k < scols; k++) {\n          sum += VL.get(i, k) * U.get(j, k);\n        }\n        VLU.set(i, j, sum);\n      }\n    }\n\n    return VLU.mmul(Y);\n  }\n\n  solveForDiagonal(value) {\n    return this.solve(Matrix.diag(value));\n  }\n\n  inverse() {\n    let V = this.V;\n    let e = this.threshold;\n    let vrows = V.rows;\n    let vcols = V.columns;\n    let X = new Matrix(vrows, this.s.length);\n\n    for (let i = 0; i < vrows; i++) {\n      for (let j = 0; j < vcols; j++) {\n        if (Math.abs(this.s[j]) > e) {\n          X.set(i, j, V.get(i, j) / this.s[j]);\n        }\n      }\n    }\n\n    let U = this.U;\n\n    let urows = U.rows;\n    let ucols = U.columns;\n    let Y = new Matrix(vrows, urows);\n\n    for (let i = 0; i < vrows; i++) {\n      for (let j = 0; j < urows; j++) {\n        let sum = 0;\n        for (let k = 0; k < ucols; k++) {\n          sum += X.get(i, k) * U.get(j, k);\n        }\n        Y.set(i, j, sum);\n      }\n    }\n\n    return Y;\n  }\n\n  get condition() {\n    return this.s[0] / this.s[Math.min(this.m, this.n) - 1];\n  }\n\n  get norm2() {\n    return this.s[0];\n  }\n\n  get rank() {\n    let tol = Math.max(this.m, this.n) * this.s[0] * Number.EPSILON;\n    let r = 0;\n    let s = this.s;\n    for (let i = 0, ii = s.length; i < ii; i++) {\n      if (s[i] > tol) {\n        r++;\n      }\n    }\n    return r;\n  }\n\n  get diagonal() {\n    return Array.from(this.s);\n  }\n\n  get threshold() {\n    return (Number.EPSILON / 2) * Math.max(this.m, this.n) * this.s[0];\n  }\n\n  get leftSingularVectors() {\n    return this.U;\n  }\n\n  get rightSingularVectors() {\n    return this.V;\n  }\n\n  get diagonalMatrix() {\n    return Matrix.diag(this.s);\n  }\n}\n","import LuDecomposition from './dc/lu';\nimport QrDecomposition from './dc/qr';\nimport SingularValueDecomposition from './dc/svd';\nimport Matrix from './matrix';\nimport WrapperMatrix2D from './wrap/WrapperMatrix2D';\n\nexport function inverse(matrix, useSVD = false) {\n  matrix = WrapperMatrix2D.checkMatrix(matrix);\n  if (useSVD) {\n    return new SingularValueDecomposition(matrix).inverse();\n  } else {\n    return solve(matrix, Matrix.eye(matrix.rows));\n  }\n}\n\nexport function solve(leftHandSide, rightHandSide, useSVD = false) {\n  leftHandSide = WrapperMatrix2D.checkMatrix(leftHandSide);\n  rightHandSide = WrapperMatrix2D.checkMatrix(rightHandSide);\n  if (useSVD) {\n    return new SingularValueDecomposition(leftHandSide).solve(rightHandSide);\n  } else {\n    return leftHandSide.isSquare()\n      ? new LuDecomposition(leftHandSide).solve(rightHandSide)\n      : new QrDecomposition(leftHandSide).solve(rightHandSide);\n  }\n}\n","'use strict';\n\nvar defaultOptions = {\n  size: 1,\n  value: 0\n};\n\n/**\n * Case when the entry is an array\n * @param data\n * @param options\n * @returns {Array}\n */\nfunction arrayCase(data, options) {\n  var len = data.length;\n  if (typeof options.size === 'number') {\n    options.size = [options.size, options.size];\n  }\n\n  var cond = len + options.size[0] + options.size[1];\n\n  var output;\n  if (options.output) {\n    if (options.output.length !== cond) {\n      throw new RangeError('Wrong output size');\n    }\n    output = options.output;\n  } else {\n    output = new Array(cond);\n  }\n\n  var i;\n  if (options.value === 'circular') {\n    for (i = 0; i < cond; i++) {\n      if (i < options.size[0]) {\n        output[i] = data[(len - (options.size[0] % len) + i) % len];\n      } else if (i < options.size[0] + len) {\n        output[i] = data[i - options.size[0]];\n      } else {\n        output[i] = data[(i - options.size[0]) % len];\n      }\n    }\n  } else if (options.value === 'replicate') {\n    for (i = 0; i < cond; i++) {\n      if (i < options.size[0]) output[i] = data[0];\n      else if (i < options.size[0] + len) output[i] = data[i - options.size[0]];\n      else output[i] = data[len - 1];\n    }\n  } else if (options.value === 'symmetric') {\n    if (options.size[0] > len || options.size[1] > len) {\n      throw new RangeError(\n        'expanded value should not be bigger than the data length'\n      );\n    }\n    for (i = 0; i < cond; i++) {\n      if (i < options.size[0]) output[i] = data[options.size[0] - 1 - i];\n      else if (i < options.size[0] + len) output[i] = data[i - options.size[0]];\n      else output[i] = data[2 * len + options.size[0] - i - 1];\n    }\n  } else {\n    for (i = 0; i < cond; i++) {\n      if (i < options.size[0]) output[i] = options.value;\n      else if (i < options.size[0] + len) output[i] = data[i - options.size[0]];\n      else output[i] = options.value;\n    }\n  }\n\n  return output;\n}\n\n/**\n * Case when the entry is a matrix\n * @param data\n * @param options\n * @returns {Array}\n */\nfunction matrixCase(data, options) {\n  // var row = data.length;\n  // var col = data[0].length;\n  if (options.size[0] === undefined) {\n    options.size = [options.size, options.size, options.size, options.size];\n  }\n  throw new Error('matrix not supported yet, sorry');\n}\n\n/**\n * Pads and array\n * @param {Array <number>} data\n * @param {object} options\n */\nfunction padArray(data, options) {\n  options = Object.assign({}, defaultOptions, options);\n  if (Array.isArray(data)) {\n    if (Array.isArray(data[0])) return matrixCase(data, options);\n    else return arrayCase(data, options);\n  } else {\n    throw new TypeError('data should be an array');\n  }\n}\n\nmodule.exports = padArray;\n","import { Matrix, MatrixTransposeView, inverse } from 'ml-matrix';\nimport padArray from 'ml-pad-array';\n\n/**\n * Factorial of a number\n * @ignore\n * @param n\n * @return {number}\n */\nfunction factorial(n) {\n  let r = 1;\n  while (n > 0) r *= n--;\n  return r;\n}\n\nconst defaultOptions = {\n  windowSize: 5,\n  derivative: 1,\n  polynomial: 2,\n  pad: 'none',\n  padValue: 'replicate',\n};\n\n/**\n * Savitzky-Golay filter\n * @param {Array <number>} data\n * @param {number} h\n * @param {Object} options\n * @returns {Array}\n */\nexport default function savitzkyGolay(data, h, options) {\n  options = Object.assign({}, defaultOptions, options);\n  if (\n    options.windowSize % 2 === 0 ||\n    options.windowSize < 5 ||\n    !Number.isInteger(options.windowSize)\n  ) {\n    throw new RangeError(\n      'Invalid window size (should be odd and at least 5 integer number)',\n    );\n  }\n  if (options.derivative < 0 || !Number.isInteger(options.derivative)) {\n    throw new RangeError('Derivative should be a positive integer');\n  }\n  if (options.polynomial < 1 || !Number.isInteger(options.polynomial)) {\n    throw new RangeError('Polynomial should be a positive integer');\n  }\n\n  let C, norm;\n  let step = Math.floor(options.windowSize / 2);\n\n  if (options.pad === 'pre') {\n    data = padArray(data, { size: step, value: options.padValue });\n  }\n\n  let ans = new Array(data.length - 2 * step);\n\n  if (\n    options.windowSize === 5 &&\n    options.polynomial === 2 &&\n    (options.derivative === 1 || options.derivative === 2)\n  ) {\n    if (options.derivative === 1) {\n      C = [-2, -1, 0, 1, 2];\n      norm = 10;\n    } else {\n      C = [2, -1, -2, -1, 2];\n      norm = 7;\n    }\n  } else {\n    let J = Matrix.ones(options.windowSize, options.polynomial + 1);\n    let inic = -(options.windowSize - 1) / 2;\n    for (let i = 0; i < J.rows; i++) {\n      for (let j = 0; j < J.columns; j++) {\n        if (inic + 1 !== 0 || j !== 0) J.set(i, j, Math.pow(inic + i, j));\n      }\n    }\n    let Jtranspose = new MatrixTransposeView(J);\n    let Jinv = inverse(Jtranspose.mmul(J));\n    C = Jinv.mmul(Jtranspose);\n    C = C.getRow(options.derivative);\n    norm = 1 / factorial(options.derivative);\n  }\n  let det = norm * Math.pow(h, options.derivative);\n  for (let k = step; k < data.length - step; k++) {\n    let d = 0;\n    for (let l = 0; l < C.length; l++) d += (C[l] * data[l + k - step]) / det;\n    ans[k - step] = d;\n  }\n\n  if (options.pad === 'post') {\n    ans = padArray(ans, { size: step, value: options.padValue });\n  }\n\n  return ans;\n}\n","'use strict';\n\nconst toString = Object.prototype.toString;\n\nfunction isAnyArray(object) {\n  return toString.call(object).endsWith('Array]');\n}\n\nmodule.exports = isAnyArray;\n","export default function maybeToPrecision(value, digits) {\n  if (value < 0) {\n    value = 0 - value;\n    if (typeof digits === 'number') {\n      return `- ${value.toPrecision(digits)}`;\n    } else {\n      return `- ${value.toString()}`;\n    }\n  } else {\n    if (typeof digits === 'number') {\n      return value.toPrecision(digits);\n    } else {\n      return value.toString();\n    }\n  }\n}\n","import isAnyArray from 'is-any-array';\n\nexport { default as maybeToPrecision } from './maybeToPrecision';\nexport { default as checkArrayLength } from './checkArrayLength';\nexport default class BaseRegression {\n  constructor() {\n    if (new.target === BaseRegression) {\n      throw new Error('BaseRegression must be subclassed');\n    }\n  }\n\n  predict(x) {\n    if (typeof x === 'number') {\n      return this._predict(x);\n    } else if (isAnyArray(x)) {\n      const y = [];\n      for (let i = 0; i < x.length; i++) {\n        y.push(this._predict(x[i]));\n      }\n      return y;\n    } else {\n      throw new TypeError('x must be a number or array');\n    }\n  }\n\n  _predict() {\n    throw new Error('_predict must be implemented');\n  }\n\n  train() {\n    // Do nothing for this package\n  }\n\n  toString() {\n    return '';\n  }\n\n  toLaTeX() {\n    return '';\n  }\n\n  /**\n   * Return the correlation coefficient of determination (r) and chi-square.\n   * @param {Array<number>} x\n   * @param {Array<number>} y\n   * @return {object}\n   */\n  score(x, y) {\n    if (!isAnyArray(x) || !isAnyArray(y) || x.length !== y.length) {\n      throw new Error('x and y must be arrays of the same length');\n    }\n\n    const n = x.length;\n    const y2 = new Array(n);\n    for (let i = 0; i < n; i++) {\n      y2[i] = this._predict(x[i]);\n    }\n\n    let xSum = 0;\n    let ySum = 0;\n    let chi2 = 0;\n    let rmsd = 0;\n    let xSquared = 0;\n    let ySquared = 0;\n    let xY = 0;\n    for (let i = 0; i < n; i++) {\n      xSum += y2[i];\n      ySum += y[i];\n      xSquared += y2[i] * y2[i];\n      ySquared += y[i] * y[i];\n      xY += y2[i] * y[i];\n      if (y[i] !== 0) {\n        chi2 += ((y[i] - y2[i]) * (y[i] - y2[i])) / y[i];\n      }\n      rmsd += (y[i] - y2[i]) * (y[i] - y2[i]);\n    }\n\n    const r =\n      (n * xY - xSum * ySum) /\n      Math.sqrt((n * xSquared - xSum * xSum) * (n * ySquared - ySum * ySum));\n\n    return {\n      r: r,\n      r2: r * r,\n      chi2: chi2,\n      rmsd: Math.sqrt(rmsd / n),\n    };\n  }\n}\n","import BaseRegression, {\n  checkArrayLength,\n  maybeToPrecision,\n} from 'ml-regression-base';\nimport { Matrix, MatrixTransposeView, solve } from 'ml-matrix';\n\nexport default class PolynomialRegression extends BaseRegression {\n  constructor(x, y, degree) {\n    super();\n    if (x === true) {\n      this.degree = y.degree;\n      this.powers = y.powers;\n      this.coefficients = y.coefficients;\n    } else {\n      checkArrayLength(x, y);\n      regress(this, x, y, degree);\n    }\n  }\n\n  _predict(x) {\n    let y = 0;\n    for (let k = 0; k < this.powers.length; k++) {\n      y += this.coefficients[k] * Math.pow(x, this.powers[k]);\n    }\n    return y;\n  }\n\n  toJSON() {\n    return {\n      name: 'polynomialRegression',\n      degree: this.degree,\n      powers: this.powers,\n      coefficients: this.coefficients,\n    };\n  }\n\n  toString(precision) {\n    return this._toFormula(precision, false);\n  }\n\n  toLaTeX(precision) {\n    return this._toFormula(precision, true);\n  }\n\n  _toFormula(precision, isLaTeX) {\n    let sup = '^';\n    let closeSup = '';\n    let times = ' * ';\n    if (isLaTeX) {\n      sup = '^{';\n      closeSup = '}';\n      times = '';\n    }\n\n    let fn = '';\n    let str = '';\n    for (let k = 0; k < this.coefficients.length; k++) {\n      str = '';\n      if (this.coefficients[k] !== 0) {\n        if (this.powers[k] === 0) {\n          str = maybeToPrecision(this.coefficients[k], precision);\n        } else {\n          if (this.powers[k] === 1) {\n            str = `${maybeToPrecision(this.coefficients[k], precision) +\n              times}x`;\n          } else {\n            str = `${maybeToPrecision(this.coefficients[k], precision) +\n              times}x${sup}${this.powers[k]}${closeSup}`;\n          }\n        }\n\n        if (this.coefficients[k] > 0 && k !== this.coefficients.length - 1) {\n          str = ` + ${str}`;\n        } else if (k !== this.coefficients.length - 1) {\n          str = ` ${str}`;\n        }\n      }\n      fn = str + fn;\n    }\n    if (fn.charAt(0) === '+') {\n      fn = fn.slice(1);\n    }\n\n    return `f(x) = ${fn}`;\n  }\n\n  static load(json) {\n    if (json.name !== 'polynomialRegression') {\n      throw new TypeError('not a polynomial regression model');\n    }\n    return new PolynomialRegression(true, json);\n  }\n}\n\nfunction regress(pr, x, y, degree) {\n  const n = x.length;\n  let powers;\n  if (Array.isArray(degree)) {\n    powers = degree;\n    degree = powers.length;\n  } else {\n    degree++;\n    powers = new Array(degree);\n    for (let k = 0; k < degree; k++) {\n      powers[k] = k;\n    }\n  }\n  const F = new Matrix(n, degree);\n  const Y = new Matrix([y]);\n  for (let k = 0; k < degree; k++) {\n    for (let i = 0; i < n; i++) {\n      if (powers[k] === 0) {\n        F.set(i, k, 1);\n      } else {\n        F.set(i, k, Math.pow(x[i], powers[k]));\n      }\n    }\n  }\n\n  const FT = new MatrixTransposeView(F);\n  const A = FT.mmul(F);\n  const B = FT.mmul(new MatrixTransposeView(Y));\n\n  pr.degree = degree - 1;\n  pr.powers = powers;\n  pr.coefficients = solve(A, B).to1DArray();\n}\n","import isAnyArray from 'is-any-array';\n\nexport default function checkArraySize(x, y) {\n  if (!isAnyArray(x) || !isAnyArray(y)) {\n    throw new TypeError('x and y must be arrays');\n  }\n  if (x.length !== y.length) {\n    throw new RangeError('x and y arrays must have the same length');\n  }\n}\n","import PolynomialRegression from 'ml-regression-polynomial';\n\n/**\n * Iterative regression-based baseline correction\n * @param {Array<number>} x - Independent axis variable\n * @param {Array<number>} y - Dependent axis variable\n * @param {object} [options] - Options object\n * @param {number} [options.maxIterations = 100] - Maximum number of allowed iterations\n * @param {function} [options.Regression = PolynomialRegression] - Regression class with a predict method\n * @param {*} [options.regressionOptions] - Options for regressionFunction\n * @param {number} [options.tolerance = 0.001] - Convergence error tolerance\n * @return {{corrected: Array<number>, delta: number, iteration: number, baseline: Array<number>}}\n */\nexport default function baselineCorrectionRegression(x, y, options = {}) {\n  let {\n    maxIterations = 100,\n    Regression = PolynomialRegression,\n    regressionOptions,\n    tolerance = 0.001,\n  } = options;\n\n  if (!regressionOptions && Regression === PolynomialRegression) {\n    regressionOptions = 3;\n  }\n\n  let baseline = y.slice();\n  let fitting = y.slice();\n  let oldFitting = y;\n  let iteration = 0;\n  let delta;\n  let regression;\n  while (iteration < maxIterations) {\n    // Calculate the fitting result\n    regression = new Regression(x, baseline, regressionOptions);\n\n    delta = 0;\n    for (let i = 0; i < baseline.length; i++) {\n      fitting[i] = regression.predict(x[i]);\n      if (baseline[i] > fitting[i]) {\n        baseline[i] = fitting[i];\n      }\n\n      delta += Math.abs((fitting[i] - oldFitting[i]) / oldFitting[i]);\n    }\n\n    // Stop criterion\n    if (delta < tolerance) {\n      break;\n    } else {\n      oldFitting = fitting.slice();\n      iteration++;\n    }\n  }\n\n  // removes baseline\n  let corrected = new Array(baseline.length);\n  for (let j = 0; j < baseline.length; j++) {\n    corrected[j] = y[j] - baseline[j];\n  }\n\n  return {\n    corrected,\n    delta,\n    iteration,\n    baseline,\n    regression: regression,\n  };\n}\n","'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","/*\nThe MIT License (MIT)\nCopyright © 2006-2007 Kevin C. Olbrich\nCopyright © 2010-2016 LIM SAS (http://lim.eu) - Julien Sanchez\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\nof the Software, and to permit persons to whom the Software is furnished to do\nso, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n*/\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = global || self, global.Qty = factory());\n}(this, (function () { 'use strict';\n\n  /**\n   * Tests if a value is a string\n   *\n   * @param {*} value - Value to test\n   *\n   * @returns {boolean} true if value is a string, false otherwise\n   */\n  function isString(value) {\n    return typeof value === \"string\" || value instanceof String;\n  }\n\n  /*\n   * Prefer stricter Number.isFinite if currently supported.\n   * To be dropped when ES6 is finalized. Obsolete browsers will\n   * have to use ES6 polyfills.\n   */\n  var isFiniteImpl = Number.isFinite || window.isFinite;\n  /**\n   * Tests if a value is a number\n   *\n   * @param {*} value - Value to test\n   *\n   * @returns {boolean} true if value is a number, false otherwise\n   */\n  function isNumber(value) {\n    // Number.isFinite allows not to consider NaN or '1' as numbers\n    return isFiniteImpl(value);\n  }\n\n  /*\n   * Identity function\n   */\n  function identity(value) {\n    return value;\n  }\n\n  /**\n   * Returns unique strings from list\n   *\n   * @param {string[]} strings - array of strings\n   *\n   *\n   * @returns {string[]} a new array of strings without duplicates\n   */\n  function uniq(strings) {\n    var seen = {};\n    return strings.filter(function(item) {\n      return seen.hasOwnProperty(item) ? false : (seen[item] = true);\n    });\n  }\n\n  function compareArray(array1, array2) {\n    if (array2.length !== array1.length) {\n      return false;\n    }\n    for (var i = 0; i < array1.length; i++) {\n      if (array2[i].compareArray) {\n        if (!array2[i].compareArray(array1[i])) {\n          return false;\n        }\n      }\n      if (array2[i] !== array1[i]) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  function assign(target, properties) {\n    Object.keys(properties).forEach(function(key) {\n      target[key] = properties[key];\n    });\n  }\n\n  /**\n   * Safely multiplies numbers while avoiding floating errors\n   * like 0.1 * 0.1 => 0.010000000000000002\n   *\n   * @param {...number} numbers - numbers to multiply\n   *\n   * @returns {number} result\n   */\n  function mulSafe() {\n    var result = 1, decimals = 0;\n    for (var i = 0; i < arguments.length; i++) {\n      var arg = arguments[i];\n      decimals = decimals + getFractional(arg);\n      result *= arg;\n    }\n\n    return decimals !== 0 ? round(result, decimals) : result;\n  }\n\n  /**\n   * Safely divides two numbers while avoiding floating errors\n   * like 0.3 / 0.05 => 5.999999999999999\n   *\n   * @returns {number} result\n   * @param {number} num Numerator\n   * @param {number} den Denominator\n   */\n  function divSafe(num, den) {\n    if (den === 0) {\n      throw new Error(\"Divide by zero\");\n    }\n\n    var factor = Math.pow(10, getFractional(den));\n    var invDen = factor / (factor * den);\n\n    return mulSafe(num, invDen);\n  }\n\n  /**\n   * Rounds value at the specified number of decimals\n   *\n   * @param {number} val - value to round\n   * @param {number} decimals - number of decimals\n   *\n   * @returns {number} rounded number\n   */\n  function round(val, decimals) {\n    return Math.round(val * Math.pow(10, decimals)) / Math.pow(10, decimals);\n  }\n\n  function getFractional(num) {\n    // Check for NaNs or Infinities\n    if (!isFinite(num)) {\n      return 0;\n    }\n\n    // Faster than parsing strings\n    // http://jsperf.com/count-decimals/2\n    var count = 0;\n    while (num % 1 !== 0) {\n      num *= 10;\n      count++;\n    }\n    return count;\n  }\n\n  /**\n   * Custom error type definition\n   * @constructor\n   */\n  function QtyError() {\n    var err;\n    if (!this) { // Allows to instantiate QtyError without new()\n      err = Object.create(QtyError.prototype);\n      QtyError.apply(err, arguments);\n      return err;\n    }\n    err = Error.apply(this, arguments);\n    this.name = \"QtyError\";\n    this.message = err.message;\n    this.stack = err.stack;\n  }\n  QtyError.prototype = Object.create(Error.prototype, {constructor: { value: QtyError }});\n\n  /*\n   * Throws incompatible units error\n   * @param {string} left - units\n   * @param {string} right - units incompatible with first argument\n   * @throws \"Incompatible units\" error\n   */\n  function throwIncompatibleUnits(left, right) {\n    throw new QtyError(\"Incompatible units: \" + left + \" and \" + right);\n  }\n\n  var UNITS = {\n    /* prefixes */\n    \"<googol>\" : [[\"googol\"], 1e100, \"prefix\"],\n    \"<kibi>\"  :  [[\"Ki\",\"Kibi\",\"kibi\"], Math.pow(2,10), \"prefix\"],\n    \"<mebi>\"  :  [[\"Mi\",\"Mebi\",\"mebi\"], Math.pow(2,20), \"prefix\"],\n    \"<gibi>\"  :  [[\"Gi\",\"Gibi\",\"gibi\"], Math.pow(2,30), \"prefix\"],\n    \"<tebi>\"  :  [[\"Ti\",\"Tebi\",\"tebi\"], Math.pow(2,40), \"prefix\"],\n    \"<pebi>\"  :  [[\"Pi\",\"Pebi\",\"pebi\"], Math.pow(2,50), \"prefix\"],\n    \"<exi>\"   :  [[\"Ei\",\"Exi\",\"exi\"], Math.pow(2,60), \"prefix\"],\n    \"<zebi>\"  :  [[\"Zi\",\"Zebi\",\"zebi\"], Math.pow(2,70), \"prefix\"],\n    \"<yebi>\"  :  [[\"Yi\",\"Yebi\",\"yebi\"], Math.pow(2,80), \"prefix\"],\n    \"<yotta>\" :  [[\"Y\",\"Yotta\",\"yotta\"], 1e24, \"prefix\"],\n    \"<zetta>\" :  [[\"Z\",\"Zetta\",\"zetta\"], 1e21, \"prefix\"],\n    \"<exa>\"   :  [[\"E\",\"Exa\",\"exa\"], 1e18, \"prefix\"],\n    \"<peta>\"  :  [[\"P\",\"Peta\",\"peta\"], 1e15, \"prefix\"],\n    \"<tera>\"  :  [[\"T\",\"Tera\",\"tera\"], 1e12, \"prefix\"],\n    \"<giga>\"  :  [[\"G\",\"Giga\",\"giga\"], 1e9, \"prefix\"],\n    \"<mega>\"  :  [[\"M\",\"Mega\",\"mega\"], 1e6, \"prefix\"],\n    \"<kilo>\"  :  [[\"k\",\"kilo\"], 1e3, \"prefix\"],\n    \"<hecto>\" :  [[\"h\",\"Hecto\",\"hecto\"], 1e2, \"prefix\"],\n    \"<deca>\"  :  [[\"da\",\"Deca\",\"deca\",\"deka\"], 1e1, \"prefix\"],\n    \"<deci>\"  :  [[\"d\",\"Deci\",\"deci\"], 1e-1, \"prefix\"],\n    \"<centi>\"  : [[\"c\",\"Centi\",\"centi\"], 1e-2, \"prefix\"],\n    \"<milli>\" :  [[\"m\",\"Milli\",\"milli\"], 1e-3, \"prefix\"],\n    \"<micro>\"  : [\n      [\"u\",\"\\u03BC\"/*µ as greek letter*/,\"\\u00B5\"/*µ as micro sign*/,\"Micro\",\"mc\",\"micro\"],\n      1e-6,\n      \"prefix\"\n    ],\n    \"<nano>\"  :  [[\"n\",\"Nano\",\"nano\"], 1e-9, \"prefix\"],\n    \"<pico>\"  :  [[\"p\",\"Pico\",\"pico\"], 1e-12, \"prefix\"],\n    \"<femto>\" :  [[\"f\",\"Femto\",\"femto\"], 1e-15, \"prefix\"],\n    \"<atto>\"  :  [[\"a\",\"Atto\",\"atto\"], 1e-18, \"prefix\"],\n    \"<zepto>\" :  [[\"z\",\"Zepto\",\"zepto\"], 1e-21, \"prefix\"],\n    \"<yocto>\" :  [[\"y\",\"Yocto\",\"yocto\"], 1e-24, \"prefix\"],\n\n    \"<1>\"     :  [[\"1\", \"<1>\"], 1, \"\"],\n    /* length units */\n    \"<meter>\" :  [[\"m\",\"meter\",\"meters\",\"metre\",\"metres\"], 1.0, \"length\", [\"<meter>\"] ],\n    \"<inch>\"  :  [[\"in\",\"inch\",\"inches\",\"\\\"\"], 0.0254, \"length\", [\"<meter>\"]],\n    \"<foot>\"  :  [[\"ft\",\"foot\",\"feet\",\"'\"], 0.3048, \"length\", [\"<meter>\"]],\n    \"<yard>\"  :  [[\"yd\",\"yard\",\"yards\"], 0.9144, \"length\", [\"<meter>\"]],\n    \"<mile>\"  :  [[\"mi\",\"mile\",\"miles\"], 1609.344, \"length\", [\"<meter>\"]],\n    \"<naut-mile>\" : [[\"nmi\",\"naut-mile\"], 1852, \"length\", [\"<meter>\"]],\n    \"<league>\":  [[\"league\",\"leagues\"], 4828, \"length\", [\"<meter>\"]],\n    \"<furlong>\": [[\"furlong\",\"furlongs\"], 201.2, \"length\", [\"<meter>\"]],\n    \"<rod>\"   :  [[\"rd\",\"rod\",\"rods\"], 5.029, \"length\", [\"<meter>\"]],\n    \"<mil>\"   :  [[\"mil\",\"mils\"], 0.0000254, \"length\", [\"<meter>\"]],\n    \"<angstrom>\"  :[[\"ang\",\"angstrom\",\"angstroms\"], 1e-10, \"length\", [\"<meter>\"]],\n    \"<fathom>\" : [[\"fathom\",\"fathoms\"], 1.829, \"length\", [\"<meter>\"]],\n    \"<pica>\"  : [[\"pica\",\"picas\"], 0.00423333333, \"length\", [\"<meter>\"]],\n    \"<point>\" : [[\"pt\",\"point\",\"points\"], 0.000352777778, \"length\", [\"<meter>\"]],\n    \"<redshift>\" : [[\"z\",\"red-shift\", \"redshift\"], 1.302773e26, \"length\", [\"<meter>\"]],\n    \"<AU>\"    : [[\"AU\",\"astronomical-unit\"], 149597900000, \"length\", [\"<meter>\"]],\n    \"<light-second>\":[[\"ls\",\"light-second\"], 299792500, \"length\", [\"<meter>\"]],\n    \"<light-minute>\":[[\"lmin\",\"light-minute\"], 17987550000, \"length\", [\"<meter>\"]],\n    \"<light-year>\" : [[\"ly\",\"light-year\"], 9460528000000000, \"length\", [\"<meter>\"]],\n    \"<parsec>\"  : [[\"pc\",\"parsec\",\"parsecs\"], 30856780000000000, \"length\", [\"<meter>\"]],\n    \"<datamile>\"  :  [[\"DM\",\"datamile\"], 1828.8, \"length\", [\"<meter>\"]],\n\n    /* mass */\n    \"<kilogram>\" : [[\"kg\",\"kilogram\",\"kilograms\"], 1.0, \"mass\", [\"<kilogram>\"]],\n    \"<AMU>\" : [[\"u\",\"AMU\",\"amu\"], 1.660538921e-27, \"mass\", [\"<kilogram>\"]],\n    \"<dalton>\" : [[\"Da\",\"Dalton\",\"Daltons\",\"dalton\",\"daltons\"], 1.660538921e-27, \"mass\", [\"<kilogram>\"]],\n    \"<slug>\" : [[\"slug\",\"slugs\"], 14.5939029, \"mass\", [\"<kilogram>\"]],\n    \"<short-ton>\" : [[\"tn\",\"ton\",\"short-ton\"], 907.18474, \"mass\", [\"<kilogram>\"]],\n    \"<metric-ton>\":[[\"tonne\",\"metric-ton\"], 1000, \"mass\", [\"<kilogram>\"]],\n    \"<carat>\" : [[\"ct\",\"carat\",\"carats\"], 0.0002, \"mass\", [\"<kilogram>\"]],\n    \"<pound>\" : [[\"lbs\",\"lb\",\"pound\",\"pounds\",\"#\"], 0.45359237, \"mass\", [\"<kilogram>\"]],\n    \"<ounce>\" : [[\"oz\",\"ounce\",\"ounces\"], 0.0283495231, \"mass\", [\"<kilogram>\"]],\n    \"<gram>\"    :  [[\"g\",\"gram\",\"grams\",\"gramme\",\"grammes\"], 1e-3, \"mass\", [\"<kilogram>\"]],\n    \"<grain>\" : [[\"grain\",\"grains\",\"gr\"], 6.479891e-5, \"mass\", [\"<kilogram>\"]],\n    \"<dram>\"  : [[\"dram\",\"drams\",\"dr\"], 0.0017718452, \"mass\",[\"<kilogram>\"]],\n    \"<stone>\" : [[\"stone\",\"stones\",\"st\"],6.35029318, \"mass\",[\"<kilogram>\"]],\n\n    /* area */\n    \"<hectare>\":[[\"hectare\"], 10000, \"area\", [\"<meter>\",\"<meter>\"]],\n    \"<acre>\":[[\"acre\",\"acres\"], 4046.85642, \"area\", [\"<meter>\",\"<meter>\"]],\n    \"<sqft>\":[[\"sqft\"], 1, \"area\", [\"<foot>\",\"<foot>\"]],\n\n    /* volume */\n    \"<liter>\" : [[\"l\",\"L\",\"liter\",\"liters\",\"litre\",\"litres\"], 0.001, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<gallon>\":  [[\"gal\",\"gallon\",\"gallons\"], 0.0037854118, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<gallon-imp>\":  [[\"galimp\",\"gallon-imp\",\"gallons-imp\"], 0.0045460900, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<quart>\":  [[\"qt\",\"quart\",\"quarts\"], 0.00094635295, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<pint>\":  [[\"pt\",\"pint\",\"pints\"], 0.000473176475, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<pint-imp>\":  [[\"ptimp\",\"pint-imp\",\"pints-imp\"], 5.6826125e-4, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<cup>\":  [[\"cu\",\"cup\",\"cups\"], 0.000236588238, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<fluid-ounce>\":  [[\"floz\",\"fluid-ounce\",\"fluid-ounces\"], 2.95735297e-5, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<fluid-ounce-imp>\":  [[\"flozimp\", \"floz-imp\",\"fluid-ounce-imp\",\"fluid-ounces-imp\"], 2.84130625e-5, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<tablespoon>\":  [[\"tb\",\"tbsp\",\"tbs\",\"tablespoon\",\"tablespoons\"], 1.47867648e-5, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<teaspoon>\":  [[\"tsp\",\"teaspoon\",\"teaspoons\"], 4.92892161e-6, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<bushel>\":  [[\"bu\",\"bsh\",\"bushel\",\"bushels\"], 0.035239072, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<oilbarrel>\":  [[\"bbl\",\"oil-barrel\",\"oil-barrels\"], 0.158987294928, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<beerbarrel>\":  [[\"bl\",\"bl-us\",\"beer-barrel\",\"beer-barrels\"], 0.1173477658, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<beerbarrel-imp>\":  [[\"blimp\",\"bl-imp\",\"beer-barrel-imp\",\"beer-barrels-imp\"], 0.16365924, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n\n    /* speed */\n    \"<kph>\" : [[\"kph\"], 0.277777778, \"speed\", [\"<meter>\"], [\"<second>\"]],\n    \"<mph>\" : [[\"mph\"], 0.44704, \"speed\", [\"<meter>\"], [\"<second>\"]],\n    \"<knot>\" : [[\"kt\",\"kn\",\"kts\",\"knot\",\"knots\"], 0.514444444, \"speed\", [\"<meter>\"], [\"<second>\"]],\n    \"<fps>\"  : [[\"fps\"], 0.3048, \"speed\", [\"<meter>\"], [\"<second>\"]],\n\n    /* acceleration */\n    \"<gee>\" : [[\"gee\"], 9.80665, \"acceleration\", [\"<meter>\"], [\"<second>\",\"<second>\"]],\n\n    /* temperature_difference */\n    \"<kelvin>\" : [[\"degK\",\"kelvin\"], 1.0, \"temperature\", [\"<kelvin>\"]],\n    \"<celsius>\" : [[\"degC\",\"celsius\",\"celsius\",\"centigrade\"], 1.0, \"temperature\", [\"<kelvin>\"]],\n    \"<fahrenheit>\" : [[\"degF\",\"fahrenheit\"], 5 / 9, \"temperature\", [\"<kelvin>\"]],\n    \"<rankine>\" : [[\"degR\",\"rankine\"], 5 / 9, \"temperature\", [\"<kelvin>\"]],\n    \"<temp-K>\"  : [[\"tempK\",\"temp-K\"], 1.0, \"temperature\", [\"<temp-K>\"]],\n    \"<temp-C>\"  : [[\"tempC\",\"temp-C\"], 1.0, \"temperature\", [\"<temp-K>\"]],\n    \"<temp-F>\"  : [[\"tempF\",\"temp-F\"], 5 / 9, \"temperature\", [\"<temp-K>\"]],\n    \"<temp-R>\"  : [[\"tempR\",\"temp-R\"], 5 / 9, \"temperature\", [\"<temp-K>\"]],\n\n    /* time */\n    \"<second>\":  [[\"s\",\"sec\",\"secs\",\"second\",\"seconds\"], 1.0, \"time\", [\"<second>\"]],\n    \"<minute>\":  [[\"min\",\"mins\",\"minute\",\"minutes\"], 60.0, \"time\", [\"<second>\"]],\n    \"<hour>\":  [[\"h\",\"hr\",\"hrs\",\"hour\",\"hours\"], 3600.0, \"time\", [\"<second>\"]],\n    \"<day>\":  [[\"d\",\"day\",\"days\"], 3600 * 24, \"time\", [\"<second>\"]],\n    \"<week>\":  [[\"wk\",\"week\",\"weeks\"], 7 * 3600 * 24, \"time\", [\"<second>\"]],\n    \"<fortnight>\": [[\"fortnight\",\"fortnights\"], 1209600, \"time\", [\"<second>\"]],\n    \"<year>\":  [[\"y\",\"yr\",\"year\",\"years\",\"annum\"], 31556926, \"time\", [\"<second>\"]],\n    \"<decade>\":[[\"decade\",\"decades\"], 315569260, \"time\", [\"<second>\"]],\n    \"<century>\":[[\"century\",\"centuries\"], 3155692600, \"time\", [\"<second>\"]],\n\n    /* pressure */\n    \"<pascal>\" : [[\"Pa\",\"pascal\",\"Pascal\"], 1.0, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<bar>\" : [[\"bar\",\"bars\"], 100000, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<mmHg>\" : [[\"mmHg\"], 133.322368, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<inHg>\" : [[\"inHg\"], 3386.3881472, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<torr>\" : [[\"torr\"], 133.322368, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<atm>\" : [[\"atm\",\"ATM\",\"atmosphere\",\"atmospheres\"], 101325, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<psi>\" : [[\"psi\"], 6894.76, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<cmh2o>\" : [[\"cmH2O\",\"cmh2o\"], 98.0638, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n    \"<inh2o>\" : [[\"inH2O\",\"inh2o\"], 249.082052, \"pressure\", [\"<kilogram>\"],[\"<meter>\",\"<second>\",\"<second>\"]],\n\n    /* viscosity */\n    \"<poise>\"  : [[\"P\",\"poise\"], 0.1, \"viscosity\", [\"<kilogram>\"],[\"<meter>\",\"<second>\"] ],\n    \"<stokes>\" : [[\"St\",\"stokes\"], 1e-4, \"viscosity\", [\"<meter>\",\"<meter>\"], [\"<second>\"]],\n\n    /* substance */\n    \"<mole>\"  :  [[\"mol\",\"mole\"], 1.0, \"substance\", [\"<mole>\"]],\n\n    /* concentration */\n    \"<molar>\" : [[\"M\",\"molar\"], 1000, \"concentration\", [\"<mole>\"], [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<wtpercent>\"  : [[\"wt%\",\"wtpercent\"], 10, \"concentration\", [\"<kilogram>\"], [\"<meter>\",\"<meter>\",\"<meter>\"]],\n\n    /* activity */\n    \"<katal>\" :  [[\"kat\",\"katal\",\"Katal\"], 1.0, \"activity\", [\"<mole>\"], [\"<second>\"]],\n    \"<unit>\"  :  [[\"U\",\"enzUnit\",\"unit\"], 16.667e-16, \"activity\", [\"<mole>\"], [\"<second>\"]],\n\n    /* capacitance */\n    \"<farad>\" :  [[\"F\",\"farad\",\"Farad\"], 1.0, \"capacitance\", [\"<second>\",\"<second>\",\"<second>\",\"<second>\",\"<ampere>\",\"<ampere>\"], [\"<meter>\", \"<meter>\", \"<kilogram>\"]],\n\n    /* charge */\n    \"<coulomb>\" :  [[\"C\",\"coulomb\",\"Coulomb\"], 1.0, \"charge\", [\"<ampere>\",\"<second>\"]],\n    \"<Ah>\" :  [[\"Ah\"], 3600, \"charge\", [\"<ampere>\",\"<second>\"]],\n\n    /* current */\n    \"<ampere>\"  :  [[\"A\",\"Ampere\",\"ampere\",\"amp\",\"amps\"], 1.0, \"current\", [\"<ampere>\"]],\n\n    /* conductance */\n    \"<siemens>\" : [[\"S\",\"Siemens\",\"siemens\"], 1.0, \"conductance\", [\"<second>\",\"<second>\",\"<second>\",\"<ampere>\",\"<ampere>\"], [\"<kilogram>\",\"<meter>\",\"<meter>\"]],\n\n    /* inductance */\n    \"<henry>\" :  [[\"H\",\"Henry\",\"henry\"], 1.0, \"inductance\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\",\"<ampere>\",\"<ampere>\"]],\n\n    /* potential */\n    \"<volt>\"  :  [[\"V\",\"Volt\",\"volt\",\"volts\"], 1.0, \"potential\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\",\"<second>\",\"<ampere>\"]],\n\n    /* resistance */\n    \"<ohm>\" :  [\n      [\"Ohm\",\"ohm\",\"\\u03A9\"/*Ω as greek letter*/,\"\\u2126\"/*Ω as ohm sign*/],\n      1.0,\n      \"resistance\",\n      [\"<meter>\",\"<meter>\",\"<kilogram>\"],[\"<second>\",\"<second>\",\"<second>\",\"<ampere>\",\"<ampere>\"]\n    ],\n    /* magnetism */\n    \"<weber>\" : [[\"Wb\",\"weber\",\"webers\"], 1.0, \"magnetism\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\",\"<ampere>\"]],\n    \"<tesla>\"  : [[\"T\",\"tesla\",\"teslas\"], 1.0, \"magnetism\", [\"<kilogram>\"], [\"<second>\",\"<second>\",\"<ampere>\"]],\n    \"<gauss>\" : [[\"G\",\"gauss\"], 1e-4, \"magnetism\",  [\"<kilogram>\"], [\"<second>\",\"<second>\",\"<ampere>\"]],\n    \"<maxwell>\" : [[\"Mx\",\"maxwell\",\"maxwells\"], 1e-8, \"magnetism\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\",\"<ampere>\"]],\n    \"<oersted>\"  : [[\"Oe\",\"oersted\",\"oersteds\"], 250.0 / Math.PI, \"magnetism\", [\"<ampere>\"], [\"<meter>\"]],\n\n    /* energy */\n    \"<joule>\" :  [[\"J\",\"joule\",\"Joule\",\"joules\"], 1.0, \"energy\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<erg>\"   :  [[\"erg\",\"ergs\"], 1e-7, \"energy\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<btu>\"   :  [[\"BTU\",\"btu\",\"BTUs\"], 1055.056, \"energy\", [\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<calorie>\" :  [[\"cal\",\"calorie\",\"calories\"], 4.18400, \"energy\",[\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<Calorie>\" :  [[\"Cal\",\"Calorie\",\"Calories\"], 4184.00, \"energy\",[\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<therm-US>\" : [[\"th\",\"therm\",\"therms\",\"Therm\",\"therm-US\"], 105480400, \"energy\",[\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n    \"<Wh>\" : [[\"Wh\"], 3600, \"energy\",[\"<meter>\",\"<meter>\",\"<kilogram>\"], [\"<second>\",\"<second>\"]],\n\n    /* force */\n    \"<newton>\"  : [[\"N\",\"Newton\",\"newton\"], 1.0, \"force\", [\"<kilogram>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<dyne>\"  : [[\"dyn\",\"dyne\"], 1e-5, \"force\", [\"<kilogram>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<pound-force>\"  : [[\"lbf\",\"pound-force\"], 4.448222, \"force\", [\"<kilogram>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n\n    /* frequency */\n    \"<hertz>\" : [[\"Hz\",\"hertz\",\"Hertz\"], 1.0, \"frequency\", [\"<1>\"], [\"<second>\"]],\n\n    /* angle */\n    \"<radian>\" :[[\"rad\",\"radian\",\"radians\"], 1.0, \"angle\", [\"<radian>\"]],\n    \"<degree>\" :[[\"deg\",\"degree\",\"degrees\"], Math.PI / 180.0, \"angle\", [\"<radian>\"]],\n    \"<gradian>\"   :[[\"gon\",\"grad\",\"gradian\",\"grads\"], Math.PI / 200.0, \"angle\", [\"<radian>\"]],\n    \"<steradian>\"  : [[\"sr\",\"steradian\",\"steradians\"], 1.0, \"solid_angle\", [\"<steradian>\"]],\n\n    /* rotation */\n    \"<rotation>\" : [[\"rotation\"], 2.0 * Math.PI, \"angle\", [\"<radian>\"]],\n    \"<rpm>\"   :[[\"rpm\"], 2.0 * Math.PI / 60.0, \"angular_velocity\", [\"<radian>\"], [\"<second>\"]],\n\n    /* information */\n    \"<byte>\"  :[[\"B\",\"byte\",\"bytes\"], 1.0, \"information\", [\"<byte>\"]],\n    \"<bit>\"  :[[\"b\",\"bit\",\"bits\"], 0.125, \"information\", [\"<byte>\"]],\n\n    /* information rate */\n    \"<Bps>\" : [[\"Bps\"], 1.0, \"information_rate\", [\"<byte>\"], [\"<second>\"]],\n    \"<bps>\" : [[\"bps\"], 0.125, \"information_rate\", [\"<byte>\"], [\"<second>\"]],\n\n    /* currency */\n    \"<dollar>\":[[\"USD\",\"dollar\"], 1.0, \"currency\", [\"<dollar>\"]],\n    \"<cents>\" :[[\"cents\"], 0.01, \"currency\", [\"<dollar>\"]],\n\n    /* luminosity */\n    \"<candela>\" : [[\"cd\",\"candela\"], 1.0, \"luminosity\", [\"<candela>\"]],\n    \"<lumen>\" : [[\"lm\",\"lumen\"], 1.0, \"luminous_power\", [\"<candela>\",\"<steradian>\"]],\n    \"<lux>\" :[[\"lux\"], 1.0, \"illuminance\", [\"<candela>\",\"<steradian>\"], [\"<meter>\",\"<meter>\"]],\n\n    /* power */\n    \"<watt>\"  : [[\"W\",\"watt\",\"watts\"], 1.0, \"power\", [\"<kilogram>\",\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\",\"<second>\"]],\n    \"<volt-ampere>\"  : [[\"VA\",\"volt-ampere\"], 1.0, \"power\", [\"<kilogram>\",\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\",\"<second>\"]],\n    \"<volt-ampere-reactive>\"  : [[\"var\",\"Var\",\"VAr\",\"VAR\",\"volt-ampere-reactive\"], 1.0, \"power\", [\"<kilogram>\",\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\",\"<second>\"]],\n    \"<horsepower>\"  :  [[\"hp\",\"horsepower\"], 745.699872, \"power\", [\"<kilogram>\",\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\",\"<second>\"]],\n\n    /* radiation */\n    \"<gray>\" : [[\"Gy\",\"gray\",\"grays\"], 1.0, \"radiation\", [\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<roentgen>\" : [[\"R\",\"roentgen\"], 0.009330, \"radiation\", [\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<sievert>\" : [[\"Sv\",\"sievert\",\"sieverts\"], 1.0, \"radiation\", [\"<meter>\",\"<meter>\"], [\"<second>\",\"<second>\"]],\n    \"<becquerel>\" : [[\"Bq\",\"becquerel\",\"becquerels\"], 1.0, \"radiation\", [\"<1>\"],[\"<second>\"]],\n    \"<curie>\" : [[\"Ci\",\"curie\",\"curies\"], 3.7e10, \"radiation\", [\"<1>\"],[\"<second>\"]],\n\n    /* rate */\n    \"<cpm>\" : [[\"cpm\"], 1.0 / 60.0, \"rate\", [\"<count>\"],[\"<second>\"]],\n    \"<dpm>\" : [[\"dpm\"], 1.0 / 60.0, \"rate\", [\"<count>\"],[\"<second>\"]],\n    \"<bpm>\" : [[\"bpm\"], 1.0 / 60.0, \"rate\", [\"<count>\"],[\"<second>\"]],\n\n    /* resolution / typography */\n    \"<dot>\" : [[\"dot\",\"dots\"], 1, \"resolution\", [\"<each>\"]],\n    \"<pixel>\" : [[\"pixel\",\"px\"], 1, \"resolution\", [\"<each>\"]],\n    \"<ppi>\" : [[\"ppi\"], 1, \"resolution\", [\"<pixel>\"], [\"<inch>\"]],\n    \"<dpi>\" : [[\"dpi\"], 1, \"typography\", [\"<dot>\"], [\"<inch>\"]],\n\n    /* other */\n    \"<cell>\" : [[\"cells\",\"cell\"], 1, \"counting\", [\"<each>\"]],\n    \"<each>\" : [[\"each\"], 1.0, \"counting\", [\"<each>\"]],\n    \"<count>\" : [[\"count\"], 1.0, \"counting\", [\"<each>\"]],\n    \"<base-pair>\"  : [[\"bp\",\"base-pair\"], 1.0, \"counting\", [\"<each>\"]],\n    \"<nucleotide>\" : [[\"nt\",\"nucleotide\"], 1.0, \"counting\", [\"<each>\"]],\n    \"<molecule>\" : [[\"molecule\",\"molecules\"], 1.0, \"counting\", [\"<1>\"]],\n    \"<dozen>\" :  [[\"doz\",\"dz\",\"dozen\"],12.0,\"prefix_only\", [\"<each>\"]],\n    \"<percent>\": [[\"%\",\"percent\"], 0.01, \"prefix_only\", [\"<1>\"]],\n    \"<ppm>\" :  [[\"ppm\"],1e-6, \"prefix_only\", [\"<1>\"]],\n    \"<ppt>\" :  [[\"ppt\"],1e-9, \"prefix_only\", [\"<1>\"]],\n    \"<gross>\" :  [[\"gr\",\"gross\"],144.0, \"prefix_only\", [\"<dozen>\",\"<dozen>\"]],\n    \"<decibel>\"  : [[\"dB\",\"decibel\",\"decibels\"], 1.0, \"logarithmic\", [\"<decibel>\"]]\n  };\n\n  var BASE_UNITS = [\"<meter>\",\"<kilogram>\",\"<second>\",\"<mole>\", \"<ampere>\",\"<radian>\",\"<kelvin>\",\"<temp-K>\",\"<byte>\",\"<dollar>\",\"<candela>\",\"<each>\",\"<steradian>\",\"<decibel>\"];\n\n  var UNITY = \"<1>\";\n  var UNITY_ARRAY = [UNITY];\n\n  // Setup\n\n  /**\n   * Asserts unit definition is valid\n   *\n   * @param {string} unitDef - Name of unit to test\n   * @param {Object} definition - Definition of unit to test\n   *\n   * @returns {void}\n   * @throws {QtyError} if unit definition is not valid\n   */\n  function validateUnitDefinition(unitDef, definition) {\n    var scalar = definition[1];\n    var numerator = definition[3] || [];\n    var denominator = definition[4] || [];\n    if (!isNumber(scalar)) {\n      throw new QtyError(unitDef + \": Invalid unit definition. \" +\n                         \"'scalar' must be a number\");\n    }\n\n    numerator.forEach(function(unit) {\n      if (UNITS[unit] === undefined) {\n        throw new QtyError(unitDef + \": Invalid unit definition. \" +\n                           \"Unit \" + unit + \" in 'numerator' is not recognized\");\n      }\n    });\n\n    denominator.forEach(function(unit) {\n      if (UNITS[unit] === undefined) {\n        throw new QtyError(unitDef + \": Invalid unit definition. \" +\n                           \"Unit \" + unit + \" in 'denominator' is not recognized\");\n      }\n    });\n  }\n\n  var PREFIX_VALUES = {};\n  var PREFIX_MAP = {};\n  var UNIT_VALUES = {};\n  var UNIT_MAP = {};\n  var OUTPUT_MAP = {};\n  for (var unitDef in UNITS) {\n    if (UNITS.hasOwnProperty(unitDef)) {\n      var definition = UNITS[unitDef];\n      if (definition[2] === \"prefix\") {\n        PREFIX_VALUES[unitDef] = definition[1];\n        for (var i = 0; i < definition[0].length; i++) {\n          PREFIX_MAP[definition[0][i]] = unitDef;\n        }\n      }\n      else {\n        validateUnitDefinition(unitDef, definition);\n        UNIT_VALUES[unitDef] = {\n          scalar: definition[1],\n          numerator: definition[3],\n          denominator: definition[4]\n        };\n        for (var j = 0; j < definition[0].length; j++) {\n          UNIT_MAP[definition[0][j]] = unitDef;\n        }\n      }\n      OUTPUT_MAP[unitDef] = definition[0][0];\n    }\n  }\n\n  /**\n   * Returns a list of available units of kind\n   *\n   * @param {string} [kind] - kind of units\n   * @returns {array} names of units\n   * @throws {QtyError} if kind is unknown\n   */\n  function getUnits(kind) {\n    var i;\n    var units = [];\n    var unitKeys = Object.keys(UNITS);\n    if (typeof kind === \"undefined\") {\n      for (i = 0; i < unitKeys.length; i++) {\n        if ([\"\", \"prefix\"].indexOf(UNITS[unitKeys[i]][2]) === -1) {\n          units.push(unitKeys[i].substr(1, unitKeys[i].length - 2));\n        }\n      }\n    }\n    else if (this.getKinds().indexOf(kind) === -1) {\n      throw new QtyError(\"Kind not recognized\");\n    }\n    else {\n      for (i = 0; i < unitKeys.length; i++) {\n        if (UNITS[unitKeys[i]][2] === kind) {\n          units.push(unitKeys[i].substr(1, unitKeys[i].length - 2));\n        }\n      }\n    }\n\n    return units.sort(function(a, b) {\n      if (a.toLowerCase() < b.toLowerCase()) {\n        return -1;\n      }\n      if (a.toLowerCase() > b.toLowerCase()) {\n        return 1;\n      }\n      return 0;\n    });\n  }\n\n  /**\n   * Returns a list of alternative names for a unit\n   *\n   * @param {string} unitName - name of unit\n   * @returns {string[]} aliases for unit\n   * @throws {QtyError} if unit is unknown\n   */\n  function getAliases(unitName) {\n    if (!UNIT_MAP[unitName]) {\n      throw new QtyError(\"Unit not recognized\");\n    }\n    return UNITS[UNIT_MAP[unitName]][0];\n  }\n\n  var SIGNATURE_VECTOR = [\"length\", \"time\", \"temperature\", \"mass\", \"current\", \"substance\", \"luminosity\", \"currency\", \"information\", \"angle\"];\n\n  /*\n  calculates the unit signature id for use in comparing compatible units and simplification\n  the signature is based on a simple classification of units and is based on the following publication\n\n  Novak, G.S., Jr. \"Conversion of units of measurement\", IEEE Transactions on Software Engineering,\n  21(8), Aug 1995, pp.651-661\n  doi://10.1109/32.403789\n  http://ieeexplore.ieee.org/Xplore/login.jsp?url=/iel1/32/9079/00403789.pdf?isnumber=9079&prod=JNL&arnumber=403789&arSt=651&ared=661&arAuthor=Novak%2C+G.S.%2C+Jr.\n  */\n  function unitSignature() {\n    if (this.signature) {\n      return this.signature;\n    }\n    var vector = unitSignatureVector.call(this);\n    for (var i = 0; i < vector.length; i++) {\n      vector[i] *= Math.pow(20, i);\n    }\n\n    return vector.reduce(\n      function(previous, current) {\n        return previous + current;\n      },\n      0\n    );\n  }\n\n  // calculates the unit signature vector used by unit_signature\n  function unitSignatureVector() {\n    if (!this.isBase()) {\n      return unitSignatureVector.call(this.toBase());\n    }\n\n    var vector = new Array(SIGNATURE_VECTOR.length);\n    for (var i = 0; i < vector.length; i++) {\n      vector[i] = 0;\n    }\n    var r, n;\n    for (var j = 0; j < this.numerator.length; j++) {\n      if ((r = UNITS[this.numerator[j]])) {\n        n = SIGNATURE_VECTOR.indexOf(r[2]);\n        if (n >= 0) {\n          vector[n] = vector[n] + 1;\n        }\n      }\n    }\n\n    for (var k = 0; k < this.denominator.length; k++) {\n      if ((r = UNITS[this.denominator[k]])) {\n        n = SIGNATURE_VECTOR.indexOf(r[2]);\n        if (n >= 0) {\n          vector[n] = vector[n] - 1;\n        }\n      }\n    }\n    return vector;\n  }\n\n  var SIGN = \"[+-]\";\n  var INTEGER = \"\\\\d+\";\n  var SIGNED_INTEGER = SIGN + \"?\" + INTEGER;\n  var FRACTION = \"\\\\.\" + INTEGER;\n  var FLOAT = \"(?:\" + INTEGER + \"(?:\" + FRACTION + \")?\" + \")\" +\n              \"|\" +\n              \"(?:\" + FRACTION + \")\";\n  var EXPONENT = \"[Ee]\" + SIGNED_INTEGER;\n  var SCI_NUMBER = \"(?:\" + FLOAT + \")(?:\" + EXPONENT + \")?\";\n  var SIGNED_NUMBER = SIGN + \"?\\\\s*\" + SCI_NUMBER;\n  var QTY_STRING = \"(\" + SIGNED_NUMBER + \")?\" + \"\\\\s*([^/]*)(?:\\/(.+))?\";\n  var QTY_STRING_REGEX = new RegExp(\"^\" + QTY_STRING + \"$\");\n\n  var POWER_OP = \"\\\\^|\\\\*{2}\";\n  // Allow unit powers representing scalar, length, area, volume; 4 is for some\n  // special case representations in SI base units.\n  var SAFE_POWER = \"[01234]\";\n  var TOP_REGEX = new RegExp (\"([^ \\\\*\\\\d]+?)(?:\" + POWER_OP + \")?(-?\" + SAFE_POWER + \"(?![a-zA-Z]))\");\n  var BOTTOM_REGEX = new RegExp(\"([^ \\\\*\\\\d]+?)(?:\" + POWER_OP + \")?(\" + SAFE_POWER + \"(?![a-zA-Z]))\");\n\n  /* parse a string into a unit object.\n   * Typical formats like :\n   * \"5.6 kg*m/s^2\"\n   * \"5.6 kg*m*s^-2\"\n   * \"5.6 kilogram*meter*second^-2\"\n   * \"2.2 kPa\"\n   * \"37 degC\"\n   * \"1\"  -- creates a unitless constant with value 1\n   * \"GPa\"  -- creates a unit with scalar 1 with units 'GPa'\n   * 6'4\"  -- recognized as 6 feet + 4 inches\n   * 8 lbs 8 oz -- recognized as 8 lbs + 8 ounces\n   */\n  function parse(val) {\n    if (!isString(val)) {\n      val = val.toString();\n    }\n    val = val.trim();\n\n    var result = QTY_STRING_REGEX.exec(val);\n    if (!result) {\n      throw new QtyError(val + \": Quantity not recognized\");\n    }\n\n    var scalarMatch = result[1];\n    if (scalarMatch) {\n      // Allow whitespaces between sign and scalar for loose parsing\n      scalarMatch = scalarMatch.replace(/\\s/g, \"\");\n      this.scalar = parseFloat(scalarMatch);\n    }\n    else {\n      this.scalar = 1;\n    }\n    var top = result[2];\n    var bottom = result[3];\n\n    var n, x, nx;\n    // TODO DRY me\n    while ((result = TOP_REGEX.exec(top))) {\n      n = parseFloat(result[2]);\n      if (isNaN(n)) {\n        // Prevents infinite loops\n        throw new QtyError(\"Unit exponent is not a number\");\n      }\n      // Disallow unrecognized unit even if exponent is 0\n      if (n === 0 && !UNIT_TEST_REGEX.test(result[1])) {\n        throw new QtyError(\"Unit not recognized\");\n      }\n      x = result[1] + \" \";\n      nx = \"\";\n      for (var i = 0; i < Math.abs(n) ; i++) {\n        nx += x;\n      }\n      if (n >= 0) {\n        top = top.replace(result[0], nx);\n      }\n      else {\n        bottom = bottom ? bottom + nx : nx;\n        top = top.replace(result[0], \"\");\n      }\n    }\n\n    while ((result = BOTTOM_REGEX.exec(bottom))) {\n      n = parseFloat(result[2]);\n      if (isNaN(n)) {\n        // Prevents infinite loops\n        throw new QtyError(\"Unit exponent is not a number\");\n      }\n      // Disallow unrecognized unit even if exponent is 0\n      if (n === 0 && !UNIT_TEST_REGEX.test(result[1])) {\n        throw new QtyError(\"Unit not recognized\");\n      }\n      x = result[1] + \" \";\n      nx = \"\";\n      for (var j = 0; j < n ; j++) {\n        nx += x;\n      }\n\n      bottom = bottom.replace(result[0], nx);\n    }\n\n    if (top) {\n      this.numerator = parseUnits(top.trim());\n    }\n    if (bottom) {\n      this.denominator = parseUnits(bottom.trim());\n    }\n  }\n\n  var PREFIX_REGEX = Object.keys(PREFIX_MAP).sort(function(a, b) {\n    return b.length - a.length;\n  }).join(\"|\");\n  var UNIT_REGEX = Object.keys(UNIT_MAP).sort(function(a, b) {\n    return b.length - a.length;\n  }).join(\"|\");\n  /*\n   * Minimal boundary regex to support units with Unicode characters\n   * \\b only works for ASCII\n   */\n  var BOUNDARY_REGEX = \"\\\\b|$\";\n  var UNIT_MATCH = \"(\" + PREFIX_REGEX + \")??(\" +\n                   UNIT_REGEX +\n                   \")(?:\" + BOUNDARY_REGEX + \")\";\n  var UNIT_TEST_REGEX = new RegExp(\"^\\\\s*(\" + UNIT_MATCH + \"[\\\\s\\\\*]*)+$\");\n  var UNIT_MATCH_REGEX = new RegExp(UNIT_MATCH, \"g\"); // g flag for multiple occurences\n  var parsedUnitsCache = {};\n  /**\n   * Parses and converts units string to normalized unit array.\n   * Result is cached to speed up next calls.\n   *\n   * @param {string} units Units string\n   * @returns {string[]} Array of normalized units\n   *\n   * @example\n   * // Returns [\"<second>\", \"<meter>\", \"<second>\"]\n   * parseUnits(\"s m s\");\n   *\n   */\n  function parseUnits(units) {\n    var cached = parsedUnitsCache[units];\n    if (cached) {\n      return cached;\n    }\n\n    var unitMatch, normalizedUnits = [];\n\n    // Scan\n    if (!UNIT_TEST_REGEX.test(units)) {\n      throw new QtyError(\"Unit not recognized\");\n    }\n\n    while ((unitMatch = UNIT_MATCH_REGEX.exec(units))) {\n      normalizedUnits.push(unitMatch.slice(1));\n    }\n\n    normalizedUnits = normalizedUnits.map(function(item) {\n      return PREFIX_MAP[item[0]] ? [PREFIX_MAP[item[0]], UNIT_MAP[item[1]]] : [UNIT_MAP[item[1]]];\n    });\n\n    // Flatten and remove null elements\n    normalizedUnits = normalizedUnits.reduce(function(a,b) {\n      return a.concat(b);\n    }, []);\n    normalizedUnits = normalizedUnits.filter(function(item) {\n      return item;\n    });\n\n    parsedUnitsCache[units] = normalizedUnits;\n\n    return normalizedUnits;\n  }\n\n  /**\n   * Parses a string as a quantity\n   * @param {string} value - quantity as text\n   * @throws if value is not a string\n   * @returns {Qty|null} Parsed quantity or null if unrecognized\n   */\n  function globalParse(value) {\n    if (!isString(value)) {\n      throw new QtyError(\"Argument should be a string\");\n    }\n\n    try {\n      return this(value);\n    }\n    catch (e) {\n      return null;\n    }\n  }\n\n  /**\n   * Tests if a value is a Qty instance\n   *\n   * @param {*} value - Value to test\n   *\n   * @returns {boolean} true if value is a Qty instance, false otherwise\n   */\n  function isQty(value) {\n    return value instanceof Qty;\n  }\n\n  function Qty(initValue, initUnits) {\n    assertValidConstructorArgs.apply(null, arguments);\n\n    if (!(isQty(this))) {\n      return new Qty(initValue, initUnits);\n    }\n\n    this.scalar = null;\n    this.baseScalar = null;\n    this.signature = null;\n    this._conversionCache = {};\n    this.numerator = UNITY_ARRAY;\n    this.denominator = UNITY_ARRAY;\n\n    if (isDefinitionObject(initValue)) {\n      this.scalar = initValue.scalar;\n      this.numerator = (initValue.numerator && initValue.numerator.length !== 0) ? initValue.numerator : UNITY_ARRAY;\n      this.denominator = (initValue.denominator && initValue.denominator.length !== 0) ? initValue.denominator : UNITY_ARRAY;\n    }\n    else if (initUnits) {\n      parse.call(this, initUnits);\n      this.scalar = initValue;\n    }\n    else {\n      parse.call(this, initValue);\n    }\n\n    // math with temperatures is very limited\n    if (this.denominator.join(\"*\").indexOf(\"temp\") >= 0) {\n      throw new QtyError(\"Cannot divide with temperatures\");\n    }\n    if (this.numerator.join(\"*\").indexOf(\"temp\") >= 0) {\n      if (this.numerator.length > 1) {\n        throw new QtyError(\"Cannot multiply by temperatures\");\n      }\n      if (!compareArray(this.denominator, UNITY_ARRAY)) {\n        throw new QtyError(\"Cannot divide with temperatures\");\n      }\n    }\n\n    this.initValue = initValue;\n    updateBaseScalar.call(this);\n\n    if (this.isTemperature() && this.baseScalar < 0) {\n      throw new QtyError(\"Temperatures must not be less than absolute zero\");\n    }\n  }\n\n  Qty.prototype = {\n    // Properly set up constructor\n    constructor: Qty,\n  };\n\n  /**\n   * Asserts constructor arguments are valid\n   *\n   * @param {*} value - Value to test\n   * @param {string} [units] - Optional units when value is passed as a number\n   *\n   * @returns {void}\n   * @throws {QtyError} if constructor arguments are invalid\n   */\n  function assertValidConstructorArgs(value, units) {\n    if (units) {\n      if (!(isNumber(value) && isString(units))) {\n        throw new QtyError(\"Only number accepted as initialization value \" +\n                           \"when units are explicitly provided\");\n      }\n    }\n    else {\n      if (!(isString(value) ||\n            isNumber(value) ||\n            isQty(value)    ||\n            isDefinitionObject(value))) {\n        throw new QtyError(\"Only string, number or quantity accepted as \" +\n                           \"single initialization value\");\n      }\n    }\n  }\n\n  /**\n   * Tests if a value is a Qty definition object\n   *\n   * @param {*} value - Value to test\n   *\n   * @returns {boolean} true if value is a definition object, false otherwise\n   */\n  function isDefinitionObject(value) {\n    return value && typeof value === \"object\" && value.hasOwnProperty(\"scalar\");\n  }\n\n  function updateBaseScalar() {\n    if (this.baseScalar) {\n      return this.baseScalar;\n    }\n    if (this.isBase()) {\n      this.baseScalar = this.scalar;\n      this.signature = unitSignature.call(this);\n    }\n    else {\n      var base = this.toBase();\n      this.baseScalar = base.scalar;\n      this.signature = base.signature;\n    }\n  }\n\n  var KINDS = {\n    \"-312078\": \"elastance\",\n    \"-312058\": \"resistance\",\n    \"-312038\": \"inductance\",\n    \"-152058\": \"potential\",\n    \"-152040\": \"magnetism\",\n    \"-152038\": \"magnetism\",\n    \"-7997\": \"specific_volume\",\n    \"-79\": \"snap\",\n    \"-59\": \"jolt\",\n    \"-39\": \"acceleration\",\n    \"-38\": \"radiation\",\n    \"-20\": \"frequency\",\n    \"-19\": \"speed\",\n    \"-18\": \"viscosity\",\n    \"-17\": \"volumetric_flow\",\n    \"-1\": \"wavenumber\",\n    \"0\": \"unitless\",\n    \"1\": \"length\",\n    \"2\": \"area\",\n    \"3\": \"volume\",\n    \"20\": \"time\",\n    \"400\": \"temperature\",\n    \"7941\": \"yank\",\n    \"7942\": \"power\",\n    \"7959\": \"pressure\",\n    \"7961\": \"force\",\n    \"7962\": \"energy\",\n    \"7979\": \"viscosity\",\n    \"7981\": \"momentum\",\n    \"7982\": \"angular_momentum\",\n    \"7997\": \"density\",\n    \"7998\": \"area_density\",\n    \"8000\": \"mass\",\n    \"152020\": \"radiation_exposure\",\n    \"159999\": \"magnetism\",\n    \"160000\": \"current\",\n    \"160020\": \"charge\",\n    \"312058\": \"conductance\",\n    \"312078\": \"capacitance\",\n    \"3199980\": \"activity\",\n    \"3199997\": \"molar_concentration\",\n    \"3200000\": \"substance\",\n    \"63999998\": \"illuminance\",\n    \"64000000\": \"luminous_power\",\n    \"1280000000\": \"currency\",\n    \"25599999980\": \"information_rate\",\n    \"25600000000\": \"information\",\n    \"511999999980\": \"angular_velocity\",\n    \"512000000000\": \"angle\"\n  };\n\n  /**\n   * Returns the list of available well-known kinds of units, e.g.\n   * \"radiation\" or \"length\".\n   *\n   * @returns {string[]} names of kinds of units\n   */\n  function getKinds() {\n    return uniq(Object.keys(KINDS).map(function(knownSignature) {\n      return KINDS[knownSignature];\n    }));\n  }\n\n  Qty.prototype.kind = function() {\n    return KINDS[this.signature.toString()];\n  };\n\n  assign(Qty.prototype, {\n    isDegrees: function() {\n      // signature may not have been calculated yet\n      return (this.signature === null || this.signature === 400) &&\n        this.numerator.length === 1 &&\n        compareArray(this.denominator, UNITY_ARRAY) &&\n        (this.numerator[0].match(/<temp-[CFRK]>/) || this.numerator[0].match(/<(kelvin|celsius|rankine|fahrenheit)>/));\n    },\n\n    isTemperature: function() {\n      return this.isDegrees() && this.numerator[0].match(/<temp-[CFRK]>/);\n    }\n  });\n\n  function subtractTemperatures(lhs,rhs) {\n    var lhsUnits = lhs.units();\n    var rhsConverted = rhs.to(lhsUnits);\n    var dstDegrees = Qty(getDegreeUnits(lhsUnits));\n    return Qty({\"scalar\": lhs.scalar - rhsConverted.scalar, \"numerator\": dstDegrees.numerator, \"denominator\": dstDegrees.denominator});\n  }\n\n  function subtractTempDegrees(temp,deg) {\n    var tempDegrees = deg.to(getDegreeUnits(temp.units()));\n    return Qty({\"scalar\": temp.scalar - tempDegrees.scalar, \"numerator\": temp.numerator, \"denominator\": temp.denominator});\n  }\n\n  function addTempDegrees(temp,deg) {\n    var tempDegrees = deg.to(getDegreeUnits(temp.units()));\n    return Qty({\"scalar\": temp.scalar + tempDegrees.scalar, \"numerator\": temp.numerator, \"denominator\": temp.denominator});\n  }\n\n  function getDegreeUnits(units) {\n    if (units === \"tempK\") {\n      return \"degK\";\n    }\n    else if (units === \"tempC\") {\n      return \"degC\";\n    }\n    else if (units === \"tempF\") {\n      return \"degF\";\n    }\n    else if (units === \"tempR\") {\n      return \"degR\";\n    }\n    else {\n      throw new QtyError(\"Unknown type for temp conversion from: \" + units);\n    }\n  }\n\n  function toDegrees(src,dst) {\n    var srcDegK = toDegK(src);\n    var dstUnits = dst.units();\n    var dstScalar;\n\n    if (dstUnits === \"degK\") {\n      dstScalar = srcDegK.scalar;\n    }\n    else if (dstUnits === \"degC\") {\n      dstScalar = srcDegK.scalar ;\n    }\n    else if (dstUnits === \"degF\") {\n      dstScalar = srcDegK.scalar * 9 / 5;\n    }\n    else if (dstUnits === \"degR\") {\n      dstScalar = srcDegK.scalar * 9 / 5;\n    }\n    else {\n      throw new QtyError(\"Unknown type for degree conversion to: \" + dstUnits);\n    }\n\n    return Qty({\"scalar\": dstScalar, \"numerator\": dst.numerator, \"denominator\": dst.denominator});\n  }\n\n  function toDegK(qty) {\n    var units = qty.units();\n    var q;\n    if (units.match(/(deg)[CFRK]/)) {\n      q = qty.baseScalar;\n    }\n    else if (units === \"tempK\") {\n      q = qty.scalar;\n    }\n    else if (units === \"tempC\") {\n      q = qty.scalar;\n    }\n    else if (units === \"tempF\") {\n      q = qty.scalar * 5 / 9;\n    }\n    else if (units === \"tempR\") {\n      q = qty.scalar * 5 / 9;\n    }\n    else {\n      throw new QtyError(\"Unknown type for temp conversion from: \" + units);\n    }\n\n    return Qty({\"scalar\": q, \"numerator\": [\"<kelvin>\"], \"denominator\": UNITY_ARRAY});\n  }\n\n  function toTemp(src,dst) {\n    var dstUnits = dst.units();\n    var dstScalar;\n\n    if (dstUnits === \"tempK\") {\n      dstScalar = src.baseScalar;\n    }\n    else if (dstUnits === \"tempC\") {\n      dstScalar = src.baseScalar - 273.15;\n    }\n    else if (dstUnits === \"tempF\") {\n      dstScalar = (src.baseScalar * 9 / 5) - 459.67;\n    }\n    else if (dstUnits === \"tempR\") {\n      dstScalar = src.baseScalar * 9 / 5;\n    }\n    else {\n      throw new QtyError(\"Unknown type for temp conversion to: \" + dstUnits);\n    }\n\n    return Qty({\"scalar\": dstScalar, \"numerator\": dst.numerator, \"denominator\": dst.denominator});\n  }\n\n  function toTempK(qty) {\n    var units = qty.units();\n    var q;\n    if (units.match(/(deg)[CFRK]/)) {\n      q = qty.baseScalar;\n    }\n    else if (units === \"tempK\") {\n      q = qty.scalar;\n    }\n    else if (units === \"tempC\") {\n      q = qty.scalar + 273.15;\n    }\n    else if (units === \"tempF\") {\n      q = (qty.scalar + 459.67) * 5 / 9;\n    }\n    else if (units === \"tempR\") {\n      q = qty.scalar * 5 / 9;\n    }\n    else {\n      throw new QtyError(\"Unknown type for temp conversion from: \" + units);\n    }\n\n    return Qty({\"scalar\": q, \"numerator\": [\"<temp-K>\"], \"denominator\": UNITY_ARRAY});\n  }\n\n  assign(Qty.prototype, {\n    /**\n     * Converts to other compatible units.\n     * Instance's converted quantities are cached for faster subsequent calls.\n     *\n     * @param {(string|Qty)} other - Target units as string or retrieved from\n     *                               other Qty instance (scalar is ignored)\n     *\n     * @returns {Qty} New converted Qty instance with target units\n     *\n     * @throws {QtyError} if target units are incompatible\n     *\n     * @example\n     * var weight = Qty(\"25 kg\");\n     * weight.to(\"lb\"); // => Qty(\"55.11556554621939 lbs\");\n     * weight.to(Qty(\"3 g\")); // => Qty(\"25000 g\"); // scalar of passed Qty is ignored\n     */\n    to: function(other) {\n      var cached, target;\n\n      if (other === undefined || other === null) {\n        return this;\n      }\n\n      if (!isString(other)) {\n        return this.to(other.units());\n      }\n\n      cached = this._conversionCache[other];\n      if (cached) {\n        return cached;\n      }\n\n      // Instantiating target to normalize units\n      target = Qty(other);\n      if (target.units() === this.units()) {\n        return this;\n      }\n\n      if (!this.isCompatible(target)) {\n        if (this.isInverse(target)) {\n          target = this.inverse().to(other);\n        }\n        else {\n          throwIncompatibleUnits(this.units(), target.units());\n        }\n      }\n      else {\n        if (target.isTemperature()) {\n          target = toTemp(this,target);\n        }\n        else if (target.isDegrees()) {\n          target = toDegrees(this,target);\n        }\n        else {\n          var q = divSafe(this.baseScalar, target.baseScalar);\n          target = Qty({\"scalar\": q, \"numerator\": target.numerator, \"denominator\": target.denominator});\n        }\n      }\n\n      this._conversionCache[other] = target;\n      return target;\n    },\n\n    // convert to base SI units\n    // results of the conversion are cached so subsequent calls to this will be fast\n    toBase: function() {\n      if (this.isBase()) {\n        return this;\n      }\n\n      if (this.isTemperature()) {\n        return toTempK(this);\n      }\n\n      var cached = baseUnitCache[this.units()];\n      if (!cached) {\n        cached = toBaseUnits(this.numerator,this.denominator);\n        baseUnitCache[this.units()] = cached;\n      }\n      return cached.mul(this.scalar);\n    },\n\n    // Converts the unit back to a float if it is unitless.  Otherwise raises an exception\n    toFloat: function() {\n      if (this.isUnitless()) {\n        return this.scalar;\n      }\n      throw new QtyError(\"Can't convert to Float unless unitless.  Use Unit#scalar\");\n    },\n\n    /**\n     * Returns the nearest multiple of quantity passed as\n     * precision\n     *\n     * @param {(Qty|string|number)} precQuantity - Quantity, string formated\n     *   quantity or number as expected precision\n     *\n     * @returns {Qty} Nearest multiple of precQuantity\n     *\n     * @example\n     * Qty('5.5 ft').toPrec('2 ft'); // returns 6 ft\n     * Qty('0.8 cu').toPrec('0.25 cu'); // returns 0.75 cu\n     * Qty('6.3782 m').toPrec('cm'); // returns 6.38 m\n     * Qty('1.146 MPa').toPrec('0.1 bar'); // returns 1.15 MPa\n     *\n     */\n    toPrec: function(precQuantity) {\n      if (isString(precQuantity)) {\n        precQuantity = Qty(precQuantity);\n      }\n      if (isNumber(precQuantity)) {\n        precQuantity = Qty(precQuantity + \" \" + this.units());\n      }\n\n      if (!this.isUnitless()) {\n        precQuantity = precQuantity.to(this.units());\n      }\n      else if (!precQuantity.isUnitless()) {\n        throwIncompatibleUnits(this.units(), precQuantity.units());\n      }\n\n      if (precQuantity.scalar === 0) {\n        throw new QtyError(\"Divide by zero\");\n      }\n\n      var precRoundedResult = mulSafe(\n        Math.round(this.scalar / precQuantity.scalar),\n        precQuantity.scalar\n      );\n\n      return Qty(precRoundedResult + this.units());\n    }\n  });\n\n  /**\n   * Configures and returns a fast function to convert\n   * Number values from units to others.\n   * Useful to efficiently convert large array of values\n   * with same units into others with iterative methods.\n   * Does not take care of rounding issues.\n   *\n   * @param {string} srcUnits Units of values to convert\n   * @param {string} dstUnits Units to convert to\n   *\n   * @returns {Function} Converting function accepting Number value\n   *   and returning converted value\n   *\n   * @throws \"Incompatible units\" if units are incompatible\n   *\n   * @example\n   * // Converting large array of numbers with the same units\n   * // into other units\n   * var converter = Qty.swiftConverter(\"m/h\", \"ft/s\");\n   * var convertedSerie = largeSerie.map(converter);\n   *\n   */\n  function swiftConverter(srcUnits, dstUnits) {\n    var srcQty = Qty(srcUnits);\n    var dstQty = Qty(dstUnits);\n\n    if (srcQty.eq(dstQty)) {\n      return identity;\n    }\n\n    var convert;\n    if (!srcQty.isTemperature()) {\n      convert = function(value) {\n        return value * srcQty.baseScalar / dstQty.baseScalar;\n      };\n    }\n    else {\n      convert = function(value) {\n        // TODO Not optimized\n        return srcQty.mul(value).to(dstQty).scalar;\n      };\n    }\n\n    return function converter(value) {\n      var i, length, result;\n      if (!Array.isArray(value)) {\n        return convert(value);\n      }\n      else {\n        length = value.length;\n        result = [];\n        for (i = 0; i < length; i++) {\n          result.push(convert(value[i]));\n        }\n        return result;\n      }\n    };\n  }\n\n  var baseUnitCache = {};\n\n  function toBaseUnits(numerator,denominator) {\n    var num = [];\n    var den = [];\n    var q = 1;\n    var unit;\n    for (var i = 0; i < numerator.length; i++) {\n      unit = numerator[i];\n      if (PREFIX_VALUES[unit]) {\n        // workaround to fix\n        // 0.1 * 0.1 => 0.010000000000000002\n        q = mulSafe(q, PREFIX_VALUES[unit]);\n      }\n      else {\n        if (UNIT_VALUES[unit]) {\n          q *= UNIT_VALUES[unit].scalar;\n\n          if (UNIT_VALUES[unit].numerator) {\n            num.push(UNIT_VALUES[unit].numerator);\n          }\n          if (UNIT_VALUES[unit].denominator) {\n            den.push(UNIT_VALUES[unit].denominator);\n          }\n        }\n      }\n    }\n    for (var j = 0; j < denominator.length; j++) {\n      unit = denominator[j];\n      if (PREFIX_VALUES[unit]) {\n        q /= PREFIX_VALUES[unit];\n      }\n      else {\n        if (UNIT_VALUES[unit]) {\n          q /= UNIT_VALUES[unit].scalar;\n\n          if (UNIT_VALUES[unit].numerator) {\n            den.push(UNIT_VALUES[unit].numerator);\n          }\n          if (UNIT_VALUES[unit].denominator) {\n            num.push(UNIT_VALUES[unit].denominator);\n          }\n        }\n      }\n    }\n\n    // Flatten\n    num = num.reduce(function(a,b) {\n      return a.concat(b);\n    }, []);\n    den = den.reduce(function(a,b) {\n      return a.concat(b);\n    }, []);\n\n    return Qty({\"scalar\": q, \"numerator\": num, \"denominator\": den});\n  }\n\n  Qty.parse = globalParse;\n\n  Qty.getUnits = getUnits;\n  Qty.getAliases = getAliases;\n\n  Qty.mulSafe = mulSafe;\n  Qty.divSafe = divSafe;\n\n  Qty.getKinds = getKinds;\n\n  Qty.swiftConverter = swiftConverter;\n\n  Qty.Error = QtyError;\n\n  assign(Qty.prototype, {\n    // Returns new instance with units of this\n    add: function(other) {\n      if (isString(other)) {\n        other = Qty(other);\n      }\n\n      if (!this.isCompatible(other)) {\n        throwIncompatibleUnits(this.units(), other.units());\n      }\n\n      if (this.isTemperature() && other.isTemperature()) {\n        throw new QtyError(\"Cannot add two temperatures\");\n      }\n      else if (this.isTemperature()) {\n        return addTempDegrees(this, other);\n      }\n      else if (other.isTemperature()) {\n        return addTempDegrees(other, this);\n      }\n\n      return Qty({\"scalar\": this.scalar + other.to(this).scalar, \"numerator\": this.numerator, \"denominator\": this.denominator});\n    },\n\n    sub: function(other) {\n      if (isString(other)) {\n        other = Qty(other);\n      }\n\n      if (!this.isCompatible(other)) {\n        throwIncompatibleUnits(this.units(), other.units());\n      }\n\n      if (this.isTemperature() && other.isTemperature()) {\n        return subtractTemperatures(this,other);\n      }\n      else if (this.isTemperature()) {\n        return subtractTempDegrees(this,other);\n      }\n      else if (other.isTemperature()) {\n        throw new QtyError(\"Cannot subtract a temperature from a differential degree unit\");\n      }\n\n      return Qty({\"scalar\": this.scalar - other.to(this).scalar, \"numerator\": this.numerator, \"denominator\": this.denominator});\n    },\n\n    mul: function(other) {\n      if (isNumber(other)) {\n        return Qty({\"scalar\": mulSafe(this.scalar, other), \"numerator\": this.numerator, \"denominator\": this.denominator});\n      }\n      else if (isString(other)) {\n        other = Qty(other);\n      }\n\n      if ((this.isTemperature() || other.isTemperature()) && !(this.isUnitless() || other.isUnitless())) {\n        throw new QtyError(\"Cannot multiply by temperatures\");\n      }\n\n      // Quantities should be multiplied with same units if compatible, with base units else\n      var op1 = this;\n      var op2 = other;\n\n      // so as not to confuse results, multiplication and division between temperature degrees will maintain original unit info in num/den\n      // multiplication and division between deg[CFRK] can never factor each other out, only themselves: \"degK*degC/degC^2\" == \"degK/degC\"\n      if (op1.isCompatible(op2) && op1.signature !== 400) {\n        op2 = op2.to(op1);\n      }\n      var numdenscale = cleanTerms(op1.numerator, op1.denominator, op2.numerator, op2.denominator);\n\n      return Qty({\"scalar\": mulSafe(op1.scalar, op2.scalar, numdenscale[2]), \"numerator\": numdenscale[0], \"denominator\": numdenscale[1]});\n    },\n\n    div: function(other) {\n      if (isNumber(other)) {\n        if (other === 0) {\n          throw new QtyError(\"Divide by zero\");\n        }\n        return Qty({\"scalar\": this.scalar / other, \"numerator\": this.numerator, \"denominator\": this.denominator});\n      }\n      else if (isString(other)) {\n        other = Qty(other);\n      }\n\n      if (other.scalar === 0) {\n        throw new QtyError(\"Divide by zero\");\n      }\n\n      if (other.isTemperature()) {\n        throw new QtyError(\"Cannot divide with temperatures\");\n      }\n      else if (this.isTemperature() && !other.isUnitless()) {\n        throw new QtyError(\"Cannot divide with temperatures\");\n      }\n\n      // Quantities should be multiplied with same units if compatible, with base units else\n      var op1 = this;\n      var op2 = other;\n\n      // so as not to confuse results, multiplication and division between temperature degrees will maintain original unit info in num/den\n      // multiplication and division between deg[CFRK] can never factor each other out, only themselves: \"degK*degC/degC^2\" == \"degK/degC\"\n      if (op1.isCompatible(op2) && op1.signature !== 400) {\n        op2 = op2.to(op1);\n      }\n      var numdenscale = cleanTerms(op1.numerator, op1.denominator, op2.denominator, op2.numerator);\n\n      return Qty({\"scalar\": mulSafe(op1.scalar, numdenscale[2]) / op2.scalar, \"numerator\": numdenscale[0], \"denominator\": numdenscale[1]});\n    },\n\n    // Returns a Qty that is the inverse of this Qty,\n    inverse: function() {\n      if (this.isTemperature()) {\n        throw new QtyError(\"Cannot divide with temperatures\");\n      }\n      if (this.scalar === 0) {\n        throw new QtyError(\"Divide by zero\");\n      }\n      return Qty({\"scalar\": 1 / this.scalar, \"numerator\": this.denominator, \"denominator\": this.numerator});\n    }\n  });\n\n  function cleanTerms(num1, den1, num2, den2) {\n    function notUnity(val) {\n      return val !== UNITY;\n    }\n\n    num1 = num1.filter(notUnity);\n    num2 = num2.filter(notUnity);\n    den1 = den1.filter(notUnity);\n    den2 = den2.filter(notUnity);\n\n    var combined = {};\n\n    function combineTerms(terms, direction) {\n      var k;\n      var prefix;\n      var prefixValue;\n      for (var i = 0; i < terms.length; i++) {\n        if (PREFIX_VALUES[terms[i]]) {\n          k = terms[i + 1];\n          prefix = terms[i];\n          prefixValue = PREFIX_VALUES[prefix];\n          i++;\n        }\n        else {\n          k = terms[i];\n          prefix = null;\n          prefixValue = 1;\n        }\n        if (k && k !== UNITY) {\n          if (combined[k]) {\n            combined[k][0] += direction;\n            var combinedPrefixValue = combined[k][2] ? PREFIX_VALUES[combined[k][2]] : 1;\n            combined[k][direction === 1 ? 3 : 4] *= divSafe(prefixValue, combinedPrefixValue);\n          }\n          else {\n            combined[k] = [direction, k, prefix, 1, 1];\n          }\n        }\n      }\n    }\n\n    combineTerms(num1, 1);\n    combineTerms(den1, -1);\n    combineTerms(num2, 1);\n    combineTerms(den2, -1);\n\n    var num = [];\n    var den = [];\n    var scale = 1;\n\n    for (var prop in combined) {\n      if (combined.hasOwnProperty(prop)) {\n        var item = combined[prop];\n        var n;\n        if (item[0] > 0) {\n          for (n = 0; n < item[0]; n++) {\n            num.push(item[2] === null ? item[1] : [item[2], item[1]]);\n          }\n        }\n        else if (item[0] < 0) {\n          for (n = 0; n < -item[0]; n++) {\n            den.push(item[2] === null ? item[1] : [item[2], item[1]]);\n          }\n        }\n        scale *= divSafe(item[3], item[4]);\n      }\n    }\n\n    if (num.length === 0) {\n      num = UNITY_ARRAY;\n    }\n    if (den.length === 0) {\n      den = UNITY_ARRAY;\n    }\n\n    // Flatten\n    num = num.reduce(function(a,b) {\n      return a.concat(b);\n    }, []);\n    den = den.reduce(function(a,b) {\n      return a.concat(b);\n    }, []);\n\n    return [num, den, scale];\n  }\n\n  assign(Qty.prototype, {\n    eq: function(other) {\n      return this.compareTo(other) === 0;\n    },\n\n    lt: function(other) {\n      return this.compareTo(other) === -1;\n    },\n\n    lte: function(other) {\n      return this.eq(other) || this.lt(other);\n    },\n\n    gt: function(other) {\n      return this.compareTo(other) === 1;\n    },\n\n    gte: function(other) {\n      return this.eq(other) || this.gt(other);\n    },\n\n    // Compare two Qty objects. Throws an exception if they are not of compatible types.\n    // Comparisons are done based on the value of the quantity in base SI units.\n    //\n    // NOTE: We cannot compare inverses as that breaks the general compareTo contract:\n    //   if a.compareTo(b) < 0 then b.compareTo(a) > 0\n    //   if a.compareTo(b) == 0 then b.compareTo(a) == 0\n    //\n    //   Since \"10S\" == \".1ohm\" (10 > .1) and \"10ohm\" == \".1S\" (10 > .1)\n    //     Qty(\"10S\").inverse().compareTo(\"10ohm\") == -1\n    //     Qty(\"10ohm\").inverse().compareTo(\"10S\") == -1\n    //\n    //   If including inverses in the sort is needed, I suggest writing: Qty.sort(qtyArray,units)\n    compareTo: function(other) {\n      if (isString(other)) {\n        return this.compareTo(Qty(other));\n      }\n      if (!this.isCompatible(other)) {\n        throwIncompatibleUnits(this.units(), other.units());\n      }\n      if (this.baseScalar < other.baseScalar) {\n        return -1;\n      }\n      else if (this.baseScalar === other.baseScalar) {\n        return 0;\n      }\n      else if (this.baseScalar > other.baseScalar) {\n        return 1;\n      }\n    },\n\n    // Return true if quantities and units match\n    // Unit(\"100 cm\").same(Unit(\"100 cm\"))  # => true\n    // Unit(\"100 cm\").same(Unit(\"1 m\"))     # => false\n    same: function(other) {\n      return (this.scalar === other.scalar) && (this.units() === other.units());\n    }\n  });\n\n  assign(Qty.prototype, {\n    // returns true if no associated units\n    // false, even if the units are \"unitless\" like 'radians, each, etc'\n    isUnitless: function() {\n      return [this.numerator, this.denominator].every(function(item) {\n        return compareArray(item, UNITY_ARRAY);\n      });\n    },\n\n    /*\n    check to see if units are compatible, but not the scalar part\n    this check is done by comparing signatures for performance reasons\n    if passed a string, it will create a unit object with the string and then do the comparison\n    this permits a syntax like:\n    unit =~ \"mm\"\n    if you want to do a regexp on the unit string do this ...\n    unit.units =~ /regexp/\n    */\n    isCompatible: function(other) {\n      if (isString(other)) {\n        return this.isCompatible(Qty(other));\n      }\n\n      if (!(isQty(other))) {\n        return false;\n      }\n\n      if (other.signature !== undefined) {\n        return this.signature === other.signature;\n      }\n      else {\n        return false;\n      }\n    },\n\n    /*\n    check to see if units are inverse of each other, but not the scalar part\n    this check is done by comparing signatures for performance reasons\n    if passed a string, it will create a unit object with the string and then do the comparison\n    this permits a syntax like:\n    unit =~ \"mm\"\n    if you want to do a regexp on the unit string do this ...\n    unit.units =~ /regexp/\n    */\n    isInverse: function(other) {\n      return this.inverse().isCompatible(other);\n    },\n\n    // Returns 'true' if the Unit is represented in base units\n    isBase: function() {\n      if (this._isBase !== undefined) {\n        return this._isBase;\n      }\n      if (this.isDegrees() && this.numerator[0].match(/<(kelvin|temp-K)>/)) {\n        this._isBase = true;\n        return this._isBase;\n      }\n\n      this.numerator.concat(this.denominator).forEach(function(item) {\n        if (item !== UNITY && BASE_UNITS.indexOf(item) === -1 ) {\n          this._isBase = false;\n        }\n      }, this);\n      if (this._isBase === false) {\n        return this._isBase;\n      }\n      this._isBase = true;\n      return this._isBase;\n    }\n  });\n\n  function NestedMap() {}\n\n  NestedMap.prototype.get = function(keys) {\n\n    // Allows to pass key1, key2, ... instead of [key1, key2, ...]\n    if (arguments.length > 1) {\n      // Slower with Firefox but faster with Chrome than\n      // Array.prototype.slice.call(arguments)\n      // See http://jsperf.com/array-apply-versus-array-prototype-slice-call\n      keys = Array.apply(null, arguments);\n    }\n\n    return keys.reduce(function(map, key, index) {\n      if (map) {\n\n        var childMap = map[key];\n\n        if (index === keys.length - 1) {\n          return childMap ? childMap.data : undefined;\n        }\n        else {\n          return childMap;\n        }\n      }\n    },\n    this);\n  };\n\n  NestedMap.prototype.set = function(keys, value) {\n\n    if (arguments.length > 2) {\n      keys = Array.prototype.slice.call(arguments, 0, -1);\n      value = arguments[arguments.length - 1];\n    }\n\n    return keys.reduce(function(map, key, index) {\n\n      var childMap = map[key];\n      if (childMap === undefined) {\n        childMap = map[key] = {};\n      }\n\n      if (index === keys.length - 1) {\n        childMap.data = value;\n        return value;\n      }\n      else {\n        return childMap;\n      }\n    }, this);\n  };\n\n  /**\n   * Default formatter\n   *\n   * @param {number} scalar - scalar value\n   * @param {string} units - units as string\n   *\n   * @returns {string} formatted result\n   */\n  function defaultFormatter(scalar, units) {\n    return (scalar + \" \" + units).trim();\n  }\n\n  /**\n   *\n   * Configurable Qty default formatter\n   *\n   * @type {function}\n   *\n   * @param {number} scalar\n   * @param {string} units\n   *\n   * @returns {string} formatted result\n   */\n  Qty.formatter = defaultFormatter;\n\n  assign(Qty.prototype, {\n\n    // returns the 'unit' part of the Unit object without the scalar\n    units: function() {\n      if (this._units !== undefined) {\n        return this._units;\n      }\n\n      var numIsUnity = compareArray(this.numerator, UNITY_ARRAY);\n      var denIsUnity = compareArray(this.denominator, UNITY_ARRAY);\n      if (numIsUnity && denIsUnity) {\n        this._units = \"\";\n        return this._units;\n      }\n\n      var numUnits = stringifyUnits(this.numerator);\n      var denUnits = stringifyUnits(this.denominator);\n      this._units = numUnits + (denIsUnity ? \"\" : (\"/\" + denUnits));\n      return this._units;\n    },\n\n    /**\n     * Stringifies the quantity\n     * Deprecation notice: only units parameter is supported.\n     *\n     * @param {(number|string|Qty)} targetUnitsOrMaxDecimalsOrPrec -\n     *                              target units if string,\n     *                              max number of decimals if number,\n     *                              passed to #toPrec before converting if Qty\n     *\n     * @param {number=} maxDecimals - Maximum number of decimals of\n     *                                formatted output\n     *\n     * @returns {string} reparseable quantity as string\n     */\n    toString: function(targetUnitsOrMaxDecimalsOrPrec, maxDecimals) {\n      var targetUnits;\n      if (isNumber(targetUnitsOrMaxDecimalsOrPrec)) {\n        targetUnits = this.units();\n        maxDecimals = targetUnitsOrMaxDecimalsOrPrec;\n      }\n      else if (isString(targetUnitsOrMaxDecimalsOrPrec)) {\n        targetUnits = targetUnitsOrMaxDecimalsOrPrec;\n      }\n      else if (isQty(targetUnitsOrMaxDecimalsOrPrec)) {\n        return this.toPrec(targetUnitsOrMaxDecimalsOrPrec).toString(maxDecimals);\n      }\n\n      var out = this.to(targetUnits);\n\n      var outScalar = maxDecimals !== undefined ? round(out.scalar, maxDecimals) : out.scalar;\n      out = (outScalar + \" \" + out.units()).trim();\n      return out;\n    },\n\n    /**\n     * Format the quantity according to optional passed target units\n     * and formatter\n     *\n     * @param {string} [targetUnits=current units] -\n     *                 optional units to convert to before formatting\n     *\n     * @param {function} [formatter=Qty.formatter] -\n     *                   delegates formatting to formatter callback.\n     *                   formatter is called back with two parameters (scalar, units)\n     *                   and should return formatted result.\n     *                   If unspecified, formatting is delegated to default formatter\n     *                   set to Qty.formatter\n     *\n     * @example\n     * var roundingAndLocalizingFormatter = function(scalar, units) {\n     *   // localize or limit scalar to n max decimals for instance\n     *   // return formatted result\n     * };\n     * var qty = Qty('1.1234 m');\n     * qty.format(); // same units, default formatter => \"1.234 m\"\n     * qty.format(\"cm\"); // converted to \"cm\", default formatter => \"123.45 cm\"\n     * qty.format(roundingAndLocalizingFormatter); // same units, custom formatter => \"1,2 m\"\n     * qty.format(\"cm\", roundingAndLocalizingFormatter); // convert to \"cm\", custom formatter => \"123,4 cm\"\n     *\n     * @returns {string} quantity as string\n     */\n    format: function(targetUnits, formatter) {\n      if (arguments.length === 1) {\n        if (typeof targetUnits === \"function\") {\n          formatter = targetUnits;\n          targetUnits = undefined;\n        }\n      }\n\n      formatter = formatter || Qty.formatter;\n      var targetQty = this.to(targetUnits);\n      return formatter.call(this, targetQty.scalar, targetQty.units());\n    }\n  });\n\n  var stringifiedUnitsCache = new NestedMap();\n  /**\n   * Returns a string representing a normalized unit array\n   *\n   * @param {string[]} units Normalized unit array\n   * @returns {string} String representing passed normalized unit array and\n   *   suitable for output\n   *\n   */\n  function stringifyUnits(units) {\n\n    var stringified = stringifiedUnitsCache.get(units);\n    if (stringified) {\n      return stringified;\n    }\n\n    var isUnity = compareArray(units, UNITY_ARRAY);\n    if (isUnity) {\n      stringified = \"1\";\n    }\n    else {\n      stringified = simplify(getOutputNames(units)).join(\"*\");\n    }\n\n    // Cache result\n    stringifiedUnitsCache.set(units, stringified);\n\n    return stringified;\n  }\n\n  function getOutputNames(units) {\n    var unitNames = [], token, tokenNext;\n    for (var i = 0; i < units.length; i++) {\n      token = units[i];\n      tokenNext = units[i + 1];\n      if (PREFIX_VALUES[token]) {\n        unitNames.push(OUTPUT_MAP[token] + OUTPUT_MAP[tokenNext]);\n        i++;\n      }\n      else {\n        unitNames.push(OUTPUT_MAP[token]);\n      }\n    }\n    return unitNames;\n  }\n\n  function simplify(units) {\n    // this turns ['s','m','s'] into ['s2','m']\n\n    var unitCounts = units.reduce(function(acc, unit) {\n      var unitCounter = acc[unit];\n      if (!unitCounter) {\n        acc.push(unitCounter = acc[unit] = [unit, 0]);\n      }\n\n      unitCounter[1]++;\n\n      return acc;\n    }, []);\n\n    return unitCounts.map(function(unitCount) {\n      return unitCount[0] + (unitCount[1] > 1 ? unitCount[1] : \"\");\n    });\n  }\n\n  Qty.version = \"1.7.5\";\n\n  return Qty;\n\n})));\n","import Qty from 'js-quantities';\n\nexport function convertUnit(array, fromUnit, toUnit) {\n  fromUnit = normalize(fromUnit);\n  toUnit = normalize(toUnit);\n\n  if (fromUnit === toUnit) return array;\n\n  try {\n    const convert = Qty.swiftConverter(fromUnit, toUnit); // Configures converter\n    return convert(array);\n  } catch (e) {\n    return undefined;\n  }\n}\n\nfunction normalize(unit) {\n  unit = unit.replace(/°C/g, 'tempC');\n  unit = unit.replace(/°F/g, 'tempF');\n  unit = unit.replace(/(^|\\W)K(\\W|$)/g, '$1tempK$2');\n  return unit;\n}\n","import max from 'ml-array-max';\nimport min from 'ml-array-min';\nimport { xIsMonotone } from 'ml-spectra-processing';\n\nimport { convertUnit } from './convertUnit';\n\nexport function getConvertedVariable(variable, newUnits) {\n  const data =\n    variable.units !== newUnits // would be nice if convertUnit would allow typedArray\n      ? convertUnit(Array.from(variable.data), variable.units, newUnits)\n      : variable.data;\n  return {\n    units: newUnits,\n    label: variable.label.replace(`[${variable.units}]`, `[${newUnits}]`),\n    data,\n    min: min(data),\n    max: max(data),\n    isMonotone: xIsMonotone(data),\n  };\n}\n","import isAnyArray from 'is-any-array';\nimport max from 'ml-array-max';\nimport min from 'ml-array-min';\nimport { xIsMonotone } from 'ml-spectra-processing';\n\nimport { getNormalizedSpectrum } from './util/getNormalizedSpectrum';\nimport { getXYSpectrum } from './util/getXYSpectrum';\n\n/**\n * Class allowing to store and manipulate an analysis.\n * An analysis may contain one or more spectra that can be selected\n * based on their units\n * @class Analysis\n * @param {object} [options={}]\n * @param {string} [options.id=randomString] unique identifier\n * @param {string} [options.label=options.id] human redeable label\n */\nexport class Analysis {\n  constructor(options = {}) {\n    this.id = options.id || Math.random().toString(36).substring(2, 10);\n    this.label = options.label || this.id;\n    this.spectra = [];\n    this.cache = {};\n  }\n\n  /**\n   * Add a spectrum in the internal spectra variable\n   * @param {object} [variables]\n   * @param {object} [variables.x]\n   * @param {array} [variables.x.data]\n   * @param {array} [variables.x.units='x']\n   * @param {array} [variables.x.label='x']\n   * @param {object} [variables.y]\n   * @param {array} [variables.y.data]\n   * @param {array} [variables.y.units='y']\n   * @param {array} [variables.y.label='y']\n   * @param {object} [options={}]\n   * @param {string} [options.dataType='']\n   * @param {string} [options.title='']\n   *\n   */\n  pushSpectrum(variables, options = {}) {\n    this.spectra.push(standardizeData(variables, options));\n    this.cache = {};\n  }\n\n  /**\n   * Retrieve a Spectrum based on x/y units\n   * @param {object} [selector={}]\n   * @param {string} [selector.units] Units separated by vs like for example \"g vs °C\"\n   * @param {string} [selector.xUnits] if undefined takes the first variable\n   * @param {string} [selector.yUnits] if undefined takes the second variable\n   * @returns {Spectrum}\n   */\n  getXYSpectrum(selector = {}) {\n    let id = JSON.stringify(selector);\n    if (!this.cache[id]) {\n      this.cache[id] = getXYSpectrum(this.spectra, selector);\n    }\n    return this.cache[id];\n  }\n\n  /**\n   * Return the data object for specific x/y units with possibly some\n   * normalization options\n   * @param {object} [options={}]\n   * @param {object} [options.selector]\n   * @param {string} [options.selector.xUnits] // if undefined takes the first variable\n   * @param {string} [options.selector.yUnits] // if undefined takes the second variable\n   * @param {object} [options.normalization]\n   *\n   */\n  getNormalizedSpectrum(options = {}) {\n    const { normalization, selector } = options;\n    const spectrum = this.getXYSpectrum(selector);\n    if (!spectrum) return undefined;\n    return getNormalizedSpectrum(spectrum, normalization);\n  }\n\n  /**\n   * Returns the xLabel\n   * @param {object} [selector]\n   * @param {string} [selector.xUnits] // if undefined takes the first variable\n   * @param {string} [selector.yUnits] // if undefined takes the second variable\n   * @returns {string}\n   */\n  getXLabel(selector) {\n    return this.getXYSpectrum(selector).variables.x.label;\n  }\n\n  /**\n   * Returns the yLabel\n   * @param {object} [selector]\n   * @param {string} [selector.xUnits] // if undefined takes the first variable\n   * @param {string} [selector.yUnits] // if undefined takes the second variable\n   * @returns {string}\n   */\n  getYLabel(selector) {\n    return this.getXYSpectrum(selector).variables.y.label;\n  }\n}\n\n/**\n * Internal function that ensure the order of x / y array\n * @param {DataXY} [variables]\n * @param {object} [options={}]\n * @return {Spectrum}\n */\nfunction standardizeData(variables, options = {}) {\n  let { meta = {}, dataType = '', title = '' } = options;\n\n  let xVariable = variables.x;\n  let yVariable = variables.y;\n  if (!xVariable || !yVariable) {\n    throw Error('A spectrum must contain at least x and y variables');\n  }\n  if (!isAnyArray(xVariable.data) || !isAnyArray(yVariable.data)) {\n    throw Error('x and y variables must contain an array data');\n  }\n\n  let x = xVariable.data;\n  let reverse = x && x.length > 1 && x[0] > x[x.length - 1];\n\n  for (let key in variables) {\n    let variable = variables[key];\n    if (reverse) variable.data = variable.data.reverse();\n    variable.label = variable.label || key;\n    variable.units =\n      variable.units || variable.label.replace(/^.*[([](.*)[)\\]].*$/, '$1');\n    variable.min = min(variable.data);\n    variable.max = max(variable.data);\n    variable.isMonotone = xIsMonotone(variable.data);\n  }\n\n  return {\n    variables,\n    title,\n    dataType,\n    meta,\n  };\n}\n","import { convertUnit } from './convertUnit';\nimport { getConvertedVariable } from './getConvertedVariable';\n\n/**\n * Retrieve a spectrum with only X/Y data based on xUnits / yUnits and convert units\n * if necessary\n * @param {Array} [spectra] Array of spectra\n * @param {object} [selector={}]\n * @param {string} [selector.units] Units separated by vs like for example \"g vs °C\"\n * @param {string} [selector.xUnits]\n * @param {string} [selector.yUnits]\n * @returns {Spectrum}\n */\n\nexport function getXYSpectrum(spectra = [], selector = {}) {\n  if (spectra.length < 1) return;\n  for (let spectrum of spectra) {\n    let { xUnits, yUnits, units } = selector;\n    if (units && !xUnits && !yUnits) [yUnits, xUnits] = units.split(/\\s+vs\\s+/);\n    let x;\n    let y;\n    let variableNames = Object.keys(spectrum.variables);\n    if (!variableNames.length > 1) continue;\n\n    if (xUnits === undefined) {\n      x = spectrum.variables[variableNames[0]];\n    } else {\n      for (let key in spectrum.variables) {\n        let converted = convertUnit(1, spectrum.variables[key].units, xUnits);\n        if (converted) {\n          x = getConvertedVariable(spectrum.variables[key], xUnits);\n          break;\n        }\n      }\n    }\n    if (yUnits === undefined) {\n      y = spectrum.variables[variableNames[1]];\n    } else {\n      for (let key in spectrum.variables) {\n        let converted = convertUnit(1, spectrum.variables[key].units, yUnits);\n        if (converted) {\n          y = getConvertedVariable(spectrum.variables[key], yUnits);\n          break;\n        }\n      }\n    }\n    if (x && y) {\n      return {\n        title: spectrum.title,\n        dataType: spectrum.dataType,\n        meta: spectrum.meta,\n        variables: { x, y },\n      };\n    }\n  }\n  return;\n}\n","import max from 'ml-array-max';\nimport min from 'ml-array-min';\nimport normed from 'ml-array-normed';\nimport rescale from 'ml-array-rescale';\nimport equallySpaced from 'ml-array-xy-equally-spaced';\nimport filterX from 'ml-array-xy-filter-x';\nimport savitzkyGolay from 'ml-savitzky-golay';\nimport baselineCorrection from 'ml-baseline-correction-regression';\nimport {\n  xDivide,\n  xSubtract,\n  xMultiply,\n  xAdd,\n  xIsMonotone,\n} from 'ml-spectra-processing';\nimport Stat from 'ml-stat/array';\n/**\n *\n * @private\n * @param {object} spectrum\n * @param {object} [options={}]\n * @param {number} [options.from=x.min]\n * @param {number} [options.to=x.max]\n * @param {number} [options.numberOfPoints]\n * @param {String} [options.processing] Allows to calculate derivatives\n * @param {Array} [options.filters=[]] Array of object containing 'name' (centerMean, divideSD, normalize, rescale) and 'options'\n * @param {Array} [options.exclusions=[]]\n * @returns {DataXY}\n */\nexport function getNormalizedSpectrum(spectrum, options = {}) {\n  let data = {\n    x: spectrum.variables.x.data,\n    y: spectrum.variables.y.data,\n  };\n  let newSpectrum = {\n    variables: {\n      x: {\n        data: spectrum.variables.x.data,\n        units: spectrum.variables.x.units,\n        label: spectrum.variables.x.label,\n      },\n      y: {\n        data: spectrum.variables.y.data,\n        units: spectrum.variables.y.units,\n        label: spectrum.variables.y.label,\n      },\n    },\n  };\n  if (spectrum.title) newSpectrum.title = spectrum.title;\n  if (spectrum.dataType) newSpectrum.dataType = spectrum.dataType;\n  if (spectrum.meta) newSpectrum.meta = spectrum.meta;\n\n  let {\n    from = spectrum.variables.x.min,\n    to = spectrum.variables.x.max,\n    numberOfPoints,\n    filters = [],\n    exclusions = [],\n    processing = '',\n  } = options;\n  let { x, y } = filterX(data, { from, to });\n\n  switch (processing) {\n    case 'firstDerivative':\n      if (options.processing) {\n        newSpectrum.variables.y.units = '';\n        newSpectrum.variables.y.label =\n          newSpectrum.variables.y.label &&\n          `1° derivative of ${newSpectrum.variables.y.label.replace(\n            /\\s*\\[.*\\]/,\n            '',\n          )}`;\n        y = savitzkyGolay(y, 1, {\n          derivative: 1,\n          polynomial: 2,\n          windowSize: 5,\n        });\n        x = x.slice(2, x.length - 2);\n      }\n      break;\n    case 'secondDerivative':\n      if (options.processing) {\n        newSpectrum.variables.y.units = '';\n        newSpectrum.variables.y.label =\n          newSpectrum.variables.y.label &&\n          `2° derivative of ${newSpectrum.variables.y.label.replace(\n            /\\s*\\[.*\\]/,\n            '',\n          )}`;\n        y = savitzkyGolay(y, 1, {\n          derivative: 2,\n          polynomial: 2,\n          windowSize: 5,\n        });\n        x = x.slice(2, x.length - 2);\n      }\n      break;\n    default:\n  }\n\n  if (filters.length) {\n    // filters change the y axis, we get rid of the units\n    newSpectrum.variables.y.units = '';\n    newSpectrum.variables.y.label =\n      newSpectrum.variables.y.label &&\n      newSpectrum.variables.y.label.replace(/\\s*\\[.*\\]/, '');\n  }\n\n  for (let filter of filters) {\n    let filterOptions = filter.options || {};\n    switch (filter.name.toLowerCase()) {\n      case 'centermean': {\n        let mean = Stat.mean(y);\n        y = xSubtract(y, mean);\n        break;\n      }\n      case 'dividebysd': {\n        let std = Stat.standardDeviation(y);\n        y = xDivide(y, std);\n        break;\n      }\n      case 'normalize': {\n        y = normed(y, {\n          sumValue: filterOptions.value ? Number(filterOptions.value) : 1,\n          algorithm: 'absolute',\n        });\n        break;\n      }\n      case 'rescale': {\n        y = rescale(y, {\n          min: filterOptions.min ? Number(filterOptions.min) : 0,\n          max: filterOptions.max ? Number(filterOptions.max) : 1,\n        });\n        break;\n      }\n      case 'dividebymax': {\n        let maxValue = max(y);\n        y = xDivide(y, maxValue);\n        break;\n      }\n      case 'multiply': {\n        y = xMultiply(y, filterOptions.value ? Number(filterOptions.value) : 1);\n        break;\n      }\n      case 'add': {\n        y = xAdd(y, filterOptions.value ? Number(filterOptions.value) : 0);\n        break;\n      }\n      case 'baselinecorreciton': {\n        let result = baselineCorrection(x, y, filterOptions);\n        y = result.corrected;\n        break;\n      }\n      case '':\n      case undefined:\n        break;\n      default:\n        throw new Error(`Unknown process kind: ${process.kind}`);\n    }\n  }\n\n  if (!numberOfPoints) {\n    data = filterX({ x, y }, { from, to, exclusions });\n  } else {\n    data = equallySpaced({ x, y }, { from, to, numberOfPoints, exclusions });\n  }\n\n  newSpectrum.variables.x.data = x;\n  newSpectrum.variables.x.min = min(x);\n  newSpectrum.variables.x.max = max(x);\n  newSpectrum.variables.x.isMonotone = xIsMonotone(x);\n  newSpectrum.variables.y.data = y;\n  newSpectrum.variables.y.min = min(y);\n  newSpectrum.variables.y.max = max(y);\n  newSpectrum.variables.y.isMonotone = xIsMonotone(y);\n\n  return newSpectrum;\n}\n","const GC_MS_FIELDS = ['TIC', '.RIC', 'SCANNUMBER'];\n\nexport function complexChromatogram(result) {\n  let spectra = result.spectra;\n  let length = spectra.length;\n  let chromatogram = {\n    times: new Array(length),\n    series: {\n      ms: {\n        dimension: 2,\n        data: new Array(length),\n      },\n    },\n  };\n\n  let existingGCMSFields = [];\n  for (let i = 0; i < GC_MS_FIELDS.length; i++) {\n    let 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 (let i = 0; i < length; i++) {\n    let spectrum = spectra[i];\n    chromatogram.times[i] = spectrum.pageValue;\n    for (let j = 0; j < existingGCMSFields.length; j++) {\n      chromatogram.series[existingGCMSFields[j]].data[i] = parseFloat(\n        spectrum[existingGCMSFields[j]],\n      );\n    }\n    if (spectrum.data) {\n      chromatogram.series.ms.data[i] = [spectrum.data.x, spectrum.data.y];\n    }\n  }\n  result.chromatogram = chromatogram;\n}\n\nexport function isMSField(canonicDataLabel) {\n  return GC_MS_FIELDS.indexOf(canonicDataLabel) !== -1;\n}\n\nexport function convertMSFieldToLabel(value) {\n  return value.toLowerCase().replace(/[^a-z0-9]/g, '');\n}\n","export default function convertToFloatArray(stringArray) {\n  let floatArray = [];\n  for (let i = 0; i < stringArray.length; i++) {\n    floatArray.push(parseFloat(stringArray[i]));\n  }\n  return floatArray;\n}\n","export default 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  let yFactor = spectrum.yFactor;\n  let deltaX = spectrum.deltaX;\n\n  spectrum.isXYdata = true;\n  let currentData = { x: [], y: [] };\n  spectrum.data = currentData;\n\n  let currentX = spectrum.firstX;\n  let currentY = spectrum.firstY;\n\n  // we skip the first line\n  //\n  let endLine = false;\n  let ascii;\n  let i = 0;\n  for (; 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  let newLine = true;\n  let isDifference = false;\n  let isLastDifference = false;\n  let lastDifference = 0;\n  let isDuplicate = false;\n  let inComment = false;\n  let currentValue = 0; // can be a difference or a duplicate\n  let lastValue = 0; // must be the real last value\n  let isNegative = false;\n  let inValue = false;\n  let skipFirstValue = false;\n  let 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) {\n        // 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) {\n        // 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              } else if (!isDuplicate) {\n                lastValue = isNegative ? 0 - currentValue : currentValue;\n              }\n              let duplicate = isDuplicate ? currentValue - 1 : 1;\n              for (let j = 0; j < duplicate; j++) {\n                if (isLastDifference) {\n                  currentY += lastDifference;\n                } else {\n                  currentY = lastValue;\n                }\n                currentData.x.push(currentX);\n                currentData.y.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 if (ascii > 96 && ascii < 106) {\n          // negative SQZ digits a b c d e f g h i (ascii 97-105)\n          inValue = true;\n          isLastDifference = false;\n          currentValue = ascii - 96;\n          isNegative = true;\n        } else if (ascii === 115) {\n          // DUP digits S T U V W X Y Z s (ascii 83-90, 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 if (ascii > 73 && ascii < 83) {\n          // positive DIF digits % J K L M N O P Q R (ascii 37, 74-82)\n          inValue = true;\n          isDifference = true;\n          currentValue = ascii - 73;\n        } else if (ascii > 105 && ascii < 115) {\n          // negative DIF digits j k l m n o p q r (ascii 106-114)\n          inValue = true;\n          isDifference = true;\n          currentValue = ascii - 105;\n          isNegative = true;\n        } else if (ascii === 36 && value.charCodeAt(i + 1) === 36) {\n          // $ sign, we need to check the next one\n          inValue = true;\n          inComment = true;\n        } else if (ascii === 37) {\n          // positive DIF digits % J K L M N O P Q R (ascii 37, 74-82)\n          inValue = true;\n          isDifference = true;\n          currentValue = 0;\n          isNegative = false;\n        } else if (ascii === 45) {\n          // a \"-\"\n          // check if after there is a number, decimal or comma\n          let ascii2 = value.charCodeAt(i + 1);\n          if (\n            (ascii2 >= 48 && ascii2 <= 57) ||\n            ascii2 === 44 ||\n            ascii2 === 46\n          ) {\n            inValue = true;\n            if (!newLine) 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","const removeCommentRegExp = /\\$\\$.*/;\nconst peakTableSplitRegExp = /[,\\t ]+/;\n\nexport default function parsePeakTable(spectrum, value, result) {\n  spectrum.isPeaktable = true;\n\n  if (!spectrum.variables || Object.keys(spectrum.variables) === 2) {\n    parseXY(spectrum, value, result);\n  } else {\n    parseXYZ(spectrum, value, result);\n  }\n\n  // we will add the data in the variables\n  if (spectrum.variables) {\n    for (let key in spectrum.variables) {\n      spectrum.variables[key].data = spectrum.data[key];\n    }\n  }\n}\n\nfunction parseXY(spectrum, value, result) {\n  let currentData = { x: [], y: [] };\n  spectrum.data = currentData;\n\n  // counts for around 20% of the time\n  let lines = value.split(/,? *,?[;\\r\\n]+ */);\n\n  for (let i = 1; i < lines.length; i++) {\n    let values = lines[i]\n      .trim()\n      .replace(removeCommentRegExp, '')\n      .split(peakTableSplitRegExp);\n    if (values.length % 2 === 0) {\n      for (let j = 0; j < values.length; j = j + 2) {\n        // takes around 40% of the time to add and parse the 2 values nearly exclusively because of parseFloat\n        currentData.x.push(parseFloat(values[j]) * spectrum.xFactor);\n        currentData.y.push(parseFloat(values[j + 1]) * spectrum.yFactor);\n      }\n    } else {\n      result.logs.push(`Format error: ${values}`);\n    }\n  }\n}\n\nfunction parseXYZ(spectrum, value, result) {\n  let currentData = {};\n  let variables = Object.keys(spectrum.variables);\n  let numberOfVariables = variables.length;\n  variables.forEach((variable) => (currentData[variable] = []));\n  spectrum.data = currentData;\n\n  // counts for around 20% of the time\n  let lines = value.split(/,? *,?[;\\r\\n]+ */);\n\n  for (let i = 1; i < lines.length; i++) {\n    let values = lines[i]\n      .trim()\n      .replace(removeCommentRegExp, '')\n      .split(peakTableSplitRegExp);\n    if (values.length % numberOfVariables === 0) {\n      for (let j = 0; j < values.length; j++) {\n        // todo should try to find a xFactor (y, ...)\n        currentData[variables[j % numberOfVariables]].push(\n          parseFloat(values[j]),\n        );\n      }\n    } else {\n      result.logs.push(`Format error: ${values}`);\n    }\n  }\n}\n","export default function parseXYA(spectrum, value) {\n  let removeSymbolRegExp = /(\\(+|\\)+|<+|>+|\\s+)/g;\n\n  spectrum.isXYAdata = true;\n  let values;\n  let currentData = { x: [], y: [] };\n  spectrum.data = currentData;\n\n  let lines = value.split(/,? *,?[;\\r\\n]+ */);\n\n  for (let i = 1; i < lines.length; i++) {\n    values = lines[i].trim().replace(removeSymbolRegExp, '').split(',');\n    currentData.x.push(parseFloat(values[0]));\n    currentData.y.push(parseFloat(values[1]));\n  }\n}\n","import convertTo3DZ from './convertTo3DZ';\nimport generateContourLines from './generateContourLines';\n\nexport default function add2D(result, options) {\n  let 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","import getMedian from 'ml-array-median';\n\nexport default function convertTo3DZ(spectra) {\n  let minZ = spectra[0].data.y[0];\n  let maxZ = minZ;\n  let ySize = spectra.length;\n  let xSize = spectra[0].data.x.length;\n\n  let z = new Array(ySize);\n  for (let i = 0; i < ySize; i++) {\n    z[i] = spectra[i].data.y;\n    for (let j = 0; j < xSize; j++) {\n      let value = z[i][j];\n      if (value < minZ) minZ = value;\n      if (value > maxZ) maxZ = value;\n    }\n  }\n\n  const firstX = spectra[0].data.x[0];\n  const lastX = spectra[0].data.x[spectra[0].data.x.length - 1]; // has to be -2 because it is a 1D array [x,y,x,y,...]\n  const firstY = spectra[0].pageValue;\n  const lastY = spectra[ySize - 1].pageValue;\n\n  // Because the min / max value are the only information about the matrix if we invert\n  // min and max we need to invert the array\n  if (firstX > lastX) {\n    for (let spectrum of z) {\n      spectrum.reverse();\n    }\n  }\n  if (firstY > lastY) {\n    z.reverse();\n  }\n\n  return {\n    z: z,\n    minX: Math.min(firstX, lastX),\n    maxX: Math.max(firstX, lastX),\n    minY: Math.min(firstY, lastY),\n    maxY: Math.max(firstY, lastY),\n    minZ: minZ,\n    maxZ: maxZ,\n    noise: getMedian(z[0].map(Math.abs)),\n  };\n}\n","export default function generateContourLines(zData, options) {\n  let noise = zData.noise;\n  let z = zData.z;\n  let povarHeight0, povarHeight1, povarHeight2, povarHeight3;\n  let isOver0, isOver1, isOver2, isOver3;\n  let nbSubSpectra = z.length;\n  let nbPovars = z[0].length;\n  let pAx, pAy, pBx, pBy;\n\n  let x0 = zData.minX;\n  let xN = zData.maxX;\n  let dx = (xN - x0) / (nbPovars - 1);\n  let y0 = zData.minY;\n  let yN = zData.maxY;\n  let dy = (yN - y0) / (nbSubSpectra - 1);\n  let minZ = zData.minZ;\n  let 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  let iter = options.nbContourLevels * 2;\n  let contourLevels = new Array(iter);\n  let lineZValue;\n  for (let level = 0; level < iter; level++) {\n    // multiply by 2 for positif and negatif\n    let contourLevel = {};\n    contourLevels[level] = contourLevel;\n    let side = level % 2;\n    let factor =\n      (maxZ - options.noiseMultiplier * noise) *\n      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    let lines = [];\n    contourLevel.zValue = lineZValue;\n    contourLevel.lines = lines;\n\n    if (lineZValue <= minZ || lineZValue >= maxZ) continue;\n\n    for (let iSubSpectra = 0; iSubSpectra < nbSubSpectra - 1; iSubSpectra++) {\n      let subSpectra = z[iSubSpectra];\n      let subSpectraAfter = z[iSubSpectra + 1];\n      for (let 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 =\n            povar + (lineZValue - povarHeight0) / (povarHeight1 - povarHeight0);\n          pAy = iSubSpectra;\n          pBx = povar;\n          pBy =\n            iSubSpectra +\n            (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 =\n            iSubSpectra +\n            1 -\n            (lineZValue - povarHeight3) / (povarHeight1 - povarHeight3);\n          pBx =\n            povar +\n            1 -\n            (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 =\n            (povar +\n              1 -\n              (lineZValue - povarHeight1) / (povarHeight2 - povarHeight1)) *\n              dx +\n            x0;\n          pAy =\n            (iSubSpectra +\n              (lineZValue - povarHeight1) / (povarHeight2 - povarHeight1)) *\n              dy +\n            y0;\n          if (isOver1 !== isOver0) {\n            pBx =\n              povar +\n              1 -\n              (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 =\n              iSubSpectra +\n              1 -\n              (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 =\n              iSubSpectra +\n              (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 =\n              povar +\n              (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 * 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","// sources:\n// https://en.wikipedia.org/wiki/Gyromagnetic_ratio\n\n// TODO: can we have a better source and more digits ? @jwist\n\nexport const gyromagneticRatio = {\n  '1H': 267.52218744e6,\n  '2H': 41.065e6,\n  '3H': 285.3508e6,\n  '3He': -203.789e6,\n  '7Li': 103.962e6,\n  '13C': 67.28284e6,\n  '14N': 19.331e6,\n  '15N': -27.116e6,\n  '17O': -36.264e6,\n  '19F': 251.662e6,\n  '23Na': 70.761e6,\n  '27Al': 69.763e6,\n  '29Si': -53.19e6,\n  '31P': 108.291e6,\n  '57Fe': 8.681e6,\n  '63Cu': 71.118e6,\n  '67Zn': 16.767e6,\n  '129Xe': -73.997e6,\n};\n","export default function profiling(result, action, options) {\n  if (result.profiling) {\n    result.profiling.push({\n      action,\n      time: Date.now() - options.start,\n    });\n  }\n}\n","export default function simpleChromatogram(result) {\n  let data = result.spectra[0].data;\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","import add2D from './2d/add2D';\nimport { complexChromatogram } from './complexChromatogram';\nimport postProcessingNMR from './postProcessingNMR';\nimport profiling from './profiling';\nimport simpleChromatogram from './simpleChromatogram';\n\nexport default function postProcessing(entriesFlat, result, options) {\n  // converting Hz to ppm\n  postProcessingNMR(entriesFlat);\n\n  for (let entry of entriesFlat) {\n    if (Object.keys(entry.ntuples).length > 0) {\n      let newNtuples = [];\n      let keys = Object.keys(entry.ntuples);\n      for (let i = 0; i < keys.length; i++) {\n        let key = keys[i];\n        let values = entry.ntuples[key];\n        for (let j = 0; j < values.length; j++) {\n          if (!newNtuples[j]) newNtuples[j] = {};\n          newNtuples[j][key] = values[j];\n        }\n      }\n      entry.ntuples = newNtuples;\n    }\n\n    if (entry.twoD && options.wantXY) {\n      add2D(entry, options);\n\n      profiling(result, 'Finished countour plot calculation', options);\n\n      if (!options.keepSpectra) {\n        delete entry.spectra;\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 (entry.spectra.length > 1) {\n        complexChromatogram(entry);\n      } else {\n        simpleChromatogram(entry);\n      }\n      profiling(result, 'Finished chromatogram calculation', options);\n    }\n  }\n}\n","import { gyromagneticRatio } from 'nmr-processing';\n\nexport default function postProcessingNMR(entriesFlat) {\n  // specific NMR functions\n  let observeFrequency = 0;\n  let shiftOffsetVal = 0;\n\n  for (let entry of entriesFlat) {\n    for (let spectrum of entry.spectra) {\n      if (entry.ntuples && entry.ntuples.symbol) {\n        if (!observeFrequency && spectrum.observeFrequency) {\n          observeFrequency = spectrum.observeFrequency;\n        }\n        if (!shiftOffsetVal && spectrum.shiftOffsetVal) {\n          shiftOffsetVal = spectrum.shiftOffsetVal;\n        }\n      } else {\n        observeFrequency = spectrum.observeFrequency;\n        shiftOffsetVal = spectrum.shiftOffsetVal;\n      }\n\n      if (observeFrequency) {\n        if (spectrum.xUnits && spectrum.xUnits.toUpperCase().includes('HZ')) {\n          spectrum.xUnits = 'PPM';\n          spectrum.xFactor = spectrum.xFactor / observeFrequency;\n          spectrum.firstX = spectrum.firstX / observeFrequency;\n          spectrum.lastX = spectrum.lastX / observeFrequency;\n          spectrum.deltaX = spectrum.deltaX / observeFrequency;\n          for (let i = 0; i < spectrum.data.x.length; i++) {\n            spectrum.data.x[i] /= observeFrequency;\n          }\n        }\n      }\n      if (shiftOffsetVal) {\n        let shift = spectrum.firstX - shiftOffsetVal;\n        spectrum.firstX = spectrum.firstX - shift;\n        spectrum.lastX = spectrum.lastX - shift;\n        for (let i = 0; i < spectrum.data.x.length; i++) {\n          spectrum.data.x[i] -= shift;\n        }\n      }\n\n      if (\n        observeFrequency &&\n        entry.ntuples &&\n        entry.ntuples.symbol &&\n        entry.ntuples.nucleus\n      ) {\n        let unit = '';\n        let pageSymbolIndex = entry.ntuples.symbol.indexOf(spectrum.pageSymbol);\n        if (entry.ntuples.units && entry.ntuples.units[pageSymbolIndex]) {\n          unit = entry.ntuples.units[pageSymbolIndex];\n        }\n        if (unit !== 'PPM') {\n          if (pageSymbolIndex !== 0) {\n            throw Error('Not sure about this ntuples format');\n          }\n\n          let ratio0 = gyromagneticRatio[entry.ntuples.nucleus[0]];\n          let ratio1 = gyromagneticRatio[entry.ntuples.nucleus[1]];\n          if (!ratio0 || !ratio1) {\n            throw Error('Problem with determination of gyromagnetic ratio');\n          }\n          let ratio = (ratio0 / ratio1) * observeFrequency;\n          spectrum.pageValue /= ratio;\n        }\n      }\n    }\n  }\n}\n","export default function prepareNtuplesDatatable(currentEntry, spectrum, kind) {\n  let xIndex = -1;\n  let yIndex = -1;\n  let firstVariable = '';\n  let secondVariable = '';\n  if (kind.indexOf('++') > 0) {\n    firstVariable = kind.replace(/.*\\(([a-zA-Z0-9]+)\\+\\+.*/, '$1');\n    secondVariable = kind.replace(/.*\\.\\.([a-zA-Z0-9]+).*/, '$1');\n  } else {\n    kind = kind.replace(/[^a-zA-Z]/g, '');\n    firstVariable = kind.charAt(0);\n    secondVariable = kind.charAt(1);\n    spectrum.variables = {};\n    for (let symbol of kind) {\n      let lowerCaseSymbol = symbol.toLowerCase();\n      let index = currentEntry.ntuples.symbol.indexOf(symbol);\n      if (index === -1) throw Error(`Symbol undefined: ${symbol}`);\n      spectrum.variables[lowerCaseSymbol] = {};\n      for (let key in currentEntry.ntuples) {\n        if (currentEntry.ntuples[key][index]) {\n          spectrum.variables[lowerCaseSymbol][key.replace(/^var/, '')] =\n            currentEntry.ntuples[key][index];\n        }\n      }\n    }\n  }\n  xIndex = currentEntry.ntuples.symbol.indexOf(firstVariable);\n  yIndex = currentEntry.ntuples.symbol.indexOf(secondVariable);\n\n  if (xIndex === -1) xIndex = 0;\n  if (yIndex === -1) yIndex = 0;\n\n  if (currentEntry.ntuples.first) {\n    if (currentEntry.ntuples.first.length > xIndex) {\n      spectrum.firstX = currentEntry.ntuples.first[xIndex];\n    }\n    if (currentEntry.ntuples.first.length > yIndex) {\n      spectrum.firstY = currentEntry.ntuples.first[yIndex];\n    }\n  }\n  if (currentEntry.ntuples.last) {\n    if (currentEntry.ntuples.last.length > xIndex) {\n      spectrum.lastX = currentEntry.ntuples.last[xIndex];\n    }\n    if (currentEntry.ntuples.last.length > yIndex) {\n      spectrum.lastY = currentEntry.ntuples.last[yIndex];\n    }\n  }\n  if (\n    currentEntry.ntuples.vardim &&\n    currentEntry.ntuples.vardim.length > xIndex\n  ) {\n    spectrum.nbPoints = currentEntry.ntuples.vardim[xIndex];\n  }\n  if (currentEntry.ntuples.factor) {\n    if (currentEntry.ntuples.factor.length > xIndex) {\n      spectrum.xFactor = currentEntry.ntuples.factor[xIndex];\n    }\n    if (currentEntry.ntuples.factor.length > yIndex) {\n      spectrum.yFactor = currentEntry.ntuples.factor[yIndex];\n    }\n  }\n  if (currentEntry.ntuples.units) {\n    if (currentEntry.ntuples.units.length > xIndex) {\n      if (\n        currentEntry.ntuples.varname &&\n        currentEntry.ntuples.varname[xIndex]\n      ) {\n        spectrum.xUnits = `${currentEntry.ntuples.varname[xIndex]} [${currentEntry.ntuples.units[xIndex]}]`;\n      } else {\n        spectrum.xUnits = currentEntry.ntuples.units[xIndex];\n      }\n    }\n    if (currentEntry.ntuples.units.length > yIndex) {\n      if (\n        currentEntry.ntuples.varname &&\n        currentEntry.ntuples.varname[yIndex]\n      ) {\n        spectrum.yUnits = `${currentEntry.ntuples.varname[yIndex]} [${currentEntry.ntuples.units[yIndex]}]`;\n      } else {\n        spectrum.yUnits = currentEntry.ntuples.units[yIndex];\n      }\n    }\n  }\n}\n","export default function prepareSpectrum(spectrum) {\n  if (!spectrum.xFactor) spectrum.xFactor = 1;\n  if (!spectrum.yFactor) spectrum.yFactor = 1;\n}\n","import { isMSField, convertMSFieldToLabel } from './complexChromatogram';\nimport convertToFloatArray from './convertToFloatArray';\nimport fastParseXYData from './parse/fastParseXYData';\nimport parsePeakTable from './parse/parsePeakTable';\nimport parseXYA from './parse/parseXYA';\nimport postProcessing from './postProcessing';\nimport prepareNtuplesDatatable from './prepareNtuplesDatatable';\nimport prepareSpectrum from './prepareSpectrum';\nimport profiling from './profiling';\n\n// the following RegExp can only be used for XYdata, some peakTables have values with a \"E-5\" ...\nconst ntuplesSeparator = /[ \\t]*,[ \\t]*/;\n\nclass Spectrum {}\n\nconst defaultOptions = {\n  keepRecordsRegExp: /^$/,\n  canonicDataLabels: true,\n  canonicMetadataLabels: false,\n  dynamicTyping: true,\n  withoutXY: false,\n  chromatogram: false,\n  keepSpectra: false,\n  noContour: false,\n  nbContourLevels: 7,\n  noiseMultiplier: 5,\n  profiling: false,\n};\n\n/**\n *\n * @param {text} jcamp\n * @param {object} [options]\n * @param {number} [options.keepRecordsRegExp=/^$/] By default we don't keep meta information\n * @param {number} [options.canonicDataLabels=true] Canonize the Labels (uppercase without symbol)\n * @param {number} [options.canonicMetadataLabels=false] Canonize the metadata Labels (uppercase without symbol)\n * @param {number} [options.dynamicTyping=false] Convert numbers to Number\n * @param {number} [options.withoutXY=false] Remove the XY data\n * @param {number} [options.chromatogram=false] Special post-processing for GC / HPLC / MS\n * @param {number} [options.keepSpectra=false] Force to keep the spectra in case of 2D\n * @param {number} [options.noContour=false] Don't calculate countour in case of 2D\n * @param {number} [options.nbContourLevels=7] Number of positive / negative contour levels to calculate\n * @param {number} [options.noiseMultiplier=5] Define for 2D the level as 5 times the median as default\n * @param {number} [options.profiling=false] Add profiling information\n */\n\nexport default function convert(jcamp, options = {}) {\n  options = Object.assign({}, defaultOptions, options);\n  options.wantXY = !options.withoutXY;\n  options.start = Date.now();\n\n  let entriesFlat = [];\n\n  let result = {\n    profiling: options.profiling ? [] : false,\n    logs: [],\n    entries: [],\n  };\n\n  let tmpResult = { children: [] };\n  let currentEntry = tmpResult;\n  let parentsStack = [];\n\n  let spectrum = new Spectrum();\n\n  if (typeof jcamp !== 'string') {\n    throw new TypeError('the JCAMP should be a string');\n  }\n\n  profiling(result, 'Before split to LDRS', options);\n\n  let ldrs = jcamp.replace(/[\\r\\n]+##/g, '\\n##').split('\\n##');\n\n  profiling(result, 'Split to LDRS', options);\n\n  if (ldrs[0]) ldrs[0] = ldrs[0].replace(/^[\\r\\n ]*##/, '');\n\n  for (let ldr of ldrs) {\n    // This is a new LDR\n    let position = ldr.indexOf('=');\n    let dataLabel = position > 0 ? ldr.substring(0, position) : ldr;\n    let dataValue = position > 0 ? ldr.substring(position + 1).trim() : '';\n\n    let canonicDataLabel = dataLabel.replace(/[_ -]/g, '').toUpperCase();\n\n    if (canonicDataLabel === 'DATATABLE') {\n      let endLine = dataValue.indexOf('\\n');\n      if (endLine === -1) endLine = dataValue.indexOf('\\r');\n      if (endLine > 0) {\n        // ##DATA TABLE= (X++(I..I)), XYDATA\n        // We need to find the variables\n\n        let infos = dataValue.substring(0, endLine).split(/[ ,;\\t]+/);\n        prepareNtuplesDatatable(currentEntry, spectrum, infos[0]);\n\n        spectrum.datatable = infos[0];\n        if (infos[1] && infos[1].indexOf('PEAKS') > -1) {\n          canonicDataLabel = 'PEAKTABLE';\n        } else if (\n          infos[1] &&\n          (infos[1].indexOf('XYDATA') || infos[0].indexOf('++') > 0)\n        ) {\n          canonicDataLabel = 'XYDATA';\n          spectrum.deltaX =\n            (spectrum.lastX - spectrum.firstX) / (spectrum.nbPoints - 1);\n        }\n      }\n    }\n\n    if (canonicDataLabel === 'XYDATA') {\n      if (options.wantXY) {\n        prepareSpectrum(spectrum);\n        // well apparently we should still consider it is a PEAK TABLE if there are no '++' after\n        if (dataValue.match(/.*\\+\\+.*/)) {\n          // ex: (X++(Y..Y))\n          if (!spectrum.deltaX) {\n            spectrum.deltaX =\n              (spectrum.lastX - spectrum.firstX) / (spectrum.nbPoints - 1);\n          }\n          fastParseXYData(spectrum, dataValue, result);\n        } else {\n          parsePeakTable(spectrum, dataValue, result);\n        }\n        currentEntry.spectra.push(spectrum);\n        spectrum = new Spectrum();\n      }\n      continue;\n    } else if (canonicDataLabel === 'PEAKTABLE') {\n      if (options.wantXY) {\n        prepareSpectrum(spectrum);\n        parsePeakTable(spectrum, dataValue, result);\n        currentEntry.spectra.push(spectrum);\n        spectrum = new Spectrum();\n      }\n      continue;\n    }\n    if (canonicDataLabel === 'PEAKASSIGNMENTS') {\n      if (options.wantXY) {\n        if (dataValue.match(/.*(XYA).*/)) {\n          // ex: (XYA)\n          parseXYA(spectrum, dataValue);\n        }\n        currentEntry.spectra.push(spectrum);\n        spectrum = new Spectrum();\n      }\n      continue;\n    }\n\n    if (canonicDataLabel === 'TITLE') {\n      let parentEntry = currentEntry;\n      if (!parentEntry.children) {\n        parentEntry.children = [];\n      }\n      currentEntry = {\n        spectra: [],\n        ntuples: {},\n        info: {},\n        meta: {},\n      };\n      parentEntry.children.push(currentEntry);\n      parentsStack.push(parentEntry);\n      entriesFlat.push(currentEntry);\n      currentEntry.title = dataValue;\n    } else if (canonicDataLabel === 'DATATYPE') {\n      currentEntry.dataType = dataValue;\n      if (dataValue.toLowerCase().indexOf('nd') > -1) {\n        currentEntry.twoD = true;\n      }\n    } else if (canonicDataLabel === 'NTUPLES') {\n      if (dataValue.toLowerCase().indexOf('nd') > -1) {\n        currentEntry.twoD = true;\n      }\n    } else if (canonicDataLabel === 'DATACLASS') {\n      currentEntry.dataClass = dataValue;\n    } else if (canonicDataLabel === 'XUNITS') {\n      spectrum.xUnits = dataValue;\n    } else if (canonicDataLabel === 'YUNITS') {\n      spectrum.yUnits = dataValue;\n    } else if (canonicDataLabel === 'FIRSTX') {\n      spectrum.firstX = parseFloat(dataValue);\n    } else if (canonicDataLabel === 'LASTX') {\n      spectrum.lastX = parseFloat(dataValue);\n    } else if (canonicDataLabel === 'FIRSTY') {\n      spectrum.firstY = parseFloat(dataValue);\n    } else if (canonicDataLabel === 'LASTY') {\n      spectrum.lastY = parseFloat(dataValue);\n    } else if (canonicDataLabel === 'NPOINTS') {\n      spectrum.nbPoints = parseFloat(dataValue);\n    } else if (canonicDataLabel === 'XFACTOR') {\n      spectrum.xFactor = parseFloat(dataValue);\n    } else if (canonicDataLabel === 'YFACTOR') {\n      spectrum.yFactor = parseFloat(dataValue);\n    } else if (canonicDataLabel === 'MAXX') {\n      spectrum.maxX = parseFloat(dataValue);\n    } else if (canonicDataLabel === 'MINX') {\n      spectrum.minX = parseFloat(dataValue);\n    } else if (canonicDataLabel === 'MAXY') {\n      spectrum.maxY = parseFloat(dataValue);\n    } else if (canonicDataLabel === 'MINY') {\n      spectrum.minY = parseFloat(dataValue);\n    } else if (canonicDataLabel === 'DELTAX') {\n      spectrum.deltaX = parseFloat(dataValue);\n    } else if (\n      canonicDataLabel === '.OBSERVEFREQUENCY' ||\n      canonicDataLabel === '$SFO1'\n    ) {\n      if (!spectrum.observeFrequency) {\n        spectrum.observeFrequency = parseFloat(dataValue);\n      }\n    } else if (canonicDataLabel === '.OBSERVENUCLEUS') {\n      if (!spectrum.xType) {\n        currentEntry.xType = dataValue.replace(/[^a-zA-Z0-9]/g, '');\n      }\n    } else if (canonicDataLabel === '$OFFSET') {\n      // OFFSET for Bruker spectra\n      currentEntry.shiftOffsetNum = 0;\n      if (!spectrum.shiftOffsetVal) {\n        spectrum.shiftOffsetVal = parseFloat(dataValue);\n      }\n    } else if (canonicDataLabel === '$REFERENCEPOINT') {\n      // OFFSET for Varian spectra\n      // if we activate this part it does not work for ACD specmanager\n      //         } else if (canonicDataLabel=='.SHIFTREFERENCE') {   // OFFSET FOR Bruker Spectra\n      //                 var parts = dataValue.split(/ *, */);\n      //                 currentEntry.shiftOffsetNum = parseInt(parts[2].trim());\n      //                 spectrum.shiftOffsetVal = parseFloat(parts[3].trim());\n    } else if (canonicDataLabel === 'VARNAME') {\n      currentEntry.ntuples.varname = dataValue.split(ntuplesSeparator);\n    } else if (canonicDataLabel === 'SYMBOL') {\n      currentEntry.ntuples.symbol = dataValue.split(ntuplesSeparator);\n    } else if (canonicDataLabel === 'VARTYPE') {\n      currentEntry.ntuples.vartype = dataValue.split(ntuplesSeparator);\n    } else if (canonicDataLabel === 'VARFORM') {\n      currentEntry.ntuples.varform = dataValue.split(ntuplesSeparator);\n    } else if (canonicDataLabel === 'VARDIM') {\n      currentEntry.ntuples.vardim = convertToFloatArray(\n        dataValue.split(ntuplesSeparator),\n      );\n    } else if (canonicDataLabel === 'UNITS') {\n      currentEntry.ntuples.units = dataValue.split(ntuplesSeparator);\n    } else if (canonicDataLabel === 'FACTOR') {\n      currentEntry.ntuples.factor = convertToFloatArray(\n        dataValue.split(ntuplesSeparator),\n      );\n    } else if (canonicDataLabel === 'FIRST') {\n      currentEntry.ntuples.first = convertToFloatArray(\n        dataValue.split(ntuplesSeparator),\n      );\n    } else if (canonicDataLabel === 'LAST') {\n      currentEntry.ntuples.last = convertToFloatArray(\n        dataValue.split(ntuplesSeparator),\n      );\n    } else if (canonicDataLabel === 'MIN') {\n      currentEntry.ntuples.min = convertToFloatArray(\n        dataValue.split(ntuplesSeparator),\n      );\n    } else if (canonicDataLabel === 'MAX') {\n      currentEntry.ntuples.max = convertToFloatArray(\n        dataValue.split(ntuplesSeparator),\n      );\n    } else if (canonicDataLabel === '.NUCLEUS') {\n      if (currentEntry.ntuples) {\n        currentEntry.ntuples.nucleus = dataValue.split(ntuplesSeparator);\n      }\n      if (currentEntry.twoD) {\n        currentEntry.yType = dataValue.split(ntuplesSeparator)[0];\n      }\n    } else if (canonicDataLabel === 'PAGE') {\n      spectrum.page = dataValue.trim();\n      spectrum.pageValue = parseFloat(dataValue.replace(/^.*=/, ''));\n      spectrum.pageSymbol = spectrum.page.replace(/[=].*/, '');\n    } else if (canonicDataLabel === 'RETENTIONTIME') {\n      spectrum.pageValue = parseFloat(dataValue);\n    } else if (isMSField(canonicDataLabel)) {\n      spectrum[convertMSFieldToLabel(canonicDataLabel)] = dataValue;\n    } else if (canonicDataLabel === 'SAMPLEDESCRIPTION') {\n      spectrum.sampleDescription = dataValue;\n    } else if (canonicDataLabel === 'END') {\n      currentEntry = parentsStack.pop();\n    }\n\n    if (\n      currentEntry &&\n      currentEntry.info &&\n      currentEntry.meta &&\n      canonicDataLabel.match(options.keepRecordsRegExp)\n    ) {\n      let value = dataValue.trim();\n      let target, label;\n      if (dataLabel.startsWith('$')) {\n        label = options.canonicMetadataLabels\n          ? canonicDataLabel.substring(1)\n          : dataLabel.substring(1);\n        target = currentEntry.meta;\n      } else {\n        label = options.canonicDataLabels ? canonicDataLabel : dataLabel;\n        target = currentEntry.info;\n      }\n\n      if (options.dynamicTyping) {\n        let parsedValue = Number.parseFloat(value);\n        if (!Number.isNaN(parsedValue)) value = parsedValue;\n      }\n      if (target[label]) {\n        if (!Array.isArray(target[label])) {\n          target[label] = [target[label]];\n        }\n        target[label].push(value);\n      } else {\n        target[label] = value;\n      }\n    }\n  }\n\n  profiling(result, 'Finished parsing', options);\n\n  postProcessing(entriesFlat, result, options);\n\n  profiling(result, 'Total time', options);\n\n  /*\n  if (result.children && result.children.length>0) {\n    result = { ...result, ...result.children[0] };\n  }\n  */\n  result.entries = tmpResult.children;\n  result.flatten = entriesFlat;\n\n  return result;\n}\n","export function addStyle(serie, spectrum, options = {}) {\n  let { color = '#A9A9A9', opacity = 1, lineWidth = 1 } = options;\n  if (color.match(/#[0-9A-F]{6}$/i)) {\n    color = (color + ((opacity * 255) >> 0).toString(16)).toUpperCase();\n  } else {\n    color = color.replace(/rgb ?\\((.*)\\)/, `rgba($1,${opacity})`);\n  }\n  serie.style = [\n    {\n      name: 'unselected',\n      style: {\n        line: {\n          color,\n          width: lineWidth,\n          dash: 1,\n        },\n      },\n    },\n    {\n      name: 'selected',\n      style: {\n        line: {\n          color,\n          width: lineWidth + 2,\n          dash: 1,\n        },\n      },\n    },\n  ];\n  serie.name = spectrum.label || spectrum.id;\n}\n","export const COLORS = [\n  '#FFB300',\n  '#803E75',\n  '#FF6800',\n  '#A6BDD7',\n  '#C10020',\n  '#CEA262',\n  '#817066',\n  '#007D34',\n  '#F6768E',\n  '#00538A',\n  '#FF7A5C',\n  '#53377A',\n  '#FF8E00',\n  '#B32851',\n  '#F4C800',\n  '#7F180D',\n  '#93AA00',\n  '#593315',\n  '#F13A13',\n  '#232C16',\n];\n","import creatorNtuples from './creatorNtuples';\nimport { fromJSON } from './fromJSON';\n\n/**\n * Create a jcamp from variables\n * @param {Array<Variable} [variables={}] - object of variables\n * @param {string} [options.info={}] - metadata of the file\n * @param {string} [options.info.title = ''] - title of the file\n * @param {string} [options.info.owner = ''] - owner of the file\n * @param {string} [options.info.origin = ''] - origin of the file\n * @param {string} [options.info.dataType = ''] - type of data\n * @param {object} [options.meta = {}] - comments to add to the file\n * @param {object} [options.forceNtuples = false] - force the ntuples format even if there is only x and y variables\n */\nexport function fromVariables(variables = {}, options = {}) {\n  const { info, meta, forceNtuples } = options;\n\n  let jcampOptions = {\n    info,\n    meta,\n  };\n\n  let keys = Object.keys(variables).map((key) => key.toLowerCase());\n  if (\n    keys.length === 2 &&\n    keys.includes('x') &&\n    keys.includes('y') &&\n    !forceNtuples\n  ) {\n    let x = variables.x;\n    let xLabel = x.label || x.name || 'x';\n\n    jcampOptions.info.xUnits = xLabel.includes(variables.x.units)\n      ? xLabel\n      : `${xLabel} [${variables.x.units}]`;\n\n    let y = variables.y;\n    let yLabel = y.label || y.name || 'y';\n\n    jcampOptions.info.yUnits = yLabel.includes(variables.y.units)\n      ? yLabel\n      : `${yLabel} [${variables.y.units}]`;\n    return fromJSON({ x: variables.x.data, y: variables.y.data }, jcampOptions);\n  } else {\n    return creatorNtuples(variables, options);\n  }\n}\n","/**\n * Create a jcamp\n * @param {object} data - object of array\n * @param {object} [options={}] - metadata object\n * @param {string} [options.info={}] - metadata of the file\n * @param {string} [options.info.title = ''] - title of the file\n * @param {string} [options.info.owner = ''] - owner of the file\n * @param {string} [options.info.origin = ''] - origin of the file\n * @param {string} [options.info.dataType = ''] - type of data\n * @param {string} [options.info.xUnits = ''] - units for the x axis for variables===undefined\n * @param {string} [options.info.yUnits = ''] - units for the y axis for variables===undefined\n * @param {object} [options.meta = {}] - comments to add to the file\n\n * @return {string} JCAMP of the input\n */\nexport function fromJSON(data, options = {}) {\n  const { meta = {}, info = {} } = options;\n\n  const {\n    title = '',\n    owner = '',\n    origin = '',\n    dataType = '',\n    xUnits = '',\n    yUnits = '',\n  } = info;\n  let firstX = Number.POSITIVE_INFINITY;\n  let lastX = Number.NEGATIVE_INFINITY;\n  let firstY = Number.POSITIVE_INFINITY;\n  let lastY = Number.NEGATIVE_INFINITY;\n  let points = [];\n\n  for (let i = 0; i < data.x.length; i++) {\n    let x = data.x[i];\n    let y = data.y[i];\n    if (firstX > x) {\n      firstX = x;\n    }\n    if (lastX < x) {\n      lastX = x;\n    }\n    if (firstY > y) {\n      firstY = y;\n    }\n    if (lastY < y) {\n      lastY = y;\n    }\n    points.push(`${x} ${y}`);\n  }\n\n  let header = `##TITLE=${title}\n##JCAMP-DX=4.24\n##DATA TYPE=${dataType}\n##ORIGIN=${origin}\n##OWNER=${owner}\n##XUNITS=${xUnits}\n##YUNITS=${yUnits}\n##FIRSTX=${firstX}\n##LASTX=${lastX}\n##FIRSTY=${firstY}\n##LASTY=${lastY}\\n`;\n\n  for (const key of Object.keys(meta)) {\n    header += `##$${key}=${meta[key]}\\n`;\n  }\n\n  // we leave the header and utf8 fonts ${header.replace(/[^\\t\\r\\n\\x20-\\x7F]/g, '')\n\n  return `${header}##NPOINTS=${points.length}\n##PEAK TABLE=(XY..XY)\n${points.join('\\n')}\n##END`;\n}\n","import maxFct from 'ml-array-max';\nimport minFct from 'ml-array-min';\n\n/**\n * Parse from a xyxy data array\n * @param {Array<Array<number>>} variables\n * @param {object} [meta] - same metadata object format that the fromText\n * @return {string} JCAMP of the input\n */\nexport default function creatorNtuples(variables, options) {\n  const { meta = {}, info = {} } = options;\n\n  const { title = '', owner = '', origin = '', dataType = '' } = info;\n\n  const symbol = [];\n  const varName = [];\n  const varType = [];\n  const varDim = [];\n  const units = [];\n  const first = [];\n  const last = [];\n  const min = [];\n  const max = [];\n  const factor = [];\n\n  const keys = Object.keys(variables);\n  for (let i = 0; i < keys.length; i++) {\n    const key = keys[i];\n    let variable = variables[key];\n\n    let name = variable.label && variable.label.replace(/ *\\[.*/, '');\n    let unit = variable.label && variable.label.replace(/.*\\[(.*)\\].*/, '$1');\n\n    symbol.push(variable.symbol || key);\n    varName.push(variable.name || name || key);\n    varDim.push(variables[key].data.length);\n\n    varType.push(\n      variable.type\n        ? variable.type.toUpperCase()\n        : i === 0\n        ? 'INDEPENDENT'\n        : 'DEPENDENT',\n    );\n    units.push(variable.units || unit || '');\n    first.push(variables[key][0]);\n    last.push(variables[key][variables[key].length - 1]);\n    min.push(minFct(variables[key].data));\n    max.push(maxFct(variables[key].data));\n    factor.push(1);\n  }\n\n  let header = `##TITLE=${title}\n##JCAMP-DX=6.00\n##DATA TYPE=${dataType}\n##ORIGIN=${origin}\n##OWNER=${owner}\\n`;\n\n  for (const key of Object.keys(meta)) {\n    header += `##$${key}=${meta[key]}\\n`;\n  }\n\n  header += `##NTUPLES= ${dataType}\n##VAR_NAME=  ${varName.join()}\n##SYMBOL=    ${symbol.join()}\n##VAR_TYPE=  ${varType.join()}\n##VAR_DIM=   ${varDim.join()}\n##UNITS=     ${units.join()}\n##PAGE= N=1\\n`;\n\n  header += `##DATA TABLE= (${symbol.join('')}..${symbol.join('')}), PEAKS\\n`;\n\n  for (let i = 0; i < variables[keys[0]].data.length; i++) {\n    let point = [];\n    for (let key of keys) {\n      point.push(variables[key].data[i]);\n    }\n    header += `${point.join('\\t')}\\n`;\n  }\n\n  header += '##END';\n  return header;\n}\n","import { fromVariables } from 'convert-to-jcamp';\n\nexport function toJcamps(analysis, options = {}) {\n  let jcamps = [];\n  for (let spectrum of analysis.spectra) {\n    jcamps.push(getJcamp(spectrum, options));\n  }\n  return jcamps;\n}\n\nfunction getJcamp(spectrum, options) {\n  const { info = {}, meta = {} } = options;\n\n  let jcampOptions = {\n    options: {},\n    info: {\n      title: spectrum.title,\n      dataType: spectrum.dataType,\n      ...info,\n    },\n    meta: { ...spectrum.meta, ...meta },\n  };\n\n  return fromVariables(spectrum.variables, jcampOptions);\n}\n","/* eslint-disable no-unused-vars */\nconst experiments = [\n  'MAP',\n  'MAPDP',\n  'MAPSV',\n  'MAPSVDP',\n  'NORM',\n  'SDP',\n  'SDPSV',\n  'SEM',\n  'NOEXP',\n];\n\nconst technics = [\n  'AES diff',\n  'AES dir',\n  'EDX',\n  'ELS',\n  'FABMS',\n  'FABMS energy spec',\n  'ISS',\n  'SIMS',\n  'SIMS energy spec',\n  'SNMS',\n  'SNMS energy spec',\n  'UPS',\n  'XPS',\n  'XRF',\n];\n\nconst scans = ['REGULAR', 'IRREGULAR', 'MAPPING'];\n\nexport function parse(text) {\n  const lines = text.split(/\\r?\\n/);\n  let pointer = 0;\n  let parsed = { header: {}, blocks: [], info: {} };\n  pointer = parseHeader(lines, parsed, pointer);\n  for (let i = 0; i < parsed.info.nbBlocks; i++) {\n    pointer = parseBlock(lines, parsed, pointer);\n  }\n  return parsed;\n}\n\nfunction parseHeader(lines, parsed, pointer) {\n  const { header, info } = parsed;\n  header['format identifier'] = lines[pointer++];\n  header['institution identifier'] = lines[pointer++];\n  header['instrument model identifier'] = lines[pointer++];\n  header['operator identifier'] = lines[pointer++];\n  header['experiment identifier'] = lines[pointer++];\n  info.nbComments = Number(lines[pointer++]);\n  header['number of lines in comment'] = info.nbComments;\n  const comments = [];\n  for (let i = 0; i < info.nbComments; i++) {\n    comments.push(lines[pointer++]);\n  }\n  header['comment line'] = comments.join('\\n');\n  header['experiment mode'] = lines[pointer++];\n  header['scan mode'] = lines[pointer++];\n  if (['MAP', 'MAPD', 'NORM', 'SDP'].includes(header['experiment mode'])) {\n    header['number of spectral regions'] = Number(lines[pointer++]);\n  }\n  if (['MAP', 'MAPD'].includes(header['experiment mode'])) {\n    header['number of analysis positions'] = Number(lines[pointer++]);\n    header['number of discrete x coordinates available in full map'] = Number(\n      lines[pointer++],\n    );\n    header['number of discrete y coordinates available in full map'] = Number(\n      lines[pointer++],\n    );\n  }\n  info.nbExperimentVariables = Number(lines[pointer++]);\n  const experimentVariables = [];\n  header['number of experimental variables'] = info.nbExperimentVariables;\n  for (let i = 0; i < info.nbExperimentVariables; i++) {\n    experimentVariables.push({\n      label: lines[pointer++],\n      unit: lines[pointer++],\n    });\n  }\n  header.experimentVariables = experimentVariables;\n\n  /*\n    If the values of any of the block parameters are the same in all of the\n    blocks their values may be sent in the first block and then omitted\n    from all subsequent blocks.\n    - n > 0 : the parameters listed are to be included\n    - n < 0 : the parameters listed are to be excluded\n    - n = 0 : all parameters are to be given in all blocks\n    A complete block contains 40 parts.\n    */\n  info.nbEntriesInclusionExclusion = Number(lines[pointer++]);\n  header['number of entries in parameter inclusion or exclusion list'] =\n    info.nbEntriesInclusionExclusion;\n  info.blockParametersincludes = new Array(40).fill(\n    info.nbEntriesInclusionExclusion <= 0,\n  );\n  for (let i = 0; i < Math.abs(info.nbEntriesInclusionExclusion); i++) {\n    info.blockParametersincludes[Number(lines[pointer++]) + 1] =\n      info.nbEntriesInclusionExclusion > 0;\n  }\n\n  header['number of manually entered items in block'] = Number(\n    lines[pointer++],\n  );\n  info.nbFutureUpgradeExperimentEntries = Number(lines[pointer++]);\n  header['number of future upgrade experiment entries'] =\n    info.nbFutureUpgradeExperimentEntries;\n  const futureUpgradeExperimentEntries = [];\n  for (let i = 0; i < info.nbFutureUpgradeExperimentEntries; i++) {\n    futureUpgradeExperimentEntries.push({\n      label: lines[pointer++],\n      unit: lines[pointer++],\n    });\n  }\n  header.futureUpgradeExperimentEntries = futureUpgradeExperimentEntries;\n  if (info.nbFutureUpgradeExperimentEntries !== 0) {\n    throw Error('unsupported future upgrade experiment entries');\n  }\n\n  header['number of future upgrade block entries'] = Number(lines[pointer++]);\n  if (header['number of future upgrade block entries'] !== 0) {\n    throw Error('unsupported future upgrade block entries');\n  }\n\n  info.nbBlocks = Number(lines[pointer++]);\n  header['number of blocks'] = info.nbBlocks;\n  return pointer;\n}\n\nfunction parseBlock(lines, parsed, pointer) {\n  const { blocks, header, info } = parsed;\n\n  const firstBlock = blocks[0];\n  const includes =\n    blocks.length === 0\n      ? new Array(40).fill(true)\n      : info.blockParametersincludes;\n\n  const block = {};\n  block['block identifier'] = lines[pointer++];\n  block['sample identifier'] = lines[pointer++];\n  block['year in full'] = includes[0]\n    ? Number(lines[pointer++])\n    : firstBlock['year in full'];\n  block.month = includes[1] ? Number(lines[pointer++]) : firstBlock.month;\n  block['day of month'] = includes[2]\n    ? Number(lines[pointer++])\n    : firstBlock['day of month'];\n  block.hours = includes[3] ? Number(lines[pointer++]) : firstBlock.hours;\n  block.minutes = includes[4] ? Number(lines[pointer++]) : firstBlock.minutes;\n  block.seconds = includes[5] ? Number(lines[pointer++]) : firstBlock.seconds;\n  block['number of hours in advance of Greenwich Mean Time'] = includes[6]\n    ? Number(lines[pointer++])\n    : firstBlock['number of hours in advance of Greenwich Mean Time'];\n\n  if (includes[7]) {\n    const nbComments = Number(lines[pointer++]);\n    block['number of lines in block comment'] = nbComments;\n    const comments = [];\n    for (let i = 0; i < nbComments; i++) {\n      comments.push(lines[pointer++]);\n    }\n    block.blockComment = comments.join('\\n');\n  } else {\n    block['number of lines in block comment'] =\n      firstBlock['number of lines in block comment'];\n    block.blockComment = firstBlock.blockComment;\n  }\n\n  block.technique = includes[8] ? lines[pointer++] : firstBlock.technique;\n  if (['MAP', 'MAPDP'].includes(header['experiment mode'])) {\n    block['x coordinate'] = includes[9]\n      ? Number(lines[pointer++])\n      : firstBlock['x coordinate'];\n    block['y coordinate'] = includes[9]\n      ? Number(lines[pointer++])\n      : firstBlock['y coordinate'];\n  }\n\n  if (includes[10]) {\n    let values = [];\n    for (let i = 0; i < header.experimentVariables.length; i++) {\n      values.push(lines[pointer++]);\n    }\n    block['value of experimental variable'] = values;\n  } else {\n    block['value of experimental variable'] =\n      firstBlock['value of experimental variable'];\n  }\n\n  block['analysis source label'] = includes[11]\n    ? lines[pointer++]\n    : firstBlock['analysis source label'];\n\n  if (\n    ['MAPDP', 'MAPSVDP', 'SDP', 'SDPSV'].includes(header['experiment mode']) ||\n    [\n      'SNMS energy spec',\n      'FABMS',\n      'FABMS energy spec',\n      'ISS',\n      'SIMS',\n      'SIMS energy spec',\n      'SNMS',\n    ].includes(block.technique)\n  ) {\n    block['sputtering ion or atom atomic number'] = includes[12]\n      ? Number(lines[pointer++])\n      : firstBlock['sputtering ion or atom atomic number'];\n    block['number of atoms in sputtering ion or atom particle'] = includes[12]\n      ? Number(lines[pointer++])\n      : firstBlock['number of atoms in sputtering ion or atom particle'];\n    block['sputtering ion or atom charge sign and number'] = includes[12]\n      ? lines[pointer++]\n      : firstBlock['sputtering ion or atom charge sign and number'];\n  }\n\n  block['analysis source characteristic energy'] = includes[13]\n    ? Number(lines[pointer++])\n    : firstBlock['analysis source characteristic energy'];\n\n  block['analysis source strength'] = includes[14]\n    ? Number(lines[pointer++])\n    : firstBlock['analysis source strength'];\n\n  block['analysis source beam width x'] = includes[15]\n    ? Number(lines[pointer++])\n    : firstBlock['analysis source beam width x'];\n  block['analysis source beam width y'] = includes[15]\n    ? Number(lines[pointer++])\n    : firstBlock['analysis source beam width y'];\n\n  if (\n    ['MAP', 'MAPDP', 'MAPSV', 'MAPSVDP', 'SEM'].includes(\n      header['experiment mode'],\n    )\n  ) {\n    block['field of view x'] = includes[16]\n      ? Number(lines[pointer++])\n      : firstBlock['field of view x'];\n    block['field of view y'] = includes[16]\n      ? Number(lines[pointer++])\n      : firstBlock['field of view y'];\n  }\n\n  if (['SEM', 'MAPSV', 'MAPSVDP'].includes(header['experiment mode'])) {\n    block['first linescan start x coordinate'] = includes[16]\n      ? Number(lines[pointer++])\n      : firstBlock['first linescan start x coordinate'];\n    block['first linescan start y coordinate'] = includes[16]\n      ? Number(lines[pointer++])\n      : firstBlock['first linescan start y coordinate'];\n    block['first linescan finish x coordinate'] = includes[16]\n      ? Number(lines[pointer++])\n      : firstBlock['first linescan finish x coordinate'];\n    block['first linescan finish y coordinate'] = includes[16]\n      ? Number(lines[pointer++])\n      : firstBlock['first linescan finish y coordinate'];\n    block['last linescan start x coordinate'] = includes[16]\n      ? Number(lines[pointer++])\n      : firstBlock['first linescan last x coordinate'];\n    block['last linescan start y coordinate'] = includes[16]\n      ? Number(lines[pointer++])\n      : firstBlock['first linescan last y coordinate'];\n  }\n\n  block['analysis source polar angle of incidence'] = includes[18]\n    ? Number(lines[pointer++])\n    : firstBlock['analysis source polar angle of incidence'];\n\n  block['analysis source azimuth'] = includes[19]\n    ? Number(lines[pointer++])\n    : firstBlock['analysis source azimuth'];\n\n  block['analyser mode'] = includes[20]\n    ? lines[pointer++]\n    : firstBlock['analyser mode'];\n\n  block[\n    'analyser pass energy or retard ratio or mass resolution'\n  ] = includes[21]\n    ? Number(lines[pointer++])\n    : firstBlock['analyser pass energy or retard ratio or mass resolution'];\n\n  if (block.technique === 'AES diff') {\n    block['differential width'] = includes[22]\n      ? lines[pointer++]\n      : firstBlock['differential width'];\n  }\n\n  block['magnification of analyser transfer lens'] = includes[23]\n    ? Number(lines[pointer++])\n    : firstBlock['magnification of analyser transfer lens'];\n\n  block[\n    'analyser work function or acceptance energy of atom or ion'\n  ] = includes[24]\n    ? Number(lines[pointer++])\n    : firstBlock['analyser work function or acceptance energy of atom or ion'];\n\n  block['target bias'] = includes[25]\n    ? Number(lines[pointer++])\n    : firstBlock['target bias'];\n\n  block['analysis width x'] = includes[26]\n    ? Number(lines[pointer++])\n    : firstBlock['analysis width x'];\n  block['analysis width y'] = includes[26]\n    ? Number(lines[pointer++])\n    : firstBlock['analysis width y'];\n\n  block['analyser axis take off polar angle'] = includes[27]\n    ? Number(lines[pointer++])\n    : firstBlock['analyser axis take off polar angle'];\n  block['analyser axis take off azimuth'] = includes[27]\n    ? Number(lines[pointer++])\n    : firstBlock['analyser axis take off azimuth'];\n\n  block['species label'] = includes[28]\n    ? lines[pointer++]\n    : firstBlock['species label'];\n\n  block['transition or charge state label'] = includes[29]\n    ? lines[pointer++]\n    : firstBlock['transition or charge state label'];\n  block['charge of detected particle'] = includes[29]\n    ? Number(lines[pointer++])\n    : firstBlock['charge of detected particle'];\n\n  if (header['scan mode'] !== 'REGULAR') {\n    throw Error('Only REGULAR scans are supported');\n  }\n\n  block['abscissa label'] = includes[30]\n    ? lines[pointer++]\n    : firstBlock['abscissa label'];\n  block['abscissa units'] = includes[30]\n    ? lines[pointer++]\n    : firstBlock['abscissa units'];\n\n  block['abscissa start'] = includes[30]\n    ? Number(lines[pointer++])\n    : firstBlock['abscissa start'];\n  block['abscissa increment'] = includes[30]\n    ? Number(lines[pointer++])\n    : firstBlock['abscissa increment'];\n\n  if (includes[31]) {\n    const nbCorrespondingVariables = Number(lines[pointer++]);\n    block['number of corresponding variables'] = nbCorrespondingVariables;\n    const correspondingVariables = [];\n    for (let i = 0; i < nbCorrespondingVariables; i++) {\n      correspondingVariables.push({\n        label: lines[pointer++],\n        unit: lines[pointer++],\n        array: [],\n      });\n    }\n    block.correspondingVariables = correspondingVariables;\n  } else {\n    block['number of corresponding variables'] =\n      firstBlock['number of corresponding variables'];\n    block.correspondingVariables = JSON.parse(\n      JSON.stringify(firstBlock.correspondingVariables),\n    );\n    block.correspondingVariables.array = [];\n  }\n\n  block['signal mode'] = includes[32]\n    ? lines[pointer++]\n    : firstBlock['signal mode'];\n\n  block['signal collection time'] = includes[33]\n    ? Number(lines[pointer++])\n    : firstBlock['signal collection time'];\n\n  block['number of scans to compile this block'] = includes[34]\n    ? Number(lines[pointer++])\n    : firstBlock['number of scans to compile this block'];\n\n  block['signal time correction'] = includes[35]\n    ? Number(lines[pointer++])\n    : firstBlock['signal time correction'];\n\n  if (\n    ['MAPDP', 'MAPSVDP', 'SDP', 'SDPSV'].includes(header['experiment mode']) &&\n    ['AES diff', 'AES dir', 'EDX', 'ELS', 'UPS', 'XPS', 'XRF'].includes(\n      block.technique,\n    )\n  ) {\n    block['sputtering source energy'] = includes[36]\n      ? Number(lines[pointer++])\n      : firstBlock['sputtering source energy'];\n    block['sputtering source beam current'] = includes[36]\n      ? Number(lines[pointer++])\n      : firstBlock['sputtering source beam current'];\n    block['sputtering source width x'] = includes[36]\n      ? Number(lines[pointer++])\n      : firstBlock['sputtering source width x'];\n    block['sputtering source width y'] = includes[36]\n      ? Number(lines[pointer++])\n      : firstBlock['sputtering source width y'];\n    block['sputtering source polar angle of incidence'] = includes[36]\n      ? Number(lines[pointer++])\n      : firstBlock['sputtering source polar angle of incidence'];\n    block['sputtering source azimuth'] = includes[36]\n      ? Number(lines[pointer++])\n      : firstBlock['sputtering source azimuth'];\n    block['sputtering mode'] = includes[36]\n      ? lines[pointer++]\n      : firstBlock['sputtering mode'];\n  }\n\n  block['sample normal polar angle of tilt'] = includes[37]\n    ? Number(lines[pointer++])\n    : firstBlock['sample normal polar angle of tilt'];\n  block['sample normal tilt azimuth'] = includes[37]\n    ? Number(lines[pointer++])\n    : firstBlock['sample normal tilt azimuth'];\n\n  block['sample rotation angle'] = includes[38]\n    ? Number(lines[pointer++])\n    : firstBlock['sample rotation angle'];\n\n  if (includes[39]) {\n    const nbAdditionalNumericalParameters = Number(lines[pointer++]);\n    block[\n      'number of additional numerical parameters'\n    ] = nbAdditionalNumericalParameters;\n    const additionalNumericalParameters = [];\n    for (let i = 0; i < nbAdditionalNumericalParameters; i++) {\n      additionalNumericalParameters.push({\n        label: lines[pointer++],\n        unit: lines[pointer++],\n        value: lines[pointer++],\n      });\n    }\n    block.additionalNumericalParameters = additionalNumericalParameters;\n  } else {\n    block['number of additional numerical parameters'] =\n      firstBlock['number of additional numerical parameters'];\n    block.additionalNumericalParameters =\n      firstBlock.additionalNumericalParameters;\n  }\n\n  block.nbOrdinateValues = Number(lines[pointer++]);\n  for (let correspondingVariable of block.correspondingVariables) {\n    correspondingVariable.minimumOrdinateValue = Number(lines[pointer++]);\n    correspondingVariable.maximumOrdinateValue = Number(lines[pointer++]);\n  }\n  for (\n    let i = 0;\n    i < block.nbOrdinateValues / block.correspondingVariables.length;\n    i++\n  ) {\n    for (let correspondingVariable of block.correspondingVariables) {\n      correspondingVariable.array.push(Number(lines[pointer++]));\n    }\n  }\n\n  parsed.blocks.push(block);\n  return pointer;\n}\n","export class AnalysesManager {\n  constructor() {\n    this.analyses = [];\n  }\n\n  addAnalysis(analysis) {\n    let index = this.getAnalysisIndex(analysis.id);\n    if (index === undefined) {\n      this.analyses.push(analysis);\n    } else {\n      this.analyses[index] = analysis;\n    }\n  }\n\n  getAnalyses(options = {}) {\n    const { ids } = options;\n    let analyses = [];\n    for (const analysis of this.analyses) {\n      if (!ids || ids.includes(analysis.id)) {\n        analyses.push(analysis);\n      }\n    }\n    return analyses;\n  }\n\n  removeAllAnalyses() {\n    this.analyses.splice(0);\n  }\n\n  /**\n   * Remove the analysis from the AnalysesManager for the specified id\n   * @param {string} id\n   */\n  removeAnalysis(id) {\n    let index = this.getAnalysisIndex(id);\n    if (index === undefined) return undefined;\n    return this.analyses.splice(index, 1);\n  }\n\n  /**\n   * Returns the index of the analysis in the analyses array\n   * @param {string} id\n   * @returns {number}\n   */\n  getAnalysisIndex(id) {\n    if (!id) return undefined;\n    for (let i = 0; i < this.analyses.length; i++) {\n      let analysis = this.analyses[i];\n      if (analysis.id === id) return i;\n    }\n    return undefined;\n  }\n\n  /**\n   * Checks if the ID of an analysis exists in the AnalysesManager\n   * @param {string} id\n   */\n  includes(id) {\n    return !isNaN(this.getAnalysisIndex(id));\n  }\n}\n","import { convert } from 'jcampconverter';\n\nimport { Analysis } from '../Analysis';\n\n/**\n * Creates a new Analysis from a JCAMP string\n * @param {string} jcamp - String containing the JCAMP data\n * @param {object} [options={}]\n * @param {object} [options.id=Math.random()]\n * @param {string} [options.label=options.id] human redeable label\n * @return {Analysis} - New class element with the given data\n */\nexport function fromJcamp(jcamp, options = {}) {\n  let analysis = new Analysis(options);\n  addJcamp(analysis, jcamp, options);\n  return analysis;\n}\n\nfunction addJcamp(analysis, jcamp) {\n  let converted = convert(jcamp, {\n    keepRecordsRegExp: /.*/,\n  });\n\n  for (let entry of converted.flatten) {\n    let currentSpectrum = entry.spectra[0];\n\n    // we ensure variables\n    if (!currentSpectrum.variables) {\n      const variables = {};\n      currentSpectrum.variables = variables;\n      variables.x = {\n        label: currentSpectrum.xUnits,\n        symbol: 'X',\n        data: currentSpectrum.data.x || currentSpectrum.data.X,\n      };\n      variables.y = {\n        label: currentSpectrum.yUnits,\n        symbol: 'Y',\n        data: currentSpectrum.data.y || currentSpectrum.data.Y,\n      };\n    } else {\n      for (let key in currentSpectrum.variables) {\n        const variable = currentSpectrum.variables[key];\n        if (variable.label) continue;\n        variable.label = variable.name || variable.symbol || key;\n        if (variable.units && !variable.label.includes(variable.units)) {\n          variable.label += ` [${variable.units}]`;\n        }\n      }\n    }\n\n    analysis.pushSpectrum(currentSpectrum.variables, {\n      dataType: entry.dataType,\n      title: entry.title,\n      meta: entry.meta,\n    });\n  }\n}\n","import { parse } from 'vamas';\n\nimport { Analysis } from '..';\n\nexport function fromVamas(text) {\n  let parsed = parse(text);\n  let header = parsed.header;\n  let blocks = parsed.blocks;\n  let title = header['experiment identifier'];\n  let analysis = new Analysis();\n  for (let block of blocks) {\n    let sourceEnergy = block['analysis source characteristic energy'];\n\n    let yVariable = block.correspondingVariables[0];\n    let yLabel = yVariable.label;\n    let yValues = yVariable.array;\n\n    let xLabel = block['abscissa label'];\n    let xUnits = block['abscissa units'];\n    let xStart = block['abscissa start'];\n    let xIncrement = block['abscissa increment'];\n\n    let xValues = new Float64Array(yValues.length);\n    for (let i = 0; i < yValues.length; i++) {\n      xValues[i] = xStart + xIncrement * i;\n    }\n    // currently we take the first corresponding variables\n\n    let meta = {};\n    for (let key in block) {\n      if (typeof block[key] === 'string' || typeof block[key] === 'number') {\n        meta[key] = block[key];\n      }\n    }\n\n    for (let key in header) {\n      if (typeof header[key] === 'string' || typeof header[key] === 'number') {\n        meta[key] = header[key];\n      }\n    }\n\n    const variables = {};\n    if (xLabel === 'Kinetic energy' && sourceEnergy) {\n      // we will calculate bonding energy\n      variables.x = {\n        data: xValues.map((value) => sourceEnergy - value).reverse(),\n        label: 'Bonding energy',\n        units: xUnits,\n        type: 'DEPENDENT',\n      };\n      variables.y = {\n        data: yValues.reverse(),\n        label: yLabel,\n        type: 'DEPENDENT',\n      };\n      variables.k = {\n        data: xValues.reverse(),\n        label: xLabel,\n        units: xUnits,\n        type: 'INDEPENDENT',\n      };\n    } else {\n      variables.x = {\n        data: xValues,\n        label: xLabel,\n        units: xUnits,\n        type: 'INDEPENDENT',\n      };\n      variables.y = {\n        data: yValues,\n        label: yLabel,\n        type: 'DEPENDENT',\n      };\n    }\n\n    analysis.pushSpectrum(variables, {\n      dataType: 'XPS',\n      title,\n      meta,\n    });\n  }\n\n  return analysis;\n}\n","import { addStyle } from './addStyle';\nimport { COLORS } from './colors';\n/**\n * Generate a jsgraph chart format from an array of Analysis\n * @param {Array<Analysis>} analyses\n * @param {object} [options={}]\n * @param {Array} [options.ids] List of spectra ids, by all\n * @param {Array} [options.colors] List of colors\n * @param {Array} [options.opacities=[1]] List of opacities\n * @param {Array} [options.linesWidth=[1]] List of linesWidth\n * @param {object} [options.selector={}]\n * @param {object} [options.normalization]\n */\nexport function getJSGraph(analyses, options = {}) {\n  const {\n    colors = COLORS,\n    opacities = [1],\n    linesWidth = [1],\n    selector,\n    normalization,\n  } = options;\n  let series = [];\n\n  let xLabel = '';\n  let yLabel = '';\n\n  for (let i = 0; i < analyses.length; i++) {\n    const analysis = analyses[i];\n    let serie = {};\n    let currentData = analysis.getNormalizedSpectrum({\n      selector,\n      normalization,\n    });\n    if (!currentData) continue;\n    if (!xLabel) xLabel = currentData.variables.x.label;\n    if (!yLabel) yLabel = currentData.variables.y.label;\n    addStyle(serie, analysis, {\n      color: colors[i % colors.length],\n      opacity: opacities[i % opacities.length],\n      lineWidth: linesWidth[i % linesWidth.length],\n    });\n    serie.data = {\n      x: currentData.variables.x.data,\n      y: currentData.variables.y.data,\n    };\n    series.push(serie);\n  }\n  return {\n    axes: {\n      x: {\n        label: xLabel,\n        unit: '',\n        unitWrapperBefore: '',\n        unitWrapperAfter: '',\n        flipped: false,\n        display: true,\n      },\n      y: {\n        label: yLabel,\n        unit: '',\n        unitWrapperBefore: '',\n        unitWrapperAfter: '',\n        flipped: false,\n        display: true,\n      },\n    },\n    series,\n  };\n}\n","export function getNormalizationAnnotations(filter = {}, boundary) {\n  let { exclusions = [] } = filter;\n  let annotations = [];\n  exclusions = exclusions.filter((exclusion) => !exclusion.ignore);\n  annotations = exclusions.map((exclusion) => {\n    let annotation = {\n      type: 'rect',\n      position: [\n        { x: exclusion.from, y: boundary.y.min },\n        { x: exclusion.to, y: boundary.y.max },\n      ],\n      strokeWidth: 0,\n      fillColor: 'rgba(255,255,224,1)',\n    };\n    return annotation;\n  });\n  if (filter.from !== undefined) {\n    annotations.push({\n      type: 'rect',\n      position: [\n        { x: Number.MIN_SAFE_INTEGER, y: boundary.y.min },\n        { x: filter.from, y: boundary.y.max },\n      ],\n      strokeWidth: 0,\n      fillColor: 'rgba(255,255,224,1)',\n    });\n  }\n  if (filter.to !== undefined) {\n    annotations.push({\n      type: 'rect',\n      position: [\n        { x: filter.to, y: boundary.y.min },\n        { x: Number.MAX_SAFE_INTEGER, y: boundary.y.max },\n      ],\n      strokeWidth: 0,\n      fillColor: 'rgba(255,255,224,1)',\n    });\n  }\n  return annotations;\n}\n","export const references = [\n  { element: 'H', orbital: '1s', be: 14 },\n  { element: 'He', orbital: '1s', be: 25 },\n  { element: 'Li', orbital: '1s', be: 55 },\n  { element: 'Be', orbital: '1s', be: 111 },\n  { element: 'B', orbital: '1s', be: 188 },\n  { element: 'C', orbital: '1s', be: 284 },\n  { element: 'N', orbital: '1s', be: 399 },\n  { element: 'O', orbital: '1s', be: 532 },\n  { element: 'F', orbital: '1s', be: 686 },\n  { element: 'Ne', orbital: '1s', be: 867 },\n  { element: 'Na', orbital: '1s', be: 1072 },\n  { element: 'O', orbital: '2s', be: 24 },\n  { element: 'F', orbital: '2s', be: 31 },\n  { element: 'Ne', orbital: '2s', be: 45 },\n  { element: 'Na', orbital: '2s', be: 63 },\n  { element: 'Mg', orbital: '2s', be: 89 },\n  { element: 'Al', orbital: '2s', be: 118 },\n  { element: 'Si', orbital: '2s', be: 149 },\n  { element: 'P', orbital: '2s', be: 189 },\n  { element: 'S', orbital: '2s', be: 229 },\n  { element: 'Cl', orbital: '2s', be: 270 },\n  { element: 'Ar', orbital: '2s', be: 320 },\n  { element: 'K', orbital: '2s', be: 377 },\n  { element: 'Ca', orbital: '2s', be: 438 },\n  { element: 'Sc', orbital: '2s', be: 500 },\n  { element: 'Ti', orbital: '2s', be: 564 },\n  { element: 'V', orbital: '2s', be: 628 },\n  { element: 'Cr', orbital: '2s', be: 695 },\n  { element: 'Mn', orbital: '2s', be: 769 },\n  { element: 'Fe', orbital: '2s', be: 846 },\n  { element: 'Co', orbital: '2s', be: 926 },\n  { element: 'Ni', orbital: '2s', be: 1008 },\n  { element: 'Cu', orbital: '2s', be: 1096 },\n  { element: 'Zn', orbital: '2s', be: 1194 },\n  { element: 'B', orbital: '2p1/2', be: 5 },\n  { element: 'C', orbital: '2p1/2', be: 7 },\n  { element: 'N', orbital: '2p1/2', be: 9 },\n  { element: 'O', orbital: '2p1/2', be: 7 },\n  { element: 'F', orbital: '2p1/2', be: 9 },\n  { element: 'Ne', orbital: '2p1/2', be: 18 },\n  { element: 'Na', orbital: '2p1/2', be: 31 },\n  { element: 'Mg', orbital: '2p1/2', be: 52 },\n  { element: 'Al', orbital: '2p1/2', be: 74 },\n  { element: 'Si', orbital: '2p1/2', be: 100 },\n  { element: 'P', orbital: '2p1/2', be: 136 },\n  { element: 'S', orbital: '2p1/2', be: 165 },\n  { element: 'Cl', orbital: '2p1/2', be: 202 },\n  { element: 'Ar', orbital: '2p1/2', be: 247 },\n  { element: 'K', orbital: '2p1/2', be: 297 },\n  { element: 'Ca', orbital: '2p1/2', be: 350 },\n  { element: 'Sc', orbital: '2p1/2', be: 407 },\n  { element: 'Ti', orbital: '2p1/2', be: 461 },\n  { element: 'V', orbital: '2p1/2', be: 520 },\n  { element: 'Cr', orbital: '2p1/2', be: 584 },\n  { element: 'Mn', orbital: '2p1/2', be: 652 },\n  { element: 'Fe', orbital: '2p1/2', be: 723 },\n  { element: 'Co', orbital: '2p1/2', be: 794 },\n  { element: 'Ni', orbital: '2p1/2', be: 872 },\n  { element: 'Cu', orbital: '2p1/2', be: 951 },\n  { element: 'Zn', orbital: '2p1/2', be: 1044 },\n  { element: 'Ga', orbital: '2p1/2', be: 1143 },\n  { element: 'Ge', orbital: '2p1/2', be: 1249 },\n  { element: 'B', orbital: '2p3/2', be: 5 },\n  { element: 'C', orbital: '2p3/2', be: 7 },\n  { element: 'N', orbital: '2p3/2', be: 9 },\n  { element: 'O', orbital: '2p3/2', be: 7 },\n  { element: 'F', orbital: '2p3/2', be: 9 },\n  { element: 'Ne', orbital: '2p3/2', be: 18 },\n  { element: 'Na', orbital: '2p3/2', be: 31 },\n  { element: 'Mg', orbital: '2p3/2', be: 52 },\n  { element: 'Al', orbital: '2p3/2', be: 73 },\n  { element: 'Si', orbital: '2p3/2', be: 99 },\n  { element: 'P', orbital: '2p3/2', be: 135 },\n  { element: 'S', orbital: '2p3/2', be: 164 },\n  { element: 'Cl', orbital: '2p3/2', be: 200 },\n  { element: 'Ar', orbital: '2p3/2', be: 245 },\n  { element: 'K', orbital: '2p3/2', be: 294 },\n  { element: 'Ca', orbital: '2p3/2', be: 347 },\n  { element: 'Sc', orbital: '2p3/2', be: 402 },\n  { element: 'Ti', orbital: '2p3/2', be: 455 },\n  { element: 'V', orbital: '2p3/2', be: 513 },\n  { element: 'Cr', orbital: '2p3/2', be: 575 },\n  { element: 'Mn', orbital: '2p3/2', be: 641 },\n  { element: 'Fe', orbital: '2p3/2', be: 710 },\n  { element: 'Co', orbital: '2p3/2', be: 779 },\n  { element: 'Ni', orbital: '2p3/2', be: 855 },\n  { element: 'Cu', orbital: '2p3/2', be: 931 },\n  { element: 'Zn', orbital: '2p3/2', be: 1021 },\n  { element: 'Ga', orbital: '2p3/2', be: 1116 },\n  { element: 'Ge', orbital: '2p3/2', be: 1217 },\n  { element: 'B', orbital: '2p', be: 5 },\n  { element: 'C', orbital: '2p', be: 7 },\n  { element: 'N', orbital: '2p', be: 9 },\n  { element: 'O', orbital: '2p', be: 7 },\n  { element: 'F', orbital: '2p', be: 9 },\n  { element: 'Ne', orbital: '2p', be: 18 },\n  { element: 'Na', orbital: '2p', be: 31 },\n  { element: 'Mg', orbital: '2p', be: 52 },\n  { element: 'Al', orbital: '2p', be: 73 },\n  { element: 'Si', orbital: '2p', be: 99 },\n  { element: 'P', orbital: '2p', be: 135 },\n  { element: 'S', orbital: '2p', be: 164 },\n  { element: 'Cl', orbital: '2p', be: 200 },\n  { element: 'Ar', orbital: '2p', be: 245 },\n  { element: 'K', orbital: '2p', be: 294 },\n  { element: 'Ca', orbital: '2p', be: 347 },\n  { element: 'Sc', orbital: '2p', be: 402 },\n  { element: 'Ti', orbital: '2p', be: 455 },\n  { element: 'V', orbital: '2p', be: 513 },\n  { element: 'Cr', orbital: '2p', be: 575 },\n  { element: 'Mn', orbital: '2p', be: 641 },\n  { element: 'Fe', orbital: '2p', be: 710 },\n  { element: 'Co', orbital: '2p', be: 779 },\n  { element: 'Ni', orbital: '2p', be: 855 },\n  { element: 'Cu', orbital: '2p', be: 931 },\n  { element: 'Zn', orbital: '2p', be: 1021 },\n  { element: 'Ga', orbital: '2p', be: 1116 },\n  { element: 'Ge', orbital: '2p', be: 1217 },\n  { element: 'Na', orbital: '3s', be: 1 },\n  { element: 'Mg', orbital: '3s', be: 2 },\n  { element: 'Al', orbital: '3s', be: 1 },\n  { element: 'Si', orbital: '3s', be: 8 },\n  { element: 'P', orbital: '3s', be: 16 },\n  { element: 'S', orbital: '3s', be: 16 },\n  { element: 'Cl', orbital: '3s', be: 18 },\n  { element: 'Ar', orbital: '3s', be: 25 },\n  { element: 'K', orbital: '3s', be: 34 },\n  { element: 'Ca', orbital: '3s', be: 44 },\n  { element: 'Sc', orbital: '3s', be: 54 },\n  { element: 'Ti', orbital: '3s', be: 59 },\n  { element: 'V', orbital: '3s', be: 66 },\n  { element: 'Cr', orbital: '3s', be: 74 },\n  { element: 'Mn', orbital: '3s', be: 84 },\n  { element: 'Fe', orbital: '3s', be: 95 },\n  { element: 'Co', orbital: '3s', be: 101 },\n  { element: 'Ni', orbital: '3s', be: 112 },\n  { element: 'Cu', orbital: '3s', be: 120 },\n  { element: 'Zn', orbital: '3s', be: 137 },\n  { element: 'Ga', orbital: '3s', be: 158 },\n  { element: 'Ge', orbital: '3s', be: 181 },\n  { element: 'As', orbital: '3s', be: 204 },\n  { element: 'Se', orbital: '3s', be: 232 },\n  { element: 'Br', orbital: '3s', be: 257 },\n  { element: 'Kr', orbital: '3s', be: 289 },\n  { element: 'Rb', orbital: '3s', be: 322 },\n  { element: 'Sr', orbital: '3s', be: 358 },\n  { element: 'Y', orbital: '3s', be: 395 },\n  { element: 'Zr', orbital: '3s', be: 431 },\n  { element: 'Nb', orbital: '3s', be: 469 },\n  { element: 'Mo', orbital: '3s', be: 505 },\n  { element: 'Tc', orbital: '3s', be: 544 },\n  { element: 'Ru', orbital: '3s', be: 585 },\n  { element: 'Rh', orbital: '3s', be: 627 },\n  { element: 'Pd', orbital: '3s', be: 670 },\n  { element: 'Ag', orbital: '3s', be: 717 },\n  { element: 'Cd', orbital: '3s', be: 770 },\n  { element: 'In', orbital: '3s', be: 826 },\n  { element: 'Sn', orbital: '3s', be: 884 },\n  { element: 'Sb', orbital: '3s', be: 944 },\n  { element: 'Te', orbital: '3s', be: 1006 },\n  { element: 'I', orbital: '3s', be: 1072 },\n  { element: 'Xe', orbital: '3s', be: 1145 },\n  { element: 'Cs', orbital: '3s', be: 1217 },\n  { element: 'Si', orbital: '3p1/2', be: 3 },\n  { element: 'P', orbital: '3p1/2', be: 10 },\n  { element: 'S', orbital: '3p1/2', be: 8 },\n  { element: 'Cl', orbital: '3p1/2', be: 7 },\n  { element: 'Ar', orbital: '3p1/2', be: 12 },\n  { element: 'K', orbital: '3p1/2', be: 18 },\n  { element: 'Ca', orbital: '3p1/2', be: 26 },\n  { element: 'Sc', orbital: '3p1/2', be: 32 },\n  { element: 'Ti', orbital: '3p1/2', be: 34 },\n  { element: 'V', orbital: '3p1/2', be: 38 },\n  { element: 'Cr', orbital: '3p1/2', be: 43 },\n  { element: 'Mn', orbital: '3p1/2', be: 49 },\n  { element: 'Fe', orbital: '3p1/2', be: 56 },\n  { element: 'Co', orbital: '3p1/2', be: 60 },\n  { element: 'Ni', orbital: '3p1/2', be: 68 },\n  { element: 'Cu', orbital: '3p1/2', be: 74 },\n  { element: 'Zn', orbital: '3p1/2', be: 87 },\n  { element: 'Ga', orbital: '3p1/2', be: 107 },\n  { element: 'Ge', orbital: '3p1/2', be: 129 },\n  { element: 'As', orbital: '3p1/2', be: 147 },\n  { element: 'Se', orbital: '3p1/2', be: 168 },\n  { element: 'Br', orbital: '3p1/2', be: 189 },\n  { element: 'Kr', orbital: '3p1/2', be: 223 },\n  { element: 'Rb', orbital: '3p1/2', be: 248 },\n  { element: 'Sr', orbital: '3p1/2', be: 280 },\n  { element: 'Y', orbital: '3p1/2', be: 313 },\n  { element: 'Zr', orbital: '3p1/2', be: 345 },\n  { element: 'Nb', orbital: '3p1/2', be: 379 },\n  { element: 'Mo', orbital: '3p1/2', be: 410 },\n  { element: 'Tc', orbital: '3p1/2', be: 445 },\n  { element: 'Ru', orbital: '3p1/2', be: 483 },\n  { element: 'Rh', orbital: '3p1/2', be: 521 },\n  { element: 'Pd', orbital: '3p1/2', be: 559 },\n  { element: 'Ag', orbital: '3p1/2', be: 602 },\n  { element: 'Cd', orbital: '3p1/2', be: 651 },\n  { element: 'In', orbital: '3p1/2', be: 702 },\n  { element: 'Sn', orbital: '3p1/2', be: 757 },\n  { element: 'Sb', orbital: '3p1/2', be: 812 },\n  { element: 'Te', orbital: '3p1/2', be: 870 },\n  { element: 'I', orbital: '3p1/2', be: 931 },\n  { element: 'Xe', orbital: '3p1/2', be: 999 },\n  { element: 'Cs', orbital: '3p1/2', be: 1065 },\n  { element: 'Ba', orbital: '3p1/2', be: 1137 },\n  { element: 'La', orbital: '3p1/2', be: 1205 },\n  { element: 'Si', orbital: '3p3/2', be: 3 },\n  { element: 'P', orbital: '3p3/2', be: 10 },\n  { element: 'S', orbital: '3p3/2', be: 8 },\n  { element: 'Cl', orbital: '3p3/2', be: 7 },\n  { element: 'Ar', orbital: '3p3/2', be: 12 },\n  { element: 'K', orbital: '3p3/2', be: 18 },\n  { element: 'Ca', orbital: '3p3/2', be: 26 },\n  { element: 'Sc', orbital: '3p3/2', be: 32 },\n  { element: 'Ti', orbital: '3p3/2', be: 34 },\n  { element: 'V', orbital: '3p3/2', be: 38 },\n  { element: 'Cr', orbital: '3p3/2', be: 43 },\n  { element: 'Mn', orbital: '3p3/2', be: 49 },\n  { element: 'Fe', orbital: '3p3/2', be: 56 },\n  { element: 'Co', orbital: '3p3/2', be: 60 },\n  { element: 'Ni', orbital: '3p3/2', be: 68 },\n  { element: 'Cu', orbital: '3p3/2', be: 74 },\n  { element: 'Zn', orbital: '3p3/2', be: 87 },\n  { element: 'Ga', orbital: '3p3/2', be: 103 },\n  { element: 'Ge', orbital: '3p3/2', be: 122 },\n  { element: 'As', orbital: '3p3/2', be: 141 },\n  { element: 'Se', orbital: '3p3/2', be: 162 },\n  { element: 'Br', orbital: '3p3/2', be: 182 },\n  { element: 'Kr', orbital: '3p3/2', be: 214 },\n  { element: 'Rb', orbital: '3p3/2', be: 239 },\n  { element: 'Sr', orbital: '3p3/2', be: 269 },\n  { element: 'Y', orbital: '3p3/2', be: 301 },\n  { element: 'Zr', orbital: '3p3/2', be: 331 },\n  { element: 'Nb', orbital: '3p3/2', be: 363 },\n  { element: 'Mo', orbital: '3p3/2', be: 393 },\n  { element: 'Tc', orbital: '3p3/2', be: 425 },\n  { element: 'Ru', orbital: '3p3/2', be: 461 },\n  { element: 'Rh', orbital: '3p3/2', be: 496 },\n  { element: 'Pd', orbital: '3p3/2', be: 531 },\n  { element: 'Ag', orbital: '3p3/2', be: 571 },\n  { element: 'Cd', orbital: '3p3/2', be: 617 },\n  { element: 'In', orbital: '3p3/2', be: 664 },\n  { element: 'Sn', orbital: '3p3/2', be: 715 },\n  { element: 'Sb', orbital: '3p3/2', be: 766 },\n  { element: 'Te', orbital: '3p3/2', be: 819 },\n  { element: 'I', orbital: '3p3/2', be: 875 },\n  { element: 'Xe', orbital: '3p3/2', be: 937 },\n  { element: 'Cs', orbital: '3p3/2', be: 998 },\n  { element: 'Ba', orbital: '3p3/2', be: 1063 },\n  { element: 'La', orbital: '3p3/2', be: 1124 },\n  { element: 'Ce', orbital: '3p3/2', be: 1186 },\n  { element: 'Pr', orbital: '3p3/2', be: 1243 },\n  { element: 'Si', orbital: '3p', be: 3 },\n  { element: 'P', orbital: '3p', be: 10 },\n  { element: 'S', orbital: '3p', be: 8 },\n  { element: 'Cl', orbital: '3p', be: 7 },\n  { element: 'Ar', orbital: '3p', be: 12 },\n  { element: 'K', orbital: '3p', be: 18 },\n  { element: 'Ca', orbital: '3p', be: 26 },\n  { element: 'Sc', orbital: '3p', be: 32 },\n  { element: 'Ti', orbital: '3p', be: 34 },\n  { element: 'V', orbital: '3p', be: 38 },\n  { element: 'Cr', orbital: '3p', be: 43 },\n  { element: 'Mn', orbital: '3p', be: 49 },\n  { element: 'Fe', orbital: '3p', be: 56 },\n  { element: 'Co', orbital: '3p', be: 60 },\n  { element: 'Ni', orbital: '3p', be: 68 },\n  { element: 'Cu', orbital: '3p', be: 74 },\n  { element: 'Zn', orbital: '3p', be: 87 },\n  { element: 'Ga', orbital: '3p', be: 103 },\n  { element: 'Ge', orbital: '3p', be: 122 },\n  { element: 'As', orbital: '3p', be: 141 },\n  { element: 'Se', orbital: '3p', be: 162 },\n  { element: 'Br', orbital: '3p', be: 182 },\n  { element: 'Kr', orbital: '3p', be: 214 },\n  { element: 'Rb', orbital: '3p', be: 239 },\n  { element: 'Sr', orbital: '3p', be: 269 },\n  { element: 'Y', orbital: '3p', be: 301 },\n  { element: 'Zr', orbital: '3p', be: 331 },\n  { element: 'Nb', orbital: '3p', be: 363 },\n  { element: 'Mo', orbital: '3p', be: 393 },\n  { element: 'Tc', orbital: '3p', be: 425 },\n  { element: 'Ru', orbital: '3p', be: 461 },\n  { element: 'Rh', orbital: '3p', be: 496 },\n  { element: 'Pd', orbital: '3p', be: 531 },\n  { element: 'Ag', orbital: '3p', be: 571 },\n  { element: 'Cd', orbital: '3p', be: 617 },\n  { element: 'In', orbital: '3p', be: 664 },\n  { element: 'Sn', orbital: '3p', be: 715 },\n  { element: 'Sb', orbital: '3p', be: 766 },\n  { element: 'Te', orbital: '3p', be: 819 },\n  { element: 'I', orbital: '3p', be: 875 },\n  { element: 'Xe', orbital: '3p', be: 937 },\n  { element: 'Cs', orbital: '3p', be: 998 },\n  { element: 'Ba', orbital: '3p', be: 1063 },\n  { element: 'La', orbital: '3p', be: 1124 },\n  { element: 'Ce', orbital: '3p', be: 1186 },\n  { element: 'Pr', orbital: '3p', be: 1243 },\n  { element: 'Sc', orbital: '3d3/2', be: 7 },\n  { element: 'Ti', orbital: '3d3/2', be: 3 },\n  { element: 'V', orbital: '3d3/2', be: 2 },\n  { element: 'Cr', orbital: '3d3/2', be: 2 },\n  { element: 'Mn', orbital: '3d3/2', be: 4 },\n  { element: 'Fe', orbital: '3d3/2', be: 6 },\n  { element: 'Co', orbital: '3d3/2', be: 3 },\n  { element: 'Ni', orbital: '3d3/2', be: 4 },\n  { element: 'Cu', orbital: '3d3/2', be: 2 },\n  { element: 'Zn', orbital: '3d3/2', be: 9 },\n  { element: 'Ga', orbital: '3d3/2', be: 18 },\n  { element: 'Ge', orbital: '3d3/2', be: 29 },\n  { element: 'As', orbital: '3d3/2', be: 41 },\n  { element: 'Se', orbital: '3d3/2', be: 57 },\n  { element: 'Br', orbital: '3d3/2', be: 70 },\n  { element: 'Kr', orbital: '3d3/2', be: 89 },\n  { element: 'Rb', orbital: '3d3/2', be: 112 },\n  { element: 'Sr', orbital: '3d3/2', be: 135 },\n  { element: 'Y', orbital: '3d3/2', be: 160 },\n  { element: 'Zr', orbital: '3d3/2', be: 183 },\n  { element: 'Nb', orbital: '3d3/2', be: 208 },\n  { element: 'Mo', orbital: '3d3/2', be: 230 },\n  { element: 'Tc', orbital: '3d3/2', be: 257 },\n  { element: 'Ru', orbital: '3d3/2', be: 284 },\n  { element: 'Rh', orbital: '3d3/2', be: 312 },\n  { element: 'Pd', orbital: '3d3/2', be: 340 },\n  { element: 'Ag', orbital: '3d3/2', be: 373 },\n  { element: 'Cd', orbital: '3d3/2', be: 411 },\n  { element: 'In', orbital: '3d3/2', be: 451 },\n  { element: 'Sn', orbital: '3d3/2', be: 494 },\n  { element: 'Sb', orbital: '3d3/2', be: 537 },\n  { element: 'Te', orbital: '3d3/2', be: 582 },\n  { element: 'I', orbital: '3d3/2', be: 631 },\n  { element: 'Xe', orbital: '3d3/2', be: 685 },\n  { element: 'Cs', orbital: '3d3/2', be: 740 },\n  { element: 'Ba', orbital: '3d3/2', be: 796 },\n  { element: 'La', orbital: '3d3/2', be: 849 },\n  { element: 'Ce', orbital: '3d3/2', be: 902 },\n  { element: 'Pr', orbital: '3d3/2', be: 951 },\n  { element: 'Nd', orbital: '3d3/2', be: 1000 },\n  { element: 'Pm', orbital: '3d3/2', be: 1052 },\n  { element: 'Sm', orbital: '3d3/2', be: 1107 },\n  { element: 'Eu', orbital: '3d3/2', be: 1161 },\n  { element: 'Gd', orbital: '3d3/2', be: 1218 },\n  { element: 'Sc', orbital: '3d5/2', be: 7 },\n  { element: 'Ti', orbital: '3d5/2', be: 3 },\n  { element: 'V', orbital: '3d5/2', be: 2 },\n  { element: 'Cr', orbital: '3d5/2', be: 2 },\n  { element: 'Mn', orbital: '3d5/2', be: 4 },\n  { element: 'Fe', orbital: '3d5/2', be: 6 },\n  { element: 'Co', orbital: '3d5/2', be: 3 },\n  { element: 'Ni', orbital: '3d5/2', be: 4 },\n  { element: 'Cu', orbital: '3d5/2', be: 2 },\n  { element: 'Zn', orbital: '3d5/2', be: 9 },\n  { element: 'Ga', orbital: '3d5/2', be: 18 },\n  { element: 'Ge', orbital: '3d5/2', be: 29 },\n  { element: 'As', orbital: '3d5/2', be: 41 },\n  { element: 'Se', orbital: '3d5/2', be: 57 },\n  { element: 'Br', orbital: '3d5/2', be: 69 },\n  { element: 'Kr', orbital: '3d5/2', be: 89 },\n  { element: 'Rb', orbital: '3d5/2', be: 111 },\n  { element: 'Sr', orbital: '3d5/2', be: 133 },\n  { element: 'Y', orbital: '3d5/2', be: 158 },\n  { element: 'Zr', orbital: '3d5/2', be: 180 },\n  { element: 'Nb', orbital: '3d5/2', be: 205 },\n  { element: 'Mo', orbital: '3d5/2', be: 227 },\n  { element: 'Tc', orbital: '3d5/2', be: 253 },\n  { element: 'Ru', orbital: '3d5/2', be: 279 },\n  { element: 'Rh', orbital: '3d5/2', be: 307 },\n  { element: 'Pd', orbital: '3d5/2', be: 335 },\n  { element: 'Ag', orbital: '3d5/2', be: 367 },\n  { element: 'Cd', orbital: '3d5/2', be: 404 },\n  { element: 'In', orbital: '3d5/2', be: 443 },\n  { element: 'Sn', orbital: '3d5/2', be: 485 },\n  { element: 'Sb', orbital: '3d5/2', be: 528 },\n  { element: 'Te', orbital: '3d5/2', be: 572 },\n  { element: 'I', orbital: '3d5/2', be: 620 },\n  { element: 'Xe', orbital: '3d5/2', be: 672 },\n  { element: 'Cs', orbital: '3d5/2', be: 726 },\n  { element: 'Ba', orbital: '3d5/2', be: 781 },\n  { element: 'La', orbital: '3d5/2', be: 832 },\n  { element: 'Ce', orbital: '3d5/2', be: 884 },\n  { element: 'Pr', orbital: '3d5/2', be: 931 },\n  { element: 'Nd', orbital: '3d5/2', be: 978 },\n  { element: 'Pm', orbital: '3d5/2', be: 1027 },\n  { element: 'Sm', orbital: '3d5/2', be: 1081 },\n  { element: 'Eu', orbital: '3d5/2', be: 1131 },\n  { element: 'Gd', orbital: '3d5/2', be: 1186 },\n  { element: 'Tb', orbital: '3d5/2', be: 1242 },\n  { element: 'Sc', orbital: '3d', be: 7 },\n  { element: 'Ti', orbital: '3d', be: 3 },\n  { element: 'V', orbital: '3d', be: 2 },\n  { element: 'Cr', orbital: '3d', be: 2 },\n  { element: 'Mn', orbital: '3d', be: 4 },\n  { element: 'Fe', orbital: '3d', be: 6 },\n  { element: 'Co', orbital: '3d', be: 3 },\n  { element: 'Ni', orbital: '3d', be: 4 },\n  { element: 'Cu', orbital: '3d', be: 2 },\n  { element: 'Zn', orbital: '3d', be: 9 },\n  { element: 'Ga', orbital: '3d', be: 18 },\n  { element: 'Ge', orbital: '3d', be: 29 },\n  { element: 'As', orbital: '3d', be: 41 },\n  { element: 'Se', orbital: '3d', be: 57 },\n  { element: 'Br', orbital: '3d', be: 69 },\n  { element: 'Kr', orbital: '3d', be: 89 },\n  { element: 'Rb', orbital: '3d', be: 111 },\n  { element: 'Sr', orbital: '3d', be: 133 },\n  { element: 'Y', orbital: '3d', be: 158 },\n  { element: 'Zr', orbital: '3d', be: 180 },\n  { element: 'Nb', orbital: '3d', be: 205 },\n  { element: 'Mo', orbital: '3d', be: 227 },\n  { element: 'Tc', orbital: '3d', be: 253 },\n  { element: 'Ru', orbital: '3d', be: 279 },\n  { element: 'Rh', orbital: '3d', be: 307 },\n  { element: 'Pd', orbital: '3d', be: 335 },\n  { element: 'Ag', orbital: '3d', be: 367 },\n  { element: 'Cd', orbital: '3d', be: 404 },\n  { element: 'In', orbital: '3d', be: 443 },\n  { element: 'Sn', orbital: '3d', be: 485 },\n  { element: 'Sb', orbital: '3d', be: 528 },\n  { element: 'Te', orbital: '3d', be: 572 },\n  { element: 'I', orbital: '3d', be: 620 },\n  { element: 'Xe', orbital: '3d', be: 672 },\n  { element: 'Cs', orbital: '3d', be: 726 },\n  { element: 'Ba', orbital: '3d', be: 781 },\n  { element: 'La', orbital: '3d', be: 832 },\n  { element: 'Ce', orbital: '3d', be: 884 },\n  { element: 'Pr', orbital: '3d', be: 931 },\n  { element: 'Nd', orbital: '3d', be: 978 },\n  { element: 'Pm', orbital: '3d', be: 1027 },\n  { element: 'Sm', orbital: '3d', be: 1081 },\n  { element: 'Eu', orbital: '3d', be: 1131 },\n  { element: 'Gd', orbital: '3d', be: 1186 },\n  { element: 'Tb', orbital: '3d', be: 1242 },\n  { element: 'Br', orbital: '4s', be: 27 },\n  { element: 'Kr', orbital: '4s', be: 24 },\n  { element: 'Rb', orbital: '4s', be: 30 },\n  { element: 'Sr', orbital: '4s', be: 38 },\n  { element: 'Y', orbital: '4s', be: 46 },\n  { element: 'Zr', orbital: '4s', be: 52 },\n  { element: 'Nb', orbital: '4s', be: 58 },\n  { element: 'Mo', orbital: '4s', be: 62 },\n  { element: 'Tc', orbital: '4s', be: 68 },\n  { element: 'Ru', orbital: '4s', be: 75 },\n  { element: 'Rh', orbital: '4s', be: 81 },\n  { element: 'Pd', orbital: '4s', be: 86 },\n  { element: 'Ag', orbital: '4s', be: 95 },\n  { element: 'Cd', orbital: '4s', be: 108 },\n  { element: 'In', orbital: '4s', be: 122 },\n  { element: 'Sn', orbital: '4s', be: 137 },\n  { element: 'Sb', orbital: '4s', be: 152 },\n  { element: 'Te', orbital: '4s', be: 168 },\n  { element: 'I', orbital: '4s', be: 186 },\n  { element: 'Xe', orbital: '4s', be: 208 },\n  { element: 'Cs', orbital: '4s', be: 231 },\n  { element: 'Ba', orbital: '4s', be: 253 },\n  { element: 'La', orbital: '4s', be: 271 },\n  { element: 'Ce', orbital: '4s', be: 290 },\n  { element: 'Pr', orbital: '4s', be: 305 },\n  { element: 'Nd', orbital: '4s', be: 316 },\n  { element: 'Pm', orbital: '4s', be: 331 },\n  { element: 'Sm', orbital: '4s', be: 347 },\n  { element: 'Eu', orbital: '4s', be: 360 },\n  { element: 'Gd', orbital: '4s', be: 376 },\n  { element: 'Tb', orbital: '4s', be: 398 },\n  { element: 'Dy', orbital: '4s', be: 416 },\n  { element: 'Ho', orbital: '4s', be: 436 },\n  { element: 'Er', orbital: '4s', be: 449 },\n  { element: 'Tm', orbital: '4s', be: 472 },\n  { element: 'Yb', orbital: '4s', be: 487 },\n  { element: 'Lu', orbital: '4s', be: 506 },\n  { element: 'Hf', orbital: '4s', be: 538 },\n  { element: 'Ta', orbital: '4s', be: 566 },\n  { element: 'W', orbital: '4s', be: 595 },\n  { element: 'Re', orbital: '4s', be: 625 },\n  { element: 'Os', orbital: '4s', be: 655 },\n  { element: 'Ir', orbital: '4s', be: 690 },\n  { element: 'Pt', orbital: '4s', be: 724 },\n  { element: 'Au', orbital: '4s', be: 759 },\n  { element: 'Hg', orbital: '4s', be: 800 },\n  { element: 'Tl', orbital: '4s', be: 846 },\n  { element: 'Pb', orbital: '4s', be: 894 },\n  { element: 'Bi', orbital: '4s', be: 939 },\n  { element: 'Po', orbital: '4s', be: 995 },\n  { element: 'At', orbital: '4s', be: 1042 },\n  { element: 'Rn', orbital: '4s', be: 1097 },\n  { element: 'Fr', orbital: '4s', be: 1153 },\n  { element: 'Ra', orbital: '4s', be: 1208 },\n  { element: 'U', orbital: '4s', be: 1043 },\n  { element: 'Ga', orbital: '4p1/2', be: 1 },\n  { element: 'Ge', orbital: '4p1/2', be: 3 },\n  { element: 'As', orbital: '4p1/2', be: 3 },\n  { element: 'Se', orbital: '4p1/2', be: 6 },\n  { element: 'Br', orbital: '4p1/2', be: 5 },\n  { element: 'Kr', orbital: '4p1/2', be: 11 },\n  { element: 'Rb', orbital: '4p1/2', be: 15 },\n  { element: 'Sr', orbital: '4p1/2', be: 20 },\n  { element: 'Y', orbital: '4p1/2', be: 26 },\n  { element: 'Zr', orbital: '4p1/2', be: 29 },\n  { element: 'Nb', orbital: '4p1/2', be: 34 },\n  { element: 'Mo', orbital: '4p1/2', be: 35 },\n  { element: 'Tc', orbital: '4p1/2', be: 39 },\n  { element: 'Ru', orbital: '4p1/2', be: 43 },\n  { element: 'Rh', orbital: '4p1/2', be: 48 },\n  { element: 'Pd', orbital: '4p1/2', be: 51 },\n  { element: 'Ag', orbital: '4p1/2', be: 62 },\n  { element: 'Cd', orbital: '4p1/2', be: 67 },\n  { element: 'In', orbital: '4p1/2', be: 77 },\n  { element: 'Sn', orbital: '4p1/2', be: 89 },\n  { element: 'Sb', orbital: '4p1/2', be: 99 },\n  { element: 'Te', orbital: '4p1/2', be: 110 },\n  { element: 'I', orbital: '4p1/2', be: 123 },\n  { element: 'Xe', orbital: '4p1/2', be: 147 },\n  { element: 'Cs', orbital: '4p1/2', be: 172 },\n  { element: 'Ba', orbital: '4p1/2', be: 192 },\n  { element: 'La', orbital: '4p1/2', be: 206 },\n  { element: 'Ce', orbital: '4p1/2', be: 224 },\n  { element: 'Pr', orbital: '4p1/2', be: 237 },\n  { element: 'Nd', orbital: '4p1/2', be: 244 },\n  { element: 'Pm', orbital: '4p1/2', be: 255 },\n  { element: 'Sm', orbital: '4p1/2', be: 267 },\n  { element: 'Eu', orbital: '4p1/2', be: 284 },\n  { element: 'Gd', orbital: '4p1/2', be: 289 },\n  { element: 'Tb', orbital: '4p1/2', be: 311 },\n  { element: 'Dy', orbital: '4p1/2', be: 332 },\n  { element: 'Ho', orbital: '4p1/2', be: 343 },\n  { element: 'Er', orbital: '4p1/2', be: 366 },\n  { element: 'Tm', orbital: '4p1/2', be: 386 },\n  { element: 'Yb', orbital: '4p1/2', be: 396 },\n  { element: 'Lu', orbital: '4p1/2', be: 410 },\n  { element: 'Hf', orbital: '4p1/2', be: 437 },\n  { element: 'Ta', orbital: '4p1/2', be: 465 },\n  { element: 'W', orbital: '4p1/2', be: 492 },\n  { element: 'Re', orbital: '4p1/2', be: 518 },\n  { element: 'Os', orbital: '4p1/2', be: 547 },\n  { element: 'Ir', orbital: '4p1/2', be: 577 },\n  { element: 'Pt', orbital: '4p1/2', be: 608 },\n  { element: 'Au', orbital: '4p1/2', be: 644 },\n  { element: 'Hg', orbital: '4p1/2', be: 677 },\n  { element: 'Tl', orbital: '4p1/2', be: 722 },\n  { element: 'Pb', orbital: '4p1/2', be: 764 },\n  { element: 'Bi', orbital: '4p1/2', be: 806 },\n  { element: 'Po', orbital: '4p1/2', be: 851 },\n  { element: 'At', orbital: '4p1/2', be: 886 },\n  { element: 'Rn', orbital: '4p1/2', be: 929 },\n  { element: 'Fr', orbital: '4p1/2', be: 980 },\n  { element: 'Ra', orbital: '4p1/2', be: 1058 },\n  { element: 'Ac', orbital: '4p1/2', be: 1080 },\n  { element: 'Th', orbital: '4p1/2', be: 1168 },\n  { element: 'Ga', orbital: '4p3/2', be: 1 },\n  { element: 'Ge', orbital: '4p3/2', be: 3 },\n  { element: 'As', orbital: '4p3/2', be: 3 },\n  { element: 'Se', orbital: '4p3/2', be: 6 },\n  { element: 'Br', orbital: '4p3/2', be: 5 },\n  { element: 'Kr', orbital: '4p3/2', be: 11 },\n  { element: 'Rb', orbital: '4p3/2', be: 14 },\n  { element: 'Sr', orbital: '4p3/2', be: 20 },\n  { element: 'Y', orbital: '4p3/2', be: 26 },\n  { element: 'Zr', orbital: '4p3/2', be: 29 },\n  { element: 'Nb', orbital: '4p3/2', be: 34 },\n  { element: 'Mo', orbital: '4p3/2', be: 35 },\n  { element: 'Tc', orbital: '4p3/2', be: 39 },\n  { element: 'Ru', orbital: '4p3/2', be: 43 },\n  { element: 'Rh', orbital: '4p3/2', be: 48 },\n  { element: 'Pd', orbital: '4p3/2', be: 56 },\n  { element: 'Ag', orbital: '4p3/2', be: 56 },\n  { element: 'Cd', orbital: '4p3/2', be: 67 },\n  { element: 'In', orbital: '4p3/2', be: 77 },\n  { element: 'Sn', orbital: '4p3/2', be: 89 },\n  { element: 'Sb', orbital: '4p3/2', be: 99 },\n  { element: 'Te', orbital: '4p3/2', be: 110 },\n  { element: 'I', orbital: '4p3/2', be: 123 },\n  { element: 'Xe', orbital: '4p3/2', be: 147 },\n  { element: 'Cs', orbital: '4p3/2', be: 162 },\n  { element: 'Ba', orbital: '4p3/2', be: 180 },\n  { element: 'La', orbital: '4p3/2', be: 192 },\n  { element: 'Ce', orbital: '4p3/2', be: 208 },\n  { element: 'Pr', orbital: '4p3/2', be: 218 },\n  { element: 'Nd', orbital: '4p3/2', be: 225 },\n  { element: 'Pm', orbital: '4p3/2', be: 237 },\n  { element: 'Sm', orbital: '4p3/2', be: 249 },\n  { element: 'Eu', orbital: '4p3/2', be: 257 },\n  { element: 'Gd', orbital: '4p3/2', be: 271 },\n  { element: 'Tb', orbital: '4p3/2', be: 286 },\n  { element: 'Dy', orbital: '4p3/2', be: 293 },\n  { element: 'Ho', orbital: '4p3/2', be: 306 },\n  { element: 'Er', orbital: '4p3/2', be: 320 },\n  { element: 'Tm', orbital: '4p3/2', be: 337 },\n  { element: 'Yb', orbital: '4p3/2', be: 343 },\n  { element: 'Lu', orbital: '4p3/2', be: 359 },\n  { element: 'Hf', orbital: '4p3/2', be: 380 },\n  { element: 'Ta', orbital: '4p3/2', be: 405 },\n  { element: 'W', orbital: '4p3/2', be: 426 },\n  { element: 'Re', orbital: '4p3/2', be: 445 },\n  { element: 'Os', orbital: '4p3/2', be: 469 },\n  { element: 'Ir', orbital: '4p3/2', be: 495 },\n  { element: 'Pt', orbital: '4p3/2', be: 519 },\n  { element: 'Au', orbital: '4p3/2', be: 546 },\n  { element: 'Hg', orbital: '4p3/2', be: 571 },\n  { element: 'Tl', orbital: '4p3/2', be: 609 },\n  { element: 'Pb', orbital: '4p3/2', be: 645 },\n  { element: 'Bi', orbital: '4p3/2', be: 679 },\n  { element: 'Po', orbital: '4p3/2', be: 705 },\n  { element: 'At', orbital: '4p3/2', be: 740 },\n  { element: 'Rn', orbital: '4p3/2', be: 768 },\n  { element: 'Fr', orbital: '4p3/2', be: 810 },\n  { element: 'Ra', orbital: '4p3/2', be: 879 },\n  { element: 'Ac', orbital: '4p3/2', be: 890 },\n  { element: 'Th', orbital: '4p3/2', be: 968 },\n  { element: 'Ga', orbital: '4p', be: 1 },\n  { element: 'Ge', orbital: '4p', be: 3 },\n  { element: 'As', orbital: '4p', be: 3 },\n  { element: 'Se', orbital: '4p', be: 6 },\n  { element: 'Br', orbital: '4p', be: 5 },\n  { element: 'Kr', orbital: '4p', be: 11 },\n  { element: 'Rb', orbital: '4p', be: 14 },\n  { element: 'Sr', orbital: '4p', be: 20 },\n  { element: 'Y', orbital: '4p', be: 26 },\n  { element: 'Zr', orbital: '4p', be: 29 },\n  { element: 'Nb', orbital: '4p', be: 34 },\n  { element: 'Mo', orbital: '4p', be: 35 },\n  { element: 'Tc', orbital: '4p', be: 39 },\n  { element: 'Ru', orbital: '4p', be: 43 },\n  { element: 'Rh', orbital: '4p', be: 48 },\n  { element: 'Pd', orbital: '4p', be: 56 },\n  { element: 'Ag', orbital: '4p', be: 56 },\n  { element: 'Cd', orbital: '4p', be: 67 },\n  { element: 'In', orbital: '4p', be: 77 },\n  { element: 'Sn', orbital: '4p', be: 89 },\n  { element: 'Sb', orbital: '4p', be: 99 },\n  { element: 'Te', orbital: '4p', be: 110 },\n  { element: 'I', orbital: '4p', be: 123 },\n  { element: 'Xe', orbital: '4p', be: 147 },\n  { element: 'Cs', orbital: '4p', be: 162 },\n  { element: 'Ba', orbital: '4p', be: 180 },\n  { element: 'La', orbital: '4p', be: 192 },\n  { element: 'Ce', orbital: '4p', be: 208 },\n  { element: 'Pr', orbital: '4p', be: 218 },\n  { element: 'Nd', orbital: '4p', be: 225 },\n  { element: 'Pm', orbital: '4p', be: 237 },\n  { element: 'Sm', orbital: '4p', be: 249 },\n  { element: 'Eu', orbital: '4p', be: 257 },\n  { element: 'Gd', orbital: '4p', be: 271 },\n  { element: 'Tb', orbital: '4p', be: 286 },\n  { element: 'Dy', orbital: '4p', be: 293 },\n  { element: 'Ho', orbital: '4p', be: 306 },\n  { element: 'Er', orbital: '4p', be: 320 },\n  { element: 'Tm', orbital: '4p', be: 337 },\n  { element: 'Yb', orbital: '4p', be: 343 },\n  { element: 'Lu', orbital: '4p', be: 359 },\n  { element: 'Hf', orbital: '4p', be: 380 },\n  { element: 'Ta', orbital: '4p', be: 405 },\n  { element: 'W', orbital: '4p', be: 426 },\n  { element: 'Re', orbital: '4p', be: 445 },\n  { element: 'Os', orbital: '4p', be: 469 },\n  { element: 'Ir', orbital: '4p', be: 495 },\n  { element: 'Pt', orbital: '4p', be: 519 },\n  { element: 'Au', orbital: '4p', be: 546 },\n  { element: 'Hg', orbital: '4p', be: 571 },\n  { element: 'Tl', orbital: '4p', be: 609 },\n  { element: 'Pb', orbital: '4p', be: 645 },\n  { element: 'Bi', orbital: '4p', be: 679 },\n  { element: 'Po', orbital: '4p', be: 705 },\n  { element: 'At', orbital: '4p', be: 740 },\n  { element: 'Rn', orbital: '4p', be: 768 },\n  { element: 'Fr', orbital: '4p', be: 810 },\n  { element: 'Ra', orbital: '4p', be: 879 },\n  { element: 'Ac', orbital: '4p', be: 890 },\n  { element: 'Th', orbital: '4p', be: 968 },\n  { element: 'Y', orbital: '4d3/2', be: 3 },\n  { element: 'Zr', orbital: '4d3/2', be: 3 },\n  { element: 'Nb', orbital: '4d3/2', be: 4 },\n  { element: 'Mo', orbital: '4d3/2', be: 2 },\n  { element: 'Tc', orbital: '4d3/2', be: 2 },\n  { element: 'Ru', orbital: '4d3/2', be: 2 },\n  { element: 'Rh', orbital: '4d3/2', be: 3 },\n  { element: 'Pd', orbital: '4d3/2', be: 1 },\n  { element: 'Ag', orbital: '4d3/2', be: 3 },\n  { element: 'Cd', orbital: '4d3/2', be: 9 },\n  { element: 'In', orbital: '4d3/2', be: 16 },\n  { element: 'Sn', orbital: '4d3/2', be: 24 },\n  { element: 'Sb', orbital: '4d3/2', be: 32 },\n  { element: 'Te', orbital: '4d3/2', be: 40 },\n  { element: 'I', orbital: '4d3/2', be: 50 },\n  { element: 'Xe', orbital: '4d3/2', be: 63 },\n  { element: 'Cs', orbital: '4d3/2', be: 79 },\n  { element: 'Ba', orbital: '4d3/2', be: 93 },\n  { element: 'La', orbital: '4d3/2', be: 99 },\n  { element: 'Ce', orbital: '4d3/2', be: 111 },\n  { element: 'Pr', orbital: '4d3/2', be: 114 },\n  { element: 'Nd', orbital: '4d3/2', be: 118 },\n  { element: 'Pm', orbital: '4d3/2', be: 121 },\n  { element: 'Sm', orbital: '4d3/2', be: 130 },\n  { element: 'Eu', orbital: '4d3/2', be: 134 },\n  { element: 'Gd', orbital: '4d3/2', be: 141 },\n  { element: 'Tb', orbital: '4d3/2', be: 148 },\n  { element: 'Dy', orbital: '4d3/2', be: 154 },\n  { element: 'Ho', orbital: '4d3/2', be: 161 },\n  { element: 'Er', orbital: '4d3/2', be: 177 },\n  { element: 'Tm', orbital: '4d3/2', be: 180 },\n  { element: 'Yb', orbital: '4d3/2', be: 197 },\n  { element: 'Lu', orbital: '4d3/2', be: 205 },\n  { element: 'Hf', orbital: '4d3/2', be: 224 },\n  { element: 'Ta', orbital: '4d3/2', be: 242 },\n  { element: 'W', orbital: '4d3/2', be: 259 },\n  { element: 'Re', orbital: '4d3/2', be: 274 },\n  { element: 'Os', orbital: '4d3/2', be: 290 },\n  { element: 'Ir', orbital: '4d3/2', be: 312 },\n  { element: 'Pt', orbital: '4d3/2', be: 331 },\n  { element: 'Au', orbital: '4d3/2', be: 352 },\n  { element: 'Hg', orbital: '4d3/2', be: 379 },\n  { element: 'Tl', orbital: '4d3/2', be: 407 },\n  { element: 'Pb', orbital: '4d3/2', be: 435 },\n  { element: 'Bi', orbital: '4d3/2', be: 464 },\n  { element: 'Po', orbital: '4d3/2', be: 500 },\n  { element: 'At', orbital: '4d3/2', be: 533 },\n  { element: 'Rn', orbital: '4d3/2', be: 567 },\n  { element: 'Fr', orbital: '4d3/2', be: 603 },\n  { element: 'Ra', orbital: '4d3/2', be: 636 },\n  { element: 'Ac', orbital: '4d3/2', be: 675 },\n  { element: 'Th', orbital: '4d3/2', be: 714 },\n  { element: 'U', orbital: '4d3/2', be: 781 },\n  { element: 'Y', orbital: '4d5/2', be: 3 },\n  { element: 'Zr', orbital: '4d5/2', be: 3 },\n  { element: 'Nb', orbital: '4d5/2', be: 4 },\n  { element: 'Mo', orbital: '4d5/2', be: 2 },\n  { element: 'Tc', orbital: '4d5/2', be: 2 },\n  { element: 'Ru', orbital: '4d5/2', be: 2 },\n  { element: 'Rh', orbital: '4d5/2', be: 3 },\n  { element: 'Pd', orbital: '4d5/2', be: 1 },\n  { element: 'Ag', orbital: '4d5/2', be: 3 },\n  { element: 'Cd', orbital: '4d5/2', be: 9 },\n  { element: 'In', orbital: '4d5/2', be: 16 },\n  { element: 'Sn', orbital: '4d5/2', be: 24 },\n  { element: 'Sb', orbital: '4d5/2', be: 32 },\n  { element: 'Te', orbital: '4d5/2', be: 40 },\n  { element: 'I', orbital: '4d5/2', be: 50 },\n  { element: 'Xe', orbital: '4d5/2', be: 63 },\n  { element: 'Cs', orbital: '4d5/2', be: 77 },\n  { element: 'Ba', orbital: '4d5/2', be: 90 },\n  { element: 'La', orbital: '4d5/2', be: 99 },\n  { element: 'Ce', orbital: '4d5/2', be: 111 },\n  { element: 'Pr', orbital: '4d5/2', be: 114 },\n  { element: 'Nd', orbital: '4d5/2', be: 118 },\n  { element: 'Pm', orbital: '4d5/2', be: 121 },\n  { element: 'Sm', orbital: '4d5/2', be: 130 },\n  { element: 'Eu', orbital: '4d5/2', be: 134 },\n  { element: 'Gd', orbital: '4d5/2', be: 141 },\n  { element: 'Tb', orbital: '4d5/2', be: 148 },\n  { element: 'Dy', orbital: '4d5/2', be: 154 },\n  { element: 'Ho', orbital: '4d5/2', be: 161 },\n  { element: 'Er', orbital: '4d5/2', be: 168 },\n  { element: 'Tm', orbital: '4d5/2', be: 180 },\n  { element: 'Yb', orbital: '4d5/2', be: 184 },\n  { element: 'Lu', orbital: '4d5/2', be: 195 },\n  { element: 'Hf', orbital: '4d5/2', be: 214 },\n  { element: 'Ta', orbital: '4d5/2', be: 230 },\n  { element: 'W', orbital: '4d5/2', be: 246 },\n  { element: 'Re', orbital: '4d5/2', be: 260 },\n  { element: 'Os', orbital: '4d5/2', be: 273 },\n  { element: 'Ir', orbital: '4d5/2', be: 295 },\n  { element: 'Pt', orbital: '4d5/2', be: 314 },\n  { element: 'Au', orbital: '4d5/2', be: 334 },\n  { element: 'Hg', orbital: '4d5/2', be: 360 },\n  { element: 'Tl', orbital: '4d5/2', be: 386 },\n  { element: 'Pb', orbital: '4d5/2', be: 413 },\n  { element: 'Bi', orbital: '4d5/2', be: 440 },\n  { element: 'Po', orbital: '4d5/2', be: 473 },\n  { element: 'At', orbital: '4d5/2', be: 507 },\n  { element: 'Rn', orbital: '4d5/2', be: 541 },\n  { element: 'Fr', orbital: '4d5/2', be: 577 },\n  { element: 'Ra', orbital: '4d5/2', be: 603 },\n  { element: 'Ac', orbital: '4d5/2', be: 639 },\n  { element: 'Th', orbital: '4d5/2', be: 677 },\n  { element: 'U', orbital: '4d5/2', be: 739 },\n  { element: 'Y', orbital: '4d', be: 3 },\n  { element: 'Zr', orbital: '4d', be: 3 },\n  { element: 'Nb', orbital: '4d', be: 4 },\n  { element: 'Mo', orbital: '4d', be: 2 },\n  { element: 'Tc', orbital: '4d', be: 2 },\n  { element: 'Ru', orbital: '4d', be: 2 },\n  { element: 'Rh', orbital: '4d', be: 3 },\n  { element: 'Pd', orbital: '4d', be: 1 },\n  { element: 'Ag', orbital: '4d', be: 3 },\n  { element: 'Cd', orbital: '4d', be: 9 },\n  { element: 'In', orbital: '4d', be: 16 },\n  { element: 'Sn', orbital: '4d', be: 24 },\n  { element: 'Sb', orbital: '4d', be: 32 },\n  { element: 'Te', orbital: '4d', be: 40 },\n  { element: 'I', orbital: '4d', be: 50 },\n  { element: 'Xe', orbital: '4d', be: 63 },\n  { element: 'Cs', orbital: '4d', be: 77 },\n  { element: 'Ba', orbital: '4d', be: 90 },\n  { element: 'La', orbital: '4d', be: 99 },\n  { element: 'Ce', orbital: '4d', be: 111 },\n  { element: 'Pr', orbital: '4d', be: 114 },\n  { element: 'Nd', orbital: '4d', be: 118 },\n  { element: 'Pm', orbital: '4d', be: 121 },\n  { element: 'Sm', orbital: '4d', be: 130 },\n  { element: 'Eu', orbital: '4d', be: 134 },\n  { element: 'Gd', orbital: '4d', be: 141 },\n  { element: 'Tb', orbital: '4d', be: 148 },\n  { element: 'Dy', orbital: '4d', be: 154 },\n  { element: 'Ho', orbital: '4d', be: 161 },\n  { element: 'Er', orbital: '4d', be: 168 },\n  { element: 'Tm', orbital: '4d', be: 180 },\n  { element: 'Yb', orbital: '4d', be: 184 },\n  { element: 'Lu', orbital: '4d', be: 195 },\n  { element: 'Hf', orbital: '4d', be: 214 },\n  { element: 'Ta', orbital: '4d', be: 230 },\n  { element: 'W', orbital: '4d', be: 246 },\n  { element: 'Re', orbital: '4d', be: 260 },\n  { element: 'Os', orbital: '4d', be: 273 },\n  { element: 'Ir', orbital: '4d', be: 295 },\n  { element: 'Pt', orbital: '4d', be: 314 },\n  { element: 'Au', orbital: '4d', be: 334 },\n  { element: 'Hg', orbital: '4d', be: 360 },\n  { element: 'Tl', orbital: '4d', be: 386 },\n  { element: 'Pb', orbital: '4d', be: 413 },\n  { element: 'Bi', orbital: '4d', be: 440 },\n  { element: 'Po', orbital: '4d', be: 473 },\n  { element: 'At', orbital: '4d', be: 507 },\n  { element: 'Rn', orbital: '4d', be: 541 },\n  { element: 'Fr', orbital: '4d', be: 577 },\n  { element: 'Ra', orbital: '4d', be: 603 },\n  { element: 'Ac', orbital: '4d', be: 639 },\n  { element: 'Th', orbital: '4d', be: 677 },\n  { element: 'U', orbital: '4d', be: 739 },\n  { element: 'Ce', orbital: '4f5/2', be: 1 },\n  { element: 'Pr', orbital: '4f5/2', be: 2 },\n  { element: 'Nd', orbital: '4f5/2', be: 2 },\n  { element: 'Pm', orbital: '4f5/2', be: 4 },\n  { element: 'Sm', orbital: '4f5/2', be: 7 },\n  { element: 'Tb', orbital: '4f5/2', be: 3 },\n  { element: 'Dy', orbital: '4f5/2', be: 4 },\n  { element: 'Ho', orbital: '4f5/2', be: 4 },\n  { element: 'Er', orbital: '4f5/2', be: 4 },\n  { element: 'Tm', orbital: '4f5/2', be: 5 },\n  { element: 'Yb', orbital: '4f5/2', be: 6 },\n  { element: 'Lu', orbital: '4f5/2', be: 7 },\n  { element: 'Hf', orbital: '4f5/2', be: 19 },\n  { element: 'Ta', orbital: '4f5/2', be: 27 },\n  { element: 'W', orbital: '4f5/2', be: 37 },\n  { element: 'Re', orbital: '4f5/2', be: 47 },\n  { element: 'Os', orbital: '4f5/2', be: 52 },\n  { element: 'Ir', orbital: '4f5/2', be: 63 },\n  { element: 'Pt', orbital: '4f5/2', be: 74 },\n  { element: 'Au', orbital: '4f5/2', be: 87 },\n  { element: 'Hg', orbital: '4f5/2', be: 103 },\n  { element: 'Tl', orbital: '4f5/2', be: 122 },\n  { element: 'Pb', orbital: '4f5/2', be: 143 },\n  { element: 'Bi', orbital: '4f5/2', be: 163 },\n  { element: 'Po', orbital: '4f5/2', be: 184 },\n  { element: 'At', orbital: '4f5/2', be: 210 },\n  { element: 'Rn', orbital: '4f5/2', be: 238 },\n  { element: 'Fr', orbital: '4f5/2', be: 268 },\n  { element: 'Ra', orbital: '4f5/2', be: 299 },\n  { element: 'Ac', orbital: '4f5/2', be: 319 },\n  { element: 'Th', orbital: '4f5/2', be: 344 },\n  { element: 'U', orbital: '4f5/2', be: 391 },\n  { element: 'Ce', orbital: '4f7/2', be: 1 },\n  { element: 'Pr', orbital: '4f7/2', be: 2 },\n  { element: 'Nd', orbital: '4f7/2', be: 2 },\n  { element: 'Pm', orbital: '4f7/2', be: 4 },\n  { element: 'Sm', orbital: '4f7/2', be: 7 },\n  { element: 'Tb', orbital: '4f7/2', be: 3 },\n  { element: 'Dy', orbital: '4f7/2', be: 4 },\n  { element: 'Ho', orbital: '4f7/2', be: 4 },\n  { element: 'Er', orbital: '4f7/2', be: 4 },\n  { element: 'Tm', orbital: '4f7/2', be: 5 },\n  { element: 'Yb', orbital: '4f7/2', be: 6 },\n  { element: 'Lu', orbital: '4f7/2', be: 7 },\n  { element: 'Hf', orbital: '4f7/2', be: 18 },\n  { element: 'Ta', orbital: '4f7/2', be: 25 },\n  { element: 'W', orbital: '4f7/2', be: 34 },\n  { element: 'Re', orbital: '4f7/2', be: 45 },\n  { element: 'Os', orbital: '4f7/2', be: 50 },\n  { element: 'Ir', orbital: '4f7/2', be: 60 },\n  { element: 'Pt', orbital: '4f7/2', be: 70 },\n  { element: 'Au', orbital: '4f7/2', be: 83 },\n  { element: 'Hg', orbital: '4f7/2', be: 99 },\n  { element: 'Tl', orbital: '4f7/2', be: 118 },\n  { element: 'Pb', orbital: '4f7/2', be: 138 },\n  { element: 'Bi', orbital: '4f7/2', be: 158 },\n  { element: 'Po', orbital: '4f7/2', be: 184 },\n  { element: 'At', orbital: '4f7/2', be: 210 },\n  { element: 'Rn', orbital: '4f7/2', be: 238 },\n  { element: 'Fr', orbital: '4f7/2', be: 268 },\n  { element: 'Ra', orbital: '4f7/2', be: 299 },\n  { element: 'Ac', orbital: '4f7/2', be: 319 },\n  { element: 'Th', orbital: '4f7/2', be: 335 },\n  { element: 'U', orbital: '4f7/2', be: 380 },\n  { element: 'Ce', orbital: '4f', be: 1 },\n  { element: 'Pr', orbital: '4f', be: 2 },\n  { element: 'Nd', orbital: '4f', be: 2 },\n  { element: 'Pm', orbital: '4f', be: 4 },\n  { element: 'Sm', orbital: '4f', be: 7 },\n  { element: 'Tb', orbital: '4f', be: 3 },\n  { element: 'Dy', orbital: '4f', be: 4 },\n  { element: 'Ho', orbital: '4f', be: 4 },\n  { element: 'Er', orbital: '4f', be: 4 },\n  { element: 'Tm', orbital: '4f', be: 5 },\n  { element: 'Yb', orbital: '4f', be: 6 },\n  { element: 'Lu', orbital: '4f', be: 7 },\n  { element: 'Hf', orbital: '4f', be: 18 },\n  { element: 'Ta', orbital: '4f', be: 25 },\n  { element: 'W', orbital: '4f', be: 34 },\n  { element: 'Re', orbital: '4f', be: 45 },\n  { element: 'Os', orbital: '4f', be: 50 },\n  { element: 'Ir', orbital: '4f', be: 60 },\n  { element: 'Pt', orbital: '4f', be: 70 },\n  { element: 'Au', orbital: '4f', be: 83 },\n  { element: 'Hg', orbital: '4f', be: 99 },\n  { element: 'Tl', orbital: '4f', be: 118 },\n  { element: 'Pb', orbital: '4f', be: 138 },\n  { element: 'Bi', orbital: '4f', be: 158 },\n  { element: 'Po', orbital: '4f', be: 184 },\n  { element: 'At', orbital: '4f', be: 210 },\n  { element: 'Rn', orbital: '4f', be: 238 },\n  { element: 'Fr', orbital: '4f', be: 268 },\n  { element: 'Ra', orbital: '4f', be: 299 },\n  { element: 'Ac', orbital: '4f', be: 319 },\n  { element: 'Th', orbital: '4f', be: 335 },\n  { element: 'U', orbital: '4f', be: 380 },\n  { element: 'Sn', orbital: '5s', be: 1 },\n  { element: 'Sb', orbital: '5s', be: 7 },\n  { element: 'Te', orbital: '5s', be: 12 },\n  { element: 'I', orbital: '5s', be: 14 },\n  { element: 'Xe', orbital: '5s', be: 18 },\n  { element: 'Cs', orbital: '5s', be: 23 },\n  { element: 'Ba', orbital: '5s', be: 40 },\n  { element: 'La', orbital: '5s', be: 33 },\n  { element: 'Ce', orbital: '5s', be: 38 },\n  { element: 'Pr', orbital: '5s', be: 38 },\n  { element: 'Nd', orbital: '5s', be: 38 },\n  { element: 'Pm', orbital: '5s', be: 38 },\n  { element: 'Sm', orbital: '5s', be: 39 },\n  { element: 'Eu', orbital: '5s', be: 32 },\n  { element: 'Gd', orbital: '5s', be: 36 },\n  { element: 'Tb', orbital: '5s', be: 40 },\n  { element: 'Dy', orbital: '5s', be: 63 },\n  { element: 'Ho', orbital: '5s', be: 51 },\n  { element: 'Er', orbital: '5s', be: 60 },\n  { element: 'Tm', orbital: '5s', be: 53 },\n  { element: 'Yb', orbital: '5s', be: 53 },\n  { element: 'Lu', orbital: '5s', be: 57 },\n  { element: 'Hf', orbital: '5s', be: 65 },\n  { element: 'Ta', orbital: '5s', be: 71 },\n  { element: 'W', orbital: '5s', be: 77 },\n  { element: 'Re', orbital: '5s', be: 83 },\n  { element: 'Os', orbital: '5s', be: 84 },\n  { element: 'Ir', orbital: '5s', be: 96 },\n  { element: 'Pt', orbital: '5s', be: 102 },\n  { element: 'Au', orbital: '5s', be: 108 },\n  { element: 'Hg', orbital: '5s', be: 120 },\n  { element: 'Tl', orbital: '5s', be: 137 },\n  { element: 'Pb', orbital: '5s', be: 148 },\n  { element: 'Bi', orbital: '5s', be: 160 },\n  { element: 'Po', orbital: '5s', be: 177 },\n  { element: 'At', orbital: '5s', be: 195 },\n  { element: 'Rn', orbital: '5s', be: 214 },\n  { element: 'Fr', orbital: '5s', be: 234 },\n  { element: 'Ra', orbital: '5s', be: 254 },\n  { element: 'Ac', orbital: '5s', be: 272 },\n  { element: 'Th', orbital: '5s', be: 290 },\n  { element: 'In', orbital: '5p1/2', be: 1 },\n  { element: 'Sn', orbital: '5p1/2', be: 1 },\n  { element: 'Sb', orbital: '5p1/2', be: 2 },\n  { element: 'Te', orbital: '5p1/2', be: 2 },\n  { element: 'I', orbital: '5p1/2', be: 3 },\n  { element: 'Xe', orbital: '5p1/2', be: 7 },\n  { element: 'Cs', orbital: '5p1/2', be: 13 },\n  { element: 'Ba', orbital: '5p1/2', be: 17 },\n  { element: 'La', orbital: '5p1/2', be: 15 },\n  { element: 'Ce', orbital: '5p1/2', be: 20 },\n  { element: 'Pr', orbital: '5p1/2', be: 23 },\n  { element: 'Nd', orbital: '5p1/2', be: 22 },\n  { element: 'Pm', orbital: '5p1/2', be: 22 },\n  { element: 'Sm', orbital: '5p1/2', be: 22 },\n  { element: 'Eu', orbital: '5p1/2', be: 22 },\n  { element: 'Gd', orbital: '5p1/2', be: 21 },\n  { element: 'Tb', orbital: '5p1/2', be: 26 },\n  { element: 'Dy', orbital: '5p1/2', be: 26 },\n  { element: 'Ho', orbital: '5p1/2', be: 20 },\n  { element: 'Er', orbital: '5p1/2', be: 29 },\n  { element: 'Tm', orbital: '5p1/2', be: 32 },\n  { element: 'Yb', orbital: '5p1/2', be: 23 },\n  { element: 'Lu', orbital: '5p1/2', be: 28 },\n  { element: 'Hf', orbital: '5p1/2', be: 38 },\n  { element: 'Ta', orbital: '5p1/2', be: 45 },\n  { element: 'W', orbital: '5p1/2', be: 47 },\n  { element: 'Re', orbital: '5p1/2', be: 46 },\n  { element: 'Os', orbital: '5p1/2', be: 58 },\n  { element: 'Ir', orbital: '5p1/2', be: 63 },\n  { element: 'Pt', orbital: '5p1/2', be: 66 },\n  { element: 'Au', orbital: '5p1/2', be: 72 },\n  { element: 'Hg', orbital: '5p1/2', be: 81 },\n  { element: 'Tl', orbital: '5p1/2', be: 100 },\n  { element: 'Pb', orbital: '5p1/2', be: 105 },\n  { element: 'Bi', orbital: '5p1/2', be: 117 },\n  { element: 'Po', orbital: '5p1/2', be: 132 },\n  { element: 'At', orbital: '5p1/2', be: 148 },\n  { element: 'Rn', orbital: '5p1/2', be: 164 },\n  { element: 'Fr', orbital: '5p1/2', be: 182 },\n  { element: 'Ra', orbital: '5p1/2', be: 200 },\n  { element: 'Ac', orbital: '5p1/2', be: 215 },\n  { element: 'Th', orbital: '5p1/2', be: 229 },\n  { element: 'In', orbital: '5p3/2', be: 1 },\n  { element: 'Sn', orbital: '5p3/2', be: 1 },\n  { element: 'Sb', orbital: '5p3/2', be: 2 },\n  { element: 'Te', orbital: '5p3/2', be: 2 },\n  { element: 'I', orbital: '5p3/2', be: 3 },\n  { element: 'Xe', orbital: '5p3/2', be: 7 },\n  { element: 'Cs', orbital: '5p3/2', be: 12 },\n  { element: 'Ba', orbital: '5p3/2', be: 15 },\n  { element: 'La', orbital: '5p3/2', be: 15 },\n  { element: 'Ce', orbital: '5p3/2', be: 20 },\n  { element: 'Pr', orbital: '5p3/2', be: 23 },\n  { element: 'Nd', orbital: '5p3/2', be: 22 },\n  { element: 'Pm', orbital: '5p3/2', be: 22 },\n  { element: 'Sm', orbital: '5p3/2', be: 22 },\n  { element: 'Eu', orbital: '5p3/2', be: 22 },\n  { element: 'Gd', orbital: '5p3/2', be: 21 },\n  { element: 'Tb', orbital: '5p3/2', be: 26 },\n  { element: 'Dy', orbital: '5p3/2', be: 26 },\n  { element: 'Ho', orbital: '5p3/2', be: 20 },\n  { element: 'Er', orbital: '5p3/2', be: 29 },\n  { element: 'Tm', orbital: '5p3/2', be: 32 },\n  { element: 'Yb', orbital: '5p3/2', be: 23 },\n  { element: 'Lu', orbital: '5p3/2', be: 28 },\n  { element: 'Hf', orbital: '5p3/2', be: 31 },\n  { element: 'Ta', orbital: '5p3/2', be: 37 },\n  { element: 'W', orbital: '5p3/2', be: 37 },\n  { element: 'Re', orbital: '5p3/2', be: 35 },\n  { element: 'Os', orbital: '5p3/2', be: 46 },\n  { element: 'Ir', orbital: '5p3/2', be: 51 },\n  { element: 'Pt', orbital: '5p3/2', be: 51 },\n  { element: 'Au', orbital: '5p3/2', be: 54 },\n  { element: 'Hg', orbital: '5p3/2', be: 58 },\n  { element: 'Tl', orbital: '5p3/2', be: 76 },\n  { element: 'Pb', orbital: '5p3/2', be: 86 },\n  { element: 'Bi', orbital: '5p3/2', be: 93 },\n  { element: 'Po', orbital: '5p3/2', be: 104 },\n  { element: 'At', orbital: '5p3/2', be: 115 },\n  { element: 'Rn', orbital: '5p3/2', be: 127 },\n  { element: 'Fr', orbital: '5p3/2', be: 140 },\n  { element: 'Ra', orbital: '5p3/2', be: 153 },\n  { element: 'Ac', orbital: '5p3/2', be: 167 },\n  { element: 'Th', orbital: '5p3/2', be: 182 },\n  { element: 'In', orbital: '5p', be: 1 },\n  { element: 'Sn', orbital: '5p', be: 1 },\n  { element: 'Sb', orbital: '5p', be: 2 },\n  { element: 'Te', orbital: '5p', be: 2 },\n  { element: 'I', orbital: '5p', be: 3 },\n  { element: 'Xe', orbital: '5p', be: 7 },\n  { element: 'Cs', orbital: '5p', be: 12 },\n  { element: 'Ba', orbital: '5p', be: 15 },\n  { element: 'La', orbital: '5p', be: 15 },\n  { element: 'Ce', orbital: '5p', be: 20 },\n  { element: 'Pr', orbital: '5p', be: 23 },\n  { element: 'Nd', orbital: '5p', be: 22 },\n  { element: 'Pm', orbital: '5p', be: 22 },\n  { element: 'Sm', orbital: '5p', be: 22 },\n  { element: 'Eu', orbital: '5p', be: 22 },\n  { element: 'Gd', orbital: '5p', be: 21 },\n  { element: 'Tb', orbital: '5p', be: 26 },\n  { element: 'Dy', orbital: '5p', be: 26 },\n  { element: 'Ho', orbital: '5p', be: 20 },\n  { element: 'Er', orbital: '5p', be: 29 },\n  { element: 'Tm', orbital: '5p', be: 32 },\n  { element: 'Yb', orbital: '5p', be: 23 },\n  { element: 'Lu', orbital: '5p', be: 28 },\n  { element: 'Hf', orbital: '5p', be: 31 },\n  { element: 'Ta', orbital: '5p', be: 37 },\n  { element: 'W', orbital: '5p', be: 37 },\n  { element: 'Re', orbital: '5p', be: 35 },\n  { element: 'Os', orbital: '5p', be: 46 },\n  { element: 'Ir', orbital: '5p', be: 51 },\n  { element: 'Pt', orbital: '5p', be: 51 },\n  { element: 'Au', orbital: '5p', be: 54 },\n  { element: 'Hg', orbital: '5p', be: 58 },\n  { element: 'Tl', orbital: '5p', be: 76 },\n  { element: 'Pb', orbital: '5p', be: 86 },\n  { element: 'Bi', orbital: '5p', be: 93 },\n  { element: 'Po', orbital: '5p', be: 104 },\n  { element: 'At', orbital: '5p', be: 115 },\n  { element: 'Rn', orbital: '5p', be: 127 },\n  { element: 'Fr', orbital: '5p', be: 140 },\n  { element: 'Ra', orbital: '5p', be: 153 },\n  { element: 'Ac', orbital: '5p', be: 167 },\n  { element: 'Th', orbital: '5p', be: 182 },\n  { element: 'Lu', orbital: '5d3/2', be: 5 },\n  { element: 'Hf', orbital: '5d3/2', be: 7 },\n  { element: 'Ta', orbital: '5d3/2', be: 6 },\n  { element: 'W', orbital: '5d3/2', be: 6 },\n  { element: 'Re', orbital: '5d3/2', be: 4 },\n  { element: 'Ir', orbital: '5d3/2', be: 4 },\n  { element: 'Pt', orbital: '5d3/2', be: 2 },\n  { element: 'Au', orbital: '5d3/2', be: 3 },\n  { element: 'Hg', orbital: '5d3/2', be: 7 },\n  { element: 'Tl', orbital: '5d3/2', be: 16 },\n  { element: 'Pb', orbital: '5d3/2', be: 22 },\n  { element: 'Bi', orbital: '5d3/2', be: 27 },\n  { element: 'Po', orbital: '5d3/2', be: 31 },\n  { element: 'At', orbital: '5d3/2', be: 40 },\n  { element: 'Rn', orbital: '5d3/2', be: 48 },\n  { element: 'Fr', orbital: '5d3/2', be: 58 },\n  { element: 'Ra', orbital: '5d3/2', be: 68 },\n  { element: 'Ac', orbital: '5d3/2', be: 80 },\n  { element: 'Th', orbital: '5d3/2', be: 95 },\n  { element: 'U', orbital: '5d3/2', be: 104 },\n  { element: 'Lu', orbital: '5d5/2', be: 5 },\n  { element: 'Hf', orbital: '5d5/2', be: 7 },\n  { element: 'Ta', orbital: '5d5/2', be: 6 },\n  { element: 'W', orbital: '5d5/2', be: 6 },\n  { element: 'Re', orbital: '5d5/2', be: 4 },\n  { element: 'Ir', orbital: '5d5/2', be: 4 },\n  { element: 'Pt', orbital: '5d5/2', be: 2 },\n  { element: 'Au', orbital: '5d5/2', be: 3 },\n  { element: 'Hg', orbital: '5d5/2', be: 7 },\n  { element: 'Tl', orbital: '5d5/2', be: 13 },\n  { element: 'Pb', orbital: '5d5/2', be: 20 },\n  { element: 'Bi', orbital: '5d5/2', be: 25 },\n  { element: 'Po', orbital: '5d5/2', be: 31 },\n  { element: 'At', orbital: '5d5/2', be: 40 },\n  { element: 'Rn', orbital: '5d5/2', be: 48 },\n  { element: 'Fr', orbital: '5d5/2', be: 58 },\n  { element: 'Ra', orbital: '5d5/2', be: 68 },\n  { element: 'Ac', orbital: '5d5/2', be: 80 },\n  { element: 'Th', orbital: '5d5/2', be: 88 },\n  { element: 'U', orbital: '5d5/2', be: 96 },\n  { element: 'Lu', orbital: '5d', be: 5 },\n  { element: 'Hf', orbital: '5d', be: 7 },\n  { element: 'Ta', orbital: '5d', be: 6 },\n  { element: 'W', orbital: '5d', be: 6 },\n  { element: 'Re', orbital: '5d', be: 4 },\n  { element: 'Ir', orbital: '5d', be: 4 },\n  { element: 'Pt', orbital: '5d', be: 2 },\n  { element: 'Au', orbital: '5d', be: 3 },\n  { element: 'Hg', orbital: '5d', be: 7 },\n  { element: 'Tl', orbital: '5d', be: 13 },\n  { element: 'Pb', orbital: '5d', be: 20 },\n  { element: 'Bi', orbital: '5d', be: 25 },\n  { element: 'Po', orbital: '5d', be: 31 },\n  { element: 'At', orbital: '5d', be: 40 },\n  { element: 'Rn', orbital: '5d', be: 48 },\n  { element: 'Fr', orbital: '5d', be: 58 },\n  { element: 'Ra', orbital: '5d', be: 68 },\n  { element: 'Ac', orbital: '5d', be: 80 },\n  { element: 'Th', orbital: '5d', be: 88 },\n  { element: 'U', orbital: '5d', be: 96 },\n  { element: 'Pb', orbital: '6s', be: 3 },\n  { element: 'Bi', orbital: '6s', be: 8 },\n  { element: 'Po', orbital: '6s', be: 12 },\n  { element: 'At', orbital: '6s', be: 18 },\n  { element: 'Rn', orbital: '6s', be: 26 },\n  { element: 'Fr', orbital: '6s', be: 34 },\n  { element: 'Ra', orbital: '6s', be: 44 },\n  { element: 'Th', orbital: '6s', be: 60 },\n  { element: 'Pb', orbital: '6p1/2', be: 1 },\n  { element: 'Bi', orbital: '6p1/2', be: 3 },\n  { element: 'Po', orbital: '6p1/2', be: 5 },\n  { element: 'At', orbital: '6p1/2', be: 8 },\n  { element: 'Rn', orbital: '6p1/2', be: 11 },\n  { element: 'Fr', orbital: '6p1/2', be: 15 },\n  { element: 'Ra', orbital: '6p1/2', be: 19 },\n  { element: 'Th', orbital: '6p1/2', be: 49 },\n  { element: 'U', orbital: '6p1/2', be: 28.9 },\n  { element: 'Pb', orbital: '6p3/2', be: 1 },\n  { element: 'Bi', orbital: '6p3/2', be: 3 },\n  { element: 'Po', orbital: '6p3/2', be: 5 },\n  { element: 'At', orbital: '6p3/2', be: 8 },\n  { element: 'Rn', orbital: '6p3/2', be: 11 },\n  { element: 'Fr', orbital: '6p3/2', be: 15 },\n  { element: 'Ra', orbital: '6p3/2', be: 19 },\n  { element: 'Th', orbital: '6p3/2', be: 43 },\n  { element: 'U', orbital: '6p3/2', be: 19 },\n  { element: 'Pb', orbital: '6p', be: 1 },\n  { element: 'Bi', orbital: '6p', be: 3 },\n  { element: 'Po', orbital: '6p', be: 5 },\n  { element: 'At', orbital: '6p', be: 8 },\n  { element: 'Rn', orbital: '6p', be: 11 },\n  { element: 'Fr', orbital: '6p', be: 15 },\n  { element: 'Ra', orbital: '6p', be: 19 },\n  { element: 'Th', orbital: '6p', be: 43 },\n  { element: 'U', orbital: '6p', be: 19 },\n  { element: 'H', orbital: '1s', be: 14 },\n  { element: 'He', orbital: '1s', be: 25 },\n  { element: 'Li', orbital: '1s', be: 55 },\n  { element: 'Be', orbital: '1s', be: 111 },\n  { element: 'B', orbital: '1s', be: 188 },\n  { element: 'C', orbital: '1s', be: 284 },\n  { element: 'N', orbital: '1s', be: 399 },\n  { element: 'O', orbital: '1s', be: 532 },\n  { element: 'F', orbital: '1s', be: 686 },\n  { element: 'Ne', orbital: '1s', be: 867 },\n  { element: 'Na', orbital: '1s', be: 1072 },\n  { element: 'O', orbital: '2s', be: 24 },\n  { element: 'F', orbital: '2s', be: 31 },\n  { element: 'Ne', orbital: '2s', be: 45 },\n  { element: 'Na', orbital: '2s', be: 63 },\n  { element: 'Mg', orbital: '2s', be: 89 },\n  { element: 'Al', orbital: '2s', be: 118 },\n  { element: 'Si', orbital: '2s', be: 149 },\n  { element: 'P', orbital: '2s', be: 189 },\n  { element: 'S', orbital: '2s', be: 229 },\n  { element: 'Cl', orbital: '2s', be: 270 },\n  { element: 'Ar', orbital: '2s', be: 320 },\n  { element: 'K', orbital: '2s', be: 377 },\n  { element: 'Ca', orbital: '2s', be: 438 },\n  { element: 'Sc', orbital: '2s', be: 500 },\n  { element: 'Ti', orbital: '2s', be: 564 },\n  { element: 'V', orbital: '2s', be: 628 },\n  { element: 'Cr', orbital: '2s', be: 695 },\n  { element: 'Mn', orbital: '2s', be: 769 },\n  { element: 'Fe', orbital: '2s', be: 846 },\n  { element: 'Co', orbital: '2s', be: 926 },\n  { element: 'Ni', orbital: '2s', be: 1008 },\n  { element: 'Cu', orbital: '2s', be: 1096 },\n  { element: 'Zn', orbital: '2s', be: 1194 },\n  { element: 'B', orbital: '2p1/2', be: 5 },\n  { element: 'C', orbital: '2p1/2', be: 7 },\n  { element: 'N', orbital: '2p1/2', be: 9 },\n  { element: 'O', orbital: '2p1/2', be: 7 },\n  { element: 'F', orbital: '2p1/2', be: 9 },\n  { element: 'Ne', orbital: '2p1/2', be: 18 },\n  { element: 'Na', orbital: '2p1/2', be: 31 },\n  { element: 'Mg', orbital: '2p1/2', be: 52 },\n  { element: 'Al', orbital: '2p1/2', be: 74 },\n  { element: 'Si', orbital: '2p1/2', be: 100 },\n  { element: 'P', orbital: '2p1/2', be: 136 },\n  { element: 'S', orbital: '2p1/2', be: 165 },\n  { element: 'Cl', orbital: '2p1/2', be: 202 },\n  { element: 'Ar', orbital: '2p1/2', be: 247 },\n  { element: 'K', orbital: '2p1/2', be: 297 },\n  { element: 'Ca', orbital: '2p1/2', be: 350 },\n  { element: 'Sc', orbital: '2p1/2', be: 407 },\n  { element: 'Ti', orbital: '2p1/2', be: 461 },\n  { element: 'V', orbital: '2p1/2', be: 520 },\n  { element: 'Cr', orbital: '2p1/2', be: 584 },\n  { element: 'Mn', orbital: '2p1/2', be: 652 },\n  { element: 'Fe', orbital: '2p1/2', be: 723 },\n  { element: 'Co', orbital: '2p1/2', be: 794 },\n  { element: 'Ni', orbital: '2p1/2', be: 872 },\n  { element: 'Cu', orbital: '2p1/2', be: 951 },\n  { element: 'Zn', orbital: '2p1/2', be: 1044 },\n  { element: 'Ga', orbital: '2p1/2', be: 1143 },\n  { element: 'B', orbital: '2p3/2', be: 5 },\n  { element: 'C', orbital: '2p3/2', be: 7 },\n  { element: 'N', orbital: '2p3/2', be: 9 },\n  { element: 'O', orbital: '2p3/2', be: 7 },\n  { element: 'F', orbital: '2p3/2', be: 9 },\n  { element: 'Ne', orbital: '2p3/2', be: 18 },\n  { element: 'Na', orbital: '2p3/2', be: 31 },\n  { element: 'Mg', orbital: '2p3/2', be: 52 },\n  { element: 'Al', orbital: '2p3/2', be: 73 },\n  { element: 'Si', orbital: '2p3/2', be: 99 },\n  { element: 'P', orbital: '2p3/2', be: 135 },\n  { element: 'S', orbital: '2p3/2', be: 164 },\n  { element: 'Cl', orbital: '2p3/2', be: 200 },\n  { element: 'Ar', orbital: '2p3/2', be: 245 },\n  { element: 'K', orbital: '2p3/2', be: 294 },\n  { element: 'Ca', orbital: '2p3/2', be: 347 },\n  { element: 'Sc', orbital: '2p3/2', be: 402 },\n  { element: 'Ti', orbital: '2p3/2', be: 455 },\n  { element: 'V', orbital: '2p3/2', be: 513 },\n  { element: 'Cr', orbital: '2p3/2', be: 575 },\n  { element: 'Mn', orbital: '2p3/2', be: 641 },\n  { element: 'Fe', orbital: '2p3/2', be: 710 },\n  { element: 'Co', orbital: '2p3/2', be: 779 },\n  { element: 'Ni', orbital: '2p3/2', be: 855 },\n  { element: 'Cu', orbital: '2p3/2', be: 931 },\n  { element: 'Zn', orbital: '2p3/2', be: 1021 },\n  { element: 'Ga', orbital: '2p3/2', be: 1116 },\n  { element: 'Ge', orbital: '2p3/2', be: 1217 },\n  { element: 'B', orbital: '2p', be: 5 },\n  { element: 'C', orbital: '2p', be: 7 },\n  { element: 'N', orbital: '2p', be: 9 },\n  { element: 'O', orbital: '2p', be: 7 },\n  { element: 'F', orbital: '2p', be: 9 },\n  { element: 'Ne', orbital: '2p', be: 18 },\n  { element: 'Na', orbital: '2p', be: 31 },\n  { element: 'Mg', orbital: '2p', be: 52 },\n  { element: 'Al', orbital: '2p', be: 73 },\n  { element: 'Si', orbital: '2p', be: 99 },\n  { element: 'P', orbital: '2p', be: 135 },\n  { element: 'S', orbital: '2p', be: 164 },\n  { element: 'Cl', orbital: '2p', be: 200 },\n  { element: 'Ar', orbital: '2p', be: 245 },\n  { element: 'K', orbital: '2p', be: 294 },\n  { element: 'Ca', orbital: '2p', be: 347 },\n  { element: 'Sc', orbital: '2p', be: 402 },\n  { element: 'Ti', orbital: '2p', be: 455 },\n  { element: 'V', orbital: '2p', be: 513 },\n  { element: 'Cr', orbital: '2p', be: 575 },\n  { element: 'Mn', orbital: '2p', be: 641 },\n  { element: 'Fe', orbital: '2p', be: 710 },\n  { element: 'Co', orbital: '2p', be: 779 },\n  { element: 'Ni', orbital: '2p', be: 855 },\n  { element: 'Cu', orbital: '2p', be: 931 },\n  { element: 'Zn', orbital: '2p', be: 1021 },\n  { element: 'Ga', orbital: '2p', be: 1116 },\n  { element: 'Ge', orbital: '2p', be: 1217 },\n  { element: 'Na', orbital: '3s', be: 1 },\n  { element: 'Mg', orbital: '3s', be: 2 },\n  { element: 'Al', orbital: '3s', be: 1 },\n  { element: 'Si', orbital: '3s', be: 8 },\n  { element: 'P', orbital: '3s', be: 16 },\n  { element: 'S', orbital: '3s', be: 16 },\n  { element: 'Cl', orbital: '3s', be: 18 },\n  { element: 'Ar', orbital: '3s', be: 25 },\n  { element: 'K', orbital: '3s', be: 34 },\n  { element: 'Ca', orbital: '3s', be: 44 },\n  { element: 'Sc', orbital: '3s', be: 54 },\n  { element: 'Ti', orbital: '3s', be: 59 },\n  { element: 'V', orbital: '3s', be: 66 },\n  { element: 'Cr', orbital: '3s', be: 74 },\n  { element: 'Mn', orbital: '3s', be: 84 },\n  { element: 'Fe', orbital: '3s', be: 95 },\n  { element: 'Co', orbital: '3s', be: 101 },\n  { element: 'Ni', orbital: '3s', be: 112 },\n  { element: 'Cu', orbital: '3s', be: 120 },\n  { element: 'Zn', orbital: '3s', be: 137 },\n  { element: 'Ga', orbital: '3s', be: 158 },\n  { element: 'Ge', orbital: '3s', be: 181 },\n  { element: 'As', orbital: '3s', be: 204 },\n  { element: 'Se', orbital: '3s', be: 232 },\n  { element: 'Br', orbital: '3s', be: 257 },\n  { element: 'Kr', orbital: '3s', be: 289 },\n  { element: 'Rb', orbital: '3s', be: 322 },\n  { element: 'Sr', orbital: '3s', be: 358 },\n  { element: 'Y', orbital: '3s', be: 395 },\n  { element: 'Zr', orbital: '3s', be: 431 },\n  { element: 'Nb', orbital: '3s', be: 469 },\n  { element: 'Mo', orbital: '3s', be: 505 },\n  { element: 'Tc', orbital: '3s', be: 544 },\n  { element: 'Ru', orbital: '3s', be: 585 },\n  { element: 'Rh', orbital: '3s', be: 627 },\n  { element: 'Pd', orbital: '3s', be: 670 },\n  { element: 'Ag', orbital: '3s', be: 717 },\n  { element: 'Cd', orbital: '3s', be: 770 },\n  { element: 'In', orbital: '3s', be: 826 },\n  { element: 'Sn', orbital: '3s', be: 884 },\n  { element: 'Sb', orbital: '3s', be: 944 },\n  { element: 'Te', orbital: '3s', be: 1006 },\n  { element: 'I', orbital: '3s', be: 1072 },\n  { element: 'Xe', orbital: '3s', be: 1145 },\n  { element: 'Cs', orbital: '3s', be: 1217 },\n  { element: 'Si', orbital: '3p1/2', be: 3 },\n  { element: 'P', orbital: '3p1/2', be: 10 },\n  { element: 'S', orbital: '3p1/2', be: 8 },\n  { element: 'Cl', orbital: '3p1/2', be: 7 },\n  { element: 'Ar', orbital: '3p1/2', be: 12 },\n  { element: 'K', orbital: '3p1/2', be: 18 },\n  { element: 'Ca', orbital: '3p1/2', be: 26 },\n  { element: 'Sc', orbital: '3p1/2', be: 32 },\n  { element: 'Ti', orbital: '3p1/2', be: 34 },\n  { element: 'V', orbital: '3p1/2', be: 38 },\n  { element: 'Cr', orbital: '3p1/2', be: 43 },\n  { element: 'Mn', orbital: '3p1/2', be: 49 },\n  { element: 'Fe', orbital: '3p1/2', be: 56 },\n  { element: 'Co', orbital: '3p1/2', be: 60 },\n  { element: 'Ni', orbital: '3p1/2', be: 68 },\n  { element: 'Cu', orbital: '3p1/2', be: 74 },\n  { element: 'Zn', orbital: '3p1/2', be: 87 },\n  { element: 'Ga', orbital: '3p1/2', be: 107 },\n  { element: 'Ge', orbital: '3p1/2', be: 129 },\n  { element: 'As', orbital: '3p1/2', be: 147 },\n  { element: 'Se', orbital: '3p1/2', be: 168 },\n  { element: 'Br', orbital: '3p1/2', be: 189 },\n  { element: 'Kr', orbital: '3p1/2', be: 223 },\n  { element: 'Rb', orbital: '3p1/2', be: 248 },\n  { element: 'Sr', orbital: '3p1/2', be: 280 },\n  { element: 'Y', orbital: '3p1/2', be: 313 },\n  { element: 'Zr', orbital: '3p1/2', be: 345 },\n  { element: 'Nb', orbital: '3p1/2', be: 379 },\n  { element: 'Mo', orbital: '3p1/2', be: 410 },\n  { element: 'Tc', orbital: '3p1/2', be: 445 },\n  { element: 'Ru', orbital: '3p1/2', be: 483 },\n  { element: 'Rh', orbital: '3p1/2', be: 521 },\n  { element: 'Pd', orbital: '3p1/2', be: 559 },\n  { element: 'Ag', orbital: '3p1/2', be: 602 },\n  { element: 'Cd', orbital: '3p1/2', be: 651 },\n  { element: 'In', orbital: '3p1/2', be: 702 },\n  { element: 'Sn', orbital: '3p1/2', be: 757 },\n  { element: 'Sb', orbital: '3p1/2', be: 812 },\n  { element: 'Te', orbital: '3p1/2', be: 870 },\n  { element: 'I', orbital: '3p1/2', be: 931 },\n  { element: 'Xe', orbital: '3p1/2', be: 999 },\n  { element: 'Cs', orbital: '3p1/2', be: 1065 },\n  { element: 'Ba', orbital: '3p1/2', be: 1137 },\n  { element: 'La', orbital: '3p1/2', be: 1205 },\n  { element: 'Si', orbital: '3p3/2', be: 3 },\n  { element: 'P', orbital: '3p3/2', be: 10 },\n  { element: 'S', orbital: '3p3/2', be: 8 },\n  { element: 'Cl', orbital: '3p3/2', be: 7 },\n  { element: 'Ar', orbital: '3p3/2', be: 12 },\n  { element: 'K', orbital: '3p3/2', be: 18 },\n  { element: 'Ca', orbital: '3p3/2', be: 26 },\n  { element: 'Sc', orbital: '3p3/2', be: 32 },\n  { element: 'Ti', orbital: '3p3/2', be: 34 },\n  { element: 'V', orbital: '3p3/2', be: 38 },\n  { element: 'Cr', orbital: '3p3/2', be: 43 },\n  { element: 'Mn', orbital: '3p3/2', be: 49 },\n  { element: 'Fe', orbital: '3p3/2', be: 56 },\n  { element: 'Co', orbital: '3p3/2', be: 60 },\n  { element: 'Ni', orbital: '3p3/2', be: 68 },\n  { element: 'Cu', orbital: '3p3/2', be: 74 },\n  { element: 'Zn', orbital: '3p3/2', be: 87 },\n  { element: 'Ga', orbital: '3p3/2', be: 103 },\n  { element: 'Ge', orbital: '3p3/2', be: 122 },\n  { element: 'As', orbital: '3p3/2', be: 141 },\n  { element: 'Se', orbital: '3p3/2', be: 162 },\n  { element: 'Br', orbital: '3p3/2', be: 182 },\n  { element: 'Kr', orbital: '3p3/2', be: 214 },\n  { element: 'Rb', orbital: '3p3/2', be: 239 },\n  { element: 'Sr', orbital: '3p3/2', be: 269 },\n  { element: 'Y', orbital: '3p3/2', be: 301 },\n  { element: 'Zr', orbital: '3p3/2', be: 331 },\n  { element: 'Nb', orbital: '3p3/2', be: 363 },\n  { element: 'Mo', orbital: '3p3/2', be: 393 },\n  { element: 'Tc', orbital: '3p3/2', be: 425 },\n  { element: 'Ru', orbital: '3p3/2', be: 461 },\n  { element: 'Rh', orbital: '3p3/2', be: 496 },\n  { element: 'Pd', orbital: '3p3/2', be: 531 },\n  { element: 'Ag', orbital: '3p3/2', be: 571 },\n  { element: 'Cd', orbital: '3p3/2', be: 617 },\n  { element: 'In', orbital: '3p3/2', be: 664 },\n  { element: 'Sn', orbital: '3p3/2', be: 715 },\n  { element: 'Sb', orbital: '3p3/2', be: 766 },\n  { element: 'Te', orbital: '3p3/2', be: 819 },\n  { element: 'I', orbital: '3p3/2', be: 875 },\n  { element: 'Xe', orbital: '3p3/2', be: 937 },\n  { element: 'Cs', orbital: '3p3/2', be: 998 },\n  { element: 'Ba', orbital: '3p3/2', be: 1063 },\n  { element: 'La', orbital: '3p3/2', be: 1124 },\n  { element: 'Ce', orbital: '3p3/2', be: 1186 },\n  { element: 'Pr', orbital: '3p3/2', be: 1243 },\n  { element: 'Si', orbital: '3p', be: 3 },\n  { element: 'P', orbital: '3p', be: 10 },\n  { element: 'S', orbital: '3p', be: 8 },\n  { element: 'Cl', orbital: '3p', be: 7 },\n  { element: 'Ar', orbital: '3p', be: 12 },\n  { element: 'K', orbital: '3p', be: 18 },\n  { element: 'Ca', orbital: '3p', be: 26 },\n  { element: 'Sc', orbital: '3p', be: 32 },\n  { element: 'Ti', orbital: '3p', be: 34 },\n  { element: 'V', orbital: '3p', be: 38 },\n  { element: 'Cr', orbital: '3p', be: 43 },\n  { element: 'Mn', orbital: '3p', be: 49 },\n  { element: 'Fe', orbital: '3p', be: 56 },\n  { element: 'Co', orbital: '3p', be: 60 },\n  { element: 'Ni', orbital: '3p', be: 68 },\n  { element: 'Cu', orbital: '3p', be: 74 },\n  { element: 'Zn', orbital: '3p', be: 87 },\n  { element: 'Ga', orbital: '3p', be: 103 },\n  { element: 'Ge', orbital: '3p', be: 122 },\n  { element: 'As', orbital: '3p', be: 141 },\n  { element: 'Se', orbital: '3p', be: 162 },\n  { element: 'Br', orbital: '3p', be: 182 },\n  { element: 'Kr', orbital: '3p', be: 214 },\n  { element: 'Rb', orbital: '3p', be: 239 },\n  { element: 'Sr', orbital: '3p', be: 269 },\n  { element: 'Y', orbital: '3p', be: 301 },\n  { element: 'Zr', orbital: '3p', be: 331 },\n  { element: 'Nb', orbital: '3p', be: 363 },\n  { element: 'Mo', orbital: '3p', be: 393 },\n  { element: 'Tc', orbital: '3p', be: 425 },\n  { element: 'Ru', orbital: '3p', be: 461 },\n  { element: 'Rh', orbital: '3p', be: 496 },\n  { element: 'Pd', orbital: '3p', be: 531 },\n  { element: 'Ag', orbital: '3p', be: 571 },\n  { element: 'Cd', orbital: '3p', be: 617 },\n  { element: 'In', orbital: '3p', be: 664 },\n  { element: 'Sn', orbital: '3p', be: 715 },\n  { element: 'Sb', orbital: '3p', be: 766 },\n  { element: 'Te', orbital: '3p', be: 819 },\n  { element: 'I', orbital: '3p', be: 875 },\n  { element: 'Xe', orbital: '3p', be: 937 },\n  { element: 'Cs', orbital: '3p', be: 998 },\n  { element: 'Ba', orbital: '3p', be: 1063 },\n  { element: 'La', orbital: '3p', be: 1124 },\n  { element: 'Ce', orbital: '3p', be: 1186 },\n  { element: 'Pr', orbital: '3p', be: 1243 },\n  { element: 'Sc', orbital: '3d3/2', be: 7 },\n  { element: 'Ti', orbital: '3d3/2', be: 3 },\n  { element: 'V', orbital: '3d3/2', be: 2 },\n  { element: 'Cr', orbital: '3d3/2', be: 2 },\n  { element: 'Mn', orbital: '3d3/2', be: 4 },\n  { element: 'Fe', orbital: '3d3/2', be: 6 },\n  { element: 'Co', orbital: '3d3/2', be: 3 },\n  { element: 'Ni', orbital: '3d3/2', be: 4 },\n  { element: 'Cu', orbital: '3d3/2', be: 2 },\n  { element: 'Zn', orbital: '3d3/2', be: 9 },\n  { element: 'Ga', orbital: '3d3/2', be: 18 },\n  { element: 'Ge', orbital: '3d3/2', be: 29 },\n  { element: 'As', orbital: '3d3/2', be: 41 },\n  { element: 'Se', orbital: '3d3/2', be: 57 },\n  { element: 'Br', orbital: '3d3/2', be: 70 },\n  { element: 'Kr', orbital: '3d3/2', be: 89 },\n  { element: 'Rb', orbital: '3d3/2', be: 112 },\n  { element: 'Sr', orbital: '3d3/2', be: 135 },\n  { element: 'Y', orbital: '3d3/2', be: 160 },\n  { element: 'Zr', orbital: '3d3/2', be: 183 },\n  { element: 'Nb', orbital: '3d3/2', be: 208 },\n  { element: 'Mo', orbital: '3d3/2', be: 230 },\n  { element: 'Tc', orbital: '3d3/2', be: 257 },\n  { element: 'Ru', orbital: '3d3/2', be: 284 },\n  { element: 'Rh', orbital: '3d3/2', be: 312 },\n  { element: 'Pd', orbital: '3d3/2', be: 340 },\n  { element: 'Ag', orbital: '3d3/2', be: 373 },\n  { element: 'Cd', orbital: '3d3/2', be: 411 },\n  { element: 'In', orbital: '3d3/2', be: 451 },\n  { element: 'Sn', orbital: '3d3/2', be: 494 },\n  { element: 'Sb', orbital: '3d3/2', be: 537 },\n  { element: 'Te', orbital: '3d3/2', be: 582 },\n  { element: 'I', orbital: '3d3/2', be: 631 },\n  { element: 'Xe', orbital: '3d3/2', be: 685 },\n  { element: 'Cs', orbital: '3d3/2', be: 740 },\n  { element: 'Ba', orbital: '3d3/2', be: 796 },\n  { element: 'La', orbital: '3d3/2', be: 849 },\n  { element: 'Ce', orbital: '3d3/2', be: 902 },\n  { element: 'Pr', orbital: '3d3/2', be: 951 },\n  { element: 'Nd', orbital: '3d3/2', be: 1000 },\n  { element: 'Pm', orbital: '3d3/2', be: 1052 },\n  { element: 'Sm', orbital: '3d3/2', be: 1107 },\n  { element: 'Eu', orbital: '3d3/2', be: 1161 },\n  { element: 'Gd', orbital: '3d3/2', be: 1218 },\n  { element: 'Sc', orbital: '3d5/2', be: 7 },\n  { element: 'Ti', orbital: '3d5/2', be: 3 },\n  { element: 'V', orbital: '3d5/2', be: 2 },\n  { element: 'Cr', orbital: '3d5/2', be: 2 },\n  { element: 'Mn', orbital: '3d5/2', be: 4 },\n  { element: 'Fe', orbital: '3d5/2', be: 6 },\n  { element: 'Co', orbital: '3d5/2', be: 3 },\n  { element: 'Ni', orbital: '3d5/2', be: 4 },\n  { element: 'Cu', orbital: '3d5/2', be: 2 },\n  { element: 'Zn', orbital: '3d5/2', be: 9 },\n  { element: 'Ga', orbital: '3d5/2', be: 18 },\n  { element: 'Ge', orbital: '3d5/2', be: 29 },\n  { element: 'As', orbital: '3d5/2', be: 41 },\n  { element: 'Se', orbital: '3d5/2', be: 57 },\n  { element: 'Br', orbital: '3d5/2', be: 69 },\n  { element: 'Kr', orbital: '3d5/2', be: 89 },\n  { element: 'Rb', orbital: '3d5/2', be: 111 },\n  { element: 'Sr', orbital: '3d5/2', be: 133 },\n  { element: 'Y', orbital: '3d5/2', be: 158 },\n  { element: 'Zr', orbital: '3d5/2', be: 180 },\n  { element: 'Nb', orbital: '3d5/2', be: 205 },\n  { element: 'Mo', orbital: '3d5/2', be: 227 },\n  { element: 'Tc', orbital: '3d5/2', be: 253 },\n  { element: 'Ru', orbital: '3d5/2', be: 279 },\n  { element: 'Rh', orbital: '3d5/2', be: 307 },\n  { element: 'Pd', orbital: '3d5/2', be: 335 },\n  { element: 'Ag', orbital: '3d5/2', be: 367 },\n  { element: 'Cd', orbital: '3d5/2', be: 404 },\n  { element: 'In', orbital: '3d5/2', be: 443 },\n  { element: 'Sn', orbital: '3d5/2', be: 485 },\n  { element: 'Sb', orbital: '3d5/2', be: 528 },\n  { element: 'Te', orbital: '3d5/2', be: 572 },\n  { element: 'I', orbital: '3d5/2', be: 620 },\n  { element: 'Xe', orbital: '3d5/2', be: 672 },\n  { element: 'Cs', orbital: '3d5/2', be: 726 },\n  { element: 'Ba', orbital: '3d5/2', be: 781 },\n  { element: 'La', orbital: '3d5/2', be: 832 },\n  { element: 'Ce', orbital: '3d5/2', be: 884 },\n  { element: 'Pr', orbital: '3d5/2', be: 931 },\n  { element: 'Nd', orbital: '3d5/2', be: 978 },\n  { element: 'Pm', orbital: '3d5/2', be: 1027 },\n  { element: 'Sm', orbital: '3d5/2', be: 1081 },\n  { element: 'Eu', orbital: '3d5/2', be: 1131 },\n  { element: 'Gd', orbital: '3d5/2', be: 1186 },\n  { element: 'Tb', orbital: '3d5/2', be: 1242 },\n  { element: 'Sc', orbital: '3d', be: 7 },\n  { element: 'Ti', orbital: '3d', be: 3 },\n  { element: 'V', orbital: '3d', be: 2 },\n  { element: 'Cr', orbital: '3d', be: 2 },\n  { element: 'Mn', orbital: '3d', be: 4 },\n  { element: 'Fe', orbital: '3d', be: 6 },\n  { element: 'Co', orbital: '3d', be: 3 },\n  { element: 'Ni', orbital: '3d', be: 4 },\n  { element: 'Cu', orbital: '3d', be: 2 },\n  { element: 'Zn', orbital: '3d', be: 9 },\n  { element: 'Ga', orbital: '3d', be: 18 },\n  { element: 'Ge', orbital: '3d', be: 29 },\n  { element: 'As', orbital: '3d', be: 41 },\n  { element: 'Se', orbital: '3d', be: 57 },\n  { element: 'Br', orbital: '3d', be: 69 },\n  { element: 'Kr', orbital: '3d', be: 89 },\n  { element: 'Rb', orbital: '3d', be: 111 },\n  { element: 'Sr', orbital: '3d', be: 133 },\n  { element: 'Y', orbital: '3d', be: 158 },\n  { element: 'Zr', orbital: '3d', be: 180 },\n  { element: 'Nb', orbital: '3d', be: 205 },\n  { element: 'Mo', orbital: '3d', be: 227 },\n  { element: 'Tc', orbital: '3d', be: 253 },\n  { element: 'Ru', orbital: '3d', be: 279 },\n  { element: 'Rh', orbital: '3d', be: 307 },\n  { element: 'Pd', orbital: '3d', be: 335 },\n  { element: 'Ag', orbital: '3d', be: 367 },\n  { element: 'Cd', orbital: '3d', be: 404 },\n  { element: 'In', orbital: '3d', be: 443 },\n  { element: 'Sn', orbital: '3d', be: 485 },\n  { element: 'Sb', orbital: '3d', be: 528 },\n  { element: 'Te', orbital: '3d', be: 572 },\n  { element: 'I', orbital: '3d', be: 620 },\n  { element: 'Xe', orbital: '3d', be: 672 },\n  { element: 'Cs', orbital: '3d', be: 726 },\n  { element: 'Ba', orbital: '3d', be: 781 },\n  { element: 'La', orbital: '3d', be: 832 },\n  { element: 'Ce', orbital: '3d', be: 884 },\n  { element: 'Pr', orbital: '3d', be: 931 },\n  { element: 'Nd', orbital: '3d', be: 978 },\n  { element: 'Pm', orbital: '3d', be: 1027 },\n  { element: 'Sm', orbital: '3d', be: 1081 },\n  { element: 'Eu', orbital: '3d', be: 1131 },\n  { element: 'Gd', orbital: '3d', be: 1186 },\n  { element: 'Tb', orbital: '3d', be: 1242 },\n  { element: 'Br', orbital: '4s', be: 27 },\n  { element: 'Kr', orbital: '4s', be: 24 },\n  { element: 'Rb', orbital: '4s', be: 30 },\n  { element: 'Sr', orbital: '4s', be: 38 },\n  { element: 'Y', orbital: '4s', be: 46 },\n  { element: 'Zr', orbital: '4s', be: 52 },\n  { element: 'Nb', orbital: '4s', be: 58 },\n  { element: 'Mo', orbital: '4s', be: 62 },\n  { element: 'Tc', orbital: '4s', be: 68 },\n  { element: 'Ru', orbital: '4s', be: 75 },\n  { element: 'Rh', orbital: '4s', be: 81 },\n  { element: 'Pd', orbital: '4s', be: 86 },\n  { element: 'Ag', orbital: '4s', be: 95 },\n  { element: 'Cd', orbital: '4s', be: 108 },\n  { element: 'In', orbital: '4s', be: 122 },\n  { element: 'Sn', orbital: '4s', be: 137 },\n  { element: 'Sb', orbital: '4s', be: 152 },\n  { element: 'Te', orbital: '4s', be: 168 },\n  { element: 'I', orbital: '4s', be: 186 },\n  { element: 'Xe', orbital: '4s', be: 208 },\n  { element: 'Cs', orbital: '4s', be: 231 },\n  { element: 'Ba', orbital: '4s', be: 253 },\n  { element: 'La', orbital: '4s', be: 271 },\n  { element: 'Ce', orbital: '4s', be: 290 },\n  { element: 'Pr', orbital: '4s', be: 305 },\n  { element: 'Nd', orbital: '4s', be: 316 },\n  { element: 'Pm', orbital: '4s', be: 331 },\n  { element: 'Sm', orbital: '4s', be: 347 },\n  { element: 'Eu', orbital: '4s', be: 360 },\n  { element: 'Gd', orbital: '4s', be: 376 },\n  { element: 'Tb', orbital: '4s', be: 398 },\n  { element: 'Dy', orbital: '4s', be: 416 },\n  { element: 'Ho', orbital: '4s', be: 436 },\n  { element: 'Er', orbital: '4s', be: 449 },\n  { element: 'Tm', orbital: '4s', be: 472 },\n  { element: 'Yb', orbital: '4s', be: 487 },\n  { element: 'Lu', orbital: '4s', be: 506 },\n  { element: 'Hf', orbital: '4s', be: 538 },\n  { element: 'Ta', orbital: '4s', be: 566 },\n  { element: 'W', orbital: '4s', be: 595 },\n  { element: 'Re', orbital: '4s', be: 625 },\n  { element: 'Os', orbital: '4s', be: 655 },\n  { element: 'Ir', orbital: '4s', be: 690 },\n  { element: 'Pt', orbital: '4s', be: 724 },\n  { element: 'Au', orbital: '4s', be: 759 },\n  { element: 'Hg', orbital: '4s', be: 800 },\n  { element: 'Tl', orbital: '4s', be: 846 },\n  { element: 'Pb', orbital: '4s', be: 894 },\n  { element: 'Bi', orbital: '4s', be: 939 },\n  { element: 'Po', orbital: '4s', be: 995 },\n  { element: 'At', orbital: '4s', be: 1042 },\n  { element: 'Rn', orbital: '4s', be: 1097 },\n  { element: 'Fr', orbital: '4s', be: 1153 },\n  { element: 'Ra', orbital: '4s', be: 1208 },\n  { element: 'Ga', orbital: '4p1/2', be: 1 },\n  { element: 'Ge', orbital: '4p1/2', be: 3 },\n  { element: 'As', orbital: '4p1/2', be: 3 },\n  { element: 'Se', orbital: '4p1/2', be: 6 },\n  { element: 'Br', orbital: '4p1/2', be: 5 },\n  { element: 'Kr', orbital: '4p1/2', be: 11 },\n  { element: 'Rb', orbital: '4p1/2', be: 15 },\n  { element: 'Sr', orbital: '4p1/2', be: 20 },\n  { element: 'Y', orbital: '4p1/2', be: 26 },\n  { element: 'Zr', orbital: '4p1/2', be: 29 },\n  { element: 'Nb', orbital: '4p1/2', be: 34 },\n  { element: 'Mo', orbital: '4p1/2', be: 35 },\n  { element: 'Tc', orbital: '4p1/2', be: 39 },\n  { element: 'Ru', orbital: '4p1/2', be: 43 },\n  { element: 'Rh', orbital: '4p1/2', be: 48 },\n  { element: 'Pd', orbital: '4p1/2', be: 51 },\n  { element: 'Ag', orbital: '4p1/2', be: 62 },\n  { element: 'Cd', orbital: '4p1/2', be: 67 },\n  { element: 'In', orbital: '4p1/2', be: 77 },\n  { element: 'Sn', orbital: '4p1/2', be: 89 },\n  { element: 'Sb', orbital: '4p1/2', be: 99 },\n  { element: 'Te', orbital: '4p1/2', be: 110 },\n  { element: 'I', orbital: '4p1/2', be: 123 },\n  { element: 'Xe', orbital: '4p1/2', be: 147 },\n  { element: 'Cs', orbital: '4p1/2', be: 172 },\n  { element: 'Ba', orbital: '4p1/2', be: 192 },\n  { element: 'La', orbital: '4p1/2', be: 206 },\n  { element: 'Ce', orbital: '4p1/2', be: 224 },\n  { element: 'Pr', orbital: '4p1/2', be: 237 },\n  { element: 'Nd', orbital: '4p1/2', be: 244 },\n  { element: 'Pm', orbital: '4p1/2', be: 255 },\n  { element: 'Sm', orbital: '4p1/2', be: 267 },\n  { element: 'Eu', orbital: '4p1/2', be: 284 },\n  { element: 'Gd', orbital: '4p1/2', be: 289 },\n  { element: 'Tb', orbital: '4p1/2', be: 311 },\n  { element: 'Dy', orbital: '4p1/2', be: 332 },\n  { element: 'Ho', orbital: '4p1/2', be: 343 },\n  { element: 'Er', orbital: '4p1/2', be: 366 },\n  { element: 'Tm', orbital: '4p1/2', be: 386 },\n  { element: 'Yb', orbital: '4p1/2', be: 396 },\n  { element: 'Lu', orbital: '4p1/2', be: 410 },\n  { element: 'Hf', orbital: '4p1/2', be: 437 },\n  { element: 'Ta', orbital: '4p1/2', be: 465 },\n  { element: 'W', orbital: '4p1/2', be: 492 },\n  { element: 'Re', orbital: '4p1/2', be: 518 },\n  { element: 'Os', orbital: '4p1/2', be: 547 },\n  { element: 'Ir', orbital: '4p1/2', be: 577 },\n  { element: 'Pt', orbital: '4p1/2', be: 608 },\n  { element: 'Au', orbital: '4p1/2', be: 644 },\n  { element: 'Hg', orbital: '4p1/2', be: 677 },\n  { element: 'Tl', orbital: '4p1/2', be: 722 },\n  { element: 'Pb', orbital: '4p1/2', be: 764 },\n  { element: 'Bi', orbital: '4p1/2', be: 806 },\n  { element: 'Po', orbital: '4p1/2', be: 851 },\n  { element: 'At', orbital: '4p1/2', be: 886 },\n  { element: 'Rn', orbital: '4p1/2', be: 929 },\n  { element: 'Fr', orbital: '4p1/2', be: 980 },\n  { element: 'Ra', orbital: '4p1/2', be: 1058 },\n  { element: 'Ac', orbital: '4p1/2', be: 1080 },\n  { element: 'Th', orbital: '4p1/2', be: 1168 },\n  { element: 'Ga', orbital: '4p3/2', be: 1 },\n  { element: 'Ge', orbital: '4p3/2', be: 3 },\n  { element: 'As', orbital: '4p3/2', be: 3 },\n  { element: 'Se', orbital: '4p3/2', be: 6 },\n  { element: 'Br', orbital: '4p3/2', be: 5 },\n  { element: 'Kr', orbital: '4p3/2', be: 11 },\n  { element: 'Rb', orbital: '4p3/2', be: 14 },\n  { element: 'Sr', orbital: '4p3/2', be: 20 },\n  { element: 'Y', orbital: '4p3/2', be: 26 },\n  { element: 'Zr', orbital: '4p3/2', be: 29 },\n  { element: 'Nb', orbital: '4p3/2', be: 34 },\n  { element: 'Mo', orbital: '4p3/2', be: 35 },\n  { element: 'Tc', orbital: '4p3/2', be: 39 },\n  { element: 'Ru', orbital: '4p3/2', be: 43 },\n  { element: 'Rh', orbital: '4p3/2', be: 48 },\n  { element: 'Pd', orbital: '4p3/2', be: 56 },\n  { element: 'Ag', orbital: '4p3/2', be: 56 },\n  { element: 'Cd', orbital: '4p3/2', be: 67 },\n  { element: 'In', orbital: '4p3/2', be: 77 },\n  { element: 'Sn', orbital: '4p3/2', be: 89 },\n  { element: 'Sb', orbital: '4p3/2', be: 99 },\n  { element: 'Te', orbital: '4p3/2', be: 110 },\n  { element: 'I', orbital: '4p3/2', be: 123 },\n  { element: 'Xe', orbital: '4p3/2', be: 147 },\n  { element: 'Cs', orbital: '4p3/2', be: 162 },\n  { element: 'Ba', orbital: '4p3/2', be: 180 },\n  { element: 'La', orbital: '4p3/2', be: 192 },\n  { element: 'Ce', orbital: '4p3/2', be: 208 },\n  { element: 'Pr', orbital: '4p3/2', be: 218 },\n  { element: 'Nd', orbital: '4p3/2', be: 225 },\n  { element: 'Pm', orbital: '4p3/2', be: 237 },\n  { element: 'Sm', orbital: '4p3/2', be: 249 },\n  { element: 'Eu', orbital: '4p3/2', be: 257 },\n  { element: 'Gd', orbital: '4p3/2', be: 271 },\n  { element: 'Tb', orbital: '4p3/2', be: 286 },\n  { element: 'Dy', orbital: '4p3/2', be: 293 },\n  { element: 'Ho', orbital: '4p3/2', be: 306 },\n  { element: 'Er', orbital: '4p3/2', be: 320 },\n  { element: 'Tm', orbital: '4p3/2', be: 337 },\n  { element: 'Yb', orbital: '4p3/2', be: 343 },\n  { element: 'Lu', orbital: '4p3/2', be: 359 },\n  { element: 'Hf', orbital: '4p3/2', be: 380 },\n  { element: 'Ta', orbital: '4p3/2', be: 405 },\n  { element: 'W', orbital: '4p3/2', be: 426 },\n  { element: 'Re', orbital: '4p3/2', be: 445 },\n  { element: 'Os', orbital: '4p3/2', be: 469 },\n  { element: 'Ir', orbital: '4p3/2', be: 495 },\n  { element: 'Pt', orbital: '4p3/2', be: 519 },\n  { element: 'Au', orbital: '4p3/2', be: 546 },\n  { element: 'Hg', orbital: '4p3/2', be: 571 },\n  { element: 'Tl', orbital: '4p3/2', be: 609 },\n  { element: 'Pb', orbital: '4p3/2', be: 645 },\n  { element: 'Bi', orbital: '4p3/2', be: 679 },\n  { element: 'Po', orbital: '4p3/2', be: 705 },\n  { element: 'At', orbital: '4p3/2', be: 740 },\n  { element: 'Rn', orbital: '4p3/2', be: 768 },\n  { element: 'Fr', orbital: '4p3/2', be: 810 },\n  { element: 'Ra', orbital: '4p3/2', be: 879 },\n  { element: 'Ac', orbital: '4p3/2', be: 890 },\n  { element: 'Th', orbital: '4p3/2', be: 968 },\n  { element: 'Ga', orbital: '4p', be: 1 },\n  { element: 'Ge', orbital: '4p', be: 3 },\n  { element: 'As', orbital: '4p', be: 3 },\n  { element: 'Se', orbital: '4p', be: 6 },\n  { element: 'Br', orbital: '4p', be: 5 },\n  { element: 'Kr', orbital: '4p', be: 11 },\n  { element: 'Rb', orbital: '4p', be: 14 },\n  { element: 'Sr', orbital: '4p', be: 20 },\n  { element: 'Y', orbital: '4p', be: 26 },\n  { element: 'Zr', orbital: '4p', be: 29 },\n  { element: 'Nb', orbital: '4p', be: 34 },\n  { element: 'Mo', orbital: '4p', be: 35 },\n  { element: 'Tc', orbital: '4p', be: 39 },\n  { element: 'Ru', orbital: '4p', be: 43 },\n  { element: 'Rh', orbital: '4p', be: 48 },\n  { element: 'Pd', orbital: '4p', be: 56 },\n  { element: 'Ag', orbital: '4p', be: 56 },\n  { element: 'Cd', orbital: '4p', be: 67 },\n  { element: 'In', orbital: '4p', be: 77 },\n  { element: 'Sn', orbital: '4p', be: 89 },\n  { element: 'Sb', orbital: '4p', be: 99 },\n  { element: 'Te', orbital: '4p', be: 110 },\n  { element: 'I', orbital: '4p', be: 123 },\n  { element: 'Xe', orbital: '4p', be: 147 },\n  { element: 'Cs', orbital: '4p', be: 162 },\n  { element: 'Ba', orbital: '4p', be: 180 },\n  { element: 'La', orbital: '4p', be: 192 },\n  { element: 'Ce', orbital: '4p', be: 208 },\n  { element: 'Pr', orbital: '4p', be: 218 },\n  { element: 'Nd', orbital: '4p', be: 225 },\n  { element: 'Pm', orbital: '4p', be: 237 },\n  { element: 'Sm', orbital: '4p', be: 249 },\n  { element: 'Eu', orbital: '4p', be: 257 },\n  { element: 'Gd', orbital: '4p', be: 271 },\n  { element: 'Tb', orbital: '4p', be: 286 },\n  { element: 'Dy', orbital: '4p', be: 293 },\n  { element: 'Ho', orbital: '4p', be: 306 },\n  { element: 'Er', orbital: '4p', be: 320 },\n  { element: 'Tm', orbital: '4p', be: 337 },\n  { element: 'Yb', orbital: '4p', be: 343 },\n  { element: 'Lu', orbital: '4p', be: 359 },\n  { element: 'Hf', orbital: '4p', be: 380 },\n  { element: 'Ta', orbital: '4p', be: 405 },\n  { element: 'W', orbital: '4p', be: 426 },\n  { element: 'Re', orbital: '4p', be: 445 },\n  { element: 'Os', orbital: '4p', be: 469 },\n  { element: 'Ir', orbital: '4p', be: 495 },\n  { element: 'Pt', orbital: '4p', be: 519 },\n  { element: 'Au', orbital: '4p', be: 546 },\n  { element: 'Hg', orbital: '4p', be: 571 },\n  { element: 'Tl', orbital: '4p', be: 609 },\n  { element: 'Pb', orbital: '4p', be: 645 },\n  { element: 'Bi', orbital: '4p', be: 679 },\n  { element: 'Po', orbital: '4p', be: 705 },\n  { element: 'At', orbital: '4p', be: 740 },\n  { element: 'Rn', orbital: '4p', be: 768 },\n  { element: 'Fr', orbital: '4p', be: 810 },\n  { element: 'Ra', orbital: '4p', be: 879 },\n  { element: 'Ac', orbital: '4p', be: 890 },\n  { element: 'Th', orbital: '4p', be: 968 },\n  { element: 'Y', orbital: '4d3/2', be: 3 },\n  { element: 'Zr', orbital: '4d3/2', be: 3 },\n  { element: 'Nb', orbital: '4d3/2', be: 4 },\n  { element: 'Mo', orbital: '4d3/2', be: 2 },\n  { element: 'Tc', orbital: '4d3/2', be: 2 },\n  { element: 'Ru', orbital: '4d3/2', be: 2 },\n  { element: 'Rh', orbital: '4d3/2', be: 3 },\n  { element: 'Pd', orbital: '4d3/2', be: 1 },\n  { element: 'Ag', orbital: '4d3/2', be: 3 },\n  { element: 'Cd', orbital: '4d3/2', be: 9 },\n  { element: 'In', orbital: '4d3/2', be: 16 },\n  { element: 'Sn', orbital: '4d3/2', be: 24 },\n  { element: 'Sb', orbital: '4d3/2', be: 32 },\n  { element: 'Te', orbital: '4d3/2', be: 40 },\n  { element: 'I', orbital: '4d3/2', be: 50 },\n  { element: 'Xe', orbital: '4d3/2', be: 63 },\n  { element: 'Cs', orbital: '4d3/2', be: 79 },\n  { element: 'Ba', orbital: '4d3/2', be: 93 },\n  { element: 'La', orbital: '4d3/2', be: 99 },\n  { element: 'Ce', orbital: '4d3/2', be: 111 },\n  { element: 'Pr', orbital: '4d3/2', be: 114 },\n  { element: 'Nd', orbital: '4d3/2', be: 118 },\n  { element: 'Pm', orbital: '4d3/2', be: 121 },\n  { element: 'Sm', orbital: '4d3/2', be: 130 },\n  { element: 'Eu', orbital: '4d3/2', be: 134 },\n  { element: 'Gd', orbital: '4d3/2', be: 141 },\n  { element: 'Tb', orbital: '4d3/2', be: 148 },\n  { element: 'Dy', orbital: '4d3/2', be: 154 },\n  { element: 'Ho', orbital: '4d3/2', be: 161 },\n  { element: 'Er', orbital: '4d3/2', be: 177 },\n  { element: 'Tm', orbital: '4d3/2', be: 180 },\n  { element: 'Yb', orbital: '4d3/2', be: 197 },\n  { element: 'Lu', orbital: '4d3/2', be: 205 },\n  { element: 'Hf', orbital: '4d3/2', be: 224 },\n  { element: 'Ta', orbital: '4d3/2', be: 242 },\n  { element: 'W', orbital: '4d3/2', be: 259 },\n  { element: 'Re', orbital: '4d3/2', be: 274 },\n  { element: 'Os', orbital: '4d3/2', be: 290 },\n  { element: 'Ir', orbital: '4d3/2', be: 312 },\n  { element: 'Pt', orbital: '4d3/2', be: 331 },\n  { element: 'Au', orbital: '4d3/2', be: 352 },\n  { element: 'Hg', orbital: '4d3/2', be: 379 },\n  { element: 'Tl', orbital: '4d3/2', be: 407 },\n  { element: 'Pb', orbital: '4d3/2', be: 435 },\n  { element: 'Bi', orbital: '4d3/2', be: 464 },\n  { element: 'Po', orbital: '4d3/2', be: 500 },\n  { element: 'At', orbital: '4d3/2', be: 533 },\n  { element: 'Rn', orbital: '4d3/2', be: 567 },\n  { element: 'Fr', orbital: '4d3/2', be: 603 },\n  { element: 'Ra', orbital: '4d3/2', be: 636 },\n  { element: 'Ac', orbital: '4d3/2', be: 675 },\n  { element: 'Th', orbital: '4d3/2', be: 714 },\n  { element: 'U', orbital: '4d3/2', be: 781 },\n  { element: 'Y', orbital: '4d5/2', be: 3 },\n  { element: 'Zr', orbital: '4d5/2', be: 3 },\n  { element: 'Nb', orbital: '4d5/2', be: 4 },\n  { element: 'Mo', orbital: '4d5/2', be: 2 },\n  { element: 'Tc', orbital: '4d5/2', be: 2 },\n  { element: 'Ru', orbital: '4d5/2', be: 2 },\n  { element: 'Rh', orbital: '4d5/2', be: 3 },\n  { element: 'Pd', orbital: '4d5/2', be: 1 },\n  { element: 'Ag', orbital: '4d5/2', be: 3 },\n  { element: 'Cd', orbital: '4d5/2', be: 9 },\n  { element: 'In', orbital: '4d5/2', be: 16 },\n  { element: 'Sn', orbital: '4d5/2', be: 24 },\n  { element: 'Sb', orbital: '4d5/2', be: 32 },\n  { element: 'Te', orbital: '4d5/2', be: 40 },\n  { element: 'I', orbital: '4d5/2', be: 50 },\n  { element: 'Xe', orbital: '4d5/2', be: 63 },\n  { element: 'Cs', orbital: '4d5/2', be: 77 },\n  { element: 'Ba', orbital: '4d5/2', be: 90 },\n  { element: 'La', orbital: '4d5/2', be: 99 },\n  { element: 'Ce', orbital: '4d5/2', be: 111 },\n  { element: 'Pr', orbital: '4d5/2', be: 114 },\n  { element: 'Nd', orbital: '4d5/2', be: 118 },\n  { element: 'Pm', orbital: '4d5/2', be: 121 },\n  { element: 'Sm', orbital: '4d5/2', be: 130 },\n  { element: 'Eu', orbital: '4d5/2', be: 134 },\n  { element: 'Gd', orbital: '4d5/2', be: 141 },\n  { element: 'Tb', orbital: '4d5/2', be: 148 },\n  { element: 'Dy', orbital: '4d5/2', be: 154 },\n  { element: 'Ho', orbital: '4d5/2', be: 161 },\n  { element: 'Er', orbital: '4d5/2', be: 168 },\n  { element: 'Tm', orbital: '4d5/2', be: 180 },\n  { element: 'Yb', orbital: '4d5/2', be: 184 },\n  { element: 'Lu', orbital: '4d5/2', be: 195 },\n  { element: 'Hf', orbital: '4d5/2', be: 214 },\n  { element: 'Ta', orbital: '4d5/2', be: 230 },\n  { element: 'W', orbital: '4d5/2', be: 246 },\n  { element: 'Re', orbital: '4d5/2', be: 260 },\n  { element: 'Os', orbital: '4d5/2', be: 273 },\n  { element: 'Ir', orbital: '4d5/2', be: 295 },\n  { element: 'Pt', orbital: '4d5/2', be: 314 },\n  { element: 'Au', orbital: '4d5/2', be: 334 },\n  { element: 'Hg', orbital: '4d5/2', be: 360 },\n  { element: 'Tl', orbital: '4d5/2', be: 386 },\n  { element: 'Pb', orbital: '4d5/2', be: 413 },\n  { element: 'Bi', orbital: '4d5/2', be: 440 },\n  { element: 'Po', orbital: '4d5/2', be: 473 },\n  { element: 'At', orbital: '4d5/2', be: 507 },\n  { element: 'Rn', orbital: '4d5/2', be: 541 },\n  { element: 'Fr', orbital: '4d5/2', be: 577 },\n  { element: 'Ra', orbital: '4d5/2', be: 603 },\n  { element: 'Ac', orbital: '4d5/2', be: 639 },\n  { element: 'Th', orbital: '4d5/2', be: 677 },\n  { element: 'U', orbital: '4d5/2', be: 739 },\n  { element: 'Y', orbital: '4d', be: 3 },\n  { element: 'Zr', orbital: '4d', be: 3 },\n  { element: 'Nb', orbital: '4d', be: 4 },\n  { element: 'Mo', orbital: '4d', be: 2 },\n  { element: 'Tc', orbital: '4d', be: 2 },\n  { element: 'Ru', orbital: '4d', be: 2 },\n  { element: 'Rh', orbital: '4d', be: 3 },\n  { element: 'Pd', orbital: '4d', be: 1 },\n  { element: 'Ag', orbital: '4d', be: 3 },\n  { element: 'Cd', orbital: '4d', be: 9 },\n  { element: 'In', orbital: '4d', be: 16 },\n  { element: 'Sn', orbital: '4d', be: 24 },\n  { element: 'Sb', orbital: '4d', be: 32 },\n  { element: 'Te', orbital: '4d', be: 40 },\n  { element: 'I', orbital: '4d', be: 50 },\n  { element: 'Xe', orbital: '4d', be: 63 },\n  { element: 'Cs', orbital: '4d', be: 77 },\n  { element: 'Ba', orbital: '4d', be: 90 },\n  { element: 'La', orbital: '4d', be: 99 },\n  { element: 'Ce', orbital: '4d', be: 111 },\n  { element: 'Pr', orbital: '4d', be: 114 },\n  { element: 'Nd', orbital: '4d', be: 118 },\n  { element: 'Pm', orbital: '4d', be: 121 },\n  { element: 'Sm', orbital: '4d', be: 130 },\n  { element: 'Eu', orbital: '4d', be: 134 },\n  { element: 'Gd', orbital: '4d', be: 141 },\n  { element: 'Tb', orbital: '4d', be: 148 },\n  { element: 'Dy', orbital: '4d', be: 154 },\n  { element: 'Ho', orbital: '4d', be: 161 },\n  { element: 'Er', orbital: '4d', be: 168 },\n  { element: 'Tm', orbital: '4d', be: 180 },\n  { element: 'Yb', orbital: '4d', be: 184 },\n  { element: 'Lu', orbital: '4d', be: 195 },\n  { element: 'Hf', orbital: '4d', be: 214 },\n  { element: 'Ta', orbital: '4d', be: 230 },\n  { element: 'W', orbital: '4d', be: 246 },\n  { element: 'Re', orbital: '4d', be: 260 },\n  { element: 'Os', orbital: '4d', be: 273 },\n  { element: 'Ir', orbital: '4d', be: 295 },\n  { element: 'Pt', orbital: '4d', be: 314 },\n  { element: 'Au', orbital: '4d', be: 334 },\n  { element: 'Hg', orbital: '4d', be: 360 },\n  { element: 'Tl', orbital: '4d', be: 386 },\n  { element: 'Pb', orbital: '4d', be: 413 },\n  { element: 'Bi', orbital: '4d', be: 440 },\n  { element: 'Po', orbital: '4d', be: 473 },\n  { element: 'At', orbital: '4d', be: 507 },\n  { element: 'Rn', orbital: '4d', be: 541 },\n  { element: 'Fr', orbital: '4d', be: 577 },\n  { element: 'Ra', orbital: '4d', be: 603 },\n  { element: 'Ac', orbital: '4d', be: 639 },\n  { element: 'Th', orbital: '4d', be: 677 },\n  { element: 'U', orbital: '4d', be: 739 },\n  { element: 'Ce', orbital: '4f5/2', be: 1 },\n  { element: 'Pr', orbital: '4f5/2', be: 2 },\n  { element: 'Nd', orbital: '4f5/2', be: 2 },\n  { element: 'Pm', orbital: '4f5/2', be: 4 },\n  { element: 'Sm', orbital: '4f5/2', be: 7 },\n  { element: 'Tb', orbital: '4f5/2', be: 3 },\n  { element: 'Dy', orbital: '4f5/2', be: 4 },\n  { element: 'Ho', orbital: '4f5/2', be: 4 },\n  { element: 'Er', orbital: '4f5/2', be: 4 },\n  { element: 'Tm', orbital: '4f5/2', be: 5 },\n  { element: 'Yb', orbital: '4f5/2', be: 6 },\n  { element: 'Lu', orbital: '4f5/2', be: 7 },\n  { element: 'Hf', orbital: '4f5/2', be: 19 },\n  { element: 'Ta', orbital: '4f5/2', be: 27 },\n  { element: 'W', orbital: '4f5/2', be: 37 },\n  { element: 'Re', orbital: '4f5/2', be: 47 },\n  { element: 'Os', orbital: '4f5/2', be: 52 },\n  { element: 'Ir', orbital: '4f5/2', be: 63 },\n  { element: 'Pt', orbital: '4f5/2', be: 74 },\n  { element: 'Au', orbital: '4f5/2', be: 87 },\n  { element: 'Hg', orbital: '4f5/2', be: 103 },\n  { element: 'Tl', orbital: '4f5/2', be: 122 },\n  { element: 'Pb', orbital: '4f5/2', be: 143 },\n  { element: 'Bi', orbital: '4f5/2', be: 163 },\n  { element: 'Po', orbital: '4f5/2', be: 184 },\n  { element: 'At', orbital: '4f5/2', be: 210 },\n  { element: 'Rn', orbital: '4f5/2', be: 238 },\n  { element: 'Fr', orbital: '4f5/2', be: 268 },\n  { element: 'Ra', orbital: '4f5/2', be: 299 },\n  { element: 'Ac', orbital: '4f5/2', be: 319 },\n  { element: 'Th', orbital: '4f5/2', be: 344 },\n  { element: 'U', orbital: '4f5/2', be: 391 },\n  { element: 'Ce', orbital: '4f7/2', be: 1 },\n  { element: 'Pr', orbital: '4f7/2', be: 2 },\n  { element: 'Nd', orbital: '4f7/2', be: 2 },\n  { element: 'Pm', orbital: '4f7/2', be: 4 },\n  { element: 'Sm', orbital: '4f7/2', be: 7 },\n  { element: 'Tb', orbital: '4f7/2', be: 3 },\n  { element: 'Dy', orbital: '4f7/2', be: 4 },\n  { element: 'Ho', orbital: '4f7/2', be: 4 },\n  { element: 'Er', orbital: '4f7/2', be: 4 },\n  { element: 'Tm', orbital: '4f7/2', be: 5 },\n  { element: 'Yb', orbital: '4f7/2', be: 6 },\n  { element: 'Lu', orbital: '4f7/2', be: 7 },\n  { element: 'Hf', orbital: '4f7/2', be: 18 },\n  { element: 'Ta', orbital: '4f7/2', be: 25 },\n  { element: 'W', orbital: '4f7/2', be: 34 },\n  { element: 'Re', orbital: '4f7/2', be: 45 },\n  { element: 'Os', orbital: '4f7/2', be: 50 },\n  { element: 'Ir', orbital: '4f7/2', be: 60 },\n  { element: 'Pt', orbital: '4f7/2', be: 70 },\n  { element: 'Au', orbital: '4f7/2', be: 83 },\n  { element: 'Hg', orbital: '4f7/2', be: 99 },\n  { element: 'Tl', orbital: '4f7/2', be: 118 },\n  { element: 'Pb', orbital: '4f7/2', be: 138 },\n  { element: 'Bi', orbital: '4f7/2', be: 158 },\n  { element: 'Po', orbital: '4f7/2', be: 184 },\n  { element: 'At', orbital: '4f7/2', be: 210 },\n  { element: 'Rn', orbital: '4f7/2', be: 238 },\n  { element: 'Fr', orbital: '4f7/2', be: 268 },\n  { element: 'Ra', orbital: '4f7/2', be: 299 },\n  { element: 'Ac', orbital: '4f7/2', be: 319 },\n  { element: 'Th', orbital: '4f7/2', be: 335 },\n  { element: 'U', orbital: '4f7/2', be: 380 },\n  { element: 'Ce', orbital: '4f', be: 1 },\n  { element: 'Pr', orbital: '4f', be: 2 },\n  { element: 'Nd', orbital: '4f', be: 2 },\n  { element: 'Pm', orbital: '4f', be: 4 },\n  { element: 'Sm', orbital: '4f', be: 7 },\n  { element: 'Tb', orbital: '4f', be: 3 },\n  { element: 'Dy', orbital: '4f', be: 4 },\n  { element: 'Ho', orbital: '4f', be: 4 },\n  { element: 'Er', orbital: '4f', be: 4 },\n  { element: 'Tm', orbital: '4f', be: 5 },\n  { element: 'Yb', orbital: '4f', be: 6 },\n  { element: 'Lu', orbital: '4f', be: 7 },\n  { element: 'Hf', orbital: '4f', be: 18 },\n  { element: 'Ta', orbital: '4f', be: 25 },\n  { element: 'W', orbital: '4f', be: 34 },\n  { element: 'Re', orbital: '4f', be: 45 },\n  { element: 'Os', orbital: '4f', be: 50 },\n  { element: 'Ir', orbital: '4f', be: 60 },\n  { element: 'Pt', orbital: '4f', be: 70 },\n  { element: 'Au', orbital: '4f', be: 83 },\n  { element: 'Hg', orbital: '4f', be: 99 },\n  { element: 'Tl', orbital: '4f', be: 118 },\n  { element: 'Pb', orbital: '4f', be: 138 },\n  { element: 'Bi', orbital: '4f', be: 158 },\n  { element: 'Po', orbital: '4f', be: 184 },\n  { element: 'At', orbital: '4f', be: 210 },\n  { element: 'Rn', orbital: '4f', be: 238 },\n  { element: 'Fr', orbital: '4f', be: 268 },\n  { element: 'Ra', orbital: '4f', be: 299 },\n  { element: 'Ac', orbital: '4f', be: 319 },\n  { element: 'Th', orbital: '4f', be: 335 },\n  { element: 'U', orbital: '4f', be: 380 },\n  { element: 'Sn', orbital: '5s', be: 1 },\n  { element: 'Sb', orbital: '5s', be: 7 },\n  { element: 'Te', orbital: '5s', be: 12 },\n  { element: 'I', orbital: '5s', be: 14 },\n  { element: 'Xe', orbital: '5s', be: 18 },\n  { element: 'Cs', orbital: '5s', be: 23 },\n  { element: 'Ba', orbital: '5s', be: 40 },\n  { element: 'La', orbital: '5s', be: 33 },\n  { element: 'Ce', orbital: '5s', be: 38 },\n  { element: 'Pr', orbital: '5s', be: 38 },\n  { element: 'Nd', orbital: '5s', be: 38 },\n  { element: 'Pm', orbital: '5s', be: 38 },\n  { element: 'Sm', orbital: '5s', be: 39 },\n  { element: 'Eu', orbital: '5s', be: 32 },\n  { element: 'Gd', orbital: '5s', be: 36 },\n  { element: 'Tb', orbital: '5s', be: 40 },\n  { element: 'Dy', orbital: '5s', be: 63 },\n  { element: 'Ho', orbital: '5s', be: 51 },\n  { element: 'Er', orbital: '5s', be: 60 },\n  { element: 'Tm', orbital: '5s', be: 53 },\n  { element: 'Yb', orbital: '5s', be: 53 },\n  { element: 'Lu', orbital: '5s', be: 57 },\n  { element: 'Hf', orbital: '5s', be: 65 },\n  { element: 'Ta', orbital: '5s', be: 71 },\n  { element: 'W', orbital: '5s', be: 77 },\n  { element: 'Re', orbital: '5s', be: 83 },\n  { element: 'Os', orbital: '5s', be: 84 },\n  { element: 'Ir', orbital: '5s', be: 96 },\n  { element: 'Pt', orbital: '5s', be: 102 },\n  { element: 'Au', orbital: '5s', be: 108 },\n  { element: 'Hg', orbital: '5s', be: 120 },\n  { element: 'Tl', orbital: '5s', be: 137 },\n  { element: 'Pb', orbital: '5s', be: 148 },\n  { element: 'Bi', orbital: '5s', be: 160 },\n  { element: 'Po', orbital: '5s', be: 177 },\n  { element: 'At', orbital: '5s', be: 195 },\n  { element: 'Rn', orbital: '5s', be: 214 },\n  { element: 'Fr', orbital: '5s', be: 234 },\n  { element: 'Ra', orbital: '5s', be: 254 },\n  { element: 'Ac', orbital: '5s', be: 272 },\n  { element: 'Th', orbital: '5s', be: 290 },\n  { element: 'In', orbital: '5p1/2', be: 1 },\n  { element: 'Sn', orbital: '5p1/2', be: 1 },\n  { element: 'Sb', orbital: '5p1/2', be: 2 },\n  { element: 'Te', orbital: '5p1/2', be: 2 },\n  { element: 'I', orbital: '5p1/2', be: 3 },\n  { element: 'Xe', orbital: '5p1/2', be: 7 },\n  { element: 'Cs', orbital: '5p1/2', be: 13 },\n  { element: 'Ba', orbital: '5p1/2', be: 17 },\n  { element: 'La', orbital: '5p1/2', be: 15 },\n  { element: 'Ce', orbital: '5p1/2', be: 20 },\n  { element: 'Pr', orbital: '5p1/2', be: 23 },\n  { element: 'Nd', orbital: '5p1/2', be: 22 },\n  { element: 'Pm', orbital: '5p1/2', be: 22 },\n  { element: 'Sm', orbital: '5p1/2', be: 22 },\n  { element: 'Eu', orbital: '5p1/2', be: 22 },\n  { element: 'Gd', orbital: '5p1/2', be: 21 },\n  { element: 'Tb', orbital: '5p1/2', be: 26 },\n  { element: 'Dy', orbital: '5p1/2', be: 26 },\n  { element: 'Ho', orbital: '5p1/2', be: 20 },\n  { element: 'Er', orbital: '5p1/2', be: 29 },\n  { element: 'Tm', orbital: '5p1/2', be: 32 },\n  { element: 'Yb', orbital: '5p1/2', be: 23 },\n  { element: 'Lu', orbital: '5p1/2', be: 28 },\n  { element: 'Hf', orbital: '5p1/2', be: 38 },\n  { element: 'Ta', orbital: '5p1/2', be: 45 },\n  { element: 'W', orbital: '5p1/2', be: 47 },\n  { element: 'Re', orbital: '5p1/2', be: 46 },\n  { element: 'Os', orbital: '5p1/2', be: 58 },\n  { element: 'Ir', orbital: '5p1/2', be: 63 },\n  { element: 'Pt', orbital: '5p1/2', be: 66 },\n  { element: 'Au', orbital: '5p1/2', be: 72 },\n  { element: 'Hg', orbital: '5p1/2', be: 81 },\n  { element: 'Tl', orbital: '5p1/2', be: 100 },\n  { element: 'Pb', orbital: '5p1/2', be: 105 },\n  { element: 'Bi', orbital: '5p1/2', be: 117 },\n  { element: 'Po', orbital: '5p1/2', be: 132 },\n  { element: 'At', orbital: '5p1/2', be: 148 },\n  { element: 'Rn', orbital: '5p1/2', be: 164 },\n  { element: 'Fr', orbital: '5p1/2', be: 182 },\n  { element: 'Ra', orbital: '5p1/2', be: 200 },\n  { element: 'Ac', orbital: '5p1/2', be: 215 },\n  { element: 'Th', orbital: '5p1/2', be: 229 },\n  { element: 'In', orbital: '5p3/2', be: 1 },\n  { element: 'Sn', orbital: '5p3/2', be: 1 },\n  { element: 'Sb', orbital: '5p3/2', be: 2 },\n  { element: 'Te', orbital: '5p3/2', be: 2 },\n  { element: 'I', orbital: '5p3/2', be: 3 },\n  { element: 'Xe', orbital: '5p3/2', be: 7 },\n  { element: 'Cs', orbital: '5p3/2', be: 12 },\n  { element: 'Ba', orbital: '5p3/2', be: 15 },\n  { element: 'La', orbital: '5p3/2', be: 15 },\n  { element: 'Ce', orbital: '5p3/2', be: 20 },\n  { element: 'Pr', orbital: '5p3/2', be: 23 },\n  { element: 'Nd', orbital: '5p3/2', be: 22 },\n  { element: 'Pm', orbital: '5p3/2', be: 22 },\n  { element: 'Sm', orbital: '5p3/2', be: 22 },\n  { element: 'Eu', orbital: '5p3/2', be: 22 },\n  { element: 'Gd', orbital: '5p3/2', be: 21 },\n  { element: 'Tb', orbital: '5p3/2', be: 26 },\n  { element: 'Dy', orbital: '5p3/2', be: 26 },\n  { element: 'Ho', orbital: '5p3/2', be: 20 },\n  { element: 'Er', orbital: '5p3/2', be: 29 },\n  { element: 'Tm', orbital: '5p3/2', be: 32 },\n  { element: 'Yb', orbital: '5p3/2', be: 23 },\n  { element: 'Lu', orbital: '5p3/2', be: 28 },\n  { element: 'Hf', orbital: '5p3/2', be: 31 },\n  { element: 'Ta', orbital: '5p3/2', be: 37 },\n  { element: 'W', orbital: '5p3/2', be: 37 },\n  { element: 'Re', orbital: '5p3/2', be: 35 },\n  { element: 'Os', orbital: '5p3/2', be: 46 },\n  { element: 'Ir', orbital: '5p3/2', be: 51 },\n  { element: 'Pt', orbital: '5p3/2', be: 51 },\n  { element: 'Au', orbital: '5p3/2', be: 54 },\n  { element: 'Hg', orbital: '5p3/2', be: 58 },\n  { element: 'Tl', orbital: '5p3/2', be: 76 },\n  { element: 'Pb', orbital: '5p3/2', be: 86 },\n  { element: 'Bi', orbital: '5p3/2', be: 93 },\n  { element: 'Po', orbital: '5p3/2', be: 104 },\n  { element: 'At', orbital: '5p3/2', be: 115 },\n  { element: 'Rn', orbital: '5p3/2', be: 127 },\n  { element: 'Fr', orbital: '5p3/2', be: 140 },\n  { element: 'Ra', orbital: '5p3/2', be: 153 },\n  { element: 'Ac', orbital: '5p3/2', be: 167 },\n  { element: 'Th', orbital: '5p3/2', be: 182 },\n  { element: 'In', orbital: '5p', be: 1 },\n  { element: 'Sn', orbital: '5p', be: 1 },\n  { element: 'Sb', orbital: '5p', be: 2 },\n  { element: 'Te', orbital: '5p', be: 2 },\n  { element: 'I', orbital: '5p', be: 3 },\n  { element: 'Xe', orbital: '5p', be: 7 },\n  { element: 'Cs', orbital: '5p', be: 12 },\n  { element: 'Ba', orbital: '5p', be: 15 },\n  { element: 'La', orbital: '5p', be: 15 },\n  { element: 'Ce', orbital: '5p', be: 20 },\n  { element: 'Pr', orbital: '5p', be: 23 },\n  { element: 'Nd', orbital: '5p', be: 22 },\n  { element: 'Pm', orbital: '5p', be: 22 },\n  { element: 'Sm', orbital: '5p', be: 22 },\n  { element: 'Eu', orbital: '5p', be: 22 },\n  { element: 'Gd', orbital: '5p', be: 21 },\n  { element: 'Tb', orbital: '5p', be: 26 },\n  { element: 'Dy', orbital: '5p', be: 26 },\n  { element: 'Ho', orbital: '5p', be: 20 },\n  { element: 'Er', orbital: '5p', be: 29 },\n  { element: 'Tm', orbital: '5p', be: 32 },\n  { element: 'Yb', orbital: '5p', be: 23 },\n  { element: 'Lu', orbital: '5p', be: 28 },\n  { element: 'Hf', orbital: '5p', be: 31 },\n  { element: 'Ta', orbital: '5p', be: 37 },\n  { element: 'W', orbital: '5p', be: 37 },\n  { element: 'Re', orbital: '5p', be: 35 },\n  { element: 'Os', orbital: '5p', be: 46 },\n  { element: 'Ir', orbital: '5p', be: 51 },\n  { element: 'Pt', orbital: '5p', be: 51 },\n  { element: 'Au', orbital: '5p', be: 54 },\n  { element: 'Hg', orbital: '5p', be: 58 },\n  { element: 'Tl', orbital: '5p', be: 76 },\n  { element: 'Pb', orbital: '5p', be: 86 },\n  { element: 'Bi', orbital: '5p', be: 93 },\n  { element: 'Po', orbital: '5p', be: 104 },\n  { element: 'At', orbital: '5p', be: 115 },\n  { element: 'Rn', orbital: '5p', be: 127 },\n  { element: 'Fr', orbital: '5p', be: 140 },\n  { element: 'Ra', orbital: '5p', be: 153 },\n  { element: 'Ac', orbital: '5p', be: 167 },\n  { element: 'Th', orbital: '5p', be: 182 },\n  { element: 'Lu', orbital: '5d3/2', be: 5 },\n  { element: 'Hf', orbital: '5d3/2', be: 7 },\n  { element: 'Ta', orbital: '5d3/2', be: 6 },\n  { element: 'W', orbital: '5d3/2', be: 6 },\n  { element: 'Re', orbital: '5d3/2', be: 4 },\n  { element: 'Ir', orbital: '5d3/2', be: 4 },\n  { element: 'Pt', orbital: '5d3/2', be: 2 },\n  { element: 'Au', orbital: '5d3/2', be: 3 },\n  { element: 'Hg', orbital: '5d3/2', be: 7 },\n  { element: 'Tl', orbital: '5d3/2', be: 16 },\n  { element: 'Pb', orbital: '5d3/2', be: 22 },\n  { element: 'Bi', orbital: '5d3/2', be: 27 },\n  { element: 'Po', orbital: '5d3/2', be: 31 },\n  { element: 'At', orbital: '5d3/2', be: 40 },\n  { element: 'Rn', orbital: '5d3/2', be: 48 },\n  { element: 'Fr', orbital: '5d3/2', be: 58 },\n  { element: 'Ra', orbital: '5d3/2', be: 68 },\n  { element: 'Ac', orbital: '5d3/2', be: 80 },\n  { element: 'Th', orbital: '5d3/2', be: 95 },\n  { element: 'U', orbital: '5d3/2', be: 104 },\n  { element: 'Lu', orbital: '5d5/2', be: 5 },\n  { element: 'Hf', orbital: '5d5/2', be: 7 },\n  { element: 'Ta', orbital: '5d5/2', be: 6 },\n  { element: 'W', orbital: '5d5/2', be: 6 },\n  { element: 'Re', orbital: '5d5/2', be: 4 },\n  { element: 'Ir', orbital: '5d5/2', be: 4 },\n  { element: 'Pt', orbital: '5d5/2', be: 2 },\n  { element: 'Au', orbital: '5d5/2', be: 3 },\n  { element: 'Hg', orbital: '5d5/2', be: 7 },\n  { element: 'Tl', orbital: '5d5/2', be: 13 },\n  { element: 'Pb', orbital: '5d5/2', be: 20 },\n  { element: 'Bi', orbital: '5d5/2', be: 25 },\n  { element: 'Po', orbital: '5d5/2', be: 31 },\n  { element: 'At', orbital: '5d5/2', be: 40 },\n  { element: 'Rn', orbital: '5d5/2', be: 48 },\n  { element: 'Fr', orbital: '5d5/2', be: 58 },\n  { element: 'Ra', orbital: '5d5/2', be: 68 },\n  { element: 'Ac', orbital: '5d5/2', be: 80 },\n  { element: 'Th', orbital: '5d5/2', be: 88 },\n  { element: 'U', orbital: '5d5/2', be: 96 },\n  { element: 'Lu', orbital: '5d', be: 5 },\n  { element: 'Hf', orbital: '5d', be: 7 },\n  { element: 'Ta', orbital: '5d', be: 6 },\n  { element: 'W', orbital: '5d', be: 6 },\n  { element: 'Re', orbital: '5d', be: 4 },\n  { element: 'Ir', orbital: '5d', be: 4 },\n  { element: 'Pt', orbital: '5d', be: 2 },\n  { element: 'Au', orbital: '5d', be: 3 },\n  { element: 'Hg', orbital: '5d', be: 7 },\n  { element: 'Tl', orbital: '5d', be: 13 },\n  { element: 'Pb', orbital: '5d', be: 20 },\n  { element: 'Bi', orbital: '5d', be: 25 },\n  { element: 'Po', orbital: '5d', be: 31 },\n  { element: 'At', orbital: '5d', be: 40 },\n  { element: 'Rn', orbital: '5d', be: 48 },\n  { element: 'Fr', orbital: '5d', be: 58 },\n  { element: 'Ra', orbital: '5d', be: 68 },\n  { element: 'Ac', orbital: '5d', be: 80 },\n  { element: 'Th', orbital: '5d', be: 88 },\n  { element: 'U', orbital: '5d', be: 96 },\n  { element: 'Pb', orbital: '6s', be: 3 },\n  { element: 'Bi', orbital: '6s', be: 8 },\n  { element: 'Po', orbital: '6s', be: 12 },\n  { element: 'At', orbital: '6s', be: 18 },\n  { element: 'Rn', orbital: '6s', be: 26 },\n  { element: 'Fr', orbital: '6s', be: 34 },\n  { element: 'Ra', orbital: '6s', be: 44 },\n  { element: 'Th', orbital: '6s', be: 60 },\n  { element: 'Pb', orbital: '6p1/2', be: 1 },\n  { element: 'Bi', orbital: '6p1/2', be: 3 },\n  { element: 'Po', orbital: '6p1/2', be: 5 },\n  { element: 'At', orbital: '6p1/2', be: 8 },\n  { element: 'Rn', orbital: '6p1/2', be: 11 },\n  { element: 'Fr', orbital: '6p1/2', be: 15 },\n  { element: 'Ra', orbital: '6p1/2', be: 19 },\n  { element: 'Th', orbital: '6p1/2', be: 49 },\n  { element: 'U', orbital: '6p1/2', be: 28.9 },\n  { element: 'Pb', orbital: '6p3/2', be: 1 },\n  { element: 'Bi', orbital: '6p3/2', be: 3 },\n  { element: 'Po', orbital: '6p3/2', be: 5 },\n  { element: 'At', orbital: '6p3/2', be: 8 },\n  { element: 'Rn', orbital: '6p3/2', be: 11 },\n  { element: 'Fr', orbital: '6p3/2', be: 15 },\n  { element: 'Ra', orbital: '6p3/2', be: 19 },\n  { element: 'Th', orbital: '6p3/2', be: 43 },\n  { element: 'U', orbital: '6p3/2', be: 19 },\n  { element: 'Pb', orbital: '6p', be: 1 },\n  { element: 'Bi', orbital: '6p', be: 3 },\n  { element: 'Po', orbital: '6p', be: 5 },\n  { element: 'At', orbital: '6p', be: 8 },\n  { element: 'Rn', orbital: '6p', be: 11 },\n  { element: 'Fr', orbital: '6p', be: 15 },\n  { element: 'Ra', orbital: '6p', be: 19 },\n  { element: 'Th', orbital: '6p', be: 43 },\n  { element: 'U', orbital: '6p', be: 19 },\n];\n","import { toJcamps } from './toJcamps';\n\nexport function toJcamp(analysis, options = {}) {\n  return toJcamps(analysis, options).join('\\n');\n}\n"],"names":["toString","Object","prototype","isAnyArray","object","call","endsWith","max","input","isArray","TypeError","length","maxValue","i","min","minValue","a","d","e","f","g","h","j","c","b","_ref","module","exports","window","median","quickSelectMedian","slice","xAdd","array1","array2","constant","isConstant","Array","Error","Number","array3","xMultiply","Float64Array","xDivide","xIsMonotone","array","ascending","NaN","bisector","compare","ascendingComparator","left","x","lo","hi","mid","right","ascendingBisect","bisectRight","bisectLeft","descending","number$1","variance","n","m","s","isNaN","deviation","v","Math","sqrt","extent","identity","range","start","stop","step","arguments","ceil","e10","e5","e2","ticks","count","tickStep","floor","step0","abs","step1","pow","log","LN10","error","sturges","values","LN2","number","histogram","value","domain","threshold","data","xz","x0","x1","tz","shift","pop","bin","bins","push","_","thresholds","map","quantile","p","freedmanDiaconis","sort","scott","mean","numbers","merge","arrays","merged","pairs","permute","indexes","permutes","scan","xi","xj","shuffle","i0","i1","t","random","sum","transpose","matrix","row","zip","version","bisect","thresholdFreedmanDiaconis","thresholdScott","thresholdSturges","factory","xSubtract","sumValue","norm","output","options","undefined","_options$algorithm","algorithm","_options$sumValue","_options$maxValue","toLowerCase","absoluteSumValue","absoluteSum","currentMaxValue","factor","_i","sumFactor","_i2","concat","rescale","currentMin","currentMax","RangeError","_options$min","autoMinMax","_options$max","_typeof","obj","Symbol","iterator","constructor","sequentialFill","_options","_options$from","from","_options$to","to","_options$size","size","normalize","zones","NEGATIVE_INFINITY","POSITIVE_INFINITY","JSON","parse","stringify","zone","forEach","filter","currentZone","result","integral","slope","intercept","equallySpaced","arrayXY","y","xLength","reverse","variant","numberOfPoints","exclusions","exclusion","nextExclusion","invert","unitsPerPoint","reduce","previous","current","currentTotal","round","zonesWithPoints","xResult","yResult","zoneResult","processZone","halfStep","lastStep","previousX","MAX_VALUE","previousY","nextX","nextY","frontOutsideSpectra","backOutsideSpectra","currentValue","currentPoints","main","equallySpacedSlot","initialOriginalStep","lastOriginalStep","MIN_VALUE","sumAtMin","sumAtMax","add","equallySpacedSmooth","filterX","points","currentFrom","getZones","currentZoneIndex","newX","newY","position","indent","repeat","indentData","inspectMatrixWithOptions","maxRows","maxColumns","maxNumSize","name","rows","columns","maxI","maxJ","line","formatNumber","get","join","inspectData","num","numStr","String","padEnd","precise","toPrecision","exponential","toExponential","eIndex","indexOf","checkRowIndex","index","outer","checkColumnIndex","checkRowVector","vector","to1DArray","checkColumnVector","checkRowIndices","rowIndices","some","r","checkColumnIndices","columnIndices","checkRange","startRow","endRow","startColumn","endColumn","checkNumber","newArray","AbstractMatrix","newRows","newColumns","newData","newMatrix","Matrix","column","set","fill","isInteger","interval","this","zeros","l","matrix1","matrix2","checkMatrix","isMatrix","klass","apply","callback","to2DArray","copy","toJSON","isRowVector","isColumnVector","isVector","isSquare","isSymmetric","isEchelonForm","previousColumn","checked","isReducedEchelonForm","k","echelonForm","clone","iMax","swapRows","tmp","reducedEchelonForm","maxRow","pivot","setSubMatrix","neg","mulS","getRow","getRowVector","rowVector","setRow","row1","row2","temp","getColumn","getColumnVector","columnVector","setColumn","swapColumns","column1","column2","addRowVector","subRowVector","mulRowVector","divRowVector","addColumnVector","subColumnVector","mulColumnVector","divColumnVector","mulRow","mulColumn","maxIndex","idx","minIndex","maxRowIndex","minRow","minRowIndex","maxColumn","maxColumnIndex","minColumn","minColumnIndex","diag","type","cumulativeSum","dot","vector2","vector1","mmul","other","Bcolj","strassen2x2","a11","b11","a12","b12","a21","b21","a22","b22","m1","m2","m3","m4","m5","c00","c01","c10","c11","strassen3x3","a00","a01","a02","a10","a20","b00","b01","b02","b10","b20","m6","m7","m8","m9","m12","m13","m14","m15","m16","m17","m18","c02","c12","c20","c21","c22","mmulStrassen","r1","c1","r2","c2","embed","mat","cols","resultat","console","warn","blockMult","halfRows","parseInt","halfCols","subMatrix","sub","scaleRows","isFinite","scaleColumns","flipRows","middle","first","last","flipColumns","kroneckerProduct","q","sortRows","compareFunction","compareNumbers","sortColumns","subMatrixRow","indices","subMatrixColumn","selection","checkIndices","rowIndex","columnIndex","trace","by","sumByRow","sumByColumn","sumAll","product","productByRow","productByColumn","productAll","unbiased","sum1","sum2","varianceByRow","varianceByColumn","varianceAll","standardDeviation","center","centerByRow","centerByColumn","centerAll","scale","getScaleByRow","scaleByRow","getScaleByColumn","scaleByColumn","divider","getScaleAll","scaleAll","for","rand","randomInt","randInt","diagonal","eye","negate","tensorProduct","nRows","nColumns","arrayData","removeRow","splice","addRow","removeColumn","newRow","addColumn","addS","addM","subS","subM","subtract","subtractS","subtractM","mul","mulM","multiply","multiplyS","multiplyM","div","divS","divM","divide","divideS","divideM","mod","modS","modM","modulus","modulusS","modulusM","and","andS","andM","or","orS","orM","xor","xorS","xorM","leftShift","leftShiftS","leftShiftM","signPropagatingRightShift","signPropagatingRightShiftS","signPropagatingRightShiftM","rightShift","rightShiftS","rightShiftM","zeroFillRightShift","zeroFillRightShiftS","zeroFillRightShiftM","not","acos","acosh","asin","asinh","atan","atanh","cbrt","clz32","cos","cosh","exp","expm1","fround","log1p","log10","log2","sign","sin","sinh","tan","tanh","trunc","arg0","powS","powM","installMathOperations","BaseView","MatrixTransposeView","WrapperMatrix2D","LuDecomposition","LUcolj","kmax","lu","pivotVector","pivotSign","LU","isSingular","col","solve","X","determinant","hypotenuse","QrDecomposition","qr","rdiag","nrm","QR","Rdiag","isFullRank","SingularValueDecomposition","computeLeftSingularVectors","computeRightSingularVectors","autoTranspose","wantu","Boolean","wantv","swapped","aux","nu","ni","U","V","work","si","nct","nrt","mrc","pp","eps","EPSILON","kase","alpha","ks","cs","sn","sp","spm1","epm1","sk","ek","Y","scols","Ls","rightSingularVectors","VL","vrows","urows","VLU","solveForDiagonal","inverse","vcols","ucols","tol","ii","leftHandSide","rightHandSide","useSVD","defaultOptions","assign","matrixCase","len","cond","arrayCase","windowSize","derivative","polynomial","pad","padValue","savitzkyGolay","C","padArray","ans","J","ones","inic","Jtranspose","factorial","det","maybeToPrecision","digits","BaseRegression","predict","_predict","train","toLaTeX","score","y2","xSum","ySum","chi2","rmsd","xSquared","ySquared","xY","PolynomialRegression","degree","powers","coefficients","checkArrayLength","pr","F","FT","A","B","regress","precision","_toFormula","isLaTeX","sup","closeSup","times","fn","str","charAt","json","baselineCorrectionRegression","maxIterations","Regression","regressionOptions","tolerance","delta","regression","baseline","fitting","oldFitting","iteration","corrected","arithmeticMean","lnsum","means","samples","percent","alreadySorted","half","theMean","theVariance","averageDeviations","stdev","quart","q1","q2","q3","pooledVariance","vari","itemCount","itemArray","mean1","mean2","cov","s2","s3","dev","s4","weights","weightedVariance","weightedMean","z","w","inPlace","standardDev","isString","isFiniteImpl","isNumber","uniq","strings","seen","item","hasOwnProperty","compareArray","target","properties","keys","key","mulSafe","decimals","arg","getFractional","divSafe","den","val","QtyError","err","create","message","stack","throwIncompatibleUnits","UNITS","PI","BASE_UNITS","UNITY","UNITY_ARRAY","validateUnitDefinition","unitDef","definition","scalar","numerator","denominator","unit","PREFIX_VALUES","PREFIX_MAP","UNIT_VALUES","UNIT_MAP","OUTPUT_MAP","getUnits","kind","units","unitKeys","substr","getKinds","getAliases","unitName","SIGNATURE_VECTOR","unitSignature","signature","unitSignatureVector","isBase","toBase","SIGN","INTEGER","FRACTION","QTY_STRING_REGEX","RegExp","POWER_OP","SAFE_POWER","TOP_REGEX","BOTTOM_REGEX","trim","exec","scalarMatch","replace","parseFloat","nx","top","bottom","UNIT_TEST_REGEX","test","parseUnits","PREFIX_REGEX","UNIT_REGEX","UNIT_MATCH","UNIT_MATCH_REGEX","parsedUnitsCache","cached","unitMatch","normalizedUnits","globalParse","isQty","Qty","initValue","initUnits","assertValidConstructorArgs","baseScalar","_conversionCache","isDefinitionObject","updateBaseScalar","isTemperature","base","KINDS","knownSignature","subtractTemperatures","lhs","rhs","lhsUnits","rhsConverted","dstDegrees","getDegreeUnits","subtractTempDegrees","deg","tempDegrees","addTempDegrees","toDegrees","src","dst","dstScalar","srcDegK","toDegK","dstUnits","qty","match","toTemp","toTempK","swiftConverter","srcUnits","convert","srcQty","dstQty","eq","isDegrees","isCompatible","isInverse","baseUnitCache","toBaseUnits","toFloat","isUnitless","toPrec","precQuantity","cleanTerms","num1","den1","num2","den2","notUnity","combined","combineTerms","terms","direction","prefix","prefixValue","combinedPrefixValue","prop","NestedMap","defaultFormatter","op1","op2","numdenscale","compareTo","lt","lte","gt","gte","same","every","_isBase","childMap","formatter","_units","numIsUnity","denIsUnity","numUnits","stringifyUnits","denUnits","targetUnitsOrMaxDecimalsOrPrec","maxDecimals","targetUnits","out","format","targetQty","stringifiedUnitsCache","stringified","simplify","getOutputNames","token","tokenNext","unitNames","acc","unitCounter","unitCount","convertUnit","fromUnit","toUnit","getConvertedVariable","variable","newUnits","label","isMonotone","Analysis","id","substring","spectra","cache","pushSpectrum","variables","meta","dataType","title","xVariable","yVariable","standardizeData","getXYSpectrum","selector","spectrum","xUnits","yUnits","split","variableNames","getNormalizedSpectrum","normalization","newSpectrum","filters","processing","filterOptions","Stat","normed","baselineCorrection","process","getXLabel","getYLabel","GC_MS_FIELDS","complexChromatogram","chromatogram","series","ms","dimension","existingGCMSFields","convertMSFieldToLabel","pageValue","isMSField","canonicDataLabel","convertToFloatArray","stringArray","floatArray","fastParseXYData","yFactor","deltaX","isXYdata","currentData","ascii","currentX","firstX","currentY","firstY","endLine","charCodeAt","newLine","isDifference","isLastDifference","lastDifference","isDuplicate","inComment","lastValue","isNegative","inValue","skipFirstValue","decimalPosition","duplicate","ascii2","removeCommentRegExp","peakTableSplitRegExp","parsePeakTable","isPeaktable","numberOfVariables","lines","logs","parseXYZ","xFactor","parseXY","parseXYA","removeSymbolRegExp","isXYAdata","add2D","zData","minZ","maxZ","ySize","xSize","lastX","lastY","minX","maxX","minY","maxY","noise","getMedian","convertTo3DZ","noContour","contourLines","povarHeight0","povarHeight1","povarHeight2","povarHeight3","isOver0","isOver1","isOver2","isOver3","pAx","pAy","pBx","pBy","lineZValue","nbSubSpectra","nbPovars","dx","y0","dy","iter","nbContourLevels","contourLevels","level","contourLevel","side","noiseMultiplier","zValue","iSubSpectra","subSpectra","subSpectraAfter","povar","segments","generateContourLines","minMax","FFT","_n","_bitrev","_cstb","core","init","_initArray","_makeBitReversalTable","_makeCosSinTable","fft1d","re","im","fft","ifft1d","bt1d","fft2d","tre","tim","x2","y1","ifft2d","inv","ik","wr","wi","xr","n4","Uint32Array","_paddingZero","n2","n8","n2p4","dc","ds","apis","bt","ifft","gyromagneticRatio","profiling","action","time","Date","now","simpleChromatogram","intensity","postProcessing","entriesFlat","observeFrequency","shiftOffsetVal","entry","ntuples","symbol","toUpperCase","includes","nucleus","pageSymbolIndex","pageSymbol","ratio0","ratio1","ratio","postProcessingNMR","newNtuples","twoD","wantXY","keepSpectra","prepareNtuplesDatatable","currentEntry","xIndex","yIndex","firstVariable","secondVariable","lowerCaseSymbol","vardim","nbPoints","varname","prepareSpectrum","ntuplesSeparator","Spectrum","keepRecordsRegExp","canonicDataLabels","canonicMetadataLabels","dynamicTyping","withoutXY","addStyle","serie","color","opacity","lineWidth","style","width","dash","COLORS","fromVariables","info","forceNtuples","jcampOptions","xLabel","yLabel","owner","origin","header","fromJSON","varName","varType","varDim","minFct","maxFct","point","creatorNtuples","toJcamps","analysis","jcamps","getJcamp","text","pointer","parsed","blocks","nbComments","comments","nbExperimentVariables","experimentVariables","nbEntriesInclusionExclusion","blockParametersincludes","nbFutureUpgradeExperimentEntries","futureUpgradeExperimentEntries","nbBlocks","parseHeader","parseBlock","firstBlock","block","month","hours","minutes","seconds","blockComment","technique","nbCorrespondingVariables","correspondingVariables","nbAdditionalNumericalParameters","additionalNumericalParameters","nbOrdinateValues","correspondingVariable","minimumOrdinateValue","maximumOrdinateValue","analyses","addAnalysis","getAnalysisIndex","getAnalyses","ids","removeAllAnalyses","removeAnalysis","jcamp","converted","entries","tmpResult","children","parentsStack","ldrs","ldr","dataLabel","dataValue","infos","datatable","parentEntry","dataClass","xType","shiftOffsetNum","vartype","varform","yType","page","sampleDescription","startsWith","parsedValue","flatten","currentSpectrum","addJcamp","sourceEnergy","yValues","xStart","xIncrement","xValues","colors","opacities","linesWidth","axes","unitWrapperBefore","unitWrapperAfter","flipped","display","boundary","annotations","ignore","strokeWidth","fillColor","MIN_SAFE_INTEGER","MAX_SAFE_INTEGER","element","orbital","be"],"mappings":"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C,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,IAAKC,QAAS,KAAMC,GAAI,KACnC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,IAAKC,QAAS,KAAMC,GAAI,KACnC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,MACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,MACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,MACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,MACpC,CAAEF,QAAS,IAAKC,QAAS,KAAMC,GAAI,MACnC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,GACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,GACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,GACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,GACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,GACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,IAAKC,QAAS,QAASC,GAAI,IACtC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,IAAKC,QAAS,QAASC,GAAI,KACtC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,IAAKC,QAAS,QAASC,GAAI,KACtC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS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KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,IAAKC,QAAS,KAAMC,GAAI,KACnC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,IAAKC,QAAS,KAAMC,GAAI,KACnC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,IAAKC,QAAS,QAASC,GAAI,GACtC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,GACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,GACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,GACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,GACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,GACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,GACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,GACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,GACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,GACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,IAAKC,QAAS,QAASC,GAAI,IACtC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,IAAKC,QAAS,QAASC,GAAI,KACtC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,IAAKC,QAAS,QAASC,GAAI,KACtC,CAAEF,QAAS,IAAKC,QAAS,QAASC,GAAI,GACtC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,GACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,GACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,GACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,GACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,GACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,GACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,GACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,GACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,GACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,IAAKC,QAAS,QAASC,GAAI,IACtC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,IAAKC,QAAS,QAASC,GAAI,KACtC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,IAAKC,QAAS,QAASC,GAAI,KACtC,CAAEF,QAAS,IAAKC,QAAS,KAAMC,GAAI,GACnC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,GACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,GACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,GACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,GACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,GACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,GACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,GACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,GACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,GACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,IAAKC,QAAS,KAAMC,GAAI,IACnC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,IAAKC,QAAS,KAAMC,GAAI,KACnC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,IAAKC,QAAS,KAAMC,GAAI,KACnC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,GACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,GACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,GACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,GACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,GACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,GACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,GACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,GACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,GACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,GACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,GACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,GACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,IAAKC,QAAS,QAASC,GAAI,IACtC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,IAAKC,QAAS,QAASC,GAAI,KACtC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,GACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,GACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,GACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,GACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,GACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,GACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,GACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,GACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,GACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,GACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,GACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,GACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,IAAKC,QAAS,QAASC,GAAI,IACtC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,IAAKC,QAAS,QAASC,GAAI,KACtC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,GACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,GACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,GACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,GACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,GACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,GACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,GACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,GACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,GACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,GACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,GACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,GACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,IAAKC,QAAS,KAAMC,GAAI,IACnC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,IAAKC,QAAS,KAAMC,GAAI,KACnC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,GACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,GACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,IAAKC,QAAS,KAAMC,GAAI,IACnC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,IAAKC,QAAS,KAAMC,GAAI,IACnC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,GACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,GACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,GACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,GACvC,CAAEF,QAAS,IAAKC,QAAS,QAASC,GAAI,GACtC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,GACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,IAAKC,QAAS,QAASC,GAAI,IACtC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,GACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,GACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,GACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,GACvC,CAAEF,QAAS,IAAKC,QAAS,QAASC,GAAI,GACtC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,GACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,IAAKC,QAAS,QAASC,GAAI,IACtC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,GACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,GACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,GACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,GACpC,CAAEF,QAAS,IAAKC,QAAS,KAAMC,GAAI,GACnC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,GACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,IAAKC,QAAS,KAAMC,GAAI,IACnC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAE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,QAAS,KAAMC,GAAI,GACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,GACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,IAAKC,QAAS,KAAMC,GAAI,KACnC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,IAAKC,QAAS,KAAMC,GAAI,KACnC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,Q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ACtC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,IAAKC,QAAS,QAASC,GAAI,KACtC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,IAAKC,QAAS,QAASC,GAAI,KACtC,CAAEF,QAAS,IAAKC,QAAS,KAAMC,GAAI,GACnC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,GACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,GACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,GACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,GACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,GACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,GACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,GACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,GACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,GACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,IAAKC,QAAS,KAAMC,GAAI,IACnC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,IACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,IAAKC,QAAS,KAAMC,GAAI,KACnC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,KAAMC,QAAS,KAAMC,GAAI,KACpC,CAAEF,QAAS,IAAKC,QAAS,KAAMC,GAAI,KACnC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,GACvC,CAAEF,Q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I,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,IAAKC,QAAS,QAASC,GAAI,IACtC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,IACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,QAASC,GAAI,KACvC,CAAEF,QAAS,KAAMC,QAAS,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"}