[ { "inputs": [ { "internalType": "address", "name": "_stargateStaking", "type": "address" }, { "internalType": "address", "name": "_pool", "type": "address" }, { "components": [ { "internalType": "address", "name": "gasToken", "type": "address" }, { "internalType": "address[]", "name": "rewards", "type": "address[]" }, { "internalType": "address", "name": "simpleRouter", "type": "address" } ], "internalType": "struct BaseStrategy.BaseStrategySettings", "name": "_baseStrategySettings", "type": "tuple" }, { "components": [ { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "dev", "type": "address" }, { "internalType": "address", "name": "feeCollector", "type": "address" }, { "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 YakStrategyV3.StrategySettings", "name": "_strategySettings", "type": "tuple" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "rewardToken", "type": "address" } ], "name": "AddReward", "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": 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": "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": "address", "name": "oldValue", "type": "address" }, { "indexed": false, "internalType": "address", "name": "newValue", "type": "address" } ], "name": "UpdateFeeCollector", "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": false, "internalType": "address", "name": "oldRouter", "type": "address" }, { "indexed": false, "internalType": "address", "name": "newRouter", "type": "address" } ], "name": "UpdateRouter", "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": "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": "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" } ], "name": "addReward", "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": "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": "disableDeposits", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "enableDeposits", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "estimateReinvestReward", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "feeCollector", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "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": "getSupportedRewardsLength", "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": "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": [ { "internalType": "address", "name": "tokenAddress", "type": "address" }, { "internalType": "uint256", "name": "tokenAmount", "type": "uint256" } ], "name": "recoverERC20", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "recoverGas", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "reinvest", "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" } ], "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": "rewardToken", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "simpleRouter", "outputs": [ { "internalType": "contract ISimpleRouter", "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": "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": "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": "address", "name": "newValue", "type": "address" } ], "name": "updateFeeCollector", "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": "address", "name": "_router", "type": "address" } ], "name": "updateRouter", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "withdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
6101806040526009610140819052685969656c642059616b60b81b6101609081526200002f9160009190620007b0565b506040805180820190915260038082526216549560ea1b60209092019182526200005c91600191620007b0565b503480156200006a57600080fd5b50604051620052ab380380620052ab8339810160408190526200008d9162000ac8565b600680546001600160a01b031916339081179091556040518391839182919081906000906000805160206200528b833981519152908290a35080518051620000de91600091602090910190620007b0565b506080808201516001600160a01b0390811690915260a0808301519091169052600780546001600160a01b0319163317905560c0810151620001209062000291565b60e0810151620001309062000332565b6101008101516200014190620003ee565b60608101516200015190620004aa565b604081015162000161906200055e565b6200016b62000612565b60208101516200017b90620006b3565b5081516001600160a01b031660c0526020808301518051620001a292600d9201906200083f565b50604082810151600e80546001600160a01b0319166001600160a01b039092169190911790558051600080825260208201527fc7606d21ac05cd309191543e409f0845c016120563783d70e4f41419dc0ef234910160405180910390a150506001600160a01b0380851660e052831661010081905260408051637e062a3560e11b8152905163fc0c546a916004808201926020929091908290030181865afa15801562000253573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000279919062000c23565b6001600160a01b0316610120525062000cab92505050565b6007546001600160a01b03163314620002f15760405162461bcd60e51b815260206004820152601460248201527f59616b53747261746567793a3a6f6e6c7944657600000000000000000000000060448201526064015b60405180910390fd5b60095460408051918252602082018390527f481f79ac3a523b6d6db3c5a720e190e986d1cc1b41adcdf50f9caef849901100910160405180910390a1600955565b6007546001600160a01b031633146200038e5760405162461bcd60e51b815260206004820152601460248201527f59616b53747261746567793a3a6f6e6c794465760000000000000000000000006044820152606401620002e8565b612710600b5482620003a1919062000c48565b1115620003ad57600080fd5b600c5460408051918252602082018390527f2a42303d002f0ba6cfe8259c91d4684443fb0b3de286ba74991175d651726131910160405180910390a1600c55565b6007546001600160a01b031633146200044a5760405162461bcd60e51b815260206004820152601460248201527f59616b53747261746567793a3a6f6e6c794465760000000000000000000000006044820152606401620002e8565b612710600c54826200045d919062000c48565b11156200046957600080fd5b600b5460408051918252602082018390527fe7f97d51d307dc44045597c9978bec0f842e6bb40d19b9444084cfa30d9ed4f2910160405180910390a1600b55565b6006546001600160a01b03163314620004f55760405162461bcd60e51b815260206004820181905260248201526000805160206200526b8339815191526044820152606401620002e8565b600854604080516001600160a01b03928316815291831660208301527fcc882185e6edeeb762130016ea1faf3d7aa9c01b199bfd646f965b58ab741063910160405180910390a1600880546001600160a01b0319166001600160a01b0392909216919091179055565b6006546001600160a01b03163314620005a95760405162461bcd60e51b815260206004820181905260248201526000805160206200526b8339815191526044820152606401620002e8565b600754604080516001600160a01b03928316815291831660208301527fa8e91499ed37682f43cffb045fcc7d379a91e8c9a14e6321877ee34dee564c00910160405180910390a1600780546001600160a01b0319166001600160a01b0392909216919091179055565b6006546001600160a01b031633146200065d5760405162461bcd60e51b815260206004820181905260248201526000805160206200526b8339815191526044820152606401620002e8565b600a5460ff16156200066e57600080fd5b600a805460ff191660019081179091556040519081527f7b014ed3854e7f5cb0218d58b3c6ae7d53a68bb0af2f67bfb029ea42c38a7e859060200160405180910390a1565b6006546001600160a01b03163314620006fe5760405162461bcd60e51b815260206004820181905260248201526000805160206200526b8339815191526044820152606401620002e8565b6001600160a01b038116620007655760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620002e8565b6006546040516001600160a01b038084169216906000805160206200528b83398151915290600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b828054620007be9062000c6f565b90600052602060002090601f016020900481019282620007e257600085556200082d565b82601f10620007fd57805160ff19168380011785556200082d565b828001600101855582156200082d579182015b828111156200082d57825182559160200191906001019062000810565b506200083b92915062000897565b5090565b8280548282559060005260206000209081019282156200082d579160200282015b828111156200082d57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000860565b5b808211156200083b576000815560010162000898565b80516001600160a01b0381168114620008c657600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b0381118282101715620009075762000907620008cb565b60405290565b604051606081016001600160401b0381118282101715620009075762000907620008cb565b604051601f8201601f191681016001600160401b03811182821017156200095d576200095d620008cb565b604052919050565b600082601f8301126200097757600080fd5b81516001600160401b03811115620009935762000993620008cb565b6020620009a9601f8301601f1916820162000932565b8281528582848701011115620009be57600080fd5b60005b83811015620009de578581018301518282018401528201620009c1565b83811115620009f05760008385840101525b5095945050505050565b6000610120828403121562000a0e57600080fd5b62000a18620008e1565b82519091506001600160401b0381111562000a3257600080fd5b62000a408482850162000965565b82525062000a5160208301620008ae565b602082015262000a6460408301620008ae565b604082015262000a7760608301620008ae565b606082015262000a8a60808301620008ae565b608082015262000a9d60a08301620008ae565b60a082015260c082015160c082015260e082015160e082015261010080830151818301525092915050565b6000806000806080858703121562000adf57600080fd5b62000aea85620008ae565b9350602062000afb818701620008ae565b60408701519094506001600160401b038082111562000b1957600080fd5b908701906060828a03121562000b2e57600080fd5b62000b386200090d565b62000b4383620008ae565b8152838301518281111562000b5757600080fd5b8301601f81018b1362000b6957600080fd5b80518381111562000b7e5762000b7e620008cb565b8060051b62000b8f87820162000932565b918252828101870191878101908e84111562000baa57600080fd5b938801935b8385101562000bd35762000bc385620008ae565b8252938801939088019062000baf565b858901525062000bea9250505060408401620008ae565b6040820152606089015190955092508083111562000c0757600080fd5b505062000c1787828801620009fa565b91505092959194509250565b60006020828403121562000c3657600080fd5b62000c4182620008ae565b9392505050565b6000821982111562000c6a57634e487b7160e01b600052601160045260246000fd5b500190565b600181811c9082168062000c8457607f821691505b60208210810362000ca557634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e051610100516101205161446662000e05600039600081816134c801528181613568015261363601526000818161360701526136c001526000818161111e01528181612508015281816128d00152818161294101528181612a3f0152818161375c0152818161383f0152613933015260008181611a6d015281816132280152818161325701526132cc01526000818161079f015281816119d001528181611ad501528181611c1401528181612e0301528181612e6b01528181613174015281816132f6015281816133b201528181613415015281816134f2015261354001526000818161069f01528181610a0101528181610ad401528181610c6b01528181610d00015281816110ed015281816124d60152818161271c015281816128a80152818161297001528181612a0f01528181612adc0152818161378b0152818161381001526138c301526144666000f3fe608060405234801561001057600080fd5b506004361061036d5760003560e01c806395d89b41116101d3578063c851cc3211610104578063e75ab045116100a2578063f2fde38b1161007c578063f2fde38b14610774578063f6314d0714610787578063f7c618c11461079a578063fdb5a03e146107c157600080fd5b8063e75ab04514610746578063eab89a5a14610759578063ed24911d1461076c57600080fd5b8063d505accf116100de578063d505accf146106d4578063da09c72c146106e7578063dd62ed3e146106fa578063dd8ce4d61461073357600080fd5b8063c851cc3214610687578063c89039c51461069a578063d2c35ce8146106c157600080fd5b8063ac67e1af11610171578063b9e57b801161014b578063b9e57b801461065b578063bd079f5514610663578063c415b95c1461066c578063c4b24a461461067f57600080fd5b8063ac67e1af14610633578063b52a321f1461063b578063b6b55f251461064857600080fd5b80639e4e7318116101ad5780639e4e7318146105d3578063a4d5e67c146105fa578063a8ae2b7c1461060d578063a9059cbb1461062057600080fd5b806395d89b41146105a557806399729ec1146105ad5780639c9b2e21146105c057600080fd5b80635e4c57a4116102ad5780637d8820971161024b5780638980f11f116102255780638980f11f146105515780638aff733d146105645780638da5cb5b1461056d5780639291d5631461059257600080fd5b80637d882097146105165780637ecebe001461051e578063818372301461053e57600080fd5b806370a082311161028757806370a08231146104bf578063715018a6146104e85780637897e7f6146104f05780637ae267731461050357600080fd5b80635e4c57a41461049b5780635ea682ea146104a3578063666d25b9146104ac57600080fd5b8063247d284b1161031a5780632f4f21e2116102f45780632f4f21e21461043457806330adf81f14610447578063313ce5671461046e5780634a970be71461048857600080fd5b8063247d284b146103b3578063258250da146104175780632e1a7d4d1461041f57600080fd5b806318160ddd1161034b57806318160ddd146103d457806320606b70146103dd57806323b872dd1461040457600080fd5b806306fdde0314610372578063095ea7b31461039057806311056035146103b3575b600080fd5b61037a6107c9565b6040516103879190613cb3565b60405180910390f35b6103a361039e366004613cfb565b610857565b6040519015158152602001610387565b6103c66103c1366004613d27565b61086d565b604051908152602001610387565b6103c660025481565b6103c67f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6103a3610412366004613d40565b61087e565b600d546103c6565b61043261042d366004613d27565b610947565b005b610432610442366004613cfb565b610a6d565b6103c67f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b610476601281565b60405160ff9091168152602001610387565b610432610496366004613d97565b610a7b565b610432610b49565b6103c6600c5481565b6104326104ba366004613d27565b610bf9565b6103c66104cd366004613dde565b6001600160a01b031660009081526004602052604090205490565b610432610e7a565b6104326104fe366004613d27565b610f1e565b610432610511366004613dfb565b610ff0565b6103c66110bd565b6103c661052c366004613dde565b60056020526000908152604090205481565b61043261054c366004613d27565b611190565b61043261055f366004613cfb565b611222565b6103c6600b5481565b6006546001600160a01b03165b6040516001600160a01b039091168152602001610387565b6104326105a0366004613dde565b6112e4565b61037a6113a7565b6104326105bb366004613d27565b6113b4565b6104326105ce366004613dde565b611462565b6103c67fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc681565b610432610608366004613dde565b6115fd565b61043261061b366004613d27565b611800565b6103a361062e366004613cfb565b6118ae565b6104326118bb565b600a546103a39060ff1681565b610432610656366004613d27565b611956565b6103c6611963565b6103c660095481565b60085461057a906001600160a01b031681565b6103c66119a2565b610432610695366004613dde565b611cf7565b61057a7f000000000000000000000000000000000000000000000000000000000000000081565b6104326106cf366004613dde565b611db1565b6104326106e2366004613e34565b611e74565b60075461057a906001600160a01b031681565b6103c6610708366004613dfb565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6103c6610741366004613d27565b611f87565b61057a610754366004613d27565b611fcd565b6103c6610767366004613d27565b611ff7565b6103c661202d565b610432610782366004613dde565b6120cd565b600e5461057a906001600160a01b031681565b61057a7f000000000000000000000000000000000000000000000000000000000000000081565b6104326121ff565b600080546107d690613ea2565b80601f016020809104026020016040519081016040528092919081815260200182805461080290613ea2565b801561084f5780601f106108245761010080835404028352916020019161084f565b820191906000526020600020905b81548152906001019060200180831161083257829003601f168201915b505050505081565b600061086433848461225a565b50600192915050565b600061087882612368565b92915050565b6001600160a01b0383166000818152600360209081526040808320338085529252822054919290919082148015906108b857506000198114155b1561092e5760006108c98583613ef2565b6001600160a01b038881166000818152600360209081526040808320948916808452948252918290208590559051848152939450919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505b610939868686612382565b6001925050505b9392505050565b600061095282611ff7565b9050600081116109cf5760405162461bcd60e51b815260206004820152602560248201527f4261736553747261746567793a3a576974686472617720616d6f756e7420746f60448201527f6f206c6f7700000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b60006109da826124a6565b905060006109e783612368565b9050610a28336109f78385613ef2565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016919061256c565b610a3233856125ec565b60405183815233907f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243649060200160405180910390a250505050565b610a778282612680565b5050565b6040517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690526064810185905260ff8416608482015260a4810183905260c481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d505accf9060e401600060405180830381600087803b158015610b2057600080fd5b505af1158015610b34573d6000803e3d6000fd5b50505050610b423386612680565b5050505050565b6006546001600160a01b03163314610ba35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109c6565b600a5460ff1615610bb357600080fd5b600a805460ff191660019081179091556040519081527f7b014ed3854e7f5cb0218d58b3c6ae7d53a68bb0af2f67bfb029ea42c38a7e85906020015b60405180910390a1565b6006546001600160a01b03163314610c535760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109c6565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610cba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cde9190613f09565b9050610ce8612878565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610d4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d739190613f09565b905082610d808383613ef2565b1015610e1a5760405162461bcd60e51b815260206004820152604260248201527f4261736553747261746567793a3a456d657267656e637920776974686472617760448201527f206d696e696d756d2072657475726e20616d6f756e74206e6f7420726561636860648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a4016109c6565b7fc7606d21ac05cd309191543e409f0845c016120563783d70e4f41419dc0ef234610e436110bd565b6002546040805192835260208301919091520160405180910390a1600a5460ff161515600103610e7557610e756118bb565b505050565b6006546001600160a01b03163314610ed45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109c6565b6006546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600680546001600160a01b0319169055565b6006546001600160a01b03163314610f785760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109c6565b60008111610f8557600080fd5b604051339082156108fc029083906000818181858888f19350505050158015610fb2573d6000803e3d6000fd5b506040805160008152602081018390527f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa28910160405180910390a150565b6007546001600160a01b031633146110415760405162461bcd60e51b81526020600482015260146024820152732cb0b5a9ba3930ba32b3bc9d1d37b7363ca232bb60611b60448201526064016109c6565b60405163095ea7b360e01b81526001600160a01b0382811660048301526000602483015283169063095ea7b3906044016020604051808303816000875af1158015611090573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b49190613f22565b610a7757600080fd5b6040517ff7888aec0000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301523060248301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063f7888aec90604401602060405180830381865afa158015611167573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118b9190613f09565b905090565b6007546001600160a01b031633146111e15760405162461bcd60e51b81526020600482015260146024820152732cb0b5a9ba3930ba32b3bc9d1d37b7363ca232bb60611b60448201526064016109c6565b60095460408051918252602082018390527f481f79ac3a523b6d6db3c5a720e190e986d1cc1b41adcdf50f9caef849901100910160405180910390a1600955565b6006546001600160a01b0316331461127c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109c6565b6000811161128957600080fd5b61129d6001600160a01b038316338361256c565b604080516001600160a01b0384168152602081018390527f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa2891015b60405180910390a15050565b6006546001600160a01b0316331461133e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109c6565b600754604080516001600160a01b03928316815291831660208301527fa8e91499ed37682f43cffb045fcc7d379a91e8c9a14e6321877ee34dee564c00910160405180910390a1600780546001600160a01b0319166001600160a01b0392909216919091179055565b600180546107d690613ea2565b6007546001600160a01b031633146114055760405162461bcd60e51b81526020600482015260146024820152732cb0b5a9ba3930ba32b3bc9d1d37b7363ca232bb60611b60448201526064016109c6565b612710600b54826114169190613f44565b111561142157600080fd5b600c5460408051918252602082018390527f2a42303d002f0ba6cfe8259c91d4684443fb0b3de286ba74991175d651726131910160405180910390a1600c55565b6007546001600160a01b031633146114b35760405162461bcd60e51b81526020600482015260146024820152732cb0b5a9ba3930ba32b3bc9d1d37b7363ca232bb60611b60448201526064016109c6565b6000805b600d5481101561150a57600d81815481106114d4576114d4613f5c565b6000918252602090912001546001600160a01b03908116908416036114f857600191505b8061150281613f72565b9150506114b7565b50801561157f5760405162461bcd60e51b815260206004820152602860248201527f4261736553747261746567793a3a52657761726420616c726561647920636f6e60448201527f666967757265642100000000000000000000000000000000000000000000000060648201526084016109c6565b600d80546001810182556000919091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b0319166001600160a01b0384169081179091556040519081527f1714865bf5baa84e3439536a013c87cfe030b4cd69f344a5f2a4877de3d517ce906020016112d8565b6007546001600160a01b0316331461164e5760405162461bcd60e51b81526020600482015260146024820152732cb0b5a9ba3930ba32b3bc9d1d37b7363ca232bb60611b60448201526064016109c6565b6000805b600d5481101561171e57600d818154811061166f5761166f613f5c565b6000918252602090912001546001600160a01b039081169084160361170c57600d8054600193506116a1908490613ef2565b815481106116b1576116b1613f5c565b600091825260209091200154600d80546001600160a01b0390921691839081106116dd576116dd613f5c565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b8061171681613f72565b915050611652565b50806117915760405162461bcd60e51b8152602060048201526024808201527f4261736553747261746567793a3a526577617264206e6f7420636f6e6669677560448201527f726564210000000000000000000000000000000000000000000000000000000060648201526084016109c6565b600d8054806117a2576117a2613f8b565b6000828152602090819020600019908301810180546001600160a01b03191690559091019091556040516001600160a01b03841681527f963b7c735475147a62c589c2d7cb8ec4b0a6b7af4f97373d79ebfa42ab8aa7dc91016112d8565b6007546001600160a01b031633146118515760405162461bcd60e51b81526020600482015260146024820152732cb0b5a9ba3930ba32b3bc9d1d37b7363ca232bb60611b60448201526064016109c6565b612710600c54826118629190613f44565b111561186d57600080fd5b600b5460408051918252602082018390527fe7f97d51d307dc44045597c9978bec0f842e6bb40d19b9444084cfa30d9ed4f2910160405180910390a1600b55565b6000610864338484612382565b6007546001600160a01b0316331461190c5760405162461bcd60e51b81526020600482015260146024820152732cb0b5a9ba3930ba32b3bc9d1d37b7363ca232bb60611b60448201526064016109c6565b600a5460ff1661191b57600080fd5b600a805460ff19169055604051600081527f7b014ed3854e7f5cb0218d58b3c6ae7d53a68bb0af2f67bfb029ea42c38a7e8590602001610bef565b6119603382612680565b50565b60008061196e6119a2565b9050600954811061199a57612710600b548261198a9190613fa1565b6119949190613fc0565b91505090565b600091505090565b6000806119ad6129df565b6040516370a0823160e01b81523060048201529091506000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015611a17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3b9190613f09565b905060005b8251811015611cf0576000838281518110611a5d57611a5d613f5c565b60200260200101516000015190507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031603611ad35747848381518110611ab757611ab7613f5c565b6020026020010151602001818151611acf9190613f44565b9052505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031603611b3c57838281518110611b1e57611b1e613f5c565b60200260200101516020015183611b359190613f44565b9250611cdd565b6001600160a01b03811615611cdd576040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611b92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb69190613f09565b90506000858481518110611bcc57611bcc613f5c565b60200260200101516020015182611be39190613f44565b90508015611cda57600e546040516377ccc49d60e11b8152600481018390526001600160a01b0385811660248301527f000000000000000000000000000000000000000000000000000000000000000081166044830152600092169063ef99893a90606401600060405180830381865afa158015611c65573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611c8d9190810190614145565b9050600181600001515111611ca3576000611ccc565b80518051611cb390600190613ef2565b81518110611cc357611cc3613f5c565b60200260200101515b611cd69087613f44565b9550505b50505b5080611ce881613f72565b915050611a40565b5092915050565b6007546001600160a01b03163314611d485760405162461bcd60e51b81526020600482015260146024820152732cb0b5a9ba3930ba32b3bc9d1d37b7363ca232bb60611b60448201526064016109c6565b600e54604080516001600160a01b03928316815291831660208301527f2c6fb4d5ff9fad6ecf2e09cd64cbc9aad92a8b9d2cc0e5c3ddef9b529b0b5ffd910160405180910390a1600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6006546001600160a01b03163314611e0b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109c6565b600854604080516001600160a01b03928316815291831660208301527fcc882185e6edeeb762130016ea1faf3d7aa9c01b199bfd646f965b58ab741063910160405180910390a1600880546001600160a01b0319166001600160a01b0392909216919091179055565b42841015611ec45760405162461bcd60e51b815260206004820152600f60248201527f7065726d69743a3a65787069726564000000000000000000000000000000000060448201526064016109c6565b6001600160a01b038716600090815260056020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a919086611f1183613f72565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050611f728882868686612c57565b611f7d88888861225a565b5050505050505050565b600080611f926110bd565b600254909150801580611fa3575081155b15611fb057509192915050565b81611fbb8286613fa1565b611fc59190613fc0565b949350505050565b600d8181548110611fdd57600080fd5b6000918252602090912001546001600160a01b0316905081565b6000806120026110bd565b600254909150801580612013575081155b15612022575060009392505050565b80611fbb8386613fa1565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60001b60006040516120629190614207565b6040519081900390207fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc646604080516020810195909552840192909252606083015260808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6006546001600160a01b031633146121275760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109c6565b6001600160a01b0381166121a35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016109c6565b6006546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b32331461224e5760405162461bcd60e51b815260206004820152601460248201527f59616b53747261746567793a3a6f6e6c79454f4100000000000000000000000060448201526064016109c6565b6122586000612db7565b565b6001600160a01b0383166122b05760405162461bcd60e51b815260206004820152601c60248201527f5f617070726f76653a3a6f776e6572207a65726f20616464726573730000000060448201526064016109c6565b6001600160a01b0382166123065760405162461bcd60e51b815260206004820152601e60248201527f5f617070726f76653a3a7370656e646572207a65726f2061646472657373000060448201526064016109c6565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000806127106123788285613fa1565b6109409190613fc0565b6001600160a01b0382166123fe5760405162461bcd60e51b815260206004820152603460248201527f5f7472616e73666572546f6b656e733a2063616e6e6f74207472616e7366657260448201527f20746f20746865207a65726f206164647265737300000000000000000000000060648201526084016109c6565b6001600160a01b038316600090815260046020526040902054612422908290613ef2565b6001600160a01b038085166000908152600460205260408082209390935590841681522054612452908290613f44565b6001600160a01b0380841660008181526004602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061235b9085815260200190565b6040517ff3fef3a30000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018390526000917f00000000000000000000000000000000000000000000000000000000000000009091169063f3fef3a390604401600060405180830381600087803b15801561254e57600080fd5b505af1158015612562573d6000803e3d6000fd5b5093949350505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610e75908490612f17565b6001600160a01b038216600090815260046020526040902054612610908290613ef2565b6001600160a01b038316600090815260046020526040902055600254612637908290613ef2565b6002556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b600a5460ff1615156001146126d75760405162461bcd60e51b815260206004820152601f60248201527f4261736553747261746567793a3a4465706f736974732064697361626c65640060448201526064016109c6565b6126e16001612db7565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064016020604051808303816000875af115801561276d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127919190613f22565b6128035760405162461bcd60e51b815260206004820152602b60248201527f4261736553747261746567793a3a4465706f73697420746f6b656e207472616e60448201527f73666572206661696c656400000000000000000000000000000000000000000060648201526084016109c6565b600061280e82612368565b9050612826836128216107418486613ef2565b612ffc565b61283082826130d2565b826001600160a01b03167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c8360405161286b91815260200190565b60405180910390a2505050565b6040517f6ff1c9bc0000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301527f00000000000000000000000000000000000000000000000000000000000000001690636ff1c9bc90602401600060405180830381600087803b15801561291457600080fd5b505af1158015612928573d6000803e3d6000fd5b505060405163095ea7b360e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152600060248301527f000000000000000000000000000000000000000000000000000000000000000016925063095ea7b391506044016020604051808303816000875af11580156129bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119609190613f22565b6040517fed21fed00000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015260609160009182917f00000000000000000000000000000000000000000000000000000000000000009091169063ed21fed090602401602060405180830381865afa158015612a88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aac91906142a2565b6040517f779bcb9b0000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152306024830152919091169063779bcb9b90604401600060405180830381865afa158015612b33573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612b5b91908101906142bf565b915091506000825167ffffffffffffffff811115612b7b57612b7b613fe2565b604051908082528060200260200182016040528015612bc057816020015b6040805180820190915260008082526020820152815260200190600190039081612b995790505b50905060005b8151811015612c4f576040518060400160405280858381518110612bec57612bec613f5c565b60200260200101516001600160a01b03168152602001848381518110612c1457612c14613f5c565b6020026020010151815250828281518110612c3157612c31613f5c565b60200260200101819052508080612c4790613f72565b915050612bc6565b509392505050565b6000612c6161202d565b6040517f1901000000000000000000000000000000000000000000000000000000000000602082015260228101919091526042810186905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff88169284019290925260608301869052608083018590529092509060019060a0016020604051602081039080840390855afa158015612d07573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811615801590612d3d5750866001600160a01b0316816001600160a01b0316145b612dae5760405162461bcd60e51b8152602060048201526024808201527f417263683a3a76616c69646174655369673a20696e76616c6964207369676e6160448201527f747572650000000000000000000000000000000000000000000000000000000060648201526084016109c6565b50505050505050565b6000612dc1613152565b9050600954811115612ed6576000612710600c5483612de09190613fa1565b612dea9190613fc0565b90508015612e2c57600854612e2c906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811691168361256c565b600083612e5357612710600b5484612e449190613fa1565b612e4e9190613fc0565b612e56565b60005b90508015612e9257612e926001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016338361256c565b6000612eb182612ea28587613ef2565b612eac9190613ef2565b6134c4565b90508015612ed2576000612ec482612368565b9050612ed082826130d2565b505b5050505b7fc7606d21ac05cd309191543e409f0845c016120563783d70e4f41419dc0ef234612eff6110bd565b600254604080519283526020830191909152016112d8565b6000612f6c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166137369092919063ffffffff16565b805190915015610e755780806020019051810190612f8a9190613f22565b610e755760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016109c6565b6000811161304c5760405162461bcd60e51b815260206004820152601260248201527f5f6d696e743a3a7a65726f20736861726573000000000000000000000000000060448201526064016109c6565b8060025461305a9190613f44565b6002556001600160a01b038216600090815260046020526040902054613081908290613f44565b6001600160a01b0383166000818152600460205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906126749085815260200190565b600082116131485760405162461bcd60e51b815260206004820152602260248201527f4261736553747261746567793a3a5374616b6520616d6f756e7420746f6f206c60448201527f6f7700000000000000000000000000000000000000000000000000000000000060648201526084016109c6565b610a778282613745565b600061315c61389f565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156131c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131e79190613f09565b600d5490915060005b818110156134bc576000600d828154811061320d5761320d613f5c565b6000918252602090912001546001600160a01b0390811691507f0000000000000000000000000000000000000000000000000000000000000000168103613338574780156132ca577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156132b057600080fd5b505af11580156132c4573d6000803e3d6000fd5b50505050505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316036133365761332d8186613f44565b945050506134aa565b505b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa15801561337f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133a39190613f09565b90506000811180156133e757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b156134a757600e546040516377ccc49d60e11b8152600481018390526001600160a01b0384811660248301527f000000000000000000000000000000000000000000000000000000000000000081166044830152600092169063ef99893a90606401600060405180830381865afa158015613466573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261348e9190810190614145565b905061349981613998565b6134a39087613f44565b9550505b50505b806134b481613f72565b9150506131f0565b509092915050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316146135f057600e546040516377ccc49d60e11b8152600481018490526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000081166044830152600092169063ef99893a90606401600060405180830381865afa1580156135b9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526135e19190810190614145565b90506135ec81613998565b9250505b60405163095ea7b360e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018490527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303816000875af115801561367f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136a39190613f22565b506040516311f9fbc960e21b8152306004820152602481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906347e7ef24906044015b6020604051808303816000875af1158015613712573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108789190613f09565b6060611fc58484600085613b02565b60405163095ea7b360e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018490527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303816000875af11580156137d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137f89190613f22565b506040516311f9fbc960e21b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018490527f000000000000000000000000000000000000000000000000000000000000000016906347e7ef2490604401600060405180830381600087803b15801561388357600080fd5b505af1158015613897573d6000803e3d6000fd5b505050505050565b604080516001808252818301909252600091602080830190803683370190505090507f0000000000000000000000000000000000000000000000000000000000000000816000815181106138f5576138f5613f5c565b6001600160a01b0392831660209182029290920101526040517f318d9e5d0000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000009091169063318d9e5d9061396a908490600401614367565b600060405180830381600087803b15801561398457600080fd5b505af1158015610b42573d6000803e3d6000fd5b805151600090158015906139d5575081518051600091906139bb90600190613ef2565b815181106139cb576139cb613f5c565b6020026020010151115b15613afa5781604001516000815181106139f1576139f1613f5c565b60200260200101516001600160a01b031663095ea7b3600e60009054906101000a90046001600160a01b03168460000151600081518110613a3457613a34613f5c565b60200260200101516040518363ffffffff1660e01b8152600401613a6d9291906001600160a01b03929092168252602082015260400190565b6020604051808303816000875af1158015613a8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ab09190613f22565b50600e546040517f5b2466160000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690635b246616906136f390859060040161437a565b506000919050565b606082471015613b7a5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016109c6565b6001600160a01b0385163b613bd15760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109c6565b600080866001600160a01b03168587604051613bed9190614414565b60006040518083038185875af1925050503d8060008114613c2a576040519150601f19603f3d011682016040523d82523d6000602084013e613c2f565b606091505b5091509150613c3f828286613c4a565b979650505050505050565b60608315613c59575081610940565b825115613c695782518084602001fd5b8160405162461bcd60e51b81526004016109c69190613cb3565b60005b83811015613c9e578181015183820152602001613c86565b83811115613cad576000848401525b50505050565b6020815260008251806020840152613cd2816040850160208701613c83565b601f01601f19169190910160400192915050565b6001600160a01b038116811461196057600080fd5b60008060408385031215613d0e57600080fd5b8235613d1981613ce6565b946020939093013593505050565b600060208284031215613d3957600080fd5b5035919050565b600080600060608486031215613d5557600080fd5b8335613d6081613ce6565b92506020840135613d7081613ce6565b929592945050506040919091013590565b803560ff81168114613d9257600080fd5b919050565b600080600080600060a08688031215613daf57600080fd5b8535945060208601359350613dc660408701613d81565b94979396509394606081013594506080013592915050565b600060208284031215613df057600080fd5b813561094081613ce6565b60008060408385031215613e0e57600080fd5b8235613e1981613ce6565b91506020830135613e2981613ce6565b809150509250929050565b600080600080600080600060e0888a031215613e4f57600080fd5b8735613e5a81613ce6565b96506020880135613e6a81613ce6565b95506040880135945060608801359350613e8660808901613d81565b925060a0880135915060c0880135905092959891949750929550565b600181811c90821680613eb657607f821691505b602082108103613ed657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600082821015613f0457613f04613edc565b500390565b600060208284031215613f1b57600080fd5b5051919050565b600060208284031215613f3457600080fd5b8151801515811461094057600080fd5b60008219821115613f5757613f57613edc565b500190565b634e487b7160e01b600052603260045260246000fd5b600060018201613f8457613f84613edc565b5060010190565b634e487b7160e01b600052603160045260246000fd5b6000816000190483118215151615613fbb57613fbb613edc565b500290565b600082613fdd57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b6040516080810167ffffffffffffffff8111828210171561401b5761401b613fe2565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561404a5761404a613fe2565b604052919050565b600067ffffffffffffffff82111561406c5761406c613fe2565b5060051b60200190565b600082601f83011261408757600080fd5b8151602061409c61409783614052565b614021565b82815260059290921b840181019181810190868411156140bb57600080fd5b8286015b848110156140d657805183529183019183016140bf565b509695505050505050565b600082601f8301126140f257600080fd5b8151602061410261409783614052565b82815260059290921b8401810191818101908684111561412157600080fd5b8286015b848110156140d657805161413881613ce6565b8352918301918301614125565b60006020828403121561415757600080fd5b815167ffffffffffffffff8082111561416f57600080fd5b908301906080828603121561418357600080fd5b61418b613ff8565b82518281111561419a57600080fd5b6141a687828601614076565b8252506020830151828111156141bb57600080fd5b6141c7878286016140e1565b6020830152506040830151828111156141df57600080fd5b6141eb878286016140e1565b6040830152506060830151606082015280935050505092915050565b600080835481600182811c91508083168061422357607f831692505b6020808410820361424257634e487b7160e01b86526022600452602486fd5b818015614256576001811461426757614294565b60ff19861689528489019650614294565b60008a81526020902060005b8681101561428c5781548b820152908501908301614273565b505084890196505b509498975050505050505050565b6000602082840312156142b457600080fd5b815161094081613ce6565b600080604083850312156142d257600080fd5b825167ffffffffffffffff808211156142ea57600080fd5b6142f6868387016140e1565b9350602085015191508082111561430c57600080fd5b5061431985828601614076565b9150509250929050565b600081518084526020808501945080840160005b8381101561435c5781516001600160a01b031687529582019590820190600101614337565b509495945050505050565b6020815260006109406020830184614323565b60208082528251608083830152805160a0840181905260009291820190839060c08601905b808310156143bf578351825292840192600192909201919084019061439f565b50838701519350601f199250828682030160408701526143df8185614323565b935050506040850151818584030160608601526143fc8382614323565b92505050606084015160808401528091505092915050565b60008251614426818460208701613c83565b919091019291505056fea264697066735822122089f70937e5b67ac7a9a0588277a7519090ddb189ef0fc4dc1ddd77a42bd0274c64736f6c634300080d00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e00000000000000000000000008db623d439c8c4dfa1ca94e4cd3eb8b3aaff83310000000000000000000000005634c4a5fed09819e3c46d86a965dd9447d86e4700000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000100000000000000000000000000b31f66aa3c1e785363f0875a1b74e27b85fd66c70000000000000000000000000000000000000000000000000000000000000060000000000000000000000000959a0af5a46f76aa37317bc417d48b445658b18800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000dcedf06fd33e1d7b6eb4b309f779a0e9d3172e44000000000000000000000000dcedf06fd33e1d7b6eb4b309f779a0e9d3172e440000000000000000000000002d580f9cf2fb2d09bc411532988f2afda4e7beff000000000000000000000000ada7a31b692e3abfccd02c3d7f8adc5944510291000000000000000000000000b31f66aa3c1e785363f0875a1b74e27b85fd66c700000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000002bc000000000000000000000000000000000000000000000000000000000000012c00000000000000000000000000000000000000000000000000000000000000155969656c642059616b3a2053544720532a555344430000000000000000000000