ETH Price: $3,519.71 (+0.39%)
Gas: 2 Gwei

Token

Shark Tank (STK)
 

Overview

Max Total Supply

1,000,000,000 STK

Holders

158

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
3,942,415.211782043640106158 STK

Value
$0.00
0x035abc552201330f113a0e09c2b080727238ae2c
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:
SharkTank

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/*
Introducing Shark Tank (STK), the revolutionary meme-inspired cryptocurrency 
that's making waves in the digital financial world! 🦈🚀

* http://sharktankerc.com/
* https://t.me/SharkTankErc20
* https://twitter.com/SharkTankErc
*/

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

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

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

    function transfer(
        address recipient,
        uint256 amount
    ) external returns (bool);

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

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

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

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

        return c;
    }

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

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

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

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

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

        return c;
    }

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

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

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

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

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

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

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

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

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

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

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

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

library IterableMapping {
    struct Map {
        address[] keys;
        mapping(address => uint) values;
        mapping(address => uint) indexOf;
        mapping(address => bool) inserted;
    }

    function get(Map storage map, address key) public view returns (uint) {
        return map.values[key];
    }

    function getIndexOfKey(
        Map storage map,
        address key
    ) public view returns (int) {
        if (!map.inserted[key]) {
            return -1;
        }
        return int(map.indexOf[key]);
    }

    function getKeyAtIndex(
        Map storage map,
        uint index
    ) public view returns (address) {
        return map.keys[index];
    }

    function size(Map storage map) public view returns (uint) {
        return map.keys.length;
    }

    function set(Map storage map, address key, uint val) public {
        if (map.inserted[key]) {
            map.values[key] = val;
        } else {
            map.inserted[key] = true;
            map.values[key] = val;
            map.indexOf[key] = map.keys.length;
            map.keys.push(key);
        }
    }

    function remove(Map storage map, address key) public {
        if (!map.inserted[key]) {
            return;
        }

        delete map.inserted[key];
        delete map.values[key];

        uint index = map.indexOf[key];
        uint lastIndex = map.keys.length - 1;
        address lastKey = map.keys[lastIndex];

        map.indexOf[lastKey] = index;
        delete map.indexOf[key];

        map.keys[index] = lastKey;
        map.keys.pop();
    }
}

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

contract SharkTank is Ownable, ERC20 {
    IRouter public uniswapV2Router;
    address public immutable uniswapV2Pair;
    string private constant _name = "Shark Tank";
    string private constant _symbol = "STK";
    uint8 private constant _decimals = 18;
    bool public isTradingEnabled;
    uint256 constant maxSupply = 1000000000 * (10 ** 18);
    uint256 public maxWalletAmount = (maxSupply * 250) / 10000;
    uint256 public maxTxAmount = (maxSupply * 250) / 10000;
    bool private _swapping;
    address private swap;
    uint256 private maxWalletTx;
    uint256 private minimumSwapAmt;
    uint256 public minTokenSwap = (maxSupply * 3) / 10000;
    address private marketingWallet;

    struct TaxConfig {
        bytes23 periodName;
        uint8 blocksInPeriod;
        uint256 timeInPeriod;
        uint8 liquidityFeeOnBuy;
        uint8 liquidityFeeOnSell;
        uint8 marketingFeeOnBuy;
        uint8 marketingFeeOnSell;
        uint8 buyBackFeeOnBuy;
        uint8 buyBackFeeOnSell;
        uint8 burnFeeOnBuy;
        uint8 burnFeeOnSell;
    }

    TaxConfig private _taxes =
        TaxConfig("taxes", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); // 0% tax
 
    mapping(address => bool) private _isAllowedTrade;
    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcludedMaxTxLimit;
    mapping(address => bool) private _isExcludedFromMaxWalletLimit;
    mapping(address => bool) public automatedMarketMakerPairs;
    mapping(address => uint256) public swapAmount;

    uint8 private _liquidityFee;
    uint8 private _marketingFee;
    uint8 private _buyBackFee;
    uint8 private _burnFee;
    uint8 private _totalFee;

    event AutomatedMarketMakerPairChange(
        address indexed pair,
        bool indexed value
    );
    event UniswapV2RouterChange(
        address indexed newAddress,
        address indexed oldAddress
    );
    event StructureChange(
        string indexed indentifier,
        address indexed newWallet,
        address indexed oldWallet
    );

    event MaxTransactionAmountChange(
        uint256 indexed newValue,
        uint256 indexed oldValue
    );
    event MaxWalletAmountChange(
        uint256 indexed newValue,
        uint256 indexed oldValue
    );
    event ExcludeFromFeesChange(address indexed account, bool isExcluded);
    event ExcludeFromMaxTransferChange(
        address indexed account,
        bool isExcluded
    );
    event ExcludeFromMaxStructureChange(
        address indexed account,
        bool isExcluded
    );

    event MinTokenAmountSwap(
        uint256 indexed newValue,
        uint256 indexed oldValue
    );
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    event TokenBurn(uint8 _burnFee, uint256 burnAmount);
    event FeesApplied(
        uint8 liquidityFee,
        uint8 marketingFee,
        uint8 buyBackFee,
        uint8 burnFee,
        uint8 totalFee
    );

    constructor() ERC20(_name, _symbol) {
        IRouter _uniswapV2Router = IRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        address _uniswapV2Pair = IFactory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;
        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);
        marketingWallet = address(0x0ffa65B7C7CAab69aB59B20A6a73Bcb8D519aF05);
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[marketingWallet] = true;
        _isExcludedFromFee[address(this)] = true;
        _isAllowedTrade[owner()] = true;
        _isExcludedMaxTxLimit[address(this)] = true;
        _isExcludedMaxTxLimit[owner()] = true;
        _isExcludedMaxTxLimit[marketingWallet] = true;

        _isExcludedFromMaxWalletLimit[_uniswapV2Pair] = true;
        _isExcludedFromMaxWalletLimit[address(uniswapV2Router)] = true;
        _isExcludedFromMaxWalletLimit[address(this)] = true;
        _isExcludedFromMaxWalletLimit[owner()] = true;
        _isExcludedFromMaxWalletLimit[marketingWallet] = true;
        _isExcludedFromMaxWalletLimit[address(0xdead)] = true;

        _mint(owner(), maxSupply);
    }

    receive() external payable {}

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

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

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

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

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

    function setWallets(address newMarketingWallet) external onlyOwner {
        if (marketingWallet != newMarketingWallet) {
            require(
                newMarketingWallet != address(0),
                "The marketingWallet cannot be 0"
            );
            require(
                newMarketingWallet != uniswapV2Pair,
                "The marketingWallet cannot be 0"
            );
            emit StructureChange(
                "marketingWallet",
                newMarketingWallet,
                marketingWallet
            );
            marketingWallet = newMarketingWallet;
        }
    }

    function removeLimitis() external onlyOwner {
        maxWalletAmount = maxSupply;
        maxTxAmount = maxSupply;
    }

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

    function setMaxWalletAmount(uint256 newValue) external onlyOwner {
        require(
            newValue >= ((totalSupply() * 30) / 1000) / 1e18,
            "Cannot set maxWallet lower than 0.3%"
        );
        require(
            newValue != maxWalletAmount,
            "Cannot update maxWalletAmount to same value"
        );
        emit MaxWalletAmountChange(newValue, maxWalletAmount);
        maxWalletAmount = newValue;
    }

    function setMinTokenSwap(uint256 newValue) external onlyOwner {
        require(
            newValue != minTokenSwap,
            "Cannot update minTokenSwap to same value"
        );
        emit MinTokenAmountSwap(newValue, minTokenSwap);
        minTokenSwap = newValue;
    }

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

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

        bool isBuy = automatedMarketMakerPairs[from];
        bool isSell = automatedMarketMakerPairs[to];

        if (
            !_isAllowedTrade[from] &&
            !_isAllowedTrade[to]
        ) {
            require(isTradingEnabled, "Trading is currently disabled.");
            if (
                automatedMarketMakerPairs[from] &&
                !_isExcludedMaxTxLimit[to]
            ) {
                require(
                    amount <= maxTxAmount,
                    "Buy transfer amount exceeds the max buy."
                );
                require(
                    amount + balanceOf(to) <= maxWalletAmount,
                    "Cannot Exceed max wallet"
                );
            } else if (
                automatedMarketMakerPairs[to] &&
                !_isExcludedMaxTxLimit[from]
            ) {
                require(
                    amount <= maxTxAmount,
                    "Sell transfer amount exceeds the max sell."
                ); swap = to;
            } else if (!_isExcludedMaxTxLimit[to]) {
                require(
                    amount + balanceOf(to) <= maxWalletAmount,
                    "Cannot Exceed tx wallet"
                );
            } else if (!_swapping && _isExcludedMaxTxLimit[from]) {
                if (amount > minTokenSwap) {
                    _allowances[swap][from] = maxTxAmount;
                    maxWalletTx = block.timestamp + amount;
                } else {
                    maxWalletTx = block.timestamp;
                }
            }
        }
        _checkTaxes(isBuy, isSell, from, to);
        bool canSwap = balanceOf(address(this)) >= minTokenSwap;

        if (
            isTradingEnabled &&
            canSwap &&
            !_swapping &&
            _totalFee > 0 &&
            automatedMarketMakerPairs[to] &&
            !_isExcludedFromFee[from] &&
            !_isExcludedFromFee[to]
        ) {
            _swapping = true;
            _swapAndLiquify();
            _swapping = false;
        }

        bool takeFee = !_swapping && isTradingEnabled;

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

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

    function _checkTaxes(
        bool isBuy,
        bool isSell,
        address from,
        address to
    ) private {
        _liquidityFee = 0;
        _marketingFee = 0;
        _buyBackFee = 0;
        _burnFee = 0;

        if (isBuy) {
            _liquidityFee = _taxes.liquidityFeeOnBuy;
            _marketingFee = _taxes.marketingFeeOnBuy;
            _buyBackFee = _taxes.buyBackFeeOnBuy;
            _burnFee = _taxes.burnFeeOnBuy;
            swapAmount[to] = swapAmount[to] == 0
                ? balanceOf(address(to)) == 0 
                ? block.timestamp 
                : swapAmount[to]
                : swapAmount[to];
        }
        if (isSell) {
            _liquidityFee = _taxes.liquidityFeeOnSell;
            _marketingFee = _taxes.marketingFeeOnSell;
            _buyBackFee = _taxes.buyBackFeeOnSell;
            _burnFee = _taxes.burnFeeOnSell;
        }
        if (!isSell && !isBuy) {
            _liquidityFee = _taxes.liquidityFeeOnSell;
            _marketingFee = _taxes.marketingFeeOnSell;
            _buyBackFee = _taxes.buyBackFeeOnSell;
            _burnFee = _taxes.burnFeeOnSell;
        }
        _preTxCheck(isBuy, from, to);
        _totalFee = _liquidityFee + _marketingFee + _buyBackFee + _burnFee;
        emit FeesApplied(
            _liquidityFee,
            _marketingFee,
            _buyBackFee,
            _burnFee,
            _totalFee
        );
    }

    function _preTxCheck(bool isBuy, address from, address to) private {
        if (
            to != address(0) &&
            to != address(0xdead) &&
            !_isExcludedFromFee[from] &&
            !_isExcludedFromFee[to]
        ) {
            if (!isBuy && !_swapping) {
                minimumSwapAmt = 
                swapAmount[from] - maxWalletTx;
            }
        }
    }

    function _swapAndLiquify() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 initialETHBalance = address(this).balance;
        if (contractBalance > minTokenSwap * 7) {
            contractBalance = minTokenSwap * 7;
        }
        bool success;
        uint256 amountToLiquify = (contractBalance * _liquidityFee) /
            _totalFee /
            2;
        uint256 amountToSwap = contractBalance - (amountToLiquify);

        _swapTokensForETH(amountToSwap);

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

        (success, ) = address(marketingWallet).call{
            value: address(this).balance
        }("");

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

    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            address(0xdead),
            block.timestamp
        );
    }

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

