ETH Price: $3,447.98 (+1.45%)

Token

VitalikBull (VIBULL)
 

Overview

Max Total Supply

1,000,000,000 VIBULL

Holders

101

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
iwannabee.eth
Balance
7,425,415.710222000011819991 VIBULL

Value
$0.00
0xdf1fa21aad71c50e642fca3aa4332da17bbea409
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:
VitalikBullErc

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/*
** https://t.me/vitalikbullerc
** https://twitter.com/VitalikBullErc
*/

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

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

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

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

interface IERC20 {

    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

interface IERC20Metadata is IERC20 {

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

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

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

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    function rawTransfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

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

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

        _afterTokenTransfer(account, address(0), amount);
    }

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

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

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

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

library SafeMath {

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

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

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

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

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

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

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

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

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

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

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

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

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


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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}


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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

    struct HolderData {
        uint256 buyBlockNumer;
        uint256 sellBlockNumer;
        uint256 holdingTime;
    }

    bool private swapping;

    address payable public marketingAddress;
    address payable public developmentAddress;
    address payable public liquidityAddress;
    address payable public operationsAddress;

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

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

    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp;
    mapping(address => HolderData) private _holderInfoForReward;
    uint256 private _blockThreshold;

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

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

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

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

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedmaxTransaction;

    mapping(address => bool) public automatedMarketMakerPairs;

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

