ETH Price: $3,307.28 (+2.63%)
 

Overview

Max Total Supply

1,000,000,000 ORACUL

Holders

16

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
michaeljeetson.eth
Balance
10,500,000 ORACUL

Value
$0.00
0xb0a8ad238ac4cd4fff78080e77933ccefbf785e4
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:
oracul

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-05-21
*/

//Web: https://oracul.co/ 
//TG: https://t.me/oracul_a
//X: https://twitter.com/Oracul_ai

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.23;

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 _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 oracul is ERC20, Ownable {
    using SafeMath for uint256;

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

    bool private swapping;

    address public MarketingWallet;
    address public TeamWallet;

    uint256 public maxTx;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallets;

    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;
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyDevFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellDevFee;

    uint256 public tokensForMarkets;
    uint256 public tokensForDev;

    mapping(address => bool) private _isBlackList;
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedmaxTx;

    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 MarketingWalletUpdated(
        address indexed newWallet,
        address indexed olTeamWalletallet
    );

    event TeamWalletUpdated(
        address indexed newWallet,
        address indexed olTeamWalletallet
    );

    constructor() ERC20("Oracul Ai", unicode"ORACUL") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

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

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

        uint256 _buyMarketingFee = 30;
        uint256 _buyDevFee = 0;

        uint256 _sellMarketingFee = 50;
        uint256 _sellDevFee = 0;

        uint256 totalSupply = 1_000_000_000 * 1e18;

        maxTx = 15_000_000 * 1e18; // 1.5% from total supply 
        maxWallets = 15_000_000 * 1e18; // 1.5% from total supply
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet

        buyMarketingFee = _buyMarketingFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyDevFee;

        sellMarketingFee = _sellMarketingFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellDevFee;

        MarketingWallet = address(0x8945AF89d09eD916a68ec05D02B9EA4F7Fc68e0b);
        TeamWallet = address(0x8945AF89d09eD916a68ec05D02B9EA4F7Fc68e0b);

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

        excludeFrommaxTx(owner(), true);
        excludeFrommaxTx(address(this), true);
        excludeFrommaxTx(address(0xdead), true);

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }


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

        function eanbleLimits() external onlyOwner returns (bool) {
        limitsInEffect = true;
        return true;
    }

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

        function enableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = true;
        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 updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maxTx lower than 0.1%"
        );
        maxTx = newNum * (10**18);
    }

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

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

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

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyDevFee;
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellDevFee;
    }

    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 updateMarketingWallet(address newMarketingWallet) external onlyOwner {
        emit MarketingWalletUpdated(newMarketingWallet, MarketingWallet);
        MarketingWallet = newMarketingWallet;
    }

        function changeMarketingWallet(address newMarketingWallet) external onlyOwner {
        emit MarketingWalletUpdated(newMarketingWallet, MarketingWallet);
        MarketingWallet = newMarketingWallet;
    }

    function updateTeamWallet(address newWallet) external onlyOwner {
        emit TeamWalletUpdated(newWallet, TeamWallet);
        TeamWallet = newWallet;
    }

        function changeTeamWallet(address newWallet) external onlyOwner {
        emit TeamWalletUpdated(newWallet, TeamWallet);
        TeamWallet = newWallet;
    }

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

    event BoughtEarly(address indexed sniper);

    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(!_isBlackList[from], "[from] black list");
        require(!_isBlackList[to], "[to] black list");

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

        if (limitsInEffect) {
            if (from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !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] && !_isExcludedmaxTx[to]) {
                    require(amount <= maxTx, "Buy transfer amount exceeds the maxTx.");
                    require(amount + balanceOf(to) <= maxWallets, "Max wallet exceeded");
                }
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedmaxTx[from]) {
                    require(amount <= maxTx, "Sell transfer amount exceeds the maxTx.");
                }
                else if (!_isExcludedmaxTx[to]) {
                    require(amount + balanceOf(to) <= maxWallets, "Max wallet exceeded");
                }
            }
        }

        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);
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForMarkets += (fees * sellMarketingFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForMarkets += (fees * buyMarketingFee) / buyTotalFees;
            }

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

            amount -= fees;
        }

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

    function min(uint256 a, uint256 b) private pure returns (uint256) {
        return (a > b) ? b : a;
    }

    function manualSwap(uint256 amount) external {
        require(_msgSender() == MarketingWallet);
        require(amount <= balanceOf(address(this)) && amount > 0, "Wrong amount");
        swapTokensForEth(amount);
    }    

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

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

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

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForMarkets + tokensForDev;
        bool success;

        if (contractBalance == 0) {
            return;
        }

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

        uint256 initialETHBalance = address(this).balance;
        swapTokensForEth(contractBalance);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);

        tokensForMarkets = 0;
        tokensForDev = 0;

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","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":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"olTeamWalletallet","type":"address"}],"name":"MarketingWalletUpdated","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":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"olTeamWalletallet","type":"address"}],"name":"TeamWalletUpdated","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":[],"name":"MarketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TeamWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedmaxTx","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":[],"name":"buyDevFee","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":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"changeMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"changeTeamWallet","outputs":[],"stateMutability":"nonpayable","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":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"eanbleLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFrommaxTx","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":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallets","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","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":"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":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarkets","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":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","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"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateTeamWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updatemaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a0604052600c805462ffffff19166001908117909155600e805460ff191690911790553480156200002f575f80fd5b50604051806040016040528060098152602001684f726163756c20416960b81b8152506040518060400160405280600681526020016513d49050d55360d21b8152508160039081620000829190620006ef565b506004620000918282620006ef565b505050620000ae620000a8620003a360201b60201c565b620003a7565b737a250d5630b4cf539739df2c5dacb4c659f2488d620000d0816001620003f8565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000119573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200013f9190620007bb565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200018b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001b19190620007bb565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015620001fc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002229190620007bb565b600680546001600160a01b0319166001600160a01b039290921691821790556200024e906001620003f8565b60065462000267906001600160a01b0316600162000470565b6a0c685fa11e01ec6f0000006009819055600b55601e5f6032816b033b2e3c9fd0803ce80000006127106200029e826005620007fe565b620002aa91906200081e565b600a5560108590556011849055620002c384866200083e565b600f5560138390556014829055620002dc82846200083e565b60125560078054738945af89d09ed916a68ec05d02b9ea4f7fc68e0b6001600160a01b03199182168117909255600880549091169091179055620003346200032c6005546001600160a01b031690565b6001620004c3565b62000341306001620004c3565b6200035061dead6001620004c3565b6200036f620003676005546001600160a01b031690565b6001620003f8565b6200037c306001620003f8565b6200038b61dead6001620003f8565b6200039733826200056b565b50505050505062000854565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6005546001600160a01b03163314620004465760405162461bcd60e51b815260206004820181905260248201525f8051602062002ff483398151915260448201526064015b60405180910390fd5b6001600160a01b03919091165f908152601960205260409020805460ff1916911515919091179055565b6001600160a01b0382165f818152601a6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b031633146200050d5760405162461bcd60e51b815260206004820181905260248201525f8051602062002ff483398151915260448201526064016200043d565b6001600160a01b0382165f81815260186020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620005c35760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200043d565b8060025f828254620005d691906200083e565b90915550506001600160a01b0382165f9081526020819052604081208054839290620006049084906200083e565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200067b57607f821691505b6020821081036200069a57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200064d57805f5260205f20601f840160051c81016020851015620006c75750805b601f840160051c820191505b81811015620006e8575f8155600101620006d3565b5050505050565b81516001600160401b038111156200070b576200070b62000652565b62000723816200071c845462000666565b84620006a0565b602080601f83116001811462000759575f8415620007415750858301515b5f19600386901b1c1916600185901b178555620007b3565b5f85815260208120601f198616915b82811015620007895788860151825594840194600190910190840162000768565b5085821015620007a757878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f60208284031215620007cc575f80fd5b81516001600160a01b0381168114620007e3575f80fd5b9392505050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417620008185762000818620007ea565b92915050565b5f826200083957634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115620008185762000818620007ea565b60805161276b620008895f395f81816104080152818161186f01528181611f6901528181612020015261205c015261276b5ff3fe60806040526004361061035e575f3560e01c80638a8c523c116101bd578063b62496f5116100f2578063d85ba06311610092578063e6819ba71161006d578063e6819ba71461095e578063e884f2601461098c578063f22857a8146109a0578063f2fde38b146109b4575f80fd5b8063d85ba063146108f0578063dd62ed3e14610905578063e2f4560514610949575f80fd5b8063bbc0c742116100cd578063bbc0c7421461087b578063c024666814610899578063c876d0b9146108b8578063d257b34f146108d1575f80fd5b8063b62496f51461082e578063b70143c91461085c578063bb85c6d1146107f0575f80fd5b80639fccce321161015d578063a9059cbb11610138578063a9059cbb146107d1578063aacebbe3146107f0578063b06e1e02146106bc578063b5cc50b71461080f575f80fd5b80639fccce3214610788578063a0d82dc51461079d578063a457c2d7146107b2575f80fd5b8063924de9b711610198578063924de9b71461072157806395d89b41146107405780639a7a23d6146107545780639c3b4fdc14610773575f80fd5b80638a8c523c146106db5780638da5cb5b146106ef578063921369131461070c575f80fd5b80634a62bb65116102935780636ddd1713116102335780637437681e1161020e5780637437681e1461067e578063751039fc146106935780637bce5a04146106a75780637cb332bb146106bc575f80fd5b80636ddd17131461061757806370a0823114610636578063715018a61461066a575f80fd5b8063644130d81161026e578063644130d8146105a557806366ca9b83146105c4578063677a8870146105e35780636a486a8e14610602575f80fd5b80634a62bb65146105405780634fbee1931461055957806361528e2714610590575f80fd5b806323b872dd116102fe57806330a136ad116102d957806330a136ad146104d2578063313ce567146104e7578063395093511461050257806349bd5a5e14610521575f80fd5b806323b872dd1461047f5780632598cdb21461049e57806327c8f835146104bd575f80fd5b8063104e444911610339578063104e4449146103e35780631694505e146103f757806318160ddd14610442578063203e727e14610460575f80fd5b806302dbd8f81461036957806306fdde031461038a578063095ea7b3146103b4575f80fd5b3661036557005b5f80fd5b348015610374575f80fd5b50610388610383366004612384565b6109d3565b005b348015610395575f80fd5b5061039e610a21565b6040516103ab91906123a4565b60405180910390f35b3480156103bf575f80fd5b506103d36103ce366004612404565b610ab1565b60405190151581526020016103ab565b3480156103ee575f80fd5b506103d3610ac7565b348015610402575f80fd5b5061042a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103ab565b34801561044d575f80fd5b506002545b6040519081526020016103ab565b34801561046b575f80fd5b5061038861047a36600461242e565b610b07565b34801561048a575f80fd5b506103d3610499366004612445565b610bcc565b3480156104a9575f80fd5b5060075461042a906001600160a01b031681565b3480156104c8575f80fd5b5061042a61dead81565b3480156104dd575f80fd5b50610452600b5481565b3480156104f2575f80fd5b50604051601281526020016103ab565b34801561050d575f80fd5b506103d361051c366004612404565b610c74565b34801561052c575f80fd5b5060065461042a906001600160a01b031681565b34801561054b575f80fd5b50600c546103d39060ff1681565b348015610564575f80fd5b506103d3610573366004612483565b6001600160a01b03165f9081526018602052604090205460ff1690565b34801561059b575f80fd5b5061045260155481565b3480156105b0575f80fd5b506103886105bf3660046124ad565b610caf565b3480156105cf575f80fd5b506103886105de366004612384565b610d03565b3480156105ee575f80fd5b5060085461042a906001600160a01b031681565b34801561060d575f80fd5b5061045260125481565b348015610622575f80fd5b50600c546103d39062010000900460ff1681565b348015610641575f80fd5b50610452610650366004612483565b6001600160a01b03165f9081526020819052604090205490565b348015610675575f80fd5b50610388610d48565b348015610689575f80fd5b5061045260095481565b34801561069e575f80fd5b506103d3610d7d565b3480156106b2575f80fd5b5061045260105481565b3480156106c7575f80fd5b506103886106d6366004612483565b610db9565b3480156106e6575f80fd5b50610388610e3f565b3480156106fa575f80fd5b506005546001600160a01b031661042a565b348015610717575f80fd5b5061045260135481565b34801561072c575f80fd5b5061038861073b3660046124e0565b610e7c565b34801561074b575f80fd5b5061039e610ec2565b34801561075f575f80fd5b5061038861076e3660046124ad565b610ed1565b34801561077e575f80fd5b5061045260115481565b348015610793575f80fd5b5061045260165481565b3480156107a8575f80fd5b5061045260145481565b3480156107bd575f80fd5b506103d36107cc366004612404565b610f8d565b3480156107dc575f80fd5b506103d36107eb366004612404565b611025565b3480156107fb575f80fd5b5061038861080a366004612483565b611031565b34801561081a575f80fd5b5061038861082936600461242e565b6110b7565b348015610839575f80fd5b506103d3610848366004612483565b601a6020525f908152604090205460ff1681565b348015610867575f80fd5b5061038861087636600461242e565b61118a565b348015610886575f80fd5b50600c546103d390610100900460ff1681565b3480156108a4575f80fd5b506103886108b33660046124ad565b61120d565b3480156108c3575f80fd5b50600e546103d39060ff1681565b3480156108dc575f80fd5b506103d36108eb36600461242e565b611295565b3480156108fb575f80fd5b50610452600f5481565b348015610910575f80fd5b5061045261091f3660046124f9565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b348015610954575f80fd5b50610452600a5481565b348015610969575f80fd5b506103d3610978366004612483565b60196020525f908152604090205460ff1681565b348015610997575f80fd5b506103d36113eb565b3480156109ab575f80fd5b506103d3611427565b3480156109bf575f80fd5b506103886109ce366004612483565b611467565b6005546001600160a01b03163314610a065760405162461bcd60e51b81526004016109fd90612530565b60405180910390fd5b60138290556014819055610a1a8183612579565b6012555050565b606060038054610a309061258c565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5c9061258c565b8015610aa75780601f10610a7e57610100808354040283529160200191610aa7565b820191905f5260205f20905b815481529060010190602001808311610a8a57829003601f168201915b5050505050905090565b5f610abd3384846114ff565b5060015b92915050565b6005545f906001600160a01b03163314610af35760405162461bcd60e51b81526004016109fd90612530565b50600c805460ff1916600190811790915590565b6005546001600160a01b03163314610b315760405162461bcd60e51b81526004016109fd90612530565b670de0b6b3a76400006103e8610b4660025490565b610b519060016125c4565b610b5b91906125db565b610b6591906125db565b811015610bb45760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e312560448201526064016109fd565b610bc681670de0b6b3a76400006125c4565b60095550565b5f610bd8848484611622565b6001600160a01b0384165f90815260016020908152604080832033845290915290205482811015610c5c5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016109fd565b610c6985338584036114ff565b506001949350505050565b335f8181526001602090815260408083206001600160a01b03871684529091528120549091610abd918590610caa908690612579565b6114ff565b6005546001600160a01b03163314610cd95760405162461bcd60e51b81526004016109fd90612530565b6001600160a01b03919091165f908152601960205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610d2d5760405162461bcd60e51b81526004016109fd90612530565b60108290556011819055610d418183612579565b600f555050565b6005546001600160a01b03163314610d725760405162461bcd60e51b81526004016109fd90612530565b610d7b5f611e70565b565b6005545f906001600160a01b03163314610da95760405162461bcd60e51b81526004016109fd90612530565b50600c805460ff19169055600190565b6005546001600160a01b03163314610de35760405162461bcd60e51b81526004016109fd90612530565b6008546040516001600160a01b03918216918316907fd9a2a08302ed3220f4e646ff99d6780d87e27baddf1af05679dc930ce8113095905f90a3600880546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610e695760405162461bcd60e51b81526004016109fd90612530565b600c805462ffff00191662010100179055565b6005546001600160a01b03163314610ea65760405162461bcd60e51b81526004016109fd90612530565b600c8054911515620100000262ff000019909216919091179055565b606060048054610a309061258c565b6005546001600160a01b03163314610efb5760405162461bcd60e51b81526004016109fd90612530565b6006546001600160a01b0390811690831603610f7f5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b657250616972730000000000000060648201526084016109fd565b610f898282611ec1565b5050565b335f9081526001602090815260408083206001600160a01b03861684529091528120548281101561100e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016109fd565b61101b33858584036114ff565b5060019392505050565b5f610abd338484611622565b6005546001600160a01b0316331461105b5760405162461bcd60e51b81526004016109fd90612530565b6007546040516001600160a01b03918216918316907f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc67905f90a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146110e15760405162461bcd60e51b81526004016109fd90612530565b670de0b6b3a76400006103e86110f660025490565b6111019060056125c4565b61110b91906125db565b61111591906125db565b8110156111725760405162461bcd60e51b815260206004820152602560248201527f43616e6e6f7420736574206d617857616c6c657473206c6f776572207468616e60448201526420302e352560d81b60648201526084016109fd565b61118481670de0b6b3a76400006125c4565b600b5550565b6007546001600160a01b0316336001600160a01b0316146111a9575f80fd5b305f9081526020819052604090205481111580156111c657505f81115b6112015760405162461bcd60e51b815260206004820152600c60248201526b15dc9bdb99c8185b5bdd5b9d60a21b60448201526064016109fd565b61120a81611f14565b50565b6005546001600160a01b031633146112375760405162461bcd60e51b81526004016109fd90612530565b6001600160a01b0382165f81815260186020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005545f906001600160a01b031633146112c15760405162461bcd60e51b81526004016109fd90612530565b620186a06112ce60025490565b6112d99060016125c4565b6112e391906125db565b8210156113505760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b60648201526084016109fd565b6103e861135c60025490565b6113679060056125c4565b61137191906125db565b8211156113dd5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b60648201526084016109fd565b50600a81905560015b919050565b6005545f906001600160a01b031633146114175760405162461bcd60e51b81526004016109fd90612530565b50600e805460ff19169055600190565b6005545f906001600160a01b031633146114535760405162461bcd60e51b81526004016109fd90612530565b50600e805460ff1916600190811790915590565b6005546001600160a01b031633146114915760405162461bcd60e51b81526004016109fd90612530565b6001600160a01b0381166114f65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109fd565b61120a81611e70565b6001600160a01b0383166115615760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109fd565b6001600160a01b0382166115c25760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109fd565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166116485760405162461bcd60e51b81526004016109fd906125fa565b6001600160a01b03821661166e5760405162461bcd60e51b81526004016109fd9061263f565b6001600160a01b0383165f9081526017602052604090205460ff16156116ca5760405162461bcd60e51b815260206004820152601160248201527016d99c9bdb5748189b1858dac81b1a5cdd607a1b60448201526064016109fd565b6001600160a01b0382165f9081526017602052604090205460ff16156117245760405162461bcd60e51b815260206004820152600f60248201526e16dd1bd748189b1858dac81b1a5cdd608a1b60448201526064016109fd565b805f0361173b5761173683835f6120ca565b505050565b600c5460ff1615611bab576005546001600160a01b0384811691161480159061177257506005546001600160a01b03838116911614155b801561178657506001600160a01b03821615155b801561179d57506001600160a01b03821661dead14155b80156117b35750600654600160a01b900460ff16155b15611bab57600c54610100900460ff16611849576001600160a01b0383165f9081526018602052604090205460ff168061180457506001600160a01b0382165f9081526018602052604090205460ff165b6118495760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b60448201526064016109fd565b600e5460ff161561196a576005546001600160a01b038381169116148015906118a457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b80156118be57506006546001600160a01b03838116911614155b1561196a57325f908152600d602052604090205443116119585760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a4016109fd565b325f908152600d602052604090204390555b6001600160a01b0383165f908152601a602052604090205460ff1680156119a957506001600160a01b0382165f9081526019602052604090205460ff16155b15611a7d57600954811115611a0f5760405162461bcd60e51b815260206004820152602660248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526536b0bc2a3c1760d11b60648201526084016109fd565b600b546001600160a01b0383165f90815260208190526040902054611a349083612579565b1115611a785760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016109fd565b611bab565b6001600160a01b0382165f908152601a602052604090205460ff168015611abc57506001600160a01b0383165f9081526019602052604090205460ff16155b15611b2357600954811115611a785760405162461bcd60e51b815260206004820152602760248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152661036b0bc2a3c1760c91b60648201526084016109fd565b6001600160a01b0382165f9081526019602052604090205460ff16611bab57600b546001600160a01b0383165f90815260208190526040902054611b679083612579565b1115611bab5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016109fd565b305f90815260208190526040902054600a5481108015908190611bd65750600c5462010000900460ff165b8015611bec5750600654600160a01b900460ff16155b8015611c1057506001600160a01b0385165f908152601a602052604090205460ff16155b8015611c3457506001600160a01b0385165f9081526018602052604090205460ff16155b8015611c5857506001600160a01b0384165f9081526018602052604090205460ff16155b15611c86576006805460ff60a01b1916600160a01b179055611c7861221d565b6006805460ff60a01b191690555b6006546001600160a01b0386165f9081526018602052604090205460ff600160a01b909204821615911680611cd257506001600160a01b0385165f9081526018602052604090205460ff165b15611cda57505f5b5f8115611e5c576001600160a01b0386165f908152601a602052604090205460ff168015611d0957505f601254115b15611d9557611d2e6064611d286012548861235c90919063ffffffff16565b9061236e565b905060125460145482611d4191906125c4565b611d4b91906125db565b60165f828254611d5b9190612579565b9091555050601254601354611d7090836125c4565b611d7a91906125db565b60155f828254611d8a9190612579565b90915550611e3e9050565b6001600160a01b0387165f908152601a602052604090205460ff168015611dbd57505f600f54115b15611e3e57611ddc6064611d28600f548861235c90919063ffffffff16565b9050600f5460115482611def91906125c4565b611df991906125db565b60165f828254611e099190612579565b9091555050600f54601054611e1e90836125c4565b611e2891906125db565b60155f828254611e389190612579565b90915550505b8015611e4f57611e4f8730836120ca565b611e598186612682565b94505b611e678787876120ca565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0382165f818152601a6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110611f4757611f47612695565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fc3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fe791906126a9565b81600181518110611ffa57611ffa612695565b60200260200101906001600160a01b031690816001600160a01b031681525050612045307f0000000000000000000000000000000000000000000000000000000000000000846114ff565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906120999085905f908690309042906004016126c4565b5f604051808303815f87803b1580156120b0575f80fd5b505af11580156120c2573d5f803e3d5ffd5b505050505050565b6001600160a01b0383166120f05760405162461bcd60e51b81526004016109fd906125fa565b6001600160a01b0382166121165760405162461bcd60e51b81526004016109fd9061263f565b6001600160a01b0383165f908152602081905260409020548181101561218d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016109fd565b6001600160a01b038085165f908152602081905260408082208585039055918516815290812080548492906121c3908490612579565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161220f91815260200190565b60405180910390a350505050565b305f9081526020819052604081205490505f60165460155461223f9190612579565b90505f825f0361224e57505050565b600a5461225c9060146125c4565b83111561227457600a546122719060146125c4565b92505b4761227e84611f14565b5f6122894783612379565b90505f6122a585611d286016548561235c90919063ffffffff16565b5f601581905560168190556008546040519293506001600160a01b031691839181818185875af1925050503d805f81146122fa576040519150601f19603f3d011682016040523d82523d5f602084013e6122ff565b606091505b50506007546040519195506001600160a01b03169047905f81818185875af1925050503d805f811461234c576040519150601f19603f3d011682016040523d82523d5f602084013e612351565b606091505b505050505050505050565b5f61236782846125c4565b9392505050565b5f61236782846125db565b5f6123678284612682565b5f8060408385031215612395575f80fd5b50508035926020909101359150565b5f602080835283518060208501525f5b818110156123d0578581018301518582016040015282016123b4565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461120a575f80fd5b5f8060408385031215612415575f80fd5b8235612420816123f0565b946020939093013593505050565b5f6020828403121561243e575f80fd5b5035919050565b5f805f60608486031215612457575f80fd5b8335612462816123f0565b92506020840135612472816123f0565b929592945050506040919091013590565b5f60208284031215612493575f80fd5b8135612367816123f0565b803580151581146113e6575f80fd5b5f80604083850312156124be575f80fd5b82356124c9816123f0565b91506124d76020840161249e565b90509250929050565b5f602082840312156124f0575f80fd5b6123678261249e565b5f806040838503121561250a575f80fd5b8235612515816123f0565b91506020830135612525816123f0565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610ac157610ac1612565565b600181811c908216806125a057607f821691505b6020821081036125be57634e487b7160e01b5f52602260045260245ffd5b50919050565b8082028115828204841417610ac157610ac1612565565b5f826125f557634e487b7160e01b5f52601260045260245ffd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610ac157610ac1612565565b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156126b9575f80fd5b8151612367816123f0565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156127145784516001600160a01b0316835293830193918301916001016126ef565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220dc60b23b7ae6ce0c8d953604f88777eed28aabef155b9e8d652b47bc0a84eab664736f6c634300081800334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x60806040526004361061035e575f3560e01c80638a8c523c116101bd578063b62496f5116100f2578063d85ba06311610092578063e6819ba71161006d578063e6819ba71461095e578063e884f2601461098c578063f22857a8146109a0578063f2fde38b146109b4575f80fd5b8063d85ba063146108f0578063dd62ed3e14610905578063e2f4560514610949575f80fd5b8063bbc0c742116100cd578063bbc0c7421461087b578063c024666814610899578063c876d0b9146108b8578063d257b34f146108d1575f80fd5b8063b62496f51461082e578063b70143c91461085c578063bb85c6d1146107f0575f80fd5b80639fccce321161015d578063a9059cbb11610138578063a9059cbb146107d1578063aacebbe3146107f0578063b06e1e02146106bc578063b5cc50b71461080f575f80fd5b80639fccce3214610788578063a0d82dc51461079d578063a457c2d7146107b2575f80fd5b8063924de9b711610198578063924de9b71461072157806395d89b41146107405780639a7a23d6146107545780639c3b4fdc14610773575f80fd5b80638a8c523c146106db5780638da5cb5b146106ef578063921369131461070c575f80fd5b80634a62bb65116102935780636ddd1713116102335780637437681e1161020e5780637437681e1461067e578063751039fc146106935780637bce5a04146106a75780637cb332bb146106bc575f80fd5b80636ddd17131461061757806370a0823114610636578063715018a61461066a575f80fd5b8063644130d81161026e578063644130d8146105a557806366ca9b83146105c4578063677a8870146105e35780636a486a8e14610602575f80fd5b80634a62bb65146105405780634fbee1931461055957806361528e2714610590575f80fd5b806323b872dd116102fe57806330a136ad116102d957806330a136ad146104d2578063313ce567146104e7578063395093511461050257806349bd5a5e14610521575f80fd5b806323b872dd1461047f5780632598cdb21461049e57806327c8f835146104bd575f80fd5b8063104e444911610339578063104e4449146103e35780631694505e146103f757806318160ddd14610442578063203e727e14610460575f80fd5b806302dbd8f81461036957806306fdde031461038a578063095ea7b3146103b4575f80fd5b3661036557005b5f80fd5b348015610374575f80fd5b50610388610383366004612384565b6109d3565b005b348015610395575f80fd5b5061039e610a21565b6040516103ab91906123a4565b60405180910390f35b3480156103bf575f80fd5b506103d36103ce366004612404565b610ab1565b60405190151581526020016103ab565b3480156103ee575f80fd5b506103d3610ac7565b348015610402575f80fd5b5061042a7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016103ab565b34801561044d575f80fd5b506002545b6040519081526020016103ab565b34801561046b575f80fd5b5061038861047a36600461242e565b610b07565b34801561048a575f80fd5b506103d3610499366004612445565b610bcc565b3480156104a9575f80fd5b5060075461042a906001600160a01b031681565b3480156104c8575f80fd5b5061042a61dead81565b3480156104dd575f80fd5b50610452600b5481565b3480156104f2575f80fd5b50604051601281526020016103ab565b34801561050d575f80fd5b506103d361051c366004612404565b610c74565b34801561052c575f80fd5b5060065461042a906001600160a01b031681565b34801561054b575f80fd5b50600c546103d39060ff1681565b348015610564575f80fd5b506103d3610573366004612483565b6001600160a01b03165f9081526018602052604090205460ff1690565b34801561059b575f80fd5b5061045260155481565b3480156105b0575f80fd5b506103886105bf3660046124ad565b610caf565b3480156105cf575f80fd5b506103886105de366004612384565b610d03565b3480156105ee575f80fd5b5060085461042a906001600160a01b031681565b34801561060d575f80fd5b5061045260125481565b348015610622575f80fd5b50600c546103d39062010000900460ff1681565b348015610641575f80fd5b50610452610650366004612483565b6001600160a01b03165f9081526020819052604090205490565b348015610675575f80fd5b50610388610d48565b348015610689575f80fd5b5061045260095481565b34801561069e575f80fd5b506103d3610d7d565b3480156106b2575f80fd5b5061045260105481565b3480156106c7575f80fd5b506103886106d6366004612483565b610db9565b3480156106e6575f80fd5b50610388610e3f565b3480156106fa575f80fd5b506005546001600160a01b031661042a565b348015610717575f80fd5b5061045260135481565b34801561072c575f80fd5b5061038861073b3660046124e0565b610e7c565b34801561074b575f80fd5b5061039e610ec2565b34801561075f575f80fd5b5061038861076e3660046124ad565b610ed1565b34801561077e575f80fd5b5061045260115481565b348015610793575f80fd5b5061045260165481565b3480156107a8575f80fd5b5061045260145481565b3480156107bd575f80fd5b506103d36107cc366004612404565b610f8d565b3480156107dc575f80fd5b506103d36107eb366004612404565b611025565b3480156107fb575f80fd5b5061038861080a366004612483565b611031565b34801561081a575f80fd5b5061038861082936600461242e565b6110b7565b348015610839575f80fd5b506103d3610848366004612483565b601a6020525f908152604090205460ff1681565b348015610867575f80fd5b5061038861087636600461242e565b61118a565b348015610886575f80fd5b50600c546103d390610100900460ff1681565b3480156108a4575f80fd5b506103886108b33660046124ad565b61120d565b3480156108c3575f80fd5b50600e546103d39060ff1681565b3480156108dc575f80fd5b506103d36108eb36600461242e565b611295565b3480156108fb575f80fd5b50610452600f5481565b348015610910575f80fd5b5061045261091f3660046124f9565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b348015610954575f80fd5b50610452600a5481565b348015610969575f80fd5b506103d3610978366004612483565b60196020525f908152604090205460ff1681565b348015610997575f80fd5b506103d36113eb565b3480156109ab575f80fd5b506103d3611427565b3480156109bf575f80fd5b506103886109ce366004612483565b611467565b6005546001600160a01b03163314610a065760405162461bcd60e51b81526004016109fd90612530565b60405180910390fd5b60138290556014819055610a1a8183612579565b6012555050565b606060038054610a309061258c565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5c9061258c565b8015610aa75780601f10610a7e57610100808354040283529160200191610aa7565b820191905f5260205f20905b815481529060010190602001808311610a8a57829003601f168201915b5050505050905090565b5f610abd3384846114ff565b5060015b92915050565b6005545f906001600160a01b03163314610af35760405162461bcd60e51b81526004016109fd90612530565b50600c805460ff1916600190811790915590565b6005546001600160a01b03163314610b315760405162461bcd60e51b81526004016109fd90612530565b670de0b6b3a76400006103e8610b4660025490565b610b519060016125c4565b610b5b91906125db565b610b6591906125db565b811015610bb45760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e312560448201526064016109fd565b610bc681670de0b6b3a76400006125c4565b60095550565b5f610bd8848484611622565b6001600160a01b0384165f90815260016020908152604080832033845290915290205482811015610c5c5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016109fd565b610c6985338584036114ff565b506001949350505050565b335f8181526001602090815260408083206001600160a01b03871684529091528120549091610abd918590610caa908690612579565b6114ff565b6005546001600160a01b03163314610cd95760405162461bcd60e51b81526004016109fd90612530565b6001600160a01b03919091165f908152601960205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610d2d5760405162461bcd60e51b81526004016109fd90612530565b60108290556011819055610d418183612579565b600f555050565b6005546001600160a01b03163314610d725760405162461bcd60e51b81526004016109fd90612530565b610d7b5f611e70565b565b6005545f906001600160a01b03163314610da95760405162461bcd60e51b81526004016109fd90612530565b50600c805460ff19169055600190565b6005546001600160a01b03163314610de35760405162461bcd60e51b81526004016109fd90612530565b6008546040516001600160a01b03918216918316907fd9a2a08302ed3220f4e646ff99d6780d87e27baddf1af05679dc930ce8113095905f90a3600880546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610e695760405162461bcd60e51b81526004016109fd90612530565b600c805462ffff00191662010100179055565b6005546001600160a01b03163314610ea65760405162461bcd60e51b81526004016109fd90612530565b600c8054911515620100000262ff000019909216919091179055565b606060048054610a309061258c565b6005546001600160a01b03163314610efb5760405162461bcd60e51b81526004016109fd90612530565b6006546001600160a01b0390811690831603610f7f5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b657250616972730000000000000060648201526084016109fd565b610f898282611ec1565b5050565b335f9081526001602090815260408083206001600160a01b03861684529091528120548281101561100e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016109fd565b61101b33858584036114ff565b5060019392505050565b5f610abd338484611622565b6005546001600160a01b0316331461105b5760405162461bcd60e51b81526004016109fd90612530565b6007546040516001600160a01b03918216918316907f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc67905f90a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146110e15760405162461bcd60e51b81526004016109fd90612530565b670de0b6b3a76400006103e86110f660025490565b6111019060056125c4565b61110b91906125db565b61111591906125db565b8110156111725760405162461bcd60e51b815260206004820152602560248201527f43616e6e6f7420736574206d617857616c6c657473206c6f776572207468616e60448201526420302e352560d81b60648201526084016109fd565b61118481670de0b6b3a76400006125c4565b600b5550565b6007546001600160a01b0316336001600160a01b0316146111a9575f80fd5b305f9081526020819052604090205481111580156111c657505f81115b6112015760405162461bcd60e51b815260206004820152600c60248201526b15dc9bdb99c8185b5bdd5b9d60a21b60448201526064016109fd565b61120a81611f14565b50565b6005546001600160a01b031633146112375760405162461bcd60e51b81526004016109fd90612530565b6001600160a01b0382165f81815260186020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005545f906001600160a01b031633146112c15760405162461bcd60e51b81526004016109fd90612530565b620186a06112ce60025490565b6112d99060016125c4565b6112e391906125db565b8210156113505760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b60648201526084016109fd565b6103e861135c60025490565b6113679060056125c4565b61137191906125db565b8211156113dd5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b60648201526084016109fd565b50600a81905560015b919050565b6005545f906001600160a01b031633146114175760405162461bcd60e51b81526004016109fd90612530565b50600e805460ff19169055600190565b6005545f906001600160a01b031633146114535760405162461bcd60e51b81526004016109fd90612530565b50600e805460ff1916600190811790915590565b6005546001600160a01b031633146114915760405162461bcd60e51b81526004016109fd90612530565b6001600160a01b0381166114f65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109fd565b61120a81611e70565b6001600160a01b0383166115615760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109fd565b6001600160a01b0382166115c25760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109fd565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166116485760405162461bcd60e51b81526004016109fd906125fa565b6001600160a01b03821661166e5760405162461bcd60e51b81526004016109fd9061263f565b6001600160a01b0383165f9081526017602052604090205460ff16156116ca5760405162461bcd60e51b815260206004820152601160248201527016d99c9bdb5748189b1858dac81b1a5cdd607a1b60448201526064016109fd565b6001600160a01b0382165f9081526017602052604090205460ff16156117245760405162461bcd60e51b815260206004820152600f60248201526e16dd1bd748189b1858dac81b1a5cdd608a1b60448201526064016109fd565b805f0361173b5761173683835f6120ca565b505050565b600c5460ff1615611bab576005546001600160a01b0384811691161480159061177257506005546001600160a01b03838116911614155b801561178657506001600160a01b03821615155b801561179d57506001600160a01b03821661dead14155b80156117b35750600654600160a01b900460ff16155b15611bab57600c54610100900460ff16611849576001600160a01b0383165f9081526018602052604090205460ff168061180457506001600160a01b0382165f9081526018602052604090205460ff165b6118495760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b60448201526064016109fd565b600e5460ff161561196a576005546001600160a01b038381169116148015906118a457507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b80156118be57506006546001600160a01b03838116911614155b1561196a57325f908152600d602052604090205443116119585760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a4016109fd565b325f908152600d602052604090204390555b6001600160a01b0383165f908152601a602052604090205460ff1680156119a957506001600160a01b0382165f9081526019602052604090205460ff16155b15611a7d57600954811115611a0f5760405162461bcd60e51b815260206004820152602660248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526536b0bc2a3c1760d11b60648201526084016109fd565b600b546001600160a01b0383165f90815260208190526040902054611a349083612579565b1115611a785760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016109fd565b611bab565b6001600160a01b0382165f908152601a602052604090205460ff168015611abc57506001600160a01b0383165f9081526019602052604090205460ff16155b15611b2357600954811115611a785760405162461bcd60e51b815260206004820152602760248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152661036b0bc2a3c1760c91b60648201526084016109fd565b6001600160a01b0382165f9081526019602052604090205460ff16611bab57600b546001600160a01b0383165f90815260208190526040902054611b679083612579565b1115611bab5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016109fd565b305f90815260208190526040902054600a5481108015908190611bd65750600c5462010000900460ff165b8015611bec5750600654600160a01b900460ff16155b8015611c1057506001600160a01b0385165f908152601a602052604090205460ff16155b8015611c3457506001600160a01b0385165f9081526018602052604090205460ff16155b8015611c5857506001600160a01b0384165f9081526018602052604090205460ff16155b15611c86576006805460ff60a01b1916600160a01b179055611c7861221d565b6006805460ff60a01b191690555b6006546001600160a01b0386165f9081526018602052604090205460ff600160a01b909204821615911680611cd257506001600160a01b0385165f9081526018602052604090205460ff165b15611cda57505f5b5f8115611e5c576001600160a01b0386165f908152601a602052604090205460ff168015611d0957505f601254115b15611d9557611d2e6064611d286012548861235c90919063ffffffff16565b9061236e565b905060125460145482611d4191906125c4565b611d4b91906125db565b60165f828254611d5b9190612579565b9091555050601254601354611d7090836125c4565b611d7a91906125db565b60155f828254611d8a9190612579565b90915550611e3e9050565b6001600160a01b0387165f908152601a602052604090205460ff168015611dbd57505f600f54115b15611e3e57611ddc6064611d28600f548861235c90919063ffffffff16565b9050600f5460115482611def91906125c4565b611df991906125db565b60165f828254611e099190612579565b9091555050600f54601054611e1e90836125c4565b611e2891906125db565b60155f828254611e389190612579565b90915550505b8015611e4f57611e4f8730836120ca565b611e598186612682565b94505b611e678787876120ca565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0382165f818152601a6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110611f4757611f47612695565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fc3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fe791906126a9565b81600181518110611ffa57611ffa612695565b60200260200101906001600160a01b031690816001600160a01b031681525050612045307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846114ff565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906120999085905f908690309042906004016126c4565b5f604051808303815f87803b1580156120b0575f80fd5b505af11580156120c2573d5f803e3d5ffd5b505050505050565b6001600160a01b0383166120f05760405162461bcd60e51b81526004016109fd906125fa565b6001600160a01b0382166121165760405162461bcd60e51b81526004016109fd9061263f565b6001600160a01b0383165f908152602081905260409020548181101561218d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016109fd565b6001600160a01b038085165f908152602081905260408082208585039055918516815290812080548492906121c3908490612579565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161220f91815260200190565b60405180910390a350505050565b305f9081526020819052604081205490505f60165460155461223f9190612579565b90505f825f0361224e57505050565b600a5461225c9060146125c4565b83111561227457600a546122719060146125c4565b92505b4761227e84611f14565b5f6122894783612379565b90505f6122a585611d286016548561235c90919063ffffffff16565b5f601581905560168190556008546040519293506001600160a01b031691839181818185875af1925050503d805f81146122fa576040519150601f19603f3d011682016040523d82523d5f602084013e6122ff565b606091505b50506007546040519195506001600160a01b03169047905f81818185875af1925050503d805f811461234c576040519150601f19603f3d011682016040523d82523d5f602084013e612351565b606091505b505050505050505050565b5f61236782846125c4565b9392505050565b5f61236782846125db565b5f6123678284612682565b5f8060408385031215612395575f80fd5b50508035926020909101359150565b5f602080835283518060208501525f5b818110156123d0578581018301518582016040015282016123b4565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461120a575f80fd5b5f8060408385031215612415575f80fd5b8235612420816123f0565b946020939093013593505050565b5f6020828403121561243e575f80fd5b5035919050565b5f805f60608486031215612457575f80fd5b8335612462816123f0565b92506020840135612472816123f0565b929592945050506040919091013590565b5f60208284031215612493575f80fd5b8135612367816123f0565b803580151581146113e6575f80fd5b5f80604083850312156124be575f80fd5b82356124c9816123f0565b91506124d76020840161249e565b90509250929050565b5f602082840312156124f0575f80fd5b6123678261249e565b5f806040838503121561250a575f80fd5b8235612515816123f0565b91506020830135612525816123f0565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610ac157610ac1612565565b600181811c908216806125a057607f821691505b6020821081036125be57634e487b7160e01b5f52602260045260245ffd5b50919050565b8082028115828204841417610ac157610ac1612565565b5f826125f557634e487b7160e01b5f52601260045260245ffd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610ac157610ac1612565565b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156126b9575f80fd5b8151612367816123f0565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156127145784516001600160a01b0316835293830193918301916001016126ef565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220dc60b23b7ae6ce0c8d953604f88777eed28aabef155b9e8d652b47bc0a84eab664736f6c63430008180033

