ETH Price: $3,180.40 (+3.05%)

Token

Rotate AI (RAI)
 

Overview

Max Total Supply

10,000,000 RAI

Holders

244

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
8,997.368079989462819092 RAI

Value
$0.00
0xc3fceb656b3dd27f8ff8d1037006ef9347c54eda
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:
RotateAIERC

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/*

    Gitbook:  https://rotate-ai.gitbook.io/rotate-ai/

    Twitter: https://twitter.com/rotateai

    Telegram: https://t.me/RotateAI

    Website: https://rotateai.tech/

    Medium: https://medium.com/@jamesmarketingg123/rotate-ai-revolutionizing-autonomous-trading-d539d7af65b6


*/
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
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());
    }

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Invalid owner");
        _;
    }

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

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "New owner is ZERO");
        _transferOwnership(newOwner);
    }

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

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

library SafeMath {
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return 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 div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function tryDiv(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 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 sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

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

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return 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 sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

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

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

interface IERC20 {
    function 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 to, 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 from, address to, uint256 amount) external returns (bool);

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

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

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

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


contract ERC20 is IERC20, Context {
    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 approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

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

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

    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
        _transfer(from, to, amount);
        uint256 curAllow = _allowances[from][_msgSender()];
        require(curAllow >= amount, "ERC20: Not curAllow >= amount");
        unchecked {
            _approve(from, _msgSender(), curAllow - amount);
        }
        return true;
    }

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

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

    function decreaseAllowance(address spender, uint256 subValue) public virtual returns (bool) {
        uint256 curAllow = _allowances[_msgSender()][spender];
        require(curAllow >= subValue, "ERC20: Not curAllow >= subValue");
        unchecked {
            _approve(_msgSender(), spender, curAllow - subValue);
        }
        return true;
    }

    function _mint(
    	address account,
	    uint256 amount
    ) internal virtual {
        require(account != address(0), "ERC20: Not account != address(0)");
        _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: Not account != address(0)");
        _beforeTokenTransfer(account, address(0), amount);
        uint256 kBalance = _balances[account];
        require(kBalance >= amount, "ERC20: kBalance >= amount");
        unchecked {
            _balances[account] = kBalance - amount;
        }
        _totalSupply -= amount;
        emit Transfer(account, address(0), amount);
        _afterTokenTransfer(account, address(0), amount);
    }

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

    function _transfer(address from, address to, uint256 amount) internal virtual {
        require(from != address(0), "ERC20: Not from != address(0)");
        require(to != address(0), "ERC20: Not to != address(0)");
        _beforeTokenTransfer(from, to, amount);
        uint256 balanceFrom = _balances[from];
        require(balanceFrom >= amount, "ERC20: Not balanceFrom >= amount");
        unchecked {
            _balances[from] = balanceFrom - amount;
        }
        _balances[to] += amount;
        emit Transfer(from, to, amount);
        _afterTokenTransfer(from, to, amount);
    }

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

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

    IUniswapV2Router02 public swapRouter;
    address public swapPair;
    
    uint256 public minSwapTokenAmount;
    uint256 public maxTokenAmountPerWallet;
    uint256 public maxTokenAmountPerTxn;

    bool public TradingActive = false;
    uint256 public ActiveTradingBlock;
    uint256 public PreventSwapbackBlocks;
    bool public SwapEnabled = false;

    address public marketingWallet;
    address public devWallet;

    uint256 public tokenAmountForMarketing;
    uint256 public tokenAmountForDev;

    mapping(address => bool) public ExcludedMaxTokenAmountPerTxn;

    mapping(address => bool) public ExcludedFromTax;

    mapping(address => bool) public automatedMarketMakerPairs;

    bool public limitsInEffect = true;

    uint256 public sellTotalTax;
    uint256 public sellMarketingTax;
    uint256 public sellDevTax;

    uint256 public buyTotalTax;
    uint256 public buyMarketingTax;
    uint256 public buyDevTax;

    
    bool private Swapping;
    mapping(address => bool) private blackList;
    
    constructor() ERC20("Rotate AI", "RAI") {
        devWallet = address(0xAC5efeCAd9c17935e010206bCA0ae8C7e99e3dF8);
        marketingWallet = address(0x08343801ec80bA29baD291F4AE81Cb08b0bF6aF1);


        swapRouter = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        swapPair = IUniswapV2Factory(swapRouter.factory()).createPair(address(this), swapRouter.WETH());

        ExcludedMaxTokenAmountPerTxn[owner()] = true;
        ExcludedMaxTokenAmountPerTxn[address(this)] = true;

        uint256 totalSupply = 10_000_000 * (10 ** decimals());
        minSwapTokenAmount = 10_000 * (10 ** decimals()); //0.1% min swap
        maxTokenAmountPerTxn = 140_000 * (10 ** decimals()); //1.4% max tx amount
        maxTokenAmountPerWallet = 140_000 * (10 ** decimals()); //1.4% max wallet amount
        ExcludedFromTax[address(this)] = true;
        ExcludedFromTax[owner()] = true;


        automatedMarketMakerPairs[address(swapPair)] = true;
        
        ExcludedMaxTokenAmountPerTxn[address(0xdead)] = true;
        ExcludedMaxTokenAmountPerTxn[address(swapRouter)] = true;
        ExcludedMaxTokenAmountPerTxn[address(swapPair)] = true;

        ExcludedFromTax[address(0xdead)] = true;

        sellMarketingTax = 3;
        sellDevTax = 2;
        sellTotalTax = sellMarketingTax + sellDevTax;


        buyMarketingTax = 3;
        buyDevTax = 2;
        buyTotalTax = buyMarketingTax + buyDevTax;

        PreventSwapbackBlocks=3; //default
        _mint(msg.sender, totalSupply);
    }

    function activateTrading() external onlyOwner {
        TradingActive = true;
        SwapEnabled = true;
        ActiveTradingBlock=block.number;
    }
    function updatePrecentSwapbackBlocks(uint256 newNum) external onlyOwner{
        PreventSwapbackBlocks=newNum;
    }
    function excludeFromMaxTokenAmountPerTxn(address addr, bool value) external onlyOwner {
        ExcludedMaxTokenAmountPerTxn[addr] = value;
    }
    function excludeFromTax(address account, bool value) external onlyOwner {    	
        ExcludedFromTax[account] = value;
    }

    function removeLimits() external onlyOwner {
        limitsInEffect = false;
    }
    function updateSwapEnabled(bool enabled) external onlyOwner {
        SwapEnabled = enabled;
    }
    function updateMinimumSwapTokenAmount(uint256 amount) external onlyOwner {
        require(amount >= (totalSupply() * 1) / 100000, "Swap amount cannot be lower than 0.001% total supply.");
        require(amount <= (totalSupply() * 5) / 1000, "Swap amount cannot be higher than 0.5% total supply.");
        minSwapTokenAmount = amount;
    }
    function updateMaxTokensPerWallet(uint256 newNum) external onlyOwner {
        require(newNum >= ((totalSupply() * 5) / 1000) / (10 ** decimals()), "Cannot set maxTokenAmountPerWallet lower than 0.5%");
        maxTokenAmountPerWallet = newNum * (10 ** decimals());
    }
    function updateMaxTokenAmountPerTxn(uint256 newNum) external onlyOwner {
        require(newNum >= ((totalSupply() * 1) / 1000) / (10 ** decimals()), "Cannot set maxTokenAmountPerTxn lower than 0.1%");
        maxTokenAmountPerTxn = newNum * (10 ** decimals());
    }
    function setBlackList(address addr, bool enable) external onlyOwner {
        blackList[addr] = enable;
    }
    function setBulkBlackList(address[] memory _addr, bool enable) external onlyOwner {
        for (uint256 i=0; i <= _addr.length-1; i++) {
            blackList[_addr[i]] = enable;
        }
    }
    function updateBuyTax(uint256 newMarketFee, uint256 newDevFee) external onlyOwner {
        buyMarketingTax = newMarketFee;
        buyDevTax = newDevFee;
        buyTotalTax = buyMarketingTax + buyDevTax;
        require(buyTotalTax <= 50, "Must keep tax at 50% or less");
    }

    function updateSellTax(uint256 newMarketFee, uint256 newDevFee) external onlyOwner {
        sellMarketingTax = newMarketFee;
        sellDevTax = newDevFee;
        sellTotalTax = sellMarketingTax + sellDevTax;
        require(sellTotalTax <= 95, "Must keep tax at 95% or less");
    }
    
    function setAutomatedMarketMakerPairs(address pair, bool value)
        external onlyOwner {
        require(pair != swapPair, "The pair cannot be removed from automatedMarketMakerPairs");
        automatedMarketMakerPairs[pair] = value;
    }
    function swapBack() private {
        bool success;
        uint256 tokenAmountToSwap = tokenAmountForMarketing + tokenAmountForDev;
        uint256 tokenBalance = balanceOf(address(this));
        if (tokenAmountToSwap == 0 || tokenBalance == 0)
            return;

        if (tokenBalance > minSwapTokenAmount * 5){
            tokenBalance = minSwapTokenAmount * 5;
        }

        uint256 prevETHBalance = address(this).balance;
        swapTokensForEth(tokenBalance);

        uint256 ethBalance = address(this).balance.sub(prevETHBalance);
        uint256 ethForDev = ethBalance.mul(tokenAmountForDev).div(tokenAmountToSwap);

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

        tokenAmountForMarketing = 0;
        tokenAmountForDev = 0;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: Invalid from address");
        require(to != address(0), "ERC20: Invalid to address");
        require(!blackList[from], "ERC20: Sender is blacklisted");
        require(!blackList[to], "ERC20: Receiver is blacklisted");

        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(ExcludedFromTax[from] || ExcludedFromTax[to], "Trading is not active.");
                }

                if (automatedMarketMakerPairs[from] && !ExcludedMaxTokenAmountPerTxn[to]) {
                    require(amount <= maxTokenAmountPerTxn, "Buy transfer amount exceeds the maxTokenAmountPerTxn.");
                    require(amount + balanceOf(to) <= maxTokenAmountPerWallet, "Max wallet exceeded");
                }
                else if (automatedMarketMakerPairs[to] && !ExcludedMaxTokenAmountPerTxn[from]) {
                    require(amount <= maxTokenAmountPerTxn, "Sell transfer amount exceeds the maxTokenAmountPerTxn.");
                }
                else if (!ExcludedMaxTokenAmountPerTxn[to]) {
                    require(amount + balanceOf(to) <= maxTokenAmountPerWallet, "Max wallet exceeded");
                }
            }
        }
        uint256 tokenBalance = balanceOf(address(this));
        bool canSwap = tokenBalance >= minSwapTokenAmount;
        if (SwapEnabled 
            && canSwap 
            && !Swapping 
            && !automatedMarketMakerPairs[from] 
            && !ExcludedFromTax[from] 
            && !ExcludedFromTax[to]
            && ActiveTradingBlock+PreventSwapbackBlocks <= block.number
        ) {
            Swapping = true;
            swapBack();
            Swapping = false;
        }

        bool Tax = !Swapping;
        if (ExcludedFromTax[from] || ExcludedFromTax[to])
            Tax = false;

        uint256 fees = 0;
        if (Tax) {
            if (automatedMarketMakerPairs[to] && sellTotalTax > 0) {
                fees = amount.mul(sellTotalTax).div(100);
                tokenAmountForDev += (fees * sellDevTax) / sellTotalTax;
                tokenAmountForMarketing += (fees * sellMarketingTax) / sellTotalTax;
            }
            else if (automatedMarketMakerPairs[from] && buyTotalTax > 0) {
                fees = amount.mul(buyTotalTax).div(100);
                tokenAmountForDev += (fees * buyDevTax) / buyTotalTax;
                tokenAmountForMarketing += (fees * buyMarketingTax) / buyTotalTax;
            }
            if (fees > 0)
                super._transfer(from, address(this), fees);
            amount -= fees;
        }

        super._transfer(from, to, amount);
    }
    receive() external payable {}
    function swapTokensForEth(uint256 amount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = swapRouter.WETH();

        _approve(address(this), address(swapRouter), amount);

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

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":[],"name":"ActiveTradingBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ExcludedFromTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ExcludedMaxTokenAmountPerTxn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PreventSwapbackBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activateTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalTax","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":"subValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromMaxTokenAmountPerTxn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","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":"maxTokenAmountPerTxn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTokenAmountPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minSwapTokenAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPairs","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":[{"internalType":"address[]","name":"_addr","type":"address[]"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setBulkBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenAmountForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenAmountForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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":[{"internalType":"uint256","name":"newMarketFee","type":"uint256"},{"internalType":"uint256","name":"newDevFee","type":"uint256"}],"name":"updateBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTokenAmountPerTxn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTokensPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateMinimumSwapTokenAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updatePrecentSwapbackBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMarketFee","type":"uint256"},{"internalType":"uint256","name":"newDevFee","type":"uint256"}],"name":"updateSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600b805460ff19908116909155600e80548216905560158054909116600117905534801562000031575f80fd5b5060405180604001604052806009815260200168526f7461746520414960b81b8152506040518060400160405280600381526020016252414960e81b815250815f90816200008091906200066a565b5060016200008f82826200066a565b505050620000ac620000a66200048e60201b60201c565b62000492565b600f805473ac5efecad9c17935e010206bca0ae8c7e99e3df86001600160a01b031991821617909155600e8054610100600160a81b0319167408343801ec80ba29bad291f4ae81cb08b0bf6af10017905560068054737a250d5630b4cf539739df2c5dacb4c659f2488d9216821790556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000156573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200017c919062000736565b6001600160a01b031663c9c653963060065f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001dc573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000202919062000736565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af11580156200024d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000273919062000736565b600780546001600160a01b0319166001600160a01b03928316179055600554165f908152601260208190526040808320805460ff1990811660019081179092553085529184208054909216179055620002ce90600a62000874565b620002dd906298968062000884565b9050620002ed6012600a62000874565b620002fb9061271062000884565b6008556200030c6012600a62000874565b6200031b90620222e062000884565b600a5560126200032d90600a62000874565b6200033c90620222e062000884565b600955305f9081526013602081905260408220805460ff1916600190811790915591620003716005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff19968716179055600780548316825260148552838220805487166001908117909155601286527f1120e10407cab1193d7c5139d9aae5536deb3d83e855f25f8e42f811c01f56f7805488168217905560065484168352848320805488168217905590549092168152918220805485168217905561dead90915260139091527f2264e2d7bacabe6058f5009f42467b9be28015e7760f87409562384c94ac271c8054909216179055600360178190556002601881905562000457916200089e565b6016556003601a8190556002601b81905562000473916200089e565b6019556003600d55620004873382620004e3565b50620008b4565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0382166200053e5760405162461bcd60e51b815260206004820181905260248201527f45524332303a204e6f74206163636f756e7420213d2061646472657373283029604482015260640160405180910390fd5b8060025f8282546200055191906200089e565b90915550506001600160a01b0382165f90815260036020526040812080548392906200057f9084906200089e565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c90821680620005f657607f821691505b6020821081036200061557634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620005c857805f5260205f20601f840160051c81016020851015620006425750805b601f840160051c820191505b8181101562000663575f81556001016200064e565b5050505050565b81516001600160401b03811115620006865762000686620005cd565b6200069e81620006978454620005e1565b846200061b565b602080601f831160018114620006d4575f8415620006bc5750858301515b5f19600386901b1c1916600185901b1785556200072e565b5f85815260208120601f198616915b828110156200070457888601518255948401946001909101908401620006e3565b50858210156200072257878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f6020828403121562000747575f80fd5b81516001600160a01b03811681146200075e575f80fd5b9392505050565b634e487b7160e01b5f52601160045260245ffd5b600181815b80851115620007b957815f19048211156200079d576200079d62000765565b80851615620007ab57918102915b93841c93908002906200077e565b509250929050565b5f82620007d1575060016200086e565b81620007df57505f6200086e565b8160018114620007f85760028114620008035762000823565b60019150506200086e565b60ff84111562000817576200081762000765565b50506001821b6200086e565b5060208310610133831016604e8410600b841016171562000848575081810a6200086e565b62000854838362000779565b805f19048211156200086a576200086a62000765565b0290505b92915050565b5f6200075e60ff841683620007c1565b80820281158282048414176200086e576200086e62000765565b808201808211156200086e576200086e62000765565b61262d80620008c25f395ff3fe6080604052600436106102dc575f3560e01c806375f0a87411610189578063b62496f5116100d8578063c42c3f8811610092578063e27a55fe1161006d578063e27a55fe1461088c578063e96db1ef146108a1578063f2fde38b146108b6578063fc0217a4146108d5575f80fd5b8063c42c3f8814610814578063c6a3064714610829578063dd62ed3e14610848575f80fd5b8063b62496f514610746578063b79c188614610774578063be69188314610793578063c1cb02a4146107a8578063c31c9c07146107c7578063c410a11b146107e6575f80fd5b8063924de9b711610143578063a9059cbb1161011e578063a9059cbb146106de578063af8f26e7146106fd578063b38d229a14610712578063b38d5ef414610727575f80fd5b8063924de9b71461068c57806395d89b41146106ab578063a457c2d7146106bf575f80fd5b806375f0a874146105ca5780637d673170146105ee57806380da454314610603578063896c2b8a146106315780638da5cb5b146106505780638ea5220f1461066d575f80fd5b8063395093511161024557806367b740e9116101ff5780637070678b116101da5780637070678b1461054f57806370a082311461056e578063715018a6146105a2578063751039fc146105b6575f80fd5b806367b740e9146104fc57806368092bd91461051b578063685fbc6b1461053a575f80fd5b8063395093511461045857806341c787961461047757806345167f26146104905780634a62bb65146104af578063544d1ec9146104c85780635df6e68e146104e7575f80fd5b806323b872dd1161029657806323b872dd1461039e57806326991cc8146103bd5780632c81355e146103f4578063313ce56714610413578063330124111461042e578063372b44b814610443575f80fd5b806301b12312146102e757806306fdde031461030f578063095ea7b3146103305780630bd05b691461035f57806318160ddd1461037557806318c34be114610389575f80fd5b366102e357005b5f80fd5b3480156102f2575f80fd5b506102fc600d5481565b6040519081526020015b60405180910390f35b34801561031a575f80fd5b506103236108ee565b60405161030691906120e0565b34801561033b575f80fd5b5061034f61034a366004612150565b61097d565b6040519015158152602001610306565b34801561036a575f80fd5b50610373610993565b005b348015610380575f80fd5b506002546102fc565b348015610394575f80fd5b506102fc60105481565b3480156103a9575f80fd5b5061034f6103b836600461217a565b6109e9565b3480156103c8575f80fd5b506007546103dc906001600160a01b031681565b6040516001600160a01b039091168152602001610306565b3480156103ff575f80fd5b5061037361040e3660046121b8565b610a80565b34801561041e575f80fd5b5060405160128152602001610306565b348015610439575f80fd5b506102fc601a5481565b34801561044e575f80fd5b506102fc60115481565b348015610463575f80fd5b5061034f610472366004612150565b610bcb565b348015610482575f80fd5b50600e5461034f9060ff1681565b34801561049b575f80fd5b506103736104aa3660046121de565b610c06565b3480156104ba575f80fd5b5060155461034f9060ff1681565b3480156104d3575f80fd5b506103736104e23660046121b8565b610cde565b3480156104f2575f80fd5b506102fc60195481565b348015610507575f80fd5b506103736105163660046121b8565b610dc2565b348015610526575f80fd5b506103736105353660046121de565b610ea9565b348015610545575f80fd5b506102fc60095481565b34801561055a575f80fd5b506103736105693660046121de565b610efd565b348015610579575f80fd5b506102fc610588366004612211565b6001600160a01b03165f9081526003602052604090205490565b3480156105ad575f80fd5b50610373610f51565b3480156105c1575f80fd5b50610373610f86565b3480156105d5575f80fd5b50600e546103dc9061010090046001600160a01b031681565b3480156105f9575f80fd5b506102fc60085481565b34801561060e575f80fd5b5061034f61061d366004612211565b60136020525f908152604090205460ff1681565b34801561063c575f80fd5b5061037361064b3660046121b8565b610fbc565b34801561065b575f80fd5b506005546001600160a01b03166103dc565b348015610678575f80fd5b50600f546103dc906001600160a01b031681565b348015610697575f80fd5b506103736106a636600461222c565b610feb565b3480156106b6575f80fd5b50610323611028565b3480156106ca575f80fd5b5061034f6106d9366004612150565b611037565b3480156106e9575f80fd5b5061034f6106f8366004612150565b6110c1565b348015610708575f80fd5b506102fc601b5481565b34801561071d575f80fd5b506102fc600c5481565b348015610732575f80fd5b50610373610741366004612245565b6110cd565b348015610751575f80fd5b5061034f610760366004612211565b60146020525f908152604090205460ff1681565b34801561077f575f80fd5b5061037361078e366004612245565b611164565b34801561079e575f80fd5b506102fc60185481565b3480156107b3575f80fd5b506103736107c2366004612279565b6111f7565b3480156107d2575f80fd5b506006546103dc906001600160a01b031681565b3480156107f1575f80fd5b5061034f610800366004612211565b60126020525f908152604090205460ff1681565b34801561081f575f80fd5b506102fc600a5481565b348015610834575f80fd5b506103736108433660046121de565b611295565b348015610853575f80fd5b506102fc61086236600461234b565b6001600160a01b039182165f90815260046020908152604080832093909416825291909152205490565b348015610897575f80fd5b506102fc60165481565b3480156108ac575f80fd5b506102fc60175481565b3480156108c1575f80fd5b506103736108d0366004612211565b6112e9565b3480156108e0575f80fd5b50600b5461034f9060ff1681565b60605f80546108fc90612382565b80601f016020809104026020016040519081016040528092919081815260200182805461092890612382565b80156109735780601f1061094a57610100808354040283529160200191610973565b820191905f5260205f20905b81548152906001019060200180831161095657829003601f168201915b5050505050905090565b5f610989338484611369565b5060015b92915050565b6005546001600160a01b031633146109c65760405162461bcd60e51b81526004016109bd906123ba565b60405180910390fd5b600b8054600160ff199182168117909255600e8054909116909117905543600c55565b5f6109f5848484611475565b6001600160a01b0384165f90815260046020908152604080832033845290915290205482811015610a685760405162461bcd60e51b815260206004820152601d60248201527f45524332303a204e6f7420637572416c6c6f77203e3d20616d6f756e7400000060448201526064016109bd565b610a758533858403611369565b506001949350505050565b6005546001600160a01b03163314610aaa5760405162461bcd60e51b81526004016109bd906123ba565b620186a0610ab760025490565b610ac29060016123f5565b610acc919061240c565b811015610b395760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b60648201526084016109bd565b6103e8610b4560025490565b610b509060056123f5565b610b5a919061240c565b811115610bc65760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b60648201526084016109bd565b600855565b335f8181526004602090815260408083206001600160a01b03871684529091528120549091610989918590610c0190869061242b565b611369565b6005546001600160a01b03163314610c305760405162461bcd60e51b81526004016109bd906123ba565b6007546001600160a01b0390811690831603610cb45760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b657250616972730000000000000060648201526084016109bd565b6001600160a01b03919091165f908152601460205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610d085760405162461bcd60e51b81526004016109bd906123ba565b610d146012600a61251e565b6103e8610d2060025490565b610d2b9060016123f5565b610d35919061240c565b610d3f919061240c565b811015610da65760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d6178546f6b656e416d6f756e7450657254786e2060448201526e6c6f776572207468616e20302e312560881b60648201526084016109bd565b610db26012600a61251e565b610dbc90826123f5565b600a5550565b6005546001600160a01b03163314610dec5760405162461bcd60e51b81526004016109bd906123ba565b610df86012600a61251e565b6103e8610e0460025490565b610e0f9060056123f5565b610e19919061240c565b610e23919061240c565b811015610e8d5760405162461bcd60e51b815260206004820152603260248201527f43616e6e6f7420736574206d6178546f6b656e416d6f756e7450657257616c6c6044820152716574206c6f776572207468616e20302e352560701b60648201526084016109bd565b610e996012600a61251e565b610ea390826123f5565b60095550565b6005546001600160a01b03163314610ed35760405162461bcd60e51b81526004016109bd906123ba565b6001600160a01b03919091165f908152601d60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610f275760405162461bcd60e51b81526004016109bd906123ba565b6001600160a01b03919091165f908152601260205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610f7b5760405162461bcd60e51b81526004016109bd906123ba565b610f845f611c28565b565b6005546001600160a01b03163314610fb05760405162461bcd60e51b81526004016109bd906123ba565b6015805460ff19169055565b6005546001600160a01b03163314610fe65760405162461bcd60e51b81526004016109bd906123ba565b600d55565b6005546001600160a01b031633146110155760405162461bcd60e51b81526004016109bd906123ba565b600e805460ff1916911515919091179055565b6060600180546108fc90612382565b335f9081526004602090815260408083206001600160a01b0386168452909152812054828110156110aa5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a204e6f7420637572416c6c6f77203e3d2073756256616c75650060448201526064016109bd565b6110b73385858403611369565b5060019392505050565b5f610989338484611475565b6005546001600160a01b031633146110f75760405162461bcd60e51b81526004016109bd906123ba565b601a829055601b81905561110b818361242b565b6019819055603210156111605760405162461bcd60e51b815260206004820152601c60248201527f4d757374206b6565702074617820617420353025206f72206c6573730000000060448201526064016109bd565b5050565b6005546001600160a01b0316331461118e5760405162461bcd60e51b81526004016109bd906123ba565b601782905560188190556111a2818361242b565b6016819055605f10156111605760405162461bcd60e51b815260206004820152601c60248201527f4d757374206b6565702074617820617420393525206f72206c6573730000000060448201526064016109bd565b6005546001600160a01b031633146112215760405162461bcd60e51b81526004016109bd906123ba565b5f5b60018351611231919061252c565b81116112905781601d5f85848151811061124d5761124d61253f565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff19169115159190911790558061128881612553565b915050611223565b505050565b6005546001600160a01b031633146112bf5760405162461bcd60e51b81526004016109bd906123ba565b6001600160a01b03919091165f908152601360205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146113135760405162461bcd60e51b81526004016109bd906123ba565b6001600160a01b03811661135d5760405162461bcd60e51b81526020600482015260116024820152704e6577206f776e6572206973205a45524f60781b60448201526064016109bd565b61136681611c28565b50565b6001600160a01b0383166113bf5760405162461bcd60e51b815260206004820152601e60248201527f45524332303a204e6f74206f776e657220213d2061646472657373283029000060448201526064016109bd565b6001600160a01b0382166114155760405162461bcd60e51b815260206004820181905260248201527f45524332303a204e6f74207370656e64657220213d206164647265737328302960448201526064016109bd565b6001600160a01b038381165f8181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166114cb5760405162461bcd60e51b815260206004820152601b60248201527f45524332303a20496e76616c69642066726f6d2061646472657373000000000060448201526064016109bd565b6001600160a01b0382166115215760405162461bcd60e51b815260206004820152601960248201527f45524332303a20496e76616c696420746f20616464726573730000000000000060448201526064016109bd565b6001600160a01b0383165f908152601d602052604090205460ff16156115895760405162461bcd60e51b815260206004820152601c60248201527f45524332303a2053656e64657220697320626c61636b6c69737465640000000060448201526064016109bd565b6001600160a01b0382165f908152601d602052604090205460ff16156115f15760405162461bcd60e51b815260206004820152601e60248201527f45524332303a20526563656976657220697320626c61636b6c6973746564000060448201526064016109bd565b805f036116035761129083835f611c79565b60155460ff1615611964576005546001600160a01b0384811691161480159061163a57506005546001600160a01b03838116911614155b801561164e57506001600160a01b03821615155b801561166557506001600160a01b03821661dead14155b80156116745750601c5460ff16155b1561196457600b5460ff16611705576001600160a01b0383165f9081526013602052604090205460ff16806116c057506001600160a01b0382165f9081526013602052604090205460ff165b6117055760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b60448201526064016109bd565b6001600160a01b0383165f9081526014602052604090205460ff16801561174457506001600160a01b0382165f9081526012602052604090205460ff16155b1561182757600a548111156117b95760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a37b5b2b720b6b7bab73a2832b92a3c371760591b60648201526084016109bd565b6009546001600160a01b0383165f908152600360205260409020546117de908361242b565b11156118225760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016109bd565b611964565b6001600160a01b0382165f9081526014602052604090205460ff16801561186657506001600160a01b0383165f9081526012602052604090205460ff16155b156118dc57600a548111156118225760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a37b5b2b720b6b7bab73a2832b92a3c371760511b60648201526084016109bd565b6001600160a01b0382165f9081526012602052604090205460ff16611964576009546001600160a01b0383165f90815260036020526040902054611920908361242b565b11156119645760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016109bd565b305f90815260036020526040902054600854600e54908210159060ff16801561198a5750805b80156119995750601c5460ff16155b80156119bd57506001600160a01b0385165f9081526014602052604090205460ff16155b80156119e157506001600160a01b0385165f9081526013602052604090205460ff16155b8015611a0557506001600160a01b0384165f9081526013602052604090205460ff16155b8015611a20575043600d54600c54611a1d919061242b565b11155b15611a4557601c805460ff19166001179055611a3a611e1d565b601c805460ff191690555b601c546001600160a01b0386165f9081526013602052604090205460ff91821615911680611a8a57506001600160a01b0385165f9081526013602052604090205460ff165b15611a9257505f5b5f8115611c14576001600160a01b0386165f9081526014602052604090205460ff168015611ac157505f601654115b15611b4d57611ae66064611ae060165488611f6890919063ffffffff16565b90611f7a565b905060165460185482611af991906123f5565b611b03919061240c565b60115f828254611b13919061242b565b9091555050601654601754611b2890836123f5565b611b32919061240c565b60105f828254611b42919061242b565b90915550611bf69050565b6001600160a01b0387165f9081526014602052604090205460ff168015611b7557505f601954115b15611bf657611b946064611ae060195488611f6890919063ffffffff16565b9050601954601b5482611ba791906123f5565b611bb1919061240c565b60115f828254611bc1919061242b565b9091555050601954601a54611bd690836123f5565b611be0919061240c565b60105f828254611bf0919061242b565b90915550505b8015611c0757611c07873083611c79565b611c11818661252c565b94505b611c1f878787611c79565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b038316611ccf5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a204e6f742066726f6d20213d206164647265737328302900000060448201526064016109bd565b6001600160a01b038216611d255760405162461bcd60e51b815260206004820152601b60248201527f45524332303a204e6f7420746f20213d2061646472657373283029000000000060448201526064016109bd565b6001600160a01b0383165f9081526003602052604090205481811015611d8d5760405162461bcd60e51b815260206004820181905260248201527f45524332303a204e6f742062616c616e636546726f6d203e3d20616d6f756e7460448201526064016109bd565b6001600160a01b038085165f90815260036020526040808220858503905591851681529081208054849290611dc390849061242b565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611e0f91815260200190565b60405180910390a350505050565b5f80601154601054611e2f919061242b565b305f90815260036020526040902054909150811580611e4c575080155b15611e5657505050565b600854611e649060056123f5565b811115611e7c57600854611e799060056123f5565b90505b47611e8682611f85565b5f611e9147836120d5565b90505f611ead85611ae060115485611f6890919063ffffffff16565b600f546040519192506001600160a01b03169082905f81818185875af1925050503d805f8114611ef8576040519150601f19603f3d011682016040523d82523d5f602084013e611efd565b606091505b5050600e5460405191975061010090046001600160a01b03169047905f81818185875af1925050503d805f8114611f4f576040519150601f19603f3d011682016040523d82523d5f602084013e611f54565b606091505b50505f601081905560115550505050505050565b5f611f7382846123f5565b9392505050565b5f611f73828461240c565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110611fb857611fb861253f565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561200f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612033919061256b565b816001815181106120465761204661253f565b6001600160a01b03928316602091820292909201015260065461206c9130911684611369565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac947906120a49085905f90869030904290600401612586565b5f604051808303815f87803b1580156120bb575f80fd5b505af11580156120cd573d5f803e3d5ffd5b505050505050565b5f611f73828461252c565b5f602080835283518060208501525f5b8181101561210c578581018301518582016040015282016120f0565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611366575f80fd5b803561214b8161212c565b919050565b5f8060408385031215612161575f80fd5b823561216c8161212c565b946020939093013593505050565b5f805f6060848603121561218c575f80fd5b83356121978161212c565b925060208401356121a78161212c565b929592945050506040919091013590565b5f602082840312156121c8575f80fd5b5035919050565b8035801515811461214b575f80fd5b5f80604083850312156121ef575f80fd5b82356121fa8161212c565b9150612208602084016121cf565b90509250929050565b5f60208284031215612221575f80fd5b8135611f738161212c565b5f6020828403121561223c575f80fd5b611f73826121cf565b5f8060408385031215612256575f80fd5b50508035926020909101359150565b634e487b7160e01b5f52604160045260245ffd5b5f806040838503121561228a575f80fd5b823567ffffffffffffffff808211156122a1575f80fd5b818501915085601f8301126122b4575f80fd5b81356020828211156122c8576122c8612265565b8160051b604051601f19603f830116810181811086821117156122ed576122ed612265565b60405292835281830193508481018201928984111561230a575f80fd5b948201945b8386101561232f5761232086612140565b8552948201949382019361230f565b965061233e90508782016121cf565b9450505050509250929050565b5f806040838503121561235c575f80fd5b82356123678161212c565b915060208301356123778161212c565b809150509250929050565b600181811c9082168061239657607f821691505b6020821081036123b457634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252600d908201526c24b73b30b634b21037bbb732b960991b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761098d5761098d6123e1565b5f8261242657634e487b7160e01b5f52601260045260245ffd5b500490565b8082018082111561098d5761098d6123e1565b600181815b8085111561247857815f190482111561245e5761245e6123e1565b8085161561246b57918102915b93841c9390800290612443565b509250929050565b5f8261248e5750600161098d565b8161249a57505f61098d565b81600181146124b057600281146124ba576124d6565b600191505061098d565b60ff8411156124cb576124cb6123e1565b50506001821b61098d565b5060208310610133831016604e8410600b84101617156124f9575081810a61098d565b612503838361243e565b805f1904821115612516576125166123e1565b029392505050565b5f611f7360ff841683612480565b8181038181111561098d5761098d6123e1565b634e487b7160e01b5f52603260045260245ffd5b5f60018201612564576125646123e1565b5060010190565b5f6020828403121561257b575f80fd5b8151611f738161212c565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156125d65784516001600160a01b0316835293830193918301916001016125b1565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220d92348c517a8b3e8c160cc50eeb985c20261b419f6ef878eeb4c1fbe00e0ad2c64736f6c63430008180033

