0 txs
217 calls
constructor
constructor(address token, address armProxy, bool allowlistEnabled, bool acceptLiquidity)
functions
canAcceptLiquidity
viewfunction canAcceptLiquidity() view returns (bool)
getAllowList
viewfunction getAllowList() view returns (address[])
getAllowListEnabled
viewfunction getAllowListEnabled() view returns (bool)
getArmProxy
viewfunction getArmProxy() view returns (address armProxy)
getBridgeLimit
viewfunction getBridgeLimit() view returns (uint256)
getBridgeLimitAdmin
viewfunction getBridgeLimitAdmin() view returns (address)
getCurrentBridgedAmount
viewfunction getCurrentBridgedAmount() view returns (uint256)
getCurrentInboundRateLimiterState
viewfunction getCurrentInboundRateLimiterState(uint64 remoteChainSelector) view returns (tuple)
getCurrentOutboundRateLimiterState
viewfunction getCurrentOutboundRateLimiterState(uint64 remoteChainSelector) view returns (tuple)
getLockReleaseInterfaceId
purefunction getLockReleaseInterfaceId() pure returns (bytes4)
getProxyPool
viewfunction getProxyPool() view returns (address proxyPool)
getRateLimitAdmin
viewfunction getRateLimitAdmin() view returns (address)
getRebalancer
viewfunction getRebalancer() view returns (address)
getRouter
viewfunction getRouter() view returns (address router)
getSupportedChains
viewfunction getSupportedChains() view returns (uint64[])
getToken
viewfunction getToken() view returns (address token)
isSupportedChain
viewfunction isSupportedChain(uint64 remoteChainSelector) view returns (bool)
owner
viewfunction owner() view returns (address)
supportsInterface
purefunction supportsInterface(bytes4 interfaceId) pure returns (bool)
typeAndVersion
viewfunction typeAndVersion() view returns (string)
acceptOwnership
nonpayablefunction acceptOwnership()
applyAllowListUpdates
nonpayablefunction applyAllowListUpdates(address[] removes, address[] adds)
applyChainUpdates
nonpayablefunction applyChainUpdates(tuple[] chains)
initialize
nonpayablefunction initialize(address owner, address[] allowlist, address router, uint256 bridgeLimit)
lockOrBurn
nonpayablefunction lockOrBurn(address originalSender, bytes, uint256 amount, uint64 remoteChainSelector, bytes) returns (bytes)
provideLiquidity
nonpayablefunction provideLiquidity(uint256 amount)
releaseOrMint
nonpayablefunction releaseOrMint(bytes, address receiver, uint256 amount, uint64 remoteChainSelector, bytes)
setBridgeLimit
nonpayablefunction setBridgeLimit(uint256 newBridgeLimit)
setBridgeLimitAdmin
nonpayablefunction setBridgeLimitAdmin(address bridgeLimitAdmin)
setChainRateLimiterConfig
nonpayablefunction setChainRateLimiterConfig(uint64 remoteChainSelector, tuple outboundConfig, tuple inboundConfig)
setProxyPool
nonpayablefunction setProxyPool(address proxyPool)
setRateLimitAdmin
nonpayablefunction setRateLimitAdmin(address rateLimitAdmin)
setRebalancer
nonpayablefunction setRebalancer(address rebalancer)
setRouter
nonpayablefunction setRouter(address newRouter)
transferOwnership
nonpayablefunction transferOwnership(address to)
withdrawLiquidity
nonpayablefunction withdrawLiquidity(uint256 amount)
events
AllowListAdd
event AllowListAdd(address sender)
AllowListRemove
event AllowListRemove(address sender)
BridgeLimitAdminUpdated
event BridgeLimitAdminUpdated(address indexed oldAdmin, address indexed newAdmin)
BridgeLimitUpdated
event BridgeLimitUpdated(uint256 oldBridgeLimit, uint256 newBridgeLimit)
Burned
event Burned(address indexed sender, uint256 amount)
ChainAdded
event ChainAdded(uint64 remoteChainSelector, (bool isEnabled, uint128 capacity, uint128 rate) outboundRateLimiterConfig, (bool isEnabled, uint128 capacity, uint128 rate) inboundRateLimiterConfig)
ChainConfigured
event ChainConfigured(uint64 remoteChainSelector, (bool isEnabled, uint128 capacity, uint128 rate) outboundRateLimiterConfig, (bool isEnabled, uint128 capacity, uint128 rate) inboundRateLimiterConfig)
ChainRemoved
event ChainRemoved(uint64 remoteChainSelector)
Initialized
event Initialized(uint8 version)
LiquidityAdded
event LiquidityAdded(address indexed provider, uint256 indexed amount)
LiquidityRemoved
event LiquidityRemoved(address indexed provider, uint256 indexed amount)
Locked
event Locked(address indexed sender, uint256 amount)
Minted
event Minted(address indexed sender, address indexed recipient, uint256 amount)
OwnershipTransferred
event OwnershipTransferred(address indexed from, address indexed to)
OwnershipTransferRequested
event OwnershipTransferRequested(address indexed from, address indexed to)
Released
event Released(address indexed sender, address indexed recipient, uint256 amount)
RouterUpdated
event RouterUpdated(address oldRouter, address newRouter)
errors
AggregateValueMaxCapacityExceeded
error AggregateValueMaxCapacityExceeded(uint256 capacity, uint256 requested)
AggregateValueRateLimitReached
error AggregateValueRateLimitReached(uint256 minWaitInSeconds, uint256 available)
AllowListNotEnabled
error AllowListNotEnabled()
BadARMSignal
error BadARMSignal()
BridgeLimitExceeded
error BridgeLimitExceeded(uint256 bridgeLimit)
BucketOverfilled
error BucketOverfilled()
CallerIsNotARampOnRouter
error CallerIsNotARampOnRouter(address caller)
ChainAlreadyExists
error ChainAlreadyExists(uint64 chainSelector)
ChainNotAllowed
error ChainNotAllowed(uint64 remoteChainSelector)
DisabledNonZeroRateLimit
error DisabledNonZeroRateLimit((bool isEnabled, uint128 capacity, uint128 rate) config)
InsufficientLiquidity
error InsufficientLiquidity()
InvalidRatelimitRate
error InvalidRatelimitRate((bool isEnabled, uint128 capacity, uint128 rate) rateLimiterConfig)
LiquidityNotAccepted
error LiquidityNotAccepted()
NonExistentChain
error NonExistentChain(uint64 remoteChainSelector)
NotEnoughBridgedAmount
error NotEnoughBridgedAmount()
RateLimitMustBeDisabled
error RateLimitMustBeDisabled()
SenderNotAllowed
error SenderNotAllowed(address sender)
TokenMaxCapacityExceeded
error TokenMaxCapacityExceeded(uint256 capacity, uint256 requested, address tokenAddress)
TokenRateLimitReached
error TokenRateLimitReached(uint256 minWaitInSeconds, uint256 available, address tokenAddress)
Unauthorized
error Unauthorized(address caller)
ZeroAddressNotAllowed
error ZeroAddressNotAllowed()
creation bytecode
0x6101006040523480156200001257600080fd5b5060405162003e8738038062003e87833981016040819052620000359162000275565b838383338060006200004662000130565b6001600160a01b038216620000a25760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b03808516620100000262010000600160b01b031990921691909117909155811615620000de57620000de81620001ef565b5050506001600160a01b03831662000109576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160a01b03928316608052911660a052151560c052151560e05250620002d2915050565b600054610100900460ff16156200019a5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840162000099565b60005460ff9081161015620001ed576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b600180546001600160a01b0319166001600160a01b038381169182179092556000805460405192936201000090910416917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b03811681146200025f57600080fd5b919050565b805180151581146200025f57600080fd5b600080600080608085870312156200028c57600080fd5b620002978562000247565b9350620002a76020860162000247565b9250620002b76040860162000264565b9150620002c76060860162000264565b905092959194509250565b60805160a05160c05160e051613b27620003606000396000818161055e0152611df40152600081816105e501528181610a1f015281816117ec01526120d901526000818161039b015281816114e301526118630152600081816102fc0152818161075a015281816108120152818161160501528181611e9c0152818161246101526124df0152613b276000f3fe608060405234801561001057600080fd5b506004361061025c5760003560e01c80638926f54f11610145578063c0d78655116100bd578063da3034501161008c578063e7887f1911610071578063e7887f1914610609578063eb521a4c14610611578063f2fde38b1461062457600080fd5b8063da303450146105d0578063e0351e13146105e357600080fd5b8063c0d7865514610582578063c4bffe2b14610595578063c75eea9c146105aa578063cf7401f3146105bd57600080fd5b80639a6bf82911610114578063af58d59f116100f9578063af58d59f146104dc578063b0f479a11461054b578063bb98546b1461055c57600080fd5b80639a6bf829146104b5578063a7cd63b7146104c757600080fd5b80638926f54f1461044a5780638bfca18c1461045d5780638da5cb5b1461048b57806396875445146104a257600080fd5b80635246492f116101d85780636d3d1a58116101a757806379ba50971161018c57806379ba50971461041c5780637d54534e146104245780638627fad61461043757600080fd5b80636d3d1a58146103f8578063792b4b221461040957600080fd5b80635246492f1461039957806354c8a4f3146103bf5780635995f063146103d25780636cfd1553146103e557600080fd5b806321df0da71161022f57806330f84ed21161021457806330f84ed21461034557806340dd8be914610358578063432a6ba31461038857600080fd5b806321df0da7146102fa57806330de34c61461033457600080fd5b806301ffc9a7146102615780630a861f2a146102895780630af496901461029e578063181f5a77146102b1575b600080fd5b61027461026f3660046130db565b610637565b60405190151581526020015b60405180910390f35b61029c61029736600461311d565b6106df565b005b61029c6102ac3660046131d9565b610869565b6102ed6040518060400160405280601a81526020017f4c6f636b52656c65617365546f6b656e506f6f6c20312e342e3000000000000081525081565b6040516102809190613326565b7f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b039091168152602001610280565b600d546001600160a01b031661031c565b61029c610353366004613339565b610acb565b7f75bb68f1b335d4dab6963140ecff58281174ef4362bb85a8593ab9379f24fae2546001600160a01b031661031c565b6009546001600160a01b031661031c565b7f000000000000000000000000000000000000000000000000000000000000000061031c565b61029c6103cd3660046133a2565b610b37565b61029c6103e036600461340e565b610bb2565b61029c6103f3366004613339565b61114a565b600a546001600160a01b031661031c565b61029c61041736600461311d565b61118c565b61029c611249565b61029c610432366004613339565b611352565b61029c610445366004613529565b611394565b6102746104583660046135bd565b611674565b6040517f98a47177000000000000000000000000000000000000000000000000000000008152602001610280565b6000546201000090046001600160a01b031661031c565b6102ed6104b036600461361a565b61168b565b600c545b604051908152602001610280565b6104cf6119cf565b60405161028091906136ba565b6104ef6104ea3660046135bd565b6119e0565b604051610280919081516fffffffffffffffffffffffffffffffff908116825260208084015163ffffffff1690830152604080840151151590830152606080840151821690830152608092830151169181019190915260a00190565b6004546001600160a01b031661031c565b7f0000000000000000000000000000000000000000000000000000000000000000610274565b61029c610590366004613339565b611ab2565b61059d611b6c565b6040516102809190613707565b6104ef6105b83660046135bd565b611c2c565b61029c6105cb3660046137e8565b611cfe565b61029c6105de366004613339565b611d80565b7f0000000000000000000000000000000000000000000000000000000000000000610274565b600b546104b9565b61029c61061f36600461311d565b611df2565b61029c610632366004613339565b611ef4565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f98a471770000000000000000000000000000000000000000000000000000000014806106ca57507fffffffff0000000000000000000000000000000000000000000000000000000082167fe1d4056600000000000000000000000000000000000000000000000000000000145b806106d957506106d982611f08565b92915050565b6009546001600160a01b0316331461072a576040517f8e4a23d60000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015281907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156107a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107cd919061382d565b1015610805576040517fbb55fd2700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108396001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163383611fa0565b604051819033907fc2c3f06e49b9f15e7b4af9055e183b0d73362e033ad82a07dec9bf984017171990600090a350565b600054610100900460ff16158080156108895750600054600160ff909116105b806108a35750303b1580156108a3575060005460ff166001145b61092f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610721565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561098d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6001600160a01b03851615806109aa57506001600160a01b038316155b156109e1576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109ea85612067565b600480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0385161790557f000000000000000000000000000000000000000000000000000000000000000015610a5c57604080516000815260208101909152610a5c90856120d7565b600b8290558015610ac457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b610ad3612269565b6001600160a01b038116610b13576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f75bb68f1b335d4dab6963140ecff58281174ef4362bb85a8593ab9379f24fae255565b610b3f612269565b610bac848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506040805160208088028281018201909352878252909350879250869182918501908490808284376000920191909152506120d792505050565b50505050565b610bba612269565b60005b81811015611145576000838383818110610bd957610bd9613846565b90506101000201803603810190610bf09190613875565b9050610c0581604001518260200151156122e5565b610c1881606001518260200151156122e5565b806020015115611039578051610c3a9060059067ffffffffffffffff16612422565b610c7f5780516040517f1d5ad3c500000000000000000000000000000000000000000000000000000000815267ffffffffffffffff9091166004820152602401610721565b6040518060a001604052808260400151602001516fffffffffffffffffffffffffffffffff1681526020014263ffffffff168152602001826040015160000151151581526020018260400151602001516fffffffffffffffffffffffffffffffff1681526020018260400151604001516fffffffffffffffffffffffffffffffff1681525060076000836000015167ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160146101000a81548160ff02191690831515021790555060608201518160010160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060808201518160010160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055509050506040518060a001604052808260600151602001516fffffffffffffffffffffffffffffffff1681526020014263ffffffff168152602001826060015160000151151581526020018260600151602001516fffffffffffffffffffffffffffffffff1681526020018260600151604001516fffffffffffffffffffffffffffffffff1681525060086000836000015167ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160146101000a81548160ff02191690831515021790555060608201518160010160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060808201518160010160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055509050507f0f135cbb9afa12a8bf3bbd071c117bcca4ddeca6160ef7f33d012a81b9c0c47181600001518260400151836060015160405161102c939291906138f7565b60405180910390a1611134565b80516110519060059067ffffffffffffffff16612435565b6110965780516040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff9091166004820152602401610721565b805167ffffffffffffffff908116600090815260086020908152604080832080547fffffffffffffffffffffff0000000000000000000000000000000000000000009081168255600191820185905586518616855260078452828520805490911681550192909255835191519190921681527f5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d859916910160405180910390a15b5061113e816139a9565b9050610bbd565b505050565b611152612269565b600980547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b600d546001600160a01b031633148015906111ca57506000546201000090046001600160a01b03166001600160a01b0316336001600160a01b031614155b15611203576040517f8e4a23d6000000000000000000000000000000000000000000000000000000008152336004820152602401610721565b600b80549082905560408051828152602081018490527f87db66ed7286ad069a338fab241305fcdc1c662324285bb1fa8d2cb1a767c27e91015b60405180910390a15050565b6001546001600160a01b031633146112bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610721565b6000805433620100008181027fffffffffffffffffffff0000000000000000000000000000000000000000ffff8416178455600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690556040516001600160a01b03919093041692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b61135a612269565b600a80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b8161139e81611674565b6113e0576040517fa9902c7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610721565b7f75bb68f1b335d4dab6963140ecff58281174ef4362bb85a8593ab9379f24fae2546001600160a01b03163314806114a95750600480546040517f83826b2b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8416928101929092523360248301526001600160a01b0316906383826b2b90604401602060405180830381865afa158015611485573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a991906139e1565b6114e1576040517f728fe07b000000000000000000000000000000000000000000000000000000008152336004820152602401610721565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663397796f76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561153f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061156391906139e1565b1561159a576040517fc148371500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600c548411156115d6576040517f05d3685400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600c60008282546115e891906139fe565b909155506115f890508385612441565b61162c6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168686611fa0565b6040518481526001600160a01b0386169033907f2d87480f50083e2b2759522a8fdda59802650a8055e609a7772cf70c07748f529060200160405180910390a3505050505050565b60006106d9600567ffffffffffffffff8416612485565b60608361169781611674565b6116d9576040517fa9902c7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610721565b7f75bb68f1b335d4dab6963140ecff58281174ef4362bb85a8593ab9379f24fae2546001600160a01b03163314806117b15750600480546040517fa8d87a3b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8416928101929092526001600160a01b03169063a8d87a3b90602401602060405180830381865afa158015611778573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061179c9190613a11565b6001600160a01b0316336001600160a01b0316145b6117e9576040517f728fe07b000000000000000000000000000000000000000000000000000000008152336004820152602401610721565b887f0000000000000000000000000000000000000000000000000000000000000000801561181f575061181d60028261249d565b155b15611861576040517fd0d259760000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610721565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663397796f76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e391906139e1565b1561191a576040517fc148371500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600b5487600c600082825461192f9190613a2e565b925050819055111561197357600b546040517f600f68f400000000000000000000000000000000000000000000000000000000815260040161072191815260200190565b61197d86886124bf565b60405187815233907f9f1ec8c880f76798e7b793325d625e9b60e4082a553c98f42b6cda368dd600089060200160405180910390a2505060408051602081019091526000815298975050505050505050565b60606119db6002612503565b905090565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915267ffffffffffffffff8216600090815260086020908152604091829020825160a08101845281546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff16958401959095527401000000000000000000000000000000000000000090910460ff1615159482019490945260019091015480841660608301529190910490911660808201526106d990612510565b611aba612269565b6001600160a01b038116611afa576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480546001600160a01b038381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f02dc5c233404867c793b749c6d644beb2277536d18a7e7974d3f238e4c6f1684910161123d565b60606000611b7a6005612503565b90506000815167ffffffffffffffff811115611b9857611b9861315b565b604051908082528060200260200182016040528015611bc1578160200160208202803683370190505b50905060005b8251811015611c2557828181518110611be257611be2613846565b6020026020010151828281518110611bfc57611bfc613846565b67ffffffffffffffff90921660209283029190910190910152611c1e816139a9565b9050611bc7565b5092915050565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915267ffffffffffffffff8216600090815260076020908152604091829020825160a08101845281546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff16958401959095527401000000000000000000000000000000000000000090910460ff1615159482019490945260019091015480841660608301529190910490911660808201526106d990612510565b600a546001600160a01b03163314801590611d3c57506000546201000090046001600160a01b03166001600160a01b0316336001600160a01b031614155b15611d75576040517f8e4a23d6000000000000000000000000000000000000000000000000000000008152336004820152602401610721565b6111458383836125c2565b611d88612269565b600d80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907fbd0ba0d8d06887a7c8d73e5b98f6d8c6423d94ba71955630db2690d2b670a9e790600090a35050565b7f0000000000000000000000000000000000000000000000000000000000000000611e49576040517fe93f8fa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6009546001600160a01b03163314611e8f576040517f8e4a23d6000000000000000000000000000000000000000000000000000000008152336004820152602401610721565b611ec46001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163330846126a9565b604051819033907fc17cea59c2955cb181b03393209566960365771dbba9dc3d510180e7cb31208890600090a350565b611efc612269565b611f0581612067565b50565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f317fa3340000000000000000000000000000000000000000000000000000000014806106d957507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a7000000000000000000000000000000000000000000000000000000001492915050565b6040516001600160a01b0383166024820152604481018290526111459084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526126fa565b600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038381169182179092556000805460405192936201000090910416917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b7f000000000000000000000000000000000000000000000000000000000000000061212e576040517f35f4a7b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b82518110156121bf57600083828151811061214e5761214e613846565b6020026020010151905061216c8160026127f990919063ffffffff16565b156121ae576040516001600160a01b03821681527f800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf75669060200160405180910390a15b506121b8816139a9565b9050612131565b5060005b81518110156111455760008282815181106121e0576121e0613846565b6020026020010151905060006001600160a01b0316816001600160a01b03160361220a5750612259565b61221560028261280e565b15612257576040516001600160a01b03821681527f2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d89060200160405180910390a15b505b612262816139a9565b90506121c3565b6000546201000090046001600160a01b031633146122e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610721565b565b8151156123b05781602001516fffffffffffffffffffffffffffffffff1682604001516fffffffffffffffffffffffffffffffff1610158061233b575060408201516fffffffffffffffffffffffffffffffff16155b1561237457816040517f70505e560000000000000000000000000000000000000000000000000000000081526004016107219190613a41565b80156123ac576040517f433fc33d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050565b60408201516fffffffffffffffffffffffffffffffff161515806123e9575060208201516fffffffffffffffffffffffffffffffff1615155b156123ac57816040517fd68af9cc0000000000000000000000000000000000000000000000000000000081526004016107219190613a41565b600061242e838361281f565b9392505050565b600061242e838361286e565b67ffffffffffffffff821660009081526008602052604090206123ac90827f0000000000000000000000000000000000000000000000000000000000000000612961565b6000818152600183016020526040812054151561242e565b6001600160a01b0381166000908152600183016020526040812054151561242e565b67ffffffffffffffff821660009081526007602052604090206123ac90827f0000000000000000000000000000000000000000000000000000000000000000612961565b6060600061242e83612cb0565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915261259e82606001516fffffffffffffffffffffffffffffffff1683600001516fffffffffffffffffffffffffffffffff16846020015163ffffffff164261258291906139fe565b85608001516fffffffffffffffffffffffffffffffff16612d0c565b6fffffffffffffffffffffffffffffffff1682525063ffffffff4216602082015290565b6125cb83611674565b61260d576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84166004820152602401610721565b6126188260006122e5565b67ffffffffffffffff8316600090815260076020526040902061263b9083612d36565b6126468160006122e5565b67ffffffffffffffff831660009081526008602052604090206126699082612d36565b7f0350d63aa5f270e01729d00d627eeb8f3429772b1818c016c66a588a864f912b83838360405161269c939291906138f7565b60405180910390a1505050565b6040516001600160a01b0380851660248301528316604482015260648101829052610bac9085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611fe5565b600061274f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612ed89092919063ffffffff16565b805190915015611145578080602001905181019061276d91906139e1565b611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610721565b600061242e836001600160a01b03841661286e565b600061242e836001600160a01b0384165b6000818152600183016020526040812054612866575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556106d9565b5060006106d9565b600081815260018301602052604081205480156129575760006128926001836139fe565b85549091506000906128a6906001906139fe565b905081811461290b5760008660000182815481106128c6576128c6613846565b90600052602060002001549050808760000184815481106128e9576128e9613846565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061291c5761291c613a7d565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506106d9565b60009150506106d9565b825474010000000000000000000000000000000000000000900460ff161580612988575081155b1561299257505050565b825460018401546fffffffffffffffffffffffffffffffff808316929116906000906129d890700100000000000000000000000000000000900463ffffffff16426139fe565b90508015612a985781831115612a1a576040517f9725942a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001860154612a549083908590849070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16612d0c565b86547fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004263ffffffff160217875592505b84821015612b35576001600160a01b038416612aea576040517ff94ebcd10000000000000000000000000000000000000000000000000000000081526004810183905260248101869052604401610721565b6040517f1a76572a00000000000000000000000000000000000000000000000000000000815260048101839052602481018690526001600160a01b0385166044820152606401610721565b84831015612c2e5760018681015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16906000908290612b7990826139fe565b612b83878a6139fe565b612b8d9190613a2e565b612b979190613aac565b90506001600160a01b038616612be3576040517f15279c080000000000000000000000000000000000000000000000000000000081526004810182905260248101869052604401610721565b6040517fd0c8d23a00000000000000000000000000000000000000000000000000000000815260048101829052602481018690526001600160a01b0387166044820152606401610721565b612c3885846139fe565b86547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff82161787556040518681529093507f1871cdf8010e63f2eb8384381a68dfa7416dc571a5517e66e88b2d2d0c0a690a9060200160405180910390a1505050505050565b606081600001805480602002602001604051908101604052809291908181526020018280548015612d0057602002820191906000526020600020905b815481526020019060010190808311612cec575b50505050509050919050565b6000612d2b85612d1c8486613ae7565b612d269087613a2e565b612ee7565b90505b949350505050565b8154600090612d5f90700100000000000000000000000000000000900463ffffffff16426139fe565b90508015612e015760018301548354612da7916fffffffffffffffffffffffffffffffff80821692811691859170010000000000000000000000000000000090910416612d0c565b83546fffffffffffffffffffffffffffffffff919091167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116177001000000000000000000000000000000004263ffffffff16021783555b60208201518354612e27916fffffffffffffffffffffffffffffffff9081169116612ee7565b83548351151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffff000000000000000000000000000000009091166fffffffffffffffffffffffffffffffff92831617178455602083015160408085015183167001000000000000000000000000000000000291909216176001850155517f9ea3374b67bf275e6bb9c8ae68f9cae023e1c528b4b27e092f0bb209d3531c199061269c908490613a41565b6060612d2e8484600085612efd565b6000818310612ef6578161242e565b5090919050565b606082471015612f8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610721565b600080866001600160a01b03168587604051612fab9190613afe565b60006040518083038185875af1925050503d8060008114612fe8576040519150601f19603f3d011682016040523d82523d6000602084013e612fed565b606091505b5091509150612ffe87838387613009565b979650505050505050565b6060831561309257825160000361308b576001600160a01b0385163b61308b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610721565b5081612d2e565b612d2e83838151156130a75781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107219190613326565b6000602082840312156130ed57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461242e57600080fd5b60006020828403121561312f57600080fd5b5035919050565b6001600160a01b0381168114611f0557600080fd5b803561315681613136565b919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156131d1576131d161315b565b604052919050565b600080600080608085870312156131ef57600080fd5b84356131fa81613136565b935060208581013567ffffffffffffffff8082111561321857600080fd5b818801915088601f83011261322c57600080fd5b81358181111561323e5761323e61315b565b8060051b915061324f84830161318a565b818152918301840191848101908b84111561326957600080fd5b938501935b83851015613293578435925061328383613136565b828252938501939085019061326e565b8098505050505050506132a86040860161314b565b9396929550929360600135925050565b60005b838110156132d35781810151838201526020016132bb565b50506000910152565b600081518084526132f48160208601602086016132b8565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061242e60208301846132dc565b60006020828403121561334b57600080fd5b813561242e81613136565b60008083601f84011261336857600080fd5b50813567ffffffffffffffff81111561338057600080fd5b6020830191508360208260051b850101111561339b57600080fd5b9250929050565b600080600080604085870312156133b857600080fd5b843567ffffffffffffffff808211156133d057600080fd5b6133dc88838901613356565b909650945060208701359150808211156133f557600080fd5b5061340287828801613356565b95989497509550505050565b6000806020838503121561342157600080fd5b823567ffffffffffffffff8082111561343957600080fd5b818501915085601f83011261344d57600080fd5b81358181111561345c57600080fd5b8660208260081b850101111561347157600080fd5b60209290920196919550909350505050565b600082601f83011261349457600080fd5b813567ffffffffffffffff8111156134ae576134ae61315b565b6134df60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161318a565b8181528460208386010111156134f457600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff8116811461315657600080fd5b600080600080600060a0868803121561354157600080fd5b853567ffffffffffffffff8082111561355957600080fd5b61356589838a01613483565b96506020880135915061357782613136565b8195506040880135945061358d60608901613511565b935060808801359150808211156135a357600080fd5b506135b088828901613483565b9150509295509295909350565b6000602082840312156135cf57600080fd5b61242e82613511565b60008083601f8401126135ea57600080fd5b50813567ffffffffffffffff81111561360257600080fd5b60208301915083602082850101111561339b57600080fd5b600080600080600080600060a0888a03121561363557600080fd5b873561364081613136565b9650602088013567ffffffffffffffff8082111561365d57600080fd5b6136698b838c016135d8565b909850965060408a0135955086915061368460608b01613511565b945060808a013591508082111561369a57600080fd5b506136a78a828b016135d8565b989b979a50959850939692959293505050565b6020808252825182820181905260009190848201906040850190845b818110156136fb5783516001600160a01b0316835292840192918401916001016136d6565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156136fb57835167ffffffffffffffff1683529284019291840191600101613723565b8015158114611f0557600080fd5b80356fffffffffffffffffffffffffffffffff8116811461315657600080fd5b60006060828403121561378957600080fd5b6040516060810181811067ffffffffffffffff821117156137ac576137ac61315b565b60405290508082356137bd81613749565b81526137cb60208401613757565b60208201526137dc60408401613757565b60408201525092915050565b600080600060e084860312156137fd57600080fd5b61380684613511565b92506138158560208601613777565b91506138248560808601613777565b90509250925092565b60006020828403121561383f57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000610100828403121561388857600080fd5b6040516080810181811067ffffffffffffffff821117156138ab576138ab61315b565b6040526138b783613511565b815260208301356138c781613749565b60208201526138d98460408501613777565b60408201526138eb8460a08501613777565b60608201529392505050565b67ffffffffffffffff8416815260e0810161394360208301858051151582526020808201516fffffffffffffffffffffffffffffffff9081169184019190915260409182015116910152565b82511515608083015260208301516fffffffffffffffffffffffffffffffff90811660a084015260408401511660c0830152612d2e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036139da576139da61397a565b5060010190565b6000602082840312156139f357600080fd5b815161242e81613749565b818103818111156106d9576106d961397a565b600060208284031215613a2357600080fd5b815161242e81613136565b808201808211156106d9576106d961397a565b606081016106d982848051151582526020808201516fffffffffffffffffffffffffffffffff9081169184019190915260409182015116910152565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600082613ae2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b80820281158282048414176106d9576106d961397a565b60008251613b108184602087016132b8565b919091019291505056fea164736f6c6343000813000a00000000000000000000000040d16fc0246ad3160ccc09b8d0d3a2cd28ae6c2f000000000000000000000000411de17f12d1a34ecc7f45f49844626267c75e8100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001