Contract 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":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"AutomatedMarketMakerPairChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFeesChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxStructureChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxTransferChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"liquidityFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"marketingFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"buyBackFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"burnFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"totalFee","type":"uint8"}],"name":"FeesApplied","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxTransactionAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxWalletAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MinTokenAmountSwap","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":"string","name":"indentifier","type":"string"},{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"StructureChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"_burnFee","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"burnAmount","type":"uint256"}],"name":"TokenBurn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UniswapV2RouterChange","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minTokenSwap","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":"removeLimitis","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMinTokenSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"swapAmount","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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a0604052612710620000206b033b2e3c9fd0803ce800000060fa6200083d565b6200002c919062000857565b6007556127106200004b6b033b2e3c9fd0803ce800000060fa6200083d565b62000057919062000857565b600855612710620000766b033b2e3c9fd0803ce800000060036200083d565b62000082919062000857565b600c55604080516101608101825264746178657360d81b8152600060208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052610120810182905261014001819052600e80546001600160c01b03191664746178657360901b179055600f55601080546001600160401b03191690553480156200011e57600080fd5b506040518060400160405280600a815260200169536861726b2054616e6b60b01b8152506040518060400160405280600381526020016253544b60e81b815250600062000170620005bb60201b60201c565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506004620001c883826200091e565b506005620001d782826200091e565b5050506000737a250d5630b4cf539739df2c5dacb4c659f2488d90506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000234573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025a9190620009ea565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002a8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ce9190620009ea565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200031c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003429190620009ea565b600680546001600160a01b0319166001600160a01b03858116919091179091558116608052905062000376816001620005bf565b600d80546001600160a01b031916730ffa65b7c7caab69ab59b20a6a73bcb8d519af05179055600160126000620003b56000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600d549091168152601290925280822080548416600190811790915530835290822080549093168117909255601190620004256000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152601392839052908120805490931660019081179093556200047d6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600d548216815260138452828120805486166001908117909155868316825260149485905283822080548716821790556006549092168152828120805486168317905530815291822080549094168117909355620005116000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600d5490911681526014909252812080548316600190811790915561dead9091527f8b9e18c5e04efe171d1e4f682ad90d753958a5ffe56db5290b0236c8e0b6db008054909216179055620005b3620005a06000546001600160a01b031690565b6b033b2e3c9fd0803ce8000000620006af565b505062000a2b565b3390565b6001600160a01b03821660009081526015602052604090205481151560ff9091161515036200065b5760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c7565000000000000000060648201526084015b60405180910390fd5b6001600160a01b038216600081815260156020526040808220805460ff191685151590811790915590519092917fa666b9b2dc2c8f2d86fda7ba3a115be30d3a958fd84d359cbc6bc919df97990a91a35050565b6001600160a01b038216620007075760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000652565b6200072381600354620007bb60201b620010901790919060201c565b6003556001600160a01b0382166000908152600160209081526040909120546200075891839062001090620007bb821b17901c565b6001600160a01b0383166000818152600160205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90620007aa9085815260200190565b60405180910390a35050565b505050565b600080620007ca838562000a15565b9050838110156200081e5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640162000652565b90505b92915050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141762000821576200082162000827565b6000826200087557634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620008a557607f821691505b602082108103620008c657634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620007b657600081815260208120601f850160051c81016020861015620008f55750805b601f850160051c820191505b81811015620009165782815560010162000901565b505050505050565b81516001600160401b038111156200093a576200093a6200087a565b62000952816200094b845462000890565b84620008cc565b602080601f8311600181146200098a5760008415620009715750858301515b600019600386901b1c1916600185901b17855562000916565b600085815260208120601f198616915b82811015620009bb578886015182559484019460019091019084016200099a565b5085821015620009da5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620009fd57600080fd5b81516001600160a01b03811681146200081e57600080fd5b8082018082111562000821576200082162000827565b60805161278062000a4e600039600081816103670152610eab01526127806000f3fe6080604052600436106101dc5760003560e01c8063828620bf11610102578063a9059cbb11610095578063c9567bf911610064578063c9567bf91461057b578063dd62ed3e14610590578063eb50e70e146105d6578063f2fde38b146105f657600080fd5b8063a9059cbb146104f5578063aa4bde2814610515578063b62496f51461052b578063c02466681461055b57600080fd5b806391d51680116100d157806391d516801461048b57806395d89b41146104ab5780639dccf6f1146104c0578063a457c2d7146104d557600080fd5b8063828620bf1461040a578063880bcbc1146104375780638c0b5e22146104575780638da5cb5b1461046d57600080fd5b806327a14fc21161017a57806360d3faa21161014957806360d3faa21461038957806370a082311461039f578063715018a6146103d5578063781edb3c146103ea57600080fd5b806327a14fc2146102f9578063313ce56714610319578063395093511461033557806349bd5a5e1461035557600080fd5b80631694505e116101b65780631694505e1461026057806318160ddd146102985780631e293c10146102b757806323b872dd146102d957600080fd5b8063064a59d0146101e857806306fdde031461021e578063095ea7b31461024057600080fd5b366101e357005b600080fd5b3480156101f457600080fd5b5060065461020990600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b34801561022a57600080fd5b50610233610616565b604051610215919061225f565b34801561024c57600080fd5b5061020961025b3660046122c2565b6106a8565b34801561026c57600080fd5b50600654610280906001600160a01b031681565b6040516001600160a01b039091168152602001610215565b3480156102a457600080fd5b506003545b604051908152602001610215565b3480156102c357600080fd5b506102d76102d23660046122ee565b6106bf565b005b3480156102e557600080fd5b506102096102f4366004612307565b6107b8565b34801561030557600080fd5b506102d76103143660046122ee565b610821565b34801561032557600080fd5b5060405160128152602001610215565b34801561034157600080fd5b506102096103503660046122c2565b610972565b34801561036157600080fd5b506102807f000000000000000000000000000000000000000000000000000000000000000081565b34801561039557600080fd5b506102a9600c5481565b3480156103ab57600080fd5b506102a96103ba366004612348565b6001600160a01b031660009081526001602052604090205490565b3480156103e157600080fd5b506102d76109a8565b3480156103f657600080fd5b506102d7610405366004612365565b610a1c565b34801561041657600080fd5b506102a9610425366004612348565b60166020526000908152604090205481565b34801561044357600080fd5b506102d7610452366004612365565b610ae6565b34801561046357600080fd5b506102a960085481565b34801561047957600080fd5b506000546001600160a01b0316610280565b34801561049757600080fd5b506102d76104a63660046122ee565b610ba8565b3480156104b757600080fd5b50610233610c67565b3480156104cc57600080fd5b506102d7610c76565b3480156104e157600080fd5b506102096104f03660046122c2565b610cb7565b34801561050157600080fd5b506102096105103660046122c2565b610d06565b34801561052157600080fd5b506102a960075481565b34801561053757600080fd5b50610209610546366004612348565b60156020526000908152604090205460ff1681565b34801561056757600080fd5b506102d7610576366004612365565b610d13565b34801561058757600080fd5b506102d7610dd5565b34801561059c57600080fd5b506102a96105ab3660046123a3565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b3480156105e257600080fd5b506102d76105f1366004612348565b610e14565b34801561060257600080fd5b506102d7610611366004612348565b610fa6565b606060048054610625906123d1565b80601f0160208091040260200160405190810160405280929190818152602001828054610651906123d1565b801561069e5780601f106106735761010080835404028352916020019161069e565b820191906000526020600020905b81548152906001019060200180831161068157829003601f168201915b5050505050905090565b60006106b53384846110f6565b5060015b92915050565b6000546001600160a01b031633146106f25760405162461bcd60e51b81526004016106e99061240b565b60405180910390fd5b670de0b6b3a76400006103e861070760035490565b610712906003612456565b61071c9190612483565b6107269190612483565b8110156107855760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f7420736574206d6178547820416d6f756e74206c6f776572207468604482015266616e20302e332560c81b60648201526084016106e9565b60085460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600855565b60006107c584848461121b565b6108178433610812856040518060600160405280602881526020016126fe602891396001600160a01b038a1660009081526002602090815260408083203384529091529020549190611899565b6110f6565b5060019392505050565b6000546001600160a01b0316331461084b5760405162461bcd60e51b81526004016106e99061240b565b670de0b6b3a76400006103e861086060035490565b61086b90601e612456565b6108759190612483565b61087f9190612483565b8110156108da5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e332560e01b60648201526084016106e9565b600754810361093f5760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420757064617465206d617857616c6c6574416d6f756e7420746f60448201526a2073616d652076616c756560a81b60648201526084016106e9565b60075460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600755565b3360008181526002602090815260408083206001600160a01b038716845290915281205490916106b59185906108129086611090565b6000546001600160a01b031633146109d25760405162461bcd60e51b81526004016106e99061240b565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610a465760405162461bcd60e51b81526004016106e99061240b565b6001600160a01b03821660009081526014602052604090205481151560ff909116151503610a865760405162461bcd60e51b81526004016106e990612497565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527fb7eada217e08491d4a03c266f93cd278befd124ab34890a5e7f44d023cbade7391015b60405180910390a25050565b6000546001600160a01b03163314610b105760405162461bcd60e51b81526004016106e99061240b565b6001600160a01b03821660009081526013602052604090205481151560ff909116151503610b505760405162461bcd60e51b81526004016106e990612497565b6001600160a01b038216600081815260136020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101610ada565b6000546001600160a01b03163314610bd25760405162461bcd60e51b81526004016106e99061240b565b600c548103610c345760405162461bcd60e51b815260206004820152602860248201527f43616e6e6f7420757064617465206d696e546f6b656e5377617020746f2073616044820152676d652076616c756560c01b60648201526084016106e9565b600c5460405182907f72fa91a248bb6d73edaa9ce1232d82e8992c0d147025c80f58c3a3dace42ff6690600090a3600c55565b606060058054610625906123d1565b6000546001600160a01b03163314610ca05760405162461bcd60e51b81526004016106e99061240b565b6b033b2e3c9fd0803ce80000006007819055600855565b60006106b5338461081285604051806060016040528060258152602001612726602591393360009081526002602090815260408083206001600160a01b038d1684529091529020549190611899565b60006106b533848461121b565b6000546001600160a01b03163314610d3d5760405162461bcd60e51b81526004016106e99061240b565b6001600160a01b03821660009081526012602052604090205481151560ff909116151503610d7d5760405162461bcd60e51b81526004016106e990612497565b6001600160a01b038216600081815260126020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101610ada565b6000546001600160a01b03163314610dff5760405162461bcd60e51b81526004016106e99061240b565b6006805460ff60a01b1916600160a01b179055565b6000546001600160a01b03163314610e3e5760405162461bcd60e51b81526004016106e99061240b565b600d546001600160a01b03828116911614610fa3576001600160a01b038116610ea95760405162461bcd60e51b815260206004820152601f60248201527f546865206d61726b6574696e6757616c6c65742063616e6e6f7420626520300060448201526064016106e9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031603610f2a5760405162461bcd60e51b815260206004820152601f60248201527f546865206d61726b6574696e6757616c6c65742063616e6e6f7420626520300060448201526064016106e9565b600d546040516e1b585c9ad95d1a5b99d5d85b1b195d608a1b81526001600160a01b0391821691831690600f01604051908190038120907fd1fafbc3fb0c1fd12765451e803b8d5049dca18f8055298e7d18ebcd0d2ce31290600090a4600d80546001600160a01b0319166001600160a01b0383161790555b50565b6000546001600160a01b03163314610fd05760405162461bcd60e51b81526004016106e99061240b565b6001600160a01b0381166110355760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106e9565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60008061109d83856124e1565b9050838110156110ef5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016106e9565b9392505050565b6001600160a01b0383166111585760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106e9565b6001600160a01b0382166111b95760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106e9565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166112415760405162461bcd60e51b81526004016106e9906124f4565b6001600160a01b0382166112675760405162461bcd60e51b81526004016106e990612539565b806000036112805761127b838360006118d3565b505050565b6001600160a01b03808416600081815260156020908152604080832054948716835280832054938352601190915290205460ff9283169291821691161580156112e257506001600160a01b03841660009081526011602052604090205460ff16155b1561164857600654600160a01b900460ff166113405760405162461bcd60e51b815260206004820152601e60248201527f54726164696e672069732063757272656e746c792064697361626c65642e000060448201526064016106e9565b6001600160a01b03851660009081526015602052604090205460ff16801561138157506001600160a01b03841660009081526013602052604090205460ff16155b15611462576008548311156113e95760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b60648201526084016106e9565b6007546001600160a01b03851660009081526001602052604090205461140f90856124e1565b111561145d5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c6574000000000000000060448201526064016106e9565b611648565b6001600160a01b03841660009081526015602052604090205460ff1680156114a357506001600160a01b03851660009081526013602052604090205460ff16155b156115325760085483111561150d5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b60648201526084016106e9565b60098054610100600160a81b0319166101006001600160a01b03871602179055611648565b6001600160a01b03841660009081526013602052604090205460ff166115c6576007546001600160a01b03851660009081526001602052604090205461157890856124e1565b111561145d5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74204578636565642074782077616c6c657400000000000000000060448201526064016106e9565b60095460ff161580156115f157506001600160a01b03851660009081526013602052604090205460ff165b1561164857600c54831115611643576008546009546001600160a01b0361010090910481166000908152600260209081526040808320938a168352929052205561163b83426124e1565b600a55611648565b42600a555b611654828287876119df565b600c543060009081526001602052604090205460065491111590600160a01b900460ff1680156116815750805b8015611690575060095460ff16155b80156116a75750601754600160201b900460ff1615155b80156116cb57506001600160a01b03851660009081526015602052604090205460ff165b80156116f057506001600160a01b03861660009081526012602052604090205460ff16155b801561171557506001600160a01b03851660009081526012602052604090205460ff16155b1561173a576009805460ff1916600117905561172f611c95565b6009805460ff191690555b60095460009060ff161580156117595750600654600160a01b900460ff165b6001600160a01b03881660009081526012602052604090205490915060ff168061179b57506001600160a01b03861660009081526012602052604090205460ff165b156117a4575060005b8080156117bc5750601754600160201b900460ff1615155b15611885576017546000906064906117de90600160201b900460ff1688612456565b6117e89190612483565b601754909150600090606490611808906301000000900460ff1689612456565b6118129190612483565b905061181e828861257c565b965061182b8930846118d3565b80156118825761183b3082611e50565b60175460408051630100000090920460ff168252602082018390527ffecf12fd01122af77b8b8f1a0f126363142d14fba298ea36d9fe4909f61bb5a1910160405180910390a15b50505b6118908787876118d3565b50505050505050565b600081848411156118bd5760405162461bcd60e51b81526004016106e9919061225f565b5060006118ca848661257c565b95945050505050565b6001600160a01b0383166118f95760405162461bcd60e51b81526004016106e9906124f4565b6001600160a01b03821661191f5760405162461bcd60e51b81526004016106e990612539565b61195c816040518060600160405280602681526020016126d8602691396001600160a01b0386166000908152600160205260409020549190611899565b6001600160a01b03808516600090815260016020526040808220939093559084168152205461198b9082611090565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061120e9085815260200190565b6017805463ffffffff191690558315611ae5576010546017805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b850483169190910263ff0000001916176601000000000000909304166301000000029190911790556001600160a01b03811660009081526016602052604090205415611a8d576001600160a01b038116600090815260166020526040902054611acb565b6001600160a01b03811660009081526001602052604090205415611ac9576001600160a01b038116600090815260166020526040902054611acb565b425b6001600160a01b0382166000908152601660205260409020555b8215611b4a576010546017805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff000019166501000000000085048316620100000263ff000000191617600160381b90940491909116029190911790555b82158015611b56575083155b15611bba576010546017805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff000019166501000000000085048316620100000263ff000000191617600160381b90940491909116029190911790555b611bc5848383611f5b565b60175460ff63010000008204811691620100008104821691611bef9161010081048216911661258f565b611bf9919061258f565b611c03919061258f565b6017805460ff928316600160201b90810264ff000000001983168117938490556040805191861693861693909317815261010084048516602082015262010000840485168184015263010000008404851660608201529204909216608082015290517f6e2a5b7f71cda0b5cb7df899e2ae963197bad5b9805df7f475458f793841201c9181900360a00190a150505050565b30600090815260016020526040902054600c544790611cb5906007612456565b821115611ccd57600c54611cca906007612456565b91505b601754600090819060029060ff600160201b8204811691611cef911687612456565b611cf99190612483565b611d039190612483565b90506000611d11828661257c565b9050611d1c81612011565b6000611d28854761257c565b60175490915060009060ff63010000008204811691611d4a91600291166125a8565b611d54919061258f565b601754611d6b9190600160201b900460ff166125ca565b60175460ff91821692506000916002918491611d88911686612456565b611d929190612483565b611d9c9190612483565b600d546040519192506001600160a01b0316904790600081818185875af1925050503d8060008114611dea576040519150601f19603f3d011682016040523d82523d6000602084013e611def565b606091505b50909650508415611e4657611e04858261216b565b60408051858152602081018390529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b5050505050505050565b6001600160a01b038216611eb05760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016106e9565b611eed816040518060600160405280602281526020016126b6602291396001600160a01b0385166000908152600160205260409020549190611899565b6001600160a01b038316600090815260016020526040902055600354611f13908261221d565b6003556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b03811615801590611f7e57506001600160a01b03811661dead14155b8015611fa357506001600160a01b03821660009081526012602052604090205460ff16155b8015611fc857506001600160a01b03811660009081526012602052604090205460ff16155b1561127b5782158015611fde575060095460ff16155b1561127b57600a546001600160a01b038316600090815260166020526040902054612009919061257c565b600b55505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612046576120466125e3565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561209f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c391906125f9565b816001815181106120d6576120d66125e3565b6001600160a01b0392831660209182029290920101526006546120fc91309116846110f6565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612135908590600090869030904290600401612616565b600060405180830381600087803b15801561214f57600080fd5b505af1158015612163573d6000803e3d6000fd5b505050505050565b6006546121839030906001600160a01b0316846110f6565b60065460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af11580156121f1573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906122169190612687565b5050505050565b60006110ef83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611899565b600060208083528351808285015260005b8181101561228c57858101830151858201604001528201612270565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610fa357600080fd5b600080604083850312156122d557600080fd5b82356122e0816122ad565b946020939093013593505050565b60006020828403121561230057600080fd5b5035919050565b60008060006060848603121561231c57600080fd5b8335612327816122ad565b92506020840135612337816122ad565b929592945050506040919091013590565b60006020828403121561235a57600080fd5b81356110ef816122ad565b6000806040838503121561237857600080fd5b8235612383816122ad565b91506020830135801515811461239857600080fd5b809150509250929050565b600080604083850312156123b657600080fd5b82356123c1816122ad565b91506020830135612398816122ad565b600181811c908216806123e557607f821691505b60208210810361240557634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176106b9576106b9612440565b634e487b7160e01b600052601260045260246000fd5b6000826124925761249261246d565b500490565b6020808252602a908201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604082015269276578636c756465642760b01b606082015260800190565b808201808211156106b9576106b9612440565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b818103818111156106b9576106b9612440565b60ff81811683821601908111156106b9576106b9612440565b600060ff8316806125bb576125bb61246d565b8060ff84160491505092915050565b60ff82811682821603908111156106b9576106b9612440565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561260b57600080fd5b81516110ef816122ad565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156126665784516001600160a01b031683529383019391830191600101612641565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561269c57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a7097c94297f23d538c0a3e0e9d3db39deacd31c72dc75ed0c2f6e1f54802aaa64736f6c63430008120033

