{"version":3,"file":"src-DnNzX48J.mjs","names":["JSBI","_Decimal","Big","_Big","JSBI","_Big","JSBI","JSBI","JSBI","module","BigNumber","JSBI"],"sources":["../../../node_modules/.pnpm/@uniswap+sdk-core@7.13.0/node_modules/@uniswap/sdk-core/dist/esm/src/chains.js","../../../node_modules/.pnpm/@uniswap+sdk-core@7.13.0/node_modules/@uniswap/sdk-core/dist/esm/src/addresses.js","../../../node_modules/.pnpm/jsbi@3.2.5/node_modules/jsbi/dist/jsbi-cjs.js","../../../node_modules/.pnpm/@uniswap+sdk-core@7.13.0/node_modules/@uniswap/sdk-core/dist/esm/src/constants.js","../../../node_modules/.pnpm/tiny-invariant@1.3.3/node_modules/tiny-invariant/dist/esm/tiny-invariant.js","../../../node_modules/.pnpm/decimal.js-light@2.5.1/node_modules/decimal.js-light/decimal.js","../../../node_modules/.pnpm/big.js@5.2.2/node_modules/big.js/big.js","../../../node_modules/.pnpm/toformat@2.0.0/node_modules/toformat/toFormat.js","../../../node_modules/.pnpm/@uniswap+sdk-core@7.13.0/node_modules/@uniswap/sdk-core/dist/esm/src/entities/fractions/fraction.js","../../../node_modules/.pnpm/@uniswap+sdk-core@7.13.0/node_modules/@uniswap/sdk-core/dist/esm/src/entities/fractions/currencyAmount.js","../../../node_modules/.pnpm/@uniswap+sdk-core@7.13.0/node_modules/@uniswap/sdk-core/dist/esm/src/entities/fractions/percent.js","../../../node_modules/.pnpm/@uniswap+sdk-core@7.13.0/node_modules/@uniswap/sdk-core/dist/esm/src/entities/fractions/price.js","../../../node_modules/.pnpm/@uniswap+sdk-core@7.13.0/node_modules/@uniswap/sdk-core/dist/esm/src/entities/baseCurrency.js","../../../node_modules/.pnpm/@uniswap+sdk-core@7.13.0/node_modules/@uniswap/sdk-core/dist/esm/src/entities/nativeCurrency.js","../../../node_modules/.pnpm/bn.js@5.2.3/node_modules/bn.js/lib/bn.js","../../../node_modules/.pnpm/@ethersproject+logger@5.8.0/node_modules/@ethersproject/logger/lib/_version.js","../../../node_modules/.pnpm/@ethersproject+logger@5.8.0/node_modules/@ethersproject/logger/lib/index.js","../../../node_modules/.pnpm/@ethersproject+bytes@5.8.0/node_modules/@ethersproject/bytes/lib/_version.js","../../../node_modules/.pnpm/@ethersproject+bytes@5.8.0/node_modules/@ethersproject/bytes/lib/index.js","../../../node_modules/.pnpm/@ethersproject+bignumber@5.8.0/node_modules/@ethersproject/bignumber/lib/_version.js","../../../node_modules/.pnpm/@ethersproject+bignumber@5.8.0/node_modules/@ethersproject/bignumber/lib/bignumber.js","../../../node_modules/.pnpm/@ethersproject+bignumber@5.8.0/node_modules/@ethersproject/bignumber/lib/fixednumber.js","../../../node_modules/.pnpm/@ethersproject+bignumber@5.8.0/node_modules/@ethersproject/bignumber/lib/index.js","../../../node_modules/.pnpm/js-sha3@0.8.0/node_modules/js-sha3/src/sha3.js","../../../node_modules/.pnpm/@ethersproject+keccak256@5.8.0/node_modules/@ethersproject/keccak256/lib/index.js","../../../node_modules/.pnpm/@ethersproject+rlp@5.8.0/node_modules/@ethersproject/rlp/lib/_version.js","../../../node_modules/.pnpm/@ethersproject+rlp@5.8.0/node_modules/@ethersproject/rlp/lib/index.js","../../../node_modules/.pnpm/@ethersproject+address@5.8.0/node_modules/@ethersproject/address/lib/_version.js","../../../node_modules/.pnpm/@ethersproject+address@5.8.0/node_modules/@ethersproject/address/lib/index.js","../../../node_modules/.pnpm/@uniswap+sdk-core@7.13.0/node_modules/@uniswap/sdk-core/dist/esm/src/utils/validateAndParseAddress.js","../../../node_modules/.pnpm/@uniswap+sdk-core@7.13.0/node_modules/@uniswap/sdk-core/dist/esm/src/entities/token.js","../../../node_modules/.pnpm/@uniswap+sdk-core@7.13.0/node_modules/@uniswap/sdk-core/dist/esm/src/entities/weth9.js","../../../node_modules/.pnpm/@uniswap+sdk-core@7.13.0/node_modules/@uniswap/sdk-core/dist/esm/src/entities/ether.js","../../../node_modules/.pnpm/@uniswap+sdk-core@7.13.0/node_modules/@uniswap/sdk-core/dist/esm/src/utils/computePriceImpact.js","../../../node_modules/.pnpm/@ethersproject+keccak256@5.7.0/node_modules/@ethersproject/keccak256/lib/index.js","../../../node_modules/.pnpm/@ethersproject+constants@5.8.0/node_modules/@ethersproject/constants/lib/addresses.js","../../../node_modules/.pnpm/@ethersproject+constants@5.8.0/node_modules/@ethersproject/constants/lib/bignumbers.js","../../../node_modules/.pnpm/@ethersproject+constants@5.8.0/node_modules/@ethersproject/constants/lib/hashes.js","../../../node_modules/.pnpm/@ethersproject+constants@5.8.0/node_modules/@ethersproject/constants/lib/strings.js","../../../node_modules/.pnpm/@ethersproject+constants@5.8.0/node_modules/@ethersproject/constants/lib/index.js","../../../node_modules/.pnpm/@ethersproject+strings@5.7.0/node_modules/@ethersproject/strings/lib/_version.js","../../../node_modules/.pnpm/@ethersproject+strings@5.7.0/node_modules/@ethersproject/strings/lib/utf8.js","../../../node_modules/.pnpm/@ethersproject+strings@5.7.0/node_modules/@ethersproject/strings/lib/bytes32.js","../../../node_modules/.pnpm/@ethersproject+strings@5.7.0/node_modules/@ethersproject/strings/lib/idna.js","../../../node_modules/.pnpm/@ethersproject+strings@5.7.0/node_modules/@ethersproject/strings/lib/index.js","../../../node_modules/.pnpm/@uniswap+sdk-core@7.13.0/node_modules/@uniswap/sdk-core/dist/esm/src/utils/computeZksyncCreate2Address.js","../../../node_modules/.pnpm/@uniswap+sdk-core@7.13.0/node_modules/@uniswap/sdk-core/dist/esm/src/utils/sortedInsert.js","../../../node_modules/.pnpm/@uniswap+sdk-core@7.13.0/node_modules/@uniswap/sdk-core/dist/esm/src/utils/sqrt.js"],"sourcesContent":["// Supported chain IDs for Uniswap deployments\nexport var ChainId;\n(function (ChainId) {\n    ChainId[ChainId[\"MAINNET\"] = 1] = \"MAINNET\";\n    ChainId[ChainId[\"GOERLI\"] = 5] = \"GOERLI\";\n    ChainId[ChainId[\"SEPOLIA\"] = 11155111] = \"SEPOLIA\";\n    ChainId[ChainId[\"OPTIMISM\"] = 10] = \"OPTIMISM\";\n    ChainId[ChainId[\"OPTIMISM_GOERLI\"] = 420] = \"OPTIMISM_GOERLI\";\n    ChainId[ChainId[\"OPTIMISM_SEPOLIA\"] = 11155420] = \"OPTIMISM_SEPOLIA\";\n    ChainId[ChainId[\"ARBITRUM_ONE\"] = 42161] = \"ARBITRUM_ONE\";\n    ChainId[ChainId[\"ARBITRUM_GOERLI\"] = 421613] = \"ARBITRUM_GOERLI\";\n    ChainId[ChainId[\"ARBITRUM_SEPOLIA\"] = 421614] = \"ARBITRUM_SEPOLIA\";\n    ChainId[ChainId[\"POLYGON\"] = 137] = \"POLYGON\";\n    ChainId[ChainId[\"POLYGON_MUMBAI\"] = 80001] = \"POLYGON_MUMBAI\";\n    ChainId[ChainId[\"CELO\"] = 42220] = \"CELO\";\n    ChainId[ChainId[\"CELO_ALFAJORES\"] = 44787] = \"CELO_ALFAJORES\";\n    ChainId[ChainId[\"GNOSIS\"] = 100] = \"GNOSIS\";\n    ChainId[ChainId[\"MOONBEAM\"] = 1284] = \"MOONBEAM\";\n    ChainId[ChainId[\"BNB\"] = 56] = \"BNB\";\n    ChainId[ChainId[\"AVALANCHE\"] = 43114] = \"AVALANCHE\";\n    ChainId[ChainId[\"BASE_GOERLI\"] = 84531] = \"BASE_GOERLI\";\n    ChainId[ChainId[\"BASE_SEPOLIA\"] = 84532] = \"BASE_SEPOLIA\";\n    ChainId[ChainId[\"BASE\"] = 8453] = \"BASE\";\n    ChainId[ChainId[\"ZORA\"] = 7777777] = \"ZORA\";\n    ChainId[ChainId[\"ZORA_SEPOLIA\"] = 999999999] = \"ZORA_SEPOLIA\";\n    ChainId[ChainId[\"ROOTSTOCK\"] = 30] = \"ROOTSTOCK\";\n    ChainId[ChainId[\"BLAST\"] = 81457] = \"BLAST\";\n    ChainId[ChainId[\"ZKSYNC\"] = 324] = \"ZKSYNC\";\n    ChainId[ChainId[\"WORLDCHAIN\"] = 480] = \"WORLDCHAIN\";\n    ChainId[ChainId[\"UNICHAIN_SEPOLIA\"] = 1301] = \"UNICHAIN_SEPOLIA\";\n    ChainId[ChainId[\"UNICHAIN\"] = 130] = \"UNICHAIN\";\n    ChainId[ChainId[\"MONAD_TESTNET\"] = 10143] = \"MONAD_TESTNET\";\n    ChainId[ChainId[\"SONEIUM\"] = 1868] = \"SONEIUM\";\n    ChainId[ChainId[\"MONAD\"] = 143] = \"MONAD\";\n    ChainId[ChainId[\"XLAYER\"] = 196] = \"XLAYER\";\n    ChainId[ChainId[\"LINEA\"] = 59144] = \"LINEA\";\n    ChainId[ChainId[\"TEMPO\"] = 4217] = \"TEMPO\";\n})(ChainId || (ChainId = {}));\nexport const SUPPORTED_CHAINS = [\n    ChainId.MAINNET,\n    ChainId.OPTIMISM,\n    ChainId.OPTIMISM_GOERLI,\n    ChainId.OPTIMISM_SEPOLIA,\n    ChainId.ARBITRUM_ONE,\n    ChainId.ARBITRUM_GOERLI,\n    ChainId.ARBITRUM_SEPOLIA,\n    ChainId.POLYGON,\n    ChainId.POLYGON_MUMBAI,\n    ChainId.GOERLI,\n    ChainId.SEPOLIA,\n    ChainId.CELO_ALFAJORES,\n    ChainId.CELO,\n    ChainId.BNB,\n    ChainId.AVALANCHE,\n    ChainId.BASE,\n    ChainId.BASE_GOERLI,\n    ChainId.BASE_SEPOLIA,\n    ChainId.ZORA,\n    ChainId.ZORA_SEPOLIA,\n    ChainId.ROOTSTOCK,\n    ChainId.BLAST,\n    ChainId.ZKSYNC,\n    ChainId.WORLDCHAIN,\n    ChainId.UNICHAIN_SEPOLIA,\n    ChainId.UNICHAIN,\n    ChainId.MONAD_TESTNET,\n    ChainId.SONEIUM,\n    ChainId.MONAD,\n    ChainId.XLAYER,\n    ChainId.LINEA,\n    ChainId.TEMPO,\n];\nexport var NativeCurrencyName;\n(function (NativeCurrencyName) {\n    // Strings match input for CLI\n    NativeCurrencyName[\"ETHER\"] = \"ETH\";\n    NativeCurrencyName[\"MATIC\"] = \"MATIC\";\n    NativeCurrencyName[\"CELO\"] = \"CELO\";\n    NativeCurrencyName[\"GNOSIS\"] = \"XDAI\";\n    NativeCurrencyName[\"MOONBEAM\"] = \"GLMR\";\n    NativeCurrencyName[\"BNB\"] = \"BNB\";\n    NativeCurrencyName[\"AVAX\"] = \"AVAX\";\n    NativeCurrencyName[\"ROOTSTOCK\"] = \"RBTC\";\n})(NativeCurrencyName || (NativeCurrencyName = {}));\n//# sourceMappingURL=chains.js.map","import { ChainId, SUPPORTED_CHAINS } from './chains';\nconst DEFAULT_NETWORKS = [ChainId.MAINNET, ChainId.GOERLI, ChainId.SEPOLIA];\nfunction constructSameAddressMap(address, additionalNetworks = []) {\n    return DEFAULT_NETWORKS.concat(additionalNetworks).reduce((memo, chainId) => {\n        memo[chainId] = address;\n        return memo;\n    }, {});\n}\nexport const UNI_ADDRESSES = constructSameAddressMap('0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984', [\n    ChainId.OPTIMISM,\n    ChainId.ARBITRUM_ONE,\n    ChainId.POLYGON,\n    ChainId.POLYGON_MUMBAI,\n    ChainId.SEPOLIA,\n]);\nexport const UNISWAP_NFT_AIRDROP_CLAIM_ADDRESS = '0x8B799381ac40b838BBA4131ffB26197C432AFe78';\n/**\n * @deprecated use V2_FACTORY_ADDRESSES instead\n */\nexport const V2_FACTORY_ADDRESS = '0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f';\nexport const V2_FACTORY_ADDRESSES = {\n    [ChainId.MAINNET]: '0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f',\n    [ChainId.GOERLI]: '0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f',\n    [ChainId.SEPOLIA]: '0xF62c03E08ada871A0bEb309762E260a7a6a880E6',\n    [ChainId.OPTIMISM]: '0x0c3c1c532F1e39EdF36BE9Fe0bE1410313E074Bf',\n    [ChainId.ARBITRUM_ONE]: '0xf1D7CC64Fb4452F05c498126312eBE29f30Fbcf9',\n    [ChainId.AVALANCHE]: '0x9e5A52f57b3038F1B8EeE45F28b3C1967e22799C',\n    [ChainId.BASE_SEPOLIA]: '0x7Ae58f10f7849cA6F5fB71b7f45CB416c9204b1e',\n    [ChainId.BASE]: '0x8909dc15e40173ff4699343b6eb8132c65e18ec6',\n    [ChainId.BNB]: '0x8909Dc15e40173Ff4699343b6eB8132c65e18eC6',\n    [ChainId.POLYGON]: '0x9e5A52f57b3038F1B8EeE45F28b3C1967e22799C',\n    [ChainId.CELO]: '0x79a530c8e2fA8748B7B40dd3629C0520c2cCf03f',\n    [ChainId.BLAST]: '0x5C346464d33F90bABaf70dB6388507CC889C1070',\n    [ChainId.WORLDCHAIN]: '0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f',\n    [ChainId.UNICHAIN_SEPOLIA]: '0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f',\n    [ChainId.UNICHAIN]: '0x1f98400000000000000000000000000000000002',\n    [ChainId.MONAD_TESTNET]: '0x733e88f248b742db6c14c0b1713af5ad7fdd59d0',\n    [ChainId.SONEIUM]: '0x97febbc2adbd5644ba22736e962564b23f5828ce',\n    [ChainId.MONAD]: '0x182a927119d56008d921126764bf884221b10f59',\n    [ChainId.XLAYER]: '0xdf38f24fe153761634be942f9d859f3dba857e95',\n    [ChainId.LINEA]: '0x114A43DF6C5f54EBB8A9d70Cd1951D3dD68004c7',\n    [ChainId.TEMPO]: '0xf9ec577a4e45b5278bb7cf60fcbc20c3acaef68f',\n};\n/**\n * @deprecated use V2_ROUTER_ADDRESSES instead\n */\nexport const V2_ROUTER_ADDRESS = '0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D';\nexport const V2_ROUTER_ADDRESSES = {\n    [ChainId.MAINNET]: '0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D',\n    [ChainId.GOERLI]: '0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D',\n    [ChainId.SEPOLIA]: '0xeE567Fe1712Faf6149d80dA1E6934E354124CfE3',\n    [ChainId.ARBITRUM_ONE]: '0x4752ba5dbc23f44d87826276bf6fd6b1c372ad24',\n    [ChainId.OPTIMISM]: '0x4a7b5da61326a6379179b40d00f57e5bbdc962c2',\n    [ChainId.BASE_SEPOLIA]: '0x1689E7B1F10000AE47eBfE339a4f69dECd19F602',\n    [ChainId.BASE]: '0x4752ba5dbc23f44d87826276bf6fd6b1c372ad24',\n    [ChainId.AVALANCHE]: '0x4752ba5dbc23f44d87826276bf6fd6b1c372ad24',\n    [ChainId.BNB]: '0x4752ba5dbc23f44d87826276bf6fd6b1c372ad24',\n    [ChainId.POLYGON]: '0xedf6066a2b290c185783862c7f4776a2c8077ad1',\n    [ChainId.BLAST]: '0xBB66Eb1c5e875933D44DAe661dbD80e5D9B03035',\n    [ChainId.WORLDCHAIN]: '0x541aB7c31A119441eF3575F6973277DE0eF460bd',\n    [ChainId.UNICHAIN_SEPOLIA]: '0x920b806E40A00E02E7D2b94fFc89860fDaEd3640',\n    [ChainId.UNICHAIN]: '0x284f11109359a7e1306c3e447ef14d38400063ff',\n    [ChainId.MONAD_TESTNET]: '0xfb8e1c3b833f9e67a71c859a132cf783b645e436',\n    [ChainId.SONEIUM]: '0x273f68c234fa55b550b40e563c4a488e0d334320',\n    [ChainId.MONAD]: '0x4b2ab38dbf28d31d467aa8993f6c2585981d6804',\n    [ChainId.XLAYER]: '0x182a927119d56008d921126764bf884221b10f59',\n    [ChainId.LINEA]: '0x8702463e73f74d0b6765abceb314ef07acb92650',\n    [ChainId.TEMPO]: '0x0fbac3c46f6f83b44c7fb4ea986d7309c701d73e',\n};\n// Networks that share most of the same addresses i.e. Mainnet, Goerli, Optimism, Arbitrum, Polygon\nconst DEFAULT_ADDRESSES = {\n    v3CoreFactoryAddress: '0x1F98431c8aD98523631AE4a59f267346ea31F984',\n    multicallAddress: '0x1F98415757620B543A52E61c46B32eB19261F984',\n    quoterAddress: '0xb27308f9F90D607463bb33eA1BeBb41C27CE5AB6',\n    v3MigratorAddress: '0xA5644E29708357803b5A882D272c41cC0dF92B34',\n    nonfungiblePositionManagerAddress: '0xC36442b4a4522E871399CD717aBDD847Ab11FE88',\n};\nconst MAINNET_ADDRESSES = {\n    ...DEFAULT_ADDRESSES,\n    mixedRouteQuoterV1Address: '0x84E44095eeBfEC7793Cd7d5b57B7e401D7f1cA2E',\n    v4PoolManagerAddress: '0x000000000004444c5dc75cB358380D2e3dE08A90',\n    v4PositionManagerAddress: '0xbd216513d74c8cf14cf4747e6aaa6420ff64ee9e',\n    v4StateView: '0x7ffe42c4a5deea5b0fec41c94c136cf115597227',\n    v4QuoterAddress: '0x52f0e24d1c21c8a0cb1e5a5dd6198556bd9e1203',\n};\nconst GOERLI_ADDRESSES = {\n    ...DEFAULT_ADDRESSES,\n    mixedRouteQuoterV1Address: '0xBa60b6e6fF25488308789E6e0A65D838be34194e',\n};\nconst OPTIMISM_ADDRESSES = {\n    ...DEFAULT_ADDRESSES,\n    v4PoolManagerAddress: '0x9a13f98cb987694c9f086b1f5eb990eea8264ec3',\n    v4PositionManagerAddress: '0x3c3ea4b57a46241e54610e5f022e5c45859a1017',\n    v4StateView: '0xc18a3169788f4f75a170290584eca6395c75ecdb',\n    v4QuoterAddress: '0x1f3131a13296fb91c90870043742c3cdbff1a8d7',\n};\nconst ARBITRUM_ONE_ADDRESSES = {\n    ...DEFAULT_ADDRESSES,\n    multicallAddress: '0xadF885960B47eA2CD9B55E6DAc6B42b7Cb2806dB',\n    tickLensAddress: '0xbfd8137f7d1516D3ea5cA83523914859ec47F573',\n    v4PoolManagerAddress: '0x360e68faccca8ca495c1b759fd9eee466db9fb32',\n    v4PositionManagerAddress: '0xd88f38f930b7952f2db2432cb002e7abbf3dd869',\n    v4StateView: '0x76fd297e2d437cd7f76d50f01afe6160f86e9990',\n    v4QuoterAddress: '0x3972c00f7ed4885e145823eb7c655375d275a1c5',\n};\nconst POLYGON_ADDRESSES = {\n    ...DEFAULT_ADDRESSES,\n    v4PoolManagerAddress: '0x67366782805870060151383f4bbff9dab53e5cd6',\n    v4PositionManagerAddress: '0x1ec2ebf4f37e7363fdfe3551602425af0b3ceef9',\n    v4StateView: '0x5ea1bd7974c8a611cbab0bdcafcb1d9cc9b3ba5a',\n    v4QuoterAddress: '0xb3d5c3dfc3a7aebff71895a7191796bffc2c81b9',\n};\n// celo v3 and v4 addresses\nconst CELO_ADDRESSES = {\n    v3CoreFactoryAddress: '0xAfE208a311B21f13EF87E33A90049fC17A7acDEc',\n    multicallAddress: '0x633987602DE5C4F337e3DbF265303A1080324204',\n    quoterAddress: '0x82825d0554fA07f7FC52Ab63c961F330fdEFa8E8',\n    v3MigratorAddress: '0x3cFd4d48EDfDCC53D3f173F596f621064614C582',\n    nonfungiblePositionManagerAddress: '0x3d79EdAaBC0EaB6F08ED885C05Fc0B014290D95A',\n    tickLensAddress: '0x5f115D9113F88e0a0Db1b5033D90D4a9690AcD3D',\n    v4PoolManagerAddress: '0x288dc841A52FCA2707c6947B3A777c5E56cd87BC',\n    v4PositionManagerAddress: '0xf7965f3981e4d5bc383bfbcb61501763e9068ca9',\n    v4StateView: '0xbc21f8720babf4b20d195ee5c6e99c52b76f2bfb',\n    v4QuoterAddress: '0x28566da1093609182dff2cb2a91cfd72e61d66cd',\n};\n// BNB v3 addresses\nconst BNB_ADDRESSES = {\n    v3CoreFactoryAddress: '0xdB1d10011AD0Ff90774D0C6Bb92e5C5c8b4461F7',\n    multicallAddress: '0x963Df249eD09c358A4819E39d9Cd5736c3087184',\n    quoterAddress: '0x78D78E420Da98ad378D7799bE8f4AF69033EB077',\n    v3MigratorAddress: '0x32681814957e0C13117ddc0c2aba232b5c9e760f',\n    nonfungiblePositionManagerAddress: '0x7b8A01B39D58278b5DE7e48c8449c9f4F5170613',\n    tickLensAddress: '0xD9270014D396281579760619CCf4c3af0501A47C',\n    swapRouter02Address: '0xB971eF87ede563556b2ED4b1C0b0019111Dd85d2',\n    v4PoolManagerAddress: '0x28e2ea090877bf75740558f6bfb36a5ffee9e9df',\n    v4PositionManagerAddress: '0x7a4a5c919ae2541aed11041a1aeee68f1287f95b',\n    v4StateView: '0xd13dd3d6e93f276fafc9db9e6bb47c1180aee0c4',\n    v4QuoterAddress: '0x9f75dd27d6664c475b90e105573e550ff69437b0',\n};\n// optimism goerli addresses\nconst OPTIMISM_GOERLI_ADDRESSES = {\n    v3CoreFactoryAddress: '0xB656dA17129e7EB733A557f4EBc57B76CFbB5d10',\n    multicallAddress: '0x07F2D8a2a02251B62af965f22fC4744A5f96BCCd',\n    quoterAddress: '0x9569CbA925c8ca2248772A9A4976A516743A246F',\n    v3MigratorAddress: '0xf6c55fBe84B1C8c3283533c53F51bC32F5C7Aba8',\n    nonfungiblePositionManagerAddress: '0x39Ca85Af2F383190cBf7d7c41ED9202D27426EF6',\n    tickLensAddress: '0xe6140Bd164b63E8BfCfc40D5dF952f83e171758e',\n};\n// optimism sepolia addresses\nconst OPTIMISM_SEPOLIA_ADDRESSES = {\n    v3CoreFactoryAddress: '0x8CE191193D15ea94e11d327b4c7ad8bbE520f6aF',\n    multicallAddress: '0x80e4e06841bb76AA9735E0448cB8d003C0EF009a',\n    quoterAddress: '0x0FBEa6cf957d95ee9313490050F6A0DA68039404',\n    v3MigratorAddress: '0xE7EcbAAaA54D007A00dbb6c1d2f150066D69dA07',\n    nonfungiblePositionManagerAddress: '0xdA75cEf1C93078e8b736FCA5D5a30adb97C8957d',\n    tickLensAddress: '0xCb7f54747F58F8944973cea5b8f4ac2209BadDC5',\n    swapRouter02Address: '0x94cC0AaC535CCDB3C01d6787D6413C739ae12bc4',\n};\n// arbitrum goerli v3 addresses\nconst ARBITRUM_GOERLI_ADDRESSES = {\n    v3CoreFactoryAddress: '0x4893376342d5D7b3e31d4184c08b265e5aB2A3f6',\n    multicallAddress: '0x8260CB40247290317a4c062F3542622367F206Ee',\n    quoterAddress: '0x1dd92b83591781D0C6d98d07391eea4b9a6008FA',\n    v3MigratorAddress: '0xA815919D2584Ac3F76ea9CB62E6Fd40a43BCe0C3',\n    nonfungiblePositionManagerAddress: '0x622e4726a167799826d1E1D150b076A7725f5D81',\n    tickLensAddress: '0xb52429333da969a0C79a60930a4Bf0020E5D1DE8',\n};\n// arbitrum sepolia v3 addresses\nconst ARBITRUM_SEPOLIA_ADDRESSES = {\n    v3CoreFactoryAddress: '0x248AB79Bbb9bC29bB72f7Cd42F17e054Fc40188e',\n    multicallAddress: '0x2B718b475e385eD29F56775a66aAB1F5cC6B2A0A',\n    quoterAddress: '0x2779a0CC1c3e0E44D2542EC3e79e3864Ae93Ef0B',\n    v3MigratorAddress: '0x398f43ef2c67B941147157DA1c5a868E906E043D',\n    nonfungiblePositionManagerAddress: '0x6b2937Bde17889EDCf8fbD8dE31C3C2a70Bc4d65',\n    tickLensAddress: '0x0fd18587734e5C2dcE2dccDcC7DD1EC89ba557d9',\n    swapRouter02Address: '0x101F443B4d1b059569D643917553c771E1b9663E',\n    v4PoolManagerAddress: '0xFB3e0C6F74eB1a21CC1Da29aeC80D2Dfe6C9a317',\n    v4PositionManagerAddress: '0xAc631556d3d4019C95769033B5E719dD77124BAc',\n    v4StateView: '0x9d467fa9062b6e9b1a46e26007ad82db116c67cb',\n    v4QuoterAddress: '0x7de51022d70a725b508085468052e25e22b5c4c9',\n};\n// sepolia v3 addresses\nconst SEPOLIA_ADDRESSES = {\n    v3CoreFactoryAddress: '0x0227628f3F023bb0B980b67D528571c95c6DaC1c',\n    multicallAddress: '0xD7F33bCdb21b359c8ee6F0251d30E94832baAd07',\n    quoterAddress: '0xEd1f6473345F45b75F8179591dd5bA1888cf2FB3',\n    v3MigratorAddress: '0x729004182cF005CEC8Bd85df140094b6aCbe8b15',\n    nonfungiblePositionManagerAddress: '0x1238536071E1c677A632429e3655c799b22cDA52',\n    tickLensAddress: '0xd7f33bcdb21b359c8ee6f0251d30e94832baad07',\n    swapRouter02Address: '0x3bFA4769FB09eefC5a80d6E87c3B9C650f7Ae48E',\n    // TODO: update mixedRouteQuoterV2Address once v4 on sepolia redeployed\n    mixedRouteQuoterV2Address: '0x4745f77b56a0e2294426e3936dc4fab68d9543cd',\n    // TODO: update all below once v4 on sepolia redeployed\n    v4PoolManagerAddress: '0xE03A1074c86CFeDd5C142C4F04F1a1536e203543',\n    v4PositionManagerAddress: '0x429ba70129df741B2Ca2a85BC3A2a3328e5c09b4',\n    v4StateView: '0xe1dd9c3fa50edb962e442f60dfbc432e24537e4c',\n    v4QuoterAddress: '0x61b3f2011a92d183c7dbadbda940a7555ccf9227',\n};\n// Avalanche v3 addresses\nconst AVALANCHE_ADDRESSES = {\n    v3CoreFactoryAddress: '0x740b1c1de25031C31FF4fC9A62f554A55cdC1baD',\n    multicallAddress: '0x0139141Cd4Ee88dF3Cdb65881D411bAE271Ef0C2',\n    quoterAddress: '0xbe0F5544EC67e9B3b2D979aaA43f18Fd87E6257F',\n    v3MigratorAddress: '0x44f5f1f5E452ea8d29C890E8F6e893fC0f1f0f97',\n    nonfungiblePositionManagerAddress: '0x655C406EBFa14EE2006250925e54ec43AD184f8B',\n    tickLensAddress: '0xEB9fFC8bf81b4fFd11fb6A63a6B0f098c6e21950',\n    swapRouter02Address: '0xbb00FF08d01D300023C629E8fFfFcb65A5a578cE',\n    v4PoolManagerAddress: '0x06380c0e0912312b5150364b9dc4542ba0dbbc85',\n    v4PositionManagerAddress: '0xb74b1f14d2754acfcbbe1a221023a5cf50ab8acd',\n    v4StateView: '0xc3c9e198c735a4b97e3e683f391ccbdd60b69286',\n    v4QuoterAddress: '0xbe40675bb704506a3c2ccfb762dcfd1e979845c2',\n};\nconst BASE_ADDRESSES = {\n    v3CoreFactoryAddress: '0x33128a8fC17869897dcE68Ed026d694621f6FDfD',\n    multicallAddress: '0x091e99cb1C49331a94dD62755D168E941AbD0693',\n    quoterAddress: '0x3d4e44Eb1374240CE5F1B871ab261CD16335B76a',\n    v3MigratorAddress: '0x23cF10b1ee3AdfCA73B0eF17C07F7577e7ACd2d7',\n    nonfungiblePositionManagerAddress: '0x03a520b32C04BF3bEEf7BEb72E919cf822Ed34f1',\n    tickLensAddress: '0x0CdeE061c75D43c82520eD998C23ac2991c9ac6d',\n    swapRouter02Address: '0x2626664c2603336E57B271c5C0b26F421741e481',\n    mixedRouteQuoterV1Address: '0xe544efae946f0008ae9a8d64493efa7886b73776',\n    v4PoolManagerAddress: '0x498581ff718922c3f8e6a244956af099b2652b2b',\n    v4PositionManagerAddress: '0x7c5f5a4bbd8fd63184577525326123b519429bdc',\n    v4StateView: '0xa3c0c9b65bad0b08107aa264b0f3db444b867a71',\n    v4QuoterAddress: '0x0d5e0f971ed27fbff6c2837bf31316121532048d',\n};\n// Base Goerli v3 addresses\nconst BASE_GOERLI_ADDRESSES = {\n    v3CoreFactoryAddress: '0x9323c1d6D800ed51Bd7C6B216cfBec678B7d0BC2',\n    multicallAddress: '0xB206027a9E0E13F05eBEFa5D2402Bab3eA716439',\n    quoterAddress: '0xedf539058e28E5937dAef3f69cEd0b25fbE66Ae9',\n    v3MigratorAddress: '0x3efe5d02a04b7351D671Db7008ec6eBA9AD9e3aE',\n    nonfungiblePositionManagerAddress: '0x3c61369ef0D1D2AFa70d8feC2F31C5D6Ce134F30',\n    tickLensAddress: '0x1acB873Ee909D0c98adB18e4474943249F931b92',\n    swapRouter02Address: '0x8357227D4eDc78991Db6FDB9bD6ADE250536dE1d',\n};\n// Base Sepolia v3 addresses\nconst BASE_SEPOLIA_ADDRESSES = {\n    v3CoreFactoryAddress: '0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24',\n    multicallAddress: '0xd867e273eAbD6c853fCd0Ca0bFB6a3aE6491d2C1',\n    quoterAddress: '0xC5290058841028F1614F3A6F0F5816cAd0df5E27',\n    v3MigratorAddress: '0xCbf8b7f80800bd4888Fbc7bf1713B80FE4E23E10',\n    nonfungiblePositionManagerAddress: '0x27F971cb582BF9E50F397e4d29a5C7A34f11faA2',\n    tickLensAddress: '0xedf6066a2b290C185783862C7F4776A2C8077AD1',\n    swapRouter02Address: '0x94cC0AaC535CCDB3C01d6787D6413C739ae12bc4',\n    // v4\n    v4PoolManagerAddress: '0x05E73354cFDd6745C338b50BcFDfA3Aa6fA03408',\n    v4PositionManagerAddress: '0x4b2c77d209d3405f41a037ec6c77f7f5b8e2ca80',\n    v4StateView: '0x571291b572ed32ce6751a2cb2486ebee8defb9b4',\n    v4QuoterAddress: '0x4a6513c898fe1b2d0e78d3b0e0a4a151589b1cba',\n};\nconst ZORA_ADDRESSES = {\n    v3CoreFactoryAddress: '0x7145F8aeef1f6510E92164038E1B6F8cB2c42Cbb',\n    multicallAddress: '0xA51c76bEE6746cB487a7e9312E43e2b8f4A37C15',\n    quoterAddress: '0x11867e1b3348F3ce4FcC170BC5af3d23E07E64Df',\n    v3MigratorAddress: '0x048352d8dCF13686982C799da63fA6426a9D0b60',\n    nonfungiblePositionManagerAddress: '0xbC91e8DfA3fF18De43853372A3d7dfe585137D78',\n    tickLensAddress: '0x209AAda09D74Ad3B8D0E92910Eaf85D2357e3044',\n    swapRouter02Address: '0x7De04c96BE5159c3b5CeffC82aa176dc81281557',\n    v4PoolManagerAddress: '0x0575338e4c17006ae181b47900a84404247ca30f',\n    v4PositionManagerAddress: '0xf66c7b99e2040f0d9b326b3b7c152e9663543d63',\n    v4StateView: '0x385785af07d63b50d0a0ea57c4ff89d06adf7328',\n    v4QuoterAddress: '0x5edaccc0660e0a2c44b06e07ce8b915e625dc2c6',\n};\nconst ZORA_SEPOLIA_ADDRESSES = {\n    v3CoreFactoryAddress: '0x4324A677D74764f46f33ED447964252441aA8Db6',\n    multicallAddress: '0xA1E7e3A69671C4494EC59Dbd442de930a93F911A',\n    quoterAddress: '0xC195976fEF0985886E37036E2DF62bF371E12Df0',\n    v3MigratorAddress: '0x65ef259b31bf1d977c37e9434658694267674897',\n    nonfungiblePositionManagerAddress: '0xB8458EaAe43292e3c1F7994EFd016bd653d23c20',\n    tickLensAddress: '0x23C0F71877a1Fc4e20A78018f9831365c85f3064',\n};\nconst ROOTSTOCK_ADDRESSES = {\n    v3CoreFactoryAddress: '0xaF37EC98A00FD63689CF3060BF3B6784E00caD82',\n    multicallAddress: '0x996a9858cDfa45Ad68E47c9A30a7201E29c6a386',\n    quoterAddress: '0xb51727c996C68E60F598A923a5006853cd2fEB31',\n    v3MigratorAddress: '0x16678977CA4ec3DAD5efc7b15780295FE5f56162',\n    nonfungiblePositionManagerAddress: '0x9d9386c042F194B460Ec424a1e57ACDE25f5C4b1',\n    tickLensAddress: '0x55B9dF5bF68ADe972191a91980459f48ecA16afC',\n    swapRouter02Address: '0x0B14ff67f0014046b4b99057Aec4509640b3947A',\n};\nconst BLAST_ADDRESSES = {\n    v3CoreFactoryAddress: '0x792edAdE80af5fC680d96a2eD80A44247D2Cf6Fd',\n    multicallAddress: '0xdC7f370de7631cE9e2c2e1DCDA6B3B5744Cf4705',\n    quoterAddress: '0x6Cdcd65e03c1CEc3730AeeCd45bc140D57A25C77',\n    v3MigratorAddress: '0x15CA7043CD84C5D21Ae76Ba0A1A967d42c40ecE0',\n    nonfungiblePositionManagerAddress: '0xB218e4f7cF0533d4696fDfC419A0023D33345F28',\n    tickLensAddress: '0x2E95185bCdD928a3e984B7e2D6560Ab1b17d7274',\n    swapRouter02Address: '0x549FEB8c9bd4c12Ad2AB27022dA12492aC452B66',\n    v4PoolManagerAddress: '0x1631559198a9e474033433b2958dabc135ab6446',\n    v4PositionManagerAddress: '0x4ad2f4cca2682cbb5b950d660dd458a1d3f1baad',\n    v4StateView: '0x12a88ae16f46dce4e8b15368008ab3380885df30',\n    v4QuoterAddress: '0x6f71cdcb0d119ff72c6eb501abceb576fbf62bcf',\n};\nconst ZKSYNC_ADDRESSES = {\n    v3CoreFactoryAddress: '0x8FdA5a7a8dCA67BBcDd10F02Fa0649A937215422',\n    multicallAddress: '0x0c68a7C72f074d1c45C16d41fa74eEbC6D16a65C',\n    quoterAddress: '0x8Cb537fc92E26d8EBBb760E632c95484b6Ea3e28',\n    v3MigratorAddress: '0x611841b24E43C4ACfd290B427a3D6cf1A59dac8E',\n    nonfungiblePositionManagerAddress: '0x0616e5762c1E7Dc3723c50663dF10a162D690a86',\n    tickLensAddress: '0xe10FF11b809f8EE07b056B452c3B2caa7FE24f89',\n    swapRouter02Address: '0x99c56385daBCE3E81d8499d0b8d0257aBC07E8A3',\n};\nconst WORLDCHAIN_ADDRESSES = {\n    v3CoreFactoryAddress: '0x7a5028BDa40e7B173C278C5342087826455ea25a',\n    multicallAddress: '0x0a22c04215c97E3F532F4eF30e0aD9458792dAB9',\n    quoterAddress: '0x10158D43e6cc414deE1Bd1eB0EfC6a5cBCfF244c',\n    v3MigratorAddress: '0x9EBDdCBa71C9027E1eB45135672a30bcFEec9de3',\n    nonfungiblePositionManagerAddress: '0xec12a9F9a09f50550686363766Cc153D03c27b5e',\n    tickLensAddress: '0xE61df0CaC9d85876aCE5E3037005D80943570623',\n    swapRouter02Address: '0x091AD9e2e6e5eD44c1c66dB50e49A601F9f36cF6',\n    v4PoolManagerAddress: '0xb1860d529182ac3bc1f51fa2abd56662b7d13f33',\n    v4PositionManagerAddress: '0xc585e0f504613b5fbf874f21af14c65260fb41fa',\n    v4StateView: '0x51d394718bc09297262e368c1a481217fdeb71eb',\n    v4QuoterAddress: '0x55d235b3ff2daf7c3ede0defc9521f1d6fe6c5c0',\n};\nconst UNICHAIN_SEPOLIA_ADDRESSES = {\n    v3CoreFactoryAddress: '0x1F98431c8aD98523631AE4a59f267346ea31F984',\n    multicallAddress: '0x9D0F15f2cf58655fDDcD1EE6129C547fDaeD01b1',\n    quoterAddress: '0x6Dd37329A1A225a6Fca658265D460423DCafBF89',\n    v3MigratorAddress: '0xb5FA244C9d6D04B2FBac84418b3c4910ED1Ae5f2',\n    nonfungiblePositionManagerAddress: '0xB7F724d6dDDFd008eFf5cc2834edDE5F9eF0d075',\n    tickLensAddress: '0x5f739c790a48E97eec0efb81bab5D152c0A0ecA0',\n    swapRouter02Address: '0xd1AAE39293221B77B0C71fBD6dCb7Ea29Bb5B166',\n    v4PoolManagerAddress: '0x00b036b58a818b1bc34d502d3fe730db729e62ac',\n    v4PositionManagerAddress: '0xf969aee60879c54baaed9f3ed26147db216fd664',\n    v4StateView: '0xc199f1072a74d4e905aba1a84d9a45e2546b6222',\n    v4QuoterAddress: '0x56dcd40a3f2d466f48e7f48bdbe5cc9b92ae4472',\n};\nconst UNICHAIN_ADDRESSES = {\n    v3CoreFactoryAddress: '0x1f98400000000000000000000000000000000003',\n    multicallAddress: '0xb7610f9b733e7d45184be3a1bc966960ccc54f0b',\n    quoterAddress: '0x565ac8c7863d9bb16d07e809ff49fe5cd467634c',\n    v3MigratorAddress: '0xb9d0c246f306b1aaf02ae6ba112d5ef25e5b60dc',\n    nonfungiblePositionManagerAddress: '0x943e6e07a7e8e791dafc44083e54041d743c46e9',\n    tickLensAddress: '0xd5d76fa166ab8d8ad4c9f61aaa81457b66cbe443',\n    swapRouter02Address: '0x73855d06de49d0fe4a9c42636ba96c62da12ff9c',\n    v4PoolManagerAddress: '0x1f98400000000000000000000000000000000004',\n    v4PositionManagerAddress: '0x4529a01c7a0410167c5740c487a8de60232617bf',\n    v4StateView: '0x86e8631a016f9068c3f085faf484ee3f5fdee8f2',\n    v4QuoterAddress: '0x333e3c607b141b18ff6de9f258db6e77fe7491e0',\n};\nconst MONAD_TESTNET_ADDRESSES = {\n    v3CoreFactoryAddress: '0x961235a9020b05c44df1026d956d1f4d78014276',\n    multicallAddress: '0xa707ceb989cc3728551ed0e6e44b718dd114cf44',\n    quoterAddress: '0x1ba215c17565de7b0cb7ecab971bcf540c24a862',\n    v3MigratorAddress: '0x0a78348b71f8ae8caff2f8f9d4d74a2f36516661',\n    nonfungiblePositionManagerAddress: '0x3dcc735c74f10fe2b9db2bb55c40fbbbf24490f7',\n    tickLensAddress: '0x337478eb6058455ecb3696184b30dd6a29e3a893',\n    swapRouter02Address: '0x4c4eabd5fb1d1a7234a48692551eaecff8194ca7',\n};\nconst MONAD_ADDRESSES = {\n    v3CoreFactoryAddress: '0x204faca1764b154221e35c0d20abb3c525710498',\n    multicallAddress: '0xd1b797d92d87b688193a2b976efc8d577d204343',\n    quoterAddress: '0x2d01411773c8c24805306e89a41f7855c3c4fe65',\n    v3MigratorAddress: '0x7078c4537c04c2b2e52ddba06074dbdacf23ca15',\n    nonfungiblePositionManagerAddress: '0x7197e214c0b767cfb76fb734ab638e2c192f4e53',\n    tickLensAddress: '0xf025e0fe9e331a0ef05c2ad3c4e9c64b625cda6f',\n    swapRouter02Address: '0xfe31f71c1b106eac32f1a19239c9a9a72ddfb900',\n    // v4\n    v4PoolManagerAddress: '0x188d586ddcf52439676ca21a244753fa19f9ea8e',\n    v4PositionManagerAddress: '0x5b7ec4a94ff9bedb700fb82ab09d5846972f4016',\n    v4StateView: '0x77395f3b2e73ae90843717371294fa97cc419d64',\n    v4QuoterAddress: '0xa222dd357a9076d1091ed6aa2e16c9742dd26891',\n};\nconst SONEIUM_ADDRESSES = {\n    v3CoreFactoryAddress: '0x42ae7ec7ff020412639d443e245d936429fbe717',\n    multicallAddress: '0x8ad5ef2f2508288d2de66f04dd883ad5f4ef62b2',\n    quoterAddress: '0x3e6c707d0125226ff60f291b6bd1404634f00aba',\n    v3MigratorAddress: '0xa107580f73bd797bd8b87ff24e98346d99f93ddb',\n    nonfungiblePositionManagerAddress: '0x56c1205b0244332011c1e866f4ea5384eb6bfa2c',\n    tickLensAddress: '0xcd08eefb928c86499e6235ac155906bb7c4dc41a',\n    swapRouter02Address: '0x7e40db01736f88464e5f4e42394f3d5bbb6705b9',\n    v4PoolManagerAddress: '0x360e68faccca8ca495c1b759fd9eee466db9fb32',\n    v4PositionManagerAddress: '0x1b35d13a2e2528f192637f14b05f0dc0e7deb566',\n    v4StateView: '0x76fd297e2d437cd7f76d50f01afe6160f86e9990',\n    v4QuoterAddress: '0x3972c00f7ed4885e145823eb7c655375d275a1c5',\n};\nconst XLAYER_ADDRESSES = {\n    v3CoreFactoryAddress: '0x4b2ab38dbf28d31d467aa8993f6c2585981d6804',\n    multicallAddress: '0xe2023f3fa515cf070e07fd9d51c1d236e07843f4',\n    quoterAddress: '0x976183ac3d09840d243a88c0268badb3b3e3259f',\n    v3MigratorAddress: '0x7197e214c0b767cfb76fb734ab638e2c192f4e53',\n    nonfungiblePositionManagerAddress: '0x315e413a11ab0df498ef83873012430ca36638ae',\n    tickLensAddress: '0x661e93cca42afacb172121ef892830ca3b70f08d',\n    swapRouter02Address: '0x4f0c28f5926afda16bf2506d5d9e57ea190f9bca',\n    mixedRouteQuoterV2Address: '0x2d01411773c8c24805306e89a41f7855c3c4fe65',\n    v4PoolManagerAddress: '0x360e68faccca8ca495c1b759fd9eee466db9fb32',\n    v4PositionManagerAddress: '0xcF1EAFC6928dC385A342E7C6491d371d2871458b',\n    v4StateView: '0x76fd297e2d437cd7f76d50f01afe6160f86e9990',\n    v4QuoterAddress: '0x8928074ca1b241d8ec02815881c1af11e8bc5219',\n};\nconst LINEA_ADDRESSES = {\n    v3CoreFactoryAddress: '0x31FAfd4889FA1269F7a13A66eE0fB458f27D72A9',\n    multicallAddress: '0x93e253D101519578A8DF0BCe2A43D8292BFb3A1F',\n    quoterAddress: '0x58ead433ea99708604c4dd7c9b7e80c70976e202',\n    v3MigratorAddress: '0x03a520b32C04BF3bEEf7BEb72E919cf822Ed34f1',\n    nonfungiblePositionManagerAddress: '0x4615C383F85D0a2BbED973d83ccecf5CB7121463',\n    tickLensAddress: '0x3334d83e224aF5ef9C2E7DDA7c7C98Efd9621fA9',\n    swapRouter02Address: '0x3d4e44Eb1374240CE5F1B871ab261CD16335B76a',\n    mixedRouteQuoterV2Address: '0xe2023f3fa515cf070e07fd9d51c1d236e07843f4',\n    v4PoolManagerAddress: '0x248083fb965359d82b06c1f5322480dcfc1ad857',\n    v4PositionManagerAddress: '0xddcad5775b2816a87495f207731b3571d7ee3c76',\n    v4StateView: '0xe861de206e460a8b936b05ad3816520b58ccdf9b',\n    v4QuoterAddress: '0x2c125569c0bee20a66e33e5491c552b37ebd9934',\n};\nconst TEMPO_ADDRESSES = {\n    v3CoreFactoryAddress: '0x24a3d4757e330890a8b8978028c9e58e04611fd6',\n    multicallAddress: '0x64eb6294fd6072b2c20d31a54e39d5d3bf69d982',\n    quoterAddress: '0x53ab5d7a69db158f621b43ee70423da1e1403c2a',\n    v3MigratorAddress: '0x2352328bd3313549d6d908646c82c2b7136901a9',\n    nonfungiblePositionManagerAddress: '0xb71c33f096ceabdc0229110e0d76a6382d01c633',\n    tickLensAddress: '0x95cb27f323a03b03528096a527ee75704db28ef5',\n    swapRouter02Address: '0x7e9d53081e961201837336bcd81f52ae92691a8f',\n    mixedRouteQuoterV2Address: '0x741abcaeb95da1b0766c8db7819bb6c4fed27e3d',\n    v4PoolManagerAddress: '0x33620f62c5b9b2086dd6b62f4a297a9f30347029',\n    v4PositionManagerAddress: '0x3fc79444f8eacc1894775493ff3fa41f1e35ce11',\n    v4StateView: '0x21b954fba3f5ddebe77ef2d47a3100c066908b2a',\n    v4QuoterAddress: '0x20e6487c371a2086f841ef453f85378223df4f4e',\n};\nexport const CHAIN_TO_ADDRESSES_MAP = {\n    [ChainId.MAINNET]: MAINNET_ADDRESSES,\n    [ChainId.OPTIMISM]: OPTIMISM_ADDRESSES,\n    [ChainId.ARBITRUM_ONE]: ARBITRUM_ONE_ADDRESSES,\n    [ChainId.POLYGON]: POLYGON_ADDRESSES,\n    [ChainId.POLYGON_MUMBAI]: POLYGON_ADDRESSES,\n    [ChainId.GOERLI]: GOERLI_ADDRESSES,\n    [ChainId.CELO]: CELO_ADDRESSES,\n    [ChainId.CELO_ALFAJORES]: CELO_ADDRESSES,\n    [ChainId.BNB]: BNB_ADDRESSES,\n    [ChainId.OPTIMISM_GOERLI]: OPTIMISM_GOERLI_ADDRESSES,\n    [ChainId.OPTIMISM_SEPOLIA]: OPTIMISM_SEPOLIA_ADDRESSES,\n    [ChainId.ARBITRUM_GOERLI]: ARBITRUM_GOERLI_ADDRESSES,\n    [ChainId.ARBITRUM_SEPOLIA]: ARBITRUM_SEPOLIA_ADDRESSES,\n    [ChainId.SEPOLIA]: SEPOLIA_ADDRESSES,\n    [ChainId.AVALANCHE]: AVALANCHE_ADDRESSES,\n    [ChainId.BASE]: BASE_ADDRESSES,\n    [ChainId.BASE_GOERLI]: BASE_GOERLI_ADDRESSES,\n    [ChainId.BASE_SEPOLIA]: BASE_SEPOLIA_ADDRESSES,\n    [ChainId.ZORA]: ZORA_ADDRESSES,\n    [ChainId.ZORA_SEPOLIA]: ZORA_SEPOLIA_ADDRESSES,\n    [ChainId.ROOTSTOCK]: ROOTSTOCK_ADDRESSES,\n    [ChainId.BLAST]: BLAST_ADDRESSES,\n    [ChainId.ZKSYNC]: ZKSYNC_ADDRESSES,\n    [ChainId.WORLDCHAIN]: WORLDCHAIN_ADDRESSES,\n    [ChainId.UNICHAIN_SEPOLIA]: UNICHAIN_SEPOLIA_ADDRESSES,\n    [ChainId.UNICHAIN]: UNICHAIN_ADDRESSES,\n    [ChainId.MONAD_TESTNET]: MONAD_TESTNET_ADDRESSES,\n    [ChainId.SONEIUM]: SONEIUM_ADDRESSES,\n    [ChainId.MONAD]: MONAD_ADDRESSES,\n    [ChainId.XLAYER]: XLAYER_ADDRESSES,\n    [ChainId.LINEA]: LINEA_ADDRESSES,\n    [ChainId.TEMPO]: TEMPO_ADDRESSES,\n};\n/* V3 Contract Addresses */\nexport const V3_CORE_FACTORY_ADDRESSES = {\n    ...SUPPORTED_CHAINS.reduce((memo, chainId) => {\n        memo[chainId] = CHAIN_TO_ADDRESSES_MAP[chainId].v3CoreFactoryAddress;\n        return memo;\n    }, {}),\n};\nexport const V3_MIGRATOR_ADDRESSES = {\n    ...SUPPORTED_CHAINS.reduce((memo, chainId) => {\n        const v3MigratorAddress = CHAIN_TO_ADDRESSES_MAP[chainId].v3MigratorAddress;\n        if (v3MigratorAddress) {\n            memo[chainId] = v3MigratorAddress;\n        }\n        return memo;\n    }, {}),\n};\nexport const MULTICALL_ADDRESSES = {\n    ...SUPPORTED_CHAINS.reduce((memo, chainId) => {\n        memo[chainId] = CHAIN_TO_ADDRESSES_MAP[chainId].multicallAddress;\n        return memo;\n    }, {}),\n};\n/**\n * The oldest V0 governance address\n */\nexport const GOVERNANCE_ALPHA_V0_ADDRESSES = constructSameAddressMap('0x5e4be8Bc9637f0EAA1A755019e06A68ce081D58F');\n/**\n * The older V1 governance address\n */\nexport const GOVERNANCE_ALPHA_V1_ADDRESSES = {\n    [ChainId.MAINNET]: '0xC4e172459f1E7939D522503B81AFAaC1014CE6F6',\n};\n/**\n * The latest governor bravo that is currently admin of timelock\n */\nexport const GOVERNANCE_BRAVO_ADDRESSES = {\n    [ChainId.MAINNET]: '0x408ED6354d4973f66138C91495F2f2FCbd8724C3',\n};\nexport const TIMELOCK_ADDRESSES = constructSameAddressMap('0x1a9C8182C09F50C8318d769245beA52c32BE35BC');\nexport const MERKLE_DISTRIBUTOR_ADDRESS = {\n    [ChainId.MAINNET]: '0x090D4613473dEE047c3f2706764f49E0821D256e',\n};\nexport const ARGENT_WALLET_DETECTOR_ADDRESS = {\n    [ChainId.MAINNET]: '0xeca4B0bDBf7c55E9b7925919d03CbF8Dc82537E8',\n};\nexport const QUOTER_ADDRESSES = {\n    ...SUPPORTED_CHAINS.reduce((memo, chainId) => {\n        memo[chainId] = CHAIN_TO_ADDRESSES_MAP[chainId].quoterAddress;\n        return memo;\n    }, {}),\n};\nexport const NONFUNGIBLE_POSITION_MANAGER_ADDRESSES = {\n    ...SUPPORTED_CHAINS.reduce((memo, chainId) => {\n        const nonfungiblePositionManagerAddress = CHAIN_TO_ADDRESSES_MAP[chainId].nonfungiblePositionManagerAddress;\n        if (nonfungiblePositionManagerAddress) {\n            memo[chainId] = nonfungiblePositionManagerAddress;\n        }\n        return memo;\n    }, {}),\n};\nexport const ENS_REGISTRAR_ADDRESSES = {\n    ...constructSameAddressMap('0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e'),\n};\nexport const SOCKS_CONTROLLER_ADDRESSES = {\n    [ChainId.MAINNET]: '0x65770b5283117639760beA3F867b69b3697a91dd',\n};\nexport const TICK_LENS_ADDRESSES = {\n    ...SUPPORTED_CHAINS.reduce((memo, chainId) => {\n        const tickLensAddress = CHAIN_TO_ADDRESSES_MAP[chainId].tickLensAddress;\n        if (tickLensAddress) {\n            memo[chainId] = tickLensAddress;\n        }\n        return memo;\n    }, {}),\n};\nexport const MIXED_ROUTE_QUOTER_V1_ADDRESSES = SUPPORTED_CHAINS.reduce((memo, chainId) => {\n    const mixedRouteQuoterV1Address = CHAIN_TO_ADDRESSES_MAP[chainId].mixedRouteQuoterV1Address;\n    if (mixedRouteQuoterV1Address) {\n        memo[chainId] = mixedRouteQuoterV1Address;\n    }\n    return memo;\n}, {});\nexport const SWAP_ROUTER_02_ADDRESSES = (chainId) => {\n    var _a;\n    if (SUPPORTED_CHAINS.includes(chainId)) {\n        const id = chainId;\n        return (_a = CHAIN_TO_ADDRESSES_MAP[id].swapRouter02Address) !== null && _a !== void 0 ? _a : '0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45';\n    }\n    return '';\n};\n//# sourceMappingURL=addresses.js.map","'use strict';class JSBI extends Array{constructor(i,_){if(super(i),this.sign=_,i>JSBI.__kMaxLength)throw new RangeError(\"Maximum BigInt size exceeded\")}static BigInt(i){var _=Math.floor,t=Number.isFinite;if(\"number\"==typeof i){if(0===i)return JSBI.__zero();if(JSBI.__isOneDigitInt(i))return 0>i?JSBI.__oneDigit(-i,!0):JSBI.__oneDigit(i,!1);if(!t(i)||_(i)!==i)throw new RangeError(\"The number \"+i+\" cannot be converted to BigInt because it is not an integer\");return JSBI.__fromDouble(i)}if(\"string\"==typeof i){const _=JSBI.__fromString(i);if(null===_)throw new SyntaxError(\"Cannot convert \"+i+\" to a BigInt\");return _}if(\"boolean\"==typeof i)return!0===i?JSBI.__oneDigit(1,!1):JSBI.__zero();if(\"object\"==typeof i){if(i.constructor===JSBI)return i;const _=JSBI.__toPrimitive(i);return JSBI.BigInt(_)}throw new TypeError(\"Cannot convert \"+i+\" to a BigInt\")}toDebugString(){const i=[\"BigInt[\"];for(const _ of this)i.push((_?(_>>>0).toString(16):_)+\", \");return i.push(\"]\"),i.join(\"\")}toString(i=10){if(2>i||36<i)throw new RangeError(\"toString() radix argument must be between 2 and 36\");return 0===this.length?\"0\":0==(i&i-1)?JSBI.__toStringBasePowerOfTwo(this,i):JSBI.__toStringGeneric(this,i,!1)}static toNumber(i){const _=i.length;if(0===_)return 0;if(1===_){const _=i.__unsignedDigit(0);return i.sign?-_:_}const t=i.__digit(_-1),e=JSBI.__clz30(t),n=30*_-e;if(1024<n)return i.sign?-Infinity:1/0;let g=n-1,o=t,s=_-1;const l=e+3;let r=32===l?0:o<<l;r>>>=12;const a=l-12;let u=12<=l?0:o<<20+l,d=20+l;for(0<a&&0<s&&(s--,o=i.__digit(s),r|=o>>>30-a,u=o<<a+2,d=a+2);0<d&&0<s;)s--,o=i.__digit(s),u|=30<=d?o<<d-30:o>>>30-d,d-=30;const h=JSBI.__decideRounding(i,d,s,o);if((1===h||0===h&&1==(1&u))&&(u=u+1>>>0,0===u&&(r++,0!=r>>>20&&(r=0,g++,1023<g))))return i.sign?-Infinity:1/0;const m=i.sign?-2147483648:0;return g=g+1023<<20,JSBI.__kBitConversionInts[1]=m|g|r,JSBI.__kBitConversionInts[0]=u,JSBI.__kBitConversionDouble[0]}static unaryMinus(i){if(0===i.length)return i;const _=i.__copy();return _.sign=!i.sign,_}static bitwiseNot(i){return i.sign?JSBI.__absoluteSubOne(i).__trim():JSBI.__absoluteAddOne(i,!0)}static exponentiate(i,_){if(_.sign)throw new RangeError(\"Exponent must be positive\");if(0===_.length)return JSBI.__oneDigit(1,!1);if(0===i.length)return i;if(1===i.length&&1===i.__digit(0))return i.sign&&0==(1&_.__digit(0))?JSBI.unaryMinus(i):i;if(1<_.length)throw new RangeError(\"BigInt too big\");let t=_.__unsignedDigit(0);if(1===t)return i;if(t>=JSBI.__kMaxLengthBits)throw new RangeError(\"BigInt too big\");if(1===i.length&&2===i.__digit(0)){const _=1+(0|t/30),e=i.sign&&0!=(1&t),n=new JSBI(_,e);n.__initializeDigits();const g=1<<t%30;return n.__setDigit(_-1,g),n}let e=null,n=i;for(0!=(1&t)&&(e=i),t>>=1;0!==t;t>>=1)n=JSBI.multiply(n,n),0!=(1&t)&&(null===e?e=n:e=JSBI.multiply(e,n));return e}static multiply(_,t){if(0===_.length)return _;if(0===t.length)return t;let i=_.length+t.length;30<=_.__clzmsd()+t.__clzmsd()&&i--;const e=new JSBI(i,_.sign!==t.sign);e.__initializeDigits();for(let n=0;n<_.length;n++)JSBI.__multiplyAccumulate(t,_.__digit(n),e,n);return e.__trim()}static divide(i,_){if(0===_.length)throw new RangeError(\"Division by zero\");if(0>JSBI.__absoluteCompare(i,_))return JSBI.__zero();const t=i.sign!==_.sign,e=_.__unsignedDigit(0);let n;if(1===_.length&&32767>=e){if(1===e)return t===i.sign?i:JSBI.unaryMinus(i);n=JSBI.__absoluteDivSmall(i,e,null)}else n=JSBI.__absoluteDivLarge(i,_,!0,!1);return n.sign=t,n.__trim()}static remainder(i,_){if(0===_.length)throw new RangeError(\"Division by zero\");if(0>JSBI.__absoluteCompare(i,_))return i;const t=_.__unsignedDigit(0);if(1===_.length&&32767>=t){if(1===t)return JSBI.__zero();const _=JSBI.__absoluteModSmall(i,t);return 0===_?JSBI.__zero():JSBI.__oneDigit(_,i.sign)}const e=JSBI.__absoluteDivLarge(i,_,!1,!0);return e.sign=i.sign,e.__trim()}static add(i,_){const t=i.sign;return t===_.sign?JSBI.__absoluteAdd(i,_,t):0<=JSBI.__absoluteCompare(i,_)?JSBI.__absoluteSub(i,_,t):JSBI.__absoluteSub(_,i,!t)}static subtract(i,_){const t=i.sign;return t===_.sign?0<=JSBI.__absoluteCompare(i,_)?JSBI.__absoluteSub(i,_,t):JSBI.__absoluteSub(_,i,!t):JSBI.__absoluteAdd(i,_,t)}static leftShift(i,_){return 0===_.length||0===i.length?i:_.sign?JSBI.__rightShiftByAbsolute(i,_):JSBI.__leftShiftByAbsolute(i,_)}static signedRightShift(i,_){return 0===_.length||0===i.length?i:_.sign?JSBI.__leftShiftByAbsolute(i,_):JSBI.__rightShiftByAbsolute(i,_)}static unsignedRightShift(){throw new TypeError(\"BigInts have no unsigned right shift; use >> instead\")}static lessThan(i,_){return 0>JSBI.__compareToBigInt(i,_)}static lessThanOrEqual(i,_){return 0>=JSBI.__compareToBigInt(i,_)}static greaterThan(i,_){return 0<JSBI.__compareToBigInt(i,_)}static greaterThanOrEqual(i,_){return 0<=JSBI.__compareToBigInt(i,_)}static equal(_,t){if(_.sign!==t.sign)return!1;if(_.length!==t.length)return!1;for(let e=0;e<_.length;e++)if(_.__digit(e)!==t.__digit(e))return!1;return!0}static notEqual(i,_){return!JSBI.equal(i,_)}static bitwiseAnd(i,_){var t=Math.max;if(!i.sign&&!_.sign)return JSBI.__absoluteAnd(i,_).__trim();if(i.sign&&_.sign){const e=t(i.length,_.length)+1;let n=JSBI.__absoluteSubOne(i,e);const g=JSBI.__absoluteSubOne(_);return n=JSBI.__absoluteOr(n,g,n),JSBI.__absoluteAddOne(n,!0,n).__trim()}return i.sign&&([i,_]=[_,i]),JSBI.__absoluteAndNot(i,JSBI.__absoluteSubOne(_)).__trim()}static bitwiseXor(i,_){var t=Math.max;if(!i.sign&&!_.sign)return JSBI.__absoluteXor(i,_).__trim();if(i.sign&&_.sign){const e=t(i.length,_.length),n=JSBI.__absoluteSubOne(i,e),g=JSBI.__absoluteSubOne(_);return JSBI.__absoluteXor(n,g,n).__trim()}const e=t(i.length,_.length)+1;i.sign&&([i,_]=[_,i]);let n=JSBI.__absoluteSubOne(_,e);return n=JSBI.__absoluteXor(n,i,n),JSBI.__absoluteAddOne(n,!0,n).__trim()}static bitwiseOr(i,_){var t=Math.max;const e=t(i.length,_.length);if(!i.sign&&!_.sign)return JSBI.__absoluteOr(i,_).__trim();if(i.sign&&_.sign){let t=JSBI.__absoluteSubOne(i,e);const n=JSBI.__absoluteSubOne(_);return t=JSBI.__absoluteAnd(t,n,t),JSBI.__absoluteAddOne(t,!0,t).__trim()}i.sign&&([i,_]=[_,i]);let n=JSBI.__absoluteSubOne(_,e);return n=JSBI.__absoluteAndNot(n,i,n),JSBI.__absoluteAddOne(n,!0,n).__trim()}static asIntN(_,t){var i=Math.floor;if(0===t.length)return t;if(_=i(_),0>_)throw new RangeError(\"Invalid value: not (convertible to) a safe integer\");if(0===_)return JSBI.__zero();if(_>=JSBI.__kMaxLengthBits)return t;const e=0|(_+29)/30;if(t.length<e)return t;const g=t.__unsignedDigit(e-1),o=1<<(_-1)%30;if(t.length===e&&g<o)return t;if(!((g&o)===o))return JSBI.__truncateToNBits(_,t);if(!t.sign)return JSBI.__truncateAndSubFromPowerOfTwo(_,t,!0);if(0==(g&o-1)){for(let n=e-2;0<=n;n--)if(0!==t.__digit(n))return JSBI.__truncateAndSubFromPowerOfTwo(_,t,!1);return t.length===e&&g===o?t:JSBI.__truncateToNBits(_,t)}return JSBI.__truncateAndSubFromPowerOfTwo(_,t,!1)}static asUintN(i,_){var t=Math.floor;if(0===_.length)return _;if(i=t(i),0>i)throw new RangeError(\"Invalid value: not (convertible to) a safe integer\");if(0===i)return JSBI.__zero();if(_.sign){if(i>JSBI.__kMaxLengthBits)throw new RangeError(\"BigInt too big\");return JSBI.__truncateAndSubFromPowerOfTwo(i,_,!1)}if(i>=JSBI.__kMaxLengthBits)return _;const e=0|(i+29)/30;if(_.length<e)return _;const g=i%30;if(_.length==e){if(0===g)return _;const i=_.__digit(e-1);if(0==i>>>g)return _}return JSBI.__truncateToNBits(i,_)}static ADD(i,_){if(i=JSBI.__toPrimitive(i),_=JSBI.__toPrimitive(_),\"string\"==typeof i)return\"string\"!=typeof _&&(_=_.toString()),i+_;if(\"string\"==typeof _)return i.toString()+_;if(i=JSBI.__toNumeric(i),_=JSBI.__toNumeric(_),JSBI.__isBigInt(i)&&JSBI.__isBigInt(_))return JSBI.add(i,_);if(\"number\"==typeof i&&\"number\"==typeof _)return i+_;throw new TypeError(\"Cannot mix BigInt and other types, use explicit conversions\")}static LT(i,_){return JSBI.__compare(i,_,0)}static LE(i,_){return JSBI.__compare(i,_,1)}static GT(i,_){return JSBI.__compare(i,_,2)}static GE(i,_){return JSBI.__compare(i,_,3)}static EQ(i,_){for(;;){if(JSBI.__isBigInt(i))return JSBI.__isBigInt(_)?JSBI.equal(i,_):JSBI.EQ(_,i);if(\"number\"==typeof i){if(JSBI.__isBigInt(_))return JSBI.__equalToNumber(_,i);if(\"object\"!=typeof _)return i==_;_=JSBI.__toPrimitive(_)}else if(\"string\"==typeof i){if(JSBI.__isBigInt(_))return i=JSBI.__fromString(i),null!==i&&JSBI.equal(i,_);if(\"object\"!=typeof _)return i==_;_=JSBI.__toPrimitive(_)}else if(\"boolean\"==typeof i){if(JSBI.__isBigInt(_))return JSBI.__equalToNumber(_,+i);if(\"object\"!=typeof _)return i==_;_=JSBI.__toPrimitive(_)}else if(\"symbol\"==typeof i){if(JSBI.__isBigInt(_))return!1;if(\"object\"!=typeof _)return i==_;_=JSBI.__toPrimitive(_)}else if(\"object\"==typeof i){if(\"object\"==typeof _&&_.constructor!==JSBI)return i==_;i=JSBI.__toPrimitive(i)}else return i==_}}static NE(i,_){return!JSBI.EQ(i,_)}static __zero(){return new JSBI(0,!1)}static __oneDigit(i,_){const t=new JSBI(1,_);return t.__setDigit(0,i),t}__copy(){const _=new JSBI(this.length,this.sign);for(let t=0;t<this.length;t++)_[t]=this[t];return _}__trim(){let i=this.length,_=this[i-1];for(;0===_;)i--,_=this[i-1],this.pop();return 0===i&&(this.sign=!1),this}__initializeDigits(){for(let _=0;_<this.length;_++)this[_]=0}static __decideRounding(i,_,t,e){if(0<_)return-1;let n;if(0>_)n=-_-1;else{if(0===t)return-1;t--,e=i.__digit(t),n=29}let g=1<<n;if(0==(e&g))return-1;if(g-=1,0!=(e&g))return 1;for(;0<t;)if(t--,0!==i.__digit(t))return 1;return 0}static __fromDouble(i){JSBI.__kBitConversionDouble[0]=i;const _=2047&JSBI.__kBitConversionInts[1]>>>20,t=_-1023,e=(0|t/30)+1,n=new JSBI(e,0>i);let g=1048575&JSBI.__kBitConversionInts[1]|1048576,o=JSBI.__kBitConversionInts[0];const s=20,l=t%30;let r,a=0;if(l<20){const i=s-l;a=i+32,r=g>>>i,g=g<<32-i|o>>>i,o<<=32-i}else if(l===20)a=32,r=g,g=o,o=0;else{const i=l-s;a=32-i,r=g<<i|o>>>32-i,g=o<<i,o=0}n.__setDigit(e-1,r);for(let _=e-2;0<=_;_--)0<a?(a-=30,r=g>>>2,g=g<<30|o>>>2,o<<=30):r=0,n.__setDigit(_,r);return n.__trim()}static __isWhitespace(i){return!!(13>=i&&9<=i)||(159>=i?32==i:131071>=i?160==i||5760==i:196607>=i?(i&=131071,10>=i||40==i||41==i||47==i||95==i||4096==i):65279==i)}static __fromString(i,_=0){let t=0;const e=i.length;let n=0;if(n===e)return JSBI.__zero();let g=i.charCodeAt(n);for(;JSBI.__isWhitespace(g);){if(++n===e)return JSBI.__zero();g=i.charCodeAt(n)}if(43===g){if(++n===e)return null;g=i.charCodeAt(n),t=1}else if(45===g){if(++n===e)return null;g=i.charCodeAt(n),t=-1}if(0===_){if(_=10,48===g){if(++n===e)return JSBI.__zero();if(g=i.charCodeAt(n),88===g||120===g){if(_=16,++n===e)return null;g=i.charCodeAt(n)}else if(79===g||111===g){if(_=8,++n===e)return null;g=i.charCodeAt(n)}else if(66===g||98===g){if(_=2,++n===e)return null;g=i.charCodeAt(n)}}}else if(16===_&&48===g){if(++n===e)return JSBI.__zero();if(g=i.charCodeAt(n),88===g||120===g){if(++n===e)return null;g=i.charCodeAt(n)}}if(0!=t&&10!==_)return null;for(;48===g;){if(++n===e)return JSBI.__zero();g=i.charCodeAt(n)}const o=e-n;let s=JSBI.__kMaxBitsPerChar[_],l=JSBI.__kBitsPerCharTableMultiplier-1;if(o>1073741824/s)return null;const r=s*o+l>>>JSBI.__kBitsPerCharTableShift,a=new JSBI(0|(r+29)/30,!1),u=10>_?_:10,h=10<_?_-10:0;if(0==(_&_-1)){s>>=JSBI.__kBitsPerCharTableShift;const _=[],t=[];let o=!1;do{let l=0,r=0;for(;;){let _;if(g-48>>>0<u)_=g-48;else if((32|g)-97>>>0<h)_=(32|g)-87;else{o=!0;break}if(r+=s,l=l<<s|_,++n===e){o=!0;break}if(g=i.charCodeAt(n),30<r+s)break}_.push(l),t.push(r)}while(!o);JSBI.__fillFromParts(a,_,t)}else{a.__initializeDigits();let t=!1,o=0;do{let r=0,b=1;for(;;){let s;if(g-48>>>0<u)s=g-48;else if((32|g)-97>>>0<h)s=(32|g)-87;else{t=!0;break}const l=b*_;if(1073741823<l)break;if(b=l,r=r*_+s,o++,++n===e){t=!0;break}g=i.charCodeAt(n)}l=30*JSBI.__kBitsPerCharTableMultiplier-1;const D=0|(s*o+l>>>JSBI.__kBitsPerCharTableShift)/30;a.__inplaceMultiplyAdd(b,r,D)}while(!t)}if(n!==e){if(!JSBI.__isWhitespace(g))return null;for(n++;n<e;n++)if(g=i.charCodeAt(n),!JSBI.__isWhitespace(g))return null}return a.sign=-1==t,a.__trim()}static __fillFromParts(_,t,e){let n=0,g=0,o=0;for(let s=t.length-1;0<=s;s--){const i=t[s],l=e[s];g|=i<<o,o+=l,30===o?(_.__setDigit(n++,g),o=0,g=0):30<o&&(_.__setDigit(n++,1073741823&g),o-=30,g=i>>>l-o)}if(0!==g){if(n>=_.length)throw new Error(\"implementation bug\");_.__setDigit(n++,g)}for(;n<_.length;n++)_.__setDigit(n,0)}static __toStringBasePowerOfTwo(_,i){const t=_.length;let e=i-1;e=(85&e>>>1)+(85&e),e=(51&e>>>2)+(51&e),e=(15&e>>>4)+(15&e);const n=e,g=i-1,o=_.__digit(t-1),s=JSBI.__clz30(o);let l=0|(30*t-s+n-1)/n;if(_.sign&&l++,268435456<l)throw new Error(\"string too long\");const r=Array(l);let a=l-1,u=0,d=0;for(let e=0;e<t-1;e++){const i=_.__digit(e),t=(u|i<<d)&g;r[a--]=JSBI.__kConversionChars[t];const o=n-d;for(u=i>>>o,d=30-o;d>=n;)r[a--]=JSBI.__kConversionChars[u&g],u>>>=n,d-=n}const h=(u|o<<d)&g;for(r[a--]=JSBI.__kConversionChars[h],u=o>>>n-d;0!==u;)r[a--]=JSBI.__kConversionChars[u&g],u>>>=n;if(_.sign&&(r[a--]=\"-\"),-1!=a)throw new Error(\"implementation bug\");return r.join(\"\")}static __toStringGeneric(_,i,t){const e=_.length;if(0===e)return\"\";if(1===e){let e=_.__unsignedDigit(0).toString(i);return!1===t&&_.sign&&(e=\"-\"+e),e}const n=30*e-JSBI.__clz30(_.__digit(e-1)),g=JSBI.__kMaxBitsPerChar[i],o=g-1;let s=n*JSBI.__kBitsPerCharTableMultiplier;s+=o-1,s=0|s/o;const l=s+1>>1,r=JSBI.exponentiate(JSBI.__oneDigit(i,!1),JSBI.__oneDigit(l,!1));let a,u;const d=r.__unsignedDigit(0);if(1===r.length&&32767>=d){a=new JSBI(_.length,!1),a.__initializeDigits();let t=0;for(let e=2*_.length-1;0<=e;e--){const i=t<<15|_.__halfDigit(e);a.__setHalfDigit(e,0|i/d),t=0|i%d}u=t.toString(i)}else{const t=JSBI.__absoluteDivLarge(_,r,!0,!0);a=t.quotient;const e=t.remainder.__trim();u=JSBI.__toStringGeneric(e,i,!0)}a.__trim();let h=JSBI.__toStringGeneric(a,i,!0);for(;u.length<l;)u=\"0\"+u;return!1===t&&_.sign&&(h=\"-\"+h),h+u}static __unequalSign(i){return i?-1:1}static __absoluteGreater(i){return i?-1:1}static __absoluteLess(i){return i?1:-1}static __compareToBigInt(i,_){const t=i.sign;if(t!==_.sign)return JSBI.__unequalSign(t);const e=JSBI.__absoluteCompare(i,_);return 0<e?JSBI.__absoluteGreater(t):0>e?JSBI.__absoluteLess(t):0}static __compareToNumber(i,_){if(JSBI.__isOneDigitInt(_)){const t=i.sign,e=0>_;if(t!==e)return JSBI.__unequalSign(t);if(0===i.length){if(e)throw new Error(\"implementation bug\");return 0===_?0:-1}if(1<i.length)return JSBI.__absoluteGreater(t);const n=Math.abs(_),g=i.__unsignedDigit(0);return g>n?JSBI.__absoluteGreater(t):g<n?JSBI.__absoluteLess(t):0}return JSBI.__compareToDouble(i,_)}static __compareToDouble(i,_){if(_!==_)return _;if(_===1/0)return-1;if(_===-Infinity)return 1;const t=i.sign;if(t!==0>_)return JSBI.__unequalSign(t);if(0===_)throw new Error(\"implementation bug: should be handled elsewhere\");if(0===i.length)return-1;JSBI.__kBitConversionDouble[0]=_;const e=2047&JSBI.__kBitConversionInts[1]>>>20;if(2047==e)throw new Error(\"implementation bug: handled elsewhere\");const n=e-1023;if(0>n)return JSBI.__absoluteGreater(t);const g=i.length;let o=i.__digit(g-1);const s=JSBI.__clz30(o),l=30*g-s,r=n+1;if(l<r)return JSBI.__absoluteLess(t);if(l>r)return JSBI.__absoluteGreater(t);let a=1048576|1048575&JSBI.__kBitConversionInts[1],u=JSBI.__kBitConversionInts[0];const d=20,h=29-s;if(h!==(0|(l-1)%30))throw new Error(\"implementation bug\");let m,b=0;if(20>h){const i=d-h;b=i+32,m=a>>>i,a=a<<32-i|u>>>i,u<<=32-i}else if(20===h)b=32,m=a,a=u,u=0;else{const i=h-d;b=32-i,m=a<<i|u>>>32-i,a=u<<i,u=0}if(o>>>=0,m>>>=0,o>m)return JSBI.__absoluteGreater(t);if(o<m)return JSBI.__absoluteLess(t);for(let e=g-2;0<=e;e--){0<b?(b-=30,m=a>>>2,a=a<<30|u>>>2,u<<=30):m=0;const _=i.__unsignedDigit(e);if(_>m)return JSBI.__absoluteGreater(t);if(_<m)return JSBI.__absoluteLess(t)}if(0!==a||0!==u){if(0===b)throw new Error(\"implementation bug\");return JSBI.__absoluteLess(t)}return 0}static __equalToNumber(i,_){var t=Math.abs;return JSBI.__isOneDigitInt(_)?0===_?0===i.length:1===i.length&&i.sign===0>_&&i.__unsignedDigit(0)===t(_):0===JSBI.__compareToDouble(i,_)}static __comparisonResultToBool(i,_){return 0===_?0>i:1===_?0>=i:2===_?0<i:3===_?0<=i:void 0}static __compare(i,_,t){if(i=JSBI.__toPrimitive(i),_=JSBI.__toPrimitive(_),\"string\"==typeof i&&\"string\"==typeof _)switch(t){case 0:return i<_;case 1:return i<=_;case 2:return i>_;case 3:return i>=_;}if(JSBI.__isBigInt(i)&&\"string\"==typeof _)return _=JSBI.__fromString(_),null!==_&&JSBI.__comparisonResultToBool(JSBI.__compareToBigInt(i,_),t);if(\"string\"==typeof i&&JSBI.__isBigInt(_))return i=JSBI.__fromString(i),null!==i&&JSBI.__comparisonResultToBool(JSBI.__compareToBigInt(i,_),t);if(i=JSBI.__toNumeric(i),_=JSBI.__toNumeric(_),JSBI.__isBigInt(i)){if(JSBI.__isBigInt(_))return JSBI.__comparisonResultToBool(JSBI.__compareToBigInt(i,_),t);if(\"number\"!=typeof _)throw new Error(\"implementation bug\");return JSBI.__comparisonResultToBool(JSBI.__compareToNumber(i,_),t)}if(\"number\"!=typeof i)throw new Error(\"implementation bug\");if(JSBI.__isBigInt(_))return JSBI.__comparisonResultToBool(JSBI.__compareToNumber(_,i),2^t);if(\"number\"!=typeof _)throw new Error(\"implementation bug\");return 0===t?i<_:1===t?i<=_:2===t?i>_:3===t?i>=_:void 0}__clzmsd(){return JSBI.__clz30(this.__digit(this.length-1))}static __absoluteAdd(_,t,e){if(_.length<t.length)return JSBI.__absoluteAdd(t,_,e);if(0===_.length)return _;if(0===t.length)return _.sign===e?_:JSBI.unaryMinus(_);let n=_.length;(0===_.__clzmsd()||t.length===_.length&&0===t.__clzmsd())&&n++;const g=new JSBI(n,e);let o=0,s=0;for(;s<t.length;s++){const i=_.__digit(s)+t.__digit(s)+o;o=i>>>30,g.__setDigit(s,1073741823&i)}for(;s<_.length;s++){const i=_.__digit(s)+o;o=i>>>30,g.__setDigit(s,1073741823&i)}return s<g.length&&g.__setDigit(s,o),g.__trim()}static __absoluteSub(_,t,e){if(0===_.length)return _;if(0===t.length)return _.sign===e?_:JSBI.unaryMinus(_);const n=new JSBI(_.length,e);let g=0,o=0;for(;o<t.length;o++){const i=_.__digit(o)-t.__digit(o)-g;g=1&i>>>30,n.__setDigit(o,1073741823&i)}for(;o<_.length;o++){const i=_.__digit(o)-g;g=1&i>>>30,n.__setDigit(o,1073741823&i)}return n.__trim()}static __absoluteAddOne(_,i,t=null){const e=_.length;null===t?t=new JSBI(e,i):t.sign=i;let n=1;for(let g=0;g<e;g++){const i=_.__digit(g)+n;n=i>>>30,t.__setDigit(g,1073741823&i)}return 0!=n&&t.__setDigitGrow(e,1),t}static __absoluteSubOne(_,t){const e=_.length;t=t||e;const n=new JSBI(t,!1);let g=1;for(let o=0;o<e;o++){const i=_.__digit(o)-g;g=1&i>>>30,n.__setDigit(o,1073741823&i)}if(0!=g)throw new Error(\"implementation bug\");for(let g=e;g<t;g++)n.__setDigit(g,0);return n}static __absoluteAnd(_,t,e=null){let n=_.length,g=t.length,o=g;if(n<g){o=n;const i=_,e=n;_=t,n=g,t=i,g=e}let s=o;null===e?e=new JSBI(s,!1):s=e.length;let l=0;for(;l<o;l++)e.__setDigit(l,_.__digit(l)&t.__digit(l));for(;l<s;l++)e.__setDigit(l,0);return e}static __absoluteAndNot(_,t,e=null){const n=_.length,g=t.length;let o=g;n<g&&(o=n);let s=n;null===e?e=new JSBI(s,!1):s=e.length;let l=0;for(;l<o;l++)e.__setDigit(l,_.__digit(l)&~t.__digit(l));for(;l<n;l++)e.__setDigit(l,_.__digit(l));for(;l<s;l++)e.__setDigit(l,0);return e}static __absoluteOr(_,t,e=null){let n=_.length,g=t.length,o=g;if(n<g){o=n;const i=_,e=n;_=t,n=g,t=i,g=e}let s=n;null===e?e=new JSBI(s,!1):s=e.length;let l=0;for(;l<o;l++)e.__setDigit(l,_.__digit(l)|t.__digit(l));for(;l<n;l++)e.__setDigit(l,_.__digit(l));for(;l<s;l++)e.__setDigit(l,0);return e}static __absoluteXor(_,t,e=null){let n=_.length,g=t.length,o=g;if(n<g){o=n;const i=_,e=n;_=t,n=g,t=i,g=e}let s=n;null===e?e=new JSBI(s,!1):s=e.length;let l=0;for(;l<o;l++)e.__setDigit(l,_.__digit(l)^t.__digit(l));for(;l<n;l++)e.__setDigit(l,_.__digit(l));for(;l<s;l++)e.__setDigit(l,0);return e}static __absoluteCompare(_,t){const e=_.length-t.length;if(0!=e)return e;let n=_.length-1;for(;0<=n&&_.__digit(n)===t.__digit(n);)n--;return 0>n?0:_.__unsignedDigit(n)>t.__unsignedDigit(n)?1:-1}static __multiplyAccumulate(_,t,e,n){if(0===t)return;const g=32767&t,o=t>>>15;let s=0,l=0;for(let r,a=0;a<_.length;a++,n++){r=e.__digit(n);const i=_.__digit(a),t=32767&i,u=i>>>15,d=JSBI.__imul(t,g),h=JSBI.__imul(t,o),m=JSBI.__imul(u,g),b=JSBI.__imul(u,o);r+=l+d+s,s=r>>>30,r&=1073741823,r+=((32767&h)<<15)+((32767&m)<<15),s+=r>>>30,l=b+(h>>>15)+(m>>>15),e.__setDigit(n,1073741823&r)}for(;0!=s||0!==l;n++){let i=e.__digit(n);i+=s+l,l=0,s=i>>>30,e.__setDigit(n,1073741823&i)}}static __internalMultiplyAdd(_,t,e,g,o){let s=e,l=0;for(let n=0;n<g;n++){const i=_.__digit(n),e=JSBI.__imul(32767&i,t),g=JSBI.__imul(i>>>15,t),a=e+((32767&g)<<15)+l+s;s=a>>>30,l=g>>>15,o.__setDigit(n,1073741823&a)}if(o.length>g)for(o.__setDigit(g++,s+l);g<o.length;)o.__setDigit(g++,0);else if(0!==s+l)throw new Error(\"implementation bug\")}__inplaceMultiplyAdd(i,_,t){t>this.length&&(t=this.length);const e=32767&i,n=i>>>15;let g=0,o=_;for(let s=0;s<t;s++){const i=this.__digit(s),_=32767&i,t=i>>>15,l=JSBI.__imul(_,e),r=JSBI.__imul(_,n),a=JSBI.__imul(t,e),u=JSBI.__imul(t,n);let d=o+l+g;g=d>>>30,d&=1073741823,d+=((32767&r)<<15)+((32767&a)<<15),g+=d>>>30,o=u+(r>>>15)+(a>>>15),this.__setDigit(s,1073741823&d)}if(0!=g||0!==o)throw new Error(\"implementation bug\")}static __absoluteDivSmall(_,t,e=null){null===e&&(e=new JSBI(_.length,!1));let n=0;for(let g,o=2*_.length-1;0<=o;o-=2){g=(n<<15|_.__halfDigit(o))>>>0;const i=0|g/t;n=0|g%t,g=(n<<15|_.__halfDigit(o-1))>>>0;const s=0|g/t;n=0|g%t,e.__setDigit(o>>>1,i<<15|s)}return e}static __absoluteModSmall(_,t){let e=0;for(let n=2*_.length-1;0<=n;n--){const i=(e<<15|_.__halfDigit(n))>>>0;e=0|i%t}return e}static __absoluteDivLarge(i,_,t,e){const g=_.__halfDigitLength(),n=_.length,o=i.__halfDigitLength()-g;let s=null;t&&(s=new JSBI(o+2>>>1,!1),s.__initializeDigits());const l=new JSBI(g+2>>>1,!1);l.__initializeDigits();const r=JSBI.__clz15(_.__halfDigit(g-1));0<r&&(_=JSBI.__specialLeftShift(_,r,0));const a=JSBI.__specialLeftShift(i,r,1),u=_.__halfDigit(g-1);let d=0;for(let r,h=o;0<=h;h--){r=32767;const i=a.__halfDigit(h+g);if(i!==u){const t=(i<<15|a.__halfDigit(h+g-1))>>>0;r=0|t/u;let e=0|t%u;const n=_.__halfDigit(g-2),o=a.__halfDigit(h+g-2);for(;JSBI.__imul(r,n)>>>0>(e<<16|o)>>>0&&(r--,e+=u,!(32767<e)););}JSBI.__internalMultiplyAdd(_,r,0,n,l);let e=a.__inplaceSub(l,h,g+1);0!==e&&(e=a.__inplaceAdd(_,h,g),a.__setHalfDigit(h+g,32767&a.__halfDigit(h+g)+e),r--),t&&(1&h?d=r<<15:s.__setDigit(h>>>1,d|r))}if(e)return a.__inplaceRightShift(r),t?{quotient:s,remainder:a}:a;if(t)return s;throw new Error(\"unreachable\")}static __clz15(i){return JSBI.__clz30(i)-15}__inplaceAdd(_,t,e){let n=0;for(let g=0;g<e;g++){const i=this.__halfDigit(t+g)+_.__halfDigit(g)+n;n=i>>>15,this.__setHalfDigit(t+g,32767&i)}return n}__inplaceSub(_,t,e){let n=0;if(1&t){t>>=1;let g=this.__digit(t),o=32767&g,s=0;for(;s<e-1>>>1;s++){const i=_.__digit(s),e=(g>>>15)-(32767&i)-n;n=1&e>>>15,this.__setDigit(t+s,(32767&e)<<15|32767&o),g=this.__digit(t+s+1),o=(32767&g)-(i>>>15)-n,n=1&o>>>15}const i=_.__digit(s),l=(g>>>15)-(32767&i)-n;n=1&l>>>15,this.__setDigit(t+s,(32767&l)<<15|32767&o);if(t+s+1>=this.length)throw new RangeError(\"out of bounds\");0==(1&e)&&(g=this.__digit(t+s+1),o=(32767&g)-(i>>>15)-n,n=1&o>>>15,this.__setDigit(t+_.length,1073709056&g|32767&o))}else{t>>=1;let g=0;for(;g<_.length-1;g++){const i=this.__digit(t+g),e=_.__digit(g),o=(32767&i)-(32767&e)-n;n=1&o>>>15;const s=(i>>>15)-(e>>>15)-n;n=1&s>>>15,this.__setDigit(t+g,(32767&s)<<15|32767&o)}const i=this.__digit(t+g),o=_.__digit(g),s=(32767&i)-(32767&o)-n;n=1&s>>>15;let l=0;0==(1&e)&&(l=(i>>>15)-(o>>>15)-n,n=1&l>>>15),this.__setDigit(t+g,(32767&l)<<15|32767&s)}return n}__inplaceRightShift(_){if(0===_)return;let t=this.__digit(0)>>>_;const e=this.length-1;for(let n=0;n<e;n++){const i=this.__digit(n+1);this.__setDigit(n,1073741823&i<<30-_|t),t=i>>>_}this.__setDigit(e,t)}static __specialLeftShift(_,t,e){const g=_.length,n=new JSBI(g+e,!1);if(0===t){for(let t=0;t<g;t++)n.__setDigit(t,_.__digit(t));return 0<e&&n.__setDigit(g,0),n}let o=0;for(let s=0;s<g;s++){const i=_.__digit(s);n.__setDigit(s,1073741823&i<<t|o),o=i>>>30-t}return 0<e&&n.__setDigit(g,o),n}static __leftShiftByAbsolute(_,i){const t=JSBI.__toShiftAmount(i);if(0>t)throw new RangeError(\"BigInt too big\");const e=0|t/30,n=t%30,g=_.length,o=0!==n&&0!=_.__digit(g-1)>>>30-n,s=g+e+(o?1:0),l=new JSBI(s,_.sign);if(0===n){let t=0;for(;t<e;t++)l.__setDigit(t,0);for(;t<s;t++)l.__setDigit(t,_.__digit(t-e))}else{let t=0;for(let _=0;_<e;_++)l.__setDigit(_,0);for(let o=0;o<g;o++){const i=_.__digit(o);l.__setDigit(o+e,1073741823&i<<n|t),t=i>>>30-n}if(o)l.__setDigit(g+e,t);else if(0!==t)throw new Error(\"implementation bug\")}return l.__trim()}static __rightShiftByAbsolute(_,i){const t=_.length,e=_.sign,n=JSBI.__toShiftAmount(i);if(0>n)return JSBI.__rightShiftByMaximum(e);const g=0|n/30,o=n%30;let s=t-g;if(0>=s)return JSBI.__rightShiftByMaximum(e);let l=!1;if(e){if(0!=(_.__digit(g)&(1<<o)-1))l=!0;else for(let t=0;t<g;t++)if(0!==_.__digit(t)){l=!0;break}}if(l&&0===o){const i=_.__digit(t-1);0==~i&&s++}let r=new JSBI(s,e);if(0===o){r.__setDigit(s-1,0);for(let e=g;e<t;e++)r.__setDigit(e-g,_.__digit(e))}else{let e=_.__digit(g)>>>o;const n=t-g-1;for(let t=0;t<n;t++){const i=_.__digit(t+g+1);r.__setDigit(t,1073741823&i<<30-o|e),e=i>>>o}r.__setDigit(n,e)}return l&&(r=JSBI.__absoluteAddOne(r,!0,r)),r.__trim()}static __rightShiftByMaximum(i){return i?JSBI.__oneDigit(1,!0):JSBI.__zero()}static __toShiftAmount(i){if(1<i.length)return-1;const _=i.__unsignedDigit(0);return _>JSBI.__kMaxLengthBits?-1:_}static __toPrimitive(i,_=\"default\"){if(\"object\"!=typeof i)return i;if(i.constructor===JSBI)return i;if(\"undefined\"!=typeof Symbol&&\"symbol\"==typeof Symbol.toPrimitive){const t=i[Symbol.toPrimitive];if(t){const i=t(_);if(\"object\"!=typeof i)return i;throw new TypeError(\"Cannot convert object to primitive value\")}}const t=i.valueOf;if(t){const _=t.call(i);if(\"object\"!=typeof _)return _}const e=i.toString;if(e){const _=e.call(i);if(\"object\"!=typeof _)return _}throw new TypeError(\"Cannot convert object to primitive value\")}static __toNumeric(i){return JSBI.__isBigInt(i)?i:+i}static __isBigInt(i){return\"object\"==typeof i&&null!==i&&i.constructor===JSBI}static __truncateToNBits(i,_){const t=0|(i+29)/30,e=new JSBI(t,_.sign),n=t-1;for(let t=0;t<n;t++)e.__setDigit(t,_.__digit(t));let g=_.__digit(n);if(0!=i%30){const _=32-i%30;g=g<<_>>>_}return e.__setDigit(n,g),e.__trim()}static __truncateAndSubFromPowerOfTwo(_,t,e){var n=Math.min;const g=0|(_+29)/30,o=new JSBI(g,e);let s=0;const l=g-1;let a=0;for(const i=n(l,t.length);s<i;s++){const i=0-t.__digit(s)-a;a=1&i>>>30,o.__setDigit(s,1073741823&i)}for(;s<l;s++)o.__setDigit(s,0|1073741823&-a);let u=l<t.length?t.__digit(l):0;const d=_%30;let h;if(0==d)h=0-u-a,h&=1073741823;else{const i=32-d;u=u<<i>>>i;const _=1<<32-i;h=_-u-a,h&=_-1}return o.__setDigit(l,h),o.__trim()}__digit(_){return this[_]}__unsignedDigit(_){return this[_]>>>0}__setDigit(_,i){this[_]=0|i}__setDigitGrow(_,i){this[_]=0|i}__halfDigitLength(){const i=this.length;return 32767>=this.__unsignedDigit(i-1)?2*i-1:2*i}__halfDigit(_){return 32767&this[_>>>1]>>>15*(1&_)}__setHalfDigit(_,i){const t=_>>>1,e=this.__digit(t),n=1&_?32767&e|i<<15:1073709056&e|32767&i;this.__setDigit(t,n)}static __digitPow(i,_){let t=1;for(;0<_;)1&_&&(t*=i),_>>>=1,i*=i;return t}static __isOneDigitInt(i){return(1073741823&i)===i}}JSBI.__kMaxLength=33554432,JSBI.__kMaxLengthBits=JSBI.__kMaxLength<<5,JSBI.__kMaxBitsPerChar=[0,0,32,51,64,75,83,90,96,102,107,111,115,119,122,126,128,131,134,136,139,141,143,145,147,149,151,153,154,156,158,159,160,162,163,165,166],JSBI.__kBitsPerCharTableShift=5,JSBI.__kBitsPerCharTableMultiplier=1<<JSBI.__kBitsPerCharTableShift,JSBI.__kConversionChars=[\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"i\",\"j\",\"k\",\"l\",\"m\",\"n\",\"o\",\"p\",\"q\",\"r\",\"s\",\"t\",\"u\",\"v\",\"w\",\"x\",\"y\",\"z\"],JSBI.__kBitConversionBuffer=new ArrayBuffer(8),JSBI.__kBitConversionDouble=new Float64Array(JSBI.__kBitConversionBuffer),JSBI.__kBitConversionInts=new Int32Array(JSBI.__kBitConversionBuffer),JSBI.__clz30=Math.clz32?function(i){return Math.clz32(i)-2}:function(i){return 0===i?30:0|29-(0|Math.log(i>>>0)/Math.LN2)},JSBI.__imul=Math.imul||function(i,_){return 0|i*_},module.exports=JSBI;\n//# sourceMappingURL=jsbi-cjs.js.map\n","import JSBI from 'jsbi';\nexport var TradeType;\n(function (TradeType) {\n    TradeType[TradeType[\"EXACT_INPUT\"] = 0] = \"EXACT_INPUT\";\n    TradeType[TradeType[\"EXACT_OUTPUT\"] = 1] = \"EXACT_OUTPUT\";\n})(TradeType || (TradeType = {}));\nexport var Rounding;\n(function (Rounding) {\n    Rounding[Rounding[\"ROUND_DOWN\"] = 0] = \"ROUND_DOWN\";\n    Rounding[Rounding[\"ROUND_HALF_UP\"] = 1] = \"ROUND_HALF_UP\";\n    Rounding[Rounding[\"ROUND_UP\"] = 2] = \"ROUND_UP\";\n})(Rounding || (Rounding = {}));\nexport const MaxUint256 = JSBI.BigInt('0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff');\n//# sourceMappingURL=constants.js.map","var isProduction = process.env.NODE_ENV === 'production';\nvar prefix = 'Invariant failed';\nfunction invariant(condition, message) {\n    if (condition) {\n        return;\n    }\n    if (isProduction) {\n        throw new Error(prefix);\n    }\n    var provided = typeof message === 'function' ? message() : message;\n    var value = provided ? \"\".concat(prefix, \": \").concat(provided) : prefix;\n    throw new Error(value);\n}\n\nexport { invariant as default };\n","/*! decimal.js-light v2.5.1 https://github.com/MikeMcl/decimal.js-light/LICENCE */\r\n;(function (globalScope) {\r\n  'use strict';\r\n\r\n\r\n  /*\r\n   *  decimal.js-light v2.5.1\r\n   *  An arbitrary-precision Decimal type for JavaScript.\r\n   *  https://github.com/MikeMcl/decimal.js-light\r\n   *  Copyright (c) 2020 Michael Mclaughlin <M8ch88l@gmail.com>\r\n   *  MIT Expat Licence\r\n   */\r\n\r\n\r\n  // -----------------------------------  EDITABLE DEFAULTS  ------------------------------------ //\r\n\r\n\r\n    // The limit on the value of `precision`, and on the value of the first argument to\r\n    // `toDecimalPlaces`, `toExponential`, `toFixed`, `toPrecision` and `toSignificantDigits`.\r\n  var MAX_DIGITS = 1e9,                        // 0 to 1e9\r\n\r\n\r\n    // The initial configuration properties of the Decimal constructor.\r\n    Decimal = {\r\n\r\n      // These values must be integers within the stated ranges (inclusive).\r\n      // Most of these values can be changed during run-time using `Decimal.config`.\r\n\r\n      // The maximum number of significant digits of the result of a calculation or base conversion.\r\n      // E.g. `Decimal.config({ precision: 20 });`\r\n      precision: 20,                         // 1 to MAX_DIGITS\r\n\r\n      // The rounding mode used by default by `toInteger`, `toDecimalPlaces`, `toExponential`,\r\n      // `toFixed`, `toPrecision` and `toSignificantDigits`.\r\n      //\r\n      // ROUND_UP         0 Away from zero.\r\n      // ROUND_DOWN       1 Towards zero.\r\n      // ROUND_CEIL       2 Towards +Infinity.\r\n      // ROUND_FLOOR      3 Towards -Infinity.\r\n      // ROUND_HALF_UP    4 Towards nearest neighbour. If equidistant, up.\r\n      // ROUND_HALF_DOWN  5 Towards nearest neighbour. If equidistant, down.\r\n      // ROUND_HALF_EVEN  6 Towards nearest neighbour. If equidistant, towards even neighbour.\r\n      // ROUND_HALF_CEIL  7 Towards nearest neighbour. If equidistant, towards +Infinity.\r\n      // ROUND_HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity.\r\n      //\r\n      // E.g.\r\n      // `Decimal.rounding = 4;`\r\n      // `Decimal.rounding = Decimal.ROUND_HALF_UP;`\r\n      rounding: 4,                           // 0 to 8\r\n\r\n      // The exponent value at and beneath which `toString` returns exponential notation.\r\n      // JavaScript numbers: -7\r\n      toExpNeg: -7,                          // 0 to -MAX_E\r\n\r\n      // The exponent value at and above which `toString` returns exponential notation.\r\n      // JavaScript numbers: 21\r\n      toExpPos:  21,                         // 0 to MAX_E\r\n\r\n      // The natural logarithm of 10.\r\n      // 115 digits\r\n      LN10: '2.302585092994045684017991454684364207601101488628772976033327900967572609677352480235997205089598298341967784042286'\r\n    },\r\n\r\n\r\n  // ----------------------------------- END OF EDITABLE DEFAULTS ------------------------------- //\r\n\r\n\r\n    external = true,\r\n\r\n    decimalError = '[DecimalError] ',\r\n    invalidArgument = decimalError + 'Invalid argument: ',\r\n    exponentOutOfRange = decimalError + 'Exponent out of range: ',\r\n\r\n    mathfloor = Math.floor,\r\n    mathpow = Math.pow,\r\n\r\n    isDecimal = /^(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i,\r\n\r\n    ONE,\r\n    BASE = 1e7,\r\n    LOG_BASE = 7,\r\n    MAX_SAFE_INTEGER = 9007199254740991,\r\n    MAX_E = mathfloor(MAX_SAFE_INTEGER / LOG_BASE),    // 1286742750677284\r\n\r\n    // Decimal.prototype object\r\n    P = {};\r\n\r\n\r\n  // Decimal prototype methods\r\n\r\n\r\n  /*\r\n   *  absoluteValue                       abs\r\n   *  comparedTo                          cmp\r\n   *  decimalPlaces                       dp\r\n   *  dividedBy                           div\r\n   *  dividedToIntegerBy                  idiv\r\n   *  equals                              eq\r\n   *  exponent\r\n   *  greaterThan                         gt\r\n   *  greaterThanOrEqualTo                gte\r\n   *  isInteger                           isint\r\n   *  isNegative                          isneg\r\n   *  isPositive                          ispos\r\n   *  isZero\r\n   *  lessThan                            lt\r\n   *  lessThanOrEqualTo                   lte\r\n   *  logarithm                           log\r\n   *  minus                               sub\r\n   *  modulo                              mod\r\n   *  naturalExponential                  exp\r\n   *  naturalLogarithm                    ln\r\n   *  negated                             neg\r\n   *  plus                                add\r\n   *  precision                           sd\r\n   *  squareRoot                          sqrt\r\n   *  times                               mul\r\n   *  toDecimalPlaces                     todp\r\n   *  toExponential\r\n   *  toFixed\r\n   *  toInteger                           toint\r\n   *  toNumber\r\n   *  toPower                             pow\r\n   *  toPrecision\r\n   *  toSignificantDigits                 tosd\r\n   *  toString\r\n   *  valueOf                             val\r\n   */\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the absolute value of this Decimal.\r\n   *\r\n   */\r\n  P.absoluteValue = P.abs = function () {\r\n    var x = new this.constructor(this);\r\n    if (x.s) x.s = 1;\r\n    return x;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return\r\n   *   1    if the value of this Decimal is greater than the value of `y`,\r\n   *  -1    if the value of this Decimal is less than the value of `y`,\r\n   *   0    if they have the same value\r\n   *\r\n   */\r\n  P.comparedTo = P.cmp = function (y) {\r\n    var i, j, xdL, ydL,\r\n      x = this;\r\n\r\n    y = new x.constructor(y);\r\n\r\n    // Signs differ?\r\n    if (x.s !== y.s) return x.s || -y.s;\r\n\r\n    // Compare exponents.\r\n    if (x.e !== y.e) return x.e > y.e ^ x.s < 0 ? 1 : -1;\r\n\r\n    xdL = x.d.length;\r\n    ydL = y.d.length;\r\n\r\n    // Compare digit by digit.\r\n    for (i = 0, j = xdL < ydL ? xdL : ydL; i < j; ++i) {\r\n      if (x.d[i] !== y.d[i]) return x.d[i] > y.d[i] ^ x.s < 0 ? 1 : -1;\r\n    }\r\n\r\n    // Compare lengths.\r\n    return xdL === ydL ? 0 : xdL > ydL ^ x.s < 0 ? 1 : -1;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return the number of decimal places of the value of this Decimal.\r\n   *\r\n   */\r\n  P.decimalPlaces = P.dp = function () {\r\n    var x = this,\r\n      w = x.d.length - 1,\r\n      dp = (w - x.e) * LOG_BASE;\r\n\r\n    // Subtract the number of trailing zeros of the last word.\r\n    w = x.d[w];\r\n    if (w) for (; w % 10 == 0; w /= 10) dp--;\r\n\r\n    return dp < 0 ? 0 : dp;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the value of this Decimal divided by `y`, truncated to\r\n   * `precision` significant digits.\r\n   *\r\n   */\r\n  P.dividedBy = P.div = function (y) {\r\n    return divide(this, new this.constructor(y));\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the integer part of dividing the value of this Decimal\r\n   * by the value of `y`, truncated to `precision` significant digits.\r\n   *\r\n   */\r\n  P.dividedToIntegerBy = P.idiv = function (y) {\r\n    var x = this,\r\n      Ctor = x.constructor;\r\n    return round(divide(x, new Ctor(y), 0, 1), Ctor.precision);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this Decimal is equal to the value of `y`, otherwise return false.\r\n   *\r\n   */\r\n  P.equals = P.eq = function (y) {\r\n    return !this.cmp(y);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return the (base 10) exponent value of this Decimal (this.e is the base 10000000 exponent).\r\n   *\r\n   */\r\n  P.exponent = function () {\r\n    return getBase10Exponent(this);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this Decimal is greater than the value of `y`, otherwise return\r\n   * false.\r\n   *\r\n   */\r\n  P.greaterThan = P.gt = function (y) {\r\n    return this.cmp(y) > 0;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this Decimal is greater than or equal to the value of `y`,\r\n   * otherwise return false.\r\n   *\r\n   */\r\n  P.greaterThanOrEqualTo = P.gte = function (y) {\r\n    return this.cmp(y) >= 0;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this Decimal is an integer, otherwise return false.\r\n   *\r\n   */\r\n  P.isInteger = P.isint = function () {\r\n    return this.e > this.d.length - 2;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this Decimal is negative, otherwise return false.\r\n   *\r\n   */\r\n  P.isNegative = P.isneg = function () {\r\n    return this.s < 0;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this Decimal is positive, otherwise return false.\r\n   *\r\n   */\r\n  P.isPositive = P.ispos = function () {\r\n    return this.s > 0;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this Decimal is 0, otherwise return false.\r\n   *\r\n   */\r\n  P.isZero = function () {\r\n    return this.s === 0;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this Decimal is less than `y`, otherwise return false.\r\n   *\r\n   */\r\n  P.lessThan = P.lt = function (y) {\r\n    return this.cmp(y) < 0;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this Decimal is less than or equal to `y`, otherwise return false.\r\n   *\r\n   */\r\n  P.lessThanOrEqualTo = P.lte = function (y) {\r\n    return this.cmp(y) < 1;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return the logarithm of the value of this Decimal to the specified base, truncated to\r\n   * `precision` significant digits.\r\n   *\r\n   * If no base is specified, return log[10](x).\r\n   *\r\n   * log[base](x) = ln(x) / ln(base)\r\n   *\r\n   * The maximum error of the result is 1 ulp (unit in the last place).\r\n   *\r\n   * [base] {number|string|Decimal} The base of the logarithm.\r\n   *\r\n   */\r\n  P.logarithm = P.log = function (base) {\r\n    var r,\r\n      x = this,\r\n      Ctor = x.constructor,\r\n      pr = Ctor.precision,\r\n      wpr = pr + 5;\r\n\r\n    // Default base is 10.\r\n    if (base === void 0) {\r\n      base = new Ctor(10);\r\n    } else {\r\n      base = new Ctor(base);\r\n\r\n      // log[-b](x) = NaN\r\n      // log[0](x)  = NaN\r\n      // log[1](x)  = NaN\r\n      if (base.s < 1 || base.eq(ONE)) throw Error(decimalError + 'NaN');\r\n    }\r\n\r\n    // log[b](-x) = NaN\r\n    // log[b](0) = -Infinity\r\n    if (x.s < 1) throw Error(decimalError + (x.s ? 'NaN' : '-Infinity'));\r\n\r\n    // log[b](1) = 0\r\n    if (x.eq(ONE)) return new Ctor(0);\r\n\r\n    external = false;\r\n    r = divide(ln(x, wpr), ln(base, wpr), wpr);\r\n    external = true;\r\n\r\n    return round(r, pr);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the value of this Decimal minus `y`, truncated to\r\n   * `precision` significant digits.\r\n   *\r\n   */\r\n  P.minus = P.sub = function (y) {\r\n    var x = this;\r\n    y = new x.constructor(y);\r\n    return x.s == y.s ? subtract(x, y) : add(x, (y.s = -y.s, y));\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the value of this Decimal modulo `y`, truncated to\r\n   * `precision` significant digits.\r\n   *\r\n   */\r\n  P.modulo = P.mod = function (y) {\r\n    var q,\r\n      x = this,\r\n      Ctor = x.constructor,\r\n      pr = Ctor.precision;\r\n\r\n    y = new Ctor(y);\r\n\r\n    // x % 0 = NaN\r\n    if (!y.s) throw Error(decimalError + 'NaN');\r\n\r\n    // Return x if x is 0.\r\n    if (!x.s) return round(new Ctor(x), pr);\r\n\r\n    // Prevent rounding of intermediate calculations.\r\n    external = false;\r\n    q = divide(x, y, 0, 1).times(y);\r\n    external = true;\r\n\r\n    return x.minus(q);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the natural exponential of the value of this Decimal,\r\n   * i.e. the base e raised to the power the value of this Decimal, truncated to `precision`\r\n   * significant digits.\r\n   *\r\n   */\r\n  P.naturalExponential = P.exp = function () {\r\n    return exp(this);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the natural logarithm of the value of this Decimal,\r\n   * truncated to `precision` significant digits.\r\n   *\r\n   */\r\n  P.naturalLogarithm = P.ln = function () {\r\n    return ln(this);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the value of this Decimal negated, i.e. as if multiplied by\r\n   * -1.\r\n   *\r\n   */\r\n  P.negated = P.neg = function () {\r\n    var x = new this.constructor(this);\r\n    x.s = -x.s || 0;\r\n    return x;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the value of this Decimal plus `y`, truncated to\r\n   * `precision` significant digits.\r\n   *\r\n   */\r\n  P.plus = P.add = function (y) {\r\n    var x = this;\r\n    y = new x.constructor(y);\r\n    return x.s == y.s ? add(x, y) : subtract(x, (y.s = -y.s, y));\r\n  };\r\n\r\n\r\n  /*\r\n   * Return the number of significant digits of the value of this Decimal.\r\n   *\r\n   * [z] {boolean|number} Whether to count integer-part trailing zeros: true, false, 1 or 0.\r\n   *\r\n   */\r\n  P.precision = P.sd = function (z) {\r\n    var e, sd, w,\r\n      x = this;\r\n\r\n    if (z !== void 0 && z !== !!z && z !== 1 && z !== 0) throw Error(invalidArgument + z);\r\n\r\n    e = getBase10Exponent(x) + 1;\r\n    w = x.d.length - 1;\r\n    sd = w * LOG_BASE + 1;\r\n    w = x.d[w];\r\n\r\n    // If non-zero...\r\n    if (w) {\r\n\r\n      // Subtract the number of trailing zeros of the last word.\r\n      for (; w % 10 == 0; w /= 10) sd--;\r\n\r\n      // Add the number of digits of the first word.\r\n      for (w = x.d[0]; w >= 10; w /= 10) sd++;\r\n    }\r\n\r\n    return z && e > sd ? e : sd;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the square root of this Decimal, truncated to `precision`\r\n   * significant digits.\r\n   *\r\n   */\r\n  P.squareRoot = P.sqrt = function () {\r\n    var e, n, pr, r, s, t, wpr,\r\n      x = this,\r\n      Ctor = x.constructor;\r\n\r\n    // Negative or zero?\r\n    if (x.s < 1) {\r\n      if (!x.s) return new Ctor(0);\r\n\r\n      // sqrt(-x) = NaN\r\n      throw Error(decimalError + 'NaN');\r\n    }\r\n\r\n    e = getBase10Exponent(x);\r\n    external = false;\r\n\r\n    // Initial estimate.\r\n    s = Math.sqrt(+x);\r\n\r\n    // Math.sqrt underflow/overflow?\r\n    // Pass x to Math.sqrt as integer, then adjust the exponent of the result.\r\n    if (s == 0 || s == 1 / 0) {\r\n      n = digitsToString(x.d);\r\n      if ((n.length + e) % 2 == 0) n += '0';\r\n      s = Math.sqrt(n);\r\n      e = mathfloor((e + 1) / 2) - (e < 0 || e % 2);\r\n\r\n      if (s == 1 / 0) {\r\n        n = '5e' + e;\r\n      } else {\r\n        n = s.toExponential();\r\n        n = n.slice(0, n.indexOf('e') + 1) + e;\r\n      }\r\n\r\n      r = new Ctor(n);\r\n    } else {\r\n      r = new Ctor(s.toString());\r\n    }\r\n\r\n    pr = Ctor.precision;\r\n    s = wpr = pr + 3;\r\n\r\n    // Newton-Raphson iteration.\r\n    for (;;) {\r\n      t = r;\r\n      r = t.plus(divide(x, t, wpr + 2)).times(0.5);\r\n\r\n      if (digitsToString(t.d).slice(0, wpr) === (n = digitsToString(r.d)).slice(0, wpr)) {\r\n        n = n.slice(wpr - 3, wpr + 1);\r\n\r\n        // The 4th rounding digit may be in error by -1 so if the 4 rounding digits are 9999 or\r\n        // 4999, i.e. approaching a rounding boundary, continue the iteration.\r\n        if (s == wpr && n == '4999') {\r\n\r\n          // On the first iteration only, check to see if rounding up gives the exact result as the\r\n          // nines may infinitely repeat.\r\n          round(t, pr + 1, 0);\r\n\r\n          if (t.times(t).eq(x)) {\r\n            r = t;\r\n            break;\r\n          }\r\n        } else if (n != '9999') {\r\n          break;\r\n        }\r\n\r\n        wpr += 4;\r\n      }\r\n    }\r\n\r\n    external = true;\r\n\r\n    return round(r, pr);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the value of this Decimal times `y`, truncated to\r\n   * `precision` significant digits.\r\n   *\r\n   */\r\n  P.times = P.mul = function (y) {\r\n    var carry, e, i, k, r, rL, t, xdL, ydL,\r\n      x = this,\r\n      Ctor = x.constructor,\r\n      xd = x.d,\r\n      yd = (y = new Ctor(y)).d;\r\n\r\n    // Return 0 if either is 0.\r\n    if (!x.s || !y.s) return new Ctor(0);\r\n\r\n    y.s *= x.s;\r\n    e = x.e + y.e;\r\n    xdL = xd.length;\r\n    ydL = yd.length;\r\n\r\n    // Ensure xd points to the longer array.\r\n    if (xdL < ydL) {\r\n      r = xd;\r\n      xd = yd;\r\n      yd = r;\r\n      rL = xdL;\r\n      xdL = ydL;\r\n      ydL = rL;\r\n    }\r\n\r\n    // Initialise the result array with zeros.\r\n    r = [];\r\n    rL = xdL + ydL;\r\n    for (i = rL; i--;) r.push(0);\r\n\r\n    // Multiply!\r\n    for (i = ydL; --i >= 0;) {\r\n      carry = 0;\r\n      for (k = xdL + i; k > i;) {\r\n        t = r[k] + yd[i] * xd[k - i - 1] + carry;\r\n        r[k--] = t % BASE | 0;\r\n        carry = t / BASE | 0;\r\n      }\r\n\r\n      r[k] = (r[k] + carry) % BASE | 0;\r\n    }\r\n\r\n    // Remove trailing zeros.\r\n    for (; !r[--rL];) r.pop();\r\n\r\n    if (carry) ++e;\r\n    else r.shift();\r\n\r\n    y.d = r;\r\n    y.e = e;\r\n\r\n    return external ? round(y, Ctor.precision) : y;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the value of this Decimal rounded to a maximum of `dp`\r\n   * decimal places using rounding mode `rm` or `rounding` if `rm` is omitted.\r\n   *\r\n   * If `dp` is omitted, return a new Decimal whose value is the value of this Decimal.\r\n   *\r\n   * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n   *\r\n   */\r\n  P.toDecimalPlaces = P.todp = function (dp, rm) {\r\n    var x = this,\r\n      Ctor = x.constructor;\r\n\r\n    x = new Ctor(x);\r\n    if (dp === void 0) return x;\r\n\r\n    checkInt32(dp, 0, MAX_DIGITS);\r\n\r\n    if (rm === void 0) rm = Ctor.rounding;\r\n    else checkInt32(rm, 0, 8);\r\n\r\n    return round(x, dp + getBase10Exponent(x) + 1, rm);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a string representing the value of this Decimal in exponential notation rounded to\r\n   * `dp` fixed decimal places using rounding mode `rounding`.\r\n   *\r\n   * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n   *\r\n   */\r\n  P.toExponential = function (dp, rm) {\r\n    var str,\r\n      x = this,\r\n      Ctor = x.constructor;\r\n\r\n    if (dp === void 0) {\r\n      str = toString(x, true);\r\n    } else {\r\n      checkInt32(dp, 0, MAX_DIGITS);\r\n\r\n      if (rm === void 0) rm = Ctor.rounding;\r\n      else checkInt32(rm, 0, 8);\r\n\r\n      x = round(new Ctor(x), dp + 1, rm);\r\n      str = toString(x, true, dp + 1);\r\n    }\r\n\r\n    return str;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a string representing the value of this Decimal in normal (fixed-point) notation to\r\n   * `dp` fixed decimal places and rounded using rounding mode `rm` or `rounding` if `rm` is\r\n   * omitted.\r\n   *\r\n   * As with JavaScript numbers, (-0).toFixed(0) is '0', but e.g. (-0.00001).toFixed(0) is '-0'.\r\n   *\r\n   * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n   *\r\n   * (-0).toFixed(0) is '0', but (-0.1).toFixed(0) is '-0'.\r\n   * (-0).toFixed(1) is '0.0', but (-0.01).toFixed(1) is '-0.0'.\r\n   * (-0).toFixed(3) is '0.000'.\r\n   * (-0.5).toFixed(0) is '-0'.\r\n   *\r\n   */\r\n  P.toFixed = function (dp, rm) {\r\n    var str, y,\r\n      x = this,\r\n      Ctor = x.constructor;\r\n\r\n    if (dp === void 0) return toString(x);\r\n\r\n    checkInt32(dp, 0, MAX_DIGITS);\r\n\r\n    if (rm === void 0) rm = Ctor.rounding;\r\n    else checkInt32(rm, 0, 8);\r\n\r\n    y = round(new Ctor(x), dp + getBase10Exponent(x) + 1, rm);\r\n    str = toString(y.abs(), false, dp + getBase10Exponent(y) + 1);\r\n\r\n    // To determine whether to add the minus sign look at the value before it was rounded,\r\n    // i.e. look at `x` rather than `y`.\r\n    return x.isneg() && !x.isZero() ? '-' + str : str;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the value of this Decimal rounded to a whole number using\r\n   * rounding mode `rounding`.\r\n   *\r\n   */\r\n  P.toInteger = P.toint = function () {\r\n    var x = this,\r\n      Ctor = x.constructor;\r\n    return round(new Ctor(x), getBase10Exponent(x) + 1, Ctor.rounding);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return the value of this Decimal converted to a number primitive.\r\n   *\r\n   */\r\n  P.toNumber = function () {\r\n    return +this;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the value of this Decimal raised to the power `y`,\r\n   * truncated to `precision` significant digits.\r\n   *\r\n   * For non-integer or very large exponents pow(x, y) is calculated using\r\n   *\r\n   *   x^y = exp(y*ln(x))\r\n   *\r\n   * The maximum error is 1 ulp (unit in last place).\r\n   *\r\n   * y {number|string|Decimal} The power to which to raise this Decimal.\r\n   *\r\n   */\r\n  P.toPower = P.pow = function (y) {\r\n    var e, k, pr, r, sign, yIsInt,\r\n      x = this,\r\n      Ctor = x.constructor,\r\n      guard = 12,\r\n      yn = +(y = new Ctor(y));\r\n\r\n    // pow(x, 0) = 1\r\n    if (!y.s) return new Ctor(ONE);\r\n\r\n    x = new Ctor(x);\r\n\r\n    // pow(0, y > 0) = 0\r\n    // pow(0, y < 0) = Infinity\r\n    if (!x.s) {\r\n      if (y.s < 1) throw Error(decimalError + 'Infinity');\r\n      return x;\r\n    }\r\n\r\n    // pow(1, y) = 1\r\n    if (x.eq(ONE)) return x;\r\n\r\n    pr = Ctor.precision;\r\n\r\n    // pow(x, 1) = x\r\n    if (y.eq(ONE)) return round(x, pr);\r\n\r\n    e = y.e;\r\n    k = y.d.length - 1;\r\n    yIsInt = e >= k;\r\n    sign = x.s;\r\n\r\n    if (!yIsInt) {\r\n\r\n      // pow(x < 0, y non-integer) = NaN\r\n      if (sign < 0) throw Error(decimalError + 'NaN');\r\n\r\n    // If y is a small integer use the 'exponentiation by squaring' algorithm.\r\n    } else if ((k = yn < 0 ? -yn : yn) <= MAX_SAFE_INTEGER) {\r\n      r = new Ctor(ONE);\r\n\r\n      // Max k of 9007199254740991 takes 53 loop iterations.\r\n      // Maximum digits array length; leaves [28, 34] guard digits.\r\n      e = Math.ceil(pr / LOG_BASE + 4);\r\n\r\n      external = false;\r\n\r\n      for (;;) {\r\n        if (k % 2) {\r\n          r = r.times(x);\r\n          truncate(r.d, e);\r\n        }\r\n\r\n        k = mathfloor(k / 2);\r\n        if (k === 0) break;\r\n\r\n        x = x.times(x);\r\n        truncate(x.d, e);\r\n      }\r\n\r\n      external = true;\r\n\r\n      return y.s < 0 ? new Ctor(ONE).div(r) : round(r, pr);\r\n    }\r\n\r\n    // Result is negative if x is negative and the last digit of integer y is odd.\r\n    sign = sign < 0 && y.d[Math.max(e, k)] & 1 ? -1 : 1;\r\n\r\n    x.s = 1;\r\n    external = false;\r\n    r = y.times(ln(x, pr + guard));\r\n    external = true;\r\n    r = exp(r);\r\n    r.s = sign;\r\n\r\n    return r;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a string representing the value of this Decimal rounded to `sd` significant digits\r\n   * using rounding mode `rounding`.\r\n   *\r\n   * Return exponential notation if `sd` is less than the number of digits necessary to represent\r\n   * the integer part of the value in normal notation.\r\n   *\r\n   * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n   *\r\n   */\r\n  P.toPrecision = function (sd, rm) {\r\n    var e, str,\r\n      x = this,\r\n      Ctor = x.constructor;\r\n\r\n    if (sd === void 0) {\r\n      e = getBase10Exponent(x);\r\n      str = toString(x, e <= Ctor.toExpNeg || e >= Ctor.toExpPos);\r\n    } else {\r\n      checkInt32(sd, 1, MAX_DIGITS);\r\n\r\n      if (rm === void 0) rm = Ctor.rounding;\r\n      else checkInt32(rm, 0, 8);\r\n\r\n      x = round(new Ctor(x), sd, rm);\r\n      e = getBase10Exponent(x);\r\n      str = toString(x, sd <= e || e <= Ctor.toExpNeg, sd);\r\n    }\r\n\r\n    return str;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the value of this Decimal rounded to a maximum of `sd`\r\n   * significant digits using rounding mode `rm`, or to `precision` and `rounding` respectively if\r\n   * omitted.\r\n   *\r\n   * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n   *\r\n   */\r\n  P.toSignificantDigits = P.tosd = function (sd, rm) {\r\n    var x = this,\r\n      Ctor = x.constructor;\r\n\r\n    if (sd === void 0) {\r\n      sd = Ctor.precision;\r\n      rm = Ctor.rounding;\r\n    } else {\r\n      checkInt32(sd, 1, MAX_DIGITS);\r\n\r\n      if (rm === void 0) rm = Ctor.rounding;\r\n      else checkInt32(rm, 0, 8);\r\n    }\r\n\r\n    return round(new Ctor(x), sd, rm);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a string representing the value of this Decimal.\r\n   *\r\n   * Return exponential notation if this Decimal has a positive exponent equal to or greater than\r\n   * `toExpPos`, or a negative exponent equal to or less than `toExpNeg`.\r\n   *\r\n   */\r\n  P.toString = P.valueOf = P.val = P.toJSON = function () {\r\n    var x = this,\r\n      e = getBase10Exponent(x),\r\n      Ctor = x.constructor;\r\n\r\n    return toString(x, e <= Ctor.toExpNeg || e >= Ctor.toExpPos);\r\n  };\r\n\r\n\r\n  // Helper functions for Decimal.prototype (P) and/or Decimal methods, and their callers.\r\n\r\n\r\n  /*\r\n   *  add                 P.minus, P.plus\r\n   *  checkInt32          P.todp, P.toExponential, P.toFixed, P.toPrecision, P.tosd\r\n   *  digitsToString      P.log, P.sqrt, P.pow, toString, exp, ln\r\n   *  divide              P.div, P.idiv, P.log, P.mod, P.sqrt, exp, ln\r\n   *  exp                 P.exp, P.pow\r\n   *  getBase10Exponent   P.exponent, P.sd, P.toint, P.sqrt, P.todp, P.toFixed, P.toPrecision,\r\n   *                      P.toString, divide, round, toString, exp, ln\r\n   *  getLn10             P.log, ln\r\n   *  getZeroString       digitsToString, toString\r\n   *  ln                  P.log, P.ln, P.pow, exp\r\n   *  parseDecimal        Decimal\r\n   *  round               P.abs, P.idiv, P.log, P.minus, P.mod, P.neg, P.plus, P.toint, P.sqrt,\r\n   *                      P.times, P.todp, P.toExponential, P.toFixed, P.pow, P.toPrecision, P.tosd,\r\n   *                      divide, getLn10, exp, ln\r\n   *  subtract            P.minus, P.plus\r\n   *  toString            P.toExponential, P.toFixed, P.toPrecision, P.toString, P.valueOf\r\n   *  truncate            P.pow\r\n   *\r\n   *  Throws:             P.log, P.mod, P.sd, P.sqrt, P.pow,  checkInt32, divide, round,\r\n   *                      getLn10, exp, ln, parseDecimal, Decimal, config\r\n   */\r\n\r\n\r\n  function add(x, y) {\r\n    var carry, d, e, i, k, len, xd, yd,\r\n      Ctor = x.constructor,\r\n      pr = Ctor.precision;\r\n\r\n    // If either is zero...\r\n    if (!x.s || !y.s) {\r\n\r\n      // Return x if y is zero.\r\n      // Return y if y is non-zero.\r\n      if (!y.s) y = new Ctor(x);\r\n      return external ? round(y, pr) : y;\r\n    }\r\n\r\n    xd = x.d;\r\n    yd = y.d;\r\n\r\n    // x and y are finite, non-zero numbers with the same sign.\r\n\r\n    k = x.e;\r\n    e = y.e;\r\n    xd = xd.slice();\r\n    i = k - e;\r\n\r\n    // If base 1e7 exponents differ...\r\n    if (i) {\r\n      if (i < 0) {\r\n        d = xd;\r\n        i = -i;\r\n        len = yd.length;\r\n      } else {\r\n        d = yd;\r\n        e = k;\r\n        len = xd.length;\r\n      }\r\n\r\n      // Limit number of zeros prepended to max(ceil(pr / LOG_BASE), len) + 1.\r\n      k = Math.ceil(pr / LOG_BASE);\r\n      len = k > len ? k + 1 : len + 1;\r\n\r\n      if (i > len) {\r\n        i = len;\r\n        d.length = 1;\r\n      }\r\n\r\n      // Prepend zeros to equalise exponents. Note: Faster to use reverse then do unshifts.\r\n      d.reverse();\r\n      for (; i--;) d.push(0);\r\n      d.reverse();\r\n    }\r\n\r\n    len = xd.length;\r\n    i = yd.length;\r\n\r\n    // If yd is longer than xd, swap xd and yd so xd points to the longer array.\r\n    if (len - i < 0) {\r\n      i = len;\r\n      d = yd;\r\n      yd = xd;\r\n      xd = d;\r\n    }\r\n\r\n    // Only start adding at yd.length - 1 as the further digits of xd can be left as they are.\r\n    for (carry = 0; i;) {\r\n      carry = (xd[--i] = xd[i] + yd[i] + carry) / BASE | 0;\r\n      xd[i] %= BASE;\r\n    }\r\n\r\n    if (carry) {\r\n      xd.unshift(carry);\r\n      ++e;\r\n    }\r\n\r\n    // Remove trailing zeros.\r\n    // No need to check for zero, as +x + +y != 0 && -x + -y != 0\r\n    for (len = xd.length; xd[--len] == 0;) xd.pop();\r\n\r\n    y.d = xd;\r\n    y.e = e;\r\n\r\n    return external ? round(y, pr) : y;\r\n  }\r\n\r\n\r\n  function checkInt32(i, min, max) {\r\n    if (i !== ~~i || i < min || i > max) {\r\n      throw Error(invalidArgument + i);\r\n    }\r\n  }\r\n\r\n\r\n  function digitsToString(d) {\r\n    var i, k, ws,\r\n      indexOfLastWord = d.length - 1,\r\n      str = '',\r\n      w = d[0];\r\n\r\n    if (indexOfLastWord > 0) {\r\n      str += w;\r\n      for (i = 1; i < indexOfLastWord; i++) {\r\n        ws = d[i] + '';\r\n        k = LOG_BASE - ws.length;\r\n        if (k) str += getZeroString(k);\r\n        str += ws;\r\n      }\r\n\r\n      w = d[i];\r\n      ws = w + '';\r\n      k = LOG_BASE - ws.length;\r\n      if (k) str += getZeroString(k);\r\n    } else if (w === 0) {\r\n      return '0';\r\n    }\r\n\r\n    // Remove trailing zeros of last w.\r\n    for (; w % 10 === 0;) w /= 10;\r\n\r\n    return str + w;\r\n  }\r\n\r\n\r\n  var divide = (function () {\r\n\r\n    // Assumes non-zero x and k, and hence non-zero result.\r\n    function multiplyInteger(x, k) {\r\n      var temp,\r\n        carry = 0,\r\n        i = x.length;\r\n\r\n      for (x = x.slice(); i--;) {\r\n        temp = x[i] * k + carry;\r\n        x[i] = temp % BASE | 0;\r\n        carry = temp / BASE | 0;\r\n      }\r\n\r\n      if (carry) x.unshift(carry);\r\n\r\n      return x;\r\n    }\r\n\r\n    function compare(a, b, aL, bL) {\r\n      var i, r;\r\n\r\n      if (aL != bL) {\r\n        r = aL > bL ? 1 : -1;\r\n      } else {\r\n        for (i = r = 0; i < aL; i++) {\r\n          if (a[i] != b[i]) {\r\n            r = a[i] > b[i] ? 1 : -1;\r\n            break;\r\n          }\r\n        }\r\n      }\r\n\r\n      return r;\r\n    }\r\n\r\n    function subtract(a, b, aL) {\r\n      var i = 0;\r\n\r\n      // Subtract b from a.\r\n      for (; aL--;) {\r\n        a[aL] -= i;\r\n        i = a[aL] < b[aL] ? 1 : 0;\r\n        a[aL] = i * BASE + a[aL] - b[aL];\r\n      }\r\n\r\n      // Remove leading zeros.\r\n      for (; !a[0] && a.length > 1;) a.shift();\r\n    }\r\n\r\n    return function (x, y, pr, dp) {\r\n      var cmp, e, i, k, prod, prodL, q, qd, rem, remL, rem0, sd, t, xi, xL, yd0, yL, yz,\r\n        Ctor = x.constructor,\r\n        sign = x.s == y.s ? 1 : -1,\r\n        xd = x.d,\r\n        yd = y.d;\r\n\r\n      // Either 0?\r\n      if (!x.s) return new Ctor(x);\r\n      if (!y.s) throw Error(decimalError + 'Division by zero');\r\n\r\n      e = x.e - y.e;\r\n      yL = yd.length;\r\n      xL = xd.length;\r\n      q = new Ctor(sign);\r\n      qd = q.d = [];\r\n\r\n      // Result exponent may be one less than e.\r\n      for (i = 0; yd[i] == (xd[i] || 0); ) ++i;\r\n      if (yd[i] > (xd[i] || 0)) --e;\r\n\r\n      if (pr == null) {\r\n        sd = pr = Ctor.precision;\r\n      } else if (dp) {\r\n        sd = pr + (getBase10Exponent(x) - getBase10Exponent(y)) + 1;\r\n      } else {\r\n        sd = pr;\r\n      }\r\n\r\n      if (sd < 0) return new Ctor(0);\r\n\r\n      // Convert precision in number of base 10 digits to base 1e7 digits.\r\n      sd = sd / LOG_BASE + 2 | 0;\r\n      i = 0;\r\n\r\n      // divisor < 1e7\r\n      if (yL == 1) {\r\n        k = 0;\r\n        yd = yd[0];\r\n        sd++;\r\n\r\n        // k is the carry.\r\n        for (; (i < xL || k) && sd--; i++) {\r\n          t = k * BASE + (xd[i] || 0);\r\n          qd[i] = t / yd | 0;\r\n          k = t % yd | 0;\r\n        }\r\n\r\n      // divisor >= 1e7\r\n      } else {\r\n\r\n        // Normalise xd and yd so highest order digit of yd is >= BASE/2\r\n        k = BASE / (yd[0] + 1) | 0;\r\n\r\n        if (k > 1) {\r\n          yd = multiplyInteger(yd, k);\r\n          xd = multiplyInteger(xd, k);\r\n          yL = yd.length;\r\n          xL = xd.length;\r\n        }\r\n\r\n        xi = yL;\r\n        rem = xd.slice(0, yL);\r\n        remL = rem.length;\r\n\r\n        // Add zeros to make remainder as long as divisor.\r\n        for (; remL < yL;) rem[remL++] = 0;\r\n\r\n        yz = yd.slice();\r\n        yz.unshift(0);\r\n        yd0 = yd[0];\r\n\r\n        if (yd[1] >= BASE / 2) ++yd0;\r\n\r\n        do {\r\n          k = 0;\r\n\r\n          // Compare divisor and remainder.\r\n          cmp = compare(yd, rem, yL, remL);\r\n\r\n          // If divisor < remainder.\r\n          if (cmp < 0) {\r\n\r\n            // Calculate trial digit, k.\r\n            rem0 = rem[0];\r\n            if (yL != remL) rem0 = rem0 * BASE + (rem[1] || 0);\r\n\r\n            // k will be how many times the divisor goes into the current remainder.\r\n            k = rem0 / yd0 | 0;\r\n\r\n            //  Algorithm:\r\n            //  1. product = divisor * trial digit (k)\r\n            //  2. if product > remainder: product -= divisor, k--\r\n            //  3. remainder -= product\r\n            //  4. if product was < remainder at 2:\r\n            //    5. compare new remainder and divisor\r\n            //    6. If remainder > divisor: remainder -= divisor, k++\r\n\r\n            if (k > 1) {\r\n              if (k >= BASE) k = BASE - 1;\r\n\r\n              // product = divisor * trial digit.\r\n              prod = multiplyInteger(yd, k);\r\n              prodL = prod.length;\r\n              remL = rem.length;\r\n\r\n              // Compare product and remainder.\r\n              cmp = compare(prod, rem, prodL, remL);\r\n\r\n              // product > remainder.\r\n              if (cmp == 1) {\r\n                k--;\r\n\r\n                // Subtract divisor from product.\r\n                subtract(prod, yL < prodL ? yz : yd, prodL);\r\n              }\r\n            } else {\r\n\r\n              // cmp is -1.\r\n              // If k is 0, there is no need to compare yd and rem again below, so change cmp to 1\r\n              // to avoid it. If k is 1 there is a need to compare yd and rem again below.\r\n              if (k == 0) cmp = k = 1;\r\n              prod = yd.slice();\r\n            }\r\n\r\n            prodL = prod.length;\r\n            if (prodL < remL) prod.unshift(0);\r\n\r\n            // Subtract product from remainder.\r\n            subtract(rem, prod, remL);\r\n\r\n            // If product was < previous remainder.\r\n            if (cmp == -1) {\r\n              remL = rem.length;\r\n\r\n              // Compare divisor and new remainder.\r\n              cmp = compare(yd, rem, yL, remL);\r\n\r\n              // If divisor < new remainder, subtract divisor from remainder.\r\n              if (cmp < 1) {\r\n                k++;\r\n\r\n                // Subtract divisor from remainder.\r\n                subtract(rem, yL < remL ? yz : yd, remL);\r\n              }\r\n            }\r\n\r\n            remL = rem.length;\r\n          } else if (cmp === 0) {\r\n            k++;\r\n            rem = [0];\r\n          }    // if cmp === 1, k will be 0\r\n\r\n          // Add the next digit, k, to the result array.\r\n          qd[i++] = k;\r\n\r\n          // Update the remainder.\r\n          if (cmp && rem[0]) {\r\n            rem[remL++] = xd[xi] || 0;\r\n          } else {\r\n            rem = [xd[xi]];\r\n            remL = 1;\r\n          }\r\n\r\n        } while ((xi++ < xL || rem[0] !== void 0) && sd--);\r\n      }\r\n\r\n      // Leading zero?\r\n      if (!qd[0]) qd.shift();\r\n\r\n      q.e = e;\r\n\r\n      return round(q, dp ? pr + getBase10Exponent(q) + 1 : pr);\r\n    };\r\n  })();\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the natural exponential of `x` truncated to `sd`\r\n   * significant digits.\r\n   *\r\n   * Taylor/Maclaurin series.\r\n   *\r\n   * exp(x) = x^0/0! + x^1/1! + x^2/2! + x^3/3! + ...\r\n   *\r\n   * Argument reduction:\r\n   *   Repeat x = x / 32, k += 5, until |x| < 0.1\r\n   *   exp(x) = exp(x / 2^k)^(2^k)\r\n   *\r\n   * Previously, the argument was initially reduced by\r\n   * exp(x) = exp(r) * 10^k  where r = x - k * ln10, k = floor(x / ln10)\r\n   * to first put r in the range [0, ln10], before dividing by 32 until |x| < 0.1, but this was\r\n   * found to be slower than just dividing repeatedly by 32 as above.\r\n   *\r\n   * (Math object integer min/max: Math.exp(709) = 8.2e+307, Math.exp(-745) = 5e-324)\r\n   *\r\n   *  exp(x) is non-terminating for any finite, non-zero x.\r\n   *\r\n   */\r\n  function exp(x, sd) {\r\n    var denominator, guard, pow, sum, t, wpr,\r\n      i = 0,\r\n      k = 0,\r\n      Ctor = x.constructor,\r\n      pr = Ctor.precision;\r\n\r\n    if (getBase10Exponent(x) > 16) throw Error(exponentOutOfRange + getBase10Exponent(x));\r\n\r\n    // exp(0) = 1\r\n    if (!x.s) return new Ctor(ONE);\r\n\r\n    if (sd == null) {\r\n      external = false;\r\n      wpr = pr;\r\n    } else {\r\n      wpr = sd;\r\n    }\r\n\r\n    t = new Ctor(0.03125);\r\n\r\n    while (x.abs().gte(0.1)) {\r\n      x = x.times(t);    // x = x / 2^5\r\n      k += 5;\r\n    }\r\n\r\n    // Estimate the precision increase necessary to ensure the first 4 rounding digits are correct.\r\n    guard = Math.log(mathpow(2, k)) / Math.LN10 * 2 + 5 | 0;\r\n    wpr += guard;\r\n    denominator = pow = sum = new Ctor(ONE);\r\n    Ctor.precision = wpr;\r\n\r\n    for (;;) {\r\n      pow = round(pow.times(x), wpr);\r\n      denominator = denominator.times(++i);\r\n      t = sum.plus(divide(pow, denominator, wpr));\r\n\r\n      if (digitsToString(t.d).slice(0, wpr) === digitsToString(sum.d).slice(0, wpr)) {\r\n        while (k--) sum = round(sum.times(sum), wpr);\r\n        Ctor.precision = pr;\r\n        return sd == null ? (external = true, round(sum, pr)) : sum;\r\n      }\r\n\r\n      sum = t;\r\n    }\r\n  }\r\n\r\n\r\n  // Calculate the base 10 exponent from the base 1e7 exponent.\r\n  function getBase10Exponent(x) {\r\n    var e = x.e * LOG_BASE,\r\n      w = x.d[0];\r\n\r\n    // Add the number of digits of the first word of the digits array.\r\n    for (; w >= 10; w /= 10) e++;\r\n    return e;\r\n  }\r\n\r\n\r\n  function getLn10(Ctor, sd, pr) {\r\n\r\n    if (sd > Ctor.LN10.sd()) {\r\n\r\n\r\n      // Reset global state in case the exception is caught.\r\n      external = true;\r\n      if (pr) Ctor.precision = pr;\r\n      throw Error(decimalError + 'LN10 precision limit exceeded');\r\n    }\r\n\r\n    return round(new Ctor(Ctor.LN10), sd);\r\n  }\r\n\r\n\r\n  function getZeroString(k) {\r\n    var zs = '';\r\n    for (; k--;) zs += '0';\r\n    return zs;\r\n  }\r\n\r\n\r\n  /*\r\n   * Return a new Decimal whose value is the natural logarithm of `x` truncated to `sd` significant\r\n   * digits.\r\n   *\r\n   *  ln(n) is non-terminating (n != 1)\r\n   *\r\n   */\r\n  function ln(y, sd) {\r\n    var c, c0, denominator, e, numerator, sum, t, wpr, x2,\r\n      n = 1,\r\n      guard = 10,\r\n      x = y,\r\n      xd = x.d,\r\n      Ctor = x.constructor,\r\n      pr = Ctor.precision;\r\n\r\n    // ln(-x) = NaN\r\n    // ln(0) = -Infinity\r\n    if (x.s < 1) throw Error(decimalError + (x.s ? 'NaN' : '-Infinity'));\r\n\r\n    // ln(1) = 0\r\n    if (x.eq(ONE)) return new Ctor(0);\r\n\r\n    if (sd == null) {\r\n      external = false;\r\n      wpr = pr;\r\n    } else {\r\n      wpr = sd;\r\n    }\r\n\r\n    if (x.eq(10)) {\r\n      if (sd == null) external = true;\r\n      return getLn10(Ctor, wpr);\r\n    }\r\n\r\n    wpr += guard;\r\n    Ctor.precision = wpr;\r\n    c = digitsToString(xd);\r\n    c0 = c.charAt(0);\r\n    e = getBase10Exponent(x);\r\n\r\n    if (Math.abs(e) < 1.5e15) {\r\n\r\n      // Argument reduction.\r\n      // The series converges faster the closer the argument is to 1, so using\r\n      // ln(a^b) = b * ln(a),   ln(a) = ln(a^b) / b\r\n      // multiply the argument by itself until the leading digits of the significand are 7, 8, 9,\r\n      // 10, 11, 12 or 13, recording the number of multiplications so the sum of the series can\r\n      // later be divided by this number, then separate out the power of 10 using\r\n      // ln(a*10^b) = ln(a) + b*ln(10).\r\n\r\n      // max n is 21 (gives 0.9, 1.0 or 1.1) (9e15 / 21 = 4.2e14).\r\n      //while (c0 < 9 && c0 != 1 || c0 == 1 && c.charAt(1) > 1) {\r\n      // max n is 6 (gives 0.7 - 1.3)\r\n      while (c0 < 7 && c0 != 1 || c0 == 1 && c.charAt(1) > 3) {\r\n        x = x.times(y);\r\n        c = digitsToString(x.d);\r\n        c0 = c.charAt(0);\r\n        n++;\r\n      }\r\n\r\n      e = getBase10Exponent(x);\r\n\r\n      if (c0 > 1) {\r\n        x = new Ctor('0.' + c);\r\n        e++;\r\n      } else {\r\n        x = new Ctor(c0 + '.' + c.slice(1));\r\n      }\r\n    } else {\r\n\r\n      // The argument reduction method above may result in overflow if the argument y is a massive\r\n      // number with exponent >= 1500000000000000 (9e15 / 6 = 1.5e15), so instead recall this\r\n      // function using ln(x*10^e) = ln(x) + e*ln(10).\r\n      t = getLn10(Ctor, wpr + 2, pr).times(e + '');\r\n      x = ln(new Ctor(c0 + '.' + c.slice(1)), wpr - guard).plus(t);\r\n\r\n      Ctor.precision = pr;\r\n      return sd == null ? (external = true, round(x, pr)) : x;\r\n    }\r\n\r\n    // x is reduced to a value near 1.\r\n\r\n    // Taylor series.\r\n    // ln(y) = ln((1 + x)/(1 - x)) = 2(x + x^3/3 + x^5/5 + x^7/7 + ...)\r\n    // where x = (y - 1)/(y + 1)    (|x| < 1)\r\n    sum = numerator = x = divide(x.minus(ONE), x.plus(ONE), wpr);\r\n    x2 = round(x.times(x), wpr);\r\n    denominator = 3;\r\n\r\n    for (;;) {\r\n      numerator = round(numerator.times(x2), wpr);\r\n      t = sum.plus(divide(numerator, new Ctor(denominator), wpr));\r\n\r\n      if (digitsToString(t.d).slice(0, wpr) === digitsToString(sum.d).slice(0, wpr)) {\r\n        sum = sum.times(2);\r\n\r\n        // Reverse the argument reduction.\r\n        if (e !== 0) sum = sum.plus(getLn10(Ctor, wpr + 2, pr).times(e + ''));\r\n        sum = divide(sum, new Ctor(n), wpr);\r\n\r\n        Ctor.precision = pr;\r\n        return sd == null ? (external = true, round(sum, pr)) : sum;\r\n      }\r\n\r\n      sum = t;\r\n      denominator += 2;\r\n    }\r\n  }\r\n\r\n\r\n  /*\r\n   * Parse the value of a new Decimal `x` from string `str`.\r\n   */\r\n  function parseDecimal(x, str) {\r\n    var e, i, len;\r\n\r\n    // Decimal point?\r\n    if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');\r\n\r\n    // Exponential form?\r\n    if ((i = str.search(/e/i)) > 0) {\r\n\r\n      // Determine exponent.\r\n      if (e < 0) e = i;\r\n      e += +str.slice(i + 1);\r\n      str = str.substring(0, i);\r\n    } else if (e < 0) {\r\n\r\n      // Integer.\r\n      e = str.length;\r\n    }\r\n\r\n    // Determine leading zeros.\r\n    for (i = 0; str.charCodeAt(i) === 48;) ++i;\r\n\r\n    // Determine trailing zeros.\r\n    for (len = str.length; str.charCodeAt(len - 1) === 48;) --len;\r\n    str = str.slice(i, len);\r\n\r\n    if (str) {\r\n      len -= i;\r\n      e = e - i - 1;\r\n      x.e = mathfloor(e / LOG_BASE);\r\n      x.d = [];\r\n\r\n      // Transform base\r\n\r\n      // e is the base 10 exponent.\r\n      // i is where to slice str to get the first word of the digits array.\r\n      i = (e + 1) % LOG_BASE;\r\n      if (e < 0) i += LOG_BASE;\r\n\r\n      if (i < len) {\r\n        if (i) x.d.push(+str.slice(0, i));\r\n        for (len -= LOG_BASE; i < len;) x.d.push(+str.slice(i, i += LOG_BASE));\r\n        str = str.slice(i);\r\n        i = LOG_BASE - str.length;\r\n      } else {\r\n        i -= len;\r\n      }\r\n\r\n      for (; i--;) str += '0';\r\n      x.d.push(+str);\r\n\r\n      if (external && (x.e > MAX_E || x.e < -MAX_E)) throw Error(exponentOutOfRange + e);\r\n    } else {\r\n\r\n      // Zero.\r\n      x.s = 0;\r\n      x.e = 0;\r\n      x.d = [0];\r\n    }\r\n\r\n    return x;\r\n  }\r\n\r\n\r\n  /*\r\n   * Round `x` to `sd` significant digits, using rounding mode `rm` if present (truncate otherwise).\r\n   */\r\n   function round(x, sd, rm) {\r\n    var i, j, k, n, rd, doRound, w, xdi,\r\n      xd = x.d;\r\n\r\n    // rd: the rounding digit, i.e. the digit after the digit that may be rounded up.\r\n    // w: the word of xd which contains the rounding digit, a base 1e7 number.\r\n    // xdi: the index of w within xd.\r\n    // n: the number of digits of w.\r\n    // i: what would be the index of rd within w if all the numbers were 7 digits long (i.e. if\r\n    // they had leading zeros)\r\n    // j: if > 0, the actual index of rd within w (if < 0, rd is a leading zero).\r\n\r\n    // Get the length of the first word of the digits array xd.\r\n    for (n = 1, k = xd[0]; k >= 10; k /= 10) n++;\r\n    i = sd - n;\r\n\r\n    // Is the rounding digit in the first word of xd?\r\n    if (i < 0) {\r\n      i += LOG_BASE;\r\n      j = sd;\r\n      w = xd[xdi = 0];\r\n    } else {\r\n      xdi = Math.ceil((i + 1) / LOG_BASE);\r\n      k = xd.length;\r\n      if (xdi >= k) return x;\r\n      w = k = xd[xdi];\r\n\r\n      // Get the number of digits of w.\r\n      for (n = 1; k >= 10; k /= 10) n++;\r\n\r\n      // Get the index of rd within w.\r\n      i %= LOG_BASE;\r\n\r\n      // Get the index of rd within w, adjusted for leading zeros.\r\n      // The number of leading zeros of w is given by LOG_BASE - n.\r\n      j = i - LOG_BASE + n;\r\n    }\r\n\r\n    if (rm !== void 0) {\r\n      k = mathpow(10, n - j - 1);\r\n\r\n      // Get the rounding digit at index j of w.\r\n      rd = w / k % 10 | 0;\r\n\r\n      // Are there any non-zero digits after the rounding digit?\r\n      doRound = sd < 0 || xd[xdi + 1] !== void 0 || w % k;\r\n\r\n      // The expression `w % mathpow(10, n - j - 1)` returns all the digits of w to the right of the\r\n      // digit at (left-to-right) index j, e.g. if w is 908714 and j is 2, the expression will give\r\n      // 714.\r\n\r\n      doRound = rm < 4\r\n        ? (rd || doRound) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))\r\n        : rd > 5 || rd == 5 && (rm == 4 || doRound || rm == 6 &&\r\n\r\n          // Check whether the digit to the left of the rounding digit is odd.\r\n          ((i > 0 ? j > 0 ? w / mathpow(10, n - j) : 0 : xd[xdi - 1]) % 10) & 1 ||\r\n            rm == (x.s < 0 ? 8 : 7));\r\n    }\r\n\r\n    if (sd < 1 || !xd[0]) {\r\n      if (doRound) {\r\n        k = getBase10Exponent(x);\r\n        xd.length = 1;\r\n\r\n        // Convert sd to decimal places.\r\n        sd = sd - k - 1;\r\n\r\n        // 1, 0.1, 0.01, 0.001, 0.0001 etc.\r\n        xd[0] = mathpow(10, (LOG_BASE - sd % LOG_BASE) % LOG_BASE);\r\n        x.e = mathfloor(-sd / LOG_BASE) || 0;\r\n      } else {\r\n        xd.length = 1;\r\n\r\n        // Zero.\r\n        xd[0] = x.e = x.s = 0;\r\n      }\r\n\r\n      return x;\r\n    }\r\n\r\n    // Remove excess digits.\r\n    if (i == 0) {\r\n      xd.length = xdi;\r\n      k = 1;\r\n      xdi--;\r\n    } else {\r\n      xd.length = xdi + 1;\r\n      k = mathpow(10, LOG_BASE - i);\r\n\r\n      // E.g. 56700 becomes 56000 if 7 is the rounding digit.\r\n      // j > 0 means i > number of leading zeros of w.\r\n      xd[xdi] = j > 0 ? (w / mathpow(10, n - j) % mathpow(10, j) | 0) * k : 0;\r\n    }\r\n\r\n    if (doRound) {\r\n      for (;;) {\r\n\r\n        // Is the digit to be rounded up in the first word of xd?\r\n        if (xdi == 0) {\r\n          if ((xd[0] += k) == BASE) {\r\n            xd[0] = 1;\r\n            ++x.e;\r\n          }\r\n\r\n          break;\r\n        } else {\r\n          xd[xdi] += k;\r\n          if (xd[xdi] != BASE) break;\r\n          xd[xdi--] = 0;\r\n          k = 1;\r\n        }\r\n      }\r\n    }\r\n\r\n    // Remove trailing zeros.\r\n    for (i = xd.length; xd[--i] === 0;) xd.pop();\r\n\r\n    if (external && (x.e > MAX_E || x.e < -MAX_E)) {\r\n      throw Error(exponentOutOfRange + getBase10Exponent(x));\r\n    }\r\n\r\n    return x;\r\n  }\r\n\r\n\r\n  function subtract(x, y) {\r\n    var d, e, i, j, k, len, xd, xe, xLTy, yd,\r\n      Ctor = x.constructor,\r\n      pr = Ctor.precision;\r\n\r\n    // Return y negated if x is zero.\r\n    // Return x if y is zero and x is non-zero.\r\n    if (!x.s || !y.s) {\r\n      if (y.s) y.s = -y.s;\r\n      else y = new Ctor(x);\r\n      return external ? round(y, pr) : y;\r\n    }\r\n\r\n    xd = x.d;\r\n    yd = y.d;\r\n\r\n    // x and y are non-zero numbers with the same sign.\r\n\r\n    e = y.e;\r\n    xe = x.e;\r\n    xd = xd.slice();\r\n    k = xe - e;\r\n\r\n    // If exponents differ...\r\n    if (k) {\r\n      xLTy = k < 0;\r\n\r\n      if (xLTy) {\r\n        d = xd;\r\n        k = -k;\r\n        len = yd.length;\r\n      } else {\r\n        d = yd;\r\n        e = xe;\r\n        len = xd.length;\r\n      }\r\n\r\n      // Numbers with massively different exponents would result in a very high number of zeros\r\n      // needing to be prepended, but this can be avoided while still ensuring correct rounding by\r\n      // limiting the number of zeros to `Math.ceil(pr / LOG_BASE) + 2`.\r\n      i = Math.max(Math.ceil(pr / LOG_BASE), len) + 2;\r\n\r\n      if (k > i) {\r\n        k = i;\r\n        d.length = 1;\r\n      }\r\n\r\n      // Prepend zeros to equalise exponents.\r\n      d.reverse();\r\n      for (i = k; i--;) d.push(0);\r\n      d.reverse();\r\n\r\n    // Base 1e7 exponents equal.\r\n    } else {\r\n\r\n      // Check digits to determine which is the bigger number.\r\n\r\n      i = xd.length;\r\n      len = yd.length;\r\n      xLTy = i < len;\r\n      if (xLTy) len = i;\r\n\r\n      for (i = 0; i < len; i++) {\r\n        if (xd[i] != yd[i]) {\r\n          xLTy = xd[i] < yd[i];\r\n          break;\r\n        }\r\n      }\r\n\r\n      k = 0;\r\n    }\r\n\r\n    if (xLTy) {\r\n      d = xd;\r\n      xd = yd;\r\n      yd = d;\r\n      y.s = -y.s;\r\n    }\r\n\r\n    len = xd.length;\r\n\r\n    // Append zeros to xd if shorter.\r\n    // Don't add zeros to yd if shorter as subtraction only needs to start at yd length.\r\n    for (i = yd.length - len; i > 0; --i) xd[len++] = 0;\r\n\r\n    // Subtract yd from xd.\r\n    for (i = yd.length; i > k;) {\r\n      if (xd[--i] < yd[i]) {\r\n        for (j = i; j && xd[--j] === 0;) xd[j] = BASE - 1;\r\n        --xd[j];\r\n        xd[i] += BASE;\r\n      }\r\n\r\n      xd[i] -= yd[i];\r\n    }\r\n\r\n    // Remove trailing zeros.\r\n    for (; xd[--len] === 0;) xd.pop();\r\n\r\n    // Remove leading zeros and adjust exponent accordingly.\r\n    for (; xd[0] === 0; xd.shift()) --e;\r\n\r\n    // Zero?\r\n    if (!xd[0]) return new Ctor(0);\r\n\r\n    y.d = xd;\r\n    y.e = e;\r\n\r\n    //return external && xd.length >= pr / LOG_BASE ? round(y, pr) : y;\r\n    return external ? round(y, pr) : y;\r\n  }\r\n\r\n\r\n  function toString(x, isExp, sd) {\r\n    var k,\r\n      e = getBase10Exponent(x),\r\n      str = digitsToString(x.d),\r\n      len = str.length;\r\n\r\n    if (isExp) {\r\n      if (sd && (k = sd - len) > 0) {\r\n        str = str.charAt(0) + '.' + str.slice(1) + getZeroString(k);\r\n      } else if (len > 1) {\r\n        str = str.charAt(0) + '.' + str.slice(1);\r\n      }\r\n\r\n      str = str + (e < 0 ? 'e' : 'e+') + e;\r\n    } else if (e < 0) {\r\n      str = '0.' + getZeroString(-e - 1) + str;\r\n      if (sd && (k = sd - len) > 0) str += getZeroString(k);\r\n    } else if (e >= len) {\r\n      str += getZeroString(e + 1 - len);\r\n      if (sd && (k = sd - e - 1) > 0) str = str + '.' + getZeroString(k);\r\n    } else {\r\n      if ((k = e + 1) < len) str = str.slice(0, k) + '.' + str.slice(k);\r\n      if (sd && (k = sd - len) > 0) {\r\n        if (e + 1 === len) str += '.';\r\n        str += getZeroString(k);\r\n      }\r\n    }\r\n\r\n    return x.s < 0 ? '-' + str : str;\r\n  }\r\n\r\n\r\n  // Does not strip trailing zeros.\r\n  function truncate(arr, len) {\r\n    if (arr.length > len) {\r\n      arr.length = len;\r\n      return true;\r\n    }\r\n  }\r\n\r\n\r\n  // Decimal methods\r\n\r\n\r\n  /*\r\n   *  clone\r\n   *  config/set\r\n   */\r\n\r\n\r\n  /*\r\n   * Create and return a Decimal constructor with the same configuration properties as this Decimal\r\n   * constructor.\r\n   *\r\n   */\r\n  function clone(obj) {\r\n    var i, p, ps;\r\n\r\n    /*\r\n     * The Decimal constructor and exported function.\r\n     * Return a new Decimal instance.\r\n     *\r\n     * value {number|string|Decimal} A numeric value.\r\n     *\r\n     */\r\n    function Decimal(value) {\r\n      var x = this;\r\n\r\n      // Decimal called without new.\r\n      if (!(x instanceof Decimal)) return new Decimal(value);\r\n\r\n      // Retain a reference to this Decimal constructor, and shadow Decimal.prototype.constructor\r\n      // which points to Object.\r\n      x.constructor = Decimal;\r\n\r\n      // Duplicate.\r\n      if (value instanceof Decimal) {\r\n        x.s = value.s;\r\n        x.e = value.e;\r\n        x.d = (value = value.d) ? value.slice() : value;\r\n        return;\r\n      }\r\n\r\n      if (typeof value === 'number') {\r\n\r\n        // Reject Infinity/NaN.\r\n        if (value * 0 !== 0) {\r\n          throw Error(invalidArgument + value);\r\n        }\r\n\r\n        if (value > 0) {\r\n          x.s = 1;\r\n        } else if (value < 0) {\r\n          value = -value;\r\n          x.s = -1;\r\n        } else {\r\n          x.s = 0;\r\n          x.e = 0;\r\n          x.d = [0];\r\n          return;\r\n        }\r\n\r\n        // Fast path for small integers.\r\n        if (value === ~~value && value < 1e7) {\r\n          x.e = 0;\r\n          x.d = [value];\r\n          return;\r\n        }\r\n\r\n        return parseDecimal(x, value.toString());\r\n      } else if (typeof value !== 'string') {\r\n        throw Error(invalidArgument + value);\r\n      }\r\n\r\n      // Minus sign?\r\n      if (value.charCodeAt(0) === 45) {\r\n        value = value.slice(1);\r\n        x.s = -1;\r\n      } else {\r\n        x.s = 1;\r\n      }\r\n\r\n      if (isDecimal.test(value)) parseDecimal(x, value);\r\n      else throw Error(invalidArgument + value);\r\n    }\r\n\r\n    Decimal.prototype = P;\r\n\r\n    Decimal.ROUND_UP = 0;\r\n    Decimal.ROUND_DOWN = 1;\r\n    Decimal.ROUND_CEIL = 2;\r\n    Decimal.ROUND_FLOOR = 3;\r\n    Decimal.ROUND_HALF_UP = 4;\r\n    Decimal.ROUND_HALF_DOWN = 5;\r\n    Decimal.ROUND_HALF_EVEN = 6;\r\n    Decimal.ROUND_HALF_CEIL = 7;\r\n    Decimal.ROUND_HALF_FLOOR = 8;\r\n\r\n    Decimal.clone = clone;\r\n    Decimal.config = Decimal.set = config;\r\n\r\n    if (obj === void 0) obj = {};\r\n    if (obj) {\r\n      ps = ['precision', 'rounding', 'toExpNeg', 'toExpPos', 'LN10'];\r\n      for (i = 0; i < ps.length;) if (!obj.hasOwnProperty(p = ps[i++])) obj[p] = this[p];\r\n    }\r\n\r\n    Decimal.config(obj);\r\n\r\n    return Decimal;\r\n  }\r\n\r\n\r\n  /*\r\n   * Configure global settings for a Decimal constructor.\r\n   *\r\n   * `obj` is an object with one or more of the following properties,\r\n   *\r\n   *   precision  {number}\r\n   *   rounding   {number}\r\n   *   toExpNeg   {number}\r\n   *   toExpPos   {number}\r\n   *\r\n   * E.g. Decimal.config({ precision: 20, rounding: 4 })\r\n   *\r\n   */\r\n  function config(obj) {\r\n    if (!obj || typeof obj !== 'object') {\r\n      throw Error(decimalError + 'Object expected');\r\n    }\r\n    var i, p, v,\r\n      ps = [\r\n        'precision', 1, MAX_DIGITS,\r\n        'rounding', 0, 8,\r\n        'toExpNeg', -1 / 0, 0,\r\n        'toExpPos', 0, 1 / 0\r\n      ];\r\n\r\n    for (i = 0; i < ps.length; i += 3) {\r\n      if ((v = obj[p = ps[i]]) !== void 0) {\r\n        if (mathfloor(v) === v && v >= ps[i + 1] && v <= ps[i + 2]) this[p] = v;\r\n        else throw Error(invalidArgument + p + ': ' + v);\r\n      }\r\n    }\r\n\r\n    if ((v = obj[p = 'LN10']) !== void 0) {\r\n        if (v == Math.LN10) this[p] = new this(v);\r\n        else throw Error(invalidArgument + p + ': ' + v);\r\n    }\r\n\r\n    return this;\r\n  }\r\n\r\n\r\n  // Create and configure initial Decimal constructor.\r\n  Decimal = clone(Decimal);\r\n\r\n  Decimal['default'] = Decimal.Decimal = Decimal;\r\n\r\n  // Internal constant.\r\n  ONE = new Decimal(1);\r\n\r\n\r\n  // Export.\r\n\r\n\r\n  // AMD.\r\n  if (typeof define == 'function' && define.amd) {\r\n    define(function () {\r\n      return Decimal;\r\n    });\r\n\r\n  // Node and other environments that support module.exports.\r\n  } else if (typeof module != 'undefined' && module.exports) {\r\n    module.exports = Decimal;\r\n\r\n    // Browser.\r\n  } else {\r\n    if (!globalScope) {\r\n      globalScope = typeof self != 'undefined' && self && self.self == self\r\n        ? self : Function('return this')();\r\n    }\r\n\r\n    globalScope.Decimal = Decimal;\r\n  }\r\n})(this);\r\n","/*\r\n *  big.js v5.2.2\r\n *  A small, fast, easy-to-use library for arbitrary-precision decimal arithmetic.\r\n *  Copyright (c) 2018 Michael Mclaughlin <M8ch88l@gmail.com>\r\n *  https://github.com/MikeMcl/big.js/LICENCE\r\n */\r\n;(function (GLOBAL) {\r\n  'use strict';\r\n  var Big,\r\n\r\n\r\n/************************************** EDITABLE DEFAULTS *****************************************/\r\n\r\n\r\n    // The default values below must be integers within the stated ranges.\r\n\r\n    /*\r\n     * The maximum number of decimal places (DP) of the results of operations involving division:\r\n     * div and sqrt, and pow with negative exponents.\r\n     */\r\n    DP = 20,          // 0 to MAX_DP\r\n\r\n    /*\r\n     * The rounding mode (RM) used when rounding to the above decimal places.\r\n     *\r\n     *  0  Towards zero (i.e. truncate, no rounding).       (ROUND_DOWN)\r\n     *  1  To nearest neighbour. If equidistant, round up.  (ROUND_HALF_UP)\r\n     *  2  To nearest neighbour. If equidistant, to even.   (ROUND_HALF_EVEN)\r\n     *  3  Away from zero.                                  (ROUND_UP)\r\n     */\r\n    RM = 1,             // 0, 1, 2 or 3\r\n\r\n    // The maximum value of DP and Big.DP.\r\n    MAX_DP = 1E6,       // 0 to 1000000\r\n\r\n    // The maximum magnitude of the exponent argument to the pow method.\r\n    MAX_POWER = 1E6,    // 1 to 1000000\r\n\r\n    /*\r\n     * The negative exponent (NE) at and beneath which toString returns exponential notation.\r\n     * (JavaScript numbers: -7)\r\n     * -1000000 is the minimum recommended exponent value of a Big.\r\n     */\r\n    NE = -7,            // 0 to -1000000\r\n\r\n    /*\r\n     * The positive exponent (PE) at and above which toString returns exponential notation.\r\n     * (JavaScript numbers: 21)\r\n     * 1000000 is the maximum recommended exponent value of a Big.\r\n     * (This limit is not enforced or checked.)\r\n     */\r\n    PE = 21,            // 0 to 1000000\r\n\r\n\r\n/**************************************************************************************************/\r\n\r\n\r\n    // Error messages.\r\n    NAME = '[big.js] ',\r\n    INVALID = NAME + 'Invalid ',\r\n    INVALID_DP = INVALID + 'decimal places',\r\n    INVALID_RM = INVALID + 'rounding mode',\r\n    DIV_BY_ZERO = NAME + 'Division by zero',\r\n\r\n    // The shared prototype object.\r\n    P = {},\r\n    UNDEFINED = void 0,\r\n    NUMERIC = /^-?(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i;\r\n\r\n\r\n  /*\r\n   * Create and return a Big constructor.\r\n   *\r\n   */\r\n  function _Big_() {\r\n\r\n    /*\r\n     * The Big constructor and exported function.\r\n     * Create and return a new instance of a Big number object.\r\n     *\r\n     * n {number|string|Big} A numeric value.\r\n     */\r\n    function Big(n) {\r\n      var x = this;\r\n\r\n      // Enable constructor usage without new.\r\n      if (!(x instanceof Big)) return n === UNDEFINED ? _Big_() : new Big(n);\r\n\r\n      // Duplicate.\r\n      if (n instanceof Big) {\r\n        x.s = n.s;\r\n        x.e = n.e;\r\n        x.c = n.c.slice();\r\n      } else {\r\n        parse(x, n);\r\n      }\r\n\r\n      /*\r\n       * Retain a reference to this Big constructor, and shadow Big.prototype.constructor which\r\n       * points to Object.\r\n       */\r\n      x.constructor = Big;\r\n    }\r\n\r\n    Big.prototype = P;\r\n    Big.DP = DP;\r\n    Big.RM = RM;\r\n    Big.NE = NE;\r\n    Big.PE = PE;\r\n    Big.version = '5.2.2';\r\n\r\n    return Big;\r\n  }\r\n\r\n\r\n  /*\r\n   * Parse the number or string value passed to a Big constructor.\r\n   *\r\n   * x {Big} A Big number instance.\r\n   * n {number|string} A numeric value.\r\n   */\r\n  function parse(x, n) {\r\n    var e, i, nl;\r\n\r\n    // Minus zero?\r\n    if (n === 0 && 1 / n < 0) n = '-0';\r\n    else if (!NUMERIC.test(n += '')) throw Error(INVALID + 'number');\r\n\r\n    // Determine sign.\r\n    x.s = n.charAt(0) == '-' ? (n = n.slice(1), -1) : 1;\r\n\r\n    // Decimal point?\r\n    if ((e = n.indexOf('.')) > -1) n = n.replace('.', '');\r\n\r\n    // Exponential form?\r\n    if ((i = n.search(/e/i)) > 0) {\r\n\r\n      // Determine exponent.\r\n      if (e < 0) e = i;\r\n      e += +n.slice(i + 1);\r\n      n = n.substring(0, i);\r\n    } else if (e < 0) {\r\n\r\n      // Integer.\r\n      e = n.length;\r\n    }\r\n\r\n    nl = n.length;\r\n\r\n    // Determine leading zeros.\r\n    for (i = 0; i < nl && n.charAt(i) == '0';) ++i;\r\n\r\n    if (i == nl) {\r\n\r\n      // Zero.\r\n      x.c = [x.e = 0];\r\n    } else {\r\n\r\n      // Determine trailing zeros.\r\n      for (; nl > 0 && n.charAt(--nl) == '0';);\r\n      x.e = e - i - 1;\r\n      x.c = [];\r\n\r\n      // Convert string to array of digits without leading/trailing zeros.\r\n      for (e = 0; i <= nl;) x.c[e++] = +n.charAt(i++);\r\n    }\r\n\r\n    return x;\r\n  }\r\n\r\n\r\n  /*\r\n   * Round Big x to a maximum of dp decimal places using rounding mode rm.\r\n   * Called by stringify, P.div, P.round and P.sqrt.\r\n   *\r\n   * x {Big} The Big to round.\r\n   * dp {number} Integer, 0 to MAX_DP inclusive.\r\n   * rm {number} 0, 1, 2 or 3 (DOWN, HALF_UP, HALF_EVEN, UP)\r\n   * [more] {boolean} Whether the result of division was truncated.\r\n   */\r\n  function round(x, dp, rm, more) {\r\n    var xc = x.c,\r\n      i = x.e + dp + 1;\r\n\r\n    if (i < xc.length) {\r\n      if (rm === 1) {\r\n\r\n        // xc[i] is the digit after the digit that may be rounded up.\r\n        more = xc[i] >= 5;\r\n      } else if (rm === 2) {\r\n        more = xc[i] > 5 || xc[i] == 5 &&\r\n          (more || i < 0 || xc[i + 1] !== UNDEFINED || xc[i - 1] & 1);\r\n      } else if (rm === 3) {\r\n        more = more || !!xc[0];\r\n      } else {\r\n        more = false;\r\n        if (rm !== 0) throw Error(INVALID_RM);\r\n      }\r\n\r\n      if (i < 1) {\r\n        xc.length = 1;\r\n\r\n        if (more) {\r\n\r\n          // 1, 0.1, 0.01, 0.001, 0.0001 etc.\r\n          x.e = -dp;\r\n          xc[0] = 1;\r\n        } else {\r\n\r\n          // Zero.\r\n          xc[0] = x.e = 0;\r\n        }\r\n      } else {\r\n\r\n        // Remove any digits after the required decimal places.\r\n        xc.length = i--;\r\n\r\n        // Round up?\r\n        if (more) {\r\n\r\n          // Rounding up may mean the previous digit has to be rounded up.\r\n          for (; ++xc[i] > 9;) {\r\n            xc[i] = 0;\r\n            if (!i--) {\r\n              ++x.e;\r\n              xc.unshift(1);\r\n            }\r\n          }\r\n        }\r\n\r\n        // Remove trailing zeros.\r\n        for (i = xc.length; !xc[--i];) xc.pop();\r\n      }\r\n    } else if (rm < 0 || rm > 3 || rm !== ~~rm) {\r\n      throw Error(INVALID_RM);\r\n    }\r\n\r\n    return x;\r\n  }\r\n\r\n\r\n  /*\r\n   * Return a string representing the value of Big x in normal or exponential notation.\r\n   * Handles P.toExponential, P.toFixed, P.toJSON, P.toPrecision, P.toString and P.valueOf.\r\n   *\r\n   * x {Big}\r\n   * id? {number} Caller id.\r\n   *         1 toExponential\r\n   *         2 toFixed\r\n   *         3 toPrecision\r\n   *         4 valueOf\r\n   * n? {number|undefined} Caller's argument.\r\n   * k? {number|undefined}\r\n   */\r\n  function stringify(x, id, n, k) {\r\n    var e, s,\r\n      Big = x.constructor,\r\n      z = !x.c[0];\r\n\r\n    if (n !== UNDEFINED) {\r\n      if (n !== ~~n || n < (id == 3) || n > MAX_DP) {\r\n        throw Error(id == 3 ? INVALID + 'precision' : INVALID_DP);\r\n      }\r\n\r\n      x = new Big(x);\r\n\r\n      // The index of the digit that may be rounded up.\r\n      n = k - x.e;\r\n\r\n      // Round?\r\n      if (x.c.length > ++k) round(x, n, Big.RM);\r\n\r\n      // toFixed: recalculate k as x.e may have changed if value rounded up.\r\n      if (id == 2) k = x.e + n + 1;\r\n\r\n      // Append zeros?\r\n      for (; x.c.length < k;) x.c.push(0);\r\n    }\r\n\r\n    e = x.e;\r\n    s = x.c.join('');\r\n    n = s.length;\r\n\r\n    // Exponential notation?\r\n    if (id != 2 && (id == 1 || id == 3 && k <= e || e <= Big.NE || e >= Big.PE)) {\r\n      s = s.charAt(0) + (n > 1 ? '.' + s.slice(1) : '') + (e < 0 ? 'e' : 'e+') + e;\r\n\r\n    // Normal notation.\r\n    } else if (e < 0) {\r\n      for (; ++e;) s = '0' + s;\r\n      s = '0.' + s;\r\n    } else if (e > 0) {\r\n      if (++e > n) for (e -= n; e--;) s += '0';\r\n      else if (e < n) s = s.slice(0, e) + '.' + s.slice(e);\r\n    } else if (n > 1) {\r\n      s = s.charAt(0) + '.' + s.slice(1);\r\n    }\r\n\r\n    return x.s < 0 && (!z || id == 4) ? '-' + s : s;\r\n  }\r\n\r\n\r\n  // Prototype/instance methods\r\n\r\n\r\n  /*\r\n   * Return a new Big whose value is the absolute value of this Big.\r\n   */\r\n  P.abs = function () {\r\n    var x = new this.constructor(this);\r\n    x.s = 1;\r\n    return x;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return 1 if the value of this Big is greater than the value of Big y,\r\n   *       -1 if the value of this Big is less than the value of Big y, or\r\n   *        0 if they have the same value.\r\n  */\r\n  P.cmp = function (y) {\r\n    var isneg,\r\n      x = this,\r\n      xc = x.c,\r\n      yc = (y = new x.constructor(y)).c,\r\n      i = x.s,\r\n      j = y.s,\r\n      k = x.e,\r\n      l = y.e;\r\n\r\n    // Either zero?\r\n    if (!xc[0] || !yc[0]) return !xc[0] ? !yc[0] ? 0 : -j : i;\r\n\r\n    // Signs differ?\r\n    if (i != j) return i;\r\n\r\n    isneg = i < 0;\r\n\r\n    // Compare exponents.\r\n    if (k != l) return k > l ^ isneg ? 1 : -1;\r\n\r\n    j = (k = xc.length) < (l = yc.length) ? k : l;\r\n\r\n    // Compare digit by digit.\r\n    for (i = -1; ++i < j;) {\r\n      if (xc[i] != yc[i]) return xc[i] > yc[i] ^ isneg ? 1 : -1;\r\n    }\r\n\r\n    // Compare lengths.\r\n    return k == l ? 0 : k > l ^ isneg ? 1 : -1;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Big whose value is the value of this Big divided by the value of Big y, rounded,\r\n   * if necessary, to a maximum of Big.DP decimal places using rounding mode Big.RM.\r\n   */\r\n  P.div = function (y) {\r\n    var x = this,\r\n      Big = x.constructor,\r\n      a = x.c,                  // dividend\r\n      b = (y = new Big(y)).c,   // divisor\r\n      k = x.s == y.s ? 1 : -1,\r\n      dp = Big.DP;\r\n\r\n    if (dp !== ~~dp || dp < 0 || dp > MAX_DP) throw Error(INVALID_DP);\r\n\r\n    // Divisor is zero?\r\n    if (!b[0]) throw Error(DIV_BY_ZERO);\r\n\r\n    // Dividend is 0? Return +-0.\r\n    if (!a[0]) return new Big(k * 0);\r\n\r\n    var bl, bt, n, cmp, ri,\r\n      bz = b.slice(),\r\n      ai = bl = b.length,\r\n      al = a.length,\r\n      r = a.slice(0, bl),   // remainder\r\n      rl = r.length,\r\n      q = y,                // quotient\r\n      qc = q.c = [],\r\n      qi = 0,\r\n      d = dp + (q.e = x.e - y.e) + 1;    // number of digits of the result\r\n\r\n    q.s = k;\r\n    k = d < 0 ? 0 : d;\r\n\r\n    // Create version of divisor with leading zero.\r\n    bz.unshift(0);\r\n\r\n    // Add zeros to make remainder as long as divisor.\r\n    for (; rl++ < bl;) r.push(0);\r\n\r\n    do {\r\n\r\n      // n is how many times the divisor goes into current remainder.\r\n      for (n = 0; n < 10; n++) {\r\n\r\n        // Compare divisor and remainder.\r\n        if (bl != (rl = r.length)) {\r\n          cmp = bl > rl ? 1 : -1;\r\n        } else {\r\n          for (ri = -1, cmp = 0; ++ri < bl;) {\r\n            if (b[ri] != r[ri]) {\r\n              cmp = b[ri] > r[ri] ? 1 : -1;\r\n              break;\r\n            }\r\n          }\r\n        }\r\n\r\n        // If divisor < remainder, subtract divisor from remainder.\r\n        if (cmp < 0) {\r\n\r\n          // Remainder can't be more than 1 digit longer than divisor.\r\n          // Equalise lengths using divisor with extra leading zero?\r\n          for (bt = rl == bl ? b : bz; rl;) {\r\n            if (r[--rl] < bt[rl]) {\r\n              ri = rl;\r\n              for (; ri && !r[--ri];) r[ri] = 9;\r\n              --r[ri];\r\n              r[rl] += 10;\r\n            }\r\n            r[rl] -= bt[rl];\r\n          }\r\n\r\n          for (; !r[0];) r.shift();\r\n        } else {\r\n          break;\r\n        }\r\n      }\r\n\r\n      // Add the digit n to the result array.\r\n      qc[qi++] = cmp ? n : ++n;\r\n\r\n      // Update the remainder.\r\n      if (r[0] && cmp) r[rl] = a[ai] || 0;\r\n      else r = [a[ai]];\r\n\r\n    } while ((ai++ < al || r[0] !== UNDEFINED) && k--);\r\n\r\n    // Leading zero? Do not remove if result is simply zero (qi == 1).\r\n    if (!qc[0] && qi != 1) {\r\n\r\n      // There can't be more than one zero.\r\n      qc.shift();\r\n      q.e--;\r\n    }\r\n\r\n    // Round?\r\n    if (qi > d) round(q, dp, Big.RM, r[0] !== UNDEFINED);\r\n\r\n    return q;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this Big is equal to the value of Big y, otherwise return false.\r\n   */\r\n  P.eq = function (y) {\r\n    return !this.cmp(y);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this Big is greater than the value of Big y, otherwise return\r\n   * false.\r\n   */\r\n  P.gt = function (y) {\r\n    return this.cmp(y) > 0;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this Big is greater than or equal to the value of Big y, otherwise\r\n   * return false.\r\n   */\r\n  P.gte = function (y) {\r\n    return this.cmp(y) > -1;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this Big is less than the value of Big y, otherwise return false.\r\n   */\r\n  P.lt = function (y) {\r\n    return this.cmp(y) < 0;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this Big is less than or equal to the value of Big y, otherwise\r\n   * return false.\r\n   */\r\n  P.lte = function (y) {\r\n    return this.cmp(y) < 1;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Big whose value is the value of this Big minus the value of Big y.\r\n   */\r\n  P.minus = P.sub = function (y) {\r\n    var i, j, t, xlty,\r\n      x = this,\r\n      Big = x.constructor,\r\n      a = x.s,\r\n      b = (y = new Big(y)).s;\r\n\r\n    // Signs differ?\r\n    if (a != b) {\r\n      y.s = -b;\r\n      return x.plus(y);\r\n    }\r\n\r\n    var xc = x.c.slice(),\r\n      xe = x.e,\r\n      yc = y.c,\r\n      ye = y.e;\r\n\r\n    // Either zero?\r\n    if (!xc[0] || !yc[0]) {\r\n\r\n      // y is non-zero? x is non-zero? Or both are zero.\r\n      return yc[0] ? (y.s = -b, y) : new Big(xc[0] ? x : 0);\r\n    }\r\n\r\n    // Determine which is the bigger number. Prepend zeros to equalise exponents.\r\n    if (a = xe - ye) {\r\n\r\n      if (xlty = a < 0) {\r\n        a = -a;\r\n        t = xc;\r\n      } else {\r\n        ye = xe;\r\n        t = yc;\r\n      }\r\n\r\n      t.reverse();\r\n      for (b = a; b--;) t.push(0);\r\n      t.reverse();\r\n    } else {\r\n\r\n      // Exponents equal. Check digit by digit.\r\n      j = ((xlty = xc.length < yc.length) ? xc : yc).length;\r\n\r\n      for (a = b = 0; b < j; b++) {\r\n        if (xc[b] != yc[b]) {\r\n          xlty = xc[b] < yc[b];\r\n          break;\r\n        }\r\n      }\r\n    }\r\n\r\n    // x < y? Point xc to the array of the bigger number.\r\n    if (xlty) {\r\n      t = xc;\r\n      xc = yc;\r\n      yc = t;\r\n      y.s = -y.s;\r\n    }\r\n\r\n    /*\r\n     * Append zeros to xc if shorter. No need to add zeros to yc if shorter as subtraction only\r\n     * needs to start at yc.length.\r\n     */\r\n    if ((b = (j = yc.length) - (i = xc.length)) > 0) for (; b--;) xc[i++] = 0;\r\n\r\n    // Subtract yc from xc.\r\n    for (b = i; j > a;) {\r\n      if (xc[--j] < yc[j]) {\r\n        for (i = j; i && !xc[--i];) xc[i] = 9;\r\n        --xc[i];\r\n        xc[j] += 10;\r\n      }\r\n\r\n      xc[j] -= yc[j];\r\n    }\r\n\r\n    // Remove trailing zeros.\r\n    for (; xc[--b] === 0;) xc.pop();\r\n\r\n    // Remove leading zeros and adjust exponent accordingly.\r\n    for (; xc[0] === 0;) {\r\n      xc.shift();\r\n      --ye;\r\n    }\r\n\r\n    if (!xc[0]) {\r\n\r\n      // n - n = +0\r\n      y.s = 1;\r\n\r\n      // Result must be zero.\r\n      xc = [ye = 0];\r\n    }\r\n\r\n    y.c = xc;\r\n    y.e = ye;\r\n\r\n    return y;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Big whose value is the value of this Big modulo the value of Big y.\r\n   */\r\n  P.mod = function (y) {\r\n    var ygtx,\r\n      x = this,\r\n      Big = x.constructor,\r\n      a = x.s,\r\n      b = (y = new Big(y)).s;\r\n\r\n    if (!y.c[0]) throw Error(DIV_BY_ZERO);\r\n\r\n    x.s = y.s = 1;\r\n    ygtx = y.cmp(x) == 1;\r\n    x.s = a;\r\n    y.s = b;\r\n\r\n    if (ygtx) return new Big(x);\r\n\r\n    a = Big.DP;\r\n    b = Big.RM;\r\n    Big.DP = Big.RM = 0;\r\n    x = x.div(y);\r\n    Big.DP = a;\r\n    Big.RM = b;\r\n\r\n    return this.minus(x.times(y));\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Big whose value is the value of this Big plus the value of Big y.\r\n   */\r\n  P.plus = P.add = function (y) {\r\n    var t,\r\n      x = this,\r\n      Big = x.constructor,\r\n      a = x.s,\r\n      b = (y = new Big(y)).s;\r\n\r\n    // Signs differ?\r\n    if (a != b) {\r\n      y.s = -b;\r\n      return x.minus(y);\r\n    }\r\n\r\n    var xe = x.e,\r\n      xc = x.c,\r\n      ye = y.e,\r\n      yc = y.c;\r\n\r\n    // Either zero? y is non-zero? x is non-zero? Or both are zero.\r\n    if (!xc[0] || !yc[0]) return yc[0] ? y : new Big(xc[0] ? x : a * 0);\r\n\r\n    xc = xc.slice();\r\n\r\n    // Prepend zeros to equalise exponents.\r\n    // Note: reverse faster than unshifts.\r\n    if (a = xe - ye) {\r\n      if (a > 0) {\r\n        ye = xe;\r\n        t = yc;\r\n      } else {\r\n        a = -a;\r\n        t = xc;\r\n      }\r\n\r\n      t.reverse();\r\n      for (; a--;) t.push(0);\r\n      t.reverse();\r\n    }\r\n\r\n    // Point xc to the longer array.\r\n    if (xc.length - yc.length < 0) {\r\n      t = yc;\r\n      yc = xc;\r\n      xc = t;\r\n    }\r\n\r\n    a = yc.length;\r\n\r\n    // Only start adding at yc.length - 1 as the further digits of xc can be left as they are.\r\n    for (b = 0; a; xc[a] %= 10) b = (xc[--a] = xc[a] + yc[a] + b) / 10 | 0;\r\n\r\n    // No need to check for zero, as +x + +y != 0 && -x + -y != 0\r\n\r\n    if (b) {\r\n      xc.unshift(b);\r\n      ++ye;\r\n    }\r\n\r\n    // Remove trailing zeros.\r\n    for (a = xc.length; xc[--a] === 0;) xc.pop();\r\n\r\n    y.c = xc;\r\n    y.e = ye;\r\n\r\n    return y;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a Big whose value is the value of this Big raised to the power n.\r\n   * If n is negative, round to a maximum of Big.DP decimal places using rounding\r\n   * mode Big.RM.\r\n   *\r\n   * n {number} Integer, -MAX_POWER to MAX_POWER inclusive.\r\n   */\r\n  P.pow = function (n) {\r\n    var x = this,\r\n      one = new x.constructor(1),\r\n      y = one,\r\n      isneg = n < 0;\r\n\r\n    if (n !== ~~n || n < -MAX_POWER || n > MAX_POWER) throw Error(INVALID + 'exponent');\r\n    if (isneg) n = -n;\r\n\r\n    for (;;) {\r\n      if (n & 1) y = y.times(x);\r\n      n >>= 1;\r\n      if (!n) break;\r\n      x = x.times(x);\r\n    }\r\n\r\n    return isneg ? one.div(y) : y;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Big whose value is the value of this Big rounded using rounding mode rm\r\n   * to a maximum of dp decimal places, or, if dp is negative, to an integer which is a\r\n   * multiple of 10**-dp.\r\n   * If dp is not specified, round to 0 decimal places.\r\n   * If rm is not specified, use Big.RM.\r\n   *\r\n   * dp? {number} Integer, -MAX_DP to MAX_DP inclusive.\r\n   * rm? 0, 1, 2 or 3 (ROUND_DOWN, ROUND_HALF_UP, ROUND_HALF_EVEN, ROUND_UP)\r\n   */\r\n  P.round = function (dp, rm) {\r\n    var Big = this.constructor;\r\n    if (dp === UNDEFINED) dp = 0;\r\n    else if (dp !== ~~dp || dp < -MAX_DP || dp > MAX_DP) throw Error(INVALID_DP);\r\n    return round(new Big(this), dp, rm === UNDEFINED ? Big.RM : rm);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Big whose value is the square root of the value of this Big, rounded, if\r\n   * necessary, to a maximum of Big.DP decimal places using rounding mode Big.RM.\r\n   */\r\n  P.sqrt = function () {\r\n    var r, c, t,\r\n      x = this,\r\n      Big = x.constructor,\r\n      s = x.s,\r\n      e = x.e,\r\n      half = new Big(0.5);\r\n\r\n    // Zero?\r\n    if (!x.c[0]) return new Big(x);\r\n\r\n    // Negative?\r\n    if (s < 0) throw Error(NAME + 'No square root');\r\n\r\n    // Estimate.\r\n    s = Math.sqrt(x + '');\r\n\r\n    // Math.sqrt underflow/overflow?\r\n    // Re-estimate: pass x coefficient to Math.sqrt as integer, then adjust the result exponent.\r\n    if (s === 0 || s === 1 / 0) {\r\n      c = x.c.join('');\r\n      if (!(c.length + e & 1)) c += '0';\r\n      s = Math.sqrt(c);\r\n      e = ((e + 1) / 2 | 0) - (e < 0 || e & 1);\r\n      r = new Big((s == 1 / 0 ? '1e' : (s = s.toExponential()).slice(0, s.indexOf('e') + 1)) + e);\r\n    } else {\r\n      r = new Big(s);\r\n    }\r\n\r\n    e = r.e + (Big.DP += 4);\r\n\r\n    // Newton-Raphson iteration.\r\n    do {\r\n      t = r;\r\n      r = half.times(t.plus(x.div(t)));\r\n    } while (t.c.slice(0, e).join('') !== r.c.slice(0, e).join(''));\r\n\r\n    return round(r, Big.DP -= 4, Big.RM);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new Big whose value is the value of this Big times the value of Big y.\r\n   */\r\n  P.times = P.mul = function (y) {\r\n    var c,\r\n      x = this,\r\n      Big = x.constructor,\r\n      xc = x.c,\r\n      yc = (y = new Big(y)).c,\r\n      a = xc.length,\r\n      b = yc.length,\r\n      i = x.e,\r\n      j = y.e;\r\n\r\n    // Determine sign of result.\r\n    y.s = x.s == y.s ? 1 : -1;\r\n\r\n    // Return signed 0 if either 0.\r\n    if (!xc[0] || !yc[0]) return new Big(y.s * 0);\r\n\r\n    // Initialise exponent of result as x.e + y.e.\r\n    y.e = i + j;\r\n\r\n    // If array xc has fewer digits than yc, swap xc and yc, and lengths.\r\n    if (a < b) {\r\n      c = xc;\r\n      xc = yc;\r\n      yc = c;\r\n      j = a;\r\n      a = b;\r\n      b = j;\r\n    }\r\n\r\n    // Initialise coefficient array of result with zeros.\r\n    for (c = new Array(j = a + b); j--;) c[j] = 0;\r\n\r\n    // Multiply.\r\n\r\n    // i is initially xc.length.\r\n    for (i = b; i--;) {\r\n      b = 0;\r\n\r\n      // a is yc.length.\r\n      for (j = a + i; j > i;) {\r\n\r\n        // Current sum of products at this digit position, plus carry.\r\n        b = c[j] + yc[i] * xc[j - i - 1] + b;\r\n        c[j--] = b % 10;\r\n\r\n        // carry\r\n        b = b / 10 | 0;\r\n      }\r\n\r\n      c[j] = (c[j] + b) % 10;\r\n    }\r\n\r\n    // Increment result exponent if there is a final carry, otherwise remove leading zero.\r\n    if (b) ++y.e;\r\n    else c.shift();\r\n\r\n    // Remove trailing zeros.\r\n    for (i = c.length; !c[--i];) c.pop();\r\n    y.c = c;\r\n\r\n    return y;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a string representing the value of this Big in exponential notation to dp fixed decimal\r\n   * places and rounded using Big.RM.\r\n   *\r\n   * dp? {number} Integer, 0 to MAX_DP inclusive.\r\n   */\r\n  P.toExponential = function (dp) {\r\n    return stringify(this, 1, dp, dp);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a string representing the value of this Big in normal notation to dp fixed decimal\r\n   * places and rounded using Big.RM.\r\n   *\r\n   * dp? {number} Integer, 0 to MAX_DP inclusive.\r\n   *\r\n   * (-0).toFixed(0) is '0', but (-0.1).toFixed(0) is '-0'.\r\n   * (-0).toFixed(1) is '0.0', but (-0.01).toFixed(1) is '-0.0'.\r\n   */\r\n  P.toFixed = function (dp) {\r\n    return stringify(this, 2, dp, this.e + dp);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a string representing the value of this Big rounded to sd significant digits using\r\n   * Big.RM. Use exponential notation if sd is less than the number of digits necessary to represent\r\n   * the integer part of the value in normal notation.\r\n   *\r\n   * sd {number} Integer, 1 to MAX_DP inclusive.\r\n   */\r\n  P.toPrecision = function (sd) {\r\n    return stringify(this, 3, sd, sd - 1);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a string representing the value of this Big.\r\n   * Return exponential notation if this Big has a positive exponent equal to or greater than\r\n   * Big.PE, or a negative exponent equal to or less than Big.NE.\r\n   * Omit the sign for negative zero.\r\n   */\r\n  P.toString = function () {\r\n    return stringify(this);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a string representing the value of this Big.\r\n   * Return exponential notation if this Big has a positive exponent equal to or greater than\r\n   * Big.PE, or a negative exponent equal to or less than Big.NE.\r\n   * Include the sign for negative zero.\r\n   */\r\n  P.valueOf = P.toJSON = function () {\r\n    return stringify(this, 4);\r\n  };\r\n\r\n\r\n  // Export\r\n\r\n\r\n  Big = _Big_();\r\n\r\n  Big['default'] = Big.Big = Big;\r\n\r\n  //AMD.\r\n  if (typeof define === 'function' && define.amd) {\r\n    define(function () { return Big; });\r\n\r\n  // Node and other CommonJS-like environments that support module.exports.\r\n  } else if (typeof module !== 'undefined' && module.exports) {\r\n    module.exports = Big;\r\n\r\n  //Browser.\r\n  } else {\r\n    GLOBAL.Big = Big;\r\n  }\r\n})(this);\r\n","/*\r\n *  toFormat v2.0.0\r\n *  Adds a toFormat instance method to big.js or decimal.js\r\n *  Copyright (c) 2017 Michael Mclaughlin\r\n *  MIT Licence\r\n */\r\n\r\n /*\r\n * Adds a `toFormat` method to `Ctor.prototype` and a `format` object to `Ctor`, where `Ctor` is\r\n * a big number constructor such as `Decimal` (decimal.js) or `Big` (big.js).\r\n */\r\nfunction toFormat(Ctor) {\r\n  'use strict';\r\n\r\n  /*\r\n   *  Returns a string representing the value of this big number in fixed-point notation to `dp`\r\n   *  decimal places using rounding mode `rm`, and formatted according to the properties of the\r\n   * `fmt`, `this.format` and `this.constructor.format` objects, in that order of precedence.\r\n   *\r\n   *  Example:\r\n   *\r\n   *  x = new Decimal('123456789.987654321')\r\n   *\r\n   *  // Add a format object to the constructor...\r\n   *  Decimal.format = {\r\n   *    decimalSeparator: '.',\r\n   *    groupSeparator: ',',\r\n   *    groupSize: 3,\r\n   *    secondaryGroupSize: 0,\r\n   *    fractionGroupSeparator: '',     // '\\xA0' non-breaking space\r\n   *    fractionGroupSize : 0\r\n   *  }\r\n   *\r\n   *  x.toFormat();                // 123,456,789.987654321\r\n   *  x.toFormat(2, 1);            // 123,456,789.98\r\n   *\r\n   *  // And/or add a format object to the big number itself...\r\n   *  x.format = {\r\n   *    decimalSeparator: ',',\r\n   *    groupSeparator: '',\r\n   *  }\r\n   *\r\n   *  x.toFormat();                // 123456789,987654321\r\n   *\r\n   *  format = {\r\n   *    decimalSeparator: '.',\r\n   *    groupSeparator: ' ',\r\n   *    groupSize: 3,\r\n   *    fractionGroupSeparator: ' ',     // '\\xA0' non-breaking space\r\n   *    fractionGroupSize : 5\r\n   *  }\r\n\r\n   *  // And/or pass a format object to the method call.\r\n   *  x.toFormat(format);          // 123 456 789.98765 4321\r\n   *  x.toFormat(4, format);       // 123 456 789.9877\r\n   *  x.toFormat(2, 1, format);    // 123 456 789.98\r\n   *\r\n   *  [dp] {number} Decimal places. Integer.\r\n   *  [rm] {number} Rounding mode. Integer, 0 to 8. (Ignored if using big.js.)\r\n   *  [fmt] {Object} A format object.\r\n   *\r\n   */\r\n  Ctor.prototype.toFormat = function toFormat(dp, rm, fmt) {\r\n\r\n    if (!this.e && this.e !== 0) return this.toString();   // Infinity/NaN\r\n\r\n    var arr, g1, g2, i,\r\n      u,                             // undefined\r\n      nd,                            // number of integer digits\r\n      intd,                          // integer digits\r\n      intp,                          // integer part\r\n      fracp,                         // fraction part\r\n      dsep,                          // decimalSeparator\r\n      gsep,                          // groupSeparator\r\n      gsize,                         // groupSize\r\n      sgsize,                        // secondaryGroupSize\r\n      fgsep,                         // fractionGroupSeparator\r\n      fgsize,                        // fractionGroupSize\r\n      tfmt = this.format || {},\r\n      cfmt = this.constructor.format || {};\r\n\r\n    if (dp != u) {\r\n      if (typeof dp == 'object') {\r\n        fmt = dp;\r\n        dp = u;\r\n      } else if (rm != u) {\r\n        if (typeof rm == 'object') {\r\n          fmt = rm;\r\n          rm = u;\r\n        } else if (typeof fmt != 'object') {\r\n          fmt = {};\r\n        }\r\n      } else {\r\n        fmt = {};\r\n      }\r\n    } else {\r\n      fmt = {};\r\n    }\r\n\r\n    arr = this.toFixed(dp, rm).split('.');\r\n    intp = arr[0];\r\n    fracp = arr[1];\r\n    intd = this.s < 0 ? intp.slice(1) : intp;\r\n    nd = intd.length;\r\n\r\n    dsep = fmt.decimalSeparator;\r\n    if (dsep == u) {\r\n      dsep = tfmt.decimalSeparator;\r\n      if (dsep == u) {\r\n        dsep = cfmt.decimalSeparator;\r\n        if (dsep == u) dsep = '.';\r\n      }\r\n    }\r\n\r\n    gsep = fmt.groupSeparator;\r\n    if (gsep == u) {\r\n      gsep = tfmt.groupSeparator;\r\n      if (gsep == u) gsep = cfmt.groupSeparator;\r\n    }\r\n\r\n    if (gsep) {\r\n      gsize = fmt.groupSize;\r\n      if (gsize == u) {\r\n        gsize = tfmt.groupSize;\r\n        if (gsize == u) {\r\n          gsize = cfmt.groupSize;\r\n          if (gsize == u) gsize = 0;\r\n        }\r\n      }\r\n\r\n      sgsize = fmt.secondaryGroupSize;\r\n      if (sgsize == u) {\r\n        sgsize = tfmt.secondaryGroupSize;\r\n        if (sgsize == u) {\r\n          sgsize = cfmt.secondaryGroupSize;\r\n          if (sgsize == u) sgsize = 0;\r\n        }\r\n      }\r\n\r\n      if (sgsize) {\r\n        g1 = +sgsize;\r\n        g2 = +gsize;\r\n        nd -= g2;\r\n      } else {\r\n        g1 = +gsize;\r\n        g2 = +sgsize;\r\n      }\r\n\r\n      if (g1 > 0 && nd > 0) {\r\n        i = nd % g1 || g1;\r\n        intp = intd.substr(0, i);\r\n        for (; i < nd; i += g1) intp += gsep + intd.substr(i, g1);\r\n        if (g2 > 0) intp += gsep + intd.slice(i);\r\n        if (this.s < 0) intp = '-' + intp;\r\n      }\r\n    }\r\n\r\n    if (fracp) {\r\n      fgsep = fmt.fractionGroupSeparator;\r\n      if (fgsep == u) {\r\n        fgsep = tfmt.fractionGroupSeparator;\r\n        if (fgsep == u) fgsep = cfmt.fractionGroupSeparator;\r\n      }\r\n\r\n      if (fgsep) {\r\n        fgsize = fmt.fractionGroupSize;\r\n        if (fgsize == u) {\r\n          fgsize = tfmt.fractionGroupSize;\r\n          if (fgsize == u) {\r\n            fgsize = cfmt.fractionGroupSize;\r\n            if (fgsize == u) fgsize = 0;\r\n          }\r\n        }\r\n\r\n        fgsize = +fgsize;\r\n\r\n        if (fgsize) {\r\n          fracp = fracp.replace(new RegExp('\\\\d{' + fgsize + '}\\\\B', 'g'), '$&' + fgsep);\r\n        }\r\n      }\r\n\r\n      return intp + dsep + fracp;\r\n    } else {\r\n\r\n      return intp;\r\n    }\r\n  };\r\n\r\n  Ctor.format = {\r\n    decimalSeparator: '.',\r\n    groupSeparator: ',',\r\n    groupSize: 3,\r\n    secondaryGroupSize: 0,\r\n    fractionGroupSeparator: '',\r\n    fractionGroupSize: 0\r\n  };\r\n\r\n  return Ctor;\r\n}\r\n\r\nif (typeof module !== 'undefined' && module.exports) module.exports = toFormat;\r\n","import JSBI from 'jsbi';\nimport invariant from 'tiny-invariant';\nimport _Decimal from 'decimal.js-light';\nimport _Big from 'big.js';\nimport toFormat from 'toformat';\nimport { Rounding } from '../../constants';\nconst Decimal = toFormat(_Decimal);\nconst Big = toFormat(_Big);\nconst toSignificantRounding = {\n    [Rounding.ROUND_DOWN]: Decimal.ROUND_DOWN,\n    [Rounding.ROUND_HALF_UP]: Decimal.ROUND_HALF_UP,\n    [Rounding.ROUND_UP]: Decimal.ROUND_UP,\n};\nconst toFixedRounding = {\n    [Rounding.ROUND_DOWN]: 0,\n    [Rounding.ROUND_HALF_UP]: 1,\n    [Rounding.ROUND_UP]: 3, // Big.RoundUp\n};\nexport class Fraction {\n    constructor(numerator, denominator = JSBI.BigInt(1)) {\n        this.numerator = JSBI.BigInt(numerator);\n        this.denominator = JSBI.BigInt(denominator);\n    }\n    static tryParseFraction(fractionish) {\n        if (fractionish instanceof JSBI || typeof fractionish === 'number' || typeof fractionish === 'string')\n            return new Fraction(fractionish);\n        if ('numerator' in fractionish && 'denominator' in fractionish)\n            return fractionish;\n        throw new Error('Could not parse fraction');\n    }\n    // performs floor division\n    get quotient() {\n        return JSBI.divide(this.numerator, this.denominator);\n    }\n    // remainder after floor division\n    get remainder() {\n        return new Fraction(JSBI.remainder(this.numerator, this.denominator), this.denominator);\n    }\n    invert() {\n        return new Fraction(this.denominator, this.numerator);\n    }\n    add(other) {\n        const otherParsed = Fraction.tryParseFraction(other);\n        if (JSBI.equal(this.denominator, otherParsed.denominator)) {\n            return new Fraction(JSBI.add(this.numerator, otherParsed.numerator), this.denominator);\n        }\n        return new Fraction(JSBI.add(JSBI.multiply(this.numerator, otherParsed.denominator), JSBI.multiply(otherParsed.numerator, this.denominator)), JSBI.multiply(this.denominator, otherParsed.denominator));\n    }\n    subtract(other) {\n        const otherParsed = Fraction.tryParseFraction(other);\n        if (JSBI.equal(this.denominator, otherParsed.denominator)) {\n            return new Fraction(JSBI.subtract(this.numerator, otherParsed.numerator), this.denominator);\n        }\n        return new Fraction(JSBI.subtract(JSBI.multiply(this.numerator, otherParsed.denominator), JSBI.multiply(otherParsed.numerator, this.denominator)), JSBI.multiply(this.denominator, otherParsed.denominator));\n    }\n    lessThan(other) {\n        const otherParsed = Fraction.tryParseFraction(other);\n        return JSBI.lessThan(JSBI.multiply(this.numerator, otherParsed.denominator), JSBI.multiply(otherParsed.numerator, this.denominator));\n    }\n    equalTo(other) {\n        const otherParsed = Fraction.tryParseFraction(other);\n        return JSBI.equal(JSBI.multiply(this.numerator, otherParsed.denominator), JSBI.multiply(otherParsed.numerator, this.denominator));\n    }\n    greaterThan(other) {\n        const otherParsed = Fraction.tryParseFraction(other);\n        return JSBI.greaterThan(JSBI.multiply(this.numerator, otherParsed.denominator), JSBI.multiply(otherParsed.numerator, this.denominator));\n    }\n    multiply(other) {\n        const otherParsed = Fraction.tryParseFraction(other);\n        return new Fraction(JSBI.multiply(this.numerator, otherParsed.numerator), JSBI.multiply(this.denominator, otherParsed.denominator));\n    }\n    divide(other) {\n        const otherParsed = Fraction.tryParseFraction(other);\n        return new Fraction(JSBI.multiply(this.numerator, otherParsed.denominator), JSBI.multiply(this.denominator, otherParsed.numerator));\n    }\n    toSignificant(significantDigits, format = { groupSeparator: '' }, rounding = Rounding.ROUND_HALF_UP) {\n        invariant(Number.isInteger(significantDigits), `${significantDigits} is not an integer.`);\n        invariant(significantDigits > 0, `${significantDigits} is not positive.`);\n        Decimal.set({ precision: significantDigits + 1, rounding: toSignificantRounding[rounding] });\n        const quotient = new Decimal(this.numerator.toString())\n            .div(this.denominator.toString())\n            .toSignificantDigits(significantDigits);\n        return quotient.toFormat(quotient.decimalPlaces(), format);\n    }\n    toFixed(decimalPlaces, format = { groupSeparator: '' }, rounding = Rounding.ROUND_HALF_UP) {\n        invariant(Number.isInteger(decimalPlaces), `${decimalPlaces} is not an integer.`);\n        invariant(decimalPlaces >= 0, `${decimalPlaces} is negative.`);\n        Big.DP = decimalPlaces;\n        Big.RM = toFixedRounding[rounding];\n        return new Big(this.numerator.toString()).div(this.denominator.toString()).toFormat(decimalPlaces, format);\n    }\n    /**\n     * Helper method for converting any super class back to a fraction\n     */\n    get asFraction() {\n        return new Fraction(this.numerator, this.denominator);\n    }\n}\n//# sourceMappingURL=fraction.js.map","import invariant from 'tiny-invariant';\nimport JSBI from 'jsbi';\nimport { Fraction } from './fraction';\nimport _Big from 'big.js';\nimport toFormat from 'toformat';\nimport { Rounding, MaxUint256 } from '../../constants';\nconst Big = toFormat(_Big);\nexport class CurrencyAmount extends Fraction {\n    /**\n     * Returns a new currency amount instance from the unitless amount of token, i.e. the raw amount\n     * @param currency the currency in the amount\n     * @param rawAmount the raw token or ether amount\n     */\n    static fromRawAmount(currency, rawAmount) {\n        return new CurrencyAmount(currency, rawAmount);\n    }\n    /**\n     * Construct a currency amount with a denominator that is not equal to 1\n     * @param currency the currency\n     * @param numerator the numerator of the fractional token amount\n     * @param denominator the denominator of the fractional token amount\n     */\n    static fromFractionalAmount(currency, numerator, denominator) {\n        return new CurrencyAmount(currency, numerator, denominator);\n    }\n    constructor(currency, numerator, denominator) {\n        super(numerator, denominator);\n        invariant(JSBI.lessThanOrEqual(this.quotient, MaxUint256), 'AMOUNT');\n        this.currency = currency;\n        this.decimalScale = JSBI.exponentiate(JSBI.BigInt(10), JSBI.BigInt(currency.decimals));\n    }\n    add(other) {\n        invariant(this.currency.equals(other.currency), 'CURRENCY');\n        const added = super.add(other);\n        return CurrencyAmount.fromFractionalAmount(this.currency, added.numerator, added.denominator);\n    }\n    subtract(other) {\n        invariant(this.currency.equals(other.currency), 'CURRENCY');\n        const subtracted = super.subtract(other);\n        return CurrencyAmount.fromFractionalAmount(this.currency, subtracted.numerator, subtracted.denominator);\n    }\n    multiply(other) {\n        const multiplied = super.multiply(other);\n        return CurrencyAmount.fromFractionalAmount(this.currency, multiplied.numerator, multiplied.denominator);\n    }\n    divide(other) {\n        const divided = super.divide(other);\n        return CurrencyAmount.fromFractionalAmount(this.currency, divided.numerator, divided.denominator);\n    }\n    toSignificant(significantDigits = 6, format, rounding = Rounding.ROUND_DOWN) {\n        return super.divide(this.decimalScale).toSignificant(significantDigits, format, rounding);\n    }\n    toFixed(decimalPlaces = this.currency.decimals, format, rounding = Rounding.ROUND_DOWN) {\n        invariant(decimalPlaces <= this.currency.decimals, 'DECIMALS');\n        return super.divide(this.decimalScale).toFixed(decimalPlaces, format, rounding);\n    }\n    toExact(format = { groupSeparator: '' }) {\n        Big.DP = this.currency.decimals;\n        return new Big(this.quotient.toString()).div(this.decimalScale.toString()).toFormat(format);\n    }\n    get wrapped() {\n        if (this.currency.isToken)\n            return this;\n        return CurrencyAmount.fromFractionalAmount(this.currency.wrapped, this.numerator, this.denominator);\n    }\n}\n//# sourceMappingURL=currencyAmount.js.map","import JSBI from 'jsbi';\nimport { Fraction } from './fraction';\nconst ONE_HUNDRED = new Fraction(JSBI.BigInt(100));\n/**\n * Converts a fraction to a percent\n * @param fraction the fraction to convert\n */\nfunction toPercent(fraction) {\n    return new Percent(fraction.numerator, fraction.denominator);\n}\nexport class Percent extends Fraction {\n    constructor() {\n        super(...arguments);\n        /**\n         * This boolean prevents a fraction from being interpreted as a Percent\n         */\n        this.isPercent = true;\n    }\n    add(other) {\n        return toPercent(super.add(other));\n    }\n    subtract(other) {\n        return toPercent(super.subtract(other));\n    }\n    multiply(other) {\n        return toPercent(super.multiply(other));\n    }\n    divide(other) {\n        return toPercent(super.divide(other));\n    }\n    toSignificant(significantDigits = 5, format, rounding) {\n        return super.multiply(ONE_HUNDRED).toSignificant(significantDigits, format, rounding);\n    }\n    toFixed(decimalPlaces = 2, format, rounding) {\n        return super.multiply(ONE_HUNDRED).toFixed(decimalPlaces, format, rounding);\n    }\n}\n//# sourceMappingURL=percent.js.map","import JSBI from 'jsbi';\nimport invariant from 'tiny-invariant';\nimport { Fraction } from './fraction';\nimport { CurrencyAmount } from './currencyAmount';\nexport class Price extends Fraction {\n    /**\n     * Construct a price, either with the base and quote currency amount, or the\n     * @param args\n     */\n    constructor(...args) {\n        let baseCurrency, quoteCurrency, denominator, numerator;\n        if (args.length === 4) {\n            ;\n            [baseCurrency, quoteCurrency, denominator, numerator] = args;\n        }\n        else {\n            const result = args[0].quoteAmount.divide(args[0].baseAmount);\n            [baseCurrency, quoteCurrency, denominator, numerator] = [\n                args[0].baseAmount.currency,\n                args[0].quoteAmount.currency,\n                result.denominator,\n                result.numerator,\n            ];\n        }\n        super(numerator, denominator);\n        this.baseCurrency = baseCurrency;\n        this.quoteCurrency = quoteCurrency;\n        this.scalar = new Fraction(JSBI.exponentiate(JSBI.BigInt(10), JSBI.BigInt(baseCurrency.decimals)), JSBI.exponentiate(JSBI.BigInt(10), JSBI.BigInt(quoteCurrency.decimals)));\n    }\n    /**\n     * Flip the price, switching the base and quote currency\n     */\n    invert() {\n        return new Price(this.quoteCurrency, this.baseCurrency, this.numerator, this.denominator);\n    }\n    /**\n     * Multiply the price by another price, returning a new price. The other price must have the same base currency as this price's quote currency\n     * @param other the other price\n     */\n    multiply(other) {\n        invariant(this.quoteCurrency.equals(other.baseCurrency), 'TOKEN');\n        const fraction = super.multiply(other);\n        return new Price(this.baseCurrency, other.quoteCurrency, fraction.denominator, fraction.numerator);\n    }\n    /**\n     * Return the amount of quote currency corresponding to a given amount of the base currency\n     * @param currencyAmount the amount of base currency to quote against the price\n     */\n    quote(currencyAmount) {\n        invariant(currencyAmount.currency.equals(this.baseCurrency), 'TOKEN');\n        const result = super.multiply(currencyAmount);\n        return CurrencyAmount.fromFractionalAmount(this.quoteCurrency, result.numerator, result.denominator);\n    }\n    /**\n     * Get the value scaled by decimals for formatting\n     * @private\n     */\n    get adjustedForDecimals() {\n        return super.multiply(this.scalar);\n    }\n    toSignificant(significantDigits = 6, format, rounding) {\n        return this.adjustedForDecimals.toSignificant(significantDigits, format, rounding);\n    }\n    toFixed(decimalPlaces = 4, format, rounding) {\n        return this.adjustedForDecimals.toFixed(decimalPlaces, format, rounding);\n    }\n}\n//# sourceMappingURL=price.js.map","import invariant from 'tiny-invariant';\n/**\n * A currency is any fungible financial instrument, including Ether, all ERC20 tokens, and other chain-native currencies\n */\nexport class BaseCurrency {\n    /**\n     * Constructs an instance of the base class `BaseCurrency`.\n     * @param chainId the chain ID on which this currency resides\n     * @param decimals decimals of the currency\n     * @param symbol symbol of the currency\n     * @param name of the currency\n     */\n    constructor(chainId, decimals, symbol, name) {\n        invariant(Number.isSafeInteger(chainId), 'CHAIN_ID');\n        invariant(decimals >= 0 && decimals < 255 && Number.isInteger(decimals), 'DECIMALS');\n        this.chainId = chainId;\n        this.decimals = decimals;\n        this.symbol = symbol;\n        this.name = name;\n    }\n}\n//# sourceMappingURL=baseCurrency.js.map","import { BaseCurrency } from './baseCurrency';\n/**\n * Represents the native currency of the chain on which it resides, e.g.\n */\nexport class NativeCurrency extends BaseCurrency {\n    constructor() {\n        super(...arguments);\n        this.isNative = true;\n        this.isToken = false;\n    }\n}\n//# sourceMappingURL=nativeCurrency.js.map","(function (module, exports) {\n  'use strict';\n\n  // Utils\n  function assert (val, msg) {\n    if (!val) throw new Error(msg || 'Assertion failed');\n  }\n\n  // Could use `inherits` module, but don't want to move from single file\n  // architecture yet.\n  function inherits (ctor, superCtor) {\n    ctor.super_ = superCtor;\n    var TempCtor = function () {};\n    TempCtor.prototype = superCtor.prototype;\n    ctor.prototype = new TempCtor();\n    ctor.prototype.constructor = ctor;\n  }\n\n  // BN\n\n  function BN (number, base, endian) {\n    if (BN.isBN(number)) {\n      return number;\n    }\n\n    this.negative = 0;\n    this.words = null;\n    this.length = 0;\n\n    // Reduction context\n    this.red = null;\n\n    if (number !== null) {\n      if (base === 'le' || base === 'be') {\n        endian = base;\n        base = 10;\n      }\n\n      this._init(number || 0, base || 10, endian || 'be');\n    }\n  }\n  if (typeof module === 'object') {\n    module.exports = BN;\n  } else {\n    exports.BN = BN;\n  }\n\n  BN.BN = BN;\n  BN.wordSize = 26;\n\n  var Buffer;\n  try {\n    if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n      Buffer = window.Buffer;\n    } else {\n      Buffer = require('buffer').Buffer;\n    }\n  } catch (e) {\n  }\n\n  BN.isBN = function isBN (num) {\n    if (num instanceof BN) {\n      return true;\n    }\n\n    return num !== null && typeof num === 'object' &&\n      num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n  };\n\n  BN.max = function max (left, right) {\n    if (left.cmp(right) > 0) return left;\n    return right;\n  };\n\n  BN.min = function min (left, right) {\n    if (left.cmp(right) < 0) return left;\n    return right;\n  };\n\n  BN.prototype._init = function init (number, base, endian) {\n    if (typeof number === 'number') {\n      return this._initNumber(number, base, endian);\n    }\n\n    if (typeof number === 'object') {\n      return this._initArray(number, base, endian);\n    }\n\n    if (base === 'hex') {\n      base = 16;\n    }\n    assert(base === (base | 0) && base >= 2 && base <= 36);\n\n    number = number.toString().replace(/\\s+/g, '');\n    var start = 0;\n    if (number[0] === '-') {\n      start++;\n      this.negative = 1;\n    }\n\n    if (start < number.length) {\n      if (base === 16) {\n        this._parseHex(number, start, endian);\n      } else {\n        this._parseBase(number, base, start);\n        if (endian === 'le') {\n          this._initArray(this.toArray(), base, endian);\n        }\n      }\n    }\n  };\n\n  BN.prototype._initNumber = function _initNumber (number, base, endian) {\n    if (number < 0) {\n      this.negative = 1;\n      number = -number;\n    }\n    if (number < 0x4000000) {\n      this.words = [number & 0x3ffffff];\n      this.length = 1;\n    } else if (number < 0x10000000000000) {\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff\n      ];\n      this.length = 2;\n    } else {\n      assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff,\n        1\n      ];\n      this.length = 3;\n    }\n\n    if (endian !== 'le') return;\n\n    // Reverse the bytes\n    this._initArray(this.toArray(), base, endian);\n  };\n\n  BN.prototype._initArray = function _initArray (number, base, endian) {\n    // Perhaps a Uint8Array\n    assert(typeof number.length === 'number');\n    if (number.length <= 0) {\n      this.words = [0];\n      this.length = 1;\n      return this;\n    }\n\n    this.length = Math.ceil(number.length / 3);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    var j, w;\n    var off = 0;\n    if (endian === 'be') {\n      for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n        w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    } else if (endian === 'le') {\n      for (i = 0, j = 0; i < number.length; i += 3) {\n        w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    }\n    return this._strip();\n  };\n\n  function parseHex4Bits (string, index) {\n    var c = string.charCodeAt(index);\n    // '0' - '9'\n    if (c >= 48 && c <= 57) {\n      return c - 48;\n    // 'A' - 'F'\n    } else if (c >= 65 && c <= 70) {\n      return c - 55;\n    // 'a' - 'f'\n    } else if (c >= 97 && c <= 102) {\n      return c - 87;\n    } else {\n      assert(false, 'Invalid character in ' + string);\n    }\n  }\n\n  function parseHexByte (string, lowerBound, index) {\n    var r = parseHex4Bits(string, index);\n    if (index - 1 >= lowerBound) {\n      r |= parseHex4Bits(string, index - 1) << 4;\n    }\n    return r;\n  }\n\n  BN.prototype._parseHex = function _parseHex (number, start, endian) {\n    // Create possibly bigger array to ensure that it fits the number\n    this.length = Math.ceil((number.length - start) / 6);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    // 24-bits chunks\n    var off = 0;\n    var j = 0;\n\n    var w;\n    if (endian === 'be') {\n      for (i = number.length - 1; i >= start; i -= 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    } else {\n      var parseLength = number.length - start;\n      for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    }\n\n    this._strip();\n  };\n\n  function parseBase (str, start, end, mul) {\n    var r = 0;\n    var b = 0;\n    var len = Math.min(str.length, end);\n    for (var i = start; i < len; i++) {\n      var c = str.charCodeAt(i) - 48;\n\n      r *= mul;\n\n      // 'a'\n      if (c >= 49) {\n        b = c - 49 + 0xa;\n\n      // 'A'\n      } else if (c >= 17) {\n        b = c - 17 + 0xa;\n\n      // '0' - '9'\n      } else {\n        b = c;\n      }\n      assert(c >= 0 && b < mul, 'Invalid character');\n      r += b;\n    }\n    return r;\n  }\n\n  BN.prototype._parseBase = function _parseBase (number, base, start) {\n    // Initialize as zero\n    this.words = [0];\n    this.length = 1;\n\n    // Find length of limb in base\n    for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n      limbLen++;\n    }\n    limbLen--;\n    limbPow = (limbPow / base) | 0;\n\n    var total = number.length - start;\n    var mod = total % limbLen;\n    var end = Math.min(total, total - mod) + start;\n\n    var word = 0;\n    for (var i = start; i < end; i += limbLen) {\n      word = parseBase(number, i, i + limbLen, base);\n\n      this.imuln(limbPow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    if (mod !== 0) {\n      var pow = 1;\n      word = parseBase(number, i, number.length, base);\n\n      for (i = 0; i < mod; i++) {\n        pow *= base;\n      }\n\n      this.imuln(pow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    this._strip();\n  };\n\n  BN.prototype.copy = function copy (dest) {\n    dest.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      dest.words[i] = this.words[i];\n    }\n    dest.length = this.length;\n    dest.negative = this.negative;\n    dest.red = this.red;\n  };\n\n  function move (dest, src) {\n    dest.words = src.words;\n    dest.length = src.length;\n    dest.negative = src.negative;\n    dest.red = src.red;\n  }\n\n  BN.prototype._move = function _move (dest) {\n    move(dest, this);\n  };\n\n  BN.prototype.clone = function clone () {\n    var r = new BN(null);\n    this.copy(r);\n    return r;\n  };\n\n  BN.prototype._expand = function _expand (size) {\n    while (this.length < size) {\n      this.words[this.length++] = 0;\n    }\n    return this;\n  };\n\n  // Remove leading `0` from `this`\n  BN.prototype._strip = function strip () {\n    while (this.length > 1 && this.words[this.length - 1] === 0) {\n      this.length--;\n    }\n    return this._normSign();\n  };\n\n  BN.prototype._normSign = function _normSign () {\n    // -0 = 0\n    if (this.length === 1 && this.words[0] === 0) {\n      this.negative = 0;\n    }\n    return this;\n  };\n\n  // Check Symbol.for because not everywhere where Symbol defined\n  // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#Browser_compatibility\n  if (typeof Symbol !== 'undefined' && typeof Symbol.for === 'function') {\n    try {\n      BN.prototype[Symbol.for('nodejs.util.inspect.custom')] = inspect;\n    } catch (e) {\n      BN.prototype.inspect = inspect;\n    }\n  } else {\n    BN.prototype.inspect = inspect;\n  }\n\n  function inspect () {\n    return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n  }\n\n  /*\n\n  var zeros = [];\n  var groupSizes = [];\n  var groupBases = [];\n\n  var s = '';\n  var i = -1;\n  while (++i < BN.wordSize) {\n    zeros[i] = s;\n    s += '0';\n  }\n  groupSizes[0] = 0;\n  groupSizes[1] = 0;\n  groupBases[0] = 0;\n  groupBases[1] = 0;\n  var base = 2 - 1;\n  while (++base < 36 + 1) {\n    var groupSize = 0;\n    var groupBase = 1;\n    while (groupBase < (1 << BN.wordSize) / base) {\n      groupBase *= base;\n      groupSize += 1;\n    }\n    groupSizes[base] = groupSize;\n    groupBases[base] = groupBase;\n  }\n\n  */\n\n  var zeros = [\n    '',\n    '0',\n    '00',\n    '000',\n    '0000',\n    '00000',\n    '000000',\n    '0000000',\n    '00000000',\n    '000000000',\n    '0000000000',\n    '00000000000',\n    '000000000000',\n    '0000000000000',\n    '00000000000000',\n    '000000000000000',\n    '0000000000000000',\n    '00000000000000000',\n    '000000000000000000',\n    '0000000000000000000',\n    '00000000000000000000',\n    '000000000000000000000',\n    '0000000000000000000000',\n    '00000000000000000000000',\n    '000000000000000000000000',\n    '0000000000000000000000000'\n  ];\n\n  var groupSizes = [\n    0, 0,\n    25, 16, 12, 11, 10, 9, 8,\n    8, 7, 7, 7, 7, 6, 6,\n    6, 6, 6, 6, 6, 5, 5,\n    5, 5, 5, 5, 5, 5, 5,\n    5, 5, 5, 5, 5, 5, 5\n  ];\n\n  var groupBases = [\n    0, 0,\n    33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n    43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n    16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n    6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n    24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n  ];\n\n  BN.prototype.toString = function toString (base, padding) {\n    base = base || 10;\n    padding = padding | 0 || 1;\n\n    var out;\n    if (base === 16 || base === 'hex') {\n      out = '';\n      var off = 0;\n      var carry = 0;\n      for (var i = 0; i < this.length; i++) {\n        var w = this.words[i];\n        var word = (((w << off) | carry) & 0xffffff).toString(16);\n        carry = (w >>> (24 - off)) & 0xffffff;\n        off += 2;\n        if (off >= 26) {\n          off -= 26;\n          i--;\n        }\n        if (carry !== 0 || i !== this.length - 1) {\n          out = zeros[6 - word.length] + word + out;\n        } else {\n          out = word + out;\n        }\n      }\n      if (carry !== 0) {\n        out = carry.toString(16) + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    if (base === (base | 0) && base >= 2 && base <= 36) {\n      // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n      var groupSize = groupSizes[base];\n      // var groupBase = Math.pow(base, groupSize);\n      var groupBase = groupBases[base];\n      out = '';\n      var c = this.clone();\n      c.negative = 0;\n      while (!c.isZero()) {\n        var r = c.modrn(groupBase).toString(base);\n        c = c.idivn(groupBase);\n\n        if (!c.isZero()) {\n          out = zeros[groupSize - r.length] + r + out;\n        } else {\n          out = r + out;\n        }\n      }\n      if (this.isZero()) {\n        out = '0' + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    assert(false, 'Base should be between 2 and 36');\n  };\n\n  BN.prototype.toNumber = function toNumber () {\n    var ret = this.words[0];\n    if (this.length === 2) {\n      ret += this.words[1] * 0x4000000;\n    } else if (this.length === 3 && this.words[2] === 0x01) {\n      // NOTE: at this stage it is known that the top bit is set\n      ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n    } else if (this.length > 2) {\n      assert(false, 'Number can only safely store up to 53 bits');\n    }\n    return (this.negative !== 0) ? -ret : ret;\n  };\n\n  BN.prototype.toJSON = function toJSON () {\n    return this.toString(16, 2);\n  };\n\n  if (Buffer) {\n    BN.prototype.toBuffer = function toBuffer (endian, length) {\n      return this.toArrayLike(Buffer, endian, length);\n    };\n  }\n\n  BN.prototype.toArray = function toArray (endian, length) {\n    return this.toArrayLike(Array, endian, length);\n  };\n\n  var allocate = function allocate (ArrayType, size) {\n    if (ArrayType.allocUnsafe) {\n      return ArrayType.allocUnsafe(size);\n    }\n    return new ArrayType(size);\n  };\n\n  BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n    this._strip();\n\n    var byteLength = this.byteLength();\n    var reqLength = length || Math.max(1, byteLength);\n    assert(byteLength <= reqLength, 'byte array longer than desired length');\n    assert(reqLength > 0, 'Requested array length <= 0');\n\n    var res = allocate(ArrayType, reqLength);\n    var postfix = endian === 'le' ? 'LE' : 'BE';\n    this['_toArrayLike' + postfix](res, byteLength);\n    return res;\n  };\n\n  BN.prototype._toArrayLikeLE = function _toArrayLikeLE (res, byteLength) {\n    var position = 0;\n    var carry = 0;\n\n    for (var i = 0, shift = 0; i < this.length; i++) {\n      var word = (this.words[i] << shift) | carry;\n\n      res[position++] = word & 0xff;\n      if (position < res.length) {\n        res[position++] = (word >> 8) & 0xff;\n      }\n      if (position < res.length) {\n        res[position++] = (word >> 16) & 0xff;\n      }\n\n      if (shift === 6) {\n        if (position < res.length) {\n          res[position++] = (word >> 24) & 0xff;\n        }\n        carry = 0;\n        shift = 0;\n      } else {\n        carry = word >>> 24;\n        shift += 2;\n      }\n    }\n\n    if (position < res.length) {\n      res[position++] = carry;\n\n      while (position < res.length) {\n        res[position++] = 0;\n      }\n    }\n  };\n\n  BN.prototype._toArrayLikeBE = function _toArrayLikeBE (res, byteLength) {\n    var position = res.length - 1;\n    var carry = 0;\n\n    for (var i = 0, shift = 0; i < this.length; i++) {\n      var word = (this.words[i] << shift) | carry;\n\n      res[position--] = word & 0xff;\n      if (position >= 0) {\n        res[position--] = (word >> 8) & 0xff;\n      }\n      if (position >= 0) {\n        res[position--] = (word >> 16) & 0xff;\n      }\n\n      if (shift === 6) {\n        if (position >= 0) {\n          res[position--] = (word >> 24) & 0xff;\n        }\n        carry = 0;\n        shift = 0;\n      } else {\n        carry = word >>> 24;\n        shift += 2;\n      }\n    }\n\n    if (position >= 0) {\n      res[position--] = carry;\n\n      while (position >= 0) {\n        res[position--] = 0;\n      }\n    }\n  };\n\n  if (Math.clz32) {\n    BN.prototype._countBits = function _countBits (w) {\n      return 32 - Math.clz32(w);\n    };\n  } else {\n    BN.prototype._countBits = function _countBits (w) {\n      var t = w;\n      var r = 0;\n      if (t >= 0x1000) {\n        r += 13;\n        t >>>= 13;\n      }\n      if (t >= 0x40) {\n        r += 7;\n        t >>>= 7;\n      }\n      if (t >= 0x8) {\n        r += 4;\n        t >>>= 4;\n      }\n      if (t >= 0x02) {\n        r += 2;\n        t >>>= 2;\n      }\n      return r + t;\n    };\n  }\n\n  BN.prototype._zeroBits = function _zeroBits (w) {\n    // Short-cut\n    if (w === 0) return 26;\n\n    var t = w;\n    var r = 0;\n    if ((t & 0x1fff) === 0) {\n      r += 13;\n      t >>>= 13;\n    }\n    if ((t & 0x7f) === 0) {\n      r += 7;\n      t >>>= 7;\n    }\n    if ((t & 0xf) === 0) {\n      r += 4;\n      t >>>= 4;\n    }\n    if ((t & 0x3) === 0) {\n      r += 2;\n      t >>>= 2;\n    }\n    if ((t & 0x1) === 0) {\n      r++;\n    }\n    return r;\n  };\n\n  // Return number of used bits in a BN\n  BN.prototype.bitLength = function bitLength () {\n    var w = this.words[this.length - 1];\n    var hi = this._countBits(w);\n    return (this.length - 1) * 26 + hi;\n  };\n\n  function toBitArray (num) {\n    var w = new Array(num.bitLength());\n\n    for (var bit = 0; bit < w.length; bit++) {\n      var off = (bit / 26) | 0;\n      var wbit = bit % 26;\n\n      w[bit] = (num.words[off] >>> wbit) & 0x01;\n    }\n\n    return w;\n  }\n\n  // Number of trailing zero bits\n  BN.prototype.zeroBits = function zeroBits () {\n    if (this.isZero()) return 0;\n\n    var r = 0;\n    for (var i = 0; i < this.length; i++) {\n      var b = this._zeroBits(this.words[i]);\n      r += b;\n      if (b !== 26) break;\n    }\n    return r;\n  };\n\n  BN.prototype.byteLength = function byteLength () {\n    return Math.ceil(this.bitLength() / 8);\n  };\n\n  BN.prototype.toTwos = function toTwos (width) {\n    if (this.negative !== 0) {\n      return this.abs().inotn(width).iaddn(1);\n    }\n    return this.clone();\n  };\n\n  BN.prototype.fromTwos = function fromTwos (width) {\n    if (this.testn(width - 1)) {\n      return this.notn(width).iaddn(1).ineg();\n    }\n    return this.clone();\n  };\n\n  BN.prototype.isNeg = function isNeg () {\n    return this.negative !== 0;\n  };\n\n  // Return negative clone of `this`\n  BN.prototype.neg = function neg () {\n    return this.clone().ineg();\n  };\n\n  BN.prototype.ineg = function ineg () {\n    if (!this.isZero()) {\n      this.negative ^= 1;\n    }\n\n    return this;\n  };\n\n  // Or `num` with `this` in-place\n  BN.prototype.iuor = function iuor (num) {\n    while (this.length < num.length) {\n      this.words[this.length++] = 0;\n    }\n\n    for (var i = 0; i < num.length; i++) {\n      this.words[i] = this.words[i] | num.words[i];\n    }\n\n    return this._strip();\n  };\n\n  BN.prototype.ior = function ior (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuor(num);\n  };\n\n  // Or `num` with `this`\n  BN.prototype.or = function or (num) {\n    if (this.length > num.length) return this.clone().ior(num);\n    return num.clone().ior(this);\n  };\n\n  BN.prototype.uor = function uor (num) {\n    if (this.length > num.length) return this.clone().iuor(num);\n    return num.clone().iuor(this);\n  };\n\n  // And `num` with `this` in-place\n  BN.prototype.iuand = function iuand (num) {\n    // b = min-length(num, this)\n    var b;\n    if (this.length > num.length) {\n      b = num;\n    } else {\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = this.words[i] & num.words[i];\n    }\n\n    this.length = b.length;\n\n    return this._strip();\n  };\n\n  BN.prototype.iand = function iand (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuand(num);\n  };\n\n  // And `num` with `this`\n  BN.prototype.and = function and (num) {\n    if (this.length > num.length) return this.clone().iand(num);\n    return num.clone().iand(this);\n  };\n\n  BN.prototype.uand = function uand (num) {\n    if (this.length > num.length) return this.clone().iuand(num);\n    return num.clone().iuand(this);\n  };\n\n  // Xor `num` with `this` in-place\n  BN.prototype.iuxor = function iuxor (num) {\n    // a.length > b.length\n    var a;\n    var b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = a.words[i] ^ b.words[i];\n    }\n\n    if (this !== a) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = a.length;\n\n    return this._strip();\n  };\n\n  BN.prototype.ixor = function ixor (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuxor(num);\n  };\n\n  // Xor `num` with `this`\n  BN.prototype.xor = function xor (num) {\n    if (this.length > num.length) return this.clone().ixor(num);\n    return num.clone().ixor(this);\n  };\n\n  BN.prototype.uxor = function uxor (num) {\n    if (this.length > num.length) return this.clone().iuxor(num);\n    return num.clone().iuxor(this);\n  };\n\n  // Not ``this`` with ``width`` bitwidth\n  BN.prototype.inotn = function inotn (width) {\n    assert(typeof width === 'number' && width >= 0);\n\n    var bytesNeeded = Math.ceil(width / 26) | 0;\n    var bitsLeft = width % 26;\n\n    // Extend the buffer with leading zeroes\n    this._expand(bytesNeeded);\n\n    if (bitsLeft > 0) {\n      bytesNeeded--;\n    }\n\n    // Handle complete words\n    for (var i = 0; i < bytesNeeded; i++) {\n      this.words[i] = ~this.words[i] & 0x3ffffff;\n    }\n\n    // Handle the residue\n    if (bitsLeft > 0) {\n      this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n    }\n\n    // And remove leading zeroes\n    return this._strip();\n  };\n\n  BN.prototype.notn = function notn (width) {\n    return this.clone().inotn(width);\n  };\n\n  // Set `bit` of `this`\n  BN.prototype.setn = function setn (bit, val) {\n    assert(typeof bit === 'number' && bit >= 0);\n\n    var off = (bit / 26) | 0;\n    var wbit = bit % 26;\n\n    this._expand(off + 1);\n\n    if (val) {\n      this.words[off] = this.words[off] | (1 << wbit);\n    } else {\n      this.words[off] = this.words[off] & ~(1 << wbit);\n    }\n\n    return this._strip();\n  };\n\n  // Add `num` to `this` in-place\n  BN.prototype.iadd = function iadd (num) {\n    var r;\n\n    // negative + positive\n    if (this.negative !== 0 && num.negative === 0) {\n      this.negative = 0;\n      r = this.isub(num);\n      this.negative ^= 1;\n      return this._normSign();\n\n    // positive + negative\n    } else if (this.negative === 0 && num.negative !== 0) {\n      num.negative = 0;\n      r = this.isub(num);\n      num.negative = 1;\n      return r._normSign();\n    }\n\n    // a.length > b.length\n    var a, b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n\n    this.length = a.length;\n    if (carry !== 0) {\n      this.words[this.length] = carry;\n      this.length++;\n    // Copy the rest of the words\n    } else if (a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    return this;\n  };\n\n  // Add `num` to `this`\n  BN.prototype.add = function add (num) {\n    var res;\n    if (num.negative !== 0 && this.negative === 0) {\n      num.negative = 0;\n      res = this.sub(num);\n      num.negative ^= 1;\n      return res;\n    } else if (num.negative === 0 && this.negative !== 0) {\n      this.negative = 0;\n      res = num.sub(this);\n      this.negative = 1;\n      return res;\n    }\n\n    if (this.length > num.length) return this.clone().iadd(num);\n\n    return num.clone().iadd(this);\n  };\n\n  // Subtract `num` from `this` in-place\n  BN.prototype.isub = function isub (num) {\n    // this - (-num) = this + num\n    if (num.negative !== 0) {\n      num.negative = 0;\n      var r = this.iadd(num);\n      num.negative = 1;\n      return r._normSign();\n\n    // -this - num = -(this + num)\n    } else if (this.negative !== 0) {\n      this.negative = 0;\n      this.iadd(num);\n      this.negative = 1;\n      return this._normSign();\n    }\n\n    // At this point both numbers are positive\n    var cmp = this.cmp(num);\n\n    // Optimization - zeroify\n    if (cmp === 0) {\n      this.negative = 0;\n      this.length = 1;\n      this.words[0] = 0;\n      return this;\n    }\n\n    // a > b\n    var a, b;\n    if (cmp > 0) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n\n    // Copy rest of the words\n    if (carry === 0 && i < a.length && a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = Math.max(this.length, i);\n\n    if (a !== this) {\n      this.negative = 1;\n    }\n\n    return this._strip();\n  };\n\n  // Subtract `num` from `this`\n  BN.prototype.sub = function sub (num) {\n    return this.clone().isub(num);\n  };\n\n  function smallMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    var len = (self.length + num.length) | 0;\n    out.length = len;\n    len = (len - 1) | 0;\n\n    // Peel one iteration (compiler can't do it, because of code complexity)\n    var a = self.words[0] | 0;\n    var b = num.words[0] | 0;\n    var r = a * b;\n\n    var lo = r & 0x3ffffff;\n    var carry = (r / 0x4000000) | 0;\n    out.words[0] = lo;\n\n    for (var k = 1; k < len; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = carry >>> 26;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = (k - j) | 0;\n        a = self.words[i] | 0;\n        b = num.words[j] | 0;\n        r = a * b + rword;\n        ncarry += (r / 0x4000000) | 0;\n        rword = r & 0x3ffffff;\n      }\n      out.words[k] = rword | 0;\n      carry = ncarry | 0;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry | 0;\n    } else {\n      out.length--;\n    }\n\n    return out._strip();\n  }\n\n  // TODO(indutny): it may be reasonable to omit it for users who don't need\n  // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n  // multiplication (like elliptic secp256k1).\n  var comb10MulTo = function comb10MulTo (self, num, out) {\n    var a = self.words;\n    var b = num.words;\n    var o = out.words;\n    var c = 0;\n    var lo;\n    var mid;\n    var hi;\n    var a0 = a[0] | 0;\n    var al0 = a0 & 0x1fff;\n    var ah0 = a0 >>> 13;\n    var a1 = a[1] | 0;\n    var al1 = a1 & 0x1fff;\n    var ah1 = a1 >>> 13;\n    var a2 = a[2] | 0;\n    var al2 = a2 & 0x1fff;\n    var ah2 = a2 >>> 13;\n    var a3 = a[3] | 0;\n    var al3 = a3 & 0x1fff;\n    var ah3 = a3 >>> 13;\n    var a4 = a[4] | 0;\n    var al4 = a4 & 0x1fff;\n    var ah4 = a4 >>> 13;\n    var a5 = a[5] | 0;\n    var al5 = a5 & 0x1fff;\n    var ah5 = a5 >>> 13;\n    var a6 = a[6] | 0;\n    var al6 = a6 & 0x1fff;\n    var ah6 = a6 >>> 13;\n    var a7 = a[7] | 0;\n    var al7 = a7 & 0x1fff;\n    var ah7 = a7 >>> 13;\n    var a8 = a[8] | 0;\n    var al8 = a8 & 0x1fff;\n    var ah8 = a8 >>> 13;\n    var a9 = a[9] | 0;\n    var al9 = a9 & 0x1fff;\n    var ah9 = a9 >>> 13;\n    var b0 = b[0] | 0;\n    var bl0 = b0 & 0x1fff;\n    var bh0 = b0 >>> 13;\n    var b1 = b[1] | 0;\n    var bl1 = b1 & 0x1fff;\n    var bh1 = b1 >>> 13;\n    var b2 = b[2] | 0;\n    var bl2 = b2 & 0x1fff;\n    var bh2 = b2 >>> 13;\n    var b3 = b[3] | 0;\n    var bl3 = b3 & 0x1fff;\n    var bh3 = b3 >>> 13;\n    var b4 = b[4] | 0;\n    var bl4 = b4 & 0x1fff;\n    var bh4 = b4 >>> 13;\n    var b5 = b[5] | 0;\n    var bl5 = b5 & 0x1fff;\n    var bh5 = b5 >>> 13;\n    var b6 = b[6] | 0;\n    var bl6 = b6 & 0x1fff;\n    var bh6 = b6 >>> 13;\n    var b7 = b[7] | 0;\n    var bl7 = b7 & 0x1fff;\n    var bh7 = b7 >>> 13;\n    var b8 = b[8] | 0;\n    var bl8 = b8 & 0x1fff;\n    var bh8 = b8 >>> 13;\n    var b9 = b[9] | 0;\n    var bl9 = b9 & 0x1fff;\n    var bh9 = b9 >>> 13;\n\n    out.negative = self.negative ^ num.negative;\n    out.length = 19;\n    /* k = 0 */\n    lo = Math.imul(al0, bl0);\n    mid = Math.imul(al0, bh0);\n    mid = (mid + Math.imul(ah0, bl0)) | 0;\n    hi = Math.imul(ah0, bh0);\n    var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n    w0 &= 0x3ffffff;\n    /* k = 1 */\n    lo = Math.imul(al1, bl0);\n    mid = Math.imul(al1, bh0);\n    mid = (mid + Math.imul(ah1, bl0)) | 0;\n    hi = Math.imul(ah1, bh0);\n    lo = (lo + Math.imul(al0, bl1)) | 0;\n    mid = (mid + Math.imul(al0, bh1)) | 0;\n    mid = (mid + Math.imul(ah0, bl1)) | 0;\n    hi = (hi + Math.imul(ah0, bh1)) | 0;\n    var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n    w1 &= 0x3ffffff;\n    /* k = 2 */\n    lo = Math.imul(al2, bl0);\n    mid = Math.imul(al2, bh0);\n    mid = (mid + Math.imul(ah2, bl0)) | 0;\n    hi = Math.imul(ah2, bh0);\n    lo = (lo + Math.imul(al1, bl1)) | 0;\n    mid = (mid + Math.imul(al1, bh1)) | 0;\n    mid = (mid + Math.imul(ah1, bl1)) | 0;\n    hi = (hi + Math.imul(ah1, bh1)) | 0;\n    lo = (lo + Math.imul(al0, bl2)) | 0;\n    mid = (mid + Math.imul(al0, bh2)) | 0;\n    mid = (mid + Math.imul(ah0, bl2)) | 0;\n    hi = (hi + Math.imul(ah0, bh2)) | 0;\n    var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n    w2 &= 0x3ffffff;\n    /* k = 3 */\n    lo = Math.imul(al3, bl0);\n    mid = Math.imul(al3, bh0);\n    mid = (mid + Math.imul(ah3, bl0)) | 0;\n    hi = Math.imul(ah3, bh0);\n    lo = (lo + Math.imul(al2, bl1)) | 0;\n    mid = (mid + Math.imul(al2, bh1)) | 0;\n    mid = (mid + Math.imul(ah2, bl1)) | 0;\n    hi = (hi + Math.imul(ah2, bh1)) | 0;\n    lo = (lo + Math.imul(al1, bl2)) | 0;\n    mid = (mid + Math.imul(al1, bh2)) | 0;\n    mid = (mid + Math.imul(ah1, bl2)) | 0;\n    hi = (hi + Math.imul(ah1, bh2)) | 0;\n    lo = (lo + Math.imul(al0, bl3)) | 0;\n    mid = (mid + Math.imul(al0, bh3)) | 0;\n    mid = (mid + Math.imul(ah0, bl3)) | 0;\n    hi = (hi + Math.imul(ah0, bh3)) | 0;\n    var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n    w3 &= 0x3ffffff;\n    /* k = 4 */\n    lo = Math.imul(al4, bl0);\n    mid = Math.imul(al4, bh0);\n    mid = (mid + Math.imul(ah4, bl0)) | 0;\n    hi = Math.imul(ah4, bh0);\n    lo = (lo + Math.imul(al3, bl1)) | 0;\n    mid = (mid + Math.imul(al3, bh1)) | 0;\n    mid = (mid + Math.imul(ah3, bl1)) | 0;\n    hi = (hi + Math.imul(ah3, bh1)) | 0;\n    lo = (lo + Math.imul(al2, bl2)) | 0;\n    mid = (mid + Math.imul(al2, bh2)) | 0;\n    mid = (mid + Math.imul(ah2, bl2)) | 0;\n    hi = (hi + Math.imul(ah2, bh2)) | 0;\n    lo = (lo + Math.imul(al1, bl3)) | 0;\n    mid = (mid + Math.imul(al1, bh3)) | 0;\n    mid = (mid + Math.imul(ah1, bl3)) | 0;\n    hi = (hi + Math.imul(ah1, bh3)) | 0;\n    lo = (lo + Math.imul(al0, bl4)) | 0;\n    mid = (mid + Math.imul(al0, bh4)) | 0;\n    mid = (mid + Math.imul(ah0, bl4)) | 0;\n    hi = (hi + Math.imul(ah0, bh4)) | 0;\n    var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n    w4 &= 0x3ffffff;\n    /* k = 5 */\n    lo = Math.imul(al5, bl0);\n    mid = Math.imul(al5, bh0);\n    mid = (mid + Math.imul(ah5, bl0)) | 0;\n    hi = Math.imul(ah5, bh0);\n    lo = (lo + Math.imul(al4, bl1)) | 0;\n    mid = (mid + Math.imul(al4, bh1)) | 0;\n    mid = (mid + Math.imul(ah4, bl1)) | 0;\n    hi = (hi + Math.imul(ah4, bh1)) | 0;\n    lo = (lo + Math.imul(al3, bl2)) | 0;\n    mid = (mid + Math.imul(al3, bh2)) | 0;\n    mid = (mid + Math.imul(ah3, bl2)) | 0;\n    hi = (hi + Math.imul(ah3, bh2)) | 0;\n    lo = (lo + Math.imul(al2, bl3)) | 0;\n    mid = (mid + Math.imul(al2, bh3)) | 0;\n    mid = (mid + Math.imul(ah2, bl3)) | 0;\n    hi = (hi + Math.imul(ah2, bh3)) | 0;\n    lo = (lo + Math.imul(al1, bl4)) | 0;\n    mid = (mid + Math.imul(al1, bh4)) | 0;\n    mid = (mid + Math.imul(ah1, bl4)) | 0;\n    hi = (hi + Math.imul(ah1, bh4)) | 0;\n    lo = (lo + Math.imul(al0, bl5)) | 0;\n    mid = (mid + Math.imul(al0, bh5)) | 0;\n    mid = (mid + Math.imul(ah0, bl5)) | 0;\n    hi = (hi + Math.imul(ah0, bh5)) | 0;\n    var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n    w5 &= 0x3ffffff;\n    /* k = 6 */\n    lo = Math.imul(al6, bl0);\n    mid = Math.imul(al6, bh0);\n    mid = (mid + Math.imul(ah6, bl0)) | 0;\n    hi = Math.imul(ah6, bh0);\n    lo = (lo + Math.imul(al5, bl1)) | 0;\n    mid = (mid + Math.imul(al5, bh1)) | 0;\n    mid = (mid + Math.imul(ah5, bl1)) | 0;\n    hi = (hi + Math.imul(ah5, bh1)) | 0;\n    lo = (lo + Math.imul(al4, bl2)) | 0;\n    mid = (mid + Math.imul(al4, bh2)) | 0;\n    mid = (mid + Math.imul(ah4, bl2)) | 0;\n    hi = (hi + Math.imul(ah4, bh2)) | 0;\n    lo = (lo + Math.imul(al3, bl3)) | 0;\n    mid = (mid + Math.imul(al3, bh3)) | 0;\n    mid = (mid + Math.imul(ah3, bl3)) | 0;\n    hi = (hi + Math.imul(ah3, bh3)) | 0;\n    lo = (lo + Math.imul(al2, bl4)) | 0;\n    mid = (mid + Math.imul(al2, bh4)) | 0;\n    mid = (mid + Math.imul(ah2, bl4)) | 0;\n    hi = (hi + Math.imul(ah2, bh4)) | 0;\n    lo = (lo + Math.imul(al1, bl5)) | 0;\n    mid = (mid + Math.imul(al1, bh5)) | 0;\n    mid = (mid + Math.imul(ah1, bl5)) | 0;\n    hi = (hi + Math.imul(ah1, bh5)) | 0;\n    lo = (lo + Math.imul(al0, bl6)) | 0;\n    mid = (mid + Math.imul(al0, bh6)) | 0;\n    mid = (mid + Math.imul(ah0, bl6)) | 0;\n    hi = (hi + Math.imul(ah0, bh6)) | 0;\n    var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n    w6 &= 0x3ffffff;\n    /* k = 7 */\n    lo = Math.imul(al7, bl0);\n    mid = Math.imul(al7, bh0);\n    mid = (mid + Math.imul(ah7, bl0)) | 0;\n    hi = Math.imul(ah7, bh0);\n    lo = (lo + Math.imul(al6, bl1)) | 0;\n    mid = (mid + Math.imul(al6, bh1)) | 0;\n    mid = (mid + Math.imul(ah6, bl1)) | 0;\n    hi = (hi + Math.imul(ah6, bh1)) | 0;\n    lo = (lo + Math.imul(al5, bl2)) | 0;\n    mid = (mid + Math.imul(al5, bh2)) | 0;\n    mid = (mid + Math.imul(ah5, bl2)) | 0;\n    hi = (hi + Math.imul(ah5, bh2)) | 0;\n    lo = (lo + Math.imul(al4, bl3)) | 0;\n    mid = (mid + Math.imul(al4, bh3)) | 0;\n    mid = (mid + Math.imul(ah4, bl3)) | 0;\n    hi = (hi + Math.imul(ah4, bh3)) | 0;\n    lo = (lo + Math.imul(al3, bl4)) | 0;\n    mid = (mid + Math.imul(al3, bh4)) | 0;\n    mid = (mid + Math.imul(ah3, bl4)) | 0;\n    hi = (hi + Math.imul(ah3, bh4)) | 0;\n    lo = (lo + Math.imul(al2, bl5)) | 0;\n    mid = (mid + Math.imul(al2, bh5)) | 0;\n    mid = (mid + Math.imul(ah2, bl5)) | 0;\n    hi = (hi + Math.imul(ah2, bh5)) | 0;\n    lo = (lo + Math.imul(al1, bl6)) | 0;\n    mid = (mid + Math.imul(al1, bh6)) | 0;\n    mid = (mid + Math.imul(ah1, bl6)) | 0;\n    hi = (hi + Math.imul(ah1, bh6)) | 0;\n    lo = (lo + Math.imul(al0, bl7)) | 0;\n    mid = (mid + Math.imul(al0, bh7)) | 0;\n    mid = (mid + Math.imul(ah0, bl7)) | 0;\n    hi = (hi + Math.imul(ah0, bh7)) | 0;\n    var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n    w7 &= 0x3ffffff;\n    /* k = 8 */\n    lo = Math.imul(al8, bl0);\n    mid = Math.imul(al8, bh0);\n    mid = (mid + Math.imul(ah8, bl0)) | 0;\n    hi = Math.imul(ah8, bh0);\n    lo = (lo + Math.imul(al7, bl1)) | 0;\n    mid = (mid + Math.imul(al7, bh1)) | 0;\n    mid = (mid + Math.imul(ah7, bl1)) | 0;\n    hi = (hi + Math.imul(ah7, bh1)) | 0;\n    lo = (lo + Math.imul(al6, bl2)) | 0;\n    mid = (mid + Math.imul(al6, bh2)) | 0;\n    mid = (mid + Math.imul(ah6, bl2)) | 0;\n    hi = (hi + Math.imul(ah6, bh2)) | 0;\n    lo = (lo + Math.imul(al5, bl3)) | 0;\n    mid = (mid + Math.imul(al5, bh3)) | 0;\n    mid = (mid + Math.imul(ah5, bl3)) | 0;\n    hi = (hi + Math.imul(ah5, bh3)) | 0;\n    lo = (lo + Math.imul(al4, bl4)) | 0;\n    mid = (mid + Math.imul(al4, bh4)) | 0;\n    mid = (mid + Math.imul(ah4, bl4)) | 0;\n    hi = (hi + Math.imul(ah4, bh4)) | 0;\n    lo = (lo + Math.imul(al3, bl5)) | 0;\n    mid = (mid + Math.imul(al3, bh5)) | 0;\n    mid = (mid + Math.imul(ah3, bl5)) | 0;\n    hi = (hi + Math.imul(ah3, bh5)) | 0;\n    lo = (lo + Math.imul(al2, bl6)) | 0;\n    mid = (mid + Math.imul(al2, bh6)) | 0;\n    mid = (mid + Math.imul(ah2, bl6)) | 0;\n    hi = (hi + Math.imul(ah2, bh6)) | 0;\n    lo = (lo + Math.imul(al1, bl7)) | 0;\n    mid = (mid + Math.imul(al1, bh7)) | 0;\n    mid = (mid + Math.imul(ah1, bl7)) | 0;\n    hi = (hi + Math.imul(ah1, bh7)) | 0;\n    lo = (lo + Math.imul(al0, bl8)) | 0;\n    mid = (mid + Math.imul(al0, bh8)) | 0;\n    mid = (mid + Math.imul(ah0, bl8)) | 0;\n    hi = (hi + Math.imul(ah0, bh8)) | 0;\n    var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n    w8 &= 0x3ffffff;\n    /* k = 9 */\n    lo = Math.imul(al9, bl0);\n    mid = Math.imul(al9, bh0);\n    mid = (mid + Math.imul(ah9, bl0)) | 0;\n    hi = Math.imul(ah9, bh0);\n    lo = (lo + Math.imul(al8, bl1)) | 0;\n    mid = (mid + Math.imul(al8, bh1)) | 0;\n    mid = (mid + Math.imul(ah8, bl1)) | 0;\n    hi = (hi + Math.imul(ah8, bh1)) | 0;\n    lo = (lo + Math.imul(al7, bl2)) | 0;\n    mid = (mid + Math.imul(al7, bh2)) | 0;\n    mid = (mid + Math.imul(ah7, bl2)) | 0;\n    hi = (hi + Math.imul(ah7, bh2)) | 0;\n    lo = (lo + Math.imul(al6, bl3)) | 0;\n    mid = (mid + Math.imul(al6, bh3)) | 0;\n    mid = (mid + Math.imul(ah6, bl3)) | 0;\n    hi = (hi + Math.imul(ah6, bh3)) | 0;\n    lo = (lo + Math.imul(al5, bl4)) | 0;\n    mid = (mid + Math.imul(al5, bh4)) | 0;\n    mid = (mid + Math.imul(ah5, bl4)) | 0;\n    hi = (hi + Math.imul(ah5, bh4)) | 0;\n    lo = (lo + Math.imul(al4, bl5)) | 0;\n    mid = (mid + Math.imul(al4, bh5)) | 0;\n    mid = (mid + Math.imul(ah4, bl5)) | 0;\n    hi = (hi + Math.imul(ah4, bh5)) | 0;\n    lo = (lo + Math.imul(al3, bl6)) | 0;\n    mid = (mid + Math.imul(al3, bh6)) | 0;\n    mid = (mid + Math.imul(ah3, bl6)) | 0;\n    hi = (hi + Math.imul(ah3, bh6)) | 0;\n    lo = (lo + Math.imul(al2, bl7)) | 0;\n    mid = (mid + Math.imul(al2, bh7)) | 0;\n    mid = (mid + Math.imul(ah2, bl7)) | 0;\n    hi = (hi + Math.imul(ah2, bh7)) | 0;\n    lo = (lo + Math.imul(al1, bl8)) | 0;\n    mid = (mid + Math.imul(al1, bh8)) | 0;\n    mid = (mid + Math.imul(ah1, bl8)) | 0;\n    hi = (hi + Math.imul(ah1, bh8)) | 0;\n    lo = (lo + Math.imul(al0, bl9)) | 0;\n    mid = (mid + Math.imul(al0, bh9)) | 0;\n    mid = (mid + Math.imul(ah0, bl9)) | 0;\n    hi = (hi + Math.imul(ah0, bh9)) | 0;\n    var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n    w9 &= 0x3ffffff;\n    /* k = 10 */\n    lo = Math.imul(al9, bl1);\n    mid = Math.imul(al9, bh1);\n    mid = (mid + Math.imul(ah9, bl1)) | 0;\n    hi = Math.imul(ah9, bh1);\n    lo = (lo + Math.imul(al8, bl2)) | 0;\n    mid = (mid + Math.imul(al8, bh2)) | 0;\n    mid = (mid + Math.imul(ah8, bl2)) | 0;\n    hi = (hi + Math.imul(ah8, bh2)) | 0;\n    lo = (lo + Math.imul(al7, bl3)) | 0;\n    mid = (mid + Math.imul(al7, bh3)) | 0;\n    mid = (mid + Math.imul(ah7, bl3)) | 0;\n    hi = (hi + Math.imul(ah7, bh3)) | 0;\n    lo = (lo + Math.imul(al6, bl4)) | 0;\n    mid = (mid + Math.imul(al6, bh4)) | 0;\n    mid = (mid + Math.imul(ah6, bl4)) | 0;\n    hi = (hi + Math.imul(ah6, bh4)) | 0;\n    lo = (lo + Math.imul(al5, bl5)) | 0;\n    mid = (mid + Math.imul(al5, bh5)) | 0;\n    mid = (mid + Math.imul(ah5, bl5)) | 0;\n    hi = (hi + Math.imul(ah5, bh5)) | 0;\n    lo = (lo + Math.imul(al4, bl6)) | 0;\n    mid = (mid + Math.imul(al4, bh6)) | 0;\n    mid = (mid + Math.imul(ah4, bl6)) | 0;\n    hi = (hi + Math.imul(ah4, bh6)) | 0;\n    lo = (lo + Math.imul(al3, bl7)) | 0;\n    mid = (mid + Math.imul(al3, bh7)) | 0;\n    mid = (mid + Math.imul(ah3, bl7)) | 0;\n    hi = (hi + Math.imul(ah3, bh7)) | 0;\n    lo = (lo + Math.imul(al2, bl8)) | 0;\n    mid = (mid + Math.imul(al2, bh8)) | 0;\n    mid = (mid + Math.imul(ah2, bl8)) | 0;\n    hi = (hi + Math.imul(ah2, bh8)) | 0;\n    lo = (lo + Math.imul(al1, bl9)) | 0;\n    mid = (mid + Math.imul(al1, bh9)) | 0;\n    mid = (mid + Math.imul(ah1, bl9)) | 0;\n    hi = (hi + Math.imul(ah1, bh9)) | 0;\n    var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n    w10 &= 0x3ffffff;\n    /* k = 11 */\n    lo = Math.imul(al9, bl2);\n    mid = Math.imul(al9, bh2);\n    mid = (mid + Math.imul(ah9, bl2)) | 0;\n    hi = Math.imul(ah9, bh2);\n    lo = (lo + Math.imul(al8, bl3)) | 0;\n    mid = (mid + Math.imul(al8, bh3)) | 0;\n    mid = (mid + Math.imul(ah8, bl3)) | 0;\n    hi = (hi + Math.imul(ah8, bh3)) | 0;\n    lo = (lo + Math.imul(al7, bl4)) | 0;\n    mid = (mid + Math.imul(al7, bh4)) | 0;\n    mid = (mid + Math.imul(ah7, bl4)) | 0;\n    hi = (hi + Math.imul(ah7, bh4)) | 0;\n    lo = (lo + Math.imul(al6, bl5)) | 0;\n    mid = (mid + Math.imul(al6, bh5)) | 0;\n    mid = (mid + Math.imul(ah6, bl5)) | 0;\n    hi = (hi + Math.imul(ah6, bh5)) | 0;\n    lo = (lo + Math.imul(al5, bl6)) | 0;\n    mid = (mid + Math.imul(al5, bh6)) | 0;\n    mid = (mid + Math.imul(ah5, bl6)) | 0;\n    hi = (hi + Math.imul(ah5, bh6)) | 0;\n    lo = (lo + Math.imul(al4, bl7)) | 0;\n    mid = (mid + Math.imul(al4, bh7)) | 0;\n    mid = (mid + Math.imul(ah4, bl7)) | 0;\n    hi = (hi + Math.imul(ah4, bh7)) | 0;\n    lo = (lo + Math.imul(al3, bl8)) | 0;\n    mid = (mid + Math.imul(al3, bh8)) | 0;\n    mid = (mid + Math.imul(ah3, bl8)) | 0;\n    hi = (hi + Math.imul(ah3, bh8)) | 0;\n    lo = (lo + Math.imul(al2, bl9)) | 0;\n    mid = (mid + Math.imul(al2, bh9)) | 0;\n    mid = (mid + Math.imul(ah2, bl9)) | 0;\n    hi = (hi + Math.imul(ah2, bh9)) | 0;\n    var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n    w11 &= 0x3ffffff;\n    /* k = 12 */\n    lo = Math.imul(al9, bl3);\n    mid = Math.imul(al9, bh3);\n    mid = (mid + Math.imul(ah9, bl3)) | 0;\n    hi = Math.imul(ah9, bh3);\n    lo = (lo + Math.imul(al8, bl4)) | 0;\n    mid = (mid + Math.imul(al8, bh4)) | 0;\n    mid = (mid + Math.imul(ah8, bl4)) | 0;\n    hi = (hi + Math.imul(ah8, bh4)) | 0;\n    lo = (lo + Math.imul(al7, bl5)) | 0;\n    mid = (mid + Math.imul(al7, bh5)) | 0;\n    mid = (mid + Math.imul(ah7, bl5)) | 0;\n    hi = (hi + Math.imul(ah7, bh5)) | 0;\n    lo = (lo + Math.imul(al6, bl6)) | 0;\n    mid = (mid + Math.imul(al6, bh6)) | 0;\n    mid = (mid + Math.imul(ah6, bl6)) | 0;\n    hi = (hi + Math.imul(ah6, bh6)) | 0;\n    lo = (lo + Math.imul(al5, bl7)) | 0;\n    mid = (mid + Math.imul(al5, bh7)) | 0;\n    mid = (mid + Math.imul(ah5, bl7)) | 0;\n    hi = (hi + Math.imul(ah5, bh7)) | 0;\n    lo = (lo + Math.imul(al4, bl8)) | 0;\n    mid = (mid + Math.imul(al4, bh8)) | 0;\n    mid = (mid + Math.imul(ah4, bl8)) | 0;\n    hi = (hi + Math.imul(ah4, bh8)) | 0;\n    lo = (lo + Math.imul(al3, bl9)) | 0;\n    mid = (mid + Math.imul(al3, bh9)) | 0;\n    mid = (mid + Math.imul(ah3, bl9)) | 0;\n    hi = (hi + Math.imul(ah3, bh9)) | 0;\n    var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n    w12 &= 0x3ffffff;\n    /* k = 13 */\n    lo = Math.imul(al9, bl4);\n    mid = Math.imul(al9, bh4);\n    mid = (mid + Math.imul(ah9, bl4)) | 0;\n    hi = Math.imul(ah9, bh4);\n    lo = (lo + Math.imul(al8, bl5)) | 0;\n    mid = (mid + Math.imul(al8, bh5)) | 0;\n    mid = (mid + Math.imul(ah8, bl5)) | 0;\n    hi = (hi + Math.imul(ah8, bh5)) | 0;\n    lo = (lo + Math.imul(al7, bl6)) | 0;\n    mid = (mid + Math.imul(al7, bh6)) | 0;\n    mid = (mid + Math.imul(ah7, bl6)) | 0;\n    hi = (hi + Math.imul(ah7, bh6)) | 0;\n    lo = (lo + Math.imul(al6, bl7)) | 0;\n    mid = (mid + Math.imul(al6, bh7)) | 0;\n    mid = (mid + Math.imul(ah6, bl7)) | 0;\n    hi = (hi + Math.imul(ah6, bh7)) | 0;\n    lo = (lo + Math.imul(al5, bl8)) | 0;\n    mid = (mid + Math.imul(al5, bh8)) | 0;\n    mid = (mid + Math.imul(ah5, bl8)) | 0;\n    hi = (hi + Math.imul(ah5, bh8)) | 0;\n    lo = (lo + Math.imul(al4, bl9)) | 0;\n    mid = (mid + Math.imul(al4, bh9)) | 0;\n    mid = (mid + Math.imul(ah4, bl9)) | 0;\n    hi = (hi + Math.imul(ah4, bh9)) | 0;\n    var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n    w13 &= 0x3ffffff;\n    /* k = 14 */\n    lo = Math.imul(al9, bl5);\n    mid = Math.imul(al9, bh5);\n    mid = (mid + Math.imul(ah9, bl5)) | 0;\n    hi = Math.imul(ah9, bh5);\n    lo = (lo + Math.imul(al8, bl6)) | 0;\n    mid = (mid + Math.imul(al8, bh6)) | 0;\n    mid = (mid + Math.imul(ah8, bl6)) | 0;\n    hi = (hi + Math.imul(ah8, bh6)) | 0;\n    lo = (lo + Math.imul(al7, bl7)) | 0;\n    mid = (mid + Math.imul(al7, bh7)) | 0;\n    mid = (mid + Math.imul(ah7, bl7)) | 0;\n    hi = (hi + Math.imul(ah7, bh7)) | 0;\n    lo = (lo + Math.imul(al6, bl8)) | 0;\n    mid = (mid + Math.imul(al6, bh8)) | 0;\n    mid = (mid + Math.imul(ah6, bl8)) | 0;\n    hi = (hi + Math.imul(ah6, bh8)) | 0;\n    lo = (lo + Math.imul(al5, bl9)) | 0;\n    mid = (mid + Math.imul(al5, bh9)) | 0;\n    mid = (mid + Math.imul(ah5, bl9)) | 0;\n    hi = (hi + Math.imul(ah5, bh9)) | 0;\n    var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n    w14 &= 0x3ffffff;\n    /* k = 15 */\n    lo = Math.imul(al9, bl6);\n    mid = Math.imul(al9, bh6);\n    mid = (mid + Math.imul(ah9, bl6)) | 0;\n    hi = Math.imul(ah9, bh6);\n    lo = (lo + Math.imul(al8, bl7)) | 0;\n    mid = (mid + Math.imul(al8, bh7)) | 0;\n    mid = (mid + Math.imul(ah8, bl7)) | 0;\n    hi = (hi + Math.imul(ah8, bh7)) | 0;\n    lo = (lo + Math.imul(al7, bl8)) | 0;\n    mid = (mid + Math.imul(al7, bh8)) | 0;\n    mid = (mid + Math.imul(ah7, bl8)) | 0;\n    hi = (hi + Math.imul(ah7, bh8)) | 0;\n    lo = (lo + Math.imul(al6, bl9)) | 0;\n    mid = (mid + Math.imul(al6, bh9)) | 0;\n    mid = (mid + Math.imul(ah6, bl9)) | 0;\n    hi = (hi + Math.imul(ah6, bh9)) | 0;\n    var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n    w15 &= 0x3ffffff;\n    /* k = 16 */\n    lo = Math.imul(al9, bl7);\n    mid = Math.imul(al9, bh7);\n    mid = (mid + Math.imul(ah9, bl7)) | 0;\n    hi = Math.imul(ah9, bh7);\n    lo = (lo + Math.imul(al8, bl8)) | 0;\n    mid = (mid + Math.imul(al8, bh8)) | 0;\n    mid = (mid + Math.imul(ah8, bl8)) | 0;\n    hi = (hi + Math.imul(ah8, bh8)) | 0;\n    lo = (lo + Math.imul(al7, bl9)) | 0;\n    mid = (mid + Math.imul(al7, bh9)) | 0;\n    mid = (mid + Math.imul(ah7, bl9)) | 0;\n    hi = (hi + Math.imul(ah7, bh9)) | 0;\n    var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n    w16 &= 0x3ffffff;\n    /* k = 17 */\n    lo = Math.imul(al9, bl8);\n    mid = Math.imul(al9, bh8);\n    mid = (mid + Math.imul(ah9, bl8)) | 0;\n    hi = Math.imul(ah9, bh8);\n    lo = (lo + Math.imul(al8, bl9)) | 0;\n    mid = (mid + Math.imul(al8, bh9)) | 0;\n    mid = (mid + Math.imul(ah8, bl9)) | 0;\n    hi = (hi + Math.imul(ah8, bh9)) | 0;\n    var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n    w17 &= 0x3ffffff;\n    /* k = 18 */\n    lo = Math.imul(al9, bl9);\n    mid = Math.imul(al9, bh9);\n    mid = (mid + Math.imul(ah9, bl9)) | 0;\n    hi = Math.imul(ah9, bh9);\n    var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n    w18 &= 0x3ffffff;\n    o[0] = w0;\n    o[1] = w1;\n    o[2] = w2;\n    o[3] = w3;\n    o[4] = w4;\n    o[5] = w5;\n    o[6] = w6;\n    o[7] = w7;\n    o[8] = w8;\n    o[9] = w9;\n    o[10] = w10;\n    o[11] = w11;\n    o[12] = w12;\n    o[13] = w13;\n    o[14] = w14;\n    o[15] = w15;\n    o[16] = w16;\n    o[17] = w17;\n    o[18] = w18;\n    if (c !== 0) {\n      o[19] = c;\n      out.length++;\n    }\n    return out;\n  };\n\n  // Polyfill comb\n  if (!Math.imul) {\n    comb10MulTo = smallMulTo;\n  }\n\n  function bigMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    out.length = self.length + num.length;\n\n    var carry = 0;\n    var hncarry = 0;\n    for (var k = 0; k < out.length - 1; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = hncarry;\n      hncarry = 0;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = k - j;\n        var a = self.words[i] | 0;\n        var b = num.words[j] | 0;\n        var r = a * b;\n\n        var lo = r & 0x3ffffff;\n        ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n        lo = (lo + rword) | 0;\n        rword = lo & 0x3ffffff;\n        ncarry = (ncarry + (lo >>> 26)) | 0;\n\n        hncarry += ncarry >>> 26;\n        ncarry &= 0x3ffffff;\n      }\n      out.words[k] = rword;\n      carry = ncarry;\n      ncarry = hncarry;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry;\n    } else {\n      out.length--;\n    }\n\n    return out._strip();\n  }\n\n  function jumboMulTo (self, num, out) {\n    // Temporary disable, see https://github.com/indutny/bn.js/issues/211\n    // var fftm = new FFTM();\n    // return fftm.mulp(self, num, out);\n    return bigMulTo(self, num, out);\n  }\n\n  BN.prototype.mulTo = function mulTo (num, out) {\n    var res;\n    var len = this.length + num.length;\n    if (this.length === 10 && num.length === 10) {\n      res = comb10MulTo(this, num, out);\n    } else if (len < 63) {\n      res = smallMulTo(this, num, out);\n    } else if (len < 1024) {\n      res = bigMulTo(this, num, out);\n    } else {\n      res = jumboMulTo(this, num, out);\n    }\n\n    return res;\n  };\n\n  // Cooley-Tukey algorithm for FFT\n  // slightly revisited to rely on looping instead of recursion\n\n  function FFTM (x, y) {\n    this.x = x;\n    this.y = y;\n  }\n\n  FFTM.prototype.makeRBT = function makeRBT (N) {\n    var t = new Array(N);\n    var l = BN.prototype._countBits(N) - 1;\n    for (var i = 0; i < N; i++) {\n      t[i] = this.revBin(i, l, N);\n    }\n\n    return t;\n  };\n\n  // Returns binary-reversed representation of `x`\n  FFTM.prototype.revBin = function revBin (x, l, N) {\n    if (x === 0 || x === N - 1) return x;\n\n    var rb = 0;\n    for (var i = 0; i < l; i++) {\n      rb |= (x & 1) << (l - i - 1);\n      x >>= 1;\n    }\n\n    return rb;\n  };\n\n  // Performs \"tweedling\" phase, therefore 'emulating'\n  // behaviour of the recursive algorithm\n  FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n    for (var i = 0; i < N; i++) {\n      rtws[i] = rws[rbt[i]];\n      itws[i] = iws[rbt[i]];\n    }\n  };\n\n  FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n    this.permute(rbt, rws, iws, rtws, itws, N);\n\n    for (var s = 1; s < N; s <<= 1) {\n      var l = s << 1;\n\n      var rtwdf = Math.cos(2 * Math.PI / l);\n      var itwdf = Math.sin(2 * Math.PI / l);\n\n      for (var p = 0; p < N; p += l) {\n        var rtwdf_ = rtwdf;\n        var itwdf_ = itwdf;\n\n        for (var j = 0; j < s; j++) {\n          var re = rtws[p + j];\n          var ie = itws[p + j];\n\n          var ro = rtws[p + j + s];\n          var io = itws[p + j + s];\n\n          var rx = rtwdf_ * ro - itwdf_ * io;\n\n          io = rtwdf_ * io + itwdf_ * ro;\n          ro = rx;\n\n          rtws[p + j] = re + ro;\n          itws[p + j] = ie + io;\n\n          rtws[p + j + s] = re - ro;\n          itws[p + j + s] = ie - io;\n\n          /* jshint maxdepth : false */\n          if (j !== l) {\n            rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n            itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n            rtwdf_ = rx;\n          }\n        }\n      }\n    }\n  };\n\n  FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n    var N = Math.max(m, n) | 1;\n    var odd = N & 1;\n    var i = 0;\n    for (N = N / 2 | 0; N; N = N >>> 1) {\n      i++;\n    }\n\n    return 1 << i + 1 + odd;\n  };\n\n  FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n    if (N <= 1) return;\n\n    for (var i = 0; i < N / 2; i++) {\n      var t = rws[i];\n\n      rws[i] = rws[N - i - 1];\n      rws[N - i - 1] = t;\n\n      t = iws[i];\n\n      iws[i] = -iws[N - i - 1];\n      iws[N - i - 1] = -t;\n    }\n  };\n\n  FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n    var carry = 0;\n    for (var i = 0; i < N / 2; i++) {\n      var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n        Math.round(ws[2 * i] / N) +\n        carry;\n\n      ws[i] = w & 0x3ffffff;\n\n      if (w < 0x4000000) {\n        carry = 0;\n      } else {\n        carry = w / 0x4000000 | 0;\n      }\n    }\n\n    return ws;\n  };\n\n  FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n    var carry = 0;\n    for (var i = 0; i < len; i++) {\n      carry = carry + (ws[i] | 0);\n\n      rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n      rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n    }\n\n    // Pad with zeroes\n    for (i = 2 * len; i < N; ++i) {\n      rws[i] = 0;\n    }\n\n    assert(carry === 0);\n    assert((carry & ~0x1fff) === 0);\n  };\n\n  FFTM.prototype.stub = function stub (N) {\n    var ph = new Array(N);\n    for (var i = 0; i < N; i++) {\n      ph[i] = 0;\n    }\n\n    return ph;\n  };\n\n  FFTM.prototype.mulp = function mulp (x, y, out) {\n    var N = 2 * this.guessLen13b(x.length, y.length);\n\n    var rbt = this.makeRBT(N);\n\n    var _ = this.stub(N);\n\n    var rws = new Array(N);\n    var rwst = new Array(N);\n    var iwst = new Array(N);\n\n    var nrws = new Array(N);\n    var nrwst = new Array(N);\n    var niwst = new Array(N);\n\n    var rmws = out.words;\n    rmws.length = N;\n\n    this.convert13b(x.words, x.length, rws, N);\n    this.convert13b(y.words, y.length, nrws, N);\n\n    this.transform(rws, _, rwst, iwst, N, rbt);\n    this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n    for (var i = 0; i < N; i++) {\n      var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n      iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n      rwst[i] = rx;\n    }\n\n    this.conjugate(rwst, iwst, N);\n    this.transform(rwst, iwst, rmws, _, N, rbt);\n    this.conjugate(rmws, _, N);\n    this.normalize13b(rmws, N);\n\n    out.negative = x.negative ^ y.negative;\n    out.length = x.length + y.length;\n    return out._strip();\n  };\n\n  // Multiply `this` by `num`\n  BN.prototype.mul = function mul (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return this.mulTo(num, out);\n  };\n\n  // Multiply employing FFT\n  BN.prototype.mulf = function mulf (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return jumboMulTo(this, num, out);\n  };\n\n  // In-place Multiplication\n  BN.prototype.imul = function imul (num) {\n    return this.clone().mulTo(num, this);\n  };\n\n  BN.prototype.imuln = function imuln (num) {\n    var isNegNum = num < 0;\n    if (isNegNum) num = -num;\n\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n\n    // Carry\n    var carry = 0;\n    for (var i = 0; i < this.length; i++) {\n      var w = (this.words[i] | 0) * num;\n      var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n      carry >>= 26;\n      carry += (w / 0x4000000) | 0;\n      // NOTE: lo is 27bit maximum\n      carry += lo >>> 26;\n      this.words[i] = lo & 0x3ffffff;\n    }\n\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n    this.length = num === 0 ? 1 : this.length;\n\n    return isNegNum ? this.ineg() : this;\n  };\n\n  BN.prototype.muln = function muln (num) {\n    return this.clone().imuln(num);\n  };\n\n  // `this` * `this`\n  BN.prototype.sqr = function sqr () {\n    return this.mul(this);\n  };\n\n  // `this` * `this` in-place\n  BN.prototype.isqr = function isqr () {\n    return this.imul(this.clone());\n  };\n\n  // Math.pow(`this`, `num`)\n  BN.prototype.pow = function pow (num) {\n    var w = toBitArray(num);\n    if (w.length === 0) return new BN(1);\n\n    // Skip leading zeroes\n    var res = this;\n    for (var i = 0; i < w.length; i++, res = res.sqr()) {\n      if (w[i] !== 0) break;\n    }\n\n    if (++i < w.length) {\n      for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n        if (w[i] === 0) continue;\n\n        res = res.mul(q);\n      }\n    }\n\n    return res;\n  };\n\n  // Shift-left in-place\n  BN.prototype.iushln = function iushln (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n    var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n    var i;\n\n    if (r !== 0) {\n      var carry = 0;\n\n      for (i = 0; i < this.length; i++) {\n        var newCarry = this.words[i] & carryMask;\n        var c = ((this.words[i] | 0) - newCarry) << r;\n        this.words[i] = c | carry;\n        carry = newCarry >>> (26 - r);\n      }\n\n      if (carry) {\n        this.words[i] = carry;\n        this.length++;\n      }\n    }\n\n    if (s !== 0) {\n      for (i = this.length - 1; i >= 0; i--) {\n        this.words[i + s] = this.words[i];\n      }\n\n      for (i = 0; i < s; i++) {\n        this.words[i] = 0;\n      }\n\n      this.length += s;\n    }\n\n    return this._strip();\n  };\n\n  BN.prototype.ishln = function ishln (bits) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushln(bits);\n  };\n\n  // Shift-right in-place\n  // NOTE: `hint` is a lowest bit before trailing zeroes\n  // NOTE: if `extended` is present - it will be filled with destroyed bits\n  BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var h;\n    if (hint) {\n      h = (hint - (hint % 26)) / 26;\n    } else {\n      h = 0;\n    }\n\n    var r = bits % 26;\n    var s = Math.min((bits - r) / 26, this.length);\n    var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n    var maskedWords = extended;\n\n    h -= s;\n    h = Math.max(0, h);\n\n    // Extended mode, copy masked part\n    if (maskedWords) {\n      for (var i = 0; i < s; i++) {\n        maskedWords.words[i] = this.words[i];\n      }\n      maskedWords.length = s;\n    }\n\n    if (s === 0) {\n      // No-op, we should not move anything at all\n    } else if (this.length > s) {\n      this.length -= s;\n      for (i = 0; i < this.length; i++) {\n        this.words[i] = this.words[i + s];\n      }\n    } else {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    var carry = 0;\n    for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n      var word = this.words[i] | 0;\n      this.words[i] = (carry << (26 - r)) | (word >>> r);\n      carry = word & mask;\n    }\n\n    // Push carried bits as a mask\n    if (maskedWords && carry !== 0) {\n      maskedWords.words[maskedWords.length++] = carry;\n    }\n\n    if (this.length === 0) {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    return this._strip();\n  };\n\n  BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushrn(bits, hint, extended);\n  };\n\n  // Shift-left\n  BN.prototype.shln = function shln (bits) {\n    return this.clone().ishln(bits);\n  };\n\n  BN.prototype.ushln = function ushln (bits) {\n    return this.clone().iushln(bits);\n  };\n\n  // Shift-right\n  BN.prototype.shrn = function shrn (bits) {\n    return this.clone().ishrn(bits);\n  };\n\n  BN.prototype.ushrn = function ushrn (bits) {\n    return this.clone().iushrn(bits);\n  };\n\n  // Test if n bit is set\n  BN.prototype.testn = function testn (bit) {\n    assert(typeof bit === 'number' && bit >= 0);\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) return false;\n\n    // Check bit and return\n    var w = this.words[s];\n\n    return !!(w & q);\n  };\n\n  // Return only lowers bits of number (in-place)\n  BN.prototype.imaskn = function imaskn (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n\n    assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n    if (this.length <= s) {\n      return this;\n    }\n\n    if (r !== 0) {\n      s++;\n    }\n    this.length = Math.min(s, this.length);\n\n    if (r !== 0) {\n      var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n      this.words[this.length - 1] &= mask;\n    }\n\n    if (this.length === 0) {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    return this._strip();\n  };\n\n  // Return only lowers bits of number\n  BN.prototype.maskn = function maskn (bits) {\n    return this.clone().imaskn(bits);\n  };\n\n  // Add plain number `num` to `this`\n  BN.prototype.iaddn = function iaddn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.isubn(-num);\n\n    // Possible sign change\n    if (this.negative !== 0) {\n      if (this.length === 1 && (this.words[0] | 0) <= num) {\n        this.words[0] = num - (this.words[0] | 0);\n        this.negative = 0;\n        return this;\n      }\n\n      this.negative = 0;\n      this.isubn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    // Add without checks\n    return this._iaddn(num);\n  };\n\n  BN.prototype._iaddn = function _iaddn (num) {\n    this.words[0] += num;\n\n    // Carry\n    for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n      this.words[i] -= 0x4000000;\n      if (i === this.length - 1) {\n        this.words[i + 1] = 1;\n      } else {\n        this.words[i + 1]++;\n      }\n    }\n    this.length = Math.max(this.length, i + 1);\n\n    return this;\n  };\n\n  // Subtract plain number `num` from `this`\n  BN.prototype.isubn = function isubn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.iaddn(-num);\n\n    if (this.negative !== 0) {\n      this.negative = 0;\n      this.iaddn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    this.words[0] -= num;\n\n    if (this.length === 1 && this.words[0] < 0) {\n      this.words[0] = -this.words[0];\n      this.negative = 1;\n    } else {\n      // Carry\n      for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n        this.words[i] += 0x4000000;\n        this.words[i + 1] -= 1;\n      }\n    }\n\n    return this._strip();\n  };\n\n  BN.prototype.addn = function addn (num) {\n    return this.clone().iaddn(num);\n  };\n\n  BN.prototype.subn = function subn (num) {\n    return this.clone().isubn(num);\n  };\n\n  BN.prototype.iabs = function iabs () {\n    this.negative = 0;\n\n    return this;\n  };\n\n  BN.prototype.abs = function abs () {\n    return this.clone().iabs();\n  };\n\n  BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n    var len = num.length + shift;\n    var i;\n\n    this._expand(len);\n\n    var w;\n    var carry = 0;\n    for (i = 0; i < num.length; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      var right = (num.words[i] | 0) * mul;\n      w -= right & 0x3ffffff;\n      carry = (w >> 26) - ((right / 0x4000000) | 0);\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n    for (; i < this.length - shift; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      carry = w >> 26;\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n\n    if (carry === 0) return this._strip();\n\n    // Subtraction overflow\n    assert(carry === -1);\n    carry = 0;\n    for (i = 0; i < this.length; i++) {\n      w = -(this.words[i] | 0) + carry;\n      carry = w >> 26;\n      this.words[i] = w & 0x3ffffff;\n    }\n    this.negative = 1;\n\n    return this._strip();\n  };\n\n  BN.prototype._wordDiv = function _wordDiv (num, mode) {\n    var shift = this.length - num.length;\n\n    var a = this.clone();\n    var b = num;\n\n    // Normalize\n    var bhi = b.words[b.length - 1] | 0;\n    var bhiBits = this._countBits(bhi);\n    shift = 26 - bhiBits;\n    if (shift !== 0) {\n      b = b.ushln(shift);\n      a.iushln(shift);\n      bhi = b.words[b.length - 1] | 0;\n    }\n\n    // Initialize quotient\n    var m = a.length - b.length;\n    var q;\n\n    if (mode !== 'mod') {\n      q = new BN(null);\n      q.length = m + 1;\n      q.words = new Array(q.length);\n      for (var i = 0; i < q.length; i++) {\n        q.words[i] = 0;\n      }\n    }\n\n    var diff = a.clone()._ishlnsubmul(b, 1, m);\n    if (diff.negative === 0) {\n      a = diff;\n      if (q) {\n        q.words[m] = 1;\n      }\n    }\n\n    for (var j = m - 1; j >= 0; j--) {\n      var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n        (a.words[b.length + j - 1] | 0);\n\n      // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n      // (0x7ffffff)\n      qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n      a._ishlnsubmul(b, qj, j);\n      while (a.negative !== 0) {\n        qj--;\n        a.negative = 0;\n        a._ishlnsubmul(b, 1, j);\n        if (!a.isZero()) {\n          a.negative ^= 1;\n        }\n      }\n      if (q) {\n        q.words[j] = qj;\n      }\n    }\n    if (q) {\n      q._strip();\n    }\n    a._strip();\n\n    // Denormalize\n    if (mode !== 'div' && shift !== 0) {\n      a.iushrn(shift);\n    }\n\n    return {\n      div: q || null,\n      mod: a\n    };\n  };\n\n  // NOTE: 1) `mode` can be set to `mod` to request mod only,\n  //       to `div` to request div only, or be absent to\n  //       request both div & mod\n  //       2) `positive` is true if unsigned mod is requested\n  BN.prototype.divmod = function divmod (num, mode, positive) {\n    assert(!num.isZero());\n\n    if (this.isZero()) {\n      return {\n        div: new BN(0),\n        mod: new BN(0)\n      };\n    }\n\n    var div, mod, res;\n    if (this.negative !== 0 && num.negative === 0) {\n      res = this.neg().divmod(num, mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.iadd(num);\n        }\n      }\n\n      return {\n        div: div,\n        mod: mod\n      };\n    }\n\n    if (this.negative === 0 && num.negative !== 0) {\n      res = this.divmod(num.neg(), mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      return {\n        div: div,\n        mod: res.mod\n      };\n    }\n\n    if ((this.negative & num.negative) !== 0) {\n      res = this.neg().divmod(num.neg(), mode);\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.isub(num);\n        }\n      }\n\n      return {\n        div: res.div,\n        mod: mod\n      };\n    }\n\n    // Both numbers are positive at this point\n\n    // Strip both numbers to approximate shift value\n    if (num.length > this.length || this.cmp(num) < 0) {\n      return {\n        div: new BN(0),\n        mod: this\n      };\n    }\n\n    // Very short reduction\n    if (num.length === 1) {\n      if (mode === 'div') {\n        return {\n          div: this.divn(num.words[0]),\n          mod: null\n        };\n      }\n\n      if (mode === 'mod') {\n        return {\n          div: null,\n          mod: new BN(this.modrn(num.words[0]))\n        };\n      }\n\n      return {\n        div: this.divn(num.words[0]),\n        mod: new BN(this.modrn(num.words[0]))\n      };\n    }\n\n    return this._wordDiv(num, mode);\n  };\n\n  // Find `this` / `num`\n  BN.prototype.div = function div (num) {\n    return this.divmod(num, 'div', false).div;\n  };\n\n  // Find `this` % `num`\n  BN.prototype.mod = function mod (num) {\n    return this.divmod(num, 'mod', false).mod;\n  };\n\n  BN.prototype.umod = function umod (num) {\n    return this.divmod(num, 'mod', true).mod;\n  };\n\n  // Find Round(`this` / `num`)\n  BN.prototype.divRound = function divRound (num) {\n    var dm = this.divmod(num);\n\n    // Fast case - exact division\n    if (dm.mod.isZero()) return dm.div;\n\n    var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n    var half = num.ushrn(1);\n    var r2 = num.andln(1);\n    var cmp = mod.cmp(half);\n\n    // Round down\n    if (cmp < 0 || (r2 === 1 && cmp === 0)) return dm.div;\n\n    // Round up\n    return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n  };\n\n  BN.prototype.modrn = function modrn (num) {\n    var isNegNum = num < 0;\n    if (isNegNum) num = -num;\n\n    assert(num <= 0x3ffffff);\n    var p = (1 << 26) % num;\n\n    var acc = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      acc = (p * acc + (this.words[i] | 0)) % num;\n    }\n\n    return isNegNum ? -acc : acc;\n  };\n\n  // WARNING: DEPRECATED\n  BN.prototype.modn = function modn (num) {\n    return this.modrn(num);\n  };\n\n  // In-place division by number\n  BN.prototype.idivn = function idivn (num) {\n    var isNegNum = num < 0;\n    if (isNegNum) num = -num;\n\n    assert(num <= 0x3ffffff);\n\n    var carry = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var w = (this.words[i] | 0) + carry * 0x4000000;\n      this.words[i] = (w / num) | 0;\n      carry = w % num;\n    }\n\n    this._strip();\n    return isNegNum ? this.ineg() : this;\n  };\n\n  BN.prototype.divn = function divn (num) {\n    return this.clone().idivn(num);\n  };\n\n  BN.prototype.egcd = function egcd (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var x = this;\n    var y = p.clone();\n\n    if (x.negative !== 0) {\n      x = x.umod(p);\n    } else {\n      x = x.clone();\n    }\n\n    // A * x + B * y = x\n    var A = new BN(1);\n    var B = new BN(0);\n\n    // C * x + D * y = y\n    var C = new BN(0);\n    var D = new BN(1);\n\n    var g = 0;\n\n    while (x.isEven() && y.isEven()) {\n      x.iushrn(1);\n      y.iushrn(1);\n      ++g;\n    }\n\n    var yp = y.clone();\n    var xp = x.clone();\n\n    while (!x.isZero()) {\n      for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        x.iushrn(i);\n        while (i-- > 0) {\n          if (A.isOdd() || B.isOdd()) {\n            A.iadd(yp);\n            B.isub(xp);\n          }\n\n          A.iushrn(1);\n          B.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        y.iushrn(j);\n        while (j-- > 0) {\n          if (C.isOdd() || D.isOdd()) {\n            C.iadd(yp);\n            D.isub(xp);\n          }\n\n          C.iushrn(1);\n          D.iushrn(1);\n        }\n      }\n\n      if (x.cmp(y) >= 0) {\n        x.isub(y);\n        A.isub(C);\n        B.isub(D);\n      } else {\n        y.isub(x);\n        C.isub(A);\n        D.isub(B);\n      }\n    }\n\n    return {\n      a: C,\n      b: D,\n      gcd: y.iushln(g)\n    };\n  };\n\n  // This is reduced incarnation of the binary EEA\n  // above, designated to invert members of the\n  // _prime_ fields F(p) at a maximal speed\n  BN.prototype._invmp = function _invmp (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var a = this;\n    var b = p.clone();\n\n    if (a.negative !== 0) {\n      a = a.umod(p);\n    } else {\n      a = a.clone();\n    }\n\n    var x1 = new BN(1);\n    var x2 = new BN(0);\n\n    var delta = b.clone();\n\n    while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n      for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        a.iushrn(i);\n        while (i-- > 0) {\n          if (x1.isOdd()) {\n            x1.iadd(delta);\n          }\n\n          x1.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        b.iushrn(j);\n        while (j-- > 0) {\n          if (x2.isOdd()) {\n            x2.iadd(delta);\n          }\n\n          x2.iushrn(1);\n        }\n      }\n\n      if (a.cmp(b) >= 0) {\n        a.isub(b);\n        x1.isub(x2);\n      } else {\n        b.isub(a);\n        x2.isub(x1);\n      }\n    }\n\n    var res;\n    if (a.cmpn(1) === 0) {\n      res = x1;\n    } else {\n      res = x2;\n    }\n\n    if (res.cmpn(0) < 0) {\n      res.iadd(p);\n    }\n\n    return res;\n  };\n\n  BN.prototype.gcd = function gcd (num) {\n    if (this.isZero()) return num.abs();\n    if (num.isZero()) return this.abs();\n\n    var a = this.clone();\n    var b = num.clone();\n    a.negative = 0;\n    b.negative = 0;\n\n    // Remove common factor of two\n    for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n      a.iushrn(1);\n      b.iushrn(1);\n    }\n\n    do {\n      while (a.isEven()) {\n        a.iushrn(1);\n      }\n      while (b.isEven()) {\n        b.iushrn(1);\n      }\n\n      var r = a.cmp(b);\n      if (r < 0) {\n        // Swap `a` and `b` to make `a` always bigger than `b`\n        var t = a;\n        a = b;\n        b = t;\n      } else if (r === 0 || b.cmpn(1) === 0) {\n        break;\n      }\n\n      a.isub(b);\n    } while (true);\n\n    return b.iushln(shift);\n  };\n\n  // Invert number in the field F(num)\n  BN.prototype.invm = function invm (num) {\n    return this.egcd(num).a.umod(num);\n  };\n\n  BN.prototype.isEven = function isEven () {\n    return (this.words[0] & 1) === 0;\n  };\n\n  BN.prototype.isOdd = function isOdd () {\n    return (this.words[0] & 1) === 1;\n  };\n\n  // And first word and num\n  BN.prototype.andln = function andln (num) {\n    return this.words[0] & num;\n  };\n\n  // Increment at the bit position in-line\n  BN.prototype.bincn = function bincn (bit) {\n    assert(typeof bit === 'number');\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) {\n      this._expand(s + 1);\n      this.words[s] |= q;\n      return this;\n    }\n\n    // Add bit and propagate, if needed\n    var carry = q;\n    for (var i = s; carry !== 0 && i < this.length; i++) {\n      var w = this.words[i] | 0;\n      w += carry;\n      carry = w >>> 26;\n      w &= 0x3ffffff;\n      this.words[i] = w;\n    }\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n    return this;\n  };\n\n  BN.prototype.isZero = function isZero () {\n    return this.length === 1 && this.words[0] === 0;\n  };\n\n  BN.prototype.cmpn = function cmpn (num) {\n    var negative = num < 0;\n\n    if (this.negative !== 0 && !negative) return -1;\n    if (this.negative === 0 && negative) return 1;\n\n    this._strip();\n\n    var res;\n    if (this.length > 1) {\n      res = 1;\n    } else {\n      if (negative) {\n        num = -num;\n      }\n\n      assert(num <= 0x3ffffff, 'Number is too big');\n\n      var w = this.words[0] | 0;\n      res = w === num ? 0 : w < num ? -1 : 1;\n    }\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Compare two numbers and return:\n  // 1 - if `this` > `num`\n  // 0 - if `this` == `num`\n  // -1 - if `this` < `num`\n  BN.prototype.cmp = function cmp (num) {\n    if (this.negative !== 0 && num.negative === 0) return -1;\n    if (this.negative === 0 && num.negative !== 0) return 1;\n\n    var res = this.ucmp(num);\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Unsigned comparison\n  BN.prototype.ucmp = function ucmp (num) {\n    // At this point both numbers have the same sign\n    if (this.length > num.length) return 1;\n    if (this.length < num.length) return -1;\n\n    var res = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var a = this.words[i] | 0;\n      var b = num.words[i] | 0;\n\n      if (a === b) continue;\n      if (a < b) {\n        res = -1;\n      } else if (a > b) {\n        res = 1;\n      }\n      break;\n    }\n    return res;\n  };\n\n  BN.prototype.gtn = function gtn (num) {\n    return this.cmpn(num) === 1;\n  };\n\n  BN.prototype.gt = function gt (num) {\n    return this.cmp(num) === 1;\n  };\n\n  BN.prototype.gten = function gten (num) {\n    return this.cmpn(num) >= 0;\n  };\n\n  BN.prototype.gte = function gte (num) {\n    return this.cmp(num) >= 0;\n  };\n\n  BN.prototype.ltn = function ltn (num) {\n    return this.cmpn(num) === -1;\n  };\n\n  BN.prototype.lt = function lt (num) {\n    return this.cmp(num) === -1;\n  };\n\n  BN.prototype.lten = function lten (num) {\n    return this.cmpn(num) <= 0;\n  };\n\n  BN.prototype.lte = function lte (num) {\n    return this.cmp(num) <= 0;\n  };\n\n  BN.prototype.eqn = function eqn (num) {\n    return this.cmpn(num) === 0;\n  };\n\n  BN.prototype.eq = function eq (num) {\n    return this.cmp(num) === 0;\n  };\n\n  //\n  // A reduce context, could be using montgomery or something better, depending\n  // on the `m` itself.\n  //\n  BN.red = function red (num) {\n    return new Red(num);\n  };\n\n  BN.prototype.toRed = function toRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    assert(this.negative === 0, 'red works only with positives');\n    return ctx.convertTo(this)._forceRed(ctx);\n  };\n\n  BN.prototype.fromRed = function fromRed () {\n    assert(this.red, 'fromRed works only with numbers in reduction context');\n    return this.red.convertFrom(this);\n  };\n\n  BN.prototype._forceRed = function _forceRed (ctx) {\n    this.red = ctx;\n    return this;\n  };\n\n  BN.prototype.forceRed = function forceRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    return this._forceRed(ctx);\n  };\n\n  BN.prototype.redAdd = function redAdd (num) {\n    assert(this.red, 'redAdd works only with red numbers');\n    return this.red.add(this, num);\n  };\n\n  BN.prototype.redIAdd = function redIAdd (num) {\n    assert(this.red, 'redIAdd works only with red numbers');\n    return this.red.iadd(this, num);\n  };\n\n  BN.prototype.redSub = function redSub (num) {\n    assert(this.red, 'redSub works only with red numbers');\n    return this.red.sub(this, num);\n  };\n\n  BN.prototype.redISub = function redISub (num) {\n    assert(this.red, 'redISub works only with red numbers');\n    return this.red.isub(this, num);\n  };\n\n  BN.prototype.redShl = function redShl (num) {\n    assert(this.red, 'redShl works only with red numbers');\n    return this.red.shl(this, num);\n  };\n\n  BN.prototype.redMul = function redMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.mul(this, num);\n  };\n\n  BN.prototype.redIMul = function redIMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.imul(this, num);\n  };\n\n  BN.prototype.redSqr = function redSqr () {\n    assert(this.red, 'redSqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqr(this);\n  };\n\n  BN.prototype.redISqr = function redISqr () {\n    assert(this.red, 'redISqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.isqr(this);\n  };\n\n  // Square root over p\n  BN.prototype.redSqrt = function redSqrt () {\n    assert(this.red, 'redSqrt works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqrt(this);\n  };\n\n  BN.prototype.redInvm = function redInvm () {\n    assert(this.red, 'redInvm works only with red numbers');\n    this.red._verify1(this);\n    return this.red.invm(this);\n  };\n\n  // Return negative clone of `this` % `red modulo`\n  BN.prototype.redNeg = function redNeg () {\n    assert(this.red, 'redNeg works only with red numbers');\n    this.red._verify1(this);\n    return this.red.neg(this);\n  };\n\n  BN.prototype.redPow = function redPow (num) {\n    assert(this.red && !num.red, 'redPow(normalNum)');\n    this.red._verify1(this);\n    return this.red.pow(this, num);\n  };\n\n  // Prime numbers with efficient reduction\n  var primes = {\n    k256: null,\n    p224: null,\n    p192: null,\n    p25519: null\n  };\n\n  // Pseudo-Mersenne prime\n  function MPrime (name, p) {\n    // P = 2 ^ N - K\n    this.name = name;\n    this.p = new BN(p, 16);\n    this.n = this.p.bitLength();\n    this.k = new BN(1).iushln(this.n).isub(this.p);\n\n    this.tmp = this._tmp();\n  }\n\n  MPrime.prototype._tmp = function _tmp () {\n    var tmp = new BN(null);\n    tmp.words = new Array(Math.ceil(this.n / 13));\n    return tmp;\n  };\n\n  MPrime.prototype.ireduce = function ireduce (num) {\n    // Assumes that `num` is less than `P^2`\n    // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n    var r = num;\n    var rlen;\n\n    do {\n      this.split(r, this.tmp);\n      r = this.imulK(r);\n      r = r.iadd(this.tmp);\n      rlen = r.bitLength();\n    } while (rlen > this.n);\n\n    var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n    if (cmp === 0) {\n      r.words[0] = 0;\n      r.length = 1;\n    } else if (cmp > 0) {\n      r.isub(this.p);\n    } else {\n      if (r.strip !== undefined) {\n        // r is a BN v4 instance\n        r.strip();\n      } else {\n        // r is a BN v5 instance\n        r._strip();\n      }\n    }\n\n    return r;\n  };\n\n  MPrime.prototype.split = function split (input, out) {\n    input.iushrn(this.n, 0, out);\n  };\n\n  MPrime.prototype.imulK = function imulK (num) {\n    return num.imul(this.k);\n  };\n\n  function K256 () {\n    MPrime.call(\n      this,\n      'k256',\n      'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n  }\n  inherits(K256, MPrime);\n\n  K256.prototype.split = function split (input, output) {\n    // 256 = 9 * 26 + 22\n    var mask = 0x3fffff;\n\n    var outLen = Math.min(input.length, 9);\n    for (var i = 0; i < outLen; i++) {\n      output.words[i] = input.words[i];\n    }\n    output.length = outLen;\n\n    if (input.length <= 9) {\n      input.words[0] = 0;\n      input.length = 1;\n      return;\n    }\n\n    // Shift by 9 limbs\n    var prev = input.words[9];\n    output.words[output.length++] = prev & mask;\n\n    for (i = 10; i < input.length; i++) {\n      var next = input.words[i] | 0;\n      input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n      prev = next;\n    }\n    prev >>>= 22;\n    input.words[i - 10] = prev;\n    if (prev === 0 && input.length > 10) {\n      input.length -= 10;\n    } else {\n      input.length -= 9;\n    }\n  };\n\n  K256.prototype.imulK = function imulK (num) {\n    // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n    num.words[num.length] = 0;\n    num.words[num.length + 1] = 0;\n    num.length += 2;\n\n    // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n    var lo = 0;\n    for (var i = 0; i < num.length; i++) {\n      var w = num.words[i] | 0;\n      lo += w * 0x3d1;\n      num.words[i] = lo & 0x3ffffff;\n      lo = w * 0x40 + ((lo / 0x4000000) | 0);\n    }\n\n    // Fast length reduction\n    if (num.words[num.length - 1] === 0) {\n      num.length--;\n      if (num.words[num.length - 1] === 0) {\n        num.length--;\n      }\n    }\n    return num;\n  };\n\n  function P224 () {\n    MPrime.call(\n      this,\n      'p224',\n      'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n  }\n  inherits(P224, MPrime);\n\n  function P192 () {\n    MPrime.call(\n      this,\n      'p192',\n      'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n  }\n  inherits(P192, MPrime);\n\n  function P25519 () {\n    // 2 ^ 255 - 19\n    MPrime.call(\n      this,\n      '25519',\n      '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n  }\n  inherits(P25519, MPrime);\n\n  P25519.prototype.imulK = function imulK (num) {\n    // K = 0x13\n    var carry = 0;\n    for (var i = 0; i < num.length; i++) {\n      var hi = (num.words[i] | 0) * 0x13 + carry;\n      var lo = hi & 0x3ffffff;\n      hi >>>= 26;\n\n      num.words[i] = lo;\n      carry = hi;\n    }\n    if (carry !== 0) {\n      num.words[num.length++] = carry;\n    }\n    return num;\n  };\n\n  // Exported mostly for testing purposes, use plain name instead\n  BN._prime = function prime (name) {\n    // Cached version of prime\n    if (primes[name]) return primes[name];\n\n    var prime;\n    if (name === 'k256') {\n      prime = new K256();\n    } else if (name === 'p224') {\n      prime = new P224();\n    } else if (name === 'p192') {\n      prime = new P192();\n    } else if (name === 'p25519') {\n      prime = new P25519();\n    } else {\n      throw new Error('Unknown prime ' + name);\n    }\n    primes[name] = prime;\n\n    return prime;\n  };\n\n  //\n  // Base reduction engine\n  //\n  function Red (m) {\n    if (typeof m === 'string') {\n      var prime = BN._prime(m);\n      this.m = prime.p;\n      this.prime = prime;\n    } else {\n      assert(m.gtn(1), 'modulus must be greater than 1');\n      this.m = m;\n      this.prime = null;\n    }\n  }\n\n  Red.prototype._verify1 = function _verify1 (a) {\n    assert(a.negative === 0, 'red works only with positives');\n    assert(a.red, 'red works only with red numbers');\n  };\n\n  Red.prototype._verify2 = function _verify2 (a, b) {\n    assert((a.negative | b.negative) === 0, 'red works only with positives');\n    assert(a.red && a.red === b.red,\n      'red works only with red numbers');\n  };\n\n  Red.prototype.imod = function imod (a) {\n    if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n\n    move(a, a.umod(this.m)._forceRed(this));\n    return a;\n  };\n\n  Red.prototype.neg = function neg (a) {\n    if (a.isZero()) {\n      return a.clone();\n    }\n\n    return this.m.sub(a)._forceRed(this);\n  };\n\n  Red.prototype.add = function add (a, b) {\n    this._verify2(a, b);\n\n    var res = a.add(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.iadd = function iadd (a, b) {\n    this._verify2(a, b);\n\n    var res = a.iadd(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.sub = function sub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.sub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.isub = function isub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.isub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.shl = function shl (a, num) {\n    this._verify1(a);\n    return this.imod(a.ushln(num));\n  };\n\n  Red.prototype.imul = function imul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.imul(b));\n  };\n\n  Red.prototype.mul = function mul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.mul(b));\n  };\n\n  Red.prototype.isqr = function isqr (a) {\n    return this.imul(a, a.clone());\n  };\n\n  Red.prototype.sqr = function sqr (a) {\n    return this.mul(a, a);\n  };\n\n  Red.prototype.sqrt = function sqrt (a) {\n    if (a.isZero()) return a.clone();\n\n    var mod3 = this.m.andln(3);\n    assert(mod3 % 2 === 1);\n\n    // Fast case\n    if (mod3 === 3) {\n      var pow = this.m.add(new BN(1)).iushrn(2);\n      return this.pow(a, pow);\n    }\n\n    // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n    //\n    // Find Q and S, that Q * 2 ^ S = (P - 1)\n    var q = this.m.subn(1);\n    var s = 0;\n    while (!q.isZero() && q.andln(1) === 0) {\n      s++;\n      q.iushrn(1);\n    }\n    assert(!q.isZero());\n\n    var one = new BN(1).toRed(this);\n    var nOne = one.redNeg();\n\n    // Find quadratic non-residue\n    // NOTE: Max is such because of generalized Riemann hypothesis.\n    var lpow = this.m.subn(1).iushrn(1);\n    var z = this.m.bitLength();\n    z = new BN(2 * z * z).toRed(this);\n\n    while (this.pow(z, lpow).cmp(nOne) !== 0) {\n      z.redIAdd(nOne);\n    }\n\n    var c = this.pow(z, q);\n    var r = this.pow(a, q.addn(1).iushrn(1));\n    var t = this.pow(a, q);\n    var m = s;\n    while (t.cmp(one) !== 0) {\n      var tmp = t;\n      for (var i = 0; tmp.cmp(one) !== 0; i++) {\n        tmp = tmp.redSqr();\n      }\n      assert(i < m);\n      var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n      r = r.redMul(b);\n      c = b.redSqr();\n      t = t.redMul(c);\n      m = i;\n    }\n\n    return r;\n  };\n\n  Red.prototype.invm = function invm (a) {\n    var inv = a._invmp(this.m);\n    if (inv.negative !== 0) {\n      inv.negative = 0;\n      return this.imod(inv).redNeg();\n    } else {\n      return this.imod(inv);\n    }\n  };\n\n  Red.prototype.pow = function pow (a, num) {\n    if (num.isZero()) return new BN(1).toRed(this);\n    if (num.cmpn(1) === 0) return a.clone();\n\n    var windowSize = 4;\n    var wnd = new Array(1 << windowSize);\n    wnd[0] = new BN(1).toRed(this);\n    wnd[1] = a;\n    for (var i = 2; i < wnd.length; i++) {\n      wnd[i] = this.mul(wnd[i - 1], a);\n    }\n\n    var res = wnd[0];\n    var current = 0;\n    var currentLen = 0;\n    var start = num.bitLength() % 26;\n    if (start === 0) {\n      start = 26;\n    }\n\n    for (i = num.length - 1; i >= 0; i--) {\n      var word = num.words[i];\n      for (var j = start - 1; j >= 0; j--) {\n        var bit = (word >> j) & 1;\n        if (res !== wnd[0]) {\n          res = this.sqr(res);\n        }\n\n        if (bit === 0 && current === 0) {\n          currentLen = 0;\n          continue;\n        }\n\n        current <<= 1;\n        current |= bit;\n        currentLen++;\n        if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n        res = this.mul(res, wnd[current]);\n        currentLen = 0;\n        current = 0;\n      }\n      start = 26;\n    }\n\n    return res;\n  };\n\n  Red.prototype.convertTo = function convertTo (num) {\n    var r = num.umod(this.m);\n\n    return r === num ? r.clone() : r;\n  };\n\n  Red.prototype.convertFrom = function convertFrom (num) {\n    var res = num.clone();\n    res.red = null;\n    return res;\n  };\n\n  //\n  // Montgomery method engine\n  //\n\n  BN.mont = function mont (num) {\n    return new Mont(num);\n  };\n\n  function Mont (m) {\n    Red.call(this, m);\n\n    this.shift = this.m.bitLength();\n    if (this.shift % 26 !== 0) {\n      this.shift += 26 - (this.shift % 26);\n    }\n\n    this.r = new BN(1).iushln(this.shift);\n    this.r2 = this.imod(this.r.sqr());\n    this.rinv = this.r._invmp(this.m);\n\n    this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n    this.minv = this.minv.umod(this.r);\n    this.minv = this.r.sub(this.minv);\n  }\n  inherits(Mont, Red);\n\n  Mont.prototype.convertTo = function convertTo (num) {\n    return this.imod(num.ushln(this.shift));\n  };\n\n  Mont.prototype.convertFrom = function convertFrom (num) {\n    var r = this.imod(num.mul(this.rinv));\n    r.red = null;\n    return r;\n  };\n\n  Mont.prototype.imul = function imul (a, b) {\n    if (a.isZero() || b.isZero()) {\n      a.words[0] = 0;\n      a.length = 1;\n      return a;\n    }\n\n    var t = a.imul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.mul = function mul (a, b) {\n    if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n    var t = a.mul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.invm = function invm (a) {\n    // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n    var res = this.imod(a._invmp(this.m).mul(this.r2));\n    return res._forceRed(this);\n  };\n})(typeof module === 'undefined' || module, this);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.version = void 0;\nexports.version = \"logger/5.8.0\";\n//# sourceMappingURL=_version.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Logger = exports.ErrorCode = exports.LogLevel = void 0;\nvar _permanentCensorErrors = false;\nvar _censorErrors = false;\nvar LogLevels = { debug: 1, \"default\": 2, info: 2, warning: 3, error: 4, off: 5 };\nvar _logLevel = LogLevels[\"default\"];\nvar _version_1 = require(\"./_version\");\nvar _globalLogger = null;\nfunction _checkNormalize() {\n    try {\n        var missing_1 = [];\n        // Make sure all forms of normalization are supported\n        [\"NFD\", \"NFC\", \"NFKD\", \"NFKC\"].forEach(function (form) {\n            try {\n                if (\"test\".normalize(form) !== \"test\") {\n                    throw new Error(\"bad normalize\");\n                }\n                ;\n            }\n            catch (error) {\n                missing_1.push(form);\n            }\n        });\n        if (missing_1.length) {\n            throw new Error(\"missing \" + missing_1.join(\", \"));\n        }\n        if (String.fromCharCode(0xe9).normalize(\"NFD\") !== String.fromCharCode(0x65, 0x0301)) {\n            throw new Error(\"broken implementation\");\n        }\n    }\n    catch (error) {\n        return error.message;\n    }\n    return null;\n}\nvar _normalizeError = _checkNormalize();\nvar LogLevel;\n(function (LogLevel) {\n    LogLevel[\"DEBUG\"] = \"DEBUG\";\n    LogLevel[\"INFO\"] = \"INFO\";\n    LogLevel[\"WARNING\"] = \"WARNING\";\n    LogLevel[\"ERROR\"] = \"ERROR\";\n    LogLevel[\"OFF\"] = \"OFF\";\n})(LogLevel = exports.LogLevel || (exports.LogLevel = {}));\nvar ErrorCode;\n(function (ErrorCode) {\n    ///////////////////\n    // Generic Errors\n    // Unknown Error\n    ErrorCode[\"UNKNOWN_ERROR\"] = \"UNKNOWN_ERROR\";\n    // Not Implemented\n    ErrorCode[\"NOT_IMPLEMENTED\"] = \"NOT_IMPLEMENTED\";\n    // Unsupported Operation\n    //   - operation\n    ErrorCode[\"UNSUPPORTED_OPERATION\"] = \"UNSUPPORTED_OPERATION\";\n    // Network Error (i.e. Ethereum Network, such as an invalid chain ID)\n    //   - event (\"noNetwork\" is not re-thrown in provider.ready; otherwise thrown)\n    ErrorCode[\"NETWORK_ERROR\"] = \"NETWORK_ERROR\";\n    // Some sort of bad response from the server\n    ErrorCode[\"SERVER_ERROR\"] = \"SERVER_ERROR\";\n    // Timeout\n    ErrorCode[\"TIMEOUT\"] = \"TIMEOUT\";\n    ///////////////////\n    // Operational  Errors\n    // Buffer Overrun\n    ErrorCode[\"BUFFER_OVERRUN\"] = \"BUFFER_OVERRUN\";\n    // Numeric Fault\n    //   - operation: the operation being executed\n    //   - fault: the reason this faulted\n    ErrorCode[\"NUMERIC_FAULT\"] = \"NUMERIC_FAULT\";\n    ///////////////////\n    // Argument Errors\n    // Missing new operator to an object\n    //  - name: The name of the class\n    ErrorCode[\"MISSING_NEW\"] = \"MISSING_NEW\";\n    // Invalid argument (e.g. value is incompatible with type) to a function:\n    //   - argument: The argument name that was invalid\n    //   - value: The value of the argument\n    ErrorCode[\"INVALID_ARGUMENT\"] = \"INVALID_ARGUMENT\";\n    // Missing argument to a function:\n    //   - count: The number of arguments received\n    //   - expectedCount: The number of arguments expected\n    ErrorCode[\"MISSING_ARGUMENT\"] = \"MISSING_ARGUMENT\";\n    // Too many arguments\n    //   - count: The number of arguments received\n    //   - expectedCount: The number of arguments expected\n    ErrorCode[\"UNEXPECTED_ARGUMENT\"] = \"UNEXPECTED_ARGUMENT\";\n    ///////////////////\n    // Blockchain Errors\n    // Call exception\n    //  - transaction: the transaction\n    //  - address?: the contract address\n    //  - args?: The arguments passed into the function\n    //  - method?: The Solidity method signature\n    //  - errorSignature?: The EIP848 error signature\n    //  - errorArgs?: The EIP848 error parameters\n    //  - reason: The reason (only for EIP848 \"Error(string)\")\n    ErrorCode[\"CALL_EXCEPTION\"] = \"CALL_EXCEPTION\";\n    // Insufficient funds (< value + gasLimit * gasPrice)\n    //   - transaction: the transaction attempted\n    ErrorCode[\"INSUFFICIENT_FUNDS\"] = \"INSUFFICIENT_FUNDS\";\n    // Nonce has already been used\n    //   - transaction: the transaction attempted\n    ErrorCode[\"NONCE_EXPIRED\"] = \"NONCE_EXPIRED\";\n    // The replacement fee for the transaction is too low\n    //   - transaction: the transaction attempted\n    ErrorCode[\"REPLACEMENT_UNDERPRICED\"] = \"REPLACEMENT_UNDERPRICED\";\n    // The gas limit could not be estimated\n    //   - transaction: the transaction passed to estimateGas\n    ErrorCode[\"UNPREDICTABLE_GAS_LIMIT\"] = \"UNPREDICTABLE_GAS_LIMIT\";\n    // The transaction was replaced by one with a higher gas price\n    //   - reason: \"cancelled\", \"replaced\" or \"repriced\"\n    //   - cancelled: true if reason == \"cancelled\" or reason == \"replaced\")\n    //   - hash: original transaction hash\n    //   - replacement: the full TransactionsResponse for the replacement\n    //   - receipt: the receipt of the replacement\n    ErrorCode[\"TRANSACTION_REPLACED\"] = \"TRANSACTION_REPLACED\";\n    ///////////////////\n    // Interaction Errors\n    // The user rejected the action, such as signing a message or sending\n    // a transaction\n    ErrorCode[\"ACTION_REJECTED\"] = \"ACTION_REJECTED\";\n})(ErrorCode = exports.ErrorCode || (exports.ErrorCode = {}));\n;\nvar HEX = \"0123456789abcdef\";\nvar Logger = /** @class */ (function () {\n    function Logger(version) {\n        Object.defineProperty(this, \"version\", {\n            enumerable: true,\n            value: version,\n            writable: false\n        });\n    }\n    Logger.prototype._log = function (logLevel, args) {\n        var level = logLevel.toLowerCase();\n        if (LogLevels[level] == null) {\n            this.throwArgumentError(\"invalid log level name\", \"logLevel\", logLevel);\n        }\n        if (_logLevel > LogLevels[level]) {\n            return;\n        }\n        console.log.apply(console, args);\n    };\n    Logger.prototype.debug = function () {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        this._log(Logger.levels.DEBUG, args);\n    };\n    Logger.prototype.info = function () {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        this._log(Logger.levels.INFO, args);\n    };\n    Logger.prototype.warn = function () {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        this._log(Logger.levels.WARNING, args);\n    };\n    Logger.prototype.makeError = function (message, code, params) {\n        // Errors are being censored\n        if (_censorErrors) {\n            return this.makeError(\"censored error\", code, {});\n        }\n        if (!code) {\n            code = Logger.errors.UNKNOWN_ERROR;\n        }\n        if (!params) {\n            params = {};\n        }\n        var messageDetails = [];\n        Object.keys(params).forEach(function (key) {\n            var value = params[key];\n            try {\n                if (value instanceof Uint8Array) {\n                    var hex = \"\";\n                    for (var i = 0; i < value.length; i++) {\n                        hex += HEX[value[i] >> 4];\n                        hex += HEX[value[i] & 0x0f];\n                    }\n                    messageDetails.push(key + \"=Uint8Array(0x\" + hex + \")\");\n                }\n                else {\n                    messageDetails.push(key + \"=\" + JSON.stringify(value));\n                }\n            }\n            catch (error) {\n                messageDetails.push(key + \"=\" + JSON.stringify(params[key].toString()));\n            }\n        });\n        messageDetails.push(\"code=\" + code);\n        messageDetails.push(\"version=\" + this.version);\n        var reason = message;\n        var url = \"\";\n        switch (code) {\n            case ErrorCode.NUMERIC_FAULT: {\n                url = \"NUMERIC_FAULT\";\n                var fault = message;\n                switch (fault) {\n                    case \"overflow\":\n                    case \"underflow\":\n                    case \"division-by-zero\":\n                        url += \"-\" + fault;\n                        break;\n                    case \"negative-power\":\n                    case \"negative-width\":\n                        url += \"-unsupported\";\n                        break;\n                    case \"unbound-bitwise-result\":\n                        url += \"-unbound-result\";\n                        break;\n                }\n                break;\n            }\n            case ErrorCode.CALL_EXCEPTION:\n            case ErrorCode.INSUFFICIENT_FUNDS:\n            case ErrorCode.MISSING_NEW:\n            case ErrorCode.NONCE_EXPIRED:\n            case ErrorCode.REPLACEMENT_UNDERPRICED:\n            case ErrorCode.TRANSACTION_REPLACED:\n            case ErrorCode.UNPREDICTABLE_GAS_LIMIT:\n                url = code;\n                break;\n        }\n        if (url) {\n            message += \" [ See: https:/\\/links.ethers.org/v5-errors-\" + url + \" ]\";\n        }\n        if (messageDetails.length) {\n            message += \" (\" + messageDetails.join(\", \") + \")\";\n        }\n        // @TODO: Any??\n        var error = new Error(message);\n        error.reason = reason;\n        error.code = code;\n        Object.keys(params).forEach(function (key) {\n            error[key] = params[key];\n        });\n        return error;\n    };\n    Logger.prototype.throwError = function (message, code, params) {\n        throw this.makeError(message, code, params);\n    };\n    Logger.prototype.throwArgumentError = function (message, name, value) {\n        return this.throwError(message, Logger.errors.INVALID_ARGUMENT, {\n            argument: name,\n            value: value\n        });\n    };\n    Logger.prototype.assert = function (condition, message, code, params) {\n        if (!!condition) {\n            return;\n        }\n        this.throwError(message, code, params);\n    };\n    Logger.prototype.assertArgument = function (condition, message, name, value) {\n        if (!!condition) {\n            return;\n        }\n        this.throwArgumentError(message, name, value);\n    };\n    Logger.prototype.checkNormalize = function (message) {\n        if (message == null) {\n            message = \"platform missing String.prototype.normalize\";\n        }\n        if (_normalizeError) {\n            this.throwError(\"platform missing String.prototype.normalize\", Logger.errors.UNSUPPORTED_OPERATION, {\n                operation: \"String.prototype.normalize\", form: _normalizeError\n            });\n        }\n    };\n    Logger.prototype.checkSafeUint53 = function (value, message) {\n        if (typeof (value) !== \"number\") {\n            return;\n        }\n        if (message == null) {\n            message = \"value not safe\";\n        }\n        if (value < 0 || value >= 0x1fffffffffffff) {\n            this.throwError(message, Logger.errors.NUMERIC_FAULT, {\n                operation: \"checkSafeInteger\",\n                fault: \"out-of-safe-range\",\n                value: value\n            });\n        }\n        if (value % 1) {\n            this.throwError(message, Logger.errors.NUMERIC_FAULT, {\n                operation: \"checkSafeInteger\",\n                fault: \"non-integer\",\n                value: value\n            });\n        }\n    };\n    Logger.prototype.checkArgumentCount = function (count, expectedCount, message) {\n        if (message) {\n            message = \": \" + message;\n        }\n        else {\n            message = \"\";\n        }\n        if (count < expectedCount) {\n            this.throwError(\"missing argument\" + message, Logger.errors.MISSING_ARGUMENT, {\n                count: count,\n                expectedCount: expectedCount\n            });\n        }\n        if (count > expectedCount) {\n            this.throwError(\"too many arguments\" + message, Logger.errors.UNEXPECTED_ARGUMENT, {\n                count: count,\n                expectedCount: expectedCount\n            });\n        }\n    };\n    Logger.prototype.checkNew = function (target, kind) {\n        if (target === Object || target == null) {\n            this.throwError(\"missing new\", Logger.errors.MISSING_NEW, { name: kind.name });\n        }\n    };\n    Logger.prototype.checkAbstract = function (target, kind) {\n        if (target === kind) {\n            this.throwError(\"cannot instantiate abstract class \" + JSON.stringify(kind.name) + \" directly; use a sub-class\", Logger.errors.UNSUPPORTED_OPERATION, { name: target.name, operation: \"new\" });\n        }\n        else if (target === Object || target == null) {\n            this.throwError(\"missing new\", Logger.errors.MISSING_NEW, { name: kind.name });\n        }\n    };\n    Logger.globalLogger = function () {\n        if (!_globalLogger) {\n            _globalLogger = new Logger(_version_1.version);\n        }\n        return _globalLogger;\n    };\n    Logger.setCensorship = function (censorship, permanent) {\n        if (!censorship && permanent) {\n            this.globalLogger().throwError(\"cannot permanently disable censorship\", Logger.errors.UNSUPPORTED_OPERATION, {\n                operation: \"setCensorship\"\n            });\n        }\n        if (_permanentCensorErrors) {\n            if (!censorship) {\n                return;\n            }\n            this.globalLogger().throwError(\"error censorship permanent\", Logger.errors.UNSUPPORTED_OPERATION, {\n                operation: \"setCensorship\"\n            });\n        }\n        _censorErrors = !!censorship;\n        _permanentCensorErrors = !!permanent;\n    };\n    Logger.setLogLevel = function (logLevel) {\n        var level = LogLevels[logLevel.toLowerCase()];\n        if (level == null) {\n            Logger.globalLogger().warn(\"invalid log level - \" + logLevel);\n            return;\n        }\n        _logLevel = level;\n    };\n    Logger.from = function (version) {\n        return new Logger(version);\n    };\n    Logger.errors = ErrorCode;\n    Logger.levels = LogLevel;\n    return Logger;\n}());\nexports.Logger = Logger;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.version = void 0;\nexports.version = \"bytes/5.8.0\";\n//# sourceMappingURL=_version.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.joinSignature = exports.splitSignature = exports.hexZeroPad = exports.hexStripZeros = exports.hexValue = exports.hexConcat = exports.hexDataSlice = exports.hexDataLength = exports.hexlify = exports.isHexString = exports.zeroPad = exports.stripZeros = exports.concat = exports.arrayify = exports.isBytes = exports.isBytesLike = void 0;\nvar logger_1 = require(\"@ethersproject/logger\");\nvar _version_1 = require(\"./_version\");\nvar logger = new logger_1.Logger(_version_1.version);\n///////////////////////////////\nfunction isHexable(value) {\n    return !!(value.toHexString);\n}\nfunction addSlice(array) {\n    if (array.slice) {\n        return array;\n    }\n    array.slice = function () {\n        var args = Array.prototype.slice.call(arguments);\n        return addSlice(new Uint8Array(Array.prototype.slice.apply(array, args)));\n    };\n    return array;\n}\nfunction isBytesLike(value) {\n    return ((isHexString(value) && !(value.length % 2)) || isBytes(value));\n}\nexports.isBytesLike = isBytesLike;\nfunction isInteger(value) {\n    return (typeof (value) === \"number\" && value == value && (value % 1) === 0);\n}\nfunction isBytes(value) {\n    if (value == null) {\n        return false;\n    }\n    if (value.constructor === Uint8Array) {\n        return true;\n    }\n    if (typeof (value) === \"string\") {\n        return false;\n    }\n    if (!isInteger(value.length) || value.length < 0) {\n        return false;\n    }\n    for (var i = 0; i < value.length; i++) {\n        var v = value[i];\n        if (!isInteger(v) || v < 0 || v >= 256) {\n            return false;\n        }\n    }\n    return true;\n}\nexports.isBytes = isBytes;\nfunction arrayify(value, options) {\n    if (!options) {\n        options = {};\n    }\n    if (typeof (value) === \"number\") {\n        logger.checkSafeUint53(value, \"invalid arrayify value\");\n        var result = [];\n        while (value) {\n            result.unshift(value & 0xff);\n            value = parseInt(String(value / 256));\n        }\n        if (result.length === 0) {\n            result.push(0);\n        }\n        return addSlice(new Uint8Array(result));\n    }\n    if (options.allowMissingPrefix && typeof (value) === \"string\" && value.substring(0, 2) !== \"0x\") {\n        value = \"0x\" + value;\n    }\n    if (isHexable(value)) {\n        value = value.toHexString();\n    }\n    if (isHexString(value)) {\n        var hex = value.substring(2);\n        if (hex.length % 2) {\n            if (options.hexPad === \"left\") {\n                hex = \"0\" + hex;\n            }\n            else if (options.hexPad === \"right\") {\n                hex += \"0\";\n            }\n            else {\n                logger.throwArgumentError(\"hex data is odd-length\", \"value\", value);\n            }\n        }\n        var result = [];\n        for (var i = 0; i < hex.length; i += 2) {\n            result.push(parseInt(hex.substring(i, i + 2), 16));\n        }\n        return addSlice(new Uint8Array(result));\n    }\n    if (isBytes(value)) {\n        return addSlice(new Uint8Array(value));\n    }\n    return logger.throwArgumentError(\"invalid arrayify value\", \"value\", value);\n}\nexports.arrayify = arrayify;\nfunction concat(items) {\n    var objects = items.map(function (item) { return arrayify(item); });\n    var length = objects.reduce(function (accum, item) { return (accum + item.length); }, 0);\n    var result = new Uint8Array(length);\n    objects.reduce(function (offset, object) {\n        result.set(object, offset);\n        return offset + object.length;\n    }, 0);\n    return addSlice(result);\n}\nexports.concat = concat;\nfunction stripZeros(value) {\n    var result = arrayify(value);\n    if (result.length === 0) {\n        return result;\n    }\n    // Find the first non-zero entry\n    var start = 0;\n    while (start < result.length && result[start] === 0) {\n        start++;\n    }\n    // If we started with zeros, strip them\n    if (start) {\n        result = result.slice(start);\n    }\n    return result;\n}\nexports.stripZeros = stripZeros;\nfunction zeroPad(value, length) {\n    value = arrayify(value);\n    if (value.length > length) {\n        logger.throwArgumentError(\"value out of range\", \"value\", arguments[0]);\n    }\n    var result = new Uint8Array(length);\n    result.set(value, length - value.length);\n    return addSlice(result);\n}\nexports.zeroPad = zeroPad;\nfunction isHexString(value, length) {\n    if (typeof (value) !== \"string\" || !value.match(/^0x[0-9A-Fa-f]*$/)) {\n        return false;\n    }\n    if (length && value.length !== 2 + 2 * length) {\n        return false;\n    }\n    return true;\n}\nexports.isHexString = isHexString;\nvar HexCharacters = \"0123456789abcdef\";\nfunction hexlify(value, options) {\n    if (!options) {\n        options = {};\n    }\n    if (typeof (value) === \"number\") {\n        logger.checkSafeUint53(value, \"invalid hexlify value\");\n        var hex = \"\";\n        while (value) {\n            hex = HexCharacters[value & 0xf] + hex;\n            value = Math.floor(value / 16);\n        }\n        if (hex.length) {\n            if (hex.length % 2) {\n                hex = \"0\" + hex;\n            }\n            return \"0x\" + hex;\n        }\n        return \"0x00\";\n    }\n    if (typeof (value) === \"bigint\") {\n        value = value.toString(16);\n        if (value.length % 2) {\n            return (\"0x0\" + value);\n        }\n        return \"0x\" + value;\n    }\n    if (options.allowMissingPrefix && typeof (value) === \"string\" && value.substring(0, 2) !== \"0x\") {\n        value = \"0x\" + value;\n    }\n    if (isHexable(value)) {\n        return value.toHexString();\n    }\n    if (isHexString(value)) {\n        if (value.length % 2) {\n            if (options.hexPad === \"left\") {\n                value = \"0x0\" + value.substring(2);\n            }\n            else if (options.hexPad === \"right\") {\n                value += \"0\";\n            }\n            else {\n                logger.throwArgumentError(\"hex data is odd-length\", \"value\", value);\n            }\n        }\n        return value.toLowerCase();\n    }\n    if (isBytes(value)) {\n        var result = \"0x\";\n        for (var i = 0; i < value.length; i++) {\n            var v = value[i];\n            result += HexCharacters[(v & 0xf0) >> 4] + HexCharacters[v & 0x0f];\n        }\n        return result;\n    }\n    return logger.throwArgumentError(\"invalid hexlify value\", \"value\", value);\n}\nexports.hexlify = hexlify;\n/*\nfunction unoddify(value: BytesLike | Hexable | number): BytesLike | Hexable | number {\n    if (typeof(value) === \"string\" && value.length % 2 && value.substring(0, 2) === \"0x\") {\n        return \"0x0\" + value.substring(2);\n    }\n    return value;\n}\n*/\nfunction hexDataLength(data) {\n    if (typeof (data) !== \"string\") {\n        data = hexlify(data);\n    }\n    else if (!isHexString(data) || (data.length % 2)) {\n        return null;\n    }\n    return (data.length - 2) / 2;\n}\nexports.hexDataLength = hexDataLength;\nfunction hexDataSlice(data, offset, endOffset) {\n    if (typeof (data) !== \"string\") {\n        data = hexlify(data);\n    }\n    else if (!isHexString(data) || (data.length % 2)) {\n        logger.throwArgumentError(\"invalid hexData\", \"value\", data);\n    }\n    offset = 2 + 2 * offset;\n    if (endOffset != null) {\n        return \"0x\" + data.substring(offset, 2 + 2 * endOffset);\n    }\n    return \"0x\" + data.substring(offset);\n}\nexports.hexDataSlice = hexDataSlice;\nfunction hexConcat(items) {\n    var result = \"0x\";\n    items.forEach(function (item) {\n        result += hexlify(item).substring(2);\n    });\n    return result;\n}\nexports.hexConcat = hexConcat;\nfunction hexValue(value) {\n    var trimmed = hexStripZeros(hexlify(value, { hexPad: \"left\" }));\n    if (trimmed === \"0x\") {\n        return \"0x0\";\n    }\n    return trimmed;\n}\nexports.hexValue = hexValue;\nfunction hexStripZeros(value) {\n    if (typeof (value) !== \"string\") {\n        value = hexlify(value);\n    }\n    if (!isHexString(value)) {\n        logger.throwArgumentError(\"invalid hex string\", \"value\", value);\n    }\n    value = value.substring(2);\n    var offset = 0;\n    while (offset < value.length && value[offset] === \"0\") {\n        offset++;\n    }\n    return \"0x\" + value.substring(offset);\n}\nexports.hexStripZeros = hexStripZeros;\nfunction hexZeroPad(value, length) {\n    if (typeof (value) !== \"string\") {\n        value = hexlify(value);\n    }\n    else if (!isHexString(value)) {\n        logger.throwArgumentError(\"invalid hex string\", \"value\", value);\n    }\n    if (value.length > 2 * length + 2) {\n        logger.throwArgumentError(\"value out of range\", \"value\", arguments[1]);\n    }\n    while (value.length < 2 * length + 2) {\n        value = \"0x0\" + value.substring(2);\n    }\n    return value;\n}\nexports.hexZeroPad = hexZeroPad;\nfunction splitSignature(signature) {\n    var result = {\n        r: \"0x\",\n        s: \"0x\",\n        _vs: \"0x\",\n        recoveryParam: 0,\n        v: 0,\n        yParityAndS: \"0x\",\n        compact: \"0x\"\n    };\n    if (isBytesLike(signature)) {\n        var bytes = arrayify(signature);\n        // Get the r, s and v\n        if (bytes.length === 64) {\n            // EIP-2098; pull the v from the top bit of s and clear it\n            result.v = 27 + (bytes[32] >> 7);\n            bytes[32] &= 0x7f;\n            result.r = hexlify(bytes.slice(0, 32));\n            result.s = hexlify(bytes.slice(32, 64));\n        }\n        else if (bytes.length === 65) {\n            result.r = hexlify(bytes.slice(0, 32));\n            result.s = hexlify(bytes.slice(32, 64));\n            result.v = bytes[64];\n        }\n        else {\n            logger.throwArgumentError(\"invalid signature string\", \"signature\", signature);\n        }\n        // Allow a recid to be used as the v\n        if (result.v < 27) {\n            if (result.v === 0 || result.v === 1) {\n                result.v += 27;\n            }\n            else {\n                logger.throwArgumentError(\"signature invalid v byte\", \"signature\", signature);\n            }\n        }\n        // Compute recoveryParam from v\n        result.recoveryParam = 1 - (result.v % 2);\n        // Compute _vs from recoveryParam and s\n        if (result.recoveryParam) {\n            bytes[32] |= 0x80;\n        }\n        result._vs = hexlify(bytes.slice(32, 64));\n    }\n    else {\n        result.r = signature.r;\n        result.s = signature.s;\n        result.v = signature.v;\n        result.recoveryParam = signature.recoveryParam;\n        result._vs = signature._vs;\n        // If the _vs is available, use it to populate missing s, v and recoveryParam\n        // and verify non-missing s, v and recoveryParam\n        if (result._vs != null) {\n            var vs_1 = zeroPad(arrayify(result._vs), 32);\n            result._vs = hexlify(vs_1);\n            // Set or check the recid\n            var recoveryParam = ((vs_1[0] >= 128) ? 1 : 0);\n            if (result.recoveryParam == null) {\n                result.recoveryParam = recoveryParam;\n            }\n            else if (result.recoveryParam !== recoveryParam) {\n                logger.throwArgumentError(\"signature recoveryParam mismatch _vs\", \"signature\", signature);\n            }\n            // Set or check the s\n            vs_1[0] &= 0x7f;\n            var s = hexlify(vs_1);\n            if (result.s == null) {\n                result.s = s;\n            }\n            else if (result.s !== s) {\n                logger.throwArgumentError(\"signature v mismatch _vs\", \"signature\", signature);\n            }\n        }\n        // Use recid and v to populate each other\n        if (result.recoveryParam == null) {\n            if (result.v == null) {\n                logger.throwArgumentError(\"signature missing v and recoveryParam\", \"signature\", signature);\n            }\n            else if (result.v === 0 || result.v === 1) {\n                result.recoveryParam = result.v;\n            }\n            else {\n                result.recoveryParam = 1 - (result.v % 2);\n            }\n        }\n        else {\n            if (result.v == null) {\n                result.v = 27 + result.recoveryParam;\n            }\n            else {\n                var recId = (result.v === 0 || result.v === 1) ? result.v : (1 - (result.v % 2));\n                if (result.recoveryParam !== recId) {\n                    logger.throwArgumentError(\"signature recoveryParam mismatch v\", \"signature\", signature);\n                }\n            }\n        }\n        if (result.r == null || !isHexString(result.r)) {\n            logger.throwArgumentError(\"signature missing or invalid r\", \"signature\", signature);\n        }\n        else {\n            result.r = hexZeroPad(result.r, 32);\n        }\n        if (result.s == null || !isHexString(result.s)) {\n            logger.throwArgumentError(\"signature missing or invalid s\", \"signature\", signature);\n        }\n        else {\n            result.s = hexZeroPad(result.s, 32);\n        }\n        var vs = arrayify(result.s);\n        if (vs[0] >= 128) {\n            logger.throwArgumentError(\"signature s out of range\", \"signature\", signature);\n        }\n        if (result.recoveryParam) {\n            vs[0] |= 0x80;\n        }\n        var _vs = hexlify(vs);\n        if (result._vs) {\n            if (!isHexString(result._vs)) {\n                logger.throwArgumentError(\"signature invalid _vs\", \"signature\", signature);\n            }\n            result._vs = hexZeroPad(result._vs, 32);\n        }\n        // Set or check the _vs\n        if (result._vs == null) {\n            result._vs = _vs;\n        }\n        else if (result._vs !== _vs) {\n            logger.throwArgumentError(\"signature _vs mismatch v and s\", \"signature\", signature);\n        }\n    }\n    result.yParityAndS = result._vs;\n    result.compact = result.r + result.yParityAndS.substring(2);\n    return result;\n}\nexports.splitSignature = splitSignature;\nfunction joinSignature(signature) {\n    signature = splitSignature(signature);\n    return hexlify(concat([\n        signature.r,\n        signature.s,\n        (signature.recoveryParam ? \"0x1c\" : \"0x1b\")\n    ]));\n}\nexports.joinSignature = joinSignature;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.version = void 0;\nexports.version = \"bignumber/5.8.0\";\n//# sourceMappingURL=_version.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports._base16To36 = exports._base36To16 = exports.BigNumber = exports.isBigNumberish = void 0;\n/**\n *  BigNumber\n *\n *  A wrapper around the BN.js object. We use the BN.js library\n *  because it is used by elliptic, so it is required regardless.\n *\n */\nvar bn_js_1 = __importDefault(require(\"bn.js\"));\nvar BN = bn_js_1.default.BN;\nvar bytes_1 = require(\"@ethersproject/bytes\");\nvar logger_1 = require(\"@ethersproject/logger\");\nvar _version_1 = require(\"./_version\");\nvar logger = new logger_1.Logger(_version_1.version);\nvar _constructorGuard = {};\nvar MAX_SAFE = 0x1fffffffffffff;\nfunction isBigNumberish(value) {\n    return (value != null) && (BigNumber.isBigNumber(value) ||\n        (typeof (value) === \"number\" && (value % 1) === 0) ||\n        (typeof (value) === \"string\" && !!value.match(/^-?[0-9]+$/)) ||\n        (0, bytes_1.isHexString)(value) ||\n        (typeof (value) === \"bigint\") ||\n        (0, bytes_1.isBytes)(value));\n}\nexports.isBigNumberish = isBigNumberish;\n// Only warn about passing 10 into radix once\nvar _warnedToStringRadix = false;\nvar BigNumber = /** @class */ (function () {\n    function BigNumber(constructorGuard, hex) {\n        if (constructorGuard !== _constructorGuard) {\n            logger.throwError(\"cannot call constructor directly; use BigNumber.from\", logger_1.Logger.errors.UNSUPPORTED_OPERATION, {\n                operation: \"new (BigNumber)\"\n            });\n        }\n        this._hex = hex;\n        this._isBigNumber = true;\n        Object.freeze(this);\n    }\n    BigNumber.prototype.fromTwos = function (value) {\n        return toBigNumber(toBN(this).fromTwos(value));\n    };\n    BigNumber.prototype.toTwos = function (value) {\n        return toBigNumber(toBN(this).toTwos(value));\n    };\n    BigNumber.prototype.abs = function () {\n        if (this._hex[0] === \"-\") {\n            return BigNumber.from(this._hex.substring(1));\n        }\n        return this;\n    };\n    BigNumber.prototype.add = function (other) {\n        return toBigNumber(toBN(this).add(toBN(other)));\n    };\n    BigNumber.prototype.sub = function (other) {\n        return toBigNumber(toBN(this).sub(toBN(other)));\n    };\n    BigNumber.prototype.div = function (other) {\n        var o = BigNumber.from(other);\n        if (o.isZero()) {\n            throwFault(\"division-by-zero\", \"div\");\n        }\n        return toBigNumber(toBN(this).div(toBN(other)));\n    };\n    BigNumber.prototype.mul = function (other) {\n        return toBigNumber(toBN(this).mul(toBN(other)));\n    };\n    BigNumber.prototype.mod = function (other) {\n        var value = toBN(other);\n        if (value.isNeg()) {\n            throwFault(\"division-by-zero\", \"mod\");\n        }\n        return toBigNumber(toBN(this).umod(value));\n    };\n    BigNumber.prototype.pow = function (other) {\n        var value = toBN(other);\n        if (value.isNeg()) {\n            throwFault(\"negative-power\", \"pow\");\n        }\n        return toBigNumber(toBN(this).pow(value));\n    };\n    BigNumber.prototype.and = function (other) {\n        var value = toBN(other);\n        if (this.isNegative() || value.isNeg()) {\n            throwFault(\"unbound-bitwise-result\", \"and\");\n        }\n        return toBigNumber(toBN(this).and(value));\n    };\n    BigNumber.prototype.or = function (other) {\n        var value = toBN(other);\n        if (this.isNegative() || value.isNeg()) {\n            throwFault(\"unbound-bitwise-result\", \"or\");\n        }\n        return toBigNumber(toBN(this).or(value));\n    };\n    BigNumber.prototype.xor = function (other) {\n        var value = toBN(other);\n        if (this.isNegative() || value.isNeg()) {\n            throwFault(\"unbound-bitwise-result\", \"xor\");\n        }\n        return toBigNumber(toBN(this).xor(value));\n    };\n    BigNumber.prototype.mask = function (value) {\n        if (this.isNegative() || value < 0) {\n            throwFault(\"negative-width\", \"mask\");\n        }\n        return toBigNumber(toBN(this).maskn(value));\n    };\n    BigNumber.prototype.shl = function (value) {\n        if (this.isNegative() || value < 0) {\n            throwFault(\"negative-width\", \"shl\");\n        }\n        return toBigNumber(toBN(this).shln(value));\n    };\n    BigNumber.prototype.shr = function (value) {\n        if (this.isNegative() || value < 0) {\n            throwFault(\"negative-width\", \"shr\");\n        }\n        return toBigNumber(toBN(this).shrn(value));\n    };\n    BigNumber.prototype.eq = function (other) {\n        return toBN(this).eq(toBN(other));\n    };\n    BigNumber.prototype.lt = function (other) {\n        return toBN(this).lt(toBN(other));\n    };\n    BigNumber.prototype.lte = function (other) {\n        return toBN(this).lte(toBN(other));\n    };\n    BigNumber.prototype.gt = function (other) {\n        return toBN(this).gt(toBN(other));\n    };\n    BigNumber.prototype.gte = function (other) {\n        return toBN(this).gte(toBN(other));\n    };\n    BigNumber.prototype.isNegative = function () {\n        return (this._hex[0] === \"-\");\n    };\n    BigNumber.prototype.isZero = function () {\n        return toBN(this).isZero();\n    };\n    BigNumber.prototype.toNumber = function () {\n        try {\n            return toBN(this).toNumber();\n        }\n        catch (error) {\n            throwFault(\"overflow\", \"toNumber\", this.toString());\n        }\n        return null;\n    };\n    BigNumber.prototype.toBigInt = function () {\n        try {\n            return BigInt(this.toString());\n        }\n        catch (e) { }\n        return logger.throwError(\"this platform does not support BigInt\", logger_1.Logger.errors.UNSUPPORTED_OPERATION, {\n            value: this.toString()\n        });\n    };\n    BigNumber.prototype.toString = function () {\n        // Lots of people expect this, which we do not support, so check (See: #889)\n        if (arguments.length > 0) {\n            if (arguments[0] === 10) {\n                if (!_warnedToStringRadix) {\n                    _warnedToStringRadix = true;\n                    logger.warn(\"BigNumber.toString does not accept any parameters; base-10 is assumed\");\n                }\n            }\n            else if (arguments[0] === 16) {\n                logger.throwError(\"BigNumber.toString does not accept any parameters; use bigNumber.toHexString()\", logger_1.Logger.errors.UNEXPECTED_ARGUMENT, {});\n            }\n            else {\n                logger.throwError(\"BigNumber.toString does not accept parameters\", logger_1.Logger.errors.UNEXPECTED_ARGUMENT, {});\n            }\n        }\n        return toBN(this).toString(10);\n    };\n    BigNumber.prototype.toHexString = function () {\n        return this._hex;\n    };\n    BigNumber.prototype.toJSON = function (key) {\n        return { type: \"BigNumber\", hex: this.toHexString() };\n    };\n    BigNumber.from = function (value) {\n        if (value instanceof BigNumber) {\n            return value;\n        }\n        if (typeof (value) === \"string\") {\n            if (value.match(/^-?0x[0-9a-f]+$/i)) {\n                return new BigNumber(_constructorGuard, toHex(value));\n            }\n            if (value.match(/^-?[0-9]+$/)) {\n                return new BigNumber(_constructorGuard, toHex(new BN(value)));\n            }\n            return logger.throwArgumentError(\"invalid BigNumber string\", \"value\", value);\n        }\n        if (typeof (value) === \"number\") {\n            if (value % 1) {\n                throwFault(\"underflow\", \"BigNumber.from\", value);\n            }\n            if (value >= MAX_SAFE || value <= -MAX_SAFE) {\n                throwFault(\"overflow\", \"BigNumber.from\", value);\n            }\n            return BigNumber.from(String(value));\n        }\n        var anyValue = value;\n        if (typeof (anyValue) === \"bigint\") {\n            return BigNumber.from(anyValue.toString());\n        }\n        if ((0, bytes_1.isBytes)(anyValue)) {\n            return BigNumber.from((0, bytes_1.hexlify)(anyValue));\n        }\n        if (anyValue) {\n            // Hexable interface (takes priority)\n            if (anyValue.toHexString) {\n                var hex = anyValue.toHexString();\n                if (typeof (hex) === \"string\") {\n                    return BigNumber.from(hex);\n                }\n            }\n            else {\n                // For now, handle legacy JSON-ified values (goes away in v6)\n                var hex = anyValue._hex;\n                // New-form JSON\n                if (hex == null && anyValue.type === \"BigNumber\") {\n                    hex = anyValue.hex;\n                }\n                if (typeof (hex) === \"string\") {\n                    if ((0, bytes_1.isHexString)(hex) || (hex[0] === \"-\" && (0, bytes_1.isHexString)(hex.substring(1)))) {\n                        return BigNumber.from(hex);\n                    }\n                }\n            }\n        }\n        return logger.throwArgumentError(\"invalid BigNumber value\", \"value\", value);\n    };\n    BigNumber.isBigNumber = function (value) {\n        return !!(value && value._isBigNumber);\n    };\n    return BigNumber;\n}());\nexports.BigNumber = BigNumber;\n// Normalize the hex string\nfunction toHex(value) {\n    // For BN, call on the hex string\n    if (typeof (value) !== \"string\") {\n        return toHex(value.toString(16));\n    }\n    // If negative, prepend the negative sign to the normalized positive value\n    if (value[0] === \"-\") {\n        // Strip off the negative sign\n        value = value.substring(1);\n        // Cannot have multiple negative signs (e.g. \"--0x04\")\n        if (value[0] === \"-\") {\n            logger.throwArgumentError(\"invalid hex\", \"value\", value);\n        }\n        // Call toHex on the positive component\n        value = toHex(value);\n        // Do not allow \"-0x00\"\n        if (value === \"0x00\") {\n            return value;\n        }\n        // Negate the value\n        return \"-\" + value;\n    }\n    // Add a \"0x\" prefix if missing\n    if (value.substring(0, 2) !== \"0x\") {\n        value = \"0x\" + value;\n    }\n    // Normalize zero\n    if (value === \"0x\") {\n        return \"0x00\";\n    }\n    // Make the string even length\n    if (value.length % 2) {\n        value = \"0x0\" + value.substring(2);\n    }\n    // Trim to smallest even-length string\n    while (value.length > 4 && value.substring(0, 4) === \"0x00\") {\n        value = \"0x\" + value.substring(4);\n    }\n    return value;\n}\nfunction toBigNumber(value) {\n    return BigNumber.from(toHex(value));\n}\nfunction toBN(value) {\n    var hex = BigNumber.from(value).toHexString();\n    if (hex[0] === \"-\") {\n        return (new BN(\"-\" + hex.substring(3), 16));\n    }\n    return new BN(hex.substring(2), 16);\n}\nfunction throwFault(fault, operation, value) {\n    var params = { fault: fault, operation: operation };\n    if (value != null) {\n        params.value = value;\n    }\n    return logger.throwError(fault, logger_1.Logger.errors.NUMERIC_FAULT, params);\n}\n// value should have no prefix\nfunction _base36To16(value) {\n    return (new BN(value, 36)).toString(16);\n}\nexports._base36To16 = _base36To16;\n// value should have no prefix\nfunction _base16To36(value) {\n    return (new BN(value, 16)).toString(36);\n}\nexports._base16To36 = _base16To36;\n//# sourceMappingURL=bignumber.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FixedNumber = exports.FixedFormat = exports.parseFixed = exports.formatFixed = void 0;\nvar bytes_1 = require(\"@ethersproject/bytes\");\nvar logger_1 = require(\"@ethersproject/logger\");\nvar _version_1 = require(\"./_version\");\nvar logger = new logger_1.Logger(_version_1.version);\nvar bignumber_1 = require(\"./bignumber\");\nvar _constructorGuard = {};\nvar Zero = bignumber_1.BigNumber.from(0);\nvar NegativeOne = bignumber_1.BigNumber.from(-1);\nfunction throwFault(message, fault, operation, value) {\n    var params = { fault: fault, operation: operation };\n    if (value !== undefined) {\n        params.value = value;\n    }\n    return logger.throwError(message, logger_1.Logger.errors.NUMERIC_FAULT, params);\n}\n// Constant to pull zeros from for multipliers\nvar zeros = \"0\";\nwhile (zeros.length < 256) {\n    zeros += zeros;\n}\n// Returns a string \"1\" followed by decimal \"0\"s\nfunction getMultiplier(decimals) {\n    if (typeof (decimals) !== \"number\") {\n        try {\n            decimals = bignumber_1.BigNumber.from(decimals).toNumber();\n        }\n        catch (e) { }\n    }\n    if (typeof (decimals) === \"number\" && decimals >= 0 && decimals <= 256 && !(decimals % 1)) {\n        return (\"1\" + zeros.substring(0, decimals));\n    }\n    return logger.throwArgumentError(\"invalid decimal size\", \"decimals\", decimals);\n}\nfunction formatFixed(value, decimals) {\n    if (decimals == null) {\n        decimals = 0;\n    }\n    var multiplier = getMultiplier(decimals);\n    // Make sure wei is a big number (convert as necessary)\n    value = bignumber_1.BigNumber.from(value);\n    var negative = value.lt(Zero);\n    if (negative) {\n        value = value.mul(NegativeOne);\n    }\n    var fraction = value.mod(multiplier).toString();\n    while (fraction.length < multiplier.length - 1) {\n        fraction = \"0\" + fraction;\n    }\n    // Strip training 0\n    fraction = fraction.match(/^([0-9]*[1-9]|0)(0*)/)[1];\n    var whole = value.div(multiplier).toString();\n    if (multiplier.length === 1) {\n        value = whole;\n    }\n    else {\n        value = whole + \".\" + fraction;\n    }\n    if (negative) {\n        value = \"-\" + value;\n    }\n    return value;\n}\nexports.formatFixed = formatFixed;\nfunction parseFixed(value, decimals) {\n    if (decimals == null) {\n        decimals = 0;\n    }\n    var multiplier = getMultiplier(decimals);\n    if (typeof (value) !== \"string\" || !value.match(/^-?[0-9.]+$/)) {\n        logger.throwArgumentError(\"invalid decimal value\", \"value\", value);\n    }\n    // Is it negative?\n    var negative = (value.substring(0, 1) === \"-\");\n    if (negative) {\n        value = value.substring(1);\n    }\n    if (value === \".\") {\n        logger.throwArgumentError(\"missing value\", \"value\", value);\n    }\n    // Split it into a whole and fractional part\n    var comps = value.split(\".\");\n    if (comps.length > 2) {\n        logger.throwArgumentError(\"too many decimal points\", \"value\", value);\n    }\n    var whole = comps[0], fraction = comps[1];\n    if (!whole) {\n        whole = \"0\";\n    }\n    if (!fraction) {\n        fraction = \"0\";\n    }\n    // Trim trailing zeros\n    while (fraction[fraction.length - 1] === \"0\") {\n        fraction = fraction.substring(0, fraction.length - 1);\n    }\n    // Check the fraction doesn't exceed our decimals size\n    if (fraction.length > multiplier.length - 1) {\n        throwFault(\"fractional component exceeds decimals\", \"underflow\", \"parseFixed\");\n    }\n    // If decimals is 0, we have an empty string for fraction\n    if (fraction === \"\") {\n        fraction = \"0\";\n    }\n    // Fully pad the string with zeros to get to wei\n    while (fraction.length < multiplier.length - 1) {\n        fraction += \"0\";\n    }\n    var wholeValue = bignumber_1.BigNumber.from(whole);\n    var fractionValue = bignumber_1.BigNumber.from(fraction);\n    var wei = (wholeValue.mul(multiplier)).add(fractionValue);\n    if (negative) {\n        wei = wei.mul(NegativeOne);\n    }\n    return wei;\n}\nexports.parseFixed = parseFixed;\nvar FixedFormat = /** @class */ (function () {\n    function FixedFormat(constructorGuard, signed, width, decimals) {\n        if (constructorGuard !== _constructorGuard) {\n            logger.throwError(\"cannot use FixedFormat constructor; use FixedFormat.from\", logger_1.Logger.errors.UNSUPPORTED_OPERATION, {\n                operation: \"new FixedFormat\"\n            });\n        }\n        this.signed = signed;\n        this.width = width;\n        this.decimals = decimals;\n        this.name = (signed ? \"\" : \"u\") + \"fixed\" + String(width) + \"x\" + String(decimals);\n        this._multiplier = getMultiplier(decimals);\n        Object.freeze(this);\n    }\n    FixedFormat.from = function (value) {\n        if (value instanceof FixedFormat) {\n            return value;\n        }\n        if (typeof (value) === \"number\") {\n            value = \"fixed128x\" + value;\n        }\n        var signed = true;\n        var width = 128;\n        var decimals = 18;\n        if (typeof (value) === \"string\") {\n            if (value === \"fixed\") {\n                // defaults...\n            }\n            else if (value === \"ufixed\") {\n                signed = false;\n            }\n            else {\n                var match = value.match(/^(u?)fixed([0-9]+)x([0-9]+)$/);\n                if (!match) {\n                    logger.throwArgumentError(\"invalid fixed format\", \"format\", value);\n                }\n                signed = (match[1] !== \"u\");\n                width = parseInt(match[2]);\n                decimals = parseInt(match[3]);\n            }\n        }\n        else if (value) {\n            var check = function (key, type, defaultValue) {\n                if (value[key] == null) {\n                    return defaultValue;\n                }\n                if (typeof (value[key]) !== type) {\n                    logger.throwArgumentError(\"invalid fixed format (\" + key + \" not \" + type + \")\", \"format.\" + key, value[key]);\n                }\n                return value[key];\n            };\n            signed = check(\"signed\", \"boolean\", signed);\n            width = check(\"width\", \"number\", width);\n            decimals = check(\"decimals\", \"number\", decimals);\n        }\n        if (width % 8) {\n            logger.throwArgumentError(\"invalid fixed format width (not byte aligned)\", \"format.width\", width);\n        }\n        if (decimals > 80) {\n            logger.throwArgumentError(\"invalid fixed format (decimals too large)\", \"format.decimals\", decimals);\n        }\n        return new FixedFormat(_constructorGuard, signed, width, decimals);\n    };\n    return FixedFormat;\n}());\nexports.FixedFormat = FixedFormat;\nvar FixedNumber = /** @class */ (function () {\n    function FixedNumber(constructorGuard, hex, value, format) {\n        if (constructorGuard !== _constructorGuard) {\n            logger.throwError(\"cannot use FixedNumber constructor; use FixedNumber.from\", logger_1.Logger.errors.UNSUPPORTED_OPERATION, {\n                operation: \"new FixedFormat\"\n            });\n        }\n        this.format = format;\n        this._hex = hex;\n        this._value = value;\n        this._isFixedNumber = true;\n        Object.freeze(this);\n    }\n    FixedNumber.prototype._checkFormat = function (other) {\n        if (this.format.name !== other.format.name) {\n            logger.throwArgumentError(\"incompatible format; use fixedNumber.toFormat\", \"other\", other);\n        }\n    };\n    FixedNumber.prototype.addUnsafe = function (other) {\n        this._checkFormat(other);\n        var a = parseFixed(this._value, this.format.decimals);\n        var b = parseFixed(other._value, other.format.decimals);\n        return FixedNumber.fromValue(a.add(b), this.format.decimals, this.format);\n    };\n    FixedNumber.prototype.subUnsafe = function (other) {\n        this._checkFormat(other);\n        var a = parseFixed(this._value, this.format.decimals);\n        var b = parseFixed(other._value, other.format.decimals);\n        return FixedNumber.fromValue(a.sub(b), this.format.decimals, this.format);\n    };\n    FixedNumber.prototype.mulUnsafe = function (other) {\n        this._checkFormat(other);\n        var a = parseFixed(this._value, this.format.decimals);\n        var b = parseFixed(other._value, other.format.decimals);\n        return FixedNumber.fromValue(a.mul(b).div(this.format._multiplier), this.format.decimals, this.format);\n    };\n    FixedNumber.prototype.divUnsafe = function (other) {\n        this._checkFormat(other);\n        var a = parseFixed(this._value, this.format.decimals);\n        var b = parseFixed(other._value, other.format.decimals);\n        return FixedNumber.fromValue(a.mul(this.format._multiplier).div(b), this.format.decimals, this.format);\n    };\n    FixedNumber.prototype.floor = function () {\n        var comps = this.toString().split(\".\");\n        if (comps.length === 1) {\n            comps.push(\"0\");\n        }\n        var result = FixedNumber.from(comps[0], this.format);\n        var hasFraction = !comps[1].match(/^(0*)$/);\n        if (this.isNegative() && hasFraction) {\n            result = result.subUnsafe(ONE.toFormat(result.format));\n        }\n        return result;\n    };\n    FixedNumber.prototype.ceiling = function () {\n        var comps = this.toString().split(\".\");\n        if (comps.length === 1) {\n            comps.push(\"0\");\n        }\n        var result = FixedNumber.from(comps[0], this.format);\n        var hasFraction = !comps[1].match(/^(0*)$/);\n        if (!this.isNegative() && hasFraction) {\n            result = result.addUnsafe(ONE.toFormat(result.format));\n        }\n        return result;\n    };\n    // @TODO: Support other rounding algorithms\n    FixedNumber.prototype.round = function (decimals) {\n        if (decimals == null) {\n            decimals = 0;\n        }\n        // If we are already in range, we're done\n        var comps = this.toString().split(\".\");\n        if (comps.length === 1) {\n            comps.push(\"0\");\n        }\n        if (decimals < 0 || decimals > 80 || (decimals % 1)) {\n            logger.throwArgumentError(\"invalid decimal count\", \"decimals\", decimals);\n        }\n        if (comps[1].length <= decimals) {\n            return this;\n        }\n        var factor = FixedNumber.from(\"1\" + zeros.substring(0, decimals), this.format);\n        var bump = BUMP.toFormat(this.format);\n        return this.mulUnsafe(factor).addUnsafe(bump).floor().divUnsafe(factor);\n    };\n    FixedNumber.prototype.isZero = function () {\n        return (this._value === \"0.0\" || this._value === \"0\");\n    };\n    FixedNumber.prototype.isNegative = function () {\n        return (this._value[0] === \"-\");\n    };\n    FixedNumber.prototype.toString = function () { return this._value; };\n    FixedNumber.prototype.toHexString = function (width) {\n        if (width == null) {\n            return this._hex;\n        }\n        if (width % 8) {\n            logger.throwArgumentError(\"invalid byte width\", \"width\", width);\n        }\n        var hex = bignumber_1.BigNumber.from(this._hex).fromTwos(this.format.width).toTwos(width).toHexString();\n        return (0, bytes_1.hexZeroPad)(hex, width / 8);\n    };\n    FixedNumber.prototype.toUnsafeFloat = function () { return parseFloat(this.toString()); };\n    FixedNumber.prototype.toFormat = function (format) {\n        return FixedNumber.fromString(this._value, format);\n    };\n    FixedNumber.fromValue = function (value, decimals, format) {\n        // If decimals looks more like a format, and there is no format, shift the parameters\n        if (format == null && decimals != null && !(0, bignumber_1.isBigNumberish)(decimals)) {\n            format = decimals;\n            decimals = null;\n        }\n        if (decimals == null) {\n            decimals = 0;\n        }\n        if (format == null) {\n            format = \"fixed\";\n        }\n        return FixedNumber.fromString(formatFixed(value, decimals), FixedFormat.from(format));\n    };\n    FixedNumber.fromString = function (value, format) {\n        if (format == null) {\n            format = \"fixed\";\n        }\n        var fixedFormat = FixedFormat.from(format);\n        var numeric = parseFixed(value, fixedFormat.decimals);\n        if (!fixedFormat.signed && numeric.lt(Zero)) {\n            throwFault(\"unsigned value cannot be negative\", \"overflow\", \"value\", value);\n        }\n        var hex = null;\n        if (fixedFormat.signed) {\n            hex = numeric.toTwos(fixedFormat.width).toHexString();\n        }\n        else {\n            hex = numeric.toHexString();\n            hex = (0, bytes_1.hexZeroPad)(hex, fixedFormat.width / 8);\n        }\n        var decimal = formatFixed(numeric, fixedFormat.decimals);\n        return new FixedNumber(_constructorGuard, hex, decimal, fixedFormat);\n    };\n    FixedNumber.fromBytes = function (value, format) {\n        if (format == null) {\n            format = \"fixed\";\n        }\n        var fixedFormat = FixedFormat.from(format);\n        if ((0, bytes_1.arrayify)(value).length > fixedFormat.width / 8) {\n            throw new Error(\"overflow\");\n        }\n        var numeric = bignumber_1.BigNumber.from(value);\n        if (fixedFormat.signed) {\n            numeric = numeric.fromTwos(fixedFormat.width);\n        }\n        var hex = numeric.toTwos((fixedFormat.signed ? 0 : 1) + fixedFormat.width).toHexString();\n        var decimal = formatFixed(numeric, fixedFormat.decimals);\n        return new FixedNumber(_constructorGuard, hex, decimal, fixedFormat);\n    };\n    FixedNumber.from = function (value, format) {\n        if (typeof (value) === \"string\") {\n            return FixedNumber.fromString(value, format);\n        }\n        if ((0, bytes_1.isBytes)(value)) {\n            return FixedNumber.fromBytes(value, format);\n        }\n        try {\n            return FixedNumber.fromValue(value, 0, format);\n        }\n        catch (error) {\n            // Allow NUMERIC_FAULT to bubble up\n            if (error.code !== logger_1.Logger.errors.INVALID_ARGUMENT) {\n                throw error;\n            }\n        }\n        return logger.throwArgumentError(\"invalid FixedNumber value\", \"value\", value);\n    };\n    FixedNumber.isFixedNumber = function (value) {\n        return !!(value && value._isFixedNumber);\n    };\n    return FixedNumber;\n}());\nexports.FixedNumber = FixedNumber;\nvar ONE = FixedNumber.from(1);\nvar BUMP = FixedNumber.from(\"0.5\");\n//# sourceMappingURL=fixednumber.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports._base36To16 = exports._base16To36 = exports.parseFixed = exports.FixedNumber = exports.FixedFormat = exports.formatFixed = exports.BigNumber = void 0;\nvar bignumber_1 = require(\"./bignumber\");\nObject.defineProperty(exports, \"BigNumber\", { enumerable: true, get: function () { return bignumber_1.BigNumber; } });\nvar fixednumber_1 = require(\"./fixednumber\");\nObject.defineProperty(exports, \"formatFixed\", { enumerable: true, get: function () { return fixednumber_1.formatFixed; } });\nObject.defineProperty(exports, \"FixedFormat\", { enumerable: true, get: function () { return fixednumber_1.FixedFormat; } });\nObject.defineProperty(exports, \"FixedNumber\", { enumerable: true, get: function () { return fixednumber_1.FixedNumber; } });\nObject.defineProperty(exports, \"parseFixed\", { enumerable: true, get: function () { return fixednumber_1.parseFixed; } });\n// Internal methods used by address\nvar bignumber_2 = require(\"./bignumber\");\nObject.defineProperty(exports, \"_base16To36\", { enumerable: true, get: function () { return bignumber_2._base16To36; } });\nObject.defineProperty(exports, \"_base36To16\", { enumerable: true, get: function () { return bignumber_2._base36To16; } });\n//# sourceMappingURL=index.js.map","/**\n * [js-sha3]{@link https://github.com/emn178/js-sha3}\n *\n * @version 0.8.0\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\n * @copyright Chen, Yi-Cyuan 2015-2018\n * @license MIT\n */\n/*jslint bitwise: true */\n(function () {\n  'use strict';\n\n  var INPUT_ERROR = 'input is invalid type';\n  var FINALIZE_ERROR = 'finalize already called';\n  var WINDOW = typeof window === 'object';\n  var root = WINDOW ? window : {};\n  if (root.JS_SHA3_NO_WINDOW) {\n    WINDOW = false;\n  }\n  var WEB_WORKER = !WINDOW && typeof self === 'object';\n  var NODE_JS = !root.JS_SHA3_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\n  if (NODE_JS) {\n    root = global;\n  } else if (WEB_WORKER) {\n    root = self;\n  }\n  var COMMON_JS = !root.JS_SHA3_NO_COMMON_JS && typeof module === 'object' && module.exports;\n  var AMD = typeof define === 'function' && define.amd;\n  var ARRAY_BUFFER = !root.JS_SHA3_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';\n  var HEX_CHARS = '0123456789abcdef'.split('');\n  var SHAKE_PADDING = [31, 7936, 2031616, 520093696];\n  var CSHAKE_PADDING = [4, 1024, 262144, 67108864];\n  var KECCAK_PADDING = [1, 256, 65536, 16777216];\n  var PADDING = [6, 1536, 393216, 100663296];\n  var SHIFT = [0, 8, 16, 24];\n  var RC = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649,\n    0, 2147516545, 2147483648, 32777, 2147483648, 138, 0, 136, 0, 2147516425, 0,\n    2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771,\n    2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648,\n    2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648];\n  var BITS = [224, 256, 384, 512];\n  var SHAKE_BITS = [128, 256];\n  var OUTPUT_TYPES = ['hex', 'buffer', 'arrayBuffer', 'array', 'digest'];\n  var CSHAKE_BYTEPAD = {\n    '128': 168,\n    '256': 136\n  };\n\n  if (root.JS_SHA3_NO_NODE_JS || !Array.isArray) {\n    Array.isArray = function (obj) {\n      return Object.prototype.toString.call(obj) === '[object Array]';\n    };\n  }\n\n  if (ARRAY_BUFFER && (root.JS_SHA3_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {\n    ArrayBuffer.isView = function (obj) {\n      return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;\n    };\n  }\n\n  var createOutputMethod = function (bits, padding, outputType) {\n    return function (message) {\n      return new Keccak(bits, padding, bits).update(message)[outputType]();\n    };\n  };\n\n  var createShakeOutputMethod = function (bits, padding, outputType) {\n    return function (message, outputBits) {\n      return new Keccak(bits, padding, outputBits).update(message)[outputType]();\n    };\n  };\n\n  var createCshakeOutputMethod = function (bits, padding, outputType) {\n    return function (message, outputBits, n, s) {\n      return methods['cshake' + bits].update(message, outputBits, n, s)[outputType]();\n    };\n  };\n\n  var createKmacOutputMethod = function (bits, padding, outputType) {\n    return function (key, message, outputBits, s) {\n      return methods['kmac' + bits].update(key, message, outputBits, s)[outputType]();\n    };\n  };\n\n  var createOutputMethods = function (method, createMethod, bits, padding) {\n    for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n      var type = OUTPUT_TYPES[i];\n      method[type] = createMethod(bits, padding, type);\n    }\n    return method;\n  };\n\n  var createMethod = function (bits, padding) {\n    var method = createOutputMethod(bits, padding, 'hex');\n    method.create = function () {\n      return new Keccak(bits, padding, bits);\n    };\n    method.update = function (message) {\n      return method.create().update(message);\n    };\n    return createOutputMethods(method, createOutputMethod, bits, padding);\n  };\n\n  var createShakeMethod = function (bits, padding) {\n    var method = createShakeOutputMethod(bits, padding, 'hex');\n    method.create = function (outputBits) {\n      return new Keccak(bits, padding, outputBits);\n    };\n    method.update = function (message, outputBits) {\n      return method.create(outputBits).update(message);\n    };\n    return createOutputMethods(method, createShakeOutputMethod, bits, padding);\n  };\n\n  var createCshakeMethod = function (bits, padding) {\n    var w = CSHAKE_BYTEPAD[bits];\n    var method = createCshakeOutputMethod(bits, padding, 'hex');\n    method.create = function (outputBits, n, s) {\n      if (!n && !s) {\n        return methods['shake' + bits].create(outputBits);\n      } else {\n        return new Keccak(bits, padding, outputBits).bytepad([n, s], w);\n      }\n    };\n    method.update = function (message, outputBits, n, s) {\n      return method.create(outputBits, n, s).update(message);\n    };\n    return createOutputMethods(method, createCshakeOutputMethod, bits, padding);\n  };\n\n  var createKmacMethod = function (bits, padding) {\n    var w = CSHAKE_BYTEPAD[bits];\n    var method = createKmacOutputMethod(bits, padding, 'hex');\n    method.create = function (key, outputBits, s) {\n      return new Kmac(bits, padding, outputBits).bytepad(['KMAC', s], w).bytepad([key], w);\n    };\n    method.update = function (key, message, outputBits, s) {\n      return method.create(key, outputBits, s).update(message);\n    };\n    return createOutputMethods(method, createKmacOutputMethod, bits, padding);\n  };\n\n  var algorithms = [\n    { name: 'keccak', padding: KECCAK_PADDING, bits: BITS, createMethod: createMethod },\n    { name: 'sha3', padding: PADDING, bits: BITS, createMethod: createMethod },\n    { name: 'shake', padding: SHAKE_PADDING, bits: SHAKE_BITS, createMethod: createShakeMethod },\n    { name: 'cshake', padding: CSHAKE_PADDING, bits: SHAKE_BITS, createMethod: createCshakeMethod },\n    { name: 'kmac', padding: CSHAKE_PADDING, bits: SHAKE_BITS, createMethod: createKmacMethod }\n  ];\n\n  var methods = {}, methodNames = [];\n\n  for (var i = 0; i < algorithms.length; ++i) {\n    var algorithm = algorithms[i];\n    var bits = algorithm.bits;\n    for (var j = 0; j < bits.length; ++j) {\n      var methodName = algorithm.name + '_' + bits[j];\n      methodNames.push(methodName);\n      methods[methodName] = algorithm.createMethod(bits[j], algorithm.padding);\n      if (algorithm.name !== 'sha3') {\n        var newMethodName = algorithm.name + bits[j];\n        methodNames.push(newMethodName);\n        methods[newMethodName] = methods[methodName];\n      }\n    }\n  }\n\n  function Keccak(bits, padding, outputBits) {\n    this.blocks = [];\n    this.s = [];\n    this.padding = padding;\n    this.outputBits = outputBits;\n    this.reset = true;\n    this.finalized = false;\n    this.block = 0;\n    this.start = 0;\n    this.blockCount = (1600 - (bits << 1)) >> 5;\n    this.byteCount = this.blockCount << 2;\n    this.outputBlocks = outputBits >> 5;\n    this.extraBytes = (outputBits & 31) >> 3;\n\n    for (var i = 0; i < 50; ++i) {\n      this.s[i] = 0;\n    }\n  }\n\n  Keccak.prototype.update = function (message) {\n    if (this.finalized) {\n      throw new Error(FINALIZE_ERROR);\n    }\n    var notString, type = typeof message;\n    if (type !== 'string') {\n      if (type === 'object') {\n        if (message === null) {\n          throw new Error(INPUT_ERROR);\n        } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\n          message = new Uint8Array(message);\n        } else if (!Array.isArray(message)) {\n          if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {\n            throw new Error(INPUT_ERROR);\n          }\n        }\n      } else {\n        throw new Error(INPUT_ERROR);\n      }\n      notString = true;\n    }\n    var blocks = this.blocks, byteCount = this.byteCount, length = message.length,\n      blockCount = this.blockCount, index = 0, s = this.s, i, code;\n\n    while (index < length) {\n      if (this.reset) {\n        this.reset = false;\n        blocks[0] = this.block;\n        for (i = 1; i < blockCount + 1; ++i) {\n          blocks[i] = 0;\n        }\n      }\n      if (notString) {\n        for (i = this.start; index < length && i < byteCount; ++index) {\n          blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\n        }\n      } else {\n        for (i = this.start; index < length && i < byteCount; ++index) {\n          code = message.charCodeAt(index);\n          if (code < 0x80) {\n            blocks[i >> 2] |= code << SHIFT[i++ & 3];\n          } else if (code < 0x800) {\n            blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\n            blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n          } else if (code < 0xd800 || code >= 0xe000) {\n            blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\n            blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n            blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n          } else {\n            code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n            blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\n            blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\n            blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n            blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n          }\n        }\n      }\n      this.lastByteIndex = i;\n      if (i >= byteCount) {\n        this.start = i - byteCount;\n        this.block = blocks[blockCount];\n        for (i = 0; i < blockCount; ++i) {\n          s[i] ^= blocks[i];\n        }\n        f(s);\n        this.reset = true;\n      } else {\n        this.start = i;\n      }\n    }\n    return this;\n  };\n\n  Keccak.prototype.encode = function (x, right) {\n    var o = x & 255, n = 1;\n    var bytes = [o];\n    x = x >> 8;\n    o = x & 255;\n    while (o > 0) {\n      bytes.unshift(o);\n      x = x >> 8;\n      o = x & 255;\n      ++n;\n    }\n    if (right) {\n      bytes.push(n);\n    } else {\n      bytes.unshift(n);\n    }\n    this.update(bytes);\n    return bytes.length;\n  };\n\n  Keccak.prototype.encodeString = function (str) {\n    var notString, type = typeof str;\n    if (type !== 'string') {\n      if (type === 'object') {\n        if (str === null) {\n          throw new Error(INPUT_ERROR);\n        } else if (ARRAY_BUFFER && str.constructor === ArrayBuffer) {\n          str = new Uint8Array(str);\n        } else if (!Array.isArray(str)) {\n          if (!ARRAY_BUFFER || !ArrayBuffer.isView(str)) {\n            throw new Error(INPUT_ERROR);\n          }\n        }\n      } else {\n        throw new Error(INPUT_ERROR);\n      }\n      notString = true;\n    }\n    var bytes = 0, length = str.length;\n    if (notString) {\n      bytes = length;\n    } else {\n      for (var i = 0; i < str.length; ++i) {\n        var code = str.charCodeAt(i);\n        if (code < 0x80) {\n          bytes += 1;\n        } else if (code < 0x800) {\n          bytes += 2;\n        } else if (code < 0xd800 || code >= 0xe000) {\n          bytes += 3;\n        } else {\n          code = 0x10000 + (((code & 0x3ff) << 10) | (str.charCodeAt(++i) & 0x3ff));\n          bytes += 4;\n        }\n      }\n    }\n    bytes += this.encode(bytes * 8);\n    this.update(str);\n    return bytes;\n  };\n\n  Keccak.prototype.bytepad = function (strs, w) {\n    var bytes = this.encode(w);\n    for (var i = 0; i < strs.length; ++i) {\n      bytes += this.encodeString(strs[i]);\n    }\n    var paddingBytes = w - bytes % w;\n    var zeros = [];\n    zeros.length = paddingBytes;\n    this.update(zeros);\n    return this;\n  };\n\n  Keccak.prototype.finalize = function () {\n    if (this.finalized) {\n      return;\n    }\n    this.finalized = true;\n    var blocks = this.blocks, i = this.lastByteIndex, blockCount = this.blockCount, s = this.s;\n    blocks[i >> 2] |= this.padding[i & 3];\n    if (this.lastByteIndex === this.byteCount) {\n      blocks[0] = blocks[blockCount];\n      for (i = 1; i < blockCount + 1; ++i) {\n        blocks[i] = 0;\n      }\n    }\n    blocks[blockCount - 1] |= 0x80000000;\n    for (i = 0; i < blockCount; ++i) {\n      s[i] ^= blocks[i];\n    }\n    f(s);\n  };\n\n  Keccak.prototype.toString = Keccak.prototype.hex = function () {\n    this.finalize();\n\n    var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\n      extraBytes = this.extraBytes, i = 0, j = 0;\n    var hex = '', block;\n    while (j < outputBlocks) {\n      for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\n        block = s[i];\n        hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F] +\n          HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F] +\n          HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F] +\n          HEX_CHARS[(block >> 28) & 0x0F] + HEX_CHARS[(block >> 24) & 0x0F];\n      }\n      if (j % blockCount === 0) {\n        f(s);\n        i = 0;\n      }\n    }\n    if (extraBytes) {\n      block = s[i];\n      hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F];\n      if (extraBytes > 1) {\n        hex += HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F];\n      }\n      if (extraBytes > 2) {\n        hex += HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F];\n      }\n    }\n    return hex;\n  };\n\n  Keccak.prototype.arrayBuffer = function () {\n    this.finalize();\n\n    var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\n      extraBytes = this.extraBytes, i = 0, j = 0;\n    var bytes = this.outputBits >> 3;\n    var buffer;\n    if (extraBytes) {\n      buffer = new ArrayBuffer((outputBlocks + 1) << 2);\n    } else {\n      buffer = new ArrayBuffer(bytes);\n    }\n    var array = new Uint32Array(buffer);\n    while (j < outputBlocks) {\n      for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\n        array[j] = s[i];\n      }\n      if (j % blockCount === 0) {\n        f(s);\n      }\n    }\n    if (extraBytes) {\n      array[i] = s[i];\n      buffer = buffer.slice(0, bytes);\n    }\n    return buffer;\n  };\n\n  Keccak.prototype.buffer = Keccak.prototype.arrayBuffer;\n\n  Keccak.prototype.digest = Keccak.prototype.array = function () {\n    this.finalize();\n\n    var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\n      extraBytes = this.extraBytes, i = 0, j = 0;\n    var array = [], offset, block;\n    while (j < outputBlocks) {\n      for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\n        offset = j << 2;\n        block = s[i];\n        array[offset] = block & 0xFF;\n        array[offset + 1] = (block >> 8) & 0xFF;\n        array[offset + 2] = (block >> 16) & 0xFF;\n        array[offset + 3] = (block >> 24) & 0xFF;\n      }\n      if (j % blockCount === 0) {\n        f(s);\n      }\n    }\n    if (extraBytes) {\n      offset = j << 2;\n      block = s[i];\n      array[offset] = block & 0xFF;\n      if (extraBytes > 1) {\n        array[offset + 1] = (block >> 8) & 0xFF;\n      }\n      if (extraBytes > 2) {\n        array[offset + 2] = (block >> 16) & 0xFF;\n      }\n    }\n    return array;\n  };\n\n  function Kmac(bits, padding, outputBits) {\n    Keccak.call(this, bits, padding, outputBits);\n  }\n\n  Kmac.prototype = new Keccak();\n\n  Kmac.prototype.finalize = function () {\n    this.encode(this.outputBits, true);\n    return Keccak.prototype.finalize.call(this);\n  };\n\n  var f = function (s) {\n    var h, l, n, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9,\n      b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17,\n      b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33,\n      b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49;\n    for (n = 0; n < 48; n += 2) {\n      c0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40];\n      c1 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41];\n      c2 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42];\n      c3 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43];\n      c4 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44];\n      c5 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45];\n      c6 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46];\n      c7 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47];\n      c8 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48];\n      c9 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49];\n\n      h = c8 ^ ((c2 << 1) | (c3 >>> 31));\n      l = c9 ^ ((c3 << 1) | (c2 >>> 31));\n      s[0] ^= h;\n      s[1] ^= l;\n      s[10] ^= h;\n      s[11] ^= l;\n      s[20] ^= h;\n      s[21] ^= l;\n      s[30] ^= h;\n      s[31] ^= l;\n      s[40] ^= h;\n      s[41] ^= l;\n      h = c0 ^ ((c4 << 1) | (c5 >>> 31));\n      l = c1 ^ ((c5 << 1) | (c4 >>> 31));\n      s[2] ^= h;\n      s[3] ^= l;\n      s[12] ^= h;\n      s[13] ^= l;\n      s[22] ^= h;\n      s[23] ^= l;\n      s[32] ^= h;\n      s[33] ^= l;\n      s[42] ^= h;\n      s[43] ^= l;\n      h = c2 ^ ((c6 << 1) | (c7 >>> 31));\n      l = c3 ^ ((c7 << 1) | (c6 >>> 31));\n      s[4] ^= h;\n      s[5] ^= l;\n      s[14] ^= h;\n      s[15] ^= l;\n      s[24] ^= h;\n      s[25] ^= l;\n      s[34] ^= h;\n      s[35] ^= l;\n      s[44] ^= h;\n      s[45] ^= l;\n      h = c4 ^ ((c8 << 1) | (c9 >>> 31));\n      l = c5 ^ ((c9 << 1) | (c8 >>> 31));\n      s[6] ^= h;\n      s[7] ^= l;\n      s[16] ^= h;\n      s[17] ^= l;\n      s[26] ^= h;\n      s[27] ^= l;\n      s[36] ^= h;\n      s[37] ^= l;\n      s[46] ^= h;\n      s[47] ^= l;\n      h = c6 ^ ((c0 << 1) | (c1 >>> 31));\n      l = c7 ^ ((c1 << 1) | (c0 >>> 31));\n      s[8] ^= h;\n      s[9] ^= l;\n      s[18] ^= h;\n      s[19] ^= l;\n      s[28] ^= h;\n      s[29] ^= l;\n      s[38] ^= h;\n      s[39] ^= l;\n      s[48] ^= h;\n      s[49] ^= l;\n\n      b0 = s[0];\n      b1 = s[1];\n      b32 = (s[11] << 4) | (s[10] >>> 28);\n      b33 = (s[10] << 4) | (s[11] >>> 28);\n      b14 = (s[20] << 3) | (s[21] >>> 29);\n      b15 = (s[21] << 3) | (s[20] >>> 29);\n      b46 = (s[31] << 9) | (s[30] >>> 23);\n      b47 = (s[30] << 9) | (s[31] >>> 23);\n      b28 = (s[40] << 18) | (s[41] >>> 14);\n      b29 = (s[41] << 18) | (s[40] >>> 14);\n      b20 = (s[2] << 1) | (s[3] >>> 31);\n      b21 = (s[3] << 1) | (s[2] >>> 31);\n      b2 = (s[13] << 12) | (s[12] >>> 20);\n      b3 = (s[12] << 12) | (s[13] >>> 20);\n      b34 = (s[22] << 10) | (s[23] >>> 22);\n      b35 = (s[23] << 10) | (s[22] >>> 22);\n      b16 = (s[33] << 13) | (s[32] >>> 19);\n      b17 = (s[32] << 13) | (s[33] >>> 19);\n      b48 = (s[42] << 2) | (s[43] >>> 30);\n      b49 = (s[43] << 2) | (s[42] >>> 30);\n      b40 = (s[5] << 30) | (s[4] >>> 2);\n      b41 = (s[4] << 30) | (s[5] >>> 2);\n      b22 = (s[14] << 6) | (s[15] >>> 26);\n      b23 = (s[15] << 6) | (s[14] >>> 26);\n      b4 = (s[25] << 11) | (s[24] >>> 21);\n      b5 = (s[24] << 11) | (s[25] >>> 21);\n      b36 = (s[34] << 15) | (s[35] >>> 17);\n      b37 = (s[35] << 15) | (s[34] >>> 17);\n      b18 = (s[45] << 29) | (s[44] >>> 3);\n      b19 = (s[44] << 29) | (s[45] >>> 3);\n      b10 = (s[6] << 28) | (s[7] >>> 4);\n      b11 = (s[7] << 28) | (s[6] >>> 4);\n      b42 = (s[17] << 23) | (s[16] >>> 9);\n      b43 = (s[16] << 23) | (s[17] >>> 9);\n      b24 = (s[26] << 25) | (s[27] >>> 7);\n      b25 = (s[27] << 25) | (s[26] >>> 7);\n      b6 = (s[36] << 21) | (s[37] >>> 11);\n      b7 = (s[37] << 21) | (s[36] >>> 11);\n      b38 = (s[47] << 24) | (s[46] >>> 8);\n      b39 = (s[46] << 24) | (s[47] >>> 8);\n      b30 = (s[8] << 27) | (s[9] >>> 5);\n      b31 = (s[9] << 27) | (s[8] >>> 5);\n      b12 = (s[18] << 20) | (s[19] >>> 12);\n      b13 = (s[19] << 20) | (s[18] >>> 12);\n      b44 = (s[29] << 7) | (s[28] >>> 25);\n      b45 = (s[28] << 7) | (s[29] >>> 25);\n      b26 = (s[38] << 8) | (s[39] >>> 24);\n      b27 = (s[39] << 8) | (s[38] >>> 24);\n      b8 = (s[48] << 14) | (s[49] >>> 18);\n      b9 = (s[49] << 14) | (s[48] >>> 18);\n\n      s[0] = b0 ^ (~b2 & b4);\n      s[1] = b1 ^ (~b3 & b5);\n      s[10] = b10 ^ (~b12 & b14);\n      s[11] = b11 ^ (~b13 & b15);\n      s[20] = b20 ^ (~b22 & b24);\n      s[21] = b21 ^ (~b23 & b25);\n      s[30] = b30 ^ (~b32 & b34);\n      s[31] = b31 ^ (~b33 & b35);\n      s[40] = b40 ^ (~b42 & b44);\n      s[41] = b41 ^ (~b43 & b45);\n      s[2] = b2 ^ (~b4 & b6);\n      s[3] = b3 ^ (~b5 & b7);\n      s[12] = b12 ^ (~b14 & b16);\n      s[13] = b13 ^ (~b15 & b17);\n      s[22] = b22 ^ (~b24 & b26);\n      s[23] = b23 ^ (~b25 & b27);\n      s[32] = b32 ^ (~b34 & b36);\n      s[33] = b33 ^ (~b35 & b37);\n      s[42] = b42 ^ (~b44 & b46);\n      s[43] = b43 ^ (~b45 & b47);\n      s[4] = b4 ^ (~b6 & b8);\n      s[5] = b5 ^ (~b7 & b9);\n      s[14] = b14 ^ (~b16 & b18);\n      s[15] = b15 ^ (~b17 & b19);\n      s[24] = b24 ^ (~b26 & b28);\n      s[25] = b25 ^ (~b27 & b29);\n      s[34] = b34 ^ (~b36 & b38);\n      s[35] = b35 ^ (~b37 & b39);\n      s[44] = b44 ^ (~b46 & b48);\n      s[45] = b45 ^ (~b47 & b49);\n      s[6] = b6 ^ (~b8 & b0);\n      s[7] = b7 ^ (~b9 & b1);\n      s[16] = b16 ^ (~b18 & b10);\n      s[17] = b17 ^ (~b19 & b11);\n      s[26] = b26 ^ (~b28 & b20);\n      s[27] = b27 ^ (~b29 & b21);\n      s[36] = b36 ^ (~b38 & b30);\n      s[37] = b37 ^ (~b39 & b31);\n      s[46] = b46 ^ (~b48 & b40);\n      s[47] = b47 ^ (~b49 & b41);\n      s[8] = b8 ^ (~b0 & b2);\n      s[9] = b9 ^ (~b1 & b3);\n      s[18] = b18 ^ (~b10 & b12);\n      s[19] = b19 ^ (~b11 & b13);\n      s[28] = b28 ^ (~b20 & b22);\n      s[29] = b29 ^ (~b21 & b23);\n      s[38] = b38 ^ (~b30 & b32);\n      s[39] = b39 ^ (~b31 & b33);\n      s[48] = b48 ^ (~b40 & b42);\n      s[49] = b49 ^ (~b41 & b43);\n\n      s[0] ^= RC[n];\n      s[1] ^= RC[n + 1];\n    }\n  };\n\n  if (COMMON_JS) {\n    module.exports = methods;\n  } else {\n    for (i = 0; i < methodNames.length; ++i) {\n      root[methodNames[i]] = methods[methodNames[i]];\n    }\n    if (AMD) {\n      define(function () {\n        return methods;\n      });\n    }\n  }\n})();\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.keccak256 = void 0;\nvar js_sha3_1 = __importDefault(require(\"js-sha3\"));\nvar bytes_1 = require(\"@ethersproject/bytes\");\nfunction keccak256(data) {\n    return '0x' + js_sha3_1.default.keccak_256((0, bytes_1.arrayify)(data));\n}\nexports.keccak256 = keccak256;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.version = void 0;\nexports.version = \"rlp/5.8.0\";\n//# sourceMappingURL=_version.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.decode = exports.encode = void 0;\n//See: https://github.com/ethereum/wiki/wiki/RLP\nvar bytes_1 = require(\"@ethersproject/bytes\");\nvar logger_1 = require(\"@ethersproject/logger\");\nvar _version_1 = require(\"./_version\");\nvar logger = new logger_1.Logger(_version_1.version);\nfunction arrayifyInteger(value) {\n    var result = [];\n    while (value) {\n        result.unshift(value & 0xff);\n        value >>= 8;\n    }\n    return result;\n}\nfunction unarrayifyInteger(data, offset, length) {\n    var result = 0;\n    for (var i = 0; i < length; i++) {\n        result = (result * 256) + data[offset + i];\n    }\n    return result;\n}\nfunction _encode(object) {\n    if (Array.isArray(object)) {\n        var payload_1 = [];\n        object.forEach(function (child) {\n            payload_1 = payload_1.concat(_encode(child));\n        });\n        if (payload_1.length <= 55) {\n            payload_1.unshift(0xc0 + payload_1.length);\n            return payload_1;\n        }\n        var length_1 = arrayifyInteger(payload_1.length);\n        length_1.unshift(0xf7 + length_1.length);\n        return length_1.concat(payload_1);\n    }\n    if (!(0, bytes_1.isBytesLike)(object)) {\n        logger.throwArgumentError(\"RLP object must be BytesLike\", \"object\", object);\n    }\n    var data = Array.prototype.slice.call((0, bytes_1.arrayify)(object));\n    if (data.length === 1 && data[0] <= 0x7f) {\n        return data;\n    }\n    else if (data.length <= 55) {\n        data.unshift(0x80 + data.length);\n        return data;\n    }\n    var length = arrayifyInteger(data.length);\n    length.unshift(0xb7 + length.length);\n    return length.concat(data);\n}\nfunction encode(object) {\n    return (0, bytes_1.hexlify)(_encode(object));\n}\nexports.encode = encode;\nfunction _decodeChildren(data, offset, childOffset, length) {\n    var result = [];\n    while (childOffset < offset + 1 + length) {\n        var decoded = _decode(data, childOffset);\n        result.push(decoded.result);\n        childOffset += decoded.consumed;\n        if (childOffset > offset + 1 + length) {\n            logger.throwError(\"child data too short\", logger_1.Logger.errors.BUFFER_OVERRUN, {});\n        }\n    }\n    return { consumed: (1 + length), result: result };\n}\n// returns { consumed: number, result: Object }\nfunction _decode(data, offset) {\n    if (data.length === 0) {\n        logger.throwError(\"data too short\", logger_1.Logger.errors.BUFFER_OVERRUN, {});\n    }\n    // Array with extra length prefix\n    if (data[offset] >= 0xf8) {\n        var lengthLength = data[offset] - 0xf7;\n        if (offset + 1 + lengthLength > data.length) {\n            logger.throwError(\"data short segment too short\", logger_1.Logger.errors.BUFFER_OVERRUN, {});\n        }\n        var length_2 = unarrayifyInteger(data, offset + 1, lengthLength);\n        if (offset + 1 + lengthLength + length_2 > data.length) {\n            logger.throwError(\"data long segment too short\", logger_1.Logger.errors.BUFFER_OVERRUN, {});\n        }\n        return _decodeChildren(data, offset, offset + 1 + lengthLength, lengthLength + length_2);\n    }\n    else if (data[offset] >= 0xc0) {\n        var length_3 = data[offset] - 0xc0;\n        if (offset + 1 + length_3 > data.length) {\n            logger.throwError(\"data array too short\", logger_1.Logger.errors.BUFFER_OVERRUN, {});\n        }\n        return _decodeChildren(data, offset, offset + 1, length_3);\n    }\n    else if (data[offset] >= 0xb8) {\n        var lengthLength = data[offset] - 0xb7;\n        if (offset + 1 + lengthLength > data.length) {\n            logger.throwError(\"data array too short\", logger_1.Logger.errors.BUFFER_OVERRUN, {});\n        }\n        var length_4 = unarrayifyInteger(data, offset + 1, lengthLength);\n        if (offset + 1 + lengthLength + length_4 > data.length) {\n            logger.throwError(\"data array too short\", logger_1.Logger.errors.BUFFER_OVERRUN, {});\n        }\n        var result = (0, bytes_1.hexlify)(data.slice(offset + 1 + lengthLength, offset + 1 + lengthLength + length_4));\n        return { consumed: (1 + lengthLength + length_4), result: result };\n    }\n    else if (data[offset] >= 0x80) {\n        var length_5 = data[offset] - 0x80;\n        if (offset + 1 + length_5 > data.length) {\n            logger.throwError(\"data too short\", logger_1.Logger.errors.BUFFER_OVERRUN, {});\n        }\n        var result = (0, bytes_1.hexlify)(data.slice(offset + 1, offset + 1 + length_5));\n        return { consumed: (1 + length_5), result: result };\n    }\n    return { consumed: 1, result: (0, bytes_1.hexlify)(data[offset]) };\n}\nfunction decode(data) {\n    var bytes = (0, bytes_1.arrayify)(data);\n    var decoded = _decode(bytes, 0);\n    if (decoded.consumed !== bytes.length) {\n        logger.throwArgumentError(\"invalid rlp data\", \"data\", data);\n    }\n    return decoded.result;\n}\nexports.decode = decode;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.version = void 0;\nexports.version = \"address/5.8.0\";\n//# sourceMappingURL=_version.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getCreate2Address = exports.getContractAddress = exports.getIcapAddress = exports.isAddress = exports.getAddress = void 0;\nvar bytes_1 = require(\"@ethersproject/bytes\");\nvar bignumber_1 = require(\"@ethersproject/bignumber\");\nvar keccak256_1 = require(\"@ethersproject/keccak256\");\nvar rlp_1 = require(\"@ethersproject/rlp\");\nvar logger_1 = require(\"@ethersproject/logger\");\nvar _version_1 = require(\"./_version\");\nvar logger = new logger_1.Logger(_version_1.version);\nfunction getChecksumAddress(address) {\n    if (!(0, bytes_1.isHexString)(address, 20)) {\n        logger.throwArgumentError(\"invalid address\", \"address\", address);\n    }\n    address = address.toLowerCase();\n    var chars = address.substring(2).split(\"\");\n    var expanded = new Uint8Array(40);\n    for (var i = 0; i < 40; i++) {\n        expanded[i] = chars[i].charCodeAt(0);\n    }\n    var hashed = (0, bytes_1.arrayify)((0, keccak256_1.keccak256)(expanded));\n    for (var i = 0; i < 40; i += 2) {\n        if ((hashed[i >> 1] >> 4) >= 8) {\n            chars[i] = chars[i].toUpperCase();\n        }\n        if ((hashed[i >> 1] & 0x0f) >= 8) {\n            chars[i + 1] = chars[i + 1].toUpperCase();\n        }\n    }\n    return \"0x\" + chars.join(\"\");\n}\n// Shims for environments that are missing some required constants and functions\nvar MAX_SAFE_INTEGER = 0x1fffffffffffff;\nfunction log10(x) {\n    if (Math.log10) {\n        return Math.log10(x);\n    }\n    return Math.log(x) / Math.LN10;\n}\n// See: https://en.wikipedia.org/wiki/International_Bank_Account_Number\n// Create lookup table\nvar ibanLookup = {};\nfor (var i = 0; i < 10; i++) {\n    ibanLookup[String(i)] = String(i);\n}\nfor (var i = 0; i < 26; i++) {\n    ibanLookup[String.fromCharCode(65 + i)] = String(10 + i);\n}\n// How many decimal digits can we process? (for 64-bit float, this is 15)\nvar safeDigits = Math.floor(log10(MAX_SAFE_INTEGER));\nfunction ibanChecksum(address) {\n    address = address.toUpperCase();\n    address = address.substring(4) + address.substring(0, 2) + \"00\";\n    var expanded = address.split(\"\").map(function (c) { return ibanLookup[c]; }).join(\"\");\n    // Javascript can handle integers safely up to 15 (decimal) digits\n    while (expanded.length >= safeDigits) {\n        var block = expanded.substring(0, safeDigits);\n        expanded = parseInt(block, 10) % 97 + expanded.substring(block.length);\n    }\n    var checksum = String(98 - (parseInt(expanded, 10) % 97));\n    while (checksum.length < 2) {\n        checksum = \"0\" + checksum;\n    }\n    return checksum;\n}\n;\nfunction getAddress(address) {\n    var result = null;\n    if (typeof (address) !== \"string\") {\n        logger.throwArgumentError(\"invalid address\", \"address\", address);\n    }\n    if (address.match(/^(0x)?[0-9a-fA-F]{40}$/)) {\n        // Missing the 0x prefix\n        if (address.substring(0, 2) !== \"0x\") {\n            address = \"0x\" + address;\n        }\n        result = getChecksumAddress(address);\n        // It is a checksummed address with a bad checksum\n        if (address.match(/([A-F].*[a-f])|([a-f].*[A-F])/) && result !== address) {\n            logger.throwArgumentError(\"bad address checksum\", \"address\", address);\n        }\n        // Maybe ICAP? (we only support direct mode)\n    }\n    else if (address.match(/^XE[0-9]{2}[0-9A-Za-z]{30,31}$/)) {\n        // It is an ICAP address with a bad checksum\n        if (address.substring(2, 4) !== ibanChecksum(address)) {\n            logger.throwArgumentError(\"bad icap checksum\", \"address\", address);\n        }\n        result = (0, bignumber_1._base36To16)(address.substring(4));\n        while (result.length < 40) {\n            result = \"0\" + result;\n        }\n        result = getChecksumAddress(\"0x\" + result);\n    }\n    else {\n        logger.throwArgumentError(\"invalid address\", \"address\", address);\n    }\n    return result;\n}\nexports.getAddress = getAddress;\nfunction isAddress(address) {\n    try {\n        getAddress(address);\n        return true;\n    }\n    catch (error) { }\n    return false;\n}\nexports.isAddress = isAddress;\nfunction getIcapAddress(address) {\n    var base36 = (0, bignumber_1._base16To36)(getAddress(address).substring(2)).toUpperCase();\n    while (base36.length < 30) {\n        base36 = \"0\" + base36;\n    }\n    return \"XE\" + ibanChecksum(\"XE00\" + base36) + base36;\n}\nexports.getIcapAddress = getIcapAddress;\n// http://ethereum.stackexchange.com/questions/760/how-is-the-address-of-an-ethereum-contract-computed\nfunction getContractAddress(transaction) {\n    var from = null;\n    try {\n        from = getAddress(transaction.from);\n    }\n    catch (error) {\n        logger.throwArgumentError(\"missing from address\", \"transaction\", transaction);\n    }\n    var nonce = (0, bytes_1.stripZeros)((0, bytes_1.arrayify)(bignumber_1.BigNumber.from(transaction.nonce).toHexString()));\n    return getAddress((0, bytes_1.hexDataSlice)((0, keccak256_1.keccak256)((0, rlp_1.encode)([from, nonce])), 12));\n}\nexports.getContractAddress = getContractAddress;\nfunction getCreate2Address(from, salt, initCodeHash) {\n    if ((0, bytes_1.hexDataLength)(salt) !== 32) {\n        logger.throwArgumentError(\"salt must be 32 bytes\", \"salt\", salt);\n    }\n    if ((0, bytes_1.hexDataLength)(initCodeHash) !== 32) {\n        logger.throwArgumentError(\"initCodeHash must be 32 bytes\", \"initCodeHash\", initCodeHash);\n    }\n    return getAddress((0, bytes_1.hexDataSlice)((0, keccak256_1.keccak256)((0, bytes_1.concat)([\"0xff\", getAddress(from), salt, initCodeHash])), 12));\n}\nexports.getCreate2Address = getCreate2Address;\n//# sourceMappingURL=index.js.map","import { getAddress } from '@ethersproject/address';\n/**\n * Validates an address and returns the parsed (checksummed) version of that address\n * @param address the unchecksummed hex address\n */\nexport function validateAndParseAddress(address) {\n    try {\n        return getAddress(address);\n    }\n    catch (error) {\n        throw new Error(`${address} is not a valid address.`);\n    }\n}\n// Checks a string starts with 0x, is 42 characters long and contains only hex characters after 0x\nconst startsWith0xLen42HexRegex = /^0x[0-9a-fA-F]{40}$/;\n/**\n * Checks if an address is valid by checking 0x prefix, length === 42 and hex encoding.\n * @param address the unchecksummed hex address\n */\nexport function checkValidAddress(address) {\n    if (startsWith0xLen42HexRegex.test(address)) {\n        return address;\n    }\n    throw new Error(`${address} is not a valid address.`);\n}\n//# sourceMappingURL=validateAndParseAddress.js.map","import { BigNumber } from '@ethersproject/bignumber';\nimport invariant from 'tiny-invariant';\nimport { checkValidAddress, validateAndParseAddress } from '../utils/validateAndParseAddress';\nimport { BaseCurrency } from './baseCurrency';\n/**\n * Represents an ERC20 token with a unique address and some metadata.\n */\nexport class Token extends BaseCurrency {\n    /**\n     *\n     * @param chainId {@link BaseCurrency#chainId}\n     * @param address The contract address on the chain on which this token lives\n     * @param decimals {@link BaseCurrency#decimals}\n     * @param symbol {@link BaseCurrency#symbol}\n     * @param name {@link BaseCurrency#name}\n     * @param bypassChecksum If true it only checks for length === 42, startsWith 0x and contains only hex characters\n     * @param buyFeeBps Buy fee tax for FOT tokens, in basis points\n     * @param sellFeeBps Sell fee tax for FOT tokens, in basis points\n     */\n    constructor(chainId, address, decimals, symbol, name, bypassChecksum, buyFeeBps, sellFeeBps) {\n        super(chainId, decimals, symbol, name);\n        this.isNative = false;\n        this.isToken = true;\n        if (bypassChecksum) {\n            this.address = checkValidAddress(address);\n        }\n        else {\n            this.address = validateAndParseAddress(address);\n        }\n        if (buyFeeBps) {\n            invariant(buyFeeBps.gte(BigNumber.from(0)), 'NON-NEGATIVE FOT FEES');\n        }\n        if (sellFeeBps) {\n            invariant(sellFeeBps.gte(BigNumber.from(0)), 'NON-NEGATIVE FOT FEES');\n        }\n        this.buyFeeBps = buyFeeBps;\n        this.sellFeeBps = sellFeeBps;\n    }\n    /**\n     * Returns true if the two tokens are equivalent, i.e. have the same chainId and address.\n     * @param other other token to compare\n     */\n    equals(other) {\n        return other.isToken && this.chainId === other.chainId && this.address.toLowerCase() === other.address.toLowerCase();\n    }\n    /**\n     * Returns true if the address of this token sorts before the address of the other token\n     * @param other other token to compare\n     * @throws if the tokens have the same address\n     * @throws if the tokens are on different chains\n     */\n    sortsBefore(other) {\n        invariant(this.chainId === other.chainId, 'CHAIN_IDS');\n        invariant(this.address.toLowerCase() !== other.address.toLowerCase(), 'ADDRESSES');\n        return this.address.toLowerCase() < other.address.toLowerCase();\n    }\n    /**\n     * Return this token, which does not need to be wrapped\n     */\n    get wrapped() {\n        return this;\n    }\n}\n//# sourceMappingURL=token.js.map","import { Token } from './token';\n/**\n * Known WETH9 implementation addresses, used in our implementation of Ether#wrapped\n */\nexport const WETH9 = {\n    1: new Token(1, '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', 18, 'WETH', 'Wrapped Ether'),\n    11155111: new Token(11155111, '0xfFf9976782d46CC05630D1f6eBAb18b2324d6B14', 18, 'WETH', 'Wrapped Ether'),\n    3: new Token(3, '0xc778417E063141139Fce010982780140Aa0cD5Ab', 18, 'WETH', 'Wrapped Ether'),\n    4: new Token(4, '0xc778417E063141139Fce010982780140Aa0cD5Ab', 18, 'WETH', 'Wrapped Ether'),\n    5: new Token(5, '0xB4FBF271143F4FBf7B91A5ded31805e42b2208d6', 18, 'WETH', 'Wrapped Ether'),\n    42: new Token(42, '0xd0A1E359811322d97991E03f863a0C30C2cF029C', 18, 'WETH', 'Wrapped Ether'),\n    10: new Token(10, '0x4200000000000000000000000000000000000006', 18, 'WETH', 'Wrapped Ether'),\n    69: new Token(69, '0x4200000000000000000000000000000000000006', 18, 'WETH', 'Wrapped Ether'),\n    11155420: new Token(11155420, '0x4200000000000000000000000000000000000006', 18, 'WETH', 'Wrapped Ether'),\n    42161: new Token(42161, '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1', 18, 'WETH', 'Wrapped Ether'),\n    421611: new Token(421611, '0xB47e6A5f8b33b3F17603C83a0535A9dcD7E32681', 18, 'WETH', 'Wrapped Ether'),\n    421614: new Token(421614, '0x980B62Da83eFf3D4576C647993b0c1D7faf17c73', 18, 'WETH', 'Wrapped Ether'),\n    8453: new Token(8453, '0x4200000000000000000000000000000000000006', 18, 'WETH', 'Wrapped Ether'),\n    84532: new Token(84532, '0x4200000000000000000000000000000000000006', 18, 'WETH', 'Wrapped Ether'),\n    56: new Token(56, '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c', 18, 'WBNB', 'Wrapped BNB'),\n    137: new Token(137, '0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270', 18, 'WMATIC', 'Wrapped MATIC'),\n    43114: new Token(43114, '0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7', 18, 'WAVAX', 'Wrapped AVAX'),\n    7777777: new Token(7777777, '0x4200000000000000000000000000000000000006', 18, 'WETH', 'Wrapped Ether'),\n    81457: new Token(81457, '0x4300000000000000000000000000000000000004', 18, 'WETH', 'Wrapped Ether'),\n    324: new Token(324, '0x5AEa5775959fBC2557Cc8789bC1bf90A239D9a91', 18, 'WETH', 'Wrapped Ether'),\n    480: new Token(480, '0x4200000000000000000000000000000000000006', 18, 'WETH', 'Wrapped Ether'),\n    1301: new Token(1301, '0x4200000000000000000000000000000000000006', 18, 'WETH', 'Wrapped Ether'),\n    130: new Token(130, '0x4200000000000000000000000000000000000006', 18, 'WETH', 'Wrapped Ether'),\n    10143: new Token(10143, '0x760AfE86e5de5fa0Ee542fc7B7B713e1c5425701', 18, 'WMON', 'Wrapped Monad'),\n    1868: new Token(1868, '0x4200000000000000000000000000000000000006', 18, 'WETH', 'Wrapped Ether'),\n    143: new Token(143, '0x3bd359C1119dA7Da1D913D1C4D2B7c461115433A', 18, 'WMON', 'Wrapped Monad'),\n    59144: new Token(59144, '0xe5D7C2a44FfDDf6b295A15c148167daaAf5Cf34f', 18, 'WETH', 'Wrapped Ether'),\n};\n//# sourceMappingURL=weth9.js.map","import invariant from 'tiny-invariant';\nimport { NativeCurrency } from './nativeCurrency';\nimport { WETH9 } from './weth9';\n/**\n * Ether is the main usage of a 'native' currency, i.e. for Ethereum mainnet and all testnets\n */\nexport class Ether extends NativeCurrency {\n    constructor(chainId) {\n        super(chainId, 18, 'ETH', 'Ether');\n    }\n    get wrapped() {\n        const weth9 = WETH9[this.chainId];\n        invariant(!!weth9, 'WRAPPED');\n        return weth9;\n    }\n    static onChain(chainId) {\n        var _a;\n        return (_a = this._etherCache[chainId]) !== null && _a !== void 0 ? _a : (this._etherCache[chainId] = new Ether(chainId));\n    }\n    equals(other) {\n        return other.isNative && other.chainId === this.chainId;\n    }\n}\nEther._etherCache = {};\n//# sourceMappingURL=ether.js.map","import { Percent } from '../entities';\n/**\n * Returns the percent difference between the mid price and the execution price, i.e. price impact.\n * @param midPrice mid price before the trade\n * @param inputAmount the input amount of the trade\n * @param outputAmount the output amount of the trade\n */\nexport function computePriceImpact(midPrice, inputAmount, outputAmount) {\n    const quotedOutputAmount = midPrice.quote(inputAmount);\n    // calculate price impact := (exactQuote - outputAmount) / exactQuote\n    const priceImpact = quotedOutputAmount.subtract(outputAmount).divide(quotedOutputAmount);\n    return new Percent(priceImpact.numerator, priceImpact.denominator);\n}\n//# sourceMappingURL=computePriceImpact.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.keccak256 = void 0;\nvar js_sha3_1 = __importDefault(require(\"js-sha3\"));\nvar bytes_1 = require(\"@ethersproject/bytes\");\nfunction keccak256(data) {\n    return '0x' + js_sha3_1.default.keccak_256((0, bytes_1.arrayify)(data));\n}\nexports.keccak256 = keccak256;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AddressZero = void 0;\nexports.AddressZero = \"0x0000000000000000000000000000000000000000\";\n//# sourceMappingURL=addresses.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MaxInt256 = exports.MinInt256 = exports.MaxUint256 = exports.WeiPerEther = exports.Two = exports.One = exports.Zero = exports.NegativeOne = void 0;\nvar bignumber_1 = require(\"@ethersproject/bignumber\");\nvar NegativeOne = ( /*#__PURE__*/bignumber_1.BigNumber.from(-1));\nexports.NegativeOne = NegativeOne;\nvar Zero = ( /*#__PURE__*/bignumber_1.BigNumber.from(0));\nexports.Zero = Zero;\nvar One = ( /*#__PURE__*/bignumber_1.BigNumber.from(1));\nexports.One = One;\nvar Two = ( /*#__PURE__*/bignumber_1.BigNumber.from(2));\nexports.Two = Two;\nvar WeiPerEther = ( /*#__PURE__*/bignumber_1.BigNumber.from(\"1000000000000000000\"));\nexports.WeiPerEther = WeiPerEther;\nvar MaxUint256 = ( /*#__PURE__*/bignumber_1.BigNumber.from(\"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\"));\nexports.MaxUint256 = MaxUint256;\nvar MinInt256 = ( /*#__PURE__*/bignumber_1.BigNumber.from(\"-0x8000000000000000000000000000000000000000000000000000000000000000\"));\nexports.MinInt256 = MinInt256;\nvar MaxInt256 = ( /*#__PURE__*/bignumber_1.BigNumber.from(\"0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\"));\nexports.MaxInt256 = MaxInt256;\n//# sourceMappingURL=bignumbers.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.HashZero = void 0;\nexports.HashZero = \"0x0000000000000000000000000000000000000000000000000000000000000000\";\n//# sourceMappingURL=hashes.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.EtherSymbol = void 0;\n// NFKC (composed)             // (decomposed)\nexports.EtherSymbol = \"\\u039e\"; // \"\\uD835\\uDF63\";\n//# sourceMappingURL=strings.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.EtherSymbol = exports.HashZero = exports.MaxInt256 = exports.MinInt256 = exports.MaxUint256 = exports.WeiPerEther = exports.Two = exports.One = exports.Zero = exports.NegativeOne = exports.AddressZero = void 0;\nvar addresses_1 = require(\"./addresses\");\nObject.defineProperty(exports, \"AddressZero\", { enumerable: true, get: function () { return addresses_1.AddressZero; } });\nvar bignumbers_1 = require(\"./bignumbers\");\nObject.defineProperty(exports, \"NegativeOne\", { enumerable: true, get: function () { return bignumbers_1.NegativeOne; } });\nObject.defineProperty(exports, \"Zero\", { enumerable: true, get: function () { return bignumbers_1.Zero; } });\nObject.defineProperty(exports, \"One\", { enumerable: true, get: function () { return bignumbers_1.One; } });\nObject.defineProperty(exports, \"Two\", { enumerable: true, get: function () { return bignumbers_1.Two; } });\nObject.defineProperty(exports, \"WeiPerEther\", { enumerable: true, get: function () { return bignumbers_1.WeiPerEther; } });\nObject.defineProperty(exports, \"MaxUint256\", { enumerable: true, get: function () { return bignumbers_1.MaxUint256; } });\nObject.defineProperty(exports, \"MinInt256\", { enumerable: true, get: function () { return bignumbers_1.MinInt256; } });\nObject.defineProperty(exports, \"MaxInt256\", { enumerable: true, get: function () { return bignumbers_1.MaxInt256; } });\nvar hashes_1 = require(\"./hashes\");\nObject.defineProperty(exports, \"HashZero\", { enumerable: true, get: function () { return hashes_1.HashZero; } });\nvar strings_1 = require(\"./strings\");\nObject.defineProperty(exports, \"EtherSymbol\", { enumerable: true, get: function () { return strings_1.EtherSymbol; } });\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.version = void 0;\nexports.version = \"strings/5.7.0\";\n//# sourceMappingURL=_version.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.toUtf8CodePoints = exports.toUtf8String = exports._toUtf8String = exports._toEscapedUtf8String = exports.toUtf8Bytes = exports.Utf8ErrorFuncs = exports.Utf8ErrorReason = exports.UnicodeNormalizationForm = void 0;\nvar bytes_1 = require(\"@ethersproject/bytes\");\nvar logger_1 = require(\"@ethersproject/logger\");\nvar _version_1 = require(\"./_version\");\nvar logger = new logger_1.Logger(_version_1.version);\n///////////////////////////////\nvar UnicodeNormalizationForm;\n(function (UnicodeNormalizationForm) {\n    UnicodeNormalizationForm[\"current\"] = \"\";\n    UnicodeNormalizationForm[\"NFC\"] = \"NFC\";\n    UnicodeNormalizationForm[\"NFD\"] = \"NFD\";\n    UnicodeNormalizationForm[\"NFKC\"] = \"NFKC\";\n    UnicodeNormalizationForm[\"NFKD\"] = \"NFKD\";\n})(UnicodeNormalizationForm = exports.UnicodeNormalizationForm || (exports.UnicodeNormalizationForm = {}));\n;\nvar Utf8ErrorReason;\n(function (Utf8ErrorReason) {\n    // A continuation byte was present where there was nothing to continue\n    // - offset = the index the codepoint began in\n    Utf8ErrorReason[\"UNEXPECTED_CONTINUE\"] = \"unexpected continuation byte\";\n    // An invalid (non-continuation) byte to start a UTF-8 codepoint was found\n    // - offset = the index the codepoint began in\n    Utf8ErrorReason[\"BAD_PREFIX\"] = \"bad codepoint prefix\";\n    // The string is too short to process the expected codepoint\n    // - offset = the index the codepoint began in\n    Utf8ErrorReason[\"OVERRUN\"] = \"string overrun\";\n    // A missing continuation byte was expected but not found\n    // - offset = the index the continuation byte was expected at\n    Utf8ErrorReason[\"MISSING_CONTINUE\"] = \"missing continuation byte\";\n    // The computed code point is outside the range for UTF-8\n    // - offset       = start of this codepoint\n    // - badCodepoint = the computed codepoint; outside the UTF-8 range\n    Utf8ErrorReason[\"OUT_OF_RANGE\"] = \"out of UTF-8 range\";\n    // UTF-8 strings may not contain UTF-16 surrogate pairs\n    // - offset       = start of this codepoint\n    // - badCodepoint = the computed codepoint; inside the UTF-16 surrogate range\n    Utf8ErrorReason[\"UTF16_SURROGATE\"] = \"UTF-16 surrogate\";\n    // The string is an overlong representation\n    // - offset       = start of this codepoint\n    // - badCodepoint = the computed codepoint; already bounds checked\n    Utf8ErrorReason[\"OVERLONG\"] = \"overlong representation\";\n})(Utf8ErrorReason = exports.Utf8ErrorReason || (exports.Utf8ErrorReason = {}));\n;\nfunction errorFunc(reason, offset, bytes, output, badCodepoint) {\n    return logger.throwArgumentError(\"invalid codepoint at offset \" + offset + \"; \" + reason, \"bytes\", bytes);\n}\nfunction ignoreFunc(reason, offset, bytes, output, badCodepoint) {\n    // If there is an invalid prefix (including stray continuation), skip any additional continuation bytes\n    if (reason === Utf8ErrorReason.BAD_PREFIX || reason === Utf8ErrorReason.UNEXPECTED_CONTINUE) {\n        var i = 0;\n        for (var o = offset + 1; o < bytes.length; o++) {\n            if (bytes[o] >> 6 !== 0x02) {\n                break;\n            }\n            i++;\n        }\n        return i;\n    }\n    // This byte runs us past the end of the string, so just jump to the end\n    // (but the first byte was read already read and therefore skipped)\n    if (reason === Utf8ErrorReason.OVERRUN) {\n        return bytes.length - offset - 1;\n    }\n    // Nothing to skip\n    return 0;\n}\nfunction replaceFunc(reason, offset, bytes, output, badCodepoint) {\n    // Overlong representations are otherwise \"valid\" code points; just non-deistingtished\n    if (reason === Utf8ErrorReason.OVERLONG) {\n        output.push(badCodepoint);\n        return 0;\n    }\n    // Put the replacement character into the output\n    output.push(0xfffd);\n    // Otherwise, process as if ignoring errors\n    return ignoreFunc(reason, offset, bytes, output, badCodepoint);\n}\n// Common error handing strategies\nexports.Utf8ErrorFuncs = Object.freeze({\n    error: errorFunc,\n    ignore: ignoreFunc,\n    replace: replaceFunc\n});\n// http://stackoverflow.com/questions/13356493/decode-utf-8-with-javascript#13691499\nfunction getUtf8CodePoints(bytes, onError) {\n    if (onError == null) {\n        onError = exports.Utf8ErrorFuncs.error;\n    }\n    bytes = (0, bytes_1.arrayify)(bytes);\n    var result = [];\n    var i = 0;\n    // Invalid bytes are ignored\n    while (i < bytes.length) {\n        var c = bytes[i++];\n        // 0xxx xxxx\n        if (c >> 7 === 0) {\n            result.push(c);\n            continue;\n        }\n        // Multibyte; how many bytes left for this character?\n        var extraLength = null;\n        var overlongMask = null;\n        // 110x xxxx 10xx xxxx\n        if ((c & 0xe0) === 0xc0) {\n            extraLength = 1;\n            overlongMask = 0x7f;\n            // 1110 xxxx 10xx xxxx 10xx xxxx\n        }\n        else if ((c & 0xf0) === 0xe0) {\n            extraLength = 2;\n            overlongMask = 0x7ff;\n            // 1111 0xxx 10xx xxxx 10xx xxxx 10xx xxxx\n        }\n        else if ((c & 0xf8) === 0xf0) {\n            extraLength = 3;\n            overlongMask = 0xffff;\n        }\n        else {\n            if ((c & 0xc0) === 0x80) {\n                i += onError(Utf8ErrorReason.UNEXPECTED_CONTINUE, i - 1, bytes, result);\n            }\n            else {\n                i += onError(Utf8ErrorReason.BAD_PREFIX, i - 1, bytes, result);\n            }\n            continue;\n        }\n        // Do we have enough bytes in our data?\n        if (i - 1 + extraLength >= bytes.length) {\n            i += onError(Utf8ErrorReason.OVERRUN, i - 1, bytes, result);\n            continue;\n        }\n        // Remove the length prefix from the char\n        var res = c & ((1 << (8 - extraLength - 1)) - 1);\n        for (var j = 0; j < extraLength; j++) {\n            var nextChar = bytes[i];\n            // Invalid continuation byte\n            if ((nextChar & 0xc0) != 0x80) {\n                i += onError(Utf8ErrorReason.MISSING_CONTINUE, i, bytes, result);\n                res = null;\n                break;\n            }\n            ;\n            res = (res << 6) | (nextChar & 0x3f);\n            i++;\n        }\n        // See above loop for invalid continuation byte\n        if (res === null) {\n            continue;\n        }\n        // Maximum code point\n        if (res > 0x10ffff) {\n            i += onError(Utf8ErrorReason.OUT_OF_RANGE, i - 1 - extraLength, bytes, result, res);\n            continue;\n        }\n        // Reserved for UTF-16 surrogate halves\n        if (res >= 0xd800 && res <= 0xdfff) {\n            i += onError(Utf8ErrorReason.UTF16_SURROGATE, i - 1 - extraLength, bytes, result, res);\n            continue;\n        }\n        // Check for overlong sequences (more bytes than needed)\n        if (res <= overlongMask) {\n            i += onError(Utf8ErrorReason.OVERLONG, i - 1 - extraLength, bytes, result, res);\n            continue;\n        }\n        result.push(res);\n    }\n    return result;\n}\n// http://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array\nfunction toUtf8Bytes(str, form) {\n    if (form === void 0) { form = UnicodeNormalizationForm.current; }\n    if (form != UnicodeNormalizationForm.current) {\n        logger.checkNormalize();\n        str = str.normalize(form);\n    }\n    var result = [];\n    for (var i = 0; i < str.length; i++) {\n        var c = str.charCodeAt(i);\n        if (c < 0x80) {\n            result.push(c);\n        }\n        else if (c < 0x800) {\n            result.push((c >> 6) | 0xc0);\n            result.push((c & 0x3f) | 0x80);\n        }\n        else if ((c & 0xfc00) == 0xd800) {\n            i++;\n            var c2 = str.charCodeAt(i);\n            if (i >= str.length || (c2 & 0xfc00) !== 0xdc00) {\n                throw new Error(\"invalid utf-8 string\");\n            }\n            // Surrogate Pair\n            var pair = 0x10000 + ((c & 0x03ff) << 10) + (c2 & 0x03ff);\n            result.push((pair >> 18) | 0xf0);\n            result.push(((pair >> 12) & 0x3f) | 0x80);\n            result.push(((pair >> 6) & 0x3f) | 0x80);\n            result.push((pair & 0x3f) | 0x80);\n        }\n        else {\n            result.push((c >> 12) | 0xe0);\n            result.push(((c >> 6) & 0x3f) | 0x80);\n            result.push((c & 0x3f) | 0x80);\n        }\n    }\n    return (0, bytes_1.arrayify)(result);\n}\nexports.toUtf8Bytes = toUtf8Bytes;\n;\nfunction escapeChar(value) {\n    var hex = (\"0000\" + value.toString(16));\n    return \"\\\\u\" + hex.substring(hex.length - 4);\n}\nfunction _toEscapedUtf8String(bytes, onError) {\n    return '\"' + getUtf8CodePoints(bytes, onError).map(function (codePoint) {\n        if (codePoint < 256) {\n            switch (codePoint) {\n                case 8: return \"\\\\b\";\n                case 9: return \"\\\\t\";\n                case 10: return \"\\\\n\";\n                case 13: return \"\\\\r\";\n                case 34: return \"\\\\\\\"\";\n                case 92: return \"\\\\\\\\\";\n            }\n            if (codePoint >= 32 && codePoint < 127) {\n                return String.fromCharCode(codePoint);\n            }\n        }\n        if (codePoint <= 0xffff) {\n            return escapeChar(codePoint);\n        }\n        codePoint -= 0x10000;\n        return escapeChar(((codePoint >> 10) & 0x3ff) + 0xd800) + escapeChar((codePoint & 0x3ff) + 0xdc00);\n    }).join(\"\") + '\"';\n}\nexports._toEscapedUtf8String = _toEscapedUtf8String;\nfunction _toUtf8String(codePoints) {\n    return codePoints.map(function (codePoint) {\n        if (codePoint <= 0xffff) {\n            return String.fromCharCode(codePoint);\n        }\n        codePoint -= 0x10000;\n        return String.fromCharCode((((codePoint >> 10) & 0x3ff) + 0xd800), ((codePoint & 0x3ff) + 0xdc00));\n    }).join(\"\");\n}\nexports._toUtf8String = _toUtf8String;\nfunction toUtf8String(bytes, onError) {\n    return _toUtf8String(getUtf8CodePoints(bytes, onError));\n}\nexports.toUtf8String = toUtf8String;\nfunction toUtf8CodePoints(str, form) {\n    if (form === void 0) { form = UnicodeNormalizationForm.current; }\n    return getUtf8CodePoints(toUtf8Bytes(str, form));\n}\nexports.toUtf8CodePoints = toUtf8CodePoints;\n//# sourceMappingURL=utf8.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.parseBytes32String = exports.formatBytes32String = void 0;\nvar constants_1 = require(\"@ethersproject/constants\");\nvar bytes_1 = require(\"@ethersproject/bytes\");\nvar utf8_1 = require(\"./utf8\");\nfunction formatBytes32String(text) {\n    // Get the bytes\n    var bytes = (0, utf8_1.toUtf8Bytes)(text);\n    // Check we have room for null-termination\n    if (bytes.length > 31) {\n        throw new Error(\"bytes32 string must be less than 32 bytes\");\n    }\n    // Zero-pad (implicitly null-terminates)\n    return (0, bytes_1.hexlify)((0, bytes_1.concat)([bytes, constants_1.HashZero]).slice(0, 32));\n}\nexports.formatBytes32String = formatBytes32String;\nfunction parseBytes32String(bytes) {\n    var data = (0, bytes_1.arrayify)(bytes);\n    // Must be 32 bytes with a null-termination\n    if (data.length !== 32) {\n        throw new Error(\"invalid bytes32 - not 32 bytes long\");\n    }\n    if (data[31] !== 0) {\n        throw new Error(\"invalid bytes32 string - no null terminator\");\n    }\n    // Find the null termination\n    var length = 31;\n    while (data[length - 1] === 0) {\n        length--;\n    }\n    // Determine the string value\n    return (0, utf8_1.toUtf8String)(data.slice(0, length));\n}\nexports.parseBytes32String = parseBytes32String;\n//# sourceMappingURL=bytes32.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.nameprep = exports._nameprepTableC = exports._nameprepTableB2 = exports._nameprepTableA1 = void 0;\nvar utf8_1 = require(\"./utf8\");\nfunction bytes2(data) {\n    if ((data.length % 4) !== 0) {\n        throw new Error(\"bad data\");\n    }\n    var result = [];\n    for (var i = 0; i < data.length; i += 4) {\n        result.push(parseInt(data.substring(i, i + 4), 16));\n    }\n    return result;\n}\nfunction createTable(data, func) {\n    if (!func) {\n        func = function (value) { return [parseInt(value, 16)]; };\n    }\n    var lo = 0;\n    var result = {};\n    data.split(\",\").forEach(function (pair) {\n        var comps = pair.split(\":\");\n        lo += parseInt(comps[0], 16);\n        result[lo] = func(comps[1]);\n    });\n    return result;\n}\nfunction createRangeTable(data) {\n    var hi = 0;\n    return data.split(\",\").map(function (v) {\n        var comps = v.split(\"-\");\n        if (comps.length === 1) {\n            comps[1] = \"0\";\n        }\n        else if (comps[1] === \"\") {\n            comps[1] = \"1\";\n        }\n        var lo = hi + parseInt(comps[0], 16);\n        hi = parseInt(comps[1], 16);\n        return { l: lo, h: hi };\n    });\n}\nfunction matchMap(value, ranges) {\n    var lo = 0;\n    for (var i = 0; i < ranges.length; i++) {\n        var range = ranges[i];\n        lo += range.l;\n        if (value >= lo && value <= lo + range.h && ((value - lo) % (range.d || 1)) === 0) {\n            if (range.e && range.e.indexOf(value - lo) !== -1) {\n                continue;\n            }\n            return range;\n        }\n    }\n    return null;\n}\nvar Table_A_1_ranges = createRangeTable(\"221,13-1b,5f-,40-10,51-f,11-3,3-3,2-2,2-4,8,2,15,2d,28-8,88,48,27-,3-5,11-20,27-,8,28,3-5,12,18,b-a,1c-4,6-16,2-d,2-2,2,1b-4,17-9,8f-,10,f,1f-2,1c-34,33-14e,4,36-,13-,6-2,1a-f,4,9-,3-,17,8,2-2,5-,2,8-,3-,4-8,2-3,3,6-,16-6,2-,7-3,3-,17,8,3,3,3-,2,6-3,3-,4-a,5,2-6,10-b,4,8,2,4,17,8,3,6-,b,4,4-,2-e,2-4,b-10,4,9-,3-,17,8,3-,5-,9-2,3-,4-7,3-3,3,4-3,c-10,3,7-2,4,5-2,3,2,3-2,3-2,4-2,9,4-3,6-2,4,5-8,2-e,d-d,4,9,4,18,b,6-3,8,4,5-6,3-8,3-3,b-11,3,9,4,18,b,6-3,8,4,5-6,3-6,2,3-3,b-11,3,9,4,18,11-3,7-,4,5-8,2-7,3-3,b-11,3,13-2,19,a,2-,8-2,2-3,7,2,9-11,4-b,3b-3,1e-24,3,2-,3,2-,2-5,5,8,4,2,2-,3,e,4-,6,2,7-,b-,3-21,49,23-5,1c-3,9,25,10-,2-2f,23,6,3,8-2,5-5,1b-45,27-9,2a-,2-3,5b-4,45-4,53-5,8,40,2,5-,8,2,5-,28,2,5-,20,2,5-,8,2,5-,8,8,18,20,2,5-,8,28,14-5,1d-22,56-b,277-8,1e-2,52-e,e,8-a,18-8,15-b,e,4,3-b,5e-2,b-15,10,b-5,59-7,2b-555,9d-3,5b-5,17-,7-,27-,7-,9,2,2,2,20-,36,10,f-,7,14-,4,a,54-3,2-6,6-5,9-,1c-10,13-1d,1c-14,3c-,10-6,32-b,240-30,28-18,c-14,a0,115-,3,66-,b-76,5,5-,1d,24,2,5-2,2,8-,35-2,19,f-10,1d-3,311-37f,1b,5a-b,d7-19,d-3,41,57-,68-4,29-3,5f,29-37,2e-2,25-c,2c-2,4e-3,30,78-3,64-,20,19b7-49,51a7-59,48e-2,38-738,2ba5-5b,222f-,3c-94,8-b,6-4,1b,6,2,3,3,6d-20,16e-f,41-,37-7,2e-2,11-f,5-b,18-,b,14,5-3,6,88-,2,bf-2,7-,7-,7-,4-2,8,8-9,8-2ff,20,5-b,1c-b4,27-,27-cbb1,f7-9,28-2,b5-221,56,48,3-,2-,3-,5,d,2,5,3,42,5-,9,8,1d,5,6,2-2,8,153-3,123-3,33-27fd,a6da-5128,21f-5df,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3,2-1d,61-ff7d\");\n// @TODO: Make this relative...\nvar Table_B_1_flags = \"ad,34f,1806,180b,180c,180d,200b,200c,200d,2060,feff\".split(\",\").map(function (v) { return parseInt(v, 16); });\nvar Table_B_2_ranges = [\n    { h: 25, s: 32, l: 65 },\n    { h: 30, s: 32, e: [23], l: 127 },\n    { h: 54, s: 1, e: [48], l: 64, d: 2 },\n    { h: 14, s: 1, l: 57, d: 2 },\n    { h: 44, s: 1, l: 17, d: 2 },\n    { h: 10, s: 1, e: [2, 6, 8], l: 61, d: 2 },\n    { h: 16, s: 1, l: 68, d: 2 },\n    { h: 84, s: 1, e: [18, 24, 66], l: 19, d: 2 },\n    { h: 26, s: 32, e: [17], l: 435 },\n    { h: 22, s: 1, l: 71, d: 2 },\n    { h: 15, s: 80, l: 40 },\n    { h: 31, s: 32, l: 16 },\n    { h: 32, s: 1, l: 80, d: 2 },\n    { h: 52, s: 1, l: 42, d: 2 },\n    { h: 12, s: 1, l: 55, d: 2 },\n    { h: 40, s: 1, e: [38], l: 15, d: 2 },\n    { h: 14, s: 1, l: 48, d: 2 },\n    { h: 37, s: 48, l: 49 },\n    { h: 148, s: 1, l: 6351, d: 2 },\n    { h: 88, s: 1, l: 160, d: 2 },\n    { h: 15, s: 16, l: 704 },\n    { h: 25, s: 26, l: 854 },\n    { h: 25, s: 32, l: 55915 },\n    { h: 37, s: 40, l: 1247 },\n    { h: 25, s: -119711, l: 53248 },\n    { h: 25, s: -119763, l: 52 },\n    { h: 25, s: -119815, l: 52 },\n    { h: 25, s: -119867, e: [1, 4, 5, 7, 8, 11, 12, 17], l: 52 },\n    { h: 25, s: -119919, l: 52 },\n    { h: 24, s: -119971, e: [2, 7, 8, 17], l: 52 },\n    { h: 24, s: -120023, e: [2, 7, 13, 15, 16, 17], l: 52 },\n    { h: 25, s: -120075, l: 52 },\n    { h: 25, s: -120127, l: 52 },\n    { h: 25, s: -120179, l: 52 },\n    { h: 25, s: -120231, l: 52 },\n    { h: 25, s: -120283, l: 52 },\n    { h: 25, s: -120335, l: 52 },\n    { h: 24, s: -119543, e: [17], l: 56 },\n    { h: 24, s: -119601, e: [17], l: 58 },\n    { h: 24, s: -119659, e: [17], l: 58 },\n    { h: 24, s: -119717, e: [17], l: 58 },\n    { h: 24, s: -119775, e: [17], l: 58 }\n];\nvar Table_B_2_lut_abs = createTable(\"b5:3bc,c3:ff,7:73,2:253,5:254,3:256,1:257,5:259,1:25b,3:260,1:263,2:269,1:268,5:26f,1:272,2:275,7:280,3:283,5:288,3:28a,1:28b,5:292,3f:195,1:1bf,29:19e,125:3b9,8b:3b2,1:3b8,1:3c5,3:3c6,1:3c0,1a:3ba,1:3c1,1:3c3,2:3b8,1:3b5,1bc9:3b9,1c:1f76,1:1f77,f:1f7a,1:1f7b,d:1f78,1:1f79,1:1f7c,1:1f7d,107:63,5:25b,4:68,1:68,1:68,3:69,1:69,1:6c,3:6e,4:70,1:71,1:72,1:72,1:72,7:7a,2:3c9,2:7a,2:6b,1:e5,1:62,1:63,3:65,1:66,2:6d,b:3b3,1:3c0,6:64,1b574:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3\");\nvar Table_B_2_lut_rel = createTable(\"179:1,2:1,2:1,5:1,2:1,a:4f,a:1,8:1,2:1,2:1,3:1,5:1,3:1,4:1,2:1,3:1,4:1,8:2,1:1,2:2,1:1,2:2,27:2,195:26,2:25,1:25,1:25,2:40,2:3f,1:3f,33:1,11:-6,1:-9,1ac7:-3a,6d:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,b:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,c:-8,2:-8,2:-8,2:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,49:-8,1:-8,1:-4a,1:-4a,d:-56,1:-56,1:-56,1:-56,d:-8,1:-8,f:-8,1:-8,3:-7\");\nvar Table_B_2_complex = createTable(\"df:00730073,51:00690307,19:02BC006E,a7:006A030C,18a:002003B9,16:03B903080301,20:03C503080301,1d7:05650582,190f:00680331,1:00740308,1:0077030A,1:0079030A,1:006102BE,b6:03C50313,2:03C503130300,2:03C503130301,2:03C503130342,2a:1F0003B9,1:1F0103B9,1:1F0203B9,1:1F0303B9,1:1F0403B9,1:1F0503B9,1:1F0603B9,1:1F0703B9,1:1F0003B9,1:1F0103B9,1:1F0203B9,1:1F0303B9,1:1F0403B9,1:1F0503B9,1:1F0603B9,1:1F0703B9,1:1F2003B9,1:1F2103B9,1:1F2203B9,1:1F2303B9,1:1F2403B9,1:1F2503B9,1:1F2603B9,1:1F2703B9,1:1F2003B9,1:1F2103B9,1:1F2203B9,1:1F2303B9,1:1F2403B9,1:1F2503B9,1:1F2603B9,1:1F2703B9,1:1F6003B9,1:1F6103B9,1:1F6203B9,1:1F6303B9,1:1F6403B9,1:1F6503B9,1:1F6603B9,1:1F6703B9,1:1F6003B9,1:1F6103B9,1:1F6203B9,1:1F6303B9,1:1F6403B9,1:1F6503B9,1:1F6603B9,1:1F6703B9,3:1F7003B9,1:03B103B9,1:03AC03B9,2:03B10342,1:03B1034203B9,5:03B103B9,6:1F7403B9,1:03B703B9,1:03AE03B9,2:03B70342,1:03B7034203B9,5:03B703B9,6:03B903080300,1:03B903080301,3:03B90342,1:03B903080342,b:03C503080300,1:03C503080301,1:03C10313,2:03C50342,1:03C503080342,b:1F7C03B9,1:03C903B9,1:03CE03B9,2:03C90342,1:03C9034203B9,5:03C903B9,ac:00720073,5b:00B00063,6:00B00066,d:006E006F,a:0073006D,1:00740065006C,1:0074006D,124f:006800700061,2:00610075,2:006F0076,b:00700061,1:006E0061,1:03BC0061,1:006D0061,1:006B0061,1:006B0062,1:006D0062,1:00670062,3:00700066,1:006E0066,1:03BC0066,4:0068007A,1:006B0068007A,1:006D0068007A,1:00670068007A,1:00740068007A,15:00700061,1:006B00700061,1:006D00700061,1:006700700061,8:00700076,1:006E0076,1:03BC0076,1:006D0076,1:006B0076,1:006D0076,1:00700077,1:006E0077,1:03BC0077,1:006D0077,1:006B0077,1:006D0077,1:006B03C9,1:006D03C9,2:00620071,3:00632215006B0067,1:0063006F002E,1:00640062,1:00670079,2:00680070,2:006B006B,1:006B006D,9:00700068,2:00700070006D,1:00700072,2:00730076,1:00770062,c723:00660066,1:00660069,1:0066006C,1:006600660069,1:00660066006C,1:00730074,1:00730074,d:05740576,1:05740565,1:0574056B,1:057E0576,1:0574056D\", bytes2);\nvar Table_C_ranges = createRangeTable(\"80-20,2a0-,39c,32,f71,18e,7f2-f,19-7,30-4,7-5,f81-b,5,a800-20ff,4d1-1f,110,fa-6,d174-7,2e84-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,2,1f-5f,ff7f-20001\");\nfunction flatten(values) {\n    return values.reduce(function (accum, value) {\n        value.forEach(function (value) { accum.push(value); });\n        return accum;\n    }, []);\n}\nfunction _nameprepTableA1(codepoint) {\n    return !!matchMap(codepoint, Table_A_1_ranges);\n}\nexports._nameprepTableA1 = _nameprepTableA1;\nfunction _nameprepTableB2(codepoint) {\n    var range = matchMap(codepoint, Table_B_2_ranges);\n    if (range) {\n        return [codepoint + range.s];\n    }\n    var codes = Table_B_2_lut_abs[codepoint];\n    if (codes) {\n        return codes;\n    }\n    var shift = Table_B_2_lut_rel[codepoint];\n    if (shift) {\n        return [codepoint + shift[0]];\n    }\n    var complex = Table_B_2_complex[codepoint];\n    if (complex) {\n        return complex;\n    }\n    return null;\n}\nexports._nameprepTableB2 = _nameprepTableB2;\nfunction _nameprepTableC(codepoint) {\n    return !!matchMap(codepoint, Table_C_ranges);\n}\nexports._nameprepTableC = _nameprepTableC;\nfunction nameprep(value) {\n    // This allows platforms with incomplete normalize to bypass\n    // it for very basic names which the built-in toLowerCase\n    // will certainly handle correctly\n    if (value.match(/^[a-z0-9-]*$/i) && value.length <= 59) {\n        return value.toLowerCase();\n    }\n    // Get the code points (keeping the current normalization)\n    var codes = (0, utf8_1.toUtf8CodePoints)(value);\n    codes = flatten(codes.map(function (code) {\n        // Substitute Table B.1 (Maps to Nothing)\n        if (Table_B_1_flags.indexOf(code) >= 0) {\n            return [];\n        }\n        if (code >= 0xfe00 && code <= 0xfe0f) {\n            return [];\n        }\n        // Substitute Table B.2 (Case Folding)\n        var codesTableB2 = _nameprepTableB2(code);\n        if (codesTableB2) {\n            return codesTableB2;\n        }\n        // No Substitution\n        return [code];\n    }));\n    // Normalize using form KC\n    codes = (0, utf8_1.toUtf8CodePoints)((0, utf8_1._toUtf8String)(codes), utf8_1.UnicodeNormalizationForm.NFKC);\n    // Prohibit Tables C.1.2, C.2.2, C.3, C.4, C.5, C.6, C.7, C.8, C.9\n    codes.forEach(function (code) {\n        if (_nameprepTableC(code)) {\n            throw new Error(\"STRINGPREP_CONTAINS_PROHIBITED\");\n        }\n    });\n    // Prohibit Unassigned Code Points (Table A.1)\n    codes.forEach(function (code) {\n        if (_nameprepTableA1(code)) {\n            throw new Error(\"STRINGPREP_CONTAINS_UNASSIGNED\");\n        }\n    });\n    // IDNA extras\n    var name = (0, utf8_1._toUtf8String)(codes);\n    // IDNA: 4.2.3.1\n    if (name.substring(0, 1) === \"-\" || name.substring(2, 4) === \"--\" || name.substring(name.length - 1) === \"-\") {\n        throw new Error(\"invalid hyphen\");\n    }\n    return name;\n}\nexports.nameprep = nameprep;\n//# sourceMappingURL=idna.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.nameprep = exports.parseBytes32String = exports.formatBytes32String = exports.UnicodeNormalizationForm = exports.Utf8ErrorReason = exports.Utf8ErrorFuncs = exports.toUtf8String = exports.toUtf8CodePoints = exports.toUtf8Bytes = exports._toEscapedUtf8String = void 0;\nvar bytes32_1 = require(\"./bytes32\");\nObject.defineProperty(exports, \"formatBytes32String\", { enumerable: true, get: function () { return bytes32_1.formatBytes32String; } });\nObject.defineProperty(exports, \"parseBytes32String\", { enumerable: true, get: function () { return bytes32_1.parseBytes32String; } });\nvar idna_1 = require(\"./idna\");\nObject.defineProperty(exports, \"nameprep\", { enumerable: true, get: function () { return idna_1.nameprep; } });\nvar utf8_1 = require(\"./utf8\");\nObject.defineProperty(exports, \"_toEscapedUtf8String\", { enumerable: true, get: function () { return utf8_1._toEscapedUtf8String; } });\nObject.defineProperty(exports, \"toUtf8Bytes\", { enumerable: true, get: function () { return utf8_1.toUtf8Bytes; } });\nObject.defineProperty(exports, \"toUtf8CodePoints\", { enumerable: true, get: function () { return utf8_1.toUtf8CodePoints; } });\nObject.defineProperty(exports, \"toUtf8String\", { enumerable: true, get: function () { return utf8_1.toUtf8String; } });\nObject.defineProperty(exports, \"UnicodeNormalizationForm\", { enumerable: true, get: function () { return utf8_1.UnicodeNormalizationForm; } });\nObject.defineProperty(exports, \"Utf8ErrorFuncs\", { enumerable: true, get: function () { return utf8_1.Utf8ErrorFuncs; } });\nObject.defineProperty(exports, \"Utf8ErrorReason\", { enumerable: true, get: function () { return utf8_1.Utf8ErrorReason; } });\n//# sourceMappingURL=index.js.map","import { getAddress } from '@ethersproject/address';\nimport { concat, hexZeroPad } from '@ethersproject/bytes';\nimport { keccak256 } from '@ethersproject/keccak256';\nimport { toUtf8Bytes } from '@ethersproject/strings';\nexport function computeZksyncCreate2Address(sender, bytecodeHash, salt, input = '0x') {\n    const prefix = keccak256(toUtf8Bytes('zksyncCreate2'));\n    const inputHash = keccak256(input);\n    const addressBytes = keccak256(concat([prefix, hexZeroPad(sender, 32), salt, bytecodeHash, inputHash])).slice(26);\n    return getAddress(addressBytes);\n}\n//# sourceMappingURL=computeZksyncCreate2Address.js.map","import invariant from 'tiny-invariant';\n// given an array of items sorted by `comparator`, insert an item into its sort index and constrain the size to\n// `maxSize` by removing the last item\nexport function sortedInsert(items, add, maxSize, comparator) {\n    invariant(maxSize > 0, 'MAX_SIZE_ZERO');\n    // this is an invariant because the interface cannot return multiple removed items if items.length exceeds maxSize\n    invariant(items.length <= maxSize, 'ITEMS_SIZE');\n    // short circuit first item add\n    if (items.length === 0) {\n        items.push(add);\n        return null;\n    }\n    else {\n        const isFull = items.length === maxSize;\n        // short circuit if full and the additional item does not come before the last item\n        if (isFull && comparator(items[items.length - 1], add) <= 0) {\n            return add;\n        }\n        let lo = 0, hi = items.length;\n        while (lo < hi) {\n            const mid = (lo + hi) >>> 1;\n            if (comparator(items[mid], add) <= 0) {\n                lo = mid + 1;\n            }\n            else {\n                hi = mid;\n            }\n        }\n        items.splice(lo, 0, add);\n        return isFull ? items.pop() : null;\n    }\n}\n//# sourceMappingURL=sortedInsert.js.map","import JSBI from 'jsbi';\nimport invariant from 'tiny-invariant';\nexport const MAX_SAFE_INTEGER = JSBI.BigInt(Number.MAX_SAFE_INTEGER);\nconst ZERO = JSBI.BigInt(0);\nconst ONE = JSBI.BigInt(1);\nconst TWO = JSBI.BigInt(2);\n/**\n * Computes floor(sqrt(value))\n * @param value the value for which to compute the square root, rounded down\n */\nexport function sqrt(value) {\n    invariant(JSBI.greaterThanOrEqual(value, ZERO), 'NEGATIVE');\n    // rely on built in sqrt if possible\n    if (JSBI.lessThan(value, MAX_SAFE_INTEGER)) {\n        return JSBI.BigInt(Math.floor(Math.sqrt(JSBI.toNumber(value))));\n    }\n    let z;\n    let x;\n    z = value;\n    x = JSBI.add(JSBI.divide(value, TWO), ONE);\n    while (JSBI.lessThan(x, z)) {\n        z = x;\n        x = JSBI.divide(JSBI.add(JSBI.divide(value, x), x), TWO);\n    }\n    return z;\n}\n//# sourceMappingURL=sqrt.js.map"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47],"mappings":"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GACJ,IAAI,KAAK,EAAE,KAAK;GAChB,IAAI,MAAM,KAAK;GACf,IAAI,MAAM,OAAO;GACjB,IAAI,KAAK,EAAE,KAAK;GAChB,IAAI,MAAM,KAAK;GACf,IAAI,MAAM,OAAO;GACjB,IAAI,KAAK,EAAE,KAAK;GAChB,IAAI,MAAM,KAAK;GACf,IAAI,MAAM,OAAO;GACjB,IAAI,KAAK,EAAE,KAAK;GAChB,IAAI,MAAM,KAAK;GACf,IAAI,MAAM,OAAO;GACjB,IAAI,KAAK,EAAE,KAAK;GAChB,IAAI,MAAM,KAAK;GACf,IAAI,MAAM,OAAO;GACjB,IAAI,KAAK,EAAE,KAAK;GAChB,IAAI,MAAM,KAAK;GACf,IAAI,MAAM,OAAO;GACjB,IAAI,KAAK,EAAE,KAAK;GAChB,IAAI,MAAM,KAAK;GACf,IAAI,MAAM,OAAO;GACjB,IAAI,KAAK,EAAE,KAAK;GAChB,IAAI,MAAM,KAAK;GACf,IAAI,MAAM,OAAO;GACjB,IAAI,KAAK,EAAE,KAAK;GAChB,IAAI,MAAM,KAAK;GACf,IAAI,MAAM,OAAO;GACjB,IAAI,KAAK,EAAE,KAAK;GAChB,IAAI,MAAM,KAAK;GACf,IAAI,MAAM,OAAO;GACjB,IAAI,KAAK,EAAE,KAAK;GAChB,IAAI,MAAM,KAAK;GACf,IAAI,MAAM,OAAO;GACjB,IAAI,KAAK,EAAE,KAAK;GAChB,IAAI,MAAM,KAAK;GACf,IAAI,MAAM,OAAO;GACjB,IAAI,KAAK,EAAE,KAAK;GAChB,IAAI,MAAM,KAAK;GACf,IAAI,MAAM,OAAO;GACjB,IAAI,KAAK,EAAE,KAAK;GAChB,IAAI,MAAM,KAAK;GACf,IAAI,MAAM,OAAO;GACjB,IAAI,KAAK,EAAE,KAAK;GAChB,IAAI,MAAM,KAAK;GACf,IAAI,MAAM,OAAO;GACjB,IAAI,KAAK,EAAE,KAAK;GAChB,IAAI,MAAM,KAAK;GACf,IAAI,MAAM,OAAO;GACjB,IAAI,KAAK,EAAE,KAAK;GAChB,IAAI,MAAM,KAAK;GACf,IAAI,MAAM,OAAO;GACjB,IAAI,KAAK,EAAE,KAAK;GAChB,IAAI,MAAM,KAAK;GACf,IAAI,MAAM,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KAAK,KAAK,KAAK,IAAI,GAAI;AACpC,QAAM,KAAK,KAAK,KAAK,KAAK,IAAI,GAAI;AAClC,QAAM,KAAK,KAAK,KAAK,KAAK,IAAI,GAAI;AAClC,SAAO,MAAM,KAAK,KAAK,KAAK,IAAI,GAAI;AACpC,SAAO,MAAM,KAAK,KAAK,KAAK,IAAI,GAAI;AACpC,QAAM,KAAK,KAAK,KAAK,KAAK,IAAI,GAAI;AAClC,QAAM,KAAK,KAAK,KAAK,KAAK,IAAI,GAAI;AAClC,SAAO,MAAM,KAAK,KAAK,KAAK,IAAI,GAAI;AACpC,SAAO,MAAM,KAAK,KAAK,KAAK,IAAI,GAAI;AACpC,QAAM,KAAK,KAAK,KAAK,KAAK,IAAI,GAAI;AAClC,QAAM,KAAK,KAAK,KAAK,KAAK,IAAI,GAAI;AAClC,SAAO,MAAM,KAAK,KAAK,KAAK,IAAI,GAAI;AACpC,SAAO,MAAM,KAAK,KAAK,KAAK,IAAI,GAAI;AACpC,QAAM,KAAK,KAAK,KAAK,KAAK,IAAI,GAAI;AAClC,QAAM,KAAK,KAAK,KAAK,KAAK,IAAI,GAAI;AAClC,SAAO,MAAM,KAAK,KAAK,KAAK,IAAI,GAAI;AACpC,SAAO,MAAM,KAAK,KAAK,KAAK,IAAI,GAAI;AACpC,QAAM,KAAK,KAAK,KAAK,KAAK,IAAI,GAAI;AAClC,QAAM,KAAK,KAAK,KAAK,KAAK,IAAI,GAAI;AAClC,SAAO,MAAM,KAAK,KAAK,KAAK,IAAI,GAAI;AACpC,SAAO,MAAM,KAAK,KAAK,KAAK,IAAI,GAAI;AACpC,QAAM,KAAK,KAAK,KAAK,KAAK,IAAI,GAAI;AAClC,QAAM,KAAK,KAAK,KAAK,KAAK,IAAI,GAAI;AAClC,SAAO,MAAM,KAAK,KAAK,KAAK,IAAI,GAAI;AACpC,SAAO,MAAM,KAAK,KAAK,KAAK,IAAI,GAAI;AACpC,QAAM,KAAK,KAAK,KAAK,KAAK,IAAI,GAAI;AAClC,QAAM,KAAK,KAAK,KAAK,KAAK,IAAI,GAAI;AAClC,SAAO,MAAM,KAAK,KAAK,KAAK,IAAI,GAAI;AACpC,SAAO,MAAM,KAAK,KAAK,KAAK,IAAI,GAAI;AACpC,QAAM,KAAK,KAAK,KAAK,K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"}