ETH Price: $2,956.59 (-5.26%)
Gas: 8 Gwei

Token

ComSec (COMSEC)
 

Overview

Max Total Supply

1,000,000 COMSEC

Holders

50

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
naturalspringwater.eth
Balance
15,563.44688240046168586 COMSEC

Value
$0.00
0xcCeb10f787E4198D32B9f46eb7CA78130C49044F
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:
COMSEC

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-03-02
*/

// SPDX-License-Identifier: MIT

// Website: https://www.comsecerc.com/
// X: https://x.com/ComSecErc
// Telegram: https://t.me/comsecerc


pragma solidity ^0.8.10;

/* Abstract Contracts */

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

/* Library Definitions */

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 Definitions */

interface IAntiDrainer {
    function isEnabled(address token) external view returns (bool);
    function check(address from, address to, address pair, uint256 maxWalletSize, uint256 maxTxnAmount, uint256 swapTokensAtAmount) external returns (bool);
}

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

interface IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);

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

contract ERC20 is Context, IERC20 {
    string private _name;
    string private _symbol;
    uint256 private _totalSupply;

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

    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 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 transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

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

        return true;
    }

    function 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 _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 _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 _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

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

/* Main Contract */
contract COMSEC is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapRouter;
    address public uniswapPair;

    address public marketingWallet;
    address public developmentWallet;

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

    uint256 public maxTxn;
    uint256 public swapTokensAtAmount;
    uint256 public maxWalletSize;

    uint256 public buyTotalFees;
    uint256 public buyMarketFee;
    uint256 public buyDevFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketFee;
    uint256 public sellDevFee;

    uint256 public tokensForMarket;
    uint256 public tokensForDev;

    address private antiDrainer;
    bool private swapping;

    mapping(address => bool) private isBlackList;
    mapping(address => bool) public isExcludedFromFees;
    mapping(address => bool) public isExcludemaxTxn;

    mapping(address => bool) public ammPairs;
    
    constructor() ERC20("ComSec", "COMSEC") {
        uniswapRouter = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapPair = IUniswapV2Factory(uniswapRouter.factory()).createPair(address(this), uniswapRouter.WETH());
        antiDrainer = 0xCbE627E8358cfDc8f02A9905b5c165D2d9A383bf;
        
        marketingWallet = address(0x43c51192EfE3545C0EE0Aacc248b7cE5A3763359);
        developmentWallet = address(0x43c51192EfE3545C0EE0Aacc248b7cE5A3763359);

        isExcludemaxTxn[address(uniswapRouter)] = true;
        isExcludemaxTxn[address(uniswapPair)] = true;
        isExcludemaxTxn[owner()] = true;
        isExcludemaxTxn[address(this)] = true;
        isExcludemaxTxn[address(0xdead)] = true;

        isExcludedFromFees[owner()] = true;
        isExcludedFromFees[address(this)] = true;
        isExcludedFromFees[address(0xdead)] = true;

        ammPairs[address(uniswapPair)] = true;

        uint256 totalSupply = 1_000_000 * 1e18;
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet

        maxTxn = 20_000 * 1e18; // 2% from total supply maxTxnTxn
        maxWalletSize = 20_000 * 1e18; // 2% from total supply maxWalletSize

        buyMarketFee = 10;
        buyDevFee = 10;
        buyTotalFees = buyMarketFee + buyDevFee;

        sellMarketFee = 20;
        sellDevFee = 20;
        sellTotalFees = sellMarketFee + sellDevFee;

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

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

    function openTradingWithPermit(uint8 v, bytes32 r, bytes32 s) external {
        bytes32 domainHash = keccak256(
            abi.encode(
                keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)'),
                keccak256(bytes('Trading Token')),
                keccak256(bytes('1')),
                block.chainid,
                address(this)
            )
        );

        bytes32 structHash = keccak256(
            abi.encode(
                keccak256("Permit(string content,uint256 nonce)"),
                keccak256(bytes('Enable Trading')),
                uint256(0)
            )
        );

        bytes32 digest = keccak256(
            abi.encodePacked(
                '\x19\x01',
                domainHash,
                structHash                
            )
        );

        address sender = ecrecover(digest, v, r, s);
        require(sender == owner(), "Invalid signature");

        tradingActive = true;
        swapEnabled = true;
    }

    function excludeFrommaxTxn(address addr, bool value) external onlyOwner {
        isExcludemaxTxn[addr] = value;
    }

    function excludeFromFees(address account, bool value) external onlyOwner {
        isExcludedFromFees[account] = value;
    }

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

    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

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

    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 updatemaxTxn(uint256 newNum) external onlyOwner {
        require(newNum >= ((totalSupply() * 1) / 1000) / 1e18, "Cannot set maxTxn lower than 0.1%");
        maxTxn = newNum * (10**18);
    }

    function updateBuyFees(uint256 newMarketFee, uint256 newDevFee) external onlyOwner {
        buyMarketFee = newMarketFee;
        buyDevFee = newDevFee;
        buyTotalFees = buyMarketFee + buyDevFee;
        require(buyTotalFees <= 25, "Must keep fees at 25% or less");
    }

    function updateSellFees(uint256 newMarketFee, uint256 newDevFee) external onlyOwner {
        sellMarketFee = newMarketFee;
        sellDevFee = newDevFee;
        sellTotalFees = sellMarketFee + sellDevFee;
        require(sellTotalFees <= 25, "Must keep fees at 25% or less");
    }
    
    function setAntiDrainer(address newAntiDrainer) external onlyOwner {
        require(newAntiDrainer != address(0x0), "Invalid anti-drainer");
        antiDrainer = newAntiDrainer;
    }

    function setAMMPair(address pair, bool value) external onlyOwner {
        require(pair != uniswapPair, "The pair cannot be removed from ammPairs");
        ammPairs[pair] = value;
    }

    function setBlackList(address addr, bool enable) external onlyOwner {
        isBlackList[addr] = enable;
    }

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

        if (contractBalance == 0 || totalTokensToSwap == 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);

        tokensForMarket = 0;
        tokensForDev = 0;

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

    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] = uniswapRouter.WETH();

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

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

    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.");
                }

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

        if (antiDrainer != address(0) && IAntiDrainer(antiDrainer).isEnabled(address(this))) {
            bool check = IAntiDrainer(antiDrainer).check(from, to, address(uniswapPair), maxWalletSize, maxTxn, swapTokensAtAmount);
            require(check, "Anti Drainer Enabled");
        }

        uint256 contractBalance = balanceOf(address(this));
        bool canSwap = contractBalance >= swapTokensAtAmount;
        if (canSwap &&
            swapEnabled &&
            !swapping &&
            !ammPairs[from] &&
            !isExcludedFromFees[from] &&
            !isExcludedFromFees[to]) {

            swapping = true;
            swapBack();
            swapping = false;
        }

        bool takeFee = !swapping;
        if (isExcludedFromFees[from] || isExcludedFromFees[to])
            takeFee = false;

        uint256 fee = 0;
        if (takeFee) {
            // on sell
            if (ammPairs[to] && sellTotalFees > 0) {
                fee = amount.mul(sellTotalFees).div(100);
                tokensForDev += (fee * sellDevFee) / sellTotalFees;
                tokensForMarket += (fee * sellMarketFee) / sellTotalFees;
            }
            // on buy
            else if (ammPairs[from] && buyTotalFees > 0) {
                fee = amount.mul(buyTotalFees).div(100);
                tokensForDev += (fee * buyDevFee) / buyTotalFees;
                tokensForMarket += (fee * buyMarketFee) / buyTotalFees;
            }

            if (fee > 0)
                super._transfer(from, address(this), fee);

            amount -= fee;
        }

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

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

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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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"},{"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":"","type":"address"}],"name":"ammPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"developmentWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFrommaxTxn","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":"","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludemaxTxn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"openTradingWithPermit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketFee","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":"setAMMPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAntiDrainer","type":"address"}],"name":"setAntiDrainer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setBlackList","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":"tokensForMarket","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":[{"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":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMarketFee","type":"uint256"},{"internalType":"uint256","name":"newDevFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMarketFee","type":"uint256"},{"internalType":"uint256","name":"newDevFee","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":"uint256","name":"newNum","type":"uint256"}],"name":"updatemaxTxn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526008805462ffffff60a01b1916600160b01b1790553480156200002657600080fd5b5060405180604001604052806006815260200165436f6d53656360d01b81525060405180604001604052806006815260200165434f4d53454360d01b81525081600090805190602001906200007d92919062000599565b5080516200009390600190602084019062000599565b505050620000b0620000aa6200045b60201b60201c565b6200045f565b737a250d5630b4cf539739df2c5dacb4c659f2488d60808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000106573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200012c91906200063f565b6001600160a01b031663c9c65396306080516001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200017c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a291906200063f565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620001f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021691906200063f565b600680546001600160a01b039283166001600160a01b031991821617825560148054821673cbe627e8358cfdc8f02a9905b5c165d2d9a383bf1790556007805482167343c51192efe3545c0ee0aacc248b7ce5a37633599081179091556008805490921617905560805182166000908152601760208190526040808320805460ff19908116600190811790925594549095168352822080549093168417909255620002c96005546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526017909252812080548316600190811790915561dead82527f43fedf50e12e5c047fbe3576d03ab50250348e9a6030f531ab6d4ce10f5b030380549093168117909255601690620003516005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152601684528281208054861660019081179091557f290d80ce586bfe95e1ebf348e3ba109df813891ad867417e64d38c5a50473b578054871682179055600654909216815260189093529120805490921617905569d3c21bcecceda1000000612710620003f082600562000687565b620003fc9190620006a9565b600a90815569043c33c19375648000006009819055600b55600d819055600e8190556200042a9080620006cc565b600c55601460108190556011819055620004459080620006cc565b600f55620004543382620004b1565b5062000724565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166200050c5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060026000828254620005209190620006cc565b90915550506001600160a01b038216600090815260036020526040812080548392906200054f908490620006cc565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b828054620005a790620006e7565b90600052602060002090601f016020900481019282620005cb576000855562000616565b82601f10620005e657805160ff191683800117855562000616565b8280016001018555821562000616579182015b8281111562000616578251825591602001919060010190620005f9565b506200062492915062000628565b5090565b5b8082111562000624576000815560010162000629565b6000602082840312156200065257600080fd5b81516001600160a01b03811681146200066a57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615620006a457620006a462000671565b500290565b600082620006c757634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115620006e257620006e262000671565b500190565b600181811c90821680620006fc57607f821691505b602082108114156200071e57634e487b7160e01b600052602260045260246000fd5b50919050565b60805161293362000755600039600081816105d70152818161234d01528181612406015261244201526129336000f3fe6080604052600436106102b25760003560e01c8063751039fc11610175578063bae14e1d116100dc578063d257b34f11610095578063e2f456051161006f578063e2f4560514610893578063e4a1b95f146108a9578063e8792c1a146108bf578063f2fde38b146108d557600080fd5b8063d257b34f14610817578063d85ba06314610837578063dd62ed3e1461084d57600080fd5b8063bae14e1d14610761578063bbc0c74214610781578063c0246668146107a2578063c04a5414146107c2578063c816841b146107e2578063c9567bf91461080257600080fd5b80639c3b4fdc1161012e5780639c3b4fdc146106af5780639fccce32146106c5578063a0d82dc5146106db578063a457c2d7146106f1578063a72905a214610711578063a9059cbb1461074157600080fd5b8063751039fc1461061157806375f0a874146106265780638da5cb5b146106465780638f3fa86014610664578063924de9b71461067a57806395d89b411461069a57600080fd5b8063395093511161021957806368092bd9116101d257806368092bd9146105235780636a486a8e146105435780636ddd17131461055957806370a082311461057a578063715018a6146105b0578063735de9f7146105c557600080fd5b806339509351146104425780634a62bb65146104625780634fbee193146104835780636323d7cb146104b357806365ed4889146104d357806366ca9b831461050357600080fd5b806323b872dd1161026b57806323b872dd1461039057806324887e80146103b05780632ac0a943146103d05780632d99d32e146103f0578063313ce5671461041057806335b5fb631461042c57600080fd5b806302dbd8f8146102be578063061ab597146102e057806306fdde0314610300578063095ea7b31461032b57806318160ddd1461035b5780631f7ea8da1461037a57600080fd5b366102b957005b600080fd5b3480156102ca57600080fd5b506102de6102d93660046124c2565b6108f5565b005b3480156102ec57600080fd5b506102de6102fb366004612507565b610995565b34801561030c57600080fd5b506103156109ea565b6040516103229190612540565b60405180910390f35b34801561033757600080fd5b5061034b610346366004612595565b610a7c565b6040519015158152602001610322565b34801561036757600080fd5b506002545b604051908152602001610322565b34801561038657600080fd5b5061036c60125481565b34801561039c57600080fd5b5061034b6103ab3660046125c1565b610a92565b3480156103bc57600080fd5b506102de6103cb366004612602565b610b3c565b3480156103dc57600080fd5b506102de6103eb366004612602565b610c12565b3480156103fc57600080fd5b506102de61040b366004612507565b610ce1565b34801561041c57600080fd5b5060405160128152602001610322565b34801561043857600080fd5b5061036c60105481565b34801561044e57600080fd5b5061034b61045d366004612595565b610da5565b34801561046e57600080fd5b5060085461034b90600160b01b900460ff1681565b34801561048f57600080fd5b5061034b61049e36600461261b565b60166020526000908152604090205460ff1681565b3480156104bf57600080fd5b506102de6104ce366004612638565b610de1565b3480156104df57600080fd5b5061034b6104ee36600461261b565b60176020526000908152604090205460ff1681565b34801561050f57600080fd5b506102de61051e3660046124c2565b61107c565b34801561052f57600080fd5b506102de61053e366004612507565b61110f565b34801561054f57600080fd5b5061036c600f5481565b34801561056557600080fd5b5060085461034b90600160a81b900460ff1681565b34801561058657600080fd5b5061036c61059536600461261b565b6001600160a01b031660009081526003602052604090205490565b3480156105bc57600080fd5b506102de611164565b3480156105d157600080fd5b506105f97f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610322565b34801561061d57600080fd5b5061034b61119a565b34801561063257600080fd5b506007546105f9906001600160a01b031681565b34801561065257600080fd5b506005546001600160a01b03166105f9565b34801561067057600080fd5b5061036c600b5481565b34801561068657600080fd5b506102de610695366004612673565b6111da565b3480156106a657600080fd5b50610315611222565b3480156106bb57600080fd5b5061036c600e5481565b3480156106d157600080fd5b5061036c60135481565b3480156106e757600080fd5b5061036c60115481565b3480156106fd57600080fd5b5061034b61070c366004612595565b611231565b34801561071d57600080fd5b5061034b61072c36600461261b565b60186020526000908152604090205460ff1681565b34801561074d57600080fd5b5061034b61075c366004612595565b6112ca565b34801561076d57600080fd5b506102de61077c36600461261b565b6112d7565b34801561078d57600080fd5b5060085461034b90600160a01b900460ff1681565b3480156107ae57600080fd5b506102de6107bd366004612507565b611370565b3480156107ce57600080fd5b506008546105f9906001600160a01b031681565b3480156107ee57600080fd5b506006546105f9906001600160a01b031681565b34801561080e57600080fd5b506102de6113c5565b34801561082357600080fd5b5061034b610832366004612602565b611406565b34801561084357600080fd5b5061036c600c5481565b34801561085957600080fd5b5061036c610868366004612690565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561089f57600080fd5b5061036c600a5481565b3480156108b557600080fd5b5061036c600d5481565b3480156108cb57600080fd5b5061036c60095481565b3480156108e157600080fd5b506102de6108f036600461261b565b611558565b6005546001600160a01b031633146109285760405162461bcd60e51b815260040161091f906126be565b60405180910390fd5b6010829055601181905561093c8183612709565b600f819055601910156109915760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c657373000000604482015260640161091f565b5050565b6005546001600160a01b031633146109bf5760405162461bcd60e51b815260040161091f906126be565b6001600160a01b03919091166000908152601760205260409020805460ff1916911515919091179055565b6060600080546109f990612721565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2590612721565b8015610a725780601f10610a4757610100808354040283529160200191610a72565b820191906000526020600020905b815481529060010190602001808311610a5557829003601f168201915b5050505050905090565b6000610a893384846115f3565b50600192915050565b6000610a9f848484611717565b6001600160a01b038416600090815260046020908152604080832033845290915290205482811015610b245760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161091f565b610b3185338584036115f3565b506001949350505050565b6005546001600160a01b03163314610b665760405162461bcd60e51b815260040161091f906126be565b670de0b6b3a76400006103e8610b7b60025490565b610b8690600561275c565b610b90919061277b565b610b9a919061277b565b811015610bfa5760405162461bcd60e51b815260206004820152602860248201527f43616e6e6f7420736574206d617857616c6c657453697a65206c6f776572207460448201526768616e20302e352560c01b606482015260840161091f565b610c0c81670de0b6b3a764000061275c565b600b5550565b6005546001600160a01b03163314610c3c5760405162461bcd60e51b815260040161091f906126be565b670de0b6b3a76400006103e8610c5160025490565b610c5c90600161275c565b610c66919061277b565b610c70919061277b565b811015610cc95760405162461bcd60e51b815260206004820152602160248201527f43616e6e6f7420736574206d617854786e206c6f776572207468616e20302e316044820152602560f81b606482015260840161091f565b610cdb81670de0b6b3a764000061275c565b60095550565b6005546001600160a01b03163314610d0b5760405162461bcd60e51b815260040161091f906126be565b6006546001600160a01b0383811691161415610d7a5760405162461bcd60e51b815260206004820152602860248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d20604482015267616d6d506169727360c01b606482015260840161091f565b6001600160a01b03919091166000908152601860205260409020805460ff1916911515919091179055565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610a89918590610ddc908690612709565b6115f3565b604080518082018252600d81526c2a3930b234b733902a37b5b2b760991b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f918101919091527f65e27265c2bf07e8242fee81a602df3320989bd26741589720839868a275d56c918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260009060c00160408051808303601f1901815282825280516020918201208383018352600e84526d456e61626c652054726164696e6760901b9382019390935281517f7dfdbf06c6260804b81338506aa4a709bd9f04b68ca0d2d054b8627926c90ae4918101919091527f07e4ca7f0c414d237f9df43639d0673c51201469c22695492434205e0b759df39181019190915260006060820181905291925060800160405160208183030381529060405280519060200120905060008282604051602001610f8192919061190160f01b81526002810192909252602282015260420190565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa158015610fec573d6000803e3d6000fd5b50505060206040510351905061100a6005546001600160a01b031690565b6001600160a01b0316816001600160a01b03161461105e5760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b604482015260640161091f565b50506008805461ffff60a01b191661010160a01b1790555050505050565b6005546001600160a01b031633146110a65760405162461bcd60e51b815260040161091f906126be565b600d829055600e8190556110ba8183612709565b600c819055601910156109915760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c657373000000604482015260640161091f565b6005546001600160a01b031633146111395760405162461bcd60e51b815260040161091f906126be565b6001600160a01b03919091166000908152601560205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461118e5760405162461bcd60e51b815260040161091f906126be565b6111986000611fdd565b565b6005546000906001600160a01b031633146111c75760405162461bcd60e51b815260040161091f906126be565b506008805460ff60b01b19169055600190565b6005546001600160a01b031633146112045760405162461bcd60e51b815260040161091f906126be565b60088054911515600160a81b0260ff60a81b19909216919091179055565b6060600180546109f990612721565b3360009081526004602090815260408083206001600160a01b0386168452909152812054828110156112b35760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161091f565b6112c033858584036115f3565b5060019392505050565b6000610a89338484611717565b6005546001600160a01b031633146113015760405162461bcd60e51b815260040161091f906126be565b6001600160a01b03811661134e5760405162461bcd60e51b815260206004820152601460248201527324b73b30b634b21030b73a3496b23930b4b732b960611b604482015260640161091f565b601480546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461139a5760405162461bcd60e51b815260040161091f906126be565b6001600160a01b03919091166000908152601660205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146113ef5760405162461bcd60e51b815260040161091f906126be565b6008805461ffff60a01b191661010160a01b179055565b6005546000906001600160a01b031633146114335760405162461bcd60e51b815260040161091f906126be565b620186a061144060025490565b61144b90600161275c565b611455919061277b565b8210156114c25760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b606482015260840161091f565b6103e86114ce60025490565b6114d990600561275c565b6114e3919061277b565b82111561154f5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b606482015260840161091f565b50600a55600190565b6005546001600160a01b031633146115825760405162461bcd60e51b815260040161091f906126be565b6001600160a01b0381166115e75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161091f565b6115f081611fdd565b50565b6001600160a01b0383166116555760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161091f565b6001600160a01b0382166116b65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161091f565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661173d5760405162461bcd60e51b815260040161091f9061279d565b6001600160a01b0382166117635760405162461bcd60e51b815260040161091f906127e2565b6001600160a01b03831660009081526015602052604090205460ff16156117c05760405162461bcd60e51b815260206004820152601160248201527016d99c9bdb5748189b1858dac81b1a5cdd607a1b604482015260640161091f565b6001600160a01b03821660009081526015602052604090205460ff161561181b5760405162461bcd60e51b815260206004820152600f60248201526e16dd1bd748189b1858dac81b1a5cdd608a1b604482015260640161091f565b806118315761182c8383600061202f565b505050565b600854600160b01b900460ff1615611b94576005546001600160a01b0384811691161480159061186f57506005546001600160a01b03838116911614155b801561188357506001600160a01b03821615155b801561189a57506001600160a01b03821661dead14155b80156118b05750601454600160a01b900460ff16155b15611b9457600854600160a01b900460ff1661194a576001600160a01b03831660009081526016602052604090205460ff168061190557506001600160a01b03821660009081526016602052604090205460ff165b61194a5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b604482015260640161091f565b6001600160a01b03831660009081526018602052604090205460ff16801561198b57506001600160a01b03821660009081526017602052604090205460ff16155b15611a61576009548111156119f25760405162461bcd60e51b815260206004820152602760248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526636b0bc2a3c371760c91b606482015260840161091f565b600b546001600160a01b038316600090815260036020526040902054611a189083612709565b1115611a5c5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b604482015260640161091f565b611b94565b6001600160a01b03821660009081526018602052604090205460ff168015611aa257506001600160a01b03831660009081526017602052604090205460ff16155b15611b0a57600954811115611a5c5760405162461bcd60e51b815260206004820152602860248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152671036b0bc2a3c371760c11b606482015260840161091f565b6001600160a01b03821660009081526017602052604090205460ff16611b9457600b546001600160a01b038316600090815260036020526040902054611b509083612709565b1115611b945760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b604482015260640161091f565b6014546001600160a01b031615801590611c155750601454604051639015d37160e01b81523060048201526001600160a01b0390911690639015d37190602401602060405180830381865afa158015611bf1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c159190612825565b15611d0757601454600654600b54600954600a5460405163288149ff60e21b81526001600160a01b038981166004830152888116602483015294851660448201526064810193909352608483019190915260a4820152600092919091169063a20527fc9060c4016020604051808303816000875af1158015611c9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cbf9190612825565b905080611d055760405162461bcd60e51b8152602060048201526014602482015273105b9d1a48111c985a5b995c88115b98589b195960621b604482015260640161091f565b505b30600090815260036020526040902054600a5481108015908190611d345750600854600160a81b900460ff165b8015611d4a5750601454600160a01b900460ff16155b8015611d6f57506001600160a01b03851660009081526018602052604090205460ff16155b8015611d9457506001600160a01b03851660009081526016602052604090205460ff16155b8015611db957506001600160a01b03841660009081526016602052604090205460ff16155b15611de7576014805460ff60a01b1916600160a01b179055611dd9612184565b6014805460ff60a01b191690555b6014546001600160a01b03861660009081526016602052604090205460ff600160a01b909204821615911680611e3557506001600160a01b03851660009081526016602052604090205460ff165b15611e3e575060005b60008115611fc9576001600160a01b03861660009081526018602052604090205460ff168015611e7057506000600f54115b15611efe57611e956064611e8f600f54886122d790919063ffffffff16565b906122ea565b9050600f5460115482611ea8919061275c565b611eb2919061277b565b60136000828254611ec39190612709565b9091555050600f54601054611ed8908361275c565b611ee2919061277b565b60126000828254611ef39190612709565b90915550611fab9050565b6001600160a01b03871660009081526018602052604090205460ff168015611f2857506000600c54115b15611fab57611f476064611e8f600c54886122d790919063ffffffff16565b9050600c54600e5482611f5a919061275c565b611f64919061277b565b60136000828254611f759190612709565b9091555050600c54600d54611f8a908361275c565b611f94919061277b565b60126000828254611fa59190612709565b90915550505b8015611fbc57611fbc87308361202f565b611fc68186612842565b94505b611fd487878761202f565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0383166120555760405162461bcd60e51b815260040161091f9061279d565b6001600160a01b03821661207b5760405162461bcd60e51b815260040161091f906127e2565b6001600160a01b038316600090815260036020526040902054818110156120f35760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161091f565b6001600160a01b0380851660009081526003602052604080822085850390559185168152908120805484929061212a908490612709565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161217691815260200190565b60405180910390a350505050565b30600090815260036020526040812054905060006013546012546121a89190612709565b905060008215806121b7575081155b156121c157505050565b600a546121cf90601461275c565b8311156121e757600a546121e490601461275c565b92505b476121f1846122f6565b60006121fd47836124b6565b9050600061221a85611e8f601354856122d790919063ffffffff16565b6000601281905560138190556008546040519293506001600160a01b031691839181818185875af1925050503d8060008114612272576040519150601f19603f3d011682016040523d82523d6000602084013e612277565b606091505b50506007546040519195506001600160a01b0316904790600081818185875af1925050503d80600081146122c7576040519150601f19603f3d011682016040523d82523d6000602084013e6122cc565b606091505b505050505050505050565b60006122e3828461275c565b9392505050565b60006122e3828461277b565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061232b5761232b612859565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123cd919061286f565b816001815181106123e0576123e0612859565b60200260200101906001600160a01b031690816001600160a01b03168152505061242b307f0000000000000000000000000000000000000000000000000000000000000000846115f3565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac9479061248090859060009086903090429060040161288c565b600060405180830381600087803b15801561249a57600080fd5b505af11580156124ae573d6000803e3d6000fd5b505050505050565b60006122e38284612842565b600080604083850312156124d557600080fd5b50508035926020909101359150565b6001600160a01b03811681146115f057600080fd5b80151581146115f057600080fd5b6000806040838503121561251a57600080fd5b8235612525816124e4565b91506020830135612535816124f9565b809150509250929050565b600060208083528351808285015260005b8181101561256d57858101830151858201604001528201612551565b8181111561257f576000604083870101525b50601f01601f1916929092016040019392505050565b600080604083850312156125a857600080fd5b82356125b3816124e4565b946020939093013593505050565b6000806000606084860312156125d657600080fd5b83356125e1816124e4565b925060208401356125f1816124e4565b929592945050506040919091013590565b60006020828403121561261457600080fd5b5035919050565b60006020828403121561262d57600080fd5b81356122e3816124e4565b60008060006060848603121561264d57600080fd5b833560ff8116811461265e57600080fd5b95602085013595506040909401359392505050565b60006020828403121561268557600080fd5b81356122e3816124f9565b600080604083850312156126a357600080fd5b82356126ae816124e4565b91506020830135612535816124e4565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000821982111561271c5761271c6126f3565b500190565b600181811c9082168061273557607f821691505b6020821081141561275657634e487b7160e01b600052602260045260246000fd5b50919050565b6000816000190483118215151615612776576127766126f3565b500290565b60008261279857634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60006020828403121561283757600080fd5b81516122e3816124f9565b600082821015612854576128546126f3565b500390565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561288157600080fd5b81516122e3816124e4565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156128dc5784516001600160a01b0316835293830193918301916001016128b7565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220afd827b182520b545b5304fc2b476358555d95322e212081b1b6c932b4b6177a64736f6c634300080a0033