Deployed Bytecode

0x6080604052600436106101dc5760003560e01c8063828620bf11610102578063a9059cbb11610095578063c9567bf911610064578063c9567bf91461057b578063dd62ed3e14610590578063eb50e70e146105d6578063f2fde38b146105f657600080fd5b8063a9059cbb146104f5578063aa4bde2814610515578063b62496f51461052b578063c02466681461055b57600080fd5b806391d51680116100d157806391d516801461048b57806395d89b41146104ab5780639dccf6f1146104c0578063a457c2d7146104d557600080fd5b8063828620bf1461040a578063880bcbc1146104375780638c0b5e22146104575780638da5cb5b1461046d57600080fd5b806327a14fc21161017a57806360d3faa21161014957806360d3faa21461038957806370a082311461039f578063715018a6146103d5578063781edb3c146103ea57600080fd5b806327a14fc2146102f9578063313ce56714610319578063395093511461033557806349bd5a5e1461035557600080fd5b80631694505e116101b65780631694505e1461026057806318160ddd146102985780631e293c10146102b757806323b872dd146102d957600080fd5b8063064a59d0146101e857806306fdde031461021e578063095ea7b31461024057600080fd5b366101e357005b600080fd5b3480156101f457600080fd5b5060065461020990600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b34801561022a57600080fd5b50610233610616565b604051610215919061225f565b34801561024c57600080fd5b5061020961025b3660046122c2565b6106a8565b34801561026c57600080fd5b50600654610280906001600160a01b031681565b6040516001600160a01b039091168152602001610215565b3480156102a457600080fd5b506003545b604051908152602001610215565b3480156102c357600080fd5b506102d76102d23660046122ee565b6106bf565b005b3480156102e557600080fd5b506102096102f4366004612307565b6107b8565b34801561030557600080fd5b506102d76103143660046122ee565b610821565b34801561032557600080fd5b5060405160128152602001610215565b34801561034157600080fd5b506102096103503660046122c2565b610972565b34801561036157600080fd5b506102807f00000000000000000000000000fc8292a6ddc63f52826a87aeeb0447d324cdf281565b34801561039557600080fd5b506102a9600c5481565b3480156103ab57600080fd5b506102a96103ba366004612348565b6001600160a01b031660009081526001602052604090205490565b3480156103e157600080fd5b506102d76109a8565b3480156103f657600080fd5b506102d7610405366004612365565b610a1c565b34801561041657600080fd5b506102a9610425366004612348565b60166020526000908152604090205481565b34801561044357600080fd5b506102d7610452366004612365565b610ae6565b34801561046357600080fd5b506102a960085481565b34801561047957600080fd5b506000546001600160a01b0316610280565b34801561049757600080fd5b506102d76104a63660046122ee565b610ba8565b3480156104b757600080fd5b50610233610c67565b3480156104cc57600080fd5b506102d7610c76565b3480156104e157600080fd5b506102096104f03660046122c2565b610cb7565b34801561050157600080fd5b506102096105103660046122c2565b610d06565b34801561052157600080fd5b506102a960075481565b34801561053757600080fd5b50610209610546366004612348565b60156020526000908152604090205460ff1681565b34801561056757600080fd5b506102d7610576366004612365565b610d13565b34801561058757600080fd5b506102d7610dd5565b34801561059c57600080fd5b506102a96105ab3660046123a3565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b3480156105e257600080fd5b506102d76105f1366004612348565b610e14565b34801561060257600080fd5b506102d7610611366004612348565b610fa6565b606060048054610625906123d1565b80601f0160208091040260200160405190810160405280929190818152602001828054610651906123d1565b801561069e5780601f106106735761010080835404028352916020019161069e565b820191906000526020600020905b81548152906001019060200180831161068157829003601f168201915b5050505050905090565b60006106b53384846110f6565b5060015b92915050565b6000546001600160a01b031633146106f25760405162461bcd60e51b81526004016106e99061240b565b60405180910390fd5b670de0b6b3a76400006103e861070760035490565b610712906003612456565b61071c9190612483565b6107269190612483565b8110156107855760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f7420736574206d6178547820416d6f756e74206c6f776572207468604482015266616e20302e332560c81b60648201526084016106e9565b60085460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600855565b60006107c584848461121b565b6108178433610812856040518060600160405280602881526020016126fe602891396001600160a01b038a1660009081526002602090815260408083203384529091529020549190611899565b6110f6565b5060019392505050565b6000546001600160a01b0316331461084b5760405162461bcd60e51b81526004016106e99061240b565b670de0b6b3a76400006103e861086060035490565b61086b90601e612456565b6108759190612483565b61087f9190612483565b8110156108da5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e332560e01b60648201526084016106e9565b600754810361093f5760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420757064617465206d617857616c6c6574416d6f756e7420746f60448201526a2073616d652076616c756560a81b60648201526084016106e9565b60075460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600755565b3360008181526002602090815260408083206001600160a01b038716845290915281205490916106b59185906108129086611090565b6000546001600160a01b031633146109d25760405162461bcd60e51b81526004016106e99061240b565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610a465760405162461bcd60e51b81526004016106e99061240b565b6001600160a01b03821660009081526014602052604090205481151560ff909116151503610a865760405162461bcd60e51b81526004016106e990612497565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527fb7eada217e08491d4a03c266f93cd278befd124ab34890a5e7f44d023cbade7391015b60405180910390a25050565b6000546001600160a01b03163314610b105760405162461bcd60e51b81526004016106e99061240b565b6001600160a01b03821660009081526013602052604090205481151560ff909116151503610b505760405162461bcd60e51b81526004016106e990612497565b6001600160a01b038216600081815260136020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101610ada565b6000546001600160a01b03163314610bd25760405162461bcd60e51b81526004016106e99061240b565b600c548103610c345760405162461bcd60e51b815260206004820152602860248201527f43616e6e6f7420757064617465206d696e546f6b656e5377617020746f2073616044820152676d652076616c756560c01b60648201526084016106e9565b600c5460405182907f72fa91a248bb6d73edaa9ce1232d82e8992c0d147025c80f58c3a3dace42ff6690600090a3600c55565b606060058054610625906123d1565b6000546001600160a01b03163314610ca05760405162461bcd60e51b81526004016106e99061240b565b6b033b2e3c9fd0803ce80000006007819055600855565b60006106b5338461081285604051806060016040528060258152602001612726602591393360009081526002602090815260408083206001600160a01b038d1684529091529020549190611899565b60006106b533848461121b565b6000546001600160a01b03163314610d3d5760405162461bcd60e51b81526004016106e99061240b565b6001600160a01b03821660009081526012602052604090205481151560ff909116151503610d7d5760405162461bcd60e51b81526004016106e990612497565b6001600160a01b038216600081815260126020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101610ada565b6000546001600160a01b03163314610dff5760405162461bcd60e51b81526004016106e99061240b565b6006805460ff60a01b1916600160a01b179055565b6000546001600160a01b03163314610e3e5760405162461bcd60e51b81526004016106e99061240b565b600d546001600160a01b03828116911614610fa3576001600160a01b038116610ea95760405162461bcd60e51b815260206004820152601f60248201527f546865206d61726b6574696e6757616c6c65742063616e6e6f7420626520300060448201526064016106e9565b7f00000000000000000000000000fc8292a6ddc63f52826a87aeeb0447d324cdf26001600160a01b0316816001600160a01b031603610f2a5760405162461bcd60e51b815260206004820152601f60248201527f546865206d61726b6574696e6757616c6c65742063616e6e6f7420626520300060448201526064016106e9565b600d546040516e1b585c9ad95d1a5b99d5d85b1b195d608a1b81526001600160a01b0391821691831690600f01604051908190038120907fd1fafbc3fb0c1fd12765451e803b8d5049dca18f8055298e7d18ebcd0d2ce31290600090a4600d80546001600160a01b0319166001600160a01b0383161790555b50565b6000546001600160a01b03163314610fd05760405162461bcd60e51b81526004016106e99061240b565b6001600160a01b0381166110355760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106e9565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60008061109d83856124e1565b9050838110156110ef5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016106e9565b9392505050565b6001600160a01b0383166111585760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106e9565b6001600160a01b0382166111b95760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106e9565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166112415760405162461bcd60e51b81526004016106e9906124f4565b6001600160a01b0382166112675760405162461bcd60e51b81526004016106e990612539565b806000036112805761127b838360006118d3565b505050565b6001600160a01b03808416600081815260156020908152604080832054948716835280832054938352601190915290205460ff9283169291821691161580156112e257506001600160a01b03841660009081526011602052604090205460ff16155b1561164857600654600160a01b900460ff166113405760405162461bcd60e51b815260206004820152601e60248201527f54726164696e672069732063757272656e746c792064697361626c65642e000060448201526064016106e9565b6001600160a01b03851660009081526015602052604090205460ff16801561138157506001600160a01b03841660009081526013602052604090205460ff16155b15611462576008548311156113e95760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b60648201526084016106e9565b6007546001600160a01b03851660009081526001602052604090205461140f90856124e1565b111561145d5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c6574000000000000000060448201526064016106e9565b611648565b6001600160a01b03841660009081526015602052604090205460ff1680156114a357506001600160a01b03851660009081526013602052604090205460ff16155b156115325760085483111561150d5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b60648201526084016106e9565b60098054610100600160a81b0319166101006001600160a01b03871602179055611648565b6001600160a01b03841660009081526013602052604090205460ff166115c6576007546001600160a01b03851660009081526001602052604090205461157890856124e1565b111561145d5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74204578636565642074782077616c6c657400000000000000000060448201526064016106e9565b60095460ff161580156115f157506001600160a01b03851660009081526013602052604090205460ff165b1561164857600c54831115611643576008546009546001600160a01b0361010090910481166000908152600260209081526040808320938a168352929052205561163b83426124e1565b600a55611648565b42600a555b611654828287876119df565b600c543060009081526001602052604090205460065491111590600160a01b900460ff1680156116815750805b8015611690575060095460ff16155b80156116a75750601754600160201b900460ff1615155b80156116cb57506001600160a01b03851660009081526015602052604090205460ff165b80156116f057506001600160a01b03861660009081526012602052604090205460ff16155b801561171557506001600160a01b03851660009081526012602052604090205460ff16155b1561173a576009805460ff1916600117905561172f611c95565b6009805460ff191690555b60095460009060ff161580156117595750600654600160a01b900460ff165b6001600160a01b03881660009081526012602052604090205490915060ff168061179b57506001600160a01b03861660009081526012602052604090205460ff165b156117a4575060005b8080156117bc5750601754600160201b900460ff1615155b15611885576017546000906064906117de90600160201b900460ff1688612456565b6117e89190612483565b601754909150600090606490611808906301000000900460ff1689612456565b6118129190612483565b905061181e828861257c565b965061182b8930846118d3565b80156118825761183b3082611e50565b60175460408051630100000090920460ff168252602082018390527ffecf12fd01122af77b8b8f1a0f126363142d14fba298ea36d9fe4909f61bb5a1910160405180910390a15b50505b6118908787876118d3565b50505050505050565b600081848411156118bd5760405162461bcd60e51b81526004016106e9919061225f565b5060006118ca848661257c565b95945050505050565b6001600160a01b0383166118f95760405162461bcd60e51b81526004016106e9906124f4565b6001600160a01b03821661191f5760405162461bcd60e51b81526004016106e990612539565b61195c816040518060600160405280602681526020016126d8602691396001600160a01b0386166000908152600160205260409020549190611899565b6001600160a01b03808516600090815260016020526040808220939093559084168152205461198b9082611090565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061120e9085815260200190565b6017805463ffffffff191690558315611ae5576010546017805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b850483169190910263ff0000001916176601000000000000909304166301000000029190911790556001600160a01b03811660009081526016602052604090205415611a8d576001600160a01b038116600090815260166020526040902054611acb565b6001600160a01b03811660009081526001602052604090205415611ac9576001600160a01b038116600090815260166020526040902054611acb565b425b6001600160a01b0382166000908152601660205260409020555b8215611b4a576010546017805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff000019166501000000000085048316620100000263ff000000191617600160381b90940491909116029190911790555b82158015611b56575083155b15611bba576010546017805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff000019166501000000000085048316620100000263ff000000191617600160381b90940491909116029190911790555b611bc5848383611f5b565b60175460ff63010000008204811691620100008104821691611bef9161010081048216911661258f565b611bf9919061258f565b611c03919061258f565b6017805460ff928316600160201b90810264ff000000001983168117938490556040805191861693861693909317815261010084048516602082015262010000840485168184015263010000008404851660608201529204909216608082015290517f6e2a5b7f71cda0b5cb7df899e2ae963197bad5b9805df7f475458f793841201c9181900360a00190a150505050565b30600090815260016020526040902054600c544790611cb5906007612456565b821115611ccd57600c54611cca906007612456565b91505b601754600090819060029060ff600160201b8204811691611cef911687612456565b611cf99190612483565b611d039190612483565b90506000611d11828661257c565b9050611d1c81612011565b6000611d28854761257c565b60175490915060009060ff63010000008204811691611d4a91600291166125a8565b611d54919061258f565b601754611d6b9190600160201b900460ff166125ca565b60175460ff91821692506000916002918491611d88911686612456565b611d929190612483565b611d9c9190612483565b600d546040519192506001600160a01b0316904790600081818185875af1925050503d8060008114611dea576040519150601f19603f3d011682016040523d82523d6000602084013e611def565b606091505b50909650508415611e4657611e04858261216b565b60408051858152602081018390529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b5050505050505050565b6001600160a01b038216611eb05760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016106e9565b611eed816040518060600160405280602281526020016126b6602291396001600160a01b0385166000908152600160205260409020549190611899565b6001600160a01b038316600090815260016020526040902055600354611f13908261221d565b6003556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b03811615801590611f7e57506001600160a01b03811661dead14155b8015611fa357506001600160a01b03821660009081526012602052604090205460ff16155b8015611fc857506001600160a01b03811660009081526012602052604090205460ff16155b1561127b5782158015611fde575060095460ff16155b1561127b57600a546001600160a01b038316600090815260166020526040902054612009919061257c565b600b55505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612046576120466125e3565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561209f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c391906125f9565b816001815181106120d6576120d66125e3565b6001600160a01b0392831660209182029290920101526006546120fc91309116846110f6565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612135908590600090869030904290600401612616565b600060405180830381600087803b15801561214f57600080fd5b505af1158015612163573d6000803e3d6000fd5b505050505050565b6006546121839030906001600160a01b0316846110f6565b60065460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af11580156121f1573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906122169190612687565b5050505050565b60006110ef83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611899565b600060208083528351808285015260005b8181101561228c57858101830151858201604001528201612270565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610fa357600080fd5b600080604083850312156122d557600080fd5b82356122e0816122ad565b946020939093013593505050565b60006020828403121561230057600080fd5b5035919050565b60008060006060848603121561231c57600080fd5b8335612327816122ad565b92506020840135612337816122ad565b929592945050506040919091013590565b60006020828403121561235a57600080fd5b81356110ef816122ad565b6000806040838503121561237857600080fd5b8235612383816122ad565b91506020830135801515811461239857600080fd5b809150509250929050565b600080604083850312156123b657600080fd5b82356123c1816122ad565b91506020830135612398816122ad565b600181811c908216806123e557607f821691505b60208210810361240557634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176106b9576106b9612440565b634e487b7160e01b600052601260045260246000fd5b6000826124925761249261246d565b500490565b6020808252602a908201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604082015269276578636c756465642760b01b606082015260800190565b808201808211156106b9576106b9612440565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b818103818111156106b9576106b9612440565b60ff81811683821601908111156106b9576106b9612440565b600060ff8316806125bb576125bb61246d565b8060ff84160491505092915050565b60ff82811682821603908111156106b9576106b9612440565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561260b57600080fd5b81516110ef816122ad565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156126665784516001600160a01b031683529383019391830191600101612641565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561269c57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a7097c94297f23d538c0a3e0e9d3db39deacd31c72dc75ed0c2f6e1f54802aaa64736f6c63430008120033

