0 txs
77.4k calls
constructor
constructor()
functions
ASSET_HANDLER_ROLE
viewfunction ASSET_HANDLER_ROLE() view returns (bytes32)
custody
viewfunction custody() view returns (address)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
MAX_PAYLOAD_SIZE
viewfunction MAX_PAYLOAD_SIZE() view returns (uint256)
paused
viewfunction paused() view returns (bool)
PAUSER_ROLE
viewfunction PAUSER_ROLE() view returns (bytes32)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
TSS_ROLE
viewfunction TSS_ROLE() view returns (bytes32)
tssAddress
viewfunction tssAddress() view returns (address)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
zetaConnector
viewfunction zetaConnector() view returns (address)
zetaToken
viewfunction zetaToken() view returns (address)
call
nonpayablefunction call(address receiver, bytes payload, tuple revertOptions)
deposit
payablefunction deposit(address receiver, tuple revertOptions) payable
deposit
nonpayablefunction deposit(address receiver, uint256 amount, address asset, tuple revertOptions)
depositAndCall
payablefunction depositAndCall(address receiver, bytes payload, tuple revertOptions) payable
depositAndCall
nonpayablefunction depositAndCall(address receiver, uint256 amount, address asset, bytes payload, tuple revertOptions)
execute
payablefunction execute(tuple messageContext, address destination, bytes data) payable returns (bytes)
executeRevert
payablefunction executeRevert(address destination, bytes data, tuple revertContext) payable
executeWithERC20
nonpayablefunction executeWithERC20(tuple messageContext, address token, address to, uint256 amount, bytes data)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(address tssAddress_, address zetaToken_, address admin_)
pause
nonpayablefunction pause()
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revertWithERC20
nonpayablefunction revertWithERC20(address token, address to, uint256 amount, bytes data, tuple revertContext)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setConnector
nonpayablefunction setConnector(address zetaConnector_)
setCustody
nonpayablefunction setCustody(address custody_)
unpause
nonpayablefunction unpause()
updateTSSAddress
nonpayablefunction updateTSSAddress(address newTSSAddress)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
Called
event Called(address indexed sender, address indexed receiver, bytes payload, (address revertAddress, bool callOnRevert, address abortAddress, bytes revertMessage, uint256 onRevertGasLimit) revertOptions)
Deposited
event Deposited(address indexed sender, address indexed receiver, uint256 amount, address asset, bytes payload, (address revertAddress, bool callOnRevert, address abortAddress, bytes revertMessage, uint256 onRevertGasLimit) revertOptions)
DepositedAndCalled
event DepositedAndCalled(address indexed sender, address indexed receiver, uint256 amount, address asset, bytes payload, (address revertAddress, bool callOnRevert, address abortAddress, bytes revertMessage, uint256 onRevertGasLimit) revertOptions)
Executed
event Executed(address indexed destination, uint256 value, bytes data)
ExecutedWithERC20
event ExecutedWithERC20(address indexed token, address indexed to, uint256 amount, bytes data)
Initialized
event Initialized(uint64 version)
Paused
event Paused(address account)
Reverted
event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address sender, address asset, uint256 amount, bytes revertMessage) revertContext)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
Unpaused
event Unpaused(address account)
UpdatedGatewayTSSAddress
event UpdatedGatewayTSSAddress(address oldTSSAddress, address newTSSAddress)
Upgraded
event Upgraded(address indexed implementation)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
ApprovalFailed
error ApprovalFailed()
CallOnRevertNotSupported
error CallOnRevertNotSupported()
ConnectorInitialized
error ConnectorInitialized()
CustodyInitialized
error CustodyInitialized()
DepositFailed
error DepositFailed()
EnforcedPause
error EnforcedPause()
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
ExecutionFailed
error ExecutionFailed()
ExpectedPause
error ExpectedPause()
FailedInnerCall
error FailedInnerCall()
InsufficientERC20Amount
error InsufficientERC20Amount()
InsufficientETHAmount
error InsufficientETHAmount()
InvalidInitialization
error InvalidInitialization()
NotAllowedToCallOnCall
error NotAllowedToCallOnCall()
NotAllowedToCallOnRevert
error NotAllowedToCallOnRevert()
NotInitializing
error NotInitializing()
NotWhitelistedInCustody
error NotWhitelistedInCustody()
PayloadSizeExceeded
error PayloadSizeExceeded()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
ZeroAddress
error ZeroAddress()
ZETANotSupported
error ZETANotSupported()
creation bytecode
0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051613a616100fd600039600081816122e20152818161230b01526124c30152613a616000f3fe6080604052600436106102195760003560e01c8063744b9b8b1161011d578063aa0c0fc1116100b0578063cb7ba8e51161007f578063d547741f11610064578063d547741f146106ad578063dda79b75146106cd578063e63ab1e9146106ed57600080fd5b8063cb7ba8e51461067a578063d09e3b781461068d57600080fd5b8063aa0c0fc1146105d1578063ad3cb1cc146105f1578063ae7a3a6f1461063a578063c0c53b8b1461065a57600080fd5b8063950837aa116100ec578063950837aa14610552578063a217fddf14610572578063a2ba193414610587578063a783c7891461059d57600080fd5b8063744b9b8b146104a55780637bbe9afa146104b85780638456cb59146104d857806391d14854146104ed57600080fd5b806338e22527116101b057806357bec62f1161017f5780635c975abb116101645780635c975abb146104275780635d62c8601461045e578063726ac97c1461049257600080fd5b806357bec62f146103e75780635b1125911461040757600080fd5b806338e225271461038a5780633f4ba83a146103aa5780634f1ef286146103bf57806352d1902d146103d257600080fd5b806321e093b1116101ec57806321e093b1146102b5578063248a9ca3146102ed5780632f2ff15d1461034a57806336568abe1461036a57600080fd5b806301ffc9a71461021e57806310188aef14610253578063102614b0146102755780631becceb414610295575b600080fd5b34801561022a57600080fd5b5061023e610239366004612f60565b610721565b60405190151581526020015b60405180910390f35b34801561025f57600080fd5b5061027361026e366004612fbe565b6107ba565b005b34801561028157600080fd5b50610273610290366004612ff1565b610895565b3480156102a157600080fd5b506102736102b03660046130a2565b6109a8565b3480156102c157600080fd5b506003546102d5906001600160a01b031681565b6040516001600160a01b03909116815260200161024a565b3480156102f957600080fd5b5061033c610308366004613109565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b60405190815260200161024a565b34801561035657600080fd5b50610273610365366004613122565b610ab8565b34801561037657600080fd5b50610273610385366004613122565b610b02565b61039d610398366004613160565b610b53565b60405161024a9190613212565b3480156103b657600080fd5b50610273610c6f565b6102736103cd3660046132ad565b610ca4565b3480156103de57600080fd5b5061033c610cc3565b3480156103f357600080fd5b506002546102d5906001600160a01b031681565b34801561041357600080fd5b506001546102d5906001600160a01b031681565b34801561043357600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661023e565b34801561046a57600080fd5b5061033c7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b6102736104a036600461333e565b610cf2565b6102736104b33660046130a2565b610e87565b3480156104c457600080fd5b506102736104d336600461338c565b61102b565b3480156104e457600080fd5b5061027361135c565b3480156104f957600080fd5b5061023e610508366004613122565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561055e57600080fd5b5061027361056d366004612fbe565b61138e565b34801561057e57600080fd5b5061033c600081565b34801561059357600080fd5b5061033c61040081565b3480156105a957600080fd5b5061033c7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b3480156105dd57600080fd5b506102736105ec36600461341e565b6114a5565b3480156105fd57600080fd5b5061039d6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b34801561064657600080fd5b50610273610655366004612fbe565b611646565b34801561066657600080fd5b506102736106753660046134b6565b611721565b6102736106883660046134f9565b6119e8565b34801561069957600080fd5b506102736106a836600461356c565b611bca565b3480156106b957600080fd5b506102736106c8366004613122565b611cec565b3480156106d957600080fd5b506000546102d5906001600160a01b031681565b3480156106f957600080fd5b5061033c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107b457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60006107c581611d30565b6001600160a01b0382166107ec5760405163d92e233d60e01b815260040160405180910390fd5b6002546001600160a01b03161561082f576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108597f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611d3a565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61089d611e27565b826000036108d7576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166108fe5760405163d92e233d60e01b815260040160405180910390fd5b61040061090e60608301836135f7565b90501115610948576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610953338385611e85565b836001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c85858560405161099a93929190613776565b60405180910390a350505050565b6109b0611e27565b6109c060408201602083016137ac565b156109f7576040517f19b4bff200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038416610a1e5760405163d92e233d60e01b815260040160405180910390fd5b610400610a2e60608301836135f7565b610a399150846137c9565b1115610a71576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167fd34634f30f94a646fdf4ce7078f38fc5fa0d3f0b193658facea4e3e43330d97485858560405161099a93929190613803565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610af281611d30565b610afc8383611d3a565b50505050565b6001600160a01b0381163314610b44576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b4e8282611fa6565b505050565b6060610b5d61206a565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610b8781611d30565b610b8f611e27565b6001600160a01b038516610bb65760405163d92e233d60e01b815260040160405180910390fd5b60606000610bc76020890189612fbe565b6001600160a01b031603610be757610be08686866120eb565b9050610bf6565b610bf38787878761219e565b90505b856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f348787604051610c3393929190613829565b60405180910390a2915050610c6760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b949350505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610c9981611d30565b610ca1612247565b50565b610cac6122d7565b610cb5826123a7565b610cbf82826123b2565b5050565b6000610ccd6124b8565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b610cfa611e27565b34600003610d34576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216610d5b5760405163d92e233d60e01b815260040160405180910390fd5b610400610d6b60608301836135f7565b90501115610da5576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610df2576040519150601f19603f3d011682016040523d82523d6000602084013e610df7565b606091505b5050905080610e32576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c34600086604051610e7a93929190613776565b60405180910390a3505050565b610e8f611e27565b34600003610ec9576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038416610ef05760405163d92e233d60e01b815260040160405180910390fd5b610400610f0060608301836135f7565b610f0b9150846137c9565b1115610f43576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610f90576040519150601f19603f3d011682016040523d82523d6000602084013e610f95565b606091505b5050905080610fd0576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846001600160a01b0316336001600160a01b03167fa795d4377323e4c2d4c346b8050a7dd504c4043be8884c81b8d9690706c8388f34600088888860405161101c959493929190613843565b60405180910390a35050505050565b61103361206a565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b961105d81611d30565b611065611e27565b8360000361109f576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0385166110c65760405163d92e233d60e01b815260040160405180910390fd5b6110d0868661251a565b611106576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af115801561116e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611192919061388a565b6111c8576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006111d76020890189612fbe565b6001600160a01b0316036111f6576111f08584846120eb565b50611204565b6112028786858561219e565b505b61120e868661251a565b611244576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa1580156112a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c891906138a7565b905080156112da576112da87826125aa565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b738287878760405161132193929190613829565b60405180910390a3505061135460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61138681611d30565b610ca16127d0565b600061139981611d30565b6001600160a01b0382166113c05760405163d92e233d60e01b815260040160405180910390fd5b6001546113f7907f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb906001600160a01b0316611fa6565b506114227f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83611d3a565b50600154604080516001600160a01b03928316815291841660208301527f3a7b8d6372645f474fe60c115a2ef21421306a3ed4664fa0023c461413c08579910160405180910390a150600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6114ad61206a565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96114d781611d30565b6114df611e27565b84600003611519576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0386166115405760405163d92e233d60e01b815260040160405180910390fd5b6115546001600160a01b0388168787612849565b6040517fc9028a360000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063c9028a369061159990859060040161391c565b600060405180830381600087803b1580156115b357600080fd5b505af11580156115c7573d6000803e3d6000fd5b50505050866001600160a01b0316866001600160a01b03167fde7603a6ed5d07c9f43597ccfe9043d15b66d3284f0de321f5cdf56329e6e03587878787604051611614949392919061392f565b60405180910390a35061135460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b600061165181611d30565b6001600160a01b0382166116785760405163d92e233d60e01b815260040160405180910390fd5b6000546001600160a01b0316156116bb576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116e57f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611d3a565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801561176c5750825b905060008267ffffffffffffffff1660011480156117895750303b155b905081158015611797575080155b156117ce576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561182f5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061184c57506001600160a01b038716155b1561186a5760405163d92e233d60e01b815260040160405180910390fd5b6118726128bd565b61187a6128c5565b6118826128bd565b61188a6128d5565b611895600087611d3a565b506118c07f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611d3a565b506118eb7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a89611d3a565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a161790556119497f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611d3a565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156119de5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b6119f061206a565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb611a1a81611d30565b611a22611e27565b6001600160a01b038516611a495760405163d92e233d60e01b815260040160405180910390fd5b6000856001600160a01b03163460405160006040518083038185875af1925050503d8060008114611a96576040519150601f19603f3d011682016040523d82523d6000602084013e611a9b565b606091505b5050905080611ad6576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fc9028a360000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063c9028a3690611b1b90869060040161391c565b600060405180830381600087803b158015611b3557600080fd5b505af1158015611b49573d6000803e3d6000fd5b5050505060006001600160a01b0316866001600160a01b03167fde7603a6ed5d07c9f43597ccfe9043d15b66d3284f0de321f5cdf56329e6e03534888888604051611b97949392919061392f565b60405180910390a35050610afc60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611bd2611e27565b84600003611c0c576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038616611c335760405163d92e233d60e01b815260040160405180910390fd5b610400611c4360608301836135f7565b611c4e9150846137c9565b1115611c86576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c91338587611e85565b856001600160a01b0316336001600160a01b03167fa795d4377323e4c2d4c346b8050a7dd504c4043be8884c81b8d9690706c8388f8787878787604051611cdc959493929190613843565b60405180910390a3505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611d2681611d30565b610afc8383611fa6565b610ca181336128e5565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611e1d576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611dd33390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107b4565b60009150506107b4565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611e83576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003546001600160a01b0390811690831603611ecd576040517fe4dd681d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa158015611f30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f54919061388a565b611f8a576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610b4e906001600160a01b038481169186911684612972565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611e1d576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107b4565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016120e5576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b60606120f783836129ab565b600080856001600160a01b0316348686604051612115929190613966565b60006040518083038185875af1925050503d8060008114612152576040519150601f19603f3d011682016040523d82523d6000602084013e612157565b606091505b509150915081612193576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b6060836001600160a01b031663676cc054348786866040518563ffffffff1660e01b81526004016121d193929190613976565b60006040518083038185885af11580156121ef573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f1916820160405261221891908101906139a1565b95945050505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b61224f612aab565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061237057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166123647f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611e83576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610cbf81611d30565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561240c575060408051601f3d908101601f19168201909252612409918101906138a7565b60015b612452576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146124ae576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401612449565b610b4e8383612b06565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611e83576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015612586573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612197919061388a565b6003546001600160a01b03908116908316036126f9576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af115801561262c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612650919061388a565b612686576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156126e557600080fd5b505af1158015611354573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa15801561275c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612780919061388a565b6127b6576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610cbf906001600160a01b03848116911683612849565b6127d8611e27565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336122b9565b6040516001600160a01b03838116602483015260448201839052610b4e91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612b5c565b611e83612bd8565b6128cd612bd8565b611e83612c3f565b6128dd612bd8565b611e83612c47565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610cbf576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401612449565b6040516001600160a01b038481166024830152838116604483015260648201839052610afc9186918216906323b872dd90608401612876565b60048110610cbf5781357f98933fac000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601612a30576040517fed69977500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f36fd75ca000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601610b4e576040517ff3459a9600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611e83576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612b0f82612c98565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612b5457610b4e8282612d40565b610cbf612dad565b6000612b716001600160a01b03841683612de5565b90508051600014158015612b96575080806020019051810190612b94919061388a565b155b15610b4e576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401612449565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611e83576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612221612bd8565b612c4f612bd8565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612ce7576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401612449565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612d5d9190613a0f565b600060405180830381855af49150503d8060008114612d98576040519150601f19603f3d011682016040523d82523d6000602084013e612d9d565b606091505b5091509150612218858383612df3565b3415611e83576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061219783836000612e68565b606082612e0857612e0382612f1e565b612197565b8151158015612e1f57506001600160a01b0384163b155b15612e61576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401612449565b5080612197565b606081471015612ea6576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401612449565b600080856001600160a01b03168486604051612ec29190613a0f565b60006040518083038185875af1925050503d8060008114612eff576040519150601f19603f3d011682016040523d82523d6000602084013e612f04565b606091505b5091509150612f14868383612df3565b9695505050505050565b805115612f2e5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612f7257600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461219757600080fd5b80356001600160a01b0381168114612fb957600080fd5b919050565b600060208284031215612fd057600080fd5b61219782612fa2565b600060a08284031215612feb57600080fd5b50919050565b6000806000806080858703121561300757600080fd5b61301085612fa2565b93506020850135925061302560408601612fa2565b9150606085013567ffffffffffffffff81111561304157600080fd5b61304d87828801612fd9565b91505092959194509250565b60008083601f84011261306b57600080fd5b50813567ffffffffffffffff81111561308357600080fd5b60208301915083602082850101111561309b57600080fd5b9250929050565b600080600080606085870312156130b857600080fd5b6130c185612fa2565b9350602085013567ffffffffffffffff8111156130dd57600080fd5b6130e987828801613059565b909450925050604085013567ffffffffffffffff81111561304157600080fd5b60006020828403121561311b57600080fd5b5035919050565b6000806040838503121561313557600080fd5b8235915061314560208401612fa2565b90509250929050565b600060208284031215612feb57600080fd5b6000806000806060858703121561317657600080fd5b613180868661314e565b935061318e60208601612fa2565b9250604085013567ffffffffffffffff8111156131aa57600080fd5b6131b687828801613059565b95989497509550505050565b60005b838110156131dd5781810151838201526020016131c5565b50506000910152565b600081518084526131fe8160208601602086016131c2565b601f01601f19169290920160200192915050565b60208152600061219760208301846131e6565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561327d5761327d613225565b604052919050565b600067ffffffffffffffff82111561329f5761329f613225565b50601f01601f191660200190565b600080604083850312156132c057600080fd5b6132c983612fa2565b9150602083013567ffffffffffffffff8111156132e557600080fd5b8301601f810185136132f657600080fd5b803561330961330482613285565b613254565b81815286602083850101111561331e57600080fd5b816020840160208301376000602083830101528093505050509250929050565b6000806040838503121561335157600080fd5b61335a83612fa2565b9150602083013567ffffffffffffffff81111561337657600080fd5b61338285828601612fd9565b9150509250929050565b60008060008060008060a087890312156133a557600080fd5b6133af888861314e565b95506133bd60208801612fa2565b94506133cb60408801612fa2565b935060608701359250608087013567ffffffffffffffff8111156133ee57600080fd5b6133fa89828a01613059565b979a9699509497509295939492505050565b600060808284031215612feb57600080fd5b60008060008060008060a0878903121561343757600080fd5b61344087612fa2565b955061344e60208801612fa2565b945060408701359350606087013567ffffffffffffffff81111561347157600080fd5b61347d89828a01613059565b909450925050608087013567ffffffffffffffff81111561349d57600080fd5b6134a989828a0161340c565b9150509295509295509295565b6000806000606084860312156134cb57600080fd5b6134d484612fa2565b92506134e260208501612fa2565b91506134f060408501612fa2565b90509250925092565b6000806000806060858703121561350f57600080fd5b61351885612fa2565b9350602085013567ffffffffffffffff81111561353457600080fd5b61354087828801613059565b909450925050604085013567ffffffffffffffff81111561356057600080fd5b61304d8782880161340c565b60008060008060008060a0878903121561358557600080fd5b61358e87612fa2565b9550602087013594506135a360408801612fa2565b9350606087013567ffffffffffffffff8111156135bf57600080fd5b6135cb89828a01613059565b909450925050608087013567ffffffffffffffff8111156135eb57600080fd5b6134a989828a01612fd9565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261362c57600080fd5b83018035915067ffffffffffffffff82111561364757600080fd5b60200191503681900382131561309b57600080fd5b8015158114610ca157600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261369f57600080fd5b830160208101925035905067ffffffffffffffff8111156136bf57600080fd5b80360382131561309b57600080fd5b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b6001600160a01b0361370a82612fa2565b1682526000602082013561371d8161365c565b151560208401526001600160a01b0361373860408401612fa2565b16604084015261374b606083018361366a565b60a0606086015261376060a0860182846136ce565b6080948501359590940194909452509092915050565b8381526001600160a01b0383166020820152608060408201526000608082015260a06060820152600061221860a08301846136f9565b6000602082840312156137be57600080fd5b81356121978161365c565b808201808211156107b4577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6040815260006138176040830185876136ce565b8281036020840152612f1481856136f9565b8381526040602082015260006122186040830184866136ce565b8581526001600160a01b038516602082015260806040820152600061386c6080830185876136ce565b828103606084015261387e81856136f9565b98975050505050505050565b60006020828403121561389c57600080fd5b81516121978161365c565b6000602082840312156138b957600080fd5b5051919050565b6001600160a01b036138d182612fa2565b1682526001600160a01b036138e860208301612fa2565b166020830152604081810135908301526000613907606083018361366a565b608060608601526122186080860182846136ce565b60208152600061219760208301846138c0565b8481526060602082015260006139496060830185876136ce565b828103604084015261395b81856138c0565b979650505050505050565b8183823760009101908152919050565b6001600160a01b0361398785612fa2565b1681526040602082015260006122186040830184866136ce565b6000602082840312156139b357600080fd5b815167ffffffffffffffff8111156139ca57600080fd5b8201601f810184136139db57600080fd5b80516139e961330482613285565b8181528560208385010111156139fe57600080fd5b6122188260208301602086016131c2565b60008251613a218184602087016131c2565b919091019291505056fea2646970667358221220f25094d9cec21da3ab717fab76c99a309715be6c5f40a42a9862385e78d381ce64736f6c634300081a0033