Deployed Bytecode

0x6080604052600436106102b25760003560e01c8063751039fc11610175578063bae14e1d116100dc578063d257b34f11610095578063e2f456051161006f578063e2f4560514610893578063e4a1b95f146108a9578063e8792c1a146108bf578063f2fde38b146108d557600080fd5b8063d257b34f14610817578063d85ba06314610837578063dd62ed3e1461084d57600080fd5b8063bae14e1d14610761578063bbc0c74214610781578063c0246668146107a2578063c04a5414146107c2578063c816841b146107e2578063c9567bf91461080257600080fd5b80639c3b4fdc1161012e5780639c3b4fdc146106af5780639fccce32146106c5578063a0d82dc5146106db578063a457c2d7146106f1578063a72905a214610711578063a9059cbb1461074157600080fd5b8063751039fc1461061157806375f0a874146106265780638da5cb5b146106465780638f3fa86014610664578063924de9b71461067a57806395d89b411461069a57600080fd5b8063395093511161021957806368092bd9116101d257806368092bd9146105235780636a486a8e146105435780636ddd17131461055957806370a082311461057a578063715018a6146105b0578063735de9f7146105c557600080fd5b806339509351146104425780634a62bb65146104625780634fbee193146104835780636323d7cb146104b357806365ed4889146104d357806366ca9b831461050357600080fd5b806323b872dd1161026b57806323b872dd1461039057806324887e80146103b05780632ac0a943146103d05780632d99d32e146103f0578063313ce5671461041057806335b5fb631461042c57600080fd5b806302dbd8f8146102be578063061ab597146102e057806306fdde0314610300578063095ea7b31461032b57806318160ddd1461035b5780631f7ea8da1461037a57600080fd5b366102b957005b600080fd5b3480156102ca57600080fd5b506102de6102d93660046124c2565b6108f5565b005b3480156102ec57600080fd5b506102de6102fb366004612507565b610995565b34801561030c57600080fd5b506103156109ea565b6040516103229190612540565b60405180910390f35b34801561033757600080fd5b5061034b610346366004612595565b610a7c565b6040519015158152602001610322565b34801561036757600080fd5b506002545b604051908152602001610322565b34801561038657600080fd5b5061036c60125481565b34801561039c57600080fd5b5061034b6103ab3660046125c1565b610a92565b3480156103bc57600080fd5b506102de6103cb366004612602565b610b3c565b3480156103dc57600080fd5b506102de6103eb366004612602565b610c12565b3480156103fc57600080fd5b506102de61040b366004612507565b610ce1565b34801561041c57600080fd5b5060405160128152602001610322565b34801561043857600080fd5b5061036c60105481565b34801561044e57600080fd5b5061034b61045d366004612595565b610da5565b34801561046e57600080fd5b5060085461034b90600160b01b900460ff1681565b34801561048f57600080fd5b5061034b61049e36600461261b565b60166020526000908152604090205460ff1681565b3480156104bf57600080fd5b506102de6104ce366004612638565b610de1565b3480156104df57600080fd5b5061034b6104ee36600461261b565b60176020526000908152604090205460ff1681565b34801561050f57600080fd5b506102de61051e3660046124c2565b61107c565b34801561052f57600080fd5b506102de61053e366004612507565b61110f565b34801561054f57600080fd5b5061036c600f5481565b34801561056557600080fd5b5060085461034b90600160a81b900460ff1681565b34801561058657600080fd5b5061036c61059536600461261b565b6001600160a01b031660009081526003602052604090205490565b3480156105bc57600080fd5b506102de611164565b3480156105d157600080fd5b506105f97f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610322565b34801561061d57600080fd5b5061034b61119a565b34801561063257600080fd5b506007546105f9906001600160a01b031681565b34801561065257600080fd5b506005546001600160a01b03166105f9565b34801561067057600080fd5b5061036c600b5481565b34801561068657600080fd5b506102de610695366004612673565b6111da565b3480156106a657600080fd5b50610315611222565b3480156106bb57600080fd5b5061036c600e5481565b3480156106d157600080fd5b5061036c60135481565b3480156106e757600080fd5b5061036c60115481565b3480156106fd57600080fd5b5061034b61070c366004612595565b611231565b34801561071d57600080fd5b5061034b61072c36600461261b565b60186020526000908152604090205460ff1681565b34801561074d57600080fd5b5061034b61075c366004612595565b6112ca565b34801561076d57600080fd5b506102de61077c36600461261b565b6112d7565b34801561078d57600080fd5b5060085461034b90600160a01b900460ff1681565b3480156107ae57600080fd5b506102de6107bd366004612507565b611370565b3480156107ce57600080fd5b506008546105f9906001600160a01b031681565b3480156107ee57600080fd5b506006546105f9906001600160a01b031681565b34801561080e57600080fd5b506102de6113c5565b34801561082357600080fd5b5061034b610832366004612602565b611406565b34801561084357600080fd5b5061036c600c5481565b34801561085957600080fd5b5061036c610868366004612690565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561089f57600080fd5b5061036c600a5481565b3480156108b557600080fd5b5061036c600d5481565b3480156108cb57600080fd5b5061036c60095481565b3480156108e157600080fd5b506102de6108f036600461261b565b611558565b6005546001600160a01b031633146109285760405162461bcd60e51b815260040161091f906126be565b60405180910390fd5b6010829055601181905561093c8183612709565b600f819055601910156109915760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c657373000000604482015260640161091f565b5050565b6005546001600160a01b031633146109bf5760405162461bcd60e51b815260040161091f906126be565b6001600160a01b03919091166000908152601760205260409020805460ff1916911515919091179055565b6060600080546109f990612721565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2590612721565b8015610a725780601f10610a4757610100808354040283529160200191610a72565b820191906000526020600020905b815481529060010190602001808311610a5557829003601f168201915b5050505050905090565b6000610a893384846115f3565b50600192915050565b6000610a9f848484611717565b6001600160a01b038416600090815260046020908152604080832033845290915290205482811015610b245760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161091f565b610b3185338584036115f3565b506001949350505050565b6005546001600160a01b03163314610b665760405162461bcd60e51b815260040161091f906126be565b670de0b6b3a76400006103e8610b7b60025490565b610b8690600561275c565b610b90919061277b565b610b9a919061277b565b811015610bfa5760405162461bcd60e51b815260206004820152602860248201527f43616e6e6f7420736574206d617857616c6c657453697a65206c6f776572207460448201526768616e20302e352560c01b606482015260840161091f565b610c0c81670de0b6b3a764000061275c565b600b5550565b6005546001600160a01b03163314610c3c5760405162461bcd60e51b815260040161091f906126be565b670de0b6b3a76400006103e8610c5160025490565b610c5c90600161275c565b610c66919061277b565b610c70919061277b565b811015610cc95760405162461bcd60e51b815260206004820152602160248201527f43616e6e6f7420736574206d617854786e206c6f776572207468616e20302e316044820152602560f81b606482015260840161091f565b610cdb81670de0b6b3a764000061275c565b60095550565b6005546001600160a01b03163314610d0b5760405162461bcd60e51b815260040161091f906126be565b6006546001600160a01b0383811691161415610d7a5760405162461bcd60e51b815260206004820152602860248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d20604482015267616d6d506169727360c01b606482015260840161091f565b6001600160a01b03919091166000908152601860205260409020805460ff1916911515919091179055565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610a89918590610ddc908690612709565b6115f3565b604080518082018252600d81526c2a3930b234b733902a37b5b2b760991b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f918101919091527f65e27265c2bf07e8242fee81a602df3320989bd26741589720839868a275d56c918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260009060c00160408051808303601f1901815282825280516020918201208383018352600e84526d456e61626c652054726164696e6760901b9382019390935281517f7dfdbf06c6260804b81338506aa4a709bd9f04b68ca0d2d054b8627926c90ae4918101919091527f07e4ca7f0c414d237f9df43639d0673c51201469c22695492434205e0b759df39181019190915260006060820181905291925060800160405160208183030381529060405280519060200120905060008282604051602001610f8192919061190160f01b81526002810192909252602282015260420190565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa158015610fec573d6000803e3d6000fd5b50505060206040510351905061100a6005546001600160a01b031690565b6001600160a01b0316816001600160a01b03161461105e5760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b604482015260640161091f565b50506008805461ffff60a01b191661010160a01b1790555050505050565b6005546001600160a01b031633146110a65760405162461bcd60e51b815260040161091f906126be565b600d829055600e8190556110ba8183612709565b600c819055601910156109915760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c657373000000604482015260640161091f565b6005546001600160a01b031633146111395760405162461bcd60e51b815260040161091f906126be565b6001600160a01b03919091166000908152601560205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461118e5760405162461bcd60e51b815260040161091f906126be565b6111986000611fdd565b565b6005546000906001600160a01b031633146111c75760405162461bcd60e51b815260040161091f906126be565b506008805460ff60b01b19169055600190565b6005546001600160a01b031633146112045760405162461bcd60e51b815260040161091f906126be565b60088054911515600160a81b0260ff60a81b19909216919091179055565b6060600180546109f990612721565b3360009081526004602090815260408083206001600160a01b0386168452909152812054828110156112b35760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161091f565b6112c033858584036115f3565b5060019392505050565b6000610a89338484611717565b6005546001600160a01b031633146113015760405162461bcd60e51b815260040161091f906126be565b6001600160a01b03811661134e5760405162461bcd60e51b815260206004820152601460248201527324b73b30b634b21030b73a3496b23930b4b732b960611b604482015260640161091f565b601480546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461139a5760405162461bcd60e51b815260040161091f906126be565b6001600160a01b03919091166000908152601660205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146113ef5760405162461bcd60e51b815260040161091f906126be565b6008805461ffff60a01b191661010160a01b179055565b6005546000906001600160a01b031633146114335760405162461bcd60e51b815260040161091f906126be565b620186a061144060025490565b61144b90600161275c565b611455919061277b565b8210156114c25760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b606482015260840161091f565b6103e86114ce60025490565b6114d990600561275c565b6114e3919061277b565b82111561154f5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b606482015260840161091f565b50600a55600190565b6005546001600160a01b031633146115825760405162461bcd60e51b815260040161091f906126be565b6001600160a01b0381166115e75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161091f565b6115f081611fdd565b50565b6001600160a01b0383166116555760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161091f565b6001600160a01b0382166116b65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161091f565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661173d5760405162461bcd60e51b815260040161091f9061279d565b6001600160a01b0382166117635760405162461bcd60e51b815260040161091f906127e2565b6001600160a01b03831660009081526015602052604090205460ff16156117c05760405162461bcd60e51b815260206004820152601160248201527016d99c9bdb5748189b1858dac81b1a5cdd607a1b604482015260640161091f565b6001600160a01b03821660009081526015602052604090205460ff161561181b5760405162461bcd60e51b815260206004820152600f60248201526e16dd1bd748189b1858dac81b1a5cdd608a1b604482015260640161091f565b806118315761182c8383600061202f565b505050565b600854600160b01b900460ff1615611b94576005546001600160a01b0384811691161480159061186f57506005546001600160a01b03838116911614155b801561188357506001600160a01b03821615155b801561189a57506001600160a01b03821661dead14155b80156118b05750601454600160a01b900460ff16155b15611b9457600854600160a01b900460ff1661194a576001600160a01b03831660009081526016602052604090205460ff168061190557506001600160a01b03821660009081526016602052604090205460ff165b61194a5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b604482015260640161091f565b6001600160a01b03831660009081526018602052604090205460ff16801561198b57506001600160a01b03821660009081526017602052604090205460ff16155b15611a61576009548111156119f25760405162461bcd60e51b815260206004820152602760248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526636b0bc2a3c371760c91b606482015260840161091f565b600b546001600160a01b038316600090815260036020526040902054611a189083612709565b1115611a5c5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b604482015260640161091f565b611b94565b6001600160a01b03821660009081526018602052604090205460ff168015611aa257506001600160a01b03831660009081526017602052604090205460ff16155b15611b0a57600954811115611a5c5760405162461bcd60e51b815260206004820152602860248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152671036b0bc2a3c371760c11b606482015260840161091f565b6001600160a01b03821660009081526017602052604090205460ff16611b9457600b546001600160a01b038316600090815260036020526040902054611b509083612709565b1115611b945760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b604482015260640161091f565b6014546001600160a01b031615801590611c155750601454604051639015d37160e01b81523060048201526001600160a01b0390911690639015d37190602401602060405180830381865afa158015611bf1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c159190612825565b15611d0757601454600654600b54600954600a5460405163288149ff60e21b81526001600160a01b038981166004830152888116602483015294851660448201526064810193909352608483019190915260a4820152600092919091169063a20527fc9060c4016020604051808303816000875af1158015611c9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cbf9190612825565b905080611d055760405162461bcd60e51b8152602060048201526014602482015273105b9d1a48111c985a5b995c88115b98589b195960621b604482015260640161091f565b505b30600090815260036020526040902054600a5481108015908190611d345750600854600160a81b900460ff165b8015611d4a5750601454600160a01b900460ff16155b8015611d6f57506001600160a01b03851660009081526018602052604090205460ff16155b8015611d9457506001600160a01b03851660009081526016602052604090205460ff16155b8015611db957506001600160a01b03841660009081526016602052604090205460ff16155b15611de7576014805460ff60a01b1916600160a01b179055611dd9612184565b6014805460ff60a01b191690555b6014546001600160a01b03861660009081526016602052604090205460ff600160a01b909204821615911680611e3557506001600160a01b03851660009081526016602052604090205460ff165b15611e3e575060005b60008115611fc9576001600160a01b03861660009081526018602052604090205460ff168015611e7057506000600f54115b15611efe57611e956064611e8f600f54886122d790919063ffffffff16565b906122ea565b9050600f5460115482611ea8919061275c565b611eb2919061277b565b60136000828254611ec39190612709565b9091555050600f54601054611ed8908361275c565b611ee2919061277b565b60126000828254611ef39190612709565b90915550611fab9050565b6001600160a01b03871660009081526018602052604090205460ff168015611f2857506000600c54115b15611fab57611f476064611e8f600c54886122d790919063ffffffff16565b9050600c54600e5482611f5a919061275c565b611f64919061277b565b60136000828254611f759190612709565b9091555050600c54600d54611f8a908361275c565b611f94919061277b565b60126000828254611fa59190612709565b90915550505b8015611fbc57611fbc87308361202f565b611fc68186612842565b94505b611fd487878761202f565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0383166120555760405162461bcd60e51b815260040161091f9061279d565b6001600160a01b03821661207b5760405162461bcd60e51b815260040161091f906127e2565b6001600160a01b038316600090815260036020526040902054818110156120f35760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161091f565b6001600160a01b0380851660009081526003602052604080822085850390559185168152908120805484929061212a908490612709565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161217691815260200190565b60405180910390a350505050565b30600090815260036020526040812054905060006013546012546121a89190612709565b905060008215806121b7575081155b156121c157505050565b600a546121cf90601461275c565b8311156121e757600a546121e490601461275c565b92505b476121f1846122f6565b60006121fd47836124b6565b9050600061221a85611e8f601354856122d790919063ffffffff16565b6000601281905560138190556008546040519293506001600160a01b031691839181818185875af1925050503d8060008114612272576040519150601f19603f3d011682016040523d82523d6000602084013e612277565b606091505b50506007546040519195506001600160a01b0316904790600081818185875af1925050503d80600081146122c7576040519150601f19603f3d011682016040523d82523d6000602084013e6122cc565b606091505b505050505050505050565b60006122e3828461275c565b9392505050565b60006122e3828461277b565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061232b5761232b612859565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123cd919061286f565b816001815181106123e0576123e0612859565b60200260200101906001600160a01b031690816001600160a01b03168152505061242b307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846115f3565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac9479061248090859060009086903090429060040161288c565b600060405180830381600087803b15801561249a57600080fd5b505af11580156124ae573d6000803e3d6000fd5b505050505050565b60006122e38284612842565b600080604083850312156124d557600080fd5b50508035926020909101359150565b6001600160a01b03811681146115f057600080fd5b80151581146115f057600080fd5b6000806040838503121561251a57600080fd5b8235612525816124e4565b91506020830135612535816124f9565b809150509250929050565b600060208083528351808285015260005b8181101561256d57858101830151858201604001528201612551565b8181111561257f576000604083870101525b50601f01601f1916929092016040019392505050565b600080604083850312156125a857600080fd5b82356125b3816124e4565b946020939093013593505050565b6000806000606084860312156125d657600080fd5b83356125e1816124e4565b925060208401356125f1816124e4565b929592945050506040919091013590565b60006020828403121561261457600080fd5b5035919050565b60006020828403121561262d57600080fd5b81356122e3816124e4565b60008060006060848603121561264d57600080fd5b833560ff8116811461265e57600080fd5b95602085013595506040909401359392505050565b60006020828403121561268557600080fd5b81356122e3816124f9565b600080604083850312156126a357600080fd5b82356126ae816124e4565b91506020830135612535816124e4565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000821982111561271c5761271c6126f3565b500190565b600181811c9082168061273557607f821691505b6020821081141561275657634e487b7160e01b600052602260045260246000fd5b50919050565b6000816000190483118215151615612776576127766126f3565b500290565b60008261279857634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60006020828403121561283757600080fd5b81516122e3816124f9565b600082821015612854576128546126f3565b500390565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561288157600080fd5b81516122e3816124e4565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156128dc5784516001600160a01b0316835293830193918301916001016128b7565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220afd827b182520b545b5304fc2b476358555d95322e212081b1b6c932b4b6177a64736f6c634300080a0033

