[ { "inputs": [ { "internalType": "contract IRewardsController", "name": "rewardsController", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" } ], "name": "AddressEmptyCode", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "AddressInsufficientBalance", "type": "error" }, { "inputs": [], "name": "ECDSAInvalidSignature", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "length", "type": "uint256" } ], "name": "ECDSAInvalidSignatureLength", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "ECDSAInvalidSignatureS", "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": "uint256", "name": "deadline", "type": "uint256" } ], "name": "ERC2612ExpiredSignature", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "signer", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC2612InvalidSigner", "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": "EthTransferFailed", "type": "error" }, { "inputs": [], "name": "ExpectedPause", "type": "error" }, { "inputs": [], "name": "FailedInnerCall", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "currentNonce", "type": "uint256" } ], "name": "InvalidAccountNonce", "type": "error" }, { "inputs": [], "name": "InvalidInitialization", "type": "error" }, { "inputs": [], "name": "MathOverflowedMulDiv", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "NotApprovedForCooldown", "type": "error" }, { "inputs": [], "name": "NotInitializing", "type": "error" }, { "inputs": [], "name": "OnlyRescueGuardian", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "OwnableInvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "OwnableUnauthorizedAccount", "type": "error" }, { "inputs": [ { "internalType": "uint8", "name": "bits", "type": "uint8" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "SafeCastOverflowedUintDowncast", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "SafeERC20FailedOperation", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "SafeERC20FailedOperation", "type": "error" }, { "inputs": [], "name": "ZeroAddress", "type": "error" }, { "inputs": [], "name": "ZeroAmountSlashing", "type": "error" }, { "inputs": [], "name": "ZeroBalanceInStaking", "type": "error" }, { "inputs": [], "name": "ZeroFundsAvailable", "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": "uint256", "name": "oldCooldown", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newCooldown", "type": "uint256" } ], "name": "CooldownChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "flag", "type": "bool" } ], "name": "CooldownOperatorSet", "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": "EIP712DomainChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "caller", "type": "address" }, { "indexed": true, "internalType": "address", "name": "token", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "ERC20Rescued", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint64", "name": "version", "type": "uint64" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "caller", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "NativeTokensRescued", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Paused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "destination", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Slashed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "endOfCooldown", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "unstakeWindow", "type": "uint256" } ], "name": "StakerCooldownUpdated", "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": "uint256", "name": "oldUnstakeWindow", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newUnstakeWindow", "type": "uint256" } ], "name": "UnstakeWindowChanged", "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": "MIN_ASSETS_REMAINING", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "REWARDS_CONTROLLER", "outputs": [ { "internalType": "contract IRewardsController", "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": "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": [ { "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": "cooldown", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "cooldownNonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "cooldownOnBehalfOf", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "components": [ { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "internalType": "struct IERC4626StakeToken.SignatureParams", "name": "sig", "type": "tuple" } ], "name": "cooldownWithPermit", "outputs": [], "stateMutability": "nonpayable", "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" }, { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "components": [ { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "internalType": "struct IERC4626StakeToken.SignatureParams", "name": "sig", "type": "tuple" } ], "name": "depositWithPermit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "eip712Domain", "outputs": [ { "internalType": "bytes1", "name": "fields", "type": "bytes1" }, { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "version", "type": "string" }, { "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "address", "name": "verifyingContract", "type": "address" }, { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, { "internalType": "uint256[]", "name": "extensions", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "emergencyEtherTransfer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "erc20Token", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "emergencyTokenTransfer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "getCooldown", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getMaxSlashableAssets", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "getStakerCooldown", "outputs": [ { "components": [ { "internalType": "uint192", "name": "amount", "type": "uint192" }, { "internalType": "uint32", "name": "endOfCooldown", "type": "uint32" }, { "internalType": "uint32", "name": "withdrawalWindow", "type": "uint32" } ], "internalType": "struct IERC4626StakeToken.CooldownSnapshot", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getUnstakeWindow", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "contract IERC20", "name": "stakedToken", "type": "address" }, { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "symbol", "type": "string" }, { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "cooldown_", "type": "uint256" }, { "internalType": "uint256", "name": "unstakeWindow_", "type": "uint256" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isCooldownOperator", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "receiver", "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": "erc20Token", "type": "address" } ], "name": "maxRescue", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "maxWithdraw", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "mint", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "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": "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": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newCooldown", "type": "uint256" } ], "name": "setCooldown", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "flag", "type": "bool" } ], "name": "setCooldownOperator", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newUnstakeWindow", "type": "uint256" } ], "name": "setUnstakeWindow", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "destination", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "slash", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalAssets", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "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": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "whoCanRescue", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "withdraw", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" } ]
60a060405234801561000f575f5ffd5b50604051613da8380380613da883398101604081905261002e91610122565b806001600160a01b0381166100565760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b031660805261006a610070565b5061014f565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100c05760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161461011f5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610132575f5ffd5b81516001600160a01b0381168114610148575f5ffd5b9392505050565b608051613c2c61017c5f395f818161067301528181611e3a015281816129850152612a960152613c2c5ff3fe608060405234801561000f575f5ffd5b5060043610610367575f3560e01c80638456cb59116101c9578063c63d75b6116100fe578063da27578f1161009e578063ef8b30f711610079578063ef8b30f71461065b578063f2fde38b1461071a578063f8f10dfc1461072d578063fae9fed014610740575f5ffd5b8063da27578f146106e1578063dd62ed3e146106f4578063eed88b8d14610707575f5ffd5b8063ce96cb77116100d9578063ce96cb7714610695578063d505accf146106a8578063d7408715146106bb578063d905777e146106ce575f5ffd5b8063c63d75b614610509578063c6e6f5921461065b578063cd086d451461066e575f5ffd5b8063a4757b0f11610169578063b3d7f6b911610144578063b3d7f6b91461060f578063b460af9414610622578063ba08765214610635578063bc8fcdca14610648575f5ffd5b8063a4757b0f146105e1578063a9059cbb146105e9578063b0bc95a7146105fc575f5ffd5b806390b9f9e4116101a457806390b9f9e4146105ab57806394bf804d146105b357806395d89b41146105c6578063a3d5b255146105ce575f5ffd5b80638456cb591461058057806384b0196e146105885780638da5cb5b146105a3575f5ffd5b80632f8a8f421161029f5780634fc3f41a1161023f57806370a082311161021a57806370a082311461054a578063715018a61461055d578063787a08a6146105655780637ecebe001461056d575f5ffd5b80634fc3f41a1461051c5780635c975abb1461052f5780636e553f6514610537575f5ffd5b806338d52e0f1161027a57806338d52e0f146104e15780633f4ba83a14610501578063402d267d146105095780634cdad506146103c1575f5ffd5b80632f8a8f4214610473578063313ce567146104bf5780633644e515146104d9575f5ffd5b8063131870001161030a5780632279c0c2116102e55780632279c0c21461043057806323b872dd14610443578063250201db14610456578063299f39661461046b575f5ffd5b8063131870001461040a57806318160ddd14610414578063218e4a1514610428575f5ffd5b806306fdde031161034557806306fdde03146103ac57806307a2d13a146103c1578063095ea7b3146103d45780630a28a477146103f7575f5ffd5b806301e1d1141461036b57806302fb4d851461038657806303fc974714610399575b5f5ffd5b610373610753565b6040519081526020015b60405180910390f35b61037361039436600461337f565b610775565b6103736103a73660046133bf565b610791565b6103b461084f565b60405161037d9190613452565b6103736103cf366004613464565b6108f4565b6103e76103e236600461337f565b6108ff565b604051901515815260200161037d565b610373610405366004613464565b610916565b610373620f424081565b5f516020613ba05f395f51905f5254610373565b610373610922565b6103e761043e36600461347b565b61093a565b6103e76104513660046134b2565b610975565b6104696104643660046134f0565b61099a565b005b6103736109e3565b6104866104813660046134f0565b6109f1565b6040805182516001600160c01b0316815260208084015163ffffffff90811691830191909152928201519092169082015260600161037d565b6104c7610a6c565b60405160ff909116815260200161037d565b610373610a75565b6104e9610a7e565b6040516001600160a01b03909116815260200161037d565b610469610a9f565b6103736105173660046134f0565b610ab1565b61046961052a366004613464565b610acd565b6103e7610ade565b61037361054536600461350b565b610af3565b6103736105583660046134f0565b610b3f565b610469610b6f565b610469610b80565b61037361057b3660046134f0565b610b89565b610469610b93565b610590610ba3565b60405161037d979695949392919061352e565b6104e9610c4c565b610373610c74565b6103736105c136600461350b565b610c94565b6103b4610ce0565b6104696105dc3660046134b2565b610d1e565b6104e9610d67565b6103e76105f736600461337f565b610d70565b61046961060a366004613609565b610d7d565b61037361061d366004613464565b610f65565b6103736106303660046136ae565b610f71565b6103736106433660046136ae565b610fc7565b6103736106563660046134f0565b611014565b610373610669366004613464565b61103e565b6104e97f000000000000000000000000000000000000000000000000000000000000000081565b6103736106a33660046134f0565b611049565b6104696106b63660046136fd565b611067565b6103736106c93660046134f0565b6111bc565b6103736106dc3660046134f0565b611262565b6104696106ef366004613774565b611280565b61037361070236600461347b565b61128f565b61046961071536600461337f565b6112d8565b6104696107283660046134f0565b61131b565b61046961073b366004613464565b611355565b61046961074e3660046137a0565b611366565b5f61075c611485565b60030154600160401b90046001600160c01b0316919050565b5f61077e6114a9565b61078883836114db565b90505b92915050565b5f61079a610a7e565b6001600160a01b031663d505accf333088876107b960208901896137dc565b604080516001600160e01b031960e089901b1681526001600160a01b0396871660048201529590941660248601526044850192909252606484015260ff166084830152602086013560a483015285013560c482015260e4015f604051808303815f87803b158015610828575f5ffd5b505af1925050508015610839575060015b506108448585610af3565b90505b949350505050565b60605f5f516020613b805f395f51905f525b9050806003018054610872906137f5565b80601f016020809104026020016040519081016040528092919081815260200182805461089e906137f5565b80156108e95780601f106108c0576101008083540402835291602001916108e9565b820191905f5260205f20905b8154815290600101906020018083116108cc57829003601f168201915b505050505091505090565b5f61078b825f6114ee565b5f3361090c818585611532565b5060019392505050565b5f61078b82600161153f565b5f61092b611485565b6003015463ffffffff16919050565b5f610943611485565b6001600160a01b039384165f908152600191909101602090815260408083209490951682529290925250205460ff1690565b5f3361098285828561157a565b61098d8585856115ca565b60019150505b9392505050565b6109a4813361093a565b6109d757604051630f93c4af60e41b81526001600160a01b03821660048201523360248201526044015b60405180910390fd5b6109e081611627565b50565b5f6109ec611638565b905090565b604080516060810182525f8082526020820181905291810191909152610a15611485565b6001600160a01b039092165f9081526020928352604090819020815160608101835290546001600160c01b038116825263ffffffff600160c01b8204811695830195909552600160e01b9004909316908301525090565b5f6109ec611653565b5f6109ec611682565b5f805f516020613be05f395f51905f525b546001600160a01b031692915050565b610aa76114a9565b610aaf61168b565b565b5f610aba610ade565b15610ac657505f919050565b5f1961078b565b610ad56114a9565b6109e0816116ea565b5f516020613c005f395f51905f525460ff1690565b5f5f610afe83610ab1565b905080841115610b2757828482604051633c8097d960e11b81526004016109ce93929190613827565b5f610b318561103e565b905061084733858784611769565b5f805f516020613b805f395f51905f525b6001600160a01b039093165f9081526020939093525050604090205490565b610b776114a9565b610aaf5f6117d3565b610aaf33611627565b5f61078b82611843565b610b9b6114a9565b610aaf61186b565b5f60608082808083815f516020613bc05f395f51905f528054909150158015610bce57506001810154155b610c125760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b60448201526064016109ce565b610c1a6118b3565b610c226118f1565b604080515f80825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b5f807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300610a8f565b5f610c7d611485565b60030154640100000000900463ffffffff16919050565b5f5f610c9f83610ab1565b905080841115610cc85782848260405163284ff66760e01b81526004016109ce93929190613827565b5f610cd285610f65565b905061084733858388611769565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0480546060915f516020613b805f395f51905f5291610872906137f5565b610d26610d67565b6001600160a01b0316336001600160a01b031614610d5757604051633a02626960e01b815260040160405180910390fd5b610d62838383611907565b505050565b5f6109ec610c4c565b5f3361090c8185856115ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f81158015610dc25750825b90505f8267ffffffffffffffff166001148015610dde5750303b155b905081158015610dec575080155b15610e0a5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610e3457845460ff60401b1916600160401b1785555b610eb68c8c8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f820116905080830192505050505050508b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061199592505050565b610ef48c8c8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506119a792505050565b610efc6119d2565b610f05886119e2565b610f108d88886119f3565b8315610f5657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050505050565b5f61078b8260016114ee565b5f5f610f7c83611049565b905080851115610fa557828582604051633fa733bb60e21b81526004016109ce93929190613827565b5f610faf86610916565b9050610fbe3386868985611a0e565b95945050505050565b5f5f610fd283611262565b905080851115610ffb57828582604051632e52afbb60e21b81526004016109ce93929190613827565b5f611005866108f4565b9050610fbe338686848a611a0e565b5f61101d611485565b6001600160a01b039092165f90815260029290920160205250604090205490565b5f61078b825f61153f565b5f611052610ade565b1561105e57505f919050565b61078b82611a7a565b8342111561108b5760405163313c898160e11b8152600481018590526024016109ce565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886110f58c6001600160a01b03165f9081527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb006020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f61114f82611a8d565b90505f61115e82878787611ab9565b9050896001600160a01b0316816001600160a01b0316146111a5576040516325c0072360e11b81526001600160a01b0380831660048301528b1660248201526044016109ce565b6111b08a8a8a611532565b50505050505050505050565b5f6111c5610a7e565b6001600160a01b0316826001600160a01b031603611255576111e5610753565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015611227573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061124b919061385c565b61078b9190613887565b505f19919050565b919050565b5f61126b610ade565b1561127757505f919050565b61078b82611ae5565b61128b338383611b8f565b5050565b6001600160a01b039182165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b6112e0610d67565b6001600160a01b0316336001600160a01b03161461131157604051633a02626960e01b815260040160405180910390fd5b61128b8282611c0e565b6113236114a9565b6001600160a01b03811661134c57604051631e4fbdf760e01b81525f60048201526024016109ce565b6109e0816117d3565b61135d6114a9565b6109e081611cd5565b8142111561138a5760405163313c898160e11b8152600481018390526024016109ce565b5f7f4e8def0b305e19b8e349a25a387ca28c4a1d80555dd57e35f2526d800363e1bd84336113b787611d61565b6040805160208101959095526001600160a01b039384169085015291166060830152608082015260a0810184905260c0016040516020818303038152906040528051906020012090505f61140a82611a8d565b90505f61142d8261141e60208701876137dc565b86602001358760400135611ab9565b9050856001600160a01b0316816001600160a01b031614611474576040516325c0072360e11b81526001600160a01b038083166004830152871660248201526044016109ce565b61147d86611627565b505050505050565b7f3b7d252e513ca0740d527649afeab4abf7cb6ef2e75cb52cd2b8721d2183460090565b336114b2610c4c565b6001600160a01b031614610aaf5760405163118cdaa760e01b81523360048201526024016109ce565b5f6114e4611d93565b6107888383611db9565b5f6107886114fa610753565b61150590600161389a565b6115105f600a613990565b5f516020613ba05f395f51905f5254611529919061389a565b85919085611fa2565b610d628383836001611fef565b5f61078861154e82600a613990565b5f516020613ba05f395f51905f5254611567919061389a565b61156f610753565b61152990600161389a565b5f611585848461128f565b90505f1981146115c457818110156115b657828183604051637dc7a0d960e11b81526004016109ce93929190613827565b6115c484848484035f611fef565b50505050565b6001600160a01b0383166115f357604051634b637e8f60e11b81525f60048201526024016109ce565b6001600160a01b03821661161c5760405163ec442f0560e01b81525f60048201526024016109ce565b610d628383836120d3565b61162f611d93565b6109e0816120e6565b5f611641610ade565b1561164b57505f90565b6109ec61222b565b5f805f516020613be05f395f51905f5290505f815461167c9190600160a01b900460ff1661399e565b91505090565b5f6109ec61225b565b6116936122ce565b5f516020613c005f395f51905f52805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b5f6116f3611485565b6003015463ffffffff169050611708826122f3565b611710611485565b600301805463ffffffff191663ffffffff9290921691909117905560408051828152602081018490527f0731af75921ee6c66096a5c95daa1adcf95ff01e0ce8063a2369cb218ee4bcc991015b60405180910390a15050565b61177584848484612327565b61177e826123a4565b611786611485565b60030180546008906117a9908490600160401b90046001600160c01b03166139b7565b92506101000a8154816001600160c01b0302191690836001600160c01b0316021790555050505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f807f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb00610b50565b611873611d93565b5f516020613c005f395f51905f52805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336116cc565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10280546060915f516020613bc05f395f51905f5291610872906137f5565b60605f5f516020613bc05f395f51905f52610861565b5f611911846111bc565b90508181116119205780611922565b815b91506119386001600160a01b03851684846123d7565b826001600160a01b0316846001600160a01b0316336001600160a01b03167fc7af665d489507e14ae25ac7ab0030fc7f570869610bdd32117ea56b60ae5c618560405161198791815260200190565b60405180910390a450505050565b61199d612429565b61128b8282612472565b6119af612429565b6109e081604051806040016040528060018152602001603160f81b8152506124c2565b6119da612429565b610aaf612521565b6119ea612429565b6109e081612541565b6119fb612429565b611a0483612549565b610d6282826125b9565b611a1b85858585856125d3565b611a24826123a4565b611a2c611485565b6003018054600890611a4f908490600160401b90046001600160c01b03166139d6565b92506101000a8154816001600160c01b0302191690836001600160c01b031602179055505050505050565b5f61078b611a8783611262565b5f6114ee565b5f61078b611a99611682565b8360405161190160f01b8152600281019290925260228201526042902090565b5f5f5f5f611ac988888888612687565b925092509250611ad9828261274f565b50909695505050505050565b5f5f611aef611485565b6001600160a01b0384165f9081526020918252604090819020815160608101835290546001600160c01b038116825263ffffffff600160c01b82048116948301859052600160e01b909104169181019190915291504210801590611b725750806040015163ffffffff16816020015163ffffffff1642611b6f9190613887565b11155b15611b8757516001600160c01b031692915050565b505f92915050565b80611b98611485565b6001600160a01b038581165f8181526001939093016020908152604080852093881680865293825293849020805460ff1916951515959095179094559151841515815290927fa38c17a90fc13db5a035877139d3649d9c7f05910b0a71aedd38e8fc97e8ec0b91015b60405180910390a3505050565b604080515f808252602082019092526001600160a01b038416908390604051611c3791906139f5565b5f6040518083038185875af1925050503d805f8114611c71576040519150601f19603f3d011682016040523d82523d5f602084013e611c76565b606091505b5050905080611c9857604051630db2c7f160e31b815260040160405180910390fd5b6040518281526001600160a01b0384169033907fb7c602059992183c7b767c08204223afc99f1895fd175adf9ece23ce9f5bb8b790602001611c01565b5f611cde611485565b60030154640100000000900463ffffffff169050611cfb826122f3565b611d03611485565b600301805463ffffffff929092166401000000000267ffffffff000000001990921691909117905560408051828152602081018490527f6fca801becb9707cbca62182fa0b26a34d43b1a631a501b6c1ac5ae2232a70e9910161175d565b5f611d6a611485565b6001600160a01b039092165f908152600292909201602052506040902080546001810190915590565b611d9b610ade565b15610aaf5760405163d93c066560e01b815260040160405180910390fd5b5f6001600160a01b038316611de15760405163d92e233d60e01b815260040160405180910390fd5b815f03611e0157604051633eec77c160e01b815260040160405180910390fd5b5f611e0a611638565b9050805f03611e2c57604051633f2a0e3360e21b815260040160405180910390fd5b80831115611e38578092505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635d4654ec611e7c5f516020613ba05f395f51905f525490565b611e84610753565b6040516001600160e01b031960e085901b168152600481019290925260248201525f6044820181905260648201526084015f604051808303815f87803b158015611ecc575f5ffd5b505af1158015611ede573d5f5f3e3d5ffd5b50505050611eeb836123a4565b611ef3611485565b6003018054600890611f16908490600160401b90046001600160c01b03166139d6565b92506101000a8154816001600160c01b0302191690836001600160c01b03160217905550611f578484611f47610a7e565b6001600160a01b03169190612807565b836001600160a01b03167f4ed05e9673c26d2ed44f7ef6a7f2942df0ee3b5e1e17db4b99f9dcd261a339cd84604051611f9291815260200190565b60405180910390a2509092915050565b5f5f611faf868686612866565b9050611fba83612925565b8015611fd557505f8480611fd057611fd0613a10565b868809115b1561084457611fe560018261389a565b9695505050505050565b5f516020613b805f395f51905f526001600160a01b0385166120265760405163e602df0560e01b81525f60048201526024016109ce565b6001600160a01b03841661204f57604051634a1406b160e11b81525f60048201526024016109ce565b6001600160a01b038086165f908152600183016020908152604080832093881683529290522083905581156120cc57836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040516120c391815260200190565b60405180910390a35b5050505050565b6120db611d93565b610d62838383612951565b5f6120f082610b3f565b9050805f0361211257604051630e26157960e11b815260040160405180910390fd5b5f61211b611485565b90505f6040518060600160405280612132856123a4565b6001600160c01b0316815260038401546020909101906121619061215c9063ffffffff164261389a565b6122f3565b63ffffffff90811682526003850154640100000000900481166020928301526001600160a01b0387165f8181528684526040908190208551815487870151888501518716600160e01b81026001600160e01b0392909816600160c01b81026001600160e01b03199094166001600160c01b03909516949094179290921716959095179091558151898152948501528301919091529192507fddc8760931d97309f92a4266c6046f83387e6407bcd727e7dd2130bfc430c4199060600160405180910390a250505050565b5f5f612235610753565b9050620f42408111156122545761224f620f424082613887565b61167c565b5f91505090565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f612285612cd2565b61228d612d3a565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6122d6610ade565b610aaf57604051638dfc202b60e01b815260040160405180910390fd5b5f63ffffffff821115612323576040516306dfcc6560e41b815260206004820152602481018390526044016109ce565b5090565b5f516020613be05f395f51905f52805461234c906001600160a01b0316863086612d7c565b6123568483612db5565b836001600160a01b0316856001600160a01b03167fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d785856040516120c3929190918252602082015260400190565b5f6001600160c01b03821115612323576040516306dfcc6560e41b815260c06004820152602481018390526044016109ce565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610d62908490612de9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610aaf57604051631afcd79f60e31b815260040160405180910390fd5b61247a612429565b5f516020613b805f395f51905f527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace036124b38482613a68565b50600481016115c48382613a68565b6124ca612429565b5f516020613bc05f395f51905f527fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1026125038482613a68565b50600381016125128382613a68565b505f8082556001909101555050565b612529612429565b5f516020613c005f395f51905f52805460ff19169055565b611323612429565b612551612429565b5f516020613be05f395f51905f525f8061256a84612e4a565b915091508161257a57601261257c565b805b83546001600160a81b031916600160a01b60ff92909216919091026001600160a01b031916176001600160a01b0394909416939093179091555050565b6125c1612429565b6125ca826116ea565b61128b81611cd5565b5f516020613be05f395f51905f526001600160a01b03868116908516146125ff576125ff84878461157a565b6126098483612f20565b805461261f906001600160a01b03168685612807565b836001600160a01b0316856001600160a01b0316876001600160a01b03167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db8686604051612677929190918252602082015260400190565b60405180910390a4505050505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156126c057505f91506003905082612745565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015612711573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b03811661273c57505f925060019150829050612745565b92505f91508190505b9450945094915050565b5f82600381111561276257612762613b23565b0361276b575050565b600182600381111561277f5761277f613b23565b0361279d5760405163f645eedf60e01b815260040160405180910390fd5b60028260038111156127b1576127b1613b23565b036127d25760405163fce698f760e01b8152600481018290526024016109ce565b60038260038111156127e6576127e6613b23565b0361128b576040516335e2f38360e21b8152600481018290526024016109ce565b6040516001600160a01b03838116602483015260448201839052610d6291859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050612f54565b5f838302815f1985870982811083820303915050805f0361289a5783828161289057612890613a10565b0492505050610993565b8084116128ba5760405163227bc15360e01b815260040160405180910390fd5b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b5f600282600381111561293a5761293a613b23565b6129449190613b37565b60ff166001149050919050565b5f6129675f516020613ba05f395f51905f525490565b90505f612972610753565b90506001600160a01b03841615612a26577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635d4654ec8383876129be89610b3f565b6040516001600160e01b031960e087901b168152600481019490945260248401929092526001600160a01b0316604483015260648201526084015f604051808303815f87803b158015612a0f575f5ffd5b505af1158015612a21573d5f5f3e3d5ffd5b505050505b6001600160a01b03851615801590612a505750836001600160a01b0316856001600160a01b031614155b15612cc7575f612a5f86610b3f565b604051631751953b60e21b815260048101859052602481018490526001600160a01b038881166044830152606482018390529192507f000000000000000000000000000000000000000000000000000000000000000090911690635d4654ec906084015f604051808303815f87803b158015612ad9575f5ffd5b505af1158015612aeb573d5f5f3e3d5ffd5b505050505f612af8611485565b6001600160a01b0388165f9081526020828152604091829020825160608101845290546001600160c01b038116825263ffffffff600160c01b82048116938301849052600160e01b90910416928101929092529192509015612cc3576001600160a01b038716612b8b57612b6b866123a4565b81518290612b7a9083906139d6565b6001600160c01b0316905250612bcc565b5f612b9e612b998886613887565b6123a4565b9050815f01516001600160c01b0316816001600160c01b03161015612bca576001600160c01b03811682525b505b80516001600160a01b0389165f908152602084905260409020546001600160c01b03908116911614612cc35780516001600160c01b03165f03612c17575f6020820181905260408201525b6001600160a01b0388165f81815260208481526040918290208451815486840151878601516001600160c01b039093166001600160e01b03199092168217600160c01b63ffffffff928316908102919091176001600160e01b0316600160e01b9290941691820293909317909355845190815292830152918101919091527fddc8760931d97309f92a4266c6046f83387e6407bcd727e7dd2130bfc430c4199060600160405180910390a25b5050505b6120cc858585612f68565b5f5f516020613bc05f395f51905f5281612cea6118b3565b805190915015612d0257805160209091012092915050565b81548015612d11579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b5f5f516020613bc05f395f51905f5281612d526118f1565b805190915015612d6a57805160209091012092915050565b60018201548015612d11579392505050565b6040516001600160a01b0384811660248301528381166044830152606482018390526115c49186918216906323b872dd90608401612834565b6001600160a01b038216612dde5760405163ec442f0560e01b81525f60048201526024016109ce565b61128b5f83836120d3565b5f612dfd6001600160a01b0384168361308e565b905080515f14158015612e21575080806020019051810190612e1f9190613b64565b155b15610d6257604051635274afe760e01b81526001600160a01b03841660048201526024016109ce565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b17905290515f918291829182916001600160a01b03871691612e90916139f5565b5f60405180830381855afa9150503d805f8114612ec8576040519150601f19603f3d011682016040523d82523d5f602084013e612ecd565b606091505b5091509150818015612ee157506020815110155b15612f14575f81806020019051810190612efb919061385c565b905060ff8111612f12576001969095509350505050565b505b505f9485945092505050565b6001600160a01b038216612f4957604051634b637e8f60e11b81525f60048201526024016109ce565b61128b825f836120d3565b5f612dfd6001600160a01b038416836130d1565b5f516020613b805f395f51905f526001600160a01b038416612fa25781816002015f828254612f97919061389a565b90915550612fff9050565b6001600160a01b0384165f9081526020829052604090205482811015612fe15784818460405163391434e360e21b81526004016109ce93929190613827565b6001600160a01b0385165f9081526020839052604090209083900390555b6001600160a01b03831661301d57600281018054839003905561303b565b6001600160a01b0383165f9081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161308091815260200190565b60405180910390a350505050565b606061078883835f6040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c656400008152506130de565b606061078883835f6131b5565b60608247101561313f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016109ce565b5f5f866001600160a01b0316858760405161315a91906139f5565b5f6040518083038185875af1925050503d805f8114613194576040519150601f19603f3d011682016040523d82523d5f602084013e613199565b606091505b50915091506131aa87838387613244565b979650505050505050565b6060814710156131da5760405163cd78605960e01b81523060048201526024016109ce565b5f5f856001600160a01b031684866040516131f591906139f5565b5f6040518083038185875af1925050503d805f811461322f576040519150601f19603f3d011682016040523d82523d5f602084013e613234565b606091505b5091509150611fe58683836132bc565b606083156132b25782515f036132ab576001600160a01b0385163b6132ab5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109ce565b5081610847565b6108478383613318565b6060826132d1576132cc82613342565b610993565b81511580156132e857506001600160a01b0384163b155b1561331157604051639996b31560e01b81526001600160a01b03851660048201526024016109ce565b5080610993565b8151156133285781518083602001fd5b8060405162461bcd60e51b81526004016109ce9190613452565b8051156133525780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6001600160a01b03811681146109e0575f5ffd5b5f5f60408385031215613390575f5ffd5b823561339b8161336b565b946020939093013593505050565b5f606082840312156133b9575f5ffd5b50919050565b5f5f5f5f60c085870312156133d2575f5ffd5b8435935060208501356133e48161336b565b9250604085013591506133fa86606087016133a9565b905092959194509250565b5f5b8381101561341f578181015183820152602001613407565b50505f910152565b5f815180845261343e816020860160208601613405565b601f01601f19169290920160200192915050565b602081525f6107886020830184613427565b5f60208284031215613474575f5ffd5b5035919050565b5f5f6040838503121561348c575f5ffd5b82356134978161336b565b915060208301356134a78161336b565b809150509250929050565b5f5f5f606084860312156134c4575f5ffd5b83356134cf8161336b565b925060208401356134df8161336b565b929592945050506040919091013590565b5f60208284031215613500575f5ffd5b81356109938161336b565b5f5f6040838503121561351c575f5ffd5b8235915060208301356134a78161336b565b60ff60f81b8816815260e060208201525f61354c60e0830189613427565b828103604084015261355e8189613427565b606084018890526001600160a01b038716608085015260a0840186905283810360c0850152845180825260208087019350909101905f5b818110156135b3578351835260209384019390920191600101613595565b50909b9a5050505050505050505050565b5f5f83601f8401126135d4575f5ffd5b50813567ffffffffffffffff8111156135eb575f5ffd5b602083019150836020828501011115613602575f5ffd5b9250929050565b5f5f5f5f5f5f5f5f60c0898b031215613620575f5ffd5b883561362b8161336b565b9750602089013567ffffffffffffffff811115613646575f5ffd5b6136528b828c016135c4565b909850965050604089013567ffffffffffffffff811115613671575f5ffd5b61367d8b828c016135c4565b90965094505060608901356136918161336b565b979a969950949793969295929450505060808201359160a0013590565b5f5f5f606084860312156136c0575f5ffd5b8335925060208401356136d28161336b565b915060408401356136e28161336b565b809150509250925092565b803560ff8116811461125d575f5ffd5b5f5f5f5f5f5f5f60e0888a031215613713575f5ffd5b873561371e8161336b565b9650602088013561372e8161336b565b9550604088013594506060880135935061374a608089016136ed565b9699959850939692959460a0840135945060c09093013592915050565b80151581146109e0575f5ffd5b5f5f60408385031215613785575f5ffd5b82356137908161336b565b915060208301356134a781613767565b5f5f5f60a084860312156137b2575f5ffd5b83356137bd8161336b565b9250602084013591506137d385604086016133a9565b90509250925092565b5f602082840312156137ec575f5ffd5b610788826136ed565b600181811c9082168061380957607f821691505b6020821081036133b957634e487b7160e01b5f52602260045260245ffd5b6001600160a01b039390931683526020830191909152604082015260600190565b634e487b7160e01b5f52604160045260245ffd5b5f6020828403121561386c575f5ffd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561078b5761078b613873565b8082018082111561078b5761078b613873565b6001815b60018411156138e8578085048111156138cc576138cc613873565b60018416156138da57908102905b60019390931c9280026138b1565b935093915050565b5f826138fe5750600161078b565b8161390a57505f61078b565b8160018114613920576002811461392a57613946565b600191505061078b565b60ff84111561393b5761393b613873565b50506001821b61078b565b5060208310610133831016604e8410600b8410161715613969575081810a61078b565b6139755f1984846138ad565b805f190482111561398857613988613873565b029392505050565b5f61078860ff8416836138f0565b60ff818116838216019081111561078b5761078b613873565b6001600160c01b03818116838216019081111561078b5761078b613873565b6001600160c01b03828116828216039081111561078b5761078b613873565b5f8251613a06818460208701613405565b9190910192915050565b634e487b7160e01b5f52601260045260245ffd5b601f821115610d6257805f5260205f20601f840160051c81016020851015613a495750805b601f840160051c820191505b818110156120cc575f8155600101613a55565b815167ffffffffffffffff811115613a8257613a82613848565b613a9681613a9084546137f5565b84613a24565b6020601f821160018114613ac8575f8315613ab15750848201515b5f19600385901b1c1916600184901b1784556120cc565b5f84815260208120601f198516915b82811015613af75787850151825560209485019460019092019101613ad7565b5084821015613b1457868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b5f52602160045260245ffd5b5f60ff831680613b5557634e487b7160e01b5f52601260045260245ffd5b8060ff84160691505092915050565b5f60208284031215613b74575f5ffd5b81516109938161376756fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0052c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1000773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e00cd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300a164736f6c634300081b000a00000000000000000000000014746b120a8d37e9911ee253abdf337ca385539b