ETH Price: $2,445.86 (+1.85%)
Gas: 9.48 Gwei

Token

MetaPirateAi (MPAi)
 

Overview

Max Total Supply

200,000,000 MPAi

Holders

39 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
treasurechest8.eth
Balance
2,358,958.320734137078393737 MPAi

Value
$0.00
0x783309ba64e54bdeea7ae3f42b42bb5c6386bf08
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Using the power of Blockchain, we are merging advertising, search engine technology, computer software, quantum computing, gaming, metaverse and artificial intelligence with e-commerce.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
MetaPirateAi

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 10000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-06-11
*/

//                          ███████╗ █████╗ ███████╗██╗   ██╗    ██████╗ ██╗   ██╗
//                          ██╔════╝██╔══██╗██╔════╝██║   ██║    ██╔══██╗╚██╗ ██╔╝
//                          ███████╗███████║█████╗  ██║   ██║    ██████╔╝ ╚████╔╝
//                          ╚════██║██╔══██║██╔══╝  ██║   ██║    ██╔══██╗  ╚██╔╝
//                          ███████║██║  ██║██║     ╚██████╔╝    ██████╔╝   ██║
//                          ╚══════╝╚═╝  ╚═╝╚═╝      ╚═════╝     ╚═════╝    ╚═╝
//
//  ██████╗ ██╗      ██████╗  ██████╗██╗  ██╗███████╗ █████╗ ███████╗██╗   ██╗    ██████╗ ██████╗ ███╗   ███╗
//  ██╔══██╗██║     ██╔═══██╗██╔════╝██║ ██╔╝██╔════╝██╔══██╗██╔════╝██║   ██║   ██╔════╝██╔═══██╗████╗ ████║
//  ██████╔╝██║     ██║   ██║██║     █████╔╝ ███████╗███████║█████╗  ██║   ██║   ██║     ██║   ██║██╔████╔██║
//  ██╔══██╗██║     ██║   ██║██║     ██╔═██╗ ╚════██║██╔══██║██╔══╝  ██║   ██║   ██║     ██║   ██║██║╚██╔╝██║
//  ██████╔╝███████╗╚██████╔╝╚██████╗██║  ██╗███████║██║  ██║██║     ╚██████╔╝██╗╚██████╗╚██████╔╝██║ ╚═╝ ██║
//  ╚═════╝ ╚══════╝ ╚═════╝  ╚═════╝╚═╝  ╚═╝╚══════╝╚═╝  ╚═╝╚═╝      ╚═════╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═╝     ╚═╝
//

/**
 * Disclaimer:
 *  BlockSAFU, as a developer assigned by the project owner for writing Solidity smart contracts.
 *  While BlockSAFU strives to create secure smart contracts for project owners and investors,
 *  it holds no responsibility for any investment losses or risks resulting from actions taken by the project owner.
**/
// SPDX-License-Identifier: MIT

