UNPKG

@bitriel/bitriel-farm

Version:

Yield Farming Smart Contracts for BitrielSwap Protocol

820 lines 78.5 kB
{ "_format": "hh-sol-artifact-1", "contractName": "BitrielFarmer", "sourceName": "contracts/BitrielFarmer.sol", "abi": [ { "inputs": [ { "internalType": "contract IBitrielFactory", "name": "_factory", "type": "address" }, { "internalType": "contract INonfungiblePositionManager", "name": "_nonfungiblePositionManager", "type": "address" }, { "internalType": "contract IBitrielToken", "name": "_bitriel", "type": "address" }, { "internalType": "uint256", "name": "_BTRPerBlock", "type": "uint256" }, { "internalType": "uint256", "name": "_startEmitBTR", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "reward", "type": "uint256" } ], "name": "Claimed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "contract IBitrielPool", "name": "pool", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "allocPoint", "type": "uint256" } ], "name": "FarmCreated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "contract IBitrielPool", "name": "pool", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "oldAllocPoint", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newAllocPoint", "type": "uint256" } ], "name": "FarmUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "owner", "type": "address" } ], "name": "TokenDeposited", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint128", "name": "liquidity", "type": "uint128" } ], "name": "TokenStaked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "TokenWithdrawn", "type": "event" }, { "inputs": [], "name": "BTRPerBlock", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "bitriel", "outputs": [ { "internalType": "contract IBitrielToken", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "bonusMultiplier", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_pool", "type": "address" }, { "internalType": "address", "name": "_to", "type": "address" } ], "name": "claim", "outputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "internalType": "address", "name": "_to", "type": "address" } ], "name": "claimToken", "outputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_pool", "type": "address" }, { "internalType": "uint256", "name": "_allocPoint", "type": "uint256" } ], "name": "createFarm", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "deposits", "outputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "int24", "name": "tickLower", "type": "int24" }, { "internalType": "int24", "name": "tickUpper", "type": "int24" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "factory", "outputs": [ { "internalType": "contract IBitrielFactory", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "farms", "outputs": [ { "internalType": "uint256", "name": "allocPoint", "type": "uint256" }, { "internalType": "uint256", "name": "lastRewardBlock", "type": "uint256" }, { "internalType": "uint256", "name": "accBTRPerLiqX12", "type": "uint256" }, { "internalType": "uint128", "name": "totalLiquidity", "type": "uint128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_from", "type": "uint256" }, { "internalType": "uint256", "name": "_to", "type": "uint256" } ], "name": "getMultiplier", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "pair", "type": "address" }, { "internalType": "uint256", "name": "liquidityToMigrate", "type": "uint256" }, { "internalType": "uint8", "name": "percentageToMigrate", "type": "uint8" }, { "internalType": "address", "name": "token0", "type": "address" }, { "internalType": "address", "name": "token1", "type": "address" }, { "internalType": "uint24", "name": "fee", "type": "uint24" }, { "internalType": "int24", "name": "tickLower", "type": "int24" }, { "internalType": "int24", "name": "tickUpper", "type": "int24" }, { "internalType": "uint256", "name": "amount0Min", "type": "uint256" }, { "internalType": "uint256", "name": "amount1Min", "type": "uint256" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "bool", "name": "refundAsNative", "type": "bool" } ], "internalType": "struct IMigrator.MigrateParams", "name": "params", "type": "tuple" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "migrate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "migrator", "outputs": [ { "internalType": "contract IMigrator", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes[]", "name": "data", "type": "bytes[]" } ], "name": "multicall", "outputs": [ { "internalType": "bytes[]", "name": "results", "type": "bytes[]" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "nonfungiblePositionManager", "outputs": [ { "internalType": "contract INonfungiblePositionManager", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "bytes", "name": "", "type": "bytes" } ], "name": "onERC721Received", "outputs": [ { "internalType": "bytes4", "name": "", "type": "bytes4" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_pool", "type": "address" }, { "internalType": "address", "name": "_user", "type": "address" } ], "name": "reward", "outputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "rewardToken", "outputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_pool", "type": "address" }, { "internalType": "uint256", "name": "_allocPoint", "type": "uint256" } ], "name": "setFarm", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract IMigrator", "name": "_migrator", "type": "address" } ], "name": "setMigrator", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "stake", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "stakes", "outputs": [ { "internalType": "uint160", "name": "lastSecondsPerLiquidityInsideX128", "type": "uint160" }, { "internalType": "uint256", "name": "lastRewardTime", "type": "uint256" }, { "internalType": "uint128", "name": "liquidity", "type": "uint128" }, { "internalType": "uint256", "name": "rewardClaimed", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "startEmitBTR", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalAllocPoint", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalFarm", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_pool", "type": "address" } ], "name": "updateFarm", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_multiplier", "type": "uint256" } ], "name": "updateMultiplier", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_pool", "type": "address" }, { "internalType": "address", "name": "_user", "type": "address" } ], "name": "userTokens", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_pool", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "withdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "withdrawToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ], "bytecode": "0x6101006040526001600655600060075560006008553480156200002157600080fd5b5060405162003c5938038062003c598339810160408190526200004491620000d2565b600062000050620000ce565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600160601b0319606095861b811660805293851b841660a0529190931b90911660c05260e0919091526009556200014f565b3390565b600080600080600060a08688031215620000ea578081fd5b8551620000f78162000136565b60208701519095506200010a8162000136565b60408701519094506200011d8162000136565b6060870151608090970151959894975095949392505050565b6001600160a01b03811681146200014c57600080fd5b50565b60805160601c60a05160601c60c05160601c60e051613a62620001f7600039806112ae5280611f1a5280612af8525080611d895280611f9952806120045280612778528061281e52806128c45250806105f0528061063b5280610c435280610d9252806111a052806115b0528061160452806119b35280611aa5528061223f52508061117f52806113a1528061158f52806119d75280611a84528061221e5250613a626000f3fe6080604052600436106101e35760003560e01c80637cd07e4711610102578063c45a015511610095578063ee24881111610064578063ee24881114610568578063f2fde38b1461057d578063f53cdbcb1461059d578063fe07aa46146105bd576101e3565b8063c45a0155146104d6578063c49662c5146104eb578063d5a44f861461050b578063dab116fe1461053b576101e3565b8063a8b973a1116100d1578063a8b973a11461045d578063ac9650d814610472578063b02c43d014610492578063b44a2722146104c1576101e3565b80637cd07e47146103e65780638da5cb5b146104085780638dbb1e3a1461041d578063a694fc3a1461043d576101e3565b80634d5b00811161017a5780636b2b0796116101495780636b2b07961461037c5780636d2657da146103915780636db5bd63146103b1578063715018a6146103d1576101e3565b80634d5b008114610307578063509b6c3f14610327578063522650f2146103475780635ffe61461461035c576101e3565b806323cf3118116101b657806323cf31181461027557806337e16d4814610297578063421adfa0146102b75780634bb78b14146102e7576101e3565b806311fa2fa0146101e8578063150b7a021461021357806317caf6f11461024057806321c0b34214610255575b600080fd5b3480156101f457600080fd5b506101fd6105dd565b60405161020a9190613889565b60405180910390f35b34801561021f57600080fd5b5061023361022e36600461300f565b6105e3565b60405161020a91906135d4565b34801561024c57600080fd5b506101fd6107f6565b34801561026157600080fd5b506101fd610270366004612fd7565b6107fc565b34801561028157600080fd5b50610295610290366004612f9f565b610aed565b005b3480156102a357600080fd5b506102956102b2366004613279565b610b71565b3480156102c357600080fd5b506102d76102d2366004612f9f565b610cd3565b60405161020a94939291906138a0565b3480156102f357600080fd5b506102956103023660046130a9565b610d05565b34801561031357600080fd5b506101fd610322366004612fd7565b610fc7565b34801561033357600080fd5b506101fd6103423660046132b8565b611177565b34801561035357600080fd5b506101fd6112ac565b34801561036857600080fd5b506102956103773660046132b8565b6112d0565b34801561038857600080fd5b506101fd611337565b34801561039d57600080fd5b506102956103ac3660046130f7565b61133d565b3480156103bd57600080fd5b506102956103cc36600461330c565b61157c565b3480156103dd57600080fd5b5061029561170c565b3480156103f257600080fd5b506103fb6117b8565b60405161020a91906134a1565b34801561041457600080fd5b506103fb6117c7565b34801561042957600080fd5b506101fd61043836600461333b565b6117d6565b34801561044957600080fd5b506102956104583660046132b8565b6117f5565b34801561046957600080fd5b506101fd611838565b610485610480366004613122565b61183e565b60405161020a9190613530565b34801561049e57600080fd5b506104b26104ad3660046132b8565b61197e565b60405161020a939291906134f2565b3480156104cd57600080fd5b506103fb6119b1565b3480156104e257600080fd5b506103fb6119d5565b3480156104f757600080fd5b506101fd6105063660046132e8565b6119f9565b34801561051757600080fd5b5061052b6105263660046132b8565b611cd1565b60405161020a949392919061385a565b34801561054757600080fd5b5061055b610556366004612fd7565b611d0e565b60405161020a9190613590565b34801561057457600080fd5b506103fb611d87565b34801561058957600080fd5b50610295610598366004612f9f565b611dab565b3480156105a957600080fd5b506102956105b8366004612f9f565b611ead565b3480156105c957600080fd5b506102956105d83660046130f7565b612099565b60085481565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106365760405162461bcd60e51b815260040161062d90613683565b60405180910390fd5b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166399fbab88876040518263ffffffff1660e01b81526004016106859190613889565b6101806040518083038186803b15801561069e57600080fd5b505afa1580156106b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d6919061335c565b50505050509650965050505050506040518060600160405280886001600160a01b031681526020018360020b81526020018260020b8152506004600088815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160000160146101000a81548162ffffff021916908360020b62ffffff16021790555060408201518160000160176101000a81548162ffffff021916908360020b62ffffff160217905550905050866001600160a01b0316867fc7948d631280f3931f619912c8d54c139cc8d369aea73f6c92f7763ea0683dd060405160405180910390a36107e286886121cc565b50630a85bd0160e11b979650505050505050565b60075481565b600060095443101561080d57600080fd5b6001600160a01b0382161580159061082e57506001600160a01b0382163014155b61084a5760405162461bcd60e51b815260040161062d906136f8565b61085383611ead565b6001600160a01b038316600081815260026020818152604080842081516080810183528154815260018201548185015293810154848301526003908101546001600160801b031660608501529484529381528383203384528152838320805485518184028101840190965280865292949290918301828280156108f557602002820191906000526020600020905b8154815260200190600101908083116108e1575b5050505050905080516000141561091157600092505050610ae7565b60005b8151811015610a91576000806109428885858151811061093057fe5b60200260200101518760400151612567565b9150915061098c6109856005600087878151811061095c57fe5b6020026020010151815260200190815260200160002060030154846126a790919063ffffffff16565b8790612704565b95506040518060800160405280826001600160a01b03168152602001428152602001600560008787815181106109be57fe5b6020026020010151815260200190815260200160002060020160009054906101000a90046001600160801b03166001600160801b031681526020018381525060056000868681518110610a0d57fe5b6020908102919091018101518252818101929092526040908101600020835181546001600160a01b0319166001600160a01b0390911617815591830151600180840191909155908301516002830180546001600160801b0319166001600160801b039092169190911790556060909201516003909101559290920191506109149050565b508215610ae457610aa2848461275e565b836001600160a01b03167fd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a84604051610adb9190613889565b60405180910390a25b50505b92915050565b610af5612952565b6001600160a01b0316610b066117c7565b6001600160a01b031614610b4f576040805162461bcd60e51b81526020600482018190526024820152600080516020613a0d833981519152604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b0316610b995760405162461bcd60e51b815260040161062d9061364a565b610bb4610ba96020840184612f9f565b308460200135612956565b600154604051636a2795f960e11b81526000916001600160a01b03169063d44f2bf290610be5908690600401613732565b602060405180830381600087803b158015610bff57600080fd5b505af1158015610c13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3791906132d0565b90506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663b88d4fde610c7a61016086016101408701612f9f565b3084866040518563ffffffff1660e01b8152600401610c9c94939291906134b5565b600060405180830381600087803b158015610cb657600080fd5b505af1158015610cca573d6000803e3d6000fd5b50505050505050565b60026020819052600091825260409091208054600182015492820154600390920154909291906001600160801b031684565b610d0f82336107fc565b506001600160a01b0382166000908152600360209081526040808320338452825280832080548251818502810185019093528083529192909190830182828015610d7857602002820191906000526020600020905b815481526020019060010190808311610d64575b50505050509050600080600090505b8251811015610f75577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b88d4fde3060046000878681518110610dd057fe5b6020026020010151815260200190815260200160002060000160009054906101000a90046001600160a01b0316868581518110610e0957fe5b6020026020010151886040518563ffffffff1660e01b8152600401610e3194939291906134b5565b600060405180830381600087803b158015610e4b57600080fd5b505af1158015610e5f573d6000803e3d6000fd5b5050505060056000848381518110610e7357fe5b6020026020010151815260200190815260200160002060020160009054906101000a90046001600160801b031682019150600060056000858481518110610eb657fe5b6020026020010151815260200190815260200160002060020160006101000a8154816001600160801b0302191690836001600160801b0316021790555060046000848381518110610f0357fe5b602090810291909101810151825281019190915260400160002080546001600160d01b03191690558251839082908110610f3957fe5b60200260200101517fc172f6497c150fc242267f743e8e4034b31b16ee123408d6d5f75a81128de11460405160405180910390a2600101610d87565b506001600160801b03811615610fc1576001600160a01b038416600090815260026020526040902060030180546001600160801b03808216849003166001600160801b03199091161790555b50505050565b6001600160a01b0382166000908152600260208181526040808420815160808101835281548152600182015493810184905293810154918401829052600301546001600160801b0316606084015290431180156110315750600082606001516001600160801b0316115b15610ae45761103f85612aa4565b6001600160a01b038087166000908152600360209081526040808320938916835292815282822080548451818402810184019095528085529495509193908301828280156110ac57602002820191906000526020600020905b815481526020019060010190808311611098575b5050505050905060005b815181101561116d57600560008383815181106110cf57fe5b6020908102919091018101518252810191909152604001600020600201546001600160801b03166110ff57611165565b600061111f8884848151811061111157fe5b602002602001015186612567565b5090506111616109856005600086868151811061113857fe5b6020026020010151815260200190815260200160002060030154836126a790919063ffffffff16565b9550505b6001016110b6565b5050505092915050565b6000806111c57f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000085612b85565b5050506000848152600560205260409020600201549091506001600160801b03166111f45760009150506112a7565b6001600160a01b038116600090815260026020818152604092839020835160808101855281548152600182015492810183905292810154938301849052600301546001600160801b03166060830152909190431180156112615750600082606001516001600160801b0316115b156112725761126f83612aa4565b90505b600061127f848784612567565b506000878152600560205260409020600301549091506112a09082906126a7565b9450505050505b919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6112d8612952565b6001600160a01b03166112e96117c7565b6001600160a01b031614611332576040805162461bcd60e51b81526020600482018190526024820152600080516020613a0d833981519152604482015290519081900360640190fd5b600655565b60095481565b611345612952565b6001600160a01b03166113566117c7565b6001600160a01b03161461139f576040805162461bcd60e51b81526020600482018190526024820152600080516020613a0d833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561140257600080fd5b505afa158015611416573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143a9190612fbb565b6001600160a01b0316146114605760405162461bcd60e51b815260040161062d90613610565b6001600160a01b038216600090815260026020526040902060010154156114995760405162461bcd60e51b815260040161062d906136db565b60405180608001604052808281526020016114b643600954612c74565b81526000602080830182905260409283018290526001600160a01b0386168252600280825291839020845181559084015160018201559183015190820155606090910151600390910180546001600160801b0319166001600160801b039092169190911790556007546115299082612704565b6007556008805460010190556040516001600160a01b038316907f34b3dd1d28b1eecc9baba399815f4fddce8f9552a4115831754a011a68943e6990611570908490613889565b60405180910390a25050565b61158682336119f9565b506000806115d57f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000086612b85565b600088815260046020819052604091829020549151635c46a7ef60e11b81529597509195506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169563b88d4fde95506116439450309392909116918a918a91016134b5565b600060405180830381600087803b15801561165d57600080fd5b505af1158015611671573d6000803e3d6000fd5b5050506000858152600560209081526040808320600290810180546001600160801b03199081169091556004845282852080546001600160d01b03191690556001600160a01b0388168552925280832060030180546001600160801b0381811688900316931692909217909155518692507fc172f6497c150fc242267f743e8e4034b31b16ee123408d6d5f75a81128de1149190a250505050565b611714612952565b6001600160a01b03166117256117c7565b6001600160a01b03161461176e576040805162461bcd60e51b81526020600482018190526024820152600080516020613a0d833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6001546001600160a01b031681565b6000546001600160a01b031690565b60006117ee6117e583856126a7565b60065490612c8b565b9392505050565b6000818152600460205260409020546001600160a01b0316331461182b5760405162461bcd60e51b815260040161062d90613715565b61183581336121cc565b50565b60065481565b60608167ffffffffffffffff8111801561185757600080fd5b5060405190808252806020026020018201604052801561188b57816020015b60608152602001906001900390816118765790505b50905060005b8281101561197757600080308686858181106118a957fe5b90506020028101906118bb91906138c4565b6040516118c9929190613491565b600060405180830381855af49150503d8060008114611904576040519150601f19603f3d011682016040523d82523d6000602084013e611909565b606091505b5091509150816119555760448151101561192257600080fd5b6004810190508080602001905181019061193c9190613206565b60405162461bcd60e51b815260040161062d91906135fd565b8084848151811061196257fe5b60209081029190910101525050600101611891565b5092915050565b6004602052600090815260409020546001600160a01b03811690600160a01b8104600290810b91600160b81b9004900b83565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600954431015611a0a57600080fd5b6000838152600460205260409020546001600160a01b03163314611a405760405162461bcd60e51b815260040161062d90613715565b6001600160a01b03821615801590611a6157506001600160a01b0382163014155b611a7d5760405162461bcd60e51b815260040161062d906136f8565b6000611aca7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000086612b85565b5050506000858152600560205260409020600201549091506001600160801b0316611b075760405162461bcd60e51b815260040161062d9061362d565b611b1081611ead565b6001600160a01b0381166000908152600260208181526040808420815160808101835281548152600182015493810193909352928301549082018190526003909201546001600160801b0316606082015291908190611b729085908990612567565b6000898152600560205260409020600301549193509150611b949083906126a7565b9450841561116d57611ba6868661275e565b6040518060800160405280826001600160a01b03168152602001428152602001600560008a815260200190815260200160002060020160009054906101000a90046001600160801b03166001600160801b03168152602001838152506005600089815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151816001015560408201518160020160006101000a8154816001600160801b0302191690836001600160801b0316021790555060608201518160030155905050856001600160a01b03167fd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a86604051611cbf9190613889565b60405180910390a25050505092915050565b60056020526000908152604090208054600182015460028301546003909301546001600160a01b039092169290916001600160801b039091169084565b6001600160a01b038083166000908152600360209081526040808320938516835292815290829020805483518184028101840190945280845260609392830182828015611d7a57602002820191906000526020600020905b815481526020019060010190808311611d66575b5050505050905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b611db3612952565b6001600160a01b0316611dc46117c7565b6001600160a01b031614611e0d576040805162461bcd60e51b81526020600482018190526024820152600080516020613a0d833981519152604482015290519081900360640190fd5b6001600160a01b038116611e525760405162461bcd60e51b81526004018080602001828103825260268152602001806139c66026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038116600090815260026020526040902060018101544311611ed65750611835565b60038101546001600160801b0316611ef45743600190910155611835565b6000611f048260010154436117d6565b8254600754919250600091611f459190611f3e857f0000000000000000000000000000000000000000000000000000000000000000612c8b565b9190612ce4565b6003840154909150611f7790611f6c90839064e8d4a51000906001600160801b0316612ce4565b600285015490612704565b60028401554360018401556040516340c10f1960e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906340c10f1990611fd09030908590600401613517565b600060405180830381600087803b158015611fea57600080fd5b505af1158015611ffe573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166340c10f196120396117c7565b61204484600a612d8e565b6040518363ffffffff1660e01b8152600401612061929190613517565b600060405180830381600087803b15801561207b57600080fd5b505af115801561208f573d6000803e3d6000fd5b5050505050505050565b6120a1612952565b6001600160a01b03166120b26117c7565b6001600160a01b0316146120fb576040805162461bcd60e51b81526020600482018190526024820152600080516020613a0d833981519152604482015290519081900360640190fd5b6001600160a01b0382166000908152600260205260409020600101546121335760405162461bcd60e51b815260040161062d906136a2565b61213c82611ead565b6001600160a01b0382166000908152600260205260409020805490829055818114612184576121808261217a836007546126a790919063ffffffff16565b90612704565b6007555b826001600160a01b03167fdf6db505fd69051fd16558924187733c037bb43f474be6d81599ff38d0ca5e2f82846040516121bf929190613892565b60405180910390a2505050565b6009544310156121db57612563565b6000828152600560205260409020600201546001600160801b0316156122135760405162461bcd60e51b815260040161062d90613666565b6000806000806122647f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000088612b85565b93509350935093506000816001600160801b0316116122955760405162461bcd60e51b815260040161062d906136bf565b6001600160a01b03808516600090815260036020908152604080832093891683529290522054156122d0576122ca84866107fc565b506122d9565b6122d984611ead565b6001600160a01b0384166000908152600260205260409020546122ff5750505050612563565b6040516351c403f960e11b81526000906001600160a01b0386169063a38807f29061233090879087906004016135e9565b60606040518083038186803b15801561234857600080fd5b505afa15801561235c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061238091906131ad565b509150506040518060800160405280826001600160a01b03168152602001428152602001836001600160801b03168152602001600560008a8152602001908152602001600020600301548152506005600089815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151816001015560408201518160020160006101000a8154816001600160801b0302191690836001600160801b031602179055506060820151816003015590505060036000866001600160a01b03166001600160a01b031681526020019081526020016000206000876001600160a01b03166001600160a01b031681526020019081526020016000208790806001815401808255809150506001900390600052602060002001600090919091909150558160026000876001600160a01b03166001600160a01b0316815260200190815260200160002060030160008282829054906101000a90046001600160801b03160192506101000a8154816001600160801b0302191690836001600160801b03160217905550867f4a1aff2ad1f7400721a859525efe44bd9dea253e1e02ba4161f2c77ed16fc0a3836040516125559190613846565b60405180910390a250505050505b5050565b6000828152600560205260408120600201548190612594906001600160801b03168464e8d4a51000612ce4565b6000858152600460208190526040918290205491516351c403f960e11b81529294506001600160a01b0388169263a38807f2926125e992600160a01b8204600290810b93600160b81b909304900b91016135e9565b60606040518083038186803b15801561260157600080fd5b505afa158015612615573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061263991906131ad565b506000868152600560205260409020600281015481546001909201549294506001600160801b03166001600160a01b039182168503029250429190910360801b9082168103801561269c57612699612692868385612ce4565b86906126a7565b94505b505050935093915050565b6000828211156126fe576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000828201838110156117ee576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6040516370a0823160e01b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906127ad9030906004016134a1565b60206040518083038186803b1580156127c557600080fd5b505afa1580156127d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127fd91906132d0565b9050808211156128ad5760405163a9059cbb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906128559086908590600401613517565b602060405180830381600087803b15801561286f57600080fd5b505af1158015612883573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128a79190613191565b5061294d565b60405163a9059cbb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906128fb9086908690600401613517565b602060405180830381600087803b15801561291557600080fd5b505af1158015612929573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc19190613191565b505050565b3390565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b1781529251825160009485949389169392918291908083835b602083106129d25780518252601f1990920191602091820191016129b3565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612a34576040519150601f19603f3d011682016040523d82523d6000602084013e612a39565b606091505b5091509150818015612a67575080511580612a675750808060200190516020811015612a6457600080fd5b50515b612a9d576040805162461bcd60e51b8152602060048201526002602482015261534160f01b604482015290519081900360640190fd5b5050505050565b6001600160a01b0381166000908152600260205260408120600101548190612acc90436117d6565b6001600160a01b0384166000908152600260205260408120546007549293509091612b1c9190611f3e857f0000000000000000000000000000000000000000000000000000000000000000612c8b565b6001600160a01b038516600090815260026020526040902060030154909150612b7d90612b5a90839064e8d4a51000906001600160801b0316612ce4565b6001600160a01b0386166000908152600260208190526040909120015490612704565b949350505050565b6000806000806000806000886001600160a01b03166399fbab88896040518263ffffffff1660e01b8152600401808281526020019150506101806040518083038186803b158015612bd557600080fd5b505afa158015612be9573d6000803e3d6000fd5b505050506040513d610180811015612c0057600080fd5b50604080820151606080840151608085015160a086015160c087015160e090970151865194850187526001600160a01b0380871686528416602086015262ffffff8316968501969096529b50949950929750909550909350909150612c66908b90612df5565b965050505093509350935093565b600081831015612c8457816117ee565b5090919050565b600082612c9a57506000610ae7565b82820282848281612ca757fe5b04146117ee5760405162461bcd60e51b81526004018080602001828103825260218152602001806139ec6021913960400191505060405180910390fd5b6000808060001985870986860292508281109083900303905080612d1a5760008411612d0f57600080fd5b5082900490506117ee565b808411612d2657600080fd5b600084868809600260036001881981018916988990049182028318808302840302808302840302808302840302808302840302808302840302918202909203026000889003889004909101858311909403939093029303949094049190911702949350505050565b6000808211612de4576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381612ded57fe5b049392505050565b600081602001516001600160a01b031682600001516001600160a01b031610612e1d57600080fd5b50805160208083015160409384015184516001600160a01b0394851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301206001600160f81b031960a085015294901b6bffffffffffffffffffffffff191660a183015260b58201939093527fbd9dc550155c3a4d88237385c3d93e6d8bf4d3a9ae377cc080948afe61d9696f60d5808301919091528251808303909101815260f5909101909152805191012090565b80356112a781613982565b80516112a781613982565b80356112a781613997565b600082601f830112612f0a578081fd5b8135612f1d612f1882613934565b613910565b818152846020838601011115612f31578283fd5b816020850160208301379081016020019190915292915050565b80356112a7816139a5565b80516112a7816139a5565b80516001600160801b03811681146112a757600080fd5b80356112a7816139b4565b80516112a7816139b4565b803560ff811681146112a757600080fd5b600060208284031215612fb0578081fd5b81356117ee81613982565b600060208284031215612fcc578081fd5b81516117ee81613982565b60008060408385031215612fe9578081fd5b8235612ff481613982565b9150602083013561300481613982565b809150509250929050565b600080600080600060808688031215613026578081fd5b853561303181613982565b9450602086013561304181613982565b935060408601359250606086013567ffffffffffffffff80821115613064578283fd5b818801915088601f830112613077578283fd5b813581811115613085578384fd5b896020828501011115613096578384fd5b9699959850939650602001949392505050565b600080604083850312156130bb578182fd5b82356130c681613982565b9150602083013567ffffffffffffffff8111156130e1578182fd5b6130ed85828601612efa565b9150509250929050565b60008060408385031215613109578081fd5b823561311481613982565b946020939093013593505050565b60008060208385031215613134578182fd5b823567ffffffffffffffff8082111561314b578384fd5b818501915085601f83011261315e578384fd5b81358181111561316c578485fd5b866020808302850101111561317f578485fd5b60209290920196919550909350505050565b6000602082840312156131a2578081fd5b81516117ee81613997565b6000806000606084860312156131c1578081fd5b83518060060b81146131d1578182fd5b60208501519093506131e281613982565b604085015190925063ffffffff811681146131fb578182fd5b809150509250925092565b600060208284031215613217578081fd5b815167ffffffffffffffff81111561322d578182fd5b8201601f8101841361323d578182fd5b805161324b612f1882613934565b81815285602083850101111561325f578384fd5b613270826020830160208601613956565b95945050505050565b6000808284036101c081121561328d578283fd5b6101a08082121561329c578384fd5b849350830135905067ffffffffffffffff8111156130e1578182fd5b6000602082840312156132c9578081fd5b5035919050565b6000602082840312156132e1578081fd5b5051919050565b600080604083850312156132fa578182fd5b82359150602083013561300481613982565b6000806040838503121561331e578182fd5b82359150602083013567ffffffffffffffff8111156130e1578182fd5b6000806040838503121561334d578182fd5b50508035926020909101359150565b6000806000806000806000806000806000806101808d8f03121561337e57898afd5b8c516bffffffffffffffffffffffff81168114613399578a8bfd5b9b506133a760208e01612ee4565b9a506133b560408e01612ee4565b99506133c360608e01612ee4565b98506133d160808e01612f83565b97506133df60a08e01612f56565b96506133ed60c08e01612f56565b95506133fb60e08e01612f61565b94506101008d015193506101208d0151925061341a6101408e01612f61565b91506134296101608e01612f61565b90509295989b509295989b509295989b565b6001600160a01b03169052565b15159052565b60008151808452613466816020860160208601613956565b601f01601f19169290920160200192915050565b60020b9052565b62ffffff169052565b60ff169052565b6000828483379101908152919050565b6001600160a01b0391909116815260200190565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906134e89083018461344e565b9695505050505050565b6001600160a01b03939093168352600291820b6020840152900b604082015260600190565b6001600160a01b03929092168252602082015260400190565b6000602080830181845280855180835260408601915060408482028701019250838701855b8281101561358357603f1988860301845261357185835161344e565b94509285019290850190600101613555565b5092979650505050505050565b6020808252825182820181905260009190848201906040850190845b818110156135c8578351835292840192918401916001016135ac565b50909695505050505050565b6001600160e01b031991909116815260200190565b600292830b8152910b602082015260400190565b6000602082526117ee602083018461344e565b60208082526003908201526224a82360e91b604082015260600190565b602080825260039082015262544e5360e81b604082015260600190565b6020808252600290820152614e4d60f01b604082015260600190565b60208082526003908201526254415360e81b604082015260600190565b602080825260059082015264139093919560da1b604082015260600190565b602080825260039082015262464e4560e81b604082015260600190565b602080825260029082015261169360f21b604082015260600190565b60208082526003908201526246414560e81b604082015260600190565b60208082526003908201526249524160e81b604082015260600190565b6020808252600390820152624e544f60e81b604082015260600190565b6101a081016137498261374485612ed9565b61343b565b6020830135602083015261375f60408401612f8e565b61376c604084018261348a565b5061377960608401612ed9565b613786606084018261343b565b5061379360808401612ed9565b6137a0608084018261343b565b506137ad60a08401612f78565b6137ba60a0840182613481565b506137c760c08401612f4b565b6137d460c084018261347a565b506137e160e08401612f4b565b6137ee60e084018261347a565b5061010083810135908301526101208084013590830152610140613813818501612ed9565b61381f8285018261343b565b5050610160838101359083015261018061383a818501612eef565b610ae482850182613448565b6001600160801b0391909116815260200190565b6001600160a01b0394909416845260208401929092526001600160801b03166040830152606082015260800190565b90815260200190565b918252602082015260400190565b938452602084019290925260408301526001600160801b0316606082015260800190565b6000808335601e198436030181126138da578283fd5b83018035915067ffffffffffffffff8211156138f4578283fd5b60200191503681900382131561390957600080fd5b9250929050565b60405181810167ffffffffffffffff8111828210171561392c57fe5b604052919050565b600067ffffffffffffffff82111561394857fe5b50601f01601f191660200190565b60005b83811015613971578181015183820152602001613959565b83811115610fc15750506000910152565b6001600160a01b038116811461183557600080fd5b801515811461183557600080fd5b8060020b811461183557600080fd5b62ffffff8116811461183557600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212208d98b93740d1c8596807805a6f83c29def4ca4bc0de235a8d8c2d69902e72de864736f6c63430007060033", "deployedBytecode": "0x6080604052600436106101e35760003560e01c80637cd07e4711610102578063c45a015511610095578063ee24881111610064578063ee24881114610568578063f2fde38b1461057d578063f53cdbcb1461059d578063fe07aa46146105bd576101e3565b8063c45a0155146104d6578063c49662c5146104eb578063d5a44f861461050b578063dab116fe1461053b576101e3565b8063a8b973a1116100d1578063a8b973a11461045d578063ac9650d814610472578063b02c43d014610492578063b44a2722146104c1576101e3565b80637cd07e47146103e65780638da5cb5b146104085780638dbb1e3a1461041d578063a694fc3a1461043d576101e3565b80634d5b00811161017a5780636b2b0796116101495780636b2b07961461037c5780636d2657da146103915780636db5bd63146103b1578063715018a6146103d1576101e3565b80634d5b008114610307578063509b6c3f14610327578063522650f2146103475780635ffe61461461035c576101e3565b806323cf3118116101b657806323cf31181461027557806337e16d4814610297578063421adfa0146102b75780634bb78b14146102e7576101e3565b806311fa2fa0146101e8578063150b7a021461021357806317caf6f11461024057806321c0b34214610255575b600080fd5b3480156101f457600080fd5b506101fd6105dd565b60405161020a9190613889565b60405180910390f35b34801561021f57600080fd5b5061023361022e36600461300f565b6105e3565b60405161020a91906135d4565b34801561024c57600080fd5b506101fd6107f6565b34801561026157600080fd5b506101fd610270366004612fd7565b6107fc565b34801561028157600080fd5b50610295610290366004612f9f565b610aed565b005b3480156102a357600080fd5b506102956102b2366004613279565b610b71565b3480156102c357600080fd5b5