0 txs
4 calls
constructor
constructor()
functions
approxDstExecutionGas
viewfunction approxDstExecutionGas() view returns (uint256)
deployedWTime
viewfunction deployedWTime() view returns (uint128)
factorMsgSendEndpoint
viewfunction factorMsgSendEndpoint() view returns (address)
fctrPerSec
viewfunction fctrPerSec() view returns (uint128)
getActiveChainVaults
viewfunction getActiveChainVaults(uint64 chainId) view returns (address[])
getAllActiveVaults
viewfunction getAllActiveVaults() view returns (address[])
getAllDestinationContracts
viewfunction getAllDestinationContracts() view returns (uint256[] chainIds, address[] addrs)
getBroadcastResultFee
viewfunction getBroadcastResultFee(uint64 chainId) view returns (uint256)
getUserData
viewfunction getUserData(address user, address[] vaults) view returns (uint64 totalVotedWeight, tuple[] voteForVaults)
getUserVaultVote
viewfunction getUserVaultVote(address user, address vault) view returns (tuple)
getVaultData
viewfunction getVaultData(address vault, uint128[] wTimes) view returns (uint64 chainId, uint128 lastSlopeChangeAppliedAt, tuple totalVote, uint128[] slopeChanges)
getVaultTotalVoteAt
viewfunction getVaultTotalVoteAt(address vault, uint128 wTime) view returns (uint128)
getWeekData
viewfunction getWeekData(uint128 wTime, address[] vaults) view returns (bool isEpochFinalized, uint128 totalVotes, uint128[] vaultVotes)
isVaultActive
viewfunction isVaultActive(address vault) view returns (bool)
MAX_LOCK_TIME
viewfunction MAX_LOCK_TIME() view returns (uint128)
owner
viewfunction owner() view returns (address)
veFctr
viewfunction veFctr() view returns (address)
WEEK
viewfunction WEEK() view returns (uint128)
addDestinationContract
payablefunction addDestinationContract(address _address, uint256 _chainId) payable
addFactory
nonpayablefunction addFactory(address _factory)
addVault
nonpayablefunction addVault(uint64 chainId, address vault)
addVaultByFactory
nonpayablefunction addVaultByFactory(uint64 chainId, address _vault)
applyVaultSlopeChanges
nonpayablefunction applyVaultSlopeChanges(address vault)
broadcastResults
payablefunction broadcastResults(uint64 chainId) payable
finalizeEpoch
nonpayablefunction finalizeEpoch()
forceBroadcastResults
payablefunction forceBroadcastResults(uint64 chainId, uint128 wTime, uint128 forcedFctrPerSec) payable
initialize
nonpayablefunction initialize(address _veFctr, address _fctrMsgSendEndpoint, uint256 initialApproxDestinationGas)
removeFactory
nonpayablefunction removeFactory(address _factory)
removeVault
nonpayablefunction removeVault(address vault)
renounceOwnership
nonpayablefunction renounceOwnership()
setApproxDstExecutionGas
nonpayablefunction setApproxDstExecutionGas(uint256 gas)
setFctrPerSec
nonpayablefunction setFctrPerSec(uint128 newFctrPerSec)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
vote
nonpayablefunction vote(address[] vaults, uint64[] weights)
events
AddFactory
event AddFactory(address factory)
AddVault
event AddVault(uint64 indexed chainId, address indexed vault)
BroadcastResults
event BroadcastResults(uint64 indexed chainId, uint128 indexed wTime, uint128 totalFctrPerSec)
Initialized
event Initialized(uint64 version)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
RemoveFactory
event RemoveFactory(address factory)
RemoveVault
event RemoveVault(uint64 indexed chainId, address indexed vault)
SetFctrPerSec
event SetFctrPerSec(uint256 newFctrPerSec)
VaultVoteChange
event VaultVoteChange(address indexed vault, (uint128 bias, uint128 slope) vote)
Vote
event Vote(address indexed user, address indexed vault, uint64 weight, (uint128 bias, uint128 slope) vote)
errors
ArrayLengthMismatch
error ArrayLengthMismatch()
ArrayOutOfBounds
error ArrayOutOfBounds()
EnumerableMapNonexistentKey
error EnumerableMapNonexistentKey(bytes32 key)
FSEpochNotFinalized
error FSEpochNotFinalized(uint256 wTime)
FSExceededMaxWeight
error FSExceededMaxWeight(uint256 totalWeight, uint256 maxWeight)
FSInactiveVault
error FSInactiveVault(address vault)
FSInvalidWTime
error FSInvalidWTime(uint256 wTime)
FSNotSetFctrPerSec
error FSNotSetFctrPerSec()
FSVaultAlreadyActive
error FSVaultAlreadyActive(address vault)
FSZeroVeFctr
error FSZeroVeFctr(address user)
InsufficientFeeToSendMsg
error InsufficientFeeToSendMsg(uint256 currentFee, uint256 requiredFee)
InvalidInitialization
error InvalidInitialization()
NotFactory
error NotFactory()
NotInitializing
error NotInitializing()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
VEOverflowSlope
error VEOverflowSlope(uint256 slope)
VEZeroSlope
error VEZeroSlope(uint128 bias, uint128 slope)
creation bytecode
0x608060405234801562000010575f80fd5b506200001b62000021565b620000d5565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d25780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b61379e80620000e35f395ff3fe6080604052600436106101f1575f3560e01c80638d66c28411610108578063c291230d1161009d578063d45f5e211161006d578063d45f5e21146105d3578063df42fff8146105f2578063f2fde38b1461062e578063f4359ce51461064d578063fa78668f14610662575f80fd5b8063c291230d14610563578063c98029bc14610576578063cb7a809514610595578063ceb68c23146105b4575f80fd5b8063934935fc116100d8578063934935fc146104d45780639efc757514610503578063adc44d0114610523578063b292bf951461054f575f80fd5b80638d66c2841461041e5780638da5cb5b1461044c5780638f45ff78146104885780639319bed1146104b5575f80fd5b80632cd2f7b1116101895780634b37c73f116101595780634b37c73f14610399578063698766ee146103b8578063715018a6146103d75780637f66c53e146103eb57806382ae9ef71461040a575f80fd5b80632cd2f7b1146103005780633e39b6501461032c5780634a07ca4e1461034e5780634b06a2f61461037a575f80fd5b806321049028116101c457806321049028146102825780632477bfbe1461029557806324dec01e146102c257806329ce1ec5146102e1575f80fd5b806305298a7a146101f55780630c5aed571461021f5780631794bb3c1461024e5780631c9bdb491461026f575b5f80fd5b348015610200575f80fd5b50610209610679565b6040516102169190612f26565b60405180910390f35b34801561022a575f80fd5b5061023e610239366004612f53565b610693565b6040519015158152602001610216565b348015610259575f80fd5b5061026d610268366004612f6c565b6106a3565b005b61026d61027d366004612fcf565b610813565b61026d610290366004613015565b6108a1565b3480156102a0575f80fd5b506102b46102af36600461303d565b6108c1565b604051908152602001610216565b3480156102cd575f80fd5b506102096102dc36600461303d565b6109df565b3480156102ec575f80fd5b5061026d6102fb366004612f53565b610a0c565b34801561030b575f80fd5b50610314610a7d565b6040516001600160a01b039091168152602001610216565b348015610337575f80fd5b50610340610a95565b604051610216929190613084565b348015610359575f80fd5b5061036d6103683660046130a8565b610bc4565b604051610216919061310e565b348015610385575f80fd5b5061026d610394366004612f53565b610c48565b3480156103a4575f80fd5b5061026d6103b3366004612f53565b610db6565b3480156103c3575f80fd5b5061026d6103d236600461315c565b610e1c565b3480156103e2575f80fd5b5061026d6110bd565b3480156103f6575f80fd5b5061026d6104053660046131c2565b6110d0565b348015610415575f80fd5b5061026d61118c565b348015610429575f80fd5b5061043d6104383660046131dc565b6111e0565b60405161021693929190613263565b348015610457575f80fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b0316610314565b348015610493575f80fd5b506104a76104a236600461328c565b61133e565b6040516102169291906132a7565b3480156104c0575f80fd5b5061026d6104cf3660046131c2565b61148f565b3480156104df575f80fd5b506104f36104ee36600461328c565b611515565b6040516102169493929190613305565b34801561050e575f80fd5b505f80516020613729833981519152546102b4565b34801561052e575f80fd5b50610537611707565b6040516001600160801b039091168152602001610216565b34801561055a575f80fd5b50610537611729565b61026d61057136600461303d565b611744565b348015610581575f80fd5b50610537610590366004613362565b611887565b3480156105a0575f80fd5b5061026d6105af366004613397565b6118ce565b3480156105bf575f80fd5b5061026d6105ce366004612f53565b611933565b3480156105de575f80fd5b5061026d6105ed3660046133b2565b6119f0565b3480156105fd575f80fd5b507fcfd85fa27c9444f5482bcadcd5a08c33291e70aa7a38635bf9e607832835c03e546001600160a01b0316610314565b348015610639575f80fd5b5061026d610648366004612f53565b611a09565b348015610658575f80fd5b5061053761384081565b34801561066d575f80fd5b506105376303bfc40081565b606061068e610686611a43565b600601611a67565b905090565b5f61069d82611a7a565b92915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156106e75750825b90505f826001600160401b031660011480156107025750303b155b905081158015610710575080155b1561072e5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561075857845460ff60401b1916600160401b1785555b61076133611a90565b61076b8787611aa1565b87610774611a43565b80546001600160a01b0319166001600160a01b039290921691909117905561079a611afa565b6107a2611a43565b60010180546001600160801b0319166001600160801b0392909216919091179055831561080957845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b61081b611b04565b610826838383611b5f565b471561089c576040515f90339047908381818185875af1925050503d805f811461086b576040519150601f19603f3d011682016040523d82523d5f602084013e610870565b606091505b505090508061089a5760405162461bcd60e51b8152600401610891906133c9565b60405180910390fd5b505b505050565b6108a9611b04565b61089c5f805160206137498339815191528284611e26565b5f46826001600160401b0316036108d957505f919050565b5f6109056108e5611a43565b6001600160401b0385165f90815260029190910160205260409020611e43565b9050805f0361091657505f92915050565b5f816001600160401b0381111561092f5761092f613426565b604051908082528060200260200182016040528015610958578160200160208202803683370190505b5090505f826001600160401b0381111561097457610974613426565b60405190808252806020026020018201604052801561099d578160200160208202803683370190505b5090506109d6856001600160401b03165f84846040516020016109c29392919061343a565b604051602081830303815290604052611e4c565b95945050505050565b606061069d6109ec611a43565b6001600160401b0384165f90815260029190910160205260409020611a67565b610a14611b04565b5f610a1d611a43565b6001600160a01b0383165f818152600883016020908152604091829020805460ff1916600117905590519182529192507f5a8fb443d09cf1426e80f80dd509757d71d4687674ab4adad906c5e2b6e1e62c91015b60405180910390a15050565b5f610a86611a43565b546001600160a01b0316919050565b6060805f805160206137298339815191525f610abd5f80516020613749833981519152611f0b565b9050806001600160401b03811115610ad757610ad7613426565b604051908082528060200260200182016040528015610b00578160200160208202803683370190505b509350806001600160401b03811115610b1b57610b1b613426565b604051908082528060200260200182016040528015610b44578160200160208202803683370190505b5092505f5b81811015610bbd57610b5e6002840182611f15565b868381518110610b7057610b7061346d565b60200260200101868481518110610b8957610b8961346d565b60200260200101826001600160a01b03166001600160a01b031681525082815250505080610bb690613495565b9050610b49565b5050509091565b610bcc612eac565b610bd4611a43565b6001600160a01b039384165f9081526005919091016020908152604080832094909516825260019384018152908490208451808601865281546001600160401b0316815285518087019096529301546001600160801b038082168652600160801b9091041684820152820192909252919050565b610c5181611a7a565b610c79576040516386c2854160e01b81526001600160a01b0382166004820152602401610891565b5f610c82611a43565b6001600160a01b0383165f908152600382016020526040812054919250600160401b9091046001600160801b031690610cb9611afa565b9050806001600160801b0316826001600160801b031610610cda5750505050565b6001600160a01b0384165f9081526003840160209081526040918290208251808401909352600101546001600160801b038082168452600160801b90910416908201525b816001600160801b0316836001600160801b03161015610da457610d44613840846134ad565b6001600160a01b0386165f90815260038601602090815260408083206001600160801b038086168552600290910190925290912054919450610d899183911685611f32565b9050610d9f8584610d9a8482611f8b565b611fdb565b610d1e565b610daf858285612085565b5050505050565b610dbe611b04565b5f610dc7611a43565b6001600160a01b0383165f818152600883016020908152604091829020805460ff1916905590519182529192507f3d4e7057f9f992c8d86344002642adf5d5cd33816b302134e7ef5e0f045a6e789101610a71565b335f610e26611a43565b9050848314610e485760405163512509d360e11b815260040160405180910390fd5b80546040516370a0823160e01b81526001600160a01b038481166004830152909116906370a0823190602401602060405180830381865afa158015610e8f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eb391906134cd565b6001600160801b03165f03610ee657604051633baeda9d60e01b81526001600160a01b0383166004820152602401610891565b5f610ef08361212e565b90505f5b8681101561105f57610f2b888883818110610f1157610f1161346d565b9050602002016020810190610f269190612f53565b611a7a565b15610f5a57610f5a888883818110610f4557610f4561346d565b90506020020160208101906103949190612f53565b5f610fb3858a8a85818110610f7157610f7161346d565b9050602002016020810190610f869190612f53565b858a8a87818110610f9957610f9961346d565b9050602002016020810190610fae919061303d565b6121ca565b9050888883818110610fc757610fc761346d565b9050602002016020810190610fdc9190612f53565b6001600160a01b0316856001600160a01b03167fc71e393f1527f71ce01b78ea87c9bd4fca84f1482359ce7ac9b73f358c61b1e18989868181106110225761102261346d565b9050602002016020810190611037919061303d565b846040516110469291906134e8565b60405180910390a35061105881613495565b9050610ef4565b506001600160a01b0383165f9081526005830160205260409020546001600160401b0316670de0b6b3a7640000811115610809576040516371932b8b60e11b815260048101829052670de0b6b3a76400006024820152604401610891565b6110c5611b04565b6110ce5f6125bd565b565b5f6110d9611a43565b335f90815260088201602052604090205490915060ff1661110d57604051631966391b60e11b815260040160405180910390fd5b61111682611a7a565b1561113f576040516358a33fa160e11b81526001600160a01b0383166004820152602401610891565b611149838361262d565b6040516001600160a01b038316906001600160401b038516907f1b8616e576455c2ad2ef0e238b4dee43e6cf788f75312282b76436860ebb5418905f90a3505050565b5f6111a0611198611a43565b600601611e43565b90505f5b818110156111d4576111c4610394826111bb611a43565b60060190612703565b6111cd81613495565b90506111a4565b506111dd61270e565b50565b5f8060606111f6866001600160801b031661279b565b61121e57604051633309505360e01b81526001600160801b0387166004820152602401610891565b5f611227611a43565b6001600160801b038089165f9081526004929092016020526040909120805460ff81169650610100900490911693509050846001600160401b0381111561127057611270613426565b604051908082528060200260200182016040528015611299578160200160208202803683370190505b5091505f5b8581101561133357816001015f8888848181106112bd576112bd61346d565b90506020020160208101906112d29190612f53565b6001600160a01b0316815260208101919091526040015f205483516001600160801b039091169084908390811061130b5761130b61346d565b6001600160801b039092166020928302919091019091015261132c81613495565b905061129e565b505093509350939050565b5f60605f61134a611a43565b6001600160a01b0387165f9081526005919091016020526040902080546001600160401b039081169450909150849081111561138857611388613426565b6040519080825280602002602001820160405280156113c157816020015b6113ae612eac565b8152602001906001900390816113a65790505b5091505f5b8481101561148557816001015f8787848181106113e5576113e561346d565b90506020020160208101906113fa9190612f53565b6001600160a01b0316815260208082019290925260409081015f208151808301835281546001600160401b0316815282518084019093526001909101546001600160801b038082168452600160801b90910416828401529182015283518490839081106114695761146961346d565b60200260200101819052508061147e90613495565b90506113c6565b5050935093915050565b611497611b04565b6114a081611a7a565b156114c9576040516358a33fa160e11b81526001600160a01b0382166004820152602401610891565b6114d3828261262d565b6040516001600160a01b038216906001600160401b038416907f1b8616e576455c2ad2ef0e238b4dee43e6cf788f75312282b76436860ebb5418905f90a35050565b5f80611530604080518082019091525f808252602082015290565b60605f61153b611a43565b6001600160a01b0389165f90815260039190910160209081526040918290208054835180850190945260018201546001600160801b038082168652600160801b9091048116938501939093526001600160401b038082169950600160401b909104909216965091945090915086908111156115b8576115b8613426565b6040519080825280602002602001820160405280156115e1578160200160208202803683370190505b5091505f5b868110156116fc576116268888838181106116035761160361346d565b90506020020160208101906116189190613397565b6001600160801b031661279b565b6116765787878281811061163c5761163c61346d565b90506020020160208101906116519190613397565b604051633309505360e01b81526001600160801b039091166004820152602401610891565b816002015f89898481811061168d5761168d61346d565b90506020020160208101906116a29190613397565b6001600160801b03908116825260208201929092526040015f205484519116908490839081106116d4576116d461346d565b6001600160801b03909216602092830291909101909101526116f581613495565b90506115e6565b505093509350935093565b5f611710611a43565b60010154600160801b90046001600160801b0316919050565b5f611732611a43565b600101546001600160801b0316919050565b5f61174d611afa565b90505f611758611a43565b60018101549091506001600160801b039081169083160361177a575050611818565b6001600160801b0382165f90815260048201602052604090205460ff166117bf576040516308f2598b60e01b81526001600160801b0383166004820152602401610891565b6001810154600160801b90046001600160801b03165f036117f3576040516312054b9960e01b815260040160405180910390fd5b61181583838360010160109054906101000a90046001600160801b0316611b5f565b50505b47156111dd576040515f90339047908381818185875af1925050503d805f811461185d576040519150601f19603f3d011682016040523d82523d5f602084013e611862565b606091505b50509050806118835760405162461bcd60e51b8152600401610891906133c9565b5050565b5f611890611a43565b6001600160801b038084165f908152600492909201602090815260408084206001600160a01b03881685526001019091529091205416905092915050565b6118d6611b04565b806118df611a43565b60010180546001600160801b03928316600160801b0290831617905560405190821681527f520d0568cbe8ae83bb2a899952c5c2a28dbc6085b806e520862ed29a05cef8989060200160405180910390a150565b61193b611b04565b61194481611a7a565b61196c576040516386c2854160e01b81526001600160a01b0382166004820152602401610891565b5f611975611a43565b6001600160a01b0383165f90815260039190910160205260409020546001600160401b031690506119a582610c48565b6119ae826127af565b6040516001600160a01b038316906001600160401b038316907ffe2c9cdff8e05bcb98a4bc73fdac81de1c6c8e4bb8e5dd21cc0225f54c486068905f90a35050565b6119f8611b04565b5f8051602061372983398151915255565b611a11611b04565b6001600160a01b038116611a3a57604051631e4fbdf760e01b81525f6004820152602401610891565b6111dd816125bd565b7f8421a7342040879121429b57297a35943c4dfacb74ff9bebacc272a3cec8569490565b60605f611a738361284e565b9392505050565b5f61069d82611a87611a43565b600601906128a7565b611a986128c8565b6111dd81612911565b611aa96128c8565b7fcfd85fa27c9444f5482bcadcd5a08c33291e70aa7a38635bf9e607832835c03e80546001600160a01b0319166001600160a01b0393909316929092179091555f8051602061372983398151915255565b5f61068e42612919565b33611b367f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146110ce5760405163118cdaa760e01b8152336004820152602401610891565b5f611b68611a43565b6001600160801b038085165f9081526004830160205260408120549293506101009092041690819003611b9c575050505050565b6001600160401b0385165f9081526002830160205260408120611bbe90611e43565b9050805f03611bcf57505050505050565b6001600160401b0386165f9081526002840160205260408120611bf190611a67565b90505f826001600160401b03811115611c0c57611c0c613426565b604051908082528060200260200182016040528015611c35578160200160208202803683370190505b5090505f5b83811015611d03575f866004015f8a6001600160801b03166001600160801b031681526020019081526020015f206001015f858481518110611c7e57611c7e61346d565b6020908102919091018101516001600160a01b031682528101919091526040015f20546001600160801b039081169150869061384090611cc19084908c1661351b565b611ccb919061351b565b611cd59190613546565b838381518110611ce757611ce761346d565b602090810291909101015250611cfc81613495565b9050611c3a565b5046886001600160401b031603611d9b575f611d355f805160206137498339815191526001600160401b038b16612931565b60405163072cbf8760e41b81529091506001600160a01b038216906372cbf87090611d68908b908790879060040161343a565b5f604051808303815f87803b158015611d7f575f80fd5b505af1158015611d91573d5f803e3d5ffd5b5050505050611dd1565b611dd1886001600160401b0316888484604051602001611dbd9392919061343a565b60405160208183030381529060405261293c565b6040516001600160801b0387811682528816906001600160401b038a16907fc78a580f215ba474e75ecbd7636c375e8d2cd25edb0f2467f99b2d0752e104ba9060200160405180910390a35050505050505050565b5f611e3b84846001600160a01b038516612a95565b949350505050565b5f61069d825490565b7fcfd85fa27c9444f5482bcadcd5a08c33291e70aa7a38635bf9e607832835c03e545f905f80516020613729833981519152906001600160a01b03166384fe1721611ea45f8051602061374983398151915287612931565b83546040516001600160e01b031960e085901b168152611ecc92918991899190600401613559565b602060405180830381865afa158015611ee7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e3b91906135c2565b5f61069d82612ab1565b5f808080611f238686612abb565b909450925050505b9250929050565b604080518082019091525f8082526020820152828460200151611f5591906135d9565b6001600160801b03166020820152611f6d82846135f9565b8451611f7991906135d9565b6001600160801b031681529392505050565b5f825f01516001600160801b0316828460200151611fa991906135f9565b6001600160801b03161115611fbf57505f61069d565b818360200151611fcf91906135f9565b8351611a7391906135d9565b5f611fe4611a43565b6001600160801b038085165f908152600483016020526040902080549293508492909160019161201b9185916101009004166134ad565b82546101009290920a6001600160801b038181021990931691831602179091559384165f908152600492909201602090815260408084206001600160a01b039790971684526001969096019052509290922080546001600160801b03191692909116919091179055565b5f61208e611a43565b6001600160a01b0385165f8181526003830160209081526040918290208751918801516001600160801b03908116600160801b029281169290921760018201558054918716600160401b02600160401b600160c01b031990921691909117905551919250907ffae5bdf5dc8bd44549adf5ddb8984db44d99296520b17a4e9178c4fb5a45a08e90612120908690613624565b60405180910390a250505050565b604080518082019091525f8082526020820152612149611a43565b546040516332dad3cf60e21b81526001600160a01b0384811660048301529091169063cb6b4f3c906024016040805180830381865afa15801561218e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121b29190613648565b6001600160801b039081166020840152168152919050565b604080518082019091525f80825260208201525f6121e6611a43565b6001600160a01b038088165f9081526005830160209081526040808320938a16835260038501825280832060018086018452938290208251808401909352909301546001600160801b03808216808452600160801b909204169282019290925293945091929091156123ae5761225b88611a7a565b801561226b575061226b81612ae4565b15612327576040805180820190915260018301546001600160801b038082168352600160801b9091041660208201526122a49082612b18565b80516020918201516001600160801b03908116600160801b029116176001840155810151600283015f6122d684612b6c565b6001600160801b03908116825260208201929092526040015f90812080549092612302918591166135d9565b92506101000a8154816001600160801b0302191690836001600160801b031602179055505b6001600160a01b0388165f90815260018401602052604081205484546001600160401b03918216928692909161235f91859116613675565b82546001600160401b039182166101009390930a9283029190920219909116179055506001600160a01b0388165f908152600184810160205260408220805467ffffffffffffffff1916815501555b6001600160401b03861615612558576123c688611a7a565b6123ee576040516386c2854160e01b81526001600160a01b0389166004820152602401610891565b612401876001600160401b038816612bc5565b6040805180820190915260018401546001600160801b038082168352600160801b9091041660208201529095506124389086612c71565b80516020918201516001600160801b03908116600160801b029116176001840155850151600283015f61246a88612b6c565b6001600160801b03908116825260208201929092526040015f90812080549092612496918591166134ad565b82546001600160801b039182166101009390930a9283029282021916919091179091556040805180820182526001600160401b03808b16825260208083018b81526001600160a01b038f165f90815260018b810184529581209451855490851667ffffffffffffffff19909116178555905180519201518616600160801b0291909516179190920155855489935086929161253391859116613695565b92506101000a8154816001600160401b0302191690836001600160401b031602179055505b876001600160a01b03167ffae5bdf5dc8bd44549adf5ddb8984db44d99296520b17a4e9178c4fb5a45a08e836001016040516125a991546001600160801b038116825260801c602082015260400190565b60405180910390a250505050949350505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f612636611a43565b6001600160401b0384165f908152600282016020526040902090915061265c9083612cb1565b612668576126686136b5565b6126756006820183612cb1565b612681576126816136b5565b6001600160a01b0382165f9081526003820160205260409020805467ffffffffffffffff19166001600160401b0385161790556126bc611afa565b6001600160a01b039092165f90815260039091016020526040902080546001600160801b0392909216600160401b02600160401b600160c01b031990921691909117905550565b5f611a738383612cc5565b5f612717611a43565b90505f612722611afa565b90505b60018201546001600160801b0390811690821611801561275f57506001600160801b0381165f90815260048301602052604090205460ff16155b15611883576001600160801b0381165f9081526004830160205260409020805460ff19166001179055612794613840826135d9565b9050612725565b5f6127a8613840836136c9565b1592915050565b5f6127b8611a43565b6001600160a01b0383165f9081526003820160209081526040808320546001600160401b031680845260028501909252909120919250906127f99084612ceb565b612805576128056136b5565b6128126006830184612ceb565b61281e5761281e6136b5565b506001600160a01b039091165f90815260039091016020526040812080546001600160c01b031916815560010155565b6060815f0180548060200260200160405190810160405280929190818152602001828054801561289b57602002820191905f5260205f20905b815481526020019060010190808311612887575b50505050509050919050565b6001600160a01b0381165f9081526001830160205260408120541515611a73565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166110ce57604051631afcd79f60e31b815260040160405180910390fd5b611a116128c8565b5f61384061292781846136dc565b61069d91906135f9565b5f611a738383612cff565b5f805160206137298339815191526129615f8051602061374983398151915284612d45565b61296d5761296d6136b5565b5f61297b6002830185612931565b825460018401546040516384fe172160e01b815292935090915f916001600160a01b0316906384fe1721906129ba9086908a908a908890600401613559565b602060405180830381865afa1580156129d5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129f991906135c2565b905080471015612a255760405163704c5be560e11b815247600482015260248101829052604401610891565b600184015460405163b2267a7b60e01b81526001600160a01b039091169063b2267a7b908390612a5f9087908b908b908990600401613559565b5f604051808303818588803b158015612a76575f80fd5b505af1158015612a88573d5f803e3d5ffd5b5050505050505050505050565b5f8281526002840160205260408120829055611e3b8484612d50565b5f61069d82611e43565b5f8080612ac88585612703565b5f81815260029690960160205260409095205494959350505050565b5f81602001516001600160801b03165f1415801561069d57506127a8612b0983612b6c565b6001600160801b031642101590565b604080518082019091525f808252602082015281518351612b3991906135d9565b6001600160801b0316815260208083015190840151612b5891906135d9565b6001600160801b0316602082015292915050565b5f81602001516001600160801b03165f03612bb4578151602083015160405163fbd384a560e01b81526001600160801b03928316600482015291166024820152604401610891565b6020820151825161069d91906136dc565b604080518082019091525f808252602082015282515f90670de0b6b3a7640000906303bfc40090612c009086906001600160801b031661351b565b612c0a9190613546565b612c149190613546565b90506001600160801b03811115612c4157604051630cc684bd60e41b815260048101829052602401610891565b6001600160801b0381166020808401829052850151612c5f916135f9565b6001600160801b031682525092915050565b604080518082019091525f808252602082015281518351612c9291906134ad565b6001600160801b0316815260208083015190840151612b5891906134ad565b5f611a73836001600160a01b038416612d57565b5f825f018281548110612cda57612cda61346d565b905f5260205f200154905092915050565b5f611a73836001600160a01b038416612da3565b5f81815260028301602052604081205480158015612d245750612d228484612e8d565b155b15611a735760405163015ab34360e11b815260048101849052602401610891565b5f611a738383612e8d565b5f611a7383835b5f818152600183016020526040812054612d9c57508154600181810184555f84815260208082209093018490558454848252828601909352604090209190915561069d565b505f61069d565b5f8181526001830160205260408120548015612e7d575f612dc5600183613701565b85549091505f90612dd890600190613701565b9050808214612e37575f865f018281548110612df657612df661346d565b905f5260205f200154905080875f018481548110612e1657612e1661346d565b5f918252602080832090910192909255918252600188019052604090208390555b8554869080612e4857612e48613714565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f90556001935050505061069d565b5f91505061069d565b5092915050565b5f818152600183016020526040812054611a7390849084908490151584565b60405180604001604052805f6001600160401b03168152602001612edf604080518082019091525f808252602082015290565b905290565b5f8151808452602080850194508084015f5b83811015612f1b5781516001600160a01b031687529582019590820190600101612ef6565b509495945050505050565b602081525f611a736020830184612ee4565b80356001600160a01b0381168114612f4e575f80fd5b919050565b5f60208284031215612f63575f80fd5b611a7382612f38565b5f805f60608486031215612f7e575f80fd5b612f8784612f38565b9250612f9560208501612f38565b9150604084013590509250925092565b80356001600160401b0381168114612f4e575f80fd5b6001600160801b03811681146111dd575f80fd5b5f805f60608486031215612fe1575f80fd5b612fea84612fa5565b92506020840135612ffa81612fbb565b9150604084013561300a81612fbb565b809150509250925092565b5f8060408385031215613026575f80fd5b61302f83612f38565b946020939093013593505050565b5f6020828403121561304d575f80fd5b611a7382612fa5565b5f8151808452602080850194508084015f5b83811015612f1b57815187529582019590820190600101613068565b604081525f6130966040830185613056565b82810360208401526109d68185612ee4565b5f80604083850312156130b9575f80fd5b6130c283612f38565b91506130d060208401612f38565b90509250929050565b6001600160401b038151168252602081015161089c602084018280516001600160801b03908116835260209182015116910152565b6060810161069d82846130d9565b5f8083601f84011261312c575f80fd5b5081356001600160401b03811115613142575f80fd5b6020830191508360208260051b8501011115611f2b575f80fd5b5f805f806040858703121561316f575f80fd5b84356001600160401b0380821115613185575f80fd5b6131918883890161311c565b909650945060208701359150808211156131a9575f80fd5b506131b68782880161311c565b95989497509550505050565b5f80604083850312156131d3575f80fd5b6130c283612fa5565b5f805f604084860312156131ee575f80fd5b83356131f981612fbb565b925060208401356001600160401b03811115613213575f80fd5b61321f8682870161311c565b9497909650939450505050565b5f8151808452602080850194508084015f5b83811015612f1b5781516001600160801b03168752958201959082019060010161323e565b83151581526001600160801b0383166020820152606060408201525f6109d6606083018461322c565b5f805f6040848603121561329e575f80fd5b6131f984612f38565b5f604082016001600160401b038516835260206040818501528185518084526060935083860191508287015f5b828110156132f7576132e78483516130d9565b92850192908401906001016132d4565b509198975050505050505050565b6001600160401b03851681526001600160801b0384166020820152613343604082018480516001600160801b03908116835260209182015116910152565b60a060808201525f61335860a083018461322c565b9695505050505050565b5f8060408385031215613373575f80fd5b61337c83612f38565b9150602083013561338c81612fbb565b809150509250929050565b5f602082840312156133a7575f80fd5b8135611a7381612fbb565b5f602082840312156133c2575f80fd5b5035919050565b6020808252603a908201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260408201527f6563697069656e74206d61792068617665207265766572746564000000000000606082015260800190565b634e487b7160e01b5f52604160045260245ffd5b6001600160801b0384168152606060208201525f61345b6060830185612ee4565b82810360408401526133588185613056565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f600182016134a6576134a6613481565b5060010190565b6001600160801b03818116838216019080821115612e8657612e86613481565b5f602082840312156134dd575f80fd5b8151611a7381612fbb565b6001600160401b038316815260608101611a73602083018480516001600160801b03908116835260209182015116910152565b808202811582820484141761069d5761069d613481565b634e487b7160e01b5f52601260045260245ffd5b5f8261355457613554613532565b500490565b60018060a01b03851681525f602085818401526080604084015284518060808501525f5b818110156135995786810183015185820160a00152820161357d565b505f60a0828601015260a0601f19601f8301168501019250505082606083015295945050505050565b5f602082840312156135d2575f80fd5b5051919050565b6001600160801b03828116828216039080821115612e8657612e86613481565b6001600160801b0381811683821602808216919082811461361c5761361c613481565b505092915050565b6040810161069d828480516001600160801b03908116835260209182015116910152565b5f8060408385031215613659575f80fd5b825161366481612fbb565b602084015190925061338c81612fbb565b6001600160401b03828116828216039080821115612e8657612e86613481565b6001600160401b03818116838216019080821115612e8657612e86613481565b634e487b7160e01b5f52600160045260245ffd5b5f826136d7576136d7613532565b500690565b5f6001600160801b03808416806136f5576136f5613532565b92169190910492915050565b8181038181111561069d5761069d613481565b634e487b7160e01b5f52603160045260245ffdfecfd85fa27c9444f5482bcadcd5a08c33291e70aa7a38635bf9e607832835c03dcfd85fa27c9444f5482bcadcd5a08c33291e70aa7a38635bf9e607832835c03fa2646970667358221220c64e90cb8cee2ccf7bc0de64742d8cc6d7983d3fe51b44ef2f471fefee91d66564736f6c63430008140033