[ { "inputs": [ { "internalType": "contract IERC20", "name": "_asset", "type": "address" }, { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "symbol", "type": "string" }, { "components": [ { "internalType": "address[]", "name": "recipients", "type": "address[]" }, { "internalType": "uint256[]", "name": "recipientWeights", "type": "uint256[]" }, { "internalType": "uint256", "name": "harvesterWeight", "type": "uint256" } ], "internalType": "struct Vault.RecipientInfo", "name": "recipientInfo", "type": "tuple" }, { "internalType": "address", "name": "keeper", "type": "address" }, { "internalType": "contract IDataProvider", "name": "_dataProvider", "type": "address" }, { "internalType": "contract ILendingPool", "name": "_lendingPool", "type": "address" }, { "internalType": "contract IRewardsController", "name": "_rewardsController", "type": "address" }, { "internalType": "contract IRouter", "name": "_router", "type": "address" }, { "internalType": "contract IERC20", "name": "_native", "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": 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": true, "internalType": "address", "name": "caller", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "harvestAssets", "type": "uint256" } ], "name": "Harvest", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Paused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } ], "name": "RoleAdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleGranted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleRevoked", "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": "account", "type": "address" } ], "name": "Unpaused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "int256", "name": "ratePerSec", "type": "int256" }, { "indexed": false, "internalType": "uint256", "name": "totalAssets", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalSupply", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "timestamp", "type": "uint256" } ], "name": "UpdateHistoryInfo", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "rate", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalAssets", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalSupply", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "timestamp", "type": "uint256" } ], "name": "UpdateRate", "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": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "KEEPER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MAX_RECIPIENT_WEIGHT", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MIN_UPDATE_RATES_PERIOD", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "RATE_PRECISION", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "aToken", "outputs": [ { "internalType": "contract IERC20", "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": "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": "dataProvider", "outputs": [ { "internalType": "contract IDataProvider", "name": "", "type": "address" } ], "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": [], "name": "emergencyWithdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "uint256", "name": "_value", "type": "uint256" }, { "internalType": "bytes", "name": "_data", "type": "bytes" } ], "name": "execute", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" }, { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "startTimestamp", "type": "uint256" } ], "name": "getHistoryInfo", "outputs": [ { "components": [ { "internalType": "int256", "name": "ratePerSec", "type": "int256" }, { "internalType": "uint256", "name": "totalAssets", "type": "uint256" }, { "internalType": "uint256", "name": "totalSupply", "type": "uint256" }, { "internalType": "uint256", "name": "timestamp", "type": "uint256" } ], "internalType": "struct Vault.Info[]", "name": "", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "caller", "type": "address" } ], "name": "harvest", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "harvest", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "historyInfo", "outputs": [ { "internalType": "int256", "name": "ratePerSec", "type": "int256" }, { "internalType": "uint256", "name": "totalAssets", "type": "uint256" }, { "internalType": "uint256", "name": "totalSupply", "type": "uint256" }, { "internalType": "uint256", "name": "timestamp", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "historyInfoLength", "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": [], "name": "lendingPool", "outputs": [ { "internalType": "contract ILendingPool", "name": "", "type": "address" } ], "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": "receiver", "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": [], "name": "native", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "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": "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": "shares", "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": [], "name": "ratePerSec", "outputs": [ { "internalType": "int256", "name": "", "type": "int256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "rates", "outputs": [ { "internalType": "uint256", "name": "rate", "type": "uint256" }, { "internalType": "uint256", "name": "timestamp", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "ratesLength", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "recipientInfo", "outputs": [ { "internalType": "uint256", "name": "harvesterWeight", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "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": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "rewardsController", "outputs": [ { "internalType": "contract IRewardsController", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "router", "outputs": [ { "internalType": "contract IRouter", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "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": "totalEarnings", "outputs": [ { "internalType": "int256", "name": "", "type": "int256" } ], "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": [], "name": "unpause", "outputs": [], "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" } ]
60a06040526000600a553480156200001657600080fd5b5060405162004e8138038062004e8183398101604081905262000039916200082f565b8989898989838360036200004e8382620009d5565b5060046200005d8282620009d5565b50506001600555506007805460ff1916905560208201515182515114620000ba5760405162461bcd60e51b815260206004820152600c60248201526b3632b733ba341032b93937b960a11b60448201526064015b60405180910390fd5b6127108260400151620000dc84602001516200035960201b62001dcf1760201c565b620000e8919062000ab7565b1115620001285760405162461bcd60e51b815260206004820152600d60248201526c3bb2b4b3b43a399032b93937b960991b6044820152606401620000b1565b6001600160a01b038516608052815180518391600b9162000151918391602090910190620004c3565b5060208281015180516200016c92600185019201906200052d565b506040918201516002919091015584516020808701919091208251808401845260018152603160f81b9083015282517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f92810192909252918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160408051601f198184030181529190528051602090910120600e5562000227600033620003b1565b6200024360008051602062004e618339815191526000620003c1565b6200025e60008051602062004e6183398151915282620003b1565b5050601380546001600160a01b038981166001600160a01b031992831617909255601280548b84169083168117909155601480548a85169316929092179091556080516040516334924edb60e21b81529216600483015260009450925063d2493b6c9150602401606060405180830381865afa158015620002e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000309919062000acd565b5050601180546001600160a01b03199081166001600160a01b0393841617909155601080548216948316949094179093556015805490931693169290921790555062000b53975050505050505050565b805160009081805b82811015620003a9578481815181106200037f576200037f62000b21565b60200260200101518262000394919062000ab7565b9150620003a18162000b37565b905062000361565b509392505050565b620003bd82826200040c565b5050565b600082815260066020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b62000418828262000496565b620003bd5760008281526006602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620004523390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526006602090815260408083206001600160a01b038516845290915290205460ff165b92915050565b8280548282559060005260206000209081019282156200051b579160200282015b828111156200051b57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190620004e4565b50620005299291506200056b565b5090565b8280548282559060005260206000209081019282156200051b579160200282015b828111156200051b5782518255916020019190600101906200054e565b5b808211156200052957600081556001016200056c565b6001600160a01b03811681146200059857600080fd5b50565b8051620005a88162000582565b919050565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715620005e857620005e8620005ad565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620006195762000619620005ad565b604052919050565b600082601f8301126200063357600080fd5b81516001600160401b038111156200064f576200064f620005ad565b602062000665601f8301601f19168201620005ee565b82815285828487010111156200067a57600080fd5b60005b838110156200069a5785810183015182820184015282016200067d565b506000928101909101919091529392505050565b60006001600160401b03821115620006ca57620006ca620005ad565b5060051b60200190565b600082601f830112620006e657600080fd5b81516020620006ff620006f983620006ae565b620005ee565b82815260059290921b840181019181810190868411156200071f57600080fd5b8286015b848110156200073c578051835291830191830162000723565b509695505050505050565b6000606082840312156200075a57600080fd5b62000764620005c3565b82519091506001600160401b03808211156200077f57600080fd5b818401915084601f8301126200079457600080fd5b81516020620007a7620006f983620006ae565b82815260059290921b84018101918181019088841115620007c757600080fd5b948201945b83861015620007f2578551620007e28162000582565b82529482019490820190620007cc565b865250858101519350828411156200080957600080fd5b6200081787858801620006d4565b81860152505050506040820151604082015292915050565b6000806000806000806000806000806101408b8d0312156200085057600080fd5b6200085b8b6200059b565b60208c0151909a506001600160401b03808211156200087957600080fd5b620008878e838f0162000621565b9a5060408d01519150808211156200089e57600080fd5b620008ac8e838f0162000621565b995060608d0151915080821115620008c357600080fd5b50620008d28d828e0162000747565b975050620008e360808c016200059b565b9550620008f360a08c016200059b565b94506200090360c08c016200059b565b93506200091360e08c016200059b565b9250620009246101008c016200059b565b9150620009356101208c016200059b565b90509295989b9194979a5092959850565b600181811c908216806200095b57607f821691505b6020821081036200097c57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620009d057600081815260208120601f850160051c81016020861015620009ab5750805b601f850160051c820191505b81811015620009cc57828155600101620009b7565b5050505b505050565b81516001600160401b03811115620009f157620009f1620005ad565b62000a098162000a02845462000946565b8462000982565b602080601f83116001811462000a41576000841562000a285750858301515b600019600386901b1c1916600185901b178555620009cc565b600085815260208120601f198616915b8281101562000a725788860151825594840194600190910190840162000a51565b508582101562000a915787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b80820180821115620004bd57620004bd62000aa1565b60008060006060848603121562000ae357600080fd5b835162000af08162000582565b602085015190935062000b038162000582565b604085015190925062000b168162000582565b809150509250925092565b634e487b7160e01b600052603260045260246000fd5b60006001820162000b4c5762000b4c62000aa1565b5060010190565b60805161426d62000bf46000396000818161054e0152818161086d015281816108f201528181610b3301528181610ebb015281816110ee01528181611324015281816115e3015281816120d20152818161214601528181612869015281816128f50152818161293801528181612c8401528181612d2701528181612e0501528181612ff5015281816130c1015281816131a001526132a4015261426d6000f3fe608060405234801561001057600080fd5b50600436106103ba5760003560e01c80637ecebe00116101f4578063b61d27f61161011a578063d905777e116100ad578063ebc936691161007c578063ebc9366914610810578063ef8b30f714610438578063f426dc0914610818578063f887ea401461083857600080fd5b8063d905777e146107ba578063db2e21bc146107cd578063dd418ae2146107d5578063dd62ed3e146107fd57600080fd5b8063c6e6f592116100e9578063c6e6f5921461076e578063ce96cb7714610781578063d505accf14610794578063d547741f146107a757600080fd5b8063b61d27f614610732578063b7b0f86314610753578063ba0876521461075b578063c63d75b61461059357600080fd5b8063a0c1f15e11610192578063a9059cbb11610161578063a9059cbb146106f9578063b334ed861461070c578063b3d7f6b9146105b0578063b460af941461071f57600080fd5b8063a0c1f15e146106b8578063a217fddf146106cb578063a457c2d7146106d3578063a59a9973146106e657600080fd5b80638fa6a2ff116101ce5780638fa6a2ff1461065757806391d148541461068a57806394bf804d1461069d57806395d89b41146106b057600080fd5b80637ecebe00146106265780638456cb59146106465780638f326ae11461064e57600080fd5b8063313ce567116102e4578063402d267d116102775780636bb65f53116102465780636bb65f53146105ce5780636e553f65146105e157806370a08231146105f45780637e7a3e371461061d57600080fd5b8063402d267d146105935780634641257d146105a85780634cdad506146105b05780635c975abb146105c357600080fd5b806338d52e0f116102b357806338d52e0f1461054957806339509351146105705780633b486a25146105835780633f4ba83a1461058b57600080fd5b8063313ce567146104fe5780633644e51514610518578063364bc15a1461052157806336568abe1461053657600080fd5b806311b0b42d1161035c5780632b3ba6811161032b5780632b3ba681146104c75780632c0d9d87146104d65780632df3eba4146104e05780632f2ff15d146104e957600080fd5b806311b0b42d1461045e57806318160ddd1461048957806323b872dd14610491578063248a9ca3146104a457600080fd5b806307a2d13a1161039857806307a2d13a14610412578063095ea7b3146104255780630a28a477146104385780630e5c011e1461044b57600080fd5b806301e1d114146103bf57806301ffc9a7146103da57806306fdde03146103fd575b600080fd5b6103c761084b565b6040519081526020015b60405180910390f35b6103ed6103e83660046138e7565b610990565b60405190151581526020016103d1565b6104056109c7565b6040516103d19190613961565b6103c7610420366004613974565b610a59565b6103ed6104333660046139a2565b610a9a565b6103c7610446366004613974565b610ab2565b6103c76104593660046139ce565b610abd565b601054610471906001600160a01b031681565b6040516001600160a01b0390911681526020016103d1565b6002546103c7565b6103ed61049f3660046139eb565b610ae1565b6103c76104b2366004613974565b60009081526006602052604090206001015490565b6103c7670de0b6b3a764000081565b600d546103c79081565b6103c7600a5481565b6104fc6104f7366004613a2c565b610b05565b005b610506610b2f565b60405160ff90911681526020016103d1565b6103c7600e5481565b6103c760008051602061421883398151915281565b6104fc610544366004613a2c565b610bb8565b6104717f000000000000000000000000000000000000000000000000000000000000000081565b6103ed61057e3660046139a2565b610c3b565b6103c7610c5d565b6104fc610d5e565b6103c76105a13660046139ce565b5060001990565b6103c7610dad565b6103c76105be366004613974565b610dcf565b60075460ff166103ed565b601454610471906001600160a01b031681565b6103c76105ef366004613a2c565b610dda565b6103c76106023660046139ce565b6001600160a01b031660009081526020819052604090205490565b6103c761271081565b6103c76106343660046139ce565b600f6020526000908152604090205481565b6104fc610f99565b6103c761070881565b61066a610665366004613974565b610fe6565b6040805194855260208501939093529183015260608201526080016103d1565b6103ed610698366004613a2c565b611020565b6103c76106ab366004613a2c565b61104b565b6104056111cd565b601154610471906001600160a01b031681565b6103c7600081565b6103ed6106e13660046139a2565b6111dc565b601354610471906001600160a01b031681565b6103ed6107073660046139a2565b611257565b601254610471906001600160a01b031681565b6103c761072d366004613a5c565b611265565b610745610740366004613a9e565b61142e565b6040516103d1929190613b27565b6009546103c7565b6103c7610769366004613a5c565b6114e6565b6103c761077c366004613974565b6116dc565b6103c761078f3660046139ce565b61170b565b6104fc6107a2366004613b51565b61172d565b6104fc6107b5366004613a2c565b611939565b6103c76107c83660046139ce565b61195e565b6104fc61196c565b6107e86107e3366004613974565b6119d2565b604080519283526020830191909152016103d1565b6103c761080b366004613bc2565b611a00565b6008546103c7565b61082b610826366004613974565b611a2b565b6040516103d19190613bf0565b601554610471906001600160a01b031681565b6040516370a0823160e01b815230600482015260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa1580156108b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d89190613c54565b6012546040516328dd2d0160e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152306024830152929350600092909116906328dd2d019060440161012060405180830381865afa15801561094f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109739190613c7d565b5050505050505050905080826109899190613d16565b9250505090565b60006001600160e01b03198216637965db0b60e01b14806109c157506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600380546109d690613d29565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0290613d29565b8015610a4f5780601f10610a2457610100808354040283529160200191610a4f565b820191906000526020600020905b815481529060010190602001808311610a3257829003601f168201915b5050505050905090565b600080610a6560025490565b905080600003610a76575090919050565b80610a7f61084b565b610a899085613d63565b610a939190613d90565b9392505050565b600033610aa8818585611e1e565b5060019392505050565b60006109c1826116dc565b6000610ac7611f42565b610ad082611f9b565b9050610adc6001600555565b919050565b600033610aef8582856122ce565b610afa858585612348565b506001949350505050565b600082815260066020526040902060010154610b20816124ec565b610b2a83836124f6565b505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb39190613da4565b905090565b6001600160a01b0381163314610c2d5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b610c37828261257c565b5050565b600033610aa8818585610c4e8383611a00565b610c589190613d16565b611e1e565b600080610c6960085490565b90506002811015610c7c57600091505090565b60006008610c8b600184613dc1565b81548110610c9b57610c9b613dd4565b906000526020600020906002020160405180604001604052908160008201548152602001600182015481525050905060006008600284610cdb9190613dc1565b81548110610ceb57610ceb613dd4565b60009182526020918290206040805180820190915260029092020180548252600101548183018190529184015190925003610d2a576000935050505090565b80602001518260200151610d3e9190613dc1565b81518351610d4c9190613dea565b610d569190613e11565b935050505090565b610d69600033611020565b80610d875750610d8760008051602061421883398151915233611020565b610da35760405162461bcd60e51b8152600401610c2490613e3f565b610dab6125e3565b565b6000610db7611f42565b610dc033611f9b565b9050610dcc6001600555565b90565b60006109c182610a59565b6000610de4611f42565b610dec612635565b6000610df784610ab2565b905060008111610e375760405162461bcd60e51b815260206004820152600b60248201526a5a45524f5f53484152455360a81b6044820152606401610c24565b610e3f61267b565b6000610e4a60025490565b600003610e55575060015b6000805160206141f8833981519152610e75670de0b6b3a7640000610a59565b610e7d61084b565b6002546040805193845260208401929092529082015242606082015260800160405180910390a1610eae8483612727565b610ee36001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163330886127e6565b610eed8486612851565b8015610f3e5760086040518060400160405280610f11670de0b6b3a7640000610a59565b81524260209182015282546001818101855560009485529382902083516002909202019081559101519101555b610f466129b6565b60408051868152602081018490526001600160a01b0386169133917fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7910160405180910390a35090506109c16001600555565b610fa4600033611020565b80610fc25750610fc260008051602061421883398151915233611020565b610fde5760405162461bcd60e51b8152600401610c2490613e3f565b610dab612afd565b60098181548110610ff657600080fd5b60009182526020909120600490910201805460018201546002830154600390930154919350919084565b60009182526006602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6000611055611f42565b61105d612635565b600061106884610dcf565b905061107261267b565b600061107d60025490565b600003611088575060015b6000805160206141f88339815191526110a8670de0b6b3a7640000610a59565b6110b061084b565b6002546040805193845260208401929092529082015242606082015260800160405180910390a16110e18486612727565b6111166001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163330856127e6565b6111208483612851565b80156111715760086040518060400160405280611144670de0b6b3a7640000610a59565b81524260209182015282546001818101855560009485529382902083516002909202019081559101519101555b6111796129b6565b60408051838152602081018790526001600160a01b0386169133917fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7910160405180910390a35050600160055550816109c1565b6060600480546109d690613d29565b600033816111ea8286611a00565b90508381101561124a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c24565b610afa8286868403611e1e565b600033610aa8818585612348565b600061126f611f42565b600061127a85610ab2565b9050336001600160a01b03841614611297576112978333836122ce565b61129f61267b565b60006112b2670de0b6b3a7640000610a59565b90506000805160206141f88339815191526112d4670de0b6b3a7640000610a59565b6112dc61084b565b6002546040805193845260208401929092529082015242606082015260800160405180910390a161130d8483612b3a565b6113178487612c6c565b61134b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168688612db3565b6002546000036113cd576040805180820190915281815242602082019081526008805460018101825560009190915291517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3600290930292830155517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee4909101555b6113d56129b6565b60408051878152602081018490526001600160a01b03808716929088169133917ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db91015b60405180910390a4509050610a936001600555565b6000606061143c8233611020565b8061145a575061145a60008051602061421883398151915233611020565b6114765760405162461bcd60e51b8152600401610c2490613e3f565b600080876001600160a01b0316878787604051611494929190613e6b565b60006040518083038185875af1925050503d80600081146114d1576040519150601f19603f3d011682016040523d82523d6000602084013e6114d6565b606091505b5090999098509650505050505050565b60006114f0611f42565b336001600160a01b0383161461150b5761150b8233866122ce565b600061151685610dcf565b9050600081116115565760405162461bcd60e51b815260206004820152600b60248201526a5a45524f5f41535345545360a81b6044820152606401610c24565b61155e61267b565b6000611571670de0b6b3a7640000610a59565b90506000805160206141f8833981519152611593670de0b6b3a7640000610a59565b61159b61084b565b6002546040805193845260208401929092529082015242606082015260800160405180910390a16115cc8487612b3a565b6115d68483612c6c565b61160a6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168684612db3565b60025460000361168c576040805180820190915281815242602082019081526008805460018101825560009190915291517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3600290930292830155517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee4909101555b6116946129b6565b60408051838152602081018890526001600160a01b03808716929088169133917ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db9101611419565b6000806116e860025490565b9050806000036116f9575090919050565b61170161084b565b610a898285613d63565b6001600160a01b0381166000908152602081905260408120546109c190610a59565b834211156117705760405162461bcd60e51b815260206004820152601060248201526f6578706972656420646561646c696e6560801b6044820152606401610c24565b600e546001600160a01b038881166000818152600f602090815260408083205481517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98185015280830195909552948c166060850152608084018b905260a084019490945260c08084018a90528451808503909101815260e08401909452835193019290922061190160f01b610100830152610102820193909352610122810192909252906101420160408051601f198184030181528282528051602091820120600080855291840180845281905260ff88169284019290925260608301869052608083018590529092509060019060a0016020604051602081039080840390855afa158015611884573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906118ba5750886001600160a01b0316816001600160a01b0316145b6118fa5760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964207369676e617475726560781b6044820152606401610c24565b6001600160a01b0389166000908152600f6020526040812080549161191e83613e7b565b919050555061192e898989611e1e565b505050505050505050565b600082815260066020526040902060010154611954816124ec565b610b2a838361257c565b60006109c161077c8361170b565b611977600033611020565b80611995575061199560008051602061421883398151915233611020565b6119b15760405162461bcd60e51b8152600401610c2490613e3f565b6119b9612afd565b60006119c361084b565b90506119cf3082612c6c565b50565b600881815481106119e257600080fd5b60009182526020909120600290910201805460019091015490915082565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b604080516002808252606082810190935260009190816020015b611a706040518060800160405280600081526020016000815260200160008152602001600081525090565b815260200190600190039081611a455750506009549091506000906002811015611af2576040805160008082526020820190925290611ae8565b611ad56040518060800160405280600081526020016000815260200160008152602001600081525090565b815260200190600190039081611aaa5790505b5095945050505050565b6000611aff600183613dc1565b90505b60008112611b55578560098281548110611b1e57611b1e613dd4565b90600052602060002090600402016003015410611b435782611b3f81613e7b565b9350505b80611b4d81613eaa565b915050611b02565b506002821015611c60576009611b6c600283613dc1565b81548110611b7c57611b7c613dd4565b906000526020600020906004020160405180608001604052908160008201548152602001600182015481526020016002820154815260200160038201548152505083600081518110611bd057611bd0613dd4565b60209081029190910101526009611be8600183613dc1565b81548110611bf857611bf8613dd4565b906000526020600020906004020160405180608001604052908160008201548152602001600182015481526020016002820154815260200160038201548152505083600181518110611c4c57611c4c613dd4565b602090810291909101015250909392505050565b8167ffffffffffffffff811115611c7957611c79613e94565b604051908082528060200260200182016040528015611cd557816020015b611cc26040518060800160405280600081526020016000815260200160008152602001600081525090565b815260200190600190039081611c975790505b5092506000611ce5600184613dc1565b90506000611cf4600184613dc1565b90505b60008112611dc4578660098281548110611d1357611d13613dd4565b90600052602060002090600402016003015410611daa5760098181548110611d3d57611d3d613dd4565b9060005260206000209060040201604051806080016040529081600082015481526020016001820154815260200160028201548152602001600382015481525050858381518110611d9057611d90613dd4565b60200260200101819052508180611da690613eaa565b9250505b60008212611dc45780611dbc81613eaa565b915050611cf7565b509295945050505050565b805160009081805b82811015611e1657848181518110611df157611df1613dd4565b602002602001015182611e049190613d16565b9150611e0f81613e7b565b9050611dd7565b509392505050565b6001600160a01b038316611e805760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c24565b6001600160a01b038216611ee15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c24565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600260055403611f945760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c24565b6002600555565b600080611fa6612de3565b90506000600b60000180548060200260200160405190810160405280929190818152602001828054801561200357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611fe5575b505050505090506000600b60010180548060200260200160405190810160405280929190818152602001828054801561205b57602002820191906000526020600020905b815481526020019060010190808311612047575b5050600d548651949550936000935091508290505b818110156121195761271085828151811061208d5761208d613dd4565b6020026020010151886120a09190613d63565b6120aa9190613d90565b92508215612109576121098682815181106120c7576120c7613dd4565b6020026020010151847f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316612db39092919063ffffffff16565b61211281613e7b565b9050612070565b506127106121278488613d63565b6121319190613d90565b9150811561216d5761216d6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168984612db3565b600061217860085490565b90506000811180156121c457506107086008612195600184613dc1565b815481106121a5576121a5613dd4565b906000526020600020906002020160010154426121c29190613dc1565b115b1561221457600860405180604001604052806121e7670de0b6b3a7640000610a59565b81524260209182015282546001818101855560009485529382902083516002909202019081559101519101555b61221c61267b565b6122246129b6565b61222f600080612851565b6000805160206141f883398151915261224f670de0b6b3a7640000610a59565b61225761084b565b6002546040805193845260208401929092529082015242606082015260800160405180910390a1886001600160a01b03167fc9695243a805adb74c91f28311176c65b417e842d5699893cef56d18bfa48cba886040516122b991815260200190565b60405180910390a25094979650505050505050565b60006122da8484611a00565b9050600019811461234257818110156123355760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610c24565b6123428484848403611e1e565b50505050565b6001600160a01b0383166123ac5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c24565b6001600160a01b03821661240e5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c24565b6001600160a01b038316600090815260208190526040902054818110156124865760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c24565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3612342565b6119cf8133613330565b6125008282611020565b610c375760008281526006602090815260408083206001600160a01b03851684529091529020805460ff191660011790556125383390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6125868282611020565b15610c375760008281526006602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6125eb613389565b6007805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60075460ff1615610dab5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610c24565b600061268660095490565b6009549091506000036126965750565b600060096126a5600184613dc1565b815481106126b5576126b5613dd4565b906000526020600020906004020160010154905060006126d361084b565b9050818110612702576126e68282613dc1565b600a60008282546126f79190613ec7565b90915550610b2a9050565b61270c8183613dc1565b600a600082825461271d9190613dea565b9091555050505050565b6001600160a01b03821661277d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610c24565b806002600082825461278f9190613d16565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6040516001600160a01b03808516602483015283166044820152606481018290526123429085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526133d2565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156128b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128dc9190613c54565b90508015610b2a5760135461291e906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169116836134a4565b60135460405163e8eda9df60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201849052306044830152600060648301529091169063e8eda9df90608401600060405180830381600087803b15801561299957600080fd5b505af11580156129ad573d6000803e3d6000fd5b50505050505050565b60006129c0610c5d565b905060006129cc61084b565b905060006129d960025490565b604080516080808201835286825260208083018781528385018681524260608087018281526009805460018101825560009190915297517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af60049099029889015593517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b088015591517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b187015591517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b290950194909455845189815291820188905293810185905291820183905292935090917f4c5712b7e28f248c7c50f6c3dfeaf187ed26c07fec9d38148672b39d2cfd6c87910160405180910390a150505050565b612b05612635565b6007805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586126183390565b6001600160a01b038216612b9a5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610c24565b6001600160a01b03821660009081526020819052604090205481811015612c0e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610c24565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015612cd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cf79190613c54565b905080821115610b2a576000612d0d8284613dc1565b601354604051631a4ca37b60e21b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018490523060448301529293509116906369328dec906064016020604051808303816000875af1158015612d88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dac9190613c54565b5050505050565b6040516001600160a01b038316602482015260448101829052610b2a90849063a9059cbb60e01b9060640161281a565b6040516370a0823160e01b815230600482015260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015612e4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e709190613c54565b6040805160018082528183019092529192506000919060208083019080368337505060115482519293506001600160a01b031691839150600090612eb657612eb6613dd4565b6001600160a01b039283166020918202929092010152601454604051635fc87b1d60e11b8152600092919091169063bf90f63a90612ef8908590600401613f33565b6000604051808303816000875af1158015612f17573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612f3f9190810190614006565b5080519091506000819003612f5957600094505050505090565b60005b8181101561328b576000838281518110612f7857612f78613dd4565b60209081029190910101516040516370a0823160e01b81523060048201529091506000906001600160a01b038316906370a0823190602401602060405180830381865afa158015612fcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ff19190613c54565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141580156130355750600081115b1561327657601554613054906001600160a01b038481169116836134a4565b6040805160028082526060820183526000926020830190803683375050601054919250506001600160a01b039081169084160361311857828160008151811061309f5761309f613dd4565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000000000000000000000000000000000000000000000816001815181106130f3576130f3613dd4565b60200260200101906001600160a01b031690816001600160a01b0316815250506131f3565b604080516003808252608082019092529060208201606080368337019050509050828160008151811061314d5761314d613dd4565b6001600160a01b03928316602091820292909201015260105482519116908290600190811061317e5761317e613dd4565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000000000000000000000000000000000000000000000816002815181106131d2576131d2613dd4565b60200260200101906001600160a01b031690816001600160a01b0316815250505b6015546040516338ed173960e01b81526001600160a01b03909116906338ed17399061322c9085906000908690309042906004016140cb565b6000604051808303816000875af115801561324b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526132739190810190614107565b50505b5050808061328390613e7b565b915050612f5c565b506040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156132f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133179190613c54565b905060006133258683613dc1565b979650505050505050565b61333a8282611020565b610c3757613347816135b9565b6133528360206135cb565b60405160200161336392919061413c565b60408051601f198184030181529082905262461bcd60e51b8252610c2491600401613961565b60075460ff16610dab5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610c24565b6000613427826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166137679092919063ffffffff16565b805190915015610b2a578080602001905181019061344591906141b1565b610b2a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610c24565b80158061351e5750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa1580156134f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061351c9190613c54565b155b6135895760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b6064820152608401610c24565b6040516001600160a01b038316602482015260448101829052610b2a90849063095ea7b360e01b9060640161281a565b60606109c16001600160a01b03831660145b606060006135da836002613d63565b6135e5906002613d16565b67ffffffffffffffff8111156135fd576135fd613e94565b6040519080825280601f01601f191660200182016040528015613627576020820181803683370190505b509050600360fc1b8160008151811061364257613642613dd4565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061367157613671613dd4565b60200101906001600160f81b031916908160001a9053506000613695846002613d63565b6136a0906001613d16565b90505b6001811115613718576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106136d4576136d4613dd4565b1a60f81b8282815181106136ea576136ea613dd4565b60200101906001600160f81b031916908160001a90535060049490941c93613711816141cc565b90506136a3565b508315610a935760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610c24565b6060613776848460008561377e565b949350505050565b6060824710156137df5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610c24565b600080866001600160a01b031685876040516137fb91906141db565b60006040518083038185875af1925050503d8060008114613838576040519150601f19603f3d011682016040523d82523d6000602084013e61383d565b606091505b509150915061332587838387606083156138b85782516000036138b1576001600160a01b0385163b6138b15760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610c24565b5081613776565b61377683838151156138cd5781518083602001fd5b8060405162461bcd60e51b8152600401610c249190613961565b6000602082840312156138f957600080fd5b81356001600160e01b031981168114610a9357600080fd5b60005b8381101561392c578181015183820152602001613914565b50506000910152565b6000815180845261394d816020860160208601613911565b601f01601f19169290920160200192915050565b602081526000610a936020830184613935565b60006020828403121561398657600080fd5b5035919050565b6001600160a01b03811681146119cf57600080fd5b600080604083850312156139b557600080fd5b82356139c08161398d565b946020939093013593505050565b6000602082840312156139e057600080fd5b8135610a938161398d565b600080600060608486031215613a0057600080fd5b8335613a0b8161398d565b92506020840135613a1b8161398d565b929592945050506040919091013590565b60008060408385031215613a3f57600080fd5b823591506020830135613a518161398d565b809150509250929050565b600080600060608486031215613a7157600080fd5b833592506020840135613a838161398d565b91506040840135613a938161398d565b809150509250925092565b60008060008060608587031215613ab457600080fd5b8435613abf8161398d565b935060208501359250604085013567ffffffffffffffff80821115613ae357600080fd5b818701915087601f830112613af757600080fd5b813581811115613b0657600080fd5b886020828501011115613b1857600080fd5b95989497505060200194505050565b82151581526040602082015260006137766040830184613935565b60ff811681146119cf57600080fd5b600080600080600080600060e0888a031215613b6c57600080fd5b8735613b778161398d565b96506020880135613b878161398d565b955060408801359450606088013593506080880135613ba581613b42565b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215613bd557600080fd5b8235613be08161398d565b91506020830135613a518161398d565b602080825282518282018190526000919060409081850190868401855b82811015613c4757815180518552868101518786015285810151868601526060908101519085015260809093019290850190600101613c0d565b5091979650505050505050565b600060208284031215613c6657600080fd5b5051919050565b80518015158114610adc57600080fd5b60008060008060008060008060006101208a8c031215613c9c57600080fd5b8951985060208a0151975060408a0151965060608a0151955060808a0151945060a08a0151935060c08a0151925060e08a015164ffffffffff81168114613ce257600080fd5b9150613cf16101008b01613c6d565b90509295985092959850929598565b634e487b7160e01b600052601160045260246000fd5b808201808211156109c1576109c1613d00565b600181811c90821680613d3d57607f821691505b602082108103613d5d57634e487b7160e01b600052602260045260246000fd5b50919050565b80820281158282048414176109c1576109c1613d00565b634e487b7160e01b600052601260045260246000fd5b600082613d9f57613d9f613d7a565b500490565b600060208284031215613db657600080fd5b8151610a9381613b42565b818103818111156109c1576109c1613d00565b634e487b7160e01b600052603260045260246000fd5b8181036000831280158383131683831282161715613e0a57613e0a613d00565b5092915050565b600082613e2057613e20613d7a565b600160ff1b821460001984141615613e3a57613e3a613d00565b500590565b60208082526012908201527114195c9b5a5cdcda5bdb9cc819195b9a595960721b604082015260600190565b8183823760009101908152919050565b600060018201613e8d57613e8d613d00565b5060010190565b634e487b7160e01b600052604160045260246000fd5b6000600160ff1b8201613ebf57613ebf613d00565b506000190190565b8082018281126000831280158216821582161715613ee757613ee7613d00565b505092915050565b600081518084526020808501945080840160005b83811015613f285781516001600160a01b031687529582019590820190600101613f03565b509495945050505050565b602081526000610a936020830184613eef565b604051601f8201601f1916810167ffffffffffffffff81118282101715613f6f57613f6f613e94565b604052919050565b600067ffffffffffffffff821115613f9157613f91613e94565b5060051b60200190565b600082601f830112613fac57600080fd5b81516020613fc1613fbc83613f77565b613f46565b82815260059290921b84018101918181019086841115613fe057600080fd5b8286015b84811015613ffb5780518352918301918301613fe4565b509695505050505050565b6000806040838503121561401957600080fd5b825167ffffffffffffffff8082111561403157600080fd5b818501915085601f83011261404557600080fd5b81516020614055613fbc83613f77565b82815260059290921b8401810191818101908984111561407457600080fd5b948201945b8386101561409b57855161408c8161398d565b82529482019490820190614079565b918801519196509093505050808211156140b457600080fd5b506140c185828601613f9b565b9150509250929050565b85815284602082015260a0604082015260006140ea60a0830186613eef565b6001600160a01b0394909416606083015250608001529392505050565b60006020828403121561411957600080fd5b815167ffffffffffffffff81111561413057600080fd5b61377684828501613f9b565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351614174816017850160208801613911565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516141a5816028840160208801613911565b01602801949350505050565b6000602082840312156141c357600080fd5b610a9382613c6d565b600081613ebf57613ebf613d00565b600082516141ed818460208701613911565b919091019291505056fec63977c8e2362a31182dc8e89a52252f9836922738e0abcfc0de6924972eafe5fc8737ab85eb45125971625a9ebdb75cc78e01d5c1fa80c4c6e5203f47bc4faba264697066735822122070fd161c7989470f6d62426d9c29568e21ad60c2f46ffe194c7639635e1c33fe64736f6c63430008110033fc8737ab85eb45125971625a9ebdb75cc78e01d5c1fa80c4c6e5203f47bc4fab0000000000000000000000006a17716ce178e84835cfa73abdb71cb4550324560000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000034f4a12863cc75dcd961590ac9ffdfbe18eb3bde0000000000000000000000000b59871df373136bb7753a7a2675b47ffa0ccc86000000000000000000000000f319bb55994dd1211bc34a7a26a336c6dd0b1b00000000000000000000000000e39e0498cb9df939b992f935f95936eaeda7431c0000000000000000000000000c344c52841d3f8d488e1ccdbafb42ce2c7fdfa90000000000000000000000008d3d33232bfcb7b901846ae7b8e84ae282ee2882000000000000000000000000000000000000000000000000000000000000001a4c617a794f747465723a205661756c742041415645205553444300000000000000000000000000000000000000000000000000000000000000000000000000034c4f540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000c8000000000000000000000000000000000000000000000000000000000000000200000000000000000000000034f4a12863cc75dcd961590ac9ffdfbe18eb3bde00000000000000000000000034f4a12863cc75dcd961590ac9ffdfbe18eb3bde000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000064