Deployed Bytecode

0x6080604052600436106102dc575f3560e01c806375f0a87411610189578063b62496f5116100d8578063c42c3f8811610092578063e27a55fe1161006d578063e27a55fe1461088c578063e96db1ef146108a1578063f2fde38b146108b6578063fc0217a4146108d5575f80fd5b8063c42c3f8814610814578063c6a3064714610829578063dd62ed3e14610848575f80fd5b8063b62496f514610746578063b79c188614610774578063be69188314610793578063c1cb02a4146107a8578063c31c9c07146107c7578063c410a11b146107e6575f80fd5b8063924de9b711610143578063a9059cbb1161011e578063a9059cbb146106de578063af8f26e7146106fd578063b38d229a14610712578063b38d5ef414610727575f80fd5b8063924de9b71461068c57806395d89b41146106ab578063a457c2d7146106bf575f80fd5b806375f0a874146105ca5780637d673170146105ee57806380da454314610603578063896c2b8a146106315780638da5cb5b146106505780638ea5220f1461066d575f80fd5b8063395093511161024557806367b740e9116101ff5780637070678b116101da5780637070678b1461054f57806370a082311461056e578063715018a6146105a2578063751039fc146105b6575f80fd5b806367b740e9146104fc57806368092bd91461051b578063685fbc6b1461053a575f80fd5b8063395093511461045857806341c787961461047757806345167f26146104905780634a62bb65146104af578063544d1ec9146104c85780635df6e68e146104e7575f80fd5b806323b872dd1161029657806323b872dd1461039e57806326991cc8146103bd5780632c81355e146103f4578063313ce56714610413578063330124111461042e578063372b44b814610443575f80fd5b806301b12312146102e757806306fdde031461030f578063095ea7b3146103305780630bd05b691461035f57806318160ddd1461037557806318c34be114610389575f80fd5b366102e357005b5f80fd5b3480156102f2575f80fd5b506102fc600d5481565b6040519081526020015b60405180910390f35b34801561031a575f80fd5b506103236108ee565b60405161030691906120e0565b34801561033b575f80fd5b5061034f61034a366004612150565b61097d565b6040519015158152602001610306565b34801561036a575f80fd5b50610373610993565b005b348015610380575f80fd5b506002546102fc565b348015610394575f80fd5b506102fc60105481565b3480156103a9575f80fd5b5061034f6103b836600461217a565b6109e9565b3480156103c8575f80fd5b506007546103dc906001600160a01b031681565b6040516001600160a01b039091168152602001610306565b3480156103ff575f80fd5b5061037361040e3660046121b8565b610a80565b34801561041e575f80fd5b5060405160128152602001610306565b348015610439575f80fd5b506102fc601a5481565b34801561044e575f80fd5b506102fc60115481565b348015610463575f80fd5b5061034f610472366004612150565b610bcb565b348015610482575f80fd5b50600e5461034f9060ff1681565b34801561049b575f80fd5b506103736104aa3660046121de565b610c06565b3480156104ba575f80fd5b5060155461034f9060ff1681565b3480156104d3575f80fd5b506103736104e23660046121b8565b610cde565b3480156104f2575f80fd5b506102fc60195481565b348015610507575f80fd5b506103736105163660046121b8565b610dc2565b348015610526575f80fd5b506103736105353660046121de565b610ea9565b348015610545575f80fd5b506102fc60095481565b34801561055a575f80fd5b506103736105693660046121de565b610efd565b348015610579575f80fd5b506102fc610588366004612211565b6001600160a01b03165f9081526003602052604090205490565b3480156105ad575f80fd5b50610373610f51565b3480156105c1575f80fd5b50610373610f86565b3480156105d5575f80fd5b50600e546103dc9061010090046001600160a01b031681565b3480156105f9575f80fd5b506102fc60085481565b34801561060e575f80fd5b5061034f61061d366004612211565b60136020525f908152604090205460ff1681565b34801561063c575f80fd5b5061037361064b3660046121b8565b610fbc565b34801561065b575f80fd5b506005546001600160a01b03166103dc565b348015610678575f80fd5b50600f546103dc906001600160a01b031681565b348015610697575f80fd5b506103736106a636600461222c565b610feb565b3480156106b6575f80fd5b50610323611028565b3480156106ca575f80fd5b5061034f6106d9366004612150565b611037565b3480156106e9575f80fd5b5061034f6106f8366004612150565b6110c1565b348015610708575f80fd5b506102fc601b5481565b34801561071d575f80fd5b506102fc600c5481565b348015610732575f80fd5b50610373610741366004612245565b6110cd565b348015610751575f80fd5b5061034f610760366004612211565b60146020525f908152604090205460ff1681565b34801561077f575f80fd5b5061037361078e366004612245565b611164565b34801561079e575f80fd5b506102fc60185481565b3480156107b3575f80fd5b506103736107c2366004612279565b6111f7565b3480156107d2575f80fd5b506006546103dc906001600160a01b031681565b3480156107f1575f80fd5b5061034f610800366004612211565b60126020525f908152604090205460ff1681565b34801561081f575f80fd5b506102fc600a5481565b348015610834575f80fd5b506103736108433660046121de565b611295565b348015610853575f80fd5b506102fc61086236600461234b565b6001600160a01b039182165f90815260046020908152604080832093909416825291909152205490565b348015610897575f80fd5b506102fc60165481565b3480156108ac575f80fd5b506102fc60175481565b3480156108c1575f80fd5b506103736108d0366004612211565b6112e9565b3480156108e0575f80fd5b50600b5461034f9060ff1681565b60605f80546108fc90612382565b80601f016020809104026020016040519081016040528092919081815260200182805461092890612382565b80156109735780601f1061094a57610100808354040283529160200191610973565b820191905f5260205f20905b81548152906001019060200180831161095657829003601f168201915b5050505050905090565b5f610989338484611369565b5060015b92915050565b6005546001600160a01b031633146109c65760405162461bcd60e51b81526004016109bd906123ba565b60405180910390fd5b600b8054600160ff199182168117909255600e8054909116909117905543600c55565b5f6109f5848484611475565b6001600160a01b0384165f90815260046020908152604080832033845290915290205482811015610a685760405162461bcd60e51b815260206004820152601d60248201527f45524332303a204e6f7420637572416c6c6f77203e3d20616d6f756e7400000060448201526064016109bd565b610a758533858403611369565b506001949350505050565b6005546001600160a01b03163314610aaa5760405162461bcd60e51b81526004016109bd906123ba565b620186a0610ab760025490565b610ac29060016123f5565b610acc919061240c565b811015610b395760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b60648201526084016109bd565b6103e8610b4560025490565b610b509060056123f5565b610b5a919061240c565b811115610bc65760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b60648201526084016109bd565b600855565b335f8181526004602090815260408083206001600160a01b03871684529091528120549091610989918590610c0190869061242b565b611369565b6005546001600160a01b03163314610c305760405162461bcd60e51b81526004016109bd906123ba565b6007546001600160a01b0390811690831603610cb45760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b657250616972730000000000000060648201526084016109bd565b6001600160a01b03919091165f908152601460205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610d085760405162461bcd60e51b81526004016109bd906123ba565b610d146012600a61251e565b6103e8610d2060025490565b610d2b9060016123f5565b610d35919061240c565b610d3f919061240c565b811015610da65760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d6178546f6b656e416d6f756e7450657254786e2060448201526e6c6f776572207468616e20302e312560881b60648201526084016109bd565b610db26012600a61251e565b610dbc90826123f5565b600a5550565b6005546001600160a01b03163314610dec5760405162461bcd60e51b81526004016109bd906123ba565b610df86012600a61251e565b6103e8610e0460025490565b610e0f9060056123f5565b610e19919061240c565b610e23919061240c565b811015610e8d5760405162461bcd60e51b815260206004820152603260248201527f43616e6e6f7420736574206d6178546f6b656e416d6f756e7450657257616c6c6044820152716574206c6f776572207468616e20302e352560701b60648201526084016109bd565b610e996012600a61251e565b610ea390826123f5565b60095550565b6005546001600160a01b03163314610ed35760405162461bcd60e51b81526004016109bd906123ba565b6001600160a01b03919091165f908152601d60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610f275760405162461bcd60e51b81526004016109bd906123ba565b6001600160a01b03919091165f908152601260205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610f7b5760405162461bcd60e51b81526004016109bd906123ba565b610f845f611c28565b565b6005546001600160a01b03163314610fb05760405162461bcd60e51b81526004016109bd906123ba565b6015805460ff19169055565b6005546001600160a01b03163314610fe65760405162461bcd60e51b81526004016109bd906123ba565b600d55565b6005546001600160a01b031633146110155760405162461bcd60e51b81526004016109bd906123ba565b600e805460ff1916911515919091179055565b6060600180546108fc90612382565b335f9081526004602090815260408083206001600160a01b0386168452909152812054828110156110aa5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a204e6f7420637572416c6c6f77203e3d2073756256616c75650060448201526064016109bd565b6110b73385858403611369565b5060019392505050565b5f610989338484611475565b6005546001600160a01b031633146110f75760405162461bcd60e51b81526004016109bd906123ba565b601a829055601b81905561110b818361242b565b6019819055603210156111605760405162461bcd60e51b815260206004820152601c60248201527f4d757374206b6565702074617820617420353025206f72206c6573730000000060448201526064016109bd565b5050565b6005546001600160a01b0316331461118e5760405162461bcd60e51b81526004016109bd906123ba565b601782905560188190556111a2818361242b565b6016819055605f10156111605760405162461bcd60e51b815260206004820152601c60248201527f4d757374206b6565702074617820617420393525206f72206c6573730000000060448201526064016109bd565b6005546001600160a01b031633146112215760405162461bcd60e51b81526004016109bd906123ba565b5f5b60018351611231919061252c565b81116112905781601d5f85848151811061124d5761124d61253f565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff19169115159190911790558061128881612553565b915050611223565b505050565b6005546001600160a01b031633146112bf5760405162461bcd60e51b81526004016109bd906123ba565b6001600160a01b03919091165f908152601360205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146113135760405162461bcd60e51b81526004016109bd906123ba565b6001600160a01b03811661135d5760405162461bcd60e51b81526020600482015260116024820152704e6577206f776e6572206973205a45524f60781b60448201526064016109bd565b61136681611c28565b50565b6001600160a01b0383166113bf5760405162461bcd60e51b815260206004820152601e60248201527f45524332303a204e6f74206f776e657220213d2061646472657373283029000060448201526064016109bd565b6001600160a01b0382166114155760405162461bcd60e51b815260206004820181905260248201527f45524332303a204e6f74207370656e64657220213d206164647265737328302960448201526064016109bd565b6001600160a01b038381165f8181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166114cb5760405162461bcd60e51b815260206004820152601b60248201527f45524332303a20496e76616c69642066726f6d2061646472657373000000000060448201526064016109bd565b6001600160a01b0382166115215760405162461bcd60e51b815260206004820152601960248201527f45524332303a20496e76616c696420746f20616464726573730000000000000060448201526064016109bd565b6001600160a01b0383165f908152601d602052604090205460ff16156115895760405162461bcd60e51b815260206004820152601c60248201527f45524332303a2053656e64657220697320626c61636b6c69737465640000000060448201526064016109bd565b6001600160a01b0382165f908152601d602052604090205460ff16156115f15760405162461bcd60e51b815260206004820152601e60248201527f45524332303a20526563656976657220697320626c61636b6c6973746564000060448201526064016109bd565b805f036116035761129083835f611c79565b60155460ff1615611964576005546001600160a01b0384811691161480159061163a57506005546001600160a01b03838116911614155b801561164e57506001600160a01b03821615155b801561166557506001600160a01b03821661dead14155b80156116745750601c5460ff16155b1561196457600b5460ff16611705576001600160a01b0383165f9081526013602052604090205460ff16806116c057506001600160a01b0382165f9081526013602052604090205460ff165b6117055760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b60448201526064016109bd565b6001600160a01b0383165f9081526014602052604090205460ff16801561174457506001600160a01b0382165f9081526012602052604090205460ff16155b1561182757600a548111156117b95760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a37b5b2b720b6b7bab73a2832b92a3c371760591b60648201526084016109bd565b6009546001600160a01b0383165f908152600360205260409020546117de908361242b565b11156118225760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016109bd565b611964565b6001600160a01b0382165f9081526014602052604090205460ff16801561186657506001600160a01b0383165f9081526012602052604090205460ff16155b156118dc57600a548111156118225760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a37b5b2b720b6b7bab73a2832b92a3c371760511b60648201526084016109bd565b6001600160a01b0382165f9081526012602052604090205460ff16611964576009546001600160a01b0383165f90815260036020526040902054611920908361242b565b11156119645760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016109bd565b305f90815260036020526040902054600854600e54908210159060ff16801561198a5750805b80156119995750601c5460ff16155b80156119bd57506001600160a01b0385165f9081526014602052604090205460ff16155b80156119e157506001600160a01b0385165f9081526013602052604090205460ff16155b8015611a0557506001600160a01b0384165f9081526013602052604090205460ff16155b8015611a20575043600d54600c54611a1d919061242b565b11155b15611a4557601c805460ff19166001179055611a3a611e1d565b601c805460ff191690555b601c546001600160a01b0386165f9081526013602052604090205460ff91821615911680611a8a57506001600160a01b0385165f9081526013602052604090205460ff165b15611a9257505f5b5f8115611c14576001600160a01b0386165f9081526014602052604090205460ff168015611ac157505f601654115b15611b4d57611ae66064611ae060165488611f6890919063ffffffff16565b90611f7a565b905060165460185482611af991906123f5565b611b03919061240c565b60115f828254611b13919061242b565b9091555050601654601754611b2890836123f5565b611b32919061240c565b60105f828254611b42919061242b565b90915550611bf69050565b6001600160a01b0387165f9081526014602052604090205460ff168015611b7557505f601954115b15611bf657611b946064611ae060195488611f6890919063ffffffff16565b9050601954601b5482611ba791906123f5565b611bb1919061240c565b60115f828254611bc1919061242b565b9091555050601954601a54611bd690836123f5565b611be0919061240c565b60105f828254611bf0919061242b565b90915550505b8015611c0757611c07873083611c79565b611c11818661252c565b94505b611c1f878787611c79565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b038316611ccf5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a204e6f742066726f6d20213d206164647265737328302900000060448201526064016109bd565b6001600160a01b038216611d255760405162461bcd60e51b815260206004820152601b60248201527f45524332303a204e6f7420746f20213d2061646472657373283029000000000060448201526064016109bd565b6001600160a01b0383165f9081526003602052604090205481811015611d8d5760405162461bcd60e51b815260206004820181905260248201527f45524332303a204e6f742062616c616e636546726f6d203e3d20616d6f756e7460448201526064016109bd565b6001600160a01b038085165f90815260036020526040808220858503905591851681529081208054849290611dc390849061242b565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611e0f91815260200190565b60405180910390a350505050565b5f80601154601054611e2f919061242b565b305f90815260036020526040902054909150811580611e4c575080155b15611e5657505050565b600854611e649060056123f5565b811115611e7c57600854611e799060056123f5565b90505b47611e8682611f85565b5f611e9147836120d5565b90505f611ead85611ae060115485611f6890919063ffffffff16565b600f546040519192506001600160a01b03169082905f81818185875af1925050503d805f8114611ef8576040519150601f19603f3d011682016040523d82523d5f602084013e611efd565b606091505b5050600e5460405191975061010090046001600160a01b03169047905f81818185875af1925050503d805f8114611f4f576040519150601f19603f3d011682016040523d82523d5f602084013e611f54565b606091505b50505f601081905560115550505050505050565b5f611f7382846123f5565b9392505050565b5f611f73828461240c565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110611fb857611fb861253f565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561200f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612033919061256b565b816001815181106120465761204661253f565b6001600160a01b03928316602091820292909201015260065461206c9130911684611369565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac947906120a49085905f90869030904290600401612586565b5f604051808303815f87803b1580156120bb575f80fd5b505af11580156120cd573d5f803e3d5ffd5b505050505050565b5f611f73828461252c565b5f602080835283518060208501525f5b8181101561210c578581018301518582016040015282016120f0565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611366575f80fd5b803561214b8161212c565b919050565b5f8060408385031215612161575f80fd5b823561216c8161212c565b946020939093013593505050565b5f805f6060848603121561218c575f80fd5b83356121978161212c565b925060208401356121a78161212c565b929592945050506040919091013590565b5f602082840312156121c8575f80fd5b5035919050565b8035801515811461214b575f80fd5b5f80604083850312156121ef575f80fd5b82356121fa8161212c565b9150612208602084016121cf565b90509250929050565b5f60208284031215612221575f80fd5b8135611f738161212c565b5f6020828403121561223c575f80fd5b611f73826121cf565b5f8060408385031215612256575f80fd5b50508035926020909101359150565b634e487b7160e01b5f52604160045260245ffd5b5f806040838503121561228a575f80fd5b823567ffffffffffffffff808211156122a1575f80fd5b818501915085601f8301126122b4575f80fd5b81356020828211156122c8576122c8612265565b8160051b604051601f19603f830116810181811086821117156122ed576122ed612265565b60405292835281830193508481018201928984111561230a575f80fd5b948201945b8386101561232f5761232086612140565b8552948201949382019361230f565b965061233e90508782016121cf565b9450505050509250929050565b5f806040838503121561235c575f80fd5b82356123678161212c565b915060208301356123778161212c565b809150509250929050565b600181811c9082168061239657607f821691505b6020821081036123b457634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252600d908201526c24b73b30b634b21037bbb732b960991b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761098d5761098d6123e1565b5f8261242657634e487b7160e01b5f52601260045260245ffd5b500490565b8082018082111561098d5761098d6123e1565b600181815b8085111561247857815f190482111561245e5761245e6123e1565b8085161561246b57918102915b93841c9390800290612443565b509250929050565b5f8261248e5750600161098d565b8161249a57505f61098d565b81600181146124b057600281146124ba576124d6565b600191505061098d565b60ff8411156124cb576124cb6123e1565b50506001821b61098d565b5060208310610133831016604e8410600b84101617156124f9575081810a61098d565b612503838361243e565b805f1904821115612516576125166123e1565b029392505050565b5f611f7360ff841683612480565b8181038181111561098d5761098d6123e1565b634e487b7160e01b5f52603260045260245ffd5b5f60018201612564576125646123e1565b5060010190565b5f6020828403121561257b575f80fd5b8151611f738161212c565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156125d65784516001600160a01b0316835293830193918301916001016125b1565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220d92348c517a8b3e8c160cc50eeb985c20261b419f6ef878eeb4c1fbe00e0ad2c64736f6c63430008180033

