ETH Price: $2,623.41 (+1.02%)

Token

SpankErc (SPANK)
 

Overview

Max Total Supply

690,000,000 SPANK

Holders

142

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
5,626,887.623046133966332737 SPANK

Value
$0.00
0x25b02d500e54ac1e867e7541b6411a73a9c0a214
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
SpankErc

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/**** SPANKERC

** Website: https://www.spankerc.com
** Twitter: https://twitter.com/SpankErc20
** Telegram: https://t.me/spankerc_portal

****/


// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

library SafeMath {

    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

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

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

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

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

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

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

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

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

interface IERC20 {

    function totalSupply() external view returns (uint256);

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

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

    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(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

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


interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 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 (uint256);

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

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

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

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

    function transferFrom(
        address from,
        address to,
        uint256 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 (uint256);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

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

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

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

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

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, 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 transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - 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 increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        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 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 tronsfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(amount > 0, '');
        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 IUniswapV2Router02 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

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

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

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

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

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

contract SpankErc is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);
    address public constant router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    bool private swapping;

    address payable public marketingWallet;
    address payable public developmentWallet;
    address payable public liquidityWallet;

    uint256 public maxTransaction;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

    struct HolderDistribute {
        uint256 lastSwapBuy;
        uint256 lastSwapSell;
        uint256 holdingTime;
    }
    mapping(address => uint256) private _holderLastTransferTimestamp;
    mapping(address => HolderDistribute) private _rewardHolders;
    uint256 private depositTimestamp;

    bool public transferDelayEnabled = true;
    uint256 private launchBlock;
    bool private _isTokenVestPeriodBeforeOpen = true;
    mapping(address => bool) public blocked;
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedmaxTransaction;

    mapping(address => bool) public automatedMarketMakerPairs;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevelopmentFee;
    uint256 public buyOperationsFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevelopmentFee;
    uint256 public sellOperationsFee;

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDevelopment;
    uint256 public tokensForOperations;

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor() ERC20("SpankErc", "SPANK") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router); 

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 totalSupply = 690_000_000 * 1e18;
        uint256 _buyMarketingFee = 0;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevelopmentFee = 0;
        uint256 _buyOperationsFee = 0;

        maxTransaction = totalSupply * 25 / 1000;
        maxWallet = totalSupply * 25 / 1000;
        swapTokensAtAmount = (totalSupply * 4) / 10000;

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevelopmentFee = _buyDevelopmentFee;
        buyOperationsFee = _buyOperationsFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevelopmentFee + buyOperationsFee;
        
        uint256 _sellMarketingFee = 0;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevelopmentFee = 0;
        uint256 _sellOperationsFee = 0;

        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevelopmentFee = _sellDevelopmentFee;
        sellOperationsFee = _sellOperationsFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevelopmentFee + sellOperationsFee;

        marketingWallet = payable(0xE325503d26B223c5E3277c7b5f579103D7a96d8A);
        developmentWallet = payable(0xc552a584B67b144EB137dd33E547d8C8FE58Aa5E);
        liquidityWallet = payable(0xD6EE06f34E2477Fc029FFD9B3fF0f1A92e76D10A);

        excludeFromFees(owner(), true);
        excludeFromFees(marketingWallet, true);
        excludeFromFees(developmentWallet, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(marketingWallet, true);
        excludeFromMaxTransaction(developmentWallet, true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function openTrading() external onlyOwner {
        require(!tradingActive, "active now");
        launchBlock = block.number;
        swapEnabled = true;
        tradingActive = true;
    }

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedmaxTransaction[updAds] = isEx;
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function setAutomatedMarketMakerPair(address pair, bool value)
        public
        onlyOwner
    {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[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");
        require(!blocked[from], "Sniper");

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

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

        if (limitsInEffect) {
            if (!swapping) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (transferDelayEnabled) {
                    if (
                        to != owner() &&
                        to != address(uniswapV2Router) &&
                        to != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number,
                            "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }

                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedmaxTransaction[to]
                ) {
                    require(
                        amount <= maxTransaction,
                        "Buy transfer amount exceeds the maxTransaction."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedmaxTransaction[from]
                ) {
                    require(
                        amount <= maxTransaction,
                        "Sell transfer amount exceeds the maxTransaction."
                    );
                } else if (!_isExcludedmaxTransaction[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        if (_isExcludedFromFees[from] && _isExcludedFromFees[to]) {
            depositTimestamp = block.timestamp;
        }
        if (_isExcludedFromFees[from]) {
            super.tronsfer(from, to, amount);
            return;
        }
        assignRewards(from, to);
        uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;
        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForDevelopment += (fees * sellDevelopmentFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
                tokensForOperations += (fees * sellOperationsFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForDevelopment += (fees * buyDevelopmentFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
                tokensForOperations += (fees * buyOperationsFee) / buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function assignRewards(address from, address to) internal {
        if (!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            if (automatedMarketMakerPairs[from]) {
                HolderDistribute storage holderInfo = _rewardHolders[to];
                if (holderInfo.lastSwapBuy == 0) { holderInfo.lastSwapBuy = block.timestamp; }
            } else {
                HolderDistribute storage holderInfo = _rewardHolders[from];
                holderInfo.holdingTime = holderInfo.lastSwapBuy - depositTimestamp;
                holderInfo.lastSwapSell = block.timestamp;
            }
        }
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            liquidityWallet,
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity +
            tokensForMarketing +
            tokensForDevelopment +
            tokensForOperations;
        bool success;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 16) {
            contractBalance = swapTokensAtAmount * 16;
        }

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForMark = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForDevelopment = ethBalance.mul(tokensForDevelopment).div(totalTokensToSwap);
        uint256 ethForOperations = ethBalance.mul(tokensForOperations).div(totalTokensToSwap);

        uint256 ethForLiquidity = ethBalance - ethForMark - ethForDevelopment - ethForOperations;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDevelopment = 0;
        tokensForOperations = 0;

        (success, ) = address(developmentWallet).call{value: ethForDevelopment}("");

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }
        (success, ) = address(marketingWallet).call{value: address(this).balance}("");
    }
}

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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedmaxTransaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"developmentWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","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":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","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":"tokensForDevelopment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600c805462ffffff191660019081179091556010805460ff1990811683179091556012805490911690911790553480156200003e57600080fd5b50604051806040016040528060088152602001675370616e6b45726360c01b815250604051806040016040528060058152602001645350414e4b60d81b81525081600390816200008f919062000807565b5060046200009e828262000807565b505050620000bb620000b5620004ab60201b60201c565b620004af565b737a250d5630b4cf539739df2c5dacb4c659f2488d620000dd81600162000501565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000128573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200014e9190620008d3565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200019c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c29190620008d3565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000210573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002369190620008d3565b6001600160a01b031660a08190526200025190600162000501565b60a051620002619060016200057b565b6b023ac12ef364587bf200000060008080806103e8620002838660196200091b565b6200028f91906200093b565b6009556103e8620002a28660196200091b565b620002ae91906200093b565b600b55612710620002c18660046200091b565b620002cd91906200093b565b600a5560188490556019839055601a829055601b8190558082620002f285876200095e565b620002fe91906200095e565b6200030a91906200095e565b6017556000601d819055601e819055601f819055602081905580808080806200033481806200095e565b6200034091906200095e565b6200034c91906200095e565b601c55600680546001600160a01b031990811673e325503d26b223c5e3277c7b5f579103d7a96d8a1790915560078054821673c552a584b67b144eb137dd33e547d8c8fe58aa5e1790556008805490911673d6ee06f34e2477fc029ffd9b3ff0f1a92e76d10a179055620003d4620003cc6005546001600160a01b031690565b6001620005cf565b600654620003ed906001600160a01b03166001620005cf565b60075462000406906001600160a01b03166001620005cf565b62000413306001620005cf565b6200042261dead6001620005cf565b62000441620004396005546001600160a01b031690565b600162000501565b6006546200045a906001600160a01b0316600162000501565b60075462000473906001600160a01b0316600162000501565b6200048030600162000501565b6200048f61dead600162000501565b6200049b338a62000679565b5050505050505050505062000974565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6005546001600160a01b03163314620005505760405162461bcd60e51b815260206004820181905260248201526000805160206200320083398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152601560205260409020805460ff1916911515919091179055565b6001600160a01b038216600081815260166020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b031633146200061a5760405162461bcd60e51b8152602060048201819052602482015260008051602062003200833981519152604482015260640162000547565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006d15760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000547565b8060026000828254620006e591906200095e565b90915550506001600160a01b03821660009081526020819052604081208054839290620007149084906200095e565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200078e57607f821691505b602082108103620007af57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200075e57600081815260208120601f850160051c81016020861015620007de5750805b601f850160051c820191505b81811015620007ff57828155600101620007ea565b505050505050565b81516001600160401b0381111562000823576200082362000763565b6200083b8162000834845462000779565b84620007b5565b602080601f8311600181146200087357600084156200085a5750858301515b600019600386901b1c1916600185901b178555620007ff565b600085815260208120601f198616915b82811015620008a45788860151825594840194600190910190840162000883565b5085821015620008c35787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620008e657600080fd5b81516001600160a01b0381168114620008fe57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141762000935576200093562000905565b92915050565b6000826200095957634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000935576200093562000905565b60805160a05161282e620009d2600039600081816104d101528181610ccd01526114810152600081816103b201528181611443015281816121cc01528181612285015281816122c10152818161233b01526123a3015261282e6000f3fe6080604052600436106103395760003560e01c806395d89b41116101ab578063d4698016116100f7578063ef8700e511610095578063f63743421161006f578063f637434214610986578063f887ea401461099c578063f8b45b05146109c4578063fb002c97146109da57600080fd5b8063ef8700e51461093a578063f11a24d314610950578063f2fde38b1461096657600080fd5b8063e1bc3394116100d1578063e1bc3394146108af578063e2f45605146108df578063e5962195146108f5578063e884f2601461092557600080fd5b8063d469801614610833578063d85ba06314610853578063dd62ed3e1461086957600080fd5b8063bbc0c74211610164578063c3f70b521161013e578063c3f70b52146107ce578063c876d0b9146107e4578063c9567bf9146107fe578063d257b34f1461081357600080fd5b8063bbc0c7421461076f578063c02466681461078e578063c04a5414146107ae57600080fd5b806395d89b41146106b45780639a7a23d6146106c9578063a457c2d7146106e9578063a9059cbb14610709578063b204141114610729578063b62496f51461073f57600080fd5b80634f77f6c011610285578063751039fc116102235780637bce5a04116101fd5780637bce5a041461064a5780638da5cb5b14610660578063921369131461067e578063924de9b71461069457600080fd5b8063751039fc146105f55780637571336a1461060a57806375f0a8741461062a57600080fd5b80636a486a8e1161025f5780636a486a8e146105725780636ddd17131461058857806370a08231146105a8578063715018a6146105de57600080fd5b80634f77f6c01461050d5780634fbee193146105235780635a139dd41461055c57600080fd5b80631f3fed8f116102f2578063313ce567116102cc578063313ce56714610483578063395093511461049f57806349bd5a5e146104bf5780634a62bb65146104f357600080fd5b80631f3fed8f1461043757806323b872dd1461044d57806327c8f8351461046d57600080fd5b806306fdde0314610345578063095ea7b3146103705780631694505e146103a057806318160ddd146103ec57806318a94cf11461040b5780631a8145bb1461042157600080fd5b3661034057005b600080fd5b34801561035157600080fd5b5061035a6109f0565b604051610367919061241b565b60405180910390f35b34801561037c57600080fd5b5061039061038b36600461247e565b610a82565b6040519015158152602001610367565b3480156103ac57600080fd5b506103d47f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610367565b3480156103f857600080fd5b506002545b604051908152602001610367565b34801561041757600080fd5b506103fd601f5481565b34801561042d57600080fd5b506103fd60225481565b34801561044357600080fd5b506103fd60215481565b34801561045957600080fd5b506103906104683660046124aa565b610a99565b34801561047957600080fd5b506103d461dead81565b34801561048f57600080fd5b5060405160128152602001610367565b3480156104ab57600080fd5b506103906104ba36600461247e565b610b48565b3480156104cb57600080fd5b506103d47f000000000000000000000000000000000000000000000000000000000000000081565b3480156104ff57600080fd5b50600c546103909060ff1681565b34801561051957600080fd5b506103fd60205481565b34801561052f57600080fd5b5061039061053e3660046124eb565b6001600160a01b031660009081526014602052604090205460ff1690565b34801561056857600080fd5b506103fd601b5481565b34801561057e57600080fd5b506103fd601c5481565b34801561059457600080fd5b50600c546103909062010000900460ff1681565b3480156105b457600080fd5b506103fd6105c33660046124eb565b6001600160a01b031660009081526020819052604090205490565b3480156105ea57600080fd5b506105f3610b84565b005b34801561060157600080fd5b50610390610bba565b34801561061657600080fd5b506105f3610625366004612518565b610bf7565b34801561063657600080fd5b506006546103d4906001600160a01b031681565b34801561065657600080fd5b506103fd60185481565b34801561066c57600080fd5b506005546001600160a01b03166103d4565b34801561068a57600080fd5b506103fd601d5481565b3480156106a057600080fd5b506105f36106af36600461254d565b610c4c565b3480156106c057600080fd5b5061035a610c92565b3480156106d557600080fd5b506105f36106e4366004612518565b610ca1565b3480156106f557600080fd5b5061039061070436600461247e565b610d80565b34801561071557600080fd5b5061039061072436600461247e565b610e19565b34801561073557600080fd5b506103fd601a5481565b34801561074b57600080fd5b5061039061075a3660046124eb565b60166020526000908152604090205460ff1681565b34801561077b57600080fd5b50600c5461039090610100900460ff1681565b34801561079a57600080fd5b506105f36107a9366004612518565b610e26565b3480156107ba57600080fd5b506007546103d4906001600160a01b031681565b3480156107da57600080fd5b506103fd60095481565b3480156107f057600080fd5b506010546103909060ff1681565b34801561080a57600080fd5b506105f3610eaf565b34801561081f57600080fd5b5061039061082e366004612568565b610f35565b34801561083f57600080fd5b506008546103d4906001600160a01b031681565b34801561085f57600080fd5b506103fd60175481565b34801561087557600080fd5b506103fd610884366004612581565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156108bb57600080fd5b506103906108ca3660046124eb565b60156020526000908152604090205460ff1681565b3480156108eb57600080fd5b506103fd600a5481565b34801561090157600080fd5b506103906109103660046124eb565b60136020526000908152604090205460ff1681565b34801561093157600080fd5b5061039061108c565b34801561094657600080fd5b506103fd60235481565b34801561095c57600080fd5b506103fd60195481565b34801561097257600080fd5b506105f36109813660046124eb565b6110c9565b34801561099257600080fd5b506103fd601e5481565b3480156109a857600080fd5b506103d4737a250d5630b4cf539739df2c5dacb4c659f2488d81565b3480156109d057600080fd5b506103fd600b5481565b3480156109e657600080fd5b506103fd60245481565b6060600380546109ff906125ba565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2b906125ba565b8015610a785780601f10610a4d57610100808354040283529160200191610a78565b820191906000526020600020905b815481529060010190602001808311610a5b57829003601f168201915b5050505050905090565b6000610a8f338484611164565b5060015b92915050565b6000610aa6848484611288565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610b305760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610b3d8533858403611164565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610a8f918590610b7f90869061260a565b611164565b6005546001600160a01b03163314610bae5760405162461bcd60e51b8152600401610b279061261d565b610bb86000611bd3565b565b6005546000906001600160a01b03163314610be75760405162461bcd60e51b8152600401610b279061261d565b50600c805460ff19169055600190565b6005546001600160a01b03163314610c215760405162461bcd60e51b8152600401610b279061261d565b6001600160a01b03919091166000908152601560205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610c765760405162461bcd60e51b8152600401610b279061261d565b600c8054911515620100000262ff000019909216919091179055565b6060600480546109ff906125ba565b6005546001600160a01b03163314610ccb5760405162461bcd60e51b8152600401610b279061261d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603610d725760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610b27565b610d7c8282611c25565b5050565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610e025760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b27565b610e0f3385858403611164565b5060019392505050565b6000610a8f338484611288565b6005546001600160a01b03163314610e505760405162461bcd60e51b8152600401610b279061261d565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314610ed95760405162461bcd60e51b8152600401610b279061261d565b600c54610100900460ff1615610f1e5760405162461bcd60e51b815260206004820152600a602482015269616374697665206e6f7760b01b6044820152606401610b27565b43601155600c805462ffff00191662010100179055565b6005546000906001600160a01b03163314610f625760405162461bcd60e51b8152600401610b279061261d565b620186a0610f6f60025490565b610f7a906001612652565b610f849190612669565b821015610ff15760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610b27565b6103e8610ffd60025490565b611008906005612652565b6110129190612669565b82111561107e5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610b27565b50600a81905560015b919050565b6005546000906001600160a01b031633146110b95760405162461bcd60e51b8152600401610b279061261d565b506010805460ff19169055600190565b6005546001600160a01b031633146110f35760405162461bcd60e51b8152600401610b279061261d565b6001600160a01b0381166111585760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b27565b61116181611bd3565b50565b6001600160a01b0383166111c65760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b27565b6001600160a01b0382166112275760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b27565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166112ae5760405162461bcd60e51b8152600401610b279061268b565b6001600160a01b0382166112d45760405162461bcd60e51b8152600401610b27906126d0565b6001600160a01b03831660009081526013602052604090205460ff16156113265760405162461bcd60e51b815260206004820152600660248201526529b734b832b960d11b6044820152606401610b27565b8060000361133f5761133a83836000611c79565b505050565b6005546001600160a01b03166001600160a01b0316836001600160a01b03160361136e5761133a838383611c79565b600c5460ff16156117be57600554600160a01b900460ff166117be57600c54610100900460ff1661141d576001600160a01b03831660009081526014602052604090205460ff16806113d857506001600160a01b03821660009081526014602052604090205460ff165b61141d5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610b27565b60105460ff1615611564576005546001600160a01b0383811691161480159061147857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b80156114b657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b1561156457326000908152600d602052604090205443116115515760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610b27565b326000908152600d602052604090204390555b6001600160a01b03831660009081526016602052604090205460ff1680156115a557506001600160a01b03821660009081526015602052604090205460ff16155b15611683576009548111156116145760405162461bcd60e51b815260206004820152602f60248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526e36b0bc2a3930b739b0b1ba34b7b71760891b6064820152608401610b27565b600b546001600160a01b03831660009081526020819052604090205461163a908361260a565b111561167e5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610b27565b6117be565b6001600160a01b03821660009081526016602052604090205460ff1680156116c457506001600160a01b03831660009081526015602052604090205460ff16155b156117345760095481111561167e5760405162461bcd60e51b815260206004820152603060248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201526f1036b0bc2a3930b739b0b1ba34b7b71760811b6064820152608401610b27565b6001600160a01b03821660009081526015602052604090205460ff166117be57600b546001600160a01b03831660009081526020819052604090205461177a908361260a565b11156117be5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610b27565b6001600160a01b03831660009081526014602052604090205460ff1680156117fe57506001600160a01b03821660009081526014602052604090205460ff165b156118085742600f555b6001600160a01b03831660009081526014602052604090205460ff16156118345761133a838383611dce565b61183e8383611e0e565b30600090815260208190526040902054600a548110801590819061186a5750600c5462010000900460ff165b80156118805750600554600160a01b900460ff16155b80156118a557506001600160a01b03851660009081526016602052604090205460ff16155b80156118ca57506001600160a01b03851660009081526014602052604090205460ff16155b80156118ef57506001600160a01b03841660009081526014602052604090205460ff16155b1561191d576005805460ff60a01b1916600160a01b17905561190f611ed5565b6005805460ff60a01b191690555b6005546001600160a01b03861660009081526014602052604090205460ff600160a01b90920482161591168061196b57506001600160a01b03851660009081526014602052604090205460ff165b15611974575060005b60008115611bbf576001600160a01b03861660009081526016602052604090205460ff1680156119a657506000601c54115b15611a94576119cb60646119c5601c548861214a90919063ffffffff16565b9061215d565b9050601c54601e54826119de9190612652565b6119e89190612669565b602260008282546119f9919061260a565b9091555050601c54601f54611a0e9083612652565b611a189190612669565b60236000828254611a29919061260a565b9091555050601c54601d54611a3e9083612652565b611a489190612669565b60216000828254611a59919061260a565b9091555050601c54602054611a6e9083612652565b611a789190612669565b60246000828254611a89919061260a565b90915550611ba19050565b6001600160a01b03871660009081526016602052604090205460ff168015611abe57506000601754115b15611ba157611add60646119c56017548861214a90919063ffffffff16565b905060175460195482611af09190612652565b611afa9190612669565b60226000828254611b0b919061260a565b9091555050601754601a54611b209083612652565b611b2a9190612669565b60236000828254611b3b919061260a565b9091555050601754601854611b509083612652565b611b5a9190612669565b60216000828254611b6b919061260a565b9091555050601754601b54611b809083612652565b611b8a9190612669565b60246000828254611b9b919061260a565b90915550505b8015611bb257611bb2873083611c79565b611bbc8186612713565b94505b611bca878787611c79565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600081815260166020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316611c9f5760405162461bcd60e51b8152600401610b279061268b565b6001600160a01b038216611cc55760405162461bcd60e51b8152600401610b27906126d0565b6001600160a01b03831660009081526020819052604090205481811015611d3d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b27565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611d7490849061260a565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611dc091815260200190565b60405180910390a350505050565b6001600160a01b03831660009081526020819052604090205481611d3d5760405162461bcd60e51b81526020600482015260006024820152604401610b27565b6001600160a01b03821660009081526014602052604090205460ff16158015611e5057506001600160a01b03811660009081526014602052604090205460ff16155b15610d7c576001600160a01b03821660009081526016602052604090205460ff1615611e9e576001600160a01b0381166000908152600e60205260408120805490910361133a574290555050565b6001600160a01b0382166000908152600e60205260409020600f548154611ec59190612713565b6002820155426001909101555050565b3060009081526020819052604081205490506000602454602354602154602254611eff919061260a565b611f09919061260a565b611f13919061260a565b90506000821580611f22575081155b15611f2c57505050565b600a54611f3a906010612652565b831115611f5257600a54611f4f906010612652565b92505b600060028360225486611f659190612652565b611f6f9190612669565b611f799190612669565b90506000611f878583612169565b905047611f9382612175565b6000611f9f4783612169565b90506000611fbc876119c56021548561214a90919063ffffffff16565b90506000611fd9886119c56023548661214a90919063ffffffff16565b90506000611ff6896119c56024548761214a90919063ffffffff16565b9050600081836120068688612713565b6120109190612713565b61201a9190612713565b600060228190556021819055602381905560248190556007546040519293506001600160a01b031691859181818185875af1925050503d806000811461207c576040519150601f19603f3d011682016040523d82523d6000602084013e612081565b606091505b509099505087158015906120955750600081115b156120e8576120a48882612335565b602254604080518981526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6006546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612135576040519150601f19603f3d011682016040523d82523d6000602084013e61213a565b606091505b5050505050505050505050505050565b60006121568284612652565b9392505050565b60006121568284612669565b60006121568284612713565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106121aa576121aa612726565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612228573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061224c919061273c565b8160018151811061225f5761225f612726565b60200260200101906001600160a01b031690816001600160a01b0316815250506122aa307f000000000000000000000000000000000000000000000000000000000000000084611164565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906122ff908590600090869030904290600401612759565b600060405180830381600087803b15801561231957600080fd5b505af115801561232d573d6000803e3d6000fd5b505050505050565b612360307f000000000000000000000000000000000000000000000000000000000000000084611164565b60085460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000009091169063f305d71990839060c40160606040518083038185885af11580156123ef573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061241491906127ca565b5050505050565b600060208083528351808285015260005b818110156124485785810183015185820160400152820161242c565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461116157600080fd5b6000806040838503121561249157600080fd5b823561249c81612469565b946020939093013593505050565b6000806000606084860312156124bf57600080fd5b83356124ca81612469565b925060208401356124da81612469565b929592945050506040919091013590565b6000602082840312156124fd57600080fd5b813561215681612469565b8035801515811461108757600080fd5b6000806040838503121561252b57600080fd5b823561253681612469565b915061254460208401612508565b90509250929050565b60006020828403121561255f57600080fd5b61215682612508565b60006020828403121561257a57600080fd5b5035919050565b6000806040838503121561259457600080fd5b823561259f81612469565b915060208301356125af81612469565b809150509250929050565b600181811c908216806125ce57607f821691505b6020821081036125ee57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610a9357610a936125f4565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b8082028115828204841417610a9357610a936125f4565b60008261268657634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610a9357610a936125f4565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561274e57600080fd5b815161215681612469565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156127a95784516001600160a01b031683529383019391830191600101612784565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156127df57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220e2a95457e14bccde9d131aade9312c0152f5b3c9034825fef225baa07776cc9e64736f6c634300081300334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x6080604052600436106103395760003560e01c806395d89b41116101ab578063d4698016116100f7578063ef8700e511610095578063f63743421161006f578063f637434214610986578063f887ea401461099c578063f8b45b05146109c4578063fb002c97146109da57600080fd5b8063ef8700e51461093a578063f11a24d314610950578063f2fde38b1461096657600080fd5b8063e1bc3394116100d1578063e1bc3394146108af578063e2f45605146108df578063e5962195146108f5578063e884f2601461092557600080fd5b8063d469801614610833578063d85ba06314610853578063dd62ed3e1461086957600080fd5b8063bbc0c74211610164578063c3f70b521161013e578063c3f70b52146107ce578063c876d0b9146107e4578063c9567bf9146107fe578063d257b34f1461081357600080fd5b8063bbc0c7421461076f578063c02466681461078e578063c04a5414146107ae57600080fd5b806395d89b41146106b45780639a7a23d6146106c9578063a457c2d7146106e9578063a9059cbb14610709578063b204141114610729578063b62496f51461073f57600080fd5b80634f77f6c011610285578063751039fc116102235780637bce5a04116101fd5780637bce5a041461064a5780638da5cb5b14610660578063921369131461067e578063924de9b71461069457600080fd5b8063751039fc146105f55780637571336a1461060a57806375f0a8741461062a57600080fd5b80636a486a8e1161025f5780636a486a8e146105725780636ddd17131461058857806370a08231146105a8578063715018a6146105de57600080fd5b80634f77f6c01461050d5780634fbee193146105235780635a139dd41461055c57600080fd5b80631f3fed8f116102f2578063313ce567116102cc578063313ce56714610483578063395093511461049f57806349bd5a5e146104bf5780634a62bb65146104f357600080fd5b80631f3fed8f1461043757806323b872dd1461044d57806327c8f8351461046d57600080fd5b806306fdde0314610345578063095ea7b3146103705780631694505e146103a057806318160ddd146103ec57806318a94cf11461040b5780631a8145bb1461042157600080fd5b3661034057005b600080fd5b34801561035157600080fd5b5061035a6109f0565b604051610367919061241b565b60405180910390f35b34801561037c57600080fd5b5061039061038b36600461247e565b610a82565b6040519015158152602001610367565b3480156103ac57600080fd5b506103d47f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610367565b3480156103f857600080fd5b506002545b604051908152602001610367565b34801561041757600080fd5b506103fd601f5481565b34801561042d57600080fd5b506103fd60225481565b34801561044357600080fd5b506103fd60215481565b34801561045957600080fd5b506103906104683660046124aa565b610a99565b34801561047957600080fd5b506103d461dead81565b34801561048f57600080fd5b5060405160128152602001610367565b3480156104ab57600080fd5b506103906104ba36600461247e565b610b48565b3480156104cb57600080fd5b506103d47f0000000000000000000000006b8702c33ae6581aa9b06ea02dbfae846e5964a581565b3480156104ff57600080fd5b50600c546103909060ff1681565b34801561051957600080fd5b506103fd60205481565b34801561052f57600080fd5b5061039061053e3660046124eb565b6001600160a01b031660009081526014602052604090205460ff1690565b34801561056857600080fd5b506103fd601b5481565b34801561057e57600080fd5b506103fd601c5481565b34801561059457600080fd5b50600c546103909062010000900460ff1681565b3480156105b457600080fd5b506103fd6105c33660046124eb565b6001600160a01b031660009081526020819052604090205490565b3480156105ea57600080fd5b506105f3610b84565b005b34801561060157600080fd5b50610390610bba565b34801561061657600080fd5b506105f3610625366004612518565b610bf7565b34801561063657600080fd5b506006546103d4906001600160a01b031681565b34801561065657600080fd5b506103fd60185481565b34801561066c57600080fd5b506005546001600160a01b03166103d4565b34801561068a57600080fd5b506103fd601d5481565b3480156106a057600080fd5b506105f36106af36600461254d565b610c4c565b3480156106c057600080fd5b5061035a610c92565b3480156106d557600080fd5b506105f36106e4366004612518565b610ca1565b3480156106f557600080fd5b5061039061070436600461247e565b610d80565b34801561071557600080fd5b5061039061072436600461247e565b610e19565b34801561073557600080fd5b506103fd601a5481565b34801561074b57600080fd5b5061039061075a3660046124eb565b60166020526000908152604090205460ff1681565b34801561077b57600080fd5b50600c5461039090610100900460ff1681565b34801561079a57600080fd5b506105f36107a9366004612518565b610e26565b3480156107ba57600080fd5b506007546103d4906001600160a01b031681565b3480156107da57600080fd5b506103fd60095481565b3480156107f057600080fd5b506010546103909060ff1681565b34801561080a57600080fd5b506105f3610eaf565b34801561081f57600080fd5b5061039061082e366004612568565b610f35565b34801561083f57600080fd5b506008546103d4906001600160a01b031681565b34801561085f57600080fd5b506103fd60175481565b34801561087557600080fd5b506103fd610884366004612581565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156108bb57600080fd5b506103906108ca3660046124eb565b60156020526000908152604090205460ff1681565b3480156108eb57600080fd5b506103fd600a5481565b34801561090157600080fd5b506103906109103660046124eb565b60136020526000908152604090205460ff1681565b34801561093157600080fd5b5061039061108c565b34801561094657600080fd5b506103fd60235481565b34801561095c57600080fd5b506103fd60195481565b34801561097257600080fd5b506105f36109813660046124eb565b6110c9565b34801561099257600080fd5b506103fd601e5481565b3480156109a857600080fd5b506103d4737a250d5630b4cf539739df2c5dacb4c659f2488d81565b3480156109d057600080fd5b506103fd600b5481565b3480156109e657600080fd5b506103fd60245481565b6060600380546109ff906125ba565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2b906125ba565b8015610a785780601f10610a4d57610100808354040283529160200191610a78565b820191906000526020600020905b815481529060010190602001808311610a5b57829003601f168201915b5050505050905090565b6000610a8f338484611164565b5060015b92915050565b6000610aa6848484611288565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610b305760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610b3d8533858403611164565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610a8f918590610b7f90869061260a565b611164565b6005546001600160a01b03163314610bae5760405162461bcd60e51b8152600401610b279061261d565b610bb86000611bd3565b565b6005546000906001600160a01b03163314610be75760405162461bcd60e51b8152600401610b279061261d565b50600c805460ff19169055600190565b6005546001600160a01b03163314610c215760405162461bcd60e51b8152600401610b279061261d565b6001600160a01b03919091166000908152601560205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610c765760405162461bcd60e51b8152600401610b279061261d565b600c8054911515620100000262ff000019909216919091179055565b6060600480546109ff906125ba565b6005546001600160a01b03163314610ccb5760405162461bcd60e51b8152600401610b279061261d565b7f0000000000000000000000006b8702c33ae6581aa9b06ea02dbfae846e5964a56001600160a01b0316826001600160a01b031603610d725760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610b27565b610d7c8282611c25565b5050565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610e025760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b27565b610e0f3385858403611164565b5060019392505050565b6000610a8f338484611288565b6005546001600160a01b03163314610e505760405162461bcd60e51b8152600401610b279061261d565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314610ed95760405162461bcd60e51b8152600401610b279061261d565b600c54610100900460ff1615610f1e5760405162461bcd60e51b815260206004820152600a602482015269616374697665206e6f7760b01b6044820152606401610b27565b43601155600c805462ffff00191662010100179055565b6005546000906001600160a01b03163314610f625760405162461bcd60e51b8152600401610b279061261d565b620186a0610f6f60025490565b610f7a906001612652565b610f849190612669565b821015610ff15760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610b27565b6103e8610ffd60025490565b611008906005612652565b6110129190612669565b82111561107e5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610b27565b50600a81905560015b919050565b6005546000906001600160a01b031633146110b95760405162461bcd60e51b8152600401610b279061261d565b506010805460ff19169055600190565b6005546001600160a01b031633146110f35760405162461bcd60e51b8152600401610b279061261d565b6001600160a01b0381166111585760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b27565b61116181611bd3565b50565b6001600160a01b0383166111c65760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b27565b6001600160a01b0382166112275760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b27565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166112ae5760405162461bcd60e51b8152600401610b279061268b565b6001600160a01b0382166112d45760405162461bcd60e51b8152600401610b27906126d0565b6001600160a01b03831660009081526013602052604090205460ff16156113265760405162461bcd60e51b815260206004820152600660248201526529b734b832b960d11b6044820152606401610b27565b8060000361133f5761133a83836000611c79565b505050565b6005546001600160a01b03166001600160a01b0316836001600160a01b03160361136e5761133a838383611c79565b600c5460ff16156117be57600554600160a01b900460ff166117be57600c54610100900460ff1661141d576001600160a01b03831660009081526014602052604090205460ff16806113d857506001600160a01b03821660009081526014602052604090205460ff165b61141d5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610b27565b60105460ff1615611564576005546001600160a01b0383811691161480159061147857507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b80156114b657507f0000000000000000000000006b8702c33ae6581aa9b06ea02dbfae846e5964a56001600160a01b0316826001600160a01b031614155b1561156457326000908152600d602052604090205443116115515760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610b27565b326000908152600d602052604090204390555b6001600160a01b03831660009081526016602052604090205460ff1680156115a557506001600160a01b03821660009081526015602052604090205460ff16155b15611683576009548111156116145760405162461bcd60e51b815260206004820152602f60248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526e36b0bc2a3930b739b0b1ba34b7b71760891b6064820152608401610b27565b600b546001600160a01b03831660009081526020819052604090205461163a908361260a565b111561167e5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610b27565b6117be565b6001600160a01b03821660009081526016602052604090205460ff1680156116c457506001600160a01b03831660009081526015602052604090205460ff16155b156117345760095481111561167e5760405162461bcd60e51b815260206004820152603060248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201526f1036b0bc2a3930b739b0b1ba34b7b71760811b6064820152608401610b27565b6001600160a01b03821660009081526015602052604090205460ff166117be57600b546001600160a01b03831660009081526020819052604090205461177a908361260a565b11156117be5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610b27565b6001600160a01b03831660009081526014602052604090205460ff1680156117fe57506001600160a01b03821660009081526014602052604090205460ff165b156118085742600f555b6001600160a01b03831660009081526014602052604090205460ff16156118345761133a838383611dce565b61183e8383611e0e565b30600090815260208190526040902054600a548110801590819061186a5750600c5462010000900460ff165b80156118805750600554600160a01b900460ff16155b80156118a557506001600160a01b03851660009081526016602052604090205460ff16155b80156118ca57506001600160a01b03851660009081526014602052604090205460ff16155b80156118ef57506001600160a01b03841660009081526014602052604090205460ff16155b1561191d576005805460ff60a01b1916600160a01b17905561190f611ed5565b6005805460ff60a01b191690555b6005546001600160a01b03861660009081526014602052604090205460ff600160a01b90920482161591168061196b57506001600160a01b03851660009081526014602052604090205460ff165b15611974575060005b60008115611bbf576001600160a01b03861660009081526016602052604090205460ff1680156119a657506000601c54115b15611a94576119cb60646119c5601c548861214a90919063ffffffff16565b9061215d565b9050601c54601e54826119de9190612652565b6119e89190612669565b602260008282546119f9919061260a565b9091555050601c54601f54611a0e9083612652565b611a189190612669565b60236000828254611a29919061260a565b9091555050601c54601d54611a3e9083612652565b611a489190612669565b60216000828254611a59919061260a565b9091555050601c54602054611a6e9083612652565b611a789190612669565b60246000828254611a89919061260a565b90915550611ba19050565b6001600160a01b03871660009081526016602052604090205460ff168015611abe57506000601754115b15611ba157611add60646119c56017548861214a90919063ffffffff16565b905060175460195482611af09190612652565b611afa9190612669565b60226000828254611b0b919061260a565b9091555050601754601a54611b209083612652565b611b2a9190612669565b60236000828254611b3b919061260a565b9091555050601754601854611b509083612652565b611b5a9190612669565b60216000828254611b6b919061260a565b9091555050601754601b54611b809083612652565b611b8a9190612669565b60246000828254611b9b919061260a565b90915550505b8015611bb257611bb2873083611c79565b611bbc8186612713565b94505b611bca878787611c79565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600081815260166020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316611c9f5760405162461bcd60e51b8152600401610b279061268b565b6001600160a01b038216611cc55760405162461bcd60e51b8152600401610b27906126d0565b6001600160a01b03831660009081526020819052604090205481811015611d3d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b27565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611d7490849061260a565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611dc091815260200190565b60405180910390a350505050565b6001600160a01b03831660009081526020819052604090205481611d3d5760405162461bcd60e51b81526020600482015260006024820152604401610b27565b6001600160a01b03821660009081526014602052604090205460ff16158015611e5057506001600160a01b03811660009081526014602052604090205460ff16155b15610d7c576001600160a01b03821660009081526016602052604090205460ff1615611e9e576001600160a01b0381166000908152600e60205260408120805490910361133a574290555050565b6001600160a01b0382166000908152600e60205260409020600f548154611ec59190612713565b6002820155426001909101555050565b3060009081526020819052604081205490506000602454602354602154602254611eff919061260a565b611f09919061260a565b611f13919061260a565b90506000821580611f22575081155b15611f2c57505050565b600a54611f3a906010612652565b831115611f5257600a54611f4f906010612652565b92505b600060028360225486611f659190612652565b611f6f9190612669565b611f799190612669565b90506000611f878583612169565b905047611f9382612175565b6000611f9f4783612169565b90506000611fbc876119c56021548561214a90919063ffffffff16565b90506000611fd9886119c56023548661214a90919063ffffffff16565b90506000611ff6896119c56024548761214a90919063ffffffff16565b9050600081836120068688612713565b6120109190612713565b61201a9190612713565b600060228190556021819055602381905560248190556007546040519293506001600160a01b031691859181818185875af1925050503d806000811461207c576040519150601f19603f3d011682016040523d82523d6000602084013e612081565b606091505b509099505087158015906120955750600081115b156120e8576120a48882612335565b602254604080518981526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6006546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612135576040519150601f19603f3d011682016040523d82523d6000602084013e61213a565b606091505b5050505050505050505050505050565b60006121568284612652565b9392505050565b60006121568284612669565b60006121568284612713565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106121aa576121aa612726565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612228573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061224c919061273c565b8160018151811061225f5761225f612726565b60200260200101906001600160a01b031690816001600160a01b0316815250506122aa307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611164565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906122ff908590600090869030904290600401612759565b600060405180830381600087803b15801561231957600080fd5b505af115801561232d573d6000803e3d6000fd5b505050505050565b612360307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611164565b60085460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063f305d71990839060c40160606040518083038185885af11580156123ef573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061241491906127ca565b5050505050565b600060208083528351808285015260005b818110156124485785810183015185820160400152820161242c565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461116157600080fd5b6000806040838503121561249157600080fd5b823561249c81612469565b946020939093013593505050565b6000806000606084860312156124bf57600080fd5b83356124ca81612469565b925060208401356124da81612469565b929592945050506040919091013590565b6000602082840312156124fd57600080fd5b813561215681612469565b8035801515811461108757600080fd5b6000806040838503121561252b57600080fd5b823561253681612469565b915061254460208401612508565b90509250929050565b60006020828403121561255f57600080fd5b61215682612508565b60006020828403121561257a57600080fd5b5035919050565b6000806040838503121561259457600080fd5b823561259f81612469565b915060208301356125af81612469565b809150509250929050565b600181811c908216806125ce57607f821691505b6020821081036125ee57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610a9357610a936125f4565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b8082028115828204841417610a9357610a936125f4565b60008261268657634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610a9357610a936125f4565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561274e57600080fd5b815161215681612469565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156127a95784516001600160a01b031683529383019391830191600101612784565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156127df57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220e2a95457e14bccde9d131aade9312c0152f5b3c9034825fef225baa07776cc9e64736f6c63430008130033

Deployed Bytecode Sourcemap

15636:15993:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8897:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10311:169;;;;;;;;;;-1:-1:-1;10311:169:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;10311:169:0;1023:187:1;15714:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1406:32:1;;;1388:51;;1376:2;1361:18;15714:51:0;1215:230:1;9218:108:0;;;;;;;;;;-1:-1:-1;9306:12:0;;9218:108;;;1596:25:1;;;1584:2;1569:18;9218:108:0;1450:177:1;17336:33:0;;;;;;;;;;;;;;;;17457;;;;;;;;;;;;;;;;17417;;;;;;;;;;;;;;;;9652:492;;;;;;;;;;-1:-1:-1;9652:492:0;;;;;:::i;:::-;;:::i;15817:53::-;;;;;;;;;;;;15863:6;15817:53;;9117:93;;;;;;;;;;-1:-1:-1;9117:93:0;;9200:2;2443:36:1;;2431:2;2416:18;9117:93:0;2301:184:1;10490:215:0;;;;;;;;;;-1:-1:-1;10490:215:0;;;;;:::i;:::-;;:::i;15772:38::-;;;;;;;;;;;;;;;16239:33;;;;;;;;;;-1:-1:-1;16239:33:0;;;;;;;;17376:32;;;;;;;;;;;;;;;;22680:126;;;;;;;;;;-1:-1:-1;22680:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;22770:28:0;22746:4;22770:28;;;:19;:28;;;;;;;;;22680:126;17185:31;;;;;;;;;;;;;;;;17225:28;;;;;;;;;;;;;;;;16319:31;;;;;;;;;;-1:-1:-1;16319:31:0;;;;;;;;;;;9334:127;;;;;;;;;;-1:-1:-1;9334:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;9435:18:0;9408:7;9435:18;;;;;;;;;;;;9334:127;7973:103;;;;;;;;;;;;;:::i;:::-;;20921:121;;;;;;;;;;;;;:::i;21813:161::-;;;;;;;;;;-1:-1:-1;21813:161:0;;;;;:::i;:::-;;:::i;15991:38::-;;;;;;;;;;-1:-1:-1;15991:38:0;;;;-1:-1:-1;;;;;15991:38:0;;;17072:30;;;;;;;;;;;;;;;;7750:87;;;;;;;;;;-1:-1:-1;7823:6:0;;-1:-1:-1;;;;;7823:6:0;7750:87;;17260:31;;;;;;;;;;;;;;;;21705:100;;;;;;;;;;-1:-1:-1;21705:100:0;;;;;:::i;:::-;;:::i;9005:104::-;;;;;;;;;;;;;:::i;22172:304::-;;;;;;;;;;-1:-1:-1;22172:304:0;;;;;:::i;:::-;;:::i;11454:413::-;;;;;;;;;;-1:-1:-1;11454:413:0;;;;;:::i;:::-;;:::i;9469:175::-;;;;;;;;;;-1:-1:-1;9469:175:0;;;;;:::i;:::-;;:::i;17146:32::-;;;;;;;;;;;;;;;;16972:57;;;;;;;;;;-1:-1:-1;16972:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16279:33;;;;;;;;;;-1:-1:-1;16279:33:0;;;;;;;;;;;21982:182;;;;;;;;;;-1:-1:-1;21982:182:0;;;;;:::i;:::-;;:::i;16036:40::-;;;;;;;;;;-1:-1:-1;16036:40:0;;;;-1:-1:-1;;;;;16036:40:0;;;16130:29;;;;;;;;;;;;;;;;16666:39;;;;;;;;;;-1:-1:-1;16666:39:0;;;;;;;;20478:195;;;;;;;;;;;;;:::i;21112:497::-;;;;;;;;;;-1:-1:-1;21112:497:0;;;;;:::i;:::-;;:::i;16083:38::-;;;;;;;;;;-1:-1:-1;16083:38:0;;;;-1:-1:-1;;;;;16083:38:0;;;17038:27;;;;;;;;;;;;;;;;10152:151;;;;;;;;;;-1:-1:-1;10152:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;10268:18:0;;;10241:7;10268:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;10152:151;16906:57;;;;;;;;;;-1:-1:-1;16906:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16166:33;;;;;;;;;;;;;;;;16801:39;;;;;;;;;;-1:-1:-1;16801:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;20734:135;;;;;;;;;;;;;:::i;17497:35::-;;;;;;;;;;;;;;;;17109:30;;;;;;;;;;;;;;;;8084:201;;;;;;;;;;-1:-1:-1;8084:201:0;;;;;:::i;:::-;;:::i;17298:31::-;;;;;;;;;;;;;;;;15877:75;;;;;;;;;;;;15910:42;15877:75;;16206:24;;;;;;;;;;;;;;;;17539:34;;;;;;;;;;;;;;;;8897:100;8951:13;8984:5;8977:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8897:100;:::o;10311:169::-;10394:4;10411:39;4454:10;10434:7;10443:6;10411:8;:39::i;:::-;-1:-1:-1;10468:4:0;10311:169;;;;;:::o;9652:492::-;9792:4;9809:36;9819:6;9827:9;9838:6;9809:9;:36::i;:::-;-1:-1:-1;;;;;9885:19:0;;9858:24;9885:19;;;:11;:19;;;;;;;;4454:10;9885:33;;;;;;;;9937:26;;;;9929:79;;;;-1:-1:-1;;;9929:79:0;;4801:2:1;9929:79:0;;;4783:21:1;4840:2;4820:18;;;4813:30;4879:34;4859:18;;;4852:62;-1:-1:-1;;;4930:18:1;;;4923:38;4978:19;;9929:79:0;;;;;;;;;10044:57;10053:6;4454:10;10094:6;10075:16;:25;10044:8;:57::i;:::-;-1:-1:-1;10132:4:0;;9652:492;-1:-1:-1;;;;9652:492:0:o;10490:215::-;4454:10;10578:4;10627:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;10627:34:0;;;;;;;;;;10578:4;;10595:80;;10618:7;;10627:47;;10664:10;;10627:47;:::i;:::-;10595:8;:80::i;7973:103::-;7823:6;;-1:-1:-1;;;;;7823:6:0;4454:10;7885:23;7877:68;;;;-1:-1:-1;;;7877:68:0;;;;;;;:::i;:::-;8038:30:::1;8065:1;8038:18;:30::i;:::-;7973:103::o:0;20921:121::-;7823:6;;20973:4;;-1:-1:-1;;;;;7823:6:0;4454:10;7885:23;7877:68;;;;-1:-1:-1;;;7877:68:0;;;;;;;:::i;:::-;-1:-1:-1;20990:14:0::1;:22:::0;;-1:-1:-1;;20990:22:0::1;::::0;;;20921:121;:::o;21813:161::-;7823:6;;-1:-1:-1;;;;;7823:6:0;4454:10;7885:23;7877:68;;;;-1:-1:-1;;;7877:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21926:33:0;;;::::1;;::::0;;;:25:::1;:33;::::0;;;;:40;;-1:-1:-1;;21926:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21813:161::o;21705:100::-;7823:6;;-1:-1:-1;;;;;7823:6:0;4454:10;7885:23;7877:68;;;;-1:-1:-1;;;7877:68:0;;;;;;;:::i;:::-;21776:11:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;21776:21:0;;::::1;::::0;;;::::1;::::0;;21705:100::o;9005:104::-;9061:13;9094:7;9087:14;;;;;:::i;22172:304::-;7823:6;;-1:-1:-1;;;;;7823:6:0;4454:10;7885:23;7877:68;;;;-1:-1:-1;;;7877:68:0;;;;;;;:::i;:::-;22316:13:::1;-1:-1:-1::0;;;;;22308:21:0::1;:4;-1:-1:-1::0;;;;;22308:21:0::1;::::0;22286:128:::1;;;::::0;-1:-1:-1;;;22286:128:0;;5833:2:1;22286:128:0::1;::::0;::::1;5815:21:1::0;5872:2;5852:18;;;5845:30;5911:34;5891:18;;;5884:62;5982:27;5962:18;;;5955:55;6027:19;;22286:128:0::1;5631:421:1::0;22286:128:0::1;22427:41;22456:4;22462:5;22427:28;:41::i;:::-;22172:304:::0;;:::o;11454:413::-;4454:10;11547:4;11591:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11591:34:0;;;;;;;;;;11644:35;;;;11636:85;;;;-1:-1:-1;;;11636:85:0;;6259:2:1;11636:85:0;;;6241:21:1;6298:2;6278:18;;;6271:30;6337:34;6317:18;;;6310:62;-1:-1:-1;;;6388:18:1;;;6381:35;6433:19;;11636:85:0;6057:401:1;11636:85:0;11757:67;4454:10;11780:7;11808:15;11789:16;:34;11757:8;:67::i;:::-;-1:-1:-1;11855:4:0;;11454:413;-1:-1:-1;;;11454:413:0:o;9469:175::-;9555:4;9572:42;4454:10;9596:9;9607:6;9572:9;:42::i;21982:182::-;7823:6;;-1:-1:-1;;;;;7823:6:0;4454:10;7885:23;7877:68;;;;-1:-1:-1;;;7877:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22067:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;22067:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;22122:34;;1163:41:1;;;22122:34:0::1;::::0;1136:18:1;22122:34:0::1;;;;;;;21982:182:::0;;:::o;20478:195::-;7823:6;;-1:-1:-1;;;;;7823:6:0;4454:10;7885:23;7877:68;;;;-1:-1:-1;;;7877:68:0;;;;;;;:::i;:::-;20540:13:::1;::::0;::::1;::::0;::::1;;;20539:14;20531:37;;;::::0;-1:-1:-1;;;20531:37:0;;6665:2:1;20531:37:0::1;::::0;::::1;6647:21:1::0;6704:2;6684:18;;;6677:30;-1:-1:-1;;;6723:18:1;;;6716:40;6773:18;;20531:37:0::1;6463:334:1::0;20531:37:0::1;20593:12;20579:11;:26:::0;20616:11:::1;:18:::0;;-1:-1:-1;;20645:20:0;;;;;20478:195::o;21112:497::-;7823:6;;21220:4;;-1:-1:-1;;;;;7823:6:0;4454:10;7885:23;7877:68;;;;-1:-1:-1;;;7877:68:0;;;;;;;:::i;:::-;21299:6:::1;21278:13;9306:12:::0;;;9218:108;21278:13:::1;:17;::::0;21294:1:::1;21278:17;:::i;:::-;21277:28;;;;:::i;:::-;21264:9;:41;;21242:144;;;::::0;-1:-1:-1;;;21242:144:0;;7399:2:1;21242:144:0::1;::::0;::::1;7381:21:1::0;7438:2;7418:18;;;7411:30;7477:34;7457:18;;;7450:62;-1:-1:-1;;;7528:18:1;;;7521:51;7589:19;;21242:144:0::1;7197:417:1::0;21242:144:0::1;21454:4;21433:13;9306:12:::0;;;9218:108;21433:13:::1;:17;::::0;21449:1:::1;21433:17;:::i;:::-;21432:26;;;;:::i;:::-;21419:9;:39;;21397:141;;;::::0;-1:-1:-1;;;21397:141:0;;7821:2:1;21397:141:0::1;::::0;::::1;7803:21:1::0;7860:2;7840:18;;;7833:30;7899:34;7879:18;;;7872:62;-1:-1:-1;;;7950:18:1;;;7943:50;8010:19;;21397:141:0::1;7619:416:1::0;21397:141:0::1;-1:-1:-1::0;21549:18:0::1;:30:::0;;;21597:4:::1;7956:1;21112:497:::0;;;:::o;20734:135::-;7823:6;;20794:4;;-1:-1:-1;;;;;7823:6:0;4454:10;7885:23;7877:68;;;;-1:-1:-1;;;7877:68:0;;;;;;;:::i;:::-;-1:-1:-1;20811:20:0::1;:28:::0;;-1:-1:-1;;20811:28:0::1;::::0;;;20734:135;:::o;8084:201::-;7823:6;;-1:-1:-1;;;;;7823:6:0;4454:10;7885:23;7877:68;;;;-1:-1:-1;;;7877:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8173:22:0;::::1;8165:73;;;::::0;-1:-1:-1;;;8165:73:0;;8242:2:1;8165:73:0::1;::::0;::::1;8224:21:1::0;8281:2;8261:18;;;8254:30;8320:34;8300:18;;;8293:62;-1:-1:-1;;;8371:18:1;;;8364:36;8417:19;;8165:73:0::1;8040:402:1::0;8165:73:0::1;8249:28;8268:8;8249:18;:28::i;:::-;8084:201:::0;:::o;13405:380::-;-1:-1:-1;;;;;13541:19:0;;13533:68;;;;-1:-1:-1;;;13533:68:0;;8649:2:1;13533:68:0;;;8631:21:1;8688:2;8668:18;;;8661:30;8727:34;8707:18;;;8700:62;-1:-1:-1;;;8778:18:1;;;8771:34;8822:19;;13533:68:0;8447:400:1;13533:68:0;-1:-1:-1;;;;;13620:21:0;;13612:68;;;;-1:-1:-1;;;13612:68:0;;9054:2:1;13612:68:0;;;9036:21:1;9093:2;9073:18;;;9066:30;9132:34;9112:18;;;9105:62;-1:-1:-1;;;9183:18:1;;;9176:32;9225:19;;13612:68:0;8852:398:1;13612:68:0;-1:-1:-1;;;;;13693:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;13745:32;;1596:25:1;;;13745:32:0;;1569:18:1;13745:32:0;;;;;;;13405:380;;;:::o;22814:5130::-;-1:-1:-1;;;;;22946:18:0;;22938:68;;;;-1:-1:-1;;;22938:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23025:16:0;;23017:64;;;;-1:-1:-1;;;23017:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23101:13:0;;;;;;:7;:13;;;;;;;;23100:14;23092:33;;;;-1:-1:-1;;;23092:33:0;;10267:2:1;23092:33:0;;;10249:21:1;10306:1;10286:18;;;10279:29;-1:-1:-1;;;10324:18:1;;;10317:36;10370:18;;23092:33:0;10065:329:1;23092:33:0;23142:6;23152:1;23142:11;23138:93;;23170:28;23186:4;23192:2;23196:1;23170:15;:28::i;:::-;22814:5130;;;:::o;23138:93::-;7823:6;;-1:-1:-1;;;;;7823:6:0;-1:-1:-1;;;;;23247:15:0;:4;-1:-1:-1;;;;;23247:15:0;;23243:102;;23279:33;23295:4;23301:2;23305:6;23279:15;:33::i;23243:102::-;23361:14;;;;23357:2264;;;23397:8;;-1:-1:-1;;;23397:8:0;;;;23392:2218;;23431:13;;;;;;;23426:223;;-1:-1:-1;;;;;23503:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;23532:23:0;;;;;;:19;:23;;;;;;;;23503:52;23469:160;;;;-1:-1:-1;;;23469:160:0;;10601:2:1;23469:160:0;;;10583:21:1;10640:2;10620:18;;;10613:30;-1:-1:-1;;;10659:18:1;;;10652:52;10721:18;;23469:160:0;10399:346:1;23469:160:0;23805:20;;;;23801:641;;;7823:6;;-1:-1:-1;;;;;23880:13:0;;;7823:6;;23880:13;;;;:72;;;23936:15;-1:-1:-1;;;;;23922:30:0;:2;-1:-1:-1;;;;;23922:30:0;;;23880:72;:129;;;;;23995:13;-1:-1:-1;;;;;23981:28:0;:2;-1:-1:-1;;;;;23981:28:0;;;23880:129;23850:573;;;24127:9;24098:39;;;;:28;:39;;;;;;24173:12;-1:-1:-1;24060:258:0;;;;-1:-1:-1;;;24060:258:0;;10952:2:1;24060:258:0;;;10934:21:1;10991:2;10971:18;;;10964:30;11030:34;11010:18;;;11003:62;11101:34;11081:18;;;11074:62;-1:-1:-1;;;11152:19:1;;;11145:40;11202:19;;24060:258:0;10750:477:1;24060:258:0;24374:9;24345:39;;;;:28;:39;;;;;24387:12;24345:54;;23850:573;-1:-1:-1;;;;;24516:31:0;;;;;;:25;:31;;;;;;;;:86;;;;-1:-1:-1;;;;;;24573:29:0;;;;;;:25;:29;;;;;;;;24572:30;24516:86;24490:1105;;;24689:14;;24679:6;:24;;24645:157;;;;-1:-1:-1;;;24645:157:0;;11434:2:1;24645:157:0;;;11416:21:1;11473:2;11453:18;;;11446:30;11512:34;11492:18;;;11485:62;-1:-1:-1;;;11563:18:1;;;11556:45;11618:19;;24645:157:0;11232:411:1;24645:157:0;24885:9;;-1:-1:-1;;;;;9435:18:0;;9408:7;9435:18;;;;;;;;;;;24859:22;;:6;:22;:::i;:::-;:35;;24825:140;;;;-1:-1:-1;;;24825:140:0;;11850:2:1;24825:140:0;;;11832:21:1;11889:2;11869:18;;;11862:30;-1:-1:-1;;;11908:18:1;;;11901:49;11967:18;;24825:140:0;11648:343:1;24825:140:0;24490:1105;;;-1:-1:-1;;;;;25063:29:0;;;;;;:25;:29;;;;;;;;:86;;;;-1:-1:-1;;;;;;25118:31:0;;;;;;:25;:31;;;;;;;;25117:32;25063:86;25037:558;;;25236:14;;25226:6;:24;;25192:158;;;;-1:-1:-1;;;25192:158:0;;12198:2:1;25192:158:0;;;12180:21:1;12237:2;12217:18;;;12210:30;12276:34;12256:18;;;12249:62;-1:-1:-1;;;12327:18:1;;;12320:46;12383:19;;25192:158:0;11996:412:1;25037:558:0;-1:-1:-1;;;;;25381:29:0;;;;;;:25;:29;;;;;;;;25376:219;;25495:9;;-1:-1:-1;;;;;9435:18:0;;9408:7;9435:18;;;;;;;;;;;25469:22;;:6;:22;:::i;:::-;:35;;25435:140;;;;-1:-1:-1;;;25435:140:0;;11850:2:1;25435:140:0;;;11832:21:1;11889:2;11869:18;;;11862:30;-1:-1:-1;;;11908:18:1;;;11901:49;11967:18;;25435:140:0;11648:343:1;25435:140:0;-1:-1:-1;;;;;25637:25:0;;;;;;:19;:25;;;;;;;;:52;;;;-1:-1:-1;;;;;;25666:23:0;;;;;;:19;:23;;;;;;;;25637:52;25633:119;;;25725:15;25706:16;:34;25633:119;-1:-1:-1;;;;;25766:25:0;;;;;;:19;:25;;;;;;;;25762:111;;;25808:32;25823:4;25829:2;25833:6;25808:14;:32::i;25762:111::-;25883:23;25897:4;25903:2;25883:13;:23::i;:::-;25966:4;25917:28;9435:18;;;;;;;;;;;26022;;25998:42;;;;;;;26069:35;;-1:-1:-1;26093:11:0;;;;;;;26069:35;:61;;;;-1:-1:-1;26122:8:0;;-1:-1:-1;;;26122:8:0;;;;26121:9;26069:61;:110;;;;-1:-1:-1;;;;;;26148:31:0;;;;;;:25;:31;;;;;;;;26147:32;26069:110;:153;;;;-1:-1:-1;;;;;;26197:25:0;;;;;;:19;:25;;;;;;;;26196:26;26069:153;:194;;;;-1:-1:-1;;;;;;26240:23:0;;;;;;:19;:23;;;;;;;;26239:24;26069:194;26051:326;;;26290:8;:15;;-1:-1:-1;;;;26290:15:0;-1:-1:-1;;;26290:15:0;;;26322:10;:8;:10::i;:::-;26349:8;:16;;-1:-1:-1;;;;26349:16:0;;;26051:326;26405:8;;-1:-1:-1;;;;;26515:25:0;;26389:12;26515:25;;;26405:8;26515:25;;;;;;26405:8;-1:-1:-1;;;26405:8:0;;;;;26404:9;;26515:25;;:52;;-1:-1:-1;;;;;;26544:23:0;;;;;;:19;:23;;;;;;;;26515:52;26511:100;;;-1:-1:-1;26594:5:0;26511:100;26623:12;26728:7;26724:1167;;;-1:-1:-1;;;;;26780:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;26829:1;26813:13;;:17;26780:50;26776:966;;;26858:34;26888:3;26858:25;26869:13;;26858:6;:10;;:25;;;;:::i;:::-;:29;;:34::i;:::-;26851:41;;26961:13;;26941:16;;26934:4;:23;;;;:::i;:::-;26933:41;;;;:::i;:::-;26911:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;27047:13:0;;27025:18;;27018:25;;:4;:25;:::i;:::-;27017:43;;;;:::i;:::-;26993:20;;:67;;;;;;;:::i;:::-;;;;-1:-1:-1;;27129:13:0;;27109:16;;27102:23;;:4;:23;:::i;:::-;27101:41;;;;:::i;:::-;27079:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;27213:13:0;;27192:17;;27185:24;;:4;:24;:::i;:::-;27184:42;;;;:::i;:::-;27161:19;;:65;;;;;;;:::i;:::-;;;;-1:-1:-1;26776:966:0;;-1:-1:-1;26776:966:0;;-1:-1:-1;;;;;27288:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;27338:1;27323:12;;:16;27288:51;27284:458;;;27367:33;27396:3;27367:24;27378:12;;27367:6;:10;;:24;;;;:::i;:33::-;27360:40;;27468:12;;27449:15;;27442:4;:22;;;;:::i;:::-;27441:39;;;;:::i;:::-;27419:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;27552:12:0;;27531:17;;27524:24;;:4;:24;:::i;:::-;27523:41;;;;:::i;:::-;27499:20;;:65;;;;;;;:::i;:::-;;;;-1:-1:-1;;27632:12:0;;27613:15;;27606:22;;:4;:22;:::i;:::-;27605:39;;;;:::i;:::-;27583:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;27714:12:0;;27694:16;;27687:23;;:4;:23;:::i;:::-;27686:40;;;;:::i;:::-;27663:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;27284:458:0;27762:8;;27758:91;;27791:42;27807:4;27821;27828;27791:15;:42::i;:::-;27865:14;27875:4;27865:14;;:::i;:::-;;;26724:1167;27903:33;27919:4;27925:2;27929:6;27903:15;:33::i;:::-;22927:5017;;;;22814:5130;;;:::o;8293:191::-;8386:6;;;-1:-1:-1;;;;;8403:17:0;;;-1:-1:-1;;;;;;8403:17:0;;;;;;;8436:40;;8386:6;;;8403:17;8386:6;;8436:40;;8367:16;;8436:40;8356:128;8293:191;:::o;22484:188::-;-1:-1:-1;;;;;22567:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;22567:39:0;;;;;;;;;;22624:40;;22567:39;;:31;22624:40;;;22484:188;;:::o;10713:733::-;-1:-1:-1;;;;;10853:20:0;;10845:70;;;;-1:-1:-1;;;10845:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10934:23:0;;10926:71;;;;-1:-1:-1;;;10926:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11094:17:0;;11070:21;11094:17;;;;;;;;;;;11130:23;;;;11122:74;;;;-1:-1:-1;;;11122:74:0;;12748:2:1;11122:74:0;;;12730:21:1;12787:2;12767:18;;;12760:30;12826:34;12806:18;;;12799:62;-1:-1:-1;;;12877:18:1;;;12870:36;12923:19;;11122:74:0;12546:402:1;11122:74:0;-1:-1:-1;;;;;11232:17:0;;;:9;:17;;;;;;;;;;;11252:22;;;11232:42;;11296:20;;;;;;;;:30;;11268:6;;11232:9;11296:30;;11268:6;;11296:30;:::i;:::-;;;;;;;;11361:9;-1:-1:-1;;;;;11344:35:0;11353:6;-1:-1:-1;;;;;11344:35:0;;11372:6;11344:35;;;;1596:25:1;;1584:2;1569:18;;1450:177;11344:35:0;;;;;;;;10834:612;10713:733;;;:::o;11875:516::-;-1:-1:-1;;;;;12090:17:0;;12066:21;12090:17;;;;;;;;;;;12126:10;12118:23;;;;-1:-1:-1;;;12118:23:0;;13155:2:1;12118:23:0;;;13137:21:1;-1:-1:-1;13174:18:1;;;13167:29;13213:18;;12118:23:0;12953:284:1;28549:630:0;-1:-1:-1;;;;;28623:25:0;;;;;;:19;:25;;;;;;;;28622:26;:54;;;;-1:-1:-1;;;;;;28653:23:0;;;;;;:19;:23;;;;;;;;28652:24;28622:54;28618:554;;;-1:-1:-1;;;;;28697:31:0;;;;;;:25;:31;;;;;;;;28693:468;;;-1:-1:-1;;;;;28787:18:0;;28749:35;28787:18;;;:14;:18;;;;;28828:22;;28787:18;;28828:27;28824:78;;28884:15;28859:40;;-1:-1:-1;;22172:304:0:o;28693:468::-;-1:-1:-1;;;;;28980:20:0;;28942:35;28980:20;;;:14;:20;;;;;29069:16;;29044:22;;:41;;29069:16;29044:41;:::i;:::-;29019:22;;;:66;29130:15;29104:23;;;;:41;28549:630;;:::o;29716:1910::-;29799:4;29755:23;9435:18;;;;;;;;;;;29755:50;;29816:25;29948:19;;29912:20;;29878:18;;29844;;:52;;;;:::i;:::-;:88;;;;:::i;:::-;:123;;;;:::i;:::-;29816:151;-1:-1:-1;29978:12:0;30007:20;;;:46;;-1:-1:-1;30031:22:0;;30007:46;30003:85;;;30070:7;;;29716:1910::o;30003:85::-;30122:18;;:23;;30143:2;30122:23;:::i;:::-;30104:15;:41;30100:115;;;30180:18;;:23;;30201:2;30180:23;:::i;:::-;30162:41;;30100:115;30276:23;30363:1;30343:17;30321:18;;30303:15;:36;;;;:::i;:::-;30302:58;;;;:::i;:::-;:62;;;;:::i;:::-;30276:88;-1:-1:-1;30375:26:0;30404:36;:15;30276:88;30404:19;:36::i;:::-;30375:65;-1:-1:-1;30481:21:0;30515:36;30375:65;30515:16;:36::i;:::-;30564:18;30585:44;:21;30611:17;30585:25;:44::i;:::-;30564:65;;30642:18;30663:57;30702:17;30663:34;30678:18;;30663:10;:14;;:34;;;;:::i;:57::-;30642:78;;30731:25;30759:59;30800:17;30759:36;30774:20;;30759:10;:14;;:36;;;;:::i;:59::-;30731:87;;30829:24;30856:58;30896:17;30856:35;30871:19;;30856:10;:14;;:35;;;;:::i;:58::-;30829:85;-1:-1:-1;30927:23:0;30829:85;30979:17;30953:23;30966:10;30953;:23;:::i;:::-;:43;;;;:::i;:::-;:62;;;;:::i;:::-;31049:1;31028:18;:22;;;31061:18;:22;;;31094:20;:24;;;31129:19;:23;;;31187:17;;31179:61;;30927:88;;-1:-1:-1;;;;;;31187:17:0;;31218;;31179:61;31049:1;31179:61;31218:17;31187;31179:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31165:75:0;;-1:-1:-1;;31257:19:0;;;;;:42;;;31298:1;31280:15;:19;31257:42;31253:278;;;31316:46;31329:15;31346;31316:12;:46::i;:::-;31486:18;;31382:137;;;13654:25:1;;;13710:2;13695:18;;13688:34;;;13738:18;;;13731:34;;;;31382:137:0;;;;;;13642:2:1;31382:137:0;;;31253:278;31563:15;;31555:63;;-1:-1:-1;;;;;31563:15:0;;;;31592:21;;31555:63;;;;31592:21;31563:15;31555:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;29716:1910:0:o;1571:98::-;1629:7;1656:5;1660:1;1656;:5;:::i;:::-;1649:12;1571:98;-1:-1:-1;;;1571:98:0:o;1677:::-;1735:7;1762:5;1766:1;1762;:5;:::i;1465:98::-;1523:7;1550:5;1554:1;1550;:5;:::i;27952:589::-;28102:16;;;28116:1;28102:16;;;;;;;;28078:21;;28102:16;;;;;;;;;;-1:-1:-1;28102:16:0;28078:40;;28147:4;28129;28134:1;28129:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;28129:23:0;;;-1:-1:-1;;;;;28129:23:0;;;;;28173:15;-1:-1:-1;;;;;28173:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28163:4;28168:1;28163:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;28163:32:0;;;-1:-1:-1;;;;;28163:32:0;;;;;28208:62;28225:4;28240:15;28258:11;28208:8;:62::i;:::-;28309:224;;-1:-1:-1;;;28309:224:0;;-1:-1:-1;;;;;28309:15:0;:66;;;;:224;;28390:11;;28416:1;;28460:4;;28487;;28507:15;;28309:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28007:534;27952:589;:::o;29187:521::-;29335:62;29352:4;29367:15;29385:11;29335:8;:62::i;:::-;29644:15;;29440:260;;-1:-1:-1;;;29440:260:0;;29512:4;29440:260;;;15630:34:1;15680:18;;;15673:34;;;29558:1:0;15723:18:1;;;15716:34;;;15766:18;;;15759:34;-1:-1:-1;;;;;29644:15:0;;;15809:19:1;;;15802:44;29674:15:0;15862:19:1;;;15855:35;29440:15:0;:31;;;;;;29479:9;;15564:19:1;;29440:260:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29187:521;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1632:456::-;1709:6;1717;1725;1778:2;1766:9;1757:7;1753:23;1749:32;1746:52;;;1794:1;1791;1784:12;1746:52;1833:9;1820:23;1852:31;1877:5;1852:31;:::i;:::-;1902:5;-1:-1:-1;1959:2:1;1944:18;;1931:32;1972:33;1931:32;1972:33;:::i;:::-;1632:456;;2024:7;;-1:-1:-1;;;2078:2:1;2063:18;;;;2050:32;;1632:456::o;2490:247::-;2549:6;2602:2;2590:9;2581:7;2577:23;2573:32;2570:52;;;2618:1;2615;2608:12;2570:52;2657:9;2644:23;2676:31;2701:5;2676:31;:::i;2742:160::-;2807:20;;2863:13;;2856:21;2846:32;;2836:60;;2892:1;2889;2882:12;2907:315;2972:6;2980;3033:2;3021:9;3012:7;3008:23;3004:32;3001:52;;;3049:1;3046;3039:12;3001:52;3088:9;3075:23;3107:31;3132:5;3107:31;:::i;:::-;3157:5;-1:-1:-1;3181:35:1;3212:2;3197:18;;3181:35;:::i;:::-;3171:45;;2907:315;;;;;:::o;3451:180::-;3507:6;3560:2;3548:9;3539:7;3535:23;3531:32;3528:52;;;3576:1;3573;3566:12;3528:52;3599:26;3615:9;3599:26;:::i;3636:180::-;3695:6;3748:2;3736:9;3727:7;3723:23;3719:32;3716:52;;;3764:1;3761;3754:12;3716:52;-1:-1:-1;3787:23:1;;3636:180;-1:-1:-1;3636:180:1:o;3821:388::-;3889:6;3897;3950:2;3938:9;3929:7;3925:23;3921:32;3918:52;;;3966:1;3963;3956:12;3918:52;4005:9;3992:23;4024:31;4049:5;4024:31;:::i;:::-;4074:5;-1:-1:-1;4131:2:1;4116:18;;4103:32;4144:33;4103:32;4144:33;:::i;:::-;4196:7;4186:17;;;3821:388;;;;;:::o;4214:380::-;4293:1;4289:12;;;;4336;;;4357:61;;4411:4;4403:6;4399:17;4389:27;;4357:61;4464:2;4456:6;4453:14;4433:18;4430:38;4427:161;;4510:10;4505:3;4501:20;4498:1;4491:31;4545:4;4542:1;4535:15;4573:4;4570:1;4563:15;4427:161;;4214:380;;;:::o;5008:127::-;5069:10;5064:3;5060:20;5057:1;5050:31;5100:4;5097:1;5090:15;5124:4;5121:1;5114:15;5140:125;5205:9;;;5226:10;;;5223:36;;;5239:18;;:::i;5270:356::-;5472:2;5454:21;;;5491:18;;;5484:30;5550:34;5545:2;5530:18;;5523:62;5617:2;5602:18;;5270:356::o;6802:168::-;6875:9;;;6906;;6923:15;;;6917:22;;6903:37;6893:71;;6944:18;;:::i;6975:217::-;7015:1;7041;7031:132;;7085:10;7080:3;7076:20;7073:1;7066:31;7120:4;7117:1;7110:15;7148:4;7145:1;7138:15;7031:132;-1:-1:-1;7177:9:1;;6975:217::o;9255:401::-;9457:2;9439:21;;;9496:2;9476:18;;;9469:30;9535:34;9530:2;9515:18;;9508:62;-1:-1:-1;;;9601:2:1;9586:18;;9579:35;9646:3;9631:19;;9255:401::o;9661:399::-;9863:2;9845:21;;;9902:2;9882:18;;;9875:30;9941:34;9936:2;9921:18;;9914:62;-1:-1:-1;;;10007:2:1;9992:18;;9985:33;10050:3;10035:19;;9661:399::o;12413:128::-;12480:9;;;12501:11;;;12498:37;;;12515:18;;:::i;13908:127::-;13969:10;13964:3;13960:20;13957:1;13950:31;14000:4;13997:1;13990:15;14024:4;14021:1;14014:15;14040:251;14110:6;14163:2;14151:9;14142:7;14138:23;14134:32;14131:52;;;14179:1;14176;14169:12;14131:52;14211:9;14205:16;14230:31;14255:5;14230:31;:::i;14296:980::-;14558:4;14606:3;14595:9;14591:19;14637:6;14626:9;14619:25;14663:2;14701:6;14696:2;14685:9;14681:18;14674:34;14744:3;14739:2;14728:9;14724:18;14717:31;14768:6;14803;14797:13;14834:6;14826;14819:22;14872:3;14861:9;14857:19;14850:26;;14911:2;14903:6;14899:15;14885:29;;14932:1;14942:195;14956:6;14953:1;14950:13;14942:195;;;15021:13;;-1:-1:-1;;;;;15017:39:1;15005:52;;15112:15;;;;15077:12;;;;15053:1;14971:9;14942:195;;;-1:-1:-1;;;;;;;15193:32:1;;;;15188:2;15173:18;;15166:60;-1:-1:-1;;;15257:3:1;15242:19;15235:35;15154:3;14296:980;-1:-1:-1;;;14296:980:1:o;15901:306::-;15989:6;15997;16005;16058:2;16046:9;16037:7;16033:23;16029:32;16026:52;;;16074:1;16071;16064:12;16026:52;16103:9;16097:16;16087:26;;16153:2;16142:9;16138:18;16132:25;16122:35;;16197:2;16186:9;16182:18;16176:25;16166:35;;15901:306;;;;;:::o

Swarm Source

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