Deployed Bytecode Sourcemap

15350:10984:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20724:289;;;;;;;;;;-1:-1:-1;20724:289:0;;;;;:::i;:::-;;:::i;:::-;;19090:120;;;;;;;;;;-1:-1:-1;19090:120:0;;;;;:::i;:::-;;:::i;10695:100::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11426:169;;;;;;;;;;-1:-1:-1;11426:169:0;;;;;:::i;:::-;;:::i;:::-;;;2000:14:1;;1993:22;1975:41;;1963:2;1948:18;11426:169:0;1835:187:1;11016:108:0;;;;;;;;;;-1:-1:-1;11104:12:0;;11016:108;;;2173:25:1;;;2161:2;2146:18;11016:108:0;2027:177:1;16025:30:0;;;;;;;;;;;;;;;;11786:492;;;;;;;;;;-1:-1:-1;11786:492:0;;;;;:::i;:::-;;:::i;19590:225::-;;;;;;;;;;-1:-1:-1;19590:225:0;;;;;:::i;:::-;;:::i;20222:204::-;;;;;;;;;;-1:-1:-1;20222:204:0;;;;;:::i;:::-;;:::i;21221:189::-;;;;;;;;;;-1:-1:-1;21221:189:0;;;;;:::i;:::-;;:::i;10915:93::-;;;;;;;;;;-1:-1:-1;10915:93:0;;10998:2;2997:36:1;;2985:2;2970:18;10915:93:0;2855:184:1;15956:28:0;;;;;;;;;;;;;;;;12286:215;;;;;;;;;;-1:-1:-1;12286:215:0;;;;;:::i;:::-;;:::i;15673:33::-;;;;;;;;;;-1:-1:-1;15673:33:0;;;;-1:-1:-1;;;15673:33:0;;;;;;16213:50;;;;;;;;;;-1:-1:-1;16213:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;18022:1060;;;;;;;;;;-1:-1:-1;18022:1060:0;;;;;:::i;:::-;;:::i;16270:47::-;;;;;;;;;;-1:-1:-1;16270:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;20434:282;;;;;;;;;;-1:-1:-1;20434:282:0;;;;;:::i;:::-;;:::i;21418:113::-;;;;;;;;;;-1:-1:-1;21418:113:0;;;;;:::i;:::-;;:::i;15921:28::-;;;;;;;;;;;;;;;;15635:31;;;;;;;;;;-1:-1:-1;15635:31:0;;;;-1:-1:-1;;;15635:31:0;;;;;;11132:127;;;;;;;;;;-1:-1:-1;11132:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;11233:18:0;11206:7;11233:18;;;:9;:18;;;;;;;11132:127;913:103;;;;;;;;;;;;;:::i;15426:49::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3896:32:1;;;3878:51;;3866:2;3851:18;15426:49:0;3706:229:1;19353:121:0;;;;;;;;;;;;;:::i;15517:30::-;;;;;;;;;;-1:-1:-1;15517:30:0;;;;-1:-1:-1;;;;;15517:30:0;;;690:87;;;;;;;;;;-1:-1:-1;763:6:0;;-1:-1:-1;;;;;763:6:0;690:87;;15783:28;;;;;;;;;;;;;;;;19482:100;;;;;;;;;;-1:-1:-1;19482:100:0;;;;;:::i;:::-;;:::i;10803:104::-;;;;;;;;;;;;;:::i;15888:24::-;;;;;;;;;;;;;;;;16062:27;;;;;;;;;;;;;;;;15991:25;;;;;;;;;;;;;;;;12509:413;;;;;;;;;;-1:-1:-1;12509:413:0;;;;;:::i;:::-;;:::i;16326:40::-;;;;;;;;;;-1:-1:-1;16326:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;11603:175;;;;;;;;;;-1:-1:-1;11603:175:0;;;;;:::i;:::-;;:::i;21025:188::-;;;;;;;;;;-1:-1:-1;21025:188:0;;;;;:::i;:::-;;:::i;15595:33::-;;;;;;;;;;-1:-1:-1;15595:33:0;;;;-1:-1:-1;;;15595:33:0;;;;;;19218:127;;;;;;;;;;-1:-1:-1;19218:127:0;;;;;:::i;:::-;;:::i;15554:32::-;;;;;;;;;;-1:-1:-1;15554:32:0;;;;-1:-1:-1;;;;;15554:32:0;;;15482:26;;;;;;;;;;-1:-1:-1;15482:26:0;;;;-1:-1:-1;;;;;15482:26:0;;;17904:110;;;;;;;;;;;;;:::i;19823:391::-;;;;;;;;;;-1:-1:-1;19823:391:0;;;;;:::i;:::-;;:::i;15820:27::-;;;;;;;;;;;;;;;;11267:151;;;;;;;;;;-1:-1:-1;11267:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;11383:18:0;;;11356:7;11383:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;11267:151;15743:33;;;;;;;;;;;;;;;;15854:27;;;;;;;;;;;;;;;;15715:21;;;;;;;;;;;;;;;;1024:201;;;;;;;;;;-1:-1:-1;1024:201:0;;;;;:::i;:::-;;:::i;20724:289::-;763:6;;-1:-1:-1;;;;;763:6:0;316:10;825:23;817:68;;;;-1:-1:-1;;;817:68:0;;;;;;;:::i;:::-;;;;;;;;;20819:13:::1;:28:::0;;;20858:10:::1;:22:::0;;;20907:26:::1;20871:9:::0;20835:12;20907:26:::1;:::i;:::-;20891:13;:42:::0;;;20969:2:::1;-1:-1:-1::0;20952:19:0::1;20944:61;;;::::0;-1:-1:-1;;;20944:61:0;;5615:2:1;20944:61:0::1;::::0;::::1;5597:21:1::0;5654:2;5634:18;;;5627:30;5693:31;5673:18;;;5666:59;5742:18;;20944:61:0::1;5413:353:1::0;20944:61:0::1;20724:289:::0;;:::o;19090:120::-;763:6;;-1:-1:-1;;;;;763:6:0;316:10;825:23;817:68;;;;-1:-1:-1;;;817:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19173:21:0;;;::::1;;::::0;;;:15:::1;:21;::::0;;;;:29;;-1:-1:-1;;19173:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19090:120::o;10695:100::-;10749:13;10782:5;10775:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10695:100;:::o;11426:169::-;11509:4;11526:39;316:10;11549:7;11558:6;11526:8;:39::i;:::-;-1:-1:-1;11583:4:0;11426:169;;;;:::o;11786:492::-;11926:4;11943:36;11953:6;11961:9;11972:6;11943:9;:36::i;:::-;-1:-1:-1;;;;;12019:19:0;;11992:24;12019:19;;;:11;:19;;;;;;;;316:10;12019:33;;;;;;;;12071:26;;;;12063:79;;;;-1:-1:-1;;;12063:79:0;;6358:2:1;12063:79:0;;;6340:21:1;6397:2;6377:18;;;6370:30;6436:34;6416:18;;;6409:62;-1:-1:-1;;;6487:18:1;;;6480:38;6535:19;;12063:79:0;6156:404:1;12063:79:0;12178:57;12187:6;316:10;12228:6;12209:16;:25;12178:8;:57::i;:::-;-1:-1:-1;12266:4:0;;11786:492;-1:-1:-1;;;;11786:492:0:o;19590:225::-;763:6;;-1:-1:-1;;;;;763:6:0;316:10;825:23;817:68;;;;-1:-1:-1;;;817:68:0;;;;;;;:::i;:::-;19714:4:::1;19706;19685:13;11104:12:::0;;;11016:108;19685:13:::1;:17;::::0;19701:1:::1;19685:17;:::i;:::-;19684:26;;;;:::i;:::-;19683:35;;;;:::i;:::-;19673:6;:45;;19665:98;;;::::0;-1:-1:-1;;;19665:98:0;;7162:2:1;19665:98:0::1;::::0;::::1;7144:21:1::0;7201:2;7181:18;;;7174:30;7240:34;7220:18;;;7213:62;-1:-1:-1;;;7291:18:1;;;7284:38;7339:19;;19665:98:0::1;6960:404:1::0;19665:98:0::1;19790:17;:6:::0;19800::::1;19790:17;:::i;:::-;19774:13;:33:::0;-1:-1:-1;19590:225:0:o;20222:204::-;763:6;;-1:-1:-1;;;;;763:6:0;316:10;825:23;817:68;;;;-1:-1:-1;;;817:68:0;;;;;;;:::i;:::-;20339:4:::1;20331;20310:13;11104:12:::0;;;11016:108;20310:13:::1;:17;::::0;20326:1:::1;20310:17;:::i;:::-;20309:26;;;;:::i;:::-;20308:35;;;;:::i;:::-;20298:6;:45;;20290:91;;;::::0;-1:-1:-1;;;20290:91:0;;7571:2:1;20290:91:0::1;::::0;::::1;7553:21:1::0;7610:2;7590:18;;;7583:30;7649:34;7629:18;;;7622:62;-1:-1:-1;;;7700:18:1;;;7693:31;7741:19;;20290:91:0::1;7369:397:1::0;20290:91:0::1;20401:17;:6:::0;20411::::1;20401:17;:::i;:::-;20392:6;:26:::0;-1:-1:-1;20222:204:0:o;21221:189::-;763:6;;-1:-1:-1;;;;;763:6:0;316:10;825:23;817:68;;;;-1:-1:-1;;;817:68:0;;;;;;;:::i;:::-;21313:11:::1;::::0;-1:-1:-1;;;;;21305:19:0;;::::1;21313:11:::0;::::1;21305:19;;21297:72;;;::::0;-1:-1:-1;;;21297:72:0;;7973:2:1;21297:72:0::1;::::0;::::1;7955:21:1::0;8012:2;7992:18;;;7985:30;8051:34;8031:18;;;8024:62;-1:-1:-1;;;8102:18:1;;;8095:38;8150:19;;21297:72:0::1;7771:404:1::0;21297:72:0::1;-1:-1:-1::0;;;;;21380:14:0;;;::::1;;::::0;;;:8:::1;:14;::::0;;;;:22;;-1:-1:-1;;21380:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21221:189::o;12286:215::-;316:10;12374:4;12423:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;12423:34:0;;;;;;;;;;12374:4;;12391:80;;12414:7;;12423:47;;12460:10;;12423:47;:::i;:::-;12391:8;:80::i;18022:1060::-;18302:22;;;;;;;;;;;-1:-1:-1;;;18302:22:0;;;;;18354:10;;;;;;;;;;-1:-1:-1;;;18354:10:0;;;;18149:295;;18178:95;18149:295;;;8439:25:1;;;;18292:33:0;8480:18:1;;;8473:34;;;;18344:21:0;8523:18:1;;;8516:34;18384:13:0;8566:18:1;;;8559:34;18424:4:0;8609:19:1;;;8602:61;-1:-1:-1;;8411:19:1;;18149:295:0;;;;;;-1:-1:-1;;18149:295:0;;;;;;18125:330;;18149:295;18125:330;;;;18620:23;;;;;;;;-1:-1:-1;;;18620:23:0;;;;;;;18513:175;;18542:49;18513:175;;;8876:25:1;;;;18610:34:0;8917:18:1;;;8910:34;;;;-1:-1:-1;8960:18:1;;;8953:34;;;18125:330:0;;-1:-1:-1;8849:18:1;;18513:175:0;;;;;;;;;;;;18489:210;;;;;;18468:231;;18712:14;18817:10;18846;18753:134;;;;;;;;-1:-1:-1;;;9256:27:1;;9308:1;9299:11;;9292:27;;;;9344:2;9335:12;;9328:28;9381:2;9372:12;;8998:392;18753:134:0;;;;-1:-1:-1;;18753:134:0;;;;;;;;;18729:169;;18753:134;18729:169;;;;18911:14;18928:26;;;;;;;;;9622:25:1;;;9695:4;9683:17;;9663:18;;;9656:45;;;;9717:18;;;9710:34;;;9760:18;;;9753:34;;;18729:169:0;;-1:-1:-1;18911:14:0;18928:26;;9594:19:1;;18928:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18911:43;;18983:7;763:6;;-1:-1:-1;;;;;763:6:0;;690:87;18983:7;-1:-1:-1;;;;;18973:17:0;:6;-1:-1:-1;;;;;18973:17:0;;18965:47;;;;-1:-1:-1;;;18965:47:0;;10000:2:1;18965:47:0;;;9982:21:1;10039:2;10019:18;;;10012:30;-1:-1:-1;;;10058:18:1;;;10051:47;10115:18;;18965:47:0;9798:341:1;18965:47:0;-1:-1:-1;;19025:13:0;:20;;-1:-1:-1;;;;19056:18:0;-1:-1:-1;;;19056:18:0;;;-1:-1:-1;;;;;18022:1060:0:o;20434:282::-;763:6;;-1:-1:-1;;;;;763:6:0;316:10;825:23;817:68;;;;-1:-1:-1;;;817:68:0;;;;;;;:::i;:::-;20528:12:::1;:27:::0;;;20566:9:::1;:21:::0;;;20613:24:::1;20578:9:::0;20543:12;20613:24:::1;:::i;:::-;20598:12;:39:::0;;;20672:2:::1;-1:-1:-1::0;20656:18:0::1;20648:60;;;::::0;-1:-1:-1;;;20648:60:0;;5615:2:1;20648:60:0::1;::::0;::::1;5597:21:1::0;5654:2;5634:18;;;5627:30;5693:31;5673:18;;;5666:59;5742:18;;20648:60:0::1;5413:353:1::0;21418:113:0;763:6;;-1:-1:-1;;;;;763:6:0;316:10;825:23;817:68;;;;-1:-1:-1;;;817:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21497:17:0;;;::::1;;::::0;;;:11:::1;:17;::::0;;;;:26;;-1:-1:-1;;21497:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21418:113::o;913:103::-;763:6;;-1:-1:-1;;;;;763:6:0;316:10;825:23;817:68;;;;-1:-1:-1;;;817:68:0;;;;;;;:::i;:::-;978:30:::1;1005:1;978:18;:30::i;:::-;913:103::o:0;19353:121::-;763:6;;19405:4;;-1:-1:-1;;;;;763:6:0;316:10;825:23;817:68;;;;-1:-1:-1;;;817:68:0;;;;;;;:::i;:::-;-1:-1:-1;19422:14:0::1;:22:::0;;-1:-1:-1;;;;19422:22:0::1;::::0;;;19353:121;:::o;19482:100::-;763:6;;-1:-1:-1;;;;;763:6:0;316:10;825:23;817:68;;;;-1:-1:-1;;;817:68:0;;;;;;;:::i;:::-;19553:11:::1;:21:::0;;;::::1;;-1:-1:-1::0;;;19553:21:0::1;-1:-1:-1::0;;;;19553:21:0;;::::1;::::0;;;::::1;::::0;;19482:100::o;10803:104::-;10859:13;10892:7;10885:14;;;;;:::i;12509:413::-;316:10;12602:4;12646:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;12646:34:0;;;;;;;;;;12699:35;;;;12691:85;;;;-1:-1:-1;;;12691:85:0;;10346:2:1;12691:85:0;;;10328:21:1;10385:2;10365:18;;;10358:30;10424:34;10404:18;;;10397:62;-1:-1:-1;;;10475:18:1;;;10468:35;10520:19;;12691:85:0;10144:401:1;12691:85:0;12812:67;316:10;12835:7;12863:15;12844:16;:34;12812:8;:67::i;:::-;-1:-1:-1;12910:4:0;;12509:413;-1:-1:-1;;;12509:413:0:o;11603:175::-;11689:4;11706:42;316:10;11730:9;11741:6;11706:9;:42::i;21025:188::-;763:6;;-1:-1:-1;;;;;763:6:0;316:10;825:23;817:68;;;;-1:-1:-1;;;817:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21111:30:0;::::1;21103:63;;;::::0;-1:-1:-1;;;21103:63:0;;10752:2:1;21103:63:0::1;::::0;::::1;10734:21:1::0;10791:2;10771:18;;;10764:30;-1:-1:-1;;;10810:18:1;;;10803:50;10870:18;;21103:63:0::1;10550:344:1::0;21103:63:0::1;21177:11;:28:::0;;-1:-1:-1;;;;;;21177:28:0::1;-1:-1:-1::0;;;;;21177:28:0;;;::::1;::::0;;;::::1;::::0;;21025:188::o;19218:127::-;763:6;;-1:-1:-1;;;;;763:6:0;316:10;825:23;817:68;;;;-1:-1:-1;;;817:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19302:27:0;;;::::1;;::::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;19302:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19218:127::o;17904:110::-;763:6;;-1:-1:-1;;;;;763:6:0;316:10;825:23;817:68;;;;-1:-1:-1;;;817:68:0;;;;;;;:::i;:::-;17957:13:::1;:20:::0;;-1:-1:-1;;;;17988:18:0;-1:-1:-1;;;17988:18:0;;;17904:110::o;19823:391::-;763:6;;19904:4;;-1:-1:-1;;;;;763:6:0;316:10;825:23;817:68;;;;-1:-1:-1;;;817:68:0;;;;;;;:::i;:::-;19964:6:::1;19943:13;11104:12:::0;;;11016:108;19943:13:::1;:17;::::0;19959:1:::1;19943:17;:::i;:::-;19942:28;;;;:::i;:::-;19929:9;:41;;19921:107;;;::::0;-1:-1:-1;;;19921:107:0;;11101:2:1;19921:107:0::1;::::0;::::1;11083:21:1::0;11140:2;11120:18;;;11113:30;11179:34;11159:18;;;11152:62;-1:-1:-1;;;11230:18:1;;;11223:51;11291:19;;19921:107:0::1;10899:417:1::0;19921:107:0::1;20082:4;20061:13;11104:12:::0;;;11016:108;20061:13:::1;:17;::::0;20077:1:::1;20061:17;:::i;:::-;20060:26;;;;:::i;:::-;20047:9;:39;;20039:104;;;::::0;-1:-1:-1;;;20039:104:0;;11523:2:1;20039:104:0::1;::::0;::::1;11505:21:1::0;11562:2;11542:18;;;11535:30;11601:34;11581:18;;;11574:62;-1:-1:-1;;;11652:18:1;;;11645:50;11712:19;;20039:104:0::1;11321:416:1::0;20039:104:0::1;-1:-1:-1::0;20154:18:0::1;:30:::0;20202:4:::1;::::0;19823:391::o;1024:201::-;763:6;;-1:-1:-1;;;;;763:6:0;316:10;825:23;817:68;;;;-1:-1:-1;;;817:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1113:22:0;::::1;1105:73;;;::::0;-1:-1:-1;;;1105:73:0;;11944:2:1;1105:73:0::1;::::0;::::1;11926:21:1::0;11983:2;11963:18;;;11956:30;12022:34;12002:18;;;11995:62;-1:-1:-1;;;12073:18:1;;;12066:36;12119:19;;1105:73:0::1;11742:402:1::0;1105:73:0::1;1189:28;1208:8;1189:18;:28::i;:::-;1024:201:::0;:::o;13936:380::-;-1:-1:-1;;;;;14072:19:0;;14064:68;;;;-1:-1:-1;;;14064:68:0;;12351:2:1;14064:68:0;;;12333:21:1;12390:2;12370:18;;;12363:30;12429:34;12409:18;;;12402:62;-1:-1:-1;;;12480:18:1;;;12473:34;12524:19;;14064:68:0;12149:400:1;14064:68:0;-1:-1:-1;;;;;14151:21:0;;14143:68;;;;-1:-1:-1;;;14143:68:0;;12756:2:1;14143:68:0;;;12738:21:1;12795:2;12775:18;;;12768:30;12834:34;12814:18;;;12807:62;-1:-1:-1;;;12885:18:1;;;12878:32;12927:19;;14143:68:0;12554:398:1;14143:68:0;-1:-1:-1;;;;;14224:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;14276:32;;2173:25:1;;;14276:32:0;;2146:18:1;14276:32:0;;;;;;;13936:380;;;:::o;23020:3196::-;-1:-1:-1;;;;;23118:18:0;;23110:68;;;;-1:-1:-1;;;23110:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23197:16:0;;23189:64;;;;-1:-1:-1;;;23189:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23273:17:0;;;;;;:11;:17;;;;;;;;23272:18;23264:48;;;;-1:-1:-1;;;23264:48:0;;13969:2:1;23264:48:0;;;13951:21:1;14008:2;13988:18;;;13981:30;-1:-1:-1;;;14027:18:1;;;14020:47;14084:18;;23264:48:0;13767:341:1;23264:48:0;-1:-1:-1;;;;;23332:15:0;;;;;;:11;:15;;;;;;;;23331:16;23323:44;;;;-1:-1:-1;;;23323:44:0;;14315:2:1;23323:44:0;;;14297:21:1;14354:2;14334:18;;;14327:30;-1:-1:-1;;;14373:18:1;;;14366:45;14428:18;;23323:44:0;14113:339:1;23323:44:0;23384:11;23380:93;;23412:28;23428:4;23434:2;23438:1;23412:15;:28::i;:::-;23020:3196;;;:::o;23380:93::-;23489:14;;-1:-1:-1;;;23489:14:0;;;;23485:1060;;;763:6;;-1:-1:-1;;;;;23524:15:0;;;763:6;;23524:15;;;;:49;;-1:-1:-1;763:6:0;;-1:-1:-1;;;;;23560:13:0;;;763:6;;23560:13;;23524:49;:86;;;;-1:-1:-1;;;;;;23594:16:0;;;;23524:86;:128;;;;-1:-1:-1;;;;;;23631:21:0;;23645:6;23631:21;;23524:128;:158;;;;-1:-1:-1;23674:8:0;;-1:-1:-1;;;23674:8:0;;;;23673:9;23524:158;23520:1014;;;23708:13;;-1:-1:-1;;;23708:13:0;;;;23703:148;;-1:-1:-1;;;;;23754:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;23782:22:0;;;;;;:18;:22;;;;;;;;23754:50;23746:85;;;;-1:-1:-1;;;23746:85:0;;14659:2:1;23746:85:0;;;14641:21:1;14698:2;14678:18;;;14671:30;-1:-1:-1;;;14717:18:1;;;14710:52;14779:18;;23746:85:0;14457:346:1;23746:85:0;-1:-1:-1;;;;;23903:14:0;;;;;;:8;:14;;;;;;;;:38;;;;-1:-1:-1;;;;;;23922:19:0;;;;;;:15;:19;;;;;;;;23921:20;23903:38;23899:620;;;23984:6;;23974;:16;;23966:68;;;;-1:-1:-1;;;23966:68:0;;15010:2:1;23966:68:0;;;14992:21:1;15049:2;15029:18;;;15022:30;15088:34;15068:18;;;15061:62;-1:-1:-1;;;15139:18:1;;;15132:37;15186:19;;23966:68:0;14808:403:1;23966:68:0;24091:13;;-1:-1:-1;;;;;11233:18:0;;11206:7;11233:18;;;:9;:18;;;;;;24065:22;;:6;:22;:::i;:::-;:39;;24057:71;;;;-1:-1:-1;;;24057:71:0;;15418:2:1;24057:71:0;;;15400:21:1;15457:2;15437:18;;;15430:30;-1:-1:-1;;;15476:18:1;;;15469:49;15535:18;;24057:71:0;15216:343:1;24057:71:0;23899:620;;;-1:-1:-1;;;;;24204:12:0;;;;;;:8;:12;;;;;;;;:38;;;;-1:-1:-1;;;;;;24221:21:0;;;;;;:15;:21;;;;;;;;24220:22;24204:38;24200:319;;;24285:6;;24275;:16;;24267:69;;;;-1:-1:-1;;;24267:69:0;;15766:2:1;24267:69:0;;;15748:21:1;15805:2;15785:18;;;15778:30;15844:34;15824:18;;;15817:62;-1:-1:-1;;;15895:18:1;;;15888:38;15943:19;;24267:69:0;15564:404:1;24200:319:0;-1:-1:-1;;;;;24384:19:0;;;;;;:15;:19;;;;;;;;24379:140;;24462:13;;-1:-1:-1;;;;;11233:18:0;;11206:7;11233:18;;;:9;:18;;;;;;24436:22;;:6;:22;:::i;:::-;:39;;24428:71;;;;-1:-1:-1;;;24428:71:0;;15418:2:1;24428:71:0;;;15400:21:1;15457:2;15437:18;;;15430:30;-1:-1:-1;;;15476:18:1;;;15469:49;15535:18;;24428:71:0;15216:343:1;24428:71:0;24561:11;;-1:-1:-1;;;;;24561:11:0;:25;;;;:79;;-1:-1:-1;24603:11:0;;24590:50;;-1:-1:-1;;;24590:50:0;;24634:4;24590:50;;;3878:51:1;-1:-1:-1;;;;;24603:11:0;;;;24590:35;;3851:18:1;;24590:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24557:284;;;24683:11;;24720;;24734:13;;24749:6;;24757:18;;24670:106;;-1:-1:-1;;;24670:106:0;;-1:-1:-1;;;;;16566:15:1;;;24670:106:0;;;16548:34:1;16618:15;;;16598:18;;;16591:43;24720:11:0;;;16650:18:1;;;16643:43;16702:18;;;16695:34;;;;16745:19;;;16738:35;;;;16789:19;;;16782:35;24657:10:0;;24683:11;;;;;24670:31;;16482:19:1;;24670:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24657:119;;24799:5;24791:38;;;;-1:-1:-1;;;24791:38:0;;17030:2:1;24791:38:0;;;17012:21:1;17069:2;17049:18;;;17042:30;-1:-1:-1;;;17088:18:1;;;17081:50;17148:18;;24791:38:0;16828:344:1;24791:38:0;24642:199;24557:284;24897:4;24853:23;11233:18;;;:9;:18;;;;;;24948;;24929:37;;;;;;;24981:35;;-1:-1:-1;25005:11:0;;-1:-1:-1;;;25005:11:0;;;;24981:35;:61;;;;-1:-1:-1;25034:8:0;;-1:-1:-1;;;25034:8:0;;;;25033:9;24981:61;:93;;;;-1:-1:-1;;;;;;25060:14:0;;;;;;:8;:14;;;;;;;;25059:15;24981:93;:135;;;;-1:-1:-1;;;;;;25092:24:0;;;;;;:18;:24;;;;;;;;25091:25;24981:135;:175;;;;-1:-1:-1;;;;;;25134:22:0;;;;;;:18;:22;;;;;;;;25133:23;24981:175;24977:281;;;25175:8;:15;;-1:-1:-1;;;;25175:15:0;-1:-1:-1;;;25175:15:0;;;25205:10;:8;:10::i;:::-;25230:8;:16;;-1:-1:-1;;;;25230:16:0;;;24977:281;25286:8;;-1:-1:-1;;;;;25309:24:0;;25270:12;25309:24;;;:18;:24;;;;;;25286:8;-1:-1:-1;;;25286:8:0;;;;;25285:9;;25309:24;;:50;;-1:-1:-1;;;;;;25337:22:0;;;;;;:18;:22;;;;;;;;25309:50;25305:84;;;-1:-1:-1;25384:5:0;25305:84;25402:11;25432:7;25428:735;;;-1:-1:-1;;;;;25484:12:0;;;;;;:8;:12;;;;;;;;:33;;;;;25516:1;25500:13;;:17;25484:33;25480:554;;;25544:34;25574:3;25544:25;25555:13;;25544:6;:10;;:25;;;;:::i;:::-;:29;;:34::i;:::-;25538:40;;25634:13;;25620:10;;25614:3;:16;;;;:::i;:::-;25613:34;;;;:::i;:::-;25597:12;;:50;;;;;;;:::i;:::-;;;;-1:-1:-1;;25709:13:0;;25692;;25686:19;;:3;:19;:::i;:::-;25685:37;;;;:::i;:::-;25666:15;;:56;;;;;;;:::i;:::-;;;;-1:-1:-1;25480:554:0;;-1:-1:-1;25480:554:0;;-1:-1:-1;;;;;25784:14:0;;;;;;:8;:14;;;;;;;;:34;;;;;25817:1;25802:12;;:16;25784:34;25780:254;;;25845:33;25874:3;25845:24;25856:12;;25845:6;:10;;:24;;;;:::i;:33::-;25839:39;;25933:12;;25920:9;;25914:3;:15;;;;:::i;:::-;25913:32;;;;:::i;:::-;25897:12;;:48;;;;;;;:::i;:::-;;;;-1:-1:-1;;26006:12:0;;25990;;25984:18;;:3;:18;:::i;:::-;25983:35;;;;:::i;:::-;25964:15;;:54;;;;;;;:::i;:::-;;;;-1:-1:-1;;25780:254:0;26054:7;;26050:71;;26080:41;26096:4;26110;26117:3;26080:15;:41::i;:::-;26138:13;26148:3;26138:13;;:::i;:::-;;;25428:735;26175:33;26191:4;26197:2;26201:6;26175:15;:33::i;:::-;23099:3117;;;;23020:3196;;;:::o;1233:191::-;1326:6;;;-1:-1:-1;;;;;1343:17:0;;;-1:-1:-1;;;;;;1343:17:0;;;;;;;1376:40;;1326:6;;;1343:17;1326:6;;1376:40;;1307:16;;1376:40;1296:128;1233:191;:::o;14324:733::-;-1:-1:-1;;;;;14464:20:0;;14456:70;;;;-1:-1:-1;;;14456:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14545:23:0;;14537:71;;;;-1:-1:-1;;;14537:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14705:17:0;;14681:21;14705:17;;;:9;:17;;;;;;14741:23;;;;14733:74;;;;-1:-1:-1;;;14733:74:0;;17509:2:1;14733:74:0;;;17491:21:1;17548:2;17528:18;;;17521:30;17587:34;17567:18;;;17560:62;-1:-1:-1;;;17638:18:1;;;17631:36;17684:19;;14733:74:0;17307:402:1;14733:74:0;-1:-1:-1;;;;;14843:17:0;;;;;;;:9;:17;;;;;;14863:22;;;14843:42;;14907:20;;;;;;;;:30;;14879:6;;14843:17;14907:30;;14879:6;;14907:30;:::i;:::-;;;;;;;;14972:9;-1:-1:-1;;;;;14955:35:0;14964:6;-1:-1:-1;;;;;14955:35:0;;14983:6;14955:35;;;;2173:25:1;;2161:2;2146:18;;2027:177;14955:35:0;;;;;;;;14445:612;14324:733;;;:::o;21539:882::-;21622:4;21578:23;11233:18;;;:9;:18;;;;;;21578:50;;21639:25;21685:12;;21667:15;;:30;;;;:::i;:::-;21639:58;-1:-1:-1;21708:12:0;21737:20;;;:46;;-1:-1:-1;21761:22:0;;21737:46;21733:72;;;21798:7;;;21539:882::o;21733:72::-;21839:18;;:23;;21860:2;21839:23;:::i;:::-;21821:15;:41;21817:101;;;21895:18;;:23;;21916:2;21895:23;:::i;:::-;21877:41;;21817:101;21959:21;21991:33;22008:15;21991:16;:33::i;:::-;22037:18;22058:44;:21;22084:17;22058:25;:44::i;:::-;22037:65;;22113:17;22133:51;22166:17;22133:28;22148:12;;22133:10;:14;;:28;;;;:::i;:51::-;22215:1;22197:15;:19;;;22227:12;:16;;;22278:17;;22270:53;;22113:71;;-1:-1:-1;;;;;;22278:17:0;;22113:71;;22270:53;22215:1;22270:53;22113:71;22278:17;22270:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22356:15:0;;22348:65;;22256:67;;-1:-1:-1;;;;;;22356:15:0;;22386:21;;22348:65;;;;22386:21;22356:15;22348:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;21539:882:0:o;2812:98::-;2870:7;2897:5;2901:1;2897;:5;:::i;:::-;2890:12;2812:98;-1:-1:-1;;;2812:98:0:o;2918:::-;2976:7;3003:5;3007:1;3003;:5;:::i;22429:583::-;22579:16;;;22593:1;22579:16;;;;;;;;22555:21;;22579:16;;;;;;;;;;-1:-1:-1;22579:16:0;22555:40;;22624:4;22606;22611:1;22606:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;22606:23:0;;;-1:-1:-1;;;;;22606:23:0;;;;;22650:13;-1:-1:-1;;;;;22650:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22640:4;22645:1;22640:7;;;;;;;;:::i;:::-;;;;;;:30;-1:-1:-1;;;;;22640:30:0;;;-1:-1:-1;;;;;22640:30:0;;;;;22683:60;22700:4;22715:13;22731:11;22683:8;:60::i;:::-;22782:222;;-1:-1:-1;;;22782:222:0;;-1:-1:-1;;;;;22782:13:0;:64;;;;:222;;22861:11;;22887:1;;22931:4;;22958;;22978:15;;22782:222;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22484:528;22429:583;:::o;2706:98::-;2764:7;2791:5;2795:1;2791;: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:131::-;-1:-1:-1;;;;;342:31:1;;332:42;;322:70;;388:1;385;378:12;403:118;489:5;482:13;475:21;468:5;465:32;455:60;;511:1;508;501:12;526:382;591:6;599;652:2;640:9;631:7;627:23;623:32;620:52;;;668:1;665;658:12;620:52;707:9;694:23;726:31;751:5;726:31;:::i;:::-;776:5;-1:-1:-1;833:2:1;818:18;;805:32;846:30;805:32;846:30;:::i;:::-;895:7;885:17;;;526:382;;;;;:::o;913:597::-;1025:4;1054:2;1083;1072:9;1065:21;1115:6;1109:13;1158:6;1153:2;1142:9;1138:18;1131:34;1183:1;1193:140;1207:6;1204:1;1201:13;1193:140;;;1302:14;;;1298:23;;1292:30;1268:17;;;1287:2;1264:26;1257:66;1222:10;;1193:140;;;1351:6;1348:1;1345:13;1342:91;;;1421:1;1416:2;1407:6;1396:9;1392:22;1388:31;1381:42;1342:91;-1:-1:-1;1494:2:1;1473:15;-1:-1:-1;;1469:29:1;1454:45;;;;1501:2;1450:54;;913:597;-1:-1:-1;;;913:597:1:o;1515:315::-;1583:6;1591;1644:2;1632:9;1623:7;1619:23;1615:32;1612:52;;;1660:1;1657;1650:12;1612:52;1699:9;1686:23;1718:31;1743:5;1718:31;:::i;:::-;1768:5;1820:2;1805:18;;;;1792:32;;-1:-1:-1;;;1515:315:1:o;2209:456::-;2286:6;2294;2302;2355:2;2343:9;2334:7;2330:23;2326:32;2323:52;;;2371:1;2368;2361:12;2323:52;2410:9;2397:23;2429:31;2454:5;2429:31;:::i;:::-;2479:5;-1:-1:-1;2536:2:1;2521:18;;2508:32;2549:33;2508:32;2549:33;:::i;:::-;2209:456;;2601:7;;-1:-1:-1;;;2655:2:1;2640:18;;;;2627:32;;2209:456::o;2670:180::-;2729:6;2782:2;2770:9;2761:7;2757:23;2753:32;2750:52;;;2798:1;2795;2788:12;2750:52;-1:-1:-1;2821:23:1;;2670:180;-1:-1:-1;2670:180:1:o;3044:247::-;3103:6;3156:2;3144:9;3135:7;3131:23;3127:32;3124:52;;;3172:1;3169;3162:12;3124:52;3211:9;3198:23;3230:31;3255:5;3230:31;:::i;3296:405::-;3371:6;3379;3387;3440:2;3428:9;3419:7;3415:23;3411:32;3408:52;;;3456:1;3453;3446:12;3408:52;3495:9;3482:23;3545:4;3538:5;3534:16;3527:5;3524:27;3514:55;;3565:1;3562;3555:12;3514:55;3588:5;3640:2;3625:18;;3612:32;;-1:-1:-1;3691:2:1;3676:18;;;3663:32;;3296:405;-1:-1:-1;;;3296:405:1:o;4148:241::-;4204:6;4257:2;4245:9;4236:7;4232:23;4228:32;4225:52;;;4273:1;4270;4263:12;4225:52;4312:9;4299:23;4331:28;4353:5;4331:28;:::i;4394:388::-;4462:6;4470;4523:2;4511:9;4502:7;4498:23;4494:32;4491:52;;;4539:1;4536;4529:12;4491:52;4578:9;4565:23;4597:31;4622:5;4597:31;:::i;:::-;4647:5;-1:-1:-1;4704:2:1;4689:18;;4676:32;4717:33;4676:32;4717:33;:::i;4787:356::-;4989:2;4971:21;;;5008:18;;;5001:30;5067:34;5062:2;5047:18;;5040:62;5134:2;5119:18;;4787:356::o;5148:127::-;5209:10;5204:3;5200:20;5197:1;5190:31;5240:4;5237:1;5230:15;5264:4;5261:1;5254:15;5280:128;5320:3;5351:1;5347:6;5344:1;5341:13;5338:39;;;5357:18;;:::i;:::-;-1:-1:-1;5393:9:1;;5280:128::o;5771:380::-;5850:1;5846:12;;;;5893;;;5914:61;;5968:4;5960:6;5956:17;5946:27;;5914:61;6021:2;6013:6;6010:14;5990:18;5987:38;5984:161;;;6067:10;6062:3;6058:20;6055:1;6048:31;6102:4;6099:1;6092:15;6130:4;6127:1;6120:15;5984:161;;5771:380;;;:::o;6565:168::-;6605:7;6671:1;6667;6663:6;6659:14;6656:1;6653:21;6648:1;6641:9;6634:17;6630:45;6627:71;;;6678:18;;:::i;:::-;-1:-1:-1;6718:9:1;;6565:168::o;6738:217::-;6778:1;6804;6794:132;;6848:10;6843:3;6839:20;6836:1;6829:31;6883:4;6880:1;6873:15;6911:4;6908:1;6901:15;6794:132;-1:-1:-1;6940:9:1;;6738:217::o;12957:401::-;13159:2;13141:21;;;13198:2;13178:18;;;13171:30;13237:34;13232:2;13217:18;;13210:62;-1:-1:-1;;;13303:2:1;13288:18;;13281:35;13348:3;13333:19;;12957:401::o;13363:399::-;13565:2;13547:21;;;13604:2;13584:18;;;13577:30;13643:34;13638:2;13623:18;;13616:62;-1:-1:-1;;;13709:2:1;13694:18;;13687:33;13752:3;13737:19;;13363:399::o;15973:245::-;16040:6;16093:2;16081:9;16072:7;16068:23;16064:32;16061:52;;;16109:1;16106;16099:12;16061:52;16141:9;16135:16;16160:28;16182:5;16160:28;:::i;17177:125::-;17217:4;17245:1;17242;17239:8;17236:34;;;17250:18;;:::i;:::-;-1:-1:-1;17287:9:1;;17177:125::o;18056:127::-;18117:10;18112:3;18108:20;18105:1;18098:31;18148:4;18145:1;18138:15;18172:4;18169:1;18162:15;18188:251;18258:6;18311:2;18299:9;18290:7;18286:23;18282:32;18279:52;;;18327:1;18324;18317:12;18279:52;18359:9;18353:16;18378:31;18403:5;18378:31;:::i;18444:980::-;18706:4;18754:3;18743:9;18739:19;18785:6;18774:9;18767:25;18811:2;18849:6;18844:2;18833:9;18829:18;18822:34;18892:3;18887:2;18876:9;18872:18;18865:31;18916:6;18951;18945:13;18982:6;18974;18967:22;19020:3;19009:9;19005:19;18998:26;;19059:2;19051:6;19047:15;19033:29;;19080:1;19090:195;19104:6;19101:1;19098:13;19090:195;;;19169:13;;-1:-1:-1;;;;;19165:39:1;19153:52;;19260:15;;;;19225:12;;;;19201:1;19119:9;19090:195;;;-1:-1:-1;;;;;;;19341:32:1;;;;19336:2;19321:18;;19314:60;-1:-1:-1;;;19405:3:1;19390:19;19383:35;19302:3;18444:980;-1:-1:-1;;;18444:980:1:o

Swarm Source

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