@mantleio/contracts
Version:
[Mantle] L1 and L2 smart contracts for Mantle
751 lines • 62.2 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "TssDelegation",
"sourceName": "contracts/L1/tss/delegation/TssDelegation.sol",
"abi": [
{
"inputs": [
{
"internalType": "contract IDelegationManager",
"name": "_delegationManager",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "delegatedShare",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "share",
"type": "uint256"
}
],
"name": "DecreaseDelegatedShares",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "delegatior",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "operator",
"type": "address"
}
],
"name": "DelegateTo",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "delegatedShare",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "share",
"type": "uint256"
}
],
"name": "IncreaseDelegatedShares",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint8",
"name": "version",
"type": "uint8"
}
],
"name": "Initialized",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "contract IDelegationCallback",
"name": "delegationTerms",
"type": "address"
},
{
"indexed": false,
"internalType": "bytes32",
"name": "returnData",
"type": "bytes32"
}
],
"name": "OnDelegationReceivedCallFailure",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "contract IDelegationCallback",
"name": "delegationTerms",
"type": "address"
},
{
"indexed": false,
"internalType": "bytes32",
"name": "returnData",
"type": "bytes32"
}
],
"name": "OnDelegationWithdrawnCallFailure",
"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": false,
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "Paused",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "delegationCallback",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "register",
"type": "address"
}
],
"name": "RegisterOperator",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "Unpaused",
"type": "event"
},
{
"inputs": [],
"name": "DELEGATION_TYPEHASH",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "DOMAIN_SEPARATOR",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "DOMAIN_TYPEHASH",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address[]",
"name": "toAddAddresses",
"type": "address[]"
}
],
"name": "addToWhitelist",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "staker",
"type": "address"
},
{
"internalType": "contract IDelegationShare",
"name": "delegationShare",
"type": "address"
},
{
"internalType": "uint256",
"name": "shares",
"type": "uint256"
}
],
"name": "decreaseDelegatedShares",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "staker",
"type": "address"
},
{
"internalType": "contract IDelegationShare[]",
"name": "strategies",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "shares",
"type": "uint256[]"
}
],
"name": "decreaseDelegatedShares",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "address",
"name": "staker",
"type": "address"
}
],
"name": "delegateTo",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
}
],
"name": "delegateTo",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "staker",
"type": "address"
},
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "uint256",
"name": "expiry",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "r",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "vs",
"type": "bytes32"
}
],
"name": "delegateToSignature",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "delegatedTo",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "delegationCallback",
"outputs": [
{
"internalType": "contract IDelegationCallback",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "delegationManager",
"outputs": [
{
"internalType": "contract IDelegationManager",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "delegationStatus",
"outputs": [
{
"internalType": "enum IDelegation.DelegationStatus",
"name": "",
"type": "uint8"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "staker",
"type": "address"
},
{
"internalType": "contract IDelegationShare",
"name": "delegationShare",
"type": "address"
},
{
"internalType": "uint256",
"name": "shares",
"type": "uint256"
}
],
"name": "increaseDelegatedShares",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "initialOwner",
"type": "address"
}
],
"name": "initialize",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_stakingSlashing",
"type": "address"
},
{
"internalType": "address",
"name": "initialOwner",
"type": "address"
}
],
"name": "initializeT",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "staker",
"type": "address"
}
],
"name": "isDelegated",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "staker",
"type": "address"
}
],
"name": "isNotDelegated",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
}
],
"name": "isOperator",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "nonces",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "contract IDelegationShare",
"name": "",
"type": "address"
}
],
"name": "operatorShares",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "pause",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "paused",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IDelegationCallback",
"name": "dt",
"type": "address"
},
{
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "registerAsOperator",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IDelegationCallback",
"name": "dt",
"type": "address"
}
],
"name": "registerAsOperator",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address[]",
"name": "toRemoveAddresses",
"type": "address[]"
}
],
"name": "removeFromWhitelist",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_address",
"type": "address"
}
],
"name": "setStakingSlash",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "stakingSlash",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "staker",
"type": "address"
}
],
"name": "undelegate",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "unpause",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "whitelist",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
}
],
"bytecode": "0x60a06040523480156200001157600080fd5b5060405162002dde38038062002dde833981016040819052620000349162000120565b6001600160a01b038116608052806200004c6200005e565b50620000576200005e565b5062000152565b600054610100900460ff1615620000cb5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811610156200011e576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6000602082840312156200013357600080fd5b81516001600160a01b03811681146200014b57600080fd5b9392505050565b608051612c466200019860003960008181610546015281816107af015281816109d101528181610ed10152818161176901528181611a290152611c4d0152612c466000f3fe608060405234801561001057600080fd5b50600436106102265760003560e01c80637ecebe001161012a578063c4a27a71116100bd578063e16e1a0c1161008c578063ea4d3c9b11610071578063ea4d3c9b14610541578063f2fde38b14610568578063fd3eb81f1461057b57600080fd5b8063e16e1a0c146104f1578063e7a324dc1461051a57600080fd5b8063c4a27a71146104a5578063c4d66de8146104b8578063cf4c8a7b146104cb578063da8be864146104de57600080fd5b80639b19251a116100f95780639b19251a1461042c578063a3a199f21461044f578063ac637c7a1461047f578063bd44e4031461049257600080fd5b80637ecebe00146103e05780637f649783146104005780638456cb59146104135780638da5cb5b1461041b57600080fd5b8063438bb7e5116101bd5780635c975abb1161018c5780636d70f7ae116101715780636d70f7ae1461037f578063715018a6146103ad578063778e55f3146103b557600080fd5b80635c975abb1461033357806365da12641461033e57600080fd5b8063438bb7e5146102e7578063515a07eb146102fa578063548db1741461030d5780635820491c1461032057600080fd5b806328a573ae116101f957806328a573ae146102b05780633644e515146102c35780633e28391d146102cc5780633f4ba83a146102df57600080fd5b806311a38c851461022b578063132d4967146102405780631d3696b71461025357806320606b701461027b575b600080fd5b61023e6102393660046125ac565b61058e565b005b61023e61024e3660046125e5565b6107a4565b610266610261366004612626565b61098e565b60405190151581526020015b60405180910390f35b6102a27f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b604051908152602001610272565b61023e6102be3660046125e5565b6109c6565b6102a260985481565b6102666102da366004612626565b610ba2565b61023e610bab565b61023e6102f53660046125ac565b610bbd565b61023e61030836600461264a565b610c53565b61023e61031b3660046126e7565b610e55565b61023e61032e366004612729565b610ec6565b60655460ff16610266565b61036761034c366004612626565b609b602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610272565b61026661038d366004612626565b6001600160a01b039081166000908152609a602052604090205416151590565b61023e611149565b6102a26103c33660046125ac565b609960209081526000928352604080842090915290825290205481565b6102a26103ee366004612626565b609d6020526000908152604090205481565b61023e61040e3660046126e7565b61115b565b61023e6111d5565b6033546001600160a01b0316610367565b61026661043a366004612626565b60976020526000908152604090205460ff1681565b61047261045d366004612626565b609c6020526000908152604090205460ff1681565b60405161027291906127db565b61023e61048d366004612626565b6111e5565b61023e6104a0366004612626565b6111fa565b61023e6104b33660046125ac565b611375565b61023e6104c6366004612626565b611583565b609e54610367906001600160a01b031681565b61023e6104ec366004612626565b61175e565b6103676104ff366004612626565b609a602052600090815260409020546001600160a01b031681565b6102a27fb2a21c2f78b6ef501475a2971550fe4cedb86f0dec990e23909bfb01fd61c54c81565b6103677f000000000000000000000000000000000000000000000000000000000000000081565b61023e610576366004612626565b611827565b61023e610589366004612626565b6118b4565b6001600160a01b038116600090815260976020526040902054819060ff166105fd5760405162461bcd60e51b815260206004820152601060248201527f4e4f545f494e5f57484954454c4953540000000000000000000000000000000060448201526064015b60405180910390fd5b609e546001600160a01b0316331461067d5760405162461bcd60e51b815260206004820152602560248201527f636f6e74726163742063616c6c206973206e6f74207374616b696e6720736c6160448201527f7368696e6700000000000000000000000000000000000000000000000000000060648201526084016105f4565b6001600160a01b038281166000908152609a6020526040902054161561070b5760405162461bcd60e51b815260206004820152603e60248201527f44656c65676174696f6e2e726567697374657241734f70657261746f723a204460448201527f656c65676174652068617320616c72656164792072656769737465726564000060648201526084016105f4565b6001600160a01b038281166000908152609a6020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001691851691909117905561075b82806118f6565b604080516001600160a01b038086168252841660208201527f6b79465d2d89e9355c00340dada48ce0cd05e807af465c48faed547fce4b5a7091015b60405180910390a1505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461081c5760405162461bcd60e51b815260206004820152601560248201527f6f6e6c7944656c65676174696f6e4d616e61676572000000000000000000000060448201526064016105f4565b61082583610ba2565b15610989576001600160a01b038084166000908152609b60209081526040808320548416808452609983528184209487168452939091528120805484929061086e90849061284b565b909155505060408051600180825281830190925260009160208083019080368337505060408051600180825281830190925292935060009291506020808301908036833701905050905084826000815181106108cc576108cc612891565b60200260200101906001600160a01b031690816001600160a01b031681525050838160008151811061090057610900612891565b6020908102919091018101919091526001600160a01b038085166000908152609a909252604090912054166109388188868686611dc4565b604080516001600160a01b038089168252861660208201529081018690527fadb1483fabb8b6129204641b6b0d7c6aee5d3c06b23671230458f469ccf23abb906060015b60405180910390a1505050505b505050565b6000805b6001600160a01b0383166000908152609c602052604090205460ff1660018111156109bf576109bf6127ac565b1492915050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610a3e5760405162461bcd60e51b815260206004820152601560248201527f6f6e6c7944656c65676174696f6e4d616e61676572000000000000000000000060448201526064016105f4565b610a4783610ba2565b15610989576001600160a01b038084166000908152609b602090815260408083205484168084526099835281842094871684529390915281208054849290610a909084906128c0565b90915550506040805160018082528183019092526000916020808301908036833750506040805160018082528183019092529293506000929150602080830190803683370190505090508482600081518110610aee57610aee612891565b60200260200101906001600160a01b031690816001600160a01b0316815250508381600081518110610b2257610b22612891565b6020908102919091018101919091526001600160a01b038085166000908152609a90925260409091205416610b5a8188868686611f2d565b604080516001600160a01b038089168252861660208201529081018690527f7747bd0188a4f1ebd354b18edb152242f4acb7c7316843697460fe3fa054e7539060600161097c565b60006001610992565b610bb3612053565b610bbb6120ad565b565b609e546001600160a01b03163314610c3d5760405162461bcd60e51b815260206004820152602560248201527f636f6e74726163742063616c6c206973206e6f74207374616b696e6720736c6160448201527f7368696e6700000000000000000000000000000000000000000000000000000060648201526084016105f4565b610c456120ff565b610c4f81836118f6565b5050565b610c5b6120ff565b821580610c685750428310155b610cb45760405162461bcd60e51b815260206004820152601c60248201527f64656c65676174696f6e207369676e617475726520657870697265640000000060448201526064016105f4565b6001600160a01b0385166000908152609d6020526040812080547fb2a21c2f78b6ef501475a2971550fe4cedb86f0dec990e23909bfb01fd61c54c918891889185610cfe836128d8565b909155506040805160208101959095526001600160a01b039384169085015291166060830152608082015260a0810185905260c001604051602081830303815290604052805190602001209050600060985482604051602001610d939291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b6040516020818303038152906040528051906020012090506000610db8828686612152565b9050876001600160a01b0316816001600160a01b031614610e415760405162461bcd60e51b815260206004820152603560248201527f44656c65676174696f6e2e64656c6567617465546f42795369676e617475726560448201527f3a20736967206e6f742066726f6d207374616b6572000000000000000000000060648201526084016105f4565b610e4b88886118f6565b5050505050505050565b610e5d612053565b60005b818110156109895760976000848484818110610e7e57610e7e612891565b9050602002016020810190610e939190612626565b6001600160a01b031681526020810191909152604001600020805460ff1916905580610ebe816128d8565b915050610e60565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f3e5760405162461bcd60e51b815260206004820152601560248201527f6f6e6c7944656c65676174696f6e4d616e61676572000000000000000000000060448201526064016105f4565b610f4785610ba2565b15611142576001600160a01b038086166000908152609b60205260408120549091169084905b818110156110b157848482818110610f8757610f87612891565b9050602002013560996000856001600160a01b03166001600160a01b031681526020019081526020016000206000898985818110610fc757610fc7612891565b9050602002016020810190610fdc9190612626565b6001600160a01b03166001600160a01b03168152602001908152602001600020600082825461100b919061284b565b909155507fadb1483fabb8b6129204641b6b0d7c6aee5d3c06b23671230458f469ccf23abb905087878381811061104457611044612891565b90506020020160208101906110599190612626565b8487878581811061106c5761106c612891565b905060200201356040516110a1939291906001600160a01b039384168152919092166020820152604081019190915260600190565b60405180910390a1600101610f6d565b506001600160a01b038083166000908152609a60209081526040918290205482518983028181018401909452898152931692610e4b9284928c92889290918d918d9182919085019084908082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c918291850190849080828437600092019190915250611dc492505050565b5050505050565b611151612053565b610bbb6000612178565b611163612053565b60005b818110156109895760016097600085858581811061118657611186612891565b905060200201602081019061119b9190612626565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806111cd816128d8565b915050611166565b6111dd612053565b610bbb6121e2565b6111ed6120ff565b6111f733826118f6565b50565b3360008181526097602052604090205460ff166112595760405162461bcd60e51b815260206004820152601060248201527f4e4f545f494e5f57484954454c4953540000000000000000000000000000000060448201526064016105f4565b336000908152609a60205260409020546001600160a01b0316156112e55760405162461bcd60e51b815260206004820152603e60248201527f44656c65676174696f6e2e726567697374657241734f70657261746f723a204460448201527f656c65676174652068617320616c72656164792072656769737465726564000060648201526084016105f4565b336000818152609a6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03851617905561132f90806118f6565b604080516001600160a01b03841681523360208201527f6b79465d2d89e9355c00340dada48ce0cd05e807af465c48faed547fce4b5a7091015b60405180910390a15050565b600054610100900460ff16158080156113955750600054600160ff909116105b806113af5750303b1580156113af575060005460ff166001145b6114215760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016105f4565b6000805460ff19166001179055801561146157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8666040518060400160405280600681526020017f4d616e746c65000000000000000000000000000000000000000000000000000081525046306040516020016114cd9493929190612941565b60408051808303601f190181529190528051602090910120609855609e80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03851617905561152482612178565b801561098957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001610797565b600054610100900460ff16158080156115a35750600054600160ff909116105b806115bd5750303b1580156115bd575060005460ff166001145b61162f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016105f4565b6000805460ff19166001179055801561166f57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8666040518060400160405280600681526020017f4d616e746c65000000000000000000000000000000000000000000000000000081525046306040516020016116db9493929190612941565b60408051601f1981840301815291905280516020909101206098556116ff82612178565b8015610c4f57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611369565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146117d65760405162461bcd60e51b815260206004820152601560248201527f6f6e6c7944656c65676174696f6e4d616e61676572000000000000000000000060448201526064016105f4565b6001600160a01b03166000908152609c60209081526040808320805460ff19169055609b909152902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b61182f612053565b6001600160a01b0381166118ab5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016105f4565b6111f781612178565b6118bc612053565b609e80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6001600160a01b038082166000908152609a602052604090205416806119aa5760405162461bcd60e51b815260206004820152604360248201527f44656c65676174696f6e2e5f64656c65676174653a206f70657261746f72206860448201527f6173206e6f7420796574207265676973746572656420617320612064656c656760648201527f6174650000000000000000000000000000000000000000000000000000000000608482015260a4016105f4565b6119b38361098e565b611a255760405162461bcd60e51b815260206004820152603460248201527f44656c65676174696f6e2e5f64656c65676174653a207374616b65722068617360448201527f206578697374696e672064656c65676174696f6e00000000000000000000000060648201526084016105f4565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663bb5807746040518163ffffffff1660e01b815260040160206040518083038186803b158015611a8057600080fd5b505afa158015611a94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab89190612994565b6040517fe58398360000000000000000000000000000000000000000000000000000000081526001600160a01b0385811660048301529192509082169063e58398369060240160206040518083038186803b158015611b1657600080fd5b505afa158015611b2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4e91906129b1565b15611bc15760405162461bcd60e51b815260206004820152603a60248201527f44656c65676174696f6e2e5f64656c65676174653a2063616e6e6f742064656c60448201527f656761746520746f20612066726f7a656e206f70657261746f7200000000000060648201526084016105f4565b6001600160a01b038481166000818152609b6020908152604080832080548987167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116179055609c909152808220805460ff19166001179055517f94f649dd00000000000000000000000000000000000000000000000000000000815260048101929092529182917f0000000000000000000000000000000000000000000000000000000000000000909116906394f649dd9060240160006040518083038186803b158015611c9157600080fd5b505afa158015611ca5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611ccd9190810190612a93565b8151919350915060005b81811015611d7657828181518110611cf157611cf1612891565b602002602001015160996000896001600160a01b03166001600160a01b031681526020019081526020016000206000868481518110611d3257611d32612891565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206000828254611d6991906128c0565b9091555050600101611cd7565b50611d848588888686611f2d565b604080516001600160a01b03808a168252881660208201527ff860b403db1c03a181fb5bde7737c75a7a2e076a3c5be1acbb710810b742903d910161097c565b600080866001600160a01b0316620186a063b1bbdc4160e01b88888888604051602401611df49493929190612b58565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909416939093179092529051611e5f9190612bf4565b60006040518083038160008787f1925050503d8060008114611e9d576040519150601f19603f3d011682016040523d82523d6000602084013e611ea2565b606091505b509150915081611f2457866001600160a01b03167fc58f3a088400523dc1a71a22ed64fdb04c35f0e1c89449cd1428add815675a4e82600081518110611eea57611eea612891565b602091018101516040517fff0000000000000000000000000000000000000000000000000000000000000090911681520160405180910390a25b50505050505050565b600080866001600160a01b0316620186a0636dd300b560e01b88888888604051602401611f5d9493929190612b58565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909416939093179092529051611fc89190612bf4565b60006040518083038160008787f1925050503d8060008114612006576040519150601f19603f3d011682016040523d82523d6000602084013e61200b565b606091505b509150915081611f2457866001600160a01b03167f7e1d6196a63db3d494984adab6b42e91bcf8125ca3a3f80e658e5ed4e0f7efef82600081518110611eea57611eea612891565b6033546001600160a01b03163314610bbb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105f4565b6120b561221f565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60655460ff1615610bbb5760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016105f4565b6000806000612162868686612271565b9150915061216f816122b9565b50949350505050565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6121ea6120ff565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586120e23390565b60655460ff16610bbb5760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016105f4565b6000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831660ff84901c601b016122ab878288856124aa565b935093505050935093915050565b60008160048111156122cd576122cd6127ac565b14156122d65750565b60018160048111156122ea576122ea6127ac565b14156123385760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016105f4565b600281600481111561234c5761234c6127ac565b141561239a5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016105f4565b60038160048111156123ae576123ae6127ac565b14156124225760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f756500000000000000000000000000000000000000000000000000000000000060648201526084016105f4565b6004816004811115612436576124366127ac565b14156111f75760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c60448201527f756500000000000000000000000000000000000000000000000000000000000060648201526084016105f4565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156124e1575060009050600361258e565b8460ff16601b141580156124f957508460ff16601c14155b1561250a575060009050600461258e565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561255e573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166125875760006001925092505061258e565b9150600090505b94509492505050565b6001600160a01b03811681146111f757600080fd5b600080604083850312156125bf57600080fd5b82356125ca81612597565b915060208301356125da81612597565b809150509250929050565b6000806000606084860312156125fa57600080fd5b833561260581612597565b9250602084013561261581612597565b929592945050506040919091013590565b60006020828403121561263857600080fd5b813561264381612597565b9392505050565b600080600080600060a0868803121561266257600080fd5b853561266d81612597565b9450602086013561267d81612597565b94979496505050506040830135926060810135926080909101359150565b60008083601f8401126126ad57600080fd5b50813567ffffffffffffffff8111156126c557600080fd5b6020830191508360208260051b85010111156126e057600080fd5b9250929050565b600080602083850312156126fa57600080fd5b823567ffffffffffffffff81111561271157600080fd5b61271d8582860161269b565b90969095509350505050565b60008060008060006060868803121561274157600080fd5b853561274c81612597565b9450602086013567ffffffffffffffff8082111561276957600080fd5b61277589838a0161269b565b9096509450604088013591508082111561278e57600080fd5b5061279b8882890161269b565b969995985093965092949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160028310612816577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561285d5761285d61281c565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082198211156128d3576128d361281c565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561290a5761290a61281c565b5060010190565b60005b8381101561292c578181015183820152602001612914565b8381111561293b576000848401525b50505050565b84815260806020820152600084518060808401526129668160a0850160208901612911565b60a0601f19601f8301168401019150508360408301526001600160a01b038316606083015295945050505050565b6000602082840312156129a657600080fd5b815161264381612597565b6000602082840312156129c357600080fd5b8151801515811461264357600080fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156129fc576129fc612862565b604052919050565b600067ffffffffffffffff821115612a1e57612a1e612862565b5060051b60200190565b600082601f830112612a3957600080fd5b81516020612a4e612a4983612a04565b6129d3565b82815260059290921b84018101918181019086841115612a6d57600080fd5b8286015b84811015612a885780518352918301918301612a71565b509695505050505050565b60008060408385031215612aa657600080fd5b825167ffffffffffffffff80821115612abe57600080fd5b818501915085601f830112612ad257600080fd5b81516020612ae2612a4983612a04565b82815260059290921b84018101918181019089841115612b0157600080fd5b948201945b83861015612b28578551612b1981612597565b82529482019490820190612b06565b91880151919650909350505080821115612b4157600080fd5b50612b4e85828601612a28565b9150509250929050565b6000608082016001600160a01b0380881684526020818816818601526080604086015282875180855260a087019150828901945060005b81811015612bad578551851683529483019491830191600101612b8f565b5050858103606087015286518082529082019350915080860160005b83811015612be557815185529382019390820190600101612bc9565b50929998505050505050505050565b60008251612c06818460208701612911565b919091019291505056fea2646970667358221220367767ca4769a238954713df0459d8a952772b3773b66f639534981cfa9dbf8e64736f6c63430008090033",
"deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102265760003560e01c80637ecebe001161012a578063c4a27a71116100bd578063e16e1a0c1161008c578063ea4d3c9b11610071578063ea4d3c9b14610541578063f2fde38b14610568578063fd3eb81f1461057b57600080fd5b8063e16e1a0c146104f1578063e7a324dc1461051a57600080fd5b8063c4a27a71146104a5578063c4d66de8146104b8578063cf4c8a7b146104cb578063da8be864146104de57600080fd5b80639b19251a116100f95780639b19251a1461042c578063a3a199f21461044f578063ac637c7a1461047f578063bd44e4031461049257600080fd5b80637ecebe00146103e05780637f649783146104005780638456cb59146104135780638da5cb5b1461041b57600080fd5b8063438bb7e5116101bd5780635c975abb1161018c5780636d70f7ae116101715780636d70f7ae1461037f578063715018a6146103ad578063778e55f3146103b557600080fd5b80635c975abb1461033357806365da12641461033e57600080fd5b8063438bb7e5146102e7578063515a07eb146102fa578063548db1741461030d5780635820491c1461032057600080fd5b806328a573ae116101f957806328a573ae146102b05780633644e515146102c35780633e28391d146102cc5780633f4ba83a146102df57600080fd5b806311a38c851461022b578063132d4967146102405780631d3696b71461025357806320606b701461027b575b600080fd5b61023e6102393660046125ac565b61058e565b005b61023e61024e3660046125e5565b6107a4565b610266610261366004612626565b61098e565b60405190151581526020015b60405180910390f35b6102a27f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b604051908152602001610272565b61023e6102be3660046125e5565b6109c6565b6102a260985481565b6102666102da366004612626565b610ba2565b61023e610bab565b61023e6102f53660046125ac565b610bbd565b61023e61030836600461264a565b610c53565b61023e61031b3660046126e7565b610e55565b61023e61032e366004612729565b610ec6565b60655460ff16610266565b61036761034c366004612626565b609b602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610272565b61026661038d366004612626565b6001600160a01b039081166000908152609a602052604090205416151590565b61023e611149565b6102a26103c33660046125ac565b609960209081526000928352604080842090915290825290205481565b6102a26103ee366004612626565b609d6020526000908152604090205481565b61023e61040e3660046126e7565b61115b565b61023e6111d5565b6033546001600160a01b0316610367565b61026661043a366004612626565b60976020526000908152604090205460ff1681565b61047261045d366004612626565b609c6020526000908152604090205460ff1681565b60405161027291906127db565b61023e61048d366004612626565b6111e5565b61023e6104a0366004612626565b6111fa565b61023e6104b33660046125ac565b611375565b61023e6104c6366004612626565b611583565b609e54610367906001600160a01b031681565b61023e6104ec366004612626565b61175e565b6103676104ff366004612626565b609a602052600090815260409020546001600160a01b031681565b6102a27fb2a21c2f78b6ef501475a2971550fe4cedb86f0dec990e23909bfb01fd61c54c81565b6103677f000000000000000000000000000000000000000000000000000000000000000081565b61023e610576366004612626565b611827565b61023e610589366004612626565b6118b4565b6001600160a01b038116600090815260976020526040902054819060ff166105fd5760405162461bcd60e51b815260206004820152601060248201527f4e4f545f494e5f57484954454c4953540000000000000000000000000000000060448201526064015b60405180910390fd5b609e546001600160a01b0316331461067d5760405162461bcd60e51b815260206004820152602560248201527f636f6e74726163742063616c6c206973206e6f74207374616b696e6720736c6160448201527f7368696e6700000000000000000000000000000000000000000000000000000060648201526084016105f4565b6001600160a01b038281166000908152609a6020526040902054161561070b5760405162461bcd60e51b815260206004820152603e60248201527f44656c65676174696f6e2e726567697374657241734f70657261746f723a204460448201527f656c65676174652068617320616c72656164792072656769737465726564000060648201526084016105f4565b6001600160a01b038281166000908152609a6020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001691851691909117905561075b82806118f6565b604080516001600160a01b038086168252841660208201527f6b79465d2d89e9355c00340dada48ce0cd05e807af465c48faed547fce4b5a7091015b60405180910390a1505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461081c5760405162461bcd60e51b815260206004820152601560248201527f6f6e6c7944656c65676174696f6e4d616e61676572000000000000000000000060448201526064016105f4565b61082583610ba2565b15610989576001600160a01b038084166000908152609b60209081526040808320548416808452609983528184209487168452939091528120805484929061086e90849061284b565b909155505060408051600180825281830190925260009160208083019080368337505060408051600180825281830190925292935060009291506020808301908036833701905050905084826000815181106108cc576108cc612891565b60200260200101906001600160a01b031690816001600160a01b031681525050838160008151811061090057610900612891565b6020908102919091018101919091526001600160a01b038085166000908152609a909252604090912054166109388188868686611dc4565b604080516001600160a01b038089168252861660208201529081018690527fadb1483fabb8b6129204641b6b0d7c6aee5d3c06b23671230458f469ccf23abb906060015b60405180910390a1505050505b505050565b6000805b6001600160a01b0383166000908152609c602052604090205460ff1660018111156109bf576109bf6127ac565b1492915050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610a3e5760405162461bcd60e51b815260206004820152601560248201527f6f6e6c7944656c65676174696f6e4d616e61676572000000000000000000000060448201526064016105f4565b610a4783610ba2565b15610989576001600160a01b038084166000908152609b602090815260408083205484168084526099835281842094871684529390915281208054849290610a909084906128c0565b90915550506040805160018082528183019092526000916020808301908036833750506040805160018082528183019092529293506000929150602080830190803683370190505090508482600081518110610aee57610aee612891565b60200260200101906001600160a01b031690816001600160a01b0316815250508381600081518110610b2257610b22612891565b6020908102919091018101919091526001600160a01b038085166000908152609a90925260409091205416610b5a8188868686611f2d565b604080516001600160a01b038089168252861660208201529081018690527f7747bd0188a4f1ebd354b18edb152242f4acb7c7316843697460fe3fa054e7539060600161097c565b60006001610992565b610bb3612053565b610bbb6120ad565b565b609e546001600160a01b03163314610c3d5760405162461bcd60e51b815260206004820152602560248201527f636f6e74726163742063616c6c206973206e6f74207374616b696e6720736c6160448201527f7368696e6700000000000000000000000000000000000000000000000000000060648201526084016105f4565b610c456120ff565b610c4f81836118f6565b5050565b610c5b6120ff565b821580610c685750428310155b610cb45760405162461bcd60e51b815260206004820152601c60248201527f64656c65676174696f6e207369676e617475726520657870697265640000000060448201526064016105f4565b6001600160a01b0385166000908152609d6020526040812080547fb2a21c2f78b6ef501475a2971550fe4cedb86f0dec990e23909bfb01fd61c54c918891889185610cfe836128d8565b909155506040805160208101959095526001600160a01b039384169085015291166060830152608082015260a0810185905260c001604051602081830303815290604052805190602001209050600060985482604051602001610d939291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b6040516020818303038152906040528051906020012090506000610db8828686612152565b9050876001600160a01b0316816001600160a01b031614610e415760405162461bcd60e51b815260206004820152603560248201527f44656c65676174696f6e2e64656c6567617465546f42795369676e617475726560448201527f3a20736967206e6f742066726f6d207374616b6572000000000000000000000060648201526084016105f4565b610e4b88886118f6565b5050505050505050565b610e5d612053565b60005b818110156109895760976000848484818110610e7e57610e7e612891565b9050602002016020810190610e939190612626565b6001600160a01b031681526020810191909152604001600020805460ff1916905580610ebe816128d8565b915050610e60565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f3e5760405162461bcd60e51b815260206004820152601560248201527f6f6e6c7944656c65676174696f6e4d616e61676572000000000000000000000060448201526064016105f4565b610f4785610ba2565b15611142576001600160a01b038086166000908152609b60205260408120549091169084905b818110156110b157848482818110610f8757610f87612891565b9050602002013560996000856001600160a01b03166001600160a01b031681526020019081526020016000206000898985818110610fc757610fc7612891565b9050602002016020810190610fdc9190612626565b6001600160a01b03166001600160a01b03168152602001908152602001600020600082825461100b919061284b565b909155507fadb1483fabb8b6129204641b6b0d7c6aee5d3c06b23671230458f469ccf23abb905087878381811061104457611044612891565b90506020020160208101906110599190612626565b8487878581811061106c5761106c612891565b905060200201356040516110a1939291906001600160a01b039384168152919092166020820152604081019190915260600190565b60405180910390a1600101610f6d565b506001600160a01b038083166000908152609a60209081526040918290205482518983028181018401909452898152931692610e4b9284928c92889290918d918d9182919085019084908082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c918291850190849080828437600092019190915250611dc492505050565b5050505050565b611151612053565b610bbb6000612178565b611163612053565b60005b818110156109895760016097600085858581811061118657611186612891565b905060200201602081019061119b9190612626565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806111cd816128d8565b915050611166565b6111dd612053565b610bbb6121e2565b6111ed6120ff565b6111f733826118f6565b50565b3360008181526097602052604090205460ff166112595760405162461bcd60e51b815260206004820152601060248201527f4e4f545f494e5f57484954454c4953540000000000000000000000000000000060448201526064016105f4565b336000908152609a60205260409020546001600160a01b0316156112e55760405162461bcd60e51b815260206004820152603e60248201527f44656c65676174696f6e2e726567697374657241734f70657261746f723a204460448201527f656c65676174652068617320616c72656164792072656769737465726564000060648201526084016105f4565b336000818152609a6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03851617905561132f90806118f6565b604080516001600160a01b03841681523360208201527f6b79465d2d89e9355c00340dada48ce0cd05e807af465c48faed547fce4b5a7091015b60405180910390a15050565b600054610100900460ff16158080156113955750600054600160ff909116105b806113af5750303b1580156113af575060005460ff166001145b6114215760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016105f4565b6000805460ff19166001179055801561146157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8666040518060400160405280600681526020017f4d616e746c650