0 txs
210 calls
constructor
constructor(address beefyClient, address agentExecutor, uint32 bridgeHubParaID, bytes32 bridgeHubAgentID, uint8 foreignTokenDecimals, uint128 destinationMaxTransferFee)
functions
AGENT_EXECUTOR
viewfunction AGENT_EXECUTOR() view returns (address)
agentOf
viewfunction agentOf(bytes32 agentID) view returns (address)
BEEFY_CLIENT
viewfunction BEEFY_CLIENT() view returns (address)
channelNoncesOf
viewfunction channelNoncesOf(bytes32 channelID) view returns (uint64, uint64)
channelOperatingModeOf
viewfunction channelOperatingModeOf(bytes32 channelID) view returns (uint8)
implementation
viewfunction implementation() view returns (address)
initialize
viewfunction initialize(bytes) view
isTokenRegistered
viewfunction isTokenRegistered(address token) view returns (bool)
operatingMode
viewfunction operatingMode() view returns (uint8)
pricingParameters
viewfunction pricingParameters() view returns (uint256, uint128)
queryForeignTokenID
viewfunction queryForeignTokenID(address token) view returns (bytes32)
quoteRegisterTokenFee
viewfunction quoteRegisterTokenFee() view returns (uint256)
quoteSendTokenFee
viewfunction quoteSendTokenFee(address token, uint32 destinationChain, uint128 destinationFee) view returns (uint256)
s_middleware
viewfunction s_middleware() view returns (address)
tokenAddressOf
viewfunction tokenAddressOf(bytes32 tokenID) view returns (address)
agentExecute
nonpayablefunction agentExecute(bytes data)
createAgent
nonpayablefunction createAgent(bytes data)
createChannel
nonpayablefunction createChannel(bytes data)
mintForeignToken
nonpayablefunction mintForeignToken(bytes data)
registerForeignToken
nonpayablefunction registerForeignToken(bytes data)
registerToken
payablefunction registerToken(address token) payable
reportSlashes
nonpayablefunction reportSlashes(bytes data)
sendOperatorsData
nonpayablefunction sendOperatorsData(bytes32[] data, uint48 epoch)
sendRewards
nonpayablefunction sendRewards(bytes data)
sendToken
payablefunction sendToken(address token, uint32 destinationChain, tuple destinationAddress, uint128 destinationFee, uint128 amount) payable
setMiddleware
nonpayablefunction setMiddleware(address middleware)
setOperatingMode
nonpayablefunction setOperatingMode(bytes data)
setPricingParameters
nonpayablefunction setPricingParameters(bytes data)
setTokenTransferFees
nonpayablefunction setTokenTransferFees(bytes data)
submitV1
nonpayablefunction submitV1(tuple message, bytes32[] leafProof, tuple headerProof)
transferNativeFromAgent
nonpayablefunction transferNativeFromAgent(bytes data)
transferNativeToken
nonpayablefunction transferNativeToken(bytes data)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
updateChannel
nonpayablefunction updateChannel(bytes data)
upgrade
nonpayablefunction upgrade(bytes data)
upgradeOnlyOwner
nonpayablefunction upgradeOnlyOwner(bytes data)
events
AgentCreated
event AgentCreated(bytes32 agentID, address agent)
AgentFundsWithdrawn
event AgentFundsWithdrawn(bytes32 indexed agentID, address indexed recipient, uint256 amount)
ChannelCreated
event ChannelCreated(bytes32 indexed channelID)
ChannelUpdated
event ChannelUpdated(bytes32 indexed channelID)
ForeignTokenRegistered
event ForeignTokenRegistered(bytes32 indexed tokenID, address token)
InboundMessageDispatched
event InboundMessageDispatched(bytes32 indexed channelID, uint64 nonce, bytes32 indexed messageID, bool success)
MiddlewareChanged
event MiddlewareChanged(address indexed previousMiddleware, address indexed newMiddleware)
NotImplementedCommand
event NotImplementedCommand(uint8 command)
OperatingModeChanged
event OperatingModeChanged(uint8 mode)
OperatorsDataCreated
event OperatorsDataCreated(uint256 indexed validatorsCount, bytes payload)
OutboundMessageAccepted
event OutboundMessageAccepted(bytes32 indexed channelID, uint64 nonce, bytes32 indexed messageID, bytes payload)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
PricingParametersChanged
event PricingParametersChanged()
TokenRegistrationSent
event TokenRegistrationSent(address token)
TokenSent
event TokenSent(address indexed token, address indexed sender, uint32 indexed destinationChain, (uint8 kind, bytes data) destinationAddress, uint128 amount)
TokenTransferFeesChanged
event TokenTransferFeesChanged()
UnableToProcessIndividualSlashB
event UnableToProcessIndividualSlashB(bytes32 indexed operatorKey, uint256 slashFranction, uint256 indexed epoch, bytes error)
UnableToProcessIndividualSlashS
event UnableToProcessIndividualSlashS(bytes32 indexed operatorKey, uint256 slashFranction, uint256 indexed epoch, string error)
UnableToProcessRewardsMessageB
event UnableToProcessRewardsMessageB(bytes error)
UnableToProcessRewardsMessageS
event UnableToProcessRewardsMessageS(string error)
UnableToProcessSlashMessageB
event UnableToProcessSlashMessageB(bytes error)
UnableToProcessSlashMessageS
event UnableToProcessSlashMessageS(string error)
Upgraded
event Upgraded(address indexed implementation)
errors
AgentAlreadyCreated
error AgentAlreadyCreated()
AgentDoesNotExist
error AgentDoesNotExist()
CantSetMiddlewareToSameAddress
error CantSetMiddlewareToSameAddress()
CantSetMiddlewareToZeroAddress
error CantSetMiddlewareToZeroAddress()
ChannelAlreadyCreated
error ChannelAlreadyCreated()
ChannelDoesNotExist
error ChannelDoesNotExist()
Disabled
error Disabled()
EUnableToProcessRewardsB
error EUnableToProcessRewardsB(uint256 epoch, uint256 eraIndex, address tokenAddress, uint256 totalPointsToken, uint256 totalTokensInflated, bytes32 rewardsRoot, bytes errorBytes)
EUnableToProcessRewardsS
error EUnableToProcessRewardsS(uint256 epoch, uint256 eraIndex, address tokenAddress, uint256 totalPointsToken, uint256 totalTokensInflated, bytes32 rewardsRoot, string errorString)
FeePaymentToLow
error FeePaymentToLow()
InvalidAgentExecutionPayload
error InvalidAgentExecutionPayload()
InvalidChannelUpdate
error InvalidChannelUpdate()
InvalidCodeHash
error InvalidCodeHash()
InvalidConstructorParams
error InvalidConstructorParams()
InvalidContract
error InvalidContract()
InvalidNonce
error InvalidNonce()
InvalidProof
error InvalidProof()
MiddlewareNotSet
error MiddlewareNotSet()
NativeTransferFailed
error NativeTransferFailed()
NotEnoughGas
error NotEnoughGas()
Operators__OperatorsKeysCannotBeEmpty
error Operators__OperatorsKeysCannotBeEmpty()
Operators__OperatorsLengthTooLong
error Operators__OperatorsLengthTooLong()
PRBMath_MulDiv_Overflow
error PRBMath_MulDiv_Overflow(uint256 x, uint256 y, uint256 denominator)
PRBMath_MulDiv18_Overflow
error PRBMath_MulDiv18_Overflow(uint256 x, uint256 y)
PRBMath_UD60x18_Convert_Overflow
error PRBMath_UD60x18_Convert_Overflow(uint256 x)
PRBMath_UD60x18_Exp2_InputTooBig
error PRBMath_UD60x18_Exp2_InputTooBig(uint256 x)
PRBMath_UD60x18_Log_InputTooSmall
error PRBMath_UD60x18_Log_InputTooSmall(uint256 x)
TokenNotRegistered
error TokenNotRegistered()
Unauthorized
error Unauthorized()
creation bytecode
0x6101606040526127105f55348015610015575f80fd5b50604051615760380380615760833981016040819052610034916100fc565b85858585858563ffffffff8416158061004b575082155b1561006957604051631510b77f60e01b815260040160405180910390fd5b6001600160a01b0386811660a0528516608052600884811b63ff00ff001662ff00ff9186901c9190911617601081811b91901c1760e01b6001600160e01b03191660e05263ffffffff90931660c0526101009190915260ff16610140526001600160801b031661012052506101879650505050505050565b80516001600160a01b03811681146100f7575f80fd5b919050565b5f805f805f8060c08789031215610111575f80fd5b61011a876100e1565b9550610128602088016100e1565b9450604087015163ffffffff81168114610140575f80fd5b60608801516080890151919550935060ff8116811461015d575f80fd5b60a08801519092506001600160801b0381168114610179575f80fd5b809150509295509295509295565b60805160a05160c05160e05161010051610120516101405161556b6101f55f395f61306301525f818161167001526119c701525f50505f612a4601525f50505f818161059c0152612a2401525f818161046d0152818161153b01528181611a960152612f6a015261556b5ff3fe608060405260043610610243575f3560e01c8063805ce31d11610131578063ae8a4d98116100ac578063c3b8ec8e1161007c578063f2fde38b11610062578063f2fde38b14610767578063fbebbc2c14610786578063fe61cc49146107a5575f80fd5b8063c3b8ec8e14610729578063c45578b514610748575f80fd5b8063ae8a4d9814610676578063afce33c414610695578063b7d8e1a9146106b4578063be8d42c0146106d3575f80fd5b8063928bc49d116101015780639a870c8b116100e75780639a870c8b146105fc5780639acd53ef1461061b578063a8bd41cd1461063a575f80fd5b8063928bc49d146105be57806393dbdf1d146105dd575f80fd5b8063805ce31d1461052b578063819c73f21461054d5780638257f3d51461056c57806390ffc4f91461058b575f80fd5b80632ab9b512116101c1578063439fab91116101915780635b2e9c4c116101775780635b2e9c4c146104d95780635c60da1b146104f85780635e6dae261461050c575f80fd5b8063439fab91146104a757806352054834146104c6575f80fd5b80632ab9b512146103e957806335ede9691461040857806338004f6914610427578063423e69b61461045c575f80fd5b80630c86ea461161021657806325394645116101fc578063253946451461035b57806326aa101f1461037a5780632a6c3229146103a9575f80fd5b80630c86ea461461031d57806317abcf601461033c575f80fd5b8063017b7311146102475780630705f4651461026857806309824a801461029d5780630b617646146102b0575b5f80fd5b348015610252575f80fd5b50610266610261366004613ee3565b6107c4565b005b348015610273575f80fd5b50610287610282366004613f4f565b61087a565b6040516102949190613f7a565b60405180910390f35b6102666102ab366004613fa8565b610890565b3480156102bb575f80fd5b507f59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f6547f59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f754604080519283526001600160801b03909116602083015201610294565b348015610328575f80fd5b50610266610337366004613ee3565b610917565b348015610347575f80fd5b50610266610356366004613ee3565b6109d1565b348015610366575f80fd5b50610266610375366004613ee3565b610afb565b348015610385575f80fd5b50610399610394366004613fa8565b610b44565b6040519015158152602001610294565b3480156103b4575f80fd5b506103c86103c3366004613f4f565b610bc6565b6040805167ffffffffffffffff938416815292909116602083015201610294565b3480156103f4575f80fd5b5061026661040336600461400b565b610bf5565b348015610413575f80fd5b50610266610422366004613ee3565b611477565b348015610432575f80fd5b507e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ab5460ff16610287565b348015610467575f80fd5b5061048f7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610294565b3480156104b2575f80fd5b506102666104c13660046141e6565b6115e6565b6102666104d436600461423d565b611635565b3480156104e4575f80fd5b506102666104f3366004613ee3565b6116e6565b348015610503575f80fd5b5061048f61179a565b348015610517575f80fd5b5061048f610526366004613f4f565b6117c8565b348015610536575f80fd5b5061053f6117d2565b604051908152602001610294565b348015610558575f80fd5b50610266610567366004613ee3565b611845565b348015610577575f80fd5b50610266610586366004613ee3565b6118dd565b348015610596575f80fd5b5061048f7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105c9575f80fd5b5061053f6105d83660046142c6565b61198d565b3480156105e8575f80fd5b506102666105f7366004613ee3565b611a35565b348015610607575f80fd5b50610266610616366004613ee3565b611b35565b348015610626575f80fd5b5061026661063536600461430e565b611bda565b348015610645575f80fd5b507fe07f9585be08def4dcde4d58f9f84d3982cbebefa85d2f6b9bdfcf41bc09ad68546001600160a01b031661048f565b348015610681575f80fd5b50610266610690366004613ee3565b611c6b565b3480156106a0575f80fd5b506102666106af366004613ee3565b611ce5565b3480156106bf575f80fd5b506102666106ce366004613fa8565b611dbc565b3480156106de575f80fd5b5061053f6106ed366004613fa8565b6001600160a01b03165f9081527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e602052604090206001015490565b348015610734575f80fd5b50610266610743366004613ee3565b611efb565b348015610753575f80fd5b50610266610762366004613ee3565b612025565b348015610772575f80fd5b50610266610781366004613fa8565b6122f1565b348015610791575f80fd5b506102666107a0366004613ee3565b612348565b3480156107b0575f80fd5b5061048f6107bf366004613f4f565b612577565b3330146107e3576040516282b42960e81b815260040160405180910390fd5b5f6107f0828401846143a7565b805160208201516040808401519051631e66650960e11b815260048101939093526001600160a01b039091166024830152604482015290915073c441915f909b16b8559c326c6582f0bfa8d7976c90633cccca12906064015b5f6040518083038186803b15801561085f575f80fd5b505af4158015610871573d5f803e3d5ffd5b50505050505050565b5f80610885836125eb565b5460ff169392505050565b6040516213049560e71b81526001600160a01b03821660048201526109149073c441915f909b16b8559c326c6582f0bfa8d7976c906309824a80906024015f60405180830381865af41580156108e8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261090f919081019061444d565b612646565b50565b333014610936576040516282b42960e81b815260040160405180910390fd5b7f59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f65f610964848401856144de565b8051835560208101516001840180546fffffffffffffffffffffffffffffffff19166001600160801b039092169190911790556040808201516002850155519091507f5e3c25378b5946068b94aa2ea10c4c1e215cc975f994322b159ddc9237a973d4905f90a150505050565b3330146109f0576040516282b42960e81b815260040160405180910390fd5b7e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ab5f610a1d84840185614532565b90505f610a2d82602001516127ef565b82515f9081526001808601602052604090912090810154919250906001600160a01b031615610a6f57604051631f6206e560e01b815260040160405180910390fd5b60408301518154829060ff191660018381811115610a8f57610a8f613f66565b02179055506001810180546001600160a01b0319166001600160a01b038416179055805470ffffffffffffffffffffffffffffffff001916815582516040517fe7e6b36c9bc4c7817d3879c45d6ce1edd3c61b1966c488f1817697bb0b704525905f90a2505050505050565b333014610b1a576040516282b42960e81b815260040160405180910390fd5b5f610b2782840184614574565b9050610b3f815f015182602001518360400151612842565b505050565b6040516326aa101f60e01b81526001600160a01b03821660048201525f9073c441915f909b16b8559c326c6582f0bfa8d7976c906326aa101f90602401602060405180830381865af4158015610b9c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bc091906145fd565b92915050565b5f805f610bd2846125eb565b5467ffffffffffffffff6101008204811696600160481b90920416945092505050565b5f5a90505f610c0486356125eb565b8054909150610c2390610100900467ffffffffffffffff16600161462a565b67ffffffffffffffff16610c3d6040880160208901614669565b67ffffffffffffffff1614610c6557604051633ab3447f60e11b815260040160405180910390fd5b8054610100900467ffffffffffffffff16816001610c8283614682565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550505f86604051602001610cbb9190614734565b6040516020818303038152906040528051906020012090505f610d118787808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152508692506129b1915050565b9050610d1d81866129f3565b610d3a576040516309bde33960e01b815260040160405180910390fd5b5f610d4b60a08a0160808b01614669565b67ffffffffffffffff1690505f5481610d6491906147de565b5a1015610d8457604051636eb14fc360e11b815260040160405180910390fd5b60015f610d9760608c0160408d016147f1565b6022811115610da857610da8613f66565b03610e1757306335ede96983610dc160608e018e61480a565b6040518463ffffffff1660e01b8152600401610dde92919061484d565b5f604051808303815f88803b158015610df5575f80fd5b5087f193505050508015610e07575060015b610e1257505f61137d565b61137d565b6002610e2960608c0160408d016147f1565b6022811115610e3a57610e3a613f66565b03610e53573063c3b8ec8e83610dc160608e018e61480a565b6003610e6560608c0160408d016147f1565b6022811115610e7657610e76613f66565b03610e8f57306317abcf6083610dc160608e018e61480a565b6004610ea160608c0160408d016147f1565b6022811115610eb257610eb2613f66565b03610ecb573063afce33c483610dc160608e018e61480a565b6005610edd60608c0160408d016147f1565b6022811115610eee57610eee613f66565b03610f075730638257f3d583610dc160608e018e61480a565b6006610f1960608c0160408d016147f1565b6022811115610f2a57610f2a613f66565b03610f435730639a870c8b83610dc160608e018e61480a565b6001610f5560608c0160408d016147f1565b6022811115610f6657610f66613f66565b03610f7f5730632539464583610dc160608e018e61480a565b6007610f9160608c0160408d016147f1565b6022811115610fa257610fa2613f66565b03610fbb5730635b2e9c4c83610dc160608e018e61480a565b6008610fcd60608c0160408d016147f1565b6022811115610fde57610fde613f66565b03610ff75730630c86ea4683610dc160608e018e61480a565b600961100960608c0160408d016147f1565b602281111561101a5761101a613f66565b0361103357306393dbdf1d83610dc160608e018e61480a565b600a61104560608c0160408d016147f1565b602281111561105657611056613f66565b0361106f573063ae8a4d9883610dc160608e018e61480a565b600b61108160608c0160408d016147f1565b602281111561109257611092613f66565b036110ab573063017b731183610dc160608e018e61480a565b60226110bd60608c0160408d016147f1565b60228111156110ce576110ce613f66565b036111f8573063fbebbc2c836110e760608e018e61480a565b6040518463ffffffff1660e01b815260040161110492919061484d565b5f604051808303815f88803b15801561111b575f80fd5b5087f19350505050801561112d575060015b610e1257611139614860565b806308c379a003611198575061114d614878565b80611158575061119a565b7fa5c3d8fb760908f41c76be7895cad9604026af9199941b8acb89df38129ced9681604051611187919061492f565b60405180910390a15f91505061137d565b505b3d8080156111c3576040519150601f19603f3d011682016040523d82523d5f602084013e6111c8565b606091505b507f6ad5b0077c5d29c0997620effc37071ab1076e5c07e562bf474d2e8af8e67b6581604051611187919061492f565b602161120a60608c0160408d016147f1565b602281111561121b5761121b613f66565b03611334573063c45578b58361123460608e018e61480a565b6040518463ffffffff1660e01b815260040161125192919061484d565b5f604051808303815f88803b158015611268575f80fd5b5087f19350505050801561127a575060015b610e1257611286614860565b806308c379a0036112d4575061129a614878565b806112a557506112d6565b7f7288d75ae482e895a82170fea3e4b676deaafccd3a4ed2b0458b52eb3e3f987181604051611187919061492f565b505b3d8080156112ff576040519150601f19603f3d011682016040523d82523d5f602084013e611304565b606091505b507f83299bf4eb6c92af218e82e3d6a849c455fc3d6806a93d99070c999d360f3a2b81604051611187919061492f565b505f7fbaa1607288f2f457b14d1c481bb0470ad2af897b6f1e438930a75184acf542a861136760608c0160408d016147f1565b6040516113749190614941565b60405180910390a15b5f5a611389908861494f565b611391612ab1565b61139b91906147de565b90505f6113ac3a8d60a00135612ac9565b6113b69083614962565b90505f6113de6113ca60c08f0135846147de565b60018a01546001600160a01b031631612ac9565b90506113e8612ade565b811115611408576001880154611408906001600160a01b03163383612aeb565b8c60e001358d5f01357f617fdb0cb78f01551a192a3673208ec5eb09f20a90acf673c63a0dcb11745a7a8f60200160208101906114459190614669565b6040805167ffffffffffffffff909216825288151560208301520160405180910390a350505050505050505050505050565b333014611496576040516282b42960e81b815260040160405180910390fd5b5f6114a382840184614979565b90505f6114b2825f01516127ef565b90508160200151515f036114d9576040516309e256f760e21b815260040160405180910390fd5b5f8083602001518060200190518101906114f391906149ef565b90925090505f82801561150857611508613f66565b036115de575f805f838060200190518101906115249190614a40565b60405163163ace6960e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152808b1660248301528085166044830152831660648201526001600160801b0382166084820152929550909350915073c441915f909b16b8559c326c6582f0bfa8d7976c9063163ace699060a4015f6040518083038186803b1580156115c4575f80fd5b505af41580156115d6573d5f803e3d5ffd5b505050505050505b505050505050565b5f61160f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6001600160a01b031603610914576040516282b42960e81b815260040160405180910390fd5b60405163711d829160e01b81525f9073c441915f909b16b8559c326c6582f0bfa8d7976c9063711d82919061169a90899033908a908a908a907f0000000000000000000000000000000000000000000000000000000000000000908b90600401614a7f565b5f60405180830381865af41580156116b4573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526116db919081019061444d565b90506115de81612646565b333014611705576040516282b42960e81b815260040160405180910390fd5b7f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e5f61173384840185614b0c565b805160208201516001600160801b039081167001000000000000000000000000000000000291161760028401556040808201516003850155519091507f4793c0cb5bef4b1fdbbfbcf17e06991844eb881088b012442af17a12ff38d5cd905f90a150505050565b5f6117c37f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905090565b5f610bc0826127ef565b5f6117c373c441915f909b16b8559c326c6582f0bfa8d7976c63b02b33206040518163ffffffff1660e01b81526004016040805180830381865af415801561181c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118409190614b43565b612b54565b7fe07f9585be08def4dcde4d58f9f84d3982cbebefa85d2f6b9bdfcf41bc09ad6780546001600160a01b0316331461188f576040516282b42960e81b815260040160405180910390fd5b604051632539464560e01b815230906325394645906118b4908690869060040161484d565b5f604051808303815f87803b1580156118cb575f80fd5b505af1158015610871573d5f803e3d5ffd5b3330146118fc576040516282b42960e81b815260040160405180910390fd5b7e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ab5f61192984840185614b5d565b8051835491925090839060ff19166001838181111561194a5761194a613f66565b021790555080516040517f4016a1377b8961c4aa6f3a2d3de830a685ddbfe0f228ffc0208eb96304c4cf1a9161197f91613f7a565b60405180910390a150505050565b60405163beb9a0bb60e01b81526001600160a01b038416600482015263ffffffff831660248201526001600160801b0380831660448301527f00000000000000000000000000000000000000000000000000000000000000001660648201525f90611a2b9073c441915f909b16b8559c326c6582f0bfa8d7976c9063beb9a0bb906084016040805180830381865af415801561181c573d5f803e3d5ffd5b90505b9392505050565b333014611a54576040516282b42960e81b815260040160405180910390fd5b5f611a6182840184614b8b565b90505f611a70825f01516127ef565b60208301516040808501516060860151915163163ace6960e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015280861660248301529384166044820152921660648301526001600160801b0316608482015290915073c441915f909b16b8559c326c6582f0bfa8d7976c9063163ace699060a4015f6040518083038186803b158015611b19575f80fd5b505af4158015611b2b573d5f803e3d5ffd5b5050505050505050565b333014611b54576040516282b42960e81b815260040160405180910390fd5b5f611b61828401846143a7565b90505f611b70825f01516127ef565b9050611b858183602001518460400151612aeb565b81602001516001600160a01b0316825f01517ff953871855f78d5ccdd6268f2d9d69fc67f26542a35d2bba1c615521aed570548460400151604051611bcc91815260200190565b60405180910390a350505050565b7fe07f9585be08def4dcde4d58f9f84d3982cbebefa85d2f6b9bdfcf41bc09ad68547fe07f9585be08def4dcde4d58f9f84d3982cbebefa85d2f6b9bdfcf41bc09ad67906001600160a01b03163314611c45576040516282b42960e81b815260040160405180910390fd5b5f611c51858585612be5565b9050611c6460015f1b8260400151612cbf565b5050505050565b333014611c8a576040516282b42960e81b815260040160405180910390fd5b5f611c9782840184614bfb565b8051602082015160408084015160608501519151631eb2d29d60e21b815294955073c441915f909b16b8559c326c6582f0bfa8d7976c94637acb4a7494610849949093909291600401614ca5565b333014611d04576040516282b42960e81b815260040160405180910390fd5b5f611d1182840184614ce4565b90505f611d20825f01516125eb565b82519091506001148015611d4957505f82602001516001811115611d4657611d46613f66565b14155b15611d675760405163b24a3b7760e01b815260040160405180910390fd5b60208201518154829060ff191660018381811115611d8757611d87613f66565b021790555081516040517f66e174b5e03ba247add8660a34e70bdd484239fe794c2567772e8e93a5c1696b905f90a250505050565b7fe07f9585be08def4dcde4d58f9f84d3982cbebefa85d2f6b9bdfcf41bc09ad6780546001600160a01b03163314611e06576040516282b42960e81b815260040160405180910390fd5b7fe07f9585be08def4dcde4d58f9f84d3982cbebefa85d2f6b9bdfcf41bc09ad68547fe07f9585be08def4dcde4d58f9f84d3982cbebefa85d2f6b9bdfcf41bc09ad67906001600160a01b03908116908416611e755760405163c713399f60e01b815260040160405180910390fd5b806001600160a01b0316846001600160a01b031603611ea7576040516305814fc960e21b815260040160405180910390fd5b6001820180546001600160a01b0319166001600160a01b0386811691821790925560405190918316907f2029edfac4c6b19a6616d552bd60af6d0ec3f6a974d3a8750de675321f382c5c905f90a350505050565b333014611f1a576040516282b42960e81b815260040160405180910390fd5b7e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ab5f611f4784840185614d1c565b80515f9081526002840160205260409020549091506001600160a01b031615611f835760405163135d15b960e21b815260040160405180910390fd5b5f815f0151604051611f9490613e97565b908152602001604051809103905ff080158015611fb3573d5f803e3d5ffd5b5082515f90815260028501602090815260409182902080546001600160a01b0319166001600160a01b03851690811790915585518351908152918201529192507f7c96960a1ebd8cc753b10836ea25bd7c9c4f8cd43590db1e8b3648cb0ec4cc89910160405180910390a15050505050565b333014612044576040516282b42960e81b815260040160405180910390fd5b7fe07f9585be08def4dcde4d58f9f84d3982cbebefa85d2f6b9bdfcf41bc09ad68547fe07f9585be08def4dcde4d58f9f84d3982cbebefa85d2f6b9bdfcf41bc09ad67906001600160a01b0316806120af5760405163120bf7bb60e21b815260040160405180910390fd5b5f80808080806120c1898b018b614d42565b604051631e66650960e11b8152600481018290526001600160a01b038e16602482015260448101849052959b5093995091975095509350915073c441915f909b16b8559c326c6582f0bfa8d7976c90633cccca12906064015f6040518083038186803b15801561212f575f80fd5b505af4158015612141573d5f803e3d5ffd5b505060405163fe61cc4960e01b8152600481018490525f925073c441915f909b16b8559c326c6582f0bfa8d7976c915063fe61cc4990602401602060405180830381865af4158015612195573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121b99190614d81565b60405163117e3b0960e21b815260048101899052602481018890526044810187905260648101869052608481018590526001600160a01b0380831660a4830152919250908916906345f8ec249060c4015f604051808303815f87803b158015612220575f80fd5b505af1925050508015612231575060015b6122e45761223d614860565b806308c379a00361228c5750612251614878565b8061225c575061228e565b878783888888866040516355682f7560e11b81526004016122839796959493929190614d9c565b60405180910390fd5b505b3d8080156122b7576040519150601f19603f3d011682016040523d82523d5f602084013e6122bc565b606091505b5087878388888886604051631e6a269160e11b81526004016122839796959493929190614d9c565b5050505050505050505050565b7fe07f9585be08def4dcde4d58f9f84d3982cbebefa85d2f6b9bdfcf41bc09ad6780546001600160a01b0316331461233b576040516282b42960e81b815260040160405180910390fd5b61234482612db3565b5050565b333014612367576040516282b42960e81b815260040160405180910390fd5b7fe07f9585be08def4dcde4d58f9f84d3982cbebefa85d2f6b9bdfcf41bc09ad68547fe07f9585be08def4dcde4d58f9f84d3982cbebefa85d2f6b9bdfcf41bc09ad67906001600160a01b0316806123d25760405163120bf7bb60e21b815260040160405180910390fd5b5f6123df84860186614de8565b9050815f5b826020015151811015610871575f8360200151828151811061240857612408614ef7565b6020908102919091018101516040808201518251938301519151633136c5d760e01b815265ffffffffffff90911660048201526024810193909352604483015291506001600160a01b03841690633136c5d7906064015f604051808303815f87803b158015612475575f80fd5b505af1925050508015612486575060015b61256d57612492614860565b806308c379a0036124fe57506124a6614878565b806124b15750612500565b8160400151825f01517fcaf5a17fa52c8de175d4bfdbce1de004c92f2e8e7d81c3c56138d5ede109316c8460200151846040516124ef929190614f0b565b60405180910390a3505061256f565b505b3d808015612529576040519150601f19603f3d011682016040523d82523d5f602084013e61252e565b606091505b508160400151825f01517f8361b2b142dbdd4ee5ee6fe96616f18b6e653617e216353ee9b509ea4cdb0d288460200151846040516124ef929190614f0b565b505b6001016123e4565b60405163fe61cc4960e01b8152600481018290525f9073c441915f909b16b8559c326c6582f0bfa8d7976c9063fe61cc4990602401602060405180830381865af41580156125c7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bc09190614d81565b5f8181527e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ac6020526040902060018101546001600160a01b031661264157604051636ddd9da960e01b815260040160405180910390fd5b919050565b805160408051637061726160e01b60208083019190915260e09390931b6001600160e01b031916602482015281516008818303018152602890910190915280519101205f612693826125eb565b905061269e81612e23565b5f6126ac8460200151612b54565b9050803410156126cf576040516303e66ae760e31b815260040160405180910390fd5b81546126ed90600160481b900467ffffffffffffffff16600161462a565b825467ffffffffffffffff91909116600160481b0270ffffffffffffffff000000000000000000199091161782556001820154612733906001600160a01b031682612e9b565b8034111561274f5761274f612748823461494f565b3390612e9b565b81546040805160208101869052600160481b90920460c01b6001600160c01b031916908201525f9060480160405160208183030381529060405280519060200120905080847f7153f9357c8ea496bba60bf82e67143e27b64462b49041f8e689e1b05728f84f855f0160099054906101000a900467ffffffffffffffff1688604001516040516127e0929190614f23565b60405180910390a35050505050565b5f8181527e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ad60205260409020546001600160a01b0316806126415760405163d3227c9b60e01b815260040160405180910390fd5b612854836001600160a01b0316612ec4565b612871576040516303777f6960e51b815260040160405180910390fd5b81836001600160a01b03163f1461289b576040516323e13ec960e21b815260040160405180910390fd5b6128c3837f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b5f80846001600160a01b0316836040516024016128e0919061492f565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663439fab9160e01b1790525161292a9190614f5c565b5f60405180830381855af49150503d805f8114612962576040519150601f19603f3d011682016040523d82523d5f602084013e612967565b606091505b50915091506129768282612f0a565b506040516001600160a01b038616907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a25050505050565b5f81815b84518110156129eb576129e1828683815181106129d4576129d4614ef7565b6020026020010151612f29565b91506001016129b5565b509392505050565b604051632f254d7560e21b81525f9073759701b01b2fa18f8d6031f98480ffb64ba3f43f9063bc9535d490612a72907f0000000000000000000000000000000000000000000000000000000000000000907f00000000000000000000000000000000000000000000000000000000000000009088908890600401614fdc565b602060405180830381865af4158015612a8d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a2e91906145fd565b5f612abd366010614962565b6117c390618b726147de565b5f818310612ad75781611a2e565b5090919050565b5f6117c33a615208614962565b6040516001600160a01b0383166024820152604481018290525f9060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16633e97486160e11b1790529050611c648482612f55565b80517f59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f7545f917f59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f6918391612bba91612bb591906001600160801b03166147de565b613000565b9050612bce825f0154836002015483613045565b8460200151612bdd91906147de565b949350505050565b612bed613ea4565b5f839003612c0e57604051634e5981a560e11b815260040160405180910390fd5b826103e8811115612c32576040516352e7350f60e11b815260040160405180910390fd5b5f8083526040805180820182528281526020808201939093528285015251612c7891612c629188918891016150cb565b60405160208183030381529060405282856130d3565b60408084018290525182917fcf50ba21a594d6724d0039b955599adf260c9882300a8701c31a8b334315eddb91612caf919061492f565b60405180910390a2509392505050565b5f612cc9836125eb565b9050612cd481612e23565b8054612cf290600160481b900467ffffffffffffffff16600161462a565b815467ffffffffffffffff918216600160481b90810270ffffffffffffffff00000000000000000019909216919091178084556040515f93612d5193889304169060200191825260c01b6001600160c01b031916602082015260280190565b60405160208183030381529060405280519060200120905080847f7153f9357c8ea496bba60bf82e67143e27b64462b49041f8e689e1b05728f84f845f0160099054906101000a900467ffffffffffffffff1686604051611bcc929190614f23565b7fe07f9585be08def4dcde4d58f9f84d3982cbebefa85d2f6b9bdfcf41bc09ad6780546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b7e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ab80545f9060ff166001811115612e5b57612e5b613f66565b141580612e7d57505f825460ff166001811115612e7a57612e7a613f66565b14155b1561234457604051633ac4266d60e11b815260040160405180910390fd5b5f805f805f85875af1905080610b3f57604051633d2cec6f60e21b815260040160405180910390fd5b5f6001600160a01b0382163f15801590610bc05750506001600160a01b03163f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470141590565b60608215612f19575080610bc0565b8151156102435781518083602001fd5b5f818310612f43575f828152602084905260409020611a2e565b5f838152602083905260409020611a2e565b60605f80846001600160a01b0316639bb66b287f0000000000000000000000000000000000000000000000000000000000000000866040518363ffffffff1660e01b8152600401612fa79291906150f2565b5f604051808303815f875af1158015612fc2573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612fe99190810190615113565b91509150612ff78282612f0a565b95945050505050565b5f613014670de0b6b3a76400005f1961515c565b82111561303757604051631cd951a760e01b815260048101839052602401612283565b50670de0b6b3a76400000290565b5f80613058670de0b6b3a7640000613000565b90505f61309a61308a7f000000000000000000000000000000000000000000000000000000000000000060ff16613000565b613094600a613000565b90613170565b90505f6130bd836130b1846130b78b838c8c613280565b90613280565b9061328e565b90506130c8816132a5565b979650505050505050565b6060630e02a00760e31b5f806130e8866132b8565b8765ff000000ff00600888811b91821664ff000000ff918a901c91821617601090811b63ff0000009390931662ff00009290921691909117901c17602081811b6bffffffffffffffff000000001691901c63ffffffff161760c01b6040516020016131589695949392919061517b565b60405160208183030381529060405290509392505050565b5f8282818303613199578015613186575f613190565b670de0b6b3a76400005b92505050610bc0565b670de0b6b3a764000082036131ba57670de0b6b3a764000092505050610bc0565b805f036131d357670de0b6b3a764000092505050610bc0565b670de0b6b3a764000081036131ec578492505050610bc0565b670de0b6b3a764000082111561321d5761321661321161320b87613426565b86613280565b61354e565b9250613278565b5f61323d61323a846ec097ce7bc90715b34b9f100000000061515c565b90565b90505f61325561321161324f84613426565b88613280565b905061327361323a826ec097ce7bc90715b34b9f100000000061515c565b945050505b505092915050565b5f611a2e61323a84846135a2565b5f611a2e61323a84670de0b6b3a764000085613654565b5f610bc0670de0b6b3a76400008361515c565b6060603f8263ffffffff16116132f557604051603f60fa1b60fa84901b1660208201526021015b6040516020818303038152906040529050919050565b613fff8263ffffffff161161336c5761333161331d6403fffffffc600285901b1660016151ec565b600881811b62ffff001691901c60ff161790565b6040516020016132df919060f09190911b7fffff00000000000000000000000000000000000000000000000000000000000016815260020190565b633fffffff8263ffffffff16116133de576133bb60028363ffffffff16901b600261339791906151ec565b600881811c62ff00ff1663ff00ff009290911b9190911617601081811c91901b1790565b6040516020016132df919060e09190911b6001600160e01b031916815260040190565b604051600360f81b60208201526001600160e01b0319600884811c62ff00ff1663ff00ff009186901b9190911617601081811c91901b1760e01b1660218201526025016132df565b5f81670de0b6b3a76400008110156134545760405163036d32ef60e41b815260048101849052602401612283565b5f6134d6670de0b6b3a7640000830460016001600160801b03821160071b91821c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211871b91821c969096119490961792909217171791909117919091171790565b9050670de0b6b3a7640000810282821c670de0b6b3a763ffff1981016134ff5750949350505050565b671bc16d674ec800006706f05b59d3b200005b801561354257670de0b6b3a764000083800204925081831061353a579283019260019290921c915b60011c613512565b50919695505050505050565b5f81680a688906bd8affffff81111561357d5760405163b3b6ba1f60e01b815260048101849052602401612283565b5f613594670de0b6b3a7640000604084901b61515c565b9050612bdd61323a82613723565b5f80805f19848609848602925082811083820303915050805f036135d35750670de0b6b3a764000090049050610bc0565b670de0b6b3a7640000811061360557604051635173648d60e01b81526004810186905260248101859052604401612283565b5f670de0b6b3a764000085870962040000818503049310909103600160ee1b02919091177faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac106690291505092915050565b5f80805f19858709858702925082811083820303915050805f0361368b5783828161368157613681615148565b0492505050611a2e565b8381106136bc57604051630c740aef60e31b8152600481018790526024810186905260448101859052606401612283565b5f8486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091025f889003889004909101858311909403939093029303949094049190911702949350505050565b7780000000000000000000000000000000000000000000000067ff000000000000008216156138445767800000000000000082161561376b5768016a09e667f3bcc9090260401c5b67400000000000000082161561378a576801306fe0a31b7152df0260401c5b6720000000000000008216156137a9576801172b83c7d517adce0260401c5b6710000000000000008216156137c85768010b5586cf9890f62a0260401c5b6708000000000000008216156137e7576801059b0d31585743ae0260401c5b67040000000000000082161561380657680102c9a3e778060ee70260401c5b6702000000000000008216156138255768010163da9fb33356d80260401c5b67010000000000000082161561384457680100b1afa5abcbed610260401c5b66ff0000000000008216156139435766800000000000008216156138715768010058c86da1c09ea20260401c5b664000000000000082161561388f576801002c605e2e8cec500260401c5b66200000000000008216156138ad57680100162f3904051fa10260401c5b66100000000000008216156138cb576801000b175effdc76ba0260401c5b66080000000000008216156138e957680100058ba01fb9f96d0260401c5b66040000000000008216156139075768010002c5cc37da94920260401c5b6602000000000000821615613925576801000162e525ee05470260401c5b66010000000000008216156139435768010000b17255775c040260401c5b65ff0000000000821615613a39576580000000000082161561396e576801000058b91b5bc9ae0260401c5b6540000000000082161561398b57680100002c5c89d5ec6d0260401c5b652000000000008216156139a85768010000162e43f4f8310260401c5b651000000000008216156139c557680100000b1721bcfc9a0260401c5b650800000000008216156139e25768010000058b90cf1e6e0260401c5b650400000000008216156139ff576801000002c5c863b73f0260401c5b65020000000000821615613a1c57680100000162e430e5a20260401c5b65010000000000821615613a39576801000000b1721835510260401c5b64ff00000000821615613b2657648000000000821615613a6257680100000058b90c0b490260401c5b644000000000821615613a7e5768010000002c5c8601cc0260401c5b642000000000821615613a9a576801000000162e42fff00260401c5b641000000000821615613ab65768010000000b17217fbb0260401c5b640800000000821615613ad2576801000000058b90bfce0260401c5b640400000000821615613aee57680100000002c5c85fe30260401c5b640200000000821615613b0a5768010000000162e42ff10260401c5b640100000000821615613b2657680100000000b17217f80260401c5b63ff000000821615613c0a576380000000821615613b4d5768010000000058b90bfc0260401c5b6340000000821615613b68576801000000002c5c85fe0260401c5b6320000000821615613b8357680100000000162e42ff0260401c5b6310000000821615613b9e576801000000000b17217f0260401c5b6308000000821615613bb957680100000000058b90c00260401c5b6304000000821615613bd45768010000000002c5c8600260401c5b6302000000821615613bef576801000000000162e4300260401c5b6301000000821615613c0a5768010000000000b172180260401c5b62ff0000821615613ce55762800000821615613c2f576801000000000058b90c0260401c5b62400000821615613c4957680100000000002c5c860260401c5b62200000821615613c635768010000000000162e430260401c5b62100000821615613c7d57680100000000000b17210260401c5b62080000821615613c975768010000000000058b910260401c5b62040000821615613cb1576801000000000002c5c80260401c5b62020000821615613ccb57680100000000000162e40260401c5b62010000821615613ce5576801000000000000b1720260401c5b61ff00821615613db757618000821615613d0857680100000000000058b90260401c5b614000821615613d215768010000000000002c5d0260401c5b612000821615613d3a576801000000000000162e0260401c5b611000821615613d535768010000000000000b170260401c5b610800821615613d6c576801000000000000058c0260401c5b610400821615613d8557680100000000000002c60260401c5b610200821615613d9e57680100000000000001630260401c5b610100821615613db757680100000000000000b10260401c5b60ff821615613e80576080821615613dd857680100000000000000590260401c5b6040821615613df0576801000000000000002c0260401c5b6020821615613e0857680100000000000000160260401c5b6010821615613e20576801000000000000000b0260401c5b6008821615613e3857680100000000000000060260401c5b6004821615613e5057680100000000000000030260401c5b6002821615613e6857680100000000000000010260401c5b6001821615613e8057680100000000000000010260401c5b670de0b6b3a76400000260409190911c60bf031c90565b61032c8061520a83390190565b60405180606001604052805f63ffffffff168152602001613ed660405180604001604052805f81526020015f81525090565b8152602001606081525090565b5f8060208385031215613ef4575f80fd5b823567ffffffffffffffff80821115613f0b575f80fd5b818501915085601f830112613f1e575f80fd5b813581811115613f2c575f80fd5b866020828501011115613f3d575f80fd5b60209290920196919550909350505050565b5f60208284031215613f5f575f80fd5b5035919050565b634e487b7160e01b5f52602160045260245ffd5b6020810160028310613f8e57613f8e613f66565b91905290565b6001600160a01b0381168114610914575f80fd5b5f60208284031215613fb8575f80fd5b8135611a2e81613f94565b5f8083601f840112613fd3575f80fd5b50813567ffffffffffffffff811115613fea575f80fd5b6020830191508360208260051b8501011115614004575f80fd5b9250929050565b5f805f806060858703121561401e575f80fd5b843567ffffffffffffffff80821115614035575f80fd5b908601906101008289031215614049575f80fd5b9094506020860135908082111561405e575f80fd5b61406a88838901613fc3565b90955093506040870135915080821115614082575f80fd5b5085016101208188031215614095575f80fd5b939692955090935050565b634e487b7160e01b5f52604160045260245ffd5b6060810181811067ffffffffffffffff821117156140d4576140d46140a0565b60405250565b6040810181811067ffffffffffffffff821117156140d4576140d46140a0565b6020810181811067ffffffffffffffff821117156140d4576140d46140a0565b6080810181811067ffffffffffffffff821117156140d4576140d46140a0565b601f8201601f1916810167ffffffffffffffff81118282101715614160576141606140a0565b6040525050565b5f67ffffffffffffffff821115614180576141806140a0565b50601f01601f191660200190565b5f82601f83011261419d575f80fd5b81356141a881614167565b6040516141b5828261413a565b8281528560208487010111156141c9575f80fd5b826020860160208301375f92810160200192909252509392505050565b5f602082840312156141f6575f80fd5b813567ffffffffffffffff81111561420c575f80fd5b612bdd8482850161418e565b63ffffffff81168114610914575f80fd5b6001600160801b0381168114610914575f80fd5b5f805f805f60a08688031215614251575f80fd5b853561425c81613f94565b9450602086013561426c81614218565b9350604086013567ffffffffffffffff811115614287575f80fd5b860160408189031215614298575f80fd5b925060608601356142a881614229565b915060808601356142b881614229565b809150509295509295909350565b5f805f606084860312156142d8575f80fd5b83356142e381613f94565b925060208401356142f381614218565b9150604084013561430381614229565b809150509250925092565b5f805f60408486031215614320575f80fd5b833567ffffffffffffffff811115614336575f80fd5b61434286828701613fc3565b909450925050602084013565ffffffffffff81168114614303575f80fd5b5f60608284031215614370575f80fd5b60405161437c816140b4565b80915082358152602083013561439181613f94565b6020820152604092830135920191909152919050565b5f606082840312156143b7575f80fd5b611a2e8383614360565b5f604082840312156143d1575f80fd5b6040516143dd816140da565b80915082518152602083015160208201525092915050565b5f82601f830112614404575f80fd5b815161440f81614167565b60405161441c828261413a565b828152856020848701011115614430575f80fd5b8260208601602083015e5f92810160200192909252509392505050565b5f6020828403121561445d575f80fd5b815167ffffffffffffffff80821115614474575f80fd5b9083019060808286031215614487575f80fd5b604051614493816140b4565b825161449e81614218565b81526144ad86602085016143c1565b60208201526060830151828111156144c3575f80fd5b6144cf878286016143f5565b60408301525095945050505050565b5f606082840312156144ee575f80fd5b6040516144fa816140b4565b82358152602083013561450c81614229565b60208201526040928301359281019290925250919050565b803560028110612641575f80fd5b5f60608284031215614542575f80fd5b60405161454e816140b4565b823581526020830135602082015261456860408401614524565b60408201529392505050565b5f60208284031215614584575f80fd5b813567ffffffffffffffff8082111561459b575f80fd5b90830190606082860312156145ae575f80fd5b6040516145ba816140b4565b82356145c581613f94565b8152602083810135908201526040830135828111156145e2575f80fd5b6144cf8782860161418e565b80518015158114612641575f80fd5b5f6020828403121561460d575f80fd5b611a2e826145ee565b634e487b7160e01b5f52601160045260245ffd5b67ffffffffffffffff81811683821601908082111561464b5761464b614616565b5092915050565b803567ffffffffffffffff81168114612641575f80fd5b5f60208284031215614679575f80fd5b611a2e82614652565b5f67ffffffffffffffff80831681810361469e5761469e614616565b6001019392505050565b803560238110612641575f80fd5b602381106146c6576146c6613f66565b9052565b5f808335601e198436030181126146df575f80fd5b830160208101925035905067ffffffffffffffff8111156146fe575f80fd5b803603821315614004575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b60208152813560208201525f61474c60208401614652565b67ffffffffffffffff8082166040850152614769604086016146a8565b915061477860608501836146b6565b61478560608601866146ca565b925061010080608087015261479f6101208701858461470c565b9350826147ae60808901614652565b1660a087015260a087013560c087015260c087013560e087015260e0870135818701525050508091505092915050565b80820180821115610bc057610bc0614616565b5f60208284031215614801575f80fd5b611a2e826146a8565b5f808335601e1984360301811261481f575f80fd5b83018035915067ffffffffffffffff821115614839575f80fd5b602001915036819003821315614004575f80fd5b602081525f611a2b60208301848661470c565b5f60033d111561323a5760045f803e505f5160e01c90565b5f60443d10156148855790565b6040516003193d81016004833e81513d67ffffffffffffffff81602484011181841117156148b557505050505090565b82850191508151818111156148cd5750505050505090565b843d87010160208285010111156148e75750505050505090565b6148f66020828601018761413a565b509095945050505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f611a2e6020830184614901565b60208101610bc082846146b6565b81810381811115610bc057610bc0614616565b8082028115828204841417610bc057610bc0614616565b5f60208284031215614989575f80fd5b813567ffffffffffffffff808211156149a0575f80fd5b90830190604082860312156149b3575f80fd5b6040516149bf816140da565b823581526020830135828111156149d4575f80fd5b6149e08782860161418e565b60208301525095945050505050565b5f8060408385031215614a00575f80fd5b825160018110614a0e575f80fd5b602084015190925067ffffffffffffffff811115614a2a575f80fd5b614a36858286016143f5565b9150509250929050565b5f805f60608486031215614a52575f80fd5b8351614a5d81613f94565b6020850151909350614a6e81613f94565b604085015190925061430381614229565b6001600160a01b0388811682528716602082015263ffffffff8616604082015260e060608201525f853560038110614ab5575f80fd5b60e0830152614ac760208701876146ca565b6040610100850152614ade6101208501828461470c565b6001600160801b03978816608086015295871660a0850152505050921660c090920191909152949350505050565b5f60608284031215614b1c575f80fd5b604051614b28816140b4565b8235614b3381614229565b8152602083013561450c81614229565b5f60408284031215614b53575f80fd5b611a2e83836143c1565b5f60208284031215614b6d575f80fd5b604051614b79816140fa565b614b8283614524565b81529392505050565b5f60808284031215614b9b575f80fd5b604051614ba78161411a565b823581526020830135614bb981613f94565b60208201526040830135614bcc81613f94565b60408201526060830135614bdf81614229565b60608201529392505050565b803560ff81168114612641575f80fd5b5f60208284031215614c0b575f80fd5b813567ffffffffffffffff80821115614c22575f80fd5b9083019060808286031215614c35575f80fd5b604051614c418161411a565b82358152602083013582811115614c56575f80fd5b614c628782860161418e565b602083015250604083013582811115614c79575f80fd5b614c858782860161418e565b604083015250614c9760608401614beb565b606082015295945050505050565b848152608060208201525f614cbd6080830186614901565b8281036040840152614ccf8186614901565b91505060ff8316606083015295945050505050565b5f60408284031215614cf4575f80fd5b604051614d00816140da565b82358152614d1060208401614524565b60208201529392505050565b5f60208284031215614d2c575f80fd5b604051614d38816140fa565b9135825250919050565b5f805f805f8060c08789031215614d57575f80fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b5f60208284031215614d91575f80fd5b8151611a2e81613f94565b8781528660208201526001600160a01b03861660408201528460608201528360808201528260a082015260e060c08201525f614ddb60e0830184614901565b9998505050505050505050565b5f6020808385031215614df9575f80fd5b823567ffffffffffffffff80821115614e10575f80fd5b81850191506040808388031215614e25575f80fd5b8051614e30816140da565b833581528484013583811115614e44575f80fd5b80850194505087601f850112614e58575f80fd5b833583811115614e6a57614e6a6140a0565b82519350614e7d868260051b018561413a565b80845260609081028501860190868501908a831115614e9a575f80fd5b958701955b82871015614ee35780878c031215614eb5575f80fd5b8451614ec0816140b4565b873581528888013589820152858801358682015282529586019590870190614e9f565b505050938401919091525090949350505050565b634e487b7160e01b5f52603260045260245ffd5b828152604060208201525f611a2b6040830184614901565b67ffffffffffffffff83168152604060208201525f611a2b6040830184614901565b5f81518060208401855e5f93019283525090919050565b5f611a2e8284614f45565b5f808335601e19843603018112614f7c575f80fd5b830160208101925035905067ffffffffffffffff811115614f9b575f80fd5b8060051b3603821315614004575f80fd5b8183525f6001600160fb1b03831115614fc3575f80fd5b8260051b80836020870137939093016020019392505050565b6001600160a01b03851681526001600160e01b031984166020820152604081018390526080606082015260ff61501183614beb565b1660808201525f602083013561502681614218565b63ffffffff80821660a0850152604085013560c085015267ffffffffffffffff61505260608701614652565b1660e08501526080850135915061506882614218565b61010081831681860152610120925060a08601358386015261508d60c0870187614f67565b9250836101408701526150a56101a087018483614fac565b60e088013561016088015291909601356101809095019490945250919695505050505050565b5f6001600160fb1b038311156150df575f80fd5b8260051b80858437919091019392505050565b6001600160a01b0383168152604060208201525f611a2b6040830184614901565b5f8060408385031215615124575f80fd5b61512d836145ee565b9150602083015167ffffffffffffffff811115614a2a575f80fd5b634e487b7160e01b5f52601260045260245ffd5b5f8261517657634e487b7160e01b5f52601260045260245ffd5b500490565b6001600160e01b0319871681527fff000000000000000000000000000000000000000000000000000000000000008681166004830152851660058201525f6151cf6151c96006840187614f45565b85614f45565b6001600160c01b0319939093168352505060080195945050505050565b63ffffffff81811683821601908082111561464b5761464b61461656fe60c0604052348015600e575f80fd5b5060405161032c38038061032c833981016040819052602b916036565b6080523360a052604c565b5f602082840312156045575f80fd5b5051919050565b60805160a0516102ba6100725f395f81816052015261010d01525f60cf01526102ba5ff3fe608060405260043610610036575f3560e01c8063338c5371146100415780639bb66b2814610091578063e905182a146100be575f80fd5b3661003d57005b5f80fd5b34801561004c575f80fd5b506100747f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561009c575f80fd5b506100b06100ab3660046101ae565b6100ff565b604051610088929190610237565b3480156100c9575f80fd5b506100f17f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610088565b5f6060336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461014a576040516282b42960e81b815260040160405180910390fd5b846001600160a01b03168484604051610164929190610275565b5f60405180830381855af49150503d805f811461019c576040519150601f19603f3d011682016040523d82523d5f602084013e6101a1565b606091505b5091509150935093915050565b5f805f604084860312156101c0575f80fd5b83356001600160a01b03811681146101d6575f80fd5b9250602084013567ffffffffffffffff808211156101f2575f80fd5b818601915086601f830112610205575f80fd5b813581811115610213575f80fd5b876020828501011115610224575f80fd5b6020830194508093505050509250925092565b8215158152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f8301168401019150509392505050565b818382375f910190815291905056fea26469706673582212207f8ca0f108479aa0bdad395f48bcd618386aaeddd23d9abd5fbee2190be446a364736f6c63430008190033a26469706673582212209bab1cf32abc046a68885e3fc1b92a4ce6f546476387d0c8b1c4524f0100d22764736f6c6343000819003300000000000000000000000068cfb0df884e488e362690408231c316ed7348af000000000000000000000000ad4a6d5dae036fe490b34c08c7085c6b2ae69969000000000000000000000000000000000000000000000000000000000000000103170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c111314000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000de0b6b3a7640000