0 txs
0 calls
constructor
constructor()
functions
calculateCurrentEmission
viewfunction calculateCurrentEmission(address asset, address reward) view returns (uint256)
calculateCurrentEmissionScaled
viewfunction calculateCurrentEmissionScaled(address asset, address reward) view returns (uint256)
calculateCurrentUserReward
viewfunction calculateCurrentUserReward(address asset, address reward, address user) view returns (uint256)
calculateCurrentUserRewards
viewfunction calculateCurrentUserRewards(address asset, address user) view returns (address[], uint256[])
calculateRewardIndex
viewfunction calculateRewardIndex(address asset, address reward) view returns (uint256)
calculateRewardIndexes
viewfunction calculateRewardIndexes(address asset) view returns (address[], uint256[])
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
getAllAssets
viewfunction getAllAssets() view returns (address[])
getAllRewards
viewfunction getAllRewards(address asset) view returns (address[])
getAssetAndRewardsData
viewfunction getAssetAndRewardsData(address asset) view returns (tuple, tuple[])
getAssetData
viewfunction getAssetData(address asset) view returns (tuple)
getEmissionData
viewfunction getEmissionData(address asset, address reward) view returns (tuple)
getRewardData
viewfunction getRewardData(address asset, address reward) view returns (tuple)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getUserDataByAsset
viewfunction getUserDataByAsset(address asset, address user) view returns (address[], tuple[])
getUserDataByReward
viewfunction getUserDataByReward(address asset, address reward, address user) view returns (tuple)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
isClaimerAuthorized
viewfunction isClaimerAuthorized(address user, address claimer) view returns (bool)
MAX_REWARDS_LENGTH
viewfunction MAX_REWARDS_LENGTH() view returns (uint256)
maxRescue
purefunction maxRescue(address) pure returns (uint256)
nonces
viewfunction nonces(address owner) view returns (uint256)
REWARDS_ADMIN_ROLE
viewfunction REWARDS_ADMIN_ROLE() view returns (bytes32)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
claimAllRewards
nonpayablefunction claimAllRewards(address asset, address receiver) returns (address[], uint256[])
claimAllRewards
nonpayablefunction claimAllRewards(address[] assets, address receiver) returns (address[][], uint256[][])
claimAllRewardsOnBehalf
nonpayablefunction claimAllRewardsOnBehalf(address asset, address user, address receiver) returns (address[], uint256[])
claimAllRewardsOnBehalf
nonpayablefunction claimAllRewardsOnBehalf(address[] assets, address user, address receiver) returns (address[][], uint256[][])
claimAllRewardsPermit
nonpayablefunction claimAllRewardsPermit(address asset, address user, address receiver, uint256 deadline, tuple sig) returns (address[], uint256[])
claimSelectedRewards
nonpayablefunction claimSelectedRewards(address asset, address[] rewards, address receiver) returns (uint256[])
claimSelectedRewards
nonpayablefunction claimSelectedRewards(address[] assets, address[][] rewards, address receiver) returns (uint256[][])
claimSelectedRewardsOnBehalf
nonpayablefunction claimSelectedRewardsOnBehalf(address asset, address[] rewards, address user, address receiver) returns (uint256[])
claimSelectedRewardsOnBehalf
nonpayablefunction claimSelectedRewardsOnBehalf(address[] assets, address[][] rewards, address user, address receiver) returns (uint256[][])
claimSelectedRewardsPermit
nonpayablefunction claimSelectedRewardsPermit(address asset, address[] rewards, address user, address receiver, uint256 deadline, tuple sig) returns (uint256[])
configureAssetWithRewards
nonpayablefunction configureAssetWithRewards(address asset, uint256 targetLiquidity, tuple[] newRewardConfigs)
configureRewards
nonpayablefunction configureRewards(address asset, tuple[] newRewardConfigs)
emergencyEtherTransfer
nonpayablefunction emergencyEtherTransfer(address to, uint256 amount)
emergencyTokenTransfer
nonpayablefunction emergencyTokenTransfer(address erc20Token, address to, uint256 amount)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
handleAction
nonpayablefunction handleAction(uint256 totalSupply, uint256 totalAssets, address user, uint256 userBalance)
initialize
nonpayablefunction initialize(address governance)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setClaimer
nonpayablefunction setClaimer(address claimer, bool flag)
setClaimer
nonpayablefunction setClaimer(address user, address claimer, bool flag)
updateAsset
nonpayablefunction updateAsset(address asset)
events
AssetInitialized
event AssetInitialized(address indexed asset)
ClaimerSet
event ClaimerSet(address indexed user, address indexed claimer, address indexed caller, bool flag)
EIP712DomainChanged
event EIP712DomainChanged()
ERC20Rescued
event ERC20Rescued(address indexed caller, address indexed token, address indexed to, uint256 amount)
Initialized
event Initialized(uint64 version)
LastTimestampUpdated
event LastTimestampUpdated(address indexed asset, uint256 newTimestamp)
NativeTokensRescued
event NativeTokensRescued(address indexed caller, address indexed to, uint256 amount)
RewardClaimed
event RewardClaimed(address indexed asset, address indexed reward, address indexed user, address receiver, uint256 amount)
RewardConfigUpdated
event RewardConfigUpdated(address indexed asset, address indexed reward, uint256 maxEmissionPerSecond, uint256 distributionEnd, address rewardPayer)
RewardIndexUpdated
event RewardIndexUpdated(address indexed asset, address indexed reward, uint256 newIndex)
RewardInitialized
event RewardInitialized(address indexed asset, address indexed reward)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
TargetLiquidityUpdated
event TargetLiquidityUpdated(address indexed asset, uint256 newTargetLiquidity)
UserDataUpdated
event UserDataUpdated(address indexed asset, address indexed reward, address indexed user, uint256 newIndex, uint256 accruedFromLastUpdate)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AssetNotInitialized
error AssetNotInitialized(address asset)
ClaimerNotAuthorized
error ClaimerNotAuthorized(address claimer, address user)
ECDSAInvalidSignature
error ECDSAInvalidSignature()
ECDSAInvalidSignatureLength
error ECDSAInvalidSignatureLength(uint256 length)
ECDSAInvalidSignatureS
error ECDSAInvalidSignatureS(bytes32 s)
EthTransferFailed
error EthTransferFailed()
ExpiredSignature
error ExpiredSignature(uint256 deadline)
InvalidAccountNonce
error InvalidAccountNonce(address account, uint256 currentNonce)
InvalidDistributionEnd
error InvalidDistributionEnd()
InvalidInitialization
error InvalidInitialization()
InvalidMaxEmissionPerSecond
error InvalidMaxEmissionPerSecond()
InvalidSigner
error InvalidSigner(address signer, address owner)
InvalidTargetLiquidity
error InvalidTargetLiquidity()
LengthsDontMatch
error LengthsDontMatch()
MaxRewardsLengthReached
error MaxRewardsLengthReached()
NotInitializing
error NotInitializing()
OnlyRescueGuardian
error OnlyRescueGuardian()
RewardNotInitialized
error RewardNotInitialized(address reward)
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
ZeroAddress
error ZeroAddress()
creation bytecode
0x6080604052348015600e575f5ffd5b5060156019565b60c9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560685760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c65780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b615612806100d65f395ff3fe608060405234801561000f575f5ffd5b5060043610610281575f3560e01c80637f3bfff811610156578063bc3df74d116100ca578063d7080d4711610084578063d7080d471461066e578063d740871514610681578063e2f9f98014610695578063eed88b8d146106b6578063f141b52b146106c9578063ff73bce0146106dc575f5ffd5b8063bc3df74d146105ee578063c4d66de814610601578063d0110f3a14610614578063d2d6346414610635578063d547741f14610648578063d6976b401461065b575f5ffd5b806391d148541161011b57806391d148541461057a5780639ff55db91461058d578063a217fddf146105ae578063a3d5b255146105b5578063b4314d07146105c8578063bb492bf5146105db575f5ffd5b80637f3bfff81461051357806384b0196e1461052657806388585296146105415780638a110220146105545780638b28cba914610567575f5ffd5b80634a0fd4b6116101f857806369f67d42116101b257806369f67d421461044c5780636ce8cda31461046c578063745ff6351461047f5780637e99300d146104925780637e9dc742146104b95780637ecebe00146104cc575f5ffd5b80634a0fd4b6146103b25780635129351c146103c55780635310f841146103d857806354375c45146103f85780635d4654ec146104185780635f4f78ae1461042b575f5ffd5b80632acada4d116102495780632acada4d146103095780632f2ff15d1461031e578063321905df14610333578063362a3fad1461037957806336568abe1461038c5780633d4c415a1461039f575f5ffd5b806301ffc9a714610285578063156ce5f8146102ad5780631652e7b7146102c35780631ec5b2f1146102e3578063248a9ca3146102f6575b5f5ffd5b6102986102933660046146bc565b6106ef565b60405190151581526020015b60405180910390f35b6102b5600881565b6040519081526020016102a4565b6102d66102d13660046146fe565b610725565b6040516102a49190614717565b6102b56102f136600461472e565b610785565b6102b561030436600461475f565b6108d9565b6103116108f9565b6040516102a491906147b9565b61033161032c3660046147cb565b6109c5565b005b61034661034136600461472e565b6109e7565b6040516102a491908151815260208083015190820152604080830151908201526060918201519181019190915260800190565b6103116103873660046146fe565b610ae5565b61033161039a3660046147cb565b610bc3565b6103316103ad3660046147fb565b610bfb565b6102986103c036600461472e565b610c0a565b6103316103d3366004614863565b610c56565b6103eb6103e63660046148f8565b610ce5565b6040516102a49190614998565b61040b6104063660046149aa565b610d78565b6040516102a49190614a6a565b610331610426366004614a7c565b610eab565b61043e6104393660046146fe565b610efd565b6040516102a4929190614ab6565b61045f61045a36600461472e565b611071565b6040516102a49190614ada565b6102b561047a36600461472e565b611197565b61033161048d366004614b0e565b6112a7565b6102b57fdb6fbae5cd13d8264d7ed12219ef2882c1e83b8b12f47819baa96f32f69a168281565b61043e6104c736600461472e565b611404565b6102b56104da3660046146fe565b6001600160a01b03165f9081527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb00602052604090205490565b610331610521366004614b5c565b61141e565b61052e61145a565b6040516102a49796959493929190614be9565b61043e61054f366004614c60565b611503565b6102b561056236600461472e565b6115b6565b61040b610575366004614caf565b6116bf565b6102986105883660046147cb565b611835565b6105a061059b366004614d3c565b61186b565b6040516102a4929190614d9c565b6102b55f81565b6103316105c3366004614e3b565b6119da565b6103eb6105d6366004614e75565b6119ed565b6105a06105e9366004614eca565b611a2f565b6102d66105fc366004614f10565b611b5c565b61033161060f3660046146fe565b611c1a565b6106276106223660046146fe565b611d89565b6040516102a4929190614f47565b61043e610643366004614f10565b611eb1565b6103316106563660046147cb565b611f0d565b6103eb610669366004614fc3565b611f29565b6102b561067c366004614f10565b61203c565b6102b561068f3660046146fe565b505f1990565b6106a86106a336600461472e565b61222f565b6040516102a492919061504e565b6103316106c43660046150af565b612467565b6103316106d73660046146fe565b612479565b61043e6106ea36600461472e565b6124c8565b5f6001600160e01b03198216637965db0b60e01b148061071f57506301ffc9a760e01b6001600160e01b03198316145b92915050565b604080518082019091525f80825260208201525f61074161263e565b6001600160a01b039384165f90815260209182526040908190208151808301909252600201549485168152600160a01b90940463ffffffff16908401525090919050565b5f5f61078f61263e565b6001600160a01b038581165f90815260209283526040808220928716825282845290819020815160808101835290546001600160901b0381168252600160901b81046001600160481b031694820194909452600160d81b840463ffffffff16918101829052600160f81b90930460ff166060840152909250421115610818575f9250505061071f565b606081015161083090670de0b6b3a764000090612662565b6108c682602001516001600160481b0316846002015f9054906101000a90046001600160a01b03166001600160a01b0316886001600160a01b03166301e1d1146040518163ffffffff1660e01b8152600401602060405180830381865afa15801561089d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108c191906150d7565b612678565b6108d09190615116565b95945050505050565b5f9081525f5160206155bd5f395f51905f52602052604090206001015490565b60605f61090461263e565b60018101549091505f906001600160401b0381111561092557610925615135565b60405190808252806020026020018201604052801561094e578160200160208202803683370190505b5090505f5b81518110156109be5782600101818154811061097157610971615149565b905f5260205f20015f9054906101000a90046001600160a01b031682828151811061099e5761099e615149565b6001600160a01b0390921660209283029190910190910152600101610953565b5092915050565b6109ce826108d9565b6109d781612694565b6109e183836126a1565b50505050565b610a0e60405180608001604052805f81526020015f81526020015f81526020015f81525090565b5f610a1761263e565b6001600160a01b038581165f908152602092835260408082209287168252828452808220815160808101835290546001600160901b0381168252600160901b81046001600160481b031695820195909552600160d81b850463ffffffff16918101829052600160f81b90940460ff166060850152919350904210610a9b575f610abf565b610abf826060015183602001516001600160481b031661274290919063ffffffff16565b6002840154909150610adb9082906001600160a01b0316612758565b9695505050505050565b60605f610af061263e565b6001600160a01b0384165f9081526020919091526040812060010180549092506001600160401b03811115610b2757610b27615135565b604051908082528060200260200182016040528015610b50578160200160208202803683370190505b5090505f5b8151811015610bbb57828181548110610b7057610b70615149565b5f9182526020909120015482516001600160a01b0390911690839083908110610b9b57610b9b615149565b6001600160a01b0390921660209283029190910190910152600101610b55565b509392505050565b6001600160a01b0381163314610bec5760405163334bd91960e11b815260040160405180910390fd5b610bf682826127bc565b505050565b610c06338383612835565b5050565b6001600160a01b039182165f9081527f21b0411c7d97c506a34525b56b49eed70b15d28e22527c4589674c84ba9a52006020908152604080832093909416825291909152205460ff1690565b5f610c6081612694565b5f610c6961263e565b6001600160a01b0387165f908152602091909152604090209050610c8e8187876128eb565b5f5b83811015610cd257610cca82868684818110610cae57610cae615149565b905060800201803603810190610cc4919061515d565b896129a1565b600101610c90565b50610cdd8186612a0a565b505050505050565b606082610cf28133610c0a565b33829091610d2b57604051630d15af9560e31b81526001600160a01b039283166004820152911660248201526044015b60405180910390fd5b5050610d6d878787808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250899250889150612aa69050565b979650505050505050565b6060848314610d9a5760405163fda9f7dd60e01b815260040160405180910390fd5b5f856001600160401b03811115610db357610db3615135565b604051908082528060200260200182016040528015610de657816020015b6060815260200190600190039081610dd15790505b5090505f5b86811015610ea057610e7b888883818110610e0857610e08615149565b9050602002016020810190610e1d91906146fe565b878784818110610e2f57610e2f615149565b9050602002810190610e4191906151cd565b808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250339250899150612aa69050565b828281518110610e8d57610e8d615149565b6020908102919091010152600101610deb565b509695505050505050565b335f610eb561263e565b6001600160a01b038084165f90815260209283526040908190208151606081018352600282015490931683529282018890528101889052909150610cdd908290848787612e29565b6060805f610f0961263e565b6001600160a01b0385165f9081526020919091526040812060018101549092506001600160401b03811115610f4057610f40615135565b604051908082528060200260200182016040528015610f69578160200160208202803683370190505b5090505f81516001600160401b03811115610f8657610f86615135565b604051908082528060200260200182016040528015610faf578160200160208202803683370190505b5090505f5b825181101561106557836001018181548110610fd257610fd2615149565b5f9182526020909120015483516001600160a01b0390911690849083908110610ffd57610ffd615149565b60200260200101906001600160a01b031690816001600160a01b0316815250506110408784838151811061103357611033615149565b6020026020010151611197565b82828151811061105257611052615149565b6020908102919091010152600101610fb4565b50909590945092505050565b6110a160405180608001604052805f6001600160a01b031681526020015f81526020015f81526020015f81525090565b5f6110aa61263e565b6001600160a01b038581165f908152602092835260408082209287168252918352818120825160808101845290546001600160901b0381168252600160901b81046001600160481b031694820194909452600160d81b840463ffffffff16928101839052600160f81b90930460ff166060840152919250421061112d575f611151565b611151826060015183602001516001600160481b031661274290919063ffffffff16565b604080516080810182526001600160a01b038716815284516001600160901b0316602082015280820192909252929092015163ffffffff16606083015250905092915050565b5f5f6111a161263e565b6001600160a01b038581165f90815260209283526040808220928716825282845290819020815160808101835290546001600160901b0381168252600160901b81046001600160481b031694820194909452600160d81b840463ffffffff908116928201839052600160f81b90940460ff166060820152600283015492945092600160a01b9092049091169081106112475750516001600160901b0316915061071f9050565b600283015461128890611263906001600160a01b031688612f4d565b83602001516001600160481b0316846040015163ffffffff168463ffffffff16613044565b82516112949190615212565b6001600160901b03169695505050505050565b7fdb6fbae5cd13d8264d7ed12219ef2882c1e83b8b12f47819baa96f32f69a16826112d181612694565b5f6112da61263e565b6001600160a01b038087165f9081526020929092526040909120600281015490925061131591839161130d911688612f4d565b875f5f612e29565b5f5b83811015610cdd57611377825f87878581811061133657611336615149565b61134c92602060809092020190810191506146fe565b6001600160a01b0316815260208101919091526040015f2054600160d81b900463ffffffff16151590565b85858381811061138957611389615149565b61139f92602060809092020190810191506146fe565b906113c957604051632926c75960e21b81526001600160a01b039091166004820152602401610d22565b506113fc828686848181106113e0576113e0615149565b9050608002018036038101906113f6919061515d565b886130c5565b600101611317565b6060806114128433856131c1565b915091505b9250929050565b5f61142881612694565b6001600160a01b03841661144f5760405163d92e233d60e01b815260040160405180910390fd5b6109e1848484612835565b5f60608082808083815f51602061559d5f395f51905f52805490915015801561148557506001810154155b6114c95760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606401610d22565b6114d16131eb565b6114d96132ab565b604080515f80825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b6060805f7f986230f079640bd9bae29ac642bf5eac6d1ee0473d146135d747f79899efbf4c888888336115358c6132e9565b6040805160208101979097526001600160a01b03958616908701529284166060860152908316608085015290911660a083015260c082015260e081018690526101000160405160208183030381529060405280519060200120905061159c8782878761332a565b6115a78888886131c1565b92509250509550959350505050565b5f5f6115c061263e565b6001600160a01b038581165f90815260209283526040808220928716825282845290819020815160808101835290546001600160901b0381168252600160901b81046001600160481b031694820194909452600160d81b840463ffffffff16918101829052600160f81b90930460ff166060840152909250421115611649575f9250505061071f565b670de0b6b3a76400006108c682602001516001600160481b0316846002015f9054906101000a90046001600160a01b03166001600160a01b0316886001600160a01b03166301e1d1146040518163ffffffff1660e01b8152600401602060405180830381865afa15801561089d573d5f5f3e3d5ffd5b6060826116cc8133610c0a565b3382909161170057604051630d15af9560e31b81526001600160a01b03928316600482015291166024820152604401610d22565b50508685146117225760405163fda9f7dd60e01b815260040160405180910390fd5b5f876001600160401b0381111561173b5761173b615135565b60405190808252806020026020018201604052801561176e57816020015b60608152602001906001900390816117595790505b5090505f5b88811015611828576118038a8a8381811061179057611790615149565b90506020020160208101906117a591906146fe565b8989848181106117b7576117b7615149565b90506020028101906117c991906151cd565b808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152508b92508a9150612aa69050565b82828151811061181557611815615149565b6020908102919091010152600101611773565b5098975050505050505050565b5f9182525f5160206155bd5f395f51905f52602090815260408084206001600160a01b0393909316845291905290205460ff1690565b606080836118798133610c0a565b338290916118ad57604051630d15af9560e31b81526001600160a01b03928316600482015291166024820152604401610d22565b505f9050866001600160401b038111156118c9576118c9615135565b6040519080825280602002602001820160405280156118fc57816020015b60608152602001906001900390816118e75790505b5090505f876001600160401b0381111561191857611918615135565b60405190808252806020026020018201604052801561194b57816020015b60608152602001906001900390816119365790505b5090505f5b888110156119cb576119898a8a8381811061196d5761196d615149565b905060200201602081019061198291906146fe565b89896131c1565b84838151811061199b5761199b615149565b602002602001018484815181106119b4576119b4615149565b602090810291909101019190915252600101611950565b50909890975095505050505050565b6119e26133cb565b610bf68383836133f4565b60606108d0858585808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250339250879150612aa69050565b6060805f846001600160401b03811115611a4b57611a4b615135565b604051908082528060200260200182016040528015611a7e57816020015b6060815260200190600190039081611a695790505b5090505f856001600160401b03811115611a9a57611a9a615135565b604051908082528060200260200182016040528015611acd57816020015b6060815260200190600190039081611ab85790505b5090505f5b86811015611b4d57611b0b888883818110611aef57611aef615149565b9050602002016020810190611b0491906146fe565b33886131c1565b848381518110611b1d57611b1d615149565b60200260200101848481518110611b3657611b36615149565b602090810291909101019190915252600101611ad2565b5090925090505b935093915050565b604080518082019091525f80825260208201525f611b7861263e565b6001600160a01b038681165f90815260209283526040808220888416835284528082209287168252600183018452908190208151808301835290546001600160901b038082168352600160901b9091046001600160701b03908116838701908152845180860190955283519092168452845491519496509194929392840192611c0c921690600160f81b900460ff16612742565b9052925050505b9392505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f81158015611c5e5750825b90505f826001600160401b03166001148015611c795750303b155b905081158015611c87575080155b15611ca55760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315611ccf57845460ff60401b1916600160401b1785555b6001600160a01b038616611cf65760405163d92e233d60e01b815260040160405180910390fd5b611cfe613478565b611d06613480565b611d105f876126a1565b50611d3b7fdb6fbae5cd13d8264d7ed12219ef2882c1e83b8b12f47819baa96f32f69a1682876126a1565b508315610cdd57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050505050565b604080518082019091525f808252602082015260605f611da761263e565b6001600160a01b0385165f908152602091909152604081209150611dca85610725565b60018301549091505f906001600160401b03811115611deb57611deb615135565b604051908082528060200260200182016040528015611e4c57816020015b611e3960405180608001604052805f6001600160a01b031681526020015f81526020015f81526020015f81525090565b815260200190600190039081611e095790505b5090505f5b815181101561106557611e8c87856001018381548110611e7357611e73615149565b5f918252602090912001546001600160a01b0316611071565b828281518110611e9e57611e9e615149565b6020908102919091010152600101611e51565b60608083611ebf8133610c0a565b33829091611ef357604051630d15af9560e31b81526001600160a01b03928316600482015291166024820152604401610d22565b5050611f008686866131c1565b9250925050935093915050565b611f16826108d9565b611f1f81612694565b6109e183836127bc565b60605f611f35866132e9565b90505f8888604051602001611f4b929190615231565b60408051808303601f1901815282825280516020918201207feb10596b7a1f9df64485719878c7b20169ae5ee1e5aa5da116c411eed6aa7e71828501526001600160a01b038e811685850152606085018290528b811660808601528a1660a08501523360c085015260e084018690526101008085018a9052835180860390910181526101209094019092528251920191909120909150611fed8882888861332a565b61202d8b8b8b808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152508d92508c9150612aa69050565b9b9a5050505050505050505050565b5f5f61204661263e565b6001600160a01b038681165f818152602093845260408082208985168352808652818320825160808101845281546001600160901b038082168352600160901b8083046001600160481b0316848c0152600160d81b830463ffffffff90811685890152600160f81b90930460ff166060850152988d16808852600185018b528688208751808901895290549283168152999091046001600160701b031699890199909952600284015494516370a0823160e01b815260048101999099529298509096909594600160a01b9093049091169291906370a0823190602401602060405180830381865afa15801561213d573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061216191906150d7565b9050836040015163ffffffff168263ffffffff1610156121d85760028601546121bc90612197906001600160a01b03168c612f4d565b85602001516001600160481b0316866040015163ffffffff168563ffffffff16613044565b845185906121cb908390615212565b6001600160901b03169052505b6122218460600151612203865f01516001600160901b0316865f01516001600160901b0316856134d5565b85602001516122129190615270565b6001600160701b031690612742565b9a9950505050505050505050565b6060805f61223b61263e565b6001600160a01b0386165f9081526020919091526040812060018101549092506001600160401b0381111561227257612272615135565b60405190808252806020026020018201604052801561229b578160200160208202803683370190505b5090505f81516001600160401b038111156122b8576122b8615135565b6040519080825280602002602001820160405280156122fc57816020015b604080518082019091525f80825260208201528152602001906001900390816122d65790505b50604080518082019091525f80825260208201529091505f5b83518110156124595784600101818154811061233357612333615149565b5f9182526020909120015484516001600160a01b039091169085908390811061235e5761235e615149565b60200260200101906001600160a01b031690816001600160a01b0316815250505f855f015f86848151811061239557612395615149565b6020908102919091018101516001600160a01b0390811683528282019390935260409182015f908120938d1681526001840182528290208251808401845290546001600160901b0380821683526001600160701b03600160901b9092048216838501908152855180870190965283519091168552855490519298509495509293918401926124309291169060ff600160f81b90910416612742565b81525084838151811061244557612445615149565b602090810291909101015250600101612315565b509197909650945050505050565b61246f6133cb565b610c068282613509565b5f61248261263e565b6001600160a01b038084165f9081526020929092526040822060028101549093506124ae911684612f4d565b905080604001515f14610bf657610bf68282855f5f612e29565b6060805f6124d461263e565b6001600160a01b0386165f9081526020919091526040812060018101549092506001600160401b0381111561250b5761250b615135565b604051908082528060200260200182016040528015612534578160200160208202803683370190505b5090505f81516001600160401b0381111561255157612551615135565b60405190808252806020026020018201604052801561257a578160200160208202803683370190505b5090505f5b82518110156126315783600101818154811061259d5761259d615149565b5f9182526020909120015483516001600160a01b03909116908490839081106125c8576125c8615149565b60200260200101906001600160a01b031690816001600160a01b03168152505061260c888483815181106125fe576125fe615149565b60200260200101518961203c565b82828151811061261e5761261e615149565b602090810291909101015260010161257f565b5090969095509350505050565b7f7a5f91582c97dd0b2921808fbdbab73d3de091aefc8bf8607868e058abb2e30090565b5f61266e82600a61536a565b611c139084615378565b5f61268c6126868585612758565b836135d8565b949350505050565b61269e8133613629565b50565b5f5f5160206155bd5f395f51905f526126ba8484611835565b612739575f848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556126ef3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061071f565b5f91505061071f565b5f61274e82600a61536a565b611c139084615116565b61277f60405180608001604052805f81526020015f81526020015f81526020015f81525090565b604051806080016040528083815260200161279c84612ee0613662565b81526020018481526020016127b385611f40613662565b90529392505050565b5f5f5160206155bd5f395f51905f526127d58484611835565b15612739575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061071f565b6001600160a01b03821661285c5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b038381165f8181527f21b0411c7d97c506a34525b56b49eed70b15d28e22527c4589674c84ba9a52006020908152604080832094871680845294825291829020805460ff191686151590811790915582519081529151339493927f4e952ce5ab26190947a162c369473efd9c64cf5b966b1bda4d1dc06b0aaef6ad92908290030190a4505050565b60028301546001600160a01b03161561292957600283015461292490849061291c906001600160a01b031685612f4d565b845f5f612e29565b612996565b61293161263e565b6001908101805491820181555f9081526020812090910180546001600160a01b0319166001600160a01b03851690811790915560405190917f271b4511ff4aaef63080ee912e106daf4730d4103103ece6b8945b8f63ee024991a26129968383613670565b610bf68383836136e2565b81516001600160a01b03166129c95760405163d92e233d60e01b815260040160405180910390fd5b81516001600160a01b03165f90815260208490526040902054600160d81b900463ffffffff16156129ff57610bf68383836130c5565b610bf68383836137ae565b60018201545f5b818110156109e1575f846001018281548110612a2f57612a2f615149565b5f9182526020808320909101546001600160a01b0316808352908790526040909120549091506001600160481b03600160901b9091041615612a9d576001600160a01b0381165f90815260208690526040902054612a9d90600160901b90046001600160481b03168561397c565b50600101612a11565b60605f612ab161263e565b6001600160a01b0387165f9081526020919091526040812086519092506001600160401b03811115612ae557612ae5615135565b604051908082528060200260200182016040528015612b0e578160200160208202803683370190505b506002830154909150612ba1908390612b30906001600160a01b03168a612f4d565b6040516370a0823160e01b81526001600160a01b03808a1660048301528b918a918316906370a0823190602401602060405180830381865afa158015612b78573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b9c91906150d7565b612e29565b5f5b8651811015610ea0575f835f015f898481518110612bc357612bc3615149565b6020908102919091018101516001600160a01b0390811683528282019390935260409182015f908120938b1681526001840182528290208251808401909352546001600160901b0381168352600160901b90046001600160701b031690820181905282549293509091600160f81b900460ff1690612c419082612742565b858581518110612c5357612c53615149565b602002602001018181525050848481518110612c7157612c71615149565b60200260200101515f03612c8757505050612e21565b612cbb612cb682878781518110612ca057612ca0615149565b602002602001015161266290919063ffffffff16565b6139e8565b6001600160a01b038a165f90815260018501602052604090208054601290612cf4908490600160901b90046001600160701b031661538f565b92506101000a8154816001600160701b0302191690836001600160701b03160217905550612d80836002015f9054906101000a90046001600160a01b031689878781518110612d4557612d45615149565b60200260200101518d8881518110612d5f57612d5f615149565b60200260200101516001600160a01b0316613a1f909392919063ffffffff16565b886001600160a01b03168a8581518110612d9c57612d9c615149565b60200260200101516001600160a01b03168c6001600160a01b03167f3c7cf01a909d99baa17e8a20a6b1313defa27faddbf794dd957e2e39454291318b898981518110612deb57612deb615149565b6020026020010151604051612e159291906001600160a01b03929092168252602082015260400190565b60405180910390a45050505b600101612ba3565b83518390612e56576040516360331f1760e11b81526001600160a01b039091166004820152602401610d22565b5060028501546001860154604080518082019091525f80825260208201819052600160a01b90930463ffffffff1692905f5b83811015612f3757896001018181548110612ea557612ea5615149565b5f918252602080832060408051808201825293909101546001600160a01b03811680855263ffffffff600160a01b9092048216858501908152908652928f90529320905190955090935081169086161015612f1057612f10838a8a855f01518963ffffffff16613a86565b6001600160a01b03871615612f2f57612f2f8389845f01518a8a613bf2565b600101612e88565b50612f428988613670565b505050505050505050565b612f6e60405180606001604052805f81526020015f81526020015f81525090565b6040518060600160405280848152602001836001600160a01b03166301e1d1146040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fbb573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612fdf91906150d7565b8152602001836001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613020573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127b391906150d7565b5f5f61305885875f01518860200151612678565b90505f844211613068574261306a565b845b90505f61307785836153ae565b9050620f42408860400151101561309257620f424060408901525b60408801515f906130a38386615378565b6130ad9190615116565b90506130b881613d8d565b9998505050505050505050565b81516001600160a01b03165f90815260208481526040808320815160808101835281546001600160901b0381168252600160901b81046001600160481b031694820194909452600160d81b840463ffffffff1692810192909252600160f81b90920460ff16606080830191909152850151919290914210158061314a57506040850151155b15613160574260608601525f604086015261318f565b6060820151604086015161317391612662565b600287015490915061318f9082906001600160a01b031661397c565b8460600151826040015163ffffffff16146131b6576131b686865f01518760600151613dc0565b610cdd838686613e5a565b6060805f6131ce86610ae5565b90505f6131dd87838888612aa6565b919791965090945050505050565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10280546060915f51602061559d5f395f51905f5291613229906153c1565b80601f0160208091040260200160405190810160405280929190818152602001828054613255906153c1565b80156132a05780601f10613277576101008083540402835291602001916132a0565b820191905f5260205f20905b81548152906001019060200180831161328357829003601f168201915b505050505091505090565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10380546060915f51602061559d5f395f51905f5291613229906153c1565b6001600160a01b03165f9081527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb006020526040902080546001810190915590565b81421115829061335057604051632f4aa44f60e21b8152600401610d2291815260200190565b505f61335b84614006565b90505f61337e8261336f6020860186615401565b85602001358660400135614032565b905080866001600160a01b03808316908216146133c157604051637ba5ffb560e01b81526001600160a01b03928316600482015291166024820152604401610d22565b5050505050505050565b6133d55f33611835565b6133f257604051633a02626960e01b815260040160405180910390fd5b565b5f198181116134035780613405565b815b915061341b6001600160a01b038516848461405e565b826001600160a01b0316846001600160a01b0316336001600160a01b03167fc7af665d489507e14ae25ac7ab0030fc7f570869610bdd32117ea56b60ae5c618560405161346a91815260200190565b60405180910390a450505050565b6133f261408f565b61348861408f565b6133f2604051806040016040528060128152602001712932bbb0b93239a234b9ba3934b13aba37b960711b815250604051806040016040528060018152602001603160f81b8152506140d8565b5f61268c670de0b6b3a76400006134ec858761541c565b6134ff906001600160981b031685615378565b612cb69190615116565b604080515f808252602082019092526001600160a01b038416908390604051613532919061543b565b5f6040518083038185875af1925050503d805f811461356c576040519150601f19603f3d011682016040523d82523d5f602084013e613571565b606091505b505090508061359357604051630db2c7f160e31b815260040160405180910390fd5b6040518281526001600160a01b0384169033907fb7c602059992183c7b767c08204223afc99f1895fd175adf9ece23ce9f5bb8b79060200160405180910390a3505050565b81515f9082116135fb576135f48360400151845f015184614137565b905061071f565b8260200151821015613611576135f48383614198565b670de0b6b3a764000083606001516135f49190615378565b6136338282611835565b610c065760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610d22565b5f611c138383612710614202565b613679426142b8565b8260020160146101000a81548163ffffffff021916908363ffffffff160217905550806001600160a01b03167f2fd65054d3982e86ed3f251c28911e4fbb2d358d468d760951347f1a0b7d73ef426040516136d691815260200190565b60405180910390a25050565b61374b81836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613722573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137469190615456565b6142e8565b6137548161432e565b6002840180546001600160a01b0319166001600160a01b03928316179055604051828152908316907f276b434bd0d0918e3b310108b2f830c962caa6f9917bcf6ccf1452a4d3c37e8f9060200160405180910390a2505050565b60018301546008116137d357604051634f9cb06f60e11b815260040160405180910390fd5b5f825f01516001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613813573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138379190615456565b613842906012615471565b90505f61385c82856040015161266290919063ffffffff16565b60028601549091506138789082906001600160a01b031661397c565b4284606001511161389c57604051636e03f20160e11b815260040160405180910390fd5b846001016040518060400160405280865f01516001600160a01b031681526020016138ca87606001516142b8565b63ffffffff90811690915282546001810184555f938452602080852084519201805494820151909316600160a01b026001600160c01b03199094166001600160a01b039283161793909317909155865181168352908790526040808320805460ff8716600160f81b026001600160f81b03909116178155875191519093918316928716917f4c3f17945511e5b4068207e122390aa889f661af655b6477807fc0ccc532c6c291a3610cdd818686613e5a565b5f670de0b6b3a76400006139926103e884615378565b61399c9190615116565b90505f600282116139ae5760026139b0565b815b9050683635c9adc5dea0000084111580156139cb5750808410155b6109e1576040516323276e8160e01b815260040160405180910390fd5b5f6001600160701b03821115613a1b576040516306dfcc6560e41b81526070600482015260248101839052604401610d22565b5090565b6040516001600160a01b0384811660248301528381166044830152606482018390526109e19186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050614361565b428114613beb576040805160808101825286546001600160901b0381168252600160901b81046001600160481b031660208301819052600160d81b820463ffffffff16938301849052600160f81b90910460ff1660608301529091613aed91879185613044565b81518290613afc908390615212565b6001600160901b0316905250604081015163ffffffff164210613b20575f60208201525b805186546020830151604080850151606086015160ff16600160f81b026001600160f81b0363ffffffff909216600160d81b02919091166001600160d81b036001600160481b03909416600160901b026001600160d81b03199095166001600160901b03871617949094179290921692909217178855516001600160a01b0380861692908716917fb9b4376208ba50d03eb0e1384be3c0148d978849d88a6e6981311141430fee3891613be1916001600160901b0391909116815260200190565b60405180910390a3505b5050505050565b6001600160a01b0382165f9081526001860160209081526040918290208251808401845290546001600160901b038082168352600160901b918290046001600160701b03168385015284516080810186528a548083168083529381046001600160481b031695820195909552600160d81b850463ffffffff1695810195909552600160f81b90930460ff16606085015281519193929190911603613c97575050613beb565b5f613cbb825f01516001600160901b0316845f01516001600160901b0316866134d5565b90508083602001818151613ccf9190615270565b6001600160701b0390811690915283516001600160901b0390811686526001600160a01b038089165f81815260018e01602090815260409091208951918a01518616600160901b029482169490941790935560608701519094508a821693918c16927f1da43ec52e32b2d37b10bc2ec2411baa93ca806d79c15fc1b5551beb602f46df929091613d6191881690612742565b604080516001600160901b03909316835260208301919091520160405180910390a45050505050505050565b5f6001600160901b03821115613a1b576040516306dfcc6560e41b81526090600482015260248101839052604401610d22565b60018301545f5b81811015613beb57836001600160a01b0316856001018281548110613dee57613dee615149565b5f918252602090912001546001600160a01b031603613e5257613e10836142b8565b856001018281548110613e2557613e25615149565b905f5260205f20015f0160146101000a81548163ffffffff021916908363ffffffff160217905550613beb565b600101613dc7565b60208201516001600160a01b0316613e855760405163d92e233d60e01b815260040160405180910390fd5b6040805160808101825284546001600160901b0381168252600160901b81046001600160481b03166020830152600160d81b810463ffffffff90811683850152600160f81b90910460ff1660608301819052928501519192613ef392613eee9290919061266216565b6143cd565b6001600160481b031660208201526060830151613f0f906142b8565b63ffffffff1660408281018290528251865460208086015160608088015160ff16600160f81b026001600160f81b03600160d81b909802979097166001600160d81b036001600160481b03909316600160901b026001600160d81b03199095166001600160901b0390961695909517939093171692909217939093178755858101516002880180546001600160a01b039283166001600160a01b03199091168117909155875188850151898701518651918252948101949094529383015291821692918516917fa67ded56527d59adcf8edf42de87e431a58f1698226809d7fa2a1dddc7130f7a910160405180910390a350505050565b5f61071f614012614400565b8360405161190160f01b8152600281019290925260228201526042902090565b5f5f5f5f6140428888888861440e565b92509250925061405282826144d6565b50909695505050505050565b6040516001600160a01b03838116602483015260448201839052610bf691859182169063a9059cbb90606401613a54565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166133f257604051631afcd79f60e31b815260040160405180910390fd5b6140e061408f565b5f51602061559d5f395f51905f527fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10261411984826154ce565b506003810161412883826154ce565b505f8082556001909101555050565b5f8083670de0b6b3a764000061414d8588615378565b6141579190615378565b6141619190615116565b9050838382670de0b6b3a764000061417a896002615378565b6141849190615378565b61418e91906153ae565b6108c69190615378565b5f670de0b6b3a7640000835f015184602001516141b591906153ae565b84516141c190856153ae565b856060015186604001516141d591906153ae565b6141df9190615378565b6141e99190615116565b84604001516141f891906153ae565b611c139190615378565b5f838302815f1985870982811083820303915050805f036142365783828161422c5761422c6150ee565b0492505050611c13565b80841161424d5761424d600385150260111861458e565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b5f63ffffffff821115613a1b576040516306dfcc6560e41b81526020600482015260248101839052604401610d22565b6142f381600a61536a565b821015801561431157506ec097ce7bc90715b34b9f10000000008211155b610c065760405163cd26117160e01b815260040160405180910390fd5b5f6001600160a01b03821115613a1b576040516306dfcc6560e41b815260a0600482015260248101839052604401610d22565b5f5f60205f8451602086015f885af180614380576040513d5f823e3d81fd5b50505f513d915081156143975780600114156143a4565b6001600160a01b0384163b155b156109e157604051635274afe760e01b81526001600160a01b0385166004820152602401610d22565b5f6001600160481b03821115613a1b576040516306dfcc6560e41b81526048600482015260248101839052604401610d22565b5f61440961459f565b905090565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561444757505f915060039050826144cc565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015614498573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b0381166144c357505f9250600191508290506144cc565b92505f91508190505b9450945094915050565b5f8260038111156144e9576144e9615588565b036144f2575050565b600182600381111561450657614506615588565b036145245760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561453857614538615588565b036145595760405163fce698f760e01b815260048101829052602401610d22565b600382600381111561456d5761456d615588565b03610c06576040516335e2f38360e21b815260048101829052602401610d22565b634e487b715f52806020526024601cfd5b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6145c9614612565b6145d161467a565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b5f5f51602061559d5f395f51905f528161462a6131eb565b80519091501561464257805160209091012092915050565b81548015614651579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b5f5f51602061559d5f395f51905f52816146926132ab565b8051909150156146aa57805160209091012092915050565b60018201548015614651579392505050565b5f602082840312156146cc575f5ffd5b81356001600160e01b031981168114611c13575f5ffd5b80356001600160a01b03811681146146f9575f5ffd5b919050565b5f6020828403121561470e575f5ffd5b611c13826146e3565b81518152602080830151908201526040810161071f565b5f5f6040838503121561473f575f5ffd5b614748836146e3565b9150614756602084016146e3565b90509250929050565b5f6020828403121561476f575f5ffd5b5035919050565b5f8151808452602084019350602083015f5b828110156147af5781516001600160a01b0316865260209586019590910190600101614788565b5093949350505050565b602081525f611c136020830184614776565b5f5f604083850312156147dc575f5ffd5b82359150614756602084016146e3565b803580151581146146f9575f5ffd5b5f5f6040838503121561480c575f5ffd5b614815836146e3565b9150614756602084016147ec565b5f5f83601f840112614833575f5ffd5b5081356001600160401b03811115614849575f5ffd5b6020830191508360208260071b8501011115611417575f5ffd5b5f5f5f5f60608587031215614876575f5ffd5b61487f856146e3565b93506020850135925060408501356001600160401b038111156148a0575f5ffd5b6148ac87828801614823565b95989497509550505050565b5f5f83601f8401126148c8575f5ffd5b5081356001600160401b038111156148de575f5ffd5b6020830191508360208260051b8501011115611417575f5ffd5b5f5f5f5f5f6080868803121561490c575f5ffd5b614915866146e3565b945060208601356001600160401b0381111561492f575f5ffd5b61493b888289016148b8565b909550935061494e9050604087016146e3565b915061495c606087016146e3565b90509295509295909350565b5f8151808452602084019350602083015f5b828110156147af57815186526020958601959091019060010161497a565b602081525f611c136020830184614968565b5f5f5f5f5f606086880312156149be575f5ffd5b85356001600160401b038111156149d3575f5ffd5b6149df888289016148b8565b90965094505060208601356001600160401b038111156149fd575f5ffd5b614a09888289016148b8565b909450925061495c9050604087016146e3565b5f82825180855260208501945060208160051b830101602085015f5b8381101561405257601f19858403018852614a54838351614968565b6020988901989093509190910190600101614a38565b602081525f611c136020830184614a1c565b5f5f5f5f60808587031215614a8f575f5ffd5b8435935060208501359250614aa6604086016146e3565b9396929550929360600135925050565b604081525f614ac86040830185614776565b82810360208401526108d08185614968565b81516001600160a01b031681526020808301519082015260408083015190820152606080830151908201526080810161071f565b5f5f5f60408486031215614b20575f5ffd5b614b29846146e3565b925060208401356001600160401b03811115614b43575f5ffd5b614b4f86828701614823565b9497909650939450505050565b5f5f5f60608486031215614b6e575f5ffd5b614b77846146e3565b9250614b85602085016146e3565b9150614b93604085016147ec565b90509250925092565b5f5b83811015614bb6578181015183820152602001614b9e565b50505f910152565b5f8151808452614bd5816020860160208601614b9c565b601f01601f19169290920160200192915050565b60ff60f81b8816815260e060208201525f614c0760e0830189614bbe565b8281036040840152614c198189614bbe565b606084018890526001600160a01b038716608085015260a0840186905283810360c085015290506122218185614968565b5f60608284031215614c5a575f5ffd5b50919050565b5f5f5f5f5f60e08688031215614c74575f5ffd5b614c7d866146e3565b9450614c8b602087016146e3565b9350614c99604087016146e3565b92506060860135915061495c8760808801614c4a565b5f5f5f5f5f5f60808789031215614cc4575f5ffd5b86356001600160401b03811115614cd9575f5ffd5b614ce589828a016148b8565b90975095505060208701356001600160401b03811115614d03575f5ffd5b614d0f89828a016148b8565b9095509350614d229050604088016146e3565b9150614d30606088016146e3565b90509295509295509295565b5f5f5f5f60608587031215614d4f575f5ffd5b84356001600160401b03811115614d64575f5ffd5b614d70878288016148b8565b9095509350614d839050602086016146e3565b9150614d91604086016146e3565b905092959194509250565b5f604082016040835280855180835260608501915060608160051b8601019250602087015f5b82811015614e2557868503605f19018452815180518087526020918201918701905f5b81811015614e0c5783516001600160a01b0316835260209384019390920191600101614de5565b5090965050506020938401939190910190600101614dc2565b5050505082810360208401526108d08185614a1c565b5f5f5f60608486031215614e4d575f5ffd5b614e56846146e3565b9250614e64602085016146e3565b929592945050506040919091013590565b5f5f5f5f60608587031215614e88575f5ffd5b614e91856146e3565b935060208501356001600160401b03811115614eab575f5ffd5b614eb7878288016148b8565b9094509250614d919050604086016146e3565b5f5f5f60408486031215614edc575f5ffd5b83356001600160401b03811115614ef1575f5ffd5b614efd868287016148b8565b9094509250614b939050602085016146e3565b5f5f5f60608486031215614f22575f5ffd5b614f2b846146e3565b9250614f39602085016146e3565b9150614b93604085016146e3565b82518152602080840151908201525f6060820160606040840152835190819052602084019060808401905f5b8181101561405257614fad83855180516001600160a01b031682526020808201519083015260408082015190830152606090810151910152565b6020939093019260809290920191600101614f73565b5f5f5f5f5f5f5f610100888a031215614fda575f5ffd5b614fe3886146e3565b965060208801356001600160401b03811115614ffd575f5ffd5b6150098a828b016148b8565b909750955061501c9050604089016146e3565b935061502a606089016146e3565b9250608088013591506150408960a08a01614c4a565b905092959891949750929550565b604081525f6150606040830185614776565b82810360208401528084518083526020830191506020860192505f5b818110156140525761509983855180518252602090810151910152565b602093909301926040929092019160010161507c565b5f5f604083850312156150c0575f5ffd5b6150c9836146e3565b946020939093013593505050565b5f602082840312156150e7575f5ffd5b5051919050565b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f8261513057634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f608082840312801561516e575f5ffd5b50604051608081016001600160401b038111828210171561519157615191615135565b60405261519d836146e3565b81526151ab602084016146e3565b6020820152604083810135908201526060928301359281019290925250919050565b5f5f8335601e198436030181126151e2575f5ffd5b8301803591506001600160401b038211156151fb575f5ffd5b6020019150600581901b3603821315611417575f5ffd5b6001600160901b03818116838216019081111561071f5761071f615102565b5f8184825b85811015615265576001600160a01b0361524f836146e3565b1683526020928301929190910190600101615236565b509095945050505050565b6001600160701b03818116838216019081111561071f5761071f615102565b6001815b6001841115611b54578085048111156152ae576152ae615102565b60018416156152bc57908102905b60019390931c928002615293565b5f826152d85750600161071f565b816152e457505f61071f565b81600181146152fa576002811461530457615320565b600191505061071f565b60ff84111561531557615315615102565b50506001821b61071f565b5060208310610133831016604e8410600b8410161715615343575081810a61071f565b61534f5f19848461528f565b805f190482111561536257615362615102565b029392505050565b5f611c1360ff8416836152ca565b808202811582820484141761071f5761071f615102565b6001600160701b03828116828216039081111561071f5761071f615102565b8181038181111561071f5761071f615102565b600181811c908216806153d557607f821691505b602082108103614c5a57634e487b7160e01b5f52602260045260245ffd5b60ff8116811461269e575f5ffd5b5f60208284031215615411575f5ffd5b8135611c13816153f3565b6001600160981b03828116828216039081111561071f5761071f615102565b5f825161544c818460208701614b9c565b9190910192915050565b5f60208284031215615466575f5ffd5b8151611c13816153f3565b60ff828116828216039081111561071f5761071f615102565b601f821115610bf657805f5260205f20601f840160051c810160208510156154af5750805b601f840160051c820191505b81811015613beb575f81556001016154bb565b81516001600160401b038111156154e7576154e7615135565b6154fb816154f584546153c1565b8461548a565b6020601f82116001811461552d575f83156155165750848201515b5f19600385901b1c1916600184901b178455613beb565b5f84815260208120601f198516915b8281101561555c578785015182556020948501946001909201910161553c565b508482101561557957868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b5f52602160045260245ffdfea16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10002dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a264697066735822122041b3a408f081b6647c4fdc70d60b8fbbf59d105a71e69a0734bd736ffa154ae964736f6c634300081b0033