0 txs
37 calls
constructor
constructor(address mToken_, address registrar_)
functions
bridge
viewfunction bridge() view returns (address)
bridgedPrincipal
viewfunction bridgedPrincipal(uint256 destinationChainId) view returns (uint256 principal)
currentIndex
viewfunction currentIndex() view returns (uint128)
destinationMToken
viewfunction destinationMToken(uint256 destinationChainId) view returns (address mToken)
disableEarningIndex
viewfunction disableEarningIndex() view returns (uint128)
implementation
viewfunction implementation() view returns (address implementation_)
mToken
viewfunction mToken() view returns (address)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
pauser
viewfunction pauser() view returns (address)
payloadGasLimit
viewfunction payloadGasLimit(uint256 destinationChainId, uint8 payloadType) view returns (uint256 gasLimit)
quoteSendIndex
viewfunction quoteSendIndex(uint256 destinationChainId_) view returns (uint256 fee)
quoteSendRegistrarKey
viewfunction quoteSendRegistrarKey(uint256 destinationChainId_, bytes32 key_) view returns (uint256 fee_)
quoteSendRegistrarListStatus
viewfunction quoteSendRegistrarListStatus(uint256 destinationChainId_, bytes32 listName_, address account_) view returns (uint256 fee_)
quoteTransfer
viewfunction quoteTransfer(uint256 amount_, uint256 destinationChainId_, address recipient_) view returns (uint256 fee_)
registrar
viewfunction registrar() view returns (address)
supportedBridgingPath
viewfunction supportedBridgingPath(address sourceToken, uint256 destinationChainId, address destinationToken) view returns (bool supported)
wasEarningEnabled
viewfunction wasEarningEnabled() view returns (bool)
disableEarning
nonpayablefunction disableEarning()
enableEarning
nonpayablefunction enableEarning()
initialize
nonpayablefunction initialize(address bridge_, address initialOwner_, address initialPauser_)
migrate
nonpayablefunction migrate()
migrate
nonpayablefunction migrate(address migrator_)
pause
nonpayablefunction pause()
receiveMessage
nonpayablefunction receiveMessage(uint256 sourceChainId_, bytes payload_)
renounceOwnership
nonpayablefunction renounceOwnership()
sendMTokenIndex
payablefunction sendMTokenIndex(uint256 destinationChainId_, address refundAddress_) payable returns (bytes32 messageId_)
sendRegistrarKey
payablefunction sendRegistrarKey(uint256 destinationChainId_, bytes32 key_, address refundAddress_) payable returns (bytes32 messageId_)
sendRegistrarListStatus
payablefunction sendRegistrarListStatus(uint256 destinationChainId_, bytes32 listName_, address account_, address refundAddress_) payable returns (bytes32 messageId_)
setBridge
nonpayablefunction setBridge(address newBridge_)
setDestinationMToken
nonpayablefunction setDestinationMToken(uint256 destinationChainId_, address mToken_)
setPayloadGasLimit
nonpayablefunction setPayloadGasLimit(uint256 destinationChainId_, uint8 payloadType_, uint256 gasLimit_)
setSupportedBridgingPath
nonpayablefunction setSupportedBridgingPath(address sourceToken_, uint256 destinationChainId_, address destinationToken_, bool supported_)
transfer
payablefunction transfer(uint256 amount_, uint256 destinationChainId_, address recipient_, address refundAddress_) payable returns (bytes32 messageId_)
transferMLikeToken
payablefunction transferMLikeToken(uint256 amount_, address sourceToken_, uint256 destinationChainId_, address destinationToken_, address recipient_, address refundAddress_) payable returns (bytes32 messageId_)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
transferPauserRole
nonpayablefunction transferPauserRole(address newPauser_)
unpause
nonpayablefunction unpause()
events
BridgeSet
event BridgeSet(address indexed previousBridge, address indexed newBridge)
DestinationMTokenSet
event DestinationMTokenSet(uint256 indexed destinationChainId, address mToken)
EarningDisabled
event EarningDisabled(uint128 index)
EarningEnabled
event EarningEnabled(uint128 index)
Initialized
event Initialized(uint64 version)
Migrated
event Migrated(address indexed migrator, address indexed oldImplementation, address indexed newImplementation)
MTokenIndexSent
event MTokenIndexSent(uint256 destinationChainId, bytes32 messageId, uint128 index)
MTokenReceived
event MTokenReceived(uint256 sourceChainId, address indexed destinationToken, address indexed sender, address indexed recipient, uint256 amount, uint128 index)
MTokenSent
event MTokenSent(address indexed sourceToken, uint256 destinationChainId, address destinationToken, address indexed sender, address indexed recipient, uint256 amount, uint128 index, bytes32 messageId)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
PauserTransferred
event PauserTransferred(address indexed previousPauser, address indexed newPauser)
PayloadGasLimitSet
event PayloadGasLimitSet(uint256 indexed destinationChainId, uint8 indexed payloadType, uint256 gasLimit)
RegistrarKeySent
event RegistrarKeySent(uint256 destinationChainId, bytes32 messageId, bytes32 indexed key, bytes32 value)
RegistrarListStatusSent
event RegistrarListStatusSent(uint256 destinationChainId, bytes32 messageId, bytes32 indexed listName, address indexed account, bool status)
SupportedBridgingPathSet
event SupportedBridgingPathSet(address indexed sourceToken, uint256 indexed destinationChainId, address indexed destinationToken, bool supported)
Unpaused
event Unpaused(address account)
Upgraded
event Upgraded(address indexed implementation)
WrapFailed
event WrapFailed(address indexed destinationWrappedToken, address indexed recipient, uint256 amount)
errors
DivisionByZero
error DivisionByZero()
EarningCannotBeReenabled
error EarningCannotBeReenabled()
EarningIsDisabled
error EarningIsDisabled()
EarningIsEnabled
error EarningIsEnabled()
EnforcedPause
error EnforcedPause()
ExpectedPause
error ExpectedPause()
InsufficientBridgedBalance
error InsufficientBridgedBalance()
InvalidDestinationChain
error InvalidDestinationChain(uint256 destinationChainId)
InvalidInitialization
error InvalidInitialization()
InvalidMigrator
error InvalidMigrator()
InvalidPayloadLength
error InvalidPayloadLength(uint256 length)
InvalidPayloadType
error InvalidPayloadType(uint8 value)
InvalidUInt112
error InvalidUInt112()
LengthMismatch
error LengthMismatch(uint256 encodedLength, uint256 expectedLength)
MigrationFailed
error MigrationFailed()
NotBridge
error NotBridge()
NotInitializing
error NotInitializing()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
Unauthorized
error Unauthorized(address account)
UnsupportedBridgingPath
error UnsupportedBridgingPath(address sourceToken, uint256 destinationChainId, address destinationToken)
ZeroAmount
error ZeroAmount()
ZeroBridge
error ZeroBridge()
ZeroDestinationToken
error ZeroDestinationToken()
ZeroMigrator
error ZeroMigrator()
ZeroMToken
error ZeroMToken()
ZeroPauser
error ZeroPauser()
ZeroRecipient
error ZeroRecipient()
ZeroRefundAddress
error ZeroRefundAddress()
ZeroRegistrar
error ZeroRegistrar()
ZeroRemoteMToken
error ZeroRemoteMToken()
ZeroSourceToken
error ZeroSourceToken()
creation bytecode
0x60c060405234801561000f575f80fd5b50604051613a70380380613a7083398101604081905261002e91610166565b8181610038610099565b6001600160a01b03821660808190526100645760405163b01d5e2b60e01b815260040160405180910390fd5b6001600160a01b03811660a0819052610090576040516379a6314960e01b815260040160405180910390fd5b50505050610197565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e95760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101485780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b80516001600160a01b0381168114610161575f80fd5b919050565b5f8060408385031215610177575f80fd5b6101808361014b565b915061018e6020840161014b565b90509250929050565b60805160a05161385d6102135f395f8181610327015281816109710152818161147201528181611794015261190601525f818161060d015281816108c901528181610f520152818161104301528181611628015281816116a401528181611d0501528181611f020152818161229c0152612ad3015261385d5ff3fe608060405260043610610277575f3560e01c80638fd3ab801161014b578063c967891a116100c6578063e78cea921161007c578063f22e63ac11610062578063f22e63ac14610723578063f2fde38b14610750578063fe5ce2331461076f575f80fd5b8063e78cea92146106e6578063e80f94cf14610704575f80fd5b8063d1815061116100ac578063d181506114610675578063da0d3bf1146106b4578063de361d66146106d3575f80fd5b8063c967891a14610642578063ce5494bb14610656575f80fd5b8063b3c2c2141161011b578063c0c53b8b11610101578063c0c53b8b146105dd578063c3b6f939146105fc578063c6a505f21461062f575f80fd5b8063b3c2c2141461059f578063bad383a6146105be575f80fd5b80638fd3ab801461052f5780639ca02992146105435780639fd0506d14610577578063a8afc01f1461058b575f80fd5b80635a8ec6b0116101f55780638456cb59116101ab5780638b271718116101915780638b271718146104c65780638da5cb5b146104fc5780638dd1480214610510575f80fd5b80638456cb59146104995780638a4a1017146104ad575f80fd5b80635c975abb116101db5780635c975abb14610418578063715018a61461045a578063819499a11461046e575f80fd5b80635a8ec6b0146103c65780635c60da1b146103e5575f80fd5b80632b20e3971161024a5780633e2786fc116102305780633e2786fc146103745780633f4ba83a14610393578063515c4946146103a7575f80fd5b80632b20e3971461031657806337090dc714610361575f80fd5b806304291b561461027b57806308d11ceb1461029c57806316c34d06146102c257806326987b60146102e1575b5f80fd5b348015610286575f80fd5b5061029a610295366004613142565b610782565b005b6102af6102aa3660046131d4565b6108a2565b6040519081526020015b60405180910390f35b3480156102cd575f80fd5b506102af6102dc366004613217565b61092e565b3480156102ec575f80fd5b506102f5610a98565b6040516fffffffffffffffffffffffffffffffff90911681526020016102b9565b348015610321575f80fd5b506103497f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102b9565b6102af61036f366004613249565b610aa6565b34801561037f575f80fd5b506102af61038e366004613217565b610b75565b34801561039e575f80fd5b5061029a610bcc565b3480156103b2575f80fd5b5061029a6103c13660046132b9565b610c4b565b3480156103d1575f80fd5b506102af6103e03660046132ec565b610cea565b3480156103f0575f80fd5b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc54610349565b348015610423575f80fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff165b60405190151581526020016102b9565b348015610465575f80fd5b5061029a610da9565b348015610479575f80fd5b506102af6104883660046132ec565b60056020525f908152604090205481565b3480156104a4575f80fd5b5061029a610dba565b3480156104b8575f80fd5b5060045461044a9060ff1681565b3480156104d1575f80fd5b506102af6104e0366004613303565b600360209081525f928352604080842090915290825290205481565b348015610507575f80fd5b50610349610dfd565b34801561051b575f80fd5b5061029a61052a36600461332d565b610e31565b34801561053a575f80fd5b5061029a610ee0565b34801561054e575f80fd5b5061034961055d3660046132ec565b60026020525f90815260409020546001600160a01b031681565b348015610582575f80fd5b50610349610ee9565b348015610596575f80fd5b5061029a610f11565b3480156105aa575f80fd5b5061029a6105b9366004613353565b6110ec565b3480156105c9575f80fd5b5061029a6105d836600461332d565b611246565b3480156105e8575f80fd5b5061029a6105f736600461339f565b61129a565b348015610607575f80fd5b506103497f000000000000000000000000000000000000000000000000000000000000000081565b6102af61063d366004613217565b611437565b34801561064d575f80fd5b5061029a61154e565b348015610661575f80fd5b5061029a61067036600461332d565b611748565b348015610680575f80fd5b5061044a61068f3660046133d6565b600160209081525f938452604080852082529284528284209052825290205460ff1681565b3480156106bf575f80fd5b506102af6106ce366004613406565b611759565b6102af6106e13660046131d4565b6118bb565b3480156106f1575f80fd5b505f54610349906001600160a01b031681565b34801561070f575f80fd5b5061029a61071e366004613426565b6119f3565b34801561072e575f80fd5b506004546102f59061010090046fffffffffffffffffffffffffffffffff1681565b34801561075b575f80fd5b5061029a61076a36600461332d565b611af2565b6102af61077d366004613426565b611b45565b5f546001600160a01b031633146107c5576040517f7fea9dc500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61080483838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611bd092505050565b90505f81600381111561081957610819613447565b036108635761085d8484848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611c6f92505050565b50505050565b61085d8184848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611d6092505050565b5f6108ab611d64565b6108b3611dc0565b5f848152600260205260409020546108fb9086907f00000000000000000000000000000000000000000000000000000000000000009087906001600160a01b03168787611e41565b905061092660017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b949350505050565b6040517fd7d1c1c0000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b0382811660248301525f9182917f0000000000000000000000000000000000000000000000000000000000000000169063d7d1c1c090604401602060405180830381865afa1580156109b6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109da9190613474565b90505f6109e885858461223d565b5f805488825260036020819052604083209394506001600160a01b039091169263a66f84a9928a925b6003811115610a2257610a22613447565b81526020019081526020015f2054846040518463ffffffff1660e01b8152600401610a4f939291906134db565b602060405180830381865afa158015610a6a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a8e91906134f9565b9695505050505050565b5f610aa161226f565b905090565b5f610aaf611d64565b610ab7611dc0565b6001600160a01b038087165f90815260016020908152604080832089845282528083209388168352929052205460ff16610b3c576040517ff05eff4d0000000000000000000000000000000000000000000000000000000081526001600160a01b03808816600483015260248201879052851660448201526064015b60405180910390fd5b610b4a878787878787611e41565b9050610a8e60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5f828152600260205260408120546001600160a01b031681610ba186833387610b9c61226f565b61231a565b5f80548782526003602052604082209293506001600160a01b03169163a66f84a99188919080610a11565b33610bd5610ee9565b6001600160a01b031614158015610bfc575033610bf0610dfd565b6001600160a01b031614155b15610c4157335b6040517f8e4a23d60000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152602401610b33565b610c49612351565b565b610c536123db565b8060035f8581526020019081526020015f205f846003811115610c7857610c78613447565b6003811115610c8957610c89613447565b815260208101919091526040015f2055816003811115610cab57610cab613447565b837f1a5992a751b521ef246a1a59ba188f21a01ef4df77a46061eacc5604768157e283604051610cdd91815260200190565b60405180910390a3505050565b5f80610cfc610cf761226f565b612426565b5f805485825260036020908152604080842060018552909152918290205491517fa66f84a90000000000000000000000000000000000000000000000000000000081529293506001600160a01b03169163a66f84a991610d639187919086906004016134db565b602060405180830381865afa158015610d7e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610da291906134f9565b9392505050565b610db16123db565b610c495f612452565b33610dc3610ee9565b6001600160a01b031614158015610dea575033610dde610dfd565b6001600160a01b031614155b15610df55733610c03565b610c496124da565b5f807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b610e396123db565b6001600160a01b038116610e79576040517f361106cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917fc0634c245ce7b7b309744c30c030a783629555dc9f0c2c4cb54bdc9d9812d6209190a35050565b610c495f612553565b5f807f9ab2df69adadda616016eab34dbdcdbe8b11549e0ceb446652474b2cb1ced800610e21565b610f19612735565b610f4f576040517fb019ea3500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166326987b606040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fac573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fd09190613510565b600480547fffffffffffffffffffffffffffffff00000000000000000000000000000000ff166101006fffffffffffffffffffffffffffffffff8416021781556040517f81399be400000000000000000000000000000000000000000000000000000000815230918101919091529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906381399be4906024015f604051808303815f87803b15801561108c575f80fd5b505af115801561109e573d5f803e3d5ffd5b50506040516fffffffffffffffffffffffffffffffff841681527fee580fdb4da10ea17aa673e6f5c8c2370b4166d6a94bc88900e5a96d0589e3ce925060200190505b60405180910390a150565b6110f46123db565b6001600160a01b038416611134576040517f2dc2f38200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b468303611170576040517f202cb51300000000000000000000000000000000000000000000000000000000815260048101849052602401610b33565b6001600160a01b0382166111b0576040517f7c37399000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038481165f81815260016020908152604080832088845282528083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182528692917fb30eec013773a40f5bfc408b77c3eb479af144a816a0250387480ba905a06f95910160405180910390a450505050565b61124e6123db565b6001600160a01b03811661128e576040517f042d717b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112978161276a565b50565b5f6112a36127f2565b805490915060ff68010000000000000000820416159067ffffffffffffffff165f811580156112cf5750825b90505f8267ffffffffffffffff1660011480156112eb5750303b155b9050811580156112f9575080155b15611330576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156113915784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b61139c88888861281a565b600480547fffffffffffffffffffffffffffffff00000000000000000000000000000000ff1665e8d4a5100000179055831561142d5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b5f611441826128a4565b6040517f8eaa6ac0000000000000000000000000000000000000000000000000000000008152600481018490525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690638eaa6ac090602401602060405180830381865afa1580156114bf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114e391906134f9565b90505f6114f085836128e4565b90506114ff8660028684612913565b604080518881526020810183905290810184905290935085907f9cac61123c3eaf782394c03fd702f0122aad6caa2b04674986c626725efdded89060600160405180910390a250509392505050565b611556612735565b1561158d576040517f7a42736800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60045460ff16156115ca576040517f437b381f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001178155604080517fa36e40fc00000000000000000000000000000000000000000000000000000000815290516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263a36e40fc92808201925f92909182900301818387803b15801561166b575f80fd5b505af115801561167d573d5f803e3d5ffd5b505050507f5098de6eb11dbd1127cf4dcd5e960e3944d48a7570b9b1939cff715cb35c5a187f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166326987b606040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116fe573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117229190613510565b6040516fffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6117506123db565b61129781612553565b6040517f8eaa6ac0000000000000000000000000000000000000000000000000000000008152600481018290525f9081906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690638eaa6ac090602401602060405180830381865afa1580156117d9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117fd91906134f9565b90505f61180a84836128e4565b5f805487825260036020908152604080842060028552909152918290205491517fa66f84a90000000000000000000000000000000000000000000000000000000081529293506001600160a01b03169163a66f84a9916118719189919086906004016134db565b602060405180830381865afa15801561188c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118b091906134f9565b925050505b92915050565b5f6118c5826128a4565b6040517fd7d1c1c0000000000000000000000000000000000000000000000000000000008152600481018590526001600160a01b0384811660248301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063d7d1c1c090604401602060405180830381865afa15801561194d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119719190613474565b90505f61197f86868461223d565b905061198e8760038684612913565b9250846001600160a01b0316867f221dcaf597abdf04e35468a3d276fd1ca83379a16a8c100b8f4068b2e90dca6c8986866040516119e19392919092835260208301919091521515604082015260600190565b60405180910390a35050949350505050565b6119fb6123db565b468203611a37576040517f202cb51300000000000000000000000000000000000000000000000000000000815260048101839052602401610b33565b6001600160a01b038116611a77576040517fb01d5e2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8281526002602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038516908117909155915191825283917fe1f5ca8210e2b8950e4626ed9e65573e6a90daf4c4f5d098ad4b7665a08992cb910160405180910390a25050565b611afa6123db565b6001600160a01b038116611b3c576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610b33565b61129781612452565b5f611b4f826128a4565b5f611b5861226f565b90505f611b6482612426565b9050611b738560018684612913565b60408051878152602081018390526fffffffffffffffffffffffffffffffff85168183015290519194507f24cc38804d4872a8389132ee5dce25991159fabdf2edab5c0aee094e78b13c6e919081900360600190a1505092915050565b5f600182511015611c125781516040517ff61df232000000000000000000000000000000000000000000000000000000008152600401610b3391815260200190565b6001820151600360ff82161115611c5a576040517f55791e9400000000000000000000000000000000000000000000000000000000815260ff82166004820152602401610b33565b8060ff166003811115610da257610da2613447565b5f805f805f611c7d866129d7565b94509450945094509450816001600160a01b0316836001600160a01b0316856001600160a01b03167f4dc9c05fa45102b9417bba8bc740e033a518560a8a91b3c3059d6124b381f2d28a8986604051611cfb9392919092835260208301919091526fffffffffffffffffffffffffffffffff16604082015260600190565b60405180910390a47f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0380821690861603611d4857611d4388848885612a06565b61142d565b611d5488308885612a06565b61142d81868589612b47565b5050565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615610c49576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611e3b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b5f611e4b87612de6565b611e54826128a4565b6001600160a01b038416611e94576040517f7c37399000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316611ed4576040517fd27b444300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201527f0000000000000000000000000000000000000000000000000000000000000000905f906001600160a01b038316906370a0823190602401602060405180830381865afa158015611f53573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f7791906134f9565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018b90529091506001600160a01b038916906323b872dd906064016020604051808303815f875af1158015611fe3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120079190613474565b50816001600160a01b0316886001600160a01b0316146120aa576040517f39f47693000000000000000000000000000000000000000000000000000000008152306004820152602481018a90526001600160a01b038916906339f47693906044016020604051808303815f875af1158015612084573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120a8919061353f565b505b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f9082906001600160a01b038516906370a0823190602401602060405180830381865afa158015612109573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061212d91906134f9565b61213791906135a9565b9050808a111561215e57612149612e1f565b818b03111561215e5780995061215e8a612de6565b612168888b612e5a565b5f61217161226f565b90505f6121818c8a338b8661231a565b905061218f8a5f8984612913565b604080518c81526001600160a01b038c811660208301529181018f90526fffffffffffffffffffffffffffffffff85166060820152608081018390529197508d91818b16913391908f16907f4c812797ac478127450f6a846f8ad0ae1ad2f055778469bcccc65d1db7a062039060a00160405180910390a45050505050509695505050505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6060600384848460405160200161225794939291906135f8565b60405160208183030381529060405290509392505050565b5f612278612735565b61229a575060045461010090046fffffffffffffffffffffffffffffffff1690565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166326987b606040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122f6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aa19190613510565b60605f868686868660405160200161233796959493929190613649565b604051602081830303815290604052905095945050505050565b612359612e91565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b0390911681526020016110e1565b336123e4610dfd565b6001600160a01b031614610c49576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610b33565b606060018260405160200161243c9291906136cd565b6040516020818303038152906040529050919050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b6124e2611d64565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336123c3565b6001600160a01b038116612593576040517f0d626a3200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001600160a01b03163b5f036125d6576040517f8d1e7cf400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6125ff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b90505f826001600160a01b03166040515f60405180830381855af49150503d805f8114612647576040519150601f19603f3d011682016040523d82523d5f602084013e61264c565b606091505b5050905080612687576040517fa27bfda200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6126b07f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b9050806001600160a01b0316836001600160a01b0316856001600160a01b03167fe1b831b0e6f3aa16b4b1a6bd526b5cdeab4940744ca6e0251f5fe5f8caf1c81a60405160405180910390a46040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250505050565b6004545f9060ff168015610aa157505060045464e8d4a510006101009091046fffffffffffffffffffffffffffffffff161490565b7f9ab2df69adadda616016eab34dbdcdbe8b11549e0ceb446652474b2cb1ced80080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f51c4874e0f23f262e04a38c51751336dde72126d67f53eb672aaff02996b3ef6905f90a3505050565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a006118b5565b612822612eec565b5f80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03851690811790915561288d576040517f361106cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128978282612f2a565b61289f612f4c565b505050565b6001600160a01b038116611297576040517f66928bea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060600283836040516020016128fc9392919061370c565b604051602081830303815290604052905092915050565b5f805485825260036020819052604083206001600160a01b03909216916360c0c0ba913491899186908a9081111561294d5761294d613447565b600381111561295e5761295e613447565b81526020019081526020015f205487876040518663ffffffff1660e01b815260040161298d949392919061372b565b60206040518083038185885af11580156129a9573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906129ce91906134f9565b95945050505050565b602181015160358201516049830151605d840151606d80860151906129fc8782612f5c565b5091939590929450565b5f8481526005602052604081205490612a2684612a2161226f565b612fa3565b6dffffffffffffffffffffffffffff16905081811115612a72576040517f1a2d9e0200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f86815260056020526040902081830390556001600160a01b0385163014612b3f576040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303815f875af1158015612b19573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b3d9190613474565b505b505050505050565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301526024820183905285169063095ea7b3906044016020604051808303815f875af1158015612bac573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bd09190613474565b506040516001600160a01b0383166024820152604481018290525f90612c7990606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbf376c7a000000000000000000000000000000000000000000000000000000001790526001600160a01b03861690612fae565b905080612ddf57826001600160a01b0316846001600160a01b03167f5e484dc77b9161908da1d2f0da5131cdaabac752ae7f0dd633ec8905627b518984604051612cc591815260200190565b60405180910390a36040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0385811660048301525f602483015286169063095ea7b3906044016020604051808303815f875af1158015612d31573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d559190613474565b506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301526024820184905286169063a9059cbb906044016020604051808303815f875af1158015612dbb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b3f9190613474565b5050505050565b805f03611297576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f64e8d4a51000612e2e61226f565b612e389190613785565b612e439060016137e9565b6fffffffffffffffffffffffffffffffff16905090565b612e6681612a2161226f565b5f9283526005602052604090922080546dffffffffffffffffffffffffffff90931690920190915550565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610c49576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612ef461301f565b610c49576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612f32612eec565b612f3b8261303d565b612f43613045565b611d608161304d565b612f54612eec565b610c49613055565b80825114611d605781516040517fab8b67c6000000000000000000000000000000000000000000000000000000008152600481019190915260248101829052604401610b33565b5f610da2838361305d565b5f6001600160a01b0383163b156118b557826001600160a01b031682604051612fd79190613811565b5f604051808303815f865af19150503d805f8114613010576040519150601f19603f3d011682016040523d82523d5f602084013e613015565b606091505b5090949350505050565b5f6130286127f2565b5468010000000000000000900460ff16919050565b611afa612eec565b610c49612eec565b61124e612eec565b612217612eec565b5f816fffffffffffffffffffffffffffffffff165f036130a9576040517f23d359a300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610da26fffffffffffffffffffffffffffffffff83167dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff851664e8d4a5100002816130f4576130f4613758565b045f6dffffffffffffffffffffffffffff82111561313e576040517fca21dbd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5090565b5f805f60408486031215613154575f80fd5b83359250602084013567ffffffffffffffff811115613171575f80fd5b8401601f81018613613181575f80fd5b803567ffffffffffffffff811115613197575f80fd5b8660208284010111156131a8575f80fd5b939660209190910195509293505050565b80356001600160a01b03811681146131cf575f80fd5b919050565b5f805f80608085870312156131e7575f80fd5b84359350602085013592506131fe604086016131b9565b915061320c606086016131b9565b905092959194509250565b5f805f60608486031215613229575f80fd5b8335925060208401359150613240604085016131b9565b90509250925092565b5f805f805f8060c0878903121561325e575f80fd5b8635955061326e602088016131b9565b945060408701359350613283606088016131b9565b9250613291608088016131b9565b915061329f60a088016131b9565b90509295509295509295565b8035600481106131cf575f80fd5b5f805f606084860312156132cb575f80fd5b833592506132db602085016132ab565b929592945050506040919091013590565b5f602082840312156132fc575f80fd5b5035919050565b5f8060408385031215613314575f80fd5b82359150613324602084016132ab565b90509250929050565b5f6020828403121561333d575f80fd5b610da2826131b9565b8015158114611297575f80fd5b5f805f8060808587031215613366575f80fd5b61336f856131b9565b935060208501359250613384604086016131b9565b9150606085013561339481613346565b939692955090935050565b5f805f606084860312156133b1575f80fd5b6133ba846131b9565b92506133c8602085016131b9565b9150613240604085016131b9565b5f805f606084860312156133e8575f80fd5b6133f1846131b9565b925060208401359150613240604085016131b9565b5f8060408385031215613417575f80fd5b50508035926020909101359150565b5f8060408385031215613437575f80fd5b82359150613324602084016131b9565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f60208284031215613484575f80fd5b8151610da281613346565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b838152826020820152606060408201525f6129ce606083018461348f565b5f60208284031215613509575f80fd5b5051919050565b5f60208284031215613520575f80fd5b81516fffffffffffffffffffffffffffffffff81168114610da2575f80fd5b5f6020828403121561354f575f80fd5b81517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81168114610da2575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b818103818111156118b5576118b561357c565b600481106135f1577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60f81b9052565b61360281866135bc565b600181019390935260609190911b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021830152151560f81b6035820152603601919050565b61365381886135bc565b6001810195909552606093841b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000908116602187015292841b83166035860152921b16604983015260801b7fffffffffffffffffffffffffffffffff0000000000000000000000000000000016605d820152606d01919050565b6136d781846135bc565b60809190911b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000166001820152601101919050565b61371681856135bc565b60018101929092526021820152604101919050565b8481528360208201526001600160a01b0383166040820152608060608201525f610a8e608083018461348f565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6fffffffffffffffffffffffffffffffff8316806137cb577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b806fffffffffffffffffffffffffffffffff84160491505092915050565b6fffffffffffffffffffffffffffffffff81811683821601908111156118b5576118b561357c565b5f82518060208501845e5f92019182525091905056fea2646970667358221220b6f47aac64271756344d728b8a88fefdca7a1ce162c8386b925d23f07232ffdc64736f6c634300081a0033000000000000000000000000866a2bf4e572cbcf37d5071a7a58503bfb36be1b000000000000000000000000119fbeedd4f4f4298fb59b720d5654442b81ae2c