[ { "inputs": [ { "internalType": "address", "name": "_veYfi", "type": "address" }, { "internalType": "address", "name": "_dYfi", "type": "address" }, { "internalType": "address", "name": "_veYfiDYfiPool", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "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": false, "internalType": "address", "name": "account", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "BoostedBalanceUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "caller", "type": "address" }, { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "assets", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "Deposit", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "duration", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "rewardRate", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "periodFinish", "type": "uint256" } ], "name": "DurationUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "asset", "type": "address" }, { "indexed": true, "internalType": "address", "name": "owner", "type": "address" } ], "name": "Initialize", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "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": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "recipient", "type": "address" } ], "name": "RecipientUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "reward", "type": "uint256" } ], "name": "RewardPaid", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "currentRewards", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "lastUpdateTime", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "periodFinish", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "rewardRate", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "historicalRewards", "type": "uint256" } ], "name": "RewardsAdded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "RewardsQueued", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "token", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Sweep", "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": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "transfered", "type": "uint256" } ], "name": "TransferredPenalty", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "rewardPerTokenStored", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "lastUpdateTime", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "rewards", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "userRewardPerTokenPaid", "type": "uint256" } ], "name": "UpdatedRewards", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "caller", "type": "address" }, { "indexed": true, "internalType": "address", "name": "receiver", "type": "address" }, { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "assets", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "Withdraw", "type": "event" }, { "inputs": [], "name": "BOOSTING_FACTOR", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "BOOST_DENOMINATOR", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PRECISION_FACTOR", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "REWARD_TOKEN", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "VEYFI", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "VE_YFI_POOL", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "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": [], "name": "asset", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_account", "type": "address" } ], "name": "boostedBalanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_shares", "type": "uint256" } ], "name": "convertToAssets", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_assets", "type": "uint256" } ], "name": "convertToShares", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "currentRewards", "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": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "subtractedValue", "type": "uint256" } ], "name": "decreaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_assets", "type": "uint256" }, { "internalType": "address", "name": "_receiver", "type": "address" } ], "name": "deposit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_assets", "type": "uint256" } ], "name": "deposit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "deposit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "duration", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_account", "type": "address" } ], "name": "earned", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getReward", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_account", "type": "address" } ], "name": "getReward", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "historicalRewards", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "addedValue", "type": "uint256" } ], "name": "increaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_asset", "type": "address" }, { "internalType": "address", "name": "_owner", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "_accounts", "type": "address[]" } ], "name": "kick", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "lastTimeRewardApplicable", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lastUpdateTime", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "maxDeposit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "maxMint", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" } ], "name": "maxRedeem", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" } ], "name": "maxWithdraw", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_shares", "type": "uint256" }, { "internalType": "address", "name": "_receiver", "type": "address" } ], "name": "mint", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_account", "type": "address" } ], "name": "nextBoostedBalanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "periodFinish", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_assets", "type": "uint256" } ], "name": "previewDeposit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_shares", "type": "uint256" } ], "name": "previewMint", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_assets", "type": "uint256" } ], "name": "previewRedeem", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_assets", "type": "uint256" } ], "name": "previewWithdraw", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "queueNewRewards", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "queuedRewards", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "recipients", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_assets", "type": "uint256" }, { "internalType": "address", "name": "_receiver", "type": "address" }, { "internalType": "address", "name": "_owner", "type": "address" } ], "name": "redeem", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "rewardPerToken", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "rewardPerTokenStored", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "rewardRate", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "rewards", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_newDuration", "type": "uint256" } ], "name": "setDuration", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_recipient", "type": "address" } ], "name": "setRecipient", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_token", "type": "address" } ], "name": "sweep", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalAssets", "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": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "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": "", "type": "address" } ], "name": "userRewardPerTokenPaid", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "withdraw", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "_claim", "type": "bool" } ], "name": "withdraw", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_assets", "type": "uint256" }, { "internalType": "address", "name": "_receiver", "type": "address" }, { "internalType": "address", "name": "_owner", "type": "address" } ], "name": "withdraw", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_assets", "type": "uint256" }, { "internalType": "address", "name": "_receiver", "type": "address" }, { "internalType": "address", "name": "_owner", "type": "address" }, { "internalType": "bool", "name": "_claim", "type": "bool" } ], "name": "withdraw", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" } ]
60e06040523480156200001157600080fd5b506040516200305638038062003056833981016040819052620000349162000169565b816001600160a01b038116620000915760405162461bcd60e51b815260206004820152601860248201527f72657761726473546f6b656e203078302061646472657373000000000000000060448201526064015b60405180910390fd5b6001600160a01b039081166080528316620000e45760405162461bcd60e51b81526020600482015260126024820152715f617373657420307830206164647265737360701b604482015260640162000088565b6001600160a01b038116620001315760405162461bcd60e51b81526020600482015260126024820152715f617373657420307830206164647265737360701b604482015260640162000088565b6001600160a01b0392831660a05290911660c05250620001b3565b80516001600160a01b03811681146200016457600080fd5b919050565b6000806000606084860312156200017f57600080fd5b6200018a846200014c565b92506200019a602085016200014c565b9150620001aa604085016200014c565b90509250925092565b60805160a05160c051612e3462000222600039600081816106d80152818161244701526124fa0152600081816105ec01528181612046015261210a01526000818161066501528181610e0a015281816113f201528181611b6b01528181611ba401526124760152612e346000f3fe608060405234801561001057600080fd5b50600436106103da5760003560e01c80638b8763471161020a578063c63d75b611610125578063d0e30db0116100b8578063eb82031211610087578063eb820312146107b0578063ebe2b12b146107d9578063ef8b30f714610465578063f2fde38b146107e2578063f6be71d1146107f557600080fd5b8063d0e30db01461078c578063d905777e14610766578063dd62ed3e14610794578063df136d65146107a757600080fd5b8063ccd34cd5116100f4578063ccd34cd51461074f578063cd3daf9d1461075e578063ce96cb7714610766578063d045f2c41461077957600080fd5b8063c63d75b61461056c578063c67ffb4e14610733578063c6e6f59214610465578063c8f33c911461074657600080fd5b8063a810a54c1161019d578063b5387c781161016c578063b5387c78146106d3578063b6b55f25146106fa578063ba0876521461070d578063c00007b01461072057600080fd5b8063a810a54c1461069a578063a9059cbb146106ad578063b3d7f6b914610465578063b460af94146106c057600080fd5b806395d89b41116101d957806395d89b4114610650578063980091fc1461065857806399248ea714610660578063a457c2d71461068757600080fd5b80638b876347146106165780638da5cb5b14610636578063901a7d531461064757806394bf804d146105b057600080fd5b806338d52e0f116102fa578063590a41f51161028d578063715018a61161025c578063715018a6146105d65780637b0a47ee146105de5780637d2f791d146105e757806380faa57d1461060e57600080fd5b8063590a41f51461059457806363d38c3b146105a75780636e553f65146105b057806370a08231146105c357600080fd5b80633d18b912116102c95780633d18b91214610564578063402d267d1461056c578063485cc955146105815780634cdad5061461046557600080fd5b806338d52e0f1461050b57806339509351146105365780633bbed4a0146105495780633ccfd60b1461055c57600080fd5b80630fb5a6b4116103725780631beabcd2116103415780631beabcd2146104b757806323b872dd146104e0578063262d3d6d146104f3578063313ce567146104fc57600080fd5b80630fb5a6b4146104895780631530e6d81461049257806318160ddd146104a75780631bd32ed3146104af57600080fd5b80630700037d116103ae5780630700037d1461044557806307a2d13a14610465578063095ea7b3146104765780630a28a4771461046557600080fd5b80628cc262146103df57806301681a621461040557806301e1d1141461042857806306fdde0314610430575b600080fd5b6103f26103ed3660046127be565b610808565b6040519081526020015b60405180910390f35b6104186104133660046127be565b610841565b60405190151581526020016103fc565b6103f261096f565b61043861097f565b6040516103fc9190612805565b6103f26104533660046127be565b606e6020526000908152604090205481565b6103f2610473366004612838565b90565b610418610484366004612851565b610a11565b6103f260655481565b6104a56104a036600461287b565b610a2b565b005b6071546103f2565b6103f2600a81565b6103f26104c53660046127be565b6001600160a01b0316600090815260a2602052604090205490565b6104186104ee3660046128f0565b610a7a565b6103f2606c5481565b604051601281526020016103fc565b60a15461051e906001600160a01b031681565b6040516001600160a01b0390911681526020016103fc565b610418610544366004612851565b610a9e565b6104a56105573660046127be565b610ac0565b6103f2610b17565b610418610b2e565b6103f261057a3660046127be565b5060001990565b6104a561058f36600461292c565b610b4b565b6104186105a2366004612838565b610dcd565b6103f2606a5481565b6103f26105be36600461295f565b610f04565b6103f26105d13660046127be565b610f17565b6104a5610f32565b6103f260675481565b61051e7f000000000000000000000000000000000000000000000000000000000000000081565b6103f2610f46565b6103f26106243660046127be565b606d6020526000908152604090205481565b6033546001600160a01b031661051e565b6103f2606b5481565b610438610f54565b6103f2600181565b61051e7f000000000000000000000000000000000000000000000000000000000000000081565b610418610695366004612851565b610f63565b6103f26106a8366004612990565b610fde565b6104186106bb366004612851565b610ff4565b6103f26106ce3660046129ad565b611002565b61051e7f000000000000000000000000000000000000000000000000000000000000000081565b6103f2610708366004612838565b611019565b6103f261071b3660046129ad565b611029565b61041861072e3660046127be565b611038565b6103f26107413660046127be565b611058565b6103f260685481565b6103f2670de0b6b3a764000081565b6103f2611063565b6103f26107743660046127be565b61106d565b6103f26107873660046129e9565b611078565b6103f261108f565b6103f26107a236600461292c565b611185565b6103f260695481565b61051e6107be3660046127be565b60a3602052600090815260409020546001600160a01b031681565b6103f260665481565b6104a56107f03660046127be565b6111b0565b6104a5610803366004612838565b611229565b60008061081483611332565b6001600160a01b0384166000908152606e602052604090205490915061083a9082612a4e565b9392505050565b600061084b611394565b610854826113ee565b156108985760405162461bcd60e51b815260206004820152600f60248201526e383937ba32b1ba32b2103a37b5b2b760891b60448201526064015b60405180910390fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa1580156108df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109039190612a66565b90506109218361091b6033546001600160a01b031690565b83611440565b826001600160a01b03167fab2246061d7b0dd3631d037e3f6da75782ae489eeb9f6af878a4b25df9b07c778260405161095c91815260200190565b60405180910390a260019150505b919050565b600061097a60715490565b905090565b60606072805461098e90612a7f565b80601f01602080910402602001604051908101604052809291908181526020018280546109ba90612a7f565b8015610a075780601f106109dc57610100808354040283529160200191610a07565b820191906000526020600020905b8154815290600101906020018083116109ea57829003601f168201915b5050505050905090565b600033610a1f8185856114a3565b60019150505b92915050565b60005b81811015610a7557610a65838383818110610a4b57610a4b612ab3565b9050602002016020810190610a6091906127be565b6115c7565b610a6e81612ac9565b9050610a2e565b505050565b600033610a88858285611635565b610a938585856116af565b506001949350505050565b600033610a1f818585610ab18383611185565b610abb9190612a4e565b6114a3565b33600081815260a3602052604080822080546001600160a01b0319166001600160a01b03861690811790915590519092917f62e69886a5df0ba8ffcacbfc1388754e7abd9bde24b036354c561f1acd4e459391a350565b600061097a610b2533610f17565b3333600061186b565b600033610b3a8161195c565b610b4333611ac1565b600191505090565b600054610100900460ff1615808015610b6b5750600054600160ff909116105b80610b855750303b158015610b85575060005460ff166001145b610be85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161088f565b6000805460ff191660011790558015610c0b576000805461ff0019166101001790555b610c1482611c14565b60a180546001600160a01b0319166001600160a01b038516908117909155604080516306fdde0360e01b81529051610d4292916306fdde039160048083019260009291908290030181865afa158015610c71573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c999190810190612af8565b604051602001610ca99190612b9a565b604051602081830303815290604052846001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610cf6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d1e9190810190612af8565b604051602001610d2e9190612bc9565b604051602081830303815290604052611c6f565b816001600160a01b0316836001600160a01b03167fdc90fed0326ba91706deeac7eb34ac9f8b680734f9d782864dc29704d23bed6a60405160405180910390a38015610a75576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a1505050565b600081600003610e055760405162461bcd60e51b815260206004820152600360248201526203d3d360ec1b604482015260640161088f565b610e317f0000000000000000000000000000000000000000000000000000000000000000333085611ca4565b60405182815233907f1c88aa9a39b1a6357a85c97a3bd4e2b0738e74c68b92928276bc85f495b2450b9060200160405180910390a2606a54610e739083612a4e565b91506066544210610e9357610e8782611cdc565b50506000606a55600190565b6000606554606654610ea59190612bf4565b610eaf9042612bf4565b9050600060675482610ec19190612c0b565b905083600a610ed183600c612c0b565b610edb9190612c2a565b1015610ef457610eea84611cdc565b6000606a55610efa565b606a8490555b5060019392505050565b6000610f108383611dd2565b5090919050565b6001600160a01b03166000908152606f602052604090205490565b610f3a611394565b610f446000611e8e565b565b600061097a42606654611ee0565b60606073805461098e90612a7f565b60003381610f718286611185565b905083811015610fd15760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161088f565b610a9382868684036114a3565b6000610a25610fec33610f17565b33338561186b565b600033610a1f8185856116af565b6000611011848484600061186b565b949350505050565b60006110258233611dd2565b5090565b6000611011848484600161186b565b6000816110448161195c565b61104d83611ac1565b600191505b50919050565b6000610a2582611eef565b600061097a611f03565b6000610a2582610f17565b60006110868585858561186b565b95945050505050565b60a1546040516370a0823160e01b81523360048201526000918291611179916001600160a01b0316906370a0823190602401602060405180830381865afa1580156110de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111029190612a66565b60a154604051636eb1769f60e11b81523360048201523060248201526001600160a01b039091169063dd62ed3e90604401602060405180830381865afa158015611150573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111749190612a66565b611ee0565b905061096a8133611dd2565b6001600160a01b03918216600090815260706020908152604080832093909416825291909152205490565b6111b8611394565b6001600160a01b03811661121d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161088f565b61122681611e8e565b50565b611231611394565b600061123c8161195c565b816000036112985760405162461bcd60e51b8152602060048201526024808201527f6475726174696f6e2073686f756c642062652067726561746572207468616e206044820152637a65726f60e01b606482015260840161088f565b6066544210156112e3576000426066546112b29190612bf4565b90506000606754826112c49190612c0b565b90506112d08482612c2a565b6067556112dd8442612a4e565b60665550505b60658290556067546066546040805185815260208101939093528201527f82cec86ca93cde0f1fd0129402cc13d8f7b7f5154320025ab47357562ba02528906060015b60405180910390a15050565b6001600160a01b0381166000908152606d6020526040812054670de0b6b3a76400009061135d611f03565b6113679190612bf4565b6001600160a01b038416600090815260a2602052604090205461138a9190612c0b565b610a259190612c2a565b6033546001600160a01b03163314610f445760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161088f565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161480610a2557505060a1546001600160a01b0390811691161490565b6040516001600160a01b038316602482015260448101829052610a7590849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611f6f565b6001600160a01b0383166115055760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161088f565b6001600160a01b0382166115665760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161088f565b6001600160a01b0383811660008181526070602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b806115d18161195c565b60006115dc83610f17565b905060006115ea8483612041565b6001600160a01b038516600081815260a2602090815260409182902084905581519283528201839052919250600080516020612ddf833981519152910160405180910390a150505050565b60006116418484611185565b905060001981146116a9578181101561169c5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161088f565b6116a984848484036114a3565b50505050565b6001600160a01b0383166117135760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161088f565b6001600160a01b0382166117755760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161088f565b6117808383836121bd565b6001600160a01b0383166000908152606f6020526040902054818110156117f85760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161088f565b6001600160a01b038085166000818152606f602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906118589086815260200190565b60405180910390a36116a98484846121ed565b6000846000036118bd5760405162461bcd60e51b815260206004820152601e60248201527f526577617264506f6f6c203a2043616e6e6f7420776974686472617720300000604482015260640161088f565b336001600160a01b038416146118d8576118d8833387611635565b6118e283866122a1565b81156118f1576118f183611ac1565b60a154611908906001600160a01b03168587611440565b60408051868152602081018790526001600160a01b03808616929087169133917ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db910160405180910390a450929392505050565b611964611f03565b60695561196f610f46565b6068556001600160a01b03811615611226576001600160a01b038116600090815260a2602052604090205415611a485760006119aa82611332565b905060006119b7836123e8565b6001600160a01b0384166000908152606e60205260408120805492935084929091906119e4908490612a4e565b90915550600090506119f68383612bf4565b9050611a0181612430565b836001600160a01b03167ffdcc759119f4a689ba608afdccb078153573a5a615700713ebb84704609694cc82604051611a3c91815260200190565b60405180910390a25050505b6069546001600160a01b0382166000818152606d60208181526040808420869055606854606e83529381902054928252805186815291820193909352918201526060810192909252907ffbe590c835e1c07f8e971c36021d1be46f43f7b0b6dc5413dbd5753590569d589060800160405180910390a250565b6000611acc82611eef565b6001600160a01b038316600081815260a2602090815260409182902084905581519283528201839052919250600080516020612ddf833981519152910160405180910390a16001600160a01b0382166000908152606e60205260409020548015610a75576001600160a01b038084166000908152606e6020908152604080832083905560a3909152902054168015611b9757611b926001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168284611440565b611bcb565b611bcb6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168584611440565b836001600160a01b03167fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e048683604051611c0691815260200190565b60405180910390a250505050565b6001600160a01b038116611c5f5760405162461bcd60e51b81526020600482015260126024820152715f6f776e657220307830206164647265737360701b604482015260640161088f565b6212750060655561122681611e8e565b600054610100900460ff16611c965760405162461bcd60e51b815260040161088f90612c4c565b611ca0828261256f565b5050565b6040516001600160a01b03808516602483015283166044820152606481018290526116a99085906323b872dd60e01b9060840161146c565b6000611ce78161195c565b81606c54611cf59190612a4e565b606c556066544210611d1657606554611d0e9083612c2a565b606755611d5a565b600042606654611d269190612bf4565b9050600060675482611d389190612c0b565b9050611d448185612a4e565b935060655484611d549190612c2a565b60675550505b606b829055426068819055606554611d7191612a4e565b6066819055606b54606854606754606c5460408051948552602085019390935291830193909352606082019290925260808101919091527f944ffd3678415a15cbfef07dd7d9f20cdc6f36d12588a4ba7e8eb440f32c61be9060a001611326565b81600003611e225760405162461bcd60e51b815260206004820152601d60248201527f526577617264506f6f6c203a2043616e6e6f74206465706f7369742030000000604482015260640161088f565b60a154611e3a906001600160a01b0316333085611ca4565b611e4481836125af565b60408051838152602081018490526001600160a01b0383169133917fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7910160405180910390a35050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000818310610f105750919050565b6000610a2582611efe84610f17565b612041565b6000611f0d61096f565b600003611f1b575060695490565b611f2361096f565b670de0b6b3a7640000606754606854611f3a610f46565b611f449190612bf4565b611f4e9190612c0b565b611f589190612c0b565b611f629190612c2a565b60695461097a9190612a4e565b6000611fc4826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166126849092919063ffffffff16565b805190915015610a755780806020019051810190611fe29190612c97565b610a755760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161088f565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c69190612a66565b9050806000036120d95782915050610a25565b611011600a6120e9600182612bf4565b6040516370a0823160e01b81526001600160a01b03888116600483015285917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015612153573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121779190612a66565b6071546121849190612c0b565b61218e9190612c2a565b6121989190612c0b565b6121a3600187612c0b565b6121ad9190612a4e565b6121b79190612c2a565b84611ee0565b6001600160a01b038316156121d5576121d58361195c565b6001600160a01b03821615610a7557610a758261195c565b6001600160a01b038316156122495761220583611eef565b6001600160a01b038416600081815260a260209081526040918290208490558151928352820192909252600080516020612ddf833981519152910160405180910390a15b6001600160a01b03821615610a755761226182611eef565b6001600160a01b038316600081815260a260209081526040918290208490558151928352820192909252600080516020612ddf8339815191529101610dc0565b6001600160a01b0382166123015760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161088f565b61230d826000836121bd565b6001600160a01b0382166000908152606f6020526040902054818110156123815760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161088f565b6001600160a01b0383166000818152606f602090815260408083208686039055607180548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610a75836000846121ed565b6001600160a01b0381166000908152606d6020526040812054670de0b6b3a764000090612413611f03565b61241d9190612bf4565b61242684610f17565b61138a9190612c0b565b60405163095ea7b360e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303816000875af11580156124bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124e39190612c97565b50604051630852cd8d60e31b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906342966c68906024016020604051808303816000875af115801561254b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ca09190612c97565b600054610100900460ff166125965760405162461bcd60e51b815260040161088f90612c4c565b60726125a28382612d02565b506073610a758282612d02565b6001600160a01b0382166126055760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161088f565b612611600083836121bd565b80607160008282546126239190612a4e565b90915550506001600160a01b0382166000818152606f60209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611ca0600083836121ed565b6060611011848460008585600080866001600160a01b031685876040516126ab9190612dc2565b60006040518083038185875af1925050503d80600081146126e8576040519150601f19603f3d011682016040523d82523d6000602084013e6126ed565b606091505b50915091506126fe87838387612709565b979650505050505050565b60608315612778578251600003612771576001600160a01b0385163b6127715760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161088f565b5081611011565b611011838381511561278d5781518083602001fd5b8060405162461bcd60e51b815260040161088f9190612805565b80356001600160a01b038116811461096a57600080fd5b6000602082840312156127d057600080fd5b61083a826127a7565b60005b838110156127f45781810151838201526020016127dc565b838111156116a95750506000910152565b60208152600082518060208401526128248160408501602087016127d9565b601f01601f19169190910160400192915050565b60006020828403121561284a57600080fd5b5035919050565b6000806040838503121561286457600080fd5b61286d836127a7565b946020939093013593505050565b6000806020838503121561288e57600080fd5b823567ffffffffffffffff808211156128a657600080fd5b818501915085601f8301126128ba57600080fd5b8135818111156128c957600080fd5b8660208260051b85010111156128de57600080fd5b60209290920196919550909350505050565b60008060006060848603121561290557600080fd5b61290e846127a7565b925061291c602085016127a7565b9150604084013590509250925092565b6000806040838503121561293f57600080fd5b612948836127a7565b9150612956602084016127a7565b90509250929050565b6000806040838503121561297257600080fd5b82359150612956602084016127a7565b801515811461122657600080fd5b6000602082840312156129a257600080fd5b813561083a81612982565b6000806000606084860312156129c257600080fd5b833592506129d2602085016127a7565b91506129e0604085016127a7565b90509250925092565b600080600080608085870312156129ff57600080fd5b84359350612a0f602086016127a7565b9250612a1d604086016127a7565b91506060850135612a2d81612982565b939692955090935050565b634e487b7160e01b600052601160045260246000fd5b60008219821115612a6157612a61612a38565b500190565b600060208284031215612a7857600080fd5b5051919050565b600181811c90821680612a9357607f821691505b60208210810361105257634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060018201612adb57612adb612a38565b5060010190565b634e487b7160e01b600052604160045260246000fd5b600060208284031215612b0a57600080fd5b815167ffffffffffffffff80821115612b2257600080fd5b818401915084601f830112612b3657600080fd5b815181811115612b4857612b48612ae2565b604051601f8201601f19908116603f01168101908382118183101715612b7057612b70612ae2565b81604052828152876020848701011115612b8957600080fd5b6126fe8360208301602088016127d9565b6603ca3b0bab3b2960cd1b815260008251612bbc8160078501602087016127d9565b9190910160070192915050565b6279472d60e81b815260008251612be78160038501602087016127d9565b9190910160030192915050565b600082821015612c0657612c06612a38565b500390565b6000816000190483118215151615612c2557612c25612a38565b500290565b600082612c4757634e487b7160e01b600052601260045260246000fd5b500490565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b600060208284031215612ca957600080fd5b815161083a81612982565b601f821115610a7557600081815260208120601f850160051c81016020861015612cdb5750805b601f850160051c820191505b81811015612cfa57828155600101612ce7565b505050505050565b815167ffffffffffffffff811115612d1c57612d1c612ae2565b612d3081612d2a8454612a7f565b84612cb4565b602080601f831160018114612d655760008415612d4d5750858301515b600019600386901b1c1916600185901b178555612cfa565b600085815260208120601f198616915b82811015612d9457888601518255948401946001909101908401612d75565b5085821015612db25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008251612dd48184602087016127d9565b919091019291505056fe291ff844d30f85bb011aca3bfccedead238b6ed2e4b283504e3c2231d134524ba264697066735822122032e0165e4cc8048724e5817e5a3c9c0c4436391eaf2f61a33d58ad60b404644064736f6c634300080f003300000000000000000000000090c1f9220d90d3966fbee24045edd73e1d588ad500000000000000000000000041252e8691e964f7de35156b68493bab6797a2750000000000000000000000002391fc8f5e417526338f5aa3968b1851c16d894e