0 txs
0 calls
constructor
constructor(address[] _assets, address[] _tellers, address _etherFiDataProvider, address _weth)
functions
BRIDGE_SIG
viewfunction BRIDGE_SIG() view returns (bytes32)
DEPOSIT_SIG
viewfunction DEPOSIT_SIG() view returns (bytes32)
ETH
viewfunction ETH() view returns (address)
ETHERFI_LIQUID_MODULE_ADMIN
viewfunction ETHERFI_LIQUID_MODULE_ADMIN() view returns (bytes32)
etherFiDataProvider
viewfunction etherFiDataProvider() view returns (address)
getBridgeFee
viewfunction getBridgeFee(address liquidAsset, uint32 destEid, address destRecipient, uint256 amount) view returns (uint256)
getLiquidAssetWithdrawConfig
viewfunction getLiquidAssetWithdrawConfig(address asset) view returns (tuple)
getNonce
viewfunction getNonce(address safe) view returns (uint256)
liquidAssetToTeller
viewfunction liquidAssetToTeller(address asset) view returns (address teller)
weth
viewfunction weth() view returns (address)
WITHDRAW_SIG
viewfunction WITHDRAW_SIG() view returns (bytes32)
addLiquidAssets
nonpayablefunction addLiquidAssets(address[] liquidAssets, address[] tellers)
bridge
payablefunction bridge(address safe, address liquidAsset, uint32 destEid, address destRecipient, uint256 amount, address[] signers, bytes[] signatures) payable
deposit
nonpayablefunction deposit(address safe, address assetToDeposit, address liquidAsset, uint256 amountToDeposit, uint256 minReturn, address signer, bytes signature)
removeLiquidAsset
nonpayablefunction removeLiquidAsset(address[] liquidAssets)
setLiquidAssetWithdrawConfig
nonpayablefunction setLiquidAssetWithdrawConfig(address asset, address boringQueue, uint16 discount, uint24 secondsToDeadline)
setupModule
nonpayablefunction setupModule(bytes data)
withdraw
nonpayablefunction withdraw(address safe, address liquidAsset, address assetOut, uint128 amountToWithdraw, uint128 minReturn, address signer, bytes signature)
events
LiquidAssetsAdded
event LiquidAssetsAdded(address[] liquidAssets, address[] tellers)
LiquidAssetsRemoved
event LiquidAssetsRemoved(address[] liquidAssets)
LiquidBridged
event LiquidBridged(address indexed safe, address indexed liquidAsset, address indexed destRecipient, uint32 destEid, uint256 amount, uint256 bridgeFee)
LiquidDeposit
event LiquidDeposit(address indexed safe, address indexed inputToken, address indexed outputToken, uint256 inputAmount, uint256 outputAmount)
LiquidWithdrawal
event LiquidWithdrawal(address indexed safe, address indexed liquidAsset, uint256 amountToWithdraw, uint256 amountOut)
LiquidWithdrawConfigSet
event LiquidWithdrawConfigSet(address indexed token, address boringQueue, uint16 discount, uint24 secondsToDeadline)
errors
ArrayLengthMismatch
error ArrayLengthMismatch()
AssetNotSupportedForDeposit
error AssetNotSupportedForDeposit()
ECDSAInvalidSignature
error ECDSAInvalidSignature()
ECDSAInvalidSignatureLength
error ECDSAInvalidSignatureLength(uint256 length)
ECDSAInvalidSignatureS
error ECDSAInvalidSignatureS(bytes32 s)
InsufficientBalanceOnSafe
error InsufficientBalanceOnSafe()
InsufficientNativeFee
error InsufficientNativeFee()
InsufficientReturnAmount
error InsufficientReturnAmount()
InvalidBoringQueue
error InvalidBoringQueue()
InvalidConfiguration
error InvalidConfiguration()
InvalidInput
error InvalidInput()
InvalidSignature
error InvalidSignature()
InvalidSignatures
error InvalidSignatures()
InvalidValue
error InvalidValue()
LiquidWithdrawConfigNotSet
error LiquidWithdrawConfigNotSet()
NativeTransferFailed
error NativeTransferFailed()
OnlyEtherFiSafe
error OnlyEtherFiSafe()
OnlySafeAdmin
error OnlySafeAdmin()
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
Unauthorized
error Unauthorized()
UnsupportedLiquidAsset
error UnsupportedLiquidAsset()
creation bytecode
0x60c060405234801561000f575f5ffd5b5060405161358e38038061358e83398101604081905261002e91610387565b816001600160a01b0381166100565760405163b4fa3fb360e01b815260040160405180910390fd5b6001600160a01b03166080528351835181146100855760405163512509d360e11b815260040160405180910390fd5b6001600160a01b03831615806100a257506001600160a01b038216155b156100c05760405163b4fa3fb360e01b815260040160405180910390fd5b6001600160a01b03821660a0525f5b8181101561029e575f6001600160a01b03168682815181106100f3576100f3610411565b60200260200101516001600160a01b0316148061013a57505f6001600160a01b031685828151811061012757610127610411565b60200260200101516001600160a01b0316145b156101585760405163b4fa3fb360e01b815260040160405180910390fd5b85818151811061016a5761016a610411565b60200260200101516001600160a01b031685828151811061018d5761018d610411565b60200260200101516001600160a01b031663fbfa77cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101d0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101f49190610425565b6001600160a01b03161461021b5760405163c52a9bd360e01b815260040160405180910390fd5b84818151811061022d5761022d610411565b60200260200101515f5f88848151811061024957610249610411565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508060010190506100cf565b505050505050610447565b634e487b7160e01b5f52604160045260245ffd5b6001600160a01b03811681146102d1575f5ffd5b50565b80516102df816102bd565b919050565b5f82601f8301126102f3575f5ffd5b81516001600160401b0381111561030c5761030c6102a9565b604051600582901b90603f8201601f191681016001600160401b038111828210171561033a5761033a6102a9565b604052918252602081850181019290810186841115610357575f5ffd5b6020860192505b8383101561037d5761036f836102d4565b81526020928301920161035e565b5095945050505050565b5f5f5f5f6080858703121561039a575f5ffd5b84516001600160401b038111156103af575f5ffd5b6103bb878288016102e4565b602087015190955090506001600160401b038111156103d8575f5ffd5b6103e4878288016102e4565b93505060408501516103f5816102bd565b6060860151909250610406816102bd565b939692955090935050565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215610435575f5ffd5b8151610440816102bd565b9392505050565b60805160a0516130e06104ae5f395f8181610240015281816113e7015281816114e601528181611594015261167101525f818161047e015281816104a20152818161076f015281816108b901528181610c4e01528181610e46015261100f01526130e05ff3fe608060405260043610610105575f3560e01c80638322fff211610092578063ab7d596f11610062578063ab7d596f14610336578063b1768065146103e8578063d41f17711461041b578063d54fc0b81461044e578063f9fba81b1461046d575f5ffd5b80638322fff2146102bf5780638ddec791146102e6578063909030d5146102f9578063a66e9d0a14610317575f5ffd5b80633e7cca8c116100d85780633e7cca8c1461020e5780633fc8cef31461022f57806363baa2601461026257806371e5dc81146102815780637c0691b3146102a0575f5ffd5b80630a44077a1461010957806323d451881461015a5780632d0335ab1461019b57806339f1bc2c146101ee575b5f5ffd5b348015610114575f5ffd5b5061013d61012336600461279c565b5f602081905290815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610165575f5ffd5b5061018d7f0683d1c283a672fc58eb7940a0dba83ea98b96966a9ca1b030dec2c60cea4d1e81565b604051908152602001610151565b3480156101a6575f5ffd5b5061018d6101b536600461279c565b6001600160a01b03165f9081527f9425b2e03e09da4c20ff7a465da264f7a02bf7079e1dbb47fce0436e1d206d00602052604090205490565b3480156101f9575f5ffd5b5061018d5f5160206130b45f395f51905f5281565b348015610219575f5ffd5b5061022d6102283660046127c6565b6104a0565b005b34801561023a575f5ffd5b5061013d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561026d575f5ffd5b5061022d61027c36600461286b565b61074e565b34801561028c575f5ffd5b5061022d61029b366004612947565b6108b7565b3480156102ab575f5ffd5b5061022d6102ba3660046129b3565b610c4c565b3480156102ca575f5ffd5b5061013d73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b61022d6102f4366004612a0a565b610e25565b348015610304575f5ffd5b5061022d610313366004612acb565b5050565b348015610322575f5ffd5b5061018d610331366004612afe565b610ef8565b348015610341575f5ffd5b506103b461035036600461279c565b60408051606080820183525f80835260208084018290529284018190526001600160a01b0394851681526001835283902083519182018452549384168152600160a01b840461ffff1691810191909152600160b01b90920462ffffff169082015290565b6040805182516001600160a01b0316815260208084015161ffff16908201529181015162ffffff1690820152606001610151565b3480156103f3575f5ffd5b5061018d7f855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c7781565b348015610426575f5ffd5b5061018d7f48c73f681176fc7b3f9693986fd7b14581e8d540519e27400e88b8713932be0181565b348015610459575f5ffd5b5061022d610468366004612b5e565b610fee565b348015610478575f5ffd5b5061013d7f000000000000000000000000000000000000000000000000000000000000000081565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166308c732596040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104fc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105209190612bd0565b604051632474521560e21b81525f5160206130b45f395f51905f5260048201523360248201526001600160a01b0391909116906391d1485490604401602060405180830381865afa158015610577573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061059b9190612bfa565b6105b7576040516282b42960e81b815260040160405180910390fd5b6001600160a01b03841615806105d457506001600160a01b038316155b156105f257604051632a9ffab760e21b815260040160405180910390fd5b826001600160a01b031663f3b977846040518163ffffffff1660e01b8152600401602060405180830381865afa15801561062e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106529190612bd0565b6001600160a01b0316846001600160a01b031614610683576040516335c66c9960e01b815260040160405180910390fd5b60408051606080820183526001600160a01b0386811680845261ffff878116602080870182815262ffffff8a8116898b018181528f89165f818152600187528d90209b518c5495519251909416600160b01b0262ffffff60b01b1992909816600160a01b026001600160b01b031990951693909916929092179290921716939093179096558651928352948201949094529384019290925290917fe1f7522b3dfa82c5c9eba9713429394aab79ec9657e096b1136a4e5ecfd62917910160405180910390a250505050565b60405163b7ca418b60e01b81526001600160a01b03808a16600483015289917f00000000000000000000000000000000000000000000000000000000000000009091169063b7ca418b90602401602060405180830381865afa1580156107b6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107da9190612bfa565b6107f7576040516334d0b49960e01b815260040160405180910390fd5b604051630935e01b60e21b81526001600160a01b0380861660048301528a9186918316906324d7806c90602401602060405180830381865afa15801561083f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108639190612bfa565b61088057604051632afafb8760e21b815260040160405180910390fd5b5f61088e8c8c8c8c8c611148565b905061089c8188888861121d565b6108a98c8c8c8c8c611283565b505050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166308c732596040518163ffffffff1660e01b8152600401602060405180830381865afa158015610913573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109379190612bd0565b604051632474521560e21b81525f5160206130b45f395f51905f5260048201523360248201526001600160a01b0391909116906391d1485490604401602060405180830381865afa15801561098e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109b29190612bfa565b6109ce576040516282b42960e81b815260040160405180910390fd5b828181146109ef5760405163512509d360e11b815260040160405180910390fd5b805f03610a0f5760405163b4fa3fb360e01b815260040160405180910390fd5b5f5b81811015610c07575f868683818110610a2c57610a2c612c13565b9050602002016020810190610a41919061279c565b6001600160a01b03161480610a8457505f848483818110610a6457610a64612c13565b9050602002016020810190610a79919061279c565b6001600160a01b0316145b15610aa25760405163b4fa3fb360e01b815260040160405180910390fd5b858582818110610ab457610ab4612c13565b9050602002016020810190610ac9919061279c565b6001600160a01b0316848483818110610ae457610ae4612c13565b9050602002016020810190610af9919061279c565b6001600160a01b031663fbfa77cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b34573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b589190612bd0565b6001600160a01b031614610b7f5760405163c52a9bd360e01b815260040160405180910390fd5b838382818110610b9157610b91612c13565b9050602002016020810190610ba6919061279c565b5f5f888885818110610bba57610bba612c13565b9050602002016020810190610bcf919061279c565b6001600160a01b03908116825260208201929092526040015f2080546001600160a01b03191692909116919091179055600101610a11565b507feb3d2ee89a264650a8a29fb1c1be99f36ba69e616861cd44feb7cc77dca9fd5385858585604051610c3d9493929190612c6f565b60405180910390a15050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166308c732596040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ca8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ccc9190612bd0565b604051632474521560e21b81525f5160206130b45f395f51905f5260048201523360248201526001600160a01b0391909116906391d1485490604401602060405180830381865afa158015610d23573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d479190612bfa565b610d63576040516282b42960e81b815260040160405180910390fd5b805f819003610d855760405163b4fa3fb360e01b815260040160405180910390fd5b5f5b81811015610de6575f5f858584818110610da357610da3612c13565b9050602002016020810190610db8919061279c565b6001600160a01b0316815260208101919091526040015f2080546001600160a01b0319169055600101610d87565b507f367cb6a9904bc3ce17bcf0727db772a2c5533312a93548f9714612928a9feeb48383604051610e18929190612c95565b60405180910390a1505050565b60405163b7ca418b60e01b81526001600160a01b03808b1660048301528a917f00000000000000000000000000000000000000000000000000000000000000009091169063b7ca418b90602401602060405180830381865afa158015610e8d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eb19190612bfa565b610ece576040516334d0b49960e01b815260040160405180910390fd5b610edf8a8a8a8a8a8a8a8a8a611ad4565b610eec8a8a8a8a8a611c32565b50505050505050505050565b6001600160a01b038085165f9081526020819052604081205490911680610f325760405163f66d0cc960e01b815260040160405180910390fd5b6040805163ffffffff871660208201525f91016040516020818303038152906040529050816001600160a01b031663d7424e33610f6e86611faa565b878473eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6040518563ffffffff1660e01b8152600401610fa49493929190612cde565b602060405180830381865afa158015610fbf573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fe39190612d29565b979650505050505050565b60405163b7ca418b60e01b81526001600160a01b03808a16600483015289917f00000000000000000000000000000000000000000000000000000000000000009091169063b7ca418b90602401602060405180830381865afa158015611056573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061107a9190612bfa565b611097576040516334d0b49960e01b815260040160405180910390fd5b604051630935e01b60e21b81526001600160a01b0380861660048301528a9186918316906324d7806c90602401602060405180830381865afa1580156110df573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111039190612bfa565b61112057604051632afafb8760e21b815260040160405180910390fd5b5f61112d8c8c8b8b611fe6565b905061113b8188888861121d565b6108a98c8c8c8c8c612056565b5f6112137f48c73f681176fc7b3f9693986fd7b14581e8d540519e27400e88b8713932be0146306111788a6124a0565b604080516001600160a01b03808d1660208301528b169181019190915260608101899052608081018890528b9060a0015b60408051601f19818403018152908290526111cb969594939291602001612d40565b604051602081830303815290604052805190602001207f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b9695505050505050565b6112608383838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508994939250506124e19050565b61127d57604051638baa579f60e01b815260040160405180910390fd5b50505050565b6001600160a01b038084165f9081526020819052604090205416806112bb5760405163f66d0cc960e01b815260040160405180910390fd5b8215806112c6575081155b156112e45760405163b4fa3fb360e01b815260040160405180910390fd5b5f73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed196001600160a01b0387160161131b57506001600160a01b03861631611386565b6040516370a0823160e01b81526001600160a01b0388811660048301528716906370a0823190602401602060405180830381865afa15801561135f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113839190612d29565b90505b838110156113a7576040516308b4578f60e01b815260040160405180910390fd5b6060808073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed196001600160a01b038a16016116f5576040516320ff722560e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301528616906341fee44a90602401606060405180830381865afa158015611434573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114589190612d96565b51611476576040516308148def60e11b815260040160405180910390fd5b6040805160038082526080820190925290602082016060803683370190505060408051600380825260808201909252919450816020015b60608152602001906001900390816114ad57505060408051600380825260808201909252919350602082016060803683370190505090507f0000000000000000000000000000000000000000000000000000000000000000835f8151811061151757611517612c13565b6001600160a01b0390921660209283029190910182015260408051600481526024810190915290810180516001600160e01b0316630d0e30db60e41b179052825183905f9061156857611568612c13565b602002602001018190525086815f8151811061158657611586612c13565b6020026020010181815250507f0000000000000000000000000000000000000000000000000000000000000000836001815181106115c6576115c6612c13565b6001600160a01b0392831660209182029290920181019190915260408051928b16602484015260448084018b90528151808503909101815260649093019052810180516001600160e01b031663095ea7b360e01b17905282518390600190811061163257611632612c13565b6020026020010181905250848360028151811061165157611651612c13565b6001600160a01b03928316602091820292909201810191909152604080517f00000000000000000000000000000000000000000000000000000000000000009093166024840152604483018a905260648084018a90528151808503909101815260849093019052810180516001600160e01b0316630efe6a8b60e01b1790528251839060029081106116e5576116e5612c13565b6020026020010181905250611902565b6040516320ff722560e11b81526001600160a01b038a811660048301528616906341fee44a90602401606060405180830381865afa158015611739573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061175d9190612d96565b5161177b576040516308148def60e11b815260040160405180910390fd5b60408051600280825260608201835290916020830190803683370190505060408051600280825260608201909252919450816020015b60608152602001906001900390816117b1575050604080516002808252606082018352929450919060208301908036833701905050905088835f815181106117fb576117fb612c13565b6001600160a01b0392831660209182029290920181019190915260408051928b16602484015260448084018b90528151808503909101815260649093019052810180516001600160e01b031663095ea7b360e01b179052825183905f9061186457611864612c13565b6020026020010181905250848360018151811061188357611883612c13565b6001600160a01b0392831660209182029290920181019190915260408051928c166024840152604483018a905260648084018a90528151808503909101815260849093019052810180516001600160e01b0316630efe6a8b60e01b1790528251839060019081106118f6576118f6612c13565b60200260200101819052505b6040516370a0823160e01b81526001600160a01b038b811660048301525f91908a16906370a0823190602401602060405180830381865afa158015611949573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061196d9190612d29565b604051632f378c5f60e21b81529091506001600160a01b038c169063bcde317c906119a090879086908890600401612e6a565b5f604051808303815f87803b1580156119b7575f5ffd5b505af11580156119c9573d5f5f3e3d5ffd5b50506040516370a0823160e01b81526001600160a01b038e811660048301525f93508492508c16906370a0823190602401602060405180830381865afa158015611a15573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a399190612d29565b611a439190612efc565b905087811015611a665760405163cea9e31d60e01b815260040160405180910390fd5b896001600160a01b03168b6001600160a01b03168d6001600160a01b03167f9f98725972b4a57ffe3d55d47002c227624652f061fa0498dc1aeb46e47e6cd68c85604051611abe929190918252602082015260400190565b60405180910390a4505050505050505050505050565b5f611b9f7f0683d1c283a672fc58eb7940a0dba83ea98b96966a9ca1b030dec2c60cea4d1e46308d6001600160a01b03166369615a4c6040518163ffffffff1660e01b81526004016020604051808303815f875af1158015611b38573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b5c9190612d29565b8e8e8e8e8e6040516020016111a994939291906001600160a01b03948516815263ffffffff93909316602084015292166040820152606081019190915260800190565b60405163a732422d60e01b81529091506001600160a01b038b169063a732422d90611bd69084908990899089908990600401612f43565b602060405180830381865afa158015611bf1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c159190612bfa565b610eec5760405163274cf40160e01b815260040160405180910390fd5b6001600160a01b038085165f908152602081905260409020541680611c6a5760405163f66d0cc960e01b815260040160405180910390fd5b6040805163ffffffff861660208201525f910160405160208183030381529060405290505f826001600160a01b031663d7424e33611ca786611faa565b878573eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6040518563ffffffff1660e01b8152600401611cdd9493929190612cde565b602060405180830381865afa158015611cf8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d1c9190612d29565b905080471015611d3f57604051639c92bdfb60e01b815260040160405180910390fd5b5f886001600160a01b0316826040515f6040518083038185875af1925050503d805f8114611d88576040519150601f19603f3d011682016040523d82523d5f602084013e611d8d565b606091505b5050905080611daf57604051633d2cec6f60e21b815260040160405180910390fd5b6040805160018082528183019092525f916020808301908036833750506040805160018082528183019092529293505f9291506020808301908036833750506040805160018082528183019092529293505f929150602082015b6060815260200190600190039081611e0957905050905086835f81518110611e3357611e33612c13565b60200260200101906001600160a01b031690816001600160a01b03168152505084825f81518110611e6657611e66612c13565b60209081029190910101526040516216485d60e61b90611ea6908a908c908a9073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee908b90602401612fff565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050815f81518110611eeb57611eeb612c13565b6020908102919091010152604051632f378c5f60e21b81526001600160a01b038d169063bcde317c90611f2690869086908690600401612e6a565b5f604051808303815f87803b158015611f3d575f5ffd5b505af1158015611f4f573d5f5f3e3d5ffd5b50506040805163ffffffff8e168152602081018c90529081018890526001600160a01b03808d1693508e811692508f16907f88f24573a59fe0911186110aa2a8ec41ace8edf2876686e7f2d5277e968911c990606001611abe565b5f6001600160601b03821115611fe2576040516306dfcc6560e41b815260606004820152602481018390526044015b60405180910390fd5b5090565b5f61204d7f855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c774630612016896124a0565b604080516001600160a01b038b1660208201526001600160801b03808b169282019290925290881660608201528a906080016111a9565b95945050505050565b6001600160a01b038481165f9081526001602052604090205490811690600160a01b900461ffff168161209c57604051631d08fca760e11b815260040160405180910390fd5b836001600160801b03165f036120c55760405163b4fa3fb360e01b815260040160405180910390fd5b6040516370a0823160e01b81526001600160a01b0388811660048301526001600160801b03861691908816906370a0823190602401602060405180830381865afa158015612115573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121399190612d29565b1015612158576040516308b4578f60e01b815260040160405180910390fd5b60405163734d18e160e11b81526001600160a01b0386811660048301526001600160801b038616602483015261ffff831660448301525f919084169063e69a31c290606401602060405180830381865afa1580156121b8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121dc9190613045565b9050836001600160801b0316816001600160801b031610156122115760405163cea9e31d60e01b815260040160405180910390fd5b6040805160028082526060820183525f926020830190803683375050604080516002808252606082019092529293505f929150602082015b60608152602001906001900390816122495750506040805160028082526060820183529293505f92909160208301908036833701905050905089835f8151811061229557612295612c13565b6001600160a01b03928316602091820292909201015260405190871660248201526001600160801b038916604482015263095ea7b360e01b90606401604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050825f8151811061231657612316612c13565b6020026020010181905250858360018151811061233557612335612c13565b6001600160a01b039283166020918202929092018101919091528b82165f9081526001808352604091829020548251948e1660248601526001600160801b038d16604486015261ffff8a16606486015262ffffff600160b01b909104166084808601919091528251808603909101815260a490940190915290820180516001600160e01b03166335d9da3b60e11b179052835184919081106123d9576123d9612c13565b6020908102919091010152604051632f378c5f60e21b81526001600160a01b038c169063bcde317c9061241490869085908790600401612e6a565b5f604051808303815f87803b15801561242b575f5ffd5b505af115801561243d573d5f5f3e3d5ffd5b5050604080516001600160801b03808d168252881660208201526001600160a01b03808f1694508f1692507fcb39f8bb1228be3c7badb0539f9fa2f31dcdb4a60a5e83d8c4bcf543341d8dd6910160405180910390a35050505050505050505050565b6001600160a01b03165f9081527f9425b2e03e09da4c20ff7a465da264f7a02bf7079e1dbb47fce0436e1d206d006020526040902080546001810190915590565b5f823b1561256a57604051630b135d3f60e11b808252906001600160a01b03851690631626ba7e906125199088908790600401613060565b602060405180830381865afa158015612534573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125589190613078565b6001600160e01b03191614905061258b565b826001600160a01b031661257e8584612592565b6001600160a01b03161490505b9392505050565b5f5f5f5f6125a086866125bc565b9250925092506125b08282612605565b50909150505b92915050565b5f5f5f83516041036125f3576020840151604085015160608601515f1a6125e5888285856126bd565b9550955095505050506125fe565b505081515f91506002905b9250925092565b5f8260038111156126185761261861309f565b03612621575050565b60018260038111156126355761263561309f565b036126535760405163f645eedf60e01b815260040160405180910390fd5b60028260038111156126675761266761309f565b036126885760405163fce698f760e01b815260048101829052602401611fd9565b600382600381111561269c5761269c61309f565b03610313576040516335e2f38360e21b815260048101829052602401611fd9565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156126f657505f9150600390508261277b565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015612747573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b03811661277257505f92506001915082905061277b565b92505f91508190505b9450945094915050565b6001600160a01b0381168114612799575f5ffd5b50565b5f602082840312156127ac575f5ffd5b813561258b81612785565b61ffff81168114612799575f5ffd5b5f5f5f5f608085870312156127d9575f5ffd5b84356127e481612785565b935060208501356127f481612785565b92506040850135612804816127b7565b9150606085013562ffffff8116811461281b575f5ffd5b939692955090935050565b5f5f83601f840112612836575f5ffd5b50813567ffffffffffffffff81111561284d575f5ffd5b602083019150836020828501011115612864575f5ffd5b9250929050565b5f5f5f5f5f5f5f5f60e0898b031215612882575f5ffd5b883561288d81612785565b9750602089013561289d81612785565b965060408901356128ad81612785565b9550606089013594506080890135935060a08901356128cb81612785565b925060c089013567ffffffffffffffff8111156128e6575f5ffd5b6128f28b828c01612826565b999c989b5096995094979396929594505050565b5f5f83601f840112612916575f5ffd5b50813567ffffffffffffffff81111561292d575f5ffd5b6020830191508360208260051b8501011115612864575f5ffd5b5f5f5f5f6040858703121561295a575f5ffd5b843567ffffffffffffffff811115612970575f5ffd5b61297c87828801612906565b909550935050602085013567ffffffffffffffff81111561299b575f5ffd5b6129a787828801612906565b95989497509550505050565b5f5f602083850312156129c4575f5ffd5b823567ffffffffffffffff8111156129da575f5ffd5b6129e685828601612906565b90969095509350505050565b803563ffffffff81168114612a05575f5ffd5b919050565b5f5f5f5f5f5f5f5f5f60e08a8c031215612a22575f5ffd5b8935612a2d81612785565b985060208a0135612a3d81612785565b9750612a4b60408b016129f2565b965060608a0135612a5b81612785565b955060808a0135945060a08a013567ffffffffffffffff811115612a7d575f5ffd5b612a898c828d01612906565b90955093505060c08a013567ffffffffffffffff811115612aa8575f5ffd5b612ab48c828d01612906565b915080935050809150509295985092959850929598565b5f5f60208385031215612adc575f5ffd5b823567ffffffffffffffff811115612af2575f5ffd5b6129e685828601612826565b5f5f5f5f60808587031215612b11575f5ffd5b8435612b1c81612785565b9350612b2a602086016129f2565b92506040850135612b3a81612785565b9396929550929360600135925050565b6001600160801b0381168114612799575f5ffd5b5f5f5f5f5f5f5f5f60e0898b031215612b75575f5ffd5b8835612b8081612785565b97506020890135612b9081612785565b96506040890135612ba081612785565b95506060890135612bb081612b4a565b94506080890135612bc081612b4a565b935060a08901356128cb81612785565b5f60208284031215612be0575f5ffd5b815161258b81612785565b80518015158114612a05575f5ffd5b5f60208284031215612c0a575f5ffd5b61258b82612beb565b634e487b7160e01b5f52603260045260245ffd5b8183526020830192505f815f5b84811015612c65578135612c4781612785565b6001600160a01b031686526020958601959190910190600101612c34565b5093949350505050565b604081525f612c82604083018688612c27565b8281036020840152610fe3818587612c27565b602081525f612ca8602083018486612c27565b949350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b6001600160601b03851681526001600160a01b03841660208201526080604082018190525f90612d1090830185612cb0565b905060018060a01b038316606083015295945050505050565b5f60208284031215612d39575f5ffd5b5051919050565b8681528560208201526001600160601b03198560601b1660408201528360548201526001600160601b03198360601b1660748201525f82518060208501608885015e5f9201608801918252509695505050505050565b5f6060828403128015612da7575f5ffd5b506040516060810167ffffffffffffffff81118282101715612dd757634e487b7160e01b5f52604160045260245ffd5b604052612de383612beb565b8152612df160208401612beb565b60208201526040830151612e04816127b7565b60408201529392505050565b5f82825180855260208501945060208160051b830101602085015f5b83811015612e5e57601f19858403018852612e48838351612cb0565b6020988901989093509190910190600101612e2c565b50909695505050505050565b606080825284519082018190525f9060208601906080840190835b81811015612eac5783516001600160a01b0316835260209384019390920191600101612e85565b5050838103602080860191909152865180835291810192508601905f5b81811015612ee7578251845260209384019390920191600101612ec9565b50505082810360408401526112138185612e10565b818103818111156125b657634e487b7160e01b5f52601160045260245ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b858152606060208201525f612f5c606083018688612c27565b8281036040840152838152602080820190600586901b830101865f36829003601e19015b88821015612fee57858403601f190185528235818112612f9e575f5ffd5b8a0160208101903567ffffffffffffffff811115612fba575f5ffd5b803603821315612fc8575f5ffd5b612fd3868284612f1b565b95505050602083019250602085019450600182019150612f80565b50919b9a5050505050505050505050565b8581526001600160a01b038516602082015260a0604082018190525f9061302890830186612cb0565b6001600160a01b0394909416606083015250608001529392505050565b5f60208284031215613055575f5ffd5b815161258b81612b4a565b828152604060208201525f612ca86040830184612cb0565b5f60208284031215613088575f5ffd5b81516001600160e01b03198116811461258b575f5ffd5b634e487b7160e01b5f52602160045260245ffdfe190e6e5b9101a41c1085c403f9d38fa1e0e3120692e46d71ff2bdc157986e195a164736f6c634300081c000a000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001400000000000000000000000004a9c44c97bbf6079db37c4769aebe425bbcdd09a00000000000000000000000053000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000005000000000000000000000000f0bb20865277abd641a307ece5ee04e79073416c0000000000000000000000005f46d540b6ed704c3c8789105f30e075aa90072600000000000000000000000008c6f91e2b681faf5e17227f2a44c307b3c1364c000000000000000000000000939778d83b46b456224a33fb59630b11dec56663000000000000000000000000657e8c867d8b37dcc18fa4caead9c45eb088c64200000000000000000000000000000000000000000000000000000000000000050000000000000000000000009aa79c84b79816ab920bbce20f8f74557b5147340000000000000000000000008ea0b382d054dbebeb1d0ae47ee4ac433c7303530000000000000000000000004de413a26fc24c3fc27cc983be70aa9c5c299387000000000000000000000000cc9a7620d0358a521a068b444846e3d5debea8fa0000000000000000000000006ee3aaccf9f2321e49063c4f8da775ddbd407268