ETH Price: $3,176.78 (+1.35%)
Gas: 7 Gwei

Token

Pepe Pump (PEPU)
 

Overview

Max Total Supply

69,420,000,000 PEPU

Holders

269

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
40,971,110,612.800296912 PEPU

Value
$0.00
0x2e32dd66f03400d30aa882ba4f4248ef5079055b
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
PepePump

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-05-07
*/

/**
https://t.me/PepePumpERC
https://twitter.com/pepepumperc
https://pepepumpcoin.com/
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.19;


library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {return a + b;}
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {return a - b;}
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {return a * b;}
    function div(uint256 a, uint256 b) internal pure returns (uint256) {return a / b;}
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {return a % b;}
    
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {uint256 c = a + b; if(c < a) return(false, 0); return(true, c);}}

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if(b > a) return(false, 0); return(true, a - b);}}

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if (a == 0) return(true, 0); uint256 c = a * b;
        if(c / a != b) return(false, 0); return(true, c);}}

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if(b == 0) return(false, 0); return(true, a / b);}}

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if(b == 0) return(false, 0); return(true, a % b);}}

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked{require(b <= a, errorMessage); return a - b;}}

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked{require(b > 0, errorMessage); return a / b;}}

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked{require(b > 0, errorMessage); return a % b;}}}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function circulatingSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address _owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);}

abstract contract Ownable {
    address internal owner;
    constructor(address _owner) {owner = _owner;}
    modifier onlyOwner() {require(isOwner(msg.sender), "!OWNER"); _;}
    function isOwner(address account) public view returns (bool) {return account == owner;}
    function transferOwnership(address payable adr) public onlyOwner {owner = adr; emit OwnershipTransferred(adr);}
    event OwnershipTransferred(address owner);
}

interface AIVolumizer {
    function tokenVolumeTransaction(address _contract, uint256 maxAmount, uint256 volumePercentage, uint256 denominator) external;
    function rescueHubERC20(address token, address receiver, uint256 amount) external;
    function veiwVolumeStats(address _contract) external view returns (uint256 totalPurchased, 
        uint256 totalETH, uint256 totalVolume, uint256 lastTXAmount, uint256 lastTXTime);
    function viewTotalTokenPurchased(address _contract) external view returns (uint256);
    function viewTotalETHPurchased(address _contract) external view returns (uint256);
    function viewLastETHPurchased(address _contract) external view returns (uint256);
    function viewLastTokensPurchased(address _contract) external view returns (uint256);
    function viewTotalTokenVolume(address _contract) external view returns (uint256);
    function viewLastTokenVolume(address _contract) external view returns (uint256);
    function viewLastVolumeTimestamp(address _contract) external view returns (uint256);
    function viewNumberTokenVolumeTxs(address _contract) external view returns (uint256);
    function viewNumberETHVolumeTxs(address _contract) external view returns (uint256);
}

interface stakeIntegration {
    function stakingWithdraw(address depositor, uint256 _amount) external;
    function stakingDeposit(address depositor, uint256 _amount) external;
}

interface tokenStaking {
    function deposit(uint256 amount) external;
    function withdraw(uint256 amount) external;
}

interface IFactory{
    function createPair(address tokenA, address tokenB) external returns (address pair);
    function getPair(address tokenA, address tokenB) external view returns (address pair);
}

interface IRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
}

contract PepePump is IERC20, tokenStaking, Ownable {
    using SafeMath for uint256;
    string private constant _name = 'Pepe Pump';
    string private constant _symbol = 'PEPU';
    uint8 private constant _decimals = 9;
    uint256 private _totalSupply = 69420000000 * (10 ** _decimals);
    uint256 public _maxTxAmount = ( _totalSupply * 100 ) / 10000;
    uint256 public _maxWalletToken = ( _totalSupply * 100 ) / 10000;
    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping(address => bool) private isFeeExempt;
    IRouter router;
    address public pair;
    uint256 private liquidityFee = 0;
    uint256 private marketingFee = 100;
    uint256 private developmentFee = 100;
    uint256 private tairyoFee = 100;
    uint256 private volumeFee = 100;
    uint256 private totalFee = 2000;
    uint256 private sellFee = 4000;
    uint256 private transferFee = 0;
    uint256 private denominator = 10000;
    bool private swapEnabled = true;
    bool private tradingAllowed = false;
    bool public volumeToken = true;
    bool private volumeTx;
    uint256 public txGas = 500000;
    uint256 private swapVolumeTimes;
    uint256 private swapTimes;
    bool private swapping;
    uint256 private swapVolumeAmount = 1;
    uint256 private swapAmount = 1;
    uint256 private swapThreshold = ( _totalSupply * 1000 ) / 100000;
    uint256 public maxVolumeAmount = ( _totalSupply * 50 ) / 10000;
    uint256 private minTokenAmount = ( _totalSupply * 10 ) / 100000;
    uint256 private minVolumeTokenAmount = ( _totalSupply * 10 ) / 100000;
    modifier lockTheSwap {swapping = true; _; swapping = false;}
    mapping(address => uint256) public amountStaked;
    uint256 public totalStaked; bool public manualVolumeAllowed = false;
    stakeIntegration internal stakingContract;
    AIVolumizer volumizer;
    uint256 public volumePercentage = 10000;
    uint256 lastVolumizerBlock; uint256 public amountTokensFunded;
    address internal constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address internal development_receiver = 0x2e32dd66f03400D30aA882BA4F4248eF5079055b; 
    address internal marketing_receiver = 0x3f4Efda9704DFf80667E68d2E296D307Aa5865B0;
    address internal liquidity_receiver = 0x2e32dd66f03400D30aA882BA4F4248eF5079055b;
    address internal tairyoDev = 0x063541d35981c74F72bE5bd3a0Fafe1b824A1cbb;
    event Deposit(address indexed account, uint256 indexed amount, uint256 indexed timestamp);
    event Withdraw(address indexed account, uint256 indexed amount, uint256 indexed timestamp);
    event SetStakingAddress(address indexed stakingAddress, uint256 indexed timestamp);
    event TradingEnabled(address indexed account, uint256 indexed timestamp);
    event ExcludeFromFees(address indexed account, bool indexed isExcluded, uint256 indexed timestamp);
    event SetInternalAddresses(address indexed marketing, address indexed liquidity, address indexed development, uint256 timestamp);
    event SetSwapBackSettings(uint256 indexed swapAmount, uint256 indexed swapThreshold, uint256 indexed swapMinAmount, uint256 timestamp);
    event SetParameters(uint256 indexed maxTxAmount, uint256 indexed maxWalletToken, uint256 indexed timestamp);
    event SetStructure(uint256 indexed total, uint256 indexed sell, uint256 transfer, uint256 indexed timestamp);

    constructor() Ownable(msg.sender) {
        IRouter _router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        volumizer = AIVolumizer(0xbdB8315C41990c1B4b598609F80f564400216F5D);
        address _pair = IFactory(_router.factory()).createPair(address(this), _router.WETH());
        router = _router;
        pair = _pair;
        isFeeExempt[address(this)] = true;
        isFeeExempt[liquidity_receiver] = true;
        isFeeExempt[marketing_receiver] = true;
        isFeeExempt[development_receiver] = true;
        isFeeExempt[address(DEAD)] = true;
        isFeeExempt[msg.sender] = true;
        isFeeExempt[address(volumizer)] = true;
        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    receive() external payable {}
    function name() public pure returns (string memory) {return _name;}
    function symbol() public pure returns (string memory) {return _symbol;}
    function decimals() public pure returns (uint8) {return _decimals;}
    function getOwner() external view override returns (address) { return owner; }
    function totalSupply() public view override returns (uint256) {return _totalSupply;}
    function balanceOf(address account) public view override returns (uint256) {return _balances[account];}
    function transfer(address recipient, uint256 amount) public override returns (bool) {_transfer(msg.sender, recipient, amount);return true;}
    function allowance(address owner, address spender) public view override returns (uint256) {return _allowances[owner][spender];}
    function approve(address spender, uint256 amount) public override returns (bool) {_approve(msg.sender, spender, amount);return true;}
    function availableBalance(address wallet) public view returns (uint256) {return _balances[wallet].sub(amountStaked[wallet]);}
    function circulatingSupply() public view override returns (uint256) {return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(address(0)));}

    function preTxCheck(address sender, address recipient, uint256 amount) internal view {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount <= balanceOf(sender),"ERC20: below available balance threshold");
    }

    function _transfer(address sender, address recipient, uint256 amount) private {
        preTxCheck(sender, recipient, amount);
        checkTradingAllowed(sender, recipient);
        checkTxLimit(sender, recipient, amount);
        checkMaxWallet(sender, recipient, amount);
        swapbackCounters(sender, recipient, amount);
        swapBack(sender, recipient);
        swapVolume(sender, recipient, amount);
        _balances[sender] = _balances[sender].sub(amount);
        uint256 amountReceived = shouldTakeFee(sender, recipient) ? takeFee(sender, recipient, amount) : amount;
        _balances[recipient] = _balances[recipient].add(amountReceived);
        emit Transfer(sender, recipient, amountReceived);
    }

    function checkTradingAllowed(address sender, address recipient) internal view {
        if(!isFeeExempt[sender] && !isFeeExempt[recipient]){require(tradingAllowed, "ERC20: Trading is not allowed");}
    }

    function checkMaxWallet(address sender, address recipient, uint256 amount) internal view {
        if(!isFeeExempt[sender] && !isFeeExempt[recipient] && recipient != address(pair) && recipient != address(DEAD) && !volumeTx){
            require((_balances[recipient].add(amount)) <= _maxWalletToken, "ERC20: exceeds maximum wallet amount.");}
    }

    function swapbackCounters(address sender, address recipient, uint256 amount) internal {
        if(recipient == pair && !isFeeExempt[sender] && amount >= minTokenAmount && !swapping && !volumeTx){swapTimes += uint256(1);}
    }

    function checkTxLimit(address sender, address recipient, uint256 amount) internal view {
        if(amountStaked[sender] > uint256(0)){require((amount.add(amountStaked[sender])) <= _balances[sender], "ERC20: exceeds maximum allowed not currently staked.");}
        if(!volumeTx){require(amount <= _maxTxAmount || isFeeExempt[sender] || isFeeExempt[recipient], "ERC20: tx limit exceeded");}
    }

    function swapAndLiquify(uint256 tokens) private lockTheSwap {
        uint256 _denominator = (totalFee).mul(2);
        uint256 tokensToAddLiquidityWith = tokens.mul(liquidityFee).div(_denominator);
        uint256 toSwap = tokens.sub(tokensToAddLiquidityWith);
        uint256 initialBalance = address(this).balance;
        swapTokensForETH(toSwap);
        uint256 deltaBalance = address(this).balance.sub(initialBalance);
        uint256 unitBalance= deltaBalance.div(_denominator.sub(liquidityFee));
        uint256 ETHToAddLiquidityWith = unitBalance.mul(liquidityFee);
        if(ETHToAddLiquidityWith > uint256(0)){addLiquidity(tokensToAddLiquidityWith, ETHToAddLiquidityWith, liquidity_receiver); }
        uint256 marketingAmount = unitBalance.mul(2).mul(marketingFee);
        if(marketingAmount > uint256(0)){payable(marketing_receiver).transfer(marketingAmount);}
        uint256 tairyoAmount = unitBalance.mul(2).mul(tairyoFee);
        if(tairyoAmount > uint256(0)){payable(address(tairyoDev)).transfer(tairyoAmount);}
        uint256 eAmount = address(this).balance;
        if(eAmount > uint256(0)){payable(development_receiver).transfer(eAmount);}
    }

    function addLiquidity(uint256 tokenAmount, uint256 ETHAmount, address receiver) private {
        _approve(address(this), address(router), tokenAmount);
        router.addLiquidityETH{value: ETHAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            address(receiver),
            block.timestamp);
    }

    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
        _approve(address(this), address(router), tokenAmount);
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp);
    }

    function shouldSwapBack(address sender, address recipient) internal view returns (bool) {
        bool aboveThreshold = balanceOf(address(this)) >= swapThreshold;
        return !swapping && swapEnabled && tradingAllowed && !isFeeExempt[sender]
            && recipient == pair && swapTimes >= swapAmount && aboveThreshold && !volumeTx;
    }

    function swapBack(address sender, address recipient) internal {
        if(shouldSwapBack(sender, recipient)){swapAndLiquify(swapThreshold); swapTimes = uint256(0);}
    }
    
    function volumizing() external onlyOwner {
        tradingAllowed = true;
        emit TradingEnabled(msg.sender, block.timestamp);
    }

    function deposit(uint256 amount) override external {
        require(amount <= _balances[msg.sender].sub(amountStaked[msg.sender]), "ERC20: Cannot stake more than available balance");
        stakingContract.stakingDeposit(msg.sender, amount);
        amountStaked[msg.sender] = amountStaked[msg.sender].add(amount);
        totalStaked = totalStaked.add(amount);
        emit Deposit(msg.sender, amount, block.timestamp);
    }

    function withdraw(uint256 amount) override external {
        require(amount <= amountStaked[msg.sender], "ERC20: Cannot unstake more than amount staked");
        stakingContract.stakingWithdraw(msg.sender, amount);
        amountStaked[msg.sender] = amountStaked[msg.sender].sub(amount);
        totalStaked = totalStaked.sub(amount);
        emit Withdraw(msg.sender, amount, block.timestamp);
    }

    function setStakingAddress(address _staking) external onlyOwner {
        stakingContract = stakeIntegration(_staking); isFeeExempt[_staking] = true;
        emit SetStakingAddress(_staking, block.timestamp);
    }

    function setStructure(uint256 _liquidity, uint256 _marketing, uint256 _development, uint256 _tairyo, uint256 _volume, uint256 _total, uint256 _sell, uint256 _trans) external onlyOwner {
        liquidityFee = _liquidity; marketingFee = _marketing; developmentFee = _development; volumeFee = _volume; tairyoFee = _tairyo;
        totalFee = _total; sellFee = _sell; transferFee = _trans;
        require(totalFee <= denominator && sellFee <= denominator && transferFee <= denominator, "ERC20: invalid total entry%");
        emit SetStructure(_total, _sell, _trans, block.timestamp);
    }

    function setInternalAddresses(address _marketing, address _liquidity, address _development) external onlyOwner {
        marketing_receiver = _marketing; liquidity_receiver = _liquidity; development_receiver = _development;
        isFeeExempt[_marketing] = true; isFeeExempt[_liquidity] = true;
        emit SetInternalAddresses(_marketing, _liquidity, _development, block.timestamp);
    }

    function setisExempt(address _address, bool _enabled) external onlyOwner {
        isFeeExempt[_address] = _enabled;
        emit ExcludeFromFees(_address, _enabled, block.timestamp);
    }

    function setSwapbackSettings(uint256 _swapAmount, uint256 _swapThreshold, uint256 _minTokenAmount) external onlyOwner {
        swapAmount = _swapAmount; swapThreshold = _totalSupply.mul(_swapThreshold).div(uint256(100000)); minTokenAmount = _totalSupply.mul(_minTokenAmount).div(uint256(100000));
    }

    function setParameters(uint256 _buy, uint256 _wallet) external onlyOwner {
        uint256 newTx = totalSupply().mul(_buy).div(uint256(10000));
        uint256 newWallet = totalSupply().mul(_wallet).div(uint256(10000)); uint256 limit = totalSupply().mul(5).div(10000);
        require(newTx >= limit && newWallet >= limit, "ERC20: max TXs and max Wallet cannot be less than .5%");
        _maxTxAmount = newTx; _maxWalletToken = newWallet;
        emit SetParameters(newTx, newWallet, block.timestamp);
    }

    function rescueERC20(address _address, uint256 _amount) external onlyOwner {
        IERC20(_address).transfer(development_receiver, _amount);
    }

    function toggleVolume(bool token, bool manual) external onlyOwner {
        volumeToken = token; manualVolumeAllowed = manual;
    }

    function SetVolumeParameters(uint256 _volumePercentage, uint256 _maxAmount) external onlyOwner {
        uint256 newAmount = _maxAmount.mul(10 ** _decimals);
        require(_volumePercentage <= denominator, "Value Must Be Less Than or Equal to Denominator");
        require(newAmount <= _totalSupply, "Value Must Be Less Than or Equal to Total Supply");
        volumePercentage = _volumePercentage; maxVolumeAmount = newAmount;
    }

    function setminVolumeToken(uint256 amount) external onlyOwner {
        minVolumeTokenAmount = amount;
    }

    function setVolumeGasPerTx(uint256 gas) external onlyOwner {
        txGas = gas;
    }

    function setVolumizerContract(address _contract) external onlyOwner {
        volumizer = AIVolumizer(_contract); isFeeExempt[_contract] = true;
    }

    function swapVolume(address sender, address recipient, uint256 amount) internal {
        if(tradingAllowed && !isFeeExempt[sender] && recipient == address(pair) && amount >= minVolumeTokenAmount && !swapping && !volumeTx){swapVolumeTimes += uint256(1);}
        if(tradingAllowed && volumeToken && balanceOf(address(volumizer)) > uint256(0) && swapVolumeTimes >= swapVolumeAmount && !isFeeExempt[sender] && recipient == address(pair) &&
            !swapping && !volumeTx){performVolumizer();}
    }

    function UserFundVolumizerContract(uint256 amount) external {
        uint256 amountTokens = amount.mul(10 ** _decimals); 
        IERC20(address(this)).transferFrom(msg.sender, address(volumizer), amountTokens);
        amountTokensFunded = amountTokensFunded.add(amountTokens);
    }

    function RescueVolumizerTokensPercent(uint256 percent) external onlyOwner {
        uint256 amount = IERC20(address(this)).balanceOf(address(volumizer)).mul(percent).div(denominator);
        volumizer.rescueHubERC20(address(this), msg.sender, amount);
    }

    function RescueVolumizerTokens(uint256 amount) external onlyOwner {
        uint256 tokenAmount = amount.mul(10 ** _decimals);
        volumizer.rescueHubERC20(address(this), msg.sender, tokenAmount);
    }

    function performVolumizer() internal {
        volumeTx = true;
        try volumizer.tokenVolumeTransaction{gas: txGas}(address(this), maxVolumeAmount, volumePercentage, denominator) {} catch {} swapVolumeTimes = uint256(0);
        lastVolumizerBlock = block.number;
        volumeTx = false;
    }

    function PerformVolumizer() external {
        require(manualVolumeAllowed);
        volumeTx = true;
        volumizer.tokenVolumeTransaction{gas: txGas}(address(this), maxVolumeAmount, volumePercentage, denominator);
        lastVolumizerBlock = block.number;
        volumeTx = false;
    }

    function manualVolumizer() external onlyOwner {
        volumeTx = true;
        volumizer.tokenVolumeTransaction{gas: txGas}(address(this), maxVolumeAmount, volumePercentage, denominator);
        lastVolumizerBlock = block.number;
        volumeTx = false;
    }

    function shouldTakeFee(address sender, address recipient) internal view returns (bool) {
        return !isFeeExempt[sender] && !isFeeExempt[recipient] && !volumeTx;
    }

    function getTotalFee(address sender, address recipient) internal view returns (uint256) {
        if(recipient == pair && sellFee > uint256(0)){return sellFee;}
        if(sender == pair && totalFee > uint256(0)){return totalFee;}
        return transferFee;
    }

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        if(getTotalFee(sender, recipient) > 0 && !volumeTx){
        uint256 feeAmount = amount.div(denominator).mul(getTotalFee(sender, recipient));
        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);
        if(volumeFee > uint256(0)){_transfer(address(this), address(volumizer), amount.div(denominator).mul(volumeFee));}
        return amount.sub(feeAmount);} return amount;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, msg.sender, _allowances[sender][msg.sender].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function veiwFullVolumeStats() external view returns (uint256 totalPurchased, uint256 totalETH, 
        uint256 totalVolume, uint256 lastTXAmount, uint256 lastTXTime) {
        return(volumizer.viewTotalTokenPurchased(address(this)), volumizer.viewTotalETHPurchased(address(this)), 
            volumizer.viewTotalTokenVolume(address(this)), volumizer.viewLastTokenVolume(address(this)), 
                volumizer.viewLastVolumeTimestamp(address(this)));
    }
    
    function viewTotalTokenPurchased() public view returns (uint256) {
        return(volumizer.viewTotalTokenPurchased(address(this)));
    }

    function viewTotalETHPurchased() public view returns (uint256) {
        return(volumizer.viewTotalETHPurchased(address(this)));
    }

    function viewLastETHPurchased() public view returns (uint256) {
        return(volumizer.viewLastETHPurchased(address(this)));
    }

    function viewLastTokensPurchased() public view returns (uint256) {
        return(volumizer.viewLastTokensPurchased(address(this)));
    }

    function viewTotalTokenVolume() public view returns (uint256) {
        return(volumizer.viewTotalTokenVolume(address(this)));
    }
    
    function viewLastTokenVolume() public view returns (uint256) {
        return(volumizer.viewLastTokenVolume(address(this)));
    }

    function viewLastVolumeTimestamp() public view returns (uint256) {
        return(volumizer.viewLastVolumeTimestamp(address(this)));
    }

    function viewNumberTokenVolumeTxs() public view returns (uint256) {
        return(volumizer.viewNumberTokenVolumeTxs(address(this)));
    }

    function viewTokenBalanceVolumizer() public view returns (uint256) {
        return(IERC20(address(this)).balanceOf(address(volumizer)));
    }

    function viewLastVolumizerBlock() public view returns (uint256) {
        return(lastVolumizerBlock);
    }
}

Contract Security Audit

Contract 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":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"bool","name":"isExcluded","type":"bool"},{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"marketing","type":"address"},{"indexed":true,"internalType":"address","name":"liquidity","type":"address"},{"indexed":true,"internalType":"address","name":"development","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"SetInternalAddresses","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"maxTxAmount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"maxWalletToken","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"SetParameters","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"stakingAddress","type":"address"},{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"SetStakingAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"total","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"sell","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"transfer","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"SetStructure","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"swapAmount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"swapThreshold","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"swapMinAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"SetSwapBackSettings","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TradingEnabled","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":"address","name":"account","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"PerformVolumizer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RescueVolumizerTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"RescueVolumizerTokensPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_volumePercentage","type":"uint256"},{"internalType":"uint256","name":"_maxAmount","type":"uint256"}],"name":"SetVolumeParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"UserFundVolumizerContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"","type":"address"}],"name":"amountStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"amountTokensFunded","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":"wallet","type":"address"}],"name":"availableBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"circulatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualVolumeAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualVolumizer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxVolumeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketing","type":"address"},{"internalType":"address","name":"_liquidity","type":"address"},{"internalType":"address","name":"_development","type":"address"}],"name":"setInternalAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_wallet","type":"uint256"}],"name":"setParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_staking","type":"address"}],"name":"setStakingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_development","type":"uint256"},{"internalType":"uint256","name":"_tairyo","type":"uint256"},{"internalType":"uint256","name":"_volume","type":"uint256"},{"internalType":"uint256","name":"_total","type":"uint256"},{"internalType":"uint256","name":"_sell","type":"uint256"},{"internalType":"uint256","name":"_trans","type":"uint256"}],"name":"setStructure","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapAmount","type":"uint256"},{"internalType":"uint256","name":"_swapThreshold","type":"uint256"},{"internalType":"uint256","name":"_minTokenAmount","type":"uint256"}],"name":"setSwapbackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setVolumeGasPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"}],"name":"setVolumizerContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setisExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setminVolumeToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bool","name":"token","type":"bool"},{"internalType":"bool","name":"manual","type":"bool"}],"name":"toggleVolume","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"txGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"veiwFullVolumeStats","outputs":[{"internalType":"uint256","name":"totalPurchased","type":"uint256"},{"internalType":"uint256","name":"totalETH","type":"uint256"},{"internalType":"uint256","name":"totalVolume","type":"uint256"},{"internalType":"uint256","name":"lastTXAmount","type":"uint256"},{"internalType":"uint256","name":"lastTXTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewLastETHPurchased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewLastTokenVolume","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewLastTokensPurchased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewLastVolumeTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewLastVolumizerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewNumberTokenVolumeTxs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewTokenBalanceVolumizer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewTotalETHPurchased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewTotalTokenPurchased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewTotalTokenVolume","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"volumePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"volumeToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"volumizing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126009600a620005a4565b6200002390641029c12300620005bc565b60015561271060015460646200003a9190620005bc565b620000469190620005d6565b60025561271060015460646200005d9190620005bc565b620000699190620005d6565b600355600060098190556064600a819055600b819055600c819055600d556107d0600e55610fa0600f556010556127106011556012805462ffffff1916620100011790556207a12060135560016017819055601881905554620186a090620000d4906103e8620005bc565b620000e09190620005d6565b6019556127106001546032620000f79190620005bc565b620001039190620005d6565b601a55620186a0600154600a6200011b9190620005bc565b620001279190620005d6565b601b55620186a0600154600a6200013f9190620005bc565b6200014b9190620005d6565b601c55601f805460ff19169055612710602155602480546001600160a01b0319908116732e32dd66f03400d30aa882ba4f4248ef5079055b908117909255602580548216733f4efda9704dff80667e68d2e296d307aa5865b01790556026805482169092179091556027805490911673063541d35981c74f72be5bd3a0fafe1b824a1cbb179055348015620001df57600080fd5b50600080546001600160a01b0319908116331782556020805490911673bdb8315c41990c1b4b598609f80f564400216f5d1781556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d9392849263c45a015592600480830193928290030181865afa15801562000263573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002899190620005f9565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002fd9190620005f9565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200034b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003719190620005f9565b600780546001600160a01b038581166001600160a01b031992831617909255600880548484169216919091179055306000908152600660209081526040808320805460ff1990811660019081179092556026548616855282852080548216831790556025548616855282852080548216831790556024548616855282852080548216831790557f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e2280548216831790553380865283862080548316841790558454909616855282852080549091168217905554848452600483528184208190559051908152939450919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505062000624565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620004e6578160001904821115620004ca57620004ca6200048f565b80851615620004d857918102915b93841c9390800290620004aa565b509250929050565b600082620004ff575060016200059e565b816200050e575060006200059e565b8160018114620005275760028114620005325762000552565b60019150506200059e565b60ff8411156200054657620005466200048f565b50506001821b6200059e565b5060208310610133831016604e8410600b841016171562000577575081810a6200059e565b620005838383620004a5565b80600019048211156200059a576200059a6200048f565b0290505b92915050565b6000620005b560ff841683620004ee565b9392505050565b80820281158282048414176200059e576200059e6200048f565b600082620005f457634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156200060c57600080fd5b81516001600160a01b0381168114620005b557600080fd5b6132e080620006346000396000f3fe60806040526004361061036f5760003560e01c80637d1db4a5116101c6578063a8aa1b31116100f7578063d100a8e111610095578063e94dd17c1161006f578063e94dd17c146109d1578063ef40a670146109f1578063f2fde38b14610a1e578063f4e0d9ac14610a3e57600080fd5b8063d100a8e11461094b578063dd62ed3e1461096b578063e2d6f94c146109b157600080fd5b8063b15bf837116100d1578063b15bf837146108e7578063b2161bcd146108fc578063b57dcc9114610911578063b6b55f251461092b57600080fd5b8063a8aa1b3114610892578063a9059cbb146108b2578063ad9d9e4c146108d257600080fd5b80638b3dc018116101645780639358928b1161013e5780639358928b1461081a57806395d89b411461082f578063979d50501461085c578063a0821be31461087257600080fd5b80638b3dc018146107ba5780638cd4426d146107da5780639213c358146107fa57600080fd5b8063817b1cd2116101a0578063817b1cd21461073c57806381c0b35714610752578063884870c714610768578063893d20e81461078857600080fd5b80637d1db4a5146106fb5780637db70f1814610711578063800c54331461072757600080fd5b806334eead48116102a0578063643a1ed81161023e57806373ca05771161021857806373ca05771461069057806378002f84146106b057806378109e54146106c557806378c7dcd6146106db57600080fd5b8063643a1ed81461061a57806370a082311461063a5780637267c5f91461067057600080fd5b80633e9cc8411161027a5780633e9cc841146105b0578063468d34ed146105d057806348ff2b8b146105e55780635cdbdd971461060557600080fd5b806334eead4814610570578063367471f6146105865780633d17e5751461059b57600080fd5b80631ced75051161030d5780632e1a7d4d116102e75780632e1a7d4d146104c85780632f54bf6e146104e85780633095214814610517578063313ce5671461055457600080fd5b80631ced75051461047e5780631fadf0201461049357806323b872dd146104a857600080fd5b8063095ea7b311610349578063095ea7b3146104045780630acf3acc146104345780631501a3b91461045457806318160ddd1461046957600080fd5b806306fdde031461037b578063076b20d6146103bf57806307f74873146103e257600080fd5b3661037657005b600080fd5b34801561038757600080fd5b506040805180820190915260098152680506570652050756d760bc1b60208201525b6040516103b69190612d68565b60405180910390f35b3480156103cb57600080fd5b506103d4610a5e565b6040519081526020016103b6565b3480156103ee57600080fd5b506104026103fd366004612db6565b610ad3565b005b34801561041057600080fd5b5061042461041f366004612de7565b610b0b565b60405190151581526020016103b6565b34801561044057600080fd5b5061040261044f366004612db6565b610b22565b34801561046057600080fd5b506103d4610bcd565b34801561047557600080fd5b506001546103d4565b34801561048a57600080fd5b506103d4610bfe565b34801561049f57600080fd5b506022546103d4565b3480156104b457600080fd5b506104246104c3366004612e13565b610c2f565b3480156104d457600080fd5b506104026104e3366004612db6565b610c99565b3480156104f457600080fd5b50610424610503366004612e54565b6000546001600160a01b0391821691161490565b34801561052357600080fd5b5061052c610de3565b604080519586526020860194909452928401919091526060830152608082015260a0016103b6565b34801561056057600080fd5b50604051600981526020016103b6565b34801561057c57600080fd5b506103d460135481565b34801561059257600080fd5b506103d4611019565b3480156105a757600080fd5b506103d461104a565b3480156105bc57600080fd5b506012546104249062010000900460ff1681565b3480156105dc57600080fd5b5061040261107b565b3480156105f157600080fd5b50610402610600366004612e7f565b61114b565b34801561061157600080fd5b506103d46111ca565b34801561062657600080fd5b50610402610635366004612db6565b6111fb565b34801561064657600080fd5b506103d4610655366004612e54565b6001600160a01b031660009081526004602052604090205490565b34801561067c57600080fd5b5061040261068b366004612eb8565b61131d565b34801561069c57600080fd5b506104026106ab366004612ed6565b611376565b3480156106bc57600080fd5b50610402611494565b3480156106d157600080fd5b506103d460035481565b3480156106e757600080fd5b506104026106f6366004612db6565b6114a3565b34801561070757600080fd5b506103d460025481565b34801561071d57600080fd5b506103d460215481565b34801561073357600080fd5b506104026114d2565b34801561074857600080fd5b506103d4601e5481565b34801561075e57600080fd5b506103d4601a5481565b34801561077457600080fd5b50610402610783366004612ed6565b61153a565b34801561079457600080fd5b506000546001600160a01b03165b6040516001600160a01b0390911681526020016103b6565b3480156107c657600080fd5b506104026107d5366004612e54565b611664565b3480156107e657600080fd5b506104026107f5366004612de7565b6116c7565b34801561080657600080fd5b50610402610815366004612ef8565b61176c565b34801561082657600080fd5b506103d461183c565b34801561083b57600080fd5b506040805180820190915260048152635045505560e01b60208201526103a9565b34801561086857600080fd5b506103d460235481565b34801561087e57600080fd5b506103d461088d366004612e54565b6118a8565b34801561089e57600080fd5b506008546107a2906001600160a01b031681565b3480156108be57600080fd5b506104246108cd366004612de7565b6118d5565b3480156108de57600080fd5b506103d46118e2565b3480156108f357600080fd5b506103d4611913565b34801561090857600080fd5b506103d4611944565b34801561091d57600080fd5b50601f546104249060ff1681565b34801561093757600080fd5b50610402610946366004612db6565b611975565b34801561095757600080fd5b50610402610966366004612db6565b611ad6565b34801561097757600080fd5b506103d4610986366004612f43565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b3480156109bd57600080fd5b506104026109cc366004612f71565b611b11565b3480156109dd57600080fd5b506104026109ec366004612fc6565b611c1b565b3480156109fd57600080fd5b506103d4610a0c366004612e54565b601d6020526000908152604090205481565b348015610a2a57600080fd5b50610402610a39366004612e54565b611c81565b348015610a4a57600080fd5b50610402610a59366004612e54565b611cff565b6020546040516370a0823160e01b81526001600160a01b03909116600482015260009030906370a08231906024015b602060405180830381865afa158015610aaa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ace9190612ff2565b905090565b6000546001600160a01b03163314610b065760405162461bcd60e51b8152600401610afd9061300b565b60405180910390fd5b601355565b6000610b18338484611d93565b5060015b92915050565b6000610b3a610b336009600a613125565b8390611eb7565b6020546040516323b872dd60e01b81523360048201526001600160a01b0390911660248201526044810182905290915030906323b872dd906064016020604051808303816000875af1158015610b94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb89190613134565b50602354610bc69082611ec3565b6023555050565b60205460405163045f25d360e51b81523060048201526000916001600160a01b031690638be4ba6090602401610a8d565b60205460405163bffa330f60e01b81523060048201526000916001600160a01b03169063bffa330f90602401610a8d565b6000610c3c848484611ecf565b610c8e8433610c8985604051806060016040528060288152602001613283602891396001600160a01b038a1660009081526005602090815260408083203384529091529020549190612000565b611d93565b5060015b9392505050565b336000908152601d6020526040902054811115610d0e5760405162461bcd60e51b815260206004820152602d60248201527f45524332303a2043616e6e6f7420756e7374616b65206d6f7265207468616e2060448201526c185b5bdd5b9d081cdd185ad959609a1b6064820152608401610afd565b601f5460405163d8a9bf2960e01b8152336004820152602481018390526101009091046001600160a01b03169063d8a9bf2990604401600060405180830381600087803b158015610d5e57600080fd5b505af1158015610d72573d6000803e3d6000fd5b5050336000908152601d6020526040902054610d91925090508261202c565b336000908152601d6020526040902055601e54610dae908261202c565b601e556040514290829033907ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b56890600090a450565b6020546040516331fcaf6960e11b815230600482015260009182918291829182916001600160a01b0316906363f95ed290602401602060405180830381865afa158015610e34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e589190612ff2565b602054604051633f8223f360e01b81523060048201526001600160a01b0390911690633f8223f390602401602060405180830381865afa158015610ea0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec49190612ff2565b60205460405163045f25d360e51b81523060048201526001600160a01b0390911690638be4ba6090602401602060405180830381865afa158015610f0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f309190612ff2565b602054604051633255a03560e11b81523060048201526001600160a01b03909116906364ab406a90602401602060405180830381865afa158015610f78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9c9190612ff2565b60205460405163fea4456560e01b81523060048201526001600160a01b039091169063fea4456590602401602060405180830381865afa158015610fe4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110089190612ff2565b945094509450945094509091929394565b6020546040516307df467b60e21b81523060048201526000916001600160a01b031690631f7d19ec90602401610a8d565b6020546040516331fcaf6960e11b81523060048201526000916001600160a01b0316906363f95ed290602401610a8d565b6000546001600160a01b031633146110a55760405162461bcd60e51b8152600401610afd9061300b565b6012805463ff00000019166301000000179055602054601354601a54602154601154604051630f9ea58d60e11b81523060048201526024810193909352604483019190915260648201526001600160a01b0390921691631f3d4b1a9190608401600060405180830381600088803b15801561111f57600080fd5b5087f1158015611133573d6000803e3d6000fd5b50504360225550506012805463ff0000001916905550565b6000546001600160a01b031633146111755760405162461bcd60e51b8152600401610afd9061300b565b6001600160a01b038216600081815260066020526040808220805460ff19168515159081179091559051429391927ff61420caae4661cdd9554a2c8b6c89fc9f30f94abccb1da76abb2ec99783821191a45050565b602054604051631ea2804760e11b81523060048201526000916001600160a01b031690633d45008e90602401610a8d565b6000546001600160a01b031633146112255760405162461bcd60e51b8152600401610afd9061300b565b6011546020546040516370a0823160e01b81526001600160a01b0390911660048201526000916112ad916112a790859030906370a0823190602401602060405180830381865afa15801561127d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a19190612ff2565b90611eb7565b90612038565b60205460405163360b0fcd60e01b8152306004820152336024820152604481018390529192506001600160a01b03169063360b0fcd906064015b600060405180830381600087803b15801561130157600080fd5b505af1158015611315573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146113475760405162461bcd60e51b8152600401610afd9061300b565b6012805462ff00001916620100009315159390930292909217909155601f805460ff1916911515919091179055565b6000546001600160a01b031633146113a05760405162461bcd60e51b8152600401610afd9061300b565b60006113b1610b336009600a613125565b905060115483111561141d5760405162461bcd60e51b815260206004820152602f60248201527f56616c7565204d757374204265204c657373205468616e206f7220457175616c60448201526e103a37902232b737b6b4b730ba37b960891b6064820152608401610afd565b6001548111156114885760405162461bcd60e51b815260206004820152603060248201527f56616c7565204d757374204265204c657373205468616e206f7220457175616c60448201526f20746f20546f74616c20537570706c7960801b6064820152608401610afd565b60219290925550601a55565b601f5460ff166110a557600080fd5b6000546001600160a01b031633146114cd5760405162461bcd60e51b8152600401610afd9061300b565b601c55565b6000546001600160a01b031633146114fc5760405162461bcd60e51b8152600401610afd9061300b565b6012805461ff001916610100179055604051429033907f340c369ced7c3a65b67543c4f1e839173c42d01b38931b0c01b18c89a1d1ba4b90600090a3565b6000546001600160a01b031633146115645760405162461bcd60e51b8152600401610afd9061300b565b60006115796127106112a7856112a160015490565b905060006115906127106112a7856112a160015490565b905060006115a86127106112a760056112a160015490565b90508083101580156115ba5750808210155b6116245760405162461bcd60e51b815260206004820152603560248201527f45524332303a206d61782054587320616e64206d61782057616c6c65742063616044820152746e6e6f74206265206c657373207468616e202e352560581b6064820152608401610afd565b600283905560038290556040514290839085907f91db8d1965ad76c25e9cdb4624cb29364b3f3939376350bd898c06ab40fe707e90600090a45050505050565b6000546001600160a01b0316331461168e5760405162461bcd60e51b8152600401610afd9061300b565b602080546001600160a01b039092166001600160a01b03199092168217815560009182526006905260409020805460ff19166001179055565b6000546001600160a01b031633146116f15760405162461bcd60e51b8152600401610afd9061300b565b6024805460405163a9059cbb60e01b81526001600160a01b03918216600482015291820183905283169063a9059cbb906044016020604051808303816000875af1158015611743573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117679190613134565b505050565b6000546001600160a01b031633146117965760405162461bcd60e51b8152600401610afd9061300b565b602580546001600160a01b03199081166001600160a01b03868116918217909355602680548316868516908117909155602480549093169385169384179092556000818152600660209081526040808320805460ff1990811660019081179092558685529382902080549094161790925590514281527f358f3926f41536f5fa6926b5b6945502e5fdfb85b1876c473d06606ed0fae9ca910160405180910390a4505050565b60046020527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec5461dead60009081527f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd546001549192610ace9290916118a2919061202c565b9061202c565b6001600160a01b0381166000908152601d60209081526040808320546004909252822054610b1c9161202c565b6000610b18338484611ecf565b602054604051633255a03560e11b81523060048201526000916001600160a01b0316906364ab406a90602401610a8d565b602054604051633f8223f360e01b81523060048201526000916001600160a01b031690633f8223f390602401610a8d565b60205460405163fea4456560e01b81523060048201526000916001600160a01b03169063fea4456590602401610a8d565b336000908152601d602090815260408083205460049092529091205461199a9161202c565b811115611a015760405162461bcd60e51b815260206004820152602f60248201527f45524332303a2043616e6e6f74207374616b65206d6f7265207468616e20617660448201526e61696c61626c652062616c616e636560881b6064820152608401610afd565b601f5460405163773a0f0960e01b8152336004820152602481018390526101009091046001600160a01b03169063773a0f0990604401600060405180830381600087803b158015611a5157600080fd5b505af1158015611a65573d6000803e3d6000fd5b5050336000908152601d6020526040902054611a849250905082611ec3565b336000908152601d6020526040902055601e54611aa19082611ec3565b601e556040514290829033907f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a1590600090a450565b6000546001600160a01b03163314611b005760405162461bcd60e51b8152600401610afd9061300b565b60006112ad610b336009600a613125565b6000546001600160a01b03163314611b3b5760405162461bcd60e51b8152600401610afd9061300b565b6009889055600a879055600b869055600d849055600c859055600e839055600f82905560108190556011548311801590611b795750601154600f5411155b8015611b89575060115460105411155b611bd55760405162461bcd60e51b815260206004820152601b60248201527f45524332303a20696e76616c696420746f74616c20656e7472792500000000006044820152606401610afd565b4282847fdddb43af0ad29e5d9d3cb393fd94e8f11ac2c069da19545bac6ee6baf3ddc98984604051611c0991815260200190565b60405180910390a45050505050505050565b6000546001600160a01b03163314611c455760405162461bcd60e51b8152600401610afd9061300b565b6018839055600154611c6090620186a0906112a79085611eb7565b601955600154611c7990620186a0906112a79084611eb7565b601b55505050565b6000546001600160a01b03163314611cab5760405162461bcd60e51b8152600401610afd9061300b565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6000546001600160a01b03163314611d295760405162461bcd60e51b8152600401610afd9061300b565b601f8054610100600160a81b0319166101006001600160a01b03841690810291909117909155600081815260066020526040808220805460ff19166001179055514292917f23481943b6ef3dff645af874fbb24781bf224a02312f9cb308880e03e0a9ddee91a350565b6001600160a01b038316611df55760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610afd565b6001600160a01b038216611e565760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610afd565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610c928284613151565b6000610c928284613168565b611eda838383612044565b611ee48383612183565b611eef838383612225565b611efa838383612387565b611f05838383612497565b611f0f8383612522565b611f1a838383612545565b6001600160a01b038316600090815260046020526040902054611f3d908261202c565b6001600160a01b038416600090815260046020526040812091909155611f6384846126a3565b611f6d5781611f78565b611f78848484612701565b6001600160a01b038416600090815260046020526040902054909150611f9e9082611ec3565b6001600160a01b0380851660008181526004602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611ff29085815260200190565b60405180910390a350505050565b600081848411156120245760405162461bcd60e51b8152600401610afd9190612d68565b505050900390565b6000610c92828461317b565b6000610c92828461318e565b6001600160a01b0383166120a85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610afd565b6001600160a01b03821661210a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610afd565b6001600160a01b0383166000908152600460205260409020548111156117675760405162461bcd60e51b815260206004820152602860248201527f45524332303a2062656c6f7720617661696c61626c652062616c616e636520746044820152671a1c995cda1bdb1960c21b6064820152608401610afd565b6001600160a01b03821660009081526006602052604090205460ff161580156121c557506001600160a01b03811660009081526006602052604090205460ff16155b1561222157601254610100900460ff166122215760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2054726164696e67206973206e6f7420616c6c6f7765640000006044820152606401610afd565b5050565b6001600160a01b0383166000908152601d6020526040902054156122de576001600160a01b038316600090815260046020908152604080832054601d90925290912054612273908390611ec3565b11156122de5760405162461bcd60e51b815260206004820152603460248201527f45524332303a2065786365656473206d6178696d756d20616c6c6f776564206e60448201527337ba1031bab93932b73a363c9039ba30b5b2b21760611b6064820152608401610afd565b6012546301000000900460ff16611767576002548111158061231857506001600160a01b03831660009081526006602052604090205460ff165b8061233b57506001600160a01b03821660009081526006602052604090205460ff165b6117675760405162461bcd60e51b815260206004820152601860248201527f45524332303a207478206c696d697420657863656564656400000000000000006044820152606401610afd565b6001600160a01b03831660009081526006602052604090205460ff161580156123c957506001600160a01b03821660009081526006602052604090205460ff16155b80156123e357506008546001600160a01b03838116911614155b80156123fa57506001600160a01b03821661dead14155b801561241057506012546301000000900460ff16155b15611767576003546001600160a01b03831660009081526004602052604090205461243b9083611ec3565b11156117675760405162461bcd60e51b815260206004820152602560248201527f45524332303a2065786365656473206d6178696d756d2077616c6c657420616d60448201526437bab73a1760d91b6064820152608401610afd565b6008546001600160a01b0383811691161480156124cd57506001600160a01b03831660009081526006602052604090205460ff16155b80156124db5750601b548110155b80156124ea575060165460ff16155b801561250057506012546301000000900460ff16155b15611767576001601560008282546125189190613168565b9091555050505050565b61252c828261280e565b156122215761253c6019546128c3565b60006015555050565b601254610100900460ff16801561257557506001600160a01b03831660009081526006602052604090205460ff16155b801561258e57506008546001600160a01b038381169116145b801561259c5750601c548110155b80156125ab575060165460ff16155b80156125c157506012546301000000900460ff16155b156125df576001601460008282546125d99190613168565b90915550505b601254610100900460ff1680156125fe575060125462010000900460ff165b80156126235750602080546001600160a01b0316600090815260049091526040812054115b8015612633575060175460145410155b801561265857506001600160a01b03831660009081526006602052604090205460ff16155b801561267157506008546001600160a01b038381169116145b8015612680575060165460ff16155b801561269657506012546301000000900460ff16155b1561176757611767612a8d565b6001600160a01b03821660009081526006602052604081205460ff161580156126e557506001600160a01b03821660009081526006602052604090205460ff16155b8015610c925750506012546301000000900460ff161592915050565b60008061270e8585612b32565b11801561272557506012546301000000900460ff16155b156128075760006127476127398686612b32565b6011546112a1908690612038565b306000908152600460205260409020549091506127649082611ec3565b30600081815260046020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906127b59085815260200190565b60405180910390a3600d54156127f557602054600d546011546127f59230926001600160a01b03909116916127f091906112a1908990612038565b611ecf565b6127ff838261202c565b915050610c92565b5092915050565b60195430600090815260046020526040812054601654919211159060ff1615801561283b575060125460ff165b801561284e5750601254610100900460ff165b801561287357506001600160a01b03841660009081526006602052604090205460ff16155b801561288c57506008546001600160a01b038481169116145b801561289c575060185460155410155b80156128a55750805b80156128bb57506012546301000000900460ff16155b949350505050565b6016805460ff19166001179055600e546000906128e1906002611eb7565b905060006128fe826112a760095486611eb790919063ffffffff16565b9050600061290c848361202c565b90504761291882612b99565b6000612924478361202c565b905060006129476129406009548861202c90919063ffffffff16565b8390612038565b9050600061296060095483611eb790919063ffffffff16565b905080156129815760265461298190879083906001600160a01b0316612cbd565b600a54600090612996906112a1856002611eb7565b905080156129da576025546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156129d8573d6000803e3d6000fd5b505b600c546000906129ef906112a1866002611eb7565b90508015612a33576027546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612a31573d6000803e3d6000fd5b505b478015612a76576024546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612a74573d6000803e3d6000fd5b505b50506016805460ff19169055505050505050505050565b6012805463ff00000019166301000000179055602054601354601a54602154601154604051630f9ea58d60e11b81523060048201526024810193909352604483019190915260648201526001600160a01b0390921691631f3d4b1a9190608401600060405180830381600088803b158015612b0757600080fd5b5087f193505050508015612b19575060015b506000601455436022556012805463ff00000019169055565b6008546000906001600160a01b038381169116148015612b5457506000600f54115b15612b625750600f54610b1c565b6008546001600160a01b038481169116148015612b8157506000600e54115b15612b8f5750600e54610b1c565b5060105492915050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612bce57612bce6131b0565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612c27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4b91906131c6565b81600181518110612c5e57612c5e6131b0565b6001600160a01b039283166020918202929092010152600754612c849130911684611d93565b60075460405163791ac94760e01b81526001600160a01b039091169063791ac947906112e79085906000908690309042906004016131e3565b600754612cd59030906001600160a01b031685611d93565b60075460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0383811660848301524260a48301529091169063f305d71990849060c40160606040518083038185885af1158015612d43573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906113159190613254565b600060208083528351808285015260005b81811015612d9557858101830151858201604001528201612d79565b506000604082860101526040601f19601f8301168501019250505092915050565b600060208284031215612dc857600080fd5b5035919050565b6001600160a01b0381168114612de457600080fd5b50565b60008060408385031215612dfa57600080fd5b8235612e0581612dcf565b946020939093013593505050565b600080600060608486031215612e2857600080fd5b8335612e3381612dcf565b92506020840135612e4381612dcf565b929592945050506040919091013590565b600060208284031215612e6657600080fd5b8135610c9281612dcf565b8015158114612de457600080fd5b60008060408385031215612e9257600080fd5b8235612e9d81612dcf565b91506020830135612ead81612e71565b809150509250929050565b60008060408385031215612ecb57600080fd5b8235612e9d81612e71565b60008060408385031215612ee957600080fd5b50508035926020909101359150565b600080600060608486031215612f0d57600080fd5b8335612f1881612dcf565b92506020840135612f2881612dcf565b91506040840135612f3881612dcf565b809150509250925092565b60008060408385031215612f5657600080fd5b8235612f6181612dcf565b91506020830135612ead81612dcf565b600080600080600080600080610100898b031215612f8e57600080fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b600080600060608486031215612fdb57600080fd5b505081359360208301359350604090920135919050565b60006020828403121561300457600080fd5b5051919050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561307c5781600019048211156130625761306261302b565b8085161561306f57918102915b93841c9390800290613046565b509250929050565b60008261309357506001610b1c565b816130a057506000610b1c565b81600181146130b657600281146130c0576130dc565b6001915050610b1c565b60ff8411156130d1576130d161302b565b50506001821b610b1c565b5060208310610133831016604e8410600b84101617156130ff575081810a610b1c565b6131098383613041565b806000190482111561311d5761311d61302b565b029392505050565b6000610c9260ff841683613084565b60006020828403121561314657600080fd5b8151610c9281612e71565b8082028115828204841417610b1c57610b1c61302b565b80820180821115610b1c57610b1c61302b565b81810381811115610b1c57610b1c61302b565b6000826131ab57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156131d857600080fd5b8151610c9281612dcf565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156132335784516001600160a01b03168352938301939183019160010161320e565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561326957600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220ee3aca46ed2b19cf12da9b02b7a21980bf10ae2ec7bd77dc1d6ce3a741b6953864736f6c63430008130033

Deployed Bytecode

0x60806040526004361061036f5760003560e01c80637d1db4a5116101c6578063a8aa1b31116100f7578063d100a8e111610095578063e94dd17c1161006f578063e94dd17c146109d1578063ef40a670146109f1578063f2fde38b14610a1e578063f4e0d9ac14610a3e57600080fd5b8063d100a8e11461094b578063dd62ed3e1461096b578063e2d6f94c146109b157600080fd5b8063b15bf837116100d1578063b15bf837146108e7578063b2161bcd146108fc578063b57dcc9114610911578063b6b55f251461092b57600080fd5b8063a8aa1b3114610892578063a9059cbb146108b2578063ad9d9e4c146108d257600080fd5b80638b3dc018116101645780639358928b1161013e5780639358928b1461081a57806395d89b411461082f578063979d50501461085c578063a0821be31461087257600080fd5b80638b3dc018146107ba5780638cd4426d146107da5780639213c358146107fa57600080fd5b8063817b1cd2116101a0578063817b1cd21461073c57806381c0b35714610752578063884870c714610768578063893d20e81461078857600080fd5b80637d1db4a5146106fb5780637db70f1814610711578063800c54331461072757600080fd5b806334eead48116102a0578063643a1ed81161023e57806373ca05771161021857806373ca05771461069057806378002f84146106b057806378109e54146106c557806378c7dcd6146106db57600080fd5b8063643a1ed81461061a57806370a082311461063a5780637267c5f91461067057600080fd5b80633e9cc8411161027a5780633e9cc841146105b0578063468d34ed146105d057806348ff2b8b146105e55780635cdbdd971461060557600080fd5b806334eead4814610570578063367471f6146105865780633d17e5751461059b57600080fd5b80631ced75051161030d5780632e1a7d4d116102e75780632e1a7d4d146104c85780632f54bf6e146104e85780633095214814610517578063313ce5671461055457600080fd5b80631ced75051461047e5780631fadf0201461049357806323b872dd146104a857600080fd5b8063095ea7b311610349578063095ea7b3146104045780630acf3acc146104345780631501a3b91461045457806318160ddd1461046957600080fd5b806306fdde031461037b578063076b20d6146103bf57806307f74873146103e257600080fd5b3661037657005b600080fd5b34801561038757600080fd5b506040805180820190915260098152680506570652050756d760bc1b60208201525b6040516103b69190612d68565b60405180910390f35b3480156103cb57600080fd5b506103d4610a5e565b6040519081526020016103b6565b3480156103ee57600080fd5b506104026103fd366004612db6565b610ad3565b005b34801561041057600080fd5b5061042461041f366004612de7565b610b0b565b60405190151581526020016103b6565b34801561044057600080fd5b5061040261044f366004612db6565b610b22565b34801561046057600080fd5b506103d4610bcd565b34801561047557600080fd5b506001546103d4565b34801561048a57600080fd5b506103d4610bfe565b34801561049f57600080fd5b506022546103d4565b3480156104b457600080fd5b506104246104c3366004612e13565b610c2f565b3480156104d457600080fd5b506104026104e3366004612db6565b610c99565b3480156104f457600080fd5b50610424610503366004612e54565b6000546001600160a01b0391821691161490565b34801561052357600080fd5b5061052c610de3565b604080519586526020860194909452928401919091526060830152608082015260a0016103b6565b34801561056057600080fd5b50604051600981526020016103b6565b34801561057c57600080fd5b506103d460135481565b34801561059257600080fd5b506103d4611019565b3480156105a757600080fd5b506103d461104a565b3480156105bc57600080fd5b506012546104249062010000900460ff1681565b3480156105dc57600080fd5b5061040261107b565b3480156105f157600080fd5b50610402610600366004612e7f565b61114b565b34801561061157600080fd5b506103d46111ca565b34801561062657600080fd5b50610402610635366004612db6565b6111fb565b34801561064657600080fd5b506103d4610655366004612e54565b6001600160a01b031660009081526004602052604090205490565b34801561067c57600080fd5b5061040261068b366004612eb8565b61131d565b34801561069c57600080fd5b506104026106ab366004612ed6565b611376565b3480156106bc57600080fd5b50610402611494565b3480156106d157600080fd5b506103d460035481565b3480156106e757600080fd5b506104026106f6366004612db6565b6114a3565b34801561070757600080fd5b506103d460025481565b34801561071d57600080fd5b506103d460215481565b34801561073357600080fd5b506104026114d2565b34801561074857600080fd5b506103d4601e5481565b34801561075e57600080fd5b506103d4601a5481565b34801561077457600080fd5b50610402610783366004612ed6565b61153a565b34801561079457600080fd5b506000546001600160a01b03165b6040516001600160a01b0390911681526020016103b6565b3480156107c657600080fd5b506104026107d5366004612e54565b611664565b3480156107e657600080fd5b506104026107f5366004612de7565b6116c7565b34801561080657600080fd5b50610402610815366004612ef8565b61176c565b34801561082657600080fd5b506103d461183c565b34801561083b57600080fd5b506040805180820190915260048152635045505560e01b60208201526103a9565b34801561086857600080fd5b506103d460235481565b34801561087e57600080fd5b506103d461088d366004612e54565b6118a8565b34801561089e57600080fd5b506008546107a2906001600160a01b031681565b3480156108be57600080fd5b506104246108cd366004612de7565b6118d5565b3480156108de57600080fd5b506103d46118e2565b3480156108f357600080fd5b506103d4611913565b34801561090857600080fd5b506103d4611944565b34801561091d57600080fd5b50601f546104249060ff1681565b34801561093757600080fd5b50610402610946366004612db6565b611975565b34801561095757600080fd5b50610402610966366004612db6565b611ad6565b34801561097757600080fd5b506103d4610986366004612f43565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b3480156109bd57600080fd5b506104026109cc366004612f71565b611b11565b3480156109dd57600080fd5b506104026109ec366004612fc6565b611c1b565b3480156109fd57600080fd5b506103d4610a0c366004612e54565b601d6020526000908152604090205481565b348015610a2a57600080fd5b50610402610a39366004612e54565b611c81565b348015610a4a57600080fd5b50610402610a59366004612e54565b611cff565b6020546040516370a0823160e01b81526001600160a01b03909116600482015260009030906370a08231906024015b602060405180830381865afa158015610aaa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ace9190612ff2565b905090565b6000546001600160a01b03163314610b065760405162461bcd60e51b8152600401610afd9061300b565b60405180910390fd5b601355565b6000610b18338484611d93565b5060015b92915050565b6000610b3a610b336009600a613125565b8390611eb7565b6020546040516323b872dd60e01b81523360048201526001600160a01b0390911660248201526044810182905290915030906323b872dd906064016020604051808303816000875af1158015610b94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb89190613134565b50602354610bc69082611ec3565b6023555050565b60205460405163045f25d360e51b81523060048201526000916001600160a01b031690638be4ba6090602401610a8d565b60205460405163bffa330f60e01b81523060048201526000916001600160a01b03169063bffa330f90602401610a8d565b6000610c3c848484611ecf565b610c8e8433610c8985604051806060016040528060288152602001613283602891396001600160a01b038a1660009081526005602090815260408083203384529091529020549190612000565b611d93565b5060015b9392505050565b336000908152601d6020526040902054811115610d0e5760405162461bcd60e51b815260206004820152602d60248201527f45524332303a2043616e6e6f7420756e7374616b65206d6f7265207468616e2060448201526c185b5bdd5b9d081cdd185ad959609a1b6064820152608401610afd565b601f5460405163d8a9bf2960e01b8152336004820152602481018390526101009091046001600160a01b03169063d8a9bf2990604401600060405180830381600087803b158015610d5e57600080fd5b505af1158015610d72573d6000803e3d6000fd5b5050336000908152601d6020526040902054610d91925090508261202c565b336000908152601d6020526040902055601e54610dae908261202c565b601e556040514290829033907ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b56890600090a450565b6020546040516331fcaf6960e11b815230600482015260009182918291829182916001600160a01b0316906363f95ed290602401602060405180830381865afa158015610e34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e589190612ff2565b602054604051633f8223f360e01b81523060048201526001600160a01b0390911690633f8223f390602401602060405180830381865afa158015610ea0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec49190612ff2565b60205460405163045f25d360e51b81523060048201526001600160a01b0390911690638be4ba6090602401602060405180830381865afa158015610f0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f309190612ff2565b602054604051633255a03560e11b81523060048201526001600160a01b03909116906364ab406a90602401602060405180830381865afa158015610f78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9c9190612ff2565b60205460405163fea4456560e01b81523060048201526001600160a01b039091169063fea4456590602401602060405180830381865afa158015610fe4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110089190612ff2565b945094509450945094509091929394565b6020546040516307df467b60e21b81523060048201526000916001600160a01b031690631f7d19ec90602401610a8d565b6020546040516331fcaf6960e11b81523060048201526000916001600160a01b0316906363f95ed290602401610a8d565b6000546001600160a01b031633146110a55760405162461bcd60e51b8152600401610afd9061300b565b6012805463ff00000019166301000000179055602054601354601a54602154601154604051630f9ea58d60e11b81523060048201526024810193909352604483019190915260648201526001600160a01b0390921691631f3d4b1a9190608401600060405180830381600088803b15801561111f57600080fd5b5087f1158015611133573d6000803e3d6000fd5b50504360225550506012805463ff0000001916905550565b6000546001600160a01b031633146111755760405162461bcd60e51b8152600401610afd9061300b565b6001600160a01b038216600081815260066020526040808220805460ff19168515159081179091559051429391927ff61420caae4661cdd9554a2c8b6c89fc9f30f94abccb1da76abb2ec99783821191a45050565b602054604051631ea2804760e11b81523060048201526000916001600160a01b031690633d45008e90602401610a8d565b6000546001600160a01b031633146112255760405162461bcd60e51b8152600401610afd9061300b565b6011546020546040516370a0823160e01b81526001600160a01b0390911660048201526000916112ad916112a790859030906370a0823190602401602060405180830381865afa15801561127d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a19190612ff2565b90611eb7565b90612038565b60205460405163360b0fcd60e01b8152306004820152336024820152604481018390529192506001600160a01b03169063360b0fcd906064015b600060405180830381600087803b15801561130157600080fd5b505af1158015611315573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146113475760405162461bcd60e51b8152600401610afd9061300b565b6012805462ff00001916620100009315159390930292909217909155601f805460ff1916911515919091179055565b6000546001600160a01b031633146113a05760405162461bcd60e51b8152600401610afd9061300b565b60006113b1610b336009600a613125565b905060115483111561141d5760405162461bcd60e51b815260206004820152602f60248201527f56616c7565204d757374204265204c657373205468616e206f7220457175616c60448201526e103a37902232b737b6b4b730ba37b960891b6064820152608401610afd565b6001548111156114885760405162461bcd60e51b815260206004820152603060248201527f56616c7565204d757374204265204c657373205468616e206f7220457175616c60448201526f20746f20546f74616c20537570706c7960801b6064820152608401610afd565b60219290925550601a55565b601f5460ff166110a557600080fd5b6000546001600160a01b031633146114cd5760405162461bcd60e51b8152600401610afd9061300b565b601c55565b6000546001600160a01b031633146114fc5760405162461bcd60e51b8152600401610afd9061300b565b6012805461ff001916610100179055604051429033907f340c369ced7c3a65b67543c4f1e839173c42d01b38931b0c01b18c89a1d1ba4b90600090a3565b6000546001600160a01b031633146115645760405162461bcd60e51b8152600401610afd9061300b565b60006115796127106112a7856112a160015490565b905060006115906127106112a7856112a160015490565b905060006115a86127106112a760056112a160015490565b90508083101580156115ba5750808210155b6116245760405162461bcd60e51b815260206004820152603560248201527f45524332303a206d61782054587320616e64206d61782057616c6c65742063616044820152746e6e6f74206265206c657373207468616e202e352560581b6064820152608401610afd565b600283905560038290556040514290839085907f91db8d1965ad76c25e9cdb4624cb29364b3f3939376350bd898c06ab40fe707e90600090a45050505050565b6000546001600160a01b0316331461168e5760405162461bcd60e51b8152600401610afd9061300b565b602080546001600160a01b039092166001600160a01b03199092168217815560009182526006905260409020805460ff19166001179055565b6000546001600160a01b031633146116f15760405162461bcd60e51b8152600401610afd9061300b565b6024805460405163a9059cbb60e01b81526001600160a01b03918216600482015291820183905283169063a9059cbb906044016020604051808303816000875af1158015611743573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117679190613134565b505050565b6000546001600160a01b031633146117965760405162461bcd60e51b8152600401610afd9061300b565b602580546001600160a01b03199081166001600160a01b03868116918217909355602680548316868516908117909155602480549093169385169384179092556000818152600660209081526040808320805460ff1990811660019081179092558685529382902080549094161790925590514281527f358f3926f41536f5fa6926b5b6945502e5fdfb85b1876c473d06606ed0fae9ca910160405180910390a4505050565b60046020527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec5461dead60009081527f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd546001549192610ace9290916118a2919061202c565b9061202c565b6001600160a01b0381166000908152601d60209081526040808320546004909252822054610b1c9161202c565b6000610b18338484611ecf565b602054604051633255a03560e11b81523060048201526000916001600160a01b0316906364ab406a90602401610a8d565b602054604051633f8223f360e01b81523060048201526000916001600160a01b031690633f8223f390602401610a8d565b60205460405163fea4456560e01b81523060048201526000916001600160a01b03169063fea4456590602401610a8d565b336000908152601d602090815260408083205460049092529091205461199a9161202c565b811115611a015760405162461bcd60e51b815260206004820152602f60248201527f45524332303a2043616e6e6f74207374616b65206d6f7265207468616e20617660448201526e61696c61626c652062616c616e636560881b6064820152608401610afd565b601f5460405163773a0f0960e01b8152336004820152602481018390526101009091046001600160a01b03169063773a0f0990604401600060405180830381600087803b158015611a5157600080fd5b505af1158015611a65573d6000803e3d6000fd5b5050336000908152601d6020526040902054611a849250905082611ec3565b336000908152601d6020526040902055601e54611aa19082611ec3565b601e556040514290829033907f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a1590600090a450565b6000546001600160a01b03163314611b005760405162461bcd60e51b8152600401610afd9061300b565b60006112ad610b336009600a613125565b6000546001600160a01b03163314611b3b5760405162461bcd60e51b8152600401610afd9061300b565b6009889055600a879055600b869055600d849055600c859055600e839055600f82905560108190556011548311801590611b795750601154600f5411155b8015611b89575060115460105411155b611bd55760405162461bcd60e51b815260206004820152601b60248201527f45524332303a20696e76616c696420746f74616c20656e7472792500000000006044820152606401610afd565b4282847fdddb43af0ad29e5d9d3cb393fd94e8f11ac2c069da19545bac6ee6baf3ddc98984604051611c0991815260200190565b60405180910390a45050505050505050565b6000546001600160a01b03163314611c455760405162461bcd60e51b8152600401610afd9061300b565b6018839055600154611c6090620186a0906112a79085611eb7565b601955600154611c7990620186a0906112a79084611eb7565b601b55505050565b6000546001600160a01b03163314611cab5760405162461bcd60e51b8152600401610afd9061300b565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6000546001600160a01b03163314611d295760405162461bcd60e51b8152600401610afd9061300b565b601f8054610100600160a81b0319166101006001600160a01b03841690810291909117909155600081815260066020526040808220805460ff19166001179055514292917f23481943b6ef3dff645af874fbb24781bf224a02312f9cb308880e03e0a9ddee91a350565b6001600160a01b038316611df55760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610afd565b6001600160a01b038216611e565760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610afd565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610c928284613151565b6000610c928284613168565b611eda838383612044565b611ee48383612183565b611eef838383612225565b611efa838383612387565b611f05838383612497565b611f0f8383612522565b611f1a838383612545565b6001600160a01b038316600090815260046020526040902054611f3d908261202c565b6001600160a01b038416600090815260046020526040812091909155611f6384846126a3565b611f6d5781611f78565b611f78848484612701565b6001600160a01b038416600090815260046020526040902054909150611f9e9082611ec3565b6001600160a01b0380851660008181526004602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611ff29085815260200190565b60405180910390a350505050565b600081848411156120245760405162461bcd60e51b8152600401610afd9190612d68565b505050900390565b6000610c92828461317b565b6000610c92828461318e565b6001600160a01b0383166120a85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610afd565b6001600160a01b03821661210a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610afd565b6001600160a01b0383166000908152600460205260409020548111156117675760405162461bcd60e51b815260206004820152602860248201527f45524332303a2062656c6f7720617661696c61626c652062616c616e636520746044820152671a1c995cda1bdb1960c21b6064820152608401610afd565b6001600160a01b03821660009081526006602052604090205460ff161580156121c557506001600160a01b03811660009081526006602052604090205460ff16155b1561222157601254610100900460ff166122215760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2054726164696e67206973206e6f7420616c6c6f7765640000006044820152606401610afd565b5050565b6001600160a01b0383166000908152601d6020526040902054156122de576001600160a01b038316600090815260046020908152604080832054601d90925290912054612273908390611ec3565b11156122de5760405162461bcd60e51b815260206004820152603460248201527f45524332303a2065786365656473206d6178696d756d20616c6c6f776564206e60448201527337ba1031bab93932b73a363c9039ba30b5b2b21760611b6064820152608401610afd565b6012546301000000900460ff16611767576002548111158061231857506001600160a01b03831660009081526006602052604090205460ff165b8061233b57506001600160a01b03821660009081526006602052604090205460ff165b6117675760405162461bcd60e51b815260206004820152601860248201527f45524332303a207478206c696d697420657863656564656400000000000000006044820152606401610afd565b6001600160a01b03831660009081526006602052604090205460ff161580156123c957506001600160a01b03821660009081526006602052604090205460ff16155b80156123e357506008546001600160a01b03838116911614155b80156123fa57506001600160a01b03821661dead14155b801561241057506012546301000000900460ff16155b15611767576003546001600160a01b03831660009081526004602052604090205461243b9083611ec3565b11156117675760405162461bcd60e51b815260206004820152602560248201527f45524332303a2065786365656473206d6178696d756d2077616c6c657420616d60448201526437bab73a1760d91b6064820152608401610afd565b6008546001600160a01b0383811691161480156124cd57506001600160a01b03831660009081526006602052604090205460ff16155b80156124db5750601b548110155b80156124ea575060165460ff16155b801561250057506012546301000000900460ff16155b15611767576001601560008282546125189190613168565b9091555050505050565b61252c828261280e565b156122215761253c6019546128c3565b60006015555050565b601254610100900460ff16801561257557506001600160a01b03831660009081526006602052604090205460ff16155b801561258e57506008546001600160a01b038381169116145b801561259c5750601c548110155b80156125ab575060165460ff16155b80156125c157506012546301000000900460ff16155b156125df576001601460008282546125d99190613168565b90915550505b601254610100900460ff1680156125fe575060125462010000900460ff165b80156126235750602080546001600160a01b0316600090815260049091526040812054115b8015612633575060175460145410155b801561265857506001600160a01b03831660009081526006602052604090205460ff16155b801561267157506008546001600160a01b038381169116145b8015612680575060165460ff16155b801561269657506012546301000000900460ff16155b1561176757611767612a8d565b6001600160a01b03821660009081526006602052604081205460ff161580156126e557506001600160a01b03821660009081526006602052604090205460ff16155b8015610c925750506012546301000000900460ff161592915050565b60008061270e8585612b32565b11801561272557506012546301000000900460ff16155b156128075760006127476127398686612b32565b6011546112a1908690612038565b306000908152600460205260409020549091506127649082611ec3565b30600081815260046020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906127b59085815260200190565b60405180910390a3600d54156127f557602054600d546011546127f59230926001600160a01b03909116916127f091906112a1908990612038565b611ecf565b6127ff838261202c565b915050610c92565b5092915050565b60195430600090815260046020526040812054601654919211159060ff1615801561283b575060125460ff165b801561284e5750601254610100900460ff165b801561287357506001600160a01b03841660009081526006602052604090205460ff16155b801561288c57506008546001600160a01b038481169116145b801561289c575060185460155410155b80156128a55750805b80156128bb57506012546301000000900460ff16155b949350505050565b6016805460ff19166001179055600e546000906128e1906002611eb7565b905060006128fe826112a760095486611eb790919063ffffffff16565b9050600061290c848361202c565b90504761291882612b99565b6000612924478361202c565b905060006129476129406009548861202c90919063ffffffff16565b8390612038565b9050600061296060095483611eb790919063ffffffff16565b905080156129815760265461298190879083906001600160a01b0316612cbd565b600a54600090612996906112a1856002611eb7565b905080156129da576025546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156129d8573d6000803e3d6000fd5b505b600c546000906129ef906112a1866002611eb7565b90508015612a33576027546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612a31573d6000803e3d6000fd5b505b478015612a76576024546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612a74573d6000803e3d6000fd5b505b50506016805460ff19169055505050505050505050565b6012805463ff00000019166301000000179055602054601354601a54602154601154604051630f9ea58d60e11b81523060048201526024810193909352604483019190915260648201526001600160a01b0390921691631f3d4b1a9190608401600060405180830381600088803b158015612b0757600080fd5b5087f193505050508015612b19575060015b506000601455436022556012805463ff00000019169055565b6008546000906001600160a01b038381169116148015612b5457506000600f54115b15612b625750600f54610b1c565b6008546001600160a01b038481169116148015612b8157506000600e54115b15612b8f5750600e54610b1c565b5060105492915050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612bce57612bce6131b0565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612c27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4b91906131c6565b81600181518110612c5e57612c5e6131b0565b6001600160a01b039283166020918202929092010152600754612c849130911684611d93565b60075460405163791ac94760e01b81526001600160a01b039091169063791ac947906112e79085906000908690309042906004016131e3565b600754612cd59030906001600160a01b031685611d93565b60075460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0383811660848301524260a48301529091169063f305d71990849060c40160606040518083038185885af1158015612d43573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906113159190613254565b600060208083528351808285015260005b81811015612d9557858101830151858201604001528201612d79565b506000604082860101526040601f19601f8301168501019250505092915050565b600060208284031215612dc857600080fd5b5035919050565b6001600160a01b0381168114612de457600080fd5b50565b60008060408385031215612dfa57600080fd5b8235612e0581612dcf565b946020939093013593505050565b600080600060608486031215612e2857600080fd5b8335612e3381612dcf565b92506020840135612e4381612dcf565b929592945050506040919091013590565b600060208284031215612e6657600080fd5b8135610c9281612dcf565b8015158114612de457600080fd5b60008060408385031215612e9257600080fd5b8235612e9d81612dcf565b91506020830135612ead81612e71565b809150509250929050565b60008060408385031215612ecb57600080fd5b8235612e9d81612e71565b60008060408385031215612ee957600080fd5b50508035926020909101359150565b600080600060608486031215612f0d57600080fd5b8335612f1881612dcf565b92506020840135612f2881612dcf565b91506040840135612f3881612dcf565b809150509250925092565b60008060408385031215612f5657600080fd5b8235612f6181612dcf565b91506020830135612ead81612dcf565b600080600080600080600080610100898b031215612f8e57600080fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b600080600060608486031215612fdb57600080fd5b505081359360208301359350604090920135919050565b60006020828403121561300457600080fd5b5051919050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561307c5781600019048211156130625761306261302b565b8085161561306f57918102915b93841c9390800290613046565b509250929050565b60008261309357506001610b1c565b816130a057506000610b1c565b81600181146130b657600281146130c0576130dc565b6001915050610b1c565b60ff8411156130d1576130d161302b565b50506001821b610b1c565b5060208310610133831016604e8410600b84101617156130ff575081810a610b1c565b6131098383613041565b806000190482111561311d5761311d61302b565b029392505050565b6000610c9260ff841683613084565b60006020828403121561314657600080fd5b8151610c9281612e71565b8082028115828204841417610b1c57610b1c61302b565b80820180821115610b1c57610b1c61302b565b81810381811115610b1c57610b1c61302b565b6000826131ab57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156131d857600080fd5b8151610c9281612dcf565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156132335784516001600160a01b03168352938301939183019160010161320e565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561326957600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220ee3aca46ed2b19cf12da9b02b7a21980bf10ae2ec7bd77dc1d6ce3a741b6953864736f6c63430008130033

Deployed Bytecode Sourcemap

6003:20505:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10264:67;;;;;;;;;;-1:-1:-1;10324:5:0;;;;;;;;;;;;-1:-1:-1;;;10324:5:0;;;;10264:67;;;;;;;:::i;:::-;;;;;;;;26243:145;;;;;;;;;;;;;:::i;:::-;;;713:25:1;;;701:2;686:18;26243:145:0;567:177:1;20456:89:0;;;;;;;;;;-1:-1:-1;20456:89:0;;;;;:::i;:::-;;:::i;:::-;;11048:133;;;;;;;;;;-1:-1:-1;11048:133:0;;;;;:::i;:::-;;:::i;:::-;;;1555:14:1;;1548:22;1530:41;;1518:2;1503:18;11048:133:0;1390:187:1;21225:289:0;;;;;;;;;;-1:-1:-1;21225:289:0;;;;;:::i;:::-;;:::i;25659:134::-;;;;;;;;;;;;;:::i;10571:84::-;;;;;;;;;;-1:-1:-1;10641:12:0;;10571:84;;25369:134;;;;;;;;;;;;;:::i;26396:109::-;;;;;;;;;;-1:-1:-1;26478:18:0;;26396:109;;23938:309;;;;;;;;;;-1:-1:-1;23938:309:0;;;;;:::i;:::-;;:::i;16909:408::-;;;;;;;;;;-1:-1:-1;16909:408:0;;;;;:::i;:::-;;:::i;3154:87::-;;;;;;;;;;-1:-1:-1;3154:87:0;;;;;:::i;:::-;3209:4;3234:5;-1:-1:-1;;;;;3223:16:0;;;3234:5;;3223:16;;3154:87;24598:467;;;;;;;;;;;;;:::i;:::-;;;;2554:25:1;;;2610:2;2595:18;;2588:34;;;;2638:18;;;2631:34;;;;2696:2;2681:18;;2674:34;2739:3;2724:19;;2717:35;2541:3;2526:19;24598:467:0;2295:463:1;10414:67:0;;;;;;;;;;-1:-1:-1;10414:67:0;;6226:1;2905:36:1;;2893:2;2878:18;10414:67:0;2763:184:1;7158:29:0;;;;;;;;;;;;;;;;25511:140;;;;;;;;;;;;;:::i;25077:::-;;;;;;;;;;;;;:::i;7093:30::-;;;;;;;;;;-1:-1:-1;7093:30:0;;;;;;;;;;;22628:269;;;;;;;;;;;;;:::i;18554:192::-;;;;;;;;;;-1:-1:-1;18554:192:0;;;;;:::i;:::-;;:::i;26093:142::-;;;;;;;;;;;;;:::i;21522:261::-;;;;;;;;;;-1:-1:-1;21522:261:0;;;;;:::i;:::-;;:::i;10661:103::-;;;;;;;;;;-1:-1:-1;10661:103:0;;;;;:::i;:::-;-1:-1:-1;;;;;10744:18:0;10727:7;10744:18;;;:9;:18;;;;;;;10661:103;19747:134;;;;;;;;;;-1:-1:-1;19747:134:0;;;;;:::i;:::-;;:::i;19889:441::-;;;;;;;;;;-1:-1:-1;19889:441:0;;;;;:::i;:::-;;:::i;22321:299::-;;;;;;;;;;;;;:::i;6370:63::-;;;;;;;;;;;;;;;;20338:110;;;;;;;;;;-1:-1:-1;20338:110:0;;;;;:::i;:::-;;:::i;6303:60::-;;;;;;;;;;;;;;;;7928:39;;;;;;;;;;;;;;;;16319:140;;;;;;;;;;;;;:::i;7778:26::-;;;;;;;;;;;;;;;;7443:62;;;;;;;;;;;;;;;;19067:514;;;;;;;;;;-1:-1:-1;19067:514:0;;;;;:::i;:::-;;:::i;10487:78::-;;;;;;;;;;-1:-1:-1;10539:7:0;10557:5;-1:-1:-1;;;;;10557:5:0;10487:78;;;-1:-1:-1;;;;;4260:32:1;;;4242:51;;4230:2;4215:18;10487:78:0;4096:203:1;20553:152:0;;;;;;;;;;-1:-1:-1;20553:152:0;;;;;:::i;:::-;;:::i;19589:150::-;;;;;;;;;;-1:-1:-1;19589:150:0;;;;;:::i;:::-;;:::i;18151:395::-;;;;;;;;;;-1:-1:-1;18151:395:0;;;;;:::i;:::-;;:::i;11318:138::-;;;;;;;;;;;;;:::i;10337:71::-;;;;;;;;;;-1:-1:-1;10399:7:0;;;;;;;;;;;;-1:-1:-1;;;10399:7:0;;;;10337:71;;8002:33;;;;;;;;;;;;;;;;11187:125;;;;;;;;;;-1:-1:-1;11187:125:0;;;;;:::i;:::-;;:::i;6633:19::-;;;;;;;;;;-1:-1:-1;6633:19:0;;;;-1:-1:-1;;;;;6633:19:0;;;10770:139;;;;;;;;;;-1:-1:-1;10770:139:0;;;;;:::i;:::-;;:::i;25805:132::-;;;;;;;;;;;;;:::i;25225:136::-;;;;;;;;;;;;;:::i;25945:140::-;;;;;;;;;;;;;:::i;7806:39::-;;;;;;;;;;-1:-1:-1;7806:39:0;;;;;;;;16467:434;;;;;;;;;;-1:-1:-1;16467:434:0;;;;;:::i;:::-;;:::i;21791:209::-;;;;;;;;;;-1:-1:-1;21791:209:0;;;;;:::i;:::-;;:::i;10915:127::-;;;;;;;;;;-1:-1:-1;10915:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;11013:18:0;;;10996:7;11013:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;10915:127;17550:593;;;;;;;;;;-1:-1:-1;17550:593:0;;;;;:::i;:::-;;:::i;18754:305::-;;;;;;;;;;-1:-1:-1;18754:305:0;;;;;:::i;:::-;;:::i;7724:47::-;;;;;;;;;;-1:-1:-1;7724:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;3247:111;;;;;;;;;;-1:-1:-1;3247:111:0;;;;;:::i;:::-;;:::i;17325:217::-;;;;;;;;;;-1:-1:-1;17325:217:0;;;;;:::i;:::-;;:::i;26243:145::-;26368:9;;26328:51;;-1:-1:-1;;;26328:51:0;;-1:-1:-1;;;;;26368:9:0;;;26328:51;;;4242::1;26301:7:0;;26343:4;;26328:31;;4215:18:1;;26328:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26321:59;;26243:145;:::o;20456:89::-;3209:4;3234:5;-1:-1:-1;;;;;3234:5:0;3121:10;3223:16;3105:38;;;;-1:-1:-1;;;3105:38:0;;;;;;;:::i;:::-;;;;;;;;;20526:5:::1;:11:::0;20456:89::o;11048:133::-;11123:4;11130:37;11139:10;11151:7;11160:6;11130:8;:37::i;:::-;-1:-1:-1;11175:4:0;11048:133;;;;;:::o;21225:289::-;21296:20;21319:27;21330:15;6226:1;21330:2;:15;:::i;:::-;21319:6;;:10;:27::i;:::-;21413:9;;21358:80;;-1:-1:-1;;;21358:80:0;;21393:10;21358:80;;;8756:34:1;-1:-1:-1;;;;;21413:9:0;;;8806:18:1;;;8799:43;8858:18;;;8851:34;;;21296:50:0;;-1:-1:-1;21373:4:0;;21358:34;;8691:18:1;;21358:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;21470:18:0;;:36;;21493:12;21470:22;:36::i;:::-;21449:18;:57;-1:-1:-1;;21225:289:0:o;25659:134::-;25739:9;;:45;;-1:-1:-1;;;25739:45:0;;25778:4;25739:45;;;4242:51:1;25712:7:0;;-1:-1:-1;;;;;25739:9:0;;:30;;4215:18:1;;25739:45:0;4096:203:1;25369:134:0;25449:9;;:45;;-1:-1:-1;;;25449:45:0;;25488:4;25449:45;;;4242:51:1;25422:7:0;;-1:-1:-1;;;;;25449:9:0;;:30;;4215:18:1;;25449:45:0;4096:203:1;23938:309:0;24036:4;24053:36;24063:6;24071:9;24082:6;24053:9;:36::i;:::-;24100:117;24109:6;24117:10;24129:87;24165:6;24129:87;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24129:19:0;;;;;;:11;:19;;;;;;;;24149:10;24129:31;;;;;;;;;:87;:35;:87::i;:::-;24100:8;:117::i;:::-;-1:-1:-1;24235:4:0;23938:309;;;;;;:::o;16909:408::-;17003:10;16990:24;;;;:12;:24;;;;;;16980:34;;;16972:92;;;;-1:-1:-1;;;16972:92:0;;9348:2:1;16972:92:0;;;9330:21:1;9387:2;9367:18;;;9360:30;9426:34;9406:18;;;9399:62;-1:-1:-1;;;9477:18:1;;;9470:43;9530:19;;16972:92:0;9146:409:1;16972:92:0;17075:15;;:51;;-1:-1:-1;;;17075:51:0;;17107:10;17075:51;;;9734::1;9801:18;;;9794:34;;;17075:15:0;;;;-1:-1:-1;;;;;17075:15:0;;:31;;9707:18:1;;17075:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17177:10:0;17164:24;;;;:12;:24;;;;;;:36;;-1:-1:-1;17164:24:0;-1:-1:-1;17193:6:0;17164:28;:36::i;:::-;17150:10;17137:24;;;;:12;:24;;;;;:63;17225:11;;:23;;17241:6;17225:15;:23::i;:::-;17211:11;:37;17264:45;;17293:15;;17285:6;;17273:10;;17264:45;;;;;16909:408;:::o;24598:467::-;24785:9;;:48;;-1:-1:-1;;;24785:48:0;;24827:4;24785:48;;;4242:51:1;24652:22:0;;;;;;;;;;-1:-1:-1;;;;;24785:9:0;;:33;;4215:18:1;;24785:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24835:9;;:46;;-1:-1:-1;;;24835:46:0;;24875:4;24835:46;;;4242:51:1;-1:-1:-1;;;;;24835:9:0;;;;:31;;4215:18:1;;24835:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24897:9;;:45;;-1:-1:-1;;;24897:45:0;;24936:4;24897:45;;;4242:51:1;-1:-1:-1;;;;;24897:9:0;;;;:30;;4215:18:1;;24897:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24944:9;;:44;;-1:-1:-1;;;24944:44:0;;24982:4;24944:44;;;4242:51:1;-1:-1:-1;;;;;24944:9:0;;;;:29;;4215:18:1;;24944:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25008:9;;:48;;-1:-1:-1;;;25008:48:0;;25050:4;25008:48;;;4242:51:1;-1:-1:-1;;;;;25008:9:0;;;;:33;;4215:18:1;;25008:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24778:279;;;;;;;;;;24598:467;;;;;:::o;25511:140::-;25594:9;;:48;;-1:-1:-1;;;25594:48:0;;25636:4;25594:48;;;4242:51:1;25567:7:0;;-1:-1:-1;;;;;25594:9:0;;:33;;4215:18:1;;25594:48:0;4096:203:1;25077:140:0;25160:9;;:48;;-1:-1:-1;;;25160:48:0;;25202:4;25160:48;;;4242:51:1;25133:7:0;;-1:-1:-1;;;;;25160:9:0;;:33;;4215:18:1;;25160:48:0;4096:203:1;22628:269:0;3209:4;3234:5;-1:-1:-1;;;;;3234:5:0;3121:10;3223:16;3105:38;;;;-1:-1:-1;;;3105:38:0;;;;;;;:::i;:::-;22685:8:::1;:15:::0;;-1:-1:-1;;22685:15:0::1;::::0;::::1;::::0;;22711:9:::1;::::0;22749:5:::1;::::0;22771:15:::1;::::0;22788:16:::1;::::0;22806:11:::1;::::0;22711:107:::1;::::0;-1:-1:-1;;;22711:107:0;;22764:4:::1;22711:107;::::0;::::1;10070:51:1::0;10137:18;;;10130:34;;;;10180:18;;;10173:34;;;;10223:18;;;10216:34;-1:-1:-1;;;;;22711:9:0;;::::1;::::0;:32:::1;::::0;22749:5;10042:19:1;;22711:107:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;22850:12:0::1;22829:18;:33:::0;-1:-1:-1;;22873:8:0::1;:16:::0;;-1:-1:-1;;22873:16:0::1;::::0;;-1:-1:-1;22628:269:0:o;18554:192::-;3209:4;3234:5;-1:-1:-1;;;;;3234:5:0;3121:10;3223:16;3105:38;;;;-1:-1:-1;;;3105:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18638:21:0;::::1;;::::0;;;:11:::1;:21;::::0;;;;;:32;;-1:-1:-1;;18638:32:0::1;::::0;::::1;;::::0;;::::1;::::0;;;18686:52;;18722:15:::1;::::0;18638:32;;18686:52:::1;::::0;::::1;18554:192:::0;;:::o;26093:142::-;26177:9;;:49;;-1:-1:-1;;;26177:49:0;;26220:4;26177:49;;;4242:51:1;26150:7:0;;-1:-1:-1;;;;;26177:9:0;;:34;;4215:18:1;;26177:49:0;4096:203:1;21522:261:0;3209:4;3234:5;-1:-1:-1;;;;;3234:5:0;3121:10;3223:16;3105:38;;;;-1:-1:-1;;;3105:38:0;;;;;;;:::i;:::-;21693:11:::1;::::0;21664:9:::1;::::0;21624:51:::1;::::0;-1:-1:-1;;;21624:51:0;;-1:-1:-1;;;;;21664:9:0;;::::1;21624:51;::::0;::::1;4242::1::0;21607:14:0::1;::::0;21624:81:::1;::::0;:64:::1;::::0;21680:7;;21639:4:::1;::::0;21624:31:::1;::::0;4215:18:1;;21624:51:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:55:::0;::::1;:64::i;:::-;:68:::0;::::1;:81::i;:::-;21716:9;::::0;:59:::1;::::0;-1:-1:-1;;;21716:59:0;;21749:4:::1;21716:59;::::0;::::1;8756:34:1::0;21756:10:0::1;8806:18:1::0;;;8799:43;8858:18;;;8851:34;;;21607:98:0;;-1:-1:-1;;;;;;21716:9:0::1;::::0;:24:::1;::::0;8691:18:1;;21716:59:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;21596:187;21522:261:::0;:::o;19747:134::-;3209:4;3234:5;-1:-1:-1;;;;;3234:5:0;3121:10;3223:16;3105:38;;;;-1:-1:-1;;;3105:38:0;;;;;;;:::i;:::-;19824:11:::1;:19:::0;;-1:-1:-1;;19824:19:0::1;::::0;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;;19845::::1;:28:::0;;-1:-1:-1;;19845:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19747:134::o;19889:441::-;3209:4;3234:5;-1:-1:-1;;;;;3234:5:0;3121:10;3223:16;3105:38;;;;-1:-1:-1;;;3105:38:0;;;;;;;:::i;:::-;19995:17:::1;20015:31;20030:15;6226:1;20030:2;:15;:::i;20015:31::-;19995:51;;20086:11;;20065:17;:32;;20057:92;;;::::0;-1:-1:-1;;;20057:92:0;;10463:2:1;20057:92:0::1;::::0;::::1;10445:21:1::0;10502:2;10482:18;;;10475:30;10541:34;10521:18;;;10514:62;-1:-1:-1;;;10592:18:1;;;10585:45;10647:19;;20057:92:0::1;10261:411:1::0;20057:92:0::1;20181:12;;20168:9;:25;;20160:86;;;::::0;-1:-1:-1;;;20160:86:0;;10879:2:1;20160:86:0::1;::::0;::::1;10861:21:1::0;10918:2;10898:18;;;10891:30;10957:34;10937:18;;;10930:62;-1:-1:-1;;;11008:18:1;;;11001:46;11064:19;;20160:86:0::1;10677:412:1::0;20160:86:0::1;20257:16;:36:::0;;;;-1:-1:-1;20295:15:0::1;:27:::0;19889:441::o;22321:299::-;22377:19;;;;22369:28;;;;;20338:110;3209:4;3234:5;-1:-1:-1;;;;;3234:5:0;3121:10;3223:16;3105:38;;;;-1:-1:-1;;;3105:38:0;;;;;;;:::i;:::-;20411:20:::1;:29:::0;20338:110::o;16319:140::-;3209:4;3234:5;-1:-1:-1;;;;;3234:5:0;3121:10;3223:16;3105:38;;;;-1:-1:-1;;;3105:38:0;;;;;;;:::i;:::-;16371:14:::1;:21:::0;;-1:-1:-1;;16371:21:0::1;;;::::0;;16408:43:::1;::::0;16435:15:::1;::::0;16423:10:::1;::::0;16408:43:::1;::::0;16371:21;;16408:43:::1;16319:140::o:0;19067:514::-;3209:4;3234:5;-1:-1:-1;;;;;3234:5:0;3121:10;3223:16;3105:38;;;;-1:-1:-1;;;3105:38:0;;;;;;;:::i;:::-;19151:13:::1;19167:43;19203:5;19167:23;19185:4;19167:13;10641:12:::0;;;10571:84;19167:43:::1;19151:59;;19221:17;19241:46;19280:5;19241:26;19259:7;19241:13;10641:12:::0;;;10571:84;19241:46:::1;19221:66;;19289:13;19305:31;19330:5;19305:20;19323:1;19305:13;10641:12:::0;;;10571:84;19305:31:::1;19289:47;;19364:5;19355;:14;;:36;;;;;19386:5;19373:9;:18;;19355:36;19347:102;;;::::0;-1:-1:-1;;;19347:102:0;;11296:2:1;19347:102:0::1;::::0;::::1;11278:21:1::0;11335:2;11315:18;;;11308:30;11374:34;11354:18;;;11347:62;-1:-1:-1;;;11425:18:1;;;11418:51;11486:19;;19347:102:0::1;11094:417:1::0;19347:102:0::1;19460:12;:20:::0;;;19482:15:::1;:27:::0;;;19525:48:::1;::::0;19557:15:::1;::::0;19500:9;;19475:5;;19525:48:::1;::::0;-1:-1:-1;;19525:48:0::1;19140:441;;;19067:514:::0;;:::o;20553:152::-;3209:4;3234:5;-1:-1:-1;;;;;3234:5:0;3121:10;3223:16;3105:38;;;;-1:-1:-1;;;3105:38:0;;;;;;;:::i;:::-;20632:9:::1;:34:::0;;-1:-1:-1;;;;;20632:34:0;;::::1;-1:-1:-1::0;;;;;;20632:34:0;;::::1;::::0;::::1;::::0;;:9:::1;20668:22:::0;;;:11:::1;:22:::0;;;;;:29;;-1:-1:-1;;20668:29:0::1;20632:34:::0;20668:29:::1;::::0;;20553:152::o;19589:150::-;3209:4;3234:5;-1:-1:-1;;;;;3234:5:0;3121:10;3223:16;3105:38;;;;-1:-1:-1;;;3105:38:0;;;;;;;:::i;:::-;19701:20:::1;::::0;;19675:56:::1;::::0;-1:-1:-1;;;19675:56:0;;-1:-1:-1;;;;;19701:20:0;;::::1;19675:56;::::0;::::1;9734:51:1::0;9801:18;;;9794:34;;;19675:25:0;::::1;::::0;::::1;::::0;9707:18:1;;19675:56:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19589:150:::0;;:::o;18151:395::-;3209:4;3234:5;-1:-1:-1;;;;;3234:5:0;3121:10;3223:16;3105:38;;;;-1:-1:-1;;;3105:38:0;;;;;;;:::i;:::-;18273:18:::1;:31:::0;;-1:-1:-1;;;;;;18273:31:0;;::::1;-1:-1:-1::0;;;;;18273:31:0;;::::1;::::0;;::::1;::::0;;;18306:18:::1;:31:::0;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;18339:20:::1;:35:::0;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;18385:23:0;;;:11:::1;:23;::::0;;;;;;;:30;;-1:-1:-1;;18385:30:0;;::::1;-1:-1:-1::0;18385:30:0;;::::1;::::0;;;18417:23;;;;;;;:30;;;;::::1;;::::0;;;18463:75;;18522:15:::1;713:25:1::0;;18463:75:0::1;::::0;686:18:1;18463:75:0::1;;;;;;;18151:395:::0;;;:::o;11318:138::-;10744:9;:18;;;;8075:42;11377:7;10744:18;;;;;11394:12;;11377:7;;11394:60;;10744:18;;11394:33;;:12;:16;:33::i;:::-;:37;;:60::i;11187:125::-;-1:-1:-1;;;;;11289:20:0;;11250:7;11289:20;;;:12;:20;;;;;;;;;11267:9;:17;;;;;;:43;;:21;:43::i;10770:139::-;10848:4;10855:40;10865:10;10877:9;10888:6;10855:9;:40::i;25805:132::-;25884:9;;:44;;-1:-1:-1;;;25884:44:0;;25922:4;25884:44;;;4242:51:1;25857:7:0;;-1:-1:-1;;;;;25884:9:0;;:29;;4215:18:1;;25884:44:0;4096:203:1;25225:136:0;25306:9;;:46;;-1:-1:-1;;;25306:46:0;;25346:4;25306:46;;;4242:51:1;25279:7:0;;-1:-1:-1;;;;;25306:9:0;;:31;;4215:18:1;;25306:46:0;4096:203:1;25945:140:0;26028:9;;:48;;-1:-1:-1;;;26028:48:0;;26070:4;26028:48;;;4242:51:1;26001:7:0;;-1:-1:-1;;;;;26028:9:0;;:33;;4215:18:1;;26028:48:0;4096:203:1;16467:434:0;16586:10;16573:24;;;;:12;:24;;;;;;;;;16547:9;:21;;;;;;;:51;;:25;:51::i;:::-;16537:6;:61;;16529:121;;;;-1:-1:-1;;;16529:121:0;;11718:2:1;16529:121:0;;;11700:21:1;11757:2;11737:18;;;11730:30;11796:34;11776:18;;;11769:62;-1:-1:-1;;;11847:18:1;;;11840:45;11902:19;;16529:121:0;11516:411:1;16529:121:0;16661:15;;:50;;-1:-1:-1;;;16661:50:0;;16692:10;16661:50;;;9734:51:1;9801:18;;;9794:34;;;16661:15:0;;;;-1:-1:-1;;;;;16661:15:0;;:30;;9707:18:1;;16661:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16762:10:0;16749:24;;;;:12;:24;;;;;;:36;;-1:-1:-1;16749:24:0;-1:-1:-1;16778:6:0;16749:28;:36::i;:::-;16735:10;16722:24;;;;:12;:24;;;;;:63;16810:11;;:23;;16826:6;16810:15;:23::i;:::-;16796:11;:37;16849:44;;16877:15;;16869:6;;16857:10;;16849:44;;;;;16467:434;:::o;21791:209::-;3209:4;3234:5;-1:-1:-1;;;;;3234:5:0;3121:10;3223:16;3105:38;;;;-1:-1:-1;;;3105:38:0;;;;;;;:::i;:::-;21868:19:::1;21890:27;21901:15;6226:1;21901:2;:15;:::i;17550:593::-:0;3209:4;3234:5;-1:-1:-1;;;;;3234:5:0;3121:10;3223:16;3105:38;;;;-1:-1:-1;;;3105:38:0;;;;;;;:::i;:::-;17745:12:::1;:25:::0;;;17772:12:::1;:25:::0;;;17799:14:::1;:29:::0;;;17830:9:::1;:19:::0;;;17851:9:::1;:19:::0;;;17881:8:::1;:17:::0;;;17900:7:::1;:15:::0;;;17917:11:::1;:20:::0;;;17968:11:::1;::::0;17956:23;::::1;::::0;::::1;::::0;:49:::1;;;17994:11;;17983:7;;:22;;17956:49;:79;;;;;18024:11;;18009;;:26;;17956:79;17948:119;;;::::0;-1:-1:-1;;;17948:119:0;;12134:2:1;17948:119:0::1;::::0;::::1;12116:21:1::0;12173:2;12153:18;;;12146:30;12212:29;12192:18;;;12185:57;12259:18;;17948:119:0::1;11932:351:1::0;17948:119:0::1;18119:15;18104:5;18096:6;18083:52;18111:6;18083:52;;;;713:25:1::0;;701:2;686:18;;567:177;18083:52:0::1;;;;;;;;17550:593:::0;;;;;;;;:::o;18754:305::-;3209:4;3234:5;-1:-1:-1;;;;;3234:5:0;3121:10;3223:16;3105:38;;;;-1:-1:-1;;;3105:38:0;;;;;;;:::i;:::-;18883:10:::1;:24:::0;;;18925:12:::1;::::0;:53:::1;::::0;18970:6:::1;::::0;18925:32:::1;::::0;18942:14;18925:16:::1;:32::i;:53::-;18909:13;:69:::0;18997:12:::1;::::0;:54:::1;::::0;19043:6:::1;::::0;18997:33:::1;::::0;19014:15;18997:16:::1;:33::i;:54::-;18980:14;:71:::0;-1:-1:-1;;;18754:305:0:o;3247:111::-;3209:4;3234:5;-1:-1:-1;;;;;3234:5:0;3121:10;3223:16;3105:38;;;;-1:-1:-1;;;3105:38:0;;;;;;;:::i;:::-;3313:5:::1;:11:::0;;-1:-1:-1;;;;;;3313:11:0::1;-1:-1:-1::0;;;;;3313:11:0;::::1;::::0;;::::1;::::0;;;3331:25:::1;::::0;4242:51:1;;;3331:25:0::1;::::0;4230:2:1;4215:18;3331:25:0::1;;;;;;;3247:111:::0;:::o;17325:217::-;3209:4;3234:5;-1:-1:-1;;;;;3234:5:0;3121:10;3223:16;3105:38;;;;-1:-1:-1;;;3105:38:0;;;;;;;:::i;:::-;17400:15:::1;:44:::0;;-1:-1:-1;;;;;;17400:44:0::1;;-1:-1:-1::0;;;;;17400:44:0;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;17446:21:0;;;:11:::1;:21;::::0;;;;;:28;;-1:-1:-1;;17446:28:0::1;-1:-1:-1::0;17446:28:0::1;::::0;;17490:44;17518:15:::1;::::0;17400:44;17490::::1;::::0;::::1;17325:217:::0;:::o;24255:335::-;-1:-1:-1;;;;;24348:19:0;;24340:68;;;;-1:-1:-1;;;24340:68:0;;12706:2:1;24340:68:0;;;12688:21:1;12745:2;12725:18;;;12718:30;12784:34;12764:18;;;12757:62;-1:-1:-1;;;12835:18:1;;;12828:34;12879:19;;24340:68:0;12504:400:1;24340:68:0;-1:-1:-1;;;;;24427:21:0;;24419:68;;;;-1:-1:-1;;;24419:68:0;;13111:2:1;24419:68:0;;;13093:21:1;13150:2;13130:18;;;13123:30;13189:34;13169:18;;;13162:62;-1:-1:-1;;;13240:18:1;;;13233:32;13282:19;;24419:68:0;12909:398:1;24419:68:0;-1:-1:-1;;;;;24498:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;24550:32;;713:25:1;;;24550:32:0;;686:18:1;24550:32:0;;;;;;;24255:335;;;:::o;361:82::-;419:7;436:5;440:1;436;:5;:::i;185:82::-;243:7;260:5;264:1;260;:5;:::i;11818:732::-;11907:37;11918:6;11926:9;11937:6;11907:10;:37::i;:::-;11955:38;11975:6;11983:9;11955:19;:38::i;:::-;12004:39;12017:6;12025:9;12036:6;12004:12;:39::i;:::-;12054:41;12069:6;12077:9;12088:6;12054:14;:41::i;:::-;12106:43;12123:6;12131:9;12142:6;12106:16;:43::i;:::-;12160:27;12169:6;12177:9;12160:8;:27::i;:::-;12198:37;12209:6;12217:9;12228:6;12198:10;:37::i;:::-;-1:-1:-1;;;;;12266:17:0;;;;;;:9;:17;;;;;;:29;;12288:6;12266:21;:29::i;:::-;-1:-1:-1;;;;;12246:17:0;;;;;;:9;:17;;;;;:49;;;;12331:32;12256:6;12353:9;12331:13;:32::i;:::-;:78;;12403:6;12331:78;;;12366:34;12374:6;12382:9;12393:6;12366:7;:34::i;:::-;-1:-1:-1;;;;;12443:20:0;;;;;;:9;:20;;;;;;12306:103;;-1:-1:-1;12443:40:0;;12306:103;12443:24;:40::i;:::-;-1:-1:-1;;;;;12420:20:0;;;;;;;:9;:20;;;;;;;:63;;;;12499:43;;;;;;;;;;12527:14;713:25:1;;701:2;686:18;;567:177;12499:43:0;;;;;;;;11896:654;11818:732;;;:::o;1486:162::-;1572:7;1618:12;1610:6;;;;1602:29;;;;-1:-1:-1;;;1602:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;1640:5:0;;;1486:162::o;273:82::-;331:7;348:5;352:1;348;:5;:::i;449:82::-;507:7;524:5;528:1;524;:5;:::i;11464:346::-;-1:-1:-1;;;;;11568:20:0;;11560:70;;;;-1:-1:-1;;;11560:70:0;;14172:2:1;11560:70:0;;;14154:21:1;14211:2;14191:18;;;14184:30;14250:34;14230:18;;;14223:62;-1:-1:-1;;;14301:18:1;;;14294:35;14346:19;;11560:70:0;13970:401:1;11560:70:0;-1:-1:-1;;;;;11649:23:0;;11641:71;;;;-1:-1:-1;;;11641:71:0;;14578:2:1;11641:71:0;;;14560:21:1;14617:2;14597:18;;;14590:30;14656:34;14636:18;;;14629:62;-1:-1:-1;;;14707:18:1;;;14700:33;14750:19;;11641:71:0;14376:399:1;11641:71:0;-1:-1:-1;;;;;10744:18:0;;10727:7;10744:18;;;:9;:18;;;;;;11731:6;:27;;11723:79;;;;-1:-1:-1;;;11723:79:0;;14982:2:1;11723:79:0;;;14964:21:1;15021:2;15001:18;;;14994:30;15060:34;15040:18;;;15033:62;-1:-1:-1;;;15111:18:1;;;15104:38;15159:19;;11723:79:0;14780:404:1;12558:206:0;-1:-1:-1;;;;;12651:19:0;;;;;;:11;:19;;;;;;;;12650:20;:47;;;;-1:-1:-1;;;;;;12675:22:0;;;;;;:11;:22;;;;;;;;12674:23;12650:47;12647:110;;;12707:14;;;;;;;12699:56;;;;-1:-1:-1;;;12699:56:0;;15391:2:1;12699:56:0;;;15373:21:1;15430:2;15410:18;;;15403:30;15469:31;15449:18;;;15442:59;15518:18;;12699:56:0;15189:353:1;12699:56:0;12558:206;;:::o;13368:399::-;-1:-1:-1;;;;;13469:20:0;;13500:1;13469:20;;;:12;:20;;;;;;:33;13466:160;;-1:-1:-1;;;;;13550:17:0;;;;;;:9;:17;;;;;;;;;13524:12;:20;;;;;;;13513:32;;:6;;:10;:32::i;:::-;13512:55;;13504:120;;;;-1:-1:-1;;;13504:120:0;;15749:2:1;13504:120:0;;;15731:21:1;15788:2;15768:18;;;15761:30;15827:34;15807:18;;;15800:62;-1:-1:-1;;;15878:18:1;;;15871:50;15938:19;;13504:120:0;15547:416:1;13504:120:0;13640:8;;;;;;;13636:124;;13668:12;;13658:6;:22;;:45;;;-1:-1:-1;;;;;;13684:19:0;;;;;;:11;:19;;;;;;;;13658:45;:71;;;-1:-1:-1;;;;;;13707:22:0;;;;;;:11;:22;;;;;;;;13658:71;13650:108;;;;-1:-1:-1;;;13650:108:0;;16170:2:1;13650:108:0;;;16152:21:1;16209:2;16189:18;;;16182:30;16248:26;16228:18;;;16221:54;16292:18;;13650:108:0;15968:348:1;12772:351:0;-1:-1:-1;;;;;12876:19:0;;;;;;:11;:19;;;;;;;;12875:20;:47;;;;-1:-1:-1;;;;;;12900:22:0;;;;;;:11;:22;;;;;;;;12899:23;12875:47;:77;;;;-1:-1:-1;12947:4:0;;-1:-1:-1;;;;;12926:26:0;;;12947:4;;12926:26;;12875:77;:107;;;;-1:-1:-1;;;;;;12956:26:0;;8075:42;12956:26;;12875:107;:120;;;;-1:-1:-1;12987:8:0;;;;;;;12986:9;12875:120;12872:244;;;13057:15;;-1:-1:-1;;;;;13020:20:0;;;;;;:9;:20;;;;;;:32;;13045:6;13020:24;:32::i;:::-;13019:53;;13011:103;;;;-1:-1:-1;;;13011:103:0;;16523:2:1;13011:103:0;;;16505:21:1;16562:2;16542:18;;;16535:30;16601:34;16581:18;;;16574:62;-1:-1:-1;;;16652:18:1;;;16645:35;16697:19;;13011:103:0;16321:401:1;13131:229:0;13244:4;;-1:-1:-1;;;;;13231:17:0;;;13244:4;;13231:17;:41;;;;-1:-1:-1;;;;;;13253:19:0;;;;;;:11;:19;;;;;;;;13252:20;13231:41;:69;;;;;13286:14;;13276:6;:24;;13231:69;:82;;;;-1:-1:-1;13305:8:0;;;;13304:9;13231:82;:95;;;;-1:-1:-1;13318:8:0;;;;;;;13317:9;13231:95;13228:125;;;13349:1;13328:9;;:23;;;;;;;:::i;:::-;;;;-1:-1:-1;;13131:229:0;;;:::o;16134:173::-;16210:33;16225:6;16233:9;16210:14;:33::i;:::-;16207:93;;;16245:29;16260:13;;16245:14;:29::i;:::-;16296:1;16276:9;:22;16134:173;;:::o;20713:504::-;20807:14;;;;;;;:38;;;;-1:-1:-1;;;;;;20826:19:0;;;;;;:11;:19;;;;;;;;20825:20;20807:38;:68;;;;-1:-1:-1;20870:4:0;;-1:-1:-1;;;;;20849:26:0;;;20870:4;;20849:26;20807:68;:102;;;;;20889:20;;20879:6;:30;;20807:102;:115;;;;-1:-1:-1;20914:8:0;;;;20913:9;20807:115;:128;;;;-1:-1:-1;20927:8:0;;;;;;;20926:9;20807:128;20804:164;;;20964:1;20937:15;;:29;;;;;;;:::i;:::-;;;;-1:-1:-1;;20804:164:0;20981:14;;;;;;;:29;;;;-1:-1:-1;20999:11:0;;;;;;;20981:29;:75;;;;-1:-1:-1;21032:9:0;;;-1:-1:-1;;;;;21032:9:0;21054:1;10744:18;;;:9;:18;;;;;;;21014:42;20981:75;:114;;;;;21079:16;;21060:15;;:35;;20981:114;:138;;;;-1:-1:-1;;;;;;21100:19:0;;;;;;:11;:19;;;;;;;;21099:20;20981:138;:168;;;;-1:-1:-1;21144:4:0;;-1:-1:-1;;;;;21123:26:0;;;21144:4;;21123:26;20981:168;:194;;;;-1:-1:-1;21167:8:0;;;;21166:9;20981:194;:207;;;;-1:-1:-1;21180:8:0;;;;;;;21179:9;20981:207;20978:232;;;21190:18;:16;:18::i;22905:173::-;-1:-1:-1;;;;;23011:19:0;;22986:4;23011:19;;;:11;:19;;;;;;;;23010:20;:47;;;;-1:-1:-1;;;;;;23035:22:0;;;;;;:11;:22;;;;;;;;23034:23;23010:47;:60;;;;-1:-1:-1;;23062:8:0;;;;;;;23061:9;;22905:173;-1:-1:-1;;22905:173:0:o;23362:568::-;23448:7;23504:1;23471:30;23483:6;23491:9;23471:11;:30::i;:::-;:34;:47;;;;-1:-1:-1;23510:8:0;;;;;;;23509:9;23471:47;23468:440;;;23530:17;23550:59;23578:30;23590:6;23598:9;23578:11;:30::i;:::-;23561:11;;23550:23;;:6;;:10;:23::i;:59::-;23665:4;23647:24;;;;:9;:24;;;;;;23530:79;;-1:-1:-1;23647:39:0;;23530:79;23647:28;:39::i;:::-;23638:4;23620:24;;;;:9;:24;;;;;;;:66;;;;23702:42;;-1:-1:-1;;;;;23702:42:0;;;;;;;23734:9;713:25:1;;701:2;686:18;;567:177;23702:42:0;;;;;;;;23758:9;;:22;23755:113;;23815:9;;23855;;23838:11;;23782:84;;23800:4;;-1:-1:-1;;;;;23815:9:0;;;;23827:38;;23855:9;23827:23;;:6;;:10;:23::i;:38::-;23782:9;:84::i;:::-;23885:21;:6;23896:9;23885:10;:21::i;:::-;23878:28;;;;;23468:440;-1:-1:-1;23916:6:0;23362:568;-1:-1:-1;;23362:568:0:o;15780:346::-;15929:13;;15919:4;15862;10744:18;;;:9;:18;;;;;;15961:8;;15862:4;;-1:-1:-1;15901:41:0;;15961:8;;15960:9;:24;;;;-1:-1:-1;15973:11:0;;;;15960:24;:42;;;;-1:-1:-1;15988:14:0;;;;;;;15960:42;:66;;;;-1:-1:-1;;;;;;16007:19:0;;;;;;:11;:19;;;;;;;;16006:20;15960:66;:100;;;;-1:-1:-1;16056:4:0;;-1:-1:-1;;;;;16043:17:0;;;16056:4;;16043:17;15960:100;:127;;;;;16077:10;;16064:9;;:23;;15960:127;:145;;;;;16091:14;15960:145;:158;;;;-1:-1:-1;16110:8:0;;;;;;;16109:9;15960:158;15953:165;15780:346;-1:-1:-1;;;;15780:346:0:o;13775:1187::-;7680:8;:15;;-1:-1:-1;;7680:15:0;7691:4;7680:15;;;13870:8:::1;::::0;7680;;13869:17:::1;::::0;13884:1:::1;13869:14;:17::i;:::-;13846:40;;13897:32;13932:42;13961:12;13932:24;13943:12;;13932:6;:10;;:24;;;;:::i;:42::-;13897:77:::0;-1:-1:-1;13985:14:0::1;14002:36;:6:::0;13897:77;14002:10:::1;:36::i;:::-;13985:53:::0;-1:-1:-1;14074:21:0::1;14106:24;13985:53:::0;14106:16:::1;:24::i;:::-;14141:20;14164:41;:21;14190:14:::0;14164:25:::1;:41::i;:::-;14141:64;;14216:19;14237:48;14254:30;14271:12;;14254;:16;;:30;;;;:::i;:::-;14237:12:::0;;:16:::1;:48::i;:::-;14216:69;;14296:29;14328;14344:12;;14328:11;:15;;:29;;;;:::i;:::-;14296:61:::0;-1:-1:-1;14371:34:0;;14368:123:::1;;14469:18;::::0;14407:81:::1;::::0;14420:24;;14446:21;;-1:-1:-1;;;;;14469:18:0::1;14407:12;:81::i;:::-;14550:12;::::0;14501:23:::1;::::0;14527:36:::1;::::0;:18:::1;:11:::0;14543:1:::1;14527:15;:18::i;:36::-;14501:62:::0;-1:-1:-1;14577:28:0;;14574:88:::1;;14615:18;::::0;14607:53:::1;::::0;-1:-1:-1;;;;;14615:18:0;;::::1;::::0;14607:53;::::1;;;::::0;14644:15;;14615:18:::1;14607:53:::0;14615:18;14607:53;14644:15;14615:18;14607:53;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;14574:88;14718:9;::::0;14672:20:::1;::::0;14695:33:::1;::::0;:18:::1;:11:::0;14711:1:::1;14695:15;:18::i;:33::-;14672:56:::0;-1:-1:-1;14742:25:0;;14739:82:::1;;14785:9;::::0;14769:50:::1;::::0;-1:-1:-1;;;;;14785:9:0;;::::1;::::0;14769:50;::::1;;;::::0;14806:12;;14785:9:::1;14769:50:::0;14785:9;14769:50;14806:12;14785:9;14769:50;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;14739:82;14849:21;14884:20:::0;;14881:74:::1;;14914:20;::::0;14906:47:::1;::::0;-1:-1:-1;;;;;14914:20:0;;::::1;::::0;14906:47;::::1;;;::::0;14945:7;;14914:20:::1;14906:47:::0;14914:20;14906:47;14945:7;14914:20;14906:47;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;14881:74;-1:-1:-1::0;;7700:8:0;:16;;-1:-1:-1;;7700:16:0;;;-1:-1:-1;;;;;;;;;13775:1187:0:o;22008:305::-;22056:8;:15;;-1:-1:-1;;22056:15:0;;;;;22086:9;;22124:5;;22146:15;;22163:16;;22181:11;;22086:107;;-1:-1:-1;;;22086:107:0;;22139:4;22086:107;;;10070:51:1;10137:18;;;10130:34;;;;10180:18;;;10173:34;;;;10223:18;;;10216:34;-1:-1:-1;;;;;22086:9:0;;;;:32;;22124:5;10042:19:1;;22086:107:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22082:123;22232:1;22206:15;:28;22266:12;22245:18;:33;22289:8;:16;;-1:-1:-1;;22289:16:0;;;22008:305::o;23086:268::-;23201:4;;23165:7;;-1:-1:-1;;;;;23188:17:0;;;23201:4;;23188:17;:41;;;;;23227:1;23209:7;;:20;23188:41;23185:62;;;-1:-1:-1;23238:7:0;;23231:14;;23185:62;23270:4;;-1:-1:-1;;;;;23260:14:0;;;23270:4;;23260:14;:39;;;;;23297:1;23278:8;;:21;23260:39;23257:61;;;-1:-1:-1;23308:8:0;;23301:15;;23257:61;-1:-1:-1;23335:11:0;;23086:268;;;;:::o;15338:434::-;15428:16;;;15442:1;15428:16;;;;;;;;15404:21;;15428:16;;;;;;;;;;-1:-1:-1;15428:16:0;15404:40;;15473:4;15455;15460:1;15455:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;15455:23:0;;;:7;;;;;;;;;;:23;;;;15499:6;;:13;;;-1:-1:-1;;;15499:13:0;;;;:6;;;;;:11;;:13;;;;;15455:7;;15499:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15489:4;15494:1;15489:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;15489:23:0;;;:7;;;;;;;;;:23;15555:6;;15523:53;;15540:4;;15555:6;15564:11;15523:8;:53::i;:::-;15587:6;;:177;;-1:-1:-1;;;15587:177:0;;-1:-1:-1;;;;;15587:6:0;;;;:57;;:177;;15659:11;;15587:6;;15701:4;;15728;;15748:15;;15587:177;;;:::i;14970:360::-;15101:6;;15069:53;;15086:4;;-1:-1:-1;;;;;15101:6:0;15110:11;15069:8;:53::i;:::-;15133:6;;:189;;-1:-1:-1;;;15133:189:0;;15196:4;15133:189;;;18573:34:1;18623:18;;;18616:34;;;15133:6:0;18666:18:1;;;18659:34;;;18709:18;;;18702:34;-1:-1:-1;;;;;18773:15:1;;;18752:19;;;18745:44;15306:15:0;18805:19:1;;;18798:35;15133:6:0;;;;:22;;15163:9;;18507:19:1;;15133:189:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;749:180::-;808:6;861:2;849:9;840:7;836:23;832:32;829:52;;;877:1;874;867:12;829:52;-1:-1:-1;900:23:1;;749:180;-1:-1:-1;749:180:1:o;934:131::-;-1:-1:-1;;;;;1009:31:1;;999:42;;989:70;;1055:1;1052;1045:12;989:70;934:131;:::o;1070:315::-;1138:6;1146;1199:2;1187:9;1178:7;1174:23;1170:32;1167:52;;;1215:1;1212;1205:12;1167:52;1254:9;1241:23;1273:31;1298:5;1273:31;:::i;:::-;1323:5;1375:2;1360:18;;;;1347:32;;-1:-1:-1;;;1070:315:1:o;1582:456::-;1659:6;1667;1675;1728:2;1716:9;1707:7;1703:23;1699:32;1696:52;;;1744:1;1741;1734:12;1696:52;1783:9;1770:23;1802:31;1827:5;1802:31;:::i;:::-;1852:5;-1:-1:-1;1909:2:1;1894:18;;1881:32;1922:33;1881:32;1922:33;:::i;:::-;1582:456;;1974:7;;-1:-1:-1;;;2028:2:1;2013:18;;;;2000:32;;1582:456::o;2043:247::-;2102:6;2155:2;2143:9;2134:7;2130:23;2126:32;2123:52;;;2171:1;2168;2161:12;2123:52;2210:9;2197:23;2229:31;2254:5;2229:31;:::i;2952:118::-;3038:5;3031:13;3024:21;3017:5;3014:32;3004:60;;3060:1;3057;3050:12;3075:382;3140:6;3148;3201:2;3189:9;3180:7;3176:23;3172:32;3169:52;;;3217:1;3214;3207:12;3169:52;3256:9;3243:23;3275:31;3300:5;3275:31;:::i;:::-;3325:5;-1:-1:-1;3382:2:1;3367:18;;3354:32;3395:30;3354:32;3395:30;:::i;:::-;3444:7;3434:17;;;3075:382;;;;;:::o;3462:376::-;3524:6;3532;3585:2;3573:9;3564:7;3560:23;3556:32;3553:52;;;3601:1;3598;3591:12;3553:52;3640:9;3627:23;3659:28;3681:5;3659:28;:::i;3843:248::-;3911:6;3919;3972:2;3960:9;3951:7;3947:23;3943:32;3940:52;;;3988:1;3985;3978:12;3940:52;-1:-1:-1;;4011:23:1;;;4081:2;4066:18;;;4053:32;;-1:-1:-1;3843:248:1:o;4304:529::-;4381:6;4389;4397;4450:2;4438:9;4429:7;4425:23;4421:32;4418:52;;;4466:1;4463;4456:12;4418:52;4505:9;4492:23;4524:31;4549:5;4524:31;:::i;:::-;4574:5;-1:-1:-1;4631:2:1;4616:18;;4603:32;4644:33;4603:32;4644:33;:::i;:::-;4696:7;-1:-1:-1;4755:2:1;4740:18;;4727:32;4768:33;4727:32;4768:33;:::i;:::-;4820:7;4810:17;;;4304:529;;;;;:::o;4838:388::-;4906:6;4914;4967:2;4955:9;4946:7;4942:23;4938:32;4935:52;;;4983:1;4980;4973:12;4935:52;5022:9;5009:23;5041:31;5066:5;5041:31;:::i;:::-;5091:5;-1:-1:-1;5148:2:1;5133:18;;5120:32;5161:33;5120:32;5161:33;:::i;5231:661::-;5353:6;5361;5369;5377;5385;5393;5401;5409;5462:3;5450:9;5441:7;5437:23;5433:33;5430:53;;;5479:1;5476;5469:12;5430:53;-1:-1:-1;;5502:23:1;;;5572:2;5557:18;;5544:32;;-1:-1:-1;5623:2:1;5608:18;;5595:32;;5674:2;5659:18;;5646:32;;-1:-1:-1;5725:3:1;5710:19;;5697:33;;-1:-1:-1;5777:3:1;5762:19;;5749:33;;-1:-1:-1;5829:3:1;5814:19;;5801:33;;-1:-1:-1;5881:3:1;5866:19;5853:33;;-1:-1:-1;5231:661:1;-1:-1:-1;5231:661:1:o;5897:316::-;5974:6;5982;5990;6043:2;6031:9;6022:7;6018:23;6014:32;6011:52;;;6059:1;6056;6049:12;6011:52;-1:-1:-1;;6082:23:1;;;6152:2;6137:18;;6124:32;;-1:-1:-1;6203:2:1;6188:18;;;6175:32;;5897:316;-1:-1:-1;5897:316:1:o;6478:184::-;6548:6;6601:2;6589:9;6580:7;6576:23;6572:32;6569:52;;;6617:1;6614;6607:12;6569:52;-1:-1:-1;6640:16:1;;6478:184;-1:-1:-1;6478:184:1:o;6667:329::-;6869:2;6851:21;;;6908:1;6888:18;;;6881:29;-1:-1:-1;;;6941:2:1;6926:18;;6919:36;6987:2;6972:18;;6667:329::o;7001:127::-;7062:10;7057:3;7053:20;7050:1;7043:31;7093:4;7090:1;7083:15;7117:4;7114:1;7107:15;7133:422;7222:1;7265:5;7222:1;7279:270;7300:7;7290:8;7287:21;7279:270;;;7359:4;7355:1;7351:6;7347:17;7341:4;7338:27;7335:53;;;7368:18;;:::i;:::-;7418:7;7408:8;7404:22;7401:55;;;7438:16;;;;7401:55;7517:22;;;;7477:15;;;;7279:270;;;7283:3;7133:422;;;;;:::o;7560:806::-;7609:5;7639:8;7629:80;;-1:-1:-1;7680:1:1;7694:5;;7629:80;7728:4;7718:76;;-1:-1:-1;7765:1:1;7779:5;;7718:76;7810:4;7828:1;7823:59;;;;7896:1;7891:130;;;;7803:218;;7823:59;7853:1;7844:10;;7867:5;;;7891:130;7928:3;7918:8;7915:17;7912:43;;;7935:18;;:::i;:::-;-1:-1:-1;;7991:1:1;7977:16;;8006:5;;7803:218;;8105:2;8095:8;8092:16;8086:3;8080:4;8077:13;8073:36;8067:2;8057:8;8054:16;8049:2;8043:4;8040:12;8036:35;8033:77;8030:159;;;-1:-1:-1;8142:19:1;;;8174:5;;8030:159;8221:34;8246:8;8240:4;8221:34;:::i;:::-;8291:6;8287:1;8283:6;8279:19;8270:7;8267:32;8264:58;;;8302:18;;:::i;:::-;8340:20;;7560:806;-1:-1:-1;;;7560:806:1:o;8371:140::-;8429:5;8458:47;8499:4;8489:8;8485:19;8479:4;8458:47;:::i;8896:245::-;8963:6;9016:2;9004:9;8995:7;8991:23;8987:32;8984:52;;;9032:1;9029;9022:12;8984:52;9064:9;9058:16;9083:28;9105:5;9083:28;:::i;13312:168::-;13385:9;;;13416;;13433:15;;;13427:22;;13413:37;13403:71;;13454:18;;:::i;13485:125::-;13550:9;;;13571:10;;;13568:36;;;13584:18;;:::i;13615:128::-;13682:9;;;13703:11;;;13700:37;;;13717:18;;:::i;13748:217::-;13788:1;13814;13804:132;;13858:10;13853:3;13849:20;13846:1;13839:31;13893:4;13890:1;13883:15;13921:4;13918:1;13911:15;13804:132;-1:-1:-1;13950:9:1;;13748:217::o;16859:127::-;16920:10;16915:3;16911:20;16908:1;16901:31;16951:4;16948:1;16941:15;16975:4;16972:1;16965:15;16991:251;17061:6;17114:2;17102:9;17093:7;17089:23;17085:32;17082:52;;;17130:1;17127;17120:12;17082:52;17162:9;17156:16;17181:31;17206:5;17181:31;:::i;17247:980::-;17509:4;17557:3;17546:9;17542:19;17588:6;17577:9;17570:25;17614:2;17652:6;17647:2;17636:9;17632:18;17625:34;17695:3;17690:2;17679:9;17675:18;17668:31;17719:6;17754;17748:13;17785:6;17777;17770:22;17823:3;17812:9;17808:19;17801:26;;17862:2;17854:6;17850:15;17836:29;;17883:1;17893:195;17907:6;17904:1;17901:13;17893:195;;;17972:13;;-1:-1:-1;;;;;17968:39:1;17956:52;;18063:15;;;;18028:12;;;;18004:1;17922:9;17893:195;;;-1:-1:-1;;;;;;;18144:32:1;;;;18139:2;18124:18;;18117:60;-1:-1:-1;;;18208:3:1;18193:19;18186:35;18105:3;17247:980;-1:-1:-1;;;17247:980:1:o;18844:306::-;18932:6;18940;18948;19001:2;18989:9;18980:7;18976:23;18972:32;18969:52;;;19017:1;19014;19007:12;18969:52;19046:9;19040:16;19030:26;;19096:2;19085:9;19081:18;19075:25;19065:35;;19140:2;19129:9;19125:18;19119:25;19109:35;;18844:306;;;;;:::o

Swarm Source

ipfs://ee3aca46ed2b19cf12da9b02b7a21980bf10ae2ec7bd77dc1d6ce3a741b69538
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.