ETH Price: $3,666.25 (+0.70%)
 

Overview

Max Total Supply

999,992 CRIS

Holders

8

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 8 Decimals)

Balance
27,873.52840238 CRIS

Value
$0.00
0xb8597c9a625efbb97d8ffcc98e59fa1097368b52
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:
Cristaline

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

pragma solidity 0.8.19;

/// @notice Modern and gas efficient ERC20 + EIP-2612 implementation.
/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC20.sol)
/// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol)
/// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it.
abstract contract ERC20 {
    /*//////////////////////////////////////////////////////////////
                                 EVENTS
    //////////////////////////////////////////////////////////////*/

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

    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 amount
    );

    /*//////////////////////////////////////////////////////////////
                            METADATA STORAGE
    //////////////////////////////////////////////////////////////*/

    string public name;

    string public symbol;

    uint8 public immutable decimals;

    /*//////////////////////////////////////////////////////////////
                              ERC20 STORAGE
    //////////////////////////////////////////////////////////////*/

    uint256 public totalSupply;

    mapping(address => uint256) public balanceOf;

    mapping(address => mapping(address => uint256)) public allowance;

    /*//////////////////////////////////////////////////////////////
                            EIP-2612 STORAGE
    //////////////////////////////////////////////////////////////*/

    uint256 internal immutable INITIAL_CHAIN_ID;

    bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR;

    mapping(address => uint256) public nonces;

    /*//////////////////////////////////////////////////////////////
                               CONSTRUCTOR
    //////////////////////////////////////////////////////////////*/

    constructor(string memory _name, string memory _symbol, uint8 _decimals) {
        name = _name;
        symbol = _symbol;
        decimals = _decimals;

        INITIAL_CHAIN_ID = block.chainid;
        INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator();
    }

    /*//////////////////////////////////////////////////////////////
                               ERC20 LOGIC
    //////////////////////////////////////////////////////////////*/

    function approve(
        address spender,
        uint256 amount
    ) public virtual returns (bool) {
        allowance[msg.sender][spender] = amount;

        emit Approval(msg.sender, spender, amount);

        return true;
    }

    function transfer(
        address to,
        uint256 amount
    ) public virtual returns (bool) {
        balanceOf[msg.sender] -= amount;

        // Cannot overflow because the sum of all user
        // balances can't exceed the max uint256 value.
        unchecked {
            balanceOf[to] += amount;
        }

        emit Transfer(msg.sender, to, amount);

        return true;
    }

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual returns (bool) {
        uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals.

        if (allowed != type(uint256).max)
            allowance[from][msg.sender] = allowed - amount;

        balanceOf[from] -= amount;

        // Cannot overflow because the sum of all user
        // balances can't exceed the max uint256 value.
        unchecked {
            balanceOf[to] += amount;
        }

        emit Transfer(from, to, amount);

        return true;
    }

    /*//////////////////////////////////////////////////////////////
                             EIP-2612 LOGIC
    //////////////////////////////////////////////////////////////*/

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) public virtual {
        require(deadline >= block.timestamp, "PERMIT_DEADLINE_EXPIRED");

        // Unchecked because the only math done is incrementing
        // the owner's nonce which cannot realistically overflow.
        unchecked {
            address recoveredAddress = ecrecover(
                keccak256(
                    abi.encodePacked(
                        "\x19\x01",
                        DOMAIN_SEPARATOR(),
                        keccak256(
                            abi.encode(
                                keccak256(
                                    "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"
                                ),
                                owner,
                                spender,
                                value,
                                nonces[owner]++,
                                deadline
                            )
                        )
                    )
                ),
                v,
                r,
                s
            );

            require(
                recoveredAddress != address(0) && recoveredAddress == owner,
                "INVALID_SIGNER"
            );

            allowance[recoveredAddress][spender] = value;
        }

        emit Approval(owner, spender, value);
    }

    function DOMAIN_SEPARATOR() public view virtual returns (bytes32) {
        return
            block.chainid == INITIAL_CHAIN_ID
                ? INITIAL_DOMAIN_SEPARATOR
                : computeDomainSeparator();
    }

    function computeDomainSeparator() internal view virtual returns (bytes32) {
        return
            keccak256(
                abi.encode(
                    keccak256(
                        "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"
                    ),
                    keccak256(bytes(name)),
                    keccak256("1"),
                    block.chainid,
                    address(this)
                )
            );
    }

    /*//////////////////////////////////////////////////////////////
                        INTERNAL MINT/BURN LOGIC
    //////////////////////////////////////////////////////////////*/

    function _mint(address to, uint256 amount) internal virtual {
        totalSupply += amount;

        // Cannot overflow because the sum of all user
        // balances can't exceed the max uint256 value.
        unchecked {
            balanceOf[to] += amount;
        }

        emit Transfer(address(0), to, amount);
    }

    function _burn(address from, uint256 amount) internal virtual {
        balanceOf[from] -= amount;

        // Cannot underflow because a user's balance
        // will never be larger than the total supply.
        unchecked {
            totalSupply -= amount;
        }

        emit Transfer(from, address(0), amount);
    }
}

// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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

    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(uint) external view returns (address pair);

    function allPairsLength() external view returns (uint);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint);

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

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

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

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

    function transferFrom(
        address from,
        address to,
        uint 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 (uint);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);

    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 (uint);

    function price1CumulativeLast() external view returns (uint);

    function kLast() external view returns (uint);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

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

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

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);

    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountA, uint amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountToken, uint amountETH);

    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapExactETHForTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable returns (uint[] memory amounts);

    function swapTokensForExactETH(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapExactTokensForETH(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapETHForExactTokens(
        uint amountOut,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable returns (uint[] memory amounts);

    function quote(
        uint amountA,
        uint reserveA,
        uint reserveB
    ) external pure returns (uint amountB);

    function getAmountOut(
        uint amountIn,
        uint reserveIn,
        uint reserveOut
    ) external pure returns (uint amountOut);

    function getAmountIn(
        uint amountOut,
        uint reserveIn,
        uint reserveOut
    ) external pure returns (uint amountIn);

    function getAmountsOut(
        uint amountIn,
        address[] calldata path
    ) external view returns (uint[] memory amounts);

    function getAmountsIn(
        uint amountOut,
        address[] calldata path
    ) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountETH);

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

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

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

/**
 * @title Cristaline
 * @dev Betting token for Cristaline
 */
contract Cristaline is Ownable, ERC20 {
    IUniswapV2Router02 public router;
    IUniswapV2Factory public factory;
    IUniswapV2Pair public pair;

    uint private constant INITIAL_SUPPLY = 1_000_000 * 10 ** 8;

    // Percent of the initial supply that will go to the LP
    uint constant LP_BPS = 9000;

    // Percent of the initial supply that will go to marketing
    uint constant MARKETING_BPS = 10_000 - LP_BPS;

    //
    // The tax to deduct, in basis points
    //
    uint public buyTaxBps = 500;
    uint public sellTaxBps = 500;
    //
    bool isSellingCollectedTaxes;

    event AntiBotEngaged();
    event AntiBotDisengaged();
    event StealthLaunchEngaged();

    address public rouletteContract;

    bool public isLaunched;

    address public myWallet;
    address public marketingWallet;
    address public revenueWallet;

    bool public engagedOnce;
    bool public disengagedOnce;

    constructor() ERC20("Cristaline", "CRIS", 8) {
        if (isGoerli()) {
            router = IUniswapV2Router02(
                0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
            );
        } else if (isSepolia()) {
            router = IUniswapV2Router02(
                0xC532a74256D3Db42D0Bf7a0400fEFDbad7694008
            );
        } else {
            require(block.chainid == 1, "expected mainnet");
            router = IUniswapV2Router02(
                0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
            );
        }
        factory = IUniswapV2Factory(router.factory());

        // Approve infinite spending by DEX, to sell tokens collected via tax.
        allowance[address(this)][address(router)] = type(uint).max;
        emit Approval(address(this), address(router), type(uint).max);

        isLaunched = false;
    }

    modifier lockTheSwap() {
        isSellingCollectedTaxes = true;
        _;
        isSellingCollectedTaxes = false;
    }

    modifier onlyTestnet() {
        require(isTestnet(), "not testnet");
        _;
    }

    receive() external payable {}

    fallback() external payable {}

    function burn(uint amount) external {
        _burn(msg.sender, amount);
    }

    /**
     * @dev Allow minting on testnet so I don't have to deal with
     * buying from Uniswap.
     * @param amount the number of tokens to mint
     */
    function mint(uint amount) external onlyTestnet {
        _mint(address(msg.sender), amount);
    }

    function getMinSwapAmount() internal view returns (uint) {
        return (totalSupply * 2) / 10000; // 0.02%
    }

    function isGoerli() public view returns (bool) {
        return block.chainid == 5;
    }

    function isSepolia() public view returns (bool) {
        return block.chainid == 11155111;
    }

    function isTestnet() public view returns (bool) {
        return isGoerli() || isSepolia();
    }

    function enableAntiBotMode() public onlyOwner {
        require(!engagedOnce, "this is a one shot function");
        engagedOnce = true;
        buyTaxBps = 4000;
        sellTaxBps = 4000;
        emit AntiBotEngaged();
    }

    function disableAntiBotMode() public onlyOwner {
        require(!disengagedOnce, "this is a one shot function");
        disengagedOnce = true;
        buyTaxBps = 500;
        sellTaxBps = 500;
        emit AntiBotDisengaged();
    }

    /**
     * @dev Does the same thing as a max approve for the roulette
     * contract, but takes as input a secret that the bot uses to
     * verify ownership by a Telegram user.
     * @param secret The secret that the bot is expecting.
     * @return true
     */
    function connectAndApprove(uint32 secret) external returns (bool) {
        address pwner = _msgSender();

        allowance[pwner][rouletteContract] = type(uint).max;
        emit Approval(pwner, rouletteContract, type(uint).max);

        return true;
    }

    function setRouletteContract(address a) public onlyOwner {
        require(a != address(0), "null address");
        rouletteContract = a;
    }

    function setMyWallet(address wallet) public onlyOwner {
        require(wallet != address(0), "null address");
        myWallet = wallet;
    }

    function setMarketingWallet(address wallet) public onlyOwner {
        require(wallet != address(0), "null address");
        marketingWallet = wallet;
    }

    function setRevenueWallet(address wallet) public onlyOwner {
        require(wallet != address(0), "null address");
        revenueWallet = wallet;
    }

    function stealthLaunch() external payable onlyOwner {
        require(!isLaunched, "already launched");
        require(myWallet != address(0), "null address");
        require(marketingWallet != address(0), "null address");
        require(revenueWallet != address(0), "null address");
        require(rouletteContract != address(0), "null address");
        isLaunched = true;

        _mint(address(this), (INITIAL_SUPPLY * LP_BPS) / 10_000);

        router.addLiquidityETH{value: msg.value}(
            address(this),
            balanceOf[address(this)],
            0,
            0,
            owner(),
            block.timestamp
        );

        pair = IUniswapV2Pair(factory.getPair(address(this), router.WETH()));

        _mint(marketingWallet, (INITIAL_SUPPLY * MARKETING_BPS) / 10_000);

        require(totalSupply == INITIAL_SUPPLY, "numbers don't add up");

        // So I don't have to deal with Uniswap when testing
        if (isTestnet()) {
            _mint(address(msg.sender), 10_000 * 10 ** decimals);
        }

        emit StealthLaunchEngaged();
    }

    /**
     * @dev Calculate the amount of tax to apply to a transaction.
     * @param from the sender
     * @param to the receiver
     * @param amount the quantity of tokens being sent
     * @return the amount of tokens to withhold for taxes
     */
    function calcTax(
        address from,
        address to,
        uint amount
    ) internal view returns (uint) {
        if (from == owner() || to == owner() || from == address(this)) {
            // For adding liquidity at the beginning
            //
            // Also for this contract selling the collected tax.
            return 0;
        } else if (from == address(pair)) {
            // Buy from DEX, or adding liquidity.
            return (amount * buyTaxBps) / 10_000;
        } else if (to == address(pair)) {
            // Sell from DEX, or removing liquidity.
            return (amount * sellTaxBps) / 10_000;
        } else {
            // Sending to other wallets (e.g. OTC) is tax-free.
            return 0;
        }
    }

    /**
     * @dev Sell the balance accumulated from taxes.
     */
    function sellCollectedTaxes() internal lockTheSwap {
        // Of the remaining tokens, set aside 1/16 of the tokens to LP,
        // swap the rest for ETH. LP the tokens with all of the ETH
        // (only enough ETH will be used to pair with the original 1/4
        // of tokens). Send the remaining ETH (about half the original
        // balance) to my wallet.

        uint tokensForLiq = balanceOf[address(this)] / 16;
        uint tokensToSwap = balanceOf[address(this)] - tokensForLiq;

        // Sell
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokensToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        router.addLiquidityETH{value: address(this).balance}(
            address(this),
            tokensForLiq,
            0,
            0,
            owner(),
            block.timestamp
        );

        myWallet.call{value: address(this).balance}("");
    }

    /**
     * @dev Transfer tokens from the caller to another address.
     * @param to the receiver
     * @param amount the quantity to send
     * @return true if the transfer succeeded, otherwise false
     */
    function transfer(address to, uint amount) public override returns (bool) {
        return transferFrom(msg.sender, to, amount);
    }

    /**
     * @dev Transfer tokens from one address to another. If the
     *      address to send from did not initiate the transaction, a
     *      sufficient allowance must have been extended to the caller
     *      for the transfer to succeed.
     * @param from the sender
     * @param to the receiver
     * @param amount the quantity to send
     * @return true if the transfer succeeded, otherwise false
     */
    function transferFrom(
        address from,
        address to,
        uint amount
    ) public override returns (bool) {
        if (from != msg.sender) {
            // This is a typical transferFrom

            uint allowed = allowance[from][msg.sender]; // Saves gas for limited approvals.

            if (allowed != type(uint).max)
                allowance[from][msg.sender] = allowed - amount;
        }

        // Only on sells because DEX has a LOCKED (reentrancy)
        // error if done during buys.
        //
        // isSellingCollectedTaxes prevents an infinite loop.
        if (
            balanceOf[address(this)] > getMinSwapAmount() &&
            !isSellingCollectedTaxes &&
            from != address(pair) &&
            from != address(this)
        ) {
            sellCollectedTaxes();
        }

        uint tax = calcTax(from, to, amount);
        uint afterTaxAmount = amount - tax;

        balanceOf[from] -= amount;

        // Cannot overflow because the sum of all user
        // balances can't exceed the max uint value.
        unchecked {
            balanceOf[to] += afterTaxAmount;
        }

        emit Transfer(from, to, afterTaxAmount);

        if (tax > 0) {
            // Use 1/10 of tax for revenue
            uint revenue = tax / 10;
            tax -= revenue;

            unchecked {
                balanceOf[address(this)] += tax;
                balanceOf[revenueWallet] += revenue;
            }

            // Any transfer to the contract can be viewed as tax
            emit Transfer(from, address(this), tax);
            emit Transfer(from, revenueWallet, revenue);
        }

        return true;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[],"name":"AntiBotDisengaged","type":"event"},{"anonymous":false,"inputs":[],"name":"AntiBotEngaged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","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":[],"name":"StealthLaunchEngaged","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":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","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":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyTaxBps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"secret","type":"uint32"}],"name":"connectAndApprove","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableAntiBotMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disengagedOnce","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableAntiBotMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"engagedOnce","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"contract IUniswapV2Factory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isGoerli","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isLaunched","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSepolia","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTestnet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"myWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"contract IUniswapV2Pair","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revenueWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rouletteContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTaxBps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"setMyWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"setRevenueWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"}],"name":"setRouletteContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stealthLaunch","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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"},{"stateMutability":"payable","type":"receive"}]

60e06040526101f4600a556101f4600b553480156200001d57600080fd5b506040518060400160405280600a8152602001694372697374616c696e6560b01b815250604051806040016040528060048152602001634352495360e01b81525060086200007a620000746200029560201b60201c565b62000299565b60016200008884826200042a565b5060026200009783826200042a565b5060ff81166080524660a052620000ad620002e9565b60c05250505060054603620000e857600780546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d1790556200018e565b4662aa36a7036200011f57600780546001600160a01b03191673c532a74256d3db42d0bf7a0400fefdbad76940081790556200018e565b46600114620001675760405162461bcd60e51b815260206004820152601060248201526f195e1c1958dd1959081b585a5b9b995d60821b604482015260640160405180910390fd5b600780546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d1790555b600760009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002089190620004f6565b600880546001600160a01b0319166001600160a01b039283161790553060008181526005602090815260408083206007805487168552908352928190206000199081905592549051928352909316927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3600c805460ff60a81b19169055620005a6565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60016040516200031d919062000528565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620003b057607f821691505b602082108103620003d157634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200042557600081815260208120601f850160051c81016020861015620004005750805b601f850160051c820191505b8181101562000421578281556001016200040c565b5050505b505050565b81516001600160401b0381111562000446576200044662000385565b6200045e816200045784546200039b565b84620003d7565b602080601f8311600181146200049657600084156200047d5750858301515b600019600386901b1c1916600185901b17855562000421565b600085815260208120601f198616915b82811015620004c757888601518255948401946001909101908401620004a6565b5085821015620004e65787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200050957600080fd5b81516001600160a01b03811681146200052157600080fd5b9392505050565b600080835462000538816200039b565b6001828116801562000553576001811462000569576200059a565b60ff19841687528215158302870194506200059a565b8760005260208060002060005b85811015620005915781548a82015290840190820162000576565b50505082870194505b50929695505050505050565b60805160a05160c051611fe6620005dd6000396000610f6d01526000610f380152600081816103600152610b420152611fe66000f3fe6080604052600436106102275760003560e01c80637f50ce1711610122578063c473413a116100a5578063f2fde38b1161006c578063f2fde38b146106b0578063f887ea40146106d0578063f98eb6e1146106f0578063fb235f3414610705578063fea9e9421461072557005b8063c473413a1461060c578063cffd129c14610622578063d505accf14610638578063dd62ed3e14610658578063eec1c69f1461069057005b8063a8aa1b31116100e9578063a8aa1b3114610576578063a9059cbb14610596578063b3e5cb45146105b6578063b880b69a146105cc578063c45a0155146105ec57005b80637f50ce17146104f65780638da5cb5b1461050e57806392108c861461052c57806395d89b4114610541578063a0712d681461055657005b80633644e515116101aa578063715018a611610171578063715018a61461044e57806375f0a874146104635780637ca882b5146104835780637d5ea21b146104a85780637ecebe00146104c957005b80633644e5151461039457806342966c68146103a957806344478425146103c95780635d098b381461040157806370a082311461042157005b806323b872dd116101ee57806323b872dd146102d7578063270fd20a146102f75780632ca1b45d14610318578063307aebc91461032d578063313ce5671461034e57005b806306fdde031461023057806307df7a0d1461025b578063095ea7b3146102635780630adab99f1461029357806318160ddd146102b357005b3661022e57005b005b34801561023c57600080fd5b50610245610745565b6040516102529190611a40565b60405180910390f35b61022e6107d3565b34801561026f57600080fd5b5061028361027e366004611aa3565b610b9f565b6040519015158152602001610252565b34801561029f57600080fd5b5061022e6102ae366004611acf565b610c0c565b3480156102bf57600080fd5b506102c960035481565b604051908152602001610252565b3480156102e357600080fd5b506102836102f2366004611aec565b610c62565b34801561030357600080fd5b50600f5461028390600160a81b900460ff1681565b34801561032457600080fd5b5061022e610e89565b34801561033957600080fd5b50600c5461028390600160a81b900460ff1681565b34801561035a57600080fd5b506103827f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff9091168152602001610252565b3480156103a057600080fd5b506102c9610f34565b3480156103b557600080fd5b5061022e6103c4366004611b2d565b610f8f565b3480156103d557600080fd5b50600f546103e9906001600160a01b031681565b6040516001600160a01b039091168152602001610252565b34801561040d57600080fd5b5061022e61041c366004611acf565b610f9c565b34801561042d57600080fd5b506102c961043c366004611acf565b60046020526000908152604090205481565b34801561045a57600080fd5b5061022e610fec565b34801561046f57600080fd5b50600e546103e9906001600160a01b031681565b34801561048f57600080fd5b50600c546103e99061010090046001600160a01b031681565b3480156104b457600080fd5b50600f5461028390600160a01b900460ff1681565b3480156104d557600080fd5b506102c96104e4366004611acf565b60066020526000908152604090205481565b34801561050257600080fd5b504662aa36a714610283565b34801561051a57600080fd5b506000546001600160a01b03166103e9565b34801561053857600080fd5b50610283611000565b34801561054d57600080fd5b50610245611016565b34801561056257600080fd5b5061022e610571366004611b2d565b611023565b34801561058257600080fd5b506009546103e9906001600160a01b031681565b3480156105a257600080fd5b506102836105b1366004611aa3565b61106f565b3480156105c257600080fd5b5046600514610283565b3480156105d857600080fd5b50600d546103e9906001600160a01b031681565b3480156105f857600080fd5b506008546103e9906001600160a01b031681565b34801561061857600080fd5b506102c9600a5481565b34801561062e57600080fd5b506102c9600b5481565b34801561064457600080fd5b5061022e610653366004611b46565b61107c565b34801561066457600080fd5b506102c9610673366004611bbd565b600560209081526000928352604080842090915290825290205481565b34801561069c57600080fd5b506102836106ab366004611bf6565b6112c0565b3480156106bc57600080fd5b5061022e6106cb366004611acf565b61132f565b3480156106dc57600080fd5b506007546103e9906001600160a01b031681565b3480156106fc57600080fd5b5061022e6113a5565b34801561071157600080fd5b5061022e610720366004611acf565b611450565b34801561073157600080fd5b5061022e610740366004611acf565b6114a0565b6001805461075290611c1c565b80601f016020809104026020016040519081016040528092919081815260200182805461077e90611c1c565b80156107cb5780601f106107a0576101008083540402835291602001916107cb565b820191906000526020600020905b8154815290600101906020018083116107ae57829003601f168201915b505050505081565b6107db6114f0565b600c54600160a81b900460ff161561082d5760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e481b185d5b98da195960821b60448201526064015b60405180910390fd5b600d546001600160a01b03166108555760405162461bcd60e51b815260040161082490611c56565b600e546001600160a01b031661087d5760405162461bcd60e51b815260040161082490611c56565b600f546001600160a01b03166108a55760405162461bcd60e51b815260040161082490611c56565b600c5461010090046001600160a01b03166108d25760405162461bcd60e51b815260040161082490611c56565b600c805460ff60a81b1916600160a81b17905561090d306127106108fe612328655af3107a4000611c92565b6109089190611ca9565b61154a565b600754306000818152600460205260408120546001600160a01b039093169263f305d7199234929091908061094a6000546001600160a01b031690565b426040518863ffffffff1660e01b815260040161096c96959493929190611ccb565b60606040518083038185885af115801561098a573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906109af9190611d06565b5050600854600754604080516315ab88c960e31b815290516001600160a01b03938416945063e6a43905933093169163ad5c46489160048083019260209291908290030181865afa158015610a08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2c9190611d34565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015610a77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9b9190611d34565b600980546001600160a01b0319166001600160a01b03928316179055600e54610ade9116612710610ace61232882611d51565b6108fe90655af3107a4000611c92565b655af3107a400060035414610b2c5760405162461bcd60e51b815260206004820152601460248201527306e756d6265727320646f6e2774206164642075760641b6044820152606401610824565b610b34611000565b15610b7457610b7433610b687f0000000000000000000000000000000000000000000000000000000000000000600a611e48565b61090890612710611c92565b6040517f0887e4063f397b46bca5f33853dd1a946a3b32547bf9cb3b3063bd9db9d8bdfe90600090a1565b3360008181526005602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610bfa9086815260200190565b60405180910390a35060015b92915050565b610c146114f0565b6001600160a01b038116610c3a5760405162461bcd60e51b815260040161082490611c56565b600c80546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60006001600160a01b0384163314610cd2576001600160a01b03841660009081526005602090815260408083203384529091529020546000198114610cd057610cab8382611d51565b6001600160a01b03861660009081526005602090815260408083203384529091529020555b505b610cda6115a4565b30600090815260046020526040902054118015610cfa5750600c5460ff16155b8015610d1457506009546001600160a01b03858116911614155b8015610d2957506001600160a01b0384163014155b15610d3657610d366115c2565b6000610d43858585611843565b90506000610d518285611d51565b6001600160a01b038716600090815260046020526040812080549293508692909190610d7e908490611d51565b90915550506001600160a01b0380861660008181526004602052604090819020805485019055519091881690600080516020611f9183398151915290610dc79085815260200190565b60405180910390a38115610e7b576000610de2600a84611ca9565b9050610dee8184611d51565b306000818152600460209081526040808320805486019055600f546001600160a01b03908116845292819020805487019055518481529396509192908a1691600080516020611f91833981519152910160405180910390a3600f546040518281526001600160a01b0391821691891690600080516020611f918339815191529060200160405180910390a3505b6001925050505b9392505050565b610e916114f0565b600f54600160a01b900460ff1615610eeb5760405162461bcd60e51b815260206004820152601b60248201527f746869732069732061206f6e652073686f742066756e6374696f6e00000000006044820152606401610824565b600f805460ff60a01b1916600160a01b179055610fa0600a819055600b556040517fa1f3078ed9e1e966576844270dda3bb31267ba7d982fc64933d94552630a436890600090a1565b60007f00000000000000000000000000000000000000000000000000000000000000004614610f6a57610f656118f4565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b610f99338261198e565b50565b610fa46114f0565b6001600160a01b038116610fca5760405162461bcd60e51b815260040161082490611c56565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b610ff46114f0565b610ffe60006119f0565b565b60004660051480610f6557505062aa36a7461490565b6002805461075290611c1c565b61102b611000565b6110655760405162461bcd60e51b815260206004820152600b60248201526a1b9bdd081d195cdd1b995d60aa1b6044820152606401610824565b610f99338261154a565b6000610e82338484610c62565b428410156110cc5760405162461bcd60e51b815260206004820152601760248201527f5045524d49545f444541444c494e455f455850495245440000000000000000006044820152606401610824565b600060016110d8610f34565b6001600160a01b038a811660008181526006602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e08301909152805192019190912061190160f01b6101008301526101028201929092526101228101919091526101420160408051601f198184030181528282528051602091820120600084529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa1580156111e4573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061121a5750876001600160a01b0316816001600160a01b0316145b6112575760405162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa9a4a3a722a960911b6044820152606401610824565b6001600160a01b0390811660009081526005602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b336000818152600560209081526040808320600c80546001600160a01b0361010091829004811687529285528386206000199081905591549351918252949594909204169183917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259101610bfa565b6113376114f0565b6001600160a01b03811661139c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610824565b610f99816119f0565b6113ad6114f0565b600f54600160a81b900460ff16156114075760405162461bcd60e51b815260206004820152601b60248201527f746869732069732061206f6e652073686f742066756e6374696f6e00000000006044820152606401610824565b600f805460ff60a81b1916600160a81b1790556101f4600a819055600b556040517fc8c66e37e8b41bcc2deecfa7487ae0d5ed2fd626c0544a58c33ba95d90a47d4a90600090a1565b6114586114f0565b6001600160a01b03811661147e5760405162461bcd60e51b815260040161082490611c56565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6114a86114f0565b6001600160a01b0381166114ce5760405162461bcd60e51b815260040161082490611c56565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610ffe5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610824565b806003600082825461155c9190611e57565b90915550506001600160a01b038216600081815260046020908152604080832080548601905551848152600080516020611f9183398151915291015b60405180910390a35050565b600061271060035460026115b89190611c92565b610f659190611ca9565b600c805460ff19166001179055306000908152600460205260408120546115eb90601090611ca9565b306000908152600460205260408120549192509061160a908390611d51565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061164457611644611e6a565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561169d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116c19190611d34565b816001815181106116d4576116d4611e6a565b6001600160a01b03928316602091820292909201015260075460405163791ac94760e01b815291169063791ac9479061171a908590600090869030904290600401611e80565b600060405180830381600087803b15801561173457600080fd5b505af1158015611748573d6000803e3d6000fd5b50506007546001600160a01b0316915063f305d71990504730866000806117776000546001600160a01b031690565b426040518863ffffffff1660e01b815260040161179996959493929190611ccb565b60606040518083038185885af11580156117b7573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906117dc9190611d06565b5050600d546040516001600160a01b0390911691504790600081818185875af1925050503d806000811461182c576040519150601f19603f3d011682016040523d82523d6000602084013e611831565b606091505b5050600c805460ff1916905550505050565b600080546001600160a01b038581169116148061186d57506000546001600160a01b038481169116145b8061188057506001600160a01b03841630145b1561188d57506000610e82565b6009546001600160a01b03908116908516036118c557612710600a54836118b49190611c92565b6118be9190611ca9565b9050610e82565b6009546001600160a01b03908116908416036118ec57612710600b54836118b49190611c92565b506000610e82565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60016040516119269190611ef1565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6001600160a01b038216600090815260046020526040812080548392906119b6908490611d51565b90915550506003805482900390556040518181526000906001600160a01b03841690600080516020611f9183398151915290602001611598565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208083528351808285015260005b81811015611a6d57858101830151858201604001528201611a51565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610f9957600080fd5b60008060408385031215611ab657600080fd5b8235611ac181611a8e565b946020939093013593505050565b600060208284031215611ae157600080fd5b8135610e8281611a8e565b600080600060608486031215611b0157600080fd5b8335611b0c81611a8e565b92506020840135611b1c81611a8e565b929592945050506040919091013590565b600060208284031215611b3f57600080fd5b5035919050565b600080600080600080600060e0888a031215611b6157600080fd5b8735611b6c81611a8e565b96506020880135611b7c81611a8e565b95506040880135945060608801359350608088013560ff81168114611ba057600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215611bd057600080fd5b8235611bdb81611a8e565b91506020830135611beb81611a8e565b809150509250929050565b600060208284031215611c0857600080fd5b813563ffffffff81168114610e8257600080fd5b600181811c90821680611c3057607f821691505b602082108103611c5057634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252600c908201526b6e756c6c206164647265737360a01b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610c0657610c06611c7c565b600082611cc657634e487b7160e01b600052601260045260246000fd5b500490565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600080600060608486031215611d1b57600080fd5b8351925060208401519150604084015190509250925092565b600060208284031215611d4657600080fd5b8151610e8281611a8e565b81810381811115610c0657610c06611c7c565b600181815b80851115611d9f578160001904821115611d8557611d85611c7c565b80851615611d9257918102915b93841c9390800290611d69565b509250929050565b600082611db657506001610c06565b81611dc357506000610c06565b8160018114611dd95760028114611de357611dff565b6001915050610c06565b60ff841115611df457611df4611c7c565b50506001821b610c06565b5060208310610133831016604e8410600b8410161715611e22575081810a610c06565b611e2c8383611d64565b8060001904821115611e4057611e40611c7c565b029392505050565b6000610e8260ff841683611da7565b80820180821115610c0657610c06611c7c565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611ed05784516001600160a01b031683529383019391830191600101611eab565b50506001600160a01b03969096166060850152505050608001529392505050565b600080835481600182811c915080831680611f0d57607f831692505b60208084108203611f2c57634e487b7160e01b86526022600452602486fd5b818015611f405760018114611f5557611f82565b60ff1986168952841515850289019650611f82565b60008a81526020902060005b86811015611f7a5781548b820152908501908301611f61565b505084890196505b50949897505050505050505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122063e3649f07e159da2b79ed1059b57938540aa1fa0cef5db8d0c010c80aa9399264736f6c63430008130033

Deployed Bytecode

0x6080604052600436106102275760003560e01c80637f50ce1711610122578063c473413a116100a5578063f2fde38b1161006c578063f2fde38b146106b0578063f887ea40146106d0578063f98eb6e1146106f0578063fb235f3414610705578063fea9e9421461072557005b8063c473413a1461060c578063cffd129c14610622578063d505accf14610638578063dd62ed3e14610658578063eec1c69f1461069057005b8063a8aa1b31116100e9578063a8aa1b3114610576578063a9059cbb14610596578063b3e5cb45146105b6578063b880b69a146105cc578063c45a0155146105ec57005b80637f50ce17146104f65780638da5cb5b1461050e57806392108c861461052c57806395d89b4114610541578063a0712d681461055657005b80633644e515116101aa578063715018a611610171578063715018a61461044e57806375f0a874146104635780637ca882b5146104835780637d5ea21b146104a85780637ecebe00146104c957005b80633644e5151461039457806342966c68146103a957806344478425146103c95780635d098b381461040157806370a082311461042157005b806323b872dd116101ee57806323b872dd146102d7578063270fd20a146102f75780632ca1b45d14610318578063307aebc91461032d578063313ce5671461034e57005b806306fdde031461023057806307df7a0d1461025b578063095ea7b3146102635780630adab99f1461029357806318160ddd146102b357005b3661022e57005b005b34801561023c57600080fd5b50610245610745565b6040516102529190611a40565b60405180910390f35b61022e6107d3565b34801561026f57600080fd5b5061028361027e366004611aa3565b610b9f565b6040519015158152602001610252565b34801561029f57600080fd5b5061022e6102ae366004611acf565b610c0c565b3480156102bf57600080fd5b506102c960035481565b604051908152602001610252565b3480156102e357600080fd5b506102836102f2366004611aec565b610c62565b34801561030357600080fd5b50600f5461028390600160a81b900460ff1681565b34801561032457600080fd5b5061022e610e89565b34801561033957600080fd5b50600c5461028390600160a81b900460ff1681565b34801561035a57600080fd5b506103827f000000000000000000000000000000000000000000000000000000000000000881565b60405160ff9091168152602001610252565b3480156103a057600080fd5b506102c9610f34565b3480156103b557600080fd5b5061022e6103c4366004611b2d565b610f8f565b3480156103d557600080fd5b50600f546103e9906001600160a01b031681565b6040516001600160a01b039091168152602001610252565b34801561040d57600080fd5b5061022e61041c366004611acf565b610f9c565b34801561042d57600080fd5b506102c961043c366004611acf565b60046020526000908152604090205481565b34801561045a57600080fd5b5061022e610fec565b34801561046f57600080fd5b50600e546103e9906001600160a01b031681565b34801561048f57600080fd5b50600c546103e99061010090046001600160a01b031681565b3480156104b457600080fd5b50600f5461028390600160a01b900460ff1681565b3480156104d557600080fd5b506102c96104e4366004611acf565b60066020526000908152604090205481565b34801561050257600080fd5b504662aa36a714610283565b34801561051a57600080fd5b506000546001600160a01b03166103e9565b34801561053857600080fd5b50610283611000565b34801561054d57600080fd5b50610245611016565b34801561056257600080fd5b5061022e610571366004611b2d565b611023565b34801561058257600080fd5b506009546103e9906001600160a01b031681565b3480156105a257600080fd5b506102836105b1366004611aa3565b61106f565b3480156105c257600080fd5b5046600514610283565b3480156105d857600080fd5b50600d546103e9906001600160a01b031681565b3480156105f857600080fd5b506008546103e9906001600160a01b031681565b34801561061857600080fd5b506102c9600a5481565b34801561062e57600080fd5b506102c9600b5481565b34801561064457600080fd5b5061022e610653366004611b46565b61107c565b34801561066457600080fd5b506102c9610673366004611bbd565b600560209081526000928352604080842090915290825290205481565b34801561069c57600080fd5b506102836106ab366004611bf6565b6112c0565b3480156106bc57600080fd5b5061022e6106cb366004611acf565b61132f565b3480156106dc57600080fd5b506007546103e9906001600160a01b031681565b3480156106fc57600080fd5b5061022e6113a5565b34801561071157600080fd5b5061022e610720366004611acf565b611450565b34801561073157600080fd5b5061022e610740366004611acf565b6114a0565b6001805461075290611c1c565b80601f016020809104026020016040519081016040528092919081815260200182805461077e90611c1c565b80156107cb5780601f106107a0576101008083540402835291602001916107cb565b820191906000526020600020905b8154815290600101906020018083116107ae57829003601f168201915b505050505081565b6107db6114f0565b600c54600160a81b900460ff161561082d5760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e481b185d5b98da195960821b60448201526064015b60405180910390fd5b600d546001600160a01b03166108555760405162461bcd60e51b815260040161082490611c56565b600e546001600160a01b031661087d5760405162461bcd60e51b815260040161082490611c56565b600f546001600160a01b03166108a55760405162461bcd60e51b815260040161082490611c56565b600c5461010090046001600160a01b03166108d25760405162461bcd60e51b815260040161082490611c56565b600c805460ff60a81b1916600160a81b17905561090d306127106108fe612328655af3107a4000611c92565b6109089190611ca9565b61154a565b600754306000818152600460205260408120546001600160a01b039093169263f305d7199234929091908061094a6000546001600160a01b031690565b426040518863ffffffff1660e01b815260040161096c96959493929190611ccb565b60606040518083038185885af115801561098a573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906109af9190611d06565b5050600854600754604080516315ab88c960e31b815290516001600160a01b03938416945063e6a43905933093169163ad5c46489160048083019260209291908290030181865afa158015610a08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2c9190611d34565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015610a77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9b9190611d34565b600980546001600160a01b0319166001600160a01b03928316179055600e54610ade9116612710610ace61232882611d51565b6108fe90655af3107a4000611c92565b655af3107a400060035414610b2c5760405162461bcd60e51b815260206004820152601460248201527306e756d6265727320646f6e2774206164642075760641b6044820152606401610824565b610b34611000565b15610b7457610b7433610b687f0000000000000000000000000000000000000000000000000000000000000008600a611e48565b61090890612710611c92565b6040517f0887e4063f397b46bca5f33853dd1a946a3b32547bf9cb3b3063bd9db9d8bdfe90600090a1565b3360008181526005602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610bfa9086815260200190565b60405180910390a35060015b92915050565b610c146114f0565b6001600160a01b038116610c3a5760405162461bcd60e51b815260040161082490611c56565b600c80546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60006001600160a01b0384163314610cd2576001600160a01b03841660009081526005602090815260408083203384529091529020546000198114610cd057610cab8382611d51565b6001600160a01b03861660009081526005602090815260408083203384529091529020555b505b610cda6115a4565b30600090815260046020526040902054118015610cfa5750600c5460ff16155b8015610d1457506009546001600160a01b03858116911614155b8015610d2957506001600160a01b0384163014155b15610d3657610d366115c2565b6000610d43858585611843565b90506000610d518285611d51565b6001600160a01b038716600090815260046020526040812080549293508692909190610d7e908490611d51565b90915550506001600160a01b0380861660008181526004602052604090819020805485019055519091881690600080516020611f9183398151915290610dc79085815260200190565b60405180910390a38115610e7b576000610de2600a84611ca9565b9050610dee8184611d51565b306000818152600460209081526040808320805486019055600f546001600160a01b03908116845292819020805487019055518481529396509192908a1691600080516020611f91833981519152910160405180910390a3600f546040518281526001600160a01b0391821691891690600080516020611f918339815191529060200160405180910390a3505b6001925050505b9392505050565b610e916114f0565b600f54600160a01b900460ff1615610eeb5760405162461bcd60e51b815260206004820152601b60248201527f746869732069732061206f6e652073686f742066756e6374696f6e00000000006044820152606401610824565b600f805460ff60a01b1916600160a01b179055610fa0600a819055600b556040517fa1f3078ed9e1e966576844270dda3bb31267ba7d982fc64933d94552630a436890600090a1565b60007f00000000000000000000000000000000000000000000000000000000000000014614610f6a57610f656118f4565b905090565b507fd353ee96d5e95cba0f49df070e17b3215a5d73018cb30432c4f5bc2e9a6a32e790565b610f99338261198e565b50565b610fa46114f0565b6001600160a01b038116610fca5760405162461bcd60e51b815260040161082490611c56565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b610ff46114f0565b610ffe60006119f0565b565b60004660051480610f6557505062aa36a7461490565b6002805461075290611c1c565b61102b611000565b6110655760405162461bcd60e51b815260206004820152600b60248201526a1b9bdd081d195cdd1b995d60aa1b6044820152606401610824565b610f99338261154a565b6000610e82338484610c62565b428410156110cc5760405162461bcd60e51b815260206004820152601760248201527f5045524d49545f444541444c494e455f455850495245440000000000000000006044820152606401610824565b600060016110d8610f34565b6001600160a01b038a811660008181526006602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e08301909152805192019190912061190160f01b6101008301526101028201929092526101228101919091526101420160408051601f198184030181528282528051602091820120600084529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa1580156111e4573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061121a5750876001600160a01b0316816001600160a01b0316145b6112575760405162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa9a4a3a722a960911b6044820152606401610824565b6001600160a01b0390811660009081526005602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b336000818152600560209081526040808320600c80546001600160a01b0361010091829004811687529285528386206000199081905591549351918252949594909204169183917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259101610bfa565b6113376114f0565b6001600160a01b03811661139c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610824565b610f99816119f0565b6113ad6114f0565b600f54600160a81b900460ff16156114075760405162461bcd60e51b815260206004820152601b60248201527f746869732069732061206f6e652073686f742066756e6374696f6e00000000006044820152606401610824565b600f805460ff60a81b1916600160a81b1790556101f4600a819055600b556040517fc8c66e37e8b41bcc2deecfa7487ae0d5ed2fd626c0544a58c33ba95d90a47d4a90600090a1565b6114586114f0565b6001600160a01b03811661147e5760405162461bcd60e51b815260040161082490611c56565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6114a86114f0565b6001600160a01b0381166114ce5760405162461bcd60e51b815260040161082490611c56565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610ffe5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610824565b806003600082825461155c9190611e57565b90915550506001600160a01b038216600081815260046020908152604080832080548601905551848152600080516020611f9183398151915291015b60405180910390a35050565b600061271060035460026115b89190611c92565b610f659190611ca9565b600c805460ff19166001179055306000908152600460205260408120546115eb90601090611ca9565b306000908152600460205260408120549192509061160a908390611d51565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061164457611644611e6a565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561169d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116c19190611d34565b816001815181106116d4576116d4611e6a565b6001600160a01b03928316602091820292909201015260075460405163791ac94760e01b815291169063791ac9479061171a908590600090869030904290600401611e80565b600060405180830381600087803b15801561173457600080fd5b505af1158015611748573d6000803e3d6000fd5b50506007546001600160a01b0316915063f305d71990504730866000806117776000546001600160a01b031690565b426040518863ffffffff1660e01b815260040161179996959493929190611ccb565b60606040518083038185885af11580156117b7573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906117dc9190611d06565b5050600d546040516001600160a01b0390911691504790600081818185875af1925050503d806000811461182c576040519150601f19603f3d011682016040523d82523d6000602084013e611831565b606091505b5050600c805460ff1916905550505050565b600080546001600160a01b038581169116148061186d57506000546001600160a01b038481169116145b8061188057506001600160a01b03841630145b1561188d57506000610e82565b6009546001600160a01b03908116908516036118c557612710600a54836118b49190611c92565b6118be9190611ca9565b9050610e82565b6009546001600160a01b03908116908416036118ec57612710600b54836118b49190611c92565b506000610e82565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60016040516119269190611ef1565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6001600160a01b038216600090815260046020526040812080548392906119b6908490611d51565b90915550506003805482900390556040518181526000906001600160a01b03841690600080516020611f9183398151915290602001611598565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208083528351808285015260005b81811015611a6d57858101830151858201604001528201611a51565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610f9957600080fd5b60008060408385031215611ab657600080fd5b8235611ac181611a8e565b946020939093013593505050565b600060208284031215611ae157600080fd5b8135610e8281611a8e565b600080600060608486031215611b0157600080fd5b8335611b0c81611a8e565b92506020840135611b1c81611a8e565b929592945050506040919091013590565b600060208284031215611b3f57600080fd5b5035919050565b600080600080600080600060e0888a031215611b6157600080fd5b8735611b6c81611a8e565b96506020880135611b7c81611a8e565b95506040880135945060608801359350608088013560ff81168114611ba057600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215611bd057600080fd5b8235611bdb81611a8e565b91506020830135611beb81611a8e565b809150509250929050565b600060208284031215611c0857600080fd5b813563ffffffff81168114610e8257600080fd5b600181811c90821680611c3057607f821691505b602082108103611c5057634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252600c908201526b6e756c6c206164647265737360a01b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610c0657610c06611c7c565b600082611cc657634e487b7160e01b600052601260045260246000fd5b500490565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600080600060608486031215611d1b57600080fd5b8351925060208401519150604084015190509250925092565b600060208284031215611d4657600080fd5b8151610e8281611a8e565b81810381811115610c0657610c06611c7c565b600181815b80851115611d9f578160001904821115611d8557611d85611c7c565b80851615611d9257918102915b93841c9390800290611d69565b509250929050565b600082611db657506001610c06565b81611dc357506000610c06565b8160018114611dd95760028114611de357611dff565b6001915050610c06565b60ff841115611df457611df4611c7c565b50506001821b610c06565b5060208310610133831016604e8410600b8410161715611e22575081810a610c06565b611e2c8383611d64565b8060001904821115611e4057611e40611c7c565b029392505050565b6000610e8260ff841683611da7565b80820180821115610c0657610c06611c7c565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611ed05784516001600160a01b031683529383019391830191600101611eab565b50506001600160a01b03969096166060850152505050608001529392505050565b600080835481600182811c915080831680611f0d57607f831692505b60208084108203611f2c57634e487b7160e01b86526022600452602486fd5b818015611f405760018114611f5557611f82565b60ff1986168952841515850289019650611f82565b60008a81526020902060005b86811015611f7a5781548b820152908501908301611f61565b505084890196505b50949897505050505050505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122063e3649f07e159da2b79ed1059b57938540aa1fa0cef5db8d0c010c80aa9399264736f6c63430008130033

Deployed Bytecode Sourcemap

19518:10530:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1076:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24136:1118;;;:::i;2519:242::-;;;;;;;;;;-1:-1:-1;2519:242:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;2519:242:0;1023:187:1;23495:147:0;;;;;;;;;;-1:-1:-1;23495:147:0;;;;;:::i;:::-;;:::i;1359:26::-;;;;;;;;;;;;;;;;;;;1613:25:1;;;1601:2;1586:18;1359:26:0;1467:177:1;28311:1734:0;;;;;;;;;;-1:-1:-1;28311:1734:0;;;;;:::i;:::-;;:::i;20434:26::-;;;;;;;;;;-1:-1:-1;20434:26:0;;;;-1:-1:-1;;;20434:26:0;;;;;;22453:233;;;;;;;;;;;;;:::i;20269:22::-;;;;;;;;;;-1:-1:-1;20269:22:0;;;;-1:-1:-1;;;20269:22:0;;;;;;1132:31;;;;;;;;;;;;;;;;;;2282:4:1;2270:17;;;2252:36;;2240:2;2225:18;1132:31:0;2110:184:1;5591:226:0;;;;;;;;;;;;;:::i;21653:80::-;;;;;;;;;;-1:-1:-1;21653:80:0;;;;;:::i;:::-;;:::i;20367:28::-;;;;;;;;;;-1:-1:-1;20367:28:0;;;;-1:-1:-1;;;;;20367:28:0;;;;;;-1:-1:-1;;;;;2830:32:1;;;2812:51;;2800:2;2785:18;20367:28:0;2666:203:1;23804:160:0;;;;;;;;;;-1:-1:-1;23804:160:0;;;;;:::i;:::-;;:::i;1394:44::-;;;;;;;;;;-1:-1:-1;1394:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;9850:103;;;;;;;;;;;;;:::i;20330:30::-;;;;;;;;;;-1:-1:-1;20330:30:0;;;;-1:-1:-1;;;;;20330:30:0;;;20229:31;;;;;;;;;;-1:-1:-1;20229:31:0;;;;;;;-1:-1:-1;;;;;20229:31:0;;;20404:23;;;;;;;;;;-1:-1:-1;20404:23:0;;;;-1:-1:-1;;;20404:23:0;;;;;;1820:41;;;;;;;;;;-1:-1:-1;1820:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;22239:99;;;;;;;;;;-1:-1:-1;22305:13:0;22322:8;22305:25;22239:99;;9202:87;;;;;;;;;;-1:-1:-1;9248:7:0;9275:6;-1:-1:-1;;;;;9275:6:0;9202:87;;22346:99;;;;;;;;;;;;;:::i;1103:20::-;;;;;;;;;;;;;:::i;21906:101::-;;;;;;;;;;-1:-1:-1;21906:101:0;;;;;:::i;:::-;;:::i;19641:26::-;;;;;;;;;;-1:-1:-1;19641:26:0;;;;-1:-1:-1;;;;;19641:26:0;;;27731:136;;;;;;;;;;-1:-1:-1;27731:136:0;;;;;:::i;:::-;;:::i;22140:91::-;;;;;;;;;;-1:-1:-1;22205:13:0;22222:1;22205:18;22140:91;;20300:23;;;;;;;;;;-1:-1:-1;20300:23:0;;;;-1:-1:-1;;;;;20300:23:0;;;19602:32;;;;;;;;;;-1:-1:-1;19602:32:0;;;;-1:-1:-1;;;;;19602:32:0;;;20017:27;;;;;;;;;;;;;;;;20051:28;;;;;;;;;;;;;;;;4007:1576;;;;;;;;;;-1:-1:-1;4007:1576:0;;;;;:::i;:::-;;:::i;1447:64::-;;;;;;;;;;-1:-1:-1;1447:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;23221:266;;;;;;;;;;-1:-1:-1;23221:266:0;;;;;:::i;:::-;;:::i;10108:238::-;;;;;;;;;;-1:-1:-1;10108:238:0;;;;;:::i;:::-;;:::i;19563:32::-;;;;;;;;;;-1:-1:-1;19563:32:0;;;;-1:-1:-1;;;;;19563:32:0;;;22694:241;;;;;;;;;;;;;:::i;23972:156::-;;;;;;;;;;-1:-1:-1;23972:156:0;;;;;:::i;:::-;;:::i;23650:146::-;;;;;;;;;;-1:-1:-1;23650:146:0;;;;;:::i;:::-;;:::i;1076:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24136:1118::-;9088:13;:11;:13::i;:::-;24208:10:::1;::::0;-1:-1:-1;;;24208:10:0;::::1;;;24207:11;24199:40;;;::::0;-1:-1:-1;;;24199:40:0;;5667:2:1;24199:40:0::1;::::0;::::1;5649:21:1::0;5706:2;5686:18;;;5679:30;-1:-1:-1;;;5725:18:1;;;5718:46;5781:18;;24199:40:0::1;;;;;;;;;24258:8;::::0;-1:-1:-1;;;;;24258:8:0::1;24250:47;;;;-1:-1:-1::0;;;24250:47:0::1;;;;;;;:::i;:::-;24316:15;::::0;-1:-1:-1;;;;;24316:15:0::1;24308:54;;;;-1:-1:-1::0;;;24308:54:0::1;;;;;;;:::i;:::-;24381:13;::::0;-1:-1:-1;;;;;24381:13:0::1;24373:52;;;;-1:-1:-1::0;;;24373:52:0::1;;;;;;;:::i;:::-;24444:16;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;24444:16:0::1;24436:55;;;;-1:-1:-1::0;;;24436:55:0::1;;;;;;;:::i;:::-;24502:10;:17:::0;;-1:-1:-1;;;;24502:17:0::1;-1:-1:-1::0;;;24502:17:0::1;::::0;;24532:56:::1;24546:4;24581:6;24554:23;19827:4;19715:19;24554:23;:::i;:::-;24553:34;;;;:::i;:::-;24532:5;:56::i;:::-;24601:6;::::0;24664:4:::1;24601:6;24684:24:::0;;;:9:::1;:24;::::0;;;;;-1:-1:-1;;;;;24601:6:0;;::::1;::::0;:22:::1;::::0;24631:9:::1;::::0;24664:4;;24684:24;24601:6;24755:7:::1;9248::::0;9275:6;-1:-1:-1;;;;;9275:6:0;;9202:87;24755:7:::1;24777:15;24601:202;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;24838:7:0::1;::::0;24869:6:::1;::::0;:13:::1;::::0;;-1:-1:-1;;;24869:13:0;;;;-1:-1:-1;;;;;24838:7:0;;::::1;::::0;-1:-1:-1;24838:15:0::1;::::0;24862:4:::1;::::0;24869:6:::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:6;:13:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24838:45;::::0;-1:-1:-1;;;;;;24838:45:0::1;::::0;;;;;;-1:-1:-1;;;;;8087:15:1;;;24838:45:0::1;::::0;::::1;8069:34:1::0;8139:15;;8119:18;;;8112:43;8004:18;;24838:45:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24816:4;:68:::0;;-1:-1:-1;;;;;;24816:68:0::1;-1:-1:-1::0;;;;;24816:68:0;;::::1;;::::0;;24903:15:::1;::::0;24897:65:::1;::::0;24903:15:::1;24955:6;19934:15;19827:4;24955:6:::0;19934:15:::1;:::i;:::-;24921:30;::::0;19715:19:::1;24921:30;:::i;24897:65::-;19715:19;24983:11;;:29;24975:62;;;::::0;-1:-1:-1;;;24975:62:0;;8501:2:1;24975:62:0::1;::::0;::::1;8483:21:1::0;8540:2;8520:18;;;8513:30;-1:-1:-1;;;8559:18:1;;;8552:50;8619:18;;24975:62:0::1;8299:344:1::0;24975:62:0::1;25116:11;:9;:11::i;:::-;25112:95;;;25144:51;25158:10;25180:14;25186:8;25180:2;:14;:::i;:::-;25171:23;::::0;:6:::1;:23;:::i;25144:51::-;25224:22;::::0;::::1;::::0;;;::::1;24136:1118::o:0;2519:242::-;2645:10;2618:4;2635:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;2635:30:0;;;;;;;;;;:39;;;2692:37;2618:4;;2635:30;;2692:37;;;;2668:6;1613:25:1;;1601:2;1586:18;;1467:177;2692:37:0;;;;;;;;-1:-1:-1;2749:4:0;2519:242;;;;;:::o;23495:147::-;9088:13;:11;:13::i;:::-;-1:-1:-1;;;;;23571:15:0;::::1;23563:40;;;;-1:-1:-1::0;;;23563:40:0::1;;;;;;;:::i;:::-;23614:16;:20:::0;;-1:-1:-1;;;;;23614:20:0;;::::1;;;-1:-1:-1::0;;;;;;23614:20:0;;::::1;::::0;;;::::1;::::0;;23495:147::o;28311:1734::-;28431:4;-1:-1:-1;;;;;28452:18:0;;28460:10;28452:18;28448:289;;-1:-1:-1;;;;;28551:15:0;;28536:12;28551:15;;;:9;:15;;;;;;;;28567:10;28551:27;;;;;;;;-1:-1:-1;;28635:25:0;;28631:94;;28709:16;28719:6;28709:7;:16;:::i;:::-;-1:-1:-1;;;;;28679:15:0;;;;;;:9;:15;;;;;;;;28695:10;28679:27;;;;;;;:46;28631:94;28472:265;28448:289;28972:18;:16;:18::i;:::-;28963:4;28945:24;;;;:9;:24;;;;;;:45;:86;;;;-1:-1:-1;29008:23:0;;;;29007:24;28945:86;:124;;;;-1:-1:-1;29064:4:0;;-1:-1:-1;;;;;29048:21:0;;;29064:4;;29048:21;;28945:124;:162;;;;-1:-1:-1;;;;;;29086:21:0;;29102:4;29086:21;;28945:162;28927:239;;;29134:20;:18;:20::i;:::-;29178:8;29189:25;29197:4;29203:2;29207:6;29189:7;:25::i;:::-;29178:36;-1:-1:-1;29225:19:0;29247:12;29178:36;29247:6;:12;:::i;:::-;-1:-1:-1;;;;;29272:15:0;;;;;;:9;:15;;;;;:25;;29225:34;;-1:-1:-1;29291:6:0;;29272:15;;;:25;;29291:6;;29272:25;:::i;:::-;;;;-1:-1:-1;;;;;;;29445:13:0;;;;;;;:9;:13;;;;;;;:31;;;;;;29505:34;29445:13;;29505:34;;;-1:-1:-1;;;;;;;;;;;29505:34:0;;;29462:14;1613:25:1;;1601:2;1586:18;;1467:177;29505:34:0;;;;;;;;29556:7;;29552:462;;29624:12;29639:8;29645:2;29639:3;:8;:::i;:::-;29624:23;-1:-1:-1;29662:14:0;29624:23;29662:14;;:::i;:::-;29740:4;29722:24;;;;:9;:24;;;;;;;;:31;;;;;;29782:13;;-1:-1:-1;;;;;29782:13:0;;;29772:24;;;;;;:35;;;;;;29910:34;1613:25:1;;;29722:31:0;;-1:-1:-1;29740:4:0;;29910:34;;;;-1:-1:-1;;;;;;;;;;;29910:34:0;1586:18:1;29910:34:0;;;;;;;29979:13;;29964:38;;1613:25:1;;;-1:-1:-1;;;;;29979:13:0;;;;29964:38;;;-1:-1:-1;;;;;;;;;;;29964:38:0;1601:2:1;1586:18;29964:38:0;;;;;;;29565:449;29552:462;30033:4;30026:11;;;;28311:1734;;;;;;:::o;22453:233::-;9088:13;:11;:13::i;:::-;22519:11:::1;::::0;-1:-1:-1;;;22519:11:0;::::1;;;22518:12;22510:52;;;::::0;-1:-1:-1;;;22510:52:0;;10233:2:1;22510:52:0::1;::::0;::::1;10215:21:1::0;10272:2;10252:18;;;10245:30;10311:29;10291:18;;;10284:57;10358:18;;22510:52:0::1;10031:351:1::0;22510:52:0::1;22573:11;:18:::0;;-1:-1:-1;;;;22573:18:0::1;-1:-1:-1::0;;;22573:18:0::1;::::0;;22614:4:::1;22602:9;:16:::0;;;22629:10:::1;:17:::0;22662:16:::1;::::0;::::1;::::0;22573:18;;22662:16:::1;22453:233::o:0;5591:226::-;5648:7;5705:16;5688:13;:33;:121;;5785:24;:22;:24::i;:::-;5668:141;;5591:226;:::o;5688:121::-;-1:-1:-1;5741:24:0;;5591:226::o;21653:80::-;21700:25;21706:10;21718:6;21700:5;:25::i;:::-;21653:80;:::o;23804:160::-;9088:13;:11;:13::i;:::-;-1:-1:-1;;;;;23884:20:0;::::1;23876:45;;;;-1:-1:-1::0;;;23876:45:0::1;;;;;;;:::i;:::-;23932:15;:24:::0;;-1:-1:-1;;;;;;23932:24:0::1;-1:-1:-1::0;;;;;23932:24:0;;;::::1;::::0;;;::::1;::::0;;23804:160::o;9850:103::-;9088:13;:11;:13::i;:::-;9915:30:::1;9942:1;9915:18;:30::i;:::-;9850:103::o:0;22346:99::-;22388:4;22205:13;22222:1;22205:18;22412:25;;;-1:-1:-1;;22322:8:0;22305:13;:25;;5591:226::o;1103:20::-;;;;;;;:::i;21906:101::-;21523:11;:9;:11::i;:::-;21515:35;;;;-1:-1:-1;;;21515:35:0;;10589:2:1;21515:35:0;;;10571:21:1;10628:2;10608:18;;;10601:30;-1:-1:-1;;;10647:18:1;;;10640:41;10698:18;;21515:35:0;10387:335:1;21515:35:0;21965:34:::1;21979:10;21992:6;21965:5;:34::i;27731:136::-:0;27799:4;27823:36;27836:10;27848:2;27852:6;27823:12;:36::i;4007:1576::-;4235:15;4223:8;:27;;4215:63;;;;-1:-1:-1;;;4215:63:0;;10929:2:1;4215:63:0;;;10911:21:1;10968:2;10948:18;;;10941:30;11007:25;10987:18;;;10980:53;11050:18;;4215:63:0;10727:347:1;4215:63:0;4448:24;4475:827;4615:18;:16;:18::i;:::-;-1:-1:-1;;;;;5069:13:0;;;;;;;:6;:13;;;;;;;;;:15;;;;;;;;4700:458;;4745:167;4700:458;;;11366:25:1;11445:18;;;11438:43;;;;11517:15;;;11497:18;;;11490:43;11549:18;;;11542:34;;;11592:19;;;11585:35;;;;11636:19;;;;11629:35;;;4700:458:0;;;;;;;;;;11338:19:1;;;4700:458:0;;;4660:525;;;;;;;;-1:-1:-1;;;4535:673:0;;;11933:27:1;11976:11;;;11969:27;;;;12012:12;;;12005:28;;;;12049:12;;4535:673:0;;;-1:-1:-1;;4535:673:0;;;;;;;;;4503:724;;4535:673;4503:724;;;;4475:827;;;;;;;;;12299:25:1;12372:4;12360:17;;12340:18;;;12333:45;12394:18;;;12387:34;;;12437:18;;;12430:34;;;12271:19;;4475:827:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4475:827:0;;-1:-1:-1;;4475:827:0;;;-1:-1:-1;;;;;;;5345:30:0;;;;;;:59;;;5399:5;-1:-1:-1;;;;;5379:25:0;:16;-1:-1:-1;;;;;5379:25:0;;5345:59;5319:135;;;;-1:-1:-1;;;5319:135:0;;12677:2:1;5319:135:0;;;12659:21:1;12716:2;12696:18;;;12689:30;-1:-1:-1;;;12735:18:1;;;12728:44;12789:18;;5319:135:0;12475:338:1;5319:135:0;-1:-1:-1;;;;;5471:27:0;;;;;;;:9;:27;;;;;;;;:36;;;;;;;;;;;;;:44;;;5544:31;1613:25:1;;;5471:36:0;;5544:31;;;;;1586:18:1;5544:31:0;;;;;;;4007:1576;;;;;;;:::o;23221:266::-;7966:10;23281:4;23339:16;;;:9;:16;;;;;;;;23356;;;-1:-1:-1;;;;;23356:16:0;;;;;;;23339:34;;;;;;;;-1:-1:-1;;23339:51:0;;;;23422:16;;23406:49;;1613:25:1;;;23281:4:0;;7966:10;23422:16;;;;;7966:10;;23406:49;;1586:18:1;23406:49:0;1467:177:1;10108:238:0;9088:13;:11;:13::i;:::-;-1:-1:-1;;;;;10211:22:0;::::1;10189:110;;;::::0;-1:-1:-1;;;10189:110:0;;13020:2:1;10189:110:0::1;::::0;::::1;13002:21:1::0;13059:2;13039:18;;;13032:30;13098:34;13078:18;;;13071:62;-1:-1:-1;;;13149:18:1;;;13142:36;13195:19;;10189:110:0::1;12818:402:1::0;10189:110:0::1;10310:28;10329:8;10310:18;:28::i;22694:241::-:0;9088:13;:11;:13::i;:::-;22761:14:::1;::::0;-1:-1:-1;;;22761:14:0;::::1;;;22760:15;22752:55;;;::::0;-1:-1:-1;;;22752:55:0;;10233:2:1;22752:55:0::1;::::0;::::1;10215:21:1::0;10272:2;10252:18;;;10245:30;10311:29;10291:18;;;10284:57;10358:18;;22752:55:0::1;10031:351:1::0;22752:55:0::1;22818:14;:21:::0;;-1:-1:-1;;;;22818:21:0::1;-1:-1:-1::0;;;22818:21:0::1;::::0;;22862:3:::1;22850:9;:15:::0;;;22876:10:::1;:16:::0;22908:19:::1;::::0;::::1;::::0;22818:21;;22908:19:::1;22694:241::o:0;23972:156::-;9088:13;:11;:13::i;:::-;-1:-1:-1;;;;;24050:20:0;::::1;24042:45;;;;-1:-1:-1::0;;;24042:45:0::1;;;;;;;:::i;:::-;24098:13;:22:::0;;-1:-1:-1;;;;;;24098:22:0::1;-1:-1:-1::0;;;;;24098:22:0;;;::::1;::::0;;;::::1;::::0;;23972:156::o;23650:146::-;9088:13;:11;:13::i;:::-;-1:-1:-1;;;;;23723:20:0;::::1;23715:45;;;;-1:-1:-1::0;;;23715:45:0::1;;;;;;;:::i;:::-;23771:8;:17:::0;;-1:-1:-1;;;;;;23771:17:0::1;-1:-1:-1::0;;;;;23771:17:0;;;::::1;::::0;;;::::1;::::0;;23650:146::o;9367:132::-;9248:7;9275:6;-1:-1:-1;;;;;9275:6:0;7966:10;9431:23;9423:68;;;;-1:-1:-1;;;9423:68:0;;13427:2:1;9423:68:0;;;13409:21:1;;;13446:18;;;13439:30;13505:34;13485:18;;;13478:62;13557:18;;9423:68:0;13225:356:1;6530:335:0;6616:6;6601:11;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;6773:13:0;;;;;;:9;:13;;;;;;;;:23;;;;;;6825:32;1613:25:1;;;-1:-1:-1;;;;;;;;;;;6825:32:0;1586:18:1;6825:32:0;;;;;;;;6530:335;;:::o;22015:117::-;22066:4;22110:5;22091:11;;22105:1;22091:15;;;;:::i;:::-;22090:25;;;;:::i;26378:1124::-;21381:23;:30;;-1:-1:-1;;21381:30:0;21407:4;21381:30;;;26801:4:::1;21381:23:::0;26783:24;;;:9:::1;:24;::::0;;;;;:29:::1;::::0;26810:2:::1;::::0;26783:29:::1;:::i;:::-;26861:4;26823:17;26843:24:::0;;;:9:::1;:24;::::0;;;;;26763:49;;-1:-1:-1;26823:17:0;26843:39:::1;::::0;26763:49;;26843:39:::1;:::i;:::-;26936:16;::::0;;26950:1:::1;26936:16:::0;;;;;::::1;::::0;;26823:59;;-1:-1:-1;26912:21:0::1;::::0;26936:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;26936:16:0::1;26912:40;;26981:4;26963;26968:1;26963:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26963:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;27007:6:::1;::::0;:13:::1;::::0;;-1:-1:-1;;;27007:13:0;;;;:6;;;::::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;26963:7;;27007:13;;;;;:6;:13:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26997:4;27002:1;26997:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26997:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;27031:6:::1;::::0;:188:::1;::::0;-1:-1:-1;;;27031:188:0;;:6;::::1;::::0;:57:::1;::::0;:188:::1;::::0;27103:12;;27031:6:::1;::::0;27146:4;;27173::::1;::::0;27193:15:::1;::::0;27031:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;27232:6:0::1;::::0;-1:-1:-1;;;;;27232:6:0::1;::::0;-1:-1:-1;27232:22:0::1;::::0;-1:-1:-1;27262:21:0::1;27307:4;27327:12:::0;27232:6:::1;::::0;27386:7:::1;9248::::0;9275:6;-1:-1:-1;;;;;9275:6:0;;9202:87;27386:7:::1;27408:15;27232:202;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;27447:8:0::1;::::0;:47:::1;::::0;-1:-1:-1;;;;;27447:8:0;;::::1;::::0;-1:-1:-1;27468:21:0::1;::::0;27447:47:::1;::::0;;;27468:21;27447:8;:47:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;21434:23:0;:31;;-1:-1:-1;;21434:31:0;;;-1:-1:-1;;;;26378:1124:0:o;25525:773::-;25638:4;9275:6;;-1:-1:-1;;;;;25659:15:0;;;9275:6;;25659:15;;:32;;-1:-1:-1;9248:7:0;9275:6;-1:-1:-1;;;;;25678:13:0;;;9275:6;;25678:13;25659:32;:57;;;-1:-1:-1;;;;;;25695:21:0;;25711:4;25695:21;25659:57;25655:636;;;-1:-1:-1;25876:1:0;25869:8;;25655:636;25915:4;;-1:-1:-1;;;;;25915:4:0;;;25899:21;;;;25895:396;;26018:6;26005:9;;25996:6;:18;;;;:::i;:::-;25995:29;;;;:::i;:::-;25988:36;;;;25895:396;26060:4;;-1:-1:-1;;;;;26060:4:0;;;26046:19;;;;26042:249;;26167:6;26153:10;;26144:6;:19;;;;:::i;26042:249::-;-1:-1:-1;26278:1:0;26271:8;;5825:505;5890:7;5991:143;6173:4;6157:22;;;;;;:::i;:::-;;;;;;;;;;5958:349;;;16701:25:1;;;;16742:18;;16735:34;;;;6202:14:0;16785:18:1;;;16778:34;6239:13:0;16828:18:1;;;16821:34;6283:4:0;16871:19:1;;;16864:61;16673:19;;5958:349:0;;;;;;;;;;;;5930:392;;;;;;5910:412;;5825:505;:::o;6873:338::-;-1:-1:-1;;;;;6946:15:0;;;;;;:9;:15;;;;;:25;;6965:6;;6946:15;:25;;6965:6;;6946:25;:::i;:::-;;;;-1:-1:-1;;7119:11:0;:21;;;;;;;7169:34;;1613:25:1;;;-1:-1:-1;;;;;;;7169:34:0;;;-1:-1:-1;;;;;;;;;;;7169:34:0;1601:2:1;1586:18;7169:34:0;1467:177:1;10506:191:0;10580:16;10599:6;;-1:-1:-1;;;;;10616:17:0;;;-1:-1:-1;;;;;;10616:17:0;;;;;;10649:40;;10599:6;;;;;;;10649:40;;10580:16;10649:40;10569:128;10506:191;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1215:247::-;1274:6;1327:2;1315:9;1306:7;1302:23;1298:32;1295:52;;;1343:1;1340;1333:12;1295:52;1382:9;1369:23;1401:31;1426:5;1401:31;:::i;1649:456::-;1726:6;1734;1742;1795:2;1783:9;1774:7;1770:23;1766:32;1763:52;;;1811:1;1808;1801:12;1763:52;1850:9;1837:23;1869:31;1894:5;1869:31;:::i;:::-;1919:5;-1:-1:-1;1976:2:1;1961:18;;1948:32;1989:33;1948:32;1989:33;:::i;:::-;1649:456;;2041:7;;-1:-1:-1;;;2095:2:1;2080:18;;;;2067:32;;1649:456::o;2481:180::-;2540:6;2593:2;2581:9;2572:7;2568:23;2564:32;2561:52;;;2609:1;2606;2599:12;2561:52;-1:-1:-1;2632:23:1;;2481:180;-1:-1:-1;2481:180:1:o;3337:829::-;3448:6;3456;3464;3472;3480;3488;3496;3549:3;3537:9;3528:7;3524:23;3520:33;3517:53;;;3566:1;3563;3556:12;3517:53;3605:9;3592:23;3624:31;3649:5;3624:31;:::i;:::-;3674:5;-1:-1:-1;3731:2:1;3716:18;;3703:32;3744:33;3703:32;3744:33;:::i;:::-;3796:7;-1:-1:-1;3850:2:1;3835:18;;3822:32;;-1:-1:-1;3901:2:1;3886:18;;3873:32;;-1:-1:-1;3957:3:1;3942:19;;3929:33;4006:4;3993:18;;3981:31;;3971:59;;4026:1;4023;4016:12;3971:59;3337:829;;;;-1:-1:-1;3337:829:1;;;;4049:7;4103:3;4088:19;;4075:33;;-1:-1:-1;4155:3:1;4140:19;;;4127:33;;3337:829;-1:-1:-1;;3337:829:1:o;4171:388::-;4239:6;4247;4300:2;4288:9;4279:7;4275:23;4271:32;4268:52;;;4316:1;4313;4306:12;4268:52;4355:9;4342:23;4374:31;4399:5;4374:31;:::i;:::-;4424:5;-1:-1:-1;4481:2:1;4466:18;;4453:32;4494:33;4453:32;4494:33;:::i;:::-;4546:7;4536:17;;;4171:388;;;;;:::o;4564:276::-;4622:6;4675:2;4663:9;4654:7;4650:23;4646:32;4643:52;;;4691:1;4688;4681:12;4643:52;4730:9;4717:23;4780:10;4773:5;4769:22;4762:5;4759:33;4749:61;;4806:1;4803;4796:12;5080:380;5159:1;5155:12;;;;5202;;;5223:61;;5277:4;5269:6;5265:17;5255:27;;5223:61;5330:2;5322:6;5319:14;5299:18;5296:38;5293:161;;5376:10;5371:3;5367:20;5364:1;5357:31;5411:4;5408:1;5401:15;5439:4;5436:1;5429:15;5293:161;;5080:380;;;:::o;5810:336::-;6012:2;5994:21;;;6051:2;6031:18;;;6024:30;-1:-1:-1;;;6085:2:1;6070:18;;6063:42;6137:2;6122:18;;5810:336::o;6151:127::-;6212:10;6207:3;6203:20;6200:1;6193:31;6243:4;6240:1;6233:15;6267:4;6264:1;6257:15;6283:168;6356:9;;;6387;;6404:15;;;6398:22;;6384:37;6374:71;;6425:18;;:::i;6456:217::-;6496:1;6522;6512:132;;6566:10;6561:3;6557:20;6554:1;6547:31;6601:4;6598:1;6591:15;6629:4;6626:1;6619:15;6512:132;-1:-1:-1;6658:9:1;;6456:217::o;6678:607::-;-1:-1:-1;;;;;7037:15:1;;;7019:34;;7084:2;7069:18;;7062:34;;;;7127:2;7112:18;;7105:34;;;;7170:2;7155:18;;7148:34;;;;7219:15;;;7213:3;7198:19;;7191:44;6999:3;7251:19;;7244:35;;;;6968:3;6953:19;;6678:607::o;7290:306::-;7378:6;7386;7394;7447:2;7435:9;7426:7;7422:23;7418:32;7415:52;;;7463:1;7460;7453:12;7415:52;7492:9;7486:16;7476:26;;7542:2;7531:9;7527:18;7521:25;7511:35;;7586:2;7575:9;7571:18;7565:25;7555:35;;7290:306;;;;;:::o;7601:251::-;7671:6;7724:2;7712:9;7703:7;7699:23;7695:32;7692:52;;;7740:1;7737;7730:12;7692:52;7772:9;7766:16;7791:31;7816:5;7791:31;:::i;8166:128::-;8233:9;;;8254:11;;;8251:37;;;8268:18;;:::i;8648:422::-;8737:1;8780:5;8737:1;8794:270;8815:7;8805:8;8802:21;8794:270;;;8874:4;8870:1;8866:6;8862:17;8856:4;8853:27;8850:53;;;8883:18;;:::i;:::-;8933:7;8923:8;8919:22;8916:55;;;8953:16;;;;8916:55;9032:22;;;;8992:15;;;;8794:270;;;8798:3;8648:422;;;;;:::o;9075:806::-;9124:5;9154:8;9144:80;;-1:-1:-1;9195:1:1;9209:5;;9144:80;9243:4;9233:76;;-1:-1:-1;9280:1:1;9294:5;;9233:76;9325:4;9343:1;9338:59;;;;9411:1;9406:130;;;;9318:218;;9338:59;9368:1;9359:10;;9382:5;;;9406:130;9443:3;9433:8;9430:17;9427:43;;;9450:18;;:::i;:::-;-1:-1:-1;;9506:1:1;9492:16;;9521:5;;9318:218;;9620:2;9610:8;9607:16;9601:3;9595:4;9592:13;9588:36;9582:2;9572:8;9569:16;9564:2;9558:4;9555:12;9551:35;9548:77;9545:159;;;-1:-1:-1;9657:19:1;;;9689:5;;9545:159;9736:34;9761:8;9755:4;9736:34;:::i;:::-;9806:6;9802:1;9798:6;9794:19;9785:7;9782:32;9779:58;;;9817:18;;:::i;:::-;9855:20;;9075:806;-1:-1:-1;;;9075:806:1:o;9886:140::-;9944:5;9973:47;10014:4;10004:8;10000:19;9994:4;9973:47;:::i;13586:125::-;13651:9;;;13672:10;;;13669:36;;;13685:18;;:::i;13848:127::-;13909:10;13904:3;13900:20;13897:1;13890:31;13940:4;13937:1;13930:15;13964:4;13961:1;13954:15;13980:980;14242:4;14290:3;14279:9;14275:19;14321:6;14310:9;14303:25;14347:2;14385:6;14380:2;14369:9;14365:18;14358:34;14428:3;14423:2;14412:9;14408:18;14401:31;14452:6;14487;14481:13;14518:6;14510;14503:22;14556:3;14545:9;14541:19;14534:26;;14595:2;14587:6;14583:15;14569:29;;14616:1;14626:195;14640:6;14637:1;14634:13;14626:195;;;14705:13;;-1:-1:-1;;;;;14701:39:1;14689:52;;14796:15;;;;14761:12;;;;14737:1;14655:9;14626:195;;;-1:-1:-1;;;;;;;14877:32:1;;;;14872:2;14857:18;;14850:60;-1:-1:-1;;;14941:3:1;14926:19;14919:35;14838:3;13980:980;-1:-1:-1;;;13980:980:1:o;15304:1133::-;15434:3;15463:1;15496:6;15490:13;15526:3;15548:1;15576:9;15572:2;15568:18;15558:28;;15636:2;15625:9;15621:18;15658;15648:61;;15702:4;15694:6;15690:17;15680:27;;15648:61;15728:2;15776;15768:6;15765:14;15745:18;15742:38;15739:165;;-1:-1:-1;;;15803:33:1;;15859:4;15856:1;15849:15;15889:4;15810:3;15877:17;15739:165;15920:18;15947:133;;;;16094:1;16089:323;;;;15913:499;;15947:133;-1:-1:-1;;15980:24:1;;15968:37;;16053:14;;16046:22;16034:35;;16025:45;;;-1:-1:-1;15947:133:1;;16089:323;15251:1;15244:14;;;15288:4;15275:18;;16187:1;16201:165;16215:6;16212:1;16209:13;16201:165;;;16293:14;;16280:11;;;16273:35;16336:16;;;;16230:10;;16201:165;;;16205:3;;16395:6;16390:3;16386:16;16379:23;;15913:499;-1:-1:-1;16428:3:1;;15304:1133;-1:-1:-1;;;;;;;;15304:1133:1:o

Swarm Source

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