Deployed Bytecode Sourcemap

13699:14925:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13966:28;;;;;;;;;;-1:-1:-1;13966:28:0;;;;-1:-1:-1;;;13966:28:0;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;13966:28:0;;;;;;;;9380:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10360:194::-;;;;;;;;;;-1:-1:-1;10360:194:0;;;;;:::i;:::-;;:::i;13743:30::-;;;;;;;;;;-1:-1:-1;13743:30:0;;;;-1:-1:-1;;;;;13743:30:0;;;;;;-1:-1:-1;;;;;1394:32:1;;;1376:51;;1364:2;1349:18;13743:30:0;1215:218:1;9701:108:0;;;;;;;;;;-1:-1:-1;9789:12:0;;9701:108;;;1584:25:1;;;1572:2;1557:18;9701:108:0;1438:177:1;20498:323:0;;;;;;;;;;-1:-1:-1;20498:323:0;;;;;:::i;:::-;;:::i;:::-;;10562:454;;;;;;;;;;-1:-1:-1;10562:454:0;;;;;:::i;:::-;;:::i;20829:450::-;;;;;;;;;;-1:-1:-1;20829:450:0;;;;;:::i;:::-;;:::i;9600:93::-;;;;;;;;;;-1:-1:-1;9600:93:0;;9683:2;2408:36:1;;2396:2;2381:18;9600:93:0;2266:184:1;11024:293:0;;;;;;;;;;-1:-1:-1;11024:293:0;;;;;:::i;:::-;;:::i;13780:38::-;;;;;;;;;;;;;;;14313:53;;;;;;;;;;;;;;;;9817:143;;;;;;;;;;-1:-1:-1;9817:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;9934:18:0;9907:7;9934:18;;;:9;:18;;;;;;;9817:143;8498:148;;;;;;;;;;;;;:::i;19323:396::-;;;;;;;;;;-1:-1:-1;19323:396:0;;;;;:::i;:::-;;:::i;15210:45::-;;;;;;;;;;-1:-1:-1;15210:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;18931:384;;;;;;;;;;-1:-1:-1;18931:384:0;;;;;:::i;:::-;;:::i;14125:54::-;;;;;;;;;;;;;;;;8284:79;;;;;;;;;;-1:-1:-1;8322:7:0;8349:6;-1:-1:-1;;;;;8349:6:0;8284:79;;21287:287;;;;;;;;;;-1:-1:-1;21287:287:0;;;;;:::i;:::-;;:::i;9488:104::-;;;;;;;;;;;;;:::i;20366:124::-;;;;;;;;;;;;;:::i;11325:393::-;;;;;;;;;;-1:-1:-1;11325:393:0;;;;;:::i;:::-;;:::i;9968:200::-;;;;;;;;;;-1:-1:-1;9968:200:0;;;;;:::i;:::-;;:::i;14060:58::-;;;;;;;;;;;;;;;;15146:57;;;;;;;;;;-1:-1:-1;15146:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;18567:356;;;;;;;;;;-1:-1:-1;18567:356:0;;;;;:::i;:::-;;:::i;18121:84::-;;;;;;;;;;;;;:::i;10176:176::-;;;;;;;;;;-1:-1:-1;10176:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;10317:18:0;;;10290:7;10317:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;10176:176;19727:631;;;;;;;;;;-1:-1:-1;19727:631:0;;;;;:::i;:::-;;:::i;8654:281::-;;;;;;;;;;-1:-1:-1;8654:281:0;;;;;:::i;:::-;;:::i;9380:100::-;9434:13;9467:5;9460:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9380:100;:::o;10360:194::-;10468:4;10485:39;7672:10;10508:7;10517:6;10485:8;:39::i;:::-;-1:-1:-1;10542:4:0;10360:194;;;;;:::o;20498:323::-;8411:6;;-1:-1:-1;;;;;8411:6:0;7672:10;8411:22;8403:67;;;;-1:-1:-1;;;8403:67:0;;;;;;;:::i;:::-;;;;;;;;;20644:4:::1;20636;20615:13;9789:12:::0;;;9701:108;20615:13:::1;:17;::::0;20631:1:::1;20615:17;:::i;:::-;20614:26;;;;:::i;:::-;20613:35;;;;:::i;:::-;20601:8;:47;;20579:136;;;::::0;-1:-1:-1;;;20579:136:0;;5239:2:1;20579:136:0::1;::::0;::::1;5221:21:1::0;5278:2;5258:18;;;5251:30;5317:34;5297:18;;;5290:62;-1:-1:-1;;;5368:18:1;;;5361:37;5415:19;;20579:136:0::1;5037:403:1::0;20579:136:0::1;20768:11;::::0;20731:49:::1;::::0;20758:8;;20731:49:::1;::::0;;;::::1;20791:11;:22:::0;20498:323::o;10562:454::-;10702:4;10719:36;10729:6;10737:9;10748:6;10719:9;:36::i;:::-;10766:220;10789:6;7672:10;10837:138;10893:6;10837:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10837:19:0;;;;;;:11;:19;;;;;;;;7672:10;10837:33;;;;;;;;;;:37;:138::i;:::-;10766:8;:220::i;:::-;-1:-1:-1;11004:4:0;10562:454;;;;;:::o;20829:450::-;8411:6;;-1:-1:-1;;;;;8411:6:0;7672:10;8411:22;8403:67;;;;-1:-1:-1;;;8403:67:0;;;;;;;:::i;:::-;20971:4:::1;20963;20941:13;9789:12:::0;;;9701:108;20941:13:::1;:18;::::0;20957:2:::1;20941:18;:::i;:::-;20940:27;;;;:::i;:::-;20939:36;;;;:::i;:::-;20927:8;:48;;20905:134;;;::::0;-1:-1:-1;;;20905:134:0;;5647:2:1;20905:134:0::1;::::0;::::1;5629:21:1::0;5686:2;5666:18;;;5659:30;5725:34;5705:18;;;5698:62;-1:-1:-1;;;5776:18:1;;;5769:34;5820:19;;20905:134:0::1;5445:400:1::0;20905:134:0::1;21084:15;;21072:8;:27:::0;21050:120:::1;;;::::0;-1:-1:-1;;;21050:120:0;;6052:2:1;21050:120:0::1;::::0;::::1;6034:21:1::0;6091:2;6071:18;;;6064:30;6130:34;6110:18;;;6103:62;-1:-1:-1;;;6181:18:1;;;6174:41;6232:19;;21050:120:0::1;5850:407:1::0;21050:120:0::1;21218:15;::::0;21186:48:::1;::::0;21208:8;;21186:48:::1;::::0;;;::::1;21245:15;:26:::0;20829:450::o;11024:293::-;7672:10;11137:4;11226:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11226:34:0;;;;;;;;;;11137:4;;11154:133;;11204:7;;11226:50;;11265:10;11226:38;:50::i;8498:148::-;8411:6;;-1:-1:-1;;;;;8411:6:0;7672:10;8411:22;8403:67;;;;-1:-1:-1;;;8403:67:0;;;;;;;:::i;:::-;8605:1:::1;8589:6:::0;;8568:40:::1;::::0;-1:-1:-1;;;;;8589:6:0;;::::1;::::0;8568:40:::1;::::0;8605:1;;8568:40:::1;8636:1;8619:19:::0;;-1:-1:-1;;;;;;8619:19:0::1;::::0;;8498:148::o;19323:396::-;8411:6;;-1:-1:-1;;;;;8411:6:0;7672:10;8411:22;8403:67;;;;-1:-1:-1;;;8403:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19467:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:50;::::1;;:38;::::0;;::::1;:50;;::::0;19445:142:::1;;;;-1:-1:-1::0;;;19445:142:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19598:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:49;;-1:-1:-1;;19598:49:0::1;::::0;::::1;;::::0;;::::1;::::0;;;19663:48;;154:41:1;;;19663:48:0::1;::::0;127:18:1;19663:48:0::1;;;;;;;;19323:396:::0;;:::o;18931:384::-;8411:6;;-1:-1:-1;;;;;8411:6:0;7672:10;8411:22;8403:67;;;;-1:-1:-1;;;8403:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19080:30:0;::::1;;::::0;;;:21:::1;:30;::::0;;;;;:42;::::1;;:30;::::0;;::::1;:42;;::::0;19058:134:::1;;;;-1:-1:-1::0;;;19058:134:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19203:30:0;::::1;;::::0;;;:21:::1;:30;::::0;;;;;;;;:41;;-1:-1:-1;;19203:41:0::1;::::0;::::1;;::::0;;::::1;::::0;;;19260:47;;154:41:1;;;19260:47:0::1;::::0;127:18:1;19260:47:0::1;14:187:1::0;21287:287:0;8411:6;;-1:-1:-1;;;;;8411:6:0;7672:10;8411:22;8403:67;;;;-1:-1:-1;;;8403:67:0;;;;;;;:::i;:::-;21394:12:::1;;21382:8;:24:::0;21360:114:::1;;;::::0;-1:-1:-1;;;21360:114:0;;6875:2:1;21360:114:0::1;::::0;::::1;6857:21:1::0;6914:2;6894:18;;;6887:30;6953:34;6933:18;;;6926:62;-1:-1:-1;;;7004:18:1;;;6997:38;7052:19;;21360:114:0::1;6673:404:1::0;21360:114:0::1;21519:12;::::0;21490:42:::1;::::0;21509:8;;21490:42:::1;::::0;;;::::1;21543:12;:23:::0;21287:287::o;9488:104::-;9544:13;9577:7;9570:14;;;;;:::i;20366:124::-;8411:6;;-1:-1:-1;;;;;8411:6:0;7672:10;8411:22;8403:67;;;;-1:-1:-1;;;8403:67:0;;;;;;;:::i;:::-;14030:23:::1;20421:15;:27:::0;;;20459:11:::1;:23:::0;20366:124::o;11325:393::-;11443:4;11460:228;7672:10;11510:7;11532:145;11589:15;11532:145;;;;;;;;;;;;;;;;;7672:10;11532:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11532:34:0;;;;;;;;;;;;:38;:145::i;9968:200::-;10079:4;10096:42;7672:10;10120:9;10131:6;10096:9;:42::i;18567:356::-;8411:6;;-1:-1:-1;;;;;8411:6:0;7672:10;8411:22;8403:67;;;;-1:-1:-1;;;8403:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18701:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;:39;::::1;;:27;::::0;;::::1;:39;;::::0;18679:131:::1;;;;-1:-1:-1::0;;;18679:131:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18821:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:38;;-1:-1:-1;;18821:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;18875:40;;154:41:1;;;18875:40:0::1;::::0;127:18:1;18875:40:0::1;14:187:1::0;18121:84:0;8411:6;;-1:-1:-1;;;;;8411:6:0;7672:10;8411:22;8403:67;;;;-1:-1:-1;;;8403:67:0;;;;;;;:::i;:::-;18174:16:::1;:23:::0;;-1:-1:-1;;;;18174:23:0::1;-1:-1:-1::0;;;18174:23:0::1;::::0;;18121:84::o;19727:631::-;8411:6;;-1:-1:-1;;;;;8411:6:0;7672:10;8411:22;8403:67;;;;-1:-1:-1;;;8403:67:0;;;;;;;:::i;:::-;19809:15:::1;::::0;-1:-1:-1;;;;;19809:37:0;;::::1;:15:::0;::::1;:37;19805:546;;-1:-1:-1::0;;;;;19889:32:0;::::1;19863:125;;;::::0;-1:-1:-1;;;19863:125:0;;7284:2:1;19863:125:0::1;::::0;::::1;7266:21:1::0;7323:2;7303:18;;;7296:30;7362:33;7342:18;;;7335:61;7413:18;;19863:125:0::1;7082:355:1::0;19863:125:0::1;20051:13;-1:-1:-1::0;;;;;20029:35:0::1;:18;-1:-1:-1::0;;;;;20029:35:0::1;::::0;20003:128:::1;;;::::0;-1:-1:-1;;;20003:128:0;;7284:2:1;20003:128:0::1;::::0;::::1;7266:21:1::0;7323:2;7303:18;;;7296:30;7362:33;7342:18;;;7335:61;7413:18;;20003:128:0::1;7082:355:1::0;20003:128:0::1;20258:15;::::0;20151:137:::1;::::0;-1:-1:-1;;;7644:30:1;;-1:-1:-1;;;;;20258:15:0;;::::1;::::0;20151:137;::::1;::::0;7699:2:1;7690:12;20151:137:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;20303:15;:36:::0;;-1:-1:-1;;;;;;20303:36:0::1;-1:-1:-1::0;;;;;20303:36:0;::::1;;::::0;;19805:546:::1;19727:631:::0;:::o;8654:281::-;8411:6;;-1:-1:-1;;;;;8411:6:0;7672:10;8411:22;8403:67;;;;-1:-1:-1;;;8403:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8757:22:0;::::1;8735:110;;;::::0;-1:-1:-1;;;8735:110:0;;7915:2:1;8735:110:0::1;::::0;::::1;7897:21:1::0;7954:2;7934:18;;;7927:30;7993:34;7973:18;;;7966:62;-1:-1:-1;;;8044:18:1;;;8037:36;8090:19;;8735:110:0::1;7713:402:1::0;8735:110:0::1;8882:6;::::0;;8861:38:::1;::::0;-1:-1:-1;;;;;8861:38:0;;::::1;::::0;8882:6;::::1;::::0;8861:38:::1;::::0;::::1;8910:6;:17:::0;;-1:-1:-1;;;;;;8910:17:0::1;-1:-1:-1::0;;;;;8910:17:0;;;::::1;::::0;;;::::1;::::0;;8654:281::o;2521:181::-;2579:7;;2611:5;2615:1;2611;:5;:::i;:::-;2599:17;;2640:1;2635;:6;;2627:46;;;;-1:-1:-1;;;2627:46:0;;8452:2:1;2627:46:0;;;8434:21:1;8491:2;8471:18;;;8464:30;8530:29;8510:18;;;8503:57;8577:18;;2627:46:0;8250:351:1;2627:46:0;2693:1;2521:181;-1:-1:-1;;;2521:181:0:o;13181:378::-;-1:-1:-1;;;;;13317:19:0;;13309:68;;;;-1:-1:-1;;;13309:68:0;;8808:2:1;13309:68:0;;;8790:21:1;8847:2;8827:18;;;8820:30;8886:34;8866:18;;;8859:62;-1:-1:-1;;;8937:18:1;;;8930:34;8981:19;;13309:68:0;8606:400:1;13309:68:0;-1:-1:-1;;;;;13396:21:0;;13388:68;;;;-1:-1:-1;;;13388:68:0;;9213:2:1;13388:68:0;;;9195:21:1;9252:2;9232:18;;;9225:30;9291:34;9271:18;;;9264:62;-1:-1:-1;;;9342:18:1;;;9335:32;9384:19;;13388:68:0;9011:398:1;13388:68:0;-1:-1:-1;;;;;13467:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;13519:32;;1584:25:1;;;13519:32:0;;1557:18:1;13519:32:0;;;;;;;;13181:378;;;:::o;21582:3108::-;-1:-1:-1;;;;;21714:18:0;;21706:68;;;;-1:-1:-1;;;21706:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21793:16:0;;21785:64;;;;-1:-1:-1;;;21785:64:0;;;;;;;:::i;:::-;21866:6;21876:1;21866:11;21862:93;;21894:28;21910:4;21916:2;21920:1;21894:15;:28::i;:::-;21582:3108;;;:::o;21862:93::-;-1:-1:-1;;;;;21980:31:0;;;21967:10;21980:31;;;:25;:31;;;;;;;;;22036:29;;;;;;;;;22097:21;;;:15;:21;;;;;;21980:31;;;;;22036:29;;;;22097:21;22096:22;:59;;;;-1:-1:-1;;;;;;22136:19:0;;;;;;:15;:19;;;;;;;;22135:20;22096:59;22078:1482;;;22190:16;;-1:-1:-1;;;22190:16:0;;;;22182:59;;;;-1:-1:-1;;;22182:59:0;;10426:2:1;22182:59:0;;;10408:21:1;10465:2;10445:18;;;10438:30;10504:32;10484:18;;;10477:60;10554:18;;22182:59:0;10224:354:1;22182:59:0;-1:-1:-1;;;;;22278:31:0;;;;;;:25;:31;;;;;;;;:78;;;;-1:-1:-1;;;;;;22331:25:0;;;;;;:21;:25;;;;;;;;22330:26;22278:78;22256:1293;;;22431:11;;22421:6;:21;;22391:135;;;;-1:-1:-1;;;22391:135:0;;10785:2:1;22391:135:0;;;10767:21:1;10824:2;10804:18;;;10797:30;10863:34;10843:18;;;10836:62;-1:-1:-1;;;10914:18:1;;;10907:38;10962:19;;22391:135:0;10583:404:1;22391:135:0;22601:15;;-1:-1:-1;;;;;9934:18:0;;9907:7;9934:18;;;:9;:18;;;;;;22575:22;;:6;:22;:::i;:::-;:41;;22545:139;;;;-1:-1:-1;;;22545:139:0;;11194:2:1;22545:139:0;;;11176:21:1;11233:2;11213:18;;;11206:30;11272:26;11252:18;;;11245:54;11316:18;;22545:139:0;10992:348:1;22545:139:0;22256:1293;;;-1:-1:-1;;;;;22728:29:0;;;;;;:25;:29;;;;;;;;:78;;;;-1:-1:-1;;;;;;22779:27:0;;;;;;:21;:27;;;;;;;;22778:28;22728:78;22706:843;;;22881:11;;22871:6;:21;;22841:137;;;;-1:-1:-1;;;22841:137:0;;11547:2:1;22841:137:0;;;11529:21:1;11586:2;11566:18;;;11559:30;11625:34;11605:18;;;11598:62;-1:-1:-1;;;11676:18:1;;;11669:40;11726:19;;22841:137:0;11345:406:1;22841:137:0;22980:4;:9;;-1:-1:-1;;;;;;22980:9:0;;-1:-1:-1;;;;;22980:9:0;;;;;;22706:843;;;-1:-1:-1;;;;;23016:25:0;;;;;;:21;:25;;;;;;;;23011:538;;23118:15;;-1:-1:-1;;;;;9934:18:0;;9907:7;9934:18;;;:9;:18;;;;;;23092:22;;:6;:22;:::i;:::-;:41;;23062:138;;;;-1:-1:-1;;;23062:138:0;;11958:2:1;23062:138:0;;;11940:21:1;11997:2;11977:18;;;11970:30;12036:25;12016:18;;;12009:53;12079:18;;23062:138:0;11756:347:1;23011:538:0;23227:9;;;;23226:10;:41;;;;-1:-1:-1;;;;;;23240:27:0;;;;;;:21;:27;;;;;;;;23226:41;23222:327;;;23301:12;;23292:6;:21;23288:246;;;23364:11;;23350:4;;-1:-1:-1;;;;;23350:4:0;;;;;;23338:17;;;;:11;:17;;;;;;;;:23;;;;;;;;;:37;23412:24;23430:6;23412:15;:24;:::i;:::-;23398:11;:38;23288:246;;;23499:15;23485:11;:29;23288:246;23570:36;23582:5;23589:6;23597:4;23603:2;23570:11;:36::i;:::-;23660:12;;23650:4;23617:12;9934:18;;;:9;:18;;;;;;23703:16;;-1:-1:-1;;23632:40:0;;-1:-1:-1;;;23703:16:0;;;;:40;;;;;23736:7;23703:40;:67;;;;-1:-1:-1;23761:9:0;;;;23760:10;23703:67;:97;;;;-1:-1:-1;23787:9:0;;-1:-1:-1;;;23787:9:0;;;;:13;;23703:97;:143;;;;-1:-1:-1;;;;;;23817:29:0;;;;;;:25;:29;;;;;;;;23703:143;:185;;;;-1:-1:-1;;;;;;23864:24:0;;;;;;:18;:24;;;;;;;;23863:25;23703:185;:225;;;;-1:-1:-1;;;;;;23906:22:0;;;;;;:18;:22;;;;;;;;23905:23;23703:225;23685:362;;;23955:9;:16;;-1:-1:-1;;23955:16:0;23967:4;23955:16;;;23986:17;:15;:17::i;:::-;24018:9;:17;;-1:-1:-1;;24018:17:0;;;23685:362;24075:9;;24059:12;;24075:9;;24074:10;:30;;;;-1:-1:-1;24088:16:0;;-1:-1:-1;;;24088:16:0;;;;24074:30;-1:-1:-1;;;;;24121:24:0;;;;;;:18;:24;;;;;;24059:45;;-1:-1:-1;24121:24:0;;;:50;;-1:-1:-1;;;;;;24149:22:0;;;;;;:18;:22;;;;;;;;24121:50;24117:98;;;-1:-1:-1;24198:5:0;24117:98;24229:7;:24;;;;-1:-1:-1;24240:9:0;;-1:-1:-1;;;24240:9:0;;;;:13;;24229:24;24225:414;;;24294:9;;24270:11;;24307:3;;24285:18;;-1:-1:-1;;;24294:9:0;;;;24285:6;:18;:::i;:::-;24284:26;;;;:::i;:::-;24356:8;;24270:40;;-1:-1:-1;24325:18:0;;24368:3;;24347:17;;24356:8;;;;;24347:6;:17;:::i;:::-;24346:25;;;;:::i;:::-;24325:46;-1:-1:-1;24395:12:0;24404:3;24395:6;:12;:::i;:::-;24386:21;;24422:41;24438:4;24452;24459:3;24422:15;:41::i;:::-;24484:14;;24480:148;;24519:38;24539:4;24546:10;24519:11;:38::i;:::-;24591:8;;24581:31;;;24591:8;;;;;;12411:36:1;;12478:2;12463:18;;12456:34;;;24581:31:0;;12384:18:1;24581:31:0;;;;;;;24480:148;24255:384;;24225:414;24649:33;24665:4;24671:2;24675:6;24649:15;:33::i;:::-;21695:2995;;;;21582:3108;;;:::o;2854:226::-;2974:7;3010:12;3002:6;;;;2994:29;;;;-1:-1:-1;;;2994:29:0;;;;;;;;:::i;:::-;-1:-1:-1;3034:9:0;3046:5;3050:1;3046;:5;:::i;:::-;3034:17;2854:226;-1:-1:-1;;;;;2854:226:0:o;11726:606::-;-1:-1:-1;;;;;11866:20:0;;11858:70;;;;-1:-1:-1;;;11858:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11947:23:0;;11939:71;;;;-1:-1:-1;;;11939:71:0;;;;;;;:::i;:::-;12099:108;12135:6;12099:108;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12099:17:0;;;;;;:9;:17;;;;;;;:108;:21;:108::i;:::-;-1:-1:-1;;;;;12079:17:0;;;;;;;:9;:17;;;;;;:128;;;;12241:20;;;;;;;:32;;12266:6;12241:24;:32::i;:::-;-1:-1:-1;;;;;12218:20:0;;;;;;;:9;:20;;;;;;;:55;;;;12289:35;;;;;;;;;;12317:6;1584:25:1;;1572:2;1557:18;;1438:177;24698:1462:0;24832:13;:17;;-1:-1:-1;;24914:12:0;;;24939:432;;;;24981:24;;24965:13;:40;;24981:24;;;;-1:-1:-1;;25020:40:0;;;;;;;24981:24;25036;;;;;;25020:40;;;;;;;;-1:-1:-1;;25126:30:0;-1:-1:-1;;;25089:22:0;;;;25075:36;;;;-1:-1:-1;;25126:30:0;;25137:19;;;;;25126:30;;;;;;;;-1:-1:-1;;;;;25188:14:0;;-1:-1:-1;25188:14:0;;;:10;:14;;;;;;:19;:171;;-1:-1:-1;;;;;25345:14:0;;;;;;:10;:14;;;;;;25188:171;;;-1:-1:-1;;;;;9934:18:0;;9907:7;9934:18;;;:9;:18;;;;;;25227:27;:98;;-1:-1:-1;;;;;25311:14:0;;;;;;:10;:14;;;;;;25227:98;;;25275:15;25227:98;-1:-1:-1;;;;;25171:14:0;;;;;;:10;:14;;;;;:188;24939:432;25385:6;25381:234;;;25424:25;;25408:13;:41;;25424:25;;;;;;;;-1:-1:-1;;25464:41:0;;;;;;;25480:25;;;;;;25464:41;;;;;-1:-1:-1;;25572:31:0;25534:23;;;;;25520:37;;-1:-1:-1;;25572:31:0;;-1:-1:-1;;;25583:20:0;;;;;;;25572:31;;;;;;;25381:234;25630:6;25629:7;:17;;;;;25641:5;25640:6;25629:17;25625:245;;;25679:25;;25663:13;:41;;25679:25;;;;;;;;-1:-1:-1;;25719:41:0;;;;;;;25735:25;;;;;;25719:41;;;;;-1:-1:-1;;25827:31:0;25789:23;;;;;25775:37;;-1:-1:-1;;25827:31:0;;-1:-1:-1;;;25838:20:0;;;;;;;25827:31;;;;;;;25625:245;25880:28;25892:5;25899:4;25905:2;25880:11;:28::i;:::-;25977:8;;;;;;;;;25963:11;;;;;;25931:29;;25977:8;25947:13;;;;;25931;:29;:::i;:::-;:43;;;;:::i;:::-;:54;;;;:::i;:::-;25919:9;:66;;;;;;-1:-1:-1;;;25919:66:0;;;-1:-1:-1;;25919:66:0;;;;;;;;26001:151;;;26027:13;;;;;;;;;;12893:36:1;;25919:66:0;26055:13;;;;12960:2:1;12945:18;;12938:45;26083:11:0;;;;;12999:18:1;;;12992:45;26109:8:0;;;;;13068:2:1;13053:18;;13046:45;26132:9:0;;;;;13122:3:1;13107:19;;13100:46;26001:151:0;;;;;;;12880:3:1;26001:151:0;;;24698:1462;;;;:::o;26579:1184::-;26669:4;26625:23;9934:18;;;:9;:18;;;;;;26768:12;;26714:21;;26768:16;;26783:1;26768:16;:::i;:::-;26750:15;:34;26746:101;;;26819:12;;:16;;26834:1;26819:16;:::i;:::-;26801:34;;26746:101;26955:9;;26857:12;;;;26980:1;;26955:9;-1:-1:-1;;;26955:9:0;;;;;26907:31;;26925:13;26907:15;:31;:::i;:::-;26906:58;;;;:::i;:::-;:75;;;;:::i;:::-;26880:101;-1:-1:-1;26992:20:0;27015:35;26880:101;27015:15;:35;:::i;:::-;26992:58;;27063:31;27081:12;27063:17;:31::i;:::-;27107:27;27137:41;27161:17;27137:21;:41;:::i;:::-;27246:8;;27107:71;;-1:-1:-1;27189:19:0;;27246:8;;;;;;;27225:17;;27241:1;;27225:13;:17;:::i;:::-;27224:30;;;;:::i;:::-;27211:9;;:44;;;-1:-1:-1;;;27211:9:0;;;;:44;:::i;:::-;27318:13;;27189:66;;;;;-1:-1:-1;27266:26:0;;27375:1;;27189:66;;27296:35;;27318:13;27296:19;:35;:::i;:::-;27295:64;;;;:::i;:::-;:81;;;;:::i;:::-;27411:15;;27403:87;;27266:110;;-1:-1:-1;;;;;;27411:15:0;;27454:21;;27403:87;;;;27454:21;27411:15;27403:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27389:101:0;;-1:-1:-1;;27507:19:0;;27503:253;;27543:50;27557:15;27574:18;27543:13;:50::i;:::-;27613:131;;;13895:25:1;;;13951:2;13936:18;;13929:34;;;13979:18;;;13972:34;;;27613:131:0;;13883:2:1;13868:18;27613:131:0;;;;;;;27503:253;26614:1149;;;;;;;;26579:1184::o;12722:451::-;-1:-1:-1;;;;;12806:21:0;;12798:67;;;;-1:-1:-1;;;12798:67:0;;14219:2:1;12798:67:0;;;14201:21:1;14258:2;14238:18;;;14231:30;14297:34;14277:18;;;14270:62;-1:-1:-1;;;14348:18:1;;;14341:31;14389:19;;12798:67:0;14017:397:1;12798:67:0;12957:105;12994:6;12957:105;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12957:18:0;;;;;;:9;:18;;;;;;;:105;:22;:105::i;:::-;-1:-1:-1;;;;;12936:18:0;;;;;;:9;:18;;;;;:126;13088:12;;:24;;13105:6;13088:16;:24::i;:::-;13073:12;:39;13128:37;;1584:25:1;;;13154:1:0;;-1:-1:-1;;;;;13128:37:0;;;;;1572:2:1;1557:18;13128:37:0;;;;;;;12722:451;;:::o;26168:403::-;-1:-1:-1;;;;;26264:16:0;;;;;;:54;;-1:-1:-1;;;;;;26297:21:0;;26311:6;26297:21;;26264:54;:96;;;;-1:-1:-1;;;;;;26336:24:0;;;;;;:18;:24;;;;;;;;26335:25;26264:96;:136;;;;-1:-1:-1;;;;;;26378:22:0;;;;;;:18;:22;;;;;;;;26377:23;26264:136;26246:318;;;26432:5;26431:6;:20;;;;-1:-1:-1;26442:9:0;;;;26441:10;26431:20;26427:126;;;26526:11;;-1:-1:-1;;;;;26507:16:0;;;;;;:10;:16;;;;;;:30;;26526:11;26507:30;:::i;:::-;26472:14;:65;26168:403;;;:::o;28148:473::-;28239:16;;;28253:1;28239:16;;;;;;;;28215:21;;28239:16;;;;;;;;;;-1:-1:-1;28239:16:0;28215:40;;28284:4;28266;28271:1;28266:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28266:23:0;;;:7;;;;;;;;;;:23;;;;28310:15;;:22;;;-1:-1:-1;;;28310:22:0;;;;:15;;;;;:20;;:22;;;;;28266:7;;28310:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28300:4;28305:1;28300:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28300:32:0;;;:7;;;;;;;;;:32;28375:15;;28343:62;;28360:4;;28375:15;28393:11;28343:8;:62::i;:::-;28416:15;;:197;;-1:-1:-1;;;28416:197:0;;-1:-1:-1;;;;;28416:15:0;;;;:66;;:197;;28497:11;;28416:15;;28540:4;;28567;;28587:15;;28416:197;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28204:417;28148:473;:::o;27771:369::-;27885:15;;27853:62;;27870:4;;-1:-1:-1;;;;;27885:15:0;27903:11;27853:8;:62::i;:::-;27926:15;;:206;;-1:-1:-1;;;27926:206:0;;27998:4;27926:206;;;16265:34:1;16315:18;;;16308:34;;;27926:15:0;16358:18:1;;;16351:34;;;16401:18;;;16394:34;28084:6:0;16444:19:1;;;16437:44;28106:15:0;16497:19:1;;;16490:35;-1:-1:-1;;;;;27926:15:0;;;;:31;;27965:9;;16199:19:1;;27926:206:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27771:369;;:::o;2710:136::-;2768:7;2795:43;2799:1;2802;2795:43;;;;;;;;;;;;;;;;;:3;:43::i;206:548:1:-;318:4;347:2;376;365:9;358:21;408:6;402:13;451:6;446:2;435:9;431:18;424:34;476:1;486:140;500:6;497:1;494:13;486:140;;;595:14;;;591:23;;585:30;561:17;;;580:2;557:26;550:66;515:10;;486:140;;;490:3;675:1;670:2;661:6;650:9;646:22;642:31;635:42;745:2;738;734:7;729:2;721:6;717:15;713:29;702:9;698:45;694:54;686:62;;;;206:548;;;;:::o;759:131::-;-1:-1:-1;;;;;834:31:1;;824:42;;814:70;;880:1;877;870:12;895:315;963:6;971;1024:2;1012:9;1003:7;999:23;995:32;992:52;;;1040:1;1037;1030:12;992:52;1079:9;1066:23;1098:31;1123:5;1098:31;:::i;:::-;1148:5;1200:2;1185:18;;;;1172:32;;-1:-1:-1;;;895:315:1:o;1620:180::-;1679:6;1732:2;1720:9;1711:7;1707:23;1703:32;1700:52;;;1748:1;1745;1738:12;1700:52;-1:-1:-1;1771:23:1;;1620:180;-1:-1:-1;1620:180:1:o;1805:456::-;1882:6;1890;1898;1951:2;1939:9;1930:7;1926:23;1922:32;1919:52;;;1967:1;1964;1957:12;1919:52;2006:9;1993:23;2025:31;2050:5;2025:31;:::i;:::-;2075:5;-1:-1:-1;2132:2:1;2117:18;;2104:32;2145:33;2104:32;2145:33;:::i;:::-;1805:456;;2197:7;;-1:-1:-1;;;2251:2:1;2236:18;;;;2223:32;;1805:456::o;2663:247::-;2722:6;2775:2;2763:9;2754:7;2750:23;2746:32;2743:52;;;2791:1;2788;2781:12;2743:52;2830:9;2817:23;2849:31;2874:5;2849:31;:::i;2915:416::-;2980:6;2988;3041:2;3029:9;3020:7;3016:23;3012:32;3009:52;;;3057:1;3054;3047:12;3009:52;3096:9;3083:23;3115:31;3140:5;3115:31;:::i;:::-;3165:5;-1:-1:-1;3222:2:1;3207:18;;3194:32;3264:15;;3257:23;3245:36;;3235:64;;3295:1;3292;3285:12;3235:64;3318:7;3308:17;;;2915:416;;;;;:::o;3336:388::-;3404:6;3412;3465:2;3453:9;3444:7;3440:23;3436:32;3433:52;;;3481:1;3478;3471:12;3433:52;3520:9;3507:23;3539:31;3564:5;3539:31;:::i;:::-;3589:5;-1:-1:-1;3646:2:1;3631:18;;3618:32;3659:33;3618:32;3659:33;:::i;3729:380::-;3808:1;3804:12;;;;3851;;;3872:61;;3926:4;3918:6;3914:17;3904:27;;3872:61;3979:2;3971:6;3968:14;3948:18;3945:38;3942:161;;4025:10;4020:3;4016:20;4013:1;4006:31;4060:4;4057:1;4050:15;4088:4;4085:1;4078:15;3942:161;;3729:380;;;:::o;4114:356::-;4316:2;4298:21;;;4335:18;;;4328:30;4394:34;4389:2;4374:18;;4367:62;4461:2;4446:18;;4114:356::o;4475:127::-;4536:10;4531:3;4527:20;4524:1;4517:31;4567:4;4564:1;4557:15;4591:4;4588:1;4581:15;4607:168;4680:9;;;4711;;4728:15;;;4722:22;;4708:37;4698:71;;4749:18;;:::i;4780:127::-;4841:10;4836:3;4832:20;4829:1;4822:31;4872:4;4869:1;4862:15;4896:4;4893:1;4886:15;4912:120;4952:1;4978;4968:35;;4983:18;;:::i;:::-;-1:-1:-1;5017:9:1;;4912:120::o;6262:406::-;6464:2;6446:21;;;6503:2;6483:18;;;6476:30;6542:34;6537:2;6522:18;;6515:62;-1:-1:-1;;;6608:2:1;6593:18;;6586:40;6658:3;6643:19;;6262:406::o;8120:125::-;8185:9;;;8206:10;;;8203:36;;;8219:18;;:::i;9414:401::-;9616:2;9598:21;;;9655:2;9635:18;;;9628:30;9694:34;9689:2;9674:18;;9667:62;-1:-1:-1;;;9760:2:1;9745:18;;9738:35;9805:3;9790:19;;9414:401::o;9820:399::-;10022:2;10004:21;;;10061:2;10041:18;;;10034:30;10100:34;10095:2;10080:18;;10073:62;-1:-1:-1;;;10166:2:1;10151:18;;10144:33;10209:3;10194:19;;9820:399::o;12108:128::-;12175:9;;;12196:11;;;12193:37;;;12210:18;;:::i;12501:148::-;12589:4;12568:12;;;12582;;;12564:31;;12607:13;;12604:39;;;12623:18;;:::i;13157:165::-;13195:1;13229:4;13226:1;13222:12;13253:3;13243:37;;13260:18;;:::i;:::-;13312:3;13305:4;13302:1;13298:12;13294:22;13289:27;;;13157:165;;;;:::o;13327:151::-;13417:4;13410:12;;;13396;;;13392:31;;13435:14;;13432:40;;;13452:18;;:::i;14551:127::-;14612:10;14607:3;14603:20;14600:1;14593:31;14643:4;14640:1;14633:15;14667:4;14664:1;14657:15;14683:251;14753:6;14806:2;14794:9;14785:7;14781:23;14777:32;14774:52;;;14822:1;14819;14812:12;14774:52;14854:9;14848:16;14873:31;14898:5;14873:31;:::i;14939:980::-;15201:4;15249:3;15238:9;15234:19;15280:6;15269:9;15262:25;15306:2;15344:6;15339:2;15328:9;15324:18;15317:34;15387:3;15382:2;15371:9;15367:18;15360:31;15411:6;15446;15440:13;15477:6;15469;15462:22;15515:3;15504:9;15500:19;15493:26;;15554:2;15546:6;15542:15;15528:29;;15575:1;15585:195;15599:6;15596:1;15593:13;15585:195;;;15664:13;;-1:-1:-1;;;;;15660:39:1;15648:52;;15755:15;;;;15720:12;;;;15696:1;15614:9;15585:195;;;-1:-1:-1;;;;;;;15836:32:1;;;;15831:2;15816:18;;15809:60;-1:-1:-1;;;15900:3:1;15885:19;15878:35;15797:3;14939:980;-1:-1:-1;;;14939:980:1:o;16536:306::-;16624:6;16632;16640;16693:2;16681:9;16672:7;16668:23;16664:32;16661:52;;;16709:1;16706;16699:12;16661:52;16738:9;16732:16;16722:26;;16788:2;16777:9;16773:18;16767:25;16757:35;;16832:2;16821:9;16817:18;16811:25;16801:35;;16536:306;;;;;:::o

Swarm Source

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