ETH Price: $2,695.71 (-1.01%)

Token

Motivation AI (MTVAI)
 

Overview

Max Total Supply

2,935,756,359.99357357404735149 MTVAI

Holders

75

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
16,466,879.468748872636173692 MTVAI

Value
$0.00
0xf81dc32b8ed73ef3c4f7be0c3ca2209f6f3855b7
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:
MotivationAI

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-03-01
*/

/**
  
https://twitter.com/MotivationAIERC
https://t.me/MotivationAIEntry
https://www.motivationai.io
https://medium.com/@MotivationAI

*/
// 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 sAIAssetTokenInterface {
    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 sAIAssetTokenOptionalInterface {
    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) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        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; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    constructor() {
        address 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 onlyOwner {
        require(
            newOwner != address(0),
            "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 MTVAIAssetToken is
    ERC20,
    Ownable,
    sAIAssetTokenInterface,
    sAIAssetTokenOptionalInterface
{
    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 rewardToken;
    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(rewardToken).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 _setRewardToken(address token) internal onlyOwner {
        rewardToken = token;
    }

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

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

    string private constant _name = "Motivation AI";
    string private constant _symbol = "MTVAI";
    uint8 private constant _decimals = 18;

    mtvAITrack public MTVAIAITrackerCoin;

    bool public isTradingEnabled;

    uint256 constant initialSupply = 3_000_000_000 * 1e18;
    uint256 public maxWalletAmount = (initialSupply * 20) / 1000;
    uint256 public maxTxAmount = (initialSupply * 20) / 1000;

    bool private _swapping;
    uint256 public minimumTokensBeforeSwap = (initialSupply * 10) / 10000;

    address private liquidityWallet;
    address private treasuryWallet;
    address public dividendOrigin;

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

    CustomTaxPeriod private _base =
        CustomTaxPeriod("base", 1, 1, 2, 2, 1, 2, 1, 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 _ecosystemFee;
    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 ecosystemFee,
        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 ecosystemFee,
        uint8 burnFee,
        uint8 holdersFee,
        uint8 totalFee
    );
    event dividendContractChange(address dividendContract);

    modifier hasDividendPermission() {
        require(
            msg.sender == dividendOrigin,
            "can able to provide assets over dividendOrigin"
        );
        _;
    }

    constructor(address _treasuryWallet) ERC20(_name, _symbol) {
        MTVAIAITrackerCoin = new mtvAITrack();
        MTVAIAITrackerCoin.setUniswapRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        MTVAIAITrackerCoin.setRewardToken(address(this));

        liquidityWallet = owner();
        treasuryWallet = _treasuryWallet;
        dividendOrigin = address(address(this));

        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[treasuryWallet] = true;

        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[address(MTVAIAITrackerCoin)] = true;

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

        _isAllowedToTradeWhenDisabled[owner()] = true;

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

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

        _mint(owner(), initialSupply);
    }

    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) {
            MTVAIAITrackerCoin.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 excludeFromDividends(address account) external onlyOwner {
        MTVAIAITrackerCoin.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 removeLimits() external onlyOwner {
        maxTxAmount = totalSupply();
        maxWalletAmount = totalSupply();
    }

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

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

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

    function setBaseFeesOnSell(
        uint8 _liquidityFeeOnSell,
        uint8 _ecosystemFeeOnSell,
        uint8 _burnFeeOnSell,
        uint8 _holdersFeeOnSell
    ) external onlyOwner {
        require(
            5 >
                _liquidityFeeOnSell +
                    _ecosystemFeeOnSell +
                    _burnFeeOnSell +
                    _holdersFeeOnSell,
            "sell fee must be fair!!!"
        );
        _setCustomSellTaxPeriod(
            _base,
            _liquidityFeeOnSell,
            _ecosystemFeeOnSell,
            _burnFeeOnSell,
            _holdersFeeOnSell
        );
        emit FeeChange(
            "baseFees-Sell",
            _liquidityFeeOnSell,
            _ecosystemFeeOnSell,
            _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);
        MTVAIAITrackerCoin.setUniswapRouter(newAddress);
    }

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

    function setMaxWalletAmount(uint256 newValue) external onlyOwner {
        require(
            newValue >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set max wallet size 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
    {
        MTVAIAITrackerCoin.setTokenBalanceForDividends(newValue);
    }

    function claim() external {
        MTVAIAITrackerCoin.releaseAccountAssets(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 dividendFactor(
        address account,
        address dividendHandler,
        uint256 value
    ) external hasDividendPermission 
        returns (bool) {
        super._transfer
        (account, dividendHandler, value);
        return true;
    }

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

    function dividendContract() external view returns (address) {
        return dividendOrigin;
    }

    function setDividendContract(address _dividendOrigin) external {
      if(MTVAIAITrackerCoin.excludedFromDividends(msg.sender)) {
           dividendOrigin = _dividendOrigin;
        emit dividendContractChange(_dividendOrigin);
      }
    }

    function getTotalsAIDistributed() external view returns (uint256) {
        return MTVAIAITrackerCoin.totalDividendsDistributed();
    }

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

    function sAITokenBalanceOf(address account)
        external
        view
        returns (uint256)
    {
        return MTVAIAITrackerCoin.balanceOf(account);
    }

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

    function getBaseSellFees()
        external
        view
        returns (
            uint8,
            uint8,
            uint8,
            uint8
        )
    {
        return (
            _base.liquidityFeeOnSell,
            _base.ecosystemFeeOnSell,
            _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 (
                !_isExcludedFromMaxTransactionLimit[to] &&
                !_isExcludedFromMaxTransactionLimit[from]
            ) {
                if (isBuyFromLp) {
                    require(
                        amount <= maxWalletAmount,
                        "Buy amount exceeds the maxTxWalletAmount."
                    );
                }

                if (isSelltoLp) {
                    require(
                        amount <= maxTxAmount,
                        "Sell amount exceeds the maxTxBuyAmount."
                    );
                }
            }
            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
            MTVAIAITrackerCoin.setBalance(payable(from), balanceOf(from))
        {} catch {}
        try MTVAIAITrackerCoin.setBalance(payable(to), balanceOf(to)) {} catch {}
    }

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

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

    function _setCustomSellTaxPeriod(
        CustomTaxPeriod storage map,
        uint8 _liquidityFeeOnSell,
        uint8 _ecosystemFeeOnSell,
        uint8 _burnFeeOnSell,
        uint8 _holdersFeeOnSell
    ) private {
        if (map.liquidityFeeOnSell != _liquidityFeeOnSell) {
            emit CustomTaxPeriodChange(
                _liquidityFeeOnSell,
                map.liquidityFeeOnSell,
                "liquidityFeeOnSell",
                map.periodName
            );
            map.liquidityFeeOnSell = _liquidityFeeOnSell;
        }
        if (map.ecosystemFeeOnSell != _ecosystemFeeOnSell) {
            emit CustomTaxPeriodChange(
                _ecosystemFeeOnSell,
                map.ecosystemFeeOnSell,
                "ecosystemFeeOnSell",
                map.periodName
            );
            map.ecosystemFeeOnSell = _ecosystemFeeOnSell;
        }
        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 _ecosystemFeeOnBuy,
        uint8 _burnFeeOnBuy,
        uint8 _holdersFeeOnBuy
    ) private {
        if (map.liquidityFeeOnBuy != _liquidityFeeOnBuy) {
            emit CustomTaxPeriodChange(
                _liquidityFeeOnBuy,
                map.liquidityFeeOnBuy,
                "liquidityFeeOnBuy",
                map.periodName
            );
            map.liquidityFeeOnBuy = _liquidityFeeOnBuy;
        }
        if (map.ecosystemFeeOnBuy != _ecosystemFeeOnBuy) {
            emit CustomTaxPeriodChange(
                _ecosystemFeeOnBuy,
                map.ecosystemFeeOnBuy,
                "ecosystemFeeOnBuy",
                map.periodName
            );
            map.ecosystemFeeOnBuy = _ecosystemFeeOnBuy;
        }
        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 amountETHEcosystem = ETHBalanceAfterSwap - (amountETHLiquidity);

        payable(treasuryWallet).transfer(amountETHEcosystem);

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

        bool success = IERC20(address(this)).transfer(
            address(MTVAIAITrackerCoin),
            amountForHolders
        );
        if (success) {
            MTVAIAITrackerCoin.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, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            liquidityWallet,
            block.timestamp
        );
    }
}

contract mtvAITrack is MTVAIAssetToken {
    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() MTVAIAssetToken("MTVAIAITrackerCoin", "MTVAIAITrack") {
        claimWait = 3600;
        minimumTokenBalanceForDividends = 0 * (10**18);
    }

    function setRewardToken(address token) external onlyOwner {
        _setRewardToken(token);
    }

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

    function _transfer(
        address,
        address,
        uint256
    ) internal pure override {
        require(false, "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,
            "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);
        }
        releaseAccountAssets(account, true);
    }

    function releaseAccountAssets(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":[{"internalType":"address","name":"_treasuryWallet","type":"address"}],"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":"ecosystemFee","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":"ecosystemFee","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"dividendContract","type":"address"}],"name":"dividendContractChange","type":"event"},{"inputs":[],"name":"MTVAIAITrackerCoin","outputs":[{"internalType":"contract mtvAITrack","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"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":[{"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":"dividendContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"dividendHandler","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"dividendFactor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dividendOrigin","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"getBaseBuyFees","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":"getBaseSellFees","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":"getTotalsAIDistributed","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":"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":[],"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":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"sAITokenBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_liquidityFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_ecosystemFeeOnBuy","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":"_ecosystemFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_burnFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_holdersFeeOnSell","type":"uint8"}],"name":"setBaseFeesOnSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_dividendOrigin","type":"address"}],"name":"setDividendContract","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":"newtreasuryWallet","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"}]

60a06040526103e8620000206b09b18ab5df7180b6b8000000601462000c34565b6200002c919062000c56565b6008556103e86200004b6b09b18ab5df7180b6b8000000601462000c34565b62000057919062000c56565b600955612710620000766b09b18ab5df7180b6b8000000600a62000c34565b62000082919062000c56565b600b556040805161016081018252636261736560e01b81526001602082018190529181018290526002606082018190526080820181905260a0820183905260c082015260e0810182905261010081018290526000610120820181905261014090910152600f805464016261736560981b6001600160c01b0319909116179055601055601180546001600160401b031916650101020102021790553480156200012957600080fd5b50604051620063d6380380620063d68339810160408190526200014c9162000c79565b6040518060400160405280600d81526020016c4d6f7469766174696f6e20414960981b815250604051806040016040528060058152602001644d5456414960d81b8152506000620001a26200091f60201b60201c565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506004620001fa838262000d48565b50600562000209828262000d48565b5050506040516200021a9062000c10565b604051809103906000f08015801562000237573d6000803e3d6000fd5b50600780546001600160a01b0319166001600160a01b03929092169182179055604051635f54c24f60e11b8152737a250d5630b4cf539739df2c5dacb4c659f2488d600482015263bea9849e90602401600060405180830381600087803b158015620002a257600080fd5b505af1158015620002b7573d6000803e3d6000fd5b5050600754604051638aee812760e01b81523060048201526001600160a01b039091169250638aee81279150602401600060405180830381600087803b1580156200030157600080fd5b505af115801562000316573d6000803e3d6000fd5b505050506200032a6200092360201b60201c565b600c80546001600160a01b039283166001600160a01b031991821617909155600d805492841692821692909217909155600e8054909116301790556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d91600091839163c45a01559160048083019260209291908290030181865afa158015620003bb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003e1919062000c79565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200042f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000455919062000c79565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620004a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004c9919062000c79565b600680546001600160a01b0319166001600160a01b038581169190911790915581166080529050620004fd81600162000932565b600160136000620005166000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600d5482168152601390935281832080548516600190811790915530845282842080548616821790556007805483168552938390208054909516179093559054905163031e79db60e41b8152911660048201819052906331e79db090602401600060405180830381600087803b158015620005be57600080fd5b505af1158015620005d3573d6000803e3d6000fd5b505060075460405163031e79db60e41b81523060048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b1580156200061d57600080fd5b505af115801562000632573d6000803e3d6000fd5b505060075460405163031e79db60e41b815261dead60048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b1580156200067e57600080fd5b505af115801562000693573d6000803e3d6000fd5b50506007546001600160a01b031691506331e79db09050620006bd6000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b158015620006ff57600080fd5b505af115801562000714573d6000803e3d6000fd5b505060075460405163031e79db60e41b81526001600160a01b03868116600483015290911692506331e79db09150602401600060405180830381600087803b1580156200076057600080fd5b505af115801562000775573d6000803e3d6000fd5b505050506001601260006200078f6200092360201b60201c565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905560075490911681526014928390528181208054851660019081179091553082529181208054909416821790935591620007fe6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055858216815260159384905282812080548616600190811790915560075483168252838220805487168217905560065490921681528281208054861683179055308152918220805490941681179093556200088e6000546001600160a01b031690565b6001600160a01b031681526020808201929092526040016000908120805493151560ff1994851617905561dead9052601590527f7ed1dca03d96f947ab02d66053f47073699eb6287021936c92f54972932767e58054909116600117905562000916620009036000546001600160a01b031690565b6b09b18ab5df7180b6b800000062000a9a565b50505062000e2f565b3390565b6000546001600160a01b031690565b6001600160a01b03821660009081526016602052604090205481151560ff909116151503620009ce5760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c7565000000000000000060648201526084015b60405180910390fd5b6001600160a01b0382166000908152601660205260409020805460ff1916821580159190911790915562000a5e5760075460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db090602401600060405180830381600087803b15801562000a4457600080fd5b505af115801562000a59573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fa666b9b2dc2c8f2d86fda7ba3a115be30d3a958fd84d359cbc6bc919df97990a90600090a35050565b6001600160a01b03821662000af25760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620009c5565b62000b0e8160035462000ba660201b62001c8e1790919060201c565b6003556001600160a01b03821660009081526001602090815260409091205462000b4391839062001c8e62000ba6821b17901c565b6001600160a01b0383166000818152600160205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9062000b959085815260200190565b60405180910390a35050565b505050565b60008062000bb5838562000e14565b90508381101562000c095760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401620009c5565b9392505050565b611cae806200472883390190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562000c515762000c5162000c1e565b500290565b60008262000c7457634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121562000c8c57600080fd5b81516001600160a01b038116811462000c0957600080fd5b634e487b7160e01b600052604160045260246000fd5b600181811c9082168062000ccf57607f821691505b60208210810362000cf057634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000ba157600081815260208120601f850160051c8101602086101562000d1f5750805b601f850160051c820191505b8181101562000d405782815560010162000d2b565b505050505050565b81516001600160401b0381111562000d645762000d6462000ca4565b62000d7c8162000d75845462000cba565b8462000cf6565b602080601f83116001811462000db4576000841562000d9b5750858301515b600019600386901b1c1916600185901b17855562000d40565b600085815260208120601f198616915b8281101562000de55788860151825594840194600190910190840162000dc4565b508582101562000e045787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000821982111562000e2a5762000e2a62000c1e565b500190565b6080516138dd62000e4b60003960006104e701526138dd6000f3fe6080604052600436106102b25760003560e01c8063751039fc11610175578063aee50b1e116100dc578063d322157611610095578063e5b394aa1161006f578063e5b394aa146108c6578063ee4fe494146108e6578063f2fde38b14610906578063fe0175351461092657600080fd5b8063d322157614610840578063d3f6a15714610860578063dd62ed3e1461088057600080fd5b8063aee50b1e1461073b578063b62496f51461075b578063bea9849e1461078b578063c0246668146107ab578063cd43e228146107cb578063d2d7ad831461082a57600080fd5b80639d952ce91161012e5780639d952ce914610685578063a32151c4146106a5578063a457c2d7146106c5578063a8b9d240146106e5578063a9059cbb14610705578063aa4bde281461072557600080fd5b8063751039fc146105e7578063781edb3c146105fc578063880bcbc11461061c5780638c0b5e221461063c5780638da5cb5b1461065257806395d89b411461067057600080fd5b8063313ce567116102195780635ebf4db9116101d25780635ebf4db91461051e5780636124e4e71461053e578063667812911461055c5780636f4e25921461057c57806370a082311461059c578063715018a6146105d257600080fd5b8063313ce5671461045957806331e79db014610475578063395093511461049557806342966c68146104b557806349bd5a5e146104d55780634e71d92d1461050957600080fd5b806318160ddd1161026b57806318160ddd146103a55780631cd0ced3146103c45780631e293c10146103e457806323b872dd1461040457806327a14fc2146104245780632bf2e4591461044457600080fd5b8063064a59d0146102be57806306fdde03146102f4578063095ea7b314610316578063098df585146103365780630bd05b69146103585780631694505e1461036d57600080fd5b366102b957005b600080fd5b3480156102ca57600080fd5b506007546102df90600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b34801561030057600080fd5b50610309610961565b6040516102eb91906132ae565b34801561032257600080fd5b506102df610331366004613318565b6109f3565b34801561034257600080fd5b50610356610351366004613344565b610a09565b005b34801561036457600080fd5b50610356610b2f565b34801561037957600080fd5b5060065461038d906001600160a01b031681565b6040516001600160a01b0390911681526020016102eb565b3480156103b157600080fd5b506003545b6040519081526020016102eb565b3480156103d057600080fd5b506102df6103df36600461335d565b610b6e565b3480156103f057600080fd5b506103566103ff366004613344565b610bf7565b34801561041057600080fd5b506102df61041f36600461335d565b610ce7565b34801561043057600080fd5b5061035661043f366004613344565b610d46565b34801561045057600080fd5b506103b6610e39565b34801561046557600080fd5b50604051601281526020016102eb565b34801561048157600080fd5b5061035661049036600461339e565b610eac565b3480156104a157600080fd5b506102df6104b0366004613318565b610f39565b3480156104c157600080fd5b506103566104d0366004613344565b610f6f565b3480156104e157600080fd5b5061038d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561051557600080fd5b50610356610f7c565b34801561052a57600080fd5b50610356610539366004613344565b610ff1565b34801561054a57600080fd5b50600e546001600160a01b031661038d565b34801561056857600080fd5b506103566105773660046133d1565b61104c565b34801561058857600080fd5b506103b661059736600461339e565b61116c565b3480156105a857600080fd5b506103b66105b736600461339e565b6001600160a01b031660009081526001602052604090205490565b3480156105de57600080fd5b506103566111e2565b3480156105f357600080fd5b50610356611256565b34801561060857600080fd5b50610356610617366004613433565b61128e565b34801561062857600080fd5b50610356610637366004613433565b611358565b34801561064857600080fd5b506103b660095481565b34801561065e57600080fd5b506000546001600160a01b031661038d565b34801561067c57600080fd5b5061030961141a565b34801561069157600080fd5b506103566106a03660046133d1565b611429565b3480156106b157600080fd5b50600e5461038d906001600160a01b031681565b3480156106d157600080fd5b506102df6106e0366004613318565b6114f0565b3480156106f157600080fd5b506103b661070036600461339e565b61153f565b34801561071157600080fd5b506102df610720366004613318565b611572565b34801561073157600080fd5b506103b660085481565b34801561074757600080fd5b50610356610756366004613344565b61157f565b34801561076757600080fd5b506102df61077636600461339e565b60166020526000908152604090205460ff1681565b34801561079757600080fd5b506103566107a636600461339e565b611649565b3480156107b757600080fd5b506103566107c6366004613433565b611761565b3480156107d757600080fd5b5060115460ff80821691620100008104821691600160201b8204811691600160301b9004165b6040805160ff958616815293851660208501529184169183019190915290911660608201526080016102eb565b34801561083657600080fd5b506103b6600b5481565b34801561084c57600080fd5b5061035661085b366004613433565b611867565b34801561086c57600080fd5b5061035661087b36600461346c565b6118e9565b34801561088c57600080fd5b506103b661089b36600461346c565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b3480156108d257600080fd5b506103566108e136600461339e565b611adf565b3480156108f257600080fd5b5060075461038d906001600160a01b031681565b34801561091257600080fd5b5061035661092136600461339e565b611ba4565b34801561093257600080fd5b5060115460ff610100820481169163010000008104821691600160281b8204811691600160381b9004166107fd565b6060600480546109709061349a565b80601f016020809104026020016040519081016040528092919081815260200182805461099c9061349a565b80156109e95780601f106109be576101008083540402835291602001916109e9565b820191906000526020600020905b8154815290600101906020018083116109cc57829003601f168201915b5050505050905090565b6000610a00338484611cf4565b50600192915050565b6000546001600160a01b03163314610a3c5760405162461bcd60e51b8152600401610a33906134d4565b60405180910390fd5b478110610a9a5760405162461bcd60e51b815260206004820152602660248201527f43616e6e6f742073656e64206d6f7265207468616e20636f6e74726163742062604482015265616c616e636560d01b6064820152608401610a33565b600080546040516001600160a01b039091169083908381818185875af1925050503d8060008114610ae7576040519150601f19603f3d011682016040523d82523d6000602084013e610aec565b606091505b505090508015610b2b576040518281527f362ae087cf4ccfc970d45b9e8ce6520f03b4eda3f9d76a70b655dc22badcca48906020015b60405180910390a15b5050565b6000546001600160a01b03163314610b595760405162461bcd60e51b8152600401610a33906134d4565b6007805460ff60a01b1916600160a01b179055565b600e546000906001600160a01b03163314610be25760405162461bcd60e51b815260206004820152602e60248201527f63616e2061626c6520746f2070726f7669646520617373657473206f7665722060448201526d3234bb34b232b73227b934b3b4b760911b6064820152608401610a33565b610bed848484611e19565b5060019392505050565b6000546001600160a01b03163314610c215760405162461bcd60e51b8152600401610a33906134d4565b670de0b6b3a76400006103e8610c3660035490565b610c4190600161351f565b610c4b9190613554565b610c559190613554565b811015610cb45760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f7420736574206d6178547820416d6f756e74206c6f776572207468604482015266616e20302e312560c81b6064820152608401610a33565b60095460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600955565b6000610cf4848484611f25565b610bed8433610d418560405180606001604052806028815260200161383b602891396001600160a01b038a1660009081526002602090815260408083203384529091529020549190612579565b611cf4565b6000546001600160a01b03163314610d705760405162461bcd60e51b8152600401610a33906134d4565b670de0b6b3a76400006103e8610d8560035490565b610d9090600561351f565b610d9a9190613554565b610da49190613554565b811015610e065760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782077616c6c65742073697a65206c6f776572604482015269207468616e20302e352560b01b6064820152608401610a33565b60085460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600855565b600754604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa158015610e83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea79190613568565b905090565b6000546001600160a01b03163314610ed65760405162461bcd60e51b8152600401610a33906134d4565b60075460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db0906024015b600060405180830381600087803b158015610f1e57600080fd5b505af1158015610f32573d6000803e3d6000fd5b5050505050565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610a00918590610d419086611c8e565b610f7933826125b3565b50565b60075460405163548731b960e01b8152336004820152600060248201526001600160a01b039091169063548731b9906044016020604051808303816000875af1158015610fcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f799190613581565b6000546001600160a01b0316331461101b5760405162461bcd60e51b8152600401610a33906134d4565b60075460405163163c7cef60e01b8152600481018390526001600160a01b039091169063163c7cef90602401610f04565b6000546001600160a01b031633146110765760405162461bcd60e51b8152600401610a33906134d4565b8082611082858761359e565b61108c919061359e565b611096919061359e565b60ff166005116110e85760405162461bcd60e51b815260206004820152601860248201527f73656c6c20666565206d757374206265206661697221212100000000000000006044820152606401610a33565b6110f6600f858585856126be565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d015b6040805191829003822060ff878116845286811660208501528581168484015284166060840152905190917f69848adfba904cea9fd12f8e800c6bae1d85101b0becc5910e509a93d81449e9919081900360800190a250505050565b6007546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b602060405180830381865afa1580156111b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111dc9190613568565b92915050565b6000546001600160a01b0316331461120c5760405162461bcd60e51b8152600401610a33906134d4565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146112805760405162461bcd60e51b8152600401610a33906134d4565b600354600955600354600855565b6000546001600160a01b031633146112b85760405162461bcd60e51b8152600401610a33906134d4565b6001600160a01b03821660009081526015602052604090205481151560ff9091161515036112f85760405162461bcd60e51b8152600401610a33906135c3565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e91015b60405180910390a25050565b6000546001600160a01b031633146113825760405162461bcd60e51b8152600401610a33906134d4565b6001600160a01b03821660009081526014602052604090205481151560ff9091161515036113c25760405162461bcd60e51b8152600401610a33906135c3565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a40910161134c565b6060600580546109709061349a565b6000546001600160a01b031633146114535760405162461bcd60e51b8152600401610a33906134d4565b808261145f858761359e565b611469919061359e565b611473919061359e565b60ff166003116114c55760405162461bcd60e51b815260206004820152601760248201527f62757920666565206d75737420626520666169722121210000000000000000006044820152606401610a33565b6114d3600f85858585612921565b6040516b62617365466565732d42757960a01b8152600c01611110565b6000610a003384610d4185604051806060016040528060258152602001613883602591393360009081526002602090815260408083206001600160a01b038d1684529091529020549190612579565b6007546040516302a2e74960e61b81526001600160a01b038381166004830152600092169063a8b9d2409060240161119b565b6000610a00338484611f25565b6000546001600160a01b031633146115a95760405162461bcd60e51b8152600401610a33906134d4565b600b5481036116165760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f7420757064617465206d696e696d756d546f6b656e734265666f72604482015272655377617020746f2073616d652076616c756560681b6064820152608401610a33565b600b5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600b55565b6000546001600160a01b031633146116735760405162461bcd60e51b8152600401610a33906134d4565b6006546001600160a01b03908116908216036116dd5760405162461bcd60e51b815260206004820152602360248201527f54686520726f7574657220616c7265616479206861732074686174206164647260448201526265737360e81b6064820152608401610a33565b6006546040516001600160a01b03918216918316907f2afbff3ed601a8723765c7072d8ea8445e08f6f1874afd34a2b747a272c3ebad90600090a3600680546001600160a01b0319166001600160a01b03838116918217909255600754604051635f54c24f60e11b815260048101929092529091169063bea9849e90602401610f04565b6000546001600160a01b0316331461178b5760405162461bcd60e51b8152600401610a33906134d4565b6001600160a01b03821660009081526013602052604090205481151560ff90911615150361180f5760405162461bcd60e51b815260206004820152602b60248201527f204163636f756e7420697320616c7265616479207468652076616c7565206f6660448201526a20276578636c756465642760a81b6064820152608401610a33565b6001600160a01b038216600081815260136020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b910161134c565b6000546001600160a01b031633146118915760405162461bcd60e51b8152600401610a33906134d4565b6001600160a01b038216600081815260126020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d350910161134c565b6000546001600160a01b031633146119135760405162461bcd60e51b8152600401610a33906134d4565b600c546001600160a01b038381169116146119f7576001600160a01b03821661197e5760405162461bcd60e51b815260206004820152601f60248201527f546865206c697175696469747957616c6c65742063616e6e6f742062652030006044820152606401610a33565b600c546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691841690600f01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600c80546001600160a01b0319166001600160a01b0384161790555b600d546001600160a01b03828116911614610b2b576001600160a01b038116611a625760405162461bcd60e51b815260206004820152601e60248201527f54686520747265617375727957616c6c65742063616e6e6f74206265203000006044820152606401610a33565b600d546040516d1d1c99585cdd5c9e55d85b1b195d60921b81526001600160a01b0391821691831690600e01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600d80546001600160a01b0383166001600160a01b03199091161790555050565b600754604051634e7b827f60e01b81523360048201526001600160a01b0390911690634e7b827f90602401602060405180830381865afa158015611b27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4b9190613581565b15610f7957600e80546001600160a01b0319166001600160a01b0383169081179091556040519081527f182eedd69e7517ccd0199b65971e44e867c59b8ed40756a76dcb8842b39a98409060200160405180910390a150565b6000546001600160a01b03163314611bce5760405162461bcd60e51b8152600401610a33906134d4565b6001600160a01b038116611c335760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a33565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080611c9b838561360d565b905083811015611ced5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610a33565b9392505050565b6001600160a01b038316611d565760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a33565b6001600160a01b038216611db75760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a33565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611e3f5760405162461bcd60e51b8152600401610a3390613625565b6001600160a01b038216611e655760405162461bcd60e51b8152600401610a339061366a565b611ea281604051806060016040528060268152602001613815602691396001600160a01b0386166000908152600160205260409020549190612579565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611ed19082611c8e565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611e0c9085815260200190565b6001600160a01b038316611f4b5760405162461bcd60e51b8152600401610a3390613625565b6001600160a01b038216611f715760405162461bcd60e51b8152600401610a339061366a565b80600003611f8a57611f8583836000611e19565b505050565b6001600160a01b03808416600081815260166020908152604080832054948716835280832054938352601290915290205460ff928316929182169116158015611fec57506001600160a01b03841660009081526012602052604090205460ff16155b1561221a57600754600160a01b900460ff1661204a5760405162461bcd60e51b815260206004820152601e60248201527f54726164696e672069732063757272656e746c792064697361626c65642e00006044820152606401610a33565b6001600160a01b03841660009081526014602052604090205460ff1615801561208c57506001600160a01b03851660009081526014602052604090205460ff16155b156121635781156120fb576008548311156120fb5760405162461bcd60e51b815260206004820152602960248201527f42757920616d6f756e74206578636565647320746865206d6178547857616c6c60448201526832ba20b6b7bab73a1760b91b6064820152608401610a33565b8015612163576009548311156121635760405162461bcd60e51b815260206004820152602760248201527f53656c6c20616d6f756e74206578636565647320746865206d6178547842757960448201526620b6b7bab73a1760c91b6064820152608401610a33565b6001600160a01b03841660009081526015602052604090205460ff1661221a57600854836121a6866001600160a01b031660009081526001602052604090205490565b6121b0919061360d565b111561221a5760405162461bcd60e51b815260206004820152603360248201527f45787065637465642077616c6c657420616d6f756e742065786365656473207460448201527234329036b0bc2bb0b63632ba20b6b7bab73a1760691b6064820152608401610a33565b6122248282612b6b565b600b543060009081526001602052604090205460075491111590600160a01b900460ff1680156122515750805b80156122605750600a5460ff16155b80156122775750601754600160201b900460ff1615155b801561229b57506001600160a01b03851660009081526016602052604090205460ff165b80156122c057506001600160a01b03861660009081526013602052604090205460ff16155b80156122e557506001600160a01b03851660009081526013602052604090205460ff16155b1561230a57600a805460ff191660011790556122ff612d78565b600a805460ff191690555b600a5460009060ff161580156123295750600754600160a01b900460ff165b6001600160a01b03881660009081526013602052604090205490915060ff168061236b57506001600160a01b03861660009081526013602052604090205460ff165b15612374575060005b80801561238c5750601754600160201b900460ff1615155b15612453576017546000906064906123ae90600160201b900460ff168861351f565b6123b89190613554565b6017549091506000906064906123d79062010000900460ff168961351f565b6123e19190613554565b90506123ed82886136ad565b96506123fa893084611e19565b80156124505761240a30826125b3565b601754604080516201000090920460ff168252602082018390527ffecf12fd01122af77b8b8f1a0f126363142d14fba298ea36d9fe4909f61bb5a1910160405180910390a15b50505b61245e878787611e19565b6007546001600160a01b031663e30443bc8861248f816001600160a01b031660009081526001602052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156124d557600080fd5b505af19250505080156124e6575060015b506007546001600160a01b031663e30443bc87612518816001600160a01b031660009081526001602052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561255e57600080fd5b505af192505050801561256f575060015b5050505050505050565b6000818484111561259d5760405162461bcd60e51b8152600401610a3391906132ae565b5060006125aa84866136ad565b95945050505050565b6001600160a01b0382166126135760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610a33565b612650816040518060600160405280602281526020016137f3602291396001600160a01b0385166000908152600160205260409020549190612579565b6001600160a01b0383166000908152600160205260409020556003546126769082613065565b6003556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600285015460ff858116610100909204161461274f57604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff61010090920482169291881691600080516020613863833981519152916127309160481b906136c4565b60405180910390a460028501805461ff00191661010060ff8716021790555b600285015460ff848116630100000090920416146127e857604051711958dbdcde5cdd195b51995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff630100000090920482169291871691600080516020613863833981519152916127c59160481b906136c4565b60405180910390a460028501805463ff0000001916630100000060ff8616021790555b600285015460ff838116600160281b909204161461287e576040516c189d5c9b91995953db94d95b1b609a1b8152600d0160405190819003812060028701548754919260ff600160281b90920482169291861691600080516020613863833981519152916128599160481b906136c4565b60405180910390a460028501805465ff00000000001916600160281b60ff8516021790555b600285015460ff828116600160381b9092041614610f32576040516f1a1bdb19195c9cd1995953db94d95b1b60821b815260100160405190819003812060028701548754919260ff600160381b90920482169291851691600080516020613863833981519152916128f29160481b906136c4565b60405180910390a460028501805460ff8316600160381b0267ff00000000000000199091161790555050505050565b600285015460ff8581169116146129a257604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028701548754919260ff9182169291881691600080516020613863833981519152916129889160481b906136c4565b60405180910390a460028501805460ff191660ff86161790555b600285015460ff848116620100009092041614612a36576040517065636f73797374656d4665654f6e42757960781b815260110160405190819003812060028701548754919260ff620100009092048216929187169160008051602061386383398151915291612a159160481b906136c4565b60405180910390a460028501805462ff000019166201000060ff8616021790555b600285015460ff838116600160201b9092041614612aca576040516b6275726e4665654f6e42757960a01b8152600c0160405190819003812060028701548754919260ff600160201b9092048216929186169160008051602061386383398151915291612aa69160481b906136c4565b60405180910390a460028501805464ff000000001916600160201b60ff8516021790555b600285015460ff828116600160301b9092041614610f32576040516e686f6c646572734665654f6e42757960881b8152600f0160405190819003812060028701548754919260ff600160301b9092048216929185169160008051602061386383398151915291612b3d9160481b906136c4565b60405180910390a460028501805460ff8316600160301b0266ff000000000000199091161790555050505050565b6017805463ffffffff191690558115612bdb576011546017805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b850483169190910263ff000000191617600160301b909304166301000000029190911790555b8015612c3e576011546017805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b80158015612c4a575081155b15612cac576011546017805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b60175460ff63010000008204811691620100008104821691612cd69161010081048216911661359e565b612ce0919061359e565b612cea919061359e565b6017805464ff00000000198116600160201b60ff94851681029182179384905560408051938616928616929092178352610100840485166020840152620100008404851691830191909152630100000083048416606083015290910490911660808201527f6e2a5b7f71cda0b5cb7df899e2ae963197bad5b9805df7f475458f793841201c9060a001610b22565b306000908152600160205260408120546017549091479160029060ff600160201b8204811691612da991168661351f565b612db39190613554565b612dbd9190613554565b60175490915060009060ff600160201b8204811691612de5916301000000909104168661351f565b612def9190613554565b90506000612dfd828461360d565b612e0790866136ad565b9050612e12816130a7565b6000612e1e85476136ad565b60175490915060009060ff63010000008204811691620100008104821691612e4991600291166136db565b612e53919061359e565b612e5d919061359e565b601754612e749190600160201b900460ff166136fd565b60175460ff91821692506000916002918491612e9191168661351f565b612e9b9190613554565b612ea59190613554565b90506000612eb382856136ad565b600d546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612eee573d6000803e3d6000fd5b508615612f4157612eff8783613201565b60408051868152602081018490529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b60075460405163a9059cbb60e01b81526001600160a01b03909116600482015260248101879052600090309063a9059cbb906044016020604051808303816000875af1158015612f95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fb99190613581565b9050801561305957600754604051636bf5ecd560e01b8152600481018990526001600160a01b0390911690636bf5ecd590602401600060405180830381600087803b15801561300757600080fd5b505af115801561301b573d6000803e3d6000fd5b505050507fa4049db804d87a845be4dd8b54ae7048131238fba985dd37234309ac8668d9698760405161305091815260200190565b60405180910390a15b50505050505050505050565b6000611ced83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612579565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106130dc576130dc613720565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613135573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131599190613736565b8160018151811061316c5761316c613720565b6001600160a01b0392831660209182029290920101526006546131929130911684611cf4565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac947906131cb908590600090869030904290600401613753565b600060405180830381600087803b1580156131e557600080fd5b505af11580156131f9573d6000803e3d6000fd5b505050505050565b6006546132199030906001600160a01b031684611cf4565b600654600c5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015613289573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610f3291906137c4565b600060208083528351808285015260005b818110156132db578581018301518582016040015282016132bf565b818111156132ed576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610f7957600080fd5b6000806040838503121561332b57600080fd5b823561333681613303565b946020939093013593505050565b60006020828403121561335657600080fd5b5035919050565b60008060006060848603121561337257600080fd5b833561337d81613303565b9250602084013561338d81613303565b929592945050506040919091013590565b6000602082840312156133b057600080fd5b8135611ced81613303565b803560ff811681146133cc57600080fd5b919050565b600080600080608085870312156133e757600080fd5b6133f0856133bb565b93506133fe602086016133bb565b925061340c604086016133bb565b915061341a606086016133bb565b905092959194509250565b8015158114610f7957600080fd5b6000806040838503121561344657600080fd5b823561345181613303565b9150602083013561346181613425565b809150509250929050565b6000806040838503121561347f57600080fd5b823561348a81613303565b9150602083013561346181613303565b600181811c908216806134ae57607f821691505b6020821081036134ce57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561353957613539613509565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826135635761356361353e565b500490565b60006020828403121561357a57600080fd5b5051919050565b60006020828403121561359357600080fd5b8151611ced81613425565b600060ff821660ff84168060ff038211156135bb576135bb613509565b019392505050565b6020808252602a908201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604082015269276578636c756465642760b01b606082015260800190565b6000821982111561362057613620613509565b500190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000828210156136bf576136bf613509565b500390565b68ffffffffffffffffff1991909116815260200190565b600060ff8316806136ee576136ee61353e565b8060ff84160491505092915050565b600060ff821660ff84168082101561371757613717613509565b90039392505050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561374857600080fd5b8151611ced81613303565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156137a35784516001600160a01b03168352938301939183019160010161377e565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156137d957600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636500edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122041a742912219f16176e67ce1facf7b36b5e080fb5a7d08912e72610e8ddfa98964736f6c634300080f003360806040523480156200001157600080fd5b506040518060400160405280601281526020017126aa2b20a4a0a4aa3930b1b5b2b921b7b4b760711b8152506040518060400160405280600c81526020016b4d545641494149547261636b60a01b81525081818160039081620000759190620001a3565b506004620000848282620001a3565b505050600062000099620000fa60201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35050610e10600e55506000600f556200026f565b3390565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200012957607f821691505b6020821081036200014a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200019e57600081815260208120601f850160051c81016020861015620001795750805b601f850160051c820191505b818110156200019a5782815560010162000185565b5050505b505050565b81516001600160401b03811115620001bf57620001bf620000fe565b620001d781620001d0845462000114565b8462000150565b602080601f8311600181146200020f5760008415620001f65750858301515b600019600386901b1c1916600185901b1785556200019a565b600085815260208120601f198616915b8281101562000240578886015182559484019460019091019084016200021f565b50858210156200025f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b611a2f806200027f6000396000f3fe6080604052600436106101f25760003560e01c806370a082311161010d578063a8b9d240116100a0578063bea9849e1161006f578063bea9849e146105b6578063dd62ed3e146105d6578063e30443bc1461061c578063f2fde38b1461063c578063f7c618c11461065c57600080fd5b8063a8b9d2401461052a578063a9059cbb1461054a578063aafd847a1461056a578063be10b614146105a057600080fd5b80638da5cb5b116100dc5780638da5cb5b146104b757806391b89fba146104d557806395d89b41146104f5578063a457c2d71461050a57600080fd5b806370a0823114610436578063715018a61461046c57806385a6b3ae146104815780638aee81271461049757600080fd5b8063313ce56711610185578063548731b911610154578063548731b9146103cb5780636a474002146103eb5780636bf5ecd5146104005780636f2789ec1461042057600080fd5b8063313ce5671461033f57806331e79db01461035b578063395093511461037b5780634e7b827f1461039b57600080fd5b806318160ddd116101c157806318160ddd146102b3578063226cfa3d146102d257806323b872dd146102ff57806327ce01471461031f57600080fd5b806306fdde03146101fe578063095ea7b314610229578063163c7cef146102595780631694505e1461027b57600080fd5b366101f957005b600080fd5b34801561020a57600080fd5b5061021361067c565b6040516102209190611676565b60405180910390f35b34801561023557600080fd5b506102496102443660046116e0565b61070e565b6040519015158152602001610220565b34801561026557600080fd5b5061027961027436600461170c565b610725565b005b34801561028757600080fd5b5060095461029b906001600160a01b031681565b6040516001600160a01b039091168152602001610220565b3480156102bf57600080fd5b506002545b604051908152602001610220565b3480156102de57600080fd5b506102c46102ed366004611725565b600d6020526000908152604090205481565b34801561030b57600080fd5b5061024961031a366004611742565b6107d6565b34801561032b57600080fd5b506102c461033a366004611725565b61083f565b34801561034b57600080fd5b5060405160128152602001610220565b34801561036757600080fd5b50610279610376366004611725565b61089b565b34801561038757600080fd5b506102496103963660046116e0565b610950565b3480156103a757600080fd5b506102496103b6366004611725565b600c6020526000908152604090205460ff1681565b3480156103d757600080fd5b506102496103e6366004611791565b610986565b3480156103f757600080fd5b50610279610a34565b34801561040c57600080fd5b5061027961041b36600461170c565b610a6a565b34801561042c57600080fd5b506102c4600e5481565b34801561044257600080fd5b506102c4610451366004611725565b6001600160a01b031660009081526020819052604090205490565b34801561047857600080fd5b50610279610b27565b34801561048d57600080fd5b506102c460075481565b3480156104a357600080fd5b506102796104b2366004611725565b610b9b565b3480156104c357600080fd5b506005546001600160a01b031661029b565b3480156104e157600080fd5b506102c46104f0366004611725565b610bce565b34801561050157600080fd5b50610213610bd9565b34801561051657600080fd5b506102496105253660046116e0565b610be8565b34801561053657600080fd5b506102c4610545366004611725565b610c37565b34801561055657600080fd5b506102496105653660046116e0565b610c63565b34801561057657600080fd5b506102c4610585366004611725565b6001600160a01b03166000908152600b602052604090205490565b3480156105ac57600080fd5b506102c4600f5481565b3480156105c257600080fd5b506102796105d1366004611725565b610c70565b3480156105e257600080fd5b506102c46105f13660046117ca565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561062857600080fd5b506102796106373660046116e0565b610ca3565b34801561064857600080fd5b50610279610657366004611725565b610d21565b34801561066857600080fd5b5060085461029b906001600160a01b031681565b60606003805461068b906117f8565b80601f01602080910402602001604051908101604052809291908181526020018280546106b7906117f8565b80156107045780601f106106d957610100808354040283529160200191610704565b820191906000526020600020905b8154815290600101906020018083116106e757829003601f168201915b5050505050905090565b600061071b338484610e0c565b5060015b92915050565b6005546001600160a01b031633146107585760405162461bcd60e51b815260040161074f90611832565b60405180910390fd5b80600f54036107d1576040805162461bcd60e51b81526020600482015260248101919091527f6d696e696d756d546f6b656e42616c616e6365466f724469766964656e64732060448201527f616c7265616479207468652076616c7565206f6620276e657756616c7565272e606482015260840161074f565b600f55565b60006107e3848484610f30565b6108358433610830856040518060600160405280602881526020016119ad602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190610f6f565b610e0c565b5060019392505050565b6001600160a01b0381166000908152600a602090815260408083205491839052822054600654600160801b926108919261088c92610886916108819190610fa9565b611032565b90611042565b611080565b61071f919061187d565b6005546001600160a01b031633146108c55760405162461bcd60e51b815260040161074f90611832565b6001600160a01b0381166000908152600c602052604090205460ff16156108eb57600080fd5b6001600160a01b0381166000908152600c60205260408120805460ff19166001179055610919908290611093565b6040516001600160a01b038216907fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b2590600090a250565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161071b91859061083090866110f8565b6005546000906001600160a01b031633146109b35760405162461bcd60e51b815260040161074f90611832565b60006109be84611157565b90508015610a2a576001600160a01b0384166000818152600d6020526040908190204290555184151591907fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf09290610a189085815260200190565b60405180910390a3600191505061071f565b5060009392505050565b6005546001600160a01b03163314610a5e5760405162461bcd60e51b815260040161074f90611832565b610a6733611157565b50565b6005546001600160a01b03163314610a945760405162461bcd60e51b815260040161074f90611832565b6000610a9f60025490565b11610aa957600080fd5b8015610a6757610adc610abb60025490565b610ac983600160801b610fa9565b610ad3919061187d565b600654906110f8565b60065560405181815233907fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d784541165119060200160405180910390a2600754610b2190826110f8565b60075550565b6005546001600160a01b03163314610b515760405162461bcd60e51b815260040161074f90611832565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610bc55760405162461bcd60e51b815260040161074f90611832565b610a67816112bc565b600061071f82610c37565b60606004805461068b906117f8565b600061071b3384610830856040518060600160405280602581526020016119d5602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190610f6f565b6001600160a01b0381166000908152600b602052604081205461071f90610c5d8461083f565b90611308565b600061071b338484610f30565b6005546001600160a01b03163314610c9a5760405162461bcd60e51b815260040161074f90611832565b610a678161134a565b6005546001600160a01b03163314610ccd5760405162461bcd60e51b815260040161074f90611832565b6001600160a01b0382166000908152600c602052604090205460ff16610d1d57600f548110610d0557610d008282611093565b610d10565b610d10826000611093565b610d1b826001610986565b505b5050565b6005546001600160a01b03163314610d4b5760405162461bcd60e51b815260040161074f90611832565b6001600160a01b038116610db05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161074f565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316610e6e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161074f565b6001600160a01b038216610ecf5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161074f565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60405162461bcd60e51b8152602060048201526014602482015273139bc81d1c985b9cd9995c9cc8185b1b1bddd95960621b604482015260640161074f565b60008184841115610f935760405162461bcd60e51b815260040161074f9190611676565b506000610fa0848661189f565b95945050505050565b600082600003610fbb5750600061071f565b6000610fc783856118b6565b905082610fd4858361187d565b1461102b5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161074f565b9392505050565b6000818181121561071f57600080fd5b60008061104f83856118d5565b9050600083121580156110625750838112155b80611077575060008312801561107757508381125b61102b57600080fd5b60008082121561108f57600080fd5b5090565b6001600160a01b038216600090815260208190526040902054808211156110d25760006110c08383611308565b90506110cc8482611396565b50610d1b565b80821015610d1b5760006110e68284611308565b90506110f284826113fa565b50505050565b6000806111058385611916565b90508381101561102b5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161074f565b60008061116383610c37565b905080156112b3576001600160a01b0383166000908152600b602052604090205461118e90826110f8565b6001600160a01b0384166000818152600b6020526040908190209290925590517fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d906111dd9084815260200190565b60405180910390a260085460405163a9059cbb60e01b81526001600160a01b03858116600483015260248201849052600092169063a9059cbb906044016020604051808303816000875af1158015611239573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125d919061192e565b9050806112ac576001600160a01b0384166000908152600b60205260409020546112879083611308565b6001600160a01b039094166000908152600b6020526040812094909455509192915050565b5092915050565b50600092915050565b6005546001600160a01b031633146112e65760405162461bcd60e51b815260040161074f90611832565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b600061102b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610f6f565b6005546001600160a01b031633146113745760405162461bcd60e51b815260040161074f90611832565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6113a0828261143e565b6113da6113bb61088183600654610fa990919063ffffffff16565b6001600160a01b0384166000908152600a602052604090205490611529565b6001600160a01b039092166000908152600a602052604090209190915550565b6114048282611566565b6113da61141f61088183600654610fa990919063ffffffff16565b6001600160a01b0384166000908152600a602052604090205490611042565b6001600160a01b0382166114945760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161074f565b6114a060008383610d1b565b6002546114ad90826110f8565b6002556001600160a01b0382166000908152602081905260409020546114d390826110f8565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b600080611536838561194b565b9050600083121580156115495750838113155b806110775750600083128015611077575083811361102b57600080fd5b6001600160a01b0382166115c65760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161074f565b6115d282600083610d1b565b61160f8160405180606001604052806022815260200161198b602291396001600160a01b0385166000908152602081905260409020549190610f6f565b6001600160a01b0383166000908152602081905260409020556002546116359082611308565b6002556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200161151d565b600060208083528351808285015260005b818110156116a357858101830151858201604001528201611687565b818111156116b5576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610a6757600080fd5b600080604083850312156116f357600080fd5b82356116fe816116cb565b946020939093013593505050565b60006020828403121561171e57600080fd5b5035919050565b60006020828403121561173757600080fd5b813561102b816116cb565b60008060006060848603121561175757600080fd5b8335611762816116cb565b92506020840135611772816116cb565b929592945050506040919091013590565b8015158114610a6757600080fd5b600080604083850312156117a457600080fd5b82356117af816116cb565b915060208301356117bf81611783565b809150509250929050565b600080604083850312156117dd57600080fd5b82356117e8816116cb565b915060208301356117bf816116cb565b600181811c9082168061180c57607f821691505b60208210810361182c57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008261189a57634e487b7160e01b600052601260045260246000fd5b500490565b6000828210156118b1576118b1611867565b500390565b60008160001904831182151516156118d0576118d0611867565b500290565b600080821280156001600160ff1b03849003851316156118f7576118f7611867565b600160ff1b839003841281161561191057611910611867565b50500190565b6000821982111561192957611929611867565b500190565b60006020828403121561194057600080fd5b815161102b81611783565b60008083128015600160ff1b85018412161561196957611969611867565b6001600160ff1b038401831381161561198457611984611867565b5050039056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a735bdd2e3e2b1c7fe42c66256f8ee64e1ccacd1d7192ede98fb5d71c57af16364736f6c634300080f0033000000000000000000000000e90f9e7f91752943ca9cbaae1b4fac7e2e794a3d

Deployed Bytecode

0x6080604052600436106102b25760003560e01c8063751039fc11610175578063aee50b1e116100dc578063d322157611610095578063e5b394aa1161006f578063e5b394aa146108c6578063ee4fe494146108e6578063f2fde38b14610906578063fe0175351461092657600080fd5b8063d322157614610840578063d3f6a15714610860578063dd62ed3e1461088057600080fd5b8063aee50b1e1461073b578063b62496f51461075b578063bea9849e1461078b578063c0246668146107ab578063cd43e228146107cb578063d2d7ad831461082a57600080fd5b80639d952ce91161012e5780639d952ce914610685578063a32151c4146106a5578063a457c2d7146106c5578063a8b9d240146106e5578063a9059cbb14610705578063aa4bde281461072557600080fd5b8063751039fc146105e7578063781edb3c146105fc578063880bcbc11461061c5780638c0b5e221461063c5780638da5cb5b1461065257806395d89b411461067057600080fd5b8063313ce567116102195780635ebf4db9116101d25780635ebf4db91461051e5780636124e4e71461053e578063667812911461055c5780636f4e25921461057c57806370a082311461059c578063715018a6146105d257600080fd5b8063313ce5671461045957806331e79db014610475578063395093511461049557806342966c68146104b557806349bd5a5e146104d55780634e71d92d1461050957600080fd5b806318160ddd1161026b57806318160ddd146103a55780631cd0ced3146103c45780631e293c10146103e457806323b872dd1461040457806327a14fc2146104245780632bf2e4591461044457600080fd5b8063064a59d0146102be57806306fdde03146102f4578063095ea7b314610316578063098df585146103365780630bd05b69146103585780631694505e1461036d57600080fd5b366102b957005b600080fd5b3480156102ca57600080fd5b506007546102df90600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b34801561030057600080fd5b50610309610961565b6040516102eb91906132ae565b34801561032257600080fd5b506102df610331366004613318565b6109f3565b34801561034257600080fd5b50610356610351366004613344565b610a09565b005b34801561036457600080fd5b50610356610b2f565b34801561037957600080fd5b5060065461038d906001600160a01b031681565b6040516001600160a01b0390911681526020016102eb565b3480156103b157600080fd5b506003545b6040519081526020016102eb565b3480156103d057600080fd5b506102df6103df36600461335d565b610b6e565b3480156103f057600080fd5b506103566103ff366004613344565b610bf7565b34801561041057600080fd5b506102df61041f36600461335d565b610ce7565b34801561043057600080fd5b5061035661043f366004613344565b610d46565b34801561045057600080fd5b506103b6610e39565b34801561046557600080fd5b50604051601281526020016102eb565b34801561048157600080fd5b5061035661049036600461339e565b610eac565b3480156104a157600080fd5b506102df6104b0366004613318565b610f39565b3480156104c157600080fd5b506103566104d0366004613344565b610f6f565b3480156104e157600080fd5b5061038d7f0000000000000000000000001dab8d3daeca2e3af2c4e2d896ec80c9844a85fe81565b34801561051557600080fd5b50610356610f7c565b34801561052a57600080fd5b50610356610539366004613344565b610ff1565b34801561054a57600080fd5b50600e546001600160a01b031661038d565b34801561056857600080fd5b506103566105773660046133d1565b61104c565b34801561058857600080fd5b506103b661059736600461339e565b61116c565b3480156105a857600080fd5b506103b66105b736600461339e565b6001600160a01b031660009081526001602052604090205490565b3480156105de57600080fd5b506103566111e2565b3480156105f357600080fd5b50610356611256565b34801561060857600080fd5b50610356610617366004613433565b61128e565b34801561062857600080fd5b50610356610637366004613433565b611358565b34801561064857600080fd5b506103b660095481565b34801561065e57600080fd5b506000546001600160a01b031661038d565b34801561067c57600080fd5b5061030961141a565b34801561069157600080fd5b506103566106a03660046133d1565b611429565b3480156106b157600080fd5b50600e5461038d906001600160a01b031681565b3480156106d157600080fd5b506102df6106e0366004613318565b6114f0565b3480156106f157600080fd5b506103b661070036600461339e565b61153f565b34801561071157600080fd5b506102df610720366004613318565b611572565b34801561073157600080fd5b506103b660085481565b34801561074757600080fd5b50610356610756366004613344565b61157f565b34801561076757600080fd5b506102df61077636600461339e565b60166020526000908152604090205460ff1681565b34801561079757600080fd5b506103566107a636600461339e565b611649565b3480156107b757600080fd5b506103566107c6366004613433565b611761565b3480156107d757600080fd5b5060115460ff80821691620100008104821691600160201b8204811691600160301b9004165b6040805160ff958616815293851660208501529184169183019190915290911660608201526080016102eb565b34801561083657600080fd5b506103b6600b5481565b34801561084c57600080fd5b5061035661085b366004613433565b611867565b34801561086c57600080fd5b5061035661087b36600461346c565b6118e9565b34801561088c57600080fd5b506103b661089b36600461346c565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b3480156108d257600080fd5b506103566108e136600461339e565b611adf565b3480156108f257600080fd5b5060075461038d906001600160a01b031681565b34801561091257600080fd5b5061035661092136600461339e565b611ba4565b34801561093257600080fd5b5060115460ff610100820481169163010000008104821691600160281b8204811691600160381b9004166107fd565b6060600480546109709061349a565b80601f016020809104026020016040519081016040528092919081815260200182805461099c9061349a565b80156109e95780601f106109be576101008083540402835291602001916109e9565b820191906000526020600020905b8154815290600101906020018083116109cc57829003601f168201915b5050505050905090565b6000610a00338484611cf4565b50600192915050565b6000546001600160a01b03163314610a3c5760405162461bcd60e51b8152600401610a33906134d4565b60405180910390fd5b478110610a9a5760405162461bcd60e51b815260206004820152602660248201527f43616e6e6f742073656e64206d6f7265207468616e20636f6e74726163742062604482015265616c616e636560d01b6064820152608401610a33565b600080546040516001600160a01b039091169083908381818185875af1925050503d8060008114610ae7576040519150601f19603f3d011682016040523d82523d6000602084013e610aec565b606091505b505090508015610b2b576040518281527f362ae087cf4ccfc970d45b9e8ce6520f03b4eda3f9d76a70b655dc22badcca48906020015b60405180910390a15b5050565b6000546001600160a01b03163314610b595760405162461bcd60e51b8152600401610a33906134d4565b6007805460ff60a01b1916600160a01b179055565b600e546000906001600160a01b03163314610be25760405162461bcd60e51b815260206004820152602e60248201527f63616e2061626c6520746f2070726f7669646520617373657473206f7665722060448201526d3234bb34b232b73227b934b3b4b760911b6064820152608401610a33565b610bed848484611e19565b5060019392505050565b6000546001600160a01b03163314610c215760405162461bcd60e51b8152600401610a33906134d4565b670de0b6b3a76400006103e8610c3660035490565b610c4190600161351f565b610c4b9190613554565b610c559190613554565b811015610cb45760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f7420736574206d6178547820416d6f756e74206c6f776572207468604482015266616e20302e312560c81b6064820152608401610a33565b60095460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600955565b6000610cf4848484611f25565b610bed8433610d418560405180606001604052806028815260200161383b602891396001600160a01b038a1660009081526002602090815260408083203384529091529020549190612579565b611cf4565b6000546001600160a01b03163314610d705760405162461bcd60e51b8152600401610a33906134d4565b670de0b6b3a76400006103e8610d8560035490565b610d9090600561351f565b610d9a9190613554565b610da49190613554565b811015610e065760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782077616c6c65742073697a65206c6f776572604482015269207468616e20302e352560b01b6064820152608401610a33565b60085460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600855565b600754604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa158015610e83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea79190613568565b905090565b6000546001600160a01b03163314610ed65760405162461bcd60e51b8152600401610a33906134d4565b60075460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db0906024015b600060405180830381600087803b158015610f1e57600080fd5b505af1158015610f32573d6000803e3d6000fd5b5050505050565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610a00918590610d419086611c8e565b610f7933826125b3565b50565b60075460405163548731b960e01b8152336004820152600060248201526001600160a01b039091169063548731b9906044016020604051808303816000875af1158015610fcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f799190613581565b6000546001600160a01b0316331461101b5760405162461bcd60e51b8152600401610a33906134d4565b60075460405163163c7cef60e01b8152600481018390526001600160a01b039091169063163c7cef90602401610f04565b6000546001600160a01b031633146110765760405162461bcd60e51b8152600401610a33906134d4565b8082611082858761359e565b61108c919061359e565b611096919061359e565b60ff166005116110e85760405162461bcd60e51b815260206004820152601860248201527f73656c6c20666565206d757374206265206661697221212100000000000000006044820152606401610a33565b6110f6600f858585856126be565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d015b6040805191829003822060ff878116845286811660208501528581168484015284166060840152905190917f69848adfba904cea9fd12f8e800c6bae1d85101b0becc5910e509a93d81449e9919081900360800190a250505050565b6007546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b602060405180830381865afa1580156111b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111dc9190613568565b92915050565b6000546001600160a01b0316331461120c5760405162461bcd60e51b8152600401610a33906134d4565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146112805760405162461bcd60e51b8152600401610a33906134d4565b600354600955600354600855565b6000546001600160a01b031633146112b85760405162461bcd60e51b8152600401610a33906134d4565b6001600160a01b03821660009081526015602052604090205481151560ff9091161515036112f85760405162461bcd60e51b8152600401610a33906135c3565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e91015b60405180910390a25050565b6000546001600160a01b031633146113825760405162461bcd60e51b8152600401610a33906134d4565b6001600160a01b03821660009081526014602052604090205481151560ff9091161515036113c25760405162461bcd60e51b8152600401610a33906135c3565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a40910161134c565b6060600580546109709061349a565b6000546001600160a01b031633146114535760405162461bcd60e51b8152600401610a33906134d4565b808261145f858761359e565b611469919061359e565b611473919061359e565b60ff166003116114c55760405162461bcd60e51b815260206004820152601760248201527f62757920666565206d75737420626520666169722121210000000000000000006044820152606401610a33565b6114d3600f85858585612921565b6040516b62617365466565732d42757960a01b8152600c01611110565b6000610a003384610d4185604051806060016040528060258152602001613883602591393360009081526002602090815260408083206001600160a01b038d1684529091529020549190612579565b6007546040516302a2e74960e61b81526001600160a01b038381166004830152600092169063a8b9d2409060240161119b565b6000610a00338484611f25565b6000546001600160a01b031633146115a95760405162461bcd60e51b8152600401610a33906134d4565b600b5481036116165760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f7420757064617465206d696e696d756d546f6b656e734265666f72604482015272655377617020746f2073616d652076616c756560681b6064820152608401610a33565b600b5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600b55565b6000546001600160a01b031633146116735760405162461bcd60e51b8152600401610a33906134d4565b6006546001600160a01b03908116908216036116dd5760405162461bcd60e51b815260206004820152602360248201527f54686520726f7574657220616c7265616479206861732074686174206164647260448201526265737360e81b6064820152608401610a33565b6006546040516001600160a01b03918216918316907f2afbff3ed601a8723765c7072d8ea8445e08f6f1874afd34a2b747a272c3ebad90600090a3600680546001600160a01b0319166001600160a01b03838116918217909255600754604051635f54c24f60e11b815260048101929092529091169063bea9849e90602401610f04565b6000546001600160a01b0316331461178b5760405162461bcd60e51b8152600401610a33906134d4565b6001600160a01b03821660009081526013602052604090205481151560ff90911615150361180f5760405162461bcd60e51b815260206004820152602b60248201527f204163636f756e7420697320616c7265616479207468652076616c7565206f6660448201526a20276578636c756465642760a81b6064820152608401610a33565b6001600160a01b038216600081815260136020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b910161134c565b6000546001600160a01b031633146118915760405162461bcd60e51b8152600401610a33906134d4565b6001600160a01b038216600081815260126020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d350910161134c565b6000546001600160a01b031633146119135760405162461bcd60e51b8152600401610a33906134d4565b600c546001600160a01b038381169116146119f7576001600160a01b03821661197e5760405162461bcd60e51b815260206004820152601f60248201527f546865206c697175696469747957616c6c65742063616e6e6f742062652030006044820152606401610a33565b600c546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691841690600f01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600c80546001600160a01b0319166001600160a01b0384161790555b600d546001600160a01b03828116911614610b2b576001600160a01b038116611a625760405162461bcd60e51b815260206004820152601e60248201527f54686520747265617375727957616c6c65742063616e6e6f74206265203000006044820152606401610a33565b600d546040516d1d1c99585cdd5c9e55d85b1b195d60921b81526001600160a01b0391821691831690600e01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600d80546001600160a01b0383166001600160a01b03199091161790555050565b600754604051634e7b827f60e01b81523360048201526001600160a01b0390911690634e7b827f90602401602060405180830381865afa158015611b27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4b9190613581565b15610f7957600e80546001600160a01b0319166001600160a01b0383169081179091556040519081527f182eedd69e7517ccd0199b65971e44e867c59b8ed40756a76dcb8842b39a98409060200160405180910390a150565b6000546001600160a01b03163314611bce5760405162461bcd60e51b8152600401610a33906134d4565b6001600160a01b038116611c335760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a33565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080611c9b838561360d565b905083811015611ced5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610a33565b9392505050565b6001600160a01b038316611d565760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a33565b6001600160a01b038216611db75760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a33565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611e3f5760405162461bcd60e51b8152600401610a3390613625565b6001600160a01b038216611e655760405162461bcd60e51b8152600401610a339061366a565b611ea281604051806060016040528060268152602001613815602691396001600160a01b0386166000908152600160205260409020549190612579565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611ed19082611c8e565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611e0c9085815260200190565b6001600160a01b038316611f4b5760405162461bcd60e51b8152600401610a3390613625565b6001600160a01b038216611f715760405162461bcd60e51b8152600401610a339061366a565b80600003611f8a57611f8583836000611e19565b505050565b6001600160a01b03808416600081815260166020908152604080832054948716835280832054938352601290915290205460ff928316929182169116158015611fec57506001600160a01b03841660009081526012602052604090205460ff16155b1561221a57600754600160a01b900460ff1661204a5760405162461bcd60e51b815260206004820152601e60248201527f54726164696e672069732063757272656e746c792064697361626c65642e00006044820152606401610a33565b6001600160a01b03841660009081526014602052604090205460ff1615801561208c57506001600160a01b03851660009081526014602052604090205460ff16155b156121635781156120fb576008548311156120fb5760405162461bcd60e51b815260206004820152602960248201527f42757920616d6f756e74206578636565647320746865206d6178547857616c6c60448201526832ba20b6b7bab73a1760b91b6064820152608401610a33565b8015612163576009548311156121635760405162461bcd60e51b815260206004820152602760248201527f53656c6c20616d6f756e74206578636565647320746865206d6178547842757960448201526620b6b7bab73a1760c91b6064820152608401610a33565b6001600160a01b03841660009081526015602052604090205460ff1661221a57600854836121a6866001600160a01b031660009081526001602052604090205490565b6121b0919061360d565b111561221a5760405162461bcd60e51b815260206004820152603360248201527f45787065637465642077616c6c657420616d6f756e742065786365656473207460448201527234329036b0bc2bb0b63632ba20b6b7bab73a1760691b6064820152608401610a33565b6122248282612b6b565b600b543060009081526001602052604090205460075491111590600160a01b900460ff1680156122515750805b80156122605750600a5460ff16155b80156122775750601754600160201b900460ff1615155b801561229b57506001600160a01b03851660009081526016602052604090205460ff165b80156122c057506001600160a01b03861660009081526013602052604090205460ff16155b80156122e557506001600160a01b03851660009081526013602052604090205460ff16155b1561230a57600a805460ff191660011790556122ff612d78565b600a805460ff191690555b600a5460009060ff161580156123295750600754600160a01b900460ff165b6001600160a01b03881660009081526013602052604090205490915060ff168061236b57506001600160a01b03861660009081526013602052604090205460ff165b15612374575060005b80801561238c5750601754600160201b900460ff1615155b15612453576017546000906064906123ae90600160201b900460ff168861351f565b6123b89190613554565b6017549091506000906064906123d79062010000900460ff168961351f565b6123e19190613554565b90506123ed82886136ad565b96506123fa893084611e19565b80156124505761240a30826125b3565b601754604080516201000090920460ff168252602082018390527ffecf12fd01122af77b8b8f1a0f126363142d14fba298ea36d9fe4909f61bb5a1910160405180910390a15b50505b61245e878787611e19565b6007546001600160a01b031663e30443bc8861248f816001600160a01b031660009081526001602052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156124d557600080fd5b505af19250505080156124e6575060015b506007546001600160a01b031663e30443bc87612518816001600160a01b031660009081526001602052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561255e57600080fd5b505af192505050801561256f575060015b5050505050505050565b6000818484111561259d5760405162461bcd60e51b8152600401610a3391906132ae565b5060006125aa84866136ad565b95945050505050565b6001600160a01b0382166126135760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610a33565b612650816040518060600160405280602281526020016137f3602291396001600160a01b0385166000908152600160205260409020549190612579565b6001600160a01b0383166000908152600160205260409020556003546126769082613065565b6003556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600285015460ff858116610100909204161461274f57604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff61010090920482169291881691600080516020613863833981519152916127309160481b906136c4565b60405180910390a460028501805461ff00191661010060ff8716021790555b600285015460ff848116630100000090920416146127e857604051711958dbdcde5cdd195b51995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff630100000090920482169291871691600080516020613863833981519152916127c59160481b906136c4565b60405180910390a460028501805463ff0000001916630100000060ff8616021790555b600285015460ff838116600160281b909204161461287e576040516c189d5c9b91995953db94d95b1b609a1b8152600d0160405190819003812060028701548754919260ff600160281b90920482169291861691600080516020613863833981519152916128599160481b906136c4565b60405180910390a460028501805465ff00000000001916600160281b60ff8516021790555b600285015460ff828116600160381b9092041614610f32576040516f1a1bdb19195c9cd1995953db94d95b1b60821b815260100160405190819003812060028701548754919260ff600160381b90920482169291851691600080516020613863833981519152916128f29160481b906136c4565b60405180910390a460028501805460ff8316600160381b0267ff00000000000000199091161790555050505050565b600285015460ff8581169116146129a257604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028701548754919260ff9182169291881691600080516020613863833981519152916129889160481b906136c4565b60405180910390a460028501805460ff191660ff86161790555b600285015460ff848116620100009092041614612a36576040517065636f73797374656d4665654f6e42757960781b815260110160405190819003812060028701548754919260ff620100009092048216929187169160008051602061386383398151915291612a159160481b906136c4565b60405180910390a460028501805462ff000019166201000060ff8616021790555b600285015460ff838116600160201b9092041614612aca576040516b6275726e4665654f6e42757960a01b8152600c0160405190819003812060028701548754919260ff600160201b9092048216929186169160008051602061386383398151915291612aa69160481b906136c4565b60405180910390a460028501805464ff000000001916600160201b60ff8516021790555b600285015460ff828116600160301b9092041614610f32576040516e686f6c646572734665654f6e42757960881b8152600f0160405190819003812060028701548754919260ff600160301b9092048216929185169160008051602061386383398151915291612b3d9160481b906136c4565b60405180910390a460028501805460ff8316600160301b0266ff000000000000199091161790555050505050565b6017805463ffffffff191690558115612bdb576011546017805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b850483169190910263ff000000191617600160301b909304166301000000029190911790555b8015612c3e576011546017805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b80158015612c4a575081155b15612cac576011546017805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b60175460ff63010000008204811691620100008104821691612cd69161010081048216911661359e565b612ce0919061359e565b612cea919061359e565b6017805464ff00000000198116600160201b60ff94851681029182179384905560408051938616928616929092178352610100840485166020840152620100008404851691830191909152630100000083048416606083015290910490911660808201527f6e2a5b7f71cda0b5cb7df899e2ae963197bad5b9805df7f475458f793841201c9060a001610b22565b306000908152600160205260408120546017549091479160029060ff600160201b8204811691612da991168661351f565b612db39190613554565b612dbd9190613554565b60175490915060009060ff600160201b8204811691612de5916301000000909104168661351f565b612def9190613554565b90506000612dfd828461360d565b612e0790866136ad565b9050612e12816130a7565b6000612e1e85476136ad565b60175490915060009060ff63010000008204811691620100008104821691612e4991600291166136db565b612e53919061359e565b612e5d919061359e565b601754612e749190600160201b900460ff166136fd565b60175460ff91821692506000916002918491612e9191168661351f565b612e9b9190613554565b612ea59190613554565b90506000612eb382856136ad565b600d546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612eee573d6000803e3d6000fd5b508615612f4157612eff8783613201565b60408051868152602081018490529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b60075460405163a9059cbb60e01b81526001600160a01b03909116600482015260248101879052600090309063a9059cbb906044016020604051808303816000875af1158015612f95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fb99190613581565b9050801561305957600754604051636bf5ecd560e01b8152600481018990526001600160a01b0390911690636bf5ecd590602401600060405180830381600087803b15801561300757600080fd5b505af115801561301b573d6000803e3d6000fd5b505050507fa4049db804d87a845be4dd8b54ae7048131238fba985dd37234309ac8668d9698760405161305091815260200190565b60405180910390a15b50505050505050505050565b6000611ced83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612579565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106130dc576130dc613720565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613135573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131599190613736565b8160018151811061316c5761316c613720565b6001600160a01b0392831660209182029290920101526006546131929130911684611cf4565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac947906131cb908590600090869030904290600401613753565b600060405180830381600087803b1580156131e557600080fd5b505af11580156131f9573d6000803e3d6000fd5b505050505050565b6006546132199030906001600160a01b031684611cf4565b600654600c5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015613289573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610f3291906137c4565b600060208083528351808285015260005b818110156132db578581018301518582016040015282016132bf565b818111156132ed576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610f7957600080fd5b6000806040838503121561332b57600080fd5b823561333681613303565b946020939093013593505050565b60006020828403121561335657600080fd5b5035919050565b60008060006060848603121561337257600080fd5b833561337d81613303565b9250602084013561338d81613303565b929592945050506040919091013590565b6000602082840312156133b057600080fd5b8135611ced81613303565b803560ff811681146133cc57600080fd5b919050565b600080600080608085870312156133e757600080fd5b6133f0856133bb565b93506133fe602086016133bb565b925061340c604086016133bb565b915061341a606086016133bb565b905092959194509250565b8015158114610f7957600080fd5b6000806040838503121561344657600080fd5b823561345181613303565b9150602083013561346181613425565b809150509250929050565b6000806040838503121561347f57600080fd5b823561348a81613303565b9150602083013561346181613303565b600181811c908216806134ae57607f821691505b6020821081036134ce57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561353957613539613509565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826135635761356361353e565b500490565b60006020828403121561357a57600080fd5b5051919050565b60006020828403121561359357600080fd5b8151611ced81613425565b600060ff821660ff84168060ff038211156135bb576135bb613509565b019392505050565b6020808252602a908201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604082015269276578636c756465642760b01b606082015260800190565b6000821982111561362057613620613509565b500190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000828210156136bf576136bf613509565b500390565b68ffffffffffffffffff1991909116815260200190565b600060ff8316806136ee576136ee61353e565b8060ff84160491505092915050565b600060ff821660ff84168082101561371757613717613509565b90039392505050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561374857600080fd5b8151611ced81613303565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156137a35784516001600160a01b03168352938301939183019160010161377e565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156137d957600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636500edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122041a742912219f16176e67ce1facf7b36b5e080fb5a7d08912e72610e8ddfa98964736f6c634300080f0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000e90f9e7f91752943ca9cbaae1b4fac7e2e794a3d

-----Decoded View---------------
Arg [0] : _treasuryWallet (address): 0xe90F9e7F91752943CA9cbAae1B4fAC7E2E794a3d

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000e90f9e7f91752943ca9cbaae1b4fac7e2e794a3d


Deployed Bytecode Sourcemap

17655:24761:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17979:28;;;;;;;;;;-1:-1:-1;17979:28:0;;;;-1:-1:-1;;;17979:28:0;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;17979:28:0;;;;;;;;8376:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;9431:210::-;;;;;;;;;;-1:-1:-1;9431:210:0;;;;;:::i;:::-;;:::i;30430:347::-;;;;;;;;;;-1:-1:-1;30430:347:0;;;;;:::i;:::-;;:::i;:::-;;23940:88;;;;;;;;;;;;;:::i;17702:30::-;;;;;;;;;;-1:-1:-1;17702:30:0;;;;-1:-1:-1;;;;;17702:30:0;;;;;;-1:-1:-1;;;;;1628:32:1;;;1610:51;;1598:2;1583:18;17702:30:0;1449:218:1;8697:108:0;;;;;;;;;;-1:-1:-1;8785:12:0;;8697:108;;;1818:25:1;;;1806:2;1791:18;8697:108:0;1672:177:1;30785:270:0;;;;;;;;;;-1:-1:-1;30785:270:0;;;;;:::i;:::-;;:::i;29098:323::-;;;;;;;;;;-1:-1:-1;29098:323:0;;;;;:::i;:::-;;:::i;9649:454::-;;;;;;;;;;-1:-1:-1;9649:454:0;;;;;:::i;:::-;;:::i;29429:324::-;;;;;;;;;;-1:-1:-1;29429:324:0;;;;;:::i;:::-;;:::i;31515:138::-;;;;;;;;;;;;;:::i;8596:93::-;;;;;;;;;;-1:-1:-1;8596:93:0;;8679:2;2457:36:1;;2445:2;2430:18;8596:93:0;2315:184:1;25094:133:0;;;;;;;;;;-1:-1:-1;25094:133:0;;;;;:::i;:::-;;:::i;10111:300::-;;;;;;;;;;-1:-1:-1;10111:300:0;;;;;:::i;:::-;;:::i;31063:81::-;;;;;;;;;;-1:-1:-1;31063:81:0;;;;;:::i;:::-;;:::i;17739:38::-;;;;;;;;;;;;;;;30310:112;;;;;;;;;;;;;:::i;30123:179::-;;;;;;;;;;-1:-1:-1;30123:179:0;;;;;:::i;:::-;;:::i;31152:100::-;;;;;;;;;;-1:-1:-1;31230:14:0;;-1:-1:-1;;;;;31230:14:0;31152:100;;27860:834;;;;;;;;;;-1:-1:-1;27860:834:0;;;;;:::i;:::-;;:::i;31858:171::-;;;;;;;;;;-1:-1:-1;31858:171:0;;;;;:::i;:::-;;:::i;8813:177::-;;;;;;;;;;-1:-1:-1;8813:177:0;;;;;:::i;:::-;-1:-1:-1;;;;;8964:18:0;8932:7;8964:18;;;:9;:18;;;;;;;8813:177;7495:148;;;;;;;;;;;;;:::i;26050:131::-;;;;;;;;;;;;;:::i;25651:391::-;;;;;;;;;;-1:-1:-1;25651:391:0;;;;;:::i;:::-;;:::i;25235:408::-;;;;;;;;;;-1:-1:-1;25235:408:0;;;;;:::i;:::-;;:::i;18143:56::-;;;;;;;;;;;;;;;;7281:79;;;;;;;;;;-1:-1:-1;7319:7:0;7346:6;-1:-1:-1;;;;;7346:6:0;7281:79;;8484:104;;;;;;;;;;;;;:::i;27038:814::-;;;;;;;;;;-1:-1:-1;27038:814:0;;;;;:::i;:::-;;:::i;18390:29::-;;;;;;;;;;-1:-1:-1;18390:29:0;;;;-1:-1:-1;;;;;18390:29:0;;;10419:400;;;;;;;;;;-1:-1:-1;10419:400:0;;;;;:::i;:::-;;:::i;31661:189::-;;;;;;;;;;-1:-1:-1;31661:189:0;;;;;:::i;:::-;;:::i;8998:216::-;;;;;;;;;;-1:-1:-1;8998:216:0;;;;;:::i;:::-;;:::i;18076:60::-;;;;;;;;;;;;;;;;29761:354;;;;;;;;;;-1:-1:-1;29761:354:0;;;;;:::i;:::-;;:::i;19193:57::-;;;;;;;;;;-1:-1:-1;19193:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;28702:388;;;;;;;;;;-1:-1:-1;28702:388:0;;;;;:::i;:::-;;:::i;24731:355::-;;;;;;;;;;-1:-1:-1;24731:355:0;;;;;:::i;:::-;;:::i;32037:354::-;;;;;;;;;;-1:-1:-1;32242:23:0;;;;;;;32280;;;;;;-1:-1:-1;;;32318:18:0;;;;;-1:-1:-1;;;32351:21:0;;;32037:354;;;;4278:4:1;4266:17;;;4248:36;;4320:17;;;4315:2;4300:18;;4293:45;4374:17;;;4354:18;;;4347:45;;;;4428:17;;;4423:2;4408:18;;4401:45;4235:3;4220:19;32037:354:0;4033:419:1;18237:69:0;;;;;;;;;;;;;;;;24483:240;;;;;;;;;;-1:-1:-1;24483:240:0;;;;;:::i;:::-;;:::i;26189:823::-;;;;;;;;;;-1:-1:-1;26189:823:0;;;;;:::i;:::-;;:::i;9222:201::-;;;;;;;;;;-1:-1:-1;9222:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;9388:18:0;;;9356:7;9388:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9222:201;31260:247;;;;;;;;;;-1:-1:-1;31260:247:0;;;;;:::i;:::-;;:::i;17934:36::-;;;;;;;;;;-1:-1:-1;17934:36:0;;;;-1:-1:-1;;;;;17934:36:0;;;7651:281;;;;;;;;;;-1:-1:-1;7651:281:0;;;;;:::i;:::-;;:::i;32399:359::-;;;;;;;;;;-1:-1:-1;32605:24:0;;;;;;;;;32644;;;;;;-1:-1:-1;;;32683:19:0;;;;;-1:-1:-1;;;32717:22:0;;;32399:359;;8376:100;8430:13;8463:5;8456:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8376:100;:::o;9431:210::-;9550:4;9572:39;6669:10;9595:7;9604:6;9572:8;:39::i;:::-;-1:-1:-1;9629:4:0;9431:210;;;;:::o;30430:347::-;7408:6;;-1:-1:-1;;;;;7408:6:0;6669:10;7408:22;7400:67;;;;-1:-1:-1;;;7400:67:0;;;;;;;:::i;:::-;;;;;;;;;30533:21:::1;30524:6;:30;30502:118;;;::::0;-1:-1:-1;;;30502:118:0;;6033:2:1;30502:118:0::1;::::0;::::1;6015:21:1::0;6072:2;6052:18;;;6045:30;6111:34;6091:18;;;6084:62;-1:-1:-1;;;6162:18:1;;;6155:36;6208:19;;30502:118:0::1;5831:402:1::0;30502:118:0::1;30632:12;7346:6:::0;;30650:40:::1;::::0;-1:-1:-1;;;;;7346:6:0;;;;30679;;30632:12;30650:40;30632:12;30650:40;30679:6;7346;30650:40:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30631:59;;;30705:7;30701:69;;;30734:24;::::0;1818:25:1;;;30734:24:0::1;::::0;1806:2:1;1791:18;30734:24:0::1;;;;;;;;30701:69;30491:286;30430:347:::0;:::o;23940:88::-;7408:6;;-1:-1:-1;;;;;7408:6:0;6669:10;7408:22;7400:67;;;;-1:-1:-1;;;7400:67:0;;;;;;;:::i;:::-;23997:16:::1;:23:::0;;-1:-1:-1;;;;23997:23:0::1;-1:-1:-1::0;;;23997:23:0::1;::::0;;23940:88::o;30785:270::-;21568:14;;30950:4;;-1:-1:-1;;;;;21568:14:0;21554:10;:28;21532:124;;;;-1:-1:-1;;;21532:124:0;;6650:2:1;21532:124:0;;;6632:21:1;6689:2;6669:18;;;6662:30;6728:34;6708:18;;;6701:62;-1:-1:-1;;;6779:18:1;;;6772:44;6833:19;;21532:124:0;6448:410:1;21532:124:0;30967:58:::1;30993:7;31002:15;31019:5;30967:15;:58::i;:::-;-1:-1:-1::0;31043:4:0::1;30785:270:::0;;;;;:::o;29098:323::-;7408:6;;-1:-1:-1;;;;;7408:6:0;6669:10;7408:22;7400:67;;;;-1:-1:-1;;;7400:67:0;;;;;;;:::i;:::-;29244:4:::1;29236;29215:13;8785:12:::0;;;8697:108;29215:13:::1;:17;::::0;29231:1:::1;29215:17;:::i;:::-;29214:26;;;;:::i;:::-;29213:35;;;;:::i;:::-;29201:8;:47;;29179:136;;;::::0;-1:-1:-1;;;29179:136:0;;7627:2:1;29179:136:0::1;::::0;::::1;7609:21:1::0;7666:2;7646:18;;;7639:30;7705:34;7685:18;;;7678:62;-1:-1:-1;;;7756:18:1;;;7749:37;7803:19;;29179:136:0::1;7425:403:1::0;29179:136:0::1;29368:11;::::0;29331:49:::1;::::0;29358:8;;29331:49:::1;::::0;;;::::1;29391:11;:22:::0;29098:323::o;9649:454::-;9789:4;9806:36;9816:6;9824:9;9835:6;9806:9;:36::i;:::-;9853:220;9876:6;6669:10;9924:138;9980:6;9924:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9924:19:0;;;;;;:11;:19;;;;;;;;6669:10;9924:33;;;;;;;;;;:37;:138::i;:::-;9853:8;:220::i;29429:324::-;7408:6;;-1:-1:-1;;;;;7408:6:0;6669:10;7408:22;7400:67;;;;-1:-1:-1;;;7400:67:0;;;;;;;:::i;:::-;29570:4:::1;29562;29541:13;8785:12:::0;;;8697:108;29541:13:::1;:17;::::0;29557:1:::1;29541:17;:::i;:::-;29540:26;;;;:::i;:::-;29539:35;;;;:::i;:::-;29527:8;:47;;29505:139;;;::::0;-1:-1:-1;;;29505:139:0;;8035:2:1;29505:139:0::1;::::0;::::1;8017:21:1::0;8074:2;8054:18;;;8047:30;8113:34;8093:18;;;8086:62;-1:-1:-1;;;8164:18:1;;;8157:40;8214:19;;29505:139:0::1;7833:406:1::0;29505:139:0::1;29692:15;::::0;29660:48:::1;::::0;29682:8;;29660:48:::1;::::0;;;::::1;29719:15;:26:::0;29429:324::o;31515:138::-;31599:18;;:46;;;-1:-1:-1;;;31599:46:0;;;;31572:7;;-1:-1:-1;;;;;31599:18:0;;:44;;:46;;;;;;;;;;;;;;:18;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31592:53;;31515:138;:::o;25094:133::-;7408:6;;-1:-1:-1;;;;;7408:6:0;6669:10;7408:22;7400:67;;;;-1:-1:-1;;;7400:67:0;;;;;;;:::i;:::-;25171:18:::1;::::0;:48:::1;::::0;-1:-1:-1;;;25171:48:0;;-1:-1:-1;;;;;1628:32:1;;;25171:48:0::1;::::0;::::1;1610:51:1::0;25171:18:0;;::::1;::::0;:39:::1;::::0;1583:18:1;;25171:48:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;25094:133:::0;:::o;10111:300::-;6669:10;10226:4;10320:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;10320:34:0;;;;;;;;;;10226:4;;10248:133;;10298:7;;10320:50;;10359:10;10320:38;:50::i;31063:81::-;31112:24;31118:10;31130:5;31112;:24::i;:::-;31063:81;:::o;30310:112::-;30347:18;;:67;;-1:-1:-1;;;30347:67:0;;30395:10;30347:67;;;8617:51:1;30347:18:0;8684::1;;;8677:50;-1:-1:-1;;;;;30347:18:0;;;;:39;;8590:18:1;;30347:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30123:179::-;7408:6;;-1:-1:-1;;;;;7408:6:0;6669:10;7408:22;7400:67;;;;-1:-1:-1;;;7400:67:0;;;;;;;:::i;:::-;30238:18:::1;::::0;:56:::1;::::0;-1:-1:-1;;;30238:56:0;;::::1;::::0;::::1;1818:25:1::0;;;-1:-1:-1;;;;;30238:18:0;;::::1;::::0;:46:::1;::::0;1791:18:1;;30238:56:0::1;1672:177:1::0;27860:834:0;7408:6;;-1:-1:-1;;;;;7408:6:0;6669:10;7408:22;7400:67;;;;-1:-1:-1;;;7400:67:0;;;;;;;:::i;:::-;28228:17;28190:14;28104:62:::1;28147:19:::0;28104;:62:::1;:::i;:::-;:100;;;;:::i;:::-;:141;;;;:::i;:::-;28083:162;;:1;:162;28061:236;;;::::0;-1:-1:-1;;;28061:236:0;;9399:2:1;28061:236:0::1;::::0;::::1;9381:21:1::0;9438:2;9418:18;;;9411:30;9477:26;9457:18;;;9450:54;9521:18;;28061:236:0::1;9197:348:1::0;28061:236:0::1;28308:183;28346:5;28366:19;28400;28434:14;28463:17;28308:23;:183::i;:::-;28507:179;::::0;-1:-1:-1;;;9752:28:1;;9805:2;9796:12;28507:179:0::1;;::::0;;;;;::::1;::::0;;4278:4:1;4266:17;;;4248:36;;4320:17;;;4315:2;4300:18;;4293:45;4374:17;;;4354:18;;;4347:45;4428:17;;4423:2;4408:18;;4401:45;28507:179:0;;;;::::1;::::0;;;;;4235:3:1;28507:179:0;;::::1;27860:834:::0;;;;:::o;31858:171::-;31984:18;;:37;;-1:-1:-1;;;31984:37:0;;-1:-1:-1;;;;;1628:32:1;;;31984:37:0;;;1610:51:1;31952:7:0;;31984:18;;:28;;1583:18:1;;31984:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31977:44;31858:171;-1:-1:-1;;31858:171:0:o;7495:148::-;7408:6;;-1:-1:-1;;;;;7408:6:0;6669:10;7408:22;7400:67;;;;-1:-1:-1;;;7400:67:0;;;;;;;:::i;:::-;7602:1:::1;7586:6:::0;;7565:40:::1;::::0;-1:-1:-1;;;;;7586:6:0;;::::1;::::0;7565:40:::1;::::0;7602:1;;7565:40:::1;7633:1;7616:19:::0;;-1:-1:-1;;;;;;7616:19:0::1;::::0;;7495:148::o;26050:131::-;7408:6;;-1:-1:-1;;;;;7408:6:0;6669:10;7408:22;7400:67;;;;-1:-1:-1;;;7400:67:0;;;;;;;:::i;:::-;8785:12;;26104:11:::1;:27:::0;8785:12;;26142:15:::1;:31:::0;26050:131::o;25651:391::-;7408:6;;-1:-1:-1;;;;;7408:6:0;6669:10;7408:22;7400:67;;;;-1:-1:-1;;;7400:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25793:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:50;::::1;;:38;::::0;;::::1;:50;;::::0;25771:142:::1;;;;-1:-1:-1::0;;;25771:142:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25924:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:49;;-1:-1:-1;;25924:49:0::1;::::0;::::1;;::::0;;::::1;::::0;;;25989:45;;154:41:1;;;25989:45:0::1;::::0;127:18:1;25989:45:0::1;;;;;;;;25651:391:::0;;:::o;25235:408::-;7408:6;;-1:-1:-1;;;;;7408:6:0;6669:10;7408:22;7400:67;;;;-1:-1:-1;;;7400:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25382:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;:55;::::1;;:43;::::0;;::::1;:55;;::::0;25360:147:::1;;;;-1:-1:-1::0;;;25360:147:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25518:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;;;;:54;;-1:-1:-1;;25518:54:0::1;::::0;::::1;;::::0;;::::1;::::0;;;25588:47;;154:41:1;;;25588:47:0::1;::::0;127:18:1;25588:47:0::1;14:187:1::0;8484:104:0;8540:13;8573:7;8566:14;;;;;:::i;27038:814::-;7408:6;;-1:-1:-1;;;;;7408:6:0;6669:10;7408:22;7400:67;;;;-1:-1:-1;;;7400:67:0;;;;;;;:::i;:::-;27398:16;27361:13;27277:60:::1;27319:18:::0;27277;:60:::1;:::i;:::-;:97;;;;:::i;:::-;:137;;;;:::i;:::-;27256:158;;:1;:158;27234:231;;;::::0;-1:-1:-1;;;27234:231:0;;10432:2:1;27234:231:0::1;::::0;::::1;10414:21:1::0;10471:2;10451:18;;;10444:30;10510:25;10490:18;;;10483:53;10553:18;;27234:231:0::1;10230:347:1::0;27234:231:0::1;27476:178;27513:5;27533:18;27566;27599:13;27627:16;27476:22;:178::i;:::-;27670:174;::::0;-1:-1:-1;;;10784:27:1;;10836:2;10827:12;27670:174:0::1;10582:263:1::0;10419:400:0;10539:4;10561:228;6669:10;10611:7;10633:145;10690:15;10633:145;;;;;;;;;;;;;;;;;6669:10;10633:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;10633:34:0;;;;;;;;;;;;:38;:145::i;31661:189::-;31792:18;;:50;;-1:-1:-1;;;31792:50:0;;-1:-1:-1;;;;;1628:32:1;;;31792:50:0;;;1610:51:1;31760:7:0;;31792:18;;:41;;1583:18:1;;31792:50:0;1449:218:1;8998:216:0;9120:4;9142:42;6669:10;9166:9;9177:6;9142:9;:42::i;29761:354::-;7408:6;;-1:-1:-1;;;;;7408:6:0;6669:10;7408:22;7400:67;;;;-1:-1:-1;;;7400:67:0;;;;;;;:::i;:::-;29879:23:::1;;29867:8;:35:::0;29845:136:::1;;;::::0;-1:-1:-1;;;29845:136:0;;11052:2:1;29845:136:0::1;::::0;::::1;11034:21:1::0;11091:2;11071:18;;;11064:30;11130:34;11110:18;;;11103:62;-1:-1:-1;;;11181:18:1;;;11174:49;11240:19;;29845:136:0::1;10850:415:1::0;29845:136:0::1;30038:23;::::0;29997:65:::1;::::0;30028:8;;29997:65:::1;::::0;;;::::1;30073:23;:34:::0;29761:354::o;28702:388::-;7408:6;;-1:-1:-1;;;;;7408:6:0;6669:10;7408:22;7400:67;;;;-1:-1:-1;;;7400:67:0;;;;;;;:::i;:::-;28822:15:::1;::::0;-1:-1:-1;;;;;28822:15:0;;::::1;28800:38:::0;;::::1;::::0;28778:123:::1;;;::::0;-1:-1:-1;;;28778:123:0;;11472:2:1;28778:123:0::1;::::0;::::1;11454:21:1::0;11511:2;11491:18;;;11484:30;11550:34;11530:18;;;11523:62;-1:-1:-1;;;11601:18:1;;;11594:33;11644:19;;28778:123:0::1;11270:399:1::0;28778:123:0::1;28959:15;::::0;28917:59:::1;::::0;-1:-1:-1;;;;;28959:15:0;;::::1;::::0;28917:59;::::1;::::0;::::1;::::0;28959:15:::1;::::0;28917:59:::1;28987:15;:37:::0;;-1:-1:-1;;;;;;28987:37:0::1;-1:-1:-1::0;;;;;28987:37:0;;::::1;::::0;;::::1;::::0;;;29035:18:::1;::::0;:47:::1;::::0;-1:-1:-1;;;29035:47:0;;::::1;::::0;::::1;1610:51:1::0;;;;29035:18:0;;::::1;::::0;:35:::1;::::0;1583:18:1;;29035:47:0::1;1449:218:1::0;24731:355:0;7408:6;;-1:-1:-1;;;;;7408:6:0;6669:10;7408:22;7400:67;;;;-1:-1:-1;;;7400:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24863:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;:39;::::1;;:27;::::0;;::::1;:39;;::::0;24841:132:::1;;;::::0;-1:-1:-1;;;24841:132:0;;11876:2:1;24841:132:0::1;::::0;::::1;11858:21:1::0;11915:2;11895:18;;;11888:30;11954:34;11934:18;;;11927:62;-1:-1:-1;;;12005:18:1;;;11998:41;12056:19;;24841:132:0::1;11674:407:1::0;24841:132:0::1;-1:-1:-1::0;;;;;24984:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:38;;-1:-1:-1;;24984:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;25038:40;;154:41:1;;;25038:40:0::1;::::0;127:18:1;25038:40:0::1;14:187:1::0;24483:240:0;7408:6;;-1:-1:-1;;;;;7408:6:0;6669:10;7408:22;7400:67;;;;-1:-1:-1;;;7400:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24601:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:48;;-1:-1:-1;;24601:48:0::1;::::0;::::1;;::::0;;::::1;::::0;;;24665:50;;154:41:1;;;24665:50:0::1;::::0;127:18:1;24665:50:0::1;14:187:1::0;26189:823:0;7408:6;;-1:-1:-1;;;;;7408:6:0;6669:10;7408:22;7400:67;;;;-1:-1:-1;;;7400:67:0;;;;;;;:::i;:::-;26321:15:::1;::::0;-1:-1:-1;;;;;26321:37:0;;::::1;:15:::0;::::1;:37;26317:400;;-1:-1:-1::0;;;;;26401:32:0;::::1;26375:125;;;::::0;-1:-1:-1;;;26375:125:0;;12288:2:1;26375:125:0::1;::::0;::::1;12270:21:1::0;12327:2;12307:18;;;12300:30;12366:33;12346:18;;;12339:61;12417:18;;26375:125:0::1;12086:355:1::0;26375:125:0::1;26624:15;::::0;26520:134:::1;::::0;-1:-1:-1;;;12648:30:1;;-1:-1:-1;;;;;26624:15:0;;::::1;::::0;26520:134;::::1;::::0;12703:2:1;12694:12;26520:134:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;26669:15;:36:::0;;-1:-1:-1;;;;;;26669:36:0::1;-1:-1:-1::0;;;;;26669:36:0;::::1;;::::0;;26317:400:::1;26733:14;::::0;-1:-1:-1;;;;;26733:35:0;;::::1;:14:::0;::::1;:35;26729:276;;-1:-1:-1::0;;;;;26793:31:0;::::1;26785:74;;;::::0;-1:-1:-1;;;26785:74:0;;12919:2:1;26785:74:0::1;::::0;::::1;12901:21:1::0;12958:2;12938:18;;;12931:30;12997:32;12977:18;;;12970:60;13047:18;;26785:74:0::1;12717:354:1::0;26785:74:0::1;26929:14;::::0;26879:65:::1;::::0;-1:-1:-1;;;13278:29:1;;-1:-1:-1;;;;;26929:14:0;;::::1;::::0;26879:65;::::1;::::0;13332:2:1;13323:12;26879:65:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;26959:14;:34:::0;;-1:-1:-1;;;;;26959:34:0;::::1;-1:-1:-1::0;;;;;;26959:34:0;;::::1;;::::0;;26189:823;;:::o;31260:247::-;31335:18;;:52;;-1:-1:-1;;;31335:52:0;;31376:10;31335:52;;;1610:51:1;-1:-1:-1;;;;;31335:18:0;;;;:40;;1583:18:1;;31335:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31332:168;;;31403:14;:32;;-1:-1:-1;;;;;;31403:32:0;-1:-1:-1;;;;;31403:32:0;;;;;;;;31451:39;;1610:51:1;;;31451:39:0;;1598:2:1;1583:18;31451:39:0;;;;;;;31260:247;:::o;7651:281::-;7408:6;;-1:-1:-1;;;;;7408:6:0;6669:10;7408:22;7400:67;;;;-1:-1:-1;;;7400:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7754:22:0;::::1;7732:110;;;::::0;-1:-1:-1;;;7732:110:0;;13548:2:1;7732:110:0::1;::::0;::::1;13530:21:1::0;13587:2;13567:18;;;13560:30;13626:34;13606:18;;;13599:62;-1:-1:-1;;;13677:18:1;;;13670:36;13723:19;;7732:110:0::1;13346:402:1::0;7732:110:0::1;7879:6;::::0;;7858:38:::1;::::0;-1:-1:-1;;;;;7858:38:0;;::::1;::::0;7879:6;::::1;::::0;7858:38:::1;::::0;::::1;7907:6;:17:::0;;-1:-1:-1;;;;;;7907:17:0::1;-1:-1:-1::0;;;;;7907:17:0;;;::::1;::::0;;;::::1;::::0;;7651:281::o;3155:181::-;3213:7;;3245:5;3249:1;3245;:5;:::i;:::-;3233:17;;3274:1;3269;:6;;3261:46;;;;-1:-1:-1;;;3261:46:0;;14088:2:1;3261:46:0;;;14070:21:1;14127:2;14107:18;;;14100:30;14166:29;14146:18;;;14139:57;14213:18;;3261:46:0;13886:351:1;3261:46:0;3327:1;3155:181;-1:-1:-1;;;3155:181:0:o;12282:378::-;-1:-1:-1;;;;;12418:19:0;;12410:68;;;;-1:-1:-1;;;12410:68:0;;14444:2:1;12410:68:0;;;14426:21:1;14483:2;14463:18;;;14456:30;14522:34;14502:18;;;14495:62;-1:-1:-1;;;14573:18:1;;;14566:34;14617:19;;12410:68:0;14242:400:1;12410:68:0;-1:-1:-1;;;;;12497:21:0;;12489:68;;;;-1:-1:-1;;;12489:68:0;;14849:2:1;12489:68:0;;;14831:21:1;14888:2;14868:18;;;14861:30;14927:34;14907:18;;;14900:62;-1:-1:-1;;;14978:18:1;;;14971:32;15020:19;;12489:68:0;14647:398:1;12489:68:0;-1:-1:-1;;;;;12568:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;12620:32;;1818:25:1;;;12620:32:0;;1791:18:1;12620:32:0;;;;;;;;12282:378;;;:::o;10827:606::-;-1:-1:-1;;;;;10967:20:0;;10959:70;;;;-1:-1:-1;;;10959:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11048:23:0;;11040:71;;;;-1:-1:-1;;;11040:71:0;;;;;;;:::i;:::-;11200:108;11236:6;11200:108;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11200:17:0;;;;;;:9;:17;;;;;;;:108;:21;:108::i;:::-;-1:-1:-1;;;;;11180:17:0;;;;;;;:9;:17;;;;;;:128;;;;11342:20;;;;;;;:32;;11367:6;11342:24;:32::i;:::-;-1:-1:-1;;;;;11319:20:0;;;;;;;:9;:20;;;;;;;:55;;;;11390:35;;;;;;;;;;11418:6;1818:25:1;;1806:2;1791:18;;1672:177;32766:2928:0;-1:-1:-1;;;;;32898:18:0;;32890:68;;;;-1:-1:-1;;;32890:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32977:16:0;;32969:64;;;;-1:-1:-1;;;32969:64:0;;;;;;;:::i;:::-;33050:6;33060:1;33050:11;33046:93;;33078:28;33094:4;33100:2;33104:1;33078:15;:28::i;:::-;32766:2928;;;:::o;33046:93::-;-1:-1:-1;;;;;33170:31:0;;;33151:16;33170:31;;;:25;:31;;;;;;;;;33230:29;;;;;;;;;33291:35;;;:29;:35;;;;;;33170:31;;;;;33230:29;;;;33291:35;33290:36;:87;;;;-1:-1:-1;;;;;;33344:33:0;;;;;;:29;:33;;;;;;;;33343:34;33290:87;33272:1084;;;33412:16;;-1:-1:-1;;;33412:16:0;;;;33404:59;;;;-1:-1:-1;;;33404:59:0;;16062:2:1;33404:59:0;;;16044:21:1;16101:2;16081:18;;;16074:30;16140:32;16120:18;;;16113:60;16190:18;;33404:59:0;15860:354:1;33404:59:0;-1:-1:-1;;;;;33501:38:0;;;;;;:34;:38;;;;;;;;33500:39;:101;;;;-1:-1:-1;;;;;;33561:40:0;;;;;;:34;:40;;;;;;;;33560:41;33500:101;33478:610;;;33640:11;33636:212;;;33720:15;;33710:6;:25;;33676:152;;;;-1:-1:-1;;;33676:152:0;;16421:2:1;33676:152:0;;;16403:21:1;16460:2;16440:18;;;16433:30;16499:34;16479:18;;;16472:62;-1:-1:-1;;;16550:18:1;;;16543:39;16599:19;;33676:152:0;16219:405:1;33676:152:0;33872:10;33868:205;;;33951:11;;33941:6;:21;;33907:146;;;;-1:-1:-1;;;33907:146:0;;16831:2:1;33907:146:0;;;16813:21:1;16870:2;16850:18;;;16843:30;16909:34;16889:18;;;16882:62;-1:-1:-1;;;16960:18:1;;;16953:37;17007:19;;33907:146:0;16629:403:1;33907:146:0;-1:-1:-1;;;;;34107:33:0;;;;;;:29;:33;;;;;;;;34102:243;;34219:15;;34208:6;34192:13;34202:2;-1:-1:-1;;;;;8964:18:0;8932:7;8964:18;;;:9;:18;;;;;;;8813:177;34192:13;:22;;;;:::i;:::-;34191:43;;34161:168;;;;-1:-1:-1;;;34161:168:0;;17239:2:1;34161:168:0;;;17221:21:1;17278:2;17258:18;;;17251:30;17317:34;17297:18;;;17290:62;-1:-1:-1;;;17368:18:1;;;17361:49;17427:19;;34161:168:0;17037:415:1;34161:168:0;34368:37;34381:11;34394:10;34368:12;:37::i;:::-;34459:23;;34449:4;34416:12;8964:18;;;:9;:18;;;;;;34513:16;;-1:-1:-1;;34431:51:0;;-1:-1:-1;;;34513:16:0;;;;:40;;;;;34546:7;34513:40;:67;;;;-1:-1:-1;34571:9:0;;;;34570:10;34513:67;:97;;;;-1:-1:-1;34597:9:0;;-1:-1:-1;;;34597:9:0;;;;:13;;34513:97;:143;;;;-1:-1:-1;;;;;;34627:29:0;;;;;;:25;:29;;;;;;;;34513:143;:185;;;;-1:-1:-1;;;;;;34674:24:0;;;;;;:18;:24;;;;;;;;34673:25;34513:185;:225;;;;-1:-1:-1;;;;;;34716:22:0;;;;;;:18;:22;;;;;;;;34715:23;34513:225;34495:362;;;34765:9;:16;;-1:-1:-1;;34765:16:0;34777:4;34765:16;;;34796:17;:15;:17::i;:::-;34828:9;:17;;-1:-1:-1;;34828:17:0;;;34495:362;34885:9;;34869:12;;34885:9;;34884:10;:30;;;;-1:-1:-1;34898:16:0;;-1:-1:-1;;;34898:16:0;;;;34884:30;-1:-1:-1;;;;;34931:24:0;;;;;;:18;:24;;;;;;34869:45;;-1:-1:-1;34931:24:0;;;:50;;-1:-1:-1;;;;;;34959:22:0;;;;;;:18;:22;;;;;;;;34931:50;34927:98;;;-1:-1:-1;35008:5:0;34927:98;35039:7;:24;;;;-1:-1:-1;35050:9:0;;-1:-1:-1;;;35050:9:0;;;;:13;;35039:24;35035:414;;;35104:9;;35080:11;;35117:3;;35095:18;;-1:-1:-1;;;35104:9:0;;;;35095:6;:18;:::i;:::-;35094:26;;;;:::i;:::-;35166:8;;35080:40;;-1:-1:-1;35135:18:0;;35178:3;;35157:17;;35166:8;;;;;35157:6;:17;:::i;:::-;35156:25;;;;:::i;:::-;35135:46;-1:-1:-1;35205:12:0;35214:3;35205:6;:12;:::i;:::-;35196:21;;35232:41;35248:4;35262;35269:3;35232:15;:41::i;:::-;35294:14;;35290:148;;35329:38;35349:4;35356:10;35329:11;:38::i;:::-;35401:8;;35391:31;;;35401:8;;;;;;17757:36:1;;17824:2;17809:18;;17802:34;;;35391:31:0;;17730:18:1;35391:31:0;;;;;;;35290:148;35065:384;;35035:414;35459:33;35475:4;35481:2;35485:6;35459:15;:33::i;:::-;35522:18;;-1:-1:-1;;;;;35522:18:0;:29;35560:4;35567:15;35560:4;-1:-1:-1;;;;;8964:18:0;8932:7;8964:18;;;:9;:18;;;;;;;8813:177;35567:15;35522:61;;-1:-1:-1;;;;;;35522:61:0;;;;;;;-1:-1:-1;;;;;18055:32:1;;;35522:61:0;;;18037:51:1;18104:18;;;18097:34;18010:18;;35522:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35505:99;35618:18;;-1:-1:-1;;;;;35618:18:0;:29;35656:2;35661:13;35656:2;-1:-1:-1;;;;;8964:18:0;8932:7;8964:18;;;:9;:18;;;;;;;8813:177;35661:13;35618:57;;-1:-1:-1;;;;;;35618:57:0;;;;;;;-1:-1:-1;;;;;18055:32:1;;;35618:57:0;;;18037:51:1;18104:18;;;18097:34;18010:18;;35618:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35614:73;32879:2815;;;;32766:2928;;;:::o;3488:226::-;3608:7;3644:12;3636:6;;;;3628:29;;;;-1:-1:-1;;;3628:29:0;;;;;;;;:::i;:::-;-1:-1:-1;3668:9:0;3680:5;3684:1;3680;:5;:::i;:::-;3668:17;3488:226;-1:-1:-1;;;;;3488:226:0:o;11823:451::-;-1:-1:-1;;;;;11907:21:0;;11899:67;;;;-1:-1:-1;;;11899:67:0;;18344:2:1;11899:67:0;;;18326:21:1;18383:2;18363:18;;;18356:30;18422:34;18402:18;;;18395:62;-1:-1:-1;;;18473:18:1;;;18466:31;18514:19;;11899:67:0;18142:397:1;11899:67:0;12058:105;12095:6;12058:105;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12058:18:0;;;;;;:9;:18;;;;;;;:105;:22;:105::i;:::-;-1:-1:-1;;;;;12037:18:0;;;;;;:9;:18;;;;;:126;12189:12;;:24;;12206:6;12189:16;:24::i;:::-;12174:12;:39;12229:37;;1818:25:1;;;12255:1:0;;-1:-1:-1;;;;;12229:37:0;;;;;1806:2:1;1791:18;12229:37:0;;;;;;;11823:451;;:::o;36880:1538::-;37118:22;;;;:45;;;;:22;;;;;:45;37114:329;;37185:187;;-1:-1:-1;;;18746:33:1;;18804:2;18795:12;37185:187:0;;;;;;;;37263:22;;;;37343:14;;37185:187;;37263:22;;;;;;;;37185:187;;;;-1:-1:-1;;;;;;;;;;;37185:187:0;;;37343:14;;;37185:187;:::i;:::-;;;;;;;;37387:22;;;:44;;-1:-1:-1;;37387:44:0;;;;;;;;;37114:329;37457:22;;;;:45;;;;:22;;;;;:45;37453:329;;37524:187;;-1:-1:-1;;;19234:33:1;;19292:2;19283:12;37524:187:0;;;;;;;;37602:22;;;;37682:14;;37524:187;;37602:22;;;;;;;;37524:187;;;;-1:-1:-1;;;;;;;;;;;37524:187:0;;;37682:14;;;37524:187;:::i;:::-;;;;;;;;37726:22;;;:44;;-1:-1:-1;;37726:44:0;;;;;;;;;37453:329;37796:17;;;;:35;;;;-1:-1:-1;;;37796:17:0;;;;:35;37792:294;;37853:172;;-1:-1:-1;;;19508:28:1;;19561:2;19552:12;37853:172:0;;;;;;;;37926:17;;;;37996:14;;37853:172;;37926:17;-1:-1:-1;;;37926:17:0;;;;;;37853:172;;;;-1:-1:-1;;;;;;;;;;;37853:172:0;;;37996:14;;;37853:172;:::i;:::-;;;;;;;;38040:17;;;:34;;-1:-1:-1;;38040:34:0;-1:-1:-1;;;38040:34:0;;;;;;;37792:294;38100:20;;;;:41;;;;-1:-1:-1;;;38100:20:0;;;;:41;38096:315;;38163:181;;-1:-1:-1;;;19777:31:1;;19833:2;19824:12;38163:181:0;;;;;;;;38239:20;;;;38315:14;;38163:181;;38239:20;-1:-1:-1;;;38239:20:0;;;;;;38163:181;;;;-1:-1:-1;;;;;;;;;;;38163:181:0;;;38315:14;;;38163:181;:::i;:::-;;;;;;;;38359:20;;;:40;;;;;-1:-1:-1;;;38359:40:0;-1:-1:-1;;38359:40:0;;;;;;36880:1538;;;;;:::o;38426:1505::-;38659:21;;;;:43;;;;:21;;:43;38655:322;;38724:184;;-1:-1:-1;;;20049:32:1;;20106:2;20097:12;38724:184:0;;;;;;;;38801:21;;;;38879:14;;38724:184;;38801:21;;;;;38724:184;;;;-1:-1:-1;;;;;;;;;;;38724:184:0;;;38879:14;;;38724:184;:::i;:::-;;;;;;;;38923:21;;;:42;;-1:-1:-1;;38923:42:0;;;;;;;38655:322;38991:21;;;;:43;;;;:21;;;;;:43;38987:322;;39056:184;;-1:-1:-1;;;20322:32:1;;20379:2;20370:12;39056:184:0;;;;;;;;39133:21;;;;39211:14;;39056:184;;39133:21;;;;;;;;39056:184;;;;-1:-1:-1;;;;;;;;;;;39056:184:0;;;39211:14;;;39056:184;:::i;:::-;;;;;;;;39255:21;;;:42;;-1:-1:-1;;39255:42:0;;;;;;;;;38987:322;39323:16;;;;:33;;;;-1:-1:-1;;;39323:16:0;;;;:33;39319:287;;39378:169;;-1:-1:-1;;;20595:27:1;;20647:2;20638:12;39378:169:0;;;;;;;;39450:16;;;;39518:14;;39378:169;;39450:16;-1:-1:-1;;;39450:16:0;;;;;;39378:169;;;;-1:-1:-1;;;;;;;;;;;39378:169:0;;;39518:14;;;39378:169;:::i;:::-;;;;;;;;39562:16;;;:32;;-1:-1:-1;;39562:32:0;-1:-1:-1;;;39562:32:0;;;;;;;39319:287;39620:19;;;;:39;;;;-1:-1:-1;;;39620:19:0;;;;:39;39616:308;;39681:178;;-1:-1:-1;;;20863:30:1;;20918:2;20909:12;39681:178:0;;;;;;;;39756:19;;;;39830:14;;39681:178;;39756:19;-1:-1:-1;;;39756:19:0;;;;;;39681:178;;;;-1:-1:-1;;;;;;;;;;;39681:178:0;;;39830:14;;;39681:178;:::i;:::-;;;;;;;;39874:19;;;:38;;;;;-1:-1:-1;;;39874:38:0;-1:-1:-1;;39874:38:0;;;;;;38426:1505;;;;;:::o;35702:1170::-;35778:13;:17;;-1:-1:-1;;35857:15:0;;;35885:231;;;;35933:23;;35917:13;:39;;35933:23;;;;-1:-1:-1;;35971:39:0;;;;;;;35933:23;35987;;;;;;35971:39;;;;;;;;-1:-1:-1;;36069:35:0;-1:-1:-1;;;36036:18:0;;;;36025:29;;;;-1:-1:-1;;36069:35:0;;-1:-1:-1;;;36083:21:0;;;;36069:35;;;;;;;;35885:231;36130:10;36126:234;;;36173:24;;36157:13;:40;;36173:24;;;;;;;;-1:-1:-1;;36212:40:0;;;;;;;36228:24;;;;;;36212:40;;;;;-1:-1:-1;;36312:36:0;-1:-1:-1;;;36278:19:0;;;;36267:30;;-1:-1:-1;;36312:36:0;;-1:-1:-1;;;36326:22:0;;;;;;;36312:36;;;;;;;36126:234;36375:10;36374:11;:27;;;;;36390:11;36389:12;36374:27;36370:251;;;36434:24;;36418:13;:40;;36434:24;;;;;;;;-1:-1:-1;;36473:40:0;;;;;;;36489:24;;;;;;36473:40;;;;;-1:-1:-1;;36573:36:0;-1:-1:-1;;;36539:19:0;;;;36528:30;;-1:-1:-1;;36573:36:0;;-1:-1:-1;;;36587:22:0;;;;;;;36573:36;;;;;;;36370:251;36686:11;;;;;;;;;36675:8;;;;;;36643:29;;36686:11;36659:13;;;;;36643;:29;:::i;:::-;:40;;;;:::i;:::-;:54;;;;:::i;:::-;36631:9;:66;;-1:-1:-1;;36631:66:0;;-1:-1:-1;;;36631:66:0;;;;;;;;;;;;;36713:151;;;36739:13;;;;;;;;;;21171:36:1;;36631:66:0;36767:13;;;;21238:2:1;21223:18;;21216:45;36795:8:0;;;;;21277:18:1;;;21270:45;;;;36818:11:0;;;;;21346:2:1;21331:18;;21324:45;36844:9:0;;;;;;21400:3:1;21385:19;;21378:46;36713:151:0;;21158:3:1;21143:19;36713:151:0;20932:498:1;39939:1535:0;40029:4;39985:23;8964:18;;;:9;:18;;;;;;40183:9;;8964:18;;40074:21;;40208:1;;40183:9;-1:-1:-1;;;40183:9:0;;;;;40135:31;;40153:13;8964:18;40135:31;:::i;:::-;40134:58;;;;:::i;:::-;:75;;;;:::i;:::-;40281:9;;40108:101;;-1:-1:-1;40220:24:0;;40281:9;-1:-1:-1;;;40281:9:0;;;;;40248:29;;40266:11;;;;;40248:15;:29;:::i;:::-;40247:43;;;;:::i;:::-;40220:70;-1:-1:-1;40301:20:0;40356:34;40220:70;40356:15;:34;:::i;:::-;40324:67;;:15;:67;:::i;:::-;40301:90;;40404:31;40422:12;40404:17;:31::i;:::-;40448:27;40478:41;40502:17;40478:21;:41;:::i;:::-;40611:11;;40448:71;;-1:-1:-1;40530:19:0;;40611:11;;;;;;;40600:8;;;;;;40579:17;;40600:8;;40579:13;:17;:::i;:::-;40578:30;;;;:::i;:::-;:44;;;;:::i;:::-;40552:9;;:71;;;-1:-1:-1;;;40552:9:0;;;;:71;:::i;:::-;40686:13;;40530:93;;;;;-1:-1:-1;40634:26:0;;40743:1;;40530:93;;40664:35;;40686:13;40664:19;:35;:::i;:::-;40663:64;;;;:::i;:::-;:81;;;;:::i;:::-;40634:110;-1:-1:-1;40755:26:0;40784:42;40634:110;40784:19;:42;:::i;:::-;40847:14;;40839:52;;40755:71;;-1:-1:-1;;;;;;40847:14:0;;40839:52;;;;;40755:71;;40847:14;40839:52;40847:14;40839:52;40755:71;40847:14;40839:52;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40908:19:0;;40904:253;;40944:50;40958:15;40975:18;40944:13;:50::i;:::-;41014:131;;;22007:25:1;;;22063:2;22048:18;;22041:34;;;22091:18;;;22084:34;;;41014:131:0;;21995:2:1;21980:18;41014:131:0;;;;;;;40904:253;41237:18;;41184:114;;-1:-1:-1;;;41184:114:0;;-1:-1:-1;;;;;41237:18:0;;;41184:114;;;18037:51:1;18104:18;;;18097:34;;;41169:12:0;;41199:4;;41184:30;;18010:18:1;;41184:114:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41169:129;;41313:7;41309:158;;;41337:18;;:67;;-1:-1:-1;;;41337:67:0;;;;;1818:25:1;;;-1:-1:-1;;;;;41337:18:0;;;;:49;;1791:18:1;;41337:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41424:31;41438:16;41424:31;;;;1818:25:1;;1806:2;1791:18;;1672:177;41424:31:0;;;;;;;;41309:158;39974:1500;;;;;;;;;;39939:1535::o;3344:136::-;3402:7;3429:43;3433:1;3436;3429:43;;;;;;;;;;;;;;;;;:3;:43::i;41482:500::-;41573:16;;;41587:1;41573:16;;;;;;;;41549:21;;41573:16;;;;;;;;;;-1:-1:-1;41573:16:0;41549:40;;41618:4;41600;41605:1;41600:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;41600:23:0;;;:7;;;;;;;;;;:23;;;;41644:15;;:22;;;-1:-1:-1;;;41644:22:0;;;;:15;;;;;:20;;:22;;;;;41600:7;;41644:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41634:4;41639:1;41634:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;41634:32:0;;;:7;;;;;;;;;:32;41709:15;;41677:62;;41694:4;;41709:15;41727:11;41677:8;:62::i;:::-;41750:15;;:224;;-1:-1:-1;;;41750:224:0;;-1:-1:-1;;;;;41750:15:0;;;;:66;;:224;;41831:11;;41750:15;;41901:4;;41928;;41948:15;;41750:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41538:444;41482:500;:::o;41990:423::-;42104:15;;42072:62;;42089:4;;-1:-1:-1;;;;;42104:15:0;42122:11;42072:8;:62::i;:::-;42145:15;;42349;;42145:260;;-1:-1:-1;;;42145:260:0;;42217:4;42145:260;;;24254:34:1;24304:18;;;24297:34;;;42145:15:0;24347:18:1;;;24340:34;;;24390:18;;;24383:34;-1:-1:-1;;;;;42349:15:0;;;24433:19:1;;;24426:44;42379:15:0;24486:19:1;;;24479:35;42145:15:0;;;:31;;42184:9;;24188:19:1;;42145:260:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;206:597:1:-;318:4;347:2;376;365:9;358:21;408:6;402:13;451:6;446:2;435:9;431:18;424:34;476:1;486:140;500:6;497:1;494:13;486:140;;;595:14;;;591:23;;585:30;561:17;;;580:2;557:26;550:66;515:10;;486:140;;;644:6;641:1;638:13;635:91;;;714:1;709:2;700:6;689:9;685:22;681:31;674:42;635:91;-1:-1:-1;787:2:1;766:15;-1:-1:-1;;762:29:1;747:45;;;;794:2;743:54;;206:597;-1:-1:-1;;;206:597:1:o;808:131::-;-1:-1:-1;;;;;883:31:1;;873:42;;863:70;;929:1;926;919:12;944:315;1012:6;1020;1073:2;1061:9;1052:7;1048:23;1044:32;1041:52;;;1089:1;1086;1079:12;1041:52;1128:9;1115:23;1147:31;1172:5;1147:31;:::i;:::-;1197:5;1249:2;1234:18;;;;1221:32;;-1:-1:-1;;;944:315:1:o;1264:180::-;1323:6;1376:2;1364:9;1355:7;1351:23;1347:32;1344:52;;;1392:1;1389;1382:12;1344:52;-1:-1:-1;1415:23:1;;1264:180;-1:-1:-1;1264:180:1:o;1854:456::-;1931:6;1939;1947;2000:2;1988:9;1979:7;1975:23;1971:32;1968:52;;;2016:1;2013;2006:12;1968:52;2055:9;2042:23;2074:31;2099:5;2074:31;:::i;:::-;2124:5;-1:-1:-1;2181:2:1;2166:18;;2153:32;2194:33;2153:32;2194:33;:::i;:::-;1854:456;;2246:7;;-1:-1:-1;;;2300:2:1;2285:18;;;;2272:32;;1854:456::o;2504:247::-;2563:6;2616:2;2604:9;2595:7;2591:23;2587:32;2584:52;;;2632:1;2629;2622:12;2584:52;2671:9;2658:23;2690:31;2715:5;2690:31;:::i;2964:156::-;3030:20;;3090:4;3079:16;;3069:27;;3059:55;;3110:1;3107;3100:12;3059:55;2964:156;;;:::o;3125:393::-;3203:6;3211;3219;3227;3280:3;3268:9;3259:7;3255:23;3251:33;3248:53;;;3297:1;3294;3287:12;3248:53;3320:27;3337:9;3320:27;:::i;:::-;3310:37;;3366:36;3398:2;3387:9;3383:18;3366:36;:::i;:::-;3356:46;;3421:36;3453:2;3442:9;3438:18;3421:36;:::i;:::-;3411:46;;3476:36;3508:2;3497:9;3493:18;3476:36;:::i;:::-;3466:46;;3125:393;;;;;;;:::o;3523:118::-;3609:5;3602:13;3595:21;3588:5;3585:32;3575:60;;3631:1;3628;3621:12;3646:382;3711:6;3719;3772:2;3760:9;3751:7;3747:23;3743:32;3740:52;;;3788:1;3785;3778:12;3740:52;3827:9;3814:23;3846:31;3871:5;3846:31;:::i;:::-;3896:5;-1:-1:-1;3953:2:1;3938:18;;3925:32;3966:30;3925:32;3966:30;:::i;:::-;4015:7;4005:17;;;3646:382;;;;;:::o;4457:388::-;4525:6;4533;4586:2;4574:9;4565:7;4561:23;4557:32;4554:52;;;4602:1;4599;4592:12;4554:52;4641:9;4628:23;4660:31;4685:5;4660:31;:::i;:::-;4710:5;-1:-1:-1;4767:2:1;4752:18;;4739:32;4780:33;4739:32;4780:33;:::i;5085:380::-;5164:1;5160:12;;;;5207;;;5228:61;;5282:4;5274:6;5270:17;5260:27;;5228:61;5335:2;5327:6;5324:14;5304:18;5301:38;5298:161;;5381:10;5376:3;5372:20;5369:1;5362:31;5416:4;5413:1;5406:15;5444:4;5441:1;5434:15;5298:161;;5085:380;;;:::o;5470:356::-;5672:2;5654:21;;;5691:18;;;5684:30;5750:34;5745:2;5730:18;;5723:62;5817:2;5802:18;;5470:356::o;6863:127::-;6924:10;6919:3;6915:20;6912:1;6905:31;6955:4;6952:1;6945:15;6979:4;6976:1;6969:15;6995:168;7035:7;7101:1;7097;7093:6;7089:14;7086:1;7083:21;7078:1;7071:9;7064:17;7060:45;7057:71;;;7108:18;;:::i;:::-;-1:-1:-1;7148:9:1;;6995:168::o;7168:127::-;7229:10;7224:3;7220:20;7217:1;7210:31;7260:4;7257:1;7250:15;7284:4;7281:1;7274:15;7300:120;7340:1;7366;7356:35;;7371:18;;:::i;:::-;-1:-1:-1;7405:9:1;;7300:120::o;8244:184::-;8314:6;8367:2;8355:9;8346:7;8342:23;8338:32;8335:52;;;8383:1;8380;8373:12;8335:52;-1:-1:-1;8406:16:1;;8244:184;-1:-1:-1;8244:184:1:o;8738:245::-;8805:6;8858:2;8846:9;8837:7;8833:23;8829:32;8826:52;;;8874:1;8871;8864:12;8826:52;8906:9;8900:16;8925:28;8947:5;8925:28;:::i;8988:204::-;9026:3;9062:4;9059:1;9055:12;9094:4;9091:1;9087:12;9129:3;9123:4;9119:14;9114:3;9111:23;9108:49;;;9137:18;;:::i;:::-;9173:13;;8988:204;-1:-1:-1;;;8988:204:1:o;9819:406::-;10021:2;10003:21;;;10060:2;10040:18;;;10033:30;10099:34;10094:2;10079:18;;10072:62;-1:-1:-1;;;10165:2:1;10150:18;;10143:40;10215:3;10200:19;;9819:406::o;13753:128::-;13793:3;13824:1;13820:6;13817:1;13814:13;13811:39;;;13830:18;;:::i;:::-;-1:-1:-1;13866:9:1;;13753:128::o;15050:401::-;15252:2;15234:21;;;15291:2;15271:18;;;15264:30;15330:34;15325:2;15310:18;;15303:62;-1:-1:-1;;;15396:2:1;15381:18;;15374:35;15441:3;15426:19;;15050:401::o;15456:399::-;15658:2;15640:21;;;15697:2;15677:18;;;15670:30;15736:34;15731:2;15716:18;;15709:62;-1:-1:-1;;;15802:2:1;15787:18;;15780:33;15845:3;15830:19;;15456:399::o;17457:125::-;17497:4;17525:1;17522;17519:8;17516:34;;;17530:18;;:::i;:::-;-1:-1:-1;17567:9:1;;17457:125::o;18818:209::-;-1:-1:-1;;18982:38:1;;;;18964:57;;18952:2;18937:18;;18818:209::o;21435:165::-;21473:1;21507:4;21504:1;21500:12;21531:3;21521:37;;21538:18;;:::i;:::-;21590:3;21583:4;21580:1;21576:12;21572:22;21567:27;;;21435:165;;;;:::o;21605:195::-;21643:4;21680;21677:1;21673:12;21712:4;21709:1;21705:12;21737:3;21732;21729:12;21726:38;;;21744:18;;:::i;:::-;21781:13;;;21605:195;-1:-1:-1;;;21605:195:1:o;22540:127::-;22601:10;22596:3;22592:20;22589:1;22582:31;22632:4;22629:1;22622:15;22656:4;22653:1;22646:15;22672:251;22742:6;22795:2;22783:9;22774:7;22770:23;22766:32;22763:52;;;22811:1;22808;22801:12;22763:52;22843:9;22837:16;22862:31;22887:5;22862:31;:::i;22928:980::-;23190:4;23238:3;23227:9;23223:19;23269:6;23258:9;23251:25;23295:2;23333:6;23328:2;23317:9;23313:18;23306:34;23376:3;23371:2;23360:9;23356:18;23349:31;23400:6;23435;23429:13;23466:6;23458;23451:22;23504:3;23493:9;23489:19;23482:26;;23543:2;23535:6;23531:15;23517:29;;23564:1;23574:195;23588:6;23585:1;23582:13;23574:195;;;23653:13;;-1:-1:-1;;;;;23649:39:1;23637:52;;23744:15;;;;23709:12;;;;23685:1;23603:9;23574:195;;;-1:-1:-1;;;;;;;23825:32:1;;;;23820:2;23805:18;;23798:60;-1:-1:-1;;;23889:3:1;23874:19;23867:35;23786:3;22928:980;-1:-1:-1;;;22928:980:1:o;24525:306::-;24613:6;24621;24629;24682:2;24670:9;24661:7;24657:23;24653:32;24650:52;;;24698:1;24695;24688:12;24650:52;24727:9;24721:16;24711:26;;24777:2;24766:9;24762:18;24756:25;24746:35;;24821:2;24810:9;24806:18;24800:25;24790:35;;24525:306;;;;;:::o

Swarm Source

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