0 txs
0 calls
constructor
constructor(address gasCollector_)
functions
contractId
purefunction contractId() pure returns (bytes32)
gasCollector
viewfunction gasCollector() view returns (address)
implementation
viewfunction implementation() view returns (address implementation_)
owner
viewfunction owner() view returns (address owner_)
pendingOwner
viewfunction pendingOwner() view returns (address owner_)
acceptOwnership
nonpayablefunction acceptOwnership()
addExpressGas
nonpayablefunction addExpressGas(bytes32 txHash, uint256 logIndex, address gasToken, uint256 gasFeeAmount, address refundAddress)
addGas
nonpayablefunction addGas(bytes32 txHash, uint256 logIndex, address gasToken, uint256 gasFeeAmount, address refundAddress)
addNativeExpressGas
payablefunction addNativeExpressGas(bytes32 txHash, uint256 logIndex, address refundAddress) payable
addNativeGas
payablefunction addNativeGas(bytes32 txHash, uint256 logIndex, address refundAddress) payable
collectFees
nonpayablefunction collectFees(address receiver, address[] tokens, uint256[] amounts)
payGasForContractCall
nonpayablefunction payGasForContractCall(address sender, string destinationChain, string destinationAddress, bytes payload, address gasToken, uint256 gasFeeAmount, address refundAddress)
payGasForContractCallWithToken
nonpayablefunction payGasForContractCallWithToken(address sender, string destinationChain, string destinationAddress, bytes payload, string symbol, uint256 amount, address gasToken, uint256 gasFeeAmount, address refundAddress)
payGasForExpressCall
nonpayablefunction payGasForExpressCall(address sender, string destinationChain, string destinationAddress, bytes payload, address gasToken, uint256 gasFeeAmount, address refundAddress)
payGasForExpressCallWithToken
nonpayablefunction payGasForExpressCallWithToken(address sender, string destinationChain, string destinationAddress, bytes payload, string symbol, uint256 amount, address gasToken, uint256 gasFeeAmount, address refundAddress)
payNativeGasForContractCall
payablefunction payNativeGasForContractCall(address sender, string destinationChain, string destinationAddress, bytes payload, address refundAddress) payable
payNativeGasForContractCallWithToken
payablefunction payNativeGasForContractCallWithToken(address sender, string destinationChain, string destinationAddress, bytes payload, string symbol, uint256 amount, address refundAddress) payable
payNativeGasForExpressCall
payablefunction payNativeGasForExpressCall(address sender, string destinationChain, string destinationAddress, bytes payload, address refundAddress) payable
payNativeGasForExpressCallWithToken
payablefunction payNativeGasForExpressCallWithToken(address sender, string destinationChain, string destinationAddress, bytes payload, string symbol, uint256 amount, address refundAddress) payable
proposeOwnership
nonpayablefunction proposeOwnership(address newOwner)
refund
nonpayablefunction refund(address receiver, address token, uint256 amount)
refund
nonpayablefunction refund(bytes32 txHash, uint256 logIndex, address receiver, address token, uint256 amount)
setup
nonpayablefunction setup(bytes data)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
upgrade
nonpayablefunction upgrade(address newImplementation, bytes32 newImplementationCodeHash, bytes params)
events
ExpressGasAdded
event ExpressGasAdded(bytes32 indexed txHash, uint256 indexed logIndex, address gasToken, uint256 gasFeeAmount, address refundAddress)
GasAdded
event GasAdded(bytes32 indexed txHash, uint256 indexed logIndex, address gasToken, uint256 gasFeeAmount, address refundAddress)
GasPaidForContractCall
event GasPaidForContractCall(address indexed sourceAddress, string destinationChain, string destinationAddress, bytes32 indexed payloadHash, address gasToken, uint256 gasFeeAmount, address refundAddress)
GasPaidForContractCallWithToken
event GasPaidForContractCallWithToken(address indexed sourceAddress, string destinationChain, string destinationAddress, bytes32 indexed payloadHash, string symbol, uint256 amount, address gasToken, uint256 gasFeeAmount, address refundAddress)
GasPaidForExpressCall
event GasPaidForExpressCall(address indexed sourceAddress, string destinationChain, string destinationAddress, bytes32 indexed payloadHash, address gasToken, uint256 gasFeeAmount, address refundAddress)
GasPaidForExpressCallWithToken
event GasPaidForExpressCallWithToken(address indexed sourceAddress, string destinationChain, string destinationAddress, bytes32 indexed payloadHash, string symbol, uint256 amount, address gasToken, uint256 gasFeeAmount, address refundAddress)
NativeExpressGasAdded
event NativeExpressGasAdded(bytes32 indexed txHash, uint256 indexed logIndex, uint256 gasFeeAmount, address refundAddress)
NativeGasAdded
event NativeGasAdded(bytes32 indexed txHash, uint256 indexed logIndex, uint256 gasFeeAmount, address refundAddress)
NativeGasPaidForContractCall
event NativeGasPaidForContractCall(address indexed sourceAddress, string destinationChain, string destinationAddress, bytes32 indexed payloadHash, uint256 gasFeeAmount, address refundAddress)
NativeGasPaidForContractCallWithToken
event NativeGasPaidForContractCallWithToken(address indexed sourceAddress, string destinationChain, string destinationAddress, bytes32 indexed payloadHash, string symbol, uint256 amount, uint256 gasFeeAmount, address refundAddress)
NativeGasPaidForExpressCall
event NativeGasPaidForExpressCall(address indexed sourceAddress, string destinationChain, string destinationAddress, bytes32 indexed payloadHash, uint256 gasFeeAmount, address refundAddress)
NativeGasPaidForExpressCallWithToken
event NativeGasPaidForExpressCallWithToken(address indexed sourceAddress, string destinationChain, string destinationAddress, bytes32 indexed payloadHash, string symbol, uint256 amount, uint256 gasFeeAmount, address refundAddress)
OwnershipTransferred
event OwnershipTransferred(address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed newOwner)
Refunded
event Refunded(bytes32 indexed txHash, uint256 indexed logIndex, address receiver, address token, uint256 amount)
Upgraded
event Upgraded(address indexed newImplementation)
errors
InvalidAddress
error InvalidAddress()
InvalidAmounts
error InvalidAmounts()
InvalidCodeHash
error InvalidCodeHash()
InvalidImplementation
error InvalidImplementation()
InvalidOwner
error InvalidOwner()
InvalidOwnerAddress
error InvalidOwnerAddress()
NativeTransferFailed
error NativeTransferFailed()
NotCollector
error NotCollector()
NotOwner
error NotOwner()
NotProxy
error NotProxy()
SetupFailed
error SetupFailed()
TokenTransferFailed
error TokenTransferFailed()
creation bytecode
0x60c06040523480156200001157600080fd5b50604051620020a2380380620020a28339810160408190526200003491620000fc565b6001620000418162000058565b50306080526001600160a01b031660a0526200012e565b6001600160a01b0381166200008057604051633649397d60e21b815260040160405180910390fd5b6040516001600160a01b038216907f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616390600090a27f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c05560007f9855384122b55936fbfb8ca5120e63c6537a1ac40caf6ae33502b3c5da8c87d155565b6000602082840312156200010f57600080fd5b81516001600160a01b03811681146200012757600080fd5b9392505050565b60805160a051611f39620001696000396000818161034501528181610560015281816108cb0152610ab401526000610b060152611f396000f3fe6080604052600436106101965760003560e01c8063892b5007116100e1578063c62c20021161008a578063edb6b3a511610064578063edb6b3a514610475578063f2fde38b14610495578063f61ed218146104b5578063fd09e3bd146104c857600080fd5b8063c62c20021461041b578063cd433ada1461042e578063e30c39781461044157600080fd5b8063a3499c73116100bb578063a3499c73146103bb578063ab1999ba146103db578063ba9ddc8d146103fb57600080fd5b8063892b5007146103335780638da5cb5b146103675780639ded06df1461039b57600080fd5b80634d2384891161014357806379ba50971161011d57806379ba5097146102c35780638291286c146102d857806382ad6f351461031357600080fd5b80634d238489146102435780635c60da1b14610256578063710bf322146102a357600080fd5b80632e9b7470116101745780632e9b7470146101f05780632edd2aa814610203578063365047211461022357600080fd5b80630c93e3bb1461019b5780631055eaaf146101b057806317a49f7c146101d0575b600080fd5b6101ae6101a9366004611566565b6104e8565b005b3480156101bc57600080fd5b506101ae6101cb36600461166b565b610555565b3480156101dc57600080fd5b506101ae6101eb366004611791565b61074f565b6101ae6101fe3660046118af565b6107db565b34801561020f57600080fd5b506101ae61021e3660046119a2565b610851565b34801561022f57600080fd5b506101ae61023e3660046119f8565b6108c0565b6101ae610251366004611a4a565b610915565b34801561026257600080fd5b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102af57600080fd5b506101ae6102be366004611a83565b610960565b3480156102cf57600080fd5b506101ae610a2f565b3480156102e457600080fd5b506040517ffaa2f015f2ce5aee225904728de2def86eb8837491efd21f1a04fc20d8e923f6815260200161029a565b34801561031f57600080fd5b506101ae61032e366004611aa7565b610aa9565b34801561033f57600080fd5b506102867f000000000000000000000000000000000000000000000000000000000000000081565b34801561037357600080fd5b507f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c054610286565b3480156103a757600080fd5b506101ae6103b6366004611ae8565b610b04565b3480156103c757600080fd5b506101ae6103d6366004611b2a565b610b6b565b3480156103e757600080fd5b506101ae6103f63660046119a2565b610ea8565b34801561040757600080fd5b506101ae610416366004611b86565b610ef7565b6101ae6104293660046118af565b610f7d565b6101ae61043c366004611a4a565b610fde565b34801561044d57600080fd5b507f9855384122b55936fbfb8ca5120e63c6537a1ac40caf6ae33502b3c5da8c87d154610286565b34801561048157600080fd5b506101ae610490366004611791565b611020565b3480156104a157600080fd5b506101ae6104b0366004611a83565b611081565b6101ae6104c3366004611566565b6110d1565b3480156104d457600080fd5b506101ae6104e3366004611b86565b61112c565b82826040516104f8929190611c5e565b6040518091039020886001600160a01b03167f617332c1832058df6ee45fcbdf471251474c9945a8e5d229287a21a5f67ccf0a89898989348860405161054396959493929190611c97565b60405180910390a35050505050505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461059d57604051623bb10360e91b815260040160405180910390fd5b6001600160a01b0385166105c45760405163e6c4247b60e01b815260040160405180910390fd5b828181146105e557604051636c2b7e2d60e11b815260040160405180910390fd5b60005b8181101561074657600086868381811061060457610604611ce1565b90506020020160208101906106199190611a83565b9050600085858481811061062f5761062f611ce1565b905060200201359050806000141561065a57604051636c2b7e2d60e11b815260040160405180910390fd5b6001600160a01b03821661068757478111610682576106826001600160a01b038a1682611189565b610731565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038316906370a082319060240160206040518083038186803b1580156106df57600080fd5b505afa1580156106f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107179190611cf7565b8111610731576107316001600160a01b0383168a836111ce565b5050808061073e90611d10565b9150506105e8565b50505050505050565b868660405161075f929190611c5e565b60405180910390208c6001600160a01b03167fda4ed638a7ffe9e814722efdb9ad6058c152c19c8564ceffe52e11dda1ca32238d8d8d8d8b8b8b8b8b6040516107b099989796959493929190611d65565b60405180910390a36107cd6001600160a01b038416333085611277565b505050505050505050505050565b85856040516107eb929190611c5e565b60405180910390208b6001600160a01b03167f8c092067e86e85e8cfbaf187202ef580cdfd7ec37fbec89191607de73ca800058c8c8c8c8a8a8a348b60405161083c99989796959493929190611dee565b60405180910390a35050505050505050505050565b604080516001600160a01b03808616825260208201859052831691810191909152849086907ff0b09bf969e7958967e0968e22596f647dd6efa09f4778e0393967b881f4b09f906060015b60405180910390a36108b96001600160a01b038416333085611277565b5050505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461090857604051623bb10360e91b815260040160405180910390fd5b6108b985858585856112ce565b604080513481526001600160a01b0383166020820152839185917fb26db521e067acd5c6e345ad92fa1ed06bc7fb2aedd68f35dc7a2e10d636fc9891015b60405180910390a3505050565b336109897f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c05490565b6001600160a01b0316146109b0576040516330cd747160e01b815260040160405180910390fd5b6001600160a01b0381166109d757604051633649397d60e21b815260040160405180910390fd5b6040516001600160a01b038216907fd9be0e8e07417e00f2521db636cb53e316fd288f5051f16d2aa2bf0c3938a87690600090a27f9855384122b55936fbfb8ca5120e63c6537a1ac40caf6ae33502b3c5da8c87d155565b6000610a597f9855384122b55936fbfb8ca5120e63c6537a1ac40caf6ae33502b3c5da8c87d15490565b90506001600160a01b0381163314610a9d576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610aa68161137e565b50565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610af157604051623bb10360e91b815260040160405180910390fd5b610aff6000808585856112ce565b505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316301415610b67576040517fbf10dd3a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050565b33610b947f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c05490565b6001600160a01b031614610bbb576040516330cd747160e01b815260040160405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b0316638291286c6040518163ffffffff1660e01b815260040160206040518083038186803b158015610c1557600080fd5b505afa158015610c29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4d9190611cf7565b846001600160a01b0316638291286c6040518163ffffffff1660e01b815260040160206040518083038186803b158015610c8657600080fd5b505afa158015610c9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cbe9190611cf7565b14610cf5576040517f68155f9a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b03163f8314610d38576040517f8f84fb2400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040516001600160a01b038516907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28015610e81576000846001600160a01b0316639ded06df60e01b8484604051602401610d99929190611e55565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909416939093179092529051610e049190611e71565b600060405180830381855af49150503d8060008114610e3f576040519150601f19603f3d011682016040523d82523d6000602084013e610e44565b606091505b5050905080610e7f576040517f97905dfb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b5050507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b604080516001600160a01b03808616825260208201859052831691810191909152849086907f2275e75614080f9782f72563c2c1688c901c5339c7f9f436d323f9386fed700a9060600161089c565b8484604051610f07929190611c5e565b60405180910390208a6001600160a01b03167fd171a7eb157e548ca493dd0a16016d125963a369ac5ae3c275ec12c96d5277028b8b8b8b898989604051610f549796959493929190611e8d565b60405180910390a3610f716001600160a01b038416333085611277565b50505050505050505050565b8585604051610f8d929190611c5e565b60405180910390208b6001600160a01b03167f999d431b58761213cf53af96262b67a069cbd963499fd8effd1e21556217b8418c8c8c8c8a8a8a348b60405161083c99989796959493929190611dee565b604080513481526001600160a01b0383166020820152839185917ffeb6b00343feee0f29a1a4345f8bf93ca1c73ee922248a4237a4e50d6447604e9101610953565b8686604051611030929190611c5e565b60405180910390208c6001600160a01b03167f8875f9764f28fa82d3e7ff1b80bd5c8f665e1f42fcd8c2faebc7c400a4ba1bbd8d8d8d8d8b8b8b8b8b6040516107b099989796959493929190611d65565b336110aa7f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c05490565b6001600160a01b031614610a9d576040516330cd747160e01b815260040160405180910390fd5b82826040516110e1929190611c5e565b6040518091039020886001600160a01b03167f5cf48f121a0fecaa2c4a64b3eaf482c8c308d5387e161535970f3e9e4363eff689898989348860405161054396959493929190611c97565b848460405161113c929190611c5e565b60405180910390208a6001600160a01b03167f99206760f0be19dd093729bd35e5924daff5e217bcedc5223ed067b60008cf8a8b8b8b8b898989604051610f549796959493929190611e8d565b600080600080600085875af1905080610aff576040517ff4b3b1bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040516001600160a01b038316602482015260448101829052610aff9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611421565b6040516001600160a01b03808516602483015283166044820152606481018290526112c89085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611213565b50505050565b6001600160a01b0383166112f55760405163e6c4247b60e01b815260040160405180910390fd5b604080516001600160a01b03808616825284166020820152908101829052849086907fd5df103822011013c8c940930e5180419111c65abadd6525ca7e740d56b4703f9060600160405180910390a36001600160a01b03821661136a576113656001600160a01b03841682611189565b6108b9565b6108b96001600160a01b03831684836111ce565b6001600160a01b0381166113a557604051633649397d60e21b815260040160405180910390fd5b6040516001600160a01b038216907f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616390600090a27f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c05560007f9855384122b55936fbfb8ca5120e63c6537a1ac40caf6ae33502b3c5da8c87d155565b600080836001600160a01b03168360405161143c9190611e71565b6000604051808303816000865af19150503d8060008114611479576040519150601f19603f3d011682016040523d82523d6000602084013e61147e565b606091505b509150915060008280156114aa5750815115806114aa5750818060200190518101906114aa9190611ee1565b90508015806114c157506001600160a01b0385163b155b156108b9576040517f045c4b0200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381168114610aa657600080fd5b8035611518816114f8565b919050565b60008083601f84011261152f57600080fd5b50813567ffffffffffffffff81111561154757600080fd5b60208301915083602082850101111561155f57600080fd5b9250929050565b60008060008060008060008060a0898b03121561158257600080fd5b883561158d816114f8565b9750602089013567ffffffffffffffff808211156115aa57600080fd5b6115b68c838d0161151d565b909950975060408b01359150808211156115cf57600080fd5b6115db8c838d0161151d565b909750955060608b01359150808211156115f457600080fd5b506116018b828c0161151d565b9094509250506080890135611615816114f8565b809150509295985092959890939650565b60008083601f84011261163857600080fd5b50813567ffffffffffffffff81111561165057600080fd5b6020830191508360208260051b850101111561155f57600080fd5b60008060008060006060868803121561168357600080fd5b853561168e816114f8565b9450602086013567ffffffffffffffff808211156116ab57600080fd5b6116b789838a01611626565b909650945060408801359150808211156116d057600080fd5b506116dd88828901611626565b969995985093965092949392505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261171557600080fd5b813567ffffffffffffffff80821115611730576117306116ee565b604051601f8301601f19908116603f01168101908282118183101715611758576117586116ee565b8160405283815286602085880101111561177157600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000806000806000806000806000806101208d8f0312156117b457600080fd5b6117bd8d61150d565b9b5067ffffffffffffffff60208e013511156117d857600080fd5b6117e88e60208f01358f0161151d565b909b50995067ffffffffffffffff60408e0135111561180657600080fd5b6118168e60408f01358f0161151d565b909950975067ffffffffffffffff60608e0135111561183457600080fd5b6118448e60608f01358f0161151d565b909750955067ffffffffffffffff60808e0135111561186257600080fd5b6118728e60808f01358f01611704565b945060a08d0135935061188760c08e0161150d565b925060e08d0135915061189d6101008e0161150d565b90509295989b509295989b509295989b565b600080600080600080600080600080600060e08c8e0312156118d057600080fd5b6118d98c61150d565b9a5067ffffffffffffffff8060208e013511156118f557600080fd5b6119058e60208f01358f0161151d565b909b50995060408d013581101561191b57600080fd5b61192b8e60408f01358f0161151d565b909950975060608d013581101561194157600080fd5b6119518e60608f01358f0161151d565b909750955060808d013581101561196757600080fd5b506119788d60808e01358e0161151d565b909450925060a08c0135915061199060c08d0161150d565b90509295989b509295989b9093969950565b600080600080600060a086880312156119ba57600080fd5b853594506020860135935060408601356119d3816114f8565b92506060860135915060808601356119ea816114f8565b809150509295509295909350565b600080600080600060a08688031215611a1057600080fd5b85359450602086013593506040860135611a29816114f8565b92506060860135611a39816114f8565b949793965091946080013592915050565b600080600060608486031215611a5f57600080fd5b83359250602084013591506040840135611a78816114f8565b809150509250925092565b600060208284031215611a9557600080fd5b8135611aa0816114f8565b9392505050565b600080600060608486031215611abc57600080fd5b8335611ac7816114f8565b92506020840135611ad7816114f8565b929592945050506040919091013590565b60008060208385031215611afb57600080fd5b823567ffffffffffffffff811115611b1257600080fd5b611b1e8582860161151d565b90969095509350505050565b60008060008060608587031215611b4057600080fd5b8435611b4b816114f8565b935060208501359250604085013567ffffffffffffffff811115611b6e57600080fd5b611b7a8782880161151d565b95989497509550505050565b60008060008060008060008060008060e08b8d031215611ba557600080fd5b8a35611bb0816114f8565b995060208b013567ffffffffffffffff80821115611bcd57600080fd5b611bd98e838f0161151d565b909b50995060408d0135915080821115611bf257600080fd5b611bfe8e838f0161151d565b909950975060608d0135915080821115611c1757600080fd5b50611c248d828e0161151d565b90965094505060808b0135611c38816114f8565b925060a08b01359150611c4d60c08c0161150d565b90509295989b9194979a5092959850565b8183823760009101908152919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b608081526000611cab60808301888a611c6e565b8281036020840152611cbe818789611c6e565b9150508360408301526001600160a01b0383166060830152979650505050505050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611d0957600080fd5b5051919050565b6000600019821415611d3257634e487b7160e01b600052601160045260246000fd5b5060010190565b60005b83811015611d54578181015183820152602001611d3c565b838111156112c85750506000910152565b60e081526000611d7960e083018b8d611c6e565b8281036020840152611d8c818a8c611c6e565b905082810360408401528751808252611dac816020840160208c01611d39565b60608401979097526001600160a01b03958616608084015260a083019490945250921660c0909201919091526020601f909201601f1916010195945050505050565b60c081526000611e0260c083018b8d611c6e565b8281036020840152611e15818a8c611c6e565b90508281036040840152611e2a81888a611c6e565b6060840196909652505060808101929092526001600160a01b031660a0909101529695505050505050565b602081526000611e69602083018486611c6e565b949350505050565b60008251611e83818460208701611d39565b9190910192915050565b60a081526000611ea160a08301898b611c6e565b8281036020840152611eb481888a611c6e565b6001600160a01b039687166040850152606084019590955250509216608090920191909152949350505050565b600060208284031215611ef357600080fd5b81518015158114611aa057600080fdfea26469706673582212205bea4548792d5e969db468efab61606ac6679ee26b5a75ed3cbb7288303b0b4f64736f6c634300080900330000000000000000000000007ddb2d76b80b0aa19bdea48eb1301182f4ceefbc