UNPKG

@aave/governance-crosschain-bridges

Version:
638 lines 50.5 kB
{ "_format": "hh-sol-artifact-1", "contractName": "SimpleBridgeExecutor", "sourceName": "contracts/mocks/SimpleBridgeExecutor.sol", "abi": [ { "inputs": [ { "internalType": "uint256", "name": "delay", "type": "uint256" }, { "internalType": "uint256", "name": "gracePeriod", "type": "uint256" }, { "internalType": "uint256", "name": "minimumDelay", "type": "uint256" }, { "internalType": "uint256", "name": "maximumDelay", "type": "uint256" }, { "internalType": "address", "name": "guardian", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "DelayLongerThanMax", "type": "error" }, { "inputs": [], "name": "DelayShorterThanMin", "type": "error" }, { "inputs": [], "name": "DuplicateAction", "type": "error" }, { "inputs": [], "name": "EmptyTargets", "type": "error" }, { "inputs": [], "name": "FailedActionExecution", "type": "error" }, { "inputs": [], "name": "GracePeriodTooShort", "type": "error" }, { "inputs": [], "name": "InconsistentParamsLength", "type": "error" }, { "inputs": [], "name": "InsufficientBalance", "type": "error" }, { "inputs": [], "name": "InvalidActionsSetId", "type": "error" }, { "inputs": [], "name": "InvalidInitParams", "type": "error" }, { "inputs": [], "name": "MaximumDelayTooShort", "type": "error" }, { "inputs": [], "name": "MinimumDelayTooLong", "type": "error" }, { "inputs": [], "name": "NotGuardian", "type": "error" }, { "inputs": [], "name": "OnlyCallableByThis", "type": "error" }, { "inputs": [], "name": "OnlyQueuedActions", "type": "error" }, { "inputs": [], "name": "TimelockNotFinished", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "ActionsSetCanceled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "id", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "initiatorExecution", "type": "address" }, { "indexed": false, "internalType": "bytes[]", "name": "returnedData", "type": "bytes[]" } ], "name": "ActionsSetExecuted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "id", "type": "uint256" }, { "indexed": false, "internalType": "address[]", "name": "targets", "type": "address[]" }, { "indexed": false, "internalType": "uint256[]", "name": "values", "type": "uint256[]" }, { "indexed": false, "internalType": "string[]", "name": "signatures", "type": "string[]" }, { "indexed": false, "internalType": "bytes[]", "name": "calldatas", "type": "bytes[]" }, { "indexed": false, "internalType": "bool[]", "name": "withDelegatecalls", "type": "bool[]" }, { "indexed": false, "internalType": "uint256", "name": "executionTime", "type": "uint256" } ], "name": "ActionsSetQueued", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldDelay", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newDelay", "type": "uint256" } ], "name": "DelayUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldGracePeriod", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newGracePeriod", "type": "uint256" } ], "name": "GracePeriodUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "oldGuardian", "type": "address" }, { "indexed": false, "internalType": "address", "name": "newGuardian", "type": "address" } ], "name": "GuardianUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldMaximumDelay", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newMaximumDelay", "type": "uint256" } ], "name": "MaximumDelayUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldMinimumDelay", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newMinimumDelay", "type": "uint256" } ], "name": "MinimumDelayUpdate", "type": "event" }, { "inputs": [ { "internalType": "uint256", "name": "actionsSetId", "type": "uint256" } ], "name": "cancel", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "actionsSetId", "type": "uint256" } ], "name": "execute", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "executeDelegateCall", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" }, { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "actionsSetId", "type": "uint256" } ], "name": "getActionsSetById", "outputs": [ { "components": [ { "internalType": "address[]", "name": "targets", "type": "address[]" }, { "internalType": "uint256[]", "name": "values", "type": "uint256[]" }, { "internalType": "string[]", "name": "signatures", "type": "string[]" }, { "internalType": "bytes[]", "name": "calldatas", "type": "bytes[]" }, { "internalType": "bool[]", "name": "withDelegatecalls", "type": "bool[]" }, { "internalType": "uint256", "name": "executionTime", "type": "uint256" }, { "internalType": "bool", "name": "executed", "type": "bool" }, { "internalType": "bool", "name": "canceled", "type": "bool" } ], "internalType": "struct IExecutorBase.ActionsSet", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getActionsSetCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "actionsSetId", "type": "uint256" } ], "name": "getCurrentState", "outputs": [ { "internalType": "enum IExecutorBase.ActionsSetState", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getDelay", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getGracePeriod", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getGuardian", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getMaximumDelay", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getMinimumDelay", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "actionHash", "type": "bytes32" } ], "name": "isActionQueued", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "targets", "type": "address[]" }, { "internalType": "uint256[]", "name": "values", "type": "uint256[]" }, { "internalType": "string[]", "name": "signatures", "type": "string[]" }, { "internalType": "bytes[]", "name": "calldatas", "type": "bytes[]" }, { "internalType": "bool[]", "name": "withDelegatecalls", "type": "bool[]" } ], "name": "queue", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "receiveFunds", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "delay", "type": "uint256" } ], "name": "updateDelay", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "gracePeriod", "type": "uint256" } ], "name": "updateGracePeriod", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "guardian", "type": "address" } ], "name": "updateGuardian", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "maximumDelay", "type": "uint256" } ], "name": "updateMaximumDelay", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "minimumDelay", "type": "uint256" } ], "name": "updateMinimumDelay", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ], "bytecode": "0x60806040523480156200001157600080fd5b506040516200253e3803806200253e833981016040819052620000349162000233565b84848484846102588410806200004a5750818310155b806200005557508285105b806200006057508185115b156200007f57604051630a5addd160e21b815260040160405180910390fd5b6200008a85620000c6565b620000958462000107565b620000a08362000148565b620000ab8262000189565b620000b681620001ca565b5050505050505050505062000290565b60005460408051918252602082018390527f43de56b886294fc29767e51a88b5c67fd24aefebc5ddf813b1d9b91b1df38444910160405180910390a1600055565b60015460408051918252602082018390527f9953f3a71052edcd4ae7a0f97302839d1dda32ab93c1039207c91c866b094f72910160405180910390a1600155565b60025460408051918252602082018390527fc534cdcbe9b52100810d787afd57e4174322776fcb58872ea706f23e9319fa8d910160405180910390a1600255565b60035460408051918252602082018390527faf46013422363beb5e6f00ab923cffe3574670494c864de2828b9d7c201fdde5910160405180910390a1600355565b600454604080516001600160a01b03928316815291831660208301527f85bd8788d3c4a160f0f6254229589f137d5633a870dcb46f99ffe07b4da1894b910160405180910390a1600480546001600160a01b0319166001600160a01b0392909216919091179055565b600080600080600060a086880312156200024c57600080fd5b855160208701516040880151606089015160808a0151939850919650945092506001600160a01b03811681146200028257600080fd5b809150509295509295909350565b61229e80620002a06000396000f3fe6080604052600436106101135760003560e01c8063b1fc8796116100a0578063d9a4cbdf11610064578063d9a4cbdf146102e0578063dbd1838814610300578063e471b02614610315578063fc52539514610335578063fe0d94c11461035557600080fd5b8063b1fc879614610228578063b3c82e9214610268578063b68df16d14610295578063cebc9a82146102b6578063d89aac39146102cb57600080fd5b80635748c130116100e75780635748c1301461017e5780635ab98d5a146101ab57806364d62353146101cb5780638533f337146101eb578063a75b87d21461020057600080fd5b80625c33e11461011857806303c276211461011a578063083a73a21461013e57806340e58ee51461015e575b600080fd5b005b34801561012657600080fd5b506002545b6040519081526020015b60405180910390f35b34801561014a57600080fd5b50610118610159366004611876565b610368565b34801561016a57600080fd5b50610118610179366004611876565b6103c1565b34801561018a57600080fd5b5061019e610199366004611876565b61066c565b60405161013591906118a5565b3480156101b757600080fd5b506101186101c6366004611876565b610702565b3480156101d757600080fd5b506101186101e6366004611876565b61074e565b3480156101f757600080fd5b5060055461012b565b34801561020c57600080fd5b506004546040516001600160a01b039091168152602001610135565b34801561023457600080fd5b50610258610243366004611876565b60009081526007602052604090205460ff1690565b6040519015158152602001610135565b34801561027457600080fd5b50610288610283366004611876565b610780565b6040516101359190611a24565b6102a86102a3366004611b0c565b610af3565b604051610135929190611b8f565b3480156102c257600080fd5b5060005461012b565b3480156102d757600080fd5b5060035461012b565b3480156102ec57600080fd5b506101186102fb366004611ee7565b610b84565b34801561030c57600080fd5b5060015461012b565b34801561032157600080fd5b50610118610330366004611876565b610b98565b34801561034157600080fd5b50610118610350366004611fb9565b610be3565b610118610363366004611876565b610c0c565b33301461038857604051631dbf5f2360e01b815260040160405180910390fd5b60025481116103aa5760405163cb2f2b2360e01b815260040160405180910390fd5b6103b381610f34565b6103be600054610f75565b50565b6004546001600160a01b031633146103ec576040516377b6878160e11b815260040160405180910390fd5b60006103f78261066c565b60038111156104085761040861188f565b146104265760405163050ac78b60e11b815260040160405180910390fd5b60008181526006602081905260408220908101805461ff001916610100179055805490915b8181101561063b5761063383600001828154811061046b5761046b611fdb565b6000918252602090912001546001850180546001600160a01b03909216918490811061049957610499611fdb565b90600052602060002001548560020184815481106104b9576104b9611fdb565b9060005260206000200180546104ce90611ff1565b80601f01602080910402602001604051908101604052809291908181526020018280546104fa90611ff1565b80156105475780601f1061051c57610100808354040283529160200191610547565b820191906000526020600020905b81548152906001019060200180831161052a57829003601f168201915b505050505086600301858154811061056157610561611fdb565b90600052602060002001805461057690611ff1565b80601f01602080910402602001604051908101604052809291908181526020018280546105a290611ff1565b80156105ef5780601f106105c4576101008083540402835291602001916105ef565b820191906000526020600020905b8154815290600101906020018083116105d257829003601f168201915b5050505050876005015488600401878154811061060e5761060e611fdb565b90600052602060002090602091828204019190069054906101000a900460ff16610fbb565b60010161044b565b5060405183907f0743c673685efcbf3db8591d9e1d98336bc844fe4f4599e6f7efb6d71c02563490600090a2505050565b600081600554116106905760405163e5bc0e7b60e01b815260040160405180910390fd5b600082815260066020819052604090912090810154610100900460ff16156106bb5750600292915050565b600681015460ff16156106d15750600192915050565b60015481600501546106e39190612026565b4211156106f35750600392915050565b50600092915050565b50919050565b33301461072257604051631dbf5f2360e01b815260040160405180910390fd5b610258811015610745576040516301f6f9e560e71b815260040160405180910390fd5b6103be8161100d565b33301461076e57604051631dbf5f2360e01b815260040160405180910390fd5b61077781610f75565b6103be8161104e565b6107cc6040518061010001604052806060815260200160608152602001606081526020016060815260200160608152602001600081526020016000151581526020016000151581525090565b60008281526006602090815260409182902082518154610120938102820184019094526101008101848152909391928492849184018282801561083857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161081a575b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561089057602002820191906000526020600020905b81548152602001906001019080831161087c575b5050505050815260200160028201805480602002602001604051908101604052809291908181526020016000905b8282101561096a5783829060005260206000200180546108dd90611ff1565b80601f016020809104026020016040519081016040528092919081815260200182805461090990611ff1565b80156109565780601f1061092b57610100808354040283529160200191610956565b820191906000526020600020905b81548152906001019060200180831161093957829003601f168201915b5050505050815260200190600101906108be565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b82821015610a435783829060005260206000200180546109b690611ff1565b80601f01602080910402602001604051908101604052809291908181526020018280546109e290611ff1565b8015610a2f5780601f10610a0457610100808354040283529160200191610a2f565b820191906000526020600020905b815481529060010190602001808311610a1257829003601f168201915b505050505081526020019060010190610997565b50505050815260200160048201805480602002602001604051908101604052809291908181526020018280548015610aba57602002820191906000526020600020906000905b825461010083900a900460ff161515815260206001928301818104948501949093039092029101808411610a895790505b50505091835250506005820154602082015260069091015460ff8082161515604084015261010090910416151560609091015292915050565b60006060333014610b1757604051631dbf5f2360e01b815260040160405180910390fd5b60006060866001600160a01b03168686604051610b3592919061204c565b600060405180830381855af49150503d8060008114610b70576040519150601f19603f3d011682016040523d82523d6000602084013e610b75565b606091505b50909890975095505050505050565b610b91858585858561108f565b5050505050565b333014610bb857604051631dbf5f2360e01b815260040160405180910390fd5b6003548110610bda576040516301b1029b60e61b815260040160405180910390fd5b6103b3816112fc565b333014610c0357604051631dbf5f2360e01b815260040160405180910390fd5b6103be8161133d565b6000610c178261066c565b6003811115610c2857610c2861188f565b14610c465760405163050ac78b60e11b815260040160405180910390fd5b60008181526006602052604090206005810154421015610c7957604051635192dd5560e01b815260040160405180910390fd5b60068101805460ff19166001179055805460008167ffffffffffffffff811115610ca557610ca5611bb2565b604051908082528060200260200182016040528015610cd857816020015b6060815260200190600190039081610cc35790505b50905060005b82811015610eeb57610ec6846000018281548110610cfe57610cfe611fdb565b6000918252602090912001546001860180546001600160a01b039092169184908110610d2c57610d2c611fdb565b9060005260206000200154866002018481548110610d4c57610d4c611fdb565b906000526020600020018054610d6190611ff1565b80601f0160208091040260200160405190810160405280929190818152602001828054610d8d90611ff1565b8015610dda5780601f10610daf57610100808354040283529160200191610dda565b820191906000526020600020905b815481529060010190602001808311610dbd57829003601f168201915b5050505050876003018581548110610df457610df4611fdb565b906000526020600020018054610e0990611ff1565b80601f0160208091040260200160405190810160405280929190818152602001828054610e3590611ff1565b8015610e825780601f10610e5757610100808354040283529160200191610e82565b820191906000526020600020905b815481529060010190602001808311610e6557829003601f168201915b50505050508860050154896004018781548110610ea157610ea1611fdb565b90600052602060002090602091828204019190069054906101000a900460ff166113a6565b828281518110610ed857610ed8611fdb565b6020908102919091010152600101610cde565b50336001600160a01b0316847ff5efc4bb09a12b6c9561a7e7ab02938a72a4351316b473d574fdaaa89c43eb9a83604051610f26919061205c565b60405180910390a350505050565b60035460408051918252602082018390527faf46013422363beb5e6f00ab923cffe3574670494c864de2828b9d7c201fdde5910160405180910390a1600355565b600254811015610f98576040516361759e6560e01b815260040160405180910390fd5b6003548111156103be576040516386dac63560e01b815260040160405180910390fd5b6000868686868686604051602001610fd89695949392919061206f565b60408051601f198184030181529181528151602092830120600090815260079092529020805460ff1916905550505050505050565b60015460408051918252602082018390527f9953f3a71052edcd4ae7a0f97302839d1dda32ab93c1039207c91c866b094f72910160405180910390a1600155565b60005460408051918252602082018390527f43de56b886294fc29767e51a88b5c67fd24aefebc5ddf813b1d9b91b1df38444910160405180910390a1600055565b84516110ae57604051636a8e3e9360e11b815260040160405180910390fd5b84518451811415806110c1575083518114155b806110cd575082518114155b806110d9575081518114155b156110f757604051630d10f63b60e01b815260040160405180910390fd5b600554600080546111089042612026565b600580546001019055905060005b8381101561122957600089828151811061113257611132611fdb565b602002602001015189838151811061114c5761114c611fdb565b602002602001015189848151811061116657611166611fdb565b602002602001015189858151811061118057611180611fdb565b6020026020010151868a878151811061119b5761119b611fdb565b60200260200101516040516020016111b89695949392919061206f565b6040516020818303038152906040528051906020012090506111e98160009081526007602052604090205460ff1690565b1561120757604051633b2f04e360e21b815260040160405180910390fd5b6000908152600760205260409020805460ff1916600190811790915501611116565b5060008281526006602090815260409091208951909161124d9183918c019061158c565b50875161126390600183019060208b01906115f1565b50865161127990600283019060208a019061162c565b50855161128f9060038301906020890190611685565b5084516112a590600483019060208801906116de565b50818160050181905550827f0325966a4aa089b42f4766ec96f599405102bb309e065f24874aff59082dbc8b8a8a8a8a8a886040516112e9969594939291906120c3565b60405180910390a2505050505050505050565b60025460408051918252602082018390527fc534cdcbe9b52100810d787afd57e4174322776fcb58872ea706f23e9319fa8d910160405180910390a1600255565b600454604080516001600160a01b03928316815291831660208301527f85bd8788d3c4a160f0f6254229589f137d5633a870dcb46f99ffe07b4da1894b910160405180910390a1600480546001600160a01b0319166001600160a01b0392909216919091179055565b6060854710156113c957604051631e9acf1760e31b815260040160405180910390fd5b60008787878787876040516020016113e69695949392919061206f565b60408051601f198184030181529181528151602092830120600081815260079093529120805460ff191690558651909150606090611425575084611451565b86805190602001208660405160200161143f92919061216a565b60405160208183030381529060405290505b6000606085156114d35760405163b68df16d60e01b8152309063b68df16d908c90611482908f90889060040161219b565b60006040518083038185885af11580156114a0573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526114c991908101906121bf565b9092509050611535565b8a6001600160a01b03168a846040516114ec919061224c565b60006040518083038185875af1925050503d8060008114611529576040519150601f19603f3d011682016040523d82523d6000602084013e61152e565b606091505b5090925090505b61153f828261154e565b9b9a5050505050505050505050565b6060821561155d575080611586565b81511561156d5781518083602001fd5b6040516332f63ed360e21b815260040160405180910390fd5b92915050565b8280548282559060005260206000209081019282156115e1579160200282015b828111156115e157825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906115ac565b506115ed92915061177a565b5090565b8280548282559060005260206000209081019282156115e1579160200282015b828111156115e1578251825591602001919060010190611611565b828054828255906000526020600020908101928215611679579160200282015b82811115611679578251805161166991849160209091019061178f565b509160200191906001019061164c565b506115ed929150611802565b8280548282559060005260206000209081019282156116d2579160200282015b828111156116d257825180516116c291849160209091019061178f565b50916020019190600101906116a5565b506115ed92915061181f565b82805482825590600052602060002090601f016020900481019282156115e15791602002820160005b8382111561174457835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302611707565b80156117715782816101000a81549060ff0219169055600101602081600001049283019260010302611744565b50506115ed9291505b5b808211156115ed576000815560010161177b565b82805461179b90611ff1565b90600052602060002090601f0160209004810192826117bd57600085556115e1565b82601f106117d657805160ff19168380011785556115e1565b828001600101855582156115e157918201828111156115e1578251825591602001919060010190611611565b808211156115ed576000611816828261183c565b50600101611802565b808211156115ed576000611833828261183c565b5060010161181f565b50805461184890611ff1565b6000825580601f10611858575050565b601f0160209004906000526020600020908101906103be919061177a565b60006020828403121561188857600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b60208101600483106118c757634e487b7160e01b600052602160045260246000fd5b91905290565b600081518084526020808501945080840160005b838110156119065781516001600160a01b0316875295820195908201906001016118e1565b509495945050505050565b600081518084526020808501945080840160005b8381101561190657815187529582019590820190600101611925565b60005b8381101561195c578181015183820152602001611944565b8381111561196b576000848401525b50505050565b60008151808452611989816020860160208601611941565b601f01601f19169290920160200192915050565b600081518084526020808501808196508360051b8101915082860160005b858110156119e55782840389526119d3848351611971565b988501989350908401906001016119bb565b5091979650505050505050565b600081518084526020808501945080840160005b83811015611906578151151587529582019590820190600101611a06565b6020815260008251610100806020850152611a436101208501836118cd565b91506020850151601f1980868503016040870152611a618483611911565b93506040870151915080868503016060870152611a7e848361199d565b93506060870151915080868503016080870152611a9b848361199d565b935060808701519150808685030160a087015250611ab983826119f2565b92505060a085015160c085015260c0850151611ad960e086018215159052565b5060e0850151801515858301525090949350505050565b80356001600160a01b0381168114611b0757600080fd5b919050565b600080600060408486031215611b2157600080fd5b611b2a84611af0565b9250602084013567ffffffffffffffff80821115611b4757600080fd5b818601915086601f830112611b5b57600080fd5b813581811115611b6a57600080fd5b876020828501011115611b7c57600080fd5b6020830194508093505050509250925092565b8215158152604060208201526000611baa6040830184611971565b949350505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611bf157611bf1611bb2565b604052919050565b600067ffffffffffffffff821115611c1357611c13611bb2565b5060051b60200190565b600082601f830112611c2e57600080fd5b81356020611c43611c3e83611bf9565b611bc8565b82815260059290921b84018101918181019086841115611c6257600080fd5b8286015b84811015611c8457611c7781611af0565b8352918301918301611c66565b509695505050505050565b600082601f830112611ca057600080fd5b81356020611cb0611c3e83611bf9565b82815260059290921b84018101918181019086841115611ccf57600080fd5b8286015b84811015611c845780358352918301918301611cd3565b600067ffffffffffffffff821115611d0457611d04611bb2565b50601f01601f191660200190565b6000611d20611c3e84611cea565b9050828152838383011115611d3457600080fd5b828260208301376000602084830101529392505050565b600082601f830112611d5c57600080fd5b81356020611d6c611c3e83611bf9565b82815260059290921b84018101918181019086841115611d8b57600080fd5b8286015b84811015611c8457803567ffffffffffffffff811115611daf5760008081fd5b8701603f81018913611dc15760008081fd5b611dd2898683013560408401611d12565b845250918301918301611d8f565b600082601f830112611df157600080fd5b81356020611e01611c3e83611bf9565b82815260059290921b84018101918181019086841115611e2057600080fd5b8286015b84811015611c8457803567ffffffffffffffff811115611e445760008081fd5b8701603f81018913611e565760008081fd5b611e67898683013560408401611d12565b845250918301918301611e24565b80151581146103be57600080fd5b600082601f830112611e9457600080fd5b81356020611ea4611c3e83611bf9565b82815260059290921b84018101918181019086841115611ec357600080fd5b8286015b84811015611c84578035611eda81611e75565b8352918301918301611ec7565b600080600080600060a08688031215611eff57600080fd5b853567ffffffffffffffff80821115611f1757600080fd5b611f2389838a01611c1d565b96506020880135915080821115611f3957600080fd5b611f4589838a01611c8f565b95506040880135915080821115611f5b57600080fd5b611f6789838a01611d4b565b94506060880135915080821115611f7d57600080fd5b611f8989838a01611de0565b93506080880135915080821115611f9f57600080fd5b50611fac88828901611e83565b9150509295509295909350565b600060208284031215611fcb57600080fd5b611fd482611af0565b9392505050565b634e487b7160e01b600052603260045260246000fd5b600181811c9082168061200557607f821691505b602082108114156106fc57634e487b7160e01b600052602260045260246000fd5b6000821982111561204757634e487b7160e01b600052601160045260246000fd5b500190565b8183823760009101908152919050565b602081526000611fd4602083018461199d565b60018060a01b038716815285602082015260c06040820152600061209660c0830187611971565b82810360608401526120a88187611971565b6080840195909552505090151560a090910152949350505050565b60c0808252875190820181905260009060209060e0840190828b01845b828110156121055781516001600160a01b0316845292840192908401906001016120e0565b50505083810382850152612119818a611911565b915050828103604084015261212e818861199d565b90508281036060840152612142818761199d565b9050828103608084015261215681866119f2565b9150508260a0830152979650505050505050565b6001600160e01b031983168152815160009061218d816004850160208701611941565b919091016004019392505050565b6001600160a01b0383168152604060208201819052600090611baa90830184611971565b600080604083850312156121d257600080fd5b82516121dd81611e75565b602084015190925067ffffffffffffffff8111156121fa57600080fd5b8301601f8101851361220b57600080fd5b8051612219611c3e82611cea565b81815286602083850101111561222e57600080fd5b61223f826020830160208601611941565b8093505050509250929050565b6000825161225e818460208701611941565b919091019291505056fea26469706673582212204f8af04048fa6ba9e829a0ae455380d294761ceb4615eb19c4aa612ff28639d864736f6c634300080a0033", "deployedBytecode": "0x6080604052600436106101135760003560e01c8063b1fc8796116100a0578063d9a4cbdf11610064578063d9a4cbdf146102e0578063dbd1838814610300578063e471b02614610315578063fc52539514610335578063fe0d94c11461035557600080fd5b8063b1fc879614610228578063b3c82e9214610268578063b68df16d14610295578063cebc9a82146102b6578063d89aac39146102cb57600080fd5b80635748c130116100e75780635748c1301461017e5780635ab98d5a146101ab57806364d62353146101cb5780638533f337146101eb578063a75b87d21461020057600080fd5b80625c33e11461011857806303c276211461011a578063083a73a21461013e57806340e58ee51461015e575b600080fd5b005b34801561012657600080fd5b506002545b6040519081526020015b60405180910390f35b34801561014a57600080fd5b50610118610159366004611876565b610368565b34801561016a57600080fd5b50610118610179366004611876565b6103c1565b34801561018a57600080fd5b5061019e610199366004611876565b61066c565b60405161013591906118a5565b3480156101b757600080fd5b506101186101c6366004611876565b610702565b3480156101d757600080fd5b506101186101e6366004611876565b61074e565b3480156101f757600080fd5b5060055461012b565b34801561020c57600080fd5b506004546040516001600160a01b039091168152602001610135565b34801561023457600080fd5b50610258610243366004611876565b60009081526007602052604090205460ff1690565b6040519015158152602001610135565b34801561027457600080fd5b50610288610283366004611876565b610780565b6040516101359190611a24565b6102a86102a3366004611b0c565b610af3565b604051610135929190611b8f565b3480156102c257600080fd5b5060005461012b565b3480156102d757600080fd5b5060035461012b565b3480156102ec57600080fd5b506101186102fb366004611ee7565b610b84565b34801561030c57600080fd5b5060015461012b565b34801561032157600080fd5b50610118610330366004611876565b610b98565b34801561034157600080fd5b50610118610350366004611fb9565b610be3565b610118610363366004611876565b610c0c565b33301461038857604051631dbf5f2360e01b815260040160405180910390fd5b60025481116103aa5760405163cb2f2b2360e01b815260040160405180910390fd5b6103b381610f34565b6103be600054610f75565b50565b6004546001600160a01b031633146103ec576040516377b6878160e11b815260040160405180910390fd5b60006103f78261066c565b60038111156104085761040861188f565b146104265760405163050ac78b60e11b815260040160405180910390fd5b60008181526006602081905260408220908101805461ff001916610100179055805490915b8181101561063b5761063383600001828154811061046b5761046b611fdb565b6000918252602090912001546001850180546001600160a01b03909216918490811061049957610499611fdb565b90600052602060002001548560020184815481106104b9576104b9611fdb565b9060005260206000200180546104ce90611ff1565b80601f01602080910402602001604051908101604052809291908181526020018280546104fa90611ff1565b80156105475780601f1061051c57610100808354040283529160200191610547565b820191906000526020600020905b81548152906001019060200180831161052a57829003601f168201915b505050505086600301858154811061056157610561611fdb565b90600052602060002001805461057690611ff1565b80601f01602080910402602001604051908101604052809291908181526020018280546105a290611ff1565b80156105ef5780601f106105c4576101008083540402835291602001916105ef565b820191906000526020600020905b8154815290600101906020018083116105d257829003601f168201915b5050505050876005015488600401878154811061060e5761060e611fdb565b90600052602060002090602091828204019190069054906101000a900460ff16610fbb565b60010161044b565b5060405183907f0743c673685efcbf3db8591d9e1d98336bc844fe4f4599e6f7efb6d71c02563490600090a2505050565b600081600554116106905760405163e5bc0e7b60e01b815260040160405180910390fd5b600082815260066020819052604090912090810154610100900460ff16156106bb5750600292915050565b600681015460ff16156106d15750600192915050565b60015481600501546106e39190612026565b4211156106f35750600392915050565b50600092915050565b50919050565b33301461072257604051631dbf5f2360e01b815260040160405180910390fd5b610258811015610745576040516301f6f9e560e71b815260040160405180910390fd5b6103be8161100d565b33301461076e57604051631dbf5f2360e01b815260040160405180910390fd5b61077781610f75565b6103be8161104e565b6107cc6040518061010001604052806060815260200160608152602001606081526020016060815260200160608152602001600081526020016000151581526020016000151581525090565b60008281526006602090815260409182902082518154610120938102820184019094526101008101848152909391928492849184018282801561083857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161081a575b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561089057602002820191906000526020600020905b81548152602001906001019080831161087c575b5050505050815260200160028201805480602002602001604051908101604052809291908181526020016000905b8282101561096a5783829060005260206000200180546108dd90611ff1565b80601f016020809104026020016040519081016040528092919081815260200182805461090990611ff1565b80156109565780601f1061092b57610100808354040283529160200191610956565b820191906000526020600020905b81548152906001019060200180831161093957829003601f168201915b5050505050815260200190600101906108be565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b82821015610a435783829060005260206000200180546109b690611ff1565b80601f01602080910402602001604051908101604052809291908181526020018280546109e290611ff1565b8015610a2f5780601f10610a0457610100808354040283529160200191610a2f565b820191906000526020600020905b815481529060010190602001808311610a1257829003601f168201915b505050505081526020019060010190610997565b50505050815260200160048201805480602002602001604051908101604052809291908181526020018280548015610aba57602002820191906000526020600020906000905b825461010083900a900460ff161515815260206001928301818104948501949093039092029101808411610a895790505b50505091835250506005820154602082015260069091015460ff8082161515604084015261010090910416151560609091015292915050565b60006060333014610b1757604051631dbf5f2360e01b815260040160405180910390fd5b60006060866001600160a01b03168686604051610b3592919061204c565b600060405180830381855af49150503d8060008114610b70576040519150601f19603f3d011682016040523d82523d6000602084013e610b75565b606091505b50909890975095505050505050565b610b91858585858561108f565b5050505050565b333014610bb857604051631dbf5f2360e01b815260040160405180910390fd5b6003548110610bda576040516301b1029b60e61b815260040160405180910390fd5b6103b3816112fc565b333014610c0357604051631dbf5f2360e01b815260040160405180910390fd5b6103be8161133d565b6000610c178261066c565b6003811115610c2857610c2861188f565b14610c465760405163050ac78b60e11b815260040160405180910390fd5b60008181526006602052604090206005810154421015610c7957604051635192dd5560e01b815260040160405180910390fd5b60068101805460ff19166001179055805460008167ffffffffffffffff811115610ca557610ca5611bb2565b604051908082528060200260200182016040528015610cd857816020015b6060815260200190600190039081610cc35790505b50905060005b82811015610eeb57610ec6846000018281548110610cfe57610cfe611fdb565b6000918252602090912001546001860180546001600160a01b039092169184908110610d2c57610d2c611fdb565b9060005260206000200154866002018481548110610d4c57610d4c611fdb565b906000526020600020018054610d6190611ff1565b80601f0160208091040260200160405190810160405280929190818152602001828054610d8d90611ff1565b8015610dda5780601f10610daf57610100808354040283529160200191610dda565b820191906000526020600020905b815481529060010190602001808311610dbd57829003601f168201915b5050505050876003018581548110610df457610df4611fdb565b906000526020600020018054610e0990611ff1565b80601f0160208091040260200160405190810160405280929190818152602001828054610e3590611ff1565b8015610e825780601f10610e5757610100808354040283529160200191610e82565b820191906000526020600020905b815481529060010190602001808311610e6557829003601f168201915b50505050508860050154896004018781548110610ea157610ea1611fdb565b90600052602060002090602091828204019190069054906101000a900460ff166113a6565b828281518110610ed857610ed8611fdb565b6020908102919091010152600101610cde565b50336001600160a01b0316847ff5efc4bb09a12b6c9561a7e7ab02938a72a4351316b473d574fdaaa89c43eb9a83604051610f26919061205c565b60405180910390a350505050565b60035460408051918252602082018390527faf46013422363beb5e6f00ab923cffe3574670494c864de2828b9d7c201fdde5910160405180910390a1600355565b600254811015610f98576040516361759e6560e01b815260040160405180910390fd5b6003548111156103be576040516386dac63560e01b815260040160405180910390fd5b6000868686868686604051602001610fd89695949392919061206f565b60408051601f198184030181529181528151602092830120600090815260079092529020805460ff1916905550505050505050565b60015460408051918252602082018390527f9953f3a71052edcd4ae7a0f97302839d1dda32ab93c1039207c91c866b094f72910160405180910390a1600155565b60005460408051918252602082018390527f43de56b886294fc29767e51a88b5c67fd24aefebc5ddf813b1d9b91b1df38444910160405180910390a1600055565b84516110ae57604051636a8e3e9360e11b815260040160405180910390fd5b84518451811415806110c1575083518114155b806110cd575082518114155b806110d9575081518114155b156110f757604051630d10f63b60e01b815260040160405180910390fd5b600554600080546111089042612026565b600580546001019055905060005b8381101561122957600089828151811061113257611132611fdb565b602002602001015189838151811061114c5761114c611fdb565b602002602001015189848151811061116657611166611fdb565b602002602001015189858151811061118057611180611fdb565b6020026020010151868a878151811061119b5761119b611fdb565b60200260200101516040516020016111b89695949392919061206f565b6040516020818303038152906040528051906020012090506111e98160009081526007602052604090205460ff1690565b1561120757604051633b2f04e360e21b815260040160405180910390fd5b6000908152600760205260409020805460ff1916600190811790915501611116565b5060008281526006602090815260409091208951909161124d9183918c019061158c565b50875161126390600183019060208b01906115f1565b50865161127990600283019060208a019061162c565b50855161128f9060038301906020890190611685565b5084516112a590600483019060208801906116de565b50818160050181905550827f0325966a4aa089b42f4766ec96f599405102bb309e065f24874aff59082dbc8b8a8a8a8a8a886040516112e9969594939291906120c3565b60405180910390a2505050505050505050565b60025460408051918252602082018390527fc534cdcbe9b52100810d787afd57e4174322776fcb58872ea706f23e9319fa8d910160405180910390a1600255565b600454604080516001600160a01b03928316815291831660208301527f85bd8788d3c4a160f0f6254229589f137d5633a870dcb46f99ffe07b4da1894b910160405180910390a1600480546001600160a01b0319166001600160a01b0392909216919091179055565b6060854710156113c957604051631e9acf1760e31b815260040160405180910390fd5b60008787878787876040516020016113e69695949392919061206f565b60408051601f198184030181529181528151602092830120600081815260079093529120805460ff191690558651909150606090611425575084611451565b86805190602001208660405160200161143f92919061216a565b60405160208183030381529060405290505b6000606085156114d35760405163b68df16d60e01b8152309063b68df16d908c90611482908f90889060040161219b565b60006040518083038185885af11580156114a0573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526114c991908101906121bf565b9092509050611535565b8a6001600160a01b03168a846040516114ec919061224c565b60006040518083038185875af1925050503d8060008114611529576040519150601f19603f3d011682016040523d82523d6000602084013e61152e565b606091505b5090925090505b61153f828261154e565b9b9a5050505050505050505050565b6060821561155d575080611586565b81511561156d5781518083602001fd5b6040516332f63ed360e21b815260040160405180910390fd5b92915050565b8280548282559060005260206000209081019282156115e1579160200282015b828111156115e157825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906115ac565b506115ed92915061177a565b5090565b8280548282559060005260206000209081019282156115e1579160200282015b828111156115e1578251825591602001919060010190611611565b828054828255906000526020600020908101928215611679579160200282015b82811115611679578251805161166991849160209091019061178f565b509160200191906001019061164c565b506115ed929150611802565b8280548282559060005260206000209081019282156116d2579160200282015b828111156116d257825180516116c291849160209091019061178f565b50916020019190600101906116a5565b506115ed92915061181f565b82805482825590600052602060002090601f016020900481019282156115e15791602002820160005b8382111561174457835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302611707565b80156117715782816101000a81549060ff0219169055600101602081600001049283019260010302611744565b50506115ed9291505b5b808211156115ed576000815560010161177b565b82805461179b90611ff1565b90600052602060002090601f0160209004810192826117bd57600085556115e1565b82601f106117d657805160ff19168380011785556115e1565b828001600101855582156115e157918201828111156115e1578251825591602001919060010190611611565b808211156115ed576000611816828261183c565b50600101611802565b808211156115ed576000611833828261183c565b5060010161181f565b50805461184890611ff1565b6000825580601f10611858575050565b601f0160209004906000526020600020908101906103be919061177a565b60006020828403121561188857600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b60208101600483106118c757634e487b7160e01b600052602160045260246000fd5b91905290565b600081518084526020808501945080840160005b838110156119065781516001600160a01b0316875295820195908201906001016118e1565b509495945050505050565b600081518084526020808501945080840160005b8381101561190657815187529582019590820190600101611925565b60005b8381101561195c578181015183820152602001611944565b8381111561196b576000848401525b50505050565b60008151808452611989816020860160208601611941565b601f01601f19169290920160200192915050565b600081518084526020808501808196508360051b8101915082860160005b858110156119e55782840389526119d3848351611971565b988501989350908401906001016119bb565b5091979650505050505050565b600081518084526020808501945080840160005b83811015611906578151151587529582019590820190600101611a06565b6020815260008251610100806020850152611a436101208501836118cd565b91506020850151601f1980868503016040870152611a618483611911565b93506040870151915080868503016060870152611a7e848361199d565b93506060870151915080868503016080870152611a9b848361199d565b935060808701519150808685030160a087015250611ab983826119f2565b92505060a085015160c085015260c0850151611ad960e086018215159052565b5060e0850151801515858301525090949350505050565b80356001600160a01b0381168114611b0757600080fd5b919050565b600080600060408486031215611b2157600080fd5b611b2a84611af0565b9250602084013567ffffffffffffffff80821115611b4757600080fd5b818601915086601f830112611b5b57600080fd5b813581811115611b6a57600080fd5b876020828501011115611b7c57600080fd5b6020830194508093505050509250925092565b8215158152604060208201526000611baa6040830184611971565b949350505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611bf157611bf1611bb2565b604052919050565b600067ffffffffffffffff821115611c1357611c13611bb2565b5060051b60200190565b600082601f830112611c2e57600080fd5b81356020611c43611c3e83611bf9565b611bc8565b82815260059290921b84018101918181019086841115611c6257600080fd5b8286015b84811015611c8457611c7781611af0565b8352918301918301611c66565b509695505050505050565b600082601f830112611ca057600080fd5b81356020611cb0611c3e83611bf9565b82815260059290921b84018101918181019086841115611ccf57600080fd5b8286015b84811015611c845780358352918301918301611cd3565b600067ffffffffffffffff821115611d0457611d04611bb2565b50601f01601f191660200190565b6000611d20611c3e84611cea565b9050828152838383011115611d3457600080fd5b828260208301376000602084830101529392505050565b600082601f830112611d5c57600080fd5b81356020611d6c611c3e83611bf9565b82815260059290921b84018101918181019086841115611d8b57600080fd5b8286015b84811015611c8457803567ffffffffffffffff811115611daf5760008081fd5b8701603f81018913611dc15760008081fd5b611dd2898683013560408401611d12565b845250918301918301611d8f565b600082601f830112611df157600080fd5b81356020611e01611c3e83611bf9565b82815260059290921b84018101918181019086841115611e2057600080fd5b8286015b84811015611c8457803567ffffffffffffffff811115611e445760008081fd5b8701603f81018913611e565760008081fd5b611e67898683013560408401611d12565b845250918301918301611e24565b80151581146103be57600080fd5b600082601f830112611e9457600080fd5b81356020611ea4611c3e83611bf9565b82815260059290921b84018101918181019086841115611ec357600080fd5b8286015b84811015611c84578035611eda81611e75565b8352918301918301611ec7565b600080600080600060a08688031215611eff57600080fd5b853567ffffffffffffffff80821115611f1757600080fd5b611f2389838a01611c1d565b96506020880135915080821115611f3957600080fd5b611f4589838a01611c8f565b95506040880135915080821115611f5b57600080fd5b611f6789838a01611d4b565b94506060880135915080821115611f7d57600080fd5b611f8989838a01611de0565b93506080880135915080821115611f9f57600080fd5b50611fac88828901611e83565b9150509295509295909350565b600060208284031215611fcb57600080fd5b611fd482611af0565b9392505050565b634e487b7160e01b600052603260045260246000fd5b600181811c9082168061200557607f821691505b602082108114156106fc57634e487b7160e01b600052602260045260246000fd5b6000821982111561204757634e487b7160e01b600052601160045260246000fd5b500190565b8183823760009101908152919050565b602081526000611fd4602083018461199d565b60018060a01b038716815285602082015260c06040820152600061209660c0830187611971565b82810360608401526120a88187611971565b6080840195909552505090151560a090910152949350505050565b60c0808252875190820181905260009060209060e0840190828b01845b828110156121055781516001600160a01b0316845292840192908401906001016120e0565b50505083810382850152612119818a611911565b915050828103604084015261212e818861199d565b90508281036060840152612142818761199d565b9050828103608084015261215681866119f2565b9150508260a0830152979650505050505050565b6001600160e01b031983168152815160009061218d816004850160208701611941565b919091016004019392505050565b6001600160a01b0383168152604060208201819052600090611baa90