[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AccessControlBadConfirmation", "type": "error" }, { "inputs": [ { "internalType": "uint48", "name": "schedule", "type": "uint48" } ], "name": "AccessControlEnforcedDefaultAdminDelay", "type": "error" }, { "inputs": [], "name": "AccessControlEnforcedDefaultAdminRules", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "defaultAdmin", "type": "address" } ], "name": "AccessControlInvalidDefaultAdmin", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "bytes32", "name": "neededRole", "type": "bytes32" } ], "name": "AccessControlUnauthorizedAccount", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" } ], "name": "AddressEmptyCode", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "AddressInsufficientBalance", "type": "error" }, { "inputs": [], "name": "ArithmeticError", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "newDebt", "type": "uint256" }, { "internalType": "uint256", "name": "debtCeiling", "type": "uint256" } ], "name": "CeilingExceeded", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "depositAmount", "type": "uint256" }, { "internalType": "uint256", "name": "supplyCap", "type": "uint256" } ], "name": "DepositSurpassesSupplyCap", "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": [], "name": "EnforcedPause", "type": "error" }, { "inputs": [], "name": "ExpectedPause", "type": "error" }, { "inputs": [], "name": "FailedInnerCall", "type": "error" }, { "inputs": [ { "internalType": "uint8", "name": "ilkIndex", "type": "uint8" }, { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "address", "name": "unconsentedOperator", "type": "address" } ], "name": "GemTransferWithoutConsent", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "ilkAddress", "type": "address" } ], "name": "IlkAlreadyAdded", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "ilkIndex", "type": "uint256" } ], "name": "IlkNotInitialized", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "InsufficientBalance", "type": "error" }, { "inputs": [], "name": "InvalidBurnAmount", "type": "error" }, { "inputs": [], "name": "InvalidIlkAddress", "type": "error" }, { "inputs": [], "name": "InvalidInitialization", "type": "error" }, { "inputs": [ { "internalType": "contract InterestRate", "name": "invalidInterestRateModule", "type": "address" } ], "name": "InvalidInterestRateModule", "type": "error" }, { "inputs": [], "name": "InvalidMintAmount", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "InvalidSender", "type": "error" }, { "inputs": [], "name": "InvalidTreasuryAddress", "type": "error" }, { "inputs": [], "name": "InvalidUnderlyingAddress", "type": "error" }, { "inputs": [], "name": "InvalidWhitelist", "type": "error" }, { "inputs": [], "name": "MathOverflowedMulDiv", "type": "error" }, { "inputs": [], "name": "MaxIlksReached", "type": "error" }, { "inputs": [], "name": "NotInitializing", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "from", "type": "uint256" }, { "internalType": "uint256", "name": "to", "type": "uint256" } ], "name": "NotScalingUp", "type": "error" }, { "inputs": [ { "internalType": "uint8", "name": "bits", "type": "uint8" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "SafeCastOverflowedUintDowncast", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "SafeCastOverflowedUintToInt", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "SafeERC20FailedOperation", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "self", "type": "address" } ], "name": "SelfTransfer", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "payer", "type": "address" }, { "internalType": "address", "name": "unconsentedOperator", "type": "address" } ], "name": "TakingWethWithoutConsent", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "newTotalDebtInVault", "type": "uint256" }, { "internalType": "uint256", "name": "collateral", "type": "uint256" }, { "internalType": "uint256", "name": "spot", "type": "uint256" } ], "name": "UnsafePositionChange", "type": "error" }, { "inputs": [ { "internalType": "uint8", "name": "ilkIndex", "type": "uint8" }, { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "address", "name": "unconsentedOperator", "type": "address" } ], "name": "UnsafePositionChangeWithoutConsent", "type": "error" }, { "inputs": [ { "internalType": "uint8", "name": "ilkIndex", "type": "uint8" }, { "internalType": "address", "name": "depositor", "type": "address" }, { "internalType": "address", "name": "unconsentedOperator", "type": "address" } ], "name": "UseOfCollateralWithoutConsent", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "amountLeft", "type": "uint256" }, { "internalType": "uint256", "name": "dust", "type": "uint256" } ], "name": "VaultCannotBeDusty", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" } ], "name": "AddOperator", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint8", "name": "ilkIndex", "type": "uint8" }, { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": true, "internalType": "address", "name": "recipient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amountOfNormalizedDebt", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "ilkRate", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalDebt", "type": "uint256" } ], "name": "Borrow", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint8", "name": "ilkIndex", "type": "uint8" }, { "indexed": true, "internalType": "address", "name": "u", "type": "address" }, { "indexed": false, "internalType": "address", "name": "v", "type": "address" }, { "indexed": true, "internalType": "address", "name": "w", "type": "address" }, { "indexed": false, "internalType": "int256", "name": "changeInCollateral", "type": "int256" }, { "indexed": false, "internalType": "int256", "name": "changeInNormalizedDebt", "type": "int256" } ], "name": "ConfiscateVault", "type": "event" }, { "anonymous": false, "inputs": [], "name": "DefaultAdminDelayChangeCanceled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint48", "name": "newDelay", "type": "uint48" }, { "indexed": false, "internalType": "uint48", "name": "effectSchedule", "type": "uint48" } ], "name": "DefaultAdminDelayChangeScheduled", "type": "event" }, { "anonymous": false, "inputs": [], "name": "DefaultAdminTransferCanceled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "newAdmin", "type": "address" }, { "indexed": false, "internalType": "uint48", "name": "acceptSchedule", "type": "uint48" } ], "name": "DefaultAdminTransferScheduled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint8", "name": "ilkIndex", "type": "uint8" }, { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": true, "internalType": "address", "name": "depositor", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "DepositCollateral", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint8", "name": "ilkIndex", "type": "uint8" }, { "indexed": false, "internalType": "uint256", "name": "newDebtCeiling", "type": "uint256" } ], "name": "IlkDebtCeilingUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint8", "name": "ilkIndex", "type": "uint8" }, { "indexed": false, "internalType": "uint256", "name": "newDust", "type": "uint256" } ], "name": "IlkDustUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint8", "name": "ilkIndex", "type": "uint8" }, { "indexed": true, "internalType": "address", "name": "ilkAddress", "type": "address" } ], "name": "IlkInitialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint8", "name": "ilkIndex", "type": "uint8" }, { "indexed": false, "internalType": "address", "name": "newSpot", "type": "address" } ], "name": "IlkSpotUpdated", "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": "newModule", "type": "address" } ], "name": "InterestRateModuleUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint8", "name": "ilkIndex", "type": "uint8" }, { "indexed": true, "internalType": "address", "name": "usr", "type": "address" }, { "indexed": false, "internalType": "int256", "name": "wad", "type": "int256" } ], "name": "MintAndBurnGem", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "treasury", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "supplyFactor", "type": "uint256" } ], "name": "MintToTreasury", "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": "user", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" } ], "name": "RemoveOperator", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint8", "name": "ilkIndex", "type": "uint8" }, { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": true, "internalType": "address", "name": "payer", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amountOfNormalizedDebt", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "ilkRate", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalDebt", "type": "uint256" } ], "name": "Repay", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": true, "internalType": "address", "name": "payer", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "rad", "type": "uint256" } ], "name": "RepayBadDebt", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } ], "name": "RoleAdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleGranted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleRevoked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": true, "internalType": "address", "name": "underlyingFrom", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "supplyFactor", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newDebt", "type": "uint256" } ], "name": "Supply", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "newSupplyCap", "type": "uint256" } ], "name": "SupplyCapUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint8", "name": "ilkIndex", "type": "uint8" }, { "indexed": true, "internalType": "address", "name": "src", "type": "address" }, { "indexed": true, "internalType": "address", "name": "dst", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "wad", "type": "uint256" } ], "name": "TransferGem", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "treasury", "type": "address" } ], "name": "TreasuryUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Unpaused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "newWhitelist", "type": "address" } ], "name": "WhitelistUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": true, "internalType": "address", "name": "target", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "supplyFactor", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newDebt", "type": "uint256" } ], "name": "Withdraw", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint8", "name": "ilkIndex", "type": "uint8" }, { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": true, "internalType": "address", "name": "recipient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "WithdrawCollateral", "type": "event" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "GEM_JOIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "ION", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "LIQUIDATOR_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PAUSE_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PERMIT_TYPEHASH", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "acceptDefaultAdminTransfer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "accrueInterest", "outputs": [ { "internalType": "uint256", "name": "newTotalDebt", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" } ], "name": "addOperator", "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": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "balanceOfUnaccrued", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newAdmin", "type": "address" } ], "name": "beginDefaultAdminTransfer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint8", "name": "ilkIndex", "type": "uint8" }, { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amountOfNormalizedDebt", "type": "uint256" }, { "internalType": "bytes32[]", "name": "proof", "type": "bytes32[]" } ], "name": "borrow", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "calculateRewardAndDebtDistribution", "outputs": [ { "internalType": "uint256", "name": "totalSupplyFactorIncrease", "type": "uint256" }, { "internalType": "uint256", "name": "totalTreasuryMintAmount", "type": "uint256" }, { "internalType": "uint104[]", "name": "rateIncreases", "type": "uint104[]" }, { "internalType": "uint256", "name": "totalDebtIncrease", "type": "uint256" }, { "internalType": "uint48[]", "name": "timestampIncreases", "type": "uint48[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint8", "name": "ilkIndex", "type": "uint8" } ], "name": "calculateRewardAndDebtDistributionForIlk", "outputs": [ { "internalType": "uint104", "name": "newRateIncrease", "type": "uint104" }, { "internalType": "uint48", "name": "timestampIncrease", "type": "uint48" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "cancelDefaultAdminTransfer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint48", "name": "newDelay", "type": "uint48" } ], "name": "changeDefaultAdminDelay", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint8", "name": "ilkIndex", "type": "uint8" }, { "internalType": "address", "name": "user", "type": "address" } ], "name": "collateral", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint8", "name": "ilkIndex", "type": "uint8" }, { "internalType": "address", "name": "u", "type": "address" }, { "internalType": "address", "name": "v", "type": "address" }, { "internalType": "address", "name": "w", "type": "address" }, { "internalType": "int256", "name": "changeInCollateral", "type": "int256" }, { "internalType": "int256", "name": "changeInNormalizedDebt", "type": "int256" } ], "name": "confiscateVault", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "defaultAdmin", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "defaultAdminDelay", "outputs": [ { "internalType": "uint48", "name": "", "type": "uint48" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "defaultAdminDelayIncreaseWait", "outputs": [ { "internalType": "uint48", "name": "", "type": "uint48" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint8", "name": "ilkIndex", "type": "uint8" }, { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "address", "name": "depositor", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bytes32[]", "name": "proof", "type": "bytes32[]" } ], "name": "depositCollateral", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint8", "name": "ilkIndex", "type": "uint8" } ], "name": "dust", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "slot", "type": "bytes32" } ], "name": "extsload", "outputs": [ { "internalType": "bytes32", "name": "value", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint8", "name": "ilkIndex", "type": "uint8" } ], "name": "getCurrentBorrowRate", "outputs": [ { "internalType": "uint256", "name": "borrowRate", "type": "uint256" }, { "internalType": "uint256", "name": "reserveFactor", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "ilkIndex", "type": "uint256" } ], "name": "getIlkAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "implementation", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_underlying", "type": "address" }, { "internalType": "address", "name": "_treasury", "type": "address" }, { "internalType": "uint8", "name": "decimals_", "type": "uint8" }, { "internalType": "string", "name": "name_", "type": "string" }, { "internalType": "string", "name": "symbol_", "type": "string" }, { "internalType": "address", "name": "initialDefaultAdmin", "type": "address" }, { "internalType": "contract InterestRate", "name": "_interestRateModule", "type": "address" }, { "internalType": "contract Whitelist", "name": "_whitelist", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "ilkAddress", "type": "address" } ], "name": "initializeIlk", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isAllowed", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint8", "name": "ilkIndex", "type": "uint8" }, { "internalType": "address", "name": "usr", "type": "address" }, { "internalType": "int256", "name": "wad", "type": "int256" } ], "name": "mintAndBurnGem", "outputs": [], "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": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "normalizedBalanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint8", "name": "ilkIndex", "type": "uint8" }, { "internalType": "address", "name": "user", "type": "address" } ], "name": "normalizedDebt", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "normalizedTotalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "normalizedTotalSupplyUnaccrued", "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": [], "name": "pendingDefaultAdmin", "outputs": [ { "internalType": "address", "name": "newAdmin", "type": "address" }, { "internalType": "uint48", "name": "schedule", "type": "uint48" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pendingDefaultAdminDelay", "outputs": [ { "internalType": "uint48", "name": "newDelay", "type": "uint48" }, { "internalType": "uint48", "name": "schedule", "type": "uint48" } ], "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": "uint8", "name": "ilkIndex", "type": "uint8" } ], "name": "rate", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" } ], "name": "removeOperator", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint8", "name": "ilkIndex", "type": "uint8" }, { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "address", "name": "payer", "type": "address" }, { "internalType": "uint256", "name": "amountOfNormalizedDebt", "type": "uint256" } ], "name": "repay", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "uint256", "name": "rad", "type": "uint256" } ], "name": "repayBadDebt", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "rollbackDefaultAdminDelay", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bytes32[]", "name": "proof", "type": "bytes32[]" } ], "name": "supply", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "supplyFactor", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "supplyFactorUnaccrued", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupplyUnaccrued", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint8", "name": "ilkIndex", "type": "uint8" }, { "internalType": "address", "name": "src", "type": "address" }, { "internalType": "address", "name": "dst", "type": "address" }, { "internalType": "uint256", "name": "wad", "type": "uint256" } ], "name": "transferGem", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "treasury", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "underlying", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint8", "name": "ilkIndex", "type": "uint8" }, { "internalType": "uint256", "name": "newCeiling", "type": "uint256" } ], "name": "updateIlkDebtCeiling", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint8", "name": "ilkIndex", "type": "uint8" }, { "internalType": "uint256", "name": "newDust", "type": "uint256" } ], "name": "updateIlkDust", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint8", "name": "ilkIndex", "type": "uint8" }, { "internalType": "contract SpotOracle", "name": "newSpot", "type": "address" } ], "name": "updateIlkSpot", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract InterestRate", "name": "_interestRateModule", "type": "address" } ], "name": "updateInterestRateModule", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newSupplyCap", "type": "uint256" } ], "name": "updateSupplyCap", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newTreasury", "type": "address" } ], "name": "updateTreasury", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract Whitelist", "name": "_whitelist", "type": "address" } ], "name": "updateWhitelist", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint8", "name": "ilkIndex", "type": "uint8" }, { "internalType": "address", "name": "user", "type": "address" } ], "name": "vault", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "receiverOfUnderlying", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "withdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint8", "name": "ilkIndex", "type": "uint8" }, { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "withdrawCollateral", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
60a06040523060805234801562000014575f80fd5b506200001f62000025565b620000d9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000765760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d65780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051615c3d620000f25f395f61068c0152615c3d5ff3fe608060405234801561000f575f80fd5b506004361061046f575f3560e01c80638456cb591161024d578063a9059cbb11610140578063d547741f116100bf578063e5a97f0711610084578063e5a97f0714610a5f578063e862114a14610a72578063efff005f14610a85578063f09b808d14610a98578063f3fef3a314610aa0575f80fd5b8063d547741f14610a0a578063d602b9fd14610a1d578063d831efd814610a25578063dcec05bf14610a38578063dd62ed3e14610a4c575f80fd5b8063c358b49a11610105578063c358b49a146109b1578063cc8463c8146109b9578063cefc1429146109c1578063cf6eefb7146109c9578063d505accf146109f7575f80fd5b8063a9059cbb1461095d578063ac8a584a14610970578063b827735f14610983578063b85e868e14610996578063c0cc5edf1461099e575f80fd5b806397939743116101cc578063a217fddf11610191578063a217fddf146108ef578063a36f653d146108f6578063a6afed9514610909578063a716272814610911578063a778d7b314610924575f80fd5b8063979397431461087c5780639870d7fe1461088f5780639a3db79b146108a2578063a1654379146108b5578063a1eda53c146108c8575f80fd5b80638fb5400e116102125780638fb5400e14610828578063918a2f421461083b57806391d148541461084e5780639306f2f81461086157806395d89b4114610874575f80fd5b80638456cb59146107ea5780638459b437146107f257806384ef8ffc146108055780638ba765071461080d5780638da5cb5b14610820575f80fd5b80633ea7ddda116103655780636908d3df116102e45780637638eb42116102a95780637638eb42146107855780637886fe2f146107985780637ca5643d146107b15780637ecebe00146107c45780637f51bb1f146107d7575f80fd5b80636908d3df1461071c5780636f307dc3146107445780636f424d761461074c57806370a082311461075f578063743f9c0c14610772575f80fd5b80635c975abb1161032a5780635c975abb146106c45780635d451d39146106db57806361d027b3146106ee578063634e93da146106f6578063649a5ec714610709575f80fd5b80633ea7ddda146106355780633f4ba83a1461065c5780634f1a43e31461066457806357fc90b2146106775780635c60da1b1461068a575f80fd5b80631e2eaeaf116103f1578063313ce567116103b6578063313ce567146105bb57806336568abe146105d5578063389ed267146105e85780633c04b5471461060f5780633d0f963e14610622575f80fd5b80631e2eaeaf1461054957806323b872dd1461055b578063248a9ca31461056e5780632f2ff15d1461058157806330adf81f14610594575f80fd5b8063095ea7b311610437578063095ea7b3146104f55780630aa6220b146105085780631059c5331461051257806316d8887a1461051a57806318160ddd14610541575f80fd5b806301ffc9a714610473578063022d63fb1461049b578063023da9f9146104b757806306fdde03146104d8578063070a9645146104ed575b5f80fd5b610486610481366004614f01565b610ab3565b60405190151581526020015b60405180910390f35b620697805b60405165ffffffffffff9091168152602001610492565b6104ca6104c5366004614f3c565b610add565b604051908152602001610492565b6104e0610b08565b6040516104929190614f79565b6104ca610ba6565b610486610503366004614fab565b610bd8565b610510610bed565b005b6104ca610c02565b6104ca7f5e17fc5225d4a099df75359ce1f405503ca79498a8dc46a7d583235a0ee45c1681565b6104ca610c34565b6104ca610557366004614fd5565b5490565b610486610569366004614fec565b610c95565b6104ca61057c366004614fd5565b610cf1565b61051061058f36600461502a565b610d11565b6104ca7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6105c3610d3d565b60405160ff9091168152602001610492565b6105106105e336600461502a565b610d58565b6104ca7f139c2898040ef16910dc9f44dc697df79363da767d8bc92f2e310312b816e46d81565b6104ca61061d36600461506d565b610e1f565b610510610630366004614f3c565b610e8b565b6104ca7fc8e63ee95f263967af737f71b1c5d180e676a7f8b91a501b355a526a9a8fe3eb81565b610510610f2e565b610510610672366004614f3c565b610fbb565b6104ca610685366004615086565b6110ef565b7f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b039091168152602001610492565b5f80516020615bc88339815191525460ff16610486565b6104ca6106e9366004614f3c565b61112e565b6106ac611164565b610510610704366004614f3c565b611181565b6105106107173660046150b0565b611194565b61072f61072a36600461506d565b6111a7565b60408051928352602083019190915201610492565b6106ac6112d9565b6104ca61075a366004615086565b6112f3565b6104ca61076d366004614f3c565b61132f565b6105106107803660046150d5565b61137d565b610510610793366004615086565b611406565b6107a06114ad565b604051610492959493929190615121565b6105106107bf366004615205565b611630565b6104ca6107d2366004614f3c565b6117bb565b6105106107e5366004614f3c565b6117e6565b610510611880565b6105106108003660046150d5565b6118bb565b6106ac611958565b6104ca61081b36600461506d565b611973565b6106ac6119ae565b610510610836366004614f3c565b6119bc565b61051061084936600461525d565b611bc8565b61048661085c36600461502a565b611cff565b61051061086f366004615320565b611d35565b6104e0611e4e565b61051061088a366004615401565b611e6a565b61051061089d366004614f3c565b6120b2565b61072f6108b0366004615086565b612111565b6104866108c3366004615469565b61215b565b6108d06121a1565b6040805165ffffffffffff938416815292909116602083015201610492565b6104ca5f81565b610510610904366004615485565b612210565b6104ca612292565b61051061091f36600461549f565b6122a3565b61093761093236600461506d565b61237f565b604080516001600160681b03909316835265ffffffffffff909116602083015201610492565b61048661096b366004614fab565b6123a0565b61051061097e366004614f3c565b6123e2565b610510610991366004615526565b612440565b6104ca612629565b6105106109ac3660046150d5565b612673565b6104ca61279c565b6104a06127b0565b610510612828565b6109d1612867565b604080516001600160a01b03909316835265ffffffffffff909116602083015201610492565b610510610a053660046155f3565b612894565b610510610a1836600461502a565b612a6e565b610510612a96565b610510610a33366004614fab565b612aa8565b6104ca5f80516020615b4883398151915281565b6104ca610a5a366004615469565b612b81565b610510610a6d366004614fd5565b612bbb565b610510610a80366004615485565b612c15565b6106ac610a93366004614fd5565b612c97565b6104ca612cb0565b610510610aae366004614fab565b612cc4565b5f6001600160e01b031982166318a4c3c360e11b1480610ad75750610ad782612d55565b92915050565b5f80610ae7612d89565b6001600160a01b039093165f90815260069093016020525050604090205490565b60605f610b13612d89565b9050806001018054610b249061565c565b80601f0160208091040260200160405190810160405280929190818152602001828054610b509061565c565b8015610b9b5780601f10610b7257610100808354040283529160200191610b9b565b820191905f5260205f20905b815481529060010190602001808311610b7e57829003601f168201915b505050505091505090565b5f80610bb0612d89565b90505f610bbb6114ad565b505050509050808260050154610bd191906156a8565b9250505090565b5f610be4338484612dad565b50600192915050565b5f610bf781612e72565b610bff612e7c565b50565b5f80610c0c612d89565b60048101549091505f819003610c24575f9250505090565b6005820154610bd1908290612e88565b5f80610c3e612d89565b60048101549091505f819003610c56575f9250505090565b5f80610c606114ad565b5050509150915080610c82838660050154610c7b91906156a8565b8590612e88565b610c8c91906156a8565b94505050505090565b5f610ca1843384612e9f565b610cac848484612f14565b826001600160a01b0316846001600160a01b03165f80516020615b8883398151915284604051610cde91815260200190565b60405180910390a35060015b9392505050565b5f9081525f80516020615ba8833981519152602052604090206001015490565b81610d2f57604051631fe1e13d60e11b815260040160405180910390fd5b610d398282613049565b5050565b5f80610d47612d89565b54600160a01b900460ff1692915050565b5f80516020615b6883398151915282158015610d8c5750610d77611958565b6001600160a01b0316826001600160a01b0316145b15610e10575f80610d9b612867565b90925090506001600160a01b038216151580610dbd575065ffffffffffff8116155b80610dd057504265ffffffffffff821610155b15610dfd576040516319ca5ebb60e01b815265ffffffffffff821660048201526024015b60405180910390fd5b5050805465ffffffffffff60a01b191681555b610e1a8383613065565b505050565b5f80610e29613098565b90505f610e358461237f565b506001600160681b0316905080825f018560ff1681548110610e5957610e596156bb565b5f918252602090912060049091020154610e839190600160681b90046001600160681b03166156a8565b949350505050565b5f80516020615b48833981519152610ea281612e72565b6001600160a01b038216610ec957604051635c4ff00360e11b815260040160405180910390fd5b5f610ed2613098565b600c810180546001600160a01b0319166001600160a01b0386169081179091556040519081529091507f86eba8651458cc924e4911e8a0a31258558de0474fdc43da05cea932cf130aad906020015b60405180910390a1505050565b5f80516020615b48833981519152610f4581612e72565b610f4d6130bc565b5f610f56613098565b80549091505f5b81811015610fb55742835f018281548110610f7a57610f7a6156bb565b5f9182526020909120600490910201805465ffffffffffff92909216600160d01b026001600160d01b03909216919091179055600101610f5d565b50505050565b5f80516020615b48833981519152610fd281612e72565b6001600160a01b0382166110045760405163397b518b60e01b81526001600160a01b0383166004820152602401610df4565b5f61100d613098565b9050805f0180549050836001600160a01b03166348d4b4876040518163ffffffff1660e01b8152600401602060405180830381865afa158015611052573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061107691906156cf565b1461109f5760405163397b518b60e01b81526001600160a01b0384166004820152602401610df4565b600b810180546001600160a01b0319166001600160a01b0385169081179091556040519081527fad74a16b1bf6b1857f574482614816fe1f79ae6b578f5374e9ce760a2ede778690602001610f21565b5f806110f9613098565b60ff85165f9081526003909101602090815260408083206001600160a01b038716845290915290206001015491505092915050565b5f80611138612d89565b60058101546001600160a01b0385165f908152600683016020526040902054919250610cea9190612e88565b5f8061116e612d89565b600301546001600160a01b031692915050565b5f61118b81612e72565b610d398261311b565b5f61119e81612e72565b610d398261318d565b5f805f6111b2613098565b90505f6111bd610c02565b90505f825f018660ff16815481106111d7576111d76156bb565b5f918252602082206004909102015484546001600160681b039091169250849060ff891690811061120a5761120a6156bb565b5f91825260208220600490910201546001600160681b03600160681b90910416915061123682846156e6565b600b86015460405163fe4bab4360e01b815260ff8b16600482015260248101839052604481018790529192506001600160a01b03169063fe4bab43906064016040805180830381865afa15801561128f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112b391906156fd565b90975095506112cd676765c793fa10079d601b1b886156a8565b96505050505050915091565b5f806112e3612d89565b546001600160a01b031692915050565b5f806112fd613098565b60ff85165f9081526003909101602090815260408083206001600160a01b038716845290915290205491505092915050565b5f80611339612d89565b90505f6113446114ad565b505050509050610e8381836005015461135d91906156a8565b6001600160a01b0386165f90815260068501602052604090205490612e88565b6113856131fc565b61138d61322c565b506113ad8484845f61139e866133b6565b6113a79061571f565b5f6133e6565b5050816001600160a01b0316836001600160a01b03168560ff167f4363355d2aba118cce1b43c1cae9804f170e1cb6ede1116d421898bffef033a9846040516113f891815260200190565b60405180910390a450505050565b5f80516020615b4883398151915261141d81612e72565b5f611426613098565b905082815f018560ff1681548110611440576114406156bb565b5f9182526020918290206004919091020160010180546001600160a01b0319166001600160a01b03938416179055604051918516825260ff8616917f19df743a62793f3366940d678082fc6bc7926c06b86cd00dced146172870cbd691015b60405180910390a250505050565b5f8060605f60605f6114bd613098565b80549091508067ffffffffffffffff8111156114db576114db6152db565b604051908082528060200260200182016040528015611504578160200160208202803683370190505b5094508067ffffffffffffffff811115611520576115206152db565b604051908082528060200260200182016040528015611549578160200160208202803683370190505b5092505f611555610c02565b90505f5b828160ff161015611625575f805f805f6115738688613974565b945094509450945094505f8165ffffffffffff16111561161557828c8760ff16815181106115a3576115a36156bb565b60200260200101906001600160681b031690816001600160681b031681525050808a8760ff16815181106115d9576115d96156bb565b65ffffffffffff909216602092830291909101909101526115fa828c6156a8565b9a50611606858f6156a8565b9d50611612848e6156a8565b9c505b8560010195505050505050611559565b505050509091929394565b6116386131fc565b838282808060200260200160405190810160405280939291908181526020018383602002808284375f920182905250925061167591506130989050565b600c810154604051631db4866560e01b81529192506001600160a01b031690631db48665906116ac90339087908790600401615772565b602060405180830381865afa1580156116c7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116eb919061579d565b505f6116f561322c565b90505f611700613098565b905087816008015f82825461171591906156a8565b909155505f90506117278a338b613c02565b600983015490915080611738610c34565b111561176157604051634f453d2760e11b8152600481018b905260248101829052604401610df4565b604080518b815260208101849052808201869052905133916001600160a01b038e16917feeb36d8164983f8a9f179702390cae566b9dfbea2d9df6344a56dbbccb428cf49181900360600190a35050505050505050505050565b5f806117c5612d89565b6001600160a01b039093165f90815260089093016020525050604090205490565b5f80516020615b488339815191526117fd81612e72565b6001600160a01b0382166118245760405163cfe2ea6360e01b815260040160405180910390fd5b5f61182d612d89565b6003810180546001600160a01b0319166001600160a01b0386169081179091556040519081529091507f8a3509a4057c89a5993a4a3140c2ebf7e829d325d8998eaa6c48adcff98b2cef90602001610f21565b7f139c2898040ef16910dc9f44dc697df79363da767d8bc92f2e310312b816e46d6118aa81612e72565b6118b261322c565b50610bff613c9a565b6118c36131fc565b6118cb61322c565b505f806118ed86865f875f6118df896133b6565b6118e89061571f565b6133e6565b604080518681526001600160681b038416602082015290810182905291935091506001600160a01b03808616919087169060ff8916907f406d000a5cb1dc8c35a7c089a430fac3d79fdbb8b3e37ee6a8707ce9d4ff46e69060600160405180910390a4505050505050565b5f80516020615be8833981519152546001600160a01b031690565b5f8061197d613098565b9050805f018360ff1681548110611996576119966156bb565b905f5260205f20906004020160030154915050919050565b5f6119b7611958565b905090565b5f80516020615b488339815191526119d381612e72565b5f6119dc613098565b90506001600160a01b038316611a0557604051633a49766560e01b815260040160405180910390fd5b611a126001820184613ce2565b611a3a5760405163186b96a960e21b81526001600160a01b0384166004820152602401610df4565b8054611a4860ff60016156a8565b8110611a67576040516361d73a8560e01b815260040160405180910390fd5b6040805160c0810182525f8082526020808301828152938301828152606084018381526080850184815260a08601858152895460018082018c558b8852958720885160049092020180549951955165ffffffffffff16600160d01b026001600160d01b036001600160681b03978816600160681b026001600160d01b0319909c1697909316969096179990991716939093178755905192860180546001600160a01b039094166001600160a01b03199094169390931790925590516002850155516003909301929092558354839290859060ff8516908110611b4b57611b4b6156bb565b5f91825260208220600490910201805465ffffffffffff4216600160d01b026001600160681b0390911617676765c793fa10079d60831b1781556040519092506001600160a01b0389169160ff8616917f15a7f70e00454c5cbf91f222531e25be8763187b123c94b14c64fe949726dc459190a350505050505050565b611bd06131fc565b85858383808060200260200160405190810160405280939291908181526020018383602002808284375f9201829052509250611c0e91506130989050565b600c81015460405163b5406b3d60e01b81529192506001600160a01b03169063b5406b3d90611c479087903390889088906004016157bc565b602060405180830381865afa158015611c62573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c86919061579d565b50611c8f61322c565b50611ca08a8a8a5f6113a78c6133b6565b5050876001600160a01b0316896001600160a01b03168b60ff167fc125b447f095d22865ad610ebdc8ae9eff252e7d7011ca37e783c98a53970bc48a604051611ceb91815260200190565b60405180910390a450505050505050505050565b5f9182525f80516020615ba8833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b611d3d6131fc565b8484825f611d49613098565b600c81015460405163b5406b3d60e01b81529192506001600160a01b03169063b5406b3d90611d829087903390889088906004016157bc565b602060405180830381865afa158015611d9d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dc1919061579d565b50611dca61322c565b505f80611dde8b8b5f8c5f6118e88e6133b6565b604080518b81526001600160681b038416602082015290810182905291935091506001600160a01b03808b1691908c169060ff8e16907fe3e92e977f830d2a0b92c58e8866694b5dc929a35e2b95846f427de0f0bb412f9060600160405180910390a45050505050505050505050565b60605f611e59612d89565b9050806002018054610b249061565c565b611e726131fc565b7f5e17fc5225d4a099df75359ce1f405503ca79498a8dc46a7d583235a0ee45c16611e9c81612e72565b611ea461322c565b505f611eae613098565b60ff89165f81815260038301602090815260408083206001600160a01b038d1684529091528120835493945092909184918110611eed57611eed6156bb565b5f918252602090912060049091020180548354919250600160681b90046001600160681b031690611f1e9088613cf6565b83556001830154611f2f9087613cf6565b60018401558154611f5290611f4d906001600160681b031688613cf6565b613d51565b82546cffffffffffffffffffffffffff19166001600160681b039182161783555f90611f8190889084166157f0565b60ff8d165f90815260048701602090815260408083206001600160a01b038f168452909152902054909150611fb69089613d84565b856004015f8e60ff1681526020019081526020015f205f8c6001600160a01b03166001600160a01b031681526020019081526020015f2081905550612020856005015f8b6001600160a01b03166001600160a01b031681526020019081526020015f205482613d84565b6001600160a01b038a165f908152600587016020526040902055600a8501546120499082613d84565b85600a0181905550886001600160a01b03168b6001600160a01b03168d60ff167f196d7e6690c90edaf3483b0e23c0043895364c7ff093bb21292343c17020a1088d8c8c60405161209c9392919061581f565b60405180910390a4505050505050505050505050565b5f6120bb613098565b335f81815260068301602090815260408083206001600160a01b03881680855292528083206001905551939450927f51778c51d58ce676f156168a160fc5e14ad3c40027f7d6bf7ce613de46dda9a09190a35050565b5f805f61211c613098565b60ff86165f908152600391909101602090815260408083206001600160a01b0388168452909152902080546001909101549093509150505b9250929050565b5f80612165613098565b6001600160a01b038581165f81815260068401602090815260408083209489168084529490915290205492935014600190911417949350505050565b5f80516020615be8833981519152545f90600160d01b900465ffffffffffff165f80516020615b6883398151915281158015906121e657504265ffffffffffff831610155b6121f1575f80612207565b6001810154600160a01b900465ffffffffffff16825b92509250509091565b5f80516020615b4883398151915261222781612e72565b5f612230613098565b905082815f018560ff168154811061224a5761224a6156bb565b905f5260205f209060040201600201819055508360ff167f8867ae66007046a7ea4546c9cbb61f764adf577521a9831db2d82ec3d60bafbc8460405161149f91815260200190565b5f61229b6131fc565b6119b761322c565b7fc8e63ee95f263967af737f71b1c5d180e676a7f8b91a501b355a526a9a8fe3eb6122cd81612e72565b6122d56131fc565b5f6122de613098565b60ff86165f90815260048201602090815260408083206001600160a01b03891684529091529020549091506123139084613cf6565b60ff86165f81815260048401602090815260408083206001600160a01b038a1680855292529182902093909355517fe728fa61c700a3632cfd3973376b45b5f0bfdb3c2ea1946fd6d4fcda49e1d42f906123709087815260200190565b60405180910390a35050505050565b5f806123928361238d610c02565b613974565b919791965090945050505050565b5f6123ac338484612f14565b6040518281526001600160a01b0384169033905f80516020615b888339815191529060200160405180910390a350600192915050565b5f6123eb613098565b335f81815260068301602090815260408083206001600160a01b038816808552925280832083905551939450927fb157cf3e9ae29eb366b3bdda54b41d4738ada5daa73f8d2f1bef6280bb1418e49190a35050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f811580156124855750825b90505f8267ffffffffffffffff1660011480156124a15750303b155b9050811580156124af575080155b156124cd5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156124f757845460ff60401b1916600160401b1785555b6125015f89613dde565b61250e8d8d8d8d8d613df0565b6125255f80516020615b4883398151915289613f04565b505f61252f613098565b600b810180546001600160a01b038b81166001600160a01b03199283168117909355600c84018054918c16919092161790556040519081529091507fad74a16b1bf6b1857f574482614816fe1f79ae6b578f5374e9ce760a2ede77869060200160405180910390a16040516001600160a01b03881681527f86eba8651458cc924e4911e8a0a31258558de0474fdc43da05cea932cf130aad9060200160405180910390a150831561261a57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050505050565b5f80612633612d89565b90505f8061263f6114ad565b505050915091505f61266183856005015461265a91906156a8565b8390613f70565b9050808460040154610c8c91906156a8565b61267b6131fc565b612685833361215b565b6126bc57604051631dda4a7d60e01b815260ff851660048201526001600160a01b0384166024820152336044820152606401610df4565b5f6126c5613098565b60ff86165f90815260048201602090815260408083206001600160a01b0389168452909152812080549293508492909190612701908490615840565b909155505060ff85165f90815260048201602090815260408083206001600160a01b03871684529091528120805484929061273d9084906156a8565b92505081905550826001600160a01b0316846001600160a01b03168660ff167fd511a95568d89bafbaf4849c74af18618e15f0c4aaeaa0a5212564935063723f8560405161278d91815260200190565b60405180910390a45050505050565b5f806127a6612d89565b6005015492915050565b5f80516020615be8833981519152545f905f80516020615b6883398151915290600160d01b900465ffffffffffff1680158015906127f557504265ffffffffffff8216105b61280f578154600160d01b900465ffffffffffff16610bd1565b5060010154600160a01b900465ffffffffffff16919050565b5f612831612867565b509050336001600160a01b0382161461285f57604051636116401160e11b8152336004820152602401610df4565b610bff613f87565b5f80516020615b68833981519152546001600160a01b03811691600160a01b90910465ffffffffffff1690565b834211156128b85760405163313c898160e11b815260048101859052602401610df4565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886128e68c614020565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f612960610b08565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c0016040516020818303038152906040528051906020012090505f612a00828460405161190160f01b8152600281019290925260228201526042902090565b90505f612a0f82888888614053565b90508a6001600160a01b0316816001600160a01b031614612a56576040516325c0072360e11b81526001600160a01b0380831660048301528c166024820152604401610df4565b612a618b8b8b612dad565b5050505050505050505050565b81612a8c57604051631fe1e13d60e11b815260040160405180910390fd5b610d39828261407f565b5f612aa081612e72565b610bff61409b565b612ab06131fc565b5f612ab9613098565b6001600160a01b0384165f908152600582016020526040812080549293508492909190612ae7908490615840565b925050819055508181600a015f828254612b019190615840565b9250508190555081816007015f828254612b1b9190615840565b90915550612b3c905033612b2e846133b6565b612b379061571f565b6140a5565b60405182815233906001600160a01b038516907f88bdc625ef6cf9ddf1e8078b975bd3079c95fa9c9ea2cfc3312e4ad53acb4a6d9060200160405180910390a3505050565b5f80612b8b612d89565b6001600160a01b039485165f90815260079190910160209081526040808320959096168252939093525050205490565b5f80516020615b48833981519152612bd281612e72565b5f612bdb613098565b600981018490556040518481529091507f4e44c8be34d12f1b7f56b13b4bbe97e64ca37a91916f86c73412da80c21748e290602001610f21565b5f80516020615b48833981519152612c2c81612e72565b5f612c35613098565b905082815f018560ff1681548110612c4f57612c4f6156bb565b905f5260205f209060040201600301819055508360ff167ff91e5e89199cb20fefcea995829cab2d6a5afb4a343b4438335f4e5f69173f098460405161149f91815260200190565b5f80612ca1613098565b9050610cea600182018461419c565b5f80612cba612d89565b6004015492915050565b612ccc6131fc565b5f612cd561322c565b90505f612ce0613098565b905082816008015f828254612cf59190615840565b909155505f9050612d073386866141a7565b60408051868152602081018390529081018590529091506001600160a01b0386169033907febff2602b3f468259e1e99f613fed6691f3a6526effe6ef3e768ba7ae7a36c4f90606001612370565b5f6001600160e01b03198216637965db0b60e01b1480610ad757506301ffc9a760e01b6001600160e01b0319831614610ad7565b7fdb3a0d63a7808d7d0422c40bb62354f42bff7602a547c329c1453dbcbeef490090565b6001600160a01b038316612dd65760405163e602df0560e01b81525f6004820152602401610df4565b6001600160a01b038216612dff57604051634a1406b160e11b81525f6004820152602401610df4565b5f612e08612d89565b6001600160a01b038581165f8181526007840160209081526040808320948916808452948252918290208790559051868152939450919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050565b610bff8133614230565b612e865f80614269565b565b5f610cea8383676765c793fa10079d601b1b614341565b5f612eaa8484612b81565b905081811015612ed357828183604051637dc7a0d960e11b8152600401610df49392919061581f565b8181035f612edf612d89565b6001600160a01b039687165f908152600790910160209081526040808320979098168252959095525093909220929092555050565b6001600160a01b038316612f3d57604051634b637e8f60e11b81525f6004820152602401610df4565b6001600160a01b038216612f665760405163ec442f0560e01b81525f6004820152602401610df4565b816001600160a01b0316836001600160a01b031603612fa35760405163514ae31560e01b81526001600160a01b0384166004820152602401610df4565b5f612fac612d89565b60058101549091505f612fbf8483613f70565b6001600160a01b0387165f908152600685016020526040902054909150818110156130035786818360405163391434e360e21b8152600401610df49392919061581f565b6001600160a01b038088165f90815260068601602052604080822085850390559188168152908120805484929061303b9084906156a8565b909155505050505050505050565b61305282610cf1565b61305b81612e72565b610fb58383613f04565b6001600160a01b038116331461308e5760405163334bd91960e11b815260040160405180910390fd5b610e1a8282614400565b7fceba3d526b4d5afd91d1b752bf1fd37917c20a6daf576bcb41dd1c57c1f67e0090565b6130c4614457565b5f80516020615bc8833981519152805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b5f6131246127b0565b61312d42614486565b6131379190615853565b905061314382826144b8565b60405165ffffffffffff821681526001600160a01b038316907f3377dc44241e779dd06afab5b788a35ca5f3b778836e2990bdb26a2a4b2e5ed69060200160405180910390a25050565b5f61319782614542565b6131a042614486565b6131aa9190615853565b90506131b68282614269565b6040805165ffffffffffff8085168252831660208201527ff1038c18cf84a56e432fdbfaf746924b7ea511dfe03a6506a0ceba4888788d9b910160405180910390a15050565b5f80516020615bc88339815191525460ff1615612e865760405163d93c066560e01b815260040160405180910390fd5b5f80613236613098565b90505f613241610c02565b82549091505f9081908190815b818160ff16101561336f575f805f805f613268868c613974565b945094509450945094505f8165ffffffffffff16111561335f575f8c5f018760ff168154811061329a5761329a6156bb565b905f5260205f209060040201905083815f01600d8282829054906101000a90046001600160681b03166132cd9190615872565b92506101000a8154816001600160681b0302191690836001600160681b0316021790555081815f01601a8282829054906101000a900465ffffffffffff166133159190615853565b92506101000a81548165ffffffffffff021916908365ffffffffffff160217905550828961334391906156a8565b985061334f868c6156a8565b9a5061335b858b6156a8565b9950505b856001019550505050505061324e565b5081866007015461338091906156a8565b6007870181905596506133a48461339561279c565b61339f91906156a8565b614589565b6133ad8361459c565b50505050505090565b5f6001600160ff1b038211156133e25760405163123baf0360e11b815260048101839052602401610df4565b5090565b5f805f6133f1613098565b9050805f018960ff168154811061340a5761340a6156bb565b5f91825260208220600490910201546001600160681b03600160681b90910416935083900361345157604051637a42d32b60e11b815260ff8a166004820152602401610df4565b60ff89165f90815260038201602090815260408083206001600160a01b038c168452825291829020825180840190935280548084526001909101549183019190915261349d9087613cf6565b815260208101516134ae9086613cf6565b602082015281545f906134f390611f4d90859060ff8f169081106134d4576134d46156bb565b5f9182526020909120600490910201546001600160681b031688613cf6565b90505f8260200151866001600160681b031661350f91906156e6565b90506135615f8813855f018e60ff168154811061352e5761352e6156bb565b905f5260205f20906004020160020154886001600160681b0316856001600160681b031661355c91906156e6565b111690565b156135c75761357c6001600160681b038088169084166156e6565b845f018d60ff1681548110613593576135936156bb565b905f5260205f20906004020160020154604051631604695560e31b8152600401610df4929190918252602082015260400190565b5f845f018d60ff16815481106135df576135df6156bb565b905f5260205f2090600402016001015f9054906101000a90046001600160a01b03166001600160a01b0316632b37269c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561363c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061366091906156cf565b90506136856136725f8a135f8c121790565b855161367f9084906156e6565b84111690565b156136b7578351604051631e09d3a360e31b815260048101849052602481019190915260448101829052606401610df4565b6136d66136c75f8a135f8c121790565b6136d18e3361215b565b151690565b1561370e576040516315df6de160e31b815260ff8e1660048201526001600160a01b038d166024820152336044820152606401610df4565b61371e5f8a136136d18d3361215b565b156137565760405163f7c30b4560e01b815260ff8e1660048201526001600160a01b038c166024820152336044820152606401610df4565b6137665f89126136d18c3361215b565b156137955760405163e236d98560e01b81526001600160a01b038b166004820152336024820152604401610df4565b6137cd84602001515f1415865f018f60ff16815481106137b7576137b76156bb565b905f5260205f2090600402016003015484101690565b1561381e5781855f018e60ff16815481106137ea576137ea6156bb565b905f5260205f2090600402016003015460405163e6fe673d60e01b8152600401610df4929190918252602082015260400190565b50505f86613834876001600160681b03166133b6565b61383e91906157f0565b60ff8d165f90815260048601602090815260408083206001600160a01b038f1684529091529020549091506138739089613d84565b846004015f8e60ff1681526020019081526020015f205f8c6001600160a01b03166001600160a01b031681526020019081526020015f208190555082846003015f8e60ff1681526020019081526020015f205f8d6001600160a01b03166001600160a01b031681526020019081526020015f205f820151815f01556020820151816001015590505081845f018d60ff1681548110613913576139136156bb565b905f5260205f2090600402015f015f6101000a8154816001600160681b0302191690836001600160681b03160217905550613952846007015482613cf6565b60078501819055945061396589826140a5565b50505050965096945050505050565b5f805f805f80613982613098565b90505f815f018960ff168154811061399c5761399c6156bb565b5f918252602090912060049091020180549091506001600160681b03168015806139d557508154600160d01b900465ffffffffffff1642145b806139ee57505f80516020615bc88339815191525460ff165b15613a285781545f90819081908190613a1690600160d01b900465ffffffffffff1642615840565b97509750975097509750505050613bf8565b81545f90613a4690600160681b90046001600160681b0316836156e6565b600b85015460405163fe4bab4360e01b815260ff8e16600482015260248101839052604481018d90529192505f9182916001600160a01b03169063fe4bab43906064016040805180830381865afa158015613aa3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613ac791906156fd565b86549193509150613ae790600160d01b900465ffffffffffff1642615892565b9650815f03613b07575f805f809a509a509a509a50505050505050613bf8565b5f613b3a613b20676765c793fa10079d601b1b856156a8565b8965ffffffffffff16676765c793fa10079d601b1b614647565b9050613b6f611f4d613b57676765c793fa10079d601b1b84615840565b8854600160681b90046001600160681b0316906146ff565b9950613b846001600160681b038b16866156e6565b98505f613b8f612cb0565b90508015613bc757613bc2613baf84676765c793fa10079d601b1b615840565b613bba836012614718565b8c9190614341565b613bc9565b5f5b9c50613bed8a84760a70c3c40a64e6c51999090b65f67d9240000000000000614341565b9b5050505050505050505b9295509295909350565b5f80613c0c612d89565b60058101549091505f613c1f8583613f70565b9050805f03613c415760405163199f5a0360e31b815260040160405180910390fd5b613c4b8782614725565b8254613c62906001600160a01b03168730886147a4565b6040518581526001600160a01b038816905f905f80516020615b88833981519152906020015b60405180910390a35095945050505050565b613ca26131fc565b5f80516020615bc8833981519152805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336130fd565b5f610cea836001600160a01b03841661480b565b8181015f82128015613d0757508281115b15613d2557604051630fc12e3560e11b815260040160405180910390fd5b5f82138015613d3357508281105b15610ad757604051630fc12e3560e11b815260040160405180910390fd5b5f6001600160681b038211156133e2576040516306dfcc6560e41b81526068600482015260248101839052604401610df4565b8082035f82138015613d9557508281115b15613db357604051630fc12e3560e11b815260040160405180910390fd5b5f82128015613d33575082811015610ad757604051630fc12e3560e11b815260040160405180910390fd5b613de6614857565b610d3982826148a0565b613df8614857565b6001600160a01b038516613e1f5760405163e9a1cca560e01b815260040160405180910390fd5b6001600160a01b038416613e465760405163cfe2ea6360e01b815260040160405180910390fd5b5f613e4f612d89565b80546003820180546001600160a01b0319166001600160a01b038981169190911790915588166001600160a81b031990911617600160a01b60ff871602178155905060018101613e9f84826158fe565b5060028101613eae83826158fe565b50676765c793fa10079d601b1b60058201556040516001600160a01b03861681527f8a3509a4057c89a5993a4a3140c2ebf7e829d325d8998eaa6c48adcff98b2cef9060200160405180910390a1505050505050565b5f5f80516020615b6883398151915283613f66575f613f21611958565b6001600160a01b031614613f4857604051631fe1e13d60e11b815260040160405180910390fd5b6001810180546001600160a01b0319166001600160a01b0385161790555b610e838484614906565b5f610cea83676765c793fa10079d601b1b84614341565b5f80516020615b688339815191525f80613f9f612867565b91509150613fb48165ffffffffffff16151590565b1580613fc857504265ffffffffffff821610155b15613ff0576040516319ca5ebb60e01b815265ffffffffffff82166004820152602401610df4565b6140015f613ffc611958565b614400565b5061400c5f83613f04565b505081546001600160d01b03191690915550565b5f8061402a612d89565b6001600160a01b039093165f908152600890930160205250506040902080546001810190915590565b5f805f80614063888888886149ae565b9250925092506140738282614a76565b50909695505050505050565b61408882610cf1565b61409181612e72565b610fb58383614400565b612e865f806144b8565b805f036140b0575050565b5f6140b9613098565b90505f82121561414e575f6140cd8361571f565b90505f6140e5676765c793fa10079d601b1b836159ce565b90505f6140fd676765c793fa10079d601b1b846159e1565b111561410f5761410c816159f4565b90505b80836008015f82825461412291906156a8565b9091555061414790508530836141366112d9565b6001600160a01b03169291906147a4565b5050505050565b5f614164676765c793fa10079d601b1b846159ce565b905080826008015f8282546141799190615840565b90915550610fb59050848261418c6112d9565b6001600160a01b03169190614b2e565b5f610cea8383614b5f565b5f806141b1612d89565b60058101549091505f6141c48583614b85565b9050805f036141e6576040516302075cc160e41b815260040160405180910390fd5b6141f08782614b9e565b8254614206906001600160a01b03168787614b2e565b6040518581525f906001600160a01b038916905f80516020615b8883398151915290602001613c88565b61423a8282611cff565b610d395760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610df4565b5f80516020615be8833981519152545f80516020615b6883398151915290600160d01b900465ffffffffffff168015614303574265ffffffffffff821610156142da57600182015482546001600160d01b0316600160a01b90910465ffffffffffff16600160d01b02178255614303565b6040517f2b1fa2edafe6f7b9e97c1a9e0c3660e645beb2dcaa2d45bdbf9beaf5472e1ec5905f90a15b5060010180546001600160a01b0316600160a01b65ffffffffffff948516026001600160d01b031617600160d01b9290931691909102919091179055565b5f838302815f1985870982811083820303915050805f036143755783828161436b5761436b6159ba565b0492505050610cea565b8084116143955760405163227bc15360e01b815260040160405180910390fd5b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b5f5f80516020615b68833981519152831580156144355750614420611958565b6001600160a01b0316836001600160a01b0316145b1561444d576001810180546001600160a01b03191690555b610e838484614c50565b5f80516020615bc88339815191525460ff16612e8657604051638dfc202b60e01b815260040160405180910390fd5b5f65ffffffffffff8211156133e2576040516306dfcc6560e41b81526030600482015260248101839052604401610df4565b5f80516020615b688339815191525f6144cf612867565b835465ffffffffffff8616600160a01b026001600160d01b03199091166001600160a01b03881617178455915061450f90508165ffffffffffff16151590565b15610fb5576040517f8886ebfc4259abdbc16601dd8fb5678e54878f47b3c34836cfc51154a9605109905f90a150505050565b5f8061454c6127b0565b90508065ffffffffffff168365ffffffffffff16116145745761456f8382615892565b610cea565b610cea65ffffffffffff841662069780614cc9565b5f614592612d89565b6005019190915550565b805f036145a65750565b5f6145af612d89565b60058101546003820154919250906001600160a01b03166145d9816145d48685613f70565b614725565b6040518481526001600160a01b038216905f905f80516020615b888339815191529060200160405180910390a360408051858152602081018490526001600160a01b038316917f095a1e7fd552d6bba4d4bcc1c4127215dafdd5a52103be432762e64f2e13250a910161149f565b5f8380156146e25760018416801561466157859250614665565b8392505b50600283046002850494505b84156146dc578586028687820414614687575f80fd5b81810181811015614696575f80fd5b85900496505060018516156146d15785830283878204141587151516156146bb575f80fd5b818101818110156146ca575f80fd5b8590049350505b600285049450614671565b506146f7565b8380156146f1575f92506146f5565b8392505b505b509392505050565b5f610cea8383676765c793fa10079d601b1b6001614cde565b5f610cea8383602d614d2d565b6001600160a01b03821661474e57604051639cfea58360e01b81525f6004820152602401610df4565b5f614757612d89565b905081816004015f82825461476c91906156a8565b90915550506001600160a01b0383165f9081526006820160205260408120805484929061479a9084906156a8565b9091555050505050565b6040516001600160a01b038481166024830152838116604483015260648201839052610fb59186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050614d77565b5f81815260018301602052604081205461485057508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610ad7565b505f610ad7565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16612e8657604051631afcd79f60e31b815260040160405180910390fd5b6148a8614857565b5f80516020615b688339815191526001600160a01b0382166148df57604051636116401160e11b81525f6004820152602401610df4565b80546001600160d01b0316600160d01b65ffffffffffff851602178155610fb55f83613f04565b5f5f80516020615ba883398151915261491f8484611cff565b61499e575f848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556149543390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610ad7565b5f915050610ad7565b5092915050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156149e757505f91506003905082614a6c565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015614a38573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b038116614a6357505f925060019150829050614a6c565b92505f91508190505b9450945094915050565b5f826003811115614a8957614a89615a0c565b03614a92575050565b6001826003811115614aa657614aa6615a0c565b03614ac45760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115614ad857614ad8615a0c565b03614af95760405163fce698f760e01b815260048101829052602401610df4565b6003826003811115614b0d57614b0d615a0c565b03610d39576040516335e2f38360e21b815260048101829052602401610df4565b6040516001600160a01b03838116602483015260448201839052610e1a91859182169063a9059cbb906064016147d9565b5f825f018281548110614b7457614b746156bb565b905f5260205f200154905092915050565b5f610cea83676765c793fa10079d601b1b846001614cde565b5f614ba7612d89565b90506001600160a01b038316614bd2576040516313053d9360e21b81525f6004820152602401610df4565b6001600160a01b0383165f90815260068201602052604090205482811015614c135783818460405163db42144d60e01b8152600401610df49392919061581f565b6001600160a01b0384165f90815260068301602052604081208483039055600483018054859290614c45908490615840565b909155505050505050565b5f5f80516020615ba8833981519152614c698484611cff565b1561499e575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610ad7565b5f818310614cd75781610cea565b5090919050565b5f80614ceb868686614341565b9050614cf683614dd8565b8015614d1157505f8480614d0c57614d0c6159ba565b868809115b15614d2457614d216001826156a8565b90505b95945050505050565b5f818310614d5857604051631a065cf160e01b81526004810184905260248101839052604401610df4565b614d628383615840565b614d6d90600a615b00565b610e8390856156e6565b5f614d8b6001600160a01b03841683614e04565b905080515f14158015614daf575080806020019051810190614dad919061579d565b155b15610e1a57604051635274afe760e01b81526001600160a01b0384166004820152602401610df4565b5f6002826003811115614ded57614ded615a0c565b614df79190615b0b565b60ff166001149050919050565b6060610cea83835f845f80856001600160a01b03168486604051614e289190615b2c565b5f6040518083038185875af1925050503d805f8114614e62576040519150601f19603f3d011682016040523d82523d5f602084013e614e67565b606091505b5091509150614e77868383614e81565b9695505050505050565b606082614e915761456f82614ed8565b8151158015614ea857506001600160a01b0384163b155b15614ed157604051639996b31560e01b81526001600160a01b0385166004820152602401610df4565b5080610cea565b805115614ee85780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b5f60208284031215614f11575f80fd5b81356001600160e01b031981168114610cea575f80fd5b6001600160a01b0381168114610bff575f80fd5b5f60208284031215614f4c575f80fd5b8135610cea81614f28565b5f5b83811015614f71578181015183820152602001614f59565b50505f910152565b602081525f8251806020840152614f97816040850160208701614f57565b601f01601f19169190910160400192915050565b5f8060408385031215614fbc575f80fd5b8235614fc781614f28565b946020939093013593505050565b5f60208284031215614fe5575f80fd5b5035919050565b5f805f60608486031215614ffe575f80fd5b833561500981614f28565b9250602084013561501981614f28565b929592945050506040919091013590565b5f806040838503121561503b575f80fd5b82359150602083013561504d81614f28565b809150509250929050565b803560ff81168114615068575f80fd5b919050565b5f6020828403121561507d575f80fd5b610cea82615058565b5f8060408385031215615097575f80fd5b6150a083615058565b9150602083013561504d81614f28565b5f602082840312156150c0575f80fd5b813565ffffffffffff81168114610cea575f80fd5b5f805f80608085870312156150e8575f80fd5b6150f185615058565b9350602085013561510181614f28565b9250604085013561511181614f28565b9396929550929360600135925050565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b8181101561516f5784516001600160681b03168352938301939183019160010161514a565b505060608501879052848103608086015285518082529082019250818601905f5b818110156151b457825165ffffffffffff1685529383019391830191600101615190565b50929a9950505050505050505050565b5f8083601f8401126151d4575f80fd5b50813567ffffffffffffffff8111156151eb575f80fd5b6020830191508360208260051b8501011115612154575f80fd5b5f805f8060608587031215615218575f80fd5b843561522381614f28565b935060208501359250604085013567ffffffffffffffff811115615245575f80fd5b615251878288016151c4565b95989497509550505050565b5f805f805f8060a08789031215615272575f80fd5b61527b87615058565b9550602087013561528b81614f28565b9450604087013561529b81614f28565b935060608701359250608087013567ffffffffffffffff8111156152bd575f80fd5b6152c989828a016151c4565b979a9699509497509295939492505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715615318576153186152db565b604052919050565b5f805f805f60a08688031215615334575f80fd5b61533d86615058565b945060208087013561534e81614f28565b9450604087013561535e81614f28565b935060608701359250608087013567ffffffffffffffff80821115615381575f80fd5b818901915089601f830112615394575f80fd5b8135818111156153a6576153a66152db565b8060051b91506153b78483016152ef565b818152918301840191848101908c8411156153d0575f80fd5b938501935b838510156153ee578435825293850193908501906153d5565b8096505050505050509295509295909350565b5f805f805f8060c08789031215615416575f80fd5b61541f87615058565b9550602087013561542f81614f28565b9450604087013561543f81614f28565b9350606087013561544f81614f28565b9598949750929560808101359460a0909101359350915050565b5f806040838503121561547a575f80fd5b82356150a081614f28565b5f8060408385031215615496575f80fd5b614fc783615058565b5f805f606084860312156154b1575f80fd5b61500984615058565b5f82601f8301126154c9575f80fd5b813567ffffffffffffffff8111156154e3576154e36152db565b6154f6601f8201601f19166020016152ef565b81815284602083860101111561550a575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f805f805f80610100898b03121561553e575f80fd5b883561554981614f28565b9750602089013561555981614f28565b965061556760408a01615058565b9550606089013567ffffffffffffffff80821115615583575f80fd5b61558f8c838d016154ba565b965060808b01359150808211156155a4575f80fd5b506155b18b828c016154ba565b94505060a08901356155c281614f28565b925060c08901356155d281614f28565b915060e08901356155e281614f28565b809150509295985092959890939650565b5f805f805f805f60e0888a031215615609575f80fd5b873561561481614f28565b9650602088013561562481614f28565b9550604088013594506060880135935061564060808901615058565b925060a0880135915060c0880135905092959891949750929550565b600181811c9082168061567057607f821691505b60208210810361568e57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610ad757610ad7615694565b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156156df575f80fd5b5051919050565b8082028115828204841417610ad757610ad7615694565b5f806040838503121561570e575f80fd5b505080516020909101519092909150565b5f600160ff1b820161573357615733615694565b505f0390565b5f8151808452602080850194508084015f5b838110156157675781518752958201959082019060010161574b565b509495945050505050565b6001600160a01b038481168252831660208201526060604082018190525f90614d2490830184615739565b5f602082840312156157ad575f80fd5b81518015158114610cea575f80fd5b60ff851681526001600160a01b038481166020830152831660408201526080606082018190525f90614e7790830184615739565b8082025f8212600160ff1b8414161561580b5761580b615694565b8181058314821517610ad757610ad7615694565b6001600160a01b039390931683526020830191909152604082015260600190565b81810381811115610ad757610ad7615694565b65ffffffffffff8181168382160190808211156149a7576149a7615694565b6001600160681b038181168382160190808211156149a7576149a7615694565b65ffffffffffff8281168282160390808211156149a7576149a7615694565b601f821115610e1a575f81815260208120601f850160051c810160208610156158d75750805b601f850160051c820191505b818110156158f6578281556001016158e3565b505050505050565b815167ffffffffffffffff811115615918576159186152db565b61592c81615926845461565c565b846158b1565b602080601f83116001811461595f575f84156159485750858301515b5f19600386901b1c1916600185901b1785556158f6565b5f85815260208120601f198616915b8281101561598d5788860151825594840194600190910190840161596e565b50858210156159aa57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601260045260245ffd5b5f826159dc576159dc6159ba565b500490565b5f826159ef576159ef6159ba565b500690565b5f60018201615a0557615a05615694565b5060010190565b634e487b7160e01b5f52602160045260245ffd5b600181815b80851115615a5a57815f1904821115615a4057615a40615694565b80851615615a4d57918102915b93841c9390800290615a25565b509250929050565b5f82615a7057506001610ad7565b81615a7c57505f610ad7565b8160018114615a925760028114615a9c57615ab8565b6001915050610ad7565b60ff841115615aad57615aad615694565b50506001821b610ad7565b5060208310610133831016604e8410600b8410161715615adb575081810a610ad7565b615ae58383615a20565b805f1904821115615af857615af8615694565b029392505050565b5f610cea8383615a62565b5f60ff831680615b1d57615b1d6159ba565b8060ff84160691505092915050565b5f8251615b3d818460208701614f57565b919091019291505056fe5ab1a5ffb29c47d95dec8c5f9ad49a551754822b51a3359ed1c21e2be24beefaeef3dac4538c82c8ace4063ab0acd2d15cdb5883aa1dff7c2673abb3d8698400ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800cd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300eef3dac4538c82c8ace4063ab0acd2d15cdb5883aa1dff7c2673abb3d8698401a264697066735822122015e733dc03be8e0e48b181c40c5cbbdd7355a98c3b19dcf74958e9219194d7d664736f6c63430008150033