@bitriel/multisig-wallet
Version:
MultiSignature Wallet
920 lines • 67.6 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "MultiSigWalletV2",
"sourceName": "contracts/MultiSigWalletV2.sol",
"abi": [
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "AddedOwner",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "approvedHash",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "ApproveHash",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "handler",
"type": "address"
}
],
"name": "ChangedFallbackHandler",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "guard",
"type": "address"
}
],
"name": "ChangedGuard",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint8",
"name": "threshold",
"type": "uint8"
}
],
"name": "ChangedThreshold",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "module",
"type": "address"
}
],
"name": "DisabledModule",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "module",
"type": "address"
}
],
"name": "EnabledModule",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "bytes32",
"name": "txHash",
"type": "bytes32"
},
{
"indexed": false,
"internalType": "uint256",
"name": "payment",
"type": "uint256"
}
],
"name": "ExecutionFailure",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "module",
"type": "address"
}
],
"name": "ExecutionFromModuleFailure",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "module",
"type": "address"
}
],
"name": "ExecutionFromModuleSuccess",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "bytes32",
"name": "txHash",
"type": "bytes32"
},
{
"indexed": false,
"internalType": "uint256",
"name": "payment",
"type": "uint256"
}
],
"name": "ExecutionSuccess",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "Received",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "RemovedOwner",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "initiator",
"type": "address"
},
{
"indexed": false,
"internalType": "address[]",
"name": "owners",
"type": "address[]"
},
{
"indexed": false,
"internalType": "uint256",
"name": "threshold",
"type": "uint256"
},
{
"indexed": false,
"internalType": "address",
"name": "initializer",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "fallbackHandler",
"type": "address"
}
],
"name": "Setup",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "msgHash",
"type": "bytes32"
}
],
"name": "SignMsg",
"type": "event"
},
{
"stateMutability": "nonpayable",
"type": "fallback"
},
{
"inputs": [],
"name": "VERSION",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "uint8",
"name": "_threshold",
"type": "uint8"
}
],
"name": "addOwnerWithThreshold",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "txHash",
"type": "bytes32"
}
],
"name": "approveHash",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"name": "approvedHashes",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint8",
"name": "_threshold",
"type": "uint8"
}
],
"name": "changeThreshold",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "checkOwner",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "txHash",
"type": "bytes32"
},
{
"internalType": "bytes",
"name": "txHashData",
"type": "bytes"
},
{
"internalType": "bytes",
"name": "signatures",
"type": "bytes"
}
],
"name": "checkSignatures",
"outputs": [],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "prevModule",
"type": "address"
},
{
"internalType": "address",
"name": "module",
"type": "address"
}
],
"name": "disableModule",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "domainSeparator",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "module",
"type": "address"
}
],
"name": "enableModule",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "enum Types.Operation",
"name": "operation",
"type": "uint8"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
},
{
"internalType": "uint256",
"name": "txGas",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "baseGas",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "gasPrice",
"type": "uint256"
},
{
"internalType": "address",
"name": "gasToken",
"type": "address"
},
{
"internalType": "address",
"name": "refundReceiver",
"type": "address"
},
{
"internalType": "uint256",
"name": "_nonce",
"type": "uint256"
}
],
"name": "encodeTransactionData",
"outputs": [
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "enum Types.Operation",
"name": "operation",
"type": "uint8"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
},
{
"internalType": "uint256",
"name": "txGas",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "baseGas",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "gasPrice",
"type": "uint256"
},
{
"internalType": "address",
"name": "gasToken",
"type": "address"
},
{
"internalType": "address payable",
"name": "refundReceiver",
"type": "address"
},
{
"internalType": "bytes",
"name": "signatures",
"type": "bytes"
}
],
"name": "execTransaction",
"outputs": [
{
"internalType": "bool",
"name": "success",
"type": "bool"
}
],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "enum Types.Operation",
"name": "operation",
"type": "uint8"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "execTransactionFromModule",
"outputs": [
{
"internalType": "bool",
"name": "success",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "enum Types.Operation",
"name": "operation",
"type": "uint8"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "execTransactionFromModuleReturnData",
"outputs": [
{
"internalType": "bool",
"name": "success",
"type": "bool"
},
{
"internalType": "bytes",
"name": "returnData",
"type": "bytes"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "getChainId",
"outputs": [
{
"internalType": "uint256",
"name": "id",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getGuard",
"outputs": [
{
"internalType": "address",
"name": "guard",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "start",
"type": "address"
},
{
"internalType": "uint256",
"name": "pageSize",
"type": "uint256"
}
],
"name": "getModulePagenated",
"outputs": [
{
"internalType": "address[]",
"name": "array",
"type": "address[]"
},
{
"internalType": "address",
"name": "next",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getOwners",
"outputs": [
{
"internalType": "address[]",
"name": "",
"type": "address[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getThreshold",
"outputs": [
{
"internalType": "uint8",
"name": "",
"type": "uint8"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "enum Types.Operation",
"name": "operation",
"type": "uint8"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
},
{
"internalType": "uint256",
"name": "txGas",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "baseGas",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "gasPrice",
"type": "uint256"
},
{
"internalType": "address",
"name": "gasToken",
"type": "address"
},
{
"internalType": "address",
"name": "refundReceiver",
"type": "address"
},
{
"internalType": "uint256",
"name": "_nonce",
"type": "uint256"
}
],
"name": "getTransactionHash",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "module",
"type": "address"
}
],
"name": "isModuleEnabled",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "nonce",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "handler",
"type": "address"
}
],
"name": "setFallbackHandler",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "guard",
"type": "address"
}
],
"name": "setGuard",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address[]",
"name": "_owners",
"type": "address[]"
},
{
"internalType": "uint8",
"name": "_threshold",
"type": "uint8"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
},
{
"internalType": "address",
"name": "fallbackHandler",
"type": "address"
},
{
"internalType": "address",
"name": "paymentToken",
"type": "address"
},
{
"internalType": "uint256",
"name": "payment",
"type": "uint256"
},
{
"internalType": "address payable",
"name": "paymentReceiver",
"type": "address"
}
],
"name": "setup",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"name": "signedMessages",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "prevOwner",
"type": "address"
},
{
"internalType": "address",
"name": "oldOwner",
"type": "address"
},
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "swapOwner",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"stateMutability": "payable",
"type": "receive"
}
],
"bytecode": "0x608060405234801561001057600080fd5b50612edf806100206000396000f3fe6080604052600436106101a05760003560e01c8063b7f3358d116100ec578063e0e3671c1161008a578063e75235b811610064578063e75235b81461059a578063f08a0323146105bc578063f698da25146105dc578063ffa1ad74146105f1576101dc565b8063e0e3671c1461053a578063e19a9dd91461055a578063e318b52b1461057a576101dc565b8063c9106389116100c6578063c9106389146104a0578063cbb026be146104e7578063d4d9bdcd146104fa578063e009cfde1461051a576101dc565b8063b7f3358d14610433578063b91a667f14610453578063bbba4b3b14610473576101dc565b80636d8695121161015957806386111a1e1161013357806386111a1e146103ad578063934f3a11146103db578063a0e67e2b146103fb578063affed0e01461041d576101dc565b80636d869512146103355780637d83297414610355578063810fdcd71461038d576101dc565b80631b0dcbcb146102425780632a3c1871146102795780632d9ad53d146102a95780633408e470146102c95780635ae6bd37146102e6578063610b592514610313576101dc565b366101dc5760405134815233907f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f885258749060200160405180910390a2005b3480156101e857600080fd5b507f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d580548061021357005b36600080373360601b365260008060143601600080855af190503d6000803e8061023c573d6000fd5b503d6000f35b34801561024e57600080fd5b5061026261025d3660046129f8565b610622565b604051610270929190612bff565b60405180910390f35b34801561028557600080fd5b506102996102943660046129f8565b6106c6565b6040519015158152602001610270565b3480156102b557600080fd5b506102996102c43660046125c5565b6107aa565b3480156102d557600080fd5b50465b604051908152602001610270565b3480156102f257600080fd5b506102d86103013660046127ba565b60056020526000908152604090205481565b34801561031f57600080fd5b5061033361032e3660046125c5565b6107e5565b005b34801561034157600080fd5b506103336103503660046126c2565b610956565b34801561036157600080fd5b506102d8610370366004612663565b600660209081526000928352604080842090915290825290205481565b34801561039957600080fd5b506102d86103a836600461293a565b610a77565b3480156103b957600080fd5b506103cd6103c8366004612663565b610aa4565b604051610270929190612bd5565b3480156103e757600080fd5b506103336103f63660046127d2565b610bba565b34801561040757600080fd5b50610410610bd2565b6040516102709190612bc2565b34801561042957600080fd5b506102d860045481565b34801561043f57600080fd5b5061033361044e366004612a60565b610cdc565b34801561045f57600080fd5b5061033361046e36600461268e565b610dc4565b34801561047f57600080fd5b5061049361048e36600461293a565b610f4e565b6040516102709190612c95565b3480156104ac57600080fd5b507f4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c8546040516001600160a01b039091168152602001610270565b6102996104f5366004612864565b611015565b34801561050657600080fd5b506103336105153660046127ba565b61137f565b34801561052657600080fd5b506103336105353660046125e1565b61142c565b34801561054657600080fd5b506102996105553660046125c5565b611599565b34801561056657600080fd5b506103336105753660046125c5565b6115d1565b34801561058657600080fd5b50610333610595366004612619565b611636565b3480156105a657600080fd5b5060025460405160ff9091168152602001610270565b3480156105c857600080fd5b506103336105d73660046125c5565b61189b565b3480156105e857600080fd5b506102d8611904565b3480156105fd57600080fd5b50610493604051806040016040528060058152602001640302e342e360dc1b81525081565b600060603360011480159061064e5750336000908152600360205260409020546001600160a01b031615155b6106945760405162461bcd60e51b81526020600482015260126024820152716e6f7420616c6c6f776564206d6f64756c6560701b60448201526064015b60405180910390fd5b6106a0868686866106c6565b915060405160203d0181016040523d81523d6000602083013e8091505094509492505050565b6000336001148015906106f05750336000908152600360205260409020546001600160a01b031615155b6107315760405162461bcd60e51b81526020600482015260126024820152716e6f7420616c6c6f776564206d6f64756c6560701b604482015260640161068b565b61073e858585855a61195b565b905080156107765760405133907f6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb890600090a26107a2565b60405133907facd2c8702804128fdb0db2bb49f6d127dd0181c13fd45dbfe16de0930e2bd37590600090a25b949350505050565b60006001600160a01b0382166001148015906107df57506001600160a01b038281166000908152600360205260409020541615155b92915050565b6107ed6119b0565b6001600160a01b0381161580159061080e57506001600160a01b0381163014155b801561082457506001600160a01b038116600114155b6108695760405162461bcd60e51b8152602060048201526016602482015275696e76616c6964206d6f64756c65206164647265737360501b604482015260640161068b565b6001600160a01b03818116600090815260036020526040902054166108c55760405162461bcd60e51b8152602060048201526012602482015271647570206d6f64756c65206164647265737360701b604482015260640161068b565b6001600160a01b0381166000818152600360209081526040808320805460016001600160a01b0319918216811790925593527fa15bc60c955c405d20d9149c709e2460f1c2d9a497496a7f46004d1772c3054c8054909316841790925590519182527fecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f844091015b60405180910390a150565b6109948a8a808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508c92506119f6915050565b6001600160a01b038416156109cb576109cb847f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d555565b610a0b8787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c8292505050565b8115610a2257610a2082600060018685611d9a565b505b336001600160a01b03167fdc86375db5b88ae3bf25a0a03e198779c97c398ee0c63aa5b9180849108920748b8b8b8b89604051610a63959493929190612b53565b60405180910390a250505050505050505050565b6000610a8c8c8c8c8c8c8c8c8c8c8c8c610f4e565b8051906020012090509b9a5050505050505050505050565b606060008267ffffffffffffffff811115610acf57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610af8578160200160208202803683370190505b506001600160a01b0380861660009081526003602052604081205492945091165b6001600160a01b03811615801590610b3b57506001600160a01b038116600114155b8015610b4657508482105b15610bac5780848381518110610b6c57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152918116600090815260039092526040909120541681610ba481612e4a565b925050610b19565b908352919491935090915050565b60025460ff16610bcc84848484611ea9565b50505050565b6060600060015467ffffffffffffffff811115610bff57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610c28578160200160208202803683370190505b506001600090815260208190527fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d549192506001600160a01b03909116905b600154811015610cd45781838281518110610c9257634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092018101919091529281166000908152928390526040909220549091169080610ccc81612e4a565b915050610c67565b509092915050565b610ce46119b0565b6001548160ff161115610d395760405162461bcd60e51b815260206004820152601d60248201527f7468726573686f6c64206973206d6f7265207468616e206f776e657273000000604482015260640161068b565b60018160ff161015610d825760405162461bcd60e51b815260206004820152601260248201527130ba103632b0b9ba1037b7329037bbb732b960711b604482015260640161068b565b6002805460ff191660ff83169081179091556040519081527fa1a39f4ff110596455f47a4a25db50c3662a86ffdb67875e4291c2efde959f1d9060200161094b565b610dcc6119b0565b6001600160a01b03821615801590610ded57506001600160a01b0382163014155b8015610e0357506001600160a01b038216600114155b610e4b5760405162461bcd60e51b81526020600482015260196024820152786e6f7420616c6c6f776564206f776e6572206164647265737360381b604482015260640161068b565b6001600160a01b038281166000908152602081905260409020541615610e835760405162461bcd60e51b815260040161068b90612d59565b600060208190527fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d80546001600160a01b03858116808552604085208054929093166001600160a01b03199283161790925560018085528354909116909117909155805491610ef183612e4a565b90915550506040516001600160a01b03831681527f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea269060200160405180910390a160025460ff828116911614610f4a57610f4a81610cdc565b5050565b606060007f83d2ee3bbf5c35a5a8a0fb99a9df8b955b61832c5fa64df35730090baf04763e60001b8d8d8d8d8d8d8d8d8d8d8d604051602001610f9c9c9b9a99989796959493929190612c1a565b60408051601f1981840301815291905280516020909101209050601960f81b600160f81b610fc8611904565b6040516001600160f81b031993841660208201529290911660218301526022820152604281018290526062016040516020818303038152906040529150509b9a5050505050505050505050565b600080600061102f8e8e8e8e8e8e8e8e8e8e600454610f4e565b60048054919250600061104183612e4a565b909155505080516020820120915061105a828286610bba565b5060006110857f4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c85490565b90506001600160a01b0381161561110b57806001600160a01b031663ba0967048f8f8f8f8f8f8f8f8f8f8f336040518d63ffffffff1660e01b81526004016110d89c9b9a99989796959493929190612ccd565b600060405180830381600087803b1580156110f257600080fd5b505af1158015611106573d6000803e3d6000fd5b505050505b61113761111a8a6109c4612d90565b603f6111278c6040612dc8565b6111319190612da8565b90612359565b611143906101f4612d90565b5a10156111925760405162461bcd60e51b815260206004820152601960248201527f6e6f7420656e6f7567682067617320746f206578656320747800000000000000604482015260640161068b565b60005a90506111f48f8f8f8f8f8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250508e1591506111e19050578e61195b565b6109c45a6111ef9190612e10565b61195b565b93505a6112019082612e10565b9050838061120e57508715155b8061121857508915155b6112645760405162461bcd60e51b815260206004820152601b60248201527f6e6f7420706f737369626c6520746f20657374696d6174654761730000000000604482015260640161068b565b6000881561127c57611279828b8b8b8b611d9a565b90505b84156112c05760408051858152602081018390527f442e715f626346e8c54381002da614f62bee8d27386535b2521ec8540898556e910160405180910390a16112fa565b60408051858152602081018390527f23428b18acfb3ea64b08dc0c1d296ea9c09702c09083ca5272e64d115b687d23910160405180910390a15b50506001600160a01b0381161561136e57604051631264e26d60e31b81526004810183905283151560248201526001600160a01b03821690639327136890604401600060405180830381600087803b15801561135557600080fd5b505af1158015611369573d6000803e3d6000fd5b505050505b50509b9a5050505050505050505050565b336000908152602081905260409020546001600160a01b03166113e45760405162461bcd60e51b815260206004820152601e60248201527f6f6e6c79206f6e65206f66206f776e6572732063616e20617070726f76650000604482015260640161068b565b336000818152600660209081526040808320858452909152808220600190555183917ff2a0eb156472d1440255b0d7c1e19cc07115d1051fe605b0dce69acfec884d9c91a350565b6114346119b0565b6001600160a01b0381161580159061145557506001600160a01b0381163014155b801561146b57506001600160a01b038116600114155b6114b05760405162461bcd60e51b8152602060048201526016602482015275696e76616c6964206d6f64756c65206164647265737360501b604482015260640161068b565b6001600160a01b0382811660009081526003602052604090205481169082161461151c5760405162461bcd60e51b815260206004820152601c60248201527f6e6f7420636f72726573706f6e6420746f20746865206d6f64756c6500000000604482015260640161068b565b6001600160a01b038181166000818152600360209081526040808320805488871685528285208054919097166001600160a01b03199182161790965592849052825490941690915591519081527faab4fa2b463f581b2b32cb3b7e3b704b9ce37cc209b5fb4d77e593ace405427691015b60405180910390a15050565b60006001600160a01b0382166001148015906107df5750506001600160a01b0390811660009081526020819052604090205416151590565b6115d96119b0565b7f4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c88181556040516001600160a01b03831681527f1151116914515bc0891ff9047a6cb32cf902546f83066499bcf8ba33d2353fa29060200161158d565b61163e6119b0565b6001600160a01b0381161580159061165f57506001600160a01b0381163014155b801561167557506001600160a01b038116600114155b6116c15760405162461bcd60e51b815260206004820152601960248201527f696e76616c6964206e6577206f776e6572206164647265737300000000000000604482015260640161068b565b6001600160a01b0381811660009081526020819052604090205416156116f95760405162461bcd60e51b815260040161068b90612d59565b6001600160a01b0382161580159061171b57506001600160a01b038216600114155b6117675760405162461bcd60e51b815260206004820152601960248201527f696e76616c6964206f6c64206f776e6572206164647265737300000000000000604482015260640161068b565b6001600160a01b038381166000908152602081905260409020548116908316146117d35760405162461bcd60e51b815260206004820152601e60248201527f6e6f7420636f72726573706f6e6420746f20746865206f6c644f776e65720000604482015260640161068b565b6001600160a01b03828116600081815260208181526040808320805487871680865283862080549289166001600160a01b0319938416179055968a1685528285208054821690971790965592849052825490941690915591519081527ff8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf910160405180910390a16040516001600160a01b03821681527f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea269060200160405180910390a1505050565b6118a36119b0565b6118cb817f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d555565b6040516001600160a01b03821681527f5ac6c46c93c8d0e53714ba3b53db3e7c046da994313d7ed0d192028bc7c228b09060200161094b565b60007f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a794692184660408051602081019390935282015230606082015260800160405160208183030381529060405280519060200120905090565b60008086600181111561197e57634e487b7160e01b600052602160045260246000fd5b141561199857600080845160208601878987f190506119a7565b6000808451602086018886f490505b95945050505050565b3330146119f45760405162461bcd60e51b81526020600482015260126024820152711c995c5d5a5c9959081cd95b198818d85b1b60721b604482015260640161068b565b565b60025460ff1615611a435760405162461bcd60e51b815260206004820152601760248201527663616e206f6e6c792062652063616c6c6564206f6e636560481b604482015260640161068b565b81518160ff161115611a975760405162461bcd60e51b815260206004820152601d60248201527f7468726573686f6c64206973206d6f7265207468616e206f776e657273000000604482015260640161068b565b60018160ff161015611ae05760405162461bcd60e51b815260206004820152601260248201527130ba103632b0b9ba1037b7329037bbb732b960711b604482015260640161068b565b600160005b8351811015611c3b576000848281518110611b1057634e487b7160e01b600052603260045260246000fd5b6020026020010151905060006001600160a01b0316816001600160a01b031614158015611b4657506001600160a01b0381163014155b8015611b645750826001600160a01b0316816001600160a01b031614155b8015611b7a57506001600160a01b038116600114155b611bc25760405162461bcd60e51b81526020600482015260196024820152786e6f7420616c6c6f776564206f776e6572206164647265737360381b604482015260640161068b565b6001600160a01b038181166000908152602081905260409020541615611bfa5760405162461bcd60e51b815260040161068b90612d59565b6001600160a01b03928316600090815260208190526040902080546001600160a01b0319169382169390931790925580611c3381612e4a565b915050611ae5565b506001600160a01b03166000908152602081905260409020805460016001600160a01b0319909116811790915591519091556002805460ff191660ff909216919091179055565b600160005260036020527fa15bc60c955c405d20d9149c709e2460f1c2d9a497496a7f46004d1772c3054c546001600160a01b031615611cfe5760405162461bcd60e51b815260206004820152601760248201527663616e206f6e6c792062652063616c6c6564206f6e636560481b604482015260640161068b565b6001600081905260036020527fa15bc60c955c405d20d9149c709e2460f1c2d9a497496a7f46004d1772c3054c80546001600160a01b03191690911790556001600160a01b03821615610f4a57611d5a6001836000845a61195b565b610f4a5760405162461bcd60e51b81526020600482015260116024820152707472616e73616374696f6e206661696c7360781b604482015260640161068b565b6000806001600160a01b03831615611db25782611db4565b325b90506001600160a01b038416611e4957611de1611dd1863a612372565b611ddb8989612381565b906123cf565b6040519092506001600160a01b0382169083156108fc029084906000818181858888f19350505050611e445760405162461bcd60e51b815260206004820152600c60248201526b1c185e5b595b9d0819985a5b60a21b604482015260640161068b565b611e9f565b611e5785611ddb8989612381565b9150611e64848484612438565b611e9f5760405162461bcd60e51b815260206004820152600c60248201526b1c185e5b595b9d0819985a5b60a21b604482015260640161068b565b5095945050505050565b611eb4816041612de7565b60ff1682511015611f075760405162461bcd60e51b815260206004820152601760248201527f7369676e61747572657320697320746f6f2073686f7274000000000000000000604482015260640161068b565b6000808060008060005b8660ff1681101561234d576041818102890160208101516040820151919092015160ff1695509093509150836120f3579193508391611f51876041612de7565b60ff16821015611f7d5760405162461bcd60e51b8152602060048201526000602482015260440161068b565b8751611f8a836020612381565b1115611fce5760405162461bcd60e51b815260206004820152601360248201527209dcc9c81a5cc81bdd5d081bd988189bdd5b99606a1b604482015260640161068b565b602082890181015189519091611ff1908390611feb908790612381565b90612381565b11156120275760405162461bcd60e51b8152602060048201526005602482015264475330323360d81b604482015260640161068b565b6040516320c13b0b60e01b8082528a8501602001916001600160a01b038916906320c13b0b9061205d908f908690600401612ca8565b60206040518083038186803b15801561207557600080fd5b505afa158015612089573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ad919061283c565b6001600160e01b031916146120ec5760405162461bcd60e51b815260206004820152600560248201526411d4cc0c8d60da1b604482015260640161068b565b50506122b3565b8360ff166001141561218e579193508391336001600160a01b038416148061213d57506001600160a01b03851660009081526006602090815260408083208d845290915290205415155b6121895760405162461bcd60e51b815260206004820152601e60248201527f746865206d6573736167652068617665206265656e20617070726f7665640000604482015260640161068b565b6122b3565b601e8460ff161115612253576040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c81018b9052600190605c01604051602081830303815290604052805190602001206004866121f39190612e27565b6040805160008152602081018083529390935260ff90911690820152606081018590526080810184905260a0016020604051602081039080840390855afa158015612242573d6000803e3d6000fd5b5050506020604051035194506122b3565b6040805160008152602081018083528c905260ff861691810191909152606081018490526080810183905260019060a0016020604051602081039080840390855afa1580156122a6573d6000803e3d6000fd5b5050506020604051035194505b856001600160a01b0316856001600160a01b03161180156122ed57506001600160a01b038581166000908152602081905260409020541615155b801561230357506001600160a01b038516600114155b6123375760405162461bcd60e51b815260206004820152600560248201526423a998191b60d91b604482015260640161068b565b849550808061234590612e4a565b915050611f11565b50505050505050505050565b600081831015612369578161236b565b825b9392505050565b6000818310612369578161236b565b60008061238e8385612d90565b90508381101561236b5760405162461bcd60e51b815260206004820152600c60248201526b616464206f766572666c6f7760a01b604482015260640161068b565b6000826123de575060006107df565b60006123ea8385612dc8565b9050826123f78583612da8565b1461236b5760405162461bcd60e51b81526020600482015260116024820152706d756c7469706c79206f766572666c6f7760781b604482015260640161068b565b604080516001600160a01b03841660248201526044808201849052825180830390910181526064909101909152602080820180516001600160e01b031663a9059cbb60e01b1781528251600093929184919082896127105a03f13d80156124aa57602081146124b257600093506124bd565b8193506124bd565b600051158215171593505b5050509392505050565b80356124d281612e91565b919050565b60008083601f8401126124e8578182fd5b50813567ffffffffffffffff8111156124ff578182fd5b60208301915083602082850101111561251757600080fd5b9250929050565b600082601f83011261252e578081fd5b813567ffffffffffffffff8082111561254957612549612e7b565b604051601f8301601f19908116603f0116810190828211818310171561257157612571612e7b565b81604052838152866020858801011115612589578485fd5b8360208701602083013792830160200193909352509392505050565b8035600281106124d257600080fd5b803560ff811681146124d257600080fd5b6000602082840312156125d6578081fd5b813561236b81612e91565b600080604083850312156125f3578081fd5b82356125fe81612e91565b9150602083013561260e81612e91565b809150509250929050565b60008060006060848603121561262d578081fd5b833561263881612e91565b9250602084013561264881612e91565b9150604084013561265881612e91565b809150509250925092565b60008060408385031215612675578182fd5b823561268081612e91565b946020939093013593505050565b600080604083850312156126a0578182fd5b82356126ab81612e91565b91506126b9602084016125b4565b90509250929050565b6000806000806000806000806000806101008b8d0312156126e1578586fd5b8a3567ffffffffffffffff808211156126f8578788fd5b818d0191508d601f83011261270b578788fd5b813581811115612719578889fd5b8e60208260051b850101111561272d578889fd5b602083019c50809b505061274360208e016125b4565b995061275160408e016124c7565b985060608d0135915080821115612766578788fd5b506127738d828e016124d7565b9097509550612786905060808c016124c7565b935061279460a08c016124c7565b925060c08b013591506127a960e08c016124c7565b90509295989b9194979a5092959850565b6000602082840312156127cb578081fd5b5035919050565b6000806000606084860312156127e6578283fd5b83359250602084013567ffffffffffffffff80821115612804578384fd5b6128108783880161251e565b93506040860135915080821115612825578283fd5b506128328682870161251e565b9150509250925092565b60006020828403121561284d578081fd5b81516001600160e01b03198116811461236b578182fd5b60008060008060008060008060008060006101408c8e031215612885578081fd5b61288e8c6125a5565b9a5061289c60208d016124c7565b995060408c0135985067ffffffffffffffff8060608e013511156128be578182fd5b6128ce8e60608f01358f016124d7565b909950975060808d0135965060a08d0135955060c08d013594506128f460e08e016124c7565b93506129036101008e016124c7565b9250806101208e01351115612916578182fd5b506129288d6101208e01358e0161251e565b90509295989b509295989b9093969950565b60008060008060008060008060008060006101408c8e03121561295b578485fd5b6129648c6125a5565b9a5060208c013561297481612e91565b995060408c0135985060608c013567ffffffffffffffff811115612996578586fd5b6129a28e828f016124d7565b90995097505060808c0135955060a08c0135945060c08c0135935060e08c01356129cb81612e91565b92506101008c01356129dc81612e91565b809250506101208c013590509295989b509295989b9093969950565b60008060008060808587031215612a0d578182fd5b612a16856125a5565b93506020850135612a2681612e91565b925060408501359150606085013567ffffffffffffffff811115612a48578182fd5b612a548782880161251e565b91505092959194509250565b600060208284031215612a71578081fd5b61236b826125b4565b6000815180845260208085019450808401835b83811015612ab25781516001600160a01b031687529582019590820190600101612a8d565b509495945050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60008151808452815b81811015612b0b57602081850181015186830182015201612aef565b81811115612b1c5782602083870101525b50601f01601f19169290920160200192915050565b60028110612b4f57634e487b7160e01b600052602160045260246000fd5b9052565b6080808252810185905260008660a08301825b88811015612b96578235612b7981612e91565b6001600160a01b0316825260209283019290910190600101612b66565b5060ff96909616602084015250506001600160a01b039283166040820152911660609091015292915050565b60208152600061236b6020830184612a7a565b604081526000612be86040830185612a7a565b905060018060a01b03831660208301529392505050565b82151581526040602082015260006107a26040830184612ae6565b60006101608e8352612c2f602084018f612b31565b6001600160a01b038d81166040850152606084018d905260808401829052612c5a8285018c8e612abd565b60a085019a909a5260c0840198909852505060e081019490945291841661010084015290921661012082015261014001529695505050505050565b60208152600061236b6020830184612ae6565b604081526000612cbb6040830185612ae6565b82810360208401526119a78185612ae6565b612cd7818e612b31565b600060018060a01b03808e1660208401528c60408401526101606060840152612d0561016084018c8e612abd565b8a60808501528960a08501528860c085015281881660e0850152818716610100850152838103610120850152612d3b8187612ae6565b925050808416610140840152509d9c50505050505050505050505050565b60208082526017908201527f6475706c6963617465206f776e65722061646472657373000000000000000000604082015260600190565b60008219821115612da357612da3612e65565b500190565b600082612dc357634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615612de257612de2612e65565b500290565b600060ff821660ff84168160ff0481118215151615612e0857612e08612e65565b029392505050565b600082821015612e2257612e22612e65565b500390565b600060ff821660ff841680821015612e4157612e41612e65565b90039392505050565b6000600019821415612e5e57612e5e612e65565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114612ea657600080fd5b5056fea26469706673582212208e7668a90e2bb0b8d278de29404f768d4a49a4b5a95fc24f43b1a8aa1faa4e5064736f6c63430008040033",
"deployedBytecode": "0x6080604052600436106101a05760003560e01c8063b7f3358d116100ec578063e0e3671c1161008a578063e75235b811610064578063e75235b81461059a578063f08a0323146105bc578063f698da25146105dc578063ffa1ad74146105f1576101dc565b8063e0e3671c1461053a578063e19a9dd91461055a578063e318b52b1461057a576101dc565b8063c9106389116100c6578063c9106389146104a0578063cbb026be146104e7578063d4d9bdcd146104fa578063e009cfde1461051a576101dc565b8063b7f3358d14610433578063b91a667f14610453578063bbba4b3b14610473576101dc565b80636d8695121161015957806386111a1e1161013357806386111a1e146103ad578063934f3a11146103db578063a0e67e2b146103fb578063affed0e01461041d576101dc565b80636d869512146103355780637d83297414610355578063810fdcd71461038d576101dc565b80631b0dcbcb146102425780632a3c1871146102795780632d9ad53d146102a95780633408e470146102c95780635ae6bd37146102e6578063610b592514610313576101dc565b366101dc5760405134815233907f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f885258749060200160405180910390a2005b3480156101e857600080fd5b507f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d580548061021357005b36600080373360601b365260008060143601600080855af190503d6000803e8061023c573d6000fd5b503d6000f35b34801561024e57600080fd5b5061026261025d3660046129f8565b610622565b604051610270929190612bff565b60405180910390f35b34801561028557600080fd5b506102996102943660046129f8565b6106c6565b6040519015158152602001610270565b3480156102b557600080fd5b506102996102c43660046125c5565b6107aa565b3480156102d557600080fd5b50465b604051908152602001610270565b3480156102f257600080fd5b506102d86103013660046127ba565b60056020526000908152604090205481565b34801561031f57600080fd5b5061033361032e3660046125c5565b6107e5565b005b34801561034157600080fd5b506103336103503660046126c2565b610956565b34801561036157600080fd5b506102d8610370366004612663565b600660209081526000928352604080842090915290825290205481565b34801561039957600080fd5b506102d86103a836600461293a565b610a77565b3480156103b957600080fd5b506103cd6103c8366004612663565b610aa4565b604051610270929190612bd5565b3480156103e757600080fd5b506103336103f63660046127d2565b610bba565b34801561040757600080fd5b50610410610bd2565b6040516102709190612bc2565b34801561042957600080fd5b506102d860045481565b34801561043f57600080fd5b5061033361044e366004612a60565b610cdc565b34801561045f57600080fd5b5061033361046e36600461268e565b610dc4565b34801561047f57600080fd5b5061049361048e36600461293a565b610f4e565b6040516102709190612c95565b3480156104ac57600080fd5b507f4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c8546040516001600160a01b039091168152602001610270565b6102996104f5366004612864565b611015565b34801561050657600080fd5b506103336105153660046127ba565b61137f565b34801561052657600080fd5b506103336105353660046125e1565b61142c565b34801561054657600080fd5b506102996105553660046125c5565b611599565b34801561056657600080fd5b506103336105753660046125c5565b6115d1565b34801561058657600080fd5b50610333610595366004612619565b611636565b3480156105a657600080fd5b5060025460405160ff9091168152602001610270565b3480156105c857600080fd5b506103336105d73660046125c5565b61189b565b3480156105e857600080fd5b506102d8611904565b3480156105fd57600080fd5b50610493604051806040016040528060058152602001640302e342e360dc1b81525081565b600060603360011480159061064e5750336000908152600360205260409020546001600160a01b031615155b6106945760405162461bcd60e51b81526020600482015260126024820152716e6f7420616c6c6f776564206d6f64756c6560701b60448201526064015b60405180910390fd5b6106a0868686866106c6565b915060405160203d0181016040523d81523d6000602083013e8091505094509492505050565b6000336001148015906106f05750336000908152600360205260409020546001600160a01b031615155b6107315760405162461bcd60e51b81526020600482015260126024820152716e6f7420616c6c6f776564206d6f64756c6560701b604482015260640161068b565b61073e858585855a61195b565b905080156107765760405133907f6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb890600090a26107a2565b60405133907facd2c8702804128fdb0db2bb49f6d127dd0181c13fd45dbfe16de0930e2bd37590600090a25b949350505050565b60006001600160a01b0382166001148015906107df57506001600160a01b038281166000908152600360205260409020541615155b92915050565b6107ed6119b0565b6001600160a01b0381161580159061080e57506001600160a01b0381163014155b801561082457506001600160a01b038116600114155b6108695760405162461bcd60e51b8152602060048201526016602482015275696e76616c6964206d6f64756c65206164647265737360501b604482015260640161068b565b6001600160a01b03818116600090815260036020526040902054166108c55760405162461bcd60e51b8152602060048201526012602482015271647570206d6f64756c65206164647265737360701b604482015260640161068b565b6001600160a01b0381166000818152600360209081526040808320805460016001600160a01b0319918216811790925593527fa15bc60c955c405d20d9149c709e2460f1c2d9a497496a7f46004d1772c3054c8054909316841790925590519182527fecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f844091015b60405180910390a150565b6109948a8a808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508c92506119f6915050565b6001600160a01b038416156109cb576109cb847f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d555565b610a0b8787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c8292505050565b8115610a2257610a2082600060018685611d9a565b505b336001600160a01b03167fdc86375db5b88ae3bf25a0a03e198779c97c398ee0c63aa5b9180849108920748b8b8b8b89604051610a63959493929190612b53565b60405180910390a250505050505050505050565b6000610a8c8c8c8c8c8c8c8c8c8c8c8c610f4e565b8051906020012090509b9a5050505050505050505050565b606060008267ffffffffffffffff811115610acf57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610af8578160200160208202803683370190505b506001600160a01b0380861660009081526003602052604081205492945091165b6001600160a01b03811615801590610b3b57506001600160a01b038116600114155b8015610b4657508482105b15610bac5780848381518110610b6c57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152918116600090815260039092526040909120541681610ba481612e4a565b925050610b19565b908352919491935090915050565b60025460ff16610bcc84848484611ea9565b50505050565b6060600060015467ffffffffffffffff811115610bff57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610c28578160200160208202803683370190505b506001600090815260208190527fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d549192506001600160a01b03909116905b600154811015610cd45781838281518110610c9257634e487b7160e01b600052603260045260246000fd5b6001600160a01b039