791 txs
668 calls
constructor
constructor(uint8 domainID, address[] initialRelayers, uint256 initialRelayerThreshold, uint256 expiry, uint256 bridgeFee)
functions
_bridgeFee
viewfunction _bridgeFee() view returns (uint256)
_depositCounts
viewfunction _depositCounts(uint8) view returns (uint64)
_domainID
viewfunction _domainID() view returns (uint8)
_expiry
viewfunction _expiry() view returns (uint40)
_hasVotedOnProposal
viewfunction _hasVotedOnProposal(uint72 destNonce, bytes32 dataHash, address relayer) view returns (bool)
_relayerThreshold
viewfunction _relayerThreshold() view returns (uint8)
_resourceIDToHandlerAddress
viewfunction _resourceIDToHandlerAddress(bytes32) view returns (address)
_totalRelayers
viewfunction _totalRelayers() view returns (uint256)
calculateBridgeFee
viewfunction calculateBridgeFee(uint8 destinationDomainID, bytes32 resourceID, bytes) view returns (uint256 fee)
calculateHandlerFee
viewfunction calculateHandlerFee(uint8 destinationDomainID, bytes32 resourceID, bytes data) view returns (address feeToken, uint256 fee)
chainFeeMultipliers
viewfunction chainFeeMultipliers(uint8) view returns (uint256)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
EXECUTOR_ROLE
viewfunction EXECUTOR_ROLE() view returns (bytes32)
getProposal
viewfunction getProposal(uint8 originDomainID, uint64 depositNonce, bytes32 dataHash) view returns (tuple)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getRoleMember
viewfunction getRoleMember(bytes32 role, uint256 index) view returns (address)
getRoleMemberCount
viewfunction getRoleMemberCount(bytes32 role) view returns (uint256)
getRoleMemberIndex
viewfunction getRoleMemberIndex(bytes32 role, address account) view returns (uint256)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
isRelayer
viewfunction isRelayer(address relayer) view returns (bool)
isValidForwarder
viewfunction isValidForwarder(address) view returns (bool)
MAX_RELAYERS
viewfunction MAX_RELAYERS() view returns (uint256)
paused
viewfunction paused() view returns (bool)
RELAYER_ROLE
viewfunction RELAYER_ROLE() view returns (bytes32)
resourceFeeMultipliers
viewfunction resourceFeeMultipliers(bytes32) view returns (uint256)
adminChangeRelayerThreshold
nonpayablefunction adminChangeRelayerThreshold(uint256 newThreshold)
adminPauseTransfers
nonpayablefunction adminPauseTransfers()
adminRemoveResource
nonpayablefunction adminRemoveResource(bytes32 resourceID)
adminSetDepositNonce
nonpayablefunction adminSetDepositNonce(uint8 domainID, uint64 nonce)
adminSetForwarder
nonpayablefunction adminSetForwarder(address forwarder, bool valid)
adminSetGenericResource
nonpayablefunction adminSetGenericResource(address handlerAddress, bytes32 resourceID, address contractAddress, bytes4 depositFunctionSig, uint256 depositFunctionDepositerOffset, bytes4 executeFunctionSig)
adminSetResource
nonpayablefunction adminSetResource(address handlerAddress, bytes32 resourceID, address tokenAddress)
adminUnpauseTransfers
nonpayablefunction adminUnpauseTransfers()
cancelProposal
nonpayablefunction cancelProposal(uint8 domainID, uint64 depositNonce, bytes32 dataHash)
deposit
payablefunction deposit(uint8 destinationDomainID, bytes32 resourceID, bytes data) payable
executeProposal
nonpayablefunction executeProposal(uint8 domainID, uint64 depositNonce, bytes data, bytes32 resourceID, bool revertOnFail)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address account)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setBridgeFee
nonpayablefunction setBridgeFee(uint256 bridgeFee)
setExpiry
nonpayablefunction setExpiry(uint40 expiry)
setFeeMultiplierChain
nonpayablefunction setFeeMultiplierChain(uint8 domainId, uint256 feeMultiplier)
setFeeMultiplierResource
nonpayablefunction setFeeMultiplierResource(bytes32 resourceId, uint256 feeMultiplier)
transferAdmin
nonpayablefunction transferAdmin(address newAdmin)
voteProposal
nonpayablefunction voteProposal(uint8 domainID, uint64 depositNonce, bytes32 resourceID, bytes data)
withdraw
nonpayablefunction withdraw(address tokenAddress, address recipient, uint256 amount)
events
Deposit
event Deposit(uint8 destinationDomainID, bytes32 resourceID, uint64 depositNonce, address indexed user, bytes data, bytes handlerResponse)
FailedHandlerExecution
event FailedHandlerExecution(bytes lowLevelData)
Paused
event Paused(address account)
ProposalEvent
event ProposalEvent(uint8 originDomainID, uint64 depositNonce, uint8 status, bytes32 dataHash)
ProposalVote
event ProposalVote(uint8 originDomainID, uint64 depositNonce, uint8 status, bytes32 dataHash)
RelayerThresholdChanged
event RelayerThresholdChanged(uint256 newThreshold)
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)
errors
No errors.
creation bytecode
0x60a06040523480156200001157600080fd5b50604051620042f2380380620042f2833981016040819052620000349162000431565b6000805460ff1916905560ff8516158015906200005057508215155b6200005a57600080fd5b60ff8516608052620000788362000162602090811b6200291517901c565b600260006101000a81548160ff021916908360ff160217905550620000a882620001a960201b620029861760201c565b6002805464ffffffffff929092166101000265ffffffffff00199092169190911790556007819055620000e66000620000e0620001ed565b62000230565b60005b84518110156200015657620001417fe2b7fb3b832174769106daebcfd6d1970523240dda11281102db9363b83b0dc48683815181106200012d576200012d6200053a565b60200260200101516200024060201b60201c565b806200014d8162000550565b915050620000e9565b5050505050506200057a565b60006101008210620001a55760405162461bcd60e51b81526020600482015260076024820152663e38206269747360c81b60448201526064015b60405180910390fd5b5090565b6000650100000000008210620001a55760405162461bcd60e51b81526020600482015260086024820152673e3430206269747360c01b60448201526064016200019c565b600033601436108015906200021a57506001600160a01b03811660009081526005602052604090205460ff165b156200022b575060131936013560601c5b919050565b6200023c8282620002cd565b5050565b600082815260016020526040902060020154620002679062000261620001ed565b62000348565b620002305760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60448201526e0818591b5a5b881d1bc819dc985b9d608a1b60648201526084016200019c565b6000828152600160209081526040909120620002f4918390620029f762000377821b17901c565b156200023c5762000304620001ed565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b600082815260016020908152604082206200036e91849062002a196200038e821b17901c565b90505b92915050565b60006200036e836001600160a01b038416620003b1565b6001600160a01b038116600090815260018301602052604081205415156200036e565b6000818152600183016020526040812054620003fa5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000371565b50600062000371565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b03811681146200022b57600080fd5b600080600080600060a086880312156200044a57600080fd5b855160ff811681146200045c57600080fd5b602087810151919650906001600160401b03808211156200047c57600080fd5b818901915089601f8301126200049157600080fd5b815181811115620004a657620004a662000403565b8060051b604051601f19603f83011681018181108582111715620004ce57620004ce62000403565b60405291825284820192508381018501918c831115620004ed57600080fd5b938501935b828510156200051657620005068562000419565b84529385019392850192620004f2565b60408c015160608d01516080909d01519b9e919d509b9a9950975050505050505050565b634e487b7160e01b600052603260045260246000fd5b60006000198214156200057357634e487b7160e01b600052601160045260246000fd5b5060010190565b608051613d5c6200059660003960006107980152613d5c6000f3fe6080604052600436106103015760003560e01c806384db809f1161018f578063c5ec8970116100e1578063d7a9cd791161008a578063f8c39e4411610064578063f8c39e4414610983578063fba29182146109b3578063ffaac0eb146109d357600080fd5b8063d7a9cd7914610929578063d9caed1214610943578063edc20c3c1461096357600080fd5b8063cb10f215116100bb578063cb10f215146108c9578063d15ef64e146108e9578063d547741f1461090957600080fd5b8063c5ec897014610843578063c82612741461087c578063ca15c873146108a957600080fd5b80639c282f0811610143578063a217fddf1161011d578063a217fddf146107e1578063a9cf69fa146107f6578063c0331b3e1461082357600080fd5b80639c282f08146107665780639dd694f4146107865780639debb3bd146107cc57600080fd5b806391d148541161017457806391d14854146106f2578063926d7d7f14610712578063998cdf831461074657600080fd5b806384db809f1461066a5780639010d07c146106d257600080fd5b80634e0560051161025357806369b09aa0116101fc578063802aabe8116101d6578063802aabe81461062057806380ae1c2814610635578063832faba61461064a57600080fd5b806369b09aa0146105b357806375829def146105e05780637febe63f1461060057600080fd5b8063569c2eef1161022d578063569c2eef1461055b5780635a1ad87c1461057b5780635c975abb1461059b57600080fd5b80634e056005146104eb5780634e0df3f61461050b578063541d55481461052b57600080fd5b8063206a98fd116102b557806336568abe1161028f57806336568abe1461046557806348f5630b146104855780634b0b919d1461049b57600080fd5b8063206a98fd146103f5578063248a9ca3146104155780632f2ff15d1461044557600080fd5b80631260f9df116102e65780631260f9df14610369578063130ed2c2146103b557806317f03ce5146103d557600080fd5b806305e2ca171461030d57806307bd02651461032257600080fd5b3661030857005b600080fd5b61032061031b36600461337c565b6109e8565b005b34801561032e57600080fd5b506103567fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e6381565b6040519081526020015b60405180910390f35b34801561037557600080fd5b5061038961038436600461337c565b610c70565b6040805173ffffffffffffffffffffffffffffffffffffffff9093168352602083019190915201610360565b3480156103c157600080fd5b506103566103d036600461337c565b610db7565b3480156103e157600080fd5b506103206103f03660046133ee565b610e46565b34801561040157600080fd5b50610320610410366004613438565b611202565b34801561042157600080fd5b506103566104303660046134b9565b60009081526001602052604090206002015490565b34801561045157600080fd5b506103206104603660046134f4565b6115ce565b34801561047157600080fd5b506103206104803660046134f4565b611686565b34801561049157600080fd5b5061035660075481565b3480156104a757600080fd5b506104d26104b6366004613524565b60036020526000908152604090205467ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610360565b3480156104f757600080fd5b506103206105063660046134b9565b611752565b34801561051757600080fd5b506103566105263660046134f4565b6117d6565b34801561053757600080fd5b5061054b61054636600461353f565b61180f565b6040519015158152602001610360565b34801561056757600080fd5b506103206105763660046134b9565b61183b565b34801561058757600080fd5b5061032061059636600461358c565b611981565b3480156105a757600080fd5b5060005460ff1661054b565b3480156105bf57600080fd5b506103566105ce366004613524565b60086020526000908152604090205481565b3480156105ec57600080fd5b506103206105fb36600461353f565b611ad7565b34801561060c57600080fd5b5061054b61061b3660046135f6565b611b3a565b34801561062c57600080fd5b50610356611c19565b34801561064157600080fd5b50610320611c49565b34801561065657600080fd5b50610320610665366004613646565b611c63565b34801561067657600080fd5b506106ad6106853660046134b9565b60046020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610360565b3480156106de57600080fd5b506106ad6106ed366004613646565b611c7d565b3480156106fe57600080fd5b5061054b61070d3660046134f4565b611c9c565b34801561071e57600080fd5b506103567fe2b7fb3b832174769106daebcfd6d1970523240dda11281102db9363b83b0dc481565b34801561075257600080fd5b506103206107613660046134b9565b611cb4565b34801561077257600080fd5b50610320610781366004613668565b611cc1565b34801561079257600080fd5b506107ba7f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff9091168152602001610360565b3480156107d857600080fd5b5061035660c881565b3480156107ed57600080fd5b50610356600081565b34801561080257600080fd5b506108166108113660046133ee565b611d06565b60405161036091906136f9565b34801561082f57600080fd5b5061032061083e366004613755565b611e15565b34801561084f57600080fd5b5060025461086690610100900464ffffffffff1681565b60405164ffffffffff9091168152602001610360565b34801561088857600080fd5b506103566108973660046134b9565b60096020526000908152604090205481565b3480156108b557600080fd5b506103566108c43660046134b9565b6124c2565b3480156108d557600080fd5b506103206108e43660046137c4565b6124d9565b3480156108f557600080fd5b506103206109043660046137e4565b6125f5565b34801561091557600080fd5b506103206109243660046134f4565b612653565b34801561093557600080fd5b506002546107ba9060ff1681565b34801561094f57600080fd5b5061032061095e366004613812565b6126fd565b34801561096f57600080fd5b5061032061097e366004613853565b612802565b34801561098f57600080fd5b5061054b61099e36600461353f565b60056020526000908152604090205460ff1681565b3480156109bf57600080fd5b506103206109ce366004613886565b6128df565b3480156109df57600080fd5b506103206128fd565b6109f0612a48565b60008381526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1680610a81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f696e76616c6964207265736f757263654944000000000000000000000000000060448201526064015b60405180910390fd5b6000610a8f86868686610db7565b905080341015610afb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f496e73756666696369656e74206e6174697665206665650000000000000000006044820152606401610a78565b60ff8616600090815260036020526040812080548290610b249067ffffffffffffffff166138df565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905590506000610b55612ab5565b905083600073ffffffffffffffffffffffffffffffffffffffff821663310d1d03610b808734613907565b8b868e8d8d6040518763ffffffff1660e01b8152600401610ba5959493929190613967565b60006040518083038185885af1158015610bc3573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610c0a9190810190613a0c565b90508273ffffffffffffffffffffffffffffffffffffffff167f17bc3181e17a9620a479c24e6c606e474ba84fc036877b768926872e8cd0e11f8b8b878c8c87604051610c5c96959493929190613b16565b60405180910390a250505050505050505050565b600083815260046020526040812054819073ffffffffffffffffffffffffffffffffffffffff1680610cfe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f696e76616c6964207265736f75726365494400000000000000000000000000006044820152606401610a78565b6000610d08612ab5565b6040517f48b49bb6000000000000000000000000000000000000000000000000000000008152909150829073ffffffffffffffffffffffffffffffffffffffff8216906348b49bb690610d67908b9086908e908d908d90600401613967565b6040805180830381865afa158015610d83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da79190613b68565b909a909950975050505050505050565b60075460ff851660009081526008602052604090205415610e005760ff85166000908152600860205260409020546103e890610df39083613b96565b610dfd9190613bd3565b90505b60008481526009602052604090205415610e3e576000848152600960205260409020546103e890610e319083613b96565b610e3b9190613bd3565b90505b949350505050565b610e4e612b21565b60ff838116600884901b68ffffffffffffffff0016176000818152600660209081526040808320868452909152808220815160808101909252805493949293919290918391166004811115610ea557610ea561368f565b6004811115610eb657610eb661368f565b81529054610100810478ffffffffffffffffffffffffffffffffffffffffffffffffff1660208301527a010000000000000000000000000000000000000000000000000000810460ff1660408301527b01000000000000000000000000000000000000000000000000000000900464ffffffffff1660609091015280519091506001816004811115610f4a57610f4a61368f565b1480610f6757506002816004811115610f6557610f6561368f565b145b610fcd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f63616e6e6f742062652063616e63656c6c6564000000000000000000000000006044820152606401610a78565b600254606083015164ffffffffff610100909204821691610fef911643613907565b64ffffffffff161161105d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e6f7420657870697265640000000000000000000000000000000000000000006044820152606401610a78565b600480835268ffffffffffffffffff84166000908152600660209081526040808320888452909152902083518154859383917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169060019084908111156110c6576110c661368f565b02179055506020820151815460408085015160609095015164ffffffffff167b01000000000000000000000000000000000000000000000000000000027affffffffffffffffffffffffffffffffffffffffffffffffffffff60ff9096167a010000000000000000000000000000000000000000000000000000027fffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffff78ffffffffffffffffffffffffffffffffffffffffffffffffff90951661010002949094167fffffffffff0000000000000000000000000000000000000000000000000000ff909316929092179290921793909316929092179055517f968626a768e76ba1363efe44e322a6c4900c5f084e0b45f35e294dfddaa9e0d5906111f290889088906004908990613c0e565b60405180910390a1505050505050565b61120a612bd1565b611212612a48565b60008281526004602052604090205473ffffffffffffffffffffffffffffffffffffffff168061129e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f696e76616c6964207265736f75726365494400000000000000000000000000006044820152606401610a78565b60405168ffffffffffffffff00600888901b1660ff891617906000906112cc90869089908990602001613c44565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012068ffffffffffffffffff851660009081526006845282812082825290935291209091506002815460ff16600481111561133d5761133d61368f565b146113a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f21706173736564000000000000000000000000000000000000000000000000006044820152606401610a78565b80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166003178155838515611461576040517fe248cff200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e248cff29061142a908a908d908d90600401613c5e565b600060405180830381600087803b15801561144457600080fd5b505af1158015611458573d6000803e3d6000fd5b50505050611582565b6040517fe248cff200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e248cff2906114b7908a908d908d90600401613c5e565b600060405180830381600087803b1580156114d157600080fd5b505af19250505080156114e2575060015b611582573d808015611510576040519150601f19603f3d011682016040523d82523d6000602084013e611515565b606091505b5082547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660021783556040517fbd37c1f0d53bb2f33fe4c2104de272fcdeb4d2fef3acdbf1e4ddc3d6833ca3769061156f908390613c78565b60405180910390a15050505050506115c6565b7f968626a768e76ba1363efe44e322a6c4900c5f084e0b45f35e294dfddaa9e0d58b8b6003866040516115b89493929190613c0e565b60405180910390a150505050505b505050505050565b6000828152600160205260409020600201546115ec9061070d612ab5565b611678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60448201527f2061646d696e20746f206772616e7400000000000000000000000000000000006064820152608401610a78565b6116828282612cae565b5050565b61168e612ab5565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c6600000000000000000000000000000000006064820152608401610a78565b6116828282612d31565b61175a612db4565b8061176457600080fd5b61176d81612915565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff929092169190911790556040518181527fa20d6b84cd798a24038be305eff8a45ca82ef54a2aa2082005d8e14c0a4746c8906020015b60405180910390a150565b600082815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff8616855290920190529020545b92915050565b60006118097fe2b7fb3b832174769106daebcfd6d1970523240dda11281102db9363b83b0dc483611c9c565b611843612db4565b60008181526004602052604090205473ffffffffffffffffffffffffffffffffffffffff16806118cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f696e76616c6964207265736f75726365494400000000000000000000000000006044820152606401610a78565b60008281526004602081905260409182902080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905590517f5d75cd9000000000000000000000000000000000000000000000000000000000815290810183905273ffffffffffffffffffffffffffffffffffffffff821690635d75cd9090602401600060405180830381600087803b15801561196d57600080fd5b505af11580156115c6573d6000803e3d6000fd5b611989612db4565b73ffffffffffffffffffffffffffffffffffffffff8616158015906119ad57508415155b80156119ce575073ffffffffffffffffffffffffffffffffffffffff841615155b6119d757600080fd5b60008581526004602081905260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a811691821790925592517fde319d99000000000000000000000000000000000000000000000000000000008152918201889052861660248201527fffffffff000000000000000000000000000000000000000000000000000000008086166044830152606482018590528316608482015263de319d999060a401600060405180830381600087803b158015611ab757600080fd5b505af1158015611acb573d6000803e3d6000fd5b50505050505050505050565b611adf612db4565b6000611ae9612ab5565b90508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b2457600080fd5b611b2f6000836115ce565b611682600082611686565b68ffffffffffffffffff831660009081526006602090815260408083208584529091528082208151608081019092528054610e3e929190829060ff166004811115611b8757611b8761368f565b6004811115611b9857611b9861368f565b81529054610100810478ffffffffffffffffffffffffffffffffffffffffffffffffff1660208301527a010000000000000000000000000000000000000000000000000000810460ff1660408301527b01000000000000000000000000000000000000000000000000000000900464ffffffffff1660609091015283612e27565b6000611c447fe2b7fb3b832174769106daebcfd6d1970523240dda11281102db9363b83b0dc46124c2565b905090565b611c51612db4565b611c61611c5c612ab5565b612e5c565b565b611c6b612db4565b60009182526009602052604090912055565b6000828152600160205260408120611c959083612ed5565b9392505050565b6000828152600160205260408120611c959083612a19565b611cbc612db4565b600755565b611cc9612db4565b6002805464ffffffffff909216610100027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000ff909216919091179055565b60408051608081018252600080825260208201819052918101829052606081019190915260ff848116600885901b68ffffffffffffffff00161760008181526006602090815260408083208784529091529081902081516080810190925280549293919290918391166004811115611d8057611d8061368f565b6004811115611d9157611d9161368f565b81529054610100810478ffffffffffffffffffffffffffffffffffffffffffffffffff1660208301527a010000000000000000000000000000000000000000000000000000810460ff1660408301527b01000000000000000000000000000000000000000000000000000000900464ffffffffff1660609091015295945050505050565b611e1d612ee1565b611e25612a48565b60405168ffffffffffffffff00600886901b1660ff87161790600090611e5390869086908690602001613c44565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012068ffffffffffffffffff861660009081526006835283812082825290925282822060808501909352825490945090929190829060ff166004811115611ed057611ed061368f565b6004811115611ee157611ee161368f565b81529054610100810478ffffffffffffffffffffffffffffffffffffffffffffffffff166020808401919091527a010000000000000000000000000000000000000000000000000000820460ff166040808501919091527b0100000000000000000000000000000000000000000000000000000090920464ffffffffff166060909301929092526000898152600490925290205490915073ffffffffffffffffffffffffffffffffffffffff16611ff4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f6e6f2068616e646c657220666f72207265736f757263654944000000000000006044820152606401610a78565b6002815160048111156120095761200961368f565b14156120265761201e888887878a6001611202565b5050506124bb565b6000612030612ab5565b905060018260000151600481111561204a5761204a61368f565b11156120b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f70726f706f73616c20636f6d706c6574656400000000000000000000000000006044820152606401610a78565b6120bc8282612e27565b15612123576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f616c726561647920766f746564000000000000000000000000000000000000006044820152606401610a78565b6000825160048111156121385761213861368f565b14156121aa576040805160808101825260018082526000602083018190528284015264ffffffffff4316606083015291519093507f968626a768e76ba1363efe44e322a6c4900c5f084e0b45f35e294dfddaa9e0d59161219d918c918c918890613c0e565b60405180910390a161221b565b600254606083015164ffffffffff6101009092048216916121cc911643613907565b64ffffffffff16111561221b5760048083526040517f968626a768e76ba1363efe44e322a6c4900c5f084e0b45f35e294dfddaa9e0d591612212918c918c918890613c0e565b60405180910390a15b6004825160048111156122305761223061368f565b146123315761226761224182612f73565b836020015178ffffffffffffffffffffffffffffffffffffffffffffffffff1617613023565b78ffffffffffffffffffffffffffffffffffffffffffffffffff1660208301526040820180519061229782613c8b565b60ff1690525081516040517f25f8daaa4635a7729927ba3f5b3d59cc3320aca7c32c9db4e7ca7b9574343640916122d3918c918c918890613c0e565b60405180910390a1600254604083015160ff9182169116106123315760028083526040517f968626a768e76ba1363efe44e322a6c4900c5f084e0b45f35e294dfddaa9e0d591612328918c918c918890613c0e565b60405180910390a15b68ffffffffffffffffff841660009081526006602090815260408083208684529091529020825181548492919082907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660018360048111156123965761239661368f565b021790555060208201518154604084015160609094015164ffffffffff167b01000000000000000000000000000000000000000000000000000000027affffffffffffffffffffffffffffffffffffffffffffffffffffff60ff9095167a010000000000000000000000000000000000000000000000000000027fffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffff78ffffffffffffffffffffffffffffffffffffffffffffffffff90941661010002939093167fffffffffff0000000000000000000000000000000000000000000000000000ff9092169190911791909117929092169190911790556002825160048111156124a1576124a161368f565b14156124b6576124b6898988888b6000611202565b505050505b5050505050565b6000818152600160205260408120611809906130a8565b6124e1612db4565b73ffffffffffffffffffffffffffffffffffffffff83161580159061250557508115155b8015612526575073ffffffffffffffffffffffffffffffffffffffff811615155b61252f57600080fd5b60008281526004602081905260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff87811691821790925592517fb8fa37360000000000000000000000000000000000000000000000000000000081529182018590528316602482015263b8fa373690604401600060405180830381600087803b1580156125d857600080fd5b505af11580156125ec573d6000803e3d6000fd5b50505050505050565b6125fd612db4565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260056020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b6000828152600160205260409020600201546126719061070d612ab5565b611748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60448201527f2061646d696e20746f207265766f6b65000000000000000000000000000000006064820152608401610a78565b612705612db4565b73ffffffffffffffffffffffffffffffffffffffff83166127695760405173ffffffffffffffffffffffffffffffffffffffff83169082156108fc029083906000818181858888f19350505050158015612763573d6000803e3d6000fd5b50505050565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526024820183905284169063a9059cbb906044016020604051808303816000875af11580156127de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127639190613cab565b61280a612db4565b60ff821660009081526003602052604090205467ffffffffffffffff90811690821611612893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f6e6f2064656372656d656e7473000000000000000000000000000000000000006044820152606401610a78565b60ff91909116600090815260036020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff909216919091179055565b6128e7612db4565b60ff909116600090815260086020526040902055565b612905612db4565b611c61612910612ab5565b6130b2565b60006101008210612982576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f3e382062697473000000000000000000000000000000000000000000000000006044820152606401610a78565b5090565b6000650100000000008210612982576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f3e343020626974730000000000000000000000000000000000000000000000006044820152606401610a78565b6000611c958373ffffffffffffffffffffffffffffffffffffffff8416613128565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001830160205260408120541515611c95565b60005460ff1615611c61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610a78565b60003360143610801590612aee575073ffffffffffffffffffffffffffffffffffffffff811660009081526005602052604090205460ff165b15612b1c57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c5b919050565b6000612b2b612ab5565b9050612b38600082611c9c565b80612b685750612b687fe2b7fb3b832174769106daebcfd6d1970523240dda11281102db9363b83b0dc482611c9c565b612bce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f2161646d696e7c72656c617965720000000000000000000000000000000000006044820152606401610a78565b50565b6000612bdb612ab5565b9050612be8600082611c9c565b80612c185750612c187fe2b7fb3b832174769106daebcfd6d1970523240dda11281102db9363b83b0dc482611c9c565b80612c485750612c487fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e6382611c9c565b612bce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f2161646d696e7c72656c617965727c6578656375746f720000000000000000006044820152606401610a78565b6000828152600160205260409020612cc690826129f7565b1561168257612cd3612ab5565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000828152600160205260409020612d499082613177565b1561168257612d56612ab5565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b612dc1600061070d612ab5565b611c61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f2161646d696e00000000000000000000000000000000000000000000000000006044820152606401610a78565b600080836020015178ffffffffffffffffffffffffffffffffffffffffffffffffff16612e5384612f73565b16119392505050565b612e64612a48565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560405173ffffffffffffffffffffffffffffffffffffffff821681527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020016117cb565b6000611c958383613199565b612f0d7fe2b7fb3b832174769106daebcfd6d1970523240dda11281102db9363b83b0dc461070d612ab5565b611c61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f2172656c617965720000000000000000000000000000000000000000000000006044820152606401610a78565b600080612fa07fe2b7fb3b832174769106daebcfd6d1970523240dda11281102db9363b83b0dc4846117d6565b905060c881111561300d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f3e4d41585f52454c4159455253000000000000000000000000000000000000006044820152606401610a78565b613018600182613907565b6001901b9392505050565b60007901000000000000000000000000000000000000000000000000008210612982576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f3e323030206269747300000000000000000000000000000000000000000000006044820152606401610a78565b6000611809825490565b6130ba6131c3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560405173ffffffffffffffffffffffffffffffffffffffff821681527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020016117cb565b600081815260018301602052604081205461316f57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611809565b506000611809565b6000611c958373ffffffffffffffffffffffffffffffffffffffff841661322f565b60008260000182815481106131b0576131b0613cc8565b9060005260206000200154905092915050565b60005460ff16611c61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610a78565b60008181526001830160205260408120548015613318576000613253600183613907565b855490915060009061326790600190613907565b90508181146132cc57600086600001828154811061328757613287613cc8565b90600052602060002001549050808760000184815481106132aa576132aa613cc8565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806132dd576132dd613cf7565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611809565b6000915050611809565b803560ff81168114612b1c57600080fd5b60008083601f84011261334557600080fd5b50813567ffffffffffffffff81111561335d57600080fd5b60208301915083602082850101111561337557600080fd5b9250929050565b6000806000806060858703121561339257600080fd5b61339b85613322565b935060208501359250604085013567ffffffffffffffff8111156133be57600080fd5b6133ca87828801613333565b95989497509550505050565b803567ffffffffffffffff81168114612b1c57600080fd5b60008060006060848603121561340357600080fd5b61340c84613322565b925061341a602085016133d6565b9150604084013590509250925092565b8015158114612bce57600080fd5b60008060008060008060a0878903121561345157600080fd5b61345a87613322565b9550613468602088016133d6565b9450604087013567ffffffffffffffff81111561348457600080fd5b61349089828a01613333565b9095509350506060870135915060808701356134ab8161342a565b809150509295509295509295565b6000602082840312156134cb57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114612bce57600080fd5b6000806040838503121561350757600080fd5b823591506020830135613519816134d2565b809150509250929050565b60006020828403121561353657600080fd5b611c9582613322565b60006020828403121561355157600080fd5b8135611c95816134d2565b80357fffffffff0000000000000000000000000000000000000000000000000000000081168114612b1c57600080fd5b60008060008060008060c087890312156135a557600080fd5b86356135b0816134d2565b95506020870135945060408701356135c7816134d2565b93506135d56060880161355c565b9250608087013591506135ea60a0880161355c565b90509295509295509295565b60008060006060848603121561360b57600080fd5b833568ffffffffffffffffff8116811461362457600080fd5b925060208401359150604084013561363b816134d2565b809150509250925092565b6000806040838503121561365957600080fd5b50508035926020909101359150565b60006020828403121561367a57600080fd5b813564ffffffffff81168114611c9557600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600581106136f5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b600060808201905061370c8284516136be565b78ffffffffffffffffffffffffffffffffffffffffffffffffff602084015116602083015260ff604084015116604083015264ffffffffff606084015116606083015292915050565b60008060008060006080868803121561376d57600080fd5b61377686613322565b9450613784602087016133d6565b935060408601359250606086013567ffffffffffffffff8111156137a757600080fd5b6137b388828901613333565b969995985093965092949392505050565b6000806000606084860312156137d957600080fd5b8335613624816134d2565b600080604083850312156137f757600080fd5b8235613802816134d2565b915060208301356135198161342a565b60008060006060848603121561382757600080fd5b8335613832816134d2565b92506020840135613842816134d2565b929592945050506040919091013590565b6000806040838503121561386657600080fd5b61386f83613322565b915061387d602084016133d6565b90509250929050565b6000806040838503121561389957600080fd5b6138a283613322565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818114156138fd576138fd6138b0565b6001019392505050565b600082821015613919576139196138b0565b500390565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b85815273ffffffffffffffffffffffffffffffffffffffff8516602082015260ff841660408201526080606082015260006139a660808301848661391e565b979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60005b838110156139fb5781810151838201526020016139e3565b838111156127635750506000910152565b600060208284031215613a1e57600080fd5b815167ffffffffffffffff80821115613a3657600080fd5b818401915084601f830112613a4a57600080fd5b815181811115613a5c57613a5c6139b1565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715613aa257613aa26139b1565b81604052828152876020848701011115613abb57600080fd5b6139a68360208301602088016139e0565b60008151808452613ae48160208601602086016139e0565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60ff8716815285602082015267ffffffffffffffff8516604082015260a060608201526000613b4960a08301858761391e565b8281036080840152613b5b8185613acc565b9998505050505050505050565b60008060408385031215613b7b57600080fd5b8251613b86816134d2565b6020939093015192949293505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613bce57613bce6138b0565b500290565b600082613c09577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60ff8516815267ffffffffffffffff8416602082015260808101613c3560408301856136be565b82606083015295945050505050565b838152818360208301376000910160200190815292915050565b838152604060208201526000610e3b60408301848661391e565b602081526000611c956020830184613acc565b600060ff821660ff811415613ca257613ca26138b0565b60010192915050565b600060208284031215613cbd57600080fd5b8151611c958161342a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea26469706673582212201dfc0095c5f3a325d6466152dbfc3feb61440b2edba079cb1a83eb4b9c06db7664736f6c634300080b0033000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000e35fa931a0000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000e4b30ce8d7fd3a546d8a2a785d7d6108ccd1d68300000000000000000000000079f0939bf2e1bd0a9b526be1a5462976b03a1278