{"version":3,"file":"physical-parser.js","sources":["../node_modules/js-quantities/build/quantities.js","../src/parseNumbersUnits.js","../src/parseBoilingPoint.js","../src/parseDensity.js","../src/parseRefractiveIndex.js","../src/parseVaporPressure.js"],"sourcesContent":["/*\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 = typeof globalThis !== 'undefined' ? globalThis : 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\",\"oilbarrel\", \"oilbarrels\", \"oil-barrel\",\"oil-barrels\"], 0.158987294928, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<beerbarrel>\":  [[\"bl\",\"bl-us\",\"beerbarrel\", \"beerbarrels\", \"beer-barrel\",\"beer-barrels\"], 0.1173477658, \"volume\", [\"<meter>\",\"<meter>\",\"<meter>\"]],\n    \"<beerbarrel-imp>\":  [[\"blimp\",\"bl-imp\",\"beerbarrel-imp\", \"beerbarrels-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    \"<Gal>\" : [[\"Gal\"], 1e-2, \"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.6\";\n\n  return Qty;\n\n})));\n","import Qty from 'js-quantities';\n\n/**\n * Parse a string that may contain min / max and units values\n * @param {string} string\n * @param {object} [options={}]\n * @param {number} [options.defaultValue]\n * @param {string} [options.defjaultUnits]\n * @param {string} [options.targetUnits]\n * @param {string} [options.optional=false] Is this value optional. Would through an error if empty and not optional\n */\nexport function parseNumbersUnits(string = '', options = {}) {\n  const {\n    defaultUnits = undefined,\n    targetUnits = undefined,\n    defaultValue = undefined,\n    optional = false,\n  } = options;\n  let normalized = String(string).replace(/ /g, '').replace(/,/g, '.');\n\n  normalized = normalized.replace(/Â°/g, '°');\n\n  if (normalized.match(/^\\(.*\\)$/)) {\n    normalized = normalized.substring(1, normalized.length - 2);\n  }\n\n  // still parenthesis ??? We remove what is after\n  normalized = normalized.replace(/\\(.*/, '');\n\n  if (optional && !normalized) return {};\n  let splitter = /^([0-9.Ee-]*)([a-zA-Z^/ °0-9]*)$/;\n  if (!normalized.match(splitter)) {\n    throw Error(`Can not parseNumbersUnits of: ${string}`);\n  }\n\n  let numbers = normalized.replace(splitter, '$1');\n  let units = normalized.replace(splitter, '$2').trim();\n\n  let low;\n  let high;\n\n  if (numbers === '') {\n    if (defaultValue) {\n      numbers = String(defaultValue).replace(/ /g, '');\n    } else {\n      throw Error(`Can not parseNumbersUnits of: ${string}`);\n    }\n  }\n\n  if (numbers.includes('--')) {\n    // -5--4\n    low = Number(numbers.split('--')[0]);\n    high = Number(`-${numbers.split('--')[1]}`);\n  } else if (numbers.startsWith('-')) {\n    // -5 or -1-1 (minus 1 to plus 1)\n    let subparts = numbers.split('-');\n    switch (subparts.length) {\n      case 2:\n        low = Number(numbers);\n        break;\n      case 3:\n        low = Number(`-${subparts[1]}`);\n        high = Number(+subparts[2]);\n        break;\n      default:\n        throw new Error(`Can not parse: ${string}`);\n    }\n  } else {\n    let subparts = numbers.split('-');\n    low = subparts[0] !== '' ? Number(subparts[0]) : undefined;\n    high = subparts[1] !== undefined ? Number(subparts[1]) : undefined;\n  }\n\n  if (!units) units = defaultUnits;\n\n  // Should we convert the units\n  if (targetUnits) {\n    let convert = Qty.swiftConverter(\n      units.replace(/°/g, 'temp'),\n      targetUnits.replace(/°/g, 'temp'),\n    );\n\n    if (low !== undefined) {\n      low = convert(low);\n    }\n    if (high !== undefined) {\n      high = convert(high);\n    }\n    units = targetUnits;\n  }\n\n  return {\n    low,\n    high,\n    units,\n  };\n}\n","import { parseNumbersUnits } from './parseNumbersUnits';\n\n/**\n *\n * @param {String} string\n * @param {object} [options={}]\n * @param {object} [options.temperature={}]\n * @param {string} [options.temperature.defaultUnits]\n * @param {string} [options.temperature.targetUnits]\n * @param {object} [options.pressure={}]\n * @param {number} [options.pressure.defaultValue]\n * @param {string} [options.pressure.defaultUnits]\n * @param {string} [options.pressure.targetUnits]\n * @param {string} [options.pressure.optional]\n */\nexport function parseBoilingPoint(string, options = {}) {\n  let parts = String(string).split(/[@/]|, | at /);\n  return {\n    temperature: parseNumbersUnits(parts[0], options.temperature),\n    pressure: parseNumbersUnits(parts[1], options.pressure),\n  };\n}\n","import { parseNumbersUnits } from './parseNumbersUnits';\n\n/**\n *\n * @param {String} string\n * @param {object} [options={}]\n * @param {object} [options.value={}]\n * @param {string} [options.value.defaultUnits]\n * @param {string} [options.value.targetUnits]\n * @param {object} [options.temperature={}]\n * @param {number} [options.temperature.defaultValue]\n * @param {string} [options.temperature.defaultUnits]\n * @param {string} [options.temperature.targetUnits]\n */\nexport function parseDensity(string, options = {}) {\n  string = String(string);\n  string = string.replace(/\\(.*/, '');\n  string = string.replace('g/cu cm', 'g/cm^3');\n  let parts = String(string).split(/[@]|, | at /);\n\n  let value = parts[0];\n  let temperature = parts[1];\n  if (temperature) {\n    temperature = temperature.replace(/ *t= */, '');\n  }\n\n  return {\n    value: parseNumbersUnits(value, options.value),\n    temperature: parseNumbersUnits(temperature, options.temperature),\n  };\n}\n","import { parseNumbersUnits } from './parseNumbersUnits';\n\n/**\n *\n * @param {String} string\n * @param {object} [options={}]\n * @param {object} [options.value={}]\n * @param {string} [options.value.defaultUnits]\n * @param {string} [options.value.targetUnits]\n * @param {object} [options.temperature={}]\n * @param {number} [options.temperature.defaultValue]\n * @param {string} [options.temperature.defaultUnits]\n * @param {string} [options.temperature.targetUnits]\n */\nexport function parseRefractiveIndex(string, options = {}) {\n  string = String(string).replace(/^[^0-9.]*/, '');\n  let parts = string.split(/at|[@/]|, /);\n\n  let value = parts[0];\n  let temperature = parts[1];\n  if (temperature) {\n    temperature = temperature.replace(/ *t= */, '');\n  }\n\n  return {\n    value: parseNumbersUnits(value, options.value),\n    temperature: parseNumbersUnits(temperature, options.temperature),\n  };\n}\n","import { parseNumbersUnits } from './parseNumbersUnits';\n\n/**\n *\n * @param {String} string\n * @param {object} [options={}]\n * @param {object} [options.temperature={}]\n * @param {string} [options.temperature.defaultUnits]\n * @param {string} [options.temperature.targetUnits]\n * @param {string} [options.pressure.optional]\n * @param {object} [options.pressure={}]\n * @param {string} [options.pressure.defaultUnits]\n * @param {string} [options.pressure.targetUnits]\n\n */\nexport function parseVaporPressure(string, options = {}) {\n  let parts = String(string).split(/[@/]|, | at /);\n  return {\n    pressure: parseNumbersUnits(parts[0], options.pressure),\n    temperature: parseNumbersUnits(parts[1], options.temperature),\n  };\n}\n"],"names":["global","factory","module","exports","this","isString","value","String","isFiniteImpl","Number","isFinite","window","isNumber","identity","uniq","strings","seen","filter","item","hasOwnProperty","compareArray","array1","array2","length","i","assign","target","properties","Object","keys","forEach","key","mulSafe","result","decimals","arguments","arg","getFractional","round","divSafe","num","den","Error","factor","Math","pow","invDen","val","count","QtyError","err","create","prototype","apply","name","message","stack","constructor","throwIncompatibleUnits","left","right","UNITS","PI","BASE_UNITS","UNITY","UNITY_ARRAY","validateUnitDefinition","unitDef","definition","scalar","numerator","denominator","unit","undefined","PREFIX_VALUES","PREFIX_MAP","UNIT_VALUES","UNIT_MAP","OUTPUT_MAP","j","getUnits","kind","units","unitKeys","indexOf","push","substr","getKinds","sort","a","b","toLowerCase","getAliases","unitName","SIGNATURE_VECTOR","unitSignature","signature","vector","unitSignatureVector","call","reduce","previous","current","isBase","toBase","Array","r","n","k","SIGN","INTEGER","SIGNED_INTEGER","FRACTION","FLOAT","EXPONENT","SCI_NUMBER","SIGNED_NUMBER","QTY_STRING","QTY_STRING_REGEX","RegExp","POWER_OP","SAFE_POWER","TOP_REGEX","BOTTOM_REGEX","parse","toString","trim","exec","scalarMatch","replace","parseFloat","top","bottom","x","nx","isNaN","UNIT_TEST_REGEX","test","abs","parseUnits","PREFIX_REGEX","join","UNIT_REGEX","BOUNDARY_REGEX","UNIT_MATCH","UNIT_MATCH_REGEX","parsedUnitsCache","cached","unitMatch","normalizedUnits","slice","map","concat","globalParse","e","isQty","Qty","initValue","initUnits","assertValidConstructorArgs","baseScalar","_conversionCache","isDefinitionObject","updateBaseScalar","isTemperature","base","KINDS","knownSignature","isDegrees","match","subtractTemperatures","lhs","rhs","lhsUnits","rhsConverted","to","dstDegrees","getDegreeUnits","subtractTempDegrees","temp","deg","tempDegrees","addTempDegrees","toDegrees","src","dst","srcDegK","toDegK","dstUnits","dstScalar","qty","q","toTemp","toTempK","other","isCompatible","isInverse","inverse","baseUnitCache","toBaseUnits","mul","toFloat","isUnitless","toPrec","precQuantity","precRoundedResult","swiftConverter","srcUnits","srcQty","dstQty","eq","convert","converter","isArray","add","sub","op1","op2","numdenscale","cleanTerms","div","num1","den1","num2","den2","notUnity","combined","combineTerms","terms","direction","prefix","prefixValue","combinedPrefixValue","scale","prop","compareTo","lt","lte","gt","gte","same","every","_isBase","NestedMap","get","index","childMap","data","set","defaultFormatter","formatter","_units","numIsUnity","denIsUnity","numUnits","stringifyUnits","denUnits","targetUnitsOrMaxDecimalsOrPrec","maxDecimals","targetUnits","out","outScalar","format","targetQty","stringifiedUnitsCache","stringified","isUnity","simplify","getOutputNames","unitNames","token","tokenNext","unitCounts","acc","unitCounter","unitCount","version","parseNumbersUnits","string","options","defaultUnits","defaultValue","optional","normalized","substring","splitter","numbers","low","high","includes","split","startsWith","subparts","parseBoilingPoint","parts","temperature","pressure","parseDensity","parseRefractiveIndex","parseVaporPressure"],"mappings":"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"}