Deployed Bytecode Sourcemap

15049:13593:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21073:246;;;;;;;;;;-1:-1:-1;21073:246:0;;;;;:::i;:::-;;:::i;:::-;;2746:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3660:169;;;;;;;;;;-1:-1:-1;3660:169:0;;;;;:::i;:::-;;:::i;:::-;;;1441:14:1;;1434:22;1416:41;;1404:2;1389:18;3660:169:0;1276:187:1;18923:120:0;;;;;;;;;;;;;:::i;15125:51::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1659:32:1;;;1641:51;;1629:2;1614:18;15125:51:0;1468:230:1;3067:108:0;;;;;;;;;;-1:-1:-1;3155:12:0;;3067:108;;;1849:25:1;;;1837:2;1822:18;3067:108:0;1703:177:1;19959:245:0;;;;;;;;;;-1:-1:-1;19959:245:0;;;;;:::i;:::-;;:::i;3837:492::-;;;;;;;;;;-1:-1:-1;3837:492:0;;;;;:::i;:::-;;:::i;15310:30::-;;;;;;;;;;-1:-1:-1;15310:30:0;;;;-1:-1:-1;;;;;15310:30:0;;;15218:53;;;;;;;;;;;;15264:6;15218:53;;15448:25;;;;;;;;;;;;;;;;2966:93;;;;;;;;;;-1:-1:-1;2966:93:0;;3049:2;2881:36:1;;2869:2;2854:18;2966:93:0;2739:184:1;4337:215:0;;;;;;;;;;-1:-1:-1;4337:215:0;;;;;:::i;:::-;;:::i;15183:28::-;;;;;;;;;;-1:-1:-1;15183:28:0;;;;-1:-1:-1;;;;;15183:28:0;;;15482:33;;;;;;;;;;-1:-1:-1;15482:33:0;;;;;;;;22803:126;;;;;;;;;;-1:-1:-1;22803:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;22893:28:0;22869:4;22893:28;;;:19;:28;;;;;;;;;22803:126;15987:31;;;;;;;;;;;;;;;;20478:143;;;;;;;;;;-1:-1:-1;20478:143:0;;;;;:::i;:::-;;:::i;20825:240::-;;;;;;;;;;-1:-1:-1;20825:240:0;;;;;:::i;:::-;;:::i;15347:25::-;;;;;;;;;;-1:-1:-1;15347:25:0;;;;-1:-1:-1;;;;;15347:25:0;;;15880:28;;;;;;;;;;;;;;;;15562:31;;;;;;;;;;-1:-1:-1;15562:31:0;;;;;;;;;;;3183:127;;;;;;;;;;-1:-1:-1;3183:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;3284:18:0;3257:7;3284:18;;;;;;;;;;;;3183:127;868:103;;;;;;;;;;;;;:::i;15381:20::-;;;;;;;;;;;;;;;;18790:121;;;;;;;;;;;;;:::i;15810:30::-;;;;;;;;;;;;;;;;22461:161;;;;;;;;;;-1:-1:-1;22461:161:0;;;;;:::i;:::-;;:::i;18624:112::-;;;;;;;;;;;;;:::i;645:87::-;;;;;;;;;;-1:-1:-1;718:6:0;;-1:-1:-1;;;;;718:6:0;645:87;;15915:31;;;;;;;;;;;;;;;;20717:100;;;;;;;;;;-1:-1:-1;20717:100:0;;;;;:::i;:::-;;:::i;2854:104::-;;;;;;;;;;;;;:::i;21517:304::-;;;;;;;;;;-1:-1:-1;21517:304:0;;;;;:::i;:::-;;:::i;15847:24::-;;;;;;;;;;;;;;;;16025:27;;;;;;;;;;;;;;;;15953:25;;;;;;;;;;;;;;;;4560:413;;;;;;;;;;-1:-1:-1;4560:413:0;;;;;:::i;:::-;;:::i;3318:175::-;;;;;;;;;;-1:-1:-1;3318:175:0;;;;;:::i;:::-;;:::i;22025:208::-;;;;;;;;;;-1:-1:-1;22025:208:0;;;;;:::i;:::-;;:::i;20212:258::-;;;;;;;;;;-1:-1:-1;20212:258:0;;;;;:::i;:::-;;:::i;16229:57::-;;;;;;;;;;-1:-1:-1;16229:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;26930:223;;;;;;;;;;-1:-1:-1;26930:223:0;;;;;:::i;:::-;;:::i;15522:33::-;;;;;;;;;;-1:-1:-1;15522:33:0;;;;;;;;;;;21327:182;;;;;;;;;;-1:-1:-1;21327:182:0;;;;;:::i;:::-;;:::i;15728:39::-;;;;;;;;;;-1:-1:-1;15728:39:0;;;;;;;;19454:497;;;;;;;;;;-1:-1:-1;19454:497:0;;;;;:::i;:::-;;:::i;15776:27::-;;;;;;;;;;;;;;;;3501:151;;;;;;;;;;-1:-1:-1;3501:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;3617:18:0;;;3590:7;3617:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3501:151;15408:33;;;;;;;;;;;;;;;;16172:48;;;;;;;;;;-1:-1:-1;16172:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;19104:135;;;;;;;;;;;;;:::i;19251:133::-;;;;;;;;;;;;;:::i;979:201::-;;;;;;;;;;-1:-1:-1;979:201:0;;;;;:::i;:::-;;:::i;21073:246::-;718:6;;-1:-1:-1;;;;;718:6:0;271:10;780:23;772:68;;;;-1:-1:-1;;;772:68:0;;;;;;;:::i;:::-;;;;;;;;;21192:16:::1;:32:::0;;;21235:10:::1;:20:::0;;;21282:29:::1;21248:7:::0;21211:13;21282:29:::1;:::i;:::-;21266:13;:45:::0;-1:-1:-1;;21073:246:0:o;2746:100::-;2800:13;2833:5;2826:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2746:100;:::o;3660:169::-;3743:4;3760:39;271:10;3783:7;3792:6;3760:8;:39::i;:::-;-1:-1:-1;3817:4:0;3660:169;;;;;:::o;18923:120::-;718:6;;18975:4;;-1:-1:-1;;;;;718:6:0;271:10;780:23;772:68;;;;-1:-1:-1;;;772:68:0;;;;;;;:::i;:::-;-1:-1:-1;18992:14:0::1;:21:::0;;-1:-1:-1;;18992:21:0::1;19009:4;18992:21:::0;;::::1;::::0;;;18923:120;:::o;19959:245::-;718:6;;-1:-1:-1;;;;;718:6:0;271:10;780:23;772:68;;;;-1:-1:-1;;;772:68:0;;;;;;;:::i;:::-;20096:4:::1;20088;20067:13;3155:12:::0;;;3067:108;20067:13:::1;:17;::::0;20083:1:::1;20067:17;:::i;:::-;20066:26;;;;:::i;:::-;20065:35;;;;:::i;:::-;20055:6;:45;;20033:127;;;::::0;-1:-1:-1;;;20033:127:0;;5848:2:1;20033:127:0::1;::::0;::::1;5830:21:1::0;;;5867:18;;;5860:30;5926:34;5906:18;;;5899:62;5978:18;;20033:127:0::1;5646:356:1::0;20033:127:0::1;20179:17;:6:::0;20189::::1;20179:17;:::i;:::-;20171:5;:25:::0;-1:-1:-1;19959:245:0:o;3837:492::-;3977:4;3994:36;4004:6;4012:9;4023:6;3994:9;:36::i;:::-;-1:-1:-1;;;;;4070:19:0;;4043:24;4070:19;;;:11;:19;;;;;;;;271:10;4070:33;;;;;;;;4122:26;;;;4114:79;;;;-1:-1:-1;;;4114:79:0;;6209:2:1;4114:79:0;;;6191:21:1;6248:2;6228:18;;;6221:30;6287:34;6267:18;;;6260:62;-1:-1:-1;;;6338:18:1;;;6331:38;6386:19;;4114:79:0;6007:404:1;4114:79:0;4229:57;4238:6;271:10;4279:6;4260:16;:25;4229:8;:57::i;:::-;-1:-1:-1;4317:4:0;;3837:492;-1:-1:-1;;;;3837:492:0:o;4337:215::-;271:10;4425:4;4474:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4474:34:0;;;;;;;;;;4425:4;;4442:80;;4465:7;;4474:47;;4511:10;;4474:47;:::i;:::-;4442:8;:80::i;20478:143::-;718:6;;-1:-1:-1;;;;;718:6:0;271:10;780:23;772:68;;;;-1:-1:-1;;;772:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20582:24:0;;;::::1;;::::0;;;:16:::1;:24;::::0;;;;:31;;-1:-1:-1;;20582:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20478:143::o;20825:240::-;718:6;;-1:-1:-1;;;;;718:6:0;271:10;780:23;772:68;;;;-1:-1:-1;;;772:68:0;;;;;;;:::i;:::-;20943:15:::1;:31:::0;;;20985:9:::1;:19:::0;;;21030:27:::1;20997:7:::0;20961:13;21030:27:::1;:::i;:::-;21015:12;:42:::0;-1:-1:-1;;20825:240:0:o;868:103::-;718:6;;-1:-1:-1;;;;;718:6:0;271:10;780:23;772:68;;;;-1:-1:-1;;;772:68:0;;;;;;;:::i;:::-;933:30:::1;960:1;933:18;:30::i;:::-;868:103::o:0;18790:121::-;718:6;;18842:4;;-1:-1:-1;;;;;718:6:0;271:10;780:23;772:68;;;;-1:-1:-1;;;772:68:0;;;;;;;:::i;:::-;-1:-1:-1;18859:14:0::1;:22:::0;;-1:-1:-1;;18859:22:0::1;::::0;;;18790:121;:::o;22461:161::-;718:6;;-1:-1:-1;;;;;718:6:0;271:10;780:23;772:68;;;;-1:-1:-1;;;772:68:0;;;;;;;:::i;:::-;22570:10:::1;::::0;22541:40:::1;::::0;-1:-1:-1;;;;;22570:10:0;;::::1;::::0;22541:40;::::1;::::0;::::1;::::0;22570:10:::1;::::0;22541:40:::1;22592:10;:22:::0;;-1:-1:-1;;;;;;22592:22:0::1;-1:-1:-1::0;;;;;22592:22:0;;;::::1;::::0;;;::::1;::::0;;22461:161::o;18624:112::-;718:6;;-1:-1:-1;;;;;718:6:0;271:10;780:23;772:68;;;;-1:-1:-1;;;772:68:0;;;;;;;:::i;:::-;18679:13:::1;:20:::0;;-1:-1:-1;;18710:18:0;;;;;18624:112::o;20717:100::-;718:6;;-1:-1:-1;;;;;718:6:0;271:10;780:23;772:68;;;;-1:-1:-1;;;772:68:0;;;;;;;:::i;:::-;20788:11:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;20788:21:0;;::::1;::::0;;;::::1;::::0;;20717:100::o;2854:104::-;2910:13;2943:7;2936:14;;;;;:::i;21517:304::-;718:6;;-1:-1:-1;;;;;718:6:0;271:10;780:23;772:68;;;;-1:-1:-1;;;772:68:0;;;;;;;:::i;:::-;21661:13:::1;::::0;-1:-1:-1;;;;;21661:13:0;;::::1;21653:21:::0;;::::1;::::0;21631:128:::1;;;::::0;-1:-1:-1;;;21631:128:0;;6618:2:1;21631:128:0::1;::::0;::::1;6600:21:1::0;6657:2;6637:18;;;6630:30;6696:34;6676:18;;;6669:62;6767:27;6747:18;;;6740:55;6812:19;;21631:128:0::1;6416:421:1::0;21631:128:0::1;21772:41;21801:4;21807:5;21772:28;:41::i;:::-;21517:304:::0;;:::o;4560:413::-;271:10;4653:4;4697:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4697:34:0;;;;;;;;;;4750:35;;;;4742:85;;;;-1:-1:-1;;;4742:85:0;;7044:2:1;4742:85:0;;;7026:21:1;7083:2;7063:18;;;7056:30;7122:34;7102:18;;;7095:62;-1:-1:-1;;;7173:18:1;;;7166:35;7218:19;;4742:85:0;6842:401:1;4742:85:0;4863:67;271:10;4886:7;4914:15;4895:16;:34;4863:8;:67::i;:::-;-1:-1:-1;4961:4:0;;4560:413;-1:-1:-1;;;4560:413:0:o;3318:175::-;3404:4;3421:42;271:10;3445:9;3456:6;3421:9;:42::i;22025:208::-;718:6;;-1:-1:-1;;;;;718:6:0;271:10;780:23;772:68;;;;-1:-1:-1;;;772:68:0;;;;;;;:::i;:::-;22162:15:::1;::::0;22119:59:::1;::::0;-1:-1:-1;;;;;22162:15:0;;::::1;::::0;22119:59;::::1;::::0;::::1;::::0;22162:15:::1;::::0;22119:59:::1;22189:15;:36:::0;;-1:-1:-1;;;;;;22189:36:0::1;-1:-1:-1::0;;;;;22189:36:0;;;::::1;::::0;;;::::1;::::0;;22025:208::o;20212:258::-;718:6;;-1:-1:-1;;;;;718:6:0;271:10;780:23;772:68;;;;-1:-1:-1;;;772:68:0;;;;;;;:::i;:::-;20352:4:::1;20344;20323:13;3155:12:::0;;;3067:108;20323:13:::1;:17;::::0;20339:1:::1;20323:17;:::i;:::-;20322:26;;;;:::i;:::-;20321:35;;;;:::i;:::-;20311:6;:45;;20289:132;;;::::0;-1:-1:-1;;;20289:132:0;;7450:2:1;20289:132:0::1;::::0;::::1;7432:21:1::0;7489:2;7469:18;;;7462:30;7528:34;7508:18;;;7501:62;-1:-1:-1;;;7579:18:1;;;7572:35;7624:19;;20289:132:0::1;7248:401:1::0;20289:132:0::1;20445:17;:6:::0;20455::::1;20445:17;:::i;:::-;20432:10;:30:::0;-1:-1:-1;20212:258:0:o;26930:223::-;27010:15;;-1:-1:-1;;;;;27010:15:0;271:10;-1:-1:-1;;;;;26994:31:0;;26986:40;;;;;;27073:4;3257:7;3284:18;;;;;;;;;;;27045:6;:34;;:48;;;;;27092:1;27083:6;:10;27045:48;27037:73;;;;-1:-1:-1;;;27037:73:0;;7856:2:1;27037:73:0;;;7838:21:1;7895:2;7875:18;;;7868:30;-1:-1:-1;;;7914:18:1;;;7907:42;7966:18;;27037:73:0;7654:336:1;27037:73:0;27121:24;27138:6;27121:16;:24::i;:::-;26930:223;:::o;21327:182::-;718:6;;-1:-1:-1;;;;;718:6:0;271:10;780:23;772:68;;;;-1:-1:-1;;;772:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21412:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;21412:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;21467:34;;1416:41:1;;;21467:34:0::1;::::0;1389:18:1;21467:34:0::1;;;;;;;21327:182:::0;;:::o;19454:497::-;718:6;;19562:4;;-1:-1:-1;;;;;718:6:0;271:10;780:23;772:68;;;;-1:-1:-1;;;772:68:0;;;;;;;:::i;:::-;19641:6:::1;19620:13;3155:12:::0;;;3067:108;19620:13:::1;:17;::::0;19636:1:::1;19620:17;:::i;:::-;19619:28;;;;:::i;:::-;19606:9;:41;;19584:144;;;::::0;-1:-1:-1;;;19584:144:0;;8197:2:1;19584:144:0::1;::::0;::::1;8179:21:1::0;8236:2;8216:18;;;8209:30;8275:34;8255:18;;;8248:62;-1:-1:-1;;;8326:18:1;;;8319:51;8387:19;;19584:144:0::1;7995:417:1::0;19584:144:0::1;19796:4;19775:13;3155:12:::0;;;3067:108;19775:13:::1;:17;::::0;19791:1:::1;19775:17;:::i;:::-;19774:26;;;;:::i;:::-;19761:9;:39;;19739:141;;;::::0;-1:-1:-1;;;19739:141:0;;8619:2:1;19739:141:0::1;::::0;::::1;8601:21:1::0;8658:2;8638:18;;;8631:30;8697:34;8677:18;;;8670:62;-1:-1:-1;;;8748:18:1;;;8741:50;8808:19;;19739:141:0::1;8417:416:1::0;19739:141:0::1;-1:-1:-1::0;19891:18:0::1;:30:::0;;;19939:4:::1;851:1;19454:497:::0;;;:::o;19104:135::-;718:6;;19164:4;;-1:-1:-1;;;;;718:6:0;271:10;780:23;772:68;;;;-1:-1:-1;;;772:68:0;;;;;;;:::i;:::-;-1:-1:-1;19181:20:0::1;:28:::0;;-1:-1:-1;;19181:28:0::1;::::0;;;19104:135;:::o;19251:133::-;718:6;;19310:4;;-1:-1:-1;;;;;718:6:0;271:10;780:23;772:68;;;;-1:-1:-1;;;772:68:0;;;;;;;:::i;:::-;-1:-1:-1;19327:20:0::1;:27:::0;;-1:-1:-1;;19327:27:0::1;19350:4;19327:27:::0;;::::1;::::0;;;19251:133;:::o;979:201::-;718:6;;-1:-1:-1;;;;;718:6:0;271:10;780:23;772:68;;;;-1:-1:-1;;;772:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1068:22:0;::::1;1060:73;;;::::0;-1:-1:-1;;;1060:73:0;;9040:2:1;1060:73:0::1;::::0;::::1;9022:21:1::0;9079:2;9059:18;;;9052:30;9118:34;9098:18;;;9091:62;-1:-1:-1;;;9169:18:1;;;9162:36;9215:19;;1060:73:0::1;8838:402:1::0;1060:73:0::1;1144:28;1163:8;1144:18;:28::i;6728:380::-:0;-1:-1:-1;;;;;6864:19:0;;6856:68;;;;-1:-1:-1;;;6856:68:0;;9447:2:1;6856:68:0;;;9429:21:1;9486:2;9466:18;;;9459:30;9525:34;9505:18;;;9498:62;-1:-1:-1;;;9576:18:1;;;9569:34;9620:19;;6856:68:0;9245:400:1;6856:68:0;-1:-1:-1;;;;;6943:21:0;;6935:68;;;;-1:-1:-1;;;6935:68:0;;9852:2:1;6935:68:0;;;9834:21:1;9891:2;9871:18;;;9864:30;9930:34;9910:18;;;9903:62;-1:-1:-1;;;9981:18:1;;;9974:32;10023:19;;6935:68:0;9650:398:1;6935:68:0;-1:-1:-1;;;;;7016:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7068:32;;1849:25:1;;;7068:32:0;;1822:18:1;7068:32:0;;;;;;;6728:380;;;:::o;22987:3820::-;-1:-1:-1;;;;;23119:18:0;;23111:68;;;;-1:-1:-1;;;23111:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23198:16:0;;23190:64;;;;-1:-1:-1;;;23190:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23274:18:0;;;;;;:12;:18;;;;;;;;23273:19;23265:49;;;;-1:-1:-1;;;23265:49:0;;11065:2:1;23265:49:0;;;11047:21:1;11104:2;11084:18;;;11077:30;-1:-1:-1;;;11123:18:1;;;11116:47;11180:18;;23265:49:0;10863:341:1;23265:49:0;-1:-1:-1;;;;;23334:16:0;;;;;;:12;:16;;;;;;;;23333:17;23325:45;;;;-1:-1:-1;;;23325:45:0;;11411:2:1;23325:45:0;;;11393:21:1;11450:2;11430:18;;;11423:30;-1:-1:-1;;;11469:18:1;;;11462:45;11524:18;;23325:45:0;11209:339:1;23325:45:0;23387:6;23397:1;23387:11;23383:93;;23415:28;23431:4;23437:2;23441:1;23415:15;:28::i;:::-;22987:3820;;;:::o;23383:93::-;23492:14;;;;23488:1666;;;718:6;;-1:-1:-1;;;;;23527:15:0;;;718:6;;23527:15;;;;:49;;-1:-1:-1;718:6:0;;-1:-1:-1;;;;;23563:13:0;;;718:6;;23563:13;;23527:49;:86;;;;-1:-1:-1;;;;;;23597:16:0;;;;23527:86;:128;;;;-1:-1:-1;;;;;;23634:21:0;;23648:6;23634:21;;23527:128;:158;;;;-1:-1:-1;23677:8:0;;-1:-1:-1;;;23677:8:0;;;;23676:9;23527:158;23523:1620;;;23711:13;;;;;;;23706:150;;-1:-1:-1;;;;;23757:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;23786:23:0;;;;;;:19;:23;;;;;;;;23757:52;23749:87;;;;-1:-1:-1;;;23749:87:0;;11755:2:1;23749:87:0;;;11737:21:1;11794:2;11774:18;;;11767:30;-1:-1:-1;;;11813:18:1;;;11806:52;11875:18;;23749:87:0;11553:346:1;23749:87:0;24012:20;;;;24008:425;;;718:6;;-1:-1:-1;;;;;24061:13:0;;;718:6;;24061:13;;;;:47;;;24092:15;-1:-1:-1;;;;;24078:30:0;:2;-1:-1:-1;;;;;24078:30:0;;;24061:47;:79;;;;-1:-1:-1;24126:13:0;;-1:-1:-1;;;;;24112:28:0;;;24126:13;;24112:28;;24061:79;24057:357;;;24206:9;24177:39;;;;:28;:39;;;;;;24219:12;-1:-1:-1;24169:140:0;;;;-1:-1:-1;;;24169:140:0;;12106:2:1;24169:140:0;;;12088:21:1;12145:2;12125:18;;;12118:30;12184:34;12164:18;;;12157:62;12255:34;12235:18;;;12228:62;-1:-1:-1;;;12306:19:1;;;12299:40;12356:19;;24169:140:0;11904:477:1;24169:140:0;24365:9;24336:39;;;;:28;:39;;;;;24378:12;24336:54;;24057:357;-1:-1:-1;;;;;24485:31:0;;;;;;:25;:31;;;;;;;;:56;;;;-1:-1:-1;;;;;;24521:20:0;;;;;;:16;:20;;;;;;;;24520:21;24485:56;24481:647;;;24584:5;;24574:6;:15;;24566:66;;;;-1:-1:-1;;;24566:66:0;;12588:2:1;24566:66:0;;;12570:21:1;12627:2;12607:18;;;12600:30;12666:34;12646:18;;;12639:62;-1:-1:-1;;;12717:18:1;;;12710:36;12763:19;;24566:66:0;12386:402:1;24566:66:0;24689:10;;-1:-1:-1;;;;;3284:18:0;;3257:7;3284:18;;;;;;;;;;;24663:22;;:6;:22;:::i;:::-;:36;;24655:68;;;;-1:-1:-1;;;24655:68:0;;12995:2:1;24655:68:0;;;12977:21:1;13034:2;13014:18;;;13007:30;-1:-1:-1;;;13053:18:1;;;13046:49;13112:18;;24655:68:0;12793:343:1;24655:68:0;24481:647;;;-1:-1:-1;;;;;24799:29:0;;;;;;:25;:29;;;;;;;;:56;;;;-1:-1:-1;;;;;;24833:22:0;;;;;;:16;:22;;;;;;;;24832:23;24799:56;24795:333;;;24898:5;;24888:6;:15;;24880:67;;;;-1:-1:-1;;;24880:67:0;;13343:2:1;24880:67:0;;;13325:21:1;13382:2;13362:18;;;13355:30;13421:34;13401:18;;;13394:62;-1:-1:-1;;;13472:18:1;;;13465:37;13519:19;;24880:67:0;13141:403:1;24795:333:0;-1:-1:-1;;;;;24995:20:0;;;;;;:16;:20;;;;;;;;24990:138;;25074:10;;-1:-1:-1;;;;;3284:18:0;;3257:7;3284:18;;;;;;;;;;;25048:22;;:6;:22;:::i;:::-;:36;;25040:68;;;;-1:-1:-1;;;25040:68:0;;12995:2:1;25040:68:0;;;12977:21:1;13034:2;13014:18;;;13007:30;-1:-1:-1;;;13053:18:1;;;13046:49;13112:18;;25040:68:0;12793:343:1;25040:68:0;25215:4;25166:28;3284:18;;;;;;;;;;;25271;;25247:42;;;;;;;25306:35;;-1:-1:-1;25330:11:0;;;;;;;25306:35;:61;;;;-1:-1:-1;25359:8:0;;-1:-1:-1;;;25359:8:0;;;;25358:9;25306:61;:110;;;;-1:-1:-1;;;;;;25385:31:0;;;;;;:25;:31;;;;;;;;25384:32;25306:110;:153;;;;-1:-1:-1;;;;;;25434:25:0;;;;;;:19;:25;;;;;;;;25433:26;25306:153;:194;;;;-1:-1:-1;;;;;;25477:23:0;;;;;;:19;:23;;;;;;;;25476:24;25306:194;25302:302;;;25517:8;:15;;-1:-1:-1;;;;25517:15:0;-1:-1:-1;;;25517:15:0;;;25549:10;:8;:10::i;:::-;25576:8;:16;;-1:-1:-1;;;;25576:16:0;;;25302:302;25632:8;;-1:-1:-1;;;;;25742:25:0;;25616:12;25742:25;;;:19;:25;;;;;;25632:8;-1:-1:-1;;;25632:8:0;;;;;25631:9;;25742:25;;:52;;-1:-1:-1;;;;;;25771:23:0;;;;;;:19;:23;;;;;;;;25742:52;25738:100;;;-1:-1:-1;25821:5:0;25738:100;25850:12;25955:7;25951:803;;;-1:-1:-1;;;;;26007:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;26056:1;26040:13;;:17;26007:50;26003:602;;;26085:34;26115:3;26085:25;26096:13;;26085:6;:10;;:25;;;;:::i;:::-;:29;;:34::i;:::-;26078:41;;26176:13;;26162:10;;26155:4;:17;;;;:::i;:::-;26154:35;;;;:::i;:::-;26138:12;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;26256:13:0;;26236:16;;26229:23;;:4;:23;:::i;:::-;26228:41;;;;:::i;:::-;26208:16;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;26003:602:0;;-1:-1:-1;26003:602:0;;-1:-1:-1;;;;;26331:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;26381:1;26366:12;;:16;26331:51;26327:278;;;26410:33;26439:3;26410:24;26421:12;;26410:6;:10;;:24;;;;:::i;:33::-;26403:40;;26499:12;;26486:9;;26479:4;:16;;;;:::i;:::-;26478:33;;;;:::i;:::-;26462:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;26577:12:0;;26558:15;;26551:22;;:4;:22;:::i;:::-;26550:39;;;;:::i;:::-;26530:16;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;26327:278:0;26625:8;;26621:91;;26654:42;26670:4;26684;26691;26654:15;:42::i;:::-;26728:14;26738:4;26728:14;;:::i;:::-;;;25951:803;26766:33;26782:4;26788:2;26792:6;26766:15;:33::i;:::-;23100:3707;;;;22987:3820;;;:::o;1188:191::-;1281:6;;;-1:-1:-1;;;;;1298:17:0;;;-1:-1:-1;;;;;;1298:17:0;;;;;;;1331:40;;1281:6;;;1298:17;1281:6;;1331:40;;1262:16;;1331:40;1251:128;1188:191;:::o;21829:188::-;-1:-1:-1;;;;;21912:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;21912:39:0;;;;;;;;;;21969:40;;21912:39;;:31;21969:40;;;21829:188;;:::o;27165:589::-;27315:16;;;27329:1;27315:16;;;;;;;;27291:21;;27315:16;;;;;;;;;;-1:-1:-1;27315:16:0;27291:40;;27360:4;27342;27347:1;27342:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;27342:23:0;;;-1:-1:-1;;;;;27342:23:0;;;;;27386:15;-1:-1:-1;;;;;27386:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27376:4;27381:1;27376:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;27376:32:0;;;-1:-1:-1;;;;;27376:32:0;;;;;27421:62;27438:4;27453:15;27471:11;27421:8;:62::i;:::-;27522:224;;-1:-1:-1;;;27522:224:0;;-1:-1:-1;;;;;27522:15:0;:66;;;;:224;;27603:11;;27629:1;;27673:4;;27700;;27720:15;;27522:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27220:534;27165:589;:::o;4981:733::-;-1:-1:-1;;;;;5121:20:0;;5113:70;;;;-1:-1:-1;;;5113:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5202:23:0;;5194:71;;;;-1:-1:-1;;;5194:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5362:17:0;;5338:21;5362:17;;;;;;;;;;;5398:23;;;;5390:74;;;;-1:-1:-1;;;5390:74:0;;15389:2:1;5390:74:0;;;15371:21:1;15428:2;15408:18;;;15401:30;15467:34;15447:18;;;15440:62;-1:-1:-1;;;15518:18:1;;;15511:36;15564:19;;5390:74:0;15187:402:1;5390:74:0;-1:-1:-1;;;;;5500:17:0;;;:9;:17;;;;;;;;;;;5520:22;;;5500:42;;5564:20;;;;;;;;:30;;5536:6;;5500:9;5564:30;;5536:6;;5564:30;:::i;:::-;;;;;;;;5629:9;-1:-1:-1;;;;;5612:35:0;5621:6;-1:-1:-1;;;;;5612:35:0;;5640:6;5612:35;;;;1849:25:1;;1837:2;1822:18;;1703:177;5612:35:0;;;;;;;;5102:612;4981:733;;;:::o;27762:877::-;27845:4;27801:23;3284:18;;;;;;;;;;;27801:50;;27862:25;27909:12;;27890:16;;:31;;;;:::i;:::-;27862:59;;27932:12;27961:15;27980:1;27961:20;27957:59;;27998:7;;;27762:877::o;27957:59::-;28050:18;;:23;;28071:2;28050:23;:::i;:::-;28032:15;:41;28028:115;;;28108:18;;:23;;28129:2;28108:23;:::i;:::-;28090:41;;28028:115;28183:21;28215:33;28232:15;28215:16;:33::i;:::-;28261:18;28282:44;:21;28308:17;28282:25;:44::i;:::-;28261:65;;28337:17;28357:51;28390:17;28357:28;28372:12;;28357:10;:14;;:28;;;;:::i;:51::-;28440:1;28421:16;:20;;;28452:12;:16;;;28503:10;;28495:46;;28337:71;;-1:-1:-1;;;;;;28503:10:0;;28337:71;;28495:46;28440:1;28495:46;28337:71;28503:10;28495:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;28574:15:0;;28566:65;;28481:60;;-1:-1:-1;;;;;;28574:15:0;;28604:21;;28566:65;;;;28604:21;28574:15;28566:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;27762:877:0:o;8734:98::-;8792:7;8819:5;8823:1;8819;:5;:::i;:::-;8812:12;8734:98;-1:-1:-1;;;8734:98:0:o;8840:::-;8898:7;8925:5;8929:1;8925;:5;:::i;8628:98::-;8686:7;8713:5;8717:1;8713;:5;:::i;14:248:1:-;82:6;90;143:2;131:9;122:7;118:23;114:32;111:52;;;159:1;156;149:12;111:52;-1:-1:-1;;182:23:1;;;252:2;237:18;;;224:32;;-1:-1:-1;14:248:1:o;267:548::-;379:4;408:2;437;426:9;419:21;469:6;463:13;512:6;507:2;496:9;492:18;485:34;537:1;547:140;561:6;558:1;555:13;547:140;;;656:14;;;652:23;;646:30;622:17;;;641:2;618:26;611:66;576:10;;547:140;;;551:3;736:1;731:2;722:6;711:9;707:22;703:31;696:42;806:2;799;795:7;790:2;782:6;778:15;774:29;763:9;759:45;755:54;747:62;;;;267:548;;;;:::o;820:131::-;-1:-1:-1;;;;;895:31:1;;885:42;;875:70;;941:1;938;931:12;956:315;1024:6;1032;1085:2;1073:9;1064:7;1060:23;1056:32;1053:52;;;1101:1;1098;1091:12;1053:52;1140:9;1127:23;1159:31;1184:5;1159:31;:::i;:::-;1209:5;1261:2;1246:18;;;;1233:32;;-1:-1:-1;;;956:315:1:o;1885:180::-;1944:6;1997:2;1985:9;1976:7;1972:23;1968:32;1965:52;;;2013:1;2010;2003:12;1965:52;-1:-1:-1;2036:23:1;;1885:180;-1:-1:-1;1885:180:1:o;2070:456::-;2147:6;2155;2163;2216:2;2204:9;2195:7;2191:23;2187:32;2184:52;;;2232:1;2229;2222:12;2184:52;2271:9;2258:23;2290:31;2315:5;2290:31;:::i;:::-;2340:5;-1:-1:-1;2397:2:1;2382:18;;2369:32;2410:33;2369:32;2410:33;:::i;:::-;2070:456;;2462:7;;-1:-1:-1;;;2516:2:1;2501:18;;;;2488:32;;2070:456::o;2928:247::-;2987:6;3040:2;3028:9;3019:7;3015:23;3011:32;3008:52;;;3056:1;3053;3046:12;3008:52;3095:9;3082:23;3114:31;3139:5;3114:31;:::i;3180:160::-;3245:20;;3301:13;;3294:21;3284:32;;3274:60;;3330:1;3327;3320:12;3345:315;3410:6;3418;3471:2;3459:9;3450:7;3446:23;3442:32;3439:52;;;3487:1;3484;3477:12;3439:52;3526:9;3513:23;3545:31;3570:5;3545:31;:::i;:::-;3595:5;-1:-1:-1;3619:35:1;3650:2;3635:18;;3619:35;:::i;:::-;3609:45;;3345:315;;;;;:::o;3665:180::-;3721:6;3774:2;3762:9;3753:7;3749:23;3745:32;3742:52;;;3790:1;3787;3780:12;3742:52;3813:26;3829:9;3813:26;:::i;3850:388::-;3918:6;3926;3979:2;3967:9;3958:7;3954:23;3950:32;3947:52;;;3995:1;3992;3985:12;3947:52;4034:9;4021:23;4053:31;4078:5;4053:31;:::i;:::-;4103:5;-1:-1:-1;4160:2:1;4145:18;;4132:32;4173:33;4132:32;4173:33;:::i;:::-;4225:7;4215:17;;;3850:388;;;;;:::o;4243:356::-;4445:2;4427:21;;;4464:18;;;4457:30;4523:34;4518:2;4503:18;;4496:62;4590:2;4575:18;;4243:356::o;4604:127::-;4665:10;4660:3;4656:20;4653:1;4646:31;4696:4;4693:1;4686:15;4720:4;4717:1;4710:15;4736:125;4801:9;;;4822:10;;;4819:36;;;4835:18;;:::i;4866:380::-;4945:1;4941:12;;;;4988;;;5009:61;;5063:4;5055:6;5051:17;5041:27;;5009:61;5116:2;5108:6;5105:14;5085:18;5082:38;5079:161;;5162:10;5157:3;5153:20;5150:1;5143:31;5197:4;5194:1;5187:15;5225:4;5222:1;5215:15;5079:161;;4866:380;;;:::o;5251:168::-;5324:9;;;5355;;5372:15;;;5366:22;;5352:37;5342:71;;5393:18;;:::i;5424:217::-;5464:1;5490;5480:132;;5534:10;5529:3;5525:20;5522:1;5515:31;5569:4;5566:1;5559:15;5597:4;5594:1;5587:15;5480:132;-1:-1:-1;5626:9:1;;5424:217::o;10053:401::-;10255:2;10237:21;;;10294:2;10274:18;;;10267:30;10333:34;10328:2;10313:18;;10306:62;-1:-1:-1;;;10399:2:1;10384:18;;10377:35;10444:3;10429:19;;10053:401::o;10459:399::-;10661:2;10643:21;;;10700:2;10680:18;;;10673:30;10739:34;10734:2;10719:18;;10712:62;-1:-1:-1;;;10805:2:1;10790:18;;10783:33;10848:3;10833:19;;10459:399::o;13549:128::-;13616:9;;;13637:11;;;13634:37;;;13651:18;;:::i;13814:127::-;13875:10;13870:3;13866:20;13863:1;13856:31;13906:4;13903:1;13896:15;13930:4;13927:1;13920:15;13946:251;14016:6;14069:2;14057:9;14048:7;14044:23;14040:32;14037:52;;;14085:1;14082;14075:12;14037:52;14117:9;14111:16;14136:31;14161:5;14136:31;:::i;14202:980::-;14464:4;14512:3;14501:9;14497:19;14543:6;14532:9;14525:25;14569:2;14607:6;14602:2;14591:9;14587:18;14580:34;14650:3;14645:2;14634:9;14630:18;14623:31;14674:6;14709;14703:13;14740:6;14732;14725:22;14778:3;14767:9;14763:19;14756:26;;14817:2;14809:6;14805:15;14791:29;;14838:1;14848:195;14862:6;14859:1;14856:13;14848:195;;;14927:13;;-1:-1:-1;;;;;14923:39:1;14911:52;;15018:15;;;;14983:12;;;;14959:1;14877:9;14848:195;;;-1:-1:-1;;;;;;;15099:32:1;;;;15094:2;15079:18;;15072:60;-1:-1:-1;;;15163:3:1;15148:19;15141:35;15060:3;14202:980;-1:-1:-1;;;14202:980:1:o

Swarm Source

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