@augmentedfinance/protocol-v1
Version:
Augmented Protocol smart contracts
1,595 lines • 78.7 kB
JavaScript
"use strict";
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
Object.defineProperty(exports, "__esModule", { value: true });
exports.DepositStakeTokenFactory = void 0;
const contracts_1 = require("@ethersproject/contracts");
class DepositStakeTokenFactory extends contracts_1.ContractFactory {
constructor(signer) {
super(_abi, _bytecode, signer);
}
deploy(overrides) {
return super.deploy(overrides || {});
}
getDeployTransaction(overrides) {
return super.getDeployTransaction(overrides || {});
}
attach(address) {
return super.attach(address);
}
connect(signer) {
return super.connect(signer);
}
static connect(address, signerOrProvider) {
return new contracts_1.Contract(address, _abi, signerOrProvider);
}
}
exports.DepositStakeTokenFactory = DepositStakeTokenFactory;
const _abi = [
{
inputs: [],
stateMutability: "nonpayable",
type: "constructor",
},
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "address",
name: "owner",
type: "address",
},
{
indexed: true,
internalType: "address",
name: "spender",
type: "address",
},
{
indexed: false,
internalType: "uint256",
name: "value",
type: "uint256",
},
],
name: "Approval",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: false,
internalType: "uint16",
name: "",
type: "uint16",
},
],
name: "BaselinePercentageUpdated",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "address",
name: "account",
type: "address",
},
{
indexed: false,
internalType: "uint32",
name: "at",
type: "uint32",
},
],
name: "CooldownStarted",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: false,
internalType: "uint32",
name: "cooldownPeriod",
type: "uint32",
},
{
indexed: false,
internalType: "uint32",
name: "unstakePeriod",
type: "uint32",
},
],
name: "CooldownUpdated",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "address",
name: "by",
type: "address",
},
{
indexed: false,
internalType: "bool",
name: "paused",
type: "bool",
},
],
name: "EmergencyPaused",
type: "event",
},
{
anonymous: false,
inputs: [
{
components: [
{
internalType: "contract IMarketAccessController",
name: "stakeController",
type: "address",
},
{
internalType: "contract IERC20",
name: "stakedToken",
type: "address",
},
{
internalType: "contract IUnderlyingStrategy",
name: "strategy",
type: "address",
},
{
internalType: "uint32",
name: "cooldownPeriod",
type: "uint32",
},
{
internalType: "uint32",
name: "unstakePeriod",
type: "uint32",
},
{
internalType: "uint16",
name: "maxSlashable",
type: "uint16",
},
{
internalType: "uint8",
name: "stakedTokenDecimals",
type: "uint8",
},
],
indexed: false,
internalType: "struct StakeTokenConfig",
name: "params",
type: "tuple",
},
{
indexed: false,
internalType: "string",
name: "tokenName",
type: "string",
},
{
indexed: false,
internalType: "string",
name: "tokenSymbol",
type: "string",
},
],
name: "Initialized",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: false,
internalType: "uint16",
name: "maxSlash",
type: "uint16",
},
],
name: "MaxSlashUpdated",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: false,
internalType: "address",
name: "provider",
type: "address",
},
{
indexed: false,
internalType: "address",
name: "token",
type: "address",
},
],
name: "ProviderAdded",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: false,
internalType: "address",
name: "provider",
type: "address",
},
],
name: "ProviderRemoved",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: false,
internalType: "uint256",
name: "rate",
type: "uint256",
},
],
name: "RateUpdated",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: false,
internalType: "bool",
name: "redeemable",
type: "bool",
},
],
name: "RedeemableUpdated",
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: "amount",
type: "uint256",
},
{
indexed: false,
internalType: "uint256",
name: "underlyingAmount",
type: "uint256",
},
],
name: "Redeemed",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: false,
internalType: "address",
name: "to",
type: "address",
},
{
indexed: false,
internalType: "uint256",
name: "amount",
type: "uint256",
},
{
indexed: false,
internalType: "uint256",
name: "totalBeforeSlash",
type: "uint256",
},
],
name: "Slashed",
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: "amount",
type: "uint256",
},
{
indexed: true,
internalType: "uint256",
name: "referal",
type: "uint256",
},
],
name: "Staked",
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",
},
{
inputs: [],
name: "COOLDOWN_PERIOD",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "DOMAIN_SEPARATOR",
outputs: [
{
internalType: "bytes32",
name: "",
type: "bytes32",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "EIP712_REVISION",
outputs: [
{
internalType: "bytes",
name: "",
type: "bytes",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "PERMIT_TYPEHASH",
outputs: [
{
internalType: "bytes32",
name: "",
type: "bytes32",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "REVISION",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "pure",
type: "function",
},
{
inputs: [],
name: "UNDERLYING_ASSET_ADDRESS",
outputs: [
{
internalType: "address",
name: "",
type: "address",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "UNSTAKE_PERIOD",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "",
type: "address",
},
],
name: "_nonces",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "",
type: "address",
},
{
internalType: "address",
name: "",
type: "address",
},
],
name: "addRewardProvider",
outputs: [],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "owner",
type: "address",
},
{
internalType: "address",
name: "spender",
type: "address",
},
],
name: "allowance",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "spender",
type: "address",
},
{
internalType: "uint256",
name: "amount",
type: "uint256",
},
],
name: "approve",
outputs: [
{
internalType: "bool",
name: "",
type: "bool",
},
],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [],
name: "attachedToRewardController",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "holder",
type: "address",
},
],
name: "balanceAndCooldownOf",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
{
internalType: "uint32",
name: "windowStart",
type: "uint32",
},
{
internalType: "uint32",
name: "windowEnd",
type: "uint32",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "account",
type: "address",
},
],
name: "balanceOf",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "account",
type: "address",
},
],
name: "balanceOfUnderlying",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "holder",
type: "address",
},
{
internalType: "uint32",
name: "at",
type: "uint32",
},
],
name: "calcRewardFor",
outputs: [
{
internalType: "uint256",
name: "amount",
type: "uint256",
},
{
internalType: "uint256",
name: "",
type: "uint256",
},
{
internalType: "uint32",
name: "since",
type: "uint32",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "holder",
type: "address",
},
],
name: "claimRewardFor",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
{
internalType: "uint32",
name: "",
type: "uint32",
},
{
internalType: "bool",
name: "",
type: "bool",
},
],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "holder",
type: "address",
},
{
internalType: "uint256",
name: "baseAmount",
type: "uint256",
},
{
internalType: "uint256",
name: "limit",
type: "uint256",
},
{
internalType: "uint16",
name: "minPct",
type: "uint16",
},
],
name: "claimRewardWithLimitFor",
outputs: [
{
internalType: "uint256",
name: "amount",
type: "uint256",
},
{
internalType: "uint32",
name: "since",
type: "uint32",
},
{
internalType: "bool",
name: "keepPull",
type: "bool",
},
{
internalType: "uint256",
name: "newLimit",
type: "uint256",
},
],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [],
name: "cooldown",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [],
name: "decimals",
outputs: [
{
internalType: "uint8",
name: "",
type: "uint8",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "spender",
type: "address",
},
{
internalType: "uint256",
name: "subtractedValue",
type: "uint256",
},
],
name: "decreaseAllowance",
outputs: [
{
internalType: "bool",
name: "",
type: "bool",
},
],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [],
name: "detachedFromRewardController",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [],
name: "exchangeRate",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "getBaselinePercentage",
outputs: [
{
internalType: "uint16",
name: "",
type: "uint16",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "holder",
type: "address",
},
],
name: "getCooldown",
outputs: [
{
internalType: "uint32",
name: "",
type: "uint32",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "getIncentivesController",
outputs: [
{
internalType: "address",
name: "",
type: "address",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "getMaxSlashablePercentage",
outputs: [
{
internalType: "uint16",
name: "",
type: "uint16",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "getOwner",
outputs: [
{
internalType: "address",
name: "",
type: "address",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "getPoolName",
outputs: [
{
internalType: "string",
name: "",
type: "string",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "getRate",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "getRewardController",
outputs: [
{
internalType: "address",
name: "",
type: "address",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "getScaleIndex",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "spender",
type: "address",
},
{
internalType: "uint256",
name: "addedValue",
type: "uint256",
},
],
name: "increaseAllowance",
outputs: [
{
internalType: "bool",
name: "",
type: "bool",
},
],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
components: [
{
internalType: "contract IRewardController",
name: "controller",
type: "address",
},
{
internalType: "string",
name: "poolName",
type: "string",
},
{
internalType: "uint16",
name: "baselinePercentage",
type: "uint16",
},
],
internalType: "struct IInitializableRewardPool.InitRewardPoolData",
name: "config",
type: "tuple",
},
],
name: "initializeRewardPool",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
components: [
{
internalType: "contract IMarketAccessController",
name: "stakeController",
type: "address",
},
{
internalType: "contract IERC20",
name: "stakedToken",
type: "address",
},
{
internalType: "contract IUnderlyingStrategy",
name: "strategy",
type: "address",
},
{
internalType: "uint32",
name: "cooldownPeriod",
type: "uint32",
},
{
internalType: "uint32",
name: "unstakePeriod",
type: "uint32",
},
{
internalType: "uint16",
name: "maxSlashable",
type: "uint16",
},
{
internalType: "uint8",
name: "stakedTokenDecimals",
type: "uint8",
},
],
internalType: "struct StakeTokenConfig",
name: "params",
type: "tuple",
},
{
internalType: "string",
name: "name",
type: "string",
},
{
internalType: "string",
name: "symbol",
type: "string",
},
],
name: "initializeStakeToken",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [],
name: "initializedRewardPoolWith",
outputs: [
{
components: [
{
internalType: "contract IRewardController",
name: "controller",
type: "address",
},
{
internalType: "string",
name: "poolName",
type: "string",
},
{
internalType: "uint16",
name: "baselinePercentage",
type: "uint16",
},
],
internalType: "struct IInitializableRewardPool.InitRewardPoolData",
name: "",
type: "tuple",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "initializedStakeTokenWith",
outputs: [
{
components: [
{
internalType: "contract IMarketAccessController",
name: "stakeController",
type: "address",
},
{
internalType: "contract IERC20",
name: "stakedToken",
type: "address",
},
{
internalType: "contract IUnderlyingStrategy",
name: "strategy",
type: "address",
},
{
internalType: "uint32",
name: "cooldownPeriod",
type: "uint32",
},
{
internalType: "uint32",
name: "unstakePeriod",
type: "uint32",
},
{
internalType: "uint16",
name: "maxSlashable",
type: "uint16",
},
{
internalType: "uint8",
name: "stakedTokenDecimals",
type: "uint8",
},
],
internalType: "struct StakeTokenConfig",
name: "params",
type: "tuple",
},
{
internalType: "string",
name: "name_",
type: "string",
},
{
internalType: "string",
name: "symbol_",
type: "string",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "isPaused",
outputs: [
{
internalType: "bool",
name: "",
type: "bool",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "isRedeemable",
outputs: [
{
internalType: "bool",
name: "",
type: "bool",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "name",
outputs: [
{
internalType: "string",
name: "",
type: "string",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "addr",
type: "address",
},
],
name: "nonces",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
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: "address",
name: "to",
type: "address",
},
{
internalType: "uint256",
name: "stakeAmount",
type: "uint256",
},
],
name: "redeem",
outputs: [
{
internalType: "uint256",
name: "stakeAmount_",
type: "uint256",
},
],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "to",
type: "address",
},
{
internalType: "uint256",
name: "underlyingAmount",
type: "uint256",
},
],
name: "redeemUnderlying",
outputs: [
{
internalType: "uint256",
name: "underlyingAmount_",
type: "uint256",
},
],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "provider",
type: "address",
},
],
name: "removeRewardProvider",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "account",
type: "address",
},
],
name: "rewardedBalanceOf",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "uint16",
name: "factor",
type: "uint16",
},
],
name: "setBaselinePercentage",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "uint32",
name: "cooldownPeriod",
type: "uint32",
},
{
internalType: "uint32",
name: "unstakePeriod",
type: "uint32",
},
],
name: "setCooldown",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "",
type: "address",
},
],
name: "setIncentivesController",
outputs: [],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "uint16",
name: "slashPct",
type: "uint16",
},
],
name: "setMaxSlashablePercentage",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "bool",
name: "paused",
type: "bool",
},
],
name: "setPaused",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "bool",
name: "redeemable",
type: "bool",
},
],
name: "setRedeemable",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "destination",
type: "address",
},
{
internalType: "uint256",
name: "minAmount",
type: "uint256",
},
{
internalType: "uint256",
name: "maxAmount",
type: "uint256",
},
],
name: "slashUnderlying",
outputs: [
{
internalType: "uint256",
name: "amount",
type: "uint256",
},
{
internalType: "bool",
name: "erc20Transfer",
type: "bool",
},
],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "to",
type: "address",
},
{
internalType: "uint256",
name: "underlyingAmount",
type: "uint256",
},
{
internalType: "uint256",
name: "referral",
type: "uint256",
},
],
name: "stake",
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: "totalSupply",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "recipient",
type: "address",
},
{
internalType: "uint256",
name: "amount",
type: "uint256",
},
],
name: "transfer",
outputs: [
{
internalType: "bool",
name: "",
type: "bool",
},
],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "sender",
type: "address",
},
{
internalType: "address",
name: "recipient",
type: "address",
},
{
internalType: "uint256",
name: "amount",
type: "uint256",
},
],
name: "transferFrom",
outputs: [
{
internalType: "bool",
name: "",
type: "bool",
},
],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "uint256",
name: "baseline",
type: "uint256",
},
],
name: "updateBaseline",
outputs: [
{
internalType: "bool",
name: "hasBaseline",
type: "bool",
},
{
internalType: "uint256",
name: "appliedRate",
type: "uint256",
},
],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "owner",
type: "address",
},
{
internalType: "uint256",
name: "subtractedValue",
type: "uint256",
},
],
name: "useAllowance",
outputs: [
{
internalType: "bool",
name: "",
type: "bool",
},
],
stateMutability: "nonpayable",
type: "function",
},
];
const _bytecode = "0x6080604052600080546001600160a01b0316676765c793fa10079d60bb1b1790556001805463ffffffff60301b191666780000000000001781556200004790600019620007fd565b60105560006011553480156200005c57600080fd5b5060408051602080820183526000808352835191820190935282815282546001600160a01b0319168355909180808080620000978162000111565b50620000bb83838360405180602001604052806000815250620001bc60201b60201c565b50508351620000d391506008906020860190620006b2565b508151620000e9906009906020850190620006b2565b50600a805460ff191660ff92909216919091179055506200010b905062000205565b620008a8565b600080546001600160a01b0316676765c793fa10079d60bb1b17905560026200013d60016064620007ae565b6200014a906064620007ae565b62000156919062000773565b61ffff168161ffff1610620001a75760026200017560016064620007ae565b62000182906064620007ae565b6200018e919062000773565b6001805461ffff191661ffff9290921691909117905550565b6001805461ffff191661ffff83161790555b50565b600780546001600160a01b0319166001600160a01b03861617905561ffff821615620001ed57620001ed82620002b3565b8215620001ff57620001ff8362000398565b50505050565b467f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f62000231620003de565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018290523060a082015260c00160408051601f198184030181529190528051602090910120600c5550565b620002bd620003fa565b61ffff8116620002d957620002d3600062000398565b62000341565b620002e760016064620007ae565b620002f4906064620007ae565b61ffff168161ffff161115620003415760405162461bcd60e51b815260206004820152600d60248201526c696c6c6567616c2076616c756560981b60448201526064015b60405180910390fd5b6007805461ffff60a01b1916600160a01b61ffff8416908102919091179091556040519081527fa4a0021d5a3e887ed39092287593218ba56daabb698755739666df81df918409906020015b60405180910390a150565b620003a2620003fa565b620003ad8162000456565b6040518181527fe65c987b2e4668e09ba867026921588005b2b2063607a1e7e7d91683c8f91b7b906020016200038d565b6060620003f56200046c60201b620009041760201c565b905090565b6007546001600160a01b0316620004545760405162461bcd60e51b815260206004820152601660248201527f636f6e74726f6c6c657220697320726571756972656400000000000000000000604482015260640162000338565b565b620001b9816200050660201b6200175b1760201c565b6060600880546200047d906200083f565b80601f0160208091040260200160405190810160405280929190818152602001828054620004ab906200083f565b8015620004fc5780601f10620004d057610100808354040283529160200191620004fc565b820191906000526020600020905b815481529060010190602001808311620004de57829003601f168201915b5050505050905090565b620001b981426004546001600160e01b031682141562000524575050565b6001600160e01b038211156200053957600080fd5b60045463ffffffff600160e01b90910481169082168114620005a6576004546001600160e01b039081169062000572908490620005ab16565b600480546001600160e01b0319166001600160e01b0386811691909117909155620001ff9082811690849086906200062a16565b505050565b60045463ffffffff600160e01b90910481169082161015620006055760405162461bcd60e51b8152602060048201526012602482015271726574726f6163746976652075706461746560701b604482015260640162000338565b6004805463ffffffff909216600160e01b026001600160e01b03909216919091179055565b6006546200063757505050565b8163ffffffff168163ffffffff1614620005a65760065462000669906ec097ce7bc90715b34b9f100000000062000797565b620006759084620007db565b925062000683828262000817565b620006959063ffffffff1684620007db565b60056000828254620006a8919062000758565b9091555050505050565b828054620006c0906200083f565b90600052602060002090601f016020900481019282620006e457600085556200072f565b82601f10620006ff57805160ff19168380011785556200072f565b828001600101855582156200072f579182015b828111156200072f57825182559160200191906001019062000712565b506200073d92915062000741565b5090565b5b808211156200073d576000815560010162000742565b600082198211156200076e576200076e6200087c565b500190565b600061ffff808416806200078b576200078b62000892565b92169190910492915050565b600082620007a957620007a962000892565b500490565b600061ffff80831681851681830481118215151615620007d257620007d26200087c565b02949350505050565b6000816000190483118215151615620007f857620007f86200087c565b500290565b6000828210156200081257620008126200087c565b500390565b600063ffffffff838116908316818110156200083757620008376200087c565b039392505050565b600181811c908216806200085457607f821691505b602082108114156200087657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6143aa80620008b86000396000f3fe608060405234801561001057600080fd5b50600436106103a45760003560e01c806375d26413116101e9578063a9059cbb1161010f578063d2993983116100ad578063dde43cba1161007c578063dde43cba146108a9578063e655dbd8146108b0578063f34d96da146108c3578063ff85a2ba146108cf57600080fd5b8063d299398314610842578063d354f2401461084a578063d505accf1461085d578063dd62ed3e1461087057600080fd5b8063b16a19de116100e9578063b16a19de146107e7578063b187bd26146107fd578063b6fe2e9c1461080f578063b9844d8d1461082257600080fd5b8063a9059cbb146107cc578063a9dd770214610649578063af920582146107df57600080fd5b8063893d20e811610187578063962941781161015657806396294178146107605780639cfa776814610773578063a457c2d71461077b578063a8346a8c1461078e57600080fd5b8063893d20e8146107025780638abc37d31461071357806392efda791461074757806395d89b411461075857600080fd5b806379b57862116101c357806379b578621461069e57806379d08c34146106b35780637ecebe00146106c65780637fcea80e146106ef57600080fd5b806375d264131461065c5780637816037614610676578063787a08a61461069657600080fd5b8063313ce567116102ce5780633af9e6691161026c57806355f4f1971161023b57806355f4f19714610625578063679aefce1461062d5780636e99d52f1461063557806370a082311461064957600080fd5b80633af9e669146105d55780633ba0b9a9146105e85780634800df8c146105f05780634d25c4f11461060357600080fd5b806338907118116102a85780633890711814610572578063395093511461058557806339b84ecf146105985780633a7d4089146105c057600080fd5b8063313ce567146105415780633644e5151461055657806337a926261461055f57600080fd5b806316195210116103465780631e9a6950116103155780631e9a6950146104dd57806323b872dd146104f057806326cc73a41461050357806330adf81f1461051a57600080fd5b8063161952101461048757806316c38b3c146104af57806318160ddd146104c25780631dd0f483146104ca57600080fd5b80630c51b88f116103825780630c51b88f146104005780630ca2103d14610413578063115eb1cf1461043d57806314e613a81461047257600080fd5b806306fdde03146103a95780630746363d146103c7578063095ea7b3146103dd575b600080fd5b6103b1610904565b6040516103be9190613f86565b60405180910390f35b6103cf610996565b6040519081526020016103be565b6103f06103eb366004613bb7565b6109ab565b60405190151581526020016103be565b6103cf61040e366004613be2565b6109c2565b610426610421366004613e5d565b6109d8565b6040805192151583526020830191909152016103be565b61045061044b366004613ab6565b610a35565b6040805193845263ffffffff92831660208501529116908201526060016103be565b610485610480366004613d01565b610aaf565b005b61049a610495366004613be2565b610bcf565b604080519283529015156020830152016103be565b6104856104bd366004613c91565b610cb8565b6103cf610d2a565b6104856104d8366004613ab6565b610d35565b6103cf6104eb366004613bb7565b610d40565b6103f06104fe366004613b0a565b610d9c565b61050b610dbd565b6040516103be939291906140bf565b6103cf7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b600a5460405160ff90911681526020016103be565b6103cf600c5481565b61048561056d366004613cc9565b610e47565b610485610580366004613c91565b610f32565b6103f0610593366004613bb7565b610fb6565b6105ab6105a6366004613ab6565b610ff2565b60405163ffffffff90911681526020016103be565b6105c8611007565b6040516103be9190613f99565b6103cf6105e3366004613ab6565b611090565b6103cf6110b6565b6104856105fe366004613e43565b6110dd565b600754600160a01b900461ffff165b60405161ffff90911681526020016103be565b6103cf6110ee565b6103cf6110fd565b60015462010000900463ffffffff166103cf565b6103cf610657366004613ab6565b611107565b305b6040516001600160a01b0390911681526020016103be565b6103b1604051806040016040528060018152602001603160f81b81525081565b610485611122565b600154600160301b900463ffffffff166103cf565b6104856106c1366004613e43565b6111aa565b6103cf6106d4366004613ab6565b6001600160a01b03166000908152600d602052604090205490565b6103f06106fd366004613bb7565b61128f565b6000546001600160a01b031661065e565b610726610721366004613c5d565b6112b5565b60408051938452602084019290925263ffffffff16908201526060016103be565b6007546001600160a01b031661065e565b6103b16112ee565b6103cf61076e366004613bb7565b6112fd565b6103cf61136a565b6103f0610789366004613bb7565b6113ee565b6107a161079c366004613c16565b611414565b6040805194855263ffffffff90931660208501529015159183019190915260608201526080016103be565b6103f06107da366004613bb7565b611440565b6103f061144d565b600e5461010090046001600160a01b031661065e565b600754600160b01b900460ff166103f0565b61048561081d366004613ad2565b611470565b6103cf610830366004613ab6565b600d6020526000908152604090205481565b6103b1611484565b610485610858366004613e8d565b61148e565b61048561086b366004613b4a565b6114d1565b6103cf61087e366004613ad2565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205490565b60026103cf565b6104856108be366004613ab6565b6116f8565b60015461ffff16610612565b6108e26108dd366004613ab6565b611738565b6040805193845263ffffffff90921660208401521515908201526060016103be565b606060088054610913906142a3565b80601f016020809104026020016040519081016040528092919081815260200182805461093f906142a3565b801561098c5780601f106109615761010080835404028352916020019161098c565b820191906000526020600020905b81548152906001019060200180831161096f57829003601f168201915b5050505050905090565b60006109a0611765565b50600090565b905090565b60006109b83384846117ac565b5060015b92915050565b60006109d0338585856118d1565b949350505050565b6000806109e3611765565b600754600160a01b900461ffff16610a085760006109ff611a6c565b91509150915091565b600754610a21908490600160a01b900461ffff16611a80565b9050610a2c81611b7c565b60019150915091565b6000806000610a4384610ff2565b915063ffffffff821615610a9c5760015462010000900463ffffffff16610a6a90836141c1565b600154909250600160301b900463ffffffff16820190508163ffffffff168163ffffffff161015610a9c575063ffffffff5b610aa584611107565b92505b9193909250565b60026000806000610abf84611bbd565b92509250925080610bb4576011849055604080516020601f8a01819004810282018101909252888152610b50918a908a908190840183828082843760009201919091525050604080516020601f8c018190048102820181019092528a815292508a9150899081908401838280828437600092019190915250610b4b9250505060e08d0160c08e01613ea8565b611e34565b610b67610b62368b90038b018b613d88565b611e74565b610b6f611f01565b7f9caf63ff43d150ebe4579f7f23fe1333ab0047963f67720a273b83ad2d4686b08989898989604051610ba6959493929190613fe1565b6040