pragma solidity 0.8.19;

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 IERC20Metadata is IERC20 {
    function name() external view returns (string memory);

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

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

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

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        address msgSender = _msgSender();
        // _owner = 0x20988390875D06b706285dE690EbB1E624030703;
        _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 {
    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) {
        uint256 currentAllowance = _allowances[sender][_msgSender()];
        if (currentAllowance != type(uint256).max) {
            require(
                currentAllowance >= amount,
                "ERC20: transfer amount exceeds allowance"
            );
            unchecked {
                _approve(sender, _msgSender(), currentAllowance - amount);
            }
        }

        _transfer(sender, recipient, amount);

        return true;
    }

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

    function decreaseAllowance(
        address spender,
        uint256 subtractedValue
    ) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

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

        uint256 senderBalance = _balances[sender];
        require(
            senderBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(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 += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(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);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(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 {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint
    );

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function getPair(
        address tokenA,
        address tokenB
    ) external view returns (address pair);

    function allPairs(uint) external view returns (address pair);

    function allPairsLength() external view returns (uint);

    function createPair(
        address tokenA,
        address tokenB
    ) external returns (address pair);

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint);

    function balanceOf(address owner) external view returns (uint);

    function allowance(
        address owner,
        address spender
    ) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);

    function transfer(address to, uint value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint);

    function permit(
        address owner,
        address spender,
        uint value,
        uint deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(
        address indexed sender,
        uint amount0,
        uint amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
    external
    view
    returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);

    function price0CumulativeLast() external view returns (uint);

    function price1CumulativeLast() external view returns (uint);

    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);

    function burn(address to) external returns (uint amount0, uint amount1);

    function swap(
        uint amount0Out,
        uint amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);

    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    )
    external
    payable
    returns (uint amountToken, uint amountETH, uint liquidity);

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);

    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountA, uint amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountToken, uint amountETH);

    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapExactETHForTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable returns (uint[] memory amounts);

    function swapTokensForExactETH(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapExactTokensForETH(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapETHForExactTokens(
        uint amountOut,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable returns (uint[] memory amounts);

    function quote(
        uint amountA,
        uint reserveA,
        uint reserveB
    ) external pure returns (uint amountB);

    function getAmountOut(
        uint amountIn,
        uint reserveIn,
        uint reserveOut
    ) external pure returns (uint amountOut);

    function getAmountIn(
        uint amountOut,
        uint reserveIn,
        uint reserveOut
    ) external pure returns (uint amountIn);

    function getAmountsOut(
        uint amountIn,
        address[] calldata path
    ) external view returns (uint[] memory amounts);

    function getAmountsIn(
        uint amountOut,
        address[] calldata path
    ) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountETH);

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

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

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

contract MetaPirateAi is ERC20, Ownable {
    uint256 public marketingFeeOnBuy = 2;
    uint256 public marketingFeeOnSell = 4;
    uint256 public liquidityFeeOnBuy = 4;
    uint256 public liquidityFeeOnSell = 4;
    uint256 public totalFeesOnBuy = marketingFeeOnBuy + liquidityFeeOnBuy;
    uint256 public totalFeesOnSell = marketingFeeOnSell + liquidityFeeOnSell;
    uint256 private totalFees;

    address public marketingWallet = 0x905a1a9DbfF5269Bff61455c3F2B3E4C484378b1;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    address private DEAD = 0x000000000000000000000000000000000000dEaD;

    uint256 public walletLimit;
    uint256 public txLimit;
    uint256 public denominator = 10_000;

    bool private swapping;
    uint256 public swapTokensAtAmount;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) private _isExcludeFromWalletLimit;
    mapping(address => bool) private _isExcludeFromTxLimit;

    bool public isTradingEnabled;
    uint256 public startTradingAt;
    bool public swapEnabled;

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event FeesUpdated(uint256 marketingFeeOnBuy, uint256 marketingFeeOnSell, uint256 liquidityFeeOnBuy, uint256 liquidityFeeOnSell);
    event MarketingWalletChanged(address indexed newWallet);
    event SwapAndSendFee(uint256 tokensSwapped);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 bnbReceived, uint256 tokensIntoLiqudity);
    event SwapTokensAtAmountChanged(uint256 newAmount);
    event UpdateWalletLimit(uint256 amount);
    event UpdateTxLimit(uint256 amount);
    event ExcludeWalletLimit(address indexed account, bool isBot);
    event ExcludeTxLimit(address indexed account, bool isBot);

    constructor() ERC20("MetaPirateAi", "MPAi") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            getRouterAddress()
        );
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
        .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;

        _approve(address(this), address(uniswapV2Router), type(uint256).max);

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[DEAD] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[marketingWallet] = true;
        _isExcludedFromFees[getRouterAddress()] = true;

        _isExcludeFromWalletLimit[owner()] = true;
        _isExcludeFromWalletLimit[DEAD] = true;
        _isExcludeFromWalletLimit[address(this)] = true;
        _isExcludeFromWalletLimit[marketingWallet] = true;
        _isExcludeFromWalletLimit[uniswapV2Pair] = true;
        _isExcludeFromWalletLimit[getRouterAddress()] = true;

        _isExcludeFromTxLimit[owner()] = true;
        _isExcludeFromTxLimit[DEAD] = true;
        _isExcludeFromTxLimit[address(this)] = true;
        _isExcludeFromTxLimit[marketingWallet] = true;
        _isExcludeFromTxLimit[getRouterAddress()] = true;

        _mint(owner(), 200_000_000 * (10 ** 18));
        swapTokensAtAmount = 1 * totalSupply() / 100;
        walletLimit = 3 * totalSupply() / 100;
        txLimit = totalSupply();

    }

    receive() external payable {}

    function startTrading() external onlyOwner {
        require(!isTradingEnabled, "Trading already enabled");
        swapEnabled = true;
        isTradingEnabled = true;
        startTradingAt = block.timestamp;
    }

    function getRouterAddress() public view returns (address) {
        uint256 id;
        assembly {
            id := chainid()
        }
        if (id == 97) return 0xD99D1c33F9fC3444f8101754aBC46c52416550D1;
        else if (id == 56) return 0x10ED43C718714eb63d5aA57B78B54704E256024E;
        else if (id == 1) return 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        else return 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    }

    function claimStuckTokens(address token) external onlyOwner {
        require(token != address(this), "Owner cannot claim native tokens");
        if (token == address(0x0)) {
            payable(msg.sender).transfer(address(this).balance);
            return;
        }
        IERC20 ERC20token = IERC20(token);
        uint256 balance = ERC20token.balanceOf(address(this));
        ERC20token.transfer(msg.sender, balance);
    }

    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

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

        emit ExcludeFromFees(account, excluded);
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    function setFees(
        uint256 _marketingFeeOnBuy,
        uint256 _marketingFeeOnSell,
        uint256 _liquidityFeeOnBuy,
        uint256 _liquidityFeeOnSell
    ) external onlyOwner {
        marketingFeeOnBuy = _marketingFeeOnBuy;
        marketingFeeOnSell = _marketingFeeOnSell;
        liquidityFeeOnBuy = _liquidityFeeOnBuy;
        liquidityFeeOnSell = _liquidityFeeOnSell;
        totalFeesOnBuy = marketingFeeOnBuy + liquidityFeeOnBuy;
        totalFeesOnSell = marketingFeeOnSell + liquidityFeeOnSell;
        totalFees = totalFeesOnBuy + totalFeesOnSell;
        require(totalFeesOnBuy <= 10,"Fee Buy can't be more than 10%");
        require(totalFeesOnSell <= 10,"Fee Sell can't be more than 10%");

        emit FeesUpdated(marketingFeeOnBuy, marketingFeeOnSell, liquidityFeeOnBuy, liquidityFeeOnSell);
    }

    function changeMarketingWallet(
        address _marketingWallet
    ) external onlyOwner {
        require(
            _marketingWallet != marketingWallet,
            "Marketing wallet is already that address"
        );
        require(
            _marketingWallet != address(0),
            "Marketing wallet cannot be the zero address"
        );
        require(
            !isContract(_marketingWallet),
            "Marketing wallet cannot be a contract"
        );
        marketingWallet = _marketingWallet;
        _isExcludedFromFees[marketingWallet] = true;
        emit MarketingWalletChanged(marketingWallet);
    }

    function setSwapEnabled(bool _enabled) external onlyOwner {
        require(swapEnabled != _enabled, "swapEnabled already at this state.");
        swapEnabled = _enabled;
    }

    function setSwapTokensAtAmount(uint256 newAmount) external onlyOwner {
        require(
            newAmount > totalSupply() / 100000,
            "SwapTokensAtAmount must be greater than 0.0001% of total supply"
        );
        swapTokensAtAmount = newAmount;
        emit SwapTokensAtAmountChanged(newAmount);
    }

    function setWalletLimit(uint256 _limit) external onlyOwner {
        require(walletLimit != _limit, "Wallet limit already on that amount");
        require(
            _limit >= 100 && _limit <= 10_000,
            "Cannot set limit below than 1% totalSupply or over 100% totalSupply (10000)"
        );
        walletLimit = _limit;
        emit UpdateWalletLimit(_limit);
    }

    function setTxLimit(uint256 _limit) external onlyOwner {
        require(txLimit != _limit, "Tx limit already on that amount");
        require(
            _limit >= 10 && _limit <= 10_000,
            "Cannot set limit below than 0.1% totalSupply (10) or over 100% totalSupply (10000)"
        );
        txLimit = _limit;
        emit UpdateTxLimit(_limit);
    }

    function excludeFromWalletLimit(
        address account,
        bool excluded
    ) external onlyOwner {
        require(
            _isExcludeFromWalletLimit[account] != excluded,
            "Account is already the value of 'excluded'"
        );
        _isExcludeFromWalletLimit[account] = excluded;

        emit ExcludeWalletLimit(account, excluded);
    }

    function isExcludedFromWalletLimit(
        address account
    ) public view returns (bool) {
        return _isExcludeFromWalletLimit[account];
    }

    function excludeFromTxLimit(
        address account,
        bool excluded
    ) external onlyOwner {
        require(
            _isExcludeFromTxLimit[account] != excluded,
            "Account is already the value of 'excluded'"
        );
        _isExcludeFromTxLimit[account] = excluded;

        emit ExcludeTxLimit(account, excluded);
    }

    function isExcludedFromTxLimit(address account) public view returns (bool) {
        return _isExcludeFromTxLimit[account];
    }

    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 (!isTradingEnabled) {
            require(
                _isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading Not Yet Started"
            );
        }

        if (!_isExcludedFromFees[from] && !_isExcludedFromFees[to] && !swapping) {
            if (!isExcludedFromTxLimit(from) && !isExcludedFromTxLimit(to)) {
                require(amount <= (totalSupply() * txLimit) / denominator, "Amount transaction cannot more than tx limit");
            }
            if (!isExcludedFromWalletLimit(to)) {
                require(
                    balanceOf(to) + amount <=
                    (totalSupply() * walletLimit) / denominator,
                    "Balance of to user cannot more than wallet limit"
                );
            }
        }

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

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (canSwap && !swapping && swapEnabled && to == uniswapV2Pair) {
            swapping = true;

            uint256 totalFee = totalFeesOnBuy + totalFeesOnSell;
            uint256 liquidityShare = liquidityFeeOnBuy + liquidityFeeOnSell;
            uint256 marketingShare = marketingFeeOnBuy + marketingFeeOnSell;

            if (liquidityShare > 0) {
                uint256 liquidityTokens = contractTokenBalance * liquidityShare / totalFee;
                swapAndLiquify(liquidityTokens);
            }

            if (marketingShare > 0) {
                uint256 marketingTokens = contractTokenBalance * marketingShare / totalFee;
                swapAndSendFee(marketingTokens);
            }

            swapping = false;
        }

        bool takeFee = !swapping;

        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        if (takeFee) {
            uint256 fees;
            if (from == uniswapV2Pair) {
                fees = (amount * (liquidityFeeOnBuy + marketingFeeOnBuy)) / 100;
            } else if (to == uniswapV2Pair) {
                fees = (amount * (liquidityFeeOnSell + marketingFeeOnSell)) / 100;
            } else {
                fees = 0;
            }
            amount -= fees;
            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }
        }

        super._transfer(from, to, amount);


    }

    function swapAndLiquify(uint256 tokens) private {
        uint256 half = tokens / 2;
        uint256 otherHalf = tokens - half;

        uint256 initialBalance = address(this).balance;

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            half,
            0,
            path,
            address(this),
            block.timestamp);

        uint256 newBalance = address(this).balance - initialBalance;

        uniswapV2Router.addLiquidityETH{value: newBalance}(
            address(this),
            otherHalf,
            0,
            0,
            address(0xdead),
            block.timestamp
        );

        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function swapAndSendFee(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(marketingWallet),
            block.timestamp
        );

        emit SwapAndSendFee(tokenAmount);
    }


}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isBot","type":"bool"}],"name":"ExcludeTxLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isBot","type":"bool"}],"name":"ExcludeWalletLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketingFeeOnBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingFeeOnSell","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityFeeOnBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityFeeOnSell","type":"uint256"}],"name":"FeesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"MarketingWalletChanged","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":"bnbReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"}],"name":"SwapAndSendFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"SwapTokensAtAmountChanged","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":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"UpdateTxLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"UpdateWalletLimit","type":"event"},{"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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"changeMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"claimStuckTokens","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":"denominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"excludeFromTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getRouterAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromTxLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"_marketingFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"_liquidityFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"_liquidityFeeOnSell","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTradingAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeesOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeesOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"txLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"walletLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260026006556004600755600460085560046009556008546006546200002a919062000871565b600a556009546007546200003f919062000871565b600b55600d80546001600160a01b031990811673905a1a9dbff5269bff61455c3f2b3e4c484378b1179091556010805490911661dead1790556127106013553480156200008b57600080fd5b506040518060400160405280600c81526020016b4d657461506972617465416960a01b815250604051806040016040528060048152602001634d50416960e01b8152508160039081620000df919062000931565b506004620000ee828262000931565b505050600062000103620005b660201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060006200015d620005ba565b90506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c69190620009fd565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000214573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023a9190620009fd565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000288573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ae9190620009fd565b600e80546001600160a01b038086166001600160a01b03199283168117909355600f805491851691909216179055909150620002ef90309060001962000645565b600160166000620003086005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055601054821681526016938490528281208054861660019081179091553082528382208054871682179055600d549092168152918220805490941681179093556200037f620005ba565b6001600160a01b0316815260208101919091526040016000908120805460ff191692151592909217909155600190601790620003c36005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055601054821681526017938490528281208054861660019081179091553082528382208054871682179055600d54831682528382208054871682179055600f549092168152918220805490941681179093556200044c620005ba565b6001600160a01b0316815260208101919091526040016000908120805460ff191692151592909217909155600190601890620004906005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055601054821681526018938490528281208054861660019081179091553082528382208054871682179055600d5490921681529182208054909416811790935562000507620005ba565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905562000558620005466005546001600160a01b031690565b6aa56fa5b99019a5c800000062000771565b60646200056460025490565b6200057190600162000a2f565b6200057d919062000a49565b60155560646200058c60025490565b6200059990600362000a2f565b620005a5919062000a49565b601155505060025460125562000a6c565b3390565b6000466061819003620005e25773d99d1c33f9fc3444f8101754abc46c52416550d191505090565b8060380362000606577310ed43c718714eb63d5aa57b78b54704e256024e91505090565b806001036200062a57737a250d5630b4cf539739df2c5dacb4c659f2488d91505090565b737a250d5630b4cf539739df2c5dacb4c659f2488d91505090565b6001600160a01b038316620006ad5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620007105760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401620006a4565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038216620007c95760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620006a4565b8060026000828254620007dd919062000871565b90915550506001600160a01b038216600090815260208190526040812080548392906200080c90849062000871565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156200088757620008876200085b565b92915050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620008b857607f821691505b602082108103620008d957634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200085657600081815260208120601f850160051c81016020861015620009085750805b601f850160051c820191505b81811015620009295782815560010162000914565b505050505050565b81516001600160401b038111156200094d576200094d6200088d565b62000965816200095e8454620008a3565b84620008df565b602080601f8311600181146200099d5760008415620009845750858301515b600019600386901b1c1916600185901b17855562000929565b600085815260208120601f198616915b82811015620009ce57888601518255948401946001909101908401620009ad565b5085821015620009ed5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000a1057600080fd5b81516001600160a01b038116811462000a2857600080fd5b9392505050565b80820281158282048414176200088757620008876200085b565b60008262000a6757634e487b7160e01b600052601260045260246000fd5b500490565b612f6f8062000a7c6000396000f3fe6080604052600436106102f65760003560e01c806375f0a8741161018f578063bf95793d116100e1578063e01af92c1161008a578063f1d5f51711610064578063f1d5f51714610851578063f2fde38b14610871578063f9d0831a1461089157600080fd5b8063e01af92c146107fb578063e16830a81461081b578063e2f456051461083b57600080fd5b8063d54f7d5e116100bb578063d54f7d5e1461078a578063dc4c7dbc1461079f578063dd62ed3e146107b557600080fd5b8063bf95793d1461071b578063c024666814610754578063d35c92241461077457600080fd5b806396ce079511610143578063afa4f3b21161011d578063afa4f3b2146106a2578063b40f9469146106c2578063bb85c6d1146106fb57600080fd5b806396ce07951461064c578063a457c2d714610662578063a9059cbb1461068257600080fd5b80637b3c83b1116101745780637b3c83b1146106035780638da5cb5b1461061957806395d89b411461063757600080fd5b806375f0a874146105cd578063766ea415146105ed57600080fd5b806339509351116102485780635fc2e596116101fc5780636fcba377116101d65780636fcba3771461056257806370a0823114610582578063715018a6146105b857600080fd5b80635fc2e5961461051c5780636caae832146105325780636ddd17131461054857600080fd5b806349bd5a5e1161022d57806349bd5a5e146104a35780634fbee193146104c35780635c85974f146104fc57600080fd5b8063395093511461046d5780633c8463a11461048d57600080fd5b806318160ddd116102aa5780632ce86fbf116102845780632ce86fbf1461041b57806330280a7114610431578063313ce5671461045157600080fd5b806318160ddd146103cf57806323b872dd146103e4578063293230b81461040457600080fd5b8063087ed972116102db578063087ed97214610353578063095ea7b3146103775780631694505e1461039757600080fd5b8063064a59d01461030257806306fdde031461033157600080fd5b366102fd57005b600080fd5b34801561030e57600080fd5b5060195461031c9060ff1681565b60405190151581526020015b60405180910390f35b34801561033d57600080fd5b506103466108b1565b6040516103289190612b2f565b34801561035f57600080fd5b50610369600b5481565b604051908152602001610328565b34801561038357600080fd5b5061031c610392366004612bb0565b610943565b3480156103a357600080fd5b50600e546103b7906001600160a01b031681565b6040516001600160a01b039091168152602001610328565b3480156103db57600080fd5b50600254610369565b3480156103f057600080fd5b5061031c6103ff366004612bdc565b61095a565b34801561041057600080fd5b50610419610a43565b005b34801561042757600080fd5b5061036960095481565b34801561043d57600080fd5b5061041961044c366004612c2b565b610b13565b34801561045d57600080fd5b5060405160128152602001610328565b34801561047957600080fd5b5061031c610488366004612bb0565b610c63565b34801561049957600080fd5b5061036960115481565b3480156104af57600080fd5b50600f546103b7906001600160a01b031681565b3480156104cf57600080fd5b5061031c6104de366004612c64565b6001600160a01b031660009081526016602052604090205460ff1690565b34801561050857600080fd5b50610419610517366004612c88565b610c9f565b34801561052857600080fd5b5061036960065481565b34801561053e57600080fd5b5061036960125481565b34801561055457600080fd5b50601b5461031c9060ff1681565b34801561056e57600080fd5b5061041961057d366004612ca1565b610e31565b34801561058e57600080fd5b5061036961059d366004612c64565b6001600160a01b031660009081526020819052604090205490565b3480156105c457600080fd5b50610419610fcd565b3480156105d957600080fd5b50600d546103b7906001600160a01b031681565b3480156105f957600080fd5b50610369600a5481565b34801561060f57600080fd5b5061036960085481565b34801561062557600080fd5b506005546001600160a01b03166103b7565b34801561064357600080fd5b50610346611089565b34801561065857600080fd5b5061036960135481565b34801561066e57600080fd5b5061031c61067d366004612bb0565b611098565b34801561068e57600080fd5b5061031c61069d366004612bb0565b611149565b3480156106ae57600080fd5b506104196106bd366004612c88565b611156565b3480156106ce57600080fd5b5061031c6106dd366004612c64565b6001600160a01b031660009081526017602052604090205460ff1690565b34801561070757600080fd5b50610419610716366004612c64565b611270565b34801561072757600080fd5b5061031c610736366004612c64565b6001600160a01b031660009081526018602052604090205460ff1690565b34801561076057600080fd5b5061041961076f366004612c2b565b6114c6565b34801561078057600080fd5b50610369601a5481565b34801561079657600080fd5b506103b761160e565b3480156107ab57600080fd5b5061036960075481565b3480156107c157600080fd5b506103696107d0366004612cd3565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561080757600080fd5b50610419610816366004612d01565b611696565b34801561082757600080fd5b50610419610836366004612c2b565b611783565b34801561084757600080fd5b5061036960155481565b34801561085d57600080fd5b5061041961086c366004612c88565b6118cb565b34801561087d57600080fd5b5061041961088c366004612c64565b611a7c565b34801561089d57600080fd5b506104196108ac366004612c64565b611bc6565b6060600380546108c090612d1e565b80601f01602080910402602001604051908101604052809291908181526020018280546108ec90612d1e565b80156109395780601f1061090e57610100808354040283529160200191610939565b820191906000526020600020905b81548152906001019060200180831161091c57829003601f168201915b5050505050905090565b6000610950338484611dd0565b5060015b92915050565b6001600160a01b03831660009081526001602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610a2d5782811015610a205760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b610a2d8533858403611dd0565b610a38858585611f28565b506001949350505050565b6005546001600160a01b03163314610a9d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a17565b60195460ff1615610af05760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720616c726561647920656e61626c65640000000000000000006044820152606401610a17565b601b8054600160ff19918216811790925560198054909116909117905542601a55565b6005546001600160a01b03163314610b6d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a17565b6001600160a01b03821660009081526018602052604090205481151560ff909116151503610c035760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f662060448201527f276578636c7564656427000000000000000000000000000000000000000000006064820152608401610a17565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527f13ea1d894421e1570b68e3aaf86f8fed6d3845d7637fbc435fd4b2e9dc0eac3c91015b60405180910390a25050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610950918590610c9a908690612da0565b611dd0565b6005546001600160a01b03163314610cf95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a17565b8060125403610d4a5760405162461bcd60e51b815260206004820152601f60248201527f5478206c696d697420616c7265616479206f6e207468617420616d6f756e74006044820152606401610a17565b600a8110158015610d5d57506127108111155b610df55760405162461bcd60e51b815260206004820152605260248201527f43616e6e6f7420736574206c696d69742062656c6f77207468616e20302e312560448201527f20746f74616c537570706c792028313029206f72206f7665722031303025207460648201527f6f74616c537570706c7920283130303030290000000000000000000000000000608482015260a401610a17565b60128190556040518181527f1e64d76af03987659aa97c1c1836f0a3dd38d71145d0d04e778e78502a24eefa906020015b60405180910390a150565b6005546001600160a01b03163314610e8b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a17565b6006849055600783905560088290556009819055610ea98285612da0565b600a55600954600754610ebc9190612da0565b600b819055600a54610ece9190612da0565b600c55600a80541115610f235760405162461bcd60e51b815260206004820152601e60248201527f466565204275792063616e2774206265206d6f7265207468616e2031302500006044820152606401610a17565b600a600b541115610f765760405162461bcd60e51b815260206004820152601f60248201527f4665652053656c6c2063616e2774206265206d6f7265207468616e20313025006044820152606401610a17565b6006546007546008546009546040805194855260208501939093529183015260608201527f16e6f67290546b8dd0e587f4b7f67d4f61932ae17ffd8c60d3509dbc05c175fe9060800160405180910390a150505050565b6005546001600160a01b031633146110275760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a17565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b6060600480546108c090612d1e565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156111325760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610a17565b61113f3385858403611dd0565b5060019392505050565b6000610950338484611f28565b6005546001600160a01b031633146111b05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a17565b620186a06111bd60025490565b6111c79190612db3565b811161123b5760405162461bcd60e51b815260206004820152603f60248201527f53776170546f6b656e734174416d6f756e74206d75737420626520677265617460448201527f6572207468616e20302e3030303125206f6620746f74616c20737570706c79006064820152608401610a17565b60158190556040518181527fcba17309eff0b14bb89cad72aef8b308a23d698dfff957e2255d17bbc03620bd90602001610e26565b6005546001600160a01b031633146112ca5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a17565b600d546001600160a01b039081169082160361134e5760405162461bcd60e51b815260206004820152602860248201527f4d61726b6574696e672077616c6c657420697320616c7265616479207468617460448201527f20616464726573730000000000000000000000000000000000000000000000006064820152608401610a17565b6001600160a01b0381166113ca5760405162461bcd60e51b815260206004820152602b60248201527f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a60448201527f65726f20616464726573730000000000000000000000000000000000000000006064820152608401610a17565b6001600160a01b0381163b156114485760405162461bcd60e51b815260206004820152602560248201527f4d61726b6574696e672077616c6c65742063616e6e6f74206265206120636f6e60448201527f74726163740000000000000000000000000000000000000000000000000000006064820152608401610a17565b600d80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038381169182178355600091825260166020526040808320805460ff19166001179055925492519216917fa964ba5c52d7e7bfcae4fb1ae4db9f211756d0e618e85fac5283b882a39e7a0b9190a250565b6005546001600160a01b031633146115205760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a17565b6001600160a01b03821660009081526016602052604090205481151560ff9091161515036115b65760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f662060448201527f276578636c7564656427000000000000000000000000000000000000000000006064820152608401610a17565b6001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df79101610c57565b60004660618190036116355773d99d1c33f9fc3444f8101754abc46c52416550d191505090565b80603803611658577310ed43c718714eb63d5aa57b78b54704e256024e91505090565b8060010361167b57737a250d5630b4cf539739df2c5dacb4c659f2488d91505090565b737a250d5630b4cf539739df2c5dacb4c659f2488d91505090565b6005546001600160a01b031633146116f05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a17565b601b5481151560ff9091161515036117705760405162461bcd60e51b815260206004820152602260248201527f73776170456e61626c656420616c72656164792061742074686973207374617460448201527f652e0000000000000000000000000000000000000000000000000000000000006064820152608401610a17565b601b805460ff1916911515919091179055565b6005546001600160a01b031633146117dd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a17565b6001600160a01b03821660009081526017602052604090205481151560ff9091161515036118735760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f662060448201527f276578636c7564656427000000000000000000000000000000000000000000006064820152608401610a17565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527f38ec0b11ebdbf77dfae4368ebc57232697d016b2f44b0f39b2ecb0e1de5557579101610c57565b6005546001600160a01b031633146119255760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a17565b806011540361199c5760405162461bcd60e51b815260206004820152602360248201527f57616c6c6574206c696d697420616c7265616479206f6e207468617420616d6f60448201527f756e7400000000000000000000000000000000000000000000000000000000006064820152608401610a17565b606481101580156119af57506127108111155b611a475760405162461bcd60e51b815260206004820152604b60248201527f43616e6e6f7420736574206c696d69742062656c6f77207468616e203125207460448201527f6f74616c537570706c79206f72206f766572203130302520746f74616c53757060648201527f706c792028313030303029000000000000000000000000000000000000000000608482015260a401610a17565b60118190556040518181527fa04054ee9a9174f2369fe32cb0fcec095cc8b01035920b1d0efdb7af61efd09590602001610e26565b6005546001600160a01b03163314611ad65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a17565b6001600160a01b038116611b525760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610a17565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611c205760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a17565b306001600160a01b03821603611c785760405162461bcd60e51b815260206004820181905260248201527f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e736044820152606401610a17565b6001600160a01b038116611cb65760405133904780156108fc02916000818181858888f19350505050158015611cb2573d6000803e3d6000fd5b5050565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611d18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d3c9190612dee565b6040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015611da5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc99190612e07565b5050505b50565b6001600160a01b038316611e4b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610a17565b6001600160a01b038216611ec75760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610a17565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611fa45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610a17565b6001600160a01b0382166120205760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610a17565b60195460ff166120b5576001600160a01b03831660009081526016602052604090205460ff168061206957506001600160a01b03821660009081526016602052604090205460ff165b6120b55760405162461bcd60e51b815260206004820152601760248201527f54726164696e67204e6f742059657420537461727465640000000000000000006044820152606401610a17565b6001600160a01b03831660009081526016602052604090205460ff161580156120f757506001600160a01b03821660009081526016602052604090205460ff16155b8015612106575060145460ff16155b156122bf576001600160a01b03831660009081526018602052604090205460ff1615801561214d57506001600160a01b03821660009081526018602052604090205460ff16155b156121e4576013546012546002546121659190612e24565b61216f9190612db3565b8111156121e45760405162461bcd60e51b815260206004820152602c60248201527f416d6f756e74207472616e73616374696f6e2063616e6e6f74206d6f7265207460448201527f68616e207478206c696d697400000000000000000000000000000000000000006064820152608401610a17565b6001600160a01b03821660009081526017602052604090205460ff166122bf576013546011546002546122179190612e24565b6122219190612db3565b81612241846001600160a01b031660009081526020819052604090205490565b61224b9190612da0565b11156122bf5760405162461bcd60e51b815260206004820152603060248201527f42616c616e6365206f6620746f20757365722063616e6e6f74206d6f7265207460448201527f68616e2077616c6c6574206c696d6974000000000000000000000000000000006064820152608401610a17565b806000036122d8576122d3838360006124d0565b505050565b30600090815260208190526040902054601554811080159081906122ff575060145460ff16155b801561230d5750601b5460ff165b80156123265750600f546001600160a01b038581169116145b156123d6576014805460ff19166001179055600b54600a5460009161234a91612da0565b9050600060095460085461235e9190612da0565b905060006007546006546123729190612da0565b9050811561239e576000836123878488612e24565b6123919190612db3565b905061239c816126e7565b505b80156123c8576000836123b18388612e24565b6123bb9190612db3565b90506123c68161297d565b505b50506014805460ff19169055505b6014546001600160a01b03861660009081526016602052604090205460ff9182161591168061241d57506001600160a01b03851660009081526016602052604090205460ff165b15612426575060005b80156124bd57600f546000906001600160a01b03908116908816036124725760646006546008546124579190612da0565b6124619087612e24565b61246b9190612db3565b905061249e565b600f546001600160a01b039081169087160361249a5760646007546009546124579190612da0565b5060005b6124a88186612e3b565b945080156124bb576124bb8730836124d0565b505b6124c88686866124d0565b505050505050565b6001600160a01b03831661254c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610a17565b6001600160a01b0382166125c85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610a17565b6001600160a01b038316600090815260208190526040902054818110156126575760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610a17565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061268e908490612da0565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516126da91815260200190565b60405180910390a3611dc9565b60006126f4600283612db3565b905060006127028284612e3b565b6040805160028082526060820183529293504792600092602083019080368337019050509050308160008151811061273c5761273c612e4e565b6001600160a01b03928316602091820292909201810191909152600e54604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa1580156127ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127d29190612e7d565b816001815181106127e5576127e5612e4e565b6001600160a01b039283166020918202929092010152600e546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790612844908790600090869030904290600401612e9a565b600060405180830381600087803b15801561285e57600080fd5b505af1158015612872573d6000803e3d6000fd5b50505050600082476128849190612e3b565b600e546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201529192506001600160a01b03169063f305d71990839060c40160606040518083038185885af115801561290c573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906129319190612f0b565b505060408051878152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a1505050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106129b2576129b2612e4e565b6001600160a01b03928316602091820292909201810191909152600e54604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015612a24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a489190612e7d565b81600181518110612a5b57612a5b612e4e565b6001600160a01b039283166020918202929092010152600e54600d546040517f5c11d79500000000000000000000000000000000000000000000000000000000815291831692635c11d79592612ac09287926000928892909116904290600401612e9a565b600060405180830381600087803b158015612ada57600080fd5b505af1158015612aee573d6000803e3d6000fd5b505050507f46cc9a40deb7f9a6e09287e4122d5c8ba3daf2c81e84b6b73f926de10211ee8f82604051612b2391815260200190565b60405180910390a15050565b600060208083528351808285015260005b81811015612b5c57858101830151858201604001528201612b40565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b6001600160a01b0381168114611dcd57600080fd5b60008060408385031215612bc357600080fd5b8235612bce81612b9b565b946020939093013593505050565b600080600060608486031215612bf157600080fd5b8335612bfc81612b9b565b92506020840135612c0c81612b9b565b929592945050506040919091013590565b8015158114611dcd57600080fd5b60008060408385031215612c3e57600080fd5b8235612c4981612b9b565b91506020830135612c5981612c1d565b809150509250929050565b600060208284031215612c7657600080fd5b8135612c8181612b9b565b9392505050565b600060208284031215612c9a57600080fd5b5035919050565b60008060008060808587031215612cb757600080fd5b5050823594602084013594506040840135936060013592509050565b60008060408385031215612ce657600080fd5b8235612cf181612b9b565b91506020830135612c5981612b9b565b600060208284031215612d1357600080fd5b8135612c8181612c1d565b600181811c90821680612d3257607f821691505b602082108103612d6b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561095457610954612d71565b600082612de9577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600060208284031215612e0057600080fd5b5051919050565b600060208284031215612e1957600080fd5b8151612c8181612c1d565b808202811582820484141761095457610954612d71565b8181038181111561095457610954612d71565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215612e8f57600080fd5b8151612c8181612b9b565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612eea5784516001600160a01b031683529383019391830191600101612ec5565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612f2057600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220586074cfb851f86cb207ac531506a0f055525d856f81fd35d3eca62b900830c964736f6c63430008130033

Deployed Bytecode

0x6080604052600436106102f65760003560e01c806375f0a8741161018f578063bf95793d116100e1578063e01af92c1161008a578063f1d5f51711610064578063f1d5f51714610851578063f2fde38b14610871578063f9d0831a1461089157600080fd5b8063e01af92c146107fb578063e16830a81461081b578063e2f456051461083b57600080fd5b8063d54f7d5e116100bb578063d54f7d5e1461078a578063dc4c7dbc1461079f578063dd62ed3e146107b557600080fd5b8063bf95793d1461071b578063c024666814610754578063d35c92241461077457600080fd5b806396ce079511610143578063afa4f3b21161011d578063afa4f3b2146106a2578063b40f9469146106c2578063bb85c6d1146106fb57600080fd5b806396ce07951461064c578063a457c2d714610662578063a9059cbb1461068257600080fd5b80637b3c83b1116101745780637b3c83b1146106035780638da5cb5b1461061957806395d89b411461063757600080fd5b806375f0a874146105cd578063766ea415146105ed57600080fd5b806339509351116102485780635fc2e596116101fc5780636fcba377116101d65780636fcba3771461056257806370a0823114610582578063715018a6146105b857600080fd5b80635fc2e5961461051c5780636caae832146105325780636ddd17131461054857600080fd5b806349bd5a5e1161022d57806349bd5a5e146104a35780634fbee193146104c35780635c85974f146104fc57600080fd5b8063395093511461046d5780633c8463a11461048d57600080fd5b806318160ddd116102aa5780632ce86fbf116102845780632ce86fbf1461041b57806330280a7114610431578063313ce5671461045157600080fd5b806318160ddd146103cf57806323b872dd146103e4578063293230b81461040457600080fd5b8063087ed972116102db578063087ed97214610353578063095ea7b3146103775780631694505e1461039757600080fd5b8063064a59d01461030257806306fdde031461033157600080fd5b366102fd57005b600080fd5b34801561030e57600080fd5b5060195461031c9060ff1681565b60405190151581526020015b60405180910390f35b34801561033d57600080fd5b506103466108b1565b6040516103289190612b2f565b34801561035f57600080fd5b50610369600b5481565b604051908152602001610328565b34801561038357600080fd5b5061031c610392366004612bb0565b610943565b3480156103a357600080fd5b50600e546103b7906001600160a01b031681565b6040516001600160a01b039091168152602001610328565b3480156103db57600080fd5b50600254610369565b3480156103f057600080fd5b5061031c6103ff366004612bdc565b61095a565b34801561041057600080fd5b50610419610a43565b005b34801561042757600080fd5b5061036960095481565b34801561043d57600080fd5b5061041961044c366004612c2b565b610b13565b34801561045d57600080fd5b5060405160128152602001610328565b34801561047957600080fd5b5061031c610488366004612bb0565b610c63565b34801561049957600080fd5b5061036960115481565b3480156104af57600080fd5b50600f546103b7906001600160a01b031681565b3480156104cf57600080fd5b5061031c6104de366004612c64565b6001600160a01b031660009081526016602052604090205460ff1690565b34801561050857600080fd5b50610419610517366004612c88565b610c9f565b34801561052857600080fd5b5061036960065481565b34801561053e57600080fd5b5061036960125481565b34801561055457600080fd5b50601b5461031c9060ff1681565b34801561056e57600080fd5b5061041961057d366004612ca1565b610e31565b34801561058e57600080fd5b5061036961059d366004612c64565b6001600160a01b031660009081526020819052604090205490565b3480156105c457600080fd5b50610419610fcd565b3480156105d957600080fd5b50600d546103b7906001600160a01b031681565b3480156105f957600080fd5b50610369600a5481565b34801561060f57600080fd5b5061036960085481565b34801561062557600080fd5b506005546001600160a01b03166103b7565b34801561064357600080fd5b50610346611089565b34801561065857600080fd5b5061036960135481565b34801561066e57600080fd5b5061031c61067d366004612bb0565b611098565b34801561068e57600080fd5b5061031c61069d366004612bb0565b611149565b3480156106ae57600080fd5b506104196106bd366004612c88565b611156565b3480156106ce57600080fd5b5061031c6106dd366004612c64565b6001600160a01b031660009081526017602052604090205460ff1690565b34801561070757600080fd5b50610419610716366004612c64565b611270565b34801561072757600080fd5b5061031c610736366004612c64565b6001600160a01b031660009081526018602052604090205460ff1690565b34801561076057600080fd5b5061041961076f366004612c2b565b6114c6565b34801561078057600080fd5b50610369601a5481565b34801561079657600080fd5b506103b761160e565b3480156107ab57600080fd5b5061036960075481565b3480156107c157600080fd5b506103696107d0366004612cd3565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561080757600080fd5b50610419610816366004612d01565b611696565b34801561082757600080fd5b50610419610836366004612c2b565b611783565b34801561084757600080fd5b5061036960155481565b34801561085d57600080fd5b5061041961086c366004612c88565b6118cb565b34801561087d57600080fd5b5061041961088c366004612c64565b611a7c565b34801561089d57600080fd5b506104196108ac366004612c64565b611bc6565b6060600380546108c090612d1e565b80601f01602080910402602001604051908101604052809291908181526020018280546108ec90612d1e565b80156109395780601f1061090e57610100808354040283529160200191610939565b820191906000526020600020905b81548152906001019060200180831161091c57829003601f168201915b5050505050905090565b6000610950338484611dd0565b5060015b92915050565b6001600160a01b03831660009081526001602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610a2d5782811015610a205760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b610a2d8533858403611dd0565b610a38858585611f28565b506001949350505050565b6005546001600160a01b03163314610a9d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a17565b60195460ff1615610af05760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720616c726561647920656e61626c65640000000000000000006044820152606401610a17565b601b8054600160ff19918216811790925560198054909116909117905542601a55565b6005546001600160a01b03163314610b6d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a17565b6001600160a01b03821660009081526018602052604090205481151560ff909116151503610c035760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f662060448201527f276578636c7564656427000000000000000000000000000000000000000000006064820152608401610a17565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527f13ea1d894421e1570b68e3aaf86f8fed6d3845d7637fbc435fd4b2e9dc0eac3c91015b60405180910390a25050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610950918590610c9a908690612da0565b611dd0565b6005546001600160a01b03163314610cf95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a17565b8060125403610d4a5760405162461bcd60e51b815260206004820152601f60248201527f5478206c696d697420616c7265616479206f6e207468617420616d6f756e74006044820152606401610a17565b600a8110158015610d5d57506127108111155b610df55760405162461bcd60e51b815260206004820152605260248201527f43616e6e6f7420736574206c696d69742062656c6f77207468616e20302e312560448201527f20746f74616c537570706c792028313029206f72206f7665722031303025207460648201527f6f74616c537570706c7920283130303030290000000000000000000000000000608482015260a401610a17565b60128190556040518181527f1e64d76af03987659aa97c1c1836f0a3dd38d71145d0d04e778e78502a24eefa906020015b60405180910390a150565b6005546001600160a01b03163314610e8b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a17565b6006849055600783905560088290556009819055610ea98285612da0565b600a55600954600754610ebc9190612da0565b600b819055600a54610ece9190612da0565b600c55600a80541115610f235760405162461bcd60e51b815260206004820152601e60248201527f466565204275792063616e2774206265206d6f7265207468616e2031302500006044820152606401610a17565b600a600b541115610f765760405162461bcd60e51b815260206004820152601f60248201527f4665652053656c6c2063616e2774206265206d6f7265207468616e20313025006044820152606401610a17565b6006546007546008546009546040805194855260208501939093529183015260608201527f16e6f67290546b8dd0e587f4b7f67d4f61932ae17ffd8c60d3509dbc05c175fe9060800160405180910390a150505050565b6005546001600160a01b031633146110275760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a17565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b6060600480546108c090612d1e565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156111325760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610a17565b61113f3385858403611dd0565b5060019392505050565b6000610950338484611f28565b6005546001600160a01b031633146111b05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a17565b620186a06111bd60025490565b6111c79190612db3565b811161123b5760405162461bcd60e51b815260206004820152603f60248201527f53776170546f6b656e734174416d6f756e74206d75737420626520677265617460448201527f6572207468616e20302e3030303125206f6620746f74616c20737570706c79006064820152608401610a17565b60158190556040518181527fcba17309eff0b14bb89cad72aef8b308a23d698dfff957e2255d17bbc03620bd90602001610e26565b6005546001600160a01b031633146112ca5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a17565b600d546001600160a01b039081169082160361134e5760405162461bcd60e51b815260206004820152602860248201527f4d61726b6574696e672077616c6c657420697320616c7265616479207468617460448201527f20616464726573730000000000000000000000000000000000000000000000006064820152608401610a17565b6001600160a01b0381166113ca5760405162461bcd60e51b815260206004820152602b60248201527f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a60448201527f65726f20616464726573730000000000000000000000000000000000000000006064820152608401610a17565b6001600160a01b0381163b156114485760405162461bcd60e51b815260206004820152602560248201527f4d61726b6574696e672077616c6c65742063616e6e6f74206265206120636f6e60448201527f74726163740000000000000000000000000000000000000000000000000000006064820152608401610a17565b600d80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038381169182178355600091825260166020526040808320805460ff19166001179055925492519216917fa964ba5c52d7e7bfcae4fb1ae4db9f211756d0e618e85fac5283b882a39e7a0b9190a250565b6005546001600160a01b031633146115205760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a17565b6001600160a01b03821660009081526016602052604090205481151560ff9091161515036115b65760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f662060448201527f276578636c7564656427000000000000000000000000000000000000000000006064820152608401610a17565b6001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df79101610c57565b60004660618190036116355773d99d1c33f9fc3444f8101754abc46c52416550d191505090565b80603803611658577310ed43c718714eb63d5aa57b78b54704e256024e91505090565b8060010361167b57737a250d5630b4cf539739df2c5dacb4c659f2488d91505090565b737a250d5630b4cf539739df2c5dacb4c659f2488d91505090565b6005546001600160a01b031633146116f05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a17565b601b5481151560ff9091161515036117705760405162461bcd60e51b815260206004820152602260248201527f73776170456e61626c656420616c72656164792061742074686973207374617460448201527f652e0000000000000000000000000000000000000000000000000000000000006064820152608401610a17565b601b805460ff1916911515919091179055565b6005546001600160a01b031633146117dd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a17565b6001600160a01b03821660009081526017602052604090205481151560ff9091161515036118735760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f662060448201527f276578636c7564656427000000000000000000000000000000000000000000006064820152608401610a17565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527f38ec0b11ebdbf77dfae4368ebc57232697d016b2f44b0f39b2ecb0e1de5557579101610c57565b6005546001600160a01b031633146119255760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a17565b806011540361199c5760405162461bcd60e51b815260206004820152602360248201527f57616c6c6574206c696d697420616c7265616479206f6e207468617420616d6f60448201527f756e7400000000000000000000000000000000000000000000000000000000006064820152608401610a17565b606481101580156119af57506127108111155b611a475760405162461bcd60e51b815260206004820152604b60248201527f43616e6e6f7420736574206c696d69742062656c6f77207468616e203125207460448201527f6f74616c537570706c79206f72206f766572203130302520746f74616c53757060648201527f706c792028313030303029000000000000000000000000000000000000000000608482015260a401610a17565b60118190556040518181527fa04054ee9a9174f2369fe32cb0fcec095cc8b01035920b1d0efdb7af61efd09590602001610e26565b6005546001600160a01b03163314611ad65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a17565b6001600160a01b038116611b525760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610a17565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611c205760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a17565b306001600160a01b03821603611c785760405162461bcd60e51b815260206004820181905260248201527f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e736044820152606401610a17565b6001600160a01b038116611cb65760405133904780156108fc02916000818181858888f19350505050158015611cb2573d6000803e3d6000fd5b5050565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611d18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d3c9190612dee565b6040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015611da5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc99190612e07565b5050505b50565b6001600160a01b038316611e4b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610a17565b6001600160a01b038216611ec75760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610a17565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611fa45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610a17565b6001600160a01b0382166120205760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610a17565b60195460ff166120b5576001600160a01b03831660009081526016602052604090205460ff168061206957506001600160a01b03821660009081526016602052604090205460ff165b6120b55760405162461bcd60e51b815260206004820152601760248201527f54726164696e67204e6f742059657420537461727465640000000000000000006044820152606401610a17565b6001600160a01b03831660009081526016602052604090205460ff161580156120f757506001600160a01b03821660009081526016602052604090205460ff16155b8015612106575060145460ff16155b156122bf576001600160a01b03831660009081526018602052604090205460ff1615801561214d57506001600160a01b03821660009081526018602052604090205460ff16155b156121e4576013546012546002546121659190612e24565b61216f9190612db3565b8111156121e45760405162461bcd60e51b815260206004820152602c60248201527f416d6f756e74207472616e73616374696f6e2063616e6e6f74206d6f7265207460448201527f68616e207478206c696d697400000000000000000000000000000000000000006064820152608401610a17565b6001600160a01b03821660009081526017602052604090205460ff166122bf576013546011546002546122179190612e24565b6122219190612db3565b81612241846001600160a01b031660009081526020819052604090205490565b61224b9190612da0565b11156122bf5760405162461bcd60e51b815260206004820152603060248201527f42616c616e6365206f6620746f20757365722063616e6e6f74206d6f7265207460448201527f68616e2077616c6c6574206c696d6974000000000000000000000000000000006064820152608401610a17565b806000036122d8576122d3838360006124d0565b505050565b30600090815260208190526040902054601554811080159081906122ff575060145460ff16155b801561230d5750601b5460ff165b80156123265750600f546001600160a01b038581169116145b156123d6576014805460ff19166001179055600b54600a5460009161234a91612da0565b9050600060095460085461235e9190612da0565b905060006007546006546123729190612da0565b9050811561239e576000836123878488612e24565b6123919190612db3565b905061239c816126e7565b505b80156123c8576000836123b18388612e24565b6123bb9190612db3565b90506123c68161297d565b505b50506014805460ff19169055505b6014546001600160a01b03861660009081526016602052604090205460ff9182161591168061241d57506001600160a01b03851660009081526016602052604090205460ff165b15612426575060005b80156124bd57600f546000906001600160a01b03908116908816036124725760646006546008546124579190612da0565b6124619087612e24565b61246b9190612db3565b905061249e565b600f546001600160a01b039081169087160361249a5760646007546009546124579190612da0565b5060005b6124a88186612e3b565b945080156124bb576124bb8730836124d0565b505b6124c88686866124d0565b505050505050565b6001600160a01b03831661254c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610a17565b6001600160a01b0382166125c85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610a17565b6001600160a01b038316600090815260208190526040902054818110156126575760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610a17565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061268e908490612da0565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516126da91815260200190565b60405180910390a3611dc9565b60006126f4600283612db3565b905060006127028284612e3b565b6040805160028082526060820183529293504792600092602083019080368337019050509050308160008151811061273c5761273c612e4e565b6001600160a01b03928316602091820292909201810191909152600e54604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa1580156127ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127d29190612e7d565b816001815181106127e5576127e5612e4e565b6001600160a01b039283166020918202929092010152600e546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790612844908790600090869030904290600401612e9a565b600060405180830381600087803b15801561285e57600080fd5b505af1158015612872573d6000803e3d6000fd5b50505050600082476128849190612e3b565b600e546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201529192506001600160a01b03169063f305d71990839060c40160606040518083038185885af115801561290c573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906129319190612f0b565b505060408051878152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a1505050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106129b2576129b2612e4e565b6001600160a01b03928316602091820292909201810191909152600e54604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015612a24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a489190612e7d565b81600181518110612a5b57612a5b612e4e565b6001600160a01b039283166020918202929092010152600e54600d546040517f5c11d79500000000000000000000000000000000000000000000000000000000815291831692635c11d79592612ac09287926000928892909116904290600401612e9a565b600060405180830381600087803b158015612ada57600080fd5b505af1158015612aee573d6000803e3d6000fd5b505050507f46cc9a40deb7f9a6e09287e4122d5c8ba3daf2c81e84b6b73f926de10211ee8f82604051612b2391815260200190565b60405180910390a15050565b600060208083528351808285015260005b81811015612b5c57858101830151858201604001528201612b40565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b6001600160a01b0381168114611dcd57600080fd5b60008060408385031215612bc357600080fd5b8235612bce81612b9b565b946020939093013593505050565b600080600060608486031215612bf157600080fd5b8335612bfc81612b9b565b92506020840135612c0c81612b9b565b929592945050506040919091013590565b8015158114611dcd57600080fd5b60008060408385031215612c3e57600080fd5b8235612c4981612b9b565b91506020830135612c5981612c1d565b809150509250929050565b600060208284031215612c7657600080fd5b8135612c8181612b9b565b9392505050565b600060208284031215612c9a57600080fd5b5035919050565b60008060008060808587031215612cb757600080fd5b5050823594602084013594506040840135936060013592509050565b60008060408385031215612ce657600080fd5b8235612cf181612b9b565b91506020830135612c5981612b9b565b600060208284031215612d1357600080fd5b8135612c8181612c1d565b600181811c90821680612d3257607f821691505b602082108103612d6b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561095457610954612d71565b600082612de9577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600060208284031215612e0057600080fd5b5051919050565b600060208284031215612e1957600080fd5b8151612c8181612c1d565b808202811582820484141761095457610954612d71565b8181038181111561095457610954612d71565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215612e8f57600080fd5b8151612c8181612b9b565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612eea5784516001600160a01b031683529383019391830191600101612ec5565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612f2057600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220586074cfb851f86cb207ac531506a0f055525d856f81fd35d3eca62b900830c964736f6c63430008130033

Deployed Bytecode Sourcemap

19696:13177:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20712:28;;;;;;;;;;-1:-1:-1;20712:28:0;;;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;20712:28:0;;;;;;;;5947:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;19993:72::-;;;;;;;;;;;;;;;;;;;964:25:1;;;952:2;937:18;19993:72:0;818:177:1;6927:194:0;;;;;;;;;;-1:-1:-1;6927:194:0;;;;;:::i;:::-;;:::i;20190:41::-;;;;;;;;;;-1:-1:-1;20190:41:0;;;;-1:-1:-1;;;;;20190:41:0;;;;;;-1:-1:-1;;;;;1670:55:1;;;1652:74;;1640:2;1625:18;20190:41:0;1479:253:1;6268:108:0;;;;;;;;;;-1:-1:-1;6356:12:0;;6268:108;;7129:622;;;;;;;;;;-1:-1:-1;7129:622:0;;;;;:::i;:::-;;:::i;23080:221::-;;;;;;;;;;;;;:::i;:::-;;19873:37;;;;;;;;;;;;;;;;28188:360;;;;;;;;;;-1:-1:-1;28188:360:0;;;;;:::i;:::-;;:::i;6167:93::-;;;;;;;;;;-1:-1:-1;6167:93:0;;6250:2;2850:36:1;;2838:2;2823:18;6167:93:0;2708:184:1;7759:290:0;;;;;;;;;;-1:-1:-1;7759:290:0;;;;;:::i;:::-;;:::i;20349:26::-;;;;;;;;;;;;;;;;20238:28;;;;;;;;;;-1:-1:-1;20238:28:0;;;;-1:-1:-1;;;;;20238:28:0;;;24694:126;;;;;;;;;;-1:-1:-1;24694:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;24784:28:0;24760:4;24784:28;;;:19;:28;;;;;;;;;24694:126;27259:374;;;;;;;;;;-1:-1:-1;27259:374:0;;;;;:::i;:::-;;:::i;19743:36::-;;;;;;;;;;;;;;;;20382:22;;;;;;;;;;;;;;;;20783:23;;;;;;;;;;-1:-1:-1;20783:23:0;;;;;;;;24828:844;;;;;;;;;;-1:-1:-1;24828:844:0;;;;;:::i;:::-;;:::i;6384:143::-;;;;;;;;;;-1:-1:-1;6384:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;6501:18:0;6474:7;6501:18;;;;;;;;;;;;6384:143;5097:148;;;;;;;;;;;;;:::i;20106:75::-;;;;;;;;;;-1:-1:-1;20106:75:0;;;;-1:-1:-1;;;;;20106:75:0;;;19917:69;;;;;;;;;;;;;;;;19830:36;;;;;;;;;;;;;;;;4883:79;;;;;;;;;;-1:-1:-1;4948:6:0;;-1:-1:-1;;;;;4948:6:0;4883:79;;6055:104;;;;;;;;;;;;;:::i;20411:35::-;;;;;;;;;;;;;;;;8057:475;;;;;;;;;;-1:-1:-1;8057:475:0;;;;;:::i;:::-;;:::i;6535:200::-;;;;;;;;;;-1:-1:-1;6535:200:0;;;;;:::i;:::-;;:::i;26527:328::-;;;;;;;;;;-1:-1:-1;26527:328:0;;;;;:::i;:::-;;:::i;28025:155::-;;;;;;;;;;-1:-1:-1;28025:155:0;;;;;:::i;:::-;-1:-1:-1;;;;;28138:34:0;28114:4;28138:34;;;:25;:34;;;;;;;;;28025:155;25680:651;;;;;;;;;;-1:-1:-1;25680:651:0;;;;;:::i;:::-;;:::i;28556:131::-;;;;;;;;;;-1:-1:-1;28556:131:0;;;;;:::i;:::-;-1:-1:-1;;;;;28649:30:0;28625:4;28649:30;;;:21;:30;;;;;;;;;28556:131;24332:354;;;;;;;;;;-1:-1:-1;24332:354:0;;;;;:::i;:::-;;:::i;20747:29::-;;;;;;;;;;;;;;;;23309:443;;;;;;;;;;;;;:::i;19786:37::-;;;;;;;;;;;;;;;;6743:176;;;;;;;;;;-1:-1:-1;6743:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;6884:18:0;;;6857:7;6884:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;6743:176;26339:180;;;;;;;;;;-1:-1:-1;26339:180:0;;;;;:::i;:::-;;:::i;27641:376::-;;;;;;;;;;-1:-1:-1;27641:376:0;;;;;:::i;:::-;;:::i;20483:33::-;;;;;;;;;;;;;;;;26863:388;;;;;;;;;;-1:-1:-1;26863:388:0;;;;;:::i;:::-;;:::i;5253:281::-;;;;;;;;;;-1:-1:-1;5253:281:0;;;;;:::i;:::-;;:::i;23760:441::-;;;;;;;;;;-1:-1:-1;23760:441:0;;;;;:::i;:::-;;:::i;5947:100::-;6001:13;6034:5;6027:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5947:100;:::o;6927:194::-;7035:4;7052:39;4197:10;7075:7;7084:6;7052:8;:39::i;:::-;-1:-1:-1;7109:4:0;6927:194;;;;;:::o;7129:622::-;-1:-1:-1;;;;;7313:19:0;;7269:4;7313:19;;;:11;:19;;;;;;;;4197:10;7313:33;;;;;;;;7381:17;7361:37;;7357:314;;7461:6;7441:16;:26;;7415:128;;;;-1:-1:-1;;;7415:128:0;;5238:2:1;7415:128:0;;;5220:21:1;5277:2;5257:18;;;5250:30;5316:34;5296:18;;;5289:62;5387:10;5367:18;;;5360:38;5415:19;;7415:128:0;;;;;;;;;7587:57;7596:6;4197:10;7637:6;7618:16;:25;7587:8;:57::i;:::-;7683:36;7693:6;7701:9;7712:6;7683:9;:36::i;:::-;-1:-1:-1;7739:4:0;;7129:622;-1:-1:-1;;;;7129:622:0:o;23080:221::-;5010:6;;-1:-1:-1;;;;;5010:6:0;4197:10;5010:22;5002:67;;;;-1:-1:-1;;;5002:67:0;;5647:2:1;5002:67:0;;;5629:21:1;;;5666:18;;;5659:30;5725:34;5705:18;;;5698:62;5777:18;;5002:67:0;5445:356:1;5002:67:0;23143:16:::1;::::0;::::1;;23142:17;23134:53;;;::::0;-1:-1:-1;;;23134:53:0;;6008:2:1;23134:53:0::1;::::0;::::1;5990:21:1::0;6047:2;6027:18;;;6020:30;6086:25;6066:18;;;6059:53;6129:18;;23134:53:0::1;5806:347:1::0;23134:53:0::1;23198:11;:18:::0;;23212:4:::1;-1:-1:-1::0;;23198:18:0;;::::1;::::0;::::1;::::0;;;23227:16:::1;:23:::0;;;;::::1;::::0;;::::1;::::0;;23278:15:::1;23261:14;:32:::0;23080:221::o;28188:360::-;5010:6;;-1:-1:-1;;;;;5010:6:0;4197:10;5010:22;5002:67;;;;-1:-1:-1;;;5002:67:0;;5647:2:1;5002:67:0;;;5629:21:1;;;5666:18;;;5659:30;5725:34;5705:18;;;5698:62;5777:18;;5002:67:0;5445:356:1;5002:67:0;-1:-1:-1;;;;;28325:30:0;::::1;;::::0;;;:21:::1;:30;::::0;;;;;:42;::::1;;:30;::::0;;::::1;:42;;::::0;28303:134:::1;;;::::0;-1:-1:-1;;;28303:134:0;;6360:2:1;28303:134:0::1;::::0;::::1;6342:21:1::0;6399:2;6379:18;;;6372:30;6438:34;6418:18;;;6411:62;6509:12;6489:18;;;6482:40;6539:19;;28303:134:0::1;6158:406:1::0;28303:134:0::1;-1:-1:-1::0;;;;;28448:30:0;::::1;;::::0;;;:21:::1;:30;::::0;;;;;;;;:41;;-1:-1:-1;;28448:41:0::1;::::0;::::1;;::::0;;::::1;::::0;;;28507:33;;154:41:1;;;28507:33:0::1;::::0;127:18:1;28507:33:0::1;;;;;;;;28188:360:::0;;:::o;7759:290::-;4197:10;7872:4;7961:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;7961:34:0;;;;;;;;;;7872:4;;7889:130;;7939:7;;7961:47;;7998:10;;7961:47;:::i;:::-;7889:8;:130::i;27259:374::-;5010:6;;-1:-1:-1;;;;;5010:6:0;4197:10;5010:22;5002:67;;;;-1:-1:-1;;;5002:67:0;;5647:2:1;5002:67:0;;;5629:21:1;;;5666:18;;;5659:30;5725:34;5705:18;;;5698:62;5777:18;;5002:67:0;5445:356:1;5002:67:0;27344:6:::1;27333:7;;:17:::0;27325:61:::1;;;::::0;-1:-1:-1;;;27325:61:0;;7090:2:1;27325:61:0::1;::::0;::::1;7072:21:1::0;7129:2;7109:18;;;7102:30;7168:33;7148:18;;;7141:61;7219:18;;27325:61:0::1;6888:355:1::0;27325:61:0::1;27429:2;27419:6;:12;;:32;;;;;27445:6;27435;:16;;27419:32;27397:164;;;::::0;-1:-1:-1;;;27397:164:0;;7450:2:1;27397:164:0::1;::::0;::::1;7432:21:1::0;7489:2;7469:18;;;7462:30;7528:34;7508:18;;;7501:62;7599:34;7579:18;;;7572:62;7671:20;7650:19;;;7643:49;7709:19;;27397:164:0::1;7248:486:1::0;27397:164:0::1;27572:7;:16:::0;;;27604:21:::1;::::0;964:25:1;;;27604:21:0::1;::::0;952:2:1;937:18;27604:21:0::1;;;;;;;;27259:374:::0;:::o;24828:844::-;5010:6;;-1:-1:-1;;;;;5010:6:0;4197:10;5010:22;5002:67;;;;-1:-1:-1;;;5002:67:0;;5647:2:1;5002:67:0;;;5629:21:1;;;5666:18;;;5659:30;5725:34;5705:18;;;5698:62;5777:18;;5002:67:0;5445:356:1;5002:67:0;25032:17:::1;:38:::0;;;25081:18:::1;:40:::0;;;25132:17:::1;:38:::0;;;25181:18:::1;:40:::0;;;25249:37:::1;25152:18:::0;25052;25249:37:::1;:::i;:::-;25232:14;:54:::0;25336:18:::1;::::0;25315::::1;::::0;:39:::1;::::0;25336:18;25315:39:::1;:::i;:::-;25297:15;:57:::0;;;25377:14:::1;::::0;:32:::1;::::0;25297:57;25377:32:::1;:::i;:::-;25365:9;:44:::0;25446:2:::1;25428:14:::0;;:20:::1;;25420:62;;;::::0;-1:-1:-1;;;25420:62:0;;7941:2:1;25420:62:0::1;::::0;::::1;7923:21:1::0;7980:2;7960:18;;;7953:30;8019:32;7999:18;;;7992:60;8069:18;;25420:62:0::1;7739:354:1::0;25420:62:0::1;25520:2;25501:15;;:21;;25493:64;;;::::0;-1:-1:-1;;;25493:64:0;;8300:2:1;25493:64:0::1;::::0;::::1;8282:21:1::0;8339:2;8319:18;;;8312:30;8378:33;8358:18;;;8351:61;8429:18;;25493:64:0::1;8098:355:1::0;25493:64:0::1;25587:17;::::0;25606:18:::1;::::0;25626:17:::1;::::0;25645:18:::1;::::0;25575:89:::1;::::0;;8689:25:1;;;8745:2;8730:18;;8723:34;;;;8773:18;;;8766:34;8831:2;8816:18;;8809:34;25575:89:0::1;::::0;8676:3:1;8661:19;25575:89:0::1;;;;;;;24828:844:::0;;;;:::o;5097:148::-;5010:6;;-1:-1:-1;;;;;5010:6:0;4197:10;5010:22;5002:67;;;;-1:-1:-1;;;5002:67:0;;5647:2:1;5002:67:0;;;5629:21:1;;;5666:18;;;5659:30;5725:34;5705:18;;;5698:62;5777:18;;5002:67:0;5445:356:1;5002:67:0;5188:6:::1;::::0;5167:40:::1;::::0;5204:1:::1;::::0;-1:-1:-1;;;;;5188:6:0::1;::::0;5167:40:::1;::::0;5204:1;;5167:40:::1;5218:6;:19:::0;;;::::1;::::0;;5097:148::o;6055:104::-;6111:13;6144:7;6137:14;;;;;:::i;8057:475::-;4197:10;8175:4;8219:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;8219:34:0;;;;;;;;;;8286:35;;;;8264:122;;;;-1:-1:-1;;;8264:122:0;;9056:2:1;8264:122:0;;;9038:21:1;9095:2;9075:18;;;9068:30;9134:34;9114:18;;;9107:62;9205:7;9185:18;;;9178:35;9230:19;;8264:122:0;8854:401:1;8264:122:0;8422:67;4197:10;8445:7;8473:15;8454:16;:34;8422:8;:67::i;:::-;-1:-1:-1;8520:4:0;;8057:475;-1:-1:-1;;;8057:475:0:o;6535:200::-;6646:4;6663:42;4197:10;6687:9;6698:6;6663:9;:42::i;26527:328::-;5010:6;;-1:-1:-1;;;;;5010:6:0;4197:10;5010:22;5002:67;;;;-1:-1:-1;;;5002:67:0;;5647:2:1;5002:67:0;;;5629:21:1;;;5666:18;;;5659:30;5725:34;5705:18;;;5698:62;5777:18;;5002:67:0;5445:356:1;5002:67:0;26657:6:::1;26641:13;6356:12:::0;;;6268:108;26641:13:::1;:22;;;;:::i;:::-;26629:9;:34;26607:147;;;::::0;-1:-1:-1;;;26607:147:0;;9741:2:1;26607:147:0::1;::::0;::::1;9723:21:1::0;9780:2;9760:18;;;9753:30;9819:34;9799:18;;;9792:62;9890:33;9870:18;;;9863:61;9941:19;;26607:147:0::1;9539:427:1::0;26607:147:0::1;26765:18;:30:::0;;;26811:36:::1;::::0;964:25:1;;;26811:36:0::1;::::0;952:2:1;937:18;26811:36:0::1;818:177:1::0;25680:651:0;5010:6;;-1:-1:-1;;;;;5010:6:0;4197:10;5010:22;5002:67;;;;-1:-1:-1;;;5002:67:0;;5647:2:1;5002:67:0;;;5629:21:1;;;5666:18;;;5659:30;5725:34;5705:18;;;5698:62;5777:18;;5002:67:0;5445:356:1;5002:67:0;25825:15:::1;::::0;-1:-1:-1;;;;;25825:15:0;;::::1;25805:35:::0;;::::1;::::0;25783:125:::1;;;::::0;-1:-1:-1;;;25783:125:0;;10173:2:1;25783:125:0::1;::::0;::::1;10155:21:1::0;10212:2;10192:18;;;10185:30;10251:34;10231:18;;;10224:62;10322:10;10302:18;;;10295:38;10350:19;;25783:125:0::1;9971:404:1::0;25783:125:0::1;-1:-1:-1::0;;;;;25941:30:0;::::1;25919:123;;;::::0;-1:-1:-1;;;25919:123:0;;10582:2:1;25919:123:0::1;::::0;::::1;10564:21:1::0;10621:2;10601:18;;;10594:30;10660:34;10640:18;;;10633:62;10731:13;10711:18;;;10704:41;10762:19;;25919:123:0::1;10380:407:1::0;25919:123:0::1;-1:-1:-1::0;;;;;24293:19:0;;;:23;26053:116:::1;;;::::0;-1:-1:-1;;;26053:116:0;;10994:2:1;26053:116:0::1;::::0;::::1;10976:21:1::0;11033:2;11013:18;;;11006:30;11072:34;11052:18;;;11045:62;11143:7;11123:18;;;11116:35;11168:19;;26053:116:0::1;10792:401:1::0;26053:116:0::1;26180:15;:34:::0;;;::::1;-1:-1:-1::0;;;;;26180:34:0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;26225:36:0;;;:19:::1;:36;::::0;;;;;:43;;-1:-1:-1;;26225:43:0::1;-1:-1:-1::0;26225:43:0::1;::::0;;26307:15;;26284:39;;26307:15;::::1;::::0;26284:39:::1;::::0;-1:-1:-1;26284:39:0::1;25680:651:::0;:::o;24332:354::-;5010:6;;-1:-1:-1;;;;;5010:6:0;4197:10;5010:22;5002:67;;;;-1:-1:-1;;;5002:67:0;;5647:2:1;5002:67:0;;;5629:21:1;;;5666:18;;;5659:30;5725:34;5705:18;;;5698:62;5777:18;;5002:67:0;5445:356:1;5002:67:0;-1:-1:-1;;;;;24466:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;:40;::::1;;:28;::::0;;::::1;:40;;::::0;24444:132:::1;;;::::0;-1:-1:-1;;;24444:132:0;;6360:2:1;24444:132:0::1;::::0;::::1;6342:21:1::0;6399:2;6379:18;;;6372:30;6438:34;6418:18;;;6411:62;6509:12;6489:18;;;6482:40;6539:19;;24444:132:0::1;6158:406:1::0;24444:132:0::1;-1:-1:-1::0;;;;;24587:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;24587:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;24644:34;;154:41:1;;;24644:34:0::1;::::0;127:18:1;24644:34:0::1;14:187:1::0;23309:443:0;23358:7;23429:9;23469:2;23463:8;;;23459:285;;23480:42;23473:49;;;23309:443;:::o;23459:285::-;23542:2;23548;23542:8;23538:206;;23559:42;23552:49;;;23309:443;:::o;23538:206::-;23621:2;23627:1;23621:7;23617:127;;23637:42;23630:49;;;23309:443;:::o;23617:127::-;23702:42;23695:49;;;23309:443;:::o;26339:180::-;5010:6;;-1:-1:-1;;;;;5010:6:0;4197:10;5010:22;5002:67;;;;-1:-1:-1;;;5002:67:0;;5647:2:1;5002:67:0;;;5629:21:1;;;5666:18;;;5659:30;5725:34;5705:18;;;5698:62;5777:18;;5002:67:0;5445:356:1;5002:67:0;26416:11:::1;::::0;:23;::::1;;:11;::::0;;::::1;:23;;::::0;26408:70:::1;;;::::0;-1:-1:-1;;;26408:70:0;;11400:2:1;26408:70:0::1;::::0;::::1;11382:21:1::0;11439:2;11419:18;;;11412:30;11478:34;11458:18;;;11451:62;11549:4;11529:18;;;11522:32;11571:19;;26408:70:0::1;11198:398:1::0;26408:70:0::1;26489:11;:22:::0;;-1:-1:-1;;26489:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26339:180::o;27641:376::-;5010:6;;-1:-1:-1;;;;;5010:6:0;4197:10;5010:22;5002:67;;;;-1:-1:-1;;;5002:67:0;;5647:2:1;5002:67:0;;;5629:21:1;;;5666:18;;;5659:30;5725:34;5705:18;;;5698:62;5777:18;;5002:67:0;5445:356:1;5002:67:0;-1:-1:-1;;;;;27782:34:0;::::1;;::::0;;;:25:::1;:34;::::0;;;;;:46;::::1;;:34;::::0;;::::1;:46;;::::0;27760:138:::1;;;::::0;-1:-1:-1;;;27760:138:0;;6360:2:1;27760:138:0::1;::::0;::::1;6342:21:1::0;6399:2;6379:18;;;6372:30;6438:34;6418:18;;;6411:62;6509:12;6489:18;;;6482:40;6539:19;;27760:138:0::1;6158:406:1::0;27760:138:0::1;-1:-1:-1::0;;;;;27909:34:0;::::1;;::::0;;;:25:::1;:34;::::0;;;;;;;;:45;;-1:-1:-1;;27909:45:0::1;::::0;::::1;;::::0;;::::1;::::0;;;27972:37;;154:41:1;;;27972:37:0::1;::::0;127:18:1;27972:37:0::1;14:187:1::0;26863:388:0;5010:6;;-1:-1:-1;;;;;5010:6:0;4197:10;5010:22;5002:67;;;;-1:-1:-1;;;5002:67:0;;5647:2:1;5002:67:0;;;5629:21:1;;;5666:18;;;5659:30;5725:34;5705:18;;;5698:62;5777:18;;5002:67:0;5445:356:1;5002:67:0;26956:6:::1;26941:11;;:21:::0;26933:69:::1;;;::::0;-1:-1:-1;;;26933:69:0;;11803:2:1;26933:69:0::1;::::0;::::1;11785:21:1::0;11842:2;11822:18;;;11815:30;11881:34;11861:18;;;11854:62;11952:5;11932:18;;;11925:33;11975:19;;26933:69:0::1;11601:399:1::0;26933:69:0::1;27045:3;27035:6;:13;;:33;;;;;27062:6;27052;:16;;27035:33;27013:158;;;::::0;-1:-1:-1;;;27013:158:0;;12207:2:1;27013:158:0::1;::::0;::::1;12189:21:1::0;12246:2;12226:18;;;12219:30;12285:34;12265:18;;;12258:62;12356:34;12336:18;;;12329:62;12428:13;12407:19;;;12400:42;12459:19;;27013:158:0::1;12005:479:1::0;27013:158:0::1;27182:11;:20:::0;;;27218:25:::1;::::0;964::1;;;27218::0::1;::::0;952:2:1;937:18;27218:25:0::1;818:177:1::0;5253:281:0;5010:6;;-1:-1:-1;;;;;5010:6:0;4197:10;5010:22;5002:67;;;;-1:-1:-1;;;5002:67:0;;5647:2:1;5002:67:0;;;5629:21:1;;;5666:18;;;5659:30;5725:34;5705:18;;;5698:62;5777:18;;5002:67:0;5445:356:1;5002:67:0;-1:-1:-1;;;;;5356:22:0;::::1;5334:110;;;::::0;-1:-1:-1;;;5334:110:0;;12691:2:1;5334:110:0::1;::::0;::::1;12673:21:1::0;12730:2;12710:18;;;12703:30;12769:34;12749:18;;;12742:62;12840:8;12820:18;;;12813:36;12866:19;;5334:110:0::1;12489:402:1::0;5334:110:0::1;5481:6;::::0;5460:38:::1;::::0;-1:-1:-1;;;;;5460:38:0;;::::1;::::0;5481:6:::1;::::0;5460:38:::1;::::0;5481:6:::1;::::0;5460:38:::1;5509:6;:17:::0;;;::::1;-1:-1:-1::0;;;;;5509:17:0;;;::::1;::::0;;;::::1;::::0;;5253:281::o;23760:441::-;5010:6;;-1:-1:-1;;;;;5010:6:0;4197:10;5010:22;5002:67;;;;-1:-1:-1;;;5002:67:0;;5647:2:1;5002:67:0;;;5629:21:1;;;5666:18;;;5659:30;5725:34;5705:18;;;5698:62;5777:18;;5002:67:0;5445:356:1;5002:67:0;23856:4:::1;-1:-1:-1::0;;;;;23839:22:0;::::1;::::0;23831:67:::1;;;::::0;-1:-1:-1;;;23831:67:0;;13098:2:1;23831:67:0::1;::::0;::::1;13080:21:1::0;;;13117:18;;;13110:30;13176:34;13156:18;;;13149:62;13228:18;;23831:67:0::1;12896:356:1::0;23831:67:0::1;-1:-1:-1::0;;;;;23913:21:0;::::1;23909:126;;23951:51;::::0;23959:10:::1;::::0;23980:21:::1;23951:51:::0;::::1;;;::::0;::::1;::::0;;;23980:21;23959:10;23951:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;23760:441:::0;:::o;23909:126::-:1;24107:35;::::0;;;;24136:4:::1;24107:35;::::0;::::1;1652:74:1::0;24072:5:0;;24045:17:::1;::::0;-1:-1:-1;;;;;24107:20:0;::::1;::::0;::::1;::::0;1625:18:1;;24107:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24153:40;::::0;;;;24173:10:::1;24153:40;::::0;::::1;13620:74:1::0;13710:18;;;13703:34;;;24089:53:0;;-1:-1:-1;;;;;;24153:19:0;::::1;::::0;::::1;::::0;13593:18:1;;24153:40:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23820:381;;5080:1;23760:441:::0;:::o;10324:380::-;-1:-1:-1;;;;;10460:19:0;;10452:68;;;;-1:-1:-1;;;10452:68:0;;14200:2:1;10452:68:0;;;14182:21:1;14239:2;14219:18;;;14212:30;14278:34;14258:18;;;14251:62;14349:6;14329:18;;;14322:34;14373:19;;10452:68:0;13998:400:1;10452:68:0;-1:-1:-1;;;;;10539:21:0;;10531:68;;;;-1:-1:-1;;;10531:68:0;;14605:2:1;10531:68:0;;;14587:21:1;14644:2;14624:18;;;14617:30;14683:34;14663:18;;;14656:62;14754:4;14734:18;;;14727:32;14776:19;;10531:68:0;14403:398:1;10531:68:0;-1:-1:-1;;;;;10612:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;10664:32;;964:25:1;;;10664:32:0;;937:18:1;10664:32:0;;;;;;;10324:380;;;:::o;28695:2802::-;-1:-1:-1;;;;;28827:18:0;;28819:68;;;;-1:-1:-1;;;28819:68:0;;15008:2:1;28819:68:0;;;14990:21:1;15047:2;15027:18;;;15020:30;15086:34;15066:18;;;15059:62;15157:7;15137:18;;;15130:35;15182:19;;28819:68:0;14806:401:1;28819:68:0;-1:-1:-1;;;;;28906:16:0;;28898:64;;;;-1:-1:-1;;;28898:64:0;;15414:2:1;28898:64:0;;;15396:21:1;15453:2;15433:18;;;15426:30;15492:34;15472:18;;;15465:62;15563:5;15543:18;;;15536:33;15586:19;;28898:64:0;15212:399:1;28898:64:0;28980:16;;;;28975:170;;-1:-1:-1;;;;;29039:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;29068:23:0;;;;;;:19;:23;;;;;;;;29039:52;29013:120;;;;-1:-1:-1;;;29013:120:0;;15818:2:1;29013:120:0;;;15800:21:1;15857:2;15837:18;;;15830:30;15896:25;15876:18;;;15869:53;15939:18;;29013:120:0;15616:347:1;29013:120:0;-1:-1:-1;;;;;29162:25:0;;;;;;:19;:25;;;;;;;;29161:26;:54;;;;-1:-1:-1;;;;;;29192:23:0;;;;;;:19;:23;;;;;;;;29191:24;29161:54;:67;;;;-1:-1:-1;29220:8:0;;;;29219:9;29161:67;29157:601;;;-1:-1:-1;;;;;28649:30:0;;28625:4;28649:30;;;:21;:30;;;;;;;;29249:28;:58;;;;-1:-1:-1;;;;;;28649:30:0;;28625:4;28649:30;;;:21;:30;;;;;;;;29281:26;29249:58;29245:205;;;29374:11;;29363:7;;6356:12;;29347:23;;;;:::i;:::-;29346:39;;;;:::i;:::-;29336:6;:49;;29328:106;;;;-1:-1:-1;;;29328:106:0;;16343:2:1;29328:106:0;;;16325:21:1;16382:2;16362:18;;;16355:30;16421:34;16401:18;;;16394:62;16492:14;16472:18;;;16465:42;16524:19;;29328:106:0;16141:408:1;29328:106:0;-1:-1:-1;;;;;28138:34:0;;28114:4;28138:34;;;:25;:34;;;;;;;;29464:283;;29628:11;;29613;;6356:12;;29597:27;;;;:::i;:::-;29596:43;;;;:::i;:::-;29565:6;29549:13;29559:2;-1:-1:-1;;;;;6501:18:0;6474:7;6501:18;;;;;;;;;;;;6384:143;29549:13;:22;;;;:::i;:::-;:90;;29519:212;;;;-1:-1:-1;;;29519:212:0;;16756:2:1;29519:212:0;;;16738:21:1;16795:2;16775:18;;;16768:30;16834:34;16814:18;;;16807:62;16905:18;16885;;;16878:46;16941:19;;29519:212:0;16554:412:1;29519:212:0;29774:6;29784:1;29774:11;29770:93;;29802:28;29818:4;29824:2;29828:1;29802:15;:28::i;:::-;28695:2802;;;:::o;29770:93::-;29924:4;29875:28;6501:18;;;;;;;;;;;29982;;29958:42;;;;;;;30017:20;;-1:-1:-1;30029:8:0;;;;30028:9;30017:20;:35;;;;-1:-1:-1;30041:11:0;;;;30017:35;:58;;;;-1:-1:-1;30062:13:0;;-1:-1:-1;;;;;30056:19:0;;;30062:13;;30056:19;30017:58;30013:761;;;30092:8;:15;;-1:-1:-1;;30092:15:0;30103:4;30092:15;;;30160;;30143:14;;30092:8;;30143:32;;;:::i;:::-;30124:51;;30190:22;30235:18;;30215:17;;:38;;;;:::i;:::-;30190:63;;30268:22;30313:18;;30293:17;;:38;;;;:::i;:::-;30268:63;-1:-1:-1;30352:18:0;;30348:183;;30391:23;30457:8;30417:37;30440:14;30417:20;:37;:::i;:::-;:48;;;;:::i;:::-;30391:74;;30484:31;30499:15;30484:14;:31::i;:::-;30372:159;30348:183;30551:18;;30547:183;;30590:23;30656:8;30616:37;30639:14;30616:20;:37;:::i;:::-;:48;;;;:::i;:::-;30590:74;;30683:31;30698:15;30683:14;:31::i;:::-;30571:159;30547:183;-1:-1:-1;;30746:8:0;:16;;-1:-1:-1;;30746:16:0;;;-1:-1:-1;30013:761:0;30802:8;;-1:-1:-1;;;;;30827:25:0;;30786:12;30827:25;;;:19;:25;;;;;;30802:8;;;;30801:9;;30827:25;;:52;;-1:-1:-1;;;;;;30856:23:0;;;;;;:19;:23;;;;;;;;30827:52;30823:100;;;-1:-1:-1;30906:5:0;30823:100;30939:7;30935:505;;;31002:13;;30963:12;;-1:-1:-1;;;;;31002:13:0;;;30994:21;;;;30990:305;;31096:3;31074:17;;31054;;:37;;;;:::i;:::-;31044:48;;:6;:48;:::i;:::-;31043:56;;;;:::i;:::-;31036:63;;30990:305;;;31131:13;;-1:-1:-1;;;;;31131:13:0;;;31125:19;;;;31121:174;;31227:3;31204:18;;31183;;:39;;;;:::i;31121:174::-;-1:-1:-1;31278:1:0;31121:174;31309:14;31319:4;31309:14;;:::i;:::-;;-1:-1:-1;31342:8:0;;31338:91;;31371:42;31387:4;31401;31408;31371:15;:42::i;:::-;30948:492;30935:505;31452:33;31468:4;31474:2;31478:6;31452:15;:33::i;:::-;28808:2689;;;28695:2802;;;:::o;8540:770::-;-1:-1:-1;;;;;8680:20:0;;8672:70;;;;-1:-1:-1;;;8672:70:0;;15008:2:1;8672:70:0;;;14990:21:1;15047:2;15027:18;;;15020:30;15086:34;15066:18;;;15059:62;15157:7;15137:18;;;15130:35;15182:19;;8672:70:0;14806:401:1;8672:70:0;-1:-1:-1;;;;;8761:23:0;;8753:71;;;;-1:-1:-1;;;8753:71:0;;15414:2:1;8753:71:0;;;15396:21:1;15453:2;15433:18;;;15426:30;15492:34;15472:18;;;15465:62;15563:5;15543:18;;;15536:33;15586:19;;8753:71:0;15212:399:1;8753:71:0;-1:-1:-1;;;;;8921:17:0;;8897:21;8921:17;;;;;;;;;;;8971:23;;;;8949:111;;;;-1:-1:-1;;;8949:111:0;;17306:2:1;8949:111:0;;;17288:21:1;17345:2;17325:18;;;17318:30;17384:34;17364:18;;;17357:62;17455:8;17435:18;;;17428:36;17481:19;;8949:111:0;17104:402:1;8949:111:0;-1:-1:-1;;;;;9096:17:0;;;:9;:17;;;;;;;;;;;9116:22;;;9096:42;;9160:20;;;;;;;;:30;;9132:6;;9096:9;9160:30;;9132:6;;9160:30;:::i;:::-;;;;;;;;9225:9;-1:-1:-1;;;;;9208:35:0;9217:6;-1:-1:-1;;;;;9208:35:0;;9236:6;9208:35;;;;964:25:1;;952:2;937:18;;818:177;9208:35:0;;;;;;;;9256:46;28695:2802;31505:868;31564:12;31579:10;31588:1;31579:6;:10;:::i;:::-;31564:25;-1:-1:-1;31600:17:0;31620:13;31564:25;31620:6;:13;:::i;:::-;31729:16;;;31743:1;31729:16;;;;;;;;31600:33;;-1:-1:-1;31671:21:0;;31646:22;;31729:16;;;;;;;;;;-1:-1:-1;31729:16:0;31705:40;;31774:4;31756;31761:1;31756:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31756:23:0;;;:7;;;;;;;;;;:23;;;;31800:15;;:22;;;;;;;;:15;;;;;:20;;:22;;;;;31756:7;;31800:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31790:4;31795:1;31790:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31790:32:0;;;:7;;;;;;;;;:32;31835:15;;:179;;;;;:15;;;:66;;:179;;31916:4;;31835:15;;31951:4;;31978;;31998:15;;31835:179;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32027:18;32072:14;32048:21;:38;;;;:::i;:::-;32099:15;;:205;;;;;32172:4;32099:205;;;19540:34:1;19590:18;;;19583:34;;;32099:15:0;19633:18:1;;;19626:34;;;19676:18;;;19669:34;32256:6:0;19719:19:1;;;19712:44;32278:15:0;19772:19:1;;;19765:35;32027:59:0;;-1:-1:-1;;;;;;32099:15:0;;:31;;32027:59;;19451:19:1;;32099:205:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;32322:43:0;;;20324:25:1;;;20380:2;20365:18;;20358:34;;;20408:18;;;20401:34;;;32322:43:0;;-1:-1:-1;20312:2:1;20297:18;32322:43:0;;;;;;;31553:820;;;;;31505:868;:::o;32381:485::-;32469:16;;;32483:1;32469:16;;;;;;;;32445:21;;32469:16;;;;;;;;;;-1:-1:-1;32469:16:0;32445:40;;32514:4;32496;32501:1;32496:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;32496:23:0;;;:7;;;;;;;;;;:23;;;;32540:15;;:22;;;;;;;;:15;;;;;:20;;:22;;;;;32496:7;;32540:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32530:4;32535:1;32530:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;32530:32:0;;;:7;;;;;;;;;:32;32575:15;;32756;;32575:238;;;;;:15;;;;:69;;:238;;32659:11;;32575:15;;32729:4;;32756:15;;;;32787;;32575:238;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32831:27;32846:11;32831:27;;;;964:25:1;;952:2;937:18;;818:177;32831:27:0;;;;;;;;32434:432;32381:485;:::o;206:607: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;;;490:3;675:1;670:2;661:6;650:9;646:22;642:31;635:42;804:2;734:66;729:2;721:6;717:15;713:88;702:9;698:104;694:113;686:121;;;;206:607;;;;:::o;1000:154::-;-1:-1:-1;;;;;1079:5:1;1075:54;1068:5;1065:65;1055:93;;1144:1;1141;1134:12;1159:315;1227:6;1235;1288:2;1276:9;1267:7;1263:23;1259:32;1256:52;;;1304:1;1301;1294:12;1256:52;1343:9;1330:23;1362:31;1387:5;1362:31;:::i;:::-;1412:5;1464:2;1449:18;;;;1436:32;;-1:-1:-1;;;1159:315:1:o;1737:456::-;1814:6;1822;1830;1883:2;1871:9;1862:7;1858:23;1854:32;1851:52;;;1899:1;1896;1889:12;1851:52;1938:9;1925:23;1957:31;1982:5;1957:31;:::i;:::-;2007:5;-1:-1:-1;2064:2:1;2049:18;;2036:32;2077:33;2036:32;2077:33;:::i;:::-;1737:456;;2129:7;;-1:-1:-1;;;2183:2:1;2168:18;;;;2155:32;;1737:456::o;2198:118::-;2284:5;2277:13;2270:21;2263:5;2260:32;2250:60;;2306:1;2303;2296:12;2321:382;2386:6;2394;2447:2;2435:9;2426:7;2422:23;2418:32;2415:52;;;2463:1;2460;2453:12;2415:52;2502:9;2489:23;2521:31;2546:5;2521:31;:::i;:::-;2571:5;-1:-1:-1;2628:2:1;2613:18;;2600:32;2641:30;2600:32;2641:30;:::i;:::-;2690:7;2680:17;;;2321:382;;;;;:::o;3128:247::-;3187:6;3240:2;3228:9;3219:7;3215:23;3211:32;3208:52;;;3256:1;3253;3246:12;3208:52;3295:9;3282:23;3314:31;3339:5;3314:31;:::i;:::-;3364:5;3128:247;-1:-1:-1;;;3128:247:1:o;3380:180::-;3439:6;3492:2;3480:9;3471:7;3467:23;3463:32;3460:52;;;3508:1;3505;3498:12;3460:52;-1:-1:-1;3531:23:1;;3380:180;-1:-1:-1;3380:180:1:o;3565:385::-;3651:6;3659;3667;3675;3728:3;3716:9;3707:7;3703:23;3699:33;3696:53;;;3745:1;3742;3735:12;3696:53;-1:-1:-1;;3768:23:1;;;3838:2;3823:18;;3810:32;;-1:-1:-1;3889:2:1;3874:18;;3861:32;;3940:2;3925:18;3912:32;;-1:-1:-1;3565:385:1;-1:-1:-1;3565:385:1:o;3955:388::-;4023:6;4031;4084:2;4072:9;4063:7;4059:23;4055:32;4052:52;;;4100:1;4097;4090:12;4052:52;4139:9;4126:23;4158:31;4183:5;4158:31;:::i;:::-;4208:5;-1:-1:-1;4265:2:1;4250:18;;4237:32;4278:33;4237:32;4278:33;:::i;4348:241::-;4404:6;4457:2;4445:9;4436:7;4432:23;4428:32;4425:52;;;4473:1;4470;4463:12;4425:52;4512:9;4499:23;4531:28;4553:5;4531:28;:::i;4594:437::-;4673:1;4669:12;;;;4716;;;4737:61;;4791:4;4783:6;4779:17;4769:27;;4737:61;4844:2;4836:6;4833:14;4813:18;4810:38;4807:218;;4881:77;4878:1;4871:88;4982:4;4979:1;4972:15;5010:4;5007:1;5000:15;4807:218;;4594:437;;;:::o;6569:184::-;6621:77;6618:1;6611:88;6718:4;6715:1;6708:15;6742:4;6739:1;6732:15;6758:125;6823:9;;;6844:10;;;6841:36;;;6857:18;;:::i;9260:274::-;9300:1;9326;9316:189;;9361:77;9358:1;9351:88;9462:4;9459:1;9452:15;9490:4;9487:1;9480:15;9316:189;-1:-1:-1;9519:9:1;;9260:274::o;13257:184::-;13327:6;13380:2;13368:9;13359:7;13355:23;13351:32;13348:52;;;13396:1;13393;13386:12;13348:52;-1:-1:-1;13419:16:1;;13257:184;-1:-1:-1;13257:184:1:o;13748:245::-;13815:6;13868:2;13856:9;13847:7;13843:23;13839:32;13836:52;;;13884:1;13881;13874:12;13836:52;13916:9;13910:16;13935:28;13957:5;13935:28;:::i;15968:168::-;16041:9;;;16072;;16089:15;;;16083:22;;16069:37;16059:71;;16110:18;;:::i;16971:128::-;17038:9;;;17059:11;;;17056:37;;;17073:18;;:::i;17700:184::-;17752:77;17749:1;17742:88;17849:4;17846:1;17839:15;17873:4;17870:1;17863:15;17889:251;17959:6;18012:2;18000:9;17991:7;17987:23;17983:32;17980:52;;;18028:1;18025;18018:12;17980:52;18060:9;18054:16;18079:31;18104:5;18079:31;:::i;18145:1026::-;18407:4;18455:3;18444:9;18440:19;18486:6;18475:9;18468:25;18512:2;18550:6;18545:2;18534:9;18530:18;18523:34;18593:3;18588:2;18577:9;18573:18;18566:31;18617:6;18652;18646:13;18683:6;18675;18668:22;18721:3;18710:9;18706:19;18699:26;;18760:2;18752:6;18748:15;18734:29;;18781:1;18791:218;18805:6;18802:1;18799:13;18791:218;;;18870:13;;-1:-1:-1;;;;;18866:62:1;18854:75;;18984:15;;;;18949:12;;;;18827:1;18820:9;18791:218;;;-1:-1:-1;;;;;;;19065:55:1;;;;19060:2;19045:18;;19038:83;-1:-1:-1;;;19152:3:1;19137:19;19130:35;19026:3;18145:1026;-1:-1:-1;;;18145:1026:1:o;19811:306::-;19899:6;19907;19915;19968:2;19956:9;19947:7;19943:23;19939:32;19936:52;;;19984:1;19981;19974:12;19936:52;20013:9;20007:16;19997:26;;20063:2;20052:9;20048:18;20042:25;20032:35;;20107:2;20096:9;20092:18;20086:25;20076:35;;19811:306;;;;;:::o

Swarm Source

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