UNPKG

@pollum-io/pegasys-protocol

Version:

Contracts for the Pegasys Dex.

1,094 lines 125 kB
{ "_format": "hh-sol-artifact-1", "contractName": "MiniChefV2", "sourceName": "contracts/flatten/MiniChefV2Flatten.sol", "abi": [ { "inputs": [ { "internalType": "address", "name": "_rewardToken", "type": "address" }, { "internalType": "address", "name": "_firstOwner", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "pid", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" } ], "name": "Deposit", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "pid", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" } ], "name": "EmergencyWithdraw", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "funder", "type": "address" } ], "name": "FunderAdded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "funder", "type": "address" } ], "name": "FunderRemoved", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "pid", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Harvest", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "rewardPerSecond", "type": "uint256" } ], "name": "LogRewardPerSecond", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "rewardsExpiration", "type": "uint256" } ], "name": "LogRewardsExpiration", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "pid", "type": "uint256" } ], "name": "Migrate", "type": "event" }, { "anonymous": false, "inputs": [], "name": "MigratorDisabled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "migrator", "type": "address" } ], "name": "MigratorSet", "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": "pid", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "allocPoint", "type": "uint256" }, { "indexed": true, "internalType": "contract IERC20", "name": "lpToken", "type": "address" }, { "indexed": true, "internalType": "contract IRewarder", "name": "rewarder", "type": "address" } ], "name": "PoolAdded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "pid", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "allocPoint", "type": "uint256" }, { "indexed": true, "internalType": "contract IRewarder", "name": "rewarder", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "overwrite", "type": "bool" } ], "name": "PoolSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "pid", "type": "uint256" }, { "indexed": false, "internalType": "uint64", "name": "lastRewardTime", "type": "uint64" }, { "indexed": false, "internalType": "uint256", "name": "lpSupply", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "accRewardPerShare", "type": "uint256" } ], "name": "PoolUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "pid", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" } ], "name": "Withdraw", "type": "event" }, { "inputs": [], "name": "REWARD", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_funder", "type": "address" } ], "name": "addFunder", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_allocPoint", "type": "uint256" }, { "internalType": "contract IERC20", "name": "_lpToken", "type": "address" }, { "internalType": "contract IRewarder", "name": "_rewarder", "type": "address" } ], "name": "addPool", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "_allocPoints", "type": "uint256[]" }, { "internalType": "contract IERC20[]", "name": "_lpTokens", "type": "address[]" }, { "internalType": "contract IRewarder[]", "name": "_rewarders", "type": "address[]" } ], "name": "addPools", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "addedTokens", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "pid", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" } ], "name": "deposit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "pid", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "depositWithPermit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "disableMigrator", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "pid", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" } ], "name": "emergencyWithdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "extension", "type": "uint256" }, { "internalType": "uint256", "name": "maxFunding", "type": "uint256" } ], "name": "extendRewardsViaDuration", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "funding", "type": "uint256" }, { "internalType": "uint256", "name": "minExtension", "type": "uint256" } ], "name": "extendRewardsViaFunding", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "funding", "type": "uint256" }, { "internalType": "uint256", "name": "duration", "type": "uint256" } ], "name": "fundRewards", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "pid", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" } ], "name": "harvest", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_funder", "type": "address" } ], "name": "isFunder", "outputs": [ { "internalType": "bool", "name": "allowed", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "lpToken", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lpTokens", "outputs": [ { "internalType": "contract IERC20[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "massUpdateAllPools", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "pids", "type": "uint256[]" } ], "name": "massUpdatePools", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_pid", "type": "uint256" } ], "name": "migrate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "migrationDisabled", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "migrator", "outputs": [ { "internalType": "contract IMigratorChef", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_pid", "type": "uint256" }, { "internalType": "address", "name": "_user", "type": "address" } ], "name": "pendingReward", "outputs": [ { "internalType": "uint256", "name": "pending", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "poolInfo", "outputs": [ { "internalType": "uint128", "name": "accRewardPerShare", "type": "uint128" }, { "internalType": "uint64", "name": "lastRewardTime", "type": "uint64" }, { "internalType": "uint64", "name": "allocPoint", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "poolInfos", "outputs": [ { "components": [ { "internalType": "uint128", "name": "accRewardPerShare", "type": "uint128" }, { "internalType": "uint64", "name": "lastRewardTime", "type": "uint64" }, { "internalType": "uint64", "name": "allocPoint", "type": "uint64" } ], "internalType": "struct MiniChefV2.PoolInfo[]", "name": "", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "poolLength", "outputs": [ { "internalType": "uint256", "name": "pools", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_funder", "type": "address" } ], "name": "removeFunder", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "duration", "type": "uint256" } ], "name": "resetRewardsDuration", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "rewardPerSecond", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "rewarder", "outputs": [ { "internalType": "contract IRewarder", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "rewardsExpiration", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "contract IMigratorChef", "name": "_migrator", "type": "address" } ], "name": "setMigrator", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_pid", "type": "uint256" }, { "internalType": "uint256", "name": "_allocPoint", "type": "uint256" }, { "internalType": "contract IRewarder", "name": "_rewarder", "type": "address" }, { "internalType": "bool", "name": "overwrite", "type": "bool" } ], "name": "setPool", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "pids", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "allocPoints", "type": "uint256[]" }, { "internalType": "contract IRewarder[]", "name": "rewarders", "type": "address[]" }, { "internalType": "bool[]", "name": "overwrites", "type": "bool[]" } ], "name": "setPools", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "totalAllocPoint", "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": "uint256", "name": "pid", "type": "uint256" } ], "name": "updatePool", "outputs": [ { "components": [ { "internalType": "uint128", "name": "accRewardPerShare", "type": "uint128" }, { "internalType": "uint64", "name": "lastRewardTime", "type": "uint64" }, { "internalType": "uint64", "name": "allocPoint", "type": "uint64" } ], "internalType": "struct MiniChefV2.PoolInfo", "name": "pool", "type": "tuple" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "address", "name": "", "type": "address" } ], "name": "userInfo", "outputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "int256", "name": "rewardDebt", "type": "int256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "pid", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" } ], "name": "withdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "pid", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" } ], "name": "withdrawAndHarvest", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ], "bytecode": "0x60a06040523480156200001157600080fd5b506040516200660d3803806200660d8339818101604052810190620000379190620003d3565b600062000049620001e460201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015620001525750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b62000194576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200018b9062000548565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b81525050620001dc81620001ec60201b60201c565b5050620005eb565b600033905090565b620001fc620001e460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200028c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000283906200056a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415620002ff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002f69062000526565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600081519050620003cd81620005d1565b92915050565b60008060408385031215620003e757600080fd5b6000620003f785828601620003bc565b92505060206200040a85828601620003bc565b9150509250929050565b6000620004236026836200058c565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006200048b602e836200058c565b91507f4d696e694368656656323a3a43616e6e6f7420636f6e7374727563742077697460008301527f68207a65726f20616464726573730000000000000000000000000000000000006020830152604082019050919050565b6000620004f36020836200058c565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006020820190508181036000830152620005418162000414565b9050919050565b6000602082019050818103600083015262000563816200047c565b9050919050565b600060208201905081810360008301526200058581620004e4565b9050919050565b600082825260208201905092915050565b6000620005aa82620005b1565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b620005dc816200059d565b8114620005e857600080fd5b50565b60805160601c615feb6200062260003980610b675280610da552806112e25280612b39528061308252806131e45250615feb6000f3fe608060405234801561001057600080fd5b50600436106102535760003560e01c8063715018a61161014657806398969e82116100c3578063cab34c0811610087578063cab34c08146106bd578063d1abb907146106db578063dcd18dd4146106f7578063f2fde38b14610713578063f624d2c51461072f578063f6d676be1461074b57610253565b806398969e8214610619578063b763e7c414610649578063b76f4aeb14610665578063c1bcb49314610683578063c346253d1461068d57610253565b80638da5cb5b1161010a5780638da5cb5b146105745780638dbdbe6d146105925780638f10369a146105ae578063933f084f146105cc57806393f1a40b146105e857610253565b8063715018a6146104d057806378ed5d1f146104da5780637973aa7b1461050a57806379d12ffb146105265780637cd07e471461055657610253565b806323cf3118116101d4578063454b060811610198578063454b06081461042e5780634b87e90f1461044a57806351eb05a61461046657806357a5b58c1461049657806361f8e66f146104b257610253565b806323cf3118146103a057806328662551146103bc5780632f940c70146103d857806334c0b46b146103f45780633ef6db911461041257610253565b806318fccc761161021b57806318fccc761461030057806319610b2b1461031c5780631bbe9d8c146103385780631ea48870146103545780632273ee6e1461038457610253565b8063081e3eda146102585780630ad58d2f146102765780630c812af3146102925780631526fe27146102b057806317caf6f1146102e2575b600080fd5b610260610755565b60405161026d9190615aff565b60405180910390f35b610290600480360381019061028b9190614a1e565b610762565b005b61029a6109f6565b6040516102a79190615741565b60405180910390f35b6102ca60048036038101906102c59190614905565b610a09565b6040516102d993929190615ac8565b60405180910390f35b6102ea610a80565b6040516102f79190615aff565b60405180910390f35b61031a60048036038101906103159190614957565b610a86565b005b610336600480360381019061033191906149e2565b610cec565b005b610352600480360381019061034d9190614628565b610e28565b005b61036e60048036038101906103699190614628565b610f4f565b60405161037b9190615741565b60405180910390f35b61039e60048036038101906103999190614a6d565b610fa5565b005b6103ba60048036038101906103b591906148b3565b611067565b005b6103d660048036038101906103d191906149e2565b6111c7565b005b6103f260048036038101906103ed9190614957565b6114c1565b005b6103fc611600565b60405161040991906156fd565b60405180910390f35b61042c6004803603810190610427919061473a565b61168e565b005b61044860048036038101906104439190614905565b61182f565b005b610464600480360381019061045f9190614905565b611d2d565b005b610480600480360381019061047b9190614905565b611ef3565b60405161048d9190615aad565b60405180910390f35b6104b060048036038101906104ab9190614651565b612319565b005b6104ba612359565b6040516104c7919061571f565b60405180910390f35b6104d8612462565b005b6104f460048036038101906104ef9190614905565b6125b5565b604051610501919061575c565b60405180910390f35b610524600480360381019061051f9190614696565b6125f1565b005b610540600480360381019061053b9190614628565b61276c565b60405161054d9190615741565b60405180910390f35b61055e61278c565b60405161056b9190615777565b60405180910390f35b61057c6127b2565b6040516105899190615613565b60405180910390f35b6105ac60048036038101906105a79190614a1e565b6127db565b005b6105b6612a71565b6040516105c39190615aff565b60405180910390f35b6105e660048036038101906105e191906149e2565b612a77565b005b61060260048036038101906105fd9190614957565b612bbc565b604051610610929190615c3c565b60405180910390f35b610633600480360381019061062e9190614957565b612bed565b6040516106409190615aff565b60405180910390f35b610663600480360381019061065e9190614b0b565b612f61565b005b61066d613010565b60405161067a9190615aff565b60405180910390f35b61068b613016565b005b6106a760048036038101906106a29190614905565b613044565b6040516106b49190615792565b60405180910390f35b6106c5613080565b6040516106d2919061575c565b60405180910390f35b6106f560048036038101906106f09190614a1e565b6130a4565b005b610711600480360381019061070c9190614628565b613431565b005b61072d60048036038101906107289190614628565b613558565b005b61074960048036038101906107449190614993565b61371a565b005b6107536137c7565b005b6000600280549050905090565b61076a6143d2565b61077384611ef3565b905060006005600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061081664e8d4a510006107fb84600001516fffffffffffffffffffffffffffffffff16876138a490919063ffffffff16565b8161080257fe5b04826001015461390690919063ffffffff16565b816001018190555061083584826000015461397e90919063ffffffff16565b816000018190555060006004868154811061084c57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610926578073ffffffffffffffffffffffffffffffffffffffff166344af0fa7873387600087600001546040518663ffffffff1660e01b81526004016108f3959493929190615b1a565b600060405180830381600087803b15801561090d57600080fd5b505af1158015610921573d6000803e3d6000fd5b505050505b61098884866003898154811061093857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166139ce9092919063ffffffff16565b8373ffffffffffffffffffffffffffffffffffffffff16863373ffffffffffffffffffffffffffffffffffffffff167f8166bf25f8a2b7ed3c85049207da4358d16edbed977d23fa2ee6f0dde3ec2132886040516109e69190615aff565b60405180910390a4505050505050565b600160149054906101000a900460ff1681565b60028181548110610a1657fe5b906000526020600020016000915090508060000160009054906101000a90046fffffffffffffffffffffffffffffffff16908060000160109054906101000a900467ffffffffffffffff16908060000160189054906101000a900467ffffffffffffffff16905083565b60085481565b610a8e6143d2565b610a9783611ef3565b905060006005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600064e8d4a51000610b2284600001516fffffffffffffffffffffffffffffffff1684600001546138a490919063ffffffff16565b81610b2957fe5b0490506000610b4d610b4884600101548461390690919063ffffffff16565b613b05565b905081836001018190555060008114610bac57610bab85827f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166139ce9092919063ffffffff16565b5b600060048781548110610bbb57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610c94578073ffffffffffffffffffffffffffffffffffffffff166344af0fa78833898689600001546040518663ffffffff1660e01b8152600401610c61959493929190615b6d565b600060405180830381600087803b158015610c7b57600080fd5b505af1158015610c8f573d6000803e3d6000fd5b505050505b863373ffffffffffffffffffffffffffffffffffffffff167f71bab65ced2e5750775a0613be067df48ef06cf92a496ebf7663ae066092495484604051610cdb9190615aff565b60405180910390a350505050505050565b60008211610d2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d269061590d565b60405180910390fd5b60006009548381610d3c57fe5b04905081811015610d82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d799061580d565b60405180910390fd5b610d9781600a54613b5290919063ffffffff16565b600a81905550610dea3330857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16613ba2909392919063ffffffff16565b7f8f596a35f0cdefc7e1e1e80e73eced8bfdb8ca9e519ca4042ad0963f19bc239e600a54604051610e1b9190615aff565b60405180910390a1505050565b610e30613cdc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ebd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb49061596d565b60405180910390fd5b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f0c48d651d88968f843204baf13aa11cd1a590e611c6dcadc7ed4daab1f98462a81604051610f449190615613565b60405180910390a150565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60038781548110610fb257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d505accf333089888888886040518863ffffffff1660e01b8152600401611021979695949392919061562e565b600060405180830381600087803b15801561103b57600080fd5b505af115801561104f573d6000803e3d6000fd5b5050505061105e8787876127db565b50505050505050565b61106f613cdc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f39061596d565b60405180910390fd5b600160149054906101000a900460ff161561114c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611143906159ed565b60405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f3ba4758949febc607e14523620298f8b5995b1848492ad7aa083372ac886ae07816040516111bc9190615613565b60405180910390a150565b6111cf6127b2565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611258575060011515600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b611297576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128e90615a4d565b60405180910390fd5b600082116112da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d1906157ed565b60405180910390fd5b6113273330847f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16613ba2909392919063ffffffff16565b600a5442106113a95760008111611373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136a90615a8d565b60405180910390fd5b61137b613016565b61138e8142613b5290919063ffffffff16565b600a8190555080828161139d57fe5b0460098190555061144b565b60006113c042600a5461397e90919063ffffffff16565b905060006113d9600954836138a490919063ffffffff16565b905060006113f284600a54613b5290919063ffffffff16565b90506000611409428361397e90919063ffffffff16565b61141c8785613b5290919063ffffffff16565b8161142357fe5b049050600954811461143857611437613016565b5b81600a8190555080600981905550505050505b7fde89cb17ac7f58f94792b3e91e086ed85403819c24ceea882491f960ccb1a27860095460405161147c9190615aff565b60405180910390a17f8f596a35f0cdefc7e1e1e80e73eced8bfdb8ca9e519ca4042ad0963f19bc239e600a546040516114b59190615aff565b60405180910390a15050565b60006005600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600081600001549050600082600001819055506000826001018190555061159483826003878154811061154457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166139ce9092919063ffffffff16565b8273ffffffffffffffffffffffffffffffffffffffff16843373ffffffffffffffffffffffffffffffffffffffff167f2cac5e20e1541d836381527a43f651851e302817b71dc8e810284e69210c1c6b846040516115f29190615aff565b60405180910390a450505050565b6060600380548060200260200160405190810160405280929190818152602001828054801561168457602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161163a575b5050505050905090565b611696613cdc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611723576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171a9061596d565b60405180910390fd5b858590508888905014801561173d57508383905086869050145b801561174e57508181905084849050145b61178d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117849061598d565b60405180910390fd5b611795613016565b600088889050905060005b81811015611823576118188a8a838181106117b757fe5b905060200201358989848181106117ca57fe5b905060200201358888858181106117dd57fe5b90506020020160208101906117f291906148dc565b8787868181106117fe57fe5b9050602002016020810190611813919061480f565b613ce4565b8060010190506117a0565b50505050505050505050565b611837613cdc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bb9061596d565b60405180910390fd5b600160149054906101000a900460ff1615611914576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190b906159ed565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156119a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199d906158ed565b60405180910390fd5b6000600382815481106119b557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611a1d9190615613565b60206040518083038186803b158015611a3557600080fd5b505afa158015611a49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6d919061492e565b90508173ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401611acc9291906156d4565b602060405180830381600087803b158015611ae657600080fd5b505af1158015611afa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b1e9190614838565b506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ce5494bb846040518263ffffffff1660e01b8152600401611b7c919061575c565b602060405180830381600087803b158015611b9657600080fd5b505af1158015611baa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bce919061488a565b90508073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611c099190615613565b60206040518083038186803b158015611c2157600080fd5b505afa158015611c35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c59919061492e565b8214611c9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c919061588d565b60405180910390fd5b8060038581548110611ca857fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fd5837b673ffaac69230366d3f7eb7cb2ba2b9fd8f2d4e9d0f5e92d3756b1d54684604051611d1f9190615aff565b60405180910390a150505050565b611d35613cdc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db99061596d565b60405180910390fd5b60008111611e05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfc90615a8d565b60405180910390fd5b611e0d613016565b6000611e2442600a5461397e90919063ffffffff16565b90506000611e3d600954836138a490919063ffffffff16565b9050611e528342613b5290919063ffffffff16565b600a81905550611e6d42600a5461397e90919063ffffffff16565b8181611e7557fe5b046009819055507fde89cb17ac7f58f94792b3e91e086ed85403819c24ceea882491f960ccb1a278600954604051611ead9190615aff565b60405180910390a17f8f596a35f0cdefc7e1e1e80e73eced8bfdb8ca9e519ca4042ad0963f19bc239e600a54604051611ee69190615aff565b60405180910390a1505050565b611efb6143d2565b60028281548110611f0857fe5b906000526020600020016040518060600160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016000820160189054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050806020015167ffffffffffffffff1642111561231457600060038381548110611ff257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016120559190615613565b60206040518083038186803b15801561206d57600080fd5b505afa158015612081573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120a5919061492e565b905060008111156121ee576000600a5442111561210357826020015167ffffffffffffffff16600a54116120da5760006120fe565b6120fd836020015167ffffffffffffffff16600a5461397e90919063ffffffff16565b5b612125565b612124836020015167ffffffffffffffff164261397e90919063ffffffff16565b5b90506000600854612161856040015167ffffffffffffffff16612153600954866138a490919063ffffffff16565b6138a490919063ffffffff16565b8161216857fe5b0490506121bc6121978461218a64e8d4a51000856138a490919063ffffffff16565b8161219157fe5b04613e89565b85600001516fffffffffffffffffffffffffffffffff16613f0890919063ffffffff16565b84600001906fffffffffffffffffffffffffffffffff1690816fffffffffffffffffffffffffffffffff168152505050505b6121f742613f7c565b826020019067ffffffffffffffff16908167ffffffffffffffff1681525050816002848154811061222457fe5b9060005260206000200160008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060408201518160000160186101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050827fb22162dac390356a083e49a03154a93d123f935f80aac3763ba0fa470c8fbe5e836020015183856000015160405161230a93929190615c65565b60405180910390a2505b919050565b600082829050905060005b818110156123535761234784848381811061233b57fe5b90506020020135611ef3565b50806001019050612324565b50505050565b60606002805480602002602001604051908101604052809291908181526020016000905b82821015612459578382906000526020600020016040518060600160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016000820160189054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250508152602001906001019061237d565b50505050905090565b61246a613cdc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ee9061596d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600381815481106125c257fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6125f9613cdc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612686576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267d9061596d565b60405180910390fd5b83839050868690501480156126a057508181905084849050145b6126df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d69061598d565b60405180910390fd5b6126e7613016565b600086869050905060005b818110156127625761275788888381811061270957fe5b9050602002013587878481811061271c57fe5b90506020020160208101906127319190614861565b86868581811061273d57fe5b905060200201602081019061275291906148dc565b613ff3565b8060010190506126f2565b5050505050505050565b60066020528060005260406000206000915054906101000a900460ff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6127e36143d2565b6127ec84611ef3565b905060006005600086815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050612859848260000154613b5290919063ffffffff16565b81600001819055506128ae64e8d4a5100061289384600001516fffffffffffffffffffffffffffffffff16876138a490919063ffffffff16565b8161289a57fe5b04826001015461435a90919063ffffffff16565b81600101819055506000600486815481106128c557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461299f578073ffffffffffffffffffffffffffffffffffffffff166344af0fa7878687600087600001546040518663ffffffff1660e01b815260040161296c959493929190615bc0565b600060405180830381600087803b15801561298657600080fd5b505af115801561299a573d6000803e3d6000fd5b505050505b612a0333308760038a815481106129b257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613ba2909392919063ffffffff16565b8373ffffffffffffffffffffffffffffffffffffffff16863373ffffffffffffffffffffffffffffffffffffffff167f02d7e648dd130fc184d383e55bb126ac4c9c60e8f94bf05acdf557ba2d540b4788604051612a619190615aff565b60405180910390a4505050505050565b60095481565b60008211612aba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab19061584d565b60405180910390fd5b6000612ad1836009546138a490919063ffffffff16565b905081811115612b16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0d906158ad565b60405180910390fd5b612b2b83600a54613b5290919063ffffffff16565b600a81905550612b7e3330837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16613ba2909392919063ffffffff16565b7f8f596a35f0cdefc7e1e1e80e73eced8bfdb8ca9e519ca4042ad0963f19bc239e600a54604051612baf9190615aff565b60405180910390a1505050565b6005602052816000526040600020602052806000526040600020600091509150508060000154908060010154905082565b6000612bf76143d2565b60028481548110612c0457fe5b906000526020600020016040518060600160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016000820160189054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681525050905060006005600086815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600082600001516fffffffffffffffffffffffffffffffff169050600060038781548110612d4757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612daa9190615613565b60206040518083038186803b158015612dc257600080fd5b505afa158015612dd6573d6000803e3d6000fd5b505050506040