UNPKG

@dolomite-exchange/dolomite-margin

Version:

Ethereum Smart Contracts and TypeScript library used for the DolomiteMargin trading protocol

595 lines 562 kB
{ "contractName": "TestAutoTrader", "abi": [ { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "input", "type": "uint256" } ], "name": "DataDeleted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "input", "type": "uint256" }, { "components": [ { "internalType": "bool", "name": "sign", "type": "bool" }, { "internalType": "enum Types.AssetDenomination", "name": "denomination", "type": "uint8" }, { "internalType": "enum Types.AssetReference", "name": "ref", "type": "uint8" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "indexed": false, "internalType": "struct Types.AssetAmount", "name": "output", "type": "tuple" } ], "name": "DataSet", "type": "event" }, { "constant": true, "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "data", "outputs": [ { "internalType": "bool", "name": "sign", "type": "bool" }, { "internalType": "enum Types.AssetDenomination", "name": "denomination", "type": "uint8" }, { "internalType": "enum Types.AssetReference", "name": "ref", "type": "uint8" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "requireInputMarketId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "requireInputWei", "outputs": [ { "internalType": "bool", "name": "sign", "type": "bool" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "requireMakerAccount", "outputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "number", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "requireNewInputPar", "outputs": [ { "internalType": "bool", "name": "sign", "type": "bool" }, { "internalType": "uint128", "name": "value", "type": "uint128" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "requireOldInputPar", "outputs": [ { "internalType": "bool", "name": "sign", "type": "bool" }, { "internalType": "uint128", "name": "value", "type": "uint128" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "requireOutputMarketId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "requireTakerAccount", "outputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "number", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "valid", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "uint256", "name": "input", "type": "uint256" }, { "components": [ { "internalType": "bool", "name": "sign", "type": "bool" }, { "internalType": "enum Types.AssetDenomination", "name": "denomination", "type": "uint8" }, { "internalType": "enum Types.AssetReference", "name": "ref", "type": "uint8" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "internalType": "struct Types.AssetAmount", "name": "output", "type": "tuple" } ], "name": "setData", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "uint256", "name": "inputMarketId", "type": "uint256" } ], "name": "setRequireInputMarketId", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "uint256", "name": "outputMarketId", "type": "uint256" } ], "name": "setRequireOutputMarketId", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "components": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "number", "type": "uint256" } ], "internalType": "struct Account.Info", "name": "account", "type": "tuple" } ], "name": "setRequireMakerAccount", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "components": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "number", "type": "uint256" } ], "internalType": "struct Account.Info", "name": "account", "type": "tuple" } ], "name": "setRequireTakerAccount", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "components": [ { "internalType": "bool", "name": "sign", "type": "bool" }, { "internalType": "uint128", "name": "value", "type": "uint128" } ], "internalType": "struct Types.Par", "name": "oldInputPar", "type": "tuple" } ], "name": "setRequireOldInputPar", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "components": [ { "internalType": "bool", "name": "sign", "type": "bool" }, { "internalType": "uint128", "name": "value", "type": "uint128" } ], "internalType": "struct Types.Par", "name": "newInputPar", "type": "tuple" } ], "name": "setRequireNewInputPar", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "components": [ { "internalType": "bool", "name": "sign", "type": "bool" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "internalType": "struct Types.Wei", "name": "inputWei", "type": "tuple" } ], "name": "setRequireInputWei", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "uint256", "name": "inputMarketId", "type": "uint256" }, { "internalType": "uint256", "name": "outputMarketId", "type": "uint256" }, { "components": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "number", "type": "uint256" } ], "internalType": "struct Account.Info", "name": "makerAccount", "type": "tuple" }, { "components": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "number", "type": "uint256" } ], "internalType": "struct Account.Info", "name": "takerAccount", "type": "tuple" }, { "components": [ { "internalType": "bool", "name": "sign", "type": "bool" }, { "internalType": "uint128", "name": "value", "type": "uint128" } ], "internalType": "struct Types.Par", "name": "oldInputPar", "type": "tuple" }, { "components": [ { "internalType": "bool", "name": "sign", "type": "bool" }, { "internalType": "uint128", "name": "value", "type": "uint128" } ], "internalType": "struct Types.Par", "name": "newInputPar", "type": "tuple" }, { "components": [ { "internalType": "bool", "name": "sign", "type": "bool" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "internalType": "struct Types.Wei", "name": "inputWei", "type": "tuple" }, { "internalType": "bytes", "name": "tradeData", "type": "bytes" } ], "name": "getTradeCost", "outputs": [ { "components": [ { "internalType": "bool", "name": "sign", "type": "bool" }, { "internalType": "enum Types.AssetDenomination", "name": "denomination", "type": "uint8" }, { "internalType": "enum Types.AssetReference", "name": "ref", "type": "uint8" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "internalType": "struct Types.AssetAmount", "name": "", "type": "tuple" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" } ], "metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"input\",\"type\":\"uint256\"}],\"name\":\"DataDeleted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"input\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"enum Types.AssetDenomination\",\"name\":\"denomination\",\"type\":\"uint8\"},{\"internalType\":\"enum Types.AssetReference\",\"name\":\"ref\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct Types.AssetAmount\",\"name\":\"output\",\"type\":\"tuple\"}],\"name\":\"DataSet\",\"type\":\"event\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"data\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"enum Types.AssetDenomination\",\"name\":\"denomination\",\"type\":\"uint8\"},{\"internalType\":\"enum Types.AssetReference\",\"name\":\"ref\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"inputMarketId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"outputMarketId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"internalType\":\"struct Account.Info\",\"name\":\"makerAccount\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"internalType\":\"struct Account.Info\",\"name\":\"takerAccount\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct Types.Par\",\"name\":\"oldInputPar\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct Types.Par\",\"name\":\"newInputPar\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.Wei\",\"name\":\"inputWei\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"tradeData\",\"type\":\"bytes\"}],\"name\":\"getTradeCost\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"enum Types.AssetDenomination\",\"name\":\"denomination\",\"type\":\"uint8\"},{\"internalType\":\"enum Types.AssetReference\",\"name\":\"ref\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.AssetAmount\",\"name\":\"\",\"type\":\"tuple\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"requireInputMarketId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"requireInputWei\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"requireMakerAccount\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"requireNewInputPar\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"requireOldInputPar\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"requireOutputMarketId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"requireTakerAccount\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"input\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"enum Types.AssetDenomination\",\"name\":\"denomination\",\"type\":\"uint8\"},{\"internalType\":\"enum Types.AssetReference\",\"name\":\"ref\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.AssetAmount\",\"name\":\"output\",\"type\":\"tuple\"}],\"name\":\"setData\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"inputMarketId\",\"type\":\"uint256\"}],\"name\":\"setRequireInputMarketId\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.Wei\",\"name\":\"inputWei\",\"type\":\"tuple\"}],\"name\":\"setRequireInputWei\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"internalType\":\"struct Account.Info\",\"name\":\"account\",\"type\":\"tuple\"}],\"name\":\"setRequireMakerAccount\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct Types.Par\",\"name\":\"newInputPar\",\"type\":\"tuple\"}],\"name\":\"setRequireNewInputPar\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct Types.Par\",\"name\":\"oldInputPar\",\"type\":\"tuple\"}],\"name\":\"setRequireOldInputPar\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"outputMarketId\",\"type\":\"uint256\"}],\"name\":\"setRequireOutputMarketId\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"internalType\":\"struct Account.Info\",\"name\":\"account\",\"type\":\"tuple\"}],\"name\":\"setRequireTakerAccount\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"valid\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"dYdX * IAutoTrader for testing\",\"methods\":{},\"title\":\"TestAutoTrader\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/home/cdc218/projects/dolomite-protocol-v2/contracts/testing/TestAutoTrader.sol\":\"TestAutoTrader\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[]},\"sources\":{\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/interfaces/IAutoTrader.sol\":{\"keccak256\":\"0x123b5d92696b180c60a838d3117a9fd571851911f37c78212969015e169e14fc\",\"urls\":[\"bzz-raw://cd5d9aeb5b4e3de18ac8a51a3b2320f3e7a247b959defa9c289ee6aaf2bfc348\",\"dweb:/ipfs/QmPdjeya5BDYHEUMuz6jiwZrKJa8p2uN1vumLAJ7nhG5cN\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Account.sol\":{\"keccak256\":\"0x2059276ea5e478bd5ac7f2712e7b1b6c85d291c647a54b264909044844828e67\",\"urls\":[\"bzz-raw://f153777051d12131b13a57e5c3af10a2670927cfc7d22c9519ab20c9b4b9bc89\",\"dweb:/ipfs/QmQMP3qS5xDAVGYKDfNkbkSqBKozQGQsGqX4e8VyjRtxPS\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Actions.sol\":{\"keccak256\":\"0x7b2fcf441c034952dd042b6c8b20b148359db771e7c9ac07d06369560a9f0301\",\"urls\":[\"bzz-raw://84665ee4a780360fe6160d197ba98f0bf0ab0d7c6ad87bfed6226bf2f88d8d30\",\"dweb:/ipfs/QmRDfRdAd8hSXeu4SAeeYKkKoXBhStu7n4uReYBce2JD5Z\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/DolomiteMarginMath.sol\":{\"keccak256\":\"0x53f205f6a779d579be29faa9412c806a892b3e605fff092dfd9d14d936fa019f\",\"urls\":[\"bzz-raw://0ff936f89602a63b8e6a4eb4ce8f87673c0f45b7ce29694920905a3f0b5a6a69\",\"dweb:/ipfs/QmbYME9BeEvPC1ndV8EaUDX5fDMghLc3rocNUxFtgHmg8m\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/EnumerableSet.sol\":{\"keccak256\":\"0x41a3460e34b7b8635d936e35e6568ceb5354b638f53b884530e0d4875fa0f151\",\"urls\":[\"bzz-raw://d1a5ba866ee95d455afe5075dadd91fc71c2806371f2c1b358a1f67c632bb0df\",\"dweb:/ipfs/QmW4qCjmsG8J3UJv97GwDLDM7wt1K4yLDKAwzWMY7TFYi5\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Require.sol\":{\"keccak256\":\"0x05a2a90b41b6a5f42f0a72da63d015fb0b406a9ba2172823352e522e8bf3a606\",\"urls\":[\"bzz-raw://19883f0c6d33266f756ec5c3d17539524aa24b993c46c33f8400801d09373a6c\",\"dweb:/ipfs/QmYX2fwK3vQQDSZLMrc5wMfeb8RWrcC9CGX8XECLty8QDk\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Time.sol\":{\"keccak256\":\"0x87ee8d3c1d6e315a116426d8c8fc6f083e220fd14dda27fad4e8d7cab3dc7305\",\"urls\":[\"bzz-raw://7c20f2c52da682c3b5917fb6a19e81f43699b1d13c62b569ed723f34da72e766\",\"dweb:/ipfs/QmbXWYXi67nHBVNDKYUpo2E9ZaEVcHLvmXQkpYLMm1d5Vm\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Types.sol\":{\"keccak256\":\"0xe1bab8c8799d83e86c7a49aaf815d8e3bc8d09562d46d44d921500db5e98de0e\",\"urls\":[\"bzz-raw://8ea3d0cc4fdab6dd9bba545a792170f939b342d8d1a7051c1c6365009af72658\",\"dweb:/ipfs/QmaLJgbavu88eEit6JPqfWnw6NmGBDZfveMXxumgWywBFG\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/testing/TestAutoTrader.sol\":{\"keccak256\":\"0xadf704ac0a98da89129bab32dee6373d981f555176e159fb3035e8214d1f2ac1\",\"urls\":[\"bzz-raw://1b2eb583cc3d6ce7707a404fcc7186366204cd44b092181a9c0330140046b2ca\",\"dweb:/ipfs/QmXk9zgmpYDeVfjPR7wQkXkeaD7c21ESUmEaHbpkjas9a7\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x640b6dee7a4b830bdfd52b5031a07fc2b12209f5b2e29e5d364a7d37f69d8076\",\"urls\":[\"bzz-raw://31113152e1ddb78fe7a4197f247591ca894e93f916867beb708d8e747b6cc74f\",\"dweb:/ipfs/QmbZaJyXdpsYGykVhHH9qpVGQg9DGCxE2QufbCUy3daTgq\"]}},\"version\":1}", "bytecode": "0x608060405234801561001057600080fd5b506115cb806100206000396000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c8063bf8712c5116100b2578063e73af6fa11610081578063ef28faa911610066578063ef28faa914610270578063f0ba844014610285578063f4d193de146102a857610136565b8063e73af6fa14610255578063e81cb6051461025d57610136565b8063bf8712c514610207578063cd59f0c314610227578063d60463bb1461023a578063df9812671461024d57610136565b806348cedc55116101095780636b9d21e5116100ee5780636b9d21e5146101cb5780636ff94664146101de5780639ccf7320146101f457610136565b806348cedc55146101a55780636645da41146101b857610136565b80630b8bbc2d1461013b5780630e147b011461015a5780633858db2c14610170578063448f706514610185575b600080fd5b6101436102b0565b604051610151929190611394565b60405180910390f35b6101626102d2565b6040516101519291906113af565b61018361017e3660046110bf565b6102e1565b005b610198610193366004611117565b6102e6565b60405161015191906113ce565b6101836101b3366004611083565b610800565b6101836101c6366004611083565b61085c565b6101836101d93660046110bf565b6108b8565b6101e66108bd565b60405161015192919061132f565b6101836102023660046110dd565b6108df565b61021a6102153660046110bf565b6108ed565b6040516101519190611351565b61018361023536600461105d565b610902565b61018361024836600461105d565b610951565b6101e66109a0565b6101436109c2565b61018361026b3660046110a1565b6109e4565b610278610a00565b60405161015191906113dc565b6102986102933660046110bf565b610a06565b604051610151949392919061135f565b610278610a38565b60085460ff81169061010090046fffffffffffffffffffffffffffffffff1682565b600a54600b5460ff9091169082565b600355565b6102ee610e88565b600254156103455761034589600254147f546573744175746f5472616465720000000000000000000000000000000000007f696e707574206d61726b6574206d69736d617463680000000000000000000000610a3e565b6003541561039c5761039c88600354147f546573744175746f5472616465720000000000000000000000000000000000007f6f7574707574206d61726b6574206d69736d6174636800000000000000000000610a3e565b60045473ffffffffffffffffffffffffffffffffffffffff16156104795786516004546104259173ffffffffffffffffffffffffffffffffffffffff9182169116147f546573744175746f5472616465720000000000000000000000000000000000007f6d616b6572206163636f756e74206f776e6572206d69736d6174636800000000610a3e565b602087015160055461047991147f546573744175746f5472616465720000000000000000000000000000000000007f6d616b6572206163636f756e74206e756d626572206d69736d61746368000000610a3e565b60065473ffffffffffffffffffffffffffffffffffffffff16156105565785516006546105029173ffffffffffffffffffffffffffffffffffffffff9182169116147f546573744175746f5472616465720000000000000000000000000000000000007f74616b6572206163636f756e74206f776e6572206d69736d6174636800000000610a3e565b602086015160075461055691147f546573744175746f5472616465720000000000000000000000000000000000007f74616b6572206163636f756e74206e756d626572206d69736d61746368000000610a3e565b60085461010090046fffffffffffffffffffffffffffffffff161561063e5784516008546105cf91151560ff9091161515147f546573744175746f5472616465720000000000000000000000000000000000007f6f6c64496e707574506172207369676e206d69736d6174636800000000000000610a3e565b602085015160085461063e916fffffffffffffffffffffffffffffffff90811661010090920416147f546573744175746f5472616465720000000000000000000000000000000000007f6f6c64496e7075745061722076616c7565206d69736d61746368000000000000610a3e565b60095461010090046fffffffffffffffffffffffffffffffff16156107265783516009546106b791151560ff9091161515147f546573744175746f5472616465720000000000000000000000000000000000007f6e6577496e707574506172207369676e206d69736d6174636800000000000000610a3e565b6020840151600954610726916fffffffffffffffffffffffffffffffff90811661010090920416147f546573744175746f5472616465720000000000000000000000000000000000007f6e6577496e7075745061722076616c7565206d69736d61746368000000000000610a3e565b600b54156107dc578251600a5461078891151560ff9091161515147f546573744175746f5472616465720000000000000000000000000000000000007f696e707574576569207369676e206d69736d6174636800000000000000000000610a3e565b6020830151600b546107dc91147f546573744175746f5472616465720000000000000000000000000000000000007f696e7075745765692076616c7565206d69736d61746368000000000000000000610a3e565b60006107e783610af4565b90506107f281610b51565b9a9950505050505050505050565b8051600880546020909301516fffffffffffffffffffffffffffffffff16610100027fffffffffffffffffffffffffffffff00000000000000000000000000000000ff92151560ff199094169390931791909116919091179055565b8051600980546020909301516fffffffffffffffffffffffffffffffff16610100027fffffffffffffffffffffffffffffff00000000000000000000000000000000ff92151560ff199094169390931791909116919091179055565b600255565b60045460055473ffffffffffffffffffffffffffffffffffffffff9091169082565b6108e98282610cb3565b5050565b60016020526000908152604090205460ff1681565b8051600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691909117905560200151600755565b8051600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691909117905560200151600555565b60065460075473ffffffffffffffffffffffffffffffffffffffff9091169082565b60095460ff81169061010090046fffffffffffffffffffffffffffffffff1682565b8051600a805460ff191691151591909117905560200151600b55565b60025481565b6000602081905290815260409020805460019091015460ff808316926101008104821692620100009091049091169084565b60035481565b82610aef57610a4c82610db4565b7f3a20000000000000000000000000000000000000000000000000000000000000610a7683610db4565b604051602001610a88939291906112fe565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252610ae6916004016113bd565b60405180910390fd5b505050565b6000610b4582516020147f546573744175746f5472616465720000000000000000000000000000000000007f43616c6c206461746120696e76616c6964206c656e6774680000000000000000610a3e565b5060208101515b919050565b610b59610e88565b600082815260016020526040902054610bb69060ff167f546573744175746f5472616465720000000000000000000000000000000000007f547261646520646f6573206e6f74206578697374000000000000000000000000610a3e565b610bbe610e88565b60008381526020818152604091829020825160808101909352805460ff808216151585529192840191610100909104166001811115610bf957fe5b6001811115610c0457fe5b8152815460209091019062010000900460ff166001811115610c2257fe5b6001811115610c2d57fe5b81526001918201546020918201526000868152808252604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000168155840182905592909152818120805460ff19169055905191925084917fc08afd407b9302167fb675f0504288e953f9807568a5e2b502d47ea8bc6dcbed9190a292915050565b6000828152602081815260409091208251815460ff19169015151780825591830151839282907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100836001811115610d0a57fe5b02179055506040820151815482907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff1662010000836001811115610d4a57fe5b02179055506060919091015160019182015560008381526020829052604090819020805460ff19169092179091555182907ff5a75b9133c4ad3380c8fb241cbd49cbc06a972af65c00521cb656776e8eab0f90610da89084906113ce565b60405180910390a25050565b60608082604051602001610dc891906112e9565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060205b8015610e715781517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90910190829082908110610e3457fe5b01602001517fff000000000000000000000000000000000000000000000000000000000000001615610e6c5760010181529050610b4c565b610dfb565b505060408051600081526020810190915292915050565b604080516080810190915260008082526020820190815260200160008152602001600081525090565b8035610ebc8161154c565b92915050565b8035610ebc81611560565b600082601f830112610ede57600080fd5b8135610ef1610eec82611411565b6113ea565b91508082526020830160208301858383011115610f0d57600080fd5b610f188382846114df565b50505092915050565b8035610ebc81611569565b600060808284031215610f3e57600080fd5b610f4860806113ea565b90506000610f568484610ec2565b8252506020610f6784848301610f21565b6020830152506040610f7b84828501610f21565b6040830152506060610f8f84828501611052565b60608301525092915050565b600060408284031215610fad57600080fd5b610fb760406113ea565b90506000610fc58484610eb1565b8252506020610fd684848301611052565b60208301525092915050565b600060408284031215610ff457600080fd5b610ffe60406113ea565b9050600061100c8484610ec2565b8252506020610fd684848301611047565b60006040828403121561102f57600080fd5b61103960406113ea565b90506000610fc58484610ec2565b8035610ebc81611576565b8035610ebc8161157f565b60006040828403121561106f57600080fd5b600061107b8484610f9b565b949350505050565b60006040828403121561109557600080fd5b600061107b8484610fe2565b6000604082840312156110b357600080fd5b600061107b848461101d565b6000602082840312156110d157600080fd5b600061107b8484611052565b60008060a083850312156110f057600080fd5b60006110fc8585611052565b925050602061110d85828601610f2c565b9150509250929050565b6000806000806000806000806101a0898b03121561113457600080fd5b60006111408b8b611052565b98505060206111518b828c01611052565b97505060406111628b828c01610f9b565b96505060806111738b828c01610f9b565b95505060c06111848b828c01610fe2565b9450506101006111968b828c01610fe2565b9350506101406111a88b828c0161101d565b92505061018089013567ffffffffffffffff8111156111c657600080fd5b6111d28b828c01610ecd565b9150509295985092959890939650565b6111eb81611464565b82525050565b6111eb8161146f565b6111eb61120682611474565b611499565b6111eb61120682611499565b600061122282611457565b61122c8185610b4c565b935061123c8185602086016114eb565b9290920192915050565b6111eb816114d4565b600061125a82611457565b611264818561145b565b93506112748185602086016114eb565b61127d81611517565b9093019392505050565b8051608083019061129884826111f1565b5060208201516112ab6020850182611246565b5060408201516112be6040850182611246565b5060608201516112d160608501826112e0565b50505050565b6111eb816114a6565b6111eb81611499565b60006112f5828461120b565b50602001919050565b600061130a8286611217565b915061131682856111fa565b6002820191506113268284611217565b95945050505050565b6040810161133d82856111e2565b61134a60208301846112e0565b9392505050565b60208101610ebc82846111f1565b6080810161136d82876111f1565b61137a6020830186611246565b6113876040830185611246565b61132660608301846112e0565b604081016113a282856111f1565b61134a60208301846112d7565b6040810161133d82856111f1565b6020808252810161134a818461124f565b60808101610ebc8284611287565b60208101610ebc82846112e0565b60405181810167ffffffffffffffff8111828210171561140957600080fd5b604052919050565b600067ffffffffffffffff82111561142857600080fd5b506020601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160190565b5190565b90815260200190565b6000610ebc826114bb565b151590565b7fffff0000000000000000000000000000000000000000000000000000000000001690565b90565b80610b4c8161153f565b6fffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b6000610ebc8261149c565b82818337506000910152565b60005b838110156115065781810151838201526020016114ee565b838111156112d15750506000910152565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690565b6002811061154957fe5b50565b61155581611464565b811461154957600080fd5b6115558161146f565b6002811061154957600080fd5b611555816114a6565b6115558161149956fea365627a7a723158207e3f528cf437032a6c5658045e124a3b644c13b56b309608d0d09df1097852876c6578706572696d656e74616cf564736f6c63430005100040", "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101365760003560e01c8063bf8712c5116100b2578063e73af6fa11610081578063ef28faa911610066578063ef28faa914610270578063f0ba844014610285578063f4d193de146102a857610136565b8063e73af6fa14610255578063e81cb6051461025d57610136565b8063bf8712c514610207578063cd59f0c314610227578063d60463bb1461023a578063df9812671461024d57610136565b806348cedc55116101095780636b9d21e5116100ee5780636b9d21e5146101cb5780636ff94664146101de5780639ccf7320146101f457610136565b806348cedc55146101a55780636645da41146101b857610136565b80630b8bbc2d1461013b5780630e147b011461015a5780633858db2c14610170578063448f706514610185575b600080fd5b6101436102b0565b604051610151929190611394565b60405180910390f35b6101626102d2565b6040516101519291906113af565b61018361017e3660046110bf565b6102e1565b005b610198610193366004611117565b6102e6565b60405161015191906113ce565b6101836101b3366004611083565b610800565b6101836101c6366004611083565b61085c565b6101836101d93660046110bf565b6108b8565b6101e66108bd565b60405161015192919061132f565b6101836102023660046110dd565b6108df565b61021a6102153660046110bf565b6108ed565b6040516101519190611351565b61018361023536600461105d565b610902565b61018361024836600461105d565b610951565b6101e66109a0565b6101436109c2565b61018361026b3660046110a1565b6109e4565b610278610a00565b60405161015191906113dc565b6102986102933660046110bf565b610a06565b604051610151949392919061135f565b610278610a38565b60085460ff81169061010090046fffffffffffffffffffffffffffffffff1682565b600a54600b5460ff9091169082565b600355565b6102ee610e88565b600254156103455761034589600254147f546573744175746f5472616465720000000000000000000000000000000000007f696e707574206d61726b6574206d69736d617463680000000000000000000000610a3e565b6003541561039c5761039c88600354147f546573744175746f5472616465720000000000000000000000000000000000007f6f7574707574206d61726b6574206d69736d6174636800000000000000000000610a3e565b60045473ffffffffffffffffffffffffffffffffffffffff16156104795786516004546104259173ffffffffffffffffffffffffffffffffffffffff9182169116147f546573744175746f5472616465720000000000000000000000000000000000007f6d616b6572206163636f756e74206f776e6572206d69736d6174636800000000610a3e565b602087015160055461047991147f546573744175746f5472616465720000000000000000000000000000000000007f6d616b6572206163636f756e74206e756d626572206d69736d61746368000000610a3e565b60065473ffffffffffffffffffffffffffffffffffffffff16156105565785516006546105029173ffffffffffffffffffffffffffffffffffffffff9182169116147f546573744175746f5472616465720000000000000000000000000000000000007f74616b6572206163636f756e74206f776e6572206d69736d6174636800000000610a3e565b602086015160075461055691147f546573744175746f5472616465720000000000000000000000000000000000007f74616b6572206163636f756e74206e756d626572206d69736d61746368000000610a3e565b60085461010090046fffffffffffffffffffffffffffffffff161561063e5784516008546105cf91151560ff9091161515147f546573744175746f5472616465720000000000000000000000000000000000007f6f6c64496e707574506172207369676e206d69736d6174636800000000000000610a3e565b602085015160085461063e916fffffffffffffffffffffffffffffffff90811661010090920416147f546573744175746f5472616465720000000000000000000000000000000000007f6f6c64496e7075745061722076616c7565206d69736d61746368000000000000610a3e565b60095461010090046fffffffffffffffffffffffffffffffff16156107265783516009546106b791151560ff9091161515147f546573744175746f5472616465720000000000000000000000000000000000007f6e6577496e707574506172207369676e206d69736d6174636800000000000000610a3e565b6020840151600954610726916fffffffffffffffffffffffffffffffff90811661010090920416147f546573744175746f5472616465720000000000000000000000000000000000007f6e6577496e7075745061722076616c7565206d69736d61746368000000000000610a3e565b600b54156107dc578251600a5461078891151560ff9091161515147f546573744175746f5472616465720000000000000000000000000000000000007f696e707574576569207369676e206d69736d6174636800000000000000000000610a3e565b6020830151600b546107dc91147f546573744175746f5472616465720000000000000000000000000000000000007f696e7075745765692076616c7565206d69736d61746368000000000000000000610a3e565b60006107e783610af4565b90506107f281610b51565b9a9950505050505050505050565b8051600880546020909301516fffffffffffffffffffffffffffffffff16610100027fffffffffffffffffffffffffffffff00000000000000000000000000000000ff92151560ff199094169390931791909116919091179055565b8051600980546020909301516fffffffffffffffffffffffffffffffff16610100027fffffffffffffffffffffffffffffff00000000000000000000000000000000ff92151560ff199094169390931791909116919091179055565b600255565b60045460055473ffffffffffffffffffffffffffffffffffffffff9091169082565b6108e98282610cb3565b5050565b60016020526000908152604090205460ff1681565b8051600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691909117905560200151600755565b8051600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691909117905560200151600555565b60065460075473ffffffffffffffffffffffffffffffffffffffff9091169082565b60095460ff81169061010090046fffffffffffffffffffffffffffffffff1682565b8051600a805460ff191691151591909117905560200151600b55565b60025481565b6000602081905290815260409020805460019091015460ff808316926101008104821692620100009091049091169084565b60035481565b82610aef57610a4c82610db4565b7f3a20000000000000000000000000000000000000000000000000000000000000610a7683610db4565b604051602001610a88939291906112fe565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252610ae6916004016113bd565b60405180910390fd5b505050565b6000610b4582516020147f546573744175746f5472616465720000000000000000000000000000000000007f43616c6c206461746120696e76616c6964206c656e6774680000000000000000610a3e565b5060208101515b919050565b610b59610e88565b600082815260016020526040902054610bb69060ff167f546573744175746f5472616465720000000000000000000000000000000000007f547261646520646f6573206e6f74206578697374000000000000000000000000610a3e565b610bbe610e88565b60008381526020818152604091829020825160808101909352805460ff808216151585529192840191610100909104166001811115610bf957fe5b6001811115610c0457fe5b8152815460209091019062010000900460ff166001811115610c2257fe5b6001811115610c2d57fe5b81526001918201546020918201526000868152808252604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000168155840182905592909152818120805460ff19169055905191925084917fc08afd407b9302167fb675f0504288e953f9807568a5e2b502d47ea8bc6dcbed9190a292915050565b6000828152602081815260409091208251815460ff19169015151780825591830151839282907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100836001811115610d0a57fe5b02179055506040820151815482907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff1662010000836001811115610d4a57fe5b02179055506060919091015160019182015560008381526020829052604090819020805460ff19169092179091555182907ff5a75b9133c4ad3380c8fb241cbd49cbc06a972af65c00521cb656776e8eab0f90610da89084906113ce565b60405180910390a25050565b60608082604051602001610dc891906112e9565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060205b8015610e715781517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90910190829082908110610e3457fe5b01602001517fff000000000000000000000000000000000000000000000000000000000000001615610e6c5760010181529050610b4c565b610dfb565b505060408051600081526020810190915292915050565b604080516080810190915260008082526020820190815260200160008152602001600081525090565b8035610ebc8161154c565b92915050565b8035610ebc81611560565b600082601f830112610ede57600080fd5b8135610ef1610eec82611411565b6113ea565b91508082526020830160208301858383011115610f0d57600080fd5b610f188382846114df565b50505092915050565b8035610ebc81611569565b600060808284031215610f3e57600080fd5b610f4860806113ea565b90506000610f568484610ec2565b8252506020610f6784848301610f21565b6020830152506040610f7b84828501610f21565b6040830152506060610f8f84828501611052565b60608301525092915050565b600060408284031215610fad57600080fd5b610fb760406113ea565b90506000610fc58484610eb1565b8252506020610fd684848301611052565b60208301525092915050565b600060408284031215610ff457600080fd5b610ffe60406113ea565b9050600061100c8484610ec2565b8252506020610fd684848301611047565b60006040828403121561102f57600080fd5b61103960406113ea565b90506000610fc58484610ec2565b8035610ebc81611576565b8035610ebc8161157f565b60006040828403121561106f57600080fd5b600061107b8484610f9b565b949350505050565b60006040828403121561109557600080fd5b600061107b8484610fe2565b6000604082840312156110b357600080fd5b600061107b848461101d565b6000602082840312156110d157600080fd5b600061107b8484611052565b60008060a083850312156110f057600080fd5b60006110fc8585611052565b925050602061110d85828601610f2c565b9150509250929050565b6000806000806000806000806101a0898b03121561113457600080fd5b60006111408b8b611052565b98505060206111518b828c01611052565b97505060406111628b828c01610f9b565b96505060806111738b828c01610f9b565b95505060c06111848b828c01610fe2565b9450506101006111968b828c01610fe2565b9350506101406111a88b828c0161101d565b92505061018089013567ffffffffffffffff8111156111c657600080fd5b6111d28b828c01610ecd565b9150509295985092959890939650565b6111eb81611464565b82525050565b6111eb8161146f565b6111eb61120682611474565b611499565b6111eb61120682611499565b600061122282611457565b61122c8185610b4c565b935061123c8185602086016114eb565b9290920192915050565b6111eb816114d4565b600061125a82611457565b611264818561145b565b93506112748185602086016114eb565b61127d81611517565b9093019392505050565b8051608083019061129884826111f1565b5060208201516112ab6020850182611246565b5060408201516112be6040850182611246565b5060608201516112d160608501826112e0565b50505050565b6111eb816114a6565b6111eb81611499565b60006112f5828461120b565b50602001919050565b600061130a8286611217565b915061131682856111fa565b6002820191506113268284611217565b95945050505050565b6040810161133d82856111e2565b61134a60208301846112e0565b9392505050565b60208101610ebc82846111f1565b6080810161136d82876111f1565b61137a6020830186611246565b6113876040830185611246565b61132660608301846112e0565b604081016113a282856111f1565b61134a60208301846112d7565b6040810161133d82856111f1565b6020808252810161134a818461124f565b60808101610ebc8284611287565b60208101610ebc82846112e0565b60405181810167ffffffffffffffff8111828210171561140957600080fd5b604052919050565b600067ffffffffffffffff82111561142857600080fd5b506020601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160190565b5190565b90815260200190565b6000610ebc826114bb565b151590565b7fffff0000000000000000000000000000000000000000000000000000000000001690565b90565b80610b4c8161153f565b6fffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b6000610ebc8261149c565b82818337506000910152565b60005b838110156115065781810151838201526020016114ee565b838111156112d15750506000910152565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690565b6002811061154957fe5b50565b61155581611464565b811461154957600080fd5b6115558161146f565b6002811061154957600080fd5b611555816114a6565b6115558161149956fea365627a7a723158207e3f528cf437032a6c5658045e124a3b644c13b56b309608d0d09df1097852876c6578706572696d656e74616cf564736f6c63430005100040", "sourceMap": "1155:6144:111:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1155:6144:111;;;;;;;", "deployedSourceMap": "1155:6144:111:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1155:6144:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1835:35;;;:::i;:::-;;;;;;;;;;;;;;;;;1917:32;;;:::i;:::-;;;;;;;;;2315:146;;;;;;;;;:::i;:::-;;3249:2908;;;;;;;;;:::i;:::-;;;;;;;;2759:143;;;;;;;;;:::i;2908:::-;;;;;;;;;:::i;2167:142::-;;;;;;;;;:::i;1745:39::-;;;:::i;:::-;;;;;;;;;2008:153;;;;;;;;;:::i;1617:38::-;;;;;;;;;:::i;:::-;;;;;;;;2613:140;;;;;;;;;:::i;2467:::-;;;;;;;;;:::i;1790:39::-;;;:::i;1876:35::-;;;:::i;3057:131::-;;;;;;;;;:::i;1662:35::-;;;:::i;:::-;;;;;;;;1561:50;;;;;;;;;:::i;:::-;;;;;;;;;;;1703:36;;;:::i;1835:35::-;;;;;;;;;;;;;:::o;1917:32::-;;;;;;;;;;;:::o;2315:146::-;2416:21;:38;2315:146::o;3249:2908::-;3599:24;;:::i;:::-;3643:20;;:25;3639:200;;3684:144;3738:13;3714:20;;:37;3769:4;3684:144;:12;:144::i;:::-;3852:21;;:26;3848:204;;3894:147;3949:14;3924:21;;:39;3981:4;3894:147;:12;:147::i;:::-;4065:19;:25;:39;:25;:39;4061:409;;4179:18;;4150:19;:25;4120:161;;4150:47;:25;;;:47;;;4215:4;4120:161;:12;:161::i;:::-;4355:19;;;;4325:26;;4295:164;;4325:49;4392:4;4295:164;:12;:164::i;:::-;4483:19;:25;:39;:25;:39;4479:409;;4597:18;;4568:19;:25;4538:161;;4568:47;:25;;;:47;;;4633:4;4538:161;:12;:161::i;:::-;4773:19;;;;4743:26;;4713:164;;4743:49;4810:4;4713:164;:12;:164::i;:::-;4901:18;:24;;;;;;:29;4897:393;;5003:16;;4976:18;:23;4946:158;;4976:43;;:23;;;;:43;;;5037:4;4946:158;:12;:158::i;:::-;5176:17;;;;5148:18;:24;5118:161;;5148:45;;;;:24;;;;;:45;5211:4;5118:161;:12;:161::i;:::-;5303:18;:24;;;;;;:29;5299:385;;5405:16;;5378:18;:23;5348:154;;5378:4