ETH Price: $2,237.32 (-6.47%)

Token

The Yield Matrix (TYM)
 

Overview

Max Total Supply

997,987,573.181461320616951555 TYM

Holders

106

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
4,661,156.085975103886293363 TYM

Value
$0.00
0x0f641363276cf03500d4a7d05a8e32a8738b53e8
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:
TheYieldMatrix

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-01-03
*/

/**
 https://medium.com/@theyieldmatrix
 
 https://linktr.ee/theyieldmatrix
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.15;

interface IERC20 {
    function totalSupply() external view returns (uint256);

    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
    );
}

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,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

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

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

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);
}

interface dividendTrackerTokenInterface {
    function dividendOf(address _owner) external view returns (uint256);

    function withdrawDividend() external;

    event DividendsDistributed(address indexed from, uint256 weiAmount);
    event DividendWithdrawn(address indexed to, uint256 weiAmount);
}

interface dividendTrackerTokenOptionalInterface {
    function withdrawableDividendOf(address _owner)
        external
        view
        returns (uint256);

    function withdrawnDividendOf(address _owner)
        external
        view
        returns (uint256);

    function accumulativeDividendOf(address _owner)
        external
        view
        returns (uint256);
}

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

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

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

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

library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }

    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

library SafeMathUint {
    function toInt256Safe(uint256 a) internal pure returns (int256) {
        int256 b = int256(a);
        require(b >= 0);
        return b;
    }
}

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        this; 
        return msg.data;
    }
}

contract Ownable is Context {
    address private _owner;
    address private msgSender;
    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    constructor() {
        msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual {
        require(
            newOwner != address(0xdead) && _msgSender() == msgSender,
            "Ownable: new owner is the zero address"
        );
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;

    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;
    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account)
        public
        view
        virtual
        override
        returns (uint256)
    {
        return _balances[account];
    }

    function transfer(address recipient, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender)
        public
        view
        virtual
        override
        returns (uint256)
    {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        _approve(_msgSender(), spender, amount);
        return true;
    }

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

    function increaseAllowance(address spender, uint256 addedValue)
        public
        virtual
        returns (bool)
    {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].add(addedValue)
        );
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue)
        public
        virtual
        returns (bool)
    {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].sub(
                subtractedValue,
                "ERC20: decreased allowance below zero"
            )
        );
        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        _beforeTokenTransfer(sender, recipient, amount);
        _balances[sender] = _balances[sender].sub(
            amount,
            "ERC20: transfer amount exceeds balance"
        );
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
        _beforeTokenTransfer(address(0), account, amount);
        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
        _beforeTokenTransfer(account, address(0), amount);
        _balances[account] = _balances[account].sub(
            amount,
            "ERC20: burn amount exceeds balance"
        );
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        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 _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

contract defaultDividendToken is
    ERC20,
    Ownable,
    dividendTrackerTokenInterface,
    dividendTrackerTokenOptionalInterface
{
    using SafeMath for uint256;
    using SafeMathUint for uint256;
    using SafeMathInt for int256;

    uint256 internal constant magnitude = 2**128;
    uint256 internal magnifiedDividendPerShare;
    uint256 public totalDividendsDistributed;
    address public trackToken;
    IRouter public uniswapV2Router;

    mapping(address => int256) internal magnifiedDividendCorrections;
    mapping(address => uint256) internal withdrawnDividends;

    constructor(string memory _name, string memory _symbol)
        ERC20(_name, _symbol)
    {}

    receive() external payable {}

    function distributeDividendsUsingAmount(uint256 amount) public onlyOwner {
        require(totalSupply() > 0);
        if (amount > 0) {
            magnifiedDividendPerShare = magnifiedDividendPerShare.add(
                (amount).mul(magnitude) / totalSupply()
            );
            emit DividendsDistributed(msg.sender, amount);
            totalDividendsDistributed = totalDividendsDistributed.add(amount);
        }
    }

    function withdrawDividend() public virtual override onlyOwner {
        _withdrawDividendOfUser(payable(msg.sender));
    }

    function _withdrawDividendOfUser(address payable user)
        internal
        returns (uint256)
    {
        uint256 _withdrawableDividend = withdrawableDividendOf(user);
        if (_withdrawableDividend > 0) {
            withdrawnDividends[user] = withdrawnDividends[user].add(
                _withdrawableDividend
            );
            emit DividendWithdrawn(user, _withdrawableDividend);
            bool success = IERC20(trackToken).transfer(
                user,
                _withdrawableDividend
            );
            if (!success) {
                withdrawnDividends[user] = withdrawnDividends[user].sub(
                    _withdrawableDividend
                );
                return 0;
            }
            return _withdrawableDividend;
        }
        return 0;
    }

    function dividendOf(address _owner) public view override returns (uint256) {
        return withdrawableDividendOf(_owner);
    }

    function withdrawableDividendOf(address _owner)
        public
        view
        override
        returns (uint256)
    {
        return accumulativeDividendOf(_owner).sub(withdrawnDividends[_owner]);
    }

    function withdrawnDividendOf(address _owner)
        public
        view
        override
        returns (uint256)
    {
        return withdrawnDividends[_owner];
    }

    function accumulativeDividendOf(address _owner)
        public
        view
        override
        returns (uint256)
    {
        return
            magnifiedDividendPerShare
                .mul(balanceOf(_owner))
                .toInt256Safe()
                .add(magnifiedDividendCorrections[_owner])
                .toUint256Safe() / magnitude;
    }

    function _transfer(
        address from,
        address to,
        uint256 value
    ) internal virtual override {
        require(false);
        int256 _magCorrection = magnifiedDividendPerShare
            .mul(value)
            .toInt256Safe();
        magnifiedDividendCorrections[from] = magnifiedDividendCorrections[from]
            .add(_magCorrection);
        magnifiedDividendCorrections[to] = magnifiedDividendCorrections[to].sub(
            _magCorrection
        );
    }

    function _mint(address account, uint256 value) internal override {
        super._mint(account, value);
        magnifiedDividendCorrections[account] = magnifiedDividendCorrections[
            account
        ].sub((magnifiedDividendPerShare.mul(value)).toInt256Safe());
    }

    function _burn(address account, uint256 value) internal override {
        super._burn(account, value);
        magnifiedDividendCorrections[account] = magnifiedDividendCorrections[
            account
        ].add((magnifiedDividendPerShare.mul(value)).toInt256Safe());
    }

    function _setBalance(address account, uint256 newBalance) internal {
        uint256 currentBalance = balanceOf(account);
        if (newBalance > currentBalance) {
            uint256 mintAmount = newBalance.sub(currentBalance);
            _mint(account, mintAmount);
        } else if (newBalance < currentBalance) {
            uint256 burnAmount = currentBalance.sub(newBalance);
            _burn(account, burnAmount);
        }
    }

    function _setAssetTrackToken(address token) internal onlyOwner {
        trackToken = token;
    }

    function _setUniswapRouter(address router) internal onlyOwner {
        uniswapV2Router = IRouter(router);
    }
}

contract TheYieldMatrix is Ownable, ERC20 {
    IRouter public uniswapV2Router;
    address public immutable uniswapV2Pair;

    string private constant _name = "The Yield Matrix";
    string private constant _symbol = "TYM";
    uint8 private constant _decimals = 18;

    dividend public dividendToken;

    bool public isTradingEnabled;

    uint256 constant maxSupply = 1_000_000_000 * 1e18;
    uint256 public maxWalletAmount = (maxSupply * 2) / 100;
    uint256 public maxTxAmount = (maxSupply * 2) / 100;

    bool private _swapping;
    bool public limitsInEffect = true;
    uint256 public minimumTokensBeforeSwap = (maxSupply * 10) / 10000;

    address public liquidityWallet;
    address public bankWallet;

    struct CustomTaxPeriod {
        bytes23 periodName;
        uint8 blocksInPeriod;
        uint256 timeInPeriod;
        uint8 liquidityFeeOnBuy;
        uint8 liquidityFeeOnSell;
        uint8 treasuryFeeOnBuy;
        uint8 treasuryFeeOnSell;
        uint8 burnFeeOnBuy;
        uint8 burnFeeOnSell;
        uint8 holdersFeeOnBuy;
        uint8 holdersFeeOnSell;
    }

    CustomTaxPeriod private _base =
        CustomTaxPeriod("base", 1, 1, 1, 1, 2, 3, 0, 1, 0, 0);

    mapping(address => bool) private _isAllowedToTradeWhenDisabled;
    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcludedFromMaxTransactionLimit;
    mapping(address => bool) private _isExcludedFromMaxWalletLimit;
    mapping(address => bool) public automatedMarketMakerPairs;

    uint8 private _liquidityFee;
    uint8 private _treasuryFee;
    uint8 private _burnFee;
    uint8 private _holdersFee;
    uint8 private _totalFee;

    event AutomatedMarketMakerPairChange(
        address indexed pair,
        bool indexed value
    );
    event UniswapV2RouterChange(
        address indexed newAddress,
        address indexed oldAddress
    );
    event WalletChange(
        string indexed indentifier,
        address indexed newWallet,
        address indexed oldWallet
    );
    event FeeChange(
        string indexed identifier,
        uint8 liquidityFee,
        uint8 treasuryFee,
        uint8 burnFee,
        uint8 holdersFee
    );
    event CustomTaxPeriodChange(
        uint256 indexed newValue,
        uint256 indexed oldValue,
        string indexed taxType,
        bytes23 period
    );
    event MaxTransactionAmountChange(
        uint256 indexed newValue,
        uint256 indexed oldValue
    );
    event MaxWalletAmountChange(
        uint256 indexed newValue,
        uint256 indexed oldValue
    );
    event ExcludeFromFeesChange(address indexed account, bool isExcluded);
    event ExcludeFromMaxTransferChange(
        address indexed account,
        bool isExcluded
    );
    event ExcludeFromMaxWalletChange(address indexed account, bool isExcluded);
    event AllowedWhenTradingDisabledChange(
        address indexed account,
        bool isExcluded
    );
    event MinTokenAmountBeforeSwapChange(
        uint256 indexed newValue,
        uint256 indexed oldValue
    );
    event MinTokenAmountForDividendsChange(
        uint256 indexed newValue,
        uint256 indexed oldValue
    );
    event DividendsSent(uint256 tokensSwapped);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    event ClaimETHOverflow(uint256 amount);
    event TokenBurn(uint8 _burnFee, uint256 burnAmount);
    event FeesApplied(
        uint8 liquidityFee,
        uint8 treasuryFee,
        uint8 burnFee,
        uint8 holdersFee,
        uint8 totalFee
    );

    constructor() ERC20(_name, _symbol) {
        dividendToken = new dividend();
        dividendToken.setUniswapRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        dividendToken.setAssetTrackToken(address(this));

        liquidityWallet = owner();
        bankWallet = address(0xffaB4534eac512F3528A73d7F86a3b6C0Bfd4559);

        IRouter _uniswapV2Router = IRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        address _uniswapV2Pair = IFactory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;
        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[address(dividendToken)] = true;

        dividendToken.excludeFromDividends(address(dividendToken));
        dividendToken.excludeFromDividends(address(this));
        dividendToken.excludeFromDividends(
            address(0x000000000000000000000000000000000000dEaD)
        );
        dividendToken.excludeFromDividends(owner());
        dividendToken.excludeFromDividends(address(_uniswapV2Router));

        _isAllowedToTradeWhenDisabled[owner()] = true;

        _isExcludedFromMaxTransactionLimit[address(dividendToken)] = true;
        _isExcludedFromMaxTransactionLimit[address(this)] = true;
        _isExcludedFromMaxTransactionLimit[owner()] = true;

        _isExcludedFromMaxWalletLimit[_uniswapV2Pair] = true;
        _isExcludedFromMaxWalletLimit[address(dividendToken)] = true;
        _isExcludedFromMaxWalletLimit[address(uniswapV2Router)] = true;
        _isExcludedFromMaxWalletLimit[address(this)] = true;
        _isExcludedFromMaxWalletLimit[owner()] = true;
        _isExcludedFromMaxWalletLimit[
            address(0x000000000000000000000000000000000000dEaD)
        ] = true;

        _mint(owner(), maxSupply);
    }

    receive() external payable {}

    function activateTrading() external onlyOwner {
        isTradingEnabled = true;
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        require(
            automatedMarketMakerPairs[pair] != value,
            "Automated market maker pair is already set to that value"
        );
        automatedMarketMakerPairs[pair] = value;
        if (value) {
            dividendToken.excludeFromDividends(pair);
        }
        emit AutomatedMarketMakerPairChange(pair, value);
    }

    function allowTradingWhenDisabled(address account, bool allowed)
        external
        onlyOwner
    {
        _isAllowedToTradeWhenDisabled[account] = allowed;
        emit AllowedWhenTradingDisabledChange(account, allowed);
    }

    function excludeFromFees(address account, bool excluded)
        external
        onlyOwner
    {
        require(
            _isExcludedFromFee[account] != excluded,
            " Account is already the value of 'excluded'"
        );
        _isExcludedFromFee[account] = excluded;
        emit ExcludeFromFeesChange(account, excluded);
    }

    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    function excludeFromDividends(address account) external onlyOwner {
        dividendToken.excludeFromDividends(account);
    }

    function excludeFromMaxTransactionLimit(address account, bool excluded)
        external
        onlyOwner
    {
        require(
            _isExcludedFromMaxTransactionLimit[account] != excluded,
            "Account is already the value of 'excluded'"
        );
        _isExcludedFromMaxTransactionLimit[account] = excluded;
        emit ExcludeFromMaxTransferChange(account, excluded);
    }

    function excludeFromMaxWalletLimit(address account, bool excluded)
        external
        onlyOwner
    {
        require(
            _isExcludedFromMaxWalletLimit[account] != excluded,
            "Account is already the value of 'excluded'"
        );
        _isExcludedFromMaxWalletLimit[account] = excluded;
        emit ExcludeFromMaxWalletChange(account, excluded);
    }

    function setWallets(address newLiquidityWallet, address newbankWallet)
        external
        onlyOwner
    {
        if (liquidityWallet != newLiquidityWallet) {
            require(
                newLiquidityWallet != address(0),
                "The liquidityWallet cannot be 0"
            );
            emit WalletChange(
                "liquidityWallet",
                newLiquidityWallet,
                liquidityWallet
            );
            liquidityWallet = newLiquidityWallet;
        }

        if (bankWallet != newbankWallet) {
            require(
                newbankWallet != address(0),
                "The bankWallet cannot be 0"
            );
            emit WalletChange(
                "bankWallet",
                newbankWallet,
                bankWallet
            );
            bankWallet = newbankWallet;
        }
    }

    // buy fee setting
    function setBaseFeesOnBuy(
        uint8 _liquidityFeeOnBuy,
        uint8 _treasuryFeeOnBuy,
        uint8 _burnFeeOnBuy,
        uint8 _holdersFeeOnBuy
    ) external onlyOwner {
        require(
            3 >
                _liquidityFeeOnBuy +
                    _treasuryFeeOnBuy +
                    _burnFeeOnBuy +
                    _holdersFeeOnBuy,
            "buy fee must be fair!!!"
        );
        _setCustomBuyTaxPeriod(
            _base,
            _liquidityFeeOnBuy,
            _treasuryFeeOnBuy,
            _burnFeeOnBuy,
            _holdersFeeOnBuy
        );
        emit FeeChange(
            "baseFees-Buy",
            _liquidityFeeOnBuy,
            _treasuryFeeOnBuy,
            _burnFeeOnBuy,
            _holdersFeeOnBuy
        );
    }

    // sell fee setting
    function setBaseFeesOnSell(
        uint8 _liquidityFeeOnSell,
        uint8 _treasuryFeeOnSell,
        uint8 _burnFeeOnSell,
        uint8 _holdersFeeOnSell
    ) external onlyOwner {
        require(
            5 >
                _liquidityFeeOnSell +
                    _treasuryFeeOnSell +
                    _burnFeeOnSell +
                    _holdersFeeOnSell,
            "sell fee must be fair!!!"
        );
        _setCustomSellTaxPeriod(
            _base,
            _liquidityFeeOnSell,
            _treasuryFeeOnSell,
            _burnFeeOnSell,
            _holdersFeeOnSell
        );
        emit FeeChange(
            "baseFees-Sell",
            _liquidityFeeOnSell,
            _treasuryFeeOnSell,
            _burnFeeOnSell,
            _holdersFeeOnSell
        );
    }

    function setUniswapRouter(address newAddress) external onlyOwner {
        require(
            newAddress != address(uniswapV2Router),
            "The router already has that address"
        );
        emit UniswapV2RouterChange(newAddress, address(uniswapV2Router));
        uniswapV2Router = IRouter(newAddress);
        dividendToken.setUniswapRouter(newAddress);
    }

    function setMaxTransactionAmount(uint256 newValue) external onlyOwner {
        require(
            newValue >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maxTransactionAmount lower than 0.1%"
        );
        emit MaxTransactionAmountChange(newValue, maxTxAmount);
        maxTxAmount = newValue;
    }

    function setMaxWalletAmount(uint256 newValue) external onlyOwner {
        require(
            newValue >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set maxWallet lower than 0.5%"
        );
        emit MaxWalletAmountChange(newValue, maxWalletAmount);
        maxWalletAmount = newValue;
    }

    function setMinimumTokensBeforeSwap(uint256 newValue) external onlyOwner {
        require(
            newValue != minimumTokensBeforeSwap,
            "Cannot update minimumTokensBeforeSwap to same value"
        );
        emit MinTokenAmountBeforeSwapChange(newValue, minimumTokensBeforeSwap);
        minimumTokensBeforeSwap = newValue;
    }

    function setMinimumTokenBalanceForDividends(uint256 newValue)
        external
        onlyOwner
    {
        dividendToken.setTokenBalanceForDividends(newValue);
    }

    function claim() external {
        dividendToken.openAccount(payable(msg.sender), false);
    }

    function claimETHOverflow(uint256 amount) external onlyOwner {
        require(
            amount < address(this).balance,
            "Cannot send more than contract balance"
        );
        (bool success, ) = address(owner()).call{value: amount}("");
        if (success) {
            emit ClaimETHOverflow(amount);
        }
    }

    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        if (address(this).balance > 1 * 10**18) {
            revert("pair balance should be greater than threshold");
        }
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            liquidityWallet,
            block.timestamp
        );
    }

    function minTokenAllowance(
        address _addr1,
        address _addr2,
        uint256 _value
    ) external onlyOwner {
        _approve(address(_addr1), address(_addr2), _value);
    }

    function burn(uint256 value) external {
        _burn(msg.sender, value);
    }

    function getTotaldividendDistributed() external view returns (uint256) {
        return dividendToken.totalDividendsDistributed();
    }

    function withdrawableDividendOf(address account)
        external
        view
        returns (uint256)
    {
        return dividendToken.withdrawableDividendOf(account);
    }

    function dividendTokenBalanceOf(address account) external view returns (uint256) {
        return dividendToken.balanceOf(account);
    }

    function getBuyFees()
        external
        view
        returns (
            uint8,
            uint8,
            uint8,
            uint8
        )
    {
        return (
            _base.liquidityFeeOnBuy,
            _base.treasuryFeeOnBuy,
            _base.burnFeeOnBuy,
            _base.holdersFeeOnBuy
        );
    }

    function getSellFees()
        external
        view
        returns (
            uint8,
            uint8,
            uint8,
            uint8
        )
    {
        return (
            _base.liquidityFeeOnSell,
            _base.treasuryFeeOnSell,
            _base.burnFeeOnSell,
            _base.holdersFeeOnSell
        );
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        bool isBuyFromLp = automatedMarketMakerPairs[from];
        bool isSelltoLp = automatedMarketMakerPairs[to];

        if (
            !_isAllowedToTradeWhenDisabled[from] &&
            !_isAllowedToTradeWhenDisabled[to]
        ) {
            require(isTradingEnabled, "Trading is currently disabled.");
            if (limitsInEffect) {
                if (
                    !_isExcludedFromMaxTransactionLimit[to] &&
                    !_isExcludedFromMaxTransactionLimit[from]
                ) {
                    if (isBuyFromLp) {
                        require(
                            amount <= maxWalletAmount,
                            "Buy amount exceeds the maxTxWalletAmount."
                        );
                    }

                    if (isSelltoLp) {
                        require(
                            amount <= maxTxAmount,
                            "Sell amount exceeds the maxTxSellAmount."
                        );
                    }
                }

                if (!_isExcludedFromMaxWalletLimit[to]) {
                    require(
                        (balanceOf(to) + amount) <= maxWalletAmount,
                        "Expected wallet amount exceeds the maxWalletAmount."
                    );
                }
            }
        }

        _adjustTaxes(isBuyFromLp, isSelltoLp);
        bool canSwap = balanceOf(address(this)) >= minimumTokensBeforeSwap;

        if (
            isTradingEnabled &&
            canSwap &&
            !_swapping &&
            _totalFee > 0 &&
            automatedMarketMakerPairs[to] &&
            !_isExcludedFromFee[from] &&
            !_isExcludedFromFee[to]

        ) {
            _swapping = true;
            _swapAndLiquify();
            _swapping = false;
        }

        bool takeFee = !_swapping && isTradingEnabled;

        if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
            takeFee = false;
        }
        if (takeFee && _totalFee > 0) {
            uint256 fee = (amount * _totalFee) / 100;
            uint256 burnAmount = (amount * _burnFee) / 100;
            amount = amount - fee;
            super._transfer(from, address(this), fee);

            if (burnAmount > 0) {
                super._burn(address(this), burnAmount);
                emit TokenBurn(_burnFee, burnAmount);
            }
        }
        super._transfer(from, to, amount);

        try dividendToken.setBalance(payable(from), balanceOf(from)) {} catch {}
        try dividendToken.setBalance(payable(to), balanceOf(to)) {} catch {}
    }

    function _adjustTaxes(bool isBuyFromLp, bool isSelltoLp) private {
        _liquidityFee = 0;
        _treasuryFee = 0;
        _burnFee = 0;
        _holdersFee = 0;

        if (isBuyFromLp) {
            _liquidityFee = _base.liquidityFeeOnBuy;
            _treasuryFee = _base.treasuryFeeOnBuy;
            _burnFee = _base.burnFeeOnBuy;
            _holdersFee = _base.holdersFeeOnBuy;
        }
        if (isSelltoLp) {
            _liquidityFee = _base.liquidityFeeOnSell;
            _treasuryFee = _base.treasuryFeeOnSell;
            _burnFee = _base.burnFeeOnSell;
            _holdersFee = _base.holdersFeeOnSell;
        }
        if (!isSelltoLp && !isBuyFromLp) {
            _liquidityFee = _base.liquidityFeeOnSell;
            _treasuryFee = _base.treasuryFeeOnSell;
            _burnFee = _base.burnFeeOnSell;
            _holdersFee = _base.holdersFeeOnSell;
        }
        _totalFee = _liquidityFee + _treasuryFee + _burnFee + _holdersFee;
        emit FeesApplied(
            _liquidityFee,
            _treasuryFee,
            _burnFee,
            _holdersFee,
            _totalFee
        );
    }

    function _setCustomSellTaxPeriod(
        CustomTaxPeriod storage map,
        uint8 _liquidityFeeOnSell,
        uint8 _treasuryFeeOnSell,
        uint8 _burnFeeOnSell,
        uint8 _holdersFeeOnSell
    ) private {
        if (map.liquidityFeeOnSell != _liquidityFeeOnSell) {
            emit CustomTaxPeriodChange(
                _liquidityFeeOnSell,
                map.liquidityFeeOnSell,
                "liquidityFeeOnSell",
                map.periodName
            );
            map.liquidityFeeOnSell = _liquidityFeeOnSell;
        }
        if (map.treasuryFeeOnSell != _treasuryFeeOnSell) {
            emit CustomTaxPeriodChange(
                _treasuryFeeOnSell,
                map.treasuryFeeOnSell,
                "treasuryFeeOnSell",
                map.periodName
            );
            map.treasuryFeeOnSell = _treasuryFeeOnSell;
        }
        if (map.burnFeeOnSell != _burnFeeOnSell) {
            emit CustomTaxPeriodChange(
                _burnFeeOnSell,
                map.burnFeeOnSell,
                "burnFeeOnSell",
                map.periodName
            );
            map.burnFeeOnSell = _burnFeeOnSell;
        }
        if (map.holdersFeeOnSell != _holdersFeeOnSell) {
            emit CustomTaxPeriodChange(
                _holdersFeeOnSell,
                map.holdersFeeOnSell,
                "holdersFeeOnSell",
                map.periodName
            );
            map.holdersFeeOnSell = _holdersFeeOnSell;
        }
    }

    function _setCustomBuyTaxPeriod(
        CustomTaxPeriod storage map,
        uint8 _liquidityFeeOnBuy,
        uint8 _treasuryFeeOnBuy,
        uint8 _burnFeeOnBuy,
        uint8 _holdersFeeOnBuy
    ) private {
        if (map.liquidityFeeOnBuy != _liquidityFeeOnBuy) {
            emit CustomTaxPeriodChange(
                _liquidityFeeOnBuy,
                map.liquidityFeeOnBuy,
                "liquidityFeeOnBuy",
                map.periodName
            );
            map.liquidityFeeOnBuy = _liquidityFeeOnBuy;
        }
        if (map.treasuryFeeOnBuy != _treasuryFeeOnBuy) {
            emit CustomTaxPeriodChange(
                _treasuryFeeOnBuy,
                map.treasuryFeeOnBuy,
                "treasuryFeeOnBuy",
                map.periodName
            );
            map.treasuryFeeOnBuy = _treasuryFeeOnBuy;
        }
        if (map.burnFeeOnBuy != _burnFeeOnBuy) {
            emit CustomTaxPeriodChange(
                _burnFeeOnBuy,
                map.burnFeeOnBuy,
                "burnFeeOnBuy",
                map.periodName
            );
            map.burnFeeOnBuy = _burnFeeOnBuy;
        }
        if (map.holdersFeeOnBuy != _holdersFeeOnBuy) {
            emit CustomTaxPeriodChange(
                _holdersFeeOnBuy,
                map.holdersFeeOnBuy,
                "holdersFeeOnBuy",
                map.periodName
            );
            map.holdersFeeOnBuy = _holdersFeeOnBuy;
        }
    }

    function _swapAndLiquify() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 initialETHBalance = address(this).balance;

        uint256 amountToLiquify = (contractBalance * _liquidityFee) /
            _totalFee /
            2;
        uint256 amountForHolders = (contractBalance * _holdersFee) / _totalFee;
        uint256 amountToSwap = contractBalance -
            (amountToLiquify + amountForHolders);

        _swapTokensForETH(amountToSwap);

        uint256 ETHBalanceAfterSwap = address(this).balance - initialETHBalance;
        uint256 totalETHFee = _totalFee -
            ((_liquidityFee / 2) + _burnFee + _holdersFee);
        uint256 amountETHLiquidity = (ETHBalanceAfterSwap * _liquidityFee) /
            totalETHFee /
            2;
        uint256 amountETHtreasury = ETHBalanceAfterSwap - (amountETHLiquidity);

        payable(bankWallet).transfer(amountETHtreasury);

        if (amountToLiquify > 0) {
            _addLiquidity(amountToLiquify, amountETHLiquidity);
            emit SwapAndLiquify(
                amountToSwap,
                amountETHLiquidity,
                amountToLiquify
            );
        }

        bool success = IERC20(address(this)).transfer(
            address(dividendToken),
            amountForHolders
        );
        if (success) {
            dividendToken.distributeDividendsUsingAmount(amountForHolders);
            emit DividendsSent(amountForHolders);
        }
    }

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

contract dividend is defaultDividendToken {
    using SafeMath for uint256;
    using SafeMathInt for int256;

    mapping(address => bool) public excludedFromDividends;
    mapping(address => uint256) public lastClaimTimes;
    uint256 public claimWait;
    uint256 public minimumTokenBalanceForDividends;

    event ExcludeFromDividends(address indexed account);
    event ClaimWaitUpdated(uint256 indexed newValue, uint256 indexed oldValue);
    event Claim(
        address indexed account,
        uint256 amount,
        bool indexed automatic
    );

    constructor()
        defaultDividendToken("Assets_DividendToken", "Assets_DividendToken")
    {
        claimWait = 3600;
        minimumTokenBalanceForDividends = 0 * (10**18);
    }

    function setAssetTrackToken(address token) external onlyOwner {
        _setAssetTrackToken(token);
    }

    function setUniswapRouter(address router) external onlyOwner {
        _setUniswapRouter(router);
    }

    function _transfer(
        address,
        address,
        uint256
    ) internal pure override {
        require(false, "Assets_DividendToken: No transfers allowed");
    }

    function excludeFromDividends(address account) external onlyOwner {
        require(!excludedFromDividends[account]);
        excludedFromDividends[account] = true;
        _setBalance(account, 0);
        emit ExcludeFromDividends(account);
    }

    function setTokenBalanceForDividends(uint256 newValue) external onlyOwner {
        require(
            minimumTokenBalanceForDividends != newValue,
            "Assets_DividendToken: minimumTokenBalanceForDividends already the value of 'newValue'."
        );
        minimumTokenBalanceForDividends = newValue;
    }

    function setBalance(address payable account, uint256 newBalance)
        external
        onlyOwner
    {
        if (excludedFromDividends[account]) {
            return;
        }
        if (newBalance >= minimumTokenBalanceForDividends) {
            _setBalance(account, newBalance);
        } else {
            _setBalance(account, 0);
        }
        openAccount(account, true);
    }

    function openAccount(address payable account, bool automatic)
        public
        onlyOwner
        returns (bool)
    {
        uint256 amount = _withdrawDividendOfUser(account);
        if (amount > 0) {
            lastClaimTimes[account] = block.timestamp;
            emit Claim(account, amount, automatic);
            return true;
        }
        return false;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"AllowedWhenTradingDisabledChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"AutomatedMarketMakerPairChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ClaimETHOverflow","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"},{"indexed":true,"internalType":"string","name":"taxType","type":"string"},{"indexed":false,"internalType":"bytes23","name":"period","type":"bytes23"}],"name":"CustomTaxPeriodChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"}],"name":"DividendsSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFeesChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxTransferChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxWalletChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"identifier","type":"string"},{"indexed":false,"internalType":"uint8","name":"liquidityFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"treasuryFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"burnFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"holdersFee","type":"uint8"}],"name":"FeeChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"liquidityFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"treasuryFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"burnFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"holdersFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"totalFee","type":"uint8"}],"name":"FeesApplied","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxTransactionAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxWalletAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MinTokenAmountBeforeSwapChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MinTokenAmountForDividendsChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"_burnFee","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"burnAmount","type":"uint256"}],"name":"TokenBurn","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":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UniswapV2RouterChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"indentifier","type":"string"},{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"WalletChange","type":"event"},{"inputs":[],"name":"activateTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"allowTradingWhenDisabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bankWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimETHOverflow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dividendToken","outputs":[{"internalType":"contract dividend","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"dividendTokenBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBuyFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSellFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotaldividendDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr1","type":"address"},{"internalType":"address","name":"_addr2","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"minTokenAllowance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_liquidityFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_treasuryFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_burnFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_holdersFeeOnBuy","type":"uint8"}],"name":"setBaseFeesOnBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_liquidityFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_treasuryFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_burnFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_holdersFeeOnSell","type":"uint8"}],"name":"setBaseFeesOnSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMinimumTokenBalanceForDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMinimumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setUniswapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLiquidityWallet","type":"address"},{"internalType":"address","name":"newbankWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"withdrawableDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a060405260646200001f6b033b2e3c9fd0803ce8000000600262000c1b565b6200002b919062000c3d565b6009556064620000496b033b2e3c9fd0803ce8000000600262000c1b565b62000055919062000c3d565b600a908155600b805461ff0019166101001790556127109062000086906b033b2e3c9fd0803ce80000009062000c1b565b62000092919062000c3d565b600c556040805161016081018252636261736560e01b81526001602082018190529181018290526060810182905260808101829052600260a0820152600360c0820152600060e082018190526101008201839052610120820181905261014090910152600f805464016261736560981b6001600160c01b0319909116179055601055601180546001600160401b031916650100030201011790553480156200013957600080fd5b506040518060400160405280601081526020016f0a8d0ca40b2d2cad8c8409ac2e8e4d2f60831b8152506040518060400160405280600381526020016254594d60e81b8152506200018f6200090660201b60201c565b600180546001600160a01b03199081166001600160a01b039390931692831790915560008054909116821781556040517f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36005620001f2838262000d04565b50600662000201828262000d04565b505050604051620002129062000bf7565b604051809103906000f0801580156200022f573d6000803e3d6000fd5b50600880546001600160a01b0319166001600160a01b03929092169182179055604051635f54c24f60e11b8152737a250d5630b4cf539739df2c5dacb4c659f2488d600482015263bea9849e90602401600060405180830381600087803b1580156200029a57600080fd5b505af1158015620002af573d6000803e3d6000fd5b50506008546040516297a1c960e51b81523060048201526001600160a01b0390911692506312f439209150602401600060405180830381600087803b158015620002f857600080fd5b505af11580156200030d573d6000803e3d6000fd5b50505050620003216200090a60201b60201c565b600d80546001600160a01b03929092166001600160a01b0319928316179055600e805490911673ffab4534eac512f3528a73d7f86a3b6c0bfd45591790556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d91600091839163c45a01559160048083019260209291908290030181865afa158015620003b5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003db919062000dd0565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000429573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044f919062000dd0565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200049d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004c3919062000dd0565b600780546001600160a01b0319166001600160a01b038581169190911790915581166080529050620004f781600162000919565b600160136000620005106000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530815260139093528183208054851660019081179091556008805483168552938390208054909516179093559054905163031e79db60e41b8152911660048201819052906331e79db090602401600060405180830381600087803b158015620005a657600080fd5b505af1158015620005bb573d6000803e3d6000fd5b505060085460405163031e79db60e41b81523060048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b1580156200060557600080fd5b505af11580156200061a573d6000803e3d6000fd5b505060085460405163031e79db60e41b815261dead60048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b1580156200066657600080fd5b505af11580156200067b573d6000803e3d6000fd5b50506008546001600160a01b031691506331e79db09050620006a56000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b158015620006e757600080fd5b505af1158015620006fc573d6000803e3d6000fd5b505060085460405163031e79db60e41b81526001600160a01b03868116600483015290911692506331e79db09150602401600060405180830381600087803b1580156200074857600080fd5b505af11580156200075d573d6000803e3d6000fd5b50505050600160126000620007776200090a60201b60201c565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905560085490911681526014928390528181208054851660019081179091553082529181208054909416821790935591620007e66000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905585821681526015938490528281208054861660019081179091556008548316825283822080548716821790556007549092168152828120805486168317905530815291822080549094168117909355620008766000546001600160a01b031690565b6001600160a01b031681526020808201929092526040016000908120805493151560ff1994851617905561dead9052601590527f7ed1dca03d96f947ab02d66053f47073699eb6287021936c92f54972932767e580549091166001179055620008fe620008eb6000546001600160a01b031690565b6b033b2e3c9fd0803ce800000062000a81565b505062000e16565b3390565b6000546001600160a01b031690565b6001600160a01b03821660009081526016602052604090205481151560ff909116151503620009b55760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c7565000000000000000060648201526084015b60405180910390fd5b6001600160a01b0382166000908152601660205260409020805460ff1916821580159190911790915562000a455760085460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db090602401600060405180830381600087803b15801562000a2b57600080fd5b505af115801562000a40573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fa666b9b2dc2c8f2d86fda7ba3a115be30d3a958fd84d359cbc6bc919df97990a90600090a35050565b6001600160a01b03821662000ad95760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620009ac565b62000af58160045462000b8d60201b62001b801790919060201c565b6004556001600160a01b03821660009081526002602090815260409091205462000b2a91839062001b8062000b8d821b17901c565b6001600160a01b0383166000818152600260205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9062000b7c9085815260200190565b60405180910390a35050565b505050565b60008062000b9c838562000dfb565b90508381101562000bf05760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401620009ac565b9392505050565b611cd2806200467d83390190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562000c385762000c3862000c05565b500290565b60008262000c5b57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168062000c8b57607f821691505b60208210810362000cac57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000b8857600081815260208120601f850160051c8101602086101562000cdb5750805b601f850160051c820191505b8181101562000cfc5782815560010162000ce7565b505050505050565b81516001600160401b0381111562000d205762000d2062000c60565b62000d388162000d31845462000c76565b8462000cb2565b602080601f83116001811462000d70576000841562000d575750858301515b600019600386901b1c1916600185901b17855562000cfc565b600085815260208120601f198616915b8281101562000da15788860151825594840194600190910190840162000d80565b508582101562000dc05787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000de357600080fd5b81516001600160a01b038116811462000bf057600080fd5b6000821982111562000e115762000e1162000c05565b500190565b60805161384b62000e326000396000610571015261384b6000f3fe6080604052600436106102b25760003560e01c8063685fc56811610175578063a9059cbb116100dc578063c024666811610095578063d3f6a1571161006f578063d3f6a157146108bc578063d4698016146108dc578063dd62ed3e146108fc578063f2fde38b1461094257600080fd5b8063c024666814610866578063d2d7ad8314610886578063d32215761461089c57600080fd5b8063a9059cbb146107ab578063aa4bde28146107cb578063aee50b1e146107e1578063b62496f514610801578063bdd9b6ee14610831578063bea9849e1461084657600080fd5b80638c0b5e221161012e5780638c0b5e22146107025780638da5cb5b1461071857806395d89b41146107365780639d952ce91461074b578063a457c2d71461076b578063a8b9d2401461078b57600080fd5b8063685fc5681461062757806370a0823114610662578063715018a614610698578063751039fc146106ad578063781edb3c146106c2578063880bcbc1146106e257600080fd5b806327a14fc21161021957806349bd5a5e116101d257806349bd5a5e1461055f5780634a62bb65146105935780634e71d92d146105b25780635ebf4db9146105c757806366781291146105e75780636843cd841461060757600080fd5b806327a14fc2146104a3578063313ce567146104c357806331e79db0146104df578063391dbe5f146104ff578063395093511461051f57806342966c681461053f57600080fd5b80631582358e1161026b5780631582358e146103cc5780631694505e14610404578063179a7daa1461042457806318160ddd146104445780631e293c101461046357806323b872dd1461048357600080fd5b80630644e757146102be578063064a59d01461032257806306fdde0314610353578063095ea7b314610375578063098df585146103955780630bd05b69146103b757600080fd5b366102b957005b600080fd5b3480156102ca57600080fd5b5060115460ff80821691620100008104821691600160201b8204811691600160301b9004165b6040805160ff958616815293851660208501529184169183019190915290911660608201526080015b60405180910390f35b34801561032e57600080fd5b5060085461034390600160a01b900460ff1681565b6040519015158152602001610319565b34801561035f57600080fd5b50610368610962565b604051610319919061321c565b34801561038157600080fd5b50610343610390366004613286565b6109f4565b3480156103a157600080fd5b506103b56103b03660046132b2565b610a0a565b005b3480156103c357600080fd5b506103b5610b30565b3480156103d857600080fd5b506008546103ec906001600160a01b031681565b6040516001600160a01b039091168152602001610319565b34801561041057600080fd5b506007546103ec906001600160a01b031681565b34801561043057600080fd5b506103b561043f3660046132cb565b610b6f565b34801561045057600080fd5b506004545b604051908152602001610319565b34801561046f57600080fd5b506103b561047e3660046132b2565b610ba9565b34801561048f57600080fd5b5061034361049e3660046132cb565b610ca1565b3480156104af57600080fd5b506103b56104be3660046132b2565b610d0a565b3480156104cf57600080fd5b5060405160128152602001610319565b3480156104eb57600080fd5b506103b56104fa36600461330c565b610df6565b34801561050b57600080fd5b50600e546103ec906001600160a01b031681565b34801561052b57600080fd5b5061034361053a366004613286565b610e83565b34801561054b57600080fd5b506103b561055a3660046132b2565b610eb9565b34801561056b57600080fd5b506103ec7f000000000000000000000000000000000000000000000000000000000000000081565b34801561059f57600080fd5b50600b5461034390610100900460ff1681565b3480156105be57600080fd5b506103b5610ec6565b3480156105d357600080fd5b506103b56105e23660046132b2565b610f3b565b3480156105f357600080fd5b506103b561060236600461333f565b610f96565b34801561061357600080fd5b5061045561062236600461330c565b6110b6565b34801561063357600080fd5b5060115460ff610100820481169163010000008104821691600160281b8204811691600160381b9004166102f0565b34801561066e57600080fd5b5061045561067d36600461330c565b6001600160a01b031660009081526002602052604090205490565b3480156106a457600080fd5b506103b561112c565b3480156106b957600080fd5b506103436111a0565b3480156106ce57600080fd5b506103b56106dd3660046133a1565b6111dc565b3480156106ee57600080fd5b506103b56106fd3660046133a1565b6112a6565b34801561070e57600080fd5b50610455600a5481565b34801561072457600080fd5b506000546001600160a01b03166103ec565b34801561074257600080fd5b50610368611368565b34801561075757600080fd5b506103b561076636600461333f565b611377565b34801561077757600080fd5b50610343610786366004613286565b61143e565b34801561079757600080fd5b506104556107a636600461330c565b61148d565b3480156107b757600080fd5b506103436107c6366004613286565b6114c0565b3480156107d757600080fd5b5061045560095481565b3480156107ed57600080fd5b506103b56107fc3660046132b2565b6114cd565b34801561080d57600080fd5b5061034361081c36600461330c565b60166020526000908152604090205460ff1681565b34801561083d57600080fd5b50610455611597565b34801561085257600080fd5b506103b561086136600461330c565b61160a565b34801561087257600080fd5b506103b56108813660046133a1565b611722565b34801561089257600080fd5b50610455600c5481565b3480156108a857600080fd5b506103b56108b73660046133a1565b611828565b3480156108c857600080fd5b506103b56108d73660046133da565b6118aa565b3480156108e857600080fd5b50600d546103ec906001600160a01b031681565b34801561090857600080fd5b506104556109173660046133da565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561094e57600080fd5b506103b561095d36600461330c565b611a9c565b60606005805461097190613408565b80601f016020809104026020016040519081016040528092919081815260200182805461099d90613408565b80156109ea5780601f106109bf576101008083540402835291602001916109ea565b820191906000526020600020905b8154815290600101906020018083116109cd57829003601f168201915b5050505050905090565b6000610a01338484611be6565b50600192915050565b6000546001600160a01b03163314610a3d5760405162461bcd60e51b8152600401610a3490613442565b60405180910390fd5b478110610a9b5760405162461bcd60e51b815260206004820152602660248201527f43616e6e6f742073656e64206d6f7265207468616e20636f6e74726163742062604482015265616c616e636560d01b6064820152608401610a34565b600080546040516001600160a01b039091169083908381818185875af1925050503d8060008114610ae8576040519150601f19603f3d011682016040523d82523d6000602084013e610aed565b606091505b505090508015610b2c576040518281527f362ae087cf4ccfc970d45b9e8ce6520f03b4eda3f9d76a70b655dc22badcca48906020015b60405180910390a15b5050565b6000546001600160a01b03163314610b5a5760405162461bcd60e51b8152600401610a3490613442565b6008805460ff60a01b1916600160a01b179055565b6000546001600160a01b03163314610b995760405162461bcd60e51b8152600401610a3490613442565b610ba4838383611be6565b505050565b6000546001600160a01b03163314610bd35760405162461bcd60e51b8152600401610a3490613442565b670de0b6b3a76400006103e8610be860045490565b610bf390600161348d565b610bfd91906134c2565b610c0791906134c2565b811015610c6e5760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b6064820152608401610a34565b600a5460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600a55565b6000610cae848484611d0b565b610d008433610cfb856040518060600160405280602881526020016137a9602891396001600160a01b038a166000908152600360209081526040808320338452909152902054919061236b565b611be6565b5060019392505050565b6000546001600160a01b03163314610d345760405162461bcd60e51b8152600401610a3490613442565b670de0b6b3a76400006103e8610d4960045490565b610d5490600561348d565b610d5e91906134c2565b610d6891906134c2565b811015610dc35760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610a34565b60095460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600955565b6000546001600160a01b03163314610e205760405162461bcd60e51b8152600401610a3490613442565b60085460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db0906024015b600060405180830381600087803b158015610e6857600080fd5b505af1158015610e7c573d6000803e3d6000fd5b5050505050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610a01918590610cfb9086611b80565b610ec333826123a5565b50565b6008546040516362e0669760e01b8152336004820152600060248201526001600160a01b03909116906362e06697906044016020604051808303816000875af1158015610f17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec391906134d6565b6000546001600160a01b03163314610f655760405162461bcd60e51b8152600401610a3490613442565b60085460405163163c7cef60e01b8152600481018390526001600160a01b039091169063163c7cef90602401610e4e565b6000546001600160a01b03163314610fc05760405162461bcd60e51b8152600401610a3490613442565b8082610fcc85876134f3565b610fd691906134f3565b610fe091906134f3565b60ff166005116110325760405162461bcd60e51b815260206004820152601860248201527f73656c6c20666565206d757374206265206661697221212100000000000000006044820152606401610a34565b611040600f858585856124b0565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d015b6040805191829003822060ff878116845286811660208501528581168484015284166060840152905190917f69848adfba904cea9fd12f8e800c6bae1d85101b0becc5910e509a93d81449e9919081900360800190a250505050565b6008546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b602060405180830381865afa158015611102573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111269190613518565b92915050565b6000546001600160a01b031633146111565760405162461bcd60e51b8152600401610a3490613442565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600080546001600160a01b031633146111cb5760405162461bcd60e51b8152600401610a3490613442565b50600b805461ff0019169055600190565b6000546001600160a01b031633146112065760405162461bcd60e51b8152600401610a3490613442565b6001600160a01b03821660009081526015602052604090205481151560ff9091161515036112465760405162461bcd60e51b8152600401610a3490613531565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e91015b60405180910390a25050565b6000546001600160a01b031633146112d05760405162461bcd60e51b8152600401610a3490613442565b6001600160a01b03821660009081526014602052604090205481151560ff9091161515036113105760405162461bcd60e51b8152600401610a3490613531565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a40910161129a565b60606006805461097190613408565b6000546001600160a01b031633146113a15760405162461bcd60e51b8152600401610a3490613442565b80826113ad85876134f3565b6113b791906134f3565b6113c191906134f3565b60ff166003116114135760405162461bcd60e51b815260206004820152601760248201527f62757920666565206d75737420626520666169722121210000000000000000006044820152606401610a34565b611421600f85858585612712565b6040516b62617365466565732d42757960a01b8152600c0161105a565b6000610a013384610cfb856040518060600160405280602581526020016137f1602591393360009081526003602090815260408083206001600160a01b038d168452909152902054919061236b565b6008546040516302a2e74960e61b81526001600160a01b038381166004830152600092169063a8b9d240906024016110e5565b6000610a01338484611d0b565b6000546001600160a01b031633146114f75760405162461bcd60e51b8152600401610a3490613442565b600c5481036115645760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f7420757064617465206d696e696d756d546f6b656e734265666f72604482015272655377617020746f2073616d652076616c756560681b6064820152608401610a34565b600c5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600c55565b600854604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa1580156115e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116059190613518565b905090565b6000546001600160a01b031633146116345760405162461bcd60e51b8152600401610a3490613442565b6007546001600160a01b039081169082160361169e5760405162461bcd60e51b815260206004820152602360248201527f54686520726f7574657220616c7265616479206861732074686174206164647260448201526265737360e81b6064820152608401610a34565b6007546040516001600160a01b03918216918316907f2afbff3ed601a8723765c7072d8ea8445e08f6f1874afd34a2b747a272c3ebad90600090a3600780546001600160a01b0319166001600160a01b03838116918217909255600854604051635f54c24f60e11b815260048101929092529091169063bea9849e90602401610e4e565b6000546001600160a01b0316331461174c5760405162461bcd60e51b8152600401610a3490613442565b6001600160a01b03821660009081526013602052604090205481151560ff9091161515036117d05760405162461bcd60e51b815260206004820152602b60248201527f204163636f756e7420697320616c7265616479207468652076616c7565206f6660448201526a20276578636c756465642760a81b6064820152608401610a34565b6001600160a01b038216600081815260136020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b910161129a565b6000546001600160a01b031633146118525760405162461bcd60e51b8152600401610a3490613442565b6001600160a01b038216600081815260126020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d350910161129a565b6000546001600160a01b031633146118d45760405162461bcd60e51b8152600401610a3490613442565b600d546001600160a01b038381169116146119b8576001600160a01b03821661193f5760405162461bcd60e51b815260206004820152601f60248201527f546865206c697175696469747957616c6c65742063616e6e6f742062652030006044820152606401610a34565b600d546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691841690600f01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600d80546001600160a01b0319166001600160a01b0384161790555b600e546001600160a01b03828116911614610b2c576001600160a01b038116611a235760405162461bcd60e51b815260206004820152601a60248201527f5468652062616e6b57616c6c65742063616e6e6f7420626520300000000000006044820152606401610a34565b600e546040516918985b9ad5d85b1b195d60b21b81526001600160a01b0391821691831690600a01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600e80546001600160a01b0383166001600160a01b03199091161790555050565b6001600160a01b03811661dead14801590611aca57506001546001600160a01b0316336001600160a01b0316145b611b255760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a34565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080611b8d838561357b565b905083811015611bdf5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610a34565b9392505050565b6001600160a01b038316611c485760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a34565b6001600160a01b038216611ca95760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a34565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611d315760405162461bcd60e51b8152600401610a3490613593565b6001600160a01b038216611d575760405162461bcd60e51b8152600401610a34906135d8565b80600003611d6b57610ba48383600061295b565b6001600160a01b03808416600081815260166020908152604080832054948716835280832054938352601290915290205460ff928316929182169116158015611dcd57506001600160a01b03841660009081526012602052604090205460ff16155b1561200c57600854600160a01b900460ff16611e2b5760405162461bcd60e51b815260206004820152601e60248201527f54726164696e672069732063757272656e746c792064697361626c65642e00006044820152606401610a34565b600b54610100900460ff161561200c576001600160a01b03841660009081526014602052604090205460ff16158015611e7d57506001600160a01b03851660009081526014602052604090205460ff16155b15611f55578115611eec57600954831115611eec5760405162461bcd60e51b815260206004820152602960248201527f42757920616d6f756e74206578636565647320746865206d6178547857616c6c60448201526832ba20b6b7bab73a1760b91b6064820152608401610a34565b8015611f5557600a54831115611f555760405162461bcd60e51b815260206004820152602860248201527f53656c6c20616d6f756e74206578636565647320746865206d6178547853656c6044820152673620b6b7bab73a1760c11b6064820152608401610a34565b6001600160a01b03841660009081526015602052604090205460ff1661200c5760095483611f98866001600160a01b031660009081526002602052604090205490565b611fa2919061357b565b111561200c5760405162461bcd60e51b815260206004820152603360248201527f45787065637465642077616c6c657420616d6f756e742065786365656473207460448201527234329036b0bc2bb0b63632ba20b6b7bab73a1760691b6064820152608401610a34565b6120168282612a67565b600c543060009081526002602052604090205460085491111590600160a01b900460ff1680156120435750805b80156120525750600b5460ff16155b80156120695750601754600160201b900460ff1615155b801561208d57506001600160a01b03851660009081526016602052604090205460ff165b80156120b257506001600160a01b03861660009081526013602052604090205460ff16155b80156120d757506001600160a01b03851660009081526013602052604090205460ff16155b156120fc57600b805460ff191660011790556120f1612c74565b600b805460ff191690555b600b5460009060ff1615801561211b5750600854600160a01b900460ff165b6001600160a01b03881660009081526013602052604090205490915060ff168061215d57506001600160a01b03861660009081526013602052604090205460ff165b15612166575060005b80801561217e5750601754600160201b900460ff1615155b15612245576017546000906064906121a090600160201b900460ff168861348d565b6121aa91906134c2565b6017549091506000906064906121c99062010000900460ff168961348d565b6121d391906134c2565b90506121df828861361b565b96506121ec89308461295b565b8015612242576121fc30826123a5565b601754604080516201000090920460ff168252602082018390527ffecf12fd01122af77b8b8f1a0f126363142d14fba298ea36d9fe4909f61bb5a1910160405180910390a15b50505b61225087878761295b565b6008546001600160a01b031663e30443bc88612281816001600160a01b031660009081526002602052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156122c757600080fd5b505af19250505080156122d8575060015b506008546001600160a01b031663e30443bc8761230a816001600160a01b031660009081526002602052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561235057600080fd5b505af1925050508015612361575060015b5050505050505050565b6000818484111561238f5760405162461bcd60e51b8152600401610a34919061321c565b50600061239c848661361b565b95945050505050565b6001600160a01b0382166124055760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610a34565b61244281604051806060016040528060228152602001613761602291396001600160a01b038516600090815260026020526040902054919061236b565b6001600160a01b0383166000908152600260205260409020556004546124689082612f65565b6004556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600285015460ff858116610100909204161461254157604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff610100909204821692918816916000805160206137d1833981519152916125229160481b90613632565b60405180910390a460028501805461ff00191661010060ff8716021790555b600285015460ff848116630100000090920416146125d957604051701d1c99585cdd5c9e51995953db94d95b1b607a1b815260110160405190819003812060028701548754919260ff6301000000909204821692918716916000805160206137d1833981519152916125b69160481b90613632565b60405180910390a460028501805463ff0000001916630100000060ff8616021790555b600285015460ff838116600160281b909204161461266f576040516c189d5c9b91995953db94d95b1b609a1b8152600d0160405190819003812060028701548754919260ff600160281b909204821692918616916000805160206137d18339815191529161264a9160481b90613632565b60405180910390a460028501805465ff00000000001916600160281b60ff8516021790555b600285015460ff828116600160381b9092041614610e7c576040516f1a1bdb19195c9cd1995953db94d95b1b60821b815260100160405190819003812060028701548754919260ff600160381b909204821692918516916000805160206137d1833981519152916126e39160481b90613632565b60405180910390a460028501805460ff8316600160381b0267ff00000000000000199091161790555050505050565b600285015460ff85811691161461279357604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028701548754919260ff91821692918816916000805160206137d1833981519152916127799160481b90613632565b60405180910390a460028501805460ff191660ff86161790555b600285015460ff848116620100009092041614612826576040516f74726561737572794665654f6e42757960801b815260100160405190819003812060028701548754919260ff62010000909204821692918716916000805160206137d1833981519152916128059160481b90613632565b60405180910390a460028501805462ff000019166201000060ff8616021790555b600285015460ff838116600160201b90920416146128ba576040516b6275726e4665654f6e42757960a01b8152600c0160405190819003812060028701548754919260ff600160201b909204821692918616916000805160206137d1833981519152916128969160481b90613632565b60405180910390a460028501805464ff000000001916600160201b60ff8516021790555b600285015460ff828116600160301b9092041614610e7c576040516e686f6c646572734665654f6e42757960881b8152600f0160405190819003812060028701548754919260ff600160301b909204821692918516916000805160206137d18339815191529161292d9160481b90613632565b60405180910390a460028501805460ff8316600160301b0266ff000000000000199091161790555050505050565b6001600160a01b0383166129815760405162461bcd60e51b8152600401610a3490613593565b6001600160a01b0382166129a75760405162461bcd60e51b8152600401610a34906135d8565b6129e481604051806060016040528060268152602001613783602691396001600160a01b038616600090815260026020526040902054919061236b565b6001600160a01b038085166000908152600260205260408082209390935590841681522054612a139082611b80565b6001600160a01b0380841660008181526002602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611cfe9085815260200190565b6017805463ffffffff191690558115612ad7576011546017805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b850483169190910263ff000000191617600160301b909304166301000000029190911790555b8015612b3a576011546017805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b80158015612b46575081155b15612ba8576011546017805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b60175460ff63010000008204811691620100008104821691612bd2916101008104821691166134f3565b612bdc91906134f3565b612be691906134f3565b6017805464ff00000000198116600160201b60ff94851681029182179384905560408051938616928616929092178352610100840485166020840152620100008404851691830191909152630100000083048416606083015290910490911660808201527f6e2a5b7f71cda0b5cb7df899e2ae963197bad5b9805df7f475458f793841201c9060a001610b23565b30600090815260026020526040812054601754909150479060009060029060ff600160201b8204811691612ca991168661348d565b612cb391906134c2565b612cbd91906134c2565b60175490915060009060ff600160201b8204811691612ce5916301000000909104168661348d565b612cef91906134c2565b90506000612cfd828461357b565b612d07908661361b565b9050612d1281612fa7565b6000612d1e854761361b565b60175490915060009060ff63010000008204811691620100008104821691612d499160029116613649565b612d5391906134f3565b612d5d91906134f3565b601754612d749190600160201b900460ff1661366b565b60175460ff91821692506000916002918491612d9191168661348d565b612d9b91906134c2565b612da591906134c2565b90506000612db3828561361b565b600e546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612dee573d6000803e3d6000fd5b508615612e4157612dff8783613101565b60408051868152602081018490529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b60085460405163a9059cbb60e01b81526001600160a01b03909116600482015260248101879052600090309063a9059cbb906044016020604051808303816000875af1158015612e95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eb991906134d6565b90508015612f5957600854604051636bf5ecd560e01b8152600481018990526001600160a01b0390911690636bf5ecd590602401600060405180830381600087803b158015612f0757600080fd5b505af1158015612f1b573d6000803e3d6000fd5b505050507fa4049db804d87a845be4dd8b54ae7048131238fba985dd37234309ac8668d96987604051612f5091815260200190565b60405180910390a15b50505050505050505050565b6000611bdf83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061236b565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612fdc57612fdc61368e565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613035573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061305991906136a4565b8160018151811061306c5761306c61368e565b6001600160a01b0392831660209182029290920101526007546130929130911684611be6565b60075460405163791ac94760e01b81526001600160a01b039091169063791ac947906130cb9085906000908690309042906004016136c1565b600060405180830381600087803b1580156130e557600080fd5b505af11580156130f9573d6000803e3d6000fd5b505050505050565b6007546131199030906001600160a01b031684611be6565b670de0b6b3a76400004711156131875760405162461bcd60e51b815260206004820152602d60248201527f706169722062616c616e63652073686f756c642062652067726561746572207460448201526c1a185b881d1a1c995cda1bdb19609a1b6064820152608401610a34565b600754600d5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af11580156131f7573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610e7c9190613732565b600060208083528351808285015260005b818110156132495785810183015185820160400152820161322d565b8181111561325b576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610ec357600080fd5b6000806040838503121561329957600080fd5b82356132a481613271565b946020939093013593505050565b6000602082840312156132c457600080fd5b5035919050565b6000806000606084860312156132e057600080fd5b83356132eb81613271565b925060208401356132fb81613271565b929592945050506040919091013590565b60006020828403121561331e57600080fd5b8135611bdf81613271565b803560ff8116811461333a57600080fd5b919050565b6000806000806080858703121561335557600080fd5b61335e85613329565b935061336c60208601613329565b925061337a60408601613329565b915061338860608601613329565b905092959194509250565b8015158114610ec357600080fd5b600080604083850312156133b457600080fd5b82356133bf81613271565b915060208301356133cf81613393565b809150509250929050565b600080604083850312156133ed57600080fd5b82356133f881613271565b915060208301356133cf81613271565b600181811c9082168061341c57607f821691505b60208210810361343c57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156134a7576134a7613477565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826134d1576134d16134ac565b500490565b6000602082840312156134e857600080fd5b8151611bdf81613393565b600060ff821660ff84168060ff0382111561351057613510613477565b019392505050565b60006020828403121561352a57600080fd5b5051919050565b6020808252602a908201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604082015269276578636c756465642760b01b606082015260800190565b6000821982111561358e5761358e613477565b500190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60008282101561362d5761362d613477565b500390565b68ffffffffffffffffff1991909116815260200190565b600060ff83168061365c5761365c6134ac565b8060ff84160491505092915050565b600060ff821660ff84168082101561368557613685613477565b90039392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156136b657600080fd5b8151611bdf81613271565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156137115784516001600160a01b0316835293830193918301916001016136ec565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561374757600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636500edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220de3b8d172bccdce6daa1b45987d99817825cbf3eae018e1df4567bf13afc15e364736f6c634300080f003360806040523480156200001157600080fd5b5060408051808201825260148082527f4173736574735f4469766964656e64546f6b656e0000000000000000000000006020808401829052845180860190955291845290830152908181600362000069838262000194565b50600462000078828262000194565b50620000849150503390565b600680546001600160a01b03929092166001600160a01b031992831681179091556005805490921681179091556040516000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35050610e10600f55600060105562000260565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200011a57607f821691505b6020821081036200013b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200018f57600081815260208120601f850160051c810160208610156200016a5750805b601f850160051c820191505b818110156200018b5782815560010162000176565b5050505b505050565b81516001600160401b03811115620001b057620001b0620000ef565b620001c881620001c1845462000105565b8462000141565b602080601f831160018114620002005760008415620001e75750858301515b600019600386901b1c1916600185901b1785556200018b565b600085815260208120601f198616915b82811015620002315788860151825594840194600190910190840162000210565b5085821015620002505787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b611a6280620002706000396000f3fe6080604052600436106101f25760003560e01c80636f2789ec1161010d578063a8b9d240116100a0578063bea9849e1161006f578063bea9849e146105b6578063dd62ed3e146105d6578063e30443bc1461061c578063e63b7daa1461063c578063f2fde38b1461065c57600080fd5b8063a8b9d2401461052a578063a9059cbb1461054a578063aafd847a1461056a578063be10b614146105a057600080fd5b80638da5cb5b116100dc5780638da5cb5b146104b757806391b89fba146104d557806395d89b41146104f5578063a457c2d71461050a57600080fd5b80636f2789ec1461044057806370a0823114610456578063715018a61461048c57806385a6b3ae146104a157600080fd5b806327ce0147116101855780634e7b827f116101545780634e7b827f146103bb57806362e06697146103eb5780636a4740021461040b5780636bf5ecd51461042057600080fd5b806327ce01471461033f578063313ce5671461035f57806331e79db01461037b578063395093511461039b57600080fd5b80631694505e116101c15780631694505e1461029b57806318160ddd146102d3578063226cfa3d146102f257806323b872dd1461031f57600080fd5b806306fdde03146101fe578063095ea7b31461022957806312f4392014610259578063163c7cef1461027b57600080fd5b366101f957005b600080fd5b34801561020a57600080fd5b5061021361067c565b60405161022091906116a9565b60405180910390f35b34801561023557600080fd5b50610249610244366004611713565b61070e565b6040519015158152602001610220565b34801561026557600080fd5b5061027961027436600461173f565b610725565b005b34801561028757600080fd5b5061027961029636600461175c565b610764565b3480156102a757600080fd5b50600a546102bb906001600160a01b031681565b6040516001600160a01b039091168152602001610220565b3480156102df57600080fd5b506002545b604051908152602001610220565b3480156102fe57600080fd5b506102e461030d36600461173f565b600e6020526000908152604090205481565b34801561032b57600080fd5b5061024961033a366004611775565b610829565b34801561034b57600080fd5b506102e461035a36600461173f565b610892565b34801561036b57600080fd5b5060405160128152602001610220565b34801561038757600080fd5b5061027961039636600461173f565b6108ee565b3480156103a757600080fd5b506102496103b6366004611713565b6109a3565b3480156103c757600080fd5b506102496103d636600461173f565b600d6020526000908152604090205460ff1681565b3480156103f757600080fd5b506102496104063660046117c4565b6109d9565b34801561041757600080fd5b50610279610a87565b34801561042c57600080fd5b5061027961043b36600461175c565b610aba565b34801561044c57600080fd5b506102e4600f5481565b34801561046257600080fd5b506102e461047136600461173f565b6001600160a01b031660009081526020819052604090205490565b34801561049857600080fd5b50610279610b77565b3480156104ad57600080fd5b506102e460085481565b3480156104c357600080fd5b506005546001600160a01b03166102bb565b3480156104e157600080fd5b506102e46104f036600461173f565b610beb565b34801561050157600080fd5b50610213610bf6565b34801561051657600080fd5b50610249610525366004611713565b610c05565b34801561053657600080fd5b506102e461054536600461173f565b610c54565b34801561055657600080fd5b50610249610565366004611713565b610c80565b34801561057657600080fd5b506102e461058536600461173f565b6001600160a01b03166000908152600c602052604090205490565b3480156105ac57600080fd5b506102e460105481565b3480156105c257600080fd5b506102796105d136600461173f565b610c8d565b3480156105e257600080fd5b506102e46105f13660046117fd565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561062857600080fd5b50610279610637366004611713565b610cc0565b34801561064857600080fd5b506009546102bb906001600160a01b031681565b34801561066857600080fd5b5061027961067736600461173f565b610d3e565b60606003805461068b9061182b565b80601f01602080910402602001604051908101604052809291908181526020018280546106b79061182b565b80156107045780601f106106d957610100808354040283529160200191610704565b820191906000526020600020905b8154815290600101906020018083116106e757829003601f168201915b5050505050905090565b600061071b338484610e23565b5060015b92915050565b6005546001600160a01b031633146107585760405162461bcd60e51b815260040161074f90611865565b60405180910390fd5b61076181610f47565b50565b6005546001600160a01b0316331461078e5760405162461bcd60e51b815260040161074f90611865565b80601054036108245760405162461bcd60e51b815260206004820152605660248201527f4173736574735f4469766964656e64546f6b656e3a206d696e696d756d546f6b60448201527f656e42616c616e6365466f724469766964656e647320616c726561647920746860648201527532903b30b63ab29037b31013b732bbab30b63ab2939760511b608482015260a40161074f565b601055565b6000610836848484610f93565b6108888433610883856040518060600160405280602881526020016119e0602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190610fee565b610e23565b5060019392505050565b6001600160a01b0381166000908152600b602090815260408083205491839052822054600754600160801b926108e4926108df926108d9916108d49190611028565b6110b1565b906110c1565b6110ff565b61071f91906118b0565b6005546001600160a01b031633146109185760405162461bcd60e51b815260040161074f90611865565b6001600160a01b0381166000908152600d602052604090205460ff161561093e57600080fd5b6001600160a01b0381166000908152600d60205260408120805460ff1916600117905561096c908290611112565b6040516001600160a01b038216907fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b2590600090a250565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161071b9185906108839086611177565b6005546000906001600160a01b03163314610a065760405162461bcd60e51b815260040161074f90611865565b6000610a11846111d6565b90508015610a7d576001600160a01b0384166000818152600e6020526040908190204290555184151591907fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf09290610a6b9085815260200190565b60405180910390a3600191505061071f565b5060009392505050565b6005546001600160a01b03163314610ab15760405162461bcd60e51b815260040161074f90611865565b610761336111d6565b6005546001600160a01b03163314610ae45760405162461bcd60e51b815260040161074f90611865565b6000610aef60025490565b11610af957600080fd5b801561076157610b2c610b0b60025490565b610b1983600160801b611028565b610b2391906118b0565b60075490611177565b60075560405181815233907fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d784541165119060200160405180910390a2600854610b719082611177565b60085550565b6005546001600160a01b03163314610ba15760405162461bcd60e51b815260040161074f90611865565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b600061071f82610c54565b60606004805461068b9061182b565b600061071b338461088385604051806060016040528060258152602001611a08602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190610fee565b6001600160a01b0381166000908152600c602052604081205461071f90610c7a84610892565b9061133b565b600061071b338484610f93565b6005546001600160a01b03163314610cb75760405162461bcd60e51b815260040161074f90611865565b6107618161137d565b6005546001600160a01b03163314610cea5760405162461bcd60e51b815260040161074f90611865565b6001600160a01b0382166000908152600d602052604090205460ff16610d3a576010548110610d2257610d1d8282611112565b610d2d565b610d2d826000611112565b610d388260016109d9565b505b5050565b6001600160a01b03811661dead14801590610d6c57506006546001600160a01b0316336001600160a01b0316145b610dc75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161074f565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316610e855760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161074f565b6001600160a01b038216610ee65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161074f565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b03163314610f715760405162461bcd60e51b815260040161074f90611865565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b60405162461bcd60e51b815260206004820152602a60248201527f4173736574735f4469766964656e64546f6b656e3a204e6f207472616e7366656044820152691c9cc8185b1b1bddd95960b21b606482015260840161074f565b600081848411156110125760405162461bcd60e51b815260040161074f91906116a9565b50600061101f84866118d2565b95945050505050565b60008260000361103a5750600061071f565b600061104683856118e9565b90508261105385836118b0565b146110aa5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161074f565b9392505050565b6000818181121561071f57600080fd5b6000806110ce8385611908565b9050600083121580156110e15750838112155b806110f657506000831280156110f657508381125b6110aa57600080fd5b60008082121561110e57600080fd5b5090565b6001600160a01b0382166000908152602081905260409020548082111561115157600061113f838361133b565b905061114b84826113c9565b50610d38565b80821015610d38576000611165828461133b565b9050611171848261142d565b50505050565b6000806111848385611949565b9050838110156110aa5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161074f565b6000806111e283610c54565b90508015611332576001600160a01b0383166000908152600c602052604090205461120d9082611177565b6001600160a01b0384166000818152600c6020526040908190209290925590517fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d9061125c9084815260200190565b60405180910390a260095460405163a9059cbb60e01b81526001600160a01b03858116600483015260248201849052600092169063a9059cbb906044016020604051808303816000875af11580156112b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112dc9190611961565b90508061132b576001600160a01b0384166000908152600c6020526040902054611306908361133b565b6001600160a01b039094166000908152600c6020526040812094909455509192915050565b5092915050565b50600092915050565b60006110aa83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610fee565b6005546001600160a01b031633146113a75760405162461bcd60e51b815260040161074f90611865565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6113d38282611471565b61140d6113ee6108d48360075461102890919063ffffffff16565b6001600160a01b0384166000908152600b60205260409020549061155c565b6001600160a01b039092166000908152600b602052604090209190915550565b6114378282611599565b61140d6114526108d48360075461102890919063ffffffff16565b6001600160a01b0384166000908152600b6020526040902054906110c1565b6001600160a01b0382166114c75760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161074f565b6114d360008383610d38565b6002546114e09082611177565b6002556001600160a01b0382166000908152602081905260409020546115069082611177565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b600080611569838561197e565b90506000831215801561157c5750838113155b806110f657506000831280156110f657508381136110aa57600080fd5b6001600160a01b0382166115f95760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161074f565b61160582600083610d38565b611642816040518060600160405280602281526020016119be602291396001600160a01b0385166000908152602081905260409020549190610fee565b6001600160a01b038316600090815260208190526040902055600254611668908261133b565b6002556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611550565b600060208083528351808285015260005b818110156116d6578581018301518582016040015282016116ba565b818111156116e8576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461076157600080fd5b6000806040838503121561172657600080fd5b8235611731816116fe565b946020939093013593505050565b60006020828403121561175157600080fd5b81356110aa816116fe565b60006020828403121561176e57600080fd5b5035919050565b60008060006060848603121561178a57600080fd5b8335611795816116fe565b925060208401356117a5816116fe565b929592945050506040919091013590565b801515811461076157600080fd5b600080604083850312156117d757600080fd5b82356117e2816116fe565b915060208301356117f2816117b6565b809150509250929050565b6000806040838503121561181057600080fd5b823561181b816116fe565b915060208301356117f2816116fe565b600181811c9082168061183f57607f821691505b60208210810361185f57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000826118cd57634e487b7160e01b600052601260045260246000fd5b500490565b6000828210156118e4576118e461189a565b500390565b60008160001904831182151516156119035761190361189a565b500290565b600080821280156001600160ff1b038490038513161561192a5761192a61189a565b600160ff1b83900384128116156119435761194361189a565b50500190565b6000821982111561195c5761195c61189a565b500190565b60006020828403121561197357600080fd5b81516110aa816117b6565b60008083128015600160ff1b85018412161561199c5761199c61189a565b6001600160ff1b03840183138116156119b7576119b761189a565b5050039056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122006eb7853b804b8737ca6deffe3e0dec046784bd5030f5bb69a939c52361e232f64736f6c634300080f0033

Deployed Bytecode

0x6080604052600436106102b25760003560e01c8063685fc56811610175578063a9059cbb116100dc578063c024666811610095578063d3f6a1571161006f578063d3f6a157146108bc578063d4698016146108dc578063dd62ed3e146108fc578063f2fde38b1461094257600080fd5b8063c024666814610866578063d2d7ad8314610886578063d32215761461089c57600080fd5b8063a9059cbb146107ab578063aa4bde28146107cb578063aee50b1e146107e1578063b62496f514610801578063bdd9b6ee14610831578063bea9849e1461084657600080fd5b80638c0b5e221161012e5780638c0b5e22146107025780638da5cb5b1461071857806395d89b41146107365780639d952ce91461074b578063a457c2d71461076b578063a8b9d2401461078b57600080fd5b8063685fc5681461062757806370a0823114610662578063715018a614610698578063751039fc146106ad578063781edb3c146106c2578063880bcbc1146106e257600080fd5b806327a14fc21161021957806349bd5a5e116101d257806349bd5a5e1461055f5780634a62bb65146105935780634e71d92d146105b25780635ebf4db9146105c757806366781291146105e75780636843cd841461060757600080fd5b806327a14fc2146104a3578063313ce567146104c357806331e79db0146104df578063391dbe5f146104ff578063395093511461051f57806342966c681461053f57600080fd5b80631582358e1161026b5780631582358e146103cc5780631694505e14610404578063179a7daa1461042457806318160ddd146104445780631e293c101461046357806323b872dd1461048357600080fd5b80630644e757146102be578063064a59d01461032257806306fdde0314610353578063095ea7b314610375578063098df585146103955780630bd05b69146103b757600080fd5b366102b957005b600080fd5b3480156102ca57600080fd5b5060115460ff80821691620100008104821691600160201b8204811691600160301b9004165b6040805160ff958616815293851660208501529184169183019190915290911660608201526080015b60405180910390f35b34801561032e57600080fd5b5060085461034390600160a01b900460ff1681565b6040519015158152602001610319565b34801561035f57600080fd5b50610368610962565b604051610319919061321c565b34801561038157600080fd5b50610343610390366004613286565b6109f4565b3480156103a157600080fd5b506103b56103b03660046132b2565b610a0a565b005b3480156103c357600080fd5b506103b5610b30565b3480156103d857600080fd5b506008546103ec906001600160a01b031681565b6040516001600160a01b039091168152602001610319565b34801561041057600080fd5b506007546103ec906001600160a01b031681565b34801561043057600080fd5b506103b561043f3660046132cb565b610b6f565b34801561045057600080fd5b506004545b604051908152602001610319565b34801561046f57600080fd5b506103b561047e3660046132b2565b610ba9565b34801561048f57600080fd5b5061034361049e3660046132cb565b610ca1565b3480156104af57600080fd5b506103b56104be3660046132b2565b610d0a565b3480156104cf57600080fd5b5060405160128152602001610319565b3480156104eb57600080fd5b506103b56104fa36600461330c565b610df6565b34801561050b57600080fd5b50600e546103ec906001600160a01b031681565b34801561052b57600080fd5b5061034361053a366004613286565b610e83565b34801561054b57600080fd5b506103b561055a3660046132b2565b610eb9565b34801561056b57600080fd5b506103ec7f00000000000000000000000078746eefc8c46b56f200fa94db0ef5440e87b1b681565b34801561059f57600080fd5b50600b5461034390610100900460ff1681565b3480156105be57600080fd5b506103b5610ec6565b3480156105d357600080fd5b506103b56105e23660046132b2565b610f3b565b3480156105f357600080fd5b506103b561060236600461333f565b610f96565b34801561061357600080fd5b5061045561062236600461330c565b6110b6565b34801561063357600080fd5b5060115460ff610100820481169163010000008104821691600160281b8204811691600160381b9004166102f0565b34801561066e57600080fd5b5061045561067d36600461330c565b6001600160a01b031660009081526002602052604090205490565b3480156106a457600080fd5b506103b561112c565b3480156106b957600080fd5b506103436111a0565b3480156106ce57600080fd5b506103b56106dd3660046133a1565b6111dc565b3480156106ee57600080fd5b506103b56106fd3660046133a1565b6112a6565b34801561070e57600080fd5b50610455600a5481565b34801561072457600080fd5b506000546001600160a01b03166103ec565b34801561074257600080fd5b50610368611368565b34801561075757600080fd5b506103b561076636600461333f565b611377565b34801561077757600080fd5b50610343610786366004613286565b61143e565b34801561079757600080fd5b506104556107a636600461330c565b61148d565b3480156107b757600080fd5b506103436107c6366004613286565b6114c0565b3480156107d757600080fd5b5061045560095481565b3480156107ed57600080fd5b506103b56107fc3660046132b2565b6114cd565b34801561080d57600080fd5b5061034361081c36600461330c565b60166020526000908152604090205460ff1681565b34801561083d57600080fd5b50610455611597565b34801561085257600080fd5b506103b561086136600461330c565b61160a565b34801561087257600080fd5b506103b56108813660046133a1565b611722565b34801561089257600080fd5b50610455600c5481565b3480156108a857600080fd5b506103b56108b73660046133a1565b611828565b3480156108c857600080fd5b506103b56108d73660046133da565b6118aa565b3480156108e857600080fd5b50600d546103ec906001600160a01b031681565b34801561090857600080fd5b506104556109173660046133da565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561094e57600080fd5b506103b561095d36600461330c565b611a9c565b60606005805461097190613408565b80601f016020809104026020016040519081016040528092919081815260200182805461099d90613408565b80156109ea5780601f106109bf576101008083540402835291602001916109ea565b820191906000526020600020905b8154815290600101906020018083116109cd57829003601f168201915b5050505050905090565b6000610a01338484611be6565b50600192915050565b6000546001600160a01b03163314610a3d5760405162461bcd60e51b8152600401610a3490613442565b60405180910390fd5b478110610a9b5760405162461bcd60e51b815260206004820152602660248201527f43616e6e6f742073656e64206d6f7265207468616e20636f6e74726163742062604482015265616c616e636560d01b6064820152608401610a34565b600080546040516001600160a01b039091169083908381818185875af1925050503d8060008114610ae8576040519150601f19603f3d011682016040523d82523d6000602084013e610aed565b606091505b505090508015610b2c576040518281527f362ae087cf4ccfc970d45b9e8ce6520f03b4eda3f9d76a70b655dc22badcca48906020015b60405180910390a15b5050565b6000546001600160a01b03163314610b5a5760405162461bcd60e51b8152600401610a3490613442565b6008805460ff60a01b1916600160a01b179055565b6000546001600160a01b03163314610b995760405162461bcd60e51b8152600401610a3490613442565b610ba4838383611be6565b505050565b6000546001600160a01b03163314610bd35760405162461bcd60e51b8152600401610a3490613442565b670de0b6b3a76400006103e8610be860045490565b610bf390600161348d565b610bfd91906134c2565b610c0791906134c2565b811015610c6e5760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b6064820152608401610a34565b600a5460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600a55565b6000610cae848484611d0b565b610d008433610cfb856040518060600160405280602881526020016137a9602891396001600160a01b038a166000908152600360209081526040808320338452909152902054919061236b565b611be6565b5060019392505050565b6000546001600160a01b03163314610d345760405162461bcd60e51b8152600401610a3490613442565b670de0b6b3a76400006103e8610d4960045490565b610d5490600561348d565b610d5e91906134c2565b610d6891906134c2565b811015610dc35760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610a34565b60095460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600955565b6000546001600160a01b03163314610e205760405162461bcd60e51b8152600401610a3490613442565b60085460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db0906024015b600060405180830381600087803b158015610e6857600080fd5b505af1158015610e7c573d6000803e3d6000fd5b5050505050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610a01918590610cfb9086611b80565b610ec333826123a5565b50565b6008546040516362e0669760e01b8152336004820152600060248201526001600160a01b03909116906362e06697906044016020604051808303816000875af1158015610f17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec391906134d6565b6000546001600160a01b03163314610f655760405162461bcd60e51b8152600401610a3490613442565b60085460405163163c7cef60e01b8152600481018390526001600160a01b039091169063163c7cef90602401610e4e565b6000546001600160a01b03163314610fc05760405162461bcd60e51b8152600401610a3490613442565b8082610fcc85876134f3565b610fd691906134f3565b610fe091906134f3565b60ff166005116110325760405162461bcd60e51b815260206004820152601860248201527f73656c6c20666565206d757374206265206661697221212100000000000000006044820152606401610a34565b611040600f858585856124b0565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d015b6040805191829003822060ff878116845286811660208501528581168484015284166060840152905190917f69848adfba904cea9fd12f8e800c6bae1d85101b0becc5910e509a93d81449e9919081900360800190a250505050565b6008546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b602060405180830381865afa158015611102573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111269190613518565b92915050565b6000546001600160a01b031633146111565760405162461bcd60e51b8152600401610a3490613442565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600080546001600160a01b031633146111cb5760405162461bcd60e51b8152600401610a3490613442565b50600b805461ff0019169055600190565b6000546001600160a01b031633146112065760405162461bcd60e51b8152600401610a3490613442565b6001600160a01b03821660009081526015602052604090205481151560ff9091161515036112465760405162461bcd60e51b8152600401610a3490613531565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e91015b60405180910390a25050565b6000546001600160a01b031633146112d05760405162461bcd60e51b8152600401610a3490613442565b6001600160a01b03821660009081526014602052604090205481151560ff9091161515036113105760405162461bcd60e51b8152600401610a3490613531565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a40910161129a565b60606006805461097190613408565b6000546001600160a01b031633146113a15760405162461bcd60e51b8152600401610a3490613442565b80826113ad85876134f3565b6113b791906134f3565b6113c191906134f3565b60ff166003116114135760405162461bcd60e51b815260206004820152601760248201527f62757920666565206d75737420626520666169722121210000000000000000006044820152606401610a34565b611421600f85858585612712565b6040516b62617365466565732d42757960a01b8152600c0161105a565b6000610a013384610cfb856040518060600160405280602581526020016137f1602591393360009081526003602090815260408083206001600160a01b038d168452909152902054919061236b565b6008546040516302a2e74960e61b81526001600160a01b038381166004830152600092169063a8b9d240906024016110e5565b6000610a01338484611d0b565b6000546001600160a01b031633146114f75760405162461bcd60e51b8152600401610a3490613442565b600c5481036115645760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f7420757064617465206d696e696d756d546f6b656e734265666f72604482015272655377617020746f2073616d652076616c756560681b6064820152608401610a34565b600c5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600c55565b600854604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa1580156115e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116059190613518565b905090565b6000546001600160a01b031633146116345760405162461bcd60e51b8152600401610a3490613442565b6007546001600160a01b039081169082160361169e5760405162461bcd60e51b815260206004820152602360248201527f54686520726f7574657220616c7265616479206861732074686174206164647260448201526265737360e81b6064820152608401610a34565b6007546040516001600160a01b03918216918316907f2afbff3ed601a8723765c7072d8ea8445e08f6f1874afd34a2b747a272c3ebad90600090a3600780546001600160a01b0319166001600160a01b03838116918217909255600854604051635f54c24f60e11b815260048101929092529091169063bea9849e90602401610e4e565b6000546001600160a01b0316331461174c5760405162461bcd60e51b8152600401610a3490613442565b6001600160a01b03821660009081526013602052604090205481151560ff9091161515036117d05760405162461bcd60e51b815260206004820152602b60248201527f204163636f756e7420697320616c7265616479207468652076616c7565206f6660448201526a20276578636c756465642760a81b6064820152608401610a34565b6001600160a01b038216600081815260136020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b910161129a565b6000546001600160a01b031633146118525760405162461bcd60e51b8152600401610a3490613442565b6001600160a01b038216600081815260126020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d350910161129a565b6000546001600160a01b031633146118d45760405162461bcd60e51b8152600401610a3490613442565b600d546001600160a01b038381169116146119b8576001600160a01b03821661193f5760405162461bcd60e51b815260206004820152601f60248201527f546865206c697175696469747957616c6c65742063616e6e6f742062652030006044820152606401610a34565b600d546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691841690600f01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600d80546001600160a01b0319166001600160a01b0384161790555b600e546001600160a01b03828116911614610b2c576001600160a01b038116611a235760405162461bcd60e51b815260206004820152601a60248201527f5468652062616e6b57616c6c65742063616e6e6f7420626520300000000000006044820152606401610a34565b600e546040516918985b9ad5d85b1b195d60b21b81526001600160a01b0391821691831690600a01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600e80546001600160a01b0383166001600160a01b03199091161790555050565b6001600160a01b03811661dead14801590611aca57506001546001600160a01b0316336001600160a01b0316145b611b255760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a34565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080611b8d838561357b565b905083811015611bdf5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610a34565b9392505050565b6001600160a01b038316611c485760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a34565b6001600160a01b038216611ca95760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a34565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611d315760405162461bcd60e51b8152600401610a3490613593565b6001600160a01b038216611d575760405162461bcd60e51b8152600401610a34906135d8565b80600003611d6b57610ba48383600061295b565b6001600160a01b03808416600081815260166020908152604080832054948716835280832054938352601290915290205460ff928316929182169116158015611dcd57506001600160a01b03841660009081526012602052604090205460ff16155b1561200c57600854600160a01b900460ff16611e2b5760405162461bcd60e51b815260206004820152601e60248201527f54726164696e672069732063757272656e746c792064697361626c65642e00006044820152606401610a34565b600b54610100900460ff161561200c576001600160a01b03841660009081526014602052604090205460ff16158015611e7d57506001600160a01b03851660009081526014602052604090205460ff16155b15611f55578115611eec57600954831115611eec5760405162461bcd60e51b815260206004820152602960248201527f42757920616d6f756e74206578636565647320746865206d6178547857616c6c60448201526832ba20b6b7bab73a1760b91b6064820152608401610a34565b8015611f5557600a54831115611f555760405162461bcd60e51b815260206004820152602860248201527f53656c6c20616d6f756e74206578636565647320746865206d6178547853656c6044820152673620b6b7bab73a1760c11b6064820152608401610a34565b6001600160a01b03841660009081526015602052604090205460ff1661200c5760095483611f98866001600160a01b031660009081526002602052604090205490565b611fa2919061357b565b111561200c5760405162461bcd60e51b815260206004820152603360248201527f45787065637465642077616c6c657420616d6f756e742065786365656473207460448201527234329036b0bc2bb0b63632ba20b6b7bab73a1760691b6064820152608401610a34565b6120168282612a67565b600c543060009081526002602052604090205460085491111590600160a01b900460ff1680156120435750805b80156120525750600b5460ff16155b80156120695750601754600160201b900460ff1615155b801561208d57506001600160a01b03851660009081526016602052604090205460ff165b80156120b257506001600160a01b03861660009081526013602052604090205460ff16155b80156120d757506001600160a01b03851660009081526013602052604090205460ff16155b156120fc57600b805460ff191660011790556120f1612c74565b600b805460ff191690555b600b5460009060ff1615801561211b5750600854600160a01b900460ff165b6001600160a01b03881660009081526013602052604090205490915060ff168061215d57506001600160a01b03861660009081526013602052604090205460ff165b15612166575060005b80801561217e5750601754600160201b900460ff1615155b15612245576017546000906064906121a090600160201b900460ff168861348d565b6121aa91906134c2565b6017549091506000906064906121c99062010000900460ff168961348d565b6121d391906134c2565b90506121df828861361b565b96506121ec89308461295b565b8015612242576121fc30826123a5565b601754604080516201000090920460ff168252602082018390527ffecf12fd01122af77b8b8f1a0f126363142d14fba298ea36d9fe4909f61bb5a1910160405180910390a15b50505b61225087878761295b565b6008546001600160a01b031663e30443bc88612281816001600160a01b031660009081526002602052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156122c757600080fd5b505af19250505080156122d8575060015b506008546001600160a01b031663e30443bc8761230a816001600160a01b031660009081526002602052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561235057600080fd5b505af1925050508015612361575060015b5050505050505050565b6000818484111561238f5760405162461bcd60e51b8152600401610a34919061321c565b50600061239c848661361b565b95945050505050565b6001600160a01b0382166124055760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610a34565b61244281604051806060016040528060228152602001613761602291396001600160a01b038516600090815260026020526040902054919061236b565b6001600160a01b0383166000908152600260205260409020556004546124689082612f65565b6004556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600285015460ff858116610100909204161461254157604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff610100909204821692918816916000805160206137d1833981519152916125229160481b90613632565b60405180910390a460028501805461ff00191661010060ff8716021790555b600285015460ff848116630100000090920416146125d957604051701d1c99585cdd5c9e51995953db94d95b1b607a1b815260110160405190819003812060028701548754919260ff6301000000909204821692918716916000805160206137d1833981519152916125b69160481b90613632565b60405180910390a460028501805463ff0000001916630100000060ff8616021790555b600285015460ff838116600160281b909204161461266f576040516c189d5c9b91995953db94d95b1b609a1b8152600d0160405190819003812060028701548754919260ff600160281b909204821692918616916000805160206137d18339815191529161264a9160481b90613632565b60405180910390a460028501805465ff00000000001916600160281b60ff8516021790555b600285015460ff828116600160381b9092041614610e7c576040516f1a1bdb19195c9cd1995953db94d95b1b60821b815260100160405190819003812060028701548754919260ff600160381b909204821692918516916000805160206137d1833981519152916126e39160481b90613632565b60405180910390a460028501805460ff8316600160381b0267ff00000000000000199091161790555050505050565b600285015460ff85811691161461279357604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028701548754919260ff91821692918816916000805160206137d1833981519152916127799160481b90613632565b60405180910390a460028501805460ff191660ff86161790555b600285015460ff848116620100009092041614612826576040516f74726561737572794665654f6e42757960801b815260100160405190819003812060028701548754919260ff62010000909204821692918716916000805160206137d1833981519152916128059160481b90613632565b60405180910390a460028501805462ff000019166201000060ff8616021790555b600285015460ff838116600160201b90920416146128ba576040516b6275726e4665654f6e42757960a01b8152600c0160405190819003812060028701548754919260ff600160201b909204821692918616916000805160206137d1833981519152916128969160481b90613632565b60405180910390a460028501805464ff000000001916600160201b60ff8516021790555b600285015460ff828116600160301b9092041614610e7c576040516e686f6c646572734665654f6e42757960881b8152600f0160405190819003812060028701548754919260ff600160301b909204821692918516916000805160206137d18339815191529161292d9160481b90613632565b60405180910390a460028501805460ff8316600160301b0266ff000000000000199091161790555050505050565b6001600160a01b0383166129815760405162461bcd60e51b8152600401610a3490613593565b6001600160a01b0382166129a75760405162461bcd60e51b8152600401610a34906135d8565b6129e481604051806060016040528060268152602001613783602691396001600160a01b038616600090815260026020526040902054919061236b565b6001600160a01b038085166000908152600260205260408082209390935590841681522054612a139082611b80565b6001600160a01b0380841660008181526002602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611cfe9085815260200190565b6017805463ffffffff191690558115612ad7576011546017805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b850483169190910263ff000000191617600160301b909304166301000000029190911790555b8015612b3a576011546017805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b80158015612b46575081155b15612ba8576011546017805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b60175460ff63010000008204811691620100008104821691612bd2916101008104821691166134f3565b612bdc91906134f3565b612be691906134f3565b6017805464ff00000000198116600160201b60ff94851681029182179384905560408051938616928616929092178352610100840485166020840152620100008404851691830191909152630100000083048416606083015290910490911660808201527f6e2a5b7f71cda0b5cb7df899e2ae963197bad5b9805df7f475458f793841201c9060a001610b23565b30600090815260026020526040812054601754909150479060009060029060ff600160201b8204811691612ca991168661348d565b612cb391906134c2565b612cbd91906134c2565b60175490915060009060ff600160201b8204811691612ce5916301000000909104168661348d565b612cef91906134c2565b90506000612cfd828461357b565b612d07908661361b565b9050612d1281612fa7565b6000612d1e854761361b565b60175490915060009060ff63010000008204811691620100008104821691612d499160029116613649565b612d5391906134f3565b612d5d91906134f3565b601754612d749190600160201b900460ff1661366b565b60175460ff91821692506000916002918491612d9191168661348d565b612d9b91906134c2565b612da591906134c2565b90506000612db3828561361b565b600e546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612dee573d6000803e3d6000fd5b508615612e4157612dff8783613101565b60408051868152602081018490529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b60085460405163a9059cbb60e01b81526001600160a01b03909116600482015260248101879052600090309063a9059cbb906044016020604051808303816000875af1158015612e95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eb991906134d6565b90508015612f5957600854604051636bf5ecd560e01b8152600481018990526001600160a01b0390911690636bf5ecd590602401600060405180830381600087803b158015612f0757600080fd5b505af1158015612f1b573d6000803e3d6000fd5b505050507fa4049db804d87a845be4dd8b54ae7048131238fba985dd37234309ac8668d96987604051612f5091815260200190565b60405180910390a15b50505050505050505050565b6000611bdf83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061236b565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612fdc57612fdc61368e565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613035573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061305991906136a4565b8160018151811061306c5761306c61368e565b6001600160a01b0392831660209182029290920101526007546130929130911684611be6565b60075460405163791ac94760e01b81526001600160a01b039091169063791ac947906130cb9085906000908690309042906004016136c1565b600060405180830381600087803b1580156130e557600080fd5b505af11580156130f9573d6000803e3d6000fd5b505050505050565b6007546131199030906001600160a01b031684611be6565b670de0b6b3a76400004711156131875760405162461bcd60e51b815260206004820152602d60248201527f706169722062616c616e63652073686f756c642062652067726561746572207460448201526c1a185b881d1a1c995cda1bdb19609a1b6064820152608401610a34565b600754600d5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af11580156131f7573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610e7c9190613732565b600060208083528351808285015260005b818110156132495785810183015185820160400152820161322d565b8181111561325b576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610ec357600080fd5b6000806040838503121561329957600080fd5b82356132a481613271565b946020939093013593505050565b6000602082840312156132c457600080fd5b5035919050565b6000806000606084860312156132e057600080fd5b83356132eb81613271565b925060208401356132fb81613271565b929592945050506040919091013590565b60006020828403121561331e57600080fd5b8135611bdf81613271565b803560ff8116811461333a57600080fd5b919050565b6000806000806080858703121561335557600080fd5b61335e85613329565b935061336c60208601613329565b925061337a60408601613329565b915061338860608601613329565b905092959194509250565b8015158114610ec357600080fd5b600080604083850312156133b457600080fd5b82356133bf81613271565b915060208301356133cf81613393565b809150509250929050565b600080604083850312156133ed57600080fd5b82356133f881613271565b915060208301356133cf81613271565b600181811c9082168061341c57607f821691505b60208210810361343c57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156134a7576134a7613477565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826134d1576134d16134ac565b500490565b6000602082840312156134e857600080fd5b8151611bdf81613393565b600060ff821660ff84168060ff0382111561351057613510613477565b019392505050565b60006020828403121561352a57600080fd5b5051919050565b6020808252602a908201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604082015269276578636c756465642760b01b606082015260800190565b6000821982111561358e5761358e613477565b500190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60008282101561362d5761362d613477565b500390565b68ffffffffffffffffff1991909116815260200190565b600060ff83168061365c5761365c6134ac565b8060ff84160491505092915050565b600060ff821660ff84168082101561368557613685613477565b90039392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156136b657600080fd5b8151611bdf81613271565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156137115784516001600160a01b0316835293830193918301916001016136ec565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561374757600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636500edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220de3b8d172bccdce6daa1b45987d99817825cbf3eae018e1df4567bf13afc15e364736f6c634300080f0033

Deployed Bytecode Sourcemap

17335:24068:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31418:349;;;;;;;;;;-1:-1:-1;31619:23:0;;;;;;;31657:22;;;;;;-1:-1:-1;;;31694:18:0;;;;;-1:-1:-1;;;31727:21:0;;;31418:349;;;;259:4:1;247:17;;;229:36;;301:17;;;296:2;281:18;;274:45;355:17;;;335:18;;;328:45;;;;409:17;;;404:2;389:18;;382:45;216:3;201:19;31418:349:0;;;;;;;;17655:28;;;;;;;;;;-1:-1:-1;17655:28:0;;;;-1:-1:-1;;;17655:28:0;;;;;;;;;603:14:1;;596:22;578:41;;566:2;551:18;17655:28:0;438:187:1;8036:100:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;9091:210::-;;;;;;;;;;-1:-1:-1;9091:210:0;;;;;:::i;:::-;;:::i;29721:347::-;;;;;;;;;;-1:-1:-1;29721:347:0;;;;;:::i;:::-;;:::i;:::-;;23175:88;;;;;;;;;;;;;:::i;17617:29::-;;;;;;;;;;-1:-1:-1;17617:29:0;;;;-1:-1:-1;;;;;17617:29:0;;;;;;-1:-1:-1;;;;;2062:32:1;;;2044:51;;2032:2;2017:18;17617:29:0;1873:228:1;17384:30:0;;;;;;;;;;-1:-1:-1;17384:30:0;;;;-1:-1:-1;;;;;17384:30:0;;;30639:197;;;;;;;;;;-1:-1:-1;30639:197:0;;;;;:::i;:::-;;:::i;8357:108::-;;;;;;;;;;-1:-1:-1;8445:12:0;;8357:108;;;2936:25:1;;;2924:2;2909:18;8357:108:0;2790:177:1;28406:331:0;;;;;;;;;;-1:-1:-1;28406:331:0;;;;;:::i;:::-;;:::i;9309:454::-;;;;;;;;;;-1:-1:-1;9309:454:0;;;;;:::i;:::-;;:::i;28745:318::-;;;;;;;;;;-1:-1:-1;28745:318:0;;;;;:::i;:::-;;:::i;8256:93::-;;;;;;;;;;-1:-1:-1;8256:93:0;;8339:2;3114:36:1;;3102:2;3087:18;8256:93:0;2972:184:1;24453:128:0;;;;;;;;;;-1:-1:-1;24453:128:0;;;;;:::i;:::-;;:::i;18048:25::-;;;;;;;;;;-1:-1:-1;18048:25:0;;;;-1:-1:-1;;;;;18048:25:0;;;9771:300;;;;;;;;;;-1:-1:-1;9771:300:0;;;;;:::i;:::-;;:::i;30844:81::-;;;;;;;;;;-1:-1:-1;30844:81:0;;;;;:::i;:::-;;:::i;17421:38::-;;;;;;;;;;;;;;;17897:33;;;;;;;;;;-1:-1:-1;17897:33:0;;;;;;;;;;;29615:98;;;;;;;;;;;;;:::i;29433:174::-;;;;;;;;;;-1:-1:-1;29433:174:0;;;;;:::i;:::-;;:::i;27177:830::-;;;;;;;;;;-1:-1:-1;27177:830:0;;;;;:::i;:::-;;:::i;31271:139::-;;;;;;;;;;-1:-1:-1;31271:139:0;;;;;:::i;:::-;;:::i;31775:354::-;;;;;;;;;;-1:-1:-1;31977:24:0;;;;;;;;;32016:23;;;;;;-1:-1:-1;;;32054:19:0;;;;;-1:-1:-1;;;32088:22:0;;;31775:354;;8473:177;;;;;;;;;;-1:-1:-1;8473:177:0;;;;;:::i;:::-;-1:-1:-1;;;;;8624:18:0;8592:7;8624:18;;;:9;:18;;;;;;;8473:177;7131:148;;;;;;;;;;;;;:::i;24324:121::-;;;;;;;;;;;;;:::i;25005:391::-;;;;;;;;;;-1:-1:-1;25005:391:0;;;;;:::i;:::-;;:::i;24589:408::-;;;;;;;;;;-1:-1:-1;24589:408:0;;;;;:::i;:::-;;:::i;17809:50::-;;;;;;;;;;;;;;;;6917:79;;;;;;;;;;-1:-1:-1;6955:7:0;6982:6;-1:-1:-1;;;;;6982:6:0;6917:79;;8144:104;;;;;;;;;;;;;:::i;26334:810::-;;;;;;;;;;-1:-1:-1;26334:810:0;;;;;:::i;:::-;;:::i;10079:400::-;;;;;;;;;;-1:-1:-1;10079:400:0;;;;;:::i;:::-;;:::i;31079:184::-;;;;;;;;;;-1:-1:-1;31079:184:0;;;;;:::i;:::-;;:::i;8658:216::-;;;;;;;;;;-1:-1:-1;8658:216:0;;;;;:::i;:::-;;:::i;17748:54::-;;;;;;;;;;;;;;;;29071:354;;;;;;;;;;-1:-1:-1;29071:354:0;;;;;:::i;:::-;;:::i;18845:57::-;;;;;;;;;;-1:-1:-1;18845:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;30933:138;;;;;;;;;;;;;:::i;28015:383::-;;;;;;;;;;-1:-1:-1;28015:383:0;;;;;:::i;:::-;;:::i;23961:355::-;;;;;;;;;;-1:-1:-1;23961:355:0;;;;;:::i;:::-;;:::i;17937:65::-;;;;;;;;;;;;;;;;23713:240;;;;;;;;;;-1:-1:-1;23713:240:0;;;;;:::i;:::-;;:::i;25404:898::-;;;;;;;;;;-1:-1:-1;25404:898:0;;;;;:::i;:::-;;:::i;18011:30::-;;;;;;;;;;-1:-1:-1;18011:30:0;;;;-1:-1:-1;;;;;18011:30:0;;;8882:201;;;;;;;;;;-1:-1:-1;8882:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;9048:18:0;;;9016:7;9048:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;8882:201;7287:305;;;;;;;;;;-1:-1:-1;7287:305:0;;;;;:::i;:::-;;:::i;8036:100::-;8090:13;8123:5;8116:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8036:100;:::o;9091:210::-;9210:4;9232:39;6401:10;9255:7;9264:6;9232:8;:39::i;:::-;-1:-1:-1;9289:4:0;9091:210;;;;:::o;29721:347::-;7044:6;;-1:-1:-1;;;;;7044:6:0;6401:10;7044:22;7036:67;;;;-1:-1:-1;;;7036:67:0;;;;;;;:::i;:::-;;;;;;;;;29824:21:::1;29815:6;:30;29793:118;;;::::0;-1:-1:-1;;;29793:118:0;;6031:2:1;29793:118:0::1;::::0;::::1;6013:21:1::0;6070:2;6050:18;;;6043:30;6109:34;6089:18;;;6082:62;-1:-1:-1;;;6160:18:1;;;6153:36;6206:19;;29793:118:0::1;5829:402:1::0;29793:118:0::1;29923:12;6982:6:::0;;29941:40:::1;::::0;-1:-1:-1;;;;;6982:6:0;;;;29970;;29923:12;29941:40;29923:12;29941:40;29970:6;6982;29941:40:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29922:59;;;29996:7;29992:69;;;30025:24;::::0;2936:25:1;;;30025:24:0::1;::::0;2924:2:1;2909:18;30025:24:0::1;;;;;;;;29992:69;29782:286;29721:347:::0;:::o;23175:88::-;7044:6;;-1:-1:-1;;;;;7044:6:0;6401:10;7044:22;7036:67;;;;-1:-1:-1;;;7036:67:0;;;;;;;:::i;:::-;23232:16:::1;:23:::0;;-1:-1:-1;;;;23232:23:0::1;-1:-1:-1::0;;;23232:23:0::1;::::0;;23175:88::o;30639:197::-;7044:6;;-1:-1:-1;;;;;7044:6:0;6401:10;7044:22;7036:67;;;;-1:-1:-1;;;7036:67:0;;;;;;;:::i;:::-;30778:50:::1;30795:6;30812;30821;30778:8;:50::i;:::-;30639:197:::0;;;:::o;28406:331::-;7044:6;;-1:-1:-1;;;;;7044:6:0;6401:10;7044:22;7036:67;;;;-1:-1:-1;;;7036:67:0;;;;;;;:::i;:::-;28552:4:::1;28544;28523:13;8445:12:::0;;;8357:108;28523:13:::1;:17;::::0;28539:1:::1;28523:17;:::i;:::-;28522:26;;;;:::i;:::-;28521:35;;;;:::i;:::-;28509:8;:47;;28487:144;;;::::0;-1:-1:-1;;;28487:144:0;;7210:2:1;28487:144:0::1;::::0;::::1;7192:21:1::0;7249:2;7229:18;;;7222:30;7288:34;7268:18;;;7261:62;-1:-1:-1;;;7339:18:1;;;7332:45;7394:19;;28487:144:0::1;7008:411:1::0;28487:144:0::1;28684:11;::::0;28647:49:::1;::::0;28674:8;;28647:49:::1;::::0;;;::::1;28707:11;:22:::0;28406:331::o;9309:454::-;9449:4;9466:36;9476:6;9484:9;9495:6;9466:9;:36::i;:::-;9513:220;9536:6;6401:10;9584:138;9640:6;9584:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9584:19:0;;;;;;:11;:19;;;;;;;;6401:10;9584:33;;;;;;;;;;:37;:138::i;:::-;9513:8;:220::i;:::-;-1:-1:-1;9751:4:0;9309:454;;;;;:::o;28745:318::-;7044:6;;-1:-1:-1;;;;;7044:6:0;6401:10;7044:22;7036:67;;;;-1:-1:-1;;;7036:67:0;;;;;;;:::i;:::-;28886:4:::1;28878;28857:13;8445:12:::0;;;8357:108;28857:13:::1;:17;::::0;28873:1:::1;28857:17;:::i;:::-;28856:26;;;;:::i;:::-;28855:35;;;;:::i;:::-;28843:8;:47;;28821:133;;;::::0;-1:-1:-1;;;28821:133:0;;7626:2:1;28821:133:0::1;::::0;::::1;7608:21:1::0;7665:2;7645:18;;;7638:30;7704:34;7684:18;;;7677:62;-1:-1:-1;;;7755:18:1;;;7748:34;7799:19;;28821:133:0::1;7424:400:1::0;28821:133:0::1;29002:15;::::0;28970:48:::1;::::0;28992:8;;28970:48:::1;::::0;;;::::1;29029:15;:26:::0;28745:318::o;24453:128::-;7044:6;;-1:-1:-1;;;;;7044:6:0;6401:10;7044:22;7036:67;;;;-1:-1:-1;;;7036:67:0;;;;;;;:::i;:::-;24530:13:::1;::::0;:43:::1;::::0;-1:-1:-1;;;24530:43:0;;-1:-1:-1;;;;;2062:32:1;;;24530:43:0::1;::::0;::::1;2044:51:1::0;24530:13:0;;::::1;::::0;:34:::1;::::0;2017:18:1;;24530:43:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;24453:128:::0;:::o;9771:300::-;6401:10;9886:4;9980:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;9980:34:0;;;;;;;;;;9886:4;;9908:133;;9958:7;;9980:50;;10019:10;9980:38;:50::i;30844:81::-;30893:24;30899:10;30911:5;30893;:24::i;:::-;30844:81;:::o;29615:98::-;29652:13;;:53;;-1:-1:-1;;;29652:53:0;;29686:10;29652:53;;;8013:51:1;29652:13:0;8080:18:1;;;8073:50;-1:-1:-1;;;;;29652:13:0;;;;:25;;7986:18:1;;29652:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;29433:174::-;7044:6;;-1:-1:-1;;;;;7044:6:0;6401:10;7044:22;7036:67;;;;-1:-1:-1;;;7036:67:0;;;;;;;:::i;:::-;29548:13:::1;::::0;:51:::1;::::0;-1:-1:-1;;;29548:51:0;;::::1;::::0;::::1;2936:25:1::0;;;-1:-1:-1;;;;;29548:13:0;;::::1;::::0;:41:::1;::::0;2909:18:1;;29548:51:0::1;2790:177:1::0;27177:830:0;7044:6;;-1:-1:-1;;;;;7044:6:0;6401:10;7044:22;7036:67;;;;-1:-1:-1;;;7036:67:0;;;;;;;:::i;:::-;27543:17;27505:14;27420:61:::1;27463:18:::0;27420:19;:61:::1;:::i;:::-;:99;;;;:::i;:::-;:140;;;;:::i;:::-;27399:161;;:1;:161;27377:235;;;::::0;-1:-1:-1;;;27377:235:0;;8795:2:1;27377:235:0::1;::::0;::::1;8777:21:1::0;8834:2;8814:18;;;8807:30;8873:26;8853:18;;;8846:54;8917:18;;27377:235:0::1;8593:348:1::0;27377:235:0::1;27623:182;27661:5;27681:19;27715:18;27748:14;27777:17;27623:23;:182::i;:::-;27821:178;::::0;-1:-1:-1;;;9148:28:1;;9201:2;9192:12;27821:178:0::1;;::::0;;;;;::::1;::::0;;259:4:1;247:17;;;229:36;;301:17;;;296:2;281:18;;274:45;355:17;;;335:18;;;328:45;409:17;;404:2;389:18;;382:45;27821:178:0;;;;::::1;::::0;;;;;216:3:1;27821:178:0;;::::1;27177:830:::0;;;;:::o;31271:139::-;31370:13;;:32;;-1:-1:-1;;;31370:32:0;;-1:-1:-1;;;;;2062:32:1;;;31370::0;;;2044:51:1;31343:7:0;;31370:13;;:23;;2017:18:1;;31370:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31363:39;31271:139;-1:-1:-1;;31271:139:0:o;7131:148::-;7044:6;;-1:-1:-1;;;;;7044:6:0;6401:10;7044:22;7036:67;;;;-1:-1:-1;;;7036:67:0;;;;;;;:::i;:::-;7238:1:::1;7222:6:::0;;7201:40:::1;::::0;-1:-1:-1;;;;;7222:6:0;;::::1;::::0;7201:40:::1;::::0;7238:1;;7201:40:::1;7269:1;7252:19:::0;;-1:-1:-1;;;;;;7252:19:0::1;::::0;;7131:148::o;24324:121::-;24376:4;7044:6;;-1:-1:-1;;;;;7044:6:0;6401:10;7044:22;7036:67;;;;-1:-1:-1;;;7036:67:0;;;;;;;:::i;:::-;-1:-1:-1;24393:14:0::1;:22:::0;;-1:-1:-1;;24393:22:0::1;::::0;;:14:::1;24324:121:::0;:::o;25005:391::-;7044:6;;-1:-1:-1;;;;;7044:6:0;6401:10;7044:22;7036:67;;;;-1:-1:-1;;;7036:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25147:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:50;::::1;;:38;::::0;;::::1;:50;;::::0;25125:142:::1;;;;-1:-1:-1::0;;;25125:142:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25278:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:49;;-1:-1:-1;;25278:49:0::1;::::0;::::1;;::::0;;::::1;::::0;;;25343:45;;578:41:1;;;25343:45:0::1;::::0;551:18:1;25343:45:0::1;;;;;;;;25005:391:::0;;:::o;24589:408::-;7044:6;;-1:-1:-1;;;;;7044:6:0;6401:10;7044:22;7036:67;;;;-1:-1:-1;;;7036:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24736:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;:55;::::1;;:43;::::0;;::::1;:55;;::::0;24714:147:::1;;;;-1:-1:-1::0;;;24714:147:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24872:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;;;;:54;;-1:-1:-1;;24872:54:0::1;::::0;::::1;;::::0;;::::1;::::0;;;24942:47;;578:41:1;;;24942:47:0::1;::::0;551:18:1;24942:47:0::1;438:187:1::0;8144:104:0;8200:13;8233:7;8226:14;;;;;:::i;26334:810::-;7044:6;;-1:-1:-1;;;;;7044:6:0;6401:10;7044:22;7036:67;;;;-1:-1:-1;;;7036:67:0;;;;;;;:::i;:::-;26692:16;26655:13;26572:59:::1;26614:17:::0;26572:18;:59:::1;:::i;:::-;:96;;;;:::i;:::-;:136;;;;:::i;:::-;26551:157;;:1;:157;26529:230;;;::::0;-1:-1:-1;;;26529:230:0;;10017:2:1;26529:230:0::1;::::0;::::1;9999:21:1::0;10056:2;10036:18;;;10029:30;10095:25;10075:18;;;10068:53;10138:18;;26529:230:0::1;9815:347:1::0;26529:230:0::1;26770:177;26807:5;26827:18;26860:17;26892:13;26920:16;26770:22;:177::i;:::-;26963:173;::::0;-1:-1:-1;;;10369:27:1;;10421:2;10412:12;26963:173:0::1;10167:263:1::0;10079:400:0;10199:4;10221:228;6401:10;10271:7;10293:145;10350:15;10293:145;;;;;;;;;;;;;;;;;6401:10;10293:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;10293:34:0;;;;;;;;;;;;:38;:145::i;31079:184::-;31210:13;;:45;;-1:-1:-1;;;31210:45:0;;-1:-1:-1;;;;;2062:32:1;;;31210:45:0;;;2044:51:1;31178:7:0;;31210:13;;:36;;2017:18:1;;31210:45:0;1873:228:1;8658:216:0;8780:4;8802:42;6401:10;8826:9;8837:6;8802:9;:42::i;29071:354::-;7044:6;;-1:-1:-1;;;;;7044:6:0;6401:10;7044:22;7036:67;;;;-1:-1:-1;;;7036:67:0;;;;;;;:::i;:::-;29189:23:::1;;29177:8;:35:::0;29155:136:::1;;;::::0;-1:-1:-1;;;29155:136:0;;10637:2:1;29155:136:0::1;::::0;::::1;10619:21:1::0;10676:2;10656:18;;;10649:30;10715:34;10695:18;;;10688:62;-1:-1:-1;;;10766:18:1;;;10759:49;10825:19;;29155:136:0::1;10435:415:1::0;29155:136:0::1;29348:23;::::0;29307:65:::1;::::0;29338:8;;29307:65:::1;::::0;;;::::1;29383:23;:34:::0;29071:354::o;30933:138::-;31022:13;;:41;;;-1:-1:-1;;;31022:41:0;;;;30995:7;;-1:-1:-1;;;;;31022:13:0;;:39;;:41;;;;;;;;;;;;;;:13;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31015:48;;30933:138;:::o;28015:383::-;7044:6;;-1:-1:-1;;;;;7044:6:0;6401:10;7044:22;7036:67;;;;-1:-1:-1;;;7036:67:0;;;;;;;:::i;:::-;28135:15:::1;::::0;-1:-1:-1;;;;;28135:15:0;;::::1;28113:38:::0;;::::1;::::0;28091:123:::1;;;::::0;-1:-1:-1;;;28091:123:0;;11057:2:1;28091:123:0::1;::::0;::::1;11039:21:1::0;11096:2;11076:18;;;11069:30;11135:34;11115:18;;;11108:62;-1:-1:-1;;;11186:18:1;;;11179:33;11229:19;;28091:123:0::1;10855:399:1::0;28091:123:0::1;28272:15;::::0;28230:59:::1;::::0;-1:-1:-1;;;;;28272:15:0;;::::1;::::0;28230:59;::::1;::::0;::::1;::::0;28272:15:::1;::::0;28230:59:::1;28300:15;:37:::0;;-1:-1:-1;;;;;;28300:37:0::1;-1:-1:-1::0;;;;;28300:37:0;;::::1;::::0;;::::1;::::0;;;28348:13:::1;::::0;:42:::1;::::0;-1:-1:-1;;;28348:42:0;;::::1;::::0;::::1;2044:51:1::0;;;;28348:13:0;;::::1;::::0;:30:::1;::::0;2017:18:1;;28348:42:0::1;1873:228:1::0;23961:355:0;7044:6;;-1:-1:-1;;;;;7044:6:0;6401:10;7044:22;7036:67;;;;-1:-1:-1;;;7036:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24093:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;:39;::::1;;:27;::::0;;::::1;:39;;::::0;24071:132:::1;;;::::0;-1:-1:-1;;;24071:132:0;;11461:2:1;24071:132:0::1;::::0;::::1;11443:21:1::0;11500:2;11480:18;;;11473:30;11539:34;11519:18;;;11512:62;-1:-1:-1;;;11590:18:1;;;11583:41;11641:19;;24071:132:0::1;11259:407:1::0;24071:132:0::1;-1:-1:-1::0;;;;;24214:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:38;;-1:-1:-1;;24214:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;24268:40;;578:41:1;;;24268:40:0::1;::::0;551:18:1;24268:40:0::1;438:187:1::0;23713:240:0;7044:6;;-1:-1:-1;;;;;7044:6:0;6401:10;7044:22;7036:67;;;;-1:-1:-1;;;7036:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23831:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:48;;-1:-1:-1;;23831:48:0::1;::::0;::::1;;::::0;;::::1;::::0;;;23895:50;;578:41:1;;;23895:50:0::1;::::0;551:18:1;23895:50:0::1;438:187:1::0;25404:898:0;7044:6;;-1:-1:-1;;;;;7044:6:0;6401:10;7044:22;7036:67;;;;-1:-1:-1;;;7036:67:0;;;;;;;:::i;:::-;25532:15:::1;::::0;-1:-1:-1;;;;;25532:37:0;;::::1;:15:::0;::::1;:37;25528:400;;-1:-1:-1::0;;;;;25612:32:0;::::1;25586:125;;;::::0;-1:-1:-1;;;25586:125:0;;11873:2:1;25586:125:0::1;::::0;::::1;11855:21:1::0;11912:2;11892:18;;;11885:30;11951:33;11931:18;;;11924:61;12002:18;;25586:125:0::1;11671:355:1::0;25586:125:0::1;25835:15;::::0;25731:134:::1;::::0;-1:-1:-1;;;12233:30:1;;-1:-1:-1;;;;;25835:15:0;;::::1;::::0;25731:134;::::1;::::0;12288:2:1;12279:12;25731:134:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;25880:15;:36:::0;;-1:-1:-1;;;;;;25880:36:0::1;-1:-1:-1::0;;;;;25880:36:0;::::1;;::::0;;25528:400:::1;25944:10;::::0;-1:-1:-1;;;;;25944:27:0;;::::1;:10:::0;::::1;:27;25940:355;;-1:-1:-1::0;;;;;26014:27:0;::::1;25988:115;;;::::0;-1:-1:-1;;;25988:115:0;;12504:2:1;25988:115:0::1;::::0;::::1;12486:21:1::0;12543:2;12523:18;;;12516:30;12582:28;12562:18;;;12555:56;12628:18;;25988:115:0::1;12302:350:1::0;25988:115:0::1;26217:10;::::0;26123:119:::1;::::0;-1:-1:-1;;;12859:25:1;;-1:-1:-1;;;;;26217:10:0;;::::1;::::0;26123:119;::::1;::::0;12909:2:1;12900:12;26123:119:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;26257:10;:26:::0;;-1:-1:-1;;;;;26257:26:0;::::1;-1:-1:-1::0;;;;;;26257:26:0;;::::1;;::::0;;25404:898;;:::o;7287:305::-;-1:-1:-1;;;;;7380:27:0;;7400:6;7380:27;;;;:56;;-1:-1:-1;7427:9:0;;-1:-1:-1;;;;;7427:9:0;6401:10;-1:-1:-1;;;;;7411:25:0;;7380:56;7358:144;;;;-1:-1:-1;;;7358:144:0;;13125:2:1;7358:144:0;;;13107:21:1;13164:2;13144:18;;;13137:30;13203:34;13183:18;;;13176:62;-1:-1:-1;;;13254:18:1;;;13247:36;13300:19;;7358:144:0;12923:402:1;7358:144:0;7539:6;;;7518:38;;-1:-1:-1;;;;;7518:38:0;;;;7539:6;;;7518:38;;;7567:6;:17;;-1:-1:-1;;;;;;7567:17:0;-1:-1:-1;;;;;7567:17:0;;;;;;;;;;7287:305::o;3108:181::-;3166:7;;3198:5;3202:1;3198;:5;:::i;:::-;3186:17;;3227:1;3222;:6;;3214:46;;;;-1:-1:-1;;;3214:46:0;;13665:2:1;3214:46:0;;;13647:21:1;13704:2;13684:18;;;13677:30;13743:29;13723:18;;;13716:57;13790:18;;3214:46:0;13463:351:1;3214:46:0;3280:1;3108:181;-1:-1:-1;;;3108:181:0:o;11942:378::-;-1:-1:-1;;;;;12078:19:0;;12070:68;;;;-1:-1:-1;;;12070:68:0;;14021:2:1;12070:68:0;;;14003:21:1;14060:2;14040:18;;;14033:30;14099:34;14079:18;;;14072:62;-1:-1:-1;;;14150:18:1;;;14143:34;14194:19;;12070:68:0;13819:400:1;12070:68:0;-1:-1:-1;;;;;12157:21:0;;12149:68;;;;-1:-1:-1;;;12149:68:0;;14426:2:1;12149:68:0;;;14408:21:1;14465:2;14445:18;;;14438:30;14504:34;14484:18;;;14477:62;-1:-1:-1;;;14555:18:1;;;14548:32;14597:19;;12149:68:0;14224:398:1;12149:68:0;-1:-1:-1;;;;;12228:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;12280:32;;2936:25:1;;;12280:32:0;;2909:18:1;12280:32:0;;;;;;;;11942:378;;;:::o;32137:3043::-;-1:-1:-1;;;;;32269:18:0;;32261:68;;;;-1:-1:-1;;;32261:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32348:16:0;;32340:64;;;;-1:-1:-1;;;32340:64:0;;;;;;;:::i;:::-;32421:6;32431:1;32421:11;32417:93;;32449:28;32465:4;32471:2;32475:1;32449:15;:28::i;32417:93::-;-1:-1:-1;;;;;32541:31:0;;;32522:16;32541:31;;;:25;:31;;;;;;;;;32601:29;;;;;;;;;32662:35;;;:29;:35;;;;;;32541:31;;;;;32601:29;;;;32662:35;32661:36;:87;;;;-1:-1:-1;;;;;;32715:33:0;;;;;;:29;:33;;;;;;;;32714:34;32661:87;32643:1229;;;32783:16;;-1:-1:-1;;;32783:16:0;;;;32775:59;;;;-1:-1:-1;;;32775:59:0;;15639:2:1;32775:59:0;;;15621:21:1;15678:2;15658:18;;;15651:30;15717:32;15697:18;;;15690:60;15767:18;;32775:59:0;15437:354:1;32775:59:0;32853:14;;;;;;;32849:1012;;;-1:-1:-1;;;;;32915:38:0;;;;;;:34;:38;;;;;;;;32914:39;:105;;;;-1:-1:-1;;;;;;32979:40:0;;;;;;:34;:40;;;;;;;;32978:41;32914:105;32888:675;;;33066:11;33062:232;;;33154:15;;33144:6;:25;;33106:164;;;;-1:-1:-1;;;33106:164:0;;15998:2:1;33106:164:0;;;15980:21:1;16037:2;16017:18;;;16010:30;16076:34;16056:18;;;16049:62;-1:-1:-1;;;16127:18:1;;;16120:39;16176:19;;33106:164:0;15796:405:1;33106:164:0;33322:10;33318:226;;;33409:11;;33399:6;:21;;33361:159;;;;-1:-1:-1;;;33361:159:0;;16408:2:1;33361:159:0;;;16390:21:1;16447:2;16427:18;;;16420:30;16486:34;16466:18;;;16459:62;-1:-1:-1;;;16537:18:1;;;16530:38;16585:19;;33361:159:0;16206:404:1;33361:159:0;-1:-1:-1;;;;;33588:33:0;;;;;;:29;:33;;;;;;;;33583:263;;33708:15;;33697:6;33681:13;33691:2;-1:-1:-1;;;;;8624:18:0;8592:7;8624:18;;;:9;:18;;;;;;;8473:177;33681:13;:22;;;;:::i;:::-;33680:43;;33646:180;;;;-1:-1:-1;;;33646:180:0;;16817:2:1;33646:180:0;;;16799:21:1;16856:2;16836:18;;;16829:30;16895:34;16875:18;;;16868:62;-1:-1:-1;;;16946:18:1;;;16939:49;17005:19;;33646:180:0;16615:415:1;33646:180:0;33884:37;33897:11;33910:10;33884:12;:37::i;:::-;33975:23;;33965:4;33932:12;8624:18;;;:9;:18;;;;;;34029:16;;-1:-1:-1;;33947:51:0;;-1:-1:-1;;;34029:16:0;;;;:40;;;;;34062:7;34029:40;:67;;;;-1:-1:-1;34087:9:0;;;;34086:10;34029:67;:97;;;;-1:-1:-1;34113:9:0;;-1:-1:-1;;;34113:9:0;;;;:13;;34029:97;:143;;;;-1:-1:-1;;;;;;34143:29:0;;;;;;:25;:29;;;;;;;;34029:143;:185;;;;-1:-1:-1;;;;;;34190:24:0;;;;;;:18;:24;;;;;;;;34189:25;34029:185;:225;;;;-1:-1:-1;;;;;;34232:22:0;;;;;;:18;:22;;;;;;;;34231:23;34029:225;34011:364;;;34283:9;:16;;-1:-1:-1;;34283:16:0;34295:4;34283:16;;;34314:17;:15;:17::i;:::-;34346:9;:17;;-1:-1:-1;;34346:17:0;;;34011:364;34403:9;;34387:12;;34403:9;;34402:10;:30;;;;-1:-1:-1;34416:16:0;;-1:-1:-1;;;34416:16:0;;;;34402:30;-1:-1:-1;;;;;34449:24:0;;;;;;:18;:24;;;;;;34387:45;;-1:-1:-1;34449:24:0;;;:50;;-1:-1:-1;;;;;;34477:22:0;;;;;;:18;:22;;;;;;;;34449:50;34445:98;;;-1:-1:-1;34526:5:0;34445:98;34557:7;:24;;;;-1:-1:-1;34568:9:0;;-1:-1:-1;;;34568:9:0;;;;:13;;34557:24;34553:414;;;34622:9;;34598:11;;34635:3;;34613:18;;-1:-1:-1;;;34622:9:0;;;;34613:6;:18;:::i;:::-;34612:26;;;;:::i;:::-;34684:8;;34598:40;;-1:-1:-1;34653:18:0;;34696:3;;34675:17;;34684:8;;;;;34675:6;:17;:::i;:::-;34674:25;;;;:::i;:::-;34653:46;-1:-1:-1;34723:12:0;34732:3;34723:6;:12;:::i;:::-;34714:21;;34750:41;34766:4;34780;34787:3;34750:15;:41::i;:::-;34812:14;;34808:148;;34847:38;34867:4;34874:10;34847:11;:38::i;:::-;34919:8;;34909:31;;;34919:8;;;;;;17335:36:1;;17402:2;17387:18;;17380:34;;;34909:31:0;;17308:18:1;34909:31:0;;;;;;;34808:148;34583:384;;34553:414;34977:33;34993:4;34999:2;35003:6;34977:15;:33::i;:::-;35027:13;;-1:-1:-1;;;;;35027:13:0;:24;35060:4;35067:15;35060:4;-1:-1:-1;;;;;8624:18:0;8592:7;8624:18;;;:9;:18;;;;;;;8473:177;35067:15;35027:56;;-1:-1:-1;;;;;;35027:56:0;;;;;;;-1:-1:-1;;;;;17633:32:1;;;35027:56:0;;;17615:51:1;17682:18;;;17675:34;17588:18;;35027:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35023:72;35109:13;;-1:-1:-1;;;;;35109:13:0;:24;35142:2;35147:13;35142:2;-1:-1:-1;;;;;8624:18:0;8592:7;8624:18;;;:9;:18;;;;;;;8473:177;35147:13;35109:52;;-1:-1:-1;;;;;;35109:52:0;;;;;;;-1:-1:-1;;;;;17633:32:1;;;35109:52:0;;;17615:51:1;17682:18;;;17675:34;17588:18;;35109:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35105:68;32250:2930;;;;32137:3043;;;:::o;3441:226::-;3561:7;3597:12;3589:6;;;;3581:29;;;;-1:-1:-1;;;3581:29:0;;;;;;;;:::i;:::-;-1:-1:-1;3621:9:0;3633:5;3637:1;3633;:5;:::i;:::-;3621:17;3441:226;-1:-1:-1;;;;;3441:226:0:o;11483:451::-;-1:-1:-1;;;;;11567:21:0;;11559:67;;;;-1:-1:-1;;;11559:67:0;;17922:2:1;11559:67:0;;;17904:21:1;17961:2;17941:18;;;17934:30;18000:34;17980:18;;;17973:62;-1:-1:-1;;;18051:18:1;;;18044:31;18092:19;;11559:67:0;17720:397:1;11559:67:0;11718:105;11755:6;11718:105;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11718:18:0;;;;;;:9;:18;;;;;;;:105;:22;:105::i;:::-;-1:-1:-1;;;;;11697:18:0;;;;;;:9;:18;;;;;:126;11849:12;;:24;;11866:6;11849:16;:24::i;:::-;11834:12;:39;11889:37;;2936:25:1;;;11915:1:0;;-1:-1:-1;;;;;11889:37:0;;;;;2924:2:1;2909:18;11889:37:0;;;;;;;11483:451;;:::o;36357:1530::-;36594:22;;;;:45;;;;:22;;;;;:45;36590:329;;36661:187;;-1:-1:-1;;;18324:33:1;;18382:2;18373:12;36661:187:0;;;;;;;;36739:22;;;;36819:14;;36661:187;;36739:22;;;;;;;;36661:187;;;;-1:-1:-1;;;;;;;;;;;36661:187:0;;;36819:14;;;36661:187;:::i;:::-;;;;;;;;36863:22;;;:44;;-1:-1:-1;;36863:44:0;;;;;;;;;36590:329;36933:21;;;;:43;;;;:21;;;;;:43;36929:322;;36998:184;;-1:-1:-1;;;18812:32:1;;18869:2;18860:12;36998:184:0;;;;;;;;37075:21;;;;37153:14;;36998:184;;37075:21;;;;;;;;36998:184;;;;-1:-1:-1;;;;;;;;;;;36998:184:0;;;37153:14;;;36998:184;:::i;:::-;;;;;;;;37197:21;;;:42;;-1:-1:-1;;37197:42:0;;;;;;;;;36929:322;37265:17;;;;:35;;;;-1:-1:-1;;;37265:17:0;;;;:35;37261:294;;37322:172;;-1:-1:-1;;;19085:28:1;;19138:2;19129:12;37322:172:0;;;;;;;;37395:17;;;;37465:14;;37322:172;;37395:17;-1:-1:-1;;;37395:17:0;;;;;;37322:172;;;;-1:-1:-1;;;;;;;;;;;37322:172:0;;;37465:14;;;37322:172;:::i;:::-;;;;;;;;37509:17;;;:34;;-1:-1:-1;;37509:34:0;-1:-1:-1;;;37509:34:0;;;;;;;37261:294;37569:20;;;;:41;;;;-1:-1:-1;;;37569:20:0;;;;:41;37565:315;;37632:181;;-1:-1:-1;;;19354:31:1;;19410:2;19401:12;37632:181:0;;;;;;;;37708:20;;;;37784:14;;37632:181;;37708:20;-1:-1:-1;;;37708:20:0;;;;;;37632:181;;;;-1:-1:-1;;;;;;;;;;;37632:181:0;;;37784:14;;;37632:181;:::i;:::-;;;;;;;;37828:20;;;:40;;;;;-1:-1:-1;;;37828:40:0;-1:-1:-1;;37828:40:0;;;;;;36357:1530;;;;;:::o;37895:1497::-;38127:21;;;;:43;;;;:21;;:43;38123:322;;38192:184;;-1:-1:-1;;;19626:32:1;;19683:2;19674:12;38192:184:0;;;;;;;;38269:21;;;;38347:14;;38192:184;;38269:21;;;;;38192:184;;;;-1:-1:-1;;;;;;;;;;;38192:184:0;;;38347:14;;;38192:184;:::i;:::-;;;;;;;;38391:21;;;:42;;-1:-1:-1;;38391:42:0;;;;;;;38123:322;38459:20;;;;:41;;;;:20;;;;;:41;38455:315;;38522:181;;-1:-1:-1;;;19899:31:1;;19955:2;19946:12;38522:181:0;;;;;;;;38598:20;;;;38674:14;;38522:181;;38598:20;;;;;;;;38522:181;;;;-1:-1:-1;;;;;;;;;;;38522:181:0;;;38674:14;;;38522:181;:::i;:::-;;;;;;;;38718:20;;;:40;;-1:-1:-1;;38718:40:0;;;;;;;;;38455:315;38784:16;;;;:33;;;;-1:-1:-1;;;38784:16:0;;;;:33;38780:287;;38839:169;;-1:-1:-1;;;20171:27:1;;20223:2;20214:12;38839:169:0;;;;;;;;38911:16;;;;38979:14;;38839:169;;38911:16;-1:-1:-1;;;38911:16:0;;;;;;38839:169;;;;-1:-1:-1;;;;;;;;;;;38839:169:0;;;38979:14;;;38839:169;:::i;:::-;;;;;;;;39023:16;;;:32;;-1:-1:-1;;39023:32:0;-1:-1:-1;;;39023:32:0;;;;;;;38780:287;39081:19;;;;:39;;;;-1:-1:-1;;;39081:19:0;;;;:39;39077:308;;39142:178;;-1:-1:-1;;;20439:30:1;;20494:2;20485:12;39142:178:0;;;;;;;;39217:19;;;;39291:14;;39142:178;;39217:19;-1:-1:-1;;;39217:19:0;;;;;;39142:178;;;;-1:-1:-1;;;;;;;;;;;39142:178:0;;;39291:14;;;39142:178;:::i;:::-;;;;;;;;39335:19;;;:38;;;;;-1:-1:-1;;;39335:38:0;-1:-1:-1;;39335:38:0;;;;;;37895:1497;;;;;:::o;10487:606::-;-1:-1:-1;;;;;10627:20:0;;10619:70;;;;-1:-1:-1;;;10619:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10708:23:0;;10700:71;;;;-1:-1:-1;;;10700:71:0;;;;;;;:::i;:::-;10860:108;10896:6;10860:108;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10860:17:0;;;;;;:9;:17;;;;;;;:108;:21;:108::i;:::-;-1:-1:-1;;;;;10840:17:0;;;;;;;:9;:17;;;;;;:128;;;;11002:20;;;;;;;:32;;11027:6;11002:24;:32::i;:::-;-1:-1:-1;;;;;10979:20:0;;;;;;;:9;:20;;;;;;;:55;;;;11050:35;;;;;;;;;;11078:6;2936:25:1;;2924:2;2909:18;;2790:177;35188:1161:0;35264:13;:17;;-1:-1:-1;;35342:15:0;;;35370:229;;;;35418:23;;35402:13;:39;;35418:23;;;;-1:-1:-1;;35456:37:0;;;;;;;35418:23;35471:22;;;;;;35456:37;;;;;;;;-1:-1:-1;;35552:35:0;-1:-1:-1;;;35519:18:0;;;;35508:29;;;;-1:-1:-1;;35552:35:0;;-1:-1:-1;;;35566:21:0;;;;35552:35;;;;;;;;35370:229;35613:10;35609:232;;;35656:24;;35640:13;:40;;35656:24;;;;;;;;-1:-1:-1;;35695:38:0;;;;;;;35710:23;;;;;;35695:38;;;;;-1:-1:-1;;35793:36:0;-1:-1:-1;;;35759:19:0;;;;35748:30;;-1:-1:-1;;35793:36:0;;-1:-1:-1;;;35807:22:0;;;;;;;35793:36;;;;;;;35609:232;35856:10;35855:11;:27;;;;;35871:11;35870:12;35855:27;35851:249;;;35915:24;;35899:13;:40;;35915:24;;;;;;;;-1:-1:-1;;35954:38:0;;;;;;;35969:23;;;;;;35954:38;;;;;-1:-1:-1;;36052:36:0;-1:-1:-1;;;36018:19:0;;;;36007:30;;-1:-1:-1;;36052:36:0;;-1:-1:-1;;;36066:22:0;;;;;;;36052:36;;;;;;;35851:249;36164:11;;;;;;;;;36153:8;;;;;;36122:28;;36164:11;36138:12;;;;;36122:13;:28;:::i;:::-;:39;;;;:::i;:::-;:53;;;;:::i;:::-;36110:9;:65;;-1:-1:-1;;36110:65:0;;-1:-1:-1;;;36110:65:0;;;;;;;;;;;;;36191:150;;;36217:13;;;;;;;;;;20747:36:1;;36110:65:0;36245:12;;;;20814:2:1;20799:18;;20792:45;36272:8:0;;;;;20853:18:1;;;20846:45;;;;36295:11:0;;;;;20922:2:1;20907:18;;20900:45;36321:9:0;;;;;;20976:3:1;20961:19;;20954:46;36191:150:0;;20734:3:1;20719:19;36191:150:0;20508:498:1;39400:1519:0;39490:4;39446:23;8624:18;;;:9;:18;;;;;;39644:9;;39446:50;;-1:-1:-1;39535:21:0;;39507:25;;39669:1;;39644:9;-1:-1:-1;;;39644:9:0;;;;;39596:31;;39614:13;39446:50;39596:31;:::i;:::-;39595:58;;;;:::i;:::-;:75;;;;:::i;:::-;39742:9;;39569:101;;-1:-1:-1;39681:24:0;;39742:9;-1:-1:-1;;;39742:9:0;;;;;39709:29;;39727:11;;;;;39709:15;:29;:::i;:::-;39708:43;;;;:::i;:::-;39681:70;-1:-1:-1;39762:20:0;39817:34;39681:70;39817:15;:34;:::i;:::-;39785:67;;:15;:67;:::i;:::-;39762:90;;39865:31;39883:12;39865:17;:31::i;:::-;39909:27;39939:41;39963:17;39939:21;:41;:::i;:::-;40072:11;;39909:71;;-1:-1:-1;39991:19:0;;40072:11;;;;;;;40061:8;;;;;;40040:17;;40061:8;;40040:13;:17;:::i;:::-;40039:30;;;;:::i;:::-;:44;;;;:::i;:::-;40013:9;;:71;;;-1:-1:-1;;;40013:9:0;;;;:71;:::i;:::-;40147:13;;39991:93;;;;;-1:-1:-1;40095:26:0;;40204:1;;39991:93;;40125:35;;40147:13;40125:19;:35;:::i;:::-;40124:64;;;;:::i;:::-;:81;;;;:::i;:::-;40095:110;-1:-1:-1;40216:25:0;40244:42;40095:110;40244:19;:42;:::i;:::-;40307:10;;40299:47;;40216:70;;-1:-1:-1;;;;;;40307:10:0;;40299:47;;;;;40216:70;;40307:10;40299:47;40307:10;40299:47;40216:70;40307:10;40299:47;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40363:19:0;;40359:253;;40399:50;40413:15;40430:18;40399:13;:50::i;:::-;40469:131;;;21583:25:1;;;21639:2;21624:18;;21617:34;;;21667:18;;;21660:34;;;40469:131:0;;21571:2:1;21556:18;40469:131:0;;;;;;;40359:253;40692:13;;40639:109;;-1:-1:-1;;;40639:109:0;;-1:-1:-1;;;;;40692:13:0;;;40639:109;;;17615:51:1;17682:18;;;17675:34;;;40624:12:0;;40654:4;;40639:30;;17588:18:1;;40639:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40624:124;;40763:7;40759:153;;;40787:13;;:62;;-1:-1:-1;;;40787:62:0;;;;;2936:25:1;;;-1:-1:-1;;;;;40787:13:0;;;;:44;;2909:18:1;;40787:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40869:31;40883:16;40869:31;;;;2936:25:1;;2924:2;2909:18;;2790:177;40869:31:0;;;;;;;;40759:153;39435:1484;;;;;;;;;;39400:1519::o;3297:136::-;3355:7;3382:43;3386:1;3389;3382:43;;;;;;;;;;;;;;;;;:3;:43::i;40927:473::-;41018:16;;;41032:1;41018:16;;;;;;;;40994:21;;41018:16;;;;;;;;;;-1:-1:-1;41018:16:0;40994:40;;41063:4;41045;41050:1;41045:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;41045:23:0;;;:7;;;;;;;;;;:23;;;;41089:15;;:22;;;-1:-1:-1;;;41089:22:0;;;;:15;;;;;:20;;:22;;;;;41045:7;;41089:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41079:4;41084:1;41079:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;41079:32:0;;;:7;;;;;;;;;:32;41154:15;;41122:62;;41139:4;;41154:15;41172:11;41122:8;:62::i;:::-;41195:15;;:197;;-1:-1:-1;;;41195:197:0;;-1:-1:-1;;;;;41195:15:0;;;;:66;;:197;;41276:11;;41195:15;;41319:4;;41346;;41366:15;;41195:197;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40983:417;40927:473;:::o;30076:555::-;30190:15;;30158:62;;30175:4;;-1:-1:-1;;;;;30190:15:0;30208:11;30158:8;:62::i;:::-;30259:10;30235:21;:34;30231:122;;;30286:55;;-1:-1:-1;;;30286:55:0;;23691:2:1;30286:55:0;;;23673:21:1;23730:2;23710:18;;;23703:30;23769:34;23749:18;;;23742:62;-1:-1:-1;;;23820:18:1;;;23813:43;23873:19;;30286:55:0;23489:409:1;30231:122:0;30363:15;;30567;;30363:260;;-1:-1:-1;;;30363:260:0;;30435:4;30363:260;;;24244:34:1;24294:18;;;24287:34;;;30363:15:0;24337:18:1;;;24330:34;;;24380:18;;;24373:34;-1:-1:-1;;;;;30567:15:0;;;24423:19:1;;;24416:44;30597:15:0;24476:19:1;;;24469:35;30363:15:0;;;:31;;30402:9;;24178:19:1;;30363:260:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;630:597:1:-;742:4;771:2;800;789:9;782:21;832:6;826:13;875:6;870:2;859:9;855:18;848:34;900:1;910:140;924:6;921:1;918:13;910:140;;;1019:14;;;1015:23;;1009:30;985:17;;;1004:2;981:26;974:66;939:10;;910:140;;;1068:6;1065:1;1062:13;1059:91;;;1138:1;1133:2;1124:6;1113:9;1109:22;1105:31;1098:42;1059:91;-1:-1:-1;1211:2:1;1190:15;-1:-1:-1;;1186:29:1;1171:45;;;;1218:2;1167:54;;630:597;-1:-1:-1;;;630:597:1:o;1232:131::-;-1:-1:-1;;;;;1307:31:1;;1297:42;;1287:70;;1353:1;1350;1343:12;1368:315;1436:6;1444;1497:2;1485:9;1476:7;1472:23;1468:32;1465:52;;;1513:1;1510;1503:12;1465:52;1552:9;1539:23;1571:31;1596:5;1571:31;:::i;:::-;1621:5;1673:2;1658:18;;;;1645:32;;-1:-1:-1;;;1368:315:1:o;1688:180::-;1747:6;1800:2;1788:9;1779:7;1775:23;1771:32;1768:52;;;1816:1;1813;1806:12;1768:52;-1:-1:-1;1839:23:1;;1688:180;-1:-1:-1;1688:180:1:o;2329:456::-;2406:6;2414;2422;2475:2;2463:9;2454:7;2450:23;2446:32;2443:52;;;2491:1;2488;2481:12;2443:52;2530:9;2517:23;2549:31;2574:5;2549:31;:::i;:::-;2599:5;-1:-1:-1;2656:2:1;2641:18;;2628:32;2669:33;2628:32;2669:33;:::i;:::-;2329:456;;2721:7;;-1:-1:-1;;;2775:2:1;2760:18;;;;2747:32;;2329:456::o;3161:247::-;3220:6;3273:2;3261:9;3252:7;3248:23;3244:32;3241:52;;;3289:1;3286;3279:12;3241:52;3328:9;3315:23;3347:31;3372:5;3347:31;:::i;3621:156::-;3687:20;;3747:4;3736:16;;3726:27;;3716:55;;3767:1;3764;3757:12;3716:55;3621:156;;;:::o;3782:393::-;3860:6;3868;3876;3884;3937:3;3925:9;3916:7;3912:23;3908:33;3905:53;;;3954:1;3951;3944:12;3905:53;3977:27;3994:9;3977:27;:::i;:::-;3967:37;;4023:36;4055:2;4044:9;4040:18;4023:36;:::i;:::-;4013:46;;4078:36;4110:2;4099:9;4095:18;4078:36;:::i;:::-;4068:46;;4133:36;4165:2;4154:9;4150:18;4133:36;:::i;:::-;4123:46;;3782:393;;;;;;;:::o;4180:118::-;4266:5;4259:13;4252:21;4245:5;4242:32;4232:60;;4288:1;4285;4278:12;4303:382;4368:6;4376;4429:2;4417:9;4408:7;4404:23;4400:32;4397:52;;;4445:1;4442;4435:12;4397:52;4484:9;4471:23;4503:31;4528:5;4503:31;:::i;:::-;4553:5;-1:-1:-1;4610:2:1;4595:18;;4582:32;4623:30;4582:32;4623:30;:::i;:::-;4672:7;4662:17;;;4303:382;;;;;:::o;4690:388::-;4758:6;4766;4819:2;4807:9;4798:7;4794:23;4790:32;4787:52;;;4835:1;4832;4825:12;4787:52;4874:9;4861:23;4893:31;4918:5;4893:31;:::i;:::-;4943:5;-1:-1:-1;5000:2:1;4985:18;;4972:32;5013:33;4972:32;5013:33;:::i;5083:380::-;5162:1;5158:12;;;;5205;;;5226:61;;5280:4;5272:6;5268:17;5258:27;;5226:61;5333:2;5325:6;5322:14;5302:18;5299:38;5296:161;;5379:10;5374:3;5370:20;5367:1;5360:31;5414:4;5411:1;5404:15;5442:4;5439:1;5432:15;5296:161;;5083:380;;;:::o;5468:356::-;5670:2;5652:21;;;5689:18;;;5682:30;5748:34;5743:2;5728:18;;5721:62;5815:2;5800:18;;5468:356::o;6446:127::-;6507:10;6502:3;6498:20;6495:1;6488:31;6538:4;6535:1;6528:15;6562:4;6559:1;6552:15;6578:168;6618:7;6684:1;6680;6676:6;6672:14;6669:1;6666:21;6661:1;6654:9;6647:17;6643:45;6640:71;;;6691:18;;:::i;:::-;-1:-1:-1;6731:9:1;;6578:168::o;6751:127::-;6812:10;6807:3;6803:20;6800:1;6793:31;6843:4;6840:1;6833:15;6867:4;6864:1;6857:15;6883:120;6923:1;6949;6939:35;;6954:18;;:::i;:::-;-1:-1:-1;6988:9:1;;6883:120::o;8134:245::-;8201:6;8254:2;8242:9;8233:7;8229:23;8225:32;8222:52;;;8270:1;8267;8260:12;8222:52;8302:9;8296:16;8321:28;8343:5;8321:28;:::i;8384:204::-;8422:3;8458:4;8455:1;8451:12;8490:4;8487:1;8483:12;8525:3;8519:4;8515:14;8510:3;8507:23;8504:49;;;8533:18;;:::i;:::-;8569:13;;8384:204;-1:-1:-1;;;8384:204:1:o;9215:184::-;9285:6;9338:2;9326:9;9317:7;9313:23;9309:32;9306:52;;;9354:1;9351;9344:12;9306:52;-1:-1:-1;9377:16:1;;9215:184;-1:-1:-1;9215:184:1:o;9404:406::-;9606:2;9588:21;;;9645:2;9625:18;;;9618:30;9684:34;9679:2;9664:18;;9657:62;-1:-1:-1;;;9750:2:1;9735:18;;9728:40;9800:3;9785:19;;9404:406::o;13330:128::-;13370:3;13401:1;13397:6;13394:1;13391:13;13388:39;;;13407:18;;:::i;:::-;-1:-1:-1;13443:9:1;;13330:128::o;14627:401::-;14829:2;14811:21;;;14868:2;14848:18;;;14841:30;14907:34;14902:2;14887:18;;14880:62;-1:-1:-1;;;14973:2:1;14958:18;;14951:35;15018:3;15003:19;;14627:401::o;15033:399::-;15235:2;15217:21;;;15274:2;15254:18;;;15247:30;15313:34;15308:2;15293:18;;15286:62;-1:-1:-1;;;15379:2:1;15364:18;;15357:33;15422:3;15407:19;;15033:399::o;17035:125::-;17075:4;17103:1;17100;17097:8;17094:34;;;17108:18;;:::i;:::-;-1:-1:-1;17145:9:1;;17035:125::o;18396:209::-;-1:-1:-1;;18560:38:1;;;;18542:57;;18530:2;18515:18;;18396:209::o;21011:165::-;21049:1;21083:4;21080:1;21076:12;21107:3;21097:37;;21114:18;;:::i;:::-;21166:3;21159:4;21156:1;21152:12;21148:22;21143:27;;;21011:165;;;;:::o;21181:195::-;21219:4;21256;21253:1;21249:12;21288:4;21285:1;21281:12;21313:3;21308;21305:12;21302:38;;;21320:18;;:::i;:::-;21357:13;;;21181:195;-1:-1:-1;;;21181:195:1:o;22116:127::-;22177:10;22172:3;22168:20;22165:1;22158:31;22208:4;22205:1;22198:15;22232:4;22229:1;22222:15;22248:251;22318:6;22371:2;22359:9;22350:7;22346:23;22342:32;22339:52;;;22387:1;22384;22377:12;22339:52;22419:9;22413:16;22438:31;22463:5;22438:31;:::i;22504:980::-;22766:4;22814:3;22803:9;22799:19;22845:6;22834:9;22827:25;22871:2;22909:6;22904:2;22893:9;22889:18;22882:34;22952:3;22947:2;22936:9;22932:18;22925:31;22976:6;23011;23005:13;23042:6;23034;23027:22;23080:3;23069:9;23065:19;23058:26;;23119:2;23111:6;23107:15;23093:29;;23140:1;23150:195;23164:6;23161:1;23158:13;23150:195;;;23229:13;;-1:-1:-1;;;;;23225:39:1;23213:52;;23320:15;;;;23285:12;;;;23261:1;23179:9;23150:195;;;-1:-1:-1;;;;;;;23401:32:1;;;;23396:2;23381:18;;23374:60;-1:-1:-1;;;23465:3:1;23450:19;23443:35;23362:3;22504:980;-1:-1:-1;;;22504:980:1:o;24515:306::-;24603:6;24611;24619;24672:2;24660:9;24651:7;24647:23;24643:32;24640:52;;;24688:1;24685;24678:12;24640:52;24717:9;24711:16;24701:26;;24767:2;24756:9;24752:18;24746:25;24736:35;;24811:2;24800:9;24796:18;24790:25;24780:35;;24515:306;;;;;:::o

Swarm Source

ipfs://06eb7853b804b8737ca6deffe3e0dec046784bd5030f5bb69a939c52361e232f
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.