0 txs
15 calls
constructor
constructor(address _avsDirectory, address _rewardsCoordinator, address _registryCoordinator, address _stakeRegistry, address _permissionController, address _allocationManager)
functions
aggregator
viewfunction aggregator() view returns (address)
allocationManager
viewfunction allocationManager() view returns (address)
allTaskHashes
viewfunction allTaskHashes(uint32) view returns (bytes32)
allTaskResponses
viewfunction allTaskResponses(uint32) view returns (bytes32)
avsDirectory
viewfunction avsDirectory() view returns (address)
blsApkRegistry
viewfunction blsApkRegistry() view returns (address)
checkSignatures
viewfunction checkSignatures(bytes32 msgHash, bytes quorumNumbers, uint32 referenceBlockNumber, tuple params) view returns (tuple, bytes32)
delegation
viewfunction delegation() view returns (address)
generator
viewfunction generator() view returns (address)
getOperatorRestakedStrategies
viewfunction getOperatorRestakedStrategies(address operator) view returns (address[])
getRestakeableStrategies
viewfunction getRestakeableStrategies() view returns (address[])
latestTaskNum
viewfunction latestTaskNum() view returns (uint32)
operatorWhitelist
viewfunction operatorWhitelist(address) view returns (bool)
owner
viewfunction owner() view returns (address)
registryCoordinator
viewfunction registryCoordinator() view returns (address)
rewardsInitiator
viewfunction rewardsInitiator() view returns (address)
stakeRegistry
viewfunction stakeRegistry() view returns (address)
staleStakesForbidden
viewfunction staleStakesForbidden() view returns (bool)
TASK_RESPONSE_WINDOW_BLOCK
viewfunction TASK_RESPONSE_WINDOW_BLOCK() view returns (uint32)
taskNumber
viewfunction taskNumber() view returns (uint32)
trySignatureAndApkVerification
viewfunction trySignatureAndApkVerification(bytes32 msgHash, tuple apk, tuple apkG2, tuple sigma) view returns (bool pairingSuccessful, bool siganatureIsValid)
whitelistEnabled
viewfunction whitelistEnabled() view returns (bool)
addOperatorsToWhitelist
nonpayablefunction addOperatorsToWhitelist(address[] operators)
addPendingAdmin
nonpayablefunction addPendingAdmin(address admin)
createAVSRewardsSubmission
nonpayablefunction createAVSRewardsSubmission(tuple[] rewardsSubmissions)
createNewTask
nonpayablefunction createNewTask(string taskDetails, uint32 quorumThresholdPercentage, bytes quorumNumbers)
createOperatorDirectedAVSRewardsSubmission
nonpayablefunction createOperatorDirectedAVSRewardsSubmission(tuple[] operatorDirectedRewardsSubmissions)
deregisterOperatorFromAVS
nonpayablefunction deregisterOperatorFromAVS(address operator)
deregisterOperatorFromOperatorSets
nonpayablefunction deregisterOperatorFromOperatorSets(address operator, uint32[] operatorSetIds)
initialize
nonpayablefunction initialize(address initialOwner, address _rewardsInitiator, address _aggregator, address _generator)
registerOperatorToAVS
nonpayablefunction registerOperatorToAVS(address operator, tuple operatorSignature)
removeAdmin
nonpayablefunction removeAdmin(address admin)
removeAppointee
nonpayablefunction removeAppointee(address appointee, address target, bytes4 selector)
removeOperatorsFromWhitelist
nonpayablefunction removeOperatorsFromWhitelist(address[] operators)
removePendingAdmin
nonpayablefunction removePendingAdmin(address pendingAdmin)
renounceOwnership
nonpayablefunction renounceOwnership()
respondToTask
nonpayablefunction respondToTask(tuple task, tuple taskResponse, tuple nonSignerStakesAndSignature)
setAggregator
nonpayablefunction setAggregator(address _aggregator)
setAppointee
nonpayablefunction setAppointee(address appointee, address target, bytes4 selector)
setClaimerFor
nonpayablefunction setClaimerFor(address claimer)
setGenerator
nonpayablefunction setGenerator(address _generator)
setRewardsInitiator
nonpayablefunction setRewardsInitiator(address newRewardsInitiator)
setStaleStakesForbidden
nonpayablefunction setStaleStakesForbidden(bool value)
setWhitelistEnabled
nonpayablefunction setWhitelistEnabled(bool _whitelistEnabled)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
updateAVSMetadataURI
nonpayablefunction updateAVSMetadataURI(string _metadataURI)
events
Initialized
event Initialized(uint8 version)
NewTaskCreated
event NewTaskCreated(uint32 indexed taskIndex, (string taskDetails, uint32 taskCreatedBlock, bytes quorumNumbers, uint32 quorumThresholdPercentage) task)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
RewardsInitiatorUpdated
event RewardsInitiatorUpdated(address prevRewardsInitiator, address newRewardsInitiator)
StaleStakesForbiddenUpdate
event StaleStakesForbiddenUpdate(bool value)
TaskCompleted
event TaskCompleted(uint32 indexed taskIndex)
TaskResponded
event TaskResponded((uint32 referenceTaskIndex, string taskResponse) taskResponse, (uint32 taskRespondedBlock, bytes32 hashOfNonSigners) taskResponseMetadata)
errors
BitmapValueTooLarge
error BitmapValueTooLarge()
BytesArrayLengthTooLong
error BytesArrayLengthTooLong()
BytesArrayNotOrdered
error BytesArrayNotOrdered()
DelayPeriodNotPassed
error DelayPeriodNotPassed()
ECAddFailed
error ECAddFailed()
ECMulFailed
error ECMulFailed()
ExpModFailed
error ExpModFailed()
InputArrayLengthMismatch
error InputArrayLengthMismatch()
InputEmptyQuorumNumbers
error InputEmptyQuorumNumbers()
InputNonSignerLengthMismatch
error InputNonSignerLengthMismatch()
InvalidBLSPairingKey
error InvalidBLSPairingKey()
InvalidBLSSignature
error InvalidBLSSignature()
InvalidQuorumApkHash
error InvalidQuorumApkHash()
InvalidReferenceBlocknumber
error InvalidReferenceBlocknumber()
NonSignerPubkeysNotSorted
error NonSignerPubkeysNotSorted()
OnlyRegistryCoordinator
error OnlyRegistryCoordinator()
OnlyRegistryCoordinatorOwner
error OnlyRegistryCoordinatorOwner()
OnlyRewardsInitiator
error OnlyRewardsInitiator()
OnlyStakeRegistry
error OnlyStakeRegistry()
ScalarTooLarge
error ScalarTooLarge()
StaleStakesForbidden
error StaleStakesForbidden()
creation bytecode
0x6101c060405234801561001157600080fd5b506040516158ba3803806158ba833981016040819052610030916102d8565b8585858585858585858585858f80806001600160a01b03166080816001600160a01b031681525050806001600160a01b031663683048356040518163ffffffff1660e01b8152600401602060405180830381865afa158015610096573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100ba919061035f565b6001600160a01b031660a0816001600160a01b031681525050806001600160a01b0316635df459466040518163ffffffff1660e01b8152600401602060405180830381865afa158015610111573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610135919061035f565b6001600160a01b031660c0816001600160a01b03168152505060a0516001600160a01b031663df5cf7236040518163ffffffff1660e01b8152600401602060405180830381865afa15801561018e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101b2919061035f565b6001600160a01b0390811660e052978816610100525050938516610140529184166101605283166101805282166101a05216610120526101f0610201565b505050505050505050505050610383565b603254610100900460ff161561026d5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60325460ff908116146102be576032805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146102d557600080fd5b50565b60008060008060008060c087890312156102f157600080fd5b86516102fc816102c0565b602088015190965061030d816102c0565b604088015190955061031e816102c0565b606088015190945061032f816102c0565b6080880151909350610340816102c0565b60a0880151909250610351816102c0565b809150509295509295509295565b60006020828403121561037157600080fd5b815161037c816102c0565b9392505050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516153dc6104de600039600081816108b8015281816109ac01528181610a4b01528181611cdd01526121fd015260008181610c7401528181610dc501528181610e5c01528181612879015281816129f20152612a91015260008181610a9f01528181610b2e01528181610bae01528181612243015281816127b40152818161294d015281816136ad015261388d015260008181611d3301528181611e6701528181611eed01528181612da90152612e340152600081816105eb01526122b401526000818161047b01528181611fd00152818161370201526138ea01526000818161063a015261159e015260008181610430015261170e015260008181610457015281816118710152611a330152600081816104a401528181610f3f015281816112b301528181611409015261164101526153dc6000f3fe608060405234801561001057600080fd5b506004361061028a5760003560e01c80638b00ce7c1161015c578063c1a8e2c5116100ce578063e481af9d11610087578063e481af9d1461067f578063f2fde38b14610687578063f8c8765e1461069a578063f9120af6146106ad578063fc299dee146106c0578063fce36c7d146106d357600080fd5b8063c1a8e2c5146105d6578063ca8aa7c7146105e9578063d07241f01461060f578063d822af3c14610622578063df5cf72314610635578063e03c86321461065c57600080fd5b8063a20b99bf11610120578063a20b99bf1461056a578063a364f4da1461057d578063a98fb35514610590578063b00b6c0a146105a3578063b98d0908146105b6578063ba550880146105c357600080fd5b80638b00ce7c146105105780638da5cb5b146105205780639926ee7d146105315780639da16d8e14610544578063a0169ddd1461055757600080fd5b80633bc28c8c116102005780636b3aa72e116101b95780636b3aa72e146104795780636d14a9871461049f5780636efb4636146104c6578063715018a6146104e757806372d18e8d146104ef5780637afa1eed146104fd57600080fd5b80633bc28c8c146103d5578063416c7e5e146103e85780634a7c7e4b146103fb57806351fb012d1461040e5780635df459461461042b578063683048351461045257600080fd5b80631fdb0cfd116102525780631fdb0cfd14610316578063245a7bfc14610329578063279432eb146103545780632cb223d5146103675780632d89f6fc1461039557806333cfb7b7146103b557600080fd5b8063052d9e7e1461028f578063171f1d5b146102a45780631785f53c146102d35780631ad43189146102e65780631be4b9f714610303575b600080fd5b6102a261029d366004613e9f565b6106e6565b005b6102b76102b2366004614030565b610701565b6040805192151583529015156020830152015b60405180910390f35b6102a26102e1366004614096565b61088b565b6102ee606481565b60405163ffffffff90911681526020016102ca565b6102a26103113660046140fe565b610918565b6102a261032436600461413f565b61098d565b60cc5461033c906001600160a01b031681565b6040516001600160a01b0390911681526020016102ca565b6102a2610362366004614096565b610a1e565b6103876103753660046141b4565b60cb6020526000908152604090205481565b6040519081526020016102ca565b6103876103a33660046141b4565b60ca6020526000908152604090205481565b6103c86103c3366004614096565b610a7a565b6040516102ca91906141d1565b6102a26103e3366004614096565b610f29565b6102a26103f6366004613e9f565b610f3d565b6102a2610409366004614096565b610ff9565b60cf5461041b9060ff1681565b60405190151581526020016102ca565b61033c7f000000000000000000000000000000000000000000000000000000000000000081565b61033c7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000061033c565b61033c7f000000000000000000000000000000000000000000000000000000000000000081565b6104d96104d436600461451c565b611023565b6040516102ca9291906145ea565b6102a2611c41565b60c95463ffffffff166102ee565b60cd5461033c906001600160a01b031681565b60c9546102ee9063ffffffff1681565b6065546001600160a01b031661033c565b6102a261053f36600461468e565b611c55565b6102a2610552366004614096565b611cb0565b6102a2610565366004614096565b611d0c565b6102a26105783660046140fe565b611d62565b6102a261058b366004614096565b611f5c565b6102a261059e36600461473c565b611fb1565b6102a26105b1366004614784565b612005565b60005461041b9060ff1681565b6102a26105d136600461413f565b6121de565b6102a26105e436600461480a565b612238565b7f000000000000000000000000000000000000000000000000000000000000000061033c565b6102a261061d366004614859565b6122e9565b6102a26106303660046140fe565b612747565b61033c7f000000000000000000000000000000000000000000000000000000000000000081565b61041b61066a366004614096565b60ce6020526000908152604090205460ff1681565b6103c86127ae565b6102a2610695366004614096565b612b5a565b6102a26106a83660046148f4565b612bd0565b6102a26106bb366004614096565b612d16565b60975461033c906001600160a01b031681565b6102a26106e13660046140fe565b612d40565b6106ee612e6b565b60cf805460ff1916911515919091179055565b60008060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018787600001518860200151886000015160006002811061074957610749614950565b60200201518951600160200201518a6020015160006002811061076e5761076e614950565b60200201518b6020015160016002811061078a5761078a614950565b602090810291909101518c518d8301516040516107e79a99989796959401988952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b6040516020818303038152906040528051906020012060001c61080a9190614966565b905061087d61082361081c8884612ec5565b8690612f37565b61082b612fad565b6108736108648561085e604080518082018252600080825260209182015281518083019092526001825260029082015290565b90612ec5565b61086d8c61306d565b90612f37565b886201d4c06130fc565b909890975095505050505050565b610893612e6b565b60405163268959e560e01b81523060048201526001600160a01b0382811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063268959e5906044015b600060405180830381600087803b1580156108fd57600080fd5b505af1158015610911573d6000803e3d6000fd5b5050505050565b610920612e6b565b60005b8181101561098857600160ce600085858581811061094357610943614950565b90506020020160208101906109589190614096565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055600101610923565b505050565b610995612e6b565b604051634a86c03760e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063950d806e906109e7903090879087908790600401614988565b600060405180830381600087803b158015610a0157600080fd5b505af1158015610a15573d6000803e3d6000fd5b50505050505050565b610a26612e6b565b60405163eb5a4e8760e01b81523060048201526001600160a01b0382811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063eb5a4e87906044016108e3565b6040516309aa152760e11b81526001600160a01b0382811660048301526060916000917f000000000000000000000000000000000000000000000000000000000000000016906313542a4e90602401602060405180830381865afa158015610ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0a91906149bb565b60405163871ef04960e01b8152600481018290529091506000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063871ef04990602401602060405180830381865afa158015610b75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b9991906149d4565b90506001600160c01b0381161580610c3357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2e91906149fd565b60ff16155b15610c4f57505060408051600081526020810190915292915050565b6000610c63826001600160c01b0316613316565b90506000805b8251811015610d2f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633ca5a5f5848381518110610cb357610cb3614950565b01602001516040516001600160e01b031960e084901b16815260f89190911c6004820152602401602060405180830381865afa158015610cf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1b91906149bb565b610d259083614a36565b9150600101610c69565b506000816001600160401b03811115610d4a57610d4a613ebc565b604051908082528060200260200182016040528015610d73578160200160208202803683370190505b5090506000805b8451811015610f1c576000858281518110610d9757610d97614950565b0160200151604051633ca5a5f560e01b815260f89190911c6004820181905291506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633ca5a5f590602401602060405180830381865afa158015610e0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3091906149bb565b905060005b81811015610f11576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063adc804da906044016040805180830381865afa158015610eaa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ece9190614a5e565b60000151868681518110610ee457610ee4614950565b6001600160a01b039092166020928302919091019091015284610f0681614aa1565b955050600101610e35565b505050600101610d7a565b5090979650505050505050565b610f31612e6b565b610f3a816133d8565b50565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fbf9190614aba565b6001600160a01b0316336001600160a01b031614610ff057604051637070f3b160e11b815260040160405180910390fd5b610f3a81613441565b611001612e6b565b60cd80546001600160a01b0319166001600160a01b0392909216919091179055565b604080518082019091526060808252602082015260008481036110585760405162f8202d60e51b815260040160405180910390fd5b60408301515185148015611070575060a08301515185145b8015611080575060c08301515185145b8015611090575060e08301515185145b6110ad576040516343714afd60e01b815260040160405180910390fd5b825151602084015151146110d457604051635f832f4160e01b815260040160405180910390fd5b4363ffffffff168463ffffffff161061110057604051634b874f4560e01b815260040160405180910390fd5b6040805180820182526000808252602080830191909152825180840190935260608084529083015290866001600160401b0381111561114157611141613ebc565b60405190808252806020026020018201604052801561116a578160200160208202803683370190505b506020820152866001600160401b0381111561118857611188613ebc565b6040519080825280602002602001820160405280156111b1578160200160208202803683370190505b50815260408051808201909152606080825260208201528560200151516001600160401b038111156111e5576111e5613ebc565b60405190808252806020026020018201604052801561120e578160200160208202803683370190505b5081526020860151516001600160401b0381111561122e5761122e613ebc565b604051908082528060200260200182016040528015611257578160200160208202803683370190505b50816020018190525060006113298a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051639aa1653d60e01b815290516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169350639aa1653d925060048083019260209291908290030181865afa158015611300573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132491906149fd565b613488565b905060005b876020015151811015611578576113738860200151828151811061135457611354614950565b6020026020010151805160009081526020918201519091526040902090565b8360200151828151811061138957611389614950565b602090810291909101015280156114075760208301516113aa600183614ad7565b815181106113ba576113ba614950565b602002602001015160001c836020015182815181106113db576113db614950565b602002602001015160001c1161140757604051600162239afb60e21b0319815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166304ec63518460200151838151811061144c5761144c614950565b60200260200101518b8b60000151858151811061146b5761146b614950565b60200260200101516040518463ffffffff1660e01b81526004016114a89392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa1580156114c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e991906149d4565b6001600160c01b03168360000151828151811061150857611508614950565b60200260200101818152505061156e61081c611542848660000151858151811061153457611534614950565b6020026020010151166134c6565b8a60200151848151811061155857611558614950565b60200260200101516134f190919063ffffffff16565b945060010161132e565b5050611583836135b5565b6000805491945060ff909116908161159c57600061161e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c448feb86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061161e9190614aea565b63ffffffff16905060005b8a811015611ba257821561170c578963ffffffff16827f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663249a0c428f8f8681811061168057611680614950565b60405160e085901b6001600160e01b031916815292013560f81c600483015250602401602060405180830381865afa1580156116c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e491906149bb565b6116ee9190614a36565b1161170c5760405163affc5edb60e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166368bccaac8d8d8481811061174d5761174d614950565b9050013560f81c60f81b60f81c8c8c60a00151858151811061177157611771614950565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa1580156117cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f19190614b07565b6001600160401b0319166118148a60400151838151811061135457611354614950565b67ffffffffffffffff19161461183d5760405163e1310aed60e01b815260040160405180910390fd5b61186d8960400151828151811061185657611856614950565b602002602001015187612f3790919063ffffffff16565b95507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c8294c568d8d848181106118b0576118b0614950565b9050013560f81c60f81b60f81c8c8c60c0015185815181106118d4576118d4614950565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015611930573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119549190614b32565b8560200151828151811061196a5761196a614950565b6001600160601b0390921660209283029190910182015285015180518290811061199657611996614950565b6020026020010151856000015182815181106119b4576119b4614950565b60200260200101906001600160601b031690816001600160601b0316815250506000805b8a6020015151811015611b9857611a2c866000015182815181106119fe576119fe614950565b60200260200101518f8f86818110611a1857611a18614950565b600192013560f81c9290921c811614919050565b15611b90577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f2be94ae8f8f86818110611a7257611a72614950565b9050013560f81c60f81b60f81c8e89602001518581518110611a9657611a96614950565b60200260200101518f60e001518881518110611ab457611ab4614950565b60200260200101518781518110611acd57611acd614950565b60209081029190910101516040516001600160e01b031960e087901b16815260ff909416600485015263ffffffff92831660248501526044840191909152166064820152608401602060405180830381865afa158015611b31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b559190614b32565b8751805185908110611b6957611b69614950565b60200260200101818151611b7d9190614b4f565b6001600160601b03169052506001909101905b6001016119d8565b5050600101611629565b505050600080611bbc8c868a606001518b60800151610701565b9150915081611bde576040516367988d3360e01b815260040160405180910390fd5b80611bfc5760405163ab1b236b60e01b815260040160405180910390fd5b50506000878260200151604051602001611c17929190614b6e565b60408051808303601f190181529190528051602090910120929b929a509198505050505050505050565b611c49612e6b565b611c536000613650565b565b60cf54829060ff161580611c8157506001600160a01b038116600090815260ce602052604090205460ff165b611ca65760405162461bcd60e51b8152600401611c9d90614bb6565b60405180910390fd5b61098883836136a2565b611cb8612e6b565b604051634f906cf960e01b81523060048201526001600160a01b0382811660248301527f00000000000000000000000000000000000000000000000000000000000000001690634f906cf9906044016108e3565b611d14612e6b565b60405163a0169ddd60e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063a0169ddd906024016108e3565b611d6a613739565b60005b81811015611ed5576000805b848484818110611d8b57611d8b614950565b9050602002810190611d9d9190614c08565b611dab906040810190614c28565b9050811015611e1557848484818110611dc657611dc6614950565b9050602002810190611dd89190614c08565b611de6906040810190614c28565b82818110611df657611df6614950565b9050604002016020013582611e0b9190614a36565b9150600101611d79565b50611e62333083878787818110611e2e57611e2e614950565b9050602002810190611e409190614c08565b611e51906040810190602001614096565b6001600160a01b0316929190613764565b611ecc7f000000000000000000000000000000000000000000000000000000000000000082868686818110611e9957611e99614950565b9050602002810190611eab9190614c08565b611ebc906040810190602001614096565b6001600160a01b031691906137d5565b50600101611d6d565b50604051634e5cd2fd60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639cb9a5fa90611f2690309086908690600401614d83565b600060405180830381600087803b158015611f4057600080fd5b505af1158015611f54573d6000803e3d6000fd5b505050505050565b60cf54819060ff161580611f8857506001600160a01b038116600090815260ce602052604090205460ff165b611fa45760405162461bcd60e51b8152600401611c9d90614bb6565b611fad82613882565b5050565b611fb9612e6b565b60405163a98fb35560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a98fb355906108e3908490600401614f45565b60cd546001600160a01b0316331461207d5760405162461bcd60e51b815260206004820152603560248201527f436861696e62617365536572766963654d616e616765723a2067656e6572617460448201527437b91036bab9ba103132903a34329031b0b63632b960591b6064820152608401611c9d565b60408051608081018252606080825260006020830181905292820181905281019190915285858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509082525063ffffffff438116602080840191909152908516606083015260408051601f85018390048302810183019091528381529084908490819084018382808284376000920191909152505050506040808301919091525161213d908290602001614f5f565b60408051601f19818403018152828252805160209182012060c9805463ffffffff908116600090815260ca90945293909220555416907fb456431ed13b80d91ab280ac82018e48afde7e840d354010364822d756914479906121a0908490614f5f565b60405180910390a260c9546121bc9063ffffffff166001614fc5565b60c9805463ffffffff191663ffffffff92909216919091179055505050505050565b6121e6612e6b565b604051630664120160e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906306641201906109e7903090879087908790600401614988565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461228157604051634394dbdf60e11b815260040160405180910390fd5b604080516060810182526001600160a01b0380851682523060208301528183018490529151636e3492b560e01b815290917f00000000000000000000000000000000000000000000000000000000000000001690636e3492b5906109e7908490600401614fe1565b60cc546001600160a01b031633146123625760405162461bcd60e51b815260206004820152603660248201527f436861696e62617365536572766963654d616e616765723a20616767726567616044820152753a37b91036bab9ba103132903a34329031b0b63632b960511b6064820152608401611c9d565b600061237460408501602086016141b4565b90503660006123866040870187615050565b9092509050600061239d60808801606089016141b4565b905060ca60006123b060208901896141b4565b63ffffffff1663ffffffff16815260200190815260200160002054876040516020016123dc9190615096565b60405160208183030381529060405280519060200120146124845760405162461bcd60e51b815260206004820152605660248201527f436861696e62617365536572766963654d616e616765723a20737570706c696560448201527f64207461736b20646f6573206e6f74206d6174636820746865206f6e6520726560648201527518dbdc991959081a5b881d1a194818dbdb9d1c9858dd60521b608482015260a401611c9d565b600060cb8161249660208a018a6141b4565b63ffffffff1663ffffffff16815260200190815260200160002054146125325760405162461bcd60e51b815260206004820152604560248201527f436861696e62617365536572766963654d616e616765723a206167677265676160448201527f746f722068617320616c726561647920726573706f6e64656420746f20746865606482015264207461736b60d81b608482015260a401611c9d565b6000866040516020016125459190615165565b60405160208183030381529060405280519060200120905060008061256d8387878a8c611023565b9150915060005b85811015612689578463ffffffff168360200151828151811061259957612599614950565b60200260200101516125ab9190615178565b6001600160601b03166064846000015183815181106125cc576125cc614950565b60200260200101516001600160601b03166125e791906151a1565b10156126815760405162461bcd60e51b815260206004820152605960248201527f436861696e62617365536572766963654d616e616765723a207369676e61746f60448201527f7269657320646f206e6f74206f776e206174206c65617374207468726573686f60648201527f6c642070657263656e74616765206f6620612071756f72756d00000000000000608482015260a401611c9d565b600101612574565b5060408051808201825263ffffffff431681526020808201849052915190916126b6918c918491016151b8565b6040516020818303038152906040528051906020012060cb60008c60000160208101906126e391906141b4565b63ffffffff1663ffffffff168152602001908152602001600020819055507fd0e833257cf2514f7f416921130672e0a5099b141e19ad5285b881ec34e9eb548a826040516127329291906151b8565b60405180910390a15050505050505050505050565b61274f612e6b565b60005b818110156109885760ce600084848481811061277057612770614950565b90506020020160208101906127859190614096565b6001600160a01b031681526020810191909152604001600020805460ff19169055600101612752565b606060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612810573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061283491906149fd565b60ff1690508060000361285557505060408051600081526020810190915290565b6000805b8281101561290057604051633ca5a5f560e01b815260ff821660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633ca5a5f590602401602060405180830381865afa1580156128c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ec91906149bb565b6128f69083614a36565b9150600101612859565b506000816001600160401b0381111561291b5761291b613ebc565b604051908082528060200260200182016040528015612944578160200160208202803683370190505b5090506000805b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129cd91906149fd565b60ff16811015612b5057604051633ca5a5f560e01b815260ff821660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633ca5a5f590602401602060405180830381865afa158015612a41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a6591906149bb565b905060005b81811015612b46576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063adc804da906044016040805180830381865afa158015612adf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b039190614a5e565b60000151858581518110612b1957612b19614950565b6001600160a01b039092166020928302919091019091015283612b3b81614aa1565b945050600101612a6a565b505060010161294b565b5090949350505050565b612b62612e6b565b6001600160a01b038116612bc75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401611c9d565b610f3a81613650565b603254610100900460ff1615808015612bf05750603254600160ff909116105b80612c0a5750303b158015612c0a575060325460ff166001145b612c6d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401611c9d565b6032805460ff191660011790558015612c90576032805461ff0019166101001790555b612c9a8585613919565b60cc80546001600160a01b038086166001600160a01b03199283161790925560cd8054928516929091169190911790558015610911576032805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b612d1e612e6b565b60cc80546001600160a01b0319166001600160a01b0392909216919091179055565b612d48613739565b60005b81811015612e1c57612da43330858585818110612d6a57612d6a614950565b9050602002810190612d7c91906151eb565b60400135868686818110612d9257612d92614950565b9050602002810190611e4091906151eb565b612e147f0000000000000000000000000000000000000000000000000000000000000000848484818110612dda57612dda614950565b9050602002810190612dec91906151eb565b60400135858585818110612e0257612e02614950565b9050602002810190611eab91906151eb565b600101612d4b565b5060405163fce36c7d60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063fce36c7d90611f269085908590600401615201565b6065546001600160a01b03163314611c535760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611c9d565b6040805180820190915260008082526020820152612ee1613db7565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa90508080612f1057fe5b5080612f2f57604051632319df1960e11b815260040160405180910390fd5b505092915050565b6040805180820190915260008082526020820152612f53613dd5565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa90508080612f8e57fe5b5080612f2f5760405163d4b68fd760e01b815260040160405180910390fd5b612fb5613df3565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b60408051808201909152600080825260208201526000808061309d60008051602061538783398151915286614966565b90505b6130a981613996565b909350915060008051602061538783398151915282830983036130e2576040805180820190915290815260208101919091529392505050565b6000805160206153878339815191526001820890506130a0565b60408051808201825286815260208082018690528251808401909352868352820184905260009182919061312e613e18565b60005b60028110156132e95760006131478260066151a1565b905084826002811061315b5761315b614950565b6020020151518361316d836000614a36565b600c811061317d5761317d614950565b602002015284826002811061319457613194614950565b602002015160200151838260016131ab9190614a36565b600c81106131bb576131bb614950565b60200201528382600281106131d2576131d2614950565b60200201515151836131e5836002614a36565b600c81106131f5576131f5614950565b602002015283826002811061320c5761320c614950565b6020020151516001602002015183613225836003614a36565b600c811061323557613235614950565b602002015283826002811061324c5761324c614950565b60200201516020015160006002811061326757613267614950565b602002015183613278836004614a36565b600c811061328857613288614950565b602002015283826002811061329f5761329f614950565b6020020151602001516001600281106132ba576132ba614950565b6020020151836132cb836005614a36565b600c81106132db576132db614950565b602002015250600101613131565b506132f2613e37565b60006020826101808560088cfa9151919c9115159b50909950505050505050505050565b6060600080613324846134c6565b61ffff166001600160401b0381111561333f5761333f613ebc565b6040519080825280601f01601f191660200182016040528015613369576020820181803683370190505b5090506000805b825182108015613381575061010081105b15612b50576001811b9350858416156133c8578060f81b8383815181106133aa576133aa614950565b60200101906001600160f81b031916908160001a9053508160010191505b6133d181614aa1565b9050613370565b609754604080516001600160a01b03928316815291831660208301527fe11cddf1816a43318ca175bbc52cd0185436e9cbead7c83acc54a73e461717e3910160405180910390a1609780546001600160a01b0319166001600160a01b0392909216919091179055565b6000805460ff19168215159081179091556040519081527f40e4ed880a29e0f6ddce307457fb75cddf4feef7d3ecb0301bfdf4976a0e2dfc9060200160405180910390a150565b60008061349484613a18565b9050808360ff166001901b116134bd5760405163ca95733360e01b815260040160405180910390fd5b90505b92915050565b6000805b82156134c0576134db600184614ad7565b90921691806134e9816152eb565b9150506134ca565b60408051808201909152600080825260208201526102008261ffff161061352e576040516001623b158360e11b0319815260040160405180910390fd5b8161ffff166001036135415750816134c0565b6040805180820190915260008082526020820181905284906001905b8161ffff168661ffff16106135aa57600161ffff871660ff83161c8116900361358d5761358a8484612f37565b93505b6135978384612f37565b92506201fffe600192831b16910161355d565b509195945050505050565b604080518082019091526000808252602082015281511580156135da57506020820151155b156135f8575050604080518082019091526000808252602082015290565b604051806040016040528083600001518152602001600080516020615387833981519152846020015161362b9190614966565b61364390600080516020615387833981519152614ad7565b905292915050565b919050565b606580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146136eb57604051634394dbdf60e11b815260040160405180910390fd5b604051639926ee7d60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639926ee7d90611f26908590859060040161530c565b6097546001600160a01b03163314611c5357604051638e79fdb560e01b815260040160405180910390fd5b6040516001600160a01b03808516602483015283166044820152606481018290526137cf9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613ad8565b50505050565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301526000919085169063dd62ed3e90604401602060405180830381865afa158015613825573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061384991906149bb565b90506137cf8463095ea7b360e01b856138628686614a36565b6040516001600160a01b0390921660248301526044820152606401613798565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146138cb57604051634394dbdf60e11b815260040160405180910390fd5b6040516351b27a6d60e11b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063a364f4da906024016108e3565b603254610100900460ff166139845760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401611c9d565b61398d82613650565b611fad816133d8565b60008080600080516020615387833981519152600360008051602061538783398151915286600080516020615387833981519152888909090890506000613a0c827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f52600080516020615387833981519152613bad565b91959194509092505050565b600061010082511115613a3e57604051637da54e4760e11b815260040160405180910390fd5b8151600003613a4f57506000919050565b60008083600081518110613a6557613a65614950565b0160200151600160f89190911c81901b92505b8451811015613acf57848181518110613a9357613a93614950565b0160200151600160f89190911c1b9150828211613ac357604051631019106960e31b815260040160405180910390fd5b91811791600101613a78565b50909392505050565b6000613b2d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613c279092919063ffffffff16565b9050805160001480613b4e575080806020019051810190613b4e9190615357565b6109885760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401611c9d565b600080613bb8613e37565b613bc0613e55565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa92508280613bfd57fe5b5082613c1c5760405163d51edae360e01b815260040160405180910390fd5b505195945050505050565b6060613c368484600085613c3e565b949350505050565b606082471015613c9f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401611c9d565b600080866001600160a01b03168587604051613cbb9190615374565b60006040518083038185875af1925050503d8060008114613cf8576040519150601f19603f3d011682016040523d82523d6000602084013e613cfd565b606091505b5091509150613d0e87838387613d19565b979650505050505050565b60608315613d88578251600003613d81576001600160a01b0385163b613d815760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611c9d565b5081613c36565b613c368383815115613d9d5781518083602001fd5b8060405162461bcd60e51b8152600401611c9d9190614f45565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060400160405280613e06613e73565b8152602001613e13613e73565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b8015158114610f3a57600080fd5b600060208284031215613eb157600080fd5b81356134bd81613e91565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715613ef457613ef4613ebc565b60405290565b60405161010081016001600160401b0381118282101715613ef457613ef4613ebc565b604051606081016001600160401b0381118282101715613ef457613ef4613ebc565b604051601f8201601f191681016001600160401b0381118282101715613f6757613f67613ebc565b604052919050565b600060408284031215613f8157600080fd5b613f89613ed2565b823581526020928301359281019290925250919050565b600082601f830112613fb157600080fd5b613fb9613ed2565b806040840185811115613fcb57600080fd5b845b81811015613fe5578035845260209384019301613fcd565b509095945050505050565b60006080828403121561400257600080fd5b61400a613ed2565b90506140168383613fa0565b81526140258360408401613fa0565b602082015292915050565b600080600080610120858703121561404757600080fd5b843593506140588660208701613f6f565b92506140678660608701613ff0565b91506140768660e08701613f6f565b905092959194509250565b6001600160a01b0381168114610f3a57600080fd5b6000602082840312156140a857600080fd5b81356134bd81614081565b60008083601f8401126140c557600080fd5b5081356001600160401b038111156140dc57600080fd5b6020830191508360208260051b85010111156140f757600080fd5b9250929050565b6000806020838503121561411157600080fd5b82356001600160401b0381111561412757600080fd5b614133858286016140b3565b90969095509350505050565b60008060006060848603121561415457600080fd5b833561415f81614081565b9250602084013561416f81614081565b915060408401356001600160e01b03198116811461418c57600080fd5b809150509250925092565b63ffffffff81168114610f3a57600080fd5b803561364b81614197565b6000602082840312156141c657600080fd5b81356134bd81614197565b602080825282518282018190526000918401906040840190835b81811015613fe55783516001600160a01b03168352602093840193909201916001016141eb565b60008083601f84011261422457600080fd5b5081356001600160401b0381111561423b57600080fd5b6020830191508360208285010111156140f757600080fd5b60006001600160401b0382111561426c5761426c613ebc565b5060051b60200190565b600082601f83011261428757600080fd5b813561429a61429582614253565b613f3f565b8082825260208201915060208360051b8601019250858311156142bc57600080fd5b602085015b838110156142e25780356142d481614197565b8352602092830192016142c1565b5095945050505050565b600082601f8301126142fd57600080fd5b813561430b61429582614253565b8082825260208201915060208360061b86010192508583111561432d57600080fd5b602085015b838110156142e2576143448782613f6f565b8352602090920191604001614332565b600082601f83011261436557600080fd5b813561437361429582614253565b8082825260208201915060208360051b86010192508583111561439557600080fd5b602085015b838110156142e25780356001600160401b038111156143b857600080fd5b6143c7886020838a0101614276565b8452506020928301920161439a565b600061018082840312156143e957600080fd5b6143f1613efa565b905081356001600160401b0381111561440957600080fd5b61441584828501614276565b82525060208201356001600160401b0381111561443157600080fd5b61443d848285016142ec565b60208301525060408201356001600160401b0381111561445c57600080fd5b614468848285016142ec565b60408301525061447b8360608401613ff0565b606082015261448d8360e08401613f6f565b60808201526101208201356001600160401b038111156144ac57600080fd5b6144b884828501614276565b60a0830152506101408201356001600160401b038111156144d857600080fd5b6144e484828501614276565b60c0830152506101608201356001600160401b0381111561450457600080fd5b61451084828501614354565b60e08301525092915050565b60008060008060006080868803121561453457600080fd5b8535945060208601356001600160401b0381111561455157600080fd5b61455d88828901614212565b909550935050604086013561457181614197565b915060608601356001600160401b0381111561458c57600080fd5b614598888289016143d6565b9150509295509295909350565b600081518084526020840193506020830160005b828110156145e05781516001600160601b03168652602095860195909101906001016145b9565b5093949350505050565b604081526000835160408084015261460560808401826145a5565b90506020850151603f1984830301606085015261462282826145a5565b925050508260208301529392505050565b6000806001600160401b0384111561464d5761464d613ebc565b50601f8301601f191660200161466281613f3f565b91505082815283838301111561467757600080fd5b828260208301376000602084830101529392505050565b600080604083850312156146a157600080fd5b82356146ac81614081565b915060208301356001600160401b038111156146c757600080fd5b8301606081860312156146d957600080fd5b6146e1613f1d565b81356001600160401b038111156146f757600080fd5b8201601f8101871361470857600080fd5b61471787823560208401614633565b8252506020828101359082015260409182013591810191909152919491935090915050565b60006020828403121561474e57600080fd5b81356001600160401b0381111561476457600080fd5b8201601f8101841361477557600080fd5b613c3684823560208401614633565b60008060008060006060868803121561479c57600080fd5b85356001600160401b038111156147b257600080fd5b6147be88828901614212565b90965094505060208601356147d281614197565b925060408601356001600160401b038111156147ed57600080fd5b6147f988828901614212565b969995985093965092949392505050565b6000806040838503121561481d57600080fd5b823561482881614081565b915060208301356001600160401b0381111561484357600080fd5b61484f85828601614276565b9150509250929050565b60008060006060848603121561486e57600080fd5b83356001600160401b0381111561488457600080fd5b84016080818703121561489657600080fd5b925060208401356001600160401b038111156148b157600080fd5b8401604081870312156148c357600080fd5b915060408401356001600160401b038111156148de57600080fd5b6148ea868287016143d6565b9150509250925092565b6000806000806080858703121561490a57600080fd5b843561491581614081565b9350602085013561492581614081565b9250604085013561493581614081565b9150606085013561494581614081565b939692955090935050565b634e487b7160e01b600052603260045260246000fd5b60008261498357634e487b7160e01b600052601260045260246000fd5b500690565b6001600160a01b0394851681529284166020840152921660408201526001600160e01b0319909116606082015260800190565b6000602082840312156149cd57600080fd5b5051919050565b6000602082840312156149e657600080fd5b81516001600160c01b03811681146134bd57600080fd5b600060208284031215614a0f57600080fd5b815160ff811681146134bd57600080fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156134c0576134c0614a20565b6001600160601b0381168114610f3a57600080fd5b60006040828403128015614a7157600080fd5b50614a7a613ed2565b8251614a8581614081565b81526020830151614a9581614a49565b60208201529392505050565b600060018201614ab357614ab3614a20565b5060010190565b600060208284031215614acc57600080fd5b81516134bd81614081565b818103818111156134c0576134c0614a20565b600060208284031215614afc57600080fd5b81516134bd81614197565b600060208284031215614b1957600080fd5b815167ffffffffffffffff19811681146134bd57600080fd5b600060208284031215614b4457600080fd5b81516134bd81614a49565b6001600160601b0382811682821603908111156134c0576134c0614a20565b63ffffffff60e01b8360e01b16815260006004820183516020850160005b82811015614baa578151845260209384019390910190600101614b8c565b50919695505050505050565b60208082526032908201527f436861696e62617365536572766963654d616e616765723a206f70657261746f6040820152711c881b9bdd081a5b881dda1a5d195b1a5cdd60721b606082015260800190565b6000823560be19833603018112614c1e57600080fd5b9190910192915050565b6000808335601e19843603018112614c3f57600080fd5b8301803591506001600160401b03821115614c5957600080fd5b6020019150600681901b36038213156140f757600080fd5b6000808335601e19843603018112614c8857600080fd5b83016020810192503590506001600160401b03811115614ca757600080fd5b8060061b36038213156140f757600080fd5b81835260208301925060008160005b848110156145e0578135614cdb81614081565b6001600160a01b031686526020820135614cf481614a49565b6001600160601b031660208701526040958601959190910190600101614cc8565b6000808335601e19843603018112614d2c57600080fd5b83016020810192503590506001600160401b03811115614d4b57600080fd5b8036038213156140f757600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0384168152604060208201819052810182905260006060600584901b83018101908301858360be1936839003015b87821015614ee757868503605f190184528235818112614dd757600080fd5b8901614de38180614c71565b60c08852614df560c089018284614cb9565b9150506020820135614e0681614081565b6001600160a01b03166020880152614e216040830183614c71565b88830360408a01528083529091600091906020015b81831015614e71578335614e4981614081565b6001600160a01b03168152602084810135908201526040938401936001939093019201614e36565b614e7d606086016141a9565b63ffffffff811660608c01529350614e97608086016141a9565b63ffffffff811660808c01529350614eb260a0860186614d15565b9550935089810360a08b0152614ec9818686614d5a565b99505050505050602083019250602084019350600182019150614db8565b509298975050505050505050565b60005b83811015614f10578181015183820152602001614ef8565b50506000910152565b60008151808452614f31816020860160208601614ef5565b601f01601f19169290920160200192915050565b602081526000614f586020830184614f19565b9392505050565b602081526000825160806020840152614f7b60a0840182614f19565b905063ffffffff60208501511660408401526040840151601f19848303016060850152614fa88282614f19565b91505063ffffffff60608501511660808401528091505092915050565b63ffffffff81811683821601908111156134c0576134c0614a20565b602080825282516001600160a01b039081168383015283820151166040808401919091528301516060808401528051608084018190526000929190910190829060a08501905b808310156142e25763ffffffff8451168252602082019150602084019350600183019250615027565b6000808335601e1984360301811261506757600080fd5b8301803591506001600160401b0382111561508157600080fd5b6020019150368190038213156140f757600080fd5b6020815260006150a68384614d15565b608060208501526150bb60a085018284614d5a565b91505060208401356150cc81614197565b63ffffffff81166040850152506150e66040850185614d15565b848303601f190160608601526150fd838284614d5a565b92505050606084013561510f81614197565b63ffffffff166080939093019290925250919050565b6000813561513281614197565b63ffffffff1683526151476020830183614d15565b6040602086015261515c604086018284614d5a565b95945050505050565b602081526000614f586020830184615125565b6001600160601b03818116838216029081169081811461519a5761519a614a20565b5092915050565b80820281158282048414176134c0576134c0614a20565b6060815260006151cb6060830185615125565b905063ffffffff8351166020830152602083015160408301529392505050565b60008235609e19833603018112614c1e57600080fd5b6020808252810182905260006040600584901b830181019083018583609e1936839003015b878210156152de57868503603f19018452823581811261524557600080fd5b89016152518180614c71565b60a0885261526360a089018284614cb9565b915050602082013561527481614081565b6001600160a01b0316602088015260408281013590880152606082013561529a81614197565b63ffffffff16606088015260809190910135906152b682614197565b63ffffffff821660808801528096505050602083019250602084019350600182019150615226565b5092979650505050505050565b600061ffff821661ffff810361530357615303614a20565b60010192915050565b60018060a01b038316815260406020820152600082516060604084015261533660a0840182614f19565b90506020840151606084015260408401516080840152809150509392505050565b60006020828403121561536957600080fd5b81516134bd81613e91565b60008251614c1e818460208701614ef556fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47a264697066735822122012d57ebf9fea912578e107b50f6abe643ded9de950ae51bf737ecb2b201f5a6964736f6c634300081b0033000000000000000000000000135dda560e946695d6f155dacafc6f1f25c1f5af0000000000000000000000007750d328b314effa365a0402ccfd489b80b0adda00000000000000000000000028c486660aff4c3ffc671cb72ff36fea214e8de1000000000000000000000000f139a704063f85c91089face6eeaa13a78f46d1b00000000000000000000000025e5f8b1e7adf44518d35d5b2271f114e081f0e5000000000000000000000000948a420b8cc1d6bfd0b6087c2e7c344a2cd0bc39