[ { "inputs": [ { "internalType": "address", "name": "target", "type": "address" } ], "name": "AddressEmptyCode", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "AddressInsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "asset", "type": "address" }, { "internalType": "address", "name": "underlying", "type": "address" } ], "name": "DifferentAssets", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "allowance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientAllowance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC20InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC20InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC20InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" } ], "name": "ERC20InvalidSpender", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint256", "name": "assets", "type": "uint256" }, { "internalType": "uint256", "name": "max", "type": "uint256" } ], "name": "ERC4626ExceededMaxDeposit", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "uint256", "name": "max", "type": "uint256" } ], "name": "ERC4626ExceededMaxMint", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "uint256", "name": "max", "type": "uint256" } ], "name": "ERC4626ExceededMaxRedeem", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "assets", "type": "uint256" }, { "internalType": "uint256", "name": "max", "type": "uint256" } ], "name": "ERC4626ExceededMaxWithdraw", "type": "error" }, { "inputs": [], "name": "EnforcedPause", "type": "error" }, { "inputs": [], "name": "ExpectedPause", "type": "error" }, { "inputs": [], "name": "FailedInnerCall", "type": "error" }, { "inputs": [], "name": "InsufficientFunds", "type": "error" }, { "inputs": [], "name": "InvalidInitialization", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "signer", "type": "address" } ], "name": "InvalidSigner", "type": "error" }, { "inputs": [], "name": "NotInitializing", "type": "error" }, { "inputs": [], "name": "NotKeeperNorOwner", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "deadline", "type": "uint256" } ], "name": "PermitDeadlineExpired", "type": "error" }, { "inputs": [], "name": "ReentrancyGuardReentrantCall", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "SafeERC20FailedOperation", "type": "error" }, { "inputs": [], "name": "ZeroAmount", "type": "error" }, { "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": "bool", "name": "oldState", "type": "bool" }, { "indexed": false, "internalType": "bool", "name": "newState", "type": "bool" } ], "name": "AutoDepositToggled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "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": [], "name": "Harvested", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint64", "name": "version", "type": "uint64" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "prev", "type": "address" }, { "indexed": false, "internalType": "address", "name": "curr", "type": "address" } ], "name": "KeeperChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "oldOwner", "type": "address" }, { "indexed": false, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnerChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnerNominated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Paused", "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": true, "internalType": "address", "name": "sender", "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": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "aToken", "outputs": [ { "internalType": "contract IAToken", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "aaveIncentives", "outputs": [ { "internalType": "contract IAaveIncentives", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "acceptOwnership", "outputs": [], "stateMutability": "nonpayable", "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": "value", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "asset", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "autoDeposit", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "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": [ { "internalType": "uint256", "name": "assets", "type": "uint256" }, { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "convertToUnderlyingShares", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "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": [ { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "harvest", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "asset_", "type": "address" }, { "internalType": "address", "name": "owner_", "type": "address" }, { "internalType": "bool", "name": "autoDeposit_", "type": "bool" }, { "internalType": "bytes", "name": "strategyInitData_", "type": "bytes" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "isActiveIncentives", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "keeper", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "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": "", "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": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "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": "_owner", "type": "address" } ], "name": "nominateNewOwner", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "nominatedOwner", "outputs": [ { "internalType": "address", "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": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "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": [ { "internalType": "uint256", "name": "assets", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "pullFunds", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "pushFunds", "outputs": [], "stateMutability": "nonpayable", "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": "uint256", "name": "shares", "type": "uint256" } ], "name": "redeem", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "rewardTokens", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "keeper_", "type": "address" } ], "name": "setKeeper", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "toggleAutoDeposit", "outputs": [], "stateMutability": "nonpayable", "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": "value", "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": "value", "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" } ], "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" } ]
6080604052348015600e575f80fd5b506135248061001c5f395ff3fe608060405234801561000f575f80fd5b5060043610610319575f3560e01c80637ecebe00116101af578063b460af94116100fe578063ce96cb771161009e578063db006a7511610079578063db006a75146106af578063dd62ed3e146106c2578063ef8b30f714610650578063fb37b270146106d5575f80fd5b8063ce96cb7714610676578063d505accf14610689578063d905777e1461069c575f80fd5b8063c2b18aa0116100d9578063c2b18aa01461063b578063c63d75b614610468578063c6e6f59214610650578063ce5c7f6114610663575f80fd5b8063b460af9414610602578063b6b55f2514610615578063ba08765214610628575f80fd5b8063a0712d6811610169578063a9059cbb11610144578063a9059cbb146105b5578063aced1661146105c8578063b118989c146105db578063b3d7f6b9146105ef575f80fd5b8063a0712d681461057c578063a0c1f15e1461058f578063a59a9973146105a2575f80fd5b80637ecebe00146105205780638456cb591461053f5780638689c09c146105475780638da5cb5b1461054f57806394bf804d1461056157806395d89b4114610574575f80fd5b806338d52e0f1161026b5780635c975abb1161022557806370a082311161020057806370a08231146104de578063748747e6146104f157806375d20a3b1461050457806379ba509714610518575f80fd5b80635c975abb146104a15780635cb5727a146104b85780636e553f65146104cb575f80fd5b806338d52e0f146104585780633f4ba83a14610460578063402d267d1461046857806344d1c2da1461047b5780634cdad5061461034d57806353a47bb71461048e575f80fd5b806318160ddd116102d65780632d1c868c116102b15780632d1c868c146104105780632e1a7d4d14610423578063313ce567146104365780633644e51514610450575f80fd5b806318160ddd146103ab5780631d841e3f146103d257806323b872dd146103fd575f80fd5b806301e1d1141461031d57806306fdde031461033857806307a2d13a1461034d578063095ea7b3146103605780630a28a477146103835780631627540c14610396575b5f80fd5b6103256106e3565b6040519081526020015b60405180910390f35b61034061076b565b60405161032f9190612a9d565b61032561035b366004612acf565b6107fb565b61037361036e366004612afa565b61080c565b604051901515815260200161032f565b610325610391366004612acf565b610823565b6103a96103a4366004612b24565b61082f565b005b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0254610325565b6009546103e5906001600160a01b031681565b6040516001600160a01b03909116815260200161032f565b61037361040b366004612b3f565b61088c565b6103a961041e366004612c48565b6108b1565b610325610431366004612acf565b610e39565b61043e610e45565b60405160ff909116815260200161032f565b610325610e87565b6103e5610ea0565b6103a9610ece565b610325610476366004612b24565b610ee0565b6103a9610489366004612cb9565b610f0b565b6001546103e5906001600160a01b031681565b5f805160206134af8339815191525460ff16610373565b6103a96104c6366004612cb9565b610f65565b6103256104d9366004612cfd565b610fbb565b6103256104ec366004612b24565b61100f565b6103a96104ff366004612b24565b611048565b60015461037390600160a01b900460ff1681565b6103a96110b9565b61032561052e366004612b24565b60056020525f908152604090205481565b6103a96111a1565b6103a96111b1565b5f546103e5906001600160a01b031681565b61032561056f366004612cfd565b611221565b61034061126d565b61032561058a366004612acf565b61127c565b6008546103e5906001600160a01b031681565b600a546103e5906001600160a01b031681565b6103736105c3366004612afa565b611287565b6002546103e5906001600160a01b031681565b60095461037390600160a01b900460ff1681565b6103256105fd366004612acf565b611294565b610325610610366004612d2b565b6112a0565b610325610623366004612acf565b6112f6565b610325610636366004612d2b565b611301565b61064361134e565b60405161032f9190612d6a565b61032561065e366004612acf565b6113d2565b6103a9610671366004612db6565b6113dd565b610325610684366004612b24565b6116da565b6103a9610697366004612de8565b6116ed565b6103256106aa366004612b24565b611897565b6103256106bd366004612acf565b6118a1565b6103256106d0366004612e59565b6118ad565b610325610319366004612e85565b5f6106ec6118f6565b6106f4610ea0565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015610738573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061075c9190612ea5565b6107669190612ed0565b905090565b60606006805461077a90612ee3565b80601f01602080910402602001604051908101604052809291908181526020018280546107a690612ee3565b80156107f15780601f106107c8576101008083540402835291602001916107f1565b820191905f5260205f20905b8154815290600101906020018083116107d457829003601f168201915b5050505050905090565b5f610806825f611961565b92915050565b5f336108198185856119b8565b5060019392505050565b5f6108068260016119ca565b610837611a18565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f906a1c6bd7e3091ea86693dd029a831c19049ce77f1dce2ce0bab1cacbabce22906020015b60405180910390a150565b5f33610899858285611a89565b6108a4858585611ad9565b60019150505b9392505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f811580156108f65750825b90505f8267ffffffffffffffff1660011480156109125750303b155b905081158015610920575080155b1561093e5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561096857845460ff60401b1916600160401b1785555b5f8680602001905181019061097d9190612f1b565b6040516334924edb60e21b81526001600160a01b038c811660048301529192505f9183169063d2493b6c90602401606060405180830381865afa1580156109c6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109ea9190612f36565b5050600880546001600160a01b0319166001600160a01b03838116918217909255604080516358b50cef60e11b81529051939450918e1692909163b16a19de9160048083019260209291908290030181865afa158015610a4c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a709190612f1b565b6001600160a01b031614610b245760085f9054906101000a90046001600160a01b03166001600160a01b031663b16a19de6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ace573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610af29190612f1b565b604051633822aa9d60e21b81526001600160a01b039182166004820152908c1660248201526044015b60405180910390fd5b60085f9054906101000a90046001600160a01b03166001600160a01b0316637535d2466040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b74573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b989190612f1b565b600a80546001600160a01b0319166001600160a01b03928316179055600854604080516375d2641360e01b8152905191909216916375d264139160048083019260209291908290030181865afa158015610bf4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c189190612f1b565b600980546001600160a01b0319166001600160a01b0392909216919091179055610c438b8b8b611b36565b600a5460405163095ea7b360e01b81526001600160a01b0391821660048201525f196024820152908c169063095ea7b3906044016020604051808303815f875af1158015610c93573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cb79190612f75565b50610cc0610ea0565b6001600160a01b03166306fdde036040518163ffffffff1660e01b81526004015f60405180830381865afa158015610cfa573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d219190810190612f90565b604051602001610d319190612ff9565b60405160208183030381529060405260069081610d4e9190613088565b50610d57610ea0565b6001600160a01b03166395d89b416040518163ffffffff1660e01b81526004015f60405180830381865afa158015610d91573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610db89190810190612f90565b604051602001610dc89190613148565b60405160208183030381529060405260079081610de59190613088565b5050508315610e2e57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050565b5f6108068233336112a0565b5f807f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e0090505f8154610e819190600160a01b900460ff16613175565b91505090565b5f6003544614610e9957610766611b8b565b5060045490565b7f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e00546001600160a01b031690565b610ed6611a18565b610ede611c1f565b565b5f610ef95f805160206134af8339815191525460ff1690565b610f04575f19610806565b5f92915050565b5f546001600160a01b03163314801590610f3057506002546001600160a01b03163314155b15610f4e5760405163c6764d6d60e01b815260040160405180910390fd5b610f6182610f5b846113d2565b83611c78565b5050565b5f546001600160a01b03163314801590610f8a57506002546001600160a01b03163314155b15610fa85760405163c6764d6d60e01b815260040160405180910390fd5b610f6182610fb5846113d2565b83611cfd565b5f80610fc683610ee0565b905080841115610fef57828482604051633c8097d960e11b8152600401610b1b9392919061318e565b5f610ff9856113d2565b905061100733858784611d8a565b949350505050565b6001600160a01b03165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00602052604090205490565b611050611a18565b600254604080516001600160a01b03928316815291831660208301527f068b48a2fe7f498b57ff6da64f075ae658fde8d77124b092e62b3dc58d91ce35910160405180910390a1600280546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031633146111315760405162461bcd60e51b815260206004820152603560248201527f596f75206d757374206265206e6f6d696e61746564206265666f726520796f7560448201527402063616e20616363657074206f776e65727368697605c1b6064820152608401610b1b565b5f54600154604080516001600160a01b0393841681529290911660208301527fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c910160405180910390a1600180545f80546001600160a01b03199081166001600160a01b03841617909155169055565b6111a9611a18565b610ede611e6f565b6111b9611a18565b60015460408051600160a01b90920460ff16158015835260208301527facb11423c8b68e710be92d074573958076ce061ece2b7196e442c1eb99948b01910160405180910390a16001805460ff60a01b198116600160a01b9182900460ff1615909102179055565b5f8061122c83610ee0565b9050808411156112555782848260405163284ff66760e01b8152600401610b1b9392919061318e565b5f61125f85611294565b905061100733858388611d8a565b60606007805461077a90612ee3565b5f6108068233611221565b5f33610819818585611ad9565b5f610806826001611961565b5f806112ab836116da565b9050808511156112d457828582604051633fa733bb60e21b8152600401610b1b9392919061318e565b5f6112de86610823565b90506112ed3386868985611eb7565b95945050505050565b5f6108068233610fbb565b5f8061130c83611897565b90508085111561133557828582604051632e52afbb60e21b8152600401610b1b9392919061318e565b5f61133f866107fb565b90506112ed338686848a611eb7565b6009546060906001600160a01b0316636657732f61136a610ea0565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201526024015f60405180830381865afa1580156113ab573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107669190810190613242565b5f610806825f6119ca565b5f546001600160a01b0316331480159061140257506002546001600160a01b03163314155b156114205760405163c6764d6d60e01b815260040160405180910390fd5b61142861203b565b506009545f906001600160a01b0316636657732f611444610ea0565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201526024015f60405180830381865afa158015611485573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526114ac9190810190613242565b90505f5b81518110156115dd575f8282815181106114cc576114cc613274565b60209081029190910101516040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa15801561151a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061153e9190612ea5565b905080156115d45782828151811061155857611558613274565b602090810291909101015160405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb906044016020604051808303815f875af11580156115ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115d29190612f75565b505b506001016114b0565b505f828060200190518101906115f39190612ea5565b9050805f0361161557604051631f2a200560e01b815260040160405180910390fd5b61161d610ea0565b6040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b0391909116906323b872dd906064016020604051808303815f875af115801561166f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116939190612f75565b506116ad815f60405180602001604052805f815250611c78565b6040517f4d12401e4d6cc642454aedd27a02290e422f28dd21e629634f1beffacb705bf8905f90a1505050565b5f6108066116e78361100f565b5f611961565b4284101561171157604051632b9b60b760e01b815260048101859052602401610b1b565b5f600161171c610e87565b6001600160a01b038a81165f8181526005602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e08301909152805192019190912061190160f01b6101008301526101028201929092526101228101919091526101420160408051601f1981840301815282825280516020918201205f84529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa158015611824573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811615806118595750876001600160a01b0316816001600160a01b031614155b156118825760405163bf18af4360e01b81526001600160a01b0382166004820152602401610b1b565b61188d8188886119b8565b5050505050505050565b5f6108068261100f565b5f610806823333611301565b6001600160a01b039182165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b6008546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a08231906024015b602060405180830381865afa15801561193d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107669190612ea5565b5f6108aa61196d6106e3565b611978906001612ed0565b6119835f600a613368565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02546119af9190612ed0565b8591908561211c565b6119c5838383600161215e565b505050565b5f6108aa6119d982600a613368565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0254611a059190612ed0565b611a0d6106e3565b6119af906001612ed0565b5f546001600160a01b03163314610ede5760405162461bcd60e51b815260206004820152602f60248201527f4f6e6c792074686520636f6e7472616374206f776e6572206d6179207065726660448201526e37b936903a3434b99030b1ba34b7b760891b6064820152608401610b1b565b5f611a9484846118ad565b90505f198114611ad35781811015611ac557828183604051637dc7a0d960e11b8152600401610b1b9392919061318e565b611ad384848484035f61215e565b50505050565b6001600160a01b038316611b0257604051634b637e8f60e11b81525f6004820152602401610b1b565b6001600160a01b038216611b2b5760405163ec442f0560e01b81525f6004820152602401610b1b565b6119c5838383612254565b611b3e61238d565b611b466123d6565b611b4e6123e6565b611b57826123f6565b611b60836124a7565b6001805460ff60a01b1916600160a01b8315150217905546600355611b83611b8b565b600455505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611bb561076b565b80516020918201206040805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b611c276124bb565b5f805160206134af833981519152805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b039091168152602001610881565b600a546001600160a01b031663617ba037611c91610ea0565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018690523060448201525f60648201526084015f604051808303815f87803b158015611ce2575f80fd5b505af1158015611cf4573d5f803e3d5ffd5b50505050505050565b600a546001600160a01b03166369328dec611d16610ea0565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018690523060448201526064016020604051808303815f875af1158015611d66573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ad39190612ea5565b611d926124ea565b801580611d9d575081155b15611dbb57604051631f2a200560e01b815260040160405180910390fd5b611dce611dc6610ea0565b853085612521565b600154600160a01b900460ff1615611df957611df9828260405180602001604052805f815250611c78565b611e038382612588565b826001600160a01b0316846001600160a01b03167fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d78484604051611e51929190918252602082015260400190565b60405180910390a3611ad360015f805160206134cf83398151915255565b611e776125cf565b5f805160206134af833981519152805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611c60565b611ebf6124ea565b801580611eca575081155b15611ee857604051631f2a200560e01b815260040160405180910390fd5b826001600160a01b0316856001600160a01b031614611f0c57611f0c838683611a89565b5f611f156125ff565b9050611f2f5f805160206134af8339815191525460ff1690565b611f755780831115611f75575f611f468285613376565b9050611f6981611f55836113d2565b60405180602001604052805f815250611cfd565b611f716125ff565b9150505b82811015611f965760405163356680b760e01b815260040160405180910390fd5b611fa08483612636565b611fbd8584611fad610ea0565b6001600160a01b0316919061266a565b836001600160a01b0316856001600160a01b0316876001600160a01b03167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db8686604051612015929190918252602082015260400190565b60405180910390a45061203460015f805160206134cf83398151915255565b5050505050565b6009545f906001600160a01b031661205257505f90565b6040805160018082528183019092525f9160208083019080368337505060085482519293506001600160a01b0316918391505f9061209257612092613274565b6001600160a01b039283166020918202929092010152600954604051635fc87b1d60e11b815291169063bf90f63a906120cf908490600401612d6a565b5f604051808303815f875af192505050801561210c57506040513d5f823e601f3d908101601f191682016040526121099190810190613389565b60015b15612118575050600191505b5090565b5f6121496121298361269b565b801561214457505f848061213f5761213f61343e565b868809115b151590565b6121548686866126c7565b6112ed9190612ed0565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006001600160a01b0385166121a85760405163e602df0560e01b81525f6004820152602401610b1b565b6001600160a01b0384166121d157604051634a1406b160e11b81525f6004820152602401610b1b565b6001600160a01b038086165f9081526001830160209081526040808320938816835292905220839055811561203457836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258560405161224591815260200190565b60405180910390a35050505050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006001600160a01b0384166122a15781816002015f8282546122969190612ed0565b909155506122fe9050565b6001600160a01b0384165f90815260208290526040902054828110156122e05784818460405163391434e360e21b8152600401610b1b9392919061318e565b6001600160a01b0385165f9081526020839052604090209083900390555b6001600160a01b03831661231c57600281018054839003905561233a565b6001600160a01b0383165f9081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161237f91815260200190565b60405180910390a350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610ede57604051631afcd79f60e31b815260040160405180910390fd5b6123de61238d565b610ede612784565b6123ee61238d565b610ede6127a4565b6123fe61238d565b6001600160a01b0381166124545760405162461bcd60e51b815260206004820152601960248201527f4f776e657220616464726573732063616e6e6f742062652030000000000000006044820152606401610b1b565b5f80546001600160a01b0319166001600160a01b03831690811782556040805192835260208301919091527fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c9101610881565b6124af61238d565b6124b8816127ac565b50565b5f805160206134af8339815191525460ff16610ede57604051638dfc202b60e01b815260040160405180910390fd5b5f805160206134cf83398151915280546001190161251b57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b6040516001600160a01b038481166024830152838116604483015260648201839052611ad39186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b03838183161783525050505061282f565b6001600160a01b0382166125b15760405163ec442f0560e01b81525f6004820152602401610b1b565b610f615f8383612254565b60015f805160206134cf83398151915255565b5f805160206134af8339815191525460ff1615610ede5760405163d93c066560e01b815260040160405180910390fd5b5f612608610ea0565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401611922565b6001600160a01b03821661265f57604051634b637e8f60e11b81525f6004820152602401610b1b565b610f61825f83612254565b6040516001600160a01b038381166024830152604482018390526119c591859182169063a9059cbb90606401612556565b5f60028260038111156126b0576126b0613452565b6126ba9190613466565b60ff166001149050919050565b5f838302815f1985870982811083820303915050805f036126fb578382816126f1576126f161343e565b04925050506108aa565b808411612719576127198415612712576011612890565b6012612890565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b61278c61238d565b5f805160206134af833981519152805460ff19169055565b6125bc61238d565b6127b461238d565b7f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e005f806127e0846128a3565b91509150816127f05760126127f2565b805b83546001600160a81b031916600160a01b60ff92909216919091026001600160a01b031916176001600160a01b0394909416939093179091555050565b5f6128436001600160a01b03841683612979565b905080515f141580156128675750808060200190518101906128659190612f75565b155b156119c557604051635274afe760e01b81526001600160a01b0384166004820152602401610b1b565b634e487b7160e01b5f528060045260245ffd5b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b17905290515f918291829182916001600160a01b038716916128e991613493565b5f60405180830381855afa9150503d805f8114612921576040519150601f19603f3d011682016040523d82523d5f602084013e612926565b606091505b509150915081801561293a57506020815110155b1561296d575f818060200190518101906129549190612ea5565b905060ff811161296b576001969095509350505050565b505b505f9485945092505050565b60606108aa83835f845f80856001600160a01b0316848660405161299d9190613493565b5f6040518083038185875af1925050503d805f81146129d7576040519150601f19603f3d011682016040523d82523d5f602084013e6129dc565b606091505b50915091506129ec8683836129f6565b9695505050505050565b606082612a0b57612a0682612a52565b6108aa565b8151158015612a2257506001600160a01b0384163b155b15612a4b57604051639996b31560e01b81526001600160a01b0385166004820152602401610b1b565b50806108aa565b805115612a625780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b5f5b83811015612a95578181015183820152602001612a7d565b50505f910152565b602081525f8251806020840152612abb816040850160208701612a7b565b601f01601f19169190910160400192915050565b5f60208284031215612adf575f80fd5b5035919050565b6001600160a01b03811681146124b8575f80fd5b5f8060408385031215612b0b575f80fd5b8235612b1681612ae6565b946020939093013593505050565b5f60208284031215612b34575f80fd5b81356108aa81612ae6565b5f805f60608486031215612b51575f80fd5b8335612b5c81612ae6565b92506020840135612b6c81612ae6565b929592945050506040919091013590565b80151581146124b8575f80fd5b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612bc757612bc7612b8a565b604052919050565b5f67ffffffffffffffff821115612be857612be8612b8a565b50601f01601f191660200190565b5f82601f830112612c05575f80fd5b8135612c18612c1382612bcf565b612b9e565b818152846020838601011115612c2c575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f8060808587031215612c5b575f80fd5b8435612c6681612ae6565b93506020850135612c7681612ae6565b92506040850135612c8681612b7d565b9150606085013567ffffffffffffffff811115612ca1575f80fd5b612cad87828801612bf6565b91505092959194509250565b5f8060408385031215612cca575f80fd5b82359150602083013567ffffffffffffffff811115612ce7575f80fd5b612cf385828601612bf6565b9150509250929050565b5f8060408385031215612d0e575f80fd5b823591506020830135612d2081612ae6565b809150509250929050565b5f805f60608486031215612d3d575f80fd5b833592506020840135612d4f81612ae6565b91506040840135612d5f81612ae6565b809150509250925092565b602080825282518282018190525f9190848201906040850190845b81811015612daa5783516001600160a01b031683529284019291840191600101612d85565b50909695505050505050565b5f60208284031215612dc6575f80fd5b813567ffffffffffffffff811115612ddc575f80fd5b61100784828501612bf6565b5f805f805f805f60e0888a031215612dfe575f80fd5b8735612e0981612ae6565b96506020880135612e1981612ae6565b95506040880135945060608801359350608088013560ff81168114612e3c575f80fd5b9699959850939692959460a0840135945060c09093013592915050565b5f8060408385031215612e6a575f80fd5b8235612e7581612ae6565b91506020830135612d2081612ae6565b5f8060408385031215612e96575f80fd5b50508035926020909101359150565b5f60208284031215612eb5575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561080657610806612ebc565b600181811c90821680612ef757607f821691505b602082108103612f1557634e487b7160e01b5f52602260045260245ffd5b50919050565b5f60208284031215612f2b575f80fd5b81516108aa81612ae6565b5f805f60608486031215612f48575f80fd5b8351612f5381612ae6565b6020850151909350612f6481612ae6565b6040850151909250612d5f81612ae6565b5f60208284031215612f85575f80fd5b81516108aa81612b7d565b5f60208284031215612fa0575f80fd5b815167ffffffffffffffff811115612fb6575f80fd5b8201601f81018413612fc6575f80fd5b8051612fd4612c1382612bcf565b818152856020838501011115612fe8575f80fd5b6112ed826020830160208601612a7b565b7102b30bab63a21b930b33a1020b0bb32ab19960751b81525f8251613025816012850160208701612a7b565b671020b230b83a32b960c11b6012939091019283015250601a01919050565b601f8211156119c557805f5260205f20601f840160051c810160208510156130695750805b601f840160051c820191505b81811015612034575f8155600101613075565b815167ffffffffffffffff8111156130a2576130a2612b8a565b6130b6816130b08454612ee3565b84613044565b602080601f8311600181146130e9575f84156130d25750858301515b5f19600386901b1c1916600185901b178555613140565b5f85815260208120601f198616915b82811015613117578886015182559484019460019091019084016130f8565b508582101561313457878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b6576634176332d60d01b81525f8251613168816006850160208701612a7b565b9190910160060192915050565b60ff818116838216019081111561080657610806612ebc565b6001600160a01b039390931683526020830191909152604082015260600190565b5f67ffffffffffffffff8211156131c8576131c8612b8a565b5060051b60200190565b5f82601f8301126131e1575f80fd5b815160206131f1612c13836131af565b8083825260208201915060208460051b870101935086841115613212575f80fd5b602086015b8481101561323757805161322a81612ae6565b8352918301918301613217565b509695505050505050565b5f60208284031215613252575f80fd5b815167ffffffffffffffff811115613268575f80fd5b611007848285016131d2565b634e487b7160e01b5f52603260045260245ffd5b600181815b808511156132c257815f19048211156132a8576132a8612ebc565b808516156132b557918102915b93841c939080029061328d565b509250929050565b5f826132d857506001610806565b816132e457505f610806565b81600181146132fa576002811461330457613320565b6001915050610806565b60ff84111561331557613315612ebc565b50506001821b610806565b5060208310610133831016604e8410600b8410161715613343575081810a610806565b61334d8383613288565b805f190482111561336057613360612ebc565b029392505050565b5f6108aa60ff8416836132ca565b8181038181111561080657610806612ebc565b5f806040838503121561339a575f80fd5b825167ffffffffffffffff808211156133b1575f80fd5b6133bd868387016131d2565b93506020915081850151818111156133d3575f80fd5b85019050601f810186136133e5575f80fd5b80516133f3612c13826131af565b81815260059190911b82018301908381019088831115613411575f80fd5b928401925b8284101561342f57835182529284019290840190613416565b80955050505050509250929050565b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b5f60ff83168061348457634e487b7160e01b5f52601260045260245ffd5b8060ff84160691505092915050565b5f82516134a4818460208701612a7b565b919091019291505056fecd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a26469706673582212206b535e40975a3fb25df6e3b034c06a30d98ae254bfa7d460ae5c96e41fcc647a64736f6c63430008190033