Deployed Bytecode Sourcemap

14249:10096:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14618:36;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;14618:36:0;;;;;;;;9934:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10506:169::-;;;;;;;;;;-1:-1:-1;10506:169:0;;;;;:::i;:::-;;:::i;:::-;;;1509:14:1;;1502:22;1484:41;;1472:2;1457:18;10506:169:0;1344:187:1;16949:156:0;;;;;;;;;;;;;:::i;:::-;;10255:108;;;;;;;;;;-1:-1:-1;10343:12:0;;10255:108;;14771:38;;;;;;;;;;;;;;;;11186:397;;;;;;;;;;-1:-1:-1;11186:397:0;;;;;:::i;:::-;;:::i;14373:23::-;;;;;;;;;;-1:-1:-1;14373:23:0;;;;-1:-1:-1;;;;;14373:23:0;;;;;;-1:-1:-1;;;;;2161:32:1;;;2143:51;;2131:2;2116:18;14373:23:0;1997:203:1;17720:346:0;;;;;;;;;;-1:-1:-1;17720:346:0;;;;;:::i;:::-;;:::i;10154:93::-;;;;;;;;;;-1:-1:-1;10154:93:0;;10237:2;2532:36:1;;2520:2;2505:18;10154:93:0;2390:184:1;15229:30:0;;;;;;;;;;;;;;;;14816:32;;;;;;;;;;;;;;;;11760:211;;;;;;;;;;-1:-1:-1;11760:211:0;;;;;:::i;:::-;;:::i;14661:31::-;;;;;;;;;;-1:-1:-1;14661:31:0;;;;;;;;19545:247;;;;;;;;;;-1:-1:-1;19545:247:0;;;;;:::i;:::-;;:::i;15048:33::-;;;;;;;;;;-1:-1:-1;15048:33:0;;;;;;;;18352:270;;;;;;;;;;-1:-1:-1;18352:270:0;;;;;:::i;:::-;;:::i;15196:26::-;;;;;;;;;;;;;;;;18072:274;;;;;;;;;;-1:-1:-1;18072:274:0;;;;;:::i;:::-;;:::i;18628:111::-;;;;;;;;;;-1:-1:-1;18628:111:0;;;;;:::i;:::-;;:::i;14449:38::-;;;;;;;;;;;;;;;;17235:147;;;;;;;;;;-1:-1:-1;17235:147:0;;;;;:::i;:::-;;:::i;10371:127::-;;;;;;;;;;-1:-1:-1;10371:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;10472:18:0;10445:7;10472:18;;;:9;:18;;;;;;;10371:127;1242:103;;;;;;;;;;;;;:::i;17524:84::-;;;;;;;;;;;;;:::i;14701:30::-;;;;;;;;;;-1:-1:-1;14701:30:0;;;;;;;-1:-1:-1;;;;;14701:30:0;;;14409:33;;;;;;;;;;;;;;;;14926:47;;;;;;;;;;-1:-1:-1;14926:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17111:118;;;;;;;;;;-1:-1:-1;17111:118:0;;;;;:::i;:::-;;:::i;959:87::-;;;;;;;;;;-1:-1:-1;1032:6:0;;-1:-1:-1;;;;;1032:6:0;959:87;;14738:24;;;;;;;;;;-1:-1:-1;14738:24:0;;;;-1:-1:-1;;;;;14738:24:0;;;17614:100;;;;;;;;;;-1:-1:-1;17614:100:0;;;;;:::i;:::-;;:::i;10042:104::-;;;;;;;;;;;;;:::i;11979:360::-;;;;;;;;;;-1:-1:-1;11979:360:0;;;;;:::i;:::-;;:::i;11591:161::-;;;;;;;;;;-1:-1:-1;11591:161:0;;;;;:::i;:::-;;:::i;15266:24::-;;;;;;;;;;;;;;;;14578:33;;;;;;;;;;;;;;;;18950:284;;;;;;;;;;-1:-1:-1;18950:284:0;;;;;:::i;:::-;;:::i;14982:57::-;;;;;;;;;;-1:-1:-1;14982:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;19242:291;;;;;;;;;;-1:-1:-1;19242:291:0;;;;;:::i;:::-;;:::i;15162:25::-;;;;;;;;;;;;;;;;18745:199;;;;;;;;;;-1:-1:-1;18745:199:0;;;;;:::i;:::-;;:::i;14330:36::-;;;;;;;;;;-1:-1:-1;14330:36:0;;;;-1:-1:-1;;;;;14330:36:0;;;14857:60;;;;;;;;;;-1:-1:-1;14857:60:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;14494:35;;;;;;;;;;;;;;;;17388:128;;;;;;;;;;-1:-1:-1;17388:128:0;;;;;:::i;:::-;;:::i;11027:151::-;;;;;;;;;;-1:-1:-1;11027:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;11143:18:0;;;11116:7;11143:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;11027:151;15090:27;;;;;;;;;;;;;;;;15124:31;;;;;;;;;;;;;;;;1054:180;;;;;;;;;;-1:-1:-1;1054:180:0;;;;;:::i;:::-;;:::i;14538:33::-;;;;;;;;;;-1:-1:-1;14538:33:0;;;;;;;;9934:100;9988:13;10021:5;10014:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9934:100;:::o;10506:169::-;10589:4;10606:39;476:10;10629:7;10638:6;10606:8;:39::i;:::-;-1:-1:-1;10663:4:0;10506:169;;;;;:::o;16949:156::-;1032:6;;-1:-1:-1;;;;;1032:6:0;476:10;890:23;882:49;;;;-1:-1:-1;;;882:49:0;;;;;;;:::i;:::-;;;;;;;;;17006:13:::1;:20:::0;;17022:4:::1;-1:-1:-1::0;;17006:20:0;;::::1;::::0;::::1;::::0;;;17037:11:::1;:18:::0;;;;::::1;::::0;;::::1;::::0;;17085:12:::1;17066:18;:31:::0;16949:156::o;11186:397::-;11283:4;11300:27;11310:4;11316:2;11320:6;11300:9;:27::i;:::-;-1:-1:-1;;;;;11357:17:0;;11338:16;11357:17;;;:11;:17;;;;;;;;476:10;11357:31;;;;;;;;11407:18;;;;11399:60;;;;-1:-1:-1;;;11399:60:0;;6638:2:1;11399:60:0;;;6620:21:1;6677:2;6657:18;;;6650:30;6716:31;6696:18;;;6689:59;6765:18;;11399:60:0;6436:353:1;11399:60:0;11495:47;11504:4;476:10;11535:6;11524:8;:17;11495:8;:47::i;:::-;-1:-1:-1;11571:4:0;;11186:397;-1:-1:-1;;;;11186:397:0:o;17720:346::-;1032:6;;-1:-1:-1;;;;;1032:6:0;476:10;890:23;882:49;;;;-1:-1:-1;;;882:49:0;;;;;;;:::i;:::-;17844:6:::1;17823:13;10343:12:::0;;;10255:108;17823:13:::1;:17;::::0;17839:1:::1;17823:17;:::i;:::-;17822:28;;;;:::i;:::-;17812:6;:38;;17804:104;;;::::0;-1:-1:-1;;;17804:104:0;;7523:2:1;17804:104:0::1;::::0;::::1;7505:21:1::0;7562:2;7542:18;;;7535:30;7601:34;7581:18;;;7574:62;-1:-1:-1;;;7652:18:1;;;7645:51;7713:19;;17804:104:0::1;7321:417:1::0;17804:104:0::1;17959:4;17938:13;10343:12:::0;;;10255:108;17938:13:::1;:17;::::0;17954:1:::1;17938:17;:::i;:::-;17937:26;;;;:::i;:::-;17927:6;:36;;17919:101;;;::::0;-1:-1:-1;;;17919:101:0;;7945:2:1;17919:101:0::1;::::0;::::1;7927:21:1::0;7984:2;7964:18;;;7957:30;8023:34;8003:18;;;7996:62;-1:-1:-1;;;8074:18:1;;;8067:50;8134:19;;17919:101:0::1;7743:416:1::0;17919:101:0::1;18031:18;:27:::0;17720:346::o;11760:211::-;476:10;11846:4;11895:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11895:34:0;;;;;;;;;;11846:4;;11863:78;;11886:7;;11895:45;;11932:8;;11895:45;:::i;:::-;11863:8;:78::i;19545:247::-;1032:6;;-1:-1:-1;;;;;1032:6:0;476:10;890:23;882:49;;;;-1:-1:-1;;;882:49:0;;;;;;;:::i;:::-;19664:8:::1;::::0;-1:-1:-1;;;;;19664:8:0;;::::1;19656:16:::0;;::::1;::::0;19648:86:::1;;;::::0;-1:-1:-1;;;19648:86:0;;8496:2:1;19648:86:0::1;::::0;::::1;8478:21:1::0;8535:2;8515:18;;;8508:30;8574:34;8554:18;;;8547:62;8645:27;8625:18;;;8618:55;8690:19;;19648:86:0::1;8294:421:1::0;19648:86:0::1;-1:-1:-1::0;;;;;19745:31:0;;;::::1;;::::0;;;:25:::1;:31;::::0;;;;:39;;-1:-1:-1;;19745:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19545:247::o;18352:270::-;1032:6;;-1:-1:-1;;;;;1032:6:0;476:10;890:23;882:49;;;;-1:-1:-1;;;882:49:0;;;;;;;:::i;:::-;18484:16:::1;10237:2:::0;18484::::1;:16;:::i;:::-;18475:4;18454:13;10343:12:::0;;;10255:108;18454:13:::1;:17;::::0;18470:1:::1;18454:17;:::i;:::-;18453:26;;;;:::i;:::-;18452:49;;;;:::i;:::-;18442:6;:59;;18434:119;;;::::0;-1:-1:-1;;;18434:119:0;;10299:2:1;18434:119:0::1;::::0;::::1;10281:21:1::0;10338:2;10318:18;;;10311:30;10377:34;10357:18;;;10350:62;-1:-1:-1;;;10428:18:1;;;10421:45;10483:19;;18434:119:0::1;10097:411:1::0;18434:119:0::1;18597:16;10237:2:::0;18597::::1;:16;:::i;:::-;18587:27;::::0;:6;:27:::1;:::i;:::-;18564:20;:50:::0;-1:-1:-1;18352:270:0:o;18072:274::-;1032:6;;-1:-1:-1;;;;;1032:6:0;476:10;890:23;882:49;;;;-1:-1:-1;;;882:49:0;;;;;;;:::i;:::-;18202:16:::1;10237:2:::0;18202::::1;:16;:::i;:::-;18193:4;18172:13;10343:12:::0;;;10255:108;18172:13:::1;:17;::::0;18188:1:::1;18172:17;:::i;:::-;18171:26;;;;:::i;:::-;18170:49;;;;:::i;:::-;18160:6;:59;;18152:122;;;::::0;-1:-1:-1;;;18152:122:0;;10715:2:1;18152:122:0::1;::::0;::::1;10697:21:1::0;10754:2;10734:18;;;10727:30;10793:34;10773:18;;;10766:62;-1:-1:-1;;;10844:18:1;;;10837:48;10902:19;;18152:122:0::1;10513:414:1::0;18152:122:0::1;18321:16;10237:2:::0;18321::::1;:16;:::i;:::-;18311:27;::::0;:6;:27:::1;:::i;:::-;18285:23;:53:::0;-1:-1:-1;18072:274:0:o;18628:111::-;1032:6;;-1:-1:-1;;;;;1032:6:0;476:10;890:23;882:49;;;;-1:-1:-1;;;882:49:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18707:15:0;;;::::1;;::::0;;;:9:::1;:15;::::0;;;;:24;;-1:-1:-1;;18707:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18628:111::o;17235:147::-;1032:6;;-1:-1:-1;;;;;1032:6:0;476:10;890:23;882:49;;;;-1:-1:-1;;;882:49:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17332:34:0;;;::::1;;::::0;;;:28:::1;:34;::::0;;;;:42;;-1:-1:-1;;17332:42:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17235:147::o;1242:103::-;1032:6;;-1:-1:-1;;;;;1032:6:0;476:10;890:23;882:49;;;;-1:-1:-1;;;882:49:0;;;;;;;:::i;:::-;1307:30:::1;1334:1;1307:18;:30::i;:::-;1242:103::o:0;17524:84::-;1032:6;;-1:-1:-1;;;;;1032:6:0;476:10;890:23;882:49;;;;-1:-1:-1;;;882:49:0;;;;;;;:::i;:::-;17578:14:::1;:22:::0;;-1:-1:-1;;17578:22:0::1;::::0;;17524:84::o;17111:118::-;1032:6;;-1:-1:-1;;;;;1032:6:0;476:10;890:23;882:49;;;;-1:-1:-1;;;882:49:0;;;;;;;:::i;:::-;17193:21:::1;:28:::0;17111:118::o;17614:100::-;1032:6;;-1:-1:-1;;;;;1032:6:0;476:10;890:23;882:49;;;;-1:-1:-1;;;882:49:0;;;;;;;:::i;:::-;17685:11:::1;:21:::0;;-1:-1:-1;;17685:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17614:100::o;10042:104::-;10098:13;10131:7;10124:14;;;;;:::i;11979:360::-;476:10;12065:4;12101:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;12101:34:0;;;;;;;;;;12154:20;;;;12146:64;;;;-1:-1:-1;;;12146:64:0;;11134:2:1;12146:64:0;;;11116:21:1;11173:2;11153:18;;;11146:30;11212:33;11192:18;;;11185:61;11263:18;;12146:64:0;10932:355:1;12146:64:0;12246:52;476:10;12269:7;12289:8;12278;:19;12246:8;:52::i;:::-;-1:-1:-1;12327:4:0;;11979:360;-1:-1:-1;;;11979:360:0:o;11591:161::-;11670:4;11687:35;476:10;11711:2;11715:6;11687:9;:35::i;18950:284::-;1032:6;;-1:-1:-1;;;;;1032:6:0;476:10;890:23;882:49;;;;-1:-1:-1;;;882:49:0;;;;;;;:::i;:::-;19043:15:::1;:30:::0;;;19084:9:::1;:21:::0;;;19130:27:::1;19096:9:::0;19061:12;19130:27:::1;:::i;:::-;19116:11;:41:::0;;;19191:2:::1;-1:-1:-1::0;19176:17:0::1;19168:58;;;::::0;-1:-1:-1;;;19168:58:0;;11494:2:1;19168:58:0::1;::::0;::::1;11476:21:1::0;11533:2;11513:18;;;11506:30;11572;11552:18;;;11545:58;11620:18;;19168:58:0::1;11292:352:1::0;19168:58:0::1;18950:284:::0;;:::o;19242:291::-;1032:6;;-1:-1:-1;;;;;1032:6:0;476:10;890:23;882:49;;;;-1:-1:-1;;;882:49:0;;;;;;;:::i;:::-;19336:16:::1;:31:::0;;;19378:10:::1;:22:::0;;;19426:29:::1;19391:9:::0;19355:12;19426:29:::1;:::i;:::-;19411:12;:44:::0;;;19490:2:::1;-1:-1:-1::0;19474:18:0::1;19466:59;;;::::0;-1:-1:-1;;;19466:59:0;;11851:2:1;19466:59:0::1;::::0;::::1;11833:21:1::0;11890:2;11870:18;;;11863:30;11929;11909:18;;;11902:58;11977:18;;19466:59:0::1;11649:352:1::0;18745:199:0;1032:6;;-1:-1:-1;;;;;1032:6:0;476:10;890:23;882:49;;;;-1:-1:-1;;;882:49:0;;;;;;;:::i;:::-;18843:9:::1;18838:99;18874:1;18861:5;:12;:14;;;;:::i;:::-;18856:1;:19;18838:99;;18919:6;18897:9;:19;18907:5;18913:1;18907:8;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;18897:19:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;18897:19:0;:28;;-1:-1:-1;;18897:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18877:3;::::1;::::0;::::1;:::i;:::-;;;;18838:99;;;;18745:199:::0;;:::o;17388:128::-;1032:6;;-1:-1:-1;;;;;1032:6:0;476:10;890:23;882:49;;;;-1:-1:-1;;;882:49:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17476:24:0;;;::::1;;::::0;;;:15:::1;:24;::::0;;;;:32;;-1:-1:-1;;17476:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17388:128::o;1054:180::-;1032:6;;-1:-1:-1;;;;;1032:6:0;476:10;890:23;882:49;;;;-1:-1:-1;;;882:49:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1143:22:0;::::1;1135:52;;;::::0;-1:-1:-1;;;1135:52:0;;12613:2:1;1135:52:0::1;::::0;::::1;12595:21:1::0;12652:2;12632:18;;;12625:30;-1:-1:-1;;;12671:18:1;;;12664:47;12728:18;;1135:52:0::1;12411:341:1::0;1135:52:0::1;1198:28;1217:8;1198:18;:28::i;:::-;1054:180:::0;:::o;10683:336::-;-1:-1:-1;;;;;10785:19:0;;10777:62;;;;-1:-1:-1;;;10777:62:0;;12959:2:1;10777:62:0;;;12941:21:1;12998:2;12978:18;;;12971:30;13037:32;13017:18;;;13010:60;13087:18;;10777:62:0;12757:354:1;10777:62:0;-1:-1:-1;;;;;10858:21:0;;10850:66;;;;-1:-1:-1;;;10850:66:0;;13318:2:1;10850:66:0;;;13300:21:1;;;13337:18;;;13330:30;13396:34;13376:18;;;13369:62;13448:18;;10850:66:0;13116:356:1;10850:66:0;-1:-1:-1;;;;;10927:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;10979:32;;160:25:1;;;10979:32:0;;133:18:1;10979:32:0;;;;;;;10683:336;;;:::o;20698:3042::-;-1:-1:-1;;;;;20830:18:0;;20822:58;;;;-1:-1:-1;;;20822:58:0;;13679:2:1;20822:58:0;;;13661:21:1;13718:2;13698:18;;;13691:30;13757:29;13737:18;;;13730:57;13804:18;;20822:58:0;13477:351:1;20822:58:0;-1:-1:-1;;;;;20899:16:0;;20891:54;;;;-1:-1:-1;;;20891:54:0;;14035:2:1;20891:54:0;;;14017:21:1;14074:2;14054:18;;;14047:30;14113:27;14093:18;;;14086:55;14158:18;;20891:54:0;13833:349:1;20891:54:0;-1:-1:-1;;;;;20965:15:0;;;;;;:9;:15;;;;;;;;20964:16;20956:57;;;;-1:-1:-1;;;20956:57:0;;14389:2:1;20956:57:0;;;14371:21:1;14428:2;14408:18;;;14401:30;14467;14447:18;;;14440:58;14515:18;;20956:57:0;14187:352:1;20956:57:0;-1:-1:-1;;;;;21033:13:0;;;;;;:9;:13;;;;;;;;21032:14;21024:57;;;;-1:-1:-1;;;21024:57:0;;14746:2:1;21024:57:0;;;14728:21:1;14785:2;14765:18;;;14758:30;14824:32;14804:18;;;14797:60;14874:18;;21024:57:0;14544:354:1;21024:57:0;21098:6;21108:1;21098:11;21094:93;;21126:28;21142:4;21148:2;21152:1;21126:15;:28::i;21094:93::-;21203:14;;;;21199:1078;;;1032:6;;-1:-1:-1;;;;;21238:15:0;;;1032:6;;21238:15;;;;:32;;-1:-1:-1;1032:6:0;;-1:-1:-1;;;;;21257:13:0;;;1032:6;;21257:13;;21238:32;:52;;;;-1:-1:-1;;;;;;21274:16:0;;;;21238:52;:77;;;;-1:-1:-1;;;;;;21294:21:0;;21308:6;21294:21;;21238:77;:90;;;;-1:-1:-1;21320:8:0;;;;21319:9;21238:90;21234:1032;;;21354:13;;;;21349:142;;-1:-1:-1;;;;;21400:21:0;;;;;;:15;:21;;;;;;;;;:44;;-1:-1:-1;;;;;;21425:19:0;;;;;;:15;:19;;;;;;;;21400:44;21392:79;;;;-1:-1:-1;;;21392:79:0;;15105:2:1;21392:79:0;;;15087:21:1;15144:2;15124:18;;;15117:30;-1:-1:-1;;;15163:18:1;;;15156:52;15225:18;;21392:79:0;14903:346:1;21392:79:0;-1:-1:-1;;;;;21515:31:0;;;;;;:25;:31;;;;;;;;:68;;;;-1:-1:-1;;;;;;21551:32:0;;;;;;:28;:32;;;;;;;;21550:33;21515:68;21511:740;;;21626:20;;21616:6;:30;;21608:96;;;;-1:-1:-1;;;21608:96:0;;15456:2:1;21608:96:0;;;15438:21:1;15495:2;15475:18;;;15468:30;15534:34;15514:18;;;15507:62;-1:-1:-1;;;15585:18:1;;;15578:51;15646:19;;21608:96:0;15254:417:1;21608:96:0;21761:23;;-1:-1:-1;;;;;10472:18:0;;10445:7;10472:18;;;:9;:18;;;;;;21735:22;;:6;:22;:::i;:::-;:49;;21727:81;;;;-1:-1:-1;;;21727:81:0;;15878:2:1;21727:81:0;;;15860:21:1;15917:2;15897:18;;;15890:30;-1:-1:-1;;;15936:18:1;;;15929:49;15995:18;;21727:81:0;15676:343:1;21727:81:0;21511:740;;;-1:-1:-1;;;;;21855:29:0;;;;;;:25;:29;;;;;;;;:68;;;;-1:-1:-1;;;;;;21889:34:0;;;;;;:28;:34;;;;;;;;21888:35;21855:68;21851:400;;;21966:20;;21956:6;:30;;21948:97;;;;-1:-1:-1;;;21948:97:0;;16226:2:1;21948:97:0;;;16208:21:1;16265:2;16245:18;;;16238:30;16304:34;16284:18;;;16277:62;-1:-1:-1;;;16355:18:1;;;16348:52;16417:19;;21948:97:0;16024:418:1;21851:400:0;-1:-1:-1;;;;;22093:32:0;;;;;;:28;:32;;;;;;;;22088:163;;22184:23;;-1:-1:-1;;;;;10472:18:0;;10445:7;10472:18;;;:9;:18;;;;;;22158:22;;:6;:22;:::i;:::-;:49;;22150:81;;;;-1:-1:-1;;;22150:81:0;;15878:2:1;22150:81:0;;;15860:21:1;15917:2;15897:18;;;15890:30;-1:-1:-1;;;15936:18:1;;;15929:49;15995:18;;22150:81:0;15676:343:1;22150:81:0;22328:4;22287:20;10472:18;;;:9;:18;;;;;;22376;;22409:11;;22360:34;;;;;22409:11;;:36;;;;;22438:7;22409:36;:63;;;;-1:-1:-1;22464:8:0;;;;22463:9;22409:63;:113;;;;-1:-1:-1;;;;;;22491:31:0;;;;;;:25;:31;;;;;;;;22490:32;22409:113;:153;;;;-1:-1:-1;;;;;;22541:21:0;;;;;;:15;:21;;;;;;;;22540:22;22409:153;:191;;;;-1:-1:-1;;;;;;22581:19:0;;;;;;:15;:19;;;;;;;;22580:20;22409:191;:264;;;;;22661:12;22636:21;;22617:18;;:40;;;;:::i;:::-;:56;;22409:264;22405:378;;;22700:8;:15;;-1:-1:-1;;22700:15:0;22711:4;22700:15;;;22730:10;:8;:10::i;:::-;22755:8;:16;;-1:-1:-1;;22755:16:0;;;22405:378;22807:8;;-1:-1:-1;;;;;22830:21:0;;22795:8;22830:21;;;:15;:21;;;;;;22807:8;;;;22806:9;;22830:21;;:44;;-1:-1:-1;;;;;;22855:19:0;;;;;;:15;:19;;;;;;;;22830:44;22826:74;;;-1:-1:-1;22895:5:0;22826:74;22913:12;22944:3;22940:747;;;-1:-1:-1;;;;;22968:29:0;;;;;;:25;:29;;;;;;;;:49;;;;;23016:1;23001:12;;:16;22968:49;22964:595;;;23045:33;23074:3;23045:24;23056:12;;23045:6;:10;;:24;;;;:::i;:::-;:28;;:33::i;:::-;23038:40;;23140:12;;23126:10;;23119:4;:17;;;;:::i;:::-;23118:34;;;;:::i;:::-;23097:17;;:55;;;;;;;:::i;:::-;;;;-1:-1:-1;;23226:12:0;;23206:16;;23199:23;;:4;:23;:::i;:::-;23198:40;;;;:::i;:::-;23171:23;;:67;;;;;;;:::i;:::-;;;;-1:-1:-1;22964:595:0;;-1:-1:-1;22964:595:0;;-1:-1:-1;;;;;23277:31:0;;;;;;:25;:31;;;;;;;;:50;;;;;23326:1;23312:11;;:15;23277:50;23273:286;;;23355:32;23383:3;23355:23;23366:11;;23355:6;:10;;:23;;;;:::i;:32::-;23348:39;;23448:11;;23435:9;;23428:4;:16;;;;:::i;:::-;23427:32;;;;:::i;:::-;23406:17;;:53;;;;;;;:::i;:::-;;;;-1:-1:-1;;23532:11:0;;23513:15;;23506:22;;:4;:22;:::i;:::-;23505:38;;;;:::i;:::-;23478:23;;:65;;;;;;;:::i;:::-;;;;-1:-1:-1;;23273:286:0;23577:8;;23573:73;;23604:42;23620:4;23634;23641;23604:15;:42::i;:::-;23661:14;23671:4;23661:14;;:::i;:::-;;;22940:747;23699:33;23715:4;23721:2;23725:6;23699:15;:33::i;:::-;20811:2929;;;;20698:3042;;;:::o;1353:191::-;1446:6;;;-1:-1:-1;;;;;1463:17:0;;;-1:-1:-1;;;;;;1463:17:0;;;;;;;1496:40;;1446:6;;;1463:17;1446:6;;1496:40;;1427:16;;1496:40;1416:128;1353:191;:::o;13483:607::-;-1:-1:-1;;;;;13580:18:0;;13572:60;;;;-1:-1:-1;;;13572:60:0;;16649:2:1;13572:60:0;;;16631:21:1;16688:2;16668:18;;;16661:30;16727:31;16707:18;;;16700:59;16776:18;;13572:60:0;16447:353:1;13572:60:0;-1:-1:-1;;;;;13651:16:0;;13643:56;;;;-1:-1:-1;;;13643:56:0;;17007:2:1;13643:56:0;;;16989:21:1;17046:2;17026:18;;;17019:30;17085:29;17065:18;;;17058:57;17132:18;;13643:56:0;16805:351:1;13643:56:0;-1:-1:-1;;;;;13781:15:0;;13759:19;13781:15;;;:9;:15;;;;;;13815:21;;;;13807:66;;;;-1:-1:-1;;;13807:66:0;;17363:2:1;13807:66:0;;;17345:21:1;;;17382:18;;;17375:30;17441:34;17421:18;;;17414:62;17493:18;;13807:66:0;17161:356:1;13807:66:0;-1:-1:-1;;;;;13909:15:0;;;;;;;:9;:15;;;;;;13927:20;;;13909:38;;13969:13;;;;;;;;:23;;13941:6;;13909:15;13969:23;;13941:6;;13969:23;:::i;:::-;;;;;;;;14023:2;-1:-1:-1;;;;;14008:26:0;14017:4;-1:-1:-1;;;;;14008:26:0;;14027:6;14008:26;;;;160:25:1;;148:2;133:18;;14:177;14008:26:0;;;;;;;;13561:529;13483:607;;;:::o;19798:892::-;19837:12;19860:25;19914:17;;19888:23;;:43;;;;:::i;:::-;19983:4;19942:20;10472:18;;;:9;:18;;;;;;19860:71;;-1:-1:-1;20004:22:0;;;:43;;-1:-1:-1;20030:17:0;;20004:43;20000:69;;;20062:7;;;19798:892::o;20000:69::-;20100:18;;:22;;20121:1;20100:22;:::i;:::-;20085:12;:37;20081:106;;;20153:18;;:22;;20174:1;20153:22;:::i;:::-;20138:37;;20081:106;20224:21;20256:30;20273:12;20256:16;:30::i;:::-;20299:18;20320:41;:21;20346:14;20320:25;:41::i;:::-;20299:62;;20372:17;20392:56;20430:17;20392:33;20407:17;;20392:10;:14;;:33;;;;:::i;:56::-;20483:9;;20475:45;;20372:76;;-1:-1:-1;;;;;;20483:9:0;;20372:76;;20475:45;;;;20372:76;20483:9;20475:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20553:15:0;;20545:65;;20461:59;;-1:-1:-1;20553:15:0;;;-1:-1:-1;;;;;20553:15:0;;20583:21;;20545:65;;;;20583:21;20553:15;20545:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20649:1:0;20623:23;:27;;;20661:17;:21;-1:-1:-1;;;;;;;19798:892:0:o;1575:98::-;1633:7;1660:5;1664:1;1660;:5;:::i;:::-;1653:12;1575:98;-1:-1:-1;;;1575:98:0:o;1959:::-;2017:7;2044:5;2048:1;2044;:5;:::i;23781:559::-;23926:16;;;23940:1;23926:16;;;;;;;;23902:21;;23926:16;;;;;;;;;;-1:-1:-1;23926:16:0;23902:40;;23971:4;23953;23958:1;23953:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;23953:23:0;;;:7;;;;;;;;;;:23;;;;23997:10;;:17;;;-1:-1:-1;;;23997:17:0;;;;:10;;;;;:15;;:17;;;;;23953:7;;23997:17;;;;;:10;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23987:4;23992:1;23987:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;23987:27:0;;;:7;;;;;;;;;:27;24059:10;;24027:52;;24044:4;;24059:10;24072:6;24027:8;:52::i;:::-;24118:10;;:214;;-1:-1:-1;;;24118:214:0;;-1:-1:-1;;;;;24118:10:0;;;;:61;;:214;;24194:6;;24118:10;;24259:4;;24286;;24306:15;;24118:214;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23831:509;23781:559;:::o;2604:98::-;2662:7;2689:5;2693:1;2689;:5;:::i;196:548:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;749:131::-;-1:-1:-1;;;;;824:31:1;;814:42;;804:70;;870:1;867;860:12;885:134;953:20;;982:31;953:20;982:31;:::i;:::-;885:134;;;:::o;1024:315::-;1092:6;1100;1153:2;1141:9;1132:7;1128:23;1124:32;1121:52;;;1169:1;1166;1159:12;1121:52;1208:9;1195:23;1227:31;1252:5;1227:31;:::i;:::-;1277:5;1329:2;1314:18;;;;1301:32;;-1:-1:-1;;;1024:315:1:o;1536:456::-;1613:6;1621;1629;1682:2;1670:9;1661:7;1657:23;1653:32;1650:52;;;1698:1;1695;1688:12;1650:52;1737:9;1724:23;1756:31;1781:5;1756:31;:::i;:::-;1806:5;-1:-1:-1;1863:2:1;1848:18;;1835:32;1876:33;1835:32;1876:33;:::i;:::-;1536:456;;1928:7;;-1:-1:-1;;;1982:2:1;1967:18;;;;1954:32;;1536:456::o;2205:180::-;2264:6;2317:2;2305:9;2296:7;2292:23;2288:32;2285:52;;;2333:1;2330;2323:12;2285:52;-1:-1:-1;2356:23:1;;2205:180;-1:-1:-1;2205:180:1:o;2579:160::-;2644:20;;2700:13;;2693:21;2683:32;;2673:60;;2729:1;2726;2719:12;2744:315;2809:6;2817;2870:2;2858:9;2849:7;2845:23;2841:32;2838:52;;;2886:1;2883;2876:12;2838:52;2925:9;2912:23;2944:31;2969:5;2944:31;:::i;:::-;2994:5;-1:-1:-1;3018:35:1;3049:2;3034:18;;3018:35;:::i;:::-;3008:45;;2744:315;;;;;:::o;3064:247::-;3123:6;3176:2;3164:9;3155:7;3151:23;3147:32;3144:52;;;3192:1;3189;3182:12;3144:52;3231:9;3218:23;3250:31;3275:5;3250:31;:::i;3316:180::-;3372:6;3425:2;3413:9;3404:7;3400:23;3396:32;3393:52;;;3441:1;3438;3431:12;3393:52;3464:26;3480:9;3464:26;:::i;3501:248::-;3569:6;3577;3630:2;3618:9;3609:7;3605:23;3601:32;3598:52;;;3646:1;3643;3636:12;3598:52;-1:-1:-1;;3669:23:1;;;3739:2;3724:18;;;3711:32;;-1:-1:-1;3501:248:1:o;3754:127::-;3815:10;3810:3;3806:20;3803:1;3796:31;3846:4;3843:1;3836:15;3870:4;3867:1;3860:15;3886:1191;3976:6;3984;4037:2;4025:9;4016:7;4012:23;4008:32;4005:52;;;4053:1;4050;4043:12;4005:52;4093:9;4080:23;4122:18;4163:2;4155:6;4152:14;4149:34;;;4179:1;4176;4169:12;4149:34;4217:6;4206:9;4202:22;4192:32;;4262:7;4255:4;4251:2;4247:13;4243:27;4233:55;;4284:1;4281;4274:12;4233:55;4320:2;4307:16;4342:4;4365:2;4361;4358:10;4355:36;;;4371:18;;:::i;:::-;4417:2;4414:1;4410:10;4449:2;4443:9;4512:2;4508:7;4503:2;4499;4495:11;4491:25;4483:6;4479:38;4567:6;4555:10;4552:22;4547:2;4535:10;4532:18;4529:46;4526:72;;;4578:18;;:::i;:::-;4614:2;4607:22;4664:18;;;4698:15;;;;-1:-1:-1;4740:11:1;;;4736:20;;;4768:19;;;4765:39;;;4800:1;4797;4790:12;4765:39;4824:11;;;;4844:148;4860:6;4855:3;4852:15;4844:148;;;4926:23;4945:3;4926:23;:::i;:::-;4914:36;;4877:12;;;;4970;;;;4844:148;;;5011:6;-1:-1:-1;5036:35:1;;-1:-1:-1;5052:18:1;;;5036:35;:::i;:::-;5026:45;;;;;;3886:1191;;;;;:::o;5316:388::-;5384:6;5392;5445:2;5433:9;5424:7;5420:23;5416:32;5413:52;;;5461:1;5458;5451:12;5413:52;5500:9;5487:23;5519:31;5544:5;5519:31;:::i;:::-;5569:5;-1:-1:-1;5626:2:1;5611:18;;5598:32;5639:33;5598:32;5639:33;:::i;:::-;5691:7;5681:17;;;5316:388;;;;;:::o;5709:380::-;5788:1;5784:12;;;;5831;;;5852:61;;5906:4;5898:6;5894:17;5884:27;;5852:61;5959:2;5951:6;5948:14;5928:18;5925:38;5922:161;;6005:10;6000:3;5996:20;5993:1;5986:31;6040:4;6037:1;6030:15;6068:4;6065:1;6058:15;5922:161;;5709:380;;;:::o;6094:337::-;6296:2;6278:21;;;6335:2;6315:18;;;6308:30;-1:-1:-1;;;6369:2:1;6354:18;;6347:43;6422:2;6407:18;;6094:337::o;6794:127::-;6855:10;6850:3;6846:20;6843:1;6836:31;6886:4;6883:1;6876:15;6910:4;6907:1;6900:15;6926:168;6999:9;;;7030;;7047:15;;;7041:22;;7027:37;7017:71;;7068:18;;:::i;7099:217::-;7139:1;7165;7155:132;;7209:10;7204:3;7200:20;7197:1;7190:31;7244:4;7241:1;7234:15;7272:4;7269:1;7262:15;7155:132;-1:-1:-1;7301:9:1;;7099:217::o;8164:125::-;8229:9;;;8250:10;;;8247:36;;;8263:18;;:::i;8720:416::-;8809:1;8846:5;8809:1;8860:270;8881:7;8871:8;8868:21;8860:270;;;8940:4;8936:1;8932:6;8928:17;8922:4;8919:27;8916:53;;;8949:18;;:::i;:::-;8999:7;8989:8;8985:22;8982:55;;;9019:16;;;;8982:55;9098:22;;;;9058:15;;;;8860:270;;;8864:3;8720:416;;;;;:::o;9141:806::-;9190:5;9220:8;9210:80;;-1:-1:-1;9261:1:1;9275:5;;9210:80;9309:4;9299:76;;-1:-1:-1;9346:1:1;9360:5;;9299:76;9391:4;9409:1;9404:59;;;;9477:1;9472:130;;;;9384:218;;9404:59;9434:1;9425:10;;9448:5;;;9472:130;9509:3;9499:8;9496:17;9493:43;;;9516:18;;:::i;:::-;-1:-1:-1;;9572:1:1;9558:16;;9587:5;;9384:218;;9686:2;9676:8;9673:16;9667:3;9661:4;9658:13;9654:36;9648:2;9638:8;9635:16;9630:2;9624:4;9621:12;9617:35;9614:77;9611:159;;;-1:-1:-1;9723:19:1;;;9755:5;;9611:159;9802:34;9827:8;9821:4;9802:34;:::i;:::-;9872:6;9868:1;9864:6;9860:19;9851:7;9848:32;9845:58;;;9883:18;;:::i;:::-;9921:20;;9141:806;-1:-1:-1;;;9141:806:1:o;9952:140::-;10010:5;10039:47;10080:4;10070:8;10066:19;10060:4;10039:47;:::i;12006:128::-;12073:9;;;12094:11;;;12091:37;;;12108:18;;:::i;12139:127::-;12200:10;12195:3;12191:20;12188:1;12181:31;12231:4;12228:1;12221:15;12255:4;12252:1;12245:15;12271:135;12310:3;12331:17;;;12328:43;;12351:18;;:::i;:::-;-1:-1:-1;12398:1:1;12387:13;;12271:135::o;17732:251::-;17802:6;17855:2;17843:9;17834:7;17830:23;17826:32;17823:52;;;17871:1;17868;17861:12;17823:52;17903:9;17897:16;17922:31;17947:5;17922:31;:::i;17988:980::-;18250:4;18298:3;18287:9;18283:19;18329:6;18318:9;18311:25;18355:2;18393:6;18388:2;18377:9;18373:18;18366:34;18436:3;18431:2;18420:9;18416:18;18409:31;18460:6;18495;18489:13;18526:6;18518;18511:22;18564:3;18553:9;18549:19;18542:26;;18603:2;18595:6;18591:15;18577:29;;18624:1;18634:195;18648:6;18645:1;18642:13;18634:195;;;18713:13;;-1:-1:-1;;;;;18709:39:1;18697:52;;18804:15;;;;18769:12;;;;18745:1;18663:9;18634:195;;;-1:-1:-1;;;;;;;18885:32:1;;;;18880:2;18865:18;;18858:60;-1:-1:-1;;;18949:3:1;18934:19;18927:35;18846:3;17988:980;-1:-1:-1;;;17988:980:1:o

Swarm Source

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