ETH Price: $3,483.88 (+2.82%)
Gas: 2 Gwei

Token

Cosmic Genie (GENIE)
 

Overview

Max Total Supply

1,000,000,000 GENIE

Holders

48

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
6,874,390.083093834 GENIE

Value
$0.00
0x7673e87a4aec2dbf5775920b1d5e752007eba87d
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:
GENIE

Compiler Version
v0.8.22+commit.4fc1097e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-04-26
*/

/**

Website: https://cosmicgenie.xyz
Twitter:  https://twitter.com/cosmicgenie
Telegram: https://t.me/cosmicgenie

*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.19;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

interface IERC20 {
    function totalSupply() external view returns (uint256);

    function decimals() external view returns (uint8);

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

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

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

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

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

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

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

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

contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
}

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

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

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

    function WETH() external pure returns (address);

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

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

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

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

contract GENIE is IERC20, Ownable {
    using SafeMath for uint256;
    string private constant _name = "Cosmic Genie";
    string private constant _symbol = "GENIE";
    uint8 private constant _decimals = 9;
    uint256 private _totalSupply = 1_000_000_000 * (10**_decimals);
    uint256 private _maxTxSize = 20_000_000 * (10**_decimals);
    uint256 private _maxWalletSize = 20_000_000 * (10**_decimals);
    uint256 private _maxSwapSize = 10_000_000 * (10**_decimals);
    uint256 private _minSwapSize = 403 * (10**_decimals);
    mapping(address => uint256) _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isExceptForCosmic;
    IRouter router;
    address public pair;
    bool private _tradingAllowed = false;
    uint256 private liqFeePercent = 0;
    uint256 private mktFeePercent = 2;
    uint256 private utlFeePercent = 0;
    uint256 private _feeTradeBuy = 1;
    uint256 private _feeTradeSell = 1;
    uint256 private _feeForTransfer = 0;
    uint256 private denominator = 100;
    bool private _swapEnabled = true;
    bool private _inSwapping;
    modifier lockTheSwap() {
        _inSwapping = true;
        _;
        _inSwapping = false;
    }

    address internal constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address internal constant _cosmicgenie = 0x4eC9217f23Daa99FdbBFF4726668C9CFA0a24191;
    address private _lpReceiver = msg.sender;

    constructor() Ownable() {
        IRouter _router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        address _pair = IFactory(_router.factory()).createPair(
            address(this),
            _router.WETH()
        );
        router = _router;
        pair = _pair;

        _isExceptForCosmic[address(this)] = true;
        _isExceptForCosmic[_lpReceiver] = true;
        _isExceptForCosmic[_cosmicgenie] = true;
        _isExceptForCosmic[msg.sender] = true;
        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    receive() external payable {}

    function name() public pure returns (string memory) {
        return _name;
    }

    function symbol() public pure returns (string memory) {
        return _symbol;
    }

    function decimals() public pure returns (uint8) {
        return _decimals;
    }

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

    function transfer(address recipient, uint256 amount)
        public
        override
        returns (bool)
    {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

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

    function approve(address spender, uint256 amount)
        public
        override
        returns (bool)
    {
        _approve(msg.sender, spender, amount);
        return true;
    }

    function totalSupply() public view override returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(address(0)));
    }

    function preTxCheck(
        address sender,
        address recipient,
        uint256 amount
    ) internal pure {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(
            amount > uint256(0),
            "Transfer amount must be greater than zero"
        );
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) private {
        preTxCheck(sender, recipient, amount);
        _checkTradingOpen(sender, recipient);
        checkMaxWallet(sender, recipient, amount);
        checkTxLimit(sender, recipient, amount);
        processSwapBack(sender, recipient, amount);
        (uint256 amountSent, uint256 amountReceived) = _callTakeFee(
            sender,
            recipient,
            amount
        );
        _balances[sender] = _balances[sender].sub(amountSent);
        _balances[recipient] = _balances[recipient].add(amountReceived);
        emit Transfer(sender, recipient, amountReceived);
    }

    function disableLimits() external onlyOwner {
        _maxTxSize = type(uint256).max;
        _maxWalletSize = type(uint256).max;
    }

    function cosmicMagic() external onlyOwner {
        require(!_tradingAllowed, "Tradeing already allowed");

        addLiquidity(balanceOf(address(this)), address(this).balance);

        mktFeePercent = 28;
        _feeTradeBuy = 28;
        _feeTradeSell = 28;
        _tradingAllowed = true;
    }

    function reduceFees(uint256 _newfees) external onlyOwner {
        mktFeePercent = _newfees;
        _feeTradeBuy = _newfees;
        _feeTradeSell = _newfees;

        require(_feeTradeBuy <= 10 && _feeTradeSell <= 10);
    }

    function _checkTradingOpen(address sender, address recipient)
        internal
        view
    {
        if (!_isExceptForCosmic[sender] && !_isExceptForCosmic[recipient]) {
            require(_tradingAllowed, "Trading not allowed yet");
        }
    }

    function checkMaxWallet(
        address sender,
        address recipient,
        uint256 amount
    ) internal view {
        if (
            !_isExceptForCosmic[sender] &&
            !_isExceptForCosmic[recipient] &&
            recipient != address(pair) &&
            recipient != address(DEAD)
        ) {
            require(
                (_balances[recipient].add(amount)) <= _maxWalletSize,
                "Exceeds maximum wallet amount."
            );
        }
    }

    function checkTxLimit(
        address sender,
        address recipient,
        uint256 amount
    ) internal view {
        require(
            amount <= _maxTxSize ||
                _isExceptForCosmic[sender] ||
                _isExceptForCosmic[recipient],
            "TX Limit Exceeded"
        );
    }

    function _swapBackTokens(uint256 tokens) private lockTheSwap {
        uint256 _denominator = (
            liqFeePercent.add(1).add(mktFeePercent).add(utlFeePercent)
        ).mul(2);
        uint256 tokensToAddLiquidityWith = tokens.mul(liqFeePercent).div(
            _denominator
        );
        uint256 toSwap = tokens.sub(tokensToAddLiquidityWith);
        uint256 initialBalance = address(this).balance;
        swapTokensForETH(toSwap);
        uint256 deltaBalance = address(this).balance.sub(initialBalance);
        uint256 unitBalance = deltaBalance.div(_denominator.sub(liqFeePercent));
        uint256 ethForLpAdd = unitBalance.mul(liqFeePercent);
        if (ethForLpAdd > uint256(0)) {
            addLiquidity(tokensToAddLiquidityWith, ethForLpAdd);
        }
        uint256 marketingAmt = unitBalance.mul(2).mul(mktFeePercent);
        if (marketingAmt > 0) {
            payable(_cosmicgenie).transfer(marketingAmt);
        }
        uint256 remainingBalance = address(this).balance;
        if (remainingBalance > uint256(0)) {
            payable(_cosmicgenie).transfer(remainingBalance);
        }
    }

    function addLiquidity(uint256 tokenAmount, uint256 ETHAmount) private {
        _approve(address(this), address(router), tokenAmount);
        router.addLiquidityETH{value: ETHAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            _lpReceiver,
            block.timestamp
        );
    }

    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
        _approve(address(this), address(router), tokenAmount);
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function _checkSwapBack(
        address sender,
        address recipient,
        uint256 amount
    ) internal view returns (bool) {
        bool aboveMin = amount >= _minSwapSize;
        bool aboveThreshold = balanceOf(address(this)) >= _minSwapSize;
        return
            !_inSwapping &&
            _swapEnabled &&
            _tradingAllowed &&
            aboveMin &&
            !_isExceptForCosmic[sender] &&
            recipient == pair &&
            aboveThreshold;
    }

    function processSwapBack(
        address sender,
        address recipient,
        uint256 amount
    ) internal {
        if (_checkSwapBack(sender, recipient, amount)) {
            uint256 swapTokens = balanceOf(address(this));
            if (swapTokens > _maxSwapSize) swapTokens = _maxSwapSize;
            _swapBackTokens(swapTokens);
        }
    }

    function _calcFeePercent(address sender, address recipient)
        internal
        view
        returns (uint256)
    {
        if (recipient == pair) {
            return _feeTradeSell;
        }
        if (sender == pair) {
            return _feeTradeBuy;
        }
        return _feeForTransfer;
    }

    function _shouldFeeTake(address sender, address recipient)
        internal
        view
        returns (bool)
    {
        return !_isExceptForCosmic[sender] && !_isExceptForCosmic[recipient];
    }

    function _callTakeFee(
        address sender,
        address recipt,
        uint256 amount
    ) internal returns (uint256, uint256) {
        uint256 xAmount = amount;
        uint256 yAmount = amount;
        uint256 zyxAmt;
        if (sender != address(this) && recipt != address(this)) {
            if (_shouldFeeTake(sender, recipt)) {
                if (_calcFeePercent(sender, recipt) > 0) {
                    zyxAmt = amount.div(denominator).mul(
                        _calcFeePercent(sender, recipt)
                    );
                    _balances[address(this)] = _balances[address(this)].add(
                        zyxAmt
                    );
                    emit Transfer(sender, address(this), zyxAmt);

                    yAmount = amount.sub(zyxAmt);
                }
            } else {
                if (recipt == pair && sender != owner()) xAmount = zyxAmt;
            }
        }
        return (xAmount, yAmount);
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(
            sender,
            msg.sender,
            _allowances[sender][msg.sender].sub(
                amount,
                "ERC20: transfer amount exceeds allowance"
            )
        );
        return true;
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cosmicMagic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"disableLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newfees","type":"uint256"}],"name":"reduceFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126009600a6200049c565b6200002290633b9aca00620004b3565b600155620000336009600a6200049c565b62000043906301312d00620004b3565b600255620000546009600a6200049c565b62000064906301312d00620004b3565b600355620000756009600a6200049c565b620000849062989680620004b3565b600455620000956009600a6200049c565b620000a390610193620004b3565b600555600a805460ff60a01b191690555f600b8190556002600c55600d8190556001600e819055600f81905560109190915560646011556012805461ff01600160b01b03191633620100000217909117905534801562000101575f80fd5b505f80546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3505f737a250d5630b4cf539739df2c5dacb4c659f2488d90505f816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000198573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001be9190620004cd565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200020a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002309190620004cd565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af11580156200027b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002a19190620004cd565b600980546001600160a01b038581166001600160a01b031992831617909255600a80548484169216919091179055305f908152600860209081526040808320805460ff199081166001908117909255601254620100009004909516845281842080548616821790557fd8125a80b1ce2eeb008d3779fea24b999376848e6404eda7662c29623bc0f68f8054861682179055338085528285208054909616821790955554600683528184208190559051908152939450919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050620004f5565b634e487b7160e01b5f52601160045260245ffd5b600181815b80851115620003e157815f1904821115620003c557620003c56200038d565b80851615620003d357918102915b93841c9390800290620003a6565b509250929050565b5f82620003f95750600162000496565b816200040757505f62000496565b81600181146200042057600281146200042b576200044b565b600191505062000496565b60ff8411156200043f576200043f6200038d565b50506001821b62000496565b5060208310610133831016604e8410600b841016171562000470575081810a62000496565b6200047c8383620003a1565b805f19048211156200049257620004926200038d565b0290505b92915050565b5f620004ac60ff841683620003e9565b9392505050565b80820281158282048414176200049657620004966200038d565b5f60208284031215620004de575f80fd5b81516001600160a01b0381168114620004ac575f80fd5b6114dc80620005035f395ff3fe6080604052600436106100e7575f3560e01c8063809f2d6211610087578063a9059cbb11610057578063a9059cbb1461029d578063aac3751d146102bc578063dd62ed3e146102db578063f928364c1461031f575f80fd5b8063809f2d621461020d5780638da5cb5b1461022157806395d89b4114610251578063a8aa1b311461027e575f80fd5b806323b872dd116100c257806323b872dd14610189578063313ce567146101a857806370a08231146101c3578063715018a6146101f7575f80fd5b806306fdde03146100f2578063095ea7b31461013857806318160ddd14610167575f80fd5b366100ee57005b5f80fd5b3480156100fd575f80fd5b5060408051808201909152600c81526b436f736d69632047656e696560a01b60208201525b60405161012f91906111dd565b60405180910390f35b348015610143575f80fd5b5061015761015236600461123d565b610333565b604051901515815260200161012f565b348015610172575f80fd5b5061017b610349565b60405190815260200161012f565b348015610194575f80fd5b506101576101a3366004611267565b6103b9565b3480156101b3575f80fd5b506040516009815260200161012f565b3480156101ce575f80fd5b5061017b6101dd3660046112a5565b6001600160a01b03165f9081526006602052604090205490565b348015610202575f80fd5b5061020b610420565b005b348015610218575f80fd5b5061020b61049a565b34801561022c575f80fd5b505f546001600160a01b03165b6040516001600160a01b03909116815260200161012f565b34801561025c575f80fd5b5060408051808201909152600581526447454e494560d81b6020820152610122565b348015610289575f80fd5b50600a54610239906001600160a01b031681565b3480156102a8575f80fd5b506101576102b736600461123d565b61055a565b3480156102c7575f80fd5b5061020b6102d63660046112c0565b610566565b3480156102e6575f80fd5b5061017b6102f53660046112d7565b6001600160a01b039182165f90815260076020908152604080832093909416825291909152205490565b34801561032a575f80fd5b5061020b6105bd565b5f61033f3384846105f2565b5060015b92915050565b60066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85461dead5f9081527f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e225460015491926103b49290916103ae9190610715565b90610715565b905090565b5f6103c5848484610727565b61041684336104118560405180606001604052806028815260200161147f602891396001600160a01b038a165f9081526007602090815260408083203384529091529020549190610821565b6105f2565b5060019392505050565b5f546001600160a01b031633146104525760405162461bcd60e51b81526004016104499061130e565b60405180910390fd5b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b031633146104c35760405162461bcd60e51b81526004016104499061130e565b600a54600160a01b900460ff161561051d5760405162461bcd60e51b815260206004820152601860248201527f5472616465696e6720616c726561647920616c6c6f77656400000000000000006044820152606401610449565b305f90815260066020526040902054610536904761084c565b601c600c819055600e819055600f55600a805460ff60a01b1916600160a01b179055565b5f61033f338484610727565b5f546001600160a01b0316331461058f5760405162461bcd60e51b81526004016104499061130e565b600c819055600e819055600f819055600a81118015906105b25750600a600f5411155b6105ba575f80fd5b50565b5f546001600160a01b031633146105e65760405162461bcd60e51b81526004016104499061130e565b5f196002819055600355565b6001600160a01b0383166106545760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610449565b6001600160a01b0382166106b55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610449565b6001600160a01b038381165f8181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f6107208284611357565b9392505050565b610732838383610903565b61073c8383610a2f565b610747838383610ad1565b610752838383610bba565b61075d838383610c44565b5f8061076a858585610c81565b6001600160a01b0387165f9081526006602052604090205491935091506107919083610715565b6001600160a01b038087165f9081526006602052604080822093909355908616815220546107bf9082610db4565b6001600160a01b038086165f8181526006602052604090819020939093559151908716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906108129085815260200190565b60405180910390a35050505050565b5f81848411156108445760405162461bcd60e51b815260040161044991906111dd565b505050900390565b6009546108649030906001600160a01b0316846105f2565b60095460125460405163f305d71960e01b8152306004820152602481018590525f6044820181905260648201526001600160a01b0362010000909204821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af11580156108d7573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906108fc919061136a565b5050505050565b6001600160a01b0383166109675760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610449565b6001600160a01b0382166109c95760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610449565b5f8111610a2a5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610449565b505050565b6001600160a01b0382165f9081526008602052604090205460ff16158015610a6f57506001600160a01b0381165f9081526008602052604090205460ff16155b15610acd57600a54600160a01b900460ff16610acd5760405162461bcd60e51b815260206004820152601760248201527f54726164696e67206e6f7420616c6c6f776564207965740000000000000000006044820152606401610449565b5050565b6001600160a01b0383165f9081526008602052604090205460ff16158015610b1157506001600160a01b0382165f9081526008602052604090205460ff16155b8015610b2b5750600a546001600160a01b03838116911614155b8015610b4257506001600160a01b03821661dead14155b15610a2a576003546001600160a01b0383165f90815260066020526040902054610b6c9083610db4565b1115610a2a5760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e00006044820152606401610449565b60025481111580610be257506001600160a01b0383165f9081526008602052604090205460ff165b80610c0457506001600160a01b0382165f9081526008602052604090205460ff165b610a2a5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610449565b610c4f838383610dbf565b15610a2a57305f90815260066020526040902054600454811115610c7257506004545b610c7b81610e64565b50505050565b5f808280826001600160a01b0388163014801590610ca857506001600160a01b0387163014155b15610da757610cb78888610fe9565b15610d74575f610cc7898961102d565b1115610d6f57610cee610cda898961102d565b601154610ce8908990611077565b90611082565b305f90815260066020526040902054909150610d0a9082610db4565b305f81815260066020526040908190209290925590516001600160a01b038a16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610d5a9085815260200190565b60405180910390a3610d6c8682610715565b91505b610da7565b600a546001600160a01b038881169116148015610d9e57505f546001600160a01b03898116911614155b15610da7578092505b5090969095509350505050565b5f6107208284611395565b600554305f908152600660205260408120546012549192808510159291101590610100900460ff16158015610df6575060125460ff165b8015610e0b5750600a54600160a01b900460ff165b8015610e145750815b8015610e3857506001600160a01b0386165f9081526008602052604090205460ff16155b8015610e515750600a546001600160a01b038681169116145b8015610e5a5750805b9695505050505050565b6012805461ff001916610100179055600d54600c54600b545f92610e9d92600292610ce89291610e979182906001610db4565b90610db4565b90505f610ebf82610eb9600b548661108290919063ffffffff16565b90611077565b90505f610ecc8483610715565b905047610ed88261108d565b5f610ee34783610715565b90505f610f05610efe600b548861071590919063ffffffff16565b8390611077565b90505f610f1d600b548361108290919063ffffffff16565b90508015610f2f57610f2f868261084c565b600c545f90610f4390610ce8856002611082565b90508015610f8b57604051734ec9217f23daa99fdbbff4726668c9cfa0a241919082156108fc029083905f818181858888f19350505050158015610f89573d5f803e3d5ffd5b505b478015610fd257604051734ec9217f23daa99fdbbff4726668c9cfa0a241919082156108fc029083905f818181858888f19350505050158015610fd0573d5f803e3d5ffd5b505b50506012805461ff00191690555050505050505050565b6001600160a01b0382165f9081526008602052604081205460ff161580156107205750506001600160a01b03165f9081526008602052604090205460ff1615919050565b600a545f906001600160a01b039081169083160361104e5750600f54610343565b600a546001600160a01b039081169084160361106d5750600e54610343565b5060105492915050565b5f61072082846113a8565b5f61072082846113c7565b6040805160028082526060820183525f9260208301908036833701905050905030815f815181106110c0576110c06113de565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611117573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061113b91906113f2565b8160018151811061114e5761114e6113de565b6001600160a01b03928316602091820292909201015260095461117491309116846105f2565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac947906111ac9085905f9086903090429060040161140d565b5f604051808303815f87803b1580156111c3575f80fd5b505af11580156111d5573d5f803e3d5ffd5b505050505050565b5f602080835283518060208501525f5b81811015611209578581018301518582016040015282016111ed565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146105ba575f80fd5b5f806040838503121561124e575f80fd5b823561125981611229565b946020939093013593505050565b5f805f60608486031215611279575f80fd5b833561128481611229565b9250602084013561129481611229565b929592945050506040919091013590565b5f602082840312156112b5575f80fd5b813561072081611229565b5f602082840312156112d0575f80fd5b5035919050565b5f80604083850312156112e8575f80fd5b82356112f381611229565b9150602083013561130381611229565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561034357610343611343565b5f805f6060848603121561137c575f80fd5b8351925060208401519150604084015190509250925092565b8082018082111561034357610343611343565b5f826113c257634e487b7160e01b5f52601260045260245ffd5b500490565b808202811582820484141761034357610343611343565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215611402575f80fd5b815161072081611229565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b8181101561145d5784516001600160a01b031683529383019391830191600101611438565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212204777f2fa0ae6c2ca401236ede21c85303a61a51ef6f19126e6b5868ff815006964736f6c63430008160033

Deployed Bytecode

0x6080604052600436106100e7575f3560e01c8063809f2d6211610087578063a9059cbb11610057578063a9059cbb1461029d578063aac3751d146102bc578063dd62ed3e146102db578063f928364c1461031f575f80fd5b8063809f2d621461020d5780638da5cb5b1461022157806395d89b4114610251578063a8aa1b311461027e575f80fd5b806323b872dd116100c257806323b872dd14610189578063313ce567146101a857806370a08231146101c3578063715018a6146101f7575f80fd5b806306fdde03146100f2578063095ea7b31461013857806318160ddd14610167575f80fd5b366100ee57005b5f80fd5b3480156100fd575f80fd5b5060408051808201909152600c81526b436f736d69632047656e696560a01b60208201525b60405161012f91906111dd565b60405180910390f35b348015610143575f80fd5b5061015761015236600461123d565b610333565b604051901515815260200161012f565b348015610172575f80fd5b5061017b610349565b60405190815260200161012f565b348015610194575f80fd5b506101576101a3366004611267565b6103b9565b3480156101b3575f80fd5b506040516009815260200161012f565b3480156101ce575f80fd5b5061017b6101dd3660046112a5565b6001600160a01b03165f9081526006602052604090205490565b348015610202575f80fd5b5061020b610420565b005b348015610218575f80fd5b5061020b61049a565b34801561022c575f80fd5b505f546001600160a01b03165b6040516001600160a01b03909116815260200161012f565b34801561025c575f80fd5b5060408051808201909152600581526447454e494560d81b6020820152610122565b348015610289575f80fd5b50600a54610239906001600160a01b031681565b3480156102a8575f80fd5b506101576102b736600461123d565b61055a565b3480156102c7575f80fd5b5061020b6102d63660046112c0565b610566565b3480156102e6575f80fd5b5061017b6102f53660046112d7565b6001600160a01b039182165f90815260076020908152604080832093909416825291909152205490565b34801561032a575f80fd5b5061020b6105bd565b5f61033f3384846105f2565b5060015b92915050565b60066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85461dead5f9081527f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e225460015491926103b49290916103ae9190610715565b90610715565b905090565b5f6103c5848484610727565b61041684336104118560405180606001604052806028815260200161147f602891396001600160a01b038a165f9081526007602090815260408083203384529091529020549190610821565b6105f2565b5060019392505050565b5f546001600160a01b031633146104525760405162461bcd60e51b81526004016104499061130e565b60405180910390fd5b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b031633146104c35760405162461bcd60e51b81526004016104499061130e565b600a54600160a01b900460ff161561051d5760405162461bcd60e51b815260206004820152601860248201527f5472616465696e6720616c726561647920616c6c6f77656400000000000000006044820152606401610449565b305f90815260066020526040902054610536904761084c565b601c600c819055600e819055600f55600a805460ff60a01b1916600160a01b179055565b5f61033f338484610727565b5f546001600160a01b0316331461058f5760405162461bcd60e51b81526004016104499061130e565b600c819055600e819055600f819055600a81118015906105b25750600a600f5411155b6105ba575f80fd5b50565b5f546001600160a01b031633146105e65760405162461bcd60e51b81526004016104499061130e565b5f196002819055600355565b6001600160a01b0383166106545760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610449565b6001600160a01b0382166106b55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610449565b6001600160a01b038381165f8181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f6107208284611357565b9392505050565b610732838383610903565b61073c8383610a2f565b610747838383610ad1565b610752838383610bba565b61075d838383610c44565b5f8061076a858585610c81565b6001600160a01b0387165f9081526006602052604090205491935091506107919083610715565b6001600160a01b038087165f9081526006602052604080822093909355908616815220546107bf9082610db4565b6001600160a01b038086165f8181526006602052604090819020939093559151908716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906108129085815260200190565b60405180910390a35050505050565b5f81848411156108445760405162461bcd60e51b815260040161044991906111dd565b505050900390565b6009546108649030906001600160a01b0316846105f2565b60095460125460405163f305d71960e01b8152306004820152602481018590525f6044820181905260648201526001600160a01b0362010000909204821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af11580156108d7573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906108fc919061136a565b5050505050565b6001600160a01b0383166109675760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610449565b6001600160a01b0382166109c95760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610449565b5f8111610a2a5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610449565b505050565b6001600160a01b0382165f9081526008602052604090205460ff16158015610a6f57506001600160a01b0381165f9081526008602052604090205460ff16155b15610acd57600a54600160a01b900460ff16610acd5760405162461bcd60e51b815260206004820152601760248201527f54726164696e67206e6f7420616c6c6f776564207965740000000000000000006044820152606401610449565b5050565b6001600160a01b0383165f9081526008602052604090205460ff16158015610b1157506001600160a01b0382165f9081526008602052604090205460ff16155b8015610b2b5750600a546001600160a01b03838116911614155b8015610b4257506001600160a01b03821661dead14155b15610a2a576003546001600160a01b0383165f90815260066020526040902054610b6c9083610db4565b1115610a2a5760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e00006044820152606401610449565b60025481111580610be257506001600160a01b0383165f9081526008602052604090205460ff165b80610c0457506001600160a01b0382165f9081526008602052604090205460ff165b610a2a5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610449565b610c4f838383610dbf565b15610a2a57305f90815260066020526040902054600454811115610c7257506004545b610c7b81610e64565b50505050565b5f808280826001600160a01b0388163014801590610ca857506001600160a01b0387163014155b15610da757610cb78888610fe9565b15610d74575f610cc7898961102d565b1115610d6f57610cee610cda898961102d565b601154610ce8908990611077565b90611082565b305f90815260066020526040902054909150610d0a9082610db4565b305f81815260066020526040908190209290925590516001600160a01b038a16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610d5a9085815260200190565b60405180910390a3610d6c8682610715565b91505b610da7565b600a546001600160a01b038881169116148015610d9e57505f546001600160a01b03898116911614155b15610da7578092505b5090969095509350505050565b5f6107208284611395565b600554305f908152600660205260408120546012549192808510159291101590610100900460ff16158015610df6575060125460ff165b8015610e0b5750600a54600160a01b900460ff165b8015610e145750815b8015610e3857506001600160a01b0386165f9081526008602052604090205460ff16155b8015610e515750600a546001600160a01b038681169116145b8015610e5a5750805b9695505050505050565b6012805461ff001916610100179055600d54600c54600b545f92610e9d92600292610ce89291610e979182906001610db4565b90610db4565b90505f610ebf82610eb9600b548661108290919063ffffffff16565b90611077565b90505f610ecc8483610715565b905047610ed88261108d565b5f610ee34783610715565b90505f610f05610efe600b548861071590919063ffffffff16565b8390611077565b90505f610f1d600b548361108290919063ffffffff16565b90508015610f2f57610f2f868261084c565b600c545f90610f4390610ce8856002611082565b90508015610f8b57604051734ec9217f23daa99fdbbff4726668c9cfa0a241919082156108fc029083905f818181858888f19350505050158015610f89573d5f803e3d5ffd5b505b478015610fd257604051734ec9217f23daa99fdbbff4726668c9cfa0a241919082156108fc029083905f818181858888f19350505050158015610fd0573d5f803e3d5ffd5b505b50506012805461ff00191690555050505050505050565b6001600160a01b0382165f9081526008602052604081205460ff161580156107205750506001600160a01b03165f9081526008602052604090205460ff1615919050565b600a545f906001600160a01b039081169083160361104e5750600f54610343565b600a546001600160a01b039081169084160361106d5750600e54610343565b5060105492915050565b5f61072082846113a8565b5f61072082846113c7565b6040805160028082526060820183525f9260208301908036833701905050905030815f815181106110c0576110c06113de565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611117573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061113b91906113f2565b8160018151811061114e5761114e6113de565b6001600160a01b03928316602091820292909201015260095461117491309116846105f2565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac947906111ac9085905f9086903090429060040161140d565b5f604051808303815f87803b1580156111c3575f80fd5b505af11580156111d5573d5f803e3d5ffd5b505050505050565b5f602080835283518060208501525f5b81811015611209578581018301518582016040015282016111ed565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146105ba575f80fd5b5f806040838503121561124e575f80fd5b823561125981611229565b946020939093013593505050565b5f805f60608486031215611279575f80fd5b833561128481611229565b9250602084013561129481611229565b929592945050506040919091013590565b5f602082840312156112b5575f80fd5b813561072081611229565b5f602082840312156112d0575f80fd5b5035919050565b5f80604083850312156112e8575f80fd5b82356112f381611229565b9150602083013561130381611229565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561034357610343611343565b5f805f6060848603121561137c575f80fd5b8351925060208401519150604084015190509250925092565b8082018082111561034357610343611343565b5f826113c257634e487b7160e01b5f52601260045260245ffd5b500490565b808202811582820484141761034357610343611343565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215611402575f80fd5b815161072081611229565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b8181101561145d5784516001600160a01b031683529383019391830191600101611438565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212204777f2fa0ae6c2ca401236ede21c85303a61a51ef6f19126e6b5868ff815006964736f6c63430008160033

Deployed Bytecode Sourcemap

6167:11480:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8308:83;;;;;;;;;;-1:-1:-1;8378:5:0;;;;;;;;;;;;-1:-1:-1;;;8378:5:0;;;;8308:83;;;;;;;:::i;:::-;;;;;;;;9109:191;;;;;;;;;;-1:-1:-1;9109:191:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;9109:191:0;1023:187:1;9308:148:0;;;;;;;;;;;;;:::i;:::-;;;1361:25:1;;;1349:2;1334:18;9308:148:0;1215:177:1;16825:442:0;;;;;;;;;;-1:-1:-1;16825:442:0;;;;;:::i;:::-;;:::i;8494:83::-;;;;;;;;;;-1:-1:-1;8494:83:0;;6377:1;2000:36:1;;1988:2;1973:18;8494:83:0;1858:184:1;8585:119:0;;;;;;;;;;-1:-1:-1;8585:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;8678:18:0;8651:7;8678:18;;;:9;:18;;;;;;;8585:119;4443:148;;;;;;;;;;;;;:::i;:::-;;10751:309;;;;;;;;;;;;;:::i;4229:79::-;;;;;;;;;;-1:-1:-1;4267:7:0;4294:6;-1:-1:-1;;;;;4294:6:0;4229:79;;;-1:-1:-1;;;;;2463:32:1;;;2445:51;;2433:2;2418:18;4229:79:0;2299:203:1;8399:87:0;;;;;;;;;;-1:-1:-1;8471:7:0;;;;;;;;;;;;-1:-1:-1;;;8471:7:0;;;;8399:87;;6908:19;;;;;;;;;;-1:-1:-1;6908:19:0;;;;-1:-1:-1;;;;;6908:19:0;;;8712:197;;;;;;;;;;-1:-1:-1;8712:197:0;;;;;:::i;:::-;;:::i;11068:232::-;;;;;;;;;;-1:-1:-1;11068:232:0;;;;;:::i;:::-;;:::i;8917:184::-;;;;;;;;;;-1:-1:-1;8917:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;9066:18:0;;;9034:7;9066:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;8917:184;10605:138;;;;;;;;;;;;;:::i;9109:191::-;9211:4;9233:37;9242:10;9254:7;9263:6;9233:8;:37::i;:::-;-1:-1:-1;9288:4:0;9109:191;;;;;:::o;9308:148::-;8678:9;:18;;;;7471:42;9361:7;8678:18;;;;;9388:12;;9361:7;;9388:60;;8678:18;;9388:33;;:12;:16;:33::i;:::-;:37;;:60::i;:::-;9381:67;;9308:148;:::o;16825:442::-;16957:4;16974:36;16984:6;16992:9;17003:6;16974:9;:36::i;:::-;17021:216;17044:6;17065:10;17090:136;17144:6;17090:136;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17090:19:0;;;;;;:11;:19;;;;;;;;17110:10;17090:31;;;;;;;;;:136;:35;:136::i;:::-;17021:8;:216::i;:::-;-1:-1:-1;17255:4:0;16825:442;;;;;:::o;4443:148::-;4356:6;;-1:-1:-1;;;;;4356:6:0;304:10;4356:22;4348:67;;;;-1:-1:-1;;;4348:67:0;;;;;;;:::i;:::-;;;;;;;;;4550:1:::1;4534:6:::0;;4513:40:::1;::::0;-1:-1:-1;;;;;4534:6:0;;::::1;::::0;4513:40:::1;::::0;4550:1;;4513:40:::1;4581:1;4564:19:::0;;-1:-1:-1;;;;;;4564:19:0::1;::::0;;4443:148::o;10751:309::-;4356:6;;-1:-1:-1;;;;;4356:6:0;304:10;4356:22;4348:67;;;;-1:-1:-1;;;4348:67:0;;;;;;;:::i;:::-;10813:15:::1;::::0;-1:-1:-1;;;10813:15:0;::::1;;;10812:16;10804:53;;;::::0;-1:-1:-1;;;10804:53:0;;3648:2:1;10804:53:0::1;::::0;::::1;3630:21:1::0;3687:2;3667:18;;;3660:30;3726:26;3706:18;;;3699:54;3770:18;;10804:53:0::1;3446:348:1::0;10804:53:0::1;10901:4;8651:7:::0;8678:18;;;:9;:18;;;;;;10870:61:::1;::::0;10909:21:::1;10870:12;:61::i;:::-;10960:2;10944:13;:18:::0;;;10973:12:::1;:17:::0;;;11001:13:::1;:18:::0;11030:15:::1;:22:::0;;-1:-1:-1;;;;11030:22:0::1;-1:-1:-1::0;;;11030:22:0::1;::::0;;10751:309::o;8712:197::-;8817:4;8839:40;8849:10;8861:9;8872:6;8839:9;:40::i;11068:232::-;4356:6;;-1:-1:-1;;;;;4356:6:0;304:10;4356:22;4348:67;;;;-1:-1:-1;;;4348:67:0;;;;;;;:::i;:::-;11136:13:::1;:24:::0;;;11171:12:::1;:23:::0;;;11205:13:::1;:24:::0;;;11266:2:::1;11250:18:::0;::::1;::::0;::::1;::::0;:41:::1;;;11289:2;11272:13;;:19;;11250:41;11242:50;;;::::0;::::1;;11068:232:::0;:::o;10605:138::-;4356:6;;-1:-1:-1;;;;;4356:6:0;304:10;4356:22;4348:67;;;;-1:-1:-1;;;4348:67:0;;;;;;;:::i;:::-;-1:-1:-1;;10660:10:0::1;:30:::0;;;10701:14:::1;:34:::0;10605:138::o;17275:369::-;-1:-1:-1;;;;;17402:19:0;;17394:68;;;;-1:-1:-1;;;17394:68:0;;4001:2:1;17394:68:0;;;3983:21:1;4040:2;4020:18;;;4013:30;4079:34;4059:18;;;4052:62;-1:-1:-1;;;4130:18:1;;;4123:34;4174:19;;17394:68:0;3799:400:1;17394:68:0;-1:-1:-1;;;;;17481:21:0;;17473:68;;;;-1:-1:-1;;;17473:68:0;;4406:2:1;17473:68:0;;;4388:21:1;4445:2;4425:18;;;4418:30;4484:34;4464:18;;;4457:62;-1:-1:-1;;;4535:18:1;;;4528:32;4577:19;;17473:68:0;4204:398:1;17473:68:0;-1:-1:-1;;;;;17552:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;17604:32;;1361:25:1;;;17604:32:0;;1334:18:1;17604:32:0;;;;;;;17275:369;;;:::o;459:98::-;517:7;544:5;548:1;544;:5;:::i;:::-;537:12;459:98;-1:-1:-1;;;459:98:0:o;9883:714::-;10006:37;10017:6;10025:9;10036:6;10006:10;:37::i;:::-;10054:36;10072:6;10080:9;10054:17;:36::i;:::-;10101:41;10116:6;10124:9;10135:6;10101:14;:41::i;:::-;10153:39;10166:6;10174:9;10185:6;10153:12;:39::i;:::-;10203:42;10219:6;10227:9;10238:6;10203:15;:42::i;:::-;10257:18;10277:22;10303:89;10330:6;10351:9;10375:6;10303:12;:89::i;:::-;-1:-1:-1;;;;;10423:17:0;;;;;;:9;:17;;;;;;10256:136;;-1:-1:-1;10256:136:0;-1:-1:-1;10423:33:0;;10256:136;10423:21;:33::i;:::-;-1:-1:-1;;;;;10403:17:0;;;;;;;:9;:17;;;;;;:53;;;;10490:20;;;;;;;:40;;10515:14;10490:24;:40::i;:::-;-1:-1:-1;;;;;10467:20:0;;;;;;;:9;:20;;;;;;;:63;;;;10546:43;;;;;;;;;;10574:14;1361:25:1;;1349:2;1334:18;;1215:177;10546:43:0;;;;;;;;9995:602;;9883:714;;;:::o;2159:240::-;2279:7;2340:12;2332:6;;;;2324:29;;;;-1:-1:-1;;;2324:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;2375:5:0;;;2159:240::o;13582:346::-;13695:6;;13663:53;;13680:4;;-1:-1:-1;;;;;13695:6:0;13704:11;13663:8;:53::i;:::-;13727:6;;13868:11;;13727:193;;-1:-1:-1;;;13727:193:0;;13790:4;13727:193;;;5213:34:1;5263:18;;;5256:34;;;-1:-1:-1;5306:18:1;;;5299:34;;;5349:18;;;5342:34;-1:-1:-1;;;;;13868:11:0;;;;;;5392:19:1;;;5385:44;13894:15:0;5445:19:1;;;5438:35;13727:6:0;;;:22;;13757:9;;5147:19:1;;13727:193:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;13582:346;;:::o;9464:411::-;-1:-1:-1;;;;;9602:20:0;;9594:70;;;;-1:-1:-1;;;9594:70:0;;5997:2:1;9594:70:0;;;5979:21:1;6036:2;6016:18;;;6009:30;6075:34;6055:18;;;6048:62;-1:-1:-1;;;6126:18:1;;;6119:35;6171:19;;9594:70:0;5795:401:1;9594:70:0;-1:-1:-1;;;;;9683:23:0;;9675:71;;;;-1:-1:-1;;;9675:71:0;;6403:2:1;9675:71:0;;;6385:21:1;6442:2;6422:18;;;6415:30;6481:34;6461:18;;;6454:62;-1:-1:-1;;;6532:18:1;;;6525:33;6575:19;;9675:71:0;6201:399:1;9675:71:0;9796:1;9779:6;:19;9757:110;;;;-1:-1:-1;;;9757:110:0;;6807:2:1;9757:110:0;;;6789:21:1;6846:2;6826:18;;;6819:30;6885:34;6865:18;;;6858:62;-1:-1:-1;;;6936:18:1;;;6929:39;6985:19;;9757:110:0;6605:405:1;9757:110:0;9464:411;;;:::o;11308:262::-;-1:-1:-1;;;;;11423:26:0;;;;;;:18;:26;;;;;;;;11422:27;:61;;;;-1:-1:-1;;;;;;11454:29:0;;;;;;:18;:29;;;;;;;;11453:30;11422:61;11418:145;;;11508:15;;-1:-1:-1;;;11508:15:0;;;;11500:51;;;;-1:-1:-1;;;11500:51:0;;7217:2:1;11500:51:0;;;7199:21:1;7256:2;7236:18;;;7229:30;7295:25;7275:18;;;7268:53;7338:18;;11500:51:0;7015:347:1;11500:51:0;11308:262;;:::o;11578:502::-;-1:-1:-1;;;;;11731:26:0;;;;;;:18;:26;;;;;;;;11730:27;:74;;;;-1:-1:-1;;;;;;11775:29:0;;;;;;:18;:29;;;;;;;;11774:30;11730:74;:117;;;;-1:-1:-1;11842:4:0;;-1:-1:-1;;;;;11821:26:0;;;11842:4;;11821:26;;11730:117;:160;;;;-1:-1:-1;;;;;;11864:26:0;;7471:42;11864:26;;11730:160;11712:361;;;11981:14;;-1:-1:-1;;;;;11944:20:0;;;;;;:9;:20;;;;;;:32;;11969:6;11944:24;:32::i;:::-;11943:52;;11917:144;;;;-1:-1:-1;;;11917:144:0;;7569:2:1;11917:144:0;;;7551:21:1;7608:2;7588:18;;;7581:30;7647:32;7627:18;;;7620:60;7697:18;;11917:144:0;7367:354:1;12088:324:0;12252:10;;12242:6;:20;;:67;;;-1:-1:-1;;;;;;12283:26:0;;;;;;:18;:26;;;;;;;;12242:67;:117;;;-1:-1:-1;;;;;;12330:29:0;;;;;;:18;:29;;;;;;;;12242:117;12220:184;;;;-1:-1:-1;;;12220:184:0;;7928:2:1;12220:184:0;;;7910:21:1;7967:2;7947:18;;;7940:30;-1:-1:-1;;;7986:18:1;;;7979:47;8043:18;;12220:184:0;7726:341:1;14902:369:0;15036:41;15051:6;15059:9;15070:6;15036:14;:41::i;:::-;15032:232;;;15133:4;15094:18;8678;;;:9;:18;;;;;;15171:12;;15158:25;;15154:56;;;-1:-1:-1;15198:12:0;;15154:56;15225:27;15241:10;15225:15;:27::i;:::-;15079:185;14902:369;;;:::o;15823:994::-;15945:7;;15992:6;;15945:7;-1:-1:-1;;;;;16073:23:0;;16091:4;16073:23;;;;:50;;-1:-1:-1;;;;;;16100:23:0;;16118:4;16100:23;;16073:50;16069:705;;;16144:30;16159:6;16167;16144:14;:30::i;:::-;16140:623;;;16233:1;16199:31;16215:6;16223;16199:15;:31::i;:::-;:35;16195:455;;;16268:108;16322:31;16338:6;16346;16322:15;:31::i;:::-;16279:11;;16268:23;;:6;;:10;:23::i;:::-;:27;;:108::i;:::-;16444:4;16426:24;;;;:9;:24;;;;;;16259:117;;-1:-1:-1;16426:84:0;;16259:117;16426:28;:84::i;:::-;16417:4;16399:24;;;;:9;:24;;;;;;;:111;;;;16538:39;;-1:-1:-1;;;;;16538:39:0;;;;;;;16570:6;1361:25:1;;1349:2;1334:18;;1215:177;16538:39:0;;;;;;;;16612:18;:6;16623;16612:10;:18::i;:::-;16602:28;;16195:455;16140:623;;;16704:4;;-1:-1:-1;;;;;16694:14:0;;;16704:4;;16694:14;:35;;;;-1:-1:-1;4267:7:0;4294:6;-1:-1:-1;;;;;16712:17:0;;;4294:6;;16712:17;;16694:35;16690:57;;;16741:6;16731:16;;16690:57;-1:-1:-1;16792:7:0;;;;-1:-1:-1;15823:994:0;-1:-1:-1;;;;15823:994:0:o;353:98::-;411:7;438:5;442:1;438;:5;:::i;14388:506::-;14563:12;;14626:4;14520;8678:18;;;:9;:18;;;;;;14680:11;;14520:4;;14553:22;;;;;-1:-1:-1;;14608:40:0;;14680:11;;;;;14679:12;:41;;;;-1:-1:-1;14708:12:0;;;;14679:41;:73;;;;-1:-1:-1;14737:15:0;;-1:-1:-1;;;14737:15:0;;;;14679:73;:98;;;;;14769:8;14679:98;:142;;;;-1:-1:-1;;;;;;14795:26:0;;;;;;:18;:26;;;;;;;;14794:27;14679:142;:176;;;;-1:-1:-1;14851:4:0;;-1:-1:-1;;;;;14838:17:0;;;14851:4;;14838:17;14679:176;:207;;;;;14872:14;14679:207;14659:227;14388:506;-1:-1:-1;;;;;;14388:506:0:o;12420:1154::-;7362:11;:18;;-1:-1:-1;;7362:18:0;;;;;12574:13:::1;::::0;12555::::1;::::0;12530::::1;::::0;7362:18;;12515:91:::1;::::0;12604:1:::1;::::0;12530:58:::1;::::0;12574:13;12530:39:::1;::::0;;;7376:4;12530:17:::1;:20::i;:::-;:24:::0;::::1;:39::i;12515:91::-;12492:114;;12617:32;12652:67;12696:12;12652:25;12663:13;;12652:6;:10;;:25;;;;:::i;:::-;:29:::0;::::1;:67::i;:::-;12617:102:::0;-1:-1:-1;12730:14:0::1;12747:36;:6:::0;12617:102;12747:10:::1;:36::i;:::-;12730:53:::0;-1:-1:-1;12819:21:0::1;12851:24;12730:53:::0;12851:16:::1;:24::i;:::-;12886:20;12909:41;:21;12935:14:::0;12909:25:::1;:41::i;:::-;12886:64;;12961:19;12983:49;13000:31;13017:13;;13000:12;:16;;:31;;;;:::i;:::-;12983:12:::0;;:16:::1;:49::i;:::-;12961:71;;13043:19;13065:30;13081:13;;13065:11;:15;;:30;;;;:::i;:::-;13043:52:::0;-1:-1:-1;13110:24:0;;13106:108:::1;;13151:51;13164:24;13190:11;13151:12;:51::i;:::-;13270:13;::::0;13224:20:::1;::::0;13247:37:::1;::::0;:18:::1;:11:::0;13263:1:::1;13247:15;:18::i;:37::-;13224:60:::0;-1:-1:-1;13299:16:0;;13295:93:::1;;13332:44;::::0;7561:42:::1;::::0;13332:44;::::1;;;::::0;13363:12;;13332:44:::1;::::0;;;13363:12;7561:42;13332:44;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;13295:93;13425:21;13461:29:::0;;13457:110:::1;;13507:48;::::0;7561:42:::1;::::0;13507:48;::::1;;;::::0;13538:16;;13507:48:::1;::::0;;;13538:16;7561:42;13507:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;13457:110;-1:-1:-1::0;;7403:11:0;:19;;-1:-1:-1;;7403:19:0;;;-1:-1:-1;;;;;;;;12420:1154:0:o;15608:207::-;-1:-1:-1;;;;;15747:26:0;;15717:4;15747:26;;;:18;:26;;;;;;;;15746:27;:61;;;;-1:-1:-1;;;;;;;15778:29:0;;;;;:18;:29;;;;;;;;15777:30;;15608:207;-1:-1:-1;15608:207:0:o;15279:321::-;15431:4;;15389:7;;-1:-1:-1;;;;;15431:4:0;;;15418:17;;;;15414:70;;-1:-1:-1;15459:13:0;;15452:20;;15414:70;15508:4;;-1:-1:-1;;;;;15508:4:0;;;15498:14;;;;15494:66;;-1:-1:-1;15536:12:0;;15529:19;;15494:66;-1:-1:-1;15577:15:0;;15279:321;;;;:::o;671:98::-;729:7;756:5;760:1;756;:5;:::i;565:98::-;623:7;650:5;654:1;650;:5;:::i;13936:444::-;14026:16;;;14040:1;14026:16;;;;;;;;14002:21;;14026:16;;;;;;;;;;-1:-1:-1;14026:16:0;14002:40;;14071:4;14053;14058:1;14053:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;14053:23:0;;;:7;;;;;;;;;;:23;;;;14097:6;;:13;;;-1:-1:-1;;;14097:13:0;;;;:6;;;;;:11;;:13;;;;;14053:7;;14097:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14087:4;14092:1;14087:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;14087:23:0;;;:7;;;;;;;;;:23;14153:6;;14121:53;;14138:4;;14153:6;14162:11;14121:8;:53::i;:::-;14185:6;;:187;;-1:-1:-1;;;14185:187:0;;-1:-1:-1;;;;;14185:6:0;;;;:57;;:187;;14257:11;;14185:6;;14299:4;;14326;;14346:15;;14185:187;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13991:389;13936:444;:::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;1397:456::-;1474:6;1482;1490;1543:2;1531:9;1522:7;1518:23;1514:32;1511:52;;;1559:1;1556;1549:12;1511:52;1598:9;1585:23;1617:31;1642:5;1617:31;:::i;:::-;1667:5;-1:-1:-1;1724:2:1;1709:18;;1696:32;1737:33;1696:32;1737:33;:::i;:::-;1397:456;;1789:7;;-1:-1:-1;;;1843:2:1;1828:18;;;;1815:32;;1397:456::o;2047:247::-;2106:6;2159:2;2147:9;2138:7;2134:23;2130:32;2127:52;;;2175:1;2172;2165:12;2127:52;2214:9;2201:23;2233:31;2258:5;2233:31;:::i;2507:180::-;2566:6;2619:2;2607:9;2598:7;2594:23;2590:32;2587:52;;;2635:1;2632;2625:12;2587:52;-1:-1:-1;2658:23:1;;2507:180;-1:-1:-1;2507:180:1:o;2692:388::-;2760:6;2768;2821:2;2809:9;2800:7;2796:23;2792:32;2789:52;;;2837:1;2834;2827:12;2789:52;2876:9;2863:23;2895:31;2920:5;2895:31;:::i;:::-;2945:5;-1:-1:-1;3002:2:1;2987:18;;2974:32;3015:33;2974:32;3015:33;:::i;:::-;3067:7;3057:17;;;2692:388;;;;;:::o;3085:356::-;3287:2;3269:21;;;3306:18;;;3299:30;3365:34;3360:2;3345:18;;3338:62;3432:2;3417:18;;3085:356::o;4607:127::-;4668:10;4663:3;4659:20;4656:1;4649:31;4699:4;4696:1;4689:15;4723:4;4720:1;4713:15;4739:128;4806:9;;;4827:11;;;4824:37;;;4841:18;;:::i;5484:306::-;5572:6;5580;5588;5641:2;5629:9;5620:7;5616:23;5612:32;5609:52;;;5657:1;5654;5647:12;5609:52;5686:9;5680:16;5670:26;;5736:2;5725:9;5721:18;5715:25;5705:35;;5780:2;5769:9;5765:18;5759:25;5749:35;;5484:306;;;;;:::o;8072:125::-;8137:9;;;8158:10;;;8155:36;;;8171:18;;:::i;8202:217::-;8242:1;8268;8258:132;;8312:10;8307:3;8303:20;8300:1;8293:31;8347:4;8344:1;8337:15;8375:4;8372:1;8365:15;8258:132;-1:-1:-1;8404:9:1;;8202:217::o;8424:168::-;8497:9;;;8528;;8545:15;;;8539:22;;8525:37;8515:71;;8566:18;;:::i;8729:127::-;8790:10;8785:3;8781:20;8778:1;8771:31;8821:4;8818:1;8811:15;8845:4;8842:1;8835:15;8861:251;8931:6;8984:2;8972:9;8963:7;8959:23;8955:32;8952:52;;;9000:1;8997;8990:12;8952:52;9032:9;9026:16;9051:31;9076:5;9051:31;:::i;9117:980::-;9379:4;9427:3;9416:9;9412:19;9458:6;9447:9;9440:25;9484:2;9522:6;9517:2;9506:9;9502:18;9495:34;9565:3;9560:2;9549:9;9545:18;9538:31;9589:6;9624;9618:13;9655:6;9647;9640:22;9693:3;9682:9;9678:19;9671:26;;9732:2;9724:6;9720:15;9706:29;;9753:1;9763:195;9777:6;9774:1;9771:13;9763:195;;;9842:13;;-1:-1:-1;;;;;9838:39:1;9826:52;;9933:15;;;;9898:12;;;;9874:1;9792:9;9763:195;;;-1:-1:-1;;;;;;;10014:32:1;;;;10009:2;9994:18;;9987:60;-1:-1:-1;;;10078:3:1;10063:19;10056:35;9975:3;9117:980;-1:-1:-1;;;9117:980:1:o

Swarm Source

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