[ { "inputs": [ { "internalType": "address", "name": "_preSwapToken", "type": "address" }, { "internalType": "address", "name": "_swapPairPreSwap", "type": "address" }, { "internalType": "address", "name": "_swapPairToken", "type": "address" }, { "internalType": "address", "name": "_stakingContract", "type": "address" }, { "components": [ { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "address", "name": "platformToken", "type": "address" }, { "components": [ { "internalType": "address", "name": "reward", "type": "address" }, { "internalType": "address", "name": "swapPair", "type": "address" }, { "internalType": "uint256", "name": "swapFee", "type": "uint256" } ], "internalType": "struct VariableRewardsStrategy.RewardSwapPair[]", "name": "rewardSwapPairs", "type": "tuple[]" }, { "internalType": "address", "name": "timelock", "type": "address" } ], "internalType": "struct VariableRewardsStrategy.VariableRewardsStrategySettings", "name": "_settings", "type": "tuple" }, { "components": [ { "internalType": "address", "name": "depositToken", "type": "address" }, { "internalType": "address", "name": "rewardToken", "type": "address" }, { "internalType": "uint256", "name": "minTokensToReinvest", "type": "uint256" }, { "internalType": "uint256", "name": "devFeeBips", "type": "uint256" }, { "internalType": "uint256", "name": "reinvestRewardBips", "type": "uint256" } ], "internalType": "struct YakStrategyV2.StrategySettings", "name": "_strategySettings", "type": "tuple" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "rewardToken", "type": "address" }, { "indexed": false, "internalType": "address", "name": "swapPair", "type": "address" } ], "name": "AddReward", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" } ], "name": "AllowDepositor", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Deposit", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bool", "name": "newValue", "type": "bool" } ], "name": "DepositsEnabled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "token", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Recovered", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "newTotalDeposits", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newTotalSupply", "type": "uint256" } ], "name": "Reinvest", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" } ], "name": "RemoveDepositor", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "rewardToken", "type": "address" } ], "name": "RemoveReward", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldValue", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newValue", "type": "uint256" } ], "name": "UpdateAdminFee", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "oldValue", "type": "address" }, { "indexed": false, "internalType": "address", "name": "newValue", "type": "address" } ], "name": "UpdateDevAddr", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldValue", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newValue", "type": "uint256" } ], "name": "UpdateDevFee", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldValue", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newValue", "type": "uint256" } ], "name": "UpdateMaxTokensToDepositWithoutReinvest", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldValue", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newValue", "type": "uint256" } ], "name": "UpdateMinTokensToReinvest", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldValue", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newValue", "type": "uint256" } ], "name": "UpdateReinvestReward", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Withdraw", "type": "event" }, { "inputs": [], "name": "ADMIN_FEE_BIPS", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DEPOSITS_ENABLED", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DEV_FEE_BIPS", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DOMAIN_TYPEHASH", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MAX_TOKENS_TO_DEPOSIT_WITHOUT_REINVEST", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MIN_TOKENS_TO_REINVEST", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PERMIT_TYPEHASH", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "REINVEST_REWARD_BIPS", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "VERSION_HASH", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_rewardToken", "type": "address" }, { "internalType": "address", "name": "_swapPair", "type": "address" } ], "name": "addReward", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_rewardToken", "type": "address" }, { "internalType": "address", "name": "_swapPair", "type": "address" }, { "internalType": "uint256", "name": "_swapFee", "type": "uint256" } ], "name": "addReward", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "depositor", "type": "address" } ], "name": "allowDepositor", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "allowedDepositors", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "calculateDepositFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "calculateWithdrawFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "checkReward", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "deposit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_account", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "depositFor", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "depositToken", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "uint256", "name": "_deadline", "type": "uint256" }, { "internalType": "uint8", "name": "_v", "type": "uint8" }, { "internalType": "bytes32", "name": "_r", "type": "bytes32" }, { "internalType": "bytes32", "name": "_s", "type": "bytes32" } ], "name": "depositWithPermit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "devAddr", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "estimateDeployedBalance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "estimateReinvestReward", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "getDepositTokensForShares", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getDomainSeparator", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "getSharesForDepositTokens", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "numberOfAllowedDepositors", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "permit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "preSwapToken", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "recoverAVAX", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "tokenAddress", "type": "address" }, { "internalType": "uint256", "name": "tokenAmount", "type": "uint256" } ], "name": "recoverERC20", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "reinvest", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "depositor", "type": "address" } ], "name": "removeDepositor", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_rewardToken", "type": "address" } ], "name": "removeReward", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_minReturnAmountAccepted", "type": "uint256" }, { "internalType": "bool", "name": "", "type": "bool" } ], "name": "rescueDeployedFunds", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "revokeAllowance", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "rewardCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "rewardSwapPairs", "outputs": [ { "internalType": "address", "name": "reward", "type": "address" }, { "internalType": "address", "name": "swapPair", "type": "address" }, { "internalType": "uint256", "name": "swapFee", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "rewardToken", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "stakingContract", "outputs": [ { "internalType": "contract IYYStaking", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "supportedRewards", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "swapPairPreSwap", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "swapPairToken", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalDeposits", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "dst", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "src", "type": "address" }, { "internalType": "address", "name": "dst", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newValue", "type": "uint256" } ], "name": "updateAdminFee", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "newValue", "type": "bool" } ], "name": "updateDepositsEnabled", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newValue", "type": "address" } ], "name": "updateDevAddr", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newValue", "type": "uint256" } ], "name": "updateDevFee", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newValue", "type": "uint256" } ], "name": "updateMaxTokensToDepositWithoutReinvest", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newValue", "type": "uint256" } ], "name": "updateMinTokensToReinvest", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newValue", "type": "uint256" } ], "name": "updateReinvestReward", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "withdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
610120604052600960e0819052685969656c642059616b60b81b6101009081526200002e916000919062000a12565b506040805180820190915260038082526216549560ea1b60209092019182526200005b9160019162000a12565b503480156200006957600080fd5b5060405162005831380380620058318339810160408190526200008c9162000cbc565b600680546001600160a01b0319163390811790915560405183918391829190819060009060008051602062005811833981519152908290a35080516001600160a01b0390811660805260208201511660a0526040810151620000ee90620002b4565b6060810151620000fe9062000344565b60808101516200010e90620003ef565b5081518051620001279160009160209091019062000a12565b5060208201516001600160a01b031660c052600980546001600160a01b031916732d580f9cf2fb2d09bc411532988f2afda4e7beff17905560005b8260400151518110156200020457620001ef836040015182815181106200018d576200018d62000e56565b60200260200101516000015184604001518381518110620001b257620001b262000e56565b60200260200101516020015185604001518481518110620001d757620001d762000e56565b6020026020010151604001516200049a60201b60201c565b80620001fb8162000e82565b91505062000162565b5062000211600162000646565b60608201516200022190620006f0565b60408051600080825260208201527fc7606d21ac05cd309191543e409f0845c016120563783d70e4f41419dc0ef234910160405180910390a15050601580546001600160a01b03199081166001600160a01b039788161790915560148054821695871695909517909455505060168054831694841694909417909355601380549091169290911691909117905562000f1a565b6006546001600160a01b03163314620003035760405162461bcd60e51b81526020600482018190526024820152600080516020620057f183398151915260448201526064015b60405180910390fd5b600a5460408051918252602082018390527f481f79ac3a523b6d6db3c5a720e190e986d1cc1b41adcdf50f9caef849901100910160405180910390a1600a55565b6006546001600160a01b031633146200038f5760405162461bcd60e51b81526020600482018190526024820152600080516020620057f18339815191526044820152606401620002fa565b612710600e5482620003a2919062000e9e565b1115620003ae57600080fd5b600f5460408051918252602082018390527f2a42303d002f0ba6cfe8259c91d4684443fb0b3de286ba74991175d651726131910160405180910390a1600f55565b6006546001600160a01b031633146200043a5760405162461bcd60e51b81526020600482018190526024820152600080516020620057f18339815191526044820152606401620002fa565b612710600f54826200044d919062000e9e565b11156200045957600080fd5b600e5460408051918252602082018390527fe7f97d51d307dc44045597c9978bec0f842e6bb40d19b9444084cfa30d9ed4f2910160405180910390a1600e55565b60a0516001600160a01b0316836001600160a01b0316146200054657620004d0828460a051620007ed60201b620024f41760201c565b62000546576040805162461bcd60e51b81526020600482015260248101919091527f5661726961626c655265776172647353747261746567793a3a5377617020706160448201527f697220646f6573206e6f7420636f6e7461696e2072657761726420746f6b656e6064820152608401620002fa565b604080516060810182526001600160a01b03808616808352858216602080850191825284860187815260008481526010909252958120945185549085166001600160a01b03199182161786559151600180870180549290961691841691909117909455945160029094019390935560118054808401825594527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c6890930180549092169092179055601254620005fb9162000e9e565b601255604080516001600160a01b038086168252841660208201527f916e172c080569186aa7ea048268267257cf7cc49505908863f747bca8620f80910160405180910390a1505050565b6006546001600160a01b03163314620006915760405162461bcd60e51b81526020600482018190526024820152600080516020620057f18339815191526044820152606401620002fa565b600c5481151560ff909116151503620006a957600080fd5b600c805460ff19168215159081179091556040519081527f7b014ed3854e7f5cb0218d58b3c6ae7d53a68bb0af2f67bfb029ea42c38a7e859060200160405180910390a150565b6006546001600160a01b031633146200073b5760405162461bcd60e51b81526020600482018190526024820152600080516020620057f18339815191526044820152606401620002fa565b6001600160a01b038116620007a25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620002fa565b6006546040516001600160a01b038084169216906000805160206200581183398151915290600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000836001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200082e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000854919062000eb9565b6001600160a01b0316836001600160a01b03161480620008e95750836001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015620008ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008d4919062000eb9565b6001600160a01b0316836001600160a01b0316145b8015620009eb5750836001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000930573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000956919062000eb9565b6001600160a01b0316826001600160a01b03161480620009eb5750836001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015620009b0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620009d6919062000eb9565b6001600160a01b0316826001600160a01b0316145b801562000a0a5750816001600160a01b0316836001600160a01b031614155b949350505050565b82805462000a209062000ede565b90600052602060002090601f01602090048101928262000a44576000855562000a8f565b82601f1062000a5f57805160ff191683800117855562000a8f565b8280016001018555821562000a8f579182015b8281111562000a8f57825182559160200191906001019062000a72565b5062000a9d92915062000aa1565b5090565b5b8082111562000a9d576000815560010162000aa2565b80516001600160a01b038116811462000ad057600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b038111828210171562000b105762000b1062000ad5565b60405290565b604051608081016001600160401b038111828210171562000b105762000b1062000ad5565b604051601f8201601f191681016001600160401b038111828210171562000b665762000b6662000ad5565b604052919050565b600082601f83011262000b8057600080fd5b815160206001600160401b0382111562000b9e5762000b9e62000ad5565b62000bae818360051b0162000b3b565b8281526060928302850182019282820191908785111562000bce57600080fd5b8387015b8581101562000c2c5781818a03121562000bec5760008081fd5b62000bf662000aeb565b62000c018262000ab8565b815262000c1086830162000ab8565b8187015260408281015190820152845292840192810162000bd2565b5090979650505050505050565b600060a0828403121562000c4c57600080fd5b60405160a081016001600160401b038111828210171562000c715762000c7162000ad5565b60405290508062000c828362000ab8565b815262000c926020840162000ab8565b60208201526040830151604082015260608301516060820152608083015160808201525092915050565b600080600080600080610140878903121562000cd757600080fd5b62000ce28762000ab8565b9550602062000cf381890162000ab8565b955062000d036040890162000ab8565b945062000d136060890162000ab8565b60808901519094506001600160401b038082111562000d3157600080fd5b908901906080828c03121562000d4657600080fd5b62000d5062000b16565b82518281111562000d6057600080fd5b8301601f81018d1362000d7257600080fd5b80518381111562000d875762000d8762000ad5565b62000d9b601f8201601f1916870162000b3b565b8181528e8783850101111562000db057600080fd5b60005b8281101562000dd057838101880151828201890152870162000db3565b8281111562000de25760008884840101525b5083525062000df5905083850162000ab8565b84820152604083015193508184111562000e0e57600080fd5b62000e1c8c85850162000b6e565b604082015262000e2f6060840162000ab8565b60608201528095505050505062000e4a8860a0890162000c39565b90509295509295509295565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820162000e975762000e9762000e6c565b5060010190565b6000821982111562000eb45762000eb462000e6c565b500190565b60006020828403121562000ecc57600080fd5b62000ed78262000ab8565b9392505050565b600181811c9082168062000ef357607f821691505b60208210810362000f1457634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c0516147ff62000ff260003960008181611d0601528181613aaf01528181613ade0152613b5301526000818161093f01528181611c9701528181611d3001528181611d9a01528181611f1301528181612d0f01528181612d4d0152818161352f0152818161358a01528181613a0301528181613b7d01528181613c5d0152613cf901526000818161081901528181610bd701528181610d0801528181611a0b01528181611aa001528181612bbe01528181612f7201528181613d4801528181613da60152613e9b01526147ff6000f3fe608060405234801561001057600080fd5b50600436106103eb5760003560e01c80638980f11f1161021a578063bd079f5511610135578063dd8ce4d6116100c8578063ed24911d11610097578063f2fde38b1161007c578063f2fde38b14610927578063f7c618c11461093a578063fdb5a03e1461096157600080fd5b8063ed24911d1461090c578063ee99205c1461091457600080fd5b8063dd8ce4d6146108c0578063e21ac825146108d3578063e75ab045146108e6578063eab89a5a146108f957600080fd5b8063d0ed26ae11610104578063d0ed26ae1461084e578063d505accf14610861578063da09c72c14610874578063dd62ed3e1461088757600080fd5b8063bd079f5514610803578063c4b24a461461080c578063c89039c514610814578063cff1b6ef1461083b57600080fd5b8063a4d5e67c116101ad578063ac0d31ff1161017c578063ac0d31ff146107c8578063b52a321f146107db578063b6b55f25146107e8578063b9e57b80146107fb57600080fd5b8063a4d5e67c1461072d578063a5534e7114610740578063a8ae2b7c146107a2578063a9059cbb146107b557600080fd5b80639291d563116101e95780639291d563146106d857806395d89b41146106eb57806399729ec1146106f35780639e4e73181461070657600080fd5b80638980f11f146106985780638aff733d146106ab5780638b73e606146106b45780638da5cb5b146106c757600080fd5b8063483c2ef01161030a57806370a082311161029d5780637ae267731161026c5780637ae267731461064a5780637d8820971461065d5780637ecebe0014610665578063818372301461068557600080fd5b806370a0823114610607578063715018a614610630578063789139bc14610638578063790854251461064157600080fd5b80634e77ace5116102d95780634e77ace5146105c55780634ebb7916146105d85780635ea682ea146105eb578063633afd28146105f457600080fd5b8063483c2ef0146105695780634a970be71461058c5780634bebd1e71461059f5780634c30e127146105b257600080fd5b8063247d284b11610382578063313ce56711610351578063313ce56714610508578063318caf2b146105225780633bdc6e721461054d57806340b47e1a1461055657600080fd5b8063247d284b146104a65780632e1a7d4d146104b95780632f4f21e2146104ce57806330adf81f146104e157600080fd5b806311056035116103be578063110560351461045057806318160ddd1461046357806320606b701461046c57806323b872dd1461049357600080fd5b806306fdde03146103f0578063076771111461040e578063095ea7b3146104255780630f23475d14610448575b600080fd5b6103f8610969565b604051610405919061429b565b60405180910390f35b610417600d5481565b604051908152602001610405565b6104386104333660046142c3565b6109f7565b6040519015158152602001610405565b610417610a0d565b61041761045e3660046142ef565b610a38565b61041760025481565b6104177f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6104386104a1366004614308565b610a49565b6104176104b43660046142ef565b610b12565b6104cc6104c73660046142ef565b610b1d565b005b6104cc6104dc3660046142c3565b610c44565b6104177f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b610510601281565b60405160ff9091168152602001610405565b601654610535906001600160a01b031681565b6040516001600160a01b039091168152602001610405565b61041760075481565b6104cc610564366004614349565b610c52565b610438610577366004614382565b60086020526000908152604090205460ff1681565b6104cc61059a3660046143b5565b610caf565b6104cc6105ad366004614382565b610d7d565b601554610535906001600160a01b031681565b6104cc6105d336600461440a565b610e9a565b6104cc6105e63660046142ef565b610f41565b610417600f5481565b601454610535906001600160a01b031681565b610417610615366004614382565b6001600160a01b031660009081526004602052604090205490565b6104cc610ffb565b610417600b5481565b61041760125481565b6104cc610658366004614349565b61108d565b610417611151565b610417610673366004614382565b60056020526000908152604090205481565b6104cc6106933660046142ef565b6111e8565b6104cc6106a63660046142c3565b611271565b610417600e5481565b6104cc6106c2366004614382565b611387565b6006546001600160a01b0316610535565b6104cc6106e6366004614382565b611543565b6103f86115fd565b6104cc6107013660046142ef565b61160a565b6104177fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc681565b6104cc61073b366004614382565b6116af565b61077c61074e366004614382565b6010602052600090815260409020805460018201546002909201546001600160a01b03918216929091169083565b604080516001600160a01b03948516815293909216602084015290820152606001610405565b6104cc6107b03660046142ef565b6118f9565b6104386107c33660046142c3565b61199e565b6104cc6107d6366004614427565b6119ab565b600c546104389060ff1681565b6104cc6107f63660046142ef565b611c1d565b610417611c2a565b610417600a5481565b610417611c69565b6105357f000000000000000000000000000000000000000000000000000000000000000081565b6104cc6108493660046142ef565b611fa2565b6104cc61085c366004614308565b612036565b6104cc61086f36600461444c565b612097565b600954610535906001600160a01b031681565b610417610895366004614349565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6104176108ce3660046142ef565b6121aa565b6104cc6108e13660046142ef565b6121eb565b6105356108f43660046142ef565b612274565b6104176109073660046142ef565b61229e565b6104176122d9565b601354610535906001600160a01b031681565b6104cc610935366004614382565b612379565b6105357f000000000000000000000000000000000000000000000000000000000000000081565b6104cc612499565b60008054610976906144ba565b80601f01602080910402602001604051908101604052809291908181526020018280546109a2906144ba565b80156109ef5780601f106109c4576101008083540402835291602001916109ef565b820191906000526020600020905b8154815290600101906020018083116109d257829003601f168201915b505050505081565b6000610a04338484612709565b50600192915050565b600080610a18611151565b90506000610a2582612817565b9050610a31818361450a565b9250505090565b6000610a4382612817565b92915050565b6001600160a01b038316600081815260036020908152604080832033808552925282205491929091908214801590610a8357506000198114155b15610af9576000610a94858361450a565b6001600160a01b038881166000818152600360209081526040808320948916808452948252918290208590559051848152939450919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505b610b04868686612835565b6001925050505b9392505050565b6000610a4382612959565b6000610b288261229e565b905060008111610ba55760405162461bcd60e51b815260206004820152603060248201527f5661726961626c655265776172647353747261746567793a3a5769746864726160448201527f7720616d6f756e7420746f6f206c6f770000000000000000000000000000000060648201526084015b60405180910390fd5b6000610bb082612964565b90506000610bbd83612817565b9050610bfe33610bcd838561450a565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691906129e2565b610c083385612a49565b60405183815233907f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364906020015b60405180910390a250505050565b610c4e8282612add565b5050565b6009546001600160a01b03163314610ca35760405162461bcd60e51b81526020600482015260146024820152732cb0b5a9ba3930ba32b3bc9d1d37b7363ca232bb60611b6044820152606401610b9c565b610c4e82826003612d0d565b6040517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690526064810185905260ff8416608482015260a4810183905260c481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d505accf9060e401600060405180830381600087803b158015610d5457600080fd5b505af1158015610d68573d6000803e3d6000fd5b50505050610d763386612add565b5050505050565b6006546001600160a01b03163314610dc55760405162461bcd60e51b815260206004820181905260248201526000805160206147aa8339815191526044820152606401610b9c565b6001600160a01b03811660009081526008602052604090205460ff1615610e2e5760405162461bcd60e51b815260206004820152601c60248201527f5065726d697373696f6e65643a3a616c6c6f774465706f7369746f72000000006044820152606401610b9c565b6001600160a01b0381166000908152600860205260409020805460ff19166001908117909155600754610e6091614521565b6007556040516001600160a01b038216907fc0a1035c16faf8d1304056d92c00edf028f87e62b8235a938f00af9e3c0312c590600090a250565b6006546001600160a01b03163314610ee25760405162461bcd60e51b815260206004820181905260248201526000805160206147aa8339815191526044820152606401610b9c565b600c5481151560ff909116151503610ef957600080fd5b600c805460ff19168215159081179091556040519081527f7b014ed3854e7f5cb0218d58b3c6ae7d53a68bb0af2f67bfb029ea42c38a7e85906020015b60405180910390a150565b6006546001600160a01b03163314610f895760405162461bcd60e51b815260206004820181905260248201526000805160206147aa8339815191526044820152606401610b9c565b60008111610f9657600080fd5b604051339082156108fc029083906000818181858888f19350505050158015610fc3573d6000803e3d6000fd5b506040805160008152602081018390527f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa289101610f36565b6006546001600160a01b031633146110435760405162461bcd60e51b815260206004820181905260248201526000805160206147aa8339815191526044820152606401610b9c565b6006546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600680546001600160a01b0319169055565b6006546001600160a01b031633146110d55760405162461bcd60e51b815260206004820181905260248201526000805160206147aa8339815191526044820152606401610b9c565b60405163095ea7b360e01b81526001600160a01b0382811660048301526000602483015283169063095ea7b3906044016020604051808303816000875af1158015611124573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111489190614539565b610c4e57600080fd5b6013546040517ff2801fe70000000000000000000000000000000000000000000000000000000081523060048201526000602482018190529182916001600160a01b039091169063f2801fe7906044016040805180830381865afa1580156111bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e19190614556565b5092915050565b6006546001600160a01b031633146112305760405162461bcd60e51b815260206004820181905260248201526000805160206147aa8339815191526044820152606401610b9c565b600a5460408051918252602082018390527f481f79ac3a523b6d6db3c5a720e190e986d1cc1b41adcdf50f9caef849901100910160405180910390a1600a55565b6006546001600160a01b031633146112b95760405162461bcd60e51b815260206004820181905260248201526000805160206147aa8339815191526044820152606401610b9c565b600081116112c657600080fd5b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015611313573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113379190614539565b61134057600080fd5b604080516001600160a01b0384168152602081018390527f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa2891015b60405180910390a15050565b6006546001600160a01b031633146113cf5760405162461bcd60e51b815260206004820181905260248201526000805160206147aa8339815191526044820152606401610b9c565b6000600754116114475760405162461bcd60e51b815260206004820152603460248201527f5065726d697373696f6e65643a3a72656d6f76654465706f7369746f722c206e60448201527f6f20616c6c6f776564206465706f7369746f72730000000000000000000000006064820152608401610b9c565b6001600160a01b03811660009081526008602052604090205460ff1615156001146114da5760405162461bcd60e51b815260206004820152602a60248201527f5065726d697373696f6e65643a3a72656d6f76654465706f7369746f722c206e60448201527f6f7420616c6c6f776564000000000000000000000000000000000000000000006064820152608401610b9c565b6001600160a01b0381166000908152600860205260409020805460ff191690556007546115099060019061450a565b6007556040516001600160a01b038216907f0e86f6608b536e5339a25b65ff531f5ea91e1313d056ecd4752b35cbd16137d490600090a250565b6009546001600160a01b031633146115945760405162461bcd60e51b81526020600482015260146024820152732cb0b5a9ba3930ba32b3bc9d1d37b7363ca232bb60611b6044820152606401610b9c565b600954604080516001600160a01b03928316815291831660208301527fa8e91499ed37682f43cffb045fcc7d379a91e8c9a14e6321877ee34dee564c00910160405180910390a1600980546001600160a01b0319166001600160a01b0392909216919091179055565b60018054610976906144ba565b6006546001600160a01b031633146116525760405162461bcd60e51b815260206004820181905260248201526000805160206147aa8339815191526044820152606401610b9c565b612710600e54826116639190614521565b111561166e57600080fd5b600f5460408051918252602082018390527f2a42303d002f0ba6cfe8259c91d4684443fb0b3de286ba74991175d651726131910160405180910390a1600f55565b6009546001600160a01b031633146117005760405162461bcd60e51b81526020600482015260146024820152732cb0b5a9ba3930ba32b3bc9d1d37b7363ca232bb60611b6044820152606401610b9c565b6001600160a01b038116600090815260106020526040812080546001600160a01b031990811682556001820180549091169055600201819055805b60115481101561180757601181815481106117585761175861457a565b6000918252602090912001546001600160a01b03908116908416036117f557601180546001935061178a90849061450a565b8154811061179a5761179a61457a565b600091825260209091200154601180546001600160a01b0390921691839081106117c6576117c661457a565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b806117ff81614590565b91505061173b565b508061187b5760405162461bcd60e51b815260206004820152603460248201527f5661726961626c655265776172647353747261746567793a3a5265776172642060448201527f746f2064656c657465206e6f7420666f756e64210000000000000000000000006064820152608401610b9c565b601180548061188c5761188c6145a9565b600082815260209020810160001990810180546001600160a01b03191690550190556012546118bd9060019061450a565b6012556040516001600160a01b03831681527f963b7c735475147a62c589c2d7cb8ec4b0a6b7af4f97373d79ebfa42ab8aa7dc9060200161137b565b6006546001600160a01b031633146119415760405162461bcd60e51b815260206004820181905260248201526000805160206147aa8339815191526044820152606401610b9c565b612710600f54826119529190614521565b111561195d57600080fd5b600e5460408051918252602082018390527fe7f97d51d307dc44045597c9978bec0f842e6bb40d19b9444084cfa30d9ed4f2910160405180910390a1600e55565b6000610a04338484612835565b6006546001600160a01b031633146119f35760405162461bcd60e51b815260206004820181905260248201526000805160206147aa8339815191526044820152606401610b9c565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015611a5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7e91906145bf565b9050611a88612ee3565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015611aef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b1391906145bf565b905083611b20838361450a565b1015611bba5760405162461bcd60e51b815260206004820152604d60248201527f5661726961626c655265776172647353747261746567793a3a456d657267656e60448201527f6379207769746864726177206d696e696d756d2072657475726e20616d6f756e60648201527f74206e6f74207265616368656400000000000000000000000000000000000000608482015260a401610b9c565b7fc7606d21ac05cd309191543e409f0845c016120563783d70e4f41419dc0ef234611be3611151565b6002546040805192835260208301919091520160405180910390a1600c5460ff161515600103611c1757611c176000610e9a565b50505050565b611c273382612add565b50565b600080611c35611c69565b9050600a548110611c6157612710600e5482611c5191906145d8565b611c5b91906145f7565b91505090565b600091505090565b600080611c74612fe3565b6040516370a0823160e01b81523060048201529091506000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015611cde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0291906145bf565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031603611d6a57611d674782614521565b90505b60005b82518110156111e1576000838281518110611d8a57611d8a61457a565b60200260200101516000015190507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031603611e0157838281518110611de357611de361457a565b60200260200101516020015183611dfa9190614521565b9250611f8f565b6001600160a01b03811615611f8f576040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611e57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7b91906145bf565b90506000858481518110611e9157611e9161457a565b60200260200101516020015182611ea89190614521565b9050600060106000888781518110611ec257611ec261457a565b602090810291909101810151516001600160a01b03908116835290820192909252604001600020600101541690508115801590611f0757506001600160a01b03811615155b15611f8b57611f7e82857f000000000000000000000000000000000000000000000000000000000000000084601060008d8c81518110611f4957611f4961457a565b6020026020010151600001516001600160a01b03166001600160a01b031681526020019081526020016000206002015461323a565b611f889087614521565b95505b5050505b5080611f9a81614590565b915050611d6d565b6006546001600160a01b03163314611fea5760405162461bcd60e51b815260206004820181905260248201526000805160206147aa8339815191526044820152606401610b9c565b8015611ff557600080fd5b600d5460408051918252602082018390527f3cc372f330f95ac9540626dc8a25f5bf21ba607215a5d58304cb804d446f104a910160405180910390a1600d55565b6009546001600160a01b031633146120875760405162461bcd60e51b81526020600482015260146024820152732cb0b5a9ba3930ba32b3bc9d1d37b7363ca232bb60611b6044820152606401610b9c565b612092838383612d0d565b505050565b428410156120e75760405162461bcd60e51b815260206004820152600f60248201527f7065726d69743a3a6578706972656400000000000000000000000000000000006044820152606401610b9c565b6001600160a01b038716600090815260056020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661213483614590565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506121958882868686613308565b6121a0888888612709565b5050505050505050565b60006121b4611151565b6002546121c191906145d8565b6000036121cc575090565b6121d4611151565b6002546121e190846145d8565b610a4391906145f7565b6006546001600160a01b031633146122335760405162461bcd60e51b815260206004820181905260248201526000805160206147aa8339815191526044820152606401610b9c565b600b5460408051918252602082018390527fa5dae50539d56dfe1fb5273d883b0c39bc76750a25d036fc5fbd09ad8fd5f57f910160405180910390a1600b55565b6011818154811061228457600080fd5b6000918252602090912001546001600160a01b0316905081565b60006122a8611151565b6002546122b591906145d8565b6000036122c457506000919050565b6002546122cf611151565b6121e190846145d8565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60001b600060405161230e9190614619565b6040519081900390207fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc646604080516020810195909552840192909252606083015260808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6006546001600160a01b031633146123c15760405162461bcd60e51b815260206004820181905260248201526000805160206147aa8339815191526044820152606401610b9c565b6001600160a01b03811661243d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b9c565b6006546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b3233146124e85760405162461bcd60e51b815260206004820152601460248201527f59616b53747261746567793a3a6f6e6c79454f410000000000000000000000006044820152606401610b9c565b6124f26000613468565b565b6000836001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015612534573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061255891906146b4565b6001600160a01b0316836001600160a01b031614806125e95750836001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125d491906146b4565b6001600160a01b0316836001600160a01b0316145b80156126e35750836001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561262e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061265291906146b4565b6001600160a01b0316826001600160a01b031614806126e35750836001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ce91906146b4565b6001600160a01b0316826001600160a01b0316145b80156127015750816001600160a01b0316836001600160a01b031614155b949350505050565b6001600160a01b03831661275f5760405162461bcd60e51b815260206004820152601c60248201527f5f617070726f76653a3a6f776e6572207a65726f2061646472657373000000006044820152606401610b9c565b6001600160a01b0382166127b55760405162461bcd60e51b815260206004820152601e60248201527f5f617070726f76653a3a7370656e646572207a65726f206164647265737300006044820152606401610b9c565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600080805b905061271061282b82856145d8565b610b0b91906145f7565b6001600160a01b0382166128b15760405162461bcd60e51b815260206004820152603460248201527f5f7472616e73666572546f6b656e733a2063616e6e6f74207472616e7366657260448201527f20746f20746865207a65726f20616464726573730000000000000000000000006064820152608401610b9c565b6001600160a01b0383166000908152600460205260409020546128d590829061450a565b6001600160a01b038085166000908152600460205260408082209390935590841681522054612905908290614521565b6001600160a01b0380841660008181526004602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061280a9085815260200190565b60008061281c613635565b6013546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018390526000916001600160a01b031690632e1a7d4d90602401600060405180830381600087803b1580156129c457600080fd5b505af11580156129d8573d6000803e3d6000fd5b5093949350505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b1790526120929084906136c1565b6001600160a01b038216600090815260046020526040902054612a6d90829061450a565b6001600160a01b038316600090815260046020526040902055600254612a9490829061450a565b6002556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b600c5460ff161515600114612b5a5760405162461bcd60e51b815260206004820152602a60248201527f5661726961626c655265776172647353747261746567793a3a4465706f73697460448201527f732064697361626c6564000000000000000000000000000000000000000000006064820152608401610b9c565b600b548015612b83576000612b6d611c69565b905081811115612b8157612b816001613468565b505b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064016020604051808303816000875af1158015612c0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c339190614539565b612ca55760405162461bcd60e51b815260206004820152603660248201527f5661726961626c655265776172647353747261746567793a3a4465706f73697460448201527f20746f6b656e207472616e73666572206661696c6564000000000000000000006064820152608401610b9c565b6000612cb083612959565b9050612cc884612cc36108ce848761450a565b6137a6565b612cd2838261387c565b836001600160a01b03167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c84604051610c3691815260200190565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614612de557612d7182847f00000000000000000000000000000000000000000000000000000000000000006124f4565b612de5576040805162461bcd60e51b81526020600482015260248101919091527f5661726961626c655265776172647353747261746567793a3a5377617020706160448201527f697220646f6573206e6f7420636f6e7461696e2072657761726420746f6b656e6064820152608401610b9c565b604080516060810182526001600160a01b03808616808352858216602080850191825284860187815260008481526010909252958120945185549085166001600160a01b03199182161786559151600180870180549290961691841691909117909455945160029094019390935560118054808401825594527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c6890930180549092169092179055601254612e9891614521565b601255604080516001600160a01b038086168252841660208201527f916e172c080569186aa7ea048268267257cf7cc49505908863f747bca8620f80910160405180910390a1505050565b601360009054906101000a90046001600160a01b03166001600160a01b031663db2e21bc6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612f3357600080fd5b505af1158015612f47573d6000803e3d6000fd5b505060135460405163095ea7b360e01b81526001600160a01b039182166004820152600060248201527f0000000000000000000000000000000000000000000000000000000000000000909116925063095ea7b391506044016020604051808303816000875af1158015612fbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c279190614539565b60606000601360009054906101000a90046001600160a01b03166001600160a01b031663bf199e626040518163ffffffff1660e01b8152600401602060405180830381865afa15801561303a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061305e91906145bf565b905060008167ffffffffffffffff81111561307b5761307b6146d1565b6040519080825280602002602001820160405280156130c057816020015b60408051808201909152600080825260208201528152602001906001900390816130995790505b50905060005b828110156111e1576013546040517f7bb7bed1000000000000000000000000000000000000000000000000000000008152600481018390526000916001600160a01b031690637bb7bed190602401602060405180830381865afa158015613131573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061315591906146b4565b6013546040517f9ced7e760000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03808416602483015292935060009290911690639ced7e7690604401602060405180830381865afa1580156131c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131e891906145bf565b90506040518060400160405280836001600160a01b031681526020018281525084848151811061321a5761321a61457a565b60200260200101819052505050808061323290614590565b9150506130c6565b60008061324786866138fc565b509050600080856001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa15801561328b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132af9190614705565b5091509150876001600160a01b0316836001600160a01b0316146132cf57905b6132fb89836dffffffffffffffffffffffffffff16836dffffffffffffffffffffffffffff168861392d565b9998505050505050505050565b60006133126122d9565b6040517f1901000000000000000000000000000000000000000000000000000000000000602082015260228101919091526042810186905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff88169284019290925260608301869052608083018590529092509060019060a0016020604051602081039080840390855afa1580156133b8573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906133ee5750866001600160a01b0316816001600160a01b0316145b61345f5760405162461bcd60e51b8152602060048201526024808201527f417263683a3a76616c69646174655369673a20696e76616c6964207369676e6160448201527f74757265000000000000000000000000000000000000000000000000000000006064820152608401610b9c565b50505050505050565b613470613987565b600061347a6139e1565b9050816134f957600a548110156134f95760405162461bcd60e51b815260206004820152603060248201527f5661726961626c655265776172647353747261746567793a3a5265696e76657360448201527f7420616d6f756e7420746f6f206c6f77000000000000000000000000000000006064820152608401610b9c565b6000612710600f548361350c91906145d8565b61351691906145f7565b9050801561355857600954613558906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169116836129e2565b6000612710600e548461356b91906145d8565b61357591906145f7565b905080156135b1576135b16001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633836129e2565b60006135d0826135c1858761450a565b6135cb919061450a565b613cd7565b905060006135dd82612959565b90506135e9828261387c565b7fc7606d21ac05cd309191543e409f0845c016120563783d70e4f41419dc0ef234613612611151565b6002546040805192835260208301919091520160405180910390a1505050505050565b601354604080517fcc1252ae00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163cc1252ae9160048083019260209291908290030181865afa158015613698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136bc91906145bf565b905090565b6000613716826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613d6e9092919063ffffffff16565b80519091501561209257808060200190518101906137349190614539565b6120925760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610b9c565b600081116137f65760405162461bcd60e51b815260206004820152601260248201527f5f6d696e743a3a7a65726f2073686172657300000000000000000000000000006044820152606401610b9c565b806002546138049190614521565b6002556001600160a01b03821660009081526004602052604090205461382b908290614521565b6001600160a01b0383166000818152600460205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612ad19085815260200190565b600082116138f25760405162461bcd60e51b815260206004820152602d60248201527f5661726961626c655265776172647353747261746567793a3a5374616b65206160448201527f6d6f756e7420746f6f206c6f77000000000000000000000000000000000000006064820152608401610b9c565b610c4e8282613d7d565b600080826001600160a01b0316846001600160a01b03161061391f578284613922565b83835b915091509250929050565b60008061393c836103e861450a565b61394690876145d8565b9050600061395485836145d8565b9050600082613965886103e86145d8565b61396f9190614521565b905061397b81836145f7565b98975050505050505050565b60135460405163b6b55f2560e01b8152600060048201526001600160a01b039091169063b6b55f2590602401600060405180830381600087803b1580156139cd57600080fd5b505af1158015611c17573d6000803e3d6000fd5b6040516370a0823160e01b815230600482015260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015613a4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a6e91906145bf565b60115490915060005b81811015613ccf57600060118281548110613a9457613a9461457a565b6000918252602090912001546001600160a01b0390811691507f0000000000000000000000000000000000000000000000000000000000000000168103613bbf57478015613b51577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015613b3757600080fd5b505af1158015613b4b573d6000803e3d6000fd5b50505050505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031603613bbd57613bb48186614521565b94505050613cbd565b505b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015613c06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c2a91906145bf565b90508015613cba576001600160a01b03808316600090815260106020526040902060010154168015613cb857613cab82847f00000000000000000000000000000000000000000000000000000000000000008460106000896001600160a01b03166001600160a01b0316815260200190815260200160002060020154613f0c565b613cb59087614521565b95505b505b50505b80613cc781614590565b915050613a77565b509092915050565b6015546000906001600160a01b031615613d2e57601654601554613d2b9184917f0000000000000000000000000000000000000000000000000000000000000000916001600160a01b0390811691166140a9565b91505b601654601454610a439184916001600160a01b03918216917f000000000000000000000000000000000000000000000000000000000000000091166140a9565b606061270184846000856140c2565b60135460405163095ea7b360e01b81526001600160a01b039182166004820152602481018490527f00000000000000000000000000000000000000000000000000000000000000009091169063095ea7b3906044016020604051808303816000875af1158015613df1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e159190614539565b5060135460405163b6b55f2560e01b8152600481018490526001600160a01b039091169063b6b55f2590602401600060405180830381600087803b158015613e5c57600080fd5b505af1158015613e70573d6000803e3d6000fd5b505060135460405163095ea7b360e01b81526001600160a01b039182166004820152600060248201527f0000000000000000000000000000000000000000000000000000000000000000909116925063095ea7b391506044016020604051808303816000875af1158015613ee8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120929190614539565b600080613f1986866138fc565b509050600080856001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015613f5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f819190614705565b5091509150876001600160a01b0316836001600160a01b031614613fa157905b600080613fd08b856dffffffffffffffffffffffffffff16856dffffffffffffffffffffffffffff168a61392d565b9050896001600160a01b0316856001600160a01b031614613fed57905b6140016001600160a01b038b16898d6129e2565b604080516000815260208101918290527f022c0d9f000000000000000000000000000000000000000000000000000000009091526001600160a01b0389169063022c0d9f906140599085908590309060248101614755565b600060405180830381600087803b15801561407357600080fd5b505af1158015614087573d6000803e3d6000fd5b50505050818111614098578161409a565b805b9b9a5050505050505050505050565b60006140b9858585856003613f0c565b95945050505050565b60608247101561413a5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610b9c565b6001600160a01b0385163b6141915760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610b9c565b600080866001600160a01b031685876040516141ad919061478d565b60006040518083038185875af1925050503d80600081146141ea576040519150601f19603f3d011682016040523d82523d6000602084013e6141ef565b606091505b50915091506141ff82828661420a565b979650505050505050565b60608315614219575081610b0b565b8251156142295782518084602001fd5b8160405162461bcd60e51b8152600401610b9c919061429b565b60005b8381101561425e578181015183820152602001614246565b83811115611c175750506000910152565b60008151808452614287816020860160208601614243565b601f01601f19169290920160200192915050565b602081526000610b0b602083018461426f565b6001600160a01b0381168114611c2757600080fd5b600080604083850312156142d657600080fd5b82356142e1816142ae565b946020939093013593505050565b60006020828403121561430157600080fd5b5035919050565b60008060006060848603121561431d57600080fd5b8335614328816142ae565b92506020840135614338816142ae565b929592945050506040919091013590565b6000806040838503121561435c57600080fd5b8235614367816142ae565b91506020830135614377816142ae565b809150509250929050565b60006020828403121561439457600080fd5b8135610b0b816142ae565b803560ff811681146143b057600080fd5b919050565b600080600080600060a086880312156143cd57600080fd5b85359450602086013593506143e46040870161439f565b94979396509394606081013594506080013592915050565b8015158114611c2757600080fd5b60006020828403121561441c57600080fd5b8135610b0b816143fc565b6000806040838503121561443a57600080fd5b823591506020830135614377816143fc565b600080600080600080600060e0888a03121561446757600080fd5b8735614472816142ae565b96506020880135614482816142ae565b9550604088013594506060880135935061449e6080890161439f565b925060a0880135915060c0880135905092959891949750929550565b600181811c908216806144ce57607f821691505b6020821081036144ee57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008282101561451c5761451c6144f4565b500390565b60008219821115614534576145346144f4565b500190565b60006020828403121561454b57600080fd5b8151610b0b816143fc565b6000806040838503121561456957600080fd5b505080516020909101519092909150565b634e487b7160e01b600052603260045260246000fd5b6000600182016145a2576145a26144f4565b5060010190565b634e487b7160e01b600052603160045260246000fd5b6000602082840312156145d157600080fd5b5051919050565b60008160001904831182151516156145f2576145f26144f4565b500290565b60008261461457634e487b7160e01b600052601260045260246000fd5b500490565b600080835481600182811c91508083168061463557607f831692505b6020808410820361465457634e487b7160e01b86526022600452602486fd5b8180156146685760018114614679576146a6565b60ff198616895284890196506146a6565b60008a81526020902060005b8681101561469e5781548b820152908501908301614685565b505084890196505b509498975050505050505050565b6000602082840312156146c657600080fd5b8151610b0b816142ae565b634e487b7160e01b600052604160045260246000fd5b80516dffffffffffffffffffffffffffff811681146143b057600080fd5b60008060006060848603121561471a57600080fd5b614723846146e7565b9250614731602085016146e7565b9150604084015163ffffffff8116811461474a57600080fd5b809150509250925092565b8481528360208201526001600160a01b0383166040820152608060608201526000614783608083018461426f565b9695505050505050565b6000825161479f818460208701614243565b919091019291505056fe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220774578f4fbcf8054adc5a6c03e54a31158b67d5388af272120dd0c0b0a84175f64736f6c634300080d00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e000000000000000000000000022d4002028f537599be9f666d1c4fa138522f9c8000000000000000000000000cdfd91eea657cc2701117fe9711c9a4f61feed230000000000000000000000007a8ae10536d6920aa609d12775ffe6d73376668f0000000000000000000000009bc36cc686800be1905bf7e10578ee6fbdd6f27a000000000000000000000000000000000000000000000000000000000000014000000000000000000000000040089e90156fc6f994cc0ec86dbe84634a1c156f000000000000000000000000b31f66aa3c1e785363f0875a1b74e27b85fd66c7000000000000000000000000000000000000000000000000000000e8d4a5100000000000000000000000000000000000000000000000000000000000000002bc000000000000000000000000000000000000000000000000000000000000012c0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000b31f66aa3c1e785363f0875a1b74e27b85fd66c700000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000dcedf06fd33e1d7b6eb4b309f779a0e9d3172e4400000000000000000000000000000000000000000000000000000000000000105969656c642059616b3a20797950545000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000022d4002028f537599be9f666d1c4fa138522f9c8000000000000000000000000cdfd91eea657cc2701117fe9711c9a4f61feed230000000000000000000000000000000000000000000000000000000000000003