827 txs
672 calls
constructor
constructor(string _name, string _symbol, address _depositToken, address[] _rewardTokens, address[] _escrowPools, uint256[] _escrowPortions, uint256[] _escrowDurations, uint256 _maxBonus, uint256 _minLockDuration, uint256 _maxLockDuration, address _badgeManager)
functions
adjustedBalanceOf
viewfunction adjustedBalanceOf(address user) view returns (uint256)
adjustedTotalSupply
viewfunction adjustedTotalSupply() view returns (uint256)
ADMIN_ROLE
viewfunction ADMIN_ROLE() view returns (bytes32)
allowance
viewfunction allowance(address owner, address spender) view returns (uint256)
balanceOf
viewfunction balanceOf(address account) view returns (uint256)
blacklistAmount
viewfunction blacklistAmount(address) view returns (uint256)
cumulativeRewardsOf
viewfunction cumulativeRewardsOf(address _reward, address _account) view returns (uint256)
decimals
viewfunction decimals() view returns (uint8)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
DENOMINATOR
viewfunction DENOMINATOR() view returns (uint256)
depositsOf
viewfunction depositsOf(address, uint256) view returns (uint256 amount, uint64 start, uint64 end, uint256 shareAmount)
depositToken
viewfunction depositToken() view returns (address)
escrowDurations
viewfunction escrowDurations(address) view returns (uint256)
escrowPools
viewfunction escrowPools(address) view returns (address)
escrowPortions
viewfunction escrowPortions(address) view returns (uint256)
getDepositsOf
viewfunction getDepositsOf(address _account) view returns (tuple[])
getDepositsOfLength
viewfunction getDepositsOfLength(address _account) view returns (uint256)
getMultiplier
viewfunction getMultiplier(uint256 _lockDuration) view returns (uint256)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getRoleMember
viewfunction getRoleMember(bytes32 role, uint256 index) view returns (address)
getRoleMemberCount
viewfunction getRoleMemberCount(bytes32 role) view returns (uint256)
getTotalDeposit
viewfunction getTotalDeposit(address _account) view returns (uint256)
gracePeriod
viewfunction gracePeriod() view returns (uint256)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
inBlacklist
viewfunction inBlacklist(address) view returns (bool)
kickRewardIncentive
viewfunction kickRewardIncentive() view returns (uint256)
maxBonus
viewfunction maxBonus() view returns (uint256)
maxLockDuration
viewfunction maxLockDuration() view returns (uint256)
migrationIsOn
viewfunction migrationIsOn() view returns (bool)
MIN_LOCK_DURATION_FOR_SAFETY
viewfunction MIN_LOCK_DURATION_FOR_SAFETY() view returns (uint256)
minLockDuration
viewfunction minLockDuration() view returns (uint256)
name
viewfunction name() view returns (string)
POINTS_MULTIPLIER
viewfunction POINTS_MULTIPLIER() view returns (uint128)
pointsCorrection
viewfunction pointsCorrection(address, address) view returns (int256)
pointsPerShare
viewfunction pointsPerShare(address) view returns (uint256)
rewardTokens
viewfunction rewardTokens(uint256) view returns (address)
rewardTokensLength
viewfunction rewardTokensLength() view returns (uint256)
rewardTokensList
viewfunction rewardTokensList(address) view returns (bool)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
symbol
viewfunction symbol() view returns (string)
TOKEN_SAVER_ROLE
viewfunction TOKEN_SAVER_ROLE() view returns (bytes32)
totalBlacklistAmount
viewfunction totalBlacklistAmount() view returns (uint256)
totalSupply
viewfunction totalSupply() view returns (uint256)
withdrawableRewardsOf
viewfunction withdrawableRewardsOf(address _reward, address _account) view returns (uint256)
withdrawnRewards
viewfunction withdrawnRewards(address, address) view returns (uint256)
withdrawnRewardsOf
viewfunction withdrawnRewardsOf(address _reward, address _account) view returns (uint256)
addBlacklist
nonpayablefunction addBlacklist(address _address)
addRewardToken
nonpayablefunction addRewardToken(address _reward, address _escrowPool, uint256 _escrowPortion, uint256 _escrowDuration)
approve
nonpayablefunction approve(address spender, uint256 amount) returns (bool)
batchDeposit
nonpayablefunction batchDeposit(uint256[] _amounts, uint256[] _durations, address[] _receivers)
batchMigrationDeposit
nonpayablefunction batchMigrationDeposit(uint256[] _amounts, uint64[] _starts, uint64[] _ends, address[] _receivers)
claimAll
nonpayablefunction claimAll(address _receiver)
claimRewards
nonpayablefunction claimRewards(address _reward, address _receiver)
decreaseAllowance
nonpayablefunction decreaseAllowance(address spender, uint256 subtractedValue) returns (bool)
deposit
nonpayablefunction deposit(uint256 _amount, uint256 _duration, address _receiver)
distributeRewards
nonpayablefunction distributeRewards(address _reward, uint256 _amount)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
increaseAllowance
nonpayablefunction increaseAllowance(address spender, uint256 addedValue) returns (bool)
kickExpiredDeposit
nonpayablefunction kickExpiredDeposit(address _account, uint256 _depositId)
migrationDeposit
nonpayablefunction migrationDeposit(uint256 _amount, uint64 _start, uint64 _end, address _receiver)
processExpiredLock
nonpayablefunction processExpiredLock(uint256 _depositId, uint256 _duration)
removeBlacklist
nonpayablefunction removeBlacklist(address _address)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address account)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
saveToken
nonpayablefunction saveToken(address _token, address _receiver, uint256 _amount)
transfer
nonpayablefunction transfer(address to, uint256 amount) returns (bool)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 amount) returns (bool)
turnOffMigration
nonpayablefunction turnOffMigration()
updateEscrowDuration
nonpayablefunction updateEscrowDuration(address _targetRewardToken, uint256 _newDuration)
updateEscrowPool
nonpayablefunction updateEscrowPool(address _targetRewardToken, address _newEscrowPool)
updateEscrowPortion
nonpayablefunction updateEscrowPortion(address _targetRewardToken, uint256 _newEscrowPortion)
updateGracePeriod
nonpayablefunction updateGracePeriod(uint256 _gracePeriod)
updateKickRewardIncentive
nonpayablefunction updateKickRewardIncentive(uint256 _kickRewardIncentive)
updateRewardToken
nonpayablefunction updateRewardToken(address _reward, address _escrowPool, uint256 _escrowPortion, uint256 _escrowDuration)
withdraw
nonpayablefunction withdraw(uint256 _depositId, address _receiver)
events
Approval
event Approval(address indexed owner, address indexed spender, uint256 value)
Deposited
event Deposited(uint256 amount, uint256 duration, address indexed receiver, address indexed from)
EscrowDurationUpdated
event EscrowDurationUpdated(address indexed _reward, uint256 _duration)
EscrowPoolUpdated
event EscrowPoolUpdated(address indexed _reward, address _escrowPool)
EscrowPortionUpdated
event EscrowPortionUpdated(address indexed _reward, uint256 _portion)
GracePeriodUpdated
event GracePeriodUpdated(uint256 _gracePeriod)
KickRewardIncentiveUpdated
event KickRewardIncentiveUpdated(uint256 _kickRewardIncentive)
MigrationTurnOff
event MigrationTurnOff(address by)
PointsCorrectionUpdated
event PointsCorrectionUpdated(address indexed reward, address indexed account, int256 points)
RewardsClaimed
event RewardsClaimed(address indexed _reward, address indexed _from, address indexed _receiver, uint256 _escrowedAmount, uint256 _nonEscrowedAmount)
RewardsDistributed
event RewardsDistributed(address indexed by, address indexed reward, uint256 rewardsDistributed)
RewardsWithdrawn
event RewardsWithdrawn(address indexed reward, address indexed by, uint256 fundsWithdrawn)
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)
TokenSaved
event TokenSaved(address indexed by, address indexed receiver, address indexed token, uint256 amount)
Transfer
event Transfer(address indexed from, address indexed to, uint256 value)
Withdrawn
event Withdrawn(uint256 indexed depositId, address indexed receiver, address indexed from, uint256 amount)
errors
No errors.
creation bytecode
0x61014060405262093a8060135560006014553480156200001e57600080fd5b5060405162006bab38038062006bab833981016040819052620000419162000f96565b8a8a8a8a8a8a8a6200079e60201b620010c717620007e660201b62001d15178888816003908162000073919062001197565b50600462000082828262001197565b5050506001600160401b039182166080521660a052620000a460003362000811565b6001600a556001600160a01b0385166200011a5760405162461bcd60e51b815260206004820152603d602482015260008051602062006b2b83398151915260448201527f6f723a204465706f73697420746f6b656e206d7573742062652073657400000060648201526084015b60405180910390fd5b82518451146200019d5760405162461bcd60e51b8152602060048201526052602482015260008051602062006b2b83398151915260448201527f6f723a2072657761726420746f6b656e7320616e6420657363726f7720706f6f6064820152710d8e640d8cadccee8d040dad2e6dac2e8c6d60731b608482015260a40162000111565b81518451146200022b5760405162461bcd60e51b8152602060048201526055602482015260008051602062006b2b83398151915260448201527f6f723a2072657761726420746f6b656e7320616e6420657363726f7720706f7260648201527f74696f6e73206c656e677468206d69736d617463680000000000000000000000608482015260a40162000111565b8051845114620002b95760405162461bcd60e51b8152602060048201526056602482015260008051602062006b2b83398151915260448201527f6f723a2072657761726420746f6b656e7320616e6420657363726f772064757260648201527f6174696f6e73206c656e677468206d69736d6174636800000000000000000000608482015260a40162000111565b6001600160a01b03851660c05260005b84518110156200054e576000858281518110620002ea57620002ea62001263565b6020026020010151905060006001600160a01b0316816001600160a01b0316036200037d5760405162461bcd60e51b8152602060048201526047602482015260008051602062006b2b83398151915260448201527f6f723a2072657761726420746f6b656e2063616e6e6f74206265207a65726f206064820152666164647265737360c81b608482015260a40162000111565b600085838151811062000394576200039462001263565b602002602001015190506000858481518110620003b557620003b562001263565b60200260200101519050670de0b6b3a764000081111562000430576040805162461bcd60e51b815260206004820152602481019190915260008051602062006b2b83398151915260448201527f6f723a2043616e6e6f7420657363726f77206d6f7265207468616e2031303025606482015260840162000111565b600085858151811062000447576200044762001263565b6020908102919091018101516001600160a01b0386166000908152600c90925260409091205490915060ff1662000534576001600160a01b038481166000818152600c60209081526040808320805460ff19166001908117909155600b805491820190557f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b03199081169095179055600d82528083208054958916959094168517909355600e8152828220869055600f9052208290551562000534576200053483600019866001600160a01b03166200082160201b62002ec3179092919060201c565b50505050808062000545906200128f565b915050620002c9565b506200056a60008051602062006b8b8339815191523362000811565b6200058560008051602062006b8b8339815191528062000970565b505050505050506102588310156200063f5760405162461bcd60e51b8152602060048201526086602482015260008051602062006b4b83398151915260448201527f626c65506f6f6c56332e636f6e7374727563746f723a206d696e206c6f636b20606482015260008051602062006b6b83398151915260848201527f6c20746f206d696e696e6d756d206c6f636b206475726174696f6e20666f722060a48201526573616665747960d01b60c482015260e40162000111565b82821015620006e15760405162461bcd60e51b815260206004820152607b602482015260008051602062006b4b83398151915260448201527f626c65506f6f6c56332e636f6e7374727563746f723a206d6178206c6f636b20606482015260008051602062006b6b83398151915260848201527f6c20746f206d696e696e6d756d206c6f636b206475726174696f6e000000000060a482015260c40162000111565b6001600160a01b038116620007745760405162461bcd60e51b815260206004820152605b602482015260008051602062006b4b83398151915260448201527f626c65506f6f6c56332e636f6e7374727563746f723a206261646765206d616e60648201527f616765722063616e6e6f74206265207a65726f20616464726573730000000000608482015260a40162000111565b5060e092909252610100526101205250506016805460ff1916600117905550620013529350505050565b6001600160a01b03811660009081526010602052604081205415620007c557506000919050565b620007db82620009bb60201b62001b0d1760201c565b92915050565b919050565b600060115462000800620009d660201b6200109d1760201c565b6200080c9190620012ab565b905090565b6200081d8282620009dc565b5050565b8015806200089f5750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa15801562000877573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200089d9190620012c1565b155b620009135760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e636500000000000000000000606482015260840162000111565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0390811663095ea7b360e01b179091526200096b91859162000a1a16565b505050565b600082815260086020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6001600160a01b031660009081526020819052604090205490565b60025490565b620009f3828262000af860201b6200300b1760201c565b60008281526009602090815260409091206200096b9183906200309162000b9c821b17901c565b600062000a76826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031662000bba60201b620030a6179092919060201c565b8051909150156200096b578080602001905181019062000a979190620012db565b6200096b5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000111565b60008281526008602090815260408083206001600160a01b038516845290915290205460ff166200081d5760008281526008602090815260408083206001600160a01b03851684529091529020805460ff1916600117905562000b583390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b600062000bb3836001600160a01b03841662000bd3565b9392505050565b606062000bcb848460008562000c25565b949350505050565b600081815260018301602052604081205462000c1c57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620007db565b506000620007db565b60608247101562000c885760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840162000111565b6001600160a01b0385163b62000ce15760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000111565b600080866001600160a01b0316858760405162000cff9190620012ff565b60006040518083038185875af1925050503d806000811462000d3e576040519150601f19603f3d011682016040523d82523d6000602084013e62000d43565b606091505b50909250905062000d5682828662000d61565b979650505050505050565b6060831562000d7257508162000bb3565b82511562000d835782518084602001fd5b8160405162461bcd60e51b81526004016200011191906200131d565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171562000de05762000de062000d9f565b604052919050565b60005b8381101562000e0557818101518382015260200162000deb565b50506000910152565b600082601f83011262000e2057600080fd5b81516001600160401b0381111562000e3c5762000e3c62000d9f565b62000e51601f8201601f191660200162000db5565b81815284602083860101111562000e6757600080fd5b62000bcb82602083016020870162000de8565b80516001600160a01b0381168114620007e157600080fd5b60006001600160401b0382111562000eae5762000eae62000d9f565b5060051b60200190565b600082601f83011262000eca57600080fd5b8151602062000ee362000edd8362000e92565b62000db5565b82815260059290921b8401810191818101908684111562000f0357600080fd5b8286015b8481101562000f295762000f1b8162000e7a565b835291830191830162000f07565b509695505050505050565b600082601f83011262000f4657600080fd5b8151602062000f5962000edd8362000e92565b82815260059290921b8401810191818101908684111562000f7957600080fd5b8286015b8481101562000f29578051835291830191830162000f7d565b60008060008060008060008060008060006101608c8e03121562000fb957600080fd5b8b516001600160401b0381111562000fd057600080fd5b62000fde8e828f0162000e0e565b60208e0151909c5090506001600160401b0381111562000ffd57600080fd5b6200100b8e828f0162000e0e565b9a50506200101c60408d0162000e7a565b60608d01519099506001600160401b038111156200103957600080fd5b620010478e828f0162000eb8565b60808e015190995090506001600160401b038111156200106657600080fd5b620010748e828f0162000eb8565b60a08e015190985090506001600160401b038111156200109357600080fd5b620010a18e828f0162000f34565b60c08e015190975090506001600160401b03811115620010c057600080fd5b620010ce8e828f0162000f34565b95505060e08c015193506101008c015192506101208c01519150620010f76101408d0162000e7a565b90509295989b509295989b9093969950565b600181811c908216806200111e57607f821691505b6020821081036200113f57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200096b57600081815260208120601f850160051c810160208610156200116e5750805b601f850160051c820191505b818110156200118f578281556001016200117a565b505050505050565b81516001600160401b03811115620011b357620011b362000d9f565b620011cb81620011c4845462001109565b8462001145565b602080601f831160018114620012035760008415620011ea5750858301515b600019600386901b1c1916600185901b1785556200118f565b600085815260208120601f198616915b82811015620012345788860151825594840194600190910190840162001213565b5085821015620012535787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201620012a457620012a462001279565b5060010190565b81810381811115620007db57620007db62001279565b600060208284031215620012d457600080fd5b5051919050565b600060208284031215620012ee57600080fd5b8151801515811462000bb357600080fd5b600082516200131381846020870162000de8565b9190910192915050565b60208152600082518060208401526200133e81604085016020870162000de8565b601f01601f19169190910160400192915050565b60805160a05160c05160e051610100516101205161574a620013e1600039600081816108f20152818161235f0152613d00015260008181610ab90152613d2c01526000818161066c0152612384015260008181610a1001528181610ea5015281816136ea01528181613b9601528181613bd00152613d64015260006141d001526000611033015261574a6000f3fe608060405234801561001057600080fd5b50600436106104475760003560e01c8063847def8711610241578063a8031a1d1161013b578063cd98cb58116100c3578063dd62ed3e11610087578063dd62ed3e14610adb578063eb91e65114610aee578063f07211fd14610b01578063f1e42ccd14610b14578063f9f405f614610b2757600080fd5b8063cd98cb5814610a45578063ceba4c5d14610a65578063d4a7cb9914610a8e578063d547741f14610aa1578063d6a298e914610ab457600080fd5b8063b8162dd21161010a578063b8162dd2146109c7578063bf199e62146109f0578063c711eb76146109f8578063c89039c514610a0b578063ca15c87314610a3257600080fd5b8063a8031a1d1461094b578063a9059cbb1461095e578063adf8252d14610971578063ae22192e1461098457600080fd5b806395d89b41116101c9578063a16cdbb11161018d578063a16cdbb1146108ed578063a217fddf14610914578063a27004f11461091c578063a457c2d71461092f578063a70e39951461094257600080fd5b806395d89b411461088b578063975379fd146108935780639afdb2c2146108be5780639cfe42da146108d1578063a06db7dc146108e457600080fd5b80638f2203f6116102105780638f2203f6146108165780638ff76e131461083c5780639010d07c1461085c578063918f86741461086f57806391d148541461087857600080fd5b8063847def87146107bd578063857184d1146107e85780638dbdbe6d146107fb5780638f1314b61461080e57600080fd5b80633989f229116103525780635ab98d5a116102da57806377329f351161029e57806377329f35146107035780637bb7bed1146107165780637e29b7ef146107415780637f0bc55e14610764578063804d94261461079d57600080fd5b80635ab98d5a1461068e57806363a32ad7146106a157806370a08231146106b457806375b238fc146106c757806376175b06146106dc57600080fd5b806346e0c1711161032157806346e0c17114610618578063472c9c101461062b578063475d9d471461064b57806353e71e371461065e57806354c5b6961461066757600080fd5b80633989f229146105e15780633a6aacd6146105f45780633c8a17dc146105fc57806344899a8b1461060f57600080fd5b8063248a9ca3116103d5578063313ce567116103a4578063313ce5671461058c57806333dd675b1461059b57806336568abe146105a857806337577a32146105bb57806339509351146105ce57600080fd5b8063248a9ca314610530578063257984181461055357806327123a03146105665780632f2ff15d1461057957600080fd5b8063095ea7b31161041c578063095ea7b3146104c15780630ad65d90146104d457806313f448ec146104f557806318160ddd1461051557806323b872dd1461051d57600080fd5b806286786e1461044c578062f714ce1461048457806301ffc9a71461049957806306fdde03146104ac575b600080fd5b61046f61045a366004614e07565b60126020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b610497610492366004614e22565b610b3a565b005b61046f6104a7366004614e4e565b610f1b565b6104b4610f46565b60405161047b9190614e9c565b61046f6104cf366004614ecf565b610fd8565b6104e76104e2366004614ef9565b610ff0565b60405190815260200161047b565b6104e7610503366004614e07565b60056020526000908152604090205481565b6002546104e7565b61046f61052b366004614f23565b6110a3565b6104e761053e366004614f5f565b60009081526008602052604090206001015490565b6104e7610561366004614e07565b6110c7565b610497610574366004614f78565b6110fb565b610497610587366004614e22565b611382565b6040516012815260200161047b565b60165461046f9060ff1681565b6104976105b6366004614e22565b6113ac565b6104e76105c9366004614ef9565b61142a565b61046f6105dc366004614ecf565b611466565b6104976105ef366004614f78565b611488565b6104976116c0565b61049761060a366004614fd1565b6117bf565b6104e760115481565b610497610626366004614ecf565b611831565b6104e7610639366004614e07565b60106020526000908152604090205481565b610497610659366004614ecf565b61194c565b6104e760145481565b6104e77f000000000000000000000000000000000000000000000000000000000000000081565b61049761069c366004614f5f565b611989565b6104976106af366004614f5f565b6119f9565b6104e76106c2366004614e07565b611b0d565b6104e76000805160206156f583398151915281565b6104e77fd9d917c4034cff8a8c5fa1e40f9fbaf906b827c33ae3ab1fcabbb616cb8ef24d81565b610497610711366004614e07565b611b28565b610729610724366004614f5f565b611b7e565b6040516001600160a01b03909116815260200161047b565b61046f61074f366004614e07565b600c6020526000908152604090205460ff1681565b6104e7610772366004614ef9565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b6107b06107ab366004614e07565b611ba8565b60405161047b919061501e565b6104e76107cb366004614ef9565b600760209081526000928352604080842090915290825290205481565b6104e76107f6366004614e07565b611c4e565b61049761080936600461508e565b611cd6565b6104e7611d15565b6108246001600160801b0381565b6040516001600160801b03909116815260200161047b565b6104e761084a366004614e07565b600e6020526000908152604090205481565b61072961086a3660046150c3565b611d32565b6104e761271081565b61046f610886366004614e22565b611d4a565b6104b4611d75565b6104e76108a1366004614ef9565b600660209081526000928352604080842090915290825290205481565b6104976108cc366004614f23565b611d84565b6104976108df366004614e07565b611e85565b6104e760135481565b6104e77f000000000000000000000000000000000000000000000000000000000000000081565b6104e7600081565b61049761092a36600461521b565b61203b565b61046f61093d366004614ecf565b6121ef565b6104e761025881565b610497610959366004614ecf565b61226a565b61046f61096c366004614ecf565b61234d565b6104e761097f366004614f5f565b61235b565b610997610992366004614ecf565b6123b2565b60405161047b94939291909384526001600160401b03928316602085015291166040830152606082015260800190565b6104e76109d5366004614e07565b6001600160a01b031660009081526015602052604090205490565b600b546104e7565b610497610a06366004615304565b61240a565b6107297f000000000000000000000000000000000000000000000000000000000000000081565b6104e7610a40366004614f5f565b6126c5565b6104e7610a53366004614e07565b600f6020526000908152604090205481565b610729610a73366004614e07565b600d602052600090815260409020546001600160a01b031681565b610497610a9c366004614ecf565b6126dc565b610497610aaf366004614e22565b612867565b6104e77f000000000000000000000000000000000000000000000000000000000000000081565b6104e7610ae9366004614ef9565b61288c565b610497610afc366004614e07565b6128b7565b610497610b0f366004614ef9565b612a95565b610497610b22366004614ef9565b612c79565b610497610b353660046150c3565b612e8f565b6002600a5403610b655760405162461bcd60e51b8152600401610b5c906153b0565b60405180910390fd5b6002600a556001600160a01b038116610bf05760405162461bcd60e51b815260206004820152605360248201526000805160206156b583398151915260448201527f626c65506f6f6c56332e77697468647261773a2072656365697665722063616e6064820152726e6f74206265207a65726f206164647265737360681b608482015260a401610b5c565b336000908152601560205260409020548210610c755760405162461bcd60e51b815260206004820152604a60248201526000805160206156b583398151915260448201527f626c65506f6f6c56332e77697468647261773a204465706f73697420646f6573606482015269081b9bdd08195e1a5cdd60b21b608482015260a401610b5c565b336000908152601560205260408120805484908110610c9657610c966153e7565b60009182526020918290206040805160808101825260039093029091018054835260018101546001600160401b0380821695850195909552600160401b900490931690820181905260029092015460608201529150421015610d4e5760405162461bcd60e51b815260206004820152603c60248201526000805160206156b583398151915260448201527f626c65506f6f6c56332e77697468647261773a20746f6f20736f6f6e000000006064820152608401610b5c565b3360009081526015602052604090208054610d6b90600190615413565b81548110610d7b57610d7b6153e7565b906000526020600020906003020160156000610d943390565b6001600160a01b03166001600160a01b031681526020019081526020016000208481548110610dc557610dc56153e7565b600091825260208083208454600393909302019182556001808501805491840180546001600160401b0393841667ffffffffffffffff1982168117835592546001600160801b0319909116909217600160401b928390049093169091029190911790556002938401549390910192909255338152601590915260409020805480610e5157610e51615426565b6000828152602081206003600019909301928302018181556001810180546001600160801b0319169055600201559055610e95610e8b3390565b82606001516130bd565b8051610ecd906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690849061318b565b805160405190815233906001600160a01b0384169085907fe5df19de43c8c04fd192bc68e484b2593570925fbb6ad8c07ccafbc2aa5c37a19060200160405180910390a450506001600a5550565b60006001600160e01b03198216635a05180f60e01b1480610f405750610f40826131bb565b92915050565b606060038054610f559061543c565b80601f0160208091040260200160405190810160405280929190818152602001828054610f819061543c565b8015610fce5780601f10610fa357610100808354040283529160200191610fce565b820191906000526020600020905b815481529060010190602001808311610fb157829003601f168201915b5050505050905090565b600033610fe68185856131f0565b5060019392505050565b6001600160a01b0380831660009081526006602090815260408083209385168352929052908120546001600160801b039061108c9061107d6110558663ffffffff7f000000000000000000000000000000000000000000000000000000000000000016565b6001600160a01b0388166000908152600560205260409020546110789190615476565b613315565b611087919061548d565b613383565b61109691906154b5565b9392505050565b60025490565b6000336110b18582856133d5565b6110bc858585613449565b506001949350505050565b6001600160a01b038116600090815260106020526040812054156110ed57506000919050565b610f4082611b0d565b919050565b6111136000805160206156f583398151915233611d4a565b61112f5760405162461bcd60e51b8152600401610b5c906154d7565b6001600160a01b0384166000908152600c602052604090205460ff166111cc5760405162461bcd60e51b815260206004820152604660248201527f4d756c74695265776172647342617365506f6f6c56332e75706461746552657760448201527f617264546f6b656e3a2072657761726420746f6b656e206e6f7420696e20746860648201526519481b1a5cdd60d21b608482015260a401610b5c565b6001600160a01b03841661125e5760405162461bcd60e51b815260206004820152604d60248201527f4d756c74695265776172647342617365506f6f6c56332e75706461746552657760448201527f617264546f6b656e3a2072657761726420746f6b656e2063616e6e6f7420626560648201526c207a65726f206164647265737360981b608482015260a401610b5c565b670de0b6b3a76400008211156112eb5760405162461bcd60e51b815260206004820152604660248201527f4d756c74695265776172647342617365506f6f6c56332e75706461746552657760448201527f617264546f6b656e3a2043616e6e6f7420657363726f77206d6f7265207468616064820152656e203130302560d01b608482015260a401610b5c565b6001600160a01b038481166000908152600d602052604090205481169084161480159061132057506001600160a01b03831615155b1561133b5761133b6001600160a01b03851684600019612ec3565b6001600160a01b039384166000908152600d6020908152604080832080546001600160a01b0319169690971695909517909555600e855283812092909255600f9093522055565b60008281526008602052604090206001015461139d81613484565b6113a7838361348e565b505050565b6001600160a01b038116331461141c5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610b5c565b61142682826134b0565b5050565b6001600160a01b03808316600090815260076020908152604080832093851683529290529081205461145c8484610ff0565b6110969190615413565b600033610fe6818585611479838361288c565b6114839190615519565b6131f0565b6114a06000805160206156f583398151915233611d4a565b6114bc5760405162461bcd60e51b8152600401610b5c906154d7565b6001600160a01b03841661154b5760405162461bcd60e51b815260206004820152604a60248201527f4d756c74695265776172647342617365506f6f6c56332e61646452657761726460448201527f546f6b656e3a2072657761726420746f6b656e2063616e6e6f74206265207a65606482015269726f206164647265737360b01b608482015260a401610b5c565b670de0b6b3a76400008211156115d55760405162461bcd60e51b815260206004820152604360248201527f4d756c74695265776172647342617365506f6f6c56332e61646452657761726460448201527f546f6b656e3a2043616e6e6f7420657363726f77206d6f7265207468616e203160648201526230302560e81b608482015260a401610b5c565b6001600160a01b0384166000908152600c602052604090205460ff166116ba576001600160a01b038481166000818152600c602090815260408083208054600160ff199091168117909155600b805491820190557f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b03199081168617909155600d8352818420805490911695891695909517909455600e8152838220869055600f9052919091208290551580159061169f57506001600160a01b03831615155b156116ba576116ba6001600160a01b03851684600019612ec3565b50505050565b6116d86000805160206156f583398151915233611d4a565b6116f45760405162461bcd60e51b8152600401610b5c906154d7565b60165460ff166117805760405162461bcd60e51b815260206004820152605860248201526000805160206156b583398151915260448201527f626c65506f6f6c56332e7475726e4f66664d6967726174696f6e3a206d69677260648201527f6174696f6e20616c7265616479207475726e6564206f66660000000000000000608482015260a401610b5c565b6016805460ff191690556040805133815290517faad4a76524b73b53afab937749d8ca4a969845ac883a869b264ee26a074b5cc49181900360200190a1565b6002600a54036117e15760405162461bcd60e51b8152600401610b5c906153b0565b6002600a556117fe6000805160206156f583398151915233611d4a565b61181a5760405162461bcd60e51b8152600401610b5c906154d7565b611826848484846134d2565b50506001600a555050565b6118496000805160206156f583398151915233611d4a565b6118655760405162461bcd60e51b8152600401610b5c906154d7565b6001600160a01b0382166000908152600c602052604090205460ff166118f35760405162461bcd60e51b815260206004820152604960248201526000805160206156d583398151915260448201527f726f774475726174696f6e3a2072657761726420746f6b656e206e6f7420696e606482015268081d1a19481b1a5cdd60ba1b608482015260a401610b5c565b6001600160a01b0382166000818152600f602052604090819020839055517f2b94bbbcc2993caca776a273717c7c82c0314d7644a871097242b830c4bd4395906119409084815260200190565b60405180910390a25050565b6002600a540361196e5760405162461bcd60e51b8152600401610b5c906153b0565b6002600a55611980828260008061384c565b50506001600a55565b6119a16000805160206156f583398151915233611d4a565b6119bd5760405162461bcd60e51b8152600401610b5c906154d7565b60138190556040518181527f33d1191f5a3abfe19d468d51bb5ece97489f1277a912a5b5c65992fc279ad3d4906020015b60405180910390a150565b611a116000805160206156f583398151915233611d4a565b611a2d5760405162461bcd60e51b8152600401610b5c906154d7565b612710811115611ad85760405162461bcd60e51b815260206004820152607660248201526000805160206156b583398151915260448201527f626c65506f6f6c56332e7570646174654b69636b526577617264496e63656e7460648201527f6976653a206b69636b2072657761726420696e63656e746976652063616e6e6f608482015275742062652067726561746572207468616e203130302560501b60a482015260c401610b5c565b60148190556040518181527fa78554d3d99d13fd2a265581c5eb9db1f2add65bc53cecec07aeb18eb0b38e80906020016119ee565b6001600160a01b031660009081526020819052604090205490565b60005b600b54811015611426576000600b8281548110611b4a57611b4a6153e7565b6000918252602090912001546001600160a01b03169050611b6b8184612c79565b5080611b768161552c565b915050611b2b565b600b8181548110611b8e57600080fd5b6000918252602090912001546001600160a01b0316905081565b6001600160a01b0381166000908152601560209081526040808320805482518185028101850190935280835260609492939192909184015b82821015611c435760008481526020908190206040805160808101825260038602909201805483526001808201546001600160401b0380821686880152600160401b90910416928401929092526002015460608301529083529092019101611be0565b505050509050919050565b60008060005b6001600160a01b038416600090815260156020526040902054811015611ccf576001600160a01b0384166000908152601560205260409020805482908110611c9e57611c9e6153e7565b90600052602060002090600302016000015482611cbb9190615519565b915080611cc78161552c565b915050611c54565b5092915050565b6002600a5403611cf85760405162461bcd60e51b8152600401610b5c906153b0565b6002600a55611d0b338484846000613c00565b50506001600a5550565b6000601154611d2360025490565b611d2d9190615413565b905090565b60008281526009602052604081206110969083613ee0565b60009182526008602090815260408084206001600160a01b0393909316845291905290205460ff1690565b606060048054610f559061543c565b611dae7fd9d917c4034cff8a8c5fa1e40f9fbaf906b827c33ae3ab1fcabbb616cb8ef24d33611d4a565b611e0f5760405162461bcd60e51b815260206004820152602c60248201527f546f6b656e53617665722e6f6e6c79546f6b656e53617665723a207065726d6960448201526b1cdcda5bdb8819195b9a595960a21b6064820152608401610b5c565b611e236001600160a01b038416838361318b565b826001600160a01b0316826001600160a01b0316611e3e3390565b6001600160a01b03167f30d87cec6b4c56cede1018725d1e6d9304e2f7ee6d25b004b7e2183f793f26bc84604051611e7891815260200190565b60405180910390a4505050565b611e9d6000805160206156f583398151915233611d4a565b611eb95760405162461bcd60e51b8152600401610b5c906154d7565b6001600160a01b03811660009081526012602052604090205460ff1615611f605760405162461bcd60e51b815260206004820152604f60248201527f4d756c74695265776172647342617365506f6f6c56332e616464426c61636b6c60448201527f6973743a20616c726561647920696e20626c61636b6c6973742c20706c65617360648201526e652074727920746f2075706461746560881b608482015260a401610b5c565b6001600160a01b0381166000908152601260205260409020805460ff19166001179055611f8c81611b0d565b6001600160a01b038216600090815260106020526040902055611fae81611b0d565b60116000828254611fbf9190615519565b9091555060009050611fd082611b0d565b11156120385760005b600b54811015611426576000600b8281548110611ff857611ff86153e7565b6000918252602090912001546001600160a01b03169050612025818461202061107882611b0d565b613eec565b50806120308161552c565b915050611fd9565b50565b6002600a540361205d5760405162461bcd60e51b8152600401610b5c906153b0565b6002600a5581518351146120ed5760405162461bcd60e51b815260206004820152605d60248201526000805160206156b583398151915260448201527f626c65506f6f6c56332e62617463684465706f7369743a20616d6f756e74732060648201527f616e64206475726174696f6e73206c656e677468206d69736d61746368000000608482015260a401610b5c565b80518351146121785760405162461bcd60e51b815260206004820152605d60248201526000805160206156b583398151915260448201527f626c65506f6f6c56332e62617463684465706f7369743a20616d6f756e74732060648201527f616e6420726563656976657273206c656e677468206d69736d61746368000000608482015260a401610b5c565b60005b8151811015611826576121dd3385838151811061219a5761219a6153e7565b60200260200101518584815181106121b4576121b46153e7565b60200260200101518585815181106121ce576121ce6153e7565b60200260200101516000613c00565b806121e78161552c565b91505061217b565b600033816121fd828661288c565b90508381101561225d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b5c565b6110bc82868684036131f0565b6002600a540361228c5760405162461bcd60e51b8152600401610b5c906153b0565b6002600a556001600160a01b0382166000908152600c602052604090205460ff1661232e5760405162461bcd60e51b815260206004820152604660248201527f4d756c74695265776172647342617365506f6f6c56332e64697374726962757460448201527f65526577617264733a2072657761726420746f6b656e206e6f7420696e20746860648201526519481b1a5cdd60d21b608482015260a401610b5c565b6123436001600160a01b03831633308461410b565b6119808282614143565b600033610fe6818585613449565b60007f00000000000000000000000000000000000000000000000000000000000000006123a8837f0000000000000000000000000000000000000000000000000000000000000000615476565b610f4091906154b5565b601560205281600052604060002081815481106123ce57600080fd5b60009182526020909120600390910201805460018201546002909201549093506001600160401b038083169350600160401b9092049091169084565b6002600a540361242c5760405162461bcd60e51b8152600401610b5c906153b0565b6002600a556124496000805160206156f583398151915233611d4a565b6124655760405162461bcd60e51b8152600401610b5c906154d7565b82518451146124fc5760405162461bcd60e51b815260206004820152606360248201526000805160206156b583398151915260448201527f626c65506f6f6c56332e62617463684d6967726174696f6e4465706f7369743a60648201527f20616d6f756e747320616e6420737461727473206c656e677468206d69736d616084820152620e8c6d60eb1b60a482015260c401610b5c565b81518451146125915760405162461bcd60e51b815260206004820152606160248201526000805160206156b583398151915260448201527f626c65506f6f6c56332e62617463684d6967726174696f6e4465706f7369743a60648201527f20616d6f756e747320616e6420656e6473206c656e677468206d69736d6174636084820152600d60fb1b60a482015260c401610b5c565b805184511461262b5760405162461bcd60e51b815260206004820152606660248201526000805160206156b583398151915260448201527f626c65506f6f6c56332e62617463684d6967726174696f6e4465706f7369743a60648201527f20616d6f756e747320616e6420726563656976657273206c656e677468206d696084820152650e6dac2e8c6d60d31b60a482015260c401610b5c565b60005b81518110156126b9576126a785828151811061264c5761264c6153e7565b6020026020010151858381518110612666576126666153e7565b6020026020010151858481518110612680576126806153e7565b602002602001015185858151811061269a5761269a6153e7565b60200260200101516134d2565b806126b18161552c565b91505061262e565b50506001600a55505050565b6000818152600960205260408120610f4090614305565b6126f46000805160206156f583398151915233611d4a565b6127105760405162461bcd60e51b8152600401610b5c906154d7565b6001600160a01b0382166000908152600c602052604090205460ff1661279d5760405162461bcd60e51b815260206004820152604860248201526000805160206156d583398151915260448201527f726f77506f7274696f6e3a2072657761726420746f6b656e206e6f7420696e206064820152671d1a19481b1a5cdd60c21b608482015260a401610b5c565b670de0b6b3a764000081111561281a5760405162461bcd60e51b815260206004820152604860248201526000805160206156d583398151915260448201527f726f77506f7274696f6e3a2063616e6e6f7420657363726f77206d6f7265207460648201526768616e203130302560c01b608482015260a401610b5c565b6001600160a01b0382166000818152600e602052604090819020839055517f257c7544461793961fdae4af71a43889f1615f4c2c75c72149b9dd38f7334182906119409084815260200190565b60008281526008602052604090206001015461288281613484565b6113a783836134b0565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6128cf6000805160206156f583398151915233611d4a565b6128eb5760405162461bcd60e51b8152600401610b5c906154d7565b6001600160a01b03811660009081526012602052604090205460ff1661299f5760405162461bcd60e51b815260206004820152605960248201527f4d756c74695265776172647342617365506f6f6c56332e72656d6f7665426c6160448201527f636b6c6973743a2061646472657373206e6f7420696e20626c61636b6c69737460648201527f2c20706c656173652074727920746f2061646420666972737400000000000000608482015260a401610b5c565b6001600160a01b0381166000908152601260209081526040808320805460ff19169055601090915290205415612a4a5760005b600b54811015612a48576000600b82815481106129f1576129f16153e7565b60009182526020808320909101546001600160a01b038681168452601090925260409092205491169150612a359082908590612a2c90613315565b61202090615545565b5080612a408161552c565b9150506129d2565b505b6001600160a01b0381166000908152601060205260408120546011805491929091612a76908490615413565b90915550506001600160a01b0316600090815260106020526040812055565b612aad6000805160206156f583398151915233611d4a565b612ac95760405162461bcd60e51b8152600401610b5c906154d7565b6001600160a01b038116612b335760405162461bcd60e51b815260206004820152603f60248201526000805160206156d583398151915260448201527f726f77506f6f6c3a20657363726f77506f6f6c206d75737420626520736574006064820152608401610b5c565b6001600160a01b0382166000908152600c602052604090205460ff16612bbd5760405162461bcd60e51b815260206004820152604560248201526000805160206156d583398151915260448201527f726f77506f6f6c3a2072657761726420746f6b656e206e6f7420696e20746865606482015264081b1a5cdd60da1b608482015260a401610b5c565b6001600160a01b038083166000818152600d6020526040902080548484166001600160a01b03198216179091559091169015801590612c0457506001600160a01b03821615155b15612c3457612c1e6001600160a01b038416826000612ec3565b612c346001600160a01b03841683600019612ec3565b6040516001600160a01b0383811682528416907f8cf993d29f8b2fba7f52060ce79226fd341f66d80230b216e41772f7c5337ca09060200160405180910390a2505050565b6001600160a01b0382166000908152600c602052604090205460ff16612d115760405162461bcd60e51b815260206004820152604160248201527f4d756c74695265776172647342617365506f6f6c56332e636c61696d5265776160448201527f7264733a2072657761726420746f6b656e206e6f7420696e20746865206c69736064820152601d60fa1b608482015260a401610b5c565b6000612d1d833361430f565b6001600160a01b0384166000908152600e602052604081205491925090670de0b6b3a764000090612d4e9084615476565b612d5891906154b5565b90506000612d668284615413565b6001600160a01b038087166000908152600d6020526040902054919250168215801590612d9b57506001600160a01b03811615155b15612e1f576001600160a01b038681166000908152600f602052604090819020549051638dbdbe6d60e01b8152600481018690526024810191909152868216604482015290821690638dbdbe6d90606401600060405180830381600087803b158015612e0657600080fd5b505af1158015612e1a573d6000803e3d6000fd5b505050505b6001821115612e3c57612e3c6001600160a01b038716868461318b565b60408051848152602081018490526001600160a01b03878116923392918a16917f7e27222c50a5510dfc61468d936b48c880bfbd05c1eb59c5be79b06e582369dd910160405180910390a4505050505050565b6002600a5403612eb15760405162461bcd60e51b8152600401610b5c906153b0565b6002600a55611980338360018461384c565b801580612f3d5750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa158015612f17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f3b9190615561565b155b612fa85760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b6064820152608401610b5c565b6040516001600160a01b0383166024820152604481018290526113a790849063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526144b5565b6130158282611d4a565b6114265760008281526008602090815260408083206001600160a01b03851684529091529020805460ff1916600117905561304d3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000611096836001600160a01b038416614587565b60606130b584846000856145d6565b949350505050565b6130c78282614707565b6001600160a01b03821660009081526012602052604090205460ff166131415760005b600b548110156113a7576000600b8281548110613109576131096153e7565b6000918252602090912001546001600160a01b0316905061312e818561202086613315565b50806131398161552c565b9150506130ea565b6001600160a01b03821660009081526010602052604081208054839290613169908490615413565b9250508190555080601160008282546131829190615413565b90915550505050565b6040516001600160a01b0383166024820152604481018290526113a790849063a9059cbb60e01b90606401612fd4565b60006001600160e01b03198216637965db0b60e01b1480610f4057506301ffc9a760e01b6001600160e01b0319831614610f40565b6001600160a01b0383166132525760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b5c565b6001600160a01b0382166132b35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b5c565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006001600160ff1b0382111561337f5760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604482015267371034b73a191a9b60c11b6064820152608401610b5c565b5090565b60008082121561337f5760405162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f7369746976656044820152606401610b5c565b60006133e1848461288c565b905060001981146116ba578181101561343c5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610b5c565b6116ba84848484036131f0565b60405162461bcd60e51b815260206004820152601060248201526f4e4f4e5f5452414e5346455241424c4560801b6044820152606401610b5c565b6120388133614855565b613498828261300b565b60008281526009602052604090206113a79082613091565b6134ba82826148b9565b60008281526009602052604090206113a79082614920565b60165460ff166135505760405162461bcd60e51b815260206004820152604f60248201526000805160206156b583398151915260448201527f626c65506f6f6c56332e5f6d6967726174696f6e4465706f7369743a206f6e6c60648201526e3c903337b91036b4b3b930ba34b7b760891b608482015260a401610b5c565b6001600160a01b0381166135e05760405162461bcd60e51b815260206004820152605c60248201526000805160206156b583398151915260448201527f626c65506f6f6c56332e5f6d6967726174696f6e4465706f7369743a2072656360648201527f65697665722063616e6e6f74206265207a65726f206164647265737300000000608482015260a401610b5c565b6000841161365a5760405162461bcd60e51b815260206004820152604d60248201526000805160206156b583398151915260448201527f626c65506f6f6c56332e5f6d6967726174696f6e4465706f7369743a2063616e60648201526c06e6f74206465706f736974203609c1b608482015260a401610b5c565b826001600160401b0316826001600160401b0316116136e55760405162461bcd60e51b815260206004820152604d60248201526000805160206156b583398151915260448201527f626c65506f6f6c56332e5f6d6967726174696f6e4465706f7369743a20696e7660648201526c30b634b210323ab930ba34b7b760991b608482015260a401610b5c565b61371a7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633308761410b565b6000613726848461557a565b6001600160401b031690506000670de0b6b3a76400006137458361235b565b61374f9088615476565b61375991906154b5565b6001600160a01b038416600090815260156020908152604080832081516080810183528b81526001600160401b03808c168286019081528b82169483019485526060830188815284546001818101875595895296909720925160039096029092019485559051918401805493518216600160401b026001600160801b0319909416929091169190911791909117905590516002909101559050806137fd8482614935565b604080518881526020810185905233916001600160a01b038716917f34194be2f096bdb2ad418add902a4da76d3d6f6d387d86d857f56c7711ecca70910160405180910390a350505050505050565b6001600160a01b0384166138dc5760405162461bcd60e51b815260206004820152606060248201526000805160206156b583398151915260448201527f626c65506f6f6c56332e5f70726f63657373457870697265644465706f73697460648201527f3a206163636f756e742063616e6e6f74206265207a65726f2061646472657373608482015260a401610b5c565b6001600160a01b0384166000908152601560205260408120805485908110613906576139066153e7565b60009182526020918290206040805160808101825260039093029091018054835260018101546001600160401b0380821695850195909552600160401b9004909316908201819052600290920154606082015291504210156139d15760405162461bcd60e51b815260206004820152604a60248201526000805160206156b583398151915260448201527f626c65506f6f6c56332e5f70726f63657373457870697265644465706f7369746064820152691d103a37b79039b7b7b760b11b608482015260a401610b5c565b805160135460408301516000916139f0916001600160401b0316615519565b4210613a2157601454835161271091613a0891615476565b613a1291906154b5565b9050613a1e8183615413565b91505b6001600160a01b03871660009081526015602052604090208054613a4790600190615413565b81548110613a5757613a576153e7565b906000526020600020906003020160156000896001600160a01b03166001600160a01b031681526020019081526020016000208781548110613a9b57613a9b6153e7565b60009182526020808320845460039093020191825560018085018054918401805467ffffffffffffffff1981166001600160401b0394851690811783559254600160401b908190049094169093026001600160801b031990931690911791909117905560029384015493909101929092556001600160a01b0389168152601590915260409020805480613b3057613b30615426565b6000828152602081206003600019909301928302018181556001810180546001600160801b03191690556002015590556060830151613b709088906130bd565b8415613b8957613b843383868a6001613c00565b613bbd565b613bbd6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016888461318b565b8015613bf757613bf76001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016338361318b565b50505050505050565b6001600160a01b038216613c865760405162461bcd60e51b815260206004820152605360248201526000805160206156b583398151915260448201527f626c65506f6f6c56332e5f6465706f7369743a2072656365697665722063616e6064820152726e6f74206265207a65726f206164647265737360681b608482015260a401610b5c565b60008411613cf85760405162461bcd60e51b8152602060048201526044602482018190526000805160206156b5833981519152908201527f626c65506f6f6c56332e5f6465706f7369743a2063616e6e6f74206465706f736064820152630697420360e41b608482015260a401610b5c565b6000613d24847f00000000000000000000000000000000000000000000000000000000000000006149fa565b9050613d50817f0000000000000000000000000000000000000000000000000000000000000000614a10565b905081613d8c57613d8c6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001687308861410b565b6000670de0b6b3a7640000613da08361235b565b613daa9088615476565b613db491906154b5565b9050600081905060156000866001600160a01b03166001600160a01b031681526020019081526020016000206040518060800160405280898152602001426001600160401b031681526020018542613e0c919061559a565b6001600160401b0390811682526020918201859052835460018181018655600095865294839020845160039092020190815591830151938201805460408501518316600160401b026001600160801b031990911695909216949094171790925560600151600290910155613e808582614935565b876001600160a01b0316856001600160a01b03167f34194be2f096bdb2ad418add902a4da76d3d6f6d387d86d857f56c7711ecca708986604051613ece929190918252602082015260400190565b60405180910390a35050505050505050565b60006110968383614a20565b6001600160a01b038316613f685760405162461bcd60e51b815260206004820152603d60248201527f4162737472616374526577617264732e5f636f7272656374506f696e74733a2060448201527f7265776172642063616e6e6f74206265207a65726f20616464726573730000006064820152608401610b5c565b6001600160a01b038216613fe45760405162461bcd60e51b815260206004820152603e60248201527f4162737472616374526577617264732e5f636f7272656374506f696e74733a2060448201527f6163636f756e742063616e6e6f74206265207a65726f206164647265737300006064820152608401610b5c565b806000036140525760405162461bcd60e51b815260206004820152603560248201527f4162737472616374526577617264732e5f636f7272656374506f696e74733a206044820152747368617265732063616e6e6f74206265207a65726f60581b6064820152608401610b5c565b6001600160a01b03831660009081526005602052604090205461407490613315565b61407e90826155ba565b6001600160a01b038085166000908152600660209081526040808320938716835292905220546140ae919061548d565b6001600160a01b038481166000818152600660209081526040808320948816808452948252918290208590559051938452919290917f805686830eb2172dc59c1de92fdf8618d5cc21eda811cf00c034016642ce379b9101613308565b6040516001600160a01b03808516602483015283166044820152606481018290526116ba9085906323b872dd60e01b90608401612fd4565b6001600160a01b0382166141c95760405162461bcd60e51b815260206004820152604160248201527f4162737472616374526577617264732e5f64697374726962757465526577617260448201527f64733a207265776172642063616e6e6f74206265207a65726f206164647265736064820152607360f81b608482015260a401610b5c565b60006141f77f000000000000000000000000000000000000000000000000000000000000000063ffffffff16565b90506000811161426f5760405162461bcd60e51b815260206004820152603e60248201527f4162737472616374526577617264732e5f64697374726962757465526577617260448201527f64733a20746f74616c20736861726520737570706c79206973207a65726f00006064820152608401610b5c565b81156113a757806142876001600160801b0384615476565b61429191906154b5565b6001600160a01b0384166000908152600560205260409020546142b49190615519565b6001600160a01b0384166000818152600560205260409081902092909255905133907f92d8e67e11e35152e7b525077fc4cf66393423d128ce3b803453b22533c57641906133089086815260200190565b6000610f40825490565b60006001600160a01b03831661438d5760405162461bcd60e51b815260206004820152603e60248201527f4162737472616374526577617264732e5f70726570617265436f6c6c6563743a60448201527f207265776172642063616e6e6f74206265207a65726f206164647265737300006064820152608401610b5c565b6001600160a01b0382166144095760405162461bcd60e51b815260206004820152603f60248201527f4162737472616374526577617264732e5f70726570617265436f6c6c6563743a60448201527f206163636f756e742063616e6e6f74206265207a65726f2061646472657373006064820152608401610b5c565b6000614415848461142a565b90508015611096576001600160a01b0380851660009081526007602090815260408083209387168352929052205461444e908290615519565b6001600160a01b038581166000818152600760209081526040808320948916808452948252918290209490945551848152919290917fd01566b65da2d62cb66f3844588c99d9a95b38394ccdc9c3f7604536e653cf1b910160405180910390a39392505050565b600061450a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166130a69092919063ffffffff16565b8051909150156113a7578080602001905181019061452891906155ea565b6113a75760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610b5c565b60008181526001830160205260408120546145ce57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610f40565b506000610f40565b6060824710156146375760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610b5c565b6001600160a01b0385163b61468e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610b5c565b600080866001600160a01b031685876040516146aa919061560c565b60006040518083038185875af1925050503d80600081146146e7576040519150601f19603f3d011682016040523d82523d6000602084013e6146ec565b606091505b50915091506146fc828286614a4a565b979650505050505050565b6001600160a01b0382166147675760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610b5c565b6001600160a01b038216600090815260208190526040902054818110156147db5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610b5c565b6001600160a01b038316600090815260208190526040812083830390556002805484929061480a908490615413565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b61485f8282611d4a565b61142657614877816001600160a01b03166014614a83565b614882836020614a83565b604051602001614893929190615628565b60408051601f198184030181529082905262461bcd60e51b8252610b5c91600401614e9c565b6148c38282611d4a565b156114265760008281526008602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000611096836001600160a01b038416614c1e565b61493f8282614d11565b6001600160a01b03821660009081526012602052604090205460ff166149b95760005b600b548110156113a7576000600b8281548110614981576149816153e7565b6000918252602090912001546001600160a01b031690506149a68185612a2c86613315565b50806149b18161552c565b915050614962565b6001600160a01b038216600090815260106020526040812080548392906149e1908490615519565b9250508190555080601160008282546131829190615519565b6000818310614a095781611096565b5090919050565b600081831015614a095781611096565b6000826000018281548110614a3757614a376153e7565b9060005260206000200154905092915050565b60608315614a59575081611096565b825115614a695782518084602001fd5b8160405162461bcd60e51b8152600401610b5c9190614e9c565b60606000614a92836002615476565b614a9d906002615519565b6001600160401b03811115614ab457614ab46150e5565b6040519080825280601f01601f191660200182016040528015614ade576020820181803683370190505b509050600360fc1b81600081518110614af957614af96153e7565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110614b2857614b286153e7565b60200101906001600160f81b031916908160001a9053506000614b4c846002615476565b614b57906001615519565b90505b6001811115614bcf576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110614b8b57614b8b6153e7565b1a60f81b828281518110614ba157614ba16153e7565b60200101906001600160f81b031916908160001a90535060049490941c93614bc88161569d565b9050614b5a565b5083156110965760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610b5c565b60008181526001830160205260408120548015614d07576000614c42600183615413565b8554909150600090614c5690600190615413565b9050818114614cbb576000866000018281548110614c7657614c766153e7565b9060005260206000200154905080876000018481548110614c9957614c996153e7565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614ccc57614ccc615426565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610f40565b6000915050610f40565b6001600160a01b038216614d675760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610b5c565b8060026000828254614d799190615519565b90915550506001600160a01b03821660009081526020819052604081208054839290614da6908490615519565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b80356001600160a01b03811681146110f657600080fd5b600060208284031215614e1957600080fd5b61109682614df0565b60008060408385031215614e3557600080fd5b82359150614e4560208401614df0565b90509250929050565b600060208284031215614e6057600080fd5b81356001600160e01b03198116811461109657600080fd5b60005b83811015614e93578181015183820152602001614e7b565b50506000910152565b6020815260008251806020840152614ebb816040850160208701614e78565b601f01601f19169190910160400192915050565b60008060408385031215614ee257600080fd5b614eeb83614df0565b946020939093013593505050565b60008060408385031215614f0c57600080fd5b614f1583614df0565b9150614e4560208401614df0565b600080600060608486031215614f3857600080fd5b614f4184614df0565b9250614f4f60208501614df0565b9150604084013590509250925092565b600060208284031215614f7157600080fd5b5035919050565b60008060008060808587031215614f8e57600080fd5b614f9785614df0565b9350614fa560208601614df0565b93969395505050506040820135916060013590565b80356001600160401b03811681146110f657600080fd5b60008060008060808587031215614fe757600080fd5b84359350614ff760208601614fba565b925061500560408601614fba565b915061501360608601614df0565b905092959194509250565b602080825282518282018190526000919060409081850190868401855b8281101561508157815180518552868101516001600160401b0390811688870152868201511686860152606090810151908501526080909301929085019060010161503b565b5091979650505050505050565b6000806000606084860312156150a357600080fd5b83359250602084013591506150ba60408501614df0565b90509250925092565b600080604083850312156150d657600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715615123576151236150e5565b604052919050565b60006001600160401b03821115615144576151446150e5565b5060051b60200190565b600082601f83011261515f57600080fd5b8135602061517461516f8361512b565b6150fb565b82815260059290921b8401810191818101908684111561519357600080fd5b8286015b848110156151ae5780358352918301918301615197565b509695505050505050565b600082601f8301126151ca57600080fd5b813560206151da61516f8361512b565b82815260059290921b840181019181810190868411156151f957600080fd5b8286015b848110156151ae5761520e81614df0565b83529183019183016151fd565b60008060006060848603121561523057600080fd5b83356001600160401b038082111561524757600080fd5b6152538783880161514e565b9450602086013591508082111561526957600080fd5b6152758783880161514e565b9350604086013591508082111561528b57600080fd5b50615298868287016151b9565b9150509250925092565b600082601f8301126152b357600080fd5b813560206152c361516f8361512b565b82815260059290921b840181019181810190868411156152e257600080fd5b8286015b848110156151ae576152f781614fba565b83529183019183016152e6565b6000806000806080858703121561531a57600080fd5b84356001600160401b038082111561533157600080fd5b61533d8883890161514e565b9550602087013591508082111561535357600080fd5b61535f888389016152a2565b9450604087013591508082111561537557600080fd5b615381888389016152a2565b9350606087013591508082111561539757600080fd5b506153a4878288016151b9565b91505092959194509250565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115610f4057610f406153fd565b634e487b7160e01b600052603160045260246000fd5b600181811c9082168061545057607f821691505b60208210810361547057634e487b7160e01b600052602260045260246000fd5b50919050565b8082028115828204841417610f4057610f406153fd565b80820182811260008312801582168215821617156154ad576154ad6153fd565b505092915050565b6000826154d257634e487b7160e01b600052601260045260246000fd5b500490565b60208082526022908201527f4d756c74695265776172647342617365506f6f6c56333a206f6e6c792061646d60408201526134b760f11b606082015260800190565b80820180821115610f4057610f406153fd565b60006001820161553e5761553e6153fd565b5060010190565b6000600160ff1b820161555a5761555a6153fd565b5060000390565b60006020828403121561557357600080fd5b5051919050565b6001600160401b03828116828216039080821115611ccf57611ccf6153fd565b6001600160401b03818116838216019080821115611ccf57611ccf6153fd565b80820260008212600160ff1b841416156155d6576155d66153fd565b8181058314821517610f4057610f406153fd565b6000602082840312156155fc57600080fd5b8151801515811461109657600080fd5b6000825161561e818460208701614e78565b9190910192915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351615660816017850160208801614e78565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351615691816028840160208801614e78565b01602801949350505050565b6000816156ac576156ac6153fd565b50600019019056fe4d756c74695265776172647354696d654c6f636b4e6f6e5472616e73666572614d756c74695265776172647342617365506f6f6c56332e757064617465457363a49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a2646970667358221220a982ffb905035d52a21efd4e7031b894393eed6dccacfdd177d6109e485f529964736f6c634300081100334d756c74695265776172647342617365506f6f6c56332e636f6e7374727563744d756c74695265776172647354696d654c6f636b4e6f6e5472616e73666572616475726174696f6e206d7573742062652067726561746572206f722065717561a49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000011cf6bf6d87cb0eb9c294fd6cbfec91ee3a1a7d000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000a688906bd8b000000000000000000000000000000000000000000000000000000000000000278d000000000000000000000000000000000000000000000000000000000001da9c00000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000135374616b656420466f7265737420546f6b656e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000773466f72657374000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000