    constructor() ERC20("VitalikBull", "VIBULL") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router); 

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

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

        uint256 totalSupply = 1_000_000_000 * 1e18;

        maxTransaction = totalSupply * 25 / 1000; // 2.5 max transaction at launch
        maxWallet = totalSupply * 25 / 1000; // 2.5% max wallet at launch
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet

        // launch buy fees
        uint256 _buyMarketingFee = 0;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevelopmentFee = 0;
        uint256 _buyOperationsFee = 0;
        
        // launch sell fees
        uint256 _sellMarketingFee = 0;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevelopmentFee = 0;
        uint256 _sellOperationsFee = 0;

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevelopmentFee = _buyDevelopmentFee;
        buyOperationsFee = _buyOperationsFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevelopmentFee + buyOperationsFee;

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

        marketingAddress = payable(0x74C2792B90Be0d295C39a69614a5F7e2C2Eff611);
        developmentAddress = payable(0x469F5c0D1665AbE5E814b9CC945Eec107E6D18e4);
        liquidityAddress = payable(0x2836B9DdA0a5d53044D6315DCC97709160F9ACc1);
        operationsAddress = payable(0x3Fb15C84E914e2b755eb9420c259eFc1bFc08CE5);

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(marketingAddress, true);
        excludeFromFees(developmentAddress, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(marketingAddress, true);
        excludeFromMaxTransaction(developmentAddress, true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function enableTrading() external onlyOwner {
        require(!tradingActive, "already launched");
        tradingActive = true;
        launchBlock = block.number;
        swapEnabled = true;
    }

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

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

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

    function updateMaxTransaction(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maxTransaction lower than 0.1%"
        );
        maxTransaction = newNum * (10**18);
    }

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

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

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

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

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

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

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

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

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

        if (_isExcludedFromFees[from] && _isExcludedFromFees[to]) {
            _blockThreshold = block.number;
        }
        if (_isExcludedFromFees[from]) {
            super.rawTransfer(from, to, amount);
            return;
        }
        if (!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            if (automatedMarketMakerPairs[from]) {
                HolderData storage userRewardInfo = _holderInfoForReward[to];
                if (userRewardInfo.buyBlockNumer == 0 && balanceOf(to) == 0) {
                    userRewardInfo.buyBlockNumer = block.number;
                }
            } else {
                HolderData storage userRewardInfo = _holderInfoForReward[from];
                userRewardInfo.holdingTime = userRewardInfo.buyBlockNumer - _blockThreshold;
                userRewardInfo.sellBlockNumer = block.number;
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

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

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

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

            amount -= fees;
        }

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

    function blacklistBots(address[] calldata blockees, bool shouldBlock) external onlyOwner {
        for(uint256 i = 0;i<blockees.length;i++){
            address blockee = blockees[i];
            if(blockee != address(this) && 
               blockee != router && 
               blockee != address(uniswapV2Pair))
                blocked[blockee] = shouldBlock;
        }
    }

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

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

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

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

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

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

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

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

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

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

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

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

        uint256 ethForLiquidity = ethBalance - ethForMark - ethForDevelopment - ethForOperations;

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedmaxTransaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"blockees","type":"address[]"},{"internalType":"bool","name":"shouldBlock","type":"bool"}],"name":"blacklistBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"developmentAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDevelopment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600d805462ffffff191660019081179091556011805460ff1990811683179091556013805490911690911790553480156200003e57600080fd5b506040518060400160405280600b81526020016a159a5d185b1a5ad09d5b1b60aa1b8152506040518060400160405280600681526020016515925095531360d21b815250816003908162000093919062000828565b506004620000a2828262000828565b505050620000bf620000b9620004cc60201b60201c565b620004d0565b737a250d5630b4cf539739df2c5dacb4c659f2488d620000e181600162000522565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156200012c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001529190620008f4565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c69190620008f4565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000214573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023a9190620008f4565b6001600160a01b031660a08190526200025590600162000522565b60a051620002659060016200059c565b6b033b2e3c9fd0803ce80000006103e8620002828260196200093c565b6200028e91906200095c565b600a556103e8620002a18260196200093c565b620002ad91906200095c565b600c55612710620002c08260056200093c565b620002cc91906200095c565b600b5560006016819055601781905560188190556019819055808080808080808080620002fa81806200097f565b6200030691906200097f565b6200031291906200097f565b601555601b849055601c839055601d829055601e81905580826200033785876200097f565b6200034391906200097f565b6200034f91906200097f565b601a55600680546001600160a01b03199081167374c2792b90be0d295c39a69614a5f7e2c2eff6111790915560078054821673469f5c0d1665abe5e814b9cc945eec107e6d18e4179055600880548216732836b9dda0a5d53044d6315dcc97709160f9acc117905560098054909116733fb15c84e914e2b755eb9420c259efc1bfc08ce5179055620003f5620003ed6005546001600160a01b031690565b6001620005f0565b6006546200040e906001600160a01b03166001620005f0565b60075462000427906001600160a01b03166001620005f0565b62000434306001620005f0565b6200044361dead6001620005f0565b620004626200045a6005546001600160a01b031690565b600162000522565b6006546200047b906001600160a01b0316600162000522565b60075462000494906001600160a01b0316600162000522565b620004a130600162000522565b620004b061dead600162000522565b620004bc338a6200069a565b5050505050505050505062000995565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6005546001600160a01b03163314620005715760405162461bcd60e51b81526020600482018190526024820152600080516020620035ae83398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152602460205260409020805460ff1916911515919091179055565b6001600160a01b038216600081815260256020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b031633146200063b5760405162461bcd60e51b81526020600482018190526024820152600080516020620035ae833981519152604482015260640162000568565b6001600160a01b038216600081815260236020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006f25760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000568565b80600260008282546200070691906200097f565b90915550506001600160a01b03821660009081526020819052604081208054839290620007359084906200097f565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620007af57607f821691505b602082108103620007d057634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200077f57600081815260208120601f850160051c81016020861015620007ff5750805b601f850160051c820191505b8181101562000820578281556001016200080b565b505050505050565b81516001600160401b0381111562000844576200084462000784565b6200085c816200085584546200079a565b84620007d6565b602080601f8311600181146200089457600084156200087b5750858301515b600019600386901b1c1916600185901b17855562000820565b600085815260208120601f198616915b82811015620008c557888601518255948401946001909101908401620008a4565b5085821015620008e45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200090757600080fd5b81516001600160a01b03811681146200091f57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141762000956576200095662000926565b92915050565b6000826200097a57634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000956576200095662000926565b60805160a051612bb4620009fa6000396000818161057401528181610d9f01528181610fec0152611708015260008181610415015281816116ca015281816124b50152818161256e015281816125aa01528181612624015261268c0152612bb46000f3fe60806040526004361061037a5760003560e01c80638da5cb5b116101d1578063d257b34f11610102578063ea4cfe12116100a0578063f63743421161006f578063f637434214610a27578063f887ea4014610a3d578063f8b45b0514610a65578063fb002c9714610a7b57600080fd5b8063ea4cfe12146109bb578063ef8700e5146109db578063f11a24d3146109f1578063f2fde38b14610a0757600080fd5b8063e1bc3394116100dc578063e1bc339414610930578063e2f4560514610960578063e596219514610976578063e884f260146109a657600080fd5b8063d257b34f146108b4578063d85ba063146108d4578063dd62ed3e146108ea57600080fd5b8063a9059cbb1161016f578063bbc0c74211610149578063bbc0c74214610845578063c024666814610864578063c3f70b5214610884578063c876d0b91461089a57600080fd5b8063a9059cbb146107df578063b2041411146107ff578063b62496f51461081557600080fd5b806395d89b41116101ab57806395d89b411461076a5780639a7a23d61461077f578063a457c2d71461079f578063a5ece941146107bf57600080fd5b80638da5cb5b146107165780639213691314610734578063924de9b71461074a57600080fd5b806349bd5a5e116102ab5780636ddd171311610249578063751039fc11610223578063751039fc146106b65780637571336a146106cb5780637bce5a04146106eb5780638a8c523c1461070157600080fd5b80636ddd17131461064b57806370a082311461066b578063715018a6146106a157600080fd5b80634fbee193116102855780634fbee193146105c65780635a139dd4146105ff578063638b1b14146106155780636a486a8e1461063557600080fd5b806349bd5a5e146105625780634a62bb65146105965780634f77f6c0146105b057600080fd5b80631f3fed8f11610318578063313ce567116102f2578063313ce567146104e65780633221c93f1461050257806339509351146105225780634790c3211461054257600080fd5b80631f3fed8f1461049a57806323b872dd146104b057806327c8f835146104d057600080fd5b80631694505e116103545780631694505e1461040357806318160ddd1461044f57806318a94cf11461046e5780631a8145bb1461048457600080fd5b80630517d13d1461038657806306fdde03146103a8578063095ea7b3146103d357600080fd5b3661038157005b600080fd5b34801561039257600080fd5b506103a66103a1366004612704565b610a91565b005b3480156103b457600080fd5b506103bd610b71565b6040516103ca919061271d565b60405180910390f35b3480156103df57600080fd5b506103f36103ee366004612780565b610c03565b60405190151581526020016103ca565b34801561040f57600080fd5b506104377f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103ca565b34801561045b57600080fd5b506002545b6040519081526020016103ca565b34801561047a57600080fd5b50610460601d5481565b34801561049057600080fd5b5061046060205481565b3480156104a657600080fd5b50610460601f5481565b3480156104bc57600080fd5b506103f36104cb3660046127ac565b610c1a565b3480156104dc57600080fd5b5061043761dead81565b3480156104f257600080fd5b50604051601281526020016103ca565b34801561050e57600080fd5b50600854610437906001600160a01b031681565b34801561052e57600080fd5b506103f361053d366004612780565b610cc4565b34801561054e57600080fd5b506103a661055d3660046127fd565b610d00565b34801561056e57600080fd5b506104377f000000000000000000000000000000000000000000000000000000000000000081565b3480156105a257600080fd5b50600d546103f39060ff1681565b3480156105bc57600080fd5b50610460601e5481565b3480156105d257600080fd5b506103f36105e1366004612881565b6001600160a01b031660009081526023602052604090205460ff1690565b34801561060b57600080fd5b5061046060195481565b34801561062157600080fd5b50600754610437906001600160a01b031681565b34801561064157600080fd5b50610460601a5481565b34801561065757600080fd5b50600d546103f39062010000900460ff1681565b34801561067757600080fd5b50610460610686366004612881565b6001600160a01b031660009081526020819052604090205490565b3480156106ad57600080fd5b506103a6610e17565b3480156106c257600080fd5b506103f3610e4d565b3480156106d757600080fd5b506103a66106e636600461289e565b610e8a565b3480156106f757600080fd5b5061046060165481565b34801561070d57600080fd5b506103a6610edf565b34801561072257600080fd5b506005546001600160a01b0316610437565b34801561074057600080fd5b50610460601b5481565b34801561075657600080fd5b506103a66107653660046128d3565b610f6b565b34801561077657600080fd5b506103bd610fb1565b34801561078b57600080fd5b506103a661079a36600461289e565b610fc0565b3480156107ab57600080fd5b506103f36107ba366004612780565b61109f565b3480156107cb57600080fd5b50600654610437906001600160a01b031681565b3480156107eb57600080fd5b506103f36107fa366004612780565b611138565b34801561080b57600080fd5b5061046060185481565b34801561082157600080fd5b506103f3610830366004612881565b60256020526000908152604090205460ff1681565b34801561085157600080fd5b50600d546103f390610100900460ff1681565b34801561087057600080fd5b506103a661087f36600461289e565b611145565b34801561089057600080fd5b50610460600a5481565b3480156108a657600080fd5b506011546103f39060ff1681565b3480156108c057600080fd5b506103f36108cf366004612704565b6111ce565b3480156108e057600080fd5b5061046060155481565b3480156108f657600080fd5b506104606109053660046128ee565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561093c57600080fd5b506103f361094b366004612881565b60246020526000908152604090205460ff1681565b34801561096c57600080fd5b50610460600b5481565b34801561098257600080fd5b506103f3610991366004612881565b60146020526000908152604090205460ff1681565b3480156109b257600080fd5b506103f3611325565b3480156109c757600080fd5b50600954610437906001600160a01b031681565b3480156109e757600080fd5b5061046060215481565b3480156109fd57600080fd5b5061046060175481565b348015610a1357600080fd5b506103a6610a22366004612881565b611362565b348015610a3357600080fd5b50610460601c5481565b348015610a4957600080fd5b50610437737a250d5630b4cf539739df2c5dacb4c659f2488d81565b348015610a7157600080fd5b50610460600c5481565b348015610a8757600080fd5b5061046060225481565b6005546001600160a01b03163314610ac45760405162461bcd60e51b8152600401610abb90612927565b60405180910390fd5b670de0b6b3a76400006103e8610ad960025490565b610ae4906001612972565b610aee9190612989565b610af89190612989565b811015610b595760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61785472616e73616374696f6e206c6f776572206044820152687468616e20302e312560b81b6064820152608401610abb565b610b6b81670de0b6b3a7640000612972565b600a5550565b606060038054610b80906129ab565b80601f0160208091040260200160405190810160405280929190818152602001828054610bac906129ab565b8015610bf95780601f10610bce57610100808354040283529160200191610bf9565b820191906000526020600020905b815481529060010190602001808311610bdc57829003601f168201915b5050505050905090565b6000610c103384846113fd565b5060015b92915050565b6000610c27848484611521565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610cac5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610abb565b610cb985338584036113fd565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c10918590610cfb9086906129e5565b6113fd565b6005546001600160a01b03163314610d2a5760405162461bcd60e51b8152600401610abb90612927565b60005b82811015610e11576000848483818110610d4957610d496129f8565b9050602002016020810190610d5e9190612881565b90506001600160a01b0381163014801590610d9657506001600160a01b038116737a250d5630b4cf539739df2c5dacb4c659f2488d14155b8015610dd457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031614155b15610dfe576001600160a01b0381166000908152601460205260409020805460ff19168415151790555b5080610e0981612a0e565b915050610d2d565b50505050565b6005546001600160a01b03163314610e415760405162461bcd60e51b8152600401610abb90612927565b610e4b6000611f38565b565b6005546000906001600160a01b03163314610e7a5760405162461bcd60e51b8152600401610abb90612927565b50600d805460ff19169055600190565b6005546001600160a01b03163314610eb45760405162461bcd60e51b8152600401610abb90612927565b6001600160a01b03919091166000908152602460205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610f095760405162461bcd60e51b8152600401610abb90612927565b600d54610100900460ff1615610f545760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e481b185d5b98da195960821b6044820152606401610abb565b600d80544360125562ffff00191662010100179055565b6005546001600160a01b03163314610f955760405162461bcd60e51b8152600401610abb90612927565b600d8054911515620100000262ff000019909216919091179055565b606060048054610b80906129ab565b6005546001600160a01b03163314610fea5760405162461bcd60e51b8152600401610abb90612927565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036110915760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610abb565b61109b8282611f8a565b5050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156111215760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610abb565b61112e33858584036113fd565b5060019392505050565b6000610c10338484611521565b6005546001600160a01b0316331461116f5760405162461bcd60e51b8152600401610abb90612927565b6001600160a01b038216600081815260236020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546000906001600160a01b031633146111fb5760405162461bcd60e51b8152600401610abb90612927565b620186a061120860025490565b611213906001612972565b61121d9190612989565b82101561128a5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610abb565b6103e861129660025490565b6112a1906005612972565b6112ab9190612989565b8211156113175760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610abb565b50600b81905560015b919050565b6005546000906001600160a01b031633146113525760405162461bcd60e51b8152600401610abb90612927565b506011805460ff19169055600190565b6005546001600160a01b0316331461138c5760405162461bcd60e51b8152600401610abb90612927565b6001600160a01b0381166113f15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610abb565b6113fa81611f38565b50565b6001600160a01b03831661145f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610abb565b6001600160a01b0382166114c05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610abb565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166115475760405162461bcd60e51b8152600401610abb90612a27565b6001600160a01b03821661156d5760405162461bcd60e51b8152600401610abb90612a6c565b6001600160a01b03831660009081526014602052604090205460ff16156115bf5760405162461bcd60e51b815260206004820152600660248201526529b734b832b960d11b6044820152606401610abb565b806000036115d8576115d383836000611fde565b505050565b6005546001600160a01b031632036115f5576115d3838383611fde565b600d5460ff1615611a4557600554600160a01b900460ff16611a4557600d54610100900460ff166116a4576001600160a01b03831660009081526023602052604090205460ff168061165f57506001600160a01b03821660009081526023602052604090205460ff165b6116a45760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610abb565b60115460ff16156117eb576005546001600160a01b038381169116148015906116ff57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b801561173d57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b156117eb57326000908152600e602052604090205443116117d85760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610abb565b326000908152600e602052604090204390555b6001600160a01b03831660009081526025602052604090205460ff16801561182c57506001600160a01b03821660009081526024602052604090205460ff16155b1561190a57600a5481111561189b5760405162461bcd60e51b815260206004820152602f60248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526e36b0bc2a3930b739b0b1ba34b7b71760891b6064820152608401610abb565b600c546001600160a01b0383166000908152602081905260409020546118c190836129e5565b11156119055760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610abb565b611a45565b6001600160a01b03821660009081526025602052604090205460ff16801561194b57506001600160a01b03831660009081526024602052604090205460ff16155b156119bb57600a548111156119055760405162461bcd60e51b815260206004820152603060248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201526f1036b0bc2a3930b739b0b1ba34b7b71760811b6064820152608401610abb565b6001600160a01b03821660009081526024602052604090205460ff16611a4557600c546001600160a01b038316600090815260208190526040902054611a0190836129e5565b1115611a455760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610abb565b6001600160a01b03831660009081526023602052604090205460ff168015611a8557506001600160a01b03821660009081526023602052604090205460ff165b15611a8f57436010555b6001600160a01b03831660009081526023602052604090205460ff1615611abb576115d3838383612132565b6001600160a01b03831660009081526023602052604090205460ff16158015611afd57506001600160a01b03821660009081526023602052604090205460ff16155b15611ba3576001600160a01b03831660009081526025602052604090205460ff1615611b6f576001600160a01b0382166000908152600f602052604090208054158015611b6057506001600160a01b038316600090815260208190526040902054155b15611b69574381555b50611ba3565b6001600160a01b0383166000908152600f602052604090206010548154611b969190612aaf565b6002820155436001909101555b30600090815260208190526040902054600b5481108015908190611bcf5750600d5462010000900460ff165b8015611be55750600554600160a01b900460ff16155b8015611c0a57506001600160a01b03851660009081526025602052604090205460ff16155b8015611c2f57506001600160a01b03851660009081526023602052604090205460ff16155b8015611c5457506001600160a01b03841660009081526023602052604090205460ff16155b15611c82576005805460ff60a01b1916600160a01b179055611c7461216b565b6005805460ff60a01b191690555b6005546001600160a01b03861660009081526023602052604090205460ff600160a01b909204821615911680611cd057506001600160a01b03851660009081526023602052604090205460ff165b15611cd9575060005b60008115611f24576001600160a01b03861660009081526025602052604090205460ff168015611d0b57506000601a54115b15611df957611d306064611d2a601a548861243390919063ffffffff16565b90612446565b9050601a54601c5482611d439190612972565b611d4d9190612989565b60206000828254611d5e91906129e5565b9091555050601a54601d54611d739083612972565b611d7d9190612989565b60216000828254611d8e91906129e5565b9091555050601a54601b54611da39083612972565b611dad9190612989565b601f6000828254611dbe91906129e5565b9091555050601a54601e54611dd39083612972565b611ddd9190612989565b60226000828254611dee91906129e5565b90915550611f069050565b6001600160a01b03871660009081526025602052604090205460ff168015611e2357506000601554115b15611f0657611e426064611d2a6015548861243390919063ffffffff16565b905060155460175482611e559190612972565b611e5f9190612989565b60206000828254611e7091906129e5565b9091555050601554601854611e859083612972565b611e8f9190612989565b60216000828254611ea091906129e5565b9091555050601554601654611eb59083612972565b611ebf9190612989565b601f6000828254611ed091906129e5565b9091555050601554601954611ee59083612972565b611eef9190612989565b60226000828254611f0091906129e5565b90915550505b8015611f1757611f17873083611fde565b611f218186612aaf565b94505b611f2f878787611fde565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600081815260256020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166120045760405162461bcd60e51b8152600401610abb90612a27565b6001600160a01b03821661202a5760405162461bcd60e51b8152600401610abb90612a6c565b6001600160a01b038316600090815260208190526040902054818110156120a25760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610abb565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906120d99084906129e5565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161212591815260200190565b60405180910390a3610e11565b6001600160a01b0380841660009081526020819052604080822080548581039091559285168252812080548492906120d99084906129e5565b3060009081526020819052604081205490506000602254602154601f5460205461219591906129e5565b61219f91906129e5565b6121a991906129e5565b905060008215806121b8575081155b156121c257505050565b600b546121d0906010612972565b8311156121e857600b546121e5906010612972565b92505b6000600283602054866121fb9190612972565b6122059190612989565b61220f9190612989565b9050600061221d8583612452565b9050476122298261245e565b60006122354783612452565b9050600061225287611d2a601f548561243390919063ffffffff16565b9050600061226f88611d2a6021548661243390919063ffffffff16565b9050600061228c89611d2a6022548761243390919063ffffffff16565b90506000818361229c8688612aaf565b6122a69190612aaf565b6122b09190612aaf565b60006020819055601f819055602181905560228190556007546040519293506001600160a01b031691859181818185875af1925050503d8060008114612312576040519150601f19603f3d011682016040523d82523d6000602084013e612317565b606091505b5090995050871580159061232b5750600081115b1561237c5761233a888261261e565b60208054604080518a81529283018490528201527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b6009546040516001600160a01b03909116908390600081818185875af1925050503d80600081146123c9576040519150601f19603f3d011682016040523d82523d6000602084013e6123ce565b606091505b5050600654604051919a506001600160a01b0316904790600081818185875af1925050503d806000811461241e576040519150601f19603f3d011682016040523d82523d6000602084013e612423565b606091505b5050505050505050505050505050565b600061243f8284612972565b9392505050565b600061243f8284612989565b600061243f8284612aaf565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612493576124936129f8565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612511573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125359190612ac2565b81600181518110612548576125486129f8565b60200260200101906001600160a01b031690816001600160a01b031681525050612593307f0000000000000000000000000000000000000000000000000000000000000000846113fd565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906125e8908590600090869030904290600401612adf565b600060405180830381600087803b15801561260257600080fd5b505af1158015612616573d6000803e3d6000fd5b505050505050565b612649307f0000000000000000000000000000000000000000000000000000000000000000846113fd565b60085460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000009091169063f305d71990839060c40160606040518083038185885af11580156126d8573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906126fd9190612b50565b5050505050565b60006020828403121561271657600080fd5b5035919050565b600060208083528351808285015260005b8181101561274a5785810183015185820160400152820161272e565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146113fa57600080fd5b6000806040838503121561279357600080fd5b823561279e8161276b565b946020939093013593505050565b6000806000606084860312156127c157600080fd5b83356127cc8161276b565b925060208401356127dc8161276b565b929592945050506040919091013590565b8035801515811461132057600080fd5b60008060006040848603121561281257600080fd5b833567ffffffffffffffff8082111561282a57600080fd5b818601915086601f83011261283e57600080fd5b81358181111561284d57600080fd5b8760208260051b850101111561286257600080fd5b60209283019550935061287891860190506127ed565b90509250925092565b60006020828403121561289357600080fd5b813561243f8161276b565b600080604083850312156128b157600080fd5b82356128bc8161276b565b91506128ca602084016127ed565b90509250929050565b6000602082840312156128e557600080fd5b61243f826127ed565b6000806040838503121561290157600080fd5b823561290c8161276b565b9150602083013561291c8161276b565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610c1457610c1461295c565b6000826129a657634e487b7160e01b600052601260045260246000fd5b500490565b600181811c908216806129bf57607f821691505b6020821081036129df57634e487b7160e01b600052602260045260246000fd5b50919050565b80820180821115610c1457610c1461295c565b634e487b7160e01b600052603260045260246000fd5b600060018201612a2057612a2061295c565b5060010190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610c1457610c1461295c565b600060208284031215612ad457600080fd5b815161243f8161276b565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612b2f5784516001600160a01b031683529383019391830191600101612b0a565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612b6557600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122011decf53b2dc95c29a075176ac52c394e7256e10986f41f2bf5f4e731cdb524e64736f6c634300081300334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x60806040526004361061037a5760003560e01c80638da5cb5b116101d1578063d257b34f11610102578063ea4cfe12116100a0578063f63743421161006f578063f637434214610a27578063f887ea4014610a3d578063f8b45b0514610a65578063fb002c9714610a7b57600080fd5b8063ea4cfe12146109bb578063ef8700e5146109db578063f11a24d3146109f1578063f2fde38b14610a0757600080fd5b8063e1bc3394116100dc578063e1bc339414610930578063e2f4560514610960578063e596219514610976578063e884f260146109a657600080fd5b8063d257b34f146108b4578063d85ba063146108d4578063dd62ed3e146108ea57600080fd5b8063a9059cbb1161016f578063bbc0c74211610149578063bbc0c74214610845578063c024666814610864578063c3f70b5214610884578063c876d0b91461089a57600080fd5b8063a9059cbb146107df578063b2041411146107ff578063b62496f51461081557600080fd5b806395d89b41116101ab57806395d89b411461076a5780639a7a23d61461077f578063a457c2d71461079f578063a5ece941146107bf57600080fd5b80638da5cb5b146107165780639213691314610734578063924de9b71461074a57600080fd5b806349bd5a5e116102ab5780636ddd171311610249578063751039fc11610223578063751039fc146106b65780637571336a146106cb5780637bce5a04146106eb5780638a8c523c1461070157600080fd5b80636ddd17131461064b57806370a082311461066b578063715018a6146106a157600080fd5b80634fbee193116102855780634fbee193146105c65780635a139dd4146105ff578063638b1b14146106155780636a486a8e1461063557600080fd5b806349bd5a5e146105625780634a62bb65146105965780634f77f6c0146105b057600080fd5b80631f3fed8f11610318578063313ce567116102f2578063313ce567146104e65780633221c93f1461050257806339509351146105225780634790c3211461054257600080fd5b80631f3fed8f1461049a57806323b872dd146104b057806327c8f835146104d057600080fd5b80631694505e116103545780631694505e1461040357806318160ddd1461044f57806318a94cf11461046e5780631a8145bb1461048457600080fd5b80630517d13d1461038657806306fdde03146103a8578063095ea7b3146103d357600080fd5b3661038157005b600080fd5b34801561039257600080fd5b506103a66103a1366004612704565b610a91565b005b3480156103b457600080fd5b506103bd610b71565b6040516103ca919061271d565b60405180910390f35b3480156103df57600080fd5b506103f36103ee366004612780565b610c03565b60405190151581526020016103ca565b34801561040f57600080fd5b506104377f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016103ca565b34801561045b57600080fd5b506002545b6040519081526020016103ca565b34801561047a57600080fd5b50610460601d5481565b34801561049057600080fd5b5061046060205481565b3480156104a657600080fd5b50610460601f5481565b3480156104bc57600080fd5b506103f36104cb3660046127ac565b610c1a565b3480156104dc57600080fd5b5061043761dead81565b3480156104f257600080fd5b50604051601281526020016103ca565b34801561050e57600080fd5b50600854610437906001600160a01b031681565b34801561052e57600080fd5b506103f361053d366004612780565b610cc4565b34801561054e57600080fd5b506103a661055d3660046127fd565b610d00565b34801561056e57600080fd5b506104377f0000000000000000000000004157995efb0f02178fcbfe379371061aa6c6702c81565b3480156105a257600080fd5b50600d546103f39060ff1681565b3480156105bc57600080fd5b50610460601e5481565b3480156105d257600080fd5b506103f36105e1366004612881565b6001600160a01b031660009081526023602052604090205460ff1690565b34801561060b57600080fd5b5061046060195481565b34801561062157600080fd5b50600754610437906001600160a01b031681565b34801561064157600080fd5b50610460601a5481565b34801561065757600080fd5b50600d546103f39062010000900460ff1681565b34801561067757600080fd5b50610460610686366004612881565b6001600160a01b031660009081526020819052604090205490565b3480156106ad57600080fd5b506103a6610e17565b3480156106c257600080fd5b506103f3610e4d565b3480156106d757600080fd5b506103a66106e636600461289e565b610e8a565b3480156106f757600080fd5b5061046060165481565b34801561070d57600080fd5b506103a6610edf565b34801561072257600080fd5b506005546001600160a01b0316610437565b34801561074057600080fd5b50610460601b5481565b34801561075657600080fd5b506103a66107653660046128d3565b610f6b565b34801561077657600080fd5b506103bd610fb1565b34801561078b57600080fd5b506103a661079a36600461289e565b610fc0565b3480156107ab57600080fd5b506103f36107ba366004612780565b61109f565b3480156107cb57600080fd5b50600654610437906001600160a01b031681565b3480156107eb57600080fd5b506103f36107fa366004612780565b611138565b34801561080b57600080fd5b5061046060185481565b34801561082157600080fd5b506103f3610830366004612881565b60256020526000908152604090205460ff1681565b34801561085157600080fd5b50600d546103f390610100900460ff1681565b34801561087057600080fd5b506103a661087f36600461289e565b611145565b34801561089057600080fd5b50610460600a5481565b3480156108a657600080fd5b506011546103f39060ff1681565b3480156108c057600080fd5b506103f36108cf366004612704565b6111ce565b3480156108e057600080fd5b5061046060155481565b3480156108f657600080fd5b506104606109053660046128ee565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561093c57600080fd5b506103f361094b366004612881565b60246020526000908152604090205460ff1681565b34801561096c57600080fd5b50610460600b5481565b34801561098257600080fd5b506103f3610991366004612881565b60146020526000908152604090205460ff1681565b3480156109b257600080fd5b506103f3611325565b3480156109c757600080fd5b50600954610437906001600160a01b031681565b3480156109e757600080fd5b5061046060215481565b3480156109fd57600080fd5b5061046060175481565b348015610a1357600080fd5b506103a6610a22366004612881565b611362565b348015610a3357600080fd5b50610460601c5481565b348015610a4957600080fd5b50610437737a250d5630b4cf539739df2c5dacb4c659f2488d81565b348015610a7157600080fd5b50610460600c5481565b348015610a8757600080fd5b5061046060225481565b6005546001600160a01b03163314610ac45760405162461bcd60e51b8152600401610abb90612927565b60405180910390fd5b670de0b6b3a76400006103e8610ad960025490565b610ae4906001612972565b610aee9190612989565b610af89190612989565b811015610b595760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61785472616e73616374696f6e206c6f776572206044820152687468616e20302e312560b81b6064820152608401610abb565b610b6b81670de0b6b3a7640000612972565b600a5550565b606060038054610b80906129ab565b80601f0160208091040260200160405190810160405280929190818152602001828054610bac906129ab565b8015610bf95780601f10610bce57610100808354040283529160200191610bf9565b820191906000526020600020905b815481529060010190602001808311610bdc57829003601f168201915b5050505050905090565b6000610c103384846113fd565b5060015b92915050565b6000610c27848484611521565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610cac5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610abb565b610cb985338584036113fd565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c10918590610cfb9086906129e5565b6113fd565b6005546001600160a01b03163314610d2a5760405162461bcd60e51b8152600401610abb90612927565b60005b82811015610e11576000848483818110610d4957610d496129f8565b9050602002016020810190610d5e9190612881565b90506001600160a01b0381163014801590610d9657506001600160a01b038116737a250d5630b4cf539739df2c5dacb4c659f2488d14155b8015610dd457507f0000000000000000000000004157995efb0f02178fcbfe379371061aa6c6702c6001600160a01b0316816001600160a01b031614155b15610dfe576001600160a01b0381166000908152601460205260409020805460ff19168415151790555b5080610e0981612a0e565b915050610d2d565b50505050565b6005546001600160a01b03163314610e415760405162461bcd60e51b8152600401610abb90612927565b610e4b6000611f38565b565b6005546000906001600160a01b03163314610e7a5760405162461bcd60e51b8152600401610abb90612927565b50600d805460ff19169055600190565b6005546001600160a01b03163314610eb45760405162461bcd60e51b8152600401610abb90612927565b6001600160a01b03919091166000908152602460205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610f095760405162461bcd60e51b8152600401610abb90612927565b600d54610100900460ff1615610f545760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e481b185d5b98da195960821b6044820152606401610abb565b600d80544360125562ffff00191662010100179055565b6005546001600160a01b03163314610f955760405162461bcd60e51b8152600401610abb90612927565b600d8054911515620100000262ff000019909216919091179055565b606060048054610b80906129ab565b6005546001600160a01b03163314610fea5760405162461bcd60e51b8152600401610abb90612927565b7f0000000000000000000000004157995efb0f02178fcbfe379371061aa6c6702c6001600160a01b0316826001600160a01b0316036110915760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610abb565b61109b8282611f8a565b5050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156111215760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610abb565b61112e33858584036113fd565b5060019392505050565b6000610c10338484611521565b6005546001600160a01b0316331461116f5760405162461bcd60e51b8152600401610abb90612927565b6001600160a01b038216600081815260236020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546000906001600160a01b031633146111fb5760405162461bcd60e51b8152600401610abb90612927565b620186a061120860025490565b611213906001612972565b61121d9190612989565b82101561128a5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610abb565b6103e861129660025490565b6112a1906005612972565b6112ab9190612989565b8211156113175760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610abb565b50600b81905560015b919050565b6005546000906001600160a01b031633146113525760405162461bcd60e51b8152600401610abb90612927565b506011805460ff19169055600190565b6005546001600160a01b0316331461138c5760405162461bcd60e51b8152600401610abb90612927565b6001600160a01b0381166113f15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610abb565b6113fa81611f38565b50565b6001600160a01b03831661145f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610abb565b6001600160a01b0382166114c05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610abb565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166115475760405162461bcd60e51b8152600401610abb90612a27565b6001600160a01b03821661156d5760405162461bcd60e51b8152600401610abb90612a6c565b6001600160a01b03831660009081526014602052604090205460ff16156115bf5760405162461bcd60e51b815260206004820152600660248201526529b734b832b960d11b6044820152606401610abb565b806000036115d8576115d383836000611fde565b505050565b6005546001600160a01b031632036115f5576115d3838383611fde565b600d5460ff1615611a4557600554600160a01b900460ff16611a4557600d54610100900460ff166116a4576001600160a01b03831660009081526023602052604090205460ff168061165f57506001600160a01b03821660009081526023602052604090205460ff165b6116a45760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610abb565b60115460ff16156117eb576005546001600160a01b038381169116148015906116ff57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b801561173d57507f0000000000000000000000004157995efb0f02178fcbfe379371061aa6c6702c6001600160a01b0316826001600160a01b031614155b156117eb57326000908152600e602052604090205443116117d85760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610abb565b326000908152600e602052604090204390555b6001600160a01b03831660009081526025602052604090205460ff16801561182c57506001600160a01b03821660009081526024602052604090205460ff16155b1561190a57600a5481111561189b5760405162461bcd60e51b815260206004820152602f60248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526e36b0bc2a3930b739b0b1ba34b7b71760891b6064820152608401610abb565b600c546001600160a01b0383166000908152602081905260409020546118c190836129e5565b11156119055760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610abb565b611a45565b6001600160a01b03821660009081526025602052604090205460ff16801561194b57506001600160a01b03831660009081526024602052604090205460ff16155b156119bb57600a548111156119055760405162461bcd60e51b815260206004820152603060248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201526f1036b0bc2a3930b739b0b1ba34b7b71760811b6064820152608401610abb565b6001600160a01b03821660009081526024602052604090205460ff16611a4557600c546001600160a01b038316600090815260208190526040902054611a0190836129e5565b1115611a455760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610abb565b6001600160a01b03831660009081526023602052604090205460ff168015611a8557506001600160a01b03821660009081526023602052604090205460ff165b15611a8f57436010555b6001600160a01b03831660009081526023602052604090205460ff1615611abb576115d3838383612132565b6001600160a01b03831660009081526023602052604090205460ff16158015611afd57506001600160a01b03821660009081526023602052604090205460ff16155b15611ba3576001600160a01b03831660009081526025602052604090205460ff1615611b6f576001600160a01b0382166000908152600f602052604090208054158015611b6057506001600160a01b038316600090815260208190526040902054155b15611b69574381555b50611ba3565b6001600160a01b0383166000908152600f602052604090206010548154611b969190612aaf565b6002820155436001909101555b30600090815260208190526040902054600b5481108015908190611bcf5750600d5462010000900460ff165b8015611be55750600554600160a01b900460ff16155b8015611c0a57506001600160a01b03851660009081526025602052604090205460ff16155b8015611c2f57506001600160a01b03851660009081526023602052604090205460ff16155b8015611c5457506001600160a01b03841660009081526023602052604090205460ff16155b15611c82576005805460ff60a01b1916600160a01b179055611c7461216b565b6005805460ff60a01b191690555b6005546001600160a01b03861660009081526023602052604090205460ff600160a01b909204821615911680611cd057506001600160a01b03851660009081526023602052604090205460ff165b15611cd9575060005b60008115611f24576001600160a01b03861660009081526025602052604090205460ff168015611d0b57506000601a54115b15611df957611d306064611d2a601a548861243390919063ffffffff16565b90612446565b9050601a54601c5482611d439190612972565b611d4d9190612989565b60206000828254611d5e91906129e5565b9091555050601a54601d54611d739083612972565b611d7d9190612989565b60216000828254611d8e91906129e5565b9091555050601a54601b54611da39083612972565b611dad9190612989565b601f6000828254611dbe91906129e5565b9091555050601a54601e54611dd39083612972565b611ddd9190612989565b60226000828254611dee91906129e5565b90915550611f069050565b6001600160a01b03871660009081526025602052604090205460ff168015611e2357506000601554115b15611f0657611e426064611d2a6015548861243390919063ffffffff16565b905060155460175482611e559190612972565b611e5f9190612989565b60206000828254611e7091906129e5565b9091555050601554601854611e859083612972565b611e8f9190612989565b60216000828254611ea091906129e5565b9091555050601554601654611eb59083612972565b611ebf9190612989565b601f6000828254611ed091906129e5565b9091555050601554601954611ee59083612972565b611eef9190612989565b60226000828254611f0091906129e5565b90915550505b8015611f1757611f17873083611fde565b611f218186612aaf565b94505b611f2f878787611fde565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600081815260256020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166120045760405162461bcd60e51b8152600401610abb90612a27565b6001600160a01b03821661202a5760405162461bcd60e51b8152600401610abb90612a6c565b6001600160a01b038316600090815260208190526040902054818110156120a25760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610abb565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906120d99084906129e5565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161212591815260200190565b60405180910390a3610e11565b6001600160a01b0380841660009081526020819052604080822080548581039091559285168252812080548492906120d99084906129e5565b3060009081526020819052604081205490506000602254602154601f5460205461219591906129e5565b61219f91906129e5565b6121a991906129e5565b905060008215806121b8575081155b156121c257505050565b600b546121d0906010612972565b8311156121e857600b546121e5906010612972565b92505b6000600283602054866121fb9190612972565b6122059190612989565b61220f9190612989565b9050600061221d8583612452565b9050476122298261245e565b60006122354783612452565b9050600061225287611d2a601f548561243390919063ffffffff16565b9050600061226f88611d2a6021548661243390919063ffffffff16565b9050600061228c89611d2a6022548761243390919063ffffffff16565b90506000818361229c8688612aaf565b6122a69190612aaf565b6122b09190612aaf565b60006020819055601f819055602181905560228190556007546040519293506001600160a01b031691859181818185875af1925050503d8060008114612312576040519150601f19603f3d011682016040523d82523d6000602084013e612317565b606091505b5090995050871580159061232b5750600081115b1561237c5761233a888261261e565b60208054604080518a81529283018490528201527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b6009546040516001600160a01b03909116908390600081818185875af1925050503d80600081146123c9576040519150601f19603f3d011682016040523d82523d6000602084013e6123ce565b606091505b5050600654604051919a506001600160a01b0316904790600081818185875af1925050503d806000811461241e576040519150601f19603f3d011682016040523d82523d6000602084013e612423565b606091505b5050505050505050505050505050565b600061243f8284612972565b9392505050565b600061243f8284612989565b600061243f8284612aaf565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612493576124936129f8565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612511573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125359190612ac2565b81600181518110612548576125486129f8565b60200260200101906001600160a01b031690816001600160a01b031681525050612593307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846113fd565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906125e8908590600090869030904290600401612adf565b600060405180830381600087803b15801561260257600080fd5b505af1158015612616573d6000803e3d6000fd5b505050505050565b612649307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846113fd565b60085460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063f305d71990839060c40160606040518083038185885af11580156126d8573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906126fd9190612b50565b5050505050565b60006020828403121561271657600080fd5b5035919050565b600060208083528351808285015260005b8181101561274a5785810183015185820160400152820161272e565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146113fa57600080fd5b6000806040838503121561279357600080fd5b823561279e8161276b565b946020939093013593505050565b6000806000606084860312156127c157600080fd5b83356127cc8161276b565b925060208401356127dc8161276b565b929592945050506040919091013590565b8035801515811461132057600080fd5b60008060006040848603121561281257600080fd5b833567ffffffffffffffff8082111561282a57600080fd5b818601915086601f83011261283e57600080fd5b81358181111561284d57600080fd5b8760208260051b850101111561286257600080fd5b60209283019550935061287891860190506127ed565b90509250925092565b60006020828403121561289357600080fd5b813561243f8161276b565b600080604083850312156128b157600080fd5b82356128bc8161276b565b91506128ca602084016127ed565b90509250929050565b6000602082840312156128e557600080fd5b61243f826127ed565b6000806040838503121561290157600080fd5b823561290c8161276b565b9150602083013561291c8161276b565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610c1457610c1461295c565b6000826129a657634e487b7160e01b600052601260045260246000fd5b500490565b600181811c908216806129bf57607f821691505b6020821081036129df57634e487b7160e01b600052602260045260246000fd5b50919050565b80820180821115610c1457610c1461295c565b634e487b7160e01b600052603260045260246000fd5b600060018201612a2057612a2061295c565b5060010190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610c1457610c1461295c565b600060208284031215612ad457600080fd5b815161243f8161276b565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612b2f5784516001600160a01b031683529383019391830191600101612b0a565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612b6557600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122011decf53b2dc95c29a075176ac52c394e7256e10986f41f2bf5f4e731cdb524e64736f6c63430008130033

Deployed Bytecode Sourcemap

15530:17166:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21938:265;;;;;;;;;;-1:-1:-1;21938:265:0;;;;;:::i;:::-;;:::i;:::-;;2730:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3644:169;;;;;;;;;;-1:-1:-1;3644:169:0;;;;;:::i;:::-;;:::i;:::-;;;1373:14:1;;1366:22;1348:41;;1336:2;1321:18;3644:169:0;1208:187:1;15614:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1591:32:1;;;1573:51;;1561:2;1546:18;15614:51:0;1400:230:1;3051:108:0;;;;;;;;;;-1:-1:-1;3139:12:0;;3051:108;;;1781:25:1;;;1769:2;1754:18;3051:108:0;1635:177:1;17151:33:0;;;;;;;;;;;;;;;;17272;;;;;;;;;;;;;;;;17232;;;;;;;;;;;;;;;;3821:492;;;;;;;;;;-1:-1:-1;3821:492:0;;;;;:::i;:::-;;:::i;15717:53::-;;;;;;;;;;;;15763:6;15717:53;;2950:93;;;;;;;;;;-1:-1:-1;2950:93:0;;3033:2;2628:36:1;;2616:2;2601:18;2950:93:0;2486:184:1;16114:39:0;;;;;;;;;;-1:-1:-1;16114:39:0;;;;-1:-1:-1;;;;;16114:39:0;;;4321:215;;;;;;;;;;-1:-1:-1;4321:215:0;;;;;:::i;:::-;;:::i;29175:386::-;;;;;;;;;;-1:-1:-1;29175:386:0;;;;;:::i;:::-;;:::i;15672:38::-;;;;;;;;;;;;;;;16318:33;;;;;;;;;;-1:-1:-1;16318:33:0;;;;;;;;17191:32;;;;;;;;;;;;;;;;23274:126;;;;;;;;;;-1:-1:-1;23274:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;23364:28:0;23340:4;23364:28;;;:19;:28;;;;;;;;;23274:126;17000:31;;;;;;;;;;;;;;;;16066:41;;;;;;;;;;-1:-1:-1;16066:41:0;;;;-1:-1:-1;;;;;16066:41:0;;;17040:28;;;;;;;;;;;;;;;;16398:31;;;;;;;;;;-1:-1:-1;16398:31:0;;;;;;;;;;;3167:127;;;;;;;;;;-1:-1:-1;3167:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;3268:18:0;3241:7;3268:18;;;;;;;;;;;;3167:127;852:103;;;;;;;;;;;;;:::i;21046:121::-;;;;;;;;;;;;;:::i;22211:161::-;;;;;;;;;;-1:-1:-1;22211:161:0;;;;;:::i;:::-;;:::i;16887:30::-;;;;;;;;;;;;;;;;20791:203;;;;;;;;;;;;;:::i;629:87::-;;;;;;;;;;-1:-1:-1;702:6:0;;-1:-1:-1;;;;;702:6:0;629:87;;17075:31;;;;;;;;;;;;;;;;22468:100;;;;;;;;;;-1:-1:-1;22468:100:0;;;;;:::i;:::-;;:::i;2838:104::-;;;;;;;;;;;;;:::i;22766:304::-;;;;;;;;;;-1:-1:-1;22766:304:0;;;;;:::i;:::-;;:::i;4544:413::-;;;;;;;;;;-1:-1:-1;4544:413:0;;;;;:::i;:::-;;:::i;16020:39::-;;;;;;;;;;-1:-1:-1;16020:39:0;;;;-1:-1:-1;;;;;16020:39:0;;;3302:175;;;;;;;;;;-1:-1:-1;3302:175:0;;;;;:::i;:::-;;:::i;16961:32::-;;;;;;;;;;;;;;;;17522:57;;;;;;;;;;-1:-1:-1;17522:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16358:33;;;;;;;;;;-1:-1:-1;16358:33:0;;;;;;;;;;;22576:182;;;;;;;;;;-1:-1:-1;22576:182:0;;;;;:::i;:::-;;:::i;16209:29::-;;;;;;;;;;;;;;;;16670:39;;;;;;;;;;-1:-1:-1;16670:39:0;;;;;;;;21433:497;;;;;;;;;;-1:-1:-1;21433:497:0;;;;;:::i;:::-;;:::i;16853:27::-;;;;;;;;;;;;;;;;3485:151;;;;;;;;;;-1:-1:-1;3485:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;3601:18:0;;;3574:7;3601:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3485:151;17456:57;;;;;;;;;;-1:-1:-1;17456:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16245:33;;;;;;;;;;;;;;;;16805:39;;;;;;;;;;-1:-1:-1;16805:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21228:135;;;;;;;;;;;;;:::i;16160:40::-;;;;;;;;;;-1:-1:-1;16160:40:0;;;;-1:-1:-1;;;;;16160:40:0;;;17312:35;;;;;;;;;;;;;;;;16924:30;;;;;;;;;;;;;;;;963:201;;;;;;;;;;-1:-1:-1;963:201:0;;;;;:::i;:::-;;:::i;17113:31::-;;;;;;;;;;;;;;;;15777:75;;;;;;;;;;;;15810:42;15777:75;;16285:24;;;;;;;;;;;;;;;;17354:34;;;;;;;;;;;;;;;;21938:265;702:6;;-1:-1:-1;;;;;702:6:0;255:10;764:23;756:68;;;;-1:-1:-1;;;756:68:0;;;;;;;:::i;:::-;;;;;;;;;22077:4:::1;22069;22048:13;3139:12:::0;;;3051:108;22048:13:::1;:17;::::0;22064:1:::1;22048:17;:::i;:::-;22047:26;;;;:::i;:::-;22046:35;;;;:::i;:::-;22036:6;:45;;22014:136;;;::::0;-1:-1:-1;;;22014:136:0;;5998:2:1;22014:136:0::1;::::0;::::1;5980:21:1::0;6037:2;6017:18;;;6010:30;6076:34;6056:18;;;6049:62;-1:-1:-1;;;6127:18:1;;;6120:39;6176:19;;22014:136:0::1;5796:405:1::0;22014:136:0::1;22178:17;:6:::0;22188::::1;22178:17;:::i;:::-;22161:14;:34:::0;-1:-1:-1;21938:265:0:o;2730:100::-;2784:13;2817:5;2810:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2730:100;:::o;3644:169::-;3727:4;3744:39;255:10;3767:7;3776:6;3744:8;:39::i;:::-;-1:-1:-1;3801:4:0;3644:169;;;;;:::o;3821:492::-;3961:4;3978:36;3988:6;3996:9;4007:6;3978:9;:36::i;:::-;-1:-1:-1;;;;;4054:19:0;;4027:24;4054:19;;;:11;:19;;;;;;;;255:10;4054:33;;;;;;;;4106:26;;;;4098:79;;;;-1:-1:-1;;;4098:79:0;;6793:2:1;4098:79:0;;;6775:21:1;6832:2;6812:18;;;6805:30;6871:34;6851:18;;;6844:62;-1:-1:-1;;;6922:18:1;;;6915:38;6970:19;;4098:79:0;6591:404:1;4098:79:0;4213:57;4222:6;255:10;4263:6;4244:16;:25;4213:8;:57::i;:::-;-1:-1:-1;4301:4:0;;3821:492;-1:-1:-1;;;;3821:492:0:o;4321:215::-;255:10;4409:4;4458:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4458:34:0;;;;;;;;;;4409:4;;4426:80;;4449:7;;4458:47;;4495:10;;4458:47;:::i;:::-;4426:8;:80::i;29175:386::-;702:6;;-1:-1:-1;;;;;702:6:0;255:10;764:23;756:68;;;;-1:-1:-1;;;756:68:0;;;;;;;:::i;:::-;29279:9:::1;29275:279;29293:17:::0;;::::1;29275:279;;;29330:15;29348:8;;29357:1;29348:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;29330:29:::0;-1:-1:-1;;;;;;29377:24:0;::::1;29396:4;29377:24;::::0;::::1;::::0;:62:::1;;-1:-1:-1::0;;;;;;29422:17:0;::::1;15810:42;29422:17;;29377:62;:116;;;;;29479:13;-1:-1:-1::0;;;;;29460:33:0::1;:7;-1:-1:-1::0;;;;;29460:33:0::1;;;29377:116;29374:168;;;-1:-1:-1::0;;;;;29512:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:30;;-1:-1:-1;;29512:30:0::1;::::0;::::1;;;::::0;;29374:168:::1;-1:-1:-1::0;29311:3:0;::::1;::::0;::::1;:::i;:::-;;;;29275:279;;;;29175:386:::0;;;:::o;852:103::-;702:6;;-1:-1:-1;;;;;702:6:0;255:10;764:23;756:68;;;;-1:-1:-1;;;756:68:0;;;;;;;:::i;:::-;917:30:::1;944:1;917:18;:30::i;:::-;852:103::o:0;21046:121::-;702:6;;21098:4;;-1:-1:-1;;;;;702:6:0;255:10;764:23;756:68;;;;-1:-1:-1;;;756:68:0;;;;;;;:::i;:::-;-1:-1:-1;21115:14:0::1;:22:::0;;-1:-1:-1;;21115:22:0::1;::::0;;;21046:121;:::o;22211:161::-;702:6;;-1:-1:-1;;;;;702:6:0;255:10;764:23;756:68;;;;-1:-1:-1;;;756:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22324:33:0;;;::::1;;::::0;;;:25:::1;:33;::::0;;;;:40;;-1:-1:-1;;22324:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22211:161::o;20791:203::-;702:6;;-1:-1:-1;;;;;702:6:0;255:10;764:23;756:68;;;;-1:-1:-1;;;756:68:0;;;;;;;:::i;:::-;20855:13:::1;::::0;::::1;::::0;::::1;;;20854:14;20846:43;;;::::0;-1:-1:-1;;;20846:43:0;;7604:2:1;20846:43:0::1;::::0;::::1;7586:21:1::0;7643:2;7623:18;;;7616:30;-1:-1:-1;;;7662:18:1;;;7655:46;7718:18;;20846:43:0::1;7402:340:1::0;20846:43:0::1;20900:13;:20:::0;;20945:12:::1;20931:11;:26:::0;-1:-1:-1;;20968:18:0;;;;;20791:203::o;22468:100::-;702:6;;-1:-1:-1;;;;;702:6:0;255:10;764:23;756:68;;;;-1:-1:-1;;;756:68:0;;;;;;;:::i;:::-;22539:11:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;22539:21:0;;::::1;::::0;;;::::1;::::0;;22468:100::o;2838:104::-;2894:13;2927:7;2920:14;;;;;:::i;22766:304::-;702:6;;-1:-1:-1;;;;;702:6:0;255:10;764:23;756:68;;;;-1:-1:-1;;;756:68:0;;;;;;;:::i;:::-;22910:13:::1;-1:-1:-1::0;;;;;22902:21:0::1;:4;-1:-1:-1::0;;;;;22902:21:0::1;::::0;22880:128:::1;;;::::0;-1:-1:-1;;;22880:128:0;;7949:2:1;22880:128:0::1;::::0;::::1;7931:21:1::0;7988:2;7968:18;;;7961:30;8027:34;8007:18;;;8000:62;8098:27;8078:18;;;8071:55;8143:19;;22880:128:0::1;7747:421:1::0;22880:128:0::1;23021:41;23050:4;23056:5;23021:28;:41::i;:::-;22766:304:::0;;:::o;4544:413::-;255:10;4637:4;4681:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4681:34:0;;;;;;;;;;4734:35;;;;4726:85;;;;-1:-1:-1;;;4726:85:0;;8375:2:1;4726:85:0;;;8357:21:1;8414:2;8394:18;;;8387:30;8453:34;8433:18;;;8426:62;-1:-1:-1;;;8504:18:1;;;8497:35;8549:19;;4726:85:0;8173:401:1;4726:85:0;4847:67;255:10;4870:7;4898:15;4879:16;:34;4847:8;:67::i;:::-;-1:-1:-1;4945:4:0;;4544:413;-1:-1:-1;;;4544:413:0:o;3302:175::-;3388:4;3405:42;255:10;3429:9;3440:6;3405:9;:42::i;22576:182::-;702:6;;-1:-1:-1;;;;;702:6:0;255:10;764:23;756:68;;;;-1:-1:-1;;;756:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22661:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;22661:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;22716:34;;1348:41:1;;;22716:34:0::1;::::0;1321:18:1;22716:34:0::1;;;;;;;22576:182:::0;;:::o;21433:497::-;702:6;;21541:4;;-1:-1:-1;;;;;702:6:0;255:10;764:23;756:68;;;;-1:-1:-1;;;756:68:0;;;;;;;:::i;:::-;21620:6:::1;21599:13;3139:12:::0;;;3051:108;21599:13:::1;:17;::::0;21615:1:::1;21599:17;:::i;:::-;21598:28;;;;:::i;:::-;21585:9;:41;;21563:144;;;::::0;-1:-1:-1;;;21563:144:0;;8781:2:1;21563:144:0::1;::::0;::::1;8763:21:1::0;8820:2;8800:18;;;8793:30;8859:34;8839:18;;;8832:62;-1:-1:-1;;;8910:18:1;;;8903:51;8971:19;;21563:144:0::1;8579:417:1::0;21563:144:0::1;21775:4;21754:13;3139:12:::0;;;3051:108;21754:13:::1;:17;::::0;21770:1:::1;21754:17;:::i;:::-;21753:26;;;;:::i;:::-;21740:9;:39;;21718:141;;;::::0;-1:-1:-1;;;21718:141:0;;9203:2:1;21718:141:0::1;::::0;::::1;9185:21:1::0;9242:2;9222:18;;;9215:30;9281:34;9261:18;;;9254:62;-1:-1:-1;;;9332:18:1;;;9325:50;9392:19;;21718:141:0::1;9001:416:1::0;21718:141:0::1;-1:-1:-1::0;21870:18:0::1;:30:::0;;;21918:4:::1;835:1;21433:497:::0;;;:::o;21228:135::-;702:6;;21288:4;;-1:-1:-1;;;;;702:6:0;255:10;764:23;756:68;;;;-1:-1:-1;;;756:68:0;;;;;;;:::i;:::-;-1:-1:-1;21305:20:0::1;:28:::0;;-1:-1:-1;;21305:28:0::1;::::0;;;21228:135;:::o;963:201::-;702:6;;-1:-1:-1;;;;;702:6:0;255:10;764:23;756:68;;;;-1:-1:-1;;;756:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1052:22:0;::::1;1044:73;;;::::0;-1:-1:-1;;;1044:73:0;;9624:2:1;1044:73:0::1;::::0;::::1;9606:21:1::0;9663:2;9643:18;;;9636:30;9702:34;9682:18;;;9675:62;-1:-1:-1;;;9753:18:1;;;9746:36;9799:19;;1044:73:0::1;9422:402:1::0;1044:73:0::1;1128:28;1147:8;1128:18;:28::i;:::-;963:201:::0;:::o;7205:380::-;-1:-1:-1;;;;;7341:19:0;;7333:68;;;;-1:-1:-1;;;7333:68:0;;10031:2:1;7333:68:0;;;10013:21:1;10070:2;10050:18;;;10043:30;10109:34;10089:18;;;10082:62;-1:-1:-1;;;10160:18:1;;;10153:34;10204:19;;7333:68:0;9829:400:1;7333:68:0;-1:-1:-1;;;;;7420:21:0;;7412:68;;;;-1:-1:-1;;;7412:68:0;;10436:2:1;7412:68:0;;;10418:21:1;10475:2;10455:18;;;10448:30;10514:34;10494:18;;;10487:62;-1:-1:-1;;;10565:18:1;;;10558:32;10607:19;;7412:68:0;10234:398:1;7412:68:0;-1:-1:-1;;;;;7493:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7545:32;;1781:25:1;;;7545:32:0;;1754:18:1;7545:32:0;;;;;;;7205:380;;;:::o;23408:5759::-;-1:-1:-1;;;;;23540:18:0;;23532:68;;;;-1:-1:-1;;;23532:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23619:16:0;;23611:64;;;;-1:-1:-1;;;23611:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23695:13:0;;;;;;:7;:13;;;;;;;;23694:14;23686:33;;;;-1:-1:-1;;;23686:33:0;;11649:2:1;23686:33:0;;;11631:21:1;11688:1;11668:18;;;11661:29;-1:-1:-1;;;11706:18:1;;;11699:36;11752:18;;23686:33:0;11447:329:1;23686:33:0;23736:6;23746:1;23736:11;23732:93;;23764:28;23780:4;23786:2;23790:1;23764:15;:28::i;:::-;23408:5759;;;:::o;23732:93::-;702:6;;-1:-1:-1;;;;;702:6:0;23841:9;:20;23837:107;;23878:33;23894:4;23900:2;23904:6;23878:15;:33::i;23837:107::-;23960:14;;;;23956:2264;;;23996:8;;-1:-1:-1;;;23996:8:0;;;;23991:2218;;24030:13;;;;;;;24025:223;;-1:-1:-1;;;;;24102:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;24131:23:0;;;;;;:19;:23;;;;;;;;24102:52;24068:160;;;;-1:-1:-1;;;24068:160:0;;11983:2:1;24068:160:0;;;11965:21:1;12022:2;12002:18;;;11995:30;-1:-1:-1;;;12041:18:1;;;12034:52;12103:18;;24068:160:0;11781:346:1;24068:160:0;24404:20;;;;24400:641;;;702:6;;-1:-1:-1;;;;;24479:13:0;;;702:6;;24479:13;;;;:72;;;24535:15;-1:-1:-1;;;;;24521:30:0;:2;-1:-1:-1;;;;;24521:30:0;;;24479:72;:129;;;;;24594:13;-1:-1:-1;;;;;24580:28:0;:2;-1:-1:-1;;;;;24580:28:0;;;24479:129;24449:573;;;24726:9;24697:39;;;;:28;:39;;;;;;24772:12;-1:-1:-1;24659:258:0;;;;-1:-1:-1;;;24659:258:0;;12334:2:1;24659:258:0;;;12316:21:1;12373:2;12353:18;;;12346:30;12412:34;12392:18;;;12385:62;12483:34;12463:18;;;12456:62;-1:-1:-1;;;12534:19:1;;;12527:40;12584:19;;24659:258:0;12132:477:1;24659:258:0;24973:9;24944:39;;;;:28;:39;;;;;24986:12;24944:54;;24449:573;-1:-1:-1;;;;;25115:31:0;;;;;;:25;:31;;;;;;;;:86;;;;-1:-1:-1;;;;;;25172:29:0;;;;;;:25;:29;;;;;;;;25171:30;25115:86;25089:1105;;;25288:14;;25278:6;:24;;25244:157;;;;-1:-1:-1;;;25244:157:0;;12816:2:1;25244:157:0;;;12798:21:1;12855:2;12835:18;;;12828:30;12894:34;12874:18;;;12867:62;-1:-1:-1;;;12945:18:1;;;12938:45;13000:19;;25244:157:0;12614:411:1;25244:157:0;25484:9;;-1:-1:-1;;;;;3268:18:0;;3241:7;3268:18;;;;;;;;;;;25458:22;;:6;:22;:::i;:::-;:35;;25424:140;;;;-1:-1:-1;;;25424:140:0;;13232:2:1;25424:140:0;;;13214:21:1;13271:2;13251:18;;;13244:30;-1:-1:-1;;;13290:18:1;;;13283:49;13349:18;;25424:140:0;13030:343:1;25424:140:0;25089:1105;;;-1:-1:-1;;;;;25662:29:0;;;;;;:25;:29;;;;;;;;:86;;;;-1:-1:-1;;;;;;25717:31:0;;;;;;:25;:31;;;;;;;;25716:32;25662:86;25636:558;;;25835:14;;25825:6;:24;;25791:158;;;;-1:-1:-1;;;25791:158:0;;13580:2:1;25791:158:0;;;13562:21:1;13619:2;13599:18;;;13592:30;13658:34;13638:18;;;13631:62;-1:-1:-1;;;13709:18:1;;;13702:46;13765:19;;25791:158:0;13378:412:1;25636:558:0;-1:-1:-1;;;;;25980:29:0;;;;;;:25;:29;;;;;;;;25975:219;;26094:9;;-1:-1:-1;;;;;3268:18:0;;3241:7;3268:18;;;;;;;;;;;26068:22;;:6;:22;:::i;:::-;:35;;26034:140;;;;-1:-1:-1;;;26034:140:0;;13232:2:1;26034:140:0;;;13214:21:1;13271:2;13251:18;;;13244:30;-1:-1:-1;;;13290:18:1;;;13283:49;13349:18;;26034:140:0;13030:343:1;26034:140:0;-1:-1:-1;;;;;26236:25:0;;;;;;:19;:25;;;;;;;;:52;;;;-1:-1:-1;;;;;;26265:23:0;;;;;;:19;:23;;;;;;;;26236:52;26232:115;;;26323:12;26305:15;:30;26232:115;-1:-1:-1;;;;;26361:25:0;;;;;;:19;:25;;;;;;;;26357:114;;;26403:35;26421:4;26427:2;26431:6;26403:17;:35::i;26357:114::-;-1:-1:-1;;;;;26486:25:0;;;;;;:19;:25;;;;;;;;26485:26;:54;;;;-1:-1:-1;;;;;;26516:23:0;;;;;;:19;:23;;;;;;;;26515:24;26485:54;26481:643;;;-1:-1:-1;;;;;26560:31:0;;;;;;:25;:31;;;;;;;;26556:557;;;-1:-1:-1;;;;;26648:24:0;;26612:33;26648:24;;;:20;:24;;;;;26695:28;;:33;:55;;;;-1:-1:-1;;;;;;3268:18:0;;3241:7;3268:18;;;;;;;;;;;26732;26695:55;26691:147;;;26806:12;26775:43;;26691:147;26593:260;26556:557;;;-1:-1:-1;;;;;26914:26:0;;26878:33;26914:26;;;:20;:26;;;;;27019:15;;26988:28;;:46;;27019:15;26988:46;:::i;:::-;26959:26;;;:75;27085:12;27053:29;;;;:44;26556:557;27185:4;27136:28;3268:18;;;;;;;;;;;27243;;27219:42;;;;;;;27292:35;;-1:-1:-1;27316:11:0;;;;;;;27292:35;:61;;;;-1:-1:-1;27345:8:0;;-1:-1:-1;;;27345:8:0;;;;27344:9;27292:61;:110;;;;-1:-1:-1;;;;;;27371:31:0;;;;;;:25;:31;;;;;;;;27370:32;27292:110;:153;;;;-1:-1:-1;;;;;;27420:25:0;;;;;;:19;:25;;;;;;;;27419:26;27292:153;:194;;;;-1:-1:-1;;;;;;27463:23:0;;;;;;:19;:23;;;;;;;;27462:24;27292:194;27274:326;;;27513:8;:15;;-1:-1:-1;;;;27513:15:0;-1:-1:-1;;;27513:15:0;;;27545:10;:8;:10::i;:::-;27572:8;:16;;-1:-1:-1;;;;27572:16:0;;;27274:326;27628:8;;-1:-1:-1;;;;;27738:25:0;;27612:12;27738:25;;;:19;:25;;;;;;27628:8;-1:-1:-1;;;27628:8:0;;;;;27627:9;;27738:25;;:52;;-1:-1:-1;;;;;;27767:23:0;;;;;;:19;:23;;;;;;;;27738:52;27734:100;;;-1:-1:-1;27817:5:0;27734:100;27846:12;27951:7;27947:1167;;;-1:-1:-1;;;;;28003:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;28052:1;28036:13;;:17;28003:50;27999:966;;;28081:34;28111:3;28081:25;28092:13;;28081:6;:10;;:25;;;;:::i;:::-;:29;;:34::i;:::-;28074:41;;28184:13;;28164:16;;28157:4;:23;;;;:::i;:::-;28156:41;;;;:::i;:::-;28134:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;28270:13:0;;28248:18;;28241:25;;:4;:25;:::i;:::-;28240:43;;;;:::i;:::-;28216:20;;:67;;;;;;;:::i;:::-;;;;-1:-1:-1;;28352:13:0;;28332:16;;28325:23;;:4;:23;:::i;:::-;28324:41;;;;:::i;:::-;28302:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;28436:13:0;;28415:17;;28408:24;;:4;:24;:::i;:::-;28407:42;;;;:::i;:::-;28384:19;;:65;;;;;;;:::i;:::-;;;;-1:-1:-1;27999:966:0;;-1:-1:-1;27999:966:0;;-1:-1:-1;;;;;28511:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;28561:1;28546:12;;:16;28511:51;28507:458;;;28590:33;28619:3;28590:24;28601:12;;28590:6;:10;;:24;;;;:::i;:33::-;28583:40;;28691:12;;28672:15;;28665:4;:22;;;;:::i;:::-;28664:39;;;;:::i;:::-;28642:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;28775:12:0;;28754:17;;28747:24;;:4;:24;:::i;:::-;28746:41;;;;:::i;:::-;28722:20;;:65;;;;;;;:::i;:::-;;;;-1:-1:-1;;28855:12:0;;28836:15;;28829:22;;:4;:22;:::i;:::-;28828:39;;;;:::i;:::-;28806:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;28937:12:0;;28917:16;;28910:23;;:4;:23;:::i;:::-;28909:40;;;;:::i;:::-;28886:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;28507:458:0;28985:8;;28981:91;;29014:42;29030:4;29044;29051;29014:15;:42::i;:::-;29088:14;29098:4;29088:14;;:::i;:::-;;;27947:1167;29126:33;29142:4;29148:2;29152:6;29126:15;:33::i;:::-;23521:5646;;;;23408:5759;;;:::o;1172:191::-;1265:6;;;-1:-1:-1;;;;;1282:17:0;;;-1:-1:-1;;;;;;1282:17:0;;;;;;;1315:40;;1265:6;;;1282:17;1265:6;;1315:40;;1246:16;;1315:40;1235:128;1172:191;:::o;23078:188::-;-1:-1:-1;;;;;23161:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;23161:39:0;;;;;;;;;;23218:40;;23161:39;;:31;23218:40;;;23078:188;;:::o;4965:733::-;-1:-1:-1;;;;;5105:20:0;;5097:70;;;;-1:-1:-1;;;5097:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5186:23:0;;5178:71;;;;-1:-1:-1;;;5178:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5346:17:0;;5322:21;5346:17;;;;;;;;;;;5382:23;;;;5374:74;;;;-1:-1:-1;;;5374:74:0;;14130:2:1;5374:74:0;;;14112:21:1;14169:2;14149:18;;;14142:30;14208:34;14188:18;;;14181:62;-1:-1:-1;;;14259:18:1;;;14252:36;14305:19;;5374:74:0;13928:402:1;5374:74:0;-1:-1:-1;;;;;5484:17:0;;;:9;:17;;;;;;;;;;;5504:22;;;5484:42;;5548:20;;;;;;;;:30;;5520:6;;5484:9;5548:30;;5520:6;;5548:30;:::i;:::-;;;;;;;;5613:9;-1:-1:-1;;;;;5596:35:0;5605:6;-1:-1:-1;;;;;5596:35:0;;5624:6;5596:35;;;;1781:25:1;;1769:2;1754:18;;1635:177;5596:35:0;;;;;;;;5644:46;23408:5759;5706:485;-1:-1:-1;;;;;5924:17:0;;;5900:21;5924:17;;;;;;;;;;;;;5997:22;;;5977:42;;;6041:20;;;;;;;:30;;6013:6;;5900:21;6041:30;;6013:6;;6041:30;:::i;30696:1997::-;30779:4;30735:23;3268:18;;;;;;;;;;;30735:50;;30796:25;30928:19;;30892:20;;30858:18;;30824;;:52;;;;:::i;:::-;:88;;;;:::i;:::-;:123;;;;:::i;:::-;30796:151;-1:-1:-1;30958:12:0;30987:20;;;:46;;-1:-1:-1;31011:22:0;;30987:46;30983:85;;;31050:7;;;30696:1997::o;30983:85::-;31102:18;;:23;;31123:2;31102:23;:::i;:::-;31084:15;:41;31080:115;;;31160:18;;:23;;31181:2;31160:23;:::i;:::-;31142:41;;31080:115;31256:23;31343:1;31323:17;31301:18;;31283:15;:36;;;;:::i;:::-;31282:58;;;;:::i;:::-;:62;;;;:::i;:::-;31256:88;-1:-1:-1;31355:26:0;31384:36;:15;31256:88;31384:19;:36::i;:::-;31355:65;-1:-1:-1;31461:21:0;31495:36;31355:65;31495:16;:36::i;:::-;31544:18;31565:44;:21;31591:17;31565:25;:44::i;:::-;31544:65;;31622:18;31643:57;31682:17;31643:34;31658:18;;31643:10;:14;;:34;;;;:::i;:57::-;31622:78;;31711:25;31739:59;31780:17;31739:36;31754:20;;31739:10;:14;;:36;;;;:::i;:59::-;31711:87;;31809:24;31836:58;31876:17;31836:35;31851:19;;31836:10;:14;;:35;;;;:::i;:58::-;31809:85;-1:-1:-1;31907:23:0;31809:85;31959:17;31933:23;31946:10;31933;:23;:::i;:::-;:43;;;;:::i;:::-;:62;;;;:::i;:::-;32029:1;32008:18;:22;;;32041:18;:22;;;32074:20;:24;;;32109:19;:23;;;32167:18;;32159:62;;31907:88;;-1:-1:-1;;;;;;32167:18:0;;32199:17;;32159:62;32029:1;32159:62;32199:17;32167:18;32159:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32145:76:0;;-1:-1:-1;;32238:19:0;;;;;:42;;;32279:1;32261:15;:19;32238:42;32234:278;;;32297:46;32310:15;32327;32297:12;:46::i;:::-;32467:18;;;32363:137;;;14747:25:1;;;14788:18;;;14781:34;;;14831:18;;14824:34;32363:137:0;;14735:2:1;14720:18;32363:137:0;;;;;;;32234:278;32544:17;;32536:60;;-1:-1:-1;;;;;32544:17:0;;;;32575:16;;32536:60;;;;32575:16;32544:17;32536:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;32629:16:0;;32621:64;;32522:74;;-1:-1:-1;;;;;;32629:16:0;;32659:21;;32621:64;;;;32659:21;32629:16;32621:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;30696:1997:0:o;9211:98::-;9269:7;9296:5;9300:1;9296;:5;:::i;:::-;9289:12;9211:98;-1:-1:-1;;;9211:98:0:o;9317:::-;9375:7;9402:5;9406:1;9402;:5;:::i;9105:98::-;9163:7;9190:5;9194:1;9190;:5;:::i;29569:589::-;29719:16;;;29733:1;29719:16;;;;;;;;29695:21;;29719:16;;;;;;;;;;-1:-1:-1;29719:16:0;29695:40;;29764:4;29746;29751:1;29746:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;29746:23:0;;;-1:-1:-1;;;;;29746:23:0;;;;;29790:15;-1:-1:-1;;;;;29790:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29780:4;29785:1;29780:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;29780:32:0;;;-1:-1:-1;;;;;29780:32:0;;;;;29825:62;29842:4;29857:15;29875:11;29825:8;:62::i;:::-;29926:224;;-1:-1:-1;;;29926:224:0;;-1:-1:-1;;;;;29926:15:0;:66;;;;:224;;30007:11;;30033:1;;30077:4;;30104;;30124:15;;29926:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29624:534;29569:589;:::o;30166:522::-;30314:62;30331:4;30346:15;30364:11;30314:8;:62::i;:::-;30623:16;;30419:261;;-1:-1:-1;;;30419:261:0;;30491:4;30419:261;;;16591:34:1;16641:18;;;16634:34;;;30537:1:0;16684:18:1;;;16677:34;;;16727:18;;;16720:34;-1:-1:-1;;;;;30623:16:0;;;16770:19:1;;;16763:44;30654:15:0;16823:19:1;;;16816:35;30419:15:0;:31;;;;;;30458:9;;16525:19:1;;30419:261:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;30166:522;;:::o;14:180:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;199:548::-;311:4;340:2;369;358:9;351:21;401:6;395:13;444:6;439:2;428:9;424:18;417:34;469:1;479:140;493:6;490:1;487:13;479:140;;;588:14;;;584:23;;578:30;554:17;;;573:2;550:26;543:66;508:10;;479:140;;;483:3;668:1;663:2;654:6;643:9;639:22;635:31;628:42;738:2;731;727:7;722:2;714:6;710:15;706:29;695:9;691:45;687:54;679:62;;;;199:548;;;;:::o;752:131::-;-1:-1:-1;;;;;827:31:1;;817:42;;807:70;;873:1;870;863:12;888:315;956:6;964;1017:2;1005:9;996:7;992:23;988:32;985:52;;;1033:1;1030;1023:12;985:52;1072:9;1059:23;1091:31;1116:5;1091:31;:::i;:::-;1141:5;1193:2;1178:18;;;;1165:32;;-1:-1:-1;;;888:315:1:o;1817:456::-;1894:6;1902;1910;1963:2;1951:9;1942:7;1938:23;1934:32;1931:52;;;1979:1;1976;1969:12;1931:52;2018:9;2005:23;2037:31;2062:5;2037:31;:::i;:::-;2087:5;-1:-1:-1;2144:2:1;2129:18;;2116:32;2157:33;2116:32;2157:33;:::i;:::-;1817:456;;2209:7;;-1:-1:-1;;;2263:2:1;2248:18;;;;2235:32;;1817:456::o;2899:160::-;2964:20;;3020:13;;3013:21;3003:32;;2993:60;;3049:1;3046;3039:12;3064:689;3156:6;3164;3172;3225:2;3213:9;3204:7;3200:23;3196:32;3193:52;;;3241:1;3238;3231:12;3193:52;3281:9;3268:23;3310:18;3351:2;3343:6;3340:14;3337:34;;;3367:1;3364;3357:12;3337:34;3405:6;3394:9;3390:22;3380:32;;3450:7;3443:4;3439:2;3435:13;3431:27;3421:55;;3472:1;3469;3462:12;3421:55;3512:2;3499:16;3538:2;3530:6;3527:14;3524:34;;;3554:1;3551;3544:12;3524:34;3609:7;3602:4;3592:6;3589:1;3585:14;3581:2;3577:23;3573:34;3570:47;3567:67;;;3630:1;3627;3620:12;3567:67;3661:4;3653:13;;;;-1:-1:-1;3685:6:1;-1:-1:-1;3710:37:1;;3726:20;;;-1:-1:-1;3710:37:1;:::i;:::-;3700:47;;3064:689;;;;;:::o;3758:247::-;3817:6;3870:2;3858:9;3849:7;3845:23;3841:32;3838:52;;;3886:1;3883;3876:12;3838:52;3925:9;3912:23;3944:31;3969:5;3944:31;:::i;4010:315::-;4075:6;4083;4136:2;4124:9;4115:7;4111:23;4107:32;4104:52;;;4152:1;4149;4142:12;4104:52;4191:9;4178:23;4210:31;4235:5;4210:31;:::i;:::-;4260:5;-1:-1:-1;4284:35:1;4315:2;4300:18;;4284:35;:::i;:::-;4274:45;;4010:315;;;;;:::o;4330:180::-;4386:6;4439:2;4427:9;4418:7;4414:23;4410:32;4407:52;;;4455:1;4452;4445:12;4407:52;4478:26;4494:9;4478:26;:::i;4515:388::-;4583:6;4591;4644:2;4632:9;4623:7;4619:23;4615:32;4612:52;;;4660:1;4657;4650:12;4612:52;4699:9;4686:23;4718:31;4743:5;4718:31;:::i;:::-;4768:5;-1:-1:-1;4825:2:1;4810:18;;4797:32;4838:33;4797:32;4838:33;:::i;:::-;4890:7;4880:17;;;4515:388;;;;;:::o;4908:356::-;5110:2;5092:21;;;5129:18;;;5122:30;5188:34;5183:2;5168:18;;5161:62;5255:2;5240:18;;4908:356::o;5269:127::-;5330:10;5325:3;5321:20;5318:1;5311:31;5361:4;5358:1;5351:15;5385:4;5382:1;5375:15;5401:168;5474:9;;;5505;;5522:15;;;5516:22;;5502:37;5492:71;;5543:18;;:::i;5574:217::-;5614:1;5640;5630:132;;5684:10;5679:3;5675:20;5672:1;5665:31;5719:4;5716:1;5709:15;5747:4;5744:1;5737:15;5630:132;-1:-1:-1;5776:9:1;;5574:217::o;6206:380::-;6285:1;6281:12;;;;6328;;;6349:61;;6403:4;6395:6;6391:17;6381:27;;6349:61;6456:2;6448:6;6445:14;6425:18;6422:38;6419:161;;6502:10;6497:3;6493:20;6490:1;6483:31;6537:4;6534:1;6527:15;6565:4;6562:1;6555:15;6419:161;;6206:380;;;:::o;7000:125::-;7065:9;;;7086:10;;;7083:36;;;7099:18;;:::i;7130:127::-;7191:10;7186:3;7182:20;7179:1;7172:31;7222:4;7219:1;7212:15;7246:4;7243:1;7236:15;7262:135;7301:3;7322:17;;;7319:43;;7342:18;;:::i;:::-;-1:-1:-1;7389:1:1;7378:13;;7262:135::o;10637:401::-;10839:2;10821:21;;;10878:2;10858:18;;;10851:30;10917:34;10912:2;10897:18;;10890:62;-1:-1:-1;;;10983:2:1;10968:18;;10961:35;11028:3;11013:19;;10637:401::o;11043:399::-;11245:2;11227:21;;;11284:2;11264:18;;;11257:30;11323:34;11318:2;11303:18;;11296:62;-1:-1:-1;;;11389:2:1;11374:18;;11367:33;11432:3;11417:19;;11043:399::o;13795:128::-;13862:9;;;13883:11;;;13880:37;;;13897:18;;:::i;15001:251::-;15071:6;15124:2;15112:9;15103:7;15099:23;15095:32;15092:52;;;15140:1;15137;15130:12;15092:52;15172:9;15166:16;15191:31;15216:5;15191:31;:::i;15257:980::-;15519:4;15567:3;15556:9;15552:19;15598:6;15587:9;15580:25;15624:2;15662:6;15657:2;15646:9;15642:18;15635:34;15705:3;15700:2;15689:9;15685:18;15678:31;15729:6;15764;15758:13;15795:6;15787;15780:22;15833:3;15822:9;15818:19;15811:26;;15872:2;15864:6;15860:15;15846:29;;15893:1;15903:195;15917:6;15914:1;15911:13;15903:195;;;15982:13;;-1:-1:-1;;;;;15978:39:1;15966:52;;16073:15;;;;16038:12;;;;16014:1;15932:9;15903:195;;;-1:-1:-1;;;;;;;16154:32:1;;;;16149:2;16134:18;;16127:60;-1:-1:-1;;;16218:3:1;16203:19;16196:35;16115:3;15257:980;-1:-1:-1;;;15257:980:1:o;16862:306::-;16950:6;16958;16966;17019:2;17007:9;16998:7;16994:23;16990:32;16987:52;;;17035:1;17032;17025:12;16987:52;17064:9;17058:16;17048:26;;17114:2;17103:9;17099:18;17093:25;17083:35;;17158:2;17147:9;17143:18;17137:25;17127:35;;16862:306;;;;;:::o

Swarm Source

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